aqbanking-6.6.1/0000755000175000017500000000000015037736165010475 500000000000000aqbanking-6.6.1/src/0000755000175000017500000000000015037736165011264 500000000000000aqbanking-6.6.1/src/test/0000755000175000017500000000000015037736165012243 500000000000000aqbanking-6.6.1/src/test/imptest.c0000664000175000017500000001351714043610745014014 00000000000000/*************************************************************************** begin : Fri Jun 29 2018 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include int importData(AB_BANKING *ab, AB_IMEXPORTER_CONTEXT *ctx, const char *importerName, const char *profileName, GWEN_BUFFER *dataBuf) { int rv; /*GWEN_Buffer_Dump(dataBuf, 2);*/ rv=AB_Banking_ImportFromBufferLoadProfile(ab, importerName, ctx, profileName, NULL, (const uint8_t *) GWEN_Buffer_GetStart(dataBuf), GWEN_Buffer_GetUsedBytes(dataBuf)); if (rv<0) { fprintf(stderr, "Error importing data: %d\n", rv); return rv; } return 0; } int testFile(AB_BANKING *ab, const char *fname) { int rv; GWEN_XMLNODE *doc; GWEN_XMLNODE *n; const char *data; const char *importerName=NULL; const char *profileName=NULL; GWEN_BUFFER *dataBuf=NULL; GWEN_DB_NODE *dbExpected=NULL; AB_IMEXPORTER_CONTEXT *ctxImported; AB_IMEXPORTER_CONTEXT *ctxReference; doc=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "root"); rv=GWEN_XML_ReadFile(doc, fname, GWEN_XML_FLAGS_DEFAULT | GWEN_XML_FLAGS_KEEP_CNTRL); if (rv<0) { fprintf(stderr, "Error reading XML file: %d\n", rv); return rv; } /*GWEN_XMLNode_Dump(doc, 2);*/ n=GWEN_XMLNode_FindFirstTag(doc, "importtest", NULL, NULL); if (n==NULL) { fprintf(stderr, "importtest element not found.\n"); return 2; } importerName=GWEN_XMLNode_GetProperty(n, "importer", NULL); profileName=GWEN_XMLNode_GetProperty(n, "profile", NULL); /* read testdata */ if (!(importerName && *importerName && profileName && *profileName)) { fprintf(stderr, "importtest missing importer name and/or profile name.\n"); return 2; } data=GWEN_XMLNode_GetCharValue(n, "testdata", NULL); if (!(data && *data)) { fprintf(stderr, "importtest missing testdata.\n"); return 2; } dataBuf=GWEN_Buffer_new(0, 1024, 0, 1); rv=GWEN_Base64_Decode((const unsigned char *)data, strlen(data), dataBuf); if (rv<0) { fprintf(stderr, "testdata is not base64 encoded (%d).\n", rv); return 2; } GWEN_Buffer_Rewind(dataBuf); /* now dataBuffer, importerName and profileName are set */ /* read expected results */ data=GWEN_XMLNode_GetCharValue(n, "expectedresult", NULL); if (!(data && *data)) { fprintf(stderr, "importtest missing testdata.\n"); return 2; } dbExpected=GWEN_DB_Group_new("expectedResult"); rv=GWEN_DB_ReadFromString(dbExpected, data, strlen(data), GWEN_DB_FLAGS_DEFAULT | GWEN_PATH_FLAGS_CREATE_GROUP); if (rv<0) { fprintf(stderr, "Error reading DB of expected results: %d\n", rv); return rv; } ctxReference=AB_ImExporterContext_fromDb(dbExpected); if (ctxReference==NULL) { fprintf(stderr, "Error readinng expected context.\n"); return 2; } ctxImported=AB_ImExporterContext_new(); rv=importData(ab, ctxImported, importerName, profileName, dataBuf); if (rv<0) { fprintf(stderr, "Error importing testdata: %d\n", rv); return rv; } if (1) { GWEN_DB_NODE *dbReference; GWEN_DB_NODE *dbImported; GWEN_BUFFER *buf1; GWEN_BUFFER *buf2; const char *s1; const char *s2; dbReference=GWEN_DB_Group_new("reference"); dbImported=GWEN_DB_Group_new("imported"); AB_ImExporterContext_toDb(ctxReference, dbReference); AB_ImExporterContext_toDb(ctxImported, dbImported); buf1=GWEN_Buffer_new(0, 256, 0, 1); buf2=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_DB_WriteToBuffer(dbReference, buf1, GWEN_DB_FLAGS_DEFAULT); if (rv<0) { fprintf(stderr, "Error writing reference DB to buffer: %d\n", rv); return rv; } rv=GWEN_DB_WriteToBuffer(dbImported, buf2, GWEN_DB_FLAGS_DEFAULT); if (rv<0) { fprintf(stderr, "Error writing imported DB to buffer: %d\n", rv); return rv; } s1=GWEN_Buffer_GetStart(buf1); s2=GWEN_Buffer_GetStart(buf2); if (strcmp(s1, s2)!=0) { fprintf(stderr, "Contexts don't match:\n1:%s\n2:%s\n", s1, s2); GWEN_Buffer_free(buf2); GWEN_Buffer_free(buf1); return 2; } GWEN_Buffer_free(buf2); GWEN_Buffer_free(buf1); } /* now dataBuffer, importerName, profileName and dbExpected are set */ return 0; } int main(int argc, char **argv) { AB_BANKING *ab; int rv; int rvTest; const char *inFile=NULL; if (argc<2) { fprintf(stderr, "No file name given\n"); return 1; } inFile=argv[1]; /*fprintf(stderr, "Creating AB_Banking...\n");*/ ab=AB_Banking_new("imptest", "./aqbanking.conf", 0); /*fprintf(stderr, "Initializing AB_Banking...\n");*/ rv=AB_Banking_Init(ab); if (rv) { fprintf(stderr, "Could not init AqBanking (%d)\n", rv); return 2; } rvTest=testFile(ab, inFile); /*fprintf(stderr, "Deinitializing AB_Banking...\n");*/ rv=AB_Banking_Fini(ab); if (rv) { fprintf(stderr, "Could not deinit AqBanking (%d)\n", rv); return 2; } /*fprintf(stderr, "Freeing AB_Banking...\n");*/ AB_Banking_free(ab); if (rvTest!=0) fprintf(stderr, "Failed.\n"); else fprintf(stderr, "Passed.\n"); return 0; } aqbanking-6.6.1/src/test/abtest.c0000664000175000017500000007315114043610745013611 00000000000000 #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include int test1(int argc, char **argv) { AB_BANKING *ab; int rv; fprintf(stderr, "Creating AB_Banking...\n"); ab=AB_Banking_new("abtest", "./aqbanking.conf", 0); fprintf(stderr, "Initializing AB_Banking...\n"); rv=AB_Banking_Init(ab); if (rv) { fprintf(stderr, "Could not init AqBanking (%d)\n", rv); return 2; } fprintf(stderr, "Deinitializing AB_Banking...\n"); rv=AB_Banking_Fini(ab); if (rv) { fprintf(stderr, "Could not deinit AqBanking (%d)\n", rv); return 2; } fprintf(stderr, "Freeing AB_Banking...\n"); AB_Banking_free(ab); fprintf(stderr, "Finished\n"); return 0; } int test3(int argc, char **argv) { AB_BANKING *ab; int rv; fprintf(stderr, "Creating AB_Banking...\n"); ab=AB_Banking_new("abtest", "./aqbanking.conf", 0); fprintf(stderr, "Initializing AB_Banking...\n"); rv=AB_Banking_Init(ab); if (rv) { fprintf(stderr, "Could not init AqBanking (%d)\n", rv); return 2; } fprintf(stderr, "Deinitializing AB_Banking...\n"); rv=AB_Banking_Fini(ab); if (rv) { fprintf(stderr, "Could not deinit AqBanking (%d)\n", rv); return 2; } fprintf(stderr, "Freeing AB_Banking...\n"); AB_Banking_free(ab); fprintf(stderr, "Finished\n"); return 0; } int test5(int argc, char **argv) { int rv; GWEN_DB_NODE *db; GWEN_DB_NODE *dbParams; db=GWEN_DB_Group_new("test"); dbParams=GWEN_DB_Group_new("params"); GWEN_DB_SetCharValue(dbParams, GWEN_DB_FLAGS_DEFAULT, "params/type", "mt940"); rv=GWEN_DB_ReadFileAs(db, "test.swift", "swift", dbParams, GWEN_PATH_FLAGS_CREATE_GROUP); if (rv) { DBG_ERROR(0, "Error reading file"); return 2; } GWEN_DB_Dump(db, 2); return 0; } int test6(int argc, char **argv) { int rv; GWEN_DB_NODE *db; GWEN_DB_NODE *dbParams; GWEN_DB_NODE *dbT; GWEN_DB_NODE *dbOut; FILE *f; int first=1; db=GWEN_DB_Group_new("test"); dbParams=GWEN_DB_Group_new("params"); GWEN_DB_SetCharValue(dbParams, GWEN_DB_FLAGS_DEFAULT, "quote", "1"); GWEN_DB_SetCharValue(dbParams, GWEN_DB_FLAGS_DEFAULT, "title", "0"); GWEN_DB_SetCharValue(dbParams, GWEN_DB_FLAGS_DEFAULT, "delimiter", "SPACE"); GWEN_DB_SetCharValue(dbParams, GWEN_DB_FLAGS_DEFAULT, "group", "country"); GWEN_DB_SetCharValue(dbParams, GWEN_DB_FLAGS_DEFAULT, "columns/1", "v[0]"); GWEN_DB_SetCharValue(dbParams, GWEN_DB_FLAGS_DEFAULT, "columns/2", "v[1]"); GWEN_DB_SetCharValue(dbParams, GWEN_DB_FLAGS_DEFAULT, "columns/3", "v[2]"); GWEN_DB_SetCharValue(dbParams, GWEN_DB_FLAGS_DEFAULT, "columns/4", "v[3]"); GWEN_DB_SetCharValue(dbParams, GWEN_DB_FLAGS_DEFAULT, "columns/5", "v[4]"); GWEN_DB_SetCharValue(dbParams, GWEN_DB_FLAGS_DEFAULT, "columns/6", "v[5]"); GWEN_DB_SetCharValue(dbParams, GWEN_DB_FLAGS_DEFAULT, "columns/7", "v[6]"); GWEN_DB_SetCharValue(dbParams, GWEN_DB_FLAGS_DEFAULT, "columns/8", "v[7]"); GWEN_DB_SetCharValue(dbParams, GWEN_DB_FLAGS_DEFAULT, "columns/9", "v[8]"); GWEN_DB_SetCharValue(dbParams, GWEN_DB_FLAGS_DEFAULT, "columns/10", "v[9]"); GWEN_DB_SetCharValue(dbParams, GWEN_DB_FLAGS_DEFAULT, "columns/11", "v[10]"); GWEN_DB_SetCharValue(dbParams, GWEN_DB_FLAGS_DEFAULT, "columns/12", "v[11]"); rv=GWEN_DB_ReadFileAs(db, "test.txt", "csv", dbParams, GWEN_PATH_FLAGS_CREATE_GROUP); if (rv) { DBG_ERROR(0, "Error reading file"); return 2; } GWEN_DB_Dump(db, 2); dbOut=GWEN_DB_Group_new("out"); GWEN_DB_ClearGroup(dbParams, 0); GWEN_DB_SetCharValue(dbParams, GWEN_DB_FLAGS_DEFAULT, "quote", "1"); GWEN_DB_SetCharValue(dbParams, GWEN_DB_FLAGS_DEFAULT, "title", "0"); GWEN_DB_SetCharValue(dbParams, GWEN_DB_FLAGS_OVERWRITE_VARS, "delimiter", ";"); GWEN_DB_SetCharValue(dbParams, GWEN_DB_FLAGS_DEFAULT, "group", "country"); GWEN_DB_SetCharValue(dbParams, GWEN_DB_FLAGS_DEFAULT, "columns/1", "v[0]"); GWEN_DB_SetCharValue(dbParams, GWEN_DB_FLAGS_DEFAULT, "columns/2", "v[1]"); GWEN_DB_SetCharValue(dbParams, GWEN_DB_FLAGS_DEFAULT, "columns/3", "v[2]"); dbT=GWEN_DB_FindFirstGroup(db, "country"); while (dbT) { int cnt; int i; GWEN_BUFFER *buf; GWEN_DB_NODE *dbX; dbX=GWEN_DB_GetGroup(dbOut, GWEN_PATH_FLAGS_CREATE_GROUP, "country"); assert(dbX); buf=GWEN_Buffer_new(0, 256, 0, 1); for (i=0; ; i++) { if (GWEN_DB_GetCharValue(dbT, "v", i, 0)==0) break; } cnt=i; for (i=0; i<(cnt-3); i++) { if (GWEN_Buffer_GetUsedBytes(buf)) GWEN_Buffer_AppendByte(buf, ' '); GWEN_Buffer_AppendString(buf, GWEN_DB_GetCharValue(dbT, "v", i, 0)); } GWEN_DB_SetCharValue(dbX, GWEN_DB_FLAGS_DEFAULT, "v", GWEN_Buffer_GetStart(buf)); /* second column */ GWEN_DB_SetCharValue(dbX, GWEN_DB_FLAGS_DEFAULT, "v", GWEN_DB_GetCharValue(dbT, "v", i++, 0)); /* fourth column */ GWEN_DB_SetCharValue(dbX, GWEN_DB_FLAGS_DEFAULT, "v", GWEN_DB_GetCharValue(dbT, "v", ++i, 0)); dbT=GWEN_DB_FindNextGroup(dbT, "country"); } rv=GWEN_DB_WriteFileAs(dbOut, "countries.csv", "csv", dbParams, GWEN_DB_FLAGS_DEFAULT); if (rv) { DBG_ERROR(0, "Error writing file"); return 2; } f=fopen("countries.c", "w+"); assert(f); dbT=GWEN_DB_FindFirstGroup(db, "country"); first=1; fprintf(f, "ab_country_list= {\n"); while (dbT) { int cnt; int i; int j; GWEN_BUFFER *buf; GWEN_DB_NODE *dbX; if (first) { first=0; } else { fprintf(f, ",\n"); } dbX=GWEN_DB_GetGroup(dbOut, GWEN_PATH_FLAGS_CREATE_GROUP, "country"); assert(dbX); buf=GWEN_Buffer_new(0, 256, 0, 1); for (i=0; ; i++) { if (GWEN_DB_GetCharValue(dbT, "v", i, 0)==0) break; } cnt=i; for (i=0; i<(cnt-3); i++) { if (GWEN_Buffer_GetUsedBytes(buf)) GWEN_Buffer_AppendByte(buf, ' '); GWEN_Buffer_AppendString(buf, GWEN_DB_GetCharValue(dbT, "v", i, 0)); } fprintf(f, "{ I18N_NOOP(\"%s\"), ", GWEN_Buffer_GetStart(buf)); fprintf(f, "\"%s\", ", GWEN_DB_GetCharValue(dbT, "v", i++, 0)); if (sscanf(GWEN_DB_GetCharValue(dbT, "v", ++i, 0), "%d", &j)!=1) { fprintf(stderr, "ERROR in country %s\n", GWEN_Buffer_GetStart(buf)); return 2; } fprintf(f, "%d }", j); dbT=GWEN_DB_FindNextGroup(dbT, "country"); } /* while */ fprintf(f, "\n}\n"); if (fclose(f)) { fprintf(stderr, "Could not close.\n"); return 3; } return 0; } int readCSVCountries(const char *fname, GWEN_DB_NODE *db) { int rv; GWEN_DB_NODE *dbParams; dbParams=GWEN_DB_Group_new("params"); GWEN_DB_SetCharValue(dbParams, GWEN_DB_FLAGS_DEFAULT, "quote", "1"); GWEN_DB_SetCharValue(dbParams, GWEN_DB_FLAGS_DEFAULT, "title", "0"); GWEN_DB_SetCharValue(dbParams, GWEN_DB_FLAGS_DEFAULT, "delimiter", "SPACE"); GWEN_DB_SetCharValue(dbParams, GWEN_DB_FLAGS_DEFAULT, "group", "country"); GWEN_DB_SetCharValue(dbParams, GWEN_DB_FLAGS_DEFAULT, "columns/1", "v[0]"); GWEN_DB_SetCharValue(dbParams, GWEN_DB_FLAGS_DEFAULT, "columns/2", "v[1]"); GWEN_DB_SetCharValue(dbParams, GWEN_DB_FLAGS_DEFAULT, "columns/3", "v[2]"); GWEN_DB_SetCharValue(dbParams, GWEN_DB_FLAGS_DEFAULT, "columns/4", "v[3]"); GWEN_DB_SetCharValue(dbParams, GWEN_DB_FLAGS_DEFAULT, "columns/5", "v[4]"); GWEN_DB_SetCharValue(dbParams, GWEN_DB_FLAGS_DEFAULT, "columns/6", "v[5]"); GWEN_DB_SetCharValue(dbParams, GWEN_DB_FLAGS_DEFAULT, "columns/7", "v[6]"); GWEN_DB_SetCharValue(dbParams, GWEN_DB_FLAGS_DEFAULT, "columns/8", "v[7]"); GWEN_DB_SetCharValue(dbParams, GWEN_DB_FLAGS_DEFAULT, "columns/9", "v[8]"); GWEN_DB_SetCharValue(dbParams, GWEN_DB_FLAGS_DEFAULT, "columns/10", "v[9]"); GWEN_DB_SetCharValue(dbParams, GWEN_DB_FLAGS_DEFAULT, "columns/11", "v[10]"); GWEN_DB_SetCharValue(dbParams, GWEN_DB_FLAGS_DEFAULT, "columns/12", "v[11]"); rv=GWEN_DB_ReadFileAs(db, fname, "csv", dbParams, GWEN_PATH_FLAGS_CREATE_GROUP); if (rv) { DBG_ERROR(0, "Error reading file"); return 2; } return 0; } int readXMLCountries(const char *fname, GWEN_DB_NODE *dbCountries) { GWEN_XMLNODE *nRoot; GWEN_XMLNODE *nRow; GWEN_Logger_SetLevel(GWEN_LOGDOMAIN, GWEN_LoggerLevel_Info); nRoot=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "root"); if (GWEN_XML_ReadFile(nRoot, fname, GWEN_XML_FLAGS_DEFAULT | GWEN_XML_FLAGS_HANDLE_HEADERS)) { DBG_ERROR(0, "Could not read XML file.\n"); return 2; } nRow=GWEN_XMLNode_FindFirstTag(nRoot, "tr", 0, 0); while (nRow) { GWEN_XMLNODE *nCol; GWEN_DB_NODE *dbCountry=0; dbCountry=GWEN_DB_Group_new("country"); nCol=GWEN_XMLNode_FindFirstTag(nRow, "td", 0, 0); if (nCol) { GWEN_XMLNODE *nData; nData=GWEN_XMLNode_GetFirstData(nCol); if (nData) { GWEN_BUFFER *dbuf; const char *s; char *p; dbuf=GWEN_Buffer_new(0, 256, 0, 1); s=GWEN_XMLNode_GetData(nData); assert(s); if (GWEN_Text_UnescapeXmlToBuffer(s, dbuf)) { fprintf(stderr, "Error unescaping country \"%s\"", s); return 2; } p=GWEN_Buffer_GetStart(dbuf); if (strlen(p)>1) { p=strchr(p, '('); if (p) { *p=0; GWEN_Text_CondenseBuffer(dbuf); } if (strcasecmp(GWEN_Buffer_GetStart(dbuf), " ")!=0) GWEN_DB_SetCharValue(dbCountry, GWEN_DB_FLAGS_DEFAULT, "countryName", GWEN_Buffer_GetStart(dbuf)); } GWEN_Buffer_free(dbuf); } } if (nCol) nCol=GWEN_XMLNode_FindNextTag(nCol, "td", 0, 0); if (nCol) nCol=GWEN_XMLNode_FindNextTag(nCol, "td", 0, 0); if (nCol) { GWEN_XMLNODE *nData; nData=GWEN_XMLNode_GetFirstData(nCol); if (nData) { GWEN_BUFFER *dbuf; const char *s; char *p; dbuf=GWEN_Buffer_new(0, 256, 0, 1); s=GWEN_XMLNode_GetData(nData); assert(s); if (GWEN_Text_UnescapeXmlToBuffer(s, dbuf)) { fprintf(stderr, "Error unescaping country code \"%s\"", s); return 2; } p=GWEN_Buffer_GetStart(dbuf); if (strlen(p)>1) { if (strcasecmp(GWEN_Buffer_GetStart(dbuf), " ")!=0) { p[2]=0; GWEN_DB_SetCharValue(dbCountry, GWEN_DB_FLAGS_DEFAULT, "countryCode", GWEN_Buffer_GetStart(dbuf)); } } GWEN_Buffer_free(dbuf); } } if (nCol) nCol=GWEN_XMLNode_FindNextTag(nCol, "td", 0, 0); if (nCol) nCol=GWEN_XMLNode_FindNextTag(nCol, "td", 0, 0); if (nCol) { GWEN_XMLNODE *nData; nData=GWEN_XMLNode_GetFirstData(nCol); if (nData) { GWEN_BUFFER *dbuf; const char *s; char *p; dbuf=GWEN_Buffer_new(0, 256, 0, 1); s=GWEN_XMLNode_GetData(nData); assert(s); if (GWEN_Text_UnescapeXmlToBuffer(s, dbuf)) { fprintf(stderr, "Error unescaping currency name \"%s\"", s); return 2; } p=GWEN_Buffer_GetStart(dbuf); if (strlen(p)>1) { p=strchr(p, '('); if (p) { *p=0; GWEN_Text_CondenseBuffer(dbuf); } if (strcasecmp(GWEN_Buffer_GetStart(dbuf), " ")!=0) GWEN_DB_SetCharValue(dbCountry, GWEN_DB_FLAGS_DEFAULT, "currencyName", GWEN_Buffer_GetStart(dbuf)); } GWEN_Buffer_free(dbuf); } } if (nCol) nCol=GWEN_XMLNode_FindNextTag(nCol, "td", 0, 0); if (nCol) nCol=GWEN_XMLNode_FindNextTag(nCol, "td", 0, 0); if (nCol) { GWEN_XMLNODE *nData; nData=GWEN_XMLNode_GetFirstData(nCol); if (nData) { GWEN_BUFFER *dbuf; const char *s; char *p; dbuf=GWEN_Buffer_new(0, 256, 0, 1); s=GWEN_XMLNode_GetData(nData); assert(s); if (GWEN_Text_UnescapeXmlToBuffer(s, dbuf)) { fprintf(stderr, "Error unescaping currency code \"%s\"", s); return 2; } p=GWEN_Buffer_GetStart(dbuf); if (strlen(p)>2) { if (strcasecmp(GWEN_Buffer_GetStart(dbuf), " ")!=0) { p[3]=0; GWEN_DB_SetCharValue(dbCountry, GWEN_DB_FLAGS_DEFAULT, "currencyCode", GWEN_Buffer_GetStart(dbuf)); } } GWEN_Buffer_free(dbuf); } } if (GWEN_DB_VariableExists(dbCountry, "countryName") && GWEN_DB_VariableExists(dbCountry, "countryCode") && GWEN_DB_VariableExists(dbCountry, "currencyName") && GWEN_DB_VariableExists(dbCountry, "currencyCode")) { GWEN_DB_AddGroup(dbCountries, dbCountry); } else { GWEN_DB_Group_free(dbCountry); } nRow=GWEN_XMLNode_FindNextTag(nRow, "tr", 0, 0); } return 0; } int test7(int argc, char **argv) { const char *fname; GWEN_DB_NODE *dbCountries; int rv; if (argc<3) { fprintf(stderr, "Filename for input needed\n"); return 1; } fname=argv[2]; dbCountries=GWEN_DB_Group_new("countries"); rv=readXMLCountries(fname, dbCountries); if (rv) return rv; GWEN_DB_Dump(dbCountries, 2); return 0; } int packCsvCountries(GWEN_DB_NODE *dbCSV) { GWEN_DB_NODE *dbT; dbT=GWEN_DB_FindFirstGroup(dbCSV, "country"); while (dbT) { int cnt; int i; int j; GWEN_BUFFER *buf; buf=GWEN_Buffer_new(0, 256, 0, 1); for (i=0; ; i++) { if (GWEN_DB_GetCharValue(dbT, "v", i, 0)==0) break; } cnt=i; for (i=0; i<(cnt-3); i++) { if (GWEN_Buffer_GetUsedBytes(buf)) GWEN_Buffer_AppendByte(buf, ' '); GWEN_Buffer_AppendString(buf, GWEN_DB_GetCharValue(dbT, "v", i, 0)); } GWEN_DB_SetCharValue(dbT, GWEN_DB_FLAGS_OVERWRITE_VARS, "countryName", GWEN_Buffer_GetStart(buf)); GWEN_DB_SetCharValue(dbT, GWEN_DB_FLAGS_OVERWRITE_VARS, "countryCode", GWEN_DB_GetCharValue(dbT, "v", i++, 0)); if (sscanf(GWEN_DB_GetCharValue(dbT, "v", ++i, 0), "%d", &j)!=1) { fprintf(stderr, "ERROR in country %s\n", GWEN_Buffer_GetStart(buf)); return 2; } else { GWEN_DB_SetIntValue(dbT, GWEN_DB_FLAGS_OVERWRITE_VARS, "countryNum", j); } GWEN_DB_DeleteVar(dbT, "v"); dbT=GWEN_DB_FindNextGroup(dbT, "country"); } /* while */ return 0; } int test8(int argc, char **argv) { const char *fnameXML, *fnameCSV; GWEN_DB_NODE *dbXML; GWEN_DB_NODE *dbCSV; GWEN_DB_NODE *dbC; GWEN_DB_NODE *dbT; FILE *f; int first; int rv; if (argc<4) { fprintf(stderr, "Filenames for input needed (XML, CSV)\n"); return 1; } fnameXML=argv[2]; fnameCSV=argv[3]; dbXML=GWEN_DB_Group_new("countries"); dbCSV=GWEN_DB_Group_new("countries"); rv=readCSVCountries(fnameCSV, dbCSV); if (rv) { fprintf(stderr, "Error reading CSV countries\n"); return rv; } rv=packCsvCountries(dbCSV); if (rv) { fprintf(stderr, "Error packing CSV countries\n"); return rv; } //GWEN_DB_Dump(dbCSV, stderr, 4); rv=readXMLCountries(fnameXML, dbXML); if (rv) return rv; dbC=GWEN_DB_GetFirstGroup(dbXML); while (dbC) { const char *code; code=GWEN_DB_GetCharValue(dbC, "countryCode", 0, 0); if (code) { dbT=GWEN_DB_GetFirstGroup(dbCSV); while (dbT) { const char *s; s=GWEN_DB_GetCharValue(dbT, "countryCode", 0, 0); if (s) { if (strcasecmp(s, code)==0) break; } dbT=GWEN_DB_GetNextGroup(dbT); } if (!dbT) { DBG_ERROR(0, "Country \"%s\" not found", code); } else { int nc; nc=GWEN_DB_GetIntValue(dbT, "countryNum", 0, 0); if (nc) { DBG_ERROR(0, "Setting country code %s=%d", code, nc); GWEN_DB_SetIntValue(dbC, GWEN_DB_FLAGS_OVERWRITE_VARS, "countryNum", nc); } else { DBG_ERROR(0, "Country \"%s\" has no number", code); GWEN_DB_Dump(dbT, 2); } } } else { DBG_ERROR(0, "No country code"); } dbC=GWEN_DB_GetNextGroup(dbC); } f=fopen("countries2.c", "w+"); assert(f); dbT=GWEN_DB_FindFirstGroup(dbXML, "country"); first=1; fprintf(f, "ab_country_list= {\n"); while (dbT) { const char *s; int i; if (first) { first=0; } else { fprintf(f, ",\n"); } i=GWEN_DB_GetIntValue(dbT, "countryNum", 0, 0); if (i!=280) { if (i==276) { s=GWEN_DB_GetCharValue(dbT, "countryName", 0, 0); assert(s); fprintf(f, "{ I18N_NOOP(\"%s\"), ", s); s=GWEN_DB_GetCharValue(dbT, "countryCode", 0, 0); assert(s); fprintf(f, "\"%s\",", s); i=GWEN_DB_GetIntValue(dbT, "countryNum", 0, 0); fprintf(f, " %d,", 280); s=GWEN_DB_GetCharValue(dbT, "currencyName", 0, 0); assert(s); fprintf(f, " I18N_NOOP(\"%s\"), ", s); s=GWEN_DB_GetCharValue(dbT, "currencyCode", 0, 0); assert(s); fprintf(f, " \"%s\" }", s); fprintf(f, ",\n"); } s=GWEN_DB_GetCharValue(dbT, "countryName", 0, 0); assert(s); fprintf(f, "{ I18N_NOOP(\"%s\"), ", s); s=GWEN_DB_GetCharValue(dbT, "countryCode", 0, 0); assert(s); fprintf(f, "\"%s\",", s); fprintf(f, " %d,", i); s=GWEN_DB_GetCharValue(dbT, "currencyName", 0, 0); assert(s); fprintf(f, " I18N_NOOP(\"%s\"), ", s); s=GWEN_DB_GetCharValue(dbT, "currencyCode", 0, 0); assert(s); fprintf(f, " \"%s\" }", s); } dbT=GWEN_DB_FindNextGroup(dbT, "country"); } /* while */ fprintf(f, "\n}\n"); if (fclose(f)) { fprintf(stderr, "Could not close.\n"); return 3; } GWEN_DB_Dump(dbXML, 2); return 0; } int test9(int argc, char **argv) { AB_BANKING *ab; AB_BANKINFO_LIST2 *bl; AB_BANKINFO_LIST2_ITERATOR *bit; AB_BANKINFO *tbi; int rv; fprintf(stderr, "Creating AB_Banking...\n"); ab=AB_Banking_new("abtest", 0, 0); fprintf(stderr, "Initializing AB_Banking...\n"); rv=AB_Banking_Init(ab); if (rv) { fprintf(stderr, "Could not init AqBanking (%d)\n", rv); return 2; } bl=AB_BankInfo_List2_new(); tbi=AB_BankInfo_new(); AB_BankInfo_SetLocation(tbi, "Wilhelmshaven"); rv=AB_Banking_GetBankInfoByTemplate(ab, "de", tbi, bl); if (rv) { fprintf(stderr, "Error looking for bank info: %d\n", rv); return 2; } bit=AB_BankInfo_List2_First(bl); if (bit) { AB_BANKINFO *bi; int count=0; fprintf(stdout, "Found the following banks:\n"); bi=AB_BankInfo_List2Iterator_Data(bit); assert(bi); while (bi) { count++; fprintf(stdout, "%5d %s %s %s\n", count, AB_BankInfo_GetBankId(bi), AB_BankInfo_GetBankName(bi), AB_BankInfo_GetLocation(bi)); bi=AB_BankInfo_List2Iterator_Next(bit); } AB_BankInfo_List2Iterator_free(bit); } AB_BankInfo_List2_free(bl); fprintf(stderr, "Deinitializing AB_Banking...\n"); rv=AB_Banking_Fini(ab); if (rv) { fprintf(stderr, "Could not deinit AqBanking (%d)\n", rv); return 2; } fprintf(stderr, "Freeing AB_Banking...\n"); AB_Banking_free(ab); fprintf(stderr, "Finished\n"); return 0; } int test10(int argc, char **argv) { AB_BANKING *ab; AB_BANKINFO_LIST2 *bl; AB_BANKINFO_LIST2_ITERATOR *bit; AB_BANKINFO *tbi; int rv; fprintf(stderr, "Creating AB_Banking...\n"); ab=AB_Banking_new("abtest", 0, 0); fprintf(stderr, "Initializing AB_Banking...\n"); rv=AB_Banking_Init(ab); if (rv) { fprintf(stderr, "Could not init AqBanking (%d)\n", rv); return 2; } bl=AB_BankInfo_List2_new(); tbi=AB_BankInfo_new(); AB_BankInfo_SetBankId(tbi, "28250110"); rv=AB_Banking_GetBankInfoByTemplate(ab, "de", tbi, bl); if (rv) { fprintf(stderr, "Error looking for bank info: %d\n", rv); return 2; } bit=AB_BankInfo_List2_First(bl); if (bit) { AB_BANKINFO *bi; int count=0; fprintf(stdout, "Found the following banks:\n"); bi=AB_BankInfo_List2Iterator_Data(bit); assert(bi); while (bi) { count++; fprintf(stdout, "%5d %s %s %s\n", count, AB_BankInfo_GetBankId(bi), AB_BankInfo_GetBankName(bi), AB_BankInfo_GetLocation(bi)); bi=AB_BankInfo_List2Iterator_Next(bit); } AB_BankInfo_List2Iterator_free(bit); } AB_BankInfo_List2_free(bl); fprintf(stderr, "Deinitializing AB_Banking...\n"); rv=AB_Banking_Fini(ab); if (rv) { fprintf(stderr, "Could not deinit AqBanking (%d)\n", rv); return 2; } fprintf(stderr, "Freeing AB_Banking...\n"); AB_Banking_free(ab); fprintf(stderr, "Finished\n"); return 0; } int test11(int argc, char **argv) { AB_BANKING *ab; AB_BANKINFO_LIST2 *bl; AB_BANKINFO_LIST2_ITERATOR *bit; AB_BANKINFO *tbi; int rv; GWEN_Logger_SetLevel(AQBANKING_LOGDOMAIN, GWEN_LoggerLevel_Notice); fprintf(stderr, "Creating AB_Banking...\n"); ab=AB_Banking_new("abtest", 0, 0); fprintf(stderr, "Initializing AB_Banking...\n"); rv=AB_Banking_Init(ab); if (rv) { fprintf(stderr, "Could not init AqBanking (%d)\n", rv); return 2; } bl=AB_BankInfo_List2_new(); tbi=AB_BankInfo_new(); rv=AB_Banking_GetBankInfoByTemplate(ab, "de", tbi, bl); if (rv) { fprintf(stderr, "Error looking for bank info: %d\n", rv); return 2; } bit=AB_BankInfo_List2_First(bl); if (bit) { AB_BANKINFO *bi; int count=0; fprintf(stdout, "Found the following banks:\n"); bi=AB_BankInfo_List2Iterator_Data(bit); assert(bi); while (bi) { count++; fprintf(stdout, "%5d %s %s %s\n", count, AB_BankInfo_GetBankId(bi), AB_BankInfo_GetBankName(bi), AB_BankInfo_GetLocation(bi)); bi=AB_BankInfo_List2Iterator_Next(bit); } AB_BankInfo_List2Iterator_free(bit); } AB_BankInfo_List2_free(bl); AB_BankInfo_free(tbi); fprintf(stderr, "Deinitializing AB_Banking...\n"); rv=AB_Banking_Fini(ab); if (rv) { fprintf(stderr, "Could not deinit AqBanking (%d)\n", rv); return 2; } fprintf(stderr, "Freeing AB_Banking...\n"); AB_Banking_free(ab); fprintf(stderr, "Finished\n"); return 0; } int test12(int argc, char **argv) { AB_BANKING *ab; AB_BANKINFO_LIST2 *bl; AB_BANKINFO_LIST2_ITERATOR *bit; AB_BANKINFO *tbi; int rv; const char *country; GWEN_Logger_SetLevel(AQBANKING_LOGDOMAIN, GWEN_LoggerLevel_Error); if (argc<3) { fprintf(stderr, "Country code needed.\n"); return 1; } country=argv[2]; fprintf(stderr, "Creating AB_Banking...\n"); ab=AB_Banking_new("abtest", 0, 0); fprintf(stderr, "Initializing AB_Banking...\n"); rv=AB_Banking_Init(ab); if (rv) { fprintf(stderr, "Could not init AqBanking (%d)\n", rv); return 2; } bl=AB_BankInfo_List2_new(); tbi=AB_BankInfo_new(); rv=AB_Banking_GetBankInfoByTemplate(ab, country, tbi, bl); if (rv) { fprintf(stderr, "Error looking for bank info: %d\n", rv); return 2; } bit=AB_BankInfo_List2_First(bl); if (bit) { AB_BANKINFO *bi; int count=0; fprintf(stdout, "Found the following banks:\n"); bi=AB_BankInfo_List2Iterator_Data(bit); assert(bi); while (bi) { count++; fprintf(stdout, "%5d %s %s %s\n", count, AB_BankInfo_GetBankId(bi), AB_BankInfo_GetBankName(bi), AB_BankInfo_GetLocation(bi)); bi=AB_BankInfo_List2Iterator_Next(bit); } AB_BankInfo_List2Iterator_free(bit); } AB_BankInfo_List2_free(bl); AB_BankInfo_free(tbi); fprintf(stderr, "Deinitializing AB_Banking...\n"); rv=AB_Banking_Fini(ab); if (rv) { fprintf(stderr, "Could not deinit AqBanking (%d)\n", rv); return 2; } fprintf(stderr, "Freeing AB_Banking...\n"); AB_Banking_free(ab); fprintf(stderr, "Finished\n"); return 0; } int test13(int argc, char **argv) { int rv; const char *iban; GWEN_Logger_SetLevel(AQBANKING_LOGDOMAIN, GWEN_LoggerLevel_Error); if (argc<3) { fprintf(stderr, "IBAN needed.\n"); return 1; } iban=argv[2]; /* fprintf(stderr, "Creating AB_Banking...\n"); ab=AB_Banking_new("abtest", 0); fprintf(stderr, "Initializing AB_Banking...\n"); rv=AB_Banking_Init(ab); if (rv) { fprintf(stderr, "Could not init AqBanking (%d)\n", rv); return 2; } */ rv=AB_Banking_CheckIban(iban); fprintf(stderr, "Result for IBAN \"%s\": %d\n", iban, rv); /* fprintf(stderr, "Deinitializing AB_Banking...\n"); rv=AB_Banking_Fini(ab); if (rv) { fprintf(stderr, "Could not deinit AqBanking (%d)\n", rv); return 2; } fprintf(stderr, "Freeing AB_Banking...\n"); AB_Banking_free(ab); */ fprintf(stderr, "Finished\n"); return 0; } int test15(int argc, char **argv) { AB_BANKING *ab; int rv; GWEN_DBIO *dbio; const char *fname; GWEN_DB_NODE *dbParams; GWEN_DB_NODE *dbData; GWEN_Logger_SetLevel(AQBANKING_LOGDOMAIN, GWEN_LoggerLevel_Error); if (argc<3) { fprintf(stderr, "Usage: %s FILENAME\n", argv[0]); return 1; } fname=argv[2]; fprintf(stderr, "Creating AB_Banking...\n"); ab=AB_Banking_new("abtest", 0, 0); fprintf(stderr, "Initializing AB_Banking...\n"); rv=AB_Banking_Init(ab); if (rv) { fprintf(stderr, "Could not init AqBanking (%d)\n", rv); return 2; } dbio=GWEN_DBIO_GetPlugin("swift"); if (dbio==NULL) { fprintf(stderr, "SWIFT plugin not found.\n"); return 2; } dbParams=GWEN_DB_Group_new("params"); dbData=GWEN_DB_Group_new("data"); rv=GWEN_DBIO_ImportFromFile(dbio, fname, dbData, dbParams, GWEN_PATH_FLAGS_CREATE_GROUP); if (rv) { fprintf(stderr, "Error on import (%d)\n", rv); return 2; } fprintf(stderr, "Deinitializing AB_Banking...\n"); rv=AB_Banking_Fini(ab); if (rv) { fprintf(stderr, "Could not deinit AqBanking (%d)\n", rv); return 2; } fprintf(stderr, "Freeing AB_Banking...\n"); AB_Banking_free(ab); GWEN_DB_Dump(dbData, 2); fprintf(stderr, "Finished\n"); return 0; } /* #include */ #include #include int test16(int argc, char **argv) { AB_BANKING *ab; GWEN_GUI *gui; AB_ACCOUNT_SPEC *ab_acc; int rv; int i; int tries = 1; GWEN_Logger_SetLevel(AQBANKING_LOGDOMAIN, GWEN_LoggerLevel_Error); if (argc == 3) tries = atoi(argv[2]); fprintf(stderr, "Creating AB_Banking...\n"); ab=AB_Banking_new("abtest", 0, 0); fprintf(stderr, "Initializing AB_Banking...\n"); rv=AB_Banking_Init(ab); if (rv) { fprintf(stderr, "Could not init AqBanking (%d)\n", rv); return 2; } gui = GWEN_Gui_CGui_new(); GWEN_Gui_SetGui(gui); AB_Gui_Extend(gui, ab); fprintf(stderr, "Fetching alias...\n"); for (i = 0; i < tries; i++) { ab_acc = AB_Banking_GetAccountSpecByAlias(ab, "e6c8903a-85dc-4d6f-b489-7f7f1852067a-A000096"); if (tries == 1 && !ab_acc) { fprintf(stderr, "Could not find alias\n"); } } fprintf(stderr, "Deinitializing AB_Banking...\n"); rv=AB_Banking_Fini(ab); if (rv) { fprintf(stderr, "Could not deinit AqBanking (%d)\n", rv); return 2; } fprintf(stderr, "Freeing AB_Banking...\n"); AB_Banking_free(ab); fprintf(stderr, "Finished\n"); return 0; } int main(int argc, char **argv) { const char *cmd; int rv; if (argc<2) { fprintf(stderr, "Usage: %s COMMAND\n", argv[0]); return 1; } cmd=argv[1]; GWEN_Logger_SetLevel(AQBANKING_LOGDOMAIN, GWEN_LoggerLevel_Info); if (strcasecmp(cmd, "test1")==0) rv=test1(argc, argv); else if (strcasecmp(cmd, "test3")==0) rv=test3(argc, argv); else if (strcasecmp(cmd, "test5")==0) rv=test5(argc, argv); else if (strcasecmp(cmd, "test6")==0) rv=test6(argc, argv); else if (strcasecmp(cmd, "test7")==0) rv=test7(argc, argv); else if (strcasecmp(cmd, "test8")==0) rv=test8(argc, argv); else if (strcasecmp(cmd, "test9")==0) rv=test9(argc, argv); else if (strcasecmp(cmd, "test10")==0) rv=test10(argc, argv); else if (strcasecmp(cmd, "test11")==0) rv=test11(argc, argv); else if (strcasecmp(cmd, "test12")==0) rv=test12(argc, argv); else if (strcasecmp(cmd, "test13")==0) rv=test13(argc, argv); else if (strcasecmp(cmd, "test15")==0) rv=test15(argc, argv); else if (strcasecmp(cmd, "test16")==0) rv=test16(argc, argv); else { fprintf(stderr, "Unknown command \"%s\"", cmd); rv=1; } return rv; } aqbanking-6.6.1/src/test/test-dlg-setup.c0000664000175000017500000000160314043610745015201 00000000000000#include #include #include #include int main(int argc, char **argv) { GWEN_GUI *gui; int r; gtk_init(&argc, &argv); gui = Gtk2_Gui_new(); GWEN_Gui_SetGui(gui); { AB_BANKING *ab; ab = AB_Banking_new("test-dlg-setup", NULL, 0); r = AB_Banking_Init(ab); assert(r == 0); r = AB_Banking_OnlineInit(ab); assert(r == 0); { GWEN_DIALOG *dlg; dlg = AB_SetupDialog_new(ab); r = GWEN_Gui_ExecDialog(dlg, 0); if (r <= 0) { printf("Dialog was aborted/rejected\n"); } else { printf("Dialog accepted, all fine\n"); } GWEN_Dialog_free(dlg); } r = AB_Banking_OnlineFini(ab); assert(r == 0); r = AB_Banking_Fini(ab); assert(r == 0); AB_Banking_free(ab); } GWEN_Gui_free(gui); return 0; } aqbanking-6.6.1/src/test/Makefile.in0000644000175000017500000006131015037736026014225 00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @WITH_GWENGUI_GTK2_FALSE@noinst_PROGRAMS = abtest$(EXEEXT) \ @WITH_GWENGUI_GTK2_FALSE@ imptest$(EXEEXT) @WITH_GWENGUI_GTK2_TRUE@noinst_PROGRAMS = abtest$(EXEEXT) \ @WITH_GWENGUI_GTK2_TRUE@ imptest$(EXEEXT) \ @WITH_GWENGUI_GTK2_TRUE@ test-dlg-setup$(EXEEXT) subdir = src/test ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/distri.m4 $(top_srcdir)/m4/gwenhywfar.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/os.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = PROGRAMS = $(noinst_PROGRAMS) am_abtest_OBJECTS = abtest.$(OBJEXT) abtest_OBJECTS = $(am_abtest_OBJECTS) am__DEPENDENCIES_1 = abtest_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = am_imptest_OBJECTS = imptest.$(OBJEXT) imptest_OBJECTS = $(am_imptest_OBJECTS) imptest_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) am__test_dlg_setup_SOURCES_DIST = test-dlg-setup.c @WITH_GWENGUI_GTK2_TRUE@am_test_dlg_setup_OBJECTS = \ @WITH_GWENGUI_GTK2_TRUE@ test-dlg-setup.$(OBJEXT) test_dlg_setup_OBJECTS = $(am_test_dlg_setup_OBJECTS) @WITH_GWENGUI_GTK2_TRUE@test_dlg_setup_DEPENDENCIES = \ @WITH_GWENGUI_GTK2_TRUE@ $(am__DEPENDENCIES_1) \ @WITH_GWENGUI_GTK2_TRUE@ $(am__DEPENDENCIES_1) \ @WITH_GWENGUI_GTK2_TRUE@ $(am__DEPENDENCIES_1) \ @WITH_GWENGUI_GTK2_TRUE@ $(am__DEPENDENCIES_1) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/abtest.Po ./$(DEPDIR)/imptest.Po \ ./$(DEPDIR)/test-dlg-setup.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(abtest_SOURCES) $(imptest_SOURCES) \ $(test_dlg_setup_SOURCES) DIST_SOURCES = $(abtest_SOURCES) $(imptest_SOURCES) \ $(am__test_dlg_setup_SOURCES_DIST) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADD_ACLOCAL_FLAGS = @ADD_ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AQBANKING_CLI_VERSION_STRING = @AQBANKING_CLI_VERSION_STRING@ AQBANKING_FINTS_VERSION_STRING = @AQBANKING_FINTS_VERSION_STRING@ AQBANKING_SO_AGE = @AQBANKING_SO_AGE@ AQBANKING_SO_CURRENT = @AQBANKING_SO_CURRENT@ AQBANKING_SO_EFFECTIVE = @AQBANKING_SO_EFFECTIVE@ AQBANKING_SO_REVISION = @AQBANKING_SO_REVISION@ AQBANKING_VERSION_BUILD = @AQBANKING_VERSION_BUILD@ AQBANKING_VERSION_FULL_STRING = @AQBANKING_VERSION_FULL_STRING@ AQBANKING_VERSION_MAJOR = @AQBANKING_VERSION_MAJOR@ AQBANKING_VERSION_MINOR = @AQBANKING_VERSION_MINOR@ AQBANKING_VERSION_PATCHLEVEL = @AQBANKING_VERSION_PATCHLEVEL@ AQBANKING_VERSION_RELEASE_STRING = @AQBANKING_VERSION_RELEASE_STRING@ AQBANKING_VERSION_STRING = @AQBANKING_VERSION_STRING@ AQBANKING_VERSION_TAG = @AQBANKING_VERSION_TAG@ AQEBICS_CFLAGS = @AQEBICS_CFLAGS@ AQEBICS_LIBS = @AQEBICS_LIBS@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATETIME = @DATETIME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_EXCLUDE_PATTERNS = @DOXYGEN_EXCLUDE_PATTERNS@ DOXYGEN_FILE_PATTERNS = @DOXYGEN_FILE_PATTERNS@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENGUI_GTK2_CFLAGS = @GWENGUI_GTK2_CFLAGS@ GWENGUI_GTK2_LIBS = @GWENGUI_GTK2_LIBS@ GWENHYWFAR_MINIMUM_VERSION = @GWENHYWFAR_MINIMUM_VERSION@ HAVE_GWENGUI_GTK2 = @HAVE_GWENGUI_GTK2@ HAVE_I18N = @HAVE_I18N@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIBXSLT_CFLAGS = @LIBXSLT_CFLAGS@ LIBXSLT_LIBS = @LIBXSLT_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_SUPPORTS_QT = @MSGFMT_SUPPORTS_QT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ TUTORIALS = @TUTORIALS@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XMLMERGE = @XMLMERGE@ XMLSEC_CFLAGS = @XMLSEC_CFLAGS@ XMLSEC_LIBS = @XMLSEC_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ aqbanking_backends = @aqbanking_backends@ aqbanking_cfg_searchdir = @aqbanking_cfg_searchdir@ aqbanking_data_searchdir = @aqbanking_data_searchdir@ aqbanking_headerdir = @aqbanking_headerdir@ aqbanking_headerdir_am = @aqbanking_headerdir_am@ aqbanking_includes = @aqbanking_includes@ aqbanking_internal_libs = @aqbanking_internal_libs@ aqbanking_ldflags = @aqbanking_ldflags@ aqbanking_libs = @aqbanking_libs@ aqbanking_locale_searchdir = @aqbanking_locale_searchdir@ aqbanking_modules = @aqbanking_modules@ aqbanking_pkgdatadir = @aqbanking_pkgdatadir@ aqbanking_plugin_searchdir = @aqbanking_plugin_searchdir@ aqbanking_plugindir = @aqbanking_plugindir@ aqbanking_plugins_backends_dirs = @aqbanking_plugins_backends_dirs@ aqbanking_plugins_backends_libs = @aqbanking_plugins_backends_libs@ aqbanking_plugins_bankinfo_dirs = @aqbanking_plugins_bankinfo_dirs@ aqbanking_plugins_bankinfo_libs = @aqbanking_plugins_bankinfo_libs@ aqbanking_plugins_imexporters_dirs = @aqbanking_plugins_imexporters_dirs@ aqbanking_plugins_imexporters_libs = @aqbanking_plugins_imexporters_libs@ aqbanking_plugins_parsers_dirs = @aqbanking_plugins_parsers_dirs@ aqbanking_symlinkdir = @aqbanking_symlinkdir@ aqbanking_sys_is_windows = @aqbanking_sys_is_windows@ aqbankingpp_modules = @aqbankingpp_modules@ aqebics_datadir = @aqebics_datadir@ aqebics_includes = @aqebics_includes@ aqebics_internal_libs = @aqebics_internal_libs@ aqebics_ldflags = @aqebics_ldflags@ aqebics_libs = @aqebics_libs@ aqfints_datadir = @aqfints_datadir@ aqhbci_datadir = @aqhbci_datadir@ aqhbci_includes = @aqhbci_includes@ aqhbci_internal_libs = @aqhbci_internal_libs@ aqhbci_ldflags = @aqhbci_ldflags@ aqhbci_libs = @aqhbci_libs@ aqofxconnect_includes = @aqofxconnect_includes@ aqofxconnect_internal_libs = @aqofxconnect_internal_libs@ aqofxconnect_libs = @aqofxconnect_libs@ aqpaypal_includes = @aqpaypal_includes@ aqpaypal_internal_libs = @aqpaypal_internal_libs@ aqpaypal_libs = @aqpaypal_libs@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gmp_libs = @gmp_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_dir = @gwenhywfar_dir@ gwenhywfar_has_crypt = @gwenhywfar_has_crypt@ gwenhywfar_headers = @gwenhywfar_headers@ gwenhywfar_includes = @gwenhywfar_includes@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_plugins = @gwenhywfar_plugins@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ typemaker2_exe = @typemaker2_exe@ visibility_cflags = @visibility_cflags@ with_aqebics = @with_aqebics@ with_aqhbci = @with_aqhbci@ AM_CPPFLAGS = -I$(top_srcdir)/src/libs -I$(top_builddir)/src/libs $(gwenhywfar_includes) -I$(srcdir)/.. $(GWENGUI_GTK2_CFLAGS) $(GTK2_CFLAGS) abtest_SOURCES = abtest.c abtest_LDADD = $(aqbanking_internal_libs) $(gwenhywfar_libs) imptest_SOURCES = imptest.c imptest_LDADD = $(aqbanking_internal_libs) $(gwenhywfar_libs) @WITH_GWENGUI_GTK2_TRUE@test_dlg_setup_SOURCES = test-dlg-setup.c @WITH_GWENGUI_GTK2_TRUE@test_dlg_setup_LDADD = \ @WITH_GWENGUI_GTK2_TRUE@ $(aqbanking_internal_libs) \ @WITH_GWENGUI_GTK2_TRUE@ $(gwenhywfar_libs) \ @WITH_GWENGUI_GTK2_TRUE@ $(GWENGUI_GTK2_LIBS) \ @WITH_GWENGUI_GTK2_TRUE@ $(GTK2_LIBS) EXTRA_DIST = test-dlg-setup.c all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/test/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/test/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list abtest$(EXEEXT): $(abtest_OBJECTS) $(abtest_DEPENDENCIES) $(EXTRA_abtest_DEPENDENCIES) @rm -f abtest$(EXEEXT) $(AM_V_CCLD)$(LINK) $(abtest_OBJECTS) $(abtest_LDADD) $(LIBS) imptest$(EXEEXT): $(imptest_OBJECTS) $(imptest_DEPENDENCIES) $(EXTRA_imptest_DEPENDENCIES) @rm -f imptest$(EXEEXT) $(AM_V_CCLD)$(LINK) $(imptest_OBJECTS) $(imptest_LDADD) $(LIBS) test-dlg-setup$(EXEEXT): $(test_dlg_setup_OBJECTS) $(test_dlg_setup_DEPENDENCIES) $(EXTRA_test_dlg_setup_DEPENDENCIES) @rm -f test-dlg-setup$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_dlg_setup_OBJECTS) $(test_dlg_setup_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/abtest.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/imptest.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-dlg-setup.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \ mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/abtest.Po -rm -f ./$(DEPDIR)/imptest.Po -rm -f ./$(DEPDIR)/test-dlg-setup.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/abtest.Po -rm -f ./$(DEPDIR)/imptest.Po -rm -f ./$(DEPDIR)/test-dlg-setup.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-generic clean-libtool clean-noinstPROGRAMS cscopelist-am \ ctags ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am .PRECIOUS: Makefile #cpptest_SOURCES=cpptest.cpp #cpptest_LDADD = $(aqbanking_internal_libs) $(top_builddir)/src/libs/aqbanking++/libaqbankingpp.la $(gwenhywfar_libs) -lstdc++ sources: for f in $(abtest_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done built_sources: cppcheck: typefiles: typedefs: # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: aqbanking-6.6.1/src/test/Makefile.am0000664000175000017500000000170414043610745014212 00000000000000AM_CPPFLAGS = -I$(top_srcdir)/src/libs -I$(top_builddir)/src/libs $(gwenhywfar_includes) -I$(srcdir)/.. $(GWENGUI_GTK2_CFLAGS) $(GTK2_CFLAGS) if WITH_GWENGUI_GTK2 noinst_PROGRAMS=abtest imptest test-dlg-setup else noinst_PROGRAMS=abtest imptest endif abtest_SOURCES=abtest.c abtest_LDADD = $(aqbanking_internal_libs) $(gwenhywfar_libs) imptest_SOURCES=imptest.c imptest_LDADD = $(aqbanking_internal_libs) $(gwenhywfar_libs) if WITH_GWENGUI_GTK2 test_dlg_setup_SOURCES = test-dlg-setup.c test_dlg_setup_LDADD = \ $(aqbanking_internal_libs) \ $(gwenhywfar_libs) \ $(GWENGUI_GTK2_LIBS) \ $(GTK2_LIBS) endif EXTRA_DIST = test-dlg-setup.c #cpptest_SOURCES=cpptest.cpp #cpptest_LDADD = $(aqbanking_internal_libs) $(top_builddir)/src/libs/aqbanking++/libaqbankingpp.la $(gwenhywfar_libs) -lstdc++ sources: for f in $(abtest_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done built_sources: cppcheck: typefiles: typedefs: aqbanking-6.6.1/src/libs/0000755000175000017500000000000015037736156012215 500000000000000aqbanking-6.6.1/src/libs/Makefile.am0000664000175000017500000000243514043610744014165 00000000000000DIST_SUBDIRS=aqbanking aqbankingpp plugins SUBDIRS=aqbanking plugins AM_CPPFLAGS = $(gwenhywfar_includes) -I$(aqbanking_symlinkdir) lib_LTLIBRARIES=libaqbanking.la libaqbanking_la_SOURCES= dummy.c libaqbanking_la_LDFLAGS = -no-undefined -version-info @AQBANKING_SO_CURRENT@:@AQBANKING_SO_REVISION@:@AQBANKING_SO_AGE@ libaqbanking_la_LIBADD= $(gwenhywfar_libs) $(gmp_libs) $(i18n_libs) $(AQEBICS_LIBS) \ aqbanking/libaqbanking_base.la \ plugins/libabplugins.la noinst_PROGRAMS = testlib ab_value_test # Build and link a test program to verify the linker flags testlib_SOURCES = testlib.c testlib_LDADD = libaqbanking.la $(gwenhywfar_libs) # Another test program to verify the parsing of decimal numbers ab_value_test_SOURCES = ab-value-test.c ab_value_test_LDADD = libaqbanking.la $(gwenhywfar_libs) TESTS = testlib ab_value_test sources: for d in $(SUBDIRS); do \ $(MAKE) -C $$d sources; \ done built_sources: for d in $(SUBDIRS); do \ $(MAKE) -C $$d built_sources; \ done ; typefiles: for d in $(SUBDIRS); do \ $(MAKE) -C $$d typefiles; \ done typedefs: for d in $(SUBDIRS); do \ $(MAKE) -C $$d typedefs; \ done cppcheck: for f in $(libaqbanking_la_SOURCES); do \ cppcheck --force $$f ; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done aqbanking-6.6.1/src/libs/testlib.c0000664000175000017500000001072214043610745013742 00000000000000 #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include void dumpNumDenom(const char *t, const AB_VALUE *v) { char numbuf[256]; if (!AB_Value_GetNumDenomString(v, numbuf, sizeof(numbuf))) { fprintf(stderr, "%s (num/den): %s\n", t, numbuf); } else { fprintf(stderr, "%s (num/den): Error\n", t); } } int test1(int argc, char **argv) { AB_VALUE *v1; AB_VALUE *v2; AB_VALUE *v3; AB_VALUE *v4; int rv; v1=AB_Value_fromString("987654321.12345"); if (v1==NULL) { fprintf(stderr, "ERROR: v1\n"); return 1; } fprintf(stderr, "v1 : %f\n", AB_Value_GetValueAsDouble(v1)); dumpNumDenom("v1", v1); v2=AB_Value_fromString("10/1"); if (v2==NULL) { fprintf(stderr, "ERROR: v2\n"); return 1; } fprintf(stderr, "v2 : %f\n", AB_Value_GetValueAsDouble(v2)); dumpNumDenom("v2", v2); v3=AB_Value_dup(v1); if (v3==NULL) { fprintf(stderr, "ERROR: v3\n"); return 1; } fprintf(stderr, "v3 : %f\n", AB_Value_GetValueAsDouble(v3)); dumpNumDenom("v3", v3); v4=AB_Value_fromString("-1250,"); if (v4==NULL) { fprintf(stderr, "ERROR: v4\n"); return 1; } fprintf(stderr, "v4 : %f\n", AB_Value_GetValueAsDouble(v4)); dumpNumDenom("v4", v4); rv=AB_Value_MultValue(v3, v2); if (rv) { fprintf(stderr, "ERROR: v3*v2\n"); return 1; } fprintf(stderr, "r : %f\n", AB_Value_GetValueAsDouble(v3)); dumpNumDenom("r ", v3); if (AB_Value_GetValueAsDouble(v3)!=9876543211.2345) { fprintf(stderr, "Bad result : %f\n", AB_Value_GetValueAsDouble(v3)); return 1; } dumpNumDenom("v3", v3); fprintf(stderr, "Ok.\n"); return 0; } int test4(int argc, char **argv) { int rv; // AB_BANKING *ab; GWEN_GUI *gui; GWEN_BUFFER *tbuf; rv=GWEN_Init(); if (rv) { fprintf(stderr, "ERROR: Unable to init Gwen.\n"); exit(2); } gui=GWEN_Gui_CGui_new(); GWEN_Gui_SetGui(gui); // ab=AB_Banking_new("testlib", NULL, 0); if (argc<3) { fprintf(stderr, "Missing bank code and account number\n"); return 1; } tbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=AB_Banking_MakeGermanIban(argv[1], argv[2], tbuf); if (rv<0) { fprintf(stderr, "ERROR: %d\n", rv); return 2; } rv=AB_Banking_CheckIban(GWEN_Buffer_GetStart(tbuf)); if (rv != 0) { fprintf(stderr, "Bad IBAN (%s)\n", GWEN_Buffer_GetStart(tbuf)); return 2; } fprintf(stderr, "Verified IBAN: %s\n", GWEN_Buffer_GetStart(tbuf)); return 0; } int test5(int argc, char **argv) { AB_VALUE *v1; GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 256, 0, 1); v1=AB_Value_fromString("11,90"); if (v1==NULL) { fprintf(stderr, "ERROR: v1\n"); return 1; } AB_Value_toHbciString(v1, tbuf); if (strcmp(GWEN_Buffer_GetStart(tbuf), "11,9")!=0) { fprintf(stderr, "ERROR: Bad HBCI string (%s)\n", GWEN_Buffer_GetStart(tbuf)); return 2; } GWEN_Buffer_free(tbuf); AB_Value_free(v1); tbuf=GWEN_Buffer_new(0, 256, 0, 1); v1=AB_Value_fromString("11,91"); if (v1==NULL) { fprintf(stderr, "ERROR: v1\n"); return 1; } AB_Value_toHbciString(v1, tbuf); if (strcmp(GWEN_Buffer_GetStart(tbuf), "11,91")!=0) { fprintf(stderr, "ERROR: Bad HBCI string (%s)\n", GWEN_Buffer_GetStart(tbuf)); return 2; } GWEN_Buffer_free(tbuf); AB_Value_free(v1); tbuf=GWEN_Buffer_new(0, 256, 0, 1); v1=AB_Value_fromString("1190"); if (v1==NULL) { fprintf(stderr, "ERROR: v1\n"); return 1; } AB_Value_toHbciString(v1, tbuf); if (strcmp(GWEN_Buffer_GetStart(tbuf), "1190,")!=0) { fprintf(stderr, "ERROR: Bad HBCI string (%s)\n", GWEN_Buffer_GetStart(tbuf)); return 2; } GWEN_Buffer_free(tbuf); AB_Value_free(v1); tbuf=GWEN_Buffer_new(0, 256, 0, 1); v1=AB_Value_fromString("11,00"); if (v1==NULL) { fprintf(stderr, "ERROR: v1\n"); return 1; } AB_Value_toHbciString(v1, tbuf); if (strcmp(GWEN_Buffer_GetStart(tbuf), "11,")!=0) { fprintf(stderr, "ERROR: Bad HBCI string (%s)\n", GWEN_Buffer_GetStart(tbuf)); return 2; } GWEN_Buffer_free(tbuf); AB_Value_free(v1); fprintf(stderr, "Ok.\n"); return 0; } int main(int argc, char *argv[]) { #if 1 return test5(argc, argv); #else AB_BANKING *ab; ab=AB_Banking_new("testlib", "testname", AB_BANKING_EXTENSION_NONE); AB_Banking_free(ab); return 0; #endif } aqbanking-6.6.1/src/libs/Makefile.in0000644000175000017500000013075615037736024014210 00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ noinst_PROGRAMS = testlib$(EXEEXT) ab_value_test$(EXEEXT) TESTS = testlib$(EXEEXT) ab_value_test$(EXEEXT) subdir = src/libs ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/distri.m4 $(top_srcdir)/m4/gwenhywfar.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/os.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = PROGRAMS = $(noinst_PROGRAMS) am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(libdir)" LTLIBRARIES = $(lib_LTLIBRARIES) am__DEPENDENCIES_1 = libaqbanking_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) aqbanking/libaqbanking_base.la \ plugins/libabplugins.la am_libaqbanking_la_OBJECTS = dummy.lo libaqbanking_la_OBJECTS = $(am_libaqbanking_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = libaqbanking_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ $(AM_CFLAGS) $(CFLAGS) $(libaqbanking_la_LDFLAGS) $(LDFLAGS) \ -o $@ am_ab_value_test_OBJECTS = ab-value-test.$(OBJEXT) ab_value_test_OBJECTS = $(am_ab_value_test_OBJECTS) ab_value_test_DEPENDENCIES = libaqbanking.la $(am__DEPENDENCIES_1) am_testlib_OBJECTS = testlib.$(OBJEXT) testlib_OBJECTS = $(am_testlib_OBJECTS) testlib_DEPENDENCIES = libaqbanking.la $(am__DEPENDENCIES_1) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/ab-value-test.Po \ ./$(DEPDIR)/dummy.Plo ./$(DEPDIR)/testlib.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libaqbanking_la_SOURCES) $(ab_value_test_SOURCES) \ $(testlib_SOURCES) DIST_SOURCES = $(libaqbanking_la_SOURCES) $(ab_value_test_SOURCES) \ $(testlib_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ check recheck distdir distdir-am am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } am__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)' RECHECK_LOGS = $(TEST_LOGS) TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp \ $(top_srcdir)/test-driver DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ADD_ACLOCAL_FLAGS = @ADD_ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AQBANKING_CLI_VERSION_STRING = @AQBANKING_CLI_VERSION_STRING@ AQBANKING_FINTS_VERSION_STRING = @AQBANKING_FINTS_VERSION_STRING@ AQBANKING_SO_AGE = @AQBANKING_SO_AGE@ AQBANKING_SO_CURRENT = @AQBANKING_SO_CURRENT@ AQBANKING_SO_EFFECTIVE = @AQBANKING_SO_EFFECTIVE@ AQBANKING_SO_REVISION = @AQBANKING_SO_REVISION@ AQBANKING_VERSION_BUILD = @AQBANKING_VERSION_BUILD@ AQBANKING_VERSION_FULL_STRING = @AQBANKING_VERSION_FULL_STRING@ AQBANKING_VERSION_MAJOR = @AQBANKING_VERSION_MAJOR@ AQBANKING_VERSION_MINOR = @AQBANKING_VERSION_MINOR@ AQBANKING_VERSION_PATCHLEVEL = @AQBANKING_VERSION_PATCHLEVEL@ AQBANKING_VERSION_RELEASE_STRING = @AQBANKING_VERSION_RELEASE_STRING@ AQBANKING_VERSION_STRING = @AQBANKING_VERSION_STRING@ AQBANKING_VERSION_TAG = @AQBANKING_VERSION_TAG@ AQEBICS_CFLAGS = @AQEBICS_CFLAGS@ AQEBICS_LIBS = @AQEBICS_LIBS@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATETIME = @DATETIME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_EXCLUDE_PATTERNS = @DOXYGEN_EXCLUDE_PATTERNS@ DOXYGEN_FILE_PATTERNS = @DOXYGEN_FILE_PATTERNS@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENGUI_GTK2_CFLAGS = @GWENGUI_GTK2_CFLAGS@ GWENGUI_GTK2_LIBS = @GWENGUI_GTK2_LIBS@ GWENHYWFAR_MINIMUM_VERSION = @GWENHYWFAR_MINIMUM_VERSION@ HAVE_GWENGUI_GTK2 = @HAVE_GWENGUI_GTK2@ HAVE_I18N = @HAVE_I18N@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIBXSLT_CFLAGS = @LIBXSLT_CFLAGS@ LIBXSLT_LIBS = @LIBXSLT_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_SUPPORTS_QT = @MSGFMT_SUPPORTS_QT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ TUTORIALS = @TUTORIALS@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XMLMERGE = @XMLMERGE@ XMLSEC_CFLAGS = @XMLSEC_CFLAGS@ XMLSEC_LIBS = @XMLSEC_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ aqbanking_backends = @aqbanking_backends@ aqbanking_cfg_searchdir = @aqbanking_cfg_searchdir@ aqbanking_data_searchdir = @aqbanking_data_searchdir@ aqbanking_headerdir = @aqbanking_headerdir@ aqbanking_headerdir_am = @aqbanking_headerdir_am@ aqbanking_includes = @aqbanking_includes@ aqbanking_internal_libs = @aqbanking_internal_libs@ aqbanking_ldflags = @aqbanking_ldflags@ aqbanking_libs = @aqbanking_libs@ aqbanking_locale_searchdir = @aqbanking_locale_searchdir@ aqbanking_modules = @aqbanking_modules@ aqbanking_pkgdatadir = @aqbanking_pkgdatadir@ aqbanking_plugin_searchdir = @aqbanking_plugin_searchdir@ aqbanking_plugindir = @aqbanking_plugindir@ aqbanking_plugins_backends_dirs = @aqbanking_plugins_backends_dirs@ aqbanking_plugins_backends_libs = @aqbanking_plugins_backends_libs@ aqbanking_plugins_bankinfo_dirs = @aqbanking_plugins_bankinfo_dirs@ aqbanking_plugins_bankinfo_libs = @aqbanking_plugins_bankinfo_libs@ aqbanking_plugins_imexporters_dirs = @aqbanking_plugins_imexporters_dirs@ aqbanking_plugins_imexporters_libs = @aqbanking_plugins_imexporters_libs@ aqbanking_plugins_parsers_dirs = @aqbanking_plugins_parsers_dirs@ aqbanking_symlinkdir = @aqbanking_symlinkdir@ aqbanking_sys_is_windows = @aqbanking_sys_is_windows@ aqbankingpp_modules = @aqbankingpp_modules@ aqebics_datadir = @aqebics_datadir@ aqebics_includes = @aqebics_includes@ aqebics_internal_libs = @aqebics_internal_libs@ aqebics_ldflags = @aqebics_ldflags@ aqebics_libs = @aqebics_libs@ aqfints_datadir = @aqfints_datadir@ aqhbci_datadir = @aqhbci_datadir@ aqhbci_includes = @aqhbci_includes@ aqhbci_internal_libs = @aqhbci_internal_libs@ aqhbci_ldflags = @aqhbci_ldflags@ aqhbci_libs = @aqhbci_libs@ aqofxconnect_includes = @aqofxconnect_includes@ aqofxconnect_internal_libs = @aqofxconnect_internal_libs@ aqofxconnect_libs = @aqofxconnect_libs@ aqpaypal_includes = @aqpaypal_includes@ aqpaypal_internal_libs = @aqpaypal_internal_libs@ aqpaypal_libs = @aqpaypal_libs@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gmp_libs = @gmp_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_dir = @gwenhywfar_dir@ gwenhywfar_has_crypt = @gwenhywfar_has_crypt@ gwenhywfar_headers = @gwenhywfar_headers@ gwenhywfar_includes = @gwenhywfar_includes@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_plugins = @gwenhywfar_plugins@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ typemaker2_exe = @typemaker2_exe@ visibility_cflags = @visibility_cflags@ with_aqebics = @with_aqebics@ with_aqhbci = @with_aqhbci@ DIST_SUBDIRS = aqbanking aqbankingpp plugins SUBDIRS = aqbanking plugins AM_CPPFLAGS = $(gwenhywfar_includes) -I$(aqbanking_symlinkdir) lib_LTLIBRARIES = libaqbanking.la libaqbanking_la_SOURCES = dummy.c libaqbanking_la_LDFLAGS = -no-undefined -version-info @AQBANKING_SO_CURRENT@:@AQBANKING_SO_REVISION@:@AQBANKING_SO_AGE@ libaqbanking_la_LIBADD = $(gwenhywfar_libs) $(gmp_libs) $(i18n_libs) $(AQEBICS_LIBS) \ aqbanking/libaqbanking_base.la \ plugins/libabplugins.la # Build and link a test program to verify the linker flags testlib_SOURCES = testlib.c testlib_LDADD = libaqbanking.la $(gwenhywfar_libs) # Another test program to verify the parsing of decimal numbers ab_value_test_SOURCES = ab-value-test.c ab_value_test_LDADD = libaqbanking.la $(gwenhywfar_libs) all: all-recursive .SUFFIXES: .SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libs/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libs/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ } uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libaqbanking.la: $(libaqbanking_la_OBJECTS) $(libaqbanking_la_DEPENDENCIES) $(EXTRA_libaqbanking_la_DEPENDENCIES) $(AM_V_CCLD)$(libaqbanking_la_LINK) -rpath $(libdir) $(libaqbanking_la_OBJECTS) $(libaqbanking_la_LIBADD) $(LIBS) ab_value_test$(EXEEXT): $(ab_value_test_OBJECTS) $(ab_value_test_DEPENDENCIES) $(EXTRA_ab_value_test_DEPENDENCIES) @rm -f ab_value_test$(EXEEXT) $(AM_V_CCLD)$(LINK) $(ab_value_test_OBJECTS) $(ab_value_test_LDADD) $(LIBS) testlib$(EXEEXT): $(testlib_OBJECTS) $(testlib_DEPENDENCIES) $(EXTRA_testlib_DEPENDENCIES) @rm -f testlib$(EXEEXT) $(AM_V_CCLD)$(LINK) $(testlib_OBJECTS) $(testlib_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ab-value-test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dummy.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testlib.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ elif test -n "$$redo_logs"; then \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 check-TESTS: @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ log_list=`for i in $$bases; do echo $$i.log; done`; \ trs_list=`for i in $$bases; do echo $$i.trs; done`; \ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ exit $$?; recheck: all @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? testlib.log: testlib$(EXEEXT) @p='testlib$(EXEEXT)'; \ b='testlib'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) ab_value_test.log: ab_value_test$(EXEEXT) @p='ab_value_test$(EXEEXT)'; \ b='ab_value_test'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .test.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.test$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-recursive all-am: Makefile $(PROGRAMS) $(LTLIBRARIES) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(libdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ clean-noinstPROGRAMS mostlyclean-am distclean: distclean-recursive -rm -f ./$(DEPDIR)/ab-value-test.Po -rm -f ./$(DEPDIR)/dummy.Plo -rm -f ./$(DEPDIR)/testlib.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-libLTLIBRARIES install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f ./$(DEPDIR)/ab-value-test.Po -rm -f ./$(DEPDIR)/dummy.Plo -rm -f ./$(DEPDIR)/testlib.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-libLTLIBRARIES .MAKE: $(am__recursive_targets) check-am install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ am--depfiles check check-TESTS check-am clean clean-generic \ clean-libLTLIBRARIES clean-libtool clean-noinstPROGRAMS \ cscopelist-am ctags ctags-am distclean distclean-compile \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-libLTLIBRARIES \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ recheck tags tags-am uninstall uninstall-am \ uninstall-libLTLIBRARIES .PRECIOUS: Makefile sources: for d in $(SUBDIRS); do \ $(MAKE) -C $$d sources; \ done built_sources: for d in $(SUBDIRS); do \ $(MAKE) -C $$d built_sources; \ done ; typefiles: for d in $(SUBDIRS); do \ $(MAKE) -C $$d typefiles; \ done typedefs: for d in $(SUBDIRS); do \ $(MAKE) -C $$d typedefs; \ done cppcheck: for f in $(libaqbanking_la_SOURCES); do \ cppcheck --force $$f ; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: aqbanking-6.6.1/src/libs/aqbanking/0000755000175000017500000000000015037736156014150 500000000000000aqbanking-6.6.1/src/libs/aqbanking/backendsupport/0000755000175000017500000000000015037736156017174 500000000000000aqbanking-6.6.1/src/libs/aqbanking/backendsupport/bankinfoplugin.c0000664000175000017500000001215514043610744022262 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "bankinfoplugin_p.h" #include #include #include GWEN_INHERIT_FUNCTIONS(AB_BANKINFO_PLUGIN) GWEN_LIST_FUNCTIONS(AB_BANKINFO_PLUGIN, AB_BankInfoPlugin) GWEN_LIST2_FUNCTIONS(AB_BANKINFO_PLUGIN, AB_BankInfoPlugin) GWEN_INHERIT(GWEN_PLUGIN, AB_PLUGIN_BANKINFO) AB_BANKINFO_PLUGIN *AB_BankInfoPlugin_new(const char *country) { AB_BANKINFO_PLUGIN *bip; assert(country); GWEN_NEW_OBJECT(AB_BANKINFO_PLUGIN, bip); GWEN_INHERIT_INIT(AB_BANKINFO_PLUGIN, bip); GWEN_LIST_INIT(AB_BANKINFO_PLUGIN, bip); bip->usage=1; bip->country=strdup(country); return bip; } void AB_BankInfoPlugin_free(AB_BANKINFO_PLUGIN *bip) { if (bip) { assert(bip->usage); if (--(bip->usage)==0) { GWEN_INHERIT_FINI(AB_BANKINFO_PLUGIN, bip); GWEN_Plugin_free(bip->plugin); free(bip->country); GWEN_LIST_FINI(AB_BANKINFO_PLUGIN, bip); GWEN_FREE_OBJECT(bip); } } } void AB_BankInfoPlugin_Attach(AB_BANKINFO_PLUGIN *bip) { assert(bip); assert(bip->usage); bip->usage++; } const char *AB_BankInfoPlugin_GetCountry(const AB_BANKINFO_PLUGIN *bip) { assert(bip); assert(bip->usage); return bip->country; } AB_BANKINFO *AB_BankInfoPlugin_GetBankInfo(AB_BANKINFO_PLUGIN *bip, const char *branchId, const char *bankId) { assert(bip); assert(bip->usage); if (bip->getBankInfoFn) return bip->getBankInfoFn(bip, branchId, bankId); DBG_INFO(AQBANKING_LOGDOMAIN, "GetBankInfo function not set"); return 0; } int AB_BankInfoPlugin_GetBankInfoByTemplate(AB_BANKINFO_PLUGIN *bip, AB_BANKINFO *tbi, AB_BANKINFO_LIST2 *bl) { assert(bip); assert(bip->usage); if (bip->getBankInfoByTemplateFn) return bip->getBankInfoByTemplateFn(bip, tbi, bl); DBG_INFO(AQBANKING_LOGDOMAIN, "GetBankInfoByTemplate function not set"); return GWEN_ERROR_NOT_SUPPORTED; } AB_BANKINFO_CHECKRESULT AB_BankInfoPlugin_CheckAccount(AB_BANKINFO_PLUGIN *bip, const char *branchId, const char *bankId, const char *accountId) { assert(bip); assert(bip->usage); if (bip->checkAccountFn) return bip->checkAccountFn(bip, branchId, bankId, accountId); DBG_INFO(AQBANKING_LOGDOMAIN, "CheckAccount function not set"); return AB_BankInfoCheckResult_UnknownResult; } void AB_BankInfoPlugin_SetGetBankInfoFn(AB_BANKINFO_PLUGIN *bip, AB_BANKINFOPLUGIN_GETBANKINFO_FN f) { assert(bip); assert(bip->usage); bip->getBankInfoFn=f; } void AB_BankInfoPlugin_SetGetBankInfoByTemplateFn(AB_BANKINFO_PLUGIN *bip, AB_BANKINFOPLUGIN_GETBANKINFOBYTMPLATE_FN f) { assert(bip); assert(bip->usage); bip->getBankInfoByTemplateFn=f; } void AB_BankInfoPlugin_SetCheckAccountFn(AB_BANKINFO_PLUGIN *bip, AB_BANKINFOPLUGIN_CHECKACCOUNT_FN f) { assert(bip); assert(bip->usage); bip->checkAccountFn=f; } void AB_BankInfoPlugin_SetPlugin(AB_BANKINFO_PLUGIN *bip, GWEN_PLUGIN *pl) { assert(bip); assert(bip->usage); bip->plugin=pl; } GWEN_PLUGIN *AB_Plugin_BankInfo_new(GWEN_PLUGIN_MANAGER *pm, const char *name, const char *fileName) { GWEN_PLUGIN *pl; AB_PLUGIN_BANKINFO *xpl; pl=GWEN_Plugin_new(pm, name, fileName); GWEN_NEW_OBJECT(AB_PLUGIN_BANKINFO, xpl); GWEN_INHERIT_SETDATA(GWEN_PLUGIN, AB_PLUGIN_BANKINFO, pl, xpl, AB_Plugin_BankInfo_FreeData); return pl; } GWENHYWFAR_CB void AB_Plugin_BankInfo_FreeData(void *bp, void *p) { AB_PLUGIN_BANKINFO *xpl; xpl=(AB_PLUGIN_BANKINFO *)p; GWEN_FREE_OBJECT(xpl); } AB_BANKINFO_PLUGIN *AB_Plugin_BankInfo_Factory(GWEN_PLUGIN *pl, AB_BANKING *ab) { AB_PLUGIN_BANKINFO *xpl; assert(pl); xpl=GWEN_INHERIT_GETDATA(GWEN_PLUGIN, AB_PLUGIN_BANKINFO, pl); assert(xpl); assert(xpl->pluginFactoryFn); return xpl->pluginFactoryFn(pl, ab); } void AB_Plugin_BankInfo_SetFactoryFn(GWEN_PLUGIN *pl, AB_PLUGIN_BANKINFO_FACTORY_FN fn) { AB_PLUGIN_BANKINFO *xpl; assert(pl); xpl=GWEN_INHERIT_GETDATA(GWEN_PLUGIN, AB_PLUGIN_BANKINFO, pl); assert(xpl); xpl->pluginFactoryFn=fn; } aqbanking-6.6.1/src/libs/aqbanking/backendsupport/swiftdescr.xml0000664000175000017500000004415314730347270022016 00000000000000 This class holds a SWIFT document descriptor like "pain.001.002.03". Such a descriptor can be parsed into an object of this class via AB_SwiftDescr_FromString(). The element of the string given above will go into the following fields: pain -> family 001 -> version1 002 -> version2 03 -> version3 AB_SWIFT_DESCR AB_SwiftDescr swiftdescr with_db with_xml with_refcount with_list1
aqbanking/error.h
gwenhywfar/types.h
gwenhywfar/text.h
gwenhywfar/stringlist.h
ctype.h
with_list2 with_list2 $(api) int $(struct_prefix)_List2_freeAll($(struct_type)_LIST2 *tl); with_list2 with_list2 static $(struct_type) *$(struct_prefix)_List2__freeAll_cb($(struct_type) *t, void *user_data) { $(struct_prefix)_free(t); return NULL; } int $(struct_prefix)_List2_freeAll($(struct_type)_LIST2 *tl) { if (tl) { $(struct_prefix)_List2_ForEach(tl, $(struct_prefix)_List2__freeAll_cb, NULL); $(struct_prefix)_List2_free(tl); } else { DBG_INFO(AQBANKING_LOGDOMAIN, "List missing"); return GWEN_ERROR_INVALID; } return 0; } /** \n * Check whether a given SWIFT descriptor matches the given criteria. \n * @param a descriptor to match against \n * @param wantedFamily descriptor family, e.g. "pain" or "camt" (wildcards and jokers allowed) \n * @param wantedVersion1 first part of the version to match (0 matches all) \n * @param wantedVersion2 second part of the version to match (0 matches all) \n * @param wantedVersion3 third part of the version to match (0 matches all) \n */ \n $(api) int $(struct_prefix)_Matches(const $(struct_type) *a, const char *wantedFamily, int wantedVersion1, int wantedVersion2, int wantedVersion3); int $(struct_prefix)_Matches(const $(struct_type) *d, const char *wantedFamily, int wantedVersion1, int wantedVersion2, int wantedVersion3) { const char *family; int version1; int version2; int version3; if (!wantedFamily) wantedFamily="*"; family=$(struct_prefix)_GetFamily(d); version1=$(struct_prefix)_GetVersion1(d); version2=$(struct_prefix)_GetVersion2(d); version3=$(struct_prefix)_GetVersion3(d); if (family==NULL) family=""; if ((-1!=GWEN_Text_ComparePattern(family, wantedFamily, 0)) && (wantedVersion1==0 || version1==wantedVersion1) && (wantedVersion2==0 || version2==wantedVersion2) && (wantedVersion3==0 || version3==wantedVersion3)) return 1; return 0; } with_list1 with_list1 /** \n * Find a SWIFT descriptor in a list by given criteria. \n * @param a descriptor object with which to start searching \n * @param wantedFamily descriptor family, e.g. "pain" or "camt" (wildcards and jokers allowed) \n * @param wantedVersion1 first part of the version to match (0 matches all) \n * @param wantedVersion2 second part of the version to match (0 matches all) \n * @param wantedVersion3 third part of the version to match (0 matches all) \n */ \n $(struct_type) *$(struct_prefix)_List__FindInternal($(struct_type) *d, const char *wantedFamily, int wantedVersion1, int wantedVersion2, int wantedVersion3); with_list1 with_list1 $(struct_type) *$(struct_prefix)_List__FindInternal($(struct_type) *d, const char *wantedFamily, int wantedVersion1, int wantedVersion2, int wantedVersion3){ if (!wantedFamily) wantedFamily="*"; while(d) { if (1==$(struct_prefix)_Matches(d, wantedFamily, wantedVersion1, wantedVersion2, wantedVersion3)) break; d=$(struct_prefix)_List_Next(d); } /* while */ return d; } with_list1 with_list1 /** \n * Find first SWIFT descriptor in a list by given criteria. \n * @param dl list of descriptors to search in \n * @param wantedFamily descriptor family, e.g. "pain" or "camt" (wildcards and jokers allowed) \n * @param wantedVersion1 first part of the version to match (0 matches all) \n * @param wantedVersion2 second part of the version to match (0 matches all) \n * @param wantedVersion3 third part of the version to match (0 matches all) \n */ \n $(api) $(struct_type) *$(struct_prefix)_List_FindFirst(const $(struct_type)_LIST *dl, const char *wantedFamily, int wantedVersion1, int wantedVersion2, int wantedVersion3); with_list1 with_list1 $(struct_type) *$(struct_prefix)_List_FindFirst(const $(struct_type)_LIST *dl, const char *wantedFamily, int wantedVersion1, int wantedVersion2, int wantedVersion3) { $(struct_type) *d; if ($(struct_prefix)_List_GetCount(dl)==0) { DBG_INFO(AQBANKING_LOGDOMAIN, "empty list"); return NULL; } d=$(struct_prefix)_List_First(dl); assert(d); return $(struct_prefix)_List__FindInternal(d, wantedFamily, wantedVersion1, wantedVersion2, wantedVersion3); } with_list1 with_list1 /** \n * Find next SWIFT descriptor in a list by given criteria. \n * @param d last descriptor checked (i.e. search in the following descriptors) \n * @param wantedFamily descriptor family, e.g. "pain" or "camt" (wildcards and jokers allowed) \n * @param wantedVersion1 first part of the version to match (0 matches all) \n * @param wantedVersion2 second part of the version to match (0 matches all) \n * @param wantedVersion3 third part of the version to match (0 matches all) \n */ \n $(api) $(struct_type) *$(struct_prefix)_List_FindNext($(struct_type) *d, const char *wantedFamily, int wantedVersion1, int wantedVersion2, int wantedVersion3); with_list1 with_list1 $(struct_type) *$(struct_prefix)_List_FindNext($(struct_type) *d, const char *wantedFamily, int wantedVersion1, int wantedVersion2, int wantedVersion3){ assert(d); d=$(struct_prefix)_List_Next(d); if (d==NULL) { DBG_INFO(AQBANKING_LOGDOMAIN, "No more entries in list"); return NULL; } return $(struct_prefix)_List__FindInternal(d, wantedFamily, wantedVersion1, wantedVersion2, wantedVersion3); } /** \n * Create a SWIFT descriptor from a given string. \n * * Example strings are "pain.001.002.03" or "camt_054_001_02". \n * @return created descriptor (NULL for invalid string) \n */ \n $(api) $(struct_type) *$(struct_prefix)_FromString(const char *s); $(struct_type) *$(struct_prefix)_FromString(const char *inputName) { GWEN_STRINGLIST *slist; int count; /* add delimiters here if needed */ slist=GWEN_StringList_fromString(inputName, ":._- \\t", 0); if (slist==NULL) { DBG_INFO(AQBANKING_LOGDOMAIN, "Could not parse string [%s] into list", inputName); return NULL; } count=GWEN_StringList_Count(slist); if (count>2) { int i; for (i=count-1; i>=0; i--) { const char *s; s=GWEN_StringList_StringAt(slist, i); DBG_DEBUG(AQBANKING_LOGDOMAIN, "Handling string[%d of %d]: \"%s\"", i, count, s?s:"<empty>"); if (s && (strcasecmp(s, "camt")==0 || strcasecmp(s, "pain")==0)) { if ((count-i)<4) { DBG_INFO(AQBANKING_LOGDOMAIN, "Too few entries left in string list (source: [%s])", inputName); break; } else { const char *family; int version1; int version2; int version3; $(struct_type) *d; family=s; i++; s=GWEN_StringList_StringAt(slist, i); if (!(s && *s && 1==sscanf(s, "%d", &version1))) { DBG_INFO(AQBANKING_LOGDOMAIN, "No valid string for version1 [%s] ", s?s:"<empty>"); GWEN_StringList_free(slist); return NULL; } i++; s=GWEN_StringList_StringAt(slist, i); if (!(s && *s && 1==sscanf(s, "%d", &version2))) { DBG_INFO(AQBANKING_LOGDOMAIN, "No valid string for version2 [%s] ", s?s:"<empty>"); GWEN_StringList_free(slist); return NULL; } i++; s=GWEN_StringList_StringAt(slist, i); if (!(s && *s && 1==sscanf(s, "%d", &version3))) { DBG_INFO(AQBANKING_LOGDOMAIN, "No valid string for version3 [%s] ", s?s:"<empty>"); GWEN_StringList_free(slist); return NULL; } i++; DBG_INFO(AQBANKING_LOGDOMAIN, "Creating descriptor %s.%03d.%03d.%02d", family?family:"<empty>", version1, version2, version3); d=$(struct_prefix)_new(); $(struct_prefix)_SetFamily(d, family); $(struct_prefix)_SetVersion1(d, version1); $(struct_prefix)_SetVersion2(d, version2); $(struct_prefix)_SetVersion3(d, version3); GWEN_StringList_free(slist); return d; } } /* if camt or pain */ } /* for */ } /* if enough entries in string list to be a valid descriptor */ else { DBG_INFO(AQBANKING_LOGDOMAIN, "Too few entries in string list (source: [%s])", inputName); } GWEN_StringList_free(slist); return NULL; }
Family of descriptors (e.g. "pain" in "pain.001.001.03") public own with_hash const dup const First part of the version (i.e. the "001" in "pain.001.002.03") 0 0 public with_hash Second part of the version (i.e. the "002" in "pain.001.002.03") 0 0 public with_hash Third part of the version (i.e. the "03" in "pain.001.002.03") 0 0 public with_hash Alias string for the given descriptor. This can be used to store additional names with descriptor (e.g. when searching for a special descriptor by a given name you can store the name of the originally searched name here). public own with_hash with_getbyname const dup const Another alias string for the given descriptor. This can be used to store additional names with descriptor (e.g. when searching for a special descriptor by a given name you can store the name of the originally searched name here). public own with_hash with_getbyname const dup const
aqbanking-6.6.1/src/libs/aqbanking/backendsupport/siotlsext.h0000664000175000017500000000157014043610744021316 00000000000000/*************************************************************************** begin : Fri Apr 21 2017 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQBANKING_SIOTLSEXT_H #define AQBANKING_SIOTLSEXT_H #include #include #include #ifdef __cplusplus extern "C" { #endif void AB_SioTlsExt_Extend(GWEN_SYNCIO *sio, AB_USER *u); void AB_SioTlsExt_Unextend(GWEN_SYNCIO *sio); #ifdef __cplusplus } #endif #endif /* AQBANKING_SIOTLSEXT_H */ aqbanking-6.6.1/src/libs/aqbanking/backendsupport/swiftdescr_p.h0000664000175000017500000000242115037736054021757 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "swiftdescr.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef AB_SWIFT_DESCR_SWIFTDESCR_P_H #define AB_SWIFT_DESCR_SWIFTDESCR_P_H #include "./swiftdescr.h" #ifdef __cplusplus extern "C" { #endif struct AB_SWIFT_DESCR { GWEN_LIST_ELEMENT(AB_SWIFT_DESCR) int _refCount; char *family; int version1; int version2; int version3; char *alias1; char *alias2; }; /** * Find a SWIFT descriptor in a list by given criteria. * @param a descriptor object with which to start searching * @param wantedFamily descriptor family, e.g. "pain" or "camt" (wildcards and jokers allowed) * @param wantedVersion1 first part of the version to match (0 matches all) * @param wantedVersion2 second part of the version to match (0 matches all) * @param wantedVersion3 third part of the version to match (0 matches all) */ AB_SWIFT_DESCR *AB_SwiftDescr_List__FindInternal(AB_SWIFT_DESCR *d, const char *wantedFamily, int wantedVersion1, int wantedVersion2, int wantedVersion3); #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/aqbanking/backendsupport/ab_providerqueue.tm20000664000175000017500000000030715037736054023100 00000000000000 AB_PROVIDERQUEUE AB_ProviderQueue aqbanking-6.6.1/src/libs/aqbanking/backendsupport/ab_swift_descr.tm20000664000175000017500000000030015037736054022506 00000000000000 AB_SWIFT_DESCR AB_SwiftDescr aqbanking-6.6.1/src/libs/aqbanking/backendsupport/msgengine.h0000664000175000017500000000211514043610744021230 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQBANKING_MSGENGINE_H #define AQBANKING_MSGENGINE_H #include /* for AQBANKING_API */ #include #ifdef __cplusplus extern "C" { #endif /** * @file aqbanking/msgengine.h * * This message engine implements a few new types: *
    *
  • byte
  • *
  • word (bigEndian="1")
  • *
  • dword (bigEndian="1")
  • *
  • bytes (size="-1")
  • *
  • tlv (tlvType="BER"||"SIMPLE")
  • *
*/ AQBANKING_API GWEN_MSGENGINE *AB_MsgEngine_new(void); #ifdef __cplusplus } #endif #endif /* AQBANKING_MSGENGINE_H */ aqbanking-6.6.1/src/libs/aqbanking/backendsupport/provider.c0000664000175000017500000002371414300721174021105 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "aqbanking/backendsupport/provider_p.h" #include "aqbanking/backendsupport/provider_be.h" #include "aqbanking/banking_l.h" #include #include #include #include #include GWEN_INHERIT_FUNCTIONS(AB_PROVIDER) GWEN_LIST_FUNCTIONS(AB_PROVIDER, AB_Provider) GWEN_LIST2_FUNCTIONS(AB_PROVIDER, AB_Provider) GWEN_INHERIT(GWEN_PLUGIN, AB_PLUGIN_PROVIDER) AB_PROVIDER *AB_Provider_new(AB_BANKING *ab, const char *name) { AB_PROVIDER *pro; GWEN_BUFFER *nbuf; assert(ab); assert(name); nbuf=GWEN_Buffer_new(0, 256, 0, 1); if (GWEN_Text_EscapeToBufferTolerant(name, nbuf)) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Bad backend name, aborting."); GWEN_Buffer_free(nbuf); abort(); } else { char *s; s=GWEN_Buffer_GetStart(nbuf); while (*s) { *s=tolower(*s); s++; } } GWEN_NEW_OBJECT(AB_PROVIDER, pro); pro->usage=1; GWEN_INHERIT_INIT(AB_PROVIDER, pro); GWEN_LIST_INIT(AB_PROVIDER, pro); pro->banking=ab; pro->name=strdup(name); pro->escName=strdup(GWEN_Buffer_GetStart(nbuf)); GWEN_Buffer_free(nbuf); return pro; } void AB_Provider_free(AB_PROVIDER *pro) { if (pro) { assert(pro->usage); if (--(pro->usage)==0) { DBG_VERBOUS(AQBANKING_LOGDOMAIN, "Destroying AB_PROVIDER (%s)", pro->name); GWEN_INHERIT_FINI(AB_PROVIDER, pro); GWEN_Plugin_free(pro->plugin); free(pro->name); free(pro->escName); GWEN_LIST_FINI(AB_PROVIDER, pro); GWEN_FREE_OBJECT(pro); } } } void AB_Provider_AddFlags(AB_PROVIDER *pro, uint32_t fl) { assert(pro); pro->flags|=fl; } void AB_Provider_SetPlugin(AB_PROVIDER *pro, GWEN_PLUGIN *pl) { assert(pro); pro->plugin=pl; } int AB_Provider_Init(AB_PROVIDER *pro, GWEN_DB_NODE *db) { assert(pro); if (pro->initCounter==0) { if (pro->initFn) { int rv; rv=pro->initFn(pro, db); if (!rv) { pro->initCounter++; } return rv; } else { DBG_ERROR(AQBANKING_LOGDOMAIN, "No init function set"); return GWEN_ERROR_NOT_IMPLEMENTED; } } else { pro->initCounter++; DBG_INFO(AQBANKING_LOGDOMAIN, "Backend already initialised, increasing counter to %d", pro->initCounter); return 0; } } int AB_Provider_Fini(AB_PROVIDER *pro, GWEN_DB_NODE *db) { assert(pro); if (pro->initCounter==1) { if (pro->finiFn) { int rv; rv=pro->finiFn(pro, db); pro->initCounter=0; if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); return rv; } return rv; } else { DBG_ERROR(AQBANKING_LOGDOMAIN, "No fini function set"); pro->initCounter=0; return GWEN_ERROR_NOT_IMPLEMENTED; } } else if (pro->initCounter>0) { pro->initCounter--; DBG_INFO(AQBANKING_LOGDOMAIN, "Backend still initialised, decreasing counter to %d", pro->initCounter); return 0; } else { DBG_ERROR(AQBANKING_LOGDOMAIN, "Provider is not initialized"); return GWEN_ERROR_INVALID; } } const char *AB_Provider_GetName(const AB_PROVIDER *pro) { assert(pro); return pro->name; } const char *AB_Provider_GetEscapedName(const AB_PROVIDER *pro) { assert(pro); return pro->escName; } AB_BANKING *AB_Provider_GetBanking(const AB_PROVIDER *pro) { assert(pro); return pro->banking; } void AB_Provider_SetInitFn(AB_PROVIDER *pro, AB_PROVIDER_INIT_FN f) { assert(pro); pro->initFn=f; } void AB_Provider_SetFiniFn(AB_PROVIDER *pro, AB_PROVIDER_FINI_FN f) { assert(pro); pro->finiFn=f; } void AB_Provider_SetGetNewUserDialogFn(AB_PROVIDER *pro, AB_PROVIDER_GET_NEWUSER_DIALOG_FN f) { assert(pro); pro->getNewUserDialogFn=f; } void AB_Provider_SetGetEditUserDialogFn(AB_PROVIDER *pro, AB_PROVIDER_GET_EDITUSER_DIALOG_FN f) { assert(pro); pro->getEditUserDialogFn=f; } void AB_Provider_SetGetNewAccountDialogFn(AB_PROVIDER *pro, AB_PROVIDER_GET_NEWACCOUNT_DIALOG_FN f) { assert(pro); pro->getNewAccountDialogFn=f; } void AB_Provider_SetGetEditAccountDialogFn(AB_PROVIDER *pro, AB_PROVIDER_GET_EDITACCOUNT_DIALOG_FN f) { assert(pro); pro->getEditAccountDialogFn=f; } void AB_Provider_SetGetUserTypeDialogFn(AB_PROVIDER *pro, AB_PROVIDER_GET_USERTYPE_DIALOG_FN f) { assert(pro); pro->getUserTypeDialogFn=f; } void AB_Provider_SetSendCommandsFn(AB_PROVIDER *pro, AB_PROVIDER_SENDCOMMANDS_FN f) { assert(pro); pro->sendCommandsFn=f; } void AB_Provider_SetCreateAccountObjectsFn(AB_PROVIDER *pro, AB_PROVIDER_CREATEACCOUNTOBJECT_FN f) { assert(pro); pro->createAccountObjectFn=f; } void AB_Provider_SetCreateUserObjectsFn(AB_PROVIDER *pro, AB_PROVIDER_CREATEUSEROBJECT_FN f) { assert(pro); pro->createUserObjectFn=f; } void AB_Provider_SetUpdateAccountSpecFn(AB_PROVIDER *pro, AB_PROVIDER_UPDATEACCOUNTSPEC_FN f) { assert(pro); pro->updateAccountSpecFn=f; } void AB_Provider_SetControlFn(AB_PROVIDER *pro, AB_PROVIDER_CONTROL_FN f) { assert(pro); pro->controlFn=f; } AB_ACCOUNT *AB_Provider_CreateAccountObject(AB_PROVIDER *pro) { assert(pro); if (pro->createAccountObjectFn) return pro->createAccountObjectFn(pro); else { AB_ACCOUNT *account; DBG_INFO(AQBANKING_LOGDOMAIN, "Function \"createAccountObject\" not implemented, returning AB_ACCOUNT"); account=AB_Account_new(); AB_Account_SetProvider(account, pro); AB_Account_SetBackendName(account, AB_Provider_GetName(pro)); return account; } } AB_USER *AB_Provider_CreateUserObject(AB_PROVIDER *pro) { assert(pro); if (pro->createUserObjectFn) return pro->createUserObjectFn(pro); else { AB_USER *user; DBG_INFO(AQBANKING_LOGDOMAIN, "Function \"createUserObject\" not implemented, returning AB_USER"); user=AB_User_new(); AB_User_SetProvider(user, pro); AB_User_SetBackendName(user, AB_Provider_GetName(pro)); return user; } } int AB_Provider_UpdateAccountSpec(AB_PROVIDER *pro, AB_ACCOUNT_SPEC *as, int doLock) { assert(pro); if (pro->updateAccountSpecFn) return pro->updateAccountSpecFn(pro, as, doLock); else { DBG_INFO(AQBANKING_LOGDOMAIN, "Function \"updateAccountSpec\" not implemented, ignoring."); return 0; } } int AB_Provider_Control(AB_PROVIDER *pro, int argc, char **argv) { assert(pro); if (pro->controlFn) return pro->controlFn(pro, argc, argv); else return GWEN_ERROR_NOT_IMPLEMENTED; } GWEN_DIALOG *AB_Provider_GetNewUserDialog(AB_PROVIDER *pro, int i) { assert(pro); if (pro->getNewUserDialogFn) return pro->getNewUserDialogFn(pro, i); else return NULL; } GWEN_DIALOG *AB_Provider_GetEditUserDialog(AB_PROVIDER *pro, AB_USER *u) { assert(pro); if (pro->getEditUserDialogFn) { DBG_INFO(AQBANKING_LOGDOMAIN, "calling pro->getEditUserDialogFn"); return pro->getEditUserDialogFn(pro, u); } else { DBG_INFO(AQBANKING_LOGDOMAIN, "No getEditUserDialogFn set"); return NULL; } } GWEN_DIALOG *AB_Provider_GetNewAccountDialog(AB_PROVIDER *pro) { assert(pro); if (pro->getNewAccountDialogFn) return pro->getNewAccountDialogFn(pro); else return NULL; } GWEN_DIALOG *AB_Provider_GetEditAccountDialog(AB_PROVIDER *pro, AB_ACCOUNT *a) { assert(pro); if (pro->getEditAccountDialogFn) return pro->getEditAccountDialogFn(pro, a); else return NULL; } GWEN_DIALOG *AB_Provider_GetUserTypeDialog(AB_PROVIDER *pro) { assert(pro); if (pro->getUserTypeDialogFn) return pro->getUserTypeDialogFn(pro); else return NULL; } int AB_Provider_SendCommands(AB_PROVIDER *pro, AB_PROVIDERQUEUE *pq, AB_IMEXPORTER_CONTEXT *ctx) { assert(pro); if (pro->sendCommandsFn) return pro->sendCommandsFn(pro, pq, ctx); else return GWEN_ERROR_NOT_SUPPORTED; } int AB_Provider_IsInit(const AB_PROVIDER *pro) { assert(pro); return (pro->initCounter>0); } uint32_t AB_Provider_GetFlags(const AB_PROVIDER *pro) { assert(pro); return pro->flags; } int AB_Provider_GetUserDataDir(const AB_PROVIDER *pro, GWEN_BUFFER *buf) { assert(pro); assert(buf); assert(pro->banking); assert(pro->escName); return AB_Banking_GetProviderUserDataDir(pro->banking, pro->escName, buf); } GWEN_PLUGIN *AB_Plugin_Provider_new(GWEN_PLUGIN_MANAGER *pm, const char *name, const char *fileName) { GWEN_PLUGIN *pl; AB_PLUGIN_PROVIDER *xpl; pl=GWEN_Plugin_new(pm, name, fileName); GWEN_NEW_OBJECT(AB_PLUGIN_PROVIDER, xpl); GWEN_INHERIT_SETDATA(GWEN_PLUGIN, AB_PLUGIN_PROVIDER, pl, xpl, AB_Plugin_Provider_FreeData); return pl; } void GWENHYWFAR_CB AB_Plugin_Provider_FreeData(void *bp, void *p) { AB_PLUGIN_PROVIDER *xpl; xpl=(AB_PLUGIN_PROVIDER *)p; GWEN_FREE_OBJECT(xpl); } AB_PROVIDER *AB_Plugin_Provider_Factory(GWEN_PLUGIN *pl, AB_BANKING *ab) { AB_PLUGIN_PROVIDER *xpl; assert(pl); xpl=GWEN_INHERIT_GETDATA(GWEN_PLUGIN, AB_PLUGIN_PROVIDER, pl); assert(xpl); assert(xpl->pluginFactoryFn); return xpl->pluginFactoryFn(pl, ab); } void AB_Plugin_Provider_SetFactoryFn(GWEN_PLUGIN *pl, AB_PLUGIN_PROVIDER_FACTORY_FN fn) { AB_PLUGIN_PROVIDER *xpl; assert(pl); xpl=GWEN_INHERIT_GETDATA(GWEN_PLUGIN, AB_PLUGIN_PROVIDER, pl); assert(xpl); xpl->pluginFactoryFn=fn; } #include "provider_account.c" #include "provider_accspec.c" #include "provider_user.c" #include "provider_queues.c" #include "provider_utils.c" aqbanking-6.6.1/src/libs/aqbanking/backendsupport/imexporter.h0000664000175000017500000001235414043610744021460 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQBANKING_IMEXPORTER_H #define AQBANKING_IMEXPORTER_H #include #include #include #include #include #include /** @addtogroup G_AB_IMEXPORTER Generic Im- and Exporter * * @short Generic Financial Data Importer/Exporter *

* This group contains a generic importer/exporter. *

*

Importing

*

* When importing this group reads transactions and accounts from a * given stream (in most cases a file) and stores them in a given * importer context. *

*

* The application can later browse through all transactions stored within the * given context and import them into its own database as needed. *

*/ /*@{*/ /** @name Flags returned by @ref AB_ImExporter_GetFlags * */ /*@{*/ /** This module supports the function @ref AB_ImExporter_GetEditProfileDialog */ #define AB_IMEXPORTER_FLAGS_GETPROFILEEDITOR_SUPPORTED 0x00000001 /*@}*/ #ifdef __cplusplus extern "C" { #endif typedef struct AB_IMEXPORTER AB_IMEXPORTER; GWEN_INHERIT_FUNCTION_DEFS(AB_IMEXPORTER) #ifdef __cplusplus } #endif #include #include #include #ifdef __cplusplus extern "C" { #endif /** @name Virtual Functions for Backends * */ /*@{*/ /** * Reads the given stream and imports all data from it. This imported * data is stored within the given context. * @param ie pointer to the importer/exporter * @param ctx import context * @param bio stream to read from (usually a file, see * @ref GWEN_BufferedIO_File_new) * @param dbProfile configuration data for the importer. You can get this * using @ref AB_Banking_GetImExporterProfiles. */ int AB_ImExporter_Import(AB_IMEXPORTER *ie, AB_IMEXPORTER_CONTEXT *ctx, GWEN_SYNCIO *sio, GWEN_DB_NODE *dbProfile); /** * Writes all data to the given stream. * @param ie pointer to the importer/exporter * @param ctx export context * @param bio stream to write to (usually a file, see * @ref GWEN_BufferedIO_File_new) * @param dbProfile configuration data for the exporter. You can get this * using @ref AB_Banking_GetImExporterProfiles. */ int AB_ImExporter_Export(AB_IMEXPORTER *ie, AB_IMEXPORTER_CONTEXT *ctx, GWEN_SYNCIO *sio, GWEN_DB_NODE *dbProfile); /** * This function should return a dialog (see @ref GWEN_DIALOG) which * allows editing of the given profile. * You can use @ref AB_ImExporter_GetFlags to determine beforehand whether * this function is supported (look for * @ref AB_IMEXPORTER_FLAGS_GETPROFILEEDITOR_SUPPORTED). * (introduced in AqBanking 4.3.0) * * @param ie pointer to the importer/exporter * * @param dbProfile configuration data for the exporter. You can get this * using @ref AB_Banking_GetImExporterProfiles. * * @param pDlg pointer to a dialog pointer (receives the created dialog if any) * * @return 0 on success, error code otherwise */ int AB_ImExporter_GetEditProfileDialog(AB_IMEXPORTER *ie, GWEN_DB_NODE *dbProfile, const char *testFileName, GWEN_DIALOG **pDlg); /** * This function checks whether the given importer supports the given file. */ int AB_ImExporter_CheckFile(AB_IMEXPORTER *ie, const char *fname); /*@}*/ /** * Returns the AB_BANKING object to which the im/exporter belongs. */ AB_BANKING *AB_ImExporter_GetBanking(const AB_IMEXPORTER *ie); /** * Returns the name of the im/exporter. */ const char *AB_ImExporter_GetName(const AB_IMEXPORTER *ie); /** * Returns the flags if this im/exporter which specify the supported * features. */ uint32_t AB_ImExporter_GetFlags(const AB_IMEXPORTER *ie); /*@}*/ /* defgroup */ /** @name Helper Functions * * These functions are most likely used by implementations of im/exporters. */ /*@{*/ /** * Transforms an UTF-8 string to a DTA string. Untranslateable characters * are replaced by a space (chr 32). */ void AB_ImExporter_Utf8ToDta(const char *p, int size, GWEN_BUFFER *buf); /** * Transforms a DTA string to an UTF-8 string. */ void AB_ImExporter_DtaToUtf8(const char *p, int size, GWEN_BUFFER *buf); void AB_ImExporter_Iso8859_1ToUtf8(const char *p, int size, GWEN_BUFFER *buf); /** * This function call @ref AB_ImExporter_Iso8859_1ToUtf8 on all char * values in the given db. */ int AB_ImExporter_DbFromIso8859_1ToUtf8(GWEN_DB_NODE *db); GWEN_TIME *AB_ImExporter_DateFromString(const char *p, const char *tmpl, int inUtc); /*@}*/ #ifdef __cplusplus } #endif #endif /* AQBANKING_IMEXPORTER_H */ aqbanking-6.6.1/src/libs/aqbanking/backendsupport/user.h0000664000175000017500000001750515037736054020252 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "user.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef AB_USER_USER_H #define AB_USER_USER_H #ifdef __cplusplus extern "C" { #endif /** @page P_AB_USER Structure AB_USER

This page describes the properties of AB_USER.

AB_USER

This type contains basic information about users. All text fields are in UTF-8.

Identifiers

@anchor AB_USER_uniqueId

uniqueId

This is a unique id assigned by AqBanking.

Set this property with @ref AB_User_SetUniqueId(), get it with @ref AB_User_GetUniqueId().

Common Information

@anchor AB_USER_backendName

backendName

Name of the banking backend this account belongs to.

Set this property with @ref AB_User_SetBackendName(), get it with @ref AB_User_GetBackendName().

@anchor AB_USER_userName

userName

Clear name of the user.

Set this property with @ref AB_User_SetUserName(), get it with @ref AB_User_GetUserName().

Information Provided by Banks

@anchor AB_USER_userId

userId

user id assigned by the bank

Set this property with @ref AB_User_SetUserId(), get it with @ref AB_User_GetUserId().

@anchor AB_USER_customerId

customerId

customer id assigned by the bank (in many cases same as user id)

Set this property with @ref AB_User_SetCustomerId(), get it with @ref AB_User_GetCustomerId().

@anchor AB_USER_country

country

Set this property with @ref AB_User_SetCountry(), get it with @ref AB_User_GetCountry().

@anchor AB_USER_bankCode

bankCode

National bank code (e.g. BLZ in Germany, routing number in other countries).

Set this property with @ref AB_User_SetBankCode(), get it with @ref AB_User_GetBankCode().

Internal Data

@anchor AB_USER_provider

provider

Set this property with @ref AB_User_SetProvider(), get it with @ref AB_User_GetProvider().

@anchor AB_USER_certDb

certDb

Set this property with @ref AB_User_SetCertDb(), get it with @ref AB_User_GetCertDb().

@anchor AB_USER_lastSessionId

lastSessionId

Last session id for this user.

Set this property with @ref AB_User_SetLastSessionId(), get it with @ref AB_User_GetLastSessionId().

*/ /* needed system headers */ #include #include #include #include #include #include /* pre-headers */ #include #include #include #include typedef struct AB_USER AB_USER; GWEN_LIST_FUNCTION_DEFS(AB_USER, AB_User) GWEN_LIST2_FUNCTION_DEFS(AB_USER, AB_User) GWEN_INHERIT_FUNCTION_DEFS(AB_USER) /* post-headers */ #include /* definitions for virtual functions (post) */ typedef int (*AB_USER_READFROMDB_FN)(AB_USER *p_struct, GWEN_DB_NODE* dbData); typedef int (*AB_USER_WRITETODB_FN)(const AB_USER *p_struct, GWEN_DB_NODE* dbData); /** Constructor. */ AB_USER *AB_User_new(void); /** Destructor. */ void AB_User_free(AB_USER *p_struct); void AB_User_Attach(AB_USER *p_struct); /** Getter. * Use this function to get the member "uniqueId" (see @ref AB_USER_uniqueId) */ uint32_t AB_User_GetUniqueId(const AB_USER *p_struct); /** Getter. * Use this function to get the member "backendName" (see @ref AB_USER_backendName) */ const char *AB_User_GetBackendName(const AB_USER *p_struct); /** Getter. * Use this function to get the member "userName" (see @ref AB_USER_userName) */ const char *AB_User_GetUserName(const AB_USER *p_struct); /** Getter. * Use this function to get the member "userId" (see @ref AB_USER_userId) */ const char *AB_User_GetUserId(const AB_USER *p_struct); /** Getter. * Use this function to get the member "customerId" (see @ref AB_USER_customerId) */ const char *AB_User_GetCustomerId(const AB_USER *p_struct); /** Getter. * Use this function to get the member "country" (see @ref AB_USER_country) */ const char *AB_User_GetCountry(const AB_USER *p_struct); /** Getter. * Use this function to get the member "bankCode" (see @ref AB_USER_bankCode) */ const char *AB_User_GetBankCode(const AB_USER *p_struct); /** Getter. * Use this function to get the member "provider" (see @ref AB_USER_provider) */ AB_PROVIDER *AB_User_GetProvider(const AB_USER *p_struct); /** Getter. * Use this function to get the member "certDb" (see @ref AB_USER_certDb) */ GWEN_DB_NODE *AB_User_GetCertDb(const AB_USER *p_struct); /** Getter. * Use this function to get the member "lastSessionId" (see @ref AB_USER_lastSessionId) */ uint32_t AB_User_GetLastSessionId(const AB_USER *p_struct); /** Setter. * Use this function to set the member "uniqueId" (see @ref AB_USER_uniqueId) */ void AB_User_SetUniqueId(AB_USER *p_struct, uint32_t p_src); /** Setter. * Use this function to set the member "backendName" (see @ref AB_USER_backendName) */ void AB_User_SetBackendName(AB_USER *p_struct, const char *p_src); /** Setter. * Use this function to set the member "userName" (see @ref AB_USER_userName) */ void AB_User_SetUserName(AB_USER *p_struct, const char *p_src); /** Setter. * Use this function to set the member "userId" (see @ref AB_USER_userId) */ void AB_User_SetUserId(AB_USER *p_struct, const char *p_src); /** Setter. * Use this function to set the member "customerId" (see @ref AB_USER_customerId) */ void AB_User_SetCustomerId(AB_USER *p_struct, const char *p_src); /** Setter. * Use this function to set the member "country" (see @ref AB_USER_country) */ void AB_User_SetCountry(AB_USER *p_struct, const char *p_src); /** Setter. * Use this function to set the member "bankCode" (see @ref AB_USER_bankCode) */ void AB_User_SetBankCode(AB_USER *p_struct, const char *p_src); /** Setter. * Use this function to set the member "provider" (see @ref AB_USER_provider) */ void AB_User_SetProvider(AB_USER *p_struct, AB_PROVIDER *p_src); /** Setter. * Use this function to set the member "certDb" (see @ref AB_USER_certDb) */ void AB_User_SetCertDb(AB_USER *p_struct, GWEN_DB_NODE *p_src); /** Setter. * Use this function to set the member "lastSessionId" (see @ref AB_USER_lastSessionId) */ void AB_User_SetLastSessionId(AB_USER *p_struct, uint32_t p_src); /* prototypes for virtual functions */ /** * Read a user from a GWEN_DB_NODE. * @param dbData Config data to read from. */ int AB_User_ReadFromDb(AB_USER *p_struct, GWEN_DB_NODE* dbData); /** * Write a user to a GWEN_DB_NODE. * @param dbData Config data to read from. */ int AB_User_WriteToDb(const AB_USER *p_struct, GWEN_DB_NODE* dbData); /* setters for virtual functions */ AB_USER_READFROMDB_FN AB_User_SetReadFromDbFn(AB_USER *p_struct, AB_USER_READFROMDB_FN fn); AB_USER_WRITETODB_FN AB_User_SetWriteToDbFn(AB_USER *p_struct, AB_USER_WRITETODB_FN fn); /* getters for virtual functions */ AB_USER_READFROMDB_FN AB_User_GetReadFromDbFn(const AB_USER *p_struct); AB_USER_WRITETODB_FN AB_User_GetWriteToDbFn(const AB_USER *p_struct); void AB_User_ReadDb(AB_USER *p_struct, GWEN_DB_NODE *p_db); int AB_User_WriteDb(const AB_USER *p_struct, GWEN_DB_NODE *p_db); AB_USER *AB_User_fromDb(GWEN_DB_NODE *p_db); int AB_User_toDb(const AB_USER *p_struct, GWEN_DB_NODE *p_db); void AB_User_ReadXml(AB_USER *p_struct, GWEN_XMLNODE *p_db); void AB_User_WriteXml(const AB_USER *p_struct, GWEN_XMLNODE *p_db); void AB_User_toXml(const AB_USER *p_struct, GWEN_XMLNODE *p_db); AB_USER *AB_User_fromXml(GWEN_XMLNODE *p_db); AB_USER *AB_User_List_GetByUniqueId(const AB_USER_LIST *p_list, uint32_t p_cmp); AB_USER *AB_User_List_GetByLastSessionId(const AB_USER_LIST *p_list, uint32_t p_cmp); #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/aqbanking/backendsupport/ab_jobqueue_list.tm20000664000175000017500000000033515037736054023054 00000000000000 AB_JOBQUEUE_LIST AB_JobQueue_List aqbanking-6.6.1/src/libs/aqbanking/backendsupport/msgengine_p.h0000664000175000017500000000452114043610744021552 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQBANKING_MSGENGINE_P_H #define AQBANKING_MSGENGINE_P_H #include "msgengine.h" typedef struct AB_MSGENGINE AB_MSGENGINE; struct AB_MSGENGINE { int dummy; }; static void GWENHYWFAR_CB AB_MsgEngine_FreeData(void *bp, void *p); static int AB_MsgEngine_TypeRead(GWEN_MSGENGINE *e, GWEN_BUFFER *msgbuf, GWEN_XMLNODE *node, GWEN_BUFFER *vbuf, char escapeChar, const char *delimiters); static int AB_MsgEngine_TypeWrite(GWEN_MSGENGINE *e, GWEN_BUFFER *gbuf, GWEN_BUFFER *data, GWEN_XMLNODE *node); static GWEN_DB_NODE_TYPE AB_MsgEngine_TypeCheck(GWEN_MSGENGINE *e, const char *tname); static const char *AB_MsgEngine_GetCharValue(GWEN_MSGENGINE *e, const char *name, const char *defValue); static int AB_MsgEngine_GetIntValue(GWEN_MSGENGINE *e, const char *name, int defValue); static int AB_MsgEngine_BinTypeRead(GWEN_MSGENGINE *e, GWEN_XMLNODE *node, GWEN_DB_NODE *gr, GWEN_BUFFER *vbuf); static int AB_MsgEngine_BinTypeWrite(GWEN_MSGENGINE *e, GWEN_XMLNODE *node, GWEN_DB_NODE *gr, GWEN_BUFFER *dbuf); static uint32_t AB_MsgEngine__FromBCD(uint32_t value); static uint32_t AB_MsgEngine__ToBCD(uint32_t value); #endif /* CHIPCARD_CLIENT_MSGENGINE_P_H */ aqbanking-6.6.1/src/libs/aqbanking/backendsupport/imexporter_l.h0000664000175000017500000000166314043610744021774 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQBANKING_IMEXPORTER_L_H #define AQBANKING_IMEXPORTER_L_H #define AB_IMEXPORTER_FOLDER "imexporters" #include #include #include #include GWEN_LIST_FUNCTION_DEFS(AB_IMEXPORTER, AB_ImExporter) void AB_ImExporter_SetLibLoader(AB_IMEXPORTER *ie, GWEN_LIBLOADER *ll); #endif /* AQBANKING_IMEXPORTER_L_H */ aqbanking-6.6.1/src/libs/aqbanking/backendsupport/accountqueue.h0000664000175000017500000001116415037736054021770 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "accountqueue.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef AB_ACCOUNTQUEUE_ACCOUNTQUEUE_H #define AB_ACCOUNTQUEUE_ACCOUNTQUEUE_H #ifdef __cplusplus extern "C" { #endif /** @page P_AB_ACCOUNTQUEUE Structure AB_ACCOUNTQUEUE

This page describes the properties of AB_ACCOUNTQUEUE.

AB_ACCOUNTQUEUE

@anchor AB_ACCOUNTQUEUE_accountId

accountId

Set this property with @ref AB_AccountQueue_SetAccountId(), get it with @ref AB_AccountQueue_GetAccountId().

@anchor AB_ACCOUNTQUEUE_account

account

Set this property with @ref AB_AccountQueue_SetAccount(), get it with @ref AB_AccountQueue_GetAccount().

@anchor AB_ACCOUNTQUEUE_accountSpec

accountSpec

Set this property with @ref AB_AccountQueue_SetAccountSpec(), get it with @ref AB_AccountQueue_GetAccountSpec().

@anchor AB_ACCOUNTQUEUE_transactionList

transactionList

Set this property with @ref AB_AccountQueue_SetTransactionList(), get it with @ref AB_AccountQueue_GetTransactionList().

@anchor AB_ACCOUNTQUEUE_jobQueueList

jobQueueList

Set this property with @ref AB_AccountQueue_SetJobQueueList(), get it with @ref AB_AccountQueue_GetJobQueueList().

*/ /* needed system headers */ #include #include #include /* pre-headers */ #include typedef struct AB_ACCOUNTQUEUE AB_ACCOUNTQUEUE; GWEN_LIST_FUNCTION_DEFS(AB_ACCOUNTQUEUE, AB_AccountQueue) GWEN_INHERIT_FUNCTION_DEFS(AB_ACCOUNTQUEUE) /* post-headers */ #include #include #include #include /** Constructor. */ AB_ACCOUNTQUEUE *AB_AccountQueue_new(void); /** Destructor. */ void AB_AccountQueue_free(AB_ACCOUNTQUEUE *p_struct); void AB_AccountQueue_Attach(AB_ACCOUNTQUEUE *p_struct); AB_ACCOUNTQUEUE *AB_AccountQueue_dup(const AB_ACCOUNTQUEUE *p_src); /** Getter. * Use this function to get the member "accountId" (see @ref AB_ACCOUNTQUEUE_accountId) */ uint32_t AB_AccountQueue_GetAccountId(const AB_ACCOUNTQUEUE *p_struct); /** Getter. * Use this function to get the member "account" (see @ref AB_ACCOUNTQUEUE_account) */ AB_ACCOUNT *AB_AccountQueue_GetAccount(const AB_ACCOUNTQUEUE *p_struct); /** Getter. * Use this function to get the member "accountSpec" (see @ref AB_ACCOUNTQUEUE_accountSpec) */ AB_ACCOUNT_SPEC *AB_AccountQueue_GetAccountSpec(const AB_ACCOUNTQUEUE *p_struct); /** Getter. * Use this function to get the member "transactionList" (see @ref AB_ACCOUNTQUEUE_transactionList) */ AB_TRANSACTION_LIST2 *AB_AccountQueue_GetTransactionList(const AB_ACCOUNTQUEUE *p_struct); /** Getter. * Use this function to get the member "jobQueueList" (see @ref AB_ACCOUNTQUEUE_jobQueueList) */ AB_JOBQUEUE_LIST *AB_AccountQueue_GetJobQueueList(const AB_ACCOUNTQUEUE *p_struct); /** Setter. * Use this function to set the member "accountId" (see @ref AB_ACCOUNTQUEUE_accountId) */ void AB_AccountQueue_SetAccountId(AB_ACCOUNTQUEUE *p_struct, uint32_t p_src); /** Setter. * Use this function to set the member "account" (see @ref AB_ACCOUNTQUEUE_account) */ void AB_AccountQueue_SetAccount(AB_ACCOUNTQUEUE *p_struct, AB_ACCOUNT *p_src); /** Setter. * Use this function to set the member "accountSpec" (see @ref AB_ACCOUNTQUEUE_accountSpec) */ void AB_AccountQueue_SetAccountSpec(AB_ACCOUNTQUEUE *p_struct, AB_ACCOUNT_SPEC *p_src); /** Setter. * Use this function to set the member "transactionList" (see @ref AB_ACCOUNTQUEUE_transactionList) */ void AB_AccountQueue_SetTransactionList(AB_ACCOUNTQUEUE *p_struct, AB_TRANSACTION_LIST2 *p_src); /** Setter. * Use this function to set the member "jobQueueList" (see @ref AB_ACCOUNTQUEUE_jobQueueList) */ void AB_AccountQueue_SetJobQueueList(AB_ACCOUNTQUEUE *p_struct, AB_JOBQUEUE_LIST *p_src); AB_ACCOUNTQUEUE_LIST *AB_AccountQueue_List_dup(const AB_ACCOUNTQUEUE_LIST *p_src); AB_ACCOUNTQUEUE *AB_AccountQueue_List_GetByAccountId(const AB_ACCOUNTQUEUE_LIST *p_list, uint32_t p_cmp); void AB_AccountQueue_AddTransaction(AB_ACCOUNTQUEUE *aq, AB_TRANSACTION *t); AB_JOBQUEUE *AB_AccountQueue_FindJobQueue(const AB_ACCOUNTQUEUE *uq, int cmd); void AB_AccountQueue_AddJobQueue(AB_ACCOUNTQUEUE *up, AB_JOBQUEUE *aq); AB_JOBQUEUE *AB_AccountQueue_GetFirstJobQueue(const AB_ACCOUNTQUEUE *up); #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/aqbanking/backendsupport/ab_account_list.tm20000664000175000017500000000033115037736054022665 00000000000000 AB_ACCOUNT_LIST AB_Account_List aqbanking-6.6.1/src/libs/aqbanking/backendsupport/Makefile.in0000644000175000017500000007510115037736024021157 00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/libs/aqbanking/backendsupport ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/distri.m4 $(top_srcdir)/m4/gwenhywfar.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/os.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(dist_typedata_DATA) \ $(noinst_HEADERS) $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libabbesupport_la_LIBADD = am__objects_1 = jobqueue.lo accountqueue.lo userqueue.lo \ providerqueue.lo queue.lo account.lo user.lo swiftdescr.lo am_libabbesupport_la_OBJECTS = $(am__objects_1) siotlsext.lo \ httpsession.lo msgengine.lo provider.lo bankinfoplugin.lo \ imexporter.lo libabbesupport_la_OBJECTS = $(am_libabbesupport_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/account.Plo \ ./$(DEPDIR)/accountqueue.Plo ./$(DEPDIR)/bankinfoplugin.Plo \ ./$(DEPDIR)/httpsession.Plo ./$(DEPDIR)/imexporter.Plo \ ./$(DEPDIR)/jobqueue.Plo ./$(DEPDIR)/msgengine.Plo \ ./$(DEPDIR)/provider.Plo ./$(DEPDIR)/providerqueue.Plo \ ./$(DEPDIR)/queue.Plo ./$(DEPDIR)/siotlsext.Plo \ ./$(DEPDIR)/swiftdescr.Plo ./$(DEPDIR)/user.Plo \ ./$(DEPDIR)/userqueue.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libabbesupport_la_SOURCES) DIST_SOURCES = $(libabbesupport_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(typedatadir)" DATA = $(dist_typedata_DATA) HEADERS = $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADD_ACLOCAL_FLAGS = @ADD_ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AQBANKING_CLI_VERSION_STRING = @AQBANKING_CLI_VERSION_STRING@ AQBANKING_FINTS_VERSION_STRING = @AQBANKING_FINTS_VERSION_STRING@ AQBANKING_SO_AGE = @AQBANKING_SO_AGE@ AQBANKING_SO_CURRENT = @AQBANKING_SO_CURRENT@ AQBANKING_SO_EFFECTIVE = @AQBANKING_SO_EFFECTIVE@ AQBANKING_SO_REVISION = @AQBANKING_SO_REVISION@ AQBANKING_VERSION_BUILD = @AQBANKING_VERSION_BUILD@ AQBANKING_VERSION_FULL_STRING = @AQBANKING_VERSION_FULL_STRING@ AQBANKING_VERSION_MAJOR = @AQBANKING_VERSION_MAJOR@ AQBANKING_VERSION_MINOR = @AQBANKING_VERSION_MINOR@ AQBANKING_VERSION_PATCHLEVEL = @AQBANKING_VERSION_PATCHLEVEL@ AQBANKING_VERSION_RELEASE_STRING = @AQBANKING_VERSION_RELEASE_STRING@ AQBANKING_VERSION_STRING = @AQBANKING_VERSION_STRING@ AQBANKING_VERSION_TAG = @AQBANKING_VERSION_TAG@ AQEBICS_CFLAGS = @AQEBICS_CFLAGS@ AQEBICS_LIBS = @AQEBICS_LIBS@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATETIME = @DATETIME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_EXCLUDE_PATTERNS = @DOXYGEN_EXCLUDE_PATTERNS@ DOXYGEN_FILE_PATTERNS = @DOXYGEN_FILE_PATTERNS@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENGUI_GTK2_CFLAGS = @GWENGUI_GTK2_CFLAGS@ GWENGUI_GTK2_LIBS = @GWENGUI_GTK2_LIBS@ GWENHYWFAR_MINIMUM_VERSION = @GWENHYWFAR_MINIMUM_VERSION@ HAVE_GWENGUI_GTK2 = @HAVE_GWENGUI_GTK2@ HAVE_I18N = @HAVE_I18N@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIBXSLT_CFLAGS = @LIBXSLT_CFLAGS@ LIBXSLT_LIBS = @LIBXSLT_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_SUPPORTS_QT = @MSGFMT_SUPPORTS_QT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ TUTORIALS = @TUTORIALS@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XMLMERGE = @XMLMERGE@ XMLSEC_CFLAGS = @XMLSEC_CFLAGS@ XMLSEC_LIBS = @XMLSEC_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ aqbanking_backends = @aqbanking_backends@ aqbanking_cfg_searchdir = @aqbanking_cfg_searchdir@ aqbanking_data_searchdir = @aqbanking_data_searchdir@ aqbanking_headerdir = @aqbanking_headerdir@ aqbanking_headerdir_am = @aqbanking_headerdir_am@ aqbanking_includes = @aqbanking_includes@ aqbanking_internal_libs = @aqbanking_internal_libs@ aqbanking_ldflags = @aqbanking_ldflags@ aqbanking_libs = @aqbanking_libs@ aqbanking_locale_searchdir = @aqbanking_locale_searchdir@ aqbanking_modules = @aqbanking_modules@ aqbanking_pkgdatadir = @aqbanking_pkgdatadir@ aqbanking_plugin_searchdir = @aqbanking_plugin_searchdir@ aqbanking_plugindir = @aqbanking_plugindir@ aqbanking_plugins_backends_dirs = @aqbanking_plugins_backends_dirs@ aqbanking_plugins_backends_libs = @aqbanking_plugins_backends_libs@ aqbanking_plugins_bankinfo_dirs = @aqbanking_plugins_bankinfo_dirs@ aqbanking_plugins_bankinfo_libs = @aqbanking_plugins_bankinfo_libs@ aqbanking_plugins_imexporters_dirs = @aqbanking_plugins_imexporters_dirs@ aqbanking_plugins_imexporters_libs = @aqbanking_plugins_imexporters_libs@ aqbanking_plugins_parsers_dirs = @aqbanking_plugins_parsers_dirs@ aqbanking_symlinkdir = @aqbanking_symlinkdir@ aqbanking_sys_is_windows = @aqbanking_sys_is_windows@ aqbankingpp_modules = @aqbankingpp_modules@ aqebics_datadir = @aqebics_datadir@ aqebics_includes = @aqebics_includes@ aqebics_internal_libs = @aqebics_internal_libs@ aqebics_ldflags = @aqebics_ldflags@ aqebics_libs = @aqebics_libs@ aqfints_datadir = @aqfints_datadir@ aqhbci_datadir = @aqhbci_datadir@ aqhbci_includes = @aqhbci_includes@ aqhbci_internal_libs = @aqhbci_internal_libs@ aqhbci_ldflags = @aqhbci_ldflags@ aqhbci_libs = @aqhbci_libs@ aqofxconnect_includes = @aqofxconnect_includes@ aqofxconnect_internal_libs = @aqofxconnect_internal_libs@ aqofxconnect_libs = @aqofxconnect_libs@ aqpaypal_includes = @aqpaypal_includes@ aqpaypal_internal_libs = @aqpaypal_internal_libs@ aqpaypal_libs = @aqpaypal_libs@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gmp_libs = @gmp_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_dir = @gwenhywfar_dir@ gwenhywfar_has_crypt = @gwenhywfar_has_crypt@ gwenhywfar_headers = @gwenhywfar_headers@ gwenhywfar_includes = @gwenhywfar_includes@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_plugins = @gwenhywfar_plugins@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ typemaker2_exe = @typemaker2_exe@ visibility_cflags = @visibility_cflags@ with_aqebics = @with_aqebics@ with_aqhbci = @with_aqhbci@ AM_CPPFLAGS = -I$(srcdir)/../.. -I$(srcdir)/.. -I$(top_builddir)/src/libs $(gwenhywfar_includes) AM_CFLAGS = -DBUILDING_AQBANKING @visibility_cflags@ typefiles = \ accountqueue.xml \ userqueue.xml \ providerqueue.xml \ jobqueue.xml \ queue.xml \ account.xml \ user.xml \ swiftdescr.xml typedatadir = $(aqbanking_pkgdatadir)/typemaker2/c dist_typedata_DATA = \ ab_account.tm2 ab_account_list.tm2 ab_account_list2.tm2 \ ab_accountqueue.tm2 ab_accountqueue_list.tm2 \ ab_jobqueue.tm2 ab_jobqueue_list.tm2 \ ab_providerqueue.tm2 ab_providerqueue_list.tm2 \ ab_queue.tm2 \ ab_user.tm2 ab_user_list.tm2 ab_user_list2.tm2 \ ab_userqueue.tm2 ab_userqueue_list.tm2 \ ab_swift_descr.tm2 ab_swift_descr_list.tm2 # order is important here typedata_sources = \ jobqueue.c \ accountqueue.c \ userqueue.c \ providerqueue.c \ queue.c \ account.c \ user.c \ swiftdescr.c built_headers_priv = \ accountqueue_p.h \ userqueue_p.h \ providerqueue_p.h \ jobqueue_p.h \ queue_p.h \ account_p.h \ user_p.h \ swiftdescr_p.h built_headers_pub = \ accountqueue.h \ userqueue.h \ providerqueue.h \ jobqueue.h \ queue.h \ account.h \ user.h \ swiftdescr.h built_headers = $(built_headers_priv) $(built_headers_pub) #iheaderdir=@aqbanking_headerdir_am@/aqbanking #iheader_HEADERS=$(built_headers_pub) noinst_HEADERS = $(built_headers_pub)\ siotlsext.h \ httpsession.h \ msgengine.h \ provider.h \ provider_be.h \ bankinfoplugin.h \ bankinfoplugin_be.h \ siotlsext_p.h \ httpsession_p.h \ msgengine_p.h \ provider_l.h \ provider_p.h \ bankinfoplugin_l.h \ bankinfoplugin_p.h \ imexporter_be.h \ imexporter_l.h \ imexporter_p.h \ imexporter.h noinst_LTLIBRARIES = libabbesupport.la libabbesupport_la_SOURCES = $(typedata_sources) \ siotlsext.c \ httpsession.c \ msgengine.c \ provider.c \ bankinfoplugin.c \ imexporter.c extra_sources = \ provider_account.c \ provider_accspec.c \ provider_user.c \ provider_queues.c \ provider_utils.c EXTRA_DIST = $(typefiles) $(typedata_sources) $(built_headers) $(extra_sources) MAINTAINERCLEANFILES = $(typedata_sources) $(built_headers) $(dist_typedata_DATA) all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libs/aqbanking/backendsupport/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libs/aqbanking/backendsupport/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libabbesupport.la: $(libabbesupport_la_OBJECTS) $(libabbesupport_la_DEPENDENCIES) $(EXTRA_libabbesupport_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libabbesupport_la_OBJECTS) $(libabbesupport_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/account.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/accountqueue.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bankinfoplugin.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/httpsession.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/imexporter.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jobqueue.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/msgengine.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/provider.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/providerqueue.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/queue.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/siotlsext.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/swiftdescr.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/user.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/userqueue.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-dist_typedataDATA: $(dist_typedata_DATA) @$(NORMAL_INSTALL) @list='$(dist_typedata_DATA)'; test -n "$(typedatadir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(typedatadir)'"; \ $(MKDIR_P) "$(DESTDIR)$(typedatadir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(typedatadir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(typedatadir)" || exit $$?; \ done uninstall-dist_typedataDATA: @$(NORMAL_UNINSTALL) @list='$(dist_typedata_DATA)'; test -n "$(typedatadir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(typedatadir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(typedatadir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/account.Plo -rm -f ./$(DEPDIR)/accountqueue.Plo -rm -f ./$(DEPDIR)/bankinfoplugin.Plo -rm -f ./$(DEPDIR)/httpsession.Plo -rm -f ./$(DEPDIR)/imexporter.Plo -rm -f ./$(DEPDIR)/jobqueue.Plo -rm -f ./$(DEPDIR)/msgengine.Plo -rm -f ./$(DEPDIR)/provider.Plo -rm -f ./$(DEPDIR)/providerqueue.Plo -rm -f ./$(DEPDIR)/queue.Plo -rm -f ./$(DEPDIR)/siotlsext.Plo -rm -f ./$(DEPDIR)/swiftdescr.Plo -rm -f ./$(DEPDIR)/user.Plo -rm -f ./$(DEPDIR)/userqueue.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dist_typedataDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/account.Plo -rm -f ./$(DEPDIR)/accountqueue.Plo -rm -f ./$(DEPDIR)/bankinfoplugin.Plo -rm -f ./$(DEPDIR)/httpsession.Plo -rm -f ./$(DEPDIR)/imexporter.Plo -rm -f ./$(DEPDIR)/jobqueue.Plo -rm -f ./$(DEPDIR)/msgengine.Plo -rm -f ./$(DEPDIR)/provider.Plo -rm -f ./$(DEPDIR)/providerqueue.Plo -rm -f ./$(DEPDIR)/queue.Plo -rm -f ./$(DEPDIR)/siotlsext.Plo -rm -f ./$(DEPDIR)/swiftdescr.Plo -rm -f ./$(DEPDIR)/user.Plo -rm -f ./$(DEPDIR)/userqueue.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-dist_typedataDATA .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-generic clean-libtool clean-noinstLTLIBRARIES \ cscopelist-am ctags ctags-am distclean distclean-compile \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dist_typedataDATA \ install-dvi install-dvi-am install-exec install-exec-am \ install-html install-html-am install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-dist_typedataDATA .PRECIOUS: Makefile built_sources: $(typedata_sources) typefiles: $(typefiles) $(typemaker2_exe) -I $(top_srcdir)/src/libs/aqbanking/typemaker2/c -I $(gwenhywfar_dir)/share/gwenhywfar/typemaker2/c -I $(srcdir) -I $(srcdir)/../types --destfolder="$(srcdir)" $(typefiles) typedefs: $(typefiles) $(typemaker2_exe) --defs-only -I $(top_srcdir)/src/libs/aqbanking/typemaker2/c -I $(gwenhywfar_dir)/share/gwenhywfar/typemaker2/c -I $(srcdir) -I $(srcdir)/../types --destfolder="$(srcdir)" $(typefiles) clean_build_files: rm -f $(typedata_sources) $(built_headers) format_build_files: for f in $(typedata_sources) $(built_headers); do \ $(ASTYLE) --style=stroustrup -s2 --min-conditional-indent=0 --indent-labels --max-continuation-indent=80 --pad-comma --pad-header --unpad-paren --align-pointer=name --break-closing-braces --break-one-line-headers --attach-return-type --convert-tabs --max-code-length=120 --break-after-logical --suffix=none $$f; \ done sources: $(typedata_sources) for f in $(libabbesupport_la_SOURCES) $(extra_sources); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done cppcheck: for f in $(libabbesupport_la_SOURCES); do \ cppcheck --force $$f ; \ done # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: aqbanking-6.6.1/src/libs/aqbanking/backendsupport/ab_jobqueue.tm20000664000175000017500000000027015037736054022017 00000000000000 AB_JOBQUEUE AB_JobQueue aqbanking-6.6.1/src/libs/aqbanking/backendsupport/bankinfoplugin_be.h0000664000175000017500000000756314043610744022744 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQBANKING_BANKINFOPLUGIN_BE_H #define AQBANKING_BANKINFOPLUGIN_BE_H #include typedef struct AB_BANKINFO_PLUGIN AB_BANKINFO_PLUGIN; #include #include #include #include #include GWEN_INHERIT_FUNCTION_DEFS(AB_BANKINFO_PLUGIN) GWEN_LIST2_FUNCTION_DEFS(AB_BANKINFO_PLUGIN, AB_BankInfoPlugin) typedef AB_BANKINFO_PLUGIN *(*AB_BANKINFO_PLUGIN_FACTORY_FN)(AB_BANKING *ab); /** @name Prototypes For Virtual Functions * */ /*@{*/ typedef AB_BANKINFO *(*AB_BANKINFOPLUGIN_GETBANKINFO_FN)(AB_BANKINFO_PLUGIN *bip, const char *branchId, const char *bankId); typedef int (*AB_BANKINFOPLUGIN_GETBANKINFOBYTMPLATE_FN)(AB_BANKINFO_PLUGIN *bip, AB_BANKINFO *tbi, AB_BANKINFO_LIST2 *bl); typedef AB_BANKINFO_CHECKRESULT(*AB_BANKINFOPLUGIN_CHECKACCOUNT_FN)(AB_BANKINFO_PLUGIN *bip, const char *branchId, const char *bankId, const char *accountId); /*@}*/ /** @name Constructors, Destructors * */ /*@{*/ AB_BANKINFO_PLUGIN *AB_BankInfoPlugin_new(const char *country); void AB_BankInfoPlugin_free(AB_BANKINFO_PLUGIN *bip); void AB_BankInfoPlugin_Attach(AB_BANKINFO_PLUGIN *bip); /*@}*/ /** @name Informational Functions * */ /*@{*/ const char *AB_BankInfoPlugin_GetCountry(const AB_BANKINFO_PLUGIN *bip); /*@}*/ /** @name Virtual Functions * */ /*@{*/ AB_BANKINFO *AB_BankInfoPlugin_GetBankInfo(AB_BANKINFO_PLUGIN *bip, const char *branchId, const char *bankId); int AB_BankInfoPlugin_GetBankInfoByTemplate(AB_BANKINFO_PLUGIN *bip, AB_BANKINFO *tbi, AB_BANKINFO_LIST2 *bl); AB_BANKINFO_CHECKRESULT AB_BankInfoPlugin_CheckAccount(AB_BANKINFO_PLUGIN *bip, const char *branchId, const char *bankId, const char *accountId); /*@}*/ /** @name Setters For Virtual Functions * */ /*@{*/ void AB_BankInfoPlugin_SetGetBankInfoFn(AB_BANKINFO_PLUGIN *bip, AB_BANKINFOPLUGIN_GETBANKINFO_FN f); void AB_BankInfoPlugin_SetGetBankInfoByTemplateFn(AB_BANKINFO_PLUGIN *bip, AB_BANKINFOPLUGIN_GETBANKINFOBYTMPLATE_FN f); void AB_BankInfoPlugin_SetCheckAccountFn(AB_BANKINFO_PLUGIN *bip, AB_BANKINFOPLUGIN_CHECKACCOUNT_FN f); /*@}*/ typedef AB_BANKINFO_PLUGIN *(*AB_PLUGIN_BANKINFO_FACTORY_FN)(GWEN_PLUGIN *pl, AB_BANKING *ab); GWEN_PLUGIN *AB_Plugin_BankInfo_new(GWEN_PLUGIN_MANAGER *pm, const char *name, const char *fileName); AB_BANKINFO_PLUGIN *AB_Plugin_BankInfo_Factory(GWEN_PLUGIN *pl, AB_BANKING *ab); void AB_Plugin_BankInfo_SetFactoryFn(GWEN_PLUGIN *pl, AB_PLUGIN_BANKINFO_FACTORY_FN fn); #endif /* AQBANKING_BANKINFOPLUGIN_BE_H */ aqbanking-6.6.1/src/libs/aqbanking/backendsupport/provider_be.h0000664000175000017500000004547414300721174021567 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ /** @file provider_be.h * @short This file is used by provider backends. */ #ifndef AQBANKING_PROVIDER_BE_H #define AQBANKING_PROVIDER_BE_H #include #include #include #include #include #include #include #ifdef __cplusplus extern "C" { #endif /** @addtogroup G_AB_PROVIDER * */ /*@{*/ #define AB_PROVIDER_FLAGS_HAS_NEWUSER_DIALOG 0x00000001 #define AB_PROVIDER_FLAGS_HAS_EDITUSER_DIALOG 0x00000002 #define AB_PROVIDER_FLAGS_HAS_NEWACCOUNT_DIALOG 0x00000004 #define AB_PROVIDER_FLAGS_HAS_EDITACCOUNT_DIALOG 0x00000008 #define AB_PROVIDER_FLAGS_HAS_USERTYPE_DIALOG 0x00000010 /** See @ref AB_Provider_Init. */ typedef int (*AB_PROVIDER_INIT_FN)(AB_PROVIDER *pro, GWEN_DB_NODE *dbData); /** See @ref AB_Provider_Fini. */ typedef int (*AB_PROVIDER_FINI_FN)(AB_PROVIDER *pro, GWEN_DB_NODE *dbData); typedef GWEN_DIALOG *(*AB_PROVIDER_GET_NEWUSER_DIALOG_FN)(AB_PROVIDER *pro, int i); typedef GWEN_DIALOG *(*AB_PROVIDER_GET_EDITUSER_DIALOG_FN)(AB_PROVIDER *pro, AB_USER *u); typedef GWEN_DIALOG *(*AB_PROVIDER_GET_NEWACCOUNT_DIALOG_FN)(AB_PROVIDER *pro); typedef GWEN_DIALOG *(*AB_PROVIDER_GET_EDITACCOUNT_DIALOG_FN)(AB_PROVIDER *pro, AB_ACCOUNT *a); typedef GWEN_DIALOG *(*AB_PROVIDER_GET_USERTYPE_DIALOG_FN)(AB_PROVIDER *pro); typedef int (*AB_PROVIDER_SENDCOMMANDS_FN)(AB_PROVIDER *pro, AB_PROVIDERQUEUE *pq, AB_IMEXPORTER_CONTEXT *ctx); typedef AB_ACCOUNT *(*AB_PROVIDER_CREATEACCOUNTOBJECT_FN)(AB_PROVIDER *pro); typedef AB_USER *(*AB_PROVIDER_CREATEUSEROBJECT_FN)(AB_PROVIDER *pro); typedef int (*AB_PROVIDER_UPDATEACCOUNTSPEC_FN)(AB_PROVIDER *pro, AB_ACCOUNT_SPEC *as, int doLock); typedef int (*AB_PROVIDER_CONTROL_FN)(AB_PROVIDER *pro, int argc, char **argv); /*@}*/ AB_PROVIDER *AB_Provider_new(AB_BANKING *ab, const char *name); /** * @return 0 if the backend is not initialized, !=0 if it is */ int AB_Provider_IsInit(const AB_PROVIDER *pro); void AB_Provider_AddFlags(AB_PROVIDER *pro, uint32_t fl); /** @name Virtual Functions - Minimally Required Functions * */ /*@{*/ /** * Allow the backend to initialize itself. * @param pro backend object * @param db db of the config group for this backend */ int AB_Provider_Init(AB_PROVIDER *pro, GWEN_DB_NODE *db); /** * Allow the backend to deinitialize itself. * @param pro backend object * @param db db of the config group for this backend */ int AB_Provider_Fini(AB_PROVIDER *pro, GWEN_DB_NODE *db); /** * Send commands to backends. * The given queue can be modified by the provider in this function as it will be deleted upon return from this function. * @return 0 if okay, error code otherwise * @param pro pointer to the provider * @param pq provider queue which contains the commands to send, sorted by account (may be modified by provider) * @param ctx context to receive results */ int AB_Provider_SendCommands(AB_PROVIDER *pro, AB_PROVIDERQUEUE *pq, AB_IMEXPORTER_CONTEXT *ctx); /*@}*/ /** @name Virtual Functions - Functions Required When Working with AB_ACCOUNT/AB_USER * */ /*@{*/ /** * Create an empty AB_ACCOUNT object. * This function only needs to be implemented by backends which use AB_ACCOUNT objects internally and which * want to use AqBankings convenience functions for loading and saving AB_ACCOUNT objects. * * @return AB_ACCOUNT object created, NULL on error * @param pro provider which is to create the object */ AB_ACCOUNT *AB_Provider_CreateAccountObject(AB_PROVIDER *pro); /** * Create an empty AB_USER object. * This function only needs to be implemented by backends which use AB_USER objects internally and which * want to use AqBankings convenience functions for loading and saving AB_USER objects. * * @return AB_USER object created, NULL on error * @param pro provider which is to create the object */ AB_USER *AB_Provider_CreateUserObject(AB_PROVIDER *pro); /** * Update the given account spec. * * This callback gives a provider the opportunity to set the transaction limits and other stuff. * This function only needs to be implemented in the backend if it has some specials things to * setup (like transaction limits). * * @return 0 if okay, error code otherwise * @param pro pointer to provider object * @param as account spec object to update */ int AB_Provider_UpdateAccountSpec(AB_PROVIDER *pro, AB_ACCOUNT_SPEC *as, int doLock); /*@}*/ /** @name Virtual Functions - Special Functions * */ /*@{*/ /** * Allow the backend to perform some tasks specific to the given provider. * * Most backends use this function to provide command line functions to retrieve account list, * create accounts and user etc. * * @return depending on the task performed, generally negative on error * @param pro pointer to provider object * @param argc number of arguments in the argument list * @param argv pointer to the argument list */ int AB_Provider_Control(AB_PROVIDER *pro, int argc, char **argv); /*@}*/ /** @name Virtual Functions - Functions Providing Graphical Dialogs * */ /*@{*/ /** * Create a dialog which allows to create a new user. * The dialog returned (if any) must be derived via @ref AB_NewUserDialog_new(). * @param pro pointer to the backend for which a new user is to be created * @param i additional parameter depending on the backend. it can be used * to specify the user type to be created (e.g. for HBCI those values * specify whether PIN/TAN, keyfile or chipcard users are to be created). * Use value 0 for the generic dialog. */ GWEN_DIALOG *AB_Provider_GetNewUserDialog(AB_PROVIDER *pro, int i); GWEN_DIALOG *AB_Provider_GetEditUserDialog(AB_PROVIDER *pro, AB_USER *u); /** * Create a dialog which allows to create a new account. * The dialog returned (if any) must be derived via @ref AB_NewAccountDialog_new(). */ GWEN_DIALOG *AB_Provider_GetNewAccountDialog(AB_PROVIDER *pro); GWEN_DIALOG *AB_Provider_GetEditAccountDialog(AB_PROVIDER *pro, AB_ACCOUNT *a); GWEN_DIALOG *AB_Provider_GetUserTypeDialog(AB_PROVIDER *pro); /*@}*/ /** @name Setters For Virtual Functions * */ /*@{*/ void AB_Provider_SetInitFn(AB_PROVIDER *pro, AB_PROVIDER_INIT_FN f); void AB_Provider_SetFiniFn(AB_PROVIDER *pro, AB_PROVIDER_FINI_FN f); void AB_Provider_SetSendCommandsFn(AB_PROVIDER *pro, AB_PROVIDER_SENDCOMMANDS_FN f); void AB_Provider_SetCreateAccountObjectsFn(AB_PROVIDER *pro, AB_PROVIDER_CREATEACCOUNTOBJECT_FN f); void AB_Provider_SetCreateUserObjectsFn(AB_PROVIDER *pro, AB_PROVIDER_CREATEUSEROBJECT_FN f); void AB_Provider_SetUpdateAccountSpecFn(AB_PROVIDER *pro, AB_PROVIDER_UPDATEACCOUNTSPEC_FN f); void AB_Provider_SetControlFn(AB_PROVIDER *pro, AB_PROVIDER_CONTROL_FN f); void AB_Provider_SetGetNewUserDialogFn(AB_PROVIDER *pro, AB_PROVIDER_GET_NEWUSER_DIALOG_FN f); void AB_Provider_SetGetEditUserDialogFn(AB_PROVIDER *pro, AB_PROVIDER_GET_EDITUSER_DIALOG_FN f); void AB_Provider_SetGetNewAccountDialogFn(AB_PROVIDER *pro, AB_PROVIDER_GET_NEWACCOUNT_DIALOG_FN f); void AB_Provider_SetGetEditAccountDialogFn(AB_PROVIDER *pro, AB_PROVIDER_GET_EDITACCOUNT_DIALOG_FN f); void AB_Provider_SetGetUserTypeDialogFn(AB_PROVIDER *pro, AB_PROVIDER_GET_USERTYPE_DIALOG_FN f); /*@}*/ /** @name Account Management Functions * * Functions in this group can only be used if the callback for @ref AB_Provider_CreateAccountObject is set. */ /*@{*/ /** * Read account given by its unique id. * * When reading the object it will be locked and/or unlocked as requestd. * If both the parameters doLock and doUnlock are !=0 you can later call @ref AB_Provider_EndExclUseAccount on the * account object returned (if any). * * @return 0 if okay, <0 on error * @param pro provider (THIS in C++ speak) * @param uid unique id of the object to read * @param doLock do lock the objects configuration before reading * @param doUnlock do unlock the objects configuration after reading * @param account pointer to the object to read the configuration into */ int AB_Provider_ReadAccount(AB_PROVIDER *pro, uint32_t uid, int doLock, int doUnlock, AB_ACCOUNT *account); /** * Get account given by its unique id. * * When reading the object it will be locked and/or unlocked as requestd. * If both the parameters doLock and doUnlock are !=0 you can later call @ref AB_Provider_EndExclUseAccount on the * object returned (if any). * * Internally calls callback function @ref AB_Provider_CreateAccountObject. * * @return 0 if okay, <0 on error * @param pro provider (THIS in C++ speak) * @param uid unique id of the object to read * @param doLock do lock the objects configuration before reading * @param doUnlock do unlock the objects configuration after reading * @param pAccount pointer to a pointer to receive the object created and read */ int AB_Provider_GetAccount(AB_PROVIDER *pro, uint32_t uid, int doLock, int doUnlock, AB_ACCOUNT **pAccount); /** * Read all account objects belonging to this provider. * * Internally calls callback function @ref AB_Provider_CreateAccountObject. * * @return 0 if okay, <0 on error * @param pro provider (THIS in C++ speak) * @param accountList list to receive all objects read */ int AB_Provider_ReadAccounts(AB_PROVIDER *pro, AB_ACCOUNT_LIST *accountList); /** * Check whether an account with the given id exists. * @return 0 if a user with the given id exists, error code otherwise * @param pro pointer to provider object * @param uid unique id of the object in question */ int AB_Provider_HasAccount(AB_PROVIDER *pro, uint32_t uid); /** * Write account given by its unique id. * * When writing the object it will be locked and/or unlocked as requested. * If both the parameters doLock and doUnlock are !=0 you can later call @ref AH_Provider_EndExclUseAccount on the * object returned (if any). * * @return 0 if okay, <0 on error * @param pro provider (THIS in C++ speak) * @param uid unique id of the object to read * @param doLock do lock the objects configuration before reading * @param doUnlock do unlock the objects configuration after reading * @param account pointer to the object to be written to the configuration */ int AB_Provider_WriteAccount(AB_PROVIDER *pro, uint32_t uid, int doLock, int doUnlock, const AB_ACCOUNT *account); /** * Add an account to the configuration. Assigns a unique id to the new account. * * Also creates and adds a AB_ACCOUNT_SPEC object for applications. * Internally calls the callback function @ref AB_Provider_UpdateAccountSpec(). * * @return 0 on success, error code otherwise * @param pro provider (THIS in C++ speak) * @param a account to add * @param lockCorrespondingUser lock user which this account belongs to while using user data. * Some backends (e.g. AqHBCI) access the corresponding AB_USER object when creating AB_ACCOUNT_SPEC * objects for the given account. If the user is already locked for any reason, the function * should not try to lock the AB_USER object because that must fail. * */ int AB_Provider_AddAccount(AB_PROVIDER *pro, AB_ACCOUNT *a, int lockCorrespondingUser); /** * Remove an account from the configuration. * * Also removes the corresponding AB_ACCOUNT_SPEC object for applications. * * @return 0 on success, error code otherwise * @param pro provider (THIS in C++ speak) * @param uid unique id of the account to remove */ int AB_Provider_DeleteAccount(AB_PROVIDER *pro, uint32_t uid); /** * Begin exclusively using the given account. * This function locks the configuration for the given account, reads the configuration and * leaves the configuration locked upon return. * Therefore you MUST call @ref AH_Provider_EndExclUseAccount() to unlock it later. */ int AB_Provider_BeginExclUseAccount(AB_PROVIDER *pro, AB_ACCOUNT *a); /** * End exclusive use of the given account. * This function writes the still locked configuration of the account and unlocks it afterwards. * * @param pro pointer to provider object * @param a pointer to account * @param abandon if !=0 the configuration is just unlocked, not written */ int AB_Provider_EndExclUseAccount(AB_PROVIDER *pro, AB_ACCOUNT *a, int abandon); /** * Find an account spec from a list which matches the given account. * Only checks against account specs from the same provider as the called one (i.e. if this is the AqHBCI * provider only AqHBCI account specs are checked against). * * @return pointer to matching account spec from the given list, NULL if none found * @param acc account to look for * @param asl account spec list to check against */ AB_ACCOUNT_SPEC *AB_Provider_FindMatchingAccountSpec(AB_PROVIDER *pro, const AB_ACCOUNT *acc, AB_ACCOUNT_SPEC_LIST *asl); /*@}*/ /** @name User Management Functions * * Functions in this group can only be used if the callback for @ref AB_Provider_CreateUserObject is set. */ /*@{*/ /** * This functions reads a user from the configuration database. * When reading the user object it will be locked and/or unlocked as requestd. * If both the parameters doLock and doUnlock are !=0 you can later call @ref AB_Provider_EndExclUseUser on the * user object returned (if any). * * Internally calls callback function @ref AB_Provider_CreateUserObject. * * @param pro pointer to provider object * @param uid unique id of the user to read * @param doLock if !0 0 the config group for the given object will be locked before reading * @param doUnlock if !0 0 the config group for the given object will be unlocked after reading * @param pUser pointer to a variable to receive the user read */ int AB_Provider_GetUser(AB_PROVIDER *pro, uint32_t uid, int doLock, int doUnlock, AB_USER **pUser); /** * Read all users of this backend. * * The caller is responsible for releasing the list and the contained users (if any), * e.g. by calling @ref AB_User_List_free(). * * Internally calls callback function @ref AB_Provider_CreateUserObject. * * @return 0 on success, error code otherwise * @param pro pointer to provider object * @param userList pointer to a list to receive the users. */ int AB_Provider_ReadUsers(AB_PROVIDER *pro, AB_USER_LIST *userList); /** * Check whether a user with the given id exists. * @return 0 if a user with the given id exists, error code otherwise * @param pro pointer to provider object * @param uid unique id of the object in question */ int AB_Provider_HasUser(AB_PROVIDER *pro, uint32_t uid); /** * Write user given by its unique id. * * When writing the object it will be locked and/or unlocked as requested. * If both the parameters doLock and doUnlock are !=0 you can later call @ref AB_Provider_EndExclUseUser on the * object returned (if any). * * @return 0 if okay, <0 on error * @param pro provider (THIS in C++ speak) * @param uid unique id of the object to write * @param doLock do lock the objects configuration before reading * @param doUnlock do unlock the objects configuration after reading * @param user pointer to the object to be written to the configuration */ int AB_Provider_WriteUser(AB_PROVIDER *pro, uint32_t uid, int doLock, int doUnlock, const AB_USER *user); /** * Add a user to the configuration. Assigns a unique id to the new user. * * @return 0 on success, error code otherwise * @param pro provider (THIS in C++ speak) * @param u user to add * */ int AB_Provider_AddUser(AB_PROVIDER *pro, AB_USER *u); /** * Remove a user from the configuration. * * @return 0 on success, error code otherwise * @param pro provider (THIS in C++ speak) * @param uid unique id of the account to remove */ int AB_Provider_DeleteUser(AB_PROVIDER *pro, uint32_t uid); /** * Begin exclusively using the given user. * This function locks the configuration for the given user, reads the configuration and * leaves the configuration locked upon return. * Therefore you MUST call @ref AH_Provider_EndExclUseUser() to unlock it later. */ int AB_Provider_BeginExclUseUser(AB_PROVIDER *pro, AB_USER *u); /** * End exclusive use of the given user. * This function writes the still locked configuration of the user and unlocks it afterwards. * * @param pro pointer to provider object * @param u pointer to user * @param abandon if !=0 the configuration is just unlocked, not written */ int AB_Provider_EndExclUseUser(AB_PROVIDER *pro, AB_USER *u, int abandon); /*@}*/ /** @name Account Spec Management Functions * */ /*@{*/ int AB_Provider_AccountToAccountSpec(AB_PROVIDER *pro, const AB_ACCOUNT *acc, AB_ACCOUNT_SPEC *as, int doLock); int AB_Provider_WriteAccountSpecForAccount(AB_PROVIDER *pro, const AB_ACCOUNT *acc, int doLock); /** * * Internally calls callback function @ref AB_Provider_CreateAccountObject(. */ int AB_Provider_CreateInitialAccountSpecs(AB_PROVIDER *pro); /*@}*/ /** @name Queue Management Functions * */ /*@{*/ /** * Sort jobs in provider queues (AB_PROVIDERQUEUE) into a list of AB_USERQUEUEs. * This function makes use of the field @ref AB_ACCOUNT_userId. */ int AB_Provider_SortProviderQueueIntoUserQueueList(AB_PROVIDER *pro, AB_PROVIDERQUEUE *pq, AB_USERQUEUE_LIST *uql); /** * Frees all users and accounts mentioned in the given AB_USERQUEUE list. */ void AB_Provider_FreeUsersAndAccountsFromUserQueueList(AB_PROVIDER *pro, AB_USERQUEUE_LIST *uql); /*@}*/ /** @name General Utility Functions * */ /*@{*/ void AB_Provider_DumpTransactionsIfDebug(const AB_IMEXPORTER_ACCOUNTINFO *ai, const char *logdomain); /** * This function takes all data from the given srcContext and writes it into the given destAccountInfo. * Transactions will get the given type ty. Destroys srcContext. */ void AB_Provider_MergeContextsSetTypeAndFreeSrc(AB_IMEXPORTER_ACCOUNTINFO *destAccountInfo, AB_IMEXPORTER_CONTEXT *srcContext, int ty); /** * Get or create and add an account info to an ImExporterContext for the given account. */ AB_IMEXPORTER_ACCOUNTINFO *AB_Provider_GetOrAddAccountInfoForAccount(AB_IMEXPORTER_CONTEXT *ctx, const AB_ACCOUNT *a); /*@}*/ typedef AB_PROVIDER *(*AB_PLUGIN_PROVIDER_FACTORY_FN)(GWEN_PLUGIN *pl, AB_BANKING *ab); GWEN_PLUGIN *AB_Plugin_Provider_new(GWEN_PLUGIN_MANAGER *pm, const char *name, const char *fileName); AB_PROVIDER *AB_Plugin_Provider_Factory(GWEN_PLUGIN *pl, AB_BANKING *ab); void AB_Plugin_Provider_SetFactoryFn(GWEN_PLUGIN *pl, AB_PLUGIN_PROVIDER_FACTORY_FN fn); /*@}*/ /* defgroup */ #ifdef __cplusplus } #endif #endif /* AQBANKING_PROVIDER_BE_H */ aqbanking-6.6.1/src/libs/aqbanking/backendsupport/siotlsext_p.h0000664000175000017500000000205614043610744021635 00000000000000/*************************************************************************** begin : Fri Apr 21 2017 copyright : (C) 2017 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQBANKING_SIOTLSEXT_P_H #define AQBANKING_SIOTLSEXT_P_H #include #include typedef struct AB_SIOTLS_EXT AB_SIOTLS_EXT; struct AB_SIOTLS_EXT { AB_USER *user; GWEN_SIO_TLS_CHECKCERT_FN oldCheckCertFn; }; static void GWENHYWFAR_CB AB_SioTlsExt_FreeData(void *bp, void *p); static int GWENHYWFAR_CB AB_SioTlsExt_CheckCert(GWEN_SYNCIO *sio, const GWEN_SSLCERTDESCR *cert); /* static AB_USER *AB_SioTlsExt_GetUser(const GWEN_SYNCIO *sio); */ #endif /* AQBANKING_SIOTLSEXT_P_H */ aqbanking-6.6.1/src/libs/aqbanking/backendsupport/httpsession.c0000664000175000017500000000747714043610744021652 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2004-2017 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "httpsession_p.h" #include "aqbanking/i18n_l.h" #include "aqbanking/backendsupport/siotlsext.h" #include #include #include #include #ifdef OS_WIN32 # define DIRSEP "\\" #else # define DIRSEP "/" #endif GWEN_INHERIT(GWEN_HTTP_SESSION, AB_HTTP_SESSION) GWEN_HTTP_SESSION *AB_HttpSession_new(AB_PROVIDER *pro, AB_USER *u, const char *url, const char *defaultProto, int defaultPort) { GWEN_HTTP_SESSION *sess; AB_HTTP_SESSION *xsess; assert(pro); assert(u); sess=GWEN_HttpSession_new(url, defaultProto, defaultPort); assert(sess); GWEN_NEW_OBJECT(AB_HTTP_SESSION, xsess); GWEN_INHERIT_SETDATA(GWEN_HTTP_SESSION, AB_HTTP_SESSION, sess, xsess, AB_HttpSession_FreeData); xsess->provider=pro; xsess->user=u; xsess->logs=GWEN_Buffer_new(0, 256, 0, 1); /* set virtual functions */ GWEN_HttpSession_SetInitSyncIoFn(sess, AB_HttpSession_InitSyncIo); return sess; } void GWENHYWFAR_CB AB_HttpSession_FreeData(void *bp, void *p) { AB_HTTP_SESSION *xsess; xsess=(AB_HTTP_SESSION *)p; GWEN_Buffer_free(xsess->logs); GWEN_FREE_OBJECT(xsess); } AB_PROVIDER *AB_HttpSession_GetProvider(const GWEN_HTTP_SESSION *sess) { AB_HTTP_SESSION *xsess; assert(sess); xsess=GWEN_INHERIT_GETDATA(GWEN_HTTP_SESSION, AB_HTTP_SESSION, sess); assert(xsess); return xsess->provider; } AB_USER *AB_HttpSession_GetUser(const GWEN_HTTP_SESSION *sess) { AB_HTTP_SESSION *xsess; assert(sess); xsess=GWEN_INHERIT_GETDATA(GWEN_HTTP_SESSION, AB_HTTP_SESSION, sess); assert(xsess); return xsess->user; } void Ab_HttpSession_AddLog(GWEN_HTTP_SESSION *sess, const char *s) { AB_HTTP_SESSION *xsess; assert(sess); xsess=GWEN_INHERIT_GETDATA(GWEN_HTTP_SESSION, AB_HTTP_SESSION, sess); assert(xsess); if (s) { size_t l=strlen(s); if (s) { GWEN_Buffer_AppendString(xsess->logs, s); if (s[l-1]!='\n') GWEN_Buffer_AppendByte(xsess->logs, '\n'); } } } const char *AB_HttpSession_GetLog(const GWEN_HTTP_SESSION *sess) { AB_HTTP_SESSION *xsess; assert(sess); xsess=GWEN_INHERIT_GETDATA(GWEN_HTTP_SESSION, AB_HTTP_SESSION, sess); assert(xsess); if (GWEN_Buffer_GetUsedBytes(xsess->logs)) return GWEN_Buffer_GetStart(xsess->logs); else return NULL; } void AB_HttpSession_ClearLog(GWEN_HTTP_SESSION *sess) { AB_HTTP_SESSION *xsess; assert(sess); xsess=GWEN_INHERIT_GETDATA(GWEN_HTTP_SESSION, AB_HTTP_SESSION, sess); assert(xsess); GWEN_Buffer_Reset(xsess->logs); } int GWENHYWFAR_CB AB_HttpSession_InitSyncIo(GWEN_HTTP_SESSION *sess, GWEN_SYNCIO *sio) { AB_HTTP_SESSION *xsess; GWEN_SYNCIO *sioTls; assert(sess); xsess=GWEN_INHERIT_GETDATA(GWEN_HTTP_SESSION, AB_HTTP_SESSION, sess); assert(xsess); /* modify TLS layer */ sioTls=GWEN_SyncIo_GetBaseIoByTypeName(sio, GWEN_SYNCIO_TLS_TYPE); if (sioTls) { DBG_INFO(AQBANKING_LOGDOMAIN, "Extending TLS SyncIo"); AB_SioTlsExt_Extend(sioTls, xsess->user); } else { DBG_INFO(AQBANKING_LOGDOMAIN, "No TLS SyncIo, not extending"); } return 0; } aqbanking-6.6.1/src/libs/aqbanking/backendsupport/ab_accountqueue.tm20000664000175000017500000000030415037736054022677 00000000000000 AB_ACCOUNTQUEUE AB_AccountQueue aqbanking-6.6.1/src/libs/aqbanking/backendsupport/account.xml0000664000175000017500000006536714043610744021303 00000000000000 This type contains all important information about accounts. All text fields are in UTF-8. AB_ACCOUNT AB_Account account with_inherit with_xml with_db with_list1 with_list2 with_refcount noCopy noDup
aqbanking/error.h
gwenhywfar/mdigest.h
gwenhywfar/text.h
gwenhywfar/buffer.h
aqbanking/account_type.h
aqbanking/backendsupport/provider.h
/** \n * Check whether a given account info object matches the given criteria. \n * @param a account info object to match \n * @param backendName name of the banking backend (wildcards and jokers allowed) \n * @param country ISO code of the country (wildcards and jokers allowed) \n * @param bankId bank code to search for (wildcards and jokers allowed) \n * @param accountNumber account number to search for (wildcards and jokers allowed) \n * @param subAccountId sub account number (wildcards and jokers allowed) \n * @param iban IBAN to search for (wildcards and jokers allowed) \n * @param currency currecny the account uses (wildcards and jokers allowed) \n * @param ty account type (use AB_AccountType_Unknown as wildcard) \n */ \n $(api) int $(struct_prefix)_Matches(const $(struct_type) *a, const char *backendName, const char *country, const char *bankId, const char *accountNumber, const char *subAccountId, const char *iban, const char *currency, int ty); with_list1 with_list1 int $(struct_prefix)_Matches(const $(struct_type) *a, const char *backendName, const char *country, const char *bankId, const char *accountNumber, const char *subAccountId, const char *iban, const char *currency, int ty) { const char *lbackendName; const char *lcountry; const char *lbankId; const char *laccountNumber; const char *lsubAccountId; const char *liban; const char *lcurrency; int lty; if (!backendName) backendName="*"; if (!country) country="*"; if (!bankId) bankId="*"; if (!accountNumber) accountNumber="*"; if (!subAccountId) subAccountId="*"; if (!iban) iban="*"; if (!currency) currency="*"; if (ty>=AB_AccountType_Last) ty=AB_AccountType_Unknown; lbackendName=$(struct_prefix)_GetBackendName(a); lcountry=$(struct_prefix)_GetCountry(a); lbankId=$(struct_prefix)_GetBankCode(a); laccountNumber=$(struct_prefix)_GetAccountNumber(a); lsubAccountId=$(struct_prefix)_GetSubAccountId(a); liban=$(struct_prefix)_GetIban(a); lcurrency=$(struct_prefix)_GetCurrency(a); lty=$(struct_prefix)_GetAccountType(a); if (!lcountry) lcountry=""; if (!lbankId) lbankId=""; if (!laccountNumber) laccountNumber=""; if (!lsubAccountId) lsubAccountId=""; if (!liban) liban=""; if (!lcurrency) lcurrency=""; if (lty>=AB_AccountType_Last || lty <=AB_AccountType_Unknown) lty=AB_AccountType_Unknown; if ((-1!=GWEN_Text_ComparePattern(lbackendName, backendName, 0)) && (-1!=GWEN_Text_ComparePattern(lcountry, country, 0)) && (-1!=GWEN_Text_ComparePattern(lbankId, bankId, 0)) && (-1!=GWEN_Text_ComparePattern(laccountNumber, accountNumber, 0)) && (-1!=GWEN_Text_ComparePattern(lsubAccountId, subAccountId, 0)) && (-1!=GWEN_Text_ComparePattern(liban, iban, 0)) && (-1!=GWEN_Text_ComparePattern(lcurrency, currency, 0)) && ((ty==AB_AccountType_Unknown) || (ty==lty))) return 1; return 0; } with_list1 with_list1 /** \n * Find an account info object in a list of account info objects. \n * @param a account info object with which to start searching \n * @param backendName name of the banking backend (wildcards and jokers allowed) \n * @param country ISO code of the country (wildcards and jokers allowed) \n * @param bankId bank code to search for (wildcards and jokers allowed) \n * @param accountNumber account number to search for (wildcards and jokers allowed) \n * @param subAccountId sub account number (wildcards and jokers allowed) \n * @param iban IBAN to search for (wildcards and jokers allowed) \n * @param currency currecny the account uses (wildcards and jokers allowed) \n * @param ty account type (use AB_AccountType_Unknown as wildcard) \n */ \n $(struct_type) *$(struct_prefix)_List__FindInternal($(struct_type) *a, const char *backendName, const char *country, const char *bankId, const char *accountNumber, const char *subAccountId, const char *iban, const char *currency, int ty); with_list1 with_list1 $(struct_type) *$(struct_prefix)_List__FindInternal($(struct_type) *a, const char *backendName, const char *country, const char *bankId, const char *accountNumber, const char *subAccountId, const char *iban, const char *currency, int ty) { if (!backendName) backendName="*"; if (!country) country="*"; if (!bankId) bankId="*"; if (!accountNumber) accountNumber="*"; if (!subAccountId) subAccountId="*"; if (!iban) iban="*"; if (!currency) currency="*"; if (ty>=AB_AccountType_Last) ty=AB_AccountType_Unknown; while(a) { const char *lbackendName; lbackendName=$(struct_prefix)_GetBackendName(a); if (! (lbackendName && *lbackendName) ) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Account: %s/%s/%s: No backend, ignoring", $(struct_prefix)_GetCountry(a), $(struct_prefix)_GetBankCode(a), $(struct_prefix)_GetAccountNumber(a)); } else { int rv; rv=$(struct_prefix)_Matches(a, backendName, country, bankId, accountNumber, subAccountId, iban, currency, ty); if (rv==1) break; } a=$(struct_prefix)_List_Next(a); } /* while */ return a; } with_list1 with_list1 /** \n * Find the first matching account object in a list of account info objects. \n * @param al list of account objects among to search \n * @param backendName name of the banking backend (wildcards and jokers allowed) \n * @param country ISO code of the country (wildcards and jokers allowed) \n * @param bankId bank code to search for (wildcards and jokers allowed) \n * @param accountNumber account number to search for (wildcards and jokers allowed) \n * @param subAccountId sub account number (wildcards and jokers allowed) \n * @param iban IBAN to search for (wildcards and jokers allowed) \n * @param currency currecny the account uses (wildcards and jokers allowed) \n * @param ty account type (use AB_AccountType_Unknown as wildcard) \n */ \n $(api) $(struct_type) *$(struct_prefix)_List_FindFirst($(struct_type)_LIST *al, const char *backendName, const char *country, const char *bankId, const char *accountNumber, const char *subAccountId, const char *iban, const char *currency, int ty); with_list1 with_list1 $(struct_type) *$(struct_prefix)_List_FindFirst($(struct_type)_LIST *al, const char *backendName, const char *country, const char *bankId, const char *accountNumber, const char *subAccountId, const char *iban, const char *currency, int ty) { $(struct_type) *a; if ($(struct_prefix)_List_GetCount(al)==0) { DBG_INFO(AQBANKING_LOGDOMAIN, "No accounts"); return NULL; } a=$(struct_prefix)_List_First(al); assert(a); return $(struct_prefix)_List__FindInternal(a, backendName, country, bankId, accountNumber, subAccountId, iban, currency, ty); } with_list1 with_list1 /** \n * Find the next matching account object in a list of account info objects. \n * @param a previous matching account objects among to search \n * @param backendName name of the banking backend (wildcards and jokers allowed) \n * @param country ISO code of the country (wildcards and jokers allowed) \n * @param bankId bank code to search for (wildcards and jokers allowed) \n * @param accountNumber account number to search for (wildcards and jokers allowed) \n * @param subAccountId sub account number (wildcards and jokers allowed) \n * @param iban IBAN to search for (wildcards and jokers allowed) \n * @param currency currecny the account uses (wildcards and jokers allowed) \n * @param ty account type (use AB_AccountType_Unknown as wildcard) \n */ \n $(api) $(struct_type) *$(struct_prefix)_List_FindNext($(struct_type) *a, const char *backendName, const char *country, const char *bankId, const char *accountNumber, const char *subAccountId, const char *iban, const char *currency, int ty); with_list1 with_list1 $(struct_type) *$(struct_prefix)_List_FindNext($(struct_type) *a, const char *backendName, const char *country, const char *bankId, const char *accountNumber, const char *subAccountId, const char *iban, const char *currency, int ty) { assert(a); a=$(struct_prefix)_List_Next(a); if (a==NULL) { DBG_INFO(AQBANKING_LOGDOMAIN, "No more account specs"); return NULL; } return $(struct_prefix)_List__FindInternal(a, backendName, country, bankId, accountNumber, subAccountId, iban, currency, ty); } /** \n */ \n int $(struct_prefix)__ReadFromDb($(struct_type) *a, GWEN_DB_NODE *db); int $(struct_prefix)__ReadFromDb($(struct_type) *a, GWEN_DB_NODE *db) { assert(a); $(struct_prefix)_ReadDb(a, db); return 0; } /** \n */ \n int $(struct_prefix)__WriteToDb(const $(struct_type) *a, GWEN_DB_NODE *db); int $(struct_prefix)__WriteToDb(const $(struct_type) *a, GWEN_DB_NODE *db) { assert(a); $(struct_prefix)_WriteDb(a, db); return 0; }
AB_AccountType_Unknown AB_AccountType_Unknown public This is a unique id assigned by AqBanking. 0 0 public with_getbymember Name of the banking backend this account belongs to. public own with_hash const dup const Name of the account owner as it is stored with the bank. public own with_hash const dup const Name of the bank the account belongs to. public own with_hash const dup const Name of the account. public own with_hash const dup const Currency used with this account. public own with_hash const dup const Optional additional info. public own const dup const Internation bank account number as specified by the SEPA specs. public own with_hash const dup const SWIFT code of the bank at which this account is registered. public own with_hash const dup const public own with_hash const dup const National bank code (e.g. BLZ in Germany, routing number in other countries). public own with_hash const dup const This is the branch id of the local bank (OFX only) public own with_hash const dup const Account number in national account specification. public own with_hash const dup const If your account has subaccounts which are distinguished by different suffixes, then this is that suffix. Otherwise it's empty. (HBCI only) public own with_hash const dup const Id of the user to whom this account is assigned. 0 0 public NULL NULL public volatile none none Read an account from a GWEN_DB_NODE. public AB_Account__ReadFromDb int GWEN_ERROR_NOT_IMPLEMENTED Profile data to read from. Write an account to a GWEN_DB_NODE. public AB_Account__WriteToDb const int GWEN_ERROR_NOT_IMPLEMENTED Profile data to read from.
aqbanking-6.6.1/src/libs/aqbanking/backendsupport/provider_account.c0000664000175000017500000001506414546575647022650 00000000000000/*************************************************************************** begin : Mon Nov 26 2018 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ /* * This file is included by provider.c */ int AB_Provider_ReadAccount(AB_PROVIDER *pro, uint32_t uid, int doLock, int doUnlock, AB_ACCOUNT *account) { int rv; GWEN_DB_NODE *db=NULL; uint32_t uidInDb; rv=AB_Banking_Read_AccountConfig(AB_Provider_GetBanking(pro), uid, doLock, doUnlock, &db); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); return rv; } uidInDb=GWEN_DB_GetIntValue(db, "uniqueId", 0, 0); if (uidInDb==0) { DBG_ERROR(AQBANKING_LOGDOMAIN, "No unique id in config, so no account with id %" PRIu32, uid); GWEN_DB_Group_free(db); return GWEN_ERROR_NOT_FOUND; } rv=AB_Account_ReadFromDb(account, db); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); GWEN_DB_Group_free(db); return rv; } if (1) { int i; i=AB_Account_GetAccountType(account); if (i==AB_AccountType_Unknown) AB_Account_SetAccountType(account, AB_AccountType_Unspecified); } if (1) { const char *s; s=AB_Account_GetBackendName(account); if (!(s && *s)) { DBG_ERROR(0, "Account has no backend name!! SNH!!!"); GWEN_DB_Dump(db, 2); assert(0); } } AB_Account_SetProvider(account, pro); AB_Account_SetBackendName(account, AB_Provider_GetName(pro)); GWEN_DB_Group_free(db); return 0; } int AB_Provider_GetAccount(AB_PROVIDER *pro, uint32_t uid, int doLock, int doUnlock, AB_ACCOUNT **pAccount) { int rv; AB_ACCOUNT *a; a=AB_Provider_CreateAccountObject(pro); assert(a); rv=AB_Provider_ReadAccount(pro, uid, doLock, doUnlock, a); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); AB_Account_free(a); return rv; } *pAccount=a; return 0; } int AB_Provider_HasAccount(AB_PROVIDER *pro, uint32_t uid) { int rv; rv=AB_Banking_Has_AccountConfig(AB_Provider_GetBanking(pro), uid); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); return rv; } return 0; } int AB_Provider_ReadAccounts(AB_PROVIDER *pro, AB_ACCOUNT_LIST *accountList) { int rv; GWEN_DB_NODE *dbAll=NULL; GWEN_DB_NODE *db; /* read all config groups for accounts which have a unique id and which belong to this provider */ rv=AB_Banking_ReadConfigGroups(AB_Provider_GetBanking(pro), AB_CFG_GROUP_ACCOUNTS, "uniqueId", "backendName", pro->name, &dbAll); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); return rv; } db=GWEN_DB_GetFirstGroup(dbAll); while (db) { AB_ACCOUNT *a=NULL; a=AB_Provider_CreateAccountObject(pro); if (a==NULL) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Error creating account for backend [%s], ignoring", pro->name); } else { rv=AB_Account_ReadFromDb(a, db); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "Error reading account (%d), ignoring", rv); AB_Account_free(a); } else { AB_Account_SetProvider(a, pro); AB_Account_SetBackendName(a, AB_Provider_GetName(pro)); if (1) { int i; i=AB_Account_GetAccountType(a); if (i==AB_AccountType_Unknown) AB_Account_SetAccountType(a, AB_AccountType_Unspecified); } AB_Account_List_Add(a, accountList); } } /* next */ db=GWEN_DB_GetNextGroup(db); } GWEN_DB_Group_free(dbAll); return 0; } int AB_Provider_WriteAccount(AB_PROVIDER *pro, uint32_t uid, int doLock, int doUnlock, const AB_ACCOUNT *account) { int rv; GWEN_DB_NODE *db; db=GWEN_DB_Group_new("account"); rv=AB_Account_WriteToDb(account, db); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); return rv; } rv=AB_Banking_Write_AccountConfig(AB_Provider_GetBanking(pro), uid, doLock, doUnlock, db); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); GWEN_DB_Group_free(db); return rv; } GWEN_DB_Group_free(db); return 0; } int AB_Provider_AddAccount(AB_PROVIDER *pro, AB_ACCOUNT *a, int lockCorrespondingUser) { uint32_t uid; int rv; const char *s; s=AB_Account_GetBackendName(a); assert(s && *s); if (!(s && *s)) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Can not add account without backend name!"); return GWEN_ERROR_INVALID; } /* add account */ uid=AB_Banking_GetNamedUniqueId(AB_Provider_GetBanking(pro), "account", 1); /* startAtStdUniqueId=1 */ AB_Account_SetUniqueId(a, uid); rv=AB_Provider_WriteAccount(pro, uid, 1, 1, a); /* lock, unlock */ if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); return rv; } /* write account spec */ rv=AB_Provider_WriteAccountSpecForAccount(pro, a, lockCorrespondingUser); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); return rv; } return 0; } int AB_Provider_DeleteAccount(AB_PROVIDER *pro, uint32_t uid) { int rv1; int rv2; rv1=AB_Banking_DeleteAccountSpec(AB_Provider_GetBanking(pro), uid); if (rv1<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv1); } rv2=AB_Banking_Delete_AccountConfig(AB_Provider_GetBanking(pro), uid); if (rv2<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv2); } if (rv1>0) return rv1; if (rv2>0) return rv2; return 0; } int AB_Provider_BeginExclUseAccount(AB_PROVIDER *pro, AB_ACCOUNT *a) { int rv; uint32_t uid; uid=AB_Account_GetUniqueId(a); if (uid==0) { DBG_ERROR(AQBANKING_LOGDOMAIN, "No unique id!"); return GWEN_ERROR_INVALID; } rv=AB_Provider_ReadAccount(pro, uid, 1, 0, a); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); return rv; } return 0; } int AB_Provider_EndExclUseAccount(AB_PROVIDER *pro, AB_ACCOUNT *a, int abandon) { int rv; uint32_t uid; uid=AB_Account_GetUniqueId(a); if (uid==0) { DBG_ERROR(AQBANKING_LOGDOMAIN, "No unique id!"); return GWEN_ERROR_INVALID; } if (abandon) { rv=AB_Banking_Unlock_AccountConfig(AB_Provider_GetBanking(pro), uid); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); return rv; } } else { rv=AB_Provider_WriteAccount(pro, uid, 0, 1, a); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); return rv; } } return 0; } aqbanking-6.6.1/src/libs/aqbanking/backendsupport/account_p.h0000664000175000017500000000411515037736054021240 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "account.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef AB_ACCOUNT_ACCOUNT_P_H #define AB_ACCOUNT_ACCOUNT_P_H #include "./account.h" #ifdef __cplusplus extern "C" { #endif struct AB_ACCOUNT { GWEN_INHERIT_ELEMENT(AB_ACCOUNT) GWEN_LIST_ELEMENT(AB_ACCOUNT) int _refCount; int accountType; uint32_t uniqueId; char *backendName; char *ownerName; char *bankName; char *accountName; char *currency; char *memo; char *iban; char *bic; char *country; char *bankCode; char *branchId; char *accountNumber; char *subAccountId; uint32_t userId; AB_PROVIDER *provider; /* volatile */ AB_ACCOUNT_READFROMDB_FN readFromDbFn; AB_ACCOUNT_WRITETODB_FN writeToDbFn; }; /** * Find an account info object in a list of account info objects. * @param a account info object with which to start searching * @param backendName name of the banking backend (wildcards and jokers allowed) * @param country ISO code of the country (wildcards and jokers allowed) * @param bankId bank code to search for (wildcards and jokers allowed) * @param accountNumber account number to search for (wildcards and jokers allowed) * @param subAccountId sub account number (wildcards and jokers allowed) * @param iban IBAN to search for (wildcards and jokers allowed) * @param currency currecny the account uses (wildcards and jokers allowed) * @param ty account type (use AB_AccountType_Unknown as wildcard) */ AB_ACCOUNT *AB_Account_List__FindInternal(AB_ACCOUNT *a, const char *backendName, const char *country, const char *bankId, const char *accountNumber, const char *subAccountId, const char *iban, const char *currency, int ty); /** */ int AB_Account__ReadFromDb(AB_ACCOUNT *a, GWEN_DB_NODE *db); /** */ int AB_Account__WriteToDb(const AB_ACCOUNT *a, GWEN_DB_NODE *db); #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/aqbanking/backendsupport/swiftdescr.c0000664000175000017500000003507015037736054021441 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "swiftdescr.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "./swiftdescr_p.h" #include #include /* code headers */ /* macro functions */ GWEN_LIST_FUNCTIONS(AB_SWIFT_DESCR, AB_SwiftDescr) AB_SWIFT_DESCR *AB_SwiftDescr_new(void) { AB_SWIFT_DESCR *p_struct; GWEN_NEW_OBJECT(AB_SWIFT_DESCR, p_struct) p_struct->_refCount=1; GWEN_LIST_INIT(AB_SWIFT_DESCR, p_struct) /* members */ p_struct->family=NULL; p_struct->version1=0; p_struct->version2=0; p_struct->version3=0; p_struct->alias1=NULL; p_struct->alias2=NULL; /* virtual functions */ return p_struct; } void AB_SwiftDescr_free(AB_SWIFT_DESCR *p_struct) { if (p_struct) { assert(p_struct->_refCount); if (p_struct->_refCount==1) { GWEN_LIST_FINI(AB_SWIFT_DESCR, p_struct) /* members */ free(p_struct->family); p_struct->family=NULL; free(p_struct->alias1); p_struct->alias1=NULL; free(p_struct->alias2); p_struct->alias2=NULL; p_struct->_refCount=0; GWEN_FREE_OBJECT(p_struct); } else p_struct->_refCount--; } } void AB_SwiftDescr_Attach(AB_SWIFT_DESCR *p_struct) { assert(p_struct); assert(p_struct->_refCount); p_struct->_refCount++; } AB_SWIFT_DESCR *AB_SwiftDescr_dup(const AB_SWIFT_DESCR *p_src) { AB_SWIFT_DESCR *p_struct; assert(p_src); p_struct=AB_SwiftDescr_new(); /* member "family" */ if (p_struct->family) { free(p_struct->family); p_struct->family=NULL; p_struct->family=NULL; } if (p_src->family) { p_struct->family=strdup(p_src->family); } /* member "version1" */ p_struct->version1=p_src->version1; /* member "version2" */ p_struct->version2=p_src->version2; /* member "version3" */ p_struct->version3=p_src->version3; /* member "alias1" */ if (p_struct->alias1) { free(p_struct->alias1); p_struct->alias1=NULL; p_struct->alias1=NULL; } if (p_src->alias1) { p_struct->alias1=strdup(p_src->alias1); } /* member "alias2" */ if (p_struct->alias2) { free(p_struct->alias2); p_struct->alias2=NULL; p_struct->alias2=NULL; } if (p_src->alias2) { p_struct->alias2=strdup(p_src->alias2); } return p_struct; } AB_SWIFT_DESCR *AB_SwiftDescr_copy(AB_SWIFT_DESCR *p_struct, const AB_SWIFT_DESCR *p_src) { assert(p_struct); assert(p_src); /* member "family" */ if (p_struct->family) { free(p_struct->family); p_struct->family=NULL; p_struct->family=NULL; } if (p_src->family) { p_struct->family=strdup(p_src->family); } /* member "version1" */ p_struct->version1=p_src->version1; /* member "version2" */ p_struct->version2=p_src->version2; /* member "version3" */ p_struct->version3=p_src->version3; /* member "alias1" */ if (p_struct->alias1) { free(p_struct->alias1); p_struct->alias1=NULL; p_struct->alias1=NULL; } if (p_src->alias1) { p_struct->alias1=strdup(p_src->alias1); } /* member "alias2" */ if (p_struct->alias2) { free(p_struct->alias2); p_struct->alias2=NULL; p_struct->alias2=NULL; } if (p_src->alias2) { p_struct->alias2=strdup(p_src->alias2); } return p_struct; } const char *AB_SwiftDescr_GetFamily(const AB_SWIFT_DESCR *p_struct){ assert(p_struct); return p_struct->family; } int AB_SwiftDescr_GetVersion1(const AB_SWIFT_DESCR *p_struct){ assert(p_struct); return p_struct->version1; } int AB_SwiftDescr_GetVersion2(const AB_SWIFT_DESCR *p_struct){ assert(p_struct); return p_struct->version2; } int AB_SwiftDescr_GetVersion3(const AB_SWIFT_DESCR *p_struct){ assert(p_struct); return p_struct->version3; } const char *AB_SwiftDescr_GetAlias1(const AB_SWIFT_DESCR *p_struct){ assert(p_struct); return p_struct->alias1; } const char *AB_SwiftDescr_GetAlias2(const AB_SWIFT_DESCR *p_struct){ assert(p_struct); return p_struct->alias2; } void AB_SwiftDescr_SetFamily(AB_SWIFT_DESCR *p_struct, const char *p_src){ assert(p_struct); if (p_struct->family) { free(p_struct->family); p_struct->family=NULL; p_struct->family=NULL; } if (p_src) { p_struct->family=strdup(p_src); } else { p_struct->family=NULL; } } void AB_SwiftDescr_SetVersion1(AB_SWIFT_DESCR *p_struct, int p_src){ assert(p_struct); p_struct->version1=p_src; } void AB_SwiftDescr_SetVersion2(AB_SWIFT_DESCR *p_struct, int p_src){ assert(p_struct); p_struct->version2=p_src; } void AB_SwiftDescr_SetVersion3(AB_SWIFT_DESCR *p_struct, int p_src){ assert(p_struct); p_struct->version3=p_src; } void AB_SwiftDescr_SetAlias1(AB_SWIFT_DESCR *p_struct, const char *p_src){ assert(p_struct); if (p_struct->alias1) { free(p_struct->alias1); p_struct->alias1=NULL; p_struct->alias1=NULL; } if (p_src) { p_struct->alias1=strdup(p_src); } else { p_struct->alias1=NULL; } } void AB_SwiftDescr_SetAlias2(AB_SWIFT_DESCR *p_struct, const char *p_src){ assert(p_struct); if (p_struct->alias2) { free(p_struct->alias2); p_struct->alias2=NULL; p_struct->alias2=NULL; } if (p_src) { p_struct->alias2=strdup(p_src); } else { p_struct->alias2=NULL; } } AB_SWIFT_DESCR_LIST *AB_SwiftDescr_List_dup(const AB_SWIFT_DESCR_LIST *p_src) { AB_SWIFT_DESCR_LIST *p_dest; AB_SWIFT_DESCR *p_elem; assert(p_src); p_dest=AB_SwiftDescr_List_new(); p_elem=AB_SwiftDescr_List_First(p_src); while(p_elem) { AB_SWIFT_DESCR *p_cpy; p_cpy=AB_SwiftDescr_dup(p_elem); AB_SwiftDescr_List_Add(p_cpy, p_dest); p_elem=AB_SwiftDescr_List_Next(p_elem); } return p_dest; } void AB_SwiftDescr_ReadDb(AB_SWIFT_DESCR *p_struct, GWEN_DB_NODE *p_db){ assert(p_struct); /* member "family" */ if (p_struct->family) { free(p_struct->family); p_struct->family=NULL; p_struct->family=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "family", 0, NULL); if (s) p_struct->family=strdup(s); } /* member "version1" */ p_struct->version1=GWEN_DB_GetIntValue(p_db, "version1", 0, 0); /* member "version2" */ p_struct->version2=GWEN_DB_GetIntValue(p_db, "version2", 0, 0); /* member "version3" */ p_struct->version3=GWEN_DB_GetIntValue(p_db, "version3", 0, 0); /* member "alias1" */ if (p_struct->alias1) { free(p_struct->alias1); p_struct->alias1=NULL; p_struct->alias1=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "alias1", 0, NULL); if (s) p_struct->alias1=strdup(s); } /* member "alias2" */ if (p_struct->alias2) { free(p_struct->alias2); p_struct->alias2=NULL; p_struct->alias2=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "alias2", 0, NULL); if (s) p_struct->alias2=strdup(s); } } int AB_SwiftDescr_WriteDb(const AB_SWIFT_DESCR *p_struct, GWEN_DB_NODE *p_db) { int p_rv; assert(p_struct); /* member "family" */ if (p_struct->family) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "family", p_struct->family); else { GWEN_DB_DeleteVar(p_db, "family"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "version1" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "version1", p_struct->version1); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "version2" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "version2", p_struct->version2); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "version3" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "version3", p_struct->version3); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "alias1" */ if (p_struct->alias1) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "alias1", p_struct->alias1); else { GWEN_DB_DeleteVar(p_db, "alias1"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "alias2" */ if (p_struct->alias2) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "alias2", p_struct->alias2); else { GWEN_DB_DeleteVar(p_db, "alias2"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } return 0; } AB_SWIFT_DESCR *AB_SwiftDescr_fromDb(GWEN_DB_NODE *p_db) { AB_SWIFT_DESCR *p_struct; p_struct=AB_SwiftDescr_new(); AB_SwiftDescr_ReadDb(p_struct, p_db); return p_struct; } int AB_SwiftDescr_toDb(const AB_SWIFT_DESCR *p_struct, GWEN_DB_NODE *p_db) { return AB_SwiftDescr_WriteDb(p_struct, p_db); } void AB_SwiftDescr_ReadXml(AB_SWIFT_DESCR *p_struct, GWEN_XMLNODE *p_db){ assert(p_struct); /* member "family" */ if (p_struct->family) { free(p_struct->family); p_struct->family=NULL; p_struct->family=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "family", NULL); if (s) p_struct->family=strdup(s); } /* member "version1" */ p_struct->version1=GWEN_XMLNode_GetIntValue(p_db, "version1", 0); /* member "version2" */ p_struct->version2=GWEN_XMLNode_GetIntValue(p_db, "version2", 0); /* member "version3" */ p_struct->version3=GWEN_XMLNode_GetIntValue(p_db, "version3", 0); /* member "alias1" */ if (p_struct->alias1) { free(p_struct->alias1); p_struct->alias1=NULL; p_struct->alias1=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "alias1", NULL); if (s) p_struct->alias1=strdup(s); } /* member "alias2" */ if (p_struct->alias2) { free(p_struct->alias2); p_struct->alias2=NULL; p_struct->alias2=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "alias2", NULL); if (s) p_struct->alias2=strdup(s); } } void AB_SwiftDescr_WriteXml(const AB_SWIFT_DESCR *p_struct, GWEN_XMLNODE *p_db) { assert(p_struct); /* member "family" */ GWEN_XMLNode_SetCharValue(p_db, "family", p_struct->family); /* member "version1" */ GWEN_XMLNode_SetIntValue(p_db, "version1", p_struct->version1); /* member "version2" */ GWEN_XMLNode_SetIntValue(p_db, "version2", p_struct->version2); /* member "version3" */ GWEN_XMLNode_SetIntValue(p_db, "version3", p_struct->version3); /* member "alias1" */ GWEN_XMLNode_SetCharValue(p_db, "alias1", p_struct->alias1); /* member "alias2" */ GWEN_XMLNode_SetCharValue(p_db, "alias2", p_struct->alias2); } void AB_SwiftDescr_toXml(const AB_SWIFT_DESCR *p_struct, GWEN_XMLNODE *p_db) { AB_SwiftDescr_WriteXml(p_struct, p_db); } AB_SWIFT_DESCR *AB_SwiftDescr_fromXml(GWEN_XMLNODE *p_db) { AB_SWIFT_DESCR *p_struct; p_struct=AB_SwiftDescr_new(); AB_SwiftDescr_ReadXml(p_struct, p_db); return p_struct; } int AB_SwiftDescr_Matches(const AB_SWIFT_DESCR *d, const char *wantedFamily, int wantedVersion1, int wantedVersion2, int wantedVersion3) { const char *family; int version1; int version2; int version3; if (!wantedFamily) wantedFamily="*"; family=AB_SwiftDescr_GetFamily(d); version1=AB_SwiftDescr_GetVersion1(d); version2=AB_SwiftDescr_GetVersion2(d); version3=AB_SwiftDescr_GetVersion3(d); if (family==NULL) family=""; if ((-1!=GWEN_Text_ComparePattern(family, wantedFamily, 0)) && (wantedVersion1==0 || version1==wantedVersion1) && (wantedVersion2==0 || version2==wantedVersion2) && (wantedVersion3==0 || version3==wantedVersion3)) return 1; return 0; } AB_SWIFT_DESCR *AB_SwiftDescr_List__FindInternal(AB_SWIFT_DESCR *d, const char *wantedFamily, int wantedVersion1, int wantedVersion2, int wantedVersion3){ if (!wantedFamily) wantedFamily="*"; while(d) { if (1==AB_SwiftDescr_Matches(d, wantedFamily, wantedVersion1, wantedVersion2, wantedVersion3)) break; d=AB_SwiftDescr_List_Next(d); } /* while */ return d; } AB_SWIFT_DESCR *AB_SwiftDescr_List_FindFirst(const AB_SWIFT_DESCR_LIST *dl, const char *wantedFamily, int wantedVersion1, int wantedVersion2, int wantedVersion3) { AB_SWIFT_DESCR *d; if (AB_SwiftDescr_List_GetCount(dl)==0) { DBG_INFO(AQBANKING_LOGDOMAIN, "empty list"); return NULL; } d=AB_SwiftDescr_List_First(dl); assert(d); return AB_SwiftDescr_List__FindInternal(d, wantedFamily, wantedVersion1, wantedVersion2, wantedVersion3); } AB_SWIFT_DESCR *AB_SwiftDescr_List_FindNext(AB_SWIFT_DESCR *d, const char *wantedFamily, int wantedVersion1, int wantedVersion2, int wantedVersion3){ assert(d); d=AB_SwiftDescr_List_Next(d); if (d==NULL) { DBG_INFO(AQBANKING_LOGDOMAIN, "No more entries in list"); return NULL; } return AB_SwiftDescr_List__FindInternal(d, wantedFamily, wantedVersion1, wantedVersion2, wantedVersion3); } AB_SWIFT_DESCR *AB_SwiftDescr_FromString(const char *inputName) { GWEN_STRINGLIST *slist; int count; /* add delimiters here if needed */ slist=GWEN_StringList_fromString(inputName, ":._- \t", 0); if (slist==NULL) { DBG_INFO(AQBANKING_LOGDOMAIN, "Could not parse string [%s] into list", inputName); return NULL; } count=GWEN_StringList_Count(slist); if (count>2) { int i; for (i=count-1; i>=0; i--) { const char *s; s=GWEN_StringList_StringAt(slist, i); DBG_DEBUG(AQBANKING_LOGDOMAIN, "Handling string[%d of %d]: \"%s\"", i, count, s?s:""); if (s && (strcasecmp(s, "camt")==0 || strcasecmp(s, "pain")==0)) { if ((count-i)<4) { DBG_INFO(AQBANKING_LOGDOMAIN, "Too few entries left in string list (source: [%s])", inputName); break; } else { const char *family; int version1; int version2; int version3; AB_SWIFT_DESCR *d; family=s; i++; s=GWEN_StringList_StringAt(slist, i); if (!(s && *s && 1==sscanf(s, "%d", &version1))) { DBG_INFO(AQBANKING_LOGDOMAIN, "No valid string for version1 [%s] ", s?s:""); GWEN_StringList_free(slist); return NULL; } i++; s=GWEN_StringList_StringAt(slist, i); if (!(s && *s && 1==sscanf(s, "%d", &version2))) { DBG_INFO(AQBANKING_LOGDOMAIN, "No valid string for version2 [%s] ", s?s:""); GWEN_StringList_free(slist); return NULL; } i++; s=GWEN_StringList_StringAt(slist, i); if (!(s && *s && 1==sscanf(s, "%d", &version3))) { DBG_INFO(AQBANKING_LOGDOMAIN, "No valid string for version3 [%s] ", s?s:""); GWEN_StringList_free(slist); return NULL; } i++; DBG_INFO(AQBANKING_LOGDOMAIN, "Creating descriptor %s.%03d.%03d.%02d", family?family:"", version1, version2, version3); d=AB_SwiftDescr_new(); AB_SwiftDescr_SetFamily(d, family); AB_SwiftDescr_SetVersion1(d, version1); AB_SwiftDescr_SetVersion2(d, version2); AB_SwiftDescr_SetVersion3(d, version3); GWEN_StringList_free(slist); return d; } } /* if camt or pain */ } /* for */ } /* if enough entries in string list to be a valid descriptor */ else { DBG_INFO(AQBANKING_LOGDOMAIN, "Too few entries in string list (source: [%s])", inputName); } GWEN_StringList_free(slist); return NULL; } /* code headers */ aqbanking-6.6.1/src/libs/aqbanking/backendsupport/userqueue.h0000664000175000017500000000621115037736054021307 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "userqueue.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef AB_USERQUEUE_USERQUEUE_H #define AB_USERQUEUE_USERQUEUE_H #ifdef __cplusplus extern "C" { #endif /** @page P_AB_USERQUEUE Structure AB_USERQUEUE

This page describes the properties of AB_USERQUEUE.

AB_USERQUEUE

@anchor AB_USERQUEUE_userId

userId

Set this property with @ref AB_UserQueue_SetUserId(), get it with @ref AB_UserQueue_GetUserId().

@anchor AB_USERQUEUE_user

user

Set this property with @ref AB_UserQueue_SetUser(), get it with @ref AB_UserQueue_GetUser().

@anchor AB_USERQUEUE_accountQueueList

accountQueueList

Set this property with @ref AB_UserQueue_SetAccountQueueList(), get it with @ref AB_UserQueue_GetAccountQueueList().

*/ /* needed system headers */ #include #include #include /* pre-headers */ #include typedef struct AB_USERQUEUE AB_USERQUEUE; GWEN_LIST_FUNCTION_DEFS(AB_USERQUEUE, AB_UserQueue) GWEN_INHERIT_FUNCTION_DEFS(AB_USERQUEUE) /* post-headers */ #include #include /** Constructor. */ AB_USERQUEUE *AB_UserQueue_new(void); /** Destructor. */ void AB_UserQueue_free(AB_USERQUEUE *p_struct); void AB_UserQueue_Attach(AB_USERQUEUE *p_struct); AB_USERQUEUE *AB_UserQueue_dup(const AB_USERQUEUE *p_src); /** Getter. * Use this function to get the member "userId" (see @ref AB_USERQUEUE_userId) */ uint32_t AB_UserQueue_GetUserId(const AB_USERQUEUE *p_struct); /** Getter. * Use this function to get the member "user" (see @ref AB_USERQUEUE_user) */ AB_USER *AB_UserQueue_GetUser(const AB_USERQUEUE *p_struct); /** Getter. * Use this function to get the member "accountQueueList" (see @ref AB_USERQUEUE_accountQueueList) */ AB_ACCOUNTQUEUE_LIST *AB_UserQueue_GetAccountQueueList(const AB_USERQUEUE *p_struct); /** Setter. * Use this function to set the member "userId" (see @ref AB_USERQUEUE_userId) */ void AB_UserQueue_SetUserId(AB_USERQUEUE *p_struct, uint32_t p_src); /** Setter. * Use this function to set the member "user" (see @ref AB_USERQUEUE_user) */ void AB_UserQueue_SetUser(AB_USERQUEUE *p_struct, AB_USER *p_src); /** Setter. * Use this function to set the member "accountQueueList" (see @ref AB_USERQUEUE_accountQueueList) */ void AB_UserQueue_SetAccountQueueList(AB_USERQUEUE *p_struct, AB_ACCOUNTQUEUE_LIST *p_src); AB_USERQUEUE_LIST *AB_UserQueue_List_dup(const AB_USERQUEUE_LIST *p_src); AB_USERQUEUE *AB_UserQueue_List_GetByUserId(const AB_USERQUEUE_LIST *p_list, uint32_t p_cmp); AB_ACCOUNTQUEUE *AB_UserQueue_FindAccountQueue(const AB_USERQUEUE *uq, AB_ACCOUNT *acc); void AB_UserQueue_AddAccountQueue(AB_USERQUEUE *up, AB_ACCOUNTQUEUE *aq); AB_ACCOUNTQUEUE *AB_UserQueue_GetFirstAccountQueue(const AB_USERQUEUE *up); #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/aqbanking/backendsupport/provider_user.c0000664000175000017500000001454614271246524022156 00000000000000/*************************************************************************** begin : Mon Nov 26 2018 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ /* * This file is included by provider.c */ int AB_Provider_ReadUser(AB_PROVIDER *pro, uint32_t uid, int doLock, int doUnlock, AB_USER *user) { int rv; GWEN_DB_NODE *db=NULL; uint32_t uidInDb; DBG_INFO(AQBANKING_LOGDOMAIN, "Reading user (%u)", (unsigned int) uid); rv=AB_Banking_Read_UserConfig(AB_Provider_GetBanking(pro), uid, doLock, doUnlock, &db); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); return rv; } uidInDb=GWEN_DB_GetIntValue(db, "uniqueId", 0, 0); if (uidInDb==0) { DBG_ERROR(AQBANKING_LOGDOMAIN, "No unique id in config, so no user with id %" PRIu32, uid); GWEN_DB_Group_free(db); return GWEN_ERROR_NOT_FOUND; } rv=AB_User_ReadFromDb(user, db); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); GWEN_DB_Group_free(db); return rv; } GWEN_DB_Group_free(db); AB_User_SetProvider(user, pro); AB_User_SetBackendName(user, AB_Provider_GetName(pro)); return 0; } int AB_Provider_GetUser(AB_PROVIDER *pro, uint32_t uid, int doLock, int doUnlock, AB_USER **pUser) { int rv; AB_USER *u; u=AB_Provider_CreateUserObject(pro); assert(u); rv=AB_Provider_ReadUser(pro, uid, doLock, doUnlock, u); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); AB_User_free(u); return rv; } *pUser=u; return 0; } int AB_Provider_HasUser(AB_PROVIDER *pro, uint32_t uid) { int rv; rv=AB_Banking_Has_UserConfig(AB_Provider_GetBanking(pro), uid); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); return rv; } return 0; } int AB_Provider_ReadUsers(AB_PROVIDER *pro, AB_USER_LIST *userList) { int rv; GWEN_DB_NODE *dbAll=NULL; GWEN_DB_NODE *db; DBG_INFO(AQBANKING_LOGDOMAIN, "Reading users"); /* read all config groups for users which have a unique id and which belong to this backend */ rv=AB_Banking_ReadConfigGroups(AB_Provider_GetBanking(pro), AB_CFG_GROUP_USERS, "uniqueId", "backendName", pro->name, &dbAll); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); return rv; } db=GWEN_DB_GetFirstGroup(dbAll); while (db) { AB_USER *u=NULL; u=AB_Provider_CreateUserObject(pro); if (u==NULL) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Error creating user for backend [%s], ignoring", pro->name); } else { DBG_INFO(AQBANKING_LOGDOMAIN, "Reading user %u", (unsigned int) GWEN_DB_GetIntValue(db, "uniqueId", 0, 0)); rv=AB_User_ReadFromDb(u, db); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "Error reading user (%d), ignoring", rv); AB_User_free(u); } else { AB_User_SetProvider(u, pro); AB_User_SetBackendName(u, AB_Provider_GetName(pro)); AB_User_List_Add(u, userList); } } /* next */ db=GWEN_DB_GetNextGroup(db); } GWEN_DB_Group_free(dbAll); return 0; } int AB_Provider_WriteUser(AB_PROVIDER *pro, uint32_t uid, int doLock, int doUnlock, const AB_USER *user) { int rv; GWEN_DB_NODE *db; db=GWEN_DB_Group_new("user"); rv=AB_User_WriteToDb(user, db); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); return rv; } rv=AB_Banking_Write_UserConfig(AB_Provider_GetBanking(pro), uid, doLock, doUnlock, db); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); GWEN_DB_Group_free(db); return rv; } GWEN_DB_Group_free(db); return 0; } int AB_Provider_AddUser(AB_PROVIDER *pro, AB_USER *u) { uint32_t uid; int rv; uid=AB_Banking_GetNamedUniqueId(AB_Provider_GetBanking(pro), "user", 1); /* startAtStdUniqueId=1 */ AB_User_SetUniqueId(u, uid); rv=AB_Provider_WriteUser(pro, uid, 1, 1, u); /* lock, unlock */ if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); return rv; } return 0; } int AB_Provider_DeleteUser(AB_PROVIDER *pro, uint32_t uid) { int rv; AB_ACCOUNT_LIST *al; al=AB_Account_List_new(); rv=AB_Provider_ReadAccounts(pro, al); if (rv<0 && rv!=GWEN_ERROR_NOT_FOUND) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); AB_Account_List_free(al); return rv; } else { AB_ACCOUNT *a; int cnt=0; a=AB_Account_List_First(al); while (a) { if (AB_Account_GetUserId(a)==uid) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Account %lu still uses this user", (unsigned long int) AB_Account_GetUniqueId(a)); cnt++; } a=AB_Account_List_Next(a); } if (cnt>0) { DBG_ERROR(AQBANKING_LOGDOMAIN, "%d accounts using this user", cnt); AB_Account_List_free(al); return GWEN_ERROR_INVALID; } } AB_Account_List_free(al); rv=AB_Banking_Delete_UserConfig(AB_Provider_GetBanking(pro), uid); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); return rv; } return 0; } int AB_Provider_BeginExclUseUser(AB_PROVIDER *pro, AB_USER *u) { int rv; uint32_t uid; uid=AB_User_GetUniqueId(u); if (uid==0) { DBG_ERROR(AQBANKING_LOGDOMAIN, "No unique id!"); return GWEN_ERROR_INVALID; } DBG_INFO(AQBANKING_LOGDOMAIN, "Locking customer \"%lu\"", (unsigned long int) AB_User_GetUniqueId(u)); rv=AB_Provider_ReadUser(pro, uid, 1, 0, u); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); return rv; } return 0; } int AB_Provider_EndExclUseUser(AB_PROVIDER *pro, AB_USER *u, int abandon) { int rv; uint32_t uid; uid=AB_User_GetUniqueId(u); if (uid==0) { DBG_ERROR(AQBANKING_LOGDOMAIN, "No unique id!"); return GWEN_ERROR_INVALID; } DBG_INFO(AQBANKING_LOGDOMAIN, "Unlocking customer \"%lu\"", (unsigned long int) AB_User_GetUniqueId(u)); if (abandon) { rv=AB_Banking_Unlock_UserConfig(AB_Provider_GetBanking(pro), uid); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); return rv; } } else { rv=AB_Provider_WriteUser(pro, uid, 0, 1, u); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); return rv; } } return 0; } aqbanking-6.6.1/src/libs/aqbanking/backendsupport/provider_accspec.c0000664000175000017500000002505614043610744022573 00000000000000/*************************************************************************** begin : Sun Dec 02 2018 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ /* * This file is included by provider.c */ int AB_Provider_AccountToAccountSpec(AB_PROVIDER *pro, const AB_ACCOUNT *acc, AB_ACCOUNT_SPEC *as, int doLock) { int rv; assert(acc); assert(as); AB_AccountSpec_SetType(as, AB_Account_GetAccountType(acc)); AB_AccountSpec_SetUniqueId(as, AB_Account_GetUniqueId(acc)); AB_AccountSpec_SetBackendName(as, AB_Account_GetBackendName(acc)); AB_AccountSpec_SetOwnerName(as, AB_Account_GetOwnerName(acc)); AB_AccountSpec_SetAccountName(as, AB_Account_GetAccountName(acc)); AB_AccountSpec_SetCurrency(as, AB_Account_GetCurrency(acc)); AB_AccountSpec_SetIban(as, AB_Account_GetIban(acc)); AB_AccountSpec_SetBic(as, AB_Account_GetBic(acc)); AB_AccountSpec_SetCountry(as, AB_Account_GetCountry(acc)); AB_AccountSpec_SetBankCode(as, AB_Account_GetBankCode(acc)); AB_AccountSpec_SetBankName(as, AB_Account_GetBankName(acc)); AB_AccountSpec_SetAccountNumber(as, AB_Account_GetAccountNumber(acc)); AB_AccountSpec_SetSubAccountNumber(as, AB_Account_GetSubAccountId(acc)); rv=AB_Provider_UpdateAccountSpec(pro, as, doLock); if (rv<0 && rv!=GWEN_ERROR_NOT_IMPLEMENTED) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); return rv; } return 0; } int AB_Provider_WriteAccountSpecForAccount(AB_PROVIDER *pro, const AB_ACCOUNT *acc, int doLock) { AB_ACCOUNT_SPEC *as; int rv; DBG_NOTICE(AQBANKING_LOGDOMAIN, "Writing account spec for account %u", (unsigned int) AB_Account_GetUniqueId(acc)); as=AB_AccountSpec_new(); rv=AB_Provider_AccountToAccountSpec(pro, acc, as, doLock); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); return rv; } rv=AB_Banking_WriteAccountSpec(AB_Provider_GetBanking(pro), as); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); AB_AccountSpec_free(as); return rv; } AB_AccountSpec_free(as); return 0; } int AB_Provider_CreateInitialAccountSpecs(AB_PROVIDER *pro) { int rv; GWEN_DB_NODE *dbAll=NULL; GWEN_DB_NODE *db; /* read all config groups for accounts which have a unique id and which belong to this provider */ rv=AB_Banking_ReadConfigGroups(AB_Provider_GetBanking(pro), "accounts", "uniqueId", "backendName", AB_Provider_GetName(pro), &dbAll); if (rv<0) { if (rv==GWEN_ERROR_NOT_FOUND) { DBG_INFO(AQBANKING_LOGDOMAIN, "No accounts for backend [%s]", AB_Provider_GetName(pro)); return 0; } DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); return rv; } db=GWEN_DB_GetFirstGroup(dbAll); while (db) { AB_ACCOUNT *acc=NULL; AB_ACCOUNT_SPEC *as; acc=AB_Provider_CreateAccountObject(pro); rv=AB_Account_ReadFromDb(acc, db); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); GWEN_DB_Group_free(dbAll); return rv; } /* create account spec */ as=AB_AccountSpec_new(); rv=AB_Provider_AccountToAccountSpec(pro, acc, as, 1); /* doLock */ if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); AB_AccountSpec_free(as); AB_Account_free(acc); return rv; } /* account object no longer needed */ AB_Account_free(acc); /* write account spec */ rv=AB_Banking_WriteAccountSpec(AB_Provider_GetBanking(pro), as); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); AB_AccountSpec_free(as); return rv; } AB_AccountSpec_free(as); /* next */ db=GWEN_DB_GetNextGroup(db); } GWEN_DB_Group_free(dbAll); return 0; } AB_ACCOUNT_SPEC *AB_Provider_FindMatchingAccountSpec(AB_PROVIDER *pro, const AB_ACCOUNT *acc, AB_ACCOUNT_SPEC_LIST *asl) { const char *accountNum; const char *bankCode; const char *iban; AB_ACCOUNT_SPEC *as=NULL; accountNum=AB_Account_GetAccountNumber(acc); bankCode=AB_Account_GetBankCode(acc); iban=AB_Account_GetIban(acc); DBG_INFO(AQBANKING_LOGDOMAIN, "Checking account [blz=%s, acc=%s, iban=%s, type=%d]", bankCode?bankCode:"", accountNum?accountNum:"", iban?iban:"", AB_Account_GetAccountType(acc)); /* first look for that specific combination of given iban / bankcode+account number */ if ((iban && *iban) || (accountNum && *accountNum && bankCode && *bankCode)) { DBG_INFO(AQBANKING_LOGDOMAIN, "Comparing IBAN and old account specs"); /* both spec given */ as=AB_AccountSpec_List_FindFirst(asl, pro->name, AB_Account_GetCountry(acc), AB_Account_GetBankCode(acc), AB_Account_GetAccountNumber(acc), AB_Account_GetSubAccountId(acc), AB_Account_GetIban(acc), "*", /* any currency */ AB_Account_GetAccountType(acc)); if (as==NULL) { DBG_INFO(AQBANKING_LOGDOMAIN, "Not found, trying with unspecific account type"); as=AB_AccountSpec_List_FindFirst(asl, pro->name, AB_Account_GetCountry(acc), AB_Account_GetBankCode(acc), AB_Account_GetAccountNumber(acc), AB_Account_GetSubAccountId(acc), AB_Account_GetIban(acc), "*", /* any currency */ AB_AccountType_Unknown); } } /* then look for old account specs with empty IBAN */ else if (!(iban && *iban) || (accountNum && *accountNum && bankCode && *bankCode)) { DBG_INFO(AQBANKING_LOGDOMAIN, "Comparing old account specs only"); as=AB_AccountSpec_List_FindFirst(asl, pro->name, AB_Account_GetCountry(acc), AB_Account_GetBankCode(acc), AB_Account_GetAccountNumber(acc), AB_Account_GetSubAccountId(acc), "", /* empty IBAN (not "*"!) */ "*", /* any currency */ AB_Account_GetAccountType(acc)); if (as==NULL) { DBG_INFO(AQBANKING_LOGDOMAIN, "Not found, trying with unspecific account type"); as=AB_AccountSpec_List_FindFirst(asl, pro->name, AB_Account_GetCountry(acc), AB_Account_GetBankCode(acc), AB_Account_GetAccountNumber(acc), AB_Account_GetSubAccountId(acc), "", /* empty IBAN (not "*"!) */ "*", /* any currency */ AB_AccountType_Unknown); } } /* then look for IBAN with empty old account specs */ else if ((iban && *iban) || !(accountNum && *accountNum && bankCode && *bankCode)) { DBG_INFO(AQBANKING_LOGDOMAIN, "Comparing IBAN only"); as=AB_AccountSpec_List_FindFirst(asl, pro->name, NULL, "", /* empty bank code */ "", /* empty account number */ AB_Account_GetSubAccountId(acc), AB_Account_GetIban(acc), "*", /* any currency */ AB_Account_GetAccountType(acc)); if (as==NULL) { DBG_INFO(AQBANKING_LOGDOMAIN, "Not found, trying with unspecific account type"); as=AB_AccountSpec_List_FindFirst(asl, pro->name, NULL, "", /* empty bank code */ "", /* empty account number */ AB_Account_GetSubAccountId(acc), AB_Account_GetIban(acc), "*", /* any currency */ AB_AccountType_Unknown); } } else { /* neither iban nor bank code/account number, should not happen... */ DBG_INFO(AQBANKING_LOGDOMAIN, "Account not found, neither IBAN nor account number given, SNH!"); } /* if no stored account try a more generic approach */ if (as==NULL) { DBG_INFO(AQBANKING_LOGDOMAIN, "Not found, trying unspecific approach"); as=AB_AccountSpec_List_FindFirst(asl, pro->name, AB_Account_GetCountry(acc), AB_Account_GetBankCode(acc), AB_Account_GetAccountNumber(acc), AB_Account_GetSubAccountId(acc), AB_Account_GetIban(acc), "*", /* any currency */ AB_Account_GetAccountType(acc)); } /* if still no stored account try again with unspecific account type */ if (as==NULL) { DBG_INFO(AQBANKING_LOGDOMAIN, "Not found, trying with unspecific account type"); as=AB_AccountSpec_List_FindFirst(asl, pro->name, AB_Account_GetCountry(acc), AB_Account_GetBankCode(acc), AB_Account_GetAccountNumber(acc), AB_Account_GetSubAccountId(acc), AB_Account_GetIban(acc), "*", /* any currency */ AB_AccountType_Unknown); } if (as) { uint32_t uniqueId; uniqueId=AB_AccountSpec_GetUniqueId(as); DBG_INFO(AQBANKING_LOGDOMAIN, "Found a matching account (%x)", uniqueId); return as; } return NULL; } aqbanking-6.6.1/src/libs/aqbanking/backendsupport/ab_account_list2.tm20000664000175000017500000000033415037736054022752 00000000000000 AB_ACCOUNT_LIST2 AB_Account_List2 aqbanking-6.6.1/src/libs/aqbanking/backendsupport/account.c0000664000175000017500000007101415037736054020716 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "account.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "./account_p.h" #include #include /* code headers */ /* macro functions */ GWEN_LIST_FUNCTIONS(AB_ACCOUNT, AB_Account) GWEN_LIST2_FUNCTIONS(AB_ACCOUNT, AB_Account) GWEN_INHERIT_FUNCTIONS(AB_ACCOUNT) AB_ACCOUNT *AB_Account_new(void) { AB_ACCOUNT *p_struct; GWEN_NEW_OBJECT(AB_ACCOUNT, p_struct) p_struct->_refCount=1; GWEN_INHERIT_INIT(AB_ACCOUNT, p_struct) GWEN_LIST_INIT(AB_ACCOUNT, p_struct) /* members */ p_struct->accountType=AB_AccountType_Unknown; p_struct->uniqueId=0; p_struct->backendName=NULL; p_struct->ownerName=NULL; p_struct->bankName=NULL; p_struct->accountName=NULL; p_struct->currency=NULL; p_struct->memo=NULL; p_struct->iban=NULL; p_struct->bic=NULL; p_struct->country=NULL; p_struct->bankCode=NULL; p_struct->branchId=NULL; p_struct->accountNumber=NULL; p_struct->subAccountId=NULL; p_struct->userId=0; p_struct->provider=NULL; /* virtual functions */ p_struct->readFromDbFn=AB_Account__ReadFromDb; p_struct->writeToDbFn=AB_Account__WriteToDb; return p_struct; } void AB_Account_free(AB_ACCOUNT *p_struct) { if (p_struct) { assert(p_struct->_refCount); if (p_struct->_refCount==1) { GWEN_INHERIT_FINI(AB_ACCOUNT, p_struct) GWEN_LIST_FINI(AB_ACCOUNT, p_struct) /* members */ free(p_struct->backendName); p_struct->backendName=NULL; free(p_struct->ownerName); p_struct->ownerName=NULL; free(p_struct->bankName); p_struct->bankName=NULL; free(p_struct->accountName); p_struct->accountName=NULL; free(p_struct->currency); p_struct->currency=NULL; free(p_struct->memo); p_struct->memo=NULL; free(p_struct->iban); p_struct->iban=NULL; free(p_struct->bic); p_struct->bic=NULL; free(p_struct->country); p_struct->country=NULL; free(p_struct->bankCode); p_struct->bankCode=NULL; free(p_struct->branchId); p_struct->branchId=NULL; free(p_struct->accountNumber); p_struct->accountNumber=NULL; free(p_struct->subAccountId); p_struct->subAccountId=NULL; p_struct->_refCount=0; GWEN_FREE_OBJECT(p_struct); } else p_struct->_refCount--; } } void AB_Account_Attach(AB_ACCOUNT *p_struct) { assert(p_struct); assert(p_struct->_refCount); p_struct->_refCount++; } int AB_Account_GetAccountType(const AB_ACCOUNT *p_struct){ assert(p_struct); return p_struct->accountType; } uint32_t AB_Account_GetUniqueId(const AB_ACCOUNT *p_struct){ assert(p_struct); return p_struct->uniqueId; } const char *AB_Account_GetBackendName(const AB_ACCOUNT *p_struct){ assert(p_struct); return p_struct->backendName; } const char *AB_Account_GetOwnerName(const AB_ACCOUNT *p_struct){ assert(p_struct); return p_struct->ownerName; } const char *AB_Account_GetBankName(const AB_ACCOUNT *p_struct){ assert(p_struct); return p_struct->bankName; } const char *AB_Account_GetAccountName(const AB_ACCOUNT *p_struct){ assert(p_struct); return p_struct->accountName; } const char *AB_Account_GetCurrency(const AB_ACCOUNT *p_struct){ assert(p_struct); return p_struct->currency; } const char *AB_Account_GetMemo(const AB_ACCOUNT *p_struct){ assert(p_struct); return p_struct->memo; } const char *AB_Account_GetIban(const AB_ACCOUNT *p_struct){ assert(p_struct); return p_struct->iban; } const char *AB_Account_GetBic(const AB_ACCOUNT *p_struct){ assert(p_struct); return p_struct->bic; } const char *AB_Account_GetCountry(const AB_ACCOUNT *p_struct){ assert(p_struct); return p_struct->country; } const char *AB_Account_GetBankCode(const AB_ACCOUNT *p_struct){ assert(p_struct); return p_struct->bankCode; } const char *AB_Account_GetBranchId(const AB_ACCOUNT *p_struct){ assert(p_struct); return p_struct->branchId; } const char *AB_Account_GetAccountNumber(const AB_ACCOUNT *p_struct){ assert(p_struct); return p_struct->accountNumber; } const char *AB_Account_GetSubAccountId(const AB_ACCOUNT *p_struct){ assert(p_struct); return p_struct->subAccountId; } uint32_t AB_Account_GetUserId(const AB_ACCOUNT *p_struct){ assert(p_struct); return p_struct->userId; } AB_PROVIDER *AB_Account_GetProvider(const AB_ACCOUNT *p_struct){ assert(p_struct); return p_struct->provider; } void AB_Account_SetAccountType(AB_ACCOUNT *p_struct, int p_src){ assert(p_struct); p_struct->accountType=p_src; } void AB_Account_SetUniqueId(AB_ACCOUNT *p_struct, uint32_t p_src){ assert(p_struct); p_struct->uniqueId=p_src; } void AB_Account_SetBackendName(AB_ACCOUNT *p_struct, const char *p_src){ assert(p_struct); if (p_struct->backendName) { free(p_struct->backendName); p_struct->backendName=NULL; p_struct->backendName=NULL; } if (p_src) { p_struct->backendName=strdup(p_src); } else { p_struct->backendName=NULL; } } void AB_Account_SetOwnerName(AB_ACCOUNT *p_struct, const char *p_src){ assert(p_struct); if (p_struct->ownerName) { free(p_struct->ownerName); p_struct->ownerName=NULL; p_struct->ownerName=NULL; } if (p_src) { p_struct->ownerName=strdup(p_src); } else { p_struct->ownerName=NULL; } } void AB_Account_SetBankName(AB_ACCOUNT *p_struct, const char *p_src){ assert(p_struct); if (p_struct->bankName) { free(p_struct->bankName); p_struct->bankName=NULL; p_struct->bankName=NULL; } if (p_src) { p_struct->bankName=strdup(p_src); } else { p_struct->bankName=NULL; } } void AB_Account_SetAccountName(AB_ACCOUNT *p_struct, const char *p_src){ assert(p_struct); if (p_struct->accountName) { free(p_struct->accountName); p_struct->accountName=NULL; p_struct->accountName=NULL; } if (p_src) { p_struct->accountName=strdup(p_src); } else { p_struct->accountName=NULL; } } void AB_Account_SetCurrency(AB_ACCOUNT *p_struct, const char *p_src){ assert(p_struct); if (p_struct->currency) { free(p_struct->currency); p_struct->currency=NULL; p_struct->currency=NULL; } if (p_src) { p_struct->currency=strdup(p_src); } else { p_struct->currency=NULL; } } void AB_Account_SetMemo(AB_ACCOUNT *p_struct, const char *p_src){ assert(p_struct); if (p_struct->memo) { free(p_struct->memo); p_struct->memo=NULL; p_struct->memo=NULL; } if (p_src) { p_struct->memo=strdup(p_src); } else { p_struct->memo=NULL; } } void AB_Account_SetIban(AB_ACCOUNT *p_struct, const char *p_src){ assert(p_struct); if (p_struct->iban) { free(p_struct->iban); p_struct->iban=NULL; p_struct->iban=NULL; } if (p_src) { p_struct->iban=strdup(p_src); } else { p_struct->iban=NULL; } } void AB_Account_SetBic(AB_ACCOUNT *p_struct, const char *p_src){ assert(p_struct); if (p_struct->bic) { free(p_struct->bic); p_struct->bic=NULL; p_struct->bic=NULL; } if (p_src) { p_struct->bic=strdup(p_src); } else { p_struct->bic=NULL; } } void AB_Account_SetCountry(AB_ACCOUNT *p_struct, const char *p_src){ assert(p_struct); if (p_struct->country) { free(p_struct->country); p_struct->country=NULL; p_struct->country=NULL; } if (p_src) { p_struct->country=strdup(p_src); } else { p_struct->country=NULL; } } void AB_Account_SetBankCode(AB_ACCOUNT *p_struct, const char *p_src){ assert(p_struct); if (p_struct->bankCode) { free(p_struct->bankCode); p_struct->bankCode=NULL; p_struct->bankCode=NULL; } if (p_src) { p_struct->bankCode=strdup(p_src); } else { p_struct->bankCode=NULL; } } void AB_Account_SetBranchId(AB_ACCOUNT *p_struct, const char *p_src){ assert(p_struct); if (p_struct->branchId) { free(p_struct->branchId); p_struct->branchId=NULL; p_struct->branchId=NULL; } if (p_src) { p_struct->branchId=strdup(p_src); } else { p_struct->branchId=NULL; } } void AB_Account_SetAccountNumber(AB_ACCOUNT *p_struct, const char *p_src){ assert(p_struct); if (p_struct->accountNumber) { free(p_struct->accountNumber); p_struct->accountNumber=NULL; p_struct->accountNumber=NULL; } if (p_src) { p_struct->accountNumber=strdup(p_src); } else { p_struct->accountNumber=NULL; } } void AB_Account_SetSubAccountId(AB_ACCOUNT *p_struct, const char *p_src){ assert(p_struct); if (p_struct->subAccountId) { free(p_struct->subAccountId); p_struct->subAccountId=NULL; p_struct->subAccountId=NULL; } if (p_src) { p_struct->subAccountId=strdup(p_src); } else { p_struct->subAccountId=NULL; } } void AB_Account_SetUserId(AB_ACCOUNT *p_struct, uint32_t p_src){ assert(p_struct); p_struct->userId=p_src; } void AB_Account_SetProvider(AB_ACCOUNT *p_struct, AB_PROVIDER *p_src){ assert(p_struct); p_struct->provider=p_src; } /* code for virtual functions */ int AB_Account_ReadFromDb(AB_ACCOUNT *p_struct, GWEN_DB_NODE* dbData) { assert(p_struct); if (p_struct->readFromDbFn) return p_struct->readFromDbFn(p_struct, dbData); else return GWEN_ERROR_NOT_IMPLEMENTED; } int AB_Account_WriteToDb(const AB_ACCOUNT *p_struct, GWEN_DB_NODE* dbData) { assert(p_struct); if (p_struct->writeToDbFn) return p_struct->writeToDbFn(p_struct, dbData); else return GWEN_ERROR_NOT_IMPLEMENTED; } /* setters for virtual functions */ AB_ACCOUNT_READFROMDB_FN AB_Account_SetReadFromDbFn(AB_ACCOUNT *p_struct, AB_ACCOUNT_READFROMDB_FN fn){ AB_ACCOUNT_READFROMDB_FN oldFn; assert(p_struct); oldFn=p_struct->readFromDbFn; p_struct->readFromDbFn=fn; return oldFn; } AB_ACCOUNT_WRITETODB_FN AB_Account_SetWriteToDbFn(AB_ACCOUNT *p_struct, AB_ACCOUNT_WRITETODB_FN fn){ AB_ACCOUNT_WRITETODB_FN oldFn; assert(p_struct); oldFn=p_struct->writeToDbFn; p_struct->writeToDbFn=fn; return oldFn; } /* getters for virtual functions */ AB_ACCOUNT_READFROMDB_FN AB_Account_GetReadFromDbFn(const AB_ACCOUNT *p_struct){ assert(p_struct); return p_struct->readFromDbFn; } AB_ACCOUNT_WRITETODB_FN AB_Account_GetWriteToDbFn(const AB_ACCOUNT *p_struct){ assert(p_struct); return p_struct->writeToDbFn; } void AB_Account_ReadDb(AB_ACCOUNT *p_struct, GWEN_DB_NODE *p_db){ assert(p_struct); /* member "accountType" */ p_struct->accountType=GWEN_DB_GetIntValue(p_db, "accountType", 0, AB_AccountType_Unknown); /* member "uniqueId" */ p_struct->uniqueId=GWEN_DB_GetIntValue(p_db, "uniqueId", 0, 0); /* member "backendName" */ if (p_struct->backendName) { free(p_struct->backendName); p_struct->backendName=NULL; p_struct->backendName=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "backendName", 0, NULL); if (s) p_struct->backendName=strdup(s); } /* member "ownerName" */ if (p_struct->ownerName) { free(p_struct->ownerName); p_struct->ownerName=NULL; p_struct->ownerName=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "ownerName", 0, NULL); if (s) p_struct->ownerName=strdup(s); } /* member "bankName" */ if (p_struct->bankName) { free(p_struct->bankName); p_struct->bankName=NULL; p_struct->bankName=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "bankName", 0, NULL); if (s) p_struct->bankName=strdup(s); } /* member "accountName" */ if (p_struct->accountName) { free(p_struct->accountName); p_struct->accountName=NULL; p_struct->accountName=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "accountName", 0, NULL); if (s) p_struct->accountName=strdup(s); } /* member "currency" */ if (p_struct->currency) { free(p_struct->currency); p_struct->currency=NULL; p_struct->currency=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "currency", 0, NULL); if (s) p_struct->currency=strdup(s); } /* member "memo" */ if (p_struct->memo) { free(p_struct->memo); p_struct->memo=NULL; p_struct->memo=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "memo", 0, NULL); if (s) p_struct->memo=strdup(s); } /* member "iban" */ if (p_struct->iban) { free(p_struct->iban); p_struct->iban=NULL; p_struct->iban=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "iban", 0, NULL); if (s) p_struct->iban=strdup(s); } /* member "bic" */ if (p_struct->bic) { free(p_struct->bic); p_struct->bic=NULL; p_struct->bic=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "bic", 0, NULL); if (s) p_struct->bic=strdup(s); } /* member "country" */ if (p_struct->country) { free(p_struct->country); p_struct->country=NULL; p_struct->country=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "country", 0, NULL); if (s) p_struct->country=strdup(s); } /* member "bankCode" */ if (p_struct->bankCode) { free(p_struct->bankCode); p_struct->bankCode=NULL; p_struct->bankCode=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "bankCode", 0, NULL); if (s) p_struct->bankCode=strdup(s); } /* member "branchId" */ if (p_struct->branchId) { free(p_struct->branchId); p_struct->branchId=NULL; p_struct->branchId=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "branchId", 0, NULL); if (s) p_struct->branchId=strdup(s); } /* member "accountNumber" */ if (p_struct->accountNumber) { free(p_struct->accountNumber); p_struct->accountNumber=NULL; p_struct->accountNumber=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "accountNumber", 0, NULL); if (s) p_struct->accountNumber=strdup(s); } /* member "subAccountId" */ if (p_struct->subAccountId) { free(p_struct->subAccountId); p_struct->subAccountId=NULL; p_struct->subAccountId=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "subAccountId", 0, NULL); if (s) p_struct->subAccountId=strdup(s); } /* member "userId" */ p_struct->userId=GWEN_DB_GetIntValue(p_db, "userId", 0, 0); /* member "provider" */ /* member "provider" is volatile, just presetting it */ p_struct->provider=NULL; } int AB_Account_WriteDb(const AB_ACCOUNT *p_struct, GWEN_DB_NODE *p_db) { int p_rv; assert(p_struct); /* member "accountType" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "accountType", p_struct->accountType); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "uniqueId" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "uniqueId", p_struct->uniqueId); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "backendName" */ if (p_struct->backendName) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "backendName", p_struct->backendName); else { GWEN_DB_DeleteVar(p_db, "backendName"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "ownerName" */ if (p_struct->ownerName) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "ownerName", p_struct->ownerName); else { GWEN_DB_DeleteVar(p_db, "ownerName"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "bankName" */ if (p_struct->bankName) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "bankName", p_struct->bankName); else { GWEN_DB_DeleteVar(p_db, "bankName"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "accountName" */ if (p_struct->accountName) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "accountName", p_struct->accountName); else { GWEN_DB_DeleteVar(p_db, "accountName"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "currency" */ if (p_struct->currency) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "currency", p_struct->currency); else { GWEN_DB_DeleteVar(p_db, "currency"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "memo" */ if (p_struct->memo) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "memo", p_struct->memo); else { GWEN_DB_DeleteVar(p_db, "memo"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "iban" */ if (p_struct->iban) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "iban", p_struct->iban); else { GWEN_DB_DeleteVar(p_db, "iban"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "bic" */ if (p_struct->bic) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "bic", p_struct->bic); else { GWEN_DB_DeleteVar(p_db, "bic"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "country" */ if (p_struct->country) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "country", p_struct->country); else { GWEN_DB_DeleteVar(p_db, "country"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "bankCode" */ if (p_struct->bankCode) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "bankCode", p_struct->bankCode); else { GWEN_DB_DeleteVar(p_db, "bankCode"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "branchId" */ if (p_struct->branchId) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "branchId", p_struct->branchId); else { GWEN_DB_DeleteVar(p_db, "branchId"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "accountNumber" */ if (p_struct->accountNumber) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "accountNumber", p_struct->accountNumber); else { GWEN_DB_DeleteVar(p_db, "accountNumber"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "subAccountId" */ if (p_struct->subAccountId) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "subAccountId", p_struct->subAccountId); else { GWEN_DB_DeleteVar(p_db, "subAccountId"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "userId" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "userId", p_struct->userId); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "provider" is volatile, not writing to db */ return 0; } AB_ACCOUNT *AB_Account_fromDb(GWEN_DB_NODE *p_db) { AB_ACCOUNT *p_struct; p_struct=AB_Account_new(); AB_Account_ReadDb(p_struct, p_db); return p_struct; } int AB_Account_toDb(const AB_ACCOUNT *p_struct, GWEN_DB_NODE *p_db) { return AB_Account_WriteDb(p_struct, p_db); } void AB_Account_ReadXml(AB_ACCOUNT *p_struct, GWEN_XMLNODE *p_db){ assert(p_struct); /* member "accountType" */ p_struct->accountType=GWEN_XMLNode_GetIntValue(p_db, "accountType", AB_AccountType_Unknown); /* member "uniqueId" */ p_struct->uniqueId=GWEN_XMLNode_GetIntValue(p_db, "uniqueId", 0); /* member "backendName" */ if (p_struct->backendName) { free(p_struct->backendName); p_struct->backendName=NULL; p_struct->backendName=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "backendName", NULL); if (s) p_struct->backendName=strdup(s); } /* member "ownerName" */ if (p_struct->ownerName) { free(p_struct->ownerName); p_struct->ownerName=NULL; p_struct->ownerName=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "ownerName", NULL); if (s) p_struct->ownerName=strdup(s); } /* member "bankName" */ if (p_struct->bankName) { free(p_struct->bankName); p_struct->bankName=NULL; p_struct->bankName=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "bankName", NULL); if (s) p_struct->bankName=strdup(s); } /* member "accountName" */ if (p_struct->accountName) { free(p_struct->accountName); p_struct->accountName=NULL; p_struct->accountName=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "accountName", NULL); if (s) p_struct->accountName=strdup(s); } /* member "currency" */ if (p_struct->currency) { free(p_struct->currency); p_struct->currency=NULL; p_struct->currency=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "currency", NULL); if (s) p_struct->currency=strdup(s); } /* member "memo" */ if (p_struct->memo) { free(p_struct->memo); p_struct->memo=NULL; p_struct->memo=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "memo", NULL); if (s) p_struct->memo=strdup(s); } /* member "iban" */ if (p_struct->iban) { free(p_struct->iban); p_struct->iban=NULL; p_struct->iban=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "iban", NULL); if (s) p_struct->iban=strdup(s); } /* member "bic" */ if (p_struct->bic) { free(p_struct->bic); p_struct->bic=NULL; p_struct->bic=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "bic", NULL); if (s) p_struct->bic=strdup(s); } /* member "country" */ if (p_struct->country) { free(p_struct->country); p_struct->country=NULL; p_struct->country=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "country", NULL); if (s) p_struct->country=strdup(s); } /* member "bankCode" */ if (p_struct->bankCode) { free(p_struct->bankCode); p_struct->bankCode=NULL; p_struct->bankCode=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "bankCode", NULL); if (s) p_struct->bankCode=strdup(s); } /* member "branchId" */ if (p_struct->branchId) { free(p_struct->branchId); p_struct->branchId=NULL; p_struct->branchId=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "branchId", NULL); if (s) p_struct->branchId=strdup(s); } /* member "accountNumber" */ if (p_struct->accountNumber) { free(p_struct->accountNumber); p_struct->accountNumber=NULL; p_struct->accountNumber=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "accountNumber", NULL); if (s) p_struct->accountNumber=strdup(s); } /* member "subAccountId" */ if (p_struct->subAccountId) { free(p_struct->subAccountId); p_struct->subAccountId=NULL; p_struct->subAccountId=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "subAccountId", NULL); if (s) p_struct->subAccountId=strdup(s); } /* member "userId" */ p_struct->userId=GWEN_XMLNode_GetIntValue(p_db, "userId", 0); /* member "provider" */ /* member "provider" is volatile, just presetting it */ p_struct->provider=NULL; } void AB_Account_WriteXml(const AB_ACCOUNT *p_struct, GWEN_XMLNODE *p_db) { assert(p_struct); /* member "accountType" */ GWEN_XMLNode_SetIntValue(p_db, "accountType", p_struct->accountType); /* member "uniqueId" */ GWEN_XMLNode_SetIntValue(p_db, "uniqueId", p_struct->uniqueId); /* member "backendName" */ GWEN_XMLNode_SetCharValue(p_db, "backendName", p_struct->backendName); /* member "ownerName" */ GWEN_XMLNode_SetCharValue(p_db, "ownerName", p_struct->ownerName); /* member "bankName" */ GWEN_XMLNode_SetCharValue(p_db, "bankName", p_struct->bankName); /* member "accountName" */ GWEN_XMLNode_SetCharValue(p_db, "accountName", p_struct->accountName); /* member "currency" */ GWEN_XMLNode_SetCharValue(p_db, "currency", p_struct->currency); /* member "memo" */ GWEN_XMLNode_SetCharValue(p_db, "memo", p_struct->memo); /* member "iban" */ GWEN_XMLNode_SetCharValue(p_db, "iban", p_struct->iban); /* member "bic" */ GWEN_XMLNode_SetCharValue(p_db, "bic", p_struct->bic); /* member "country" */ GWEN_XMLNode_SetCharValue(p_db, "country", p_struct->country); /* member "bankCode" */ GWEN_XMLNode_SetCharValue(p_db, "bankCode", p_struct->bankCode); /* member "branchId" */ GWEN_XMLNode_SetCharValue(p_db, "branchId", p_struct->branchId); /* member "accountNumber" */ GWEN_XMLNode_SetCharValue(p_db, "accountNumber", p_struct->accountNumber); /* member "subAccountId" */ GWEN_XMLNode_SetCharValue(p_db, "subAccountId", p_struct->subAccountId); /* member "userId" */ GWEN_XMLNode_SetIntValue(p_db, "userId", p_struct->userId); /* member "provider" is volatile, not writing to xml */ } void AB_Account_toXml(const AB_ACCOUNT *p_struct, GWEN_XMLNODE *p_db) { AB_Account_WriteXml(p_struct, p_db); } AB_ACCOUNT *AB_Account_fromXml(GWEN_XMLNODE *p_db) { AB_ACCOUNT *p_struct; p_struct=AB_Account_new(); AB_Account_ReadXml(p_struct, p_db); return p_struct; } AB_ACCOUNT *AB_Account_List_GetByUniqueId(const AB_ACCOUNT_LIST *p_list, uint32_t p_cmp){ AB_ACCOUNT *p_struct; assert(p_list); p_struct = AB_Account_List_First(p_list); while(p_struct) { int p_rv; if (p_struct->uniqueId==p_cmp) p_rv=0; else if (p_cmpuniqueId) p_rv=-1; else p_rv=1; if (p_rv == 0) return p_struct; p_struct = AB_Account_List_Next(p_struct); } return NULL; } int AB_Account_Matches(const AB_ACCOUNT *a, const char *backendName, const char *country, const char *bankId, const char *accountNumber, const char *subAccountId, const char *iban, const char *currency, int ty) { const char *lbackendName; const char *lcountry; const char *lbankId; const char *laccountNumber; const char *lsubAccountId; const char *liban; const char *lcurrency; int lty; if (!backendName) backendName="*"; if (!country) country="*"; if (!bankId) bankId="*"; if (!accountNumber) accountNumber="*"; if (!subAccountId) subAccountId="*"; if (!iban) iban="*"; if (!currency) currency="*"; if (ty>=AB_AccountType_Last) ty=AB_AccountType_Unknown; lbackendName=AB_Account_GetBackendName(a); lcountry=AB_Account_GetCountry(a); lbankId=AB_Account_GetBankCode(a); laccountNumber=AB_Account_GetAccountNumber(a); lsubAccountId=AB_Account_GetSubAccountId(a); liban=AB_Account_GetIban(a); lcurrency=AB_Account_GetCurrency(a); lty=AB_Account_GetAccountType(a); if (!lcountry) lcountry=""; if (!lbankId) lbankId=""; if (!laccountNumber) laccountNumber=""; if (!lsubAccountId) lsubAccountId=""; if (!liban) liban=""; if (!lcurrency) lcurrency=""; if (lty>=AB_AccountType_Last || lty <=AB_AccountType_Unknown) lty=AB_AccountType_Unknown; if ((-1!=GWEN_Text_ComparePattern(lbackendName, backendName, 0)) && (-1!=GWEN_Text_ComparePattern(lcountry, country, 0)) && (-1!=GWEN_Text_ComparePattern(lbankId, bankId, 0)) && (-1!=GWEN_Text_ComparePattern(laccountNumber, accountNumber, 0)) && (-1!=GWEN_Text_ComparePattern(lsubAccountId, subAccountId, 0)) && (-1!=GWEN_Text_ComparePattern(liban, iban, 0)) && (-1!=GWEN_Text_ComparePattern(lcurrency, currency, 0)) && ((ty==AB_AccountType_Unknown) || (ty==lty))) return 1; return 0; } AB_ACCOUNT *AB_Account_List__FindInternal(AB_ACCOUNT *a, const char *backendName, const char *country, const char *bankId, const char *accountNumber, const char *subAccountId, const char *iban, const char *currency, int ty) { if (!backendName) backendName="*"; if (!country) country="*"; if (!bankId) bankId="*"; if (!accountNumber) accountNumber="*"; if (!subAccountId) subAccountId="*"; if (!iban) iban="*"; if (!currency) currency="*"; if (ty>=AB_AccountType_Last) ty=AB_AccountType_Unknown; while(a) { const char *lbackendName; lbackendName=AB_Account_GetBackendName(a); if (! (lbackendName && *lbackendName) ) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Account: %s/%s/%s: No backend, ignoring", AB_Account_GetCountry(a), AB_Account_GetBankCode(a), AB_Account_GetAccountNumber(a)); } else { int rv; rv=AB_Account_Matches(a, backendName, country, bankId, accountNumber, subAccountId, iban, currency, ty); if (rv==1) break; } a=AB_Account_List_Next(a); } /* while */ return a; } AB_ACCOUNT *AB_Account_List_FindFirst(AB_ACCOUNT_LIST *al, const char *backendName, const char *country, const char *bankId, const char *accountNumber, const char *subAccountId, const char *iban, const char *currency, int ty) { AB_ACCOUNT *a; if (AB_Account_List_GetCount(al)==0) { DBG_INFO(AQBANKING_LOGDOMAIN, "No accounts"); return NULL; } a=AB_Account_List_First(al); assert(a); return AB_Account_List__FindInternal(a, backendName, country, bankId, accountNumber, subAccountId, iban, currency, ty); } AB_ACCOUNT *AB_Account_List_FindNext(AB_ACCOUNT *a, const char *backendName, const char *country, const char *bankId, const char *accountNumber, const char *subAccountId, const char *iban, const char *currency, int ty) { assert(a); a=AB_Account_List_Next(a); if (a==NULL) { DBG_INFO(AQBANKING_LOGDOMAIN, "No more account specs"); return NULL; } return AB_Account_List__FindInternal(a, backendName, country, bankId, accountNumber, subAccountId, iban, currency, ty); } int AB_Account__ReadFromDb(AB_ACCOUNT *a, GWEN_DB_NODE *db) { assert(a); AB_Account_ReadDb(a, db); return 0; } int AB_Account__WriteToDb(const AB_ACCOUNT *a, GWEN_DB_NODE *db) { assert(a); AB_Account_WriteDb(a, db); return 0; } /* code headers */ aqbanking-6.6.1/src/libs/aqbanking/backendsupport/queue.h0000664000175000017500000000327415037736054020416 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "queue.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef AB_QUEUE_QUEUE_H #define AB_QUEUE_QUEUE_H #ifdef __cplusplus extern "C" { #endif /** @page P_AB_QUEUE Structure AB_QUEUE

This page describes the properties of AB_QUEUE.

AB_QUEUE

@anchor AB_QUEUE_userQueueList

userQueueList

Set this property with @ref AB_Queue_SetUserQueueList(), get it with @ref AB_Queue_GetUserQueueList().

*/ /* needed system headers */ #include #include /* pre-headers */ #include typedef struct AB_QUEUE AB_QUEUE; GWEN_INHERIT_FUNCTION_DEFS(AB_QUEUE) /* post-headers */ #include /** Constructor. */ AB_QUEUE *AB_Queue_new(void); /** Destructor. */ void AB_Queue_free(AB_QUEUE *p_struct); void AB_Queue_Attach(AB_QUEUE *p_struct); AB_QUEUE *AB_Queue_dup(const AB_QUEUE *p_src); AB_QUEUE *AB_Queue_copy(AB_QUEUE *p_struct, const AB_QUEUE *p_src); /** Getter. * Use this function to get the member "userQueueList" (see @ref AB_QUEUE_userQueueList) */ AB_USERQUEUE_LIST *AB_Queue_GetUserQueueList(const AB_QUEUE *p_struct); /** Setter. * Use this function to set the member "userQueueList" (see @ref AB_QUEUE_userQueueList) */ void AB_Queue_SetUserQueueList(AB_QUEUE *p_struct, AB_USERQUEUE_LIST *p_src); AB_USERQUEUE *AB_Queue_FindUserQueue(const AB_QUEUE *q, AB_USER *u); #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/aqbanking/backendsupport/jobqueue.c0000664000175000017500000000752415037736054021106 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "jobqueue.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "./jobqueue_p.h" #include #include /* code headers */ /* macro functions */ GWEN_LIST_FUNCTIONS(AB_JOBQUEUE, AB_JobQueue) GWEN_INHERIT_FUNCTIONS(AB_JOBQUEUE) AB_JOBQUEUE *AB_JobQueue_new(void) { AB_JOBQUEUE *p_struct; GWEN_NEW_OBJECT(AB_JOBQUEUE, p_struct) p_struct->_refCount=1; GWEN_INHERIT_INIT(AB_JOBQUEUE, p_struct) GWEN_LIST_INIT(AB_JOBQUEUE, p_struct) /* members */ p_struct->jobType=0; p_struct->transactionList=AB_Transaction_List2_new(); /* virtual functions */ return p_struct; } void AB_JobQueue_free(AB_JOBQUEUE *p_struct) { if (p_struct) { assert(p_struct->_refCount); if (p_struct->_refCount==1) { GWEN_INHERIT_FINI(AB_JOBQUEUE, p_struct) GWEN_LIST_FINI(AB_JOBQUEUE, p_struct) /* members */ AB_Transaction_List2_free(p_struct->transactionList); p_struct->transactionList=NULL; p_struct->_refCount=0; GWEN_FREE_OBJECT(p_struct); } else p_struct->_refCount--; } } void AB_JobQueue_Attach(AB_JOBQUEUE *p_struct) { assert(p_struct); assert(p_struct->_refCount); p_struct->_refCount++; } AB_JOBQUEUE *AB_JobQueue_dup(const AB_JOBQUEUE *p_src) { AB_JOBQUEUE *p_struct; assert(p_src); p_struct=AB_JobQueue_new(); /* member "jobType" */ p_struct->jobType=p_src->jobType; /* member "transactionList" */ if (p_struct->transactionList) { AB_Transaction_List2_free(p_struct->transactionList); p_struct->transactionList=NULL; p_struct->transactionList=NULL; } if (p_src->transactionList) { p_struct->transactionList=AB_Transaction_List2_dup(p_src->transactionList); } return p_struct; } int AB_JobQueue_GetJobType(const AB_JOBQUEUE *p_struct){ assert(p_struct); return p_struct->jobType; } AB_TRANSACTION_LIST2 *AB_JobQueue_GetTransactionList(const AB_JOBQUEUE *p_struct){ assert(p_struct); return p_struct->transactionList; } void AB_JobQueue_SetJobType(AB_JOBQUEUE *p_struct, int p_src){ assert(p_struct); p_struct->jobType=p_src; } void AB_JobQueue_SetTransactionList(AB_JOBQUEUE *p_struct, AB_TRANSACTION_LIST2 *p_src){ assert(p_struct); if (p_struct->transactionList) { AB_Transaction_List2_free(p_struct->transactionList); p_struct->transactionList=NULL; p_struct->transactionList=NULL; } p_struct->transactionList=p_src; } AB_JOBQUEUE_LIST *AB_JobQueue_List_dup(const AB_JOBQUEUE_LIST *p_src) { AB_JOBQUEUE_LIST *p_dest; AB_JOBQUEUE *p_elem; assert(p_src); p_dest=AB_JobQueue_List_new(); p_elem=AB_JobQueue_List_First(p_src); while(p_elem) { AB_JOBQUEUE *p_cpy; p_cpy=AB_JobQueue_dup(p_elem); AB_JobQueue_List_Add(p_cpy, p_dest); p_elem=AB_JobQueue_List_Next(p_elem); } return p_dest; } AB_JOBQUEUE *AB_JobQueue_List_GetByJobType(const AB_JOBQUEUE_LIST *p_list, int p_cmp){ AB_JOBQUEUE *p_struct; assert(p_list); p_struct = AB_JobQueue_List_First(p_list); while(p_struct) { int p_rv; if (p_struct->jobType==p_cmp) p_rv=0; else if (p_cmpjobType) p_rv=-1; else p_rv=1; if (p_rv == 0) return p_struct; p_struct = AB_JobQueue_List_Next(p_struct); } return NULL; } void AB_JobQueue_AddTransaction(AB_JOBQUEUE *aq, AB_TRANSACTION *t) { if (aq->transactionList==NULL) aq->transactionList=AB_Transaction_List2_new(); AB_Transaction_List2_PushBack(aq->transactionList, t); } AB_TRANSACTION *AB_JobQueue_GetFirstTransaction(const AB_JOBQUEUE *jq) { if (jq->transactionList) return AB_Transaction_List2_GetFront(jq->transactionList); return NULL; } /* code headers */ aqbanking-6.6.1/src/libs/aqbanking/backendsupport/imexporter_be.h0000664000175000017500000000714114043610744022124 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ /** @file imexporter_be.h * @short This file is used by provider/importer/exporter plugins. */ #ifndef AQBANKING_IMEXPORTER_BE_H #define AQBANKING_IMEXPORTER_BE_H #include #include #include /** @defgroup G_AB_BE_IMEXPORTER Generic Im- and Exporter * @ingroup G_AB_BE_INTERFACE */ /*@{*/ #ifdef __cplusplus extern "C" { #endif typedef AB_IMEXPORTER *(*AB_IMEXPORTER_FACTORY_FN)(AB_BANKING *ab); /** @name Construction and Destruction * */ /*@{*/ AB_IMEXPORTER *AB_ImExporter_new(AB_BANKING *ab, const char *name); void AB_ImExporter_free(AB_IMEXPORTER *ie); /*@}*/ /** @name Manipulation of the Flags * */ /*@{*/ void AB_ImExporter_SetFlags(AB_IMEXPORTER *ie, uint32_t flags); void AB_ImExporter_AddFlags(AB_IMEXPORTER *ie, uint32_t flags); void AB_ImExporter_SubFlags(AB_IMEXPORTER *ie, uint32_t flags); /*@}*/ /** @name Prototypes for Virtual Backend Functions * */ /*@{*/ typedef int (*AB_IMEXPORTER_IMPORT_FN)(AB_IMEXPORTER *ie, AB_IMEXPORTER_CONTEXT *ctx, GWEN_SYNCIO *sio, GWEN_DB_NODE *params); typedef int (*AB_IMEXPORTER_EXPORT_FN)(AB_IMEXPORTER *ie, AB_IMEXPORTER_CONTEXT *ctx, GWEN_SYNCIO *sio, GWEN_DB_NODE *params); /** * Checks whether the given file is possibly supported by the plugin. */ typedef int (*AB_IMEXPORTER_CHECKFILE_FN)(AB_IMEXPORTER *ie, const char *fname); /** * This function should return a dialog (see @ref GWEN_DIALOG) which * allows editing of the given profile. * (introduced in AqBanking 4.3.0) */ typedef int (*AB_IMEXPORTER_GET_EDITPROFILE_DIALOG_FN)(AB_IMEXPORTER *ie, GWEN_DB_NODE *params, const char *testFileName, GWEN_DIALOG **pDlg); /*@}*/ /** @name Setters for Virtual Backend Functions * */ /*@{*/ void AB_ImExporter_SetImportFn(AB_IMEXPORTER *ie, AB_IMEXPORTER_IMPORT_FN f); void AB_ImExporter_SetExportFn(AB_IMEXPORTER *ie, AB_IMEXPORTER_EXPORT_FN f); void AB_ImExporter_SetCheckFileFn(AB_IMEXPORTER *ie, AB_IMEXPORTER_CHECKFILE_FN f); void AB_ImExporter_SetGetEditProfileDialogFn(AB_IMEXPORTER *ie, AB_IMEXPORTER_GET_EDITPROFILE_DIALOG_FN f); /*@}*/ /** @name Handling of ImExporter Plugins * */ /*@{*/ typedef AB_IMEXPORTER *(*AB_PLUGIN_IMEXPORTER_FACTORY_FN)(GWEN_PLUGIN *pl, AB_BANKING *ab); GWEN_PLUGIN *AB_Plugin_ImExporter_new(GWEN_PLUGIN_MANAGER *pm, const char *name, const char *fileName); AB_IMEXPORTER *AB_Plugin_ImExporter_Factory(GWEN_PLUGIN *pl, AB_BANKING *ab); void AB_Plugin_ImExporter_SetFactoryFn(GWEN_PLUGIN *pl, AB_PLUGIN_IMEXPORTER_FACTORY_FN fn); /*@}*/ #ifdef __cplusplus } #endif /*@}*/ /* defgroup */ #endif /* AQBANKING_IMEXPORTER_BE_H */ aqbanking-6.6.1/src/libs/aqbanking/backendsupport/ab_accountqueue_list.tm20000664000175000017500000000035515037736054023740 00000000000000 AB_ACCOUNTQUEUE_LIST AB_AccountQueue_List aqbanking-6.6.1/src/libs/aqbanking/backendsupport/ab_queue.tm20000664000175000017500000000025715037736054021331 00000000000000 AB_QUEUE AB_Queue aqbanking-6.6.1/src/libs/aqbanking/backendsupport/imexporter_p.h0000664000175000017500000000271714043610744022001 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQBANKING_IMEXPORTER_P_H #define AQBANKING_IMEXPORTER_P_H #define AH_IMEXPORTER_TRANSFORM_MAXLEVEL 16 #include "imexporter_l.h" #include #include struct AB_IMEXPORTER { GWEN_LIST_ELEMENT(AB_IMEXPORTER); GWEN_INHERIT_ELEMENT(AB_IMEXPORTER); AB_BANKING *banking; char *name; uint32_t flags; GWEN_LIBLOADER *libLoader; AB_IMEXPORTER_IMPORT_FN importFn; AB_IMEXPORTER_EXPORT_FN exportFn; AB_IMEXPORTER_CHECKFILE_FN checkFileFn; AB_IMEXPORTER_GET_EDITPROFILE_DIALOG_FN getEditProfileDialogFn; }; static int AB_ImExporter__Transform_Var(GWEN_DB_NODE *db, int level); static int AB_ImExporter__Transform_Group(GWEN_DB_NODE *db, int level); typedef struct AB_PLUGIN_IMEXPORTER AB_PLUGIN_IMEXPORTER; struct AB_PLUGIN_IMEXPORTER { AB_PLUGIN_IMEXPORTER_FACTORY_FN pluginFactoryFn; }; static void GWENHYWFAR_CB AB_Plugin_ImExporter_FreeData(void *bp, void *p); #endif /* AQBANKING_IMEXPORTER_P_H */ aqbanking-6.6.1/src/libs/aqbanking/backendsupport/Makefile.am0000664000175000017500000000651014300721174021136 00000000000000AM_CPPFLAGS = -I$(srcdir)/../.. -I$(srcdir)/.. -I$(top_builddir)/src/libs $(gwenhywfar_includes) AM_CFLAGS=-DBUILDING_AQBANKING @visibility_cflags@ typefiles= \ accountqueue.xml \ userqueue.xml \ providerqueue.xml \ jobqueue.xml \ queue.xml \ account.xml \ user.xml \ swiftdescr.xml typedatadir=$(aqbanking_pkgdatadir)/typemaker2/c dist_typedata_DATA=\ ab_account.tm2 ab_account_list.tm2 ab_account_list2.tm2 \ ab_accountqueue.tm2 ab_accountqueue_list.tm2 \ ab_jobqueue.tm2 ab_jobqueue_list.tm2 \ ab_providerqueue.tm2 ab_providerqueue_list.tm2 \ ab_queue.tm2 \ ab_user.tm2 ab_user_list.tm2 ab_user_list2.tm2 \ ab_userqueue.tm2 ab_userqueue_list.tm2 \ ab_swift_descr.tm2 ab_swift_descr_list.tm2 # order is important here typedata_sources= \ jobqueue.c \ accountqueue.c \ userqueue.c \ providerqueue.c \ queue.c \ account.c \ user.c \ swiftdescr.c built_headers_priv= \ accountqueue_p.h \ userqueue_p.h \ providerqueue_p.h \ jobqueue_p.h \ queue_p.h \ account_p.h \ user_p.h \ swiftdescr_p.h built_headers_pub= \ accountqueue.h \ userqueue.h \ providerqueue.h \ jobqueue.h \ queue.h \ account.h \ user.h \ swiftdescr.h built_headers=$(built_headers_priv) $(built_headers_pub) #iheaderdir=@aqbanking_headerdir_am@/aqbanking #iheader_HEADERS=$(built_headers_pub) noinst_HEADERS= $(built_headers_pub)\ siotlsext.h \ httpsession.h \ msgengine.h \ provider.h \ provider_be.h \ bankinfoplugin.h \ bankinfoplugin_be.h \ siotlsext_p.h \ httpsession_p.h \ msgengine_p.h \ provider_l.h \ provider_p.h \ bankinfoplugin_l.h \ bankinfoplugin_p.h \ imexporter_be.h \ imexporter_l.h \ imexporter_p.h \ imexporter.h noinst_LTLIBRARIES=libabbesupport.la libabbesupport_la_SOURCES=$(typedata_sources) \ siotlsext.c \ httpsession.c \ msgengine.c \ provider.c \ bankinfoplugin.c \ imexporter.c extra_sources=\ provider_account.c \ provider_accspec.c \ provider_user.c \ provider_queues.c \ provider_utils.c EXTRA_DIST=$(typefiles) $(typedata_sources) $(built_headers) $(extra_sources) MAINTAINERCLEANFILES = $(typedata_sources) $(built_headers) $(dist_typedata_DATA) built_sources: $(typedata_sources) typefiles: $(typefiles) $(typemaker2_exe) -I $(top_srcdir)/src/libs/aqbanking/typemaker2/c -I $(gwenhywfar_dir)/share/gwenhywfar/typemaker2/c -I $(srcdir) -I $(srcdir)/../types --destfolder="$(srcdir)" $(typefiles) typedefs: $(typefiles) $(typemaker2_exe) --defs-only -I $(top_srcdir)/src/libs/aqbanking/typemaker2/c -I $(gwenhywfar_dir)/share/gwenhywfar/typemaker2/c -I $(srcdir) -I $(srcdir)/../types --destfolder="$(srcdir)" $(typefiles) clean_build_files: rm -f $(typedata_sources) $(built_headers) format_build_files: for f in $(typedata_sources) $(built_headers); do \ $(ASTYLE) --style=stroustrup -s2 --min-conditional-indent=0 --indent-labels --max-continuation-indent=80 --pad-comma --pad-header --unpad-paren --align-pointer=name --break-closing-braces --break-one-line-headers --attach-return-type --convert-tabs --max-code-length=120 --break-after-logical --suffix=none $$f; \ done sources: $(typedata_sources) for f in $(libabbesupport_la_SOURCES) $(extra_sources); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done cppcheck: for f in $(libabbesupport_la_SOURCES); do \ cppcheck --force $$f ; \ done aqbanking-6.6.1/src/libs/aqbanking/backendsupport/providerqueue.c0000664000175000017500000001237115037736054022162 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "providerqueue.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "./providerqueue_p.h" #include #include /* code headers */ /* macro functions */ GWEN_LIST_FUNCTIONS(AB_PROVIDERQUEUE, AB_ProviderQueue) GWEN_INHERIT_FUNCTIONS(AB_PROVIDERQUEUE) AB_PROVIDERQUEUE *AB_ProviderQueue_new(void) { AB_PROVIDERQUEUE *p_struct; GWEN_NEW_OBJECT(AB_PROVIDERQUEUE, p_struct) p_struct->_refCount=1; GWEN_INHERIT_INIT(AB_PROVIDERQUEUE, p_struct) GWEN_LIST_INIT(AB_PROVIDERQUEUE, p_struct) /* members */ p_struct->providerName=NULL; p_struct->provider=NULL; p_struct->accountQueueList=AB_AccountQueue_List_new(); /* virtual functions */ return p_struct; } void AB_ProviderQueue_free(AB_PROVIDERQUEUE *p_struct) { if (p_struct) { assert(p_struct->_refCount); if (p_struct->_refCount==1) { GWEN_INHERIT_FINI(AB_PROVIDERQUEUE, p_struct) GWEN_LIST_FINI(AB_PROVIDERQUEUE, p_struct) /* members */ free(p_struct->providerName); p_struct->providerName=NULL; AB_AccountQueue_List_free(p_struct->accountQueueList); p_struct->accountQueueList=NULL; p_struct->_refCount=0; GWEN_FREE_OBJECT(p_struct); } else p_struct->_refCount--; } } void AB_ProviderQueue_Attach(AB_PROVIDERQUEUE *p_struct) { assert(p_struct); assert(p_struct->_refCount); p_struct->_refCount++; } AB_PROVIDERQUEUE *AB_ProviderQueue_dup(const AB_PROVIDERQUEUE *p_src) { AB_PROVIDERQUEUE *p_struct; assert(p_src); p_struct=AB_ProviderQueue_new(); /* member "providerName" */ if (p_struct->providerName) { free(p_struct->providerName); p_struct->providerName=NULL; p_struct->providerName=NULL; } if (p_src->providerName) { p_struct->providerName=strdup(p_src->providerName); } /* member "provider" */ p_struct->provider=p_src->provider; /* member "accountQueueList" */ if (p_struct->accountQueueList) { AB_AccountQueue_List_free(p_struct->accountQueueList); p_struct->accountQueueList=NULL; p_struct->accountQueueList=NULL; } if (p_src->accountQueueList) { p_struct->accountQueueList=AB_AccountQueue_List_dup(p_src->accountQueueList); } return p_struct; } const char *AB_ProviderQueue_GetProviderName(const AB_PROVIDERQUEUE *p_struct){ assert(p_struct); return p_struct->providerName; } AB_PROVIDER *AB_ProviderQueue_GetProvider(const AB_PROVIDERQUEUE *p_struct){ assert(p_struct); return p_struct->provider; } AB_ACCOUNTQUEUE_LIST *AB_ProviderQueue_GetAccountQueueList(const AB_PROVIDERQUEUE *p_struct){ assert(p_struct); return p_struct->accountQueueList; } void AB_ProviderQueue_SetProviderName(AB_PROVIDERQUEUE *p_struct, const char *p_src){ assert(p_struct); if (p_struct->providerName) { free(p_struct->providerName); p_struct->providerName=NULL; p_struct->providerName=NULL; } if (p_src) { p_struct->providerName=strdup(p_src); } else { p_struct->providerName=NULL; } } void AB_ProviderQueue_SetProvider(AB_PROVIDERQUEUE *p_struct, AB_PROVIDER *p_src){ assert(p_struct); p_struct->provider=p_src; } void AB_ProviderQueue_SetAccountQueueList(AB_PROVIDERQUEUE *p_struct, AB_ACCOUNTQUEUE_LIST *p_src){ assert(p_struct); if (p_struct->accountQueueList) { AB_AccountQueue_List_free(p_struct->accountQueueList); p_struct->accountQueueList=NULL; p_struct->accountQueueList=NULL; } p_struct->accountQueueList=p_src; } AB_PROVIDERQUEUE_LIST *AB_ProviderQueue_List_dup(const AB_PROVIDERQUEUE_LIST *p_src) { AB_PROVIDERQUEUE_LIST *p_dest; AB_PROVIDERQUEUE *p_elem; assert(p_src); p_dest=AB_ProviderQueue_List_new(); p_elem=AB_ProviderQueue_List_First(p_src); while(p_elem) { AB_PROVIDERQUEUE *p_cpy; p_cpy=AB_ProviderQueue_dup(p_elem); AB_ProviderQueue_List_Add(p_cpy, p_dest); p_elem=AB_ProviderQueue_List_Next(p_elem); } return p_dest; } AB_PROVIDERQUEUE *AB_ProviderQueue_List_GetByProviderName(const AB_PROVIDERQUEUE_LIST *p_list, const char *p_cmp){ AB_PROVIDERQUEUE *p_struct; assert(p_list); p_struct = AB_ProviderQueue_List_First(p_list); while(p_struct) { int p_rv; if (p_struct->providerName && p_cmp) p_rv=strcasecmp(p_cmp, p_struct->providerName); else if (p_cmp) p_rv=1; else if (p_struct->providerName) p_rv=-1; else p_rv=0; if (p_rv == 0) return p_struct; p_struct = AB_ProviderQueue_List_Next(p_struct); } return NULL; } AB_ACCOUNTQUEUE *AB_ProviderQueue_FindAccountQueueById(const AB_PROVIDERQUEUE *pq, uint32_t uid) { if (pq->accountQueueList==NULL) return NULL; return AB_AccountQueue_List_GetByAccountId(pq->accountQueueList, uid); } void AB_ProviderQueue_AddAccountQueue(AB_PROVIDERQUEUE *pq, AB_ACCOUNTQUEUE *aq) { if (pq->accountQueueList==NULL) pq->accountQueueList=AB_AccountQueue_List_new(); AB_AccountQueue_List_Add(aq, pq->accountQueueList); } AB_ACCOUNTQUEUE *AB_ProviderQueue_GetFirstAccountQueue(const AB_PROVIDERQUEUE *pq) { if (pq->accountQueueList==NULL) return NULL; return AB_AccountQueue_List_First(pq->accountQueueList); } /* code headers */ aqbanking-6.6.1/src/libs/aqbanking/backendsupport/httpsession.h0000664000175000017500000000334314043610744021643 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2004-2017 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AB_HTTPSESS_H #define AB_HTTPSESS_H #include #include #include /** @defgroup G_AB_PROVIDER_HTTPSESS HTTP Session Management * @ingroup G_AB_BE_INTERFACE * * Functions in this group provide a HTTP session management. This can be * used by backends which use the SSL transport protocol. */ /*@{*/ /** @name Constructor/Destructor * */ /*@{*/ AQBANKING_API GWEN_HTTP_SESSION *AB_HttpSession_new(AB_PROVIDER *pro, AB_USER *u, const char *url, const char *defaultProto, int defaultPort); /*@}*/ /** @name Getters for Related Objects * */ /*@{*/ AQBANKING_API AB_USER *AB_HttpSession_GetUser(const GWEN_HTTP_SESSION *sess); AQBANKING_API AB_PROVIDER *AB_HttpSession_GetProvider(const GWEN_HTTP_SESSION *sess); AQBANKING_API void Ab_HttpSession_AddLog(GWEN_HTTP_SESSION *sess, const char *s); AQBANKING_API const char *AB_HttpSession_GetLog(const GWEN_HTTP_SESSION *sess); AQBANKING_API void AB_HttpSession_ClearLog(GWEN_HTTP_SESSION *sess); /*@}*/ /*@}*/ /* defgroup */ #endif aqbanking-6.6.1/src/libs/aqbanking/backendsupport/jobqueue.xml0000664000175000017500000000447014043610744021452 00000000000000 AB_JOBQUEUE AB_JobQueue jobqueue with_inherit with_list1 with_refcount nocopy
aqbanking/error.h
aqbanking/types/transaction.h
$(api) void $(struct_prefix)_AddTransaction($(struct_type) *aq, AB_TRANSACTION *t); void $(struct_prefix)_AddTransaction($(struct_type) *aq, AB_TRANSACTION *t) { if (aq->transactionList==NULL) aq->transactionList=AB_Transaction_List2_new(); AB_Transaction_List2_PushBack(aq->transactionList, t); } $(api) AB_TRANSACTION *$(struct_prefix)_GetFirstTransaction(const $(struct_type) *aq); AB_TRANSACTION *$(struct_prefix)_GetFirstTransaction(const $(struct_type) *jq) { if (jq->transactionList) return AB_Transaction_List2_GetFront(jq->transactionList); return NULL; }
0 0 public volatile with_getbymember none none NULL AB_Transaction_List2_new() public volatile own dup none none
aqbanking-6.6.1/src/libs/aqbanking/backendsupport/provider_l.h0000664000175000017500000000171614043610744021427 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQBANKING_PROVIDER_L_H #define AQBANKING_PROVIDER_L_H #define AB_PROVIDER_FOLDER "providers" #define AB_PROVIDER_DEBUGGER_FOLDER "debugger" #include #include #include GWEN_LIST_FUNCTION_DEFS(AB_PROVIDER, AB_Provider) void AB_Provider_SetPlugin(AB_PROVIDER *pro, GWEN_PLUGIN *pl); void AB_Provider_free(AB_PROVIDER *pro); #endif /* AQBANKING_PROVIDER_L_H */ aqbanking-6.6.1/src/libs/aqbanking/backendsupport/jobqueue_p.h0000664000175000017500000000126315037736054021424 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "jobqueue.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef AB_JOBQUEUE_JOBQUEUE_P_H #define AB_JOBQUEUE_JOBQUEUE_P_H #include "./jobqueue.h" #ifdef __cplusplus extern "C" { #endif struct AB_JOBQUEUE { GWEN_INHERIT_ELEMENT(AB_JOBQUEUE) GWEN_LIST_ELEMENT(AB_JOBQUEUE) int _refCount; int jobType; /* volatile */ AB_TRANSACTION_LIST2 *transactionList; /* volatile */ }; #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/aqbanking/backendsupport/ab_user.tm20000664000175000017500000000025415037736054021160 00000000000000 AB_USER AB_User aqbanking-6.6.1/src/libs/aqbanking/backendsupport/bankinfoplugin_l.h0000664000175000017500000000154514043610744022603 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQBANKING_BANKINFOPLUGIN_L_H #define AQBANKING_BANKINFOPLUGIN_L_H #define AB_BANKINFO_PLUGIN_FOLDER "bankinfo" #include "bankinfoplugin_be.h" #include GWEN_LIST_FUNCTION_DEFS(AB_BANKINFO_PLUGIN, AB_BankInfoPlugin) void AB_BankInfoPlugin_SetPlugin(AB_BANKINFO_PLUGIN *bip, GWEN_PLUGIN *pl); #endif /* AQBANKING_BANKINFOPLUGIN_L_H */ aqbanking-6.6.1/src/libs/aqbanking/backendsupport/ab_account.tm20000664000175000017500000000026515037736054021640 00000000000000 AB_ACCOUNT AB_Account aqbanking-6.6.1/src/libs/aqbanking/backendsupport/providerqueue_p.h0000664000175000017500000000140115037736054022476 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "providerqueue.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef AB_PROVIDERQUEUE_PROVIDERQUEUE_P_H #define AB_PROVIDERQUEUE_PROVIDERQUEUE_P_H #include "./providerqueue.h" #ifdef __cplusplus extern "C" { #endif struct AB_PROVIDERQUEUE { GWEN_INHERIT_ELEMENT(AB_PROVIDERQUEUE) GWEN_LIST_ELEMENT(AB_PROVIDERQUEUE) int _refCount; char *providerName; AB_PROVIDER *provider; /* volatile */ AB_ACCOUNTQUEUE_LIST *accountQueueList; /* volatile */ }; #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/aqbanking/backendsupport/accountqueue.c0000664000175000017500000001455515037736054021772 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "accountqueue.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "./accountqueue_p.h" #include #include /* code headers */ /* macro functions */ GWEN_LIST_FUNCTIONS(AB_ACCOUNTQUEUE, AB_AccountQueue) GWEN_INHERIT_FUNCTIONS(AB_ACCOUNTQUEUE) AB_ACCOUNTQUEUE *AB_AccountQueue_new(void) { AB_ACCOUNTQUEUE *p_struct; GWEN_NEW_OBJECT(AB_ACCOUNTQUEUE, p_struct) p_struct->_refCount=1; GWEN_INHERIT_INIT(AB_ACCOUNTQUEUE, p_struct) GWEN_LIST_INIT(AB_ACCOUNTQUEUE, p_struct) /* members */ p_struct->accountId=0; p_struct->account=NULL; p_struct->accountSpec=NULL; p_struct->transactionList=AB_Transaction_List2_new(); p_struct->jobQueueList=AB_JobQueue_List_new(); /* virtual functions */ return p_struct; } void AB_AccountQueue_free(AB_ACCOUNTQUEUE *p_struct) { if (p_struct) { assert(p_struct->_refCount); if (p_struct->_refCount==1) { GWEN_INHERIT_FINI(AB_ACCOUNTQUEUE, p_struct) GWEN_LIST_FINI(AB_ACCOUNTQUEUE, p_struct) /* members */ AB_AccountSpec_free(p_struct->accountSpec); p_struct->accountSpec=NULL; AB_Transaction_List2_free(p_struct->transactionList); p_struct->transactionList=NULL; AB_JobQueue_List_free(p_struct->jobQueueList); p_struct->jobQueueList=NULL; p_struct->_refCount=0; GWEN_FREE_OBJECT(p_struct); } else p_struct->_refCount--; } } void AB_AccountQueue_Attach(AB_ACCOUNTQUEUE *p_struct) { assert(p_struct); assert(p_struct->_refCount); p_struct->_refCount++; } AB_ACCOUNTQUEUE *AB_AccountQueue_dup(const AB_ACCOUNTQUEUE *p_src) { AB_ACCOUNTQUEUE *p_struct; assert(p_src); p_struct=AB_AccountQueue_new(); /* member "accountId" */ p_struct->accountId=p_src->accountId; /* member "account" */ p_struct->account=p_src->account; /* member "accountSpec" */ if (p_struct->accountSpec) { AB_AccountSpec_free(p_struct->accountSpec); p_struct->accountSpec=NULL; p_struct->accountSpec=NULL; } if (p_src->accountSpec) { p_struct->accountSpec=AB_AccountSpec_dup(p_src->accountSpec); } /* member "transactionList" */ if (p_struct->transactionList) { AB_Transaction_List2_free(p_struct->transactionList); p_struct->transactionList=NULL; p_struct->transactionList=NULL; } if (p_src->transactionList) { p_struct->transactionList=AB_Transaction_List2_dup(p_src->transactionList); } /* member "jobQueueList" */ if (p_struct->jobQueueList) { AB_JobQueue_List_free(p_struct->jobQueueList); p_struct->jobQueueList=NULL; p_struct->jobQueueList=NULL; } if (p_src->jobQueueList) { p_struct->jobQueueList=AB_JobQueue_List_dup(p_src->jobQueueList); } return p_struct; } uint32_t AB_AccountQueue_GetAccountId(const AB_ACCOUNTQUEUE *p_struct){ assert(p_struct); return p_struct->accountId; } AB_ACCOUNT *AB_AccountQueue_GetAccount(const AB_ACCOUNTQUEUE *p_struct){ assert(p_struct); return p_struct->account; } AB_ACCOUNT_SPEC *AB_AccountQueue_GetAccountSpec(const AB_ACCOUNTQUEUE *p_struct){ assert(p_struct); return p_struct->accountSpec; } AB_TRANSACTION_LIST2 *AB_AccountQueue_GetTransactionList(const AB_ACCOUNTQUEUE *p_struct){ assert(p_struct); return p_struct->transactionList; } AB_JOBQUEUE_LIST *AB_AccountQueue_GetJobQueueList(const AB_ACCOUNTQUEUE *p_struct){ assert(p_struct); return p_struct->jobQueueList; } void AB_AccountQueue_SetAccountId(AB_ACCOUNTQUEUE *p_struct, uint32_t p_src){ assert(p_struct); p_struct->accountId=p_src; } void AB_AccountQueue_SetAccount(AB_ACCOUNTQUEUE *p_struct, AB_ACCOUNT *p_src){ assert(p_struct); p_struct->account=p_src; } void AB_AccountQueue_SetAccountSpec(AB_ACCOUNTQUEUE *p_struct, AB_ACCOUNT_SPEC *p_src){ assert(p_struct); if (p_struct->accountSpec) { AB_AccountSpec_free(p_struct->accountSpec); p_struct->accountSpec=NULL; p_struct->accountSpec=NULL; } p_struct->accountSpec=p_src; } void AB_AccountQueue_SetTransactionList(AB_ACCOUNTQUEUE *p_struct, AB_TRANSACTION_LIST2 *p_src){ assert(p_struct); if (p_struct->transactionList) { AB_Transaction_List2_free(p_struct->transactionList); p_struct->transactionList=NULL; p_struct->transactionList=NULL; } p_struct->transactionList=p_src; } void AB_AccountQueue_SetJobQueueList(AB_ACCOUNTQUEUE *p_struct, AB_JOBQUEUE_LIST *p_src){ assert(p_struct); if (p_struct->jobQueueList) { AB_JobQueue_List_free(p_struct->jobQueueList); p_struct->jobQueueList=NULL; p_struct->jobQueueList=NULL; } p_struct->jobQueueList=p_src; } AB_ACCOUNTQUEUE_LIST *AB_AccountQueue_List_dup(const AB_ACCOUNTQUEUE_LIST *p_src) { AB_ACCOUNTQUEUE_LIST *p_dest; AB_ACCOUNTQUEUE *p_elem; assert(p_src); p_dest=AB_AccountQueue_List_new(); p_elem=AB_AccountQueue_List_First(p_src); while(p_elem) { AB_ACCOUNTQUEUE *p_cpy; p_cpy=AB_AccountQueue_dup(p_elem); AB_AccountQueue_List_Add(p_cpy, p_dest); p_elem=AB_AccountQueue_List_Next(p_elem); } return p_dest; } AB_ACCOUNTQUEUE *AB_AccountQueue_List_GetByAccountId(const AB_ACCOUNTQUEUE_LIST *p_list, uint32_t p_cmp){ AB_ACCOUNTQUEUE *p_struct; assert(p_list); p_struct = AB_AccountQueue_List_First(p_list); while(p_struct) { int p_rv; if (p_struct->accountId==p_cmp) p_rv=0; else if (p_cmpaccountId) p_rv=-1; else p_rv=1; if (p_rv == 0) return p_struct; p_struct = AB_AccountQueue_List_Next(p_struct); } return NULL; } void AB_AccountQueue_AddTransaction(AB_ACCOUNTQUEUE *aq, AB_TRANSACTION *t) { if (aq->transactionList==NULL) aq->transactionList=AB_Transaction_List2_new(); AB_Transaction_List2_PushBack(aq->transactionList, t); } AB_JOBQUEUE *AB_AccountQueue_FindJobQueue(const AB_ACCOUNTQUEUE *uq, int cmd) { if (uq->jobQueueList) return AB_JobQueue_List_GetByJobType(uq->jobQueueList, cmd); return NULL; } void AB_AccountQueue_AddJobQueue(AB_ACCOUNTQUEUE *up, AB_JOBQUEUE *aq) { if (up->jobQueueList==NULL) up->jobQueueList=AB_JobQueue_List_new(); AB_JobQueue_List_Add(aq, up->jobQueueList); } AB_JOBQUEUE *AB_AccountQueue_GetFirstJobQueue(const AB_ACCOUNTQUEUE *up) { if (up->jobQueueList==NULL) return NULL; return AB_JobQueue_List_First(up->jobQueueList); } /* code headers */ aqbanking-6.6.1/src/libs/aqbanking/backendsupport/providerqueue.xml0000664000175000017500000000646314043610744022536 00000000000000 AB_PROVIDERQUEUE AB_ProviderQueue providerqueue with_inherit with_list1 with_refcount nocopy
aqbanking/error.h
aqbanking/backendsupport/accountqueue.h
aqbanking/backendsupport/provider.h
$(api) AB_ACCOUNTQUEUE *$(struct_prefix)_FindAccountQueueById(const $(struct_type) *pq, uint32_t uid); AB_ACCOUNTQUEUE *$(struct_prefix)_FindAccountQueueById(const $(struct_type) *pq, uint32_t uid) { if (pq->accountQueueList==NULL) return NULL; return AB_AccountQueue_List_GetByAccountId(pq->accountQueueList, uid); } $(api) void $(struct_prefix)_AddAccountQueue($(struct_type) *pq, AB_ACCOUNTQUEUE *aq); void $(struct_prefix)_AddAccountQueue($(struct_type) *pq, AB_ACCOUNTQUEUE *aq) { if (pq->accountQueueList==NULL) pq->accountQueueList=AB_AccountQueue_List_new(); AB_AccountQueue_List_Add(aq, pq->accountQueueList); } $(api) AB_ACCOUNTQUEUE *$(struct_prefix)_GetFirstAccountQueue(const $(struct_type) *pq); AB_ACCOUNTQUEUE *$(struct_prefix)_GetFirstAccountQueue(const $(struct_type) *pq) { if (pq->accountQueueList==NULL) return NULL; return AB_AccountQueue_List_First(pq->accountQueueList); }
public own with_getbymember const dup const NULL NULL public volatile none none assign assign NULL AB_AccountQueue_List_new() public volatile own dup none none
aqbanking-6.6.1/src/libs/aqbanking/backendsupport/httpsession_p.h0000664000175000017500000000166714043610744022171 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2004-2017 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AB_HTTPSESS_P_H #define AB_HTTPSESS_P_H #include "httpsession.h" #include "aqbanking/backendsupport/user.h" typedef struct AB_HTTP_SESSION AB_HTTP_SESSION; struct AB_HTTP_SESSION { AB_PROVIDER *provider; AB_USER *user; GWEN_BUFFER *logs; }; static void GWENHYWFAR_CB AB_HttpSession_FreeData(void *bp, void *p); static int GWENHYWFAR_CB AB_HttpSession_InitSyncIo(GWEN_HTTP_SESSION *sess, GWEN_SYNCIO *sio); #endif aqbanking-6.6.1/src/libs/aqbanking/backendsupport/ab_providerqueue_list.tm20000664000175000017500000000036115037736054024133 00000000000000 AB_PROVIDERQUEUE_LIST AB_ProviderQueue_List aqbanking-6.6.1/src/libs/aqbanking/backendsupport/provider_queues.c0000664000175000017500000000523114043610744022472 00000000000000/*************************************************************************** begin : Mon Nov 26 2018 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ /* * This file is included by provider.c */ int AB_Provider_SortProviderQueueIntoUserQueueList(AB_PROVIDER *pro, AB_PROVIDERQUEUE *pq, AB_USERQUEUE_LIST *uql) { AB_ACCOUNTQUEUE_LIST *aql; AB_ACCOUNTQUEUE *aq; assert(pro); aql=AB_ProviderQueue_GetAccountQueueList(pq); if (aql==NULL) { return GWEN_ERROR_NO_DATA; } while ((aq=AB_AccountQueue_List_First(aql))) { uint32_t aid; uint32_t uid; AB_ACCOUNT *a=NULL; AB_USERQUEUE *uq=NULL; int rv; aid=AB_AccountQueue_GetAccountId(aq); rv=AB_Provider_GetAccount(pro, aid, 1, 1, &a); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); return rv; } AB_AccountQueue_SetAccount(aq, a); /* determine user */ uid=AB_Account_GetUserId(a); if (uid==0) { DBG_ERROR(AQBANKING_LOGDOMAIN, "No first user in account %lu, SNH!", (unsigned long int) aid); return GWEN_ERROR_INTERNAL; } else { uq=AB_UserQueue_List_GetByUserId(uql, uid); if (uq==NULL) { AB_USER *u=NULL; rv=AB_Provider_GetUser(pro, uid, 1, 1, &u); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); return rv; } uq=AB_UserQueue_new(); AB_UserQueue_SetUser(uq, u); AB_UserQueue_SetUserId(uq, uid); AB_UserQueue_List_Add(uq, uql); } } AB_AccountQueue_List_Del(aq); AB_UserQueue_AddAccountQueue(uq, aq); } return 0; } void AB_Provider_FreeUsersAndAccountsFromUserQueueList(AB_PROVIDER *pro, AB_USERQUEUE_LIST *uql) { AB_USERQUEUE *uq; assert(pro); uq=AB_UserQueue_List_First(uql); while (uq) { AB_ACCOUNTQUEUE_LIST *aql; AB_USER *u; u=AB_UserQueue_GetUser(uq); aql=AB_UserQueue_GetAccountQueueList(uq); if (aql) { AB_ACCOUNTQUEUE *aq; aq=AB_AccountQueue_List_First(aql); while (aq) { AB_ACCOUNT *a; a=AB_AccountQueue_GetAccount(aq); AB_AccountQueue_SetAccount(aq, NULL); AB_Account_free(a); aq=AB_AccountQueue_List_Next(aq); } } AB_UserQueue_SetUserId(uq, 0); AB_UserQueue_SetUser(uq, NULL); AB_User_free(u); uq=AB_UserQueue_List_Next(uq); } } aqbanking-6.6.1/src/libs/aqbanking/backendsupport/accountqueue_p.h0000664000175000017500000000152515037736054022307 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "accountqueue.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef AB_ACCOUNTQUEUE_ACCOUNTQUEUE_P_H #define AB_ACCOUNTQUEUE_ACCOUNTQUEUE_P_H #include "./accountqueue.h" #ifdef __cplusplus extern "C" { #endif struct AB_ACCOUNTQUEUE { GWEN_INHERIT_ELEMENT(AB_ACCOUNTQUEUE) GWEN_LIST_ELEMENT(AB_ACCOUNTQUEUE) int _refCount; uint32_t accountId; AB_ACCOUNT *account; /* volatile */ AB_ACCOUNT_SPEC *accountSpec; /* volatile */ AB_TRANSACTION_LIST2 *transactionList; /* volatile */ AB_JOBQUEUE_LIST *jobQueueList; /* volatile */ }; #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/aqbanking/backendsupport/accountqueue.xml0000664000175000017500000001072614043610744022335 00000000000000 AB_ACCOUNTQUEUE AB_AccountQueue accountqueue with_inherit with_list1 with_refcount nocopy
aqbanking/error.h
aqbanking/types/account_spec.h
aqbanking/backendsupport/account.h
aqbanking/backendsupport/jobqueue.h
aqbanking/types/transaction.h
$(api) void $(struct_prefix)_AddTransaction($(struct_type) *aq, AB_TRANSACTION *t); void $(struct_prefix)_AddTransaction($(struct_type) *aq, AB_TRANSACTION *t) { if (aq->transactionList==NULL) aq->transactionList=AB_Transaction_List2_new(); AB_Transaction_List2_PushBack(aq->transactionList, t); } $(api) AB_JOBQUEUE *$(struct_prefix)_FindJobQueue(const $(struct_type) *uq, int cmd); AB_JOBQUEUE *$(struct_prefix)_FindJobQueue(const $(struct_type) *uq, int cmd) { if (uq->jobQueueList) return AB_JobQueue_List_GetByJobType(uq->jobQueueList, cmd); return NULL; } $(api) void $(struct_prefix)_AddJobQueue($(struct_type) *up, AB_JOBQUEUE *aq); void $(struct_prefix)_AddJobQueue($(struct_type) *up, AB_JOBQUEUE *aq) { if (up->jobQueueList==NULL) up->jobQueueList=AB_JobQueue_List_new(); AB_JobQueue_List_Add(aq, up->jobQueueList); } $(api) AB_JOBQUEUE *$(struct_prefix)_GetFirstJobQueue(const $(struct_type) *up); AB_JOBQUEUE *$(struct_prefix)_GetFirstJobQueue(const $(struct_type) *up) { if (up->jobQueueList==NULL) return NULL; return AB_JobQueue_List_First(up->jobQueueList); }
0 0 public with_getbymember NULL NULL public volatile none none assign assign NULL NULL public volatile own none none NULL AB_Transaction_List2_new() public volatile own dup none none NULL AB_JobQueue_List_new() public volatile own dup none none
aqbanking-6.6.1/src/libs/aqbanking/backendsupport/msgengine.c0000664000175000017500000006465414043610744021243 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "msgengine_p.h" #include #include #include #include #include GWEN_INHERIT(GWEN_MSGENGINE, AB_MSGENGINE) GWEN_MSGENGINE *AB_MsgEngine_new(void) { GWEN_MSGENGINE *e; AB_MSGENGINE *le; e=GWEN_MsgEngine_new(); GWEN_NEW_OBJECT(AB_MSGENGINE, le); GWEN_INHERIT_SETDATA(GWEN_MSGENGINE, AB_MSGENGINE, e, le, AB_MsgEngine_FreeData); GWEN_MsgEngine_SetTypeReadFunction(e, AB_MsgEngine_TypeRead); GWEN_MsgEngine_SetTypeWriteFunction(e, AB_MsgEngine_TypeWrite); GWEN_MsgEngine_SetTypeCheckFunction(e, AB_MsgEngine_TypeCheck); GWEN_MsgEngine_SetBinTypeReadFunction(e, AB_MsgEngine_BinTypeRead); GWEN_MsgEngine_SetBinTypeWriteFunction(e, AB_MsgEngine_BinTypeWrite); GWEN_MsgEngine_SetGetCharValueFunction(e, AB_MsgEngine_GetCharValue); GWEN_MsgEngine_SetGetIntValueFunction(e, AB_MsgEngine_GetIntValue); GWEN_MsgEngine_SetEscapeChar(e, '?'); GWEN_MsgEngine_SetDelimiters(e, ""); return e; } void GWENHYWFAR_CB AB_MsgEngine_FreeData(void *bp, void *p) { //GWEN_MSGENGINE *e; AB_MSGENGINE *le; //e=(GWEN_MSGENGINE*)bp; le=(AB_MSGENGINE *)p; /* free all objects inside AB_MsgEngine */ GWEN_FREE_OBJECT(le); } uint32_t AB_MsgEngine__FromBCD(uint32_t value) { uint32_t rv; rv=0; rv+=((value>>28)&0xf)*10000000; rv+=((value>>24)&0xf)*1000000; rv+=((value>>20)&0xf)*100000; rv+=((value>>16)&0xf)*10000; rv+=((value>>12)&0xf)*1000; rv+=((value>>8)&0xf)*100; rv+=((value>>4)&0xf)*10; rv+=((value)&0xf); return rv; } uint32_t AB_MsgEngine__ToBCD(uint32_t value) { uint32_t rv; rv=0; rv+=value/10000000; value%=10000000; rv<<=4; rv+=value/1000000; value%=1000000; rv<<=4; rv+=value/100000; value%=100000; rv<<=4; rv+=value/10000; value%=10000; rv<<=4; rv+=value/1000; value%=1000; rv<<=4; rv+=value/100; value%=100; rv<<=4; rv+=value/10; value%=10; rv<<=4; rv+=value; return rv; } int AB_MsgEngine_TypeRead(GWEN_MSGENGINE *e, GWEN_BUFFER *msgbuf, GWEN_XMLNODE *node, GWEN_BUFFER *vbuf, char escapeChar, const char *delimiters) { AB_MSGENGINE *le; const char *type; assert(e); le=GWEN_INHERIT_GETDATA(GWEN_MSGENGINE, AB_MSGENGINE, e); assert(le); if (!GWEN_Buffer_GetBytesLeft(msgbuf)) { DBG_DEBUG(AQBANKING_LOGDOMAIN, "Buffer empty"); return 0; } type=GWEN_XMLNode_GetProperty(node, "type", ""); if (strcasecmp(type, "byte")==0) { int isBCD; int c; char numbuf[32]; unsigned int value; isBCD=atoi(GWEN_XMLNode_GetProperty(node, "bcd", "0")); c=GWEN_Buffer_ReadByte(msgbuf); if (c==-1) return -1; value=c&0xff; if (isBCD) value=AB_MsgEngine__FromBCD(value); snprintf(numbuf, sizeof(numbuf), "%d", (unsigned int)value); if (GWEN_Buffer_AppendString(vbuf, numbuf)) { DBG_INFO(AQBANKING_LOGDOMAIN, "here"); return -1; } return 0; } else if (strcasecmp(type, "word")==0) { int bigEndian; int isBCD; unsigned int value; int c; char numbuf[32]; bigEndian=atoi(GWEN_XMLNode_GetProperty(node, "bigEndian", "1")); isBCD=atoi(GWEN_XMLNode_GetProperty(node, "bcd", "0")); value=0; if (bigEndian) { c=GWEN_Buffer_ReadByte(msgbuf); if (c==-1) return -1; value=(((unsigned char)(c&0xff)<<8)); c=GWEN_Buffer_ReadByte(msgbuf); if (c==-1) return -1; value|=(unsigned char)((c&0xff)); } /* if bigEndian */ else { c=GWEN_Buffer_ReadByte(msgbuf); if (c==-1) return -1; value=(unsigned char)((c&0xff)); c=GWEN_Buffer_ReadByte(msgbuf); if (c==-1) return -1; value|=(unsigned char)(((c&0xff)<<8)); } if (isBCD) value=AB_MsgEngine__FromBCD(value); snprintf(numbuf, sizeof(numbuf), "%d", (unsigned int)value); if (GWEN_Buffer_AppendString(vbuf, numbuf)) { DBG_INFO(AQBANKING_LOGDOMAIN, "here"); return -1; } return 0; } /* if word */ else if (strcasecmp(type, "dword")==0) { int bigEndian; int isBCD; uint32_t value=0; int c; char numbuf[32]; bigEndian=atoi(GWEN_XMLNode_GetProperty(node, "bigEndian", "1")); isBCD=atoi(GWEN_XMLNode_GetProperty(node, "bcd", "0")); if (bigEndian) { c=GWEN_Buffer_ReadByte(msgbuf); if (c==-1) return -1; value=(((unsigned char)(c&0xff)<<24)); c=GWEN_Buffer_ReadByte(msgbuf); if (c==-1) return -1; value|=(((unsigned char)(c&0xff)<<16)); c=GWEN_Buffer_ReadByte(msgbuf); if (c==-1) return -1; value|=(((unsigned char)(c&0xff)<<8)); c=GWEN_Buffer_ReadByte(msgbuf); if (c==-1) return -1; value|=(unsigned char)((c&0xff)); } /* if bigEndian */ else { c=GWEN_Buffer_ReadByte(msgbuf); if (c==-1) return -1; value=(unsigned char)((c&0xff)); c=GWEN_Buffer_ReadByte(msgbuf); if (c==-1) return -1; value|=(unsigned char)(((c&0xff)<<8)); c=GWEN_Buffer_ReadByte(msgbuf); if (c==-1) return -1; value|=(unsigned char)(((c&0xff)<<16)); c=GWEN_Buffer_ReadByte(msgbuf); if (c==-1) return -1; value|=(unsigned char)(((c&0xff)<<24)); } if (isBCD) value=AB_MsgEngine__FromBCD(value); snprintf(numbuf, sizeof(numbuf), "%d", (unsigned int)value); if (GWEN_Buffer_AppendString(vbuf, numbuf)) { DBG_INFO(AQBANKING_LOGDOMAIN, "here"); return -1; } return 0; } /* if word */ else if (strcasecmp(type, "bytes")==0) { int size; if (1!=sscanf(GWEN_XMLNode_GetProperty(node, "size", "-1"), "%i", &size)) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Bad number of bytes"); return -1; } if (size==-1) { size=GWEN_Buffer_GetBytesLeft(msgbuf); if (size==0) { DBG_INFO(AQBANKING_LOGDOMAIN, "No bytes found"); return 0; } } else { if (size>GWEN_Buffer_GetBytesLeft(msgbuf)) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Too few bytes in message (%d>%d)", size, GWEN_Buffer_GetBytesLeft(msgbuf)); return -1; } } if (GWEN_Buffer_AppendBytes(vbuf, GWEN_Buffer_GetPosPointer(msgbuf), size)) { DBG_INFO(AQBANKING_LOGDOMAIN, "here"); return -1; } if (GWEN_Buffer_IncrementPos(msgbuf, size)) { DBG_INFO(AQBANKING_LOGDOMAIN, "here"); return -1; } return 0; } else if (strcasecmp(type, "bcd")==0) { int size; int skipLeadingZeroes; skipLeadingZeroes=atoi(GWEN_XMLNode_GetProperty(node, "skipZeroes", "0")); if (1!=sscanf(GWEN_XMLNode_GetProperty(node, "size", "-1"), "%i", &size)) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Bad number of bytes"); return -1; } if (size==-1) { size=GWEN_Buffer_GetBytesLeft(msgbuf); if (size==0) { DBG_INFO(AQBANKING_LOGDOMAIN, "No bytes found"); return 0; } } else { if (size>GWEN_Buffer_GetBytesLeft(msgbuf)) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Too few bytes in message (%d>%d)", size, GWEN_Buffer_GetBytesLeft(msgbuf)); return -1; } } if (GWEN_Text_ToBcdBuffer(GWEN_Buffer_GetPosPointer(msgbuf), size, vbuf, 0, 0, skipLeadingZeroes)) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Error parsing BCD string"); return -1; } if (GWEN_Buffer_IncrementPos(msgbuf, size)) { DBG_INFO(AQBANKING_LOGDOMAIN, "here"); return -1; } return 0; } else if (strcasecmp(type, "ascii")==0) { int size; int condense; int kvk; //uint32_t vpos=0; kvk=atoi(GWEN_XMLNode_GetProperty(node, "kvk", "0")); condense=atoi(GWEN_XMLNode_GetProperty(node, "condense", "1")); if (1!=sscanf(GWEN_XMLNode_GetProperty(node, "size", "-1"), "%i", &size)) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Bad number of bytes"); return -1; } if (size==-1) { /* if no fixed size given let GWEN handle this */ return 1; } else { if (size>GWEN_Buffer_GetBytesLeft(msgbuf)) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Too few bytes in message (%d>%d)", size, GWEN_Buffer_GetBytesLeft(msgbuf)); return -1; } } if (kvk) { // vpos=GWEN_Buffer_GetPos(vbuf); } if (condense) { GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, size, 0, 1); GWEN_Buffer_AppendBytes(tbuf, GWEN_Buffer_GetPosPointer(msgbuf), size); GWEN_Text_CondenseBuffer(tbuf); GWEN_Buffer_Rewind(tbuf); if (GWEN_Buffer_GetUsedBytes(tbuf)==0) { /* just to fool the caller */ GWEN_Buffer_AppendByte(tbuf, 0); } if (GWEN_Buffer_AppendBuffer(vbuf, tbuf)) { DBG_INFO(AQBANKING_LOGDOMAIN, "here"); GWEN_Buffer_free(tbuf); return -1; } GWEN_Buffer_free(tbuf); } else { if (GWEN_Buffer_AppendBytes(vbuf, GWEN_Buffer_GetPosPointer(msgbuf), size)) { DBG_INFO(AQBANKING_LOGDOMAIN, "here"); return -1; } } if (GWEN_Buffer_IncrementPos(msgbuf, size)) { DBG_INFO(AQBANKING_LOGDOMAIN, "here"); return -1; } return 0; } else if (strcasecmp(type, "tlv")==0) { int isBerTlv; const char *p; unsigned int size; unsigned int pos; unsigned int j; p=GWEN_Buffer_GetPosPointer(msgbuf); pos=0; size=GWEN_Buffer_GetBytesLeft(msgbuf); isBerTlv=(strcasecmp(GWEN_XMLNode_GetProperty(node, "tlvtype", "bertlv"), "BER")==0); /* get tag type */ if (size<2) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Too few bytes for BER-TLV"); return -1; } j=(unsigned char)(p[pos]); if (isBerTlv) { if ((j & 0x1f)==0x1f) { pos++; if (pos>=size) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Too few bytes"); return -1; } j=(unsigned char)(p[pos]); } else j&=0x1f; } DBG_DEBUG(AQBANKING_LOGDOMAIN, "Tag type %02x%s", j, isBerTlv?" (BER-TLV)":""); /* get length */ pos++; if (pos>=size) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Too few bytes"); return -1; } j=(unsigned char)(p[pos]); if (isBerTlv) { if (j & 0x80) { if (j==0x81) { pos++; if (pos>=size) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Too few bytes"); return -1; } j=(unsigned char)(p[pos]); } /* 0x81 */ else if (j==0x82) { if (pos+1>=size) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Too few bytes"); return -1; } pos++; j=((unsigned char)(p[pos]))<<8; pos++; j+=(unsigned char)(p[pos]); } /* 0x82 */ else { DBG_ERROR(AQBANKING_LOGDOMAIN, "Unexpected tag length modifier %02x", j); return -1; } } /* if tag length modifier */ } else { if (j==255) { if (pos+2>=size) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Too few bytes"); return -1; } pos++; j=((unsigned char)(p[pos]))<<8; pos++; j+=(unsigned char)(p[pos]); } } pos++; pos+=j; if (pos>size) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Too few bytes"); return -1; } DBG_DEBUG(AQBANKING_LOGDOMAIN, "Tag data length is %d (total %d)", j, pos); if (GWEN_Buffer_AppendBytes(vbuf, GWEN_Buffer_GetPosPointer(msgbuf), pos)) { DBG_INFO(AQBANKING_LOGDOMAIN, "here"); return -1; } if (GWEN_Buffer_IncrementPos(msgbuf, pos)) { DBG_INFO(AQBANKING_LOGDOMAIN, "here"); return -1; } return 0; } else { DBG_DEBUG(AQBANKING_LOGDOMAIN, "Type \"%s\" not supported by AB_MsgEngine", type); return 1; } } int AB_MsgEngine_TypeWrite(GWEN_MSGENGINE *e, GWEN_BUFFER *gbuf, GWEN_BUFFER *data, GWEN_XMLNODE *node) { AB_MSGENGINE *le; const char *type; assert(e); le=GWEN_INHERIT_GETDATA(GWEN_MSGENGINE, AB_MSGENGINE, e); assert(le); type=GWEN_XMLNode_GetProperty(node, "type", ""); if (strcasecmp(type, "byte")==0) { int value; int isBCD; DBG_DEBUG(AQBANKING_LOGDOMAIN, "Supporting type \"byte\""); isBCD=atoi(GWEN_XMLNode_GetProperty(node, "bcd", "0")); if (1!=sscanf(GWEN_Buffer_GetPosPointer(data), "%i", &value)) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Bad number"); return -1; } if (value>255 || value<0) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Number out of range (%d)", value); return -1; } if (isBCD) value=AB_MsgEngine__ToBCD(value); if (GWEN_Buffer_AppendByte(gbuf, (unsigned char)value)) { DBG_INFO(AQBANKING_LOGDOMAIN, "called from here"); return -1; } return 0; } /* byte */ else if (strcasecmp(type, "word")==0) { int bigEndian; int value; int isBCD; DBG_DEBUG(AQBANKING_LOGDOMAIN, "Supporting type \"word\""); isBCD=atoi(GWEN_XMLNode_GetProperty(node, "bcd", "0")); if (1!=sscanf(GWEN_Buffer_GetPosPointer(data), "%i", &value)) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Bad number"); return -1; } if (value>0xffff || value<0) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Number out of range (%d)", value); return -1; } if (isBCD) value=AB_MsgEngine__ToBCD(value); bigEndian=atoi(GWEN_XMLNode_GetProperty(node, "bigEndian", "1")); if (bigEndian) { if (GWEN_Buffer_AppendByte(gbuf, (unsigned char)((value>>8)&0xff))) { DBG_INFO(AQBANKING_LOGDOMAIN, "called from here"); return -1; } if (GWEN_Buffer_AppendByte(gbuf, (unsigned char)(value&0xff))) { DBG_INFO(AQBANKING_LOGDOMAIN, "called from here"); return -1; } } else { if (GWEN_Buffer_AppendByte(gbuf, (unsigned char)(value&0xff))) { DBG_INFO(AQBANKING_LOGDOMAIN, "called from here"); return -1; } if (GWEN_Buffer_AppendByte(gbuf, (unsigned char)((value>>8)&0xff))) { DBG_INFO(AQBANKING_LOGDOMAIN, "called from here"); return -1; } } return 0; } /* word */ else if (strcasecmp(type, "dword")==0) { int bigEndian; int isBCD; uint32_t value; DBG_DEBUG(AQBANKING_LOGDOMAIN, "Supporting type \"dword\""); isBCD=atoi(GWEN_XMLNode_GetProperty(node, "bcd", "0")); if (1!=sscanf(GWEN_Buffer_GetPosPointer(data), "%i", &value)) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Bad number"); return -1; } if (isBCD) value=AB_MsgEngine__ToBCD(value); bigEndian=atoi(GWEN_XMLNode_GetProperty(node, "bigEndian", "1")); if (bigEndian) { if (GWEN_Buffer_AppendByte(gbuf, (unsigned char)((value>>24)&0xff))) { DBG_INFO(AQBANKING_LOGDOMAIN, "called from here"); return -1; } if (GWEN_Buffer_AppendByte(gbuf, (unsigned char)((value>>16)&0xff))) { DBG_INFO(AQBANKING_LOGDOMAIN, "called from here"); return -1; } if (GWEN_Buffer_AppendByte(gbuf, (unsigned char)((value>>8)&0xff))) { DBG_INFO(AQBANKING_LOGDOMAIN, "called from here"); return -1; } if (GWEN_Buffer_AppendByte(gbuf, (unsigned char)(value&0xff))) { DBG_INFO(AQBANKING_LOGDOMAIN, "called from here"); return -1; } } else { if (GWEN_Buffer_AppendByte(gbuf, (unsigned char)(value&0xff))) { DBG_INFO(AQBANKING_LOGDOMAIN, "called from here"); return -1; } if (GWEN_Buffer_AppendByte(gbuf, (unsigned char)((value>>8)&0xff))) { DBG_INFO(AQBANKING_LOGDOMAIN, "called from here"); return -1; } if (GWEN_Buffer_AppendByte(gbuf, (unsigned char)((value>>16)&0xff))) { DBG_INFO(AQBANKING_LOGDOMAIN, "called from here"); return -1; } if (GWEN_Buffer_AppendByte(gbuf, (unsigned char)((value>>24)&0xff))) { DBG_INFO(AQBANKING_LOGDOMAIN, "called from here"); return -1; } } return 0; } /* word */ else if (strcasecmp(type, "bytes")==0) { if (GWEN_Buffer_GetUsedBytes(data)) { if (GWEN_Buffer_AppendBytes(gbuf, GWEN_Buffer_GetStart(data), GWEN_Buffer_GetUsedBytes(data))) { DBG_INFO(AQBANKING_LOGDOMAIN, "here"); return -1; } } return 0; } else if (strcasecmp(type, "bcd")==0) { if (GWEN_Text_FromBcdBuffer(GWEN_Buffer_GetStart(data), gbuf)) { DBG_INFO(AQBANKING_LOGDOMAIN, "here"); return -1; } return 0; } else if (strcasecmp(type, "tlv")==0) { int size; size=GWEN_Buffer_GetUsedBytes(data); if (size) { if (GWEN_Buffer_AppendBytes(gbuf, GWEN_Buffer_GetStart(data), size)) { DBG_INFO(AQBANKING_LOGDOMAIN, "here"); return -1; } if (GWEN_Buffer_IncrementPos(data, size)) { DBG_INFO(AQBANKING_LOGDOMAIN, "here"); return -1; } } return 0; } else if (strcasecmp(type, "ascii")==0) { int size; if (1!=sscanf(GWEN_XMLNode_GetProperty(node, "size", "-1"), "%i", &size)) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Bad number of bytes"); return -1; } if (size==-1) { size=GWEN_Buffer_GetUsedBytes(data); } else { if (size>GWEN_Buffer_GetUsedBytes(data)) { int lfiller; const char *lfs; /* check for left-filler, fill left if needed */ lfs=GWEN_XMLNode_GetProperty(node, "lfiller", 0); if (lfs) { if (1!=sscanf(lfs, "%i", &lfiller)) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Bad value for property lfiller"); return -1; } GWEN_Buffer_FillWithBytes(gbuf, (unsigned char)lfiller, size-GWEN_Buffer_GetUsedBytes(data)); } } } if (GWEN_Buffer_AppendBytes(gbuf, GWEN_Buffer_GetStart(data), GWEN_Buffer_GetUsedBytes(data))) { DBG_INFO(AQBANKING_LOGDOMAIN, "here"); return -1; } return 0; } else { DBG_DEBUG(AQBANKING_LOGDOMAIN, "Type \"%s\" not supported by AB_MsgEngine", type); return 1; } } GWEN_DB_NODE_TYPE AB_MsgEngine_TypeCheck(GWEN_MSGENGINE *e, const char *tname) { AB_MSGENGINE *le; assert(e); le=GWEN_INHERIT_GETDATA(GWEN_MSGENGINE, AB_MSGENGINE, e); assert(le); if (strcasecmp(tname, "byte")==0 || strcasecmp(tname, "word")==0 || strcasecmp(tname, "dword")==0) return GWEN_DB_NodeType_ValueInt; else if (strcasecmp(tname, "bytes")==0 || strcasecmp(tname, "tlv")==0) return GWEN_DB_NodeType_ValueBin; else if (strcasecmp(tname, "bcd")==0) return GWEN_DB_NodeType_ValueChar; else return GWEN_DB_NodeType_Unknown; } const char *AB_MsgEngine_GetCharValue(GWEN_MSGENGINE *e, const char *name, const char *defValue) { AB_MSGENGINE *le; assert(e); le=GWEN_INHERIT_GETDATA(GWEN_MSGENGINE, AB_MSGENGINE, e); assert(le); return defValue; } int AB_MsgEngine_GetIntValue(GWEN_MSGENGINE *e, const char *name, int defValue) { AB_MSGENGINE *le; assert(e); le=GWEN_INHERIT_GETDATA(GWEN_MSGENGINE, AB_MSGENGINE, e); assert(le); return defValue; } int AB_MsgEngine_BinTypeRead(GWEN_MSGENGINE *e, GWEN_XMLNODE *node, GWEN_DB_NODE *gr, GWEN_BUFFER *vbuf) { const char *typ; typ=GWEN_XMLNode_GetProperty(node, "type", ""); if (strcasecmp(typ, "tlv")==0) { int isBerTlv; const char *p; unsigned int tagType; unsigned int tagLength; //const char *tagData; unsigned int size; unsigned int pos; unsigned int j; GWEN_XMLNODE *tlvNode; GWEN_DB_NODE *ngr; const char *name; GWEN_Buffer_Rewind(vbuf); if (!GWEN_Buffer_GetBytesLeft(vbuf)) { DBG_DEBUG(AQBANKING_LOGDOMAIN, "Buffer empty"); return 0; } DBG_VERBOUS(AQBANKING_LOGDOMAIN, "Entering BinTypeRead with this:"); if (GWEN_Logger_GetLevel(0)>=GWEN_LoggerLevel_Verbous) GWEN_Buffer_Dump(vbuf, 2); p=GWEN_Buffer_GetStart(vbuf); pos=0; size=GWEN_Buffer_GetBytesLeft(vbuf); isBerTlv=(strcasecmp(GWEN_XMLNode_GetProperty(node, "tlvtype", "bertlv"), "BER")==0); /* get tag type */ if (size<2) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Too few bytes for BER-TLV"); return -1; } j=(unsigned char)(p[pos]); if (isBerTlv) { if ((j & 0x1f)==0x1f) { pos++; if (pos>=size) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Too few bytes"); return -1; } j=(unsigned char)(p[pos]); } else j&=0x1f; } DBG_DEBUG(AQBANKING_LOGDOMAIN, "Tag type %02x%s", j, isBerTlv?" (BER-TLV)":""); tagType=j; /* get length */ pos++; if (pos>=size) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Too few bytes"); return -1; } j=(unsigned char)(p[pos]); if (isBerTlv) { if (j & 0x80) { if (j==0x81) { pos++; if (pos>=size) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Too few bytes"); return -1; } j=(unsigned char)(p[pos]); } /* 0x81 */ else if (j==0x82) { if (pos+1>=size) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Too few bytes"); return -1; } pos++; j=((unsigned char)(p[pos]))<<8; pos++; j+=(unsigned char)(p[pos]); } /* 0x82 */ else { DBG_ERROR(AQBANKING_LOGDOMAIN, "Unexpected tag length modifier %02x", j); return -1; } } /* if tag length modifier */ } else { if (j==255) { if (pos+2>=size) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Too few bytes"); return -1; } pos++; j=((unsigned char)(p[pos]))<<8; pos++; j+=(unsigned char)(p[pos]); } } pos++; tagLength=j; //tagData=p+pos; GWEN_Buffer_SetPos(vbuf, pos); DBG_DEBUG(AQBANKING_LOGDOMAIN, "Tag: %02x (%d bytes)", tagType, tagLength); if (pos+j>size) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Too few bytes"); return -1; } /* parse TLV data */ tlvNode=GWEN_XMLNode_FindFirstTag(node, "tlv", 0, 0); while (tlvNode) { int ltagType; if (1!=sscanf(GWEN_XMLNode_GetProperty(tlvNode, "id", "-1"), "%i", <agType)) { DBG_WARN(AQBANKING_LOGDOMAIN, "Bad tag id in XML file"); } else { if (ltagType==tagType) { DBG_DEBUG(AQBANKING_LOGDOMAIN, "Tag %02x found in XML file", ltagType); name=GWEN_XMLNode_GetProperty(node, "name", 0); ngr=gr; if (name) { if (*name) { ngr=GWEN_DB_GetGroup(gr, GWEN_DB_FLAGS_DEFAULT, name); assert(ngr); } } name=GWEN_XMLNode_GetProperty(tlvNode, "name", 0); if (name) { if (*name) { ngr=GWEN_DB_GetGroup(ngr, GWEN_DB_FLAGS_DEFAULT | GWEN_PATH_FLAGS_CREATE_GROUP, name); assert(ngr); } } if (tagLength) { if (GWEN_MsgEngine_ParseMessage(e, tlvNode, vbuf, ngr, GWEN_MSGENGINE_READ_FLAGS_DEFAULT)) { DBG_INFO(AQBANKING_LOGDOMAIN, "here"); return -1; } } return 0; } /* if tag id matches */ } /* if id is ok */ tlvNode=GWEN_XMLNode_FindNextTag(tlvNode, "tlv", 0, 0); } /* while */ DBG_INFO(AQBANKING_LOGDOMAIN, "Tag \"%02x\" not found", tagType); name=GWEN_XMLNode_GetProperty(node, "name", 0); ngr=gr; if (name) { if (*name) { ngr=GWEN_DB_GetGroup(gr, GWEN_DB_FLAGS_DEFAULT, name); assert(ngr); } } ngr=GWEN_DB_GetGroup(ngr, GWEN_PATH_FLAGS_CREATE_GROUP, "UnknownTag"); assert(ngr); GWEN_DB_SetIntValue(ngr, GWEN_DB_FLAGS_OVERWRITE_VARS, "tag", tagType); GWEN_DB_SetBinValue(ngr, GWEN_DB_FLAGS_OVERWRITE_VARS, "data", GWEN_Buffer_GetPosPointer(vbuf), GWEN_Buffer_GetBytesLeft(vbuf)); return 0; } else { return 1; } } int AB_MsgEngine_BinTypeWrite(GWEN_MSGENGINE *e, GWEN_XMLNODE *node, GWEN_DB_NODE *gr, GWEN_BUFFER *dbuf) { return 1; } aqbanking-6.6.1/src/libs/aqbanking/backendsupport/provider.h0000664000175000017500000000531514214726437021122 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ /** @file aqbanking/provider.h * @short This file is used by AqBanking and provider backends. */ #ifndef AQBANKING_PROVIDER_H #define AQBANKING_PROVIDER_H #include /* for AQBANKING_API */ #include #include #include #include #define AB_PROVIDER_FLAGS_COMPLETE_DAY_REPORTS 0x00000001 #ifdef __cplusplus extern "C" { #endif typedef struct AB_PROVIDER AB_PROVIDER; GWEN_INHERIT_FUNCTION_DEFS(AB_PROVIDER) GWEN_LIST2_FUNCTION_DEFS(AB_PROVIDER, AB_Provider) typedef struct AB_PROVIDER_DESCRIPTION AB_PROVIDER_DESCRIPTION; GWEN_INHERIT_FUNCTION_DEFS(AB_PROVIDER_DESCRIPTION) GWEN_LIST_FUNCTION_DEFS(AB_PROVIDER_DESCRIPTION, AB_ProviderDescription) GWEN_LIST2_FUNCTION_DEFS(AB_PROVIDER_DESCRIPTION, AB_ProviderDescription) #ifdef __cplusplus } #endif #include #ifdef __cplusplus extern "C" { #endif /** @addtogroup G_AB_PROVIDER * * @brief This group represents backends. (Don't use in applications) * * (Provider is simply another word for backend.) * * See https://www.aquamaniac.de/rdm/projects/aqbanking/wiki/Develop_backend */ /*@{*/ /** * Returns the name of the backend (e.g. "aqhbci"). */ const char *AB_Provider_GetName(const AB_PROVIDER *pro); /** * Returns the escaped name of the backend. This is needed when using the * name of the backend to form a file path. */ const char *AB_Provider_GetEscapedName(const AB_PROVIDER *pro); /** * Returns the Banking object that this Provider belongs to. */ AB_BANKING *AB_Provider_GetBanking(const AB_PROVIDER *pro); uint32_t AB_Provider_GetFlags(const AB_PROVIDER *pro); /** * This copies the name of the folder for AqBanking's backend data into * the given GWEN_Buffer. This folder is reserved for this backend. * Please note that this folder does not necessarily exist, but the backend * is free to create it. * @return 0 if ok, error code otherwise (see @ref AB_ERROR) * @param pro pointer to the provider object * @param buf buffer to append the path name to */ int AB_Provider_GetUserDataDir(const AB_PROVIDER *pro, GWEN_BUFFER *buf); /*@}*/ /* defgroup */ #ifdef __cplusplus } #endif #endif /* AQBANKING_PROVIDER_H */ aqbanking-6.6.1/src/libs/aqbanking/backendsupport/imexporter.c0000664000175000017500000002561414043610744021456 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "imexporter_p.h" #include #include #include #include #include #include #include GWEN_INHERIT_FUNCTIONS(AB_IMEXPORTER) GWEN_LIST_FUNCTIONS(AB_IMEXPORTER, AB_ImExporter) GWEN_INHERIT(GWEN_PLUGIN, AB_PLUGIN_IMEXPORTER) AB_IMEXPORTER *AB_ImExporter_new(AB_BANKING *ab, const char *name) { AB_IMEXPORTER *ie; assert(ab); assert(name); GWEN_NEW_OBJECT(AB_IMEXPORTER, ie); GWEN_LIST_INIT(AB_IMEXPORTER, ie); GWEN_INHERIT_INIT(AB_IMEXPORTER, ie); ie->banking=ab; ie->name=strdup(name); return ie; } void AB_ImExporter_free(AB_IMEXPORTER *ie) { if (ie) { DBG_INFO(AQBANKING_LOGDOMAIN, "Destroying AB_IMEXPORTER"); GWEN_INHERIT_FINI(AB_IMEXPORTER, ie); if (ie->libLoader) { GWEN_LibLoader_CloseLibrary(ie->libLoader); GWEN_LibLoader_free(ie->libLoader); } free(ie->name); GWEN_LIST_FINI(AB_IMEXPORTER, ie); GWEN_FREE_OBJECT(ie); } } uint32_t AB_ImExporter_GetFlags(const AB_IMEXPORTER *ie) { assert(ie); return ie->flags; } void AB_ImExporter_SetFlags(AB_IMEXPORTER *ie, uint32_t flags) { assert(ie); ie->flags=flags; } void AB_ImExporter_AddFlags(AB_IMEXPORTER *ie, uint32_t flags) { assert(ie); ie->flags|=flags; } void AB_ImExporter_SubFlags(AB_IMEXPORTER *ie, uint32_t flags) { assert(ie); ie->flags&=~flags; } int AB_ImExporter_Import(AB_IMEXPORTER *ie, AB_IMEXPORTER_CONTEXT *ctx, GWEN_SYNCIO *sio, GWEN_DB_NODE *params) { assert(ie); assert(ctx); assert(sio); assert(params); if (ie->importFn) { if (GWEN_SyncIo_GetStatus(sio)!=GWEN_SyncIo_Status_Connected) { DBG_ERROR(AQBANKING_LOGDOMAIN, "GWEN_SYNCIO %s not connected (%d); did you forget to call GWEN_SyncIo_Connect()?", GWEN_SyncIo_GetTypeName(sio), GWEN_SyncIo_GetStatus(sio)); return GWEN_ERROR_NOT_OPEN; } return ie->importFn(ie, ctx, sio, params); } else return GWEN_ERROR_NOT_SUPPORTED; } int AB_ImExporter_Export(AB_IMEXPORTER *ie, AB_IMEXPORTER_CONTEXT *ctx, GWEN_SYNCIO *sio, GWEN_DB_NODE *params) { assert(ie); assert(ctx); assert(sio); assert(params); if (ie->exportFn) return ie->exportFn(ie, ctx, sio, params); else return GWEN_ERROR_NOT_SUPPORTED; } int AB_ImExporter_CheckFile(AB_IMEXPORTER *ie, const char *fname) { assert(ie); assert(fname); if (ie->checkFileFn) return ie->checkFileFn(ie, fname); else return GWEN_ERROR_NOT_SUPPORTED; } int AB_ImExporter_GetEditProfileDialog(AB_IMEXPORTER *ie, GWEN_DB_NODE *dbProfile, const char *testFileName, GWEN_DIALOG **pDlg) { assert(ie); assert(dbProfile); if (ie->getEditProfileDialogFn) return ie->getEditProfileDialogFn(ie, dbProfile, testFileName, pDlg); else return GWEN_ERROR_NOT_SUPPORTED; } void AB_ImExporter_SetImportFn(AB_IMEXPORTER *ie, AB_IMEXPORTER_IMPORT_FN f) { assert(ie); ie->importFn=f; } void AB_ImExporter_SetExportFn(AB_IMEXPORTER *ie, AB_IMEXPORTER_EXPORT_FN f) { assert(ie); ie->exportFn=f; } void AB_ImExporter_SetCheckFileFn(AB_IMEXPORTER *ie, AB_IMEXPORTER_CHECKFILE_FN f) { assert(ie); ie->checkFileFn=f; } void AB_ImExporter_SetGetEditProfileDialogFn(AB_IMEXPORTER *ie, AB_IMEXPORTER_GET_EDITPROFILE_DIALOG_FN f) { assert(ie); ie->getEditProfileDialogFn=f; } AB_BANKING *AB_ImExporter_GetBanking(const AB_IMEXPORTER *ie) { assert(ie); return ie->banking; } const char *AB_ImExporter_GetName(const AB_IMEXPORTER *ie) { assert(ie); return ie->name; } void AB_ImExporter_SetLibLoader(AB_IMEXPORTER *ie, GWEN_LIBLOADER *ll) { assert(ie); ie->libLoader=ll; } void AB_ImExporter_Utf8ToDta(const char *p, int size, GWEN_BUFFER *buf) { while (*p) { unsigned int c; if (!size) break; c=(unsigned char)(*(p++)); if (size!=-1) size--; switch (c & 0xc0) { case 0xc0: if (!size) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Incomplete UTF-8 sequence"); c=' '; break; } c=(unsigned char)(*(p++)); if (size!=-1) size--; if ((c & 0xc0) != 0x80) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Invalid UTF-8 sequence"); c=' '; break; } if (size && (*p & 0xc0) == 0x80) /* a sequence of 3 bytes and more cannot be translated to DTA */ goto nextUtf8; switch (c) { case 0x84: case 0xa4: c=0x5b; break; case 0x96: case 0xb6: c=0x5c; break; case 0x9c: case 0xbc: c=0x5d; break; case 0x9f: c=0x7e; break; default: c=' '; break; } /* switch */ break; case 0x80: DBG_ERROR(AQBANKING_LOGDOMAIN, "Invalid UTF-8 sequence"); nextUtf8: c=' '; while (size && (*p & 0xc0) == 0x80) { p++; if (size!=-1) size--; } break; default: c=toupper(c); if (!(isdigit(c) || (c>='A' && c<='Z') || (strchr(" .,&-+*%/$", c)))) c=' '; } /* switch */ GWEN_Buffer_AppendByte(buf, c); } /* while */ } void AB_ImExporter_DtaToUtf8(const char *p, int size, GWEN_BUFFER *buf) { while (*p) { unsigned int c; if (!size) break; c=(unsigned char)(*(p++)); switch (c) { case 0x5b: /* AE */ GWEN_Buffer_AppendByte(buf, 0xc3); GWEN_Buffer_AppendByte(buf, 0x84); break; case 0x5c: /* OE */ GWEN_Buffer_AppendByte(buf, 0xc3); GWEN_Buffer_AppendByte(buf, 0x96); break; case 0x5d: /* UE */ GWEN_Buffer_AppendByte(buf, 0xc3); GWEN_Buffer_AppendByte(buf, 0x9c); break; case 0x7e: /* sharp s */ GWEN_Buffer_AppendByte(buf, 0xc3); GWEN_Buffer_AppendByte(buf, 0x9f); break; default: if (c & 0x80) { /* produce sane UTF-8 even if something went wrong */ DBG_ERROR(AQBANKING_LOGDOMAIN, "Invalid character in DTA string"); c=' '; } GWEN_Buffer_AppendByte(buf, c); } if (size!=-1) size--; } /* while */ } GWEN_TIME *AB_ImExporter_DateFromString(const char *p, const char *tmpl, int inUtc) { GWEN_TIME *ti; if (strchr(tmpl, 'h')==0) { GWEN_BUFFER *dbuf; GWEN_BUFFER *tbuf; dbuf=GWEN_Buffer_new(0, 32, 0, 1); GWEN_Buffer_AppendString(dbuf, p); GWEN_Buffer_AppendString(dbuf, "-12:00"); tbuf=GWEN_Buffer_new(0, 32, 0, 1); GWEN_Buffer_AppendString(tbuf, tmpl); GWEN_Buffer_AppendString(tbuf, "-hh:mm"); ti=GWEN_Time_fromUtcString(GWEN_Buffer_GetStart(dbuf), GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); GWEN_Buffer_free(dbuf); } else { if (inUtc) ti=GWEN_Time_fromUtcString(p, tmpl); else ti=GWEN_Time_fromString(p, tmpl); } return ti; } void AB_ImExporter_Iso8859_1ToUtf8(const char *p, int size, GWEN_BUFFER *buf) { while (*p) { unsigned int c; if (!size) break; c=(unsigned char)(*(p++)); if (c<32 || c==127) c=32; if (c & 0x80) { GWEN_Buffer_AppendByte(buf, 0xc0 | c>>6); c &= ~0x40; } GWEN_Buffer_AppendByte(buf, c); if (size!=-1) size--; } /* while */ } int AB_ImExporter__Transform_Var(GWEN_DB_NODE *db, int level) { GWEN_DB_NODE *dbC; dbC=GWEN_DB_GetFirstValue(db); while (dbC) { if (GWEN_DB_GetValueType(dbC)==GWEN_DB_NodeType_ValueChar) { const char *s; unsigned int l; s=GWEN_DB_GetCharValueFromNode(dbC); assert(s); l=strlen(s); if (l) { GWEN_BUFFER *vbuf; vbuf=GWEN_Buffer_new(0, 1+(l*15/10), 0, 1); AB_ImExporter_Iso8859_1ToUtf8(s, l, vbuf); GWEN_DB_SetCharValueInNode(dbC, GWEN_Buffer_GetStart(vbuf)); GWEN_Buffer_free(vbuf); } } dbC=GWEN_DB_GetNextValue(dbC); } return 0; } int AB_ImExporter__Transform_Group(GWEN_DB_NODE *db, int level) { GWEN_DB_NODE *dbC; int rv; if (level>AH_IMEXPORTER_TRANSFORM_MAXLEVEL) { DBG_ERROR(AQBANKING_LOGDOMAIN, "DB too deep (%d)", level); return -1; } dbC=GWEN_DB_GetFirstGroup(db); while (dbC) { rv=AB_ImExporter__Transform_Group(dbC, level+1); if (rv) return rv; dbC=GWEN_DB_GetNextGroup(dbC); } dbC=GWEN_DB_GetFirstVar(db); while (dbC) { rv=AB_ImExporter__Transform_Var(dbC, level+1); if (rv) return rv; dbC=GWEN_DB_GetNextVar(dbC); } return 0; } int AB_ImExporter_DbFromIso8859_1ToUtf8(GWEN_DB_NODE *db) { return AB_ImExporter__Transform_Group(db, 0); } GWEN_PLUGIN *AB_Plugin_ImExporter_new(GWEN_PLUGIN_MANAGER *pm, const char *name, const char *fileName) { GWEN_PLUGIN *pl; AB_PLUGIN_IMEXPORTER *xpl; pl=GWEN_Plugin_new(pm, name, fileName); GWEN_NEW_OBJECT(AB_PLUGIN_IMEXPORTER, xpl); GWEN_INHERIT_SETDATA(GWEN_PLUGIN, AB_PLUGIN_IMEXPORTER, pl, xpl, AB_Plugin_ImExporter_FreeData); return pl; } void GWENHYWFAR_CB AB_Plugin_ImExporter_FreeData(void *bp, void *p) { AB_PLUGIN_IMEXPORTER *xpl; xpl=(AB_PLUGIN_IMEXPORTER *)p; GWEN_FREE_OBJECT(xpl); } AB_IMEXPORTER *AB_Plugin_ImExporter_Factory(GWEN_PLUGIN *pl, AB_BANKING *ab) { AB_PLUGIN_IMEXPORTER *xpl; assert(pl); xpl=GWEN_INHERIT_GETDATA(GWEN_PLUGIN, AB_PLUGIN_IMEXPORTER, pl); assert(xpl); assert(xpl->pluginFactoryFn); return xpl->pluginFactoryFn(pl, ab); } void AB_Plugin_ImExporter_SetFactoryFn(GWEN_PLUGIN *pl, AB_PLUGIN_IMEXPORTER_FACTORY_FN fn) { AB_PLUGIN_IMEXPORTER *xpl; assert(pl); xpl=GWEN_INHERIT_GETDATA(GWEN_PLUGIN, AB_PLUGIN_IMEXPORTER, pl); assert(xpl); xpl->pluginFactoryFn=fn; } aqbanking-6.6.1/src/libs/aqbanking/backendsupport/user.c0000664000175000017500000004001215037736054020232 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "user.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "./user_p.h" #include #include /* code headers */ /* macro functions */ GWEN_LIST_FUNCTIONS(AB_USER, AB_User) GWEN_LIST2_FUNCTIONS(AB_USER, AB_User) GWEN_INHERIT_FUNCTIONS(AB_USER) AB_USER *AB_User_new(void) { AB_USER *p_struct; GWEN_NEW_OBJECT(AB_USER, p_struct) p_struct->_refCount=1; GWEN_INHERIT_INIT(AB_USER, p_struct) GWEN_LIST_INIT(AB_USER, p_struct) /* members */ p_struct->uniqueId=0; p_struct->backendName=NULL; p_struct->userName=NULL; p_struct->userId=NULL; p_struct->customerId=NULL; p_struct->country=NULL; p_struct->bankCode=NULL; p_struct->provider=NULL; p_struct->certDb=NULL; p_struct->lastSessionId=0; /* virtual functions */ p_struct->readFromDbFn=AB_User__ReadFromDb; p_struct->writeToDbFn=AB_User__WriteToDb; return p_struct; } void AB_User_free(AB_USER *p_struct) { if (p_struct) { assert(p_struct->_refCount); if (p_struct->_refCount==1) { GWEN_INHERIT_FINI(AB_USER, p_struct) GWEN_LIST_FINI(AB_USER, p_struct) /* members */ free(p_struct->backendName); p_struct->backendName=NULL; free(p_struct->userName); p_struct->userName=NULL; free(p_struct->userId); p_struct->userId=NULL; free(p_struct->customerId); p_struct->customerId=NULL; free(p_struct->country); p_struct->country=NULL; free(p_struct->bankCode); p_struct->bankCode=NULL; GWEN_DB_Group_free(p_struct->certDb); p_struct->certDb=NULL; p_struct->_refCount=0; GWEN_FREE_OBJECT(p_struct); } else p_struct->_refCount--; } } void AB_User_Attach(AB_USER *p_struct) { assert(p_struct); assert(p_struct->_refCount); p_struct->_refCount++; } uint32_t AB_User_GetUniqueId(const AB_USER *p_struct){ assert(p_struct); return p_struct->uniqueId; } const char *AB_User_GetBackendName(const AB_USER *p_struct){ assert(p_struct); return p_struct->backendName; } const char *AB_User_GetUserName(const AB_USER *p_struct){ assert(p_struct); return p_struct->userName; } const char *AB_User_GetUserId(const AB_USER *p_struct){ assert(p_struct); return p_struct->userId; } const char *AB_User_GetCustomerId(const AB_USER *p_struct){ assert(p_struct); return p_struct->customerId; } const char *AB_User_GetCountry(const AB_USER *p_struct){ assert(p_struct); return p_struct->country; } const char *AB_User_GetBankCode(const AB_USER *p_struct){ assert(p_struct); return p_struct->bankCode; } AB_PROVIDER *AB_User_GetProvider(const AB_USER *p_struct){ assert(p_struct); return p_struct->provider; } GWEN_DB_NODE *AB_User_GetCertDb(const AB_USER *p_struct){ assert(p_struct); return p_struct->certDb; } uint32_t AB_User_GetLastSessionId(const AB_USER *p_struct){ assert(p_struct); return p_struct->lastSessionId; } void AB_User_SetUniqueId(AB_USER *p_struct, uint32_t p_src){ assert(p_struct); p_struct->uniqueId=p_src; } void AB_User_SetBackendName(AB_USER *p_struct, const char *p_src){ assert(p_struct); if (p_struct->backendName) { free(p_struct->backendName); p_struct->backendName=NULL; p_struct->backendName=NULL; } if (p_src) { p_struct->backendName=strdup(p_src); } else { p_struct->backendName=NULL; } } void AB_User_SetUserName(AB_USER *p_struct, const char *p_src){ assert(p_struct); if (p_struct->userName) { free(p_struct->userName); p_struct->userName=NULL; p_struct->userName=NULL; } if (p_src) { p_struct->userName=strdup(p_src); } else { p_struct->userName=NULL; } } void AB_User_SetUserId(AB_USER *p_struct, const char *p_src){ assert(p_struct); if (p_struct->userId) { free(p_struct->userId); p_struct->userId=NULL; p_struct->userId=NULL; } if (p_src) { p_struct->userId=strdup(p_src); } else { p_struct->userId=NULL; } } void AB_User_SetCustomerId(AB_USER *p_struct, const char *p_src){ assert(p_struct); if (p_struct->customerId) { free(p_struct->customerId); p_struct->customerId=NULL; p_struct->customerId=NULL; } if (p_src) { p_struct->customerId=strdup(p_src); } else { p_struct->customerId=NULL; } } void AB_User_SetCountry(AB_USER *p_struct, const char *p_src){ assert(p_struct); if (p_struct->country) { free(p_struct->country); p_struct->country=NULL; p_struct->country=NULL; } if (p_src) { p_struct->country=strdup(p_src); } else { p_struct->country=NULL; } } void AB_User_SetBankCode(AB_USER *p_struct, const char *p_src){ assert(p_struct); if (p_struct->bankCode) { free(p_struct->bankCode); p_struct->bankCode=NULL; p_struct->bankCode=NULL; } if (p_src) { p_struct->bankCode=strdup(p_src); } else { p_struct->bankCode=NULL; } } void AB_User_SetProvider(AB_USER *p_struct, AB_PROVIDER *p_src){ assert(p_struct); p_struct->provider=p_src; } void AB_User_SetCertDb(AB_USER *p_struct, GWEN_DB_NODE *p_src){ assert(p_struct); if (p_struct->certDb) { GWEN_DB_Group_free(p_struct->certDb); p_struct->certDb=NULL; p_struct->certDb=NULL; } p_struct->certDb=p_src; } void AB_User_SetLastSessionId(AB_USER *p_struct, uint32_t p_src){ assert(p_struct); p_struct->lastSessionId=p_src; } /* code for virtual functions */ int AB_User_ReadFromDb(AB_USER *p_struct, GWEN_DB_NODE* dbData) { assert(p_struct); if (p_struct->readFromDbFn) return p_struct->readFromDbFn(p_struct, dbData); else return GWEN_ERROR_NOT_IMPLEMENTED; } int AB_User_WriteToDb(const AB_USER *p_struct, GWEN_DB_NODE* dbData) { assert(p_struct); if (p_struct->writeToDbFn) return p_struct->writeToDbFn(p_struct, dbData); else return GWEN_ERROR_NOT_IMPLEMENTED; } /* setters for virtual functions */ AB_USER_READFROMDB_FN AB_User_SetReadFromDbFn(AB_USER *p_struct, AB_USER_READFROMDB_FN fn){ AB_USER_READFROMDB_FN oldFn; assert(p_struct); oldFn=p_struct->readFromDbFn; p_struct->readFromDbFn=fn; return oldFn; } AB_USER_WRITETODB_FN AB_User_SetWriteToDbFn(AB_USER *p_struct, AB_USER_WRITETODB_FN fn){ AB_USER_WRITETODB_FN oldFn; assert(p_struct); oldFn=p_struct->writeToDbFn; p_struct->writeToDbFn=fn; return oldFn; } /* getters for virtual functions */ AB_USER_READFROMDB_FN AB_User_GetReadFromDbFn(const AB_USER *p_struct){ assert(p_struct); return p_struct->readFromDbFn; } AB_USER_WRITETODB_FN AB_User_GetWriteToDbFn(const AB_USER *p_struct){ assert(p_struct); return p_struct->writeToDbFn; } void AB_User_ReadDb(AB_USER *p_struct, GWEN_DB_NODE *p_db){ assert(p_struct); /* member "uniqueId" */ p_struct->uniqueId=GWEN_DB_GetIntValue(p_db, "uniqueId", 0, 0); /* member "backendName" */ if (p_struct->backendName) { free(p_struct->backendName); p_struct->backendName=NULL; p_struct->backendName=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "backendName", 0, NULL); if (s) p_struct->backendName=strdup(s); } /* member "userName" */ if (p_struct->userName) { free(p_struct->userName); p_struct->userName=NULL; p_struct->userName=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "userName", 0, NULL); if (s) p_struct->userName=strdup(s); } /* member "userId" */ if (p_struct->userId) { free(p_struct->userId); p_struct->userId=NULL; p_struct->userId=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "userId", 0, NULL); if (s) p_struct->userId=strdup(s); } /* member "customerId" */ if (p_struct->customerId) { free(p_struct->customerId); p_struct->customerId=NULL; p_struct->customerId=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "customerId", 0, NULL); if (s) p_struct->customerId=strdup(s); } /* member "country" */ if (p_struct->country) { free(p_struct->country); p_struct->country=NULL; p_struct->country=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "country", 0, NULL); if (s) p_struct->country=strdup(s); } /* member "bankCode" */ if (p_struct->bankCode) { free(p_struct->bankCode); p_struct->bankCode=NULL; p_struct->bankCode=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "bankCode", 0, NULL); if (s) p_struct->bankCode=strdup(s); } /* member "provider" */ /* member "provider" is volatile, just presetting it */ p_struct->provider=NULL; /* member "certDb" */ if (p_struct->certDb) { GWEN_DB_Group_free(p_struct->certDb); p_struct->certDb=NULL; p_struct->certDb=NULL; } { GWEN_DB_NODE *dbSrc; dbSrc=GWEN_DB_GetGroup(p_db, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "certDb"); if (dbSrc) { p_struct->certDb=GWEN_DB_Group_dup(dbSrc); } else p_struct->certDb=NULL; } /* member "lastSessionId" */ p_struct->lastSessionId=GWEN_DB_GetIntValue(p_db, "lastSessionId", 0, 0); } int AB_User_WriteDb(const AB_USER *p_struct, GWEN_DB_NODE *p_db) { int p_rv; assert(p_struct); /* member "uniqueId" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "uniqueId", p_struct->uniqueId); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "backendName" */ if (p_struct->backendName) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "backendName", p_struct->backendName); else { GWEN_DB_DeleteVar(p_db, "backendName"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "userName" */ if (p_struct->userName) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "userName", p_struct->userName); else { GWEN_DB_DeleteVar(p_db, "userName"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "userId" */ if (p_struct->userId) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "userId", p_struct->userId); else { GWEN_DB_DeleteVar(p_db, "userId"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "customerId" */ if (p_struct->customerId) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "customerId", p_struct->customerId); else { GWEN_DB_DeleteVar(p_db, "customerId"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "country" */ if (p_struct->country) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "country", p_struct->country); else { GWEN_DB_DeleteVar(p_db, "country"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "bankCode" */ if (p_struct->bankCode) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "bankCode", p_struct->bankCode); else { GWEN_DB_DeleteVar(p_db, "bankCode"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "provider" is volatile, not writing to db */ /* member "certDb" */ if (p_struct->certDb){ GWEN_DB_NODE *dbCopy; dbCopy=GWEN_DB_GetGroup(p_db, GWEN_DB_FLAGS_DEFAULT, "certDb"); assert(dbCopy); p_rv=GWEN_DB_AddGroupChildren(dbCopy, p_struct->certDb); } else { GWEN_DB_DeleteGroup(p_db, "certDb"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "lastSessionId" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "lastSessionId", p_struct->lastSessionId); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } return 0; } AB_USER *AB_User_fromDb(GWEN_DB_NODE *p_db) { AB_USER *p_struct; p_struct=AB_User_new(); AB_User_ReadDb(p_struct, p_db); return p_struct; } int AB_User_toDb(const AB_USER *p_struct, GWEN_DB_NODE *p_db) { return AB_User_WriteDb(p_struct, p_db); } void AB_User_ReadXml(AB_USER *p_struct, GWEN_XMLNODE *p_db){ assert(p_struct); /* member "uniqueId" */ p_struct->uniqueId=GWEN_XMLNode_GetIntValue(p_db, "uniqueId", 0); /* member "backendName" */ if (p_struct->backendName) { free(p_struct->backendName); p_struct->backendName=NULL; p_struct->backendName=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "backendName", NULL); if (s) p_struct->backendName=strdup(s); } /* member "userName" */ if (p_struct->userName) { free(p_struct->userName); p_struct->userName=NULL; p_struct->userName=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "userName", NULL); if (s) p_struct->userName=strdup(s); } /* member "userId" */ if (p_struct->userId) { free(p_struct->userId); p_struct->userId=NULL; p_struct->userId=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "userId", NULL); if (s) p_struct->userId=strdup(s); } /* member "customerId" */ if (p_struct->customerId) { free(p_struct->customerId); p_struct->customerId=NULL; p_struct->customerId=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "customerId", NULL); if (s) p_struct->customerId=strdup(s); } /* member "country" */ if (p_struct->country) { free(p_struct->country); p_struct->country=NULL; p_struct->country=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "country", NULL); if (s) p_struct->country=strdup(s); } /* member "bankCode" */ if (p_struct->bankCode) { free(p_struct->bankCode); p_struct->bankCode=NULL; p_struct->bankCode=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "bankCode", NULL); if (s) p_struct->bankCode=strdup(s); } /* member "provider" */ /* member "provider" is volatile, just presetting it */ p_struct->provider=NULL; /* member "certDb" */ if (p_struct->certDb) { GWEN_DB_Group_free(p_struct->certDb); p_struct->certDb=NULL; p_struct->certDb=NULL; } /* member "lastSessionId" */ p_struct->lastSessionId=GWEN_XMLNode_GetIntValue(p_db, "lastSessionId", 0); } void AB_User_WriteXml(const AB_USER *p_struct, GWEN_XMLNODE *p_db) { assert(p_struct); /* member "uniqueId" */ GWEN_XMLNode_SetIntValue(p_db, "uniqueId", p_struct->uniqueId); /* member "backendName" */ GWEN_XMLNode_SetCharValue(p_db, "backendName", p_struct->backendName); /* member "userName" */ GWEN_XMLNode_SetCharValue(p_db, "userName", p_struct->userName); /* member "userId" */ GWEN_XMLNode_SetCharValue(p_db, "userId", p_struct->userId); /* member "customerId" */ GWEN_XMLNode_SetCharValue(p_db, "customerId", p_struct->customerId); /* member "country" */ GWEN_XMLNode_SetCharValue(p_db, "country", p_struct->country); /* member "bankCode" */ GWEN_XMLNode_SetCharValue(p_db, "bankCode", p_struct->bankCode); /* member "provider" is volatile, not writing to xml */ /* member "certDb" */ /* member "lastSessionId" */ GWEN_XMLNode_SetIntValue(p_db, "lastSessionId", p_struct->lastSessionId); } void AB_User_toXml(const AB_USER *p_struct, GWEN_XMLNODE *p_db) { AB_User_WriteXml(p_struct, p_db); } AB_USER *AB_User_fromXml(GWEN_XMLNODE *p_db) { AB_USER *p_struct; p_struct=AB_User_new(); AB_User_ReadXml(p_struct, p_db); return p_struct; } AB_USER *AB_User_List_GetByUniqueId(const AB_USER_LIST *p_list, uint32_t p_cmp){ AB_USER *p_struct; assert(p_list); p_struct = AB_User_List_First(p_list); while(p_struct) { int p_rv; if (p_struct->uniqueId==p_cmp) p_rv=0; else if (p_cmpuniqueId) p_rv=-1; else p_rv=1; if (p_rv == 0) return p_struct; p_struct = AB_User_List_Next(p_struct); } return NULL; } AB_USER *AB_User_List_GetByLastSessionId(const AB_USER_LIST *p_list, uint32_t p_cmp){ AB_USER *p_struct; assert(p_list); p_struct = AB_User_List_First(p_list); while(p_struct) { int p_rv; if (p_struct->lastSessionId==p_cmp) p_rv=0; else if (p_cmplastSessionId) p_rv=-1; else p_rv=1; if (p_rv == 0) return p_struct; p_struct = AB_User_List_Next(p_struct); } return NULL; } int AB_User__ReadFromDb(AB_USER *a, GWEN_DB_NODE *db) { assert(a); AB_User_ReadDb(a, db); return 0; } int AB_User__WriteToDb(const AB_USER *a, GWEN_DB_NODE *db) { assert(a); AB_User_WriteDb(a, db); return 0; } /* code headers */ aqbanking-6.6.1/src/libs/aqbanking/backendsupport/ab_userqueue.tm20000664000175000017500000000027315037736054022226 00000000000000 AB_USERQUEUE AB_UserQueue aqbanking-6.6.1/src/libs/aqbanking/backendsupport/bankinfoplugin.h0000664000175000017500000000121314043610744022260 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQBANKING_BANKINFOPLUGIN_H #define AQBANKING_BANKINFOPLUGIN_H #include #endif /* AQBANKING_BANKINFOPLUGIN_H */ aqbanking-6.6.1/src/libs/aqbanking/backendsupport/siotlsext.c0000664000175000017500000002412114043610744021306 00000000000000/*************************************************************************** begin : Fri Apr 21 2017 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "siotlsext_p.h" #include #include #include /* ------------------------------------------------------------------------------------------------ * forward declarations * ------------------------------------------------------------------------------------------------ */ /** @return 0 if undecided, 1 if acceptable, negative on error */ static int _checkCert(GWEN_SYNCIO *sio, const GWEN_SSLCERTDESCR *cert); static int _checkStoredUserCerts(AB_USER *u, const GWEN_SSLCERTDESCR *cert); static int _checkAgainstStoredCert(const GWEN_SSLCERTDESCR *cert, GWEN_SSLCERTDESCR *storedCert, GWEN_DB_NODE *dbC); static int _checkStoredUserResponse(GWEN_DB_NODE *dbC, const char *sFingerprint); static int _checkAutoDecision(const GWEN_SSLCERTDESCR *cert); static int _askUserAboutCert(GWEN_SYNCIO *sio, const GWEN_SSLCERTDESCR *cert); static void _storeAccessDate(GWEN_DB_NODE *dbCert); static void _storeCertAndUserResponseInUser(AB_USER *u, const GWEN_SSLCERTDESCR *cert, int response); /* ------------------------------------------------------------------------------------------------ * implementations * ------------------------------------------------------------------------------------------------ */ GWEN_INHERIT(GWEN_SYNCIO, AB_SIOTLS_EXT) void AB_SioTlsExt_Extend(GWEN_SYNCIO *sio, AB_USER *u) { AB_SIOTLS_EXT *xsio; GWEN_NEW_OBJECT(AB_SIOTLS_EXT, xsio); GWEN_INHERIT_SETDATA(GWEN_SYNCIO, AB_SIOTLS_EXT, sio, xsio, AB_SioTlsExt_FreeData); /* set data */ xsio->user=u; /* set callbacks */ xsio->oldCheckCertFn=GWEN_SyncIo_Tls_SetCheckCertFn(sio, AB_SioTlsExt_CheckCert); } void AB_SioTlsExt_Unextend(GWEN_SYNCIO *sio) { AB_SIOTLS_EXT *xsio; assert(sio); xsio=GWEN_INHERIT_GETDATA(GWEN_SYNCIO, AB_SIOTLS_EXT, sio); assert(xsio); /* reset callbacks which point into AB_SioTlsExt */ GWEN_SyncIo_Tls_SetCheckCertFn(sio, xsio->oldCheckCertFn); /* unlink from GWEN_SYNCIO object */ DBG_INFO(AQBANKING_LOGDOMAIN, "Unlinking SIO from banking object"); GWEN_INHERIT_UNLINK(GWEN_SYNCIO, AB_SIOTLS_EXT, sio); } void GWENHYWFAR_CB AB_SioTlsExt_FreeData(void *bp, void *p) { AB_SIOTLS_EXT *xsio; xsio=(AB_SIOTLS_EXT *) p; assert(xsio); GWEN_FREE_OBJECT(xsio); } /* AB_USER *AB_SioTlsExt_GetUser(const GWEN_SYNCIO *sio) { AB_SIOTLS_EXT *xsio; assert(sio); xsio=GWEN_INHERIT_GETDATA(GWEN_SYNCIO, AB_SIOTLS_EXT, sio); assert(xsio); return xsio->user; } */ int GWENHYWFAR_CB AB_SioTlsExt_CheckCert(GWEN_SYNCIO *sio, const GWEN_SSLCERTDESCR *cert) { int rv; rv=_checkCert(sio, cert); if (rv==1) { DBG_INFO(AQBANKING_LOGDOMAIN, "Cert accepted."); return 0; } else if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); return rv; } /* undecided, abort */ DBG_INFO(AQBANKING_LOGDOMAIN, "Undecided, assuming abort"); return GWEN_ERROR_USER_ABORTED; } int _checkCert(GWEN_SYNCIO *sio, const GWEN_SSLCERTDESCR *cert) { AB_SIOTLS_EXT *xsio; int rv; assert(sio); xsio=GWEN_INHERIT_GETDATA(GWEN_SYNCIO, AB_SIOTLS_EXT, sio); assert(xsio); assert(xsio->user); rv=_checkStoredUserCerts(xsio->user, cert); if (rv!=0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); return rv; } rv=_checkAutoDecision(cert); if (rv!=0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); return rv; } rv=_askUserAboutCert(sio, cert); if (rv!=0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); _storeCertAndUserResponseInUser(xsio->user, cert, rv); return rv; } /* undecided */ return 0; } int _checkStoredUserCerts(AB_USER *u, const GWEN_SSLCERTDESCR *cert) { GWEN_DB_NODE *dbCerts; GWEN_DB_NODE *dbC; const char *sFingerprint; assert(u); sFingerprint=GWEN_SslCertDescr_GetFingerPrint(cert); /* get or create user-based certificate store */ dbCerts=AB_User_GetCertDb(u); if (dbCerts==NULL) { dbCerts=GWEN_DB_Group_new("certs"); AB_User_SetCertDb(u, dbCerts); } /* find group which contains the certificate with the given fingerprint */ dbC=GWEN_DB_GetGroup(dbCerts, GWEN_PATH_FLAGS_PATHMUSTEXIST, sFingerprint); if (dbC) { GWEN_SSLCERTDESCR *storedCert; int rv; /* there is such a group, read stored certificate */ storedCert=GWEN_SslCertDescr_fromDb(dbC); if (storedCert==NULL) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Unable to load stored certificate \"%s\"", sFingerprint); return GWEN_ERROR_INTERNAL; } _storeAccessDate(dbC); rv=_checkAgainstStoredCert(cert, storedCert, dbC); DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); GWEN_SslCertDescr_free(storedCert); return rv; } /* if dbC */ /* undecided */ return 0; } int _checkAgainstStoredCert(const GWEN_SSLCERTDESCR *cert, GWEN_SSLCERTDESCR *storedCert, GWEN_DB_NODE *dbC) { const char *sFingerprint; const char *sStatus; uint32_t iStatus; uint32_t iStoredStatus; sFingerprint=GWEN_SslCertDescr_GetFingerPrint(cert); sStatus=GWEN_SslCertDescr_GetStatusText(cert); iStatus=GWEN_SslCertDescr_GetStatusFlags(cert); /* get status of stored certificate */ iStoredStatus=GWEN_SslCertDescr_GetStatusFlags(storedCert); /* compare status texts */ if (iStatus==iStoredStatus) { /* found matching cert, return user's previous answer */ DBG_NOTICE(AQBANKING_LOGDOMAIN, "Found matching certificate \"%s\" with same status", sFingerprint); return _checkStoredUserResponse(dbC, sFingerprint); } /* if same status */ else { DBG_NOTICE(AQBANKING_LOGDOMAIN, "Status for certificate \%s\" has changed to \"%s\" (%08x->%08x), need to present", sFingerprint, sStatus, iStoredStatus, iStatus); } return 0; } int _checkStoredUserResponse(GWEN_DB_NODE *dbC, const char *sFingerprint) { int rv; rv=GWEN_DB_GetIntValue(dbC, "userResponse", 0, -1); if (rv==0) { /* last user response was to accept the certificate so we're done */ DBG_NOTICE(AQBANKING_LOGDOMAIN, "Automatically accepting certificate [%s]", sFingerprint); return 1; } else { /* last user response was to reject the certificate so we're done */ /* DBG_NOTICE(AQBANKING_LOGDOMAIN, "Automatically rejecting certificate [%s] (%d)", sFingerprint, rv); return rv; */ /* undecided (ask user again) */ return 0; } } int _checkAutoDecision(const GWEN_SSLCERTDESCR *cert) { GWEN_GUI *gui; const char *sFingerprint; sFingerprint=GWEN_SslCertDescr_GetFingerPrint(cert); /* at this point the certificate was either not found or its status has changed, * possibly ask the user how to preceed */ gui=GWEN_Gui_GetGui(); assert(gui); if (GWEN_Gui_GetFlags(gui) & GWEN_GUI_FLAGS_NONINTERACTIVE) { uint32_t fl; fl=GWEN_SslCertDescr_GetStatusFlags(cert); if (fl==GWEN_SSL_CERT_FLAGS_OK) { if (GWEN_Gui_GetFlags(gui) & GWEN_GUI_FLAGS_ACCEPTVALIDCERTS) { DBG_NOTICE(AQBANKING_LOGDOMAIN, "Automatically accepting valid new certificate [%s]", sFingerprint); return 1; } else { DBG_NOTICE(AQBANKING_LOGDOMAIN, "Automatically rejecting certificate [%s] (noninteractive)", sFingerprint); GWEN_Gui_ProgressLog2(0, GWEN_LoggerLevel_Warning, "Automatically rejecting certificate [%s] (noninteractive)", sFingerprint); return GWEN_ERROR_USER_ABORTED; } } /* if cert is valid */ else { if (GWEN_Gui_GetFlags(gui) & GWEN_GUI_FLAGS_REJECTINVALIDCERTS) { DBG_NOTICE(AQBANKING_LOGDOMAIN, "Automatically rejecting invalid certificate [%s] (noninteractive)", sFingerprint); GWEN_Gui_ProgressLog2(0, GWEN_LoggerLevel_Warning, "Automatically rejecting invalid certificate [%s] (noninteractive)", sFingerprint); return GWEN_ERROR_USER_ABORTED; } } } /* if non-interactive */ /* undecided */ return 0; } int _askUserAboutCert(GWEN_SYNCIO *sio, const GWEN_SSLCERTDESCR *cert) { AB_SIOTLS_EXT *xsio; assert(sio); xsio=GWEN_INHERIT_GETDATA(GWEN_SYNCIO, AB_SIOTLS_EXT, sio); assert(xsio); /* use previous checkCert function, which normally presents the certificate * to the user and asks for a response */ if (xsio->oldCheckCertFn) { int rv; /* get user response */ rv=xsio->oldCheckCertFn(sio, cert); if (rv==0) return 1; else { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); return rv; } } else { DBG_NOTICE(AQBANKING_LOGDOMAIN, "Internal error: No previous checkCert function"); return GWEN_ERROR_INTERNAL; } } void _storeCertAndUserResponseInUser(AB_USER *u, const GWEN_SSLCERTDESCR *cert, int response) { GWEN_DB_NODE *dbCerts; GWEN_DB_NODE *dbC; const char *sFingerprint; const char *sStatus; sFingerprint=GWEN_SslCertDescr_GetFingerPrint(cert); sStatus=GWEN_SslCertDescr_GetStatusText(cert); dbCerts=AB_User_GetCertDb(u); assert(dbCerts); /* store certificate in database */ dbC=GWEN_DB_GetGroup(dbCerts, GWEN_DB_FLAGS_OVERWRITE_GROUPS, sFingerprint); assert(dbC); GWEN_SslCertDescr_toDb(cert, dbC); /* store user response */ GWEN_DB_SetIntValue(dbC, GWEN_DB_FLAGS_OVERWRITE_VARS, "userResponse", (response==1)?0:response); DBG_NOTICE(AQBANKING_LOGDOMAIN, "User response to presentation of cert \"%s\" (%s): %d", sFingerprint, sStatus, (response==1)?0:response); _storeAccessDate(dbC); } void _storeAccessDate(GWEN_DB_NODE *dbCert) { GWEN_DATE *dt; dt=GWEN_Date_CurrentDate(); GWEN_DB_SetCharValue(dbCert, GWEN_DB_FLAGS_OVERWRITE_VARS, "lastAccessDate", GWEN_Date_GetString(dt)); GWEN_Date_free(dt); } aqbanking-6.6.1/src/libs/aqbanking/backendsupport/ab_user_list.tm20000664000175000017500000000031515037736054022211 00000000000000 AB_USER_LIST AB_User_List aqbanking-6.6.1/src/libs/aqbanking/backendsupport/provider_p.h0000664000175000017500000000346014043610744021431 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQBANKING_PROVIDER_P_H #define AQBANKING_PROVIDER_P_H #include "provider_l.h" #include #include #include #include #include struct AB_PROVIDER { GWEN_INHERIT_ELEMENT(AB_PROVIDER) GWEN_LIST_ELEMENT(AB_PROVIDER) AB_BANKING *banking; char *name; char *escName; AB_PROVIDER_INIT_FN initFn; AB_PROVIDER_FINI_FN finiFn; AB_PROVIDER_SENDCOMMANDS_FN sendCommandsFn; AB_PROVIDER_CREATEACCOUNTOBJECT_FN createAccountObjectFn; AB_PROVIDER_CREATEUSEROBJECT_FN createUserObjectFn; AB_PROVIDER_UPDATEACCOUNTSPEC_FN updateAccountSpecFn; AB_PROVIDER_CONTROL_FN controlFn; AB_PROVIDER_GET_NEWUSER_DIALOG_FN getNewUserDialogFn; AB_PROVIDER_GET_EDITUSER_DIALOG_FN getEditUserDialogFn; AB_PROVIDER_GET_NEWACCOUNT_DIALOG_FN getNewAccountDialogFn; AB_PROVIDER_GET_EDITACCOUNT_DIALOG_FN getEditAccountDialogFn; AB_PROVIDER_GET_USERTYPE_DIALOG_FN getUserTypeDialogFn; GWEN_PLUGIN *plugin; uint32_t usage; uint32_t flags; int initCounter; }; typedef struct AB_PLUGIN_PROVIDER AB_PLUGIN_PROVIDER; struct AB_PLUGIN_PROVIDER { AB_PLUGIN_PROVIDER_FACTORY_FN pluginFactoryFn; }; static void GWENHYWFAR_CB AB_Plugin_Provider_FreeData(void *bp, void *p); #endif /* AQBANKING_PROVIDER_P_H */ aqbanking-6.6.1/src/libs/aqbanking/backendsupport/providerqueue.h0000664000175000017500000000700015037736054022160 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "providerqueue.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef AB_PROVIDERQUEUE_PROVIDERQUEUE_H #define AB_PROVIDERQUEUE_PROVIDERQUEUE_H #ifdef __cplusplus extern "C" { #endif /** @page P_AB_PROVIDERQUEUE Structure AB_PROVIDERQUEUE

This page describes the properties of AB_PROVIDERQUEUE.

AB_PROVIDERQUEUE

@anchor AB_PROVIDERQUEUE_providerName

providerName

Set this property with @ref AB_ProviderQueue_SetProviderName(), get it with @ref AB_ProviderQueue_GetProviderName().

@anchor AB_PROVIDERQUEUE_provider

provider

Set this property with @ref AB_ProviderQueue_SetProvider(), get it with @ref AB_ProviderQueue_GetProvider().

@anchor AB_PROVIDERQUEUE_accountQueueList

accountQueueList

Set this property with @ref AB_ProviderQueue_SetAccountQueueList(), get it with @ref AB_ProviderQueue_GetAccountQueueList().

*/ /* needed system headers */ #include #include #include /* pre-headers */ #include typedef struct AB_PROVIDERQUEUE AB_PROVIDERQUEUE; GWEN_LIST_FUNCTION_DEFS(AB_PROVIDERQUEUE, AB_ProviderQueue) GWEN_INHERIT_FUNCTION_DEFS(AB_PROVIDERQUEUE) /* post-headers */ #include #include /** Constructor. */ AB_PROVIDERQUEUE *AB_ProviderQueue_new(void); /** Destructor. */ void AB_ProviderQueue_free(AB_PROVIDERQUEUE *p_struct); void AB_ProviderQueue_Attach(AB_PROVIDERQUEUE *p_struct); AB_PROVIDERQUEUE *AB_ProviderQueue_dup(const AB_PROVIDERQUEUE *p_src); /** Getter. * Use this function to get the member "providerName" (see @ref AB_PROVIDERQUEUE_providerName) */ const char *AB_ProviderQueue_GetProviderName(const AB_PROVIDERQUEUE *p_struct); /** Getter. * Use this function to get the member "provider" (see @ref AB_PROVIDERQUEUE_provider) */ AB_PROVIDER *AB_ProviderQueue_GetProvider(const AB_PROVIDERQUEUE *p_struct); /** Getter. * Use this function to get the member "accountQueueList" (see @ref AB_PROVIDERQUEUE_accountQueueList) */ AB_ACCOUNTQUEUE_LIST *AB_ProviderQueue_GetAccountQueueList(const AB_PROVIDERQUEUE *p_struct); /** Setter. * Use this function to set the member "providerName" (see @ref AB_PROVIDERQUEUE_providerName) */ void AB_ProviderQueue_SetProviderName(AB_PROVIDERQUEUE *p_struct, const char *p_src); /** Setter. * Use this function to set the member "provider" (see @ref AB_PROVIDERQUEUE_provider) */ void AB_ProviderQueue_SetProvider(AB_PROVIDERQUEUE *p_struct, AB_PROVIDER *p_src); /** Setter. * Use this function to set the member "accountQueueList" (see @ref AB_PROVIDERQUEUE_accountQueueList) */ void AB_ProviderQueue_SetAccountQueueList(AB_PROVIDERQUEUE *p_struct, AB_ACCOUNTQUEUE_LIST *p_src); AB_PROVIDERQUEUE_LIST *AB_ProviderQueue_List_dup(const AB_PROVIDERQUEUE_LIST *p_src); AB_PROVIDERQUEUE *AB_ProviderQueue_List_GetByProviderName(const AB_PROVIDERQUEUE_LIST *p_list, const char *p_cmp); AB_ACCOUNTQUEUE *AB_ProviderQueue_FindAccountQueueById(const AB_PROVIDERQUEUE *pq, uint32_t uid); void AB_ProviderQueue_AddAccountQueue(AB_PROVIDERQUEUE *pq, AB_ACCOUNTQUEUE *aq); AB_ACCOUNTQUEUE *AB_ProviderQueue_GetFirstAccountQueue(const AB_PROVIDERQUEUE *pq); #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/aqbanking/backendsupport/queue.xml0000664000175000017500000000312414043610744020752 00000000000000 AB_QUEUE AB_Queue queue with_inherit with_refcount
aqbanking/error.h
aqbanking/backendsupport/userqueue.h
$(api) AB_USERQUEUE *$(struct_prefix)_FindUserQueue(const $(struct_type) *q, AB_USER *u); AB_USERQUEUE *$(struct_prefix)_FindUserQueue(const $(struct_type) *q, AB_USER *u) { AB_USERQUEUE *uq; uq=AB_UserQueue_List_First(q->userQueueList); while(uq) { if (AB_UserQueue_GetUser(uq)==u) return uq; uq=AB_UserQueue_List_Next(uq); } return NULL; }
NULL AB_UserQueue_List_new() public volatile own dup none none
aqbanking-6.6.1/src/libs/aqbanking/backendsupport/queue_p.h0000664000175000017500000000112715037736054020730 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "queue.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef AB_QUEUE_QUEUE_P_H #define AB_QUEUE_QUEUE_P_H #include "./queue.h" #ifdef __cplusplus extern "C" { #endif struct AB_QUEUE { GWEN_INHERIT_ELEMENT(AB_QUEUE) int _refCount; AB_USERQUEUE_LIST *userQueueList; /* volatile */ }; #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/aqbanking/backendsupport/bankinfoplugin_p.h0000664000175000017500000000245314043610744022606 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Mon Mar 01 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQBANKING_BANKINFOPLUGIN_P_H #define AQBANKING_BANKINFOPLUGIN_P_H #include "bankinfoplugin_l.h" #include #include struct AB_BANKINFO_PLUGIN { GWEN_INHERIT_ELEMENT(AB_BANKINFO_PLUGIN); GWEN_LIST_ELEMENT(AB_BANKINFO_PLUGIN); uint32_t usage; char *country; GWEN_PLUGIN *plugin; AB_BANKINFOPLUGIN_GETBANKINFO_FN getBankInfoFn; AB_BANKINFOPLUGIN_CHECKACCOUNT_FN checkAccountFn; AB_BANKINFOPLUGIN_GETBANKINFOBYTMPLATE_FN getBankInfoByTemplateFn; }; typedef struct AB_PLUGIN_BANKINFO AB_PLUGIN_BANKINFO; struct AB_PLUGIN_BANKINFO { AB_PLUGIN_BANKINFO_FACTORY_FN pluginFactoryFn; }; static void GWENHYWFAR_CB AB_Plugin_BankInfo_FreeData(void *bp, void *p); #endif /* AQBANKING_BANKINFOPLUGIN_P_H */ aqbanking-6.6.1/src/libs/aqbanking/backendsupport/user_p.h0000664000175000017500000000175115037736054020565 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "user.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef AB_USER_USER_P_H #define AB_USER_USER_P_H #include "./user.h" #ifdef __cplusplus extern "C" { #endif struct AB_USER { GWEN_INHERIT_ELEMENT(AB_USER) GWEN_LIST_ELEMENT(AB_USER) int _refCount; uint32_t uniqueId; char *backendName; char *userName; char *userId; char *customerId; char *country; char *bankCode; AB_PROVIDER *provider; /* volatile */ GWEN_DB_NODE *certDb; uint32_t lastSessionId; AB_USER_READFROMDB_FN readFromDbFn; AB_USER_WRITETODB_FN writeToDbFn; }; /** */ int AB_User__ReadFromDb(AB_USER *a, GWEN_DB_NODE *db); /** */ int AB_User__WriteToDb(const AB_USER *a, GWEN_DB_NODE *db); #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/aqbanking/backendsupport/userqueue_p.h0000664000175000017500000000132215037736054021624 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "userqueue.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef AB_USERQUEUE_USERQUEUE_P_H #define AB_USERQUEUE_USERQUEUE_P_H #include "./userqueue.h" #ifdef __cplusplus extern "C" { #endif struct AB_USERQUEUE { GWEN_INHERIT_ELEMENT(AB_USERQUEUE) GWEN_LIST_ELEMENT(AB_USERQUEUE) int _refCount; uint32_t userId; AB_USER *user; /* volatile */ AB_ACCOUNTQUEUE_LIST *accountQueueList; /* volatile */ }; #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/aqbanking/backendsupport/ab_user_list2.tm20000664000175000017500000000032015037736054022267 00000000000000 AB_USER_LIST2 AB_User_List2 aqbanking-6.6.1/src/libs/aqbanking/backendsupport/userqueue.xml0000664000175000017500000000670714043610744021663 00000000000000 AB_USERQUEUE AB_UserQueue userqueue with_inherit with_list1 with_refcount nocopy
aqbanking/banking.h
aqbanking/backendsupport/user.h
aqbanking/backendsupport/accountqueue.h
$(api) AB_ACCOUNTQUEUE *$(struct_prefix)_FindAccountQueue(const $(struct_type) *uq, AB_ACCOUNT *acc); AB_ACCOUNTQUEUE *$(struct_prefix)_FindAccountQueue(const $(struct_type) *uq, AB_ACCOUNT *acc) { AB_ACCOUNTQUEUE *aq; aq=AB_AccountQueue_List_First(uq->accountQueueList); while(aq) { if (AB_AccountQueue_GetAccount(aq)==acc) return aq; aq=AB_AccountQueue_List_Next(aq); } return NULL; } $(api) void $(struct_prefix)_AddAccountQueue($(struct_type) *up, AB_ACCOUNTQUEUE *aq); void $(struct_prefix)_AddAccountQueue($(struct_type) *up, AB_ACCOUNTQUEUE *aq) { if (up->accountQueueList==NULL) up->accountQueueList=AB_AccountQueue_List_new(); AB_AccountQueue_List_Add(aq, up->accountQueueList); } $(api) AB_ACCOUNTQUEUE *$(struct_prefix)_GetFirstAccountQueue(const $(struct_type) *up); AB_ACCOUNTQUEUE *$(struct_prefix)_GetFirstAccountQueue(const $(struct_type) *up) { if (up->accountQueueList==NULL) return NULL; return AB_AccountQueue_List_First(up->accountQueueList); }
0 0 public with_getbymember NULL NULL public volatile none none assign assign NULL AB_AccountQueue_List_new() public volatile own dup none none
aqbanking-6.6.1/src/libs/aqbanking/backendsupport/user.xml0000664000175000017500000001570614043610744020615 00000000000000 This type contains basic information about users. All text fields are in UTF-8. AB_USER AB_User user with_inherit with_xml with_db with_list1 with_list2 with_refcount noCopy noDup
aqbanking/error.h
gwenhywfar/mdigest.h
gwenhywfar/text.h
gwenhywfar/buffer.h
aqbanking/backendsupport/provider.h
/** \n */ \n int $(struct_prefix)__ReadFromDb($(struct_type) *a, GWEN_DB_NODE *db); int $(struct_prefix)__ReadFromDb($(struct_type) *a, GWEN_DB_NODE *db) { assert(a); $(struct_prefix)_ReadDb(a, db); return 0; } /** \n */ \n int $(struct_prefix)__WriteToDb(const $(struct_type) *a, GWEN_DB_NODE *db); int $(struct_prefix)__WriteToDb(const $(struct_type) *a, GWEN_DB_NODE *db) { assert(a); $(struct_prefix)_WriteDb(a, db); return 0; }
This is a unique id assigned by AqBanking. 0 0 public with_getbymember Name of the banking backend this account belongs to. public own with_hash const dup const Clear name of the user. public own with_hash const dup const user id assigned by the bank public own with_hash const dup const customer id assigned by the bank (in many cases same as user id) public own with_hash const dup const public own with_hash const dup const National bank code (e.g. BLZ in Germany, routing number in other countries). public own with_hash const dup const NULL NULL public volatile none none NULL NULL public own none none Last session id for this user. 0 0 public with_getbymember Read a user from a GWEN_DB_NODE. public AB_User__ReadFromDb int GWEN_ERROR_NOT_IMPLEMENTED Config data to read from. Write a user to a GWEN_DB_NODE. public AB_User__WriteToDb const int GWEN_ERROR_NOT_IMPLEMENTED Config data to read from.
aqbanking-6.6.1/src/libs/aqbanking/backendsupport/provider_utils.c0000664000175000017500000000616214546575647022353 00000000000000/*************************************************************************** begin : Thur Aug 11 2022 copyright : (C) 2022 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ /* * This file is included by provider.c */ void AB_Provider_DumpTransactionsIfDebug(const AB_IMEXPORTER_ACCOUNTINFO *ai, const char *logdomain) { if (GWEN_Logger_GetLevel(logdomain)>=GWEN_LoggerLevel_Debug) { GWEN_DB_NODE *gn; AB_TRANSACTION *ttmp; DBG_INFO(logdomain, "*** Dumping transactions *******************"); ttmp=AB_ImExporterAccountInfo_GetFirstTransaction(ai, 0, 0); while (ttmp) { DBG_INFO(logdomain, "*** --------------------------------------"); gn=GWEN_DB_Group_new("transaction"); AB_Transaction_toDb(ttmp, gn); GWEN_DB_Dump(gn, 2); GWEN_DB_Group_free(gn); ttmp=AB_Transaction_List_Next(ttmp); } DBG_INFO(logdomain, "*** End dumping transactions ***************"); } } void AB_Provider_MergeContextsSetTypeAndFreeSrc(AB_IMEXPORTER_ACCOUNTINFO *destAccountInfo, AB_IMEXPORTER_CONTEXT *srcContext, int ty) { AB_IMEXPORTER_ACCOUNTINFO *srcAccountInfo; /* copy data from temporary context to real context */ srcAccountInfo=AB_ImExporterContext_GetFirstAccountInfo(srcContext); while (srcAccountInfo) { AB_TRANSACTION_LIST *tl; AB_BALANCE_LIST *bl; /* move transactions, set transaction type */ tl=AB_ImExporterAccountInfo_GetTransactionList(srcAccountInfo); if (tl) { AB_TRANSACTION *t; while ((t=AB_Transaction_List_First(tl))) { AB_Transaction_List_Del(t); AB_Transaction_SetType(t, ty); AB_ImExporterAccountInfo_AddTransaction(destAccountInfo, t); } } /* move balances */ bl=AB_ImExporterAccountInfo_GetBalanceList(srcAccountInfo); if (bl) { AB_BALANCE *bal; while ((bal=AB_Balance_List_First(bl))) { AB_Balance_List_Del(bal); AB_ImExporterAccountInfo_AddBalance(destAccountInfo, bal); } } srcAccountInfo=AB_ImExporterAccountInfo_List_Next(srcAccountInfo); } AB_ImExporterContext_free(srcContext); } AB_IMEXPORTER_ACCOUNTINFO *AB_Provider_GetOrAddAccountInfoForAccount(AB_IMEXPORTER_CONTEXT *ctx, const AB_ACCOUNT *a) { if (a) return AB_ImExporterContext_GetOrAddAccountInfo(ctx, AB_Account_GetUniqueId(a), AB_Account_GetIban(a), AB_Account_GetBankCode(a), AB_Account_GetAccountNumber(a), AB_Account_GetAccountType(a)); else return AB_ImExporterContext_GetOrAddAccountInfo(ctx, 0, NULL, NULL, NULL, AB_AccountType_Unknown); } aqbanking-6.6.1/src/libs/aqbanking/backendsupport/ab_swift_descr_list.tm20000664000175000017500000000035015037736054023546 00000000000000 AB_SWIFT_DESCR_LIST AB_SwiftDescr_List aqbanking-6.6.1/src/libs/aqbanking/backendsupport/account.h0000664000175000017500000003544415037736054020732 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "account.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef AB_ACCOUNT_ACCOUNT_H #define AB_ACCOUNT_ACCOUNT_H #ifdef __cplusplus extern "C" { #endif /** @page P_AB_ACCOUNT Structure AB_ACCOUNT

This page describes the properties of AB_ACCOUNT.

AB_ACCOUNT

This type contains all important information about accounts. All text fields are in UTF-8.

Type

@anchor AB_ACCOUNT_accountType

accountType

Set this property with @ref AB_Account_SetAccountType(), get it with @ref AB_Account_GetAccountType().

Identifiers

@anchor AB_ACCOUNT_uniqueId

uniqueId

This is a unique id assigned by AqBanking.

Set this property with @ref AB_Account_SetUniqueId(), get it with @ref AB_Account_GetUniqueId().

Common Information

@anchor AB_ACCOUNT_backendName

backendName

Name of the banking backend this account belongs to.

Set this property with @ref AB_Account_SetBackendName(), get it with @ref AB_Account_GetBackendName().

@anchor AB_ACCOUNT_ownerName

ownerName

Name of the account owner as it is stored with the bank.

Set this property with @ref AB_Account_SetOwnerName(), get it with @ref AB_Account_GetOwnerName().

@anchor AB_ACCOUNT_bankName

bankName

Name of the bank the account belongs to.

Set this property with @ref AB_Account_SetBankName(), get it with @ref AB_Account_GetBankName().

@anchor AB_ACCOUNT_accountName

accountName

Name of the account.

Set this property with @ref AB_Account_SetAccountName(), get it with @ref AB_Account_GetAccountName().

@anchor AB_ACCOUNT_currency

currency

Currency used with this account.

Set this property with @ref AB_Account_SetCurrency(), get it with @ref AB_Account_GetCurrency().

@anchor AB_ACCOUNT_memo

memo

Optional additional info.

Set this property with @ref AB_Account_SetMemo(), get it with @ref AB_Account_GetMemo().

SEPA Account Specification

@anchor AB_ACCOUNT_iban

iban

Internation bank account number as specified by the SEPA specs.

Set this property with @ref AB_Account_SetIban(), get it with @ref AB_Account_GetIban().

@anchor AB_ACCOUNT_bic

bic

SWIFT code of the bank at which this account is registered.

Set this property with @ref AB_Account_SetBic(), get it with @ref AB_Account_GetBic().

Non-SEPA Account Specification

@anchor AB_ACCOUNT_country

country

Set this property with @ref AB_Account_SetCountry(), get it with @ref AB_Account_GetCountry().

@anchor AB_ACCOUNT_bankCode

bankCode

National bank code (e.g. BLZ in Germany, routing number in other countries).

Set this property with @ref AB_Account_SetBankCode(), get it with @ref AB_Account_GetBankCode().

@anchor AB_ACCOUNT_branchId

branchId

This is the branch id of the local bank (OFX only)

Set this property with @ref AB_Account_SetBranchId(), get it with @ref AB_Account_GetBranchId().

@anchor AB_ACCOUNT_accountNumber

accountNumber

Account number in national account specification.

Set this property with @ref AB_Account_SetAccountNumber(), get it with @ref AB_Account_GetAccountNumber().

@anchor AB_ACCOUNT_subAccountId

subAccountId

If your account has subaccounts which are distinguished by different suffixes, then this is that suffix. Otherwise it's empty. (HBCI only)

Set this property with @ref AB_Account_SetSubAccountId(), get it with @ref AB_Account_GetSubAccountId().

Internal Data

@anchor AB_ACCOUNT_userId

userId

Id of the user to whom this account is assigned.

Set this property with @ref AB_Account_SetUserId(), get it with @ref AB_Account_GetUserId().

@anchor AB_ACCOUNT_provider

provider

Set this property with @ref AB_Account_SetProvider(), get it with @ref AB_Account_GetProvider().

*/ /* needed system headers */ #include #include #include #include #include #include /* pre-headers */ #include #include #include #include typedef struct AB_ACCOUNT AB_ACCOUNT; GWEN_LIST_FUNCTION_DEFS(AB_ACCOUNT, AB_Account) GWEN_LIST2_FUNCTION_DEFS(AB_ACCOUNT, AB_Account) GWEN_INHERIT_FUNCTION_DEFS(AB_ACCOUNT) /* post-headers */ #include #include /* definitions for virtual functions (post) */ typedef int (*AB_ACCOUNT_READFROMDB_FN)(AB_ACCOUNT *p_struct, GWEN_DB_NODE* dbData); typedef int (*AB_ACCOUNT_WRITETODB_FN)(const AB_ACCOUNT *p_struct, GWEN_DB_NODE* dbData); /** Constructor. */ AB_ACCOUNT *AB_Account_new(void); /** Destructor. */ void AB_Account_free(AB_ACCOUNT *p_struct); void AB_Account_Attach(AB_ACCOUNT *p_struct); /** Getter. * Use this function to get the member "accountType" (see @ref AB_ACCOUNT_accountType) */ int AB_Account_GetAccountType(const AB_ACCOUNT *p_struct); /** Getter. * Use this function to get the member "uniqueId" (see @ref AB_ACCOUNT_uniqueId) */ uint32_t AB_Account_GetUniqueId(const AB_ACCOUNT *p_struct); /** Getter. * Use this function to get the member "backendName" (see @ref AB_ACCOUNT_backendName) */ const char *AB_Account_GetBackendName(const AB_ACCOUNT *p_struct); /** Getter. * Use this function to get the member "ownerName" (see @ref AB_ACCOUNT_ownerName) */ const char *AB_Account_GetOwnerName(const AB_ACCOUNT *p_struct); /** Getter. * Use this function to get the member "bankName" (see @ref AB_ACCOUNT_bankName) */ const char *AB_Account_GetBankName(const AB_ACCOUNT *p_struct); /** Getter. * Use this function to get the member "accountName" (see @ref AB_ACCOUNT_accountName) */ const char *AB_Account_GetAccountName(const AB_ACCOUNT *p_struct); /** Getter. * Use this function to get the member "currency" (see @ref AB_ACCOUNT_currency) */ const char *AB_Account_GetCurrency(const AB_ACCOUNT *p_struct); /** Getter. * Use this function to get the member "memo" (see @ref AB_ACCOUNT_memo) */ const char *AB_Account_GetMemo(const AB_ACCOUNT *p_struct); /** Getter. * Use this function to get the member "iban" (see @ref AB_ACCOUNT_iban) */ const char *AB_Account_GetIban(const AB_ACCOUNT *p_struct); /** Getter. * Use this function to get the member "bic" (see @ref AB_ACCOUNT_bic) */ const char *AB_Account_GetBic(const AB_ACCOUNT *p_struct); /** Getter. * Use this function to get the member "country" (see @ref AB_ACCOUNT_country) */ const char *AB_Account_GetCountry(const AB_ACCOUNT *p_struct); /** Getter. * Use this function to get the member "bankCode" (see @ref AB_ACCOUNT_bankCode) */ const char *AB_Account_GetBankCode(const AB_ACCOUNT *p_struct); /** Getter. * Use this function to get the member "branchId" (see @ref AB_ACCOUNT_branchId) */ const char *AB_Account_GetBranchId(const AB_ACCOUNT *p_struct); /** Getter. * Use this function to get the member "accountNumber" (see @ref AB_ACCOUNT_accountNumber) */ const char *AB_Account_GetAccountNumber(const AB_ACCOUNT *p_struct); /** Getter. * Use this function to get the member "subAccountId" (see @ref AB_ACCOUNT_subAccountId) */ const char *AB_Account_GetSubAccountId(const AB_ACCOUNT *p_struct); /** Getter. * Use this function to get the member "userId" (see @ref AB_ACCOUNT_userId) */ uint32_t AB_Account_GetUserId(const AB_ACCOUNT *p_struct); /** Getter. * Use this function to get the member "provider" (see @ref AB_ACCOUNT_provider) */ AB_PROVIDER *AB_Account_GetProvider(const AB_ACCOUNT *p_struct); /** Setter. * Use this function to set the member "accountType" (see @ref AB_ACCOUNT_accountType) */ void AB_Account_SetAccountType(AB_ACCOUNT *p_struct, int p_src); /** Setter. * Use this function to set the member "uniqueId" (see @ref AB_ACCOUNT_uniqueId) */ void AB_Account_SetUniqueId(AB_ACCOUNT *p_struct, uint32_t p_src); /** Setter. * Use this function to set the member "backendName" (see @ref AB_ACCOUNT_backendName) */ void AB_Account_SetBackendName(AB_ACCOUNT *p_struct, const char *p_src); /** Setter. * Use this function to set the member "ownerName" (see @ref AB_ACCOUNT_ownerName) */ void AB_Account_SetOwnerName(AB_ACCOUNT *p_struct, const char *p_src); /** Setter. * Use this function to set the member "bankName" (see @ref AB_ACCOUNT_bankName) */ void AB_Account_SetBankName(AB_ACCOUNT *p_struct, const char *p_src); /** Setter. * Use this function to set the member "accountName" (see @ref AB_ACCOUNT_accountName) */ void AB_Account_SetAccountName(AB_ACCOUNT *p_struct, const char *p_src); /** Setter. * Use this function to set the member "currency" (see @ref AB_ACCOUNT_currency) */ void AB_Account_SetCurrency(AB_ACCOUNT *p_struct, const char *p_src); /** Setter. * Use this function to set the member "memo" (see @ref AB_ACCOUNT_memo) */ void AB_Account_SetMemo(AB_ACCOUNT *p_struct, const char *p_src); /** Setter. * Use this function to set the member "iban" (see @ref AB_ACCOUNT_iban) */ void AB_Account_SetIban(AB_ACCOUNT *p_struct, const char *p_src); /** Setter. * Use this function to set the member "bic" (see @ref AB_ACCOUNT_bic) */ void AB_Account_SetBic(AB_ACCOUNT *p_struct, const char *p_src); /** Setter. * Use this function to set the member "country" (see @ref AB_ACCOUNT_country) */ void AB_Account_SetCountry(AB_ACCOUNT *p_struct, const char *p_src); /** Setter. * Use this function to set the member "bankCode" (see @ref AB_ACCOUNT_bankCode) */ void AB_Account_SetBankCode(AB_ACCOUNT *p_struct, const char *p_src); /** Setter. * Use this function to set the member "branchId" (see @ref AB_ACCOUNT_branchId) */ void AB_Account_SetBranchId(AB_ACCOUNT *p_struct, const char *p_src); /** Setter. * Use this function to set the member "accountNumber" (see @ref AB_ACCOUNT_accountNumber) */ void AB_Account_SetAccountNumber(AB_ACCOUNT *p_struct, const char *p_src); /** Setter. * Use this function to set the member "subAccountId" (see @ref AB_ACCOUNT_subAccountId) */ void AB_Account_SetSubAccountId(AB_ACCOUNT *p_struct, const char *p_src); /** Setter. * Use this function to set the member "userId" (see @ref AB_ACCOUNT_userId) */ void AB_Account_SetUserId(AB_ACCOUNT *p_struct, uint32_t p_src); /** Setter. * Use this function to set the member "provider" (see @ref AB_ACCOUNT_provider) */ void AB_Account_SetProvider(AB_ACCOUNT *p_struct, AB_PROVIDER *p_src); /* prototypes for virtual functions */ /** * Read an account from a GWEN_DB_NODE. * @param dbData Profile data to read from. */ int AB_Account_ReadFromDb(AB_ACCOUNT *p_struct, GWEN_DB_NODE* dbData); /** * Write an account to a GWEN_DB_NODE. * @param dbData Profile data to read from. */ int AB_Account_WriteToDb(const AB_ACCOUNT *p_struct, GWEN_DB_NODE* dbData); /* setters for virtual functions */ AB_ACCOUNT_READFROMDB_FN AB_Account_SetReadFromDbFn(AB_ACCOUNT *p_struct, AB_ACCOUNT_READFROMDB_FN fn); AB_ACCOUNT_WRITETODB_FN AB_Account_SetWriteToDbFn(AB_ACCOUNT *p_struct, AB_ACCOUNT_WRITETODB_FN fn); /* getters for virtual functions */ AB_ACCOUNT_READFROMDB_FN AB_Account_GetReadFromDbFn(const AB_ACCOUNT *p_struct); AB_ACCOUNT_WRITETODB_FN AB_Account_GetWriteToDbFn(const AB_ACCOUNT *p_struct); void AB_Account_ReadDb(AB_ACCOUNT *p_struct, GWEN_DB_NODE *p_db); int AB_Account_WriteDb(const AB_ACCOUNT *p_struct, GWEN_DB_NODE *p_db); AB_ACCOUNT *AB_Account_fromDb(GWEN_DB_NODE *p_db); int AB_Account_toDb(const AB_ACCOUNT *p_struct, GWEN_DB_NODE *p_db); void AB_Account_ReadXml(AB_ACCOUNT *p_struct, GWEN_XMLNODE *p_db); void AB_Account_WriteXml(const AB_ACCOUNT *p_struct, GWEN_XMLNODE *p_db); void AB_Account_toXml(const AB_ACCOUNT *p_struct, GWEN_XMLNODE *p_db); AB_ACCOUNT *AB_Account_fromXml(GWEN_XMLNODE *p_db); AB_ACCOUNT *AB_Account_List_GetByUniqueId(const AB_ACCOUNT_LIST *p_list, uint32_t p_cmp); /** * Check whether a given account info object matches the given criteria. * @param a account info object to match * @param backendName name of the banking backend (wildcards and jokers allowed) * @param country ISO code of the country (wildcards and jokers allowed) * @param bankId bank code to search for (wildcards and jokers allowed) * @param accountNumber account number to search for (wildcards and jokers allowed) * @param subAccountId sub account number (wildcards and jokers allowed) * @param iban IBAN to search for (wildcards and jokers allowed) * @param currency currecny the account uses (wildcards and jokers allowed) * @param ty account type (use AB_AccountType_Unknown as wildcard) */ int AB_Account_Matches(const AB_ACCOUNT *a, const char *backendName, const char *country, const char *bankId, const char *accountNumber, const char *subAccountId, const char *iban, const char *currency, int ty); /** * Find the first matching account object in a list of account info objects. * @param al list of account objects among to search * @param backendName name of the banking backend (wildcards and jokers allowed) * @param country ISO code of the country (wildcards and jokers allowed) * @param bankId bank code to search for (wildcards and jokers allowed) * @param accountNumber account number to search for (wildcards and jokers allowed) * @param subAccountId sub account number (wildcards and jokers allowed) * @param iban IBAN to search for (wildcards and jokers allowed) * @param currency currecny the account uses (wildcards and jokers allowed) * @param ty account type (use AB_AccountType_Unknown as wildcard) */ AB_ACCOUNT *AB_Account_List_FindFirst(AB_ACCOUNT_LIST *al, const char *backendName, const char *country, const char *bankId, const char *accountNumber, const char *subAccountId, const char *iban, const char *currency, int ty); /** * Find the next matching account object in a list of account info objects. * @param a previous matching account objects among to search * @param backendName name of the banking backend (wildcards and jokers allowed) * @param country ISO code of the country (wildcards and jokers allowed) * @param bankId bank code to search for (wildcards and jokers allowed) * @param accountNumber account number to search for (wildcards and jokers allowed) * @param subAccountId sub account number (wildcards and jokers allowed) * @param iban IBAN to search for (wildcards and jokers allowed) * @param currency currecny the account uses (wildcards and jokers allowed) * @param ty account type (use AB_AccountType_Unknown as wildcard) */ AB_ACCOUNT *AB_Account_List_FindNext(AB_ACCOUNT *a, const char *backendName, const char *country, const char *bankId, const char *accountNumber, const char *subAccountId, const char *iban, const char *currency, int ty); #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/aqbanking/backendsupport/jobqueue.h0000664000175000017500000000475515037736054021116 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "jobqueue.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef AB_JOBQUEUE_JOBQUEUE_H #define AB_JOBQUEUE_JOBQUEUE_H #ifdef __cplusplus extern "C" { #endif /** @page P_AB_JOBQUEUE Structure AB_JOBQUEUE

This page describes the properties of AB_JOBQUEUE.

AB_JOBQUEUE

@anchor AB_JOBQUEUE_jobType

jobType

Set this property with @ref AB_JobQueue_SetJobType(), get it with @ref AB_JobQueue_GetJobType().

@anchor AB_JOBQUEUE_transactionList

transactionList

Set this property with @ref AB_JobQueue_SetTransactionList(), get it with @ref AB_JobQueue_GetTransactionList().

*/ /* needed system headers */ #include #include #include /* pre-headers */ #include typedef struct AB_JOBQUEUE AB_JOBQUEUE; GWEN_LIST_FUNCTION_DEFS(AB_JOBQUEUE, AB_JobQueue) GWEN_INHERIT_FUNCTION_DEFS(AB_JOBQUEUE) /* post-headers */ #include /** Constructor. */ AB_JOBQUEUE *AB_JobQueue_new(void); /** Destructor. */ void AB_JobQueue_free(AB_JOBQUEUE *p_struct); void AB_JobQueue_Attach(AB_JOBQUEUE *p_struct); AB_JOBQUEUE *AB_JobQueue_dup(const AB_JOBQUEUE *p_src); /** Getter. * Use this function to get the member "jobType" (see @ref AB_JOBQUEUE_jobType) */ int AB_JobQueue_GetJobType(const AB_JOBQUEUE *p_struct); /** Getter. * Use this function to get the member "transactionList" (see @ref AB_JOBQUEUE_transactionList) */ AB_TRANSACTION_LIST2 *AB_JobQueue_GetTransactionList(const AB_JOBQUEUE *p_struct); /** Setter. * Use this function to set the member "jobType" (see @ref AB_JOBQUEUE_jobType) */ void AB_JobQueue_SetJobType(AB_JOBQUEUE *p_struct, int p_src); /** Setter. * Use this function to set the member "transactionList" (see @ref AB_JOBQUEUE_transactionList) */ void AB_JobQueue_SetTransactionList(AB_JOBQUEUE *p_struct, AB_TRANSACTION_LIST2 *p_src); AB_JOBQUEUE_LIST *AB_JobQueue_List_dup(const AB_JOBQUEUE_LIST *p_src); AB_JOBQUEUE *AB_JobQueue_List_GetByJobType(const AB_JOBQUEUE_LIST *p_list, int p_cmp); void AB_JobQueue_AddTransaction(AB_JOBQUEUE *aq, AB_TRANSACTION *t); AB_TRANSACTION *AB_JobQueue_GetFirstTransaction(const AB_JOBQUEUE *aq); #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/aqbanking/backendsupport/queue.c0000664000175000017500000000540715037736054020411 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "queue.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "./queue_p.h" #include #include /* code headers */ /* macro functions */ GWEN_INHERIT_FUNCTIONS(AB_QUEUE) AB_QUEUE *AB_Queue_new(void) { AB_QUEUE *p_struct; GWEN_NEW_OBJECT(AB_QUEUE, p_struct) p_struct->_refCount=1; GWEN_INHERIT_INIT(AB_QUEUE, p_struct) /* members */ p_struct->userQueueList=AB_UserQueue_List_new(); /* virtual functions */ return p_struct; } void AB_Queue_free(AB_QUEUE *p_struct) { if (p_struct) { assert(p_struct->_refCount); if (p_struct->_refCount==1) { GWEN_INHERIT_FINI(AB_QUEUE, p_struct) /* members */ AB_UserQueue_List_free(p_struct->userQueueList); p_struct->userQueueList=NULL; p_struct->_refCount=0; GWEN_FREE_OBJECT(p_struct); } else p_struct->_refCount--; } } void AB_Queue_Attach(AB_QUEUE *p_struct) { assert(p_struct); assert(p_struct->_refCount); p_struct->_refCount++; } AB_QUEUE *AB_Queue_dup(const AB_QUEUE *p_src) { AB_QUEUE *p_struct; assert(p_src); p_struct=AB_Queue_new(); /* member "userQueueList" */ if (p_struct->userQueueList) { AB_UserQueue_List_free(p_struct->userQueueList); p_struct->userQueueList=NULL; p_struct->userQueueList=NULL; } if (p_src->userQueueList) { p_struct->userQueueList=AB_UserQueue_List_dup(p_src->userQueueList); } return p_struct; } AB_QUEUE *AB_Queue_copy(AB_QUEUE *p_struct, const AB_QUEUE *p_src) { assert(p_struct); assert(p_src); /* member "userQueueList" */ if (p_struct->userQueueList) { AB_UserQueue_List_free(p_struct->userQueueList); p_struct->userQueueList=NULL; p_struct->userQueueList=NULL; } if (p_src->userQueueList) { p_struct->userQueueList=AB_UserQueue_List_dup(p_src->userQueueList); } return p_struct; } AB_USERQUEUE_LIST *AB_Queue_GetUserQueueList(const AB_QUEUE *p_struct){ assert(p_struct); return p_struct->userQueueList; } void AB_Queue_SetUserQueueList(AB_QUEUE *p_struct, AB_USERQUEUE_LIST *p_src){ assert(p_struct); if (p_struct->userQueueList) { AB_UserQueue_List_free(p_struct->userQueueList); p_struct->userQueueList=NULL; p_struct->userQueueList=NULL; } p_struct->userQueueList=p_src; } AB_USERQUEUE *AB_Queue_FindUserQueue(const AB_QUEUE *q, AB_USER *u) { AB_USERQUEUE *uq; uq=AB_UserQueue_List_First(q->userQueueList); while(uq) { if (AB_UserQueue_GetUser(uq)==u) return uq; uq=AB_UserQueue_List_Next(uq); } return NULL; } /* code headers */ aqbanking-6.6.1/src/libs/aqbanking/backendsupport/ab_userqueue_list.tm20000664000175000017500000000034115037736054023255 00000000000000 AB_USERQUEUE_LIST AB_UserQueue_List aqbanking-6.6.1/src/libs/aqbanking/backendsupport/swiftdescr.h0000664000175000017500000001765315037736054021455 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "swiftdescr.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef AB_SWIFT_DESCR_SWIFTDESCR_H #define AB_SWIFT_DESCR_SWIFTDESCR_H #ifdef __cplusplus extern "C" { #endif /** @page P_AB_SWIFT_DESCR Structure AB_SWIFT_DESCR

This page describes the properties of AB_SWIFT_DESCR.

AB_SWIFT_DESCR

This class holds a SWIFT document descriptor like "pain.001.002.03". Such a descriptor can be parsed into an object of this class via AB_SwiftDescr_FromString(). The element of the string given above will go into the following fields: pain -> family 001 -> version1 002 -> version2 03 -> version3 @anchor AB_SWIFT_DESCR_family

family

Family of descriptors (e.g. "pain" in "pain.001.001.03")

Set this property with @ref AB_SwiftDescr_SetFamily(), get it with @ref AB_SwiftDescr_GetFamily().

@anchor AB_SWIFT_DESCR_version1

version1

First part of the version (i.e. the "001" in "pain.001.002.03")

Set this property with @ref AB_SwiftDescr_SetVersion1(), get it with @ref AB_SwiftDescr_GetVersion1().

@anchor AB_SWIFT_DESCR_version2

version2

Second part of the version (i.e. the "002" in "pain.001.002.03")

Set this property with @ref AB_SwiftDescr_SetVersion2(), get it with @ref AB_SwiftDescr_GetVersion2().

@anchor AB_SWIFT_DESCR_version3

version3

Third part of the version (i.e. the "03" in "pain.001.002.03")

Set this property with @ref AB_SwiftDescr_SetVersion3(), get it with @ref AB_SwiftDescr_GetVersion3().

@anchor AB_SWIFT_DESCR_alias1

alias1

Alias string for the given descriptor. This can be used to store additional names with descriptor (e.g. when searching for a special descriptor by a given name you can store the name of the originally searched name here).

Set this property with @ref AB_SwiftDescr_SetAlias1(), get it with @ref AB_SwiftDescr_GetAlias1().

@anchor AB_SWIFT_DESCR_alias2

alias2

Another alias string for the given descriptor. This can be used to store additional names with descriptor (e.g. when searching for a special descriptor by a given name you can store the name of the originally searched name here).

Set this property with @ref AB_SwiftDescr_SetAlias2(), get it with @ref AB_SwiftDescr_GetAlias2().

*/ /* needed system headers */ #include #include #include #include /* pre-headers */ #include #include #include #include #include typedef struct AB_SWIFT_DESCR AB_SWIFT_DESCR; GWEN_LIST_FUNCTION_DEFS(AB_SWIFT_DESCR, AB_SwiftDescr) /* post-headers */ /** Constructor. */ AB_SWIFT_DESCR *AB_SwiftDescr_new(void); /** Destructor. */ void AB_SwiftDescr_free(AB_SWIFT_DESCR *p_struct); void AB_SwiftDescr_Attach(AB_SWIFT_DESCR *p_struct); AB_SWIFT_DESCR *AB_SwiftDescr_dup(const AB_SWIFT_DESCR *p_src); AB_SWIFT_DESCR *AB_SwiftDescr_copy(AB_SWIFT_DESCR *p_struct, const AB_SWIFT_DESCR *p_src); /** Getter. * Use this function to get the member "family" (see @ref AB_SWIFT_DESCR_family) */ const char *AB_SwiftDescr_GetFamily(const AB_SWIFT_DESCR *p_struct); /** Getter. * Use this function to get the member "version1" (see @ref AB_SWIFT_DESCR_version1) */ int AB_SwiftDescr_GetVersion1(const AB_SWIFT_DESCR *p_struct); /** Getter. * Use this function to get the member "version2" (see @ref AB_SWIFT_DESCR_version2) */ int AB_SwiftDescr_GetVersion2(const AB_SWIFT_DESCR *p_struct); /** Getter. * Use this function to get the member "version3" (see @ref AB_SWIFT_DESCR_version3) */ int AB_SwiftDescr_GetVersion3(const AB_SWIFT_DESCR *p_struct); /** Getter. * Use this function to get the member "alias1" (see @ref AB_SWIFT_DESCR_alias1) */ const char *AB_SwiftDescr_GetAlias1(const AB_SWIFT_DESCR *p_struct); /** Getter. * Use this function to get the member "alias2" (see @ref AB_SWIFT_DESCR_alias2) */ const char *AB_SwiftDescr_GetAlias2(const AB_SWIFT_DESCR *p_struct); /** Setter. * Use this function to set the member "family" (see @ref AB_SWIFT_DESCR_family) */ void AB_SwiftDescr_SetFamily(AB_SWIFT_DESCR *p_struct, const char *p_src); /** Setter. * Use this function to set the member "version1" (see @ref AB_SWIFT_DESCR_version1) */ void AB_SwiftDescr_SetVersion1(AB_SWIFT_DESCR *p_struct, int p_src); /** Setter. * Use this function to set the member "version2" (see @ref AB_SWIFT_DESCR_version2) */ void AB_SwiftDescr_SetVersion2(AB_SWIFT_DESCR *p_struct, int p_src); /** Setter. * Use this function to set the member "version3" (see @ref AB_SWIFT_DESCR_version3) */ void AB_SwiftDescr_SetVersion3(AB_SWIFT_DESCR *p_struct, int p_src); /** Setter. * Use this function to set the member "alias1" (see @ref AB_SWIFT_DESCR_alias1) */ void AB_SwiftDescr_SetAlias1(AB_SWIFT_DESCR *p_struct, const char *p_src); /** Setter. * Use this function to set the member "alias2" (see @ref AB_SWIFT_DESCR_alias2) */ void AB_SwiftDescr_SetAlias2(AB_SWIFT_DESCR *p_struct, const char *p_src); AB_SWIFT_DESCR_LIST *AB_SwiftDescr_List_dup(const AB_SWIFT_DESCR_LIST *p_src); void AB_SwiftDescr_ReadDb(AB_SWIFT_DESCR *p_struct, GWEN_DB_NODE *p_db); int AB_SwiftDescr_WriteDb(const AB_SWIFT_DESCR *p_struct, GWEN_DB_NODE *p_db); AB_SWIFT_DESCR *AB_SwiftDescr_fromDb(GWEN_DB_NODE *p_db); int AB_SwiftDescr_toDb(const AB_SWIFT_DESCR *p_struct, GWEN_DB_NODE *p_db); void AB_SwiftDescr_ReadXml(AB_SWIFT_DESCR *p_struct, GWEN_XMLNODE *p_db); void AB_SwiftDescr_WriteXml(const AB_SWIFT_DESCR *p_struct, GWEN_XMLNODE *p_db); void AB_SwiftDescr_toXml(const AB_SWIFT_DESCR *p_struct, GWEN_XMLNODE *p_db); AB_SWIFT_DESCR *AB_SwiftDescr_fromXml(GWEN_XMLNODE *p_db); /** * Check whether a given SWIFT descriptor matches the given criteria. * @param a descriptor to match against * @param wantedFamily descriptor family, e.g. "pain" or "camt" (wildcards and jokers allowed) * @param wantedVersion1 first part of the version to match (0 matches all) * @param wantedVersion2 second part of the version to match (0 matches all) * @param wantedVersion3 third part of the version to match (0 matches all) */ int AB_SwiftDescr_Matches(const AB_SWIFT_DESCR *a, const char *wantedFamily, int wantedVersion1, int wantedVersion2, int wantedVersion3); /** * Find first SWIFT descriptor in a list by given criteria. * @param dl list of descriptors to search in * @param wantedFamily descriptor family, e.g. "pain" or "camt" (wildcards and jokers allowed) * @param wantedVersion1 first part of the version to match (0 matches all) * @param wantedVersion2 second part of the version to match (0 matches all) * @param wantedVersion3 third part of the version to match (0 matches all) */ AB_SWIFT_DESCR *AB_SwiftDescr_List_FindFirst(const AB_SWIFT_DESCR_LIST *dl, const char *wantedFamily, int wantedVersion1, int wantedVersion2, int wantedVersion3); /** * Find next SWIFT descriptor in a list by given criteria. * @param d last descriptor checked (i.e. search in the following descriptors) * @param wantedFamily descriptor family, e.g. "pain" or "camt" (wildcards and jokers allowed) * @param wantedVersion1 first part of the version to match (0 matches all) * @param wantedVersion2 second part of the version to match (0 matches all) * @param wantedVersion3 third part of the version to match (0 matches all) */ AB_SWIFT_DESCR *AB_SwiftDescr_List_FindNext(AB_SWIFT_DESCR *d, const char *wantedFamily, int wantedVersion1, int wantedVersion2, int wantedVersion3); /** * Create a SWIFT descriptor from a given string. * * Example strings are "pain.001.002.03" or "camt_054_001_02". * @return created descriptor (NULL for invalid string) */ AB_SWIFT_DESCR *AB_SwiftDescr_FromString(const char *s); #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/aqbanking/backendsupport/userqueue.c0000664000175000017500000001075415037736054021311 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "userqueue.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "./userqueue_p.h" #include #include /* code headers */ /* macro functions */ GWEN_LIST_FUNCTIONS(AB_USERQUEUE, AB_UserQueue) GWEN_INHERIT_FUNCTIONS(AB_USERQUEUE) AB_USERQUEUE *AB_UserQueue_new(void) { AB_USERQUEUE *p_struct; GWEN_NEW_OBJECT(AB_USERQUEUE, p_struct) p_struct->_refCount=1; GWEN_INHERIT_INIT(AB_USERQUEUE, p_struct) GWEN_LIST_INIT(AB_USERQUEUE, p_struct) /* members */ p_struct->userId=0; p_struct->user=NULL; p_struct->accountQueueList=AB_AccountQueue_List_new(); /* virtual functions */ return p_struct; } void AB_UserQueue_free(AB_USERQUEUE *p_struct) { if (p_struct) { assert(p_struct->_refCount); if (p_struct->_refCount==1) { GWEN_INHERIT_FINI(AB_USERQUEUE, p_struct) GWEN_LIST_FINI(AB_USERQUEUE, p_struct) /* members */ AB_AccountQueue_List_free(p_struct->accountQueueList); p_struct->accountQueueList=NULL; p_struct->_refCount=0; GWEN_FREE_OBJECT(p_struct); } else p_struct->_refCount--; } } void AB_UserQueue_Attach(AB_USERQUEUE *p_struct) { assert(p_struct); assert(p_struct->_refCount); p_struct->_refCount++; } AB_USERQUEUE *AB_UserQueue_dup(const AB_USERQUEUE *p_src) { AB_USERQUEUE *p_struct; assert(p_src); p_struct=AB_UserQueue_new(); /* member "userId" */ p_struct->userId=p_src->userId; /* member "user" */ p_struct->user=p_src->user; /* member "accountQueueList" */ if (p_struct->accountQueueList) { AB_AccountQueue_List_free(p_struct->accountQueueList); p_struct->accountQueueList=NULL; p_struct->accountQueueList=NULL; } if (p_src->accountQueueList) { p_struct->accountQueueList=AB_AccountQueue_List_dup(p_src->accountQueueList); } return p_struct; } uint32_t AB_UserQueue_GetUserId(const AB_USERQUEUE *p_struct){ assert(p_struct); return p_struct->userId; } AB_USER *AB_UserQueue_GetUser(const AB_USERQUEUE *p_struct){ assert(p_struct); return p_struct->user; } AB_ACCOUNTQUEUE_LIST *AB_UserQueue_GetAccountQueueList(const AB_USERQUEUE *p_struct){ assert(p_struct); return p_struct->accountQueueList; } void AB_UserQueue_SetUserId(AB_USERQUEUE *p_struct, uint32_t p_src){ assert(p_struct); p_struct->userId=p_src; } void AB_UserQueue_SetUser(AB_USERQUEUE *p_struct, AB_USER *p_src){ assert(p_struct); p_struct->user=p_src; } void AB_UserQueue_SetAccountQueueList(AB_USERQUEUE *p_struct, AB_ACCOUNTQUEUE_LIST *p_src){ assert(p_struct); if (p_struct->accountQueueList) { AB_AccountQueue_List_free(p_struct->accountQueueList); p_struct->accountQueueList=NULL; p_struct->accountQueueList=NULL; } p_struct->accountQueueList=p_src; } AB_USERQUEUE_LIST *AB_UserQueue_List_dup(const AB_USERQUEUE_LIST *p_src) { AB_USERQUEUE_LIST *p_dest; AB_USERQUEUE *p_elem; assert(p_src); p_dest=AB_UserQueue_List_new(); p_elem=AB_UserQueue_List_First(p_src); while(p_elem) { AB_USERQUEUE *p_cpy; p_cpy=AB_UserQueue_dup(p_elem); AB_UserQueue_List_Add(p_cpy, p_dest); p_elem=AB_UserQueue_List_Next(p_elem); } return p_dest; } AB_USERQUEUE *AB_UserQueue_List_GetByUserId(const AB_USERQUEUE_LIST *p_list, uint32_t p_cmp){ AB_USERQUEUE *p_struct; assert(p_list); p_struct = AB_UserQueue_List_First(p_list); while(p_struct) { int p_rv; if (p_struct->userId==p_cmp) p_rv=0; else if (p_cmpuserId) p_rv=-1; else p_rv=1; if (p_rv == 0) return p_struct; p_struct = AB_UserQueue_List_Next(p_struct); } return NULL; } AB_ACCOUNTQUEUE *AB_UserQueue_FindAccountQueue(const AB_USERQUEUE *uq, AB_ACCOUNT *acc) { AB_ACCOUNTQUEUE *aq; aq=AB_AccountQueue_List_First(uq->accountQueueList); while(aq) { if (AB_AccountQueue_GetAccount(aq)==acc) return aq; aq=AB_AccountQueue_List_Next(aq); } return NULL; } void AB_UserQueue_AddAccountQueue(AB_USERQUEUE *up, AB_ACCOUNTQUEUE *aq) { if (up->accountQueueList==NULL) up->accountQueueList=AB_AccountQueue_List_new(); AB_AccountQueue_List_Add(aq, up->accountQueueList); } AB_ACCOUNTQUEUE *AB_UserQueue_GetFirstAccountQueue(const AB_USERQUEUE *up) { if (up->accountQueueList==NULL) return NULL; return AB_AccountQueue_List_First(up->accountQueueList); } /* code headers */ aqbanking-6.6.1/src/libs/aqbanking/account_type.c0000664000175000017500000000426414043610744016727 00000000000000/*************************************************************************** begin : Sat Jun 30 2018 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "account_type.h" #include const char *AB_AccountType_toChar(AB_ACCOUNT_TYPE ty) { switch (ty) { case AB_AccountType_Bank: return "bank"; case AB_AccountType_CreditCard: return "creditcard"; case AB_AccountType_Checking: return "checking"; case AB_AccountType_Savings: return "savings"; case AB_AccountType_Investment: return "investment"; case AB_AccountType_Cash: return "cash"; case AB_AccountType_MoneyMarket: return "moneymarket"; case AB_AccountType_Credit: return "credit"; case AB_AccountType_Unknown: return "unknown"; case AB_AccountType_Unspecified: return "unspecified"; case AB_AccountType_Invalid: case AB_AccountType_Last: break; } return NULL; } AB_ACCOUNT_TYPE AB_AccountType_fromChar(const char *s) { if (s && *s) { if (strcasecmp(s, "bank")==0) return AB_AccountType_Bank; else if (strcasecmp(s, "creditcard")==0) return AB_AccountType_CreditCard; else if (strcasecmp(s, "checking")==0) return AB_AccountType_Checking; else if (strcasecmp(s, "savings")==0) return AB_AccountType_Savings; else if (strcasecmp(s, "investment")==0) return AB_AccountType_Investment; else if (strcasecmp(s, "cash")==0) return AB_AccountType_Cash; else if (strcasecmp(s, "moneymarket")==0) return AB_AccountType_MoneyMarket; else if (strcasecmp(s, "credit")==0) return AB_AccountType_Credit; else if (strcasecmp(s, "unspecified")==0) return AB_AccountType_Unspecified; else if (strcasecmp(s, "unknown")==0) return AB_AccountType_Unknown; } return AB_AccountType_Invalid; } aqbanking-6.6.1/src/libs/aqbanking/banking_account.c0000664000175000017500000000360414043610744017354 00000000000000/*************************************************************************** begin : Wed Nov 28 2018 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ /* This file is included by banking.c */ int AB_Banking_Read_AccountConfig(const AB_BANKING *ab, uint32_t uid, int doLock, int doUnlock, GWEN_DB_NODE **pDb) { int rv; rv=AB_Banking_ReadConfigGroup(ab, AB_CFG_GROUP_ACCOUNTS, uid, doLock, doUnlock, pDb); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); return rv; } return rv; } int AB_Banking_Has_AccountConfig(const AB_BANKING *ab, uint32_t uid) { int rv; rv=AB_Banking_HasConfigGroup(ab, AB_CFG_GROUP_ACCOUNTS, uid); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); return rv; } return rv; } int AB_Banking_Write_AccountConfig(AB_BANKING *ab, uint32_t uid, int doLock, int doUnlock, GWEN_DB_NODE *db) { int rv; rv=AB_Banking_WriteConfigGroup(ab, AB_CFG_GROUP_ACCOUNTS, uid, doLock, doUnlock, db); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); return rv; } return 0; } int AB_Banking_Delete_AccountConfig(AB_BANKING *ab, uint32_t uid) { int rv; rv=AB_Banking_DeleteConfigGroup(ab, AB_CFG_GROUP_ACCOUNTS, uid); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); return rv; } return 0; } int AB_Banking_Unlock_AccountConfig(AB_BANKING *ab, uint32_t uid) { int rv; rv=AB_Banking_UnlockConfigGroup(ab, AB_CFG_GROUP_ACCOUNTS, uid); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); return rv; } return 0; } aqbanking-6.6.1/src/libs/aqbanking/banking_online.h0000664000175000017500000000705514043610744017215 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQBANKING_BANKING_OB_H #define AQBANKING_BANKING_OB_H #include #include #ifdef __cplusplus extern "C" { #endif /** @name Account Spec Functions * * AqBanking holds a list of account specs for every account managed by AqBanking. * You can retrieve the complete list of account specs for all accounts known to AqBanking (@ref AB_Banking6_GetAccountSpecList) * or directly request an account spec by its unique id (@ref AB_Banking6_GetAccountSpecByUniqueId). */ /*@{*/ /** * Returns the list of AB_ACCOUNT_SPEC objects for all known accounts. The caller is responsible for freeing the list returned (if any) * via @ref AB_AccountSpec_List_free. * @return 0 if ok, error code otherwise (see @ref AB_ERROR) * @param ab pointer to the AB_BANKING object * @param pAccountSpecList Pointer to a variable receiving the list of account specs. */ AQBANKING_API int AB_Banking_GetAccountSpecList(const AB_BANKING *ab, AB_ACCOUNT_SPEC_LIST **pAccountSpecList); /** * Returns an AB_ACCOUNT_SPEC object for the account with the given id (or NULL if not found). * The caller is responsible for freeing the data returned (if any) via @ref ABS_AccountSpec_free. * @return 0 if ok, error code otherwise (see @ref AB_ERROR) * @param ab pointer to the AB_BANKING object * @param uniqueAccountId Unique account id * @param pAccountSpec Pointer to a variable to receive the matching account spec. */ AQBANKING_API int AB_Banking_GetAccountSpecByUniqueId(const AB_BANKING *ab, uint32_t uniqueAccountId, AB_ACCOUNT_SPEC **pAccountSpec); /*@}*/ /** @name Sending Banking Commands * */ /*@{*/ /** * Ask AqBanking for a new job id which can be used with @ref AB_Transaction_SetId(). * * When sending jobs via @ref AB_Banking_SendCommands() AqBanking assigns a unique job id for every * job in the list. However, applications can assign such an id beforehand to work with it. */ AQBANKING_API uint32_t AB_Banking_ReserveJobId(AB_BANKING *ab); /** *

* This function sends all jobs from the given list to their * respective backend. The results will be stored in the given im-/exporter * context. *

*

* This function does @b not take over or free the commands. *

* @return 0 if ok, error code otherwise (see @ref AB_ERROR) * @param ab pointer to the AB_BANKING object * @param commandList list of commands to execute * @param ctx im-/exporter context to receive the results */ AQBANKING_API int AB_Banking_SendCommands(AB_BANKING *ab, AB_TRANSACTION_LIST2 *commandList, AB_IMEXPORTER_CONTEXT *ctx); /*@}*/ /** @name Compatibility Functions for KMyMoney * * These functions should not be used in new applications. */ /*@{*/ AQBANKING_API int AB_Banking_SetAccountSpecAlias(AB_BANKING *ab, const AB_ACCOUNT_SPEC *as, const char *alias); AQBANKING_API AB_ACCOUNT_SPEC *AB_Banking_GetAccountSpecByAlias(AB_BANKING *ab, const char *alias); /*@}*/ #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/aqbanking/Makefile.in0000644000175000017500000007704715037736024016146 00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/libs/aqbanking ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/distri.m4 $(top_srcdir)/m4/gwenhywfar.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/os.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(iheader_HEADERS) \ $(noinst_HEADERS) $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = version.h system.h CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libaqbanking_base_la_DEPENDENCIES = backendsupport/libabbesupport.la \ types/libabtypes.la gui/libabgui.la dialogs/libabdialogs.la am_libaqbanking_base_la_OBJECTS = account_type.lo banking.lo libaqbanking_base_la_OBJECTS = $(am_libaqbanking_base_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/account_type.Plo \ ./$(DEPDIR)/banking.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libaqbanking_base_la_SOURCES) DIST_SOURCES = $(libaqbanking_base_la_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(iheaderdir)" HEADERS = $(iheader_HEADERS) $(noinst_HEADERS) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir distdir-am am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/system.h.in \ $(srcdir)/version.h.in $(top_srcdir)/depcomp README DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ADD_ACLOCAL_FLAGS = @ADD_ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AQBANKING_CLI_VERSION_STRING = @AQBANKING_CLI_VERSION_STRING@ AQBANKING_FINTS_VERSION_STRING = @AQBANKING_FINTS_VERSION_STRING@ AQBANKING_SO_AGE = @AQBANKING_SO_AGE@ AQBANKING_SO_CURRENT = @AQBANKING_SO_CURRENT@ AQBANKING_SO_EFFECTIVE = @AQBANKING_SO_EFFECTIVE@ AQBANKING_SO_REVISION = @AQBANKING_SO_REVISION@ AQBANKING_VERSION_BUILD = @AQBANKING_VERSION_BUILD@ AQBANKING_VERSION_FULL_STRING = @AQBANKING_VERSION_FULL_STRING@ AQBANKING_VERSION_MAJOR = @AQBANKING_VERSION_MAJOR@ AQBANKING_VERSION_MINOR = @AQBANKING_VERSION_MINOR@ AQBANKING_VERSION_PATCHLEVEL = @AQBANKING_VERSION_PATCHLEVEL@ AQBANKING_VERSION_RELEASE_STRING = @AQBANKING_VERSION_RELEASE_STRING@ AQBANKING_VERSION_STRING = @AQBANKING_VERSION_STRING@ AQBANKING_VERSION_TAG = @AQBANKING_VERSION_TAG@ AQEBICS_CFLAGS = @AQEBICS_CFLAGS@ AQEBICS_LIBS = @AQEBICS_LIBS@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATETIME = @DATETIME@ # We define those here because within the configure script the variables # $(datadir) et al are not available. DEFS = @DEFS@ -DEXEEXT=\"$(EXEEXT)\" \ -DLOCALEDIR=\"@aqbanking_locale_searchdir@\" \ -DAQBANKING_PLUGINS=\"$(aqbanking_plugin_searchdir)\" \ -DAQBANKING_SYSCONF_DIR=\"$(aqbanking_cfg_searchdir)\" \ -DAQBANKING_DATA_DIR=\"$(aqbanking_data_searchdir)\" \ -DCOMPILE_DATETIME=\"@DATETIME@\" DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_EXCLUDE_PATTERNS = @DOXYGEN_EXCLUDE_PATTERNS@ DOXYGEN_FILE_PATTERNS = @DOXYGEN_FILE_PATTERNS@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENGUI_GTK2_CFLAGS = @GWENGUI_GTK2_CFLAGS@ GWENGUI_GTK2_LIBS = @GWENGUI_GTK2_LIBS@ GWENHYWFAR_MINIMUM_VERSION = @GWENHYWFAR_MINIMUM_VERSION@ HAVE_GWENGUI_GTK2 = @HAVE_GWENGUI_GTK2@ HAVE_I18N = @HAVE_I18N@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIBXSLT_CFLAGS = @LIBXSLT_CFLAGS@ LIBXSLT_LIBS = @LIBXSLT_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_SUPPORTS_QT = @MSGFMT_SUPPORTS_QT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ TUTORIALS = @TUTORIALS@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XMLMERGE = @XMLMERGE@ XMLSEC_CFLAGS = @XMLSEC_CFLAGS@ XMLSEC_LIBS = @XMLSEC_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ aqbanking_backends = @aqbanking_backends@ aqbanking_cfg_searchdir = @aqbanking_cfg_searchdir@ aqbanking_data_searchdir = @aqbanking_data_searchdir@ aqbanking_headerdir = @aqbanking_headerdir@ aqbanking_headerdir_am = @aqbanking_headerdir_am@ aqbanking_includes = @aqbanking_includes@ aqbanking_internal_libs = @aqbanking_internal_libs@ aqbanking_ldflags = @aqbanking_ldflags@ aqbanking_libs = @aqbanking_libs@ aqbanking_locale_searchdir = @aqbanking_locale_searchdir@ aqbanking_modules = @aqbanking_modules@ aqbanking_pkgdatadir = @aqbanking_pkgdatadir@ aqbanking_plugin_searchdir = @aqbanking_plugin_searchdir@ aqbanking_plugindir = @aqbanking_plugindir@ aqbanking_plugins_backends_dirs = @aqbanking_plugins_backends_dirs@ aqbanking_plugins_backends_libs = @aqbanking_plugins_backends_libs@ aqbanking_plugins_bankinfo_dirs = @aqbanking_plugins_bankinfo_dirs@ aqbanking_plugins_bankinfo_libs = @aqbanking_plugins_bankinfo_libs@ aqbanking_plugins_imexporters_dirs = @aqbanking_plugins_imexporters_dirs@ aqbanking_plugins_imexporters_libs = @aqbanking_plugins_imexporters_libs@ aqbanking_plugins_parsers_dirs = @aqbanking_plugins_parsers_dirs@ aqbanking_symlinkdir = @aqbanking_symlinkdir@ aqbanking_sys_is_windows = @aqbanking_sys_is_windows@ aqbankingpp_modules = @aqbankingpp_modules@ aqebics_datadir = @aqebics_datadir@ aqebics_includes = @aqebics_includes@ aqebics_internal_libs = @aqebics_internal_libs@ aqebics_ldflags = @aqebics_ldflags@ aqebics_libs = @aqebics_libs@ aqfints_datadir = @aqfints_datadir@ aqhbci_datadir = @aqhbci_datadir@ aqhbci_includes = @aqhbci_includes@ aqhbci_internal_libs = @aqhbci_internal_libs@ aqhbci_ldflags = @aqhbci_ldflags@ aqhbci_libs = @aqhbci_libs@ aqofxconnect_includes = @aqofxconnect_includes@ aqofxconnect_internal_libs = @aqofxconnect_internal_libs@ aqofxconnect_libs = @aqofxconnect_libs@ aqpaypal_includes = @aqpaypal_includes@ aqpaypal_internal_libs = @aqpaypal_internal_libs@ aqpaypal_libs = @aqpaypal_libs@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gmp_libs = @gmp_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_dir = @gwenhywfar_dir@ gwenhywfar_has_crypt = @gwenhywfar_has_crypt@ gwenhywfar_headers = @gwenhywfar_headers@ gwenhywfar_includes = @gwenhywfar_includes@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_plugins = @gwenhywfar_plugins@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ typemaker2_exe = @typemaker2_exe@ visibility_cflags = @visibility_cflags@ with_aqebics = @with_aqebics@ with_aqhbci = @with_aqhbci@ SUBDIRS = types gui backendsupport typemaker2 dialogs AM_CPPFLAGS = \ -I$(srcdir)/.. \ -I$(top_builddir)/src/libs \ -I$(top_builddir)/src/libs/plugins/backends \ -I$(top_srcdir) \ $(gwenhywfar_includes) noinst_LTLIBRARIES = libaqbanking_base.la AM_CFLAGS = -DBUILDING_AQBANKING @visibility_cflags@ EXTRA_DIST = \ banking_account.c \ banking_accspec.c \ banking_bankinfo.c \ banking_cfg.c \ banking_dialogs.c \ banking_imex.c \ banking_init.c \ banking_online.c \ banking_transaction.c \ banking_update.c \ banking_user.c \ banking_compat.c \ system.h.in \ version.h.in noinst_HEADERS = \ banking_be.h \ banking_l.h \ banking_p.h \ i18n_l.h iheaderdir = @aqbanking_headerdir_am@/aqbanking iheader_HEADERS = \ account_type.h \ banking.h \ banking_dialogs.h \ banking_imex.h \ banking_bankinfo.h \ banking_online.h \ banking_transaction.h \ error.h \ system.h \ version.h libaqbanking_base_la_SOURCES = \ account_type.c \ banking.c libaqbanking_base_la_LIBADD = \ backendsupport/libabbesupport.la \ types/libabtypes.la \ gui/libabgui.la \ dialogs/libabdialogs.la all: all-recursive .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libs/aqbanking/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libs/aqbanking/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): version.h: $(top_builddir)/config.status $(srcdir)/version.h.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ system.h: $(top_builddir)/config.status $(srcdir)/system.h.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libaqbanking_base.la: $(libaqbanking_base_la_OBJECTS) $(libaqbanking_base_la_DEPENDENCIES) $(EXTRA_libaqbanking_base_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libaqbanking_base_la_OBJECTS) $(libaqbanking_base_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/account_type.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/banking.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-iheaderHEADERS: $(iheader_HEADERS) @$(NORMAL_INSTALL) @list='$(iheader_HEADERS)'; test -n "$(iheaderdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(iheaderdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(iheaderdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(iheaderdir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(iheaderdir)" || exit $$?; \ done uninstall-iheaderHEADERS: @$(NORMAL_UNINSTALL) @list='$(iheader_HEADERS)'; test -n "$(iheaderdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(iheaderdir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(iheaderdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-recursive -rm -f ./$(DEPDIR)/account_type.Plo -rm -f ./$(DEPDIR)/banking.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-iheaderHEADERS install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f ./$(DEPDIR)/account_type.Plo -rm -f ./$(DEPDIR)/banking.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-iheaderHEADERS .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ am--depfiles check check-am clean clean-generic clean-libtool \ clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-iheaderHEADERS install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am uninstall-iheaderHEADERS .PRECIOUS: Makefile sources: for f in $(libaqbanking_base_la_SOURCES) $(EXTRA_DIST); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d sources; \ done built_sources: for d in $(SUBDIRS); do \ $(MAKE) -C $$d built_sources; \ done ; typefiles: for d in $(SUBDIRS); do \ $(MAKE) -C $$d typefiles; \ done typedefs: for d in $(SUBDIRS); do \ $(MAKE) -C $$d typedefs; \ done cppcheck: for f in $(libaqbanking_base_la_SOURCES); do \ cppcheck --force $$f ; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done splint: for f in $(libaqbanking_base_la_SOURCES); do \ splint $(AM_CPPFLAGS) $(DEFS) +enumint -unrecogcomments +posixlib -predboolint +boolint -boolops $$f ; \ done # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: aqbanking-6.6.1/src/libs/aqbanking/system.h.in0000664000175000017500000000111214044534775016167 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin at libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AQBANKING_SYSTEM_H #define AQBANKING_SYSTEM_H #define AQBANKING_SYS_IS_WINDOWS @aqbanking_sys_is_windows@ #define AQBANKING_SYSTEM "@OSYSTEM@" #endif aqbanking-6.6.1/src/libs/aqbanking/banking.c0000664000175000017500000002772514627071733015661 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif /* don't warn about our own deprecated functions */ //#define AQBANKING_NOWARN_DEPRECATED #include "banking_p.h" #include "backendsupport/provider_l.h" #include "backendsupport/imexporter_l.h" #include "backendsupport/bankinfoplugin_l.h" #include "i18n_l.h" #include "banking_dialogs.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #ifdef OS_WIN32 # define ftruncate chsize # define DIRSEP "\\" #else # define DIRSEP "/" #endif GWEN_INHERIT_FUNCTIONS(AB_BANKING) #include #include "banking_init.c" #include "banking_cfg.c" #include "banking_update.c" #include "banking_accspec.c" #include "banking_account.c" #include "banking_user.c" #include "banking_transaction.c" #include "banking_online.c" #include "banking_imex.c" #include "banking_bankinfo.c" #include "banking_dialogs.c" #include "banking_compat.c" static void _logMsgForJobId(const AB_BANKING *ab, uint32_t jobId, const char *msg); AB_BANKING *AB_Banking_new(const char *appName, const char *dname, uint32_t extensions) { AB_BANKING *ab; GWEN_BUFFER *nbuf; char buffer[256]; int err; assert(appName); err=GWEN_Init(); if (err) { DBG_ERROR_ERR(AQBANKING_LOGDOMAIN, err); abort(); } DBG_INFO(AQBANKING_LOGDOMAIN, "Application \"%s\" compiled with extensions %08x", appName, extensions); nbuf=GWEN_Buffer_new(0, 256, 0, 1); if (GWEN_Text_EscapeToBufferTolerant(appName, nbuf)) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Bad application name, aborting."); GWEN_Buffer_free(nbuf); abort(); } else { char *s; s=GWEN_Buffer_GetStart(nbuf); while (*s) { *s=tolower(*s); s++; } } GWEN_NEW_OBJECT(AB_BANKING, ab); GWEN_INHERIT_INIT(AB_BANKING, ab); ab->appEscName=strdup(GWEN_Buffer_GetStart(nbuf)); ab->appName=strdup(appName); ab->cryptTokenList=GWEN_Crypt_Token_List2_new(); ab->dbRuntimeConfig=GWEN_DB_Group_new("runtimeConfig"); GWEN_Buffer_free(nbuf); { int rv; rv=AB_Banking_CopyOldSettingsFolderIfNeeded(ab); if (rv<0) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Could not copy old settings folder (%d), ignoring", rv); } } AB_Banking__GetConfigManager(ab, dname); ab->appExtensions=extensions; if (getcwd(buffer, sizeof(buffer)-1)==0) { DBG_ERROR(AQBANKING_LOGDOMAIN, "getcwd: %s", strerror(errno)); } else { struct stat st; if (stat(buffer, &st)) { DBG_ERROR(AQBANKING_LOGDOMAIN, "stat(%s): %s", buffer, strerror(errno)); } else { ab->startFolder=strdup(buffer); } } return ab; } void AB_Banking_free(AB_BANKING *ab) { if (ab) { DBG_INFO(AQBANKING_LOGDOMAIN, "Destroying AB_BANKING"); GWEN_INHERIT_FINI(AB_BANKING, ab); GWEN_DB_Group_free(ab->dbRuntimeConfig); AB_Banking_ClearCryptTokenList(ab); GWEN_Crypt_Token_List2_free(ab->cryptTokenList); GWEN_ConfigMgr_free(ab->configMgr); free(ab->startFolder); free(ab->appName); free(ab->appEscName); free(ab->dataDir); GWEN_FREE_OBJECT(ab); GWEN_Fini(); } } int AB_Banking_GetNamedUniqueId(AB_BANKING *ab, const char *idName, int startAtStdUniqueId) { int rv; int uid=0; GWEN_DB_NODE *dbConfig=NULL; rv=GWEN_ConfigMgr_LockGroup(ab->configMgr, AB_CFG_GROUP_MAIN, "uniqueId"); if (rv<0) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Unable to lock main config (%d)", rv); return rv; } rv=GWEN_ConfigMgr_GetGroup(ab->configMgr, AB_CFG_GROUP_MAIN, "uniqueId", &dbConfig); if (rv<0) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Unable to read main config (%d)", rv); return rv; } if (idName && *idName) { GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(tbuf, "uniqueid-"); GWEN_Buffer_AppendString(tbuf, idName); uid=GWEN_DB_GetIntValue(dbConfig, GWEN_Buffer_GetStart(tbuf), 0, 0); if (uid==0 && startAtStdUniqueId) { /* not set yet, start with a unique id from standard source */ uid=GWEN_DB_GetIntValue(dbConfig, "uniqueId", 0, 0); uid++; GWEN_DB_SetIntValue(dbConfig, GWEN_DB_FLAGS_OVERWRITE_VARS, "uniqueId", uid); GWEN_DB_SetIntValue(dbConfig, GWEN_DB_FLAGS_OVERWRITE_VARS, GWEN_Buffer_GetStart(tbuf), uid); } else { uid++; GWEN_DB_SetIntValue(dbConfig, GWEN_DB_FLAGS_OVERWRITE_VARS, GWEN_Buffer_GetStart(tbuf), uid); } GWEN_Buffer_free(tbuf); } else { uid=GWEN_DB_GetIntValue(dbConfig, "uniqueId", 0, 0); uid++; GWEN_DB_SetIntValue(dbConfig, GWEN_DB_FLAGS_OVERWRITE_VARS, "uniqueId", uid); } rv=GWEN_ConfigMgr_SetGroup(ab->configMgr, AB_CFG_GROUP_MAIN, "uniqueId", dbConfig); if (rv<0) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Unable to write main config (%d)", rv); GWEN_ConfigMgr_UnlockGroup(ab->configMgr, AB_CFG_GROUP_MAIN, "uniqueId"); GWEN_DB_Group_free(dbConfig); return rv; } GWEN_DB_Group_free(dbConfig); /* unlock */ rv=GWEN_ConfigMgr_UnlockGroup(ab->configMgr, AB_CFG_GROUP_MAIN, "uniqueId"); if (rv<0) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Unable to unlock main config (%d)", rv); return rv; } return uid; } #if 0 GWEN_CONFIGMGR *AB_Banking_GetConfigMgr(AB_BANKING *ab) { assert(ab); return ab->configMgr; } #endif const char *AB_Banking_GetAppName(const AB_BANKING *ab) { assert(ab); return ab->appName; } const char *AB_Banking_GetEscapedAppName(const AB_BANKING *ab) { assert(ab); return ab->appEscName; } void AB_Banking_GetVersion(int *major, int *minor, int *patchlevel, int *build) { if (major) *major=AQBANKING_VERSION_MAJOR; if (minor) *minor=AQBANKING_VERSION_MINOR; if (patchlevel) *patchlevel=AQBANKING_VERSION_PATCHLEVEL; if (build) *build=AQBANKING_VERSION_BUILD; } void AB_Banking_RuntimeConfig_SetCharValue(AB_BANKING *ab, const char *varName, const char *value) { assert(ab); assert(ab->dbRuntimeConfig); GWEN_DB_SetCharValue(ab->dbRuntimeConfig, GWEN_DB_FLAGS_OVERWRITE_VARS, varName, value); } const char *AB_Banking_RuntimeConfig_GetCharValue(const AB_BANKING *ab, const char *varName, const char *defaultValue) { assert(ab); assert(ab->dbRuntimeConfig); return GWEN_DB_GetCharValue(ab->dbRuntimeConfig, varName, 0, defaultValue); } void AB_Banking_RuntimeConfig_SetIntValue(AB_BANKING *ab, const char *varName, int value) { assert(ab); assert(ab->dbRuntimeConfig); GWEN_DB_SetIntValue(ab->dbRuntimeConfig, GWEN_DB_FLAGS_OVERWRITE_VARS, varName, value); } int AB_Banking_RuntimeConfig_GetIntValue(const AB_BANKING *ab, const char *varName, int defaultValue) { assert(ab); assert(ab->dbRuntimeConfig); return GWEN_DB_GetIntValue(ab->dbRuntimeConfig, varName, 0, defaultValue); } GWEN_DIALOG *AB_Banking_GetNewUserDialog(AB_BANKING *ab, const char *backend, int mode) { /* AB_PROVIDER *pro; GWEN_DIALOG *dlg; assert(ab); pro=AB_Banking_GetProvider(ab, backend); if (!pro) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Backend \"%s\" not found", backend); return NULL; } dlg=AB_Provider_GetNewUserDialog(pro, mode); if (dlg==NULL) { DBG_INFO(AQBANKING_LOGDOMAIN, "Provider did not return a NewUser dialog (backend=%s, mode=%d)", backend, mode); return NULL; } return dlg; */ return NULL; } void AB_Banking_LogMsgForJobId(const AB_BANKING *ab, uint32_t jobId, const char *fmt, ...) { if (jobId>0) { GWEN_BUFFER *bf; va_list list; char *p; int maxUnsegmentedWrite; int rv; bf=GWEN_Buffer_new(0, 256, 0, 1); maxUnsegmentedWrite=GWEN_Buffer_GetMaxUnsegmentedWrite(bf); p=GWEN_Buffer_GetStart(bf)+GWEN_Buffer_GetPos(bf); /* prepare list for va_arg */ va_start(list, fmt); rv=vsnprintf(p, maxUnsegmentedWrite, fmt, list); if (rv<0) { DBG_ERROR(GWEN_LOGDOMAIN, "Error on vnsprintf (%d)", rv); GWEN_Buffer_free(bf); va_end(list); return; } else if (rv>=maxUnsegmentedWrite) { GWEN_Buffer_AllocRoom(bf, rv+1); maxUnsegmentedWrite=GWEN_Buffer_GetMaxUnsegmentedWrite(bf); p=GWEN_Buffer_GetStart(bf)+GWEN_Buffer_GetPos(bf); rv=vsnprintf(p, maxUnsegmentedWrite, fmt, list); if (rv<0) { DBG_ERROR(GWEN_LOGDOMAIN, "Error on vnsprintf (%d)", rv); GWEN_Buffer_free(bf); va_end(list); return; } } if (rv>0) { GWEN_Buffer_IncrementPos(bf, rv); GWEN_Buffer_AdjustUsedBytes(bf); _logMsgForJobId(ab, jobId, GWEN_Buffer_GetStart(bf)); } GWEN_Buffer_free(bf); va_end(list); } } void AB_Banking_LogCmdInfoMsgForJob(const AB_BANKING *ab, const AB_TRANSACTION *t, uint32_t jid, const char *msg) { if (jid>0) { GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 64, 0, 1); GWEN_Buffer_AppendString(tbuf, msg); AB_Banking_AddJobInfoToBuffer(t, tbuf); AB_Banking_LogMsgForJobId(ab, jid, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } } void _logMsgForJobId(const AB_BANKING *ab, uint32_t jobId, const char *msg) { GWEN_BUFFER *pathBuffer; int rv; FILE *f; pathBuffer=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(pathBuffer, ab->dataDir); GWEN_Buffer_AppendString(pathBuffer, GWEN_DIR_SEPARATOR_S "jobs" GWEN_DIR_SEPARATOR_S); GWEN_Buffer_AppendArgs(pathBuffer, "%02x/", (unsigned int)(jobId>>24) & 0xff); GWEN_Buffer_AppendArgs(pathBuffer, "%02x/", (unsigned int)(jobId>>16) & 0xff); GWEN_Buffer_AppendArgs(pathBuffer, "%02x/", (unsigned int)(jobId>>8) & 0xff); GWEN_Buffer_AppendArgs(pathBuffer, "%02x.log", (unsigned int)(jobId & 0xff)); rv=GWEN_Directory_GetPath(GWEN_Buffer_GetStart(pathBuffer), GWEN_PATH_FLAGS_VARIABLE | GWEN_PATH_FLAGS_CHECKROOT); if (rv<0) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Error preparing path for logfile \"%s\": %d", GWEN_Buffer_GetStart(pathBuffer), rv); GWEN_Buffer_free(pathBuffer); return; } f=fopen(GWEN_Buffer_GetStart(pathBuffer), "a"); if (f==NULL) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Error opening/creating logfile \"%s\": %s", GWEN_Buffer_GetStart(pathBuffer), strerror(errno)); GWEN_Buffer_free(pathBuffer); return; } else { GWEN_TIME *ti; GWEN_BUFFER *tiBuffer; ti=GWEN_CurrentTime(); tiBuffer=GWEN_Buffer_new(0, 32, 0, 1); GWEN_Time_toString(ti, "YYYY/MM/DD-hh:mm:ss", tiBuffer); fprintf(f, "%s %s\n", GWEN_Buffer_GetStart(tiBuffer), msg?msg:""); GWEN_Buffer_free(tiBuffer); fclose(f); GWEN_Buffer_free(pathBuffer); GWEN_Time_free(ti); } } aqbanking-6.6.1/src/libs/aqbanking/banking_transaction.h0000664000175000017500000000675314043610744020262 00000000000000/*************************************************************************** begin : Wed Nov 28 2018 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQBANKING_BANKING_TRANSACTION_H #define AQBANKING_BANKING_TRANSACTION_H #include #include #include #ifdef __cplusplus extern "C" { #endif /** @name Working with Transactions * */ /*@{*/ /** * Check transaction against limits: Check purpose. * @return 0 if okay, errorcode otherwise. * @param t transaction to check * @param lim limits to check against. */ AQBANKING_API int AB_Banking_CheckTransactionAgainstLimits_Purpose(const AB_TRANSACTION *t, const AB_TRANSACTION_LIMITS *lim); /** * Check transaction against limits: Check local and remote name. * @return 0 if okay, errorcode otherwise. * @param t transaction to check * @param lim limits to check against. */ AQBANKING_API int AB_Banking_CheckTransactionAgainstLimits_Names(const AB_TRANSACTION *t, const AB_TRANSACTION_LIMITS *lim); /** * Check transaction against limits: Check recurrence. * @return 0 if okay, errorcode otherwise. * @param t transaction to check * @param lim limits to check against. */ AQBANKING_API int AB_Banking_CheckTransactionAgainstLimits_Recurrence(const AB_TRANSACTION *t, const AB_TRANSACTION_LIMITS *lim); /** * Check transaction against limits: Check execution date. * @return 0 if okay, errorcode otherwise. * @param t transaction to check * @param lim limits to check against. */ AQBANKING_API int AB_Banking_CheckTransactionAgainstLimits_ExecutionDate(const AB_TRANSACTION *t, const AB_TRANSACTION_LIMITS *lim); /** * Check transaction against limits: Check date. * @return 0 if okay, errorcode otherwise. * @param t transaction to check * @param lim limits to check against. */ AQBANKING_API int AB_Banking_CheckTransactionAgainstLimits_Date(const AB_TRANSACTION *t, const AB_TRANSACTION_LIMITS *lim); /** * Check transaction against limits: Check sequence setup (debit notes). * @return 0 if okay, errorcode otherwise. * @param t transaction to check * @param lim limits to check against. */ AQBANKING_API int AB_Banking_CheckTransactionAgainstLimits_Sequence(const AB_TRANSACTION *t, const AB_TRANSACTION_LIMITS *lim); /** * Check transaction for SEPA conformity (IBAN, BIC, names) * @return 0 if okay, errorcode otherwise. * @param t transaction to check * @param lim limits to check against. */ AQBANKING_API int AB_Banking_CheckTransactionForSepaConformity(const AB_TRANSACTION *t, int restricted); /** * Fill local account info from account spec. */ AQBANKING_API void AB_Banking_FillTransactionFromAccountSpec(AB_TRANSACTION *t, const AB_ACCOUNT_SPEC *as); /*@}*/ #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/aqbanking/banking_l.h0000664000175000017500000000435014043610744016157 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQBANKING_BANKING_L_H #define AQBANKING_BANKING_L_H #include #include #include #include #include /* ======================================================================================================================== * banking_account.c * ======================================================================================================================== */ int AB_Banking_Read_AccountConfig(const AB_BANKING *ab, uint32_t uid, int doLock, int doUnlock, GWEN_DB_NODE **pDb); int AB_Banking_Has_AccountConfig(const AB_BANKING *ab, uint32_t uid); int AB_Banking_Write_AccountConfig(AB_BANKING *ab, uint32_t uid, int doLock, int doUnlock, GWEN_DB_NODE *db); int AB_Banking_Delete_AccountConfig(AB_BANKING *ab, uint32_t uid); int AB_Banking_Unlock_AccountConfig(AB_BANKING *ab, uint32_t uid); /* ======================================================================================================================== * banking_user.c * ======================================================================================================================== */ int AB_Banking_Read_UserConfig(const AB_BANKING *ab, uint32_t uid, int doLock, int doUnlock, GWEN_DB_NODE **pDb); int AB_Banking_Has_UserConfig(const AB_BANKING *ab, uint32_t uid); int AB_Banking_Write_UserConfig(AB_BANKING *ab, uint32_t uid, int doLock, int doUnlock, GWEN_DB_NODE *db); int AB_Banking_Delete_UserConfig(AB_BANKING *ab, uint32_t uid); int AB_Banking_Unlock_UserConfig(AB_BANKING *ab, uint32_t uid); #endif /* AQBANKING_BANKING_L_H */ aqbanking-6.6.1/src/libs/aqbanking/banking_imex.c0000664000175000017500000010102414627071733016664 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ /* This file is included by banking.c */ #include "aqbanking/backendsupport/swiftdescr.h" #ifdef AQBANKING_WITH_PLUGIN_IMEXPORTER_CSV # include "src/libs/plugins/imexporters/csv/csv.h" #endif #ifdef AQBANKING_WITH_PLUGIN_IMEXPORTER_ERI2 # include "src/libs/plugins/imexporters/eri2/eri2.h" #endif #ifdef AQBANKING_WITH_PLUGIN_IMEXPORTER_OFX # include "src/libs/plugins/imexporters/ofx/ofx.h" #endif #ifdef AQBANKING_WITH_PLUGIN_IMEXPORTER_OPENHBCI1 # include "src/libs/plugins/imexporters/openhbci1/openhbci1.h" #endif #ifdef AQBANKING_WITH_PLUGIN_IMEXPORTER_SWIFT # include "src/libs/plugins/imexporters/swift/swift.h" #endif #ifdef AQBANKING_WITH_PLUGIN_IMEXPORTER_XMLDB # include "src/libs/plugins/imexporters/xmldb/xmldb.h" #endif #ifdef AQBANKING_WITH_PLUGIN_IMEXPORTER_YELLOWNET # include "src/libs/plugins/imexporters/yellownet/yellownet.h" #endif #ifdef AQBANKING_WITH_PLUGIN_IMEXPORTER_SEPA # include "src/libs/plugins/imexporters/sepa/sepa.h" #endif #ifdef AQBANKING_WITH_PLUGIN_IMEXPORTER_CTXFILE # include "src/libs/plugins/imexporters/ctxfile/ctxfile.h" #endif #ifdef AQBANKING_WITH_PLUGIN_IMEXPORTER_Q43 # include "src/libs/plugins/imexporters/q43/q43.h" #endif #ifdef AQBANKING_WITH_PLUGIN_IMEXPORTER_CAMT # include "src/libs/plugins/imexporters/camt/camt.h" #endif #ifdef AQBANKING_WITH_PLUGIN_IMEXPORTER_XML # include "src/libs/plugins/imexporters/xml/xml.h" #endif static int _readGlobalProfilesForImExporterFromFolder(AB_BANKING *ab, const char *name, const char *path, GWEN_DB_NODE *dbRoot); static int _readUserProfilesForImExporter(AB_BANKING *ab, const char *name, GWEN_DB_NODE *dbRoot); static int _readImExporterProfiles(AB_BANKING *ab, const char *path, GWEN_DB_NODE *dbRoot, int isGlobal); static int _readAndAddProfileFile(const char *fname, GWEN_DB_NODE *dbRoot, int isGlobal); static GWEN_DB_NODE *_getProfileFromFileOrSystem(AB_BANKING *ab, const char *importerName, const char *profileName, const char *profileFile); AB_IMEXPORTER *AB_Banking__CreateImExporterPlugin(AB_BANKING *ab, const char *modname) { if (modname && *modname) { #ifdef AQBANKING_WITH_PLUGIN_IMEXPORTER_CSV if (strcasecmp(modname, "csv")==0) return AB_ImExporterCSV_new(ab); #endif #ifdef AQBANKING_WITH_PLUGIN_IMEXPORTER_ERI2 if (strcasecmp(modname, "eri2")==0) return AB_ImExporterERI2_new(ab); #endif #ifdef AQBANKING_WITH_PLUGIN_IMEXPORTER_OFX if (strcasecmp(modname, "ofx")==0) return AB_ImExporterOFX_new(ab); #endif #ifdef AQBANKING_WITH_PLUGIN_IMEXPORTER_OPENHBCI1 if (strcasecmp(modname, "ofx")==0) return AB_ImExporterOpenHBCI1_new(ab); #endif #ifdef AQBANKING_WITH_PLUGIN_IMEXPORTER_SWIFT if (strcasecmp(modname, "swift")==0) return AB_ImExporterSWIFT_new(ab); #endif #ifdef AQBANKING_WITH_PLUGIN_IMEXPORTER_XMLDB if (strcasecmp(modname, "xmldb")==0) return AB_ImExporterXMLDB_new(ab); #endif #ifdef AQBANKING_WITH_PLUGIN_IMEXPORTER_YELLOWNET if (strcasecmp(modname, "yellownet")==0) return AB_ImExporterYellowNet_new(ab); #endif #ifdef AQBANKING_WITH_PLUGIN_IMEXPORTER_SEPA if (strcasecmp(modname, "sepa")==0) return AB_ImExporterSEPA_new(ab); #endif #ifdef AQBANKING_WITH_PLUGIN_IMEXPORTER_CTXFILE if (strcasecmp(modname, "ctxfile")==0) return AB_ImExporterCtxFile_new(ab); #endif #ifdef AQBANKING_WITH_PLUGIN_IMEXPORTER_Q43 if (strcasecmp(modname, "q43")==0) return AB_ImExporterQ43_new(ab); #endif #ifdef AQBANKING_WITH_PLUGIN_IMEXPORTER_CAMT if (strcasecmp(modname, "camt")==0) return AB_ImExporterCAMT_new(ab); #endif #ifdef AQBANKING_WITH_PLUGIN_IMEXPORTER_XML if (strcasecmp(modname, "xml")==0) return AB_ImExporterXML_new(ab); #endif DBG_ERROR(AQBANKING_LOGDOMAIN, "Plugin [%s] not compiled-in", modname); } return NULL; } AB_IMEXPORTER *AB_Banking_FindImExporter(AB_BANKING *ab, const char *name) { AB_IMEXPORTER *ie; assert(ab); assert(name); ie=AB_ImExporter_List_First(ab_imexporters); while (ie) { if (strcasecmp(AB_ImExporter_GetName(ie), name)==0) break; ie=AB_ImExporter_List_Next(ie); } /* while */ return ie; } AB_IMEXPORTER *AB_Banking_GetImExporter(AB_BANKING *ab, const char *name) { AB_IMEXPORTER *ie; assert(ab); assert(name); ie=AB_Banking_FindImExporter(ab, name); if (ie) return ie; ie=AB_Banking__CreateImExporterPlugin(ab, name); if (ie) AB_ImExporter_List_Add(ie, ab_imexporters); return ie; } void AB_Banking_FillGapsInTransaction(AB_BANKING *ab, AB_ACCOUNT *a, AB_TRANSACTION *t) { assert(t); if (a) { const char *s; /* local account */ s=AB_Account_GetCountry(a); if (!s || !*s) s="de"; AB_Transaction_SetLocalCountry(t, s); AB_Transaction_SetRemoteCountry(t, s); s=AB_Account_GetBankCode(a); if (s && *s) AB_Transaction_SetLocalBankCode(t, s); s=AB_Account_GetAccountNumber(a); if (s && *s) AB_Transaction_SetLocalAccountNumber(t, s); s=AB_Account_GetOwnerName(a); if (s && *s) AB_Transaction_SetLocalName(t, s); s=AB_Account_GetBic(a); if (s && *s) AB_Transaction_SetLocalBic(t, s); s=AB_Account_GetIban(a); if (s && *s) AB_Transaction_SetLocalIban(t, s); } } int AB_Banking_GetEditImExporterProfileDialog(AB_BANKING *ab, const char *imExporterName, GWEN_DB_NODE *dbProfile, const char *testFileName, GWEN_DIALOG **pDlg) { AB_IMEXPORTER *ie; int rv; ie=AB_Banking_GetImExporter(ab, imExporterName); if (ie==NULL) { DBG_INFO(AQBANKING_LOGDOMAIN, "here"); return GWEN_ERROR_NO_DATA; } if (AB_ImExporter_GetFlags(ie) & AB_IMEXPORTER_FLAGS_GETPROFILEEDITOR_SUPPORTED) { GWEN_DIALOG *dlg=NULL; rv=AB_ImExporter_GetEditProfileDialog(ie, dbProfile, testFileName, &dlg); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); return rv; } *pDlg=dlg; return 0; } else { DBG_ERROR(AQBANKING_LOGDOMAIN, "EditProfileDialog not supported by imExporter \"%s\"", imExporterName); return GWEN_ERROR_NOT_SUPPORTED; } } int AB_Banking_Import(AB_BANKING *ab, const char *importerName, AB_IMEXPORTER_CONTEXT *ctx, GWEN_SYNCIO *sio, GWEN_DB_NODE *dbProfile) { AB_IMEXPORTER *ie; int rv; ie=AB_Banking_GetImExporter(ab, importerName); if (ie==NULL) { DBG_INFO(AQBANKING_LOGDOMAIN, "here"); return GWEN_ERROR_NO_DATA; } rv=AB_ImExporter_Import(ie, ctx, sio, dbProfile); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); return rv; } return 0; } int AB_Banking_Export(AB_BANKING *ab, const char *exporterName, AB_IMEXPORTER_CONTEXT *ctx, GWEN_SYNCIO *sio, GWEN_DB_NODE *dbProfile) { AB_IMEXPORTER *ie; int rv; ie=AB_Banking_GetImExporter(ab, exporterName); if (ie==NULL) { DBG_INFO(AQBANKING_LOGDOMAIN, "here"); return GWEN_ERROR_NO_DATA; } rv=AB_ImExporter_Export(ie, ctx, sio, dbProfile); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); return rv; } return 0; } int AB_Banking_ImportLoadProfile(AB_BANKING *ab, const char *importerName, AB_IMEXPORTER_CONTEXT *ctx, GWEN_SYNCIO *sio, const char *profileName, const char *profileFile) { GWEN_DB_NODE *dbProfile; int rv; dbProfile=_getProfileFromFileOrSystem(ab, importerName, profileName, profileFile); if (dbProfile==NULL) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Profile [%s] not found", profileName?profileName:"(null)"); return GWEN_ERROR_NO_DATA; } rv=AB_Banking_Import(ab, importerName, ctx, sio, dbProfile); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); GWEN_DB_Group_free(dbProfile); return rv; } GWEN_DB_Group_free(dbProfile); return 0; } int AB_Banking_ExportLoadProfile(AB_BANKING *ab, const char *exporterName, AB_IMEXPORTER_CONTEXT *ctx, GWEN_SYNCIO *sio, const char *profileName, const char *profileFile) { GWEN_DB_NODE *dbProfile; int rv; dbProfile=_getProfileFromFileOrSystem(ab, exporterName, profileName, profileFile); if (dbProfile==NULL) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Profile [%s] not found", profileName?profileName:"(null)"); return GWEN_ERROR_NO_DATA; } rv=AB_Banking_Export(ab, exporterName, ctx, sio, dbProfile); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); GWEN_DB_Group_free(dbProfile); return rv; } GWEN_DB_Group_free(dbProfile); return 0; } int AB_Banking_ImportFromFile(AB_BANKING *ab, const char *importerName, AB_IMEXPORTER_CONTEXT *ctx, const char *inputFileName, GWEN_DB_NODE *dbProfile) { GWEN_SYNCIO *sio; int rv; if (inputFileName) { sio=GWEN_SyncIo_File_new(inputFileName, GWEN_SyncIo_File_CreationMode_OpenExisting); GWEN_SyncIo_AddFlags(sio, GWEN_SYNCIO_FILE_FLAGS_READ); rv=GWEN_SyncIo_Connect(sio); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); GWEN_SyncIo_free(sio); return rv; } } else { sio=GWEN_SyncIo_File_fromStdin(); GWEN_SyncIo_AddFlags(sio, GWEN_SYNCIO_FLAGS_DONTCLOSE); } rv=AB_Banking_Import(ab, importerName, ctx, sio, dbProfile); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); return rv; } GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); return 0; } int AB_Banking_ExportToFile(AB_BANKING *ab, const char *exporterName, AB_IMEXPORTER_CONTEXT *ctx, const char *outputFileName, GWEN_DB_NODE *dbProfile) { GWEN_SYNCIO *sio; int rv; if (outputFileName) { sio=GWEN_SyncIo_File_new(outputFileName, GWEN_SyncIo_File_CreationMode_CreateAlways); GWEN_SyncIo_AddFlags(sio, GWEN_SYNCIO_FILE_FLAGS_READ | GWEN_SYNCIO_FILE_FLAGS_WRITE | GWEN_SYNCIO_FILE_FLAGS_UREAD | GWEN_SYNCIO_FILE_FLAGS_UWRITE | GWEN_SYNCIO_FILE_FLAGS_GREAD | GWEN_SYNCIO_FILE_FLAGS_GWRITE); rv=GWEN_SyncIo_Connect(sio); if (rv<0) { DBG_WARN(AQBANKING_LOGDOMAIN, "Failed to Connect() syncio (%d)", rv); GWEN_SyncIo_free(sio); return rv; } } else { sio=GWEN_SyncIo_File_fromStdout(); GWEN_SyncIo_AddFlags(sio, GWEN_SYNCIO_FLAGS_DONTCLOSE); } rv=AB_Banking_Export(ab, exporterName, ctx, sio, dbProfile); if (rv<0) { DBG_WARN(AQBANKING_LOGDOMAIN, "Failed to export (%d)", rv); GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); return rv; } rv=GWEN_SyncIo_Disconnect(sio); if (rv<0) { DBG_WARN(AQBANKING_LOGDOMAIN, "Failed to Disconnect() syncio (%d)", rv); GWEN_SyncIo_free(sio); return rv; } GWEN_SyncIo_free(sio); return 0; } int AB_Banking_ImportFromFileLoadProfile(AB_BANKING *ab, const char *importerName, AB_IMEXPORTER_CONTEXT *ctx, const char *profileName, const char *profileFile, const char *inputFileName) { GWEN_DB_NODE *dbProfile; int rv; dbProfile=_getProfileFromFileOrSystem(ab, importerName, profileName, profileFile); if (dbProfile==NULL) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Profile [%s] not found", profileName?profileName:"(null)"); return GWEN_ERROR_NO_DATA; } rv=AB_Banking_ImportFromFile(ab, importerName, ctx, inputFileName, dbProfile); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); GWEN_DB_Group_free(dbProfile); return rv; } GWEN_DB_Group_free(dbProfile); return 0; } int AB_Banking_ExportToFileLoadProfile(AB_BANKING *ab, const char *exporterName, AB_IMEXPORTER_CONTEXT *ctx, const char *outputFileName, const char *profileName, const char *profileFile) { GWEN_DB_NODE *dbProfile; int rv; dbProfile=_getProfileFromFileOrSystem(ab, exporterName, profileName, profileFile); if (dbProfile==NULL) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Profile [%s] not found", profileName?profileName:"(null)"); return GWEN_ERROR_NO_DATA; } rv=AB_Banking_ExportToFile(ab, exporterName, ctx, outputFileName, dbProfile); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); GWEN_DB_Group_free(dbProfile); return rv; } GWEN_DB_Group_free(dbProfile); return 0; } int AB_Banking_ImportFromBuffer(AB_BANKING *ab, const char *importerName, AB_IMEXPORTER_CONTEXT *ctx, const uint8_t *dataPtr, uint32_t dataLen, GWEN_DB_NODE *dbProfile) { GWEN_BUFFER *buf; GWEN_SYNCIO *sio; int rv; buf=GWEN_Buffer_new((char *) dataPtr, dataLen, dataLen, 0); GWEN_Buffer_SetMode(buf, GWEN_BUFFER_MODE_READONLY); sio=GWEN_SyncIo_Memory_new(buf, 0); rv=AB_Banking_Import(ab, importerName, ctx, sio, dbProfile); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); GWEN_SyncIo_free(sio); GWEN_Buffer_free(buf); return rv; } GWEN_SyncIo_free(sio); GWEN_Buffer_free(buf); return 0; } int AB_Banking_ExportToBuffer(AB_BANKING *ab, const char *exporterName, AB_IMEXPORTER_CONTEXT *ctx, GWEN_BUFFER *outputBuffer, GWEN_DB_NODE *dbProfile) { int rv; GWEN_SYNCIO *sio; sio=GWEN_SyncIo_Memory_new(outputBuffer, 0); rv=AB_Banking_Export(ab, exporterName, ctx, sio, dbProfile); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); GWEN_SyncIo_free(sio); return rv; } GWEN_SyncIo_free(sio); return 0; } int AB_Banking_ImportFromBufferLoadProfile(AB_BANKING *ab, const char *importerName, AB_IMEXPORTER_CONTEXT *ctx, const char *profileName, const char *profileFile, const uint8_t *dataPtr, uint32_t dataLen) { GWEN_DB_NODE *dbProfile; int rv; dbProfile=_getProfileFromFileOrSystem(ab, importerName, profileName, profileFile); if (dbProfile==NULL) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Profile [%s] not found", profileName?profileName:"(null)"); return GWEN_ERROR_NO_DATA; } rv=AB_Banking_ImportFromBuffer(ab, importerName, ctx, dataPtr, dataLen, dbProfile); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); GWEN_DB_Group_free(dbProfile); return rv; } GWEN_DB_Group_free(dbProfile); return 0; } int AB_Banking_ExportToBufferLoadProfile(AB_BANKING *ab, const char *exporterName, AB_IMEXPORTER_CONTEXT *ctx, GWEN_BUFFER *outputBuffer, const char *profileName, const char *profileFile) { GWEN_DB_NODE *dbProfile; int rv; dbProfile=_getProfileFromFileOrSystem(ab, exporterName, profileName, profileFile); if (dbProfile==NULL) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Profile [%s] not found", profileName?profileName:"(null)"); return GWEN_ERROR_NO_DATA; } rv=AB_Banking_ExportToBuffer(ab, exporterName, ctx, outputBuffer, dbProfile); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); GWEN_DB_Group_free(dbProfile); return rv; } GWEN_DB_Group_free(dbProfile); return 0; } GWEN_PLUGIN_DESCRIPTION_LIST2 *AB_Banking_GetImExporterDescrs(AB_BANKING *ab) { assert(ab); if (ab_pluginManagerImExporter) { GWEN_PLUGIN_DESCRIPTION_LIST2 *l; l=GWEN_PluginManager_GetPluginDescrs(ab_pluginManagerImExporter); return l; } else { DBG_ERROR(AQBANKING_LOGDOMAIN, "No plugin manager for imexporters"); return NULL; } } int _readGlobalProfilesForImExporterFromFolder(AB_BANKING *ab, const char *name, const char *path, GWEN_DB_NODE *dbRoot) { GWEN_BUFFER *buf; int rv; buf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(buf, path); GWEN_Buffer_AppendString(buf, DIRSEP "aqbanking" DIRSEP AB_IMEXPORTER_FOLDER DIRSEP); rv=GWEN_Text_EscapeToBufferTolerant(name, buf); if (rv<0) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Bad name for importer/exporter (%d)", rv); GWEN_Buffer_free(buf); return rv; } GWEN_Buffer_AppendString(buf, DIRSEP "profiles"); rv=_readImExporterProfiles(ab, GWEN_Buffer_GetStart(buf), dbRoot, 1); if (rv && rv!=GWEN_ERROR_NOT_FOUND) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Error reading profiles for \"%s\" from \"%s\" (%d)", name, path, rv); GWEN_Buffer_free(buf); return rv; } GWEN_Buffer_free(buf); return rv; } int _readUserProfilesForImExporter(AB_BANKING *ab, const char *name, GWEN_DB_NODE *dbRoot) { GWEN_BUFFER *buf; int rv; buf=GWEN_Buffer_new(0, 256, 0, 1); rv=AB_Banking_GetUserDataDir(ab, buf); if (rv<0) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Could not get user data dir (%d)", rv); GWEN_Buffer_free(buf); return rv; } GWEN_Buffer_AppendString(buf, DIRSEP AB_IMEXPORTER_FOLDER DIRSEP); rv=GWEN_Text_EscapeToBufferTolerant(name, buf); if (rv<0) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Bad name for importer/exporter (%d)", rv); GWEN_Buffer_free(buf); return rv; } GWEN_Buffer_AppendString(buf, DIRSEP "profiles"); rv=_readImExporterProfiles(ab, GWEN_Buffer_GetStart(buf), dbRoot, 0); if (rv && rv!=GWEN_ERROR_NOT_FOUND) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Error reading users profiles"); GWEN_Buffer_free(buf); return rv; } GWEN_Buffer_free(buf); return rv; } int _readImExporterProfiles(AB_BANKING *ab, const char *path, GWEN_DB_NODE *dbRoot, int isGlobal) { GWEN_STRINGLIST *slFiles; int rv; slFiles=GWEN_StringList_new(); rv=GWEN_Directory_GetMatchingFilesRecursively(path, slFiles, "*.conf"); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); GWEN_StringList_free(slFiles); return rv; } if (GWEN_StringList_Count(slFiles)<1) { DBG_INFO(AQBANKING_LOGDOMAIN, "No profiles found in \"%s\"", path); GWEN_StringList_free(slFiles); return GWEN_ERROR_NOT_FOUND; } else { GWEN_STRINGLISTENTRY *se; se=GWEN_StringList_FirstEntry(slFiles); while (se) { const char *t; t=GWEN_StringListEntry_Data(se); if (t) { rv=_readAndAddProfileFile(t, dbRoot, isGlobal); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "Error reading profile file \"%s\" (%d), ignoring.", t, rv); } } se=GWEN_StringListEntry_Next(se); } GWEN_StringList_free(slFiles); return 0; } } int _readAndAddProfileFile(const char *fname, GWEN_DB_NODE *dbRoot, int isGlobal) { GWEN_DB_NODE *dbT; int rv; dbT=GWEN_DB_Group_new("profile"); rv=GWEN_DB_ReadFile(dbT, fname, GWEN_DB_FLAGS_DEFAULT | GWEN_PATH_FLAGS_CREATE_GROUP); if (rv<0) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Could not read file \"%s\" (%d)", fname, rv); GWEN_DB_Group_free(dbT); return rv; } else { const char *s; s=GWEN_DB_GetCharValue(dbT, "name", 0, 0); if (!s) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Bad file \"%s\" (no profile name)", fname); } else { GWEN_DB_NODE *dbTarget; DBG_INFO(AQBANKING_LOGDOMAIN, "File \"%s\" contains profile \"%s\"", fname, s); dbTarget=GWEN_DB_GetGroup(dbRoot, GWEN_DB_FLAGS_OVERWRITE_GROUPS, s); assert(dbTarget); GWEN_DB_AddGroupChildren(dbTarget, dbT); GWEN_DB_SetIntValue(dbTarget, GWEN_DB_FLAGS_OVERWRITE_VARS, "isGlobal", isGlobal); GWEN_DB_SetCharValue(dbTarget, GWEN_DB_FLAGS_OVERWRITE_VARS, "fileName", fname); } /* if name */ } /* if file successfully read */ GWEN_DB_Group_free(dbT); return 0; } GWEN_DB_NODE *AB_Banking_GetImExporterProfiles(AB_BANKING *ab, const char *name) { GWEN_DB_NODE *dbRoot; int rv; GWEN_STRINGLIST *sl; GWEN_STRINGLISTENTRY *sentry; dbRoot=GWEN_DB_Group_new("profiles"); sl=AB_Banking_GetGlobalDataDirs(); assert(sl); sentry=GWEN_StringList_FirstEntry(sl); assert(sentry); while (sentry) { const char *pkgdatadir; pkgdatadir=GWEN_StringListEntry_Data(sentry); assert(pkgdatadir); rv=_readGlobalProfilesForImExporterFromFolder(ab, name, pkgdatadir, dbRoot); if (rv<0 && rv!=GWEN_ERROR_NOT_FOUND) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); GWEN_StringList_free(sl); GWEN_DB_Group_free(dbRoot); return 0; } sentry=GWEN_StringListEntry_Next(sentry); } GWEN_StringList_free(sl); rv=_readUserProfilesForImExporter(ab, name, dbRoot); if (rv<0 && rv!=GWEN_ERROR_NOT_FOUND) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); GWEN_DB_Group_free(dbRoot); return 0; } return dbRoot; } int AB_Banking_SaveLocalImExporterProfile(AB_BANKING *ab, const char *imexporterName, GWEN_DB_NODE *dbProfile, const char *fname) { GWEN_BUFFER *buf; int rv; buf=GWEN_Buffer_new(0, 256, 0, 1); /* get folder for local user profiles */ rv=AB_Banking_GetUserDataDir(ab, buf); if (rv<0) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Could not get user data dir"); GWEN_Buffer_free(buf); return rv; } GWEN_Buffer_AppendString(buf, DIRSEP AB_IMEXPORTER_FOLDER DIRSEP); rv=GWEN_Text_EscapeToBufferTolerant(imexporterName, buf); if (rv<0) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Bad name for importer/exporter (%d)", rv); GWEN_Buffer_free(buf); return rv; } GWEN_Buffer_AppendString(buf, DIRSEP "profiles"); /* make sure the path exists */ rv=GWEN_Directory_GetPath(GWEN_Buffer_GetStart(buf), GWEN_PATH_FLAGS_CHECKROOT); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(buf); return rv; } GWEN_Buffer_AppendString(buf, DIRSEP); if (fname && *fname) GWEN_Buffer_AppendString(buf, fname); else { const char *s; s=GWEN_DB_GetCharValue(dbProfile, "name", 0, NULL); if (s && *s) { FILE *f; rv=GWEN_Text_EscapeToBufferTolerant(s, buf); if (rv<0) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Bad profile name (%d)", rv); GWEN_Buffer_free(buf); return rv; } GWEN_Buffer_AppendString(buf, ".conf"); f=fopen(GWEN_Buffer_GetStart(buf), "r"); if (f) { DBG_ERROR(AQBANKING_LOGDOMAIN, "There already is a profile of that name"); GWEN_Buffer_free(buf); fclose(f); return GWEN_ERROR_INVALID; } } else { DBG_ERROR(AQBANKING_LOGDOMAIN, "Missing profile name"); GWEN_Buffer_free(buf); return GWEN_ERROR_INVALID; } } rv=GWEN_DB_WriteFile(dbProfile, GWEN_Buffer_GetStart(buf), GWEN_DB_FLAGS_DEFAULT); if (rv<0) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Error writing users profile (%d)", rv); GWEN_Buffer_free(buf); return 0; } GWEN_Buffer_free(buf); return 0; } int AB_Banking_FindDataFileForImExporter(AB_BANKING *ab, const char *imExpName, const char *fileName, GWEN_BUFFER *fullPathBuffer) { GWEN_BUFFER *buf; int rv; GWEN_STRINGLIST *sl; buf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(buf, DIRSEP "aqbanking" DIRSEP AB_IMEXPORTER_FOLDER DIRSEP); GWEN_Buffer_AppendString(buf, imExpName); GWEN_Buffer_AppendString(buf, DIRSEP "data" DIRSEP); GWEN_Buffer_AppendString(buf, fileName); sl=AB_Banking_GetGlobalDataDirs(); assert(sl); rv=GWEN_Directory_FindFileInPaths(sl, GWEN_Buffer_GetStart(buf), fullPathBuffer); if (rv==0) { GWEN_Buffer_free(buf); return rv; } GWEN_Buffer_Reset(buf); /* try local storage */ if (AB_Banking_GetUserDataDir(ab, buf)) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Could not get user data dir"); GWEN_Buffer_free(buf); return GWEN_ERROR_NOT_FOUND; } GWEN_Buffer_AppendString(buf, DIRSEP AB_IMEXPORTER_FOLDER DIRSEP); GWEN_Buffer_AppendString(buf, fileName); rv=GWEN_Directory_GetPath(GWEN_Buffer_GetStart(buf), GWEN_PATH_FLAGS_PATHMUSTEXIST); if (rv==0) { GWEN_Buffer_AppendString(fullPathBuffer, GWEN_Buffer_GetStart(buf)); GWEN_Buffer_free(buf); return 0; } GWEN_Buffer_free(buf); return GWEN_ERROR_NOT_FOUND; } GWEN_STRINGLIST *AB_Banking_ListDataFilesForImExporter(AB_BANKING *ab, const char *imExpName, const char *fileMask) { int rv; GWEN_BUFFER *pathBuffer; GWEN_STRINGLIST *slGlobalDataDirs; GWEN_STRINGLIST *slMatchingFiles; GWEN_STRINGLISTENTRY *seGlobalDataDir; slGlobalDataDirs=AB_Banking_GetGlobalDataDirs(); assert(slGlobalDataDirs); slMatchingFiles=GWEN_StringList_new(); pathBuffer=GWEN_Buffer_new(0, 256, 0, 1); seGlobalDataDir=GWEN_StringList_FirstEntry(slGlobalDataDirs); while (seGlobalDataDir) { GWEN_Buffer_AppendString(pathBuffer, GWEN_StringListEntry_Data(seGlobalDataDir)); GWEN_Buffer_AppendString(pathBuffer, DIRSEP "aqbanking" DIRSEP AB_IMEXPORTER_FOLDER DIRSEP); GWEN_Buffer_AppendString(pathBuffer, imExpName); GWEN_Buffer_AppendString(pathBuffer, DIRSEP "data"); rv=GWEN_Directory_GetMatchingFilesRecursively(GWEN_Buffer_GetStart(pathBuffer), slMatchingFiles, fileMask); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "Error listing matching files in folder \"%s\", ignoring", GWEN_Buffer_GetStart(pathBuffer)); } GWEN_Buffer_Reset(pathBuffer); seGlobalDataDir=GWEN_StringListEntry_Next(seGlobalDataDir); } /* while(seGlobalDataDir) */ GWEN_Buffer_free(pathBuffer); if (GWEN_StringList_Count(slMatchingFiles)<1) { DBG_INFO(AQBANKING_LOGDOMAIN, "No matching data files"); GWEN_StringList_free(slMatchingFiles); return NULL; } return slMatchingFiles; } GWEN_DB_NODE *AB_Banking_GetImExporterProfile(AB_BANKING *ab, const char *imExporterName, const char *profileName) { GWEN_DB_NODE *dbProfiles; dbProfiles=AB_Banking_GetImExporterProfiles(ab, imExporterName); if (dbProfiles) { GWEN_DB_NODE *dbProfile; dbProfile=GWEN_DB_GetFirstGroup(dbProfiles); while (dbProfile) { const char *name; name=GWEN_DB_GetCharValue(dbProfile, "name", 0, 0); assert(name); if (strcasecmp(name, profileName)==0) break; dbProfile=GWEN_DB_GetNextGroup(dbProfile); } if (!dbProfile) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Profile \"%s\" for exporter \"%s\" not found", profileName, imExporterName); GWEN_DB_Group_free(dbProfiles); return NULL; } GWEN_DB_UnlinkGroup(dbProfile); GWEN_DB_Group_free(dbProfiles); return dbProfile; } else { DBG_ERROR(AQBANKING_LOGDOMAIN, "No profiles found for exporter \"%s\"", imExporterName); return NULL; } return NULL; } GWEN_DB_NODE *AB_Banking_FindMatchingSwiftImExporterProfile(AB_BANKING *ab, const char *imExporterName, const char *family, int version1, int version2, int version3) { GWEN_DB_NODE *dbProfiles; dbProfiles=AB_Banking_GetImExporterProfiles(ab, imExporterName); if (dbProfiles) { GWEN_DB_NODE *dbProfile; dbProfile=GWEN_DB_GetFirstGroup(dbProfiles); while (dbProfile) { const char *name; AB_SWIFT_DESCR *swiftDescr; name=GWEN_DB_GetCharValue(dbProfile, "name", 0, 0); assert(name); swiftDescr=AB_SwiftDescr_FromString(name); if (swiftDescr) { if (AB_SwiftDescr_Matches(swiftDescr, family, version1, version2, version3)) { AB_SwiftDescr_free(swiftDescr); break; } } AB_SwiftDescr_free(swiftDescr); dbProfile=GWEN_DB_GetNextGroup(dbProfile); } if (!dbProfile) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Profile \"%s.%03d.%03d.%02d\" for exporter \"%s\" not found", family, version1, version2, version3, imExporterName); GWEN_DB_Group_free(dbProfiles); return NULL; } GWEN_DB_UnlinkGroup(dbProfile); GWEN_DB_Group_free(dbProfiles); return dbProfile; } else { DBG_ERROR(AQBANKING_LOGDOMAIN, "No profiles found for exporter \"%s\"", imExporterName); return NULL; } return NULL; } AB_SWIFT_DESCR_LIST *AB_Banking_GetSwiftDescriptorsForImExporter(AB_BANKING *ab, const char *imExporterName) { GWEN_DB_NODE *dbProfiles; dbProfiles=AB_Banking_GetImExporterProfiles(ab, imExporterName); if (dbProfiles) { GWEN_DB_NODE *dbProfile; AB_SWIFT_DESCR_LIST *descrList; descrList=AB_SwiftDescr_List_new(); dbProfile=GWEN_DB_GetFirstGroup(dbProfiles); while (dbProfile) { const char *name; AB_SWIFT_DESCR *descr; name=GWEN_DB_GetCharValue(dbProfile, "name", 0, 0); assert(name); descr=AB_SwiftDescr_FromString(name); if (descr) { DBG_INFO(AQBANKING_LOGDOMAIN, "Adding matching profile [%s]", name); AB_SwiftDescr_SetAlias1(descr, name); AB_SwiftDescr_List_Add(descr, descrList); } dbProfile=GWEN_DB_GetNextGroup(dbProfile); } GWEN_DB_Group_free(dbProfiles); if (AB_SwiftDescr_List_GetCount(descrList)==0) { AB_SwiftDescr_List_free(descrList); return NULL; } return descrList; } else { DBG_ERROR(AQBANKING_LOGDOMAIN, "No profiles found for exporter \"%s\"", imExporterName); return NULL; } return NULL; } GWEN_DB_NODE *_getProfileFromFileOrSystem(AB_BANKING *ab, const char *importerName, const char *profileName, const char *profileFile) { GWEN_DB_NODE *dbProfile=NULL; if (profileFile && *profileFile) { int rv; dbProfile=GWEN_DB_Group_new("profile"); rv=GWEN_DB_ReadFile(dbProfile, profileFile, GWEN_DB_FLAGS_DEFAULT); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_DB_Group_free(dbProfile); return NULL; } } else if (profileName && *profileName) { dbProfile=AB_Banking_GetImExporterProfile(ab, importerName, profileName); } else { dbProfile=AB_Banking_GetImExporterProfile(ab, importerName, "default"); } if (dbProfile==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "Unable to load profile for imexporter \"%s\" (file=%s, name=%s)", importerName, profileFile?profileFile:"-none-", profileName?profileName:"-none"); } return dbProfile; } aqbanking-6.6.1/src/libs/aqbanking/banking_dialogs.c0000664000175000017500000000456414214726437017357 00000000000000/*************************************************************************** begin : Wed Dec 05 2018 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ /* This file is included by banking.c */ #include "aqbanking/dialogs/dlg_importer.h" #include "aqbanking/dialogs/dlg_setup.h" GWEN_DIALOG *AB_Banking_CreateImporterDialog(AB_BANKING *ab, AB_IMEXPORTER_CONTEXT *ctx, const char *finishedMessage) { return AB_ImporterDialog_new(ab, ctx, finishedMessage); } GWEN_DIALOG *AB_Banking_CreateImporterDialogWithPresets(AB_BANKING *ab, AB_IMEXPORTER_CONTEXT *ctx, const char *finishedMessage, GWEN_DB_NODE *dbPrefs) { GWEN_DIALOG *dlg; const char *s; dlg=AB_ImporterDialog_new(ab, ctx, finishedMessage); if (dlg==NULL) { DBG_INFO(AQBANKING_LOGDOMAIN, "Could not create import dialog"); return NULL; } s=GWEN_DB_GetCharValue(dbPrefs, "filename", 0, NULL); if (s && *s) AB_ImporterDialog_SetFileName(dlg, s); s=GWEN_DB_GetCharValue(dbPrefs, "importer", 0, NULL); if (s && *s) AB_ImporterDialog_SetImporterName(dlg, s); s=GWEN_DB_GetCharValue(dbPrefs, "profile", 0, NULL); if (s && *s) AB_ImporterDialog_SetProfileName(dlg, s); return dlg; } void AB_Banking_ImporterDialogGatherPresets(GWEN_DIALOG *dlg, GWEN_DB_NODE *dbPrefs) { const char *s; s=AB_ImporterDialog_GetFileName(dlg); if (s && *s) GWEN_DB_SetCharValue(dbPrefs, GWEN_DB_FLAGS_OVERWRITE_VARS, "filename", s); s=AB_ImporterDialog_GetImporterName(dlg); if (s && *s) GWEN_DB_SetCharValue(dbPrefs, GWEN_DB_FLAGS_OVERWRITE_VARS, "importer", s); s=AB_ImporterDialog_GetProfileName(dlg); if (s && *s) GWEN_DB_SetCharValue(dbPrefs, GWEN_DB_FLAGS_OVERWRITE_VARS, "profile", s); } GWEN_DIALOG *AB_Banking_CreateSetupDialog(AB_BANKING *ab) { return AB_SetupDialog_new(ab); } aqbanking-6.6.1/src/libs/aqbanking/version.h.in0000664000175000017500000000220514044534775016334 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2004 by Martin Preuss email : martin at libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AQBANKING_VERSION_H #define AQBANKING_VERSION_H #define AQBANKING_VERSION_MAJOR @AQBANKING_VERSION_MAJOR@ #define AQBANKING_VERSION_MINOR @AQBANKING_VERSION_MINOR@ #define AQBANKING_VERSION_PATCHLEVEL @AQBANKING_VERSION_PATCHLEVEL@ #define AQBANKING_VERSION_BUILD @AQBANKING_VERSION_BUILD@ #define AQBANKING_VERSION_TAG "@AQBANKING_VERSION_TAG@" #define AQBANKING_VERSION_FULL_STRING "@AQBANKING_VERSION_FULL_STRING@" #define AQBANKING_VERSION_STRING "@AQBANKING_VERSION_STRING@" #define AQBANKING_SO_CURRENT @AQBANKING_SO_CURRENT@ #define AQBANKING_SO_REVISION @AQBANKING_SO_REVISION@ #define AQBANKING_SO_AGE @AQBANKING_SO_AGE@ #define AQBANKING_SO_EFFECTIVE @AQBANKING_SO_EFFECTIVE@ #endif /* AQBANKING_VERSION_H */ aqbanking-6.6.1/src/libs/aqbanking/banking_be.h0000664000175000017500000002202714044534775016325 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ /** @file banking_be.h * @short This file is used by provider backends. */ #ifndef AQBANKING_BANKING_BE_H #define AQBANKING_BANKING_BE_H #include #include #include #include #include #include #include #define AB_CFG_GROUP_BACKENDS "backends" #define AB_CFG_GROUP_BANKINFO "bankinfo" #define AB_CFG_GROUP_IMEXPORTER "imexporter" #define AB_CFG_GROUP_USERS "users" #define AB_CFG_GROUP_ACCOUNTS "accounts" #define AB_PM_LIBNAME "aqbanking" #define AB_PM_SYSCONFDIR "sysconfdir" #define AB_PM_DATADIR "datadir" #define AB_PM_WIZARDDIR "wizarddir" #define AB_PM_LOCALEDIR "localedir" /** @addtogroup G_AB_BE_BANKING */ /*@{*/ #ifdef __cplusplus extern "C" { #endif /** @name Functions Used by Backends And Wizards * */ /*@{*/ /** * Returns the list of global data folders. In most cases this is something * like $PREFIX/share/. Plugins are required to use the folders * returned here + "aqbanking" when searching for their specific data instead * of using the compile time fixed values. This way it is easier under * windows to find data. */ GWEN_STRINGLIST *AB_Banking_GetGlobalDataDirs(void); GWEN_STRINGLIST *AB_Banking_GetGlobalSysconfDirs(void); /** * Loads the given provider and initializes it. * Only after calling this function the provider can be used. * You need to call @ref AB_Banking_EndUseProvider() if you're done. * * @return 0 if ok, error code otherwise * * @param ab pointer to the AB_BANKING object (needs to be initialized, i.e. @ref AB_Banking_Init called). * @param modname (e.g. "aqhbci") */ AB_PROVIDER *AB_Banking_BeginUseProvider(AB_BANKING *ab, const char *modname); /** * Call this as soon as the provider isn't actually needed anymore. * This probably unloads the plugin, at least it is deinitialized. * * @return 0 if ok, error code otherwise * * @param ab pointer to the AB_BANKING object (needs to be initialized, i.e. @ref AB_Banking_Init called). * @param pro pointer to provider object returned by @ref AB_Banking_BeginUseProvider * */ int AB_Banking_EndUseProvider(AB_BANKING *ab, AB_PROVIDER *pro); /** * Find the path of a given datafile for an im-/exporter. * * @return 0 if okay, error code otherwise * @param ab pointer to the AB_BANKING object (needs to be initialized, i.e. @ref AB_Banking_Init called). * @param imExpName name of the im-/exporter * @param fileNAme to look for * @param fullPathBuffer buffer to receive the complete path to the given file (if found) */ int AB_Banking_FindDataFileForImExporter(AB_BANKING *ab, const char *imExpName, const char *fileName, GWEN_BUFFER *fullPathBuffer); /** * List all data files for the given im-/exporter matching the given file mask. * * @return stringlist containing one entry for each file (absolute path) * @param ab pointer to the AB_BANKING object (needs to be initialized, i.e. @ref AB_Banking_Init called). * @param imExpName name of the im-/exporter * @param fileMask mask fore the file name to match (wildcards and jokers allowed, e.g. "*.xml") */ GWEN_STRINGLIST *AB_Banking_ListDataFilesForImExporter(AB_BANKING *ab, const char *imExpName, const char *fileMask); /*@}*/ /** @name Administration of Crypt Token List * */ /*@{*/ int AB_Banking_GetCryptToken(AB_BANKING *ab, const char *tname, const char *cname, GWEN_CRYPT_TOKEN **pCt); void AB_Banking_ClearCryptTokenList(AB_BANKING *ab); int AB_Banking_CheckCryptToken(AB_BANKING *ab, GWEN_CRYPT_TOKEN_DEVICE devt, GWEN_BUFFER *typeName, GWEN_BUFFER *tokenName); /*@}*/ /** * Get a named unique id. * Previously there was only one source for unique ids which was used for everything, fastly increasing that id. * Now new id counters can be incremented separately. * @param ab pointer to AB_BANKING object * @param idName name of the id to get (e.g. "account", "user", "job" etc) * @param startAtStdUniqueId if the given id is zero and this var is !=0 start with the current standard uniqueId */ int AB_Banking_GetNamedUniqueId(AB_BANKING *ab, const char *idName, int startAtStdUniqueId); int AB_Banking_GetCert(AB_BANKING *ab, const char *url, const char *defaultProto, int defaultPort, uint32_t *httpFlags, uint32_t pid); /** * This copies the name of the folder for AqBanking's backend data into * the given GWEN_Buffer. * * An example path would be "/home/USER/.aqbanking/backends/aqhbci/data". * * @return 0 if ok, error code otherwise (see @ref GWEN_ERROR) * @param ab pointer to the AB_BANKING object * @param name name of the online banking provider (e.g. "aqhbci") * @param buf buffer to append the path name to */ int AB_Banking_GetProviderUserDataDir(const AB_BANKING *ab, const char *name, GWEN_BUFFER *buf); /** * Returns the name of the user folder for application data. * Normally this is something like "/home/me/.aqbanking/apps". * Your application may choose to create folders below this one to store * user data. If you only add AqBanking to an existing program to add * home banking support you will most likely use your own folders and thus * won't need this function. * @return 0 if ok, error code otherwise (see @ref AB_ERROR) * @param ab pointer to the AB_BANKING object * @param buf GWEN_BUFFER to append the path name to */ int AB_Banking_GetAppUserDataDir(const AB_BANKING *ab, GWEN_BUFFER *buf); /** @name Account Spec Management Functions * */ /*@{*/ int AB_Banking_ReadAccountSpec(const AB_BANKING *ab, uint32_t uniqueId, AB_ACCOUNT_SPEC **pAccountSpec); int AB_Banking_WriteAccountSpec(AB_BANKING *ab, const AB_ACCOUNT_SPEC *accountSpec); int AB_Banking_DeleteAccountSpec(AB_BANKING *ab, uint32_t uid); /*@}*/ /** * @return 0 if there are some groups, error code otherwise (especially GWEN_ERROR_PARTIAL if some groups couldn't be read * and GWEN_ERROR_NOT_FOUND if there no groups found). * @param ab AQBANKING object * @param groupName name of the config group * @param uidField name of an integer variable in the config groups which MUST NOT be zero (NULL to skip this test) * @param matchVar name of a variable in the config groups whose value must match matchVal (NULL to skip this test) * @param matchVal value to match the matchVar variable (NULL for empty value) * @param pDb pointer to a variable to receive the newly created DB, each subgroup contains a config group */ int AB_Banking_ReadConfigGroups(const AB_BANKING *ab, const char *groupName, const char *uidField, const char *matchVar, const char *matchVal, GWEN_DB_NODE **pDb); /** * This function tries to fill missing fields in a given transaction. * It tries to fill missing data from the given local account (IBAN, BIC, owner name etc). * * @param ab pointer to the AB_BANKING object * @param localAccount account from which local info is copied (may be NULL) * @param t transaction to fill */ void AB_Banking_FillGapsInTransaction(AB_BANKING *ab, AB_ACCOUNT *localAccount, AB_TRANSACTION *t); /** * Get a list of SWIFT descriptors supported by the given imExporter. * * a SWIFT descriptor is an object holding the elements of a SWIFT format name (e.g. "pain.001.002.03"). * Normally you would use "xml" for the name of the imexporter. */ AB_SWIFT_DESCR_LIST *AB_Banking_GetSwiftDescriptorsForImExporter(AB_BANKING *ab, const char *imExporterName); /** * Append a log message to a log file for the given job id. * The file is created if it doesn't exist. */ void AB_Banking_LogMsgForJobId(const AB_BANKING *ab, uint32_t jobId, const char *fmt, ...); /** * Append small bits of information about a given transaction to buffer. */ void AB_Banking_AddJobInfoToBuffer(const AB_TRANSACTION *t, GWEN_BUFFER *buf); /** * Write a log message for the given job id using info from the given transaction. */ void AB_Banking_LogCmdInfoMsgForJob(const AB_BANKING *ab, const AB_TRANSACTION *t, uint32_t jid, const char *msg); #ifdef __cplusplus } #endif /*@}*/ #endif /* AQBANKING_BANKING_BE_H */ aqbanking-6.6.1/src/libs/aqbanking/banking_cfg.c0000664000175000017500000004241214627071733016466 00000000000000/*************************************************************************** begin : Sat Sep 27 2008 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ static int _readGroupsFromStringList(GWEN_CONFIGMGR *configMgr, const GWEN_STRINGLIST *sl, const char *groupName, const char *uidField, const char *matchVar, const char *matchVal, GWEN_DB_NODE *dbRoot); static GWEN_DB_NODE *_lockReadUnlockGroup(GWEN_CONFIGMGR *configMgr, const char *groupName, const char *t); static int _addOrFreeGroup(GWEN_DB_NODE *dbAll, GWEN_DB_NODE *db, const char *uidField, const char *matchVar, const char *matchVal); static int _chkConfigMgrAndMkIdFromGroupAndUniqueId(GWEN_CONFIGMGR *configMgr, const char *groupName, uint32_t uniqueId, char *ptrIdBuf, int lenIdBuf); int AB_Banking__GetConfigManager(AB_BANKING *ab, const char *dname) { GWEN_BUFFER *buf; char home[256]; if (GWEN_Directory_GetHomeDirectory(home, sizeof(home))) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Could not determine home directory, aborting."); abort(); } buf=GWEN_Buffer_new(0, 256, 0, 1); if (dname) { /* setup data dir */ ab->dataDir=strdup(dname); /* determine config manager URL */ GWEN_Buffer_AppendString(buf, "dir://"); GWEN_Buffer_AppendString(buf, dname); GWEN_Buffer_AppendString(buf, DIRSEP); GWEN_Buffer_AppendString(buf, AB_BANKING_SETTINGS_DIR); } else { const char *s; uint32_t pos; GWEN_Buffer_AppendString(buf, "dir://"); pos=GWEN_Buffer_GetPos(buf); /* determine config directory */ s=getenv("AQBANKING_HOME"); if (s && !*s) s=0; if (s) GWEN_Buffer_AppendString(buf, s); else { /* use default */ GWEN_Buffer_AppendString(buf, home); GWEN_Buffer_AppendString(buf, DIRSEP); GWEN_Buffer_AppendString(buf, AB_BANKING_USERDATADIR); } /* as we are at it: store default data dir */ ab->dataDir=strdup(GWEN_Buffer_GetStart(buf)+pos); /* continue with settings folder */ GWEN_Buffer_AppendString(buf, DIRSEP); GWEN_Buffer_AppendString(buf, AB_BANKING_SETTINGS_DIR); } DBG_INFO(AQBANKING_LOGDOMAIN, "Using data folder [%s]", ab->dataDir); DBG_INFO(AQBANKING_LOGDOMAIN, "Using ConfigManager [%s]", GWEN_Buffer_GetStart(buf)); ab->configMgr=GWEN_ConfigMgr_Factory(GWEN_Buffer_GetStart(buf)); if (ab->configMgr==NULL) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Could not create ConfigMgr[%s]. " "Maybe the gwenhywfar plugins are not installed?", GWEN_Buffer_GetStart(buf)); GWEN_Buffer_free(buf); return GWEN_ERROR_GENERIC; } /* done */ GWEN_Buffer_free(buf); return 0; } int AB_Banking_LoadSharedConfig(AB_BANKING *ab, const char *name, GWEN_DB_NODE **pDb) { assert(ab); assert(name); if (name) { int rv; rv=GWEN_ConfigMgr_GetGroup(ab->configMgr, AB_CFG_GROUP_SHARED, name, pDb); if (rv<0) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Could not load shared group [%s] (%d)", name, rv); return rv; } return 0; } else { DBG_INFO(AQBANKING_LOGDOMAIN, "Name of shared group missing"); return GWEN_ERROR_GENERIC; } } int AB_Banking_SaveSharedConfig(AB_BANKING *ab, const char *name, GWEN_DB_NODE *db) { assert(ab); assert(name); if (name) { int rv; rv=GWEN_ConfigMgr_SetGroup(ab->configMgr, AB_CFG_GROUP_SHARED, name, db); if (rv<0) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Could not save shared group [%s] (%d)", name, rv); return rv; } return 0; } else { DBG_INFO(AQBANKING_LOGDOMAIN, "Name of shared group missing"); return GWEN_ERROR_GENERIC; } } int AB_Banking_LockSharedConfig(AB_BANKING *ab, const char *name) { assert(ab); assert(name); if (name) { int rv; rv=GWEN_ConfigMgr_LockGroup(ab->configMgr, AB_CFG_GROUP_SHARED, name); if (rv<0) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Could not lock shared group [%s] (%d)", name, rv); return rv; } return 0; } else { DBG_INFO(AQBANKING_LOGDOMAIN, "Name of shared group missing"); return GWEN_ERROR_GENERIC; } } int AB_Banking_UnlockSharedConfig(AB_BANKING *ab, const char *name) { assert(ab); assert(name); if (name) { int rv; rv=GWEN_ConfigMgr_UnlockGroup(ab->configMgr, AB_CFG_GROUP_SHARED, name); if (rv<0) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Could not unlock shared group [%s] (%d)", name, rv); return rv; } return 0; } else { DBG_INFO(AQBANKING_LOGDOMAIN, "Name of shared group missing"); return GWEN_ERROR_GENERIC; } } int AB_Banking_GetUserDataDir(const AB_BANKING *ab, GWEN_BUFFER *buf) { if (ab->dataDir) { GWEN_Buffer_AppendString(buf, ab->dataDir); return 0; } else { DBG_ERROR(AQBANKING_LOGDOMAIN, "No data dir (not init?)"); return GWEN_ERROR_GENERIC; } } int AB_Banking_GetSharedDataDir(const AB_BANKING *ab, const char *name, GWEN_BUFFER *buf) { assert(ab); if (ab->dataDir) { GWEN_Buffer_AppendString(buf, ab->dataDir); GWEN_Buffer_AppendString(buf, DIRSEP "shared" DIRSEP); if (GWEN_Text_EscapeToBufferTolerant(name, buf)) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Bad share name, aborting."); abort(); } else { char *s; s=GWEN_Buffer_GetStart(buf); while (*s) { *s=tolower(*s); s++; } } return 0; } else { DBG_ERROR(AQBANKING_LOGDOMAIN, "No data dir (not init?)"); return GWEN_ERROR_GENERIC; } } int AB_Banking_GetAppUserDataDir(const AB_BANKING *ab, GWEN_BUFFER *buf) { int rv; assert(ab->appEscName); rv=AB_Banking_GetUserDataDir(ab, buf); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); return rv; } GWEN_Buffer_AppendString(buf, DIRSEP "apps" DIRSEP); GWEN_Buffer_AppendString(buf, ab->appEscName); GWEN_Buffer_AppendString(buf, DIRSEP "data"); return 0; } int AB_Banking_GetProviderUserDataDir(const AB_BANKING *ab, const char *name, GWEN_BUFFER *buf) { int rv; rv=AB_Banking_GetUserDataDir(ab, buf); if (rv) return rv; GWEN_Buffer_AppendString(buf, DIRSEP "backends" DIRSEP); GWEN_Buffer_AppendString(buf, name); GWEN_Buffer_AppendString(buf, DIRSEP "data"); return 0; } GWEN_STRINGLIST *AB_Banking_GetGlobalDataDirs(void) { GWEN_STRINGLIST *sl; sl=GWEN_PathManager_GetPaths(AB_PM_LIBNAME, AB_PM_DATADIR); return sl; } GWEN_STRINGLIST *AB_Banking_GetGlobalSysconfDirs(void) { GWEN_STRINGLIST *sl; sl=GWEN_PathManager_GetPaths(AB_PM_LIBNAME, AB_PM_SYSCONFDIR); return sl; } int AB_Banking_ReadNamedConfigGroup(const AB_BANKING *ab, const char *groupName, const char *subGroupName, int doLock, int doUnlock, GWEN_DB_NODE **pDb) { GWEN_DB_NODE *db=NULL; int rv; assert(ab); /* check for config manager (created by AB_Banking_Init) */ if (ab->configMgr==NULL) { DBG_ERROR(AQBANKING_LOGDOMAIN, "No config manager (maybe the gwenhywfar plugins are not installed?"); return GWEN_ERROR_GENERIC; } /* lock group if requested */ if (doLock) { rv=GWEN_ConfigMgr_LockGroup(ab->configMgr, groupName, subGroupName); if (rv<0) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Unable to lock config group (%d)", rv); return rv; } } /* load group */ rv=GWEN_ConfigMgr_GetGroup(ab->configMgr, groupName, subGroupName, &db); if (rv<0) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Could not load config group (%d)", rv); if (doLock) GWEN_ConfigMgr_UnlockGroup(ab->configMgr, groupName, subGroupName); return rv; } /* unlock group */ if (doUnlock) { rv=GWEN_ConfigMgr_UnlockGroup(ab->configMgr, groupName, subGroupName); if (rv<0) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Unable to unlock config group (%d)", rv); GWEN_DB_Group_free(db); return rv; } } *pDb=db; return 0; } int AB_Banking_WriteNamedConfigGroup(AB_BANKING *ab, const char *groupName, const char *subGroupName, int doLock, int doUnlock, GWEN_DB_NODE *db) { int rv; assert(ab); assert(db); /* check for config manager (created by AB_Banking_Init) */ if (ab->configMgr==NULL) { DBG_ERROR(AQBANKING_LOGDOMAIN, "No config manager (maybe the gwenhywfar plugins are not installed?"); return GWEN_ERROR_GENERIC; } /* lock group */ if (doLock) { rv=GWEN_ConfigMgr_LockGroup(ab->configMgr, groupName, subGroupName); if (rv<0) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Unable to lock config group (%d)", rv); return rv; } } /* store group (is locked now) */ rv=GWEN_ConfigMgr_SetGroup(ab->configMgr, groupName, subGroupName, db); if (rv<0) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Could not load config group (%d)", rv); if (doLock) GWEN_ConfigMgr_UnlockGroup(ab->configMgr, groupName, subGroupName); return rv; } /* unlock group */ if (doUnlock) { rv=GWEN_ConfigMgr_UnlockGroup(ab->configMgr, groupName, subGroupName); if (rv<0) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Unable to unlock config group (%d)", rv); return rv; } } return 0; } int AB_Banking_ReadConfigGroup(const AB_BANKING *ab, const char *groupName, uint32_t uniqueId, int doLock, int doUnlock, GWEN_DB_NODE **pDb) { int rv; char idBuf[256]; assert(ab); rv=_chkConfigMgrAndMkIdFromGroupAndUniqueId(ab->configMgr, groupName, uniqueId, idBuf, sizeof(idBuf)); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); return rv; } rv=AB_Banking_ReadNamedConfigGroup(ab, groupName, idBuf, doLock, doUnlock, pDb); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); return rv; } return rv; } int AB_Banking_HasConfigGroup(const AB_BANKING *ab, const char *groupName, uint32_t uniqueId) { int rv; char idBuf[256]; rv=_chkConfigMgrAndMkIdFromGroupAndUniqueId(ab->configMgr, groupName, uniqueId, idBuf, sizeof(idBuf)); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); return rv; } rv=GWEN_ConfigMgr_HasGroup(ab->configMgr, groupName, idBuf); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); return rv; } return rv; } int AB_Banking_WriteConfigGroup(AB_BANKING *ab, const char *groupName, uint32_t uniqueId, int doLock, int doUnlock, GWEN_DB_NODE *db) { int rv; char idBuf[256]; assert(ab); assert(db); rv=_chkConfigMgrAndMkIdFromGroupAndUniqueId(ab->configMgr, groupName, uniqueId, idBuf, sizeof(idBuf)); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); return rv; } rv=AB_Banking_WriteNamedConfigGroup(ab, groupName, idBuf, doLock, doUnlock, db); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); return rv; } return rv; } int AB_Banking_DeleteConfigGroup(AB_BANKING *ab, const char *groupName, uint32_t uniqueId) { int rv; char idBuf[256]; assert(ab); rv=_chkConfigMgrAndMkIdFromGroupAndUniqueId(ab->configMgr, groupName, uniqueId, idBuf, sizeof(idBuf)); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); return rv; } /* unlock group */ rv=GWEN_ConfigMgr_DeleteGroup(ab->configMgr, groupName, idBuf); if (rv<0) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Unable to delete config group (%d)", rv); return rv; } return 0; } int AB_Banking_UnlockConfigGroup(AB_BANKING *ab, const char *groupName, uint32_t uniqueId) { int rv; char idBuf[256]; assert(ab); rv=_chkConfigMgrAndMkIdFromGroupAndUniqueId(ab->configMgr, groupName, uniqueId, idBuf, sizeof(idBuf)); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); return rv; } /* unlock group */ rv=GWEN_ConfigMgr_UnlockGroup(ab->configMgr, groupName, idBuf); if (rv<0) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Unable to unlock config group (%d)", rv); return rv; } return 0; } int AB_Banking_ReadConfigGroups(const AB_BANKING *ab, const char *groupName, const char *uidField, const char *matchVar, const char *matchVal, GWEN_DB_NODE **pDb) { GWEN_STRINGLIST *sl; int rv; sl=GWEN_StringList_new(); rv=GWEN_ConfigMgr_ListSubGroups(ab->configMgr, groupName, sl); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); GWEN_StringList_free(sl); return rv; } if (GWEN_StringList_Count(sl)<1) { DBG_INFO(AQBANKING_LOGDOMAIN, "No config groups found for \"%s\"", groupName); GWEN_StringList_free(sl); return GWEN_ERROR_NOT_FOUND; } else { GWEN_DB_NODE *dbRoot; dbRoot=GWEN_DB_Group_new("all"); rv=_readGroupsFromStringList(ab->configMgr, sl, groupName, uidField, matchVar, matchVal, dbRoot); GWEN_StringList_free(sl); if (rv<0 && rv!=GWEN_ERROR_PARTIAL) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); GWEN_DB_Group_free(dbRoot); return rv; } *pDb=dbRoot; return rv; } } int _readGroupsFromStringList(GWEN_CONFIGMGR *configMgr, const GWEN_STRINGLIST *sl, const char *groupName, const char *uidField, const char *matchVar, const char *matchVal, GWEN_DB_NODE *dbRoot) { GWEN_STRINGLISTENTRY *se; int ignoredGroups=0; int addedGroups=0; se=GWEN_StringList_FirstEntry(sl); while (se) { const char *t; GWEN_DB_NODE *db=NULL; t=GWEN_StringListEntry_Data(se); assert(t); db=_lockReadUnlockGroup(configMgr, groupName, t); if (db==NULL) { ignoredGroups++; } else { int rv; rv=_addOrFreeGroup(dbRoot, db, uidField, matchVar, matchVal); if (rv==1) { DBG_DEBUG(AQBANKING_LOGDOMAIN, "Added group %s/%s", groupName, t); addedGroups++; } } /* if group */ se=GWEN_StringListEntry_Next(se); } /* while se */ if (ignoredGroups) return GWEN_ERROR_PARTIAL; return addedGroups?0:GWEN_ERROR_NOT_FOUND; } GWEN_DB_NODE *_lockReadUnlockGroup(GWEN_CONFIGMGR *configMgr, const char *groupName, const char *subgroupName) { GWEN_DB_NODE *db=NULL; int rv; /* lock before reading */ rv=GWEN_ConfigMgr_LockGroup(configMgr, groupName, subgroupName); if (rv<0) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Unable to lock config group \"%s/%s\" (%d), ignoring", groupName, subgroupName, rv); return NULL; } else { rv=GWEN_ConfigMgr_GetGroup(configMgr, groupName, subgroupName, &db); if (rv<0) { DBG_WARN(AQBANKING_LOGDOMAIN, "Could not load group [%s/%s] (%d), ignoring", groupName, subgroupName, rv); GWEN_ConfigMgr_UnlockGroup(configMgr, groupName, subgroupName); return NULL; } /* unlock after reading */ rv=GWEN_ConfigMgr_UnlockGroup(configMgr, groupName, subgroupName); if (rv<0) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Could not unlock group [%s/%s] (%d)", groupName, subgroupName, rv); } GWEN_DB_GroupRename(db, subgroupName); return db; } /* if locking ok */ } int _addOrFreeGroup(GWEN_DB_NODE *dbAll, GWEN_DB_NODE *db, const char *uidField, const char *matchVar, const char *matchVal) { int doAdd=1; if (doAdd && uidField && *uidField && GWEN_DB_GetIntValue(db, uidField, 0, 0)==0) doAdd=0; if (doAdd && matchVar && *matchVar) { const char *s; s=GWEN_DB_GetCharValue(db, matchVar, 0, NULL); if (!(s && *s && strcasecmp(s, matchVal)==0)) doAdd=0; } if (doAdd) GWEN_DB_AddGroup(dbAll, db); else GWEN_DB_Group_free(db); return doAdd; } int _chkConfigMgrAndMkIdFromGroupAndUniqueId(GWEN_CONFIGMGR *configMgr, const char *groupName, uint32_t uniqueId, char *ptrIdBuf, int lenIdBuf) { int rv; /* check for config manager (created by AB_Banking_Init) */ if (configMgr==NULL) { DBG_ERROR(AQBANKING_LOGDOMAIN, "No config manager (maybe the gwenhywfar plugins are not installed?"); return GWEN_ERROR_GENERIC; } /* make config manager id from given unique id */ rv=GWEN_ConfigMgr_MkUniqueIdFromId(configMgr, groupName, uniqueId, 0, ptrIdBuf, lenIdBuf-1); if (rv<0) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Unable to create a unique id for config group (%d)", rv); return rv; } ptrIdBuf[lenIdBuf-1]=0; return rv; } aqbanking-6.6.1/src/libs/aqbanking/dialogs/0000755000175000017500000000000015037736156015572 500000000000000aqbanking-6.6.1/src/libs/aqbanking/dialogs/dlg_newaccount.c0000664000175000017500000000307614043610744020650 00000000000000/*************************************************************************** begin : Wed Apr 14 2010 copyright : (C) 2010 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "dlg_newaccount_p.h" GWEN_INHERIT(GWEN_DIALOG, AB_NEWACCOUNT_DIALOG) GWEN_DIALOG *AB_NewAccountDialog_new(AB_BANKING *ab, const char *dname) { GWEN_DIALOG *dlg; AB_NEWACCOUNT_DIALOG *xdlg; dlg=GWEN_Dialog_new(dname); GWEN_NEW_OBJECT(AB_NEWACCOUNT_DIALOG, xdlg); GWEN_INHERIT_SETDATA(GWEN_DIALOG, AB_NEWACCOUNT_DIALOG, dlg, xdlg, AB_NewAccountDialog_FreeData); return dlg; } void GWENHYWFAR_CB AB_NewAccountDialog_FreeData(void *bp, void *p) { AB_NEWACCOUNT_DIALOG *xdlg; xdlg=(AB_NEWACCOUNT_DIALOG *) p; GWEN_FREE_OBJECT(xdlg); } AB_ACCOUNT *AB_NewAccountDialog_GetAccount(const GWEN_DIALOG *dlg) { AB_NEWACCOUNT_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AB_NEWACCOUNT_DIALOG, dlg); assert(dlg); return xdlg->account; } void AB_NewAccountDialog_SetAccount(GWEN_DIALOG *dlg, AB_ACCOUNT *a) { AB_NEWACCOUNT_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AB_NEWACCOUNT_DIALOG, dlg); assert(dlg); xdlg->account=a; } aqbanking-6.6.1/src/libs/aqbanking/dialogs/dlg_selectbackend.h0000664000175000017500000000333614043610744021275 00000000000000/*************************************************************************** begin : Wed Apr 14 2010 copyright : (C) 2010 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQBANKING_DLG_SELECTBACKEND_H #define AQBANKING_DLG_SELECTBACKEND_H #include #include #include #include /** @defgroup G_AB_DIALOGS_SELECT_BACKEND Select a Backend * @ingroup G_AB_DIALOGS * */ /*@{*/ #ifdef __cplusplus extern "C" { #endif /** * This function creates and executes a dialog which lets the user choose an online banking * backend from the list of installed backends. * This is a convenience function. * @param ab pointer to the AB_BANKING object used by the application * @param initial name of the initially selected backend * @param text text to be shown as introduction declaring what the backend is needed for (e.g. * "Please select the backend to create a new user for"). * @return pointer to the selected backend (or NULL on error) */ AB_PROVIDER *AB_SelectBackend(AB_BANKING *ab, const char *initial, const char *text); GWEN_DIALOG *AB_SelectBackendDialog_new(AB_BANKING *ab, const char *text); const char *AB_SelectBackendDialog_GetSelectedProvider(const GWEN_DIALOG *dlg); void AB_SelectBackendDialog_SetSelectedProvider(GWEN_DIALOG *dlg, const char *s); #ifdef __cplusplus } #endif /*@}*/ #endif aqbanking-6.6.1/src/libs/aqbanking/dialogs/dlg_selectbackend.dlg0000664000175000017500000000301014043610744021601 00000000000000 aqbanking-6.6.1/src/libs/aqbanking/dialogs/Makefile.in0000644000175000017500000007173715037736024017570 00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/libs/aqbanking/dialogs ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/distri.m4 $(top_srcdir)/m4/gwenhywfar.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/os.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libabdialogs_la_LIBADD = am_libabdialogs_la_OBJECTS = dlg_importer.lo dlg_selectbankinfo.lo \ dlg_setup.lo dlg_selectbackend.lo dlg_editaccount.lo \ dlg_edituser.lo dlg_usertype_page.lo dlg_setup_newuser.lo \ dlg_usertype_pagedefault.lo dlg_newaccount.lo dlg_newuser.lo \ w_profilelist.lo w_importerlist.lo libabdialogs_la_OBJECTS = $(am_libabdialogs_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/dlg_editaccount.Plo \ ./$(DEPDIR)/dlg_edituser.Plo ./$(DEPDIR)/dlg_importer.Plo \ ./$(DEPDIR)/dlg_newaccount.Plo ./$(DEPDIR)/dlg_newuser.Plo \ ./$(DEPDIR)/dlg_selectbackend.Plo \ ./$(DEPDIR)/dlg_selectbankinfo.Plo ./$(DEPDIR)/dlg_setup.Plo \ ./$(DEPDIR)/dlg_setup_newuser.Plo \ ./$(DEPDIR)/dlg_usertype_page.Plo \ ./$(DEPDIR)/dlg_usertype_pagedefault.Plo \ ./$(DEPDIR)/w_importerlist.Plo ./$(DEPDIR)/w_profilelist.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libabdialogs_la_SOURCES) DIST_SOURCES = $(libabdialogs_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(dlgdatadir)" DATA = $(dlgdata_DATA) HEADERS = $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADD_ACLOCAL_FLAGS = @ADD_ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AQBANKING_CLI_VERSION_STRING = @AQBANKING_CLI_VERSION_STRING@ AQBANKING_FINTS_VERSION_STRING = @AQBANKING_FINTS_VERSION_STRING@ AQBANKING_SO_AGE = @AQBANKING_SO_AGE@ AQBANKING_SO_CURRENT = @AQBANKING_SO_CURRENT@ AQBANKING_SO_EFFECTIVE = @AQBANKING_SO_EFFECTIVE@ AQBANKING_SO_REVISION = @AQBANKING_SO_REVISION@ AQBANKING_VERSION_BUILD = @AQBANKING_VERSION_BUILD@ AQBANKING_VERSION_FULL_STRING = @AQBANKING_VERSION_FULL_STRING@ AQBANKING_VERSION_MAJOR = @AQBANKING_VERSION_MAJOR@ AQBANKING_VERSION_MINOR = @AQBANKING_VERSION_MINOR@ AQBANKING_VERSION_PATCHLEVEL = @AQBANKING_VERSION_PATCHLEVEL@ AQBANKING_VERSION_RELEASE_STRING = @AQBANKING_VERSION_RELEASE_STRING@ AQBANKING_VERSION_STRING = @AQBANKING_VERSION_STRING@ AQBANKING_VERSION_TAG = @AQBANKING_VERSION_TAG@ AQEBICS_CFLAGS = @AQEBICS_CFLAGS@ AQEBICS_LIBS = @AQEBICS_LIBS@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATETIME = @DATETIME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_EXCLUDE_PATTERNS = @DOXYGEN_EXCLUDE_PATTERNS@ DOXYGEN_FILE_PATTERNS = @DOXYGEN_FILE_PATTERNS@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENGUI_GTK2_CFLAGS = @GWENGUI_GTK2_CFLAGS@ GWENGUI_GTK2_LIBS = @GWENGUI_GTK2_LIBS@ GWENHYWFAR_MINIMUM_VERSION = @GWENHYWFAR_MINIMUM_VERSION@ HAVE_GWENGUI_GTK2 = @HAVE_GWENGUI_GTK2@ HAVE_I18N = @HAVE_I18N@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIBXSLT_CFLAGS = @LIBXSLT_CFLAGS@ LIBXSLT_LIBS = @LIBXSLT_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_SUPPORTS_QT = @MSGFMT_SUPPORTS_QT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ TUTORIALS = @TUTORIALS@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XMLMERGE = @XMLMERGE@ XMLSEC_CFLAGS = @XMLSEC_CFLAGS@ XMLSEC_LIBS = @XMLSEC_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ aqbanking_backends = @aqbanking_backends@ aqbanking_cfg_searchdir = @aqbanking_cfg_searchdir@ aqbanking_data_searchdir = @aqbanking_data_searchdir@ aqbanking_headerdir = @aqbanking_headerdir@ aqbanking_headerdir_am = @aqbanking_headerdir_am@ aqbanking_includes = @aqbanking_includes@ aqbanking_internal_libs = @aqbanking_internal_libs@ aqbanking_ldflags = @aqbanking_ldflags@ aqbanking_libs = @aqbanking_libs@ aqbanking_locale_searchdir = @aqbanking_locale_searchdir@ aqbanking_modules = @aqbanking_modules@ aqbanking_pkgdatadir = @aqbanking_pkgdatadir@ aqbanking_plugin_searchdir = @aqbanking_plugin_searchdir@ aqbanking_plugindir = @aqbanking_plugindir@ aqbanking_plugins_backends_dirs = @aqbanking_plugins_backends_dirs@ aqbanking_plugins_backends_libs = @aqbanking_plugins_backends_libs@ aqbanking_plugins_bankinfo_dirs = @aqbanking_plugins_bankinfo_dirs@ aqbanking_plugins_bankinfo_libs = @aqbanking_plugins_bankinfo_libs@ aqbanking_plugins_imexporters_dirs = @aqbanking_plugins_imexporters_dirs@ aqbanking_plugins_imexporters_libs = @aqbanking_plugins_imexporters_libs@ aqbanking_plugins_parsers_dirs = @aqbanking_plugins_parsers_dirs@ aqbanking_symlinkdir = @aqbanking_symlinkdir@ aqbanking_sys_is_windows = @aqbanking_sys_is_windows@ aqbankingpp_modules = @aqbankingpp_modules@ aqebics_datadir = @aqebics_datadir@ aqebics_includes = @aqebics_includes@ aqebics_internal_libs = @aqebics_internal_libs@ aqebics_ldflags = @aqebics_ldflags@ aqebics_libs = @aqebics_libs@ aqfints_datadir = @aqfints_datadir@ aqhbci_datadir = @aqhbci_datadir@ aqhbci_includes = @aqhbci_includes@ aqhbci_internal_libs = @aqhbci_internal_libs@ aqhbci_ldflags = @aqhbci_ldflags@ aqhbci_libs = @aqhbci_libs@ aqofxconnect_includes = @aqofxconnect_includes@ aqofxconnect_internal_libs = @aqofxconnect_internal_libs@ aqofxconnect_libs = @aqofxconnect_libs@ aqpaypal_includes = @aqpaypal_includes@ aqpaypal_internal_libs = @aqpaypal_internal_libs@ aqpaypal_libs = @aqpaypal_libs@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gmp_libs = @gmp_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_dir = @gwenhywfar_dir@ gwenhywfar_has_crypt = @gwenhywfar_has_crypt@ gwenhywfar_headers = @gwenhywfar_headers@ gwenhywfar_includes = @gwenhywfar_includes@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_plugins = @gwenhywfar_plugins@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ typemaker2_exe = @typemaker2_exe@ visibility_cflags = @visibility_cflags@ with_aqebics = @with_aqebics@ with_aqhbci = @with_aqhbci@ AM_CPPFLAGS = -I$(srcdir)/../.. -I$(srcdir)/.. -I$(top_builddir)/src/libs $(gwenhywfar_includes) AM_CFLAGS = -DBUILDING_AQBANKING @visibility_cflags@ noinst_LTLIBRARIES = libabdialogs.la #iheaderdir=@aqbanking_headerdir_am@/aqbanking #iheader_HEADERS= noinst_HEADERS = \ dlg_importer.h \ dlg_selectbankinfo.h \ dlg_setup.h \ dlg_selectbackend.h \ dlg_editaccount.h \ dlg_edituser.h \ dlg_usertype_page_be.h \ dlg_setup_newuser.h \ dlg_importer_p.h \ dlg_selectbankinfo_p.h \ dlg_setup_p.h \ dlg_selectbackend_p.h \ dlg_editaccount_p.h \ dlg_edituser_p.h \ dlg_usertype_page_p.h \ dlg_setup_newuser_p.h \ dlg_usertype_pagedefault_l.h \ dlg_usertype_pagedefault_p.h \ dlg_newaccount_be.h \ dlg_newaccount_p.h \ dlg_newuser_be.h \ dlg_newuser_p.h \ w_profilelist.h \ w_importerlist.h libabdialogs_la_SOURCES = \ dlg_importer.c \ dlg_selectbankinfo.c \ dlg_setup.c \ dlg_selectbackend.c \ dlg_editaccount.c \ dlg_edituser.c \ dlg_usertype_page.c \ dlg_setup_newuser.c \ dlg_usertype_pagedefault.c \ dlg_newaccount.c \ dlg_newuser.c \ w_profilelist.c \ w_importerlist.c dlgdatadir = $(aqbanking_pkgdatadir)/dialogs dlgdata_DATA = \ dlg_importer.dlg \ dlg_selectbankinfo.dlg \ dlg_setup.dlg \ dlg_selectbackend.dlg \ dlg_editaccount.dlg \ dlg_edituser.dlg \ dlg_setup_newuser.dlg \ dlg_usertype_pagedefault.dlg EXTRA_DIST = $(typefiles) $(dlgdata_DATA) all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libs/aqbanking/dialogs/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libs/aqbanking/dialogs/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libabdialogs.la: $(libabdialogs_la_OBJECTS) $(libabdialogs_la_DEPENDENCIES) $(EXTRA_libabdialogs_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libabdialogs_la_OBJECTS) $(libabdialogs_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dlg_editaccount.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dlg_edituser.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dlg_importer.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dlg_newaccount.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dlg_newuser.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dlg_selectbackend.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dlg_selectbankinfo.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dlg_setup.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dlg_setup_newuser.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dlg_usertype_page.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dlg_usertype_pagedefault.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/w_importerlist.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/w_profilelist.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-dlgdataDATA: $(dlgdata_DATA) @$(NORMAL_INSTALL) @list='$(dlgdata_DATA)'; test -n "$(dlgdatadir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(dlgdatadir)'"; \ $(MKDIR_P) "$(DESTDIR)$(dlgdatadir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(dlgdatadir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(dlgdatadir)" || exit $$?; \ done uninstall-dlgdataDATA: @$(NORMAL_UNINSTALL) @list='$(dlgdata_DATA)'; test -n "$(dlgdatadir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(dlgdatadir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(dlgdatadir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/dlg_editaccount.Plo -rm -f ./$(DEPDIR)/dlg_edituser.Plo -rm -f ./$(DEPDIR)/dlg_importer.Plo -rm -f ./$(DEPDIR)/dlg_newaccount.Plo -rm -f ./$(DEPDIR)/dlg_newuser.Plo -rm -f ./$(DEPDIR)/dlg_selectbackend.Plo -rm -f ./$(DEPDIR)/dlg_selectbankinfo.Plo -rm -f ./$(DEPDIR)/dlg_setup.Plo -rm -f ./$(DEPDIR)/dlg_setup_newuser.Plo -rm -f ./$(DEPDIR)/dlg_usertype_page.Plo -rm -f ./$(DEPDIR)/dlg_usertype_pagedefault.Plo -rm -f ./$(DEPDIR)/w_importerlist.Plo -rm -f ./$(DEPDIR)/w_profilelist.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dlgdataDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/dlg_editaccount.Plo -rm -f ./$(DEPDIR)/dlg_edituser.Plo -rm -f ./$(DEPDIR)/dlg_importer.Plo -rm -f ./$(DEPDIR)/dlg_newaccount.Plo -rm -f ./$(DEPDIR)/dlg_newuser.Plo -rm -f ./$(DEPDIR)/dlg_selectbackend.Plo -rm -f ./$(DEPDIR)/dlg_selectbankinfo.Plo -rm -f ./$(DEPDIR)/dlg_setup.Plo -rm -f ./$(DEPDIR)/dlg_setup_newuser.Plo -rm -f ./$(DEPDIR)/dlg_usertype_page.Plo -rm -f ./$(DEPDIR)/dlg_usertype_pagedefault.Plo -rm -f ./$(DEPDIR)/w_importerlist.Plo -rm -f ./$(DEPDIR)/w_profilelist.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-dlgdataDATA .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-generic clean-libtool clean-noinstLTLIBRARIES \ cscopelist-am ctags ctags-am distclean distclean-compile \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dlgdataDATA install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \ uninstall-dlgdataDATA .PRECIOUS: Makefile sources: for f in $(libabdialogs_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for f in $(dlgdata_DATA); do \ echo $(subdir)/$$f >>$(top_srcdir)/dlgsources; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d sources; \ done typefiles: typedefs: built_sources: cppcheck: for f in $(libabdialogs_la_SOURCES); do \ cppcheck --force $$f ; \ done # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: aqbanking-6.6.1/src/libs/aqbanking/dialogs/dlg_setup_newuser_p.h0000664000175000017500000000242314043610744021731 00000000000000/*************************************************************************** begin : Fri Jul 30 2010 copyright : (C) 2010 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQBANKING_DLG_SETUP_NEWUSER_P_H #define AQBANKING_DLG_SETUP_NEWUSER_P_H #include "dlg_setup_newuser.h" typedef struct AB_SETUP_NEWUSER_DIALOG AB_SETUP_NEWUSER_DIALOG; struct AB_SETUP_NEWUSER_DIALOG { AB_BANKING *banking; GWEN_DIALOG_LIST2 *backendDialogs; GWEN_STRINGLIST *backendRadioNames; GWEN_STRINGLIST *backendNames; char *selectedBackend; int selectedType; }; static GWENHYWFAR_CB void AB_SetupNewUserDialog_FreeData(void *bp, void *p); static GWENHYWFAR_CB int AB_SetupNewUserDialog_SignalHandler(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender); static int AB_SetupNewUserDialog_DetermineBackendIndex(GWEN_DIALOG *dlg); #endif aqbanking-6.6.1/src/libs/aqbanking/dialogs/dlg_selectbankinfo.dlg0000664000175000017500000000353414043610744022014 00000000000000 aqbanking-6.6.1/src/libs/aqbanking/dialogs/dlg_usertype_page.c0000664000175000017500000000353014214726437021360 00000000000000/*************************************************************************** begin : Fri Jul 30 2010 copyright : (C) 2010 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "dlg_usertype_page_p.h" GWEN_INHERIT(GWEN_DIALOG, AB_USERTYPE_PAGE_DIALOG) GWEN_DIALOG *AB_UserTypePageDialog_new(AB_BANKING *ab, const char *dname) { GWEN_DIALOG *dlg; AB_USERTYPE_PAGE_DIALOG *xdlg; dlg=GWEN_Dialog_new(dname); GWEN_NEW_OBJECT(AB_USERTYPE_PAGE_DIALOG, xdlg); GWEN_INHERIT_SETDATA(GWEN_DIALOG, AB_USERTYPE_PAGE_DIALOG, dlg, xdlg, AB_UserTypePageDialog_FreeData); xdlg->banking=ab; return dlg; } void GWENHYWFAR_CB AB_UserTypePageDialog_FreeData(void *bp, void *p) { AB_USERTYPE_PAGE_DIALOG *xdlg; xdlg=(AB_USERTYPE_PAGE_DIALOG *) p; GWEN_FREE_OBJECT(xdlg); } AB_BANKING *AB_UserTypePageDialog_GetBanking(const GWEN_DIALOG *dlg) { AB_USERTYPE_PAGE_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AB_USERTYPE_PAGE_DIALOG, dlg); assert(xdlg); return xdlg->banking; } int AB_UserTypePageDialog_GetSelectedType(const GWEN_DIALOG *dlg) { AB_USERTYPE_PAGE_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AB_USERTYPE_PAGE_DIALOG, dlg); assert(xdlg); return xdlg->selectedType; } void AB_UserTypePageDialog_SetSelectedType(GWEN_DIALOG *dlg, int t) { AB_USERTYPE_PAGE_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AB_USERTYPE_PAGE_DIALOG, dlg); assert(xdlg); xdlg->selectedType=t; } aqbanking-6.6.1/src/libs/aqbanking/dialogs/dlg_importer.c0000664000175000017500000006457114546575647020376 00000000000000/*************************************************************************** begin : Tue Feb 10 2010 copyright : (C) 2022 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "dlg_importer_p.h" #include "w_importerlist.h" #include "w_profilelist.h" #include "aqbanking/i18n_l.h" #include #include #include #include #include #include #define PAGE_BEGIN 0 #define PAGE_FILE 1 #define PAGE_IMPORTER 2 #define PAGE_PROFILE 3 #define PAGE_END 4 #define IMPORTER_LIST_MINCOLWIDTH 50 #define PROFILE_LIST_MINCOLWIDTH 50 #define DIALOG_MINWIDTH 400 #define DIALOG_MINHEIGHT 400 GWEN_INHERIT(GWEN_DIALOG, AB_IMPORTER_DIALOG) static GWENHYWFAR_CB void _dlgApi_FreeData(void *bp, void *p); static int _determineSelectedImporter(GWEN_DIALOG *dlg); static int _determineSelectedProfile(GWEN_DIALOG *dlg); static void _updateImporterList(GWEN_DIALOG *dlg); static void _updateProfileList(GWEN_DIALOG *dlg); static int _editProfile(GWEN_DIALOG *dlg); static int _newProfile(GWEN_DIALOG *dlg); static GWENHYWFAR_CB int _dlgApi_SignalHandler(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender); GWEN_DIALOG *AB_ImporterDialog_new(AB_BANKING *ab, AB_IMEXPORTER_CONTEXT *ctx, const char *finishedMessage) { GWEN_DIALOG *dlg; AB_IMPORTER_DIALOG *xdlg; dlg=GWEN_Dialog_CreateAndLoadWithPath("ab_importwizard", AB_PM_LIBNAME, AB_PM_DATADIR, "aqbanking/dialogs/dlg_importer.dlg"); if (dlg==NULL) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Could not create dialog \"ab_importwizard\"."); return NULL; } GWEN_NEW_OBJECT(AB_IMPORTER_DIALOG, xdlg); GWEN_INHERIT_SETDATA(GWEN_DIALOG, AB_IMPORTER_DIALOG, dlg, xdlg, _dlgApi_FreeData); GWEN_Dialog_SetSignalHandler(dlg, _dlgApi_SignalHandler); xdlg->banking=ab; xdlg->context=ctx; xdlg->finishedMessage=finishedMessage; /* done */ return dlg; } void GWENHYWFAR_CB _dlgApi_FreeData(void *bp, void *p) { AB_IMPORTER_DIALOG *xdlg; xdlg=(AB_IMPORTER_DIALOG *) p; free(xdlg->fileName); free(xdlg->importerName); free(xdlg->profileName); GWEN_FREE_OBJECT(xdlg); } const char *AB_ImporterDialog_GetFileName(const GWEN_DIALOG *dlg) { AB_IMPORTER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AB_IMPORTER_DIALOG, dlg); assert(xdlg); return xdlg->fileName; } void AB_ImporterDialog_SetFileName(GWEN_DIALOG *dlg, const char *s) { AB_IMPORTER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AB_IMPORTER_DIALOG, dlg); assert(xdlg); free(xdlg->fileName); if (s) xdlg->fileName=strdup(s); else xdlg->fileName=NULL; } const char *AB_ImporterDialog_GetImporterName(const GWEN_DIALOG *dlg) { AB_IMPORTER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AB_IMPORTER_DIALOG, dlg); assert(xdlg); return xdlg->importerName; } void AB_ImporterDialog_SetImporterName(GWEN_DIALOG *dlg, const char *s) { AB_IMPORTER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AB_IMPORTER_DIALOG, dlg); assert(xdlg); free(xdlg->importerName); if (s) xdlg->importerName=strdup(s); else xdlg->importerName=NULL; } const char *AB_ImporterDialog_GetProfileName(const GWEN_DIALOG *dlg) { AB_IMPORTER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AB_IMPORTER_DIALOG, dlg); assert(xdlg); return xdlg->profileName; } void AB_ImporterDialog_SetProfileName(GWEN_DIALOG *dlg, const char *s) { AB_IMPORTER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AB_IMPORTER_DIALOG, dlg); assert(xdlg); free(xdlg->profileName); if (s) xdlg->profileName=strdup(s); else xdlg->profileName=NULL; } void AB_ImporterDialog_Init(GWEN_DIALOG *dlg) { AB_IMPORTER_DIALOG *xdlg; GWEN_DB_NODE *dbPrefs; int i; DBG_INFO(AQBANKING_LOGDOMAIN, "Init"); assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AB_IMPORTER_DIALOG, dlg); assert(xdlg); dbPrefs=GWEN_Dialog_GetPreferences(dlg); GWEN_Dialog_SetCharProperty(dlg, "", GWEN_DialogProperty_Title, 0, I18N("File Import Wizard"), 0); if (xdlg->fileName) GWEN_Dialog_SetCharProperty(dlg, "wiz_file_edit", GWEN_DialogProperty_Value, 0, xdlg->fileName, 0); /* select first page */ GWEN_Dialog_SetIntProperty(dlg, "wiz_stack", GWEN_DialogProperty_Value, 0, 0, 0); /* setup intro page */ GWEN_Dialog_SetCharProperty(dlg, "wiz_begin_label", GWEN_DialogProperty_Title, 0, I18N( "" "

This dialog assists you in importing files." "The following steps are:

" "
    " "
  • select file to import
  • " "
  • select importer module
  • " "
  • select importer profile
  • " "
" "" "This dialog assists you in importing files.\n" "The following steps are:\n" "- select file to import\n" "- select importer module\n" "- select importer profile\n"), 0); /* setup file page */ GWEN_Dialog_SetCharProperty(dlg, "wiz_file_label", GWEN_DialogProperty_Title, 0, I18N("Please select the file to import."), 0); /* setup importer page */ GWEN_Dialog_SetCharProperty(dlg, "wiz_importer_label", GWEN_DialogProperty_Title, 0, I18N("Please select the import module for the file."), 0); GWEN_Dialog_SetCharProperty(dlg, "wiz_importer_list", GWEN_DialogProperty_Title, 0, I18N("Name\tDescription"), 0); GWEN_Dialog_SetIntProperty(dlg, "wiz_importer_list", GWEN_DialogProperty_SelectionMode, 0, GWEN_Dialog_SelectionMode_Single, 0); /* setup profile page */ GWEN_Dialog_SetCharProperty(dlg, "wiz_profile_label", GWEN_DialogProperty_Title, 0, I18N("Please select the import profile for the file."), 0); /*AB_ProfileListWidget_Init(dlg, "wiz_profile_list");*/ GWEN_Dialog_SetCharProperty(dlg, "wiz_profile_list", GWEN_DialogProperty_Title, 0, I18N("Name\tDescription"), 0); GWEN_Dialog_SetIntProperty(dlg, "wiz_profile_list", GWEN_DialogProperty_SelectionMode, 0, GWEN_Dialog_SelectionMode_Single, 0); /* setup extro page */ if (xdlg->finishedMessage && *(xdlg->finishedMessage)) GWEN_Dialog_SetCharProperty(dlg, "wiz_end_label", GWEN_DialogProperty_Title, 0, xdlg->finishedMessage, 0); else GWEN_Dialog_SetCharProperty(dlg, "wiz_end_label", GWEN_DialogProperty_Title, 0, I18N("The file has been successfully imported."), 0); /* read width */ i=GWEN_DB_GetIntValue(dbPrefs, "dialog_width", 0, -1); if (i>=DIALOG_MINWIDTH) GWEN_Dialog_SetIntProperty(dlg, "", GWEN_DialogProperty_Width, 0, i, 0); /* read height */ i=GWEN_DB_GetIntValue(dbPrefs, "dialog_height", 0, -1); if (i>=DIALOG_MINHEIGHT) GWEN_Dialog_SetIntProperty(dlg, "", GWEN_DialogProperty_Height, 0, i, 0); GWEN_Dialog_ListReadColumnSettings(dlg, "wiz_importer_list", "importer_list_", 2, IMPORTER_LIST_MINCOLWIDTH, dbPrefs); GWEN_Dialog_ListReadColumnSettings(dlg, "wiz_profile_list", "profile_list_", 2, PROFILE_LIST_MINCOLWIDTH, dbPrefs); /* disable next and previous buttons */ GWEN_Dialog_SetIntProperty(dlg, "wiz_prev_button", GWEN_DialogProperty_Enabled, 0, 0, 0); GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 1, 0); } void AB_ImporterDialog_Fini(GWEN_DIALOG *dlg) { AB_IMPORTER_DIALOG *xdlg; int i; GWEN_DB_NODE *dbPrefs; DBG_INFO(AQBANKING_LOGDOMAIN, "Fini"); assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AB_IMPORTER_DIALOG, dlg); assert(xdlg); dbPrefs=GWEN_Dialog_GetPreferences(dlg); /* store dialog width */ i=GWEN_Dialog_GetIntProperty(dlg, "", GWEN_DialogProperty_Width, 0, -1); GWEN_DB_SetIntValue(dbPrefs, GWEN_DB_FLAGS_OVERWRITE_VARS, "dialog_width", i); /* store dialog height */ i=GWEN_Dialog_GetIntProperty(dlg, "", GWEN_DialogProperty_Height, 0, -1); GWEN_DB_SetIntValue(dbPrefs, GWEN_DB_FLAGS_OVERWRITE_VARS, "dialog_height", i); /* store list column widths and sort settings (max two columns) */ GWEN_Dialog_ListWriteColumnSettings(dlg, "wiz_importer_list", "importer_list_", 2, IMPORTER_LIST_MINCOLWIDTH, dbPrefs); GWEN_Dialog_ListWriteColumnSettings(dlg, "wiz_profile_list", "profile_list_", 2, PROFILE_LIST_MINCOLWIDTH, dbPrefs); } void _updateImporterList(GWEN_DIALOG *dlg) { AB_IMPORTER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AB_IMPORTER_DIALOG, dlg); assert(xdlg); AB_ImporterListWidget_UpdateList(dlg, "wiz_importer_list", xdlg->banking); if (xdlg->importerName) AB_ImporterListWidget_SelectImporter(dlg, "wiz_importer_list", xdlg->importerName); } int _determineSelectedImporter(GWEN_DIALOG *dlg) { AB_IMPORTER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AB_IMPORTER_DIALOG, dlg); assert(xdlg); /* preset */ free(xdlg->importerName); xdlg->importerName=NULL; xdlg->importerName=AB_ImporterListWidget_GetSelectedImporter(dlg, "wiz_importer_list"); if (xdlg->importerName==NULL) return GWEN_ERROR_NOT_FOUND; return 0; } void _updateProfileList(GWEN_DIALOG *dlg) { AB_IMPORTER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AB_IMPORTER_DIALOG, dlg); assert(xdlg); AB_ProfileListWidget_UpdateList(dlg, "wiz_profile_list", xdlg->banking, xdlg->importerName); if (xdlg->profileName) AB_ProfileListWidget_SelectProfile(dlg, "wiz_profile_list", xdlg->profileName); } int _determineSelectedProfile(GWEN_DIALOG *dlg) { AB_IMPORTER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AB_IMPORTER_DIALOG, dlg); assert(xdlg); /* preset */ free(xdlg->profileName); xdlg->profileName=NULL; xdlg->profileName=AB_ProfileListWidget_GetSelectedProfile(dlg, "wiz_profile_list"); if (xdlg->profileName==NULL) return GWEN_ERROR_NOT_FOUND; return 0; } int AB_ImporterDialog_DetermineFilename(GWEN_DIALOG *dlg) { AB_IMPORTER_DIALOG *xdlg; const char *s; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AB_IMPORTER_DIALOG, dlg); assert(xdlg); free(xdlg->fileName); xdlg->fileName=NULL; s=GWEN_Dialog_GetCharProperty(dlg, "wiz_file_edit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) { xdlg->fileName=strdup(s); return 0; } return GWEN_ERROR_NOT_FOUND; } int AB_ImporterDialog_EnterPage(GWEN_DIALOG *dlg, int page, int forwards) { AB_IMPORTER_DIALOG *xdlg; int rv; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AB_IMPORTER_DIALOG, dlg); assert(xdlg); switch (page) { case PAGE_BEGIN: GWEN_Dialog_SetIntProperty(dlg, "wiz_prev_button", GWEN_DialogProperty_Enabled, 0, 0, 0); GWEN_Dialog_SetIntProperty(dlg, "wiz_stack", GWEN_DialogProperty_Value, 0, page, 0); return GWEN_DialogEvent_ResultHandled; case PAGE_FILE: GWEN_Dialog_SetIntProperty(dlg, "wiz_prev_button", GWEN_DialogProperty_Enabled, 0, 1, 0); if (xdlg->fileName==NULL) AB_ImporterDialog_DetermineFilename(dlg); if (xdlg->fileName==NULL) GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 0, 0); else GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 1, 0); GWEN_Dialog_SetIntProperty(dlg, "wiz_stack", GWEN_DialogProperty_Value, 0, page, 0); return GWEN_DialogEvent_ResultHandled; case PAGE_IMPORTER: if (forwards) { AB_ImporterDialog_DetermineFilename(dlg); _updateImporterList(dlg); } if (xdlg->importerName==NULL) _determineSelectedImporter(dlg); if (xdlg->importerName==NULL) GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 0, 0); else GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 1, 0); GWEN_Dialog_SetIntProperty(dlg, "wiz_stack", GWEN_DialogProperty_Value, 0, page, 0); return GWEN_DialogEvent_ResultHandled; case PAGE_PROFILE: if (forwards) { _determineSelectedImporter(dlg); _updateProfileList(dlg); } if (xdlg->profileName==NULL) _determineSelectedProfile(dlg); if (xdlg->profileName==NULL) GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 0, 0); else /* we have a selected importer, enable "next" button */ GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 1, 0); GWEN_Dialog_SetCharProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Title, 0, I18N("Next"), 0); GWEN_Dialog_SetIntProperty(dlg, "wiz_stack", GWEN_DialogProperty_Value, 0, page, 0); return GWEN_DialogEvent_ResultHandled; case PAGE_END: if (forwards) { rv=_determineSelectedProfile(dlg); if (rv<0) { /* no profile... */ DBG_INFO(AQBANKING_LOGDOMAIN, "No profile"); } else { rv=AB_Banking_ImportFromFileLoadProfile(xdlg->banking, xdlg->importerName, xdlg->context, xdlg->profileName, NULL, xdlg->fileName); if (rv<0) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Error importing file: %d", rv); GWEN_Gui_ShowError(I18N("Error"), I18N("Error importing file (%d: %s), please see log files for details"), GWEN_Error_SimpleToString(rv)); AB_ImExporterContext_Clear(xdlg->context); } else { DBG_NOTICE(0, "Import ok."); /* no way back */ GWEN_Dialog_SetIntProperty(dlg, "wiz_prev_button", GWEN_DialogProperty_Enabled, 0, 0, 0); GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 1, 0); GWEN_Dialog_SetCharProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Title, 0, I18N("Finished"), 0); GWEN_Dialog_SetIntProperty(dlg, "wiz_stack", GWEN_DialogProperty_Value, 0, page, 0); return GWEN_DialogEvent_ResultHandled; } } } return GWEN_DialogEvent_ResultHandled; default: return GWEN_DialogEvent_ResultHandled; } return GWEN_DialogEvent_ResultHandled; } int AB_ImporterDialog_Next(GWEN_DIALOG *dlg) { AB_IMPORTER_DIALOG *xdlg; int page; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AB_IMPORTER_DIALOG, dlg); assert(xdlg); page=GWEN_Dialog_GetIntProperty(dlg, "wiz_stack", GWEN_DialogProperty_Value, 0, -1); DBG_NOTICE(0, "Value of wiz_stack: %d", page); if (pagePAGE_BEGIN) { page--; return AB_ImporterDialog_EnterPage(dlg, page, 0); } return GWEN_DialogEvent_ResultHandled; } int _editProfile(GWEN_DIALOG *dlg) { AB_IMPORTER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AB_IMPORTER_DIALOG, dlg); assert(xdlg); if (_determineSelectedProfile(dlg)==0) { GWEN_DB_NODE *dbProfiles; GWEN_DB_NODE *dbT; GWEN_DIALOG *edlg=NULL; const char *s; char *fileNameCopy=NULL; int rv; dbProfiles=AB_Banking_GetImExporterProfiles(xdlg->banking, xdlg->importerName); if (dbProfiles==NULL) { DBG_ERROR(AQBANKING_LOGDOMAIN, "ImExporter [%s] has no profiles", xdlg->importerName); return GWEN_DialogEvent_ResultHandled; } dbT=GWEN_DB_GetFirstGroup(dbProfiles); while (dbT) { const char *s; s=GWEN_DB_GetCharValue(dbT, "name", 0, NULL); if (s && *s && strcasecmp(s, xdlg->profileName)==0) break; dbT=GWEN_DB_GetNextGroup(dbT); } if (dbT==NULL) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Profile [%s] for ImExporter [%s] not found", xdlg->profileName, xdlg->importerName); GWEN_DB_Group_free(dbProfiles); return GWEN_DialogEvent_ResultHandled; } s=GWEN_DB_GetCharValue(dbT, "fileName", 0, NULL); if (!(s && *s)) { DBG_ERROR(AQBANKING_LOGDOMAIN, "No filename, can't save profile"); GWEN_DB_Group_free(dbProfiles); return GWEN_DialogEvent_ResultHandled; } fileNameCopy=strdup(s); rv=AB_Banking_GetEditImExporterProfileDialog(xdlg->banking, xdlg->importerName, dbT, xdlg->fileName, &edlg); if (rv<0) { DBG_ERROR(AQBANKING_LOGDOMAIN, "ImExporter [%s] has no EditProfileDialog", xdlg->importerName); free(fileNameCopy); GWEN_DB_Group_free(dbProfiles); return GWEN_DialogEvent_ResultHandled; } rv=GWEN_Gui_ExecDialog(edlg, 0); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); free(fileNameCopy); GWEN_Dialog_free(edlg); GWEN_DB_Group_free(dbProfiles); return GWEN_DialogEvent_ResultHandled; } if (rv==1) { const char *proname; /* accepted */ proname=GWEN_DB_GetCharValue(dbT, "name", 0, NULL); DBG_NOTICE(0, "Accepted, writing profile"); rv=AB_Banking_SaveLocalImExporterProfile(xdlg->banking, xdlg->importerName, dbT, fileNameCopy); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); free(fileNameCopy); GWEN_Dialog_free(edlg); GWEN_DB_Group_free(dbProfiles); return GWEN_DialogEvent_ResultHandled; } /* reload "wiz_profile_list", select new profile */ _updateProfileList(dlg); if (proname && *proname) { int idx; idx=GWEN_Dialog_ListGetItemMatchingFirstColumn(dlg, "wiz_profile_list", proname); if (idx>=0) { GWEN_Dialog_SetIntProperty(dlg, "wiz_profile_list", GWEN_DialogProperty_Value, 0, idx, 1); _determineSelectedProfile(dlg); } } } GWEN_Dialog_free(edlg); free(fileNameCopy); GWEN_DB_Group_free(dbProfiles); } return GWEN_DialogEvent_ResultHandled; } int _newProfile(GWEN_DIALOG *dlg) { AB_IMPORTER_DIALOG *xdlg; GWEN_DB_NODE *dbProfile; GWEN_DIALOG *edlg=NULL; char *fileNameCopy=NULL; int rv; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AB_IMPORTER_DIALOG, dlg); assert(xdlg); dbProfile=GWEN_DB_Group_new("profile"); rv=AB_Banking_GetEditImExporterProfileDialog(xdlg->banking, xdlg->importerName, dbProfile, xdlg->fileName, &edlg); if (rv<0) { DBG_ERROR(AQBANKING_LOGDOMAIN, "ImExporter [%s] has no EditProfileDialog", xdlg->importerName); GWEN_DB_Group_free(dbProfile); return GWEN_DialogEvent_ResultHandled; } rv=GWEN_Gui_ExecDialog(edlg, 0); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); GWEN_Dialog_free(edlg); GWEN_DB_Group_free(dbProfile); return GWEN_DialogEvent_ResultHandled; } if (rv==1) { const char *proname; /* accepted */ proname=GWEN_DB_GetCharValue(dbProfile, "name", 0, NULL); DBG_NOTICE(0, "Accepted, writing profile"); rv=AB_Banking_SaveLocalImExporterProfile(xdlg->banking, xdlg->importerName, dbProfile, fileNameCopy); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); GWEN_Dialog_free(edlg); GWEN_DB_Group_free(dbProfile); return GWEN_DialogEvent_ResultHandled; } /* reload "wiz_profile_list", select new profile */ _updateProfileList(dlg); if (proname && *proname) { int idx; idx=GWEN_Dialog_ListGetItemMatchingFirstColumn(dlg, "wiz_profile_list", proname); if (idx>=0) { GWEN_Dialog_SetIntProperty(dlg, "wiz_profile_list", GWEN_DialogProperty_Value, 0, idx, 1); _determineSelectedProfile(dlg); } } } GWEN_Dialog_free(edlg); GWEN_DB_Group_free(dbProfile); return GWEN_DialogEvent_ResultHandled; } int AB_ImporterDialog_HandleActivated(GWEN_DIALOG *dlg, const char *sender) { DBG_INFO(AQBANKING_LOGDOMAIN, "Activated: %s", sender); if (strcasecmp(sender, "wiz_prev_button")==0) return AB_ImporterDialog_Previous(dlg); else if (strcasecmp(sender, "wiz_next_button")==0) return AB_ImporterDialog_Next(dlg); else if (strcasecmp(sender, "wiz_abort_button")==0) return GWEN_DialogEvent_ResultReject; else if (strcasecmp(sender, "wiz_help_button")==0) { /* TODO: open a help dialog */ } else if (strcasecmp(sender, "wiz_importer_list")==0) { if (_determineSelectedImporter(dlg)<0) GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 0, 0); else GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 1, 0); } else if (strcasecmp(sender, "wiz_file_button")==0) { int rv; const char *s; GWEN_BUFFER *pathBuffer; pathBuffer=GWEN_Buffer_new(0, 256, 0, 1); s=GWEN_Dialog_GetCharProperty(dlg, "wiz_file_edit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) GWEN_Buffer_AppendString(pathBuffer, s); rv=GWEN_Gui_GetFileName(I18N("Select File to Import"), GWEN_Gui_FileNameType_OpenFileName, 0, I18N("All Files (*)\tCSV Files (*csv;*.CSV)\t*.sta"), pathBuffer, GWEN_Dialog_GetGuiId(dlg)); if (rv==0) { GWEN_Dialog_SetCharProperty(dlg, "wiz_file_edit", GWEN_DialogProperty_Value, 0, GWEN_Buffer_GetStart(pathBuffer), 0); rv=AB_ImporterDialog_DetermineFilename(dlg); if (rv<0) GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 0, 0); else GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 1, 0); } else { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); } GWEN_Buffer_free(pathBuffer); return GWEN_DialogEvent_ResultNotHandled; } else if (strcasecmp(sender, "wiz_profile_edit_button")==0) { return _editProfile(dlg); } else if (strcasecmp(sender, "wiz_profile_new_button")==0) { return _newProfile(dlg); } else if (strcasecmp(sender, "wiz_profile_del_button")==0) { /* TODO: get appropriate profile editor */ } return GWEN_DialogEvent_ResultNotHandled; } int AB_ImporterDialog_HandleValueChanged(GWEN_DIALOG *dlg, const char *sender) { if (strcasecmp(sender, "wiz_file_edit")==0) { int rv; rv=AB_ImporterDialog_DetermineFilename(dlg); if (GWEN_Dialog_GetIntProperty(dlg, "wiz_stack", GWEN_DialogProperty_Value, 0, -1)==PAGE_FILE) { if (rv<0) GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 0, 0); else GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 1, 0); } return GWEN_DialogEvent_ResultHandled; } return GWEN_DialogEvent_ResultNotHandled; } int GWENHYWFAR_CB _dlgApi_SignalHandler(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender) { AB_IMPORTER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AB_IMPORTER_DIALOG, dlg); assert(xdlg); switch (t) { case GWEN_DialogEvent_TypeInit: AB_ImporterDialog_Init(dlg); return GWEN_DialogEvent_ResultHandled; case GWEN_DialogEvent_TypeFini: AB_ImporterDialog_Fini(dlg); return GWEN_DialogEvent_ResultHandled; case GWEN_DialogEvent_TypeValueChanged: return AB_ImporterDialog_HandleValueChanged(dlg, sender); case GWEN_DialogEvent_TypeActivated: return AB_ImporterDialog_HandleActivated(dlg, sender); case GWEN_DialogEvent_TypeEnabled: case GWEN_DialogEvent_TypeDisabled: case GWEN_DialogEvent_TypeClose: case GWEN_DialogEvent_TypeLast: default: return GWEN_DialogEvent_ResultNotHandled; } return GWEN_DialogEvent_ResultNotHandled; } aqbanking-6.6.1/src/libs/aqbanking/dialogs/dlg_edituser.h0000664000175000017500000000151014043610744020322 00000000000000/*************************************************************************** begin : Fri Apr 16 2010 copyright : (C) 2018 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQBANKING_EDITUSER_DIALOG_H #define AQBANKING_EDITUSER_DIALOG_H #include #include #include #ifdef __cplusplus extern "C" { #endif GWEN_DIALOG *AB_EditUserDialog_new(AB_PROVIDER *pro, AB_USER *u, int doLock); #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/aqbanking/dialogs/dlg_edituser_p.h0000664000175000017500000000210614043610744020643 00000000000000/*************************************************************************** begin : Fri Apr 16 2010 copyright : (C) 2018 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQBANKING_EDITUSER_DIALOG_P_H #define AQBANKING_EDITUSER_DIALOG_P_H #include "dlg_edituser.h" typedef struct AB_EDIT_USER_DIALOG AB_EDIT_USER_DIALOG; struct AB_EDIT_USER_DIALOG { AB_BANKING *banking; AB_PROVIDER *provider; AB_USER *user; int doLock; }; static void GWENHYWFAR_CB AB_EditUserDialog_FreeData(void *bp, void *p); static int GWENHYWFAR_CB AB_EditUserDialog_SignalHandler(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender); #endif aqbanking-6.6.1/src/libs/aqbanking/dialogs/dlg_setup.h0000664000175000017500000000156114043610744017644 00000000000000/*************************************************************************** begin : Wed Apr 14 2010 copyright : (C) 2018 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AB_DLG_SETUP_H #define AB_DLG_SETUP_H #include #include #include /** @defgroup G_AB_DIALOGS_SETUP Online Banking Setup Dialog * @ingroup G_AB_DIALOGS * */ /*@{*/ #ifdef __cplusplus extern "C" { #endif GWEN_DIALOG *AB_SetupDialog_new(AB_BANKING *ab); #ifdef __cplusplus } #endif /*@}*/ #endif aqbanking-6.6.1/src/libs/aqbanking/dialogs/dlg_setup_p.h0000664000175000017500000000224114043610744020157 00000000000000/*************************************************************************** begin : Wed Apr 14 2010 copyright : (C) 2018 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AB_DLG_SETUP_P_H #define AB_DLG_SETUP_P_H #include "dlg_setup.h" #include "aqbanking/backendsupport/user.h" #include "aqbanking/backendsupport/account.h" typedef struct AB_SETUP_DIALOG AB_SETUP_DIALOG; struct AB_SETUP_DIALOG { AB_BANKING *banking; AB_PROVIDER_LIST2 *providersInUse; AB_USER_LIST *currentUserList; AB_ACCOUNT_LIST *currentAccountList; }; static void GWENHYWFAR_CB AB_SetupDialog_FreeData(void *bp, void *p); static int GWENHYWFAR_CB AB_SetupDialog_SignalHandler(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender); #endif aqbanking-6.6.1/src/libs/aqbanking/dialogs/Makefile.am0000664000175000017500000000344514300721174017540 00000000000000AM_CPPFLAGS = -I$(srcdir)/../.. -I$(srcdir)/.. -I$(top_builddir)/src/libs $(gwenhywfar_includes) AM_CFLAGS=-DBUILDING_AQBANKING @visibility_cflags@ noinst_LTLIBRARIES=libabdialogs.la #iheaderdir=@aqbanking_headerdir_am@/aqbanking #iheader_HEADERS= noinst_HEADERS=\ dlg_importer.h \ dlg_selectbankinfo.h \ dlg_setup.h \ dlg_selectbackend.h \ dlg_editaccount.h \ dlg_edituser.h \ dlg_usertype_page_be.h \ dlg_setup_newuser.h \ dlg_importer_p.h \ dlg_selectbankinfo_p.h \ dlg_setup_p.h \ dlg_selectbackend_p.h \ dlg_editaccount_p.h \ dlg_edituser_p.h \ dlg_usertype_page_p.h \ dlg_setup_newuser_p.h \ dlg_usertype_pagedefault_l.h \ dlg_usertype_pagedefault_p.h \ dlg_newaccount_be.h \ dlg_newaccount_p.h \ dlg_newuser_be.h \ dlg_newuser_p.h \ w_profilelist.h \ w_importerlist.h libabdialogs_la_SOURCES=\ dlg_importer.c \ dlg_selectbankinfo.c \ dlg_setup.c \ dlg_selectbackend.c \ dlg_editaccount.c \ dlg_edituser.c \ dlg_usertype_page.c \ dlg_setup_newuser.c \ dlg_usertype_pagedefault.c \ dlg_newaccount.c \ dlg_newuser.c \ w_profilelist.c \ w_importerlist.c dlgdatadir=$(aqbanking_pkgdatadir)/dialogs dlgdata_DATA=\ dlg_importer.dlg \ dlg_selectbankinfo.dlg \ dlg_setup.dlg \ dlg_selectbackend.dlg \ dlg_editaccount.dlg \ dlg_edituser.dlg \ dlg_setup_newuser.dlg \ dlg_usertype_pagedefault.dlg EXTRA_DIST=$(typefiles) $(dlgdata_DATA) sources: for f in $(libabdialogs_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for f in $(dlgdata_DATA); do \ echo $(subdir)/$$f >>$(top_srcdir)/dlgsources; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d sources; \ done typefiles: typedefs: built_sources: cppcheck: for f in $(libabdialogs_la_SOURCES); do \ cppcheck --force $$f ; \ done aqbanking-6.6.1/src/libs/aqbanking/dialogs/w_importerlist.c0000664000175000017500000000723514300721174020734 00000000000000/*************************************************************************** begin : Tue Feb 10 2010 copyright : (C) 2022 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "w_importerlist.h" #include "aqbanking/i18n_l.h" #include #include #include void AB_ImporterListWidget_Init(GWEN_DIALOG *dlg, const char *widgetName) { GWEN_Dialog_SetCharProperty(dlg, widgetName, GWEN_DialogProperty_Title, 0, I18N("Name\tDescription"), 0); GWEN_Dialog_SetIntProperty(dlg, widgetName, GWEN_DialogProperty_SelectionMode, 0, GWEN_Dialog_SelectionMode_Single, 0); } void AB_ImporterListWidget_UpdateList(GWEN_DIALOG *dlg, const char *widgetName, AB_BANKING *banking) { GWEN_PLUGIN_DESCRIPTION_LIST2 *il; char *selectedImporter; selectedImporter=AB_ImporterListWidget_GetSelectedImporter(dlg, widgetName); GWEN_Dialog_SetIntProperty(dlg, widgetName, GWEN_DialogProperty_ClearValues, 0, 0, 0); il=AB_Banking_GetImExporterDescrs(banking); if (il) { GWEN_PLUGIN_DESCRIPTION_LIST2_ITERATOR *ilit; ilit=GWEN_PluginDescription_List2_First(il); if (ilit) { GWEN_PLUGIN_DESCRIPTION *pd; GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 256, 0, 1); pd=GWEN_PluginDescription_List2Iterator_Data(ilit); while (pd) { const char *s; s=GWEN_PluginDescription_GetName(pd); if (s && *s) { GWEN_Buffer_AppendString(tbuf, s); s=GWEN_PluginDescription_GetShortDescr(pd); if (s && *s) { GWEN_Buffer_AppendString(tbuf, "\t"); GWEN_Buffer_AppendString(tbuf, s); } GWEN_Dialog_SetCharProperty(dlg, widgetName, GWEN_DialogProperty_AddValue, 0, GWEN_Buffer_GetStart(tbuf), 0); GWEN_Buffer_Reset(tbuf); } pd=GWEN_PluginDescription_List2Iterator_Next(ilit); } GWEN_Buffer_free(tbuf); GWEN_PluginDescription_List2Iterator_free(ilit); } GWEN_PluginDescription_List2_free(il); GWEN_Dialog_SetIntProperty(dlg, widgetName, GWEN_DialogProperty_Sort, 0, 0, 0); if (selectedImporter) { DBG_INFO(AQBANKING_LOGDOMAIN, "Re-selecting importer \"%s\"", selectedImporter); AB_ImporterListWidget_SelectImporter(dlg, widgetName, selectedImporter); } } if (selectedImporter) free(selectedImporter); } void AB_ImporterListWidget_SelectImporter(GWEN_DIALOG *dlg, const char *widgetName, const char *importerName) { int idx; idx=GWEN_Dialog_ListGetItemMatchingFirstColumn(dlg, widgetName, importerName); if (idx>=0) { DBG_INFO(AQBANKING_LOGDOMAIN, "Selecting importer \"%s\" (%d)", importerName, idx); GWEN_Dialog_SetIntProperty(dlg, widgetName, GWEN_DialogProperty_Value, 0, idx, 0); } else { DBG_INFO(AQBANKING_LOGDOMAIN, "Importer \"%s\" not in list", importerName); } } char *AB_ImporterListWidget_GetSelectedImporter(GWEN_DIALOG *dlg, const char *widgetName) { int rv; /* get current value */ rv=GWEN_Dialog_GetIntProperty(dlg, widgetName, GWEN_DialogProperty_Value, 0, -1); DBG_INFO(AQBANKING_LOGDOMAIN, "Selected value: %d", rv); if (rv!=-1) { char *s; s=GWEN_Dialog_ListGetFirstColumnData(dlg, widgetName, rv); if (s && *s) { DBG_INFO(AQBANKING_LOGDOMAIN, "Selected importer [%s]", s); return s; } } return NULL; } aqbanking-6.6.1/src/libs/aqbanking/dialogs/dlg_usertype_pagedefault.c0000664000175000017500000000763214546575647022751 00000000000000/*************************************************************************** begin : Fri Jul 30 2010 copyright : (C) 2010 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "dlg_usertype_pagedefault_p.h" #include "aqbanking/i18n_l.h" #include "aqbanking/backendsupport/user.h" #include "aqbanking/dialogs/dlg_usertype_page_be.h" #include #include #include #include #include #include #include GWEN_DIALOG *AB_UserTypePageDefaultDialog_new(AB_BANKING *ab) { GWEN_DIALOG *dlg; GWEN_BUFFER *fbuf; int rv; dlg=AB_UserTypePageDialog_new(ab, "ab_usertype_pagedefault"); GWEN_Dialog_SetSignalHandler(dlg, AB_UserTypePageDefaultDialog_SignalHandler); /* get path of dialog description file */ fbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_PathManager_FindFile(AB_PM_LIBNAME, AB_PM_DATADIR, "aqbanking/dialogs/dlg_usertype_pagedefault.dlg", fbuf); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "Dialog description file not found (%d).", rv); GWEN_Buffer_free(fbuf); GWEN_Dialog_free(dlg); return NULL; } /* read dialog from dialog description file */ rv=GWEN_Dialog_ReadXmlFile(dlg, GWEN_Buffer_GetStart(fbuf)); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d).", rv); GWEN_Buffer_free(fbuf); GWEN_Dialog_free(dlg); return NULL; } GWEN_Buffer_free(fbuf); /* add media paths for icons */ GWEN_Dialog_AddMediaPathsFromPathManager(dlg, GWEN_PM_LIBNAME, GWEN_PM_SYSDATADIR, "aqbanking/dialogs/dialogs"); /* done */ return dlg; } void AB_UserTypePageDefaultDialog_Init(GWEN_DIALOG *dlg) { GWEN_Dialog_SetCharProperty(dlg, "defaultIntroLabel", GWEN_DialogProperty_Title, 0, I18N("" "

Click on the run button below to create the user.

" "" "Click on the RUN button below to create the user."), 0); } void AB_UserTypePageDefaultDialog_Fini(GWEN_DIALOG *dlg) { DBG_NOTICE(AQBANKING_LOGDOMAIN, "fini called"); AB_UserTypePageDialog_SetSelectedType(dlg, 0); } int AB_UserTypePageDefaultDialog_HandleActivated(GWEN_DIALOG *dlg, const char *sender) { /* nothing for now */ return GWEN_DialogEvent_ResultNotHandled; } int GWENHYWFAR_CB AB_UserTypePageDefaultDialog_SignalHandler(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender) { switch (t) { case GWEN_DialogEvent_TypeInit: AB_UserTypePageDefaultDialog_Init(dlg); return GWEN_DialogEvent_ResultHandled;; case GWEN_DialogEvent_TypeFini: AB_UserTypePageDefaultDialog_Fini(dlg); return GWEN_DialogEvent_ResultHandled;; case GWEN_DialogEvent_TypeValueChanged: return GWEN_DialogEvent_ResultHandled;; case GWEN_DialogEvent_TypeActivated: return AB_UserTypePageDefaultDialog_HandleActivated(dlg, sender); case GWEN_DialogEvent_TypeEnabled: case GWEN_DialogEvent_TypeDisabled: case GWEN_DialogEvent_TypeClose: case GWEN_DialogEvent_TypeLast: return GWEN_DialogEvent_ResultNotHandled; default: break; } return GWEN_DialogEvent_ResultNotHandled; } aqbanking-6.6.1/src/libs/aqbanking/dialogs/dlg_importer.dlg0000664000175000017500000000611014043610744020657 00000000000000 aqbanking-6.6.1/src/libs/aqbanking/dialogs/dlg_setup_newuser.c0000664000175000017500000004070214214726437021416 00000000000000/*************************************************************************** begin : Fri Jul 30 2010 copyright : (C) 2010 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "dlg_setup_newuser_p.h" #include "aqbanking/dialogs/dlg_usertype_pagedefault_l.h" #include "aqbanking/dialogs/dlg_usertype_page_be.h" #include "aqbanking/i18n_l.h" #include "aqbanking/backendsupport/provider_be.h" #include #include #include #include #include #include #include #define PAGE_BEGIN 0 #define PAGE_BACKEND 1 #define DIALOG_MINWIDTH 400 #define DIALOG_MINHEIGHT 400 GWEN_INHERIT(GWEN_DIALOG, AB_SETUP_NEWUSER_DIALOG) GWEN_DIALOG *AB_SetupNewUserDialog_new(AB_BANKING *ab) { GWEN_DIALOG *dlg; AB_SETUP_NEWUSER_DIALOG *xdlg; GWEN_BUFFER *fbuf; int rv; GWEN_XMLNODE *n; GWEN_XMLNODE *nDialog; GWEN_PLUGIN_DESCRIPTION_LIST2 *providers; GWEN_DIALOG_LIST *subDialogs=NULL; dlg=GWEN_Dialog_new("ab_setup_newuser"); GWEN_NEW_OBJECT(AB_SETUP_NEWUSER_DIALOG, xdlg); GWEN_INHERIT_SETDATA(GWEN_DIALOG, AB_SETUP_NEWUSER_DIALOG, dlg, xdlg, AB_SetupNewUserDialog_FreeData); GWEN_Dialog_SetSignalHandler(dlg, AB_SetupNewUserDialog_SignalHandler); xdlg->backendDialogs=GWEN_Dialog_List2_new(); xdlg->backendRadioNames=GWEN_StringList_new(); xdlg->backendNames=GWEN_StringList_new(); /* get path of dialog description file */ fbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_PathManager_FindFile(AB_PM_LIBNAME, AB_PM_DATADIR, "aqbanking/dialogs/dlg_setup_newuser.dlg", fbuf); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "Dialog description file not found (%d).", rv); GWEN_Buffer_free(fbuf); GWEN_Dialog_free(dlg); return NULL; } /* read XML file, extend it */ n=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "root"); rv=GWEN_XML_ReadFile(n, GWEN_Buffer_GetStart(fbuf), GWEN_XML_FLAGS_DEFAULT | GWEN_XML_FLAGS_HANDLE_HEADERS); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); GWEN_XMLNode_free(n); GWEN_Buffer_free(fbuf); GWEN_Dialog_free(dlg); return NULL; } nDialog=GWEN_XMLNode_FindFirstTag(n, "dialog", NULL, NULL); if (nDialog==NULL) { DBG_INFO(AQBANKING_LOGDOMAIN, "Dialog element not found in XML file [%s]", GWEN_Buffer_GetStart(fbuf)); GWEN_XMLNode_free(n); GWEN_Buffer_free(fbuf); GWEN_Dialog_free(dlg); return NULL; } providers=AB_Banking_GetProviderDescrs(ab); if (providers) { GWEN_XMLNODE *nBackendRadioWidget; nBackendRadioWidget=GWEN_XMLNode_FindFirstTag(nDialog, "widget", "name", "dialogVLayout"); if (nBackendRadioWidget) nBackendRadioWidget=GWEN_XMLNode_FindFirstTag(nBackendRadioWidget, "widget", "name", "wiz_stack"); if (nBackendRadioWidget) nBackendRadioWidget=GWEN_XMLNode_FindFirstTag(nBackendRadioWidget, "widget", "name", "backendRadioWidget"); subDialogs=GWEN_Dialog_List_new(); if (nBackendRadioWidget) { GWEN_PLUGIN_DESCRIPTION_LIST2_ITERATOR *pit; pit=GWEN_PluginDescription_List2_First(providers); if (pit) { GWEN_PLUGIN_DESCRIPTION *pd; pd=GWEN_PluginDescription_List2Iterator_Data(pit); while (pd) { const char *name; name=GWEN_PluginDescription_GetName(pd); if (name && *name) { AB_PROVIDER *pro; pro=AB_Banking_BeginUseProvider(ab, name); if (pro) { GWEN_DIALOG *cdlg; GWEN_BUFFER *tbuf; GWEN_XMLNODE *wn; const char *s; if (AB_Provider_GetFlags(pro) & AB_PROVIDER_FLAGS_HAS_USERTYPE_DIALOG) { cdlg=AB_Provider_GetUserTypeDialog(pro); if (cdlg==NULL) { DBG_WARN(AQBANKING_LOGDOMAIN, "Backend [%s] does not return a userType dialog, using default", name); cdlg=AB_UserTypePageDefaultDialog_new(ab); } } else cdlg=AB_UserTypePageDefaultDialog_new(ab); tbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(tbuf, "backend_"); GWEN_Buffer_AppendString(tbuf, name); GWEN_Buffer_AppendString(tbuf, "_radio"); wn=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "widget"); GWEN_XMLNode_SetProperty(wn, "type", "radioButton"); GWEN_XMLNode_SetProperty(wn, "name", GWEN_Buffer_GetStart(tbuf)); GWEN_StringList_AppendString(xdlg->backendRadioNames, GWEN_Buffer_GetStart(tbuf), 0, 0); GWEN_StringList_AppendString(xdlg->backendNames, name, 0, 0); s=GWEN_PluginDescription_GetShortDescr(pd); if (!(s && *s)) s=name; GWEN_XMLNode_SetProperty(wn, "text", I18N(s)); GWEN_XMLNode_SetProperty(wn, "groupId", "999999"); GWEN_XMLNode_SetProperty(wn, "flags", "fillX justifyLeft"); GWEN_XMLNode_AddChild(nBackendRadioWidget, wn); GWEN_Dialog_List_Add(cdlg, subDialogs); AB_Banking_EndUseProvider(ab, pro); } else { DBG_ERROR(AQBANKING_LOGDOMAIN, "Could not activate backend [%s]", name); } } pd=GWEN_PluginDescription_List2Iterator_Next(pit); } GWEN_PluginDescription_List2Iterator_free(pit); } } else { DBG_ERROR(AQBANKING_LOGDOMAIN, "Dialog description does not contain path [dialogVLayout/wiz_stack/backendRadioWidget]"); GWEN_XMLNode_Dump(nDialog, 2); GWEN_XMLNode_free(n); GWEN_Buffer_free(fbuf); GWEN_Dialog_free(dlg); return NULL; } } /* read dialog from dialog description file */ rv=GWEN_Dialog_ReadXml(dlg, nDialog); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d).", rv); GWEN_Dialog_List_free(subDialogs); GWEN_XMLNode_free(n); GWEN_Buffer_free(fbuf); GWEN_Dialog_free(dlg); return NULL; } GWEN_XMLNode_free(n); GWEN_Buffer_free(fbuf); /* insert pages for each backend */ if (GWEN_Dialog_List_GetCount(subDialogs)) { GWEN_DIALOG *cdlg; while ((cdlg=GWEN_Dialog_List_First(subDialogs))) { GWEN_Dialog_List_Del(cdlg); DBG_NOTICE(AQBANKING_LOGDOMAIN, "Adding dialog %s", GWEN_Dialog_GetId(cdlg)); rv=GWEN_Dialog_AddSubDialog(dlg, "wiz_stack", cdlg); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); GWEN_Dialog_List_free(subDialogs); GWEN_Dialog_free(cdlg); GWEN_Dialog_free(dlg); return NULL; } GWEN_Dialog_List2_PushBack(xdlg->backendDialogs, cdlg); } } GWEN_Dialog_List_free(subDialogs); xdlg->banking=ab; /* done */ return dlg; } void GWENHYWFAR_CB AB_SetupNewUserDialog_FreeData(void *bp, void *p) { AB_SETUP_NEWUSER_DIALOG *xdlg; xdlg=(AB_SETUP_NEWUSER_DIALOG *) p; GWEN_Dialog_List2_free(xdlg->backendDialogs); /* don't use _freeAll here! */ GWEN_StringList_free(xdlg->backendRadioNames); GWEN_StringList_free(xdlg->backendNames); GWEN_FREE_OBJECT(xdlg); } void AB_SetupNewUserDialog_Init(GWEN_DIALOG *dlg) { AB_SETUP_NEWUSER_DIALOG *xdlg; GWEN_DB_NODE *dbPrefs; int i; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AB_SETUP_NEWUSER_DIALOG, dlg); assert(xdlg); dbPrefs=GWEN_Dialog_GetPreferences(dlg); GWEN_Dialog_SetCharProperty(dlg, "", GWEN_DialogProperty_Title, 0, I18N("New User Wizard"), 0); /* select first page */ GWEN_Dialog_SetIntProperty(dlg, "wiz_stack", GWEN_DialogProperty_Value, 0, 0, 0); /* setup intro page */ GWEN_Dialog_SetCharProperty(dlg, "wiz_begin_label", GWEN_DialogProperty_Title, 0, I18N("" "

This dialog assists you in creating an online banking user." "The following steps are:

" "
    " "
  • select the banking protocol
  • " "
  • select the type of user to create
  • " "
" "" "This dialog assists you in creating an online banking user.\n" "The following steps are:\n" " - select the banking protocol\n" " - select the type of user to create\n"), 0); /* read width */ i=GWEN_DB_GetIntValue(dbPrefs, "dialog_width", 0, -1); if (i>=DIALOG_MINWIDTH) GWEN_Dialog_SetIntProperty(dlg, "", GWEN_DialogProperty_Width, 0, i, 0); /* read height */ i=GWEN_DB_GetIntValue(dbPrefs, "dialog_height", 0, -1); if (i>=DIALOG_MINHEIGHT) GWEN_Dialog_SetIntProperty(dlg, "", GWEN_DialogProperty_Height, 0, i, 0); /* disable next and previous buttons */ GWEN_Dialog_SetIntProperty(dlg, "wiz_prev_button", GWEN_DialogProperty_Enabled, 0, 0, 0); GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 1, 0); } void AB_SetupNewUserDialog_Fini(GWEN_DIALOG *dlg) { AB_SETUP_NEWUSER_DIALOG *xdlg; int i; GWEN_DB_NODE *dbPrefs; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AB_SETUP_NEWUSER_DIALOG, dlg); assert(xdlg); xdlg->selectedType=0; free(xdlg->selectedBackend); xdlg->selectedBackend=NULL; i=AB_SetupNewUserDialog_DetermineBackendIndex(dlg); if (i>=0) { const char *s; GWEN_DIALOG_LIST2_ITERATOR *it; s=GWEN_StringList_StringAt(xdlg->backendNames, i); if (s && *s) xdlg->selectedBackend=strdup(s); it=GWEN_Dialog_List2_First(xdlg->backendDialogs); if (it) { int j=i; GWEN_DIALOG *cdlg; cdlg=GWEN_Dialog_List2Iterator_Data(it); while (cdlg && j>0) { j--; cdlg=GWEN_Dialog_List2Iterator_Next(it); } GWEN_Dialog_List2Iterator_free(it); if (cdlg) xdlg->selectedType=AB_UserTypePageDialog_GetSelectedType(cdlg); } } /* save dialog settings */ dbPrefs=GWEN_Dialog_GetPreferences(dlg); /* store dialog width */ i=GWEN_Dialog_GetIntProperty(dlg, "", GWEN_DialogProperty_Width, 0, -1); GWEN_DB_SetIntValue(dbPrefs, GWEN_DB_FLAGS_OVERWRITE_VARS, "dialog_width", i); /* store dialog height */ i=GWEN_Dialog_GetIntProperty(dlg, "", GWEN_DialogProperty_Height, 0, -1); GWEN_DB_SetIntValue(dbPrefs, GWEN_DB_FLAGS_OVERWRITE_VARS, "dialog_height", i); } int AB_SetupNewUserDialog_EnterPage(GWEN_DIALOG *dlg, int page, int forwards) { AB_SETUP_NEWUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AB_SETUP_NEWUSER_DIALOG, dlg); assert(xdlg); switch (page) { case PAGE_BEGIN: GWEN_Dialog_SetIntProperty(dlg, "wiz_prev_button", GWEN_DialogProperty_Enabled, 0, 0, 0); GWEN_Dialog_SetIntProperty(dlg, "wiz_stack", GWEN_DialogProperty_Value, 0, page, 0); return GWEN_DialogEvent_ResultHandled; case PAGE_BACKEND: GWEN_Dialog_SetCharProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Title, 0, I18N("Next"), 0); GWEN_Dialog_SetIntProperty(dlg, "wiz_prev_button", GWEN_DialogProperty_Enabled, 0, 1, 0); GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 1, 0); GWEN_Dialog_SetIntProperty(dlg, "wiz_stack", GWEN_DialogProperty_Value, 0, page, 0); return GWEN_DialogEvent_ResultHandled; default: if (forwards) { DBG_NOTICE(0, "About to enter page %d", page); GWEN_Dialog_SetCharProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Title, 0, I18N("Run"), 0); GWEN_Dialog_SetIntProperty(dlg, "wiz_stack", GWEN_DialogProperty_Value, 0, page, 0); return GWEN_DialogEvent_ResultHandled; } return GWEN_DialogEvent_ResultHandled; } return GWEN_DialogEvent_ResultHandled; } int AB_SetupNewUserDialog_DetermineBackendIndex(GWEN_DIALOG *dlg) { AB_SETUP_NEWUSER_DIALOG *xdlg; GWEN_STRINGLISTENTRY *se; int i=0; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AB_SETUP_NEWUSER_DIALOG, dlg); assert(xdlg); se=GWEN_StringList_FirstEntry(xdlg->backendRadioNames); while (se) { const char *s; s=GWEN_StringListEntry_Data(se); if (GWEN_Dialog_GetIntProperty(dlg, s, GWEN_DialogProperty_Value, 0, 0)) break; i++; se=GWEN_StringListEntry_Next(se); } if (se) return i; return -1; } int AB_SetupNewUserDialog_Next(GWEN_DIALOG *dlg) { AB_SETUP_NEWUSER_DIALOG *xdlg; int page; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AB_SETUP_NEWUSER_DIALOG, dlg); assert(xdlg); page=GWEN_Dialog_GetIntProperty(dlg, "wiz_stack", GWEN_DialogProperty_Value, 0, -1); DBG_NOTICE(0, "Value of wiz_stack: %d", page); if (page==PAGE_BEGIN) { DBG_NOTICE(0, "First page"); page++; return AB_SetupNewUserDialog_EnterPage(dlg, page, 1); } if (page==PAGE_BACKEND) { int idx; DBG_NOTICE(0, "Backend page"); idx=AB_SetupNewUserDialog_DetermineBackendIndex(dlg); if (idx!=-1) { page=idx+PAGE_BACKEND+1; return AB_SetupNewUserDialog_EnterPage(dlg, page, 1); } } else if (page>PAGE_BACKEND) return GWEN_DialogEvent_ResultAccept; return GWEN_DialogEvent_ResultHandled; } int AB_SetupNewUserDialog_Previous(GWEN_DIALOG *dlg) { AB_SETUP_NEWUSER_DIALOG *xdlg; int page; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AB_SETUP_NEWUSER_DIALOG, dlg); assert(xdlg); page=GWEN_Dialog_GetIntProperty(dlg, "wiz_stack", GWEN_DialogProperty_Value, 0, -1); if (page>PAGE_BACKEND) { page=PAGE_BACKEND; return AB_SetupNewUserDialog_EnterPage(dlg, page, 0); } if (page==PAGE_BACKEND) { page=PAGE_BEGIN; return AB_SetupNewUserDialog_EnterPage(dlg, page, 0); } return GWEN_DialogEvent_ResultHandled; } int AB_SetupNewUserDialog_HandleActivated(GWEN_DIALOG *dlg, const char *sender) { DBG_NOTICE(0, "Activated: %s", sender); if (strcasecmp(sender, "wiz_prev_button")==0) return AB_SetupNewUserDialog_Previous(dlg); else if (strcasecmp(sender, "wiz_next_button")==0) return AB_SetupNewUserDialog_Next(dlg); else if (strcasecmp(sender, "wiz_abort_button")==0) return GWEN_DialogEvent_ResultReject; else if (strcasecmp(sender, "wiz_help_button")==0) { /* TODO: open a help dialog */ } return GWEN_DialogEvent_ResultNotHandled; } int GWENHYWFAR_CB AB_SetupNewUserDialog_SignalHandler(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender) { AB_SETUP_NEWUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AB_SETUP_NEWUSER_DIALOG, dlg); assert(xdlg); switch (t) { case GWEN_DialogEvent_TypeInit: AB_SetupNewUserDialog_Init(dlg); return GWEN_DialogEvent_ResultHandled;; case GWEN_DialogEvent_TypeFini: AB_SetupNewUserDialog_Fini(dlg); return GWEN_DialogEvent_ResultHandled;; case GWEN_DialogEvent_TypeActivated: return AB_SetupNewUserDialog_HandleActivated(dlg, sender); case GWEN_DialogEvent_TypeValueChanged: case GWEN_DialogEvent_TypeEnabled: case GWEN_DialogEvent_TypeDisabled: case GWEN_DialogEvent_TypeClose: case GWEN_DialogEvent_TypeLast: default: return GWEN_DialogEvent_ResultNotHandled; } return GWEN_DialogEvent_ResultNotHandled; } const char *AB_SetupNewUserDialog_GetSelectedBackend(const GWEN_DIALOG *dlg) { AB_SETUP_NEWUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AB_SETUP_NEWUSER_DIALOG, dlg); assert(xdlg); return xdlg->selectedBackend; } int AB_SetupNewUserDialog_GetSelectedType(const GWEN_DIALOG *dlg) { AB_SETUP_NEWUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AB_SETUP_NEWUSER_DIALOG, dlg); assert(xdlg); return xdlg->selectedType; } aqbanking-6.6.1/src/libs/aqbanking/dialogs/dlg_usertype_pagedefault.dlg0000664000175000017500000000147414043610744023247 00000000000000 aqbanking-6.6.1/src/libs/aqbanking/dialogs/dlg_newuser.c0000664000175000017500000000377014043610744020173 00000000000000/*************************************************************************** begin : Wed Apr 14 2010 copyright : (C) 2018 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "dlg_newuser_p.h" GWEN_INHERIT(GWEN_DIALOG, AB_NEWUSER_DIALOG) GWEN_DIALOG *AB_NewUserDialog_new(AB_BANKING *ab, AB_PROVIDER *pro, const char *dname) { GWEN_DIALOG *dlg; AB_NEWUSER_DIALOG *xdlg; dlg=GWEN_Dialog_new(dname); GWEN_NEW_OBJECT(AB_NEWUSER_DIALOG, xdlg); GWEN_INHERIT_SETDATA(GWEN_DIALOG, AB_NEWUSER_DIALOG, dlg, xdlg, AB_NewUserDialog_FreeData); xdlg->banking=ab; xdlg->provider=pro; return dlg; } void GWENHYWFAR_CB AB_NewUserDialog_FreeData(void *bp, void *p) { AB_NEWUSER_DIALOG *xdlg; xdlg=(AB_NEWUSER_DIALOG *) p; GWEN_FREE_OBJECT(xdlg); } AB_USER *AB_NewUserDialog_GetUser(const GWEN_DIALOG *dlg) { AB_NEWUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AB_NEWUSER_DIALOG, dlg); assert(xdlg); return xdlg->user; } void AB_NewUserDialog_SetUser(GWEN_DIALOG *dlg, AB_USER *u) { AB_NEWUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AB_NEWUSER_DIALOG, dlg); assert(xdlg); xdlg->user=u; } AB_BANKING *AB_NewUserDialog_GetBanking(const GWEN_DIALOG *dlg) { AB_NEWUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AB_NEWUSER_DIALOG, dlg); assert(xdlg); return xdlg->banking; } AB_PROVIDER *AB_NewUserDialog_GetProvider(const GWEN_DIALOG *dlg) { AB_NEWUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AB_NEWUSER_DIALOG, dlg); assert(xdlg); return xdlg->provider; } aqbanking-6.6.1/src/libs/aqbanking/dialogs/w_profilelist.h0000664000175000017500000000447014300721174020536 00000000000000/*************************************************************************** begin : Tue Feb 10 2010 copyright : (C) 2022 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQBANKING_W_PROFILELIST_H #define AQBANKING_W_PROFILELIST_H #include #include /** @name Helper Functions for Lists of Im-/Exporter Profiles * */ /*@{*/ /** * Init widget by setting header text for the supported columns and set selection mode to GWEN_Dialog_SelectionMode_Single. * * @param dlg dialog of which the widget is part * @param widgetName name of the widget in the dialog to work on */ void AB_ProfileListWidget_Init(GWEN_DIALOG *dlg, const char *widgetName); /** * Update the list of profiles shown in this widget. * * This function reads all profiles for the given importer and adds entries for every one of them which has a valid name. * Keeps the currently selected profile. * * @param dlg dialog of which the widget is part * @param widgetName name of the widget in the dialog to work on * @param banking pointer to used AqBanking object * @param importerName name of the AqBanking import module for which profiles are to be loaded */ void AB_ProfileListWidget_UpdateList(GWEN_DIALOG *dlg, const char *widgetName, AB_BANKING *banking, const char *importerName); /** * Select the given profile. * * @param dlg dialog of which the widget is part * @param widgetName name of the widget in the dialog to work on * @param profileName name of the profile to select */ void AB_ProfileListWidget_SelectProfile(GWEN_DIALOG *dlg, const char *widgetName, const char *profileName); /** * Get the name of the currently selected profile. * * @return new string containing the name of the selected profile (needs to be free'd) or NULL if none selected * @param dlg dialog of which the widget is part * @param widgetName name of the widget in the dialog to work on */ char *AB_ProfileListWidget_GetSelectedProfile(GWEN_DIALOG *dlg, const char *widgetName); /*@}*/ #endif aqbanking-6.6.1/src/libs/aqbanking/dialogs/dlg_editaccount.h0000664000175000017500000000152714043610744021010 00000000000000/*************************************************************************** begin : Thu Apr 15 2010 copyright : (C) 2018 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQBANKING_EDITACCOUNT_DIALOG_H #define AQBANKING_EDITACCOUNT_DIALOG_H #include #include #include #ifdef __cplusplus extern "C" { #endif GWEN_DIALOG *AB_EditAccountDialog_new(AB_PROVIDER *pro, AB_ACCOUNT *a, int doLock); #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/aqbanking/dialogs/dlg_usertype_page_be.h0000664000175000017500000000250114043610744022021 00000000000000/*************************************************************************** begin : Fri Jul 30 2010 copyright : (C) 2018 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AB_DLG_USERTYPE_PAGE_BE_H #define AB_DLG_USERTYPE_PAGE_BE_H #include #include #ifdef __cplusplus extern "C" { #endif /** * This is the base class for a user setup type page. * It is the page shown after the user selected a backend for which a new user is to * be created. This page will then allow the user to choose the type of user setup. * For HBCI there are many options (like PinTan, chipcard, keyfile etc). For others * there might be only one option. */ GWEN_DIALOG *AB_UserTypePageDialog_new(AB_BANKING *ab, const char *dname); AB_BANKING *AB_UserTypePageDialog_GetBanking(const GWEN_DIALOG *dlg); int AB_UserTypePageDialog_GetSelectedType(const GWEN_DIALOG *dlg); void AB_UserTypePageDialog_SetSelectedType(GWEN_DIALOG *dlg, int t); #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/aqbanking/dialogs/dlg_editaccount_p.h0000664000175000017500000000215214043610744021322 00000000000000/*************************************************************************** begin : Thu Apr 15 2010 copyright : (C) 2018 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQBANKING_EDITACCOUNT_DIALOG_P_H #define AQBANKING_EDITACCOUNT_DIALOG_P_H #include "dlg_editaccount.h" typedef struct AB_EDIT_ACCOUNT_DIALOG AB_EDIT_ACCOUNT_DIALOG; struct AB_EDIT_ACCOUNT_DIALOG { AB_BANKING *banking; AB_PROVIDER *provider; AB_ACCOUNT *account; int doLock; }; static void GWENHYWFAR_CB AB_EditAccountDialog_FreeData(void *bp, void *p); static int GWENHYWFAR_CB AB_EditAccountDialog_SignalHandler(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender); #endif aqbanking-6.6.1/src/libs/aqbanking/dialogs/dlg_newuser_p.h0000664000175000017500000000146014043610744020511 00000000000000/*************************************************************************** begin : Wed Apr 14 2010 copyright : (C) 2018 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AB_DLG_NEWUSER_P_H #define AB_DLG_NEWUSER_P_H #include "dlg_newuser_be.h" typedef struct AB_NEWUSER_DIALOG AB_NEWUSER_DIALOG; struct AB_NEWUSER_DIALOG { AB_BANKING *banking; AB_PROVIDER *provider; AB_USER *user; }; static void GWENHYWFAR_CB AB_NewUserDialog_FreeData(void *bp, void *p); #endif aqbanking-6.6.1/src/libs/aqbanking/dialogs/dlg_selectbankinfo.c0000664000175000017500000003777214546575647021527 00000000000000/*************************************************************************** begin : Tue Apr 13 2010 copyright : (C) 2018 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "dlg_selectbankinfo_p.h" #include "aqbanking/i18n_l.h" #include #include #include #include #include #include #include #define DIALOG_MINWIDTH 400 #define DIALOG_MINHEIGHT 200 #define LIST_MINCOLWIDTH 50 GWEN_INHERIT(GWEN_DIALOG, AB_SELECTBANKINFO_DIALOG) GWEN_DIALOG *AB_SelectBankInfoDialog_new(AB_BANKING *ab, const char *country, const char *bankCode) { GWEN_DIALOG *dlg; AB_SELECTBANKINFO_DIALOG *xdlg; dlg=GWEN_Dialog_CreateAndLoadWithPath("ab_selectbankinfo", AB_PM_LIBNAME, AB_PM_DATADIR, "aqbanking/dialogs/dlg_selectbankinfo.dlg"); if (dlg==NULL) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Could not create dialog \"ab_selectbankinfo\"."); return NULL; } GWEN_NEW_OBJECT(AB_SELECTBANKINFO_DIALOG, xdlg); GWEN_INHERIT_SETDATA(GWEN_DIALOG, AB_SELECTBANKINFO_DIALOG, dlg, xdlg, AB_SelectBankInfoDialog_FreeData); GWEN_Dialog_SetSignalHandler(dlg, AB_SelectBankInfoDialog_SignalHandler); xdlg->banking=ab; if (country) xdlg->country=strdup(country); else xdlg->country=strdup("de"); if (bankCode) xdlg->bankCode=strdup(bankCode); else xdlg->bankCode=NULL; /* done */ return dlg; } void GWENHYWFAR_CB AB_SelectBankInfoDialog_FreeData(void *bp, void *p) { AB_SELECTBANKINFO_DIALOG *xdlg; xdlg=(AB_SELECTBANKINFO_DIALOG *) p; AB_BankInfo_free(xdlg->selectedBankInfo); AB_BankInfo_List2_freeAll(xdlg->matchingBankInfos); free(xdlg->country); free(xdlg->bankCode); GWEN_FREE_OBJECT(xdlg); } static void createListBoxString(const AB_BANKINFO *bi, GWEN_BUFFER *tbuf) { const char *s; AB_BANKINFO_SERVICE *sv; uint32_t pos; int svsAdded=0; s=AB_BankInfo_GetBankId(bi); if (s && *s) GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "\t"); s=AB_BankInfo_GetBic(bi); if (s && *s) GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "\t"); s=AB_BankInfo_GetBankName(bi); if (s && *s) GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "\t"); s=AB_BankInfo_GetLocation(bi); if (s && *s) GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "\t"); pos=GWEN_Buffer_GetPos(tbuf); sv=AB_BankInfoService_List_First(AB_BankInfo_GetServices(bi)); while (sv) { const char *s; s=AB_BankInfoService_GetType(sv); if (s && *s) { const char *p; p=GWEN_Buffer_GetStart(tbuf)+pos; if (strstr(p, s)==NULL) { if (svsAdded) GWEN_Buffer_AppendString(tbuf, ", "); GWEN_Buffer_AppendString(tbuf, s); svsAdded++; } } sv=AB_BankInfoService_List_Next(sv); } } const AB_BANKINFO *AB_SelectBankInfoDialog_GetSelectedBankInfo(GWEN_DIALOG *dlg) { AB_SELECTBANKINFO_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AB_SELECTBANKINFO_DIALOG, dlg); assert(xdlg); return xdlg->selectedBankInfo; } AB_BANKINFO *AB_SelectBankInfoDialog_DetermineSelectedBankInfo(GWEN_DIALOG *dlg) { AB_SELECTBANKINFO_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AB_SELECTBANKINFO_DIALOG, dlg); assert(xdlg); if (xdlg->matchingBankInfos) { AB_BANKINFO_LIST2_ITERATOR *it; int idx; idx=GWEN_Dialog_GetIntProperty(dlg, "listBox", GWEN_DialogProperty_Value, 0, -1); if (idx>=0) { const char *currentText; currentText=GWEN_Dialog_GetCharProperty(dlg, "listBox", GWEN_DialogProperty_Value, idx, NULL); if (currentText && *currentText) { it=AB_BankInfo_List2_First(xdlg->matchingBankInfos); if (it) { AB_BANKINFO *bi; GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 256, 0, 1); bi=AB_BankInfo_List2Iterator_Data(it); while (bi) { createListBoxString(bi, tbuf); if (strcasecmp(currentText, GWEN_Buffer_GetStart(tbuf))==0) { GWEN_Buffer_free(tbuf); AB_BankInfo_List2Iterator_free(it); return bi; } GWEN_Buffer_Reset(tbuf); bi=AB_BankInfo_List2Iterator_Next(it); } GWEN_Buffer_free(tbuf); AB_BankInfo_List2Iterator_free(it); } } } } return NULL; } static void removeAllSpaces(uint8_t *s) { uint8_t *d; d=s; while (*s) { if (*s>33) *(d++)=*s; s++; } *d=0; } void AB_SelectBankInfoDialog_UpdateList(GWEN_DIALOG *dlg) { AB_SELECTBANKINFO_DIALOG *xdlg; AB_BANKINFO *tbi; const char *s; AB_BANKINFO_LIST2 *bl; int rv; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AB_SELECTBANKINFO_DIALOG, dlg); assert(xdlg); /* clear bank info list */ GWEN_Dialog_SetIntProperty(dlg, "listBox", GWEN_DialogProperty_ClearValues, 0, 0, 0); if (xdlg->matchingBankInfos) AB_BankInfo_List2_freeAll(xdlg->matchingBankInfos); xdlg->matchingBankInfos=NULL; /* setup template */ tbi=AB_BankInfo_new(); /* set country */ AB_BankInfo_SetCountry(tbi, xdlg->country); /* set bank code */ s=GWEN_Dialog_GetCharProperty(dlg, "blzEdit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) { int len; char *cpy; len=strlen(s); cpy=(char *) malloc(len+2); assert(cpy); memmove(cpy, s, len+1); /* copy including terminating zero char */ removeAllSpaces((uint8_t *)cpy); len=strlen(cpy); if (len) { /* append joker */ cpy[len]='*'; cpy[len+1]=0; } AB_BankInfo_SetBankId(tbi, cpy); free(cpy); } /* set bank code */ s=GWEN_Dialog_GetCharProperty(dlg, "bicEdit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) { int len; char *cpy; len=strlen(s); cpy=(char *) malloc(len+2); assert(cpy); memmove(cpy, s, len+1); /* copy including terminating zero char */ removeAllSpaces((uint8_t *)cpy); len=strlen(cpy); if (len) { /* append joker */ cpy[len]='*'; cpy[len+1]=0; } AB_BankInfo_SetBic(tbi, cpy); free(cpy); } /* set bank name */ s=GWEN_Dialog_GetCharProperty(dlg, "nameEdit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) { GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(tbuf, s); GWEN_Text_CondenseBuffer(tbuf); GWEN_Buffer_AppendString(tbuf, "*"); AB_BankInfo_SetBankName(tbi, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } /* set bank name */ s=GWEN_Dialog_GetCharProperty(dlg, "locationEdit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) { GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(tbuf, s); GWEN_Text_CondenseBuffer(tbuf); GWEN_Buffer_AppendString(tbuf, "*"); AB_BankInfo_SetLocation(tbi, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } bl=AB_BankInfo_List2_new(); rv=AB_Banking_GetBankInfoByTemplate(xdlg->banking, xdlg->country, tbi, bl); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); AB_BankInfo_List2_freeAll(bl); } else { AB_BANKINFO_LIST2_ITERATOR *it; it=AB_BankInfo_List2_First(bl); if (it) { AB_BANKINFO *bi; GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 256, 0, 1); bi=AB_BankInfo_List2Iterator_Data(it); while (bi) { createListBoxString(bi, tbuf); GWEN_Dialog_SetCharProperty(dlg, "listBox", GWEN_DialogProperty_AddValue, 0, GWEN_Buffer_GetStart(tbuf), 0); GWEN_Buffer_Reset(tbuf); bi=AB_BankInfo_List2Iterator_Next(it); } GWEN_Buffer_free(tbuf); AB_BankInfo_List2Iterator_free(it); } xdlg->matchingBankInfos=bl; } AB_BankInfo_free(tbi); if (GWEN_Dialog_GetIntProperty(dlg, "listBox", GWEN_DialogProperty_Value, 0, -1)>=0) GWEN_Dialog_SetIntProperty(dlg, "okButton", GWEN_DialogProperty_Enabled, 0, 1, 0); else GWEN_Dialog_SetIntProperty(dlg, "okButton", GWEN_DialogProperty_Enabled, 0, 0, 0); } void AB_SelectBankInfoDialog_Init(GWEN_DIALOG *dlg) { AB_SELECTBANKINFO_DIALOG *xdlg; GWEN_DB_NODE *dbPrefs; int i; int j; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AB_SELECTBANKINFO_DIALOG, dlg); assert(xdlg); dbPrefs=GWEN_Dialog_GetPreferences(dlg); GWEN_Dialog_SetCharProperty(dlg, "blzEdit", GWEN_DialogProperty_Value, 0, xdlg->bankCode, 0); GWEN_Dialog_SetCharProperty(dlg, "", GWEN_DialogProperty_Title, 0, I18N("Select a Bank"), 0); GWEN_Dialog_SetCharProperty(dlg, "listBox", GWEN_DialogProperty_Title, 0, I18N("Bank Code\tBIC\tName\tLocation\tProtocols"), 0); GWEN_Dialog_SetIntProperty(dlg, "listBox", GWEN_DialogProperty_SelectionMode, 0, GWEN_Dialog_SelectionMode_Single, 0); /* read width */ i=GWEN_DB_GetIntValue(dbPrefs, "dialog_width", 0, -1); if (i>=DIALOG_MINWIDTH) GWEN_Dialog_SetIntProperty(dlg, "", GWEN_DialogProperty_Width, 0, i, 0); /* read height */ i=GWEN_DB_GetIntValue(dbPrefs, "dialog_height", 0, -1); if (i>=DIALOG_MINHEIGHT) GWEN_Dialog_SetIntProperty(dlg, "", GWEN_DialogProperty_Height, 0, i, 0); /* read bank column widths */ for (i=0; i<5; i++) { j=GWEN_DB_GetIntValue(dbPrefs, "bank_list_columns", i, -1); if (j=0 && j>=0) GWEN_Dialog_SetIntProperty(dlg, "listBox", GWEN_DialogProperty_SortDirection, i, j, 0); /* disable ok button */ GWEN_Dialog_SetIntProperty(dlg, "okButton", GWEN_DialogProperty_Enabled, 0, 0, 0); } void AB_SelectBankInfoDialog_Fini(GWEN_DIALOG *dlg) { AB_SELECTBANKINFO_DIALOG *xdlg; int i; GWEN_DB_NODE *dbPrefs; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AB_SELECTBANKINFO_DIALOG, dlg); assert(xdlg); dbPrefs=GWEN_Dialog_GetPreferences(dlg); /* store dialog width */ i=GWEN_Dialog_GetIntProperty(dlg, "", GWEN_DialogProperty_Width, 0, -1); GWEN_DB_SetIntValue(dbPrefs, GWEN_DB_FLAGS_OVERWRITE_VARS, "dialog_width", i); /* store dialog height */ i=GWEN_Dialog_GetIntProperty(dlg, "", GWEN_DialogProperty_Height, 0, -1); GWEN_DB_SetIntValue(dbPrefs, GWEN_DB_FLAGS_OVERWRITE_VARS, "dialog_height", i); /* store column widths of importer list */ GWEN_DB_DeleteVar(dbPrefs, "bank_list_columns"); for (i=0; i<5; i++) { int j; j=GWEN_Dialog_GetIntProperty(dlg, "listBox", GWEN_DialogProperty_ColumnWidth, i, -1); if (jselectedBankInfo=AB_BankInfo_dup(bi); return GWEN_DialogEvent_ResultAccept; } else if (strcasecmp(sender, "abortButton")==0) return GWEN_DialogEvent_ResultReject; else if (strcasecmp(sender, "wiz_help_button")==0) { /* TODO: open a help dialog */ } return GWEN_DialogEvent_ResultNotHandled; } int AB_SelectBankInfoDialog_HandleValueChanged(GWEN_DIALOG *dlg, const char *sender) { const char *s; DBG_NOTICE(0, "Changed %s", sender); if (strcasecmp(sender, "blzEdit")==0 || strcasecmp(sender, "bicEdit")==0) { s=GWEN_Dialog_GetCharProperty(dlg, sender, GWEN_DialogProperty_Value, 0, NULL); if (s && strlen(s)>2) { AB_SelectBankInfoDialog_UpdateList(dlg); return GWEN_DialogEvent_ResultHandled; } } else if (strcasecmp(sender, "nameEdit")==0 || strcasecmp(sender, "locationEdit")==0) { s=GWEN_Dialog_GetCharProperty(dlg, sender, GWEN_DialogProperty_Value, 0, NULL); if (s && strlen(s)>3) { AB_SelectBankInfoDialog_UpdateList(dlg); return GWEN_DialogEvent_ResultHandled; } } else if (strcasecmp(sender, "listBox")==0) { return GWEN_DialogEvent_ResultHandled; } return GWEN_DialogEvent_ResultNotHandled; } int GWENHYWFAR_CB AB_SelectBankInfoDialog_SignalHandler(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender) { AB_SELECTBANKINFO_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AB_SELECTBANKINFO_DIALOG, dlg); assert(xdlg); switch (t) { case GWEN_DialogEvent_TypeInit: AB_SelectBankInfoDialog_Init(dlg); return GWEN_DialogEvent_ResultHandled;; case GWEN_DialogEvent_TypeFini: AB_SelectBankInfoDialog_Fini(dlg); return GWEN_DialogEvent_ResultHandled;; case GWEN_DialogEvent_TypeValueChanged: return AB_SelectBankInfoDialog_HandleValueChanged(dlg, sender); case GWEN_DialogEvent_TypeActivated: return AB_SelectBankInfoDialog_HandleActivated(dlg, sender); case GWEN_DialogEvent_TypeEnabled: case GWEN_DialogEvent_TypeDisabled: case GWEN_DialogEvent_TypeClose: case GWEN_DialogEvent_TypeLast: default: return GWEN_DialogEvent_ResultNotHandled; } return GWEN_DialogEvent_ResultNotHandled; } aqbanking-6.6.1/src/libs/aqbanking/dialogs/dlg_usertype_page_p.h0000664000175000017500000000150314043610744021673 00000000000000/*************************************************************************** begin : Wed Apr 14 2010 copyright : (C) 2010 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AB_DLG_USERTYPE_PAGE_P_H #define AB_DLG_USERTYPE_PAGE_P_H #include "dlg_usertype_page_be.h" typedef struct AB_USERTYPE_PAGE_DIALOG AB_USERTYPE_PAGE_DIALOG; struct AB_USERTYPE_PAGE_DIALOG { AB_BANKING *banking; int selectedType; }; static void GWENHYWFAR_CB AB_UserTypePageDialog_FreeData(void *bp, void *p); #endif aqbanking-6.6.1/src/libs/aqbanking/dialogs/dlg_importer.h0000664000175000017500000000354514300721174020345 00000000000000/*************************************************************************** begin : Tue Feb 10 2010 copyright : (C) 2018 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQBANKING_DLG_IMPORTER_H #define AQBANKING_DLG_IMPORTER_H #include #include #include /** @defgroup G_AB_DIALOGS_IMPORTER Generic File Import Dialog * @ingroup G_AB_DIALOGS * */ /*@{*/ #ifdef __cplusplus extern "C" { #endif /** * Creates a file import assistent. * * @return pointer to the created dialog. * * @param banking pointer to the AqBanking object * @param ctx pointer to the import context to receive the content of the * imported file * * @param finishedMessage message to show on the last page of the assistent * (i.e. the page which is shown after a successfull import into the given * import context). */ GWEN_DIALOG *AB_ImporterDialog_new(AB_BANKING *ab, AB_IMEXPORTER_CONTEXT *ctx, const char *finishedMessage); const char *AB_ImporterDialog_GetFileName(const GWEN_DIALOG *dlg); void AB_ImporterDialog_SetFileName(GWEN_DIALOG *dlg, const char *s); const char *AB_ImporterDialog_GetImporterName(const GWEN_DIALOG *dlg); void AB_ImporterDialog_SetImporterName(GWEN_DIALOG *dlg, const char *s); const char *AB_ImporterDialog_GetProfileName(const GWEN_DIALOG *dlg); void AB_ImporterDialog_SetProfileName(GWEN_DIALOG *dlg, const char *s); #ifdef __cplusplus } #endif /*@}*/ #endif aqbanking-6.6.1/src/libs/aqbanking/dialogs/dlg_setup_newuser.dlg0000664000175000017500000000362314043610744021734 00000000000000 aqbanking-6.6.1/src/libs/aqbanking/dialogs/dlg_selectbankinfo_p.h0000664000175000017500000000226014043610744022007 00000000000000/*************************************************************************** begin : Tue Apr 13 2010 copyright : (C) 2010 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQBANKING_DLG_SELECTBANKINFO_P_H #define AQBANKING_DLG_SELECTBANKINFO_P_H #include "dlg_selectbankinfo.h" typedef struct AB_SELECTBANKINFO_DIALOG AB_SELECTBANKINFO_DIALOG; struct AB_SELECTBANKINFO_DIALOG { AB_BANKING *banking; char *country; char *bankCode; AB_BANKINFO_LIST2 *matchingBankInfos; AB_BANKINFO *selectedBankInfo; }; static GWENHYWFAR_CB void AB_SelectBankInfoDialog_FreeData(void *bp, void *p); static int GWENHYWFAR_CB AB_SelectBankInfoDialog_SignalHandler(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender); #endif aqbanking-6.6.1/src/libs/aqbanking/dialogs/dlg_edituser.c0000664000175000017500000002456514546575647020360 00000000000000/*************************************************************************** begin : Fri Apr 16 2010 copyright : (C) 2018 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "dlg_edituser_p.h" #include "aqbanking/i18n_l.h" #include "aqbanking/backendsupport/user.h" #include "aqbanking/backendsupport/provider_be.h" #include "aqbanking/dialogs/dlg_selectbankinfo.h" #include #include #include #include #include #include #include #define DIALOG_MINWIDTH 200 #define DIALOG_MINHEIGHT 200 GWEN_INHERIT(GWEN_DIALOG, AB_EDIT_USER_DIALOG) GWEN_DIALOG *AB_EditUserDialog_new(AB_PROVIDER *pro, AB_USER *u, int doLock) { GWEN_DIALOG *dlg; AB_EDIT_USER_DIALOG *xdlg; dlg=GWEN_Dialog_CreateAndLoadWithPath("ab_edit_user", AB_PM_LIBNAME, AB_PM_DATADIR, "aqbanking/dialogs/dlg_edituser.dlg"); if (dlg==NULL) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Could not create dialog \"ab_edit_user\"."); return NULL; } GWEN_NEW_OBJECT(AB_EDIT_USER_DIALOG, xdlg); GWEN_INHERIT_SETDATA(GWEN_DIALOG, AB_EDIT_USER_DIALOG, dlg, xdlg, AB_EditUserDialog_FreeData); GWEN_Dialog_SetSignalHandler(dlg, AB_EditUserDialog_SignalHandler); xdlg->provider=pro; xdlg->banking=AB_Provider_GetBanking(pro); xdlg->user=u; xdlg->doLock=doLock; /* done */ return dlg; } void GWENHYWFAR_CB AB_EditUserDialog_FreeData(void *bp, void *p) { AB_EDIT_USER_DIALOG *xdlg; xdlg=(AB_EDIT_USER_DIALOG *) p; GWEN_FREE_OBJECT(xdlg); } void AB_EditUserDialog_Init(GWEN_DIALOG *dlg) { AB_EDIT_USER_DIALOG *xdlg; GWEN_DB_NODE *dbPrefs; int i; const char *s; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AB_EDIT_USER_DIALOG, dlg); assert(xdlg); dbPrefs=GWEN_Dialog_GetPreferences(dlg); /* init */ GWEN_Dialog_SetCharProperty(dlg, "", GWEN_DialogProperty_Title, 0, I18N("Edit User"), 0); s=AB_User_GetCountry(xdlg->user); GWEN_Dialog_SetCharProperty(dlg, "countryEdit", GWEN_DialogProperty_Value, 0, s, 0); s=AB_User_GetUserName(xdlg->user); GWEN_Dialog_SetCharProperty(dlg, "userNameEdit", GWEN_DialogProperty_Value, 0, s, 0); s=AB_User_GetBankCode(xdlg->user); GWEN_Dialog_SetCharProperty(dlg, "bankCodeEdit", GWEN_DialogProperty_Value, 0, s, 0); s=AB_User_GetUserId(xdlg->user); GWEN_Dialog_SetCharProperty(dlg, "userIdEdit", GWEN_DialogProperty_Value, 0, s, 0); s=AB_User_GetCustomerId(xdlg->user); GWEN_Dialog_SetCharProperty(dlg, "customerIdEdit", GWEN_DialogProperty_Value, 0, s, 0); /* read width */ i=GWEN_DB_GetIntValue(dbPrefs, "dialog_width", 0, -1); if (i>=DIALOG_MINWIDTH) GWEN_Dialog_SetIntProperty(dlg, "", GWEN_DialogProperty_Width, 0, i, 0); /* read height */ i=GWEN_DB_GetIntValue(dbPrefs, "dialog_height", 0, -1); if (i>=DIALOG_MINHEIGHT) GWEN_Dialog_SetIntProperty(dlg, "", GWEN_DialogProperty_Height, 0, i, 0); } static void removeAllSpaces(uint8_t *s) { uint8_t *d; d=s; while (*s) { if (*s>33) *(d++)=*s; s++; } *d=0; } int AB_EditUserDialog_fromGui(GWEN_DIALOG *dlg, AB_USER *u, int quiet) { AB_EDIT_USER_DIALOG *xdlg; const char *s; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AB_EDIT_USER_DIALOG, dlg); assert(xdlg); /* fromGui */ s=GWEN_Dialog_GetCharProperty(dlg, "countryEdit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) AB_User_SetCountry(u, s); s=GWEN_Dialog_GetCharProperty(dlg, "userNameEdit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) { GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(tbuf, s); GWEN_Text_CondenseBuffer(tbuf); if (u) AB_User_SetUserName(u, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } s=GWEN_Dialog_GetCharProperty(dlg, "bankCodeEdit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) { GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(tbuf, s); GWEN_Text_CondenseBuffer(tbuf); removeAllSpaces((uint8_t *)GWEN_Buffer_GetStart(tbuf)); if (u) AB_User_SetBankCode(u, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } s=GWEN_Dialog_GetCharProperty(dlg, "userIdEdit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) { GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(tbuf, s); GWEN_Text_CondenseBuffer(tbuf); if (u) AB_User_SetUserId(u, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } s=GWEN_Dialog_GetCharProperty(dlg, "customerIdEdit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) { GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(tbuf, s); GWEN_Text_CondenseBuffer(tbuf); if (u) AB_User_SetCustomerId(u, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } return 0; } void AB_EditUserDialog_Fini(GWEN_DIALOG *dlg) { AB_EDIT_USER_DIALOG *xdlg; int i; GWEN_DB_NODE *dbPrefs; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AB_EDIT_USER_DIALOG, dlg); assert(xdlg); dbPrefs=GWEN_Dialog_GetPreferences(dlg); /* store dialog width */ i=GWEN_Dialog_GetIntProperty(dlg, "", GWEN_DialogProperty_Width, 0, -1); GWEN_DB_SetIntValue(dbPrefs, GWEN_DB_FLAGS_OVERWRITE_VARS, "dialog_width", i); /* store dialog height */ i=GWEN_Dialog_GetIntProperty(dlg, "", GWEN_DialogProperty_Height, 0, -1); GWEN_DB_SetIntValue(dbPrefs, GWEN_DB_FLAGS_OVERWRITE_VARS, "dialog_height", i); } int AB_EditUserDialog_HandleActivatedBankCode(GWEN_DIALOG *dlg) { AB_EDIT_USER_DIALOG *xdlg; GWEN_DIALOG *dlg2; int rv; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AB_EDIT_USER_DIALOG, dlg); assert(xdlg); dlg2=AB_SelectBankInfoDialog_new(xdlg->banking, "de", NULL); if (dlg2==NULL) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Could not create dialog"); return GWEN_DialogEvent_ResultHandled; } rv=GWEN_Gui_ExecDialog(dlg2, 0); if (rv==0) { /* rejected */ GWEN_Dialog_free(dlg2); return GWEN_DialogEvent_ResultHandled; } else { const AB_BANKINFO *bi; bi=AB_SelectBankInfoDialog_GetSelectedBankInfo(dlg2); if (bi) { const char *s; s=AB_BankInfo_GetBankId(bi); GWEN_Dialog_SetCharProperty(dlg, "bankCodeEdit", GWEN_DialogProperty_Value, 0, (s && *s)?s:"", 0); } } GWEN_Dialog_free(dlg2); return GWEN_DialogEvent_ResultHandled; } int AB_EditUserDialog_HandleActivatedOk(GWEN_DIALOG *dlg) { AB_EDIT_USER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AB_EDIT_USER_DIALOG, dlg); assert(xdlg); if (xdlg->doLock) { int rv; rv=AB_Provider_BeginExclUseUser(xdlg->provider, xdlg->user); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); GWEN_Gui_MessageBox(GWEN_GUI_MSG_FLAGS_SEVERITY_NORMAL | GWEN_GUI_MSG_FLAGS_TYPE_ERROR | GWEN_GUI_MSG_FLAGS_CONFIRM_B1, I18N("Error"), I18N("Unable to lock user. Maybe already in use?"), I18N("Dismiss"), NULL, NULL, 0); return GWEN_DialogEvent_ResultHandled; } } AB_EditUserDialog_fromGui(dlg, xdlg->user, 1); if (xdlg->doLock) { int rv; rv=AB_Provider_EndExclUseUser(xdlg->provider, xdlg->user, 0); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); GWEN_Gui_MessageBox(GWEN_GUI_MSG_FLAGS_SEVERITY_NORMAL | GWEN_GUI_MSG_FLAGS_TYPE_ERROR | GWEN_GUI_MSG_FLAGS_CONFIRM_B1, I18N("Error"), I18N("Unable to unlock user."), I18N("Dismiss"), NULL, NULL, 0); AB_Provider_EndExclUseUser(xdlg->provider, xdlg->user, 1); return GWEN_DialogEvent_ResultHandled; } } return GWEN_DialogEvent_ResultAccept; } int AB_EditUserDialog_HandleActivated(GWEN_DIALOG *dlg, const char *sender) { if (strcasecmp(sender, "bankCodeButton")==0) return AB_EditUserDialog_HandleActivatedBankCode(dlg); else if (strcasecmp(sender, "okButton")==0) return AB_EditUserDialog_HandleActivatedOk(dlg); else if (strcasecmp(sender, "abortButton")==0) return GWEN_DialogEvent_ResultReject; else if (strcasecmp(sender, "helpButton")==0) { /* TODO: open u help dialog */ } return GWEN_DialogEvent_ResultNotHandled; } int GWENHYWFAR_CB AB_EditUserDialog_SignalHandler(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender) { AB_EDIT_USER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AB_EDIT_USER_DIALOG, dlg); assert(xdlg); switch (t) { case GWEN_DialogEvent_TypeInit: AB_EditUserDialog_Init(dlg); return GWEN_DialogEvent_ResultHandled;; case GWEN_DialogEvent_TypeFini: AB_EditUserDialog_Fini(dlg); return GWEN_DialogEvent_ResultHandled;; case GWEN_DialogEvent_TypeValueChanged: DBG_NOTICE(0, "ValueChanged: %s", sender); return GWEN_DialogEvent_ResultHandled;; case GWEN_DialogEvent_TypeActivated: return AB_EditUserDialog_HandleActivated(dlg, sender); case GWEN_DialogEvent_TypeEnabled: case GWEN_DialogEvent_TypeDisabled: case GWEN_DialogEvent_TypeClose: case GWEN_DialogEvent_TypeLast: default: return GWEN_DialogEvent_ResultNotHandled; } return GWEN_DialogEvent_ResultNotHandled; } aqbanking-6.6.1/src/libs/aqbanking/dialogs/dlg_usertype_pagedefault_l.h0000664000175000017500000000144214043610744023236 00000000000000/*************************************************************************** begin : Fri Jul 30 2010 copyright : (C) 2010 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQBANKING_DLG_USERTYPE_PAGEDEFAULT_L_H #define AQBANKING_DLG_USERTYPE_PAGEDEFAULT_L_H #include #include #ifdef __cplusplus extern "C" { #endif GWEN_DIALOG *AB_UserTypePageDefaultDialog_new(AB_BANKING *ab); #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/aqbanking/dialogs/dlg_newuser_be.h0000664000175000017500000000210014043610744020630 00000000000000/*************************************************************************** begin : Wed Apr 14 2010 copyright : (C) 2018 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AB_DLG_NEW_USER_BE_H #define AB_DLG_NEW_USER_BE_H #include #include #include #ifdef __cplusplus extern "C" { #endif GWEN_DIALOG *AB_NewUserDialog_new(AB_BANKING *ab, AB_PROVIDER *pro, const char *dname); AB_BANKING *AB_NewUserDialog_GetBanking(const GWEN_DIALOG *dlg); AB_PROVIDER *AB_NewUserDialog_GetProvider(const GWEN_DIALOG *dlg); AB_USER *AB_NewUserDialog_GetUser(const GWEN_DIALOG *dlg); void AB_NewUserDialog_SetUser(GWEN_DIALOG *dlg, AB_USER *u); #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/aqbanking/dialogs/dlg_selectbackend.c0000664000175000017500000002546414546575647021322 00000000000000/*************************************************************************** begin : Wed Apr 14 2010 copyright : (C) 2010 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "dlg_selectbackend_p.h" #include "aqbanking/i18n_l.h" #include #include #include #include #include #include #include #define DIALOG_MINWIDTH 200 #define DIALOG_MINHEIGHT 100 GWEN_INHERIT(GWEN_DIALOG, AB_SELECTBACKEND_DIALOG) GWEN_DIALOG *AB_SelectBackendDialog_new(AB_BANKING *ab, const char *text) { GWEN_DIALOG *dlg; AB_SELECTBACKEND_DIALOG *xdlg; dlg=GWEN_Dialog_CreateAndLoadWithPath("ab_selectbackend", AB_PM_LIBNAME, AB_PM_DATADIR, "aqbanking/dialogs/dlg_selectbackend.dlg"); if (dlg==NULL) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Could not create dialog \"ab_selectbackend\"."); return NULL; } GWEN_NEW_OBJECT(AB_SELECTBACKEND_DIALOG, xdlg); GWEN_INHERIT_SETDATA(GWEN_DIALOG, AB_SELECTBACKEND_DIALOG, dlg, xdlg, AB_SelectBackendDialog_FreeData); GWEN_Dialog_SetSignalHandler(dlg, AB_SelectBackendDialog_SignalHandler); xdlg->banking=ab; if (text) xdlg->text=strdup(text); /* done */ return dlg; } void GWENHYWFAR_CB AB_SelectBackendDialog_FreeData(void *bp, void *p) { AB_SELECTBACKEND_DIALOG *xdlg; xdlg=(AB_SELECTBACKEND_DIALOG *) p; free(xdlg->selectedProvider); free(xdlg->text); GWEN_FREE_OBJECT(xdlg); } const char *AB_SelectBackendDialog_GetSelectedProvider(const GWEN_DIALOG *dlg) { AB_SELECTBACKEND_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AB_SELECTBACKEND_DIALOG, dlg); assert(xdlg); return xdlg->selectedProvider; } void AB_SelectBackendDialog_SetSelectedProvider(GWEN_DIALOG *dlg, const char *s) { AB_SELECTBACKEND_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AB_SELECTBACKEND_DIALOG, dlg); assert(xdlg); free(xdlg->selectedProvider); if (s) xdlg->selectedProvider=strdup(s); else xdlg->selectedProvider=NULL; } void AB_SelectBackendDialog_DetermineBackend(GWEN_DIALOG *dlg) { int idx; AB_SELECTBACKEND_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AB_SELECTBACKEND_DIALOG, dlg); assert(xdlg); AB_SelectBackendDialog_SetSelectedProvider(dlg, NULL); idx=GWEN_Dialog_GetIntProperty(dlg, "backendCombo", GWEN_DialogProperty_Value, 0, -1); if (idx>=0 && xdlg->pluginDescrList) { GWEN_PLUGIN_DESCRIPTION *d; d=GWEN_PluginDescription_List_First(xdlg->pluginDescrList); while (d && idx>0) { idx--; d=GWEN_PluginDescription_List_Next(d); } if (d) AB_SelectBackendDialog_SetSelectedProvider(dlg, GWEN_PluginDescription_GetName(d)); } } int AB_SelectBackendDialog_BackendChanged(GWEN_DIALOG *dlg) { AB_SELECTBACKEND_DIALOG *xdlg; int idx; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AB_SELECTBACKEND_DIALOG, dlg); assert(xdlg); idx=GWEN_Dialog_GetIntProperty(dlg, "backendCombo", GWEN_DialogProperty_Value, 0, -1); if (idx>=0 && xdlg->pluginDescrList) { GWEN_PLUGIN_DESCRIPTION *d; d=GWEN_PluginDescription_List_First(xdlg->pluginDescrList); while (d && idx>0) { idx--; d=GWEN_PluginDescription_List_Next(d); } if (d) { const char *s; s=GWEN_PluginDescription_GetLongDescr(d); GWEN_Dialog_SetCharProperty(dlg, "descrLabel", GWEN_DialogProperty_Title, 0, s, 0); } } return GWEN_DialogEvent_ResultHandled; } void AB_SelectBackendDialog_Reload(GWEN_DIALOG *dlg) { AB_SELECTBACKEND_DIALOG *xdlg; GWEN_PLUGIN_DESCRIPTION_LIST2 *ll; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AB_SELECTBACKEND_DIALOG, dlg); assert(xdlg); if (xdlg->selectedProvider==NULL) AB_SelectBackendDialog_DetermineBackend(dlg); GWEN_Dialog_SetIntProperty(dlg, "backendCombo", GWEN_DialogProperty_ClearValues, 0, 0, 0); if (xdlg->pluginDescrList) GWEN_PluginDescription_List_Clear(xdlg->pluginDescrList); else xdlg->pluginDescrList=GWEN_PluginDescription_List_new(); ll=AB_Banking_GetProviderDescrs(xdlg->banking); if (ll) { GWEN_PLUGIN_DESCRIPTION_LIST2_ITERATOR *it; it=GWEN_PluginDescription_List2_First(ll); if (it) { GWEN_PLUGIN_DESCRIPTION *d; GWEN_BUFFER *tbuf; int idx=-1; int i=0; tbuf=GWEN_Buffer_new(0, 256, 0, 1); d=GWEN_PluginDescription_List2Iterator_Data(it); while (d) { const char *s; s=GWEN_PluginDescription_GetName(d); if (s && *s) { GWEN_Buffer_AppendString(tbuf, s); if (idx==-1 && xdlg->selectedProvider && strcasecmp(xdlg->selectedProvider, s)==0) idx=i; s=GWEN_PluginDescription_GetShortDescr(d); if (s && *s) { GWEN_Buffer_AppendString(tbuf, " - "); GWEN_Buffer_AppendString(tbuf, s); } GWEN_PluginDescription_Attach(d); GWEN_PluginDescription_List_Add(d, xdlg->pluginDescrList); GWEN_Dialog_SetCharProperty(dlg, "backendCombo", GWEN_DialogProperty_AddValue, 0, GWEN_Buffer_GetStart(tbuf), 0); GWEN_Buffer_Reset(tbuf); i++; } d=GWEN_PluginDescription_List2Iterator_Next(it); } if (idx!=-1) GWEN_Dialog_SetIntProperty(dlg, "backendCombo", GWEN_DialogProperty_Value, 0, idx, 0); GWEN_Buffer_free(tbuf); GWEN_PluginDescription_List2Iterator_free(it); } GWEN_PluginDescription_List2_freeAll(ll); } AB_SelectBackendDialog_BackendChanged(dlg); } void AB_SelectBackendDialog_Init(GWEN_DIALOG *dlg) { AB_SELECTBACKEND_DIALOG *xdlg; GWEN_DB_NODE *dbPrefs; int i; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AB_SELECTBACKEND_DIALOG, dlg); assert(xdlg); dbPrefs=GWEN_Dialog_GetPreferences(dlg); GWEN_Dialog_SetCharProperty(dlg, "", GWEN_DialogProperty_Title, 0, I18N("Select Backend"), 0); if (xdlg->text && *(xdlg->text)) GWEN_Dialog_SetCharProperty(dlg, "introLabel", GWEN_DialogProperty_Title, 0, xdlg->text, 0); else GWEN_Dialog_SetCharProperty(dlg, "introLabel", GWEN_DialogProperty_Title, 0, I18N("Select a backend."), 0); /* read width */ i=GWEN_DB_GetIntValue(dbPrefs, "dialog_width", 0, -1); if (i>=DIALOG_MINWIDTH) GWEN_Dialog_SetIntProperty(dlg, "", GWEN_DialogProperty_Width, 0, i, 0); /* read height */ i=GWEN_DB_GetIntValue(dbPrefs, "dialog_height", 0, -1); if (i>=DIALOG_MINHEIGHT) GWEN_Dialog_SetIntProperty(dlg, "", GWEN_DialogProperty_Height, 0, i, 0); AB_SelectBackendDialog_Reload(dlg); } void AB_SelectBackendDialog_Fini(GWEN_DIALOG *dlg) { AB_SELECTBACKEND_DIALOG *xdlg; int i; GWEN_DB_NODE *dbPrefs; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AB_SELECTBACKEND_DIALOG, dlg); assert(xdlg); dbPrefs=GWEN_Dialog_GetPreferences(dlg); AB_SelectBackendDialog_DetermineBackend(dlg); /* store dialog width */ i=GWEN_Dialog_GetIntProperty(dlg, "", GWEN_DialogProperty_Width, 0, -1); GWEN_DB_SetIntValue(dbPrefs, GWEN_DB_FLAGS_OVERWRITE_VARS, "dialog_width", i); /* store dialog height */ i=GWEN_Dialog_GetIntProperty(dlg, "", GWEN_DialogProperty_Height, 0, -1); GWEN_DB_SetIntValue(dbPrefs, GWEN_DB_FLAGS_OVERWRITE_VARS, "dialog_height", i); } int AB_SelectBackendDialog_HandleActivated(GWEN_DIALOG *dlg, const char *sender) { DBG_NOTICE(0, "Activated: %s", sender); if (strcasecmp(sender, "okButton")==0) return GWEN_DialogEvent_ResultAccept; else if (strcasecmp(sender, "abortButton")==0) return GWEN_DialogEvent_ResultReject; else if (strcasecmp(sender, "backendCombo")==0) return AB_SelectBackendDialog_BackendChanged(dlg); else if (strcasecmp(sender, "helpButton")==0) { /* TODO: open a help dialog */ } return GWEN_DialogEvent_ResultNotHandled; } int GWENHYWFAR_CB AB_SelectBackendDialog_SignalHandler(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender) { AB_SELECTBACKEND_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AB_SELECTBACKEND_DIALOG, dlg); assert(xdlg); switch (t) { case GWEN_DialogEvent_TypeInit: AB_SelectBackendDialog_Init(dlg); return GWEN_DialogEvent_ResultHandled;; case GWEN_DialogEvent_TypeFini: AB_SelectBackendDialog_Fini(dlg); return GWEN_DialogEvent_ResultHandled;; case GWEN_DialogEvent_TypeValueChanged: return GWEN_DialogEvent_ResultHandled;; case GWEN_DialogEvent_TypeActivated: return AB_SelectBackendDialog_HandleActivated(dlg, sender); case GWEN_DialogEvent_TypeEnabled: case GWEN_DialogEvent_TypeDisabled: case GWEN_DialogEvent_TypeClose: case GWEN_DialogEvent_TypeLast: default: return GWEN_DialogEvent_ResultNotHandled; } return GWEN_DialogEvent_ResultNotHandled; } AB_PROVIDER *AB_SelectBackend(AB_BANKING *ab, const char *initial, const char *text) { GWEN_DIALOG *dlg; int rv; dlg=AB_SelectBackendDialog_new(ab, text); if (dlg==NULL) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Could not create dialog"); return NULL; } AB_SelectBackendDialog_SetSelectedProvider(dlg, initial); rv=GWEN_Gui_ExecDialog(dlg, 0); if (rv==0) { /* rejected */ GWEN_Dialog_free(dlg); return NULL; } else { const char *s; s=AB_SelectBackendDialog_GetSelectedProvider(dlg); if (s && *s) { AB_PROVIDER *pro; pro=AB_Banking_BeginUseProvider(ab, s); if (pro==NULL) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Provider [%s] not found", s); GWEN_Dialog_free(dlg); return NULL; } GWEN_Dialog_free(dlg); return pro; } GWEN_Dialog_free(dlg); return NULL; } } aqbanking-6.6.1/src/libs/aqbanking/dialogs/dlg_selectbackend_p.h0000664000175000017500000000221714043610744021611 00000000000000/*************************************************************************** begin : Wed Apr 14 2010 copyright : (C) 2010 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQBANKING_DLG_SELECTBACKEND_P_H #define AQBANKING_DLG_SELECTBACKEND_P_H #include "dlg_selectbackend.h" typedef struct AB_SELECTBACKEND_DIALOG AB_SELECTBACKEND_DIALOG; struct AB_SELECTBACKEND_DIALOG { AB_BANKING *banking; char *selectedProvider; char *text; GWEN_PLUGIN_DESCRIPTION_LIST *pluginDescrList; }; static void GWENHYWFAR_CB AB_SelectBackendDialog_FreeData(void *bp, void *p); static int GWENHYWFAR_CB AB_SelectBackendDialog_SignalHandler(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender); #endif aqbanking-6.6.1/src/libs/aqbanking/dialogs/dlg_newaccount_be.h0000664000175000017500000000170714043610744021322 00000000000000/*************************************************************************** begin : Wed Apr 14 2010 copyright : (C) 2018 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AB_DLG_NEW_ACCOUNT_BE_H #define AB_DLG_NEW_ACCOUNT_BE_H #include #include #include #ifdef __cplusplus extern "C" { #endif GWEN_DIALOG *AB_NewAccountDialog_new(AB_BANKING *ab, const char *dname); AB_ACCOUNT *AB_NewAccountDialog_GetAccount(const GWEN_DIALOG *dlg); void AB_NewAccountDialog_SetAccount(GWEN_DIALOG *dlg, AB_ACCOUNT *a); #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/aqbanking/dialogs/dlg_usertype_pagedefault_p.h0000664000175000017500000000162214043610744023242 00000000000000/*************************************************************************** begin : Fri Jul 30 2010 copyright : (C) 2010 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQBANKING_DLG_USERTYPE_PAGEDEFAULT_P_H #define AQBANKING_DLG_USERTYPE_PAGEDEFAULT_P_H #include "dlg_usertype_pagedefault_l.h" static int GWENHYWFAR_CB AB_UserTypePageDefaultDialog_SignalHandler(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender); #endif aqbanking-6.6.1/src/libs/aqbanking/dialogs/dlg_selectbankinfo.h0000664000175000017500000000215314043610744021471 00000000000000/*************************************************************************** begin : Tue Apr 13 2010 copyright : (C) 2018 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQBANKING_DLG_SELECTBANKINFO_H #define AQBANKING_DLG_SELECTBANKINFO_H #include #include #include #ifdef __cplusplus extern "C" { #endif /** @defgroup G_AB_DIALOGS_SELECT_BANKINFO Bank Finder Dialog * @ingroup G_AB_DIALOGS * */ /*@{*/ GWEN_DIALOG *AB_SelectBankInfoDialog_new(AB_BANKING *ab, const char *country, const char *bankCode); const AB_BANKINFO *AB_SelectBankInfoDialog_GetSelectedBankInfo(GWEN_DIALOG *dlg); /*@}*/ #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/aqbanking/dialogs/dlg_newaccount_p.h0000664000175000017500000000145714043610744021175 00000000000000/*************************************************************************** begin : Wed Apr 14 2010 copyright : (C) 2010 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AB_DLG_NEWACCOUNT_P_H #define AB_DLG_NEWACCOUNT_P_H #include "dlg_newaccount_be.h" typedef struct AB_NEWACCOUNT_DIALOG AB_NEWACCOUNT_DIALOG; struct AB_NEWACCOUNT_DIALOG { AB_BANKING *banking; AB_ACCOUNT *account; }; static void GWENHYWFAR_CB AB_NewAccountDialog_FreeData(void *bp, void *p); #endif aqbanking-6.6.1/src/libs/aqbanking/dialogs/dlg_editaccount.dlg0000664000175000017500000000632314043610744021326 00000000000000 aqbanking-6.6.1/src/libs/aqbanking/dialogs/w_profilelist.c0000664000175000017500000000660514546575647020563 00000000000000/*************************************************************************** begin : Tue Feb 10 2010 copyright : (C) 2022 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "w_profilelist.h" #include "aqbanking/i18n_l.h" #include #include #include void AB_ProfileListWidget_Init(GWEN_DIALOG *dlg, const char *widgetName) { GWEN_Dialog_SetCharProperty(dlg, widgetName, GWEN_DialogProperty_Title, 0, I18N("Name\tDescription"), 0); GWEN_Dialog_SetIntProperty(dlg, widgetName, GWEN_DialogProperty_SelectionMode, 0, GWEN_Dialog_SelectionMode_Single, 0); } void AB_ProfileListWidget_UpdateList(GWEN_DIALOG *dlg, const char *widgetName, AB_BANKING *banking, const char *importerName) { char *selectedProfile; selectedProfile=AB_ProfileListWidget_GetSelectedProfile(dlg, widgetName); GWEN_Dialog_SetIntProperty(dlg, widgetName, GWEN_DialogProperty_ClearValues, 0, 0, 0); if (importerName && *importerName) { GWEN_DB_NODE *db; db=AB_Banking_GetImExporterProfiles(banking, importerName); if (db) { GWEN_DB_NODE *dbProfile; GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 256, 0, 1); dbProfile=GWEN_DB_GetFirstGroup(db); while (dbProfile) { const char *s; s=GWEN_DB_GetCharValue(dbProfile, "name", 0, NULL); if (s && *s) { GWEN_Buffer_AppendString(tbuf, s); s=GWEN_DB_GetCharValue(dbProfile, "shortDescr", 0, NULL); if (s && *s) { GWEN_Buffer_AppendString(tbuf, "\t"); GWEN_Buffer_AppendString(tbuf, s); } GWEN_Dialog_SetCharProperty(dlg, widgetName, GWEN_DialogProperty_AddValue, 0, GWEN_Buffer_GetStart(tbuf), 0); GWEN_Buffer_Reset(tbuf); } dbProfile=GWEN_DB_GetNextGroup(dbProfile); } GWEN_Buffer_free(tbuf); GWEN_DB_Group_free(db); } GWEN_Dialog_SetIntProperty(dlg, widgetName, GWEN_DialogProperty_Sort, 0, 0, 0); if (selectedProfile) { DBG_INFO(AQBANKING_LOGDOMAIN, "Re-selecting profile \"%s\"", selectedProfile); AB_ProfileListWidget_SelectProfile(dlg, widgetName, selectedProfile); } } if (selectedProfile) free(selectedProfile); } void AB_ProfileListWidget_SelectProfile(GWEN_DIALOG *dlg, const char *widgetName, const char *profileName) { int idx; idx=GWEN_Dialog_ListGetItemMatchingFirstColumn(dlg, widgetName, profileName); if (idx>=0) GWEN_Dialog_SetIntProperty(dlg, widgetName, GWEN_DialogProperty_Value, 0, idx, 0); } char *AB_ProfileListWidget_GetSelectedProfile(GWEN_DIALOG *dlg, const char *widgetName) { int rv; /* get current value */ rv=GWEN_Dialog_GetIntProperty(dlg, widgetName, GWEN_DialogProperty_Value, 0, -1); DBG_INFO(AQBANKING_LOGDOMAIN, "Selected value: %d", rv); if (rv!=-1) { char *s; s=GWEN_Dialog_ListGetFirstColumnData(dlg, widgetName, rv); if (s && *s) { DBG_INFO(AQBANKING_LOGDOMAIN, "Selected profile [%s]", s); return s; } } return NULL; } aqbanking-6.6.1/src/libs/aqbanking/dialogs/dlg_editaccount.c0000664000175000017500000004734414546575647021036 00000000000000/*************************************************************************** begin : Thu Apr 15 2010 copyright : (C) 2018 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "dlg_editaccount_p.h" #include "aqbanking/i18n_l.h" #include "aqbanking/backendsupport/account.h" #include "aqbanking/backendsupport/user.h" #include "aqbanking/backendsupport/provider_be.h" #include "aqbanking/dialogs/dlg_selectbankinfo.h" #include #include #include #include #include #include #include #define DIALOG_MINWIDTH 400 #define DIALOG_MINHEIGHT 300 #define USER_LIST_MINCOLWIDTH 50 GWEN_INHERIT(GWEN_DIALOG, AB_EDIT_ACCOUNT_DIALOG) GWEN_DIALOG *AB_EditAccountDialog_new(AB_PROVIDER *pro, AB_ACCOUNT *a, int doLock) { GWEN_DIALOG *dlg; AB_EDIT_ACCOUNT_DIALOG *xdlg; dlg=GWEN_Dialog_CreateAndLoadWithPath("ab_edit_account", AB_PM_LIBNAME, AB_PM_DATADIR, "aqbanking/dialogs/dlg_editaccount.dlg"); if (dlg==NULL) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Could not create dialog \"ab_edit_account\"."); return NULL; } GWEN_NEW_OBJECT(AB_EDIT_ACCOUNT_DIALOG, xdlg); GWEN_INHERIT_SETDATA(GWEN_DIALOG, AB_EDIT_ACCOUNT_DIALOG, dlg, xdlg, AB_EditAccountDialog_FreeData); GWEN_Dialog_SetSignalHandler(dlg, AB_EditAccountDialog_SignalHandler); xdlg->provider=pro; xdlg->banking=AB_Provider_GetBanking(pro); xdlg->account=a; xdlg->doLock=doLock; /* done */ return dlg; } void GWENHYWFAR_CB AB_EditAccountDialog_FreeData(void *bp, void *p) { AB_EDIT_ACCOUNT_DIALOG *xdlg; xdlg=(AB_EDIT_ACCOUNT_DIALOG *) p; GWEN_FREE_OBJECT(xdlg); } static void createUserString(const AB_USER *u, GWEN_BUFFER *tbuf) { const char *s; char numbuf[32]; uint32_t uid; /* column 1 */ uid=AB_User_GetUniqueId(u); snprintf(numbuf, sizeof(numbuf)-1, "%d", uid); numbuf[sizeof(numbuf)-1]=0; GWEN_Buffer_AppendString(tbuf, numbuf); GWEN_Buffer_AppendString(tbuf, "-"); /* column 2 */ s=AB_User_GetBankCode(u); if (s && *s) GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "-"); /* column 3 */ s=AB_User_GetBankCode(u); if (s && *s) GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "-"); /* column 4 */ s=AB_User_GetCustomerId(u); if (!(s && *s)) s=AB_User_GetUserId(u); if (s && *s) GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "-"); /* column 5 */ s=AB_User_GetUserName(u); if (s && *s) GWEN_Buffer_AppendString(tbuf, s); } uint32_t AB_EditAccountDialog_GetCurrentUserId(GWEN_DIALOG *dlg) { int idx; idx=GWEN_Dialog_GetIntProperty(dlg, "userCombo", GWEN_DialogProperty_Value, 0, -1); if (idx>=0) { const char *currentText; currentText=GWEN_Dialog_GetCharProperty(dlg, "userCombo", GWEN_DialogProperty_Value, idx, NULL); if (currentText && *currentText) { unsigned long int id; if (sscanf(currentText, "%lu", &id)==1) { return (uint32_t) id; } } } return 0; } int AB_EditAccountDialog_FindUserEntry(GWEN_DIALOG *dlg, uint32_t userId) { int i; int num; /* user list */ num=GWEN_Dialog_GetIntProperty(dlg, "userCombo", GWEN_DialogProperty_ValueCount, 0, 0); for (i=0; iprovider, users); if (rv<0) { } else { GWEN_BUFFER *tbuf; AB_USER *u; tbuf=GWEN_Buffer_new(0, 256, 0, 1); u=AB_User_List_First(users); while (u) { createUserString(u, tbuf); GWEN_StringList_AppendString(sl, GWEN_Buffer_GetStart(tbuf), 0, 1); GWEN_Buffer_Reset(tbuf); u=AB_User_List_Next(u); } GWEN_Buffer_free(tbuf); } AB_User_List_free(users); if (GWEN_StringList_Count(sl)) { GWEN_STRINGLISTENTRY *se; /* sort user list */ GWEN_StringList_Sort(sl, 1, GWEN_StringList_SortModeNoCase); se=GWEN_StringList_FirstEntry(sl); while (se) { const char *s; s=GWEN_StringListEntry_Data(se); if (s && *s) GWEN_Dialog_SetCharProperty(dlg, "userCombo", GWEN_DialogProperty_AddValue, 0, s, 0); se=GWEN_StringListEntry_Next(se); } } GWEN_StringList_free(sl); } void AB_EditAccountDialog_Init(GWEN_DIALOG *dlg) { AB_EDIT_ACCOUNT_DIALOG *xdlg; GWEN_DB_NODE *dbPrefs; int i; const char *s; AB_ACCOUNT_TYPE t; uint32_t uid; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AB_EDIT_ACCOUNT_DIALOG, dlg); assert(xdlg); dbPrefs=GWEN_Dialog_GetPreferences(dlg); /* init */ GWEN_Dialog_SetCharProperty(dlg, "", GWEN_DialogProperty_Title, 0, I18N("Edit Account"), 0); s=AB_Account_GetBankCode(xdlg->account); GWEN_Dialog_SetCharProperty(dlg, "bankCodeEdit", GWEN_DialogProperty_Value, 0, s, 0); s=AB_Account_GetBankName(xdlg->account); GWEN_Dialog_SetCharProperty(dlg, "bankNameEdit", GWEN_DialogProperty_Value, 0, s, 0); s=AB_Account_GetBic(xdlg->account); GWEN_Dialog_SetCharProperty(dlg, "bicEdit", GWEN_DialogProperty_Value, 0, s, 0); s=AB_Account_GetAccountNumber(xdlg->account); GWEN_Dialog_SetCharProperty(dlg, "accountNumberEdit", GWEN_DialogProperty_Value, 0, s, 0); s=AB_Account_GetAccountName(xdlg->account); GWEN_Dialog_SetCharProperty(dlg, "accountNameEdit", GWEN_DialogProperty_Value, 0, s, 0); s=AB_Account_GetIban(xdlg->account); GWEN_Dialog_SetCharProperty(dlg, "ibanEdit", GWEN_DialogProperty_Value, 0, s, 0); s=AB_Account_GetOwnerName(xdlg->account); GWEN_Dialog_SetCharProperty(dlg, "ownerNameEdit", GWEN_DialogProperty_Value, 0, s, 0); s=AB_Account_GetCurrency(xdlg->account); GWEN_Dialog_SetCharProperty(dlg, "currencyEdit", GWEN_DialogProperty_Value, 0, s, 0); s=AB_Account_GetCountry(xdlg->account); GWEN_Dialog_SetCharProperty(dlg, "countryEdit", GWEN_DialogProperty_Value, 0, s, 0); /* setup account type */ GWEN_Dialog_SetCharProperty(dlg, "accountTypeCombo", GWEN_DialogProperty_AddValue, 0, I18N("unknown"), 0); GWEN_Dialog_SetCharProperty(dlg, "accountTypeCombo", GWEN_DialogProperty_AddValue, 0, I18N("Bank Account"), 0); GWEN_Dialog_SetCharProperty(dlg, "accountTypeCombo", GWEN_DialogProperty_AddValue, 0, I18N("Credit Card Account"), 0); GWEN_Dialog_SetCharProperty(dlg, "accountTypeCombo", GWEN_DialogProperty_AddValue, 0, I18N("Checking Account"), 0); GWEN_Dialog_SetCharProperty(dlg, "accountTypeCombo", GWEN_DialogProperty_AddValue, 0, I18N("Savings Account"), 0); GWEN_Dialog_SetCharProperty(dlg, "accountTypeCombo", GWEN_DialogProperty_AddValue, 0, I18N("Investment Account"), 0); GWEN_Dialog_SetCharProperty(dlg, "accountTypeCombo", GWEN_DialogProperty_AddValue, 0, I18N("Cash Account"), 0); GWEN_Dialog_SetCharProperty(dlg, "accountTypeCombo", GWEN_DialogProperty_AddValue, 0, I18N("Moneymarket Account"), 0); t=AB_Account_GetAccountType(xdlg->account); if (taccount); if (uid) { int idx; idx=AB_EditAccountDialog_FindUserEntry(dlg, uid); if (idx>=0) GWEN_Dialog_SetIntProperty(dlg, "userCombo", GWEN_DialogProperty_Value, 0, idx, 0); } /* read width */ i=GWEN_DB_GetIntValue(dbPrefs, "dialog_width", 0, -1); if (i>=DIALOG_MINWIDTH) GWEN_Dialog_SetIntProperty(dlg, "", GWEN_DialogProperty_Width, 0, i, 0); /* read height */ i=GWEN_DB_GetIntValue(dbPrefs, "dialog_height", 0, -1); if (i>=DIALOG_MINHEIGHT) GWEN_Dialog_SetIntProperty(dlg, "", GWEN_DialogProperty_Height, 0, i, 0); } static void removeAllSpaces(uint8_t *s) { uint8_t *d; d=s; while (*s) { if (*s>33) *(d++)=*s; s++; } *d=0; } int AB_EditAccountDialog_fromGui(GWEN_DIALOG *dlg, AB_ACCOUNT *a, int quiet) { AB_EDIT_ACCOUNT_DIALOG *xdlg; int i; const char *s; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AB_EDIT_ACCOUNT_DIALOG, dlg); assert(xdlg); /* fromGui */ s=GWEN_Dialog_GetCharProperty(dlg, "accountNumberEdit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) { GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(tbuf, s); GWEN_Text_CondenseBuffer(tbuf); removeAllSpaces((uint8_t *)GWEN_Buffer_GetStart(tbuf)); s=GWEN_Buffer_GetStart(tbuf); if (a) AB_Account_SetAccountNumber(a, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } s=GWEN_Dialog_GetCharProperty(dlg, "accountNameEdit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) { GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(tbuf, s); GWEN_Text_CondenseBuffer(tbuf); if (a) AB_Account_SetAccountName(a, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } s=GWEN_Dialog_GetCharProperty(dlg, "ibanEdit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) { GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(tbuf, s); GWEN_Text_CondenseBuffer(tbuf); removeAllSpaces((uint8_t *)GWEN_Buffer_GetStart(tbuf)); if (a) AB_Account_SetIban(a, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } s=GWEN_Dialog_GetCharProperty(dlg, "ownerNameEdit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) { GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(tbuf, s); GWEN_Text_CondenseBuffer(tbuf); if (a) AB_Account_SetOwnerName(a, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } /* get currency */ s=GWEN_Dialog_GetCharProperty(dlg, "currencyEdit", GWEN_DialogProperty_Value, 0, NULL); if (a && s && *s) AB_Account_SetCurrency(a, s); i=GWEN_Dialog_GetIntProperty(dlg, "accountTypeCombo", GWEN_DialogProperty_Value, 0, 0); if (a) AB_Account_SetAccountType(a, i); /* get country */ s=GWEN_Dialog_GetCharProperty(dlg, "countryEdit", GWEN_DialogProperty_Value, 0, NULL); if (a && s && *s) AB_Account_SetCountry(a, s); s=GWEN_Dialog_GetCharProperty(dlg, "bankCodeEdit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) { GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(tbuf, s); GWEN_Text_CondenseBuffer(tbuf); removeAllSpaces((uint8_t *)GWEN_Buffer_GetStart(tbuf)); if (a) AB_Account_SetBankCode(a, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } s=GWEN_Dialog_GetCharProperty(dlg, "bankNameEdit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) { GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(tbuf, s); GWEN_Text_CondenseBuffer(tbuf); if (a) AB_Account_SetBankName(a, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } s=GWEN_Dialog_GetCharProperty(dlg, "bicEdit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) { GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(tbuf, s); GWEN_Text_CondenseBuffer(tbuf); removeAllSpaces((uint8_t *)GWEN_Buffer_GetStart(tbuf)); if (a) AB_Account_SetBic(a, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } if (a) { uint32_t uid; uid=AB_EditAccountDialog_GetCurrentUserId(dlg); if (uid) AB_Account_SetUserId(a, uid); else { DBG_ERROR(AQBANKING_LOGDOMAIN, "No user selected."); return GWEN_ERROR_INVALID; } } return 0; } void AB_EditAccountDialog_Fini(GWEN_DIALOG *dlg) { AB_EDIT_ACCOUNT_DIALOG *xdlg; int i; GWEN_DB_NODE *dbPrefs; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AB_EDIT_ACCOUNT_DIALOG, dlg); assert(xdlg); dbPrefs=GWEN_Dialog_GetPreferences(dlg); /* store dialog width */ i=GWEN_Dialog_GetIntProperty(dlg, "", GWEN_DialogProperty_Width, 0, -1); GWEN_DB_SetIntValue(dbPrefs, GWEN_DB_FLAGS_OVERWRITE_VARS, "dialog_width", i); /* store dialog height */ i=GWEN_Dialog_GetIntProperty(dlg, "", GWEN_DialogProperty_Height, 0, -1); GWEN_DB_SetIntValue(dbPrefs, GWEN_DB_FLAGS_OVERWRITE_VARS, "dialog_height", i); } int AB_EditAccountDialog_HandleActivatedBankCode(GWEN_DIALOG *dlg) { AB_EDIT_ACCOUNT_DIALOG *xdlg; GWEN_DIALOG *dlg2; int rv; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AB_EDIT_ACCOUNT_DIALOG, dlg); assert(xdlg); dlg2=AB_SelectBankInfoDialog_new(xdlg->banking, "de", NULL); if (dlg2==NULL) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Could not create dialog"); return GWEN_DialogEvent_ResultHandled; } rv=GWEN_Gui_ExecDialog(dlg2, 0); if (rv==0) { /* rejected */ GWEN_Dialog_free(dlg2); return GWEN_DialogEvent_ResultHandled; } else { const AB_BANKINFO *bi; bi=AB_SelectBankInfoDialog_GetSelectedBankInfo(dlg2); if (bi) { const char *s; s=AB_BankInfo_GetBankId(bi); GWEN_Dialog_SetCharProperty(dlg, "bankCodeEdit", GWEN_DialogProperty_Value, 0, (s && *s)?s:"", 0); s=AB_BankInfo_GetBankName(bi); GWEN_Dialog_SetCharProperty(dlg, "bankNameEdit", GWEN_DialogProperty_Value, 0, (s && *s)?s:"", 0); s=AB_BankInfo_GetBic(bi); GWEN_Dialog_SetCharProperty(dlg, "bicEdit", GWEN_DialogProperty_Value, 0, (s && *s)?s:"", 0); } } GWEN_Dialog_free(dlg2); return GWEN_DialogEvent_ResultHandled; } int AB_EditAccountDialog_HandleActivatedOk(GWEN_DIALOG *dlg) { AB_EDIT_ACCOUNT_DIALOG *xdlg; int rv; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AB_EDIT_ACCOUNT_DIALOG, dlg); assert(xdlg); rv=AB_EditAccountDialog_fromGui(dlg, NULL, 0); if (rv<0) { return GWEN_DialogEvent_ResultHandled; } if (xdlg->doLock) { int rv; rv=AB_Provider_BeginExclUseAccount(xdlg->provider, xdlg->account); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); GWEN_Gui_MessageBox(GWEN_GUI_MSG_FLAGS_SEVERITY_NORMAL | GWEN_GUI_MSG_FLAGS_TYPE_ERROR | GWEN_GUI_MSG_FLAGS_CONFIRM_B1, I18N("Error"), I18N("Unable to lock account. Maybe already in use?"), I18N("Dismiss"), NULL, NULL, 0); return GWEN_DialogEvent_ResultHandled; } } AB_EditAccountDialog_fromGui(dlg, xdlg->account, 1); if (xdlg->doLock) { int rv; rv=AB_Provider_EndExclUseAccount(xdlg->provider, xdlg->account, 0); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); GWEN_Gui_MessageBox(GWEN_GUI_MSG_FLAGS_SEVERITY_NORMAL | GWEN_GUI_MSG_FLAGS_TYPE_ERROR | GWEN_GUI_MSG_FLAGS_CONFIRM_B1, I18N("Error"), I18N("Unable to unlock account."), I18N("Dismiss"), NULL, NULL, 0); AB_Provider_EndExclUseAccount(xdlg->provider, xdlg->account, 1); return GWEN_DialogEvent_ResultHandled; } } rv=AB_Provider_WriteAccountSpecForAccount(xdlg->provider, xdlg->account, 1); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); GWEN_Gui_MessageBox(GWEN_GUI_MSG_FLAGS_SEVERITY_NORMAL | GWEN_GUI_MSG_FLAGS_TYPE_ERROR | GWEN_GUI_MSG_FLAGS_CONFIRM_B1, I18N("Error"), I18N("Unable to update account spec."), I18N("Dismiss"), NULL, NULL, 0); } return GWEN_DialogEvent_ResultAccept; } int AB_EditAccountDialog_HandleActivated(GWEN_DIALOG *dlg, const char *sender) { if (strcasecmp(sender, "bankCodeButton")==0) return AB_EditAccountDialog_HandleActivatedBankCode(dlg); else if (strcasecmp(sender, "okButton")==0) return AB_EditAccountDialog_HandleActivatedOk(dlg); else if (strcasecmp(sender, "abortButton")==0) return GWEN_DialogEvent_ResultReject; else if (strcasecmp(sender, "helpButton")==0) { /* TODO: open a help dialog */ } return GWEN_DialogEvent_ResultNotHandled; } int GWENHYWFAR_CB AB_EditAccountDialog_SignalHandler(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender) { AB_EDIT_ACCOUNT_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AB_EDIT_ACCOUNT_DIALOG, dlg); assert(xdlg); switch (t) { case GWEN_DialogEvent_TypeInit: AB_EditAccountDialog_Init(dlg); return GWEN_DialogEvent_ResultHandled;; case GWEN_DialogEvent_TypeFini: AB_EditAccountDialog_Fini(dlg); return GWEN_DialogEvent_ResultHandled;; case GWEN_DialogEvent_TypeValueChanged: DBG_NOTICE(0, "ValueChanged: %s", sender); return GWEN_DialogEvent_ResultHandled;; case GWEN_DialogEvent_TypeActivated: return AB_EditAccountDialog_HandleActivated(dlg, sender); case GWEN_DialogEvent_TypeEnabled: case GWEN_DialogEvent_TypeDisabled: case GWEN_DialogEvent_TypeClose: case GWEN_DialogEvent_TypeLast: default: return GWEN_DialogEvent_ResultNotHandled; } return GWEN_DialogEvent_ResultNotHandled; } aqbanking-6.6.1/src/libs/aqbanking/dialogs/dlg_edituser.dlg0000664000175000017500000000411714043610744020647 00000000000000 aqbanking-6.6.1/src/libs/aqbanking/dialogs/w_importerlist.h0000664000175000017500000000425414300721174020737 00000000000000/*************************************************************************** begin : Tue Feb 10 2010 copyright : (C) 2022 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQBANKING_W_IMPORTERLIST_H #define AQBANKING_W_IMPORTERLIST_H #include #include /** @name Helper Functions for Lists of Im-/Exporters * */ /*@{*/ /** * Init widget by setting header text for the supported columns and set selection mode to GWEN_Dialog_SelectionMode_Single. * * @param dlg dialog of which the widget is part * @param widgetName name of the widget in the dialog to work on */ void AB_ImporterListWidget_Init(GWEN_DIALOG *dlg, const char *widgetName); /** * Update the list of importer shown in this widget. * * This function retrieves the list of all import modules and adds entries for every one of them. * Keeps the currently selected profile. * * @param dlg dialog of which the widget is part * @param importerName name of the widget in the dialog to work on * @param banking pointer to used AqBanking object */ void AB_ImporterListWidget_UpdateList(GWEN_DIALOG *dlg, const char *widgetName, AB_BANKING *banking); /** * Select the given importer. * * @param dlg dialog of which the widget is part * @param widgetName name of the widget in the dialog to work on * @param importerName name of the profile to select */ void AB_ImporterListWidget_SelectImporter(GWEN_DIALOG *dlg, const char *widgetName, const char *importerName); /** * Get the name of the currently selected profile. * * @return new string containing the name of the selected profile (needs to be free'd) or NULL if none selected * @param dlg dialog of which the widget is part * @param widgetName name of the widget in the dialog to work on */ char *AB_ImporterListWidget_GetSelectedImporter(GWEN_DIALOG *dlg, const char *widgetName); /*@}*/ #endif aqbanking-6.6.1/src/libs/aqbanking/dialogs/dlg_setup_newuser.h0000664000175000017500000000224114043610744021410 00000000000000/*************************************************************************** begin : Fri Jul 30 2010 copyright : (C) 2018 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQBANKING_DLG_SETUP_NEWUSER_H #define AQBANKING_DLG_SETUP_NEWUSER_H #include #include /** @defgroup G_AB_DIALOGS_SETUP_NEWUSER Generic New User Dialog * @ingroup G_AB_DIALOGS * */ /*@{*/ #ifdef __cplusplus extern "C" { #endif /** * Creates a user creation assistent. * * @return pointer to the created dialog. * * @param banking pointer to the AqBanking object */ GWEN_DIALOG *AB_SetupNewUserDialog_new(AB_BANKING *ab); const char *AB_SetupNewUserDialog_GetSelectedBackend(const GWEN_DIALOG *dlg); int AB_SetupNewUserDialog_GetSelectedType(const GWEN_DIALOG *dlg); #ifdef __cplusplus } #endif /*@}*/ #endif aqbanking-6.6.1/src/libs/aqbanking/dialogs/dlg_setup.dlg0000664000175000017500000000463214043610744020165 00000000000000 aqbanking-6.6.1/src/libs/aqbanking/dialogs/dlg_setup.c0000664000175000017500000010643114377702650017651 00000000000000/*************************************************************************** begin : Wed Apr 14 2010 copyright : (C) 2018 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "dlg_setup_p.h" #include "aqbanking/i18n_l.h" #include "aqbanking/backendsupport/user.h" #include "aqbanking/dialogs/dlg_selectbackend.h" #include "aqbanking/dialogs/dlg_editaccount.h" #include "aqbanking/dialogs/dlg_edituser.h" #include "aqbanking/dialogs/dlg_setup_newuser.h" #include #include #include #include #include #include #define DIALOG_MINWIDTH 400 #define DIALOG_MINHEIGHT 100 #define USER_LIST_MINCOLWIDTH 50 #define ACCOUNT_LIST_MINCOLWIDTH 50 GWEN_INHERIT(GWEN_DIALOG, AB_SETUP_DIALOG) GWEN_DIALOG *AB_SetupDialog_new(AB_BANKING *ab) { GWEN_DIALOG *dlg; AB_SETUP_DIALOG *xdlg; dlg=GWEN_Dialog_CreateAndLoadWithPath("ab_setup", AB_PM_LIBNAME, AB_PM_DATADIR, "aqbanking/dialogs/dlg_setup.dlg"); if (dlg==NULL) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Could not create dialog \"ab_setup\"."); return NULL; } GWEN_NEW_OBJECT(AB_SETUP_DIALOG, xdlg); GWEN_INHERIT_SETDATA(GWEN_DIALOG, AB_SETUP_DIALOG, dlg, xdlg, AB_SetupDialog_FreeData); GWEN_Dialog_SetSignalHandler(dlg, AB_SetupDialog_SignalHandler); xdlg->banking=ab; /* done */ return dlg; } void GWENHYWFAR_CB AB_SetupDialog_FreeData(void *bp, void *p) { AB_SETUP_DIALOG *xdlg; xdlg=(AB_SETUP_DIALOG *) p; AB_User_List_free(xdlg->currentUserList); AB_Account_List_free(xdlg->currentAccountList); AB_Provider_List2_free(xdlg->providersInUse); GWEN_FREE_OBJECT(xdlg); } static void createUserListBoxString(const AB_USER *u, GWEN_BUFFER *tbuf) { const char *s; char numbuf[32]; uint32_t uid; /* column 1 */ uid=AB_User_GetUniqueId(u); snprintf(numbuf, sizeof(numbuf)-1, "%09d", uid); numbuf[sizeof(numbuf)-1]=0; GWEN_Buffer_AppendString(tbuf, numbuf); GWEN_Buffer_AppendString(tbuf, "\t"); /* column 2 */ s=AB_User_GetBankCode(u); if (s && *s) GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "\t"); /* column 3 */ s=AB_User_GetUserId(u); if (s && *s) GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "\t"); /* column 4 */ s=AB_User_GetCustomerId(u); if (s && *s) GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "\t"); /* column 5 */ s=AB_User_GetUserName(u); if (s && *s) GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "\t"); /* column 6 */ s=AB_User_GetBackendName(u); if (s && *s) GWEN_Buffer_AppendString(tbuf, s); } static void createAccountListBoxString(const AB_ACCOUNT *a, GWEN_BUFFER *tbuf) { const char *s; char numbuf[32]; uint32_t uid; /* column 1 */ uid=AB_Account_GetUniqueId(a); snprintf(numbuf, sizeof(numbuf)-1, "%09d", uid); numbuf[sizeof(numbuf)-1]=0; GWEN_Buffer_AppendString(tbuf, numbuf); GWEN_Buffer_AppendString(tbuf, "\t"); /* column 2 */ s=AB_Account_GetBankCode(a); if (s && *s) GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "\t"); /* column 3 */ s=AB_Account_GetBankName(a); if (s && *s) GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "\t"); /* column 4 */ s=AB_Account_GetAccountNumber(a); if (s && *s) GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "\t"); /* column 5 */ s=AB_Account_GetAccountName(a); if (s && *s) GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "\t"); /* column 6 */ s=AB_Account_GetOwnerName(a); if (s && *s) GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "\t"); /* column 7 */ s=AB_Account_GetBackendName(a); if (s && *s) GWEN_Buffer_AppendString(tbuf, s); } uint32_t AB_SetupDialog_GetCurrentId(GWEN_DIALOG *dlg, const char *comboBoxName) { int idx; idx=GWEN_Dialog_GetIntProperty(dlg, comboBoxName, GWEN_DialogProperty_Value, 0, -1); if (idx>=0) { const char *currentText; currentText=GWEN_Dialog_GetCharProperty(dlg, comboBoxName, GWEN_DialogProperty_Value, idx, NULL); if (currentText && *currentText) { unsigned long int uid=0; if (1==sscanf(currentText, "%09lu", &uid)) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Got id \"%lu id from \"%s\"", uid, currentText); return (uint32_t) uid; } else { DBG_ERROR(AQBANKING_LOGDOMAIN, "No id found in \"%s\"", currentText); } } } return 0; } uint32_t AB_SetupDialog_GetCurrentUserId(GWEN_DIALOG *dlg) { return AB_SetupDialog_GetCurrentId(dlg, "userListBox"); } uint32_t AB_SetupDialog_GetCurrentAccountId(GWEN_DIALOG *dlg) { return AB_SetupDialog_GetCurrentId(dlg, "accountListBox"); } int AB_SetupDialog_UserChanged(GWEN_DIALOG *dlg) { AB_SETUP_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AB_SETUP_DIALOG, dlg); assert(xdlg); return GWEN_DialogEvent_ResultHandled; } int AB_SetupDialog_AccountChanged(GWEN_DIALOG *dlg) { AB_SETUP_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AB_SETUP_DIALOG, dlg); assert(xdlg); return GWEN_DialogEvent_ResultHandled; } static void AB_SetupDialog_ActivateProviders(GWEN_DIALOG *dlg) { AB_SETUP_DIALOG *xdlg; GWEN_PLUGIN_DESCRIPTION_LIST2 *pdl; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AB_SETUP_DIALOG, dlg); assert(xdlg); if (xdlg->providersInUse) AB_Provider_List2_free(xdlg->providersInUse); xdlg->providersInUse=AB_Provider_List2_new(); pdl=AB_Banking_GetProviderDescrs(xdlg->banking); if (pdl) { GWEN_PLUGIN_DESCRIPTION_LIST2_ITERATOR *it; it=GWEN_PluginDescription_List2_First(pdl); if (it) { GWEN_PLUGIN_DESCRIPTION *pd; pd=GWEN_PluginDescription_List2Iterator_Data(it); while (pd) { const char *pName; pName=GWEN_PluginDescription_GetName(pd); if (pName && *pName) { AB_PROVIDER *pro; pro=AB_Banking_BeginUseProvider(xdlg->banking, pName); if (pro) { DBG_INFO(AQBANKING_LOGDOMAIN, "Adding provider %s", pName); AB_Provider_List2_PushBack(xdlg->providersInUse, pro); } else { DBG_INFO(AQBANKING_LOGDOMAIN, "Provider %s not available", pName); } } pd=GWEN_PluginDescription_List2Iterator_Next(it); } GWEN_PluginDescription_List2Iterator_free(it); } GWEN_PluginDescription_List2_freeAll(pdl); } } static void AB_SetupDialog_DeactivateProviders(GWEN_DIALOG *dlg) { AB_SETUP_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AB_SETUP_DIALOG, dlg); assert(xdlg); if (xdlg->providersInUse) { AB_PROVIDER_LIST2_ITERATOR *it; it=AB_Provider_List2_First(xdlg->providersInUse); if (it) { AB_PROVIDER *pro; pro=AB_Provider_List2Iterator_Data(it); while (pro) { AB_Banking_EndUseProvider(xdlg->banking, pro); pro=AB_Provider_List2Iterator_Next(it); } AB_Provider_List2Iterator_free(it); } AB_Provider_List2_free(xdlg->providersInUse); xdlg->providersInUse=NULL; } } static AB_PROVIDER *AB_SetupDialog_GetProviderByName(GWEN_DIALOG *dlg, const char *pName) { AB_SETUP_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AB_SETUP_DIALOG, dlg); assert(xdlg); if (xdlg->providersInUse) { AB_PROVIDER_LIST2_ITERATOR *it; it=AB_Provider_List2_First(xdlg->providersInUse); if (it) { AB_PROVIDER *pro; pro=AB_Provider_List2Iterator_Data(it); while (pro) { const char *s; s=AB_Provider_GetName(pro); if (s && *s && strcasecmp(pName, s)==0) { AB_Provider_List2Iterator_free(it); return pro; } pro=AB_Provider_List2Iterator_Next(it); } AB_Provider_List2Iterator_free(it); } } return NULL; } static void AB_SetupDialog_LoadUsers(GWEN_DIALOG *dlg, AB_USER_LIST *ul) { AB_SETUP_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AB_SETUP_DIALOG, dlg); assert(xdlg); if (xdlg->providersInUse) { AB_PROVIDER_LIST2_ITERATOR *it; it=AB_Provider_List2_First(xdlg->providersInUse); if (it) { AB_PROVIDER *pro; pro=AB_Provider_List2Iterator_Data(it); while (pro) { int rv; rv=AB_Provider_ReadUsers(pro, ul); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "Error reading users from backends \"%s\": %d", AB_Provider_GetName(pro), rv); } pro=AB_Provider_List2Iterator_Next(it); } AB_Provider_List2Iterator_free(it); } } } static void AB_SetupDialog_LoadAccounts(GWEN_DIALOG *dlg, AB_ACCOUNT_LIST *al) { AB_SETUP_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AB_SETUP_DIALOG, dlg); assert(xdlg); if (xdlg->providersInUse) { AB_PROVIDER_LIST2_ITERATOR *it; it=AB_Provider_List2_First(xdlg->providersInUse); if (it) { AB_PROVIDER *pro; pro=AB_Provider_List2Iterator_Data(it); while (pro) { int rv; rv=AB_Provider_ReadAccounts(pro, al); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "Error reading accounts from backends \"%s\": %d", AB_Provider_GetName(pro), rv); } pro=AB_Provider_List2Iterator_Next(it); } AB_Provider_List2Iterator_free(it); } } } static void AB_SetupDialog_Reload(GWEN_DIALOG *dlg) { AB_SETUP_DIALOG *xdlg; AB_USER *u; AB_ACCOUNT *a; int i; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AB_SETUP_DIALOG, dlg); assert(xdlg); /* user list */ i=0; GWEN_Dialog_SetIntProperty(dlg, "userListBox", GWEN_DialogProperty_ClearValues, 0, 0, 0); if (xdlg->currentUserList) AB_User_List_free(xdlg->currentUserList); xdlg->currentUserList=AB_User_List_new(); AB_SetupDialog_LoadUsers(dlg, xdlg->currentUserList); if (AB_User_List_GetCount(xdlg->currentUserList)) { GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 256, 0, 1); u=AB_User_List_First(xdlg->currentUserList); while (u) { createUserListBoxString(u, tbuf); GWEN_Dialog_SetCharProperty(dlg, "userListBox", GWEN_DialogProperty_AddValue, 0, GWEN_Buffer_GetStart(tbuf), 0); i++; GWEN_Buffer_Reset(tbuf); u=AB_User_List_Next(u); } GWEN_Buffer_free(tbuf); } /* if user list not empty */ GWEN_Dialog_SetIntProperty(dlg, "userListBox", GWEN_DialogProperty_Sort, 0, 0, 0); if (i) GWEN_Dialog_SetIntProperty(dlg, "userListBox", GWEN_DialogProperty_Value, 0, 0, 0); /* account list */ i=0; GWEN_Dialog_SetIntProperty(dlg, "accountListBox", GWEN_DialogProperty_ClearValues, 0, 0, 0); if (xdlg->currentAccountList) AB_Account_List_free(xdlg->currentAccountList); xdlg->currentAccountList=AB_Account_List_new(); AB_SetupDialog_LoadAccounts(dlg, xdlg->currentAccountList); if (AB_Account_List_GetCount(xdlg->currentAccountList)) { GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 256, 0, 1); a=AB_Account_List_First(xdlg->currentAccountList); while (a) { createAccountListBoxString(a, tbuf); GWEN_Dialog_SetCharProperty(dlg, "accountListBox", GWEN_DialogProperty_AddValue, 0, GWEN_Buffer_GetStart(tbuf), 0); i++; GWEN_Buffer_Reset(tbuf); a=AB_Account_List_Next(a); } GWEN_Buffer_free(tbuf); } /* if account list not empty */ GWEN_Dialog_SetIntProperty(dlg, "accountListBox", GWEN_DialogProperty_Sort, 0, 0, 0); if (i) GWEN_Dialog_SetIntProperty(dlg, "accountListBox", GWEN_DialogProperty_Value, 0, 0, 0); AB_SetupDialog_UserChanged(dlg); AB_SetupDialog_AccountChanged(dlg); } void AB_SetupDialog_Init(GWEN_DIALOG *dlg) { AB_SETUP_DIALOG *xdlg; GWEN_DB_NODE *dbPrefs; int i; int j; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AB_SETUP_DIALOG, dlg); assert(xdlg); dbPrefs=GWEN_Dialog_GetPreferences(dlg); GWEN_Dialog_SetCharProperty(dlg, "", GWEN_DialogProperty_Title, 0, I18N("AqBanking Setup"), 0); /* user list */ GWEN_Dialog_SetCharProperty(dlg, "userListBox", GWEN_DialogProperty_Title, 0, I18N("Id\tBank Code\tUser Id\tCustomer Id\tUser Name\tModule"), 0); GWEN_Dialog_SetIntProperty(dlg, "userListBox", GWEN_DialogProperty_SelectionMode, 0, GWEN_Dialog_SelectionMode_Single, 0); /* account list */ GWEN_Dialog_SetCharProperty(dlg, "accountListBox", GWEN_DialogProperty_Title, 0, I18N("Id\tBank Code\tBank Name\tAccount Number\tAccount Name\tOwner Name\tModule"), 0); GWEN_Dialog_SetIntProperty(dlg, "accountListBox", GWEN_DialogProperty_SelectionMode, 0, GWEN_Dialog_SelectionMode_Single, 0); /* read width */ i=GWEN_DB_GetIntValue(dbPrefs, "dialog_width", 0, -1); if (i>=DIALOG_MINWIDTH) GWEN_Dialog_SetIntProperty(dlg, "", GWEN_DialogProperty_Width, 0, i, 0); /* read height */ i=GWEN_DB_GetIntValue(dbPrefs, "dialog_height", 0, -1); if (i>=DIALOG_MINHEIGHT) GWEN_Dialog_SetIntProperty(dlg, "", GWEN_DialogProperty_Height, 0, i, 0); /* read user column widths */ for (i=0; i<6; i++) { j=GWEN_DB_GetIntValue(dbPrefs, "user_list_columns", i, -1); if (j=0 && j>=0) GWEN_Dialog_SetIntProperty(dlg, "userListBox", GWEN_DialogProperty_SortDirection, i, j, 0); /* read account column widths */ for (i=0; i<7; i++) { j=GWEN_DB_GetIntValue(dbPrefs, "account_list_columns", i, -1); if (j=0 && j>=0) GWEN_Dialog_SetIntProperty(dlg, "accountListBox", GWEN_DialogProperty_SortDirection, i, j, 0); /* activate providers */ AB_SetupDialog_ActivateProviders(dlg); /* reload accounts and users */ AB_SetupDialog_Reload(dlg); } void AB_SetupDialog_Fini(GWEN_DIALOG *dlg) { AB_SETUP_DIALOG *xdlg; int i; GWEN_DB_NODE *dbPrefs; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AB_SETUP_DIALOG, dlg); assert(xdlg); /* deactivate providers */ AB_SetupDialog_DeactivateProviders(dlg); dbPrefs=GWEN_Dialog_GetPreferences(dlg); /* store dialog width */ i=GWEN_Dialog_GetIntProperty(dlg, "", GWEN_DialogProperty_Width, 0, -1); GWEN_DB_SetIntValue(dbPrefs, GWEN_DB_FLAGS_OVERWRITE_VARS, "dialog_width", i); /* store dialog height */ i=GWEN_Dialog_GetIntProperty(dlg, "", GWEN_DialogProperty_Height, 0, -1); GWEN_DB_SetIntValue(dbPrefs, GWEN_DB_FLAGS_OVERWRITE_VARS, "dialog_height", i); /* store column widths of user list */ GWEN_DB_DeleteVar(dbPrefs, "user_list_columns"); for (i=0; i<6; i++) { int j; j=GWEN_Dialog_GetIntProperty(dlg, "userListBox", GWEN_DialogProperty_ColumnWidth, i, -1); if (jcurrentUserList) { uint32_t uid; uid=AB_SetupDialog_GetCurrentUserId(dlg); if (uid) { AB_USER *u; u=AB_User_List_GetByUniqueId(xdlg->currentUserList, uid); if (u) { AB_PROVIDER *pro; uint32_t flags=0; GWEN_DIALOG *dlg2; int rv; pro=AB_User_GetProvider(u); assert(pro); /* get EditUser dialog */ flags=AB_Provider_GetFlags(pro); if (flags & AB_PROVIDER_FLAGS_HAS_EDITUSER_DIALOG) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Letting backend \"%s\" create dialog", AB_Provider_GetName(pro)); dlg2=AB_Provider_GetEditUserDialog(pro, u); } else { DBG_ERROR(AQBANKING_LOGDOMAIN, "Letting AqBanking create dialog"); dlg2=AB_EditUserDialog_new(pro, u, 1); } if (dlg2==NULL) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Could not create dialog"); return GWEN_DialogEvent_ResultHandled; } rv=GWEN_Gui_ExecDialog(dlg2, 0); if (rv==0) { /* rejected */ GWEN_Dialog_free(dlg2); return GWEN_DialogEvent_ResultHandled; } GWEN_Dialog_free(dlg2); /* reload */ AB_SetupDialog_Reload(dlg); } /* if u */ } /* if uid */ else { DBG_ERROR(AQBANKING_LOGDOMAIN, "No current user"); } } /* if xdlg->currentUserList */ return GWEN_DialogEvent_ResultHandled; } int AB_SetupDialog_AddUser(GWEN_DIALOG *dlg) { AB_SETUP_DIALOG *xdlg; GWEN_DIALOG *dlg2; int rv; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AB_SETUP_DIALOG, dlg); assert(xdlg); dlg2=AB_SetupNewUserDialog_new(xdlg->banking); if (dlg2==NULL) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Could not create dialog"); return GWEN_DialogEvent_ResultHandled; } rv=GWEN_Gui_ExecDialog(dlg2, 0); if (rv==0) { /* rejected */ GWEN_Dialog_free(dlg2); } else { const char *s; s=AB_SetupNewUserDialog_GetSelectedBackend(dlg2); if (s && *s) { AB_PROVIDER *pro; int selectedType; uint32_t flags; DBG_INFO(AQBANKING_LOGDOMAIN, "Selected provider [%s]", s); pro=AB_SetupDialog_GetProviderByName(dlg, s); if (pro==NULL) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Provider [%s] not found", s); GWEN_Dialog_free(dlg2); return GWEN_DialogEvent_ResultHandled; } selectedType=AB_SetupNewUserDialog_GetSelectedType(dlg2); GWEN_Dialog_free(dlg2); DBG_INFO(AQBANKING_LOGDOMAIN, "Selected type is %d", selectedType); flags=AB_Provider_GetFlags(pro); if (flags & AB_PROVIDER_FLAGS_HAS_NEWUSER_DIALOG) { GWEN_DIALOG *dlg3; int rv; dlg3=AB_Provider_GetNewUserDialog(pro, selectedType); if (dlg3==NULL) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Could not create dialog (type=%d)", selectedType); return GWEN_DialogEvent_ResultHandled; } rv=GWEN_Gui_ExecDialog(dlg3, 0); if (rv==0) { /* rejected */ GWEN_Dialog_free(dlg3); return GWEN_DialogEvent_ResultHandled; } GWEN_Dialog_free(dlg3); AB_SetupDialog_Reload(dlg); } else { GWEN_DIALOG *dlg3; AB_USER *u; const char *s; int rv; u=AB_Provider_CreateUserObject(pro); if (u==NULL) { DBG_INFO(AQBANKING_LOGDOMAIN, "No user created."); return GWEN_DialogEvent_ResultHandled; } s=GWEN_I18N_GetCurrentLocale(); if (s && *s) { if (strstr(s, "de_")) AB_User_SetCountry(u, "de"); else if (strstr(s, "us_")) AB_User_SetCountry(u, "us"); } dlg3=AB_EditUserDialog_new(pro, u, 0); if (dlg3==NULL) { DBG_INFO(AQBANKING_LOGDOMAIN, "Could not create dialog"); AB_User_free(u); return GWEN_DialogEvent_ResultHandled; } rv=GWEN_Gui_ExecDialog(dlg3, 0); if (rv==0) { /* rejected */ GWEN_Dialog_free(dlg3); AB_User_free(u); return GWEN_DialogEvent_ResultHandled; } GWEN_Dialog_free(dlg3); rv=AB_Provider_AddUser(pro, u); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); AB_User_free(u); return GWEN_DialogEvent_ResultHandled; } AB_User_free(u); AB_SetupDialog_Reload(dlg); } } else { GWEN_Dialog_free(dlg2); return GWEN_DialogEvent_ResultHandled; } } return GWEN_DialogEvent_ResultHandled; } int AB_SetupDialog_DelUser(GWEN_DIALOG *dlg) { AB_SETUP_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AB_SETUP_DIALOG, dlg); assert(xdlg); if (xdlg->currentUserList) { uint32_t uid; uid=AB_SetupDialog_GetCurrentUserId(dlg); if (uid) { AB_USER *u; u=AB_User_List_GetByUniqueId(xdlg->currentUserList, uid); if (u) { AB_ACCOUNT *a; uint32_t aid; int rv; char nbuf[512]; snprintf(nbuf, sizeof(nbuf)-1, I18N("" "

Do you really want to delete the user %s?" "" "Do you really want to delete the user \"%s\"?"), AB_User_GetUserId(u), AB_User_GetUserId(u)); nbuf[sizeof(nbuf)-1]=0; rv=GWEN_Gui_MessageBox(GWEN_GUI_MSG_FLAGS_TYPE_WARN | GWEN_GUI_MSG_FLAGS_SEVERITY_DANGEROUS, I18N("Delete User"), nbuf, I18N("Yes"), I18N("No"), NULL, 0); if (rv!=1) { DBG_INFO(AQBANKING_LOGDOMAIN, "Aborted by user"); return GWEN_DialogEvent_ResultHandled; } xdlg->currentAccountList=AB_Account_List_new(); AB_SetupDialog_LoadAccounts(dlg, xdlg->currentAccountList); if (AB_Account_List_GetCount(xdlg->currentAccountList)) { a=AB_Account_List_First(xdlg->currentAccountList); while (a) { if (AB_Account_GetUserId(a) == uid) { aid=AB_Account_GetUniqueId(a); rv=GWEN_Gui_MessageBox(GWEN_GUI_MSG_FLAGS_TYPE_ERROR | GWEN_GUI_MSG_FLAGS_SEVERITY_DANGEROUS, I18N("Error"), I18N("" "

There is at least one account assigned to the selected user.

" "

Do you want to remove the account(s) and continue removing the user?

" "" "There is at least one account assigned to the selected user.\n" "Do you want to remove the account(s) and continue removing the user?"), I18N("Yes"), I18N("No"), NULL, 0); if (rv!=1) { DBG_INFO(AQBANKING_LOGDOMAIN, "Aborted by user"); return GWEN_DialogEvent_ResultHandled; } rv=AB_Provider_DeleteAccount(AB_Account_GetProvider(a), aid); if (rv<0) { GWEN_Gui_ShowError(I18N("Error"), I18N("Error deleting account: %d (%d deleted)"), rv, aid); AB_SetupDialog_Reload(dlg); return GWEN_DialogEvent_ResultHandled; } } a=AB_Account_List_Next(a); } } /* now delete the user */ rv=AB_Provider_DeleteUser(AB_User_GetProvider(u), uid); if (rv<0) { GWEN_Gui_ShowError(I18N("Error"), I18N("Error deleting user: %d"), rv); AB_SetupDialog_Reload(dlg); return GWEN_DialogEvent_ResultHandled; } } /* if u */ } /* if uid */ AB_SetupDialog_Reload(dlg); } /* if currentUserList */ return GWEN_DialogEvent_ResultHandled; } int AB_SetupDialog_EditAccount(GWEN_DIALOG *dlg) { AB_SETUP_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AB_SETUP_DIALOG, dlg); assert(xdlg); if (xdlg->currentAccountList) { uint32_t aid; aid=AB_SetupDialog_GetCurrentAccountId(dlg); if (aid) { AB_ACCOUNT *a; a=AB_Account_List_GetByUniqueId(xdlg->currentAccountList, aid); if (a) { AB_PROVIDER *pro; uint32_t flags=0; GWEN_DIALOG *dlg2; int rv; pro=AB_Account_GetProvider(a); assert(pro); flags=AB_Provider_GetFlags(pro); if (flags & AB_PROVIDER_FLAGS_HAS_EDITACCOUNT_DIALOG) dlg2=AB_Provider_GetEditAccountDialog(pro, a); else dlg2=AB_EditAccountDialog_new(pro, a, 1); if (dlg2==NULL) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Could not create dialog"); return GWEN_DialogEvent_ResultHandled; } rv=GWEN_Gui_ExecDialog(dlg2, 0); if (rv==0) { /* rejected */ GWEN_Dialog_free(dlg2); return GWEN_DialogEvent_ResultHandled; } GWEN_Dialog_free(dlg2); AB_SetupDialog_Reload(dlg); } /* if a */ } /* if aid */ else { DBG_ERROR(AQBANKING_LOGDOMAIN, "No current account"); } } /* if xdlg->currentAccountList */ return GWEN_DialogEvent_ResultHandled; } int AB_SetupDialog_AddAccount(GWEN_DIALOG *dlg) { AB_SETUP_DIALOG *xdlg; AB_PROVIDER *pro; const char *s; const char *initialProvider=NULL; uint32_t flags; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AB_SETUP_DIALOG, dlg); assert(xdlg); s=GWEN_I18N_GetCurrentLocale(); if (s && *s) { if (strstr(s, "de_")) initialProvider="aqhbci"; else initialProvider="aqofxconnect"; } pro=AB_SelectBackend(xdlg->banking, initialProvider, I18N("Please select the online banking backend the new " "account is to be created for.")); if (pro==NULL) { DBG_ERROR(0, "No provider selected."); return GWEN_DialogEvent_ResultHandled; } flags=AB_Provider_GetFlags(pro); if (flags & AB_PROVIDER_FLAGS_HAS_NEWACCOUNT_DIALOG) { GWEN_DIALOG *dlg2; int rv; dlg2=AB_Provider_GetNewAccountDialog(pro); if (dlg2==NULL) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Could not create dialog"); return GWEN_DialogEvent_ResultHandled; } rv=GWEN_Gui_ExecDialog(dlg2, 0); if (rv==0) { /* rejected */ GWEN_Dialog_free(dlg2); AB_Banking_EndUseProvider(xdlg->banking, pro); return GWEN_DialogEvent_ResultHandled; } GWEN_Dialog_free(dlg2); AB_Banking_EndUseProvider(xdlg->banking, pro); AB_SetupDialog_Reload(dlg); } else { GWEN_DIALOG *dlg2; AB_ACCOUNT *a; const char *s; int rv; a=AB_Provider_CreateAccountObject(pro); if (a==NULL) { DBG_INFO(AQBANKING_LOGDOMAIN, "No account created."); AB_Banking_EndUseProvider(xdlg->banking, pro); return GWEN_DialogEvent_ResultHandled; } s=GWEN_I18N_GetCurrentLocale(); if (s && *s) { if (strstr(s, "de_")) { AB_Account_SetCountry(a, "de"); AB_Account_SetCurrency(a, "EUR"); } else if (strstr(s, "us_")) { AB_Account_SetCountry(a, "us"); AB_Account_SetCurrency(a, "USD"); } } dlg2=AB_EditAccountDialog_new(pro, a, 0); if (dlg2==NULL) { DBG_INFO(AQBANKING_LOGDOMAIN, "Could not create dialog"); AB_Account_free(a); AB_Banking_EndUseProvider(xdlg->banking, pro); return GWEN_DialogEvent_ResultHandled; } rv=GWEN_Gui_ExecDialog(dlg2, 0); if (rv==0) { /* rejected */ GWEN_Dialog_free(dlg2); AB_Account_free(a); AB_Banking_EndUseProvider(xdlg->banking, pro); return GWEN_DialogEvent_ResultHandled; } GWEN_Dialog_free(dlg2); rv=AB_Provider_AddAccount(pro, a, 1); /* do lock corresponding user */ if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); AB_Account_free(a); return GWEN_DialogEvent_ResultHandled; } AB_Account_free(a); AB_Banking_EndUseProvider(xdlg->banking, pro); AB_SetupDialog_Reload(dlg); } return GWEN_DialogEvent_ResultHandled; } int AB_SetupDialog_DelAccount(GWEN_DIALOG *dlg) { AB_SETUP_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AB_SETUP_DIALOG, dlg); assert(xdlg); if (xdlg->currentAccountList) { uint32_t aid; aid=AB_SetupDialog_GetCurrentAccountId(dlg); if (aid) { AB_ACCOUNT *a; a=AB_Account_List_GetByUniqueId(xdlg->currentAccountList, aid); if (a) { int rv; char nbuf[512]; char ibuf[32]; const char *an; an=AB_Account_GetAccountName(a); if (!(an && *an)) an=AB_Account_GetAccountNumber(a); if (!(an && *an)) { snprintf(ibuf, sizeof(ibuf)-1, "%d", (int) AB_Account_GetUniqueId(a)); ibuf[sizeof(ibuf)-1]=0; an=ibuf; } snprintf(nbuf, sizeof(nbuf)-1, I18N("" "

Do you really want to delete the account %s?" "" "Do you really want to delete the account \"%s\"?"), an, an); nbuf[sizeof(nbuf)-1]=0; rv=GWEN_Gui_MessageBox(GWEN_GUI_MSG_FLAGS_TYPE_WARN | GWEN_GUI_MSG_FLAGS_SEVERITY_DANGEROUS, I18N("Delete Account"), nbuf, I18N("Yes"), I18N("No"), NULL, 0); if (rv!=1) { DBG_INFO(AQBANKING_LOGDOMAIN, "Aborted by user"); return GWEN_DialogEvent_ResultHandled; } rv=AB_Provider_DeleteAccount(AB_Account_GetProvider(a), aid); if (rv<0) { GWEN_Gui_ShowError(I18N("Error"), I18N("Error deleting account: %d"), rv); AB_SetupDialog_Reload(dlg); return GWEN_DialogEvent_ResultHandled; } AB_SetupDialog_Reload(dlg); } /* if a */ } /* if aid */ } /* if xdlg->currentAccountList */ return GWEN_DialogEvent_ResultHandled; } int AB_SetupDialog_HandleActivated(GWEN_DIALOG *dlg, const char *sender) { DBG_NOTICE(0, "Activated: %s", sender); if (strcasecmp(sender, "closeButton")==0) return GWEN_DialogEvent_ResultAccept; else if (strcasecmp(sender, "editUserButton")==0) return AB_SetupDialog_EditUser(dlg); else if (strcasecmp(sender, "addUserButton")==0) return AB_SetupDialog_AddUser(dlg); else if (strcasecmp(sender, "delUserButton")==0) return AB_SetupDialog_DelUser(dlg); else if (strcasecmp(sender, "editAccountButton")==0) return AB_SetupDialog_EditAccount(dlg); else if (strcasecmp(sender, "addAccountButton")==0) return AB_SetupDialog_AddAccount(dlg); else if (strcasecmp(sender, "delAccountButton")==0) return AB_SetupDialog_DelAccount(dlg); else if (strcasecmp(sender, "userListBox")==0) return AB_SetupDialog_UserChanged(dlg); else if (strcasecmp(sender, "accountListBox")==0) return AB_SetupDialog_AccountChanged(dlg); else if (strcasecmp(sender, "helpButton")==0) { /* TODO: open a help dialog */ } return GWEN_DialogEvent_ResultNotHandled; } int GWENHYWFAR_CB AB_SetupDialog_SignalHandler(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender) { AB_SETUP_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AB_SETUP_DIALOG, dlg); assert(xdlg); switch (t) { case GWEN_DialogEvent_TypeInit: AB_SetupDialog_Init(dlg); return GWEN_DialogEvent_ResultHandled;; case GWEN_DialogEvent_TypeFini: AB_SetupDialog_Fini(dlg); return GWEN_DialogEvent_ResultHandled;; case GWEN_DialogEvent_TypeValueChanged: return GWEN_DialogEvent_ResultHandled;; case GWEN_DialogEvent_TypeActivated: return AB_SetupDialog_HandleActivated(dlg, sender); case GWEN_DialogEvent_TypeEnabled: case GWEN_DialogEvent_TypeDisabled: case GWEN_DialogEvent_TypeClose: case GWEN_DialogEvent_TypeLast: default: return GWEN_DialogEvent_ResultNotHandled; } return GWEN_DialogEvent_ResultNotHandled; } aqbanking-6.6.1/src/libs/aqbanking/dialogs/dlg_importer_p.h0000664000175000017500000000155314300721174020661 00000000000000/*************************************************************************** begin : Tue Feb 10 2010 copyright : (C) 2010 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQBANKING_DLG_IMPORTER_P_H #define AQBANKING_DLG_IMPORTER_P_H #include "dlg_importer.h" #include typedef struct AB_IMPORTER_DIALOG AB_IMPORTER_DIALOG; struct AB_IMPORTER_DIALOG { AB_BANKING *banking; AB_IMEXPORTER_CONTEXT *context; const char *finishedMessage; char *fileName; char *importerName; char *profileName; }; #endif aqbanking-6.6.1/src/libs/aqbanking/README0000664000175000017500000000205114043610744014736 00000000000000 This folder contains the library AqBanking. The main folder contains the main class of AqBanking, AB_BANKING. There are some subfolders: types ----- Contains classes/objects for some important banking tasks, like account specifications, transaction definitions etc. These files are installed and to be used by applications. gui --- Contains the class AB_GUI, and implementation of the GWEN_GUI class using AqBanking for lookup and storage of SSL certificates of the servers. These files are installed and to be used by applications. backendsupport -------------- Contains code for objects which are only to be used by AqBanking and the plugins. Code from this folder is never installed and is not to be used outside AqBanking. dialogs ------- Contains some internal GWEN_DIALOG objects which are called by AqBanking. These also are not installed and not to be used outside AqBanking. typemaker2 ---------- Contains type definition files for the typemaker2 tool (provided with the library Gwenhywfar). These are installed and can be used in your own types. aqbanking-6.6.1/src/libs/aqbanking/Makefile.am0000664000175000017500000000433314043610744016117 00000000000000SUBDIRS=types gui backendsupport typemaker2 dialogs AM_CPPFLAGS = \ -I$(srcdir)/.. \ -I$(top_builddir)/src/libs \ -I$(top_builddir)/src/libs/plugins/backends \ -I$(top_srcdir) \ $(gwenhywfar_includes) noinst_LTLIBRARIES=libaqbanking_base.la AM_CFLAGS=-DBUILDING_AQBANKING @visibility_cflags@ EXTRA_DIST=\ banking_account.c \ banking_accspec.c \ banking_bankinfo.c \ banking_cfg.c \ banking_dialogs.c \ banking_imex.c \ banking_init.c \ banking_online.c \ banking_transaction.c \ banking_update.c \ banking_user.c \ banking_compat.c \ system.h.in \ version.h.in # We define those here because within the configure script the variables # $(datadir) et al are not available. DEFS += \ -DEXEEXT=\"$(EXEEXT)\" \ -DLOCALEDIR=\"@aqbanking_locale_searchdir@\" \ -DAQBANKING_PLUGINS=\"$(aqbanking_plugin_searchdir)\" \ -DAQBANKING_SYSCONF_DIR=\"$(aqbanking_cfg_searchdir)\" \ -DAQBANKING_DATA_DIR=\"$(aqbanking_data_searchdir)\" \ -DCOMPILE_DATETIME=\"@DATETIME@\" noinst_HEADERS=\ banking_be.h \ banking_l.h \ banking_p.h \ i18n_l.h iheaderdir=@aqbanking_headerdir_am@/aqbanking iheader_HEADERS=\ account_type.h \ banking.h \ banking_dialogs.h \ banking_imex.h \ banking_bankinfo.h \ banking_online.h \ banking_transaction.h \ error.h \ system.h \ version.h libaqbanking_base_la_SOURCES=\ account_type.c \ banking.c libaqbanking_base_la_LIBADD= \ backendsupport/libabbesupport.la \ types/libabtypes.la \ gui/libabgui.la \ dialogs/libabdialogs.la sources: for f in $(libaqbanking_base_la_SOURCES) $(EXTRA_DIST); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d sources; \ done built_sources: for d in $(SUBDIRS); do \ $(MAKE) -C $$d built_sources; \ done ; typefiles: for d in $(SUBDIRS); do \ $(MAKE) -C $$d typefiles; \ done typedefs: for d in $(SUBDIRS); do \ $(MAKE) -C $$d typedefs; \ done cppcheck: for f in $(libaqbanking_base_la_SOURCES); do \ cppcheck --force $$f ; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done splint: for f in $(libaqbanking_base_la_SOURCES); do \ splint $(AM_CPPFLAGS) $(DEFS) +enumint -unrecogcomments +posixlib -predboolint +boolint -boolops $$f ; \ done aqbanking-6.6.1/src/libs/aqbanking/banking_p.h0000664000175000017500000001531514627071733016175 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQBANKING_BANKING_P_H #define AQBANKING_BANKING_P_H #define AB_BANKING_MAX_PIN_TRY 10 #define AB_BANKING_REGKEY_PATHS "Software\\AqBanking\\Paths" #define AB_BANKING_REGKEY_DATADIR "pkgdatadir" #define AB_BANKING_REGKEY_BANKINFODIR "bankinfodir" #define AB_BANKING_REGKEY_PROVIDERDIR "providerdir" #define AB_BANKING_REGKEY_IMPORTERDIR "importerdir" #define AB_BANKING_REGKEY_SYSCONFDIR "sysconfdir" #define AB_BANKING_REGKEY_WIZARDDIR "wizarddir" #define AB_BANKING_REGKEY_LOCALEDIR "localedir" #define AB_WIZARD_FOLDER "wizards" #ifdef OS_WIN32 # define AB_BANKING_USERDATADIR "aqbanking" #else # define AB_BANKING_USERDATADIR ".aqbanking" #endif /** * Name of the default configuration file within the users home folder. */ #define AB_BANKING_CONFIGFILE "settings.conf" #define AB_BANKING_OLD_CONFIGFILE ".aqbanking.conf" #define AB_BANKING_SETTINGS_DIR "settings6" /* temporarily changed to settings6 for testing purposes */ #define AB_CFG_GROUP_MAIN "aqbanking" #define AB_CFG_GROUP_APPS "apps" #define AB_CFG_GROUP_SHARED "shared" #define AB_CFG_GROUP_ACCOUNTSPECS "accountspecs" #define AB_CFG_GROUP_USERSPECS "userspecs" #include "banking_l.h" #include "backendsupport/provider_l.h" #include "backendsupport/imexporter_l.h" #include "backendsupport/bankinfoplugin_l.h" #include #include struct AB_BANKING { GWEN_INHERIT_ELEMENT(AB_BANKING) int initCount; char *appName; char *appEscName; int appExtensions; uint32_t lastVersion; char *dataDir; char *startFolder; GWEN_DB_NODE *dbProfiles; GWEN_CRYPT_TOKEN_LIST2 *cryptTokenList; GWEN_CONFIGMGR *configMgr; GWEN_DB_NODE *dbRuntimeConfig; }; /* static GWEN_CONFIGMGR *AB_Banking_GetConfigMgr(AB_BANKING *ab); */ static int AB_Banking__GetConfigManager(AB_BANKING *ab, const char *dname); static AB_IMEXPORTER *AB_Banking_FindImExporter(AB_BANKING *ab, const char *name); static AB_BANKINFO_PLUGIN *AB_Banking_CreateImBankInfoPlugin(AB_BANKING *ab, const char *modname); static AB_BANKINFO_PLUGIN *AB_Banking_FindBankInfoPlugin(AB_BANKING *ab, const char *country); static AB_BANKINFO_PLUGIN *AB_Banking_GetBankInfoPlugin(AB_BANKING *ab, const char *country); static int AB_Banking__TransformIban(const char *iban, int len, char *newIban, int maxLen); /* ======================================================================================================================== * banking_update.c * ======================================================================================================================== */ /** * This functions changes the GWEN_ConfigMgr id of configuration groups to match the AqBanking-ID. * * GWEN_ConfigMgr has its own scheme to assign unique ids to configuration groups (see @ref GWEN_ConfigMgr_GetUniqueId). * However, since version 6 AqBanking needs to directly access configuration groups (e.g. when a backend wants to * use an AB_USER object it just loads it in time). Fo this to work there needs to be a way to derive the config manager * id to the id assigned by AqBanking. * For this we use @ref GWEN_ConfigMgr_MkUniqueIdFromId() to make the config manager derive a static unique id from the * given AqBanking-assigned id. * This function checks every config group and checks whether its id has been created by GWEN_ConfigMgr_MkUniqueIdFromId. * If it is not a new config group will be created with the new id and the old group is deleted. */ static int AB_Banking_UpdateConfList(AB_BANKING *ab, const char *groupName); static int AB_Banking_UpdateUserList(AB_BANKING *ab); static int AB_Banking_UpdateAccountList(AB_BANKING *ab); static int AB_Banking_Update_Account_SetUserId(AB_BANKING *ab); static int AB_Banking_Update_Account_SetBackendName(AB_BANKING *ab); static int AB_Banking_Update_Backend_InitDeinit(AB_BANKING *ab); int AB_Banking_Update(AB_BANKING *ab, uint32_t lastVersion, uint32_t currentVersion); int AB_Banking_CopyOldSettingsFolderIfNeeded(AB_BANKING *ab); /* ======================================================================================================================== * banking_cfg.c * ======================================================================================================================== */ static int AB_Banking_ReadNamedConfigGroup(const AB_BANKING *ab, const char *groupName, const char *subGroupName, int doLock, int doUnlock, GWEN_DB_NODE **pDb); static int AB_Banking_WriteNamedConfigGroup(AB_BANKING *ab, const char *groupName, const char *subGroupName, int doLock, int doUnlock, GWEN_DB_NODE *db); static int AB_Banking_ReadConfigGroup(const AB_BANKING *ab, const char *groupName, uint32_t uniqueId, int doLock, int doUnlock, GWEN_DB_NODE **pDb); static int AB_Banking_HasConfigGroup(const AB_BANKING *ab, const char *groupName, uint32_t uniqueId); static int AB_Banking_WriteConfigGroup(AB_BANKING *ab, const char *groupName, uint32_t uniqueId, int doLock, int doUnlock, GWEN_DB_NODE *db); static int AB_Banking_DeleteConfigGroup(AB_BANKING *ab, const char *groupName, uint32_t uniqueId); static int AB_Banking_UnlockConfigGroup(AB_BANKING *ab, const char *groupName, uint32_t uniqueId); static AB_IMEXPORTER *AB_Banking_GetImExporter(AB_BANKING *ab, const char *name); #endif /* AQBANKING_BANKING_P_H */ aqbanking-6.6.1/src/libs/aqbanking/banking_bankinfo.c0000664000175000017500000001745714627071733017531 00000000000000/*************************************************************************** begin : Wed Oct 03 2018 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifdef AQBANKING_WITH_PLUGIN_BANKINFO_DE # include "src/libs/plugins/bankinfo/de/de.h" #endif AB_BANKINFO_PLUGIN *AB_Banking_CreateImBankInfoPlugin(AB_BANKING *ab, const char *modname) { if (modname && *modname) { #ifdef AQBANKING_WITH_PLUGIN_BANKINFO_DE if (strcasecmp(modname, "de")==0) return AB_BankInfoPluginDE_new(ab); #endif DBG_ERROR(AQBANKING_LOGDOMAIN, "Plugin [%s] not compiled-in", modname); } return NULL; } AB_BANKINFO_PLUGIN *AB_Banking_FindBankInfoPlugin(AB_BANKING *ab, const char *country) { AB_BANKINFO_PLUGIN *bip; bip=AB_BankInfoPlugin_List_First(ab_bankInfoPlugins); while (bip) { if (strcasecmp(AB_BankInfoPlugin_GetCountry(bip), country)==0) break; bip=AB_BankInfoPlugin_List_Next(bip); } return bip; } AB_BANKINFO_PLUGIN *AB_Banking_GetBankInfoPlugin(AB_BANKING *ab, const char *country) { AB_BANKINFO_PLUGIN *bip; assert(ab); assert(country); bip=AB_Banking_FindBankInfoPlugin(ab, country); if (bip) return bip; bip=AB_Banking_CreateImBankInfoPlugin(ab, country); if (bip) AB_BankInfoPlugin_List_Add(bip, ab_bankInfoPlugins); return bip; } AB_BANKINFO *AB_Banking_GetBankInfo(AB_BANKING *ab, const char *country, const char *branchId, const char *bankId) { AB_BANKINFO_PLUGIN *bip; assert(ab); assert(country); bip=AB_Banking_GetBankInfoPlugin(ab, country); if (!bip) { DBG_INFO(AQBANKING_LOGDOMAIN, "BankInfo plugin for country \"%s\" not found", country); return 0; } return AB_BankInfoPlugin_GetBankInfo(bip, branchId, bankId); } int AB_Banking_GetBankInfoByTemplate(AB_BANKING *ab, const char *country, AB_BANKINFO *tbi, AB_BANKINFO_LIST2 *bl) { AB_BANKINFO_PLUGIN *bip; assert(ab); assert(country); bip=AB_Banking_GetBankInfoPlugin(ab, country); if (!bip) { DBG_INFO(AQBANKING_LOGDOMAIN, "BankInfo plugin for country \"%s\" not found", country); return 0; } return AB_BankInfoPlugin_GetBankInfoByTemplate(bip, tbi, bl); } AB_BANKINFO_CHECKRESULT AB_Banking_CheckAccount(AB_BANKING *ab, const char *country, const char *branchId, const char *bankId, const char *accountId) { AB_BANKINFO_PLUGIN *bip; assert(ab); assert(country); bip=AB_Banking_GetBankInfoPlugin(ab, country); if (!bip) { DBG_INFO(AQBANKING_LOGDOMAIN, "BankInfo plugin for country \"%s\" not found", country); return AB_BankInfoCheckResult_UnknownResult; } return AB_BankInfoPlugin_CheckAccount(bip, branchId, bankId, accountId); } int AB_Banking__TransformIban(const char *iban, int len, char *newIban, int maxLen) { int i, j; const char *p; char *s; assert(iban); /* format IBAN */ i=0; j=0; p=iban; s=newIban; while (j='A' && c<='Z') { c=10+(c-'A'); *s='0'+(c/10); s++; i++; if (i>=maxLen) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Bad IBAN (too long)"); return -1; } *s='0'+(c%10); s++; i++; } else if (isdigit(c)) { *s=c; s++; i++; } else { DBG_ERROR(AQBANKING_LOGDOMAIN, "Bad IBAN (bad char)"); return -1; } } p++; j++; } /* while */ if (j= 'A' && *p++ <= 'Z' && *p >= 'A' && *p++ <= 'Z')) { DBG_INFO(AQBANKING_LOGDOMAIN, "Bad IBAN (country code not in upper case) [%s]", iban); return -1; } p+=2; /* convert IBAN+4 to buffer */ if (AB_Banking__TransformIban(p, strlen(p), newIban, sizeof(newIban)-1)) { DBG_INFO(AQBANKING_LOGDOMAIN, "here"); return -1; } /* append country and checksum */ p=iban; s=newIban+strlen(newIban); if (AB_Banking__TransformIban(p, 4, s, sizeof(newIban)-strlen(newIban)-1)) { DBG_INFO(AQBANKING_LOGDOMAIN, "here"); return -1; } /* calculate checksum in 9er steps */ p=newIban; tmp[0]=0; j=0; while (*p) { for (i=strlen(tmp); i<9; i++) { if (!*p) break; tmp[i]=*(p++); } tmp[i]=0; if (1!=sscanf(tmp, "%u", &j)) { DBG_INFO(AQBANKING_LOGDOMAIN, "Bad IBAN (bad char) [%s]", iban); return -1; } j=j%97; /* modulo 97 */ snprintf(tmp, sizeof(tmp), "%u", j); } /* while */ if (j!=1) { DBG_INFO(AQBANKING_LOGDOMAIN, "Bad IBAN (bad checksum) [%s]", iban); return 1; } DBG_DEBUG(AQBANKING_LOGDOMAIN, "IBAN is valid [%s]", iban); return 0; } int AB_Banking_MakeGermanIban(const char *bankCode, const char *accountNumber, GWEN_BUFFER *ibanBuf) { GWEN_BUFFER *tbuf; int i; char numbuf[32]; char tmp[10]; int rv; unsigned int j; const char *p; /* create BBAN */ tbuf=GWEN_Buffer_new(0, 256, 0, 1); /* bank code */ i=strlen(bankCode); if (i<8) GWEN_Buffer_FillWithBytes(tbuf, '0', 8-i); rv=AB_Banking__TransformIban(bankCode, strlen(bankCode), numbuf, sizeof(numbuf)-1); if (rv<0) { GWEN_Buffer_free(tbuf); DBG_ERROR(AQBANKING_LOGDOMAIN, "Bad bank code (bad char) (%d)", rv); return rv; } GWEN_Buffer_AppendString(tbuf, numbuf); /* account number */ i=strlen(accountNumber); if (i<10) GWEN_Buffer_FillWithBytes(tbuf, '0', 10-i); rv=AB_Banking__TransformIban(accountNumber, strlen(accountNumber), numbuf, sizeof(numbuf)-1); if (rv<0) { GWEN_Buffer_free(tbuf); DBG_ERROR(AQBANKING_LOGDOMAIN, "Bad account number (bad char) (%d)", rv); return rv; } GWEN_Buffer_AppendString(tbuf, numbuf); /* add "DE00" */ GWEN_Buffer_AppendString(tbuf, "131400"); /* calculate checksum in 9er steps */ p=GWEN_Buffer_GetStart(tbuf); tmp[0]=0; j=0; while (*p) { for (i=strlen(tmp); i<9; i++) { if (!*p) break; tmp[i]=*(p++); } tmp[i]=0; if (1!=sscanf(tmp, "%u", &j)) { GWEN_Buffer_free(tbuf); DBG_ERROR(AQBANKING_LOGDOMAIN, "Bad IBAN (bad char)"); return -1; } j=j%97; /* modulo 97 */ snprintf(tmp, sizeof(tmp), "%u", j); } /* while */ /* j contains the modulus */ snprintf(tmp, sizeof(tmp), "%02u", 98-j); GWEN_Buffer_AppendString(ibanBuf, "DE"); /* DE */ GWEN_Buffer_AppendString(ibanBuf, tmp); /* checksum */ i=strlen(bankCode); /* bank code */ if (i<8) GWEN_Buffer_FillWithBytes(ibanBuf, '0', 8-i); GWEN_Buffer_AppendString(ibanBuf, bankCode); i=strlen(accountNumber); /* account number */ if (i<10) GWEN_Buffer_FillWithBytes(ibanBuf, '0', 10-i); GWEN_Buffer_AppendString(ibanBuf, accountNumber); DBG_INFO(AQBANKING_LOGDOMAIN, "IBAN is %s", GWEN_Buffer_GetStart(ibanBuf)); GWEN_Buffer_free(tbuf); return 0; } aqbanking-6.6.1/src/libs/aqbanking/banking_accspec.c0000664000175000017500000001257714043610744017332 00000000000000/*************************************************************************** begin : Sat Jun 30 2018 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ /* This file is included by banking.c */ /* ------------------------------------------------------------------------------------------------ * forward declarations * ------------------------------------------------------------------------------------------------ */ static const char *_nonEmptyString(const char *s, const char *altstring); static void _logAccountSpec(const AB_ACCOUNT_SPEC *a, const char *logMessage); /* ------------------------------------------------------------------------------------------------ * implementations * ------------------------------------------------------------------------------------------------ */ int AB_Banking_ReadAccountSpec(const AB_BANKING *ab, uint32_t uniqueId, AB_ACCOUNT_SPEC **pAccountSpec) { AB_ACCOUNT_SPEC *accountSpec; GWEN_DB_NODE *db=NULL; int rv; assert(ab); rv=AB_Banking_ReadConfigGroup(ab, AB_CFG_GROUP_ACCOUNTSPECS, uniqueId, 1, 1, &db); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); return rv; } accountSpec=AB_AccountSpec_new(); AB_AccountSpec_ReadDb(accountSpec, db); AB_AccountSpec_SetUniqueId(accountSpec, uniqueId); if (1) { int i; i=AB_AccountSpec_GetType(accountSpec); if (i==AB_AccountType_Unknown) AB_AccountSpec_SetType(accountSpec, AB_AccountType_Unspecified); } GWEN_DB_Group_free(db); if (pAccountSpec) *pAccountSpec=accountSpec; else AB_AccountSpec_free(accountSpec); return 0; } int AB_Banking_WriteAccountSpec(AB_BANKING *ab, const AB_ACCOUNT_SPEC *accountSpec) { GWEN_DB_NODE *db=NULL; int rv; uint32_t uniqueId; assert(ab); uniqueId=AB_AccountSpec_GetUniqueId(accountSpec); /* write account spec to DB */ db=GWEN_DB_Group_new("accountSpec"); AB_AccountSpec_toDb(accountSpec, db); rv=AB_Banking_WriteConfigGroup(ab, AB_CFG_GROUP_ACCOUNTSPECS, uniqueId, 1, 1, db); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); GWEN_DB_Group_free(db); return rv; } GWEN_DB_Group_free(db); return 0; } int AB_Banking_DeleteAccountSpec(AB_BANKING *ab, uint32_t uid) { int rv; rv=AB_Banking_DeleteConfigGroup(ab, AB_CFG_GROUP_ACCOUNTSPECS, uid); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); return rv; } return 0; } int AB_Banking_GetAccountSpecList(const AB_BANKING *ab, AB_ACCOUNT_SPEC_LIST **pAccountSpecList) { GWEN_DB_NODE *dbAll=NULL; int rv; DBG_INFO(AQBANKING_LOGDOMAIN, "Reading account spec list"); rv=AB_Banking_ReadConfigGroups(ab, AB_CFG_GROUP_ACCOUNTSPECS, "uniqueId", NULL, NULL, &dbAll); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); return rv; } else { AB_ACCOUNT_SPEC_LIST *accountSpecList; GWEN_DB_NODE *db; accountSpecList=AB_AccountSpec_List_new(); db=GWEN_DB_GetFirstGroup(dbAll); while (db) { AB_ACCOUNT_SPEC *a=NULL; assert(db); a=AB_AccountSpec_fromDb(db); if (a) { _logAccountSpec(a, "Adding account spec"); if (1) { int i; i=AB_AccountSpec_GetType(a); if (i==AB_AccountType_Unknown) AB_AccountSpec_SetType(a, AB_AccountType_Unspecified); } AB_AccountSpec_List_Add(a, accountSpecList); } db=GWEN_DB_GetNextGroup(db); } if (AB_AccountSpec_List_GetCount(accountSpecList)) { *pAccountSpecList=accountSpecList; GWEN_DB_Group_free(dbAll); return 0; } else { DBG_WARN(AQBANKING_LOGDOMAIN, "No valid account specs found"); AB_AccountSpec_List_free(accountSpecList); GWEN_DB_Group_free(dbAll); return GWEN_ERROR_NOT_FOUND; } } } int AB_Banking_GetAccountSpecByUniqueId(const AB_BANKING *ab, uint32_t uniqueAccountId, AB_ACCOUNT_SPEC **pAccountSpec) { int rv; rv=AB_Banking_ReadAccountSpec(ab, uniqueAccountId, pAccountSpec); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); return rv; } return rv; } void _logAccountSpec(const AB_ACCOUNT_SPEC *a, const char *logMessage) { const char *sBankCode; const char *sAccountNumber; const char *sIban; const char *sBic; sBankCode=_nonEmptyString(AB_AccountSpec_GetBankCode(a), ""); sAccountNumber=_nonEmptyString(AB_AccountSpec_GetAccountNumber(a), ""); sIban=_nonEmptyString(AB_AccountSpec_GetIban(a), ""); sBic=_nonEmptyString(AB_AccountSpec_GetBic(a), ""); if (logMessage && *logMessage) { DBG_INFO(AQBANKING_LOGDOMAIN, "%s (id=%u, bank code=%s, acc num=%s, bic=%s, iban=%s)", logMessage, AB_AccountSpec_GetUniqueId(a), sBankCode, sAccountNumber, sBic, sIban); } else { DBG_INFO(AQBANKING_LOGDOMAIN, "Account spec (id=%u, bank code=%s, acc num=%s, bic=%s, iban=%s)", AB_AccountSpec_GetUniqueId(a), sBankCode, sAccountNumber, sBic, sIban); } } const char *_nonEmptyString(const char *s, const char *altstring) { if (s && *s) return s; return altstring; } aqbanking-6.6.1/src/libs/aqbanking/version.h0000644000175000017500000000162715037736036015731 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2004 by Martin Preuss email : martin at libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AQBANKING_VERSION_H #define AQBANKING_VERSION_H #define AQBANKING_VERSION_MAJOR 6 #define AQBANKING_VERSION_MINOR 6 #define AQBANKING_VERSION_PATCHLEVEL 1 #define AQBANKING_VERSION_BUILD 0 #define AQBANKING_VERSION_TAG "stable" #define AQBANKING_VERSION_FULL_STRING "6.6.1.0stable" #define AQBANKING_VERSION_STRING "6.6.1" #define AQBANKING_SO_CURRENT 50 #define AQBANKING_SO_REVISION 1 #define AQBANKING_SO_AGE 6 #define AQBANKING_SO_EFFECTIVE 44 #endif /* AQBANKING_VERSION_H */ aqbanking-6.6.1/src/libs/aqbanking/i18n_l.h0000664000175000017500000000132014043610744015317 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQBANKING_I18N_L_H #define AQBANKING_I18N_L_H #include #define I18N(msg) GWEN_I18N_Translate(PACKAGE, msg) #define I18N_NOOP(msg) msg #define I18S(msg) msg #endif /* AQBANKING_I18N_L_H */ aqbanking-6.6.1/src/libs/aqbanking/banking_imex.h0000664000175000017500000005064014043610744016671 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQBANKING_BANKING_IMEX_H #define AQBANKING_BANKING_IMEX_H #include #include #include #include #ifdef __cplusplus extern "C" { #endif /** @addtogroup G_AB_IMEXPORTER */ /*@{*/ /** @name Plugin Handling * */ /*@{*/ /** * Returns a list2 of available importers and exporters. * You must free this list after using it via * @ref GWEN_PluginDescription_List2_freeAll. * Please note that a simple @ref GWEN_PluginDescription_List2_free would * not suffice, since that would only free the list but not the objects * stored within the list ! * @param ab pointer to the AB_BANKING object */ AQBANKING_API GWEN_PLUGIN_DESCRIPTION_LIST2 *AB_Banking_GetImExporterDescrs(AB_BANKING *ab); /** *

* Loads all available profiles for the given importer/exporter. * This includes global profiles as well as local ones. *

*

* Local profiles overwrite global ones, allowing the user to customize the * profiles. Local profiles are expected in a folder below the user * local folder (e.g. "$HOME/.aqbanking"). The local profile folder for the * CSV plugin is in "$HOME/.aqbanking/imexporters/csv/profiles". *

*

* The GWEN_DB returned contains one group for every loaded profile. Every * group has the name of the profile it contains. Every group contains at * least three variables: *

    *
  • char "name": name of the profile
  • *
  • int "isGlobal": this is 0 for profiles loaded from the users home directory and * 1 otherwise.
  • *
  • char "fileName": name of the loaded file (without path, so it can be used for * @ref AB_Banking_SaveLocalImExporterProfile)
  • *
* The remaining content of each group is completely defined by * the importer/exporter. *

*

* You can use @ref GWEN_DB_GetFirstGroup and @ref GWEN_DB_GetNextGroup * to browse the profiles. *

*

* The caller becomes the new owner of the object returned (if any). * This makes him/her responsible for freeing it via * @ref GWEN_DB_Group_free. *

*

* You can use any of the subgroups below the returned one as argument * to @ref AB_ImExporter_Import. *

* @param ab pointer to the AB_BANKING object * @param name name of the importer whose profiles are to be read */ AQBANKING_API GWEN_DB_NODE *AB_Banking_GetImExporterProfiles(AB_BANKING *ab, const char *imExporterName); AQBANKING_API GWEN_DB_NODE *AB_Banking_GetImExporterProfile(AB_BANKING *ab, const char *imExporterName, const char *profileName); /** * Save the given profile in the local user folder of the given im-/exporter * module. After that this profile will appear in the list returned by * @ref AB_Banking_GetImExporterProfiles. * Existing profiles with the same file name (argument @c fname) will be overwritten. * It is best practice to use the name of the profile plus ".conf" as file name * (e.g. "testprofile.conf"). The caller has to make sure that the name of the profile * is unique among all profiles of the given im-/exporter module, otherwise some * profiles can not be loaded. * * @param ab pointer to the AB_BANKING object * @param imexporterName name of the im-/exporter whose profile is to be written * @param dbProfile DB group containing the profile * @param fname name of the file to write without path (e.g. "testprofile.conf") * (if NULL then the path is determined by AqBanking using the given name of the im-/exporter). */ AQBANKING_API int AB_Banking_SaveLocalImExporterProfile(AB_BANKING *ab, const char *imexporterName, GWEN_DB_NODE *dbProfile, const char *fname); /** * This function should return a dialog (see @ref GWEN_DIALOG) which * allows editing of the given profile. * * @return 0 on success, error code otherwise * * @param ab pointer to the AB_BANKING object * @param imExporterName name of the im-/exporter * @param dbProfile configuration data for the exporter. You can get this * using @ref AB_Banking_GetImExporterProfiles. * @param pDlg pointer to a dialog pointer (receives the created dialog if any) */ AQBANKING_API int AB_Banking_GetEditImExporterProfileDialog(AB_BANKING *ab, const char *imExporterName, GWEN_DB_NODE *dbProfile, const char *testFileName, GWEN_DIALOG **pDlg); /** * Reads the given stream and imports all data from it. This imported * data is stored within the given context. * This is a very basic function, there are convenience functions to make it easier to * import from files or buffers. * * @return 0 on success, error code otherwise * * @param ab pointer to the AB_BANKING object * @param importerName name of the importer module to use * @param ctx import context * @param sio stream to read from * @param dbProfile configuration data for the importer. You can get this * using @ref AB_Banking_GetImExporterProfiles. * * Example for a dbProfile: * @code * profile { * char name="test" * char shortDescr="Test" * char version="5.0.4" * char longDescr="Test Profile" * int import="1" * int export="1" * char type="csv" * char groupNames="transaction", "transfer", "debitnote", "line" * char dateFormat="DD.MM.YYYY" * int utc="0" * char subject="transactions" * int usePosNegField="0" * char posNegFieldName="posNeg" * int defaultIsPositive="1" * char valueFormat="float" * params { * quote="0" * title="1" * delimiter=";" * group="transaction" * columns { * 1="remoteBankCode" * 2="remoteAccountNumber" * 3="remoteName[0]" * 4="value/value" * 5="purpose[0]" * 6="purpose[1]" * } # columns * } # params * } # profile * @endcode */ AQBANKING_API int AB_Banking_Import(AB_BANKING *ab, const char *importerName, AB_IMEXPORTER_CONTEXT *ctx, GWEN_SYNCIO *sio, GWEN_DB_NODE *dbProfile); /** * Writes all data to the given stream. * This is a very basic function, there are convenience functions to make it easier to * export to files or buffers. * * @return 0 on success, error code otherwise * * @param ab pointer to the AB_BANKING object * @param exporterName name of the exporter module to use * @param ctx export context * @param sio stream to write to * @param dbProfile configuration data for the exporter. You can get this * using @ref AB_Banking_GetImExporterProfiles (see also @ref AB_Banking_Import). */ AQBANKING_API int AB_Banking_Export(AB_BANKING *ab, const char *exporterName, AB_IMEXPORTER_CONTEXT *ctx, GWEN_SYNCIO *sio, GWEN_DB_NODE *dbProfile); /*@}*/ /** @name Convenience Functions for Import/Export * * For import and exports the following objects are generally needed: *
    *
  • im/exporter module (e.g. "csv", "ofx", "swift")
  • *
  • im/export profile with the settings for the im/exporter module (e.g. "SWIFT-MT940" for * the "swift" importer)
  • *
  • im/export context (needed on import to store imported data, on export to hold the data * to export)
  • *
  • source/destination for the data to import/export (e.g. a CSV-file, OFX file etc)
  • *
* * To make it easier for applications to import/export data this group contains some convenience * functions which automatically load the appropriate im/exporter plugin and a selected im/exporter * settings profile. * * The raw im/export API of AqBanking works with GWEN_SYNCIO objects as source/destination for the * formatted data. Such a GWEN_SYNCIO object can be a file or a buffer in memory. * However, the functions in this group allow you just to specify the file to import from/export to * and leave the gory details of setting up a GWEN_SYNCIO to AqBanking. * * There are functions to: *
    *
  • import from a file
  • *
  • import from a memory buffer
  • *
  • export to a file
  • *
  • export to a memory buffer
  • *
*/ /*@{*/ /** * This function tries to fill missing fields in a given imexporter context. * It tries to find the online banking accounts for all account info objects in * the context and copies missing information (like IBAN, BIC, owner name etc). * * @param ab pointer to the AB_BANKING object * @param iec pointer to the imexporter context to fill * @return 0 if all accounts were found, 1 if there was at least 1 unknown account */ AQBANKING_API int AB_Banking_FillGapsInImExporterContext(AB_BANKING *ab, AB_IMEXPORTER_CONTEXT *iec); /** * Import data using a profile file. * * The profile to be used is read either from a given profile file (if the argument @b profileFile is given) * or from AqBankings internal profile database. * * @param ab banking API object * @param importerName name of the importer module (e.g. "csv", "swift", "ofx" etc) * @param ctx import context to receive the imported accounts, transactions etc * @param sio IO from which to import * @param profileName name of the importer settings profile stored in the file whose name * is given in @b profileFile or the internal profile database * @param profileFile name of the file to load the exporter settings profile from. This should * contain at least one profile in a "profile" group. If you want to use profiles installed with * AqBanking you can specify its name via @b profileName and use NULL here * */ AQBANKING_API int AB_Banking_ImportLoadProfile(AB_BANKING *ab, const char *importerName, AB_IMEXPORTER_CONTEXT *ctx, GWEN_SYNCIO *sio, const char *profileName, const char *profileFile); /** * Export data using a profile file. * * The profile to be used is read either from a given profile file (if the argument @b profileFile is given) * or from AqBankings internal profile database. * * @param ab banking API object * @param exporterName name of the exporter module (e.g. "csv", "swift", "ofx" etc) * @param ctx context to export * @param sio IO to which to export * @param profileName name of the exporter settings profile stored in the file whose name * is given in @b profileFile or the internal profile database * @param profileFile name of the file to load the exporter settings profile from. This should * contain at least one profile in a "profile" group. If you want to use profiles installed with * AqBanking you can specify its name via @b profileName and use NULL here * */ AQBANKING_API int AB_Banking_ExportLoadProfile(AB_BANKING *ab, const char *exporterName, AB_IMEXPORTER_CONTEXT *ctx, GWEN_SYNCIO *sio, const char *profileName, const char *profileFile); /** * Reads the given file and imports all data from it. This imported * data is stored within the given context. * * @return 0 on success, error code otherwise * * @param ab pointer to the AB_BANKING object * @param importerName name of the importer module to use * @param ctx import context * @param inputFileName path and name of the file to read from * @param dbProfile configuration data for the importer. You can get this * using @ref AB_Banking_GetImExporterProfiles. */ AQBANKING_API int AB_Banking_ImportFromFile(AB_BANKING *ab, const char *importerName, AB_IMEXPORTER_CONTEXT *ctx, const char *inputFileName, GWEN_DB_NODE *dbProfile); /** * Writes data from the given im-/exporter context into a file of the given name. * The file will be created if it doesn't exist, otherwise it will be truncated before writing to it. * * @return 0 on success, error code otherwise * * @param ab pointer to the AB_BANKING object * @param exporterName name of the exporter module to use * @param ctx context to export * @param outputFileName path and name of the file to write to * @param dbProfile configuration data for the exporter. You can get this * using @ref AB_Banking_GetImExporterProfiles. */ AQBANKING_API int AB_Banking_ExportToFile(AB_BANKING *ab, const char *exporterName, AB_IMEXPORTER_CONTEXT *ctx, const char *outputFileName, GWEN_DB_NODE *dbProfile); /** * Reads the given file and imports all data from it into the given context. Loads profile. * * The profile to be used is read either from a given profile file (if the argument @b profileFile is given) * or from AqBankings internal profile database. * * @return 0 on success, error code otherwise * * @param ab pointer to the AB_BANKING object * @param importerName name of the importer module to use * @param ctx import context * @param profileName name of the importer settings profile stored in the file whose name * is given in @b profileFile or the internal profile database * @param profileFile name of the file to load the exporter settings profile from. This should * contain at least one profile in a "profile" group. If you want to use profiles installed with * AqBanking you can specify its name via @b profileName and use NULL here * @param inputFileName path and name of the file to read from */ AQBANKING_API int AB_Banking_ImportFromFileLoadProfile(AB_BANKING *ab, const char *importerName, AB_IMEXPORTER_CONTEXT *ctx, const char *profileName, const char *profileFile, const char *inputFileName); /** * Writes data from the given im-/exporter context into a file of the given name. Loads profile. * The file will be created if it doesn't exist, otherwise it will be truncated before writing to it. * * The profile to be used is read either from a given profile file (if the argument @b profileFile is given) * or from AqBankings internal profile database. * * @return 0 on success, error code otherwise * * @param ab pointer to the AB_BANKING object * @param exporterName name of the exporter module to use * @param ctx context to export * @param outputFileName path and name of the file to write to * @param profileName name of the exporter settings profile stored in the file whose name * is given in @b profileFile or the internal profile database * @param profileFile name of the file to load the exporter settings profile from. This should * contain at least one profile in a "profile" group. If you want to use profiles installed with * AqBanking you can specify its name via @b profileName and use NULL here */ AQBANKING_API int AB_Banking_ExportToFileLoadProfile(AB_BANKING *ab, const char *exporterName, AB_IMEXPORTER_CONTEXT *ctx, const char *outputFileName, const char *profileName, const char *profileFile); /** * Reads the given memory buffer and reads all data from it. This imported * data is stored within the given context. * * @return 0 on success, error code otherwise * * @param ab pointer to the AB_BANKING object * @param importerName name of the importer module to use * @param ctx import context * @param dataPtr pointer to the data to import * @param dataLen size of the data pointed to by @b dataPtr * @param dbProfile configuration data for the importer. You can get this * using @ref AB_Banking_GetImExporterProfiles. */ AQBANKING_API int AB_Banking_ImportFromBuffer(AB_BANKING *ab, const char *importerName, AB_IMEXPORTER_CONTEXT *ctx, const uint8_t *dataPtr, uint32_t dataLen, GWEN_DB_NODE *dbProfile); /** * Writes data from the given im-/exporter context into a buffer. * * @return 0 on success, error code otherwise * * @param ab pointer to the AB_BANKING object * @param exporterName name of the exporter module to use * @param ctx context to export * @param outputBuffer buffer to export data to * @param dbProfile configuration data for the exporter. You can get this * using @ref AB_Banking_GetImExporterProfiles. */ AQBANKING_API int AB_Banking_ExportToBuffer(AB_BANKING *ab, const char *exporterName, AB_IMEXPORTER_CONTEXT *ctx, GWEN_BUFFER *outputBuffer, GWEN_DB_NODE *dbProfile); /** * Reads the given buffer and imports all data from it into the given context. Loads profile. * * The profile to be used is read either from a given profile file (if the argument @b profileFile is given) * or from AqBankings internal profile database. * * @return 0 on success, error code otherwise * * @param ab pointer to the AB_BANKING object * @param importerName name of the importer module to use * @param ctx import context * @param profileName name of the importer settings profile stored in the file whose name * is given in @b profileFile or the internal profile database * @param profileFile name of the file to load the exporter settings profile from. This should * contain at least one profile in a "profile" group. If you want to use profiles installed with * AqBanking you can specify its name via @b profileName and use NULL here * @param dataPtr pointer to the data to import * @param dataLen size of the data pointed to by @b dataPtr */ AQBANKING_API int AB_Banking_ImportFromBufferLoadProfile(AB_BANKING *ab, const char *importerName, AB_IMEXPORTER_CONTEXT *ctx, const char *profileName, const char *profileFile, const uint8_t *dataPtr, uint32_t dataLen); /** * Writes data from the given im-/exporter context into a buffer. Loads profile. * * The profile to be used is read either from a given profile file (if the argument @b profileFile is given) * or from AqBankings internal profile database. * * @return 0 on success, error code otherwise * * @param ab pointer to the AB_BANKING object * @param exporterName name of the exporter module to use * @param ctx context to export * @param outputBuffer buffer to export data to * @param profileName name of the exporter settings profile stored in the file whose name * is given in @b profileFile or the internal profile database * @param profileFile name of the file to load the exporter settings profile from. This should * contain at least one profile in a "profile" group. If you want to use profiles installed with * AqBanking you can specify its name via @b profileName and use NULL here */ AQBANKING_API int AB_Banking_ExportToBufferLoadProfile(AB_BANKING *ab, const char *exporterName, AB_IMEXPORTER_CONTEXT *ctx, GWEN_BUFFER *outputBuffer, const char *profileName, const char *profileFile); /*@}*/ /*@}*/ /* addtogroup */ #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/aqbanking/banking_dialogs.h0000664000175000017500000000751314546575647017376 00000000000000/*************************************************************************** begin : Wed Dec 05 2018 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQBANKING_BANKING_DIALOGS_H #define AQBANKING_BANKING_DIALOGS_H #include #include #ifdef __cplusplus extern "C" { #endif /** @name Import Dialogs * * Dialogs from this group can be used to import any file type AqBanking supports. * Those dialogs are easy to use: * * @code{.c} AB_IMEXPORTER_CONTEXT *importAnyFileIntoContext(AB_BANKING *ab) { GWEN_DIALOG *dlg; AB_IMEXPORTER_CONTEXT *ctx; int rv; ctx=AB_ImExporterContext_new(); dlg=AB_Banking_CreateImporterDialog(ab, ctx, "This is a simple finish message."); if (dbg=NULL) { fprintf(stderr, "Could not create dialog\n"); AB_ImExporterContext_free(ctx); return NULL; } GWEN_Dialog_SetWidgetText(dlg, "", "My Selected Window Title"); rv=GWEN_Gui_ExecDialog(dlg, 0); if (rv==0) { fprintf(stderr, "Rejected.\n"); GWEN_Dialog_free(dlg); AB_ImExporterContext_free(ctx); return NULL; } GWEN_Dialog_free(dlg); return ctx; } * @endcode */ /*@{*/ /** * Creates a file import assistent dialog. * * @return pointer to the created dialog. * @param banking pointer to the AqBanking object * @param ctx pointer to the import context to receive the content of the * imported file (not taken over, the caller remains owner of the object) * @param finishedMessage message to show on the last page of the assistent * (i.e. the page which is shown after a successfull import into the given * import context). */ AQBANKING_API GWEN_DIALOG *AB_Banking_CreateImporterDialog(AB_BANKING *ab, AB_IMEXPORTER_CONTEXT *ctx, const char *finishedMessage); /** * Same as @ref AB_Banking_CreateImporterDialog but presets (i.e. preset importer and profile). * * The following vars from the DB are used: * - filename: name of the file to import (will probably changed by the user in the gui) * - importer: name of the importer to use * - profile: name of the import profile to use * * @return pointer to created dialog * @param banking pointer to the AqBanking object * @param ctx pointer to the import context to receive the content of the * imported file * @param finishedMessage message to show on the last page of the assistent * (i.e. the page which is shown after a successfull import into the given * import context). * @param dbPrefs GWEN_DB_NODE where presets are stored (see above) */ AQBANKING_API GWEN_DIALOG *AB_Banking_CreateImporterDialogWithPresets(AB_BANKING *ab, AB_IMEXPORTER_CONTEXT *ctx, const char *finishedMessage, GWEN_DB_NODE *dbPrefs); /** * Gather presets from an importer dialog (see @ref AB_Banking_CreateImporterDialogWithPresets). * * The dialog must have been finished for this function to return any meaningfull values. * Values empty in the gui (e.g. no selected profile or dialog aborted) will not be changed in @i dbPrefs. */ AQBANKING_API void AB_Banking_ImporterDialogGatherPresets(GWEN_DIALOG *dlg, GWEN_DB_NODE *dbPrefs); /*@}*/ AQBANKING_API GWEN_DIALOG *AB_Banking_CreateSetupDialog(AB_BANKING *ab); #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/aqbanking/banking_update.c0000664000175000017500000004235314043610744017206 00000000000000/*************************************************************************** begin : Sat Sep 29 2018 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ /* This file is included by banking.c */ #include #define AQBANKING_COPYFOLDER_MAX_DEPTH 10 /* ------------------------------------------------------------------------------------------------ * forward declarations * ------------------------------------------------------------------------------------------------ */ static int _copyFile(const char *sourceFile, const char *destFile); static int _copyFolder(const char *sourceFolder, const char *destFolder, int depth); static void _getOldStandardSourceFolder(GWEN_BUFFER *dbuf); static void _getNewStandardSourceFolder(GWEN_BUFFER *dbuf); static int _haveConfigAtFolder(const char *cfgFolder); /* ------------------------------------------------------------------------------------------------ * implementations * ------------------------------------------------------------------------------------------------ */ int AB_Banking_UpdateConfList(AB_BANKING *ab, const char *groupName) { GWEN_DB_NODE *dbAll=NULL; int rv; /* read all config groups which have a variable called "uniqueId" */ rv=AB_Banking_ReadConfigGroups(ab, groupName, "uniqueId", NULL, NULL, &dbAll); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); return rv; } else { GWEN_DB_NODE *db; db=GWEN_DB_GetFirstGroup(dbAll); while (db) { uint32_t uid; const char *subGroupName; /* get groupName (uid assigned by previous versions of AqBanking) */ subGroupName=GWEN_DB_GroupName(db); assert(subGroupName); uid=GWEN_DB_GetIntValue(db, "uniqueId", 0, 0); if (uid==0) { DBG_WARN(AQBANKING_LOGDOMAIN, "%s: Unique id is ZERO (%s), ignoring group", groupName, subGroupName); } else { char idBuf[256]; /* create groupname derived from uid */ rv=GWEN_ConfigMgr_MkUniqueIdFromId(ab->configMgr, groupName, uid, 0, idBuf, sizeof(idBuf)-1); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); GWEN_DB_Group_free(dbAll); return rv; } /* Compare group names: if the name equals the unique id, all is fine. * Otherwise we have to change the name */ if (strcmp(subGroupName, idBuf)!=0) { DBG_WARN(AQBANKING_LOGDOMAIN, "%s: Groupname not derived from unique id (%s != %s), creating new group (%lu)", groupName, subGroupName, idBuf, (unsigned long int)uid); rv=AB_Banking_WriteConfigGroup(ab, groupName, uid, 1, 1, db); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); GWEN_DB_Group_free(dbAll); return rv; } DBG_WARN(AQBANKING_LOGDOMAIN, "%s: Removing old group \"%s\" (%lu)", groupName, subGroupName, (unsigned long int)uid); rv=GWEN_ConfigMgr_DeleteGroup(ab->configMgr, groupName, subGroupName); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); GWEN_DB_Group_free(dbAll); return rv; } } } db=GWEN_DB_GetNextGroup(db); } /* while(db) */ GWEN_DB_Group_free(dbAll); } /* else */ return 0; } int AB_Banking_UpdateUserList(AB_BANKING *ab) { int rv; rv=AB_Banking_UpdateConfList(ab, AB_CFG_GROUP_USERS); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); return rv; } return 0; } int AB_Banking_UpdateAccountList(AB_BANKING *ab) { int rv; rv=AB_Banking_UpdateConfList(ab, AB_CFG_GROUP_ACCOUNTS); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); return rv; } return 0; } int AB_Banking_Update(AB_BANKING *ab, uint32_t lastVersion, uint32_t currentVersion) { DBG_INFO(AQBANKING_LOGDOMAIN, "Updating from version %d.%d.%d.%d", (lastVersion>>24) & 0xff, (lastVersion>>16) & 0xff, (lastVersion>>8) & 0xff, lastVersion & 0xff); if (lastVersion<((5<<24) | (99<<16) | (2<<8) | 0)) { int rv; rv=AB_Banking_UpdateAccountList(ab); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); return rv; } rv=AB_Banking_UpdateUserList(ab); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); return rv; } rv=AB_Banking_Update_Account_SetUserId(ab); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); return rv; } rv=AB_Banking_Update_Account_SetBackendName(ab); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); return rv; } /* create account specs */ rv=AB_Banking_Update_Backend_InitDeinit(ab); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); return rv; } } return 0; } int AB_Banking_Update_Backend_InitDeinit(AB_BANKING *ab) { GWEN_PLUGIN_DESCRIPTION_LIST2 *descrs; GWEN_PLUGIN_MANAGER *pm; DBG_INFO(AQBANKING_LOGDOMAIN, "Updating to 5.99.2.0"); pm=GWEN_PluginManager_FindPluginManager("provider"); if (!pm) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Could not find plugin manager for \"%s\"", "provider"); return GWEN_ERROR_INTERNAL; } descrs=GWEN_PluginManager_GetPluginDescrs(pm); if (descrs) { GWEN_PLUGIN_DESCRIPTION_LIST2_ITERATOR *it; GWEN_PLUGIN_DESCRIPTION *pd; it=GWEN_PluginDescription_List2_First(descrs); assert(it); pd=GWEN_PluginDescription_List2Iterator_Data(it); assert(pd); while (pd) { const char *pname=GWEN_PluginDescription_GetName(pd); AB_PROVIDER *pro; pro=AB_Banking_BeginUseProvider(ab, pname); if (!pro) { DBG_WARN(AQBANKING_LOGDOMAIN, "Could not load backend \"%s\", ignoring", pname); } else { int rv; DBG_NOTICE(AQBANKING_LOGDOMAIN, "Initializing backend \"%s\"", pname); rv=AB_Banking_EndUseProvider(ab, pro); if (rv<0) { DBG_WARN(AQBANKING_LOGDOMAIN, "Error initializing backend \"%s\" (%d), ignoring", pname, rv); } } pd=GWEN_PluginDescription_List2Iterator_Next(it); } /* while */ GWEN_PluginDescription_List2Iterator_free(it); GWEN_PluginDescription_List2_freeAll(descrs); } return 0; } int AB_Banking_Update_Account_SetUserId(AB_BANKING *ab) { GWEN_DB_NODE *dbAll=NULL; int rv; DBG_INFO(AQBANKING_LOGDOMAIN, "Set UserId in accounts"); /* read all config groups which have a variable called "uniqueId" */ rv=AB_Banking_ReadConfigGroups(ab, AB_CFG_GROUP_ACCOUNTS, "uniqueId", NULL, NULL, &dbAll); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); return rv; } else { GWEN_DB_NODE *db; db=GWEN_DB_GetFirstGroup(dbAll); while (db) { uint32_t uid; const char *subGroupName; /* get groupName (uid assigned by previous versions of AqBanking) */ subGroupName=GWEN_DB_GroupName(db); assert(subGroupName); uid=GWEN_DB_GetIntValue(db, "uniqueId", 0, 0); if (uid==0) { DBG_WARN(AQBANKING_LOGDOMAIN, "%s: Unique id is ZERO (%s), ignoring group", AB_CFG_GROUP_ACCOUNTS, subGroupName); } else { int d; /* create new var */ d=GWEN_DB_GetIntValue(db, "user", 0, 0); GWEN_DB_SetIntValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "userId", d); /* delete old vars */ GWEN_DB_DeleteVar(db, "user"); GWEN_DB_DeleteVar(db, "selectedUser"); /* write back */ rv=AB_Banking_WriteConfigGroup(ab, AB_CFG_GROUP_ACCOUNTS, uid, 1, 1, db); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); GWEN_DB_Group_free(dbAll); return rv; } } db=GWEN_DB_GetNextGroup(db); } /* while(db) */ GWEN_DB_Group_free(dbAll); } /* else */ return 0; } int AB_Banking_Update_Account_SetBackendName(AB_BANKING *ab) { GWEN_DB_NODE *dbAll=NULL; int rv; DBG_INFO(AQBANKING_LOGDOMAIN, "Set BackendName in accounts"); /* read all config groups which have a variable called "uniqueId" */ rv=AB_Banking_ReadConfigGroups(ab, AB_CFG_GROUP_ACCOUNTS, "uniqueId", NULL, NULL, &dbAll); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); return rv; } else { GWEN_DB_NODE *db; db=GWEN_DB_GetFirstGroup(dbAll); while (db) { uint32_t uid; const char *subGroupName; /* get groupName (uid assigned by previous versions of AqBanking) */ subGroupName=GWEN_DB_GroupName(db); assert(subGroupName); uid=GWEN_DB_GetIntValue(db, "uniqueId", 0, 0); if (uid==0) { DBG_WARN(AQBANKING_LOGDOMAIN, "%s: Unique id is ZERO (%s), ignoring group", AB_CFG_GROUP_ACCOUNTS, subGroupName); } else { const char *s; /* create new var (only if not already set */ s=GWEN_DB_GetCharValue(db, "backendName", 0, NULL); if (s==NULL) { s=GWEN_DB_GetCharValue(db, "provider", 0, NULL); if (!(s && *s)) { DBG_WARN(AQBANKING_LOGDOMAIN, "%s: Neither provider nor backendName set (%s), not modifying group", AB_CFG_GROUP_ACCOUNTS, subGroupName); } else { GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "backendName", s); /* delete old var */ GWEN_DB_DeleteVar(db, "provider"); } } /* write back */ rv=AB_Banking_WriteConfigGroup(ab, AB_CFG_GROUP_ACCOUNTS, uid, 1, 1, db); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); GWEN_DB_Group_free(dbAll); return rv; } } db=GWEN_DB_GetNextGroup(db); } /* while(db) */ GWEN_DB_Group_free(dbAll); } /* else */ return 0; } int AB_Banking_CopyOldSettingsFolderIfNeeded(AB_BANKING *ab) { GWEN_BUFFER *bufDest; int rv; bufDest=GWEN_Buffer_new(0, 256, 0, 1); _getNewStandardSourceFolder(bufDest); if (!_haveConfigAtFolder(GWEN_Buffer_GetStart(bufDest))) { GWEN_BUFFER *bufSource; DBG_INFO(AQBANKING_LOGDOMAIN, "No current settings folder, trying to copy old one"); bufSource=GWEN_Buffer_new(0, 256, 0, 1); _getOldStandardSourceFolder(bufSource); if (_haveConfigAtFolder(GWEN_Buffer_GetStart(bufSource))) { DBG_ERROR(AQBANKING_LOGDOMAIN, "There is an old settings folder, copying that"); rv=_copyFolder(GWEN_Buffer_GetStart(bufSource), GWEN_Buffer_GetStart(bufDest), 0); if (rv<0) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Error copying old settings, please copy the folder\n" " %s\n" " manually to\n" " %s\n" "(Error code was: %d)", GWEN_Buffer_GetStart(bufSource), GWEN_Buffer_GetStart(bufDest), rv); GWEN_Gui_ShowError("Error Copying old Settings", "Error copying old settings, please copy the folder\n" " %s\n" " manually to\n" " %s\n" "(Error code was: %d)", GWEN_Buffer_GetStart(bufSource), GWEN_Buffer_GetStart(bufDest), rv); GWEN_Buffer_free(bufDest); GWEN_Buffer_free(bufSource); return rv; } } else { DBG_ERROR(AQBANKING_LOGDOMAIN, "There is no old settings folder, need initial setup"); } GWEN_Buffer_free(bufSource); } GWEN_Buffer_free(bufDest); return 0; } int _copyFile(const char *sourceFile, const char *destFile) { int rv; GWEN_BUFFER *bufSource; bufSource=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_SyncIo_Helper_ReadFile(sourceFile, bufSource); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(bufSource); return rv; } rv=GWEN_SyncIo_Helper_WriteFile(destFile, (const uint8_t *) GWEN_Buffer_GetStart(bufSource), GWEN_Buffer_GetUsedBytes(bufSource)); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(bufSource); return rv; } GWEN_Buffer_free(bufSource); return 0; } int _copyFolder(const char *sourceFolder, const char *destFolder, int depth) { int rv; GWEN_STRINGLIST *slSourceEntries; GWEN_STRINGLISTENTRY *se; GWEN_BUFFER *bufDest; uint32_t bufferPosDest; GWEN_BUFFER *bufSource; uint32_t bufferPosSource; if (depth>=AQBANKING_COPYFOLDER_MAX_DEPTH) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Recursion too deep, maybe some circular links? Aborting."); return GWEN_ERROR_INTERNAL; } /* get source files and folders */ slSourceEntries=GWEN_StringList_new(); rv=GWEN_Directory_GetFileEntriesWithType(sourceFolder, slSourceEntries, NULL); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); GWEN_StringList_free(slSourceEntries); return rv; } GWEN_StringList_Sort(slSourceEntries, 1, GWEN_StringList_SortModeNoCase); /* create destination folder, if it does not exist */ rv=GWEN_Directory_GetPath(destFolder, GWEN_PATH_FLAGS_CHECKROOT); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); GWEN_StringList_free(slSourceEntries); return rv; } /* prepare dest buffer */ bufDest=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(bufDest, destFolder); GWEN_Buffer_AppendString(bufDest, GWEN_DIR_SEPARATOR_S); bufferPosDest=GWEN_Buffer_GetPos(bufDest); /* prepare source buffer */ bufSource=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(bufSource, sourceFolder); GWEN_Buffer_AppendString(bufSource, GWEN_DIR_SEPARATOR_S); bufferPosSource=GWEN_Buffer_GetPos(bufSource); /* copy files */ se=GWEN_StringList_FirstEntry(slSourceEntries); while (se) { const char *s; s=GWEN_StringListEntry_Data(se); if (s && *s=='f') { GWEN_Buffer_AppendString(bufSource, s+1); GWEN_Buffer_AppendString(bufDest, s+1); rv=_copyFile(GWEN_Buffer_GetStart(bufSource), GWEN_Buffer_GetStart(bufDest)); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(bufSource); GWEN_Buffer_free(bufDest); GWEN_StringList_free(slSourceEntries); return rv; } GWEN_Buffer_Crop(bufSource, 0, bufferPosSource); GWEN_Buffer_Crop(bufDest, 0, bufferPosDest); } se=GWEN_StringListEntry_Next(se); } /* create folders recursively */ se=GWEN_StringList_FirstEntry(slSourceEntries); while (se) { const char *s; s=GWEN_StringListEntry_Data(se); if (s && *s=='d') { if (strcmp(s+1, ".")!=0 && strcmp(s+1, "..")!=0) { GWEN_Buffer_AppendString(bufSource, s+1); GWEN_Buffer_AppendString(bufDest, s+1); rv=_copyFolder(GWEN_Buffer_GetStart(bufSource), GWEN_Buffer_GetStart(bufDest), depth+1); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(bufSource); GWEN_Buffer_free(bufDest); GWEN_StringList_free(slSourceEntries); return rv; } GWEN_Buffer_Crop(bufSource, 0, bufferPosSource); GWEN_Buffer_Crop(bufDest, 0, bufferPosDest); } } se=GWEN_StringListEntry_Next(se); } GWEN_Buffer_free(bufSource); GWEN_Buffer_free(bufDest); GWEN_StringList_free(slSourceEntries); return 0; } void _getOldStandardSourceFolder(GWEN_BUFFER *dbuf) { char home[256]; if (GWEN_Directory_GetHomeDirectory(home, sizeof(home))) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Could not determine home directory, aborting."); abort(); } GWEN_Buffer_AppendString(dbuf, home); GWEN_Buffer_AppendString(dbuf, GWEN_DIR_SEPARATOR_S); GWEN_Buffer_AppendString(dbuf, AB_BANKING_USERDATADIR); GWEN_Buffer_AppendString(dbuf, GWEN_DIR_SEPARATOR_S); GWEN_Buffer_AppendString(dbuf, "settings"); } void _getNewStandardSourceFolder(GWEN_BUFFER *dbuf) { char home[256]; if (GWEN_Directory_GetHomeDirectory(home, sizeof(home))) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Could not determine home directory, aborting."); abort(); } GWEN_Buffer_AppendString(dbuf, home); GWEN_Buffer_AppendString(dbuf, GWEN_DIR_SEPARATOR_S); GWEN_Buffer_AppendString(dbuf, AB_BANKING_USERDATADIR); GWEN_Buffer_AppendString(dbuf, GWEN_DIR_SEPARATOR_S); GWEN_Buffer_AppendString(dbuf, AB_BANKING_SETTINGS_DIR); } int _haveConfigAtFolder(const char *cfgFolder) { GWEN_BUFFER *dbuf; int rv; dbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(dbuf, cfgFolder); GWEN_Buffer_AppendString(dbuf, GWEN_DIR_SEPARATOR_S); GWEN_Buffer_AppendString(dbuf, AB_CFG_GROUP_USERS); rv=GWEN_Directory_GetPath(GWEN_Buffer_GetStart(dbuf), GWEN_PATH_FLAGS_NAMEMUSTEXIST | GWEN_PATH_FLAGS_CHECKROOT); if (rv<0) { DBG_ERROR(AQBANKING_LOGDOMAIN, "No AqBanking config folder found at [%s] (%d)", GWEN_Buffer_GetStart(dbuf), rv); GWEN_Buffer_free(dbuf); return 0; } DBG_INFO(AQBANKING_LOGDOMAIN, "AqBanking config folder found at [%s]", GWEN_Buffer_GetStart(dbuf)); GWEN_Buffer_free(dbuf); return 1; } aqbanking-6.6.1/src/libs/aqbanking/error.h0000664000175000017500000000552714043610744015373 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQBANKING_ERROR_H #define AQBANKING_ERROR_H #include #include #ifdef AQBANKING_IS_SUBPROJECT # define AQBANKING_API # define AQBANKING_EXPORT # define AQBANKING_NOEXPORT #else # ifdef BUILDING_AQBANKING # /* building AqBanking */ # if AQBANKING_SYS_IS_WINDOWS # /* for windows */ # ifdef __declspec # define AQBANKING_API __declspec (dllexport) # else /* if __declspec */ # define AQBANKING_API # endif /* if NOT __declspec */ # else # /* for non-win32 */ # ifdef GCC_WITH_VISIBILITY_ATTRIBUTE # define AQBANKING_API __attribute__((visibility("default"))) # else # define AQBANKING_API # endif # endif # else # /* not building AqBanking */ # if AQBANKING_SYS_IS_WINDOWS # /* for windows */ # ifdef __declspec # define AQBANKING_API __declspec (dllimport) # else /* if __declspec */ # define AQBANKING_API # endif /* if NOT __declspec */ # else # /* for non-win32 */ # define AQBANKING_API # endif # endif # ifdef GCC_WITH_VISIBILITY_ATTRIBUTE # define AQBANKING_EXPORT __attribute__((visibility("default"))) # define AQBANKING_NOEXPORT __attribute__((visibility("hidden"))) # else # define AQBANKING_EXPORT # define AQBANKING_NOEXPORT # endif #endif #ifndef AQBANKING_NOWARN_DEPRECATED # ifdef __GNUC__ # define AQBANKING_DEPRECATED __attribute((__deprecated__)) # else # define AQBANKING_DEPRECATED # endif # else # define AQBANKING_DEPRECATED #endif #define AQBANKING_LOGDOMAIN "aqbanking" /** @defgroup AB_ERROR Error Codes * @ingroup G_AB_C_INTERFACE */ /*@{*/ #define AB_ERROR_OFFSET GWEN_ERROR_USEROFFSET #define AB_ERROR_BAD_CONFIG_FILE (AB_ERROR_OFFSET-1) #define AB_ERROR_NETWORK (AB_ERROR_OFFSET-2) #define AB_ERROR_EMPTY (AB_ERROR_OFFSET-3) #define AB_ERROR_INDIFFERENT (AB_ERROR_OFFSET-4) #define AB_ERROR_UNKNOWN_ACCOUNT (AB_ERROR_OFFSET-5) #define AB_ERROR_NOT_INIT (AB_ERROR_OFFSET-6) #define AB_ERROR_SECURITY (AB_ERROR_OFFSET-7) #define AB_ERROR_PLUGIN_MISSING (AB_ERROR_OFFSET-8) #define AB_ERROR_USER1 (AB_ERROR_OFFSET-50) #define AB_ERROR_USER2 (AB_ERROR_OFFSET-51) #define AB_ERROR_USER3 (AB_ERROR_OFFSET-52) #define AB_ERROR_USER4 (AB_ERROR_OFFSET-53) #define AB_ERROR_USEROFFSET (AB_ERROR_OFFSET-100) /*@}*/ #endif /* AQBANKING_ERROR_H */ aqbanking-6.6.1/src/libs/aqbanking/banking.h0000664000175000017500000003247114546575647015675 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ /** @file * @short The main interface of the aqbanking library */ #ifndef AQBANKING_BANKING_H #define AQBANKING_BANKING_H /** @addtogroup G_AB_BANKING Main Interface */ /*@{*/ /** * Object to be operated on by functions in this group (@ref AB_BANKING). */ typedef struct AB_BANKING AB_BANKING; /*@}*/ #include #include #include /* for AQBANKING_API */ #include /* outsourced */ #include #include #include #include #include #ifdef __cplusplus extern "C" { #endif /** @addtogroup G_AB_BANKING Main Interface * * @short This group contains the main API function group. * *

* A program should first call @ref AB_Banking_Init to allow AqBanking * to load its configuration files and initialize itself. *

* After that you may call any other function of this group (most likely * the program will request a list of managed account via * @ref AB_Banking_GetAccountSpecs). *

*

* When the program has finished its work it should call @ref AB_Banking_Fini * as the last function of AqBanking (just before calling * @ref AB_Banking_free). *

*/ /*@{*/ /** @name Extensions supported by the application * */ /*@{*/ #define AB_BANKING_EXTENSION_NONE 0x00000000 /*@}*/ /** @name TAN methods * * TAN input is done via @ref GWEN_Gui_GetPassword. One argument to this function "methodId". * AqBanking uses @ref GWEN_Gui_PasswordMethod_Text for normal TAN entry (e.g. SMS/mobile TAN) and * @ref GWEN_Gui_PasswordMethod_OpticalHHD for all optical methods (like chipTAN, photoTAN etc). * Another argument to this function is "methodParams", which contains additional data (like the image * data for photoTAN). The most important value in "methodParams" is "tanMethodId" (integer). It contains * one of the values given in this section. This can be used by implementations of the function * @ref GWEN_Gui_GetPassword to determine how to present the TAN entry to the user. * * This is a list of variables which are stored in the "methodParams" argument to GWEN_Gui_GetPassword. * * All * - int "tanMethodId" : method id (e.g. "1" for AB_BANKING_TANMETHOD_TEXT, see definitions below) * * AB_BANKING_TANMETHOD_TEXT * no special variables * * AB_BANKING_TANMETHOD_CHIPTAN_OPTIC * - char "challenge" : string containing the HHD challenge to be sent to screen * * AB_BANKING_TANMETHOD_PHOTOTAN and AB_BANKING_TANMETHOD_CHIPTAN_QR * - char "mimetype" : mimetype of the image (e.g. "image/png") * - bin "imageData" : binary image data (use this to create an image in your GUI) */ /*@{*/ #define AB_BANKING_TANMETHOD_TEXT 0x00000001 #define AB_BANKING_TANMETHOD_CHIPTAN 0x00000002 #define AB_BANKING_TANMETHOD_CHIPTAN_OPTIC 0x00000003 #define AB_BANKING_TANMETHOD_CHIPTAN_USB 0x00000004 #define AB_BANKING_TANMETHOD_CHIPTAN_QR 0x00000005 #define AB_BANKING_TANMETHOD_PHOTOTAN 0x00000006 #define AB_BANKING_TANMETHOD_DECOUPLED 0x00000007 /*@}*/ /** * This object is prepared to be inherited (using @ref GWEN_INHERIT_SETDATA). */ GWEN_INHERIT_FUNCTION_LIB_DEFS(AB_BANKING, AQBANKING_API) /** @name Constructor, Destructor, Init, Fini * */ /*@{*/ /** *

* Creates an instance of AqBanking. Though AqBanking is quite object * oriented (and thus allows multiple instances of AB_BANKING to co-exist) * you should avoid having multiple AB_BANKING objects in parallel. *

*

* This is just because the backends are loaded dynamically and might not like * to be used with multiple instances of AB_BANKING in parallel. *

*

* You should later free this object using @ref AB_Banking_free. *

*

* This function does not actually load the configuration file or setup * AqBanking, that is performed by @ref AB_Banking_Init. *

* * @return new instance of AB_BANKING * * @param appName name of the application which wants to use AqBanking. * This allows AqBanking to separate settings and data for multiple * applications. * * @param dname Path for the directory containing the user data of * AqBanking. You should in most cases present a NULL for this * parameter, which means AqBanking will choose the default user * data folder which is "$HOME/.aqbanking". * The configuration itself is handled using GWEN's GWEN_ConfigMgr * module (see @ref GWEN_ConfigMgr_Factory). That module stores the * configuration in AqBanking's subfolder "settings" (i.e. the * full path to the user/account configuration is "$HOME/.aqbanking/settings"). * * @param extensions use 0 for now. */ AQBANKING_API AB_BANKING *AB_Banking_new(const char *appName, const char *dname, uint32_t extensions); /** * Destroys the given instance of AqBanking. Please note that if * @ref AB_Banking_Init has been called on this object then * @ref AB_Banking_Fini should be called before this function. */ AQBANKING_API void AB_Banking_free(AB_BANKING *ab); AQBANKING_API void AB_Banking_GetVersion(int *major, int *minor, int *patchlevel, int *build); /** * Initializes AqBanking. * This sets up the plugins, plugin managers and path managers. * * @return 0 if ok, error code otherwise (see @ref AB_ERROR) * * @param ab banking interface */ AQBANKING_API int AB_Banking_Init(AB_BANKING *ab); /** * Deinitializes AqBanking thus allowing it to save its data and to unload * backends. * * @return 0 if ok, error code otherwise (see @ref AB_ERROR) * * @param ab banking interface */ AQBANKING_API int AB_Banking_Fini(AB_BANKING *ab); /*@}*/ /** @name Application Information, Shared Data * */ /*@{*/ /** * Returns the application name as given to @ref AB_Banking_new. * @param ab pointer to the AB_BANKING object */ AQBANKING_API const char *AB_Banking_GetAppName(const AB_BANKING *ab); /** * Returns the escaped version of the application name. This name can * safely be used to create file paths since all special characters (like * '/', '.' etc) are escaped. * @param ab pointer to the AB_BANKING object */ AQBANKING_API const char *AB_Banking_GetEscapedAppName(const AB_BANKING *ab); /** * Returns the name of the user folder for AqBanking's data. * Normally this is something like "/home/me/.aqbanking". * @return 0 if ok, error code otherwise (see @ref AB_ERROR) * @param ab pointer to the AB_BANKING object * @param buf GWEN_BUFFER to append the path name to */ AQBANKING_API int AB_Banking_GetUserDataDir(const AB_BANKING *ab, GWEN_BUFFER *buf); /** * Returns the path to a folder to which shared data can be stored. * This might be used by multiple applications if they wish to share some * of their data, e.g. QBankManager and AqMoney3 share their transaction * storage so that both may work with it. * Please note that this folder does not necessarily exist, but you are free * to create it. */ AQBANKING_API int AB_Banking_GetSharedDataDir(const AB_BANKING *ab, const char *name, GWEN_BUFFER *buf); /** * Load the given configuration subgroup from the shared application data database. * * This configuration database is used to store dialog sizes and other things that might * be shared among applications using AqBanking. * * @return 0 on success, error code otherwise * @param ab pointer to the AB_BANKING object * @param name name of the configuration subgroup * @param pDb pointer to a variable to receive the configuration loaded */ AQBANKING_API AQBANKING_DEPRECATED int AB_Banking_LoadSharedConfig(AB_BANKING *ab, const char *name, GWEN_DB_NODE **pDb); /** * Save the given configuration subgroup to the shared application data database. * * This configuration database is used to store dialog sizes and other things that might * be shared among applications using AqBanking. * * @return 0 on success, error code otherwise * @param ab pointer to the AB_BANKING object * @param name name of the configuration subgroup * @param db pointer to the configuration to store */ AQBANKING_API AQBANKING_DEPRECATED int AB_Banking_SaveSharedConfig(AB_BANKING *ab, const char *name, GWEN_DB_NODE *db); /** * Exclusively lock the given configuration subgroup of the shared application data database. * * This configuration database is used to store dialog sizes and other things that might * be shared among applications using AqBanking. * * @return 0 on success, error code otherwise * @param ab pointer to the AB_BANKING object * @param name name of the configuration subgroup */ AQBANKING_API AQBANKING_DEPRECATED int AB_Banking_LockSharedConfig(AB_BANKING *ab, const char *name); /** * Unlock the given configuration subgroup of the shared application data database. * * This configuration database is used to store dialog sizes and other things that might * be shared among applications using AqBanking. * * @return 0 on success, error code otherwise * @param ab pointer to the AB_BANKING object * @param name name of the configuration subgroup */ AQBANKING_API AQBANKING_DEPRECATED int AB_Banking_UnlockSharedConfig(AB_BANKING *ab, const char *name); /*@}*/ /** @name Runtime Configuration * * AqBanking can store some runtime config data which is provided by application and used by banking backends. * By this way applications can directly provide some runtime configuration to backends which are otherwise * unaccessible to the applications. * * Runtime configuration data can be set at any time after calling @ref AB_Banking_new() and remains available * until @ref AB_Banking_free() is called, so it survives calls to @ref AB_Banking_Init() and @ref AB_Banking_Fini(). * * The following variables are recognized by AqBanking and the backends so far: *
    *
  • fintsRegistrationKey (char): Registration key provided by the German ZKA to FinTS using applications * (see https://www.hbci-zka.de/register/prod_register.htm)
  • *
  • fintsApplicationVersionString (char): string containing the version of the application * (major and minor version only, e.g. "1.2")
  • *
*/ /*@{*/ /** * Set runtime char variable. Overwrites the currently set value if any. * @param ab pointer to the AB_BANKING object * @param varName name of the variable to set * @param value new value to set */ AQBANKING_API void AB_Banking_RuntimeConfig_SetCharValue(AB_BANKING *ab, const char *varName, const char *value); /** * Get runtime char value (or default value if not set). * @param ab pointer to the AB_BANKING object * @param varName name of the variable to set * @param defaultValue default value to return if there is no value set */ AQBANKING_API const char *AB_Banking_RuntimeConfig_GetCharValue(const AB_BANKING *ab, const char *varName, const char *defaultValue); /** * Set runtime int variable. Overwrites the currently set value if any. * @param ab pointer to the AB_BANKING object * @param varName name of the variable to set * @param value new value to set */ AQBANKING_API void AB_Banking_RuntimeConfig_SetIntValue(AB_BANKING *ab, const char *varName, int value); /** * Get runtime int value (or default value if not set). * @param ab pointer to the AB_BANKING object * @param varName name of the variable to set * @param defaultValue default value to return if there is no value set */ AQBANKING_API int AB_Banking_RuntimeConfig_GetIntValue(const AB_BANKING *ab, const char *varName, int defaultValue); /*@}*/ /** @name Working With Online Service Providers * * Applications may let AqBanking store global application specific data. */ /*@{*/ /** * Create a list of available online banking providers. */ AQBANKING_API GWEN_PLUGIN_DESCRIPTION_LIST2 *AB_Banking_GetProviderDescrs(AB_BANKING *ab); /** * Load the given backend (if necessary), call the control function with the given arguments and unload the backend. */ AQBANKING_API int AB_Banking_ProviderControl(AB_BANKING *ab, const char *backendName, int argc, char **argv); /** * Create a dialog which allows to create a new user. * * @return dialog * * @param ab pointer to the AqBanking object * * @param backend name of the backend for which a user is to be created * (e.g. "aqhbci", "aqebics" etc) * * @param mode additional parameter depending on the backend. it can be used * to specify the user type to be created (e.g. for HBCI those values * specify whether PIN/TAN, keyfile or chipcard users are to be created, * see @ref AqHBCI_NewUserDialog_CodeGeneric and following). * Use value 0 for the generic dialog. */ AQBANKING_API GWEN_DIALOG *AB_Banking_GetNewUserDialog(AB_BANKING *ab, const char *backend, int mode); /*@}*/ /*@}*/ /* addtogroup */ #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/aqbanking/banking_transaction.c0000664000175000017500000005123414546575647020273 00000000000000/*************************************************************************** begin : Thu Oct 04 2018 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ /* This file is included by banking.c */ static int _checkStringForSepaCharset(const char *s, int restricted); static int _checkStringForAlNum(const char *s, int lcase); static int _checkFieldAgainstLimits(const char *fieldName, const char *s, int maxs, int mustNotBeEmpty); int AB_Banking_CheckTransactionAgainstLimits_Purpose(const AB_TRANSACTION *t, const AB_TRANSACTION_LIMITS *lim) { int maxn; int maxs; const char *purpose; /* check purpose */ if (lim) { maxn=AB_TransactionLimits_GetMaxLinesPurpose(lim); maxs=AB_TransactionLimits_GetMaxLenPurpose(lim); } else { DBG_INFO(AQBANKING_LOGDOMAIN, "No transaction limits"); maxn=0; maxs=0; } purpose=AB_Transaction_GetPurpose(t); if (purpose && *purpose) { GWEN_STRINGLIST *sl; sl=GWEN_StringList_fromString(purpose, "\n", 0); if (sl && GWEN_StringList_Count(sl)) { int n; GWEN_STRINGLISTENTRY *se; const char *p; n=0; se=GWEN_StringList_FirstEntry(sl); while (se) { p=GWEN_StringListEntry_Data(se); if (p && *p) { n++; if (maxn && n>maxn) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Too many purpose lines (%d>%d)", n, maxn); GWEN_Gui_ProgressLog2(0, GWEN_LoggerLevel_Error, I18N("Too many purpose lines (%d>%d)"), n, maxn); GWEN_StringList_free(sl); return GWEN_ERROR_INVALID; } else if (maxs>0) { int l; GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, maxs, 0, 1); AB_ImExporter_Utf8ToDta(p, -1, tbuf); GWEN_Text_CondenseBuffer(tbuf); l=GWEN_Buffer_GetUsedBytes(tbuf); if (maxs && l>maxs) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Too many chars in purpose line %d (%d>%d)", n, l, maxs); GWEN_Gui_ProgressLog2(0, GWEN_LoggerLevel_Error, I18N("Too many chars in purpose line %d (%d>%d)"), n, l, maxs); GWEN_Buffer_free(tbuf); GWEN_StringList_free(sl); return GWEN_ERROR_INVALID; } GWEN_Buffer_free(tbuf); } } se=GWEN_StringListEntry_Next(se); } /* while */ if (!n) { DBG_ERROR(AQBANKING_LOGDOMAIN, "No purpose lines"); GWEN_StringList_free(sl); return GWEN_ERROR_INVALID; } } GWEN_StringList_free(sl); } return 0; } int AB_Banking_CheckTransactionAgainstLimits_Names(const AB_TRANSACTION *t, const AB_TRANSACTION_LIMITS *lim) { int rv; rv=_checkFieldAgainstLimits(AB_Transaction_GetRemoteName(t), "remote name", lim?AB_TransactionLimits_GetMaxLenRemoteName(lim):0, 1); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); return rv; } rv=_checkFieldAgainstLimits(AB_Transaction_GetLocalName(t), "remote name", lim?AB_TransactionLimits_GetMaxLenLocalName(lim):0, 1); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); return rv; } return 0; } int AB_Banking_CheckTransactionAgainstLimits_Recurrence(const AB_TRANSACTION *t, const AB_TRANSACTION_LIMITS *lim) { if (lim) { /* check period */ if (AB_Transaction_GetPeriod(t)==AB_Transaction_PeriodMonthly) { int n; n=AB_Transaction_GetCycle(t); if (n==0) { DBG_ERROR(AQBANKING_LOGDOMAIN, "No cycle given"); return GWEN_ERROR_INVALID; } if (AB_TransactionLimits_GetValuesCycleMonthUsed(lim) && !AB_TransactionLimits_ValuesCycleMonthHas(lim, n) && !AB_TransactionLimits_ValuesCycleMonthHas(lim, 0)) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Month day \"%d\" not supported by bank", n); GWEN_Gui_ProgressLog2(0, GWEN_LoggerLevel_Error, I18N("Month day \"%d\" not supported by bank"), n); return GWEN_ERROR_INVALID; } /* check execution day */ n=AB_Transaction_GetExecutionDay(t); if (n==0) { DBG_ERROR(AQBANKING_LOGDOMAIN, "No execution day given"); return GWEN_ERROR_INVALID; } if (AB_TransactionLimits_GetValuesExecutionDayMonthUsed(lim) && !AB_TransactionLimits_ValuesExecutionDayMonthHas(lim, n) && !AB_TransactionLimits_ValuesExecutionDayMonthHas(lim, 0)) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Execution month day \"%d\" not supported by bank", n); GWEN_Gui_ProgressLog2(0, GWEN_LoggerLevel_Error, I18N("Execution month day \"%d\" not supported by bank"), n); return GWEN_ERROR_INVALID; } } /* if (AB_Transaction_GetPeriod(t)==AB_Transaction_PeriodMonthly) */ else if (AB_Transaction_GetPeriod(t)==AB_Transaction_PeriodWeekly) { int n; n=AB_Transaction_GetCycle(t); if (n==0) { DBG_ERROR(AQBANKING_LOGDOMAIN, "No cycle given"); return GWEN_ERROR_INVALID; } if (AB_TransactionLimits_GetValuesCycleWeekUsed(lim) && !AB_TransactionLimits_ValuesCycleWeekHas(lim, n) && !AB_TransactionLimits_ValuesCycleWeekHas(lim, 0)) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Week day \"%d\" not supported by bank", n); GWEN_Gui_ProgressLog2(0, GWEN_LoggerLevel_Error, I18N("Week day \"%d\" not supported by bank"), n); return GWEN_ERROR_INVALID; } /* check execution day */ n=AB_Transaction_GetExecutionDay(t); if (n==0) { DBG_ERROR(AQBANKING_LOGDOMAIN, "No execution day given"); return GWEN_ERROR_INVALID; } if (AB_TransactionLimits_GetValuesExecutionDayWeekUsed(lim) && !AB_TransactionLimits_ValuesExecutionDayWeekHas(lim, n) && !AB_TransactionLimits_ValuesExecutionDayWeekHas(lim, 0)) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Execution week day \"%d\" not supported by bank", n); GWEN_Gui_ProgressLog2(0, GWEN_LoggerLevel_Error, I18N("Execution week day \"%d\" not supported by bank"), n); return GWEN_ERROR_INVALID; } } /* if (AB_Transaction_GetPeriod(t)==AB_Transaction_PeriodWeekly) */ else { DBG_ERROR(AQBANKING_LOGDOMAIN, "Unsupported period %d", AB_Transaction_GetPeriod(t)); return GWEN_ERROR_INVALID; } } /* if limits */ return 0; } int AB_Banking_CheckTransactionAgainstLimits_ExecutionDate(const AB_TRANSACTION *t, const AB_TRANSACTION_LIMITS *lim) { if (lim) { const GWEN_DATE *dt; /* check setup times */ dt=AB_Transaction_GetFirstDate(t); if (dt) { GWEN_DATE *currDate; int diff; int n; currDate=GWEN_Date_CurrentDate(); assert(currDate); diff=GWEN_Date_Diff(dt, currDate); GWEN_Date_free(currDate); /* check minimum setup time */ n=AB_TransactionLimits_GetMinValueSetupTime(lim); if (n && diffn) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Maximum setup time violated (given %d but allowed max=%d)", diff, n); GWEN_Gui_ProgressLog2(0, GWEN_LoggerLevel_Error, I18N("Maximum setup time violated. " "Dated transactions need to be at most %d days away"), n); return GWEN_ERROR_INVALID; } } } return 0; } int AB_Banking_CheckTransactionAgainstLimits_Date(const AB_TRANSACTION *t, const AB_TRANSACTION_LIMITS *lim) { if (lim) { const GWEN_DATE *dt; dt=AB_Transaction_GetDate(t); if (dt) { GWEN_DATE *currDate; int diff; int n; currDate=GWEN_Date_CurrentDate(); assert(currDate); diff=GWEN_Date_Diff(dt, currDate); GWEN_Date_free(currDate); /* check minimum setup time */ n=AB_TransactionLimits_GetMinValueSetupTime(lim); if (n && diffn) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Maximum setup time violated (given %d but allowed max=%d)", diff, n); GWEN_Gui_ProgressLog2(0, GWEN_LoggerLevel_Error, I18N("Maximum setup time violated. " "Dated transactions need to be at most %d days away"), n); return GWEN_ERROR_INVALID; } } } return 0; } int AB_Banking_CheckTransactionAgainstLimits_Sequence(const AB_TRANSACTION *t, const AB_TRANSACTION_LIMITS *lim) { if (lim) { const GWEN_DATE *dt; dt=AB_Transaction_GetDate(t); if (dt) { GWEN_DATE *currDate; int diff; int minTime=0; int maxTime=0; currDate=GWEN_Date_CurrentDate(); assert(currDate); diff=GWEN_Date_Diff(dt, currDate); GWEN_Date_free(currDate); switch (AB_Transaction_GetSequence(t)) { case AB_Transaction_SequenceOnce: minTime=AB_TransactionLimits_GetMinValueSetupTimeOnce(lim); maxTime=AB_TransactionLimits_GetMaxValueSetupTimeOnce(lim); break; case AB_Transaction_SequenceFirst: minTime=AB_TransactionLimits_GetMinValueSetupTimeFirst(lim); maxTime=AB_TransactionLimits_GetMaxValueSetupTimeFirst(lim); break; case AB_Transaction_SequenceFollowing: minTime=AB_TransactionLimits_GetMinValueSetupTimeRecurring(lim); maxTime=AB_TransactionLimits_GetMaxValueSetupTimeRecurring(lim); break; case AB_Transaction_SequenceFinal: minTime=AB_TransactionLimits_GetMinValueSetupTimeFinal(lim); maxTime=AB_TransactionLimits_GetMaxValueSetupTimeFinal(lim); break; case AB_Transaction_SequenceUnknown: break; } if (minTime==0) minTime=AB_TransactionLimits_GetMinValueSetupTime(lim); if (maxTime==0) maxTime=AB_TransactionLimits_GetMaxValueSetupTime(lim); /* check minimum setup time */ if (minTime && diffmaxTime) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Maximum setup time violated (given %d but allowed max=%d for sequence type=%s)", diff, maxTime, AB_Transaction_Sequence_toString(AB_Transaction_GetSequence(t))); GWEN_Gui_ProgressLog2(0, GWEN_LoggerLevel_Error, I18N("Maximum setup time violated. " "Dated transactions need to be at most %d days away but %d days are requested"), maxTime, dt); return GWEN_ERROR_INVALID; } } } return 0; } int _checkStringForSepaCharset(const char *s, int restricted) { char ascii_chars[]="'&*$%:?,-(+.)/ "; /* last is a blank! */ const char *ascii; #define RESTRICTED_CHARS_OFFSET 3 assert(s); ascii=ascii_chars; if (restricted) ascii+=RESTRICTED_CHARS_OFFSET; while (*s) { unsigned char c=*s++; if (!((c>='A' && c<='Z') || (c>='a' && c<='z') || (c>='0' && c<='9') || strchr(ascii, c)!=NULL)) { char errchr[7]; int i = 0; if (c == 0xC3 && !restricted) { c = *s++; switch (c) { case 0x84: /* AE */ case 0xA4: /* ae */ case 0x96: /* OE */ case 0xB6: /* oe */ case 0x9C: /* UE */ case 0xBC: /* ue */ case 0x9F: /* ss */ if ((*s & 0xC0) != 0x80) break; /* these are no umlauts, after all, so fall through */ default: errchr[i++]=0xC3; if ((c & 0xC0) == 0x80) errchr[i++]=c; else /* UTF-8 sequence ended prematurely */ s--; break; } } else errchr[i++] = c; if (i) { while ((*s & 0xC0) == 0x80) if (i<6) errchr[i++]=*s++; else { i++; s++; } if (i<7 && (i>1 || !(c & 0x80))) { errchr[i] = '\0'; DBG_ERROR(AQBANKING_LOGDOMAIN, "Invalid character in string: '%s'", errchr); } else { DBG_ERROR(AQBANKING_LOGDOMAIN, "String not properly UTF-8 encoded"); } return GWEN_ERROR_BAD_DATA; } } } return 0; } /* This function does not check full UTF8, it only checks whether the given string contains characters * other than "A"-"Z", "a"-"z" and "0"-"9". * We don't use isalnum here because I'm not sure how that function handles UTF-8 chars with umlauts... */ int _checkStringForAlNum(const char *s, int lcase) { assert(s); while (*s) { unsigned char c=*s; if (!((c>='0' && c<='9') || (c>='A' && c<='Z') || (lcase && c>='a' && c<='z'))) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Invalid character in string: '%c'", c); return GWEN_ERROR_BAD_DATA; } s++; } return 0; } int _checkFieldAgainstLimits(const char *fieldName, const char *s, int maxs, int mustNotBeEmpty) { if (s && *s) { int l; GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 256, 0, 1); AB_ImExporter_Utf8ToDta(s, -1, tbuf); GWEN_Text_CondenseBuffer(tbuf); l=GWEN_Buffer_GetUsedBytes(tbuf); if (maxs>0 && l>maxs) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Too many chars in %s (%d>%d)", fieldName, l, maxs); GWEN_Buffer_free(tbuf); return GWEN_ERROR_INVALID; } GWEN_Buffer_free(tbuf); } else { if (mustNotBeEmpty) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Missing %s", fieldName); return GWEN_ERROR_INVALID; } } return 0; } int AB_Banking_CheckTransactionForSepaConformity(const AB_TRANSACTION *t, int restricted) { if (t) { const char *s; int rv; s=AB_Transaction_GetLocalIban(t); if (!(s && *s)) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Missing or empty local IBAN in transaction"); return GWEN_ERROR_BAD_DATA; } rv=_checkStringForAlNum(s, 1); if (rv<0) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Invalid character in local IBAN"); return rv; } #if 0 s=AB_Transaction_GetLocalBic(t); if (!(s && *s)) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Missing or empty local BIC in transaction"); return GWEN_ERROR_BAD_DATA; } rv=_checkStringForAlNum(s, 0); if (rv<0) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Invalid character in local BIC"); return rv; } #else s=AB_Transaction_GetLocalBic(t); if (s && *s) { /* BIC not requeired, but if it exists it must be valid */ rv=_checkStringForAlNum(s, 0); if (rv<0) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Invalid character in local BIC"); return rv; } } #endif s=AB_Transaction_GetRemoteIban(t); if (!(s && *s)) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Missing or empty remote IBAN in transaction"); return GWEN_ERROR_BAD_DATA; } rv=_checkStringForAlNum(s, 1); if (rv<0) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Invalid character in remote IBAN"); return rv; } #if 0 s=AB_Transaction_GetRemoteBic(t); if (!(s && *s)) { if (strncmp(AB_Transaction_GetLocalIban(t), AB_Transaction_GetRemoteIban(t), 2)) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Missing or empty remote BIC in transaction"); return GWEN_ERROR_BAD_DATA; } } else { rv=_checkStringForAlNum(s, 0); if (rv<0) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Invalid character in remote BIC"); return rv; } } #else s=AB_Transaction_GetRemoteBic(t); if (s && *s) { /* BIC not requeired, but if it exists it must be valid */ rv=_checkStringForAlNum(s, 0); if (rv<0) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Invalid character in remote BIC"); return rv; } } #endif s=AB_Transaction_GetLocalName(t); if (!(s && *s)) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Missing or empty local name in transaction"); return GWEN_ERROR_BAD_DATA; } rv=_checkStringForSepaCharset(s, restricted); if (rv<0) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Invalid character in local name"); return rv; } s=AB_Transaction_GetRemoteName(t); if (!(s && *s)) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Missing or empty remote name in transaction"); return GWEN_ERROR_BAD_DATA; } rv=_checkStringForSepaCharset(s, restricted); if (rv<0) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Invalid character in remote name"); return rv; } } else { DBG_ERROR(AQBANKING_LOGDOMAIN, "Missing transaction"); return GWEN_ERROR_BAD_DATA; } DBG_INFO(AQBANKING_LOGDOMAIN, "Transaction conforms to restricted SEPA charset"); return 0; } void AB_Banking_FillTransactionFromAccountSpec(AB_TRANSACTION *t, const AB_ACCOUNT_SPEC *as) { const char *s; assert(t); assert(as); /* unique account id */ AB_Transaction_SetUniqueAccountId(t, AB_AccountSpec_GetUniqueId(as)); /* local account */ s=AB_AccountSpec_GetCountry(as); if (!s || !*s) s="de"; AB_Transaction_SetLocalCountry(t, s); AB_Transaction_SetRemoteCountry(t, s); s=AB_AccountSpec_GetBankCode(as); if (s && *s) AB_Transaction_SetLocalBankCode(t, s); s=AB_AccountSpec_GetAccountNumber(as); if (s && *s) AB_Transaction_SetLocalAccountNumber(t, s); s=AB_AccountSpec_GetOwnerName(as); if (s && *s) AB_Transaction_SetLocalName(t, s); s=AB_AccountSpec_GetBic(as); if (s && *s) AB_Transaction_SetLocalBic(t, s); s=AB_AccountSpec_GetIban(as); if (s && *s) AB_Transaction_SetLocalIban(t, s); } void AB_Banking_AddJobInfoToBuffer(const AB_TRANSACTION *t, GWEN_BUFFER *buf) { AB_TRANSACTION_COMMAND cmd; const char *sIban; const char *sAccountNum; const char *sName; cmd=AB_Transaction_GetCommand(t); if (cmd>AB_Transaction_CommandNone) { GWEN_Buffer_AppendString(buf, AB_Transaction_Command_toString(cmd)); GWEN_Buffer_AppendString(buf, " "); } GWEN_Buffer_AppendArgs(buf, "for account %0x8", AB_Transaction_GetUniqueAccountId(t)); sIban=AB_Transaction_GetRemoteIban(t); sAccountNum=AB_Transaction_GetRemoteAccountNumber(t); sName=AB_Transaction_GetRemoteName(t); if (sIban || sAccountNum || sName) { const AB_VALUE *value; value=AB_Transaction_GetValue(t); if (value) { GWEN_Buffer_AppendString(buf, "Amount="); AB_Value_toHbciString(value, buf); } GWEN_Buffer_AppendString(buf, "Remote="); GWEN_Buffer_AppendString(buf, sName?sName:(sIban?sIban:sAccountNum)); } } aqbanking-6.6.1/src/libs/aqbanking/banking_online.c0000664000175000017500000005323014627071733017213 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ /* This file is included by banking.c */ #ifdef AQBANKING_WITH_PLUGIN_BACKEND_AQNONE # include "src/libs/plugins/backends/aqnone/provider_l.h" #endif #ifdef AQBANKING_WITH_PLUGIN_BACKEND_AQHBCI # include "src/libs/plugins/backends/aqhbci/banking/provider.h" #endif #ifdef AQBANKING_WITH_PLUGIN_BACKEND_AQOFXCONNECT # include "src/libs/plugins/backends/aqofxconnect/provider.h" #endif #ifdef AQBANKING_WITH_PLUGIN_BACKEND_AQPAYPAL # include "src/libs/plugins/backends/aqpaypal/provider.h" #endif #ifdef AQBANKING_WITH_PLUGIN_BACKEND_AQEBICS # include "src/libs/plugins/backends/aqebics/client/provider.h" #endif #ifdef AQBANKING_WITH_PLUGIN_BACKEND_AQFINTS # include "src/libs/plugins/backends/aqfints/banking/provider.h" #endif #ifdef AQBANKING_WITH_PLUGIN_BACKEND_AQGIVVE # include "src/libs/plugins/backends/aqgivve/provider.h" #endif /* ------------------------------------------------------------------------------------------------ * forward declarations * ------------------------------------------------------------------------------------------------ */ static AB_PROVIDER *_getProvider(AB_BANKING *ab, const char *name); static int _sendCommandsInsideProgress(AB_BANKING *ab, AB_TRANSACTION_LIST2 *commandList, AB_IMEXPORTER_CONTEXT *ctx, uint32_t pid); static int _sortCommandsByAccounts(AB_BANKING *ab, AB_TRANSACTION_LIST2 *commandList, AB_ACCOUNTQUEUE_LIST *aql, uint32_t pid); static int _sortAccountQueuesByProvider(AB_BANKING *ab, AB_ACCOUNTQUEUE_LIST *aql, AB_PROVIDERQUEUE_LIST *pql, uint32_t pid); static int _sendProviderQueues(AB_BANKING *ab, AB_PROVIDERQUEUE_LIST *pql, AB_IMEXPORTER_CONTEXT *ctx, uint32_t pid); static GWEN_CRYPT_TOKEN *_findCryptToken(AB_BANKING *ab, const char *tname, const char *cname); static GWEN_CRYPT_TOKEN *_createCryptTokenObject(AB_BANKING *ab, const char *tname, const char *cname); /* ------------------------------------------------------------------------------------------------ * implementations * ------------------------------------------------------------------------------------------------ */ AB_PROVIDER *AB_Banking__CreateInternalProvider(AB_BANKING *ab, const char *modname) { if (modname && *modname) { #ifdef AQBANKING_WITH_PLUGIN_BACKEND_AQHBCI if (strcasecmp(modname, "aqhbci")==0) { AB_PROVIDER *pro; DBG_INFO(AQBANKING_LOGDOMAIN, "Plugin [%s] compiled-in", modname); pro=AH_Provider_new(ab, modname); return pro; } #endif #ifdef AQBANKING_WITH_PLUGIN_BACKEND_AQNONE if (strcasecmp(modname, "aqnone")==0) { AB_PROVIDER *pro; DBG_INFO(AQBANKING_LOGDOMAIN, "Plugin [%s] compiled-in", modname); pro=AN_Provider_new(ab); return pro; } #endif #ifdef AQBANKING_WITH_PLUGIN_BACKEND_AQOFXCONNECT if (strcasecmp(modname, "aqofxconnect")==0) { AB_PROVIDER *pro; DBG_INFO(AQBANKING_LOGDOMAIN, "Plugin [%s] compiled-in", modname); pro=AO_Provider_new(ab); return pro; } #endif #ifdef AQBANKING_WITH_PLUGIN_BACKEND_AQPAYPAL if (strcasecmp(modname, "aqpaypal")==0) { AB_PROVIDER *pro; DBG_INFO(AQBANKING_LOGDOMAIN, "Plugin [%s] compiled-in", modname); pro=APY_Provider_new(ab); return pro; } #endif #ifdef AQBANKING_WITH_PLUGIN_BACKEND_AQEBICS if (strcasecmp(modname, "aqebics")==0) { AB_PROVIDER *pro; DBG_INFO(AQBANKING_LOGDOMAIN, "Plugin [%s] compiled-in", modname); pro=EBC_Provider_new(ab); return pro; } #endif #ifdef AQBANKING_WITH_PLUGIN_BACKEND_AQFINTS if (strcasecmp(modname, "aqfints")==0) { AB_PROVIDER *pro; DBG_INFO(AQBANKING_LOGDOMAIN, "Plugin [%s] compiled-in", modname); pro=AF_Provider_new(ab); return pro; } #endif #ifdef AQBANKING_WITH_PLUGIN_BACKEND_AQGIVVE if (strcasecmp(modname, "aqgivve")==0) { AB_PROVIDER *pro; DBG_INFO(AQBANKING_LOGDOMAIN, "Plugin [%s] compiled-in", modname); pro=AG_Provider_new(ab); return pro; } #endif } else { DBG_ERROR(AQBANKING_LOGDOMAIN, "Plugin [%s] not compiled-in", modname); } return NULL; } AB_PROVIDER *_getProvider(AB_BANKING *ab, const char *name) { AB_PROVIDER *pro; assert(ab); assert(name); DBG_INFO(AQBANKING_LOGDOMAIN, "Creating provider \"%s\"", name?name:""); pro=AB_Banking__CreateInternalProvider(ab, name); if (pro==NULL) { DBG_INFO(AQBANKING_LOGDOMAIN, "here"); return NULL; } return pro; } AB_PROVIDER *AB_Banking_BeginUseProvider(AB_BANKING *ab, const char *modname) { AB_PROVIDER *pro; pro=_getProvider(ab, modname); if (pro) { GWEN_DB_NODE *db=NULL; int rv; rv=AB_Banking_ReadNamedConfigGroup(ab, AB_CFG_GROUP_BACKENDS, modname, 1, 1, &db); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); AB_Provider_free(pro); return NULL; } rv=AB_Provider_Init(pro, db); if (rv<0) { DBG_ERROR(AQBANKING_LOGDOMAIN, "here (%d)", rv); GWEN_DB_Group_free(db); AB_Provider_free(pro); return NULL; } GWEN_DB_Group_free(db); return pro; } else { DBG_INFO(AQBANKING_LOGDOMAIN, "Plugin [%s] not found", modname); return NULL; } } int AB_Banking_EndUseProvider(AB_BANKING *ab, AB_PROVIDER *pro) { int rv; GWEN_DB_NODE *db=NULL; assert(pro); rv=AB_Banking_ReadNamedConfigGroup(ab, AB_CFG_GROUP_BACKENDS, AB_Provider_GetName(pro), 1, 0, &db); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); AB_Provider_free(pro); return rv; } rv=AB_Provider_Fini(pro, db); if (rv<0) { DBG_ERROR(AQBANKING_LOGDOMAIN, "here (%d)", rv); GWEN_ConfigMgr_UnlockGroup(ab->configMgr, AB_CFG_GROUP_BACKENDS, AB_Provider_GetName(pro)); GWEN_DB_Group_free(db); AB_Provider_free(pro); return rv; } rv=AB_Banking_WriteNamedConfigGroup(ab, AB_CFG_GROUP_BACKENDS, AB_Provider_GetName(pro), 0, 1, db); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); GWEN_ConfigMgr_UnlockGroup(ab->configMgr, AB_CFG_GROUP_BACKENDS, AB_Provider_GetName(pro)); GWEN_DB_Group_free(db); AB_Provider_free(pro); return rv; } GWEN_DB_Group_free(db); AB_Provider_free(pro); return 0; } int AB_Banking_ProviderControl(AB_BANKING *ab, const char *backendName, int argc, char **argv) { AB_PROVIDER *pro; pro=AB_Banking_BeginUseProvider(ab, backendName); if (pro==NULL) { DBG_INFO(AQBANKING_LOGDOMAIN, "Provider \"%s\" not available", backendName?backendName:""); return GWEN_ERROR_NOT_FOUND; } else { int rv; rv=AB_Provider_Control(pro, argc, argv); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); } else if (rv>0) { DBG_INFO(AQBANKING_LOGDOMAIN, "Error in provider control function (%d)", rv); } AB_Banking_EndUseProvider(ab, pro); return rv; } } GWEN_PLUGIN_DESCRIPTION_LIST2 *AB_Banking_GetProviderDescrs(AB_BANKING *ab) { GWEN_PLUGIN_DESCRIPTION_LIST2 *l; GWEN_PLUGIN_MANAGER *pm; pm = GWEN_PluginManager_FindPluginManager("provider"); if (!pm) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Could not find plugin manager for \"%s\"", "provider"); return 0; } l = GWEN_PluginManager_GetPluginDescrs(pm); if (l) { GWEN_PLUGIN_DESCRIPTION_LIST2_ITERATOR *it; GWEN_PLUGIN_DESCRIPTION *pd; it=GWEN_PluginDescription_List2_First(l); assert(it); pd=GWEN_PluginDescription_List2Iterator_Data(it); assert(pd); while (pd) { GWEN_PluginDescription_SetIsActive(pd, 1); pd=GWEN_PluginDescription_List2Iterator_Next(it); } GWEN_PluginDescription_List2Iterator_free(it); } return l; } int AB_Banking_GetCryptToken(AB_BANKING *ab, const char *tname, const char *cname, GWEN_CRYPT_TOKEN **pCt) { GWEN_CRYPT_TOKEN *ct=NULL; assert(ab); assert(pCt); if (!tname || !cname) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Error in your configuration: TokenType \"%s\" or TokenName \"%s\" is NULL. " "Maybe you need to remove your configuration and create it again? Aborting.", tname ? tname : "NULL", cname ? cname : "NULL"); return GWEN_ERROR_GENERIC; } ct=_findCryptToken(ab, tname, cname); if (ct==NULL) { ct=_createCryptTokenObject(ab, tname, cname); if (ct==0) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Could not create crypt token"); return GWEN_ERROR_IO; } if (GWEN_Gui_GetFlags(GWEN_Gui_GetGui()) & GWEN_GUI_FLAGS_NONINTERACTIVE) { /* in non-interactive mode, so don't use the secure pin input of card readers because * that wouldn't give us a chance to inject the pin via a pinfile */ GWEN_Crypt_Token_AddModes(ct, GWEN_CRYPT_TOKEN_MODE_FORCE_PIN_ENTRY); } /* add to internal list */ GWEN_Crypt_Token_List2_PushBack(ab->cryptTokenList, ct); } *pCt=ct; return 0; } GWEN_CRYPT_TOKEN *_findCryptToken(AB_BANKING *ab, const char *tname, const char *cname) { GWEN_CRYPT_TOKEN *ct=NULL; GWEN_CRYPT_TOKEN_LIST2_ITERATOR *it; it=GWEN_Crypt_Token_List2_First(ab->cryptTokenList); if (it) { ct=GWEN_Crypt_Token_List2Iterator_Data(it); assert(ct); while (ct) { const char *s1; const char *s2; s1=GWEN_Crypt_Token_GetTypeName(ct); s2=GWEN_Crypt_Token_GetTokenName(ct); assert(s1); assert(s2); if (strcasecmp(s1, tname)==0 && strcasecmp(s2, cname)==0) break; ct=GWEN_Crypt_Token_List2Iterator_Next(it); } GWEN_Crypt_Token_List2Iterator_free(it); } return ct; } GWEN_CRYPT_TOKEN *_createCryptTokenObject(AB_BANKING *ab, const char *tname, const char *cname) { GWEN_PLUGIN_MANAGER *pm; GWEN_PLUGIN *pl; GWEN_CRYPT_TOKEN *ct; /* get crypt token */ pm=GWEN_PluginManager_FindPluginManager(GWEN_CRYPT_TOKEN_PLUGIN_TYPENAME); if (pm==0) { DBG_ERROR(AQBANKING_LOGDOMAIN, "CryptToken plugin manager not found"); return NULL; } pl=GWEN_PluginManager_GetPlugin(pm, tname); if (pl==NULL) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Plugin \"%s\" not found", tname); return NULL; } ct=GWEN_Crypt_Token_Plugin_CreateToken(pl, cname); if (ct==0) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Could not create crypt token"); return NULL; } return ct; } void AB_Banking_ClearCryptTokenList(AB_BANKING *ab) { GWEN_CRYPT_TOKEN_LIST2_ITERATOR *it; assert(ab); assert(ab->cryptTokenList); it=GWEN_Crypt_Token_List2_First(ab->cryptTokenList); if (it) { GWEN_CRYPT_TOKEN *ct; ct=GWEN_Crypt_Token_List2Iterator_Data(it); assert(ct); while (ct) { while (GWEN_Crypt_Token_IsOpen(ct)) { int rv; rv=GWEN_Crypt_Token_Close(ct, 0, 0); if (rv) { DBG_WARN(AQBANKING_LOGDOMAIN, "Could not close crypt token [%s:%s], abandoning (%d)", GWEN_Crypt_Token_GetTypeName(ct), GWEN_Crypt_Token_GetTokenName(ct), rv); GWEN_Crypt_Token_Close(ct, 1, 0); } } GWEN_Crypt_Token_free(ct); ct=GWEN_Crypt_Token_List2Iterator_Next(it); } GWEN_Crypt_Token_List2Iterator_free(it); } GWEN_Crypt_Token_List2_Clear(ab->cryptTokenList); } int AB_Banking_CheckCryptToken(AB_BANKING *ab, GWEN_CRYPT_TOKEN_DEVICE devt, GWEN_BUFFER *typeName, GWEN_BUFFER *tokenName) { GWEN_PLUGIN_MANAGER *pm; int rv; /* get crypt token */ pm=GWEN_PluginManager_FindPluginManager(GWEN_CRYPT_TOKEN_PLUGIN_TYPENAME); if (pm==0) { DBG_ERROR(AQBANKING_LOGDOMAIN, "CryptToken plugin manager not found"); return GWEN_ERROR_NOT_FOUND; } /* try to determine the type and name */ rv=GWEN_Crypt_Token_PluginManager_CheckToken(pm, devt, typeName, tokenName, 0); if (rv) { DBG_ERROR(AQBANKING_LOGDOMAIN, "here (%d)", rv); return rv; } return 0; } int AB_Banking_GetCert(AB_BANKING *ab, const char *url, const char *defaultProto, int defaultPort, uint32_t *httpFlags, uint32_t pid) { int rv; GWEN_HTTP_SESSION *sess; sess=GWEN_HttpSession_new(url, defaultProto, defaultPort); GWEN_HttpSession_SetFlags(sess, *httpFlags); rv=GWEN_HttpSession_Init(sess); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); GWEN_Gui_ProgressLog2(pid, GWEN_LoggerLevel_Error, I18N("Could not init HTTP session (%d)"), rv); GWEN_HttpSession_free(sess); return rv; } rv=GWEN_HttpSession_ConnectionTest(sess); if (rv<0) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Could not connect to server (%d)", rv); GWEN_Gui_ProgressLog2(pid, GWEN_LoggerLevel_Error, I18N("Could not connect to server, giving up (%d)"), rv); return rv; } *httpFlags=GWEN_HttpSession_GetFlags(sess); GWEN_HttpSession_Fini(sess); GWEN_HttpSession_free(sess); GWEN_Gui_ProgressLog(pid, GWEN_LoggerLevel_Notice, I18N("Connection ok, certificate probably received")); return 0; } int AB_Banking_SendCommands(AB_BANKING *ab, AB_TRANSACTION_LIST2 *commandList, AB_IMEXPORTER_CONTEXT *ctx) { uint32_t pid; int rv; pid=GWEN_Gui_ProgressStart(GWEN_GUI_PROGRESS_ALLOW_SUBLEVELS | GWEN_GUI_PROGRESS_SHOW_PROGRESS | GWEN_GUI_PROGRESS_SHOW_LOG | GWEN_GUI_PROGRESS_ALWAYS_SHOW_LOG | GWEN_GUI_PROGRESS_KEEP_OPEN | GWEN_GUI_PROGRESS_SHOW_ABORT, I18N("Executing Jobs"), I18N("Now the jobs are send via their " "backends to the credit institutes."), 0, /* no progress count */ 0); GWEN_Gui_ProgressLog(pid, GWEN_LoggerLevel_Notice, "AqBanking v"AQBANKING_VERSION_FULL_STRING); GWEN_Gui_ProgressLog(pid, GWEN_LoggerLevel_Notice, I18N("Sending jobs to the bank(s)")); rv=_sendCommandsInsideProgress(ab, commandList, ctx, pid); AB_Banking_ClearCryptTokenList(ab); if (rv) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); } GWEN_Gui_ProgressEnd(pid); return rv; } int _sendCommandsInsideProgress(AB_BANKING *ab, AB_TRANSACTION_LIST2 *commandList, AB_IMEXPORTER_CONTEXT *ctx, uint32_t pid) { AB_ACCOUNTQUEUE_LIST *aql; AB_PROVIDERQUEUE_LIST *pql; int rv; /* sort commands by account */ GWEN_Gui_ProgressLog(pid, GWEN_LoggerLevel_Info, I18N("Sorting commands by account")); aql=AB_AccountQueue_List_new(); rv=_sortCommandsByAccounts(ab, commandList, aql, pid); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); AB_AccountQueue_List_free(aql); return rv; } /* sort account queues by provider */ GWEN_Gui_ProgressLog(pid, GWEN_LoggerLevel_Info, I18N("Sorting account queues by provider")); pql=AB_ProviderQueue_List_new(); rv=_sortAccountQueuesByProvider(ab, aql, pql, pid); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); AB_ProviderQueue_List_free(pql); AB_AccountQueue_List_free(aql); return rv; } AB_AccountQueue_List_free(aql); /* no longer needed */ /* send to each backend */ GWEN_Gui_ProgressLog(pid, GWEN_LoggerLevel_Info, I18N("Send commands to providers")); rv=_sendProviderQueues(ab, pql, ctx, pid); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); return rv; } AB_ProviderQueue_List_free(pql); /* done */ return 0; } int _sortCommandsByAccounts(AB_BANKING *ab, AB_TRANSACTION_LIST2 *commandList, AB_ACCOUNTQUEUE_LIST *aql, uint32_t pid) { AB_TRANSACTION_LIST2_ITERATOR *jit; AB_ACCOUNTQUEUE *aq; /* sort commands by account */ jit=AB_Transaction_List2_First(commandList); if (jit) { AB_TRANSACTION *t; t=AB_Transaction_List2Iterator_Data(jit); while (t) { AB_TRANSACTION_STATUS tStatus; tStatus=AB_Transaction_GetStatus(t); if (tStatus==AB_Transaction_StatusUnknown || tStatus==AB_Transaction_StatusNone || tStatus==AB_Transaction_StatusEnqueued) { uint32_t uid; uid=AB_Transaction_GetUniqueAccountId(t); if (uid==0) { DBG_ERROR(AQBANKING_LOGDOMAIN, "No unique account id given in transaction, aborting"); return GWEN_ERROR_BAD_DATA; } /* get or create account queue */ aq=AB_AccountQueue_List_GetByAccountId(aql, uid); if (aq==NULL) { aq=AB_AccountQueue_new(); AB_AccountQueue_SetAccountId(aq, uid); AB_AccountQueue_List_Add(aq, aql); } /* assign unique id to job (if none) */ if (AB_Transaction_GetUniqueId(t)==0) AB_Transaction_SetUniqueId(t, AB_Banking_GetNamedUniqueId(ab, "jobid", 1)); AB_Transaction_SetRefUniqueId(t, 0); /* set status */ AB_Transaction_SetStatus(t, AB_Transaction_StatusEnqueued); /* add to queue */ AB_AccountQueue_AddTransaction(aq, t); AB_Banking_LogMsgForJobId(ab, AB_Transaction_GetUniqueId(t), "Job added to queue for account %08x", (unsigned int) uid); } /* if status matches */ else { DBG_ERROR(AQBANKING_LOGDOMAIN, "Transaction with bad status, not enqueuing (%d: %s)", tStatus, AB_Transaction_Status_toString(tStatus)); AB_Banking_LogMsgForJobId(ab, AB_Transaction_GetUniqueId(t), "%s", "Job not added to account queue due to bad status"); /* TODO: change status, add to im-/export context */ } t=AB_Transaction_List2Iterator_Next(jit); } AB_Transaction_List2Iterator_free(jit); } /* if (jit) */ return 0; } int _sortAccountQueuesByProvider(AB_BANKING *ab, AB_ACCOUNTQUEUE_LIST *aql, AB_PROVIDERQUEUE_LIST *pql, uint32_t pid) { AB_ACCOUNTQUEUE *aq; AB_PROVIDERQUEUE *pq; int rv; /* sort account queues by provider */ while ((aq=AB_AccountQueue_List_First(aql))) { uint32_t uid; AB_ACCOUNT_SPEC *as=NULL; const char *s; uid=AB_AccountQueue_GetAccountId(aq); rv=AB_Banking_GetAccountSpecByUniqueId(ab, uid, &as); if (rv<0) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Unable to load account spec for account %lu (%d)", (unsigned long int)uid, rv); return GWEN_ERROR_BAD_DATA; } AB_AccountQueue_SetAccountSpec(aq, as); s=AB_AccountSpec_GetBackendName(as); if (!(s && *s)) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Account spec for account %lu has no backend setting", (unsigned long int)uid); return GWEN_ERROR_BAD_DATA; } pq=AB_ProviderQueue_List_GetByProviderName(pql, s); if (pq==NULL) { pq=AB_ProviderQueue_new(); AB_ProviderQueue_SetProviderName(pq, s); AB_ProviderQueue_List_Add(pq, pql); } AB_AccountQueue_List_Del(aq); AB_ProviderQueue_AddAccountQueue(pq, aq); } return 0; } int _sendProviderQueues(AB_BANKING *ab, AB_PROVIDERQUEUE_LIST *pql, AB_IMEXPORTER_CONTEXT *ctx, uint32_t pid) { AB_PROVIDERQUEUE *pq; int rv; pq=AB_ProviderQueue_List_First(pql); while (pq) { AB_PROVIDERQUEUE *pqNext; const char *providerName; pqNext=AB_ProviderQueue_List_Next(pq); AB_ProviderQueue_List_Del(pq); providerName=AB_ProviderQueue_GetProviderName(pq); if (providerName && *providerName) { AB_PROVIDER *pro; pro=AB_Banking_BeginUseProvider(ab, providerName); if (pro) { AB_IMEXPORTER_CONTEXT *localCtx; GWEN_Gui_ProgressLog2(pid, GWEN_LoggerLevel_Info, I18N("Send commands to provider \"%s\""), providerName); localCtx=AB_ImExporterContext_new(); rv=AB_Provider_SendCommands(pro, pq, localCtx); if (rv<0) { GWEN_Gui_ProgressLog2(pid, GWEN_LoggerLevel_Error, I18N("Error sending commands to provider \"%s\":%d"), providerName, rv); DBG_INFO(AQBANKING_LOGDOMAIN, "Error sending commands to provider \"%s\" (%d)", AB_Provider_GetName(pro), rv); } AB_ImExporterContext_AddContext(ctx, localCtx); AB_Banking_EndUseProvider(ab, pro); } else { GWEN_Gui_ProgressLog2(pid, GWEN_LoggerLevel_Info, I18N("Provider \"%s\" is not available."), providerName); DBG_ERROR(AQBANKING_LOGDOMAIN, "Could not start using provider \"%s\"", providerName); } } AB_ProviderQueue_free(pq); pq=pqNext; } return 0; } uint32_t AB_Banking_ReserveJobId(AB_BANKING *ab) { return AB_Banking_GetNamedUniqueId(ab, "jobid", 1); } aqbanking-6.6.1/src/libs/aqbanking/account_type.h0000664000175000017500000000267014043610744016733 00000000000000/*************************************************************************** begin : Sat Jun 30 2018 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ /** @file account_type.h * @short Definiton of account types. */ #ifndef AQBANKING_ACCOUNT_TYPE_H #define AQBANKING_ACCOUNT_TYPE_H typedef enum { AB_AccountType_Invalid=-1, AB_AccountType_Unknown=0, AB_AccountType_Bank, AB_AccountType_CreditCard, AB_AccountType_Checking, AB_AccountType_Savings, AB_AccountType_Investment, AB_AccountType_Cash, AB_AccountType_MoneyMarket, AB_AccountType_Credit, AB_AccountType_Unspecified=100, AB_AccountType_Last } AB_ACCOUNT_TYPE; #include /** * Translate account type to a string (e.g. AB_AccountType_CreditCard -> "creditcard"). */ AQBANKING_API /*@observer@*/ /*@null@*/ const char *AB_AccountType_toChar(AB_ACCOUNT_TYPE ty); /** * Translate account type from a string (e.g. "creditcard" -> AB_AccountType_CreditCard). * @return account type (or AB_AccountType_Invalid on error). */ AQBANKING_API AB_ACCOUNT_TYPE AB_AccountType_fromChar(const char *s); #endif aqbanking-6.6.1/src/libs/aqbanking/banking_compat.c0000664000175000017500000000406614043610744017206 00000000000000/*************************************************************************** begin : Thu Dec 13 2018 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ int AB_Banking_SetAccountSpecAlias(AB_BANKING *ab, const AB_ACCOUNT_SPEC *as, const char *alias) { int rv; GWEN_DB_NODE *dbConfig=NULL; GWEN_DB_NODE *db; rv=AB_Banking_ReadNamedConfigGroup(ab, AB_CFG_GROUP_APPS, ab->appName, 1, 0, &dbConfig); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); return rv; } db=GWEN_DB_GetGroup(dbConfig, GWEN_DB_FLAGS_DEFAULT, "banking/aliases"); GWEN_DB_SetIntValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, alias, AB_AccountSpec_GetUniqueId(as)); rv=AB_Banking_WriteNamedConfigGroup(ab, AB_CFG_GROUP_APPS, ab->appName, 0, 1, dbConfig); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); GWEN_DB_Group_free(dbConfig); return rv; } GWEN_DB_Group_free(dbConfig); return 0; } AB_ACCOUNT_SPEC *AB_Banking_GetAccountSpecByAlias(AB_BANKING *ab, const char *alias) { GWEN_DB_NODE *dbConfig=NULL; GWEN_DB_NODE *db; AB_ACCOUNT_SPEC *as=NULL; uint32_t aid; int rv; rv=AB_Banking_ReadNamedConfigGroup(ab, AB_CFG_GROUP_APPS, ab->appName, 1, 1, &dbConfig); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); return NULL; } db=GWEN_DB_GetGroup(dbConfig, GWEN_DB_FLAGS_DEFAULT, "banking/aliases"); aid=GWEN_DB_GetIntValue(db, alias, 0, 0); if (aid<1) { DBG_ERROR(AQBANKING_LOGDOMAIN, "No account id for alias \"%s\"", alias); GWEN_DB_Group_free(dbConfig); return NULL; } GWEN_DB_Group_free(dbConfig); rv=AB_Banking_GetAccountSpecByUniqueId(ab, aid, &as); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); return NULL; } return as; } aqbanking-6.6.1/src/libs/aqbanking/banking_bankinfo.h0000664000175000017500000001025714043610744017516 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQBANKING_BANKING_INFO_H #define AQBANKING_BANKING_INFO_H #include typedef enum { AB_BankInfoCheckResult_Ok=0, AB_BankInfoCheckResult_NotOk, AB_BankInfoCheckResult_UnknownBank, AB_BankInfoCheckResult_UnknownResult } AB_BANKINFO_CHECKRESULT; #ifdef __cplusplus extern "C" { #endif /** @addtogroup G_AB_INFO */ /*@{*/ /** @name Getting Bank/Account Information * * Functions in this group retrieve information about credit institutes and * allow checking of bank code/account id combinations. * These functions load the appropriate checker plugins for selected * countries. */ /*@{*/ /** * This functions retrieves information about a given bank. It loads the * appropriate bank checker module and asks it for information about the given * bank. The caller is responsible for freeing the object returned (if any) * by calling @ref AB_BankInfo_free. * @param ab AqBanking main object * @param country ISO country code ("de" for Germany, "at" for Austria etc) * @param branchId optional branch id (not needed for "de") * @param bankId bank id ("Bankleitzahl" for "de") */ AQBANKING_API AB_BANKINFO *AB_Banking_GetBankInfo(AB_BANKING *ab, const char *country, const char *branchId, const char *bankId); /** * This function retrieves information about banks. It loads the * appropriate bank checker module and asks it for a list of AB_BANKINFO * objects which match the given template. Empty fields in this template * always match. Service entries (AB_BANKINFO_SERVICE) are not compared. * Matching entries are added to the given list. * The caller is responsible for freeing the objects returned (if any) * by calling @ref AB_BankInfo_free (or by calling * @ref AB_BankInfo_List_freeAll). * @param ab AqBanking main object * @param country ISO country code ("de" for Germany, "at" for Austria etc) * @param tbi template to compare against * @param bl list to which matching banks are added */ AQBANKING_API int AB_Banking_GetBankInfoByTemplate(AB_BANKING *ab, const char *country, AB_BANKINFO *tbi, AB_BANKINFO_LIST2 *bl); /** * This function checks whether the given combination represents a valid * account. It loads the appropriate bank checker module and lets it check * the information. * @param ab AqBanking main object * @param country ISO country code ("de" for Germany, "at" for Austria etc) * @param branchId optional branch id (not needed for "de") * @param bankId bank id ("Bankleitzahl" for "de") * @param accountId account id */ AQBANKING_API AB_BANKINFO_CHECKRESULT AB_Banking_CheckAccount(AB_BANKING *ab, const char *country, const char *branchId, const char *bankId, const char *accountId); /** * Checks whether a given international bank account number (IBAN) is * valid or not. * @return 0 if valid, 1 if not and -1 on error * @param iban IBAN (e.g. "DE88 2008 0000 09703 7570 0") */ AQBANKING_API int AB_Banking_CheckIban(const char *iban); /** * Create an IBAN from German bank code and account number. */ AQBANKING_API int AB_Banking_MakeGermanIban(const char *bankCode, const char *accountNumber, GWEN_BUFFER *ibanBuf); /*@}*/ /*@}*/ /* addtogroup */ #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/aqbanking/types/0000755000175000017500000000000015037736156015314 500000000000000aqbanking-6.6.1/src/libs/aqbanking/types/ab_imexporter_context_list.tm20000664000175000017500000000040415037736054023314 00000000000000 AB_IMEXPORTER_CONTEXT_LIST AB_ImExporterContext_List aqbanking-6.6.1/src/libs/aqbanking/types/account_spec.h0000664000175000017500000004102415037736054020053 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "account_spec.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef AB_ACCOUNT_SPEC_ACCOUNT_SPEC_H #define AB_ACCOUNT_SPEC_ACCOUNT_SPEC_H #ifdef __cplusplus extern "C" { #endif /** @page P_AB_ACCOUNT_SPEC Structure AB_ACCOUNT_SPEC

This page describes the properties of AB_ACCOUNT_SPEC.

AB_ACCOUNT_SPEC

This type contains all important information about accounts. All text fields are in UTF-8.

Type

@anchor AB_ACCOUNT_SPEC_type

type

Set this property with @ref AB_AccountSpec_SetType(), get it with @ref AB_AccountSpec_GetType().

Identifiers

@anchor AB_ACCOUNT_SPEC_uniqueId

uniqueId

This is a unique id assigned by AqBanking.

Set this property with @ref AB_AccountSpec_SetUniqueId(), get it with @ref AB_AccountSpec_GetUniqueId().

Common Information

@anchor AB_ACCOUNT_SPEC_backendName

backendName

Name of the banking backend this account belongs to.

Set this property with @ref AB_AccountSpec_SetBackendName(), get it with @ref AB_AccountSpec_GetBackendName().

@anchor AB_ACCOUNT_SPEC_ownerName

ownerName

Name of the account owner as it is stored with the bank.

Set this property with @ref AB_AccountSpec_SetOwnerName(), get it with @ref AB_AccountSpec_GetOwnerName().

@anchor AB_ACCOUNT_SPEC_accountName

accountName

Name of the account.

Set this property with @ref AB_AccountSpec_SetAccountName(), get it with @ref AB_AccountSpec_GetAccountName().

@anchor AB_ACCOUNT_SPEC_currency

currency

Currency used with this account.

Set this property with @ref AB_AccountSpec_SetCurrency(), get it with @ref AB_AccountSpec_GetCurrency().

@anchor AB_ACCOUNT_SPEC_memo

memo

Optional additional info.

Set this property with @ref AB_AccountSpec_SetMemo(), get it with @ref AB_AccountSpec_GetMemo().

SEPA Account Specification

@anchor AB_ACCOUNT_SPEC_iban

iban

Internation bank account number as specified by the SEPA specs.

Set this property with @ref AB_AccountSpec_SetIban(), get it with @ref AB_AccountSpec_GetIban().

@anchor AB_ACCOUNT_SPEC_bic

bic

SWIFT code of the bank at which this account is registered.

Set this property with @ref AB_AccountSpec_SetBic(), get it with @ref AB_AccountSpec_GetBic().

Non-SEPA Account Specification

@anchor AB_ACCOUNT_SPEC_country

country

Set this property with @ref AB_AccountSpec_SetCountry(), get it with @ref AB_AccountSpec_GetCountry().

@anchor AB_ACCOUNT_SPEC_bankCode

bankCode

National bank code (e.g. BLZ in Germany, routing number in other countries).

Set this property with @ref AB_AccountSpec_SetBankCode(), get it with @ref AB_AccountSpec_GetBankCode().

@anchor AB_ACCOUNT_SPEC_bankName

bankName

National bank name

Set this property with @ref AB_AccountSpec_SetBankName(), get it with @ref AB_AccountSpec_GetBankName().

@anchor AB_ACCOUNT_SPEC_branchId

branchId

This is the branch id of the local bank (OFX only)

Set this property with @ref AB_AccountSpec_SetBranchId(), get it with @ref AB_AccountSpec_GetBranchId().

@anchor AB_ACCOUNT_SPEC_accountNumber

accountNumber

Account number in national account specification.

Set this property with @ref AB_AccountSpec_SetAccountNumber(), get it with @ref AB_AccountSpec_GetAccountNumber().

@anchor AB_ACCOUNT_SPEC_subAccountNumber

subAccountNumber

If your account has subaccounts which are distinguished by different suffixes, then this is that suffix. Otherwise it's empty. (HBCI only)

Set this property with @ref AB_AccountSpec_SetSubAccountNumber(), get it with @ref AB_AccountSpec_GetSubAccountNumber().

Transaction Limits

@anchor AB_ACCOUNT_SPEC_transactionLimitsList

transactionLimitsList

This list contains one ABS_TRANSACTION_HINTS object per command allowed with this account. Not every backend supports transaction hints, so this list might be entirely empty or missing some entries.

Set this property with @ref AB_AccountSpec_SetTransactionLimitsList(), get it with @ref AB_AccountSpec_GetTransactionLimitsList().

Reference Accounts

@anchor AB_ACCOUNT_SPEC_refAccountList

refAccountList

This list contains the reference accounts for internal transfers

Set this property with @ref AB_AccountSpec_SetRefAccountList(), get it with @ref AB_AccountSpec_GetRefAccountList().

*/ /* needed system headers */ #include #include #include #include #include /* pre-headers */ #include #include #include #include #include typedef struct AB_ACCOUNT_SPEC AB_ACCOUNT_SPEC; GWEN_LIST_FUNCTION_LIB_DEFS(AB_ACCOUNT_SPEC, AB_AccountSpec, AQBANKING_API) GWEN_LIST2_FUNCTION_LIB_DEFS(AB_ACCOUNT_SPEC, AB_AccountSpec, AQBANKING_API) /* post-headers */ #include #include #include #include /** Constructor. */ AQBANKING_API AB_ACCOUNT_SPEC *AB_AccountSpec_new(void); /** Destructor. */ AQBANKING_API void AB_AccountSpec_free(AB_ACCOUNT_SPEC *p_struct); AQBANKING_API void AB_AccountSpec_Attach(AB_ACCOUNT_SPEC *p_struct); AQBANKING_API AB_ACCOUNT_SPEC *AB_AccountSpec_dup(const AB_ACCOUNT_SPEC *p_src); AQBANKING_API AB_ACCOUNT_SPEC *AB_AccountSpec_copy(AB_ACCOUNT_SPEC *p_struct, const AB_ACCOUNT_SPEC *p_src); /** Getter. * Use this function to get the member "type" (see @ref AB_ACCOUNT_SPEC_type) */ AQBANKING_API int AB_AccountSpec_GetType(const AB_ACCOUNT_SPEC *p_struct); /** Getter. * Use this function to get the member "uniqueId" (see @ref AB_ACCOUNT_SPEC_uniqueId) */ AQBANKING_API uint32_t AB_AccountSpec_GetUniqueId(const AB_ACCOUNT_SPEC *p_struct); /** Getter. * Use this function to get the member "backendName" (see @ref AB_ACCOUNT_SPEC_backendName) */ AQBANKING_API const char *AB_AccountSpec_GetBackendName(const AB_ACCOUNT_SPEC *p_struct); /** Getter. * Use this function to get the member "ownerName" (see @ref AB_ACCOUNT_SPEC_ownerName) */ AQBANKING_API const char *AB_AccountSpec_GetOwnerName(const AB_ACCOUNT_SPEC *p_struct); /** Getter. * Use this function to get the member "accountName" (see @ref AB_ACCOUNT_SPEC_accountName) */ AQBANKING_API const char *AB_AccountSpec_GetAccountName(const AB_ACCOUNT_SPEC *p_struct); /** Getter. * Use this function to get the member "currency" (see @ref AB_ACCOUNT_SPEC_currency) */ AQBANKING_API const char *AB_AccountSpec_GetCurrency(const AB_ACCOUNT_SPEC *p_struct); /** Getter. * Use this function to get the member "memo" (see @ref AB_ACCOUNT_SPEC_memo) */ AQBANKING_API const char *AB_AccountSpec_GetMemo(const AB_ACCOUNT_SPEC *p_struct); /** Getter. * Use this function to get the member "iban" (see @ref AB_ACCOUNT_SPEC_iban) */ AQBANKING_API const char *AB_AccountSpec_GetIban(const AB_ACCOUNT_SPEC *p_struct); /** Getter. * Use this function to get the member "bic" (see @ref AB_ACCOUNT_SPEC_bic) */ AQBANKING_API const char *AB_AccountSpec_GetBic(const AB_ACCOUNT_SPEC *p_struct); /** Getter. * Use this function to get the member "country" (see @ref AB_ACCOUNT_SPEC_country) */ AQBANKING_API const char *AB_AccountSpec_GetCountry(const AB_ACCOUNT_SPEC *p_struct); /** Getter. * Use this function to get the member "bankCode" (see @ref AB_ACCOUNT_SPEC_bankCode) */ AQBANKING_API const char *AB_AccountSpec_GetBankCode(const AB_ACCOUNT_SPEC *p_struct); /** Getter. * Use this function to get the member "bankName" (see @ref AB_ACCOUNT_SPEC_bankName) */ AQBANKING_API const char *AB_AccountSpec_GetBankName(const AB_ACCOUNT_SPEC *p_struct); /** Getter. * Use this function to get the member "branchId" (see @ref AB_ACCOUNT_SPEC_branchId) */ AQBANKING_API const char *AB_AccountSpec_GetBranchId(const AB_ACCOUNT_SPEC *p_struct); /** Getter. * Use this function to get the member "accountNumber" (see @ref AB_ACCOUNT_SPEC_accountNumber) */ AQBANKING_API const char *AB_AccountSpec_GetAccountNumber(const AB_ACCOUNT_SPEC *p_struct); /** Getter. * Use this function to get the member "subAccountNumber" (see @ref AB_ACCOUNT_SPEC_subAccountNumber) */ AQBANKING_API const char *AB_AccountSpec_GetSubAccountNumber(const AB_ACCOUNT_SPEC *p_struct); /** Getter. * Use this function to get the member "transactionLimitsList" (see @ref AB_ACCOUNT_SPEC_transactionLimitsList) */ AQBANKING_API AB_TRANSACTION_LIMITS_LIST *AB_AccountSpec_GetTransactionLimitsList(const AB_ACCOUNT_SPEC *p_struct); /** Getter. * Use this function to get the member "refAccountList" (see @ref AB_ACCOUNT_SPEC_refAccountList) */ AQBANKING_API AB_REFERENCE_ACCOUNT_LIST *AB_AccountSpec_GetRefAccountList(const AB_ACCOUNT_SPEC *p_struct); /** Setter. * Use this function to set the member "type" (see @ref AB_ACCOUNT_SPEC_type) */ AQBANKING_API void AB_AccountSpec_SetType(AB_ACCOUNT_SPEC *p_struct, int p_src); /** Setter. * Use this function to set the member "uniqueId" (see @ref AB_ACCOUNT_SPEC_uniqueId) */ AQBANKING_API void AB_AccountSpec_SetUniqueId(AB_ACCOUNT_SPEC *p_struct, uint32_t p_src); /** Setter. * Use this function to set the member "backendName" (see @ref AB_ACCOUNT_SPEC_backendName) */ AQBANKING_API void AB_AccountSpec_SetBackendName(AB_ACCOUNT_SPEC *p_struct, const char *p_src); /** Setter. * Use this function to set the member "ownerName" (see @ref AB_ACCOUNT_SPEC_ownerName) */ AQBANKING_API void AB_AccountSpec_SetOwnerName(AB_ACCOUNT_SPEC *p_struct, const char *p_src); /** Setter. * Use this function to set the member "accountName" (see @ref AB_ACCOUNT_SPEC_accountName) */ AQBANKING_API void AB_AccountSpec_SetAccountName(AB_ACCOUNT_SPEC *p_struct, const char *p_src); /** Setter. * Use this function to set the member "currency" (see @ref AB_ACCOUNT_SPEC_currency) */ AQBANKING_API void AB_AccountSpec_SetCurrency(AB_ACCOUNT_SPEC *p_struct, const char *p_src); /** Setter. * Use this function to set the member "memo" (see @ref AB_ACCOUNT_SPEC_memo) */ AQBANKING_API void AB_AccountSpec_SetMemo(AB_ACCOUNT_SPEC *p_struct, const char *p_src); /** Setter. * Use this function to set the member "iban" (see @ref AB_ACCOUNT_SPEC_iban) */ AQBANKING_API void AB_AccountSpec_SetIban(AB_ACCOUNT_SPEC *p_struct, const char *p_src); /** Setter. * Use this function to set the member "bic" (see @ref AB_ACCOUNT_SPEC_bic) */ AQBANKING_API void AB_AccountSpec_SetBic(AB_ACCOUNT_SPEC *p_struct, const char *p_src); /** Setter. * Use this function to set the member "country" (see @ref AB_ACCOUNT_SPEC_country) */ AQBANKING_API void AB_AccountSpec_SetCountry(AB_ACCOUNT_SPEC *p_struct, const char *p_src); /** Setter. * Use this function to set the member "bankCode" (see @ref AB_ACCOUNT_SPEC_bankCode) */ AQBANKING_API void AB_AccountSpec_SetBankCode(AB_ACCOUNT_SPEC *p_struct, const char *p_src); /** Setter. * Use this function to set the member "bankName" (see @ref AB_ACCOUNT_SPEC_bankName) */ AQBANKING_API void AB_AccountSpec_SetBankName(AB_ACCOUNT_SPEC *p_struct, const char *p_src); /** Setter. * Use this function to set the member "branchId" (see @ref AB_ACCOUNT_SPEC_branchId) */ AQBANKING_API void AB_AccountSpec_SetBranchId(AB_ACCOUNT_SPEC *p_struct, const char *p_src); /** Setter. * Use this function to set the member "accountNumber" (see @ref AB_ACCOUNT_SPEC_accountNumber) */ AQBANKING_API void AB_AccountSpec_SetAccountNumber(AB_ACCOUNT_SPEC *p_struct, const char *p_src); /** Setter. * Use this function to set the member "subAccountNumber" (see @ref AB_ACCOUNT_SPEC_subAccountNumber) */ AQBANKING_API void AB_AccountSpec_SetSubAccountNumber(AB_ACCOUNT_SPEC *p_struct, const char *p_src); /** Setter. * Use this function to set the member "transactionLimitsList" (see @ref AB_ACCOUNT_SPEC_transactionLimitsList) */ AQBANKING_API void AB_AccountSpec_SetTransactionLimitsList(AB_ACCOUNT_SPEC *p_struct, AB_TRANSACTION_LIMITS_LIST *p_src); /** Setter. * Use this function to set the member "refAccountList" (see @ref AB_ACCOUNT_SPEC_refAccountList) */ AQBANKING_API void AB_AccountSpec_SetRefAccountList(AB_ACCOUNT_SPEC *p_struct, AB_REFERENCE_ACCOUNT_LIST *p_src); AQBANKING_API AB_ACCOUNT_SPEC_LIST *AB_AccountSpec_List_dup(const AB_ACCOUNT_SPEC_LIST *p_src); AQBANKING_API void AB_AccountSpec_ReadDb(AB_ACCOUNT_SPEC *p_struct, GWEN_DB_NODE *p_db); AQBANKING_API int AB_AccountSpec_WriteDb(const AB_ACCOUNT_SPEC *p_struct, GWEN_DB_NODE *p_db); AQBANKING_API AB_ACCOUNT_SPEC *AB_AccountSpec_fromDb(GWEN_DB_NODE *p_db); AQBANKING_API int AB_AccountSpec_toDb(const AB_ACCOUNT_SPEC *p_struct, GWEN_DB_NODE *p_db); AQBANKING_API void AB_AccountSpec_ReadXml(AB_ACCOUNT_SPEC *p_struct, GWEN_XMLNODE *p_db); AQBANKING_API void AB_AccountSpec_WriteXml(const AB_ACCOUNT_SPEC *p_struct, GWEN_XMLNODE *p_db); AQBANKING_API void AB_AccountSpec_toXml(const AB_ACCOUNT_SPEC *p_struct, GWEN_XMLNODE *p_db); AQBANKING_API AB_ACCOUNT_SPEC *AB_AccountSpec_fromXml(GWEN_XMLNODE *p_db); AQBANKING_API AB_ACCOUNT_SPEC *AB_AccountSpec_List_GetByUniqueId(const AB_ACCOUNT_SPEC_LIST *p_list, uint32_t p_cmp); /** * Check whether a given account info object matches the given criteria. * @param a account info object to match * @param backendName name of the banking backend (wildcards and jokers allowed) * @param country ISO code of the country (wildcards and jokers allowed) * @param bankId bank code to search for (wildcards and jokers allowed) * @param accountNumber account number to search for (wildcards and jokers allowed) * @param subAccountId sub account number (wildcards and jokers allowed) * @param iban IBAN to search for (wildcards and jokers allowed) * @param currency currecny the account uses (wildcards and jokers allowed) * @param ty account type (use AB_AccountType_Unknown as wildcard) */ AQBANKING_API int AB_AccountSpec_Matches(const AB_ACCOUNT_SPEC *a, const char *backendName, const char *country, const char *bankId, const char *accountNumber, const char *subAccountId, const char *iban, const char *currency, int ty); /** * Find the first matching account info object in a list of account info objects. * @param al list of account info objects among to search * @param backendName name of the banking backend (wildcards and jokers allowed) * @param country ISO code of the country (wildcards and jokers allowed) * @param bankId bank code to search for (wildcards and jokers allowed) * @param accountNumber account number to search for (wildcards and jokers allowed) * @param subAccountId sub account number (wildcards and jokers allowed) * @param iban IBAN to search for (wildcards and jokers allowed) * @param currency currecny the account uses (wildcards and jokers allowed) * @param ty account type (use AB_AccountType_Unknown as wildcard) */ AQBANKING_API AB_ACCOUNT_SPEC *AB_AccountSpec_List_FindFirst(const AB_ACCOUNT_SPEC_LIST *al, const char *backendName, const char *country, const char *bankId, const char *accountNumber, const char *subAccountId, const char *iban, const char *currency, int ty); /** * Find the next matching account info object in a list of account info objects. * @param a previous matching account info objects among to search * @param backendName name of the banking backend (wildcards and jokers allowed) * @param country ISO code of the country (wildcards and jokers allowed) * @param bankId bank code to search for (wildcards and jokers allowed) * @param accountNumber account number to search for (wildcards and jokers allowed) * @param subAccountId sub account number (wildcards and jokers allowed) * @param iban IBAN to search for (wildcards and jokers allowed) * @param currency currecny the account uses (wildcards and jokers allowed) * @param ty account type (use AB_AccountType_Unknown as wildcard) */ AQBANKING_API AB_ACCOUNT_SPEC *AB_AccountSpec_List_FindNext(AB_ACCOUNT_SPEC *a, const char *backendName, const char *country, const char *bankId, const char *accountNumber, const char *subAccountId, const char *iban, const char *currency, int ty); AQBANKING_API AB_TRANSACTION_LIMITS *AB_AccountSpec_GetTransactionLimitsForCommand(const AB_ACCOUNT_SPEC *st, int cmd); AQBANKING_API void AB_AccountSpec_AddTransactionLimits(AB_ACCOUNT_SPEC *st, AB_TRANSACTION_LIMITS *l); AQBANKING_API void AB_AccountSpec_AddReferenceAccount(AB_ACCOUNT_SPEC *st, AB_REFERENCE_ACCOUNT *l); #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/aqbanking/types/document.xml0000664000175000017500000002113014044534775017573 00000000000000 AB_DOCUMENT AB_Document document with_xml with_db with_list1 with_list2 with_refcount with_hash
aqbanking/error.h
gwenhywfar/types.h
gwenhywfar/bindata.h
gwenhywfar/base64.h
with_list2 with_list2 $(api) int $(struct_prefix)_List2_freeAll($(struct_type)_LIST2 *tl); with_list2 with_list2 static $(struct_type) *$(struct_prefix)_List2__freeAll_cb($(struct_type) *t, void *user_data) { $(struct_prefix)_free(t); return NULL; } int $(struct_prefix)_List2_freeAll($(struct_type)_LIST2 *tl) { if (tl) { $(struct_prefix)_List2_ForEach(tl, $(struct_prefix)_List2__freeAll_cb, NULL); $(struct_prefix)_List2_free(tl); } else { DBG_ERROR(AQBANKING_LOGDOMAIN, "List missing"); return GWEN_ERROR_INVALID; } return 0; } $(api) void $(struct_prefix)_SetData($(struct_type) *st, const uint8_t *p, uint32_t len); void $(struct_prefix)_SetData($(struct_type) *st, const uint8_t *p, uint32_t len) { assert(st); if (st->data.length && st->data.pointer) free(st->data.pointer); if (p && len) { st->data.pointer=(uint8_t*) malloc(len); if (st->data.pointer) { st->data.length=len; memmove(st->data.pointer, p, len); } else { st->data.pointer=NULL; st->data.length=0; } } else { st->data.length=0; st->data.pointer=NULL; } } $(api) const uint8_t* $(struct_prefix)_GetDataPtr(const $(struct_type) *st); const uint8_t* $(struct_prefix)_GetDataPtr(const $(struct_type) *st) { assert(st); return st->data.pointer; } $(api) uint32_t $(struct_prefix)_GetDataLen(const $(struct_type) *st); uint32_t $(struct_prefix)_GetDataLen(const $(struct_type) *st) { assert(st); return st->data.length; } $(api) void $(struct_prefix)_SetAcknowledgeCode($(struct_type) *st, const uint8_t *p, uint32_t len); void $(struct_prefix)_SetAcknowledgeCode($(struct_type) *st, const uint8_t *p, uint32_t len) { assert(st); if (st->acknowledgeCode.length && st->acknowledgeCode.pointer) free(st->acknowledgeCode.pointer); if (p && len) { st->acknowledgeCode.pointer=(uint8_t*) malloc(len); if (st->acknowledgeCode.pointer) { st->acknowledgeCode.length=len; memmove(st->acknowledgeCode.pointer, p, len); } else { st->acknowledgeCode.pointer=NULL; st->acknowledgeCode.length=0; } } else { st->acknowledgeCode.length=0; st->acknowledgeCode.pointer=NULL; } } $(api) const uint8_t* $(struct_prefix)_GetAcknowledgeCodePtr(const $(struct_type) *st); const uint8_t* $(struct_prefix)_GetAcknowledgeCodePtr(const $(struct_type) *st) { assert(st); return st->acknowledgeCode.pointer; } $(api) uint32_t $(struct_prefix)_GetAcknowledgeCodeLen(const $(struct_type) *st); uint32_t $(struct_prefix)_GetAcknowledgeCodeLen(const $(struct_type) *st) { assert(st); return st->acknowledgeCode.length; }
public own with_hash const dup const The meaning of this field depends on the type of document. For electronic statements this is the unique id of the account this statement belongs to. 0 0 public with_hash public own with_hash const dup const public own with_hash const dup const NULL NULL public own with_hash omit omit NULL NULL public own with_hash omit omit
aqbanking-6.6.1/src/libs/aqbanking/types/ab_imexporter_context.tm20000664000175000017500000000032515037736054022263 00000000000000 AB_IMEXPORTER_CONTEXT AB_ImExporterContext aqbanking-6.6.1/src/libs/aqbanking/types/document.c0000664000175000017500000004525315037736054017226 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "document.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "./document_p.h" #include #include /* code headers */ /* macro functions */ GWEN_LIST_FUNCTIONS(AB_DOCUMENT, AB_Document) GWEN_LIST2_FUNCTIONS(AB_DOCUMENT, AB_Document) AB_DOCUMENT *AB_Document_new(void) { AB_DOCUMENT *p_struct; GWEN_NEW_OBJECT(AB_DOCUMENT, p_struct) p_struct->_refCount=1; GWEN_LIST_INIT(AB_DOCUMENT, p_struct) /* members */ p_struct->id=NULL; p_struct->ownerId=0; p_struct->mimeType=NULL; p_struct->filePath=NULL; p_struct->data.pointer=NULL; p_struct->data.length=0; p_struct->acknowledgeCode.pointer=NULL; p_struct->acknowledgeCode.length=0; /* virtual functions */ return p_struct; } void AB_Document_free(AB_DOCUMENT *p_struct) { if (p_struct) { assert(p_struct->_refCount); if (p_struct->_refCount==1) { GWEN_LIST_FINI(AB_DOCUMENT, p_struct) /* members */ free(p_struct->id); p_struct->id=NULL; free(p_struct->mimeType); p_struct->mimeType=NULL; free(p_struct->filePath); p_struct->filePath=NULL; if (p_struct->data.length && p_struct->data.pointer) { free(p_struct->data.pointer); } p_struct->data.pointer=NULL; p_struct->data.length=0; if (p_struct->acknowledgeCode.length && p_struct->acknowledgeCode.pointer) { free(p_struct->acknowledgeCode.pointer); } p_struct->acknowledgeCode.pointer=NULL; p_struct->acknowledgeCode.length=0; p_struct->_refCount=0; GWEN_FREE_OBJECT(p_struct); } else p_struct->_refCount--; } } void AB_Document_Attach(AB_DOCUMENT *p_struct) { assert(p_struct); assert(p_struct->_refCount); p_struct->_refCount++; } AB_DOCUMENT *AB_Document_dup(const AB_DOCUMENT *p_src) { AB_DOCUMENT *p_struct; assert(p_src); p_struct=AB_Document_new(); /* member "id" */ if (p_struct->id) { free(p_struct->id); p_struct->id=NULL; p_struct->id=NULL; } if (p_src->id) { p_struct->id=strdup(p_src->id); } /* member "ownerId" */ p_struct->ownerId=p_src->ownerId; /* member "mimeType" */ if (p_struct->mimeType) { free(p_struct->mimeType); p_struct->mimeType=NULL; p_struct->mimeType=NULL; } if (p_src->mimeType) { p_struct->mimeType=strdup(p_src->mimeType); } /* member "filePath" */ if (p_struct->filePath) { free(p_struct->filePath); p_struct->filePath=NULL; p_struct->filePath=NULL; } if (p_src->filePath) { p_struct->filePath=strdup(p_src->filePath); } /* member "data" */ if (p_struct->data.length && p_struct->data.pointer) { free(p_struct->data.pointer); } p_struct->data.pointer=NULL; p_struct->data.length=0; if (p_src->data.length && p_src->data.pointer) { p_struct->data.pointer=(uint8_t*) malloc(p_src->data.length); if (p_struct->data.pointer) { p_struct->data.length=p_src->data.length; memmove(p_struct->data.pointer, p_src->data.pointer, p_src->data.length); } else { p_struct->data.pointer=NULL; p_struct->data.length=0; } } else { p_struct->data.pointer=NULL; p_struct->data.length=0; } /* member "acknowledgeCode" */ if (p_struct->acknowledgeCode.length && p_struct->acknowledgeCode.pointer) { free(p_struct->acknowledgeCode.pointer); } p_struct->acknowledgeCode.pointer=NULL; p_struct->acknowledgeCode.length=0; if (p_src->acknowledgeCode.length && p_src->acknowledgeCode.pointer) { p_struct->acknowledgeCode.pointer=(uint8_t*) malloc(p_src->acknowledgeCode.length); if (p_struct->acknowledgeCode.pointer) { p_struct->acknowledgeCode.length=p_src->acknowledgeCode.length; memmove(p_struct->acknowledgeCode.pointer, p_src->acknowledgeCode.pointer, p_src->acknowledgeCode.length); } else { p_struct->acknowledgeCode.pointer=NULL; p_struct->acknowledgeCode.length=0; } } else { p_struct->acknowledgeCode.pointer=NULL; p_struct->acknowledgeCode.length=0; } return p_struct; } AB_DOCUMENT *AB_Document_copy(AB_DOCUMENT *p_struct, const AB_DOCUMENT *p_src) { assert(p_struct); assert(p_src); /* member "id" */ if (p_struct->id) { free(p_struct->id); p_struct->id=NULL; p_struct->id=NULL; } if (p_src->id) { p_struct->id=strdup(p_src->id); } /* member "ownerId" */ p_struct->ownerId=p_src->ownerId; /* member "mimeType" */ if (p_struct->mimeType) { free(p_struct->mimeType); p_struct->mimeType=NULL; p_struct->mimeType=NULL; } if (p_src->mimeType) { p_struct->mimeType=strdup(p_src->mimeType); } /* member "filePath" */ if (p_struct->filePath) { free(p_struct->filePath); p_struct->filePath=NULL; p_struct->filePath=NULL; } if (p_src->filePath) { p_struct->filePath=strdup(p_src->filePath); } /* member "data" */ if (p_struct->data.length && p_struct->data.pointer) { free(p_struct->data.pointer); } p_struct->data.pointer=NULL; p_struct->data.length=0; if (p_src->data.length && p_src->data.pointer) { p_struct->data.pointer=(uint8_t*) malloc(p_src->data.length); if (p_struct->data.pointer) { p_struct->data.length=p_src->data.length; memmove(p_struct->data.pointer, p_src->data.pointer, p_src->data.length); } else { p_struct->data.pointer=NULL; p_struct->data.length=0; } } else { p_struct->data.pointer=NULL; p_struct->data.length=0; } /* member "acknowledgeCode" */ if (p_struct->acknowledgeCode.length && p_struct->acknowledgeCode.pointer) { free(p_struct->acknowledgeCode.pointer); } p_struct->acknowledgeCode.pointer=NULL; p_struct->acknowledgeCode.length=0; if (p_src->acknowledgeCode.length && p_src->acknowledgeCode.pointer) { p_struct->acknowledgeCode.pointer=(uint8_t*) malloc(p_src->acknowledgeCode.length); if (p_struct->acknowledgeCode.pointer) { p_struct->acknowledgeCode.length=p_src->acknowledgeCode.length; memmove(p_struct->acknowledgeCode.pointer, p_src->acknowledgeCode.pointer, p_src->acknowledgeCode.length); } else { p_struct->acknowledgeCode.pointer=NULL; p_struct->acknowledgeCode.length=0; } } else { p_struct->acknowledgeCode.pointer=NULL; p_struct->acknowledgeCode.length=0; } return p_struct; } const char *AB_Document_GetId(const AB_DOCUMENT *p_struct){ assert(p_struct); return p_struct->id; } uint32_t AB_Document_GetOwnerId(const AB_DOCUMENT *p_struct){ assert(p_struct); return p_struct->ownerId; } const char *AB_Document_GetMimeType(const AB_DOCUMENT *p_struct){ assert(p_struct); return p_struct->mimeType; } const char *AB_Document_GetFilePath(const AB_DOCUMENT *p_struct){ assert(p_struct); return p_struct->filePath; } void AB_Document_SetId(AB_DOCUMENT *p_struct, const char *p_src){ assert(p_struct); if (p_struct->id) { free(p_struct->id); p_struct->id=NULL; p_struct->id=NULL; } if (p_src) { p_struct->id=strdup(p_src); } else { p_struct->id=NULL; } } void AB_Document_SetOwnerId(AB_DOCUMENT *p_struct, uint32_t p_src){ assert(p_struct); p_struct->ownerId=p_src; } void AB_Document_SetMimeType(AB_DOCUMENT *p_struct, const char *p_src){ assert(p_struct); if (p_struct->mimeType) { free(p_struct->mimeType); p_struct->mimeType=NULL; p_struct->mimeType=NULL; } if (p_src) { p_struct->mimeType=strdup(p_src); } else { p_struct->mimeType=NULL; } } void AB_Document_SetFilePath(AB_DOCUMENT *p_struct, const char *p_src){ assert(p_struct); if (p_struct->filePath) { free(p_struct->filePath); p_struct->filePath=NULL; p_struct->filePath=NULL; } if (p_src) { p_struct->filePath=strdup(p_src); } else { p_struct->filePath=NULL; } } AB_DOCUMENT_LIST *AB_Document_List_dup(const AB_DOCUMENT_LIST *p_src) { AB_DOCUMENT_LIST *p_dest; AB_DOCUMENT *p_elem; assert(p_src); p_dest=AB_Document_List_new(); p_elem=AB_Document_List_First(p_src); while(p_elem) { AB_DOCUMENT *p_cpy; p_cpy=AB_Document_dup(p_elem); AB_Document_List_Add(p_cpy, p_dest); p_elem=AB_Document_List_Next(p_elem); } return p_dest; } void AB_Document_ReadDb(AB_DOCUMENT *p_struct, GWEN_DB_NODE *p_db){ assert(p_struct); /* member "id" */ if (p_struct->id) { free(p_struct->id); p_struct->id=NULL; p_struct->id=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "id", 0, NULL); if (s) p_struct->id=strdup(s); } /* member "ownerId" */ p_struct->ownerId=GWEN_DB_GetIntValue(p_db, "ownerId", 0, 0); /* member "mimeType" */ if (p_struct->mimeType) { free(p_struct->mimeType); p_struct->mimeType=NULL; p_struct->mimeType=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "mimeType", 0, NULL); if (s) p_struct->mimeType=strdup(s); } /* member "filePath" */ if (p_struct->filePath) { free(p_struct->filePath); p_struct->filePath=NULL; p_struct->filePath=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "filePath", 0, NULL); if (s) p_struct->filePath=strdup(s); } /* member "data" */ if (p_struct->data.length && p_struct->data.pointer) { free(p_struct->data.pointer); } p_struct->data.pointer=NULL; p_struct->data.length=0; { const void *v; unsigned int vlen; v=GWEN_DB_GetBinValue(p_db, "data", 0, NULL, 0, &vlen); if (v && vlen) { uint8_t *dest; dest=(uint8_t*) malloc(vlen); memmove(dest, v, vlen); p_struct->data.pointer=dest; p_struct->data.length=vlen; } } /* member "acknowledgeCode" */ if (p_struct->acknowledgeCode.length && p_struct->acknowledgeCode.pointer) { free(p_struct->acknowledgeCode.pointer); } p_struct->acknowledgeCode.pointer=NULL; p_struct->acknowledgeCode.length=0; { const void *v; unsigned int vlen; v=GWEN_DB_GetBinValue(p_db, "acknowledgeCode", 0, NULL, 0, &vlen); if (v && vlen) { uint8_t *dest; dest=(uint8_t*) malloc(vlen); memmove(dest, v, vlen); p_struct->acknowledgeCode.pointer=dest; p_struct->acknowledgeCode.length=vlen; } } } int AB_Document_WriteDb(const AB_DOCUMENT *p_struct, GWEN_DB_NODE *p_db) { int p_rv; assert(p_struct); /* member "id" */ if (p_struct->id) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "id", p_struct->id); else { GWEN_DB_DeleteVar(p_db, "id"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "ownerId" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "ownerId", p_struct->ownerId); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "mimeType" */ if (p_struct->mimeType) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "mimeType", p_struct->mimeType); else { GWEN_DB_DeleteVar(p_db, "mimeType"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "filePath" */ if (p_struct->filePath) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "filePath", p_struct->filePath); else { GWEN_DB_DeleteVar(p_db, "filePath"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "data" */ { if (p_struct->data.length && p_struct->data.pointer) { GWEN_DB_SetBinValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "data", p_struct->data.pointer, p_struct->data.length); } else { GWEN_DB_DeleteVar(p_db, "data"); p_rv=0; } } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "acknowledgeCode" */ { if (p_struct->acknowledgeCode.length && p_struct->acknowledgeCode.pointer) { GWEN_DB_SetBinValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "acknowledgeCode", p_struct->acknowledgeCode.pointer, p_struct->acknowledgeCode.length); } else { GWEN_DB_DeleteVar(p_db, "acknowledgeCode"); p_rv=0; } } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } return 0; } AB_DOCUMENT *AB_Document_fromDb(GWEN_DB_NODE *p_db) { AB_DOCUMENT *p_struct; p_struct=AB_Document_new(); AB_Document_ReadDb(p_struct, p_db); return p_struct; } int AB_Document_toDb(const AB_DOCUMENT *p_struct, GWEN_DB_NODE *p_db) { return AB_Document_WriteDb(p_struct, p_db); } void AB_Document_ReadXml(AB_DOCUMENT *p_struct, GWEN_XMLNODE *p_db){ assert(p_struct); /* member "id" */ if (p_struct->id) { free(p_struct->id); p_struct->id=NULL; p_struct->id=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "id", NULL); if (s) p_struct->id=strdup(s); } /* member "ownerId" */ p_struct->ownerId=GWEN_XMLNode_GetIntValue(p_db, "ownerId", 0); /* member "mimeType" */ if (p_struct->mimeType) { free(p_struct->mimeType); p_struct->mimeType=NULL; p_struct->mimeType=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "mimeType", NULL); if (s) p_struct->mimeType=strdup(s); } /* member "filePath" */ if (p_struct->filePath) { free(p_struct->filePath); p_struct->filePath=NULL; p_struct->filePath=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "filePath", NULL); if (s) p_struct->filePath=strdup(s); } /* member "data" */ if (p_struct->data.length && p_struct->data.pointer) { free(p_struct->data.pointer); } p_struct->data.pointer=NULL; p_struct->data.length=0; { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "data", NULL); if (s) { GWEN_BUFFER *tbuf; int rv; tbuf=GWEN_Buffer_new(0, 1024, 0, 1); rv=GWEN_Base64_Decode((const unsigned char*)s, strlen(s), tbuf); if (rv < 0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); } else { char *t; uint32_t len; len=GWEN_Buffer_GetUsedBytes(tbuf); t=GWEN_Buffer_GetStart(tbuf); if (GWEN_Buffer_Relinquish(tbuf) < 0) { uint8_t *dest; dest=(uint8_t*) malloc(len); memmove(dest, t, len); p_struct->data.pointer=dest; p_struct->data.length=len; } else { p_struct->data.pointer=(uint8_t*) t; p_struct->data.length=len; } } GWEN_Buffer_free(tbuf); } } /* member "acknowledgeCode" */ if (p_struct->acknowledgeCode.length && p_struct->acknowledgeCode.pointer) { free(p_struct->acknowledgeCode.pointer); } p_struct->acknowledgeCode.pointer=NULL; p_struct->acknowledgeCode.length=0; { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "acknowledgeCode", NULL); if (s) { GWEN_BUFFER *tbuf; int rv; tbuf=GWEN_Buffer_new(0, 1024, 0, 1); rv=GWEN_Base64_Decode((const unsigned char*)s, strlen(s), tbuf); if (rv < 0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); } else { char *t; uint32_t len; len=GWEN_Buffer_GetUsedBytes(tbuf); t=GWEN_Buffer_GetStart(tbuf); if (GWEN_Buffer_Relinquish(tbuf) < 0) { uint8_t *dest; dest=(uint8_t*) malloc(len); memmove(dest, t, len); p_struct->acknowledgeCode.pointer=dest; p_struct->acknowledgeCode.length=len; } else { p_struct->acknowledgeCode.pointer=(uint8_t*) t; p_struct->acknowledgeCode.length=len; } } GWEN_Buffer_free(tbuf); } } } void AB_Document_WriteXml(const AB_DOCUMENT *p_struct, GWEN_XMLNODE *p_db) { assert(p_struct); /* member "id" */ GWEN_XMLNode_SetCharValue(p_db, "id", p_struct->id); /* member "ownerId" */ GWEN_XMLNode_SetIntValue(p_db, "ownerId", p_struct->ownerId); /* member "mimeType" */ GWEN_XMLNode_SetCharValue(p_db, "mimeType", p_struct->mimeType); /* member "filePath" */ GWEN_XMLNode_SetCharValue(p_db, "filePath", p_struct->filePath); /* member "data" */ { if (p_struct->data.length && p_struct->data.pointer) { GWEN_BUFFER *tbuf; int rv; tbuf=GWEN_Buffer_new(0, 1024, 0, 1); rv=GWEN_Base64_Encode((const unsigned char*) p_struct->data.pointer, p_struct->data.length, tbuf, 80); if (rv < 0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); } else { GWEN_XMLNode_SetCharValue(p_db, "data", GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } } } /* member "acknowledgeCode" */ { if (p_struct->acknowledgeCode.length && p_struct->acknowledgeCode.pointer) { GWEN_BUFFER *tbuf; int rv; tbuf=GWEN_Buffer_new(0, 1024, 0, 1); rv=GWEN_Base64_Encode((const unsigned char*) p_struct->acknowledgeCode.pointer, p_struct->acknowledgeCode.length, tbuf, 80); if (rv < 0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); } else { GWEN_XMLNode_SetCharValue(p_db, "acknowledgeCode", GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } } } } void AB_Document_toXml(const AB_DOCUMENT *p_struct, GWEN_XMLNODE *p_db) { AB_Document_WriteXml(p_struct, p_db); } AB_DOCUMENT *AB_Document_fromXml(GWEN_XMLNODE *p_db) { AB_DOCUMENT *p_struct; p_struct=AB_Document_new(); AB_Document_ReadXml(p_struct, p_db); return p_struct; } void AB_Document_toHashString(const AB_DOCUMENT *p_struct, GWEN_BUFFER *p_buffer) { assert(p_struct); /* member "id"*/ if (p_struct->id) GWEN_Buffer_AppendString(p_buffer, p_struct->id); GWEN_Buffer_AppendByte(p_buffer, ':'); /* member "ownerId"*/ { char numbuf[32]; snprintf(numbuf, sizeof(numbuf)-1, "%d", p_struct->ownerId); numbuf[sizeof(numbuf)-1]=0; GWEN_Buffer_AppendString(p_buffer, numbuf); } GWEN_Buffer_AppendByte(p_buffer, ':'); /* member "mimeType"*/ if (p_struct->mimeType) GWEN_Buffer_AppendString(p_buffer, p_struct->mimeType); GWEN_Buffer_AppendByte(p_buffer, ':'); /* member "filePath"*/ if (p_struct->filePath) GWEN_Buffer_AppendString(p_buffer, p_struct->filePath); GWEN_Buffer_AppendByte(p_buffer, ':'); /* member "data"*/ GWEN_Buffer_AppendByte(p_buffer, ':'); /* member "acknowledgeCode"*/ GWEN_Buffer_AppendByte(p_buffer, ':'); } static AB_DOCUMENT *AB_Document_List2__freeAll_cb(AB_DOCUMENT *t, void *user_data) { AB_Document_free(t); return NULL; } int AB_Document_List2_freeAll(AB_DOCUMENT_LIST2 *tl) { if (tl) { AB_Document_List2_ForEach(tl, AB_Document_List2__freeAll_cb, NULL); AB_Document_List2_free(tl); } else { DBG_ERROR(AQBANKING_LOGDOMAIN, "List missing"); return GWEN_ERROR_INVALID; } return 0; } void AB_Document_SetData(AB_DOCUMENT *st, const uint8_t *p, uint32_t len) { assert(st); if (st->data.length && st->data.pointer) free(st->data.pointer); if (p && len) { st->data.pointer=(uint8_t*) malloc(len); if (st->data.pointer) { st->data.length=len; memmove(st->data.pointer, p, len); } else { st->data.pointer=NULL; st->data.length=0; } } else { st->data.length=0; st->data.pointer=NULL; } } const uint8_t* AB_Document_GetDataPtr(const AB_DOCUMENT *st) { assert(st); return st->data.pointer; } uint32_t AB_Document_GetDataLen(const AB_DOCUMENT *st) { assert(st); return st->data.length; } void AB_Document_SetAcknowledgeCode(AB_DOCUMENT *st, const uint8_t *p, uint32_t len) { assert(st); if (st->acknowledgeCode.length && st->acknowledgeCode.pointer) free(st->acknowledgeCode.pointer); if (p && len) { st->acknowledgeCode.pointer=(uint8_t*) malloc(len); if (st->acknowledgeCode.pointer) { st->acknowledgeCode.length=len; memmove(st->acknowledgeCode.pointer, p, len); } else { st->acknowledgeCode.pointer=NULL; st->acknowledgeCode.length=0; } } else { st->acknowledgeCode.length=0; st->acknowledgeCode.pointer=NULL; } } const uint8_t* AB_Document_GetAcknowledgeCodePtr(const AB_DOCUMENT *st) { assert(st); return st->acknowledgeCode.pointer; } uint32_t AB_Document_GetAcknowledgeCodeLen(const AB_DOCUMENT *st) { assert(st); return st->acknowledgeCode.length; } /* code headers */ aqbanking-6.6.1/src/libs/aqbanking/types/document_p.h0000664000175000017500000000126215037736054017542 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "document.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef AB_DOCUMENT_DOCUMENT_P_H #define AB_DOCUMENT_DOCUMENT_P_H #include "./document.h" #ifdef __cplusplus extern "C" { #endif struct AB_DOCUMENT { GWEN_LIST_ELEMENT(AB_DOCUMENT) int _refCount; char *id; uint32_t ownerId; char *mimeType; char *filePath; GWEN_BINDATA data; GWEN_BINDATA acknowledgeCode; }; #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/aqbanking/types/ab_imexporter_accountinfo_list2.tm20000664000175000017500000000042715037736054024227 00000000000000 AB_IMEXPORTER_ACCOUNTINFO_LIST2 AB_ImExporterAccountInfo_List2 aqbanking-6.6.1/src/libs/aqbanking/types/ab_bankinfo_service_list.tm20000664000175000017500000000037415037736054022667 00000000000000 AB_BANKINFO_SERVICE_LIST AB_BankInfoService_List aqbanking-6.6.1/src/libs/aqbanking/types/refaccount_p.h0000664000175000017500000000343215037736054020056 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "refaccount.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef AB_REFERENCE_ACCOUNT_REFACCOUNT_P_H #define AB_REFERENCE_ACCOUNT_REFACCOUNT_P_H #include "./refaccount.h" #ifdef __cplusplus extern "C" { #endif struct AB_REFERENCE_ACCOUNT { GWEN_LIST_ELEMENT(AB_REFERENCE_ACCOUNT) int _refCount; char *iban; char *bic; char *accountNumber; char *subAccountNumber; char *country; char *bankCode; char *ownerName; char *ownerName2; char *accountName; uint8_t accountType; }; /** * Find an account info object in a list of account info objects. * @param a account info object with which to start searching * @param iban IBAN to search for (wildcards and jokers allowed) * @param bic BIC to search for (wildcards and jokers allowed) * @param accountNumber account number to search for (wildcards and jokers allowed) * @param subAccountNumber sub account number (wildcards and jokers allowed) * @param country ISO code of the country (wildcards and jokers allowed) * @param bankCode bank code to search for (wildcards and jokers allowed) * @param ownerName owner name to search for (wildcards and jokers allowed) * @param accountName account name to search for (wildcards and jokers allowed) */ AB_REFERENCE_ACCOUNT *AB_ReferenceAccount_List__FindInternal(AB_REFERENCE_ACCOUNT *a, const char *iban, const char *bic, const char *accountNumber, const char *subAccountNumber, const char *country, const char *bankCode, const char *ownerName, const char *accountName); #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/aqbanking/types/refaccount.xml0000664000175000017500000005114014156464025020104 00000000000000 This type contains all information on reference accounts AB_REFERENCE_ACCOUNT AB_ReferenceAccount refaccount with_xml with_db with_list1 with_list2 with_refcount
aqbanking/error.h
gwenhywfar/text.h
/** \n * Check whether a given reference account info object matches the given criteria. \n * @param a account info object to match \n * @param iban IBAN to search for (wildcards and jokers allowed) \n * @param bic BIC to search for (wildcards and jokers allowed) \n * @param accountNumber account number to search for (wildcards and jokers allowed) \n * @param subAccountNumber sub account number (wildcards and jokers allowed) \n * @param country ISO code of the country (wildcards and jokers allowed) \n * @param bankCode bank code to search for (wildcards and jokers allowed) \n * @param ownerName owner name to search for (wildcards and jokers allowed) \n * @param accountName account name to search for (wildcards and jokers allowed) \n */ \n $(api) int $(struct_prefix)_Matches(const $(struct_type) *a, const char *iban, const char *bic, const char *accountNumber, const char *subAccountNumber, const char *country, const char *bankCode, const char *ownerName, const char *accountName); int $(struct_prefix)_Matches(const $(struct_type) *a, const char *iban, const char *bic, const char *accountNumber, const char *subAccountNumber, const char *country, const char *bankCode, const char *ownerName, const char *accountName) { const char *liban; const char *lbic; const char *laccountNumber; const char *lsubAccountNumber; const char *lcountry; const char *lbankCode; const char *lownerName; const char *laccountName; if (!iban) iban="*"; if (!bic) bic="*"; if (!accountNumber) accountNumber="*"; if (!subAccountNumber) subAccountNumber="*"; if (!country) country="*"; if (!bankCode) bankCode="*"; if (!ownerName) ownerName="*"; if (!accountName) accountName="*"; liban=$(struct_prefix)_GetIban(a); lbic=$(struct_prefix)_GetBic(a); laccountNumber=$(struct_prefix)_GetAccountNumber(a); lsubAccountNumber=$(struct_prefix)_GetSubAccountNumber(a); lcountry=$(struct_prefix)_GetCountry(a); lbankCode=$(struct_prefix)_GetBankCode(a); lownerName=$(struct_prefix)_GetOwnerName(a); laccountName=$(struct_prefix)_GetAccountName(a); if (!liban) liban=""; if (!lbic) lbic=""; if (!laccountNumber) laccountNumber=""; if (!lsubAccountNumber) lsubAccountNumber=""; if (!lcountry) lcountry=""; if (!lbankCode) lbankCode=""; if (!lownerName) lownerName=""; if (!laccountName) laccountName=""; if ((-1!=GWEN_Text_ComparePattern(liban, iban, 0)) && (-1!=GWEN_Text_ComparePattern(lbic, bic, 0)) && (-1!=GWEN_Text_ComparePattern(laccountNumber, accountNumber, 0)) && (-1!=GWEN_Text_ComparePattern(lsubAccountNumber, subAccountNumber, 0)) && (-1!=GWEN_Text_ComparePattern(lcountry, country, 0)) && (-1!=GWEN_Text_ComparePattern(lbankCode, bankCode, 0)) && (-1!=GWEN_Text_ComparePattern(lownerName, ownerName, 0)) && (-1!=GWEN_Text_ComparePattern(laccountName, accountName, 0))) return 1; return 0; } with_list1 with_list1 /** \n * Find an account info object in a list of account info objects. \n * @param a account info object with which to start searching \n * @param iban IBAN to search for (wildcards and jokers allowed) \n * @param bic BIC to search for (wildcards and jokers allowed) \n * @param accountNumber account number to search for (wildcards and jokers allowed) \n * @param subAccountNumber sub account number (wildcards and jokers allowed) \n * @param country ISO code of the country (wildcards and jokers allowed) \n * @param bankCode bank code to search for (wildcards and jokers allowed) \n * @param ownerName owner name to search for (wildcards and jokers allowed) \n * @param accountName account name to search for (wildcards and jokers allowed) \n */ \n $(struct_type) *$(struct_prefix)_List__FindInternal($(struct_type) *a, const char *iban, const char *bic, const char *accountNumber, const char *subAccountNumber, const char *country, const char *bankCode, const char *ownerName, const char *accountName); with_list1 with_list1 $(struct_type) *$(struct_prefix)_List__FindInternal($(struct_type) *a, const char *iban, const char *bic, const char *accountNumber, const char *subAccountNumber, const char *country, const char *bankCode, const char *ownerName, const char *accountName) { int rv; if (!iban) iban="*"; if (!bic) bic="*"; if (!accountNumber) accountNumber="*"; if (!subAccountNumber) subAccountNumber="*"; if (!country) country="*"; if (!bankCode) bankCode="*"; if (!ownerName) ownerName="*"; if (!accountName) accountName="*"; while(a) { rv=$(struct_prefix)_Matches(a, iban, bic, accountNumber, subAccountNumber, country, bankCode, ownerName, accountName); if (rv==1) break; a=$(struct_prefix)_List_Next(a); } /* while */ return a; } with_list1 with_list1 /** \n * Find the first matching account info object in a list of account info objects. \n * @param al list of account info objects among to search \n @param iban IBAN to search for (wildcards and jokers allowed) \n * @param bic BIC to search for (wildcards and jokers allowed) \n * @param accountNumber account number to search for (wildcards and jokers allowed) \n * @param subAccountNumber sub account number (wildcards and jokers allowed) \n * @param country ISO code of the country (wildcards and jokers allowed) \n * @param bankCode bank code to search for (wildcards and jokers allowed) \n * @param ownerName owner name to search for (wildcards and jokers allowed) \n * @param accountName account name to search for (wildcards and jokers allowed) \n */ \n $(api) $(struct_type) *$(struct_prefix)_List_FindFirst(const $(struct_type)_LIST *al, \n const char *iban, const char *bic, const char *accountNumber, const char *subAccountNumber, const char *country, const char *bankCode, const char *ownerName, const char *accountName); with_list1 with_list1 $(struct_type) *$(struct_prefix)_List_FindFirst(const $(struct_type)_LIST *al, const char *iban, const char *bic, const char *accountNumber, const char *subAccountNumber, const char *country, const char *bankCode, const char *ownerName, const char *accountName) { $(struct_type) *a; if ($(struct_prefix)_List_GetCount(al)==0) { DBG_INFO(AQBANKING_LOGDOMAIN, "No reference accounts"); return NULL; } a=$(struct_prefix)_List_First(al); assert(a); return $(struct_prefix)_List__FindInternal(a, iban, bic, accountNumber, subAccountNumber, country, bankCode, ownerName, accountName); } with_list1 with_list1 /** \n * Find the next matching account info object in a list of account info objects. \n * @param a previous matching account info objects among to search \n * @param iban IBAN to search for (wildcards and jokers allowed) \n * @param bic BIC to search for (wildcards and jokers allowed) \n * @param accountNumber account number to search for (wildcards and jokers allowed) \n * @param subAccountNumber sub account number (wildcards and jokers allowed) \n * @param country ISO code of the country (wildcards and jokers allowed) \n * @param bankCode bank code to search for (wildcards and jokers allowed) \n * @param ownerName owner name to search for (wildcards and jokers allowed) \n * @param accountName account name to search for (wildcards and jokers allowed) \n */ \n $(api) $(struct_type) *$(struct_prefix)_List_FindNext($(struct_type) *a, const char *iban, const char *bic, const char *accountNumber, const char *subAccountNumber, const char *country, const char *bankCode, const char *ownerName, const char *accountName); with_list1 with_list1 $(struct_type) *$(struct_prefix)_List_FindNext($(struct_type) *a, const char *iban, const char *bic, const char *accountNumber, const char *subAccountNumber, const char *country, const char *bankCode, const char *ownerName, const char *accountName) { assert(a); a=$(struct_prefix)_List_Next(a); if (a==NULL) { DBG_INFO(AQBANKING_LOGDOMAIN, "No more reference accounts"); return NULL; } return $(struct_prefix)_List__FindInternal(a, iban, bic, accountNumber, subAccountNumber, country, bankCode, ownerName, accountName); }
International bank account number as specified by the SEPA specs. public own with_hash const dup const SWIFT code of the bank at which this account is registered. public own with_hash const dup const Account number in national account specification. public own with_hash const dup const If your account has subaccounts which are distinguished by different suffixes, then this is that suffix. Otherwise it is empty. (HBCI only) public own with_hash const dup const public own with_hash const dup const National bank code (e.g. BLZ in Germany, routing number in other countries). public own with_hash const dup const Name of the account owner as it is stored with the bank. public own with_hash const dup const Name of the account owner as it is stored with the bank. public own with_hash const dup const Name of the account. public own with_hash const dup const Name of the account. public own with_hash const dup const
aqbanking-6.6.1/src/libs/aqbanking/types/ab_bankinfo_list2.tm20000664000175000017500000000034015037736054021222 00000000000000 AB_BANKINFO_LIST2 AB_BankInfo_List2 aqbanking-6.6.1/src/libs/aqbanking/types/ab_transaction_limits.tm20000664000175000017500000000032515037736054022227 00000000000000 AB_TRANSACTION_LIMITS AB_TransactionLimits aqbanking-6.6.1/src/libs/aqbanking/types/bankinfoservice.c0000664000175000017500000005275715037736054020567 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "bankinfoservice.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "./bankinfoservice_p.h" #include #include /* code headers */ /* macro functions */ GWEN_LIST_FUNCTIONS(AB_BANKINFO_SERVICE, AB_BankInfoService) GWEN_LIST2_FUNCTIONS(AB_BANKINFO_SERVICE, AB_BankInfoService) AB_BANKINFO_SERVICE *AB_BankInfoService_new(void) { AB_BANKINFO_SERVICE *p_struct; GWEN_NEW_OBJECT(AB_BANKINFO_SERVICE, p_struct) p_struct->_refCount=1; GWEN_LIST_INIT(AB_BANKINFO_SERVICE, p_struct) /* members */ p_struct->type=NULL; p_struct->address=NULL; p_struct->suffix=NULL; p_struct->pversion=NULL; p_struct->hversion=NULL; p_struct->mode=NULL; p_struct->aux1=NULL; p_struct->aux2=NULL; p_struct->aux3=NULL; p_struct->aux4=NULL; p_struct->userFlags=0; /* virtual functions */ return p_struct; } void AB_BankInfoService_free(AB_BANKINFO_SERVICE *p_struct) { if (p_struct) { assert(p_struct->_refCount); if (p_struct->_refCount==1) { GWEN_LIST_FINI(AB_BANKINFO_SERVICE, p_struct) /* members */ free(p_struct->type); p_struct->type=NULL; free(p_struct->address); p_struct->address=NULL; free(p_struct->suffix); p_struct->suffix=NULL; free(p_struct->pversion); p_struct->pversion=NULL; free(p_struct->hversion); p_struct->hversion=NULL; free(p_struct->mode); p_struct->mode=NULL; free(p_struct->aux1); p_struct->aux1=NULL; free(p_struct->aux2); p_struct->aux2=NULL; free(p_struct->aux3); p_struct->aux3=NULL; free(p_struct->aux4); p_struct->aux4=NULL; p_struct->_refCount=0; GWEN_FREE_OBJECT(p_struct); } else p_struct->_refCount--; } } void AB_BankInfoService_Attach(AB_BANKINFO_SERVICE *p_struct) { assert(p_struct); assert(p_struct->_refCount); p_struct->_refCount++; } AB_BANKINFO_SERVICE *AB_BankInfoService_dup(const AB_BANKINFO_SERVICE *p_src) { AB_BANKINFO_SERVICE *p_struct; assert(p_src); p_struct=AB_BankInfoService_new(); /* member "type" */ if (p_struct->type) { free(p_struct->type); p_struct->type=NULL; p_struct->type=NULL; } if (p_src->type) { p_struct->type=strdup(p_src->type); } /* member "address" */ if (p_struct->address) { free(p_struct->address); p_struct->address=NULL; p_struct->address=NULL; } if (p_src->address) { p_struct->address=strdup(p_src->address); } /* member "suffix" */ if (p_struct->suffix) { free(p_struct->suffix); p_struct->suffix=NULL; p_struct->suffix=NULL; } if (p_src->suffix) { p_struct->suffix=strdup(p_src->suffix); } /* member "pversion" */ if (p_struct->pversion) { free(p_struct->pversion); p_struct->pversion=NULL; p_struct->pversion=NULL; } if (p_src->pversion) { p_struct->pversion=strdup(p_src->pversion); } /* member "hversion" */ if (p_struct->hversion) { free(p_struct->hversion); p_struct->hversion=NULL; p_struct->hversion=NULL; } if (p_src->hversion) { p_struct->hversion=strdup(p_src->hversion); } /* member "mode" */ if (p_struct->mode) { free(p_struct->mode); p_struct->mode=NULL; p_struct->mode=NULL; } if (p_src->mode) { p_struct->mode=strdup(p_src->mode); } /* member "aux1" */ if (p_struct->aux1) { free(p_struct->aux1); p_struct->aux1=NULL; p_struct->aux1=NULL; } if (p_src->aux1) { p_struct->aux1=strdup(p_src->aux1); } /* member "aux2" */ if (p_struct->aux2) { free(p_struct->aux2); p_struct->aux2=NULL; p_struct->aux2=NULL; } if (p_src->aux2) { p_struct->aux2=strdup(p_src->aux2); } /* member "aux3" */ if (p_struct->aux3) { free(p_struct->aux3); p_struct->aux3=NULL; p_struct->aux3=NULL; } if (p_src->aux3) { p_struct->aux3=strdup(p_src->aux3); } /* member "aux4" */ if (p_struct->aux4) { free(p_struct->aux4); p_struct->aux4=NULL; p_struct->aux4=NULL; } if (p_src->aux4) { p_struct->aux4=strdup(p_src->aux4); } /* member "userFlags" */ p_struct->userFlags=p_src->userFlags; return p_struct; } AB_BANKINFO_SERVICE *AB_BankInfoService_copy(AB_BANKINFO_SERVICE *p_struct, const AB_BANKINFO_SERVICE *p_src) { assert(p_struct); assert(p_src); /* member "type" */ if (p_struct->type) { free(p_struct->type); p_struct->type=NULL; p_struct->type=NULL; } if (p_src->type) { p_struct->type=strdup(p_src->type); } /* member "address" */ if (p_struct->address) { free(p_struct->address); p_struct->address=NULL; p_struct->address=NULL; } if (p_src->address) { p_struct->address=strdup(p_src->address); } /* member "suffix" */ if (p_struct->suffix) { free(p_struct->suffix); p_struct->suffix=NULL; p_struct->suffix=NULL; } if (p_src->suffix) { p_struct->suffix=strdup(p_src->suffix); } /* member "pversion" */ if (p_struct->pversion) { free(p_struct->pversion); p_struct->pversion=NULL; p_struct->pversion=NULL; } if (p_src->pversion) { p_struct->pversion=strdup(p_src->pversion); } /* member "hversion" */ if (p_struct->hversion) { free(p_struct->hversion); p_struct->hversion=NULL; p_struct->hversion=NULL; } if (p_src->hversion) { p_struct->hversion=strdup(p_src->hversion); } /* member "mode" */ if (p_struct->mode) { free(p_struct->mode); p_struct->mode=NULL; p_struct->mode=NULL; } if (p_src->mode) { p_struct->mode=strdup(p_src->mode); } /* member "aux1" */ if (p_struct->aux1) { free(p_struct->aux1); p_struct->aux1=NULL; p_struct->aux1=NULL; } if (p_src->aux1) { p_struct->aux1=strdup(p_src->aux1); } /* member "aux2" */ if (p_struct->aux2) { free(p_struct->aux2); p_struct->aux2=NULL; p_struct->aux2=NULL; } if (p_src->aux2) { p_struct->aux2=strdup(p_src->aux2); } /* member "aux3" */ if (p_struct->aux3) { free(p_struct->aux3); p_struct->aux3=NULL; p_struct->aux3=NULL; } if (p_src->aux3) { p_struct->aux3=strdup(p_src->aux3); } /* member "aux4" */ if (p_struct->aux4) { free(p_struct->aux4); p_struct->aux4=NULL; p_struct->aux4=NULL; } if (p_src->aux4) { p_struct->aux4=strdup(p_src->aux4); } /* member "userFlags" */ p_struct->userFlags=p_src->userFlags; return p_struct; } const char *AB_BankInfoService_GetType(const AB_BANKINFO_SERVICE *p_struct){ assert(p_struct); return p_struct->type; } const char *AB_BankInfoService_GetAddress(const AB_BANKINFO_SERVICE *p_struct){ assert(p_struct); return p_struct->address; } const char *AB_BankInfoService_GetSuffix(const AB_BANKINFO_SERVICE *p_struct){ assert(p_struct); return p_struct->suffix; } const char *AB_BankInfoService_GetPversion(const AB_BANKINFO_SERVICE *p_struct){ assert(p_struct); return p_struct->pversion; } const char *AB_BankInfoService_GetHversion(const AB_BANKINFO_SERVICE *p_struct){ assert(p_struct); return p_struct->hversion; } const char *AB_BankInfoService_GetMode(const AB_BANKINFO_SERVICE *p_struct){ assert(p_struct); return p_struct->mode; } const char *AB_BankInfoService_GetAux1(const AB_BANKINFO_SERVICE *p_struct){ assert(p_struct); return p_struct->aux1; } const char *AB_BankInfoService_GetAux2(const AB_BANKINFO_SERVICE *p_struct){ assert(p_struct); return p_struct->aux2; } const char *AB_BankInfoService_GetAux3(const AB_BANKINFO_SERVICE *p_struct){ assert(p_struct); return p_struct->aux3; } const char *AB_BankInfoService_GetAux4(const AB_BANKINFO_SERVICE *p_struct){ assert(p_struct); return p_struct->aux4; } uint32_t AB_BankInfoService_GetUserFlags(const AB_BANKINFO_SERVICE *p_struct){ assert(p_struct); return p_struct->userFlags; } void AB_BankInfoService_SetType(AB_BANKINFO_SERVICE *p_struct, const char *p_src){ assert(p_struct); if (p_struct->type) { free(p_struct->type); p_struct->type=NULL; p_struct->type=NULL; } if (p_src) { p_struct->type=strdup(p_src); } else { p_struct->type=NULL; } } void AB_BankInfoService_SetAddress(AB_BANKINFO_SERVICE *p_struct, const char *p_src){ assert(p_struct); if (p_struct->address) { free(p_struct->address); p_struct->address=NULL; p_struct->address=NULL; } if (p_src) { p_struct->address=strdup(p_src); } else { p_struct->address=NULL; } } void AB_BankInfoService_SetSuffix(AB_BANKINFO_SERVICE *p_struct, const char *p_src){ assert(p_struct); if (p_struct->suffix) { free(p_struct->suffix); p_struct->suffix=NULL; p_struct->suffix=NULL; } if (p_src) { p_struct->suffix=strdup(p_src); } else { p_struct->suffix=NULL; } } void AB_BankInfoService_SetPversion(AB_BANKINFO_SERVICE *p_struct, const char *p_src){ assert(p_struct); if (p_struct->pversion) { free(p_struct->pversion); p_struct->pversion=NULL; p_struct->pversion=NULL; } if (p_src) { p_struct->pversion=strdup(p_src); } else { p_struct->pversion=NULL; } } void AB_BankInfoService_SetHversion(AB_BANKINFO_SERVICE *p_struct, const char *p_src){ assert(p_struct); if (p_struct->hversion) { free(p_struct->hversion); p_struct->hversion=NULL; p_struct->hversion=NULL; } if (p_src) { p_struct->hversion=strdup(p_src); } else { p_struct->hversion=NULL; } } void AB_BankInfoService_SetMode(AB_BANKINFO_SERVICE *p_struct, const char *p_src){ assert(p_struct); if (p_struct->mode) { free(p_struct->mode); p_struct->mode=NULL; p_struct->mode=NULL; } if (p_src) { p_struct->mode=strdup(p_src); } else { p_struct->mode=NULL; } } void AB_BankInfoService_SetAux1(AB_BANKINFO_SERVICE *p_struct, const char *p_src){ assert(p_struct); if (p_struct->aux1) { free(p_struct->aux1); p_struct->aux1=NULL; p_struct->aux1=NULL; } if (p_src) { p_struct->aux1=strdup(p_src); } else { p_struct->aux1=NULL; } } void AB_BankInfoService_SetAux2(AB_BANKINFO_SERVICE *p_struct, const char *p_src){ assert(p_struct); if (p_struct->aux2) { free(p_struct->aux2); p_struct->aux2=NULL; p_struct->aux2=NULL; } if (p_src) { p_struct->aux2=strdup(p_src); } else { p_struct->aux2=NULL; } } void AB_BankInfoService_SetAux3(AB_BANKINFO_SERVICE *p_struct, const char *p_src){ assert(p_struct); if (p_struct->aux3) { free(p_struct->aux3); p_struct->aux3=NULL; p_struct->aux3=NULL; } if (p_src) { p_struct->aux3=strdup(p_src); } else { p_struct->aux3=NULL; } } void AB_BankInfoService_SetAux4(AB_BANKINFO_SERVICE *p_struct, const char *p_src){ assert(p_struct); if (p_struct->aux4) { free(p_struct->aux4); p_struct->aux4=NULL; p_struct->aux4=NULL; } if (p_src) { p_struct->aux4=strdup(p_src); } else { p_struct->aux4=NULL; } } void AB_BankInfoService_SetUserFlags(AB_BANKINFO_SERVICE *p_struct, uint32_t p_src){ assert(p_struct); p_struct->userFlags=p_src; } void AB_BankInfoService_AddUserFlags(AB_BANKINFO_SERVICE *p_struct, uint32_t p_src) { assert(p_struct); p_struct->userFlags|=p_src; } void AB_BankInfoService_SubUserFlags(AB_BANKINFO_SERVICE *p_struct, uint32_t p_src) { assert(p_struct); p_struct->userFlags&=~p_src; } AB_BANKINFO_SERVICE_LIST *AB_BankInfoService_List_dup(const AB_BANKINFO_SERVICE_LIST *p_src) { AB_BANKINFO_SERVICE_LIST *p_dest; AB_BANKINFO_SERVICE *p_elem; assert(p_src); p_dest=AB_BankInfoService_List_new(); p_elem=AB_BankInfoService_List_First(p_src); while(p_elem) { AB_BANKINFO_SERVICE *p_cpy; p_cpy=AB_BankInfoService_dup(p_elem); AB_BankInfoService_List_Add(p_cpy, p_dest); p_elem=AB_BankInfoService_List_Next(p_elem); } return p_dest; } void AB_BankInfoService_ReadDb(AB_BANKINFO_SERVICE *p_struct, GWEN_DB_NODE *p_db){ assert(p_struct); /* member "type" */ if (p_struct->type) { free(p_struct->type); p_struct->type=NULL; p_struct->type=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "type", 0, NULL); if (s) p_struct->type=strdup(s); } /* member "address" */ if (p_struct->address) { free(p_struct->address); p_struct->address=NULL; p_struct->address=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "address", 0, NULL); if (s) p_struct->address=strdup(s); } /* member "suffix" */ if (p_struct->suffix) { free(p_struct->suffix); p_struct->suffix=NULL; p_struct->suffix=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "suffix", 0, NULL); if (s) p_struct->suffix=strdup(s); } /* member "pversion" */ if (p_struct->pversion) { free(p_struct->pversion); p_struct->pversion=NULL; p_struct->pversion=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "pversion", 0, NULL); if (s) p_struct->pversion=strdup(s); } /* member "hversion" */ if (p_struct->hversion) { free(p_struct->hversion); p_struct->hversion=NULL; p_struct->hversion=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "hversion", 0, NULL); if (s) p_struct->hversion=strdup(s); } /* member "mode" */ if (p_struct->mode) { free(p_struct->mode); p_struct->mode=NULL; p_struct->mode=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "mode", 0, NULL); if (s) p_struct->mode=strdup(s); } /* member "aux1" */ if (p_struct->aux1) { free(p_struct->aux1); p_struct->aux1=NULL; p_struct->aux1=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "aux1", 0, NULL); if (s) p_struct->aux1=strdup(s); } /* member "aux2" */ if (p_struct->aux2) { free(p_struct->aux2); p_struct->aux2=NULL; p_struct->aux2=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "aux2", 0, NULL); if (s) p_struct->aux2=strdup(s); } /* member "aux3" */ if (p_struct->aux3) { free(p_struct->aux3); p_struct->aux3=NULL; p_struct->aux3=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "aux3", 0, NULL); if (s) p_struct->aux3=strdup(s); } /* member "aux4" */ if (p_struct->aux4) { free(p_struct->aux4); p_struct->aux4=NULL; p_struct->aux4=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "aux4", 0, NULL); if (s) p_struct->aux4=strdup(s); } /* member "userFlags" */ p_struct->userFlags=GWEN_DB_GetIntValue(p_db, "userFlags", 0, 0); } int AB_BankInfoService_WriteDb(const AB_BANKINFO_SERVICE *p_struct, GWEN_DB_NODE *p_db) { int p_rv; assert(p_struct); /* member "type" */ if (p_struct->type) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "type", p_struct->type); else { GWEN_DB_DeleteVar(p_db, "type"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "address" */ if (p_struct->address) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "address", p_struct->address); else { GWEN_DB_DeleteVar(p_db, "address"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "suffix" */ if (p_struct->suffix) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "suffix", p_struct->suffix); else { GWEN_DB_DeleteVar(p_db, "suffix"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "pversion" */ if (p_struct->pversion) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "pversion", p_struct->pversion); else { GWEN_DB_DeleteVar(p_db, "pversion"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "hversion" */ if (p_struct->hversion) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "hversion", p_struct->hversion); else { GWEN_DB_DeleteVar(p_db, "hversion"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "mode" */ if (p_struct->mode) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "mode", p_struct->mode); else { GWEN_DB_DeleteVar(p_db, "mode"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "aux1" */ if (p_struct->aux1) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "aux1", p_struct->aux1); else { GWEN_DB_DeleteVar(p_db, "aux1"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "aux2" */ if (p_struct->aux2) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "aux2", p_struct->aux2); else { GWEN_DB_DeleteVar(p_db, "aux2"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "aux3" */ if (p_struct->aux3) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "aux3", p_struct->aux3); else { GWEN_DB_DeleteVar(p_db, "aux3"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "aux4" */ if (p_struct->aux4) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "aux4", p_struct->aux4); else { GWEN_DB_DeleteVar(p_db, "aux4"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "userFlags" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "userFlags", p_struct->userFlags); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } return 0; } AB_BANKINFO_SERVICE *AB_BankInfoService_fromDb(GWEN_DB_NODE *p_db) { AB_BANKINFO_SERVICE *p_struct; p_struct=AB_BankInfoService_new(); AB_BankInfoService_ReadDb(p_struct, p_db); return p_struct; } int AB_BankInfoService_toDb(const AB_BANKINFO_SERVICE *p_struct, GWEN_DB_NODE *p_db) { return AB_BankInfoService_WriteDb(p_struct, p_db); } void AB_BankInfoService_ReadXml(AB_BANKINFO_SERVICE *p_struct, GWEN_XMLNODE *p_db){ assert(p_struct); /* member "type" */ if (p_struct->type) { free(p_struct->type); p_struct->type=NULL; p_struct->type=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "type", NULL); if (s) p_struct->type=strdup(s); } /* member "address" */ if (p_struct->address) { free(p_struct->address); p_struct->address=NULL; p_struct->address=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "address", NULL); if (s) p_struct->address=strdup(s); } /* member "suffix" */ if (p_struct->suffix) { free(p_struct->suffix); p_struct->suffix=NULL; p_struct->suffix=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "suffix", NULL); if (s) p_struct->suffix=strdup(s); } /* member "pversion" */ if (p_struct->pversion) { free(p_struct->pversion); p_struct->pversion=NULL; p_struct->pversion=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "pversion", NULL); if (s) p_struct->pversion=strdup(s); } /* member "hversion" */ if (p_struct->hversion) { free(p_struct->hversion); p_struct->hversion=NULL; p_struct->hversion=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "hversion", NULL); if (s) p_struct->hversion=strdup(s); } /* member "mode" */ if (p_struct->mode) { free(p_struct->mode); p_struct->mode=NULL; p_struct->mode=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "mode", NULL); if (s) p_struct->mode=strdup(s); } /* member "aux1" */ if (p_struct->aux1) { free(p_struct->aux1); p_struct->aux1=NULL; p_struct->aux1=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "aux1", NULL); if (s) p_struct->aux1=strdup(s); } /* member "aux2" */ if (p_struct->aux2) { free(p_struct->aux2); p_struct->aux2=NULL; p_struct->aux2=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "aux2", NULL); if (s) p_struct->aux2=strdup(s); } /* member "aux3" */ if (p_struct->aux3) { free(p_struct->aux3); p_struct->aux3=NULL; p_struct->aux3=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "aux3", NULL); if (s) p_struct->aux3=strdup(s); } /* member "aux4" */ if (p_struct->aux4) { free(p_struct->aux4); p_struct->aux4=NULL; p_struct->aux4=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "aux4", NULL); if (s) p_struct->aux4=strdup(s); } /* member "userFlags" */ p_struct->userFlags=GWEN_XMLNode_GetIntValue(p_db, "userFlags", 0); } void AB_BankInfoService_WriteXml(const AB_BANKINFO_SERVICE *p_struct, GWEN_XMLNODE *p_db) { assert(p_struct); /* member "type" */ GWEN_XMLNode_SetCharValue(p_db, "type", p_struct->type); /* member "address" */ GWEN_XMLNode_SetCharValue(p_db, "address", p_struct->address); /* member "suffix" */ GWEN_XMLNode_SetCharValue(p_db, "suffix", p_struct->suffix); /* member "pversion" */ GWEN_XMLNode_SetCharValue(p_db, "pversion", p_struct->pversion); /* member "hversion" */ GWEN_XMLNode_SetCharValue(p_db, "hversion", p_struct->hversion); /* member "mode" */ GWEN_XMLNode_SetCharValue(p_db, "mode", p_struct->mode); /* member "aux1" */ GWEN_XMLNode_SetCharValue(p_db, "aux1", p_struct->aux1); /* member "aux2" */ GWEN_XMLNode_SetCharValue(p_db, "aux2", p_struct->aux2); /* member "aux3" */ GWEN_XMLNode_SetCharValue(p_db, "aux3", p_struct->aux3); /* member "aux4" */ GWEN_XMLNode_SetCharValue(p_db, "aux4", p_struct->aux4); /* member "userFlags" */ GWEN_XMLNode_SetIntValue(p_db, "userFlags", p_struct->userFlags); } void AB_BankInfoService_toXml(const AB_BANKINFO_SERVICE *p_struct, GWEN_XMLNODE *p_db) { AB_BankInfoService_WriteXml(p_struct, p_db); } AB_BANKINFO_SERVICE *AB_BankInfoService_fromXml(GWEN_XMLNODE *p_db) { AB_BANKINFO_SERVICE *p_struct; p_struct=AB_BankInfoService_new(); AB_BankInfoService_ReadXml(p_struct, p_db); return p_struct; } /* code headers */ aqbanking-6.6.1/src/libs/aqbanking/types/account_spec_p.h0000664000175000017500000000363715037736054020402 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "account_spec.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef AB_ACCOUNT_SPEC_ACCOUNT_SPEC_P_H #define AB_ACCOUNT_SPEC_ACCOUNT_SPEC_P_H #include "./account_spec.h" #ifdef __cplusplus extern "C" { #endif struct AB_ACCOUNT_SPEC { GWEN_LIST_ELEMENT(AB_ACCOUNT_SPEC) int _refCount; int type; uint32_t uniqueId; char *backendName; char *ownerName; char *accountName; char *currency; char *memo; char *iban; char *bic; char *country; char *bankCode; char *bankName; char *branchId; char *accountNumber; char *subAccountNumber; AB_TRANSACTION_LIMITS_LIST *transactionLimitsList; AB_REFERENCE_ACCOUNT_LIST *refAccountList; }; /** * Find an account info object in a list of account info objects. * @param a account info object with which to start searching * @param backendName name of the banking backend (wildcards and jokers allowed) * @param country ISO code of the country (wildcards and jokers allowed) * @param bankId bank code to search for (wildcards and jokers allowed) * @param accountNumber account number to search for (wildcards and jokers allowed) * @param subAccountId sub account number (wildcards and jokers allowed) * @param iban IBAN to search for (wildcards and jokers allowed) * @param currency currecny the account uses (wildcards and jokers allowed) * @param ty account type (use AB_AccountType_Unknown as wildcard) */ AB_ACCOUNT_SPEC *AB_AccountSpec_List__FindInternal(AB_ACCOUNT_SPEC *a, const char *backendName, const char *country, const char *bankId, const char *accountNumber, const char *subAccountId, const char *iban, const char *currency, int ty); #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/aqbanking/types/imexporter_accountinfo.c0000664000175000017500000014151415037736054022173 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "imexporter_accountinfo.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "./imexporter_accountinfo_p.h" #include #include /* code headers */ /* macro functions */ GWEN_LIST_FUNCTIONS(AB_IMEXPORTER_ACCOUNTINFO, AB_ImExporterAccountInfo) GWEN_LIST2_FUNCTIONS(AB_IMEXPORTER_ACCOUNTINFO, AB_ImExporterAccountInfo) AB_IMEXPORTER_ACCOUNTINFO *AB_ImExporterAccountInfo_new(void) { AB_IMEXPORTER_ACCOUNTINFO *p_struct; GWEN_NEW_OBJECT(AB_IMEXPORTER_ACCOUNTINFO, p_struct) p_struct->_refCount=1; GWEN_LIST_INIT(AB_IMEXPORTER_ACCOUNTINFO, p_struct) /* members */ p_struct->country=NULL; p_struct->bankCode=NULL; p_struct->bankName=NULL; p_struct->accountNumber=NULL; p_struct->subAccountId=NULL; p_struct->accountName=NULL; p_struct->iban=NULL; p_struct->bic=NULL; p_struct->owner=NULL; p_struct->currency=NULL; p_struct->description=NULL; p_struct->accountType=0; p_struct->accountId=0; p_struct->balanceList=AB_Balance_List_new(); p_struct->transactionList=AB_Transaction_List_new(); p_struct->eStatementList=AB_Document_List_new(); /* virtual functions */ return p_struct; } void AB_ImExporterAccountInfo_free(AB_IMEXPORTER_ACCOUNTINFO *p_struct) { if (p_struct) { assert(p_struct->_refCount); if (p_struct->_refCount==1) { GWEN_LIST_FINI(AB_IMEXPORTER_ACCOUNTINFO, p_struct) /* members */ free(p_struct->country); p_struct->country=NULL; free(p_struct->bankCode); p_struct->bankCode=NULL; free(p_struct->bankName); p_struct->bankName=NULL; free(p_struct->accountNumber); p_struct->accountNumber=NULL; free(p_struct->subAccountId); p_struct->subAccountId=NULL; free(p_struct->accountName); p_struct->accountName=NULL; free(p_struct->iban); p_struct->iban=NULL; free(p_struct->bic); p_struct->bic=NULL; free(p_struct->owner); p_struct->owner=NULL; free(p_struct->currency); p_struct->currency=NULL; free(p_struct->description); p_struct->description=NULL; AB_Balance_List_free(p_struct->balanceList); p_struct->balanceList=NULL; AB_Transaction_List_free(p_struct->transactionList); p_struct->transactionList=NULL; AB_Document_List_free(p_struct->eStatementList); p_struct->eStatementList=NULL; p_struct->_refCount=0; GWEN_FREE_OBJECT(p_struct); } else p_struct->_refCount--; } } void AB_ImExporterAccountInfo_Attach(AB_IMEXPORTER_ACCOUNTINFO *p_struct) { assert(p_struct); assert(p_struct->_refCount); p_struct->_refCount++; } AB_IMEXPORTER_ACCOUNTINFO *AB_ImExporterAccountInfo_dup(const AB_IMEXPORTER_ACCOUNTINFO *p_src) { AB_IMEXPORTER_ACCOUNTINFO *p_struct; assert(p_src); p_struct=AB_ImExporterAccountInfo_new(); /* member "country" */ if (p_struct->country) { free(p_struct->country); p_struct->country=NULL; p_struct->country=NULL; } if (p_src->country) { p_struct->country=strdup(p_src->country); } /* member "bankCode" */ if (p_struct->bankCode) { free(p_struct->bankCode); p_struct->bankCode=NULL; p_struct->bankCode=NULL; } if (p_src->bankCode) { p_struct->bankCode=strdup(p_src->bankCode); } /* member "bankName" */ if (p_struct->bankName) { free(p_struct->bankName); p_struct->bankName=NULL; p_struct->bankName=NULL; } if (p_src->bankName) { p_struct->bankName=strdup(p_src->bankName); } /* member "accountNumber" */ if (p_struct->accountNumber) { free(p_struct->accountNumber); p_struct->accountNumber=NULL; p_struct->accountNumber=NULL; } if (p_src->accountNumber) { p_struct->accountNumber=strdup(p_src->accountNumber); } /* member "subAccountId" */ if (p_struct->subAccountId) { free(p_struct->subAccountId); p_struct->subAccountId=NULL; p_struct->subAccountId=NULL; } if (p_src->subAccountId) { p_struct->subAccountId=strdup(p_src->subAccountId); } /* member "accountName" */ if (p_struct->accountName) { free(p_struct->accountName); p_struct->accountName=NULL; p_struct->accountName=NULL; } if (p_src->accountName) { p_struct->accountName=strdup(p_src->accountName); } /* member "iban" */ if (p_struct->iban) { free(p_struct->iban); p_struct->iban=NULL; p_struct->iban=NULL; } if (p_src->iban) { p_struct->iban=strdup(p_src->iban); } /* member "bic" */ if (p_struct->bic) { free(p_struct->bic); p_struct->bic=NULL; p_struct->bic=NULL; } if (p_src->bic) { p_struct->bic=strdup(p_src->bic); } /* member "owner" */ if (p_struct->owner) { free(p_struct->owner); p_struct->owner=NULL; p_struct->owner=NULL; } if (p_src->owner) { p_struct->owner=strdup(p_src->owner); } /* member "currency" */ if (p_struct->currency) { free(p_struct->currency); p_struct->currency=NULL; p_struct->currency=NULL; } if (p_src->currency) { p_struct->currency=strdup(p_src->currency); } /* member "description" */ if (p_struct->description) { free(p_struct->description); p_struct->description=NULL; p_struct->description=NULL; } if (p_src->description) { p_struct->description=strdup(p_src->description); } /* member "accountType" */ p_struct->accountType=p_src->accountType; /* member "accountId" */ p_struct->accountId=p_src->accountId; /* member "balanceList" */ if (p_struct->balanceList) { AB_Balance_List_free(p_struct->balanceList); p_struct->balanceList=NULL; p_struct->balanceList=NULL; } if (p_src->balanceList) { p_struct->balanceList=AB_Balance_List_dup(p_src->balanceList); } /* member "transactionList" */ if (p_struct->transactionList) { AB_Transaction_List_free(p_struct->transactionList); p_struct->transactionList=NULL; p_struct->transactionList=NULL; } if (p_src->transactionList) { p_struct->transactionList=AB_Transaction_List_dup(p_src->transactionList); } /* member "eStatementList" */ if (p_struct->eStatementList) { AB_Document_List_free(p_struct->eStatementList); p_struct->eStatementList=NULL; p_struct->eStatementList=NULL; } if (p_src->eStatementList) { p_struct->eStatementList=AB_Document_List_dup(p_src->eStatementList); } return p_struct; } AB_IMEXPORTER_ACCOUNTINFO *AB_ImExporterAccountInfo_copy(AB_IMEXPORTER_ACCOUNTINFO *p_struct, const AB_IMEXPORTER_ACCOUNTINFO *p_src) { assert(p_struct); assert(p_src); /* member "country" */ if (p_struct->country) { free(p_struct->country); p_struct->country=NULL; p_struct->country=NULL; } if (p_src->country) { p_struct->country=strdup(p_src->country); } /* member "bankCode" */ if (p_struct->bankCode) { free(p_struct->bankCode); p_struct->bankCode=NULL; p_struct->bankCode=NULL; } if (p_src->bankCode) { p_struct->bankCode=strdup(p_src->bankCode); } /* member "bankName" */ if (p_struct->bankName) { free(p_struct->bankName); p_struct->bankName=NULL; p_struct->bankName=NULL; } if (p_src->bankName) { p_struct->bankName=strdup(p_src->bankName); } /* member "accountNumber" */ if (p_struct->accountNumber) { free(p_struct->accountNumber); p_struct->accountNumber=NULL; p_struct->accountNumber=NULL; } if (p_src->accountNumber) { p_struct->accountNumber=strdup(p_src->accountNumber); } /* member "subAccountId" */ if (p_struct->subAccountId) { free(p_struct->subAccountId); p_struct->subAccountId=NULL; p_struct->subAccountId=NULL; } if (p_src->subAccountId) { p_struct->subAccountId=strdup(p_src->subAccountId); } /* member "accountName" */ if (p_struct->accountName) { free(p_struct->accountName); p_struct->accountName=NULL; p_struct->accountName=NULL; } if (p_src->accountName) { p_struct->accountName=strdup(p_src->accountName); } /* member "iban" */ if (p_struct->iban) { free(p_struct->iban); p_struct->iban=NULL; p_struct->iban=NULL; } if (p_src->iban) { p_struct->iban=strdup(p_src->iban); } /* member "bic" */ if (p_struct->bic) { free(p_struct->bic); p_struct->bic=NULL; p_struct->bic=NULL; } if (p_src->bic) { p_struct->bic=strdup(p_src->bic); } /* member "owner" */ if (p_struct->owner) { free(p_struct->owner); p_struct->owner=NULL; p_struct->owner=NULL; } if (p_src->owner) { p_struct->owner=strdup(p_src->owner); } /* member "currency" */ if (p_struct->currency) { free(p_struct->currency); p_struct->currency=NULL; p_struct->currency=NULL; } if (p_src->currency) { p_struct->currency=strdup(p_src->currency); } /* member "description" */ if (p_struct->description) { free(p_struct->description); p_struct->description=NULL; p_struct->description=NULL; } if (p_src->description) { p_struct->description=strdup(p_src->description); } /* member "accountType" */ p_struct->accountType=p_src->accountType; /* member "accountId" */ p_struct->accountId=p_src->accountId; /* member "balanceList" */ if (p_struct->balanceList) { AB_Balance_List_free(p_struct->balanceList); p_struct->balanceList=NULL; p_struct->balanceList=NULL; } if (p_src->balanceList) { p_struct->balanceList=AB_Balance_List_dup(p_src->balanceList); } /* member "transactionList" */ if (p_struct->transactionList) { AB_Transaction_List_free(p_struct->transactionList); p_struct->transactionList=NULL; p_struct->transactionList=NULL; } if (p_src->transactionList) { p_struct->transactionList=AB_Transaction_List_dup(p_src->transactionList); } /* member "eStatementList" */ if (p_struct->eStatementList) { AB_Document_List_free(p_struct->eStatementList); p_struct->eStatementList=NULL; p_struct->eStatementList=NULL; } if (p_src->eStatementList) { p_struct->eStatementList=AB_Document_List_dup(p_src->eStatementList); } return p_struct; } const char *AB_ImExporterAccountInfo_GetCountry(const AB_IMEXPORTER_ACCOUNTINFO *p_struct){ assert(p_struct); return p_struct->country; } const char *AB_ImExporterAccountInfo_GetBankCode(const AB_IMEXPORTER_ACCOUNTINFO *p_struct){ assert(p_struct); return p_struct->bankCode; } const char *AB_ImExporterAccountInfo_GetBankName(const AB_IMEXPORTER_ACCOUNTINFO *p_struct){ assert(p_struct); return p_struct->bankName; } const char *AB_ImExporterAccountInfo_GetAccountNumber(const AB_IMEXPORTER_ACCOUNTINFO *p_struct){ assert(p_struct); return p_struct->accountNumber; } const char *AB_ImExporterAccountInfo_GetSubAccountId(const AB_IMEXPORTER_ACCOUNTINFO *p_struct){ assert(p_struct); return p_struct->subAccountId; } const char *AB_ImExporterAccountInfo_GetAccountName(const AB_IMEXPORTER_ACCOUNTINFO *p_struct){ assert(p_struct); return p_struct->accountName; } const char *AB_ImExporterAccountInfo_GetIban(const AB_IMEXPORTER_ACCOUNTINFO *p_struct){ assert(p_struct); return p_struct->iban; } const char *AB_ImExporterAccountInfo_GetBic(const AB_IMEXPORTER_ACCOUNTINFO *p_struct){ assert(p_struct); return p_struct->bic; } const char *AB_ImExporterAccountInfo_GetOwner(const AB_IMEXPORTER_ACCOUNTINFO *p_struct){ assert(p_struct); return p_struct->owner; } const char *AB_ImExporterAccountInfo_GetCurrency(const AB_IMEXPORTER_ACCOUNTINFO *p_struct){ assert(p_struct); return p_struct->currency; } const char *AB_ImExporterAccountInfo_GetDescription(const AB_IMEXPORTER_ACCOUNTINFO *p_struct){ assert(p_struct); return p_struct->description; } int AB_ImExporterAccountInfo_GetAccountType(const AB_IMEXPORTER_ACCOUNTINFO *p_struct){ assert(p_struct); return p_struct->accountType; } uint32_t AB_ImExporterAccountInfo_GetAccountId(const AB_IMEXPORTER_ACCOUNTINFO *p_struct){ assert(p_struct); return p_struct->accountId; } AB_BALANCE_LIST *AB_ImExporterAccountInfo_GetBalanceList(const AB_IMEXPORTER_ACCOUNTINFO *p_struct){ assert(p_struct); return p_struct->balanceList; } AB_TRANSACTION_LIST *AB_ImExporterAccountInfo_GetTransactionList(const AB_IMEXPORTER_ACCOUNTINFO *p_struct){ assert(p_struct); return p_struct->transactionList; } AB_DOCUMENT_LIST *AB_ImExporterAccountInfo_GetEStatementList(const AB_IMEXPORTER_ACCOUNTINFO *p_struct){ assert(p_struct); return p_struct->eStatementList; } void AB_ImExporterAccountInfo_SetCountry(AB_IMEXPORTER_ACCOUNTINFO *p_struct, const char *p_src){ assert(p_struct); if (p_struct->country) { free(p_struct->country); p_struct->country=NULL; p_struct->country=NULL; } if (p_src) { p_struct->country=strdup(p_src); } else { p_struct->country=NULL; } } void AB_ImExporterAccountInfo_SetBankCode(AB_IMEXPORTER_ACCOUNTINFO *p_struct, const char *p_src){ assert(p_struct); if (p_struct->bankCode) { free(p_struct->bankCode); p_struct->bankCode=NULL; p_struct->bankCode=NULL; } if (p_src) { p_struct->bankCode=strdup(p_src); } else { p_struct->bankCode=NULL; } } void AB_ImExporterAccountInfo_SetBankName(AB_IMEXPORTER_ACCOUNTINFO *p_struct, const char *p_src){ assert(p_struct); if (p_struct->bankName) { free(p_struct->bankName); p_struct->bankName=NULL; p_struct->bankName=NULL; } if (p_src) { p_struct->bankName=strdup(p_src); } else { p_struct->bankName=NULL; } } void AB_ImExporterAccountInfo_SetAccountNumber(AB_IMEXPORTER_ACCOUNTINFO *p_struct, const char *p_src){ assert(p_struct); if (p_struct->accountNumber) { free(p_struct->accountNumber); p_struct->accountNumber=NULL; p_struct->accountNumber=NULL; } if (p_src) { p_struct->accountNumber=strdup(p_src); } else { p_struct->accountNumber=NULL; } } void AB_ImExporterAccountInfo_SetSubAccountId(AB_IMEXPORTER_ACCOUNTINFO *p_struct, const char *p_src){ assert(p_struct); if (p_struct->subAccountId) { free(p_struct->subAccountId); p_struct->subAccountId=NULL; p_struct->subAccountId=NULL; } if (p_src) { p_struct->subAccountId=strdup(p_src); } else { p_struct->subAccountId=NULL; } } void AB_ImExporterAccountInfo_SetAccountName(AB_IMEXPORTER_ACCOUNTINFO *p_struct, const char *p_src){ assert(p_struct); if (p_struct->accountName) { free(p_struct->accountName); p_struct->accountName=NULL; p_struct->accountName=NULL; } if (p_src) { p_struct->accountName=strdup(p_src); } else { p_struct->accountName=NULL; } } void AB_ImExporterAccountInfo_SetIban(AB_IMEXPORTER_ACCOUNTINFO *p_struct, const char *p_src){ assert(p_struct); if (p_struct->iban) { free(p_struct->iban); p_struct->iban=NULL; p_struct->iban=NULL; } if (p_src) { p_struct->iban=strdup(p_src); } else { p_struct->iban=NULL; } } void AB_ImExporterAccountInfo_SetBic(AB_IMEXPORTER_ACCOUNTINFO *p_struct, const char *p_src){ assert(p_struct); if (p_struct->bic) { free(p_struct->bic); p_struct->bic=NULL; p_struct->bic=NULL; } if (p_src) { p_struct->bic=strdup(p_src); } else { p_struct->bic=NULL; } } void AB_ImExporterAccountInfo_SetOwner(AB_IMEXPORTER_ACCOUNTINFO *p_struct, const char *p_src){ assert(p_struct); if (p_struct->owner) { free(p_struct->owner); p_struct->owner=NULL; p_struct->owner=NULL; } if (p_src) { p_struct->owner=strdup(p_src); } else { p_struct->owner=NULL; } } void AB_ImExporterAccountInfo_SetCurrency(AB_IMEXPORTER_ACCOUNTINFO *p_struct, const char *p_src){ assert(p_struct); if (p_struct->currency) { free(p_struct->currency); p_struct->currency=NULL; p_struct->currency=NULL; } if (p_src) { p_struct->currency=strdup(p_src); } else { p_struct->currency=NULL; } } void AB_ImExporterAccountInfo_SetDescription(AB_IMEXPORTER_ACCOUNTINFO *p_struct, const char *p_src){ assert(p_struct); if (p_struct->description) { free(p_struct->description); p_struct->description=NULL; p_struct->description=NULL; } if (p_src) { p_struct->description=strdup(p_src); } else { p_struct->description=NULL; } } void AB_ImExporterAccountInfo_SetAccountType(AB_IMEXPORTER_ACCOUNTINFO *p_struct, int p_src){ assert(p_struct); p_struct->accountType=p_src; } void AB_ImExporterAccountInfo_SetAccountId(AB_IMEXPORTER_ACCOUNTINFO *p_struct, uint32_t p_src){ assert(p_struct); p_struct->accountId=p_src; } void AB_ImExporterAccountInfo_SetBalanceList(AB_IMEXPORTER_ACCOUNTINFO *p_struct, AB_BALANCE_LIST *p_src){ assert(p_struct); if (p_struct->balanceList) { AB_Balance_List_free(p_struct->balanceList); p_struct->balanceList=NULL; p_struct->balanceList=NULL; } p_struct->balanceList=p_src; } void AB_ImExporterAccountInfo_SetTransactionList(AB_IMEXPORTER_ACCOUNTINFO *p_struct, AB_TRANSACTION_LIST *p_src){ assert(p_struct); if (p_struct->transactionList) { AB_Transaction_List_free(p_struct->transactionList); p_struct->transactionList=NULL; p_struct->transactionList=NULL; } p_struct->transactionList=p_src; } void AB_ImExporterAccountInfo_SetEStatementList(AB_IMEXPORTER_ACCOUNTINFO *p_struct, AB_DOCUMENT_LIST *p_src){ assert(p_struct); if (p_struct->eStatementList) { AB_Document_List_free(p_struct->eStatementList); p_struct->eStatementList=NULL; p_struct->eStatementList=NULL; } p_struct->eStatementList=p_src; } AB_IMEXPORTER_ACCOUNTINFO_LIST *AB_ImExporterAccountInfo_List_dup(const AB_IMEXPORTER_ACCOUNTINFO_LIST *p_src) { AB_IMEXPORTER_ACCOUNTINFO_LIST *p_dest; AB_IMEXPORTER_ACCOUNTINFO *p_elem; assert(p_src); p_dest=AB_ImExporterAccountInfo_List_new(); p_elem=AB_ImExporterAccountInfo_List_First(p_src); while(p_elem) { AB_IMEXPORTER_ACCOUNTINFO *p_cpy; p_cpy=AB_ImExporterAccountInfo_dup(p_elem); AB_ImExporterAccountInfo_List_Add(p_cpy, p_dest); p_elem=AB_ImExporterAccountInfo_List_Next(p_elem); } return p_dest; } void AB_ImExporterAccountInfo_ReadDb(AB_IMEXPORTER_ACCOUNTINFO *p_struct, GWEN_DB_NODE *p_db){ assert(p_struct); /* member "country" */ if (p_struct->country) { free(p_struct->country); p_struct->country=NULL; p_struct->country=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "country", 0, NULL); if (s) p_struct->country=strdup(s); } /* member "bankCode" */ if (p_struct->bankCode) { free(p_struct->bankCode); p_struct->bankCode=NULL; p_struct->bankCode=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "bankCode", 0, NULL); if (s) p_struct->bankCode=strdup(s); } /* member "bankName" */ if (p_struct->bankName) { free(p_struct->bankName); p_struct->bankName=NULL; p_struct->bankName=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "bankName", 0, NULL); if (s) p_struct->bankName=strdup(s); } /* member "accountNumber" */ if (p_struct->accountNumber) { free(p_struct->accountNumber); p_struct->accountNumber=NULL; p_struct->accountNumber=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "accountNumber", 0, NULL); if (s) p_struct->accountNumber=strdup(s); } /* member "subAccountId" */ if (p_struct->subAccountId) { free(p_struct->subAccountId); p_struct->subAccountId=NULL; p_struct->subAccountId=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "subAccountId", 0, NULL); if (s) p_struct->subAccountId=strdup(s); } /* member "accountName" */ if (p_struct->accountName) { free(p_struct->accountName); p_struct->accountName=NULL; p_struct->accountName=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "accountName", 0, NULL); if (s) p_struct->accountName=strdup(s); } /* member "iban" */ if (p_struct->iban) { free(p_struct->iban); p_struct->iban=NULL; p_struct->iban=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "iban", 0, NULL); if (s) p_struct->iban=strdup(s); } /* member "bic" */ if (p_struct->bic) { free(p_struct->bic); p_struct->bic=NULL; p_struct->bic=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "bic", 0, NULL); if (s) p_struct->bic=strdup(s); } /* member "owner" */ if (p_struct->owner) { free(p_struct->owner); p_struct->owner=NULL; p_struct->owner=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "owner", 0, NULL); if (s) p_struct->owner=strdup(s); } /* member "currency" */ if (p_struct->currency) { free(p_struct->currency); p_struct->currency=NULL; p_struct->currency=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "currency", 0, NULL); if (s) p_struct->currency=strdup(s); } /* member "description" */ if (p_struct->description) { free(p_struct->description); p_struct->description=NULL; p_struct->description=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "description", 0, NULL); if (s) p_struct->description=strdup(s); } /* member "accountType" */ p_struct->accountType=GWEN_DB_GetIntValue(p_db, "accountType", 0, 0); /* member "accountId" */ p_struct->accountId=GWEN_DB_GetIntValue(p_db, "accountId", 0, 0); /* member "balanceList" */ if (p_struct->balanceList) { AB_Balance_List_free(p_struct->balanceList); p_struct->balanceList=NULL; p_struct->balanceList=NULL; } { GWEN_DB_NODE *dbSource; dbSource=GWEN_DB_GetGroup(p_db, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "balanceList"); if (dbSource) { AB_BALANCE_LIST *t; GWEN_DB_NODE *dbT; t=AB_Balance_List_new(); dbT=GWEN_DB_FindFirstGroup(dbSource, "balance"); while(dbT) { AB_BALANCE *elem; elem=AB_Balance_fromDb(dbT); if (elem) AB_Balance_List_Add(elem, t); dbT=GWEN_DB_FindNextGroup(dbT, "balance"); } p_struct->balanceList=t; } else p_struct->balanceList=AB_Balance_List_new(); } /* member "transactionList" */ if (p_struct->transactionList) { AB_Transaction_List_free(p_struct->transactionList); p_struct->transactionList=NULL; p_struct->transactionList=NULL; } { GWEN_DB_NODE *dbSource; dbSource=GWEN_DB_GetGroup(p_db, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "transactionList"); if (dbSource) { AB_TRANSACTION_LIST *t; GWEN_DB_NODE *dbT; t=AB_Transaction_List_new(); dbT=GWEN_DB_FindFirstGroup(dbSource, "transaction"); while(dbT) { AB_TRANSACTION *elem; elem=AB_Transaction_fromDb(dbT); if (elem) AB_Transaction_List_Add(elem, t); dbT=GWEN_DB_FindNextGroup(dbT, "transaction"); } p_struct->transactionList=t; } else p_struct->transactionList=AB_Transaction_List_new(); } /* member "eStatementList" */ if (p_struct->eStatementList) { AB_Document_List_free(p_struct->eStatementList); p_struct->eStatementList=NULL; p_struct->eStatementList=NULL; } { GWEN_DB_NODE *dbSource; dbSource=GWEN_DB_GetGroup(p_db, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "eStatementList"); if (dbSource) { AB_DOCUMENT_LIST *t; GWEN_DB_NODE *dbT; t=AB_Document_List_new(); dbT=GWEN_DB_FindFirstGroup(dbSource, "eStatement"); while(dbT) { AB_DOCUMENT *elem; elem=AB_Document_fromDb(dbT); if (elem) AB_Document_List_Add(elem, t); dbT=GWEN_DB_FindNextGroup(dbT, "eStatement"); } p_struct->eStatementList=t; } else p_struct->eStatementList=AB_Document_List_new(); } } int AB_ImExporterAccountInfo_WriteDb(const AB_IMEXPORTER_ACCOUNTINFO *p_struct, GWEN_DB_NODE *p_db) { int p_rv; assert(p_struct); /* member "country" */ if (p_struct->country) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "country", p_struct->country); else { GWEN_DB_DeleteVar(p_db, "country"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "bankCode" */ if (p_struct->bankCode) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "bankCode", p_struct->bankCode); else { GWEN_DB_DeleteVar(p_db, "bankCode"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "bankName" */ if (p_struct->bankName) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "bankName", p_struct->bankName); else { GWEN_DB_DeleteVar(p_db, "bankName"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "accountNumber" */ if (p_struct->accountNumber) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "accountNumber", p_struct->accountNumber); else { GWEN_DB_DeleteVar(p_db, "accountNumber"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "subAccountId" */ if (p_struct->subAccountId) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "subAccountId", p_struct->subAccountId); else { GWEN_DB_DeleteVar(p_db, "subAccountId"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "accountName" */ if (p_struct->accountName) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "accountName", p_struct->accountName); else { GWEN_DB_DeleteVar(p_db, "accountName"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "iban" */ if (p_struct->iban) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "iban", p_struct->iban); else { GWEN_DB_DeleteVar(p_db, "iban"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "bic" */ if (p_struct->bic) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "bic", p_struct->bic); else { GWEN_DB_DeleteVar(p_db, "bic"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "owner" */ if (p_struct->owner) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "owner", p_struct->owner); else { GWEN_DB_DeleteVar(p_db, "owner"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "currency" */ if (p_struct->currency) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "currency", p_struct->currency); else { GWEN_DB_DeleteVar(p_db, "currency"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "description" */ if (p_struct->description) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "description", p_struct->description); else { GWEN_DB_DeleteVar(p_db, "description"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "accountType" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "accountType", p_struct->accountType); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "accountId" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "accountId", p_struct->accountId); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "balanceList" */ { if (p_struct->balanceList) { GWEN_DB_NODE *dbDest; AB_BALANCE *elem; dbDest=GWEN_DB_GetGroup(p_db, GWEN_DB_FLAGS_OVERWRITE_GROUPS, "balanceList"); assert(dbDest); p_rv=0; elem=AB_Balance_List_First(p_struct->balanceList); while(elem) { GWEN_DB_NODE *dbElem; dbElem=GWEN_DB_GetGroup(dbDest, GWEN_PATH_FLAGS_CREATE_GROUP, "balance"); assert(dbElem); p_rv=AB_Balance_toDb(elem, dbElem); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", p_rv); break; } elem=AB_Balance_List_Next(elem); } } else p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "transactionList" */ { if (p_struct->transactionList) { GWEN_DB_NODE *dbDest; AB_TRANSACTION *elem; dbDest=GWEN_DB_GetGroup(p_db, GWEN_DB_FLAGS_OVERWRITE_GROUPS, "transactionList"); assert(dbDest); p_rv=0; elem=AB_Transaction_List_First(p_struct->transactionList); while(elem) { GWEN_DB_NODE *dbElem; dbElem=GWEN_DB_GetGroup(dbDest, GWEN_PATH_FLAGS_CREATE_GROUP, "transaction"); assert(dbElem); p_rv=AB_Transaction_toDb(elem, dbElem); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", p_rv); break; } elem=AB_Transaction_List_Next(elem); } } else p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "eStatementList" */ { if (p_struct->eStatementList) { GWEN_DB_NODE *dbDest; AB_DOCUMENT *elem; dbDest=GWEN_DB_GetGroup(p_db, GWEN_DB_FLAGS_OVERWRITE_GROUPS, "eStatementList"); assert(dbDest); p_rv=0; elem=AB_Document_List_First(p_struct->eStatementList); while(elem) { GWEN_DB_NODE *dbElem; dbElem=GWEN_DB_GetGroup(dbDest, GWEN_PATH_FLAGS_CREATE_GROUP, "eStatement"); assert(dbElem); p_rv=AB_Document_toDb(elem, dbElem); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", p_rv); break; } elem=AB_Document_List_Next(elem); } } else p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } return 0; } AB_IMEXPORTER_ACCOUNTINFO *AB_ImExporterAccountInfo_fromDb(GWEN_DB_NODE *p_db) { AB_IMEXPORTER_ACCOUNTINFO *p_struct; p_struct=AB_ImExporterAccountInfo_new(); AB_ImExporterAccountInfo_ReadDb(p_struct, p_db); return p_struct; } int AB_ImExporterAccountInfo_toDb(const AB_IMEXPORTER_ACCOUNTINFO *p_struct, GWEN_DB_NODE *p_db) { return AB_ImExporterAccountInfo_WriteDb(p_struct, p_db); } void AB_ImExporterAccountInfo_ReadXml(AB_IMEXPORTER_ACCOUNTINFO *p_struct, GWEN_XMLNODE *p_db){ assert(p_struct); /* member "country" */ if (p_struct->country) { free(p_struct->country); p_struct->country=NULL; p_struct->country=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "country", NULL); if (s) p_struct->country=strdup(s); } /* member "bankCode" */ if (p_struct->bankCode) { free(p_struct->bankCode); p_struct->bankCode=NULL; p_struct->bankCode=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "bankCode", NULL); if (s) p_struct->bankCode=strdup(s); } /* member "bankName" */ if (p_struct->bankName) { free(p_struct->bankName); p_struct->bankName=NULL; p_struct->bankName=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "bankName", NULL); if (s) p_struct->bankName=strdup(s); } /* member "accountNumber" */ if (p_struct->accountNumber) { free(p_struct->accountNumber); p_struct->accountNumber=NULL; p_struct->accountNumber=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "accountNumber", NULL); if (s) p_struct->accountNumber=strdup(s); } /* member "subAccountId" */ if (p_struct->subAccountId) { free(p_struct->subAccountId); p_struct->subAccountId=NULL; p_struct->subAccountId=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "subAccountId", NULL); if (s) p_struct->subAccountId=strdup(s); } /* member "accountName" */ if (p_struct->accountName) { free(p_struct->accountName); p_struct->accountName=NULL; p_struct->accountName=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "accountName", NULL); if (s) p_struct->accountName=strdup(s); } /* member "iban" */ if (p_struct->iban) { free(p_struct->iban); p_struct->iban=NULL; p_struct->iban=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "iban", NULL); if (s) p_struct->iban=strdup(s); } /* member "bic" */ if (p_struct->bic) { free(p_struct->bic); p_struct->bic=NULL; p_struct->bic=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "bic", NULL); if (s) p_struct->bic=strdup(s); } /* member "owner" */ if (p_struct->owner) { free(p_struct->owner); p_struct->owner=NULL; p_struct->owner=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "owner", NULL); if (s) p_struct->owner=strdup(s); } /* member "currency" */ if (p_struct->currency) { free(p_struct->currency); p_struct->currency=NULL; p_struct->currency=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "currency", NULL); if (s) p_struct->currency=strdup(s); } /* member "description" */ if (p_struct->description) { free(p_struct->description); p_struct->description=NULL; p_struct->description=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "description", NULL); if (s) p_struct->description=strdup(s); } /* member "accountType" */ p_struct->accountType=GWEN_XMLNode_GetIntValue(p_db, "accountType", 0); /* member "accountId" */ p_struct->accountId=GWEN_XMLNode_GetIntValue(p_db, "accountId", 0); /* member "balanceList" */ if (p_struct->balanceList) { AB_Balance_List_free(p_struct->balanceList); p_struct->balanceList=NULL; p_struct->balanceList=NULL; } { GWEN_XMLNODE *dbSource; dbSource=GWEN_XMLNode_FindFirstTag(p_db, "balanceList", NULL, NULL); if (dbSource) { AB_BALANCE_LIST *t; GWEN_XMLNODE *dbT; t=AB_Balance_List_new(); dbT=GWEN_XMLNode_FindFirstTag(dbSource, "balance", NULL, NULL); while(dbT) { AB_BALANCE *elem; elem=AB_Balance_fromXml(dbT); if (elem) AB_Balance_List_Add(elem, t); dbT=GWEN_XMLNode_FindNextTag(dbT, "balance", NULL, NULL); } p_struct->balanceList=t; } else p_struct->balanceList=AB_Balance_List_new(); } /* member "transactionList" */ if (p_struct->transactionList) { AB_Transaction_List_free(p_struct->transactionList); p_struct->transactionList=NULL; p_struct->transactionList=NULL; } { GWEN_XMLNODE *dbSource; dbSource=GWEN_XMLNode_FindFirstTag(p_db, "transactionList", NULL, NULL); if (dbSource) { AB_TRANSACTION_LIST *t; GWEN_XMLNODE *dbT; t=AB_Transaction_List_new(); dbT=GWEN_XMLNode_FindFirstTag(dbSource, "transaction", NULL, NULL); while(dbT) { AB_TRANSACTION *elem; elem=AB_Transaction_fromXml(dbT); if (elem) AB_Transaction_List_Add(elem, t); dbT=GWEN_XMLNode_FindNextTag(dbT, "transaction", NULL, NULL); } p_struct->transactionList=t; } else p_struct->transactionList=AB_Transaction_List_new(); } /* member "eStatementList" */ if (p_struct->eStatementList) { AB_Document_List_free(p_struct->eStatementList); p_struct->eStatementList=NULL; p_struct->eStatementList=NULL; } { GWEN_XMLNODE *dbSource; dbSource=GWEN_XMLNode_FindFirstTag(p_db, "eStatementList", NULL, NULL); if (dbSource) { AB_DOCUMENT_LIST *t; GWEN_XMLNODE *dbT; t=AB_Document_List_new(); dbT=GWEN_XMLNode_FindFirstTag(dbSource, "eStatement", NULL, NULL); while(dbT) { AB_DOCUMENT *elem; elem=AB_Document_fromXml(dbT); if (elem) AB_Document_List_Add(elem, t); dbT=GWEN_XMLNode_FindNextTag(dbT, "eStatement", NULL, NULL); } p_struct->eStatementList=t; } else p_struct->eStatementList=AB_Document_List_new(); } } void AB_ImExporterAccountInfo_WriteXml(const AB_IMEXPORTER_ACCOUNTINFO *p_struct, GWEN_XMLNODE *p_db) { assert(p_struct); /* member "country" */ GWEN_XMLNode_SetCharValue(p_db, "country", p_struct->country); /* member "bankCode" */ GWEN_XMLNode_SetCharValue(p_db, "bankCode", p_struct->bankCode); /* member "bankName" */ GWEN_XMLNode_SetCharValue(p_db, "bankName", p_struct->bankName); /* member "accountNumber" */ GWEN_XMLNode_SetCharValue(p_db, "accountNumber", p_struct->accountNumber); /* member "subAccountId" */ GWEN_XMLNode_SetCharValue(p_db, "subAccountId", p_struct->subAccountId); /* member "accountName" */ GWEN_XMLNode_SetCharValue(p_db, "accountName", p_struct->accountName); /* member "iban" */ GWEN_XMLNode_SetCharValue(p_db, "iban", p_struct->iban); /* member "bic" */ GWEN_XMLNode_SetCharValue(p_db, "bic", p_struct->bic); /* member "owner" */ GWEN_XMLNode_SetCharValue(p_db, "owner", p_struct->owner); /* member "currency" */ GWEN_XMLNode_SetCharValue(p_db, "currency", p_struct->currency); /* member "description" */ GWEN_XMLNode_SetCharValue(p_db, "description", p_struct->description); /* member "accountType" */ GWEN_XMLNode_SetIntValue(p_db, "accountType", p_struct->accountType); /* member "accountId" */ GWEN_XMLNode_SetIntValue(p_db, "accountId", p_struct->accountId); /* member "balanceList" */ { if (p_struct->balanceList) { GWEN_XMLNODE *dbDest; AB_BALANCE *elem; dbDest=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "balanceList"); elem=AB_Balance_List_First(p_struct->balanceList); while(elem) { GWEN_XMLNODE *dbElem; dbElem=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "balance"); assert(dbElem); AB_Balance_toXml(elem, dbElem); GWEN_XMLNode_AddChild(dbDest, dbElem); elem=AB_Balance_List_Next(elem); } GWEN_XMLNode_AddChild(p_db, dbDest); } } /* member "transactionList" */ { if (p_struct->transactionList) { GWEN_XMLNODE *dbDest; AB_TRANSACTION *elem; dbDest=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "transactionList"); elem=AB_Transaction_List_First(p_struct->transactionList); while(elem) { GWEN_XMLNODE *dbElem; dbElem=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "transaction"); assert(dbElem); AB_Transaction_toXml(elem, dbElem); GWEN_XMLNode_AddChild(dbDest, dbElem); elem=AB_Transaction_List_Next(elem); } GWEN_XMLNode_AddChild(p_db, dbDest); } } /* member "eStatementList" */ { if (p_struct->eStatementList) { GWEN_XMLNODE *dbDest; AB_DOCUMENT *elem; dbDest=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "eStatementList"); elem=AB_Document_List_First(p_struct->eStatementList); while(elem) { GWEN_XMLNODE *dbElem; dbElem=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "eStatement"); assert(dbElem); AB_Document_toXml(elem, dbElem); GWEN_XMLNode_AddChild(dbDest, dbElem); elem=AB_Document_List_Next(elem); } GWEN_XMLNode_AddChild(p_db, dbDest); } } } void AB_ImExporterAccountInfo_toXml(const AB_IMEXPORTER_ACCOUNTINFO *p_struct, GWEN_XMLNODE *p_db) { AB_ImExporterAccountInfo_WriteXml(p_struct, p_db); } AB_IMEXPORTER_ACCOUNTINFO *AB_ImExporterAccountInfo_fromXml(GWEN_XMLNODE *p_db) { AB_IMEXPORTER_ACCOUNTINFO *p_struct; p_struct=AB_ImExporterAccountInfo_new(); AB_ImExporterAccountInfo_ReadXml(p_struct, p_db); return p_struct; } AB_IMEXPORTER_ACCOUNTINFO *AB_ImExporterAccountInfo_List_GetByIban(const AB_IMEXPORTER_ACCOUNTINFO_LIST *p_list, const char *p_cmp){ AB_IMEXPORTER_ACCOUNTINFO *p_struct; assert(p_list); p_struct = AB_ImExporterAccountInfo_List_First(p_list); while(p_struct) { int p_rv; if (p_struct->iban && p_cmp) p_rv=strcasecmp(p_cmp, p_struct->iban); else if (p_cmp) p_rv=1; else if (p_struct->iban) p_rv=-1; else p_rv=0; if (p_rv == 0) return p_struct; p_struct = AB_ImExporterAccountInfo_List_Next(p_struct); } return NULL; } AB_IMEXPORTER_ACCOUNTINFO *AB_ImExporterAccountInfo_List_GetByAccountId(const AB_IMEXPORTER_ACCOUNTINFO_LIST *p_list, uint32_t p_cmp){ AB_IMEXPORTER_ACCOUNTINFO *p_struct; assert(p_list); p_struct = AB_ImExporterAccountInfo_List_First(p_list); while(p_struct) { int p_rv; if (p_struct->accountId==p_cmp) p_rv=0; else if (p_cmpaccountId) p_rv=-1; else p_rv=1; if (p_rv == 0) return p_struct; p_struct = AB_ImExporterAccountInfo_List_Next(p_struct); } return NULL; } void AB_ImExporterAccountInfo_toHashString(const AB_IMEXPORTER_ACCOUNTINFO *p_struct, GWEN_BUFFER *p_buffer) { assert(p_struct); /* member "country"*/ if (p_struct->country) GWEN_Buffer_AppendString(p_buffer, p_struct->country); GWEN_Buffer_AppendByte(p_buffer, ':'); /* member "bankCode"*/ if (p_struct->bankCode) GWEN_Buffer_AppendString(p_buffer, p_struct->bankCode); GWEN_Buffer_AppendByte(p_buffer, ':'); /* member "bankName"*/ if (p_struct->bankName) GWEN_Buffer_AppendString(p_buffer, p_struct->bankName); GWEN_Buffer_AppendByte(p_buffer, ':'); /* member "accountNumber"*/ if (p_struct->accountNumber) GWEN_Buffer_AppendString(p_buffer, p_struct->accountNumber); GWEN_Buffer_AppendByte(p_buffer, ':'); /* member "subAccountId"*/ if (p_struct->subAccountId) GWEN_Buffer_AppendString(p_buffer, p_struct->subAccountId); GWEN_Buffer_AppendByte(p_buffer, ':'); /* member "accountName"*/ if (p_struct->accountName) GWEN_Buffer_AppendString(p_buffer, p_struct->accountName); GWEN_Buffer_AppendByte(p_buffer, ':'); /* member "iban"*/ if (p_struct->iban) GWEN_Buffer_AppendString(p_buffer, p_struct->iban); GWEN_Buffer_AppendByte(p_buffer, ':'); /* member "bic"*/ if (p_struct->bic) GWEN_Buffer_AppendString(p_buffer, p_struct->bic); GWEN_Buffer_AppendByte(p_buffer, ':'); /* member "owner"*/ if (p_struct->owner) GWEN_Buffer_AppendString(p_buffer, p_struct->owner); GWEN_Buffer_AppendByte(p_buffer, ':'); /* member "currency"*/ if (p_struct->currency) GWEN_Buffer_AppendString(p_buffer, p_struct->currency); GWEN_Buffer_AppendByte(p_buffer, ':'); /* member "description"*/ if (p_struct->description) GWEN_Buffer_AppendString(p_buffer, p_struct->description); GWEN_Buffer_AppendByte(p_buffer, ':'); /* member "accountType"*/ { char numbuf[32]; snprintf(numbuf, sizeof(numbuf)-1, "%d", p_struct->accountType); numbuf[sizeof(numbuf)-1]=0; GWEN_Buffer_AppendString(p_buffer, numbuf); } GWEN_Buffer_AppendByte(p_buffer, ':'); /* member "accountId"*/ { char numbuf[32]; snprintf(numbuf, sizeof(numbuf)-1, "%d", p_struct->accountId); numbuf[sizeof(numbuf)-1]=0; GWEN_Buffer_AppendString(p_buffer, numbuf); } GWEN_Buffer_AppendByte(p_buffer, ':'); /* member "balanceList" doesn't have with_hash flag, ignoring */ /* member "transactionList" doesn't have with_hash flag, ignoring */ /* member "eStatementList" doesn't have with_hash flag, ignoring */ } static AB_IMEXPORTER_ACCOUNTINFO *AB_ImExporterAccountInfo_List2__freeAll_cb(AB_IMEXPORTER_ACCOUNTINFO *t, void *user_data) { AB_ImExporterAccountInfo_free(t); return NULL; } int AB_ImExporterAccountInfo_List2_freeAll(AB_IMEXPORTER_ACCOUNTINFO_LIST2 *tl) { if (tl) { AB_ImExporterAccountInfo_List2_ForEach(tl, AB_ImExporterAccountInfo_List2__freeAll_cb, NULL); AB_ImExporterAccountInfo_List2_free(tl); } else { DBG_ERROR(AQBANKING_LOGDOMAIN, "List missing"); return GWEN_ERROR_INVALID; } return 0; } AB_TRANSACTION *AB_ImExporterAccountInfo_GetFirstTransaction(const AB_IMEXPORTER_ACCOUNTINFO *st, int ty, int cmd) { assert(st); if (st->transactionList) return AB_Transaction_List_FindFirstByType(st->transactionList, ty, cmd); return NULL; } void AB_ImExporterAccountInfo_AddTransaction(AB_IMEXPORTER_ACCOUNTINFO *st, AB_TRANSACTION *t) { assert(st); if (NULL==st->transactionList) st->transactionList=AB_Transaction_List_new(); AB_Transaction_List_Add(t, st->transactionList); } int AB_ImExporterAccountInfo_GetTransactionCount(const AB_IMEXPORTER_ACCOUNTINFO *st, int ty, int cmd) { assert(st); if (st->transactionList) return AB_Transaction_List_CountByType(st->transactionList, ty, cmd); return 0; } AB_BALANCE *AB_ImExporterAccountInfo_GetFirstBalance(const AB_IMEXPORTER_ACCOUNTINFO *st) { assert(st); if (st->balanceList) return AB_Balance_List_First(st->balanceList); return NULL; } void AB_ImExporterAccountInfo_AddBalance(AB_IMEXPORTER_ACCOUNTINFO *st, AB_BALANCE *bal) { assert(bal); if (NULL==st->balanceList) st->balanceList=AB_Balance_List_new(); AB_Balance_List_Add(bal, st->balanceList); } AB_DOCUMENT *AB_ImExporterAccountInfo_GetFirstEStatement(const AB_IMEXPORTER_ACCOUNTINFO *st) { assert(st); if (st->eStatementList) return AB_Document_List_First(st->eStatementList); return NULL; } void AB_ImExporterAccountInfo_AddEStatement(AB_IMEXPORTER_ACCOUNTINFO *st, AB_DOCUMENT *d) { assert(d); if (NULL==st->eStatementList) st->eStatementList=AB_Document_List_new(); AB_Document_List_Add(d, st->eStatementList); } void AB_ImExporterAccountInfo_Clear(AB_IMEXPORTER_ACCOUNTINFO *st) { assert(st); if (st->transactionList) AB_Transaction_List_Clear(st->transactionList); if (st->balanceList) AB_Balance_List_Clear(st->balanceList); if (st->eStatementList) AB_Document_List_Clear(st->eStatementList); } void AB_ImExporterAccountInfo_FillFromTransaction(AB_IMEXPORTER_ACCOUNTINFO *st, const AB_TRANSACTION *t) { const char *s; assert(st); assert(t); s=AB_Transaction_GetLocalBankCode(t); AB_ImExporterAccountInfo_SetBankCode(st, s); s=AB_Transaction_GetLocalAccountNumber(t); AB_ImExporterAccountInfo_SetAccountNumber(st, s); s=AB_Transaction_GetLocalSuffix(t); AB_ImExporterAccountInfo_SetSubAccountId(st, s); s=AB_Transaction_GetLocalIban(t); AB_ImExporterAccountInfo_SetIban(st, s); s=AB_Transaction_GetLocalBic(t); AB_ImExporterAccountInfo_SetBic(st, s); s=AB_Transaction_GetLocalName(t); AB_ImExporterAccountInfo_SetOwner(st, s); } AB_IMEXPORTER_ACCOUNTINFO *AB_ImExporterAccountInfo_List_GetByBankCodeAndAccountNumber(AB_IMEXPORTER_ACCOUNTINFO_LIST *l, const char *bankCode, const char *accountNumber, int accountType) { AB_IMEXPORTER_ACCOUNTINFO *iea; assert(l); if (!bankCode) bankCode=""; if (!accountNumber) accountNumber=""; iea=AB_ImExporterAccountInfo_List_First(l); while(iea) { const char *sBankCode; const char *sAccountNumber; sBankCode=AB_ImExporterAccountInfo_GetBankCode(iea); if (sBankCode==NULL) sBankCode=""; sAccountNumber=AB_ImExporterAccountInfo_GetAccountNumber(iea); if (sAccountNumber==NULL) sAccountNumber=""; if ((strcasecmp(sBankCode, bankCode)==0) && (strcasecmp(sAccountNumber, accountNumber)==0) && ((accountType<=AB_AccountType_Unknown) || (accountType==AB_ImExporterAccountInfo_GetAccountType(iea))) ) return iea; iea=AB_ImExporterAccountInfo_List_Next(iea); } return NULL; } AB_IMEXPORTER_ACCOUNTINFO *AB_ImExporterAccountInfo_List_Find(AB_IMEXPORTER_ACCOUNTINFO_LIST *l, uint32_t uniqueId, const char *iban, const char *bankCode, const char *accountNumber, int accountType) { AB_IMEXPORTER_ACCOUNTINFO *iea=NULL; assert(l); if (uniqueId) iea=AB_ImExporterAccountInfo_List_GetByAccountId(l, uniqueId); if (iea==NULL && iban && *iban) AB_ImExporterAccountInfo_List_GetByIban(l, iban); if (iea==NULL) iea=AB_ImExporterAccountInfo_List_GetByBankCodeAndAccountNumber(l, bankCode, accountNumber, accountType); return iea; } int AB_ImExporterAccountInfo_Matches(const AB_IMEXPORTER_ACCOUNTINFO *a, uint32_t uniqueId, const char *country, const char *bankId, const char *accountNumber, const char *subAccountId, const char *iban, const char *currency, int ty) { const char *lcountry; const char *lbankId; const char *laccountNumber; const char *lsubAccountId; const char *liban; const char *lcurrency; int lty; if (!country) country="*"; if (!bankId) bankId="*"; if (!accountNumber) accountNumber="*"; if (!subAccountId) subAccountId="*"; if (!iban) iban="*"; if (!currency) currency="*"; if (ty>=AB_AccountType_Last) ty=AB_AccountType_Unknown; lcountry=AB_ImExporterAccountInfo_GetCountry(a); lbankId=AB_ImExporterAccountInfo_GetBankCode(a); laccountNumber=AB_ImExporterAccountInfo_GetAccountNumber(a); lsubAccountId=AB_ImExporterAccountInfo_GetSubAccountId(a); liban=AB_ImExporterAccountInfo_GetIban(a); lcurrency=AB_ImExporterAccountInfo_GetCurrency(a); lty=AB_ImExporterAccountInfo_GetAccountType(a); if (!lcountry) lcountry=""; if (!lbankId) lbankId=""; if (!laccountNumber) laccountNumber=""; if (!lsubAccountId) lsubAccountId=""; if (!liban) liban=""; if (!lcurrency) lcurrency=""; if (lty>=AB_AccountType_Last || lty <=AB_AccountType_Unknown) lty=AB_AccountType_Unknown; if (((uniqueId==0 || uniqueId==AB_ImExporterAccountInfo_GetAccountId(a))) && (-1!=GWEN_Text_ComparePattern(lcountry, country, 0)) && (-1!=GWEN_Text_ComparePattern(lbankId, bankId, 0)) && (-1!=GWEN_Text_ComparePattern(laccountNumber, accountNumber, 0)) && (-1!=GWEN_Text_ComparePattern(lsubAccountId, subAccountId, 0)) && (-1!=GWEN_Text_ComparePattern(liban, iban, 0)) && (-1!=GWEN_Text_ComparePattern(lcurrency, currency, 0)) && ((ty==AB_AccountType_Unknown) || (ty==lty))) return 1; return 0; } AB_IMEXPORTER_ACCOUNTINFO *AB_ImExporterAccountInfo_List__FindInternal(AB_IMEXPORTER_ACCOUNTINFO *a, uint32_t uniqueId, const char *country, const char *bankId, const char *accountNumber, const char *subAccountId, const char *iban, const char *currency, int ty) { if (!country) country="*"; if (!bankId) bankId="*"; if (!accountNumber) accountNumber="*"; if (!subAccountId) subAccountId="*"; if (!iban) iban="*"; if (!currency) currency="*"; if (ty>=AB_AccountType_Last) ty=AB_AccountType_Unknown; while(a) { int rv; rv=AB_ImExporterAccountInfo_Matches(a, uniqueId, country, bankId, accountNumber, subAccountId, iban, currency, ty); if (rv==1) break; a=AB_ImExporterAccountInfo_List_Next(a); } /* while */ return a; } AB_IMEXPORTER_ACCOUNTINFO *AB_ImExporterAccountInfo_List_FindFirst(AB_IMEXPORTER_ACCOUNTINFO_LIST *al, uint32_t uniqueId, const char *country, const char *bankId, const char *accountNumber, const char *subAccountId, const char *iban, const char *currency, int ty) { AB_IMEXPORTER_ACCOUNTINFO *a; if (AB_ImExporterAccountInfo_List_GetCount(al)==0) { DBG_INFO(AQBANKING_LOGDOMAIN, "No accounts"); return NULL; } a=AB_ImExporterAccountInfo_List_First(al); assert(a); return AB_ImExporterAccountInfo_List__FindInternal(a, uniqueId, country, bankId, accountNumber, subAccountId, iban, currency, ty); } AB_IMEXPORTER_ACCOUNTINFO *AB_ImExporterAccountInfo_List_FindNext(AB_IMEXPORTER_ACCOUNTINFO *a, uint32_t uniqueId, const char *country, const char *bankId, const char *accountNumber, const char *subAccountId, const char *iban, const char *currency, int ty) { assert(a); a=AB_ImExporterAccountInfo_List_Next(a); if (a==NULL) { DBG_INFO(AQBANKING_LOGDOMAIN, "No more account specs"); return NULL; } return AB_ImExporterAccountInfo_List__FindInternal(a, uniqueId, country, bankId, accountNumber, subAccountId, iban, currency, ty); } AB_IMEXPORTER_ACCOUNTINFO *AB_ImExporterAccountInfo_List_GetOrAdd(AB_IMEXPORTER_ACCOUNTINFO_LIST *l, uint32_t uniqueId, const char *iban, const char *bankCode, const char *accountNumber, int accountType) { AB_IMEXPORTER_ACCOUNTINFO *iea=NULL; assert(l); iea=AB_ImExporterAccountInfo_List_Find(l, uniqueId, iban, bankCode, accountNumber, accountType); if (iea==NULL) { iea=AB_ImExporterAccountInfo_new(); AB_ImExporterAccountInfo_SetAccountId(iea, uniqueId); AB_ImExporterAccountInfo_SetIban(iea, iban); AB_ImExporterAccountInfo_SetBankCode(iea, bankCode); AB_ImExporterAccountInfo_SetAccountNumber(iea, accountNumber); AB_ImExporterAccountInfo_SetAccountType(iea, accountType); AB_ImExporterAccountInfo_List_Add(iea, l); } return iea; } /* code headers */ aqbanking-6.6.1/src/libs/aqbanking/types/ab_transaction.tm20000664000175000017500000000030115037736054020640 00000000000000 AB_TRANSACTION AB_Transaction aqbanking-6.6.1/src/libs/aqbanking/types/account_spec.xml0000664000175000017500000006557514156464025020442 00000000000000 This type contains all important information about accounts. All text fields are in UTF-8. AB_ACCOUNT_SPEC AB_AccountSpec account_spec with_xml with_db with_list1 with_list2 with_refcount
aqbanking/error.h
aqbanking/account_type.h
gwenhywfar/gwendate.h
gwenhywfar/mdigest.h
gwenhywfar/text.h
gwenhywfar/buffer.h
aqbanking/types/transaction.h
aqbanking/types/transactionlimits.h
aqbanking/types/refaccount.h
/** \n * Check whether a given account info object matches the given criteria. \n * @param a account info object to match \n * @param backendName name of the banking backend (wildcards and jokers allowed) \n * @param country ISO code of the country (wildcards and jokers allowed) \n * @param bankId bank code to search for (wildcards and jokers allowed) \n * @param accountNumber account number to search for (wildcards and jokers allowed) \n * @param subAccountId sub account number (wildcards and jokers allowed) \n * @param iban IBAN to search for (wildcards and jokers allowed) \n * @param currency currecny the account uses (wildcards and jokers allowed) \n * @param ty account type (use AB_AccountType_Unknown as wildcard) \n */ \n $(api) int $(struct_prefix)_Matches(const $(struct_type) *a, const char *backendName, const char *country, const char *bankId, const char *accountNumber, const char *subAccountId, const char *iban, const char *currency, int ty); int $(struct_prefix)_Matches(const $(struct_type) *a, const char *backendName, const char *country, const char *bankId, const char *accountNumber, const char *subAccountId, const char *iban, const char *currency, int ty) { const char *lbackendName; const char *lcountry; const char *lbankId; const char *laccountNumber; const char *lsubAccountId; const char *liban; const char *lcurrency; int lty; if (!backendName) backendName="*"; if (!country) country="*"; if (!bankId) bankId="*"; if (!accountNumber) accountNumber="*"; if (!subAccountId) subAccountId="*"; if (!iban) iban="*"; if (!currency) currency="*"; if (ty>=AB_AccountType_Last) ty=AB_AccountType_Unknown; lbackendName=$(struct_prefix)_GetBackendName(a); lcountry=$(struct_prefix)_GetCountry(a); lbankId=$(struct_prefix)_GetBankCode(a); laccountNumber=$(struct_prefix)_GetAccountNumber(a); lsubAccountId=$(struct_prefix)_GetSubAccountNumber(a); liban=$(struct_prefix)_GetIban(a); lcurrency=$(struct_prefix)_GetCurrency(a); lty=$(struct_prefix)_GetType(a); if (!lcountry) lcountry=""; if (!lbankId) lbankId=""; if (!laccountNumber) laccountNumber=""; if (!lsubAccountId) lsubAccountId=""; if (!liban) liban=""; if (!lcurrency) lcurrency=""; if (lty>=AB_AccountType_Last || lty <=AB_AccountType_Unknown) lty=AB_AccountType_Unknown; if ((-1!=GWEN_Text_ComparePattern(lbackendName, backendName, 0)) && (-1!=GWEN_Text_ComparePattern(lcountry, country, 0)) && (-1!=GWEN_Text_ComparePattern(lbankId, bankId, 0)) && (-1!=GWEN_Text_ComparePattern(laccountNumber, accountNumber, 0)) && (-1!=GWEN_Text_ComparePattern(lsubAccountId, subAccountId, 0)) && (-1!=GWEN_Text_ComparePattern(liban, iban, 0)) && (-1!=GWEN_Text_ComparePattern(lcurrency, currency, 0)) && ((ty==AB_AccountType_Unknown) || (ty==lty))) return 1; return 0; } with_list1 with_list1 /** \n * Find an account info object in a list of account info objects. \n * @param a account info object with which to start searching \n * @param backendName name of the banking backend (wildcards and jokers allowed) \n * @param country ISO code of the country (wildcards and jokers allowed) \n * @param bankId bank code to search for (wildcards and jokers allowed) \n * @param accountNumber account number to search for (wildcards and jokers allowed) \n * @param subAccountId sub account number (wildcards and jokers allowed) \n * @param iban IBAN to search for (wildcards and jokers allowed) \n * @param currency currecny the account uses (wildcards and jokers allowed) \n * @param ty account type (use AB_AccountType_Unknown as wildcard) \n */ \n $(struct_type) *$(struct_prefix)_List__FindInternal($(struct_type) *a, const char *backendName, const char *country, const char *bankId, const char *accountNumber, const char *subAccountId, const char *iban, const char *currency, int ty); with_list1 with_list1 $(struct_type) *$(struct_prefix)_List__FindInternal($(struct_type) *a, const char *backendName, const char *country, const char *bankId, const char *accountNumber, const char *subAccountId, const char *iban, const char *currency, int ty) { if (!backendName) backendName="*"; if (!country) country="*"; if (!bankId) bankId="*"; if (!accountNumber) accountNumber="*"; if (!subAccountId) subAccountId="*"; if (!iban) iban="*"; if (!currency) currency="*"; if (ty>=AB_AccountType_Last) ty=AB_AccountType_Unknown; while(a) { const char *lbackendName; lbackendName=$(struct_prefix)_GetBackendName(a); if (! (lbackendName && *lbackendName) ) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Account: %s/%s/%s: No backend, ignoring", $(struct_prefix)_GetCountry(a), $(struct_prefix)_GetBankCode(a), $(struct_prefix)_GetAccountNumber(a)); } else { int rv; rv=$(struct_prefix)_Matches(a, backendName, country, bankId, accountNumber, subAccountId, iban, currency, ty); if (rv==1) break; } a=$(struct_prefix)_List_Next(a); } /* while */ return a; } with_list1 with_list1 /** \n * Find the first matching account info object in a list of account info objects. \n * @param al list of account info objects among to search \n * @param backendName name of the banking backend (wildcards and jokers allowed) \n * @param country ISO code of the country (wildcards and jokers allowed) \n * @param bankId bank code to search for (wildcards and jokers allowed) \n * @param accountNumber account number to search for (wildcards and jokers allowed) \n * @param subAccountId sub account number (wildcards and jokers allowed) \n * @param iban IBAN to search for (wildcards and jokers allowed) \n * @param currency currecny the account uses (wildcards and jokers allowed) \n * @param ty account type (use AB_AccountType_Unknown as wildcard) \n */ \n $(api) $(struct_type) *$(struct_prefix)_List_FindFirst(const $(struct_type)_LIST *al, \n const char *backendName, \n const char *country, \n const char *bankId, \n const char *accountNumber, \n const char *subAccountId, \n const char *iban, \n const char *currency, \n int ty); with_list1 with_list1 $(struct_type) *$(struct_prefix)_List_FindFirst(const $(struct_type)_LIST *al, const char *backendName, const char *country, const char *bankId, const char *accountNumber, const char *subAccountId, const char *iban, const char *currency, int ty) { $(struct_type) *a; if ($(struct_prefix)_List_GetCount(al)==0) { DBG_INFO(AQBANKING_LOGDOMAIN, "No accounts"); return NULL; } a=$(struct_prefix)_List_First(al); assert(a); return $(struct_prefix)_List__FindInternal(a, backendName, country, bankId, accountNumber, subAccountId, iban, currency, ty); } with_list1 with_list1 /** \n * Find the next matching account info object in a list of account info objects. \n * @param a previous matching account info objects among to search \n * @param backendName name of the banking backend (wildcards and jokers allowed) \n * @param country ISO code of the country (wildcards and jokers allowed) \n * @param bankId bank code to search for (wildcards and jokers allowed) \n * @param accountNumber account number to search for (wildcards and jokers allowed) \n * @param subAccountId sub account number (wildcards and jokers allowed) \n * @param iban IBAN to search for (wildcards and jokers allowed) \n * @param currency currecny the account uses (wildcards and jokers allowed) \n * @param ty account type (use AB_AccountType_Unknown as wildcard) \n */ \n $(api) $(struct_type) *$(struct_prefix)_List_FindNext($(struct_type) *a, const char *backendName, const char *country, const char *bankId, const char *accountNumber, const char *subAccountId, const char *iban, const char *currency, int ty); with_list1 with_list1 $(struct_type) *$(struct_prefix)_List_FindNext($(struct_type) *a, const char *backendName, const char *country, const char *bankId, const char *accountNumber, const char *subAccountId, const char *iban, const char *currency, int ty) { assert(a); a=$(struct_prefix)_List_Next(a); if (a==NULL) { DBG_INFO(AQBANKING_LOGDOMAIN, "No more account specs"); return NULL; } return $(struct_prefix)_List__FindInternal(a, backendName, country, bankId, accountNumber, subAccountId, iban, currency, ty); } $(api) AB_TRANSACTION_LIMITS *$(struct_prefix)_GetTransactionLimitsForCommand(const $(struct_type) *st, int cmd); AB_TRANSACTION_LIMITS *$(struct_prefix)_GetTransactionLimitsForCommand(const $(struct_type) *st, int cmd) { assert(st); if (st->transactionLimitsList) return AB_TransactionLimits_List_GetByCommand(st->transactionLimitsList, cmd); return NULL; } $(api) void $(struct_prefix)_AddTransactionLimits($(struct_type) *st, AB_TRANSACTION_LIMITS *l); void $(struct_prefix)_AddTransactionLimits($(struct_type) *st, AB_TRANSACTION_LIMITS *l) { assert(st); assert(l); if (NULL==st->transactionLimitsList) st->transactionLimitsList=AB_TransactionLimits_List_new(); AB_TransactionLimits_List_Add(l, st->transactionLimitsList); } $(api) void $(struct_prefix)_AddReferenceAccount($(struct_type) *st, AB_REFERENCE_ACCOUNT *l); void $(struct_prefix)_AddReferenceAccount($(struct_type) *st, AB_REFERENCE_ACCOUNT *l) { assert(st); assert(l); if (NULL==st->refAccountList) st->refAccountList=AB_ReferenceAccount_List_new(); AB_ReferenceAccount_List_Add(l, st->refAccountList); }
AB_AccountType_Unknown AB_AccountType_Unknown public This is a unique id assigned by AqBanking. 0 0 public with_getbymember Name of the banking backend this account belongs to. public own with_hash const dup const Name of the account owner as it is stored with the bank. public own with_hash const dup const Name of the account. public own with_hash const dup const Currency used with this account. public own with_hash const dup const Optional additional info. public own const dup const Internation bank account number as specified by the SEPA specs. public own with_hash const dup const SWIFT code of the bank at which this account is registered. public own with_hash const dup const public own with_hash const dup const National bank code (e.g. BLZ in Germany, routing number in other countries). public own with_hash const dup const National bank name public own with_hash const dup const This is the branch id of the local bank (OFX only) public own with_hash const dup const Account number in national account specification. public own with_hash const dup const If your account has subaccounts which are distinguished by different suffixes, then this is that suffix. Otherwise it's empty. (HBCI only) public own with_hash const dup const This list contains one ABS_TRANSACTION_HINTS object per command allowed with this account. Not every backend supports transaction hints, so this list might be entirely empty or missing some entries. NULL AB_TransactionLimits_List_new() public own nodup none This list contains the reference accounts for internal transfers NULL AB_ReferenceAccount_List_new() public own nodup none
aqbanking-6.6.1/src/libs/aqbanking/types/security.xml0000664000175000017500000001040314043610744017613 00000000000000 AB_SECURITY AB_Security security with_db with_xml with_list1 with_list2 with_refcount with_hash
aqbanking/error.h
gwenhywfar/types.h
gwenhywfar/gwentime.h
aqbanking/types/value.h
with_list2 with_list2 $(api) int $(struct_prefix)_List2_freeAll($(struct_type)_LIST2 *tl); with_list2 with_list2 static $(struct_type) *$(struct_prefix)_List2__freeAll_cb($(struct_type) *t, void *user_data) { $(struct_prefix)_free(t); return NULL; } int $(struct_prefix)_List2_freeAll($(struct_type)_LIST2 *tl) { if (tl) { $(struct_prefix)_List2_ForEach(tl, $(struct_prefix)_List2__freeAll_cb, NULL); $(struct_prefix)_List2_free(tl); } else { DBG_ERROR(AQBANKING_LOGDOMAIN, "List missing"); return GWEN_ERROR_INVALID; } return 0; }
Full name of the security. public own with_hash const dup const Unique id of the security within the namespace. public own with_hash const dup const Namespace for uniqueId (e.g. CUSIP for North America) public own with_hash const dup const Ticker symbol of the security. public own with_hash const dup const Number of units held (e.g. number of stock units etc) public own with_hash const dup const NULL NULL Price of a unit as of unitPriceDate. public own with_hash const dup const NULL NULL Date for the unitPriceValue AQDB_DataType_String public own with_hash const dup const NULL NULL
aqbanking-6.6.1/src/libs/aqbanking/types/security_p.h0000664000175000017500000000131515037736054017572 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "security.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef AB_SECURITY_SECURITY_P_H #define AB_SECURITY_SECURITY_P_H #include "./security.h" #ifdef __cplusplus extern "C" { #endif struct AB_SECURITY { GWEN_LIST_ELEMENT(AB_SECURITY) int _refCount; char *name; char *uniqueId; char *nameSpace; char *tickerSymbol; AB_VALUE *units; AB_VALUE *unitPriceValue; GWEN_TIME *unitPriceDate; }; #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/aqbanking/types/ab_reference_account_list.tm20000664000175000017500000000040015037736054023020 00000000000000 AB_REFERENCE_ACCOUNT_LIST AB_ReferenceAccount_List aqbanking-6.6.1/src/libs/aqbanking/types/transaction.h0000664000175000017500000017362315037736054017745 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "transaction.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef AB_TRANSACTION_TRANSACTION_H #define AB_TRANSACTION_TRANSACTION_H #ifdef __cplusplus extern "C" { #endif /** @page P_AB_TRANSACTION Structure AB_TRANSACTION

This page describes the properties of AB_TRANSACTION.

AB_TRANSACTION

This type contains all important information about transactions. All text fields are in UTF-8. @anchor AB_TRANSACTION_memo

memo

User-defined memo.

Set this property with @ref AB_Transaction_SetMemo(), get it with @ref AB_Transaction_GetMemo().

@anchor AB_TRANSACTION_hash

hash

Set this property with @ref AB_Transaction_SetHash(), get it with @ref AB_Transaction_GetHash().

Type, Command, Status

@anchor AB_TRANSACTION_type

type

Set this property with @ref AB_Transaction_SetType(), get it with @ref AB_Transaction_GetType().

@anchor AB_TRANSACTION_subType

subType

Set this property with @ref AB_Transaction_SetSubType(), get it with @ref AB_Transaction_GetSubType().

@anchor AB_TRANSACTION_command

command

Set this property with @ref AB_Transaction_SetCommand(), get it with @ref AB_Transaction_GetCommand().

@anchor AB_TRANSACTION_status

status

Set this property with @ref AB_Transaction_SetStatus(), get it with @ref AB_Transaction_GetStatus().

@anchor AB_TRANSACTION_uniqueAccountId

uniqueAccountId

This is a unique id of the local account for banking commands.

Set this property with @ref AB_Transaction_SetUniqueAccountId(), get it with @ref AB_Transaction_GetUniqueAccountId().

@anchor AB_TRANSACTION_acknowledge

acknowledge

Set this property with @ref AB_Transaction_SetAcknowledge(), get it with @ref AB_Transaction_GetAcknowledge().

Identifiers

@anchor AB_TRANSACTION_uniqueId

uniqueId

This is a unique id assigned by the application. However, when adding a transaction to a job (like JobTransfer) this id is assigned by AqBanking to make sure that this id is unique across all applications.

Set this property with @ref AB_Transaction_SetUniqueId(), get it with @ref AB_Transaction_GetUniqueId().

@anchor AB_TRANSACTION_refUniqueId

refUniqueId

This id is used in splits to refer to the transaction id the split belongs to. It is also used internally by backends when on job is linked to another one.

Set this property with @ref AB_Transaction_SetRefUniqueId(), get it with @ref AB_Transaction_GetRefUniqueId().

@anchor AB_TRANSACTION_idForApplication

idForApplication

This is an id assigned by the application only. This id is never changed by AqBanking.

Set this property with @ref AB_Transaction_SetIdForApplication(), get it with @ref AB_Transaction_GetIdForApplication().

@anchor AB_TRANSACTION_stringIdForApplication

stringIdForApplication

This is an id assigned by the application only. This id is never changed by AqBanking.

Set this property with @ref AB_Transaction_SetStringIdForApplication(), get it with @ref AB_Transaction_GetStringIdForApplication().

@anchor AB_TRANSACTION_sessionId

sessionId

This id can be used by applications, e.g. to group jobs into sessions.

Set this property with @ref AB_Transaction_SetSessionId(), get it with @ref AB_Transaction_GetSessionId().

@anchor AB_TRANSACTION_groupId

groupId

This id is assigned by a backend when sending multiple transfer jobs in one backend request (e.g. AqHBCI uses DTAUS files when sending multi-transfer requests; in this case every transfer which goes into the same DTAUS file receives the same group id).

Set this property with @ref AB_Transaction_SetGroupId(), get it with @ref AB_Transaction_GetGroupId().

@anchor AB_TRANSACTION_fiId

fiId

This id is assigned by the bank. As for the moment only OFX servers actually do assign unique ids to statements.

However, HBCI servers at least assign unique ids to standing orders and dated transfers.

Set this property with @ref AB_Transaction_SetFiId(), get it with @ref AB_Transaction_GetFiId().

Local Account Specification

Properties of this group specify the local account to be used for this transaction.

Accounts are usually specified in one of two ways:

  • SEPA: IBAN and BIC
  • non-SEPA: Bank account and Account number
@anchor AB_TRANSACTION_localName

localName

Set this property with @ref AB_Transaction_SetLocalName(), get it with @ref AB_Transaction_GetLocalName().

SEPA

@anchor AB_TRANSACTION_localIban

localIban

Set this property with @ref AB_Transaction_SetLocalIban(), get it with @ref AB_Transaction_GetLocalIban().

@anchor AB_TRANSACTION_localBic

localBic

Set this property with @ref AB_Transaction_SetLocalBic(), get it with @ref AB_Transaction_GetLocalBic().

Non-SEPA

@anchor AB_TRANSACTION_localCountry

localCountry

Set this property with @ref AB_Transaction_SetLocalCountry(), get it with @ref AB_Transaction_GetLocalCountry().

@anchor AB_TRANSACTION_localBankCode

localBankCode

Set this property with @ref AB_Transaction_SetLocalBankCode(), get it with @ref AB_Transaction_GetLocalBankCode().

@anchor AB_TRANSACTION_localBranchId

localBranchId

This is the branch id of the local bank (OFX only)

Set this property with @ref AB_Transaction_SetLocalBranchId(), get it with @ref AB_Transaction_GetLocalBranchId().

@anchor AB_TRANSACTION_localAccountNumber

localAccountNumber

Set this property with @ref AB_Transaction_SetLocalAccountNumber(), get it with @ref AB_Transaction_GetLocalAccountNumber().

@anchor AB_TRANSACTION_localSuffix

localSuffix

If your account has subaccounts which are distinguished by different suffixes, then this is that suffix. Otherwise it's empty. (HBCI only)

Set this property with @ref AB_Transaction_SetLocalSuffix(), get it with @ref AB_Transaction_GetLocalSuffix().

Remote Account Specification

Properties of this group specify the remote account to be used for this transaction.

@anchor AB_TRANSACTION_remoteCountry

remoteCountry

Set this property with @ref AB_Transaction_SetRemoteCountry(), get it with @ref AB_Transaction_GetRemoteCountry().

@anchor AB_TRANSACTION_remoteBankCode

remoteBankCode

Set this property with @ref AB_Transaction_SetRemoteBankCode(), get it with @ref AB_Transaction_GetRemoteBankCode().

@anchor AB_TRANSACTION_remoteBranchId

remoteBranchId

This is the branch id of the remote bank (OFX only)

Set this property with @ref AB_Transaction_SetRemoteBranchId(), get it with @ref AB_Transaction_GetRemoteBranchId().

@anchor AB_TRANSACTION_remoteAccountNumber

remoteAccountNumber

Set this property with @ref AB_Transaction_SetRemoteAccountNumber(), get it with @ref AB_Transaction_GetRemoteAccountNumber().

@anchor AB_TRANSACTION_remoteSuffix

remoteSuffix

Same as localSuffix, except for remote account (HBCI only).

Set this property with @ref AB_Transaction_SetRemoteSuffix(), get it with @ref AB_Transaction_GetRemoteSuffix().

@anchor AB_TRANSACTION_remoteIban

remoteIban

Set this property with @ref AB_Transaction_SetRemoteIban(), get it with @ref AB_Transaction_GetRemoteIban().

@anchor AB_TRANSACTION_remoteBic

remoteBic

Set this property with @ref AB_Transaction_SetRemoteBic(), get it with @ref AB_Transaction_GetRemoteBic().

@anchor AB_TRANSACTION_remoteName

remoteName

Set this property with @ref AB_Transaction_SetRemoteName(), get it with @ref AB_Transaction_GetRemoteName().

Dates

@anchor AB_TRANSACTION_date

date

Set this property with @ref AB_Transaction_SetDate(), get it with @ref AB_Transaction_GetDate().

@anchor AB_TRANSACTION_valutaDate

valutaDate

Set this property with @ref AB_Transaction_SetValutaDate(), get it with @ref AB_Transaction_GetValutaDate().

Amount

@anchor AB_TRANSACTION_value

value

Set this property with @ref AB_Transaction_SetValue(), get it with @ref AB_Transaction_GetValue().

@anchor AB_TRANSACTION_fees

fees

Set this property with @ref AB_Transaction_SetFees(), get it with @ref AB_Transaction_GetFees().

@anchor AB_TRANSACTION_taxes

taxes

Set this property with @ref AB_Transaction_SetTaxes(), get it with @ref AB_Transaction_GetTaxes().

Info Texts and Codes

@anchor AB_TRANSACTION_transactionCode

transactionCode

A 3 digit numerical transaction code, defined for all kinds of different actions. (Geschaeftsvorfallcode)

Set this property with @ref AB_Transaction_SetTransactionCode(), get it with @ref AB_Transaction_GetTransactionCode().

@anchor AB_TRANSACTION_transactionText

transactionText

Transaction text (e.g. STANDING ORDER) (Buchungstext)

Set this property with @ref AB_Transaction_SetTransactionText(), get it with @ref AB_Transaction_GetTransactionText().

@anchor AB_TRANSACTION_transactionKey

transactionKey

this is the transaction id that tells you more about the type of transaction (3 character code) (Buchungsschluessel) (HBCI only)

Set this property with @ref AB_Transaction_SetTransactionKey(), get it with @ref AB_Transaction_GetTransactionKey().

@anchor AB_TRANSACTION_textKey

textKey

A numerical transaction code, defined for all kinds of different actions. (Textschluessel)

For a normal transfer you should set it to 51. For debit notes the values 04 or 05 may be used. For other values please refer to your credit institute. (HBCI only)

Set this property with @ref AB_Transaction_SetTextKey(), get it with @ref AB_Transaction_GetTextKey().

@anchor AB_TRANSACTION_primanota

primanota

Used for SEPA transfers.

Set this property with @ref AB_Transaction_SetPrimanota(), get it with @ref AB_Transaction_GetPrimanota().

@anchor AB_TRANSACTION_purpose

purpose

A list of purpose lines, separated by newline characters.

Set this property with @ref AB_Transaction_SetPurpose(), get it with @ref AB_Transaction_GetPurpose().

@anchor AB_TRANSACTION_category

category

A list of categories assigned to this transaction, separated by newline characters.

Set this property with @ref AB_Transaction_SetCategory(), get it with @ref AB_Transaction_GetCategory().

References

@anchor AB_TRANSACTION_customerReference

customerReference

Reference string, if the customer (you) has specified one. (E.g. the cheque number.) Otherwise "NONREF" or empty (Kundenreferenz)

Set this property with @ref AB_Transaction_SetCustomerReference(), get it with @ref AB_Transaction_GetCustomerReference().

@anchor AB_TRANSACTION_bankReference

bankReference

Reference string for this transaction given by the bank, if it has given one. Otherwise empty. (Bankreferenz)

Set this property with @ref AB_Transaction_SetBankReference(), get it with @ref AB_Transaction_GetBankReference().

Additional Data for SEPA Transactions

These properties are only used in SEPA statements or transactions.

@anchor AB_TRANSACTION_endToEndReference

endToEndReference

This is a reference provided by the issuer of a SEPA transfer.

Set this property with @ref AB_Transaction_SetEndToEndReference(), get it with @ref AB_Transaction_GetEndToEndReference().

@anchor AB_TRANSACTION_ultimateCreditor

ultimateCreditor

"Abweichender Empfaenger" (ABWE+).

Set this property with @ref AB_Transaction_SetUltimateCreditor(), get it with @ref AB_Transaction_GetUltimateCreditor().

@anchor AB_TRANSACTION_ultimateDebtor

ultimateDebtor

"Abweichender Auftraggeber" (ABWA+).

Set this property with @ref AB_Transaction_SetUltimateDebtor(), get it with @ref AB_Transaction_GetUltimateDebtor().

@anchor AB_TRANSACTION_charge

charge

Set this property with @ref AB_Transaction_SetCharge(), get it with @ref AB_Transaction_GetCharge().

Additional Data for SEPA Debit Notes

These properties are only used in SEPA statements or transactions.

@anchor AB_TRANSACTION_creditorSchemeId

creditorSchemeId

Creditor Scheme Identification" ("Glaeubiger-ID", assigned by Deutsche Bundesbank).

Set this property with @ref AB_Transaction_SetCreditorSchemeId(), get it with @ref AB_Transaction_GetCreditorSchemeId().

@anchor AB_TRANSACTION_originatorId

originatorId

Set this property with @ref AB_Transaction_SetOriginatorId(), get it with @ref AB_Transaction_GetOriginatorId().

@anchor AB_TRANSACTION_mandateId

mandateId

SEPA Direct debit mandate id.

Set this property with @ref AB_Transaction_SetMandateId(), get it with @ref AB_Transaction_GetMandateId().

@anchor AB_TRANSACTION_mandateDate

mandateDate

Issue date of the direct debit mandate.

Set this property with @ref AB_Transaction_SetMandateDate(), get it with @ref AB_Transaction_GetMandateDate().

@anchor AB_TRANSACTION_mandateDebitorName

mandateDebitorName

Debitor name for direct debit mandate if given by the debitor.

Set this property with @ref AB_Transaction_SetMandateDebitorName(), get it with @ref AB_Transaction_GetMandateDebitorName().

@anchor AB_TRANSACTION_originalCreditorSchemeId

originalCreditorSchemeId

Original value for "Creditor Scheme Identification", in case that value changed over time.

Set this property with @ref AB_Transaction_SetOriginalCreditorSchemeId(), get it with @ref AB_Transaction_GetOriginalCreditorSchemeId().

@anchor AB_TRANSACTION_originalMandateId

originalMandateId

Original SEPA Direct debit mandate id, in case that changed over time.

Set this property with @ref AB_Transaction_SetOriginalMandateId(), get it with @ref AB_Transaction_GetOriginalMandateId().

@anchor AB_TRANSACTION_originalCreditorName

originalCreditorName

Original SEPA Direct debit creditor name, in case that changed over time.

Set this property with @ref AB_Transaction_SetOriginalCreditorName(), get it with @ref AB_Transaction_GetOriginalCreditorName().

@anchor AB_TRANSACTION_sequence

sequence

Set this property with @ref AB_Transaction_SetSequence(), get it with @ref AB_Transaction_GetSequence().

Additional Information for Foreign Transfers

This group contains information which is used with transfers to other countries in the world. It is used by backends and applications but not by AqBanking itself.

@anchor AB_TRANSACTION_remoteAddrStreet

remoteAddrStreet

Street and number.

Set this property with @ref AB_Transaction_SetRemoteAddrStreet(), get it with @ref AB_Transaction_GetRemoteAddrStreet().

@anchor AB_TRANSACTION_remoteAddrZipcode

remoteAddrZipcode

Zipcode.

Set this property with @ref AB_Transaction_SetRemoteAddrZipcode(), get it with @ref AB_Transaction_GetRemoteAddrZipcode().

@anchor AB_TRANSACTION_remoteAddrCity

remoteAddrCity

City.

Set this property with @ref AB_Transaction_SetRemoteAddrCity(), get it with @ref AB_Transaction_GetRemoteAddrCity().

@anchor AB_TRANSACTION_remoteAddrPhone

remoteAddrPhone

Phone number.

Set this property with @ref AB_Transaction_SetRemoteAddrPhone(), get it with @ref AB_Transaction_GetRemoteAddrPhone().

Additional Data for Standing Orders

These properties are used with standing orders, i.e. orders which are regularily repeated by the bank.

@anchor AB_TRANSACTION_period

period

Set this property with @ref AB_Transaction_SetPeriod(), get it with @ref AB_Transaction_GetPeriod().

@anchor AB_TRANSACTION_cycle

cycle

The standing order is executed every cycle x period . So if period is weekly and cycle is 2 then the standing order is executed every 2 weeks.

Set this property with @ref AB_Transaction_SetCycle(), get it with @ref AB_Transaction_GetCycle().

@anchor AB_TRANSACTION_executionDay

executionDay

The execution day. The meaning of this variable depends on the content of period :
  • monthly: day of the month (starting with1 )
  • weekly: day of the week (starting with1 =Monday)

Set this property with @ref AB_Transaction_SetExecutionDay(), get it with @ref AB_Transaction_GetExecutionDay().

@anchor AB_TRANSACTION_firstDate

firstDate

For standing orders this is the first date the transaction is to be executed. For jobs which use date span parameters this is the first date (e.g. "get statements from FIRSTDATE to LASTDATE)"

Set this property with @ref AB_Transaction_SetFirstDate(), get it with @ref AB_Transaction_GetFirstDate().

@anchor AB_TRANSACTION_lastDate

lastDate

For standing orders this is the last date the transaction is to be executed. For jobs which use date span parameters this is the last date (e.g. "get statements from FIRSTDATE to LASTDATE)"

Set this property with @ref AB_Transaction_SetLastDate(), get it with @ref AB_Transaction_GetLastDate().

@anchor AB_TRANSACTION_nextDate

nextDate

For standing orders this is the next date the transaction is executed.

Set this property with @ref AB_Transaction_SetNextDate(), get it with @ref AB_Transaction_GetNextDate().

Additional Data for Securites

These properties are used with securities.

@anchor AB_TRANSACTION_unitId

unitId

Unique id of the security within the namespace. This field is also used with accounts.

Set this property with @ref AB_Transaction_SetUnitId(), get it with @ref AB_Transaction_GetUnitId().

@anchor AB_TRANSACTION_unitIdNameSpace

unitIdNameSpace

Namespace for name (e.g. CUSIP for North America)

Set this property with @ref AB_Transaction_SetUnitIdNameSpace(), get it with @ref AB_Transaction_GetUnitIdNameSpace().

@anchor AB_TRANSACTION_tickerSymbol

tickerSymbol

Unique id of the security within the namespace.

Set this property with @ref AB_Transaction_SetTickerSymbol(), get it with @ref AB_Transaction_GetTickerSymbol().

@anchor AB_TRANSACTION_units

units

Set this property with @ref AB_Transaction_SetUnits(), get it with @ref AB_Transaction_GetUnits().

@anchor AB_TRANSACTION_unitPriceValue

unitPriceValue

Set this property with @ref AB_Transaction_SetUnitPriceValue(), get it with @ref AB_Transaction_GetUnitPriceValue().

@anchor AB_TRANSACTION_unitPriceDate

unitPriceDate

Date of the unit price.

Set this property with @ref AB_Transaction_SetUnitPriceDate(), get it with @ref AB_Transaction_GetUnitPriceDate().

@anchor AB_TRANSACTION_commissionValue

commissionValue

Set this property with @ref AB_Transaction_SetCommissionValue(), get it with @ref AB_Transaction_GetCommissionValue().

Additional Data for Estatements

These properties are only used in estatement requests.

@anchor AB_TRANSACTION_estatementNumber

estatementNumber

To select a specific estatment document. Estatements are numbered increasingly, starting over at number 1 each year. Year can be given by additionally setting startDate. If no year is given, the current year is taken as base. 0 means no specific selection, return all.

Set this property with @ref AB_Transaction_SetEstatementNumber(), get it with @ref AB_Transaction_GetEstatementNumber().

@anchor AB_TRANSACTION_estatementMaxEntries

estatementMaxEntries

How many estatements to retrieve at most with this transaction.

Set this property with @ref AB_Transaction_SetEstatementMaxEntries(), get it with @ref AB_Transaction_GetEstatementMaxEntries().

*/ /* needed system headers */ #include #include #include #include #include /* pre-headers */ #include #include #include #include #include #include #include #include typedef struct AB_TRANSACTION AB_TRANSACTION; GWEN_LIST_FUNCTION_LIB_DEFS(AB_TRANSACTION, AB_Transaction, AQBANKING_API) GWEN_LIST2_FUNCTION_LIB_DEFS(AB_TRANSACTION, AB_Transaction, AQBANKING_API) GWEN_CONSTLIST2_FUNCTION_LIB_DEFS(AB_TRANSACTION, AB_Transaction, AQBANKING_API) typedef enum { AB_Transaction_TypeUnknown = -1, AB_Transaction_TypeNone = 0, AB_Transaction_TypeStatement = 128, AB_Transaction_TypeNotedStatement, AB_Transaction_TypeTransfer = 256, AB_Transaction_TypeDebitNote, AB_Transaction_TypeStandingOrder, AB_Transaction_TypeInternalTransfer, AB_Transaction_TypeBrokerage, AB_Transaction_TypeTransaction = 2048, AB_Transaction_TypeSplit } AB_TRANSACTION_TYPE; typedef enum { AB_Transaction_SubTypeUnknown = -1, AB_Transaction_SubTypeNone = 0, AB_Transaction_SubTypeStandard, AB_Transaction_SubTypeCheck, AB_Transaction_SubTypeBookedDebitNote, AB_Transaction_SubTypeDrawnDebitNote, AB_Transaction_SubTypeStandingOrder, AB_Transaction_SubTypeLoan, AB_Transaction_SubTypeEuStandard, AB_Transaction_SubTypeEuASAP, AB_Transaction_SubTypeBuy, AB_Transaction_SubTypeSell, AB_Transaction_SubTypeReinvest, AB_Transaction_SubTypeDividend } AB_TRANSACTION_SUBTYPE; typedef enum { AB_Transaction_CommandUnknown = -1, AB_Transaction_CommandNone = 0, AB_Transaction_CommandGetBalance, AB_Transaction_CommandGetTransactions, AB_Transaction_CommandGetStandingOrders, AB_Transaction_CommandGetDatedTransfers, AB_Transaction_CommandSepaGetStandingOrders, AB_Transaction_CommandLoadCellPhone, AB_Transaction_CommandGetEStatements, AB_Transaction_CommandTransfer = 512, AB_Transaction_CommandDebitNote, AB_Transaction_CommandCreateStandingOrder, AB_Transaction_CommandModifyStandingOrder, AB_Transaction_CommandDeleteStandingOrder, AB_Transaction_CommandCreateDatedTransfer, AB_Transaction_CommandModifyDatedTransfer, AB_Transaction_CommandDeleteDatedTransfer, AB_Transaction_CommandInternalTransfer, AB_Transaction_CommandGetDepot, AB_Transaction_CommandSepaTransfer = 1536, AB_Transaction_CommandSepaDebitNote, AB_Transaction_CommandSepaFlashDebitNote, AB_Transaction_CommandSepaCreateStandingOrder, AB_Transaction_CommandSepaModifyStandingOrder, AB_Transaction_CommandSepaDeleteStandingOrder, AB_Transaction_CommandSepaCreateDatedTransfer, AB_Transaction_CommandSepaModifyDatedTransfer, AB_Transaction_CommandSepaDeleteDatedTransfer, AB_Transaction_CommandSepaInternalTransfer } AB_TRANSACTION_COMMAND; typedef enum { AB_Transaction_StatusUnknown = -1, AB_Transaction_StatusNone = 0, AB_Transaction_StatusEnqueued, AB_Transaction_StatusSending, AB_Transaction_StatusSent, AB_Transaction_StatusAccepted, AB_Transaction_StatusRejected, AB_Transaction_StatusPending, AB_Transaction_StatusAutoReconciled, AB_Transaction_StatusManuallyReconciled, AB_Transaction_StatusRevoked, AB_Transaction_StatusAborted, AB_Transaction_StatusError } AB_TRANSACTION_STATUS; typedef enum { AB_Transaction_PeriodUnknown = -1, AB_Transaction_PeriodNone = 0, AB_Transaction_PeriodMonthly, AB_Transaction_PeriodWeekly } AB_TRANSACTION_PERIOD; typedef enum { AB_Transaction_ChargeUnknown = -1, AB_Transaction_ChargeNobody = 0, AB_Transaction_ChargeLocal, AB_Transaction_ChargeRemote, AB_Transaction_ChargeShare } AB_TRANSACTION_CHARGE; typedef enum { AB_Transaction_SequenceUnknown = -1, AB_Transaction_SequenceOnce = 0, AB_Transaction_SequenceFirst, AB_Transaction_SequenceFollowing, AB_Transaction_SequenceFinal } AB_TRANSACTION_SEQUENCE; typedef enum { AB_Transaction_AckUnknown = -1, AB_Transaction_AckNever = 0, AB_Transaction_AckJobsWithAckCode } AB_TRANSACTION_ACK; /* post-headers */ AQBANKING_API AB_TRANSACTION_TYPE AB_Transaction_Type_fromString(const char *p_s); AQBANKING_API AB_TRANSACTION_SUBTYPE AB_Transaction_SubType_fromString(const char *p_s); AQBANKING_API AB_TRANSACTION_COMMAND AB_Transaction_Command_fromString(const char *p_s); AQBANKING_API AB_TRANSACTION_STATUS AB_Transaction_Status_fromString(const char *p_s); AQBANKING_API AB_TRANSACTION_PERIOD AB_Transaction_Period_fromString(const char *p_s); AQBANKING_API AB_TRANSACTION_CHARGE AB_Transaction_Charge_fromString(const char *p_s); AQBANKING_API AB_TRANSACTION_SEQUENCE AB_Transaction_Sequence_fromString(const char *p_s); AQBANKING_API AB_TRANSACTION_ACK AB_Transaction_Ack_fromString(const char *p_s); AQBANKING_API const char *AB_Transaction_Type_toString(AB_TRANSACTION_TYPE p_i); AQBANKING_API const char *AB_Transaction_SubType_toString(AB_TRANSACTION_SUBTYPE p_i); AQBANKING_API const char *AB_Transaction_Command_toString(AB_TRANSACTION_COMMAND p_i); AQBANKING_API const char *AB_Transaction_Status_toString(AB_TRANSACTION_STATUS p_i); AQBANKING_API const char *AB_Transaction_Period_toString(AB_TRANSACTION_PERIOD p_i); AQBANKING_API const char *AB_Transaction_Charge_toString(AB_TRANSACTION_CHARGE p_i); AQBANKING_API const char *AB_Transaction_Sequence_toString(AB_TRANSACTION_SEQUENCE p_i); AQBANKING_API const char *AB_Transaction_Ack_toString(AB_TRANSACTION_ACK p_i); /** Constructor. */ AQBANKING_API AB_TRANSACTION *AB_Transaction_new(void); /** Destructor. */ AQBANKING_API void AB_Transaction_free(AB_TRANSACTION *p_struct); AQBANKING_API void AB_Transaction_Attach(AB_TRANSACTION *p_struct); AQBANKING_API AB_TRANSACTION *AB_Transaction_dup(const AB_TRANSACTION *p_src); AQBANKING_API AB_TRANSACTION *AB_Transaction_copy(AB_TRANSACTION *p_struct, const AB_TRANSACTION *p_src); /** Getter. * Use this function to get the member "type" (see @ref AB_TRANSACTION_type) */ AQBANKING_API AB_TRANSACTION_TYPE AB_Transaction_GetType(const AB_TRANSACTION *p_struct); /** Getter. * Use this function to get the member "subType" (see @ref AB_TRANSACTION_subType) */ AQBANKING_API AB_TRANSACTION_SUBTYPE AB_Transaction_GetSubType(const AB_TRANSACTION *p_struct); /** Getter. * Use this function to get the member "command" (see @ref AB_TRANSACTION_command) */ AQBANKING_API AB_TRANSACTION_COMMAND AB_Transaction_GetCommand(const AB_TRANSACTION *p_struct); /** Getter. * Use this function to get the member "status" (see @ref AB_TRANSACTION_status) */ AQBANKING_API AB_TRANSACTION_STATUS AB_Transaction_GetStatus(const AB_TRANSACTION *p_struct); /** Getter. * Use this function to get the member "uniqueAccountId" (see @ref AB_TRANSACTION_uniqueAccountId) */ AQBANKING_API uint32_t AB_Transaction_GetUniqueAccountId(const AB_TRANSACTION *p_struct); /** Getter. * Use this function to get the member "acknowledge" (see @ref AB_TRANSACTION_acknowledge) */ AQBANKING_API AB_TRANSACTION_ACK AB_Transaction_GetAcknowledge(const AB_TRANSACTION *p_struct); /** Getter. * Use this function to get the member "uniqueId" (see @ref AB_TRANSACTION_uniqueId) */ AQBANKING_API uint32_t AB_Transaction_GetUniqueId(const AB_TRANSACTION *p_struct); /** Getter. * Use this function to get the member "refUniqueId" (see @ref AB_TRANSACTION_refUniqueId) */ AQBANKING_API uint32_t AB_Transaction_GetRefUniqueId(const AB_TRANSACTION *p_struct); /** Getter. * Use this function to get the member "idForApplication" (see @ref AB_TRANSACTION_idForApplication) */ AQBANKING_API uint32_t AB_Transaction_GetIdForApplication(const AB_TRANSACTION *p_struct); /** Getter. * Use this function to get the member "stringIdForApplication" (see @ref AB_TRANSACTION_stringIdForApplication) */ AQBANKING_API const char *AB_Transaction_GetStringIdForApplication(const AB_TRANSACTION *p_struct); /** Getter. * Use this function to get the member "sessionId" (see @ref AB_TRANSACTION_sessionId) */ AQBANKING_API uint32_t AB_Transaction_GetSessionId(const AB_TRANSACTION *p_struct); /** Getter. * Use this function to get the member "groupId" (see @ref AB_TRANSACTION_groupId) */ AQBANKING_API uint32_t AB_Transaction_GetGroupId(const AB_TRANSACTION *p_struct); /** Getter. * Use this function to get the member "fiId" (see @ref AB_TRANSACTION_fiId) */ AQBANKING_API const char *AB_Transaction_GetFiId(const AB_TRANSACTION *p_struct); /** Getter. * Use this function to get the member "localIban" (see @ref AB_TRANSACTION_localIban) */ AQBANKING_API const char *AB_Transaction_GetLocalIban(const AB_TRANSACTION *p_struct); /** Getter. * Use this function to get the member "localBic" (see @ref AB_TRANSACTION_localBic) */ AQBANKING_API const char *AB_Transaction_GetLocalBic(const AB_TRANSACTION *p_struct); /** Getter. * Use this function to get the member "localCountry" (see @ref AB_TRANSACTION_localCountry) */ AQBANKING_API const char *AB_Transaction_GetLocalCountry(const AB_TRANSACTION *p_struct); /** Getter. * Use this function to get the member "localBankCode" (see @ref AB_TRANSACTION_localBankCode) */ AQBANKING_API const char *AB_Transaction_GetLocalBankCode(const AB_TRANSACTION *p_struct); /** Getter. * Use this function to get the member "localBranchId" (see @ref AB_TRANSACTION_localBranchId) */ AQBANKING_API const char *AB_Transaction_GetLocalBranchId(const AB_TRANSACTION *p_struct); /** Getter. * Use this function to get the member "localAccountNumber" (see @ref AB_TRANSACTION_localAccountNumber) */ AQBANKING_API const char *AB_Transaction_GetLocalAccountNumber(const AB_TRANSACTION *p_struct); /** Getter. * Use this function to get the member "localSuffix" (see @ref AB_TRANSACTION_localSuffix) */ AQBANKING_API const char *AB_Transaction_GetLocalSuffix(const AB_TRANSACTION *p_struct); /** Getter. * Use this function to get the member "localName" (see @ref AB_TRANSACTION_localName) */ AQBANKING_API const char *AB_Transaction_GetLocalName(const AB_TRANSACTION *p_struct); /** Getter. * Use this function to get the member "remoteCountry" (see @ref AB_TRANSACTION_remoteCountry) */ AQBANKING_API const char *AB_Transaction_GetRemoteCountry(const AB_TRANSACTION *p_struct); /** Getter. * Use this function to get the member "remoteBankCode" (see @ref AB_TRANSACTION_remoteBankCode) */ AQBANKING_API const char *AB_Transaction_GetRemoteBankCode(const AB_TRANSACTION *p_struct); /** Getter. * Use this function to get the member "remoteBranchId" (see @ref AB_TRANSACTION_remoteBranchId) */ AQBANKING_API const char *AB_Transaction_GetRemoteBranchId(const AB_TRANSACTION *p_struct); /** Getter. * Use this function to get the member "remoteAccountNumber" (see @ref AB_TRANSACTION_remoteAccountNumber) */ AQBANKING_API const char *AB_Transaction_GetRemoteAccountNumber(const AB_TRANSACTION *p_struct); /** Getter. * Use this function to get the member "remoteSuffix" (see @ref AB_TRANSACTION_remoteSuffix) */ AQBANKING_API const char *AB_Transaction_GetRemoteSuffix(const AB_TRANSACTION *p_struct); /** Getter. * Use this function to get the member "remoteIban" (see @ref AB_TRANSACTION_remoteIban) */ AQBANKING_API const char *AB_Transaction_GetRemoteIban(const AB_TRANSACTION *p_struct); /** Getter. * Use this function to get the member "remoteBic" (see @ref AB_TRANSACTION_remoteBic) */ AQBANKING_API const char *AB_Transaction_GetRemoteBic(const AB_TRANSACTION *p_struct); /** Getter. * Use this function to get the member "remoteName" (see @ref AB_TRANSACTION_remoteName) */ AQBANKING_API const char *AB_Transaction_GetRemoteName(const AB_TRANSACTION *p_struct); /** Getter. * Use this function to get the member "date" (see @ref AB_TRANSACTION_date) */ AQBANKING_API const GWEN_DATE *AB_Transaction_GetDate(const AB_TRANSACTION *p_struct); /** Getter. * Use this function to get the member "valutaDate" (see @ref AB_TRANSACTION_valutaDate) */ AQBANKING_API const GWEN_DATE *AB_Transaction_GetValutaDate(const AB_TRANSACTION *p_struct); /** Getter. * Use this function to get the member "value" (see @ref AB_TRANSACTION_value) */ AQBANKING_API const AB_VALUE *AB_Transaction_GetValue(const AB_TRANSACTION *p_struct); /** Getter. * Use this function to get the member "fees" (see @ref AB_TRANSACTION_fees) */ AQBANKING_API const AB_VALUE *AB_Transaction_GetFees(const AB_TRANSACTION *p_struct); /** Getter. * Use this function to get the member "taxes" (see @ref AB_TRANSACTION_taxes) */ AQBANKING_API const AB_VALUE *AB_Transaction_GetTaxes(const AB_TRANSACTION *p_struct); /** Getter. * Use this function to get the member "transactionCode" (see @ref AB_TRANSACTION_transactionCode) */ AQBANKING_API int AB_Transaction_GetTransactionCode(const AB_TRANSACTION *p_struct); /** Getter. * Use this function to get the member "transactionText" (see @ref AB_TRANSACTION_transactionText) */ AQBANKING_API const char *AB_Transaction_GetTransactionText(const AB_TRANSACTION *p_struct); /** Getter. * Use this function to get the member "transactionKey" (see @ref AB_TRANSACTION_transactionKey) */ AQBANKING_API const char *AB_Transaction_GetTransactionKey(const AB_TRANSACTION *p_struct); /** Getter. * Use this function to get the member "textKey" (see @ref AB_TRANSACTION_textKey) */ AQBANKING_API int AB_Transaction_GetTextKey(const AB_TRANSACTION *p_struct); /** Getter. * Use this function to get the member "primanota" (see @ref AB_TRANSACTION_primanota) */ AQBANKING_API const char *AB_Transaction_GetPrimanota(const AB_TRANSACTION *p_struct); /** Getter. * Use this function to get the member "purpose" (see @ref AB_TRANSACTION_purpose) */ AQBANKING_API const char *AB_Transaction_GetPurpose(const AB_TRANSACTION *p_struct); /** Getter. * Use this function to get the member "category" (see @ref AB_TRANSACTION_category) */ AQBANKING_API const char *AB_Transaction_GetCategory(const AB_TRANSACTION *p_struct); /** Getter. * Use this function to get the member "customerReference" (see @ref AB_TRANSACTION_customerReference) */ AQBANKING_API const char *AB_Transaction_GetCustomerReference(const AB_TRANSACTION *p_struct); /** Getter. * Use this function to get the member "bankReference" (see @ref AB_TRANSACTION_bankReference) */ AQBANKING_API const char *AB_Transaction_GetBankReference(const AB_TRANSACTION *p_struct); /** Getter. * Use this function to get the member "endToEndReference" (see @ref AB_TRANSACTION_endToEndReference) */ AQBANKING_API const char *AB_Transaction_GetEndToEndReference(const AB_TRANSACTION *p_struct); /** Getter. * Use this function to get the member "ultimateCreditor" (see @ref AB_TRANSACTION_ultimateCreditor) */ AQBANKING_API const char *AB_Transaction_GetUltimateCreditor(const AB_TRANSACTION *p_struct); /** Getter. * Use this function to get the member "ultimateDebtor" (see @ref AB_TRANSACTION_ultimateDebtor) */ AQBANKING_API const char *AB_Transaction_GetUltimateDebtor(const AB_TRANSACTION *p_struct); /** Getter. * Use this function to get the member "creditorSchemeId" (see @ref AB_TRANSACTION_creditorSchemeId) */ AQBANKING_API const char *AB_Transaction_GetCreditorSchemeId(const AB_TRANSACTION *p_struct); /** Getter. * Use this function to get the member "originatorId" (see @ref AB_TRANSACTION_originatorId) */ AQBANKING_API const char *AB_Transaction_GetOriginatorId(const AB_TRANSACTION *p_struct); /** Getter. * Use this function to get the member "mandateId" (see @ref AB_TRANSACTION_mandateId) */ AQBANKING_API const char *AB_Transaction_GetMandateId(const AB_TRANSACTION *p_struct); /** Getter. * Use this function to get the member "mandateDate" (see @ref AB_TRANSACTION_mandateDate) */ AQBANKING_API const GWEN_DATE *AB_Transaction_GetMandateDate(const AB_TRANSACTION *p_struct); /** Getter. * Use this function to get the member "mandateDebitorName" (see @ref AB_TRANSACTION_mandateDebitorName) */ AQBANKING_API const char *AB_Transaction_GetMandateDebitorName(const AB_TRANSACTION *p_struct); /** Getter. * Use this function to get the member "originalCreditorSchemeId" (see @ref AB_TRANSACTION_originalCreditorSchemeId) */ AQBANKING_API const char *AB_Transaction_GetOriginalCreditorSchemeId(const AB_TRANSACTION *p_struct); /** Getter. * Use this function to get the member "originalMandateId" (see @ref AB_TRANSACTION_originalMandateId) */ AQBANKING_API const char *AB_Transaction_GetOriginalMandateId(const AB_TRANSACTION *p_struct); /** Getter. * Use this function to get the member "originalCreditorName" (see @ref AB_TRANSACTION_originalCreditorName) */ AQBANKING_API const char *AB_Transaction_GetOriginalCreditorName(const AB_TRANSACTION *p_struct); /** Getter. * Use this function to get the member "sequence" (see @ref AB_TRANSACTION_sequence) */ AQBANKING_API AB_TRANSACTION_SEQUENCE AB_Transaction_GetSequence(const AB_TRANSACTION *p_struct); /** Getter. * Use this function to get the member "charge" (see @ref AB_TRANSACTION_charge) */ AQBANKING_API AB_TRANSACTION_CHARGE AB_Transaction_GetCharge(const AB_TRANSACTION *p_struct); /** Getter. * Use this function to get the member "remoteAddrStreet" (see @ref AB_TRANSACTION_remoteAddrStreet) */ AQBANKING_API const char *AB_Transaction_GetRemoteAddrStreet(const AB_TRANSACTION *p_struct); /** Getter. * Use this function to get the member "remoteAddrZipcode" (see @ref AB_TRANSACTION_remoteAddrZipcode) */ AQBANKING_API const char *AB_Transaction_GetRemoteAddrZipcode(const AB_TRANSACTION *p_struct); /** Getter. * Use this function to get the member "remoteAddrCity" (see @ref AB_TRANSACTION_remoteAddrCity) */ AQBANKING_API const char *AB_Transaction_GetRemoteAddrCity(const AB_TRANSACTION *p_struct); /** Getter. * Use this function to get the member "remoteAddrPhone" (see @ref AB_TRANSACTION_remoteAddrPhone) */ AQBANKING_API const char *AB_Transaction_GetRemoteAddrPhone(const AB_TRANSACTION *p_struct); /** Getter. * Use this function to get the member "period" (see @ref AB_TRANSACTION_period) */ AQBANKING_API AB_TRANSACTION_PERIOD AB_Transaction_GetPeriod(const AB_TRANSACTION *p_struct); /** Getter. * Use this function to get the member "cycle" (see @ref AB_TRANSACTION_cycle) */ AQBANKING_API uint32_t AB_Transaction_GetCycle(const AB_TRANSACTION *p_struct); /** Getter. * Use this function to get the member "executionDay" (see @ref AB_TRANSACTION_executionDay) */ AQBANKING_API uint32_t AB_Transaction_GetExecutionDay(const AB_TRANSACTION *p_struct); /** Getter. * Use this function to get the member "firstDate" (see @ref AB_TRANSACTION_firstDate) */ AQBANKING_API const GWEN_DATE *AB_Transaction_GetFirstDate(const AB_TRANSACTION *p_struct); /** Getter. * Use this function to get the member "lastDate" (see @ref AB_TRANSACTION_lastDate) */ AQBANKING_API const GWEN_DATE *AB_Transaction_GetLastDate(const AB_TRANSACTION *p_struct); /** Getter. * Use this function to get the member "nextDate" (see @ref AB_TRANSACTION_nextDate) */ AQBANKING_API const GWEN_DATE *AB_Transaction_GetNextDate(const AB_TRANSACTION *p_struct); /** Getter. * Use this function to get the member "unitId" (see @ref AB_TRANSACTION_unitId) */ AQBANKING_API const char *AB_Transaction_GetUnitId(const AB_TRANSACTION *p_struct); /** Getter. * Use this function to get the member "unitIdNameSpace" (see @ref AB_TRANSACTION_unitIdNameSpace) */ AQBANKING_API const char *AB_Transaction_GetUnitIdNameSpace(const AB_TRANSACTION *p_struct); /** Getter. * Use this function to get the member "tickerSymbol" (see @ref AB_TRANSACTION_tickerSymbol) */ AQBANKING_API const char *AB_Transaction_GetTickerSymbol(const AB_TRANSACTION *p_struct); /** Getter. * Use this function to get the member "units" (see @ref AB_TRANSACTION_units) */ AQBANKING_API const AB_VALUE *AB_Transaction_GetUnits(const AB_TRANSACTION *p_struct); /** Getter. * Use this function to get the member "unitPriceValue" (see @ref AB_TRANSACTION_unitPriceValue) */ AQBANKING_API const AB_VALUE *AB_Transaction_GetUnitPriceValue(const AB_TRANSACTION *p_struct); /** Getter. * Use this function to get the member "unitPriceDate" (see @ref AB_TRANSACTION_unitPriceDate) */ AQBANKING_API const GWEN_DATE *AB_Transaction_GetUnitPriceDate(const AB_TRANSACTION *p_struct); /** Getter. * Use this function to get the member "commissionValue" (see @ref AB_TRANSACTION_commissionValue) */ AQBANKING_API const AB_VALUE *AB_Transaction_GetCommissionValue(const AB_TRANSACTION *p_struct); /** Getter. * Use this function to get the member "estatementNumber" (see @ref AB_TRANSACTION_estatementNumber) */ AQBANKING_API uint32_t AB_Transaction_GetEstatementNumber(const AB_TRANSACTION *p_struct); /** Getter. * Use this function to get the member "estatementMaxEntries" (see @ref AB_TRANSACTION_estatementMaxEntries) */ AQBANKING_API uint32_t AB_Transaction_GetEstatementMaxEntries(const AB_TRANSACTION *p_struct); /** Getter. * Use this function to get the member "memo" (see @ref AB_TRANSACTION_memo) */ AQBANKING_API const char *AB_Transaction_GetMemo(const AB_TRANSACTION *p_struct); /** Getter. * Use this function to get the member "hash" (see @ref AB_TRANSACTION_hash) */ AQBANKING_API const char *AB_Transaction_GetHash(const AB_TRANSACTION *p_struct); /** Setter. * Use this function to set the member "type" (see @ref AB_TRANSACTION_type) */ AQBANKING_API void AB_Transaction_SetType(AB_TRANSACTION *p_struct, AB_TRANSACTION_TYPE p_src); /** Setter. * Use this function to set the member "subType" (see @ref AB_TRANSACTION_subType) */ AQBANKING_API void AB_Transaction_SetSubType(AB_TRANSACTION *p_struct, AB_TRANSACTION_SUBTYPE p_src); /** Setter. * Use this function to set the member "command" (see @ref AB_TRANSACTION_command) */ AQBANKING_API void AB_Transaction_SetCommand(AB_TRANSACTION *p_struct, AB_TRANSACTION_COMMAND p_src); /** Setter. * Use this function to set the member "status" (see @ref AB_TRANSACTION_status) */ AQBANKING_API void AB_Transaction_SetStatus(AB_TRANSACTION *p_struct, AB_TRANSACTION_STATUS p_src); /** Setter. * Use this function to set the member "uniqueAccountId" (see @ref AB_TRANSACTION_uniqueAccountId) */ AQBANKING_API void AB_Transaction_SetUniqueAccountId(AB_TRANSACTION *p_struct, uint32_t p_src); /** Setter. * Use this function to set the member "acknowledge" (see @ref AB_TRANSACTION_acknowledge) */ AQBANKING_API void AB_Transaction_SetAcknowledge(AB_TRANSACTION *p_struct, AB_TRANSACTION_ACK p_src); /** Setter. * Use this function to set the member "uniqueId" (see @ref AB_TRANSACTION_uniqueId) */ AQBANKING_API void AB_Transaction_SetUniqueId(AB_TRANSACTION *p_struct, uint32_t p_src); /** Setter. * Use this function to set the member "refUniqueId" (see @ref AB_TRANSACTION_refUniqueId) */ AQBANKING_API void AB_Transaction_SetRefUniqueId(AB_TRANSACTION *p_struct, uint32_t p_src); /** Setter. * Use this function to set the member "idForApplication" (see @ref AB_TRANSACTION_idForApplication) */ AQBANKING_API void AB_Transaction_SetIdForApplication(AB_TRANSACTION *p_struct, uint32_t p_src); /** Setter. * Use this function to set the member "stringIdForApplication" (see @ref AB_TRANSACTION_stringIdForApplication) */ AQBANKING_API void AB_Transaction_SetStringIdForApplication(AB_TRANSACTION *p_struct, const char *p_src); /** Setter. * Use this function to set the member "sessionId" (see @ref AB_TRANSACTION_sessionId) */ AQBANKING_API void AB_Transaction_SetSessionId(AB_TRANSACTION *p_struct, uint32_t p_src); /** Setter. * Use this function to set the member "groupId" (see @ref AB_TRANSACTION_groupId) */ AQBANKING_API void AB_Transaction_SetGroupId(AB_TRANSACTION *p_struct, uint32_t p_src); /** Setter. * Use this function to set the member "fiId" (see @ref AB_TRANSACTION_fiId) */ AQBANKING_API void AB_Transaction_SetFiId(AB_TRANSACTION *p_struct, const char *p_src); /** Setter. * Use this function to set the member "localIban" (see @ref AB_TRANSACTION_localIban) */ AQBANKING_API void AB_Transaction_SetLocalIban(AB_TRANSACTION *p_struct, const char *p_src); /** Setter. * Use this function to set the member "localBic" (see @ref AB_TRANSACTION_localBic) */ AQBANKING_API void AB_Transaction_SetLocalBic(AB_TRANSACTION *p_struct, const char *p_src); /** Setter. * Use this function to set the member "localCountry" (see @ref AB_TRANSACTION_localCountry) */ AQBANKING_API void AB_Transaction_SetLocalCountry(AB_TRANSACTION *p_struct, const char *p_src); /** Setter. * Use this function to set the member "localBankCode" (see @ref AB_TRANSACTION_localBankCode) */ AQBANKING_API void AB_Transaction_SetLocalBankCode(AB_TRANSACTION *p_struct, const char *p_src); /** Setter. * Use this function to set the member "localBranchId" (see @ref AB_TRANSACTION_localBranchId) */ AQBANKING_API void AB_Transaction_SetLocalBranchId(AB_TRANSACTION *p_struct, const char *p_src); /** Setter. * Use this function to set the member "localAccountNumber" (see @ref AB_TRANSACTION_localAccountNumber) */ AQBANKING_API void AB_Transaction_SetLocalAccountNumber(AB_TRANSACTION *p_struct, const char *p_src); /** Setter. * Use this function to set the member "localSuffix" (see @ref AB_TRANSACTION_localSuffix) */ AQBANKING_API void AB_Transaction_SetLocalSuffix(AB_TRANSACTION *p_struct, const char *p_src); /** Setter. * Use this function to set the member "localName" (see @ref AB_TRANSACTION_localName) */ AQBANKING_API void AB_Transaction_SetLocalName(AB_TRANSACTION *p_struct, const char *p_src); /** Setter. * Use this function to set the member "remoteCountry" (see @ref AB_TRANSACTION_remoteCountry) */ AQBANKING_API void AB_Transaction_SetRemoteCountry(AB_TRANSACTION *p_struct, const char *p_src); /** Setter. * Use this function to set the member "remoteBankCode" (see @ref AB_TRANSACTION_remoteBankCode) */ AQBANKING_API void AB_Transaction_SetRemoteBankCode(AB_TRANSACTION *p_struct, const char *p_src); /** Setter. * Use this function to set the member "remoteBranchId" (see @ref AB_TRANSACTION_remoteBranchId) */ AQBANKING_API void AB_Transaction_SetRemoteBranchId(AB_TRANSACTION *p_struct, const char *p_src); /** Setter. * Use this function to set the member "remoteAccountNumber" (see @ref AB_TRANSACTION_remoteAccountNumber) */ AQBANKING_API void AB_Transaction_SetRemoteAccountNumber(AB_TRANSACTION *p_struct, const char *p_src); /** Setter. * Use this function to set the member "remoteSuffix" (see @ref AB_TRANSACTION_remoteSuffix) */ AQBANKING_API void AB_Transaction_SetRemoteSuffix(AB_TRANSACTION *p_struct, const char *p_src); /** Setter. * Use this function to set the member "remoteIban" (see @ref AB_TRANSACTION_remoteIban) */ AQBANKING_API void AB_Transaction_SetRemoteIban(AB_TRANSACTION *p_struct, const char *p_src); /** Setter. * Use this function to set the member "remoteBic" (see @ref AB_TRANSACTION_remoteBic) */ AQBANKING_API void AB_Transaction_SetRemoteBic(AB_TRANSACTION *p_struct, const char *p_src); /** Setter. * Use this function to set the member "remoteName" (see @ref AB_TRANSACTION_remoteName) */ AQBANKING_API void AB_Transaction_SetRemoteName(AB_TRANSACTION *p_struct, const char *p_src); /** Setter. * Use this function to set the member "date" (see @ref AB_TRANSACTION_date) */ AQBANKING_API void AB_Transaction_SetDate(AB_TRANSACTION *p_struct, const GWEN_DATE *p_src); /** Setter. * Use this function to set the member "valutaDate" (see @ref AB_TRANSACTION_valutaDate) */ AQBANKING_API void AB_Transaction_SetValutaDate(AB_TRANSACTION *p_struct, const GWEN_DATE *p_src); /** Setter. * Use this function to set the member "value" (see @ref AB_TRANSACTION_value) */ AQBANKING_API void AB_Transaction_SetValue(AB_TRANSACTION *p_struct, const AB_VALUE *p_src); /** Setter. * Use this function to set the member "fees" (see @ref AB_TRANSACTION_fees) */ AQBANKING_API void AB_Transaction_SetFees(AB_TRANSACTION *p_struct, const AB_VALUE *p_src); /** Setter. * Use this function to set the member "taxes" (see @ref AB_TRANSACTION_taxes) */ AQBANKING_API void AB_Transaction_SetTaxes(AB_TRANSACTION *p_struct, const AB_VALUE *p_src); /** Setter. * Use this function to set the member "transactionCode" (see @ref AB_TRANSACTION_transactionCode) */ AQBANKING_API void AB_Transaction_SetTransactionCode(AB_TRANSACTION *p_struct, int p_src); /** Setter. * Use this function to set the member "transactionText" (see @ref AB_TRANSACTION_transactionText) */ AQBANKING_API void AB_Transaction_SetTransactionText(AB_TRANSACTION *p_struct, const char *p_src); /** Setter. * Use this function to set the member "transactionKey" (see @ref AB_TRANSACTION_transactionKey) */ AQBANKING_API void AB_Transaction_SetTransactionKey(AB_TRANSACTION *p_struct, const char *p_src); /** Setter. * Use this function to set the member "textKey" (see @ref AB_TRANSACTION_textKey) */ AQBANKING_API void AB_Transaction_SetTextKey(AB_TRANSACTION *p_struct, int p_src); /** Setter. * Use this function to set the member "primanota" (see @ref AB_TRANSACTION_primanota) */ AQBANKING_API void AB_Transaction_SetPrimanota(AB_TRANSACTION *p_struct, const char *p_src); /** Setter. * Use this function to set the member "purpose" (see @ref AB_TRANSACTION_purpose) */ AQBANKING_API void AB_Transaction_SetPurpose(AB_TRANSACTION *p_struct, const char *p_src); /** Setter. * Use this function to set the member "category" (see @ref AB_TRANSACTION_category) */ AQBANKING_API void AB_Transaction_SetCategory(AB_TRANSACTION *p_struct, const char *p_src); /** Setter. * Use this function to set the member "customerReference" (see @ref AB_TRANSACTION_customerReference) */ AQBANKING_API void AB_Transaction_SetCustomerReference(AB_TRANSACTION *p_struct, const char *p_src); /** Setter. * Use this function to set the member "bankReference" (see @ref AB_TRANSACTION_bankReference) */ AQBANKING_API void AB_Transaction_SetBankReference(AB_TRANSACTION *p_struct, const char *p_src); /** Setter. * Use this function to set the member "endToEndReference" (see @ref AB_TRANSACTION_endToEndReference) */ AQBANKING_API void AB_Transaction_SetEndToEndReference(AB_TRANSACTION *p_struct, const char *p_src); /** Setter. * Use this function to set the member "ultimateCreditor" (see @ref AB_TRANSACTION_ultimateCreditor) */ AQBANKING_API void AB_Transaction_SetUltimateCreditor(AB_TRANSACTION *p_struct, const char *p_src); /** Setter. * Use this function to set the member "ultimateDebtor" (see @ref AB_TRANSACTION_ultimateDebtor) */ AQBANKING_API void AB_Transaction_SetUltimateDebtor(AB_TRANSACTION *p_struct, const char *p_src); /** Setter. * Use this function to set the member "creditorSchemeId" (see @ref AB_TRANSACTION_creditorSchemeId) */ AQBANKING_API void AB_Transaction_SetCreditorSchemeId(AB_TRANSACTION *p_struct, const char *p_src); /** Setter. * Use this function to set the member "originatorId" (see @ref AB_TRANSACTION_originatorId) */ AQBANKING_API void AB_Transaction_SetOriginatorId(AB_TRANSACTION *p_struct, const char *p_src); /** Setter. * Use this function to set the member "mandateId" (see @ref AB_TRANSACTION_mandateId) */ AQBANKING_API void AB_Transaction_SetMandateId(AB_TRANSACTION *p_struct, const char *p_src); /** Setter. * Use this function to set the member "mandateDate" (see @ref AB_TRANSACTION_mandateDate) */ AQBANKING_API void AB_Transaction_SetMandateDate(AB_TRANSACTION *p_struct, const GWEN_DATE *p_src); /** Setter. * Use this function to set the member "mandateDebitorName" (see @ref AB_TRANSACTION_mandateDebitorName) */ AQBANKING_API void AB_Transaction_SetMandateDebitorName(AB_TRANSACTION *p_struct, const char *p_src); /** Setter. * Use this function to set the member "originalCreditorSchemeId" (see @ref AB_TRANSACTION_originalCreditorSchemeId) */ AQBANKING_API void AB_Transaction_SetOriginalCreditorSchemeId(AB_TRANSACTION *p_struct, const char *p_src); /** Setter. * Use this function to set the member "originalMandateId" (see @ref AB_TRANSACTION_originalMandateId) */ AQBANKING_API void AB_Transaction_SetOriginalMandateId(AB_TRANSACTION *p_struct, const char *p_src); /** Setter. * Use this function to set the member "originalCreditorName" (see @ref AB_TRANSACTION_originalCreditorName) */ AQBANKING_API void AB_Transaction_SetOriginalCreditorName(AB_TRANSACTION *p_struct, const char *p_src); /** Setter. * Use this function to set the member "sequence" (see @ref AB_TRANSACTION_sequence) */ AQBANKING_API void AB_Transaction_SetSequence(AB_TRANSACTION *p_struct, AB_TRANSACTION_SEQUENCE p_src); /** Setter. * Use this function to set the member "charge" (see @ref AB_TRANSACTION_charge) */ AQBANKING_API void AB_Transaction_SetCharge(AB_TRANSACTION *p_struct, AB_TRANSACTION_CHARGE p_src); /** Setter. * Use this function to set the member "remoteAddrStreet" (see @ref AB_TRANSACTION_remoteAddrStreet) */ AQBANKING_API void AB_Transaction_SetRemoteAddrStreet(AB_TRANSACTION *p_struct, const char *p_src); /** Setter. * Use this function to set the member "remoteAddrZipcode" (see @ref AB_TRANSACTION_remoteAddrZipcode) */ AQBANKING_API void AB_Transaction_SetRemoteAddrZipcode(AB_TRANSACTION *p_struct, const char *p_src); /** Setter. * Use this function to set the member "remoteAddrCity" (see @ref AB_TRANSACTION_remoteAddrCity) */ AQBANKING_API void AB_Transaction_SetRemoteAddrCity(AB_TRANSACTION *p_struct, const char *p_src); /** Setter. * Use this function to set the member "remoteAddrPhone" (see @ref AB_TRANSACTION_remoteAddrPhone) */ AQBANKING_API void AB_Transaction_SetRemoteAddrPhone(AB_TRANSACTION *p_struct, const char *p_src); /** Setter. * Use this function to set the member "period" (see @ref AB_TRANSACTION_period) */ AQBANKING_API void AB_Transaction_SetPeriod(AB_TRANSACTION *p_struct, AB_TRANSACTION_PERIOD p_src); /** Setter. * Use this function to set the member "cycle" (see @ref AB_TRANSACTION_cycle) */ AQBANKING_API void AB_Transaction_SetCycle(AB_TRANSACTION *p_struct, uint32_t p_src); /** Setter. * Use this function to set the member "executionDay" (see @ref AB_TRANSACTION_executionDay) */ AQBANKING_API void AB_Transaction_SetExecutionDay(AB_TRANSACTION *p_struct, uint32_t p_src); /** Setter. * Use this function to set the member "firstDate" (see @ref AB_TRANSACTION_firstDate) */ AQBANKING_API void AB_Transaction_SetFirstDate(AB_TRANSACTION *p_struct, const GWEN_DATE *p_src); /** Setter. * Use this function to set the member "lastDate" (see @ref AB_TRANSACTION_lastDate) */ AQBANKING_API void AB_Transaction_SetLastDate(AB_TRANSACTION *p_struct, const GWEN_DATE *p_src); /** Setter. * Use this function to set the member "nextDate" (see @ref AB_TRANSACTION_nextDate) */ AQBANKING_API void AB_Transaction_SetNextDate(AB_TRANSACTION *p_struct, const GWEN_DATE *p_src); /** Setter. * Use this function to set the member "unitId" (see @ref AB_TRANSACTION_unitId) */ AQBANKING_API void AB_Transaction_SetUnitId(AB_TRANSACTION *p_struct, const char *p_src); /** Setter. * Use this function to set the member "unitIdNameSpace" (see @ref AB_TRANSACTION_unitIdNameSpace) */ AQBANKING_API void AB_Transaction_SetUnitIdNameSpace(AB_TRANSACTION *p_struct, const char *p_src); /** Setter. * Use this function to set the member "tickerSymbol" (see @ref AB_TRANSACTION_tickerSymbol) */ AQBANKING_API void AB_Transaction_SetTickerSymbol(AB_TRANSACTION *p_struct, const char *p_src); /** Setter. * Use this function to set the member "units" (see @ref AB_TRANSACTION_units) */ AQBANKING_API void AB_Transaction_SetUnits(AB_TRANSACTION *p_struct, const AB_VALUE *p_src); /** Setter. * Use this function to set the member "unitPriceValue" (see @ref AB_TRANSACTION_unitPriceValue) */ AQBANKING_API void AB_Transaction_SetUnitPriceValue(AB_TRANSACTION *p_struct, const AB_VALUE *p_src); /** Setter. * Use this function to set the member "unitPriceDate" (see @ref AB_TRANSACTION_unitPriceDate) */ AQBANKING_API void AB_Transaction_SetUnitPriceDate(AB_TRANSACTION *p_struct, const GWEN_DATE *p_src); /** Setter. * Use this function to set the member "commissionValue" (see @ref AB_TRANSACTION_commissionValue) */ AQBANKING_API void AB_Transaction_SetCommissionValue(AB_TRANSACTION *p_struct, const AB_VALUE *p_src); /** Setter. * Use this function to set the member "estatementNumber" (see @ref AB_TRANSACTION_estatementNumber) */ AQBANKING_API void AB_Transaction_SetEstatementNumber(AB_TRANSACTION *p_struct, uint32_t p_src); /** Setter. * Use this function to set the member "estatementMaxEntries" (see @ref AB_TRANSACTION_estatementMaxEntries) */ AQBANKING_API void AB_Transaction_SetEstatementMaxEntries(AB_TRANSACTION *p_struct, uint32_t p_src); /** Setter. * Use this function to set the member "memo" (see @ref AB_TRANSACTION_memo) */ AQBANKING_API void AB_Transaction_SetMemo(AB_TRANSACTION *p_struct, const char *p_src); /** Setter. * Use this function to set the member "hash" (see @ref AB_TRANSACTION_hash) */ AQBANKING_API void AB_Transaction_SetHash(AB_TRANSACTION *p_struct, const char *p_src); AQBANKING_API AB_TRANSACTION_LIST *AB_Transaction_List_dup(const AB_TRANSACTION_LIST *p_src); AQBANKING_API void AB_Transaction_ReadDb(AB_TRANSACTION *p_struct, GWEN_DB_NODE *p_db); AQBANKING_API int AB_Transaction_WriteDb(const AB_TRANSACTION *p_struct, GWEN_DB_NODE *p_db); AQBANKING_API AB_TRANSACTION *AB_Transaction_fromDb(GWEN_DB_NODE *p_db); AQBANKING_API int AB_Transaction_toDb(const AB_TRANSACTION *p_struct, GWEN_DB_NODE *p_db); AQBANKING_API void AB_Transaction_ReadXml(AB_TRANSACTION *p_struct, GWEN_XMLNODE *p_db); AQBANKING_API void AB_Transaction_WriteXml(const AB_TRANSACTION *p_struct, GWEN_XMLNODE *p_db); AQBANKING_API void AB_Transaction_toXml(const AB_TRANSACTION *p_struct, GWEN_XMLNODE *p_db); AQBANKING_API AB_TRANSACTION *AB_Transaction_fromXml(GWEN_XMLNODE *p_db); AQBANKING_API AB_TRANSACTION *AB_Transaction_List_GetByUniqueId(const AB_TRANSACTION_LIST *p_list, uint32_t p_cmp); AQBANKING_API AB_TRANSACTION *AB_Transaction_List_GetByIdForApplication(const AB_TRANSACTION_LIST *p_list, uint32_t p_cmp); AQBANKING_API AB_TRANSACTION *AB_Transaction_List_GetByStringIdForApplication(const AB_TRANSACTION_LIST *p_list, const char *p_cmp); AQBANKING_API void AB_Transaction_toHashString(const AB_TRANSACTION *p_struct, GWEN_BUFFER *p_buffer); AQBANKING_API int AB_Transaction_GenerateHash(AB_TRANSACTION *st); /** * Check whether a transaction matches the given type and command. * * @return 1 if match, 0 otherwise * @param tl pointer to the list to search * @param ty transaction type, if 0 then this is not checked * @param cmd command, if -1 then any non-zero command matches, if 0 then this is not checked */ AQBANKING_API int AB_Transaction_MatchTypeAndCommand(const AB_TRANSACTION *t, int ty, int cmd); /** * Find first transaction in a list which matches the given type and command. * * @return Entry matching the description (or NULL if none) * @param tl pointer to the list to search * @param ty transaction type, if 0 then this is not checked * @param cmd command, if -1 then any non-zero command matches, if 0 then this is not checked */ AQBANKING_API AB_TRANSACTION * AB_Transaction_List_FindFirstByType(const AB_TRANSACTION_LIST *tl, int ty, int cmd); /** * Find next transaction in a list which matches the given type and command. * * @return Entry matching the description (or NULL if none) * @param t pointer to the previous match (as returned by AB_Transaction_List_FindFirstByType) * @param ty transaction type, if 0 then this is not checked * @param cmd command, if -1 then any non-zero command matches, if 0 then this is not checked */ AQBANKING_API AB_TRANSACTION * AB_Transaction_List_FindNextByType(const AB_TRANSACTION *t, int ty, int cmd); /** * Remove matching transactions from the given list * * @return Number of transactions removed from the list * @param tl pointer to the list to search * @param ty transaction type, if 0 then this is not checked * @param cmd command, if -1 then any non-zero command matches, if 0 then this is not checked */ AQBANKING_API int AB_Transaction_List_RemoveByType(AB_TRANSACTION_LIST *tl, int ty, int cmd); /** * Keep matching transactions in the given list and delete others. * * @return Number of transactions removed from the list * @param tl pointer to the list to search * @param ty transaction type, if 0 then this is not checked * @param cmd command, if -1 then any non-zero command matches, if 0 then this is not checked */ AQBANKING_API int AB_Transaction_List_KeepByType(AB_TRANSACTION_LIST *tl, int ty, int cmd); AQBANKING_API int AB_Transaction_List_CountByType(const AB_TRANSACTION_LIST *tl, int ty, int cmd); /** * Definition of the callback function for @ref AB_Transaction_List_ForEachByType(). */ typedef const AB_TRANSACTION* (AB_TRANSACTION_LIST_FOREACHBYTYPE_CB)(const AB_TRANSACTION *element, void *user_data); /** * Call the given callback function for every entry of the list which matches the given type and command. * * @return Entry matching the description (or NULL if none) * @param fn callback function to be called for every element of the given list * @param user_data user data forwarded to the callback function * @param tl pointer to the list to search * @param ty transaction type, if 0 then this is not checked * @param cmd command, if -1 then any non-zero command matches, if 0 then this is not checked */ AQBANKING_API const AB_TRANSACTION * AB_Transaction_List_ForEachByType(const AB_TRANSACTION_LIST *tl, AB_TRANSACTION_LIST_FOREACHBYTYPE_CB fn, void *user_data, int ty, int cmd); AQBANKING_API AB_TRANSACTION * AB_Transaction_List_FindName(const AB_TRANSACTION_LIST *tl, int ty, const char *ns, const char *n); AQBANKING_API int AB_Transaction_List_WriteDb(const AB_TRANSACTION_LIST *tl, GWEN_DB_NODE *db); AQBANKING_API int AB_Transaction_List_ReadDb(AB_TRANSACTION_LIST *tl, GWEN_DB_NODE *db); AQBANKING_API void AB_Transaction_AddPurposeLine(AB_TRANSACTION *t, const char *s); AQBANKING_API void AB_Transaction_SetPurposeFromStringList(AB_TRANSACTION *t, const GWEN_STRINGLIST *sl); /** * The purpose fields may contain multiple purpose lines separated by a NEWLINE character (10). * If you need the old behaviour of previous versions you can use this function to get a string list * representation of the purpose lines. * * If the purpose field is empty NULL is returned (no empty list is ever returned). * * The caller is responsible for freeing the object returned, if any. * * @return stringlist (NULL if empty) * @param t transaction object */ AQBANKING_API GWEN_STRINGLIST *AB_Transaction_GetPurposeAsStringList(const AB_TRANSACTION *t); AQBANKING_API void AB_Transaction_AddCategory(AB_TRANSACTION *t, const char *s); AQBANKING_API void AB_Transaction_SetCategoryFromStringList(AB_TRANSACTION *t, const GWEN_STRINGLIST *sl); AQBANKING_API int AB_Transaction_List2_freeAll(AB_TRANSACTION_LIST2 *tl); #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/aqbanking/types/ab_imexporter_accountinfo_list.tm20000664000175000017500000000042415037736054024142 00000000000000 AB_IMEXPORTER_ACCOUNTINFO_LIST AB_ImExporterAccountInfo_List aqbanking-6.6.1/src/libs/aqbanking/types/bankinfo.xml0000664000175000017500000001277014043610744017544 00000000000000 AB_BANKINFO AB_BankInfo bankinfo with_xml with_db with_list1 with_list2 with_refcount
aqbanking/error.h
aqbanking/types/bankinfoservice.h
gwenhywfar/types.h
with_list2 with_list2 $(api) int $(struct_prefix)_List2_freeAll($(struct_type)_LIST2 *tl); with_list2 with_list2 static $(struct_type) *$(struct_prefix)_List2__freeAll_cb($(struct_type) *t, void *user_data) { $(struct_prefix)_free(t); return NULL; } int $(struct_prefix)_List2_freeAll($(struct_type)_LIST2 *tl) { if (tl) { $(struct_prefix)_List2_ForEach(tl, $(struct_prefix)_List2__freeAll_cb, NULL); $(struct_prefix)_List2_free(tl); } else { DBG_ERROR(AQBANKING_LOGDOMAIN, "List missing"); return GWEN_ERROR_INVALID; } return 0; }
public own const dup const public own const dup const public own const dup const public own const dup const public own const dup const public own const dup const public own const dup const public own const dup const public own const dup const public own const dup const public own const dup const public own const dup const public own const dup const public own const dup const NULL AB_BankInfoService_List_new() public own dup none none
aqbanking-6.6.1/src/libs/aqbanking/types/bankinfo_p.h0000664000175000017500000000147615037736054017522 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "bankinfo.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef AB_BANKINFO_BANKINFO_P_H #define AB_BANKINFO_BANKINFO_P_H #include "./bankinfo.h" #ifdef __cplusplus extern "C" { #endif struct AB_BANKINFO { GWEN_LIST_ELEMENT(AB_BANKINFO) int _refCount; char *country; char *branchId; char *bankId; char *bic; char *bankName; char *location; char *street; char *zipcode; char *city; char *region; char *phone; char *fax; char *email; char *website; AB_BANKINFO_SERVICE_LIST *services; }; #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/aqbanking/types/transactionlimits.h0000664000175000017500000011506215037736054021160 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "transactionlimits.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef AB_TRANSACTION_LIMITS_TRANSACTIONLIMITS_H #define AB_TRANSACTION_LIMITS_TRANSACTIONLIMITS_H #ifdef __cplusplus extern "C" { #endif /** @page P_AB_TRANSACTION_LIMITS Structure AB_TRANSACTION_LIMITS

This page describes the properties of AB_TRANSACTION_LIMITS.

AB_TRANSACTION_LIMITS

This type describes the limits for fields of an @ref AB_TRANSACTION. The limits have the following meanings:
  • maxLenSOMETHING: if 0 then this limit is unknown, if -1 then the described element is not allowed to be set in the transaction. All other values represent the maximum length of the described field.
  • minLenSOMETHING: if 0 then this limit is unknown. All other values represent the minimum length of the described field.
  • maxLinesSOMETHING: if 0 then this limit is unknown All other values represent the maximum number of lines for the described field.
  • minLinesSOMETHING: if 0 then this limit is unknown. All other values represent the minimum number of lines for the described field.
  • valuesSOMETHING: A list of allowed values (as string). If this list is empty then there all values are allowed (those lists @b exist in any case, so the appropriate getter function will never return NULL).
  • allowSOMETHING: If SOMETHING is allowed then the value is "1". If SOMETHING is NOT allowed then the value is "-1". If it is unknown whether SOMETHING is allowed or not then this value is "0".
So if you want to check whether an given field is at all allowed you must check whether "maxLenSOMETHING" has a value of "-1".

Unnamed Group

@anchor AB_TRANSACTION_LIMITS_command

command

Command to which these hints apply (see @ref AB_Transaction_CommandGetBalance and others).

Set this property with @ref AB_TransactionLimits_SetCommand(), get it with @ref AB_TransactionLimits_GetCommand().

Unnamed Group

Limits for the issuer name. @anchor AB_TRANSACTION_LIMITS_maxLenLocalName

maxLenLocalName

Set this property with @ref AB_TransactionLimits_SetMaxLenLocalName(), get it with @ref AB_TransactionLimits_GetMaxLenLocalName().

@anchor AB_TRANSACTION_LIMITS_minLenLocalName

minLenLocalName

Set this property with @ref AB_TransactionLimits_SetMinLenLocalName(), get it with @ref AB_TransactionLimits_GetMinLenLocalName().

Unnamed Group

Limits for the payee name. @anchor AB_TRANSACTION_LIMITS_maxLenRemoteName

maxLenRemoteName

Set this property with @ref AB_TransactionLimits_SetMaxLenRemoteName(), get it with @ref AB_TransactionLimits_GetMaxLenRemoteName().

@anchor AB_TRANSACTION_LIMITS_minLenRemoteName

minLenRemoteName

Set this property with @ref AB_TransactionLimits_SetMinLenRemoteName(), get it with @ref AB_TransactionLimits_GetMinLenRemoteName().

Unnamed Group

Limits for customer reference. @anchor AB_TRANSACTION_LIMITS_maxLenCustomerReference

maxLenCustomerReference

Set this property with @ref AB_TransactionLimits_SetMaxLenCustomerReference(), get it with @ref AB_TransactionLimits_GetMaxLenCustomerReference().

@anchor AB_TRANSACTION_LIMITS_minLenCustomerReference

minLenCustomerReference

Set this property with @ref AB_TransactionLimits_SetMinLenCustomerReference(), get it with @ref AB_TransactionLimits_GetMinLenCustomerReference().

Unnamed Group

Limits for bank reference. @anchor AB_TRANSACTION_LIMITS_maxLenBankReference

maxLenBankReference

Set this property with @ref AB_TransactionLimits_SetMaxLenBankReference(), get it with @ref AB_TransactionLimits_GetMaxLenBankReference().

@anchor AB_TRANSACTION_LIMITS_minLenBankReference

minLenBankReference

Set this property with @ref AB_TransactionLimits_SetMinLenBankReference(), get it with @ref AB_TransactionLimits_GetMinLenBankReference().

Unnamed Group

Limits for purpose (called memo in some apps). @anchor AB_TRANSACTION_LIMITS_maxLenPurpose

maxLenPurpose

Set this property with @ref AB_TransactionLimits_SetMaxLenPurpose(), get it with @ref AB_TransactionLimits_GetMaxLenPurpose().

@anchor AB_TRANSACTION_LIMITS_minLenPurpose

minLenPurpose

Set this property with @ref AB_TransactionLimits_SetMinLenPurpose(), get it with @ref AB_TransactionLimits_GetMinLenPurpose().

@anchor AB_TRANSACTION_LIMITS_maxLinesPurpose

maxLinesPurpose

Set this property with @ref AB_TransactionLimits_SetMaxLinesPurpose(), get it with @ref AB_TransactionLimits_GetMaxLinesPurpose().

@anchor AB_TRANSACTION_LIMITS_minLinesPurpose

minLinesPurpose

Set this property with @ref AB_TransactionLimits_SetMinLinesPurpose(), get it with @ref AB_TransactionLimits_GetMinLinesPurpose().

Unnamed Group

Limits for date. @anchor AB_TRANSACTION_LIMITS_needDate

needDate

Defines whether setting of the execution date (@ref AB_Transaction_SetDate) is required (value=1) or forbidden (value=-1), value=0 means "unknown".

Set this property with @ref AB_TransactionLimits_SetNeedDate(), get it with @ref AB_TransactionLimits_GetNeedDate().

Unnamed Group

These limits apply to standing orders and dated transfers only. @anchor AB_TRANSACTION_LIMITS_minValueSetupTime

minValueSetupTime

Minimum time in days between issuing of a request and its first execution.

Set this property with @ref AB_TransactionLimits_SetMinValueSetupTime(), get it with @ref AB_TransactionLimits_GetMinValueSetupTime().

@anchor AB_TRANSACTION_LIMITS_maxValueSetupTime

maxValueSetupTime

Maximum time in days between issuing of a request and its first execution.

Set this property with @ref AB_TransactionLimits_SetMaxValueSetupTime(), get it with @ref AB_TransactionLimits_GetMaxValueSetupTime().

@anchor AB_TRANSACTION_LIMITS_minValueSetupTimeFirst

minValueSetupTimeFirst

Minimum time in days between issuing of a request and its first execution. This is for a first request (e.g. first debit note).

Set this property with @ref AB_TransactionLimits_SetMinValueSetupTimeFirst(), get it with @ref AB_TransactionLimits_GetMinValueSetupTimeFirst().

@anchor AB_TRANSACTION_LIMITS_maxValueSetupTimeFirst

maxValueSetupTimeFirst

Maximum time in days between issuing of a request and its first execution. This is for a first request (e.g. first debit note).

Set this property with @ref AB_TransactionLimits_SetMaxValueSetupTimeFirst(), get it with @ref AB_TransactionLimits_GetMaxValueSetupTimeFirst().

@anchor AB_TRANSACTION_LIMITS_minValueSetupTimeOnce

minValueSetupTimeOnce

Minimum time in days between issuing of a request and its execution. This is for a one time only request (e.g. onetime debit note).

Set this property with @ref AB_TransactionLimits_SetMinValueSetupTimeOnce(), get it with @ref AB_TransactionLimits_GetMinValueSetupTimeOnce().

@anchor AB_TRANSACTION_LIMITS_maxValueSetupTimeOnce

maxValueSetupTimeOnce

Maximum time in days between issuing of a request and its execution. This is for a one time only request (e.g. onetime debit note).

Set this property with @ref AB_TransactionLimits_SetMaxValueSetupTimeOnce(), get it with @ref AB_TransactionLimits_GetMaxValueSetupTimeOnce().

@anchor AB_TRANSACTION_LIMITS_minValueSetupTimeRecurring

minValueSetupTimeRecurring

Minimum time in days between issuing of a request and its execution. This is for a following request (e.g. a recurring debit note).

Set this property with @ref AB_TransactionLimits_SetMinValueSetupTimeRecurring(), get it with @ref AB_TransactionLimits_GetMinValueSetupTimeRecurring().

@anchor AB_TRANSACTION_LIMITS_maxValueSetupTimeRecurring

maxValueSetupTimeRecurring

Maximum time in days between issuing of a request and its first execution. This is for a following request (e.g. a recurring debit note).

Set this property with @ref AB_TransactionLimits_SetMaxValueSetupTimeRecurring(), get it with @ref AB_TransactionLimits_GetMaxValueSetupTimeRecurring().

@anchor AB_TRANSACTION_LIMITS_minValueSetupTimeFinal

minValueSetupTimeFinal

Minimum time in days between issuing of a request and its execution. This is for a final request (e.g. last debit note).

Set this property with @ref AB_TransactionLimits_SetMinValueSetupTimeFinal(), get it with @ref AB_TransactionLimits_GetMinValueSetupTimeFinal().

@anchor AB_TRANSACTION_LIMITS_maxValueSetupTimeFinal

maxValueSetupTimeFinal

Maximum time in days between issuing of a request and its execution. This is for a final request (e.g. last debit note).

Set this property with @ref AB_TransactionLimits_SetMaxValueSetupTimeFinal(), get it with @ref AB_TransactionLimits_GetMaxValueSetupTimeFinal().

@anchor AB_TRANSACTION_LIMITS_valuesCycleWeek

valuesCycleWeek

This array contains one entry for every supported cycle. These value are accepted when "period" is "weekly". The first entry is the number of used entries following. Allowed values are "0" (all cycles possible) and "1"-"52".

Set this property with @ref AB_TransactionLimits_SetValuesCycleWeek(), get it with @ref AB_TransactionLimits_GetValuesCycleWeek().

@anchor AB_TRANSACTION_LIMITS_valuesCycleWeekUsed

valuesCycleWeekUsed

Number of bytes actually stored in the array valuesCycleWeek.

Set this property with @ref AB_TransactionLimits_SetValuesCycleWeekUsed(), get it with @ref AB_TransactionLimits_GetValuesCycleWeekUsed().

@anchor AB_TRANSACTION_LIMITS_valuesCycleMonth

valuesCycleMonth

This array contains one entry for every supported cycle. These value are accepted when "period" is "monthly". The first entry is the number of used entries following. Allowed values are "0" (all cycles possible) and "1"-"12".

Set this property with @ref AB_TransactionLimits_SetValuesCycleMonth(), get it with @ref AB_TransactionLimits_GetValuesCycleMonth().

@anchor AB_TRANSACTION_LIMITS_valuesCycleMonthUsed

valuesCycleMonthUsed

Number of bytes actually stored in the array valuesCycleMonth.

Set this property with @ref AB_TransactionLimits_SetValuesCycleMonthUsed(), get it with @ref AB_TransactionLimits_GetValuesCycleMonthUsed().

@anchor AB_TRANSACTION_LIMITS_valuesExecutionDayWeek

valuesExecutionDayWeek

This array contains one entry for every supported day of the week. These value are accepted when "period" is "weekly". The first entry is the number of used entries following. Allowed values are "0" (all days allowed) and "1"-"7".

Set this property with @ref AB_TransactionLimits_SetValuesExecutionDayWeek(), get it with @ref AB_TransactionLimits_GetValuesExecutionDayWeek().

@anchor AB_TRANSACTION_LIMITS_valuesExecutionDayWeekUsed

valuesExecutionDayWeekUsed

Number of bytes actually stored in the array valuesExecutionDayWeek.

Set this property with @ref AB_TransactionLimits_SetValuesExecutionDayWeekUsed(), get it with @ref AB_TransactionLimits_GetValuesExecutionDayWeekUsed().

@anchor AB_TRANSACTION_LIMITS_valuesExecutionDayMonth

valuesExecutionDayMonth

This list contains one entry for every supported monthly cycle. These value are accepted when "period" is "monthly". The first entry is the number of used entries following. Allowed are "0" (all days possible), "1"-"30", "97" (ultimo-2), "98" (ultimo-1) and "99" (ultimo).

Set this property with @ref AB_TransactionLimits_SetValuesExecutionDayMonth(), get it with @ref AB_TransactionLimits_GetValuesExecutionDayMonth().

@anchor AB_TRANSACTION_LIMITS_valuesExecutionDayMonthUsed

valuesExecutionDayMonthUsed

Number of bytes actually stored in the array valuesExecutionDayMonth.

Set this property with @ref AB_TransactionLimits_SetValuesExecutionDayMonthUsed(), get it with @ref AB_TransactionLimits_GetValuesExecutionDayMonthUsed().

@anchor AB_TRANSACTION_LIMITS_allowMonthly

allowMonthly

Set this property with @ref AB_TransactionLimits_SetAllowMonthly(), get it with @ref AB_TransactionLimits_GetAllowMonthly().

@anchor AB_TRANSACTION_LIMITS_allowWeekly

allowWeekly

Set this property with @ref AB_TransactionLimits_SetAllowWeekly(), get it with @ref AB_TransactionLimits_GetAllowWeekly().

@anchor AB_TRANSACTION_LIMITS_allowChangeRecipientAccount

allowChangeRecipientAccount

Set this property with @ref AB_TransactionLimits_SetAllowChangeRecipientAccount(), get it with @ref AB_TransactionLimits_GetAllowChangeRecipientAccount().

@anchor AB_TRANSACTION_LIMITS_allowChangeRecipientName

allowChangeRecipientName

Set this property with @ref AB_TransactionLimits_SetAllowChangeRecipientName(), get it with @ref AB_TransactionLimits_GetAllowChangeRecipientName().

@anchor AB_TRANSACTION_LIMITS_allowChangeValue

allowChangeValue

Set this property with @ref AB_TransactionLimits_SetAllowChangeValue(), get it with @ref AB_TransactionLimits_GetAllowChangeValue().

@anchor AB_TRANSACTION_LIMITS_allowChangeTextKey

allowChangeTextKey

Set this property with @ref AB_TransactionLimits_SetAllowChangeTextKey(), get it with @ref AB_TransactionLimits_GetAllowChangeTextKey().

@anchor AB_TRANSACTION_LIMITS_allowChangePurpose

allowChangePurpose

Set this property with @ref AB_TransactionLimits_SetAllowChangePurpose(), get it with @ref AB_TransactionLimits_GetAllowChangePurpose().

@anchor AB_TRANSACTION_LIMITS_allowChangeFirstExecutionDate

allowChangeFirstExecutionDate

Set this property with @ref AB_TransactionLimits_SetAllowChangeFirstExecutionDate(), get it with @ref AB_TransactionLimits_GetAllowChangeFirstExecutionDate().

@anchor AB_TRANSACTION_LIMITS_allowChangeLastExecutionDate

allowChangeLastExecutionDate

Set this property with @ref AB_TransactionLimits_SetAllowChangeLastExecutionDate(), get it with @ref AB_TransactionLimits_GetAllowChangeLastExecutionDate().

@anchor AB_TRANSACTION_LIMITS_allowChangeCycle

allowChangeCycle

Set this property with @ref AB_TransactionLimits_SetAllowChangeCycle(), get it with @ref AB_TransactionLimits_GetAllowChangeCycle().

@anchor AB_TRANSACTION_LIMITS_allowChangePeriod

allowChangePeriod

Set this property with @ref AB_TransactionLimits_SetAllowChangePeriod(), get it with @ref AB_TransactionLimits_GetAllowChangePeriod().

@anchor AB_TRANSACTION_LIMITS_allowChangeExecutionDay

allowChangeExecutionDay

Set this property with @ref AB_TransactionLimits_SetAllowChangeExecutionDay(), get it with @ref AB_TransactionLimits_GetAllowChangeExecutionDay().

*/ /* needed system headers */ #include #include #include #include #include /* pre-headers */ #include typedef struct AB_TRANSACTION_LIMITS AB_TRANSACTION_LIMITS; GWEN_LIST_FUNCTION_LIB_DEFS(AB_TRANSACTION_LIMITS, AB_TransactionLimits, AQBANKING_API) GWEN_LIST2_FUNCTION_LIB_DEFS(AB_TRANSACTION_LIMITS, AB_TransactionLimits, AQBANKING_API) /* post-headers */ /** Constructor. */ AQBANKING_API AB_TRANSACTION_LIMITS *AB_TransactionLimits_new(void); /** Destructor. */ AQBANKING_API void AB_TransactionLimits_free(AB_TRANSACTION_LIMITS *p_struct); AQBANKING_API void AB_TransactionLimits_Attach(AB_TRANSACTION_LIMITS *p_struct); AQBANKING_API AB_TRANSACTION_LIMITS *AB_TransactionLimits_dup(const AB_TRANSACTION_LIMITS *p_src); AQBANKING_API AB_TRANSACTION_LIMITS *AB_TransactionLimits_copy(AB_TRANSACTION_LIMITS *p_struct, const AB_TRANSACTION_LIMITS *p_src); /** Getter. * Use this function to get the member "command" (see @ref AB_TRANSACTION_LIMITS_command) */ AQBANKING_API int AB_TransactionLimits_GetCommand(const AB_TRANSACTION_LIMITS *p_struct); /** Getter. * Use this function to get the member "maxLenLocalName" (see @ref AB_TRANSACTION_LIMITS_maxLenLocalName) */ AQBANKING_API int AB_TransactionLimits_GetMaxLenLocalName(const AB_TRANSACTION_LIMITS *p_struct); /** Getter. * Use this function to get the member "minLenLocalName" (see @ref AB_TRANSACTION_LIMITS_minLenLocalName) */ AQBANKING_API int AB_TransactionLimits_GetMinLenLocalName(const AB_TRANSACTION_LIMITS *p_struct); /** Getter. * Use this function to get the member "maxLenRemoteName" (see @ref AB_TRANSACTION_LIMITS_maxLenRemoteName) */ AQBANKING_API int AB_TransactionLimits_GetMaxLenRemoteName(const AB_TRANSACTION_LIMITS *p_struct); /** Getter. * Use this function to get the member "minLenRemoteName" (see @ref AB_TRANSACTION_LIMITS_minLenRemoteName) */ AQBANKING_API int AB_TransactionLimits_GetMinLenRemoteName(const AB_TRANSACTION_LIMITS *p_struct); /** Getter. * Use this function to get the member "maxLenCustomerReference" (see @ref AB_TRANSACTION_LIMITS_maxLenCustomerReference) */ AQBANKING_API int AB_TransactionLimits_GetMaxLenCustomerReference(const AB_TRANSACTION_LIMITS *p_struct); /** Getter. * Use this function to get the member "minLenCustomerReference" (see @ref AB_TRANSACTION_LIMITS_minLenCustomerReference) */ AQBANKING_API int AB_TransactionLimits_GetMinLenCustomerReference(const AB_TRANSACTION_LIMITS *p_struct); /** Getter. * Use this function to get the member "maxLenBankReference" (see @ref AB_TRANSACTION_LIMITS_maxLenBankReference) */ AQBANKING_API int AB_TransactionLimits_GetMaxLenBankReference(const AB_TRANSACTION_LIMITS *p_struct); /** Getter. * Use this function to get the member "minLenBankReference" (see @ref AB_TRANSACTION_LIMITS_minLenBankReference) */ AQBANKING_API int AB_TransactionLimits_GetMinLenBankReference(const AB_TRANSACTION_LIMITS *p_struct); /** Getter. * Use this function to get the member "maxLenPurpose" (see @ref AB_TRANSACTION_LIMITS_maxLenPurpose) */ AQBANKING_API int AB_TransactionLimits_GetMaxLenPurpose(const AB_TRANSACTION_LIMITS *p_struct); /** Getter. * Use this function to get the member "minLenPurpose" (see @ref AB_TRANSACTION_LIMITS_minLenPurpose) */ AQBANKING_API int AB_TransactionLimits_GetMinLenPurpose(const AB_TRANSACTION_LIMITS *p_struct); /** Getter. * Use this function to get the member "maxLinesPurpose" (see @ref AB_TRANSACTION_LIMITS_maxLinesPurpose) */ AQBANKING_API int AB_TransactionLimits_GetMaxLinesPurpose(const AB_TRANSACTION_LIMITS *p_struct); /** Getter. * Use this function to get the member "minLinesPurpose" (see @ref AB_TRANSACTION_LIMITS_minLinesPurpose) */ AQBANKING_API int AB_TransactionLimits_GetMinLinesPurpose(const AB_TRANSACTION_LIMITS *p_struct); /** Getter. * Use this function to get the member "needDate" (see @ref AB_TRANSACTION_LIMITS_needDate) */ AQBANKING_API int AB_TransactionLimits_GetNeedDate(const AB_TRANSACTION_LIMITS *p_struct); /** Getter. * Use this function to get the member "minValueSetupTime" (see @ref AB_TRANSACTION_LIMITS_minValueSetupTime) */ AQBANKING_API int AB_TransactionLimits_GetMinValueSetupTime(const AB_TRANSACTION_LIMITS *p_struct); /** Getter. * Use this function to get the member "maxValueSetupTime" (see @ref AB_TRANSACTION_LIMITS_maxValueSetupTime) */ AQBANKING_API int AB_TransactionLimits_GetMaxValueSetupTime(const AB_TRANSACTION_LIMITS *p_struct); /** Getter. * Use this function to get the member "minValueSetupTimeFirst" (see @ref AB_TRANSACTION_LIMITS_minValueSetupTimeFirst) */ AQBANKING_API int AB_TransactionLimits_GetMinValueSetupTimeFirst(const AB_TRANSACTION_LIMITS *p_struct); /** Getter. * Use this function to get the member "maxValueSetupTimeFirst" (see @ref AB_TRANSACTION_LIMITS_maxValueSetupTimeFirst) */ AQBANKING_API int AB_TransactionLimits_GetMaxValueSetupTimeFirst(const AB_TRANSACTION_LIMITS *p_struct); /** Getter. * Use this function to get the member "minValueSetupTimeOnce" (see @ref AB_TRANSACTION_LIMITS_minValueSetupTimeOnce) */ AQBANKING_API int AB_TransactionLimits_GetMinValueSetupTimeOnce(const AB_TRANSACTION_LIMITS *p_struct); /** Getter. * Use this function to get the member "maxValueSetupTimeOnce" (see @ref AB_TRANSACTION_LIMITS_maxValueSetupTimeOnce) */ AQBANKING_API int AB_TransactionLimits_GetMaxValueSetupTimeOnce(const AB_TRANSACTION_LIMITS *p_struct); /** Getter. * Use this function to get the member "minValueSetupTimeRecurring" (see @ref AB_TRANSACTION_LIMITS_minValueSetupTimeRecurring) */ AQBANKING_API int AB_TransactionLimits_GetMinValueSetupTimeRecurring(const AB_TRANSACTION_LIMITS *p_struct); /** Getter. * Use this function to get the member "maxValueSetupTimeRecurring" (see @ref AB_TRANSACTION_LIMITS_maxValueSetupTimeRecurring) */ AQBANKING_API int AB_TransactionLimits_GetMaxValueSetupTimeRecurring(const AB_TRANSACTION_LIMITS *p_struct); /** Getter. * Use this function to get the member "minValueSetupTimeFinal" (see @ref AB_TRANSACTION_LIMITS_minValueSetupTimeFinal) */ AQBANKING_API int AB_TransactionLimits_GetMinValueSetupTimeFinal(const AB_TRANSACTION_LIMITS *p_struct); /** Getter. * Use this function to get the member "maxValueSetupTimeFinal" (see @ref AB_TRANSACTION_LIMITS_maxValueSetupTimeFinal) */ AQBANKING_API int AB_TransactionLimits_GetMaxValueSetupTimeFinal(const AB_TRANSACTION_LIMITS *p_struct); /** Getter. * Use this function to get the member "valuesCycleWeek" (see @ref AB_TRANSACTION_LIMITS_valuesCycleWeek) */ AQBANKING_API const uint8_t *AB_TransactionLimits_GetValuesCycleWeek(const AB_TRANSACTION_LIMITS *p_struct); /** Getter. * Use this function to get the member "valuesCycleWeekUsed" (see @ref AB_TRANSACTION_LIMITS_valuesCycleWeekUsed) */ AQBANKING_API int AB_TransactionLimits_GetValuesCycleWeekUsed(const AB_TRANSACTION_LIMITS *p_struct); /** Getter. * Use this function to get the member "valuesCycleMonth" (see @ref AB_TRANSACTION_LIMITS_valuesCycleMonth) */ AQBANKING_API const uint8_t *AB_TransactionLimits_GetValuesCycleMonth(const AB_TRANSACTION_LIMITS *p_struct); /** Getter. * Use this function to get the member "valuesCycleMonthUsed" (see @ref AB_TRANSACTION_LIMITS_valuesCycleMonthUsed) */ AQBANKING_API int AB_TransactionLimits_GetValuesCycleMonthUsed(const AB_TRANSACTION_LIMITS *p_struct); /** Getter. * Use this function to get the member "valuesExecutionDayWeek" (see @ref AB_TRANSACTION_LIMITS_valuesExecutionDayWeek) */ AQBANKING_API const uint8_t *AB_TransactionLimits_GetValuesExecutionDayWeek(const AB_TRANSACTION_LIMITS *p_struct); /** Getter. * Use this function to get the member "valuesExecutionDayWeekUsed" (see @ref AB_TRANSACTION_LIMITS_valuesExecutionDayWeekUsed) */ AQBANKING_API int AB_TransactionLimits_GetValuesExecutionDayWeekUsed(const AB_TRANSACTION_LIMITS *p_struct); /** Getter. * Use this function to get the member "valuesExecutionDayMonth" (see @ref AB_TRANSACTION_LIMITS_valuesExecutionDayMonth) */ AQBANKING_API const uint8_t *AB_TransactionLimits_GetValuesExecutionDayMonth(const AB_TRANSACTION_LIMITS *p_struct); /** Getter. * Use this function to get the member "valuesExecutionDayMonthUsed" (see @ref AB_TRANSACTION_LIMITS_valuesExecutionDayMonthUsed) */ AQBANKING_API int AB_TransactionLimits_GetValuesExecutionDayMonthUsed(const AB_TRANSACTION_LIMITS *p_struct); /** Getter. * Use this function to get the member "allowMonthly" (see @ref AB_TRANSACTION_LIMITS_allowMonthly) */ AQBANKING_API int AB_TransactionLimits_GetAllowMonthly(const AB_TRANSACTION_LIMITS *p_struct); /** Getter. * Use this function to get the member "allowWeekly" (see @ref AB_TRANSACTION_LIMITS_allowWeekly) */ AQBANKING_API int AB_TransactionLimits_GetAllowWeekly(const AB_TRANSACTION_LIMITS *p_struct); /** Getter. * Use this function to get the member "allowChangeRecipientAccount" (see @ref AB_TRANSACTION_LIMITS_allowChangeRecipientAccount) */ AQBANKING_API int AB_TransactionLimits_GetAllowChangeRecipientAccount(const AB_TRANSACTION_LIMITS *p_struct); /** Getter. * Use this function to get the member "allowChangeRecipientName" (see @ref AB_TRANSACTION_LIMITS_allowChangeRecipientName) */ AQBANKING_API int AB_TransactionLimits_GetAllowChangeRecipientName(const AB_TRANSACTION_LIMITS *p_struct); /** Getter. * Use this function to get the member "allowChangeValue" (see @ref AB_TRANSACTION_LIMITS_allowChangeValue) */ AQBANKING_API int AB_TransactionLimits_GetAllowChangeValue(const AB_TRANSACTION_LIMITS *p_struct); /** Getter. * Use this function to get the member "allowChangeTextKey" (see @ref AB_TRANSACTION_LIMITS_allowChangeTextKey) */ AQBANKING_API int AB_TransactionLimits_GetAllowChangeTextKey(const AB_TRANSACTION_LIMITS *p_struct); /** Getter. * Use this function to get the member "allowChangePurpose" (see @ref AB_TRANSACTION_LIMITS_allowChangePurpose) */ AQBANKING_API int AB_TransactionLimits_GetAllowChangePurpose(const AB_TRANSACTION_LIMITS *p_struct); /** Getter. * Use this function to get the member "allowChangeFirstExecutionDate" (see @ref AB_TRANSACTION_LIMITS_allowChangeFirstExecutionDate) */ AQBANKING_API int AB_TransactionLimits_GetAllowChangeFirstExecutionDate(const AB_TRANSACTION_LIMITS *p_struct); /** Getter. * Use this function to get the member "allowChangeLastExecutionDate" (see @ref AB_TRANSACTION_LIMITS_allowChangeLastExecutionDate) */ AQBANKING_API int AB_TransactionLimits_GetAllowChangeLastExecutionDate(const AB_TRANSACTION_LIMITS *p_struct); /** Getter. * Use this function to get the member "allowChangeCycle" (see @ref AB_TRANSACTION_LIMITS_allowChangeCycle) */ AQBANKING_API int AB_TransactionLimits_GetAllowChangeCycle(const AB_TRANSACTION_LIMITS *p_struct); /** Getter. * Use this function to get the member "allowChangePeriod" (see @ref AB_TRANSACTION_LIMITS_allowChangePeriod) */ AQBANKING_API int AB_TransactionLimits_GetAllowChangePeriod(const AB_TRANSACTION_LIMITS *p_struct); /** Getter. * Use this function to get the member "allowChangeExecutionDay" (see @ref AB_TRANSACTION_LIMITS_allowChangeExecutionDay) */ AQBANKING_API int AB_TransactionLimits_GetAllowChangeExecutionDay(const AB_TRANSACTION_LIMITS *p_struct); /** Setter. * Use this function to set the member "command" (see @ref AB_TRANSACTION_LIMITS_command) */ AQBANKING_API void AB_TransactionLimits_SetCommand(AB_TRANSACTION_LIMITS *p_struct, int p_src); /** Setter. * Use this function to set the member "maxLenLocalName" (see @ref AB_TRANSACTION_LIMITS_maxLenLocalName) */ AQBANKING_API void AB_TransactionLimits_SetMaxLenLocalName(AB_TRANSACTION_LIMITS *p_struct, int p_src); /** Setter. * Use this function to set the member "minLenLocalName" (see @ref AB_TRANSACTION_LIMITS_minLenLocalName) */ AQBANKING_API void AB_TransactionLimits_SetMinLenLocalName(AB_TRANSACTION_LIMITS *p_struct, int p_src); /** Setter. * Use this function to set the member "maxLenRemoteName" (see @ref AB_TRANSACTION_LIMITS_maxLenRemoteName) */ AQBANKING_API void AB_TransactionLimits_SetMaxLenRemoteName(AB_TRANSACTION_LIMITS *p_struct, int p_src); /** Setter. * Use this function to set the member "minLenRemoteName" (see @ref AB_TRANSACTION_LIMITS_minLenRemoteName) */ AQBANKING_API void AB_TransactionLimits_SetMinLenRemoteName(AB_TRANSACTION_LIMITS *p_struct, int p_src); /** Setter. * Use this function to set the member "maxLenCustomerReference" (see @ref AB_TRANSACTION_LIMITS_maxLenCustomerReference) */ AQBANKING_API void AB_TransactionLimits_SetMaxLenCustomerReference(AB_TRANSACTION_LIMITS *p_struct, int p_src); /** Setter. * Use this function to set the member "minLenCustomerReference" (see @ref AB_TRANSACTION_LIMITS_minLenCustomerReference) */ AQBANKING_API void AB_TransactionLimits_SetMinLenCustomerReference(AB_TRANSACTION_LIMITS *p_struct, int p_src); /** Setter. * Use this function to set the member "maxLenBankReference" (see @ref AB_TRANSACTION_LIMITS_maxLenBankReference) */ AQBANKING_API void AB_TransactionLimits_SetMaxLenBankReference(AB_TRANSACTION_LIMITS *p_struct, int p_src); /** Setter. * Use this function to set the member "minLenBankReference" (see @ref AB_TRANSACTION_LIMITS_minLenBankReference) */ AQBANKING_API void AB_TransactionLimits_SetMinLenBankReference(AB_TRANSACTION_LIMITS *p_struct, int p_src); /** Setter. * Use this function to set the member "maxLenPurpose" (see @ref AB_TRANSACTION_LIMITS_maxLenPurpose) */ AQBANKING_API void AB_TransactionLimits_SetMaxLenPurpose(AB_TRANSACTION_LIMITS *p_struct, int p_src); /** Setter. * Use this function to set the member "minLenPurpose" (see @ref AB_TRANSACTION_LIMITS_minLenPurpose) */ AQBANKING_API void AB_TransactionLimits_SetMinLenPurpose(AB_TRANSACTION_LIMITS *p_struct, int p_src); /** Setter. * Use this function to set the member "maxLinesPurpose" (see @ref AB_TRANSACTION_LIMITS_maxLinesPurpose) */ AQBANKING_API void AB_TransactionLimits_SetMaxLinesPurpose(AB_TRANSACTION_LIMITS *p_struct, int p_src); /** Setter. * Use this function to set the member "minLinesPurpose" (see @ref AB_TRANSACTION_LIMITS_minLinesPurpose) */ AQBANKING_API void AB_TransactionLimits_SetMinLinesPurpose(AB_TRANSACTION_LIMITS *p_struct, int p_src); /** Setter. * Use this function to set the member "needDate" (see @ref AB_TRANSACTION_LIMITS_needDate) */ AQBANKING_API void AB_TransactionLimits_SetNeedDate(AB_TRANSACTION_LIMITS *p_struct, int p_src); /** Setter. * Use this function to set the member "minValueSetupTime" (see @ref AB_TRANSACTION_LIMITS_minValueSetupTime) */ AQBANKING_API void AB_TransactionLimits_SetMinValueSetupTime(AB_TRANSACTION_LIMITS *p_struct, int p_src); /** Setter. * Use this function to set the member "maxValueSetupTime" (see @ref AB_TRANSACTION_LIMITS_maxValueSetupTime) */ AQBANKING_API void AB_TransactionLimits_SetMaxValueSetupTime(AB_TRANSACTION_LIMITS *p_struct, int p_src); /** Setter. * Use this function to set the member "minValueSetupTimeFirst" (see @ref AB_TRANSACTION_LIMITS_minValueSetupTimeFirst) */ AQBANKING_API void AB_TransactionLimits_SetMinValueSetupTimeFirst(AB_TRANSACTION_LIMITS *p_struct, int p_src); /** Setter. * Use this function to set the member "maxValueSetupTimeFirst" (see @ref AB_TRANSACTION_LIMITS_maxValueSetupTimeFirst) */ AQBANKING_API void AB_TransactionLimits_SetMaxValueSetupTimeFirst(AB_TRANSACTION_LIMITS *p_struct, int p_src); /** Setter. * Use this function to set the member "minValueSetupTimeOnce" (see @ref AB_TRANSACTION_LIMITS_minValueSetupTimeOnce) */ AQBANKING_API void AB_TransactionLimits_SetMinValueSetupTimeOnce(AB_TRANSACTION_LIMITS *p_struct, int p_src); /** Setter. * Use this function to set the member "maxValueSetupTimeOnce" (see @ref AB_TRANSACTION_LIMITS_maxValueSetupTimeOnce) */ AQBANKING_API void AB_TransactionLimits_SetMaxValueSetupTimeOnce(AB_TRANSACTION_LIMITS *p_struct, int p_src); /** Setter. * Use this function to set the member "minValueSetupTimeRecurring" (see @ref AB_TRANSACTION_LIMITS_minValueSetupTimeRecurring) */ AQBANKING_API void AB_TransactionLimits_SetMinValueSetupTimeRecurring(AB_TRANSACTION_LIMITS *p_struct, int p_src); /** Setter. * Use this function to set the member "maxValueSetupTimeRecurring" (see @ref AB_TRANSACTION_LIMITS_maxValueSetupTimeRecurring) */ AQBANKING_API void AB_TransactionLimits_SetMaxValueSetupTimeRecurring(AB_TRANSACTION_LIMITS *p_struct, int p_src); /** Setter. * Use this function to set the member "minValueSetupTimeFinal" (see @ref AB_TRANSACTION_LIMITS_minValueSetupTimeFinal) */ AQBANKING_API void AB_TransactionLimits_SetMinValueSetupTimeFinal(AB_TRANSACTION_LIMITS *p_struct, int p_src); /** Setter. * Use this function to set the member "maxValueSetupTimeFinal" (see @ref AB_TRANSACTION_LIMITS_maxValueSetupTimeFinal) */ AQBANKING_API void AB_TransactionLimits_SetMaxValueSetupTimeFinal(AB_TRANSACTION_LIMITS *p_struct, int p_src); /** Setter. * Use this function to set the member "valuesCycleWeekUsed" (see @ref AB_TRANSACTION_LIMITS_valuesCycleWeekUsed) */ AQBANKING_API void AB_TransactionLimits_SetValuesCycleWeekUsed(AB_TRANSACTION_LIMITS *p_struct, int p_src); /** Setter. * Use this function to set the member "valuesCycleMonthUsed" (see @ref AB_TRANSACTION_LIMITS_valuesCycleMonthUsed) */ AQBANKING_API void AB_TransactionLimits_SetValuesCycleMonthUsed(AB_TRANSACTION_LIMITS *p_struct, int p_src); /** Setter. * Use this function to set the member "valuesExecutionDayWeekUsed" (see @ref AB_TRANSACTION_LIMITS_valuesExecutionDayWeekUsed) */ AQBANKING_API void AB_TransactionLimits_SetValuesExecutionDayWeekUsed(AB_TRANSACTION_LIMITS *p_struct, int p_src); /** Setter. * Use this function to set the member "valuesExecutionDayMonthUsed" (see @ref AB_TRANSACTION_LIMITS_valuesExecutionDayMonthUsed) */ AQBANKING_API void AB_TransactionLimits_SetValuesExecutionDayMonthUsed(AB_TRANSACTION_LIMITS *p_struct, int p_src); /** Setter. * Use this function to set the member "allowMonthly" (see @ref AB_TRANSACTION_LIMITS_allowMonthly) */ AQBANKING_API void AB_TransactionLimits_SetAllowMonthly(AB_TRANSACTION_LIMITS *p_struct, int p_src); /** Setter. * Use this function to set the member "allowWeekly" (see @ref AB_TRANSACTION_LIMITS_allowWeekly) */ AQBANKING_API void AB_TransactionLimits_SetAllowWeekly(AB_TRANSACTION_LIMITS *p_struct, int p_src); /** Setter. * Use this function to set the member "allowChangeRecipientAccount" (see @ref AB_TRANSACTION_LIMITS_allowChangeRecipientAccount) */ AQBANKING_API void AB_TransactionLimits_SetAllowChangeRecipientAccount(AB_TRANSACTION_LIMITS *p_struct, int p_src); /** Setter. * Use this function to set the member "allowChangeRecipientName" (see @ref AB_TRANSACTION_LIMITS_allowChangeRecipientName) */ AQBANKING_API void AB_TransactionLimits_SetAllowChangeRecipientName(AB_TRANSACTION_LIMITS *p_struct, int p_src); /** Setter. * Use this function to set the member "allowChangeValue" (see @ref AB_TRANSACTION_LIMITS_allowChangeValue) */ AQBANKING_API void AB_TransactionLimits_SetAllowChangeValue(AB_TRANSACTION_LIMITS *p_struct, int p_src); /** Setter. * Use this function to set the member "allowChangeTextKey" (see @ref AB_TRANSACTION_LIMITS_allowChangeTextKey) */ AQBANKING_API void AB_TransactionLimits_SetAllowChangeTextKey(AB_TRANSACTION_LIMITS *p_struct, int p_src); /** Setter. * Use this function to set the member "allowChangePurpose" (see @ref AB_TRANSACTION_LIMITS_allowChangePurpose) */ AQBANKING_API void AB_TransactionLimits_SetAllowChangePurpose(AB_TRANSACTION_LIMITS *p_struct, int p_src); /** Setter. * Use this function to set the member "allowChangeFirstExecutionDate" (see @ref AB_TRANSACTION_LIMITS_allowChangeFirstExecutionDate) */ AQBANKING_API void AB_TransactionLimits_SetAllowChangeFirstExecutionDate(AB_TRANSACTION_LIMITS *p_struct, int p_src); /** Setter. * Use this function to set the member "allowChangeLastExecutionDate" (see @ref AB_TRANSACTION_LIMITS_allowChangeLastExecutionDate) */ AQBANKING_API void AB_TransactionLimits_SetAllowChangeLastExecutionDate(AB_TRANSACTION_LIMITS *p_struct, int p_src); /** Setter. * Use this function to set the member "allowChangeCycle" (see @ref AB_TRANSACTION_LIMITS_allowChangeCycle) */ AQBANKING_API void AB_TransactionLimits_SetAllowChangeCycle(AB_TRANSACTION_LIMITS *p_struct, int p_src); /** Setter. * Use this function to set the member "allowChangePeriod" (see @ref AB_TRANSACTION_LIMITS_allowChangePeriod) */ AQBANKING_API void AB_TransactionLimits_SetAllowChangePeriod(AB_TRANSACTION_LIMITS *p_struct, int p_src); /** Setter. * Use this function to set the member "allowChangeExecutionDay" (see @ref AB_TRANSACTION_LIMITS_allowChangeExecutionDay) */ AQBANKING_API void AB_TransactionLimits_SetAllowChangeExecutionDay(AB_TRANSACTION_LIMITS *p_struct, int p_src); AQBANKING_API AB_TRANSACTION_LIMITS_LIST *AB_TransactionLimits_List_dup(const AB_TRANSACTION_LIMITS_LIST *p_src); AQBANKING_API void AB_TransactionLimits_ReadDb(AB_TRANSACTION_LIMITS *p_struct, GWEN_DB_NODE *p_db); AQBANKING_API int AB_TransactionLimits_WriteDb(const AB_TRANSACTION_LIMITS *p_struct, GWEN_DB_NODE *p_db); AQBANKING_API AB_TRANSACTION_LIMITS *AB_TransactionLimits_fromDb(GWEN_DB_NODE *p_db); AQBANKING_API int AB_TransactionLimits_toDb(const AB_TRANSACTION_LIMITS *p_struct, GWEN_DB_NODE *p_db); AQBANKING_API void AB_TransactionLimits_ReadXml(AB_TRANSACTION_LIMITS *p_struct, GWEN_XMLNODE *p_db); AQBANKING_API void AB_TransactionLimits_WriteXml(const AB_TRANSACTION_LIMITS *p_struct, GWEN_XMLNODE *p_db); AQBANKING_API void AB_TransactionLimits_toXml(const AB_TRANSACTION_LIMITS *p_struct, GWEN_XMLNODE *p_db); AQBANKING_API AB_TRANSACTION_LIMITS *AB_TransactionLimits_fromXml(GWEN_XMLNODE *p_db); AQBANKING_API AB_TRANSACTION_LIMITS *AB_TransactionLimits_List_GetByCommand(const AB_TRANSACTION_LIMITS_LIST *p_list, int p_cmp); AQBANKING_API uint8_t AB_TransactionLimits_GetValuesCycleWeekAt(const AB_TRANSACTION_LIMITS *p_struct, int idx); AQBANKING_API int AB_TransactionLimits_SetValuesCycleWeekAt(AB_TRANSACTION_LIMITS *p_struct, int idx, uint8_t v); AQBANKING_API void AB_TransactionLimits_PresetValuesCycleWeek(AB_TRANSACTION_LIMITS *p_struct, uint8_t v); AQBANKING_API int AB_TransactionLimits_GetValuesCycleWeekArraySize(void); AQBANKING_API uint8_t AB_TransactionLimits_GetValuesCycleMonthAt(const AB_TRANSACTION_LIMITS *p_struct, int idx); AQBANKING_API int AB_TransactionLimits_SetValuesCycleMonthAt(AB_TRANSACTION_LIMITS *p_struct, int idx, uint8_t v); AQBANKING_API void AB_TransactionLimits_PresetValuesCycleMonth(AB_TRANSACTION_LIMITS *p_struct, uint8_t v); AQBANKING_API int AB_TransactionLimits_GetValuesCycleMonthArraySize(void); AQBANKING_API uint8_t AB_TransactionLimits_GetValuesExecutionDayWeekAt(const AB_TRANSACTION_LIMITS *p_struct, int idx); AQBANKING_API int AB_TransactionLimits_SetValuesExecutionDayWeekAt(AB_TRANSACTION_LIMITS *p_struct, int idx, uint8_t v); AQBANKING_API void AB_TransactionLimits_PresetValuesExecutionDayWeek(AB_TRANSACTION_LIMITS *p_struct, uint8_t v); AQBANKING_API int AB_TransactionLimits_GetValuesExecutionDayWeekArraySize(void); AQBANKING_API uint8_t AB_TransactionLimits_GetValuesExecutionDayMonthAt(const AB_TRANSACTION_LIMITS *p_struct, int idx); AQBANKING_API int AB_TransactionLimits_SetValuesExecutionDayMonthAt(AB_TRANSACTION_LIMITS *p_struct, int idx, uint8_t v); AQBANKING_API void AB_TransactionLimits_PresetValuesExecutionDayMonth(AB_TRANSACTION_LIMITS *p_struct, uint8_t v); AQBANKING_API int AB_TransactionLimits_GetValuesExecutionDayMonthArraySize(void); AQBANKING_API int AB_TransactionLimits_ValuesCycleWeekAdd(AB_TRANSACTION_LIMITS *t, uint8_t v); AQBANKING_API int AB_TransactionLimits_ValuesCycleWeekHas(const AB_TRANSACTION_LIMITS *t, uint8_t v); AQBANKING_API int AB_TransactionLimits_ValuesCycleMonthAdd(AB_TRANSACTION_LIMITS *t, uint8_t v); AQBANKING_API int AB_TransactionLimits_ValuesCycleMonthHas(const AB_TRANSACTION_LIMITS *t, uint8_t v); AQBANKING_API int AB_TransactionLimits_ValuesExecutionDayWeekAdd(AB_TRANSACTION_LIMITS *t, uint8_t v); AQBANKING_API int AB_TransactionLimits_ValuesExecutionDayWeekHas(const AB_TRANSACTION_LIMITS *t, uint8_t v); AQBANKING_API int AB_TransactionLimits_ValuesExecutionDayMonthAdd(AB_TRANSACTION_LIMITS *t, uint8_t v); AQBANKING_API int AB_TransactionLimits_ValuesExecutionDayMonthHas(const AB_TRANSACTION_LIMITS *t, uint8_t v); #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/aqbanking/types/message.xml0000664000175000017500000000771214043610744017401 00000000000000 AB_MESSAGE AB_Message message with_db with_xml with_list1 with_list2 with_refcount with_hash
aqbanking/error.h
gwenhywfar/types.h
gwenhywfar/gwentime.h
with_list2 with_list2 $(api) int $(struct_prefix)_List2_freeAll($(struct_type)_LIST2 *tl); with_list2 with_list2 static $(struct_type) *$(struct_prefix)_List2__freeAll_cb($(struct_type) *t, void *user_data) { $(struct_prefix)_free(t); return NULL; } int $(struct_prefix)_List2_freeAll($(struct_type)_LIST2 *tl) { if (tl) { $(struct_prefix)_List2_ForEach(tl, $(struct_prefix)_List2__freeAll_cb, NULL); $(struct_prefix)_List2_free(tl); } else { DBG_ERROR(AQBANKING_LOGDOMAIN, "List missing"); return GWEN_ERROR_INVALID; } return 0; }
AB_Message_SourceUnknown AB_Message_SourceUnknown public enum with_hash none none ID of the user in whose context the message has been received (see @ref AB_User_GetUniqueId). 0 0 public with_hash ID of the account in whose context the message has been received (if any). This field is not set by AqHBCI but may be used by other backends in some cases. 0 0 public with_hash public own with_hash const dup const public own with_hash const dup const AQDB_DataType_String public own with_hash const dup const NULL NULL
aqbanking-6.6.1/src/libs/aqbanking/types/ab_bankinfo_service_list2.tm20000664000175000017500000000037715037736054022754 00000000000000 AB_BANKINFO_SERVICE_LIST2 AB_BankInfoService_List2 aqbanking-6.6.1/src/libs/aqbanking/types/message_p.h0000664000175000017500000000126015037736054017346 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "message.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef AB_MESSAGE_MESSAGE_P_H #define AB_MESSAGE_MESSAGE_P_H #include "./message.h" #ifdef __cplusplus extern "C" { #endif struct AB_MESSAGE { GWEN_LIST_ELEMENT(AB_MESSAGE) int _refCount; AB_MESSAGE_SOURCE source; uint32_t userId; uint32_t accountId; char *subject; char *text; GWEN_TIME *dateReceived; }; #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/aqbanking/types/security.h0000664000175000017500000001444315037736054017261 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "security.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef AB_SECURITY_SECURITY_H #define AB_SECURITY_SECURITY_H #ifdef __cplusplus extern "C" { #endif /** @page P_AB_SECURITY Structure AB_SECURITY

This page describes the properties of AB_SECURITY.

AB_SECURITY

@anchor AB_SECURITY_name

name

Full name of the security.

Set this property with @ref AB_Security_SetName(), get it with @ref AB_Security_GetName().

@anchor AB_SECURITY_uniqueId

uniqueId

Unique id of the security within the namespace.

Set this property with @ref AB_Security_SetUniqueId(), get it with @ref AB_Security_GetUniqueId().

@anchor AB_SECURITY_nameSpace

nameSpace

Namespace for uniqueId (e.g. CUSIP for North America)

Set this property with @ref AB_Security_SetNameSpace(), get it with @ref AB_Security_GetNameSpace().

@anchor AB_SECURITY_tickerSymbol

tickerSymbol

Ticker symbol of the security.

Set this property with @ref AB_Security_SetTickerSymbol(), get it with @ref AB_Security_GetTickerSymbol().

@anchor AB_SECURITY_units

units

Number of units held (e.g. number of stock units etc)

Set this property with @ref AB_Security_SetUnits(), get it with @ref AB_Security_GetUnits().

@anchor AB_SECURITY_unitPriceValue

unitPriceValue

Price of a unit as of unitPriceDate.

Set this property with @ref AB_Security_SetUnitPriceValue(), get it with @ref AB_Security_GetUnitPriceValue().

@anchor AB_SECURITY_unitPriceDate

unitPriceDate

Date for the unitPriceValue

Set this property with @ref AB_Security_SetUnitPriceDate(), get it with @ref AB_Security_GetUnitPriceDate().

*/ /* needed system headers */ #include #include #include #include #include /* pre-headers */ #include #include #include typedef struct AB_SECURITY AB_SECURITY; GWEN_LIST_FUNCTION_LIB_DEFS(AB_SECURITY, AB_Security, AQBANKING_API) GWEN_LIST2_FUNCTION_LIB_DEFS(AB_SECURITY, AB_Security, AQBANKING_API) /* post-headers */ #include /** Constructor. */ AQBANKING_API AB_SECURITY *AB_Security_new(void); /** Destructor. */ AQBANKING_API void AB_Security_free(AB_SECURITY *p_struct); AQBANKING_API void AB_Security_Attach(AB_SECURITY *p_struct); AQBANKING_API AB_SECURITY *AB_Security_dup(const AB_SECURITY *p_src); AQBANKING_API AB_SECURITY *AB_Security_copy(AB_SECURITY *p_struct, const AB_SECURITY *p_src); /** Getter. * Use this function to get the member "name" (see @ref AB_SECURITY_name) */ AQBANKING_API const char *AB_Security_GetName(const AB_SECURITY *p_struct); /** Getter. * Use this function to get the member "uniqueId" (see @ref AB_SECURITY_uniqueId) */ AQBANKING_API const char *AB_Security_GetUniqueId(const AB_SECURITY *p_struct); /** Getter. * Use this function to get the member "nameSpace" (see @ref AB_SECURITY_nameSpace) */ AQBANKING_API const char *AB_Security_GetNameSpace(const AB_SECURITY *p_struct); /** Getter. * Use this function to get the member "tickerSymbol" (see @ref AB_SECURITY_tickerSymbol) */ AQBANKING_API const char *AB_Security_GetTickerSymbol(const AB_SECURITY *p_struct); /** Getter. * Use this function to get the member "units" (see @ref AB_SECURITY_units) */ AQBANKING_API const AB_VALUE *AB_Security_GetUnits(const AB_SECURITY *p_struct); /** Getter. * Use this function to get the member "unitPriceValue" (see @ref AB_SECURITY_unitPriceValue) */ AQBANKING_API const AB_VALUE *AB_Security_GetUnitPriceValue(const AB_SECURITY *p_struct); /** Getter. * Use this function to get the member "unitPriceDate" (see @ref AB_SECURITY_unitPriceDate) */ AQBANKING_API const GWEN_TIME *AB_Security_GetUnitPriceDate(const AB_SECURITY *p_struct); /** Setter. * Use this function to set the member "name" (see @ref AB_SECURITY_name) */ AQBANKING_API void AB_Security_SetName(AB_SECURITY *p_struct, const char *p_src); /** Setter. * Use this function to set the member "uniqueId" (see @ref AB_SECURITY_uniqueId) */ AQBANKING_API void AB_Security_SetUniqueId(AB_SECURITY *p_struct, const char *p_src); /** Setter. * Use this function to set the member "nameSpace" (see @ref AB_SECURITY_nameSpace) */ AQBANKING_API void AB_Security_SetNameSpace(AB_SECURITY *p_struct, const char *p_src); /** Setter. * Use this function to set the member "tickerSymbol" (see @ref AB_SECURITY_tickerSymbol) */ AQBANKING_API void AB_Security_SetTickerSymbol(AB_SECURITY *p_struct, const char *p_src); /** Setter. * Use this function to set the member "units" (see @ref AB_SECURITY_units) */ AQBANKING_API void AB_Security_SetUnits(AB_SECURITY *p_struct, const AB_VALUE *p_src); /** Setter. * Use this function to set the member "unitPriceValue" (see @ref AB_SECURITY_unitPriceValue) */ AQBANKING_API void AB_Security_SetUnitPriceValue(AB_SECURITY *p_struct, const AB_VALUE *p_src); /** Setter. * Use this function to set the member "unitPriceDate" (see @ref AB_SECURITY_unitPriceDate) */ AQBANKING_API void AB_Security_SetUnitPriceDate(AB_SECURITY *p_struct, const GWEN_TIME *p_src); AQBANKING_API AB_SECURITY_LIST *AB_Security_List_dup(const AB_SECURITY_LIST *p_src); AQBANKING_API void AB_Security_ReadDb(AB_SECURITY *p_struct, GWEN_DB_NODE *p_db); AQBANKING_API int AB_Security_WriteDb(const AB_SECURITY *p_struct, GWEN_DB_NODE *p_db); AQBANKING_API AB_SECURITY *AB_Security_fromDb(GWEN_DB_NODE *p_db); AQBANKING_API int AB_Security_toDb(const AB_SECURITY *p_struct, GWEN_DB_NODE *p_db); AQBANKING_API void AB_Security_ReadXml(AB_SECURITY *p_struct, GWEN_XMLNODE *p_db); AQBANKING_API void AB_Security_WriteXml(const AB_SECURITY *p_struct, GWEN_XMLNODE *p_db); AQBANKING_API void AB_Security_toXml(const AB_SECURITY *p_struct, GWEN_XMLNODE *p_db); AQBANKING_API AB_SECURITY *AB_Security_fromXml(GWEN_XMLNODE *p_db); AQBANKING_API void AB_Security_toHashString(const AB_SECURITY *p_struct, GWEN_BUFFER *p_buffer); AQBANKING_API int AB_Security_List2_freeAll(AB_SECURITY_LIST2 *tl); #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/aqbanking/types/imexporter_context.c0000664000175000017500000004764515037736054021361 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "imexporter_context.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "./imexporter_context_p.h" #include #include /* code headers */ /* macro functions */ GWEN_LIST_FUNCTIONS(AB_IMEXPORTER_CONTEXT, AB_ImExporterContext) GWEN_LIST2_FUNCTIONS(AB_IMEXPORTER_CONTEXT, AB_ImExporterContext) AB_IMEXPORTER_CONTEXT *AB_ImExporterContext_new(void) { AB_IMEXPORTER_CONTEXT *p_struct; GWEN_NEW_OBJECT(AB_IMEXPORTER_CONTEXT, p_struct) p_struct->_refCount=1; GWEN_LIST_INIT(AB_IMEXPORTER_CONTEXT, p_struct) /* members */ p_struct->accountInfoList=AB_ImExporterAccountInfo_List_new(); p_struct->securityList=AB_Security_List_new(); p_struct->messageList=AB_Message_List_new(); /* virtual functions */ return p_struct; } void AB_ImExporterContext_free(AB_IMEXPORTER_CONTEXT *p_struct) { if (p_struct) { assert(p_struct->_refCount); if (p_struct->_refCount==1) { GWEN_LIST_FINI(AB_IMEXPORTER_CONTEXT, p_struct) /* members */ AB_ImExporterAccountInfo_List_free(p_struct->accountInfoList); p_struct->accountInfoList=NULL; AB_Security_List_free(p_struct->securityList); p_struct->securityList=NULL; AB_Message_List_free(p_struct->messageList); p_struct->messageList=NULL; p_struct->_refCount=0; GWEN_FREE_OBJECT(p_struct); } else p_struct->_refCount--; } } void AB_ImExporterContext_Attach(AB_IMEXPORTER_CONTEXT *p_struct) { assert(p_struct); assert(p_struct->_refCount); p_struct->_refCount++; } AB_IMEXPORTER_CONTEXT *AB_ImExporterContext_dup(const AB_IMEXPORTER_CONTEXT *p_src) { AB_IMEXPORTER_CONTEXT *p_struct; assert(p_src); p_struct=AB_ImExporterContext_new(); /* member "accountInfoList" */ if (p_struct->accountInfoList) { AB_ImExporterAccountInfo_List_free(p_struct->accountInfoList); p_struct->accountInfoList=NULL; p_struct->accountInfoList=NULL; } if (p_src->accountInfoList) { p_struct->accountInfoList=AB_ImExporterAccountInfo_List_dup(p_src->accountInfoList); } /* member "securityList" */ if (p_struct->securityList) { AB_Security_List_free(p_struct->securityList); p_struct->securityList=NULL; p_struct->securityList=NULL; } if (p_src->securityList) { p_struct->securityList=AB_Security_List_dup(p_src->securityList); } /* member "messageList" */ if (p_struct->messageList) { AB_Message_List_free(p_struct->messageList); p_struct->messageList=NULL; p_struct->messageList=NULL; } if (p_src->messageList) { p_struct->messageList=AB_Message_List_dup(p_src->messageList); } return p_struct; } AB_IMEXPORTER_CONTEXT *AB_ImExporterContext_copy(AB_IMEXPORTER_CONTEXT *p_struct, const AB_IMEXPORTER_CONTEXT *p_src) { assert(p_struct); assert(p_src); /* member "accountInfoList" */ if (p_struct->accountInfoList) { AB_ImExporterAccountInfo_List_free(p_struct->accountInfoList); p_struct->accountInfoList=NULL; p_struct->accountInfoList=NULL; } if (p_src->accountInfoList) { p_struct->accountInfoList=AB_ImExporterAccountInfo_List_dup(p_src->accountInfoList); } /* member "securityList" */ if (p_struct->securityList) { AB_Security_List_free(p_struct->securityList); p_struct->securityList=NULL; p_struct->securityList=NULL; } if (p_src->securityList) { p_struct->securityList=AB_Security_List_dup(p_src->securityList); } /* member "messageList" */ if (p_struct->messageList) { AB_Message_List_free(p_struct->messageList); p_struct->messageList=NULL; p_struct->messageList=NULL; } if (p_src->messageList) { p_struct->messageList=AB_Message_List_dup(p_src->messageList); } return p_struct; } AB_IMEXPORTER_ACCOUNTINFO_LIST *AB_ImExporterContext_GetAccountInfoList(const AB_IMEXPORTER_CONTEXT *p_struct){ assert(p_struct); return p_struct->accountInfoList; } AB_SECURITY_LIST *AB_ImExporterContext_GetSecurityList(const AB_IMEXPORTER_CONTEXT *p_struct){ assert(p_struct); return p_struct->securityList; } AB_MESSAGE_LIST *AB_ImExporterContext_GetMessageList(const AB_IMEXPORTER_CONTEXT *p_struct){ assert(p_struct); return p_struct->messageList; } void AB_ImExporterContext_SetAccountInfoList(AB_IMEXPORTER_CONTEXT *p_struct, AB_IMEXPORTER_ACCOUNTINFO_LIST *p_src){ assert(p_struct); if (p_struct->accountInfoList) { AB_ImExporterAccountInfo_List_free(p_struct->accountInfoList); p_struct->accountInfoList=NULL; p_struct->accountInfoList=NULL; } p_struct->accountInfoList=p_src; } void AB_ImExporterContext_SetSecurityList(AB_IMEXPORTER_CONTEXT *p_struct, AB_SECURITY_LIST *p_src){ assert(p_struct); if (p_struct->securityList) { AB_Security_List_free(p_struct->securityList); p_struct->securityList=NULL; p_struct->securityList=NULL; } p_struct->securityList=p_src; } void AB_ImExporterContext_SetMessageList(AB_IMEXPORTER_CONTEXT *p_struct, AB_MESSAGE_LIST *p_src){ assert(p_struct); if (p_struct->messageList) { AB_Message_List_free(p_struct->messageList); p_struct->messageList=NULL; p_struct->messageList=NULL; } p_struct->messageList=p_src; } AB_IMEXPORTER_CONTEXT_LIST *AB_ImExporterContext_List_dup(const AB_IMEXPORTER_CONTEXT_LIST *p_src) { AB_IMEXPORTER_CONTEXT_LIST *p_dest; AB_IMEXPORTER_CONTEXT *p_elem; assert(p_src); p_dest=AB_ImExporterContext_List_new(); p_elem=AB_ImExporterContext_List_First(p_src); while(p_elem) { AB_IMEXPORTER_CONTEXT *p_cpy; p_cpy=AB_ImExporterContext_dup(p_elem); AB_ImExporterContext_List_Add(p_cpy, p_dest); p_elem=AB_ImExporterContext_List_Next(p_elem); } return p_dest; } void AB_ImExporterContext_ReadDb(AB_IMEXPORTER_CONTEXT *p_struct, GWEN_DB_NODE *p_db){ assert(p_struct); /* member "accountInfoList" */ if (p_struct->accountInfoList) { AB_ImExporterAccountInfo_List_free(p_struct->accountInfoList); p_struct->accountInfoList=NULL; p_struct->accountInfoList=NULL; } { GWEN_DB_NODE *dbSource; dbSource=GWEN_DB_GetGroup(p_db, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "accountInfoList"); if (dbSource) { AB_IMEXPORTER_ACCOUNTINFO_LIST *t; GWEN_DB_NODE *dbT; t=AB_ImExporterAccountInfo_List_new(); dbT=GWEN_DB_FindFirstGroup(dbSource, "accountInfo"); while(dbT) { AB_IMEXPORTER_ACCOUNTINFO *elem; elem=AB_ImExporterAccountInfo_fromDb(dbT); if (elem) AB_ImExporterAccountInfo_List_Add(elem, t); dbT=GWEN_DB_FindNextGroup(dbT, "accountInfo"); } p_struct->accountInfoList=t; } else p_struct->accountInfoList=AB_ImExporterAccountInfo_List_new(); } /* member "securityList" */ if (p_struct->securityList) { AB_Security_List_free(p_struct->securityList); p_struct->securityList=NULL; p_struct->securityList=NULL; } { GWEN_DB_NODE *dbSource; dbSource=GWEN_DB_GetGroup(p_db, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "securityList"); if (dbSource) { AB_SECURITY_LIST *t; GWEN_DB_NODE *dbT; t=AB_Security_List_new(); dbT=GWEN_DB_FindFirstGroup(dbSource, "security"); while(dbT) { AB_SECURITY *elem; elem=AB_Security_fromDb(dbT); if (elem) AB_Security_List_Add(elem, t); dbT=GWEN_DB_FindNextGroup(dbT, "security"); } p_struct->securityList=t; } else p_struct->securityList=AB_Security_List_new(); } /* member "messageList" */ if (p_struct->messageList) { AB_Message_List_free(p_struct->messageList); p_struct->messageList=NULL; p_struct->messageList=NULL; } { GWEN_DB_NODE *dbSource; dbSource=GWEN_DB_GetGroup(p_db, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "messageList"); if (dbSource) { AB_MESSAGE_LIST *t; GWEN_DB_NODE *dbT; t=AB_Message_List_new(); dbT=GWEN_DB_FindFirstGroup(dbSource, "message"); while(dbT) { AB_MESSAGE *elem; elem=AB_Message_fromDb(dbT); if (elem) AB_Message_List_Add(elem, t); dbT=GWEN_DB_FindNextGroup(dbT, "message"); } p_struct->messageList=t; } else p_struct->messageList=AB_Message_List_new(); } } int AB_ImExporterContext_WriteDb(const AB_IMEXPORTER_CONTEXT *p_struct, GWEN_DB_NODE *p_db) { int p_rv; assert(p_struct); /* member "accountInfoList" */ { if (p_struct->accountInfoList) { GWEN_DB_NODE *dbDest; AB_IMEXPORTER_ACCOUNTINFO *elem; dbDest=GWEN_DB_GetGroup(p_db, GWEN_DB_FLAGS_OVERWRITE_GROUPS, "accountInfoList"); assert(dbDest); p_rv=0; elem=AB_ImExporterAccountInfo_List_First(p_struct->accountInfoList); while(elem) { GWEN_DB_NODE *dbElem; dbElem=GWEN_DB_GetGroup(dbDest, GWEN_PATH_FLAGS_CREATE_GROUP, "accountInfo"); assert(dbElem); p_rv=AB_ImExporterAccountInfo_toDb(elem, dbElem); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", p_rv); break; } elem=AB_ImExporterAccountInfo_List_Next(elem); } } else p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "securityList" */ { if (p_struct->securityList) { GWEN_DB_NODE *dbDest; AB_SECURITY *elem; dbDest=GWEN_DB_GetGroup(p_db, GWEN_DB_FLAGS_OVERWRITE_GROUPS, "securityList"); assert(dbDest); p_rv=0; elem=AB_Security_List_First(p_struct->securityList); while(elem) { GWEN_DB_NODE *dbElem; dbElem=GWEN_DB_GetGroup(dbDest, GWEN_PATH_FLAGS_CREATE_GROUP, "security"); assert(dbElem); p_rv=AB_Security_toDb(elem, dbElem); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", p_rv); break; } elem=AB_Security_List_Next(elem); } } else p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "messageList" */ { if (p_struct->messageList) { GWEN_DB_NODE *dbDest; AB_MESSAGE *elem; dbDest=GWEN_DB_GetGroup(p_db, GWEN_DB_FLAGS_OVERWRITE_GROUPS, "messageList"); assert(dbDest); p_rv=0; elem=AB_Message_List_First(p_struct->messageList); while(elem) { GWEN_DB_NODE *dbElem; dbElem=GWEN_DB_GetGroup(dbDest, GWEN_PATH_FLAGS_CREATE_GROUP, "message"); assert(dbElem); p_rv=AB_Message_toDb(elem, dbElem); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", p_rv); break; } elem=AB_Message_List_Next(elem); } } else p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } return 0; } AB_IMEXPORTER_CONTEXT *AB_ImExporterContext_fromDb(GWEN_DB_NODE *p_db) { AB_IMEXPORTER_CONTEXT *p_struct; p_struct=AB_ImExporterContext_new(); AB_ImExporterContext_ReadDb(p_struct, p_db); return p_struct; } int AB_ImExporterContext_toDb(const AB_IMEXPORTER_CONTEXT *p_struct, GWEN_DB_NODE *p_db) { return AB_ImExporterContext_WriteDb(p_struct, p_db); } void AB_ImExporterContext_ReadXml(AB_IMEXPORTER_CONTEXT *p_struct, GWEN_XMLNODE *p_db){ assert(p_struct); /* member "accountInfoList" */ if (p_struct->accountInfoList) { AB_ImExporterAccountInfo_List_free(p_struct->accountInfoList); p_struct->accountInfoList=NULL; p_struct->accountInfoList=NULL; } { GWEN_XMLNODE *dbSource; dbSource=GWEN_XMLNode_FindFirstTag(p_db, "accountInfoList", NULL, NULL); if (dbSource) { AB_IMEXPORTER_ACCOUNTINFO_LIST *t; GWEN_XMLNODE *dbT; t=AB_ImExporterAccountInfo_List_new(); dbT=GWEN_XMLNode_FindFirstTag(dbSource, "accountInfo", NULL, NULL); while(dbT) { AB_IMEXPORTER_ACCOUNTINFO *elem; elem=AB_ImExporterAccountInfo_fromXml(dbT); if (elem) AB_ImExporterAccountInfo_List_Add(elem, t); dbT=GWEN_XMLNode_FindNextTag(dbT, "accountInfo", NULL, NULL); } p_struct->accountInfoList=t; } else p_struct->accountInfoList=AB_ImExporterAccountInfo_List_new(); } /* member "securityList" */ if (p_struct->securityList) { AB_Security_List_free(p_struct->securityList); p_struct->securityList=NULL; p_struct->securityList=NULL; } { GWEN_XMLNODE *dbSource; dbSource=GWEN_XMLNode_FindFirstTag(p_db, "securityList", NULL, NULL); if (dbSource) { AB_SECURITY_LIST *t; GWEN_XMLNODE *dbT; t=AB_Security_List_new(); dbT=GWEN_XMLNode_FindFirstTag(dbSource, "security", NULL, NULL); while(dbT) { AB_SECURITY *elem; elem=AB_Security_fromXml(dbT); if (elem) AB_Security_List_Add(elem, t); dbT=GWEN_XMLNode_FindNextTag(dbT, "security", NULL, NULL); } p_struct->securityList=t; } else p_struct->securityList=AB_Security_List_new(); } /* member "messageList" */ if (p_struct->messageList) { AB_Message_List_free(p_struct->messageList); p_struct->messageList=NULL; p_struct->messageList=NULL; } { GWEN_XMLNODE *dbSource; dbSource=GWEN_XMLNode_FindFirstTag(p_db, "messageList", NULL, NULL); if (dbSource) { AB_MESSAGE_LIST *t; GWEN_XMLNODE *dbT; t=AB_Message_List_new(); dbT=GWEN_XMLNode_FindFirstTag(dbSource, "message", NULL, NULL); while(dbT) { AB_MESSAGE *elem; elem=AB_Message_fromXml(dbT); if (elem) AB_Message_List_Add(elem, t); dbT=GWEN_XMLNode_FindNextTag(dbT, "message", NULL, NULL); } p_struct->messageList=t; } else p_struct->messageList=AB_Message_List_new(); } } void AB_ImExporterContext_WriteXml(const AB_IMEXPORTER_CONTEXT *p_struct, GWEN_XMLNODE *p_db) { assert(p_struct); /* member "accountInfoList" */ { if (p_struct->accountInfoList) { GWEN_XMLNODE *dbDest; AB_IMEXPORTER_ACCOUNTINFO *elem; dbDest=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "accountInfoList"); elem=AB_ImExporterAccountInfo_List_First(p_struct->accountInfoList); while(elem) { GWEN_XMLNODE *dbElem; dbElem=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "accountInfo"); assert(dbElem); AB_ImExporterAccountInfo_toXml(elem, dbElem); GWEN_XMLNode_AddChild(dbDest, dbElem); elem=AB_ImExporterAccountInfo_List_Next(elem); } GWEN_XMLNode_AddChild(p_db, dbDest); } } /* member "securityList" */ { if (p_struct->securityList) { GWEN_XMLNODE *dbDest; AB_SECURITY *elem; dbDest=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "securityList"); elem=AB_Security_List_First(p_struct->securityList); while(elem) { GWEN_XMLNODE *dbElem; dbElem=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "security"); assert(dbElem); AB_Security_toXml(elem, dbElem); GWEN_XMLNode_AddChild(dbDest, dbElem); elem=AB_Security_List_Next(elem); } GWEN_XMLNode_AddChild(p_db, dbDest); } } /* member "messageList" */ { if (p_struct->messageList) { GWEN_XMLNODE *dbDest; AB_MESSAGE *elem; dbDest=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "messageList"); elem=AB_Message_List_First(p_struct->messageList); while(elem) { GWEN_XMLNODE *dbElem; dbElem=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "message"); assert(dbElem); AB_Message_toXml(elem, dbElem); GWEN_XMLNode_AddChild(dbDest, dbElem); elem=AB_Message_List_Next(elem); } GWEN_XMLNode_AddChild(p_db, dbDest); } } } void AB_ImExporterContext_toXml(const AB_IMEXPORTER_CONTEXT *p_struct, GWEN_XMLNODE *p_db) { AB_ImExporterContext_WriteXml(p_struct, p_db); } AB_IMEXPORTER_CONTEXT *AB_ImExporterContext_fromXml(GWEN_XMLNODE *p_db) { AB_IMEXPORTER_CONTEXT *p_struct; p_struct=AB_ImExporterContext_new(); AB_ImExporterContext_ReadXml(p_struct, p_db); return p_struct; } static AB_IMEXPORTER_CONTEXT *AB_ImExporterContext_List2__freeAll_cb(AB_IMEXPORTER_CONTEXT *t, void *user_data) { AB_ImExporterContext_free(t); return NULL; } int AB_ImExporterContext_List2_freeAll(AB_IMEXPORTER_CONTEXT_LIST2 *tl) { if (tl) { AB_ImExporterContext_List2_ForEach(tl, AB_ImExporterContext_List2__freeAll_cb, NULL); AB_ImExporterContext_List2_free(tl); } else { DBG_ERROR(AQBANKING_LOGDOMAIN, "List missing"); return GWEN_ERROR_INVALID; } return 0; } void AB_ImExporterContext_Clear(AB_IMEXPORTER_CONTEXT *st) { assert(st); if (st->accountInfoList) AB_ImExporterAccountInfo_List_Clear(st->accountInfoList); if (st->securityList) AB_Security_List_Clear(st->securityList); if (st->messageList) AB_Message_List_Clear(st->messageList); } void AB_ImExporterContext_AddContext(AB_IMEXPORTER_CONTEXT *st, AB_IMEXPORTER_CONTEXT *stSrc) { assert(st); if (stSrc->accountInfoList) { AB_IMEXPORTER_ACCOUNTINFO *iea; iea=AB_ImExporterAccountInfo_List_First(stSrc->accountInfoList); while(iea) { AB_IMEXPORTER_ACCOUNTINFO *ieaNext; ieaNext=AB_ImExporterAccountInfo_List_Next(iea); AB_ImExporterAccountInfo_List_Del(iea); AB_ImExporterAccountInfo_List_Add(iea, st->accountInfoList); iea=ieaNext; } } if (stSrc->securityList) { AB_SECURITY *sec; sec=AB_Security_List_First(stSrc->securityList); while(sec) { AB_SECURITY *secNext; secNext=AB_Security_List_Next(sec); AB_Security_List_Del(sec); AB_Security_List_Add(sec, st->securityList); sec=secNext; } } if (stSrc->messageList) { AB_MESSAGE *msg; msg=AB_Message_List_First(stSrc->messageList); while(msg) { AB_MESSAGE *msgNext; msgNext=AB_Message_List_Next(msg); AB_Message_List_Del(msg); AB_Message_List_Add(msg, st->messageList); msg=msgNext; } } AB_ImExporterContext_free(stSrc); } AB_IMEXPORTER_ACCOUNTINFO *AB_ImExporterContext_GetFirstAccountInfo(const AB_IMEXPORTER_CONTEXT *st) { assert(st); if (st->accountInfoList) return AB_ImExporterAccountInfo_List_First(st->accountInfoList); return NULL; } void AB_ImExporterContext_AddAccountInfo(AB_IMEXPORTER_CONTEXT *st, AB_IMEXPORTER_ACCOUNTINFO *ai) { assert(st); if (ai) { if (NULL==st->accountInfoList) st->accountInfoList=AB_ImExporterAccountInfo_List_new(); AB_ImExporterAccountInfo_List_Add(ai, st->accountInfoList); } } int AB_ImExporterContext_GetAccountInfoCount(const AB_IMEXPORTER_CONTEXT *st) { assert(st); if (st->accountInfoList) return AB_ImExporterAccountInfo_List_GetCount(st->accountInfoList); return 0; } AB_IMEXPORTER_ACCOUNTINFO *AB_ImExporterContext_GetOrAddAccountInfo(AB_IMEXPORTER_CONTEXT *st, uint32_t uniqueId, const char *iban, const char *bankCode, const char *accountNumber, int accountType) { assert(st); if (NULL==st->accountInfoList) st->accountInfoList=AB_ImExporterAccountInfo_List_new(); return AB_ImExporterAccountInfo_List_GetOrAdd(st->accountInfoList, uniqueId, iban, bankCode, accountNumber, accountType); } AB_SECURITY *AB_ImExporterContext_GetFirstSecurity(const AB_IMEXPORTER_CONTEXT *st) { assert(st); if (st->securityList) return AB_Security_List_First(st->securityList); return NULL; } AB_SECURITY *AB_ImExporterContext_FindSecurity(const AB_IMEXPORTER_CONTEXT *st, const char *nameSpace, const char *id) { assert(st); if (st->securityList) { AB_SECURITY *sec; assert(st); if (nameSpace==NULL) nameSpace=""; if (id==NULL) id=""; sec=AB_Security_List_First(st->securityList); while(sec) { const char *s1, *s2; s1=AB_Security_GetUniqueId(sec); if (s1==NULL) s1=""; s2=AB_Security_GetNameSpace(sec); if (s2==NULL) s2=""; if (strcasecmp(s2, nameSpace)==0 && strcasecmp(s1, id)==0) return sec; sec=AB_Security_List_Next(sec); } } return NULL; } void AB_ImExporterContext_AddSecurity(AB_IMEXPORTER_CONTEXT *st, AB_SECURITY *sec) { assert(st); if (sec) { if (NULL==st->securityList) st->securityList=AB_Security_List_new(); AB_Security_List_Add(sec, st->securityList); } } AB_MESSAGE *AB_ImExporterContext_GetFirstMessage(const AB_IMEXPORTER_CONTEXT *st) { assert(st); if (st->messageList) return AB_Message_List_First(st->messageList); return NULL; } void AB_ImExporterContext_AddMessage(AB_IMEXPORTER_CONTEXT *st, AB_MESSAGE *msg) { assert(st); if (msg) { if (NULL==st->messageList) st->messageList=AB_Message_List_new(); AB_Message_List_Add(msg, st->messageList); } } void AB_ImExporterContext_AddTransaction(AB_IMEXPORTER_CONTEXT *st, AB_TRANSACTION *t) { assert(st); if (t) { AB_IMEXPORTER_ACCOUNTINFO *ai=NULL; if (NULL==st->accountInfoList) { /* no account info list, nothing to search, just create the list */ st->accountInfoList=AB_ImExporterAccountInfo_List_new(); } else { /* first try to get by unique account id */ if (AB_Transaction_GetUniqueAccountId(t)) ai=AB_ImExporterAccountInfo_List_GetByAccountId(st->accountInfoList, AB_Transaction_GetUniqueAccountId(t)); /* next try by IBAN */ if (ai==NULL) { const char *s; s=AB_Transaction_GetLocalIban(t); if (s && *s) ai=AB_ImExporterAccountInfo_List_GetByIban(st->accountInfoList, s); } /* then try by account number and bank code */ if (ai==NULL) ai=AB_ImExporterAccountInfo_List_GetByBankCodeAndAccountNumber(st->accountInfoList, AB_Transaction_GetLocalBankCode(t), AB_Transaction_GetLocalAccountNumber(t), AB_AccountType_Unknown); } /* create account info if not found */ if (ai==NULL) { /* create account info */ ai=AB_ImExporterAccountInfo_new(); AB_ImExporterAccountInfo_FillFromTransaction(ai, t); AB_ImExporterAccountInfo_List_Add(ai, st->accountInfoList); } /* set transaction type if none set */ if (AB_Transaction_GetType(t)<=AB_Transaction_TypeNone) AB_Transaction_SetType(t, AB_Transaction_TypeStatement); /* finally add transaction */ AB_ImExporterAccountInfo_AddTransaction(ai, t); } } /* code headers */ aqbanking-6.6.1/src/libs/aqbanking/types/value.c0000664000175000017500000002606614663126043016520 00000000000000/*************************************************************************** begin : Mon Apr 05 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "value_p.h" #include #include #include #include #include #ifdef HAVE_LOCALE_H # include #endif #include #define AB_VALUE_STRSIZE 256 GWEN_LIST_FUNCTIONS(AB_VALUE, AB_Value) AB_VALUE *AB_Value_new(void) { AB_VALUE *v; GWEN_NEW_OBJECT(AB_VALUE, v); GWEN_LIST_INIT(AB_VALUE, v); mpq_init(v->value); return v; } void AB_Value_free(AB_VALUE *v) { if (v) { GWEN_LIST_FINI(AB_VALUE, v); mpq_clear(v->value); free(v->currency); GWEN_FREE_OBJECT(v); } } AB_VALUE *AB_Value_dup(const AB_VALUE *ov) { AB_VALUE *v; assert(ov); v=AB_Value_new(); mpq_set(v->value, ov->value); if (ov->currency) v->currency=strdup(ov->currency); return v; } AB_VALUE *AB_Value_fromDouble(double i) { GWEN_BUFFER *nbuf; AB_VALUE *v; int rv; nbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_Text_DoubleToBuffer(i, nbuf); assert(rv==0); v=AB_Value_fromString(GWEN_Buffer_GetStart(nbuf)); GWEN_Buffer_free(nbuf); return v; } AB_VALUE *AB_Value_fromInt(long int num, long int denom) { AB_VALUE *v; v=AB_Value_new(); mpq_set_si(v->value, num, denom); return v; } static int AB_Value_determineDecimalComma(const char *s) { int len; int i; len=strlen(s); for (i=len-1; i>=0; i--) { if (s[i]==',' || s[i]=='.') return (int)(s[i]); } return 0; } AB_VALUE *AB_Value_fromString(const char *s) { AB_VALUE *v; const char *currency=NULL; int conversion_succeeded = 1; // assume conversion will succeed char *tmpString=NULL; char *p; char *t; char decimalComma; int isNeg=0; if (!s) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Attempt to convert a NULL value"); return NULL; } tmpString=strdup(s); p=tmpString; while (*p && *p<33) p++; if (*p=='-') { isNeg=1; p++; } else if (*p=='+') { p++; } t=strchr(p, ':'); if (t) { currency=t+1; *t=0; } /* remove thousand's comma */ decimalComma=AB_Value_determineDecimalComma(p); if (decimalComma) { char *s1, *d1; s1=p; d1=p; while (*s1) { register char c; c=*(s1++); if (isdigit(c) || c=='/') *(d1++)=c; else if (c==decimalComma) /* always use '.' as decimal comma */ *(d1++)='.'; } *d1=0; } v=AB_Value_new(); t=strchr(p, '.'); if (t) { // remove comma and calculate denominator unsigned long denominator = 1; char *next; do { next=t+1; *t=*next; if (*next != 0) denominator *= 10; t++; } while (*next); // set denominator to the calculated value mpz_set_ui(mpq_denref(v->value), denominator); // set numerator to the resulting integer string without comma if (mpz_set_str(mpq_numref(v->value), p, 10) == -1) { conversion_succeeded = 0; } } else { /*DBG_ERROR(0, "Scanning this value: %s\n", p);*/ conversion_succeeded = (gmp_sscanf(p, "%Qu", v->value) == 1); } /* set currency (if any) */ if (currency) v->currency=strdup(currency); /* temporary string no longer needed */ free(tmpString); if (!conversion_succeeded) { DBG_INFO(AQBANKING_LOGDOMAIN, "[%s] is not a valid value", s); AB_Value_free(v); return NULL; } if (isNeg) mpq_neg(v->value, v->value); return v; } const char *AB_Value_GetCurrency(const AB_VALUE *v) { assert(v); return v->currency; } void AB_Value_SetCurrency(AB_VALUE *v, const char *s) { assert(v); free(v->currency); if (s) v->currency=strdup(s); else v->currency=0; } AB_VALUE *AB_Value_fromDb(GWEN_DB_NODE *db) { AB_VALUE *vc; const char *p; /* read and parse value */ p=GWEN_DB_GetCharValue(db, "value", 0, 0); if (!p) return NULL; vc=AB_Value_fromString(p); if (vc==NULL) return NULL; /* read currency (if any) */ p=GWEN_DB_GetCharValue(db, "currency", 0, "EUR"); if (p) AB_Value_SetCurrency(vc, p); return vc; } int AB_Value_toDb(const AB_VALUE *v, GWEN_DB_NODE *db) { GWEN_BUFFER *buf; buf=GWEN_Buffer_new(0, 128, 0, 1); AB_Value__toString(v, buf); GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "value", GWEN_Buffer_GetStart(buf)); GWEN_Buffer_free(buf); if (v->currency) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "currency", v->currency); return 0; } int AB_Value_toDbFloat(const AB_VALUE *v, GWEN_DB_NODE *db) { GWEN_BUFFER *buf; buf=GWEN_Buffer_new(0, 128, 0, 1); AB_Value_toHumanReadableString(v, buf, 2, 0); GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "value", GWEN_Buffer_GetStart(buf)); GWEN_Buffer_free(buf); if (v->currency) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "currency", v->currency); return 0; } void AB_Value__toString(const AB_VALUE *v, GWEN_BUFFER *buf) { int rv; uint32_t size; char *p; assert(v); GWEN_Buffer_AllocRoom(buf, AB_VALUE_STRSIZE); p=GWEN_Buffer_GetPosPointer(buf); size=GWEN_Buffer_GetMaxUnsegmentedWrite(buf); rv=gmp_snprintf(p, size, "%Qi", v->value); if (rv>=size) { DBG_ERROR(AQBANKING_LOGDOMAIN, "rv>=size? Unexpected (rv=%d, size=%lu, strsize=%d)", rv, (long unsigned int) size, (int)AB_VALUE_STRSIZE); GWEN_Buffer_AllocRoom(buf, rv+1); p=GWEN_Buffer_GetPosPointer(buf); size=GWEN_Buffer_GetMaxUnsegmentedWrite(buf); rv=gmp_snprintf(p, size, "%Qi", v->value); if (rv>=size) { DBG_ERROR(AQBANKING_LOGDOMAIN, "still rv>=size? Unexpected (rv=%d, size=%lu, strsize=%d)", rv, (long unsigned int) size, (int)AB_VALUE_STRSIZE); assert(rvvalue); if (rv<0 || rv>=buflen) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Buffer too small"); return GWEN_ERROR_BUFFER_OVERFLOW; } return 0; } void AB_Value_toString(const AB_VALUE *v, GWEN_BUFFER *buf) { assert(v); AB_Value__toString(v, buf); if (v->currency) { GWEN_Buffer_AppendString(buf, ":"); GWEN_Buffer_AppendString(buf, v->currency); } } void AB_Value_toHumanReadableString(const AB_VALUE *v, GWEN_BUFFER *buf, int prec, int withCurrency) { char numbuf[128]; double num; int rv; #ifdef HAVE_SETLOCALE const char *orig_locale = setlocale(LC_NUMERIC, NULL); char *currentLocale = strdup(orig_locale ? orig_locale : "C"); setlocale(LC_NUMERIC, "C"); #endif num=AB_Value_GetValueAsDouble(v); rv=snprintf(numbuf, sizeof(numbuf), "%.*f", prec, num); #ifdef HAVE_SETLOCALE setlocale(LC_NUMERIC, currentLocale); free(currentLocale); #endif if (rv<1 || rv>=sizeof(numbuf)) { assert(0); } GWEN_Buffer_AppendString(buf, numbuf); if (v->currency && withCurrency) { GWEN_Buffer_AppendString(buf, " "); GWEN_Buffer_AppendString(buf, v->currency); } } double AB_Value_GetValueAsDouble(const AB_VALUE *v) { assert(v); if (mpz_fits_slong_p(mpq_numref(v->value)) && mpz_fits_slong_p(mpq_denref(v->value))) { return (double)(mpz_get_d(mpq_numref(v->value)) / mpz_get_d(mpq_denref(v->value))); } else { return mpq_get_d(v->value); } } void AB_Value_SetValueFromDouble(AB_VALUE *v, double i) { assert(v); mpq_set_d(v->value, i); } void AB_Value_SetZero(AB_VALUE *v) { assert(v); mpq_clear(v->value); mpq_init(v->value); } int AB_Value_IsZero(const AB_VALUE *v) { assert(v); return (mpq_sgn(v->value)==0); } int AB_Value_IsNegative(const AB_VALUE *v) { assert(v); return (mpq_sgn(v->value)<0); } int AB_Value_IsPositive(const AB_VALUE *v) { assert(v); return (mpq_sgn(v->value)>=0); } int AB_Value_Compare(const AB_VALUE *v1, const AB_VALUE *v2) { assert(v1); assert(v2); return mpq_cmp(v1->value, v2->value); } int AB_Value_Equal(const AB_VALUE *v1, const AB_VALUE *v2) { assert(v1); assert(v2); return mpq_equal(v1->value, v2->value); } int AB_Value_AddValue(AB_VALUE *v1, const AB_VALUE *v2) { assert(v1); assert(v2); mpq_add(v1->value, v1->value, v2->value); return 0; } int AB_Value_SubValue(AB_VALUE *v1, const AB_VALUE *v2) { assert(v1); assert(v2); mpq_sub(v1->value, v1->value, v2->value); return 0; } int AB_Value_MultValue(AB_VALUE *v1, const AB_VALUE *v2) { assert(v1); assert(v2); mpq_mul(v1->value, v1->value, v2->value); return 0; } int AB_Value_DivValue(AB_VALUE *v1, const AB_VALUE *v2) { assert(v1); assert(v2); mpq_div(v1->value, v1->value, v2->value); return 0; } int AB_Value_Negate(AB_VALUE *v) { assert(v); mpq_neg(v->value, v->value); return 0; } void AB_Value_Dump(const AB_VALUE *v, FILE *f, unsigned int indent) { unsigned int i; for (i=0; ivalue, GWEN_Buffer_GetStart(nbuf)); GWEN_Buffer_free(nbuf); } else fprintf(f, "[none]\n"); } AB_VALUE_LIST *AB_Value_List_dup(const AB_VALUE_LIST *stl) { if (stl) { AB_VALUE_LIST *nl; AB_VALUE *e; nl=AB_Value_List_new(); e=AB_Value_List_First(stl); while (e) { AB_VALUE *ne; ne=AB_Value_dup(e); assert(ne); AB_Value_List_Add(ne, nl); e=AB_Value_List_Next(e); } /* while (e) */ return nl; } else return 0; } long int AB_Value_Num(const AB_VALUE *v) { assert(v); return mpz_get_si(mpq_numref(v->value)); } long int AB_Value_Denom(const AB_VALUE *v) { assert(v); return mpz_get_si(mpq_denref(v->value)); } void AB_Value_toHbciString(const AB_VALUE *v, GWEN_BUFFER *buf) { GWEN_BUFFER *tbuf; char *p; int l; tbuf=GWEN_Buffer_new(0, 32, 0, 1); AB_Value_toHumanReadableString(v, tbuf, 2, 0); /* convert decimal komma */ p=GWEN_Buffer_GetStart(tbuf); while (*p) { if (*p=='.') { *p=','; break; } p++; } /* remove trailing zeroes */ p=GWEN_Buffer_GetStart(tbuf); l=strlen(GWEN_Buffer_GetStart(tbuf)); if (l>0 && strchr(p, ',')!=NULL) { l--; while (l>0 && p[l]=='0') { p[l]=0; l--; } } GWEN_Buffer_AppendString(buf, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } aqbanking-6.6.1/src/libs/aqbanking/types/ab_reference_account_list2.tm20000664000175000017500000000040315037736054023105 00000000000000 AB_REFERENCE_ACCOUNT_LIST2 AB_ReferenceAccount_List2 aqbanking-6.6.1/src/libs/aqbanking/types/bankinfoservice.xml0000664000175000017500000001625414043610744021126 00000000000000 AB_BANKINFO_SERVICE AB_BankInfoService bankinfoservice with_xml with_db with_list1 with_list2 with_refcount
aqbanking/error.h
gwenhywfar/types.h
The following types have been registered with AqBanking: \n
    \n
  • HBCI - German homebanking protocol
  • \n
  • EBICS - German and French homebanking protocol
  • \n
  • OFX - OFX direct connect protocol
  • \n
\n
public own const dup const
For most services this is the URL or hostname of the server. public own const dup const For IP based services this is the port to be used (if omitted a default value suitable for the service is chosen). public own const dup const The content of this field depends on the service type. \n For HBCI this is the protocol version to be used: \n
    \n
  • 2.01
  • \n
  • 2.10
  • \n
  • 2.20
  • \n
\n \n For EBICS this is also the protocol version: \n
    \n
  • H002
  • \n
  • H003
  • \n
\n
public own const dup const
For HTTP-based protocols this is the HTTP version to be \n used: \n
    \n
  • 1.0
  • \n
  • 1.1
  • \n
\n
public own const dup const
The content of this field depends on the service type. \n For HBCI the following values are used: \n
    \n
  • DDV
  • \n
  • RDH1
  • \n
  • RDH2
  • \n
  • RDH3
  • \n
  • RDH4
  • \n
  • RDH5
  • \n
  • RDH6
  • \n
  • RDH7
  • \n
  • RDH8
  • \n
  • RDH9
  • \n
  • RDH10
  • \n
  • RAH7
  • \n
  • RAH9
  • \n
  • RAH10
  • \n
  • PINTAN
  • \n
\n
public own const dup const
This is a multi purpose field to be used by a bankinfo plugin as it sees fit. OFX uses this to store the FID from the bankinfo file. EBICS stores the HOSTID here. public own const dup const This is a multi purpose field to be used by a bankinfo plugin as it sees fit. OFX uses this to store the ORG field from the bankinfo file. public own const dup const This is a multi purpose field to be used by a bankinfo plugin as it sees fit. OFX uses this to store the APPID field from the bankinfo file. public own const dup const This is a multi purpose field to be used by a bankinfo plugin as it sees fit. OFX uses this to store the APPVER field from the bankinfo file. public own const dup const 0 0 with_flags public
aqbanking-6.6.1/src/libs/aqbanking/types/bankinfoservice_p.h0000664000175000017500000000144415037736054021076 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "bankinfoservice.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef AB_BANKINFO_SERVICE_BANKINFOSERVICE_P_H #define AB_BANKINFO_SERVICE_BANKINFOSERVICE_P_H #include "./bankinfoservice.h" #ifdef __cplusplus extern "C" { #endif struct AB_BANKINFO_SERVICE { GWEN_LIST_ELEMENT(AB_BANKINFO_SERVICE) int _refCount; char *type; char *address; char *suffix; char *pversion; char *hversion; char *mode; char *aux1; char *aux2; char *aux3; char *aux4; uint32_t userFlags; }; #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/aqbanking/types/ab_account_spec_list.tm20000664000175000017500000000035415037736054022024 00000000000000 AB_ACCOUNT_SPEC_LIST AB_AccountSpec_List aqbanking-6.6.1/src/libs/aqbanking/types/ab_balance.tm20000664000175000017500000000026515037736054017711 00000000000000 AB_BALANCE AB_Balance aqbanking-6.6.1/src/libs/aqbanking/types/ab_message_list.tm20000664000175000017500000000033115037736054020775 00000000000000 AB_MESSAGE_LIST AB_Message_List aqbanking-6.6.1/src/libs/aqbanking/types/ab_document_list.tm20000664000175000017500000000033515037736054021173 00000000000000 AB_DOCUMENT_LIST AB_Document_List aqbanking-6.6.1/src/libs/aqbanking/types/message.c0000664000175000017500000003314415037736054017030 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "message.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "./message_p.h" #include #include /* code headers */ /* macro functions */ GWEN_LIST_FUNCTIONS(AB_MESSAGE, AB_Message) GWEN_LIST2_FUNCTIONS(AB_MESSAGE, AB_Message) AB_MESSAGE_SOURCE AB_Message_Source_fromString(const char *p_s) { if (p_s && *p_s) { if (strcasecmp(p_s, "none")==0) return AB_Message_SourceNone; else if (strcasecmp(p_s, "system")==0) return AB_Message_SourceSystem; else if (strcasecmp(p_s, "bank")==0) return AB_Message_SourceBank; } return AB_Message_SourceUnknown; } const char *AB_Message_Source_toString(AB_MESSAGE_SOURCE p_i) { switch(p_i) { case AB_Message_SourceNone: return "none"; case AB_Message_SourceSystem: return "system"; case AB_Message_SourceBank: return "bank"; case AB_Message_SourceUnknown: default: return "unknown"; } } AB_MESSAGE *AB_Message_new(void) { AB_MESSAGE *p_struct; GWEN_NEW_OBJECT(AB_MESSAGE, p_struct) p_struct->_refCount=1; GWEN_LIST_INIT(AB_MESSAGE, p_struct) /* members */ p_struct->source=AB_Message_SourceUnknown; p_struct->userId=0; p_struct->accountId=0; p_struct->subject=NULL; p_struct->text=NULL; p_struct->dateReceived=NULL; /* virtual functions */ return p_struct; } void AB_Message_free(AB_MESSAGE *p_struct) { if (p_struct) { assert(p_struct->_refCount); if (p_struct->_refCount==1) { GWEN_LIST_FINI(AB_MESSAGE, p_struct) /* members */ free(p_struct->subject); p_struct->subject=NULL; free(p_struct->text); p_struct->text=NULL; GWEN_Time_free(p_struct->dateReceived); p_struct->dateReceived=NULL; p_struct->_refCount=0; GWEN_FREE_OBJECT(p_struct); } else p_struct->_refCount--; } } void AB_Message_Attach(AB_MESSAGE *p_struct) { assert(p_struct); assert(p_struct->_refCount); p_struct->_refCount++; } AB_MESSAGE *AB_Message_dup(const AB_MESSAGE *p_src) { AB_MESSAGE *p_struct; assert(p_src); p_struct=AB_Message_new(); /* member "source" */ p_struct->source=p_src->source; /* member "userId" */ p_struct->userId=p_src->userId; /* member "accountId" */ p_struct->accountId=p_src->accountId; /* member "subject" */ if (p_struct->subject) { free(p_struct->subject); p_struct->subject=NULL; p_struct->subject=NULL; } if (p_src->subject) { p_struct->subject=strdup(p_src->subject); } /* member "text" */ if (p_struct->text) { free(p_struct->text); p_struct->text=NULL; p_struct->text=NULL; } if (p_src->text) { p_struct->text=strdup(p_src->text); } /* member "dateReceived" */ if (p_struct->dateReceived) { GWEN_Time_free(p_struct->dateReceived); p_struct->dateReceived=NULL; p_struct->dateReceived=NULL; } if (p_src->dateReceived) { p_struct->dateReceived=GWEN_Time_dup(p_src->dateReceived); } return p_struct; } AB_MESSAGE *AB_Message_copy(AB_MESSAGE *p_struct, const AB_MESSAGE *p_src) { assert(p_struct); assert(p_src); /* member "source" */ p_struct->source=p_src->source; /* member "userId" */ p_struct->userId=p_src->userId; /* member "accountId" */ p_struct->accountId=p_src->accountId; /* member "subject" */ if (p_struct->subject) { free(p_struct->subject); p_struct->subject=NULL; p_struct->subject=NULL; } if (p_src->subject) { p_struct->subject=strdup(p_src->subject); } /* member "text" */ if (p_struct->text) { free(p_struct->text); p_struct->text=NULL; p_struct->text=NULL; } if (p_src->text) { p_struct->text=strdup(p_src->text); } /* member "dateReceived" */ if (p_struct->dateReceived) { GWEN_Time_free(p_struct->dateReceived); p_struct->dateReceived=NULL; p_struct->dateReceived=NULL; } if (p_src->dateReceived) { p_struct->dateReceived=GWEN_Time_dup(p_src->dateReceived); } return p_struct; } AB_MESSAGE_SOURCE AB_Message_GetSource(const AB_MESSAGE *p_struct){ assert(p_struct); return p_struct->source; } uint32_t AB_Message_GetUserId(const AB_MESSAGE *p_struct){ assert(p_struct); return p_struct->userId; } uint32_t AB_Message_GetAccountId(const AB_MESSAGE *p_struct){ assert(p_struct); return p_struct->accountId; } const char *AB_Message_GetSubject(const AB_MESSAGE *p_struct){ assert(p_struct); return p_struct->subject; } const char *AB_Message_GetText(const AB_MESSAGE *p_struct){ assert(p_struct); return p_struct->text; } const GWEN_TIME *AB_Message_GetDateReceived(const AB_MESSAGE *p_struct){ assert(p_struct); return p_struct->dateReceived; } void AB_Message_SetSource(AB_MESSAGE *p_struct, AB_MESSAGE_SOURCE p_src){ assert(p_struct); p_struct->source=p_src; } void AB_Message_SetUserId(AB_MESSAGE *p_struct, uint32_t p_src){ assert(p_struct); p_struct->userId=p_src; } void AB_Message_SetAccountId(AB_MESSAGE *p_struct, uint32_t p_src){ assert(p_struct); p_struct->accountId=p_src; } void AB_Message_SetSubject(AB_MESSAGE *p_struct, const char *p_src){ assert(p_struct); if (p_struct->subject) { free(p_struct->subject); p_struct->subject=NULL; p_struct->subject=NULL; } if (p_src) { p_struct->subject=strdup(p_src); } else { p_struct->subject=NULL; } } void AB_Message_SetText(AB_MESSAGE *p_struct, const char *p_src){ assert(p_struct); if (p_struct->text) { free(p_struct->text); p_struct->text=NULL; p_struct->text=NULL; } if (p_src) { p_struct->text=strdup(p_src); } else { p_struct->text=NULL; } } void AB_Message_SetDateReceived(AB_MESSAGE *p_struct, const GWEN_TIME *p_src){ assert(p_struct); if (p_struct->dateReceived) { GWEN_Time_free(p_struct->dateReceived); p_struct->dateReceived=NULL; p_struct->dateReceived=NULL; } if (p_src) { p_struct->dateReceived=GWEN_Time_dup(p_src); } else { p_struct->dateReceived=NULL; } } AB_MESSAGE_LIST *AB_Message_List_dup(const AB_MESSAGE_LIST *p_src) { AB_MESSAGE_LIST *p_dest; AB_MESSAGE *p_elem; assert(p_src); p_dest=AB_Message_List_new(); p_elem=AB_Message_List_First(p_src); while(p_elem) { AB_MESSAGE *p_cpy; p_cpy=AB_Message_dup(p_elem); AB_Message_List_Add(p_cpy, p_dest); p_elem=AB_Message_List_Next(p_elem); } return p_dest; } void AB_Message_ReadDb(AB_MESSAGE *p_struct, GWEN_DB_NODE *p_db){ assert(p_struct); /* member "source" */ { const char *s; s=GWEN_DB_GetCharValue(p_db, "source", 0, NULL); if (s) p_struct->source=AB_Message_Source_fromString(s); else p_struct->source=AB_Message_SourceUnknown; } /* member "userId" */ p_struct->userId=GWEN_DB_GetIntValue(p_db, "userId", 0, 0); /* member "accountId" */ p_struct->accountId=GWEN_DB_GetIntValue(p_db, "accountId", 0, 0); /* member "subject" */ if (p_struct->subject) { free(p_struct->subject); p_struct->subject=NULL; p_struct->subject=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "subject", 0, NULL); if (s) p_struct->subject=strdup(s); } /* member "text" */ if (p_struct->text) { free(p_struct->text); p_struct->text=NULL; p_struct->text=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "text", 0, NULL); if (s) p_struct->text=strdup(s); } /* member "dateReceived" */ if (p_struct->dateReceived) { GWEN_Time_free(p_struct->dateReceived); p_struct->dateReceived=NULL; p_struct->dateReceived=NULL; } { GWEN_DB_NODE *dbDest; dbDest=GWEN_DB_GetGroup(p_db, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "dateReceived"); if (dbDest) p_struct->dateReceived=GWEN_Time_fromDb(dbDest); } } int AB_Message_WriteDb(const AB_MESSAGE *p_struct, GWEN_DB_NODE *p_db) { int p_rv; assert(p_struct); /* member "source" */ p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "source", AB_Message_Source_toString(p_struct->source)); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "userId" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "userId", p_struct->userId); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "accountId" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "accountId", p_struct->accountId); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "subject" */ if (p_struct->subject) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "subject", p_struct->subject); else { GWEN_DB_DeleteVar(p_db, "subject"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "text" */ if (p_struct->text) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "text", p_struct->text); else { GWEN_DB_DeleteVar(p_db, "text"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "dateReceived" */ if (p_struct->dateReceived){ GWEN_DB_NODE *dbDest; dbDest=GWEN_DB_GetGroup(p_db, GWEN_DB_FLAGS_OVERWRITE_GROUPS, "dateReceived"); assert(dbDest); p_rv=GWEN_Time_toDb(p_struct->dateReceived, dbDest); } else p_rv=0; if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } return 0; } AB_MESSAGE *AB_Message_fromDb(GWEN_DB_NODE *p_db) { AB_MESSAGE *p_struct; p_struct=AB_Message_new(); AB_Message_ReadDb(p_struct, p_db); return p_struct; } int AB_Message_toDb(const AB_MESSAGE *p_struct, GWEN_DB_NODE *p_db) { return AB_Message_WriteDb(p_struct, p_db); } void AB_Message_ReadXml(AB_MESSAGE *p_struct, GWEN_XMLNODE *p_db){ assert(p_struct); /* member "source" */ { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "source", NULL); if (s) p_struct->source=AB_Message_Source_fromString(s); else p_struct->source=AB_Message_SourceUnknown; } /* member "userId" */ p_struct->userId=GWEN_XMLNode_GetIntValue(p_db, "userId", 0); /* member "accountId" */ p_struct->accountId=GWEN_XMLNode_GetIntValue(p_db, "accountId", 0); /* member "subject" */ if (p_struct->subject) { free(p_struct->subject); p_struct->subject=NULL; p_struct->subject=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "subject", NULL); if (s) p_struct->subject=strdup(s); } /* member "text" */ if (p_struct->text) { free(p_struct->text); p_struct->text=NULL; p_struct->text=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "text", NULL); if (s) p_struct->text=strdup(s); } /* member "dateReceived" */ if (p_struct->dateReceived) { GWEN_Time_free(p_struct->dateReceived); p_struct->dateReceived=NULL; p_struct->dateReceived=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "dateReceived", NULL); if (s && *s) p_struct->dateReceived=GWEN_Time_fromString(s, "YYYY/MM/DD-hh:mm"); } } void AB_Message_WriteXml(const AB_MESSAGE *p_struct, GWEN_XMLNODE *p_db) { assert(p_struct); /* member "source" */ GWEN_XMLNode_SetCharValue(p_db, "source", AB_Message_Source_toString(p_struct->source)); /* member "userId" */ GWEN_XMLNode_SetIntValue(p_db, "userId", p_struct->userId); /* member "accountId" */ GWEN_XMLNode_SetIntValue(p_db, "accountId", p_struct->accountId); /* member "subject" */ GWEN_XMLNode_SetCharValue(p_db, "subject", p_struct->subject); /* member "text" */ GWEN_XMLNode_SetCharValue(p_db, "text", p_struct->text); /* member "dateReceived" */ if (p_struct->dateReceived){ GWEN_BUFFER *xbuf; int rv; xbuf=GWEN_Buffer_new(0, 32, 0, 1); rv=GWEN_Time_toString(p_struct->dateReceived, "YYYY/MM/DD-hh:mm", xbuf); if (rv>=0) GWEN_XMLNode_SetCharValue(p_db, "dateReceived", GWEN_Buffer_GetStart(xbuf)); GWEN_Buffer_free(xbuf); } } void AB_Message_toXml(const AB_MESSAGE *p_struct, GWEN_XMLNODE *p_db) { AB_Message_WriteXml(p_struct, p_db); } AB_MESSAGE *AB_Message_fromXml(GWEN_XMLNODE *p_db) { AB_MESSAGE *p_struct; p_struct=AB_Message_new(); AB_Message_ReadXml(p_struct, p_db); return p_struct; } void AB_Message_toHashString(const AB_MESSAGE *p_struct, GWEN_BUFFER *p_buffer) { assert(p_struct); /* member "source"*/ { char numbuf[32]; snprintf(numbuf, sizeof(numbuf)-1, "%d", p_struct->source); numbuf[sizeof(numbuf)-1]=0; GWEN_Buffer_AppendString(p_buffer, numbuf); } GWEN_Buffer_AppendByte(p_buffer, ':'); /* member "userId"*/ { char numbuf[32]; snprintf(numbuf, sizeof(numbuf)-1, "%d", p_struct->userId); numbuf[sizeof(numbuf)-1]=0; GWEN_Buffer_AppendString(p_buffer, numbuf); } GWEN_Buffer_AppendByte(p_buffer, ':'); /* member "accountId"*/ { char numbuf[32]; snprintf(numbuf, sizeof(numbuf)-1, "%d", p_struct->accountId); numbuf[sizeof(numbuf)-1]=0; GWEN_Buffer_AppendString(p_buffer, numbuf); } GWEN_Buffer_AppendByte(p_buffer, ':'); /* member "subject"*/ if (p_struct->subject) GWEN_Buffer_AppendString(p_buffer, p_struct->subject); GWEN_Buffer_AppendByte(p_buffer, ':'); /* member "text"*/ if (p_struct->text) GWEN_Buffer_AppendString(p_buffer, p_struct->text); GWEN_Buffer_AppendByte(p_buffer, ':'); /* member "dateReceived"*/ if (p_struct->dateReceived) GWEN_Time_toUtcString(p_struct->dateReceived, "YYYY/MM/DD-hh:mm", p_buffer); GWEN_Buffer_AppendByte(p_buffer, ':'); } static AB_MESSAGE *AB_Message_List2__freeAll_cb(AB_MESSAGE *t, void *user_data) { AB_Message_free(t); return NULL; } int AB_Message_List2_freeAll(AB_MESSAGE_LIST2 *tl) { if (tl) { AB_Message_List2_ForEach(tl, AB_Message_List2__freeAll_cb, NULL); AB_Message_List2_free(tl); } else { DBG_ERROR(AQBANKING_LOGDOMAIN, "List missing"); return GWEN_ERROR_INVALID; } return 0; } /* code headers */ aqbanking-6.6.1/src/libs/aqbanking/types/refaccount.c0000664000175000017500000006166415037736054017545 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "refaccount.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "./refaccount_p.h" #include #include /* code headers */ /* macro functions */ GWEN_LIST_FUNCTIONS(AB_REFERENCE_ACCOUNT, AB_ReferenceAccount) GWEN_LIST2_FUNCTIONS(AB_REFERENCE_ACCOUNT, AB_ReferenceAccount) AB_REFERENCE_ACCOUNT *AB_ReferenceAccount_new(void) { AB_REFERENCE_ACCOUNT *p_struct; GWEN_NEW_OBJECT(AB_REFERENCE_ACCOUNT, p_struct) p_struct->_refCount=1; GWEN_LIST_INIT(AB_REFERENCE_ACCOUNT, p_struct) /* members */ p_struct->iban=NULL; p_struct->bic=NULL; p_struct->accountNumber=NULL; p_struct->subAccountNumber=NULL; p_struct->country=NULL; p_struct->bankCode=NULL; p_struct->ownerName=NULL; p_struct->ownerName2=NULL; p_struct->accountName=NULL; p_struct->accountType=0; /* virtual functions */ return p_struct; } void AB_ReferenceAccount_free(AB_REFERENCE_ACCOUNT *p_struct) { if (p_struct) { assert(p_struct->_refCount); if (p_struct->_refCount==1) { GWEN_LIST_FINI(AB_REFERENCE_ACCOUNT, p_struct) /* members */ free(p_struct->iban); p_struct->iban=NULL; free(p_struct->bic); p_struct->bic=NULL; free(p_struct->accountNumber); p_struct->accountNumber=NULL; free(p_struct->subAccountNumber); p_struct->subAccountNumber=NULL; free(p_struct->country); p_struct->country=NULL; free(p_struct->bankCode); p_struct->bankCode=NULL; free(p_struct->ownerName); p_struct->ownerName=NULL; free(p_struct->ownerName2); p_struct->ownerName2=NULL; free(p_struct->accountName); p_struct->accountName=NULL; p_struct->_refCount=0; GWEN_FREE_OBJECT(p_struct); } else p_struct->_refCount--; } } void AB_ReferenceAccount_Attach(AB_REFERENCE_ACCOUNT *p_struct) { assert(p_struct); assert(p_struct->_refCount); p_struct->_refCount++; } AB_REFERENCE_ACCOUNT *AB_ReferenceAccount_dup(const AB_REFERENCE_ACCOUNT *p_src) { AB_REFERENCE_ACCOUNT *p_struct; assert(p_src); p_struct=AB_ReferenceAccount_new(); /* member "iban" */ if (p_struct->iban) { free(p_struct->iban); p_struct->iban=NULL; p_struct->iban=NULL; } if (p_src->iban) { p_struct->iban=strdup(p_src->iban); } /* member "bic" */ if (p_struct->bic) { free(p_struct->bic); p_struct->bic=NULL; p_struct->bic=NULL; } if (p_src->bic) { p_struct->bic=strdup(p_src->bic); } /* member "accountNumber" */ if (p_struct->accountNumber) { free(p_struct->accountNumber); p_struct->accountNumber=NULL; p_struct->accountNumber=NULL; } if (p_src->accountNumber) { p_struct->accountNumber=strdup(p_src->accountNumber); } /* member "subAccountNumber" */ if (p_struct->subAccountNumber) { free(p_struct->subAccountNumber); p_struct->subAccountNumber=NULL; p_struct->subAccountNumber=NULL; } if (p_src->subAccountNumber) { p_struct->subAccountNumber=strdup(p_src->subAccountNumber); } /* member "country" */ if (p_struct->country) { free(p_struct->country); p_struct->country=NULL; p_struct->country=NULL; } if (p_src->country) { p_struct->country=strdup(p_src->country); } /* member "bankCode" */ if (p_struct->bankCode) { free(p_struct->bankCode); p_struct->bankCode=NULL; p_struct->bankCode=NULL; } if (p_src->bankCode) { p_struct->bankCode=strdup(p_src->bankCode); } /* member "ownerName" */ if (p_struct->ownerName) { free(p_struct->ownerName); p_struct->ownerName=NULL; p_struct->ownerName=NULL; } if (p_src->ownerName) { p_struct->ownerName=strdup(p_src->ownerName); } /* member "ownerName2" */ if (p_struct->ownerName2) { free(p_struct->ownerName2); p_struct->ownerName2=NULL; p_struct->ownerName2=NULL; } if (p_src->ownerName2) { p_struct->ownerName2=strdup(p_src->ownerName2); } /* member "accountName" */ if (p_struct->accountName) { free(p_struct->accountName); p_struct->accountName=NULL; p_struct->accountName=NULL; } if (p_src->accountName) { p_struct->accountName=strdup(p_src->accountName); } /* member "accountType" */ p_struct->accountType=p_src->accountType; return p_struct; } AB_REFERENCE_ACCOUNT *AB_ReferenceAccount_copy(AB_REFERENCE_ACCOUNT *p_struct, const AB_REFERENCE_ACCOUNT *p_src) { assert(p_struct); assert(p_src); /* member "iban" */ if (p_struct->iban) { free(p_struct->iban); p_struct->iban=NULL; p_struct->iban=NULL; } if (p_src->iban) { p_struct->iban=strdup(p_src->iban); } /* member "bic" */ if (p_struct->bic) { free(p_struct->bic); p_struct->bic=NULL; p_struct->bic=NULL; } if (p_src->bic) { p_struct->bic=strdup(p_src->bic); } /* member "accountNumber" */ if (p_struct->accountNumber) { free(p_struct->accountNumber); p_struct->accountNumber=NULL; p_struct->accountNumber=NULL; } if (p_src->accountNumber) { p_struct->accountNumber=strdup(p_src->accountNumber); } /* member "subAccountNumber" */ if (p_struct->subAccountNumber) { free(p_struct->subAccountNumber); p_struct->subAccountNumber=NULL; p_struct->subAccountNumber=NULL; } if (p_src->subAccountNumber) { p_struct->subAccountNumber=strdup(p_src->subAccountNumber); } /* member "country" */ if (p_struct->country) { free(p_struct->country); p_struct->country=NULL; p_struct->country=NULL; } if (p_src->country) { p_struct->country=strdup(p_src->country); } /* member "bankCode" */ if (p_struct->bankCode) { free(p_struct->bankCode); p_struct->bankCode=NULL; p_struct->bankCode=NULL; } if (p_src->bankCode) { p_struct->bankCode=strdup(p_src->bankCode); } /* member "ownerName" */ if (p_struct->ownerName) { free(p_struct->ownerName); p_struct->ownerName=NULL; p_struct->ownerName=NULL; } if (p_src->ownerName) { p_struct->ownerName=strdup(p_src->ownerName); } /* member "ownerName2" */ if (p_struct->ownerName2) { free(p_struct->ownerName2); p_struct->ownerName2=NULL; p_struct->ownerName2=NULL; } if (p_src->ownerName2) { p_struct->ownerName2=strdup(p_src->ownerName2); } /* member "accountName" */ if (p_struct->accountName) { free(p_struct->accountName); p_struct->accountName=NULL; p_struct->accountName=NULL; } if (p_src->accountName) { p_struct->accountName=strdup(p_src->accountName); } /* member "accountType" */ p_struct->accountType=p_src->accountType; return p_struct; } const char *AB_ReferenceAccount_GetIban(const AB_REFERENCE_ACCOUNT *p_struct){ assert(p_struct); return p_struct->iban; } const char *AB_ReferenceAccount_GetBic(const AB_REFERENCE_ACCOUNT *p_struct){ assert(p_struct); return p_struct->bic; } const char *AB_ReferenceAccount_GetAccountNumber(const AB_REFERENCE_ACCOUNT *p_struct){ assert(p_struct); return p_struct->accountNumber; } const char *AB_ReferenceAccount_GetSubAccountNumber(const AB_REFERENCE_ACCOUNT *p_struct){ assert(p_struct); return p_struct->subAccountNumber; } const char *AB_ReferenceAccount_GetCountry(const AB_REFERENCE_ACCOUNT *p_struct){ assert(p_struct); return p_struct->country; } const char *AB_ReferenceAccount_GetBankCode(const AB_REFERENCE_ACCOUNT *p_struct){ assert(p_struct); return p_struct->bankCode; } const char *AB_ReferenceAccount_GetOwnerName(const AB_REFERENCE_ACCOUNT *p_struct){ assert(p_struct); return p_struct->ownerName; } const char *AB_ReferenceAccount_GetOwnerName2(const AB_REFERENCE_ACCOUNT *p_struct){ assert(p_struct); return p_struct->ownerName2; } const char *AB_ReferenceAccount_GetAccountName(const AB_REFERENCE_ACCOUNT *p_struct){ assert(p_struct); return p_struct->accountName; } uint8_t AB_ReferenceAccount_GetAccountType(const AB_REFERENCE_ACCOUNT *p_struct){ assert(p_struct); return p_struct->accountType; } void AB_ReferenceAccount_SetIban(AB_REFERENCE_ACCOUNT *p_struct, const char *p_src){ assert(p_struct); if (p_struct->iban) { free(p_struct->iban); p_struct->iban=NULL; p_struct->iban=NULL; } if (p_src) { p_struct->iban=strdup(p_src); } else { p_struct->iban=NULL; } } void AB_ReferenceAccount_SetBic(AB_REFERENCE_ACCOUNT *p_struct, const char *p_src){ assert(p_struct); if (p_struct->bic) { free(p_struct->bic); p_struct->bic=NULL; p_struct->bic=NULL; } if (p_src) { p_struct->bic=strdup(p_src); } else { p_struct->bic=NULL; } } void AB_ReferenceAccount_SetAccountNumber(AB_REFERENCE_ACCOUNT *p_struct, const char *p_src){ assert(p_struct); if (p_struct->accountNumber) { free(p_struct->accountNumber); p_struct->accountNumber=NULL; p_struct->accountNumber=NULL; } if (p_src) { p_struct->accountNumber=strdup(p_src); } else { p_struct->accountNumber=NULL; } } void AB_ReferenceAccount_SetSubAccountNumber(AB_REFERENCE_ACCOUNT *p_struct, const char *p_src){ assert(p_struct); if (p_struct->subAccountNumber) { free(p_struct->subAccountNumber); p_struct->subAccountNumber=NULL; p_struct->subAccountNumber=NULL; } if (p_src) { p_struct->subAccountNumber=strdup(p_src); } else { p_struct->subAccountNumber=NULL; } } void AB_ReferenceAccount_SetCountry(AB_REFERENCE_ACCOUNT *p_struct, const char *p_src){ assert(p_struct); if (p_struct->country) { free(p_struct->country); p_struct->country=NULL; p_struct->country=NULL; } if (p_src) { p_struct->country=strdup(p_src); } else { p_struct->country=NULL; } } void AB_ReferenceAccount_SetBankCode(AB_REFERENCE_ACCOUNT *p_struct, const char *p_src){ assert(p_struct); if (p_struct->bankCode) { free(p_struct->bankCode); p_struct->bankCode=NULL; p_struct->bankCode=NULL; } if (p_src) { p_struct->bankCode=strdup(p_src); } else { p_struct->bankCode=NULL; } } void AB_ReferenceAccount_SetOwnerName(AB_REFERENCE_ACCOUNT *p_struct, const char *p_src){ assert(p_struct); if (p_struct->ownerName) { free(p_struct->ownerName); p_struct->ownerName=NULL; p_struct->ownerName=NULL; } if (p_src) { p_struct->ownerName=strdup(p_src); } else { p_struct->ownerName=NULL; } } void AB_ReferenceAccount_SetOwnerName2(AB_REFERENCE_ACCOUNT *p_struct, const char *p_src){ assert(p_struct); if (p_struct->ownerName2) { free(p_struct->ownerName2); p_struct->ownerName2=NULL; p_struct->ownerName2=NULL; } if (p_src) { p_struct->ownerName2=strdup(p_src); } else { p_struct->ownerName2=NULL; } } void AB_ReferenceAccount_SetAccountName(AB_REFERENCE_ACCOUNT *p_struct, const char *p_src){ assert(p_struct); if (p_struct->accountName) { free(p_struct->accountName); p_struct->accountName=NULL; p_struct->accountName=NULL; } if (p_src) { p_struct->accountName=strdup(p_src); } else { p_struct->accountName=NULL; } } void AB_ReferenceAccount_SetAccountType(AB_REFERENCE_ACCOUNT *p_struct, uint8_t p_src){ assert(p_struct); p_struct->accountType=p_src; } AB_REFERENCE_ACCOUNT_LIST *AB_ReferenceAccount_List_dup(const AB_REFERENCE_ACCOUNT_LIST *p_src) { AB_REFERENCE_ACCOUNT_LIST *p_dest; AB_REFERENCE_ACCOUNT *p_elem; assert(p_src); p_dest=AB_ReferenceAccount_List_new(); p_elem=AB_ReferenceAccount_List_First(p_src); while(p_elem) { AB_REFERENCE_ACCOUNT *p_cpy; p_cpy=AB_ReferenceAccount_dup(p_elem); AB_ReferenceAccount_List_Add(p_cpy, p_dest); p_elem=AB_ReferenceAccount_List_Next(p_elem); } return p_dest; } void AB_ReferenceAccount_ReadDb(AB_REFERENCE_ACCOUNT *p_struct, GWEN_DB_NODE *p_db){ assert(p_struct); /* member "iban" */ if (p_struct->iban) { free(p_struct->iban); p_struct->iban=NULL; p_struct->iban=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "iban", 0, NULL); if (s) p_struct->iban=strdup(s); } /* member "bic" */ if (p_struct->bic) { free(p_struct->bic); p_struct->bic=NULL; p_struct->bic=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "bic", 0, NULL); if (s) p_struct->bic=strdup(s); } /* member "accountNumber" */ if (p_struct->accountNumber) { free(p_struct->accountNumber); p_struct->accountNumber=NULL; p_struct->accountNumber=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "accountNumber", 0, NULL); if (s) p_struct->accountNumber=strdup(s); } /* member "subAccountNumber" */ if (p_struct->subAccountNumber) { free(p_struct->subAccountNumber); p_struct->subAccountNumber=NULL; p_struct->subAccountNumber=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "subAccountNumber", 0, NULL); if (s) p_struct->subAccountNumber=strdup(s); } /* member "country" */ if (p_struct->country) { free(p_struct->country); p_struct->country=NULL; p_struct->country=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "country", 0, NULL); if (s) p_struct->country=strdup(s); } /* member "bankCode" */ if (p_struct->bankCode) { free(p_struct->bankCode); p_struct->bankCode=NULL; p_struct->bankCode=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "bankCode", 0, NULL); if (s) p_struct->bankCode=strdup(s); } /* member "ownerName" */ if (p_struct->ownerName) { free(p_struct->ownerName); p_struct->ownerName=NULL; p_struct->ownerName=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "ownerName", 0, NULL); if (s) p_struct->ownerName=strdup(s); } /* member "ownerName2" */ if (p_struct->ownerName2) { free(p_struct->ownerName2); p_struct->ownerName2=NULL; p_struct->ownerName2=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "ownerName2", 0, NULL); if (s) p_struct->ownerName2=strdup(s); } /* member "accountName" */ if (p_struct->accountName) { free(p_struct->accountName); p_struct->accountName=NULL; p_struct->accountName=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "accountName", 0, NULL); if (s) p_struct->accountName=strdup(s); } /* member "accountType" */ p_struct->accountType=GWEN_DB_GetIntValue(p_db, "accountType", 0, 0); } int AB_ReferenceAccount_WriteDb(const AB_REFERENCE_ACCOUNT *p_struct, GWEN_DB_NODE *p_db) { int p_rv; assert(p_struct); /* member "iban" */ if (p_struct->iban) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "iban", p_struct->iban); else { GWEN_DB_DeleteVar(p_db, "iban"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "bic" */ if (p_struct->bic) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "bic", p_struct->bic); else { GWEN_DB_DeleteVar(p_db, "bic"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "accountNumber" */ if (p_struct->accountNumber) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "accountNumber", p_struct->accountNumber); else { GWEN_DB_DeleteVar(p_db, "accountNumber"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "subAccountNumber" */ if (p_struct->subAccountNumber) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "subAccountNumber", p_struct->subAccountNumber); else { GWEN_DB_DeleteVar(p_db, "subAccountNumber"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "country" */ if (p_struct->country) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "country", p_struct->country); else { GWEN_DB_DeleteVar(p_db, "country"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "bankCode" */ if (p_struct->bankCode) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "bankCode", p_struct->bankCode); else { GWEN_DB_DeleteVar(p_db, "bankCode"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "ownerName" */ if (p_struct->ownerName) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "ownerName", p_struct->ownerName); else { GWEN_DB_DeleteVar(p_db, "ownerName"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "ownerName2" */ if (p_struct->ownerName2) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "ownerName2", p_struct->ownerName2); else { GWEN_DB_DeleteVar(p_db, "ownerName2"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "accountName" */ if (p_struct->accountName) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "accountName", p_struct->accountName); else { GWEN_DB_DeleteVar(p_db, "accountName"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "accountType" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "accountType", p_struct->accountType); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } return 0; } AB_REFERENCE_ACCOUNT *AB_ReferenceAccount_fromDb(GWEN_DB_NODE *p_db) { AB_REFERENCE_ACCOUNT *p_struct; p_struct=AB_ReferenceAccount_new(); AB_ReferenceAccount_ReadDb(p_struct, p_db); return p_struct; } int AB_ReferenceAccount_toDb(const AB_REFERENCE_ACCOUNT *p_struct, GWEN_DB_NODE *p_db) { return AB_ReferenceAccount_WriteDb(p_struct, p_db); } void AB_ReferenceAccount_ReadXml(AB_REFERENCE_ACCOUNT *p_struct, GWEN_XMLNODE *p_db){ assert(p_struct); /* member "iban" */ if (p_struct->iban) { free(p_struct->iban); p_struct->iban=NULL; p_struct->iban=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "iban", NULL); if (s) p_struct->iban=strdup(s); } /* member "bic" */ if (p_struct->bic) { free(p_struct->bic); p_struct->bic=NULL; p_struct->bic=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "bic", NULL); if (s) p_struct->bic=strdup(s); } /* member "accountNumber" */ if (p_struct->accountNumber) { free(p_struct->accountNumber); p_struct->accountNumber=NULL; p_struct->accountNumber=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "accountNumber", NULL); if (s) p_struct->accountNumber=strdup(s); } /* member "subAccountNumber" */ if (p_struct->subAccountNumber) { free(p_struct->subAccountNumber); p_struct->subAccountNumber=NULL; p_struct->subAccountNumber=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "subAccountNumber", NULL); if (s) p_struct->subAccountNumber=strdup(s); } /* member "country" */ if (p_struct->country) { free(p_struct->country); p_struct->country=NULL; p_struct->country=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "country", NULL); if (s) p_struct->country=strdup(s); } /* member "bankCode" */ if (p_struct->bankCode) { free(p_struct->bankCode); p_struct->bankCode=NULL; p_struct->bankCode=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "bankCode", NULL); if (s) p_struct->bankCode=strdup(s); } /* member "ownerName" */ if (p_struct->ownerName) { free(p_struct->ownerName); p_struct->ownerName=NULL; p_struct->ownerName=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "ownerName", NULL); if (s) p_struct->ownerName=strdup(s); } /* member "ownerName2" */ if (p_struct->ownerName2) { free(p_struct->ownerName2); p_struct->ownerName2=NULL; p_struct->ownerName2=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "ownerName2", NULL); if (s) p_struct->ownerName2=strdup(s); } /* member "accountName" */ if (p_struct->accountName) { free(p_struct->accountName); p_struct->accountName=NULL; p_struct->accountName=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "accountName", NULL); if (s) p_struct->accountName=strdup(s); } /* member "accountType" */ p_struct->accountType=GWEN_XMLNode_GetIntValue(p_db, "accountType", 0); } void AB_ReferenceAccount_WriteXml(const AB_REFERENCE_ACCOUNT *p_struct, GWEN_XMLNODE *p_db) { assert(p_struct); /* member "iban" */ GWEN_XMLNode_SetCharValue(p_db, "iban", p_struct->iban); /* member "bic" */ GWEN_XMLNode_SetCharValue(p_db, "bic", p_struct->bic); /* member "accountNumber" */ GWEN_XMLNode_SetCharValue(p_db, "accountNumber", p_struct->accountNumber); /* member "subAccountNumber" */ GWEN_XMLNode_SetCharValue(p_db, "subAccountNumber", p_struct->subAccountNumber); /* member "country" */ GWEN_XMLNode_SetCharValue(p_db, "country", p_struct->country); /* member "bankCode" */ GWEN_XMLNode_SetCharValue(p_db, "bankCode", p_struct->bankCode); /* member "ownerName" */ GWEN_XMLNode_SetCharValue(p_db, "ownerName", p_struct->ownerName); /* member "ownerName2" */ GWEN_XMLNode_SetCharValue(p_db, "ownerName2", p_struct->ownerName2); /* member "accountName" */ GWEN_XMLNode_SetCharValue(p_db, "accountName", p_struct->accountName); /* member "accountType" */ GWEN_XMLNode_SetIntValue(p_db, "accountType", p_struct->accountType); } void AB_ReferenceAccount_toXml(const AB_REFERENCE_ACCOUNT *p_struct, GWEN_XMLNODE *p_db) { AB_ReferenceAccount_WriteXml(p_struct, p_db); } AB_REFERENCE_ACCOUNT *AB_ReferenceAccount_fromXml(GWEN_XMLNODE *p_db) { AB_REFERENCE_ACCOUNT *p_struct; p_struct=AB_ReferenceAccount_new(); AB_ReferenceAccount_ReadXml(p_struct, p_db); return p_struct; } int AB_ReferenceAccount_Matches(const AB_REFERENCE_ACCOUNT *a, const char *iban, const char *bic, const char *accountNumber, const char *subAccountNumber, const char *country, const char *bankCode, const char *ownerName, const char *accountName) { const char *liban; const char *lbic; const char *laccountNumber; const char *lsubAccountNumber; const char *lcountry; const char *lbankCode; const char *lownerName; const char *laccountName; if (!iban) iban="*"; if (!bic) bic="*"; if (!accountNumber) accountNumber="*"; if (!subAccountNumber) subAccountNumber="*"; if (!country) country="*"; if (!bankCode) bankCode="*"; if (!ownerName) ownerName="*"; if (!accountName) accountName="*"; liban=AB_ReferenceAccount_GetIban(a); lbic=AB_ReferenceAccount_GetBic(a); laccountNumber=AB_ReferenceAccount_GetAccountNumber(a); lsubAccountNumber=AB_ReferenceAccount_GetSubAccountNumber(a); lcountry=AB_ReferenceAccount_GetCountry(a); lbankCode=AB_ReferenceAccount_GetBankCode(a); lownerName=AB_ReferenceAccount_GetOwnerName(a); laccountName=AB_ReferenceAccount_GetAccountName(a); if (!liban) liban=""; if (!lbic) lbic=""; if (!laccountNumber) laccountNumber=""; if (!lsubAccountNumber) lsubAccountNumber=""; if (!lcountry) lcountry=""; if (!lbankCode) lbankCode=""; if (!lownerName) lownerName=""; if (!laccountName) laccountName=""; if ((-1!=GWEN_Text_ComparePattern(liban, iban, 0)) && (-1!=GWEN_Text_ComparePattern(lbic, bic, 0)) && (-1!=GWEN_Text_ComparePattern(laccountNumber, accountNumber, 0)) && (-1!=GWEN_Text_ComparePattern(lsubAccountNumber, subAccountNumber, 0)) && (-1!=GWEN_Text_ComparePattern(lcountry, country, 0)) && (-1!=GWEN_Text_ComparePattern(lbankCode, bankCode, 0)) && (-1!=GWEN_Text_ComparePattern(lownerName, ownerName, 0)) && (-1!=GWEN_Text_ComparePattern(laccountName, accountName, 0))) return 1; return 0; } AB_REFERENCE_ACCOUNT *AB_ReferenceAccount_List__FindInternal(AB_REFERENCE_ACCOUNT *a, const char *iban, const char *bic, const char *accountNumber, const char *subAccountNumber, const char *country, const char *bankCode, const char *ownerName, const char *accountName) { int rv; if (!iban) iban="*"; if (!bic) bic="*"; if (!accountNumber) accountNumber="*"; if (!subAccountNumber) subAccountNumber="*"; if (!country) country="*"; if (!bankCode) bankCode="*"; if (!ownerName) ownerName="*"; if (!accountName) accountName="*"; while(a) { rv=AB_ReferenceAccount_Matches(a, iban, bic, accountNumber, subAccountNumber, country, bankCode, ownerName, accountName); if (rv==1) break; a=AB_ReferenceAccount_List_Next(a); } /* while */ return a; } AB_REFERENCE_ACCOUNT *AB_ReferenceAccount_List_FindFirst(const AB_REFERENCE_ACCOUNT_LIST *al, const char *iban, const char *bic, const char *accountNumber, const char *subAccountNumber, const char *country, const char *bankCode, const char *ownerName, const char *accountName) { AB_REFERENCE_ACCOUNT *a; if (AB_ReferenceAccount_List_GetCount(al)==0) { DBG_INFO(AQBANKING_LOGDOMAIN, "No reference accounts"); return NULL; } a=AB_ReferenceAccount_List_First(al); assert(a); return AB_ReferenceAccount_List__FindInternal(a, iban, bic, accountNumber, subAccountNumber, country, bankCode, ownerName, accountName); } AB_REFERENCE_ACCOUNT *AB_ReferenceAccount_List_FindNext(AB_REFERENCE_ACCOUNT *a, const char *iban, const char *bic, const char *accountNumber, const char *subAccountNumber, const char *country, const char *bankCode, const char *ownerName, const char *accountName) { assert(a); a=AB_ReferenceAccount_List_Next(a); if (a==NULL) { DBG_INFO(AQBANKING_LOGDOMAIN, "No more reference accounts"); return NULL; } return AB_ReferenceAccount_List__FindInternal(a, iban, bic, accountNumber, subAccountNumber, country, bankCode, ownerName, accountName); } /* code headers */ aqbanking-6.6.1/src/libs/aqbanking/types/balance.h0000664000175000017500000001045515037736054016776 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "balance.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef AB_BALANCE_BALANCE_H #define AB_BALANCE_BALANCE_H #ifdef __cplusplus extern "C" { #endif /** @page P_AB_BALANCE Structure AB_BALANCE

This page describes the properties of AB_BALANCE.

AB_BALANCE

This class holds time and amount of an account balance. @anchor AB_BALANCE_date

date

Set this property with @ref AB_Balance_SetDate(), get it with @ref AB_Balance_GetDate().

@anchor AB_BALANCE_value

value

Set this property with @ref AB_Balance_SetValue(), get it with @ref AB_Balance_GetValue().

@anchor AB_BALANCE_type

type

Set this property with @ref AB_Balance_SetType(), get it with @ref AB_Balance_GetType().

*/ /* needed system headers */ #include #include #include #include /* pre-headers */ #include #include #include typedef struct AB_BALANCE AB_BALANCE; GWEN_LIST_FUNCTION_LIB_DEFS(AB_BALANCE, AB_Balance, AQBANKING_API) typedef enum { AB_Balance_TypeUnknown = -1, AB_Balance_TypeNone = 0, AB_Balance_TypeNoted, AB_Balance_TypeBooked, AB_Balance_TypeBankLine, AB_Balance_TypeDisposable, AB_Balance_TypeTemporary, AB_Balance_TypeDayStart, AB_Balance_TypeDayEnd } AB_BALANCE_TYPE; /* post-headers */ #include AQBANKING_API AB_BALANCE_TYPE AB_Balance_Type_fromString(const char *p_s); AQBANKING_API const char *AB_Balance_Type_toString(AB_BALANCE_TYPE p_i); /** Constructor. */ AQBANKING_API AB_BALANCE *AB_Balance_new(void); /** Destructor. */ AQBANKING_API void AB_Balance_free(AB_BALANCE *p_struct); AQBANKING_API void AB_Balance_Attach(AB_BALANCE *p_struct); AQBANKING_API AB_BALANCE *AB_Balance_dup(const AB_BALANCE *p_src); AQBANKING_API AB_BALANCE *AB_Balance_copy(AB_BALANCE *p_struct, const AB_BALANCE *p_src); /** Getter. * Use this function to get the member "date" (see @ref AB_BALANCE_date) */ AQBANKING_API const GWEN_DATE *AB_Balance_GetDate(const AB_BALANCE *p_struct); /** Getter. * Use this function to get the member "value" (see @ref AB_BALANCE_value) */ AQBANKING_API const AB_VALUE *AB_Balance_GetValue(const AB_BALANCE *p_struct); /** Getter. * Use this function to get the member "type" (see @ref AB_BALANCE_type) */ AQBANKING_API AB_BALANCE_TYPE AB_Balance_GetType(const AB_BALANCE *p_struct); /** Setter. * Use this function to set the member "date" (see @ref AB_BALANCE_date) */ AQBANKING_API void AB_Balance_SetDate(AB_BALANCE *p_struct, const GWEN_DATE *p_src); /** Setter. * Use this function to set the member "value" (see @ref AB_BALANCE_value) */ AQBANKING_API void AB_Balance_SetValue(AB_BALANCE *p_struct, const AB_VALUE *p_src); /** Setter. * Use this function to set the member "type" (see @ref AB_BALANCE_type) */ AQBANKING_API void AB_Balance_SetType(AB_BALANCE *p_struct, AB_BALANCE_TYPE p_src); AQBANKING_API AB_BALANCE_LIST *AB_Balance_List_dup(const AB_BALANCE_LIST *p_src); AQBANKING_API void AB_Balance_ReadDb(AB_BALANCE *p_struct, GWEN_DB_NODE *p_db); AQBANKING_API int AB_Balance_WriteDb(const AB_BALANCE *p_struct, GWEN_DB_NODE *p_db); AQBANKING_API AB_BALANCE *AB_Balance_fromDb(GWEN_DB_NODE *p_db); AQBANKING_API int AB_Balance_toDb(const AB_BALANCE *p_struct, GWEN_DB_NODE *p_db); AQBANKING_API void AB_Balance_ReadXml(AB_BALANCE *p_struct, GWEN_XMLNODE *p_db); AQBANKING_API void AB_Balance_WriteXml(const AB_BALANCE *p_struct, GWEN_XMLNODE *p_db); AQBANKING_API void AB_Balance_toXml(const AB_BALANCE *p_struct, GWEN_XMLNODE *p_db); AQBANKING_API AB_BALANCE *AB_Balance_fromXml(GWEN_XMLNODE *p_db); AQBANKING_API AB_BALANCE *AB_Balance_List_GetByType(const AB_BALANCE_LIST *p_list, int p_cmp); AQBANKING_API AB_BALANCE *AB_Balance_List_FindFirstByType(const AB_BALANCE_LIST *bl, int ty); AQBANKING_API AB_BALANCE *AB_Balance_List_FindNextByType(AB_BALANCE *bal, int ty); AQBANKING_API AB_BALANCE *AB_Balance_List_GetLatestByType(const AB_BALANCE_LIST *bl, int ty); #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/aqbanking/types/bankinfo.h0000664000175000017500000002311115037736054017171 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "bankinfo.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef AB_BANKINFO_BANKINFO_H #define AB_BANKINFO_BANKINFO_H #ifdef __cplusplus extern "C" { #endif /** @page P_AB_BANKINFO Structure AB_BANKINFO

This page describes the properties of AB_BANKINFO.

AB_BANKINFO

@anchor AB_BANKINFO_country

country

Set this property with @ref AB_BankInfo_SetCountry(), get it with @ref AB_BankInfo_GetCountry().

@anchor AB_BANKINFO_branchId

branchId

Set this property with @ref AB_BankInfo_SetBranchId(), get it with @ref AB_BankInfo_GetBranchId().

@anchor AB_BANKINFO_bankId

bankId

Set this property with @ref AB_BankInfo_SetBankId(), get it with @ref AB_BankInfo_GetBankId().

@anchor AB_BANKINFO_bic

bic

Set this property with @ref AB_BankInfo_SetBic(), get it with @ref AB_BankInfo_GetBic().

@anchor AB_BANKINFO_bankName

bankName

Set this property with @ref AB_BankInfo_SetBankName(), get it with @ref AB_BankInfo_GetBankName().

@anchor AB_BANKINFO_location

location

Set this property with @ref AB_BankInfo_SetLocation(), get it with @ref AB_BankInfo_GetLocation().

@anchor AB_BANKINFO_street

street

Set this property with @ref AB_BankInfo_SetStreet(), get it with @ref AB_BankInfo_GetStreet().

@anchor AB_BANKINFO_zipcode

zipcode

Set this property with @ref AB_BankInfo_SetZipcode(), get it with @ref AB_BankInfo_GetZipcode().

@anchor AB_BANKINFO_city

city

Set this property with @ref AB_BankInfo_SetCity(), get it with @ref AB_BankInfo_GetCity().

@anchor AB_BANKINFO_region

region

Set this property with @ref AB_BankInfo_SetRegion(), get it with @ref AB_BankInfo_GetRegion().

@anchor AB_BANKINFO_phone

phone

Set this property with @ref AB_BankInfo_SetPhone(), get it with @ref AB_BankInfo_GetPhone().

@anchor AB_BANKINFO_fax

fax

Set this property with @ref AB_BankInfo_SetFax(), get it with @ref AB_BankInfo_GetFax().

@anchor AB_BANKINFO_email

email

Set this property with @ref AB_BankInfo_SetEmail(), get it with @ref AB_BankInfo_GetEmail().

@anchor AB_BANKINFO_website

website

Set this property with @ref AB_BankInfo_SetWebsite(), get it with @ref AB_BankInfo_GetWebsite().

@anchor AB_BANKINFO_services

services

Set this property with @ref AB_BankInfo_SetServices(), get it with @ref AB_BankInfo_GetServices().

*/ /* needed system headers */ #include #include #include #include #include /* pre-headers */ #include #include typedef struct AB_BANKINFO AB_BANKINFO; GWEN_LIST_FUNCTION_LIB_DEFS(AB_BANKINFO, AB_BankInfo, AQBANKING_API) GWEN_LIST2_FUNCTION_LIB_DEFS(AB_BANKINFO, AB_BankInfo, AQBANKING_API) /* post-headers */ #include /** Constructor. */ AQBANKING_API AB_BANKINFO *AB_BankInfo_new(void); /** Destructor. */ AQBANKING_API void AB_BankInfo_free(AB_BANKINFO *p_struct); AQBANKING_API void AB_BankInfo_Attach(AB_BANKINFO *p_struct); AQBANKING_API AB_BANKINFO *AB_BankInfo_dup(const AB_BANKINFO *p_src); AQBANKING_API AB_BANKINFO *AB_BankInfo_copy(AB_BANKINFO *p_struct, const AB_BANKINFO *p_src); /** Getter. * Use this function to get the member "country" (see @ref AB_BANKINFO_country) */ AQBANKING_API const char *AB_BankInfo_GetCountry(const AB_BANKINFO *p_struct); /** Getter. * Use this function to get the member "branchId" (see @ref AB_BANKINFO_branchId) */ AQBANKING_API const char *AB_BankInfo_GetBranchId(const AB_BANKINFO *p_struct); /** Getter. * Use this function to get the member "bankId" (see @ref AB_BANKINFO_bankId) */ AQBANKING_API const char *AB_BankInfo_GetBankId(const AB_BANKINFO *p_struct); /** Getter. * Use this function to get the member "bic" (see @ref AB_BANKINFO_bic) */ AQBANKING_API const char *AB_BankInfo_GetBic(const AB_BANKINFO *p_struct); /** Getter. * Use this function to get the member "bankName" (see @ref AB_BANKINFO_bankName) */ AQBANKING_API const char *AB_BankInfo_GetBankName(const AB_BANKINFO *p_struct); /** Getter. * Use this function to get the member "location" (see @ref AB_BANKINFO_location) */ AQBANKING_API const char *AB_BankInfo_GetLocation(const AB_BANKINFO *p_struct); /** Getter. * Use this function to get the member "street" (see @ref AB_BANKINFO_street) */ AQBANKING_API const char *AB_BankInfo_GetStreet(const AB_BANKINFO *p_struct); /** Getter. * Use this function to get the member "zipcode" (see @ref AB_BANKINFO_zipcode) */ AQBANKING_API const char *AB_BankInfo_GetZipcode(const AB_BANKINFO *p_struct); /** Getter. * Use this function to get the member "city" (see @ref AB_BANKINFO_city) */ AQBANKING_API const char *AB_BankInfo_GetCity(const AB_BANKINFO *p_struct); /** Getter. * Use this function to get the member "region" (see @ref AB_BANKINFO_region) */ AQBANKING_API const char *AB_BankInfo_GetRegion(const AB_BANKINFO *p_struct); /** Getter. * Use this function to get the member "phone" (see @ref AB_BANKINFO_phone) */ AQBANKING_API const char *AB_BankInfo_GetPhone(const AB_BANKINFO *p_struct); /** Getter. * Use this function to get the member "fax" (see @ref AB_BANKINFO_fax) */ AQBANKING_API const char *AB_BankInfo_GetFax(const AB_BANKINFO *p_struct); /** Getter. * Use this function to get the member "email" (see @ref AB_BANKINFO_email) */ AQBANKING_API const char *AB_BankInfo_GetEmail(const AB_BANKINFO *p_struct); /** Getter. * Use this function to get the member "website" (see @ref AB_BANKINFO_website) */ AQBANKING_API const char *AB_BankInfo_GetWebsite(const AB_BANKINFO *p_struct); /** Getter. * Use this function to get the member "services" (see @ref AB_BANKINFO_services) */ AQBANKING_API AB_BANKINFO_SERVICE_LIST *AB_BankInfo_GetServices(const AB_BANKINFO *p_struct); /** Setter. * Use this function to set the member "country" (see @ref AB_BANKINFO_country) */ AQBANKING_API void AB_BankInfo_SetCountry(AB_BANKINFO *p_struct, const char *p_src); /** Setter. * Use this function to set the member "branchId" (see @ref AB_BANKINFO_branchId) */ AQBANKING_API void AB_BankInfo_SetBranchId(AB_BANKINFO *p_struct, const char *p_src); /** Setter. * Use this function to set the member "bankId" (see @ref AB_BANKINFO_bankId) */ AQBANKING_API void AB_BankInfo_SetBankId(AB_BANKINFO *p_struct, const char *p_src); /** Setter. * Use this function to set the member "bic" (see @ref AB_BANKINFO_bic) */ AQBANKING_API void AB_BankInfo_SetBic(AB_BANKINFO *p_struct, const char *p_src); /** Setter. * Use this function to set the member "bankName" (see @ref AB_BANKINFO_bankName) */ AQBANKING_API void AB_BankInfo_SetBankName(AB_BANKINFO *p_struct, const char *p_src); /** Setter. * Use this function to set the member "location" (see @ref AB_BANKINFO_location) */ AQBANKING_API void AB_BankInfo_SetLocation(AB_BANKINFO *p_struct, const char *p_src); /** Setter. * Use this function to set the member "street" (see @ref AB_BANKINFO_street) */ AQBANKING_API void AB_BankInfo_SetStreet(AB_BANKINFO *p_struct, const char *p_src); /** Setter. * Use this function to set the member "zipcode" (see @ref AB_BANKINFO_zipcode) */ AQBANKING_API void AB_BankInfo_SetZipcode(AB_BANKINFO *p_struct, const char *p_src); /** Setter. * Use this function to set the member "city" (see @ref AB_BANKINFO_city) */ AQBANKING_API void AB_BankInfo_SetCity(AB_BANKINFO *p_struct, const char *p_src); /** Setter. * Use this function to set the member "region" (see @ref AB_BANKINFO_region) */ AQBANKING_API void AB_BankInfo_SetRegion(AB_BANKINFO *p_struct, const char *p_src); /** Setter. * Use this function to set the member "phone" (see @ref AB_BANKINFO_phone) */ AQBANKING_API void AB_BankInfo_SetPhone(AB_BANKINFO *p_struct, const char *p_src); /** Setter. * Use this function to set the member "fax" (see @ref AB_BANKINFO_fax) */ AQBANKING_API void AB_BankInfo_SetFax(AB_BANKINFO *p_struct, const char *p_src); /** Setter. * Use this function to set the member "email" (see @ref AB_BANKINFO_email) */ AQBANKING_API void AB_BankInfo_SetEmail(AB_BANKINFO *p_struct, const char *p_src); /** Setter. * Use this function to set the member "website" (see @ref AB_BANKINFO_website) */ AQBANKING_API void AB_BankInfo_SetWebsite(AB_BANKINFO *p_struct, const char *p_src); /** Setter. * Use this function to set the member "services" (see @ref AB_BANKINFO_services) */ AQBANKING_API void AB_BankInfo_SetServices(AB_BANKINFO *p_struct, AB_BANKINFO_SERVICE_LIST *p_src); AQBANKING_API AB_BANKINFO_LIST *AB_BankInfo_List_dup(const AB_BANKINFO_LIST *p_src); AQBANKING_API void AB_BankInfo_ReadDb(AB_BANKINFO *p_struct, GWEN_DB_NODE *p_db); AQBANKING_API int AB_BankInfo_WriteDb(const AB_BANKINFO *p_struct, GWEN_DB_NODE *p_db); AQBANKING_API AB_BANKINFO *AB_BankInfo_fromDb(GWEN_DB_NODE *p_db); AQBANKING_API int AB_BankInfo_toDb(const AB_BANKINFO *p_struct, GWEN_DB_NODE *p_db); AQBANKING_API void AB_BankInfo_ReadXml(AB_BANKINFO *p_struct, GWEN_XMLNODE *p_db); AQBANKING_API void AB_BankInfo_WriteXml(const AB_BANKINFO *p_struct, GWEN_XMLNODE *p_db); AQBANKING_API void AB_BankInfo_toXml(const AB_BANKINFO *p_struct, GWEN_XMLNODE *p_db); AQBANKING_API AB_BANKINFO *AB_BankInfo_fromXml(GWEN_XMLNODE *p_db); AQBANKING_API int AB_BankInfo_List2_freeAll(AB_BANKINFO_LIST2 *tl); #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/aqbanking/types/imexporter_accountinfo.xml0000664000175000017500000011535014043610744022541 00000000000000 AB_IMEXPORTER_ACCOUNTINFO AB_ImExporterAccountInfo imexporter_accountInfo with_db with_xml with_list1 with_list2 with_refcount with_hash
aqbanking/error.h
gwenhywfar/types.h
gwenhywfar/gwentime.h
aqbanking/types/transaction.h
aqbanking/types/document.h
aqbanking/account_type.h
aqbanking/types/balance.h
with_list2 with_list2 $(api) int $(struct_prefix)_List2_freeAll($(struct_type)_LIST2 *tl); with_list2 with_list2 static $(struct_type) *$(struct_prefix)_List2__freeAll_cb($(struct_type) *t, void *user_data) { $(struct_prefix)_free(t); return NULL; } int $(struct_prefix)_List2_freeAll($(struct_type)_LIST2 *tl) { if (tl) { $(struct_prefix)_List2_ForEach(tl, $(struct_prefix)_List2__freeAll_cb, NULL); $(struct_prefix)_List2_free(tl); } else { DBG_ERROR(AQBANKING_LOGDOMAIN, "List missing"); return GWEN_ERROR_INVALID; } return 0; } $(api) AB_TRANSACTION *$(struct_prefix)_GetFirstTransaction(const $(struct_type) *t, int ty, int cmd); AB_TRANSACTION *$(struct_prefix)_GetFirstTransaction(const $(struct_type) *st, int ty, int cmd) { assert(st); if (st->transactionList) return AB_Transaction_List_FindFirstByType(st->transactionList, ty, cmd); return NULL; } $(api) void $(struct_prefix)_AddTransaction($(struct_type) *st, AB_TRANSACTION *t); void $(struct_prefix)_AddTransaction($(struct_type) *st, AB_TRANSACTION *t) { assert(st); if (NULL==st->transactionList) st->transactionList=AB_Transaction_List_new(); AB_Transaction_List_Add(t, st->transactionList); } $(api) int $(struct_prefix)_GetTransactionCount(const $(struct_type) *t, int ty, int cmd); int $(struct_prefix)_GetTransactionCount(const $(struct_type) *st, int ty, int cmd) { assert(st); if (st->transactionList) return AB_Transaction_List_CountByType(st->transactionList, ty, cmd); return 0; } $(api) AB_BALANCE *$(struct_prefix)_GetFirstBalance(const $(struct_type) *as); AB_BALANCE *$(struct_prefix)_GetFirstBalance(const $(struct_type) *st) { assert(st); if (st->balanceList) return AB_Balance_List_First(st->balanceList); return NULL; } $(api) void $(struct_prefix)_AddBalance($(struct_type) *st, AB_BALANCE *bal); void $(struct_prefix)_AddBalance($(struct_type) *st, AB_BALANCE *bal) { assert(bal); if (NULL==st->balanceList) st->balanceList=AB_Balance_List_new(); AB_Balance_List_Add(bal, st->balanceList); } $(api) AB_DOCUMENT *$(struct_prefix)_GetFirstEStatement(const $(struct_type) *st); AB_DOCUMENT *$(struct_prefix)_GetFirstEStatement(const $(struct_type) *st) { assert(st); if (st->eStatementList) return AB_Document_List_First(st->eStatementList); return NULL; } $(api) void $(struct_prefix)_AddEStatement($(struct_type) *st, AB_DOCUMENT *d); void $(struct_prefix)_AddEStatement($(struct_type) *st, AB_DOCUMENT *d) { assert(d); if (NULL==st->eStatementList) st->eStatementList=AB_Document_List_new(); AB_Document_List_Add(d, st->eStatementList); } /** \n * This function clears the account info (e.g. removes all transactions etc). \n */ \n $(api) void $(struct_prefix)_Clear($(struct_type) *st); void $(struct_prefix)_Clear($(struct_type) *st) { assert(st); if (st->transactionList) AB_Transaction_List_Clear(st->transactionList); if (st->balanceList) AB_Balance_List_Clear(st->balanceList); if (st->eStatementList) AB_Document_List_Clear(st->eStatementList); } $(api) void $(struct_prefix)_FillFromTransaction($(struct_type) *st, const AB_TRANSACTION *t); void $(struct_prefix)_FillFromTransaction($(struct_type) *st, const AB_TRANSACTION *t) { const char *s; assert(st); assert(t); s=AB_Transaction_GetLocalBankCode(t); $(struct_prefix)_SetBankCode(st, s); s=AB_Transaction_GetLocalAccountNumber(t); $(struct_prefix)_SetAccountNumber(st, s); s=AB_Transaction_GetLocalSuffix(t); $(struct_prefix)_SetSubAccountId(st, s); s=AB_Transaction_GetLocalIban(t); $(struct_prefix)_SetIban(st, s); s=AB_Transaction_GetLocalBic(t); $(struct_prefix)_SetBic(st, s); s=AB_Transaction_GetLocalName(t); $(struct_prefix)_SetOwner(st, s); } $(api) AB_IMEXPORTER_ACCOUNTINFO *$(struct_prefix)_List_GetByBankCodeAndAccountNumber($(struct_type)_LIST *l, const char *bankCode, const char *accountNumber, int accountType); AB_IMEXPORTER_ACCOUNTINFO *$(struct_prefix)_List_GetByBankCodeAndAccountNumber($(struct_type)_LIST *l, const char *bankCode, const char *accountNumber, int accountType) { AB_IMEXPORTER_ACCOUNTINFO *iea; assert(l); if (!bankCode) bankCode=""; if (!accountNumber) accountNumber=""; iea=$(struct_prefix)_List_First(l); while(iea) { const char *sBankCode; const char *sAccountNumber; sBankCode=$(struct_prefix)_GetBankCode(iea); if (sBankCode==NULL) sBankCode=""; sAccountNumber=$(struct_prefix)_GetAccountNumber(iea); if (sAccountNumber==NULL) sAccountNumber=""; if ((strcasecmp(sBankCode, bankCode)==0) && (strcasecmp(sAccountNumber, accountNumber)==0) && ((accountType<=AB_AccountType_Unknown) || (accountType==$(struct_prefix)_GetAccountType(iea))) ) return iea; iea=$(struct_prefix)_List_Next(iea); } return NULL; } $(api) AB_IMEXPORTER_ACCOUNTINFO *$(struct_prefix)_List_Find($(struct_type)_LIST *l, uint32_t uniqueId, const char *iban, const char *bankCode, const char *accountNumber, int accountType); AB_IMEXPORTER_ACCOUNTINFO *$(struct_prefix)_List_Find($(struct_type)_LIST *l, uint32_t uniqueId, const char *iban, const char *bankCode, const char *accountNumber, int accountType) { AB_IMEXPORTER_ACCOUNTINFO *iea=NULL; assert(l); if (uniqueId) iea=$(struct_prefix)_List_GetByAccountId(l, uniqueId); if (iea==NULL && iban && *iban) $(struct_prefix)_List_GetByIban(l, iban); if (iea==NULL) iea=$(struct_prefix)_List_GetByBankCodeAndAccountNumber(l, bankCode, accountNumber, accountType); return iea; } /** \n * Check whether a given account info object matches the given criteria. \n * @param a account info object to match \n * @param uniqueId unique account id (use 0 as wildcard) \n * @param country ISO code of the country (wildcards and jokers allowed) \n * @param bankId bank code to search for (wildcards and jokers allowed) \n * @param accountNumber account number to search for (wildcards and jokers allowed) \n * @param subAccountId sub account number (wildcards and jokers allowed) \n * @param iban IBAN to search for (wildcards and jokers allowed) \n * @param currency currecny the account uses (wildcards and jokers allowed) \n * @param ty account type (use AB_AccountType_Unknown as wildcard) \n */ \n $(api) int $(struct_prefix)_Matches(const $(struct_type) *a, uint32_t uniqueId, const char *country, const char *bankId, const char *accountNumber, const char *subAccountId, const char *iban, const char *currency, int ty); int $(struct_prefix)_Matches(const $(struct_type) *a, uint32_t uniqueId, const char *country, const char *bankId, const char *accountNumber, const char *subAccountId, const char *iban, const char *currency, int ty) { const char *lcountry; const char *lbankId; const char *laccountNumber; const char *lsubAccountId; const char *liban; const char *lcurrency; int lty; if (!country) country="*"; if (!bankId) bankId="*"; if (!accountNumber) accountNumber="*"; if (!subAccountId) subAccountId="*"; if (!iban) iban="*"; if (!currency) currency="*"; if (ty>=AB_AccountType_Last) ty=AB_AccountType_Unknown; lcountry=$(struct_prefix)_GetCountry(a); lbankId=$(struct_prefix)_GetBankCode(a); laccountNumber=$(struct_prefix)_GetAccountNumber(a); lsubAccountId=$(struct_prefix)_GetSubAccountId(a); liban=$(struct_prefix)_GetIban(a); lcurrency=$(struct_prefix)_GetCurrency(a); lty=$(struct_prefix)_GetAccountType(a); if (!lcountry) lcountry=""; if (!lbankId) lbankId=""; if (!laccountNumber) laccountNumber=""; if (!lsubAccountId) lsubAccountId=""; if (!liban) liban=""; if (!lcurrency) lcurrency=""; if (lty>=AB_AccountType_Last || lty <=AB_AccountType_Unknown) lty=AB_AccountType_Unknown; if (((uniqueId==0 || uniqueId==$(struct_prefix)_GetAccountId(a))) && (-1!=GWEN_Text_ComparePattern(lcountry, country, 0)) && (-1!=GWEN_Text_ComparePattern(lbankId, bankId, 0)) && (-1!=GWEN_Text_ComparePattern(laccountNumber, accountNumber, 0)) && (-1!=GWEN_Text_ComparePattern(lsubAccountId, subAccountId, 0)) && (-1!=GWEN_Text_ComparePattern(liban, iban, 0)) && (-1!=GWEN_Text_ComparePattern(lcurrency, currency, 0)) && ((ty==AB_AccountType_Unknown) || (ty==lty))) return 1; return 0; } with_list1 with_list1 /** \n * Find an account info object in a list of account info objects. \n * @param a account info object with which to start searching \n * @param uniqueId unique account id (use 0 as wildcard) \n * @param country ISO code of the country (wildcards and jokers allowed) \n * @param bankId bank code to search for (wildcards and jokers allowed) \n * @param accountNumber account number to search for (wildcards and jokers allowed) \n * @param subAccountId sub account number (wildcards and jokers allowed) \n * @param iban IBAN to search for (wildcards and jokers allowed) \n * @param currency currecny the account uses (wildcards and jokers allowed) \n * @param ty account type (use AB_AccountType_Unknown as wildcard) \n */ \n $(struct_type) *$(struct_prefix)_List__FindInternal($(struct_type) *a, uint32_t uniqueId, const char *country, const char *bankId, const char *accountNumber, const char *subAccountId, const char *iban, const char *currency, int ty); with_list1 with_list1 $(struct_type) *$(struct_prefix)_List__FindInternal($(struct_type) *a, uint32_t uniqueId, const char *country, const char *bankId, const char *accountNumber, const char *subAccountId, const char *iban, const char *currency, int ty) { if (!country) country="*"; if (!bankId) bankId="*"; if (!accountNumber) accountNumber="*"; if (!subAccountId) subAccountId="*"; if (!iban) iban="*"; if (!currency) currency="*"; if (ty>=AB_AccountType_Last) ty=AB_AccountType_Unknown; while(a) { int rv; rv=$(struct_prefix)_Matches(a, uniqueId, country, bankId, accountNumber, subAccountId, iban, currency, ty); if (rv==1) break; a=$(struct_prefix)_List_Next(a); } /* while */ return a; } with_list1 with_list1 /** \n * Find the first matching account info object in a list of account info objects. \n * @param al list of account info objects among to search \n * @param uniqueId unique account id (use 0 as wildcard) \n * @param country ISO code of the country (wildcards and jokers allowed) \n * @param bankId bank code to search for (wildcards and jokers allowed) \n * @param accountNumber account number to search for (wildcards and jokers allowed) \n * @param subAccountId sub account number (wildcards and jokers allowed) \n * @param iban IBAN to search for (wildcards and jokers allowed) \n * @param currency currecny the account uses (wildcards and jokers allowed) \n * @param ty account type (use AB_AccountType_Unknown as wildcard) \n */ \n $(api) $(struct_type) *$(struct_prefix)_List_FindFirst($(struct_type)_LIST *al, uint32_t uniqueId, const char *country, const char *bankId, const char *accountNumber, const char *subAccountId, const char *iban, const char *currency, int ty); with_list1 with_list1 $(struct_type) *$(struct_prefix)_List_FindFirst($(struct_type)_LIST *al, uint32_t uniqueId, const char *country, const char *bankId, const char *accountNumber, const char *subAccountId, const char *iban, const char *currency, int ty) { $(struct_type) *a; if ($(struct_prefix)_List_GetCount(al)==0) { DBG_INFO(AQBANKING_LOGDOMAIN, "No accounts"); return NULL; } a=$(struct_prefix)_List_First(al); assert(a); return $(struct_prefix)_List__FindInternal(a, uniqueId, country, bankId, accountNumber, subAccountId, iban, currency, ty); } with_list1 with_list1 /** \n * Find the next matching account info object in a list of account info objects. \n * @param a previous matching account info objects among to search \n * @param uniqueId unique account id (use 0 as wildcard) \n * @param country ISO code of the country (wildcards and jokers allowed) \n * @param bankId bank code to search for (wildcards and jokers allowed) \n * @param accountNumber account number to search for (wildcards and jokers allowed) \n * @param subAccountId sub account number (wildcards and jokers allowed) \n * @param iban IBAN to search for (wildcards and jokers allowed) \n * @param currency currecny the account uses (wildcards and jokers allowed) \n * @param ty account type (use AB_AccountType_Unknown as wildcard) \n */ \n $(api) $(struct_type) *$(struct_prefix)_List_FindNext($(struct_type) *a, uint32_t uniqueId, const char *country, const char *bankId, const char *accountNumber, const char *subAccountId, const char *iban, const char *currency, int ty); with_list1 with_list1 $(struct_type) *$(struct_prefix)_List_FindNext($(struct_type) *a, uint32_t uniqueId, const char *country, const char *bankId, const char *accountNumber, const char *subAccountId, const char *iban, const char *currency, int ty) { assert(a); a=$(struct_prefix)_List_Next(a); if (a==NULL) { DBG_INFO(AQBANKING_LOGDOMAIN, "No more account specs"); return NULL; } return $(struct_prefix)_List__FindInternal(a, uniqueId, country, bankId, accountNumber, subAccountId, iban, currency, ty); } $(api) AB_IMEXPORTER_ACCOUNTINFO *$(struct_prefix)_List_GetOrAdd($(struct_type)_LIST *l, uint32_t uniqueId, const char *iban, const char *bankCode, const char *accountNumber, int accountType); AB_IMEXPORTER_ACCOUNTINFO *$(struct_prefix)_List_GetOrAdd($(struct_type)_LIST *l, uint32_t uniqueId, const char *iban, const char *bankCode, const char *accountNumber, int accountType) { AB_IMEXPORTER_ACCOUNTINFO *iea=NULL; assert(l); iea=$(struct_prefix)_List_Find(l, uniqueId, iban, bankCode, accountNumber, accountType); if (iea==NULL) { iea=$(struct_prefix)_new(); $(struct_prefix)_SetAccountId(iea, uniqueId); $(struct_prefix)_SetIban(iea, iban); $(struct_prefix)_SetBankCode(iea, bankCode); $(struct_prefix)_SetAccountNumber(iea, accountNumber); $(struct_prefix)_SetAccountType(iea, accountType); $(struct_prefix)_List_Add(iea, l); } return iea; }
public own with_hash const dup const public own with_hash const dup const public own with_hash const dup const public own with_hash const dup const public own with_hash const dup const public own with_hash const dup const public own with_hash with_getbyMember const dup const public own with_hash const dup const public own with_hash const dup const public own with_hash const dup const public own with_hash const dup const 0 0 public with_hash none none with_hash with_getbyMember 0 0 public NULL AB_Balance_List_new() public own nodup none List of transactions. This list contains any kind of transactions all in one list. You can differentiate the type of the transaction (e.g. bank statement, debit note, transfer etc) by looking at the transaction type (see @ref AB_Transaction_GetType). NULL AB_Transaction_List_new() public own nodup none NULL AB_Document_List_new() public own nodup none
aqbanking-6.6.1/src/libs/aqbanking/types/imexporter_accountinfo_p.h0000664000175000017500000000373115037736054022515 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "imexporter_accountinfo.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef AB_IMEXPORTER_ACCOUNTINFO_IMEXPORTER_ACCOUNTINFO_P_H #define AB_IMEXPORTER_ACCOUNTINFO_IMEXPORTER_ACCOUNTINFO_P_H #include "./imexporter_accountinfo.h" #ifdef __cplusplus extern "C" { #endif struct AB_IMEXPORTER_ACCOUNTINFO { GWEN_LIST_ELEMENT(AB_IMEXPORTER_ACCOUNTINFO) int _refCount; char *country; char *bankCode; char *bankName; char *accountNumber; char *subAccountId; char *accountName; char *iban; char *bic; char *owner; char *currency; char *description; int accountType; uint32_t accountId; AB_BALANCE_LIST *balanceList; AB_TRANSACTION_LIST *transactionList; AB_DOCUMENT_LIST *eStatementList; }; /** * Find an account info object in a list of account info objects. * @param a account info object with which to start searching * @param uniqueId unique account id (use 0 as wildcard) * @param country ISO code of the country (wildcards and jokers allowed) * @param bankId bank code to search for (wildcards and jokers allowed) * @param accountNumber account number to search for (wildcards and jokers allowed) * @param subAccountId sub account number (wildcards and jokers allowed) * @param iban IBAN to search for (wildcards and jokers allowed) * @param currency currecny the account uses (wildcards and jokers allowed) * @param ty account type (use AB_AccountType_Unknown as wildcard) */ AB_IMEXPORTER_ACCOUNTINFO *AB_ImExporterAccountInfo_List__FindInternal(AB_IMEXPORTER_ACCOUNTINFO *a, uint32_t uniqueId, const char *country, const char *bankId, const char *accountNumber, const char *subAccountId, const char *iban, const char *currency, int ty); #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/aqbanking/types/Makefile.in0000644000175000017500000007741615037736024017312 00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ #SUBDIRS=typemaker2 VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/libs/aqbanking/types ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/distri.m4 $(top_srcdir)/m4/gwenhywfar.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/os.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(dist_typedata_DATA) \ $(iheader_HEADERS) $(noinst_HEADERS) $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libabtypes_la_LIBADD = am__objects_1 = transaction.lo transactionlimits.lo refaccount.lo \ bankinfoservice.lo bankinfo.lo document.lo message.lo \ security.lo balance.lo imexporter_accountinfo.lo \ imexporter_context.lo account_spec.lo am_libabtypes_la_OBJECTS = $(am__objects_1) value.lo libabtypes_la_OBJECTS = $(am_libabtypes_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/account_spec.Plo \ ./$(DEPDIR)/balance.Plo ./$(DEPDIR)/bankinfo.Plo \ ./$(DEPDIR)/bankinfoservice.Plo ./$(DEPDIR)/document.Plo \ ./$(DEPDIR)/imexporter_accountinfo.Plo \ ./$(DEPDIR)/imexporter_context.Plo ./$(DEPDIR)/message.Plo \ ./$(DEPDIR)/refaccount.Plo ./$(DEPDIR)/security.Plo \ ./$(DEPDIR)/transaction.Plo ./$(DEPDIR)/transactionlimits.Plo \ ./$(DEPDIR)/value.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libabtypes_la_SOURCES) DIST_SOURCES = $(libabtypes_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(typedatadir)" "$(DESTDIR)$(iheaderdir)" DATA = $(dist_typedata_DATA) HEADERS = $(iheader_HEADERS) $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADD_ACLOCAL_FLAGS = @ADD_ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AQBANKING_CLI_VERSION_STRING = @AQBANKING_CLI_VERSION_STRING@ AQBANKING_FINTS_VERSION_STRING = @AQBANKING_FINTS_VERSION_STRING@ AQBANKING_SO_AGE = @AQBANKING_SO_AGE@ AQBANKING_SO_CURRENT = @AQBANKING_SO_CURRENT@ AQBANKING_SO_EFFECTIVE = @AQBANKING_SO_EFFECTIVE@ AQBANKING_SO_REVISION = @AQBANKING_SO_REVISION@ AQBANKING_VERSION_BUILD = @AQBANKING_VERSION_BUILD@ AQBANKING_VERSION_FULL_STRING = @AQBANKING_VERSION_FULL_STRING@ AQBANKING_VERSION_MAJOR = @AQBANKING_VERSION_MAJOR@ AQBANKING_VERSION_MINOR = @AQBANKING_VERSION_MINOR@ AQBANKING_VERSION_PATCHLEVEL = @AQBANKING_VERSION_PATCHLEVEL@ AQBANKING_VERSION_RELEASE_STRING = @AQBANKING_VERSION_RELEASE_STRING@ AQBANKING_VERSION_STRING = @AQBANKING_VERSION_STRING@ AQBANKING_VERSION_TAG = @AQBANKING_VERSION_TAG@ AQEBICS_CFLAGS = @AQEBICS_CFLAGS@ AQEBICS_LIBS = @AQEBICS_LIBS@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATETIME = @DATETIME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_EXCLUDE_PATTERNS = @DOXYGEN_EXCLUDE_PATTERNS@ DOXYGEN_FILE_PATTERNS = @DOXYGEN_FILE_PATTERNS@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENGUI_GTK2_CFLAGS = @GWENGUI_GTK2_CFLAGS@ GWENGUI_GTK2_LIBS = @GWENGUI_GTK2_LIBS@ GWENHYWFAR_MINIMUM_VERSION = @GWENHYWFAR_MINIMUM_VERSION@ HAVE_GWENGUI_GTK2 = @HAVE_GWENGUI_GTK2@ HAVE_I18N = @HAVE_I18N@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIBXSLT_CFLAGS = @LIBXSLT_CFLAGS@ LIBXSLT_LIBS = @LIBXSLT_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_SUPPORTS_QT = @MSGFMT_SUPPORTS_QT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ TUTORIALS = @TUTORIALS@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XMLMERGE = @XMLMERGE@ XMLSEC_CFLAGS = @XMLSEC_CFLAGS@ XMLSEC_LIBS = @XMLSEC_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ aqbanking_backends = @aqbanking_backends@ aqbanking_cfg_searchdir = @aqbanking_cfg_searchdir@ aqbanking_data_searchdir = @aqbanking_data_searchdir@ aqbanking_headerdir = @aqbanking_headerdir@ aqbanking_headerdir_am = @aqbanking_headerdir_am@ aqbanking_includes = @aqbanking_includes@ aqbanking_internal_libs = @aqbanking_internal_libs@ aqbanking_ldflags = @aqbanking_ldflags@ aqbanking_libs = @aqbanking_libs@ aqbanking_locale_searchdir = @aqbanking_locale_searchdir@ aqbanking_modules = @aqbanking_modules@ aqbanking_pkgdatadir = @aqbanking_pkgdatadir@ aqbanking_plugin_searchdir = @aqbanking_plugin_searchdir@ aqbanking_plugindir = @aqbanking_plugindir@ aqbanking_plugins_backends_dirs = @aqbanking_plugins_backends_dirs@ aqbanking_plugins_backends_libs = @aqbanking_plugins_backends_libs@ aqbanking_plugins_bankinfo_dirs = @aqbanking_plugins_bankinfo_dirs@ aqbanking_plugins_bankinfo_libs = @aqbanking_plugins_bankinfo_libs@ aqbanking_plugins_imexporters_dirs = @aqbanking_plugins_imexporters_dirs@ aqbanking_plugins_imexporters_libs = @aqbanking_plugins_imexporters_libs@ aqbanking_plugins_parsers_dirs = @aqbanking_plugins_parsers_dirs@ aqbanking_symlinkdir = @aqbanking_symlinkdir@ aqbanking_sys_is_windows = @aqbanking_sys_is_windows@ aqbankingpp_modules = @aqbankingpp_modules@ aqebics_datadir = @aqebics_datadir@ aqebics_includes = @aqebics_includes@ aqebics_internal_libs = @aqebics_internal_libs@ aqebics_ldflags = @aqebics_ldflags@ aqebics_libs = @aqebics_libs@ aqfints_datadir = @aqfints_datadir@ aqhbci_datadir = @aqhbci_datadir@ aqhbci_includes = @aqhbci_includes@ aqhbci_internal_libs = @aqhbci_internal_libs@ aqhbci_ldflags = @aqhbci_ldflags@ aqhbci_libs = @aqhbci_libs@ aqofxconnect_includes = @aqofxconnect_includes@ aqofxconnect_internal_libs = @aqofxconnect_internal_libs@ aqofxconnect_libs = @aqofxconnect_libs@ aqpaypal_includes = @aqpaypal_includes@ aqpaypal_internal_libs = @aqpaypal_internal_libs@ aqpaypal_libs = @aqpaypal_libs@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gmp_libs = @gmp_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_dir = @gwenhywfar_dir@ gwenhywfar_has_crypt = @gwenhywfar_has_crypt@ gwenhywfar_headers = @gwenhywfar_headers@ gwenhywfar_includes = @gwenhywfar_includes@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_plugins = @gwenhywfar_plugins@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ typemaker2_exe = @typemaker2_exe@ visibility_cflags = @visibility_cflags@ with_aqebics = @with_aqebics@ with_aqhbci = @with_aqhbci@ AM_CPPFLAGS = -I$(srcdir)/../.. -I$(srcdir)/.. \ -I$(top_builddir)/src/libs \ $(gwenhywfar_includes) AM_CFLAGS = -DBUILDING_AQBANKING @visibility_cflags@ noinst_LTLIBRARIES = libabtypes.la typefiles = \ transaction.xml \ transactionlimits.xml \ refaccount.xml \ security.xml \ bankinfoservice.xml \ bankinfo.xml \ document.xml \ message.xml \ balance.xml \ imexporter_accountinfo.xml \ imexporter_context.xml \ account_spec.xml typedatadir = $(datadir)/aqbanking/typemaker2/c dist_typedata_DATA = \ ab_account_spec.tm2 ab_account_spec_list.tm2 ab_account_spec_list2.tm2 \ ab_balance.tm2 ab_balance_list.tm2 \ ab_bankinfo.tm2 ab_bankinfo_list.tm2 ab_bankinfo_list2.tm2 \ ab_bankinfo_service.tm2 ab_bankinfo_service_list.tm2 ab_bankinfo_service_list2.tm2 \ ab_document.tm2 ab_document_list.tm2 ab_document_list2.tm2 \ ab_imexporter_accountinfo.tm2 ab_imexporter_accountinfo_list.tm2 ab_imexporter_accountinfo_list2.tm2 \ ab_imexporter_context.tm2 ab_imexporter_context_list.tm2 ab_imexporter_context_list2.tm2 \ ab_message.tm2 ab_message_list.tm2 ab_message_list2.tm2 \ ab_security.tm2 ab_security_list.tm2 ab_security_list2.tm2 \ ab_transaction.tm2 ab_transaction_list.tm2 ab_transaction_list2.tm2 \ ab_transaction_limits.tm2 ab_transaction_limits_list.tm2 ab_transaction_limits_list2.tm2 \ ab_reference_account.tm2 ab_reference_account_list.tm2 ab_reference_account_list2.tm2 built_sources = \ transaction.c \ transactionlimits.c \ refaccount.c \ bankinfoservice.c \ bankinfo.c \ document.c \ message.c \ security.c \ balance.c \ imexporter_accountinfo.c \ imexporter_context.c \ account_spec.c build_headers_priv = \ transaction_p.h \ transactionlimits_p.h \ refaccount_p.h \ bankinfoservice_p.h \ bankinfo_p.h \ document_p.h \ message_p.h \ security_p.h \ balance_p.h \ imexporter_accountinfo_p.h \ imexporter_context_p.h \ account_spec_p.h build_headers_pub = \ transaction.h \ transactionlimits.h \ refaccount.h \ bankinfoservice.h \ bankinfo.h \ document.h \ message.h \ security.h \ balance.h \ imexporter_accountinfo.h \ imexporter_context.h \ account_spec.h build_headers = $(build_headers_priv) $(build_headers_pub) libabtypes_la_SOURCES = $(built_sources) \ value.c iheaderdir = @aqbanking_headerdir_am@/aqbanking/types iheader_HEADERS = $(build_headers_pub) \ value.h noinst_HEADERS = $(build_headers_priv) \ value_p.h EXTRA_DIST = $(typefiles) $(built_sources) $(build_headers) all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libs/aqbanking/types/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libs/aqbanking/types/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libabtypes.la: $(libabtypes_la_OBJECTS) $(libabtypes_la_DEPENDENCIES) $(EXTRA_libabtypes_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libabtypes_la_OBJECTS) $(libabtypes_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/account_spec.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/balance.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bankinfo.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bankinfoservice.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/document.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/imexporter_accountinfo.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/imexporter_context.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/message.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/refaccount.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/security.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/transaction.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/transactionlimits.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/value.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-dist_typedataDATA: $(dist_typedata_DATA) @$(NORMAL_INSTALL) @list='$(dist_typedata_DATA)'; test -n "$(typedatadir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(typedatadir)'"; \ $(MKDIR_P) "$(DESTDIR)$(typedatadir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(typedatadir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(typedatadir)" || exit $$?; \ done uninstall-dist_typedataDATA: @$(NORMAL_UNINSTALL) @list='$(dist_typedata_DATA)'; test -n "$(typedatadir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(typedatadir)'; $(am__uninstall_files_from_dir) install-iheaderHEADERS: $(iheader_HEADERS) @$(NORMAL_INSTALL) @list='$(iheader_HEADERS)'; test -n "$(iheaderdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(iheaderdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(iheaderdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(iheaderdir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(iheaderdir)" || exit $$?; \ done uninstall-iheaderHEADERS: @$(NORMAL_UNINSTALL) @list='$(iheader_HEADERS)'; test -n "$(iheaderdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(iheaderdir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(typedatadir)" "$(DESTDIR)$(iheaderdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/account_spec.Plo -rm -f ./$(DEPDIR)/balance.Plo -rm -f ./$(DEPDIR)/bankinfo.Plo -rm -f ./$(DEPDIR)/bankinfoservice.Plo -rm -f ./$(DEPDIR)/document.Plo -rm -f ./$(DEPDIR)/imexporter_accountinfo.Plo -rm -f ./$(DEPDIR)/imexporter_context.Plo -rm -f ./$(DEPDIR)/message.Plo -rm -f ./$(DEPDIR)/refaccount.Plo -rm -f ./$(DEPDIR)/security.Plo -rm -f ./$(DEPDIR)/transaction.Plo -rm -f ./$(DEPDIR)/transactionlimits.Plo -rm -f ./$(DEPDIR)/value.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dist_typedataDATA install-iheaderHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/account_spec.Plo -rm -f ./$(DEPDIR)/balance.Plo -rm -f ./$(DEPDIR)/bankinfo.Plo -rm -f ./$(DEPDIR)/bankinfoservice.Plo -rm -f ./$(DEPDIR)/document.Plo -rm -f ./$(DEPDIR)/imexporter_accountinfo.Plo -rm -f ./$(DEPDIR)/imexporter_context.Plo -rm -f ./$(DEPDIR)/message.Plo -rm -f ./$(DEPDIR)/refaccount.Plo -rm -f ./$(DEPDIR)/security.Plo -rm -f ./$(DEPDIR)/transaction.Plo -rm -f ./$(DEPDIR)/transactionlimits.Plo -rm -f ./$(DEPDIR)/value.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-dist_typedataDATA uninstall-iheaderHEADERS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-generic clean-libtool clean-noinstLTLIBRARIES \ cscopelist-am ctags ctags-am distclean distclean-compile \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dist_typedataDATA \ install-dvi install-dvi-am install-exec install-exec-am \ install-html install-html-am install-iheaderHEADERS \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am \ uninstall-dist_typedataDATA uninstall-iheaderHEADERS .PRECIOUS: Makefile built_sources: $(built_sources) list='$(SUBDIRS)'; for d in $$list; do \ $(MAKE) -C $$d built_sources; \ done ; clean_build_files: rm -f $(built_sources) $(build_headers) format_build_files: for f in $(built_sources) $(build_headers); do \ $(ASTYLE) --style=stroustrup -s2 --min-conditional-indent=0 --indent-labels --max-continuation-indent=80 --pad-comma --pad-header --unpad-paren --align-pointer=name --break-closing-braces --break-one-line-headers --attach-return-type --convert-tabs --max-code-length=120 --break-after-logical --suffix=none $$f; \ done sources: for f in $(libabtypes_la_SOURCES) $(EXTRA_DIST); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d sources; \ done typefiles: $(typefiles) $(typemaker2_exe) -I $(top_srcdir)/src/libs/aqbanking/typemaker2/c -I $(gwenhywfar_dir)/share/gwenhywfar/typemaker2/c -I $(srcdir) --destfolder="$(srcdir)" -D AQBANKING_API $(typefiles) typedefs: $(typefiles) $(typemaker2_exe) --defs-only -I $(top_srcdir)/src/libs/aqbanking/typemaker2/c -I $(gwenhywfar_dir)/share/gwenhywfar/typemaker2/c -I $(srcdir) --destfolder="$(srcdir)" -D AQBANKING_API $(typefiles) cppcheck: for f in $(libabtypes_la_SOURCES); do \ cppcheck --force $$f ; \ done # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: aqbanking-6.6.1/src/libs/aqbanking/types/bankinfoservice.h0000664000175000017500000002521115037736054020555 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "bankinfoservice.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef AB_BANKINFO_SERVICE_BANKINFOSERVICE_H #define AB_BANKINFO_SERVICE_BANKINFOSERVICE_H #ifdef __cplusplus extern "C" { #endif /** @page P_AB_BANKINFO_SERVICE Structure AB_BANKINFO_SERVICE

This page describes the properties of AB_BANKINFO_SERVICE.

AB_BANKINFO_SERVICE

@anchor AB_BANKINFO_SERVICE_type

type

The following types have been registered with AqBanking:
  • HBCI - German homebanking protocol
  • EBICS - German and French homebanking protocol
  • OFX - OFX direct connect protocol

Set this property with @ref AB_BankInfoService_SetType(), get it with @ref AB_BankInfoService_GetType().

@anchor AB_BANKINFO_SERVICE_address

address

For most services this is the URL or hostname of the server.

Set this property with @ref AB_BankInfoService_SetAddress(), get it with @ref AB_BankInfoService_GetAddress().

@anchor AB_BANKINFO_SERVICE_suffix

suffix

For IP based services this is the port to be used (if omitted a default value suitable for the service is chosen).

Set this property with @ref AB_BankInfoService_SetSuffix(), get it with @ref AB_BankInfoService_GetSuffix().

@anchor AB_BANKINFO_SERVICE_pversion

pversion

The content of this field depends on the service type. For HBCI this is the protocol version to be used:
  • 2.01
  • 2.10
  • 2.20
For EBICS this is also the protocol version:
  • H002
  • H003

Set this property with @ref AB_BankInfoService_SetPversion(), get it with @ref AB_BankInfoService_GetPversion().

@anchor AB_BANKINFO_SERVICE_hversion

hversion

For HTTP-based protocols this is the HTTP version to be used:
  • 1.0
  • 1.1

Set this property with @ref AB_BankInfoService_SetHversion(), get it with @ref AB_BankInfoService_GetHversion().

@anchor AB_BANKINFO_SERVICE_mode

mode

The content of this field depends on the service type. For HBCI the following values are used:
  • DDV
  • RDH1
  • RDH2
  • RDH3
  • RDH4
  • RDH5
  • RDH6
  • RDH7
  • RDH8
  • RDH9
  • RDH10
  • RAH7
  • RAH9
  • RAH10
  • PINTAN

Set this property with @ref AB_BankInfoService_SetMode(), get it with @ref AB_BankInfoService_GetMode().

@anchor AB_BANKINFO_SERVICE_aux1

aux1

This is a multi purpose field to be used by a bankinfo plugin as it sees fit. OFX uses this to store the FID from the bankinfo file. EBICS stores the HOSTID here.

Set this property with @ref AB_BankInfoService_SetAux1(), get it with @ref AB_BankInfoService_GetAux1().

@anchor AB_BANKINFO_SERVICE_aux2

aux2

This is a multi purpose field to be used by a bankinfo plugin as it sees fit. OFX uses this to store the ORG field from the bankinfo file.

Set this property with @ref AB_BankInfoService_SetAux2(), get it with @ref AB_BankInfoService_GetAux2().

@anchor AB_BANKINFO_SERVICE_aux3

aux3

This is a multi purpose field to be used by a bankinfo plugin as it sees fit. OFX uses this to store the APPID field from the bankinfo file.

Set this property with @ref AB_BankInfoService_SetAux3(), get it with @ref AB_BankInfoService_GetAux3().

@anchor AB_BANKINFO_SERVICE_aux4

aux4

This is a multi purpose field to be used by a bankinfo plugin as it sees fit. OFX uses this to store the APPVER field from the bankinfo file.

Set this property with @ref AB_BankInfoService_SetAux4(), get it with @ref AB_BankInfoService_GetAux4().

@anchor AB_BANKINFO_SERVICE_userFlags

userFlags

Set this property with @ref AB_BankInfoService_SetUserFlags(), get it with @ref AB_BankInfoService_GetUserFlags().

*/ /* needed system headers */ #include #include #include #include #include /* pre-headers */ #include #include typedef struct AB_BANKINFO_SERVICE AB_BANKINFO_SERVICE; GWEN_LIST_FUNCTION_LIB_DEFS(AB_BANKINFO_SERVICE, AB_BankInfoService, AQBANKING_API) GWEN_LIST2_FUNCTION_LIB_DEFS(AB_BANKINFO_SERVICE, AB_BankInfoService, AQBANKING_API) /* post-headers */ /** Constructor. */ AQBANKING_API AB_BANKINFO_SERVICE *AB_BankInfoService_new(void); /** Destructor. */ AQBANKING_API void AB_BankInfoService_free(AB_BANKINFO_SERVICE *p_struct); AQBANKING_API void AB_BankInfoService_Attach(AB_BANKINFO_SERVICE *p_struct); AQBANKING_API AB_BANKINFO_SERVICE *AB_BankInfoService_dup(const AB_BANKINFO_SERVICE *p_src); AQBANKING_API AB_BANKINFO_SERVICE *AB_BankInfoService_copy(AB_BANKINFO_SERVICE *p_struct, const AB_BANKINFO_SERVICE *p_src); /** Getter. * Use this function to get the member "type" (see @ref AB_BANKINFO_SERVICE_type) */ AQBANKING_API const char *AB_BankInfoService_GetType(const AB_BANKINFO_SERVICE *p_struct); /** Getter. * Use this function to get the member "address" (see @ref AB_BANKINFO_SERVICE_address) */ AQBANKING_API const char *AB_BankInfoService_GetAddress(const AB_BANKINFO_SERVICE *p_struct); /** Getter. * Use this function to get the member "suffix" (see @ref AB_BANKINFO_SERVICE_suffix) */ AQBANKING_API const char *AB_BankInfoService_GetSuffix(const AB_BANKINFO_SERVICE *p_struct); /** Getter. * Use this function to get the member "pversion" (see @ref AB_BANKINFO_SERVICE_pversion) */ AQBANKING_API const char *AB_BankInfoService_GetPversion(const AB_BANKINFO_SERVICE *p_struct); /** Getter. * Use this function to get the member "hversion" (see @ref AB_BANKINFO_SERVICE_hversion) */ AQBANKING_API const char *AB_BankInfoService_GetHversion(const AB_BANKINFO_SERVICE *p_struct); /** Getter. * Use this function to get the member "mode" (see @ref AB_BANKINFO_SERVICE_mode) */ AQBANKING_API const char *AB_BankInfoService_GetMode(const AB_BANKINFO_SERVICE *p_struct); /** Getter. * Use this function to get the member "aux1" (see @ref AB_BANKINFO_SERVICE_aux1) */ AQBANKING_API const char *AB_BankInfoService_GetAux1(const AB_BANKINFO_SERVICE *p_struct); /** Getter. * Use this function to get the member "aux2" (see @ref AB_BANKINFO_SERVICE_aux2) */ AQBANKING_API const char *AB_BankInfoService_GetAux2(const AB_BANKINFO_SERVICE *p_struct); /** Getter. * Use this function to get the member "aux3" (see @ref AB_BANKINFO_SERVICE_aux3) */ AQBANKING_API const char *AB_BankInfoService_GetAux3(const AB_BANKINFO_SERVICE *p_struct); /** Getter. * Use this function to get the member "aux4" (see @ref AB_BANKINFO_SERVICE_aux4) */ AQBANKING_API const char *AB_BankInfoService_GetAux4(const AB_BANKINFO_SERVICE *p_struct); /** Getter. * Use this function to get the member "userFlags" (see @ref AB_BANKINFO_SERVICE_userFlags) */ AQBANKING_API uint32_t AB_BankInfoService_GetUserFlags(const AB_BANKINFO_SERVICE *p_struct); /** Setter. * Use this function to set the member "type" (see @ref AB_BANKINFO_SERVICE_type) */ AQBANKING_API void AB_BankInfoService_SetType(AB_BANKINFO_SERVICE *p_struct, const char *p_src); /** Setter. * Use this function to set the member "address" (see @ref AB_BANKINFO_SERVICE_address) */ AQBANKING_API void AB_BankInfoService_SetAddress(AB_BANKINFO_SERVICE *p_struct, const char *p_src); /** Setter. * Use this function to set the member "suffix" (see @ref AB_BANKINFO_SERVICE_suffix) */ AQBANKING_API void AB_BankInfoService_SetSuffix(AB_BANKINFO_SERVICE *p_struct, const char *p_src); /** Setter. * Use this function to set the member "pversion" (see @ref AB_BANKINFO_SERVICE_pversion) */ AQBANKING_API void AB_BankInfoService_SetPversion(AB_BANKINFO_SERVICE *p_struct, const char *p_src); /** Setter. * Use this function to set the member "hversion" (see @ref AB_BANKINFO_SERVICE_hversion) */ AQBANKING_API void AB_BankInfoService_SetHversion(AB_BANKINFO_SERVICE *p_struct, const char *p_src); /** Setter. * Use this function to set the member "mode" (see @ref AB_BANKINFO_SERVICE_mode) */ AQBANKING_API void AB_BankInfoService_SetMode(AB_BANKINFO_SERVICE *p_struct, const char *p_src); /** Setter. * Use this function to set the member "aux1" (see @ref AB_BANKINFO_SERVICE_aux1) */ AQBANKING_API void AB_BankInfoService_SetAux1(AB_BANKINFO_SERVICE *p_struct, const char *p_src); /** Setter. * Use this function to set the member "aux2" (see @ref AB_BANKINFO_SERVICE_aux2) */ AQBANKING_API void AB_BankInfoService_SetAux2(AB_BANKINFO_SERVICE *p_struct, const char *p_src); /** Setter. * Use this function to set the member "aux3" (see @ref AB_BANKINFO_SERVICE_aux3) */ AQBANKING_API void AB_BankInfoService_SetAux3(AB_BANKINFO_SERVICE *p_struct, const char *p_src); /** Setter. * Use this function to set the member "aux4" (see @ref AB_BANKINFO_SERVICE_aux4) */ AQBANKING_API void AB_BankInfoService_SetAux4(AB_BANKINFO_SERVICE *p_struct, const char *p_src); /** Setter. * Use this function to set the member "userFlags" (see @ref AB_BANKINFO_SERVICE_userFlags) */ AQBANKING_API void AB_BankInfoService_SetUserFlags(AB_BANKINFO_SERVICE *p_struct, uint32_t p_src); /** Add flags. * Use this function to add flags to member "userFlags" (see @ref AB_BANKINFO_SERVICE_userFlags) */ AQBANKING_API void AB_BankInfoService_AddUserFlags(AB_BANKINFO_SERVICE *p_struct, uint32_t p_src); /** Add flags. * Use this function to add flags to member "userFlags" (see @ref AB_BANKINFO_SERVICE_userFlags) */ AQBANKING_API void AB_BankInfoService_SubUserFlags(AB_BANKINFO_SERVICE *p_struct, uint32_t p_src); AQBANKING_API AB_BANKINFO_SERVICE_LIST *AB_BankInfoService_List_dup(const AB_BANKINFO_SERVICE_LIST *p_src); AQBANKING_API void AB_BankInfoService_ReadDb(AB_BANKINFO_SERVICE *p_struct, GWEN_DB_NODE *p_db); AQBANKING_API int AB_BankInfoService_WriteDb(const AB_BANKINFO_SERVICE *p_struct, GWEN_DB_NODE *p_db); AQBANKING_API AB_BANKINFO_SERVICE *AB_BankInfoService_fromDb(GWEN_DB_NODE *p_db); AQBANKING_API int AB_BankInfoService_toDb(const AB_BANKINFO_SERVICE *p_struct, GWEN_DB_NODE *p_db); AQBANKING_API void AB_BankInfoService_ReadXml(AB_BANKINFO_SERVICE *p_struct, GWEN_XMLNODE *p_db); AQBANKING_API void AB_BankInfoService_WriteXml(const AB_BANKINFO_SERVICE *p_struct, GWEN_XMLNODE *p_db); AQBANKING_API void AB_BankInfoService_toXml(const AB_BANKINFO_SERVICE *p_struct, GWEN_XMLNODE *p_db); AQBANKING_API AB_BANKINFO_SERVICE *AB_BankInfoService_fromXml(GWEN_XMLNODE *p_db); #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/aqbanking/types/imexporter_accountinfo.h0000664000175000017500000004476315037736054022210 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "imexporter_accountinfo.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef AB_IMEXPORTER_ACCOUNTINFO_IMEXPORTER_ACCOUNTINFO_H #define AB_IMEXPORTER_ACCOUNTINFO_IMEXPORTER_ACCOUNTINFO_H #ifdef __cplusplus extern "C" { #endif /** @page P_AB_IMEXPORTER_ACCOUNTINFO Structure AB_IMEXPORTER_ACCOUNTINFO

This page describes the properties of AB_IMEXPORTER_ACCOUNTINFO.

AB_IMEXPORTER_ACCOUNTINFO

@anchor AB_IMEXPORTER_ACCOUNTINFO_country

country

Set this property with @ref AB_ImExporterAccountInfo_SetCountry(), get it with @ref AB_ImExporterAccountInfo_GetCountry().

@anchor AB_IMEXPORTER_ACCOUNTINFO_bankCode

bankCode

Set this property with @ref AB_ImExporterAccountInfo_SetBankCode(), get it with @ref AB_ImExporterAccountInfo_GetBankCode().

@anchor AB_IMEXPORTER_ACCOUNTINFO_bankName

bankName

Set this property with @ref AB_ImExporterAccountInfo_SetBankName(), get it with @ref AB_ImExporterAccountInfo_GetBankName().

@anchor AB_IMEXPORTER_ACCOUNTINFO_accountNumber

accountNumber

Set this property with @ref AB_ImExporterAccountInfo_SetAccountNumber(), get it with @ref AB_ImExporterAccountInfo_GetAccountNumber().

@anchor AB_IMEXPORTER_ACCOUNTINFO_subAccountId

subAccountId

Set this property with @ref AB_ImExporterAccountInfo_SetSubAccountId(), get it with @ref AB_ImExporterAccountInfo_GetSubAccountId().

@anchor AB_IMEXPORTER_ACCOUNTINFO_accountName

accountName

Set this property with @ref AB_ImExporterAccountInfo_SetAccountName(), get it with @ref AB_ImExporterAccountInfo_GetAccountName().

@anchor AB_IMEXPORTER_ACCOUNTINFO_iban

iban

Set this property with @ref AB_ImExporterAccountInfo_SetIban(), get it with @ref AB_ImExporterAccountInfo_GetIban().

@anchor AB_IMEXPORTER_ACCOUNTINFO_bic

bic

Set this property with @ref AB_ImExporterAccountInfo_SetBic(), get it with @ref AB_ImExporterAccountInfo_GetBic().

@anchor AB_IMEXPORTER_ACCOUNTINFO_owner

owner

Set this property with @ref AB_ImExporterAccountInfo_SetOwner(), get it with @ref AB_ImExporterAccountInfo_GetOwner().

@anchor AB_IMEXPORTER_ACCOUNTINFO_currency

currency

Set this property with @ref AB_ImExporterAccountInfo_SetCurrency(), get it with @ref AB_ImExporterAccountInfo_GetCurrency().

@anchor AB_IMEXPORTER_ACCOUNTINFO_description

description

Set this property with @ref AB_ImExporterAccountInfo_SetDescription(), get it with @ref AB_ImExporterAccountInfo_GetDescription().

@anchor AB_IMEXPORTER_ACCOUNTINFO_accountType

accountType

Set this property with @ref AB_ImExporterAccountInfo_SetAccountType(), get it with @ref AB_ImExporterAccountInfo_GetAccountType().

@anchor AB_IMEXPORTER_ACCOUNTINFO_accountId

accountId

Set this property with @ref AB_ImExporterAccountInfo_SetAccountId(), get it with @ref AB_ImExporterAccountInfo_GetAccountId().

@anchor AB_IMEXPORTER_ACCOUNTINFO_balanceList

balanceList

Set this property with @ref AB_ImExporterAccountInfo_SetBalanceList(), get it with @ref AB_ImExporterAccountInfo_GetBalanceList().

@anchor AB_IMEXPORTER_ACCOUNTINFO_transactionList

transactionList

List of transactions. This list contains any kind of transactions all in one list. You can differentiate the type of the transaction (e.g. bank statement, debit note, transfer etc) by looking at the transaction type (see @ref AB_Transaction_GetType).

Set this property with @ref AB_ImExporterAccountInfo_SetTransactionList(), get it with @ref AB_ImExporterAccountInfo_GetTransactionList().

@anchor AB_IMEXPORTER_ACCOUNTINFO_eStatementList

eStatementList

Set this property with @ref AB_ImExporterAccountInfo_SetEStatementList(), get it with @ref AB_ImExporterAccountInfo_GetEStatementList().

*/ /* needed system headers */ #include #include #include #include #include /* pre-headers */ #include #include #include typedef struct AB_IMEXPORTER_ACCOUNTINFO AB_IMEXPORTER_ACCOUNTINFO; GWEN_LIST_FUNCTION_LIB_DEFS(AB_IMEXPORTER_ACCOUNTINFO, AB_ImExporterAccountInfo, AQBANKING_API) GWEN_LIST2_FUNCTION_LIB_DEFS(AB_IMEXPORTER_ACCOUNTINFO, AB_ImExporterAccountInfo, AQBANKING_API) /* post-headers */ #include #include #include #include /** Constructor. */ AQBANKING_API AB_IMEXPORTER_ACCOUNTINFO *AB_ImExporterAccountInfo_new(void); /** Destructor. */ AQBANKING_API void AB_ImExporterAccountInfo_free(AB_IMEXPORTER_ACCOUNTINFO *p_struct); AQBANKING_API void AB_ImExporterAccountInfo_Attach(AB_IMEXPORTER_ACCOUNTINFO *p_struct); AQBANKING_API AB_IMEXPORTER_ACCOUNTINFO *AB_ImExporterAccountInfo_dup(const AB_IMEXPORTER_ACCOUNTINFO *p_src); AQBANKING_API AB_IMEXPORTER_ACCOUNTINFO *AB_ImExporterAccountInfo_copy(AB_IMEXPORTER_ACCOUNTINFO *p_struct, const AB_IMEXPORTER_ACCOUNTINFO *p_src); /** Getter. * Use this function to get the member "country" (see @ref AB_IMEXPORTER_ACCOUNTINFO_country) */ AQBANKING_API const char *AB_ImExporterAccountInfo_GetCountry(const AB_IMEXPORTER_ACCOUNTINFO *p_struct); /** Getter. * Use this function to get the member "bankCode" (see @ref AB_IMEXPORTER_ACCOUNTINFO_bankCode) */ AQBANKING_API const char *AB_ImExporterAccountInfo_GetBankCode(const AB_IMEXPORTER_ACCOUNTINFO *p_struct); /** Getter. * Use this function to get the member "bankName" (see @ref AB_IMEXPORTER_ACCOUNTINFO_bankName) */ AQBANKING_API const char *AB_ImExporterAccountInfo_GetBankName(const AB_IMEXPORTER_ACCOUNTINFO *p_struct); /** Getter. * Use this function to get the member "accountNumber" (see @ref AB_IMEXPORTER_ACCOUNTINFO_accountNumber) */ AQBANKING_API const char *AB_ImExporterAccountInfo_GetAccountNumber(const AB_IMEXPORTER_ACCOUNTINFO *p_struct); /** Getter. * Use this function to get the member "subAccountId" (see @ref AB_IMEXPORTER_ACCOUNTINFO_subAccountId) */ AQBANKING_API const char *AB_ImExporterAccountInfo_GetSubAccountId(const AB_IMEXPORTER_ACCOUNTINFO *p_struct); /** Getter. * Use this function to get the member "accountName" (see @ref AB_IMEXPORTER_ACCOUNTINFO_accountName) */ AQBANKING_API const char *AB_ImExporterAccountInfo_GetAccountName(const AB_IMEXPORTER_ACCOUNTINFO *p_struct); /** Getter. * Use this function to get the member "iban" (see @ref AB_IMEXPORTER_ACCOUNTINFO_iban) */ AQBANKING_API const char *AB_ImExporterAccountInfo_GetIban(const AB_IMEXPORTER_ACCOUNTINFO *p_struct); /** Getter. * Use this function to get the member "bic" (see @ref AB_IMEXPORTER_ACCOUNTINFO_bic) */ AQBANKING_API const char *AB_ImExporterAccountInfo_GetBic(const AB_IMEXPORTER_ACCOUNTINFO *p_struct); /** Getter. * Use this function to get the member "owner" (see @ref AB_IMEXPORTER_ACCOUNTINFO_owner) */ AQBANKING_API const char *AB_ImExporterAccountInfo_GetOwner(const AB_IMEXPORTER_ACCOUNTINFO *p_struct); /** Getter. * Use this function to get the member "currency" (see @ref AB_IMEXPORTER_ACCOUNTINFO_currency) */ AQBANKING_API const char *AB_ImExporterAccountInfo_GetCurrency(const AB_IMEXPORTER_ACCOUNTINFO *p_struct); /** Getter. * Use this function to get the member "description" (see @ref AB_IMEXPORTER_ACCOUNTINFO_description) */ AQBANKING_API const char *AB_ImExporterAccountInfo_GetDescription(const AB_IMEXPORTER_ACCOUNTINFO *p_struct); /** Getter. * Use this function to get the member "accountType" (see @ref AB_IMEXPORTER_ACCOUNTINFO_accountType) */ AQBANKING_API int AB_ImExporterAccountInfo_GetAccountType(const AB_IMEXPORTER_ACCOUNTINFO *p_struct); /** Getter. * Use this function to get the member "accountId" (see @ref AB_IMEXPORTER_ACCOUNTINFO_accountId) */ AQBANKING_API uint32_t AB_ImExporterAccountInfo_GetAccountId(const AB_IMEXPORTER_ACCOUNTINFO *p_struct); /** Getter. * Use this function to get the member "balanceList" (see @ref AB_IMEXPORTER_ACCOUNTINFO_balanceList) */ AQBANKING_API AB_BALANCE_LIST *AB_ImExporterAccountInfo_GetBalanceList(const AB_IMEXPORTER_ACCOUNTINFO *p_struct); /** Getter. * Use this function to get the member "transactionList" (see @ref AB_IMEXPORTER_ACCOUNTINFO_transactionList) */ AQBANKING_API AB_TRANSACTION_LIST *AB_ImExporterAccountInfo_GetTransactionList(const AB_IMEXPORTER_ACCOUNTINFO *p_struct); /** Getter. * Use this function to get the member "eStatementList" (see @ref AB_IMEXPORTER_ACCOUNTINFO_eStatementList) */ AQBANKING_API AB_DOCUMENT_LIST *AB_ImExporterAccountInfo_GetEStatementList(const AB_IMEXPORTER_ACCOUNTINFO *p_struct); /** Setter. * Use this function to set the member "country" (see @ref AB_IMEXPORTER_ACCOUNTINFO_country) */ AQBANKING_API void AB_ImExporterAccountInfo_SetCountry(AB_IMEXPORTER_ACCOUNTINFO *p_struct, const char *p_src); /** Setter. * Use this function to set the member "bankCode" (see @ref AB_IMEXPORTER_ACCOUNTINFO_bankCode) */ AQBANKING_API void AB_ImExporterAccountInfo_SetBankCode(AB_IMEXPORTER_ACCOUNTINFO *p_struct, const char *p_src); /** Setter. * Use this function to set the member "bankName" (see @ref AB_IMEXPORTER_ACCOUNTINFO_bankName) */ AQBANKING_API void AB_ImExporterAccountInfo_SetBankName(AB_IMEXPORTER_ACCOUNTINFO *p_struct, const char *p_src); /** Setter. * Use this function to set the member "accountNumber" (see @ref AB_IMEXPORTER_ACCOUNTINFO_accountNumber) */ AQBANKING_API void AB_ImExporterAccountInfo_SetAccountNumber(AB_IMEXPORTER_ACCOUNTINFO *p_struct, const char *p_src); /** Setter. * Use this function to set the member "subAccountId" (see @ref AB_IMEXPORTER_ACCOUNTINFO_subAccountId) */ AQBANKING_API void AB_ImExporterAccountInfo_SetSubAccountId(AB_IMEXPORTER_ACCOUNTINFO *p_struct, const char *p_src); /** Setter. * Use this function to set the member "accountName" (see @ref AB_IMEXPORTER_ACCOUNTINFO_accountName) */ AQBANKING_API void AB_ImExporterAccountInfo_SetAccountName(AB_IMEXPORTER_ACCOUNTINFO *p_struct, const char *p_src); /** Setter. * Use this function to set the member "iban" (see @ref AB_IMEXPORTER_ACCOUNTINFO_iban) */ AQBANKING_API void AB_ImExporterAccountInfo_SetIban(AB_IMEXPORTER_ACCOUNTINFO *p_struct, const char *p_src); /** Setter. * Use this function to set the member "bic" (see @ref AB_IMEXPORTER_ACCOUNTINFO_bic) */ AQBANKING_API void AB_ImExporterAccountInfo_SetBic(AB_IMEXPORTER_ACCOUNTINFO *p_struct, const char *p_src); /** Setter. * Use this function to set the member "owner" (see @ref AB_IMEXPORTER_ACCOUNTINFO_owner) */ AQBANKING_API void AB_ImExporterAccountInfo_SetOwner(AB_IMEXPORTER_ACCOUNTINFO *p_struct, const char *p_src); /** Setter. * Use this function to set the member "currency" (see @ref AB_IMEXPORTER_ACCOUNTINFO_currency) */ AQBANKING_API void AB_ImExporterAccountInfo_SetCurrency(AB_IMEXPORTER_ACCOUNTINFO *p_struct, const char *p_src); /** Setter. * Use this function to set the member "description" (see @ref AB_IMEXPORTER_ACCOUNTINFO_description) */ AQBANKING_API void AB_ImExporterAccountInfo_SetDescription(AB_IMEXPORTER_ACCOUNTINFO *p_struct, const char *p_src); /** Setter. * Use this function to set the member "accountType" (see @ref AB_IMEXPORTER_ACCOUNTINFO_accountType) */ AQBANKING_API void AB_ImExporterAccountInfo_SetAccountType(AB_IMEXPORTER_ACCOUNTINFO *p_struct, int p_src); /** Setter. * Use this function to set the member "accountId" (see @ref AB_IMEXPORTER_ACCOUNTINFO_accountId) */ AQBANKING_API void AB_ImExporterAccountInfo_SetAccountId(AB_IMEXPORTER_ACCOUNTINFO *p_struct, uint32_t p_src); /** Setter. * Use this function to set the member "balanceList" (see @ref AB_IMEXPORTER_ACCOUNTINFO_balanceList) */ AQBANKING_API void AB_ImExporterAccountInfo_SetBalanceList(AB_IMEXPORTER_ACCOUNTINFO *p_struct, AB_BALANCE_LIST *p_src); /** Setter. * Use this function to set the member "transactionList" (see @ref AB_IMEXPORTER_ACCOUNTINFO_transactionList) */ AQBANKING_API void AB_ImExporterAccountInfo_SetTransactionList(AB_IMEXPORTER_ACCOUNTINFO *p_struct, AB_TRANSACTION_LIST *p_src); /** Setter. * Use this function to set the member "eStatementList" (see @ref AB_IMEXPORTER_ACCOUNTINFO_eStatementList) */ AQBANKING_API void AB_ImExporterAccountInfo_SetEStatementList(AB_IMEXPORTER_ACCOUNTINFO *p_struct, AB_DOCUMENT_LIST *p_src); AQBANKING_API AB_IMEXPORTER_ACCOUNTINFO_LIST *AB_ImExporterAccountInfo_List_dup(const AB_IMEXPORTER_ACCOUNTINFO_LIST *p_src); AQBANKING_API void AB_ImExporterAccountInfo_ReadDb(AB_IMEXPORTER_ACCOUNTINFO *p_struct, GWEN_DB_NODE *p_db); AQBANKING_API int AB_ImExporterAccountInfo_WriteDb(const AB_IMEXPORTER_ACCOUNTINFO *p_struct, GWEN_DB_NODE *p_db); AQBANKING_API AB_IMEXPORTER_ACCOUNTINFO *AB_ImExporterAccountInfo_fromDb(GWEN_DB_NODE *p_db); AQBANKING_API int AB_ImExporterAccountInfo_toDb(const AB_IMEXPORTER_ACCOUNTINFO *p_struct, GWEN_DB_NODE *p_db); AQBANKING_API void AB_ImExporterAccountInfo_ReadXml(AB_IMEXPORTER_ACCOUNTINFO *p_struct, GWEN_XMLNODE *p_db); AQBANKING_API void AB_ImExporterAccountInfo_WriteXml(const AB_IMEXPORTER_ACCOUNTINFO *p_struct, GWEN_XMLNODE *p_db); AQBANKING_API void AB_ImExporterAccountInfo_toXml(const AB_IMEXPORTER_ACCOUNTINFO *p_struct, GWEN_XMLNODE *p_db); AQBANKING_API AB_IMEXPORTER_ACCOUNTINFO *AB_ImExporterAccountInfo_fromXml(GWEN_XMLNODE *p_db); AQBANKING_API AB_IMEXPORTER_ACCOUNTINFO *AB_ImExporterAccountInfo_List_GetByIban(const AB_IMEXPORTER_ACCOUNTINFO_LIST *p_list, const char *p_cmp); AQBANKING_API AB_IMEXPORTER_ACCOUNTINFO *AB_ImExporterAccountInfo_List_GetByAccountId(const AB_IMEXPORTER_ACCOUNTINFO_LIST *p_list, uint32_t p_cmp); AQBANKING_API void AB_ImExporterAccountInfo_toHashString(const AB_IMEXPORTER_ACCOUNTINFO *p_struct, GWEN_BUFFER *p_buffer); AQBANKING_API int AB_ImExporterAccountInfo_List2_freeAll(AB_IMEXPORTER_ACCOUNTINFO_LIST2 *tl); AQBANKING_API AB_TRANSACTION *AB_ImExporterAccountInfo_GetFirstTransaction(const AB_IMEXPORTER_ACCOUNTINFO *t, int ty, int cmd); AQBANKING_API void AB_ImExporterAccountInfo_AddTransaction(AB_IMEXPORTER_ACCOUNTINFO *st, AB_TRANSACTION *t); AQBANKING_API int AB_ImExporterAccountInfo_GetTransactionCount(const AB_IMEXPORTER_ACCOUNTINFO *t, int ty, int cmd); AQBANKING_API AB_BALANCE *AB_ImExporterAccountInfo_GetFirstBalance(const AB_IMEXPORTER_ACCOUNTINFO *as); AQBANKING_API void AB_ImExporterAccountInfo_AddBalance(AB_IMEXPORTER_ACCOUNTINFO *st, AB_BALANCE *bal); AQBANKING_API AB_DOCUMENT *AB_ImExporterAccountInfo_GetFirstEStatement(const AB_IMEXPORTER_ACCOUNTINFO *st); AQBANKING_API void AB_ImExporterAccountInfo_AddEStatement(AB_IMEXPORTER_ACCOUNTINFO *st, AB_DOCUMENT *d); /** * This function clears the account info (e.g. removes all transactions etc). */ AQBANKING_API void AB_ImExporterAccountInfo_Clear(AB_IMEXPORTER_ACCOUNTINFO *st); AQBANKING_API void AB_ImExporterAccountInfo_FillFromTransaction(AB_IMEXPORTER_ACCOUNTINFO *st, const AB_TRANSACTION *t); AQBANKING_API AB_IMEXPORTER_ACCOUNTINFO *AB_ImExporterAccountInfo_List_GetByBankCodeAndAccountNumber(AB_IMEXPORTER_ACCOUNTINFO_LIST *l, const char *bankCode, const char *accountNumber, int accountType); AQBANKING_API AB_IMEXPORTER_ACCOUNTINFO *AB_ImExporterAccountInfo_List_Find(AB_IMEXPORTER_ACCOUNTINFO_LIST *l, uint32_t uniqueId, const char *iban, const char *bankCode, const char *accountNumber, int accountType); /** * Check whether a given account info object matches the given criteria. * @param a account info object to match * @param uniqueId unique account id (use 0 as wildcard) * @param country ISO code of the country (wildcards and jokers allowed) * @param bankId bank code to search for (wildcards and jokers allowed) * @param accountNumber account number to search for (wildcards and jokers allowed) * @param subAccountId sub account number (wildcards and jokers allowed) * @param iban IBAN to search for (wildcards and jokers allowed) * @param currency currecny the account uses (wildcards and jokers allowed) * @param ty account type (use AB_AccountType_Unknown as wildcard) */ AQBANKING_API int AB_ImExporterAccountInfo_Matches(const AB_IMEXPORTER_ACCOUNTINFO *a, uint32_t uniqueId, const char *country, const char *bankId, const char *accountNumber, const char *subAccountId, const char *iban, const char *currency, int ty); /** * Find the first matching account info object in a list of account info objects. * @param al list of account info objects among to search * @param uniqueId unique account id (use 0 as wildcard) * @param country ISO code of the country (wildcards and jokers allowed) * @param bankId bank code to search for (wildcards and jokers allowed) * @param accountNumber account number to search for (wildcards and jokers allowed) * @param subAccountId sub account number (wildcards and jokers allowed) * @param iban IBAN to search for (wildcards and jokers allowed) * @param currency currecny the account uses (wildcards and jokers allowed) * @param ty account type (use AB_AccountType_Unknown as wildcard) */ AQBANKING_API AB_IMEXPORTER_ACCOUNTINFO *AB_ImExporterAccountInfo_List_FindFirst(AB_IMEXPORTER_ACCOUNTINFO_LIST *al, uint32_t uniqueId, const char *country, const char *bankId, const char *accountNumber, const char *subAccountId, const char *iban, const char *currency, int ty); /** * Find the next matching account info object in a list of account info objects. * @param a previous matching account info objects among to search * @param uniqueId unique account id (use 0 as wildcard) * @param country ISO code of the country (wildcards and jokers allowed) * @param bankId bank code to search for (wildcards and jokers allowed) * @param accountNumber account number to search for (wildcards and jokers allowed) * @param subAccountId sub account number (wildcards and jokers allowed) * @param iban IBAN to search for (wildcards and jokers allowed) * @param currency currecny the account uses (wildcards and jokers allowed) * @param ty account type (use AB_AccountType_Unknown as wildcard) */ AQBANKING_API AB_IMEXPORTER_ACCOUNTINFO *AB_ImExporterAccountInfo_List_FindNext(AB_IMEXPORTER_ACCOUNTINFO *a, uint32_t uniqueId, const char *country, const char *bankId, const char *accountNumber, const char *subAccountId, const char *iban, const char *currency, int ty); AQBANKING_API AB_IMEXPORTER_ACCOUNTINFO *AB_ImExporterAccountInfo_List_GetOrAdd(AB_IMEXPORTER_ACCOUNTINFO_LIST *l, uint32_t uniqueId, const char *iban, const char *bankCode, const char *accountNumber, int accountType); #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/aqbanking/types/ab_balance_list.tm20000664000175000017500000000033115037736054020736 00000000000000 AB_BALANCE_LIST AB_Balance_List aqbanking-6.6.1/src/libs/aqbanking/types/ab_transaction_list.tm20000664000175000017500000000035115037736054021700 00000000000000 AB_TRANSACTION_LIST AB_Transaction_List aqbanking-6.6.1/src/libs/aqbanking/types/transaction_p.h0000664000175000017500000000464215037736054020256 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "transaction.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef AB_TRANSACTION_TRANSACTION_P_H #define AB_TRANSACTION_TRANSACTION_P_H #include "./transaction.h" #ifdef __cplusplus extern "C" { #endif struct AB_TRANSACTION { GWEN_LIST_ELEMENT(AB_TRANSACTION) int _refCount; AB_TRANSACTION_TYPE type; AB_TRANSACTION_SUBTYPE subType; AB_TRANSACTION_COMMAND command; AB_TRANSACTION_STATUS status; uint32_t uniqueAccountId; AB_TRANSACTION_ACK acknowledge; uint32_t uniqueId; uint32_t refUniqueId; uint32_t idForApplication; char *stringIdForApplication; uint32_t sessionId; uint32_t groupId; char *fiId; char *localIban; char *localBic; char *localCountry; char *localBankCode; char *localBranchId; char *localAccountNumber; char *localSuffix; char *localName; char *remoteCountry; char *remoteBankCode; char *remoteBranchId; char *remoteAccountNumber; char *remoteSuffix; char *remoteIban; char *remoteBic; char *remoteName; GWEN_DATE *date; GWEN_DATE *valutaDate; AB_VALUE *value; AB_VALUE *fees; AB_VALUE *taxes; int transactionCode; char *transactionText; char *transactionKey; int textKey; char *primanota; char *purpose; char *category; char *customerReference; char *bankReference; char *endToEndReference; char *ultimateCreditor; char *ultimateDebtor; char *creditorSchemeId; char *originatorId; char *mandateId; GWEN_DATE *mandateDate; char *mandateDebitorName; char *originalCreditorSchemeId; char *originalMandateId; char *originalCreditorName; AB_TRANSACTION_SEQUENCE sequence; AB_TRANSACTION_CHARGE charge; char *remoteAddrStreet; char *remoteAddrZipcode; char *remoteAddrCity; char *remoteAddrPhone; AB_TRANSACTION_PERIOD period; uint32_t cycle; uint32_t executionDay; GWEN_DATE *firstDate; GWEN_DATE *lastDate; GWEN_DATE *nextDate; char *unitId; char *unitIdNameSpace; char *tickerSymbol; AB_VALUE *units; AB_VALUE *unitPriceValue; GWEN_DATE *unitPriceDate; AB_VALUE *commissionValue; uint32_t estatementNumber; uint32_t estatementMaxEntries; char *memo; char *hash; /* volatile */ }; #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/aqbanking/types/transaction.xml0000664000175000017500000020141214156464025020277 00000000000000 This type contains all important information about transactions. All text fields are in UTF-8. AB_TRANSACTION AB_Transaction transaction with_hash with_xml with_db with_list1 with_list2 with_constlist2 with_refcount
aqbanking/error.h
aqbanking/types/value.h
gwenhywfar/gwendate.h
gwenhywfar/mdigest.h
gwenhywfar/text.h
gwenhywfar/buffer.h
gwenhywfar/db.h
gwenhywfar/debug.h
with_hash with_hash $(api) int $(struct_prefix)_GenerateHash($(struct_type) *st); with_hash with_hash int $(struct_prefix)_GenerateHash($(struct_type) *st){ GWEN_BUFFER *buf; int rv; GWEN_MDIGEST *md; assert(st); buf=GWEN_Buffer_new(0, 256, 0, 1); $(struct_prefix)_toHashString(st, buf); md=GWEN_MDigest_Rmd160_new(); rv=GWEN_MDigest_Begin(md); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); GWEN_MDigest_free(md); GWEN_Buffer_free(buf); return rv; } rv=GWEN_MDigest_Update(md, (const uint8_t*)GWEN_Buffer_GetStart(buf), GWEN_Buffer_GetUsedBytes(buf)); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); GWEN_MDigest_free(md); GWEN_Buffer_free(buf); return rv; } rv=GWEN_MDigest_End(md); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); GWEN_MDigest_free(md); GWEN_Buffer_free(buf); return rv; } GWEN_Buffer_Reset(buf); rv=GWEN_Text_ToHexBuffer((const char*)GWEN_MDigest_GetDigestPtr(md), GWEN_MDigest_GetDigestSize(md), buf, 0, 0, 0); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); GWEN_MDigest_free(md); GWEN_Buffer_free(buf); return rv; } GWEN_MDigest_free(md); $(struct_prefix)_SetHash(st, GWEN_Buffer_GetStart(buf)); GWEN_Buffer_free(buf); return 0; } /** \n * Check whether a transaction matches the given type and command. \n * \n * @return 1 if match, 0 otherwise \n * @param tl pointer to the list to search \n * @param ty transaction type, if 0 then this is not checked \n * @param cmd command, if -1 then any non-zero command matches, if 0 then this is not checked \n */ \n $(api) int $(struct_prefix)_MatchTypeAndCommand(const $(struct_type) *t, int ty, int cmd); int $(struct_prefix)_MatchTypeAndCommand(const $(struct_type) *t, int ty, int cmd) { int match=1; if (match) { if ((ty > AB_Transaction_TypeNone) && (t->type!=ty)) { return 0; } } if (match) { if ((cmd > AB_Transaction_CommandNone) && (t->command!=cmd)) { return 0; } } if (match) { if ((cmd < AB_Transaction_CommandNone) && (t->command <= AB_Transaction_CommandNone)) { return 0; } } /* matches */ return 1; } with_list with_list /** \n * Find first transaction in a list which matches the given type and command. \n * \n * @return Entry matching the description (or NULL if none) \n * @param tl pointer to the list to search \n * @param ty transaction type, if 0 then this is not checked \n * @param cmd command, if -1 then any non-zero command matches, if 0 then this is not checked \n */ \n $(api) $(struct_type) * $(struct_prefix)_List_FindFirstByType(const $(struct_type)_LIST *tl, int ty, int cmd); with_list with_list $(struct_type) * $(struct_prefix)_List_FindFirstByType(const $(struct_type)_LIST *tl, int ty, int cmd) { if (tl) { $(struct_type) *t; t=$(struct_prefix)_List_First(tl); while(t) { if ($(struct_prefix)_MatchTypeAndCommand(t, ty, cmd)) return t; t=$(struct_prefix)_List_Next(t); } } return NULL; } with_list with_list /** \n * Find next transaction in a list which matches the given type and command. \n * \n * @return Entry matching the description (or NULL if none) \n * @param t pointer to the previous match (as returned by $(struct_prefix)_List_FindFirstByType) \n * @param ty transaction type, if 0 then this is not checked \n * @param cmd command, if -1 then any non-zero command matches, if 0 then this is not checked \n */ \n $(api) $(struct_type) * $(struct_prefix)_List_FindNextByType(const $(struct_type) *t, int ty, int cmd); with_list with_list $(struct_type) * $(struct_prefix)_List_FindNextByType(const $(struct_type) *tPrev, int ty, int cmd) { if (tPrev) { $(struct_type) *t; t=$(struct_prefix)_List_Next(tPrev); while(t) { if ($(struct_prefix)_MatchTypeAndCommand(t, ty, cmd)) return t; t=$(struct_prefix)_List_Next(t); } } return NULL; } with_list with_list /** \n * Remove matching transactions from the given list \n * \n * @return Number of transactions removed from the list \n * @param tl pointer to the list to search \n * @param ty transaction type, if 0 then this is not checked \n * @param cmd command, if -1 then any non-zero command matches, if 0 then this is not checked \n */ \n $(api) int $(struct_prefix)_List_RemoveByType($(struct_type)_LIST *tl, int ty, int cmd); with_list with_list int $(struct_prefix)_List_RemoveByType($(struct_type)_LIST *tl, int ty, int cmd) { int cntRemoved=0; if (tl) { $(struct_type) *t; t=$(struct_prefix)_List_First(tl); while(t) { $(struct_type) *tNext; tNext=$(struct_prefix)_List_Next(t); if ($(struct_prefix)_MatchTypeAndCommand(t, ty, cmd)) { $(struct_prefix)_List_Del(t); $(struct_prefix)_free(t); cntRemoved++; } t=tNext; } } return cntRemoved; } with_list with_list /** \n * Keep matching transactions in the given list and delete others. \n * \n * @return Number of transactions removed from the list \n * @param tl pointer to the list to search \n * @param ty transaction type, if 0 then this is not checked \n * @param cmd command, if -1 then any non-zero command matches, if 0 then this is not checked \n */ \n $(api) int $(struct_prefix)_List_KeepByType($(struct_type)_LIST *tl, int ty, int cmd); with_list with_list int $(struct_prefix)_List_KeepByType($(struct_type)_LIST *tl, int ty, int cmd) { int cntRemoved=0; if (tl) { $(struct_type) *t; t=$(struct_prefix)_List_First(tl); while(t) { $(struct_type) *tNext; tNext=$(struct_prefix)_List_Next(t); if (! $(struct_prefix)_MatchTypeAndCommand(t, ty, cmd)) { $(struct_prefix)_List_Del(t); $(struct_prefix)_free(t); cntRemoved++; } t=tNext; } } return cntRemoved; } with_list with_list $(api) int $(struct_prefix)_List_CountByType(const $(struct_type)_LIST *tl, int ty, int cmd); with_list with_list int $(struct_prefix)_List_CountByType(const $(struct_type)_LIST *tl, int ty, int cmd) { int count=0; if (tl) { $(struct_type) *t; t=$(struct_prefix)_List_First(tl); while(t) { if ($(struct_prefix)_MatchTypeAndCommand(t, ty, cmd)) count++; t=$(struct_prefix)_List_Next(t); } } return count; } with_list with_list /** \n * Definition of the callback function for @ref $(struct_prefix)_List_ForEachByType(). \n */ \n typedef const $(struct_type)* ($(struct_type)_LIST_FOREACHBYTYPE_CB)(const $(struct_type) *element, void *user_data); with_list with_list /** \n * Call the given callback function for every entry of the list which matches the given type and command. \n * \n * @return Entry matching the description (or NULL if none) \n * @param fn callback function to be called for every element of the given list \n * @param user_data user data forwarded to the callback function \n * @param tl pointer to the list to search \n * @param ty transaction type, if 0 then this is not checked \n * @param cmd command, if -1 then any non-zero command matches, if 0 then this is not checked \n */ \n $(api) const $(struct_type) * $(struct_prefix)_List_ForEachByType(const $(struct_type)_LIST *tl, $(struct_type)_LIST_FOREACHBYTYPE_CB fn, void *user_data, int ty, int cmd); with_list with_list const $(struct_type) * $(struct_prefix)_List_ForEachByType(const $(struct_type)_LIST *tl, $(struct_type)_LIST_FOREACHBYTYPE_CB fn, void *user_data, int ty, int cmd) { if (tl) { const $(struct_type) *t; t=$(struct_prefix)_List_First(tl); while(t) { if ($(struct_prefix)_MatchTypeAndCommand(t, ty, cmd)) { const $(struct_type) *tReturned; tReturned=fn(t, user_data); if (tReturned) return tReturned; } t=$(struct_prefix)_List_Next(t); } } return NULL; } with_list with_list $(api) $(struct_type) * $(struct_prefix)_List_FindName(const $(struct_type)_LIST *tl, int ty, const char *ns, const char *n); with_list with_list $(struct_type) * $(struct_prefix)_List_FindName(const $(struct_type)_LIST *tl, int ty, const char *ns, const char *n) { if (tl) { $(struct_type) *t; t=$(struct_prefix)_List_First(tl); while(t) { if ( (ty==AB_Transaction_TypeNone || $(struct_prefix)_GetType(t)==ty) && (ns==NULL || 0==GWEN_Text_Compare(ns, t->unitIdNameSpace, 1)) && (n==NULL || 0==GWEN_Text_Compare(n, t->unitId, 1)) ) return t; t=$(struct_prefix)_List_Next(t); } } return NULL; } with_list with_list $(api) int $(struct_prefix)_List_WriteDb(const $(struct_type)_LIST *tl, GWEN_DB_NODE *db); with_list with_list int $(struct_prefix)_List_WriteDb(const $(struct_type)_LIST *tl, GWEN_DB_NODE *db) { if (tl) { const $(struct_type) *t; t=$(struct_prefix)_List_First(tl); while(t) { GWEN_DB_NODE *dbT; int rv; dbT=GWEN_DB_Group_new("transaction"); rv=AB_Transaction_WriteDb(t, dbT); if (rv < 0) { DBG_ERROR(AQBANKING_LOGDOMAIN, "here (%d)", rv); GWEN_DB_Group_free(dbT); return rv; } else { GWEN_DB_AddGroup(db, dbT); } t=$(struct_prefix)_List_Next(t); } } return 0; } with_list with_list $(api) int $(struct_prefix)_List_ReadDb($(struct_type)_LIST *tl, GWEN_DB_NODE *db); with_list with_list int $(struct_prefix)_List_ReadDb($(struct_type)_LIST *tl, GWEN_DB_NODE *db) { if (tl && db) { GWEN_DB_NODE *dbT; dbT=GWEN_DB_GetFirstGroup(db); while(dbT) { $(struct_type) *t; t=$(struct_prefix)_fromDb(dbT); if (t) { $(struct_prefix)_List_Add(t, tl); } dbT=GWEN_DB_GetNextGroup(dbT); } } else { DBG_ERROR(AQBANKING_LOGDOMAIN, "Either list or db missing"); return GWEN_ERROR_INVALID; } return 0; } $(api) void $(struct_prefix)_AddPurposeLine($(struct_type) *t, const char *s); void $(struct_prefix)_AddPurposeLine($(struct_type) *t, const char *s) { assert(t); if (s && *s) { if (t->purpose && *(t->purpose)) { GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(tbuf, t->purpose); GWEN_Buffer_AppendString(tbuf, "\\n"); GWEN_Buffer_AppendString(tbuf, s); $(struct_prefix)_SetPurpose(t, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } else $(struct_prefix)_SetPurpose(t, s); } else { DBG_ERROR(AQBANKING_LOGDOMAIN, "Not adding empty string"); } } $(api) void $(struct_prefix)_SetPurposeFromStringList($(struct_type) *t, const GWEN_STRINGLIST *sl); void $(struct_prefix)_SetPurposeFromStringList($(struct_type) *t, const GWEN_STRINGLIST *sl) { assert(t); if (sl) { GWEN_STRINGLISTENTRY *se; GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 256, 0, 1); se=GWEN_StringList_FirstEntry(sl); while(se) { const char *s; s=GWEN_StringListEntry_Data(se); if (s && *s) { if (GWEN_Buffer_GetUsedBytes(tbuf)) GWEN_Buffer_AppendString(tbuf, "\\n"); GWEN_Buffer_AppendString(tbuf, s); } se=GWEN_StringListEntry_Next(se); } $(struct_prefix)_SetPurpose(t, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } else { $(struct_prefix)_SetPurpose(t, NULL); } } /** \n * The purpose fields may contain multiple purpose lines separated by a NEWLINE character (10). \n * If you need the old behaviour of previous versions you can use this function to get a string list \n * representation of the purpose lines. \n * \n * If the purpose field is empty NULL is returned (no empty list is ever returned). \n * \n * The caller is responsible for freeing the object returned, if any. \n * \n * @return stringlist (NULL if empty) \n * @param t transaction object \n */ \n $(api) GWEN_STRINGLIST *$(struct_prefix)_GetPurposeAsStringList(const $(struct_type) *t); GWEN_STRINGLIST *$(struct_prefix)_GetPurposeAsStringList(const $(struct_type) *t) { const char *s; assert(t); s=$(struct_prefix)_GetPurpose(t); if (s && *s) { GWEN_STRINGLIST *stringList; stringList=GWEN_StringList_fromString(s, "\\n", 0); return stringList; } return NULL; } $(api) void $(struct_prefix)_AddCategory($(struct_type) *t, const char *s); void $(struct_prefix)_AddCategory($(struct_type) *t, const char *s) { assert(t); if (s && *s) { if (t->category && *(t->category)) { GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(tbuf, t->category); GWEN_Buffer_AppendString(tbuf, "\\n"); GWEN_Buffer_AppendString(tbuf, s); $(struct_prefix)_SetPurpose(t, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } else $(struct_prefix)_SetCategory(t, s); } else { DBG_ERROR(AQBANKING_LOGDOMAIN, "Not adding empty string"); } } $(api) void $(struct_prefix)_SetCategoryFromStringList($(struct_type) *t, const GWEN_STRINGLIST *sl); void $(struct_prefix)_SetCategoryFromStringList($(struct_type) *t, const GWEN_STRINGLIST *sl) { assert(t); if (sl) { GWEN_STRINGLISTENTRY *se; GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 256, 0, 1); se=GWEN_StringList_FirstEntry(sl); while(se) { const char *s; s=GWEN_StringListEntry_Data(se); if (s && *s) { if (GWEN_Buffer_GetUsedBytes(tbuf)) GWEN_Buffer_AppendString(tbuf, "\\n"); GWEN_Buffer_AppendString(tbuf, s); } se=GWEN_StringListEntry_Next(se); } $(struct_prefix)_SetCategory(t, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } else { $(struct_prefix)_SetCategory(t, NULL); } } with_list2 with_list2 $(api) int $(struct_prefix)_List2_freeAll($(struct_type)_LIST2 *tl); with_list2 with_list2 static $(struct_type) *$(struct_prefix)_List2__freeAll_cb($(struct_type) *t, void *user_data) { $(struct_prefix)_free(t); return NULL; } int $(struct_prefix)_List2_freeAll($(struct_type)_LIST2 *tl) { if (tl) { $(struct_prefix)_List2_ForEach(tl, $(struct_prefix)_List2__freeAll_cb, NULL); $(struct_prefix)_List2_free(tl); } else { DBG_ERROR(AQBANKING_LOGDOMAIN, "List missing"); return GWEN_ERROR_INVALID; } return 0; }
AB_Transaction_TypeUnknown AB_Transaction_TypeUnknown public enum with_hash none none AB_Transaction_SubTypeNone AB_Transaction_SubTypeNone public enum with_hash none none AB_Transaction_CommandNone AB_Transaction_CommandNone public enum with_hash none none AB_Transaction_StatusUnknown AB_Transaction_StatusUnknown public enum with_hash none none 0 0 public with_hash This is a unique id of the local account for banking commands. AB_Transaction_AckNever AB_Transaction_AckNever public enum with_hash none none 0 0 public with_hash with_getbymember This is a unique id assigned by the application. However, when adding a transaction to a job (like JobTransfer) this id is assigned by AqBanking to make sure that this id is unique across all applications. 0 0 public with_hash This id is used in splits to refer to the transaction id the split belongs to. It is also used internally by backends when on job is linked to another one. 0 0 public with_hash with_getbymember This is an id assigned by the application only. This id is never changed by AqBanking. 0 0 public with_hash with_getbymember This is an id assigned by the application only. This id is never changed by AqBanking. 0 0 public with_hash This id can be used by applications, e.g. to group jobs into sessions. 0 0 public with_hash This id is assigned by a backend when sending multiple transfer jobs in one backend request (e.g. AqHBCI uses DTAUS files when sending multi-transfer requests; in this case every transfer which goes into the same DTAUS file receives the same group id). public own with_hash const dup const

This id is assigned by the bank. As for the moment only OFX servers actually do assign unique ids to statements.

However, HBCI servers at least assign unique ids to standing orders and dated transfers.

Properties of this group specify the local account to be used for this transaction.

Accounts are usually specified in one of two ways:

  • SEPA: IBAN and BIC
  • non-SEPA: Bank account and Account number
public own with_hash const dup const public own with_hash const dup const public own with_hash const dup const public own with_hash const dup const public own with_hash const dup const This is the branch id of the local bank (OFX only) public own with_hash const dup const public own with_hash const dup const If your account has subaccounts which are distinguished by different suffixes, then this is that suffix. Otherwise it's empty. (HBCI only) public own with_hash const dup const

Properties of this group specify the remote account to be used for this transaction.

public own with_hash const dup const public own with_hash const dup const public own with_hash const dup const This is the branch id of the remote bank (OFX only) public own with_hash const dup const public own with_hash const dup const Same as localSuffix, except for remote account (HBCI only). public own with_hash const dup const public own with_hash const dup const public own with_hash const dup const
AQDB_DataType_String public own with_hash const dup const NULL NULL AQDB_DataType_String public own with_hash const dup const NULL NULL public own with_hash const dup const NULL NULL public own with_hash const dup const NULL NULL public own with_hash const dup const NULL NULL 0 0 public with_hash A 3 digit numerical transaction code, defined for all kinds of different actions. (Geschaeftsvorfallcode) public own with_hash const dup const Transaction text (e.g. STANDING ORDER) (Buchungstext) public own with_hash const dup const this is the transaction id that tells you more about the type of transaction (3 character code) (Buchungsschluessel) (HBCI only) 0 0 public with_hash

A numerical transaction code, defined for all kinds of different actions. (Textschluessel)

For a normal transfer you should set it to 51. For debit notes the values 04 or 05 may be used. For other values please refer to your credit institute. (HBCI only)

public own with_hash const dup const Used for SEPA transfers. public own with_hash const dup const A list of purpose lines, separated by newline characters. public own with_hash const dup const A list of categories assigned to this transaction, separated by newline characters.
public own with_hash const dup const Reference string, if the customer (you) has specified one. (E.g. the cheque number.) Otherwise "NONREF" or empty (Kundenreferenz) public own with_hash const dup const Reference string for this transaction given by the bank, if it has given one. Otherwise empty. (Bankreferenz)

These properties are only used in SEPA statements or transactions.

public own with_hash const dup const This is a reference provided by the issuer of a SEPA transfer. public own with_hash const dup const "Abweichender Empfaenger" (ABWE+). public own with_hash const dup const "Abweichender Auftraggeber" (ABWA+).

These properties are only used in SEPA statements or transactions.

public own with_hash const dup const Creditor Scheme Identification" ("Glaeubiger-ID", assigned by Deutsche Bundesbank). public own with_hash const dup const public own with_hash const dup const SEPA Direct debit mandate id. AQDB_DataType_String public own with_hash const dup const NULL NULL Issue date of the direct debit mandate. public own with_hash const dup const Debitor name for direct debit mandate if given by the debitor. public own with_hash const dup const Original value for "Creditor Scheme Identification", in case that value changed over time. public own with_hash const dup const Original SEPA Direct debit mandate id, in case that changed over time. public own with_hash const dup const Original SEPA Direct debit creditor name, in case that changed over time. AB_Transaction_SequenceUnknown AB_Transaction_SequenceUnknown public enum with_hash none none
AB_Transaction_ChargeUnknown AB_Transaction_ChargeUnknown public enum with_hash none none

This group contains information which is used with transfers to other countries in the world. It is used by backends and applications but not by AqBanking itself.

public own with_hash const dup const Street and number. public own with_hash const dup const Zipcode. public own with_hash const dup const City. public own with_hash const dup const Phone number.

These properties are used with standing orders, i.e. orders which are regularily repeated by the bank.

AB_Transaction_PeriodUnknown AB_Transaction_PeriodUnknown public enum with_hash none none 0 0 public with_hash The standing order is executed every cycle x period. So if period is weekly and cycle is 2 then the standing order is executed every 2 weeks. 0 0 public with_hash The execution day. The meaning of this variable depends on the content of period:
  • monthly: day of the month (starting with 1)
  • weekly: day of the week (starting with 1=Monday)
AQDB_DataType_String public own with_hash const dup const NULL NULL For standing orders this is the first date the transaction is to be executed. For jobs which use date span parameters this is the first date (e.g. "get statements from FIRSTDATE to LASTDATE)" AQDB_DataType_String public own with_hash const dup const NULL NULL For standing orders this is the last date the transaction is to be executed. For jobs which use date span parameters this is the last date (e.g. "get statements from FIRSTDATE to LASTDATE)" AQDB_DataType_String public own with_hash const dup const NULL NULL For standing orders this is the next date the transaction is executed.

These properties are used with securities.

public own with_hash const dup const Unique id of the security within the namespace. This field is also used with accounts. public own with_hash const dup const Namespace for name (e.g. CUSIP for North America) public own with_hash const dup const Unique id of the security within the namespace. public own with_hash const dup const NULL NULL public own with_hash const dup const NULL NULL AQDB_DataType_String public own with_hash const dup const NULL NULL Date of the unit price. public own with_hash const dup const NULL NULL

These properties are only used in estatement requests.

0 0 public with_hash To select a specific estatment document. Estatements are numbered increasingly, starting over at number 1 each year. Year can be given by additionally setting startDate. If no year is given, the current year is taken as base. 0 means no specific selection, return all. 0 0 public with_hash How many estatements to retrieve at most with this transaction.
public own with_hash const dup const User-defined memo. public own volatile const dup const
aqbanking-6.6.1/src/libs/aqbanking/types/ab_document.tm20000664000175000017500000000027015037736054020136 00000000000000 AB_DOCUMENT AB_Document aqbanking-6.6.1/src/libs/aqbanking/types/ab_message.tm20000664000175000017500000000026515037736054017750 00000000000000 AB_MESSAGE AB_Message aqbanking-6.6.1/src/libs/aqbanking/types/ab_message_list2.tm20000664000175000017500000000033415037736054021062 00000000000000 AB_MESSAGE_LIST2 AB_Message_List2 aqbanking-6.6.1/src/libs/aqbanking/types/ab_imexporter_context_list2.tm20000664000175000017500000000040715037736054023401 00000000000000 AB_IMEXPORTER_CONTEXT_LIST2 AB_ImExporterContext_List2 aqbanking-6.6.1/src/libs/aqbanking/types/document.h0000664000175000017500000001240515037736054017224 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "document.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef AB_DOCUMENT_DOCUMENT_H #define AB_DOCUMENT_DOCUMENT_H #ifdef __cplusplus extern "C" { #endif /** @page P_AB_DOCUMENT Structure AB_DOCUMENT

This page describes the properties of AB_DOCUMENT.

AB_DOCUMENT

@anchor AB_DOCUMENT_id

id

Set this property with @ref AB_Document_SetId(), get it with @ref AB_Document_GetId().

@anchor AB_DOCUMENT_ownerId

ownerId

The meaning of this field depends on the type of document. For electronic statements this is the unique id of the account this statement belongs to.

Set this property with @ref AB_Document_SetOwnerId(), get it with @ref AB_Document_GetOwnerId().

@anchor AB_DOCUMENT_mimeType

mimeType

Set this property with @ref AB_Document_SetMimeType(), get it with @ref AB_Document_GetMimeType().

@anchor AB_DOCUMENT_filePath

filePath

Set this property with @ref AB_Document_SetFilePath(), get it with @ref AB_Document_GetFilePath().

@anchor AB_DOCUMENT_data

data

Set this property with @ref AB_Document_SetData(), get it with @ref AB_Document_GetData().

@anchor AB_DOCUMENT_acknowledgeCode

acknowledgeCode

Set this property with @ref AB_Document_SetAcknowledgeCode(), get it with @ref AB_Document_GetAcknowledgeCode().

*/ /* needed system headers */ #include #include #include #include #include /* pre-headers */ #include #include #include #include typedef struct AB_DOCUMENT AB_DOCUMENT; GWEN_LIST_FUNCTION_LIB_DEFS(AB_DOCUMENT, AB_Document, AQBANKING_API) GWEN_LIST2_FUNCTION_LIB_DEFS(AB_DOCUMENT, AB_Document, AQBANKING_API) /* post-headers */ /** Constructor. */ AQBANKING_API AB_DOCUMENT *AB_Document_new(void); /** Destructor. */ AQBANKING_API void AB_Document_free(AB_DOCUMENT *p_struct); AQBANKING_API void AB_Document_Attach(AB_DOCUMENT *p_struct); AQBANKING_API AB_DOCUMENT *AB_Document_dup(const AB_DOCUMENT *p_src); AQBANKING_API AB_DOCUMENT *AB_Document_copy(AB_DOCUMENT *p_struct, const AB_DOCUMENT *p_src); /** Getter. * Use this function to get the member "id" (see @ref AB_DOCUMENT_id) */ AQBANKING_API const char *AB_Document_GetId(const AB_DOCUMENT *p_struct); /** Getter. * Use this function to get the member "ownerId" (see @ref AB_DOCUMENT_ownerId) */ AQBANKING_API uint32_t AB_Document_GetOwnerId(const AB_DOCUMENT *p_struct); /** Getter. * Use this function to get the member "mimeType" (see @ref AB_DOCUMENT_mimeType) */ AQBANKING_API const char *AB_Document_GetMimeType(const AB_DOCUMENT *p_struct); /** Getter. * Use this function to get the member "filePath" (see @ref AB_DOCUMENT_filePath) */ AQBANKING_API const char *AB_Document_GetFilePath(const AB_DOCUMENT *p_struct); /** Setter. * Use this function to set the member "id" (see @ref AB_DOCUMENT_id) */ AQBANKING_API void AB_Document_SetId(AB_DOCUMENT *p_struct, const char *p_src); /** Setter. * Use this function to set the member "ownerId" (see @ref AB_DOCUMENT_ownerId) */ AQBANKING_API void AB_Document_SetOwnerId(AB_DOCUMENT *p_struct, uint32_t p_src); /** Setter. * Use this function to set the member "mimeType" (see @ref AB_DOCUMENT_mimeType) */ AQBANKING_API void AB_Document_SetMimeType(AB_DOCUMENT *p_struct, const char *p_src); /** Setter. * Use this function to set the member "filePath" (see @ref AB_DOCUMENT_filePath) */ AQBANKING_API void AB_Document_SetFilePath(AB_DOCUMENT *p_struct, const char *p_src); AQBANKING_API AB_DOCUMENT_LIST *AB_Document_List_dup(const AB_DOCUMENT_LIST *p_src); AQBANKING_API void AB_Document_ReadDb(AB_DOCUMENT *p_struct, GWEN_DB_NODE *p_db); AQBANKING_API int AB_Document_WriteDb(const AB_DOCUMENT *p_struct, GWEN_DB_NODE *p_db); AQBANKING_API AB_DOCUMENT *AB_Document_fromDb(GWEN_DB_NODE *p_db); AQBANKING_API int AB_Document_toDb(const AB_DOCUMENT *p_struct, GWEN_DB_NODE *p_db); AQBANKING_API void AB_Document_ReadXml(AB_DOCUMENT *p_struct, GWEN_XMLNODE *p_db); AQBANKING_API void AB_Document_WriteXml(const AB_DOCUMENT *p_struct, GWEN_XMLNODE *p_db); AQBANKING_API void AB_Document_toXml(const AB_DOCUMENT *p_struct, GWEN_XMLNODE *p_db); AQBANKING_API AB_DOCUMENT *AB_Document_fromXml(GWEN_XMLNODE *p_db); AQBANKING_API void AB_Document_toHashString(const AB_DOCUMENT *p_struct, GWEN_BUFFER *p_buffer); AQBANKING_API int AB_Document_List2_freeAll(AB_DOCUMENT_LIST2 *tl); AQBANKING_API void AB_Document_SetData(AB_DOCUMENT *st, const uint8_t *p, uint32_t len); AQBANKING_API const uint8_t* AB_Document_GetDataPtr(const AB_DOCUMENT *st); AQBANKING_API uint32_t AB_Document_GetDataLen(const AB_DOCUMENT *st); AQBANKING_API void AB_Document_SetAcknowledgeCode(AB_DOCUMENT *st, const uint8_t *p, uint32_t len); AQBANKING_API const uint8_t* AB_Document_GetAcknowledgeCodePtr(const AB_DOCUMENT *st); AQBANKING_API uint32_t AB_Document_GetAcknowledgeCodeLen(const AB_DOCUMENT *st); #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/aqbanking/types/balance_p.h0000664000175000017500000000115715037736054017314 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "balance.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef AB_BALANCE_BALANCE_P_H #define AB_BALANCE_BALANCE_P_H #include "./balance.h" #ifdef __cplusplus extern "C" { #endif struct AB_BALANCE { GWEN_LIST_ELEMENT(AB_BALANCE) int _refCount; GWEN_DATE *date; AB_VALUE *value; AB_BALANCE_TYPE type; }; #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/aqbanking/types/balance.xml0000664000175000017500000001504514043610744017340 00000000000000 This class holds time and amount of an account balance. AB_BALANCE AB_Balance balance with_db with_xml with_refcount with_list1
aqbanking/error.h
gwenhywfar/types.h
gwenhywfar/gwendate.h
aqbanking/types/value.h
with_list2 with_list2 $(api) int $(struct_prefix)_List2_freeAll($(struct_type)_LIST2 *tl); with_list2 with_list2 static $(struct_type) *$(struct_prefix)_List2__freeAll_cb($(struct_type) *t, void *user_data) { $(struct_prefix)_free(t); return NULL; } int $(struct_prefix)_List2_freeAll($(struct_type)_LIST2 *tl) { if (tl) { $(struct_prefix)_List2_ForEach(tl, $(struct_prefix)_List2__freeAll_cb, NULL); $(struct_prefix)_List2_free(tl); } else { DBG_ERROR(AQBANKING_LOGDOMAIN, "List missing"); return GWEN_ERROR_INVALID; } return 0; } with_list1 with_list1 $(api) AB_BALANCE *$(struct_prefix)_List_FindFirstByType(const $(struct_type)_LIST *bl, int ty); with_list1 with_list1 AB_BALANCE *$(struct_prefix)_List_FindFirstByType(const $(struct_type)_LIST *bl, int ty) { AB_BALANCE *bal; assert(bl); bal=AB_Balance_List_First(bl); while(bal) { if (ty==AB_Balance_TypeNone || ty==bal->type) return bal; bal=AB_Balance_List_Next(bal); } return NULL; } with_list1 with_list1 $(api) AB_BALANCE *$(struct_prefix)_List_FindNextByType($(struct_type) *bal, int ty); with_list1 with_list1 AB_BALANCE *$(struct_prefix)_List_FindNextByType($(struct_type) *bal, int ty) { assert(bal); bal=AB_Balance_List_Next(bal); while(bal) { if (ty==AB_Balance_TypeNone || ty==bal->type) return bal; bal=AB_Balance_List_Next(bal); } return NULL; } with_list1 with_list1 $(api) AB_BALANCE *$(struct_prefix)_List_GetLatestByType(const $(struct_type)_LIST *bl, int ty); with_list1 with_list1 AB_BALANCE *$(struct_prefix)_List_GetLatestByType(const $(struct_type)_LIST *bl, int ty) { AB_BALANCE *lastBal=NULL; const GWEN_DATE *lastDt=NULL; AB_BALANCE *bal=NULL; bal=AB_Balance_List_First(bl); while(bal) { if (ty==0 || (AB_Balance_GetType(bal)==ty)) { const GWEN_DATE *dt; if (lastBal && lastDt && (dt=AB_Balance_GetDate(bal))) { if (GWEN_Date_Compare(dt, lastDt)>0) { lastBal=bal; lastDt=dt; } } else { lastBal=bal; lastDt=AB_Balance_GetDate(bal); } } bal=AB_Balance_List_Next(bal); } return lastBal; }
AQDB_DataType_String public own with_hash const dup const NULL NULL public own const dup const NULL NULL AB_Balance_TypeUnknown AB_Balance_TypeUnknown public enum with_getbymember none none
aqbanking-6.6.1/src/libs/aqbanking/types/ab_security_list2.tm20000664000175000017500000000034015037736054021302 00000000000000 AB_SECURITY_LIST2 AB_Security_List2 aqbanking-6.6.1/src/libs/aqbanking/types/account_spec.c0000664000175000017500000012315415037736054020053 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "account_spec.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "./account_spec_p.h" #include #include /* code headers */ /* macro functions */ GWEN_LIST_FUNCTIONS(AB_ACCOUNT_SPEC, AB_AccountSpec) GWEN_LIST2_FUNCTIONS(AB_ACCOUNT_SPEC, AB_AccountSpec) AB_ACCOUNT_SPEC *AB_AccountSpec_new(void) { AB_ACCOUNT_SPEC *p_struct; GWEN_NEW_OBJECT(AB_ACCOUNT_SPEC, p_struct) p_struct->_refCount=1; GWEN_LIST_INIT(AB_ACCOUNT_SPEC, p_struct) /* members */ p_struct->type=AB_AccountType_Unknown; p_struct->uniqueId=0; p_struct->backendName=NULL; p_struct->ownerName=NULL; p_struct->accountName=NULL; p_struct->currency=NULL; p_struct->memo=NULL; p_struct->iban=NULL; p_struct->bic=NULL; p_struct->country=NULL; p_struct->bankCode=NULL; p_struct->bankName=NULL; p_struct->branchId=NULL; p_struct->accountNumber=NULL; p_struct->subAccountNumber=NULL; p_struct->transactionLimitsList=AB_TransactionLimits_List_new(); p_struct->refAccountList=AB_ReferenceAccount_List_new(); /* virtual functions */ return p_struct; } void AB_AccountSpec_free(AB_ACCOUNT_SPEC *p_struct) { if (p_struct) { assert(p_struct->_refCount); if (p_struct->_refCount==1) { GWEN_LIST_FINI(AB_ACCOUNT_SPEC, p_struct) /* members */ free(p_struct->backendName); p_struct->backendName=NULL; free(p_struct->ownerName); p_struct->ownerName=NULL; free(p_struct->accountName); p_struct->accountName=NULL; free(p_struct->currency); p_struct->currency=NULL; free(p_struct->memo); p_struct->memo=NULL; free(p_struct->iban); p_struct->iban=NULL; free(p_struct->bic); p_struct->bic=NULL; free(p_struct->country); p_struct->country=NULL; free(p_struct->bankCode); p_struct->bankCode=NULL; free(p_struct->bankName); p_struct->bankName=NULL; free(p_struct->branchId); p_struct->branchId=NULL; free(p_struct->accountNumber); p_struct->accountNumber=NULL; free(p_struct->subAccountNumber); p_struct->subAccountNumber=NULL; AB_TransactionLimits_List_free(p_struct->transactionLimitsList); p_struct->transactionLimitsList=NULL; AB_ReferenceAccount_List_free(p_struct->refAccountList); p_struct->refAccountList=NULL; p_struct->_refCount=0; GWEN_FREE_OBJECT(p_struct); } else p_struct->_refCount--; } } void AB_AccountSpec_Attach(AB_ACCOUNT_SPEC *p_struct) { assert(p_struct); assert(p_struct->_refCount); p_struct->_refCount++; } AB_ACCOUNT_SPEC *AB_AccountSpec_dup(const AB_ACCOUNT_SPEC *p_src) { AB_ACCOUNT_SPEC *p_struct; assert(p_src); p_struct=AB_AccountSpec_new(); /* member "type" */ p_struct->type=p_src->type; /* member "uniqueId" */ p_struct->uniqueId=p_src->uniqueId; /* member "backendName" */ if (p_struct->backendName) { free(p_struct->backendName); p_struct->backendName=NULL; p_struct->backendName=NULL; } if (p_src->backendName) { p_struct->backendName=strdup(p_src->backendName); } /* member "ownerName" */ if (p_struct->ownerName) { free(p_struct->ownerName); p_struct->ownerName=NULL; p_struct->ownerName=NULL; } if (p_src->ownerName) { p_struct->ownerName=strdup(p_src->ownerName); } /* member "accountName" */ if (p_struct->accountName) { free(p_struct->accountName); p_struct->accountName=NULL; p_struct->accountName=NULL; } if (p_src->accountName) { p_struct->accountName=strdup(p_src->accountName); } /* member "currency" */ if (p_struct->currency) { free(p_struct->currency); p_struct->currency=NULL; p_struct->currency=NULL; } if (p_src->currency) { p_struct->currency=strdup(p_src->currency); } /* member "memo" */ if (p_struct->memo) { free(p_struct->memo); p_struct->memo=NULL; p_struct->memo=NULL; } if (p_src->memo) { p_struct->memo=strdup(p_src->memo); } /* member "iban" */ if (p_struct->iban) { free(p_struct->iban); p_struct->iban=NULL; p_struct->iban=NULL; } if (p_src->iban) { p_struct->iban=strdup(p_src->iban); } /* member "bic" */ if (p_struct->bic) { free(p_struct->bic); p_struct->bic=NULL; p_struct->bic=NULL; } if (p_src->bic) { p_struct->bic=strdup(p_src->bic); } /* member "country" */ if (p_struct->country) { free(p_struct->country); p_struct->country=NULL; p_struct->country=NULL; } if (p_src->country) { p_struct->country=strdup(p_src->country); } /* member "bankCode" */ if (p_struct->bankCode) { free(p_struct->bankCode); p_struct->bankCode=NULL; p_struct->bankCode=NULL; } if (p_src->bankCode) { p_struct->bankCode=strdup(p_src->bankCode); } /* member "bankName" */ if (p_struct->bankName) { free(p_struct->bankName); p_struct->bankName=NULL; p_struct->bankName=NULL; } if (p_src->bankName) { p_struct->bankName=strdup(p_src->bankName); } /* member "branchId" */ if (p_struct->branchId) { free(p_struct->branchId); p_struct->branchId=NULL; p_struct->branchId=NULL; } if (p_src->branchId) { p_struct->branchId=strdup(p_src->branchId); } /* member "accountNumber" */ if (p_struct->accountNumber) { free(p_struct->accountNumber); p_struct->accountNumber=NULL; p_struct->accountNumber=NULL; } if (p_src->accountNumber) { p_struct->accountNumber=strdup(p_src->accountNumber); } /* member "subAccountNumber" */ if (p_struct->subAccountNumber) { free(p_struct->subAccountNumber); p_struct->subAccountNumber=NULL; p_struct->subAccountNumber=NULL; } if (p_src->subAccountNumber) { p_struct->subAccountNumber=strdup(p_src->subAccountNumber); } /* member "transactionLimitsList" */ if (p_struct->transactionLimitsList) { AB_TransactionLimits_List_free(p_struct->transactionLimitsList); p_struct->transactionLimitsList=NULL; p_struct->transactionLimitsList=NULL; } if (p_src->transactionLimitsList) { p_struct->transactionLimitsList=AB_TransactionLimits_List_dup(p_src->transactionLimitsList); } /* member "refAccountList" */ if (p_struct->refAccountList) { AB_ReferenceAccount_List_free(p_struct->refAccountList); p_struct->refAccountList=NULL; p_struct->refAccountList=NULL; } if (p_src->refAccountList) { p_struct->refAccountList=AB_ReferenceAccount_List_dup(p_src->refAccountList); } return p_struct; } AB_ACCOUNT_SPEC *AB_AccountSpec_copy(AB_ACCOUNT_SPEC *p_struct, const AB_ACCOUNT_SPEC *p_src) { assert(p_struct); assert(p_src); /* member "type" */ p_struct->type=p_src->type; /* member "uniqueId" */ p_struct->uniqueId=p_src->uniqueId; /* member "backendName" */ if (p_struct->backendName) { free(p_struct->backendName); p_struct->backendName=NULL; p_struct->backendName=NULL; } if (p_src->backendName) { p_struct->backendName=strdup(p_src->backendName); } /* member "ownerName" */ if (p_struct->ownerName) { free(p_struct->ownerName); p_struct->ownerName=NULL; p_struct->ownerName=NULL; } if (p_src->ownerName) { p_struct->ownerName=strdup(p_src->ownerName); } /* member "accountName" */ if (p_struct->accountName) { free(p_struct->accountName); p_struct->accountName=NULL; p_struct->accountName=NULL; } if (p_src->accountName) { p_struct->accountName=strdup(p_src->accountName); } /* member "currency" */ if (p_struct->currency) { free(p_struct->currency); p_struct->currency=NULL; p_struct->currency=NULL; } if (p_src->currency) { p_struct->currency=strdup(p_src->currency); } /* member "memo" */ if (p_struct->memo) { free(p_struct->memo); p_struct->memo=NULL; p_struct->memo=NULL; } if (p_src->memo) { p_struct->memo=strdup(p_src->memo); } /* member "iban" */ if (p_struct->iban) { free(p_struct->iban); p_struct->iban=NULL; p_struct->iban=NULL; } if (p_src->iban) { p_struct->iban=strdup(p_src->iban); } /* member "bic" */ if (p_struct->bic) { free(p_struct->bic); p_struct->bic=NULL; p_struct->bic=NULL; } if (p_src->bic) { p_struct->bic=strdup(p_src->bic); } /* member "country" */ if (p_struct->country) { free(p_struct->country); p_struct->country=NULL; p_struct->country=NULL; } if (p_src->country) { p_struct->country=strdup(p_src->country); } /* member "bankCode" */ if (p_struct->bankCode) { free(p_struct->bankCode); p_struct->bankCode=NULL; p_struct->bankCode=NULL; } if (p_src->bankCode) { p_struct->bankCode=strdup(p_src->bankCode); } /* member "bankName" */ if (p_struct->bankName) { free(p_struct->bankName); p_struct->bankName=NULL; p_struct->bankName=NULL; } if (p_src->bankName) { p_struct->bankName=strdup(p_src->bankName); } /* member "branchId" */ if (p_struct->branchId) { free(p_struct->branchId); p_struct->branchId=NULL; p_struct->branchId=NULL; } if (p_src->branchId) { p_struct->branchId=strdup(p_src->branchId); } /* member "accountNumber" */ if (p_struct->accountNumber) { free(p_struct->accountNumber); p_struct->accountNumber=NULL; p_struct->accountNumber=NULL; } if (p_src->accountNumber) { p_struct->accountNumber=strdup(p_src->accountNumber); } /* member "subAccountNumber" */ if (p_struct->subAccountNumber) { free(p_struct->subAccountNumber); p_struct->subAccountNumber=NULL; p_struct->subAccountNumber=NULL; } if (p_src->subAccountNumber) { p_struct->subAccountNumber=strdup(p_src->subAccountNumber); } /* member "transactionLimitsList" */ if (p_struct->transactionLimitsList) { AB_TransactionLimits_List_free(p_struct->transactionLimitsList); p_struct->transactionLimitsList=NULL; p_struct->transactionLimitsList=NULL; } if (p_src->transactionLimitsList) { p_struct->transactionLimitsList=AB_TransactionLimits_List_dup(p_src->transactionLimitsList); } /* member "refAccountList" */ if (p_struct->refAccountList) { AB_ReferenceAccount_List_free(p_struct->refAccountList); p_struct->refAccountList=NULL; p_struct->refAccountList=NULL; } if (p_src->refAccountList) { p_struct->refAccountList=AB_ReferenceAccount_List_dup(p_src->refAccountList); } return p_struct; } int AB_AccountSpec_GetType(const AB_ACCOUNT_SPEC *p_struct){ assert(p_struct); return p_struct->type; } uint32_t AB_AccountSpec_GetUniqueId(const AB_ACCOUNT_SPEC *p_struct){ assert(p_struct); return p_struct->uniqueId; } const char *AB_AccountSpec_GetBackendName(const AB_ACCOUNT_SPEC *p_struct){ assert(p_struct); return p_struct->backendName; } const char *AB_AccountSpec_GetOwnerName(const AB_ACCOUNT_SPEC *p_struct){ assert(p_struct); return p_struct->ownerName; } const char *AB_AccountSpec_GetAccountName(const AB_ACCOUNT_SPEC *p_struct){ assert(p_struct); return p_struct->accountName; } const char *AB_AccountSpec_GetCurrency(const AB_ACCOUNT_SPEC *p_struct){ assert(p_struct); return p_struct->currency; } const char *AB_AccountSpec_GetMemo(const AB_ACCOUNT_SPEC *p_struct){ assert(p_struct); return p_struct->memo; } const char *AB_AccountSpec_GetIban(const AB_ACCOUNT_SPEC *p_struct){ assert(p_struct); return p_struct->iban; } const char *AB_AccountSpec_GetBic(const AB_ACCOUNT_SPEC *p_struct){ assert(p_struct); return p_struct->bic; } const char *AB_AccountSpec_GetCountry(const AB_ACCOUNT_SPEC *p_struct){ assert(p_struct); return p_struct->country; } const char *AB_AccountSpec_GetBankCode(const AB_ACCOUNT_SPEC *p_struct){ assert(p_struct); return p_struct->bankCode; } const char *AB_AccountSpec_GetBankName(const AB_ACCOUNT_SPEC *p_struct){ assert(p_struct); return p_struct->bankName; } const char *AB_AccountSpec_GetBranchId(const AB_ACCOUNT_SPEC *p_struct){ assert(p_struct); return p_struct->branchId; } const char *AB_AccountSpec_GetAccountNumber(const AB_ACCOUNT_SPEC *p_struct){ assert(p_struct); return p_struct->accountNumber; } const char *AB_AccountSpec_GetSubAccountNumber(const AB_ACCOUNT_SPEC *p_struct){ assert(p_struct); return p_struct->subAccountNumber; } AB_TRANSACTION_LIMITS_LIST *AB_AccountSpec_GetTransactionLimitsList(const AB_ACCOUNT_SPEC *p_struct){ assert(p_struct); return p_struct->transactionLimitsList; } AB_REFERENCE_ACCOUNT_LIST *AB_AccountSpec_GetRefAccountList(const AB_ACCOUNT_SPEC *p_struct){ assert(p_struct); return p_struct->refAccountList; } void AB_AccountSpec_SetType(AB_ACCOUNT_SPEC *p_struct, int p_src){ assert(p_struct); p_struct->type=p_src; } void AB_AccountSpec_SetUniqueId(AB_ACCOUNT_SPEC *p_struct, uint32_t p_src){ assert(p_struct); p_struct->uniqueId=p_src; } void AB_AccountSpec_SetBackendName(AB_ACCOUNT_SPEC *p_struct, const char *p_src){ assert(p_struct); if (p_struct->backendName) { free(p_struct->backendName); p_struct->backendName=NULL; p_struct->backendName=NULL; } if (p_src) { p_struct->backendName=strdup(p_src); } else { p_struct->backendName=NULL; } } void AB_AccountSpec_SetOwnerName(AB_ACCOUNT_SPEC *p_struct, const char *p_src){ assert(p_struct); if (p_struct->ownerName) { free(p_struct->ownerName); p_struct->ownerName=NULL; p_struct->ownerName=NULL; } if (p_src) { p_struct->ownerName=strdup(p_src); } else { p_struct->ownerName=NULL; } } void AB_AccountSpec_SetAccountName(AB_ACCOUNT_SPEC *p_struct, const char *p_src){ assert(p_struct); if (p_struct->accountName) { free(p_struct->accountName); p_struct->accountName=NULL; p_struct->accountName=NULL; } if (p_src) { p_struct->accountName=strdup(p_src); } else { p_struct->accountName=NULL; } } void AB_AccountSpec_SetCurrency(AB_ACCOUNT_SPEC *p_struct, const char *p_src){ assert(p_struct); if (p_struct->currency) { free(p_struct->currency); p_struct->currency=NULL; p_struct->currency=NULL; } if (p_src) { p_struct->currency=strdup(p_src); } else { p_struct->currency=NULL; } } void AB_AccountSpec_SetMemo(AB_ACCOUNT_SPEC *p_struct, const char *p_src){ assert(p_struct); if (p_struct->memo) { free(p_struct->memo); p_struct->memo=NULL; p_struct->memo=NULL; } if (p_src) { p_struct->memo=strdup(p_src); } else { p_struct->memo=NULL; } } void AB_AccountSpec_SetIban(AB_ACCOUNT_SPEC *p_struct, const char *p_src){ assert(p_struct); if (p_struct->iban) { free(p_struct->iban); p_struct->iban=NULL; p_struct->iban=NULL; } if (p_src) { p_struct->iban=strdup(p_src); } else { p_struct->iban=NULL; } } void AB_AccountSpec_SetBic(AB_ACCOUNT_SPEC *p_struct, const char *p_src){ assert(p_struct); if (p_struct->bic) { free(p_struct->bic); p_struct->bic=NULL; p_struct->bic=NULL; } if (p_src) { p_struct->bic=strdup(p_src); } else { p_struct->bic=NULL; } } void AB_AccountSpec_SetCountry(AB_ACCOUNT_SPEC *p_struct, const char *p_src){ assert(p_struct); if (p_struct->country) { free(p_struct->country); p_struct->country=NULL; p_struct->country=NULL; } if (p_src) { p_struct->country=strdup(p_src); } else { p_struct->country=NULL; } } void AB_AccountSpec_SetBankCode(AB_ACCOUNT_SPEC *p_struct, const char *p_src){ assert(p_struct); if (p_struct->bankCode) { free(p_struct->bankCode); p_struct->bankCode=NULL; p_struct->bankCode=NULL; } if (p_src) { p_struct->bankCode=strdup(p_src); } else { p_struct->bankCode=NULL; } } void AB_AccountSpec_SetBankName(AB_ACCOUNT_SPEC *p_struct, const char *p_src){ assert(p_struct); if (p_struct->bankName) { free(p_struct->bankName); p_struct->bankName=NULL; p_struct->bankName=NULL; } if (p_src) { p_struct->bankName=strdup(p_src); } else { p_struct->bankName=NULL; } } void AB_AccountSpec_SetBranchId(AB_ACCOUNT_SPEC *p_struct, const char *p_src){ assert(p_struct); if (p_struct->branchId) { free(p_struct->branchId); p_struct->branchId=NULL; p_struct->branchId=NULL; } if (p_src) { p_struct->branchId=strdup(p_src); } else { p_struct->branchId=NULL; } } void AB_AccountSpec_SetAccountNumber(AB_ACCOUNT_SPEC *p_struct, const char *p_src){ assert(p_struct); if (p_struct->accountNumber) { free(p_struct->accountNumber); p_struct->accountNumber=NULL; p_struct->accountNumber=NULL; } if (p_src) { p_struct->accountNumber=strdup(p_src); } else { p_struct->accountNumber=NULL; } } void AB_AccountSpec_SetSubAccountNumber(AB_ACCOUNT_SPEC *p_struct, const char *p_src){ assert(p_struct); if (p_struct->subAccountNumber) { free(p_struct->subAccountNumber); p_struct->subAccountNumber=NULL; p_struct->subAccountNumber=NULL; } if (p_src) { p_struct->subAccountNumber=strdup(p_src); } else { p_struct->subAccountNumber=NULL; } } void AB_AccountSpec_SetTransactionLimitsList(AB_ACCOUNT_SPEC *p_struct, AB_TRANSACTION_LIMITS_LIST *p_src){ assert(p_struct); if (p_struct->transactionLimitsList) { AB_TransactionLimits_List_free(p_struct->transactionLimitsList); p_struct->transactionLimitsList=NULL; p_struct->transactionLimitsList=NULL; } p_struct->transactionLimitsList=p_src; } void AB_AccountSpec_SetRefAccountList(AB_ACCOUNT_SPEC *p_struct, AB_REFERENCE_ACCOUNT_LIST *p_src){ assert(p_struct); if (p_struct->refAccountList) { AB_ReferenceAccount_List_free(p_struct->refAccountList); p_struct->refAccountList=NULL; p_struct->refAccountList=NULL; } p_struct->refAccountList=p_src; } AB_ACCOUNT_SPEC_LIST *AB_AccountSpec_List_dup(const AB_ACCOUNT_SPEC_LIST *p_src) { AB_ACCOUNT_SPEC_LIST *p_dest; AB_ACCOUNT_SPEC *p_elem; assert(p_src); p_dest=AB_AccountSpec_List_new(); p_elem=AB_AccountSpec_List_First(p_src); while(p_elem) { AB_ACCOUNT_SPEC *p_cpy; p_cpy=AB_AccountSpec_dup(p_elem); AB_AccountSpec_List_Add(p_cpy, p_dest); p_elem=AB_AccountSpec_List_Next(p_elem); } return p_dest; } void AB_AccountSpec_ReadDb(AB_ACCOUNT_SPEC *p_struct, GWEN_DB_NODE *p_db){ assert(p_struct); /* member "type" */ p_struct->type=GWEN_DB_GetIntValue(p_db, "type", 0, AB_AccountType_Unknown); /* member "uniqueId" */ p_struct->uniqueId=GWEN_DB_GetIntValue(p_db, "uniqueId", 0, 0); /* member "backendName" */ if (p_struct->backendName) { free(p_struct->backendName); p_struct->backendName=NULL; p_struct->backendName=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "backendName", 0, NULL); if (s) p_struct->backendName=strdup(s); } /* member "ownerName" */ if (p_struct->ownerName) { free(p_struct->ownerName); p_struct->ownerName=NULL; p_struct->ownerName=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "ownerName", 0, NULL); if (s) p_struct->ownerName=strdup(s); } /* member "accountName" */ if (p_struct->accountName) { free(p_struct->accountName); p_struct->accountName=NULL; p_struct->accountName=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "accountName", 0, NULL); if (s) p_struct->accountName=strdup(s); } /* member "currency" */ if (p_struct->currency) { free(p_struct->currency); p_struct->currency=NULL; p_struct->currency=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "currency", 0, NULL); if (s) p_struct->currency=strdup(s); } /* member "memo" */ if (p_struct->memo) { free(p_struct->memo); p_struct->memo=NULL; p_struct->memo=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "memo", 0, NULL); if (s) p_struct->memo=strdup(s); } /* member "iban" */ if (p_struct->iban) { free(p_struct->iban); p_struct->iban=NULL; p_struct->iban=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "iban", 0, NULL); if (s) p_struct->iban=strdup(s); } /* member "bic" */ if (p_struct->bic) { free(p_struct->bic); p_struct->bic=NULL; p_struct->bic=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "bic", 0, NULL); if (s) p_struct->bic=strdup(s); } /* member "country" */ if (p_struct->country) { free(p_struct->country); p_struct->country=NULL; p_struct->country=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "country", 0, NULL); if (s) p_struct->country=strdup(s); } /* member "bankCode" */ if (p_struct->bankCode) { free(p_struct->bankCode); p_struct->bankCode=NULL; p_struct->bankCode=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "bankCode", 0, NULL); if (s) p_struct->bankCode=strdup(s); } /* member "bankName" */ if (p_struct->bankName) { free(p_struct->bankName); p_struct->bankName=NULL; p_struct->bankName=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "bankName", 0, NULL); if (s) p_struct->bankName=strdup(s); } /* member "branchId" */ if (p_struct->branchId) { free(p_struct->branchId); p_struct->branchId=NULL; p_struct->branchId=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "branchId", 0, NULL); if (s) p_struct->branchId=strdup(s); } /* member "accountNumber" */ if (p_struct->accountNumber) { free(p_struct->accountNumber); p_struct->accountNumber=NULL; p_struct->accountNumber=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "accountNumber", 0, NULL); if (s) p_struct->accountNumber=strdup(s); } /* member "subAccountNumber" */ if (p_struct->subAccountNumber) { free(p_struct->subAccountNumber); p_struct->subAccountNumber=NULL; p_struct->subAccountNumber=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "subAccountNumber", 0, NULL); if (s) p_struct->subAccountNumber=strdup(s); } /* member "transactionLimitsList" */ if (p_struct->transactionLimitsList) { AB_TransactionLimits_List_free(p_struct->transactionLimitsList); p_struct->transactionLimitsList=NULL; p_struct->transactionLimitsList=NULL; } { GWEN_DB_NODE *dbSource; dbSource=GWEN_DB_GetGroup(p_db, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "transactionLimitsList"); if (dbSource) { AB_TRANSACTION_LIMITS_LIST *t; GWEN_DB_NODE *dbT; t=AB_TransactionLimits_List_new(); dbT=GWEN_DB_FindFirstGroup(dbSource, "element"); while(dbT) { AB_TRANSACTION_LIMITS *elem; elem=AB_TransactionLimits_fromDb(dbT); if (elem) AB_TransactionLimits_List_Add(elem, t); dbT=GWEN_DB_FindNextGroup(dbT, "element"); } p_struct->transactionLimitsList=t; } else p_struct->transactionLimitsList=AB_TransactionLimits_List_new(); } /* member "refAccountList" */ if (p_struct->refAccountList) { AB_ReferenceAccount_List_free(p_struct->refAccountList); p_struct->refAccountList=NULL; p_struct->refAccountList=NULL; } { GWEN_DB_NODE *dbSource; dbSource=GWEN_DB_GetGroup(p_db, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "refAccountList"); if (dbSource) { AB_REFERENCE_ACCOUNT_LIST *t; GWEN_DB_NODE *dbT; t=AB_ReferenceAccount_List_new(); dbT=GWEN_DB_FindFirstGroup(dbSource, "element"); while(dbT) { AB_REFERENCE_ACCOUNT *elem; elem=AB_ReferenceAccount_fromDb(dbT); if (elem) AB_ReferenceAccount_List_Add(elem, t); dbT=GWEN_DB_FindNextGroup(dbT, "element"); } p_struct->refAccountList=t; } else p_struct->refAccountList=AB_ReferenceAccount_List_new(); } } int AB_AccountSpec_WriteDb(const AB_ACCOUNT_SPEC *p_struct, GWEN_DB_NODE *p_db) { int p_rv; assert(p_struct); /* member "type" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "type", p_struct->type); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "uniqueId" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "uniqueId", p_struct->uniqueId); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "backendName" */ if (p_struct->backendName) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "backendName", p_struct->backendName); else { GWEN_DB_DeleteVar(p_db, "backendName"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "ownerName" */ if (p_struct->ownerName) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "ownerName", p_struct->ownerName); else { GWEN_DB_DeleteVar(p_db, "ownerName"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "accountName" */ if (p_struct->accountName) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "accountName", p_struct->accountName); else { GWEN_DB_DeleteVar(p_db, "accountName"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "currency" */ if (p_struct->currency) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "currency", p_struct->currency); else { GWEN_DB_DeleteVar(p_db, "currency"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "memo" */ if (p_struct->memo) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "memo", p_struct->memo); else { GWEN_DB_DeleteVar(p_db, "memo"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "iban" */ if (p_struct->iban) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "iban", p_struct->iban); else { GWEN_DB_DeleteVar(p_db, "iban"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "bic" */ if (p_struct->bic) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "bic", p_struct->bic); else { GWEN_DB_DeleteVar(p_db, "bic"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "country" */ if (p_struct->country) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "country", p_struct->country); else { GWEN_DB_DeleteVar(p_db, "country"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "bankCode" */ if (p_struct->bankCode) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "bankCode", p_struct->bankCode); else { GWEN_DB_DeleteVar(p_db, "bankCode"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "bankName" */ if (p_struct->bankName) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "bankName", p_struct->bankName); else { GWEN_DB_DeleteVar(p_db, "bankName"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "branchId" */ if (p_struct->branchId) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "branchId", p_struct->branchId); else { GWEN_DB_DeleteVar(p_db, "branchId"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "accountNumber" */ if (p_struct->accountNumber) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "accountNumber", p_struct->accountNumber); else { GWEN_DB_DeleteVar(p_db, "accountNumber"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "subAccountNumber" */ if (p_struct->subAccountNumber) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "subAccountNumber", p_struct->subAccountNumber); else { GWEN_DB_DeleteVar(p_db, "subAccountNumber"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "transactionLimitsList" */ { if (p_struct->transactionLimitsList) { GWEN_DB_NODE *dbDest; AB_TRANSACTION_LIMITS *elem; dbDest=GWEN_DB_GetGroup(p_db, GWEN_DB_FLAGS_OVERWRITE_GROUPS, "transactionLimitsList"); assert(dbDest); p_rv=0; elem=AB_TransactionLimits_List_First(p_struct->transactionLimitsList); while(elem) { GWEN_DB_NODE *dbElem; dbElem=GWEN_DB_GetGroup(dbDest, GWEN_PATH_FLAGS_CREATE_GROUP, "element"); assert(dbElem); p_rv=AB_TransactionLimits_toDb(elem, dbElem); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", p_rv); break; } elem=AB_TransactionLimits_List_Next(elem); } } else p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "refAccountList" */ { if (p_struct->refAccountList) { GWEN_DB_NODE *dbDest; AB_REFERENCE_ACCOUNT *elem; dbDest=GWEN_DB_GetGroup(p_db, GWEN_DB_FLAGS_OVERWRITE_GROUPS, "refAccountList"); assert(dbDest); p_rv=0; elem=AB_ReferenceAccount_List_First(p_struct->refAccountList); while(elem) { GWEN_DB_NODE *dbElem; dbElem=GWEN_DB_GetGroup(dbDest, GWEN_PATH_FLAGS_CREATE_GROUP, "element"); assert(dbElem); p_rv=AB_ReferenceAccount_toDb(elem, dbElem); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", p_rv); break; } elem=AB_ReferenceAccount_List_Next(elem); } } else p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } return 0; } AB_ACCOUNT_SPEC *AB_AccountSpec_fromDb(GWEN_DB_NODE *p_db) { AB_ACCOUNT_SPEC *p_struct; p_struct=AB_AccountSpec_new(); AB_AccountSpec_ReadDb(p_struct, p_db); return p_struct; } int AB_AccountSpec_toDb(const AB_ACCOUNT_SPEC *p_struct, GWEN_DB_NODE *p_db) { return AB_AccountSpec_WriteDb(p_struct, p_db); } void AB_AccountSpec_ReadXml(AB_ACCOUNT_SPEC *p_struct, GWEN_XMLNODE *p_db){ assert(p_struct); /* member "type" */ p_struct->type=GWEN_XMLNode_GetIntValue(p_db, "type", AB_AccountType_Unknown); /* member "uniqueId" */ p_struct->uniqueId=GWEN_XMLNode_GetIntValue(p_db, "uniqueId", 0); /* member "backendName" */ if (p_struct->backendName) { free(p_struct->backendName); p_struct->backendName=NULL; p_struct->backendName=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "backendName", NULL); if (s) p_struct->backendName=strdup(s); } /* member "ownerName" */ if (p_struct->ownerName) { free(p_struct->ownerName); p_struct->ownerName=NULL; p_struct->ownerName=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "ownerName", NULL); if (s) p_struct->ownerName=strdup(s); } /* member "accountName" */ if (p_struct->accountName) { free(p_struct->accountName); p_struct->accountName=NULL; p_struct->accountName=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "accountName", NULL); if (s) p_struct->accountName=strdup(s); } /* member "currency" */ if (p_struct->currency) { free(p_struct->currency); p_struct->currency=NULL; p_struct->currency=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "currency", NULL); if (s) p_struct->currency=strdup(s); } /* member "memo" */ if (p_struct->memo) { free(p_struct->memo); p_struct->memo=NULL; p_struct->memo=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "memo", NULL); if (s) p_struct->memo=strdup(s); } /* member "iban" */ if (p_struct->iban) { free(p_struct->iban); p_struct->iban=NULL; p_struct->iban=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "iban", NULL); if (s) p_struct->iban=strdup(s); } /* member "bic" */ if (p_struct->bic) { free(p_struct->bic); p_struct->bic=NULL; p_struct->bic=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "bic", NULL); if (s) p_struct->bic=strdup(s); } /* member "country" */ if (p_struct->country) { free(p_struct->country); p_struct->country=NULL; p_struct->country=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "country", NULL); if (s) p_struct->country=strdup(s); } /* member "bankCode" */ if (p_struct->bankCode) { free(p_struct->bankCode); p_struct->bankCode=NULL; p_struct->bankCode=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "bankCode", NULL); if (s) p_struct->bankCode=strdup(s); } /* member "bankName" */ if (p_struct->bankName) { free(p_struct->bankName); p_struct->bankName=NULL; p_struct->bankName=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "bankName", NULL); if (s) p_struct->bankName=strdup(s); } /* member "branchId" */ if (p_struct->branchId) { free(p_struct->branchId); p_struct->branchId=NULL; p_struct->branchId=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "branchId", NULL); if (s) p_struct->branchId=strdup(s); } /* member "accountNumber" */ if (p_struct->accountNumber) { free(p_struct->accountNumber); p_struct->accountNumber=NULL; p_struct->accountNumber=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "accountNumber", NULL); if (s) p_struct->accountNumber=strdup(s); } /* member "subAccountNumber" */ if (p_struct->subAccountNumber) { free(p_struct->subAccountNumber); p_struct->subAccountNumber=NULL; p_struct->subAccountNumber=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "subAccountNumber", NULL); if (s) p_struct->subAccountNumber=strdup(s); } /* member "transactionLimitsList" */ if (p_struct->transactionLimitsList) { AB_TransactionLimits_List_free(p_struct->transactionLimitsList); p_struct->transactionLimitsList=NULL; p_struct->transactionLimitsList=NULL; } { GWEN_XMLNODE *dbSource; dbSource=GWEN_XMLNode_FindFirstTag(p_db, "transactionLimitsList", NULL, NULL); if (dbSource) { AB_TRANSACTION_LIMITS_LIST *t; GWEN_XMLNODE *dbT; t=AB_TransactionLimits_List_new(); dbT=GWEN_XMLNode_FindFirstTag(dbSource, "element", NULL, NULL); while(dbT) { AB_TRANSACTION_LIMITS *elem; elem=AB_TransactionLimits_fromXml(dbT); if (elem) AB_TransactionLimits_List_Add(elem, t); dbT=GWEN_XMLNode_FindNextTag(dbT, "element", NULL, NULL); } p_struct->transactionLimitsList=t; } else p_struct->transactionLimitsList=AB_TransactionLimits_List_new(); } /* member "refAccountList" */ if (p_struct->refAccountList) { AB_ReferenceAccount_List_free(p_struct->refAccountList); p_struct->refAccountList=NULL; p_struct->refAccountList=NULL; } { GWEN_XMLNODE *dbSource; dbSource=GWEN_XMLNode_FindFirstTag(p_db, "refAccountList", NULL, NULL); if (dbSource) { AB_REFERENCE_ACCOUNT_LIST *t; GWEN_XMLNODE *dbT; t=AB_ReferenceAccount_List_new(); dbT=GWEN_XMLNode_FindFirstTag(dbSource, "element", NULL, NULL); while(dbT) { AB_REFERENCE_ACCOUNT *elem; elem=AB_ReferenceAccount_fromXml(dbT); if (elem) AB_ReferenceAccount_List_Add(elem, t); dbT=GWEN_XMLNode_FindNextTag(dbT, "element", NULL, NULL); } p_struct->refAccountList=t; } else p_struct->refAccountList=AB_ReferenceAccount_List_new(); } } void AB_AccountSpec_WriteXml(const AB_ACCOUNT_SPEC *p_struct, GWEN_XMLNODE *p_db) { assert(p_struct); /* member "type" */ GWEN_XMLNode_SetIntValue(p_db, "type", p_struct->type); /* member "uniqueId" */ GWEN_XMLNode_SetIntValue(p_db, "uniqueId", p_struct->uniqueId); /* member "backendName" */ GWEN_XMLNode_SetCharValue(p_db, "backendName", p_struct->backendName); /* member "ownerName" */ GWEN_XMLNode_SetCharValue(p_db, "ownerName", p_struct->ownerName); /* member "accountName" */ GWEN_XMLNode_SetCharValue(p_db, "accountName", p_struct->accountName); /* member "currency" */ GWEN_XMLNode_SetCharValue(p_db, "currency", p_struct->currency); /* member "memo" */ GWEN_XMLNode_SetCharValue(p_db, "memo", p_struct->memo); /* member "iban" */ GWEN_XMLNode_SetCharValue(p_db, "iban", p_struct->iban); /* member "bic" */ GWEN_XMLNode_SetCharValue(p_db, "bic", p_struct->bic); /* member "country" */ GWEN_XMLNode_SetCharValue(p_db, "country", p_struct->country); /* member "bankCode" */ GWEN_XMLNode_SetCharValue(p_db, "bankCode", p_struct->bankCode); /* member "bankName" */ GWEN_XMLNode_SetCharValue(p_db, "bankName", p_struct->bankName); /* member "branchId" */ GWEN_XMLNode_SetCharValue(p_db, "branchId", p_struct->branchId); /* member "accountNumber" */ GWEN_XMLNode_SetCharValue(p_db, "accountNumber", p_struct->accountNumber); /* member "subAccountNumber" */ GWEN_XMLNode_SetCharValue(p_db, "subAccountNumber", p_struct->subAccountNumber); /* member "transactionLimitsList" */ { if (p_struct->transactionLimitsList) { GWEN_XMLNODE *dbDest; AB_TRANSACTION_LIMITS *elem; dbDest=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "transactionLimitsList"); elem=AB_TransactionLimits_List_First(p_struct->transactionLimitsList); while(elem) { GWEN_XMLNODE *dbElem; dbElem=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "element"); assert(dbElem); AB_TransactionLimits_toXml(elem, dbElem); GWEN_XMLNode_AddChild(dbDest, dbElem); elem=AB_TransactionLimits_List_Next(elem); } GWEN_XMLNode_AddChild(p_db, dbDest); } } /* member "refAccountList" */ { if (p_struct->refAccountList) { GWEN_XMLNODE *dbDest; AB_REFERENCE_ACCOUNT *elem; dbDest=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "refAccountList"); elem=AB_ReferenceAccount_List_First(p_struct->refAccountList); while(elem) { GWEN_XMLNODE *dbElem; dbElem=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "element"); assert(dbElem); AB_ReferenceAccount_toXml(elem, dbElem); GWEN_XMLNode_AddChild(dbDest, dbElem); elem=AB_ReferenceAccount_List_Next(elem); } GWEN_XMLNode_AddChild(p_db, dbDest); } } } void AB_AccountSpec_toXml(const AB_ACCOUNT_SPEC *p_struct, GWEN_XMLNODE *p_db) { AB_AccountSpec_WriteXml(p_struct, p_db); } AB_ACCOUNT_SPEC *AB_AccountSpec_fromXml(GWEN_XMLNODE *p_db) { AB_ACCOUNT_SPEC *p_struct; p_struct=AB_AccountSpec_new(); AB_AccountSpec_ReadXml(p_struct, p_db); return p_struct; } AB_ACCOUNT_SPEC *AB_AccountSpec_List_GetByUniqueId(const AB_ACCOUNT_SPEC_LIST *p_list, uint32_t p_cmp){ AB_ACCOUNT_SPEC *p_struct; assert(p_list); p_struct = AB_AccountSpec_List_First(p_list); while(p_struct) { int p_rv; if (p_struct->uniqueId==p_cmp) p_rv=0; else if (p_cmpuniqueId) p_rv=-1; else p_rv=1; if (p_rv == 0) return p_struct; p_struct = AB_AccountSpec_List_Next(p_struct); } return NULL; } int AB_AccountSpec_Matches(const AB_ACCOUNT_SPEC *a, const char *backendName, const char *country, const char *bankId, const char *accountNumber, const char *subAccountId, const char *iban, const char *currency, int ty) { const char *lbackendName; const char *lcountry; const char *lbankId; const char *laccountNumber; const char *lsubAccountId; const char *liban; const char *lcurrency; int lty; if (!backendName) backendName="*"; if (!country) country="*"; if (!bankId) bankId="*"; if (!accountNumber) accountNumber="*"; if (!subAccountId) subAccountId="*"; if (!iban) iban="*"; if (!currency) currency="*"; if (ty>=AB_AccountType_Last) ty=AB_AccountType_Unknown; lbackendName=AB_AccountSpec_GetBackendName(a); lcountry=AB_AccountSpec_GetCountry(a); lbankId=AB_AccountSpec_GetBankCode(a); laccountNumber=AB_AccountSpec_GetAccountNumber(a); lsubAccountId=AB_AccountSpec_GetSubAccountNumber(a); liban=AB_AccountSpec_GetIban(a); lcurrency=AB_AccountSpec_GetCurrency(a); lty=AB_AccountSpec_GetType(a); if (!lcountry) lcountry=""; if (!lbankId) lbankId=""; if (!laccountNumber) laccountNumber=""; if (!lsubAccountId) lsubAccountId=""; if (!liban) liban=""; if (!lcurrency) lcurrency=""; if (lty>=AB_AccountType_Last || lty <=AB_AccountType_Unknown) lty=AB_AccountType_Unknown; if ((-1!=GWEN_Text_ComparePattern(lbackendName, backendName, 0)) && (-1!=GWEN_Text_ComparePattern(lcountry, country, 0)) && (-1!=GWEN_Text_ComparePattern(lbankId, bankId, 0)) && (-1!=GWEN_Text_ComparePattern(laccountNumber, accountNumber, 0)) && (-1!=GWEN_Text_ComparePattern(lsubAccountId, subAccountId, 0)) && (-1!=GWEN_Text_ComparePattern(liban, iban, 0)) && (-1!=GWEN_Text_ComparePattern(lcurrency, currency, 0)) && ((ty==AB_AccountType_Unknown) || (ty==lty))) return 1; return 0; } AB_ACCOUNT_SPEC *AB_AccountSpec_List__FindInternal(AB_ACCOUNT_SPEC *a, const char *backendName, const char *country, const char *bankId, const char *accountNumber, const char *subAccountId, const char *iban, const char *currency, int ty) { if (!backendName) backendName="*"; if (!country) country="*"; if (!bankId) bankId="*"; if (!accountNumber) accountNumber="*"; if (!subAccountId) subAccountId="*"; if (!iban) iban="*"; if (!currency) currency="*"; if (ty>=AB_AccountType_Last) ty=AB_AccountType_Unknown; while(a) { const char *lbackendName; lbackendName=AB_AccountSpec_GetBackendName(a); if (! (lbackendName && *lbackendName) ) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Account: %s/%s/%s: No backend, ignoring", AB_AccountSpec_GetCountry(a), AB_AccountSpec_GetBankCode(a), AB_AccountSpec_GetAccountNumber(a)); } else { int rv; rv=AB_AccountSpec_Matches(a, backendName, country, bankId, accountNumber, subAccountId, iban, currency, ty); if (rv==1) break; } a=AB_AccountSpec_List_Next(a); } /* while */ return a; } AB_ACCOUNT_SPEC *AB_AccountSpec_List_FindFirst(const AB_ACCOUNT_SPEC_LIST *al, const char *backendName, const char *country, const char *bankId, const char *accountNumber, const char *subAccountId, const char *iban, const char *currency, int ty) { AB_ACCOUNT_SPEC *a; if (AB_AccountSpec_List_GetCount(al)==0) { DBG_INFO(AQBANKING_LOGDOMAIN, "No accounts"); return NULL; } a=AB_AccountSpec_List_First(al); assert(a); return AB_AccountSpec_List__FindInternal(a, backendName, country, bankId, accountNumber, subAccountId, iban, currency, ty); } AB_ACCOUNT_SPEC *AB_AccountSpec_List_FindNext(AB_ACCOUNT_SPEC *a, const char *backendName, const char *country, const char *bankId, const char *accountNumber, const char *subAccountId, const char *iban, const char *currency, int ty) { assert(a); a=AB_AccountSpec_List_Next(a); if (a==NULL) { DBG_INFO(AQBANKING_LOGDOMAIN, "No more account specs"); return NULL; } return AB_AccountSpec_List__FindInternal(a, backendName, country, bankId, accountNumber, subAccountId, iban, currency, ty); } AB_TRANSACTION_LIMITS *AB_AccountSpec_GetTransactionLimitsForCommand(const AB_ACCOUNT_SPEC *st, int cmd) { assert(st); if (st->transactionLimitsList) return AB_TransactionLimits_List_GetByCommand(st->transactionLimitsList, cmd); return NULL; } void AB_AccountSpec_AddTransactionLimits(AB_ACCOUNT_SPEC *st, AB_TRANSACTION_LIMITS *l) { assert(st); assert(l); if (NULL==st->transactionLimitsList) st->transactionLimitsList=AB_TransactionLimits_List_new(); AB_TransactionLimits_List_Add(l, st->transactionLimitsList); } void AB_AccountSpec_AddReferenceAccount(AB_ACCOUNT_SPEC *st, AB_REFERENCE_ACCOUNT *l) { assert(st); assert(l); if (NULL==st->refAccountList) st->refAccountList=AB_ReferenceAccount_List_new(); AB_ReferenceAccount_List_Add(l, st->refAccountList); } /* code headers */ aqbanking-6.6.1/src/libs/aqbanking/types/ab_document_list2.tm20000664000175000017500000000034015037736054021251 00000000000000 AB_DOCUMENT_LIST2 AB_Document_List2 aqbanking-6.6.1/src/libs/aqbanking/types/refaccount.h0000664000175000017500000003003415037736054017535 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "refaccount.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef AB_REFERENCE_ACCOUNT_REFACCOUNT_H #define AB_REFERENCE_ACCOUNT_REFACCOUNT_H #ifdef __cplusplus extern "C" { #endif /** @page P_AB_REFERENCE_ACCOUNT Structure AB_REFERENCE_ACCOUNT

This page describes the properties of AB_REFERENCE_ACCOUNT.

AB_REFERENCE_ACCOUNT

This type contains all information on reference accounts @anchor AB_REFERENCE_ACCOUNT_iban

iban

International bank account number as specified by the SEPA specs.

Set this property with @ref AB_ReferenceAccount_SetIban(), get it with @ref AB_ReferenceAccount_GetIban().

@anchor AB_REFERENCE_ACCOUNT_bic

bic

SWIFT code of the bank at which this account is registered.

Set this property with @ref AB_ReferenceAccount_SetBic(), get it with @ref AB_ReferenceAccount_GetBic().

@anchor AB_REFERENCE_ACCOUNT_accountNumber

accountNumber

Account number in national account specification.

Set this property with @ref AB_ReferenceAccount_SetAccountNumber(), get it with @ref AB_ReferenceAccount_GetAccountNumber().

@anchor AB_REFERENCE_ACCOUNT_subAccountNumber

subAccountNumber

If your account has subaccounts which are distinguished by different suffixes, then this is that suffix. Otherwise it is empty. (HBCI only)

Set this property with @ref AB_ReferenceAccount_SetSubAccountNumber(), get it with @ref AB_ReferenceAccount_GetSubAccountNumber().

@anchor AB_REFERENCE_ACCOUNT_country

country

Set this property with @ref AB_ReferenceAccount_SetCountry(), get it with @ref AB_ReferenceAccount_GetCountry().

@anchor AB_REFERENCE_ACCOUNT_bankCode

bankCode

National bank code (e.g. BLZ in Germany, routing number in other countries).

Set this property with @ref AB_ReferenceAccount_SetBankCode(), get it with @ref AB_ReferenceAccount_GetBankCode().

@anchor AB_REFERENCE_ACCOUNT_ownerName

ownerName

Name of the account owner as it is stored with the bank.

Set this property with @ref AB_ReferenceAccount_SetOwnerName(), get it with @ref AB_ReferenceAccount_GetOwnerName().

@anchor AB_REFERENCE_ACCOUNT_ownerName2

ownerName2

Name of the account owner as it is stored with the bank.

Set this property with @ref AB_ReferenceAccount_SetOwnerName2(), get it with @ref AB_ReferenceAccount_GetOwnerName2().

@anchor AB_REFERENCE_ACCOUNT_accountName

accountName

Name of the account.

Set this property with @ref AB_ReferenceAccount_SetAccountName(), get it with @ref AB_ReferenceAccount_GetAccountName().

@anchor AB_REFERENCE_ACCOUNT_accountType

accountType

Name of the account.

Set this property with @ref AB_ReferenceAccount_SetAccountType(), get it with @ref AB_ReferenceAccount_GetAccountType().

*/ /* needed system headers */ #include #include #include #include #include /* pre-headers */ #include #include typedef struct AB_REFERENCE_ACCOUNT AB_REFERENCE_ACCOUNT; GWEN_LIST_FUNCTION_LIB_DEFS(AB_REFERENCE_ACCOUNT, AB_ReferenceAccount, AQBANKING_API) GWEN_LIST2_FUNCTION_LIB_DEFS(AB_REFERENCE_ACCOUNT, AB_ReferenceAccount, AQBANKING_API) /* post-headers */ /** Constructor. */ AQBANKING_API AB_REFERENCE_ACCOUNT *AB_ReferenceAccount_new(void); /** Destructor. */ AQBANKING_API void AB_ReferenceAccount_free(AB_REFERENCE_ACCOUNT *p_struct); AQBANKING_API void AB_ReferenceAccount_Attach(AB_REFERENCE_ACCOUNT *p_struct); AQBANKING_API AB_REFERENCE_ACCOUNT *AB_ReferenceAccount_dup(const AB_REFERENCE_ACCOUNT *p_src); AQBANKING_API AB_REFERENCE_ACCOUNT *AB_ReferenceAccount_copy(AB_REFERENCE_ACCOUNT *p_struct, const AB_REFERENCE_ACCOUNT *p_src); /** Getter. * Use this function to get the member "iban" (see @ref AB_REFERENCE_ACCOUNT_iban) */ AQBANKING_API const char *AB_ReferenceAccount_GetIban(const AB_REFERENCE_ACCOUNT *p_struct); /** Getter. * Use this function to get the member "bic" (see @ref AB_REFERENCE_ACCOUNT_bic) */ AQBANKING_API const char *AB_ReferenceAccount_GetBic(const AB_REFERENCE_ACCOUNT *p_struct); /** Getter. * Use this function to get the member "accountNumber" (see @ref AB_REFERENCE_ACCOUNT_accountNumber) */ AQBANKING_API const char *AB_ReferenceAccount_GetAccountNumber(const AB_REFERENCE_ACCOUNT *p_struct); /** Getter. * Use this function to get the member "subAccountNumber" (see @ref AB_REFERENCE_ACCOUNT_subAccountNumber) */ AQBANKING_API const char *AB_ReferenceAccount_GetSubAccountNumber(const AB_REFERENCE_ACCOUNT *p_struct); /** Getter. * Use this function to get the member "country" (see @ref AB_REFERENCE_ACCOUNT_country) */ AQBANKING_API const char *AB_ReferenceAccount_GetCountry(const AB_REFERENCE_ACCOUNT *p_struct); /** Getter. * Use this function to get the member "bankCode" (see @ref AB_REFERENCE_ACCOUNT_bankCode) */ AQBANKING_API const char *AB_ReferenceAccount_GetBankCode(const AB_REFERENCE_ACCOUNT *p_struct); /** Getter. * Use this function to get the member "ownerName" (see @ref AB_REFERENCE_ACCOUNT_ownerName) */ AQBANKING_API const char *AB_ReferenceAccount_GetOwnerName(const AB_REFERENCE_ACCOUNT *p_struct); /** Getter. * Use this function to get the member "ownerName2" (see @ref AB_REFERENCE_ACCOUNT_ownerName2) */ AQBANKING_API const char *AB_ReferenceAccount_GetOwnerName2(const AB_REFERENCE_ACCOUNT *p_struct); /** Getter. * Use this function to get the member "accountName" (see @ref AB_REFERENCE_ACCOUNT_accountName) */ AQBANKING_API const char *AB_ReferenceAccount_GetAccountName(const AB_REFERENCE_ACCOUNT *p_struct); /** Getter. * Use this function to get the member "accountType" (see @ref AB_REFERENCE_ACCOUNT_accountType) */ AQBANKING_API uint8_t AB_ReferenceAccount_GetAccountType(const AB_REFERENCE_ACCOUNT *p_struct); /** Setter. * Use this function to set the member "iban" (see @ref AB_REFERENCE_ACCOUNT_iban) */ AQBANKING_API void AB_ReferenceAccount_SetIban(AB_REFERENCE_ACCOUNT *p_struct, const char *p_src); /** Setter. * Use this function to set the member "bic" (see @ref AB_REFERENCE_ACCOUNT_bic) */ AQBANKING_API void AB_ReferenceAccount_SetBic(AB_REFERENCE_ACCOUNT *p_struct, const char *p_src); /** Setter. * Use this function to set the member "accountNumber" (see @ref AB_REFERENCE_ACCOUNT_accountNumber) */ AQBANKING_API void AB_ReferenceAccount_SetAccountNumber(AB_REFERENCE_ACCOUNT *p_struct, const char *p_src); /** Setter. * Use this function to set the member "subAccountNumber" (see @ref AB_REFERENCE_ACCOUNT_subAccountNumber) */ AQBANKING_API void AB_ReferenceAccount_SetSubAccountNumber(AB_REFERENCE_ACCOUNT *p_struct, const char *p_src); /** Setter. * Use this function to set the member "country" (see @ref AB_REFERENCE_ACCOUNT_country) */ AQBANKING_API void AB_ReferenceAccount_SetCountry(AB_REFERENCE_ACCOUNT *p_struct, const char *p_src); /** Setter. * Use this function to set the member "bankCode" (see @ref AB_REFERENCE_ACCOUNT_bankCode) */ AQBANKING_API void AB_ReferenceAccount_SetBankCode(AB_REFERENCE_ACCOUNT *p_struct, const char *p_src); /** Setter. * Use this function to set the member "ownerName" (see @ref AB_REFERENCE_ACCOUNT_ownerName) */ AQBANKING_API void AB_ReferenceAccount_SetOwnerName(AB_REFERENCE_ACCOUNT *p_struct, const char *p_src); /** Setter. * Use this function to set the member "ownerName2" (see @ref AB_REFERENCE_ACCOUNT_ownerName2) */ AQBANKING_API void AB_ReferenceAccount_SetOwnerName2(AB_REFERENCE_ACCOUNT *p_struct, const char *p_src); /** Setter. * Use this function to set the member "accountName" (see @ref AB_REFERENCE_ACCOUNT_accountName) */ AQBANKING_API void AB_ReferenceAccount_SetAccountName(AB_REFERENCE_ACCOUNT *p_struct, const char *p_src); /** Setter. * Use this function to set the member "accountType" (see @ref AB_REFERENCE_ACCOUNT_accountType) */ AQBANKING_API void AB_ReferenceAccount_SetAccountType(AB_REFERENCE_ACCOUNT *p_struct, uint8_t p_src); AQBANKING_API AB_REFERENCE_ACCOUNT_LIST *AB_ReferenceAccount_List_dup(const AB_REFERENCE_ACCOUNT_LIST *p_src); AQBANKING_API void AB_ReferenceAccount_ReadDb(AB_REFERENCE_ACCOUNT *p_struct, GWEN_DB_NODE *p_db); AQBANKING_API int AB_ReferenceAccount_WriteDb(const AB_REFERENCE_ACCOUNT *p_struct, GWEN_DB_NODE *p_db); AQBANKING_API AB_REFERENCE_ACCOUNT *AB_ReferenceAccount_fromDb(GWEN_DB_NODE *p_db); AQBANKING_API int AB_ReferenceAccount_toDb(const AB_REFERENCE_ACCOUNT *p_struct, GWEN_DB_NODE *p_db); AQBANKING_API void AB_ReferenceAccount_ReadXml(AB_REFERENCE_ACCOUNT *p_struct, GWEN_XMLNODE *p_db); AQBANKING_API void AB_ReferenceAccount_WriteXml(const AB_REFERENCE_ACCOUNT *p_struct, GWEN_XMLNODE *p_db); AQBANKING_API void AB_ReferenceAccount_toXml(const AB_REFERENCE_ACCOUNT *p_struct, GWEN_XMLNODE *p_db); AQBANKING_API AB_REFERENCE_ACCOUNT *AB_ReferenceAccount_fromXml(GWEN_XMLNODE *p_db); /** * Check whether a given reference account info object matches the given criteria. * @param a account info object to match * @param iban IBAN to search for (wildcards and jokers allowed) * @param bic BIC to search for (wildcards and jokers allowed) * @param accountNumber account number to search for (wildcards and jokers allowed) * @param subAccountNumber sub account number (wildcards and jokers allowed) * @param country ISO code of the country (wildcards and jokers allowed) * @param bankCode bank code to search for (wildcards and jokers allowed) * @param ownerName owner name to search for (wildcards and jokers allowed) * @param accountName account name to search for (wildcards and jokers allowed) */ AQBANKING_API int AB_ReferenceAccount_Matches(const AB_REFERENCE_ACCOUNT *a, const char *iban, const char *bic, const char *accountNumber, const char *subAccountNumber, const char *country, const char *bankCode, const char *ownerName, const char *accountName); /** * Find the first matching account info object in a list of account info objects. * @param al list of account info objects among to search @param iban IBAN to search for (wildcards and jokers allowed) * @param bic BIC to search for (wildcards and jokers allowed) * @param accountNumber account number to search for (wildcards and jokers allowed) * @param subAccountNumber sub account number (wildcards and jokers allowed) * @param country ISO code of the country (wildcards and jokers allowed) * @param bankCode bank code to search for (wildcards and jokers allowed) * @param ownerName owner name to search for (wildcards and jokers allowed) * @param accountName account name to search for (wildcards and jokers allowed) */ AQBANKING_API AB_REFERENCE_ACCOUNT *AB_ReferenceAccount_List_FindFirst(const AB_REFERENCE_ACCOUNT_LIST *al, const char *iban, const char *bic, const char *accountNumber, const char *subAccountNumber, const char *country, const char *bankCode, const char *ownerName, const char *accountName); /** * Find the next matching account info object in a list of account info objects. * @param a previous matching account info objects among to search * @param iban IBAN to search for (wildcards and jokers allowed) * @param bic BIC to search for (wildcards and jokers allowed) * @param accountNumber account number to search for (wildcards and jokers allowed) * @param subAccountNumber sub account number (wildcards and jokers allowed) * @param country ISO code of the country (wildcards and jokers allowed) * @param bankCode bank code to search for (wildcards and jokers allowed) * @param ownerName owner name to search for (wildcards and jokers allowed) * @param accountName account name to search for (wildcards and jokers allowed) */ AQBANKING_API AB_REFERENCE_ACCOUNT *AB_ReferenceAccount_List_FindNext(AB_REFERENCE_ACCOUNT *a, const char *iban, const char *bic, const char *accountNumber, const char *subAccountNumber, const char *country, const char *bankCode, const char *ownerName, const char *accountName); #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/aqbanking/types/ab_imexporter_accountinfo.tm20000664000175000017500000000034115037736054023105 00000000000000 AB_IMEXPORTER_ACCOUNTINFO AB_ImExporterAccountInfo aqbanking-6.6.1/src/libs/aqbanking/types/ab_transaction_list2.tm20000664000175000017500000000035415037736054021765 00000000000000 AB_TRANSACTION_LIST2 AB_Transaction_List2 aqbanking-6.6.1/src/libs/aqbanking/types/ab_account_spec_list2.tm20000664000175000017500000000035715037736054022111 00000000000000 AB_ACCOUNT_SPEC_LIST2 AB_AccountSpec_List2 aqbanking-6.6.1/src/libs/aqbanking/types/balance.c0000664000175000017500000002444715037736054016777 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "balance.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "./balance_p.h" #include #include /* code headers */ /* macro functions */ GWEN_LIST_FUNCTIONS(AB_BALANCE, AB_Balance) AB_BALANCE_TYPE AB_Balance_Type_fromString(const char *p_s) { if (p_s && *p_s) { if (strcasecmp(p_s, "none")==0) return AB_Balance_TypeNone; else if (strcasecmp(p_s, "noted")==0) return AB_Balance_TypeNoted; else if (strcasecmp(p_s, "booked")==0) return AB_Balance_TypeBooked; else if (strcasecmp(p_s, "bankLine")==0) return AB_Balance_TypeBankLine; else if (strcasecmp(p_s, "disposable")==0) return AB_Balance_TypeDisposable; else if (strcasecmp(p_s, "temporary")==0) return AB_Balance_TypeTemporary; else if (strcasecmp(p_s, "dayStart")==0) return AB_Balance_TypeDayStart; else if (strcasecmp(p_s, "dayEnd")==0) return AB_Balance_TypeDayEnd; } return AB_Balance_TypeUnknown; } const char *AB_Balance_Type_toString(AB_BALANCE_TYPE p_i) { switch(p_i) { case AB_Balance_TypeNone: return "none"; case AB_Balance_TypeNoted: return "noted"; case AB_Balance_TypeBooked: return "booked"; case AB_Balance_TypeBankLine: return "bankLine"; case AB_Balance_TypeDisposable: return "disposable"; case AB_Balance_TypeTemporary: return "temporary"; case AB_Balance_TypeDayStart: return "dayStart"; case AB_Balance_TypeDayEnd: return "dayEnd"; case AB_Balance_TypeUnknown: default: return "unknown"; } } AB_BALANCE *AB_Balance_new(void) { AB_BALANCE *p_struct; GWEN_NEW_OBJECT(AB_BALANCE, p_struct) p_struct->_refCount=1; GWEN_LIST_INIT(AB_BALANCE, p_struct) /* members */ p_struct->date=NULL; p_struct->value=AB_Value_new(); p_struct->type=AB_Balance_TypeUnknown; /* virtual functions */ return p_struct; } void AB_Balance_free(AB_BALANCE *p_struct) { if (p_struct) { assert(p_struct->_refCount); if (p_struct->_refCount==1) { GWEN_LIST_FINI(AB_BALANCE, p_struct) /* members */ GWEN_Date_free(p_struct->date); p_struct->date=NULL; AB_Value_free(p_struct->value); p_struct->_refCount=0; GWEN_FREE_OBJECT(p_struct); } else p_struct->_refCount--; } } void AB_Balance_Attach(AB_BALANCE *p_struct) { assert(p_struct); assert(p_struct->_refCount); p_struct->_refCount++; } AB_BALANCE *AB_Balance_dup(const AB_BALANCE *p_src) { AB_BALANCE *p_struct; assert(p_src); p_struct=AB_Balance_new(); /* member "date" */ if (p_struct->date) { GWEN_Date_free(p_struct->date); p_struct->date=NULL; p_struct->date=NULL; } if (p_src->date) { p_struct->date=GWEN_Date_dup(p_src->date); } /* member "value" */ if (p_struct->value) { AB_Value_free(p_struct->value); p_struct->value=NULL; } if (p_src->value) { p_struct->value=AB_Value_dup(p_src->value); } /* member "type" */ p_struct->type=p_src->type; return p_struct; } AB_BALANCE *AB_Balance_copy(AB_BALANCE *p_struct, const AB_BALANCE *p_src) { assert(p_struct); assert(p_src); /* member "date" */ if (p_struct->date) { GWEN_Date_free(p_struct->date); p_struct->date=NULL; p_struct->date=NULL; } if (p_src->date) { p_struct->date=GWEN_Date_dup(p_src->date); } /* member "value" */ if (p_struct->value) { AB_Value_free(p_struct->value); p_struct->value=NULL; } if (p_src->value) { p_struct->value=AB_Value_dup(p_src->value); } /* member "type" */ p_struct->type=p_src->type; return p_struct; } const GWEN_DATE *AB_Balance_GetDate(const AB_BALANCE *p_struct){ assert(p_struct); return p_struct->date; } const AB_VALUE *AB_Balance_GetValue(const AB_BALANCE *p_struct){ assert(p_struct); return p_struct->value; } AB_BALANCE_TYPE AB_Balance_GetType(const AB_BALANCE *p_struct){ assert(p_struct); return p_struct->type; } void AB_Balance_SetDate(AB_BALANCE *p_struct, const GWEN_DATE *p_src){ assert(p_struct); if (p_struct->date) { GWEN_Date_free(p_struct->date); p_struct->date=NULL; p_struct->date=NULL; } if (p_src) { p_struct->date=GWEN_Date_dup(p_src); } else { p_struct->date=NULL; } } void AB_Balance_SetValue(AB_BALANCE *p_struct, const AB_VALUE *p_src){ assert(p_struct); if (p_struct->value) { AB_Value_free(p_struct->value); p_struct->value=NULL; } if (p_src) { p_struct->value=AB_Value_dup(p_src); } else { p_struct->value=NULL; } } void AB_Balance_SetType(AB_BALANCE *p_struct, AB_BALANCE_TYPE p_src){ assert(p_struct); p_struct->type=p_src; } AB_BALANCE_LIST *AB_Balance_List_dup(const AB_BALANCE_LIST *p_src) { AB_BALANCE_LIST *p_dest; AB_BALANCE *p_elem; assert(p_src); p_dest=AB_Balance_List_new(); p_elem=AB_Balance_List_First(p_src); while(p_elem) { AB_BALANCE *p_cpy; p_cpy=AB_Balance_dup(p_elem); AB_Balance_List_Add(p_cpy, p_dest); p_elem=AB_Balance_List_Next(p_elem); } return p_dest; } void AB_Balance_ReadDb(AB_BALANCE *p_struct, GWEN_DB_NODE *p_db){ assert(p_struct); /* member "date" */ if (p_struct->date) { GWEN_Date_free(p_struct->date); p_struct->date=NULL; p_struct->date=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "date", 0, NULL); if (s && *s) p_struct->date=GWEN_Date_fromString(s); } /* member "value" */ if (p_struct->value) { AB_Value_free(p_struct->value); p_struct->value=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "value", 0, NULL); if (s) p_struct->value=AB_Value_fromString(s); else p_struct->value=NULL; } /* member "type" */ { const char *s; s=GWEN_DB_GetCharValue(p_db, "type", 0, NULL); if (s) p_struct->type=AB_Balance_Type_fromString(s); else p_struct->type=AB_Balance_TypeUnknown; } } int AB_Balance_WriteDb(const AB_BALANCE *p_struct, GWEN_DB_NODE *p_db) { int p_rv; assert(p_struct); /* member "date" */ if (p_struct->date){ const char *s=GWEN_Date_GetString(p_struct->date); p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "date", s); } else { GWEN_DB_DeleteVar(p_db, "date"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "value" */ if (p_struct->value) { GWEN_BUFFER *tbuf=GWEN_Buffer_new(0, 64, 0, 1); AB_Value_toString(p_struct->value, tbuf); p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "value", GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } else { GWEN_DB_DeleteVar(p_db, "value"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "type" */ p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "type", AB_Balance_Type_toString(p_struct->type)); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } return 0; } AB_BALANCE *AB_Balance_fromDb(GWEN_DB_NODE *p_db) { AB_BALANCE *p_struct; p_struct=AB_Balance_new(); AB_Balance_ReadDb(p_struct, p_db); return p_struct; } int AB_Balance_toDb(const AB_BALANCE *p_struct, GWEN_DB_NODE *p_db) { return AB_Balance_WriteDb(p_struct, p_db); } void AB_Balance_ReadXml(AB_BALANCE *p_struct, GWEN_XMLNODE *p_db){ assert(p_struct); /* member "date" */ if (p_struct->date) { GWEN_Date_free(p_struct->date); p_struct->date=NULL; p_struct->date=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "date", NULL); if (s && *s) p_struct->date=GWEN_Date_fromString(s); } /* member "value" */ if (p_struct->value) { AB_Value_free(p_struct->value); p_struct->value=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "value", NULL); if (s) p_struct->value=AB_Value_fromString(s); else p_struct->value=NULL; } /* member "type" */ { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "type", NULL); if (s) p_struct->type=AB_Balance_Type_fromString(s); else p_struct->type=AB_Balance_TypeUnknown; } } void AB_Balance_WriteXml(const AB_BALANCE *p_struct, GWEN_XMLNODE *p_db) { assert(p_struct); /* member "date" */ if (p_struct->date){ const char *s=GWEN_Date_GetString(p_struct->date); GWEN_XMLNode_SetCharValue(p_db, "date", s); } /* member "value" */ if (p_struct->value) { GWEN_BUFFER *tbuf=GWEN_Buffer_new(0, 64, 0, 1); AB_Value_toString(p_struct->value, tbuf); GWEN_XMLNode_SetCharValue(p_db, "value", GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } /* member "type" */ GWEN_XMLNode_SetCharValue(p_db, "type", AB_Balance_Type_toString(p_struct->type)); } void AB_Balance_toXml(const AB_BALANCE *p_struct, GWEN_XMLNODE *p_db) { AB_Balance_WriteXml(p_struct, p_db); } AB_BALANCE *AB_Balance_fromXml(GWEN_XMLNODE *p_db) { AB_BALANCE *p_struct; p_struct=AB_Balance_new(); AB_Balance_ReadXml(p_struct, p_db); return p_struct; } AB_BALANCE *AB_Balance_List_GetByType(const AB_BALANCE_LIST *p_list, int p_cmp){ AB_BALANCE *p_struct; assert(p_list); p_struct = AB_Balance_List_First(p_list); while(p_struct) { int p_rv; if (p_struct->type==p_cmp) p_rv=0; else if (p_cmptype) p_rv=-1; else p_rv=1; if (p_rv == 0) return p_struct; p_struct = AB_Balance_List_Next(p_struct); } return NULL; } AB_BALANCE *AB_Balance_List_FindFirstByType(const AB_BALANCE_LIST *bl, int ty) { AB_BALANCE *bal; assert(bl); bal=AB_Balance_List_First(bl); while(bal) { if (ty==AB_Balance_TypeNone || ty==bal->type) return bal; bal=AB_Balance_List_Next(bal); } return NULL; } AB_BALANCE *AB_Balance_List_FindNextByType(AB_BALANCE *bal, int ty) { assert(bal); bal=AB_Balance_List_Next(bal); while(bal) { if (ty==AB_Balance_TypeNone || ty==bal->type) return bal; bal=AB_Balance_List_Next(bal); } return NULL; } AB_BALANCE *AB_Balance_List_GetLatestByType(const AB_BALANCE_LIST *bl, int ty) { AB_BALANCE *lastBal=NULL; const GWEN_DATE *lastDt=NULL; AB_BALANCE *bal=NULL; bal=AB_Balance_List_First(bl); while(bal) { if (ty==0 || (AB_Balance_GetType(bal)==ty)) { const GWEN_DATE *dt; if (lastBal && lastDt && (dt=AB_Balance_GetDate(bal))) { if (GWEN_Date_Compare(dt, lastDt)>0) { lastBal=bal; lastDt=dt; } } else { lastBal=bal; lastDt=AB_Balance_GetDate(bal); } } bal=AB_Balance_List_Next(bal); } return lastBal; } /* code headers */ aqbanking-6.6.1/src/libs/aqbanking/types/bankinfo.c0000664000175000017500000007501715037736054017200 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "bankinfo.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "./bankinfo_p.h" #include #include /* code headers */ /* macro functions */ GWEN_LIST_FUNCTIONS(AB_BANKINFO, AB_BankInfo) GWEN_LIST2_FUNCTIONS(AB_BANKINFO, AB_BankInfo) AB_BANKINFO *AB_BankInfo_new(void) { AB_BANKINFO *p_struct; GWEN_NEW_OBJECT(AB_BANKINFO, p_struct) p_struct->_refCount=1; GWEN_LIST_INIT(AB_BANKINFO, p_struct) /* members */ p_struct->country=NULL; p_struct->branchId=NULL; p_struct->bankId=NULL; p_struct->bic=NULL; p_struct->bankName=NULL; p_struct->location=NULL; p_struct->street=NULL; p_struct->zipcode=NULL; p_struct->city=NULL; p_struct->region=NULL; p_struct->phone=NULL; p_struct->fax=NULL; p_struct->email=NULL; p_struct->website=NULL; p_struct->services=AB_BankInfoService_List_new(); /* virtual functions */ return p_struct; } void AB_BankInfo_free(AB_BANKINFO *p_struct) { if (p_struct) { assert(p_struct->_refCount); if (p_struct->_refCount==1) { GWEN_LIST_FINI(AB_BANKINFO, p_struct) /* members */ free(p_struct->country); p_struct->country=NULL; free(p_struct->branchId); p_struct->branchId=NULL; free(p_struct->bankId); p_struct->bankId=NULL; free(p_struct->bic); p_struct->bic=NULL; free(p_struct->bankName); p_struct->bankName=NULL; free(p_struct->location); p_struct->location=NULL; free(p_struct->street); p_struct->street=NULL; free(p_struct->zipcode); p_struct->zipcode=NULL; free(p_struct->city); p_struct->city=NULL; free(p_struct->region); p_struct->region=NULL; free(p_struct->phone); p_struct->phone=NULL; free(p_struct->fax); p_struct->fax=NULL; free(p_struct->email); p_struct->email=NULL; free(p_struct->website); p_struct->website=NULL; AB_BankInfoService_List_free(p_struct->services); p_struct->services=NULL; p_struct->_refCount=0; GWEN_FREE_OBJECT(p_struct); } else p_struct->_refCount--; } } void AB_BankInfo_Attach(AB_BANKINFO *p_struct) { assert(p_struct); assert(p_struct->_refCount); p_struct->_refCount++; } AB_BANKINFO *AB_BankInfo_dup(const AB_BANKINFO *p_src) { AB_BANKINFO *p_struct; assert(p_src); p_struct=AB_BankInfo_new(); /* member "country" */ if (p_struct->country) { free(p_struct->country); p_struct->country=NULL; p_struct->country=NULL; } if (p_src->country) { p_struct->country=strdup(p_src->country); } /* member "branchId" */ if (p_struct->branchId) { free(p_struct->branchId); p_struct->branchId=NULL; p_struct->branchId=NULL; } if (p_src->branchId) { p_struct->branchId=strdup(p_src->branchId); } /* member "bankId" */ if (p_struct->bankId) { free(p_struct->bankId); p_struct->bankId=NULL; p_struct->bankId=NULL; } if (p_src->bankId) { p_struct->bankId=strdup(p_src->bankId); } /* member "bic" */ if (p_struct->bic) { free(p_struct->bic); p_struct->bic=NULL; p_struct->bic=NULL; } if (p_src->bic) { p_struct->bic=strdup(p_src->bic); } /* member "bankName" */ if (p_struct->bankName) { free(p_struct->bankName); p_struct->bankName=NULL; p_struct->bankName=NULL; } if (p_src->bankName) { p_struct->bankName=strdup(p_src->bankName); } /* member "location" */ if (p_struct->location) { free(p_struct->location); p_struct->location=NULL; p_struct->location=NULL; } if (p_src->location) { p_struct->location=strdup(p_src->location); } /* member "street" */ if (p_struct->street) { free(p_struct->street); p_struct->street=NULL; p_struct->street=NULL; } if (p_src->street) { p_struct->street=strdup(p_src->street); } /* member "zipcode" */ if (p_struct->zipcode) { free(p_struct->zipcode); p_struct->zipcode=NULL; p_struct->zipcode=NULL; } if (p_src->zipcode) { p_struct->zipcode=strdup(p_src->zipcode); } /* member "city" */ if (p_struct->city) { free(p_struct->city); p_struct->city=NULL; p_struct->city=NULL; } if (p_src->city) { p_struct->city=strdup(p_src->city); } /* member "region" */ if (p_struct->region) { free(p_struct->region); p_struct->region=NULL; p_struct->region=NULL; } if (p_src->region) { p_struct->region=strdup(p_src->region); } /* member "phone" */ if (p_struct->phone) { free(p_struct->phone); p_struct->phone=NULL; p_struct->phone=NULL; } if (p_src->phone) { p_struct->phone=strdup(p_src->phone); } /* member "fax" */ if (p_struct->fax) { free(p_struct->fax); p_struct->fax=NULL; p_struct->fax=NULL; } if (p_src->fax) { p_struct->fax=strdup(p_src->fax); } /* member "email" */ if (p_struct->email) { free(p_struct->email); p_struct->email=NULL; p_struct->email=NULL; } if (p_src->email) { p_struct->email=strdup(p_src->email); } /* member "website" */ if (p_struct->website) { free(p_struct->website); p_struct->website=NULL; p_struct->website=NULL; } if (p_src->website) { p_struct->website=strdup(p_src->website); } /* member "services" */ if (p_struct->services) { AB_BankInfoService_List_free(p_struct->services); p_struct->services=NULL; p_struct->services=NULL; } if (p_src->services) { p_struct->services=AB_BankInfoService_List_dup(p_src->services); } return p_struct; } AB_BANKINFO *AB_BankInfo_copy(AB_BANKINFO *p_struct, const AB_BANKINFO *p_src) { assert(p_struct); assert(p_src); /* member "country" */ if (p_struct->country) { free(p_struct->country); p_struct->country=NULL; p_struct->country=NULL; } if (p_src->country) { p_struct->country=strdup(p_src->country); } /* member "branchId" */ if (p_struct->branchId) { free(p_struct->branchId); p_struct->branchId=NULL; p_struct->branchId=NULL; } if (p_src->branchId) { p_struct->branchId=strdup(p_src->branchId); } /* member "bankId" */ if (p_struct->bankId) { free(p_struct->bankId); p_struct->bankId=NULL; p_struct->bankId=NULL; } if (p_src->bankId) { p_struct->bankId=strdup(p_src->bankId); } /* member "bic" */ if (p_struct->bic) { free(p_struct->bic); p_struct->bic=NULL; p_struct->bic=NULL; } if (p_src->bic) { p_struct->bic=strdup(p_src->bic); } /* member "bankName" */ if (p_struct->bankName) { free(p_struct->bankName); p_struct->bankName=NULL; p_struct->bankName=NULL; } if (p_src->bankName) { p_struct->bankName=strdup(p_src->bankName); } /* member "location" */ if (p_struct->location) { free(p_struct->location); p_struct->location=NULL; p_struct->location=NULL; } if (p_src->location) { p_struct->location=strdup(p_src->location); } /* member "street" */ if (p_struct->street) { free(p_struct->street); p_struct->street=NULL; p_struct->street=NULL; } if (p_src->street) { p_struct->street=strdup(p_src->street); } /* member "zipcode" */ if (p_struct->zipcode) { free(p_struct->zipcode); p_struct->zipcode=NULL; p_struct->zipcode=NULL; } if (p_src->zipcode) { p_struct->zipcode=strdup(p_src->zipcode); } /* member "city" */ if (p_struct->city) { free(p_struct->city); p_struct->city=NULL; p_struct->city=NULL; } if (p_src->city) { p_struct->city=strdup(p_src->city); } /* member "region" */ if (p_struct->region) { free(p_struct->region); p_struct->region=NULL; p_struct->region=NULL; } if (p_src->region) { p_struct->region=strdup(p_src->region); } /* member "phone" */ if (p_struct->phone) { free(p_struct->phone); p_struct->phone=NULL; p_struct->phone=NULL; } if (p_src->phone) { p_struct->phone=strdup(p_src->phone); } /* member "fax" */ if (p_struct->fax) { free(p_struct->fax); p_struct->fax=NULL; p_struct->fax=NULL; } if (p_src->fax) { p_struct->fax=strdup(p_src->fax); } /* member "email" */ if (p_struct->email) { free(p_struct->email); p_struct->email=NULL; p_struct->email=NULL; } if (p_src->email) { p_struct->email=strdup(p_src->email); } /* member "website" */ if (p_struct->website) { free(p_struct->website); p_struct->website=NULL; p_struct->website=NULL; } if (p_src->website) { p_struct->website=strdup(p_src->website); } /* member "services" */ if (p_struct->services) { AB_BankInfoService_List_free(p_struct->services); p_struct->services=NULL; p_struct->services=NULL; } if (p_src->services) { p_struct->services=AB_BankInfoService_List_dup(p_src->services); } return p_struct; } const char *AB_BankInfo_GetCountry(const AB_BANKINFO *p_struct){ assert(p_struct); return p_struct->country; } const char *AB_BankInfo_GetBranchId(const AB_BANKINFO *p_struct){ assert(p_struct); return p_struct->branchId; } const char *AB_BankInfo_GetBankId(const AB_BANKINFO *p_struct){ assert(p_struct); return p_struct->bankId; } const char *AB_BankInfo_GetBic(const AB_BANKINFO *p_struct){ assert(p_struct); return p_struct->bic; } const char *AB_BankInfo_GetBankName(const AB_BANKINFO *p_struct){ assert(p_struct); return p_struct->bankName; } const char *AB_BankInfo_GetLocation(const AB_BANKINFO *p_struct){ assert(p_struct); return p_struct->location; } const char *AB_BankInfo_GetStreet(const AB_BANKINFO *p_struct){ assert(p_struct); return p_struct->street; } const char *AB_BankInfo_GetZipcode(const AB_BANKINFO *p_struct){ assert(p_struct); return p_struct->zipcode; } const char *AB_BankInfo_GetCity(const AB_BANKINFO *p_struct){ assert(p_struct); return p_struct->city; } const char *AB_BankInfo_GetRegion(const AB_BANKINFO *p_struct){ assert(p_struct); return p_struct->region; } const char *AB_BankInfo_GetPhone(const AB_BANKINFO *p_struct){ assert(p_struct); return p_struct->phone; } const char *AB_BankInfo_GetFax(const AB_BANKINFO *p_struct){ assert(p_struct); return p_struct->fax; } const char *AB_BankInfo_GetEmail(const AB_BANKINFO *p_struct){ assert(p_struct); return p_struct->email; } const char *AB_BankInfo_GetWebsite(const AB_BANKINFO *p_struct){ assert(p_struct); return p_struct->website; } AB_BANKINFO_SERVICE_LIST *AB_BankInfo_GetServices(const AB_BANKINFO *p_struct){ assert(p_struct); return p_struct->services; } void AB_BankInfo_SetCountry(AB_BANKINFO *p_struct, const char *p_src){ assert(p_struct); if (p_struct->country) { free(p_struct->country); p_struct->country=NULL; p_struct->country=NULL; } if (p_src) { p_struct->country=strdup(p_src); } else { p_struct->country=NULL; } } void AB_BankInfo_SetBranchId(AB_BANKINFO *p_struct, const char *p_src){ assert(p_struct); if (p_struct->branchId) { free(p_struct->branchId); p_struct->branchId=NULL; p_struct->branchId=NULL; } if (p_src) { p_struct->branchId=strdup(p_src); } else { p_struct->branchId=NULL; } } void AB_BankInfo_SetBankId(AB_BANKINFO *p_struct, const char *p_src){ assert(p_struct); if (p_struct->bankId) { free(p_struct->bankId); p_struct->bankId=NULL; p_struct->bankId=NULL; } if (p_src) { p_struct->bankId=strdup(p_src); } else { p_struct->bankId=NULL; } } void AB_BankInfo_SetBic(AB_BANKINFO *p_struct, const char *p_src){ assert(p_struct); if (p_struct->bic) { free(p_struct->bic); p_struct->bic=NULL; p_struct->bic=NULL; } if (p_src) { p_struct->bic=strdup(p_src); } else { p_struct->bic=NULL; } } void AB_BankInfo_SetBankName(AB_BANKINFO *p_struct, const char *p_src){ assert(p_struct); if (p_struct->bankName) { free(p_struct->bankName); p_struct->bankName=NULL; p_struct->bankName=NULL; } if (p_src) { p_struct->bankName=strdup(p_src); } else { p_struct->bankName=NULL; } } void AB_BankInfo_SetLocation(AB_BANKINFO *p_struct, const char *p_src){ assert(p_struct); if (p_struct->location) { free(p_struct->location); p_struct->location=NULL; p_struct->location=NULL; } if (p_src) { p_struct->location=strdup(p_src); } else { p_struct->location=NULL; } } void AB_BankInfo_SetStreet(AB_BANKINFO *p_struct, const char *p_src){ assert(p_struct); if (p_struct->street) { free(p_struct->street); p_struct->street=NULL; p_struct->street=NULL; } if (p_src) { p_struct->street=strdup(p_src); } else { p_struct->street=NULL; } } void AB_BankInfo_SetZipcode(AB_BANKINFO *p_struct, const char *p_src){ assert(p_struct); if (p_struct->zipcode) { free(p_struct->zipcode); p_struct->zipcode=NULL; p_struct->zipcode=NULL; } if (p_src) { p_struct->zipcode=strdup(p_src); } else { p_struct->zipcode=NULL; } } void AB_BankInfo_SetCity(AB_BANKINFO *p_struct, const char *p_src){ assert(p_struct); if (p_struct->city) { free(p_struct->city); p_struct->city=NULL; p_struct->city=NULL; } if (p_src) { p_struct->city=strdup(p_src); } else { p_struct->city=NULL; } } void AB_BankInfo_SetRegion(AB_BANKINFO *p_struct, const char *p_src){ assert(p_struct); if (p_struct->region) { free(p_struct->region); p_struct->region=NULL; p_struct->region=NULL; } if (p_src) { p_struct->region=strdup(p_src); } else { p_struct->region=NULL; } } void AB_BankInfo_SetPhone(AB_BANKINFO *p_struct, const char *p_src){ assert(p_struct); if (p_struct->phone) { free(p_struct->phone); p_struct->phone=NULL; p_struct->phone=NULL; } if (p_src) { p_struct->phone=strdup(p_src); } else { p_struct->phone=NULL; } } void AB_BankInfo_SetFax(AB_BANKINFO *p_struct, const char *p_src){ assert(p_struct); if (p_struct->fax) { free(p_struct->fax); p_struct->fax=NULL; p_struct->fax=NULL; } if (p_src) { p_struct->fax=strdup(p_src); } else { p_struct->fax=NULL; } } void AB_BankInfo_SetEmail(AB_BANKINFO *p_struct, const char *p_src){ assert(p_struct); if (p_struct->email) { free(p_struct->email); p_struct->email=NULL; p_struct->email=NULL; } if (p_src) { p_struct->email=strdup(p_src); } else { p_struct->email=NULL; } } void AB_BankInfo_SetWebsite(AB_BANKINFO *p_struct, const char *p_src){ assert(p_struct); if (p_struct->website) { free(p_struct->website); p_struct->website=NULL; p_struct->website=NULL; } if (p_src) { p_struct->website=strdup(p_src); } else { p_struct->website=NULL; } } void AB_BankInfo_SetServices(AB_BANKINFO *p_struct, AB_BANKINFO_SERVICE_LIST *p_src){ assert(p_struct); if (p_struct->services) { AB_BankInfoService_List_free(p_struct->services); p_struct->services=NULL; p_struct->services=NULL; } p_struct->services=p_src; } AB_BANKINFO_LIST *AB_BankInfo_List_dup(const AB_BANKINFO_LIST *p_src) { AB_BANKINFO_LIST *p_dest; AB_BANKINFO *p_elem; assert(p_src); p_dest=AB_BankInfo_List_new(); p_elem=AB_BankInfo_List_First(p_src); while(p_elem) { AB_BANKINFO *p_cpy; p_cpy=AB_BankInfo_dup(p_elem); AB_BankInfo_List_Add(p_cpy, p_dest); p_elem=AB_BankInfo_List_Next(p_elem); } return p_dest; } void AB_BankInfo_ReadDb(AB_BANKINFO *p_struct, GWEN_DB_NODE *p_db){ assert(p_struct); /* member "country" */ if (p_struct->country) { free(p_struct->country); p_struct->country=NULL; p_struct->country=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "country", 0, NULL); if (s) p_struct->country=strdup(s); } /* member "branchId" */ if (p_struct->branchId) { free(p_struct->branchId); p_struct->branchId=NULL; p_struct->branchId=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "branchId", 0, NULL); if (s) p_struct->branchId=strdup(s); } /* member "bankId" */ if (p_struct->bankId) { free(p_struct->bankId); p_struct->bankId=NULL; p_struct->bankId=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "bankId", 0, NULL); if (s) p_struct->bankId=strdup(s); } /* member "bic" */ if (p_struct->bic) { free(p_struct->bic); p_struct->bic=NULL; p_struct->bic=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "bic", 0, NULL); if (s) p_struct->bic=strdup(s); } /* member "bankName" */ if (p_struct->bankName) { free(p_struct->bankName); p_struct->bankName=NULL; p_struct->bankName=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "bankName", 0, NULL); if (s) p_struct->bankName=strdup(s); } /* member "location" */ if (p_struct->location) { free(p_struct->location); p_struct->location=NULL; p_struct->location=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "location", 0, NULL); if (s) p_struct->location=strdup(s); } /* member "street" */ if (p_struct->street) { free(p_struct->street); p_struct->street=NULL; p_struct->street=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "street", 0, NULL); if (s) p_struct->street=strdup(s); } /* member "zipcode" */ if (p_struct->zipcode) { free(p_struct->zipcode); p_struct->zipcode=NULL; p_struct->zipcode=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "zipcode", 0, NULL); if (s) p_struct->zipcode=strdup(s); } /* member "city" */ if (p_struct->city) { free(p_struct->city); p_struct->city=NULL; p_struct->city=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "city", 0, NULL); if (s) p_struct->city=strdup(s); } /* member "region" */ if (p_struct->region) { free(p_struct->region); p_struct->region=NULL; p_struct->region=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "region", 0, NULL); if (s) p_struct->region=strdup(s); } /* member "phone" */ if (p_struct->phone) { free(p_struct->phone); p_struct->phone=NULL; p_struct->phone=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "phone", 0, NULL); if (s) p_struct->phone=strdup(s); } /* member "fax" */ if (p_struct->fax) { free(p_struct->fax); p_struct->fax=NULL; p_struct->fax=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "fax", 0, NULL); if (s) p_struct->fax=strdup(s); } /* member "email" */ if (p_struct->email) { free(p_struct->email); p_struct->email=NULL; p_struct->email=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "email", 0, NULL); if (s) p_struct->email=strdup(s); } /* member "website" */ if (p_struct->website) { free(p_struct->website); p_struct->website=NULL; p_struct->website=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "website", 0, NULL); if (s) p_struct->website=strdup(s); } /* member "services" */ if (p_struct->services) { AB_BankInfoService_List_free(p_struct->services); p_struct->services=NULL; p_struct->services=NULL; } { GWEN_DB_NODE *dbSource; dbSource=GWEN_DB_GetGroup(p_db, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "services"); if (dbSource) { AB_BANKINFO_SERVICE_LIST *t; GWEN_DB_NODE *dbT; t=AB_BankInfoService_List_new(); dbT=GWEN_DB_FindFirstGroup(dbSource, "element"); while(dbT) { AB_BANKINFO_SERVICE *elem; elem=AB_BankInfoService_fromDb(dbT); if (elem) AB_BankInfoService_List_Add(elem, t); dbT=GWEN_DB_FindNextGroup(dbT, "element"); } p_struct->services=t; } else p_struct->services=AB_BankInfoService_List_new(); } } int AB_BankInfo_WriteDb(const AB_BANKINFO *p_struct, GWEN_DB_NODE *p_db) { int p_rv; assert(p_struct); /* member "country" */ if (p_struct->country) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "country", p_struct->country); else { GWEN_DB_DeleteVar(p_db, "country"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "branchId" */ if (p_struct->branchId) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "branchId", p_struct->branchId); else { GWEN_DB_DeleteVar(p_db, "branchId"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "bankId" */ if (p_struct->bankId) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "bankId", p_struct->bankId); else { GWEN_DB_DeleteVar(p_db, "bankId"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "bic" */ if (p_struct->bic) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "bic", p_struct->bic); else { GWEN_DB_DeleteVar(p_db, "bic"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "bankName" */ if (p_struct->bankName) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "bankName", p_struct->bankName); else { GWEN_DB_DeleteVar(p_db, "bankName"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "location" */ if (p_struct->location) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "location", p_struct->location); else { GWEN_DB_DeleteVar(p_db, "location"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "street" */ if (p_struct->street) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "street", p_struct->street); else { GWEN_DB_DeleteVar(p_db, "street"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "zipcode" */ if (p_struct->zipcode) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "zipcode", p_struct->zipcode); else { GWEN_DB_DeleteVar(p_db, "zipcode"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "city" */ if (p_struct->city) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "city", p_struct->city); else { GWEN_DB_DeleteVar(p_db, "city"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "region" */ if (p_struct->region) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "region", p_struct->region); else { GWEN_DB_DeleteVar(p_db, "region"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "phone" */ if (p_struct->phone) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "phone", p_struct->phone); else { GWEN_DB_DeleteVar(p_db, "phone"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "fax" */ if (p_struct->fax) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "fax", p_struct->fax); else { GWEN_DB_DeleteVar(p_db, "fax"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "email" */ if (p_struct->email) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "email", p_struct->email); else { GWEN_DB_DeleteVar(p_db, "email"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "website" */ if (p_struct->website) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "website", p_struct->website); else { GWEN_DB_DeleteVar(p_db, "website"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "services" */ { if (p_struct->services) { GWEN_DB_NODE *dbDest; AB_BANKINFO_SERVICE *elem; dbDest=GWEN_DB_GetGroup(p_db, GWEN_DB_FLAGS_OVERWRITE_GROUPS, "services"); assert(dbDest); p_rv=0; elem=AB_BankInfoService_List_First(p_struct->services); while(elem) { GWEN_DB_NODE *dbElem; dbElem=GWEN_DB_GetGroup(dbDest, GWEN_PATH_FLAGS_CREATE_GROUP, "element"); assert(dbElem); p_rv=AB_BankInfoService_toDb(elem, dbElem); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", p_rv); break; } elem=AB_BankInfoService_List_Next(elem); } } else p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } return 0; } AB_BANKINFO *AB_BankInfo_fromDb(GWEN_DB_NODE *p_db) { AB_BANKINFO *p_struct; p_struct=AB_BankInfo_new(); AB_BankInfo_ReadDb(p_struct, p_db); return p_struct; } int AB_BankInfo_toDb(const AB_BANKINFO *p_struct, GWEN_DB_NODE *p_db) { return AB_BankInfo_WriteDb(p_struct, p_db); } void AB_BankInfo_ReadXml(AB_BANKINFO *p_struct, GWEN_XMLNODE *p_db){ assert(p_struct); /* member "country" */ if (p_struct->country) { free(p_struct->country); p_struct->country=NULL; p_struct->country=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "country", NULL); if (s) p_struct->country=strdup(s); } /* member "branchId" */ if (p_struct->branchId) { free(p_struct->branchId); p_struct->branchId=NULL; p_struct->branchId=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "branchId", NULL); if (s) p_struct->branchId=strdup(s); } /* member "bankId" */ if (p_struct->bankId) { free(p_struct->bankId); p_struct->bankId=NULL; p_struct->bankId=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "bankId", NULL); if (s) p_struct->bankId=strdup(s); } /* member "bic" */ if (p_struct->bic) { free(p_struct->bic); p_struct->bic=NULL; p_struct->bic=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "bic", NULL); if (s) p_struct->bic=strdup(s); } /* member "bankName" */ if (p_struct->bankName) { free(p_struct->bankName); p_struct->bankName=NULL; p_struct->bankName=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "bankName", NULL); if (s) p_struct->bankName=strdup(s); } /* member "location" */ if (p_struct->location) { free(p_struct->location); p_struct->location=NULL; p_struct->location=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "location", NULL); if (s) p_struct->location=strdup(s); } /* member "street" */ if (p_struct->street) { free(p_struct->street); p_struct->street=NULL; p_struct->street=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "street", NULL); if (s) p_struct->street=strdup(s); } /* member "zipcode" */ if (p_struct->zipcode) { free(p_struct->zipcode); p_struct->zipcode=NULL; p_struct->zipcode=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "zipcode", NULL); if (s) p_struct->zipcode=strdup(s); } /* member "city" */ if (p_struct->city) { free(p_struct->city); p_struct->city=NULL; p_struct->city=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "city", NULL); if (s) p_struct->city=strdup(s); } /* member "region" */ if (p_struct->region) { free(p_struct->region); p_struct->region=NULL; p_struct->region=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "region", NULL); if (s) p_struct->region=strdup(s); } /* member "phone" */ if (p_struct->phone) { free(p_struct->phone); p_struct->phone=NULL; p_struct->phone=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "phone", NULL); if (s) p_struct->phone=strdup(s); } /* member "fax" */ if (p_struct->fax) { free(p_struct->fax); p_struct->fax=NULL; p_struct->fax=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "fax", NULL); if (s) p_struct->fax=strdup(s); } /* member "email" */ if (p_struct->email) { free(p_struct->email); p_struct->email=NULL; p_struct->email=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "email", NULL); if (s) p_struct->email=strdup(s); } /* member "website" */ if (p_struct->website) { free(p_struct->website); p_struct->website=NULL; p_struct->website=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "website", NULL); if (s) p_struct->website=strdup(s); } /* member "services" */ if (p_struct->services) { AB_BankInfoService_List_free(p_struct->services); p_struct->services=NULL; p_struct->services=NULL; } { GWEN_XMLNODE *dbSource; dbSource=GWEN_XMLNode_FindFirstTag(p_db, "services", NULL, NULL); if (dbSource) { AB_BANKINFO_SERVICE_LIST *t; GWEN_XMLNODE *dbT; t=AB_BankInfoService_List_new(); dbT=GWEN_XMLNode_FindFirstTag(dbSource, "element", NULL, NULL); while(dbT) { AB_BANKINFO_SERVICE *elem; elem=AB_BankInfoService_fromXml(dbT); if (elem) AB_BankInfoService_List_Add(elem, t); dbT=GWEN_XMLNode_FindNextTag(dbT, "element", NULL, NULL); } p_struct->services=t; } else p_struct->services=AB_BankInfoService_List_new(); } } void AB_BankInfo_WriteXml(const AB_BANKINFO *p_struct, GWEN_XMLNODE *p_db) { assert(p_struct); /* member "country" */ GWEN_XMLNode_SetCharValue(p_db, "country", p_struct->country); /* member "branchId" */ GWEN_XMLNode_SetCharValue(p_db, "branchId", p_struct->branchId); /* member "bankId" */ GWEN_XMLNode_SetCharValue(p_db, "bankId", p_struct->bankId); /* member "bic" */ GWEN_XMLNode_SetCharValue(p_db, "bic", p_struct->bic); /* member "bankName" */ GWEN_XMLNode_SetCharValue(p_db, "bankName", p_struct->bankName); /* member "location" */ GWEN_XMLNode_SetCharValue(p_db, "location", p_struct->location); /* member "street" */ GWEN_XMLNode_SetCharValue(p_db, "street", p_struct->street); /* member "zipcode" */ GWEN_XMLNode_SetCharValue(p_db, "zipcode", p_struct->zipcode); /* member "city" */ GWEN_XMLNode_SetCharValue(p_db, "city", p_struct->city); /* member "region" */ GWEN_XMLNode_SetCharValue(p_db, "region", p_struct->region); /* member "phone" */ GWEN_XMLNode_SetCharValue(p_db, "phone", p_struct->phone); /* member "fax" */ GWEN_XMLNode_SetCharValue(p_db, "fax", p_struct->fax); /* member "email" */ GWEN_XMLNode_SetCharValue(p_db, "email", p_struct->email); /* member "website" */ GWEN_XMLNode_SetCharValue(p_db, "website", p_struct->website); /* member "services" */ { if (p_struct->services) { GWEN_XMLNODE *dbDest; AB_BANKINFO_SERVICE *elem; dbDest=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "services"); elem=AB_BankInfoService_List_First(p_struct->services); while(elem) { GWEN_XMLNODE *dbElem; dbElem=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "element"); assert(dbElem); AB_BankInfoService_toXml(elem, dbElem); GWEN_XMLNode_AddChild(dbDest, dbElem); elem=AB_BankInfoService_List_Next(elem); } GWEN_XMLNode_AddChild(p_db, dbDest); } } } void AB_BankInfo_toXml(const AB_BANKINFO *p_struct, GWEN_XMLNODE *p_db) { AB_BankInfo_WriteXml(p_struct, p_db); } AB_BANKINFO *AB_BankInfo_fromXml(GWEN_XMLNODE *p_db) { AB_BANKINFO *p_struct; p_struct=AB_BankInfo_new(); AB_BankInfo_ReadXml(p_struct, p_db); return p_struct; } static AB_BANKINFO *AB_BankInfo_List2__freeAll_cb(AB_BANKINFO *t, void *user_data) { AB_BankInfo_free(t); return NULL; } int AB_BankInfo_List2_freeAll(AB_BANKINFO_LIST2 *tl) { if (tl) { AB_BankInfo_List2_ForEach(tl, AB_BankInfo_List2__freeAll_cb, NULL); AB_BankInfo_List2_free(tl); } else { DBG_ERROR(AQBANKING_LOGDOMAIN, "List missing"); return GWEN_ERROR_INVALID; } return 0; } /* code headers */ aqbanking-6.6.1/src/libs/aqbanking/types/Makefile.am0000664000175000017500000000740114156464025017266 00000000000000#SUBDIRS=typemaker2 AM_CPPFLAGS = -I$(srcdir)/../.. -I$(srcdir)/.. \ -I$(top_builddir)/src/libs \ $(gwenhywfar_includes) AM_CFLAGS=-DBUILDING_AQBANKING @visibility_cflags@ noinst_LTLIBRARIES=libabtypes.la typefiles=\ transaction.xml \ transactionlimits.xml \ refaccount.xml \ security.xml \ bankinfoservice.xml \ bankinfo.xml \ document.xml \ message.xml \ balance.xml \ imexporter_accountinfo.xml \ imexporter_context.xml \ account_spec.xml typedatadir=$(datadir)/aqbanking/typemaker2/c dist_typedata_DATA=\ ab_account_spec.tm2 ab_account_spec_list.tm2 ab_account_spec_list2.tm2 \ ab_balance.tm2 ab_balance_list.tm2 \ ab_bankinfo.tm2 ab_bankinfo_list.tm2 ab_bankinfo_list2.tm2 \ ab_bankinfo_service.tm2 ab_bankinfo_service_list.tm2 ab_bankinfo_service_list2.tm2 \ ab_document.tm2 ab_document_list.tm2 ab_document_list2.tm2 \ ab_imexporter_accountinfo.tm2 ab_imexporter_accountinfo_list.tm2 ab_imexporter_accountinfo_list2.tm2 \ ab_imexporter_context.tm2 ab_imexporter_context_list.tm2 ab_imexporter_context_list2.tm2 \ ab_message.tm2 ab_message_list.tm2 ab_message_list2.tm2 \ ab_security.tm2 ab_security_list.tm2 ab_security_list2.tm2 \ ab_transaction.tm2 ab_transaction_list.tm2 ab_transaction_list2.tm2 \ ab_transaction_limits.tm2 ab_transaction_limits_list.tm2 ab_transaction_limits_list2.tm2 \ ab_reference_account.tm2 ab_reference_account_list.tm2 ab_reference_account_list2.tm2 built_sources= \ transaction.c \ transactionlimits.c \ refaccount.c \ bankinfoservice.c \ bankinfo.c \ document.c \ message.c \ security.c \ balance.c \ imexporter_accountinfo.c \ imexporter_context.c \ account_spec.c build_headers_priv= \ transaction_p.h \ transactionlimits_p.h \ refaccount_p.h \ bankinfoservice_p.h \ bankinfo_p.h \ document_p.h \ message_p.h \ security_p.h \ balance_p.h \ imexporter_accountinfo_p.h \ imexporter_context_p.h \ account_spec_p.h build_headers_pub= \ transaction.h \ transactionlimits.h \ refaccount.h \ bankinfoservice.h \ bankinfo.h \ document.h \ message.h \ security.h \ balance.h \ imexporter_accountinfo.h \ imexporter_context.h \ account_spec.h build_headers=$(build_headers_priv) $(build_headers_pub) libabtypes_la_SOURCES=$(built_sources) \ value.c iheaderdir=@aqbanking_headerdir_am@/aqbanking/types iheader_HEADERS=$(build_headers_pub) \ value.h noinst_HEADERS=$(build_headers_priv) \ value_p.h EXTRA_DIST=$(typefiles) $(built_sources) $(build_headers) built_sources: $(built_sources) list='$(SUBDIRS)'; for d in $$list; do \ $(MAKE) -C $$d built_sources; \ done ; clean_build_files: rm -f $(built_sources) $(build_headers) format_build_files: for f in $(built_sources) $(build_headers); do \ $(ASTYLE) --style=stroustrup -s2 --min-conditional-indent=0 --indent-labels --max-continuation-indent=80 --pad-comma --pad-header --unpad-paren --align-pointer=name --break-closing-braces --break-one-line-headers --attach-return-type --convert-tabs --max-code-length=120 --break-after-logical --suffix=none $$f; \ done sources: for f in $(libabtypes_la_SOURCES) $(EXTRA_DIST); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d sources; \ done typefiles: $(typefiles) $(typemaker2_exe) -I $(top_srcdir)/src/libs/aqbanking/typemaker2/c -I $(gwenhywfar_dir)/share/gwenhywfar/typemaker2/c -I $(srcdir) --destfolder="$(srcdir)" -D AQBANKING_API $(typefiles) typedefs: $(typefiles) $(typemaker2_exe) --defs-only -I $(top_srcdir)/src/libs/aqbanking/typemaker2/c -I $(gwenhywfar_dir)/share/gwenhywfar/typemaker2/c -I $(srcdir) --destfolder="$(srcdir)" -D AQBANKING_API $(typefiles) cppcheck: for f in $(libabtypes_la_SOURCES); do \ cppcheck --force $$f ; \ done aqbanking-6.6.1/src/libs/aqbanking/types/transactionlimits.xml0000664000175000017500000005370014043610744021522 00000000000000 This type describes the limits for fields of an @ref AB_TRANSACTION. The limits have the following meanings:
  • maxLenSOMETHING: if 0 then this limit is unknown, if -1 then the described element is not allowed to be set in the transaction. All other values represent the maximum length of the described field.
  • minLenSOMETHING: if 0 then this limit is unknown. All other values represent the minimum length of the described field.
  • maxLinesSOMETHING: if 0 then this limit is unknown All other values represent the maximum number of lines for the described field.
  • minLinesSOMETHING: if 0 then this limit is unknown. All other values represent the minimum number of lines for the described field.
  • valuesSOMETHING: A list of allowed values (as string). If this list is empty then there all values are allowed (those lists @b exist in any case, so the appropriate getter function will never return NULL).
  • allowSOMETHING: If SOMETHING is allowed then the value is "1". If SOMETHING is NOT allowed then the value is "-1". If it is unknown whether SOMETHING is allowed or not then this value is "0".
So if you want to check whether an given field is at all allowed you must check whether "maxLenSOMETHING" has a value of "-1".
AB_TRANSACTION_LIMITS AB_TransactionLimits transactionlimits with_xml with_db with_list1 with_list2 with_refcount
aqbanking/error.h
$(api) int $(struct_prefix)_ValuesCycleWeekAdd($(struct_type) *t, uint8_t v); int $(struct_prefix)_ValuesCycleWeekAdd($(struct_type) *t, uint8_t v) { assert(t); if (t->valuesCycleWeekUsed < $(struct_prefix)_GetValuesCycleWeekArraySize()) { t->valuesCycleWeek[t->valuesCycleWeekUsed++]=v; return 0; } else { DBG_ERROR(AQBANKING_LOGDOMAIN, "Too many entries (%d)", t->valuesCycleWeekUsed); return GWEN_ERROR_BUFFER_OVERFLOW; } } $(api) int $(struct_prefix)_ValuesCycleWeekHas(const $(struct_type) *t, uint8_t v); int $(struct_prefix)_ValuesCycleWeekHas(const $(struct_type) *t, uint8_t v) { int j; assert(t); for (j=0; j<t->valuesCycleWeekUsed; j++) { if (t->valuesCycleWeek[j]==v) return 1; } return 0; } $(api) int $(struct_prefix)_ValuesCycleMonthAdd($(struct_type) *t, uint8_t v); int $(struct_prefix)_ValuesCycleMonthAdd($(struct_type) *t, uint8_t v) { assert(t); if (t->valuesCycleMonthUsed < $(struct_prefix)_GetValuesCycleMonthArraySize()) { t->valuesCycleMonth[t->valuesCycleMonthUsed++]=v; return 0; } else { DBG_ERROR(AQBANKING_LOGDOMAIN, "Too many entries (%d)", t->valuesCycleMonthUsed); return GWEN_ERROR_BUFFER_OVERFLOW; } } $(api) int $(struct_prefix)_ValuesCycleMonthHas(const $(struct_type) *t, uint8_t v); int $(struct_prefix)_ValuesCycleMonthHas(const $(struct_type) *t, uint8_t v) { int j; assert(t); for (j=0; j<t->valuesCycleMonthUsed; j++) { if (t->valuesCycleMonth[j]==v) return 1; } return 0; } $(api) int $(struct_prefix)_ValuesExecutionDayWeekAdd($(struct_type) *t, uint8_t v); int $(struct_prefix)_ValuesExecutionDayWeekAdd($(struct_type) *t, uint8_t v) { assert(t); if (t->valuesExecutionDayWeekUsed < $(struct_prefix)_GetValuesExecutionDayWeekArraySize()) { t->valuesExecutionDayWeek[t->valuesExecutionDayWeekUsed++]=v; return 0; } else { DBG_ERROR(AQBANKING_LOGDOMAIN, "Too many entries (%d)", t->valuesExecutionDayWeekUsed); return GWEN_ERROR_BUFFER_OVERFLOW; } } $(api) int $(struct_prefix)_ValuesExecutionDayWeekHas(const $(struct_type) *t, uint8_t v); int $(struct_prefix)_ValuesExecutionDayWeekHas(const $(struct_type) *t, uint8_t v) { int j; assert(t); for (j=0; j<t->valuesExecutionDayWeekUsed; j++) { if (t->valuesExecutionDayWeek[j]==v) return 1; } return 0; } $(api) int $(struct_prefix)_ValuesExecutionDayMonthAdd($(struct_type) *t, uint8_t v); int $(struct_prefix)_ValuesExecutionDayMonthAdd($(struct_type) *t, uint8_t v) { assert(t); if (t->valuesExecutionDayMonthUsed < $(struct_prefix)_GetValuesExecutionDayMonthArraySize()) { t->valuesExecutionDayMonth[t->valuesExecutionDayMonthUsed++]=v; return 0; } else { DBG_ERROR(AQBANKING_LOGDOMAIN, "Too many entries (%d)", t->valuesExecutionDayMonthUsed); return GWEN_ERROR_BUFFER_OVERFLOW; } } $(api) int $(struct_prefix)_ValuesExecutionDayMonthHas(const $(struct_type) *t, uint8_t v); int $(struct_prefix)_ValuesExecutionDayMonthHas(const $(struct_type) *t, uint8_t v) { int j; assert(t); for (j=0; j<t->valuesExecutionDayMonthUsed; j++) { if (t->valuesExecutionDayMonth[j]==v) return 1; } return 0; }
0 0 public with_getbymember Command to which these hints apply (see @ref AB_Transaction_CommandGetBalance and others). Limits for the issuer name. 0 0 public 0 0 public Limits for the payee name. 0 0 public 0 0 public Limits for customer reference. 0 0 public 0 0 public Limits for bank reference. 0 0 public 0 0 public Limits for purpose (called memo in some apps). 0 0 public 0 0 public 0 0 public 0 0 public Limits for date. 0 0 public Defines whether setting of the execution date (@ref AB_Transaction_SetDate) is required (value=1) or forbidden (value=-1), value=0 means "unknown". These limits apply to standing orders and dated transfers only. 0 0 public Minimum time in days between issuing of a request and its first execution. 0 0 public Maximum time in days between issuing of a request and its first execution. 0 0 public Minimum time in days between issuing of a request and its first execution. This is for a first request (e.g. first debit note). 0 0 public Maximum time in days between issuing of a request and its first execution. This is for a first request (e.g. first debit note). 0 0 public Minimum time in days between issuing of a request and its execution. This is for a one time only request (e.g. onetime debit note). 0 0 public Maximum time in days between issuing of a request and its execution. This is for a one time only request (e.g. onetime debit note). 0 0 public Minimum time in days between issuing of a request and its execution. This is for a following request (e.g. a recurring debit note). 0 0 public Maximum time in days between issuing of a request and its first execution. This is for a following request (e.g. a recurring debit note). 0 0 public Minimum time in days between issuing of a request and its execution. This is for a final request (e.g. last debit note). 0 0 public Maximum time in days between issuing of a request and its execution. This is for a final request (e.g. last debit note). omit const const public This array contains one entry for every supported cycle. These value are accepted when "period" is "weekly". The first entry is the number of used entries following. Allowed values are "0" (all cycles possible) and "1"-"52". public Number of bytes actually stored in the array valuesCycleWeek. omit const const public This array contains one entry for every supported cycle. These value are accepted when "period" is "monthly". The first entry is the number of used entries following. Allowed values are "0" (all cycles possible) and "1"-"12". public Number of bytes actually stored in the array valuesCycleMonth. omit const const public This array contains one entry for every supported day of the week. These value are accepted when "period" is "weekly". The first entry is the number of used entries following. Allowed values are "0" (all days allowed) and "1"-"7". public Number of bytes actually stored in the array valuesExecutionDayWeek. omit const const public This list contains one entry for every supported monthly cycle. These value are accepted when "period" is "monthly". The first entry is the number of used entries following. Allowed are "0" (all days possible), "1"-"30", "97" (ultimo-2), "98" (ultimo-1) and "99" (ultimo). public Number of bytes actually stored in the array valuesExecutionDayMonth. 0 0 public 0 0 public 0 0 public 0 0 public 0 0 public 0 0 public 0 0 public 0 0 public 0 0 public 0 0 public 0 0 public 0 0 public
aqbanking-6.6.1/src/libs/aqbanking/types/ab_bankinfo.tm20000664000175000017500000000027015037736054020107 00000000000000 AB_BANKINFO AB_BankInfo aqbanking-6.6.1/src/libs/aqbanking/types/transactionlimits_p.h0000664000175000017500000000351515037736054021476 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "transactionlimits.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef AB_TRANSACTION_LIMITS_TRANSACTIONLIMITS_P_H #define AB_TRANSACTION_LIMITS_TRANSACTIONLIMITS_P_H #include "./transactionlimits.h" #ifdef __cplusplus extern "C" { #endif struct AB_TRANSACTION_LIMITS { GWEN_LIST_ELEMENT(AB_TRANSACTION_LIMITS) int _refCount; int command; int maxLenLocalName; int minLenLocalName; int maxLenRemoteName; int minLenRemoteName; int maxLenCustomerReference; int minLenCustomerReference; int maxLenBankReference; int minLenBankReference; int maxLenPurpose; int minLenPurpose; int maxLinesPurpose; int minLinesPurpose; int needDate; int minValueSetupTime; int maxValueSetupTime; int minValueSetupTimeFirst; int maxValueSetupTimeFirst; int minValueSetupTimeOnce; int maxValueSetupTimeOnce; int minValueSetupTimeRecurring; int maxValueSetupTimeRecurring; int minValueSetupTimeFinal; int maxValueSetupTimeFinal; uint8_t valuesCycleWeek[64]; int valuesCycleWeekUsed; uint8_t valuesCycleMonth[64]; int valuesCycleMonthUsed; uint8_t valuesExecutionDayWeek[16]; int valuesExecutionDayWeekUsed; uint8_t valuesExecutionDayMonth[64]; int valuesExecutionDayMonthUsed; int allowMonthly; int allowWeekly; int allowChangeRecipientAccount; int allowChangeRecipientName; int allowChangeValue; int allowChangeTextKey; int allowChangePurpose; int allowChangeFirstExecutionDate; int allowChangeLastExecutionDate; int allowChangeCycle; int allowChangePeriod; int allowChangeExecutionDay; }; #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/aqbanking/types/ab_account_spec.tm20000664000175000017500000000030315037736054020763 00000000000000 AB_ACCOUNT_SPEC AB_AccountSpec aqbanking-6.6.1/src/libs/aqbanking/types/imexporter_context.xml0000664000175000017500000004110614043610744021712 00000000000000 AB_IMEXPORTER_CONTEXT AB_ImExporterContext imexporter_context with_db with_xml with_list1 with_list2 with_refcount
aqbanking/error.h
gwenhywfar/types.h
gwenhywfar/gwentime.h
aqbanking/types/value.h
aqbanking/types/security.h
aqbanking/types/message.h
aqbanking/types/imexporter_accountinfo.h
with_list2 with_list2 $(api) int $(struct_prefix)_List2_freeAll($(struct_type)_LIST2 *tl); with_list2 with_list2 static $(struct_type) *$(struct_prefix)_List2__freeAll_cb($(struct_type) *t, void *user_data) { $(struct_prefix)_free(t); return NULL; } int $(struct_prefix)_List2_freeAll($(struct_type)_LIST2 *tl) { if (tl) { $(struct_prefix)_List2_ForEach(tl, $(struct_prefix)_List2__freeAll_cb, NULL); $(struct_prefix)_List2_free(tl); } else { DBG_ERROR(AQBANKING_LOGDOMAIN, "List missing"); return GWEN_ERROR_INVALID; } return 0; } /** \n * This function clears the context (e.g. removes all transactions etc). \n */ \n $(api) void $(struct_prefix)_Clear($(struct_type) *st); void $(struct_prefix)_Clear($(struct_type) *st) { assert(st); if (st->accountInfoList) AB_ImExporterAccountInfo_List_Clear(st->accountInfoList); if (st->securityList) AB_Security_List_Clear(st->securityList); if (st->messageList) AB_Message_List_Clear(st->messageList); } /** \n * Adds the content of the second context to the first one. \n * Frees the second context. \n */\n $(api) void $(struct_prefix)_AddContext($(struct_type) *st, $(struct_type) *stSrc); void $(struct_prefix)_AddContext($(struct_type) *st, $(struct_type) *stSrc) { assert(st); if (stSrc->accountInfoList) { AB_IMEXPORTER_ACCOUNTINFO *iea; iea=AB_ImExporterAccountInfo_List_First(stSrc->accountInfoList); while(iea) { AB_IMEXPORTER_ACCOUNTINFO *ieaNext; ieaNext=AB_ImExporterAccountInfo_List_Next(iea); AB_ImExporterAccountInfo_List_Del(iea); AB_ImExporterAccountInfo_List_Add(iea, st->accountInfoList); iea=ieaNext; } } if (stSrc->securityList) { AB_SECURITY *sec; sec=AB_Security_List_First(stSrc->securityList); while(sec) { AB_SECURITY *secNext; secNext=AB_Security_List_Next(sec); AB_Security_List_Del(sec); AB_Security_List_Add(sec, st->securityList); sec=secNext; } } if (stSrc->messageList) { AB_MESSAGE *msg; msg=AB_Message_List_First(stSrc->messageList); while(msg) { AB_MESSAGE *msgNext; msgNext=AB_Message_List_Next(msg); AB_Message_List_Del(msg); AB_Message_List_Add(msg, st->messageList); msg=msgNext; } } $(struct_prefix)_free(stSrc); } $(api) AB_IMEXPORTER_ACCOUNTINFO *$(struct_prefix)_GetFirstAccountInfo(const $(struct_type) *st); AB_IMEXPORTER_ACCOUNTINFO *$(struct_prefix)_GetFirstAccountInfo(const $(struct_type) *st) { assert(st); if (st->accountInfoList) return AB_ImExporterAccountInfo_List_First(st->accountInfoList); return NULL; } $(api) void $(struct_prefix)_AddAccountInfo($(struct_type) *st, AB_IMEXPORTER_ACCOUNTINFO *ai); void $(struct_prefix)_AddAccountInfo($(struct_type) *st, AB_IMEXPORTER_ACCOUNTINFO *ai) { assert(st); if (ai) { if (NULL==st->accountInfoList) st->accountInfoList=AB_ImExporterAccountInfo_List_new(); AB_ImExporterAccountInfo_List_Add(ai, st->accountInfoList); } } $(api) int $(struct_prefix)_GetAccountInfoCount(const $(struct_type) *st); int $(struct_prefix)_GetAccountInfoCount(const $(struct_type) *st) { assert(st); if (st->accountInfoList) return AB_ImExporterAccountInfo_List_GetCount(st->accountInfoList); return 0; } $(api) AB_IMEXPORTER_ACCOUNTINFO *$(struct_prefix)_GetOrAddAccountInfo($(struct_type) *st, uint32_t uniqueId, const char *iban, const char *bankCode, const char *accountNumber, int accountType); AB_IMEXPORTER_ACCOUNTINFO *$(struct_prefix)_GetOrAddAccountInfo($(struct_type) *st, uint32_t uniqueId, const char *iban, const char *bankCode, const char *accountNumber, int accountType) { assert(st); if (NULL==st->accountInfoList) st->accountInfoList=AB_ImExporterAccountInfo_List_new(); return AB_ImExporterAccountInfo_List_GetOrAdd(st->accountInfoList, uniqueId, iban, bankCode, accountNumber, accountType); } $(api) AB_SECURITY *$(struct_prefix)_GetFirstSecurity(const $(struct_type) *st); AB_SECURITY *$(struct_prefix)_GetFirstSecurity(const $(struct_type) *st) { assert(st); if (st->securityList) return AB_Security_List_First(st->securityList); return NULL; } $(api) AB_SECURITY *$(struct_prefix)_FindSecurity(const $(struct_type) *st, const char *nameSpace, const char *id); AB_SECURITY *$(struct_prefix)_FindSecurity(const $(struct_type) *st, const char *nameSpace, const char *id) { assert(st); if (st->securityList) { AB_SECURITY *sec; assert(st); if (nameSpace==NULL) nameSpace=""; if (id==NULL) id=""; sec=AB_Security_List_First(st->securityList); while(sec) { const char *s1, *s2; s1=AB_Security_GetUniqueId(sec); if (s1==NULL) s1=""; s2=AB_Security_GetNameSpace(sec); if (s2==NULL) s2=""; if (strcasecmp(s2, nameSpace)==0 && strcasecmp(s1, id)==0) return sec; sec=AB_Security_List_Next(sec); } } return NULL; } $(api) void $(struct_prefix)_AddSecurity($(struct_type) *st, AB_SECURITY *sec); void $(struct_prefix)_AddSecurity($(struct_type) *st, AB_SECURITY *sec) { assert(st); if (sec) { if (NULL==st->securityList) st->securityList=AB_Security_List_new(); AB_Security_List_Add(sec, st->securityList); } } $(api) AB_MESSAGE *$(struct_prefix)_GetFirstMessage(const $(struct_type) *st); AB_MESSAGE *$(struct_prefix)_GetFirstMessage(const $(struct_type) *st) { assert(st); if (st->messageList) return AB_Message_List_First(st->messageList); return NULL; } $(api) void $(struct_prefix)_AddMessage($(struct_type) *st, AB_MESSAGE *msg); void $(struct_prefix)_AddMessage($(struct_type) *st, AB_MESSAGE *msg) { assert(st); if (msg) { if (NULL==st->messageList) st->messageList=AB_Message_List_new(); AB_Message_List_Add(msg, st->messageList); } } $(api) void $(struct_prefix)_AddTransaction($(struct_type) *st, AB_TRANSACTION *t); void $(struct_prefix)_AddTransaction($(struct_type) *st, AB_TRANSACTION *t) { assert(st); if (t) { AB_IMEXPORTER_ACCOUNTINFO *ai=NULL; if (NULL==st->accountInfoList) { /* no account info list, nothing to search, just create the list */ st->accountInfoList=AB_ImExporterAccountInfo_List_new(); } else { /* first try to get by unique account id */ if (AB_Transaction_GetUniqueAccountId(t)) ai=AB_ImExporterAccountInfo_List_GetByAccountId(st->accountInfoList, AB_Transaction_GetUniqueAccountId(t)); /* next try by IBAN */ if (ai==NULL) { const char *s; s=AB_Transaction_GetLocalIban(t); if (s && *s) ai=AB_ImExporterAccountInfo_List_GetByIban(st->accountInfoList, s); } /* then try by account number and bank code */ if (ai==NULL) ai=AB_ImExporterAccountInfo_List_GetByBankCodeAndAccountNumber(st->accountInfoList, AB_Transaction_GetLocalBankCode(t), AB_Transaction_GetLocalAccountNumber(t), AB_AccountType_Unknown); } /* create account info if not found */ if (ai==NULL) { /* create account info */ ai=AB_ImExporterAccountInfo_new(); AB_ImExporterAccountInfo_FillFromTransaction(ai, t); AB_ImExporterAccountInfo_List_Add(ai, st->accountInfoList); } /* set transaction type if none set */ if (AB_Transaction_GetType(t)<=AB_Transaction_TypeNone) AB_Transaction_SetType(t, AB_Transaction_TypeStatement); /* finally add transaction */ AB_ImExporterAccountInfo_AddTransaction(ai, t); } }
NULL AB_ImExporterAccountInfo_List_new() public own nodup none NULL AB_Security_List_new() public own nodup none NULL AB_Message_List_new() public own nodup none
aqbanking-6.6.1/src/libs/aqbanking/types/ab_security.tm20000664000175000017500000000027015037736054020167 00000000000000 AB_SECURITY AB_Security aqbanking-6.6.1/src/libs/aqbanking/types/imexporter_context_p.h0000664000175000017500000000137615037736054021674 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "imexporter_context.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef AB_IMEXPORTER_CONTEXT_IMEXPORTER_CONTEXT_P_H #define AB_IMEXPORTER_CONTEXT_IMEXPORTER_CONTEXT_P_H #include "./imexporter_context.h" #ifdef __cplusplus extern "C" { #endif struct AB_IMEXPORTER_CONTEXT { GWEN_LIST_ELEMENT(AB_IMEXPORTER_CONTEXT) int _refCount; AB_IMEXPORTER_ACCOUNTINFO_LIST *accountInfoList; AB_SECURITY_LIST *securityList; AB_MESSAGE_LIST *messageList; }; #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/aqbanking/types/ab_security_list.tm20000664000175000017500000000033515037736054021224 00000000000000 AB_SECURITY_LIST AB_Security_List aqbanking-6.6.1/src/libs/aqbanking/types/message.h0000664000175000017500000001342715037736054017037 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "message.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef AB_MESSAGE_MESSAGE_H #define AB_MESSAGE_MESSAGE_H #ifdef __cplusplus extern "C" { #endif /** @page P_AB_MESSAGE Structure AB_MESSAGE

This page describes the properties of AB_MESSAGE.

AB_MESSAGE

@anchor AB_MESSAGE_source

source

Set this property with @ref AB_Message_SetSource(), get it with @ref AB_Message_GetSource().

@anchor AB_MESSAGE_userId

userId

ID of the user in whose context the message has been received (see @ref AB_User_GetUniqueId).

Set this property with @ref AB_Message_SetUserId(), get it with @ref AB_Message_GetUserId().

@anchor AB_MESSAGE_accountId

accountId

ID of the account in whose context the message has been received (if any). This field is not set by AqHBCI but may be used by other backends in some cases.

Set this property with @ref AB_Message_SetAccountId(), get it with @ref AB_Message_GetAccountId().

@anchor AB_MESSAGE_subject

subject

Set this property with @ref AB_Message_SetSubject(), get it with @ref AB_Message_GetSubject().

@anchor AB_MESSAGE_text

text

Set this property with @ref AB_Message_SetText(), get it with @ref AB_Message_GetText().

@anchor AB_MESSAGE_dateReceived

dateReceived

Set this property with @ref AB_Message_SetDateReceived(), get it with @ref AB_Message_GetDateReceived().

*/ /* needed system headers */ #include #include #include #include #include /* pre-headers */ #include #include #include typedef struct AB_MESSAGE AB_MESSAGE; GWEN_LIST_FUNCTION_LIB_DEFS(AB_MESSAGE, AB_Message, AQBANKING_API) GWEN_LIST2_FUNCTION_LIB_DEFS(AB_MESSAGE, AB_Message, AQBANKING_API) typedef enum { AB_Message_SourceUnknown = -1, AB_Message_SourceNone = 0, AB_Message_SourceSystem, AB_Message_SourceBank } AB_MESSAGE_SOURCE; /* post-headers */ AQBANKING_API AB_MESSAGE_SOURCE AB_Message_Source_fromString(const char *p_s); AQBANKING_API const char *AB_Message_Source_toString(AB_MESSAGE_SOURCE p_i); /** Constructor. */ AQBANKING_API AB_MESSAGE *AB_Message_new(void); /** Destructor. */ AQBANKING_API void AB_Message_free(AB_MESSAGE *p_struct); AQBANKING_API void AB_Message_Attach(AB_MESSAGE *p_struct); AQBANKING_API AB_MESSAGE *AB_Message_dup(const AB_MESSAGE *p_src); AQBANKING_API AB_MESSAGE *AB_Message_copy(AB_MESSAGE *p_struct, const AB_MESSAGE *p_src); /** Getter. * Use this function to get the member "source" (see @ref AB_MESSAGE_source) */ AQBANKING_API AB_MESSAGE_SOURCE AB_Message_GetSource(const AB_MESSAGE *p_struct); /** Getter. * Use this function to get the member "userId" (see @ref AB_MESSAGE_userId) */ AQBANKING_API uint32_t AB_Message_GetUserId(const AB_MESSAGE *p_struct); /** Getter. * Use this function to get the member "accountId" (see @ref AB_MESSAGE_accountId) */ AQBANKING_API uint32_t AB_Message_GetAccountId(const AB_MESSAGE *p_struct); /** Getter. * Use this function to get the member "subject" (see @ref AB_MESSAGE_subject) */ AQBANKING_API const char *AB_Message_GetSubject(const AB_MESSAGE *p_struct); /** Getter. * Use this function to get the member "text" (see @ref AB_MESSAGE_text) */ AQBANKING_API const char *AB_Message_GetText(const AB_MESSAGE *p_struct); /** Getter. * Use this function to get the member "dateReceived" (see @ref AB_MESSAGE_dateReceived) */ AQBANKING_API const GWEN_TIME *AB_Message_GetDateReceived(const AB_MESSAGE *p_struct); /** Setter. * Use this function to set the member "source" (see @ref AB_MESSAGE_source) */ AQBANKING_API void AB_Message_SetSource(AB_MESSAGE *p_struct, AB_MESSAGE_SOURCE p_src); /** Setter. * Use this function to set the member "userId" (see @ref AB_MESSAGE_userId) */ AQBANKING_API void AB_Message_SetUserId(AB_MESSAGE *p_struct, uint32_t p_src); /** Setter. * Use this function to set the member "accountId" (see @ref AB_MESSAGE_accountId) */ AQBANKING_API void AB_Message_SetAccountId(AB_MESSAGE *p_struct, uint32_t p_src); /** Setter. * Use this function to set the member "subject" (see @ref AB_MESSAGE_subject) */ AQBANKING_API void AB_Message_SetSubject(AB_MESSAGE *p_struct, const char *p_src); /** Setter. * Use this function to set the member "text" (see @ref AB_MESSAGE_text) */ AQBANKING_API void AB_Message_SetText(AB_MESSAGE *p_struct, const char *p_src); /** Setter. * Use this function to set the member "dateReceived" (see @ref AB_MESSAGE_dateReceived) */ AQBANKING_API void AB_Message_SetDateReceived(AB_MESSAGE *p_struct, const GWEN_TIME *p_src); AQBANKING_API AB_MESSAGE_LIST *AB_Message_List_dup(const AB_MESSAGE_LIST *p_src); AQBANKING_API void AB_Message_ReadDb(AB_MESSAGE *p_struct, GWEN_DB_NODE *p_db); AQBANKING_API int AB_Message_WriteDb(const AB_MESSAGE *p_struct, GWEN_DB_NODE *p_db); AQBANKING_API AB_MESSAGE *AB_Message_fromDb(GWEN_DB_NODE *p_db); AQBANKING_API int AB_Message_toDb(const AB_MESSAGE *p_struct, GWEN_DB_NODE *p_db); AQBANKING_API void AB_Message_ReadXml(AB_MESSAGE *p_struct, GWEN_XMLNODE *p_db); AQBANKING_API void AB_Message_WriteXml(const AB_MESSAGE *p_struct, GWEN_XMLNODE *p_db); AQBANKING_API void AB_Message_toXml(const AB_MESSAGE *p_struct, GWEN_XMLNODE *p_db); AQBANKING_API AB_MESSAGE *AB_Message_fromXml(GWEN_XMLNODE *p_db); AQBANKING_API void AB_Message_toHashString(const AB_MESSAGE *p_struct, GWEN_BUFFER *p_buffer); AQBANKING_API int AB_Message_List2_freeAll(AB_MESSAGE_LIST2 *tl); #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/aqbanking/types/value_p.h0000664000175000017500000000152314043610744017031 00000000000000/*************************************************************************** begin : Mon Apr 05 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AB_VALUE_P_H #define AB_VALUE_P_H #include "value.h" #include /** Internal structure of AB_VALUE -- do not access this directly! */ struct AB_VALUE { GWEN_LIST_ELEMENT(AB_VALUE) mpq_t value; char *currency; }; static void AB_Value__toString(const AB_VALUE *v, GWEN_BUFFER *buf); #endif /* AB_VALUE_P_H */ aqbanking-6.6.1/src/libs/aqbanking/types/transactionlimits.c0000664000175000017500000016532315037736054021160 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "transactionlimits.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "./transactionlimits_p.h" #include #include /* code headers */ /* macro functions */ GWEN_LIST_FUNCTIONS(AB_TRANSACTION_LIMITS, AB_TransactionLimits) GWEN_LIST2_FUNCTIONS(AB_TRANSACTION_LIMITS, AB_TransactionLimits) AB_TRANSACTION_LIMITS *AB_TransactionLimits_new(void) { AB_TRANSACTION_LIMITS *p_struct; GWEN_NEW_OBJECT(AB_TRANSACTION_LIMITS, p_struct) p_struct->_refCount=1; GWEN_LIST_INIT(AB_TRANSACTION_LIMITS, p_struct) /* members */ p_struct->command=0; p_struct->maxLenLocalName=0; p_struct->minLenLocalName=0; p_struct->maxLenRemoteName=0; p_struct->minLenRemoteName=0; p_struct->maxLenCustomerReference=0; p_struct->minLenCustomerReference=0; p_struct->maxLenBankReference=0; p_struct->minLenBankReference=0; p_struct->maxLenPurpose=0; p_struct->minLenPurpose=0; p_struct->maxLinesPurpose=0; p_struct->minLinesPurpose=0; p_struct->needDate=0; p_struct->minValueSetupTime=0; p_struct->maxValueSetupTime=0; p_struct->minValueSetupTimeFirst=0; p_struct->maxValueSetupTimeFirst=0; p_struct->minValueSetupTimeOnce=0; p_struct->maxValueSetupTimeOnce=0; p_struct->minValueSetupTimeRecurring=0; p_struct->maxValueSetupTimeRecurring=0; p_struct->minValueSetupTimeFinal=0; p_struct->maxValueSetupTimeFinal=0; memset(p_struct->valuesCycleWeek, 0, 64); p_struct->valuesCycleWeekUsed=0; memset(p_struct->valuesCycleMonth, 0, 64); p_struct->valuesCycleMonthUsed=0; memset(p_struct->valuesExecutionDayWeek, 0, 16); p_struct->valuesExecutionDayWeekUsed=0; memset(p_struct->valuesExecutionDayMonth, 0, 64); p_struct->valuesExecutionDayMonthUsed=0; p_struct->allowMonthly=0; p_struct->allowWeekly=0; p_struct->allowChangeRecipientAccount=0; p_struct->allowChangeRecipientName=0; p_struct->allowChangeValue=0; p_struct->allowChangeTextKey=0; p_struct->allowChangePurpose=0; p_struct->allowChangeFirstExecutionDate=0; p_struct->allowChangeLastExecutionDate=0; p_struct->allowChangeCycle=0; p_struct->allowChangePeriod=0; p_struct->allowChangeExecutionDay=0; /* virtual functions */ return p_struct; } void AB_TransactionLimits_free(AB_TRANSACTION_LIMITS *p_struct) { if (p_struct) { assert(p_struct->_refCount); if (p_struct->_refCount==1) { GWEN_LIST_FINI(AB_TRANSACTION_LIMITS, p_struct) /* members */ p_struct->_refCount=0; GWEN_FREE_OBJECT(p_struct); } else p_struct->_refCount--; } } void AB_TransactionLimits_Attach(AB_TRANSACTION_LIMITS *p_struct) { assert(p_struct); assert(p_struct->_refCount); p_struct->_refCount++; } AB_TRANSACTION_LIMITS *AB_TransactionLimits_dup(const AB_TRANSACTION_LIMITS *p_src) { AB_TRANSACTION_LIMITS *p_struct; assert(p_src); p_struct=AB_TransactionLimits_new(); /* member "command" */ p_struct->command=p_src->command; /* member "maxLenLocalName" */ p_struct->maxLenLocalName=p_src->maxLenLocalName; /* member "minLenLocalName" */ p_struct->minLenLocalName=p_src->minLenLocalName; /* member "maxLenRemoteName" */ p_struct->maxLenRemoteName=p_src->maxLenRemoteName; /* member "minLenRemoteName" */ p_struct->minLenRemoteName=p_src->minLenRemoteName; /* member "maxLenCustomerReference" */ p_struct->maxLenCustomerReference=p_src->maxLenCustomerReference; /* member "minLenCustomerReference" */ p_struct->minLenCustomerReference=p_src->minLenCustomerReference; /* member "maxLenBankReference" */ p_struct->maxLenBankReference=p_src->maxLenBankReference; /* member "minLenBankReference" */ p_struct->minLenBankReference=p_src->minLenBankReference; /* member "maxLenPurpose" */ p_struct->maxLenPurpose=p_src->maxLenPurpose; /* member "minLenPurpose" */ p_struct->minLenPurpose=p_src->minLenPurpose; /* member "maxLinesPurpose" */ p_struct->maxLinesPurpose=p_src->maxLinesPurpose; /* member "minLinesPurpose" */ p_struct->minLinesPurpose=p_src->minLinesPurpose; /* member "needDate" */ p_struct->needDate=p_src->needDate; /* member "minValueSetupTime" */ p_struct->minValueSetupTime=p_src->minValueSetupTime; /* member "maxValueSetupTime" */ p_struct->maxValueSetupTime=p_src->maxValueSetupTime; /* member "minValueSetupTimeFirst" */ p_struct->minValueSetupTimeFirst=p_src->minValueSetupTimeFirst; /* member "maxValueSetupTimeFirst" */ p_struct->maxValueSetupTimeFirst=p_src->maxValueSetupTimeFirst; /* member "minValueSetupTimeOnce" */ p_struct->minValueSetupTimeOnce=p_src->minValueSetupTimeOnce; /* member "maxValueSetupTimeOnce" */ p_struct->maxValueSetupTimeOnce=p_src->maxValueSetupTimeOnce; /* member "minValueSetupTimeRecurring" */ p_struct->minValueSetupTimeRecurring=p_src->minValueSetupTimeRecurring; /* member "maxValueSetupTimeRecurring" */ p_struct->maxValueSetupTimeRecurring=p_src->maxValueSetupTimeRecurring; /* member "minValueSetupTimeFinal" */ p_struct->minValueSetupTimeFinal=p_src->minValueSetupTimeFinal; /* member "maxValueSetupTimeFinal" */ p_struct->maxValueSetupTimeFinal=p_src->maxValueSetupTimeFinal; /* member "valuesCycleWeek" */ memmove(p_struct->valuesCycleWeek, p_src->valuesCycleWeek, 64); /* member "valuesCycleWeekUsed" */ p_struct->valuesCycleWeekUsed=p_src->valuesCycleWeekUsed; /* member "valuesCycleMonth" */ memmove(p_struct->valuesCycleMonth, p_src->valuesCycleMonth, 64); /* member "valuesCycleMonthUsed" */ p_struct->valuesCycleMonthUsed=p_src->valuesCycleMonthUsed; /* member "valuesExecutionDayWeek" */ memmove(p_struct->valuesExecutionDayWeek, p_src->valuesExecutionDayWeek, 16); /* member "valuesExecutionDayWeekUsed" */ p_struct->valuesExecutionDayWeekUsed=p_src->valuesExecutionDayWeekUsed; /* member "valuesExecutionDayMonth" */ memmove(p_struct->valuesExecutionDayMonth, p_src->valuesExecutionDayMonth, 64); /* member "valuesExecutionDayMonthUsed" */ p_struct->valuesExecutionDayMonthUsed=p_src->valuesExecutionDayMonthUsed; /* member "allowMonthly" */ p_struct->allowMonthly=p_src->allowMonthly; /* member "allowWeekly" */ p_struct->allowWeekly=p_src->allowWeekly; /* member "allowChangeRecipientAccount" */ p_struct->allowChangeRecipientAccount=p_src->allowChangeRecipientAccount; /* member "allowChangeRecipientName" */ p_struct->allowChangeRecipientName=p_src->allowChangeRecipientName; /* member "allowChangeValue" */ p_struct->allowChangeValue=p_src->allowChangeValue; /* member "allowChangeTextKey" */ p_struct->allowChangeTextKey=p_src->allowChangeTextKey; /* member "allowChangePurpose" */ p_struct->allowChangePurpose=p_src->allowChangePurpose; /* member "allowChangeFirstExecutionDate" */ p_struct->allowChangeFirstExecutionDate=p_src->allowChangeFirstExecutionDate; /* member "allowChangeLastExecutionDate" */ p_struct->allowChangeLastExecutionDate=p_src->allowChangeLastExecutionDate; /* member "allowChangeCycle" */ p_struct->allowChangeCycle=p_src->allowChangeCycle; /* member "allowChangePeriod" */ p_struct->allowChangePeriod=p_src->allowChangePeriod; /* member "allowChangeExecutionDay" */ p_struct->allowChangeExecutionDay=p_src->allowChangeExecutionDay; return p_struct; } AB_TRANSACTION_LIMITS *AB_TransactionLimits_copy(AB_TRANSACTION_LIMITS *p_struct, const AB_TRANSACTION_LIMITS *p_src) { assert(p_struct); assert(p_src); /* member "command" */ p_struct->command=p_src->command; /* member "maxLenLocalName" */ p_struct->maxLenLocalName=p_src->maxLenLocalName; /* member "minLenLocalName" */ p_struct->minLenLocalName=p_src->minLenLocalName; /* member "maxLenRemoteName" */ p_struct->maxLenRemoteName=p_src->maxLenRemoteName; /* member "minLenRemoteName" */ p_struct->minLenRemoteName=p_src->minLenRemoteName; /* member "maxLenCustomerReference" */ p_struct->maxLenCustomerReference=p_src->maxLenCustomerReference; /* member "minLenCustomerReference" */ p_struct->minLenCustomerReference=p_src->minLenCustomerReference; /* member "maxLenBankReference" */ p_struct->maxLenBankReference=p_src->maxLenBankReference; /* member "minLenBankReference" */ p_struct->minLenBankReference=p_src->minLenBankReference; /* member "maxLenPurpose" */ p_struct->maxLenPurpose=p_src->maxLenPurpose; /* member "minLenPurpose" */ p_struct->minLenPurpose=p_src->minLenPurpose; /* member "maxLinesPurpose" */ p_struct->maxLinesPurpose=p_src->maxLinesPurpose; /* member "minLinesPurpose" */ p_struct->minLinesPurpose=p_src->minLinesPurpose; /* member "needDate" */ p_struct->needDate=p_src->needDate; /* member "minValueSetupTime" */ p_struct->minValueSetupTime=p_src->minValueSetupTime; /* member "maxValueSetupTime" */ p_struct->maxValueSetupTime=p_src->maxValueSetupTime; /* member "minValueSetupTimeFirst" */ p_struct->minValueSetupTimeFirst=p_src->minValueSetupTimeFirst; /* member "maxValueSetupTimeFirst" */ p_struct->maxValueSetupTimeFirst=p_src->maxValueSetupTimeFirst; /* member "minValueSetupTimeOnce" */ p_struct->minValueSetupTimeOnce=p_src->minValueSetupTimeOnce; /* member "maxValueSetupTimeOnce" */ p_struct->maxValueSetupTimeOnce=p_src->maxValueSetupTimeOnce; /* member "minValueSetupTimeRecurring" */ p_struct->minValueSetupTimeRecurring=p_src->minValueSetupTimeRecurring; /* member "maxValueSetupTimeRecurring" */ p_struct->maxValueSetupTimeRecurring=p_src->maxValueSetupTimeRecurring; /* member "minValueSetupTimeFinal" */ p_struct->minValueSetupTimeFinal=p_src->minValueSetupTimeFinal; /* member "maxValueSetupTimeFinal" */ p_struct->maxValueSetupTimeFinal=p_src->maxValueSetupTimeFinal; /* member "valuesCycleWeek" */ memmove(p_struct->valuesCycleWeek, p_src->valuesCycleWeek, 64); /* member "valuesCycleWeekUsed" */ p_struct->valuesCycleWeekUsed=p_src->valuesCycleWeekUsed; /* member "valuesCycleMonth" */ memmove(p_struct->valuesCycleMonth, p_src->valuesCycleMonth, 64); /* member "valuesCycleMonthUsed" */ p_struct->valuesCycleMonthUsed=p_src->valuesCycleMonthUsed; /* member "valuesExecutionDayWeek" */ memmove(p_struct->valuesExecutionDayWeek, p_src->valuesExecutionDayWeek, 16); /* member "valuesExecutionDayWeekUsed" */ p_struct->valuesExecutionDayWeekUsed=p_src->valuesExecutionDayWeekUsed; /* member "valuesExecutionDayMonth" */ memmove(p_struct->valuesExecutionDayMonth, p_src->valuesExecutionDayMonth, 64); /* member "valuesExecutionDayMonthUsed" */ p_struct->valuesExecutionDayMonthUsed=p_src->valuesExecutionDayMonthUsed; /* member "allowMonthly" */ p_struct->allowMonthly=p_src->allowMonthly; /* member "allowWeekly" */ p_struct->allowWeekly=p_src->allowWeekly; /* member "allowChangeRecipientAccount" */ p_struct->allowChangeRecipientAccount=p_src->allowChangeRecipientAccount; /* member "allowChangeRecipientName" */ p_struct->allowChangeRecipientName=p_src->allowChangeRecipientName; /* member "allowChangeValue" */ p_struct->allowChangeValue=p_src->allowChangeValue; /* member "allowChangeTextKey" */ p_struct->allowChangeTextKey=p_src->allowChangeTextKey; /* member "allowChangePurpose" */ p_struct->allowChangePurpose=p_src->allowChangePurpose; /* member "allowChangeFirstExecutionDate" */ p_struct->allowChangeFirstExecutionDate=p_src->allowChangeFirstExecutionDate; /* member "allowChangeLastExecutionDate" */ p_struct->allowChangeLastExecutionDate=p_src->allowChangeLastExecutionDate; /* member "allowChangeCycle" */ p_struct->allowChangeCycle=p_src->allowChangeCycle; /* member "allowChangePeriod" */ p_struct->allowChangePeriod=p_src->allowChangePeriod; /* member "allowChangeExecutionDay" */ p_struct->allowChangeExecutionDay=p_src->allowChangeExecutionDay; return p_struct; } int AB_TransactionLimits_GetCommand(const AB_TRANSACTION_LIMITS *p_struct){ assert(p_struct); return p_struct->command; } int AB_TransactionLimits_GetMaxLenLocalName(const AB_TRANSACTION_LIMITS *p_struct){ assert(p_struct); return p_struct->maxLenLocalName; } int AB_TransactionLimits_GetMinLenLocalName(const AB_TRANSACTION_LIMITS *p_struct){ assert(p_struct); return p_struct->minLenLocalName; } int AB_TransactionLimits_GetMaxLenRemoteName(const AB_TRANSACTION_LIMITS *p_struct){ assert(p_struct); return p_struct->maxLenRemoteName; } int AB_TransactionLimits_GetMinLenRemoteName(const AB_TRANSACTION_LIMITS *p_struct){ assert(p_struct); return p_struct->minLenRemoteName; } int AB_TransactionLimits_GetMaxLenCustomerReference(const AB_TRANSACTION_LIMITS *p_struct){ assert(p_struct); return p_struct->maxLenCustomerReference; } int AB_TransactionLimits_GetMinLenCustomerReference(const AB_TRANSACTION_LIMITS *p_struct){ assert(p_struct); return p_struct->minLenCustomerReference; } int AB_TransactionLimits_GetMaxLenBankReference(const AB_TRANSACTION_LIMITS *p_struct){ assert(p_struct); return p_struct->maxLenBankReference; } int AB_TransactionLimits_GetMinLenBankReference(const AB_TRANSACTION_LIMITS *p_struct){ assert(p_struct); return p_struct->minLenBankReference; } int AB_TransactionLimits_GetMaxLenPurpose(const AB_TRANSACTION_LIMITS *p_struct){ assert(p_struct); return p_struct->maxLenPurpose; } int AB_TransactionLimits_GetMinLenPurpose(const AB_TRANSACTION_LIMITS *p_struct){ assert(p_struct); return p_struct->minLenPurpose; } int AB_TransactionLimits_GetMaxLinesPurpose(const AB_TRANSACTION_LIMITS *p_struct){ assert(p_struct); return p_struct->maxLinesPurpose; } int AB_TransactionLimits_GetMinLinesPurpose(const AB_TRANSACTION_LIMITS *p_struct){ assert(p_struct); return p_struct->minLinesPurpose; } int AB_TransactionLimits_GetNeedDate(const AB_TRANSACTION_LIMITS *p_struct){ assert(p_struct); return p_struct->needDate; } int AB_TransactionLimits_GetMinValueSetupTime(const AB_TRANSACTION_LIMITS *p_struct){ assert(p_struct); return p_struct->minValueSetupTime; } int AB_TransactionLimits_GetMaxValueSetupTime(const AB_TRANSACTION_LIMITS *p_struct){ assert(p_struct); return p_struct->maxValueSetupTime; } int AB_TransactionLimits_GetMinValueSetupTimeFirst(const AB_TRANSACTION_LIMITS *p_struct){ assert(p_struct); return p_struct->minValueSetupTimeFirst; } int AB_TransactionLimits_GetMaxValueSetupTimeFirst(const AB_TRANSACTION_LIMITS *p_struct){ assert(p_struct); return p_struct->maxValueSetupTimeFirst; } int AB_TransactionLimits_GetMinValueSetupTimeOnce(const AB_TRANSACTION_LIMITS *p_struct){ assert(p_struct); return p_struct->minValueSetupTimeOnce; } int AB_TransactionLimits_GetMaxValueSetupTimeOnce(const AB_TRANSACTION_LIMITS *p_struct){ assert(p_struct); return p_struct->maxValueSetupTimeOnce; } int AB_TransactionLimits_GetMinValueSetupTimeRecurring(const AB_TRANSACTION_LIMITS *p_struct){ assert(p_struct); return p_struct->minValueSetupTimeRecurring; } int AB_TransactionLimits_GetMaxValueSetupTimeRecurring(const AB_TRANSACTION_LIMITS *p_struct){ assert(p_struct); return p_struct->maxValueSetupTimeRecurring; } int AB_TransactionLimits_GetMinValueSetupTimeFinal(const AB_TRANSACTION_LIMITS *p_struct){ assert(p_struct); return p_struct->minValueSetupTimeFinal; } int AB_TransactionLimits_GetMaxValueSetupTimeFinal(const AB_TRANSACTION_LIMITS *p_struct){ assert(p_struct); return p_struct->maxValueSetupTimeFinal; } const uint8_t *AB_TransactionLimits_GetValuesCycleWeek(const AB_TRANSACTION_LIMITS *p_struct){ assert(p_struct); return p_struct->valuesCycleWeek; } int AB_TransactionLimits_GetValuesCycleWeekUsed(const AB_TRANSACTION_LIMITS *p_struct){ assert(p_struct); return p_struct->valuesCycleWeekUsed; } const uint8_t *AB_TransactionLimits_GetValuesCycleMonth(const AB_TRANSACTION_LIMITS *p_struct){ assert(p_struct); return p_struct->valuesCycleMonth; } int AB_TransactionLimits_GetValuesCycleMonthUsed(const AB_TRANSACTION_LIMITS *p_struct){ assert(p_struct); return p_struct->valuesCycleMonthUsed; } const uint8_t *AB_TransactionLimits_GetValuesExecutionDayWeek(const AB_TRANSACTION_LIMITS *p_struct){ assert(p_struct); return p_struct->valuesExecutionDayWeek; } int AB_TransactionLimits_GetValuesExecutionDayWeekUsed(const AB_TRANSACTION_LIMITS *p_struct){ assert(p_struct); return p_struct->valuesExecutionDayWeekUsed; } const uint8_t *AB_TransactionLimits_GetValuesExecutionDayMonth(const AB_TRANSACTION_LIMITS *p_struct){ assert(p_struct); return p_struct->valuesExecutionDayMonth; } int AB_TransactionLimits_GetValuesExecutionDayMonthUsed(const AB_TRANSACTION_LIMITS *p_struct){ assert(p_struct); return p_struct->valuesExecutionDayMonthUsed; } int AB_TransactionLimits_GetAllowMonthly(const AB_TRANSACTION_LIMITS *p_struct){ assert(p_struct); return p_struct->allowMonthly; } int AB_TransactionLimits_GetAllowWeekly(const AB_TRANSACTION_LIMITS *p_struct){ assert(p_struct); return p_struct->allowWeekly; } int AB_TransactionLimits_GetAllowChangeRecipientAccount(const AB_TRANSACTION_LIMITS *p_struct){ assert(p_struct); return p_struct->allowChangeRecipientAccount; } int AB_TransactionLimits_GetAllowChangeRecipientName(const AB_TRANSACTION_LIMITS *p_struct){ assert(p_struct); return p_struct->allowChangeRecipientName; } int AB_TransactionLimits_GetAllowChangeValue(const AB_TRANSACTION_LIMITS *p_struct){ assert(p_struct); return p_struct->allowChangeValue; } int AB_TransactionLimits_GetAllowChangeTextKey(const AB_TRANSACTION_LIMITS *p_struct){ assert(p_struct); return p_struct->allowChangeTextKey; } int AB_TransactionLimits_GetAllowChangePurpose(const AB_TRANSACTION_LIMITS *p_struct){ assert(p_struct); return p_struct->allowChangePurpose; } int AB_TransactionLimits_GetAllowChangeFirstExecutionDate(const AB_TRANSACTION_LIMITS *p_struct){ assert(p_struct); return p_struct->allowChangeFirstExecutionDate; } int AB_TransactionLimits_GetAllowChangeLastExecutionDate(const AB_TRANSACTION_LIMITS *p_struct){ assert(p_struct); return p_struct->allowChangeLastExecutionDate; } int AB_TransactionLimits_GetAllowChangeCycle(const AB_TRANSACTION_LIMITS *p_struct){ assert(p_struct); return p_struct->allowChangeCycle; } int AB_TransactionLimits_GetAllowChangePeriod(const AB_TRANSACTION_LIMITS *p_struct){ assert(p_struct); return p_struct->allowChangePeriod; } int AB_TransactionLimits_GetAllowChangeExecutionDay(const AB_TRANSACTION_LIMITS *p_struct){ assert(p_struct); return p_struct->allowChangeExecutionDay; } void AB_TransactionLimits_SetCommand(AB_TRANSACTION_LIMITS *p_struct, int p_src){ assert(p_struct); p_struct->command=p_src; } void AB_TransactionLimits_SetMaxLenLocalName(AB_TRANSACTION_LIMITS *p_struct, int p_src){ assert(p_struct); p_struct->maxLenLocalName=p_src; } void AB_TransactionLimits_SetMinLenLocalName(AB_TRANSACTION_LIMITS *p_struct, int p_src){ assert(p_struct); p_struct->minLenLocalName=p_src; } void AB_TransactionLimits_SetMaxLenRemoteName(AB_TRANSACTION_LIMITS *p_struct, int p_src){ assert(p_struct); p_struct->maxLenRemoteName=p_src; } void AB_TransactionLimits_SetMinLenRemoteName(AB_TRANSACTION_LIMITS *p_struct, int p_src){ assert(p_struct); p_struct->minLenRemoteName=p_src; } void AB_TransactionLimits_SetMaxLenCustomerReference(AB_TRANSACTION_LIMITS *p_struct, int p_src){ assert(p_struct); p_struct->maxLenCustomerReference=p_src; } void AB_TransactionLimits_SetMinLenCustomerReference(AB_TRANSACTION_LIMITS *p_struct, int p_src){ assert(p_struct); p_struct->minLenCustomerReference=p_src; } void AB_TransactionLimits_SetMaxLenBankReference(AB_TRANSACTION_LIMITS *p_struct, int p_src){ assert(p_struct); p_struct->maxLenBankReference=p_src; } void AB_TransactionLimits_SetMinLenBankReference(AB_TRANSACTION_LIMITS *p_struct, int p_src){ assert(p_struct); p_struct->minLenBankReference=p_src; } void AB_TransactionLimits_SetMaxLenPurpose(AB_TRANSACTION_LIMITS *p_struct, int p_src){ assert(p_struct); p_struct->maxLenPurpose=p_src; } void AB_TransactionLimits_SetMinLenPurpose(AB_TRANSACTION_LIMITS *p_struct, int p_src){ assert(p_struct); p_struct->minLenPurpose=p_src; } void AB_TransactionLimits_SetMaxLinesPurpose(AB_TRANSACTION_LIMITS *p_struct, int p_src){ assert(p_struct); p_struct->maxLinesPurpose=p_src; } void AB_TransactionLimits_SetMinLinesPurpose(AB_TRANSACTION_LIMITS *p_struct, int p_src){ assert(p_struct); p_struct->minLinesPurpose=p_src; } void AB_TransactionLimits_SetNeedDate(AB_TRANSACTION_LIMITS *p_struct, int p_src){ assert(p_struct); p_struct->needDate=p_src; } void AB_TransactionLimits_SetMinValueSetupTime(AB_TRANSACTION_LIMITS *p_struct, int p_src){ assert(p_struct); p_struct->minValueSetupTime=p_src; } void AB_TransactionLimits_SetMaxValueSetupTime(AB_TRANSACTION_LIMITS *p_struct, int p_src){ assert(p_struct); p_struct->maxValueSetupTime=p_src; } void AB_TransactionLimits_SetMinValueSetupTimeFirst(AB_TRANSACTION_LIMITS *p_struct, int p_src){ assert(p_struct); p_struct->minValueSetupTimeFirst=p_src; } void AB_TransactionLimits_SetMaxValueSetupTimeFirst(AB_TRANSACTION_LIMITS *p_struct, int p_src){ assert(p_struct); p_struct->maxValueSetupTimeFirst=p_src; } void AB_TransactionLimits_SetMinValueSetupTimeOnce(AB_TRANSACTION_LIMITS *p_struct, int p_src){ assert(p_struct); p_struct->minValueSetupTimeOnce=p_src; } void AB_TransactionLimits_SetMaxValueSetupTimeOnce(AB_TRANSACTION_LIMITS *p_struct, int p_src){ assert(p_struct); p_struct->maxValueSetupTimeOnce=p_src; } void AB_TransactionLimits_SetMinValueSetupTimeRecurring(AB_TRANSACTION_LIMITS *p_struct, int p_src){ assert(p_struct); p_struct->minValueSetupTimeRecurring=p_src; } void AB_TransactionLimits_SetMaxValueSetupTimeRecurring(AB_TRANSACTION_LIMITS *p_struct, int p_src){ assert(p_struct); p_struct->maxValueSetupTimeRecurring=p_src; } void AB_TransactionLimits_SetMinValueSetupTimeFinal(AB_TRANSACTION_LIMITS *p_struct, int p_src){ assert(p_struct); p_struct->minValueSetupTimeFinal=p_src; } void AB_TransactionLimits_SetMaxValueSetupTimeFinal(AB_TRANSACTION_LIMITS *p_struct, int p_src){ assert(p_struct); p_struct->maxValueSetupTimeFinal=p_src; } void AB_TransactionLimits_SetValuesCycleWeekUsed(AB_TRANSACTION_LIMITS *p_struct, int p_src){ assert(p_struct); p_struct->valuesCycleWeekUsed=p_src; } void AB_TransactionLimits_SetValuesCycleMonthUsed(AB_TRANSACTION_LIMITS *p_struct, int p_src){ assert(p_struct); p_struct->valuesCycleMonthUsed=p_src; } void AB_TransactionLimits_SetValuesExecutionDayWeekUsed(AB_TRANSACTION_LIMITS *p_struct, int p_src){ assert(p_struct); p_struct->valuesExecutionDayWeekUsed=p_src; } void AB_TransactionLimits_SetValuesExecutionDayMonthUsed(AB_TRANSACTION_LIMITS *p_struct, int p_src){ assert(p_struct); p_struct->valuesExecutionDayMonthUsed=p_src; } void AB_TransactionLimits_SetAllowMonthly(AB_TRANSACTION_LIMITS *p_struct, int p_src){ assert(p_struct); p_struct->allowMonthly=p_src; } void AB_TransactionLimits_SetAllowWeekly(AB_TRANSACTION_LIMITS *p_struct, int p_src){ assert(p_struct); p_struct->allowWeekly=p_src; } void AB_TransactionLimits_SetAllowChangeRecipientAccount(AB_TRANSACTION_LIMITS *p_struct, int p_src){ assert(p_struct); p_struct->allowChangeRecipientAccount=p_src; } void AB_TransactionLimits_SetAllowChangeRecipientName(AB_TRANSACTION_LIMITS *p_struct, int p_src){ assert(p_struct); p_struct->allowChangeRecipientName=p_src; } void AB_TransactionLimits_SetAllowChangeValue(AB_TRANSACTION_LIMITS *p_struct, int p_src){ assert(p_struct); p_struct->allowChangeValue=p_src; } void AB_TransactionLimits_SetAllowChangeTextKey(AB_TRANSACTION_LIMITS *p_struct, int p_src){ assert(p_struct); p_struct->allowChangeTextKey=p_src; } void AB_TransactionLimits_SetAllowChangePurpose(AB_TRANSACTION_LIMITS *p_struct, int p_src){ assert(p_struct); p_struct->allowChangePurpose=p_src; } void AB_TransactionLimits_SetAllowChangeFirstExecutionDate(AB_TRANSACTION_LIMITS *p_struct, int p_src){ assert(p_struct); p_struct->allowChangeFirstExecutionDate=p_src; } void AB_TransactionLimits_SetAllowChangeLastExecutionDate(AB_TRANSACTION_LIMITS *p_struct, int p_src){ assert(p_struct); p_struct->allowChangeLastExecutionDate=p_src; } void AB_TransactionLimits_SetAllowChangeCycle(AB_TRANSACTION_LIMITS *p_struct, int p_src){ assert(p_struct); p_struct->allowChangeCycle=p_src; } void AB_TransactionLimits_SetAllowChangePeriod(AB_TRANSACTION_LIMITS *p_struct, int p_src){ assert(p_struct); p_struct->allowChangePeriod=p_src; } void AB_TransactionLimits_SetAllowChangeExecutionDay(AB_TRANSACTION_LIMITS *p_struct, int p_src){ assert(p_struct); p_struct->allowChangeExecutionDay=p_src; } AB_TRANSACTION_LIMITS_LIST *AB_TransactionLimits_List_dup(const AB_TRANSACTION_LIMITS_LIST *p_src) { AB_TRANSACTION_LIMITS_LIST *p_dest; AB_TRANSACTION_LIMITS *p_elem; assert(p_src); p_dest=AB_TransactionLimits_List_new(); p_elem=AB_TransactionLimits_List_First(p_src); while(p_elem) { AB_TRANSACTION_LIMITS *p_cpy; p_cpy=AB_TransactionLimits_dup(p_elem); AB_TransactionLimits_List_Add(p_cpy, p_dest); p_elem=AB_TransactionLimits_List_Next(p_elem); } return p_dest; } void AB_TransactionLimits_ReadDb(AB_TRANSACTION_LIMITS *p_struct, GWEN_DB_NODE *p_db){ assert(p_struct); /* member "command" */ p_struct->command=GWEN_DB_GetIntValue(p_db, "command", 0, 0); /* member "maxLenLocalName" */ p_struct->maxLenLocalName=GWEN_DB_GetIntValue(p_db, "maxLenLocalName", 0, 0); /* member "minLenLocalName" */ p_struct->minLenLocalName=GWEN_DB_GetIntValue(p_db, "minLenLocalName", 0, 0); /* member "maxLenRemoteName" */ p_struct->maxLenRemoteName=GWEN_DB_GetIntValue(p_db, "maxLenRemoteName", 0, 0); /* member "minLenRemoteName" */ p_struct->minLenRemoteName=GWEN_DB_GetIntValue(p_db, "minLenRemoteName", 0, 0); /* member "maxLenCustomerReference" */ p_struct->maxLenCustomerReference=GWEN_DB_GetIntValue(p_db, "maxLenCustomerReference", 0, 0); /* member "minLenCustomerReference" */ p_struct->minLenCustomerReference=GWEN_DB_GetIntValue(p_db, "minLenCustomerReference", 0, 0); /* member "maxLenBankReference" */ p_struct->maxLenBankReference=GWEN_DB_GetIntValue(p_db, "maxLenBankReference", 0, 0); /* member "minLenBankReference" */ p_struct->minLenBankReference=GWEN_DB_GetIntValue(p_db, "minLenBankReference", 0, 0); /* member "maxLenPurpose" */ p_struct->maxLenPurpose=GWEN_DB_GetIntValue(p_db, "maxLenPurpose", 0, 0); /* member "minLenPurpose" */ p_struct->minLenPurpose=GWEN_DB_GetIntValue(p_db, "minLenPurpose", 0, 0); /* member "maxLinesPurpose" */ p_struct->maxLinesPurpose=GWEN_DB_GetIntValue(p_db, "maxLinesPurpose", 0, 0); /* member "minLinesPurpose" */ p_struct->minLinesPurpose=GWEN_DB_GetIntValue(p_db, "minLinesPurpose", 0, 0); /* member "needDate" */ p_struct->needDate=GWEN_DB_GetIntValue(p_db, "needDate", 0, 0); /* member "minValueSetupTime" */ p_struct->minValueSetupTime=GWEN_DB_GetIntValue(p_db, "minValueSetupTime", 0, 0); /* member "maxValueSetupTime" */ p_struct->maxValueSetupTime=GWEN_DB_GetIntValue(p_db, "maxValueSetupTime", 0, 0); /* member "minValueSetupTimeFirst" */ p_struct->minValueSetupTimeFirst=GWEN_DB_GetIntValue(p_db, "minValueSetupTimeFirst", 0, 0); /* member "maxValueSetupTimeFirst" */ p_struct->maxValueSetupTimeFirst=GWEN_DB_GetIntValue(p_db, "maxValueSetupTimeFirst", 0, 0); /* member "minValueSetupTimeOnce" */ p_struct->minValueSetupTimeOnce=GWEN_DB_GetIntValue(p_db, "minValueSetupTimeOnce", 0, 0); /* member "maxValueSetupTimeOnce" */ p_struct->maxValueSetupTimeOnce=GWEN_DB_GetIntValue(p_db, "maxValueSetupTimeOnce", 0, 0); /* member "minValueSetupTimeRecurring" */ p_struct->minValueSetupTimeRecurring=GWEN_DB_GetIntValue(p_db, "minValueSetupTimeRecurring", 0, 0); /* member "maxValueSetupTimeRecurring" */ p_struct->maxValueSetupTimeRecurring=GWEN_DB_GetIntValue(p_db, "maxValueSetupTimeRecurring", 0, 0); /* member "minValueSetupTimeFinal" */ p_struct->minValueSetupTimeFinal=GWEN_DB_GetIntValue(p_db, "minValueSetupTimeFinal", 0, 0); /* member "maxValueSetupTimeFinal" */ p_struct->maxValueSetupTimeFinal=GWEN_DB_GetIntValue(p_db, "maxValueSetupTimeFinal", 0, 0); /* member "valuesCycleWeek" */ { int i; memset(p_struct->valuesCycleWeek, 0, (64)*sizeof(uint8_t)); for (i=0; i < 64; i++) { int v; v=GWEN_DB_GetIntValue(p_db, "valuesCycleWeek", i, 0); if (v==0) break; p_struct->valuesCycleWeek[i]=v; } } /* member "valuesCycleWeekUsed" */ p_struct->valuesCycleWeekUsed=GWEN_DB_GetIntValue(p_db, "valuesCycleWeekUsed", 0, 0); /* member "valuesCycleMonth" */ { int i; memset(p_struct->valuesCycleMonth, 0, (64)*sizeof(uint8_t)); for (i=0; i < 64; i++) { int v; v=GWEN_DB_GetIntValue(p_db, "valuesCycleMonth", i, 0); if (v==0) break; p_struct->valuesCycleMonth[i]=v; } } /* member "valuesCycleMonthUsed" */ p_struct->valuesCycleMonthUsed=GWEN_DB_GetIntValue(p_db, "valuesCycleMonthUsed", 0, 0); /* member "valuesExecutionDayWeek" */ { int i; memset(p_struct->valuesExecutionDayWeek, 0, (16)*sizeof(uint8_t)); for (i=0; i < 16; i++) { int v; v=GWEN_DB_GetIntValue(p_db, "valuesExecutionDayWeek", i, 0); if (v==0) break; p_struct->valuesExecutionDayWeek[i]=v; } } /* member "valuesExecutionDayWeekUsed" */ p_struct->valuesExecutionDayWeekUsed=GWEN_DB_GetIntValue(p_db, "valuesExecutionDayWeekUsed", 0, 0); /* member "valuesExecutionDayMonth" */ { int i; memset(p_struct->valuesExecutionDayMonth, 0, (64)*sizeof(uint8_t)); for (i=0; i < 64; i++) { int v; v=GWEN_DB_GetIntValue(p_db, "valuesExecutionDayMonth", i, 0); if (v==0) break; p_struct->valuesExecutionDayMonth[i]=v; } } /* member "valuesExecutionDayMonthUsed" */ p_struct->valuesExecutionDayMonthUsed=GWEN_DB_GetIntValue(p_db, "valuesExecutionDayMonthUsed", 0, 0); /* member "allowMonthly" */ p_struct->allowMonthly=GWEN_DB_GetIntValue(p_db, "allowMonthly", 0, 0); /* member "allowWeekly" */ p_struct->allowWeekly=GWEN_DB_GetIntValue(p_db, "allowWeekly", 0, 0); /* member "allowChangeRecipientAccount" */ p_struct->allowChangeRecipientAccount=GWEN_DB_GetIntValue(p_db, "allowChangeRecipientAccount", 0, 0); /* member "allowChangeRecipientName" */ p_struct->allowChangeRecipientName=GWEN_DB_GetIntValue(p_db, "allowChangeRecipientName", 0, 0); /* member "allowChangeValue" */ p_struct->allowChangeValue=GWEN_DB_GetIntValue(p_db, "allowChangeValue", 0, 0); /* member "allowChangeTextKey" */ p_struct->allowChangeTextKey=GWEN_DB_GetIntValue(p_db, "allowChangeTextKey", 0, 0); /* member "allowChangePurpose" */ p_struct->allowChangePurpose=GWEN_DB_GetIntValue(p_db, "allowChangePurpose", 0, 0); /* member "allowChangeFirstExecutionDate" */ p_struct->allowChangeFirstExecutionDate=GWEN_DB_GetIntValue(p_db, "allowChangeFirstExecutionDate", 0, 0); /* member "allowChangeLastExecutionDate" */ p_struct->allowChangeLastExecutionDate=GWEN_DB_GetIntValue(p_db, "allowChangeLastExecutionDate", 0, 0); /* member "allowChangeCycle" */ p_struct->allowChangeCycle=GWEN_DB_GetIntValue(p_db, "allowChangeCycle", 0, 0); /* member "allowChangePeriod" */ p_struct->allowChangePeriod=GWEN_DB_GetIntValue(p_db, "allowChangePeriod", 0, 0); /* member "allowChangeExecutionDay" */ p_struct->allowChangeExecutionDay=GWEN_DB_GetIntValue(p_db, "allowChangeExecutionDay", 0, 0); } int AB_TransactionLimits_WriteDb(const AB_TRANSACTION_LIMITS *p_struct, GWEN_DB_NODE *p_db) { int p_rv; assert(p_struct); /* member "command" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "command", p_struct->command); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "maxLenLocalName" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "maxLenLocalName", p_struct->maxLenLocalName); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "minLenLocalName" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "minLenLocalName", p_struct->minLenLocalName); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "maxLenRemoteName" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "maxLenRemoteName", p_struct->maxLenRemoteName); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "minLenRemoteName" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "minLenRemoteName", p_struct->minLenRemoteName); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "maxLenCustomerReference" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "maxLenCustomerReference", p_struct->maxLenCustomerReference); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "minLenCustomerReference" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "minLenCustomerReference", p_struct->minLenCustomerReference); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "maxLenBankReference" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "maxLenBankReference", p_struct->maxLenBankReference); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "minLenBankReference" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "minLenBankReference", p_struct->minLenBankReference); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "maxLenPurpose" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "maxLenPurpose", p_struct->maxLenPurpose); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "minLenPurpose" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "minLenPurpose", p_struct->minLenPurpose); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "maxLinesPurpose" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "maxLinesPurpose", p_struct->maxLinesPurpose); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "minLinesPurpose" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "minLinesPurpose", p_struct->minLinesPurpose); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "needDate" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "needDate", p_struct->needDate); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "minValueSetupTime" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "minValueSetupTime", p_struct->minValueSetupTime); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "maxValueSetupTime" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "maxValueSetupTime", p_struct->maxValueSetupTime); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "minValueSetupTimeFirst" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "minValueSetupTimeFirst", p_struct->minValueSetupTimeFirst); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "maxValueSetupTimeFirst" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "maxValueSetupTimeFirst", p_struct->maxValueSetupTimeFirst); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "minValueSetupTimeOnce" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "minValueSetupTimeOnce", p_struct->minValueSetupTimeOnce); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "maxValueSetupTimeOnce" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "maxValueSetupTimeOnce", p_struct->maxValueSetupTimeOnce); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "minValueSetupTimeRecurring" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "minValueSetupTimeRecurring", p_struct->minValueSetupTimeRecurring); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "maxValueSetupTimeRecurring" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "maxValueSetupTimeRecurring", p_struct->maxValueSetupTimeRecurring); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "minValueSetupTimeFinal" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "minValueSetupTimeFinal", p_struct->minValueSetupTimeFinal); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "maxValueSetupTimeFinal" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "maxValueSetupTimeFinal", p_struct->maxValueSetupTimeFinal); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "valuesCycleWeek" */ { int i=0; int result=0; for (i=0; i < 64; i++) { result=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "valuesCycleWeek", p_struct->valuesCycleWeek[i]); } p_rv=result; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "valuesCycleWeekUsed" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "valuesCycleWeekUsed", p_struct->valuesCycleWeekUsed); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "valuesCycleMonth" */ { int i=0; int result=0; for (i=0; i < 64; i++) { result=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "valuesCycleMonth", p_struct->valuesCycleMonth[i]); } p_rv=result; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "valuesCycleMonthUsed" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "valuesCycleMonthUsed", p_struct->valuesCycleMonthUsed); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "valuesExecutionDayWeek" */ { int i=0; int result=0; for (i=0; i < 16; i++) { result=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "valuesExecutionDayWeek", p_struct->valuesExecutionDayWeek[i]); } p_rv=result; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "valuesExecutionDayWeekUsed" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "valuesExecutionDayWeekUsed", p_struct->valuesExecutionDayWeekUsed); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "valuesExecutionDayMonth" */ { int i=0; int result=0; for (i=0; i < 64; i++) { result=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "valuesExecutionDayMonth", p_struct->valuesExecutionDayMonth[i]); } p_rv=result; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "valuesExecutionDayMonthUsed" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "valuesExecutionDayMonthUsed", p_struct->valuesExecutionDayMonthUsed); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "allowMonthly" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "allowMonthly", p_struct->allowMonthly); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "allowWeekly" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "allowWeekly", p_struct->allowWeekly); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "allowChangeRecipientAccount" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "allowChangeRecipientAccount", p_struct->allowChangeRecipientAccount); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "allowChangeRecipientName" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "allowChangeRecipientName", p_struct->allowChangeRecipientName); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "allowChangeValue" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "allowChangeValue", p_struct->allowChangeValue); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "allowChangeTextKey" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "allowChangeTextKey", p_struct->allowChangeTextKey); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "allowChangePurpose" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "allowChangePurpose", p_struct->allowChangePurpose); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "allowChangeFirstExecutionDate" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "allowChangeFirstExecutionDate", p_struct->allowChangeFirstExecutionDate); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "allowChangeLastExecutionDate" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "allowChangeLastExecutionDate", p_struct->allowChangeLastExecutionDate); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "allowChangeCycle" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "allowChangeCycle", p_struct->allowChangeCycle); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "allowChangePeriod" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "allowChangePeriod", p_struct->allowChangePeriod); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "allowChangeExecutionDay" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "allowChangeExecutionDay", p_struct->allowChangeExecutionDay); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } return 0; } AB_TRANSACTION_LIMITS *AB_TransactionLimits_fromDb(GWEN_DB_NODE *p_db) { AB_TRANSACTION_LIMITS *p_struct; p_struct=AB_TransactionLimits_new(); AB_TransactionLimits_ReadDb(p_struct, p_db); return p_struct; } int AB_TransactionLimits_toDb(const AB_TRANSACTION_LIMITS *p_struct, GWEN_DB_NODE *p_db) { return AB_TransactionLimits_WriteDb(p_struct, p_db); } void AB_TransactionLimits_ReadXml(AB_TRANSACTION_LIMITS *p_struct, GWEN_XMLNODE *p_db){ assert(p_struct); /* member "command" */ p_struct->command=GWEN_XMLNode_GetIntValue(p_db, "command", 0); /* member "maxLenLocalName" */ p_struct->maxLenLocalName=GWEN_XMLNode_GetIntValue(p_db, "maxLenLocalName", 0); /* member "minLenLocalName" */ p_struct->minLenLocalName=GWEN_XMLNode_GetIntValue(p_db, "minLenLocalName", 0); /* member "maxLenRemoteName" */ p_struct->maxLenRemoteName=GWEN_XMLNode_GetIntValue(p_db, "maxLenRemoteName", 0); /* member "minLenRemoteName" */ p_struct->minLenRemoteName=GWEN_XMLNode_GetIntValue(p_db, "minLenRemoteName", 0); /* member "maxLenCustomerReference" */ p_struct->maxLenCustomerReference=GWEN_XMLNode_GetIntValue(p_db, "maxLenCustomerReference", 0); /* member "minLenCustomerReference" */ p_struct->minLenCustomerReference=GWEN_XMLNode_GetIntValue(p_db, "minLenCustomerReference", 0); /* member "maxLenBankReference" */ p_struct->maxLenBankReference=GWEN_XMLNode_GetIntValue(p_db, "maxLenBankReference", 0); /* member "minLenBankReference" */ p_struct->minLenBankReference=GWEN_XMLNode_GetIntValue(p_db, "minLenBankReference", 0); /* member "maxLenPurpose" */ p_struct->maxLenPurpose=GWEN_XMLNode_GetIntValue(p_db, "maxLenPurpose", 0); /* member "minLenPurpose" */ p_struct->minLenPurpose=GWEN_XMLNode_GetIntValue(p_db, "minLenPurpose", 0); /* member "maxLinesPurpose" */ p_struct->maxLinesPurpose=GWEN_XMLNode_GetIntValue(p_db, "maxLinesPurpose", 0); /* member "minLinesPurpose" */ p_struct->minLinesPurpose=GWEN_XMLNode_GetIntValue(p_db, "minLinesPurpose", 0); /* member "needDate" */ p_struct->needDate=GWEN_XMLNode_GetIntValue(p_db, "needDate", 0); /* member "minValueSetupTime" */ p_struct->minValueSetupTime=GWEN_XMLNode_GetIntValue(p_db, "minValueSetupTime", 0); /* member "maxValueSetupTime" */ p_struct->maxValueSetupTime=GWEN_XMLNode_GetIntValue(p_db, "maxValueSetupTime", 0); /* member "minValueSetupTimeFirst" */ p_struct->minValueSetupTimeFirst=GWEN_XMLNode_GetIntValue(p_db, "minValueSetupTimeFirst", 0); /* member "maxValueSetupTimeFirst" */ p_struct->maxValueSetupTimeFirst=GWEN_XMLNode_GetIntValue(p_db, "maxValueSetupTimeFirst", 0); /* member "minValueSetupTimeOnce" */ p_struct->minValueSetupTimeOnce=GWEN_XMLNode_GetIntValue(p_db, "minValueSetupTimeOnce", 0); /* member "maxValueSetupTimeOnce" */ p_struct->maxValueSetupTimeOnce=GWEN_XMLNode_GetIntValue(p_db, "maxValueSetupTimeOnce", 0); /* member "minValueSetupTimeRecurring" */ p_struct->minValueSetupTimeRecurring=GWEN_XMLNode_GetIntValue(p_db, "minValueSetupTimeRecurring", 0); /* member "maxValueSetupTimeRecurring" */ p_struct->maxValueSetupTimeRecurring=GWEN_XMLNode_GetIntValue(p_db, "maxValueSetupTimeRecurring", 0); /* member "minValueSetupTimeFinal" */ p_struct->minValueSetupTimeFinal=GWEN_XMLNode_GetIntValue(p_db, "minValueSetupTimeFinal", 0); /* member "maxValueSetupTimeFinal" */ p_struct->maxValueSetupTimeFinal=GWEN_XMLNode_GetIntValue(p_db, "maxValueSetupTimeFinal", 0); /* member "valuesCycleWeek" */ /* member "valuesCycleWeekUsed" */ p_struct->valuesCycleWeekUsed=GWEN_XMLNode_GetIntValue(p_db, "valuesCycleWeekUsed", 0); /* member "valuesCycleMonth" */ /* member "valuesCycleMonthUsed" */ p_struct->valuesCycleMonthUsed=GWEN_XMLNode_GetIntValue(p_db, "valuesCycleMonthUsed", 0); /* member "valuesExecutionDayWeek" */ /* member "valuesExecutionDayWeekUsed" */ p_struct->valuesExecutionDayWeekUsed=GWEN_XMLNode_GetIntValue(p_db, "valuesExecutionDayWeekUsed", 0); /* member "valuesExecutionDayMonth" */ /* member "valuesExecutionDayMonthUsed" */ p_struct->valuesExecutionDayMonthUsed=GWEN_XMLNode_GetIntValue(p_db, "valuesExecutionDayMonthUsed", 0); /* member "allowMonthly" */ p_struct->allowMonthly=GWEN_XMLNode_GetIntValue(p_db, "allowMonthly", 0); /* member "allowWeekly" */ p_struct->allowWeekly=GWEN_XMLNode_GetIntValue(p_db, "allowWeekly", 0); /* member "allowChangeRecipientAccount" */ p_struct->allowChangeRecipientAccount=GWEN_XMLNode_GetIntValue(p_db, "allowChangeRecipientAccount", 0); /* member "allowChangeRecipientName" */ p_struct->allowChangeRecipientName=GWEN_XMLNode_GetIntValue(p_db, "allowChangeRecipientName", 0); /* member "allowChangeValue" */ p_struct->allowChangeValue=GWEN_XMLNode_GetIntValue(p_db, "allowChangeValue", 0); /* member "allowChangeTextKey" */ p_struct->allowChangeTextKey=GWEN_XMLNode_GetIntValue(p_db, "allowChangeTextKey", 0); /* member "allowChangePurpose" */ p_struct->allowChangePurpose=GWEN_XMLNode_GetIntValue(p_db, "allowChangePurpose", 0); /* member "allowChangeFirstExecutionDate" */ p_struct->allowChangeFirstExecutionDate=GWEN_XMLNode_GetIntValue(p_db, "allowChangeFirstExecutionDate", 0); /* member "allowChangeLastExecutionDate" */ p_struct->allowChangeLastExecutionDate=GWEN_XMLNode_GetIntValue(p_db, "allowChangeLastExecutionDate", 0); /* member "allowChangeCycle" */ p_struct->allowChangeCycle=GWEN_XMLNode_GetIntValue(p_db, "allowChangeCycle", 0); /* member "allowChangePeriod" */ p_struct->allowChangePeriod=GWEN_XMLNode_GetIntValue(p_db, "allowChangePeriod", 0); /* member "allowChangeExecutionDay" */ p_struct->allowChangeExecutionDay=GWEN_XMLNode_GetIntValue(p_db, "allowChangeExecutionDay", 0); } void AB_TransactionLimits_WriteXml(const AB_TRANSACTION_LIMITS *p_struct, GWEN_XMLNODE *p_db) { assert(p_struct); /* member "command" */ GWEN_XMLNode_SetIntValue(p_db, "command", p_struct->command); /* member "maxLenLocalName" */ GWEN_XMLNode_SetIntValue(p_db, "maxLenLocalName", p_struct->maxLenLocalName); /* member "minLenLocalName" */ GWEN_XMLNode_SetIntValue(p_db, "minLenLocalName", p_struct->minLenLocalName); /* member "maxLenRemoteName" */ GWEN_XMLNode_SetIntValue(p_db, "maxLenRemoteName", p_struct->maxLenRemoteName); /* member "minLenRemoteName" */ GWEN_XMLNode_SetIntValue(p_db, "minLenRemoteName", p_struct->minLenRemoteName); /* member "maxLenCustomerReference" */ GWEN_XMLNode_SetIntValue(p_db, "maxLenCustomerReference", p_struct->maxLenCustomerReference); /* member "minLenCustomerReference" */ GWEN_XMLNode_SetIntValue(p_db, "minLenCustomerReference", p_struct->minLenCustomerReference); /* member "maxLenBankReference" */ GWEN_XMLNode_SetIntValue(p_db, "maxLenBankReference", p_struct->maxLenBankReference); /* member "minLenBankReference" */ GWEN_XMLNode_SetIntValue(p_db, "minLenBankReference", p_struct->minLenBankReference); /* member "maxLenPurpose" */ GWEN_XMLNode_SetIntValue(p_db, "maxLenPurpose", p_struct->maxLenPurpose); /* member "minLenPurpose" */ GWEN_XMLNode_SetIntValue(p_db, "minLenPurpose", p_struct->minLenPurpose); /* member "maxLinesPurpose" */ GWEN_XMLNode_SetIntValue(p_db, "maxLinesPurpose", p_struct->maxLinesPurpose); /* member "minLinesPurpose" */ GWEN_XMLNode_SetIntValue(p_db, "minLinesPurpose", p_struct->minLinesPurpose); /* member "needDate" */ GWEN_XMLNode_SetIntValue(p_db, "needDate", p_struct->needDate); /* member "minValueSetupTime" */ GWEN_XMLNode_SetIntValue(p_db, "minValueSetupTime", p_struct->minValueSetupTime); /* member "maxValueSetupTime" */ GWEN_XMLNode_SetIntValue(p_db, "maxValueSetupTime", p_struct->maxValueSetupTime); /* member "minValueSetupTimeFirst" */ GWEN_XMLNode_SetIntValue(p_db, "minValueSetupTimeFirst", p_struct->minValueSetupTimeFirst); /* member "maxValueSetupTimeFirst" */ GWEN_XMLNode_SetIntValue(p_db, "maxValueSetupTimeFirst", p_struct->maxValueSetupTimeFirst); /* member "minValueSetupTimeOnce" */ GWEN_XMLNode_SetIntValue(p_db, "minValueSetupTimeOnce", p_struct->minValueSetupTimeOnce); /* member "maxValueSetupTimeOnce" */ GWEN_XMLNode_SetIntValue(p_db, "maxValueSetupTimeOnce", p_struct->maxValueSetupTimeOnce); /* member "minValueSetupTimeRecurring" */ GWEN_XMLNode_SetIntValue(p_db, "minValueSetupTimeRecurring", p_struct->minValueSetupTimeRecurring); /* member "maxValueSetupTimeRecurring" */ GWEN_XMLNode_SetIntValue(p_db, "maxValueSetupTimeRecurring", p_struct->maxValueSetupTimeRecurring); /* member "minValueSetupTimeFinal" */ GWEN_XMLNode_SetIntValue(p_db, "minValueSetupTimeFinal", p_struct->minValueSetupTimeFinal); /* member "maxValueSetupTimeFinal" */ GWEN_XMLNode_SetIntValue(p_db, "maxValueSetupTimeFinal", p_struct->maxValueSetupTimeFinal); /* member "valuesCycleWeek" */ /* member "valuesCycleWeekUsed" */ GWEN_XMLNode_SetIntValue(p_db, "valuesCycleWeekUsed", p_struct->valuesCycleWeekUsed); /* member "valuesCycleMonth" */ /* member "valuesCycleMonthUsed" */ GWEN_XMLNode_SetIntValue(p_db, "valuesCycleMonthUsed", p_struct->valuesCycleMonthUsed); /* member "valuesExecutionDayWeek" */ /* member "valuesExecutionDayWeekUsed" */ GWEN_XMLNode_SetIntValue(p_db, "valuesExecutionDayWeekUsed", p_struct->valuesExecutionDayWeekUsed); /* member "valuesExecutionDayMonth" */ /* member "valuesExecutionDayMonthUsed" */ GWEN_XMLNode_SetIntValue(p_db, "valuesExecutionDayMonthUsed", p_struct->valuesExecutionDayMonthUsed); /* member "allowMonthly" */ GWEN_XMLNode_SetIntValue(p_db, "allowMonthly", p_struct->allowMonthly); /* member "allowWeekly" */ GWEN_XMLNode_SetIntValue(p_db, "allowWeekly", p_struct->allowWeekly); /* member "allowChangeRecipientAccount" */ GWEN_XMLNode_SetIntValue(p_db, "allowChangeRecipientAccount", p_struct->allowChangeRecipientAccount); /* member "allowChangeRecipientName" */ GWEN_XMLNode_SetIntValue(p_db, "allowChangeRecipientName", p_struct->allowChangeRecipientName); /* member "allowChangeValue" */ GWEN_XMLNode_SetIntValue(p_db, "allowChangeValue", p_struct->allowChangeValue); /* member "allowChangeTextKey" */ GWEN_XMLNode_SetIntValue(p_db, "allowChangeTextKey", p_struct->allowChangeTextKey); /* member "allowChangePurpose" */ GWEN_XMLNode_SetIntValue(p_db, "allowChangePurpose", p_struct->allowChangePurpose); /* member "allowChangeFirstExecutionDate" */ GWEN_XMLNode_SetIntValue(p_db, "allowChangeFirstExecutionDate", p_struct->allowChangeFirstExecutionDate); /* member "allowChangeLastExecutionDate" */ GWEN_XMLNode_SetIntValue(p_db, "allowChangeLastExecutionDate", p_struct->allowChangeLastExecutionDate); /* member "allowChangeCycle" */ GWEN_XMLNode_SetIntValue(p_db, "allowChangeCycle", p_struct->allowChangeCycle); /* member "allowChangePeriod" */ GWEN_XMLNode_SetIntValue(p_db, "allowChangePeriod", p_struct->allowChangePeriod); /* member "allowChangeExecutionDay" */ GWEN_XMLNode_SetIntValue(p_db, "allowChangeExecutionDay", p_struct->allowChangeExecutionDay); } void AB_TransactionLimits_toXml(const AB_TRANSACTION_LIMITS *p_struct, GWEN_XMLNODE *p_db) { AB_TransactionLimits_WriteXml(p_struct, p_db); } AB_TRANSACTION_LIMITS *AB_TransactionLimits_fromXml(GWEN_XMLNODE *p_db) { AB_TRANSACTION_LIMITS *p_struct; p_struct=AB_TransactionLimits_new(); AB_TransactionLimits_ReadXml(p_struct, p_db); return p_struct; } AB_TRANSACTION_LIMITS *AB_TransactionLimits_List_GetByCommand(const AB_TRANSACTION_LIMITS_LIST *p_list, int p_cmp){ AB_TRANSACTION_LIMITS *p_struct; assert(p_list); p_struct = AB_TransactionLimits_List_First(p_list); while(p_struct) { int p_rv; if (p_struct->command==p_cmp) p_rv=0; else if (p_cmpcommand) p_rv=-1; else p_rv=1; if (p_rv == 0) return p_struct; p_struct = AB_TransactionLimits_List_Next(p_struct); } return NULL; } uint8_t AB_TransactionLimits_GetValuesCycleWeekAt(const AB_TRANSACTION_LIMITS *p_struct, int idx) { if (p_struct && (idx < 64)) return p_struct->valuesCycleWeek[idx]; return 0; } int AB_TransactionLimits_SetValuesCycleWeekAt(AB_TRANSACTION_LIMITS *p_struct, int idx, uint8_t v) { if (p_struct && (idx < 64)) { p_struct->valuesCycleWeek[idx]=v; return 0; } return GWEN_ERROR_INVALID; } void AB_TransactionLimits_PresetValuesCycleWeek(AB_TRANSACTION_LIMITS *p_struct, uint8_t v) { memset(p_struct->valuesCycleWeek, v, 64); } int AB_TransactionLimits_GetValuesCycleWeekArraySize(void) { return 64; } uint8_t AB_TransactionLimits_GetValuesCycleMonthAt(const AB_TRANSACTION_LIMITS *p_struct, int idx) { if (p_struct && (idx < 64)) return p_struct->valuesCycleMonth[idx]; return 0; } int AB_TransactionLimits_SetValuesCycleMonthAt(AB_TRANSACTION_LIMITS *p_struct, int idx, uint8_t v) { if (p_struct && (idx < 64)) { p_struct->valuesCycleMonth[idx]=v; return 0; } return GWEN_ERROR_INVALID; } void AB_TransactionLimits_PresetValuesCycleMonth(AB_TRANSACTION_LIMITS *p_struct, uint8_t v) { memset(p_struct->valuesCycleMonth, v, 64); } int AB_TransactionLimits_GetValuesCycleMonthArraySize(void) { return 64; } uint8_t AB_TransactionLimits_GetValuesExecutionDayWeekAt(const AB_TRANSACTION_LIMITS *p_struct, int idx) { if (p_struct && (idx < 16)) return p_struct->valuesExecutionDayWeek[idx]; return 0; } int AB_TransactionLimits_SetValuesExecutionDayWeekAt(AB_TRANSACTION_LIMITS *p_struct, int idx, uint8_t v) { if (p_struct && (idx < 16)) { p_struct->valuesExecutionDayWeek[idx]=v; return 0; } return GWEN_ERROR_INVALID; } void AB_TransactionLimits_PresetValuesExecutionDayWeek(AB_TRANSACTION_LIMITS *p_struct, uint8_t v) { memset(p_struct->valuesExecutionDayWeek, v, 16); } int AB_TransactionLimits_GetValuesExecutionDayWeekArraySize(void) { return 16; } uint8_t AB_TransactionLimits_GetValuesExecutionDayMonthAt(const AB_TRANSACTION_LIMITS *p_struct, int idx) { if (p_struct && (idx < 64)) return p_struct->valuesExecutionDayMonth[idx]; return 0; } int AB_TransactionLimits_SetValuesExecutionDayMonthAt(AB_TRANSACTION_LIMITS *p_struct, int idx, uint8_t v) { if (p_struct && (idx < 64)) { p_struct->valuesExecutionDayMonth[idx]=v; return 0; } return GWEN_ERROR_INVALID; } void AB_TransactionLimits_PresetValuesExecutionDayMonth(AB_TRANSACTION_LIMITS *p_struct, uint8_t v) { memset(p_struct->valuesExecutionDayMonth, v, 64); } int AB_TransactionLimits_GetValuesExecutionDayMonthArraySize(void) { return 64; } int AB_TransactionLimits_ValuesCycleWeekAdd(AB_TRANSACTION_LIMITS *t, uint8_t v) { assert(t); if (t->valuesCycleWeekUsed < AB_TransactionLimits_GetValuesCycleWeekArraySize()) { t->valuesCycleWeek[t->valuesCycleWeekUsed++]=v; return 0; } else { DBG_ERROR(AQBANKING_LOGDOMAIN, "Too many entries (%d)", t->valuesCycleWeekUsed); return GWEN_ERROR_BUFFER_OVERFLOW; } } int AB_TransactionLimits_ValuesCycleWeekHas(const AB_TRANSACTION_LIMITS *t, uint8_t v) { int j; assert(t); for (j=0; jvaluesCycleWeekUsed; j++) { if (t->valuesCycleWeek[j]==v) return 1; } return 0; } int AB_TransactionLimits_ValuesCycleMonthAdd(AB_TRANSACTION_LIMITS *t, uint8_t v) { assert(t); if (t->valuesCycleMonthUsed < AB_TransactionLimits_GetValuesCycleMonthArraySize()) { t->valuesCycleMonth[t->valuesCycleMonthUsed++]=v; return 0; } else { DBG_ERROR(AQBANKING_LOGDOMAIN, "Too many entries (%d)", t->valuesCycleMonthUsed); return GWEN_ERROR_BUFFER_OVERFLOW; } } int AB_TransactionLimits_ValuesCycleMonthHas(const AB_TRANSACTION_LIMITS *t, uint8_t v) { int j; assert(t); for (j=0; jvaluesCycleMonthUsed; j++) { if (t->valuesCycleMonth[j]==v) return 1; } return 0; } int AB_TransactionLimits_ValuesExecutionDayWeekAdd(AB_TRANSACTION_LIMITS *t, uint8_t v) { assert(t); if (t->valuesExecutionDayWeekUsed < AB_TransactionLimits_GetValuesExecutionDayWeekArraySize()) { t->valuesExecutionDayWeek[t->valuesExecutionDayWeekUsed++]=v; return 0; } else { DBG_ERROR(AQBANKING_LOGDOMAIN, "Too many entries (%d)", t->valuesExecutionDayWeekUsed); return GWEN_ERROR_BUFFER_OVERFLOW; } } int AB_TransactionLimits_ValuesExecutionDayWeekHas(const AB_TRANSACTION_LIMITS *t, uint8_t v) { int j; assert(t); for (j=0; jvaluesExecutionDayWeekUsed; j++) { if (t->valuesExecutionDayWeek[j]==v) return 1; } return 0; } int AB_TransactionLimits_ValuesExecutionDayMonthAdd(AB_TRANSACTION_LIMITS *t, uint8_t v) { assert(t); if (t->valuesExecutionDayMonthUsed < AB_TransactionLimits_GetValuesExecutionDayMonthArraySize()) { t->valuesExecutionDayMonth[t->valuesExecutionDayMonthUsed++]=v; return 0; } else { DBG_ERROR(AQBANKING_LOGDOMAIN, "Too many entries (%d)", t->valuesExecutionDayMonthUsed); return GWEN_ERROR_BUFFER_OVERFLOW; } } int AB_TransactionLimits_ValuesExecutionDayMonthHas(const AB_TRANSACTION_LIMITS *t, uint8_t v) { int j; assert(t); for (j=0; jvaluesExecutionDayMonthUsed; j++) { if (t->valuesExecutionDayMonth[j]==v) return 1; } return 0; } /* code headers */ aqbanking-6.6.1/src/libs/aqbanking/types/security.c0000664000175000017500000004533315037736054017256 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "security.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "./security_p.h" #include #include /* code headers */ /* macro functions */ GWEN_LIST_FUNCTIONS(AB_SECURITY, AB_Security) GWEN_LIST2_FUNCTIONS(AB_SECURITY, AB_Security) AB_SECURITY *AB_Security_new(void) { AB_SECURITY *p_struct; GWEN_NEW_OBJECT(AB_SECURITY, p_struct) p_struct->_refCount=1; GWEN_LIST_INIT(AB_SECURITY, p_struct) /* members */ p_struct->name=NULL; p_struct->uniqueId=NULL; p_struct->nameSpace=NULL; p_struct->tickerSymbol=NULL; p_struct->units=AB_Value_new(); p_struct->unitPriceValue=AB_Value_new(); p_struct->unitPriceDate=NULL; /* virtual functions */ return p_struct; } void AB_Security_free(AB_SECURITY *p_struct) { if (p_struct) { assert(p_struct->_refCount); if (p_struct->_refCount==1) { GWEN_LIST_FINI(AB_SECURITY, p_struct) /* members */ free(p_struct->name); p_struct->name=NULL; free(p_struct->uniqueId); p_struct->uniqueId=NULL; free(p_struct->nameSpace); p_struct->nameSpace=NULL; free(p_struct->tickerSymbol); p_struct->tickerSymbol=NULL; AB_Value_free(p_struct->units); AB_Value_free(p_struct->unitPriceValue); GWEN_Time_free(p_struct->unitPriceDate); p_struct->unitPriceDate=NULL; p_struct->_refCount=0; GWEN_FREE_OBJECT(p_struct); } else p_struct->_refCount--; } } void AB_Security_Attach(AB_SECURITY *p_struct) { assert(p_struct); assert(p_struct->_refCount); p_struct->_refCount++; } AB_SECURITY *AB_Security_dup(const AB_SECURITY *p_src) { AB_SECURITY *p_struct; assert(p_src); p_struct=AB_Security_new(); /* member "name" */ if (p_struct->name) { free(p_struct->name); p_struct->name=NULL; p_struct->name=NULL; } if (p_src->name) { p_struct->name=strdup(p_src->name); } /* member "uniqueId" */ if (p_struct->uniqueId) { free(p_struct->uniqueId); p_struct->uniqueId=NULL; p_struct->uniqueId=NULL; } if (p_src->uniqueId) { p_struct->uniqueId=strdup(p_src->uniqueId); } /* member "nameSpace" */ if (p_struct->nameSpace) { free(p_struct->nameSpace); p_struct->nameSpace=NULL; p_struct->nameSpace=NULL; } if (p_src->nameSpace) { p_struct->nameSpace=strdup(p_src->nameSpace); } /* member "tickerSymbol" */ if (p_struct->tickerSymbol) { free(p_struct->tickerSymbol); p_struct->tickerSymbol=NULL; p_struct->tickerSymbol=NULL; } if (p_src->tickerSymbol) { p_struct->tickerSymbol=strdup(p_src->tickerSymbol); } /* member "units" */ if (p_struct->units) { AB_Value_free(p_struct->units); p_struct->units=NULL; } if (p_src->units) { p_struct->units=AB_Value_dup(p_src->units); } /* member "unitPriceValue" */ if (p_struct->unitPriceValue) { AB_Value_free(p_struct->unitPriceValue); p_struct->unitPriceValue=NULL; } if (p_src->unitPriceValue) { p_struct->unitPriceValue=AB_Value_dup(p_src->unitPriceValue); } /* member "unitPriceDate" */ if (p_struct->unitPriceDate) { GWEN_Time_free(p_struct->unitPriceDate); p_struct->unitPriceDate=NULL; p_struct->unitPriceDate=NULL; } if (p_src->unitPriceDate) { p_struct->unitPriceDate=GWEN_Time_dup(p_src->unitPriceDate); } return p_struct; } AB_SECURITY *AB_Security_copy(AB_SECURITY *p_struct, const AB_SECURITY *p_src) { assert(p_struct); assert(p_src); /* member "name" */ if (p_struct->name) { free(p_struct->name); p_struct->name=NULL; p_struct->name=NULL; } if (p_src->name) { p_struct->name=strdup(p_src->name); } /* member "uniqueId" */ if (p_struct->uniqueId) { free(p_struct->uniqueId); p_struct->uniqueId=NULL; p_struct->uniqueId=NULL; } if (p_src->uniqueId) { p_struct->uniqueId=strdup(p_src->uniqueId); } /* member "nameSpace" */ if (p_struct->nameSpace) { free(p_struct->nameSpace); p_struct->nameSpace=NULL; p_struct->nameSpace=NULL; } if (p_src->nameSpace) { p_struct->nameSpace=strdup(p_src->nameSpace); } /* member "tickerSymbol" */ if (p_struct->tickerSymbol) { free(p_struct->tickerSymbol); p_struct->tickerSymbol=NULL; p_struct->tickerSymbol=NULL; } if (p_src->tickerSymbol) { p_struct->tickerSymbol=strdup(p_src->tickerSymbol); } /* member "units" */ if (p_struct->units) { AB_Value_free(p_struct->units); p_struct->units=NULL; } if (p_src->units) { p_struct->units=AB_Value_dup(p_src->units); } /* member "unitPriceValue" */ if (p_struct->unitPriceValue) { AB_Value_free(p_struct->unitPriceValue); p_struct->unitPriceValue=NULL; } if (p_src->unitPriceValue) { p_struct->unitPriceValue=AB_Value_dup(p_src->unitPriceValue); } /* member "unitPriceDate" */ if (p_struct->unitPriceDate) { GWEN_Time_free(p_struct->unitPriceDate); p_struct->unitPriceDate=NULL; p_struct->unitPriceDate=NULL; } if (p_src->unitPriceDate) { p_struct->unitPriceDate=GWEN_Time_dup(p_src->unitPriceDate); } return p_struct; } const char *AB_Security_GetName(const AB_SECURITY *p_struct){ assert(p_struct); return p_struct->name; } const char *AB_Security_GetUniqueId(const AB_SECURITY *p_struct){ assert(p_struct); return p_struct->uniqueId; } const char *AB_Security_GetNameSpace(const AB_SECURITY *p_struct){ assert(p_struct); return p_struct->nameSpace; } const char *AB_Security_GetTickerSymbol(const AB_SECURITY *p_struct){ assert(p_struct); return p_struct->tickerSymbol; } const AB_VALUE *AB_Security_GetUnits(const AB_SECURITY *p_struct){ assert(p_struct); return p_struct->units; } const AB_VALUE *AB_Security_GetUnitPriceValue(const AB_SECURITY *p_struct){ assert(p_struct); return p_struct->unitPriceValue; } const GWEN_TIME *AB_Security_GetUnitPriceDate(const AB_SECURITY *p_struct){ assert(p_struct); return p_struct->unitPriceDate; } void AB_Security_SetName(AB_SECURITY *p_struct, const char *p_src){ assert(p_struct); if (p_struct->name) { free(p_struct->name); p_struct->name=NULL; p_struct->name=NULL; } if (p_src) { p_struct->name=strdup(p_src); } else { p_struct->name=NULL; } } void AB_Security_SetUniqueId(AB_SECURITY *p_struct, const char *p_src){ assert(p_struct); if (p_struct->uniqueId) { free(p_struct->uniqueId); p_struct->uniqueId=NULL; p_struct->uniqueId=NULL; } if (p_src) { p_struct->uniqueId=strdup(p_src); } else { p_struct->uniqueId=NULL; } } void AB_Security_SetNameSpace(AB_SECURITY *p_struct, const char *p_src){ assert(p_struct); if (p_struct->nameSpace) { free(p_struct->nameSpace); p_struct->nameSpace=NULL; p_struct->nameSpace=NULL; } if (p_src) { p_struct->nameSpace=strdup(p_src); } else { p_struct->nameSpace=NULL; } } void AB_Security_SetTickerSymbol(AB_SECURITY *p_struct, const char *p_src){ assert(p_struct); if (p_struct->tickerSymbol) { free(p_struct->tickerSymbol); p_struct->tickerSymbol=NULL; p_struct->tickerSymbol=NULL; } if (p_src) { p_struct->tickerSymbol=strdup(p_src); } else { p_struct->tickerSymbol=NULL; } } void AB_Security_SetUnits(AB_SECURITY *p_struct, const AB_VALUE *p_src){ assert(p_struct); if (p_struct->units) { AB_Value_free(p_struct->units); p_struct->units=NULL; } if (p_src) { p_struct->units=AB_Value_dup(p_src); } else { p_struct->units=NULL; } } void AB_Security_SetUnitPriceValue(AB_SECURITY *p_struct, const AB_VALUE *p_src){ assert(p_struct); if (p_struct->unitPriceValue) { AB_Value_free(p_struct->unitPriceValue); p_struct->unitPriceValue=NULL; } if (p_src) { p_struct->unitPriceValue=AB_Value_dup(p_src); } else { p_struct->unitPriceValue=NULL; } } void AB_Security_SetUnitPriceDate(AB_SECURITY *p_struct, const GWEN_TIME *p_src){ assert(p_struct); if (p_struct->unitPriceDate) { GWEN_Time_free(p_struct->unitPriceDate); p_struct->unitPriceDate=NULL; p_struct->unitPriceDate=NULL; } if (p_src) { p_struct->unitPriceDate=GWEN_Time_dup(p_src); } else { p_struct->unitPriceDate=NULL; } } AB_SECURITY_LIST *AB_Security_List_dup(const AB_SECURITY_LIST *p_src) { AB_SECURITY_LIST *p_dest; AB_SECURITY *p_elem; assert(p_src); p_dest=AB_Security_List_new(); p_elem=AB_Security_List_First(p_src); while(p_elem) { AB_SECURITY *p_cpy; p_cpy=AB_Security_dup(p_elem); AB_Security_List_Add(p_cpy, p_dest); p_elem=AB_Security_List_Next(p_elem); } return p_dest; } void AB_Security_ReadDb(AB_SECURITY *p_struct, GWEN_DB_NODE *p_db){ assert(p_struct); /* member "name" */ if (p_struct->name) { free(p_struct->name); p_struct->name=NULL; p_struct->name=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "name", 0, NULL); if (s) p_struct->name=strdup(s); } /* member "uniqueId" */ if (p_struct->uniqueId) { free(p_struct->uniqueId); p_struct->uniqueId=NULL; p_struct->uniqueId=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "uniqueId", 0, NULL); if (s) p_struct->uniqueId=strdup(s); } /* member "nameSpace" */ if (p_struct->nameSpace) { free(p_struct->nameSpace); p_struct->nameSpace=NULL; p_struct->nameSpace=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "nameSpace", 0, NULL); if (s) p_struct->nameSpace=strdup(s); } /* member "tickerSymbol" */ if (p_struct->tickerSymbol) { free(p_struct->tickerSymbol); p_struct->tickerSymbol=NULL; p_struct->tickerSymbol=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "tickerSymbol", 0, NULL); if (s) p_struct->tickerSymbol=strdup(s); } /* member "units" */ if (p_struct->units) { AB_Value_free(p_struct->units); p_struct->units=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "units", 0, NULL); if (s) p_struct->units=AB_Value_fromString(s); else p_struct->units=NULL; } /* member "unitPriceValue" */ if (p_struct->unitPriceValue) { AB_Value_free(p_struct->unitPriceValue); p_struct->unitPriceValue=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "unitPriceValue", 0, NULL); if (s) p_struct->unitPriceValue=AB_Value_fromString(s); else p_struct->unitPriceValue=NULL; } /* member "unitPriceDate" */ if (p_struct->unitPriceDate) { GWEN_Time_free(p_struct->unitPriceDate); p_struct->unitPriceDate=NULL; p_struct->unitPriceDate=NULL; } { GWEN_DB_NODE *dbDest; dbDest=GWEN_DB_GetGroup(p_db, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "unitPriceDate"); if (dbDest) p_struct->unitPriceDate=GWEN_Time_fromDb(dbDest); } } int AB_Security_WriteDb(const AB_SECURITY *p_struct, GWEN_DB_NODE *p_db) { int p_rv; assert(p_struct); /* member "name" */ if (p_struct->name) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "name", p_struct->name); else { GWEN_DB_DeleteVar(p_db, "name"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "uniqueId" */ if (p_struct->uniqueId) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "uniqueId", p_struct->uniqueId); else { GWEN_DB_DeleteVar(p_db, "uniqueId"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "nameSpace" */ if (p_struct->nameSpace) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "nameSpace", p_struct->nameSpace); else { GWEN_DB_DeleteVar(p_db, "nameSpace"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "tickerSymbol" */ if (p_struct->tickerSymbol) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "tickerSymbol", p_struct->tickerSymbol); else { GWEN_DB_DeleteVar(p_db, "tickerSymbol"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "units" */ if (p_struct->units) { GWEN_BUFFER *tbuf=GWEN_Buffer_new(0, 64, 0, 1); AB_Value_toString(p_struct->units, tbuf); p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "units", GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } else { GWEN_DB_DeleteVar(p_db, "units"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "unitPriceValue" */ if (p_struct->unitPriceValue) { GWEN_BUFFER *tbuf=GWEN_Buffer_new(0, 64, 0, 1); AB_Value_toString(p_struct->unitPriceValue, tbuf); p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "unitPriceValue", GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } else { GWEN_DB_DeleteVar(p_db, "unitPriceValue"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "unitPriceDate" */ if (p_struct->unitPriceDate){ GWEN_DB_NODE *dbDest; dbDest=GWEN_DB_GetGroup(p_db, GWEN_DB_FLAGS_OVERWRITE_GROUPS, "unitPriceDate"); assert(dbDest); p_rv=GWEN_Time_toDb(p_struct->unitPriceDate, dbDest); } else p_rv=0; if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } return 0; } AB_SECURITY *AB_Security_fromDb(GWEN_DB_NODE *p_db) { AB_SECURITY *p_struct; p_struct=AB_Security_new(); AB_Security_ReadDb(p_struct, p_db); return p_struct; } int AB_Security_toDb(const AB_SECURITY *p_struct, GWEN_DB_NODE *p_db) { return AB_Security_WriteDb(p_struct, p_db); } void AB_Security_ReadXml(AB_SECURITY *p_struct, GWEN_XMLNODE *p_db){ assert(p_struct); /* member "name" */ if (p_struct->name) { free(p_struct->name); p_struct->name=NULL; p_struct->name=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "name", NULL); if (s) p_struct->name=strdup(s); } /* member "uniqueId" */ if (p_struct->uniqueId) { free(p_struct->uniqueId); p_struct->uniqueId=NULL; p_struct->uniqueId=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "uniqueId", NULL); if (s) p_struct->uniqueId=strdup(s); } /* member "nameSpace" */ if (p_struct->nameSpace) { free(p_struct->nameSpace); p_struct->nameSpace=NULL; p_struct->nameSpace=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "nameSpace", NULL); if (s) p_struct->nameSpace=strdup(s); } /* member "tickerSymbol" */ if (p_struct->tickerSymbol) { free(p_struct->tickerSymbol); p_struct->tickerSymbol=NULL; p_struct->tickerSymbol=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "tickerSymbol", NULL); if (s) p_struct->tickerSymbol=strdup(s); } /* member "units" */ if (p_struct->units) { AB_Value_free(p_struct->units); p_struct->units=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "units", NULL); if (s) p_struct->units=AB_Value_fromString(s); else p_struct->units=NULL; } /* member "unitPriceValue" */ if (p_struct->unitPriceValue) { AB_Value_free(p_struct->unitPriceValue); p_struct->unitPriceValue=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "unitPriceValue", NULL); if (s) p_struct->unitPriceValue=AB_Value_fromString(s); else p_struct->unitPriceValue=NULL; } /* member "unitPriceDate" */ if (p_struct->unitPriceDate) { GWEN_Time_free(p_struct->unitPriceDate); p_struct->unitPriceDate=NULL; p_struct->unitPriceDate=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "unitPriceDate", NULL); if (s && *s) p_struct->unitPriceDate=GWEN_Time_fromString(s, "YYYY/MM/DD-hh:mm"); } } void AB_Security_WriteXml(const AB_SECURITY *p_struct, GWEN_XMLNODE *p_db) { assert(p_struct); /* member "name" */ GWEN_XMLNode_SetCharValue(p_db, "name", p_struct->name); /* member "uniqueId" */ GWEN_XMLNode_SetCharValue(p_db, "uniqueId", p_struct->uniqueId); /* member "nameSpace" */ GWEN_XMLNode_SetCharValue(p_db, "nameSpace", p_struct->nameSpace); /* member "tickerSymbol" */ GWEN_XMLNode_SetCharValue(p_db, "tickerSymbol", p_struct->tickerSymbol); /* member "units" */ if (p_struct->units) { GWEN_BUFFER *tbuf=GWEN_Buffer_new(0, 64, 0, 1); AB_Value_toString(p_struct->units, tbuf); GWEN_XMLNode_SetCharValue(p_db, "units", GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } /* member "unitPriceValue" */ if (p_struct->unitPriceValue) { GWEN_BUFFER *tbuf=GWEN_Buffer_new(0, 64, 0, 1); AB_Value_toString(p_struct->unitPriceValue, tbuf); GWEN_XMLNode_SetCharValue(p_db, "unitPriceValue", GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } /* member "unitPriceDate" */ if (p_struct->unitPriceDate){ GWEN_BUFFER *xbuf; int rv; xbuf=GWEN_Buffer_new(0, 32, 0, 1); rv=GWEN_Time_toString(p_struct->unitPriceDate, "YYYY/MM/DD-hh:mm", xbuf); if (rv>=0) GWEN_XMLNode_SetCharValue(p_db, "unitPriceDate", GWEN_Buffer_GetStart(xbuf)); GWEN_Buffer_free(xbuf); } } void AB_Security_toXml(const AB_SECURITY *p_struct, GWEN_XMLNODE *p_db) { AB_Security_WriteXml(p_struct, p_db); } AB_SECURITY *AB_Security_fromXml(GWEN_XMLNODE *p_db) { AB_SECURITY *p_struct; p_struct=AB_Security_new(); AB_Security_ReadXml(p_struct, p_db); return p_struct; } void AB_Security_toHashString(const AB_SECURITY *p_struct, GWEN_BUFFER *p_buffer) { assert(p_struct); /* member "name"*/ if (p_struct->name) GWEN_Buffer_AppendString(p_buffer, p_struct->name); GWEN_Buffer_AppendByte(p_buffer, ':'); /* member "uniqueId"*/ if (p_struct->uniqueId) GWEN_Buffer_AppendString(p_buffer, p_struct->uniqueId); GWEN_Buffer_AppendByte(p_buffer, ':'); /* member "nameSpace"*/ if (p_struct->nameSpace) GWEN_Buffer_AppendString(p_buffer, p_struct->nameSpace); GWEN_Buffer_AppendByte(p_buffer, ':'); /* member "tickerSymbol"*/ if (p_struct->tickerSymbol) GWEN_Buffer_AppendString(p_buffer, p_struct->tickerSymbol); GWEN_Buffer_AppendByte(p_buffer, ':'); /* member "units"*/ if (p_struct->units) { double d=AB_Value_GetValueAsDouble(p_struct->units); char numbuf[32]; snprintf(numbuf, sizeof(numbuf)-1, "%.4f", d); numbuf[sizeof(numbuf)-1]=0; GWEN_Buffer_AppendString(p_buffer, numbuf); } GWEN_Buffer_AppendByte(p_buffer, ':'); /* member "unitPriceValue"*/ if (p_struct->unitPriceValue) { double d=AB_Value_GetValueAsDouble(p_struct->unitPriceValue); char numbuf[32]; snprintf(numbuf, sizeof(numbuf)-1, "%.4f", d); numbuf[sizeof(numbuf)-1]=0; GWEN_Buffer_AppendString(p_buffer, numbuf); } GWEN_Buffer_AppendByte(p_buffer, ':'); /* member "unitPriceDate"*/ if (p_struct->unitPriceDate) GWEN_Time_toUtcString(p_struct->unitPriceDate, "YYYY/MM/DD-hh:mm", p_buffer); GWEN_Buffer_AppendByte(p_buffer, ':'); } static AB_SECURITY *AB_Security_List2__freeAll_cb(AB_SECURITY *t, void *user_data) { AB_Security_free(t); return NULL; } int AB_Security_List2_freeAll(AB_SECURITY_LIST2 *tl) { if (tl) { AB_Security_List2_ForEach(tl, AB_Security_List2__freeAll_cb, NULL); AB_Security_List2_free(tl); } else { DBG_ERROR(AQBANKING_LOGDOMAIN, "List missing"); return GWEN_ERROR_INVALID; } return 0; } /* code headers */ aqbanking-6.6.1/src/libs/aqbanking/types/imexporter_context.h0000664000175000017500000001447515037736054021361 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "imexporter_context.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef AB_IMEXPORTER_CONTEXT_IMEXPORTER_CONTEXT_H #define AB_IMEXPORTER_CONTEXT_IMEXPORTER_CONTEXT_H #ifdef __cplusplus extern "C" { #endif /** @page P_AB_IMEXPORTER_CONTEXT Structure AB_IMEXPORTER_CONTEXT

This page describes the properties of AB_IMEXPORTER_CONTEXT.

AB_IMEXPORTER_CONTEXT

@anchor AB_IMEXPORTER_CONTEXT_accountInfoList

accountInfoList

Set this property with @ref AB_ImExporterContext_SetAccountInfoList(), get it with @ref AB_ImExporterContext_GetAccountInfoList().

@anchor AB_IMEXPORTER_CONTEXT_securityList

securityList

Set this property with @ref AB_ImExporterContext_SetSecurityList(), get it with @ref AB_ImExporterContext_GetSecurityList().

@anchor AB_IMEXPORTER_CONTEXT_messageList

messageList

Set this property with @ref AB_ImExporterContext_SetMessageList(), get it with @ref AB_ImExporterContext_GetMessageList().

*/ /* needed system headers */ #include #include #include #include #include /* pre-headers */ #include #include #include typedef struct AB_IMEXPORTER_CONTEXT AB_IMEXPORTER_CONTEXT; GWEN_LIST_FUNCTION_LIB_DEFS(AB_IMEXPORTER_CONTEXT, AB_ImExporterContext, AQBANKING_API) GWEN_LIST2_FUNCTION_LIB_DEFS(AB_IMEXPORTER_CONTEXT, AB_ImExporterContext, AQBANKING_API) /* post-headers */ #include #include #include #include /** Constructor. */ AQBANKING_API AB_IMEXPORTER_CONTEXT *AB_ImExporterContext_new(void); /** Destructor. */ AQBANKING_API void AB_ImExporterContext_free(AB_IMEXPORTER_CONTEXT *p_struct); AQBANKING_API void AB_ImExporterContext_Attach(AB_IMEXPORTER_CONTEXT *p_struct); AQBANKING_API AB_IMEXPORTER_CONTEXT *AB_ImExporterContext_dup(const AB_IMEXPORTER_CONTEXT *p_src); AQBANKING_API AB_IMEXPORTER_CONTEXT *AB_ImExporterContext_copy(AB_IMEXPORTER_CONTEXT *p_struct, const AB_IMEXPORTER_CONTEXT *p_src); /** Getter. * Use this function to get the member "accountInfoList" (see @ref AB_IMEXPORTER_CONTEXT_accountInfoList) */ AQBANKING_API AB_IMEXPORTER_ACCOUNTINFO_LIST *AB_ImExporterContext_GetAccountInfoList(const AB_IMEXPORTER_CONTEXT *p_struct); /** Getter. * Use this function to get the member "securityList" (see @ref AB_IMEXPORTER_CONTEXT_securityList) */ AQBANKING_API AB_SECURITY_LIST *AB_ImExporterContext_GetSecurityList(const AB_IMEXPORTER_CONTEXT *p_struct); /** Getter. * Use this function to get the member "messageList" (see @ref AB_IMEXPORTER_CONTEXT_messageList) */ AQBANKING_API AB_MESSAGE_LIST *AB_ImExporterContext_GetMessageList(const AB_IMEXPORTER_CONTEXT *p_struct); /** Setter. * Use this function to set the member "accountInfoList" (see @ref AB_IMEXPORTER_CONTEXT_accountInfoList) */ AQBANKING_API void AB_ImExporterContext_SetAccountInfoList(AB_IMEXPORTER_CONTEXT *p_struct, AB_IMEXPORTER_ACCOUNTINFO_LIST *p_src); /** Setter. * Use this function to set the member "securityList" (see @ref AB_IMEXPORTER_CONTEXT_securityList) */ AQBANKING_API void AB_ImExporterContext_SetSecurityList(AB_IMEXPORTER_CONTEXT *p_struct, AB_SECURITY_LIST *p_src); /** Setter. * Use this function to set the member "messageList" (see @ref AB_IMEXPORTER_CONTEXT_messageList) */ AQBANKING_API void AB_ImExporterContext_SetMessageList(AB_IMEXPORTER_CONTEXT *p_struct, AB_MESSAGE_LIST *p_src); AQBANKING_API AB_IMEXPORTER_CONTEXT_LIST *AB_ImExporterContext_List_dup(const AB_IMEXPORTER_CONTEXT_LIST *p_src); AQBANKING_API void AB_ImExporterContext_ReadDb(AB_IMEXPORTER_CONTEXT *p_struct, GWEN_DB_NODE *p_db); AQBANKING_API int AB_ImExporterContext_WriteDb(const AB_IMEXPORTER_CONTEXT *p_struct, GWEN_DB_NODE *p_db); AQBANKING_API AB_IMEXPORTER_CONTEXT *AB_ImExporterContext_fromDb(GWEN_DB_NODE *p_db); AQBANKING_API int AB_ImExporterContext_toDb(const AB_IMEXPORTER_CONTEXT *p_struct, GWEN_DB_NODE *p_db); AQBANKING_API void AB_ImExporterContext_ReadXml(AB_IMEXPORTER_CONTEXT *p_struct, GWEN_XMLNODE *p_db); AQBANKING_API void AB_ImExporterContext_WriteXml(const AB_IMEXPORTER_CONTEXT *p_struct, GWEN_XMLNODE *p_db); AQBANKING_API void AB_ImExporterContext_toXml(const AB_IMEXPORTER_CONTEXT *p_struct, GWEN_XMLNODE *p_db); AQBANKING_API AB_IMEXPORTER_CONTEXT *AB_ImExporterContext_fromXml(GWEN_XMLNODE *p_db); AQBANKING_API int AB_ImExporterContext_List2_freeAll(AB_IMEXPORTER_CONTEXT_LIST2 *tl); /** * This function clears the context (e.g. removes all transactions etc). */ AQBANKING_API void AB_ImExporterContext_Clear(AB_IMEXPORTER_CONTEXT *st); /** * Adds the content of the second context to the first one. * Frees the second context. */ AQBANKING_API void AB_ImExporterContext_AddContext(AB_IMEXPORTER_CONTEXT *st, AB_IMEXPORTER_CONTEXT *stSrc); AQBANKING_API AB_IMEXPORTER_ACCOUNTINFO *AB_ImExporterContext_GetFirstAccountInfo(const AB_IMEXPORTER_CONTEXT *st); AQBANKING_API void AB_ImExporterContext_AddAccountInfo(AB_IMEXPORTER_CONTEXT *st, AB_IMEXPORTER_ACCOUNTINFO *ai); AQBANKING_API int AB_ImExporterContext_GetAccountInfoCount(const AB_IMEXPORTER_CONTEXT *st); AQBANKING_API AB_IMEXPORTER_ACCOUNTINFO *AB_ImExporterContext_GetOrAddAccountInfo(AB_IMEXPORTER_CONTEXT *st, uint32_t uniqueId, const char *iban, const char *bankCode, const char *accountNumber, int accountType); AQBANKING_API AB_SECURITY *AB_ImExporterContext_GetFirstSecurity(const AB_IMEXPORTER_CONTEXT *st); AQBANKING_API AB_SECURITY *AB_ImExporterContext_FindSecurity(const AB_IMEXPORTER_CONTEXT *st, const char *nameSpace, const char *id); AQBANKING_API void AB_ImExporterContext_AddSecurity(AB_IMEXPORTER_CONTEXT *st, AB_SECURITY *sec); AQBANKING_API AB_MESSAGE *AB_ImExporterContext_GetFirstMessage(const AB_IMEXPORTER_CONTEXT *st); AQBANKING_API void AB_ImExporterContext_AddMessage(AB_IMEXPORTER_CONTEXT *st, AB_MESSAGE *msg); AQBANKING_API void AB_ImExporterContext_AddTransaction(AB_IMEXPORTER_CONTEXT *st, AB_TRANSACTION *t); #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/aqbanking/types/ab_bankinfo_service.tm20000664000175000017500000000031715037736054021631 00000000000000 AB_BANKINFO_SERVICE AB_BankInfoService aqbanking-6.6.1/src/libs/aqbanking/types/value.h0000664000175000017500000001157614043610744016523 00000000000000/*************************************************************************** begin : Mon Apr 05 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AB_VALUE_H #define AB_VALUE_H #include #include #include #include #include #ifdef __cplusplus extern "C" { #endif typedef struct AB_VALUE AB_VALUE; GWEN_LIST_FUNCTION_LIB_DEFS(AB_VALUE, AB_Value, AQBANKING_API) /** Creates a deep copy of an AB_VALUE_LIST object * */ AQBANKING_API AB_VALUE_LIST *AB_Value_List_dup(const AB_VALUE_LIST *vl); AQBANKING_API AB_VALUE *AB_Value_new(void); AQBANKING_API AB_VALUE *AB_Value_dup(const AB_VALUE *ov); AQBANKING_API void AB_Value_free(AB_VALUE *v); /** * This function reads a AB_VALUE from a string. Strings suitable as * arguments are those created by @ref AB_Value_toString or simple * floating point string (as in "123.45" or "-123.45"). */ AQBANKING_API AB_VALUE *AB_Value_fromString(const char *s); /** * This function exports the value in a format which can be recognized * by the function @ref AB_Value_fromString. You should not make any * assumption about the format of the string created here. */ AQBANKING_API void AB_Value_toString(const AB_VALUE *v, GWEN_BUFFER *buf); AQBANKING_API void AB_Value_toHumanReadableString(const AB_VALUE *v, GWEN_BUFFER *buf, int prec, int withCurrency); AQBANKING_API AB_VALUE *AB_Value_fromDouble(double i); /** Returns a newly allocated rational number, initialized to * num/denom. */ AQBANKING_API AB_VALUE *AB_Value_fromInt(long int num, long int denom); /** Create a value from the given GWEN_DB. */ AQBANKING_API AB_VALUE *AB_Value_fromDb(GWEN_DB_NODE *db); /** Write the given value into the given GWEN_DB. */ AQBANKING_API int AB_Value_toDb(const AB_VALUE *v, GWEN_DB_NODE *db); /** Write the given value into the given GWEN_DB (uses float instead of rational). */ AQBANKING_API int AB_Value_toDbFloat(const AB_VALUE *v, GWEN_DB_NODE *db); /** * This function returns the value as a double. * You should not feed another AB_VALUE from this double, because the * conversion from an AB_VALUE to a double might be lossy! */ AQBANKING_API double AB_Value_GetValueAsDouble(const AB_VALUE *v); /** * You should not use a double retrieved via * @ref AB_Value_GetValueAsDouble as an argument to this function, because * the conversion from AB_VALUE to double to AB_VALUE might change the * real value. */ AQBANKING_API void AB_Value_SetValueFromDouble(AB_VALUE *v, double i); /** * Write the value (without the currency) in nominator/denominator * form into the given buffer if possibly. * This form looks like "12345/6789" (nominator/denominator). */ AQBANKING_API int AB_Value_GetNumDenomString(const AB_VALUE *v, char *buffer, uint32_t buflen); AQBANKING_API void AB_Value_SetZero(AB_VALUE *v); AQBANKING_API int AB_Value_IsZero(const AB_VALUE *v); AQBANKING_API int AB_Value_IsNegative(const AB_VALUE *v); AQBANKING_API int AB_Value_IsPositive(const AB_VALUE *v); AQBANKING_API int AB_Value_Compare(const AB_VALUE *v1, const AB_VALUE *v2); /** Returns non-zero if v1 and v2 are equal, zero if they are * non-equal. Although AB_Value_Compare() can be used for the same * purpose, this function is much faster. */ AQBANKING_API int AB_Value_Equal(const AB_VALUE *v1, const AB_VALUE *v2); AQBANKING_API int AB_Value_AddValue(AB_VALUE *v1, const AB_VALUE *v2); AQBANKING_API int AB_Value_SubValue(AB_VALUE *v1, const AB_VALUE *v2); AQBANKING_API int AB_Value_MultValue(AB_VALUE *v1, const AB_VALUE *v2); AQBANKING_API int AB_Value_DivValue(AB_VALUE *v1, const AB_VALUE *v2); AQBANKING_API int AB_Value_Negate(AB_VALUE *v); AQBANKING_API const char *AB_Value_GetCurrency(const AB_VALUE *v); AQBANKING_API void AB_Value_SetCurrency(AB_VALUE *v, const char *s); AQBANKING_API void AB_Value_Dump(const AB_VALUE *v, FILE *f, unsigned int indent); /** Returns the numerator of the given rational number. */ AQBANKING_API long int AB_Value_Num(const AB_VALUE *v); /** Returns the denominator of the given rational number. */ AQBANKING_API long int AB_Value_Denom(const AB_VALUE *v); /** Write value to HBCI string (e.g. "11,90" is written as "11,9") */ AQBANKING_API void AB_Value_toHbciString(const AB_VALUE *v, GWEN_BUFFER *buf); #ifdef __cplusplus } #endif #endif /* AB_VALUE_H */ aqbanking-6.6.1/src/libs/aqbanking/types/ab_bankinfo_list.tm20000664000175000017500000000033515037736054021144 00000000000000 AB_BANKINFO_LIST AB_BankInfo_List aqbanking-6.6.1/src/libs/aqbanking/types/transaction.c0000664000175000017500000054441615037736054017742 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "transaction.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "./transaction_p.h" #include #include /* code headers */ /* macro functions */ GWEN_LIST_FUNCTIONS(AB_TRANSACTION, AB_Transaction) GWEN_LIST2_FUNCTIONS(AB_TRANSACTION, AB_Transaction) GWEN_CONSTLIST2_FUNCTIONS(AB_TRANSACTION, AB_Transaction) AB_TRANSACTION_TYPE AB_Transaction_Type_fromString(const char *p_s) { if (p_s && *p_s) { if (strcasecmp(p_s, "none")==0) return AB_Transaction_TypeNone; else if (strcasecmp(p_s, "statement")==0) return AB_Transaction_TypeStatement; else if (strcasecmp(p_s, "notedStatement")==0) return AB_Transaction_TypeNotedStatement; else if (strcasecmp(p_s, "transfer")==0) return AB_Transaction_TypeTransfer; else if (strcasecmp(p_s, "debitNote")==0) return AB_Transaction_TypeDebitNote; else if (strcasecmp(p_s, "standingOrder")==0) return AB_Transaction_TypeStandingOrder; else if (strcasecmp(p_s, "internalTransfer")==0) return AB_Transaction_TypeInternalTransfer; else if (strcasecmp(p_s, "brokerage")==0) return AB_Transaction_TypeBrokerage; else if (strcasecmp(p_s, "transaction")==0) return AB_Transaction_TypeTransaction; else if (strcasecmp(p_s, "split")==0) return AB_Transaction_TypeSplit; } return AB_Transaction_TypeUnknown; } AB_TRANSACTION_SUBTYPE AB_Transaction_SubType_fromString(const char *p_s) { if (p_s && *p_s) { if (strcasecmp(p_s, "none")==0) return AB_Transaction_SubTypeNone; else if (strcasecmp(p_s, "standard")==0) return AB_Transaction_SubTypeStandard; else if (strcasecmp(p_s, "check")==0) return AB_Transaction_SubTypeCheck; else if (strcasecmp(p_s, "bookedDebitNote")==0) return AB_Transaction_SubTypeBookedDebitNote; else if (strcasecmp(p_s, "drawnDebitNote")==0) return AB_Transaction_SubTypeDrawnDebitNote; else if (strcasecmp(p_s, "standingOrder")==0) return AB_Transaction_SubTypeStandingOrder; else if (strcasecmp(p_s, "loan")==0) return AB_Transaction_SubTypeLoan; else if (strcasecmp(p_s, "euStandard")==0) return AB_Transaction_SubTypeEuStandard; else if (strcasecmp(p_s, "euASAP")==0) return AB_Transaction_SubTypeEuASAP; else if (strcasecmp(p_s, "buy")==0) return AB_Transaction_SubTypeBuy; else if (strcasecmp(p_s, "sell")==0) return AB_Transaction_SubTypeSell; else if (strcasecmp(p_s, "reinvest")==0) return AB_Transaction_SubTypeReinvest; else if (strcasecmp(p_s, "dividend")==0) return AB_Transaction_SubTypeDividend; } return AB_Transaction_SubTypeUnknown; } AB_TRANSACTION_COMMAND AB_Transaction_Command_fromString(const char *p_s) { if (p_s && *p_s) { if (strcasecmp(p_s, "none")==0) return AB_Transaction_CommandNone; else if (strcasecmp(p_s, "getBalance")==0) return AB_Transaction_CommandGetBalance; else if (strcasecmp(p_s, "getTransactions")==0) return AB_Transaction_CommandGetTransactions; else if (strcasecmp(p_s, "getStandingOrders")==0) return AB_Transaction_CommandGetStandingOrders; else if (strcasecmp(p_s, "getDatedTransfers")==0) return AB_Transaction_CommandGetDatedTransfers; else if (strcasecmp(p_s, "sepaGetStandingOrders")==0) return AB_Transaction_CommandSepaGetStandingOrders; else if (strcasecmp(p_s, "loadCellPhone")==0) return AB_Transaction_CommandLoadCellPhone; else if (strcasecmp(p_s, "getEStatements")==0) return AB_Transaction_CommandGetEStatements; else if (strcasecmp(p_s, "transfer")==0) return AB_Transaction_CommandTransfer; else if (strcasecmp(p_s, "debitNote")==0) return AB_Transaction_CommandDebitNote; else if (strcasecmp(p_s, "createStandingOrder")==0) return AB_Transaction_CommandCreateStandingOrder; else if (strcasecmp(p_s, "modifyStandingOrder")==0) return AB_Transaction_CommandModifyStandingOrder; else if (strcasecmp(p_s, "deleteStandingOrder")==0) return AB_Transaction_CommandDeleteStandingOrder; else if (strcasecmp(p_s, "createDatedTransfer")==0) return AB_Transaction_CommandCreateDatedTransfer; else if (strcasecmp(p_s, "modifyDatedTransfer")==0) return AB_Transaction_CommandModifyDatedTransfer; else if (strcasecmp(p_s, "deleteDatedTransfer")==0) return AB_Transaction_CommandDeleteDatedTransfer; else if (strcasecmp(p_s, "internalTransfer")==0) return AB_Transaction_CommandInternalTransfer; else if (strcasecmp(p_s, "getDepot")==0) return AB_Transaction_CommandGetDepot; else if (strcasecmp(p_s, "sepaTransfer")==0) return AB_Transaction_CommandSepaTransfer; else if (strcasecmp(p_s, "sepaDebitNote")==0) return AB_Transaction_CommandSepaDebitNote; else if (strcasecmp(p_s, "sepaFlashDebitNote")==0) return AB_Transaction_CommandSepaFlashDebitNote; else if (strcasecmp(p_s, "sepaCreateStandingOrder")==0) return AB_Transaction_CommandSepaCreateStandingOrder; else if (strcasecmp(p_s, "sepaModifyStandingOrder")==0) return AB_Transaction_CommandSepaModifyStandingOrder; else if (strcasecmp(p_s, "sepaDeleteStandingOrder")==0) return AB_Transaction_CommandSepaDeleteStandingOrder; else if (strcasecmp(p_s, "sepaCreateDatedTransfer")==0) return AB_Transaction_CommandSepaCreateDatedTransfer; else if (strcasecmp(p_s, "sepaModifyDatedTransfer")==0) return AB_Transaction_CommandSepaModifyDatedTransfer; else if (strcasecmp(p_s, "sepaDeleteDatedTransfer")==0) return AB_Transaction_CommandSepaDeleteDatedTransfer; else if (strcasecmp(p_s, "sepaInternalTransfer")==0) return AB_Transaction_CommandSepaInternalTransfer; } return AB_Transaction_CommandUnknown; } AB_TRANSACTION_STATUS AB_Transaction_Status_fromString(const char *p_s) { if (p_s && *p_s) { if (strcasecmp(p_s, "none")==0) return AB_Transaction_StatusNone; else if (strcasecmp(p_s, "enqueued")==0) return AB_Transaction_StatusEnqueued; else if (strcasecmp(p_s, "sending")==0) return AB_Transaction_StatusSending; else if (strcasecmp(p_s, "sent")==0) return AB_Transaction_StatusSent; else if (strcasecmp(p_s, "accepted")==0) return AB_Transaction_StatusAccepted; else if (strcasecmp(p_s, "rejected")==0) return AB_Transaction_StatusRejected; else if (strcasecmp(p_s, "pending")==0) return AB_Transaction_StatusPending; else if (strcasecmp(p_s, "autoReconciled")==0) return AB_Transaction_StatusAutoReconciled; else if (strcasecmp(p_s, "manuallyReconciled")==0) return AB_Transaction_StatusManuallyReconciled; else if (strcasecmp(p_s, "revoked")==0) return AB_Transaction_StatusRevoked; else if (strcasecmp(p_s, "aborted")==0) return AB_Transaction_StatusAborted; else if (strcasecmp(p_s, "error")==0) return AB_Transaction_StatusError; } return AB_Transaction_StatusUnknown; } AB_TRANSACTION_PERIOD AB_Transaction_Period_fromString(const char *p_s) { if (p_s && *p_s) { if (strcasecmp(p_s, "none")==0) return AB_Transaction_PeriodNone; else if (strcasecmp(p_s, "monthly")==0) return AB_Transaction_PeriodMonthly; else if (strcasecmp(p_s, "weekly")==0) return AB_Transaction_PeriodWeekly; } return AB_Transaction_PeriodUnknown; } AB_TRANSACTION_CHARGE AB_Transaction_Charge_fromString(const char *p_s) { if (p_s && *p_s) { if (strcasecmp(p_s, "nobody")==0) return AB_Transaction_ChargeNobody; else if (strcasecmp(p_s, "local")==0) return AB_Transaction_ChargeLocal; else if (strcasecmp(p_s, "remote")==0) return AB_Transaction_ChargeRemote; else if (strcasecmp(p_s, "share")==0) return AB_Transaction_ChargeShare; } return AB_Transaction_ChargeUnknown; } AB_TRANSACTION_SEQUENCE AB_Transaction_Sequence_fromString(const char *p_s) { if (p_s && *p_s) { if (strcasecmp(p_s, "once")==0) return AB_Transaction_SequenceOnce; else if (strcasecmp(p_s, "first")==0) return AB_Transaction_SequenceFirst; else if (strcasecmp(p_s, "following")==0) return AB_Transaction_SequenceFollowing; else if (strcasecmp(p_s, "final")==0) return AB_Transaction_SequenceFinal; } return AB_Transaction_SequenceUnknown; } AB_TRANSACTION_ACK AB_Transaction_Ack_fromString(const char *p_s) { if (p_s && *p_s) { if (strcasecmp(p_s, "never")==0) return AB_Transaction_AckNever; else if (strcasecmp(p_s, "jobsWithAckCode")==0) return AB_Transaction_AckJobsWithAckCode; } return AB_Transaction_AckUnknown; } const char *AB_Transaction_Type_toString(AB_TRANSACTION_TYPE p_i) { switch(p_i) { case AB_Transaction_TypeNone: return "none"; case AB_Transaction_TypeStatement: return "statement"; case AB_Transaction_TypeNotedStatement: return "notedStatement"; case AB_Transaction_TypeTransfer: return "transfer"; case AB_Transaction_TypeDebitNote: return "debitNote"; case AB_Transaction_TypeStandingOrder: return "standingOrder"; case AB_Transaction_TypeInternalTransfer: return "internalTransfer"; case AB_Transaction_TypeBrokerage: return "brokerage"; case AB_Transaction_TypeTransaction: return "transaction"; case AB_Transaction_TypeSplit: return "split"; case AB_Transaction_TypeUnknown: default: return "unknown"; } } const char *AB_Transaction_SubType_toString(AB_TRANSACTION_SUBTYPE p_i) { switch(p_i) { case AB_Transaction_SubTypeNone: return "none"; case AB_Transaction_SubTypeStandard: return "standard"; case AB_Transaction_SubTypeCheck: return "check"; case AB_Transaction_SubTypeBookedDebitNote: return "bookedDebitNote"; case AB_Transaction_SubTypeDrawnDebitNote: return "drawnDebitNote"; case AB_Transaction_SubTypeStandingOrder: return "standingOrder"; case AB_Transaction_SubTypeLoan: return "loan"; case AB_Transaction_SubTypeEuStandard: return "euStandard"; case AB_Transaction_SubTypeEuASAP: return "euASAP"; case AB_Transaction_SubTypeBuy: return "buy"; case AB_Transaction_SubTypeSell: return "sell"; case AB_Transaction_SubTypeReinvest: return "reinvest"; case AB_Transaction_SubTypeDividend: return "dividend"; case AB_Transaction_SubTypeUnknown: default: return "unknown"; } } const char *AB_Transaction_Command_toString(AB_TRANSACTION_COMMAND p_i) { switch(p_i) { case AB_Transaction_CommandNone: return "none"; case AB_Transaction_CommandGetBalance: return "getBalance"; case AB_Transaction_CommandGetTransactions: return "getTransactions"; case AB_Transaction_CommandGetStandingOrders: return "getStandingOrders"; case AB_Transaction_CommandGetDatedTransfers: return "getDatedTransfers"; case AB_Transaction_CommandSepaGetStandingOrders: return "sepaGetStandingOrders"; case AB_Transaction_CommandLoadCellPhone: return "loadCellPhone"; case AB_Transaction_CommandGetEStatements: return "getEStatements"; case AB_Transaction_CommandTransfer: return "transfer"; case AB_Transaction_CommandDebitNote: return "debitNote"; case AB_Transaction_CommandCreateStandingOrder: return "createStandingOrder"; case AB_Transaction_CommandModifyStandingOrder: return "modifyStandingOrder"; case AB_Transaction_CommandDeleteStandingOrder: return "deleteStandingOrder"; case AB_Transaction_CommandCreateDatedTransfer: return "createDatedTransfer"; case AB_Transaction_CommandModifyDatedTransfer: return "modifyDatedTransfer"; case AB_Transaction_CommandDeleteDatedTransfer: return "deleteDatedTransfer"; case AB_Transaction_CommandInternalTransfer: return "internalTransfer"; case AB_Transaction_CommandGetDepot: return "getDepot"; case AB_Transaction_CommandSepaTransfer: return "sepaTransfer"; case AB_Transaction_CommandSepaDebitNote: return "sepaDebitNote"; case AB_Transaction_CommandSepaFlashDebitNote: return "sepaFlashDebitNote"; case AB_Transaction_CommandSepaCreateStandingOrder: return "sepaCreateStandingOrder"; case AB_Transaction_CommandSepaModifyStandingOrder: return "sepaModifyStandingOrder"; case AB_Transaction_CommandSepaDeleteStandingOrder: return "sepaDeleteStandingOrder"; case AB_Transaction_CommandSepaCreateDatedTransfer: return "sepaCreateDatedTransfer"; case AB_Transaction_CommandSepaModifyDatedTransfer: return "sepaModifyDatedTransfer"; case AB_Transaction_CommandSepaDeleteDatedTransfer: return "sepaDeleteDatedTransfer"; case AB_Transaction_CommandSepaInternalTransfer: return "sepaInternalTransfer"; case AB_Transaction_CommandUnknown: default: return "unknown"; } } const char *AB_Transaction_Status_toString(AB_TRANSACTION_STATUS p_i) { switch(p_i) { case AB_Transaction_StatusNone: return "none"; case AB_Transaction_StatusEnqueued: return "enqueued"; case AB_Transaction_StatusSending: return "sending"; case AB_Transaction_StatusSent: return "sent"; case AB_Transaction_StatusAccepted: return "accepted"; case AB_Transaction_StatusRejected: return "rejected"; case AB_Transaction_StatusPending: return "pending"; case AB_Transaction_StatusAutoReconciled: return "autoReconciled"; case AB_Transaction_StatusManuallyReconciled: return "manuallyReconciled"; case AB_Transaction_StatusRevoked: return "revoked"; case AB_Transaction_StatusAborted: return "aborted"; case AB_Transaction_StatusError: return "error"; case AB_Transaction_StatusUnknown: default: return "unknown"; } } const char *AB_Transaction_Period_toString(AB_TRANSACTION_PERIOD p_i) { switch(p_i) { case AB_Transaction_PeriodNone: return "none"; case AB_Transaction_PeriodMonthly: return "monthly"; case AB_Transaction_PeriodWeekly: return "weekly"; case AB_Transaction_PeriodUnknown: default: return "unknown"; } } const char *AB_Transaction_Charge_toString(AB_TRANSACTION_CHARGE p_i) { switch(p_i) { case AB_Transaction_ChargeNobody: return "nobody"; case AB_Transaction_ChargeLocal: return "local"; case AB_Transaction_ChargeRemote: return "remote"; case AB_Transaction_ChargeShare: return "share"; case AB_Transaction_ChargeUnknown: default: return "unknown"; } } const char *AB_Transaction_Sequence_toString(AB_TRANSACTION_SEQUENCE p_i) { switch(p_i) { case AB_Transaction_SequenceOnce: return "once"; case AB_Transaction_SequenceFirst: return "first"; case AB_Transaction_SequenceFollowing: return "following"; case AB_Transaction_SequenceFinal: return "final"; case AB_Transaction_SequenceUnknown: default: return "unknown"; } } const char *AB_Transaction_Ack_toString(AB_TRANSACTION_ACK p_i) { switch(p_i) { case AB_Transaction_AckNever: return "never"; case AB_Transaction_AckJobsWithAckCode: return "jobsWithAckCode"; case AB_Transaction_AckUnknown: default: return "unknown"; } } AB_TRANSACTION *AB_Transaction_new(void) { AB_TRANSACTION *p_struct; GWEN_NEW_OBJECT(AB_TRANSACTION, p_struct) p_struct->_refCount=1; GWEN_LIST_INIT(AB_TRANSACTION, p_struct) /* members */ p_struct->type=AB_Transaction_TypeUnknown; p_struct->subType=AB_Transaction_SubTypeNone; p_struct->command=AB_Transaction_CommandNone; p_struct->status=AB_Transaction_StatusUnknown; p_struct->uniqueAccountId=0; p_struct->acknowledge=AB_Transaction_AckNever; p_struct->uniqueId=0; p_struct->refUniqueId=0; p_struct->idForApplication=0; p_struct->stringIdForApplication=0; p_struct->sessionId=0; p_struct->groupId=0; p_struct->fiId=NULL; p_struct->localIban=NULL; p_struct->localBic=NULL; p_struct->localCountry=NULL; p_struct->localBankCode=NULL; p_struct->localBranchId=NULL; p_struct->localAccountNumber=NULL; p_struct->localSuffix=NULL; p_struct->localName=NULL; p_struct->remoteCountry=NULL; p_struct->remoteBankCode=NULL; p_struct->remoteBranchId=NULL; p_struct->remoteAccountNumber=NULL; p_struct->remoteSuffix=NULL; p_struct->remoteIban=NULL; p_struct->remoteBic=NULL; p_struct->remoteName=NULL; p_struct->date=NULL; p_struct->valutaDate=NULL; p_struct->value=AB_Value_new(); p_struct->fees=AB_Value_new(); p_struct->taxes=AB_Value_new(); p_struct->transactionCode=0; p_struct->transactionText=NULL; p_struct->transactionKey=NULL; p_struct->textKey=0; p_struct->primanota=NULL; p_struct->purpose=NULL; p_struct->category=NULL; p_struct->customerReference=NULL; p_struct->bankReference=NULL; p_struct->endToEndReference=NULL; p_struct->ultimateCreditor=NULL; p_struct->ultimateDebtor=NULL; p_struct->creditorSchemeId=NULL; p_struct->originatorId=NULL; p_struct->mandateId=NULL; p_struct->mandateDate=NULL; p_struct->mandateDebitorName=NULL; p_struct->originalCreditorSchemeId=NULL; p_struct->originalMandateId=NULL; p_struct->originalCreditorName=NULL; p_struct->sequence=AB_Transaction_SequenceUnknown; p_struct->charge=AB_Transaction_ChargeUnknown; p_struct->remoteAddrStreet=NULL; p_struct->remoteAddrZipcode=NULL; p_struct->remoteAddrCity=NULL; p_struct->remoteAddrPhone=NULL; p_struct->period=AB_Transaction_PeriodUnknown; p_struct->cycle=0; p_struct->executionDay=0; p_struct->firstDate=NULL; p_struct->lastDate=NULL; p_struct->nextDate=NULL; p_struct->unitId=NULL; p_struct->unitIdNameSpace=NULL; p_struct->tickerSymbol=NULL; p_struct->units=AB_Value_new(); p_struct->unitPriceValue=AB_Value_new(); p_struct->unitPriceDate=NULL; p_struct->commissionValue=AB_Value_new(); p_struct->estatementNumber=0; p_struct->estatementMaxEntries=0; p_struct->memo=NULL; p_struct->hash=NULL; /* virtual functions */ return p_struct; } void AB_Transaction_free(AB_TRANSACTION *p_struct) { if (p_struct) { assert(p_struct->_refCount); if (p_struct->_refCount==1) { GWEN_LIST_FINI(AB_TRANSACTION, p_struct) /* members */ free(p_struct->fiId); p_struct->fiId=NULL; free(p_struct->localIban); p_struct->localIban=NULL; free(p_struct->localBic); p_struct->localBic=NULL; free(p_struct->localCountry); p_struct->localCountry=NULL; free(p_struct->localBankCode); p_struct->localBankCode=NULL; free(p_struct->localBranchId); p_struct->localBranchId=NULL; free(p_struct->localAccountNumber); p_struct->localAccountNumber=NULL; free(p_struct->localSuffix); p_struct->localSuffix=NULL; free(p_struct->localName); p_struct->localName=NULL; free(p_struct->remoteCountry); p_struct->remoteCountry=NULL; free(p_struct->remoteBankCode); p_struct->remoteBankCode=NULL; free(p_struct->remoteBranchId); p_struct->remoteBranchId=NULL; free(p_struct->remoteAccountNumber); p_struct->remoteAccountNumber=NULL; free(p_struct->remoteSuffix); p_struct->remoteSuffix=NULL; free(p_struct->remoteIban); p_struct->remoteIban=NULL; free(p_struct->remoteBic); p_struct->remoteBic=NULL; free(p_struct->remoteName); p_struct->remoteName=NULL; GWEN_Date_free(p_struct->date); p_struct->date=NULL; GWEN_Date_free(p_struct->valutaDate); p_struct->valutaDate=NULL; AB_Value_free(p_struct->value); AB_Value_free(p_struct->fees); AB_Value_free(p_struct->taxes); free(p_struct->transactionText); p_struct->transactionText=NULL; free(p_struct->transactionKey); p_struct->transactionKey=NULL; free(p_struct->primanota); p_struct->primanota=NULL; free(p_struct->purpose); p_struct->purpose=NULL; free(p_struct->category); p_struct->category=NULL; free(p_struct->customerReference); p_struct->customerReference=NULL; free(p_struct->bankReference); p_struct->bankReference=NULL; free(p_struct->endToEndReference); p_struct->endToEndReference=NULL; free(p_struct->ultimateCreditor); p_struct->ultimateCreditor=NULL; free(p_struct->ultimateDebtor); p_struct->ultimateDebtor=NULL; free(p_struct->creditorSchemeId); p_struct->creditorSchemeId=NULL; free(p_struct->originatorId); p_struct->originatorId=NULL; free(p_struct->mandateId); p_struct->mandateId=NULL; GWEN_Date_free(p_struct->mandateDate); p_struct->mandateDate=NULL; free(p_struct->mandateDebitorName); p_struct->mandateDebitorName=NULL; free(p_struct->originalCreditorSchemeId); p_struct->originalCreditorSchemeId=NULL; free(p_struct->originalMandateId); p_struct->originalMandateId=NULL; free(p_struct->originalCreditorName); p_struct->originalCreditorName=NULL; free(p_struct->remoteAddrStreet); p_struct->remoteAddrStreet=NULL; free(p_struct->remoteAddrZipcode); p_struct->remoteAddrZipcode=NULL; free(p_struct->remoteAddrCity); p_struct->remoteAddrCity=NULL; free(p_struct->remoteAddrPhone); p_struct->remoteAddrPhone=NULL; GWEN_Date_free(p_struct->firstDate); p_struct->firstDate=NULL; GWEN_Date_free(p_struct->lastDate); p_struct->lastDate=NULL; GWEN_Date_free(p_struct->nextDate); p_struct->nextDate=NULL; free(p_struct->unitId); p_struct->unitId=NULL; free(p_struct->unitIdNameSpace); p_struct->unitIdNameSpace=NULL; free(p_struct->tickerSymbol); p_struct->tickerSymbol=NULL; AB_Value_free(p_struct->units); AB_Value_free(p_struct->unitPriceValue); GWEN_Date_free(p_struct->unitPriceDate); p_struct->unitPriceDate=NULL; AB_Value_free(p_struct->commissionValue); free(p_struct->memo); p_struct->memo=NULL; free(p_struct->hash); p_struct->hash=NULL; p_struct->_refCount=0; GWEN_FREE_OBJECT(p_struct); } else p_struct->_refCount--; } } void AB_Transaction_Attach(AB_TRANSACTION *p_struct) { assert(p_struct); assert(p_struct->_refCount); p_struct->_refCount++; } AB_TRANSACTION *AB_Transaction_dup(const AB_TRANSACTION *p_src) { AB_TRANSACTION *p_struct; assert(p_src); p_struct=AB_Transaction_new(); /* member "type" */ p_struct->type=p_src->type; /* member "subType" */ p_struct->subType=p_src->subType; /* member "command" */ p_struct->command=p_src->command; /* member "status" */ p_struct->status=p_src->status; /* member "uniqueAccountId" */ p_struct->uniqueAccountId=p_src->uniqueAccountId; /* member "acknowledge" */ p_struct->acknowledge=p_src->acknowledge; /* member "uniqueId" */ p_struct->uniqueId=p_src->uniqueId; /* member "refUniqueId" */ p_struct->refUniqueId=p_src->refUniqueId; /* member "idForApplication" */ p_struct->idForApplication=p_src->idForApplication; /* member "stringIdForApplication" */ if (p_src->stringIdForApplication) { p_struct->stringIdForApplication=strdup(p_src->stringIdForApplication); } /* member "sessionId" */ p_struct->sessionId=p_src->sessionId; /* member "groupId" */ p_struct->groupId=p_src->groupId; /* member "fiId" */ if (p_struct->fiId) { free(p_struct->fiId); p_struct->fiId=NULL; p_struct->fiId=NULL; } if (p_src->fiId) { p_struct->fiId=strdup(p_src->fiId); } /* member "localIban" */ if (p_struct->localIban) { free(p_struct->localIban); p_struct->localIban=NULL; p_struct->localIban=NULL; } if (p_src->localIban) { p_struct->localIban=strdup(p_src->localIban); } /* member "localBic" */ if (p_struct->localBic) { free(p_struct->localBic); p_struct->localBic=NULL; p_struct->localBic=NULL; } if (p_src->localBic) { p_struct->localBic=strdup(p_src->localBic); } /* member "localCountry" */ if (p_struct->localCountry) { free(p_struct->localCountry); p_struct->localCountry=NULL; p_struct->localCountry=NULL; } if (p_src->localCountry) { p_struct->localCountry=strdup(p_src->localCountry); } /* member "localBankCode" */ if (p_struct->localBankCode) { free(p_struct->localBankCode); p_struct->localBankCode=NULL; p_struct->localBankCode=NULL; } if (p_src->localBankCode) { p_struct->localBankCode=strdup(p_src->localBankCode); } /* member "localBranchId" */ if (p_struct->localBranchId) { free(p_struct->localBranchId); p_struct->localBranchId=NULL; p_struct->localBranchId=NULL; } if (p_src->localBranchId) { p_struct->localBranchId=strdup(p_src->localBranchId); } /* member "localAccountNumber" */ if (p_struct->localAccountNumber) { free(p_struct->localAccountNumber); p_struct->localAccountNumber=NULL; p_struct->localAccountNumber=NULL; } if (p_src->localAccountNumber) { p_struct->localAccountNumber=strdup(p_src->localAccountNumber); } /* member "localSuffix" */ if (p_struct->localSuffix) { free(p_struct->localSuffix); p_struct->localSuffix=NULL; p_struct->localSuffix=NULL; } if (p_src->localSuffix) { p_struct->localSuffix=strdup(p_src->localSuffix); } /* member "localName" */ if (p_struct->localName) { free(p_struct->localName); p_struct->localName=NULL; p_struct->localName=NULL; } if (p_src->localName) { p_struct->localName=strdup(p_src->localName); } /* member "remoteCountry" */ if (p_struct->remoteCountry) { free(p_struct->remoteCountry); p_struct->remoteCountry=NULL; p_struct->remoteCountry=NULL; } if (p_src->remoteCountry) { p_struct->remoteCountry=strdup(p_src->remoteCountry); } /* member "remoteBankCode" */ if (p_struct->remoteBankCode) { free(p_struct->remoteBankCode); p_struct->remoteBankCode=NULL; p_struct->remoteBankCode=NULL; } if (p_src->remoteBankCode) { p_struct->remoteBankCode=strdup(p_src->remoteBankCode); } /* member "remoteBranchId" */ if (p_struct->remoteBranchId) { free(p_struct->remoteBranchId); p_struct->remoteBranchId=NULL; p_struct->remoteBranchId=NULL; } if (p_src->remoteBranchId) { p_struct->remoteBranchId=strdup(p_src->remoteBranchId); } /* member "remoteAccountNumber" */ if (p_struct->remoteAccountNumber) { free(p_struct->remoteAccountNumber); p_struct->remoteAccountNumber=NULL; p_struct->remoteAccountNumber=NULL; } if (p_src->remoteAccountNumber) { p_struct->remoteAccountNumber=strdup(p_src->remoteAccountNumber); } /* member "remoteSuffix" */ if (p_struct->remoteSuffix) { free(p_struct->remoteSuffix); p_struct->remoteSuffix=NULL; p_struct->remoteSuffix=NULL; } if (p_src->remoteSuffix) { p_struct->remoteSuffix=strdup(p_src->remoteSuffix); } /* member "remoteIban" */ if (p_struct->remoteIban) { free(p_struct->remoteIban); p_struct->remoteIban=NULL; p_struct->remoteIban=NULL; } if (p_src->remoteIban) { p_struct->remoteIban=strdup(p_src->remoteIban); } /* member "remoteBic" */ if (p_struct->remoteBic) { free(p_struct->remoteBic); p_struct->remoteBic=NULL; p_struct->remoteBic=NULL; } if (p_src->remoteBic) { p_struct->remoteBic=strdup(p_src->remoteBic); } /* member "remoteName" */ if (p_struct->remoteName) { free(p_struct->remoteName); p_struct->remoteName=NULL; p_struct->remoteName=NULL; } if (p_src->remoteName) { p_struct->remoteName=strdup(p_src->remoteName); } /* member "date" */ if (p_struct->date) { GWEN_Date_free(p_struct->date); p_struct->date=NULL; p_struct->date=NULL; } if (p_src->date) { p_struct->date=GWEN_Date_dup(p_src->date); } /* member "valutaDate" */ if (p_struct->valutaDate) { GWEN_Date_free(p_struct->valutaDate); p_struct->valutaDate=NULL; p_struct->valutaDate=NULL; } if (p_src->valutaDate) { p_struct->valutaDate=GWEN_Date_dup(p_src->valutaDate); } /* member "value" */ if (p_struct->value) { AB_Value_free(p_struct->value); p_struct->value=NULL; } if (p_src->value) { p_struct->value=AB_Value_dup(p_src->value); } /* member "fees" */ if (p_struct->fees) { AB_Value_free(p_struct->fees); p_struct->fees=NULL; } if (p_src->fees) { p_struct->fees=AB_Value_dup(p_src->fees); } /* member "taxes" */ if (p_struct->taxes) { AB_Value_free(p_struct->taxes); p_struct->taxes=NULL; } if (p_src->taxes) { p_struct->taxes=AB_Value_dup(p_src->taxes); } /* member "transactionCode" */ p_struct->transactionCode=p_src->transactionCode; /* member "transactionText" */ if (p_struct->transactionText) { free(p_struct->transactionText); p_struct->transactionText=NULL; p_struct->transactionText=NULL; } if (p_src->transactionText) { p_struct->transactionText=strdup(p_src->transactionText); } /* member "transactionKey" */ if (p_struct->transactionKey) { free(p_struct->transactionKey); p_struct->transactionKey=NULL; p_struct->transactionKey=NULL; } if (p_src->transactionKey) { p_struct->transactionKey=strdup(p_src->transactionKey); } /* member "textKey" */ p_struct->textKey=p_src->textKey; /* member "primanota" */ if (p_struct->primanota) { free(p_struct->primanota); p_struct->primanota=NULL; p_struct->primanota=NULL; } if (p_src->primanota) { p_struct->primanota=strdup(p_src->primanota); } /* member "purpose" */ if (p_struct->purpose) { free(p_struct->purpose); p_struct->purpose=NULL; p_struct->purpose=NULL; } if (p_src->purpose) { p_struct->purpose=strdup(p_src->purpose); } /* member "category" */ if (p_struct->category) { free(p_struct->category); p_struct->category=NULL; p_struct->category=NULL; } if (p_src->category) { p_struct->category=strdup(p_src->category); } /* member "customerReference" */ if (p_struct->customerReference) { free(p_struct->customerReference); p_struct->customerReference=NULL; p_struct->customerReference=NULL; } if (p_src->customerReference) { p_struct->customerReference=strdup(p_src->customerReference); } /* member "bankReference" */ if (p_struct->bankReference) { free(p_struct->bankReference); p_struct->bankReference=NULL; p_struct->bankReference=NULL; } if (p_src->bankReference) { p_struct->bankReference=strdup(p_src->bankReference); } /* member "endToEndReference" */ if (p_struct->endToEndReference) { free(p_struct->endToEndReference); p_struct->endToEndReference=NULL; p_struct->endToEndReference=NULL; } if (p_src->endToEndReference) { p_struct->endToEndReference=strdup(p_src->endToEndReference); } /* member "ultimateCreditor" */ if (p_struct->ultimateCreditor) { free(p_struct->ultimateCreditor); p_struct->ultimateCreditor=NULL; p_struct->ultimateCreditor=NULL; } if (p_src->ultimateCreditor) { p_struct->ultimateCreditor=strdup(p_src->ultimateCreditor); } /* member "ultimateDebtor" */ if (p_struct->ultimateDebtor) { free(p_struct->ultimateDebtor); p_struct->ultimateDebtor=NULL; p_struct->ultimateDebtor=NULL; } if (p_src->ultimateDebtor) { p_struct->ultimateDebtor=strdup(p_src->ultimateDebtor); } /* member "creditorSchemeId" */ if (p_struct->creditorSchemeId) { free(p_struct->creditorSchemeId); p_struct->creditorSchemeId=NULL; p_struct->creditorSchemeId=NULL; } if (p_src->creditorSchemeId) { p_struct->creditorSchemeId=strdup(p_src->creditorSchemeId); } /* member "originatorId" */ if (p_struct->originatorId) { free(p_struct->originatorId); p_struct->originatorId=NULL; p_struct->originatorId=NULL; } if (p_src->originatorId) { p_struct->originatorId=strdup(p_src->originatorId); } /* member "mandateId" */ if (p_struct->mandateId) { free(p_struct->mandateId); p_struct->mandateId=NULL; p_struct->mandateId=NULL; } if (p_src->mandateId) { p_struct->mandateId=strdup(p_src->mandateId); } /* member "mandateDate" */ if (p_struct->mandateDate) { GWEN_Date_free(p_struct->mandateDate); p_struct->mandateDate=NULL; p_struct->mandateDate=NULL; } if (p_src->mandateDate) { p_struct->mandateDate=GWEN_Date_dup(p_src->mandateDate); } /* member "mandateDebitorName" */ if (p_struct->mandateDebitorName) { free(p_struct->mandateDebitorName); p_struct->mandateDebitorName=NULL; p_struct->mandateDebitorName=NULL; } if (p_src->mandateDebitorName) { p_struct->mandateDebitorName=strdup(p_src->mandateDebitorName); } /* member "originalCreditorSchemeId" */ if (p_struct->originalCreditorSchemeId) { free(p_struct->originalCreditorSchemeId); p_struct->originalCreditorSchemeId=NULL; p_struct->originalCreditorSchemeId=NULL; } if (p_src->originalCreditorSchemeId) { p_struct->originalCreditorSchemeId=strdup(p_src->originalCreditorSchemeId); } /* member "originalMandateId" */ if (p_struct->originalMandateId) { free(p_struct->originalMandateId); p_struct->originalMandateId=NULL; p_struct->originalMandateId=NULL; } if (p_src->originalMandateId) { p_struct->originalMandateId=strdup(p_src->originalMandateId); } /* member "originalCreditorName" */ if (p_struct->originalCreditorName) { free(p_struct->originalCreditorName); p_struct->originalCreditorName=NULL; p_struct->originalCreditorName=NULL; } if (p_src->originalCreditorName) { p_struct->originalCreditorName=strdup(p_src->originalCreditorName); } /* member "sequence" */ p_struct->sequence=p_src->sequence; /* member "charge" */ p_struct->charge=p_src->charge; /* member "remoteAddrStreet" */ if (p_struct->remoteAddrStreet) { free(p_struct->remoteAddrStreet); p_struct->remoteAddrStreet=NULL; p_struct->remoteAddrStreet=NULL; } if (p_src->remoteAddrStreet) { p_struct->remoteAddrStreet=strdup(p_src->remoteAddrStreet); } /* member "remoteAddrZipcode" */ if (p_struct->remoteAddrZipcode) { free(p_struct->remoteAddrZipcode); p_struct->remoteAddrZipcode=NULL; p_struct->remoteAddrZipcode=NULL; } if (p_src->remoteAddrZipcode) { p_struct->remoteAddrZipcode=strdup(p_src->remoteAddrZipcode); } /* member "remoteAddrCity" */ if (p_struct->remoteAddrCity) { free(p_struct->remoteAddrCity); p_struct->remoteAddrCity=NULL; p_struct->remoteAddrCity=NULL; } if (p_src->remoteAddrCity) { p_struct->remoteAddrCity=strdup(p_src->remoteAddrCity); } /* member "remoteAddrPhone" */ if (p_struct->remoteAddrPhone) { free(p_struct->remoteAddrPhone); p_struct->remoteAddrPhone=NULL; p_struct->remoteAddrPhone=NULL; } if (p_src->remoteAddrPhone) { p_struct->remoteAddrPhone=strdup(p_src->remoteAddrPhone); } /* member "period" */ p_struct->period=p_src->period; /* member "cycle" */ p_struct->cycle=p_src->cycle; /* member "executionDay" */ p_struct->executionDay=p_src->executionDay; /* member "firstDate" */ if (p_struct->firstDate) { GWEN_Date_free(p_struct->firstDate); p_struct->firstDate=NULL; p_struct->firstDate=NULL; } if (p_src->firstDate) { p_struct->firstDate=GWEN_Date_dup(p_src->firstDate); } /* member "lastDate" */ if (p_struct->lastDate) { GWEN_Date_free(p_struct->lastDate); p_struct->lastDate=NULL; p_struct->lastDate=NULL; } if (p_src->lastDate) { p_struct->lastDate=GWEN_Date_dup(p_src->lastDate); } /* member "nextDate" */ if (p_struct->nextDate) { GWEN_Date_free(p_struct->nextDate); p_struct->nextDate=NULL; p_struct->nextDate=NULL; } if (p_src->nextDate) { p_struct->nextDate=GWEN_Date_dup(p_src->nextDate); } /* member "unitId" */ if (p_struct->unitId) { free(p_struct->unitId); p_struct->unitId=NULL; p_struct->unitId=NULL; } if (p_src->unitId) { p_struct->unitId=strdup(p_src->unitId); } /* member "unitIdNameSpace" */ if (p_struct->unitIdNameSpace) { free(p_struct->unitIdNameSpace); p_struct->unitIdNameSpace=NULL; p_struct->unitIdNameSpace=NULL; } if (p_src->unitIdNameSpace) { p_struct->unitIdNameSpace=strdup(p_src->unitIdNameSpace); } /* member "tickerSymbol" */ if (p_struct->tickerSymbol) { free(p_struct->tickerSymbol); p_struct->tickerSymbol=NULL; p_struct->tickerSymbol=NULL; } if (p_src->tickerSymbol) { p_struct->tickerSymbol=strdup(p_src->tickerSymbol); } /* member "units" */ if (p_struct->units) { AB_Value_free(p_struct->units); p_struct->units=NULL; } if (p_src->units) { p_struct->units=AB_Value_dup(p_src->units); } /* member "unitPriceValue" */ if (p_struct->unitPriceValue) { AB_Value_free(p_struct->unitPriceValue); p_struct->unitPriceValue=NULL; } if (p_src->unitPriceValue) { p_struct->unitPriceValue=AB_Value_dup(p_src->unitPriceValue); } /* member "unitPriceDate" */ if (p_struct->unitPriceDate) { GWEN_Date_free(p_struct->unitPriceDate); p_struct->unitPriceDate=NULL; p_struct->unitPriceDate=NULL; } if (p_src->unitPriceDate) { p_struct->unitPriceDate=GWEN_Date_dup(p_src->unitPriceDate); } /* member "commissionValue" */ if (p_struct->commissionValue) { AB_Value_free(p_struct->commissionValue); p_struct->commissionValue=NULL; } if (p_src->commissionValue) { p_struct->commissionValue=AB_Value_dup(p_src->commissionValue); } /* member "estatementNumber" */ p_struct->estatementNumber=p_src->estatementNumber; /* member "estatementMaxEntries" */ p_struct->estatementMaxEntries=p_src->estatementMaxEntries; /* member "memo" */ if (p_struct->memo) { free(p_struct->memo); p_struct->memo=NULL; p_struct->memo=NULL; } if (p_src->memo) { p_struct->memo=strdup(p_src->memo); } /* member "hash" */ if (p_struct->hash) { free(p_struct->hash); p_struct->hash=NULL; p_struct->hash=NULL; } if (p_src->hash) { p_struct->hash=strdup(p_src->hash); } return p_struct; } AB_TRANSACTION *AB_Transaction_copy(AB_TRANSACTION *p_struct, const AB_TRANSACTION *p_src) { assert(p_struct); assert(p_src); /* member "type" */ p_struct->type=p_src->type; /* member "subType" */ p_struct->subType=p_src->subType; /* member "command" */ p_struct->command=p_src->command; /* member "status" */ p_struct->status=p_src->status; /* member "uniqueAccountId" */ p_struct->uniqueAccountId=p_src->uniqueAccountId; /* member "acknowledge" */ p_struct->acknowledge=p_src->acknowledge; /* member "uniqueId" */ p_struct->uniqueId=p_src->uniqueId; /* member "refUniqueId" */ p_struct->refUniqueId=p_src->refUniqueId; /* member "idForApplication" */ p_struct->idForApplication=p_src->idForApplication; /* member "stringIdForApplication" */ if (p_src->stringIdForApplication) { p_struct->stringIdForApplication=strdup(p_src->stringIdForApplication); } /* member "sessionId" */ p_struct->sessionId=p_src->sessionId; /* member "groupId" */ p_struct->groupId=p_src->groupId; /* member "fiId" */ if (p_struct->fiId) { free(p_struct->fiId); p_struct->fiId=NULL; p_struct->fiId=NULL; } if (p_src->fiId) { p_struct->fiId=strdup(p_src->fiId); } /* member "localIban" */ if (p_struct->localIban) { free(p_struct->localIban); p_struct->localIban=NULL; p_struct->localIban=NULL; } if (p_src->localIban) { p_struct->localIban=strdup(p_src->localIban); } /* member "localBic" */ if (p_struct->localBic) { free(p_struct->localBic); p_struct->localBic=NULL; p_struct->localBic=NULL; } if (p_src->localBic) { p_struct->localBic=strdup(p_src->localBic); } /* member "localCountry" */ if (p_struct->localCountry) { free(p_struct->localCountry); p_struct->localCountry=NULL; p_struct->localCountry=NULL; } if (p_src->localCountry) { p_struct->localCountry=strdup(p_src->localCountry); } /* member "localBankCode" */ if (p_struct->localBankCode) { free(p_struct->localBankCode); p_struct->localBankCode=NULL; p_struct->localBankCode=NULL; } if (p_src->localBankCode) { p_struct->localBankCode=strdup(p_src->localBankCode); } /* member "localBranchId" */ if (p_struct->localBranchId) { free(p_struct->localBranchId); p_struct->localBranchId=NULL; p_struct->localBranchId=NULL; } if (p_src->localBranchId) { p_struct->localBranchId=strdup(p_src->localBranchId); } /* member "localAccountNumber" */ if (p_struct->localAccountNumber) { free(p_struct->localAccountNumber); p_struct->localAccountNumber=NULL; p_struct->localAccountNumber=NULL; } if (p_src->localAccountNumber) { p_struct->localAccountNumber=strdup(p_src->localAccountNumber); } /* member "localSuffix" */ if (p_struct->localSuffix) { free(p_struct->localSuffix); p_struct->localSuffix=NULL; p_struct->localSuffix=NULL; } if (p_src->localSuffix) { p_struct->localSuffix=strdup(p_src->localSuffix); } /* member "localName" */ if (p_struct->localName) { free(p_struct->localName); p_struct->localName=NULL; p_struct->localName=NULL; } if (p_src->localName) { p_struct->localName=strdup(p_src->localName); } /* member "remoteCountry" */ if (p_struct->remoteCountry) { free(p_struct->remoteCountry); p_struct->remoteCountry=NULL; p_struct->remoteCountry=NULL; } if (p_src->remoteCountry) { p_struct->remoteCountry=strdup(p_src->remoteCountry); } /* member "remoteBankCode" */ if (p_struct->remoteBankCode) { free(p_struct->remoteBankCode); p_struct->remoteBankCode=NULL; p_struct->remoteBankCode=NULL; } if (p_src->remoteBankCode) { p_struct->remoteBankCode=strdup(p_src->remoteBankCode); } /* member "remoteBranchId" */ if (p_struct->remoteBranchId) { free(p_struct->remoteBranchId); p_struct->remoteBranchId=NULL; p_struct->remoteBranchId=NULL; } if (p_src->remoteBranchId) { p_struct->remoteBranchId=strdup(p_src->remoteBranchId); } /* member "remoteAccountNumber" */ if (p_struct->remoteAccountNumber) { free(p_struct->remoteAccountNumber); p_struct->remoteAccountNumber=NULL; p_struct->remoteAccountNumber=NULL; } if (p_src->remoteAccountNumber) { p_struct->remoteAccountNumber=strdup(p_src->remoteAccountNumber); } /* member "remoteSuffix" */ if (p_struct->remoteSuffix) { free(p_struct->remoteSuffix); p_struct->remoteSuffix=NULL; p_struct->remoteSuffix=NULL; } if (p_src->remoteSuffix) { p_struct->remoteSuffix=strdup(p_src->remoteSuffix); } /* member "remoteIban" */ if (p_struct->remoteIban) { free(p_struct->remoteIban); p_struct->remoteIban=NULL; p_struct->remoteIban=NULL; } if (p_src->remoteIban) { p_struct->remoteIban=strdup(p_src->remoteIban); } /* member "remoteBic" */ if (p_struct->remoteBic) { free(p_struct->remoteBic); p_struct->remoteBic=NULL; p_struct->remoteBic=NULL; } if (p_src->remoteBic) { p_struct->remoteBic=strdup(p_src->remoteBic); } /* member "remoteName" */ if (p_struct->remoteName) { free(p_struct->remoteName); p_struct->remoteName=NULL; p_struct->remoteName=NULL; } if (p_src->remoteName) { p_struct->remoteName=strdup(p_src->remoteName); } /* member "date" */ if (p_struct->date) { GWEN_Date_free(p_struct->date); p_struct->date=NULL; p_struct->date=NULL; } if (p_src->date) { p_struct->date=GWEN_Date_dup(p_src->date); } /* member "valutaDate" */ if (p_struct->valutaDate) { GWEN_Date_free(p_struct->valutaDate); p_struct->valutaDate=NULL; p_struct->valutaDate=NULL; } if (p_src->valutaDate) { p_struct->valutaDate=GWEN_Date_dup(p_src->valutaDate); } /* member "value" */ if (p_struct->value) { AB_Value_free(p_struct->value); p_struct->value=NULL; } if (p_src->value) { p_struct->value=AB_Value_dup(p_src->value); } /* member "fees" */ if (p_struct->fees) { AB_Value_free(p_struct->fees); p_struct->fees=NULL; } if (p_src->fees) { p_struct->fees=AB_Value_dup(p_src->fees); } /* member "taxes" */ if (p_struct->taxes) { AB_Value_free(p_struct->taxes); p_struct->taxes=NULL; } if (p_src->taxes) { p_struct->taxes=AB_Value_dup(p_src->taxes); } /* member "transactionCode" */ p_struct->transactionCode=p_src->transactionCode; /* member "transactionText" */ if (p_struct->transactionText) { free(p_struct->transactionText); p_struct->transactionText=NULL; p_struct->transactionText=NULL; } if (p_src->transactionText) { p_struct->transactionText=strdup(p_src->transactionText); } /* member "transactionKey" */ if (p_struct->transactionKey) { free(p_struct->transactionKey); p_struct->transactionKey=NULL; p_struct->transactionKey=NULL; } if (p_src->transactionKey) { p_struct->transactionKey=strdup(p_src->transactionKey); } /* member "textKey" */ p_struct->textKey=p_src->textKey; /* member "primanota" */ if (p_struct->primanota) { free(p_struct->primanota); p_struct->primanota=NULL; p_struct->primanota=NULL; } if (p_src->primanota) { p_struct->primanota=strdup(p_src->primanota); } /* member "purpose" */ if (p_struct->purpose) { free(p_struct->purpose); p_struct->purpose=NULL; p_struct->purpose=NULL; } if (p_src->purpose) { p_struct->purpose=strdup(p_src->purpose); } /* member "category" */ if (p_struct->category) { free(p_struct->category); p_struct->category=NULL; p_struct->category=NULL; } if (p_src->category) { p_struct->category=strdup(p_src->category); } /* member "customerReference" */ if (p_struct->customerReference) { free(p_struct->customerReference); p_struct->customerReference=NULL; p_struct->customerReference=NULL; } if (p_src->customerReference) { p_struct->customerReference=strdup(p_src->customerReference); } /* member "bankReference" */ if (p_struct->bankReference) { free(p_struct->bankReference); p_struct->bankReference=NULL; p_struct->bankReference=NULL; } if (p_src->bankReference) { p_struct->bankReference=strdup(p_src->bankReference); } /* member "endToEndReference" */ if (p_struct->endToEndReference) { free(p_struct->endToEndReference); p_struct->endToEndReference=NULL; p_struct->endToEndReference=NULL; } if (p_src->endToEndReference) { p_struct->endToEndReference=strdup(p_src->endToEndReference); } /* member "ultimateCreditor" */ if (p_struct->ultimateCreditor) { free(p_struct->ultimateCreditor); p_struct->ultimateCreditor=NULL; p_struct->ultimateCreditor=NULL; } if (p_src->ultimateCreditor) { p_struct->ultimateCreditor=strdup(p_src->ultimateCreditor); } /* member "ultimateDebtor" */ if (p_struct->ultimateDebtor) { free(p_struct->ultimateDebtor); p_struct->ultimateDebtor=NULL; p_struct->ultimateDebtor=NULL; } if (p_src->ultimateDebtor) { p_struct->ultimateDebtor=strdup(p_src->ultimateDebtor); } /* member "creditorSchemeId" */ if (p_struct->creditorSchemeId) { free(p_struct->creditorSchemeId); p_struct->creditorSchemeId=NULL; p_struct->creditorSchemeId=NULL; } if (p_src->creditorSchemeId) { p_struct->creditorSchemeId=strdup(p_src->creditorSchemeId); } /* member "originatorId" */ if (p_struct->originatorId) { free(p_struct->originatorId); p_struct->originatorId=NULL; p_struct->originatorId=NULL; } if (p_src->originatorId) { p_struct->originatorId=strdup(p_src->originatorId); } /* member "mandateId" */ if (p_struct->mandateId) { free(p_struct->mandateId); p_struct->mandateId=NULL; p_struct->mandateId=NULL; } if (p_src->mandateId) { p_struct->mandateId=strdup(p_src->mandateId); } /* member "mandateDate" */ if (p_struct->mandateDate) { GWEN_Date_free(p_struct->mandateDate); p_struct->mandateDate=NULL; p_struct->mandateDate=NULL; } if (p_src->mandateDate) { p_struct->mandateDate=GWEN_Date_dup(p_src->mandateDate); } /* member "mandateDebitorName" */ if (p_struct->mandateDebitorName) { free(p_struct->mandateDebitorName); p_struct->mandateDebitorName=NULL; p_struct->mandateDebitorName=NULL; } if (p_src->mandateDebitorName) { p_struct->mandateDebitorName=strdup(p_src->mandateDebitorName); } /* member "originalCreditorSchemeId" */ if (p_struct->originalCreditorSchemeId) { free(p_struct->originalCreditorSchemeId); p_struct->originalCreditorSchemeId=NULL; p_struct->originalCreditorSchemeId=NULL; } if (p_src->originalCreditorSchemeId) { p_struct->originalCreditorSchemeId=strdup(p_src->originalCreditorSchemeId); } /* member "originalMandateId" */ if (p_struct->originalMandateId) { free(p_struct->originalMandateId); p_struct->originalMandateId=NULL; p_struct->originalMandateId=NULL; } if (p_src->originalMandateId) { p_struct->originalMandateId=strdup(p_src->originalMandateId); } /* member "originalCreditorName" */ if (p_struct->originalCreditorName) { free(p_struct->originalCreditorName); p_struct->originalCreditorName=NULL; p_struct->originalCreditorName=NULL; } if (p_src->originalCreditorName) { p_struct->originalCreditorName=strdup(p_src->originalCreditorName); } /* member "sequence" */ p_struct->sequence=p_src->sequence; /* member "charge" */ p_struct->charge=p_src->charge; /* member "remoteAddrStreet" */ if (p_struct->remoteAddrStreet) { free(p_struct->remoteAddrStreet); p_struct->remoteAddrStreet=NULL; p_struct->remoteAddrStreet=NULL; } if (p_src->remoteAddrStreet) { p_struct->remoteAddrStreet=strdup(p_src->remoteAddrStreet); } /* member "remoteAddrZipcode" */ if (p_struct->remoteAddrZipcode) { free(p_struct->remoteAddrZipcode); p_struct->remoteAddrZipcode=NULL; p_struct->remoteAddrZipcode=NULL; } if (p_src->remoteAddrZipcode) { p_struct->remoteAddrZipcode=strdup(p_src->remoteAddrZipcode); } /* member "remoteAddrCity" */ if (p_struct->remoteAddrCity) { free(p_struct->remoteAddrCity); p_struct->remoteAddrCity=NULL; p_struct->remoteAddrCity=NULL; } if (p_src->remoteAddrCity) { p_struct->remoteAddrCity=strdup(p_src->remoteAddrCity); } /* member "remoteAddrPhone" */ if (p_struct->remoteAddrPhone) { free(p_struct->remoteAddrPhone); p_struct->remoteAddrPhone=NULL; p_struct->remoteAddrPhone=NULL; } if (p_src->remoteAddrPhone) { p_struct->remoteAddrPhone=strdup(p_src->remoteAddrPhone); } /* member "period" */ p_struct->period=p_src->period; /* member "cycle" */ p_struct->cycle=p_src->cycle; /* member "executionDay" */ p_struct->executionDay=p_src->executionDay; /* member "firstDate" */ if (p_struct->firstDate) { GWEN_Date_free(p_struct->firstDate); p_struct->firstDate=NULL; p_struct->firstDate=NULL; } if (p_src->firstDate) { p_struct->firstDate=GWEN_Date_dup(p_src->firstDate); } /* member "lastDate" */ if (p_struct->lastDate) { GWEN_Date_free(p_struct->lastDate); p_struct->lastDate=NULL; p_struct->lastDate=NULL; } if (p_src->lastDate) { p_struct->lastDate=GWEN_Date_dup(p_src->lastDate); } /* member "nextDate" */ if (p_struct->nextDate) { GWEN_Date_free(p_struct->nextDate); p_struct->nextDate=NULL; p_struct->nextDate=NULL; } if (p_src->nextDate) { p_struct->nextDate=GWEN_Date_dup(p_src->nextDate); } /* member "unitId" */ if (p_struct->unitId) { free(p_struct->unitId); p_struct->unitId=NULL; p_struct->unitId=NULL; } if (p_src->unitId) { p_struct->unitId=strdup(p_src->unitId); } /* member "unitIdNameSpace" */ if (p_struct->unitIdNameSpace) { free(p_struct->unitIdNameSpace); p_struct->unitIdNameSpace=NULL; p_struct->unitIdNameSpace=NULL; } if (p_src->unitIdNameSpace) { p_struct->unitIdNameSpace=strdup(p_src->unitIdNameSpace); } /* member "tickerSymbol" */ if (p_struct->tickerSymbol) { free(p_struct->tickerSymbol); p_struct->tickerSymbol=NULL; p_struct->tickerSymbol=NULL; } if (p_src->tickerSymbol) { p_struct->tickerSymbol=strdup(p_src->tickerSymbol); } /* member "units" */ if (p_struct->units) { AB_Value_free(p_struct->units); p_struct->units=NULL; } if (p_src->units) { p_struct->units=AB_Value_dup(p_src->units); } /* member "unitPriceValue" */ if (p_struct->unitPriceValue) { AB_Value_free(p_struct->unitPriceValue); p_struct->unitPriceValue=NULL; } if (p_src->unitPriceValue) { p_struct->unitPriceValue=AB_Value_dup(p_src->unitPriceValue); } /* member "unitPriceDate" */ if (p_struct->unitPriceDate) { GWEN_Date_free(p_struct->unitPriceDate); p_struct->unitPriceDate=NULL; p_struct->unitPriceDate=NULL; } if (p_src->unitPriceDate) { p_struct->unitPriceDate=GWEN_Date_dup(p_src->unitPriceDate); } /* member "commissionValue" */ if (p_struct->commissionValue) { AB_Value_free(p_struct->commissionValue); p_struct->commissionValue=NULL; } if (p_src->commissionValue) { p_struct->commissionValue=AB_Value_dup(p_src->commissionValue); } /* member "estatementNumber" */ p_struct->estatementNumber=p_src->estatementNumber; /* member "estatementMaxEntries" */ p_struct->estatementMaxEntries=p_src->estatementMaxEntries; /* member "memo" */ if (p_struct->memo) { free(p_struct->memo); p_struct->memo=NULL; p_struct->memo=NULL; } if (p_src->memo) { p_struct->memo=strdup(p_src->memo); } /* member "hash" */ if (p_struct->hash) { free(p_struct->hash); p_struct->hash=NULL; p_struct->hash=NULL; } if (p_src->hash) { p_struct->hash=strdup(p_src->hash); } return p_struct; } AB_TRANSACTION_TYPE AB_Transaction_GetType(const AB_TRANSACTION *p_struct){ assert(p_struct); return p_struct->type; } AB_TRANSACTION_SUBTYPE AB_Transaction_GetSubType(const AB_TRANSACTION *p_struct){ assert(p_struct); return p_struct->subType; } AB_TRANSACTION_COMMAND AB_Transaction_GetCommand(const AB_TRANSACTION *p_struct){ assert(p_struct); return p_struct->command; } AB_TRANSACTION_STATUS AB_Transaction_GetStatus(const AB_TRANSACTION *p_struct){ assert(p_struct); return p_struct->status; } uint32_t AB_Transaction_GetUniqueAccountId(const AB_TRANSACTION *p_struct){ assert(p_struct); return p_struct->uniqueAccountId; } AB_TRANSACTION_ACK AB_Transaction_GetAcknowledge(const AB_TRANSACTION *p_struct){ assert(p_struct); return p_struct->acknowledge; } uint32_t AB_Transaction_GetUniqueId(const AB_TRANSACTION *p_struct){ assert(p_struct); return p_struct->uniqueId; } uint32_t AB_Transaction_GetRefUniqueId(const AB_TRANSACTION *p_struct){ assert(p_struct); return p_struct->refUniqueId; } uint32_t AB_Transaction_GetIdForApplication(const AB_TRANSACTION *p_struct){ assert(p_struct); return p_struct->idForApplication; } const char *AB_Transaction_GetStringIdForApplication(const AB_TRANSACTION *p_struct){ assert(p_struct); return p_struct->stringIdForApplication; } uint32_t AB_Transaction_GetSessionId(const AB_TRANSACTION *p_struct){ assert(p_struct); return p_struct->sessionId; } uint32_t AB_Transaction_GetGroupId(const AB_TRANSACTION *p_struct){ assert(p_struct); return p_struct->groupId; } const char *AB_Transaction_GetFiId(const AB_TRANSACTION *p_struct){ assert(p_struct); return p_struct->fiId; } const char *AB_Transaction_GetLocalIban(const AB_TRANSACTION *p_struct){ assert(p_struct); return p_struct->localIban; } const char *AB_Transaction_GetLocalBic(const AB_TRANSACTION *p_struct){ assert(p_struct); return p_struct->localBic; } const char *AB_Transaction_GetLocalCountry(const AB_TRANSACTION *p_struct){ assert(p_struct); return p_struct->localCountry; } const char *AB_Transaction_GetLocalBankCode(const AB_TRANSACTION *p_struct){ assert(p_struct); return p_struct->localBankCode; } const char *AB_Transaction_GetLocalBranchId(const AB_TRANSACTION *p_struct){ assert(p_struct); return p_struct->localBranchId; } const char *AB_Transaction_GetLocalAccountNumber(const AB_TRANSACTION *p_struct){ assert(p_struct); return p_struct->localAccountNumber; } const char *AB_Transaction_GetLocalSuffix(const AB_TRANSACTION *p_struct){ assert(p_struct); return p_struct->localSuffix; } const char *AB_Transaction_GetLocalName(const AB_TRANSACTION *p_struct){ assert(p_struct); return p_struct->localName; } const char *AB_Transaction_GetRemoteCountry(const AB_TRANSACTION *p_struct){ assert(p_struct); return p_struct->remoteCountry; } const char *AB_Transaction_GetRemoteBankCode(const AB_TRANSACTION *p_struct){ assert(p_struct); return p_struct->remoteBankCode; } const char *AB_Transaction_GetRemoteBranchId(const AB_TRANSACTION *p_struct){ assert(p_struct); return p_struct->remoteBranchId; } const char *AB_Transaction_GetRemoteAccountNumber(const AB_TRANSACTION *p_struct){ assert(p_struct); return p_struct->remoteAccountNumber; } const char *AB_Transaction_GetRemoteSuffix(const AB_TRANSACTION *p_struct){ assert(p_struct); return p_struct->remoteSuffix; } const char *AB_Transaction_GetRemoteIban(const AB_TRANSACTION *p_struct){ assert(p_struct); return p_struct->remoteIban; } const char *AB_Transaction_GetRemoteBic(const AB_TRANSACTION *p_struct){ assert(p_struct); return p_struct->remoteBic; } const char *AB_Transaction_GetRemoteName(const AB_TRANSACTION *p_struct){ assert(p_struct); return p_struct->remoteName; } const GWEN_DATE *AB_Transaction_GetDate(const AB_TRANSACTION *p_struct){ assert(p_struct); return p_struct->date; } const GWEN_DATE *AB_Transaction_GetValutaDate(const AB_TRANSACTION *p_struct){ assert(p_struct); return p_struct->valutaDate; } const AB_VALUE *AB_Transaction_GetValue(const AB_TRANSACTION *p_struct){ assert(p_struct); return p_struct->value; } const AB_VALUE *AB_Transaction_GetFees(const AB_TRANSACTION *p_struct){ assert(p_struct); return p_struct->fees; } const AB_VALUE *AB_Transaction_GetTaxes(const AB_TRANSACTION *p_struct){ assert(p_struct); return p_struct->taxes; } int AB_Transaction_GetTransactionCode(const AB_TRANSACTION *p_struct){ assert(p_struct); return p_struct->transactionCode; } const char *AB_Transaction_GetTransactionText(const AB_TRANSACTION *p_struct){ assert(p_struct); return p_struct->transactionText; } const char *AB_Transaction_GetTransactionKey(const AB_TRANSACTION *p_struct){ assert(p_struct); return p_struct->transactionKey; } int AB_Transaction_GetTextKey(const AB_TRANSACTION *p_struct){ assert(p_struct); return p_struct->textKey; } const char *AB_Transaction_GetPrimanota(const AB_TRANSACTION *p_struct){ assert(p_struct); return p_struct->primanota; } const char *AB_Transaction_GetPurpose(const AB_TRANSACTION *p_struct){ assert(p_struct); return p_struct->purpose; } const char *AB_Transaction_GetCategory(const AB_TRANSACTION *p_struct){ assert(p_struct); return p_struct->category; } const char *AB_Transaction_GetCustomerReference(const AB_TRANSACTION *p_struct){ assert(p_struct); return p_struct->customerReference; } const char *AB_Transaction_GetBankReference(const AB_TRANSACTION *p_struct){ assert(p_struct); return p_struct->bankReference; } const char *AB_Transaction_GetEndToEndReference(const AB_TRANSACTION *p_struct){ assert(p_struct); return p_struct->endToEndReference; } const char *AB_Transaction_GetUltimateCreditor(const AB_TRANSACTION *p_struct){ assert(p_struct); return p_struct->ultimateCreditor; } const char *AB_Transaction_GetUltimateDebtor(const AB_TRANSACTION *p_struct){ assert(p_struct); return p_struct->ultimateDebtor; } const char *AB_Transaction_GetCreditorSchemeId(const AB_TRANSACTION *p_struct){ assert(p_struct); return p_struct->creditorSchemeId; } const char *AB_Transaction_GetOriginatorId(const AB_TRANSACTION *p_struct){ assert(p_struct); return p_struct->originatorId; } const char *AB_Transaction_GetMandateId(const AB_TRANSACTION *p_struct){ assert(p_struct); return p_struct->mandateId; } const GWEN_DATE *AB_Transaction_GetMandateDate(const AB_TRANSACTION *p_struct){ assert(p_struct); return p_struct->mandateDate; } const char *AB_Transaction_GetMandateDebitorName(const AB_TRANSACTION *p_struct){ assert(p_struct); return p_struct->mandateDebitorName; } const char *AB_Transaction_GetOriginalCreditorSchemeId(const AB_TRANSACTION *p_struct){ assert(p_struct); return p_struct->originalCreditorSchemeId; } const char *AB_Transaction_GetOriginalMandateId(const AB_TRANSACTION *p_struct){ assert(p_struct); return p_struct->originalMandateId; } const char *AB_Transaction_GetOriginalCreditorName(const AB_TRANSACTION *p_struct){ assert(p_struct); return p_struct->originalCreditorName; } AB_TRANSACTION_SEQUENCE AB_Transaction_GetSequence(const AB_TRANSACTION *p_struct){ assert(p_struct); return p_struct->sequence; } AB_TRANSACTION_CHARGE AB_Transaction_GetCharge(const AB_TRANSACTION *p_struct){ assert(p_struct); return p_struct->charge; } const char *AB_Transaction_GetRemoteAddrStreet(const AB_TRANSACTION *p_struct){ assert(p_struct); return p_struct->remoteAddrStreet; } const char *AB_Transaction_GetRemoteAddrZipcode(const AB_TRANSACTION *p_struct){ assert(p_struct); return p_struct->remoteAddrZipcode; } const char *AB_Transaction_GetRemoteAddrCity(const AB_TRANSACTION *p_struct){ assert(p_struct); return p_struct->remoteAddrCity; } const char *AB_Transaction_GetRemoteAddrPhone(const AB_TRANSACTION *p_struct){ assert(p_struct); return p_struct->remoteAddrPhone; } AB_TRANSACTION_PERIOD AB_Transaction_GetPeriod(const AB_TRANSACTION *p_struct){ assert(p_struct); return p_struct->period; } uint32_t AB_Transaction_GetCycle(const AB_TRANSACTION *p_struct){ assert(p_struct); return p_struct->cycle; } uint32_t AB_Transaction_GetExecutionDay(const AB_TRANSACTION *p_struct){ assert(p_struct); return p_struct->executionDay; } const GWEN_DATE *AB_Transaction_GetFirstDate(const AB_TRANSACTION *p_struct){ assert(p_struct); return p_struct->firstDate; } const GWEN_DATE *AB_Transaction_GetLastDate(const AB_TRANSACTION *p_struct){ assert(p_struct); return p_struct->lastDate; } const GWEN_DATE *AB_Transaction_GetNextDate(const AB_TRANSACTION *p_struct){ assert(p_struct); return p_struct->nextDate; } const char *AB_Transaction_GetUnitId(const AB_TRANSACTION *p_struct){ assert(p_struct); return p_struct->unitId; } const char *AB_Transaction_GetUnitIdNameSpace(const AB_TRANSACTION *p_struct){ assert(p_struct); return p_struct->unitIdNameSpace; } const char *AB_Transaction_GetTickerSymbol(const AB_TRANSACTION *p_struct){ assert(p_struct); return p_struct->tickerSymbol; } const AB_VALUE *AB_Transaction_GetUnits(const AB_TRANSACTION *p_struct){ assert(p_struct); return p_struct->units; } const AB_VALUE *AB_Transaction_GetUnitPriceValue(const AB_TRANSACTION *p_struct){ assert(p_struct); return p_struct->unitPriceValue; } const GWEN_DATE *AB_Transaction_GetUnitPriceDate(const AB_TRANSACTION *p_struct){ assert(p_struct); return p_struct->unitPriceDate; } const AB_VALUE *AB_Transaction_GetCommissionValue(const AB_TRANSACTION *p_struct){ assert(p_struct); return p_struct->commissionValue; } uint32_t AB_Transaction_GetEstatementNumber(const AB_TRANSACTION *p_struct){ assert(p_struct); return p_struct->estatementNumber; } uint32_t AB_Transaction_GetEstatementMaxEntries(const AB_TRANSACTION *p_struct){ assert(p_struct); return p_struct->estatementMaxEntries; } const char *AB_Transaction_GetMemo(const AB_TRANSACTION *p_struct){ assert(p_struct); return p_struct->memo; } const char *AB_Transaction_GetHash(const AB_TRANSACTION *p_struct){ assert(p_struct); return p_struct->hash; } void AB_Transaction_SetType(AB_TRANSACTION *p_struct, AB_TRANSACTION_TYPE p_src){ assert(p_struct); p_struct->type=p_src; } void AB_Transaction_SetSubType(AB_TRANSACTION *p_struct, AB_TRANSACTION_SUBTYPE p_src){ assert(p_struct); p_struct->subType=p_src; } void AB_Transaction_SetCommand(AB_TRANSACTION *p_struct, AB_TRANSACTION_COMMAND p_src){ assert(p_struct); p_struct->command=p_src; } void AB_Transaction_SetStatus(AB_TRANSACTION *p_struct, AB_TRANSACTION_STATUS p_src){ assert(p_struct); p_struct->status=p_src; } void AB_Transaction_SetUniqueAccountId(AB_TRANSACTION *p_struct, uint32_t p_src){ assert(p_struct); p_struct->uniqueAccountId=p_src; } void AB_Transaction_SetAcknowledge(AB_TRANSACTION *p_struct, AB_TRANSACTION_ACK p_src){ assert(p_struct); p_struct->acknowledge=p_src; } void AB_Transaction_SetUniqueId(AB_TRANSACTION *p_struct, uint32_t p_src){ assert(p_struct); p_struct->uniqueId=p_src; } void AB_Transaction_SetRefUniqueId(AB_TRANSACTION *p_struct, uint32_t p_src){ assert(p_struct); p_struct->refUniqueId=p_src; } void AB_Transaction_SetIdForApplication(AB_TRANSACTION *p_struct, uint32_t p_src){ assert(p_struct); p_struct->idForApplication=p_src; } void AB_Transaction_SetStringIdForApplication(AB_TRANSACTION *p_struct, const char *p_src){ assert(p_struct); if (p_src) { p_struct->stringIdForApplication=strdup(p_src); } else { p_struct->stringIdForApplication=NULL; } } void AB_Transaction_SetSessionId(AB_TRANSACTION *p_struct, uint32_t p_src){ assert(p_struct); p_struct->sessionId=p_src; } void AB_Transaction_SetGroupId(AB_TRANSACTION *p_struct, uint32_t p_src){ assert(p_struct); p_struct->groupId=p_src; } void AB_Transaction_SetFiId(AB_TRANSACTION *p_struct, const char *p_src){ assert(p_struct); if (p_struct->fiId) { free(p_struct->fiId); p_struct->fiId=NULL; p_struct->fiId=NULL; } if (p_src) { p_struct->fiId=strdup(p_src); } else { p_struct->fiId=NULL; } } void AB_Transaction_SetLocalIban(AB_TRANSACTION *p_struct, const char *p_src){ assert(p_struct); if (p_struct->localIban) { free(p_struct->localIban); p_struct->localIban=NULL; p_struct->localIban=NULL; } if (p_src) { p_struct->localIban=strdup(p_src); } else { p_struct->localIban=NULL; } } void AB_Transaction_SetLocalBic(AB_TRANSACTION *p_struct, const char *p_src){ assert(p_struct); if (p_struct->localBic) { free(p_struct->localBic); p_struct->localBic=NULL; p_struct->localBic=NULL; } if (p_src) { p_struct->localBic=strdup(p_src); } else { p_struct->localBic=NULL; } } void AB_Transaction_SetLocalCountry(AB_TRANSACTION *p_struct, const char *p_src){ assert(p_struct); if (p_struct->localCountry) { free(p_struct->localCountry); p_struct->localCountry=NULL; p_struct->localCountry=NULL; } if (p_src) { p_struct->localCountry=strdup(p_src); } else { p_struct->localCountry=NULL; } } void AB_Transaction_SetLocalBankCode(AB_TRANSACTION *p_struct, const char *p_src){ assert(p_struct); if (p_struct->localBankCode) { free(p_struct->localBankCode); p_struct->localBankCode=NULL; p_struct->localBankCode=NULL; } if (p_src) { p_struct->localBankCode=strdup(p_src); } else { p_struct->localBankCode=NULL; } } void AB_Transaction_SetLocalBranchId(AB_TRANSACTION *p_struct, const char *p_src){ assert(p_struct); if (p_struct->localBranchId) { free(p_struct->localBranchId); p_struct->localBranchId=NULL; p_struct->localBranchId=NULL; } if (p_src) { p_struct->localBranchId=strdup(p_src); } else { p_struct->localBranchId=NULL; } } void AB_Transaction_SetLocalAccountNumber(AB_TRANSACTION *p_struct, const char *p_src){ assert(p_struct); if (p_struct->localAccountNumber) { free(p_struct->localAccountNumber); p_struct->localAccountNumber=NULL; p_struct->localAccountNumber=NULL; } if (p_src) { p_struct->localAccountNumber=strdup(p_src); } else { p_struct->localAccountNumber=NULL; } } void AB_Transaction_SetLocalSuffix(AB_TRANSACTION *p_struct, const char *p_src){ assert(p_struct); if (p_struct->localSuffix) { free(p_struct->localSuffix); p_struct->localSuffix=NULL; p_struct->localSuffix=NULL; } if (p_src) { p_struct->localSuffix=strdup(p_src); } else { p_struct->localSuffix=NULL; } } void AB_Transaction_SetLocalName(AB_TRANSACTION *p_struct, const char *p_src){ assert(p_struct); if (p_struct->localName) { free(p_struct->localName); p_struct->localName=NULL; p_struct->localName=NULL; } if (p_src) { p_struct->localName=strdup(p_src); } else { p_struct->localName=NULL; } } void AB_Transaction_SetRemoteCountry(AB_TRANSACTION *p_struct, const char *p_src){ assert(p_struct); if (p_struct->remoteCountry) { free(p_struct->remoteCountry); p_struct->remoteCountry=NULL; p_struct->remoteCountry=NULL; } if (p_src) { p_struct->remoteCountry=strdup(p_src); } else { p_struct->remoteCountry=NULL; } } void AB_Transaction_SetRemoteBankCode(AB_TRANSACTION *p_struct, const char *p_src){ assert(p_struct); if (p_struct->remoteBankCode) { free(p_struct->remoteBankCode); p_struct->remoteBankCode=NULL; p_struct->remoteBankCode=NULL; } if (p_src) { p_struct->remoteBankCode=strdup(p_src); } else { p_struct->remoteBankCode=NULL; } } void AB_Transaction_SetRemoteBranchId(AB_TRANSACTION *p_struct, const char *p_src){ assert(p_struct); if (p_struct->remoteBranchId) { free(p_struct->remoteBranchId); p_struct->remoteBranchId=NULL; p_struct->remoteBranchId=NULL; } if (p_src) { p_struct->remoteBranchId=strdup(p_src); } else { p_struct->remoteBranchId=NULL; } } void AB_Transaction_SetRemoteAccountNumber(AB_TRANSACTION *p_struct, const char *p_src){ assert(p_struct); if (p_struct->remoteAccountNumber) { free(p_struct->remoteAccountNumber); p_struct->remoteAccountNumber=NULL; p_struct->remoteAccountNumber=NULL; } if (p_src) { p_struct->remoteAccountNumber=strdup(p_src); } else { p_struct->remoteAccountNumber=NULL; } } void AB_Transaction_SetRemoteSuffix(AB_TRANSACTION *p_struct, const char *p_src){ assert(p_struct); if (p_struct->remoteSuffix) { free(p_struct->remoteSuffix); p_struct->remoteSuffix=NULL; p_struct->remoteSuffix=NULL; } if (p_src) { p_struct->remoteSuffix=strdup(p_src); } else { p_struct->remoteSuffix=NULL; } } void AB_Transaction_SetRemoteIban(AB_TRANSACTION *p_struct, const char *p_src){ assert(p_struct); if (p_struct->remoteIban) { free(p_struct->remoteIban); p_struct->remoteIban=NULL; p_struct->remoteIban=NULL; } if (p_src) { p_struct->remoteIban=strdup(p_src); } else { p_struct->remoteIban=NULL; } } void AB_Transaction_SetRemoteBic(AB_TRANSACTION *p_struct, const char *p_src){ assert(p_struct); if (p_struct->remoteBic) { free(p_struct->remoteBic); p_struct->remoteBic=NULL; p_struct->remoteBic=NULL; } if (p_src) { p_struct->remoteBic=strdup(p_src); } else { p_struct->remoteBic=NULL; } } void AB_Transaction_SetRemoteName(AB_TRANSACTION *p_struct, const char *p_src){ assert(p_struct); if (p_struct->remoteName) { free(p_struct->remoteName); p_struct->remoteName=NULL; p_struct->remoteName=NULL; } if (p_src) { p_struct->remoteName=strdup(p_src); } else { p_struct->remoteName=NULL; } } void AB_Transaction_SetDate(AB_TRANSACTION *p_struct, const GWEN_DATE *p_src){ assert(p_struct); if (p_struct->date) { GWEN_Date_free(p_struct->date); p_struct->date=NULL; p_struct->date=NULL; } if (p_src) { p_struct->date=GWEN_Date_dup(p_src); } else { p_struct->date=NULL; } } void AB_Transaction_SetValutaDate(AB_TRANSACTION *p_struct, const GWEN_DATE *p_src){ assert(p_struct); if (p_struct->valutaDate) { GWEN_Date_free(p_struct->valutaDate); p_struct->valutaDate=NULL; p_struct->valutaDate=NULL; } if (p_src) { p_struct->valutaDate=GWEN_Date_dup(p_src); } else { p_struct->valutaDate=NULL; } } void AB_Transaction_SetValue(AB_TRANSACTION *p_struct, const AB_VALUE *p_src){ assert(p_struct); if (p_struct->value) { AB_Value_free(p_struct->value); p_struct->value=NULL; } if (p_src) { p_struct->value=AB_Value_dup(p_src); } else { p_struct->value=NULL; } } void AB_Transaction_SetFees(AB_TRANSACTION *p_struct, const AB_VALUE *p_src){ assert(p_struct); if (p_struct->fees) { AB_Value_free(p_struct->fees); p_struct->fees=NULL; } if (p_src) { p_struct->fees=AB_Value_dup(p_src); } else { p_struct->fees=NULL; } } void AB_Transaction_SetTaxes(AB_TRANSACTION *p_struct, const AB_VALUE *p_src){ assert(p_struct); if (p_struct->taxes) { AB_Value_free(p_struct->taxes); p_struct->taxes=NULL; } if (p_src) { p_struct->taxes=AB_Value_dup(p_src); } else { p_struct->taxes=NULL; } } void AB_Transaction_SetTransactionCode(AB_TRANSACTION *p_struct, int p_src){ assert(p_struct); p_struct->transactionCode=p_src; } void AB_Transaction_SetTransactionText(AB_TRANSACTION *p_struct, const char *p_src){ assert(p_struct); if (p_struct->transactionText) { free(p_struct->transactionText); p_struct->transactionText=NULL; p_struct->transactionText=NULL; } if (p_src) { p_struct->transactionText=strdup(p_src); } else { p_struct->transactionText=NULL; } } void AB_Transaction_SetTransactionKey(AB_TRANSACTION *p_struct, const char *p_src){ assert(p_struct); if (p_struct->transactionKey) { free(p_struct->transactionKey); p_struct->transactionKey=NULL; p_struct->transactionKey=NULL; } if (p_src) { p_struct->transactionKey=strdup(p_src); } else { p_struct->transactionKey=NULL; } } void AB_Transaction_SetTextKey(AB_TRANSACTION *p_struct, int p_src){ assert(p_struct); p_struct->textKey=p_src; } void AB_Transaction_SetPrimanota(AB_TRANSACTION *p_struct, const char *p_src){ assert(p_struct); if (p_struct->primanota) { free(p_struct->primanota); p_struct->primanota=NULL; p_struct->primanota=NULL; } if (p_src) { p_struct->primanota=strdup(p_src); } else { p_struct->primanota=NULL; } } void AB_Transaction_SetPurpose(AB_TRANSACTION *p_struct, const char *p_src){ assert(p_struct); if (p_struct->purpose) { free(p_struct->purpose); p_struct->purpose=NULL; p_struct->purpose=NULL; } if (p_src) { p_struct->purpose=strdup(p_src); } else { p_struct->purpose=NULL; } } void AB_Transaction_SetCategory(AB_TRANSACTION *p_struct, const char *p_src){ assert(p_struct); if (p_struct->category) { free(p_struct->category); p_struct->category=NULL; p_struct->category=NULL; } if (p_src) { p_struct->category=strdup(p_src); } else { p_struct->category=NULL; } } void AB_Transaction_SetCustomerReference(AB_TRANSACTION *p_struct, const char *p_src){ assert(p_struct); if (p_struct->customerReference) { free(p_struct->customerReference); p_struct->customerReference=NULL; p_struct->customerReference=NULL; } if (p_src) { p_struct->customerReference=strdup(p_src); } else { p_struct->customerReference=NULL; } } void AB_Transaction_SetBankReference(AB_TRANSACTION *p_struct, const char *p_src){ assert(p_struct); if (p_struct->bankReference) { free(p_struct->bankReference); p_struct->bankReference=NULL; p_struct->bankReference=NULL; } if (p_src) { p_struct->bankReference=strdup(p_src); } else { p_struct->bankReference=NULL; } } void AB_Transaction_SetEndToEndReference(AB_TRANSACTION *p_struct, const char *p_src){ assert(p_struct); if (p_struct->endToEndReference) { free(p_struct->endToEndReference); p_struct->endToEndReference=NULL; p_struct->endToEndReference=NULL; } if (p_src) { p_struct->endToEndReference=strdup(p_src); } else { p_struct->endToEndReference=NULL; } } void AB_Transaction_SetUltimateCreditor(AB_TRANSACTION *p_struct, const char *p_src){ assert(p_struct); if (p_struct->ultimateCreditor) { free(p_struct->ultimateCreditor); p_struct->ultimateCreditor=NULL; p_struct->ultimateCreditor=NULL; } if (p_src) { p_struct->ultimateCreditor=strdup(p_src); } else { p_struct->ultimateCreditor=NULL; } } void AB_Transaction_SetUltimateDebtor(AB_TRANSACTION *p_struct, const char *p_src){ assert(p_struct); if (p_struct->ultimateDebtor) { free(p_struct->ultimateDebtor); p_struct->ultimateDebtor=NULL; p_struct->ultimateDebtor=NULL; } if (p_src) { p_struct->ultimateDebtor=strdup(p_src); } else { p_struct->ultimateDebtor=NULL; } } void AB_Transaction_SetCreditorSchemeId(AB_TRANSACTION *p_struct, const char *p_src){ assert(p_struct); if (p_struct->creditorSchemeId) { free(p_struct->creditorSchemeId); p_struct->creditorSchemeId=NULL; p_struct->creditorSchemeId=NULL; } if (p_src) { p_struct->creditorSchemeId=strdup(p_src); } else { p_struct->creditorSchemeId=NULL; } } void AB_Transaction_SetOriginatorId(AB_TRANSACTION *p_struct, const char *p_src){ assert(p_struct); if (p_struct->originatorId) { free(p_struct->originatorId); p_struct->originatorId=NULL; p_struct->originatorId=NULL; } if (p_src) { p_struct->originatorId=strdup(p_src); } else { p_struct->originatorId=NULL; } } void AB_Transaction_SetMandateId(AB_TRANSACTION *p_struct, const char *p_src){ assert(p_struct); if (p_struct->mandateId) { free(p_struct->mandateId); p_struct->mandateId=NULL; p_struct->mandateId=NULL; } if (p_src) { p_struct->mandateId=strdup(p_src); } else { p_struct->mandateId=NULL; } } void AB_Transaction_SetMandateDate(AB_TRANSACTION *p_struct, const GWEN_DATE *p_src){ assert(p_struct); if (p_struct->mandateDate) { GWEN_Date_free(p_struct->mandateDate); p_struct->mandateDate=NULL; p_struct->mandateDate=NULL; } if (p_src) { p_struct->mandateDate=GWEN_Date_dup(p_src); } else { p_struct->mandateDate=NULL; } } void AB_Transaction_SetMandateDebitorName(AB_TRANSACTION *p_struct, const char *p_src){ assert(p_struct); if (p_struct->mandateDebitorName) { free(p_struct->mandateDebitorName); p_struct->mandateDebitorName=NULL; p_struct->mandateDebitorName=NULL; } if (p_src) { p_struct->mandateDebitorName=strdup(p_src); } else { p_struct->mandateDebitorName=NULL; } } void AB_Transaction_SetOriginalCreditorSchemeId(AB_TRANSACTION *p_struct, const char *p_src){ assert(p_struct); if (p_struct->originalCreditorSchemeId) { free(p_struct->originalCreditorSchemeId); p_struct->originalCreditorSchemeId=NULL; p_struct->originalCreditorSchemeId=NULL; } if (p_src) { p_struct->originalCreditorSchemeId=strdup(p_src); } else { p_struct->originalCreditorSchemeId=NULL; } } void AB_Transaction_SetOriginalMandateId(AB_TRANSACTION *p_struct, const char *p_src){ assert(p_struct); if (p_struct->originalMandateId) { free(p_struct->originalMandateId); p_struct->originalMandateId=NULL; p_struct->originalMandateId=NULL; } if (p_src) { p_struct->originalMandateId=strdup(p_src); } else { p_struct->originalMandateId=NULL; } } void AB_Transaction_SetOriginalCreditorName(AB_TRANSACTION *p_struct, const char *p_src){ assert(p_struct); if (p_struct->originalCreditorName) { free(p_struct->originalCreditorName); p_struct->originalCreditorName=NULL; p_struct->originalCreditorName=NULL; } if (p_src) { p_struct->originalCreditorName=strdup(p_src); } else { p_struct->originalCreditorName=NULL; } } void AB_Transaction_SetSequence(AB_TRANSACTION *p_struct, AB_TRANSACTION_SEQUENCE p_src){ assert(p_struct); p_struct->sequence=p_src; } void AB_Transaction_SetCharge(AB_TRANSACTION *p_struct, AB_TRANSACTION_CHARGE p_src){ assert(p_struct); p_struct->charge=p_src; } void AB_Transaction_SetRemoteAddrStreet(AB_TRANSACTION *p_struct, const char *p_src){ assert(p_struct); if (p_struct->remoteAddrStreet) { free(p_struct->remoteAddrStreet); p_struct->remoteAddrStreet=NULL; p_struct->remoteAddrStreet=NULL; } if (p_src) { p_struct->remoteAddrStreet=strdup(p_src); } else { p_struct->remoteAddrStreet=NULL; } } void AB_Transaction_SetRemoteAddrZipcode(AB_TRANSACTION *p_struct, const char *p_src){ assert(p_struct); if (p_struct->remoteAddrZipcode) { free(p_struct->remoteAddrZipcode); p_struct->remoteAddrZipcode=NULL; p_struct->remoteAddrZipcode=NULL; } if (p_src) { p_struct->remoteAddrZipcode=strdup(p_src); } else { p_struct->remoteAddrZipcode=NULL; } } void AB_Transaction_SetRemoteAddrCity(AB_TRANSACTION *p_struct, const char *p_src){ assert(p_struct); if (p_struct->remoteAddrCity) { free(p_struct->remoteAddrCity); p_struct->remoteAddrCity=NULL; p_struct->remoteAddrCity=NULL; } if (p_src) { p_struct->remoteAddrCity=strdup(p_src); } else { p_struct->remoteAddrCity=NULL; } } void AB_Transaction_SetRemoteAddrPhone(AB_TRANSACTION *p_struct, const char *p_src){ assert(p_struct); if (p_struct->remoteAddrPhone) { free(p_struct->remoteAddrPhone); p_struct->remoteAddrPhone=NULL; p_struct->remoteAddrPhone=NULL; } if (p_src) { p_struct->remoteAddrPhone=strdup(p_src); } else { p_struct->remoteAddrPhone=NULL; } } void AB_Transaction_SetPeriod(AB_TRANSACTION *p_struct, AB_TRANSACTION_PERIOD p_src){ assert(p_struct); p_struct->period=p_src; } void AB_Transaction_SetCycle(AB_TRANSACTION *p_struct, uint32_t p_src){ assert(p_struct); p_struct->cycle=p_src; } void AB_Transaction_SetExecutionDay(AB_TRANSACTION *p_struct, uint32_t p_src){ assert(p_struct); p_struct->executionDay=p_src; } void AB_Transaction_SetFirstDate(AB_TRANSACTION *p_struct, const GWEN_DATE *p_src){ assert(p_struct); if (p_struct->firstDate) { GWEN_Date_free(p_struct->firstDate); p_struct->firstDate=NULL; p_struct->firstDate=NULL; } if (p_src) { p_struct->firstDate=GWEN_Date_dup(p_src); } else { p_struct->firstDate=NULL; } } void AB_Transaction_SetLastDate(AB_TRANSACTION *p_struct, const GWEN_DATE *p_src){ assert(p_struct); if (p_struct->lastDate) { GWEN_Date_free(p_struct->lastDate); p_struct->lastDate=NULL; p_struct->lastDate=NULL; } if (p_src) { p_struct->lastDate=GWEN_Date_dup(p_src); } else { p_struct->lastDate=NULL; } } void AB_Transaction_SetNextDate(AB_TRANSACTION *p_struct, const GWEN_DATE *p_src){ assert(p_struct); if (p_struct->nextDate) { GWEN_Date_free(p_struct->nextDate); p_struct->nextDate=NULL; p_struct->nextDate=NULL; } if (p_src) { p_struct->nextDate=GWEN_Date_dup(p_src); } else { p_struct->nextDate=NULL; } } void AB_Transaction_SetUnitId(AB_TRANSACTION *p_struct, const char *p_src){ assert(p_struct); if (p_struct->unitId) { free(p_struct->unitId); p_struct->unitId=NULL; p_struct->unitId=NULL; } if (p_src) { p_struct->unitId=strdup(p_src); } else { p_struct->unitId=NULL; } } void AB_Transaction_SetUnitIdNameSpace(AB_TRANSACTION *p_struct, const char *p_src){ assert(p_struct); if (p_struct->unitIdNameSpace) { free(p_struct->unitIdNameSpace); p_struct->unitIdNameSpace=NULL; p_struct->unitIdNameSpace=NULL; } if (p_src) { p_struct->unitIdNameSpace=strdup(p_src); } else { p_struct->unitIdNameSpace=NULL; } } void AB_Transaction_SetTickerSymbol(AB_TRANSACTION *p_struct, const char *p_src){ assert(p_struct); if (p_struct->tickerSymbol) { free(p_struct->tickerSymbol); p_struct->tickerSymbol=NULL; p_struct->tickerSymbol=NULL; } if (p_src) { p_struct->tickerSymbol=strdup(p_src); } else { p_struct->tickerSymbol=NULL; } } void AB_Transaction_SetUnits(AB_TRANSACTION *p_struct, const AB_VALUE *p_src){ assert(p_struct); if (p_struct->units) { AB_Value_free(p_struct->units); p_struct->units=NULL; } if (p_src) { p_struct->units=AB_Value_dup(p_src); } else { p_struct->units=NULL; } } void AB_Transaction_SetUnitPriceValue(AB_TRANSACTION *p_struct, const AB_VALUE *p_src){ assert(p_struct); if (p_struct->unitPriceValue) { AB_Value_free(p_struct->unitPriceValue); p_struct->unitPriceValue=NULL; } if (p_src) { p_struct->unitPriceValue=AB_Value_dup(p_src); } else { p_struct->unitPriceValue=NULL; } } void AB_Transaction_SetUnitPriceDate(AB_TRANSACTION *p_struct, const GWEN_DATE *p_src){ assert(p_struct); if (p_struct->unitPriceDate) { GWEN_Date_free(p_struct->unitPriceDate); p_struct->unitPriceDate=NULL; p_struct->unitPriceDate=NULL; } if (p_src) { p_struct->unitPriceDate=GWEN_Date_dup(p_src); } else { p_struct->unitPriceDate=NULL; } } void AB_Transaction_SetCommissionValue(AB_TRANSACTION *p_struct, const AB_VALUE *p_src){ assert(p_struct); if (p_struct->commissionValue) { AB_Value_free(p_struct->commissionValue); p_struct->commissionValue=NULL; } if (p_src) { p_struct->commissionValue=AB_Value_dup(p_src); } else { p_struct->commissionValue=NULL; } } void AB_Transaction_SetEstatementNumber(AB_TRANSACTION *p_struct, uint32_t p_src){ assert(p_struct); p_struct->estatementNumber=p_src; } void AB_Transaction_SetEstatementMaxEntries(AB_TRANSACTION *p_struct, uint32_t p_src){ assert(p_struct); p_struct->estatementMaxEntries=p_src; } void AB_Transaction_SetMemo(AB_TRANSACTION *p_struct, const char *p_src){ assert(p_struct); if (p_struct->memo) { free(p_struct->memo); p_struct->memo=NULL; p_struct->memo=NULL; } if (p_src) { p_struct->memo=strdup(p_src); } else { p_struct->memo=NULL; } } void AB_Transaction_SetHash(AB_TRANSACTION *p_struct, const char *p_src){ assert(p_struct); if (p_struct->hash) { free(p_struct->hash); p_struct->hash=NULL; p_struct->hash=NULL; } if (p_src) { p_struct->hash=strdup(p_src); } else { p_struct->hash=NULL; } } AB_TRANSACTION_LIST *AB_Transaction_List_dup(const AB_TRANSACTION_LIST *p_src) { AB_TRANSACTION_LIST *p_dest; AB_TRANSACTION *p_elem; assert(p_src); p_dest=AB_Transaction_List_new(); p_elem=AB_Transaction_List_First(p_src); while(p_elem) { AB_TRANSACTION *p_cpy; p_cpy=AB_Transaction_dup(p_elem); AB_Transaction_List_Add(p_cpy, p_dest); p_elem=AB_Transaction_List_Next(p_elem); } return p_dest; } void AB_Transaction_ReadDb(AB_TRANSACTION *p_struct, GWEN_DB_NODE *p_db){ assert(p_struct); /* member "type" */ { const char *s; s=GWEN_DB_GetCharValue(p_db, "type", 0, NULL); if (s) p_struct->type=AB_Transaction_Type_fromString(s); else p_struct->type=AB_Transaction_TypeUnknown; } /* member "subType" */ { const char *s; s=GWEN_DB_GetCharValue(p_db, "subType", 0, NULL); if (s) p_struct->subType=AB_Transaction_SubType_fromString(s); else p_struct->subType=AB_Transaction_SubTypeNone; } /* member "command" */ { const char *s; s=GWEN_DB_GetCharValue(p_db, "command", 0, NULL); if (s) p_struct->command=AB_Transaction_Command_fromString(s); else p_struct->command=AB_Transaction_CommandNone; } /* member "status" */ { const char *s; s=GWEN_DB_GetCharValue(p_db, "status", 0, NULL); if (s) p_struct->status=AB_Transaction_Status_fromString(s); else p_struct->status=AB_Transaction_StatusUnknown; } /* member "uniqueAccountId" */ p_struct->uniqueAccountId=GWEN_DB_GetIntValue(p_db, "uniqueAccountId", 0, 0); /* member "acknowledge" */ { const char *s; s=GWEN_DB_GetCharValue(p_db, "acknowledge", 0, NULL); if (s) p_struct->acknowledge=AB_Transaction_Ack_fromString(s); else p_struct->acknowledge=AB_Transaction_AckNever; } /* member "uniqueId" */ p_struct->uniqueId=GWEN_DB_GetIntValue(p_db, "uniqueId", 0, 0); /* member "refUniqueId" */ p_struct->refUniqueId=GWEN_DB_GetIntValue(p_db, "refUniqueId", 0, 0); /* member "idForApplication" */ p_struct->idForApplication=GWEN_DB_GetIntValue(p_db, "idForApplication", 0, 0); /* member "stringIdForApplication" */ { const char *s; s=GWEN_DB_GetCharValue(p_db, "stringIdForApplication", 0, 0); if (s) p_struct->stringIdForApplication=strdup(s); } /* member "sessionId" */ p_struct->sessionId=GWEN_DB_GetIntValue(p_db, "sessionId", 0, 0); /* member "groupId" */ p_struct->groupId=GWEN_DB_GetIntValue(p_db, "groupId", 0, 0); /* member "fiId" */ if (p_struct->fiId) { free(p_struct->fiId); p_struct->fiId=NULL; p_struct->fiId=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "fiId", 0, NULL); if (s) p_struct->fiId=strdup(s); } /* member "localIban" */ if (p_struct->localIban) { free(p_struct->localIban); p_struct->localIban=NULL; p_struct->localIban=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "localIban", 0, NULL); if (s) p_struct->localIban=strdup(s); } /* member "localBic" */ if (p_struct->localBic) { free(p_struct->localBic); p_struct->localBic=NULL; p_struct->localBic=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "localBic", 0, NULL); if (s) p_struct->localBic=strdup(s); } /* member "localCountry" */ if (p_struct->localCountry) { free(p_struct->localCountry); p_struct->localCountry=NULL; p_struct->localCountry=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "localCountry", 0, NULL); if (s) p_struct->localCountry=strdup(s); } /* member "localBankCode" */ if (p_struct->localBankCode) { free(p_struct->localBankCode); p_struct->localBankCode=NULL; p_struct->localBankCode=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "localBankCode", 0, NULL); if (s) p_struct->localBankCode=strdup(s); } /* member "localBranchId" */ if (p_struct->localBranchId) { free(p_struct->localBranchId); p_struct->localBranchId=NULL; p_struct->localBranchId=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "localBranchId", 0, NULL); if (s) p_struct->localBranchId=strdup(s); } /* member "localAccountNumber" */ if (p_struct->localAccountNumber) { free(p_struct->localAccountNumber); p_struct->localAccountNumber=NULL; p_struct->localAccountNumber=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "localAccountNumber", 0, NULL); if (s) p_struct->localAccountNumber=strdup(s); } /* member "localSuffix" */ if (p_struct->localSuffix) { free(p_struct->localSuffix); p_struct->localSuffix=NULL; p_struct->localSuffix=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "localSuffix", 0, NULL); if (s) p_struct->localSuffix=strdup(s); } /* member "localName" */ if (p_struct->localName) { free(p_struct->localName); p_struct->localName=NULL; p_struct->localName=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "localName", 0, NULL); if (s) p_struct->localName=strdup(s); } /* member "remoteCountry" */ if (p_struct->remoteCountry) { free(p_struct->remoteCountry); p_struct->remoteCountry=NULL; p_struct->remoteCountry=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "remoteCountry", 0, NULL); if (s) p_struct->remoteCountry=strdup(s); } /* member "remoteBankCode" */ if (p_struct->remoteBankCode) { free(p_struct->remoteBankCode); p_struct->remoteBankCode=NULL; p_struct->remoteBankCode=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "remoteBankCode", 0, NULL); if (s) p_struct->remoteBankCode=strdup(s); } /* member "remoteBranchId" */ if (p_struct->remoteBranchId) { free(p_struct->remoteBranchId); p_struct->remoteBranchId=NULL; p_struct->remoteBranchId=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "remoteBranchId", 0, NULL); if (s) p_struct->remoteBranchId=strdup(s); } /* member "remoteAccountNumber" */ if (p_struct->remoteAccountNumber) { free(p_struct->remoteAccountNumber); p_struct->remoteAccountNumber=NULL; p_struct->remoteAccountNumber=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "remoteAccountNumber", 0, NULL); if (s) p_struct->remoteAccountNumber=strdup(s); } /* member "remoteSuffix" */ if (p_struct->remoteSuffix) { free(p_struct->remoteSuffix); p_struct->remoteSuffix=NULL; p_struct->remoteSuffix=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "remoteSuffix", 0, NULL); if (s) p_struct->remoteSuffix=strdup(s); } /* member "remoteIban" */ if (p_struct->remoteIban) { free(p_struct->remoteIban); p_struct->remoteIban=NULL; p_struct->remoteIban=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "remoteIban", 0, NULL); if (s) p_struct->remoteIban=strdup(s); } /* member "remoteBic" */ if (p_struct->remoteBic) { free(p_struct->remoteBic); p_struct->remoteBic=NULL; p_struct->remoteBic=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "remoteBic", 0, NULL); if (s) p_struct->remoteBic=strdup(s); } /* member "remoteName" */ if (p_struct->remoteName) { free(p_struct->remoteName); p_struct->remoteName=NULL; p_struct->remoteName=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "remoteName", 0, NULL); if (s) p_struct->remoteName=strdup(s); } /* member "date" */ if (p_struct->date) { GWEN_Date_free(p_struct->date); p_struct->date=NULL; p_struct->date=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "date", 0, NULL); if (s && *s) p_struct->date=GWEN_Date_fromString(s); } /* member "valutaDate" */ if (p_struct->valutaDate) { GWEN_Date_free(p_struct->valutaDate); p_struct->valutaDate=NULL; p_struct->valutaDate=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "valutaDate", 0, NULL); if (s && *s) p_struct->valutaDate=GWEN_Date_fromString(s); } /* member "value" */ if (p_struct->value) { AB_Value_free(p_struct->value); p_struct->value=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "value", 0, NULL); if (s) p_struct->value=AB_Value_fromString(s); else p_struct->value=NULL; } /* member "fees" */ if (p_struct->fees) { AB_Value_free(p_struct->fees); p_struct->fees=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "fees", 0, NULL); if (s) p_struct->fees=AB_Value_fromString(s); else p_struct->fees=NULL; } /* member "taxes" */ if (p_struct->taxes) { AB_Value_free(p_struct->taxes); p_struct->taxes=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "taxes", 0, NULL); if (s) p_struct->taxes=AB_Value_fromString(s); else p_struct->taxes=NULL; } /* member "transactionCode" */ p_struct->transactionCode=GWEN_DB_GetIntValue(p_db, "transactionCode", 0, 0); /* member "transactionText" */ if (p_struct->transactionText) { free(p_struct->transactionText); p_struct->transactionText=NULL; p_struct->transactionText=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "transactionText", 0, NULL); if (s) p_struct->transactionText=strdup(s); } /* member "transactionKey" */ if (p_struct->transactionKey) { free(p_struct->transactionKey); p_struct->transactionKey=NULL; p_struct->transactionKey=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "transactionKey", 0, NULL); if (s) p_struct->transactionKey=strdup(s); } /* member "textKey" */ p_struct->textKey=GWEN_DB_GetIntValue(p_db, "textKey", 0, 0); /* member "primanota" */ if (p_struct->primanota) { free(p_struct->primanota); p_struct->primanota=NULL; p_struct->primanota=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "primanota", 0, NULL); if (s) p_struct->primanota=strdup(s); } /* member "purpose" */ if (p_struct->purpose) { free(p_struct->purpose); p_struct->purpose=NULL; p_struct->purpose=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "purpose", 0, NULL); if (s) p_struct->purpose=strdup(s); } /* member "category" */ if (p_struct->category) { free(p_struct->category); p_struct->category=NULL; p_struct->category=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "category", 0, NULL); if (s) p_struct->category=strdup(s); } /* member "customerReference" */ if (p_struct->customerReference) { free(p_struct->customerReference); p_struct->customerReference=NULL; p_struct->customerReference=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "customerReference", 0, NULL); if (s) p_struct->customerReference=strdup(s); } /* member "bankReference" */ if (p_struct->bankReference) { free(p_struct->bankReference); p_struct->bankReference=NULL; p_struct->bankReference=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "bankReference", 0, NULL); if (s) p_struct->bankReference=strdup(s); } /* member "endToEndReference" */ if (p_struct->endToEndReference) { free(p_struct->endToEndReference); p_struct->endToEndReference=NULL; p_struct->endToEndReference=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "endToEndReference", 0, NULL); if (s) p_struct->endToEndReference=strdup(s); } /* member "ultimateCreditor" */ if (p_struct->ultimateCreditor) { free(p_struct->ultimateCreditor); p_struct->ultimateCreditor=NULL; p_struct->ultimateCreditor=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "ultimateCreditor", 0, NULL); if (s) p_struct->ultimateCreditor=strdup(s); } /* member "ultimateDebtor" */ if (p_struct->ultimateDebtor) { free(p_struct->ultimateDebtor); p_struct->ultimateDebtor=NULL; p_struct->ultimateDebtor=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "ultimateDebtor", 0, NULL); if (s) p_struct->ultimateDebtor=strdup(s); } /* member "creditorSchemeId" */ if (p_struct->creditorSchemeId) { free(p_struct->creditorSchemeId); p_struct->creditorSchemeId=NULL; p_struct->creditorSchemeId=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "creditorSchemeId", 0, NULL); if (s) p_struct->creditorSchemeId=strdup(s); } /* member "originatorId" */ if (p_struct->originatorId) { free(p_struct->originatorId); p_struct->originatorId=NULL; p_struct->originatorId=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "originatorId", 0, NULL); if (s) p_struct->originatorId=strdup(s); } /* member "mandateId" */ if (p_struct->mandateId) { free(p_struct->mandateId); p_struct->mandateId=NULL; p_struct->mandateId=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "mandateId", 0, NULL); if (s) p_struct->mandateId=strdup(s); } /* member "mandateDate" */ if (p_struct->mandateDate) { GWEN_Date_free(p_struct->mandateDate); p_struct->mandateDate=NULL; p_struct->mandateDate=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "mandateDate", 0, NULL); if (s && *s) p_struct->mandateDate=GWEN_Date_fromString(s); } /* member "mandateDebitorName" */ if (p_struct->mandateDebitorName) { free(p_struct->mandateDebitorName); p_struct->mandateDebitorName=NULL; p_struct->mandateDebitorName=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "mandateDebitorName", 0, NULL); if (s) p_struct->mandateDebitorName=strdup(s); } /* member "originalCreditorSchemeId" */ if (p_struct->originalCreditorSchemeId) { free(p_struct->originalCreditorSchemeId); p_struct->originalCreditorSchemeId=NULL; p_struct->originalCreditorSchemeId=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "originalCreditorSchemeId", 0, NULL); if (s) p_struct->originalCreditorSchemeId=strdup(s); } /* member "originalMandateId" */ if (p_struct->originalMandateId) { free(p_struct->originalMandateId); p_struct->originalMandateId=NULL; p_struct->originalMandateId=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "originalMandateId", 0, NULL); if (s) p_struct->originalMandateId=strdup(s); } /* member "originalCreditorName" */ if (p_struct->originalCreditorName) { free(p_struct->originalCreditorName); p_struct->originalCreditorName=NULL; p_struct->originalCreditorName=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "originalCreditorName", 0, NULL); if (s) p_struct->originalCreditorName=strdup(s); } /* member "sequence" */ { const char *s; s=GWEN_DB_GetCharValue(p_db, "sequence", 0, NULL); if (s) p_struct->sequence=AB_Transaction_Sequence_fromString(s); else p_struct->sequence=AB_Transaction_SequenceUnknown; } /* member "charge" */ { const char *s; s=GWEN_DB_GetCharValue(p_db, "charge", 0, NULL); if (s) p_struct->charge=AB_Transaction_Charge_fromString(s); else p_struct->charge=AB_Transaction_ChargeUnknown; } /* member "remoteAddrStreet" */ if (p_struct->remoteAddrStreet) { free(p_struct->remoteAddrStreet); p_struct->remoteAddrStreet=NULL; p_struct->remoteAddrStreet=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "remoteAddrStreet", 0, NULL); if (s) p_struct->remoteAddrStreet=strdup(s); } /* member "remoteAddrZipcode" */ if (p_struct->remoteAddrZipcode) { free(p_struct->remoteAddrZipcode); p_struct->remoteAddrZipcode=NULL; p_struct->remoteAddrZipcode=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "remoteAddrZipcode", 0, NULL); if (s) p_struct->remoteAddrZipcode=strdup(s); } /* member "remoteAddrCity" */ if (p_struct->remoteAddrCity) { free(p_struct->remoteAddrCity); p_struct->remoteAddrCity=NULL; p_struct->remoteAddrCity=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "remoteAddrCity", 0, NULL); if (s) p_struct->remoteAddrCity=strdup(s); } /* member "remoteAddrPhone" */ if (p_struct->remoteAddrPhone) { free(p_struct->remoteAddrPhone); p_struct->remoteAddrPhone=NULL; p_struct->remoteAddrPhone=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "remoteAddrPhone", 0, NULL); if (s) p_struct->remoteAddrPhone=strdup(s); } /* member "period" */ { const char *s; s=GWEN_DB_GetCharValue(p_db, "period", 0, NULL); if (s) p_struct->period=AB_Transaction_Period_fromString(s); else p_struct->period=AB_Transaction_PeriodUnknown; } /* member "cycle" */ p_struct->cycle=GWEN_DB_GetIntValue(p_db, "cycle", 0, 0); /* member "executionDay" */ p_struct->executionDay=GWEN_DB_GetIntValue(p_db, "executionDay", 0, 0); /* member "firstDate" */ if (p_struct->firstDate) { GWEN_Date_free(p_struct->firstDate); p_struct->firstDate=NULL; p_struct->firstDate=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "firstDate", 0, NULL); if (s && *s) p_struct->firstDate=GWEN_Date_fromString(s); } /* member "lastDate" */ if (p_struct->lastDate) { GWEN_Date_free(p_struct->lastDate); p_struct->lastDate=NULL; p_struct->lastDate=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "lastDate", 0, NULL); if (s && *s) p_struct->lastDate=GWEN_Date_fromString(s); } /* member "nextDate" */ if (p_struct->nextDate) { GWEN_Date_free(p_struct->nextDate); p_struct->nextDate=NULL; p_struct->nextDate=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "nextDate", 0, NULL); if (s && *s) p_struct->nextDate=GWEN_Date_fromString(s); } /* member "unitId" */ if (p_struct->unitId) { free(p_struct->unitId); p_struct->unitId=NULL; p_struct->unitId=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "unitId", 0, NULL); if (s) p_struct->unitId=strdup(s); } /* member "unitIdNameSpace" */ if (p_struct->unitIdNameSpace) { free(p_struct->unitIdNameSpace); p_struct->unitIdNameSpace=NULL; p_struct->unitIdNameSpace=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "unitIdNameSpace", 0, NULL); if (s) p_struct->unitIdNameSpace=strdup(s); } /* member "tickerSymbol" */ if (p_struct->tickerSymbol) { free(p_struct->tickerSymbol); p_struct->tickerSymbol=NULL; p_struct->tickerSymbol=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "tickerSymbol", 0, NULL); if (s) p_struct->tickerSymbol=strdup(s); } /* member "units" */ if (p_struct->units) { AB_Value_free(p_struct->units); p_struct->units=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "units", 0, NULL); if (s) p_struct->units=AB_Value_fromString(s); else p_struct->units=NULL; } /* member "unitPriceValue" */ if (p_struct->unitPriceValue) { AB_Value_free(p_struct->unitPriceValue); p_struct->unitPriceValue=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "unitPriceValue", 0, NULL); if (s) p_struct->unitPriceValue=AB_Value_fromString(s); else p_struct->unitPriceValue=NULL; } /* member "unitPriceDate" */ if (p_struct->unitPriceDate) { GWEN_Date_free(p_struct->unitPriceDate); p_struct->unitPriceDate=NULL; p_struct->unitPriceDate=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "unitPriceDate", 0, NULL); if (s && *s) p_struct->unitPriceDate=GWEN_Date_fromString(s); } /* member "commissionValue" */ if (p_struct->commissionValue) { AB_Value_free(p_struct->commissionValue); p_struct->commissionValue=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "commissionValue", 0, NULL); if (s) p_struct->commissionValue=AB_Value_fromString(s); else p_struct->commissionValue=NULL; } /* member "estatementNumber" */ p_struct->estatementNumber=GWEN_DB_GetIntValue(p_db, "estatementNumber", 0, 0); /* member "estatementMaxEntries" */ p_struct->estatementMaxEntries=GWEN_DB_GetIntValue(p_db, "estatementMaxEntries", 0, 0); /* member "memo" */ if (p_struct->memo) { free(p_struct->memo); p_struct->memo=NULL; p_struct->memo=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "memo", 0, NULL); if (s) p_struct->memo=strdup(s); } /* member "hash" */ if (p_struct->hash) { free(p_struct->hash); p_struct->hash=NULL; p_struct->hash=NULL; } /* member "hash" is volatile, just presetting it */ p_struct->hash=NULL; } int AB_Transaction_WriteDb(const AB_TRANSACTION *p_struct, GWEN_DB_NODE *p_db) { int p_rv; assert(p_struct); /* member "type" */ p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "type", AB_Transaction_Type_toString(p_struct->type)); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "subType" */ p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "subType", AB_Transaction_SubType_toString(p_struct->subType)); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "command" */ p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "command", AB_Transaction_Command_toString(p_struct->command)); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "status" */ p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "status", AB_Transaction_Status_toString(p_struct->status)); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "uniqueAccountId" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "uniqueAccountId", p_struct->uniqueAccountId); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "acknowledge" */ p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "acknowledge", AB_Transaction_Ack_toString(p_struct->acknowledge)); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "uniqueId" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "uniqueId", p_struct->uniqueId); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "refUniqueId" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "refUniqueId", p_struct->refUniqueId); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "idForApplication" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "idForApplication", p_struct->idForApplication); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "stringIdForApplication" */ if (p_struct->stringIdForApplication) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "stringIdForApplication", p_struct->stringIdForApplication); else { GWEN_DB_DeleteVar(p_db, "stringIdForApplication"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "sessionId" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "sessionId", p_struct->sessionId); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "groupId" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "groupId", p_struct->groupId); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "fiId" */ if (p_struct->fiId) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "fiId", p_struct->fiId); else { GWEN_DB_DeleteVar(p_db, "fiId"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "localIban" */ if (p_struct->localIban) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "localIban", p_struct->localIban); else { GWEN_DB_DeleteVar(p_db, "localIban"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "localBic" */ if (p_struct->localBic) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "localBic", p_struct->localBic); else { GWEN_DB_DeleteVar(p_db, "localBic"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "localCountry" */ if (p_struct->localCountry) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "localCountry", p_struct->localCountry); else { GWEN_DB_DeleteVar(p_db, "localCountry"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "localBankCode" */ if (p_struct->localBankCode) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "localBankCode", p_struct->localBankCode); else { GWEN_DB_DeleteVar(p_db, "localBankCode"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "localBranchId" */ if (p_struct->localBranchId) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "localBranchId", p_struct->localBranchId); else { GWEN_DB_DeleteVar(p_db, "localBranchId"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "localAccountNumber" */ if (p_struct->localAccountNumber) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "localAccountNumber", p_struct->localAccountNumber); else { GWEN_DB_DeleteVar(p_db, "localAccountNumber"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "localSuffix" */ if (p_struct->localSuffix) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "localSuffix", p_struct->localSuffix); else { GWEN_DB_DeleteVar(p_db, "localSuffix"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "localName" */ if (p_struct->localName) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "localName", p_struct->localName); else { GWEN_DB_DeleteVar(p_db, "localName"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "remoteCountry" */ if (p_struct->remoteCountry) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "remoteCountry", p_struct->remoteCountry); else { GWEN_DB_DeleteVar(p_db, "remoteCountry"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "remoteBankCode" */ if (p_struct->remoteBankCode) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "remoteBankCode", p_struct->remoteBankCode); else { GWEN_DB_DeleteVar(p_db, "remoteBankCode"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "remoteBranchId" */ if (p_struct->remoteBranchId) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "remoteBranchId", p_struct->remoteBranchId); else { GWEN_DB_DeleteVar(p_db, "remoteBranchId"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "remoteAccountNumber" */ if (p_struct->remoteAccountNumber) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "remoteAccountNumber", p_struct->remoteAccountNumber); else { GWEN_DB_DeleteVar(p_db, "remoteAccountNumber"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "remoteSuffix" */ if (p_struct->remoteSuffix) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "remoteSuffix", p_struct->remoteSuffix); else { GWEN_DB_DeleteVar(p_db, "remoteSuffix"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "remoteIban" */ if (p_struct->remoteIban) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "remoteIban", p_struct->remoteIban); else { GWEN_DB_DeleteVar(p_db, "remoteIban"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "remoteBic" */ if (p_struct->remoteBic) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "remoteBic", p_struct->remoteBic); else { GWEN_DB_DeleteVar(p_db, "remoteBic"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "remoteName" */ if (p_struct->remoteName) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "remoteName", p_struct->remoteName); else { GWEN_DB_DeleteVar(p_db, "remoteName"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "date" */ if (p_struct->date){ const char *s=GWEN_Date_GetString(p_struct->date); p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "date", s); } else { GWEN_DB_DeleteVar(p_db, "date"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "valutaDate" */ if (p_struct->valutaDate){ const char *s=GWEN_Date_GetString(p_struct->valutaDate); p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "valutaDate", s); } else { GWEN_DB_DeleteVar(p_db, "valutaDate"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "value" */ if (p_struct->value) { GWEN_BUFFER *tbuf=GWEN_Buffer_new(0, 64, 0, 1); AB_Value_toString(p_struct->value, tbuf); p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "value", GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } else { GWEN_DB_DeleteVar(p_db, "value"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "fees" */ if (p_struct->fees) { GWEN_BUFFER *tbuf=GWEN_Buffer_new(0, 64, 0, 1); AB_Value_toString(p_struct->fees, tbuf); p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "fees", GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } else { GWEN_DB_DeleteVar(p_db, "fees"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "taxes" */ if (p_struct->taxes) { GWEN_BUFFER *tbuf=GWEN_Buffer_new(0, 64, 0, 1); AB_Value_toString(p_struct->taxes, tbuf); p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "taxes", GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } else { GWEN_DB_DeleteVar(p_db, "taxes"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "transactionCode" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "transactionCode", p_struct->transactionCode); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "transactionText" */ if (p_struct->transactionText) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "transactionText", p_struct->transactionText); else { GWEN_DB_DeleteVar(p_db, "transactionText"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "transactionKey" */ if (p_struct->transactionKey) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "transactionKey", p_struct->transactionKey); else { GWEN_DB_DeleteVar(p_db, "transactionKey"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "textKey" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "textKey", p_struct->textKey); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "primanota" */ if (p_struct->primanota) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "primanota", p_struct->primanota); else { GWEN_DB_DeleteVar(p_db, "primanota"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "purpose" */ if (p_struct->purpose) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "purpose", p_struct->purpose); else { GWEN_DB_DeleteVar(p_db, "purpose"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "category" */ if (p_struct->category) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "category", p_struct->category); else { GWEN_DB_DeleteVar(p_db, "category"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "customerReference" */ if (p_struct->customerReference) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "customerReference", p_struct->customerReference); else { GWEN_DB_DeleteVar(p_db, "customerReference"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "bankReference" */ if (p_struct->bankReference) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "bankReference", p_struct->bankReference); else { GWEN_DB_DeleteVar(p_db, "bankReference"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "endToEndReference" */ if (p_struct->endToEndReference) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "endToEndReference", p_struct->endToEndReference); else { GWEN_DB_DeleteVar(p_db, "endToEndReference"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "ultimateCreditor" */ if (p_struct->ultimateCreditor) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "ultimateCreditor", p_struct->ultimateCreditor); else { GWEN_DB_DeleteVar(p_db, "ultimateCreditor"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "ultimateDebtor" */ if (p_struct->ultimateDebtor) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "ultimateDebtor", p_struct->ultimateDebtor); else { GWEN_DB_DeleteVar(p_db, "ultimateDebtor"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "creditorSchemeId" */ if (p_struct->creditorSchemeId) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "creditorSchemeId", p_struct->creditorSchemeId); else { GWEN_DB_DeleteVar(p_db, "creditorSchemeId"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "originatorId" */ if (p_struct->originatorId) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "originatorId", p_struct->originatorId); else { GWEN_DB_DeleteVar(p_db, "originatorId"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "mandateId" */ if (p_struct->mandateId) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "mandateId", p_struct->mandateId); else { GWEN_DB_DeleteVar(p_db, "mandateId"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "mandateDate" */ if (p_struct->mandateDate){ const char *s=GWEN_Date_GetString(p_struct->mandateDate); p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "mandateDate", s); } else { GWEN_DB_DeleteVar(p_db, "mandateDate"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "mandateDebitorName" */ if (p_struct->mandateDebitorName) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "mandateDebitorName", p_struct->mandateDebitorName); else { GWEN_DB_DeleteVar(p_db, "mandateDebitorName"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "originalCreditorSchemeId" */ if (p_struct->originalCreditorSchemeId) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "originalCreditorSchemeId", p_struct->originalCreditorSchemeId); else { GWEN_DB_DeleteVar(p_db, "originalCreditorSchemeId"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "originalMandateId" */ if (p_struct->originalMandateId) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "originalMandateId", p_struct->originalMandateId); else { GWEN_DB_DeleteVar(p_db, "originalMandateId"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "originalCreditorName" */ if (p_struct->originalCreditorName) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "originalCreditorName", p_struct->originalCreditorName); else { GWEN_DB_DeleteVar(p_db, "originalCreditorName"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "sequence" */ p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "sequence", AB_Transaction_Sequence_toString(p_struct->sequence)); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "charge" */ p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "charge", AB_Transaction_Charge_toString(p_struct->charge)); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "remoteAddrStreet" */ if (p_struct->remoteAddrStreet) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "remoteAddrStreet", p_struct->remoteAddrStreet); else { GWEN_DB_DeleteVar(p_db, "remoteAddrStreet"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "remoteAddrZipcode" */ if (p_struct->remoteAddrZipcode) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "remoteAddrZipcode", p_struct->remoteAddrZipcode); else { GWEN_DB_DeleteVar(p_db, "remoteAddrZipcode"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "remoteAddrCity" */ if (p_struct->remoteAddrCity) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "remoteAddrCity", p_struct->remoteAddrCity); else { GWEN_DB_DeleteVar(p_db, "remoteAddrCity"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "remoteAddrPhone" */ if (p_struct->remoteAddrPhone) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "remoteAddrPhone", p_struct->remoteAddrPhone); else { GWEN_DB_DeleteVar(p_db, "remoteAddrPhone"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "period" */ p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "period", AB_Transaction_Period_toString(p_struct->period)); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "cycle" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "cycle", p_struct->cycle); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "executionDay" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "executionDay", p_struct->executionDay); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "firstDate" */ if (p_struct->firstDate){ const char *s=GWEN_Date_GetString(p_struct->firstDate); p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "firstDate", s); } else { GWEN_DB_DeleteVar(p_db, "firstDate"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "lastDate" */ if (p_struct->lastDate){ const char *s=GWEN_Date_GetString(p_struct->lastDate); p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "lastDate", s); } else { GWEN_DB_DeleteVar(p_db, "lastDate"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "nextDate" */ if (p_struct->nextDate){ const char *s=GWEN_Date_GetString(p_struct->nextDate); p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "nextDate", s); } else { GWEN_DB_DeleteVar(p_db, "nextDate"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "unitId" */ if (p_struct->unitId) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "unitId", p_struct->unitId); else { GWEN_DB_DeleteVar(p_db, "unitId"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "unitIdNameSpace" */ if (p_struct->unitIdNameSpace) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "unitIdNameSpace", p_struct->unitIdNameSpace); else { GWEN_DB_DeleteVar(p_db, "unitIdNameSpace"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "tickerSymbol" */ if (p_struct->tickerSymbol) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "tickerSymbol", p_struct->tickerSymbol); else { GWEN_DB_DeleteVar(p_db, "tickerSymbol"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "units" */ if (p_struct->units) { GWEN_BUFFER *tbuf=GWEN_Buffer_new(0, 64, 0, 1); AB_Value_toString(p_struct->units, tbuf); p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "units", GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } else { GWEN_DB_DeleteVar(p_db, "units"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "unitPriceValue" */ if (p_struct->unitPriceValue) { GWEN_BUFFER *tbuf=GWEN_Buffer_new(0, 64, 0, 1); AB_Value_toString(p_struct->unitPriceValue, tbuf); p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "unitPriceValue", GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } else { GWEN_DB_DeleteVar(p_db, "unitPriceValue"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "unitPriceDate" */ if (p_struct->unitPriceDate){ const char *s=GWEN_Date_GetString(p_struct->unitPriceDate); p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "unitPriceDate", s); } else { GWEN_DB_DeleteVar(p_db, "unitPriceDate"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "commissionValue" */ if (p_struct->commissionValue) { GWEN_BUFFER *tbuf=GWEN_Buffer_new(0, 64, 0, 1); AB_Value_toString(p_struct->commissionValue, tbuf); p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "commissionValue", GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } else { GWEN_DB_DeleteVar(p_db, "commissionValue"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "estatementNumber" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "estatementNumber", p_struct->estatementNumber); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "estatementMaxEntries" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "estatementMaxEntries", p_struct->estatementMaxEntries); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "memo" */ if (p_struct->memo) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "memo", p_struct->memo); else { GWEN_DB_DeleteVar(p_db, "memo"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "hash" is volatile, not writing to db */ return 0; } AB_TRANSACTION *AB_Transaction_fromDb(GWEN_DB_NODE *p_db) { AB_TRANSACTION *p_struct; p_struct=AB_Transaction_new(); AB_Transaction_ReadDb(p_struct, p_db); return p_struct; } int AB_Transaction_toDb(const AB_TRANSACTION *p_struct, GWEN_DB_NODE *p_db) { return AB_Transaction_WriteDb(p_struct, p_db); } void AB_Transaction_ReadXml(AB_TRANSACTION *p_struct, GWEN_XMLNODE *p_db){ assert(p_struct); /* member "type" */ { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "type", NULL); if (s) p_struct->type=AB_Transaction_Type_fromString(s); else p_struct->type=AB_Transaction_TypeUnknown; } /* member "subType" */ { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "subType", NULL); if (s) p_struct->subType=AB_Transaction_SubType_fromString(s); else p_struct->subType=AB_Transaction_SubTypeNone; } /* member "command" */ { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "command", NULL); if (s) p_struct->command=AB_Transaction_Command_fromString(s); else p_struct->command=AB_Transaction_CommandNone; } /* member "status" */ { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "status", NULL); if (s) p_struct->status=AB_Transaction_Status_fromString(s); else p_struct->status=AB_Transaction_StatusUnknown; } /* member "uniqueAccountId" */ p_struct->uniqueAccountId=GWEN_XMLNode_GetIntValue(p_db, "uniqueAccountId", 0); /* member "acknowledge" */ { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "acknowledge", NULL); if (s) p_struct->acknowledge=AB_Transaction_Ack_fromString(s); else p_struct->acknowledge=AB_Transaction_AckNever; } /* member "uniqueId" */ p_struct->uniqueId=GWEN_XMLNode_GetIntValue(p_db, "uniqueId", 0); /* member "refUniqueId" */ p_struct->refUniqueId=GWEN_XMLNode_GetIntValue(p_db, "refUniqueId", 0); /* member "idForApplication" */ p_struct->idForApplication=GWEN_XMLNode_GetIntValue(p_db, "idForApplication", 0); /* member "stringIdForApplication" */ { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "stringIdForApplication", 0); if (s) p_struct->stringIdForApplication=strdup(s); } /* member "sessionId" */ p_struct->sessionId=GWEN_XMLNode_GetIntValue(p_db, "sessionId", 0); /* member "groupId" */ p_struct->groupId=GWEN_XMLNode_GetIntValue(p_db, "groupId", 0); /* member "fiId" */ if (p_struct->fiId) { free(p_struct->fiId); p_struct->fiId=NULL; p_struct->fiId=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "fiId", NULL); if (s) p_struct->fiId=strdup(s); } /* member "localIban" */ if (p_struct->localIban) { free(p_struct->localIban); p_struct->localIban=NULL; p_struct->localIban=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "localIban", NULL); if (s) p_struct->localIban=strdup(s); } /* member "localBic" */ if (p_struct->localBic) { free(p_struct->localBic); p_struct->localBic=NULL; p_struct->localBic=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "localBic", NULL); if (s) p_struct->localBic=strdup(s); } /* member "localCountry" */ if (p_struct->localCountry) { free(p_struct->localCountry); p_struct->localCountry=NULL; p_struct->localCountry=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "localCountry", NULL); if (s) p_struct->localCountry=strdup(s); } /* member "localBankCode" */ if (p_struct->localBankCode) { free(p_struct->localBankCode); p_struct->localBankCode=NULL; p_struct->localBankCode=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "localBankCode", NULL); if (s) p_struct->localBankCode=strdup(s); } /* member "localBranchId" */ if (p_struct->localBranchId) { free(p_struct->localBranchId); p_struct->localBranchId=NULL; p_struct->localBranchId=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "localBranchId", NULL); if (s) p_struct->localBranchId=strdup(s); } /* member "localAccountNumber" */ if (p_struct->localAccountNumber) { free(p_struct->localAccountNumber); p_struct->localAccountNumber=NULL; p_struct->localAccountNumber=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "localAccountNumber", NULL); if (s) p_struct->localAccountNumber=strdup(s); } /* member "localSuffix" */ if (p_struct->localSuffix) { free(p_struct->localSuffix); p_struct->localSuffix=NULL; p_struct->localSuffix=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "localSuffix", NULL); if (s) p_struct->localSuffix=strdup(s); } /* member "localName" */ if (p_struct->localName) { free(p_struct->localName); p_struct->localName=NULL; p_struct->localName=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "localName", NULL); if (s) p_struct->localName=strdup(s); } /* member "remoteCountry" */ if (p_struct->remoteCountry) { free(p_struct->remoteCountry); p_struct->remoteCountry=NULL; p_struct->remoteCountry=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "remoteCountry", NULL); if (s) p_struct->remoteCountry=strdup(s); } /* member "remoteBankCode" */ if (p_struct->remoteBankCode) { free(p_struct->remoteBankCode); p_struct->remoteBankCode=NULL; p_struct->remoteBankCode=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "remoteBankCode", NULL); if (s) p_struct->remoteBankCode=strdup(s); } /* member "remoteBranchId" */ if (p_struct->remoteBranchId) { free(p_struct->remoteBranchId); p_struct->remoteBranchId=NULL; p_struct->remoteBranchId=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "remoteBranchId", NULL); if (s) p_struct->remoteBranchId=strdup(s); } /* member "remoteAccountNumber" */ if (p_struct->remoteAccountNumber) { free(p_struct->remoteAccountNumber); p_struct->remoteAccountNumber=NULL; p_struct->remoteAccountNumber=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "remoteAccountNumber", NULL); if (s) p_struct->remoteAccountNumber=strdup(s); } /* member "remoteSuffix" */ if (p_struct->remoteSuffix) { free(p_struct->remoteSuffix); p_struct->remoteSuffix=NULL; p_struct->remoteSuffix=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "remoteSuffix", NULL); if (s) p_struct->remoteSuffix=strdup(s); } /* member "remoteIban" */ if (p_struct->remoteIban) { free(p_struct->remoteIban); p_struct->remoteIban=NULL; p_struct->remoteIban=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "remoteIban", NULL); if (s) p_struct->remoteIban=strdup(s); } /* member "remoteBic" */ if (p_struct->remoteBic) { free(p_struct->remoteBic); p_struct->remoteBic=NULL; p_struct->remoteBic=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "remoteBic", NULL); if (s) p_struct->remoteBic=strdup(s); } /* member "remoteName" */ if (p_struct->remoteName) { free(p_struct->remoteName); p_struct->remoteName=NULL; p_struct->remoteName=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "remoteName", NULL); if (s) p_struct->remoteName=strdup(s); } /* member "date" */ if (p_struct->date) { GWEN_Date_free(p_struct->date); p_struct->date=NULL; p_struct->date=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "date", NULL); if (s && *s) p_struct->date=GWEN_Date_fromString(s); } /* member "valutaDate" */ if (p_struct->valutaDate) { GWEN_Date_free(p_struct->valutaDate); p_struct->valutaDate=NULL; p_struct->valutaDate=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "valutaDate", NULL); if (s && *s) p_struct->valutaDate=GWEN_Date_fromString(s); } /* member "value" */ if (p_struct->value) { AB_Value_free(p_struct->value); p_struct->value=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "value", NULL); if (s) p_struct->value=AB_Value_fromString(s); else p_struct->value=NULL; } /* member "fees" */ if (p_struct->fees) { AB_Value_free(p_struct->fees); p_struct->fees=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "fees", NULL); if (s) p_struct->fees=AB_Value_fromString(s); else p_struct->fees=NULL; } /* member "taxes" */ if (p_struct->taxes) { AB_Value_free(p_struct->taxes); p_struct->taxes=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "taxes", NULL); if (s) p_struct->taxes=AB_Value_fromString(s); else p_struct->taxes=NULL; } /* member "transactionCode" */ p_struct->transactionCode=GWEN_XMLNode_GetIntValue(p_db, "transactionCode", 0); /* member "transactionText" */ if (p_struct->transactionText) { free(p_struct->transactionText); p_struct->transactionText=NULL; p_struct->transactionText=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "transactionText", NULL); if (s) p_struct->transactionText=strdup(s); } /* member "transactionKey" */ if (p_struct->transactionKey) { free(p_struct->transactionKey); p_struct->transactionKey=NULL; p_struct->transactionKey=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "transactionKey", NULL); if (s) p_struct->transactionKey=strdup(s); } /* member "textKey" */ p_struct->textKey=GWEN_XMLNode_GetIntValue(p_db, "textKey", 0); /* member "primanota" */ if (p_struct->primanota) { free(p_struct->primanota); p_struct->primanota=NULL; p_struct->primanota=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "primanota", NULL); if (s) p_struct->primanota=strdup(s); } /* member "purpose" */ if (p_struct->purpose) { free(p_struct->purpose); p_struct->purpose=NULL; p_struct->purpose=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "purpose", NULL); if (s) p_struct->purpose=strdup(s); } /* member "category" */ if (p_struct->category) { free(p_struct->category); p_struct->category=NULL; p_struct->category=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "category", NULL); if (s) p_struct->category=strdup(s); } /* member "customerReference" */ if (p_struct->customerReference) { free(p_struct->customerReference); p_struct->customerReference=NULL; p_struct->customerReference=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "customerReference", NULL); if (s) p_struct->customerReference=strdup(s); } /* member "bankReference" */ if (p_struct->bankReference) { free(p_struct->bankReference); p_struct->bankReference=NULL; p_struct->bankReference=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "bankReference", NULL); if (s) p_struct->bankReference=strdup(s); } /* member "endToEndReference" */ if (p_struct->endToEndReference) { free(p_struct->endToEndReference); p_struct->endToEndReference=NULL; p_struct->endToEndReference=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "endToEndReference", NULL); if (s) p_struct->endToEndReference=strdup(s); } /* member "ultimateCreditor" */ if (p_struct->ultimateCreditor) { free(p_struct->ultimateCreditor); p_struct->ultimateCreditor=NULL; p_struct->ultimateCreditor=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "ultimateCreditor", NULL); if (s) p_struct->ultimateCreditor=strdup(s); } /* member "ultimateDebtor" */ if (p_struct->ultimateDebtor) { free(p_struct->ultimateDebtor); p_struct->ultimateDebtor=NULL; p_struct->ultimateDebtor=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "ultimateDebtor", NULL); if (s) p_struct->ultimateDebtor=strdup(s); } /* member "creditorSchemeId" */ if (p_struct->creditorSchemeId) { free(p_struct->creditorSchemeId); p_struct->creditorSchemeId=NULL; p_struct->creditorSchemeId=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "creditorSchemeId", NULL); if (s) p_struct->creditorSchemeId=strdup(s); } /* member "originatorId" */ if (p_struct->originatorId) { free(p_struct->originatorId); p_struct->originatorId=NULL; p_struct->originatorId=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "originatorId", NULL); if (s) p_struct->originatorId=strdup(s); } /* member "mandateId" */ if (p_struct->mandateId) { free(p_struct->mandateId); p_struct->mandateId=NULL; p_struct->mandateId=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "mandateId", NULL); if (s) p_struct->mandateId=strdup(s); } /* member "mandateDate" */ if (p_struct->mandateDate) { GWEN_Date_free(p_struct->mandateDate); p_struct->mandateDate=NULL; p_struct->mandateDate=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "mandateDate", NULL); if (s && *s) p_struct->mandateDate=GWEN_Date_fromString(s); } /* member "mandateDebitorName" */ if (p_struct->mandateDebitorName) { free(p_struct->mandateDebitorName); p_struct->mandateDebitorName=NULL; p_struct->mandateDebitorName=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "mandateDebitorName", NULL); if (s) p_struct->mandateDebitorName=strdup(s); } /* member "originalCreditorSchemeId" */ if (p_struct->originalCreditorSchemeId) { free(p_struct->originalCreditorSchemeId); p_struct->originalCreditorSchemeId=NULL; p_struct->originalCreditorSchemeId=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "originalCreditorSchemeId", NULL); if (s) p_struct->originalCreditorSchemeId=strdup(s); } /* member "originalMandateId" */ if (p_struct->originalMandateId) { free(p_struct->originalMandateId); p_struct->originalMandateId=NULL; p_struct->originalMandateId=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "originalMandateId", NULL); if (s) p_struct->originalMandateId=strdup(s); } /* member "originalCreditorName" */ if (p_struct->originalCreditorName) { free(p_struct->originalCreditorName); p_struct->originalCreditorName=NULL; p_struct->originalCreditorName=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "originalCreditorName", NULL); if (s) p_struct->originalCreditorName=strdup(s); } /* member "sequence" */ { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "sequence", NULL); if (s) p_struct->sequence=AB_Transaction_Sequence_fromString(s); else p_struct->sequence=AB_Transaction_SequenceUnknown; } /* member "charge" */ { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "charge", NULL); if (s) p_struct->charge=AB_Transaction_Charge_fromString(s); else p_struct->charge=AB_Transaction_ChargeUnknown; } /* member "remoteAddrStreet" */ if (p_struct->remoteAddrStreet) { free(p_struct->remoteAddrStreet); p_struct->remoteAddrStreet=NULL; p_struct->remoteAddrStreet=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "remoteAddrStreet", NULL); if (s) p_struct->remoteAddrStreet=strdup(s); } /* member "remoteAddrZipcode" */ if (p_struct->remoteAddrZipcode) { free(p_struct->remoteAddrZipcode); p_struct->remoteAddrZipcode=NULL; p_struct->remoteAddrZipcode=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "remoteAddrZipcode", NULL); if (s) p_struct->remoteAddrZipcode=strdup(s); } /* member "remoteAddrCity" */ if (p_struct->remoteAddrCity) { free(p_struct->remoteAddrCity); p_struct->remoteAddrCity=NULL; p_struct->remoteAddrCity=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "remoteAddrCity", NULL); if (s) p_struct->remoteAddrCity=strdup(s); } /* member "remoteAddrPhone" */ if (p_struct->remoteAddrPhone) { free(p_struct->remoteAddrPhone); p_struct->remoteAddrPhone=NULL; p_struct->remoteAddrPhone=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "remoteAddrPhone", NULL); if (s) p_struct->remoteAddrPhone=strdup(s); } /* member "period" */ { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "period", NULL); if (s) p_struct->period=AB_Transaction_Period_fromString(s); else p_struct->period=AB_Transaction_PeriodUnknown; } /* member "cycle" */ p_struct->cycle=GWEN_XMLNode_GetIntValue(p_db, "cycle", 0); /* member "executionDay" */ p_struct->executionDay=GWEN_XMLNode_GetIntValue(p_db, "executionDay", 0); /* member "firstDate" */ if (p_struct->firstDate) { GWEN_Date_free(p_struct->firstDate); p_struct->firstDate=NULL; p_struct->firstDate=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "firstDate", NULL); if (s && *s) p_struct->firstDate=GWEN_Date_fromString(s); } /* member "lastDate" */ if (p_struct->lastDate) { GWEN_Date_free(p_struct->lastDate); p_struct->lastDate=NULL; p_struct->lastDate=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "lastDate", NULL); if (s && *s) p_struct->lastDate=GWEN_Date_fromString(s); } /* member "nextDate" */ if (p_struct->nextDate) { GWEN_Date_free(p_struct->nextDate); p_struct->nextDate=NULL; p_struct->nextDate=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "nextDate", NULL); if (s && *s) p_struct->nextDate=GWEN_Date_fromString(s); } /* member "unitId" */ if (p_struct->unitId) { free(p_struct->unitId); p_struct->unitId=NULL; p_struct->unitId=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "unitId", NULL); if (s) p_struct->unitId=strdup(s); } /* member "unitIdNameSpace" */ if (p_struct->unitIdNameSpace) { free(p_struct->unitIdNameSpace); p_struct->unitIdNameSpace=NULL; p_struct->unitIdNameSpace=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "unitIdNameSpace", NULL); if (s) p_struct->unitIdNameSpace=strdup(s); } /* member "tickerSymbol" */ if (p_struct->tickerSymbol) { free(p_struct->tickerSymbol); p_struct->tickerSymbol=NULL; p_struct->tickerSymbol=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "tickerSymbol", NULL); if (s) p_struct->tickerSymbol=strdup(s); } /* member "units" */ if (p_struct->units) { AB_Value_free(p_struct->units); p_struct->units=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "units", NULL); if (s) p_struct->units=AB_Value_fromString(s); else p_struct->units=NULL; } /* member "unitPriceValue" */ if (p_struct->unitPriceValue) { AB_Value_free(p_struct->unitPriceValue); p_struct->unitPriceValue=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "unitPriceValue", NULL); if (s) p_struct->unitPriceValue=AB_Value_fromString(s); else p_struct->unitPriceValue=NULL; } /* member "unitPriceDate" */ if (p_struct->unitPriceDate) { GWEN_Date_free(p_struct->unitPriceDate); p_struct->unitPriceDate=NULL; p_struct->unitPriceDate=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "unitPriceDate", NULL); if (s && *s) p_struct->unitPriceDate=GWEN_Date_fromString(s); } /* member "commissionValue" */ if (p_struct->commissionValue) { AB_Value_free(p_struct->commissionValue); p_struct->commissionValue=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "commissionValue", NULL); if (s) p_struct->commissionValue=AB_Value_fromString(s); else p_struct->commissionValue=NULL; } /* member "estatementNumber" */ p_struct->estatementNumber=GWEN_XMLNode_GetIntValue(p_db, "estatementNumber", 0); /* member "estatementMaxEntries" */ p_struct->estatementMaxEntries=GWEN_XMLNode_GetIntValue(p_db, "estatementMaxEntries", 0); /* member "memo" */ if (p_struct->memo) { free(p_struct->memo); p_struct->memo=NULL; p_struct->memo=NULL; } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "memo", NULL); if (s) p_struct->memo=strdup(s); } /* member "hash" */ if (p_struct->hash) { free(p_struct->hash); p_struct->hash=NULL; p_struct->hash=NULL; } /* member "hash" is volatile, just presetting it */ p_struct->hash=NULL; } void AB_Transaction_WriteXml(const AB_TRANSACTION *p_struct, GWEN_XMLNODE *p_db) { assert(p_struct); /* member "type" */ GWEN_XMLNode_SetCharValue(p_db, "type", AB_Transaction_Type_toString(p_struct->type)); /* member "subType" */ GWEN_XMLNode_SetCharValue(p_db, "subType", AB_Transaction_SubType_toString(p_struct->subType)); /* member "command" */ GWEN_XMLNode_SetCharValue(p_db, "command", AB_Transaction_Command_toString(p_struct->command)); /* member "status" */ GWEN_XMLNode_SetCharValue(p_db, "status", AB_Transaction_Status_toString(p_struct->status)); /* member "uniqueAccountId" */ GWEN_XMLNode_SetIntValue(p_db, "uniqueAccountId", p_struct->uniqueAccountId); /* member "acknowledge" */ GWEN_XMLNode_SetCharValue(p_db, "acknowledge", AB_Transaction_Ack_toString(p_struct->acknowledge)); /* member "uniqueId" */ GWEN_XMLNode_SetIntValue(p_db, "uniqueId", p_struct->uniqueId); /* member "refUniqueId" */ GWEN_XMLNode_SetIntValue(p_db, "refUniqueId", p_struct->refUniqueId); /* member "idForApplication" */ GWEN_XMLNode_SetIntValue(p_db, "idForApplication", p_struct->idForApplication); /* member "stringIdForApplication" */ GWEN_XMLNode_SetCharValue(p_db, "stringIdForApplication", p_struct->stringIdForApplication); /* member "sessionId" */ GWEN_XMLNode_SetIntValue(p_db, "sessionId", p_struct->sessionId); /* member "groupId" */ GWEN_XMLNode_SetIntValue(p_db, "groupId", p_struct->groupId); /* member "fiId" */ GWEN_XMLNode_SetCharValue(p_db, "fiId", p_struct->fiId); /* member "localIban" */ GWEN_XMLNode_SetCharValue(p_db, "localIban", p_struct->localIban); /* member "localBic" */ GWEN_XMLNode_SetCharValue(p_db, "localBic", p_struct->localBic); /* member "localCountry" */ GWEN_XMLNode_SetCharValue(p_db, "localCountry", p_struct->localCountry); /* member "localBankCode" */ GWEN_XMLNode_SetCharValue(p_db, "localBankCode", p_struct->localBankCode); /* member "localBranchId" */ GWEN_XMLNode_SetCharValue(p_db, "localBranchId", p_struct->localBranchId); /* member "localAccountNumber" */ GWEN_XMLNode_SetCharValue(p_db, "localAccountNumber", p_struct->localAccountNumber); /* member "localSuffix" */ GWEN_XMLNode_SetCharValue(p_db, "localSuffix", p_struct->localSuffix); /* member "localName" */ GWEN_XMLNode_SetCharValue(p_db, "localName", p_struct->localName); /* member "remoteCountry" */ GWEN_XMLNode_SetCharValue(p_db, "remoteCountry", p_struct->remoteCountry); /* member "remoteBankCode" */ GWEN_XMLNode_SetCharValue(p_db, "remoteBankCode", p_struct->remoteBankCode); /* member "remoteBranchId" */ GWEN_XMLNode_SetCharValue(p_db, "remoteBranchId", p_struct->remoteBranchId); /* member "remoteAccountNumber" */ GWEN_XMLNode_SetCharValue(p_db, "remoteAccountNumber", p_struct->remoteAccountNumber); /* member "remoteSuffix" */ GWEN_XMLNode_SetCharValue(p_db, "remoteSuffix", p_struct->remoteSuffix); /* member "remoteIban" */ GWEN_XMLNode_SetCharValue(p_db, "remoteIban", p_struct->remoteIban); /* member "remoteBic" */ GWEN_XMLNode_SetCharValue(p_db, "remoteBic", p_struct->remoteBic); /* member "remoteName" */ GWEN_XMLNode_SetCharValue(p_db, "remoteName", p_struct->remoteName); /* member "date" */ if (p_struct->date){ const char *s=GWEN_Date_GetString(p_struct->date); GWEN_XMLNode_SetCharValue(p_db, "date", s); } /* member "valutaDate" */ if (p_struct->valutaDate){ const char *s=GWEN_Date_GetString(p_struct->valutaDate); GWEN_XMLNode_SetCharValue(p_db, "valutaDate", s); } /* member "value" */ if (p_struct->value) { GWEN_BUFFER *tbuf=GWEN_Buffer_new(0, 64, 0, 1); AB_Value_toString(p_struct->value, tbuf); GWEN_XMLNode_SetCharValue(p_db, "value", GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } /* member "fees" */ if (p_struct->fees) { GWEN_BUFFER *tbuf=GWEN_Buffer_new(0, 64, 0, 1); AB_Value_toString(p_struct->fees, tbuf); GWEN_XMLNode_SetCharValue(p_db, "fees", GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } /* member "taxes" */ if (p_struct->taxes) { GWEN_BUFFER *tbuf=GWEN_Buffer_new(0, 64, 0, 1); AB_Value_toString(p_struct->taxes, tbuf); GWEN_XMLNode_SetCharValue(p_db, "taxes", GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } /* member "transactionCode" */ GWEN_XMLNode_SetIntValue(p_db, "transactionCode", p_struct->transactionCode); /* member "transactionText" */ GWEN_XMLNode_SetCharValue(p_db, "transactionText", p_struct->transactionText); /* member "transactionKey" */ GWEN_XMLNode_SetCharValue(p_db, "transactionKey", p_struct->transactionKey); /* member "textKey" */ GWEN_XMLNode_SetIntValue(p_db, "textKey", p_struct->textKey); /* member "primanota" */ GWEN_XMLNode_SetCharValue(p_db, "primanota", p_struct->primanota); /* member "purpose" */ GWEN_XMLNode_SetCharValue(p_db, "purpose", p_struct->purpose); /* member "category" */ GWEN_XMLNode_SetCharValue(p_db, "category", p_struct->category); /* member "customerReference" */ GWEN_XMLNode_SetCharValue(p_db, "customerReference", p_struct->customerReference); /* member "bankReference" */ GWEN_XMLNode_SetCharValue(p_db, "bankReference", p_struct->bankReference); /* member "endToEndReference" */ GWEN_XMLNode_SetCharValue(p_db, "endToEndReference", p_struct->endToEndReference); /* member "ultimateCreditor" */ GWEN_XMLNode_SetCharValue(p_db, "ultimateCreditor", p_struct->ultimateCreditor); /* member "ultimateDebtor" */ GWEN_XMLNode_SetCharValue(p_db, "ultimateDebtor", p_struct->ultimateDebtor); /* member "creditorSchemeId" */ GWEN_XMLNode_SetCharValue(p_db, "creditorSchemeId", p_struct->creditorSchemeId); /* member "originatorId" */ GWEN_XMLNode_SetCharValue(p_db, "originatorId", p_struct->originatorId); /* member "mandateId" */ GWEN_XMLNode_SetCharValue(p_db, "mandateId", p_struct->mandateId); /* member "mandateDate" */ if (p_struct->mandateDate){ const char *s=GWEN_Date_GetString(p_struct->mandateDate); GWEN_XMLNode_SetCharValue(p_db, "mandateDate", s); } /* member "mandateDebitorName" */ GWEN_XMLNode_SetCharValue(p_db, "mandateDebitorName", p_struct->mandateDebitorName); /* member "originalCreditorSchemeId" */ GWEN_XMLNode_SetCharValue(p_db, "originalCreditorSchemeId", p_struct->originalCreditorSchemeId); /* member "originalMandateId" */ GWEN_XMLNode_SetCharValue(p_db, "originalMandateId", p_struct->originalMandateId); /* member "originalCreditorName" */ GWEN_XMLNode_SetCharValue(p_db, "originalCreditorName", p_struct->originalCreditorName); /* member "sequence" */ GWEN_XMLNode_SetCharValue(p_db, "sequence", AB_Transaction_Sequence_toString(p_struct->sequence)); /* member "charge" */ GWEN_XMLNode_SetCharValue(p_db, "charge", AB_Transaction_Charge_toString(p_struct->charge)); /* member "remoteAddrStreet" */ GWEN_XMLNode_SetCharValue(p_db, "remoteAddrStreet", p_struct->remoteAddrStreet); /* member "remoteAddrZipcode" */ GWEN_XMLNode_SetCharValue(p_db, "remoteAddrZipcode", p_struct->remoteAddrZipcode); /* member "remoteAddrCity" */ GWEN_XMLNode_SetCharValue(p_db, "remoteAddrCity", p_struct->remoteAddrCity); /* member "remoteAddrPhone" */ GWEN_XMLNode_SetCharValue(p_db, "remoteAddrPhone", p_struct->remoteAddrPhone); /* member "period" */ GWEN_XMLNode_SetCharValue(p_db, "period", AB_Transaction_Period_toString(p_struct->period)); /* member "cycle" */ GWEN_XMLNode_SetIntValue(p_db, "cycle", p_struct->cycle); /* member "executionDay" */ GWEN_XMLNode_SetIntValue(p_db, "executionDay", p_struct->executionDay); /* member "firstDate" */ if (p_struct->firstDate){ const char *s=GWEN_Date_GetString(p_struct->firstDate); GWEN_XMLNode_SetCharValue(p_db, "firstDate", s); } /* member "lastDate" */ if (p_struct->lastDate){ const char *s=GWEN_Date_GetString(p_struct->lastDate); GWEN_XMLNode_SetCharValue(p_db, "lastDate", s); } /* member "nextDate" */ if (p_struct->nextDate){ const char *s=GWEN_Date_GetString(p_struct->nextDate); GWEN_XMLNode_SetCharValue(p_db, "nextDate", s); } /* member "unitId" */ GWEN_XMLNode_SetCharValue(p_db, "unitId", p_struct->unitId); /* member "unitIdNameSpace" */ GWEN_XMLNode_SetCharValue(p_db, "unitIdNameSpace", p_struct->unitIdNameSpace); /* member "tickerSymbol" */ GWEN_XMLNode_SetCharValue(p_db, "tickerSymbol", p_struct->tickerSymbol); /* member "units" */ if (p_struct->units) { GWEN_BUFFER *tbuf=GWEN_Buffer_new(0, 64, 0, 1); AB_Value_toString(p_struct->units, tbuf); GWEN_XMLNode_SetCharValue(p_db, "units", GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } /* member "unitPriceValue" */ if (p_struct->unitPriceValue) { GWEN_BUFFER *tbuf=GWEN_Buffer_new(0, 64, 0, 1); AB_Value_toString(p_struct->unitPriceValue, tbuf); GWEN_XMLNode_SetCharValue(p_db, "unitPriceValue", GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } /* member "unitPriceDate" */ if (p_struct->unitPriceDate){ const char *s=GWEN_Date_GetString(p_struct->unitPriceDate); GWEN_XMLNode_SetCharValue(p_db, "unitPriceDate", s); } /* member "commissionValue" */ if (p_struct->commissionValue) { GWEN_BUFFER *tbuf=GWEN_Buffer_new(0, 64, 0, 1); AB_Value_toString(p_struct->commissionValue, tbuf); GWEN_XMLNode_SetCharValue(p_db, "commissionValue", GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } /* member "estatementNumber" */ GWEN_XMLNode_SetIntValue(p_db, "estatementNumber", p_struct->estatementNumber); /* member "estatementMaxEntries" */ GWEN_XMLNode_SetIntValue(p_db, "estatementMaxEntries", p_struct->estatementMaxEntries); /* member "memo" */ GWEN_XMLNode_SetCharValue(p_db, "memo", p_struct->memo); /* member "hash" is volatile, not writing to xml */ } void AB_Transaction_toXml(const AB_TRANSACTION *p_struct, GWEN_XMLNODE *p_db) { AB_Transaction_WriteXml(p_struct, p_db); } AB_TRANSACTION *AB_Transaction_fromXml(GWEN_XMLNODE *p_db) { AB_TRANSACTION *p_struct; p_struct=AB_Transaction_new(); AB_Transaction_ReadXml(p_struct, p_db); return p_struct; } AB_TRANSACTION *AB_Transaction_List_GetByUniqueId(const AB_TRANSACTION_LIST *p_list, uint32_t p_cmp){ AB_TRANSACTION *p_struct; assert(p_list); p_struct = AB_Transaction_List_First(p_list); while(p_struct) { int p_rv; if (p_struct->uniqueId==p_cmp) p_rv=0; else if (p_cmpuniqueId) p_rv=-1; else p_rv=1; if (p_rv == 0) return p_struct; p_struct = AB_Transaction_List_Next(p_struct); } return NULL; } AB_TRANSACTION *AB_Transaction_List_GetByIdForApplication(const AB_TRANSACTION_LIST *p_list, uint32_t p_cmp){ AB_TRANSACTION *p_struct; assert(p_list); p_struct = AB_Transaction_List_First(p_list); while(p_struct) { int p_rv; if (p_struct->idForApplication==p_cmp) p_rv=0; else if (p_cmpidForApplication) p_rv=-1; else p_rv=1; if (p_rv == 0) return p_struct; p_struct = AB_Transaction_List_Next(p_struct); } return NULL; } AB_TRANSACTION *AB_Transaction_List_GetByStringIdForApplication(const AB_TRANSACTION_LIST *p_list, const char *p_cmp){ AB_TRANSACTION *p_struct; assert(p_list); p_struct = AB_Transaction_List_First(p_list); while(p_struct) { int p_rv; if (p_struct->stringIdForApplication && p_cmp) p_rv=strcasecmp(p_cmp, p_struct->stringIdForApplication); else if (p_cmp) p_rv=1; else if (p_struct->stringIdForApplication) p_rv=-1; else p_rv=0; if (p_rv == 0) return p_struct; p_struct = AB_Transaction_List_Next(p_struct); } return NULL; } void AB_Transaction_toHashString(const AB_TRANSACTION *p_struct, GWEN_BUFFER *p_buffer) { assert(p_struct); /* member "type"*/ { char numbuf[32]; snprintf(numbuf, sizeof(numbuf)-1, "%d", p_struct->type); numbuf[sizeof(numbuf)-1]=0; GWEN_Buffer_AppendString(p_buffer, numbuf); } GWEN_Buffer_AppendByte(p_buffer, ':'); /* member "subType"*/ { char numbuf[32]; snprintf(numbuf, sizeof(numbuf)-1, "%d", p_struct->subType); numbuf[sizeof(numbuf)-1]=0; GWEN_Buffer_AppendString(p_buffer, numbuf); } GWEN_Buffer_AppendByte(p_buffer, ':'); /* member "command"*/ { char numbuf[32]; snprintf(numbuf, sizeof(numbuf)-1, "%d", p_struct->command); numbuf[sizeof(numbuf)-1]=0; GWEN_Buffer_AppendString(p_buffer, numbuf); } GWEN_Buffer_AppendByte(p_buffer, ':'); /* member "status"*/ { char numbuf[32]; snprintf(numbuf, sizeof(numbuf)-1, "%d", p_struct->status); numbuf[sizeof(numbuf)-1]=0; GWEN_Buffer_AppendString(p_buffer, numbuf); } GWEN_Buffer_AppendByte(p_buffer, ':'); /* member "uniqueAccountId"*/ { char numbuf[32]; snprintf(numbuf, sizeof(numbuf)-1, "%d", p_struct->uniqueAccountId); numbuf[sizeof(numbuf)-1]=0; GWEN_Buffer_AppendString(p_buffer, numbuf); } GWEN_Buffer_AppendByte(p_buffer, ':'); /* member "acknowledge"*/ { char numbuf[32]; snprintf(numbuf, sizeof(numbuf)-1, "%d", p_struct->acknowledge); numbuf[sizeof(numbuf)-1]=0; GWEN_Buffer_AppendString(p_buffer, numbuf); } GWEN_Buffer_AppendByte(p_buffer, ':'); /* member "uniqueId"*/ { char numbuf[32]; snprintf(numbuf, sizeof(numbuf)-1, "%d", p_struct->uniqueId); numbuf[sizeof(numbuf)-1]=0; GWEN_Buffer_AppendString(p_buffer, numbuf); } GWEN_Buffer_AppendByte(p_buffer, ':'); /* member "refUniqueId"*/ { char numbuf[32]; snprintf(numbuf, sizeof(numbuf)-1, "%d", p_struct->refUniqueId); numbuf[sizeof(numbuf)-1]=0; GWEN_Buffer_AppendString(p_buffer, numbuf); } GWEN_Buffer_AppendByte(p_buffer, ':'); /* member "idForApplication"*/ { char numbuf[32]; snprintf(numbuf, sizeof(numbuf)-1, "%d", p_struct->idForApplication); numbuf[sizeof(numbuf)-1]=0; GWEN_Buffer_AppendString(p_buffer, numbuf); } GWEN_Buffer_AppendByte(p_buffer, ':'); /* member "stringIdForApplication"*/ if (p_struct->stringIdForApplication) GWEN_Buffer_AppendString(p_buffer, p_struct->stringIdForApplication); GWEN_Buffer_AppendByte(p_buffer, ':'); /* member "sessionId"*/ { char numbuf[32]; snprintf(numbuf, sizeof(numbuf)-1, "%d", p_struct->sessionId); numbuf[sizeof(numbuf)-1]=0; GWEN_Buffer_AppendString(p_buffer, numbuf); } GWEN_Buffer_AppendByte(p_buffer, ':'); /* member "groupId"*/ { char numbuf[32]; snprintf(numbuf, sizeof(numbuf)-1, "%d", p_struct->groupId); numbuf[sizeof(numbuf)-1]=0; GWEN_Buffer_AppendString(p_buffer, numbuf); } GWEN_Buffer_AppendByte(p_buffer, ':'); /* member "fiId"*/ if (p_struct->fiId) GWEN_Buffer_AppendString(p_buffer, p_struct->fiId); GWEN_Buffer_AppendByte(p_buffer, ':'); /* member "localIban"*/ if (p_struct->localIban) GWEN_Buffer_AppendString(p_buffer, p_struct->localIban); GWEN_Buffer_AppendByte(p_buffer, ':'); /* member "localBic"*/ if (p_struct->localBic) GWEN_Buffer_AppendString(p_buffer, p_struct->localBic); GWEN_Buffer_AppendByte(p_buffer, ':'); /* member "localCountry"*/ if (p_struct->localCountry) GWEN_Buffer_AppendString(p_buffer, p_struct->localCountry); GWEN_Buffer_AppendByte(p_buffer, ':'); /* member "localBankCode"*/ if (p_struct->localBankCode) GWEN_Buffer_AppendString(p_buffer, p_struct->localBankCode); GWEN_Buffer_AppendByte(p_buffer, ':'); /* member "localBranchId"*/ if (p_struct->localBranchId) GWEN_Buffer_AppendString(p_buffer, p_struct->localBranchId); GWEN_Buffer_AppendByte(p_buffer, ':'); /* member "localAccountNumber"*/ if (p_struct->localAccountNumber) GWEN_Buffer_AppendString(p_buffer, p_struct->localAccountNumber); GWEN_Buffer_AppendByte(p_buffer, ':'); /* member "localSuffix"*/ if (p_struct->localSuffix) GWEN_Buffer_AppendString(p_buffer, p_struct->localSuffix); GWEN_Buffer_AppendByte(p_buffer, ':'); /* member "localName"*/ if (p_struct->localName) GWEN_Buffer_AppendString(p_buffer, p_struct->localName); GWEN_Buffer_AppendByte(p_buffer, ':'); /* member "remoteCountry"*/ if (p_struct->remoteCountry) GWEN_Buffer_AppendString(p_buffer, p_struct->remoteCountry); GWEN_Buffer_AppendByte(p_buffer, ':'); /* member "remoteBankCode"*/ if (p_struct->remoteBankCode) GWEN_Buffer_AppendString(p_buffer, p_struct->remoteBankCode); GWEN_Buffer_AppendByte(p_buffer, ':'); /* member "remoteBranchId"*/ if (p_struct->remoteBranchId) GWEN_Buffer_AppendString(p_buffer, p_struct->remoteBranchId); GWEN_Buffer_AppendByte(p_buffer, ':'); /* member "remoteAccountNumber"*/ if (p_struct->remoteAccountNumber) GWEN_Buffer_AppendString(p_buffer, p_struct->remoteAccountNumber); GWEN_Buffer_AppendByte(p_buffer, ':'); /* member "remoteSuffix"*/ if (p_struct->remoteSuffix) GWEN_Buffer_AppendString(p_buffer, p_struct->remoteSuffix); GWEN_Buffer_AppendByte(p_buffer, ':'); /* member "remoteIban"*/ if (p_struct->remoteIban) GWEN_Buffer_AppendString(p_buffer, p_struct->remoteIban); GWEN_Buffer_AppendByte(p_buffer, ':'); /* member "remoteBic"*/ if (p_struct->remoteBic) GWEN_Buffer_AppendString(p_buffer, p_struct->remoteBic); GWEN_Buffer_AppendByte(p_buffer, ':'); /* member "remoteName"*/ if (p_struct->remoteName) GWEN_Buffer_AppendString(p_buffer, p_struct->remoteName); GWEN_Buffer_AppendByte(p_buffer, ':'); /* member "date"*/ if (p_struct->date) GWEN_Buffer_AppendString(p_buffer, GWEN_Date_GetString(p_struct->date)); GWEN_Buffer_AppendByte(p_buffer, ':'); /* member "valutaDate"*/ if (p_struct->valutaDate) GWEN_Buffer_AppendString(p_buffer, GWEN_Date_GetString(p_struct->valutaDate)); GWEN_Buffer_AppendByte(p_buffer, ':'); /* member "value"*/ if (p_struct->value) { double d=AB_Value_GetValueAsDouble(p_struct->value); char numbuf[32]; snprintf(numbuf, sizeof(numbuf)-1, "%.4f", d); numbuf[sizeof(numbuf)-1]=0; GWEN_Buffer_AppendString(p_buffer, numbuf); } GWEN_Buffer_AppendByte(p_buffer, ':'); /* member "fees"*/ if (p_struct->fees) { double d=AB_Value_GetValueAsDouble(p_struct->fees); char numbuf[32]; snprintf(numbuf, sizeof(numbuf)-1, "%.4f", d); numbuf[sizeof(numbuf)-1]=0; GWEN_Buffer_AppendString(p_buffer, numbuf); } GWEN_Buffer_AppendByte(p_buffer, ':'); /* member "taxes"*/ if (p_struct->taxes) { double d=AB_Value_GetValueAsDouble(p_struct->taxes); char numbuf[32]; snprintf(numbuf, sizeof(numbuf)-1, "%.4f", d); numbuf[sizeof(numbuf)-1]=0; GWEN_Buffer_AppendString(p_buffer, numbuf); } GWEN_Buffer_AppendByte(p_buffer, ':'); /* member "transactionCode"*/ { char numbuf[32]; snprintf(numbuf, sizeof(numbuf)-1, "%d", p_struct->transactionCode); numbuf[sizeof(numbuf)-1]=0; GWEN_Buffer_AppendString(p_buffer, numbuf); } GWEN_Buffer_AppendByte(p_buffer, ':'); /* member "transactionText"*/ if (p_struct->transactionText) GWEN_Buffer_AppendString(p_buffer, p_struct->transactionText); GWEN_Buffer_AppendByte(p_buffer, ':'); /* member "transactionKey"*/ if (p_struct->transactionKey) GWEN_Buffer_AppendString(p_buffer, p_struct->transactionKey); GWEN_Buffer_AppendByte(p_buffer, ':'); /* member "textKey"*/ { char numbuf[32]; snprintf(numbuf, sizeof(numbuf)-1, "%d", p_struct->textKey); numbuf[sizeof(numbuf)-1]=0; GWEN_Buffer_AppendString(p_buffer, numbuf); } GWEN_Buffer_AppendByte(p_buffer, ':'); /* member "primanota"*/ if (p_struct->primanota) GWEN_Buffer_AppendString(p_buffer, p_struct->primanota); GWEN_Buffer_AppendByte(p_buffer, ':'); /* member "purpose"*/ if (p_struct->purpose) GWEN_Buffer_AppendString(p_buffer, p_struct->purpose); GWEN_Buffer_AppendByte(p_buffer, ':'); /* member "category"*/ if (p_struct->category) GWEN_Buffer_AppendString(p_buffer, p_struct->category); GWEN_Buffer_AppendByte(p_buffer, ':'); /* member "customerReference"*/ if (p_struct->customerReference) GWEN_Buffer_AppendString(p_buffer, p_struct->customerReference); GWEN_Buffer_AppendByte(p_buffer, ':'); /* member "bankReference"*/ if (p_struct->bankReference) GWEN_Buffer_AppendString(p_buffer, p_struct->bankReference); GWEN_Buffer_AppendByte(p_buffer, ':'); /* member "endToEndReference"*/ if (p_struct->endToEndReference) GWEN_Buffer_AppendString(p_buffer, p_struct->endToEndReference); GWEN_Buffer_AppendByte(p_buffer, ':'); /* member "ultimateCreditor"*/ if (p_struct->ultimateCreditor) GWEN_Buffer_AppendString(p_buffer, p_struct->ultimateCreditor); GWEN_Buffer_AppendByte(p_buffer, ':'); /* member "ultimateDebtor"*/ if (p_struct->ultimateDebtor) GWEN_Buffer_AppendString(p_buffer, p_struct->ultimateDebtor); GWEN_Buffer_AppendByte(p_buffer, ':'); /* member "creditorSchemeId"*/ if (p_struct->creditorSchemeId) GWEN_Buffer_AppendString(p_buffer, p_struct->creditorSchemeId); GWEN_Buffer_AppendByte(p_buffer, ':'); /* member "originatorId"*/ if (p_struct->originatorId) GWEN_Buffer_AppendString(p_buffer, p_struct->originatorId); GWEN_Buffer_AppendByte(p_buffer, ':'); /* member "mandateId"*/ if (p_struct->mandateId) GWEN_Buffer_AppendString(p_buffer, p_struct->mandateId); GWEN_Buffer_AppendByte(p_buffer, ':'); /* member "mandateDate"*/ if (p_struct->mandateDate) GWEN_Buffer_AppendString(p_buffer, GWEN_Date_GetString(p_struct->mandateDate)); GWEN_Buffer_AppendByte(p_buffer, ':'); /* member "mandateDebitorName"*/ if (p_struct->mandateDebitorName) GWEN_Buffer_AppendString(p_buffer, p_struct->mandateDebitorName); GWEN_Buffer_AppendByte(p_buffer, ':'); /* member "originalCreditorSchemeId"*/ if (p_struct->originalCreditorSchemeId) GWEN_Buffer_AppendString(p_buffer, p_struct->originalCreditorSchemeId); GWEN_Buffer_AppendByte(p_buffer, ':'); /* member "originalMandateId"*/ if (p_struct->originalMandateId) GWEN_Buffer_AppendString(p_buffer, p_struct->originalMandateId); GWEN_Buffer_AppendByte(p_buffer, ':'); /* member "originalCreditorName"*/ if (p_struct->originalCreditorName) GWEN_Buffer_AppendString(p_buffer, p_struct->originalCreditorName); GWEN_Buffer_AppendByte(p_buffer, ':'); /* member "sequence"*/ { char numbuf[32]; snprintf(numbuf, sizeof(numbuf)-1, "%d", p_struct->sequence); numbuf[sizeof(numbuf)-1]=0; GWEN_Buffer_AppendString(p_buffer, numbuf); } GWEN_Buffer_AppendByte(p_buffer, ':'); /* member "charge"*/ { char numbuf[32]; snprintf(numbuf, sizeof(numbuf)-1, "%d", p_struct->charge); numbuf[sizeof(numbuf)-1]=0; GWEN_Buffer_AppendString(p_buffer, numbuf); } GWEN_Buffer_AppendByte(p_buffer, ':'); /* member "remoteAddrStreet"*/ if (p_struct->remoteAddrStreet) GWEN_Buffer_AppendString(p_buffer, p_struct->remoteAddrStreet); GWEN_Buffer_AppendByte(p_buffer, ':'); /* member "remoteAddrZipcode"*/ if (p_struct->remoteAddrZipcode) GWEN_Buffer_AppendString(p_buffer, p_struct->remoteAddrZipcode); GWEN_Buffer_AppendByte(p_buffer, ':'); /* member "remoteAddrCity"*/ if (p_struct->remoteAddrCity) GWEN_Buffer_AppendString(p_buffer, p_struct->remoteAddrCity); GWEN_Buffer_AppendByte(p_buffer, ':'); /* member "remoteAddrPhone"*/ if (p_struct->remoteAddrPhone) GWEN_Buffer_AppendString(p_buffer, p_struct->remoteAddrPhone); GWEN_Buffer_AppendByte(p_buffer, ':'); /* member "period"*/ { char numbuf[32]; snprintf(numbuf, sizeof(numbuf)-1, "%d", p_struct->period); numbuf[sizeof(numbuf)-1]=0; GWEN_Buffer_AppendString(p_buffer, numbuf); } GWEN_Buffer_AppendByte(p_buffer, ':'); /* member "cycle"*/ { char numbuf[32]; snprintf(numbuf, sizeof(numbuf)-1, "%d", p_struct->cycle); numbuf[sizeof(numbuf)-1]=0; GWEN_Buffer_AppendString(p_buffer, numbuf); } GWEN_Buffer_AppendByte(p_buffer, ':'); /* member "executionDay"*/ { char numbuf[32]; snprintf(numbuf, sizeof(numbuf)-1, "%d", p_struct->executionDay); numbuf[sizeof(numbuf)-1]=0; GWEN_Buffer_AppendString(p_buffer, numbuf); } GWEN_Buffer_AppendByte(p_buffer, ':'); /* member "firstDate"*/ if (p_struct->firstDate) GWEN_Buffer_AppendString(p_buffer, GWEN_Date_GetString(p_struct->firstDate)); GWEN_Buffer_AppendByte(p_buffer, ':'); /* member "lastDate"*/ if (p_struct->lastDate) GWEN_Buffer_AppendString(p_buffer, GWEN_Date_GetString(p_struct->lastDate)); GWEN_Buffer_AppendByte(p_buffer, ':'); /* member "nextDate"*/ if (p_struct->nextDate) GWEN_Buffer_AppendString(p_buffer, GWEN_Date_GetString(p_struct->nextDate)); GWEN_Buffer_AppendByte(p_buffer, ':'); /* member "unitId"*/ if (p_struct->unitId) GWEN_Buffer_AppendString(p_buffer, p_struct->unitId); GWEN_Buffer_AppendByte(p_buffer, ':'); /* member "unitIdNameSpace"*/ if (p_struct->unitIdNameSpace) GWEN_Buffer_AppendString(p_buffer, p_struct->unitIdNameSpace); GWEN_Buffer_AppendByte(p_buffer, ':'); /* member "tickerSymbol"*/ if (p_struct->tickerSymbol) GWEN_Buffer_AppendString(p_buffer, p_struct->tickerSymbol); GWEN_Buffer_AppendByte(p_buffer, ':'); /* member "units"*/ if (p_struct->units) { double d=AB_Value_GetValueAsDouble(p_struct->units); char numbuf[32]; snprintf(numbuf, sizeof(numbuf)-1, "%.4f", d); numbuf[sizeof(numbuf)-1]=0; GWEN_Buffer_AppendString(p_buffer, numbuf); } GWEN_Buffer_AppendByte(p_buffer, ':'); /* member "unitPriceValue"*/ if (p_struct->unitPriceValue) { double d=AB_Value_GetValueAsDouble(p_struct->unitPriceValue); char numbuf[32]; snprintf(numbuf, sizeof(numbuf)-1, "%.4f", d); numbuf[sizeof(numbuf)-1]=0; GWEN_Buffer_AppendString(p_buffer, numbuf); } GWEN_Buffer_AppendByte(p_buffer, ':'); /* member "unitPriceDate"*/ if (p_struct->unitPriceDate) GWEN_Buffer_AppendString(p_buffer, GWEN_Date_GetString(p_struct->unitPriceDate)); GWEN_Buffer_AppendByte(p_buffer, ':'); /* member "commissionValue"*/ if (p_struct->commissionValue) { double d=AB_Value_GetValueAsDouble(p_struct->commissionValue); char numbuf[32]; snprintf(numbuf, sizeof(numbuf)-1, "%.4f", d); numbuf[sizeof(numbuf)-1]=0; GWEN_Buffer_AppendString(p_buffer, numbuf); } GWEN_Buffer_AppendByte(p_buffer, ':'); /* member "estatementNumber"*/ { char numbuf[32]; snprintf(numbuf, sizeof(numbuf)-1, "%d", p_struct->estatementNumber); numbuf[sizeof(numbuf)-1]=0; GWEN_Buffer_AppendString(p_buffer, numbuf); } GWEN_Buffer_AppendByte(p_buffer, ':'); /* member "estatementMaxEntries"*/ { char numbuf[32]; snprintf(numbuf, sizeof(numbuf)-1, "%d", p_struct->estatementMaxEntries); numbuf[sizeof(numbuf)-1]=0; GWEN_Buffer_AppendString(p_buffer, numbuf); } GWEN_Buffer_AppendByte(p_buffer, ':'); /* member "memo"*/ if (p_struct->memo) GWEN_Buffer_AppendString(p_buffer, p_struct->memo); GWEN_Buffer_AppendByte(p_buffer, ':'); /* member "hash" doesn't have with_hash flag, ignoring */ } int AB_Transaction_GenerateHash(AB_TRANSACTION *st){ GWEN_BUFFER *buf; int rv; GWEN_MDIGEST *md; assert(st); buf=GWEN_Buffer_new(0, 256, 0, 1); AB_Transaction_toHashString(st, buf); md=GWEN_MDigest_Rmd160_new(); rv=GWEN_MDigest_Begin(md); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); GWEN_MDigest_free(md); GWEN_Buffer_free(buf); return rv; } rv=GWEN_MDigest_Update(md, (const uint8_t*)GWEN_Buffer_GetStart(buf), GWEN_Buffer_GetUsedBytes(buf)); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); GWEN_MDigest_free(md); GWEN_Buffer_free(buf); return rv; } rv=GWEN_MDigest_End(md); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); GWEN_MDigest_free(md); GWEN_Buffer_free(buf); return rv; } GWEN_Buffer_Reset(buf); rv=GWEN_Text_ToHexBuffer((const char*)GWEN_MDigest_GetDigestPtr(md), GWEN_MDigest_GetDigestSize(md), buf, 0, 0, 0); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); GWEN_MDigest_free(md); GWEN_Buffer_free(buf); return rv; } GWEN_MDigest_free(md); AB_Transaction_SetHash(st, GWEN_Buffer_GetStart(buf)); GWEN_Buffer_free(buf); return 0; } int AB_Transaction_MatchTypeAndCommand(const AB_TRANSACTION *t, int ty, int cmd) { int match=1; if (match) { if ((ty > AB_Transaction_TypeNone) && (t->type!=ty)) { return 0; } } if (match) { if ((cmd > AB_Transaction_CommandNone) && (t->command!=cmd)) { return 0; } } if (match) { if ((cmd < AB_Transaction_CommandNone) && (t->command <= AB_Transaction_CommandNone)) { return 0; } } /* matches */ return 1; } AB_TRANSACTION * AB_Transaction_List_FindFirstByType(const AB_TRANSACTION_LIST *tl, int ty, int cmd) { if (tl) { AB_TRANSACTION *t; t=AB_Transaction_List_First(tl); while(t) { if (AB_Transaction_MatchTypeAndCommand(t, ty, cmd)) return t; t=AB_Transaction_List_Next(t); } } return NULL; } AB_TRANSACTION * AB_Transaction_List_FindNextByType(const AB_TRANSACTION *tPrev, int ty, int cmd) { if (tPrev) { AB_TRANSACTION *t; t=AB_Transaction_List_Next(tPrev); while(t) { if (AB_Transaction_MatchTypeAndCommand(t, ty, cmd)) return t; t=AB_Transaction_List_Next(t); } } return NULL; } int AB_Transaction_List_RemoveByType(AB_TRANSACTION_LIST *tl, int ty, int cmd) { int cntRemoved=0; if (tl) { AB_TRANSACTION *t; t=AB_Transaction_List_First(tl); while(t) { AB_TRANSACTION *tNext; tNext=AB_Transaction_List_Next(t); if (AB_Transaction_MatchTypeAndCommand(t, ty, cmd)) { AB_Transaction_List_Del(t); AB_Transaction_free(t); cntRemoved++; } t=tNext; } } return cntRemoved; } int AB_Transaction_List_KeepByType(AB_TRANSACTION_LIST *tl, int ty, int cmd) { int cntRemoved=0; if (tl) { AB_TRANSACTION *t; t=AB_Transaction_List_First(tl); while(t) { AB_TRANSACTION *tNext; tNext=AB_Transaction_List_Next(t); if (! AB_Transaction_MatchTypeAndCommand(t, ty, cmd)) { AB_Transaction_List_Del(t); AB_Transaction_free(t); cntRemoved++; } t=tNext; } } return cntRemoved; } int AB_Transaction_List_CountByType(const AB_TRANSACTION_LIST *tl, int ty, int cmd) { int count=0; if (tl) { AB_TRANSACTION *t; t=AB_Transaction_List_First(tl); while(t) { if (AB_Transaction_MatchTypeAndCommand(t, ty, cmd)) count++; t=AB_Transaction_List_Next(t); } } return count; } const AB_TRANSACTION * AB_Transaction_List_ForEachByType(const AB_TRANSACTION_LIST *tl, AB_TRANSACTION_LIST_FOREACHBYTYPE_CB fn, void *user_data, int ty, int cmd) { if (tl) { const AB_TRANSACTION *t; t=AB_Transaction_List_First(tl); while(t) { if (AB_Transaction_MatchTypeAndCommand(t, ty, cmd)) { const AB_TRANSACTION *tReturned; tReturned=fn(t, user_data); if (tReturned) return tReturned; } t=AB_Transaction_List_Next(t); } } return NULL; } AB_TRANSACTION * AB_Transaction_List_FindName(const AB_TRANSACTION_LIST *tl, int ty, const char *ns, const char *n) { if (tl) { AB_TRANSACTION *t; t=AB_Transaction_List_First(tl); while(t) { if ( (ty==AB_Transaction_TypeNone || AB_Transaction_GetType(t)==ty) && (ns==NULL || 0==GWEN_Text_Compare(ns, t->unitIdNameSpace, 1)) && (n==NULL || 0==GWEN_Text_Compare(n, t->unitId, 1)) ) return t; t=AB_Transaction_List_Next(t); } } return NULL; } int AB_Transaction_List_WriteDb(const AB_TRANSACTION_LIST *tl, GWEN_DB_NODE *db) { if (tl) { const AB_TRANSACTION *t; t=AB_Transaction_List_First(tl); while(t) { GWEN_DB_NODE *dbT; int rv; dbT=GWEN_DB_Group_new("transaction"); rv=AB_Transaction_WriteDb(t, dbT); if (rv < 0) { DBG_ERROR(AQBANKING_LOGDOMAIN, "here (%d)", rv); GWEN_DB_Group_free(dbT); return rv; } else { GWEN_DB_AddGroup(db, dbT); } t=AB_Transaction_List_Next(t); } } return 0; } int AB_Transaction_List_ReadDb(AB_TRANSACTION_LIST *tl, GWEN_DB_NODE *db) { if (tl && db) { GWEN_DB_NODE *dbT; dbT=GWEN_DB_GetFirstGroup(db); while(dbT) { AB_TRANSACTION *t; t=AB_Transaction_fromDb(dbT); if (t) { AB_Transaction_List_Add(t, tl); } dbT=GWEN_DB_GetNextGroup(dbT); } } else { DBG_ERROR(AQBANKING_LOGDOMAIN, "Either list or db missing"); return GWEN_ERROR_INVALID; } return 0; } void AB_Transaction_AddPurposeLine(AB_TRANSACTION *t, const char *s) { assert(t); if (s && *s) { if (t->purpose && *(t->purpose)) { GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(tbuf, t->purpose); GWEN_Buffer_AppendString(tbuf, "\n"); GWEN_Buffer_AppendString(tbuf, s); AB_Transaction_SetPurpose(t, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } else AB_Transaction_SetPurpose(t, s); } else { DBG_ERROR(AQBANKING_LOGDOMAIN, "Not adding empty string"); } } void AB_Transaction_SetPurposeFromStringList(AB_TRANSACTION *t, const GWEN_STRINGLIST *sl) { assert(t); if (sl) { GWEN_STRINGLISTENTRY *se; GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 256, 0, 1); se=GWEN_StringList_FirstEntry(sl); while(se) { const char *s; s=GWEN_StringListEntry_Data(se); if (s && *s) { if (GWEN_Buffer_GetUsedBytes(tbuf)) GWEN_Buffer_AppendString(tbuf, "\n"); GWEN_Buffer_AppendString(tbuf, s); } se=GWEN_StringListEntry_Next(se); } AB_Transaction_SetPurpose(t, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } else { AB_Transaction_SetPurpose(t, NULL); } } GWEN_STRINGLIST *AB_Transaction_GetPurposeAsStringList(const AB_TRANSACTION *t) { const char *s; assert(t); s=AB_Transaction_GetPurpose(t); if (s && *s) { GWEN_STRINGLIST *stringList; stringList=GWEN_StringList_fromString(s, "\n", 0); return stringList; } return NULL; } void AB_Transaction_AddCategory(AB_TRANSACTION *t, const char *s) { assert(t); if (s && *s) { if (t->category && *(t->category)) { GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(tbuf, t->category); GWEN_Buffer_AppendString(tbuf, "\n"); GWEN_Buffer_AppendString(tbuf, s); AB_Transaction_SetPurpose(t, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } else AB_Transaction_SetCategory(t, s); } else { DBG_ERROR(AQBANKING_LOGDOMAIN, "Not adding empty string"); } } void AB_Transaction_SetCategoryFromStringList(AB_TRANSACTION *t, const GWEN_STRINGLIST *sl) { assert(t); if (sl) { GWEN_STRINGLISTENTRY *se; GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 256, 0, 1); se=GWEN_StringList_FirstEntry(sl); while(se) { const char *s; s=GWEN_StringListEntry_Data(se); if (s && *s) { if (GWEN_Buffer_GetUsedBytes(tbuf)) GWEN_Buffer_AppendString(tbuf, "\n"); GWEN_Buffer_AppendString(tbuf, s); } se=GWEN_StringListEntry_Next(se); } AB_Transaction_SetCategory(t, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } else { AB_Transaction_SetCategory(t, NULL); } } static AB_TRANSACTION *AB_Transaction_List2__freeAll_cb(AB_TRANSACTION *t, void *user_data) { AB_Transaction_free(t); return NULL; } int AB_Transaction_List2_freeAll(AB_TRANSACTION_LIST2 *tl) { if (tl) { AB_Transaction_List2_ForEach(tl, AB_Transaction_List2__freeAll_cb, NULL); AB_Transaction_List2_free(tl); } else { DBG_ERROR(AQBANKING_LOGDOMAIN, "List missing"); return GWEN_ERROR_INVALID; } return 0; } /* code headers */ aqbanking-6.6.1/src/libs/aqbanking/types/ab_reference_account.tm20000664000175000017500000000032215037736054021770 00000000000000 AB_REFERENCE_ACCOUNT AB_ReferenceAccount aqbanking-6.6.1/src/libs/aqbanking/types/ab_transaction_limits_list.tm20000664000175000017500000000040415037736054023260 00000000000000 AB_TRANSACTION_LIMITS_LIST AB_TransactionLimits_List aqbanking-6.6.1/src/libs/aqbanking/types/ab_transaction_limits_list2.tm20000664000175000017500000000040715037736054023345 00000000000000 AB_TRANSACTION_LIMITS_LIST2 AB_TransactionLimits_List2 aqbanking-6.6.1/src/libs/aqbanking/banking_init.c0000664000175000017500000004163114627071733016674 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ /* This file is included by banking.c */ #ifdef OS_WIN32 # include #endif static uint32_t ab_plugin_init_count=0; static /*@null@*/GWEN_PLUGIN_MANAGER *ab_pluginManagerBankInfo=NULL; static /*@null@*/GWEN_PLUGIN_MANAGER *ab_pluginManagerProvider=NULL; static /*@null@*/GWEN_PLUGIN_MANAGER *ab_pluginManagerImExporter=NULL; static /*@null@*/AB_BANKINFO_PLUGIN_LIST *ab_bankInfoPlugins=NULL; static /*@null@*/AB_IMEXPORTER_LIST *ab_imexporters=NULL; #define AB_DBIO_FOLDER "dbio" static int _pluginSystemInit(void); static int _pluginSystemFini(void); static void _defineLocalePaths(void); static void _defineSysconfPaths(void); static void _defineDataPaths(void); static void _defineWizardPaths(void); static void _bindLocale(void); static int _createPluginManagers(void); static GWEN_PLUGIN_MANAGER *_createPluginManager(const char *pluginName, const char *winRegKey, const char *pluginFolder); static int _addPathsForDbioPlugins(void); static void _setupLogging(void); int AB_Banking_Init(AB_BANKING *ab) { int rv; assert(ab); /* do basic initialisation for all AB_BANKING objects */ rv=_pluginSystemInit(); if (rv) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); _pluginSystemFini(); return rv; } if (ab->initCount==0) { uint32_t currentVersion; GWEN_DB_NODE *db=NULL; currentVersion= (AQBANKING_VERSION_MAJOR<<24) | (AQBANKING_VERSION_MINOR<<16) | (AQBANKING_VERSION_PATCHLEVEL<<8) | AQBANKING_VERSION_BUILD; /* check for config manager (created by AB_Banking_Init) */ if (ab->configMgr==NULL) { DBG_ERROR(AQBANKING_LOGDOMAIN, "No config manager. Maybe the gwenhywfar plugins are not installed correctly?"); _pluginSystemFini(); return GWEN_ERROR_GENERIC; } /* load main group, check version */ rv=GWEN_ConfigMgr_GetGroup(ab->configMgr, AB_CFG_GROUP_MAIN, "config", &db); if (rv<0) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Could not load main config group (%d)", rv); _pluginSystemFini(); return rv; } ab->lastVersion=(uint32_t) GWEN_DB_GetIntValue(db, "lastVersion", 0, 0); GWEN_DB_Group_free(db); /* check whether we need to update */ if ((ab->lastVersion>0) && (ab->lastVersionlastVersion, currentVersion); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); _pluginSystemFini(); return rv; } } } ab->initCount++; return 0; } int AB_Banking_Fini(AB_BANKING *ab) { int rv; /* deinit local stuff */ if (ab->initCount<1) { DBG_ERROR(AQBANKING_LOGDOMAIN, "AqBanking object not initialized!"); return GWEN_ERROR_INVALID; } if (--(ab->initCount)==0) { GWEN_DB_NODE *db=NULL; /* check for config manager (created by AB_Banking_Init) */ if (ab->configMgr==NULL) { DBG_ERROR(AQBANKING_LOGDOMAIN, "No config manager (maybe the gwenhywfar plugins are not installed?"); return GWEN_ERROR_GENERIC; } /* lock group */ rv=GWEN_ConfigMgr_LockGroup(ab->configMgr, AB_CFG_GROUP_MAIN, "config"); if (rv<0) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Unable to lock main config group (%d)", rv); return rv; } /* load group (is locked now) */ rv=GWEN_ConfigMgr_GetGroup(ab->configMgr, AB_CFG_GROUP_MAIN, "config", &db); if (rv<0) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Could not load main config group (%d)", rv); GWEN_ConfigMgr_UnlockGroup(ab->configMgr, AB_CFG_GROUP_MAIN, "config"); return rv; } /* modify group */ GWEN_DB_SetIntValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "lastVersion", (AQBANKING_VERSION_MAJOR<<24) | (AQBANKING_VERSION_MINOR<<16) | (AQBANKING_VERSION_PATCHLEVEL<<8) | AQBANKING_VERSION_BUILD); /* save group (still locked) */ rv=GWEN_ConfigMgr_SetGroup(ab->configMgr, AB_CFG_GROUP_MAIN, "config", db); if (rv<0) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Could not save main config group (%d)", rv); GWEN_ConfigMgr_UnlockGroup(ab->configMgr, AB_CFG_GROUP_MAIN, "config"); GWEN_DB_Group_free(db); return rv; } /* unlock group */ rv=GWEN_ConfigMgr_UnlockGroup(ab->configMgr, AB_CFG_GROUP_MAIN, "config"); if (rv<0) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Could not unlock main config group (%d)", rv); GWEN_DB_Group_free(db); return rv; } GWEN_DB_Group_free(db); /* clear all active crypt token */ AB_Banking_ClearCryptTokenList(ab); } /* if (--(ab->initCount)==0) */ /* deinit global stuff (keeps its own counter) */ rv=_pluginSystemFini(); if (rv) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); } return 0; } /* TODO: Directly create plugins and pluginDescr and add those to the plugin managers. * Don't setup paths here because they are no longer needed after we switched from loaded to * directly added plugins. * Start with dbio plugin "swift". * GWEN_PLUGIN_MANAGER: Add flag "DONT_LOAD" */ int _pluginSystemInit(void) { if (ab_plugin_init_count==0) { int rv; rv=GWEN_Init(); if (rv) { DBG_ERROR_ERR(AQBANKING_LOGDOMAIN, rv); return rv; } _setupLogging(); _defineLocalePaths(); _bindLocale(); _defineSysconfPaths(); _defineDataPaths(); _defineWizardPaths(); rv=_createPluginManagers(); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); return rv; } rv=_addPathsForDbioPlugins(); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); return rv; } ab_imexporters=AB_ImExporter_List_new(); ab_bankInfoPlugins=AB_BankInfoPlugin_List_new(); } ab_plugin_init_count++; return 0; } int _pluginSystemFini(void) { if (ab_plugin_init_count) { if (--ab_plugin_init_count==0) { AB_BankInfoPlugin_List_free(ab_bankInfoPlugins); ab_bankInfoPlugins=NULL; AB_ImExporter_List_free(ab_imexporters); ab_imexporters=NULL; /* unregister and unload provider plugin manager */ if (ab_pluginManagerProvider) { if (GWEN_PluginManager_Unregister(ab_pluginManagerProvider)) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Could not unregister provider plugin manager"); } GWEN_PluginManager_free(ab_pluginManagerProvider); ab_pluginManagerProvider=NULL; } /* unregister and unload bankinfo plugin manager */ if (ab_pluginManagerBankInfo) { if (GWEN_PluginManager_Unregister(ab_pluginManagerBankInfo)) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Could not unregister bankinfo plugin manager"); } GWEN_PluginManager_free(ab_pluginManagerBankInfo); ab_pluginManagerBankInfo=NULL; } /* unregister and unload imexporters plugin manager */ if (ab_pluginManagerImExporter) { if (GWEN_PluginManager_Unregister(ab_pluginManagerImExporter)) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Could not unregister imexporter plugin manager"); } GWEN_PluginManager_free(ab_pluginManagerImExporter); ab_pluginManagerImExporter=NULL; } /* undefine our own paths */ GWEN_PathManager_UndefinePath(AB_PM_LIBNAME, AB_PM_LOCALEDIR); GWEN_PathManager_UndefinePath(AB_PM_LIBNAME, AB_PM_DATADIR); GWEN_PathManager_UndefinePath(AB_PM_LIBNAME, AB_PM_SYSCONFDIR); GWEN_PathManager_UndefinePath(AB_PM_LIBNAME, AB_PM_WIZARDDIR); /* remove AqBanking additions to all pathmanagers */ GWEN_PathManager_RemovePaths(AB_PM_LIBNAME); GWEN_Logger_Close(AQBANKING_LOGDOMAIN); GWEN_Fini(); } } else { DBG_WARN(AQBANKING_LOGDOMAIN, "_pluginSystemFini() called too often!"); } return 0; } #ifdef OS_WIN32 BOOL APIENTRY DllMain(HINSTANCE hInst, DWORD reason, LPVOID reserved) { int err; switch (reason) { case DLL_PROCESS_ATTACH: err=GWEN_Init(); if (err) { fprintf(stderr, "Could not initialize Gwenhywfar, aborting\n"); return FALSE; } /* DEBUG */ /*fprintf(stderr, "Gwenhywfar initialized.\n");*/ break; case DLL_PROCESS_DETACH: err=GWEN_Fini(); if (err) { fprintf(stderr, "Could not deinitialize Gwenhywfar\n"); } /* DEBUG */ /*fprintf(stderr, "Gwenhywfar deinitialized.\n");*/ break; case DLL_THREAD_ATTACH: break; case DLL_THREAD_DETACH: break; } return TRUE; } #endif void _defineLocalePaths(void) { /* define locale paths */ GWEN_PathManager_DefinePath(AB_PM_LIBNAME, AB_PM_LOCALEDIR); GWEN_PathManager_AddPathFromWinReg(AB_PM_LIBNAME, AB_PM_LIBNAME, AB_PM_LOCALEDIR, AB_BANKING_REGKEY_PATHS, AB_BANKING_REGKEY_LOCALEDIR); #if defined(OS_WIN32) || defined(ENABLE_LOCAL_INSTALL) /* add folder relative to EXE */ GWEN_PathManager_AddRelPath(AB_PM_LIBNAME, AB_PM_LIBNAME, AB_PM_LOCALEDIR, LOCALEDIR, GWEN_PathManager_RelModeExe); #else /* add absolute folder */ GWEN_PathManager_AddPath(AB_PM_LIBNAME, AB_PM_LIBNAME, AB_PM_LOCALEDIR, LOCALEDIR); #endif } void _defineSysconfPaths(void) { GWEN_PathManager_DefinePath(AB_PM_LIBNAME, AB_PM_SYSCONFDIR); GWEN_PathManager_AddPathFromWinReg(AB_PM_LIBNAME, AB_PM_LIBNAME, AB_PM_SYSCONFDIR, AB_BANKING_REGKEY_PATHS, AB_BANKING_REGKEY_SYSCONFDIR); #if defined(OS_WIN32) || defined(ENABLE_LOCAL_INSTALL) /* add folder relative to EXE */ GWEN_PathManager_AddRelPath(AB_PM_LIBNAME, AB_PM_LIBNAME, AB_PM_SYSCONFDIR, AQBANKING_SYSCONF_DIR, GWEN_PathManager_RelModeExe); #else /* add absolute folder */ GWEN_PathManager_AddPath(AB_PM_LIBNAME, AB_PM_LIBNAME, AB_PM_SYSCONFDIR, AQBANKING_SYSCONF_DIR); #endif } void _defineDataPaths(void) { GWEN_PathManager_DefinePath(AB_PM_LIBNAME, AB_PM_DATADIR); GWEN_PathManager_AddPathFromWinReg(AB_PM_LIBNAME, AB_PM_LIBNAME, AB_PM_DATADIR, AB_BANKING_REGKEY_PATHS, AB_BANKING_REGKEY_DATADIR); #if defined(OS_WIN32) || defined(ENABLE_LOCAL_INSTALL) /* add folder relative to EXE */ GWEN_PathManager_AddRelPath(AB_PM_LIBNAME, AB_PM_LIBNAME, AB_PM_DATADIR, AQBANKING_DATA_DIR, GWEN_PathManager_RelModeExe); #else /* add absolute folder */ GWEN_PathManager_AddPath(AB_PM_LIBNAME, AB_PM_LIBNAME, AB_PM_DATADIR, AQBANKING_DATA_DIR); #endif } void _defineWizardPaths(void) { GWEN_PathManager_DefinePath(AB_PM_LIBNAME, AB_PM_WIZARDDIR); GWEN_PathManager_AddPathFromWinReg(AB_PM_LIBNAME, AB_PM_LIBNAME, AB_PM_WIZARDDIR, AB_BANKING_REGKEY_PATHS, AB_BANKING_REGKEY_WIZARDDIR); #if defined(OS_WIN32) || defined(ENABLE_LOCAL_INSTALL) /* add folder relative to EXE */ GWEN_PathManager_AddRelPath(AB_PM_LIBNAME, AB_PM_LIBNAME, AB_PM_WIZARDDIR, AQBANKING_PLUGINS DIRSEP AB_WIZARD_FOLDER, GWEN_PathManager_RelModeExe); #else /* add absolute folder */ GWEN_PathManager_AddPath(AB_PM_LIBNAME, AB_PM_LIBNAME, AB_PM_WIZARDDIR, AQBANKING_PLUGINS DIRSEP AB_WIZARD_FOLDER); #endif } void _bindLocale(void) { GWEN_STRINGLIST *sl; const char *localedir; int rv; sl=GWEN_PathManager_GetPaths(AB_PM_LIBNAME, AB_PM_LOCALEDIR); localedir=GWEN_StringList_FirstString(sl); rv=GWEN_I18N_BindTextDomain_Dir(PACKAGE, localedir); if (rv) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Could not bind textdomain (%d)", rv); } else { rv=GWEN_I18N_BindTextDomain_Codeset(PACKAGE, "UTF-8"); if (rv) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Could not set codeset (%d)", rv); } } GWEN_StringList_free(sl); } int _createPluginManagers(void) { ab_pluginManagerBankInfo=_createPluginManager("bankinfo", AB_BANKING_REGKEY_BANKINFODIR, AQBANKING_PLUGINS DIRSEP AB_BANKINFO_PLUGIN_FOLDER); if (ab_pluginManagerBankInfo==NULL) { DBG_INFO(AQBANKING_LOGDOMAIN, "here"); return GWEN_ERROR_GENERIC; } ab_pluginManagerProvider=_createPluginManager("provider", AB_BANKING_REGKEY_PROVIDERDIR, AQBANKING_PLUGINS DIRSEP AB_PROVIDER_FOLDER); if (ab_pluginManagerProvider==NULL) { DBG_INFO(AQBANKING_LOGDOMAIN, "here"); return GWEN_ERROR_GENERIC; } ab_pluginManagerImExporter=_createPluginManager("imexporter", AB_BANKING_REGKEY_IMPORTERDIR, AQBANKING_PLUGINS DIRSEP AB_IMEXPORTER_FOLDER); if (ab_pluginManagerImExporter==NULL) { DBG_INFO(AQBANKING_LOGDOMAIN, "here"); return GWEN_ERROR_GENERIC; } return 0; } GWEN_PLUGIN_MANAGER *_createPluginManager(const char *pluginName, const char *winRegKey, const char *pluginFolder) { GWEN_PLUGIN_MANAGER *pm; int rv; DBG_INFO(AQBANKING_LOGDOMAIN, "Registering %s plugin manager", pluginName); pm=GWEN_PluginManager_new(pluginName, AB_PM_LIBNAME); rv=GWEN_PluginManager_Register(pm); if (rv<0) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Could not register %s plugin manager (%d)", pluginName, rv); return NULL; } GWEN_PluginManager_AddPathFromWinReg(pm, AB_PM_LIBNAME, AB_BANKING_REGKEY_PATHS, winRegKey); #if defined(OS_WIN32) || defined(ENABLE_LOCAL_INSTALL) /* add folder relative to EXE */ GWEN_PluginManager_AddRelPath(pm, AB_PM_LIBNAME, pluginFolder, GWEN_PathManager_RelModeExe); #else /* add absolute folder */ GWEN_PluginManager_AddPath(pm, AB_PM_LIBNAME, pluginFolder); #endif return pm; } int _addPathsForDbioPlugins(void) { GWEN_PLUGIN_MANAGER *pm; /* insert DBIO plugin folder */ pm=GWEN_PluginManager_FindPluginManager("dbio"); if (pm) { #if defined(OS_WIN32) || defined(ENABLE_LOCAL_INSTALL) /* insert folder relative to EXE */ GWEN_PluginManager_InsertRelPath(pm, AB_PM_LIBNAME, AQBANKING_PLUGINS DIRSEP AB_DBIO_FOLDER, GWEN_PathManager_RelModeExe); #else /* add absolute folder */ GWEN_PluginManager_InsertPath(pm, AB_PM_LIBNAME, AQBANKING_PLUGINS DIRSEP AB_DBIO_FOLDER); #endif } else { DBG_ERROR(AQBANKING_LOGDOMAIN, "Could not find DBIO plugin manager, maybe GWEN_Init() was not called?"); return GWEN_ERROR_GENERIC; } return 0; } void _setupLogging(void) { const char *s; if (!GWEN_Logger_IsOpen(AQBANKING_LOGDOMAIN)) { GWEN_Logger_Open(AQBANKING_LOGDOMAIN, "aqbanking", 0, GWEN_LoggerType_Console, GWEN_LoggerFacility_User); GWEN_Logger_SetLevel(AQBANKING_LOGDOMAIN, GWEN_LoggerLevel_Notice); } s=getenv("AQBANKING_LOGLEVEL"); if (s && *s) { GWEN_LOGGER_LEVEL ll; ll=GWEN_Logger_Name2Level(s); GWEN_Logger_SetLevel(AQBANKING_LOGDOMAIN, ll); } DBG_INFO(AQBANKING_LOGDOMAIN, "AqBanking v" AQBANKING_VERSION_FULL_STRING ": initialising"); } aqbanking-6.6.1/src/libs/aqbanking/banking_user.c0000664000175000017500000000366614043610744016706 00000000000000/*************************************************************************** begin : Wed Nov 28 2018 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ /* This file is included by banking.c */ int AB_Banking_Read_UserConfig(const AB_BANKING *ab, uint32_t uid, int doLock, int doUnlock, GWEN_DB_NODE **pDb) { int rv; DBG_INFO(AQBANKING_LOGDOMAIN, "Reading user config (%u)", (unsigned int) uid); rv=AB_Banking_ReadConfigGroup(ab, AB_CFG_GROUP_USERS, uid, doLock, doUnlock, pDb); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); return rv; } return 0; } int AB_Banking_Has_UserConfig(const AB_BANKING *ab, uint32_t uid) { int rv; rv=AB_Banking_HasConfigGroup(ab, AB_CFG_GROUP_USERS, uid); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); return rv; } return 0; } int AB_Banking_Write_UserConfig(AB_BANKING *ab, uint32_t uid, int doLock, int doUnlock, GWEN_DB_NODE *db) { int rv; rv=AB_Banking_WriteConfigGroup(ab, AB_CFG_GROUP_USERS, uid, doLock, doUnlock, db); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); return rv; } return 0; } int AB_Banking_Delete_UserConfig(AB_BANKING *ab, uint32_t uid) { int rv; rv=AB_Banking_DeleteConfigGroup(ab, AB_CFG_GROUP_USERS, uid); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); return rv; } return 0; } int AB_Banking_Unlock_UserConfig(AB_BANKING *ab, uint32_t uid) { int rv; rv=AB_Banking_UnlockConfigGroup(ab, AB_CFG_GROUP_USERS, uid); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); return rv; } return 0; } aqbanking-6.6.1/src/libs/aqbanking/typemaker2/0000755000175000017500000000000015037736156016233 500000000000000aqbanking-6.6.1/src/libs/aqbanking/typemaker2/Makefile.in0000644000175000017500000005562715037736024020231 00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/libs/aqbanking/typemaker2 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/distri.m4 $(top_srcdir)/m4/gwenhywfar.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/os.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir distdir-am am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ADD_ACLOCAL_FLAGS = @ADD_ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AQBANKING_CLI_VERSION_STRING = @AQBANKING_CLI_VERSION_STRING@ AQBANKING_FINTS_VERSION_STRING = @AQBANKING_FINTS_VERSION_STRING@ AQBANKING_SO_AGE = @AQBANKING_SO_AGE@ AQBANKING_SO_CURRENT = @AQBANKING_SO_CURRENT@ AQBANKING_SO_EFFECTIVE = @AQBANKING_SO_EFFECTIVE@ AQBANKING_SO_REVISION = @AQBANKING_SO_REVISION@ AQBANKING_VERSION_BUILD = @AQBANKING_VERSION_BUILD@ AQBANKING_VERSION_FULL_STRING = @AQBANKING_VERSION_FULL_STRING@ AQBANKING_VERSION_MAJOR = @AQBANKING_VERSION_MAJOR@ AQBANKING_VERSION_MINOR = @AQBANKING_VERSION_MINOR@ AQBANKING_VERSION_PATCHLEVEL = @AQBANKING_VERSION_PATCHLEVEL@ AQBANKING_VERSION_RELEASE_STRING = @AQBANKING_VERSION_RELEASE_STRING@ AQBANKING_VERSION_STRING = @AQBANKING_VERSION_STRING@ AQBANKING_VERSION_TAG = @AQBANKING_VERSION_TAG@ AQEBICS_CFLAGS = @AQEBICS_CFLAGS@ AQEBICS_LIBS = @AQEBICS_LIBS@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATETIME = @DATETIME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_EXCLUDE_PATTERNS = @DOXYGEN_EXCLUDE_PATTERNS@ DOXYGEN_FILE_PATTERNS = @DOXYGEN_FILE_PATTERNS@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENGUI_GTK2_CFLAGS = @GWENGUI_GTK2_CFLAGS@ GWENGUI_GTK2_LIBS = @GWENGUI_GTK2_LIBS@ GWENHYWFAR_MINIMUM_VERSION = @GWENHYWFAR_MINIMUM_VERSION@ HAVE_GWENGUI_GTK2 = @HAVE_GWENGUI_GTK2@ HAVE_I18N = @HAVE_I18N@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIBXSLT_CFLAGS = @LIBXSLT_CFLAGS@ LIBXSLT_LIBS = @LIBXSLT_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_SUPPORTS_QT = @MSGFMT_SUPPORTS_QT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ TUTORIALS = @TUTORIALS@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XMLMERGE = @XMLMERGE@ XMLSEC_CFLAGS = @XMLSEC_CFLAGS@ XMLSEC_LIBS = @XMLSEC_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ aqbanking_backends = @aqbanking_backends@ aqbanking_cfg_searchdir = @aqbanking_cfg_searchdir@ aqbanking_data_searchdir = @aqbanking_data_searchdir@ aqbanking_headerdir = @aqbanking_headerdir@ aqbanking_headerdir_am = @aqbanking_headerdir_am@ aqbanking_includes = @aqbanking_includes@ aqbanking_internal_libs = @aqbanking_internal_libs@ aqbanking_ldflags = @aqbanking_ldflags@ aqbanking_libs = @aqbanking_libs@ aqbanking_locale_searchdir = @aqbanking_locale_searchdir@ aqbanking_modules = @aqbanking_modules@ aqbanking_pkgdatadir = @aqbanking_pkgdatadir@ aqbanking_plugin_searchdir = @aqbanking_plugin_searchdir@ aqbanking_plugindir = @aqbanking_plugindir@ aqbanking_plugins_backends_dirs = @aqbanking_plugins_backends_dirs@ aqbanking_plugins_backends_libs = @aqbanking_plugins_backends_libs@ aqbanking_plugins_bankinfo_dirs = @aqbanking_plugins_bankinfo_dirs@ aqbanking_plugins_bankinfo_libs = @aqbanking_plugins_bankinfo_libs@ aqbanking_plugins_imexporters_dirs = @aqbanking_plugins_imexporters_dirs@ aqbanking_plugins_imexporters_libs = @aqbanking_plugins_imexporters_libs@ aqbanking_plugins_parsers_dirs = @aqbanking_plugins_parsers_dirs@ aqbanking_symlinkdir = @aqbanking_symlinkdir@ aqbanking_sys_is_windows = @aqbanking_sys_is_windows@ aqbankingpp_modules = @aqbankingpp_modules@ aqebics_datadir = @aqebics_datadir@ aqebics_includes = @aqebics_includes@ aqebics_internal_libs = @aqebics_internal_libs@ aqebics_ldflags = @aqebics_ldflags@ aqebics_libs = @aqebics_libs@ aqfints_datadir = @aqfints_datadir@ aqhbci_datadir = @aqhbci_datadir@ aqhbci_includes = @aqhbci_includes@ aqhbci_internal_libs = @aqhbci_internal_libs@ aqhbci_ldflags = @aqhbci_ldflags@ aqhbci_libs = @aqhbci_libs@ aqofxconnect_includes = @aqofxconnect_includes@ aqofxconnect_internal_libs = @aqofxconnect_internal_libs@ aqofxconnect_libs = @aqofxconnect_libs@ aqpaypal_includes = @aqpaypal_includes@ aqpaypal_internal_libs = @aqpaypal_internal_libs@ aqpaypal_libs = @aqpaypal_libs@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gmp_libs = @gmp_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_dir = @gwenhywfar_dir@ gwenhywfar_has_crypt = @gwenhywfar_has_crypt@ gwenhywfar_headers = @gwenhywfar_headers@ gwenhywfar_includes = @gwenhywfar_includes@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_plugins = @gwenhywfar_plugins@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ typemaker2_exe = @typemaker2_exe@ visibility_cflags = @visibility_cflags@ with_aqebics = @with_aqebics@ with_aqhbci = @with_aqhbci@ SUBDIRS = c all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libs/aqbanking/typemaker2/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libs/aqbanking/typemaker2/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic clean-libtool cscopelist-am ctags \ ctags-am distclean distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am .PRECIOUS: Makefile sources: typefiles: typedefs: built_sources: cppcheck: # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: aqbanking-6.6.1/src/libs/aqbanking/typemaker2/Makefile.am0000664000175000017500000000011014043610744020167 00000000000000SUBDIRS=c sources: typefiles: typedefs: built_sources: cppcheck: aqbanking-6.6.1/src/libs/aqbanking/typemaker2/c/0000755000175000017500000000000015037736156016455 500000000000000aqbanking-6.6.1/src/libs/aqbanking/typemaker2/c/ab_value_list.tm20000664000175000017500000000032114043610744021616 00000000000000 AB_VALUE_LIST AB_Value_List aqbanking-6.6.1/src/libs/aqbanking/typemaker2/c/ab_value_list2.tm20000664000175000017500000000032414043610744021703 00000000000000 AB_VALUE_LIST2 AB_Value_List2 aqbanking-6.6.1/src/libs/aqbanking/typemaker2/c/ab_user.tm20000664000175000017500000000025514043610744020433 00000000000000 AB_USER AB_User aqbanking-6.6.1/src/libs/aqbanking/typemaker2/c/ab_account.tm20000664000175000017500000000026514043610744021112 00000000000000 AB_ACCOUNT AB_Account aqbanking-6.6.1/src/libs/aqbanking/typemaker2/c/ab_value.tm20000664000175000017500000001015414043610744020570 00000000000000 AB_VALUE AB_Value AQDB_DataType_Amount $(dst)=AB_Value_new(); AB_Value_free($(src)); $(dst)=$(src); $(dst)=AB_Value_dup($(src)); { if ($(dst) && $(src)) $(retval)=AB_Value_Compare($(src), $(dst)); else if ($(src)) $(retval)=1; else if ($(dst)) $(retval)=-1; else $(retval)=0; } if ($(src)) { GWEN_BUFFER *tbuf=GWEN_Buffer_new(0, 64, 0, 1); AB_Value_toString($(src), tbuf); GWEN_XMLNode_SetCharValue($(db), "$(name)", GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } { const char *s; s=GWEN_XMLNode_GetCharValue($(db), "$(name)", NULL); if (s) $(dst)=AB_Value_fromString(s); else $(dst)=$(default); } if ($(src)) { GWEN_BUFFER *tbuf=GWEN_Buffer_new(0, 64, 0, 1); AB_Value_toString($(src), tbuf); $(retval)=AQDB_Object_SetFieldString($(db), $(fieldid), GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } else $(retval)=AQDB_Object_SetFieldString($(db), $(fieldid), NULL); { const char *s; $(retval)=AQDB_Object_GetFieldString($(db), $(fieldId), &s); if ($(retval)>=0 && s) $(dst)=AB_Value_fromString(s); else $(dst)=$(default); } if ($(src)) { GWEN_BUFFER *tbuf=GWEN_Buffer_new(0, 64, 0, 1); AB_Value_toString($(src), tbuf); $(retval)=GWEN_DB_SetCharValue($(db), GWEN_DB_FLAGS_OVERWRITE_VARS, "$(name)", GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } else { GWEN_DB_DeleteVar($(db), "$(name)"); $(retval)=0; } { const char *s; s=GWEN_DB_GetCharValue($(db), "$(name)", 0, NULL); if (s) $(dst)=AB_Value_fromString(s); else $(dst)=$(default); } if ($(src)) { double d=AB_Value_GetValueAsDouble($(src)); char numbuf[32]; snprintf(numbuf, sizeof(numbuf)-1, "%.4f", d); numbuf[sizeof(numbuf)-1]=0; GWEN_Buffer_AppendString($(buffer), numbuf); } NULL const dup const const aqbanking-6.6.1/src/libs/aqbanking/typemaker2/c/ab_provider.tm20000664000175000017500000000027114043610744021305 00000000000000 AB_PROVIDER AB_Provider aqbanking-6.6.1/src/libs/aqbanking/typemaker2/c/Makefile.in0000644000175000017500000004615315037736024020445 00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/libs/aqbanking/typemaker2/c ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/distri.m4 $(top_srcdir)/m4/gwenhywfar.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/os.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(dist_typedata_DATA) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(typedatadir)" DATA = $(dist_typedata_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADD_ACLOCAL_FLAGS = @ADD_ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AQBANKING_CLI_VERSION_STRING = @AQBANKING_CLI_VERSION_STRING@ AQBANKING_FINTS_VERSION_STRING = @AQBANKING_FINTS_VERSION_STRING@ AQBANKING_SO_AGE = @AQBANKING_SO_AGE@ AQBANKING_SO_CURRENT = @AQBANKING_SO_CURRENT@ AQBANKING_SO_EFFECTIVE = @AQBANKING_SO_EFFECTIVE@ AQBANKING_SO_REVISION = @AQBANKING_SO_REVISION@ AQBANKING_VERSION_BUILD = @AQBANKING_VERSION_BUILD@ AQBANKING_VERSION_FULL_STRING = @AQBANKING_VERSION_FULL_STRING@ AQBANKING_VERSION_MAJOR = @AQBANKING_VERSION_MAJOR@ AQBANKING_VERSION_MINOR = @AQBANKING_VERSION_MINOR@ AQBANKING_VERSION_PATCHLEVEL = @AQBANKING_VERSION_PATCHLEVEL@ AQBANKING_VERSION_RELEASE_STRING = @AQBANKING_VERSION_RELEASE_STRING@ AQBANKING_VERSION_STRING = @AQBANKING_VERSION_STRING@ AQBANKING_VERSION_TAG = @AQBANKING_VERSION_TAG@ AQEBICS_CFLAGS = @AQEBICS_CFLAGS@ AQEBICS_LIBS = @AQEBICS_LIBS@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATETIME = @DATETIME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_EXCLUDE_PATTERNS = @DOXYGEN_EXCLUDE_PATTERNS@ DOXYGEN_FILE_PATTERNS = @DOXYGEN_FILE_PATTERNS@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENGUI_GTK2_CFLAGS = @GWENGUI_GTK2_CFLAGS@ GWENGUI_GTK2_LIBS = @GWENGUI_GTK2_LIBS@ GWENHYWFAR_MINIMUM_VERSION = @GWENHYWFAR_MINIMUM_VERSION@ HAVE_GWENGUI_GTK2 = @HAVE_GWENGUI_GTK2@ HAVE_I18N = @HAVE_I18N@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIBXSLT_CFLAGS = @LIBXSLT_CFLAGS@ LIBXSLT_LIBS = @LIBXSLT_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_SUPPORTS_QT = @MSGFMT_SUPPORTS_QT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ TUTORIALS = @TUTORIALS@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XMLMERGE = @XMLMERGE@ XMLSEC_CFLAGS = @XMLSEC_CFLAGS@ XMLSEC_LIBS = @XMLSEC_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ aqbanking_backends = @aqbanking_backends@ aqbanking_cfg_searchdir = @aqbanking_cfg_searchdir@ aqbanking_data_searchdir = @aqbanking_data_searchdir@ aqbanking_headerdir = @aqbanking_headerdir@ aqbanking_headerdir_am = @aqbanking_headerdir_am@ aqbanking_includes = @aqbanking_includes@ aqbanking_internal_libs = @aqbanking_internal_libs@ aqbanking_ldflags = @aqbanking_ldflags@ aqbanking_libs = @aqbanking_libs@ aqbanking_locale_searchdir = @aqbanking_locale_searchdir@ aqbanking_modules = @aqbanking_modules@ aqbanking_pkgdatadir = @aqbanking_pkgdatadir@ aqbanking_plugin_searchdir = @aqbanking_plugin_searchdir@ aqbanking_plugindir = @aqbanking_plugindir@ aqbanking_plugins_backends_dirs = @aqbanking_plugins_backends_dirs@ aqbanking_plugins_backends_libs = @aqbanking_plugins_backends_libs@ aqbanking_plugins_bankinfo_dirs = @aqbanking_plugins_bankinfo_dirs@ aqbanking_plugins_bankinfo_libs = @aqbanking_plugins_bankinfo_libs@ aqbanking_plugins_imexporters_dirs = @aqbanking_plugins_imexporters_dirs@ aqbanking_plugins_imexporters_libs = @aqbanking_plugins_imexporters_libs@ aqbanking_plugins_parsers_dirs = @aqbanking_plugins_parsers_dirs@ aqbanking_symlinkdir = @aqbanking_symlinkdir@ aqbanking_sys_is_windows = @aqbanking_sys_is_windows@ aqbankingpp_modules = @aqbankingpp_modules@ aqebics_datadir = @aqebics_datadir@ aqebics_includes = @aqebics_includes@ aqebics_internal_libs = @aqebics_internal_libs@ aqebics_ldflags = @aqebics_ldflags@ aqebics_libs = @aqebics_libs@ aqfints_datadir = @aqfints_datadir@ aqhbci_datadir = @aqhbci_datadir@ aqhbci_includes = @aqhbci_includes@ aqhbci_internal_libs = @aqhbci_internal_libs@ aqhbci_ldflags = @aqhbci_ldflags@ aqhbci_libs = @aqhbci_libs@ aqofxconnect_includes = @aqofxconnect_includes@ aqofxconnect_internal_libs = @aqofxconnect_internal_libs@ aqofxconnect_libs = @aqofxconnect_libs@ aqpaypal_includes = @aqpaypal_includes@ aqpaypal_internal_libs = @aqpaypal_internal_libs@ aqpaypal_libs = @aqpaypal_libs@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gmp_libs = @gmp_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_dir = @gwenhywfar_dir@ gwenhywfar_has_crypt = @gwenhywfar_has_crypt@ gwenhywfar_headers = @gwenhywfar_headers@ gwenhywfar_includes = @gwenhywfar_includes@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_plugins = @gwenhywfar_plugins@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ typemaker2_exe = @typemaker2_exe@ visibility_cflags = @visibility_cflags@ with_aqebics = @with_aqebics@ with_aqhbci = @with_aqhbci@ typedatadir = $(aqbanking_pkgdatadir)/aqbanking/typemaker2/c dist_typedata_DATA = \ ab_account.tm2 \ ab_user.tm2 \ ab_provider.tm2 \ ab_value.tm2 \ ab_value_list.tm2 \ ab_value_list2.tm2 all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libs/aqbanking/typemaker2/c/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libs/aqbanking/typemaker2/c/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-dist_typedataDATA: $(dist_typedata_DATA) @$(NORMAL_INSTALL) @list='$(dist_typedata_DATA)'; test -n "$(typedatadir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(typedatadir)'"; \ $(MKDIR_P) "$(DESTDIR)$(typedatadir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(typedatadir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(typedatadir)" || exit $$?; \ done uninstall-dist_typedataDATA: @$(NORMAL_UNINSTALL) @list='$(dist_typedata_DATA)'; test -n "$(typedatadir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(typedatadir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(typedatadir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dist_typedataDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-dist_typedataDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am \ install-dist_typedataDATA install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags-am uninstall \ uninstall-am uninstall-dist_typedataDATA .PRECIOUS: Makefile sources: # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: aqbanking-6.6.1/src/libs/aqbanking/typemaker2/c/Makefile.am0000664000175000017500000000032414043610744020420 00000000000000 typedatadir=$(aqbanking_pkgdatadir)/aqbanking/typemaker2/c dist_typedata_DATA=\ ab_account.tm2 \ ab_user.tm2 \ ab_provider.tm2 \ ab_value.tm2 \ ab_value_list.tm2 \ ab_value_list2.tm2 sources: aqbanking-6.6.1/src/libs/aqbanking/system.h0000644000175000017500000000105515037736036015563 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin at libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AQBANKING_SYSTEM_H #define AQBANKING_SYSTEM_H #define AQBANKING_SYS_IS_WINDOWS 0 #define AQBANKING_SYSTEM "linux" #endif aqbanking-6.6.1/src/libs/aqbanking/gui/0000755000175000017500000000000015037736156014734 500000000000000aqbanking-6.6.1/src/libs/aqbanking/gui/Makefile.in0000644000175000017500000006170215037736024016721 00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/libs/aqbanking/gui ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/distri.m4 $(top_srcdir)/m4/gwenhywfar.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/os.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(iheader_HEADERS) \ $(noinst_HEADERS) $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libabgui_la_LIBADD = am_libabgui_la_OBJECTS = abgui.lo libabgui_la_OBJECTS = $(am_libabgui_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/abgui.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libabgui_la_SOURCES) DIST_SOURCES = $(libabgui_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(iheaderdir)" HEADERS = $(iheader_HEADERS) $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADD_ACLOCAL_FLAGS = @ADD_ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AQBANKING_CLI_VERSION_STRING = @AQBANKING_CLI_VERSION_STRING@ AQBANKING_FINTS_VERSION_STRING = @AQBANKING_FINTS_VERSION_STRING@ AQBANKING_SO_AGE = @AQBANKING_SO_AGE@ AQBANKING_SO_CURRENT = @AQBANKING_SO_CURRENT@ AQBANKING_SO_EFFECTIVE = @AQBANKING_SO_EFFECTIVE@ AQBANKING_SO_REVISION = @AQBANKING_SO_REVISION@ AQBANKING_VERSION_BUILD = @AQBANKING_VERSION_BUILD@ AQBANKING_VERSION_FULL_STRING = @AQBANKING_VERSION_FULL_STRING@ AQBANKING_VERSION_MAJOR = @AQBANKING_VERSION_MAJOR@ AQBANKING_VERSION_MINOR = @AQBANKING_VERSION_MINOR@ AQBANKING_VERSION_PATCHLEVEL = @AQBANKING_VERSION_PATCHLEVEL@ AQBANKING_VERSION_RELEASE_STRING = @AQBANKING_VERSION_RELEASE_STRING@ AQBANKING_VERSION_STRING = @AQBANKING_VERSION_STRING@ AQBANKING_VERSION_TAG = @AQBANKING_VERSION_TAG@ AQEBICS_CFLAGS = @AQEBICS_CFLAGS@ AQEBICS_LIBS = @AQEBICS_LIBS@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATETIME = @DATETIME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_EXCLUDE_PATTERNS = @DOXYGEN_EXCLUDE_PATTERNS@ DOXYGEN_FILE_PATTERNS = @DOXYGEN_FILE_PATTERNS@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENGUI_GTK2_CFLAGS = @GWENGUI_GTK2_CFLAGS@ GWENGUI_GTK2_LIBS = @GWENGUI_GTK2_LIBS@ GWENHYWFAR_MINIMUM_VERSION = @GWENHYWFAR_MINIMUM_VERSION@ HAVE_GWENGUI_GTK2 = @HAVE_GWENGUI_GTK2@ HAVE_I18N = @HAVE_I18N@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIBXSLT_CFLAGS = @LIBXSLT_CFLAGS@ LIBXSLT_LIBS = @LIBXSLT_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_SUPPORTS_QT = @MSGFMT_SUPPORTS_QT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ TUTORIALS = @TUTORIALS@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XMLMERGE = @XMLMERGE@ XMLSEC_CFLAGS = @XMLSEC_CFLAGS@ XMLSEC_LIBS = @XMLSEC_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ aqbanking_backends = @aqbanking_backends@ aqbanking_cfg_searchdir = @aqbanking_cfg_searchdir@ aqbanking_data_searchdir = @aqbanking_data_searchdir@ aqbanking_headerdir = @aqbanking_headerdir@ aqbanking_headerdir_am = @aqbanking_headerdir_am@ aqbanking_includes = @aqbanking_includes@ aqbanking_internal_libs = @aqbanking_internal_libs@ aqbanking_ldflags = @aqbanking_ldflags@ aqbanking_libs = @aqbanking_libs@ aqbanking_locale_searchdir = @aqbanking_locale_searchdir@ aqbanking_modules = @aqbanking_modules@ aqbanking_pkgdatadir = @aqbanking_pkgdatadir@ aqbanking_plugin_searchdir = @aqbanking_plugin_searchdir@ aqbanking_plugindir = @aqbanking_plugindir@ aqbanking_plugins_backends_dirs = @aqbanking_plugins_backends_dirs@ aqbanking_plugins_backends_libs = @aqbanking_plugins_backends_libs@ aqbanking_plugins_bankinfo_dirs = @aqbanking_plugins_bankinfo_dirs@ aqbanking_plugins_bankinfo_libs = @aqbanking_plugins_bankinfo_libs@ aqbanking_plugins_imexporters_dirs = @aqbanking_plugins_imexporters_dirs@ aqbanking_plugins_imexporters_libs = @aqbanking_plugins_imexporters_libs@ aqbanking_plugins_parsers_dirs = @aqbanking_plugins_parsers_dirs@ aqbanking_symlinkdir = @aqbanking_symlinkdir@ aqbanking_sys_is_windows = @aqbanking_sys_is_windows@ aqbankingpp_modules = @aqbankingpp_modules@ aqebics_datadir = @aqebics_datadir@ aqebics_includes = @aqebics_includes@ aqebics_internal_libs = @aqebics_internal_libs@ aqebics_ldflags = @aqebics_ldflags@ aqebics_libs = @aqebics_libs@ aqfints_datadir = @aqfints_datadir@ aqhbci_datadir = @aqhbci_datadir@ aqhbci_includes = @aqhbci_includes@ aqhbci_internal_libs = @aqhbci_internal_libs@ aqhbci_ldflags = @aqhbci_ldflags@ aqhbci_libs = @aqhbci_libs@ aqofxconnect_includes = @aqofxconnect_includes@ aqofxconnect_internal_libs = @aqofxconnect_internal_libs@ aqofxconnect_libs = @aqofxconnect_libs@ aqpaypal_includes = @aqpaypal_includes@ aqpaypal_internal_libs = @aqpaypal_internal_libs@ aqpaypal_libs = @aqpaypal_libs@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gmp_libs = @gmp_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_dir = @gwenhywfar_dir@ gwenhywfar_has_crypt = @gwenhywfar_has_crypt@ gwenhywfar_headers = @gwenhywfar_headers@ gwenhywfar_includes = @gwenhywfar_includes@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_plugins = @gwenhywfar_plugins@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ typemaker2_exe = @typemaker2_exe@ visibility_cflags = @visibility_cflags@ with_aqebics = @with_aqebics@ with_aqhbci = @with_aqhbci@ AM_CPPFLAGS = -I$(srcdir)/../.. -I$(srcdir)/.. -I$(top_builddir)/src/libs $(gwenhywfar_includes) AM_CFLAGS = -DBUILDING_AQBANKING @visibility_cflags@ noinst_LTLIBRARIES = libabgui.la EXTRA_DIST = $(typefiles) noinst_HEADERS = \ abgui_p.h iheaderdir = @aqbanking_headerdir_am@/aqbanking/gui iheader_HEADERS = \ abgui.h libabgui_la_SOURCES = \ abgui.c all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libs/aqbanking/gui/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libs/aqbanking/gui/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libabgui.la: $(libabgui_la_OBJECTS) $(libabgui_la_DEPENDENCIES) $(EXTRA_libabgui_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libabgui_la_OBJECTS) $(libabgui_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/abgui.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-iheaderHEADERS: $(iheader_HEADERS) @$(NORMAL_INSTALL) @list='$(iheader_HEADERS)'; test -n "$(iheaderdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(iheaderdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(iheaderdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(iheaderdir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(iheaderdir)" || exit $$?; \ done uninstall-iheaderHEADERS: @$(NORMAL_UNINSTALL) @list='$(iheader_HEADERS)'; test -n "$(iheaderdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(iheaderdir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(iheaderdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/abgui.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-iheaderHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/abgui.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-iheaderHEADERS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-generic clean-libtool clean-noinstLTLIBRARIES \ cscopelist-am ctags ctags-am distclean distclean-compile \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-iheaderHEADERS install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-iheaderHEADERS .PRECIOUS: Makefile sources: for f in $(libabgui_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done typefiles: typedefs: built_sources: cppcheck: for f in $(libabgui_la_SOURCES); do \ cppcheck --force $$f ; \ done # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: aqbanking-6.6.1/src/libs/aqbanking/gui/abgui.c0000664000175000017500000003455714300721174016111 00000000000000/*************************************************************************** begin : Thu Jun 18 2009 copyright : (C) 2009 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #define AQBANKING_NOWARN_DEPRECATED #include "abgui_p.h" #include #include #include #include #include #ifdef OS_WIN32 # include #endif GWEN_INHERIT(GWEN_GUI, AB_GUI) static int GWENHYWFAR_CB getPasswordCli(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) { # ifndef MAX_PATH # define MAX_PATH 256 # endif const char *challenge; char imageFile [MAX_PATH]; int ret; AB_GUI *xgui; assert(gui); xgui=GWEN_INHERIT_GETDATA(GWEN_GUI, AB_GUI, gui); assert(xgui); challenge = NULL; if ((NULL != xgui->opticalTanTool) && (0 != (flags & GWEN_GUI_INPUT_FLAGS_TAN)) && (GWEN_Gui_PasswordMethod_OpticalHHD == methodId)) { int tanMethod; const char *mimeType; const char *imageData; uint32_t imageSize; tanMethod = GWEN_DB_GetIntValue(methodParams, "tanMethodId", 0, AB_BANKING_TANMETHOD_TEXT); switch (tanMethod) { case AB_BANKING_TANMETHOD_CHIPTAN_OPTIC: mimeType = "text/x-flickercode"; challenge = GWEN_DB_GetCharValue(methodParams, "challenge", 0, NULL); if ((NULL == challenge) || ('\0' == challenge [0])) { DBG_WARN(AQBANKING_LOGDOMAIN, "no flicker code found"); challenge = NULL; } break; case AB_BANKING_TANMETHOD_CHIPTAN_QR: case AB_BANKING_TANMETHOD_PHOTOTAN: mimeType = GWEN_DB_GetCharValue(methodParams, "mimeType", 0, NULL); imageData = GWEN_DB_GetBinValue(methodParams, "imageData", 0, NULL, 0, &imageSize); if ((NULL == mimeType) || (NULL == imageData) || (0 == imageSize)) { DBG_WARN(AQBANKING_LOGDOMAIN, "no optical challenge found"); } else { int fd; FILE *fp; GWEN_Directory_GetTmpDirectory(imageFile, sizeof(imageFile) - 14); #ifdef OS_WIN32 strncat(imageFile, "\\image.XXXXXX", 14); mktemp(imageFile); fp = fopen(imageFile, "wb"); #else strncat(imageFile, "/image.XXXXXX", 14); fd = mkstemp(imageFile); if (0 > fd) { fp = NULL; } else { fp = fdopen(fd, "wb"); } #endif if (NULL == fp) { DBG_ERROR(AQBANKING_LOGDOMAIN, "can't open %s", imageFile); } else { if (imageSize != fwrite(imageData, 1, imageSize, fp)) { DBG_ERROR(AQBANKING_LOGDOMAIN, "can't write %s", imageFile); } else { challenge = imageFile; } fclose(fp); } } break; default: mimeType = NULL; challenge = NULL; break; } if ((NULL != mimeType) && (NULL != challenge)) { size_t size; char *cmd; size = strlen(xgui->opticalTanTool) + strlen(mimeType) + strlen(challenge) + 7; cmd = malloc(size); if (NULL == cmd) { DBG_ERROR(AQBANKING_LOGDOMAIN, "malloc (%u) failed", (unsigned int) size); } else { snprintf(cmd, size, "%s \"%s\" \"%s\"", xgui->opticalTanTool, mimeType, challenge); ret = system(cmd); if (0 != ret) { DBG_ERROR(AQBANKING_LOGDOMAIN, "system (%s) returned %d", cmd, ret); } free(cmd); } } } ret = xgui->getPasswordFn(gui, flags, token, title, text, buffer, minLen, maxLen, methodId, methodParams, guiid); if (challenge == imageFile) { remove(imageFile); } return (ret); } GWEN_GUI *AB_Gui_new(AB_BANKING *ab) { GWEN_GUI *gui; AB_GUI *xgui; gui=GWEN_Gui_new(); GWEN_NEW_OBJECT(AB_GUI, xgui); GWEN_INHERIT_SETDATA(GWEN_GUI, AB_GUI, gui, xgui, AB_Gui_FreeData); xgui->banking=ab; xgui->checkCertFn=GWEN_Gui_SetCheckCertFn(gui, AB_Gui_CheckCert); xgui->readDialogPrefsFn=GWEN_Gui_SetReadDialogPrefsFn(gui, AB_Gui_ReadDialogPrefs); xgui->writeDialogPrefsFn=GWEN_Gui_SetWriteDialogPrefsFn(gui, AB_Gui_WriteDialogPrefs); xgui->getPasswordFn = NULL; xgui->opticalTanTool = NULL; return gui; } void AB_Gui_Extend(GWEN_GUI *gui, AB_BANKING *ab) { AB_GUI *xgui; assert(gui); GWEN_NEW_OBJECT(AB_GUI, xgui); GWEN_INHERIT_SETDATA(GWEN_GUI, AB_GUI, gui, xgui, AB_Gui_FreeData); xgui->banking=ab; xgui->checkCertFn=GWEN_Gui_SetCheckCertFn(gui, AB_Gui_CheckCert); xgui->readDialogPrefsFn=GWEN_Gui_SetReadDialogPrefsFn(gui, AB_Gui_ReadDialogPrefs); xgui->writeDialogPrefsFn=GWEN_Gui_SetWriteDialogPrefsFn(gui, AB_Gui_WriteDialogPrefs); xgui->getPasswordFn = NULL; xgui->opticalTanTool = NULL; } void AB_Gui_Unextend(GWEN_GUI *gui) { AB_GUI *xgui; assert(gui); xgui=GWEN_INHERIT_GETDATA(GWEN_GUI, AB_GUI, gui); assert(xgui); /* reset callbacks which point into AB_GUI */ GWEN_Gui_SetCheckCertFn(gui, xgui->checkCertFn); /* unlink from GWEN_GUI object */ DBG_INFO(AQBANKING_LOGDOMAIN, "Unlinking GUI from banking object"); GWEN_Gui_SetReadDialogPrefsFn(gui, xgui->readDialogPrefsFn); GWEN_Gui_SetWriteDialogPrefsFn(gui, xgui->writeDialogPrefsFn); if (NULL != xgui->getPasswordFn) { GWEN_Gui_SetGetPasswordFn(gui, xgui->getPasswordFn); } GWEN_INHERIT_UNLINK(GWEN_GUI, AB_GUI, gui); GWEN_FREE_OBJECT(xgui); } int AB_Gui_SetCliCallbackForOpticalTan(GWEN_GUI *gui, const char *tool) { AB_GUI *xgui; GWEN_GUI_GETPASSWORD_FN originalGetPassword; assert(gui); assert(tool); xgui=GWEN_INHERIT_GETDATA(GWEN_GUI, AB_GUI, gui); assert(xgui); xgui->opticalTanTool = tool; originalGetPassword = GWEN_Gui_SetGetPasswordFn(gui, getPasswordCli); if (NULL == xgui->getPasswordFn) { xgui->getPasswordFn = originalGetPassword; } return 0; } void GWENHYWFAR_CB AB_Gui_FreeData(void *bp, void *p) { AB_GUI *xgui; xgui=(AB_GUI *) p; assert(xgui); GWEN_FREE_OBJECT(xgui); } int AB_Gui__HashPair(const char *token, const char *pin, GWEN_BUFFER *buf) { GWEN_MDIGEST *md; int rv; /* hash token and pin */ md=GWEN_MDigest_Md5_new(); rv=GWEN_MDigest_Begin(md); if (rv==0) rv=GWEN_MDigest_Update(md, (const uint8_t *)token, strlen(token)); if (rv==0) rv=GWEN_MDigest_Update(md, (const uint8_t *)pin, strlen(pin)); if (rv==0) rv=GWEN_MDigest_End(md); if (rv<0) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Hash error (%d)", rv); GWEN_MDigest_free(md); return rv; } GWEN_Text_ToHexBuffer((const char *)GWEN_MDigest_GetDigestPtr(md), GWEN_MDigest_GetDigestSize(md), buf, 0, 0, 0); GWEN_MDigest_free(md); return 0; } int GWENHYWFAR_CB AB_Gui_CheckCert(GWEN_GUI *gui, const GWEN_SSLCERTDESCR *cd, GWEN_SYNCIO *sio, uint32_t guiid) { AB_GUI *xgui; const char *hash; const char *status; GWEN_BUFFER *hbuf; int rv; int result=GWEN_ERROR_USER_ABORTED; DBG_INFO(AQBANKING_LOGDOMAIN, "Called."); assert(gui); xgui=GWEN_INHERIT_GETDATA(GWEN_GUI, AB_GUI, gui); assert(xgui); hash=GWEN_SslCertDescr_GetFingerPrint(cd); status=GWEN_SslCertDescr_GetStatusText(cd); hbuf=GWEN_Buffer_new(0, 64, 0, 1); AB_Gui__HashPair(hash, status, hbuf); /* lock certificate data */ rv=AB_Banking_LockSharedConfig(xgui->banking, "certs"); if (rv<0) { /* fallback */ DBG_WARN(AQBANKING_LOGDOMAIN, "Could not lock certs db, asking user (%d)", rv); result=xgui->checkCertFn(gui, cd, sio, guiid); } else { GWEN_DB_NODE *dbCerts=NULL; int i; /* load certificate data */ rv=AB_Banking_LoadSharedConfig(xgui->banking, "certs", &dbCerts); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "Could not load certs (%d)", rv); dbCerts=GWEN_DB_Group_new("certs"); } /* lookup cert or ask */ i=GWEN_DB_GetIntValue(dbCerts, GWEN_Buffer_GetStart(hbuf), 0, 1); if (i==0) { DBG_NOTICE(AQBANKING_LOGDOMAIN, "Automatically accepting certificate [%s]", hash); result=0; } else { /* no info in the cert cache. * If in non-interactive mode we check whether the certificate is valid. If so * and the GUI flags allow us to accept valid certs we do so. Otherwise we ask the * user (only if not in non-interactive mode) */ if (GWEN_Gui_GetFlags(gui) & GWEN_GUI_FLAGS_NONINTERACTIVE) { uint32_t fl; fl=GWEN_SslCertDescr_GetStatusFlags(cd); if (fl==GWEN_SSL_CERT_FLAGS_OK) { if (GWEN_Gui_GetFlags(gui) & GWEN_GUI_FLAGS_ACCEPTVALIDCERTS) { DBG_NOTICE(AQBANKING_LOGDOMAIN, "Automatically accepting valid new certificate [%s]", hash); GWEN_Buffer_free(hbuf); AB_Banking_UnlockSharedConfig(xgui->banking, "certs"); GWEN_DB_Group_free(dbCerts); return 0; } else { DBG_NOTICE(AQBANKING_LOGDOMAIN, "Automatically rejecting certificate [%s] (noninteractive)", hash); GWEN_Buffer_free(hbuf); AB_Banking_UnlockSharedConfig(xgui->banking, "certs"); GWEN_DB_Group_free(dbCerts); return GWEN_ERROR_USER_ABORTED; } } /* if cert is valid */ else { if (GWEN_Gui_GetFlags(gui) & GWEN_GUI_FLAGS_REJECTINVALIDCERTS) { DBG_NOTICE(AQBANKING_LOGDOMAIN, "Automatically rejecting invalid certificate [%s] (noninteractive)", hash); GWEN_Buffer_free(hbuf); AB_Banking_UnlockSharedConfig(xgui->banking, "certs"); GWEN_DB_Group_free(dbCerts); return GWEN_ERROR_USER_ABORTED; } } } /* if non-interactive */ if (xgui->checkCertFn) { result=xgui->checkCertFn(gui, cd, sio, guiid); if (result==0) { GWEN_DB_SetIntValue(dbCerts, GWEN_DB_FLAGS_OVERWRITE_VARS, GWEN_Buffer_GetStart(hbuf), result); } } } /* write new certs */ DBG_DEBUG(AQBANKING_LOGDOMAIN, "Saving certs"); rv=AB_Banking_SaveSharedConfig(xgui->banking, "certs", dbCerts); if (rv<0) { DBG_WARN(AQBANKING_LOGDOMAIN, "Could not write certs db (%d)", rv); } /* unlock certs */ DBG_DEBUG(AQBANKING_LOGDOMAIN, "Unlocking certs"); rv=AB_Banking_UnlockSharedConfig(xgui->banking, "certs"); if (rv<0) { DBG_NOTICE(AQBANKING_LOGDOMAIN, "Could not unlock certs db (%d)", rv); } GWEN_DB_Group_free(dbCerts); } GWEN_Buffer_free(hbuf); DBG_DEBUG(AQBANKING_LOGDOMAIN, "Returning %d", result); return result; } int GWENHYWFAR_CB AB_Gui_ReadDialogPrefs(GWEN_GUI *gui, const char *groupName, const char *altName, GWEN_DB_NODE **pDb) { AB_GUI *xgui; DBG_INFO(AQBANKING_LOGDOMAIN, "Reading dialog preferences for \"%s\"", groupName); assert(gui); xgui=GWEN_INHERIT_GETDATA(GWEN_GUI, AB_GUI, gui); assert(xgui); if (groupName && *groupName) { int rv; const char *s; GWEN_DB_NODE *db; GWEN_BUFFER *nbuf; nbuf=GWEN_Buffer_new(0, 64, 0, 1); s=GWEN_Gui_GetName(); if (s && *s) { GWEN_Buffer_AppendString(nbuf, s); GWEN_Buffer_AppendString(nbuf, "_"); } GWEN_Buffer_AppendString(nbuf, groupName); rv=AB_Banking_LoadSharedConfig(xgui->banking, GWEN_Buffer_GetStart(nbuf), &db); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(nbuf); return rv; } *pDb=db; GWEN_Buffer_free(nbuf); return 0; } else { DBG_ERROR(AQBANKING_LOGDOMAIN, "No groupName"); return GWEN_ERROR_NO_DATA; } } int GWENHYWFAR_CB AB_Gui_WriteDialogPrefs(GWEN_GUI *gui, const char *groupName, GWEN_DB_NODE *db) { AB_GUI *xgui; DBG_INFO(AQBANKING_LOGDOMAIN, "Writing dialog preferences for \"%s\"", groupName); assert(gui); xgui=GWEN_INHERIT_GETDATA(GWEN_GUI, AB_GUI, gui); assert(xgui); if (groupName && *groupName && db) { int rv; const char *s; GWEN_BUFFER *nbuf; nbuf=GWEN_Buffer_new(0, 64, 0, 1); s=GWEN_Gui_GetName(); if (s && *s) { GWEN_Buffer_AppendString(nbuf, s); GWEN_Buffer_AppendString(nbuf, "_"); } GWEN_Buffer_AppendString(nbuf, groupName); /* lock configuration */ rv=AB_Banking_LockSharedConfig(xgui->banking, GWEN_Buffer_GetStart(nbuf)); if (rv==0) { /* save configuration */ rv=AB_Banking_SaveSharedConfig(xgui->banking, GWEN_Buffer_GetStart(nbuf), db); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); } /* unlock configuration */ rv=AB_Banking_UnlockSharedConfig(xgui->banking, GWEN_Buffer_GetStart(nbuf)); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); } } GWEN_Buffer_free(nbuf); } return 0; } aqbanking-6.6.1/src/libs/aqbanking/gui/Makefile.am0000664000175000017500000000111014043610744016671 00000000000000AM_CPPFLAGS = -I$(srcdir)/../.. -I$(srcdir)/.. -I$(top_builddir)/src/libs $(gwenhywfar_includes) AM_CFLAGS=-DBUILDING_AQBANKING @visibility_cflags@ noinst_LTLIBRARIES=libabgui.la EXTRA_DIST=$(typefiles) noinst_HEADERS=\ abgui_p.h iheaderdir=@aqbanking_headerdir_am@/aqbanking/gui iheader_HEADERS=\ abgui.h libabgui_la_SOURCES=\ abgui.c sources: for f in $(libabgui_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done typefiles: typedefs: built_sources: cppcheck: for f in $(libabgui_la_SOURCES); do \ cppcheck --force $$f ; \ done aqbanking-6.6.1/src/libs/aqbanking/gui/abgui.h0000664000175000017500000000651714043610744016115 00000000000000/*************************************************************************** begin : Thu Jun 18 2009 copyright : (C) 2009 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQBANKING_GUI_H #define AQBANKING_GUI_H #include #include /** @addtogroup G_AB_GUI Gwenhywfar GUI Extension * * @brief Extends the GWEN_GUI framework. * * This module adds the following features to GWEN_GUI: *
    *
  • maintenance of SSL certificates
  • *
  • reading and writing of GWEN_DIALOG settings (allows storing the settings of every * dialog in AqBanking's shared settings database)
  • *
* * * The following example shows how to use this module correctly. We use the FOX implementation * of the GWEN_GUI framework here, but the basic steps are the same for every implementation. *
    *
  1. GWEN_Init()
  2. *
  3. basic setup of your application
  4. *
  5. create a GUI, set it as the application's GUI (GWEN_Gui_SetGui())
  6. *
  7. create the AqBanking object (AB_Banking_new())
  8. *
  9. init the AqBanking object (just AB_Banking_Init())
  10. *
  11. call @ref AB_Gui_Extend() to extend the GUI (regardless of the heritage if the GUI, this works * with every GUI implementation, even on console)
  12. *
* * @code * * FF_App app("AqFinance", "Martin Preuss"); * AB_BANKING *ab; * FF_Gui *gui; * * GWEN_Init(); * * app.init(argc, argv); * * gui=new FF_Gui(&app, "/some/where"); * GWEN_Gui_SetGui(gui->getCInterface()); * * ab=AB_Banking_new("MyApplication", NULL, 0); * AB_Banking_Init(ab); * * AB_Gui_Extend(gui->getCInterface(), ab); * * @endcode */ /*@{*/ #ifdef __cplusplus extern "C" { #endif /** * This function creates a GWEN_GUI object which uses AqBanking's shared certificate data * for certificate checking. * AB_Banking_Init() must be called before the certificate check callback of this GWEN_GUI * object is called. */ AQBANKING_API GWEN_GUI *AB_Gui_new(AB_BANKING *ab); /** * This function can be used to add certificate handling using AqBanking's shared certificate * data to any GWEN_GUI object. * It sets the callback for certificate checking. * Use this function if you have your own GWEN_GUI implementation but still want to use AqBanking's * certificate handling. * AB_Banking_Init() must be called before the certificate check callback of this GWEN_GUI * object is called. */ AQBANKING_API void AB_Gui_Extend(GWEN_GUI *gui, AB_BANKING *ab); /** * This function unlinks the given GWEN_GUI object from AqBanking. * It resets the callback for certificate checking to the value it had before * @ref AB_Gui_Extend was called. */ AQBANKING_API void AB_Gui_Unextend(GWEN_GUI *gui); /** * This function extends Gwen's GetPassword function and registers an * external tool to show the graphics used as challenge for optical * TAN mechanisms. */ AQBANKING_API int AB_Gui_SetCliCallbackForOpticalTan(GWEN_GUI *gui, const char *tool); #ifdef __cplusplus } #endif /*@}*/ /* end of group G_AB_GUI */ #endif aqbanking-6.6.1/src/libs/aqbanking/gui/abgui_p.h0000664000175000017500000000333314043610744016425 00000000000000/*************************************************************************** begin : Thu Jun 18 2009 copyright : (C) 2009 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQBANKING_GUI_P_H #define AQBANKING_GUI_P_H #include "abgui.h" typedef struct AB_GUI AB_GUI; struct AB_GUI { AB_BANKING *banking; GWEN_GUI_CHECKCERT_FN checkCertFn; GWEN_GUI_READ_DIALOG_PREFS_FN readDialogPrefsFn; GWEN_GUI_WRITE_DIALOG_PREFS_FN writeDialogPrefsFn; GWEN_GUI_GETPASSWORD_FN getPasswordFn; const char *opticalTanTool; }; static void GWENHYWFAR_CB AB_Gui_FreeData(void *bp, void *p); static int AB_Gui__HashPair(const char *token, const char *pin, GWEN_BUFFER *buf); static int GWENHYWFAR_CB AB_Gui_CheckCert(GWEN_GUI *gui, const GWEN_SSLCERTDESCR *cd, GWEN_SYNCIO *sio, uint32_t guiid); static int GWENHYWFAR_CB AB_Gui_WriteDialogPrefs(GWEN_GUI *gui, const char *groupName, GWEN_DB_NODE *db); static int GWENHYWFAR_CB AB_Gui_ReadDialogPrefs(GWEN_GUI *gui, const char *groupName, const char *altName, GWEN_DB_NODE **pDb); #endif aqbanking-6.6.1/src/libs/ab-value-test.c0000664000175000017500000000160014043610744014737 00000000000000#include #include char *input = "1,361.54"; int main(int argc, char *argv[]) { AB_VALUE *value; GWEN_BUFFER *buf, *buf2; int result = 0; if (argc > 1) input = argv[1]; value = AB_Value_fromString(input); buf = GWEN_Buffer_new(NULL, 300, 0, 0); AB_Value_toString(value, buf); if (strcmp(GWEN_Buffer_GetStart(buf), "136154/100") != 0) result = -1; buf2 = GWEN_Buffer_new(NULL, 300, 0, 0); AB_Value_toHumanReadableString(value, buf2, 2, 0); if ((strcmp(GWEN_Buffer_GetStart(buf2), "1361.54") != 0) && (strcmp(GWEN_Buffer_GetStart(buf2), "1361,54") != 0)) result = -1; printf("Storing %s internally as rational number %s; as double: %s\n", input, GWEN_Buffer_GetStart(buf), GWEN_Buffer_GetStart(buf2)); GWEN_Buffer_free(buf); GWEN_Buffer_free(buf2); AB_Value_free(value); return result; } aqbanking-6.6.1/src/libs/aqbankingpp/0000755000175000017500000000000015037736156014510 500000000000000aqbanking-6.6.1/src/libs/aqbankingpp/Makefile.am0000664000175000017500000000170114043610744016453 00000000000000AM_CPPFLAGS=-I$(aqbanking_symlinkdir) $(gwenhywfar_includes) lib_LTLIBRARIES=libaqbankingpp.la noinst_HEADERS= if IS_WINDOWS libaqbankingpp_la_CPPFLAGS = -Dexport_AQBANKINGPP $(AM_CPPFLAGS) endif iheaderdir=@aqbanking_headerdir_am@/aqbankingpp iheader_HEADERS=\ accountstatus.hpp \ aqbankingppdecl.hpp \ balance.hpp \ cxxwrap.hpp \ stringlist.hpp \ time.hpp \ value.hpp libaqbankingpp_la_SOURCES=\ stringlist.cpp libaqbankingpp_la_LIBADD = \ $(aqbanking_internal_libs) \ $(gwenhywfar_libs) $(i18n_libs) libaqbankingpp_la_LDFLAGS = sources: for f in $(libaqbankingpp_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done built_sources: # Build and link a test program to verify the linker flags noinst_PROGRAMS = testlibcc # Test program to verify the c++ usage testlibcc_SOURCES = testlibcc.cpp testlibcc_LDADD = $(aqbanking_internal_libs) $(gwenhywfar_libs) TESTS = testlibcc typefiles: typedefs: cppcheck: aqbanking-6.6.1/src/libs/aqbankingpp/testlibcc.cpp0000664000175000017500000000166014044534775017115 00000000000000#include #include #include "value.hpp" #include "balance.hpp" #include "time.hpp" #include "stringlist.hpp" const char *input = "1,361.54"; int main(int argc, char *argv[]) { AB::Value value; GWEN_BUFFER *buf, *buf2; int result = 0; if (argc > 1) input = argv[1]; value = AB::Value::fromString(input); buf = GWEN_Buffer_new(NULL, 300, 0, 0); value.toString(buf); if (strcmp(GWEN_Buffer_GetStart(buf), "136154/100") != 0) result = -1; buf2 = GWEN_Buffer_new(NULL, 300, 0, 0); AB_Value_toHumanReadableString2(value.ptr(), buf2, 2, 0); if ((strcmp(GWEN_Buffer_GetStart(buf2), "1361.54") != 0) && (strcmp(GWEN_Buffer_GetStart(buf2), "1361,54") != 0)) result = -1; printf("Storing %s internally as rational number %s; as double: %s\n", input, GWEN_Buffer_GetStart(buf), GWEN_Buffer_GetStart(buf2)); GWEN_Buffer_free(buf); GWEN_Buffer_free(buf2); return result; } aqbanking-6.6.1/src/libs/aqbankingpp/Makefile.in0000644000175000017500000012256715037736024016504 00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ noinst_PROGRAMS = testlibcc$(EXEEXT) TESTS = testlibcc$(EXEEXT) subdir = src/libs/aqbankingpp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/distri.m4 $(top_srcdir)/m4/gwenhywfar.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/os.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(iheader_HEADERS) \ $(noinst_HEADERS) $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = PROGRAMS = $(noinst_PROGRAMS) am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(iheaderdir)" LTLIBRARIES = $(lib_LTLIBRARIES) am__DEPENDENCIES_1 = libaqbankingpp_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) am_libaqbankingpp_la_OBJECTS = libaqbankingpp_la-stringlist.lo libaqbankingpp_la_OBJECTS = $(am_libaqbankingpp_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = libaqbankingpp_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ $(AM_CXXFLAGS) $(CXXFLAGS) $(libaqbankingpp_la_LDFLAGS) \ $(LDFLAGS) -o $@ am_testlibcc_OBJECTS = testlibcc.$(OBJEXT) testlibcc_OBJECTS = $(am_testlibcc_OBJECTS) testlibcc_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/libaqbankingpp_la-stringlist.Plo \ ./$(DEPDIR)/testlibcc.Po am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; am__v_CXX_1 = CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; am__v_CXXLD_1 = SOURCES = $(libaqbankingpp_la_SOURCES) $(testlibcc_SOURCES) DIST_SOURCES = $(libaqbankingpp_la_SOURCES) $(testlibcc_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac HEADERS = $(iheader_HEADERS) $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } am__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)' RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp \ $(top_srcdir)/test-driver DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADD_ACLOCAL_FLAGS = @ADD_ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AQBANKING_CLI_VERSION_STRING = @AQBANKING_CLI_VERSION_STRING@ AQBANKING_FINTS_VERSION_STRING = @AQBANKING_FINTS_VERSION_STRING@ AQBANKING_SO_AGE = @AQBANKING_SO_AGE@ AQBANKING_SO_CURRENT = @AQBANKING_SO_CURRENT@ AQBANKING_SO_EFFECTIVE = @AQBANKING_SO_EFFECTIVE@ AQBANKING_SO_REVISION = @AQBANKING_SO_REVISION@ AQBANKING_VERSION_BUILD = @AQBANKING_VERSION_BUILD@ AQBANKING_VERSION_FULL_STRING = @AQBANKING_VERSION_FULL_STRING@ AQBANKING_VERSION_MAJOR = @AQBANKING_VERSION_MAJOR@ AQBANKING_VERSION_MINOR = @AQBANKING_VERSION_MINOR@ AQBANKING_VERSION_PATCHLEVEL = @AQBANKING_VERSION_PATCHLEVEL@ AQBANKING_VERSION_RELEASE_STRING = @AQBANKING_VERSION_RELEASE_STRING@ AQBANKING_VERSION_STRING = @AQBANKING_VERSION_STRING@ AQBANKING_VERSION_TAG = @AQBANKING_VERSION_TAG@ AQEBICS_CFLAGS = @AQEBICS_CFLAGS@ AQEBICS_LIBS = @AQEBICS_LIBS@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATETIME = @DATETIME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_EXCLUDE_PATTERNS = @DOXYGEN_EXCLUDE_PATTERNS@ DOXYGEN_FILE_PATTERNS = @DOXYGEN_FILE_PATTERNS@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENGUI_GTK2_CFLAGS = @GWENGUI_GTK2_CFLAGS@ GWENGUI_GTK2_LIBS = @GWENGUI_GTK2_LIBS@ GWENHYWFAR_MINIMUM_VERSION = @GWENHYWFAR_MINIMUM_VERSION@ HAVE_GWENGUI_GTK2 = @HAVE_GWENGUI_GTK2@ HAVE_I18N = @HAVE_I18N@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIBXSLT_CFLAGS = @LIBXSLT_CFLAGS@ LIBXSLT_LIBS = @LIBXSLT_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_SUPPORTS_QT = @MSGFMT_SUPPORTS_QT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ TUTORIALS = @TUTORIALS@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XMLMERGE = @XMLMERGE@ XMLSEC_CFLAGS = @XMLSEC_CFLAGS@ XMLSEC_LIBS = @XMLSEC_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ aqbanking_backends = @aqbanking_backends@ aqbanking_cfg_searchdir = @aqbanking_cfg_searchdir@ aqbanking_data_searchdir = @aqbanking_data_searchdir@ aqbanking_headerdir = @aqbanking_headerdir@ aqbanking_headerdir_am = @aqbanking_headerdir_am@ aqbanking_includes = @aqbanking_includes@ aqbanking_internal_libs = @aqbanking_internal_libs@ aqbanking_ldflags = @aqbanking_ldflags@ aqbanking_libs = @aqbanking_libs@ aqbanking_locale_searchdir = @aqbanking_locale_searchdir@ aqbanking_modules = @aqbanking_modules@ aqbanking_pkgdatadir = @aqbanking_pkgdatadir@ aqbanking_plugin_searchdir = @aqbanking_plugin_searchdir@ aqbanking_plugindir = @aqbanking_plugindir@ aqbanking_plugins_backends_dirs = @aqbanking_plugins_backends_dirs@ aqbanking_plugins_backends_libs = @aqbanking_plugins_backends_libs@ aqbanking_plugins_bankinfo_dirs = @aqbanking_plugins_bankinfo_dirs@ aqbanking_plugins_bankinfo_libs = @aqbanking_plugins_bankinfo_libs@ aqbanking_plugins_imexporters_dirs = @aqbanking_plugins_imexporters_dirs@ aqbanking_plugins_imexporters_libs = @aqbanking_plugins_imexporters_libs@ aqbanking_plugins_parsers_dirs = @aqbanking_plugins_parsers_dirs@ aqbanking_symlinkdir = @aqbanking_symlinkdir@ aqbanking_sys_is_windows = @aqbanking_sys_is_windows@ aqbankingpp_modules = @aqbankingpp_modules@ aqebics_datadir = @aqebics_datadir@ aqebics_includes = @aqebics_includes@ aqebics_internal_libs = @aqebics_internal_libs@ aqebics_ldflags = @aqebics_ldflags@ aqebics_libs = @aqebics_libs@ aqfints_datadir = @aqfints_datadir@ aqhbci_datadir = @aqhbci_datadir@ aqhbci_includes = @aqhbci_includes@ aqhbci_internal_libs = @aqhbci_internal_libs@ aqhbci_ldflags = @aqhbci_ldflags@ aqhbci_libs = @aqhbci_libs@ aqofxconnect_includes = @aqofxconnect_includes@ aqofxconnect_internal_libs = @aqofxconnect_internal_libs@ aqofxconnect_libs = @aqofxconnect_libs@ aqpaypal_includes = @aqpaypal_includes@ aqpaypal_internal_libs = @aqpaypal_internal_libs@ aqpaypal_libs = @aqpaypal_libs@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gmp_libs = @gmp_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_dir = @gwenhywfar_dir@ gwenhywfar_has_crypt = @gwenhywfar_has_crypt@ gwenhywfar_headers = @gwenhywfar_headers@ gwenhywfar_includes = @gwenhywfar_includes@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_plugins = @gwenhywfar_plugins@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ typemaker2_exe = @typemaker2_exe@ visibility_cflags = @visibility_cflags@ with_aqebics = @with_aqebics@ with_aqhbci = @with_aqhbci@ AM_CPPFLAGS = -I$(aqbanking_symlinkdir) $(gwenhywfar_includes) lib_LTLIBRARIES = libaqbankingpp.la noinst_HEADERS = @IS_WINDOWS_TRUE@libaqbankingpp_la_CPPFLAGS = -Dexport_AQBANKINGPP $(AM_CPPFLAGS) iheaderdir = @aqbanking_headerdir_am@/aqbankingpp iheader_HEADERS = \ accountstatus.hpp \ aqbankingppdecl.hpp \ balance.hpp \ cxxwrap.hpp \ stringlist.hpp \ time.hpp \ value.hpp libaqbankingpp_la_SOURCES = \ stringlist.cpp libaqbankingpp_la_LIBADD = \ $(aqbanking_internal_libs) \ $(gwenhywfar_libs) $(i18n_libs) libaqbankingpp_la_LDFLAGS = # Test program to verify the c++ usage testlibcc_SOURCES = testlibcc.cpp testlibcc_LDADD = $(aqbanking_internal_libs) $(gwenhywfar_libs) all: all-am .SUFFIXES: .SUFFIXES: .cpp .lo .log .o .obj .test .test$(EXEEXT) .trs $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libs/aqbankingpp/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libs/aqbankingpp/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ } uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libaqbankingpp.la: $(libaqbankingpp_la_OBJECTS) $(libaqbankingpp_la_DEPENDENCIES) $(EXTRA_libaqbankingpp_la_DEPENDENCIES) $(AM_V_CXXLD)$(libaqbankingpp_la_LINK) -rpath $(libdir) $(libaqbankingpp_la_OBJECTS) $(libaqbankingpp_la_LIBADD) $(LIBS) testlibcc$(EXEEXT): $(testlibcc_OBJECTS) $(testlibcc_DEPENDENCIES) $(EXTRA_testlibcc_DEPENDENCIES) @rm -f testlibcc$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(testlibcc_OBJECTS) $(testlibcc_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libaqbankingpp_la-stringlist.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testlibcc.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .cpp.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< libaqbankingpp_la-stringlist.lo: stringlist.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libaqbankingpp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libaqbankingpp_la-stringlist.lo -MD -MP -MF $(DEPDIR)/libaqbankingpp_la-stringlist.Tpo -c -o libaqbankingpp_la-stringlist.lo `test -f 'stringlist.cpp' || echo '$(srcdir)/'`stringlist.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libaqbankingpp_la-stringlist.Tpo $(DEPDIR)/libaqbankingpp_la-stringlist.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='stringlist.cpp' object='libaqbankingpp_la-stringlist.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libaqbankingpp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libaqbankingpp_la-stringlist.lo `test -f 'stringlist.cpp' || echo '$(srcdir)/'`stringlist.cpp mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-iheaderHEADERS: $(iheader_HEADERS) @$(NORMAL_INSTALL) @list='$(iheader_HEADERS)'; test -n "$(iheaderdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(iheaderdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(iheaderdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(iheaderdir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(iheaderdir)" || exit $$?; \ done uninstall-iheaderHEADERS: @$(NORMAL_UNINSTALL) @list='$(iheader_HEADERS)'; test -n "$(iheaderdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(iheaderdir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ elif test -n "$$redo_logs"; then \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 check-TESTS: @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ log_list=`for i in $$bases; do echo $$i.log; done`; \ trs_list=`for i in $$bases; do echo $$i.trs; done`; \ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ exit $$?; recheck: all @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? testlibcc.log: testlibcc$(EXEEXT) @p='testlibcc$(EXEEXT)'; \ b='testlibcc'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .test.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.test$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(PROGRAMS) $(LTLIBRARIES) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(iheaderdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ clean-noinstPROGRAMS mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/libaqbankingpp_la-stringlist.Plo -rm -f ./$(DEPDIR)/testlibcc.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-iheaderHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-libLTLIBRARIES install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/libaqbankingpp_la-stringlist.Plo -rm -f ./$(DEPDIR)/testlibcc.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-iheaderHEADERS uninstall-libLTLIBRARIES .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-TESTS \ check-am clean clean-generic clean-libLTLIBRARIES \ clean-libtool clean-noinstPROGRAMS cscopelist-am ctags \ ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am \ install-iheaderHEADERS install-info install-info-am \ install-libLTLIBRARIES install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ recheck tags tags-am uninstall uninstall-am \ uninstall-iheaderHEADERS uninstall-libLTLIBRARIES .PRECIOUS: Makefile sources: for f in $(libaqbankingpp_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done built_sources: typefiles: typedefs: cppcheck: # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: aqbanking-6.6.1/src/libs/aqbankingpp/cxxwrap.hpp0000664000175000017500000000640214043610744016627 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Mon March 1 2011 copyright : (C) 2011 by Christian Stimming email : christian@cstimming.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AB_CXXWRAP_HPP #define AB_CXXWRAP_HPP /** * \file * * This file contains macros that simplify the wrapping of aqbanking's * data types in a C++ class. The macros assume the following: * * - The wrapped C type is available as a typedef "wrapped_type" * - The pointer to the wrapped C object is called m_ptr * * The only additional assumptions are necessary in the * AB_CXXWRAP_CONSTRUCTORS() macro. */ /** Wraps a getter function with 0 arguments, const */ #define AB_CXXWRAP_GET0_CONST(cxxname, cname) \ cxxname() const \ { return cname(m_ptr); } /** Wraps a getter function with 0 arguments */ #define AB_CXXWRAP_GET0(cxxname, cname) \ cxxname() \ { return cname(m_ptr); } /** Wraps a getter function with 1 argument, const */ #define AB_CXXWRAP_GET1_CONST(cxxname, type1, cname) \ cxxname(type1 arg1) const \ { return cname(m_ptr, arg1); } /** Wraps a getter function with 1 argument */ #define AB_CXXWRAP_GET1(cxxname, type1, cname) \ cxxname(type1 arg1) \ { return cname(m_ptr, arg1); } /** Wraps a setter function with 0 argument */ #define AB_CXXWRAP_SET0(cxxname, cname) \ void cxxname() \ { cname(m_ptr); } /** Wraps a setter function with 1 argument */ #define AB_CXXWRAP_SET1(cxxname, type1, cname) \ void cxxname(type1 arg1) \ { cname(m_ptr, arg1); } /** Wraps the default C++ constructor with zero arguments. This macro only works if FOO_new() is available. Some of the FOO_new() functions take additional arguments, in which case this macro doesn't work. */ #define AB_CXXWRAP_CONSTRUCTOR0(cxxname, cprefix) \ cxxname() \ : m_ptr(cprefix##_new()) {} /** Wraps the set of C++ constructors, destructor, and assignment operator. * * This macro additionally assumes that the C type FOO has a set of * constructor/ destructor/ copy functions which are called FOO_free() * and FOO_dup(), respectively. */ #define AB_CXXWRAP_CONSTRUCTORS(cxxname, cprefix) \ ~cxxname() \ { cprefix##_free(m_ptr); } \ cxxname(const wrapped_type *other) \ : m_ptr(cprefix##_dup(other)) {} \ cxxname(const cxxname& other) \ : m_ptr(cprefix##_dup(other.m_ptr)) {} \ cxxname& operator=(const cxxname& other) \ { \ if (&other == this) \ return *this; \ cprefix##_free(m_ptr); \ m_ptr = cprefix##_dup(other.m_ptr); \ return *this; \ } \ operator const wrapped_type*() const \ { return m_ptr; } \ operator wrapped_type*() \ { return m_ptr; } \ const wrapped_type* ptr() const \ { return m_ptr; } \ wrapped_type* ptr() \ { return m_ptr; } #endif // AB_CXXWRAP_HPP aqbanking-6.6.1/src/libs/aqbankingpp/stringlist.cpp0000664000175000017500000000224414043610744017330 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : March 3 2011 copyright : (C) 2011 by Christian Stimming email : christian@cstimming.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #include "stringlist.hpp" namespace AB { typedef std::vector SVector; StringList::StringList(const std::vector& sv) : m_ptr(GWEN_StringList_new()) { for (SVector::const_iterator iter = sv.begin(); iter != sv.end(); ++iter) { push_back(*iter); } } static void *cb_func(const char* value, void *user_data) { SVector* result = reinterpret_cast(user_data); result->push_back(value); return NULL; } SVector StringList::toVector() const { SVector result; GWEN_StringList_ForEach(m_ptr, &cb_func, &result); return result; } } // END namespace AB aqbanking-6.6.1/src/libs/aqbankingpp/stringlist.hpp0000664000175000017500000000356514043610744017344 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Mon March 2 2011 copyright : (C) 2011 by Christian Stimming email : christian@cstimming.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AB_STRINGLIST_HPP #define AB_STRINGLIST_HPP #include #include #include #include #include namespace AB { /** A wrapper class around the GWEN_STRINGLIST type */ class AQBANKINGPP_DECL StringList { public: typedef GWEN_STRINGLIST wrapped_type; typedef std::size_t size_type; typedef std::string value_type; private: wrapped_type* m_ptr; public: AB_CXXWRAP_CONSTRUCTOR0(StringList, GWEN_StringList); AB_CXXWRAP_CONSTRUCTORS(StringList, GWEN_StringList); StringList(const std::vector& other); AB_CXXWRAP_SET0(clear, GWEN_StringList_Clear); size_type AB_CXXWRAP_GET0_CONST(size, GWEN_StringList_Count); bool empty() const { return size() == 0; } std::string AB_CXXWRAP_GET0_CONST(front, GWEN_StringList_FirstString); std::string AB_CXXWRAP_GET1_CONST(at, size_type, GWEN_StringList_StringAt); std::string operator[](size_type i) const { return at(i); } void push_back(const std::string& s) { GWEN_StringList_AppendString(m_ptr, s.c_str(), false, false); } void push_front(const std::string& s) { GWEN_StringList_InsertString(m_ptr, s.c_str(), false, false); } std::vector toVector() const; }; } // END namespace AB #endif // AB_STRINGLIST_HPP aqbanking-6.6.1/src/libs/aqbankingpp/aqbankingppdecl.hpp0000664000175000017500000000167614043610744020266 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Mon March 2 2011 copyright : (C) 2011 by Christian Stimming email : christian@cstimming.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AB_AQBANKINGPPDECL_HPP #define AB_AQBANKINGPPDECL_HPP #if defined(_WIN32) || defined(_MSC_VER) # define AQBANKINGPP_IS_WINDOWS #endif #ifdef AQBANKINGPP_IS_WINDOWS # ifdef export_AQBANKINGPP # define AQBANKINGPP_DECL __declspec (dllexport) # else # define AQBANKINGPP_DECL __declspec (dllimport) # endif #else # define AQBANKINGPP_DECL #endif #endif // AB_STRINGLIST_HPP aqbanking-6.6.1/src/libs/aqbankingpp/time.hpp0000664000175000017500000000346514043610744016077 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Mon March 2 2011 copyright : (C) 2011 by Christian Stimming email : christian@cstimming.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AB_TIME_HPP #define AB_TIME_HPP #include #include namespace AB { /** A wrapper class around the GWEN_TIME type */ class Time { public: typedef GWEN_TIME wrapped_type; private: wrapped_type* m_ptr; public: Time(int year, int month, int day, int hour, int min, int sec, int inUtc) : m_ptr(GWEN_Time_new(year, month, day, hour, min, sec, inUtc)) {} AB_CXXWRAP_CONSTRUCTORS(Time, GWEN_Time); uint32_t AB_CXXWRAP_GET0_CONST(seconds, GWEN_Time_Seconds); double AB_CXXWRAP_GET0_CONST(milliseconds, GWEN_Time_Milliseconds); struct tm AB_CXXWRAP_GET0_CONST(toTm, GWEN_Time_toTm); time_t AB_CXXWRAP_GET0_CONST(toTime_t, GWEN_Time_toTime_t); /** * Returns the broken down date as local date. */ int getBrokenDownDate(int& day, int& month, int& year) { return GWEN_Time_GetBrokenDownDate(m_ptr, &day, &month, &year); } /** * Returns the broken down time as UTC date (Greenwhich Mean time). */ int getBrokenDownUtcDate(int& day, int& month, int& year) { return GWEN_Time_GetBrokenDownUtcDate(m_ptr, &day, &month, &year); } static Time currentTime() { return GWEN_CurrentTime(); } }; } // END namespace AB #endif // AB_TIME_HPP aqbanking-6.6.1/src/libs/aqbankingpp/accountstatus.hpp0000664000175000017500000000314514044534775020046 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Mon March 2 2011 copyright : (C) 2011 by Christian Stimming email : christian@cstimming.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AB_ACCOUNTSTATUS_HPP #define AB_ACCOUNTSTATUS_HPP #include #include #include #include #include namespace AB { /** A wrapper class around the AB_ACCOUNT_STATUS type */ class AccountStatus { public: typedef AB_ACCOUNT_STATUS wrapped_type; private: wrapped_type* m_ptr; public: AB_CXXWRAP_CONSTRUCTOR0(AccountStatus, AB_AccountStatus); AB_CXXWRAP_CONSTRUCTORS(AccountStatus, AB_AccountStatus); Time AB_CXXWRAP_GET0_CONST(getTime, AB_AccountStatus_GetTime); Value AB_CXXWRAP_GET0_CONST(getBankLine, AB_AccountStatus_GetBankLine); Value AB_CXXWRAP_GET0_CONST(getDisposable, AB_AccountStatus_GetDisposable); Value AB_CXXWRAP_GET0_CONST(getDisposed, AB_AccountStatus_GetDisposed); Balance AB_CXXWRAP_GET0_CONST(getBookedBalance, AB_AccountStatus_GetBookedBalance); Balance AB_CXXWRAP_GET0_CONST(getNotedBalance, AB_AccountStatus_GetNotedBalance); }; } // END namespace AB #endif // AB_ACCOUNTSTATUS_HPP aqbanking-6.6.1/src/libs/aqbankingpp/balance.hpp0000664000175000017500000000237214044534775016534 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Mon March 2 2011 copyright : (C) 2011 by Christian Stimming email : christian@cstimming.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AB_BALANCE_HPP #define AB_BALANCE_HPP #include #include #include #include namespace AB { /** A wrapper class around the \ref AB_BALANCE type */ class Balance { public: typedef AB_BALANCE wrapped_type; private: wrapped_type* m_ptr; public: Balance() : m_ptr(AB_Balance_new()) {} AB_CXXWRAP_CONSTRUCTORS(Balance, AB_Balance); Value AB_CXXWRAP_GET0_CONST(getValue, AB_Balance_GetValue); AB_CXXWRAP_SET1(setValue, const Value&, AB_Balance_SetValue); const GWEN_TIME *AB_CXXWRAP_GET0_CONST(getTime, AB_Balance_GetTime); }; } // END namespace AB #endif // AB_BALANCE_HPP aqbanking-6.6.1/src/libs/aqbankingpp/value.hpp0000664000175000017500000000664314044534775016270 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Mon March 1 2011 copyright : (C) 2011 by Christian Stimming email : christian@cstimming.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AB_VALUE_HPP #define AB_VALUE_HPP #include #include #include namespace AB { /** A wrapper class around the AB_VALUE rational number type */ class /*AQBANKING_API*/ Value // note: AQBANKING_API isn't needed as long as this class is defined // purely in the header. { public: typedef AB_VALUE wrapped_type; private: wrapped_type* m_ptr; public: AB_CXXWRAP_CONSTRUCTOR0(Value, AB_Value); AB_CXXWRAP_CONSTRUCTORS(Value, AB_Value); /** Extra constructor: Create this value from a double. \see AB_Value_fromDouble() */ Value(double d) : m_ptr(AB_Value_fromDouble(d)) {} /** Extra constructor: Create this value from two integer values for numerator and denominator. \see AB_Value_fromInt() */ Value(long int num, long int denom) : m_ptr(AB_Value_fromInt(num, denom)) {} /** Conversion to string. \see AB_Value_toString() */ void toString(GWEN_BUFFER *buf) const { AB_Value_toString(m_ptr, buf); } /** Conversion to string. \see AB_Value_toString() */ std::string toString() const { GWEN_BUFFER *buf = GWEN_Buffer_new(NULL, 100, 0, 0); toString(buf); std::string result(GWEN_Buffer_GetStart(buf)); GWEN_Buffer_free(buf); return result; } long int AB_CXXWRAP_GET0_CONST(getNum, AB_Value_Num); long int AB_CXXWRAP_GET0_CONST(getDenom, AB_Value_Denom); double AB_CXXWRAP_GET0_CONST(getValueAsDouble, AB_Value_GetValueAsDouble); AB_CXXWRAP_SET1(setValueFromDouble, double, AB_Value_SetValueFromDouble); AB_CXXWRAP_SET0(setZero, AB_Value_SetZero); bool AB_CXXWRAP_GET0_CONST(isZero, AB_Value_IsZero); bool AB_CXXWRAP_GET0_CONST(isNegative, AB_Value_IsNegative); bool AB_CXXWRAP_GET0_CONST(isPositive, AB_Value_IsPositive); int AB_CXXWRAP_GET1_CONST(compare, const Value&, AB_Value_Compare); bool AB_CXXWRAP_GET1_CONST(equal, const Value&, AB_Value_Equal); int AB_CXXWRAP_GET1(addValue, const Value&, AB_Value_AddValue); int AB_CXXWRAP_GET1(subValue, const Value&, AB_Value_SubValue); int AB_CXXWRAP_GET1(multValue, const Value&, AB_Value_MultValue); int AB_CXXWRAP_GET1(divValue, const Value&, AB_Value_DivValue); int AB_CXXWRAP_GET0(negate, AB_Value_Negate); std::string AB_CXXWRAP_GET0_CONST(getCurrency, AB_Value_GetCurrency); void setCurrency(const std::string& s) { AB_Value_SetCurrency(m_ptr, s.c_str()); } /** Conversion from string. \see AB_Value_fromString() */ static Value fromString(const std::string& s) { return Value(AB_Value_fromString(s.c_str())); } }; bool operator==(const Value& v1, const Value& v2) { return v1.equal(v2); } bool operator!=(const Value& v1, const Value& v2) { return !(v1 == v2); } bool operator>(const Value& v1, const Value& v2) { return v1.compare(v2) > 0; } bool operator<(const Value& v1, const Value& v2) { return v1.compare(v2) < 0; } } // END namespace AB #endif // AB_VALUE_HPP aqbanking-6.6.1/src/libs/dummy.c0000664000175000017500000000000014043610744013412 00000000000000aqbanking-6.6.1/src/libs/plugins/0000755000175000017500000000000015037736161013672 500000000000000aqbanking-6.6.1/src/libs/plugins/Makefile.am0000664000175000017500000000115614043610744015645 00000000000000SUBDIRS=parsers imexporters bankinfo backends noinst_LTLIBRARIES=libabplugins.la libabplugins_la_SOURCES=dummy.c libabplugins_la_LIBADD=\ backends/libabbackends.la \ bankinfo/libabbankinfo.la \ imexporters/libabimexporters.la sources: for d in $(SUBDIRS); do \ $(MAKE) -C $$d sources; \ done built_sources: for d in $(SUBDIRS); do \ $(MAKE) -C $$d built_sources; \ done ; cppcheck: for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done typefiles: for d in $(SUBDIRS); do \ $(MAKE) -C $$d typefiles; \ done typedefs: for d in $(SUBDIRS); do \ $(MAKE) -C $$d typedefs; \ done aqbanking-6.6.1/src/libs/plugins/Makefile.in0000644000175000017500000006606015037736024015665 00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/libs/plugins ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/distri.m4 $(top_srcdir)/m4/gwenhywfar.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/os.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libabplugins_la_DEPENDENCIES = backends/libabbackends.la \ bankinfo/libabbankinfo.la imexporters/libabimexporters.la am_libabplugins_la_OBJECTS = dummy.lo libabplugins_la_OBJECTS = $(am_libabplugins_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/dummy.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libabplugins_la_SOURCES) DIST_SOURCES = $(libabplugins_la_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir distdir-am am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ADD_ACLOCAL_FLAGS = @ADD_ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AQBANKING_CLI_VERSION_STRING = @AQBANKING_CLI_VERSION_STRING@ AQBANKING_FINTS_VERSION_STRING = @AQBANKING_FINTS_VERSION_STRING@ AQBANKING_SO_AGE = @AQBANKING_SO_AGE@ AQBANKING_SO_CURRENT = @AQBANKING_SO_CURRENT@ AQBANKING_SO_EFFECTIVE = @AQBANKING_SO_EFFECTIVE@ AQBANKING_SO_REVISION = @AQBANKING_SO_REVISION@ AQBANKING_VERSION_BUILD = @AQBANKING_VERSION_BUILD@ AQBANKING_VERSION_FULL_STRING = @AQBANKING_VERSION_FULL_STRING@ AQBANKING_VERSION_MAJOR = @AQBANKING_VERSION_MAJOR@ AQBANKING_VERSION_MINOR = @AQBANKING_VERSION_MINOR@ AQBANKING_VERSION_PATCHLEVEL = @AQBANKING_VERSION_PATCHLEVEL@ AQBANKING_VERSION_RELEASE_STRING = @AQBANKING_VERSION_RELEASE_STRING@ AQBANKING_VERSION_STRING = @AQBANKING_VERSION_STRING@ AQBANKING_VERSION_TAG = @AQBANKING_VERSION_TAG@ AQEBICS_CFLAGS = @AQEBICS_CFLAGS@ AQEBICS_LIBS = @AQEBICS_LIBS@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATETIME = @DATETIME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_EXCLUDE_PATTERNS = @DOXYGEN_EXCLUDE_PATTERNS@ DOXYGEN_FILE_PATTERNS = @DOXYGEN_FILE_PATTERNS@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENGUI_GTK2_CFLAGS = @GWENGUI_GTK2_CFLAGS@ GWENGUI_GTK2_LIBS = @GWENGUI_GTK2_LIBS@ GWENHYWFAR_MINIMUM_VERSION = @GWENHYWFAR_MINIMUM_VERSION@ HAVE_GWENGUI_GTK2 = @HAVE_GWENGUI_GTK2@ HAVE_I18N = @HAVE_I18N@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIBXSLT_CFLAGS = @LIBXSLT_CFLAGS@ LIBXSLT_LIBS = @LIBXSLT_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_SUPPORTS_QT = @MSGFMT_SUPPORTS_QT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ TUTORIALS = @TUTORIALS@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XMLMERGE = @XMLMERGE@ XMLSEC_CFLAGS = @XMLSEC_CFLAGS@ XMLSEC_LIBS = @XMLSEC_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ aqbanking_backends = @aqbanking_backends@ aqbanking_cfg_searchdir = @aqbanking_cfg_searchdir@ aqbanking_data_searchdir = @aqbanking_data_searchdir@ aqbanking_headerdir = @aqbanking_headerdir@ aqbanking_headerdir_am = @aqbanking_headerdir_am@ aqbanking_includes = @aqbanking_includes@ aqbanking_internal_libs = @aqbanking_internal_libs@ aqbanking_ldflags = @aqbanking_ldflags@ aqbanking_libs = @aqbanking_libs@ aqbanking_locale_searchdir = @aqbanking_locale_searchdir@ aqbanking_modules = @aqbanking_modules@ aqbanking_pkgdatadir = @aqbanking_pkgdatadir@ aqbanking_plugin_searchdir = @aqbanking_plugin_searchdir@ aqbanking_plugindir = @aqbanking_plugindir@ aqbanking_plugins_backends_dirs = @aqbanking_plugins_backends_dirs@ aqbanking_plugins_backends_libs = @aqbanking_plugins_backends_libs@ aqbanking_plugins_bankinfo_dirs = @aqbanking_plugins_bankinfo_dirs@ aqbanking_plugins_bankinfo_libs = @aqbanking_plugins_bankinfo_libs@ aqbanking_plugins_imexporters_dirs = @aqbanking_plugins_imexporters_dirs@ aqbanking_plugins_imexporters_libs = @aqbanking_plugins_imexporters_libs@ aqbanking_plugins_parsers_dirs = @aqbanking_plugins_parsers_dirs@ aqbanking_symlinkdir = @aqbanking_symlinkdir@ aqbanking_sys_is_windows = @aqbanking_sys_is_windows@ aqbankingpp_modules = @aqbankingpp_modules@ aqebics_datadir = @aqebics_datadir@ aqebics_includes = @aqebics_includes@ aqebics_internal_libs = @aqebics_internal_libs@ aqebics_ldflags = @aqebics_ldflags@ aqebics_libs = @aqebics_libs@ aqfints_datadir = @aqfints_datadir@ aqhbci_datadir = @aqhbci_datadir@ aqhbci_includes = @aqhbci_includes@ aqhbci_internal_libs = @aqhbci_internal_libs@ aqhbci_ldflags = @aqhbci_ldflags@ aqhbci_libs = @aqhbci_libs@ aqofxconnect_includes = @aqofxconnect_includes@ aqofxconnect_internal_libs = @aqofxconnect_internal_libs@ aqofxconnect_libs = @aqofxconnect_libs@ aqpaypal_includes = @aqpaypal_includes@ aqpaypal_internal_libs = @aqpaypal_internal_libs@ aqpaypal_libs = @aqpaypal_libs@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gmp_libs = @gmp_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_dir = @gwenhywfar_dir@ gwenhywfar_has_crypt = @gwenhywfar_has_crypt@ gwenhywfar_headers = @gwenhywfar_headers@ gwenhywfar_includes = @gwenhywfar_includes@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_plugins = @gwenhywfar_plugins@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ typemaker2_exe = @typemaker2_exe@ visibility_cflags = @visibility_cflags@ with_aqebics = @with_aqebics@ with_aqhbci = @with_aqhbci@ SUBDIRS = parsers imexporters bankinfo backends noinst_LTLIBRARIES = libabplugins.la libabplugins_la_SOURCES = dummy.c libabplugins_la_LIBADD = \ backends/libabbackends.la \ bankinfo/libabbankinfo.la \ imexporters/libabimexporters.la all: all-recursive .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libs/plugins/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libs/plugins/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libabplugins.la: $(libabplugins_la_OBJECTS) $(libabplugins_la_DEPENDENCIES) $(EXTRA_libabplugins_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libabplugins_la_OBJECTS) $(libabplugins_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dummy.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(LTLIBRARIES) installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-recursive -rm -f ./$(DEPDIR)/dummy.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f ./$(DEPDIR)/dummy.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ am--depfiles check check-am clean clean-generic clean-libtool \ clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am .PRECIOUS: Makefile sources: for d in $(SUBDIRS); do \ $(MAKE) -C $$d sources; \ done built_sources: for d in $(SUBDIRS); do \ $(MAKE) -C $$d built_sources; \ done ; cppcheck: for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done typefiles: for d in $(SUBDIRS); do \ $(MAKE) -C $$d typefiles; \ done typedefs: for d in $(SUBDIRS); do \ $(MAKE) -C $$d typedefs; \ done # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: aqbanking-6.6.1/src/libs/plugins/backends/0000755000175000017500000000000015037736164015447 500000000000000aqbanking-6.6.1/src/libs/plugins/backends/Makefile.am0000664000175000017500000000120214546575647017433 00000000000000SUBDIRS = $(aqbanking_plugins_backends_dirs) DIST_SUBDIRS = aqfints aqhbci aqofxconnect aqnone aqebics aqpaypal aqgivve noinst_LTLIBRARIES=libabbackends.la libabbackends_la_SOURCES=dummy.c libabbackends_la_LIBADD=@aqbanking_plugins_backends_libs@ sources: for d in $(DIST_SUBDIRS); do \ $(MAKE) -C $$d sources; \ done built_sources: for d in $(DIST_SUBDIRS); do \ $(MAKE) -C $$d built_sources; \ done ; cppcheck: for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done typefiles: for d in $(SUBDIRS); do \ $(MAKE) -C $$d typefiles; \ done typedefs: for d in $(SUBDIRS); do \ $(MAKE) -C $$d typedefs; \ done aqbanking-6.6.1/src/libs/plugins/backends/aqfints/0000755000175000017500000000000015037736161017111 500000000000000aqbanking-6.6.1/src/libs/plugins/backends/aqfints/banking/0000755000175000017500000000000015037736162020523 500000000000000aqbanking-6.6.1/src/libs/plugins/backends/aqfints/banking/provider_p.h0000664000175000017500000000134714043610745022766 00000000000000/*************************************************************************** begin : Sat Oct 26 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AQFINTS_PROVIDER_P_H #define AQFINTS_PROVIDER_P_H #include "provider_l.h" #define AF_PM_LIBNAME "aqfints" #define AF_PM_FINTSDATADIR "fintsdatadir" typedef struct AF_PROVIDER AF_PROVIDER; struct AF_PROVIDER { GWEN_DB_NODE *dbConfig; uint32_t lastVersion; AQFINTS_PARSER *parser; }; #endif aqbanking-6.6.1/src/libs/plugins/backends/aqfints/banking/Makefile.am0000664000175000017500000000442614043610745022501 00000000000000SUBDIRS=control AM_CFLAGS=-DBUILDING_AQBANKING @visibility_cflags@ AM_CPPFLAGS = -I$(top_srcdir)/src/libs -I$(top_builddir)/src/libs $(gwenhywfar_includes) \ -I$(srcdir)/../.. \ -I$(srcdir)/.. \ -I$(srcdir)/../libaqfints \ -I$(top_srcdir)/src/libs/aqbanking DEFS+=-DAF_FINTSDATADIR=\"$(aqbanking_data_searchdir)/aqbanking/backends/aqfints/fints\" noinst_LTLIBRARIES=libaqfintsbanking.la typefiles= typedatadir=$(datadir)/aqbanking/typemaker2/c dist_typedata_DATA= built_sources= build_headers_priv= build_headers_pub= build_headers=$(build_headers_priv) $(build_headers_pub) noinst_HEADERS= $(build_headers) \ provider.h \ provider_l.h \ provider_p.h libaqfintsbanking_la_SOURCES=$(built_sources) \ provider.c libaqfintsbanking_la_LIBADD=control/libafcontrol.la EXTRA_DIST=$(typefiles) $(built_sources) $(build_headers) built_sources: $(built_sources) list='$(SUBDIRS)'; for d in $$list; do \ $(MAKE) -C $$d built_sources; \ done ; clean_build_files: rm -f $(built_sources) $(build_headers) format_built_files: for f in $(built_sources) $(build_headers); do \ $(ASTYLE) --style=stroustrup -s2 --min-conditional-indent=0 --indent-labels --max-continuation-indent=80 --pad-comma --pad-header --unpad-paren --align-pointer=name --break-closing-braces --break-one-line-headers --attach-return-type --convert-tabs --max-code-length=120 --break-after-logical --suffix=none $$f; \ done sources: for f in $(libaqfintsbanking_la_SOURCES) $(EXTRA_DIST); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d sources; \ done typefiles: $(typefiles) for d in $(SUBDIRS); do \ $(MAKE) -C $$d typefiles; \ done $(typemaker2_exe) -I $(top_srcdir)/src/libs/aqbanking/typemaker2/c -I $(gwenhywfar_dir)/share/gwenhywfar/typemaker2/c -I $(srcdir) --destfolder="$(srcdir)" $(typefiles) typedefs: $(typefiles) for d in $(SUBDIRS); do \ $(MAKE) -C $$d typedefs; \ done $(typemaker2_exe) --defs-only -I $(top_srcdir)/src/libs/aqbanking/typemaker2/c -I $(gwenhywfar_dir)/share/gwenhywfar/typemaker2/c -I $(srcdir) --destfolder="$(srcdir)" $(typefiles) cppcheck: for f in $(libaqfintsbanking_la_SOURCES); do \ cppcheck --force $$f ; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done aqbanking-6.6.1/src/libs/plugins/backends/aqfints/banking/provider.h0000664000175000017500000000115614043610745022445 00000000000000/*************************************************************************** begin : Sat Oct 26 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AQFINTS_PROVIDER_H #define AQFINTS_PROVIDER_H #define AF_PROVIDER_NAME "aqfints" #include AB_PROVIDER *AF_Provider_new(AB_BANKING *ab); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqfints/banking/provider_l.h0000664000175000017500000000123514043610745022756 00000000000000/*************************************************************************** begin : Sat Oct 26 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AQFINTS_PROVIDER_L_H #define AQFINTS_PROVIDER_L_H #include "banking/provider.h" #include "parser/parser.h" AQFINTS_PARSER *AF_Provider_GetParser(AB_PROVIDER *pro); AQFINTS_PARSER *AF_Provider_CreateParser(AB_PROVIDER *pro); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqfints/banking/Makefile.in0000644000175000017500000007623415037736025022522 00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/libs/plugins/backends/aqfints/banking ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/distri.m4 $(top_srcdir)/m4/gwenhywfar.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/os.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(dist_typedata_DATA) \ $(noinst_HEADERS) $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libaqfintsbanking_la_DEPENDENCIES = control/libafcontrol.la am__objects_1 = am_libaqfintsbanking_la_OBJECTS = $(am__objects_1) provider.lo libaqfintsbanking_la_OBJECTS = $(am_libaqfintsbanking_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/provider.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libaqfintsbanking_la_SOURCES) DIST_SOURCES = $(libaqfintsbanking_la_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(typedatadir)" DATA = $(dist_typedata_DATA) HEADERS = $(noinst_HEADERS) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir distdir-am am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ADD_ACLOCAL_FLAGS = @ADD_ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AQBANKING_CLI_VERSION_STRING = @AQBANKING_CLI_VERSION_STRING@ AQBANKING_FINTS_VERSION_STRING = @AQBANKING_FINTS_VERSION_STRING@ AQBANKING_SO_AGE = @AQBANKING_SO_AGE@ AQBANKING_SO_CURRENT = @AQBANKING_SO_CURRENT@ AQBANKING_SO_EFFECTIVE = @AQBANKING_SO_EFFECTIVE@ AQBANKING_SO_REVISION = @AQBANKING_SO_REVISION@ AQBANKING_VERSION_BUILD = @AQBANKING_VERSION_BUILD@ AQBANKING_VERSION_FULL_STRING = @AQBANKING_VERSION_FULL_STRING@ AQBANKING_VERSION_MAJOR = @AQBANKING_VERSION_MAJOR@ AQBANKING_VERSION_MINOR = @AQBANKING_VERSION_MINOR@ AQBANKING_VERSION_PATCHLEVEL = @AQBANKING_VERSION_PATCHLEVEL@ AQBANKING_VERSION_RELEASE_STRING = @AQBANKING_VERSION_RELEASE_STRING@ AQBANKING_VERSION_STRING = @AQBANKING_VERSION_STRING@ AQBANKING_VERSION_TAG = @AQBANKING_VERSION_TAG@ AQEBICS_CFLAGS = @AQEBICS_CFLAGS@ AQEBICS_LIBS = @AQEBICS_LIBS@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATETIME = @DATETIME@ DEFS = @DEFS@ \ -DAF_FINTSDATADIR=\"$(aqbanking_data_searchdir)/aqbanking/backends/aqfints/fints\" DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_EXCLUDE_PATTERNS = @DOXYGEN_EXCLUDE_PATTERNS@ DOXYGEN_FILE_PATTERNS = @DOXYGEN_FILE_PATTERNS@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENGUI_GTK2_CFLAGS = @GWENGUI_GTK2_CFLAGS@ GWENGUI_GTK2_LIBS = @GWENGUI_GTK2_LIBS@ GWENHYWFAR_MINIMUM_VERSION = @GWENHYWFAR_MINIMUM_VERSION@ HAVE_GWENGUI_GTK2 = @HAVE_GWENGUI_GTK2@ HAVE_I18N = @HAVE_I18N@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIBXSLT_CFLAGS = @LIBXSLT_CFLAGS@ LIBXSLT_LIBS = @LIBXSLT_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_SUPPORTS_QT = @MSGFMT_SUPPORTS_QT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ TUTORIALS = @TUTORIALS@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XMLMERGE = @XMLMERGE@ XMLSEC_CFLAGS = @XMLSEC_CFLAGS@ XMLSEC_LIBS = @XMLSEC_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ aqbanking_backends = @aqbanking_backends@ aqbanking_cfg_searchdir = @aqbanking_cfg_searchdir@ aqbanking_data_searchdir = @aqbanking_data_searchdir@ aqbanking_headerdir = @aqbanking_headerdir@ aqbanking_headerdir_am = @aqbanking_headerdir_am@ aqbanking_includes = @aqbanking_includes@ aqbanking_internal_libs = @aqbanking_internal_libs@ aqbanking_ldflags = @aqbanking_ldflags@ aqbanking_libs = @aqbanking_libs@ aqbanking_locale_searchdir = @aqbanking_locale_searchdir@ aqbanking_modules = @aqbanking_modules@ aqbanking_pkgdatadir = @aqbanking_pkgdatadir@ aqbanking_plugin_searchdir = @aqbanking_plugin_searchdir@ aqbanking_plugindir = @aqbanking_plugindir@ aqbanking_plugins_backends_dirs = @aqbanking_plugins_backends_dirs@ aqbanking_plugins_backends_libs = @aqbanking_plugins_backends_libs@ aqbanking_plugins_bankinfo_dirs = @aqbanking_plugins_bankinfo_dirs@ aqbanking_plugins_bankinfo_libs = @aqbanking_plugins_bankinfo_libs@ aqbanking_plugins_imexporters_dirs = @aqbanking_plugins_imexporters_dirs@ aqbanking_plugins_imexporters_libs = @aqbanking_plugins_imexporters_libs@ aqbanking_plugins_parsers_dirs = @aqbanking_plugins_parsers_dirs@ aqbanking_symlinkdir = @aqbanking_symlinkdir@ aqbanking_sys_is_windows = @aqbanking_sys_is_windows@ aqbankingpp_modules = @aqbankingpp_modules@ aqebics_datadir = @aqebics_datadir@ aqebics_includes = @aqebics_includes@ aqebics_internal_libs = @aqebics_internal_libs@ aqebics_ldflags = @aqebics_ldflags@ aqebics_libs = @aqebics_libs@ aqfints_datadir = @aqfints_datadir@ aqhbci_datadir = @aqhbci_datadir@ aqhbci_includes = @aqhbci_includes@ aqhbci_internal_libs = @aqhbci_internal_libs@ aqhbci_ldflags = @aqhbci_ldflags@ aqhbci_libs = @aqhbci_libs@ aqofxconnect_includes = @aqofxconnect_includes@ aqofxconnect_internal_libs = @aqofxconnect_internal_libs@ aqofxconnect_libs = @aqofxconnect_libs@ aqpaypal_includes = @aqpaypal_includes@ aqpaypal_internal_libs = @aqpaypal_internal_libs@ aqpaypal_libs = @aqpaypal_libs@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gmp_libs = @gmp_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_dir = @gwenhywfar_dir@ gwenhywfar_has_crypt = @gwenhywfar_has_crypt@ gwenhywfar_headers = @gwenhywfar_headers@ gwenhywfar_includes = @gwenhywfar_includes@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_plugins = @gwenhywfar_plugins@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ typemaker2_exe = @typemaker2_exe@ visibility_cflags = @visibility_cflags@ with_aqebics = @with_aqebics@ with_aqhbci = @with_aqhbci@ SUBDIRS = control AM_CFLAGS = -DBUILDING_AQBANKING @visibility_cflags@ AM_CPPFLAGS = -I$(top_srcdir)/src/libs -I$(top_builddir)/src/libs $(gwenhywfar_includes) \ -I$(srcdir)/../.. \ -I$(srcdir)/.. \ -I$(srcdir)/../libaqfints \ -I$(top_srcdir)/src/libs/aqbanking noinst_LTLIBRARIES = libaqfintsbanking.la typefiles = typedatadir = $(datadir)/aqbanking/typemaker2/c dist_typedata_DATA = built_sources = build_headers_priv = build_headers_pub = build_headers = $(build_headers_priv) $(build_headers_pub) noinst_HEADERS = $(build_headers) \ provider.h \ provider_l.h \ provider_p.h libaqfintsbanking_la_SOURCES = $(built_sources) \ provider.c libaqfintsbanking_la_LIBADD = control/libafcontrol.la EXTRA_DIST = $(typefiles) $(built_sources) $(build_headers) all: all-recursive .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libs/plugins/backends/aqfints/banking/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libs/plugins/backends/aqfints/banking/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libaqfintsbanking.la: $(libaqfintsbanking_la_OBJECTS) $(libaqfintsbanking_la_DEPENDENCIES) $(EXTRA_libaqfintsbanking_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libaqfintsbanking_la_OBJECTS) $(libaqfintsbanking_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/provider.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-dist_typedataDATA: $(dist_typedata_DATA) @$(NORMAL_INSTALL) @list='$(dist_typedata_DATA)'; test -n "$(typedatadir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(typedatadir)'"; \ $(MKDIR_P) "$(DESTDIR)$(typedatadir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(typedatadir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(typedatadir)" || exit $$?; \ done uninstall-dist_typedataDATA: @$(NORMAL_UNINSTALL) @list='$(dist_typedata_DATA)'; test -n "$(typedatadir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(typedatadir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(typedatadir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-recursive -rm -f ./$(DEPDIR)/provider.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dist_typedataDATA install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f ./$(DEPDIR)/provider.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-dist_typedataDATA .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ am--depfiles check check-am clean clean-generic clean-libtool \ clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am \ install-dist_typedataDATA install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs installdirs-am \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \ uninstall-dist_typedataDATA .PRECIOUS: Makefile built_sources: $(built_sources) list='$(SUBDIRS)'; for d in $$list; do \ $(MAKE) -C $$d built_sources; \ done ; clean_build_files: rm -f $(built_sources) $(build_headers) format_built_files: for f in $(built_sources) $(build_headers); do \ $(ASTYLE) --style=stroustrup -s2 --min-conditional-indent=0 --indent-labels --max-continuation-indent=80 --pad-comma --pad-header --unpad-paren --align-pointer=name --break-closing-braces --break-one-line-headers --attach-return-type --convert-tabs --max-code-length=120 --break-after-logical --suffix=none $$f; \ done sources: for f in $(libaqfintsbanking_la_SOURCES) $(EXTRA_DIST); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d sources; \ done typefiles: $(typefiles) for d in $(SUBDIRS); do \ $(MAKE) -C $$d typefiles; \ done $(typemaker2_exe) -I $(top_srcdir)/src/libs/aqbanking/typemaker2/c -I $(gwenhywfar_dir)/share/gwenhywfar/typemaker2/c -I $(srcdir) --destfolder="$(srcdir)" $(typefiles) typedefs: $(typefiles) for d in $(SUBDIRS); do \ $(MAKE) -C $$d typedefs; \ done $(typemaker2_exe) --defs-only -I $(top_srcdir)/src/libs/aqbanking/typemaker2/c -I $(gwenhywfar_dir)/share/gwenhywfar/typemaker2/c -I $(srcdir) --destfolder="$(srcdir)" $(typefiles) cppcheck: for f in $(libaqfintsbanking_la_SOURCES); do \ cppcheck --force $$f ; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: aqbanking-6.6.1/src/libs/plugins/backends/aqfints/banking/provider.c0000664000175000017500000001345314043610745022443 00000000000000/*************************************************************************** begin : Sat Oct 26 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "provider_p.h" #include "aqfints.h" #include "control/control.h" #include /* ------------------------------------------------------------------------------------------------ * forward declarations * ------------------------------------------------------------------------------------------------ */ static void GWENHYWFAR_CB _provider_FreeData(void *bp, void *p); static int GWENHYWFAR_CB _provider_Init(AB_PROVIDER *pro, GWEN_DB_NODE *dbData); static int GWENHYWFAR_CB _provider_Fini(AB_PROVIDER *pro, GWEN_DB_NODE *dbData); /* ------------------------------------------------------------------------------------------------ * implementations * ------------------------------------------------------------------------------------------------ */ GWEN_INHERIT(AB_PROVIDER, AF_PROVIDER); AB_PROVIDER *AF_Provider_new(AB_BANKING *ab) { AB_PROVIDER *pro; AF_PROVIDER *xpro; pro=AB_Provider_new(ab, AF_PROVIDER_NAME); assert(pro); AB_Provider_SetInitFn(pro, _provider_Init); AB_Provider_SetFiniFn(pro, _provider_Fini); AB_Provider_SetControlFn(pro, AF_Control); #if 0 AB_Provider_SetGetNewUserDialogFn(pro, AH_Provider_GetNewUserDialog); AB_Provider_SetGetEditUserDialogFn(pro, AH_Provider_GetEditUserDialog); AB_Provider_SetGetUserTypeDialogFn(pro, AH_Provider_GetUserTypeDialog); AB_Provider_SetGetEditAccountDialogFn(pro, AH_Provider_GetEditAccountDialog); AB_Provider_SetSendCommandsFn(pro, AH_Provider_SendCommands); AB_Provider_SetCreateAccountObjectsFn(pro, AH_Provider_CreateAccountObject); AB_Provider_SetCreateUserObjectsFn(pro, AH_Provider_CreateUserObject); AB_Provider_SetUpdateAccountSpecFn(pro, AH_Provider_UpdateAccountSpec); AB_Provider_AddFlags(pro, AB_PROVIDER_FLAGS_HAS_NEWUSER_DIALOG | AB_PROVIDER_FLAGS_HAS_EDITUSER_DIALOG | AB_PROVIDER_FLAGS_HAS_EDITACCOUNT_DIALOG | AB_PROVIDER_FLAGS_HAS_USERTYPE_DIALOG); #endif GWEN_NEW_OBJECT(AF_PROVIDER, xpro); GWEN_INHERIT_SETDATA(AB_PROVIDER, AF_PROVIDER, pro, xpro, _provider_FreeData); return pro; } void _provider_FreeData(GWEN_UNUSED void *bp, void *p) { AF_PROVIDER *xpro; xpro=(AF_PROVIDER *)p; AQFINTS_Parser_free(xpro->parser); GWEN_FREE_OBJECT(xpro); } int _provider_Init(AB_PROVIDER *pro, GWEN_DB_NODE *dbData) { AF_PROVIDER *xpro; const char *logLevelName; uint32_t currentVersion; /* setup logging */ logLevelName=getenv("AQFINTS_LOGLEVEL"); if (logLevelName) { GWEN_LOGGER_LEVEL ll; ll=GWEN_Logger_Name2Level(logLevelName); if (ll!=GWEN_LoggerLevel_Unknown) { GWEN_Logger_SetLevel(AQFINTS_LOGDOMAIN, ll); DBG_WARN(AQFINTS_LOGDOMAIN, "Overriding loglevel for AqFinTS with \"%s\"", logLevelName); } else { DBG_ERROR(AQFINTS_LOGDOMAIN, "Unknown loglevel \"%s\"", logLevelName); } } DBG_NOTICE(AQFINTS_LOGDOMAIN, "Initializing AqFinTS backend"); assert(pro); xpro=GWEN_INHERIT_GETDATA(AB_PROVIDER, AF_PROVIDER, pro); assert(xpro); currentVersion= (AQBANKING_VERSION_MAJOR<<24) | (AQBANKING_VERSION_MINOR<<16) | (AQBANKING_VERSION_PATCHLEVEL<<8) | AQBANKING_VERSION_BUILD; xpro->lastVersion=GWEN_DB_GetIntValue(dbData, "lastVersion", 0, 0); if (xpro->lastVersion int GWENHYWFAR_CB AF_Control(AB_PROVIDER *pro, int argc, char **argv); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqfints/banking/control/logfile.c0000664000175000017500000003271114043610745023710 00000000000000/*************************************************************************** begin : Sat Oct 26 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "logfile.h" #include "aqfints.h" #include "parser/parser.h" #include "parser/parser_dump.h" #include "banking/provider_l.h" #include #include #include static int _readLogFile(const char *fname, GWEN_DB_NODE *db); static int parseMessages(AB_PROVIDER *pro, GWEN_DB_NODE *dbMessages, int doListSegments, GWEN_SYNCIO *sioDb); static int dumpSegmentListToDb(AQFINTS_SEGMENT_LIST *segmentList, GWEN_DB_NODE *dbHeader, GWEN_SYNCIO *sioDb); static int listSegments(AQFINTS_SEGMENT_LIST *segmentList, GWEN_DB_NODE *dbHeader, GWEN_BUFFER *bufSegmentList); int AF_Control_LogFile(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv) { int rv; GWEN_DB_NODE *db; GWEN_DB_NODE *dbMessages; GWEN_SYNCIO *sioDb=NULL; const char *inFile; const char *dbOutFile; int doListSegments=0; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "infile", /* name */ 1, /* minnum */ 1, /* maxnum */ "i", /* short option */ "infile", /* long option */ "Specify input file", /* short description */ "Specify input file" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "dboutfile", /* name */ 0, /* minnum */ 1, /* maxnum */ "d", /* short option */ "dbfile", /* long option */ "Specify DB output file", /* short description */ "Specify DB output file" /* long description */ }, { 0, /* flags */ GWEN_ArgsType_Int, /* type */ "listSegments", /* name */ 0, /* minnum */ 1, /* maxnum */ "l", /* short option */ "list-segments", /* long option */ "List segments", /* short description */ "List segments" /* 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(stdout, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } dbOutFile=GWEN_DB_GetCharValue(db, "dbOutFile", 0, NULL); inFile=GWEN_DB_GetCharValue(db, "inFile", 0, NULL); assert(inFile); doListSegments=GWEN_DB_GetIntValue(db, "listSegments", 0, 0); dbMessages=GWEN_DB_Group_new("Messages"); rv=_readLogFile(inFile, dbMessages); if (rv<0) { DBG_ERROR(0, "Error reading message (%d)", rv); GWEN_DB_Group_free(dbMessages); return 2; } if (dbOutFile) { sioDb=GWEN_SyncIo_File_new(dbOutFile, GWEN_SyncIo_File_CreationMode_CreateAlways); GWEN_SyncIo_AddFlags(sioDb, GWEN_SYNCIO_FILE_FLAGS_READ | GWEN_SYNCIO_FILE_FLAGS_WRITE | GWEN_SYNCIO_FILE_FLAGS_UREAD | GWEN_SYNCIO_FILE_FLAGS_UWRITE | GWEN_SYNCIO_FILE_FLAGS_APPEND); rv=GWEN_SyncIo_Connect(sioDb); if (rv<0) { DBG_INFO(AQFINTS_LOGDOMAIN, "here (%d)", rv); GWEN_SyncIo_free(sioDb); return 2; } } rv=parseMessages(pro, dbMessages, doListSegments, sioDb); if (rv<0) { DBG_ERROR(AQFINTS_LOGDOMAIN, "Error parsing messages (%d)", rv); GWEN_DB_Group_free(dbMessages); GWEN_SyncIo_free(sioDb); return 2; } /* close output layer */ if (dbOutFile) { rv=GWEN_SyncIo_Disconnect(sioDb); if (rv<0) { DBG_INFO(AQFINTS_LOGDOMAIN, "here (%d)", rv); GWEN_SyncIo_free(sioDb); return 2; } GWEN_SyncIo_free(sioDb); } return 0; } int _readLogFile(const char *fname, GWEN_DB_NODE *db) { GWEN_SYNCIO *sio; GWEN_FAST_BUFFER *fb; int rv; GWEN_BUFFER *tbuf = NULL; 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_ERROR(0, "Error opening file [%s] (%d)", fname, rv); return rv; } /* create fast buffer around io layer */ fb=GWEN_FastBuffer_new(1024, sio); for (;;) { GWEN_DB_NODE *dbMsg; GWEN_DB_NODE *dbHeader; unsigned int size; /* read header */ dbMsg=GWEN_DB_Group_new("Message"); dbHeader=GWEN_DB_GetGroup(dbMsg, GWEN_DB_FLAGS_DEFAULT, "header"); rv=GWEN_DB_ReadFromFastBuffer(dbHeader, fb, GWEN_DB_FLAGS_HTTP | GWEN_DB_FLAGS_UNTIL_EMPTY_LINE); if (rv<0) { if (rv==GWEN_ERROR_EOF) break; else { GWEN_DB_Group_free(dbMsg); GWEN_FastBuffer_free(fb); GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); DBG_ERROR(0, "Error reading header from file [%s] (%d)", fname, rv); GWEN_DB_Dump(db, 2); return rv; } } /* read body */ size=GWEN_DB_GetIntValue(dbHeader, "size", 0, 0); tbuf=GWEN_Buffer_new(0, 2048, 0, 1); while (size) { unsigned int lsize; uint8_t buffer[1024]; lsize=size; if (lsize>sizeof(buffer)) lsize=sizeof(buffer); GWEN_FASTBUFFER_READFORCED(fb, rv, buffer, lsize); if (rv<0) { GWEN_DB_Group_free(dbMsg); GWEN_FastBuffer_free(fb); GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); DBG_ERROR(0, "Error reading body from file [%s] (%d)", fname, rv); return rv; } GWEN_Buffer_AppendBytes(tbuf, (const char *)buffer, lsize); size-=lsize; } // while GWEN_DB_SetBinValue(dbMsg, GWEN_DB_FLAGS_OVERWRITE_VARS, "body", GWEN_Buffer_GetStart(tbuf), GWEN_Buffer_GetUsedBytes(tbuf)); GWEN_Buffer_Reset(tbuf); GWEN_DB_AddGroup(db, dbMsg); } GWEN_Buffer_free(tbuf); GWEN_FastBuffer_free(fb); GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); return 0; } int parseMessages(AB_PROVIDER *pro, GWEN_DB_NODE *dbMessages, int doListSegments, GWEN_SYNCIO *sioDb) { GWEN_DB_NODE *dbT; AQFINTS_PARSER *parser; int rv; GWEN_BUFFER *bufSegmentList; parser=AF_Provider_CreateParser(pro); if (parser==NULL) { DBG_ERROR(AQFINTS_LOGDOMAIN, "Could not create parser"); return GWEN_ERROR_GENERIC; } bufSegmentList=GWEN_Buffer_new(0, 256, 0, 1); dbT=GWEN_DB_GetFirstGroup(dbMessages); while (dbT) { const uint8_t *p; uint32_t len; GWEN_DB_NODE *dbHeader; dbHeader=GWEN_DB_GetGroup(dbT, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "header"); assert(dbHeader); p=GWEN_DB_GetBinValue(dbT, "body", 0, NULL, 0, &len); if (p && len) { AQFINTS_SEGMENT_LIST *segmentList; segmentList=AQFINTS_Segment_List_new(); rv=AQFINTS_Parser_ReadIntoSegmentList(parser, segmentList, p, len); if (rv<0) { DBG_ERROR(AQFINTS_LOGDOMAIN, "Error reading HBCI message into segment list (%d)", rv); //AQFINTS_Parser_DumpDefinitions(parser, 2); AQFINTS_Segment_List_free(segmentList); AQFINTS_Parser_free(parser); return rv; } rv=AQFINTS_Parser_ReadSegmentListToDb(parser, segmentList); if (rv<0) { DBG_INFO(AQFINTS_LOGDOMAIN, "Error reading DB data for segment list (%d)", rv); //AQFINTS_Parser_DumpDefinitions(parser, 2); AQFINTS_Segment_List_free(segmentList); AQFINTS_Parser_free(parser); return rv; } if (sioDb) { rv=dumpSegmentListToDb(segmentList, dbHeader, sioDb); if (rv<0) { DBG_ERROR(AQFINTS_LOGDOMAIN, "Error writing DB data for segment list (%d)", rv); //AQFINTS_Parser_DumpDefinitions(parser, 2); AQFINTS_Segment_List_free(segmentList); AQFINTS_Parser_free(parser); return rv; } } if (doListSegments) { rv=listSegments(segmentList, dbHeader, bufSegmentList); if (rv<0) { DBG_ERROR(AQFINTS_LOGDOMAIN, "Error listing segment list (%d)", rv); //AQFINTS_Parser_DumpDefinitions(parser, 2); AQFINTS_Segment_List_free(segmentList); AQFINTS_Parser_free(parser); return rv; } } /*AQFINTS_Parser_DumpSegmentList(segmentList, 2);*/ AQFINTS_Segment_List_free(segmentList); } dbT=GWEN_DB_GetNextGroup(dbT); } AQFINTS_Parser_free(parser); if (doListSegments) { fprintf(stdout, "%s\n", GWEN_Buffer_GetStart(bufSegmentList)); } GWEN_Buffer_free(bufSegmentList); return 0; } int dumpSegmentListToDb(AQFINTS_SEGMENT_LIST *segmentList, GWEN_DB_NODE *dbHeader, GWEN_SYNCIO *sioDb) { GWEN_DB_NODE *dbOut; GWEN_BUFFER *xbuf; AQFINTS_SEGMENT *segment; const char *s; int rv; dbOut=GWEN_DB_Group_new("Messages"); segment=AQFINTS_Segment_List_First(segmentList); while (segment) { GWEN_DB_NODE *dbSegment; dbSegment=AQFINTS_Segment_GetDbData(segment); if (dbSegment) GWEN_DB_AddGroup(dbOut, GWEN_DB_Group_dup(dbSegment)); segment=AQFINTS_Segment_List_Next(segment); } xbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(xbuf, "# ========== Message ( "); s=GWEN_DB_GetCharValue(dbHeader, "sender", 0, "UNK"); if (s && *s) { GWEN_Buffer_AppendString(xbuf, "sender="); GWEN_Buffer_AppendString(xbuf, s); GWEN_Buffer_AppendString(xbuf, " "); } s=GWEN_DB_GetCharValue(dbHeader, "crypt", 0, "UNK"); if (s && *s) { GWEN_Buffer_AppendString(xbuf, "crypt="); GWEN_Buffer_AppendString(xbuf, s); GWEN_Buffer_AppendString(xbuf, " "); } GWEN_Buffer_AppendString(xbuf, ") ==========\n"); rv=GWEN_SyncIo_WriteForced(sioDb, (const uint8_t *) GWEN_Buffer_GetStart(xbuf), GWEN_Buffer_GetUsedBytes(xbuf)); if (rv<0) { DBG_INFO(AQFINTS_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(xbuf); GWEN_DB_Group_free(dbOut); return rv; } GWEN_Buffer_free(xbuf); rv=GWEN_DB_WriteToIo(dbOut, sioDb, GWEN_DB_FLAGS_DEFAULT); if (rv<0) { DBG_INFO(AQFINTS_LOGDOMAIN, "here (%d)", rv); GWEN_DB_Group_free(dbOut); return rv; } GWEN_DB_Group_free(dbOut); /* append empty line to separate header from data */ rv=GWEN_SyncIo_WriteForced(sioDb, (const uint8_t *) "\n\n", 1); if (rv<0) { DBG_INFO(0, "here (%d)", rv); return rv; } return 0; } int listSegments(AQFINTS_SEGMENT_LIST *segmentList, GWEN_DB_NODE *dbHeader, GWEN_BUFFER *bufSegmentList) { AQFINTS_SEGMENT *segment; const char *s; GWEN_Buffer_AppendString(bufSegmentList, "# ========== Message ( "); s=GWEN_DB_GetCharValue(dbHeader, "sender", 0, "UNK"); if (s && *s) { GWEN_Buffer_AppendString(bufSegmentList, "sender="); GWEN_Buffer_AppendString(bufSegmentList, s); GWEN_Buffer_AppendString(bufSegmentList, " "); } s=GWEN_DB_GetCharValue(dbHeader, "crypt", 0, "UNK"); if (s && *s) { GWEN_Buffer_AppendString(bufSegmentList, "crypt="); GWEN_Buffer_AppendString(bufSegmentList, s); GWEN_Buffer_AppendString(bufSegmentList, " "); } GWEN_Buffer_AppendString(bufSegmentList, ") ==========\n"); segment=AQFINTS_Segment_List_First(segmentList); while (segment) { const char *segId; const char *segCode; int segNumber; int segVersion; uint32_t runtimeFlags; char lineBuffer[2048]; segNumber=AQFINTS_Segment_GetSegmentNumber(segment); segId=AQFINTS_Segment_GetId(segment); segCode=AQFINTS_Segment_GetCode(segment); segVersion=AQFINTS_Segment_GetSegmentVersion(segment); runtimeFlags=AQFINTS_Segment_GetRuntimeFlags(segment); snprintf(lineBuffer, sizeof(lineBuffer)-1, "%3d: Code=%s, id=%s, version=%d, parsed=%s\n", segNumber, segCode?segCode:"", segId?segId:"", segVersion, (runtimeFlags & AQFINTS_SEGMENT_RTFLAGS_PARSED)?"yes":"no"); lineBuffer[sizeof(lineBuffer)-1]=0; GWEN_Buffer_AppendString(bufSegmentList, lineBuffer); segment=AQFINTS_Segment_List_Next(segment); } return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqfints/banking/control/Makefile.am0000664000175000017500000000413314043610745024154 00000000000000 AM_CFLAGS=-DBUILDING_AQBANKING @visibility_cflags@ AM_CPPFLAGS = -I$(top_srcdir)/src/libs -I$(top_builddir)/src/libs $(gwenhywfar_includes) \ -I$(srcdir)/../.. \ -I$(srcdir)/.. \ -I$(srcdir)/../../libaqfints \ -I$(top_srcdir)/src/libs/aqbanking noinst_LTLIBRARIES=libafcontrol.la typefiles= typedatadir=$(datadir)/aqbanking/typemaker2/c dist_typedata_DATA= built_sources= build_headers_priv= build_headers_pub= build_headers=$(build_headers_priv) $(build_headers_pub) noinst_HEADERS= $(build_headers) \ control.h \ logfile.h libafcontrol_la_SOURCES= $(built_sources) \ control.c \ logfile.c EXTRA_DIST=$(typefiles) $(built_sources) $(build_headers) built_sources: $(built_sources) list='$(SUBDIRS)'; for d in $$list; do \ $(MAKE) -C $$d built_sources; \ done ; clean_build_files: rm -f $(built_sources) $(build_headers) format_built_files: for f in $(built_sources) $(build_headers); do \ $(ASTYLE) --style=stroustrup -s2 --min-conditional-indent=0 --indent-labels --max-continuation-indent=80 --pad-comma --pad-header --unpad-paren --align-pointer=name --break-closing-braces --break-one-line-headers --attach-return-type --convert-tabs --max-code-length=120 --break-after-logical --suffix=none $$f; \ done sources: for f in $(libafcontrol_la_SOURCES) $(EXTRA_DIST); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d sources; \ done typefiles: $(typefiles) for d in $(SUBDIRS); do \ $(MAKE) -C $$d typefiles; \ done $(typemaker2_exe) -I $(top_srcdir)/src/libs/aqbanking/typemaker2/c -I $(gwenhywfar_dir)/share/gwenhywfar/typemaker2/c -I $(srcdir) --destfolder="$(srcdir)" $(typefiles) typedefs: $(typefiles) for d in $(SUBDIRS); do \ $(MAKE) -C $$d typedefs; \ done $(typemaker2_exe) --defs-only -I $(top_srcdir)/src/libs/aqbanking/typemaker2/c -I $(gwenhywfar_dir)/share/gwenhywfar/typemaker2/c -I $(srcdir) --destfolder="$(srcdir)" $(typefiles) cppcheck: for f in $(libafcontrol_la_SOURCES); do \ cppcheck --force $$f ; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done aqbanking-6.6.1/src/libs/plugins/backends/aqfints/banking/control/control.c0000664000175000017500000000362614043610745023752 00000000000000/*************************************************************************** begin : Sat Oct 26 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "control.h" #include "logfile.h" #include "aqbanking/i18n_l.h" #include #include #include static void showUsage(const char *prgName) { GWEN_BUFFER *ubuf; ubuf=GWEN_Buffer_new(0, 1024, 0, 1); GWEN_Buffer_AppendString(ubuf, I18N("Usage: ")); GWEN_Buffer_AppendString(ubuf, prgName); GWEN_Buffer_AppendString(ubuf, I18N(" COMMAND [LOCAL OPTIONS]\n")); GWEN_Buffer_AppendString(ubuf, I18N("\nCommands:\n\n")); GWEN_Buffer_AppendString(ubuf, I18N(" logfile:\n" " Analyze log files\n\n")); fprintf(stdout, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); } int AF_Control(AB_PROVIDER *pro, int argc, char **argv) { GWEN_DB_NODE *db; const char *cmd; int rv; db=GWEN_DB_Group_new("arguments"); if (argc<1) { showUsage(argv[0]); GWEN_DB_Group_free(db); return 0; } /* if too few args */ cmd=argv[0]; if (!(cmd && *cmd)) { fprintf(stderr, "ERROR: Command needed.\n"); GWEN_DB_Group_free(db); return 1; } if (strcasecmp(cmd, "help")==0) { showUsage(argv[0]); rv=0; } else if (strcasecmp(cmd, "logfile")==0) { rv=AF_Control_LogFile(pro, db, argc, argv); } else { fprintf(stderr, "ERROR: Unknown command \"%s\".\n", cmd); rv=1; } GWEN_DB_Group_free(db); return rv; } aqbanking-6.6.1/src/libs/plugins/backends/aqfints/banking/control/logfile.h0000664000175000017500000000117514043610745023715 00000000000000/*************************************************************************** begin : Sat Oct 26 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AQFINTS_BANKING_LOGFILE_H #define AQFINTS_BANKING_LOGFILE_H #include int AF_Control_LogFile(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqfints/banking/control/Makefile.in0000644000175000017500000006555015037736025024201 00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/libs/plugins/backends/aqfints/banking/control ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/distri.m4 $(top_srcdir)/m4/gwenhywfar.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/os.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(dist_typedata_DATA) \ $(noinst_HEADERS) $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libafcontrol_la_LIBADD = am__objects_1 = am_libafcontrol_la_OBJECTS = $(am__objects_1) control.lo logfile.lo libafcontrol_la_OBJECTS = $(am_libafcontrol_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/control.Plo ./$(DEPDIR)/logfile.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libafcontrol_la_SOURCES) DIST_SOURCES = $(libafcontrol_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(typedatadir)" DATA = $(dist_typedata_DATA) HEADERS = $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADD_ACLOCAL_FLAGS = @ADD_ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AQBANKING_CLI_VERSION_STRING = @AQBANKING_CLI_VERSION_STRING@ AQBANKING_FINTS_VERSION_STRING = @AQBANKING_FINTS_VERSION_STRING@ AQBANKING_SO_AGE = @AQBANKING_SO_AGE@ AQBANKING_SO_CURRENT = @AQBANKING_SO_CURRENT@ AQBANKING_SO_EFFECTIVE = @AQBANKING_SO_EFFECTIVE@ AQBANKING_SO_REVISION = @AQBANKING_SO_REVISION@ AQBANKING_VERSION_BUILD = @AQBANKING_VERSION_BUILD@ AQBANKING_VERSION_FULL_STRING = @AQBANKING_VERSION_FULL_STRING@ AQBANKING_VERSION_MAJOR = @AQBANKING_VERSION_MAJOR@ AQBANKING_VERSION_MINOR = @AQBANKING_VERSION_MINOR@ AQBANKING_VERSION_PATCHLEVEL = @AQBANKING_VERSION_PATCHLEVEL@ AQBANKING_VERSION_RELEASE_STRING = @AQBANKING_VERSION_RELEASE_STRING@ AQBANKING_VERSION_STRING = @AQBANKING_VERSION_STRING@ AQBANKING_VERSION_TAG = @AQBANKING_VERSION_TAG@ AQEBICS_CFLAGS = @AQEBICS_CFLAGS@ AQEBICS_LIBS = @AQEBICS_LIBS@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATETIME = @DATETIME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_EXCLUDE_PATTERNS = @DOXYGEN_EXCLUDE_PATTERNS@ DOXYGEN_FILE_PATTERNS = @DOXYGEN_FILE_PATTERNS@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENGUI_GTK2_CFLAGS = @GWENGUI_GTK2_CFLAGS@ GWENGUI_GTK2_LIBS = @GWENGUI_GTK2_LIBS@ GWENHYWFAR_MINIMUM_VERSION = @GWENHYWFAR_MINIMUM_VERSION@ HAVE_GWENGUI_GTK2 = @HAVE_GWENGUI_GTK2@ HAVE_I18N = @HAVE_I18N@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIBXSLT_CFLAGS = @LIBXSLT_CFLAGS@ LIBXSLT_LIBS = @LIBXSLT_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_SUPPORTS_QT = @MSGFMT_SUPPORTS_QT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ TUTORIALS = @TUTORIALS@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XMLMERGE = @XMLMERGE@ XMLSEC_CFLAGS = @XMLSEC_CFLAGS@ XMLSEC_LIBS = @XMLSEC_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ aqbanking_backends = @aqbanking_backends@ aqbanking_cfg_searchdir = @aqbanking_cfg_searchdir@ aqbanking_data_searchdir = @aqbanking_data_searchdir@ aqbanking_headerdir = @aqbanking_headerdir@ aqbanking_headerdir_am = @aqbanking_headerdir_am@ aqbanking_includes = @aqbanking_includes@ aqbanking_internal_libs = @aqbanking_internal_libs@ aqbanking_ldflags = @aqbanking_ldflags@ aqbanking_libs = @aqbanking_libs@ aqbanking_locale_searchdir = @aqbanking_locale_searchdir@ aqbanking_modules = @aqbanking_modules@ aqbanking_pkgdatadir = @aqbanking_pkgdatadir@ aqbanking_plugin_searchdir = @aqbanking_plugin_searchdir@ aqbanking_plugindir = @aqbanking_plugindir@ aqbanking_plugins_backends_dirs = @aqbanking_plugins_backends_dirs@ aqbanking_plugins_backends_libs = @aqbanking_plugins_backends_libs@ aqbanking_plugins_bankinfo_dirs = @aqbanking_plugins_bankinfo_dirs@ aqbanking_plugins_bankinfo_libs = @aqbanking_plugins_bankinfo_libs@ aqbanking_plugins_imexporters_dirs = @aqbanking_plugins_imexporters_dirs@ aqbanking_plugins_imexporters_libs = @aqbanking_plugins_imexporters_libs@ aqbanking_plugins_parsers_dirs = @aqbanking_plugins_parsers_dirs@ aqbanking_symlinkdir = @aqbanking_symlinkdir@ aqbanking_sys_is_windows = @aqbanking_sys_is_windows@ aqbankingpp_modules = @aqbankingpp_modules@ aqebics_datadir = @aqebics_datadir@ aqebics_includes = @aqebics_includes@ aqebics_internal_libs = @aqebics_internal_libs@ aqebics_ldflags = @aqebics_ldflags@ aqebics_libs = @aqebics_libs@ aqfints_datadir = @aqfints_datadir@ aqhbci_datadir = @aqhbci_datadir@ aqhbci_includes = @aqhbci_includes@ aqhbci_internal_libs = @aqhbci_internal_libs@ aqhbci_ldflags = @aqhbci_ldflags@ aqhbci_libs = @aqhbci_libs@ aqofxconnect_includes = @aqofxconnect_includes@ aqofxconnect_internal_libs = @aqofxconnect_internal_libs@ aqofxconnect_libs = @aqofxconnect_libs@ aqpaypal_includes = @aqpaypal_includes@ aqpaypal_internal_libs = @aqpaypal_internal_libs@ aqpaypal_libs = @aqpaypal_libs@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gmp_libs = @gmp_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_dir = @gwenhywfar_dir@ gwenhywfar_has_crypt = @gwenhywfar_has_crypt@ gwenhywfar_headers = @gwenhywfar_headers@ gwenhywfar_includes = @gwenhywfar_includes@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_plugins = @gwenhywfar_plugins@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ typemaker2_exe = @typemaker2_exe@ visibility_cflags = @visibility_cflags@ with_aqebics = @with_aqebics@ with_aqhbci = @with_aqhbci@ AM_CFLAGS = -DBUILDING_AQBANKING @visibility_cflags@ AM_CPPFLAGS = -I$(top_srcdir)/src/libs -I$(top_builddir)/src/libs $(gwenhywfar_includes) \ -I$(srcdir)/../.. \ -I$(srcdir)/.. \ -I$(srcdir)/../../libaqfints \ -I$(top_srcdir)/src/libs/aqbanking noinst_LTLIBRARIES = libafcontrol.la typefiles = typedatadir = $(datadir)/aqbanking/typemaker2/c dist_typedata_DATA = built_sources = build_headers_priv = build_headers_pub = build_headers = $(build_headers_priv) $(build_headers_pub) noinst_HEADERS = $(build_headers) \ control.h \ logfile.h libafcontrol_la_SOURCES = $(built_sources) \ control.c \ logfile.c EXTRA_DIST = $(typefiles) $(built_sources) $(build_headers) all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libs/plugins/backends/aqfints/banking/control/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libs/plugins/backends/aqfints/banking/control/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libafcontrol.la: $(libafcontrol_la_OBJECTS) $(libafcontrol_la_DEPENDENCIES) $(EXTRA_libafcontrol_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libafcontrol_la_OBJECTS) $(libafcontrol_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/control.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/logfile.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-dist_typedataDATA: $(dist_typedata_DATA) @$(NORMAL_INSTALL) @list='$(dist_typedata_DATA)'; test -n "$(typedatadir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(typedatadir)'"; \ $(MKDIR_P) "$(DESTDIR)$(typedatadir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(typedatadir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(typedatadir)" || exit $$?; \ done uninstall-dist_typedataDATA: @$(NORMAL_UNINSTALL) @list='$(dist_typedata_DATA)'; test -n "$(typedatadir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(typedatadir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(typedatadir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/control.Plo -rm -f ./$(DEPDIR)/logfile.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dist_typedataDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/control.Plo -rm -f ./$(DEPDIR)/logfile.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-dist_typedataDATA .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-generic clean-libtool clean-noinstLTLIBRARIES \ cscopelist-am ctags ctags-am distclean distclean-compile \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dist_typedataDATA \ install-dvi install-dvi-am install-exec install-exec-am \ install-html install-html-am install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-dist_typedataDATA .PRECIOUS: Makefile built_sources: $(built_sources) list='$(SUBDIRS)'; for d in $$list; do \ $(MAKE) -C $$d built_sources; \ done ; clean_build_files: rm -f $(built_sources) $(build_headers) format_built_files: for f in $(built_sources) $(build_headers); do \ $(ASTYLE) --style=stroustrup -s2 --min-conditional-indent=0 --indent-labels --max-continuation-indent=80 --pad-comma --pad-header --unpad-paren --align-pointer=name --break-closing-braces --break-one-line-headers --attach-return-type --convert-tabs --max-code-length=120 --break-after-logical --suffix=none $$f; \ done sources: for f in $(libafcontrol_la_SOURCES) $(EXTRA_DIST); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d sources; \ done typefiles: $(typefiles) for d in $(SUBDIRS); do \ $(MAKE) -C $$d typefiles; \ done $(typemaker2_exe) -I $(top_srcdir)/src/libs/aqbanking/typemaker2/c -I $(gwenhywfar_dir)/share/gwenhywfar/typemaker2/c -I $(srcdir) --destfolder="$(srcdir)" $(typefiles) typedefs: $(typefiles) for d in $(SUBDIRS); do \ $(MAKE) -C $$d typedefs; \ done $(typemaker2_exe) --defs-only -I $(top_srcdir)/src/libs/aqbanking/typemaker2/c -I $(gwenhywfar_dir)/share/gwenhywfar/typemaker2/c -I $(srcdir) --destfolder="$(srcdir)" $(typefiles) cppcheck: for f in $(libafcontrol_la_SOURCES); do \ cppcheck --force $$f ; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: aqbanking-6.6.1/src/libs/plugins/backends/aqfints/dummy.c0000664000175000017500000000000014043610745020313 00000000000000aqbanking-6.6.1/src/libs/plugins/backends/aqfints/Makefile.in0000644000175000017500000007374215037736025021112 00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/libs/plugins/backends/aqfints ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/distri.m4 $(top_srcdir)/m4/gwenhywfar.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/os.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = aqfints.xml CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libaqfintsplugin_la_DEPENDENCIES = libaqfints/libaqfints.la \ banking/libaqfintsbanking.la am_libaqfintsplugin_la_OBJECTS = dummy.lo libaqfintsplugin_la_OBJECTS = $(am_libaqfintsplugin_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/dummy.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libaqfintsplugin_la_SOURCES) DIST_SOURCES = $(libaqfintsplugin_la_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(plugindir)" DATA = $(plugin_DATA) HEADERS = $(noinst_HEADERS) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir distdir-am am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/aqfints.xml.in \ $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ADD_ACLOCAL_FLAGS = @ADD_ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AQBANKING_CLI_VERSION_STRING = @AQBANKING_CLI_VERSION_STRING@ AQBANKING_FINTS_VERSION_STRING = @AQBANKING_FINTS_VERSION_STRING@ AQBANKING_SO_AGE = @AQBANKING_SO_AGE@ AQBANKING_SO_CURRENT = @AQBANKING_SO_CURRENT@ AQBANKING_SO_EFFECTIVE = @AQBANKING_SO_EFFECTIVE@ AQBANKING_SO_REVISION = @AQBANKING_SO_REVISION@ AQBANKING_VERSION_BUILD = @AQBANKING_VERSION_BUILD@ AQBANKING_VERSION_FULL_STRING = @AQBANKING_VERSION_FULL_STRING@ AQBANKING_VERSION_MAJOR = @AQBANKING_VERSION_MAJOR@ AQBANKING_VERSION_MINOR = @AQBANKING_VERSION_MINOR@ AQBANKING_VERSION_PATCHLEVEL = @AQBANKING_VERSION_PATCHLEVEL@ AQBANKING_VERSION_RELEASE_STRING = @AQBANKING_VERSION_RELEASE_STRING@ AQBANKING_VERSION_STRING = @AQBANKING_VERSION_STRING@ AQBANKING_VERSION_TAG = @AQBANKING_VERSION_TAG@ AQEBICS_CFLAGS = @AQEBICS_CFLAGS@ AQEBICS_LIBS = @AQEBICS_LIBS@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATETIME = @DATETIME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_EXCLUDE_PATTERNS = @DOXYGEN_EXCLUDE_PATTERNS@ DOXYGEN_FILE_PATTERNS = @DOXYGEN_FILE_PATTERNS@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENGUI_GTK2_CFLAGS = @GWENGUI_GTK2_CFLAGS@ GWENGUI_GTK2_LIBS = @GWENGUI_GTK2_LIBS@ GWENHYWFAR_MINIMUM_VERSION = @GWENHYWFAR_MINIMUM_VERSION@ HAVE_GWENGUI_GTK2 = @HAVE_GWENGUI_GTK2@ HAVE_I18N = @HAVE_I18N@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIBXSLT_CFLAGS = @LIBXSLT_CFLAGS@ LIBXSLT_LIBS = @LIBXSLT_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_SUPPORTS_QT = @MSGFMT_SUPPORTS_QT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ TUTORIALS = @TUTORIALS@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XMLMERGE = @XMLMERGE@ XMLSEC_CFLAGS = @XMLSEC_CFLAGS@ XMLSEC_LIBS = @XMLSEC_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ aqbanking_backends = @aqbanking_backends@ aqbanking_cfg_searchdir = @aqbanking_cfg_searchdir@ aqbanking_data_searchdir = @aqbanking_data_searchdir@ aqbanking_headerdir = @aqbanking_headerdir@ aqbanking_headerdir_am = @aqbanking_headerdir_am@ aqbanking_includes = @aqbanking_includes@ aqbanking_internal_libs = @aqbanking_internal_libs@ aqbanking_ldflags = @aqbanking_ldflags@ aqbanking_libs = @aqbanking_libs@ aqbanking_locale_searchdir = @aqbanking_locale_searchdir@ aqbanking_modules = @aqbanking_modules@ aqbanking_pkgdatadir = @aqbanking_pkgdatadir@ aqbanking_plugin_searchdir = @aqbanking_plugin_searchdir@ aqbanking_plugindir = @aqbanking_plugindir@ aqbanking_plugins_backends_dirs = @aqbanking_plugins_backends_dirs@ aqbanking_plugins_backends_libs = @aqbanking_plugins_backends_libs@ aqbanking_plugins_bankinfo_dirs = @aqbanking_plugins_bankinfo_dirs@ aqbanking_plugins_bankinfo_libs = @aqbanking_plugins_bankinfo_libs@ aqbanking_plugins_imexporters_dirs = @aqbanking_plugins_imexporters_dirs@ aqbanking_plugins_imexporters_libs = @aqbanking_plugins_imexporters_libs@ aqbanking_plugins_parsers_dirs = @aqbanking_plugins_parsers_dirs@ aqbanking_symlinkdir = @aqbanking_symlinkdir@ aqbanking_sys_is_windows = @aqbanking_sys_is_windows@ aqbankingpp_modules = @aqbankingpp_modules@ aqebics_datadir = @aqebics_datadir@ aqebics_includes = @aqebics_includes@ aqebics_internal_libs = @aqebics_internal_libs@ aqebics_ldflags = @aqebics_ldflags@ aqebics_libs = @aqebics_libs@ aqfints_datadir = @aqfints_datadir@ aqhbci_datadir = @aqhbci_datadir@ aqhbci_includes = @aqhbci_includes@ aqhbci_internal_libs = @aqhbci_internal_libs@ aqhbci_ldflags = @aqhbci_ldflags@ aqhbci_libs = @aqhbci_libs@ aqofxconnect_includes = @aqofxconnect_includes@ aqofxconnect_internal_libs = @aqofxconnect_internal_libs@ aqofxconnect_libs = @aqofxconnect_libs@ aqpaypal_includes = @aqpaypal_includes@ aqpaypal_internal_libs = @aqpaypal_internal_libs@ aqpaypal_libs = @aqpaypal_libs@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gmp_libs = @gmp_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_dir = @gwenhywfar_dir@ gwenhywfar_has_crypt = @gwenhywfar_has_crypt@ gwenhywfar_headers = @gwenhywfar_headers@ gwenhywfar_includes = @gwenhywfar_includes@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_plugins = @gwenhywfar_plugins@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ typemaker2_exe = @typemaker2_exe@ visibility_cflags = @visibility_cflags@ with_aqebics = @with_aqebics@ with_aqhbci = @with_aqhbci@ SUBDIRS = libaqfints banking AM_CPPFLAGS = -I$(srcdir) -I$(top_srcdir)/src/libs -I$(top_builddir)/src/libs $(gwenhywfar_includes) -I$(srcdir)/.. AM_CFLAGS = -DBUILDING_AQBANKING @visibility_cflags@ EXTRA_DIST = aqfints.xml.in plugindir = @aqbanking_plugindir@/providers plugin_DATA = aqfints.xml noinst_HEADERS = # static plugin library noinst_LTLIBRARIES = libaqfintsplugin.la libaqfintsplugin_la_SOURCES = dummy.c libaqfintsplugin_la_LIBADD = \ libaqfints/libaqfints.la \ banking/libaqfintsbanking.la all: all-recursive .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libs/plugins/backends/aqfints/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libs/plugins/backends/aqfints/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): aqfints.xml: $(top_builddir)/config.status $(srcdir)/aqfints.xml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libaqfintsplugin.la: $(libaqfintsplugin_la_OBJECTS) $(libaqfintsplugin_la_DEPENDENCIES) $(EXTRA_libaqfintsplugin_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libaqfintsplugin_la_OBJECTS) $(libaqfintsplugin_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dummy.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-pluginDATA: $(plugin_DATA) @$(NORMAL_INSTALL) @list='$(plugin_DATA)'; test -n "$(plugindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(plugindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(plugindir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(plugindir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(plugindir)" || exit $$?; \ done uninstall-pluginDATA: @$(NORMAL_UNINSTALL) @list='$(plugin_DATA)'; test -n "$(plugindir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(plugindir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(plugindir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-recursive -rm -f ./$(DEPDIR)/dummy.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-pluginDATA install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f ./$(DEPDIR)/dummy.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-pluginDATA .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ am--depfiles check check-am clean clean-generic clean-libtool \ clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-pluginDATA install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am uninstall-pluginDATA .PRECIOUS: Makefile sources: for f in $(libaqfintsplugin_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for f in $(plugin_DATA); do \ echo $(subdir)/$$f >>$(top_srcdir)/pdsources; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d sources; \ done built_sources: cppcheck: for f in $(libaqfintsplugin_la_SOURCES); do \ cppcheck --force $$f ; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done typefiles: for d in $(SUBDIRS); do \ $(MAKE) -C $$d typefiles; \ done typedefs: for d in $(SUBDIRS); do \ $(MAKE) -C $$d typedefs; \ done # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: aqbanking-6.6.1/src/libs/plugins/backends/aqfints/aqfints.xml.in0000664000175000017500000000041214044534775021630 00000000000000 @AQBANKING_VERSION_STRING@ Martin Preuss(martin(AT)libchipcard.de) FinTS backend This backend allows using FinTS. aqbanking-6.6.1/src/libs/plugins/backends/aqfints/Makefile.am0000664000175000017500000000210414043610745021057 00000000000000SUBDIRS=libaqfints banking AM_CPPFLAGS = -I$(srcdir) -I$(top_srcdir)/src/libs -I$(top_builddir)/src/libs $(gwenhywfar_includes) -I$(srcdir)/.. AM_CFLAGS=-DBUILDING_AQBANKING @visibility_cflags@ EXTRA_DIST=aqfints.xml.in plugindir=@aqbanking_plugindir@/providers plugin_DATA=aqfints.xml noinst_HEADERS= # static plugin library noinst_LTLIBRARIES=libaqfintsplugin.la libaqfintsplugin_la_SOURCES=dummy.c libaqfintsplugin_la_LIBADD=\ libaqfints/libaqfints.la \ banking/libaqfintsbanking.la sources: for f in $(libaqfintsplugin_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for f in $(plugin_DATA); do \ echo $(subdir)/$$f >>$(top_srcdir)/pdsources; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d sources; \ done built_sources: cppcheck: for f in $(libaqfintsplugin_la_SOURCES); do \ cppcheck --force $$f ; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done typefiles: for d in $(SUBDIRS); do \ $(MAKE) -C $$d typefiles; \ done typedefs: for d in $(SUBDIRS); do \ $(MAKE) -C $$d typedefs; \ done aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/0000755000175000017500000000000015037736161021245 500000000000000aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/service/0000755000175000017500000000000015037736161022705 500000000000000aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/service/Makefile.in0000644000175000017500000007572715037736025024713 00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/libs/plugins/backends/aqfints/libaqfints/service ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/distri.m4 $(top_srcdir)/m4/gwenhywfar.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/os.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(dist_typedata_DATA) \ $(noinst_HEADERS) $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libaqfintsservice_la_DEPENDENCIES = bpd/libafmsgbpd.la \ upd/libafmsgupd.la am_libaqfintsservice_la_OBJECTS = dummy.lo libaqfintsservice_la_OBJECTS = $(am_libaqfintsservice_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/dummy.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libaqfintsservice_la_SOURCES) DIST_SOURCES = $(libaqfintsservice_la_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(typedatadir)" DATA = $(dist_typedata_DATA) HEADERS = $(noinst_HEADERS) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir distdir-am am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ADD_ACLOCAL_FLAGS = @ADD_ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AQBANKING_CLI_VERSION_STRING = @AQBANKING_CLI_VERSION_STRING@ AQBANKING_FINTS_VERSION_STRING = @AQBANKING_FINTS_VERSION_STRING@ AQBANKING_SO_AGE = @AQBANKING_SO_AGE@ AQBANKING_SO_CURRENT = @AQBANKING_SO_CURRENT@ AQBANKING_SO_EFFECTIVE = @AQBANKING_SO_EFFECTIVE@ AQBANKING_SO_REVISION = @AQBANKING_SO_REVISION@ AQBANKING_VERSION_BUILD = @AQBANKING_VERSION_BUILD@ AQBANKING_VERSION_FULL_STRING = @AQBANKING_VERSION_FULL_STRING@ AQBANKING_VERSION_MAJOR = @AQBANKING_VERSION_MAJOR@ AQBANKING_VERSION_MINOR = @AQBANKING_VERSION_MINOR@ AQBANKING_VERSION_PATCHLEVEL = @AQBANKING_VERSION_PATCHLEVEL@ AQBANKING_VERSION_RELEASE_STRING = @AQBANKING_VERSION_RELEASE_STRING@ AQBANKING_VERSION_STRING = @AQBANKING_VERSION_STRING@ AQBANKING_VERSION_TAG = @AQBANKING_VERSION_TAG@ AQEBICS_CFLAGS = @AQEBICS_CFLAGS@ AQEBICS_LIBS = @AQEBICS_LIBS@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATETIME = @DATETIME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_EXCLUDE_PATTERNS = @DOXYGEN_EXCLUDE_PATTERNS@ DOXYGEN_FILE_PATTERNS = @DOXYGEN_FILE_PATTERNS@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENGUI_GTK2_CFLAGS = @GWENGUI_GTK2_CFLAGS@ GWENGUI_GTK2_LIBS = @GWENGUI_GTK2_LIBS@ GWENHYWFAR_MINIMUM_VERSION = @GWENHYWFAR_MINIMUM_VERSION@ HAVE_GWENGUI_GTK2 = @HAVE_GWENGUI_GTK2@ HAVE_I18N = @HAVE_I18N@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIBXSLT_CFLAGS = @LIBXSLT_CFLAGS@ LIBXSLT_LIBS = @LIBXSLT_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_SUPPORTS_QT = @MSGFMT_SUPPORTS_QT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ TUTORIALS = @TUTORIALS@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XMLMERGE = @XMLMERGE@ XMLSEC_CFLAGS = @XMLSEC_CFLAGS@ XMLSEC_LIBS = @XMLSEC_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ aqbanking_backends = @aqbanking_backends@ aqbanking_cfg_searchdir = @aqbanking_cfg_searchdir@ aqbanking_data_searchdir = @aqbanking_data_searchdir@ aqbanking_headerdir = @aqbanking_headerdir@ aqbanking_headerdir_am = @aqbanking_headerdir_am@ aqbanking_includes = @aqbanking_includes@ aqbanking_internal_libs = @aqbanking_internal_libs@ aqbanking_ldflags = @aqbanking_ldflags@ aqbanking_libs = @aqbanking_libs@ aqbanking_locale_searchdir = @aqbanking_locale_searchdir@ aqbanking_modules = @aqbanking_modules@ aqbanking_pkgdatadir = @aqbanking_pkgdatadir@ aqbanking_plugin_searchdir = @aqbanking_plugin_searchdir@ aqbanking_plugindir = @aqbanking_plugindir@ aqbanking_plugins_backends_dirs = @aqbanking_plugins_backends_dirs@ aqbanking_plugins_backends_libs = @aqbanking_plugins_backends_libs@ aqbanking_plugins_bankinfo_dirs = @aqbanking_plugins_bankinfo_dirs@ aqbanking_plugins_bankinfo_libs = @aqbanking_plugins_bankinfo_libs@ aqbanking_plugins_imexporters_dirs = @aqbanking_plugins_imexporters_dirs@ aqbanking_plugins_imexporters_libs = @aqbanking_plugins_imexporters_libs@ aqbanking_plugins_parsers_dirs = @aqbanking_plugins_parsers_dirs@ aqbanking_symlinkdir = @aqbanking_symlinkdir@ aqbanking_sys_is_windows = @aqbanking_sys_is_windows@ aqbankingpp_modules = @aqbankingpp_modules@ aqebics_datadir = @aqebics_datadir@ aqebics_includes = @aqebics_includes@ aqebics_internal_libs = @aqebics_internal_libs@ aqebics_ldflags = @aqebics_ldflags@ aqebics_libs = @aqebics_libs@ aqfints_datadir = @aqfints_datadir@ aqhbci_datadir = @aqhbci_datadir@ aqhbci_includes = @aqhbci_includes@ aqhbci_internal_libs = @aqhbci_internal_libs@ aqhbci_ldflags = @aqhbci_ldflags@ aqhbci_libs = @aqhbci_libs@ aqofxconnect_includes = @aqofxconnect_includes@ aqofxconnect_internal_libs = @aqofxconnect_internal_libs@ aqofxconnect_libs = @aqofxconnect_libs@ aqpaypal_includes = @aqpaypal_includes@ aqpaypal_internal_libs = @aqpaypal_internal_libs@ aqpaypal_libs = @aqpaypal_libs@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gmp_libs = @gmp_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_dir = @gwenhywfar_dir@ gwenhywfar_has_crypt = @gwenhywfar_has_crypt@ gwenhywfar_headers = @gwenhywfar_headers@ gwenhywfar_includes = @gwenhywfar_includes@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_plugins = @gwenhywfar_plugins@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ typemaker2_exe = @typemaker2_exe@ visibility_cflags = @visibility_cflags@ with_aqebics = @with_aqebics@ with_aqhbci = @with_aqhbci@ SUBDIRS = xml bpd upd jobs AM_CFLAGS = @visibility_cflags@ AM_CPPFLAGS = -I$(top_srcdir)/src/lib -I$(top_builddir)/src/lib $(gwenhywfar_includes) $(aqbanking_includes) \ -I$(srcdir)/../.. \ -I$(srcdir)/.. noinst_LTLIBRARIES = libaqfintsservice.la typefiles = typedatadir = $(datadir)/aqbanking/typemaker2/c dist_typedata_DATA = built_sources = build_headers_priv = build_headers_pub = build_headers = $(build_headers_priv) $(build_headers_pub) noinst_HEADERS = $(build_headers) libaqfintsservice_la_SOURCES = dummy.c libaqfintsservice_la_LIBADD = \ bpd/libafmsgbpd.la \ upd/libafmsgupd.la EXTRA_DIST = $(typefiles) $(built_sources) $(build_headers) all: all-recursive .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libs/plugins/backends/aqfints/libaqfints/service/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libs/plugins/backends/aqfints/libaqfints/service/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libaqfintsservice.la: $(libaqfintsservice_la_OBJECTS) $(libaqfintsservice_la_DEPENDENCIES) $(EXTRA_libaqfintsservice_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libaqfintsservice_la_OBJECTS) $(libaqfintsservice_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dummy.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-dist_typedataDATA: $(dist_typedata_DATA) @$(NORMAL_INSTALL) @list='$(dist_typedata_DATA)'; test -n "$(typedatadir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(typedatadir)'"; \ $(MKDIR_P) "$(DESTDIR)$(typedatadir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(typedatadir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(typedatadir)" || exit $$?; \ done uninstall-dist_typedataDATA: @$(NORMAL_UNINSTALL) @list='$(dist_typedata_DATA)'; test -n "$(typedatadir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(typedatadir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(typedatadir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-recursive -rm -f ./$(DEPDIR)/dummy.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dist_typedataDATA install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f ./$(DEPDIR)/dummy.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-dist_typedataDATA .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ am--depfiles check check-am clean clean-generic clean-libtool \ clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am \ install-dist_typedataDATA install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs installdirs-am \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \ uninstall-dist_typedataDATA .PRECIOUS: Makefile built_sources: $(built_sources) list='$(SUBDIRS)'; for d in $$list; do \ $(MAKE) -C $$d built_sources; \ done ; clean_build_files: rm -f $(built_sources) $(build_headers) format_built_files: for f in $(built_sources) $(build_headers); do \ $(ASTYLE) --style=stroustrup -s2 --min-conditional-indent=0 --indent-labels --max-continuation-indent=80 --pad-comma --pad-header --unpad-paren --align-pointer=name --break-closing-braces --break-one-line-headers --attach-return-type --convert-tabs --max-code-length=120 --break-after-logical --suffix=none $$f; \ done sources: for f in $(libaqfintsservice_la_SOURCES) $(EXTRA_DIST); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d sources; \ done typefiles: $(typefiles) for d in $(SUBDIRS); do \ $(MAKE) -C $$d typefiles; \ done $(typemaker2_exe) -I $(aqbanking_dir)/share/aqbanking/typemaker2/c -I $(gwenhywfar_dir)/share/gwenhywfar/typemaker2/c -I $(srcdir) --destfolder="$(srcdir)" $(typefiles) typedefs: $(typefiles) for d in $(SUBDIRS); do \ $(MAKE) -C $$d typedefs; \ done $(typemaker2_exe) --defs-only -I $(aqbanking_dir)/share/aqbanking/typemaker2/c -I $(gwenhywfar_dir)/share/gwenhywfar/typemaker2/c -I $(srcdir) --destfolder="$(srcdir)" $(typefiles) cppcheck: for f in $(libaqfintsservice_la_SOURCES); do \ cppcheck --force $$f ; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/service/xml/0000755000175000017500000000000015037736161023505 500000000000000aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/service/xml/sync.fints0000664000175000017500000000226014043610745025443 00000000000000 aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/service/xml/ident.fints0000664000175000017500000000102414043610745025567 00000000000000 aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/service/xml/crypt.fints0000664000175000017500000001417314043610745025636 00000000000000 aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/service/xml/keymgt.fints0000664000175000017500000000361114043610745025770 00000000000000 aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/service/xml/basic.fints0000664000175000017500000001700714043610745025555 00000000000000 280 aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/service/xml/tan.fints0000664000175000017500000003301014043610745025246 00000000000000 aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/service/xml/Makefile.in0000644000175000017500000004672615037736025025510 00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/libs/plugins/backends/aqfints/libaqfints/service/xml ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/distri.m4 $(top_srcdir)/m4/gwenhywfar.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/os.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(fintsdatadir)" DATA = $(fintsdata_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADD_ACLOCAL_FLAGS = @ADD_ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AQBANKING_CLI_VERSION_STRING = @AQBANKING_CLI_VERSION_STRING@ AQBANKING_FINTS_VERSION_STRING = @AQBANKING_FINTS_VERSION_STRING@ AQBANKING_SO_AGE = @AQBANKING_SO_AGE@ AQBANKING_SO_CURRENT = @AQBANKING_SO_CURRENT@ AQBANKING_SO_EFFECTIVE = @AQBANKING_SO_EFFECTIVE@ AQBANKING_SO_REVISION = @AQBANKING_SO_REVISION@ AQBANKING_VERSION_BUILD = @AQBANKING_VERSION_BUILD@ AQBANKING_VERSION_FULL_STRING = @AQBANKING_VERSION_FULL_STRING@ AQBANKING_VERSION_MAJOR = @AQBANKING_VERSION_MAJOR@ AQBANKING_VERSION_MINOR = @AQBANKING_VERSION_MINOR@ AQBANKING_VERSION_PATCHLEVEL = @AQBANKING_VERSION_PATCHLEVEL@ AQBANKING_VERSION_RELEASE_STRING = @AQBANKING_VERSION_RELEASE_STRING@ AQBANKING_VERSION_STRING = @AQBANKING_VERSION_STRING@ AQBANKING_VERSION_TAG = @AQBANKING_VERSION_TAG@ AQEBICS_CFLAGS = @AQEBICS_CFLAGS@ AQEBICS_LIBS = @AQEBICS_LIBS@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATETIME = @DATETIME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_EXCLUDE_PATTERNS = @DOXYGEN_EXCLUDE_PATTERNS@ DOXYGEN_FILE_PATTERNS = @DOXYGEN_FILE_PATTERNS@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENGUI_GTK2_CFLAGS = @GWENGUI_GTK2_CFLAGS@ GWENGUI_GTK2_LIBS = @GWENGUI_GTK2_LIBS@ GWENHYWFAR_MINIMUM_VERSION = @GWENHYWFAR_MINIMUM_VERSION@ HAVE_GWENGUI_GTK2 = @HAVE_GWENGUI_GTK2@ HAVE_I18N = @HAVE_I18N@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIBXSLT_CFLAGS = @LIBXSLT_CFLAGS@ LIBXSLT_LIBS = @LIBXSLT_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_SUPPORTS_QT = @MSGFMT_SUPPORTS_QT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ TUTORIALS = @TUTORIALS@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XMLMERGE = @XMLMERGE@ XMLSEC_CFLAGS = @XMLSEC_CFLAGS@ XMLSEC_LIBS = @XMLSEC_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ aqbanking_backends = @aqbanking_backends@ aqbanking_cfg_searchdir = @aqbanking_cfg_searchdir@ aqbanking_data_searchdir = @aqbanking_data_searchdir@ aqbanking_headerdir = @aqbanking_headerdir@ aqbanking_headerdir_am = @aqbanking_headerdir_am@ aqbanking_includes = @aqbanking_includes@ aqbanking_internal_libs = @aqbanking_internal_libs@ aqbanking_ldflags = @aqbanking_ldflags@ aqbanking_libs = @aqbanking_libs@ aqbanking_locale_searchdir = @aqbanking_locale_searchdir@ aqbanking_modules = @aqbanking_modules@ aqbanking_pkgdatadir = @aqbanking_pkgdatadir@ aqbanking_plugin_searchdir = @aqbanking_plugin_searchdir@ aqbanking_plugindir = @aqbanking_plugindir@ aqbanking_plugins_backends_dirs = @aqbanking_plugins_backends_dirs@ aqbanking_plugins_backends_libs = @aqbanking_plugins_backends_libs@ aqbanking_plugins_bankinfo_dirs = @aqbanking_plugins_bankinfo_dirs@ aqbanking_plugins_bankinfo_libs = @aqbanking_plugins_bankinfo_libs@ aqbanking_plugins_imexporters_dirs = @aqbanking_plugins_imexporters_dirs@ aqbanking_plugins_imexporters_libs = @aqbanking_plugins_imexporters_libs@ aqbanking_plugins_parsers_dirs = @aqbanking_plugins_parsers_dirs@ aqbanking_symlinkdir = @aqbanking_symlinkdir@ aqbanking_sys_is_windows = @aqbanking_sys_is_windows@ aqbankingpp_modules = @aqbankingpp_modules@ aqebics_datadir = @aqebics_datadir@ aqebics_includes = @aqebics_includes@ aqebics_internal_libs = @aqebics_internal_libs@ aqebics_ldflags = @aqebics_ldflags@ aqebics_libs = @aqebics_libs@ aqfints_datadir = @aqfints_datadir@ aqhbci_datadir = @aqhbci_datadir@ aqhbci_includes = @aqhbci_includes@ aqhbci_internal_libs = @aqhbci_internal_libs@ aqhbci_ldflags = @aqhbci_ldflags@ aqhbci_libs = @aqhbci_libs@ aqofxconnect_includes = @aqofxconnect_includes@ aqofxconnect_internal_libs = @aqofxconnect_internal_libs@ aqofxconnect_libs = @aqofxconnect_libs@ aqpaypal_includes = @aqpaypal_includes@ aqpaypal_internal_libs = @aqpaypal_internal_libs@ aqpaypal_libs = @aqpaypal_libs@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gmp_libs = @gmp_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_dir = @gwenhywfar_dir@ gwenhywfar_has_crypt = @gwenhywfar_has_crypt@ gwenhywfar_headers = @gwenhywfar_headers@ gwenhywfar_includes = @gwenhywfar_includes@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_plugins = @gwenhywfar_plugins@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ typemaker2_exe = @typemaker2_exe@ visibility_cflags = @visibility_cflags@ with_aqebics = @with_aqebics@ with_aqhbci = @with_aqhbci@ AM_CFLAGS = @visibility_cflags@ AM_CPPFLAGS = -I$(top_srcdir)/src/libs -I$(top_builddir)/src/libs $(gwenhywfar_includes) \ -I$(srcdir)/../.. \ -I$(srcdir)/.. \ $(all_includes) fintsdatadir = $(aqfints_datadir)/fints fintsdata_DATA = \ basic.fints \ crypt.fints \ ident.fints \ prepare.fints \ dialogend.fints \ tan.fints \ sync.fints \ keymgt.fints EXTRA_DIST = $(fintsdata_DATA) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libs/plugins/backends/aqfints/libaqfints/service/xml/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libs/plugins/backends/aqfints/libaqfints/service/xml/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-fintsdataDATA: $(fintsdata_DATA) @$(NORMAL_INSTALL) @list='$(fintsdata_DATA)'; test -n "$(fintsdatadir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(fintsdatadir)'"; \ $(MKDIR_P) "$(DESTDIR)$(fintsdatadir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(fintsdatadir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(fintsdatadir)" || exit $$?; \ done uninstall-fintsdataDATA: @$(NORMAL_UNINSTALL) @list='$(fintsdata_DATA)'; test -n "$(fintsdatadir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(fintsdatadir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(fintsdatadir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-fintsdataDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-fintsdataDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am \ install-fintsdataDATA install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags-am uninstall \ uninstall-am uninstall-fintsdataDATA .PRECIOUS: Makefile typefiles: for d in $(SUBDIRS); do \ $(MAKE) -C $$d typefiles; \ done typedefs: for d in $(SUBDIRS); do \ $(MAKE) -C $$d typedefs; \ done # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/service/xml/prepare.fints0000664000175000017500000000205414043610745026126 00000000000000 aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/service/xml/Makefile.am0000664000175000017500000000105014043610745025452 00000000000000 AM_CFLAGS=@visibility_cflags@ AM_CPPFLAGS = -I$(top_srcdir)/src/libs -I$(top_builddir)/src/libs $(gwenhywfar_includes) \ -I$(srcdir)/../.. \ -I$(srcdir)/.. \ $(all_includes) fintsdatadir=$(aqfints_datadir)/fints fintsdata_DATA=\ basic.fints \ crypt.fints \ ident.fints \ prepare.fints \ dialogend.fints \ tan.fints \ sync.fints \ keymgt.fints EXTRA_DIST=$(fintsdata_DATA) typefiles: for d in $(SUBDIRS); do \ $(MAKE) -C $$d typefiles; \ done typedefs: for d in $(SUBDIRS); do \ $(MAKE) -C $$d typedefs; \ done aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/service/xml/dialogend.fints0000664000175000017500000000045114043610745026415 00000000000000 aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/service/Makefile.am0000664000175000017500000000410614043610745024657 00000000000000SUBDIRS=xml bpd upd jobs AM_CFLAGS=@visibility_cflags@ AM_CPPFLAGS = -I$(top_srcdir)/src/lib -I$(top_builddir)/src/lib $(gwenhywfar_includes) $(aqbanking_includes) \ -I$(srcdir)/../.. \ -I$(srcdir)/.. noinst_LTLIBRARIES=libaqfintsservice.la typefiles= typedatadir=$(datadir)/aqbanking/typemaker2/c dist_typedata_DATA= built_sources= build_headers_priv= build_headers_pub= build_headers=$(build_headers_priv) $(build_headers_pub) noinst_HEADERS= $(build_headers) libaqfintsservice_la_SOURCES=dummy.c libaqfintsservice_la_LIBADD=\ bpd/libafmsgbpd.la \ upd/libafmsgupd.la EXTRA_DIST=$(typefiles) $(built_sources) $(build_headers) built_sources: $(built_sources) list='$(SUBDIRS)'; for d in $$list; do \ $(MAKE) -C $$d built_sources; \ done ; clean_build_files: rm -f $(built_sources) $(build_headers) format_built_files: for f in $(built_sources) $(build_headers); do \ $(ASTYLE) --style=stroustrup -s2 --min-conditional-indent=0 --indent-labels --max-continuation-indent=80 --pad-comma --pad-header --unpad-paren --align-pointer=name --break-closing-braces --break-one-line-headers --attach-return-type --convert-tabs --max-code-length=120 --break-after-logical --suffix=none $$f; \ done sources: for f in $(libaqfintsservice_la_SOURCES) $(EXTRA_DIST); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d sources; \ done typefiles: $(typefiles) for d in $(SUBDIRS); do \ $(MAKE) -C $$d typefiles; \ done $(typemaker2_exe) -I $(aqbanking_dir)/share/aqbanking/typemaker2/c -I $(gwenhywfar_dir)/share/gwenhywfar/typemaker2/c -I $(srcdir) --destfolder="$(srcdir)" $(typefiles) typedefs: $(typefiles) for d in $(SUBDIRS); do \ $(MAKE) -C $$d typedefs; \ done $(typemaker2_exe) --defs-only -I $(aqbanking_dir)/share/aqbanking/typemaker2/c -I $(gwenhywfar_dir)/share/gwenhywfar/typemaker2/c -I $(srcdir) --destfolder="$(srcdir)" $(typefiles) cppcheck: for f in $(libaqfintsservice_la_SOURCES); do \ cppcheck --force $$f ; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/service/bpd/0000755000175000017500000000000015037736161023452 500000000000000aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/service/bpd/tanmethod_p.h0000664000175000017500000000176515037736054026061 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "tanmethod.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef AQFINTS_TANMETHOD_TANMETHOD_P_H #define AQFINTS_TANMETHOD_TANMETHOD_P_H #include "./tanmethod.h" #ifdef __cplusplus extern "C" { #endif struct AQFINTS_TANMETHOD { GWEN_LIST_ELEMENT(AQFINTS_TANMETHOD) int _refCount; uint32_t flags; int function; int process; char *methodId; char *zkaTanName; char *zkaTanVersion; char *methodName; int tanMaxLen; int formatId; char *prompt; int returnMaxLen; int maxActiveLists; int timeShiftAllowed; int tanListMode; int needSmsAccount; int needLocalAccount; char *initMode; int needTanMediumId; int maxActiveTanMedia; uint32_t runtimeFlags; /* volatile */ }; #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/service/bpd/tanmethod.c0000664000175000017500000005645115037736054025537 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "tanmethod.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "./tanmethod_p.h" #include #include /* code headers */ #include /* macro functions */ GWEN_LIST_FUNCTIONS(AQFINTS_TANMETHOD, AQFINTS_TanMethod) AQFINTS_TANMETHOD *AQFINTS_TanMethod_new(void) { AQFINTS_TANMETHOD *p_struct; GWEN_NEW_OBJECT(AQFINTS_TANMETHOD, p_struct) p_struct->_refCount=1; GWEN_LIST_INIT(AQFINTS_TANMETHOD, p_struct) /* members */ p_struct->flags=0; p_struct->function=0; p_struct->process=0; p_struct->methodId=NULL; p_struct->zkaTanName=NULL; p_struct->zkaTanVersion=NULL; p_struct->methodName=NULL; p_struct->tanMaxLen=0; p_struct->formatId=0; p_struct->prompt=NULL; p_struct->returnMaxLen=0; p_struct->maxActiveLists=0; p_struct->timeShiftAllowed=0; p_struct->tanListMode=0; p_struct->needSmsAccount=0; p_struct->needLocalAccount=0; p_struct->initMode=NULL; p_struct->needTanMediumId=0; p_struct->maxActiveTanMedia=0; p_struct->runtimeFlags=0; /* virtual functions */ return p_struct; } void AQFINTS_TanMethod_free(AQFINTS_TANMETHOD *p_struct) { if (p_struct) { assert(p_struct->_refCount); if (p_struct->_refCount==1) { GWEN_LIST_FINI(AQFINTS_TANMETHOD, p_struct) /* members */ free(p_struct->methodId); p_struct->methodId=NULL; free(p_struct->zkaTanName); p_struct->zkaTanName=NULL; free(p_struct->zkaTanVersion); p_struct->zkaTanVersion=NULL; free(p_struct->methodName); p_struct->methodName=NULL; free(p_struct->prompt); p_struct->prompt=NULL; free(p_struct->initMode); p_struct->initMode=NULL; p_struct->_refCount=0; GWEN_FREE_OBJECT(p_struct); } else p_struct->_refCount--; } } void AQFINTS_TanMethod_Attach(AQFINTS_TANMETHOD *p_struct) { assert(p_struct); assert(p_struct->_refCount); p_struct->_refCount++; } AQFINTS_TANMETHOD *AQFINTS_TanMethod_dup(const AQFINTS_TANMETHOD *p_src) { AQFINTS_TANMETHOD *p_struct; assert(p_src); p_struct=AQFINTS_TanMethod_new(); /* member "flags" */ p_struct->flags=p_src->flags; /* member "function" */ p_struct->function=p_src->function; /* member "process" */ p_struct->process=p_src->process; /* member "methodId" */ if (p_struct->methodId) { free(p_struct->methodId); p_struct->methodId=NULL; p_struct->methodId=NULL; } if (p_src->methodId) { p_struct->methodId=strdup(p_src->methodId); } /* member "zkaTanName" */ if (p_struct->zkaTanName) { free(p_struct->zkaTanName); p_struct->zkaTanName=NULL; p_struct->zkaTanName=NULL; } if (p_src->zkaTanName) { p_struct->zkaTanName=strdup(p_src->zkaTanName); } /* member "zkaTanVersion" */ if (p_struct->zkaTanVersion) { free(p_struct->zkaTanVersion); p_struct->zkaTanVersion=NULL; p_struct->zkaTanVersion=NULL; } if (p_src->zkaTanVersion) { p_struct->zkaTanVersion=strdup(p_src->zkaTanVersion); } /* member "methodName" */ if (p_struct->methodName) { free(p_struct->methodName); p_struct->methodName=NULL; p_struct->methodName=NULL; } if (p_src->methodName) { p_struct->methodName=strdup(p_src->methodName); } /* member "tanMaxLen" */ p_struct->tanMaxLen=p_src->tanMaxLen; /* member "formatId" */ p_struct->formatId=p_src->formatId; /* member "prompt" */ if (p_struct->prompt) { free(p_struct->prompt); p_struct->prompt=NULL; p_struct->prompt=NULL; } if (p_src->prompt) { p_struct->prompt=strdup(p_src->prompt); } /* member "returnMaxLen" */ p_struct->returnMaxLen=p_src->returnMaxLen; /* member "maxActiveLists" */ p_struct->maxActiveLists=p_src->maxActiveLists; /* member "timeShiftAllowed" */ p_struct->timeShiftAllowed=p_src->timeShiftAllowed; /* member "tanListMode" */ p_struct->tanListMode=p_src->tanListMode; /* member "needSmsAccount" */ p_struct->needSmsAccount=p_src->needSmsAccount; /* member "needLocalAccount" */ p_struct->needLocalAccount=p_src->needLocalAccount; /* member "initMode" */ if (p_struct->initMode) { free(p_struct->initMode); p_struct->initMode=NULL; p_struct->initMode=NULL; } if (p_src->initMode) { p_struct->initMode=strdup(p_src->initMode); } /* member "needTanMediumId" */ p_struct->needTanMediumId=p_src->needTanMediumId; /* member "maxActiveTanMedia" */ p_struct->maxActiveTanMedia=p_src->maxActiveTanMedia; /* member "runtimeFlags" */ p_struct->runtimeFlags=p_src->runtimeFlags; return p_struct; } AQFINTS_TANMETHOD *AQFINTS_TanMethod_copy(AQFINTS_TANMETHOD *p_struct, const AQFINTS_TANMETHOD *p_src) { assert(p_struct); assert(p_src); /* member "flags" */ p_struct->flags=p_src->flags; /* member "function" */ p_struct->function=p_src->function; /* member "process" */ p_struct->process=p_src->process; /* member "methodId" */ if (p_struct->methodId) { free(p_struct->methodId); p_struct->methodId=NULL; p_struct->methodId=NULL; } if (p_src->methodId) { p_struct->methodId=strdup(p_src->methodId); } /* member "zkaTanName" */ if (p_struct->zkaTanName) { free(p_struct->zkaTanName); p_struct->zkaTanName=NULL; p_struct->zkaTanName=NULL; } if (p_src->zkaTanName) { p_struct->zkaTanName=strdup(p_src->zkaTanName); } /* member "zkaTanVersion" */ if (p_struct->zkaTanVersion) { free(p_struct->zkaTanVersion); p_struct->zkaTanVersion=NULL; p_struct->zkaTanVersion=NULL; } if (p_src->zkaTanVersion) { p_struct->zkaTanVersion=strdup(p_src->zkaTanVersion); } /* member "methodName" */ if (p_struct->methodName) { free(p_struct->methodName); p_struct->methodName=NULL; p_struct->methodName=NULL; } if (p_src->methodName) { p_struct->methodName=strdup(p_src->methodName); } /* member "tanMaxLen" */ p_struct->tanMaxLen=p_src->tanMaxLen; /* member "formatId" */ p_struct->formatId=p_src->formatId; /* member "prompt" */ if (p_struct->prompt) { free(p_struct->prompt); p_struct->prompt=NULL; p_struct->prompt=NULL; } if (p_src->prompt) { p_struct->prompt=strdup(p_src->prompt); } /* member "returnMaxLen" */ p_struct->returnMaxLen=p_src->returnMaxLen; /* member "maxActiveLists" */ p_struct->maxActiveLists=p_src->maxActiveLists; /* member "timeShiftAllowed" */ p_struct->timeShiftAllowed=p_src->timeShiftAllowed; /* member "tanListMode" */ p_struct->tanListMode=p_src->tanListMode; /* member "needSmsAccount" */ p_struct->needSmsAccount=p_src->needSmsAccount; /* member "needLocalAccount" */ p_struct->needLocalAccount=p_src->needLocalAccount; /* member "initMode" */ if (p_struct->initMode) { free(p_struct->initMode); p_struct->initMode=NULL; p_struct->initMode=NULL; } if (p_src->initMode) { p_struct->initMode=strdup(p_src->initMode); } /* member "needTanMediumId" */ p_struct->needTanMediumId=p_src->needTanMediumId; /* member "maxActiveTanMedia" */ p_struct->maxActiveTanMedia=p_src->maxActiveTanMedia; /* member "runtimeFlags" */ p_struct->runtimeFlags=p_src->runtimeFlags; return p_struct; } uint32_t AQFINTS_TanMethod_GetFlags(const AQFINTS_TANMETHOD *p_struct){ assert(p_struct); return p_struct->flags; } int AQFINTS_TanMethod_GetFunction(const AQFINTS_TANMETHOD *p_struct){ assert(p_struct); return p_struct->function; } int AQFINTS_TanMethod_GetProcess(const AQFINTS_TANMETHOD *p_struct){ assert(p_struct); return p_struct->process; } const char *AQFINTS_TanMethod_GetMethodId(const AQFINTS_TANMETHOD *p_struct){ assert(p_struct); return p_struct->methodId; } const char *AQFINTS_TanMethod_GetZkaTanName(const AQFINTS_TANMETHOD *p_struct){ assert(p_struct); return p_struct->zkaTanName; } const char *AQFINTS_TanMethod_GetZkaTanVersion(const AQFINTS_TANMETHOD *p_struct){ assert(p_struct); return p_struct->zkaTanVersion; } const char *AQFINTS_TanMethod_GetMethodName(const AQFINTS_TANMETHOD *p_struct){ assert(p_struct); return p_struct->methodName; } int AQFINTS_TanMethod_GetTanMaxLen(const AQFINTS_TANMETHOD *p_struct){ assert(p_struct); return p_struct->tanMaxLen; } int AQFINTS_TanMethod_GetFormatId(const AQFINTS_TANMETHOD *p_struct){ assert(p_struct); return p_struct->formatId; } const char *AQFINTS_TanMethod_GetPrompt(const AQFINTS_TANMETHOD *p_struct){ assert(p_struct); return p_struct->prompt; } int AQFINTS_TanMethod_GetReturnMaxLen(const AQFINTS_TANMETHOD *p_struct){ assert(p_struct); return p_struct->returnMaxLen; } int AQFINTS_TanMethod_GetMaxActiveLists(const AQFINTS_TANMETHOD *p_struct){ assert(p_struct); return p_struct->maxActiveLists; } int AQFINTS_TanMethod_GetTimeShiftAllowed(const AQFINTS_TANMETHOD *p_struct){ assert(p_struct); return p_struct->timeShiftAllowed; } int AQFINTS_TanMethod_GetTanListMode(const AQFINTS_TANMETHOD *p_struct){ assert(p_struct); return p_struct->tanListMode; } int AQFINTS_TanMethod_GetNeedSmsAccount(const AQFINTS_TANMETHOD *p_struct){ assert(p_struct); return p_struct->needSmsAccount; } int AQFINTS_TanMethod_GetNeedLocalAccount(const AQFINTS_TANMETHOD *p_struct){ assert(p_struct); return p_struct->needLocalAccount; } const char *AQFINTS_TanMethod_GetInitMode(const AQFINTS_TANMETHOD *p_struct){ assert(p_struct); return p_struct->initMode; } int AQFINTS_TanMethod_GetNeedTanMediumId(const AQFINTS_TANMETHOD *p_struct){ assert(p_struct); return p_struct->needTanMediumId; } int AQFINTS_TanMethod_GetMaxActiveTanMedia(const AQFINTS_TANMETHOD *p_struct){ assert(p_struct); return p_struct->maxActiveTanMedia; } uint32_t AQFINTS_TanMethod_GetRuntimeFlags(const AQFINTS_TANMETHOD *p_struct){ assert(p_struct); return p_struct->runtimeFlags; } void AQFINTS_TanMethod_SetFlags(AQFINTS_TANMETHOD *p_struct, uint32_t p_src){ assert(p_struct); p_struct->flags=p_src; } void AQFINTS_TanMethod_AddFlags(AQFINTS_TANMETHOD *p_struct, uint32_t p_src) { assert(p_struct); p_struct->flags|=p_src; } void AQFINTS_TanMethod_SubFlags(AQFINTS_TANMETHOD *p_struct, uint32_t p_src) { assert(p_struct); p_struct->flags&=~p_src; } void AQFINTS_TanMethod_SetFunction(AQFINTS_TANMETHOD *p_struct, int p_src){ assert(p_struct); p_struct->function=p_src; } void AQFINTS_TanMethod_SetProcess(AQFINTS_TANMETHOD *p_struct, int p_src){ assert(p_struct); p_struct->process=p_src; } void AQFINTS_TanMethod_SetMethodId(AQFINTS_TANMETHOD *p_struct, const char *p_src){ assert(p_struct); if (p_struct->methodId) { free(p_struct->methodId); p_struct->methodId=NULL; p_struct->methodId=NULL; } if (p_src) { p_struct->methodId=strdup(p_src); } else { p_struct->methodId=NULL; } } void AQFINTS_TanMethod_SetZkaTanName(AQFINTS_TANMETHOD *p_struct, const char *p_src){ assert(p_struct); if (p_struct->zkaTanName) { free(p_struct->zkaTanName); p_struct->zkaTanName=NULL; p_struct->zkaTanName=NULL; } if (p_src) { p_struct->zkaTanName=strdup(p_src); } else { p_struct->zkaTanName=NULL; } } void AQFINTS_TanMethod_SetZkaTanVersion(AQFINTS_TANMETHOD *p_struct, const char *p_src){ assert(p_struct); if (p_struct->zkaTanVersion) { free(p_struct->zkaTanVersion); p_struct->zkaTanVersion=NULL; p_struct->zkaTanVersion=NULL; } if (p_src) { p_struct->zkaTanVersion=strdup(p_src); } else { p_struct->zkaTanVersion=NULL; } } void AQFINTS_TanMethod_SetMethodName(AQFINTS_TANMETHOD *p_struct, const char *p_src){ assert(p_struct); if (p_struct->methodName) { free(p_struct->methodName); p_struct->methodName=NULL; p_struct->methodName=NULL; } if (p_src) { p_struct->methodName=strdup(p_src); } else { p_struct->methodName=NULL; } } void AQFINTS_TanMethod_SetTanMaxLen(AQFINTS_TANMETHOD *p_struct, int p_src){ assert(p_struct); p_struct->tanMaxLen=p_src; } void AQFINTS_TanMethod_SetFormatId(AQFINTS_TANMETHOD *p_struct, int p_src){ assert(p_struct); p_struct->formatId=p_src; } void AQFINTS_TanMethod_SetPrompt(AQFINTS_TANMETHOD *p_struct, const char *p_src){ assert(p_struct); if (p_struct->prompt) { free(p_struct->prompt); p_struct->prompt=NULL; p_struct->prompt=NULL; } if (p_src) { p_struct->prompt=strdup(p_src); } else { p_struct->prompt=NULL; } } void AQFINTS_TanMethod_SetReturnMaxLen(AQFINTS_TANMETHOD *p_struct, int p_src){ assert(p_struct); p_struct->returnMaxLen=p_src; } void AQFINTS_TanMethod_SetMaxActiveLists(AQFINTS_TANMETHOD *p_struct, int p_src){ assert(p_struct); p_struct->maxActiveLists=p_src; } void AQFINTS_TanMethod_SetTimeShiftAllowed(AQFINTS_TANMETHOD *p_struct, int p_src){ assert(p_struct); p_struct->timeShiftAllowed=p_src; } void AQFINTS_TanMethod_SetTanListMode(AQFINTS_TANMETHOD *p_struct, int p_src){ assert(p_struct); p_struct->tanListMode=p_src; } void AQFINTS_TanMethod_SetNeedSmsAccount(AQFINTS_TANMETHOD *p_struct, int p_src){ assert(p_struct); p_struct->needSmsAccount=p_src; } void AQFINTS_TanMethod_SetNeedLocalAccount(AQFINTS_TANMETHOD *p_struct, int p_src){ assert(p_struct); p_struct->needLocalAccount=p_src; } void AQFINTS_TanMethod_SetInitMode(AQFINTS_TANMETHOD *p_struct, const char *p_src){ assert(p_struct); if (p_struct->initMode) { free(p_struct->initMode); p_struct->initMode=NULL; p_struct->initMode=NULL; } if (p_src) { p_struct->initMode=strdup(p_src); } else { p_struct->initMode=NULL; } } void AQFINTS_TanMethod_SetNeedTanMediumId(AQFINTS_TANMETHOD *p_struct, int p_src){ assert(p_struct); p_struct->needTanMediumId=p_src; } void AQFINTS_TanMethod_SetMaxActiveTanMedia(AQFINTS_TANMETHOD *p_struct, int p_src){ assert(p_struct); p_struct->maxActiveTanMedia=p_src; } void AQFINTS_TanMethod_SetRuntimeFlags(AQFINTS_TANMETHOD *p_struct, uint32_t p_src){ assert(p_struct); p_struct->runtimeFlags=p_src; } void AQFINTS_TanMethod_AddRuntimeFlags(AQFINTS_TANMETHOD *p_struct, uint32_t p_src) { assert(p_struct); p_struct->runtimeFlags|=p_src; } void AQFINTS_TanMethod_SubRuntimeFlags(AQFINTS_TANMETHOD *p_struct, uint32_t p_src) { assert(p_struct); p_struct->runtimeFlags&=~p_src; } AQFINTS_TANMETHOD_LIST *AQFINTS_TanMethod_List_dup(const AQFINTS_TANMETHOD_LIST *p_src) { AQFINTS_TANMETHOD_LIST *p_dest; AQFINTS_TANMETHOD *p_elem; assert(p_src); p_dest=AQFINTS_TanMethod_List_new(); p_elem=AQFINTS_TanMethod_List_First(p_src); while(p_elem) { AQFINTS_TANMETHOD *p_cpy; p_cpy=AQFINTS_TanMethod_dup(p_elem); AQFINTS_TanMethod_List_Add(p_cpy, p_dest); p_elem=AQFINTS_TanMethod_List_Next(p_elem); } return p_dest; } void AQFINTS_TanMethod_ReadDb(AQFINTS_TANMETHOD *p_struct, GWEN_DB_NODE *p_db){ assert(p_struct); /* member "flags" */ p_struct->flags=GWEN_DB_GetIntValue(p_db, "flags", 0, 0); /* member "function" */ p_struct->function=GWEN_DB_GetIntValue(p_db, "function", 0, 0); /* member "process" */ p_struct->process=GWEN_DB_GetIntValue(p_db, "process", 0, 0); /* member "methodId" */ if (p_struct->methodId) { free(p_struct->methodId); p_struct->methodId=NULL; p_struct->methodId=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "methodId", 0, NULL); if (s) p_struct->methodId=strdup(s); } /* member "zkaTanName" */ if (p_struct->zkaTanName) { free(p_struct->zkaTanName); p_struct->zkaTanName=NULL; p_struct->zkaTanName=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "zkaTanName", 0, NULL); if (s) p_struct->zkaTanName=strdup(s); } /* member "zkaTanVersion" */ if (p_struct->zkaTanVersion) { free(p_struct->zkaTanVersion); p_struct->zkaTanVersion=NULL; p_struct->zkaTanVersion=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "zkaTanVersion", 0, NULL); if (s) p_struct->zkaTanVersion=strdup(s); } /* member "methodName" */ if (p_struct->methodName) { free(p_struct->methodName); p_struct->methodName=NULL; p_struct->methodName=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "methodName", 0, NULL); if (s) p_struct->methodName=strdup(s); } /* member "tanMaxLen" */ p_struct->tanMaxLen=GWEN_DB_GetIntValue(p_db, "tanMaxLen", 0, 0); /* member "formatId" */ p_struct->formatId=GWEN_DB_GetIntValue(p_db, "formatId", 0, 0); /* member "prompt" */ if (p_struct->prompt) { free(p_struct->prompt); p_struct->prompt=NULL; p_struct->prompt=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "prompt", 0, NULL); if (s) p_struct->prompt=strdup(s); } /* member "returnMaxLen" */ p_struct->returnMaxLen=GWEN_DB_GetIntValue(p_db, "returnMaxLen", 0, 0); /* member "maxActiveLists" */ p_struct->maxActiveLists=GWEN_DB_GetIntValue(p_db, "maxActiveLists", 0, 0); /* member "timeShiftAllowed" */ p_struct->timeShiftAllowed=GWEN_DB_GetIntValue(p_db, "timeShiftAllowed", 0, 0); /* member "tanListMode" */ p_struct->tanListMode=GWEN_DB_GetIntValue(p_db, "tanListMode", 0, 0); /* member "needSmsAccount" */ p_struct->needSmsAccount=GWEN_DB_GetIntValue(p_db, "needSmsAccount", 0, 0); /* member "needLocalAccount" */ p_struct->needLocalAccount=GWEN_DB_GetIntValue(p_db, "needLocalAccount", 0, 0); /* member "initMode" */ if (p_struct->initMode) { free(p_struct->initMode); p_struct->initMode=NULL; p_struct->initMode=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "initMode", 0, NULL); if (s) p_struct->initMode=strdup(s); } /* member "needTanMediumId" */ p_struct->needTanMediumId=GWEN_DB_GetIntValue(p_db, "needTanMediumId", 0, 0); /* member "maxActiveTanMedia" */ p_struct->maxActiveTanMedia=GWEN_DB_GetIntValue(p_db, "maxActiveTanMedia", 0, 0); /* member "runtimeFlags" */ /* member "runtimeFlags" is volatile, just presetting it */ p_struct->runtimeFlags=0; } int AQFINTS_TanMethod_WriteDb(const AQFINTS_TANMETHOD *p_struct, GWEN_DB_NODE *p_db) { int p_rv; assert(p_struct); /* member "flags" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "flags", p_struct->flags); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "function" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "function", p_struct->function); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "process" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "process", p_struct->process); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "methodId" */ if (p_struct->methodId) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "methodId", p_struct->methodId); else { GWEN_DB_DeleteVar(p_db, "methodId"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "zkaTanName" */ if (p_struct->zkaTanName) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "zkaTanName", p_struct->zkaTanName); else { GWEN_DB_DeleteVar(p_db, "zkaTanName"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "zkaTanVersion" */ if (p_struct->zkaTanVersion) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "zkaTanVersion", p_struct->zkaTanVersion); else { GWEN_DB_DeleteVar(p_db, "zkaTanVersion"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "methodName" */ if (p_struct->methodName) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "methodName", p_struct->methodName); else { GWEN_DB_DeleteVar(p_db, "methodName"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "tanMaxLen" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "tanMaxLen", p_struct->tanMaxLen); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "formatId" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "formatId", p_struct->formatId); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "prompt" */ if (p_struct->prompt) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "prompt", p_struct->prompt); else { GWEN_DB_DeleteVar(p_db, "prompt"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "returnMaxLen" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "returnMaxLen", p_struct->returnMaxLen); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "maxActiveLists" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "maxActiveLists", p_struct->maxActiveLists); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "timeShiftAllowed" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "timeShiftAllowed", p_struct->timeShiftAllowed); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "tanListMode" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "tanListMode", p_struct->tanListMode); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "needSmsAccount" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "needSmsAccount", p_struct->needSmsAccount); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "needLocalAccount" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "needLocalAccount", p_struct->needLocalAccount); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "initMode" */ if (p_struct->initMode) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "initMode", p_struct->initMode); else { GWEN_DB_DeleteVar(p_db, "initMode"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "needTanMediumId" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "needTanMediumId", p_struct->needTanMediumId); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "maxActiveTanMedia" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "maxActiveTanMedia", p_struct->maxActiveTanMedia); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "runtimeFlags" is volatile, not writing to db */ return 0; } AQFINTS_TANMETHOD *AQFINTS_TanMethod_fromDb(GWEN_DB_NODE *p_db) { AQFINTS_TANMETHOD *p_struct; p_struct=AQFINTS_TanMethod_new(); AQFINTS_TanMethod_ReadDb(p_struct, p_db); return p_struct; } int AQFINTS_TanMethod_toDb(const AQFINTS_TANMETHOD *p_struct, GWEN_DB_NODE *p_db) { return AQFINTS_TanMethod_WriteDb(p_struct, p_db); } AQFINTS_TANMETHOD *AQFINTS_TanMethod_List_GetByFunction(const AQFINTS_TANMETHOD_LIST *p_list, int p_cmp){ AQFINTS_TANMETHOD *p_struct; assert(p_list); p_struct = AQFINTS_TanMethod_List_First(p_list); while(p_struct) { int p_rv; if (p_struct->function==p_cmp) p_rv=0; else if (p_cmpfunction) p_rv=-1; else p_rv=1; if (p_rv == 0) return p_struct; p_struct = AQFINTS_TanMethod_List_Next(p_struct); } return NULL; } /* code headers */ aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/service/bpd/tanmethod.xml0000664000175000017500000001327114043610745026100 00000000000000 AQFINTS_TANMETHOD AQFINTS_TanMethod tanmethod with_db with_list1 with_refcount
libaqfints/aqfints.h
string.h
0 0 with_flags public 0 0 public with_getbymember 0 0 public NULL NULL public own const dup const NULL NULL public own const dup const NULL NULL public own const dup const NULL NULL public own const dup const 0 0 public 1: numeric, 2: alphanumeric 0 0 public NULL NULL public own const dup const 0 0 public 0 0 public 1: not allowed, 2: allowed, 3: both supported 0 0 public 0 0 public 0: must not be given, 1: may be given, 2: must be given 0 0 public 0: must not be given, 2: must be given 0 0 public 00: PIN without TAN, 01: HHD template 01, 02: reserved NULL NULL public own const dup const 0: must not be given, 1: may be given, 2: must be given 0 0 public 0 0 public 0 0 volatile with_flags public
aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/service/bpd/bankdata.c0000664000175000017500000003345315037736054025316 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "bankdata.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "./bankdata_p.h" #include #include /* code headers */ /* macro functions */ GWEN_LIST_FUNCTIONS(AQFINTS_BANKDATA, AQFINTS_BankData) AQFINTS_BANKDATA *AQFINTS_BankData_new(void) { AQFINTS_BANKDATA *p_struct; GWEN_NEW_OBJECT(AQFINTS_BANKDATA, p_struct) p_struct->_refCount=1; GWEN_LIST_INIT(AQFINTS_BANKDATA, p_struct) /* members */ p_struct->version=0; p_struct->country=0; p_struct->bankCode=NULL; p_struct->bankName=NULL; p_struct->jobTypesPerMsg=0; p_struct->maxMsgSize=0; p_struct->minTimeout=0; p_struct->maxTimeout=0; memset(p_struct->hbciVersions, 0, (9)*sizeof(int)); memset(p_struct->languages, 0, (9)*sizeof(int)); p_struct->runtimeFlags=0; /* virtual functions */ return p_struct; } void AQFINTS_BankData_free(AQFINTS_BANKDATA *p_struct) { if (p_struct) { assert(p_struct->_refCount); if (p_struct->_refCount==1) { GWEN_LIST_FINI(AQFINTS_BANKDATA, p_struct) /* members */ free(p_struct->bankCode); p_struct->bankCode=NULL; free(p_struct->bankName); p_struct->bankName=NULL; p_struct->_refCount=0; GWEN_FREE_OBJECT(p_struct); } else p_struct->_refCount--; } } void AQFINTS_BankData_Attach(AQFINTS_BANKDATA *p_struct) { assert(p_struct); assert(p_struct->_refCount); p_struct->_refCount++; } AQFINTS_BANKDATA *AQFINTS_BankData_dup(const AQFINTS_BANKDATA *p_src) { AQFINTS_BANKDATA *p_struct; assert(p_src); p_struct=AQFINTS_BankData_new(); /* member "version" */ p_struct->version=p_src->version; /* member "country" */ p_struct->country=p_src->country; /* member "bankCode" */ if (p_struct->bankCode) { free(p_struct->bankCode); p_struct->bankCode=NULL; p_struct->bankCode=NULL; } if (p_src->bankCode) { p_struct->bankCode=strdup(p_src->bankCode); } /* member "bankName" */ if (p_struct->bankName) { free(p_struct->bankName); p_struct->bankName=NULL; p_struct->bankName=NULL; } if (p_src->bankName) { p_struct->bankName=strdup(p_src->bankName); } /* member "jobTypesPerMsg" */ p_struct->jobTypesPerMsg=p_src->jobTypesPerMsg; /* member "maxMsgSize" */ p_struct->maxMsgSize=p_src->maxMsgSize; /* member "minTimeout" */ p_struct->minTimeout=p_src->minTimeout; /* member "maxTimeout" */ p_struct->maxTimeout=p_src->maxTimeout; /* member "hbciVersions" */ memmove(p_struct->hbciVersions, p_src->hbciVersions, (9)*sizeof(int)); /* member "languages" */ memmove(p_struct->languages, p_src->languages, (9)*sizeof(int)); /* member "runtimeFlags" */ p_struct->runtimeFlags=p_src->runtimeFlags; return p_struct; } AQFINTS_BANKDATA *AQFINTS_BankData_copy(AQFINTS_BANKDATA *p_struct, const AQFINTS_BANKDATA *p_src) { assert(p_struct); assert(p_src); /* member "version" */ p_struct->version=p_src->version; /* member "country" */ p_struct->country=p_src->country; /* member "bankCode" */ if (p_struct->bankCode) { free(p_struct->bankCode); p_struct->bankCode=NULL; p_struct->bankCode=NULL; } if (p_src->bankCode) { p_struct->bankCode=strdup(p_src->bankCode); } /* member "bankName" */ if (p_struct->bankName) { free(p_struct->bankName); p_struct->bankName=NULL; p_struct->bankName=NULL; } if (p_src->bankName) { p_struct->bankName=strdup(p_src->bankName); } /* member "jobTypesPerMsg" */ p_struct->jobTypesPerMsg=p_src->jobTypesPerMsg; /* member "maxMsgSize" */ p_struct->maxMsgSize=p_src->maxMsgSize; /* member "minTimeout" */ p_struct->minTimeout=p_src->minTimeout; /* member "maxTimeout" */ p_struct->maxTimeout=p_src->maxTimeout; /* member "hbciVersions" */ memmove(p_struct->hbciVersions, p_src->hbciVersions, (9)*sizeof(int)); /* member "languages" */ memmove(p_struct->languages, p_src->languages, (9)*sizeof(int)); /* member "runtimeFlags" */ p_struct->runtimeFlags=p_src->runtimeFlags; return p_struct; } int AQFINTS_BankData_GetVersion(const AQFINTS_BANKDATA *p_struct){ assert(p_struct); return p_struct->version; } int AQFINTS_BankData_GetCountry(const AQFINTS_BANKDATA *p_struct){ assert(p_struct); return p_struct->country; } const char *AQFINTS_BankData_GetBankCode(const AQFINTS_BANKDATA *p_struct){ assert(p_struct); return p_struct->bankCode; } const char *AQFINTS_BankData_GetBankName(const AQFINTS_BANKDATA *p_struct){ assert(p_struct); return p_struct->bankName; } int AQFINTS_BankData_GetJobTypesPerMsg(const AQFINTS_BANKDATA *p_struct){ assert(p_struct); return p_struct->jobTypesPerMsg; } int AQFINTS_BankData_GetMaxMsgSize(const AQFINTS_BANKDATA *p_struct){ assert(p_struct); return p_struct->maxMsgSize; } int AQFINTS_BankData_GetMinTimeout(const AQFINTS_BANKDATA *p_struct){ assert(p_struct); return p_struct->minTimeout; } int AQFINTS_BankData_GetMaxTimeout(const AQFINTS_BANKDATA *p_struct){ assert(p_struct); return p_struct->maxTimeout; } const int *AQFINTS_BankData_GetHbciVersions(const AQFINTS_BANKDATA *p_struct){ assert(p_struct); return p_struct->hbciVersions; } const int *AQFINTS_BankData_GetLanguages(const AQFINTS_BANKDATA *p_struct){ assert(p_struct); return p_struct->languages; } uint32_t AQFINTS_BankData_GetRuntimeFlags(const AQFINTS_BANKDATA *p_struct){ assert(p_struct); return p_struct->runtimeFlags; } void AQFINTS_BankData_SetVersion(AQFINTS_BANKDATA *p_struct, int p_src){ assert(p_struct); p_struct->version=p_src; } void AQFINTS_BankData_SetCountry(AQFINTS_BANKDATA *p_struct, int p_src){ assert(p_struct); p_struct->country=p_src; } void AQFINTS_BankData_SetBankCode(AQFINTS_BANKDATA *p_struct, const char *p_src){ assert(p_struct); if (p_struct->bankCode) { free(p_struct->bankCode); p_struct->bankCode=NULL; p_struct->bankCode=NULL; } if (p_src) { p_struct->bankCode=strdup(p_src); } else { p_struct->bankCode=NULL; } } void AQFINTS_BankData_SetBankName(AQFINTS_BANKDATA *p_struct, const char *p_src){ assert(p_struct); if (p_struct->bankName) { free(p_struct->bankName); p_struct->bankName=NULL; p_struct->bankName=NULL; } if (p_src) { p_struct->bankName=strdup(p_src); } else { p_struct->bankName=NULL; } } void AQFINTS_BankData_SetJobTypesPerMsg(AQFINTS_BANKDATA *p_struct, int p_src){ assert(p_struct); p_struct->jobTypesPerMsg=p_src; } void AQFINTS_BankData_SetMaxMsgSize(AQFINTS_BANKDATA *p_struct, int p_src){ assert(p_struct); p_struct->maxMsgSize=p_src; } void AQFINTS_BankData_SetMinTimeout(AQFINTS_BANKDATA *p_struct, int p_src){ assert(p_struct); p_struct->minTimeout=p_src; } void AQFINTS_BankData_SetMaxTimeout(AQFINTS_BANKDATA *p_struct, int p_src){ assert(p_struct); p_struct->maxTimeout=p_src; } void AQFINTS_BankData_SetHbciVersions(AQFINTS_BANKDATA *p_struct, const int *p_src){ assert(p_struct); memmove(p_struct->hbciVersions, p_src, (9)*sizeof(int)); } void AQFINTS_BankData_SetLanguages(AQFINTS_BANKDATA *p_struct, const int *p_src){ assert(p_struct); memmove(p_struct->languages, p_src, (9)*sizeof(int)); } void AQFINTS_BankData_SetRuntimeFlags(AQFINTS_BANKDATA *p_struct, uint32_t p_src){ assert(p_struct); p_struct->runtimeFlags=p_src; } void AQFINTS_BankData_AddRuntimeFlags(AQFINTS_BANKDATA *p_struct, uint32_t p_src) { assert(p_struct); p_struct->runtimeFlags|=p_src; } void AQFINTS_BankData_SubRuntimeFlags(AQFINTS_BANKDATA *p_struct, uint32_t p_src) { assert(p_struct); p_struct->runtimeFlags&=~p_src; } AQFINTS_BANKDATA_LIST *AQFINTS_BankData_List_dup(const AQFINTS_BANKDATA_LIST *p_src) { AQFINTS_BANKDATA_LIST *p_dest; AQFINTS_BANKDATA *p_elem; assert(p_src); p_dest=AQFINTS_BankData_List_new(); p_elem=AQFINTS_BankData_List_First(p_src); while(p_elem) { AQFINTS_BANKDATA *p_cpy; p_cpy=AQFINTS_BankData_dup(p_elem); AQFINTS_BankData_List_Add(p_cpy, p_dest); p_elem=AQFINTS_BankData_List_Next(p_elem); } return p_dest; } void AQFINTS_BankData_ReadDb(AQFINTS_BANKDATA *p_struct, GWEN_DB_NODE *p_db){ assert(p_struct); /* member "version" */ p_struct->version=GWEN_DB_GetIntValue(p_db, "version", 0, 0); /* member "country" */ p_struct->country=GWEN_DB_GetIntValue(p_db, "country", 0, 0); /* member "bankCode" */ if (p_struct->bankCode) { free(p_struct->bankCode); p_struct->bankCode=NULL; p_struct->bankCode=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "bankCode", 0, NULL); if (s) p_struct->bankCode=strdup(s); } /* member "bankName" */ if (p_struct->bankName) { free(p_struct->bankName); p_struct->bankName=NULL; p_struct->bankName=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "bankName", 0, NULL); if (s) p_struct->bankName=strdup(s); } /* member "jobTypesPerMsg" */ p_struct->jobTypesPerMsg=GWEN_DB_GetIntValue(p_db, "jobTypesPerMsg", 0, 0); /* member "maxMsgSize" */ p_struct->maxMsgSize=GWEN_DB_GetIntValue(p_db, "maxMsgSize", 0, 0); /* member "minTimeout" */ p_struct->minTimeout=GWEN_DB_GetIntValue(p_db, "minTimeout", 0, 0); /* member "maxTimeout" */ p_struct->maxTimeout=GWEN_DB_GetIntValue(p_db, "maxTimeout", 0, 0); /* member "hbciVersions" */ { int i; memset(p_struct->hbciVersions, 0, (9)*sizeof(int)); for (i=0; i < 9; i++) { int v; v=GWEN_DB_GetIntValue(p_db, "hbciVersions", i, 0); if (v==0) break; p_struct->hbciVersions[i]=v; } } /* member "languages" */ { int i; memset(p_struct->languages, 0, (9)*sizeof(int)); for (i=0; i < 9; i++) { int v; v=GWEN_DB_GetIntValue(p_db, "languages", i, 0); if (v==0) break; p_struct->languages[i]=v; } } /* member "runtimeFlags" */ /* member "runtimeFlags" is volatile, just presetting it */ p_struct->runtimeFlags=0; } int AQFINTS_BankData_WriteDb(const AQFINTS_BANKDATA *p_struct, GWEN_DB_NODE *p_db) { int p_rv; assert(p_struct); /* member "version" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "version", p_struct->version); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "country" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "country", p_struct->country); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "bankCode" */ if (p_struct->bankCode) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "bankCode", p_struct->bankCode); else { GWEN_DB_DeleteVar(p_db, "bankCode"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "bankName" */ if (p_struct->bankName) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "bankName", p_struct->bankName); else { GWEN_DB_DeleteVar(p_db, "bankName"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "jobTypesPerMsg" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "jobTypesPerMsg", p_struct->jobTypesPerMsg); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "maxMsgSize" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "maxMsgSize", p_struct->maxMsgSize); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "minTimeout" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "minTimeout", p_struct->minTimeout); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "maxTimeout" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "maxTimeout", p_struct->maxTimeout); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "hbciVersions" */ { int i=0; int result=0; GWEN_DB_DeleteVar(p_db, "hbciVersions"); for (i=0; i < 9; i++) { result=GWEN_DB_SetIntValue(p_db, 0, "hbciVersions", p_struct->hbciVersions[i]); } p_rv=result; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "languages" */ { int i=0; int result=0; GWEN_DB_DeleteVar(p_db, "languages"); for (i=0; i < 9; i++) { result=GWEN_DB_SetIntValue(p_db, 0, "languages", p_struct->languages[i]); } p_rv=result; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "runtimeFlags" is volatile, not writing to db */ return 0; } AQFINTS_BANKDATA *AQFINTS_BankData_fromDb(GWEN_DB_NODE *p_db) { AQFINTS_BANKDATA *p_struct; p_struct=AQFINTS_BankData_new(); AQFINTS_BankData_ReadDb(p_struct, p_db); return p_struct; } int AQFINTS_BankData_toDb(const AQFINTS_BANKDATA *p_struct, GWEN_DB_NODE *p_db) { return AQFINTS_BankData_WriteDb(p_struct, p_db); } int AQFINTS_BankData_GetHbciVersionsAt(const AQFINTS_BANKDATA *p_struct, int idx) { if (p_struct && (idx < 9)) return p_struct->hbciVersions[idx]; return 0; } int AQFINTS_BankData_SetHbciVersionsAt(AQFINTS_BANKDATA *p_struct, int idx, int v) { if (p_struct && (idx < 9)) { p_struct->hbciVersions[idx]=v; return 0; } return GWEN_ERROR_INVALID; } void AQFINTS_BankData_PresetHbciVersions(AQFINTS_BANKDATA *p_struct, int v) { int i; for(i=0; i < 9; i++) p_struct->hbciVersions[i]=v; } int AQFINTS_BankData_GetLanguagesAt(const AQFINTS_BANKDATA *p_struct, int idx) { if (p_struct && (idx < 9)) return p_struct->languages[idx]; return 0; } int AQFINTS_BankData_SetLanguagesAt(AQFINTS_BANKDATA *p_struct, int idx, int v) { if (p_struct && (idx < 9)) { p_struct->languages[idx]=v; return 0; } return GWEN_ERROR_INVALID; } void AQFINTS_BankData_PresetLanguages(AQFINTS_BANKDATA *p_struct, int v) { int i; for(i=0; i < 9; i++) p_struct->languages[i]=v; } /* code headers */ aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/service/bpd/bpdaddrservice.xml0000664000175000017500000000463614043610745027103 00000000000000 AQFINTS_BPDADDR_SERVICE AQFINTS_BpdAddrService bpdaddrservice with_db with_list1 with_refcount
libaqfints/aqfints.h
string.h
0 0 with_flags public 0 0 public NULL NULL public own const dup const NULL NULL public own const dup const NULL NULL public own const dup const 0 0 public 0 0 volatile with_flags public
aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/service/bpd/bpdaddrservice_p.h0000664000175000017500000000141515037736054027047 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "bpdaddrservice.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef AQFINTS_BPDADDR_SERVICE_BPDADDRSERVICE_P_H #define AQFINTS_BPDADDR_SERVICE_BPDADDRSERVICE_P_H #include "./bpdaddrservice.h" #ifdef __cplusplus extern "C" { #endif struct AQFINTS_BPDADDR_SERVICE { GWEN_LIST_ELEMENT(AQFINTS_BPDADDR_SERVICE) int _refCount; uint32_t flags; int type; char *address; char *suffix; char *filter; int filterVersion; uint32_t runtimeFlags; /* volatile */ }; #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/service/bpd/taninfo.h0000664000175000017500000001711015037736054025204 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "taninfo.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef AQFINTS_TANINFO_TANINFO_H #define AQFINTS_TANINFO_TANINFO_H #ifdef __cplusplus extern "C" { #endif /** @page P_AQFINTS_TANINFO Structure AQFINTS_TANINFO

This page describes the properties of AQFINTS_TANINFO.

AQFINTS_TANINFO

Content of a HIPINS segment. @anchor AQFINTS_TANINFO_jobsPerMsg

jobsPerMsg

Set this property with @ref AQFINTS_TanInfo_SetJobsPerMsg(), get it with @ref AQFINTS_TanInfo_GetJobsPerMsg().

@anchor AQFINTS_TANINFO_minSigs

minSigs

Set this property with @ref AQFINTS_TanInfo_SetMinSigs(), get it with @ref AQFINTS_TanInfo_GetMinSigs().

@anchor AQFINTS_TANINFO_securityClass

securityClass

Set this property with @ref AQFINTS_TanInfo_SetSecurityClass(), get it with @ref AQFINTS_TanInfo_GetSecurityClass().

@anchor AQFINTS_TANINFO_minPinLen

minPinLen

Set this property with @ref AQFINTS_TanInfo_SetMinPinLen(), get it with @ref AQFINTS_TanInfo_GetMinPinLen().

@anchor AQFINTS_TANINFO_maxPinLen

maxPinLen

Set this property with @ref AQFINTS_TanInfo_SetMaxPinLen(), get it with @ref AQFINTS_TanInfo_GetMaxPinLen().

@anchor AQFINTS_TANINFO_maxTanLen

maxTanLen

Set this property with @ref AQFINTS_TanInfo_SetMaxTanLen(), get it with @ref AQFINTS_TanInfo_GetMaxTanLen().

@anchor AQFINTS_TANINFO_userIdText

userIdText

Set this property with @ref AQFINTS_TanInfo_SetUserIdText(), get it with @ref AQFINTS_TanInfo_GetUserIdText().

@anchor AQFINTS_TANINFO_customerIdText

customerIdText

Set this property with @ref AQFINTS_TanInfo_SetCustomerIdText(), get it with @ref AQFINTS_TanInfo_GetCustomerIdText().

@anchor AQFINTS_TANINFO_tanJobInfoList

tanJobInfoList

Set this property with @ref AQFINTS_TanInfo_SetTanJobInfoList(), get it with @ref AQFINTS_TanInfo_GetTanJobInfoList().

@anchor AQFINTS_TANINFO_runtimeFlags

runtimeFlags

Set this property with @ref AQFINTS_TanInfo_SetRuntimeFlags(), get it with @ref AQFINTS_TanInfo_GetRuntimeFlags().

*/ /* define AQFINTS_TANINFO_RTFLAGS */ /* define AQFINTS_TANINFO_FLAGS */ /* needed system headers */ #include #include #include /* pre-headers */ #include typedef struct AQFINTS_TANINFO AQFINTS_TANINFO; GWEN_LIST_FUNCTION_DEFS(AQFINTS_TANINFO, AQFINTS_TanInfo) /* post-headers */ #include "libaqfints/service/bpd/tanjobinfo.h" /** Constructor. */ AQFINTS_TANINFO *AQFINTS_TanInfo_new(void); /** Destructor. */ void AQFINTS_TanInfo_free(AQFINTS_TANINFO *p_struct); void AQFINTS_TanInfo_Attach(AQFINTS_TANINFO *p_struct); AQFINTS_TANINFO *AQFINTS_TanInfo_dup(const AQFINTS_TANINFO *p_src); AQFINTS_TANINFO *AQFINTS_TanInfo_copy(AQFINTS_TANINFO *p_struct, const AQFINTS_TANINFO *p_src); /** Getter. * Use this function to get the member "jobsPerMsg" (see @ref AQFINTS_TANINFO_jobsPerMsg) */ int AQFINTS_TanInfo_GetJobsPerMsg(const AQFINTS_TANINFO *p_struct); /** Getter. * Use this function to get the member "minSigs" (see @ref AQFINTS_TANINFO_minSigs) */ int AQFINTS_TanInfo_GetMinSigs(const AQFINTS_TANINFO *p_struct); /** Getter. * Use this function to get the member "securityClass" (see @ref AQFINTS_TANINFO_securityClass) */ int AQFINTS_TanInfo_GetSecurityClass(const AQFINTS_TANINFO *p_struct); /** Getter. * Use this function to get the member "minPinLen" (see @ref AQFINTS_TANINFO_minPinLen) */ int AQFINTS_TanInfo_GetMinPinLen(const AQFINTS_TANINFO *p_struct); /** Getter. * Use this function to get the member "maxPinLen" (see @ref AQFINTS_TANINFO_maxPinLen) */ int AQFINTS_TanInfo_GetMaxPinLen(const AQFINTS_TANINFO *p_struct); /** Getter. * Use this function to get the member "maxTanLen" (see @ref AQFINTS_TANINFO_maxTanLen) */ int AQFINTS_TanInfo_GetMaxTanLen(const AQFINTS_TANINFO *p_struct); /** Getter. * Use this function to get the member "userIdText" (see @ref AQFINTS_TANINFO_userIdText) */ const char *AQFINTS_TanInfo_GetUserIdText(const AQFINTS_TANINFO *p_struct); /** Getter. * Use this function to get the member "customerIdText" (see @ref AQFINTS_TANINFO_customerIdText) */ const char *AQFINTS_TanInfo_GetCustomerIdText(const AQFINTS_TANINFO *p_struct); /** Getter. * Use this function to get the member "tanJobInfoList" (see @ref AQFINTS_TANINFO_tanJobInfoList) */ AQFINTS_TANJOBINFO_LIST *AQFINTS_TanInfo_GetTanJobInfoList(const AQFINTS_TANINFO *p_struct); /** Getter. * Use this function to get the member "runtimeFlags" (see @ref AQFINTS_TANINFO_runtimeFlags) */ uint32_t AQFINTS_TanInfo_GetRuntimeFlags(const AQFINTS_TANINFO *p_struct); /** Setter. * Use this function to set the member "jobsPerMsg" (see @ref AQFINTS_TANINFO_jobsPerMsg) */ void AQFINTS_TanInfo_SetJobsPerMsg(AQFINTS_TANINFO *p_struct, int p_src); /** Setter. * Use this function to set the member "minSigs" (see @ref AQFINTS_TANINFO_minSigs) */ void AQFINTS_TanInfo_SetMinSigs(AQFINTS_TANINFO *p_struct, int p_src); /** Setter. * Use this function to set the member "securityClass" (see @ref AQFINTS_TANINFO_securityClass) */ void AQFINTS_TanInfo_SetSecurityClass(AQFINTS_TANINFO *p_struct, int p_src); /** Setter. * Use this function to set the member "minPinLen" (see @ref AQFINTS_TANINFO_minPinLen) */ void AQFINTS_TanInfo_SetMinPinLen(AQFINTS_TANINFO *p_struct, int p_src); /** Setter. * Use this function to set the member "maxPinLen" (see @ref AQFINTS_TANINFO_maxPinLen) */ void AQFINTS_TanInfo_SetMaxPinLen(AQFINTS_TANINFO *p_struct, int p_src); /** Setter. * Use this function to set the member "maxTanLen" (see @ref AQFINTS_TANINFO_maxTanLen) */ void AQFINTS_TanInfo_SetMaxTanLen(AQFINTS_TANINFO *p_struct, int p_src); /** Setter. * Use this function to set the member "userIdText" (see @ref AQFINTS_TANINFO_userIdText) */ void AQFINTS_TanInfo_SetUserIdText(AQFINTS_TANINFO *p_struct, const char *p_src); /** Setter. * Use this function to set the member "customerIdText" (see @ref AQFINTS_TANINFO_customerIdText) */ void AQFINTS_TanInfo_SetCustomerIdText(AQFINTS_TANINFO *p_struct, const char *p_src); /** Setter. * Use this function to set the member "tanJobInfoList" (see @ref AQFINTS_TANINFO_tanJobInfoList) */ void AQFINTS_TanInfo_SetTanJobInfoList(AQFINTS_TANINFO *p_struct, AQFINTS_TANJOBINFO_LIST *p_src); /** Setter. * Use this function to set the member "runtimeFlags" (see @ref AQFINTS_TANINFO_runtimeFlags) */ void AQFINTS_TanInfo_SetRuntimeFlags(AQFINTS_TANINFO *p_struct, uint32_t p_src); /** Add flags. * Use this function to add flags to member "runtimeFlags" (see @ref AQFINTS_TANINFO_runtimeFlags) */ void AQFINTS_TanInfo_AddRuntimeFlags(AQFINTS_TANINFO *p_struct, uint32_t p_src); /** Add flags. * Use this function to add flags to member "runtimeFlags" (see @ref AQFINTS_TANINFO_runtimeFlags) */ void AQFINTS_TanInfo_SubRuntimeFlags(AQFINTS_TANINFO *p_struct, uint32_t p_src); AQFINTS_TANINFO_LIST *AQFINTS_TanInfo_List_dup(const AQFINTS_TANINFO_LIST *p_src); void AQFINTS_TanInfo_ReadDb(AQFINTS_TANINFO *p_struct, GWEN_DB_NODE *p_db); int AQFINTS_TanInfo_WriteDb(const AQFINTS_TANINFO *p_struct, GWEN_DB_NODE *p_db); AQFINTS_TANINFO *AQFINTS_TanInfo_fromDb(GWEN_DB_NODE *p_db); int AQFINTS_TanInfo_toDb(const AQFINTS_TANINFO *p_struct, GWEN_DB_NODE *p_db); void AQFINTS_TanInfo_AddTanJobInfo(AQFINTS_TANINFO *st, AQFINTS_TANJOBINFO *tj); #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/service/bpd/bpd.xml0000664000175000017500000001203414044534775024667 00000000000000 AQFINTS_BPD AQFINTS_Bpd bpd with_db with_list1 with_refcount
libaqfints/aqfints.h
string.h
libaqfints/service/bpd/bankdata.h
libaqfints/service/bpd/bpdjob.h
libaqfints/service/bpd/bpdaddr.h
libaqfints/service/bpd/bpdsecprofile.h
libaqfints/service/bpd/taninfo.h
libaqfints/service/bpd/tanmethod.h
$(api) void $(struct_prefix)_AddBpdJob($(struct_type) *st, AQFINTS_BPDJOB *j); void $(struct_prefix)_AddBpdJob($(struct_type) *st, AQFINTS_BPDJOB *j) { if (st->bpdJobs==NULL) st->bpdJobs=AQFINTS_BpdJob_List_new(); AQFINTS_BpdJob_List_Add(j, st->bpdJobs); } $(api) void $(struct_prefix)_AddBpdAddr($(struct_type) *st, AQFINTS_BPDADDR *addr); void $(struct_prefix)_AddBpdAddr($(struct_type) *st, AQFINTS_BPDADDR *addr) { if (st->addresses==NULL) st->addresses=AQFINTS_BpdAddr_List_new(); AQFINTS_BpdAddr_List_Add(addr, st->addresses); } $(api) void $(struct_prefix)_AddBpdSecurityProfile($(struct_type) *st, AQFINTS_BPD_SECPROFILE *secProfile); void $(struct_prefix)_AddBpdSecurityProfile($(struct_type) *st, AQFINTS_BPD_SECPROFILE *secProfile) { if (st->securityProfiles==NULL) st->securityProfiles=AQFINTS_BpdSecProfile_List_new(); AQFINTS_BpdSecProfile_List_Add(secProfile, st->securityProfiles); }
public own none none public own none none public own none none public own none none public own none none public own none none 0 0 volatile with_flags public
aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/service/bpd/bpd_p.h0000664000175000017500000000144415037736054024635 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "bpd.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef AQFINTS_BPD_BPD_P_H #define AQFINTS_BPD_BPD_P_H #include "./bpd.h" #ifdef __cplusplus extern "C" { #endif struct AQFINTS_BPD { GWEN_LIST_ELEMENT(AQFINTS_BPD) int _refCount; AQFINTS_BANKDATA *bankData; AQFINTS_TANINFO *tanInfo; AQFINTS_BPDJOB_LIST *bpdJobs; AQFINTS_BPDADDR_LIST *addresses; AQFINTS_BPD_SECPROFILE_LIST *securityProfiles; AQFINTS_TANMETHOD_LIST *tanMethodList; uint32_t runtimeFlags; /* volatile */ }; #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/service/bpd/bpdsecprofile.h0000664000175000017500000000635415037736054026377 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "bpdsecprofile.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef AQFINTS_BPD_SECPROFILE_BPDSECPROFILE_H #define AQFINTS_BPD_SECPROFILE_BPDSECPROFILE_H #ifdef __cplusplus extern "C" { #endif /** @page P_AQFINTS_BPD_SECPROFILE Structure AQFINTS_BPD_SECPROFILE

This page describes the properties of AQFINTS_BPD_SECPROFILE.

AQFINTS_BPD_SECPROFILE

@anchor AQFINTS_BPD_SECPROFILE_code

code

Set this property with @ref AQFINTS_BpdSecProfile_SetCode(), get it with @ref AQFINTS_BpdSecProfile_GetCode().

@anchor AQFINTS_BPD_SECPROFILE_versions

versions

Set this property with @ref AQFINTS_BpdSecProfile_SetVersions(), get it with @ref AQFINTS_BpdSecProfile_GetVersions().

*/ /* needed system headers */ #include #include #include /* pre-headers */ #include typedef struct AQFINTS_BPD_SECPROFILE AQFINTS_BPD_SECPROFILE; GWEN_LIST_FUNCTION_DEFS(AQFINTS_BPD_SECPROFILE, AQFINTS_BpdSecProfile) /* post-headers */ /** Constructor. */ AQFINTS_BPD_SECPROFILE *AQFINTS_BpdSecProfile_new(void); /** Destructor. */ void AQFINTS_BpdSecProfile_free(AQFINTS_BPD_SECPROFILE *p_struct); void AQFINTS_BpdSecProfile_Attach(AQFINTS_BPD_SECPROFILE *p_struct); AQFINTS_BPD_SECPROFILE *AQFINTS_BpdSecProfile_dup(const AQFINTS_BPD_SECPROFILE *p_src); AQFINTS_BPD_SECPROFILE *AQFINTS_BpdSecProfile_copy(AQFINTS_BPD_SECPROFILE *p_struct, const AQFINTS_BPD_SECPROFILE *p_src); /** Getter. * Use this function to get the member "code" (see @ref AQFINTS_BPD_SECPROFILE_code) */ const char *AQFINTS_BpdSecProfile_GetCode(const AQFINTS_BPD_SECPROFILE *p_struct); /** Getter. * Use this function to get the member "versions" (see @ref AQFINTS_BPD_SECPROFILE_versions) */ const int *AQFINTS_BpdSecProfile_GetVersions(const AQFINTS_BPD_SECPROFILE *p_struct); /** Setter. * Use this function to set the member "code" (see @ref AQFINTS_BPD_SECPROFILE_code) */ void AQFINTS_BpdSecProfile_SetCode(AQFINTS_BPD_SECPROFILE *p_struct, const char *p_src); /** Setter. * Use this function to set the member "versions" (see @ref AQFINTS_BPD_SECPROFILE_versions) */ void AQFINTS_BpdSecProfile_SetVersions(AQFINTS_BPD_SECPROFILE *p_struct, const int *p_src); AQFINTS_BPD_SECPROFILE_LIST *AQFINTS_BpdSecProfile_List_dup(const AQFINTS_BPD_SECPROFILE_LIST *p_src); void AQFINTS_BpdSecProfile_ReadDb(AQFINTS_BPD_SECPROFILE *p_struct, GWEN_DB_NODE *p_db); int AQFINTS_BpdSecProfile_WriteDb(const AQFINTS_BPD_SECPROFILE *p_struct, GWEN_DB_NODE *p_db); AQFINTS_BPD_SECPROFILE *AQFINTS_BpdSecProfile_fromDb(GWEN_DB_NODE *p_db); int AQFINTS_BpdSecProfile_toDb(const AQFINTS_BPD_SECPROFILE *p_struct, GWEN_DB_NODE *p_db); int AQFINTS_BpdSecProfile_GetVersionsAt(const AQFINTS_BPD_SECPROFILE *p_struct, int idx); int AQFINTS_BpdSecProfile_SetVersionsAt(AQFINTS_BPD_SECPROFILE *p_struct, int idx, int v); void AQFINTS_BpdSecProfile_PresetVersions(AQFINTS_BPD_SECPROFILE *p_struct, int v); #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/service/bpd/Makefile.in0000644000175000017500000007436215037736025025452 00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/libs/plugins/backends/aqfints/libaqfints/service/bpd ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/distri.m4 $(top_srcdir)/m4/gwenhywfar.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/os.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(dist_typedata_DATA) \ $(noinst_HEADERS) $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libafmsgbpd_la_LIBADD = am__objects_1 = bankdata.lo bpdjob.lo bpd.lo bpdaddrservice.lo \ bpdaddr.lo bpdsecprofile.lo tanjobinfo.lo taninfo.lo \ tanmethod.lo am_libafmsgbpd_la_OBJECTS = $(am__objects_1) bpd_read.lo bpd_write.lo libafmsgbpd_la_OBJECTS = $(am_libafmsgbpd_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/bankdata.Plo ./$(DEPDIR)/bpd.Plo \ ./$(DEPDIR)/bpd_read.Plo ./$(DEPDIR)/bpd_write.Plo \ ./$(DEPDIR)/bpdaddr.Plo ./$(DEPDIR)/bpdaddrservice.Plo \ ./$(DEPDIR)/bpdjob.Plo ./$(DEPDIR)/bpdsecprofile.Plo \ ./$(DEPDIR)/taninfo.Plo ./$(DEPDIR)/tanjobinfo.Plo \ ./$(DEPDIR)/tanmethod.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libafmsgbpd_la_SOURCES) DIST_SOURCES = $(libafmsgbpd_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(typedatadir)" \ "$(DESTDIR)$(fintsdatadir)" DATA = $(dist_typedata_DATA) $(fintsdata_DATA) HEADERS = $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADD_ACLOCAL_FLAGS = @ADD_ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AQBANKING_CLI_VERSION_STRING = @AQBANKING_CLI_VERSION_STRING@ AQBANKING_FINTS_VERSION_STRING = @AQBANKING_FINTS_VERSION_STRING@ AQBANKING_SO_AGE = @AQBANKING_SO_AGE@ AQBANKING_SO_CURRENT = @AQBANKING_SO_CURRENT@ AQBANKING_SO_EFFECTIVE = @AQBANKING_SO_EFFECTIVE@ AQBANKING_SO_REVISION = @AQBANKING_SO_REVISION@ AQBANKING_VERSION_BUILD = @AQBANKING_VERSION_BUILD@ AQBANKING_VERSION_FULL_STRING = @AQBANKING_VERSION_FULL_STRING@ AQBANKING_VERSION_MAJOR = @AQBANKING_VERSION_MAJOR@ AQBANKING_VERSION_MINOR = @AQBANKING_VERSION_MINOR@ AQBANKING_VERSION_PATCHLEVEL = @AQBANKING_VERSION_PATCHLEVEL@ AQBANKING_VERSION_RELEASE_STRING = @AQBANKING_VERSION_RELEASE_STRING@ AQBANKING_VERSION_STRING = @AQBANKING_VERSION_STRING@ AQBANKING_VERSION_TAG = @AQBANKING_VERSION_TAG@ AQEBICS_CFLAGS = @AQEBICS_CFLAGS@ AQEBICS_LIBS = @AQEBICS_LIBS@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATETIME = @DATETIME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_EXCLUDE_PATTERNS = @DOXYGEN_EXCLUDE_PATTERNS@ DOXYGEN_FILE_PATTERNS = @DOXYGEN_FILE_PATTERNS@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENGUI_GTK2_CFLAGS = @GWENGUI_GTK2_CFLAGS@ GWENGUI_GTK2_LIBS = @GWENGUI_GTK2_LIBS@ GWENHYWFAR_MINIMUM_VERSION = @GWENHYWFAR_MINIMUM_VERSION@ HAVE_GWENGUI_GTK2 = @HAVE_GWENGUI_GTK2@ HAVE_I18N = @HAVE_I18N@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIBXSLT_CFLAGS = @LIBXSLT_CFLAGS@ LIBXSLT_LIBS = @LIBXSLT_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_SUPPORTS_QT = @MSGFMT_SUPPORTS_QT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ TUTORIALS = @TUTORIALS@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XMLMERGE = @XMLMERGE@ XMLSEC_CFLAGS = @XMLSEC_CFLAGS@ XMLSEC_LIBS = @XMLSEC_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ aqbanking_backends = @aqbanking_backends@ aqbanking_cfg_searchdir = @aqbanking_cfg_searchdir@ aqbanking_data_searchdir = @aqbanking_data_searchdir@ aqbanking_headerdir = @aqbanking_headerdir@ aqbanking_headerdir_am = @aqbanking_headerdir_am@ aqbanking_includes = @aqbanking_includes@ aqbanking_internal_libs = @aqbanking_internal_libs@ aqbanking_ldflags = @aqbanking_ldflags@ aqbanking_libs = @aqbanking_libs@ aqbanking_locale_searchdir = @aqbanking_locale_searchdir@ aqbanking_modules = @aqbanking_modules@ aqbanking_pkgdatadir = @aqbanking_pkgdatadir@ aqbanking_plugin_searchdir = @aqbanking_plugin_searchdir@ aqbanking_plugindir = @aqbanking_plugindir@ aqbanking_plugins_backends_dirs = @aqbanking_plugins_backends_dirs@ aqbanking_plugins_backends_libs = @aqbanking_plugins_backends_libs@ aqbanking_plugins_bankinfo_dirs = @aqbanking_plugins_bankinfo_dirs@ aqbanking_plugins_bankinfo_libs = @aqbanking_plugins_bankinfo_libs@ aqbanking_plugins_imexporters_dirs = @aqbanking_plugins_imexporters_dirs@ aqbanking_plugins_imexporters_libs = @aqbanking_plugins_imexporters_libs@ aqbanking_plugins_parsers_dirs = @aqbanking_plugins_parsers_dirs@ aqbanking_symlinkdir = @aqbanking_symlinkdir@ aqbanking_sys_is_windows = @aqbanking_sys_is_windows@ aqbankingpp_modules = @aqbankingpp_modules@ aqebics_datadir = @aqebics_datadir@ aqebics_includes = @aqebics_includes@ aqebics_internal_libs = @aqebics_internal_libs@ aqebics_ldflags = @aqebics_ldflags@ aqebics_libs = @aqebics_libs@ aqfints_datadir = @aqfints_datadir@ aqhbci_datadir = @aqhbci_datadir@ aqhbci_includes = @aqhbci_includes@ aqhbci_internal_libs = @aqhbci_internal_libs@ aqhbci_ldflags = @aqhbci_ldflags@ aqhbci_libs = @aqhbci_libs@ aqofxconnect_includes = @aqofxconnect_includes@ aqofxconnect_internal_libs = @aqofxconnect_internal_libs@ aqofxconnect_libs = @aqofxconnect_libs@ aqpaypal_includes = @aqpaypal_includes@ aqpaypal_internal_libs = @aqpaypal_internal_libs@ aqpaypal_libs = @aqpaypal_libs@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gmp_libs = @gmp_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_dir = @gwenhywfar_dir@ gwenhywfar_has_crypt = @gwenhywfar_has_crypt@ gwenhywfar_headers = @gwenhywfar_headers@ gwenhywfar_includes = @gwenhywfar_includes@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_plugins = @gwenhywfar_plugins@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ typemaker2_exe = @typemaker2_exe@ visibility_cflags = @visibility_cflags@ with_aqebics = @with_aqebics@ with_aqhbci = @with_aqhbci@ AM_CFLAGS = @visibility_cflags@ AM_CPPFLAGS = -I$(top_srcdir)/src/lib -I$(top_builddir)/src/lib $(gwenhywfar_includes) \ -I$(srcdir)/../../.. \ -I$(srcdir)/../.. \ -I$(srcdir)/.. \ $(all_includes) noinst_LTLIBRARIES = libafmsgbpd.la typefiles = \ tanjobinfo.xml \ taninfo.xml \ tanmethod.xml \ bankdata.xml \ bpdjob.xml \ bpdaddrservice.xml \ bpdaddr.xml \ bpd.xml \ bpdsecprofile.xml fintsdatadir = $(aqfints_datadir)/fints fintsdata_DATA = \ bpd.fints typedatadir = $(datadir)/aqbanking/typemaker2/c dist_typedata_DATA = built_sources = \ bankdata.c \ bpdjob.c \ bpd.c \ bpdaddrservice.c \ bpdaddr.c \ bpdsecprofile.c \ tanjobinfo.c \ taninfo.c \ tanmethod.c build_headers_priv = \ bankdata_p.h \ bpdjob_p.h \ bpd_p.h \ bpdaddrservice_p.h \ bpdaddr_p.h \ bpdsecprofile_p.h \ tanjobinfo_p.h \ taninfo_p.h \ tanmethod_p.h build_headers_pub = \ bankdata.h \ bpdjob.h \ bpd.h \ bpdaddrservice.h \ bpdaddr.h \ bpdsecprofile.h \ tanjobinfo.h \ taninfo.h \ tanmethod.h build_headers = $(build_headers_priv) $(build_headers_pub) noinst_HEADERS = $(build_headers) \ bpd_read.h \ bpd_write.h libafmsgbpd_la_SOURCES = $(built_sources) \ bpd_read.c \ bpd_write.c EXTRA_DIST = $(typefiles) $(built_sources) $(build_headers) $(fintsdata_DATA) all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libs/plugins/backends/aqfints/libaqfints/service/bpd/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libs/plugins/backends/aqfints/libaqfints/service/bpd/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libafmsgbpd.la: $(libafmsgbpd_la_OBJECTS) $(libafmsgbpd_la_DEPENDENCIES) $(EXTRA_libafmsgbpd_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libafmsgbpd_la_OBJECTS) $(libafmsgbpd_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bankdata.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bpd.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bpd_read.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bpd_write.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bpdaddr.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bpdaddrservice.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bpdjob.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bpdsecprofile.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/taninfo.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tanjobinfo.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tanmethod.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-dist_typedataDATA: $(dist_typedata_DATA) @$(NORMAL_INSTALL) @list='$(dist_typedata_DATA)'; test -n "$(typedatadir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(typedatadir)'"; \ $(MKDIR_P) "$(DESTDIR)$(typedatadir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(typedatadir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(typedatadir)" || exit $$?; \ done uninstall-dist_typedataDATA: @$(NORMAL_UNINSTALL) @list='$(dist_typedata_DATA)'; test -n "$(typedatadir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(typedatadir)'; $(am__uninstall_files_from_dir) install-fintsdataDATA: $(fintsdata_DATA) @$(NORMAL_INSTALL) @list='$(fintsdata_DATA)'; test -n "$(fintsdatadir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(fintsdatadir)'"; \ $(MKDIR_P) "$(DESTDIR)$(fintsdatadir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(fintsdatadir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(fintsdatadir)" || exit $$?; \ done uninstall-fintsdataDATA: @$(NORMAL_UNINSTALL) @list='$(fintsdata_DATA)'; test -n "$(fintsdatadir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(fintsdatadir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(typedatadir)" "$(DESTDIR)$(fintsdatadir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/bankdata.Plo -rm -f ./$(DEPDIR)/bpd.Plo -rm -f ./$(DEPDIR)/bpd_read.Plo -rm -f ./$(DEPDIR)/bpd_write.Plo -rm -f ./$(DEPDIR)/bpdaddr.Plo -rm -f ./$(DEPDIR)/bpdaddrservice.Plo -rm -f ./$(DEPDIR)/bpdjob.Plo -rm -f ./$(DEPDIR)/bpdsecprofile.Plo -rm -f ./$(DEPDIR)/taninfo.Plo -rm -f ./$(DEPDIR)/tanjobinfo.Plo -rm -f ./$(DEPDIR)/tanmethod.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dist_typedataDATA install-fintsdataDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/bankdata.Plo -rm -f ./$(DEPDIR)/bpd.Plo -rm -f ./$(DEPDIR)/bpd_read.Plo -rm -f ./$(DEPDIR)/bpd_write.Plo -rm -f ./$(DEPDIR)/bpdaddr.Plo -rm -f ./$(DEPDIR)/bpdaddrservice.Plo -rm -f ./$(DEPDIR)/bpdjob.Plo -rm -f ./$(DEPDIR)/bpdsecprofile.Plo -rm -f ./$(DEPDIR)/taninfo.Plo -rm -f ./$(DEPDIR)/tanjobinfo.Plo -rm -f ./$(DEPDIR)/tanmethod.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-dist_typedataDATA uninstall-fintsdataDATA .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-generic clean-libtool clean-noinstLTLIBRARIES \ cscopelist-am ctags ctags-am distclean distclean-compile \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dist_typedataDATA \ install-dvi install-dvi-am install-exec install-exec-am \ install-fintsdataDATA install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am \ uninstall-dist_typedataDATA uninstall-fintsdataDATA .PRECIOUS: Makefile built_sources: $(built_sources) list='$(SUBDIRS)'; for d in $$list; do \ $(MAKE) -C $$d built_sources; \ done ; clean_build_files: rm -f $(built_sources) $(build_headers) format_built_files: for f in $(built_sources) $(build_headers); do \ $(ASTYLE) --style=stroustrup -s2 --min-conditional-indent=0 --indent-labels --max-continuation-indent=80 --pad-comma --pad-header --unpad-paren --align-pointer=name --break-closing-braces --break-one-line-headers --attach-return-type --convert-tabs --max-code-length=120 --break-after-logical --suffix=none $$f; \ done sources: for f in $(libafmsgbpd_la_SOURCES) $(EXTRA_DIST); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d sources; \ done typefiles: $(typefiles) for d in $(SUBDIRS); do \ $(MAKE) -C $$d typefiles; \ done $(typemaker2_exe) -I $(top_srcdir)/src/libs/aqbanking/typemaker2/c -I $(gwenhywfar_dir)/share/gwenhywfar/typemaker2/c -I $(srcdir) --destfolder="$(srcdir)" $(typefiles) typedefs: $(typefiles) for d in $(SUBDIRS); do \ $(MAKE) -C $$d typedefs; \ done $(typemaker2_exe) --defs-only -I $(top_srcdir)/src/libs/aqbanking/typemaker2/c -I $(gwenhywfar_dir)/share/gwenhywfar/typemaker2/c -I $(srcdir) --destfolder="$(srcdir)" $(typefiles) cppcheck: for f in $(libafmsgbpd_la_SOURCES); do \ cppcheck --force $$f ; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/service/bpd/bpdjob.c0000664000175000017500000002660615037736054025013 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "bpdjob.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "./bpdjob_p.h" #include #include /* code headers */ #include /* macro functions */ GWEN_LIST_FUNCTIONS(AQFINTS_BPDJOB, AQFINTS_BpdJob) AQFINTS_BPDJOB *AQFINTS_BpdJob_new(void) { AQFINTS_BPDJOB *p_struct; GWEN_NEW_OBJECT(AQFINTS_BPDJOB, p_struct) p_struct->_refCount=1; GWEN_LIST_INIT(AQFINTS_BPDJOB, p_struct) /* members */ p_struct->flags=0; p_struct->name=NULL; p_struct->code=NULL; p_struct->version=0; p_struct->jobsPerMsg=1; p_struct->minSigs=0; p_struct->securityClass=0; p_struct->settings=NULL; p_struct->runtimeFlags=0; /* virtual functions */ return p_struct; } void AQFINTS_BpdJob_free(AQFINTS_BPDJOB *p_struct) { if (p_struct) { assert(p_struct->_refCount); if (p_struct->_refCount==1) { GWEN_LIST_FINI(AQFINTS_BPDJOB, p_struct) /* members */ free(p_struct->name); p_struct->name=NULL; free(p_struct->code); p_struct->code=NULL; GWEN_DB_Group_free(p_struct->settings); p_struct->settings=NULL; p_struct->_refCount=0; GWEN_FREE_OBJECT(p_struct); } else p_struct->_refCount--; } } void AQFINTS_BpdJob_Attach(AQFINTS_BPDJOB *p_struct) { assert(p_struct); assert(p_struct->_refCount); p_struct->_refCount++; } AQFINTS_BPDJOB *AQFINTS_BpdJob_dup(const AQFINTS_BPDJOB *p_src) { AQFINTS_BPDJOB *p_struct; assert(p_src); p_struct=AQFINTS_BpdJob_new(); /* member "flags" */ p_struct->flags=p_src->flags; /* member "name" */ if (p_struct->name) { free(p_struct->name); p_struct->name=NULL; p_struct->name=NULL; } if (p_src->name) { p_struct->name=strdup(p_src->name); } /* member "code" */ if (p_struct->code) { free(p_struct->code); p_struct->code=NULL; p_struct->code=NULL; } if (p_src->code) { p_struct->code=strdup(p_src->code); } /* member "version" */ p_struct->version=p_src->version; /* member "jobsPerMsg" */ p_struct->jobsPerMsg=p_src->jobsPerMsg; /* member "minSigs" */ p_struct->minSigs=p_src->minSigs; /* member "securityClass" */ p_struct->securityClass=p_src->securityClass; /* member "settings" */ if (p_struct->settings) { GWEN_DB_Group_free(p_struct->settings); p_struct->settings=NULL; p_struct->settings=NULL; } if (p_src->settings) { p_struct->settings=GWEN_DB_Group_dup(p_src->settings); } /* member "runtimeFlags" */ p_struct->runtimeFlags=p_src->runtimeFlags; return p_struct; } AQFINTS_BPDJOB *AQFINTS_BpdJob_copy(AQFINTS_BPDJOB *p_struct, const AQFINTS_BPDJOB *p_src) { assert(p_struct); assert(p_src); /* member "flags" */ p_struct->flags=p_src->flags; /* member "name" */ if (p_struct->name) { free(p_struct->name); p_struct->name=NULL; p_struct->name=NULL; } if (p_src->name) { p_struct->name=strdup(p_src->name); } /* member "code" */ if (p_struct->code) { free(p_struct->code); p_struct->code=NULL; p_struct->code=NULL; } if (p_src->code) { p_struct->code=strdup(p_src->code); } /* member "version" */ p_struct->version=p_src->version; /* member "jobsPerMsg" */ p_struct->jobsPerMsg=p_src->jobsPerMsg; /* member "minSigs" */ p_struct->minSigs=p_src->minSigs; /* member "securityClass" */ p_struct->securityClass=p_src->securityClass; /* member "settings" */ if (p_struct->settings) { GWEN_DB_Group_free(p_struct->settings); p_struct->settings=NULL; p_struct->settings=NULL; } if (p_src->settings) { p_struct->settings=GWEN_DB_Group_dup(p_src->settings); } /* member "runtimeFlags" */ p_struct->runtimeFlags=p_src->runtimeFlags; return p_struct; } uint32_t AQFINTS_BpdJob_GetFlags(const AQFINTS_BPDJOB *p_struct){ assert(p_struct); return p_struct->flags; } const char *AQFINTS_BpdJob_GetName(const AQFINTS_BPDJOB *p_struct){ assert(p_struct); return p_struct->name; } const char *AQFINTS_BpdJob_GetCode(const AQFINTS_BPDJOB *p_struct){ assert(p_struct); return p_struct->code; } int AQFINTS_BpdJob_GetVersion(const AQFINTS_BPDJOB *p_struct){ assert(p_struct); return p_struct->version; } int AQFINTS_BpdJob_GetJobsPerMsg(const AQFINTS_BPDJOB *p_struct){ assert(p_struct); return p_struct->jobsPerMsg; } int AQFINTS_BpdJob_GetMinSigs(const AQFINTS_BPDJOB *p_struct){ assert(p_struct); return p_struct->minSigs; } int AQFINTS_BpdJob_GetSecurityClass(const AQFINTS_BPDJOB *p_struct){ assert(p_struct); return p_struct->securityClass; } GWEN_DB_NODE *AQFINTS_BpdJob_GetSettings(const AQFINTS_BPDJOB *p_struct){ assert(p_struct); return p_struct->settings; } uint32_t AQFINTS_BpdJob_GetRuntimeFlags(const AQFINTS_BPDJOB *p_struct){ assert(p_struct); return p_struct->runtimeFlags; } void AQFINTS_BpdJob_SetFlags(AQFINTS_BPDJOB *p_struct, uint32_t p_src){ assert(p_struct); p_struct->flags=p_src; } void AQFINTS_BpdJob_AddFlags(AQFINTS_BPDJOB *p_struct, uint32_t p_src) { assert(p_struct); p_struct->flags|=p_src; } void AQFINTS_BpdJob_SubFlags(AQFINTS_BPDJOB *p_struct, uint32_t p_src) { assert(p_struct); p_struct->flags&=~p_src; } void AQFINTS_BpdJob_SetName(AQFINTS_BPDJOB *p_struct, const char *p_src){ assert(p_struct); if (p_struct->name) { free(p_struct->name); p_struct->name=NULL; p_struct->name=NULL; } if (p_src) { p_struct->name=strdup(p_src); } else { p_struct->name=NULL; } } void AQFINTS_BpdJob_SetCode(AQFINTS_BPDJOB *p_struct, const char *p_src){ assert(p_struct); if (p_struct->code) { free(p_struct->code); p_struct->code=NULL; p_struct->code=NULL; } if (p_src) { p_struct->code=strdup(p_src); } else { p_struct->code=NULL; } } void AQFINTS_BpdJob_SetVersion(AQFINTS_BPDJOB *p_struct, int p_src){ assert(p_struct); p_struct->version=p_src; } void AQFINTS_BpdJob_SetJobsPerMsg(AQFINTS_BPDJOB *p_struct, int p_src){ assert(p_struct); p_struct->jobsPerMsg=p_src; } void AQFINTS_BpdJob_SetMinSigs(AQFINTS_BPDJOB *p_struct, int p_src){ assert(p_struct); p_struct->minSigs=p_src; } void AQFINTS_BpdJob_SetSecurityClass(AQFINTS_BPDJOB *p_struct, int p_src){ assert(p_struct); p_struct->securityClass=p_src; } void AQFINTS_BpdJob_SetSettings(AQFINTS_BPDJOB *p_struct, GWEN_DB_NODE *p_src){ assert(p_struct); if (p_struct->settings) { GWEN_DB_Group_free(p_struct->settings); p_struct->settings=NULL; p_struct->settings=NULL; } p_struct->settings=p_src; } void AQFINTS_BpdJob_SetRuntimeFlags(AQFINTS_BPDJOB *p_struct, uint32_t p_src){ assert(p_struct); p_struct->runtimeFlags=p_src; } void AQFINTS_BpdJob_AddRuntimeFlags(AQFINTS_BPDJOB *p_struct, uint32_t p_src) { assert(p_struct); p_struct->runtimeFlags|=p_src; } void AQFINTS_BpdJob_SubRuntimeFlags(AQFINTS_BPDJOB *p_struct, uint32_t p_src) { assert(p_struct); p_struct->runtimeFlags&=~p_src; } AQFINTS_BPDJOB_LIST *AQFINTS_BpdJob_List_dup(const AQFINTS_BPDJOB_LIST *p_src) { AQFINTS_BPDJOB_LIST *p_dest; AQFINTS_BPDJOB *p_elem; assert(p_src); p_dest=AQFINTS_BpdJob_List_new(); p_elem=AQFINTS_BpdJob_List_First(p_src); while(p_elem) { AQFINTS_BPDJOB *p_cpy; p_cpy=AQFINTS_BpdJob_dup(p_elem); AQFINTS_BpdJob_List_Add(p_cpy, p_dest); p_elem=AQFINTS_BpdJob_List_Next(p_elem); } return p_dest; } void AQFINTS_BpdJob_ReadDb(AQFINTS_BPDJOB *p_struct, GWEN_DB_NODE *p_db){ assert(p_struct); /* member "flags" */ p_struct->flags=GWEN_DB_GetIntValue(p_db, "flags", 0, 0); /* member "name" */ if (p_struct->name) { free(p_struct->name); p_struct->name=NULL; p_struct->name=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "name", 0, NULL); if (s) p_struct->name=strdup(s); } /* member "code" */ if (p_struct->code) { free(p_struct->code); p_struct->code=NULL; p_struct->code=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "code", 0, NULL); if (s) p_struct->code=strdup(s); } /* member "version" */ p_struct->version=GWEN_DB_GetIntValue(p_db, "version", 0, 0); /* member "jobsPerMsg" */ p_struct->jobsPerMsg=GWEN_DB_GetIntValue(p_db, "jobsPerMsg", 0, 1); /* member "minSigs" */ p_struct->minSigs=GWEN_DB_GetIntValue(p_db, "minSigs", 0, 0); /* member "securityClass" */ p_struct->securityClass=GWEN_DB_GetIntValue(p_db, "securityClass", 0, 0); /* member "settings" */ if (p_struct->settings) { GWEN_DB_Group_free(p_struct->settings); p_struct->settings=NULL; p_struct->settings=NULL; } { GWEN_DB_NODE *dbSrc; dbSrc=GWEN_DB_GetGroup(p_db, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "settings"); if (dbSrc) { p_struct->settings=GWEN_DB_Group_dup(dbSrc); } else p_struct->settings=NULL; } /* member "runtimeFlags" */ /* member "runtimeFlags" is volatile, just presetting it */ p_struct->runtimeFlags=0; } int AQFINTS_BpdJob_WriteDb(const AQFINTS_BPDJOB *p_struct, GWEN_DB_NODE *p_db) { int p_rv; assert(p_struct); /* member "flags" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "flags", p_struct->flags); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "name" */ if (p_struct->name) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "name", p_struct->name); else { GWEN_DB_DeleteVar(p_db, "name"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "code" */ if (p_struct->code) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "code", p_struct->code); else { GWEN_DB_DeleteVar(p_db, "code"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "version" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "version", p_struct->version); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "jobsPerMsg" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "jobsPerMsg", p_struct->jobsPerMsg); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "minSigs" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "minSigs", p_struct->minSigs); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "securityClass" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "securityClass", p_struct->securityClass); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "settings" */ if (p_struct->settings){ GWEN_DB_NODE *dbCopy; dbCopy=GWEN_DB_GetGroup(p_db, GWEN_DB_FLAGS_DEFAULT, "settings"); assert(dbCopy); p_rv=GWEN_DB_AddGroupChildren(dbCopy, p_struct->settings); } else { GWEN_DB_DeleteGroup(p_db, "settings"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "runtimeFlags" is volatile, not writing to db */ return 0; } AQFINTS_BPDJOB *AQFINTS_BpdJob_fromDb(GWEN_DB_NODE *p_db) { AQFINTS_BPDJOB *p_struct; p_struct=AQFINTS_BpdJob_new(); AQFINTS_BpdJob_ReadDb(p_struct, p_db); return p_struct; } int AQFINTS_BpdJob_toDb(const AQFINTS_BPDJOB *p_struct, GWEN_DB_NODE *p_db) { return AQFINTS_BpdJob_WriteDb(p_struct, p_db); } /* code headers */ aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/service/bpd/bpd.fints0000664000175000017500000001461214043610745025205 00000000000000 aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/service/bpd/bpd_read.h0000664000175000017500000000256314044534775025317 00000000000000/*************************************************************************** begin : Sat Augl 03 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQFINTS_BPD_READ_H #define AQFINTS_BPD_READ_H #include "libaqfints/service/bpd/bpd.h" #include "libaqfints/parser/parser.h" #include "libaqfints/parser/segment.h" #include AQFINTS_BPD *AQFINTS_Bpd_SampleBpdFromSegmentList(AQFINTS_PARSER *parser, AQFINTS_SEGMENT_LIST *segmentList, int removeFromSegList); AQFINTS_BANKDATA *AQFINTS_Bpd_ReadBankData(GWEN_DB_NODE *db); AQFINTS_BPDADDR *AQFINTS_Bpd_ReadBpdAddr(GWEN_DB_NODE *db); AQFINTS_BPDADDR_SERVICE *AQFINTS_Bpd_ReadBpdAddrService(GWEN_DB_NODE *db); AQFINTS_BPDJOB *AQFINTS_Bpd_ReadBpdJob(GWEN_DB_NODE *db); AQFINTS_TANINFO *AQFINTS_Bpd_ReadTanInfo(GWEN_DB_NODE *db); AQFINTS_TANJOBINFO *AQFINTS_Bpd_ReadTanJobInfo(GWEN_DB_NODE *db); AQFINTS_TANMETHOD *AQFINTS_Bpd_ReadTanMethod(GWEN_DB_NODE *db); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/service/bpd/tanjobinfo.c0000664000175000017500000001456015037736054025700 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "tanjobinfo.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "./tanjobinfo_p.h" #include #include /* code headers */ #include /* macro functions */ GWEN_LIST_FUNCTIONS(AQFINTS_TANJOBINFO, AQFINTS_TanJobInfo) AQFINTS_TANJOBINFO *AQFINTS_TanJobInfo_new(void) { AQFINTS_TANJOBINFO *p_struct; GWEN_NEW_OBJECT(AQFINTS_TANJOBINFO, p_struct) p_struct->_refCount=1; GWEN_LIST_INIT(AQFINTS_TANJOBINFO, p_struct) /* members */ p_struct->flags=0; p_struct->code=NULL; p_struct->runtimeFlags=0; /* virtual functions */ return p_struct; } void AQFINTS_TanJobInfo_free(AQFINTS_TANJOBINFO *p_struct) { if (p_struct) { assert(p_struct->_refCount); if (p_struct->_refCount==1) { GWEN_LIST_FINI(AQFINTS_TANJOBINFO, p_struct) /* members */ free(p_struct->code); p_struct->code=NULL; p_struct->_refCount=0; GWEN_FREE_OBJECT(p_struct); } else p_struct->_refCount--; } } void AQFINTS_TanJobInfo_Attach(AQFINTS_TANJOBINFO *p_struct) { assert(p_struct); assert(p_struct->_refCount); p_struct->_refCount++; } AQFINTS_TANJOBINFO *AQFINTS_TanJobInfo_dup(const AQFINTS_TANJOBINFO *p_src) { AQFINTS_TANJOBINFO *p_struct; assert(p_src); p_struct=AQFINTS_TanJobInfo_new(); /* member "flags" */ p_struct->flags=p_src->flags; /* member "code" */ if (p_struct->code) { free(p_struct->code); p_struct->code=NULL; p_struct->code=NULL; } if (p_src->code) { p_struct->code=strdup(p_src->code); } /* member "runtimeFlags" */ p_struct->runtimeFlags=p_src->runtimeFlags; return p_struct; } AQFINTS_TANJOBINFO *AQFINTS_TanJobInfo_copy(AQFINTS_TANJOBINFO *p_struct, const AQFINTS_TANJOBINFO *p_src) { assert(p_struct); assert(p_src); /* member "flags" */ p_struct->flags=p_src->flags; /* member "code" */ if (p_struct->code) { free(p_struct->code); p_struct->code=NULL; p_struct->code=NULL; } if (p_src->code) { p_struct->code=strdup(p_src->code); } /* member "runtimeFlags" */ p_struct->runtimeFlags=p_src->runtimeFlags; return p_struct; } uint32_t AQFINTS_TanJobInfo_GetFlags(const AQFINTS_TANJOBINFO *p_struct){ assert(p_struct); return p_struct->flags; } const char *AQFINTS_TanJobInfo_GetCode(const AQFINTS_TANJOBINFO *p_struct){ assert(p_struct); return p_struct->code; } uint32_t AQFINTS_TanJobInfo_GetRuntimeFlags(const AQFINTS_TANJOBINFO *p_struct){ assert(p_struct); return p_struct->runtimeFlags; } void AQFINTS_TanJobInfo_SetFlags(AQFINTS_TANJOBINFO *p_struct, uint32_t p_src){ assert(p_struct); p_struct->flags=p_src; } void AQFINTS_TanJobInfo_AddFlags(AQFINTS_TANJOBINFO *p_struct, uint32_t p_src) { assert(p_struct); p_struct->flags|=p_src; } void AQFINTS_TanJobInfo_SubFlags(AQFINTS_TANJOBINFO *p_struct, uint32_t p_src) { assert(p_struct); p_struct->flags&=~p_src; } void AQFINTS_TanJobInfo_SetCode(AQFINTS_TANJOBINFO *p_struct, const char *p_src){ assert(p_struct); if (p_struct->code) { free(p_struct->code); p_struct->code=NULL; p_struct->code=NULL; } if (p_src) { p_struct->code=strdup(p_src); } else { p_struct->code=NULL; } } void AQFINTS_TanJobInfo_SetRuntimeFlags(AQFINTS_TANJOBINFO *p_struct, uint32_t p_src){ assert(p_struct); p_struct->runtimeFlags=p_src; } void AQFINTS_TanJobInfo_AddRuntimeFlags(AQFINTS_TANJOBINFO *p_struct, uint32_t p_src) { assert(p_struct); p_struct->runtimeFlags|=p_src; } void AQFINTS_TanJobInfo_SubRuntimeFlags(AQFINTS_TANJOBINFO *p_struct, uint32_t p_src) { assert(p_struct); p_struct->runtimeFlags&=~p_src; } AQFINTS_TANJOBINFO_LIST *AQFINTS_TanJobInfo_List_dup(const AQFINTS_TANJOBINFO_LIST *p_src) { AQFINTS_TANJOBINFO_LIST *p_dest; AQFINTS_TANJOBINFO *p_elem; assert(p_src); p_dest=AQFINTS_TanJobInfo_List_new(); p_elem=AQFINTS_TanJobInfo_List_First(p_src); while(p_elem) { AQFINTS_TANJOBINFO *p_cpy; p_cpy=AQFINTS_TanJobInfo_dup(p_elem); AQFINTS_TanJobInfo_List_Add(p_cpy, p_dest); p_elem=AQFINTS_TanJobInfo_List_Next(p_elem); } return p_dest; } void AQFINTS_TanJobInfo_ReadDb(AQFINTS_TANJOBINFO *p_struct, GWEN_DB_NODE *p_db){ assert(p_struct); /* member "flags" */ p_struct->flags=GWEN_DB_GetIntValue(p_db, "flags", 0, 0); /* member "code" */ if (p_struct->code) { free(p_struct->code); p_struct->code=NULL; p_struct->code=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "code", 0, NULL); if (s) p_struct->code=strdup(s); } /* member "runtimeFlags" */ /* member "runtimeFlags" is volatile, just presetting it */ p_struct->runtimeFlags=0; } int AQFINTS_TanJobInfo_WriteDb(const AQFINTS_TANJOBINFO *p_struct, GWEN_DB_NODE *p_db) { int p_rv; assert(p_struct); /* member "flags" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "flags", p_struct->flags); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "code" */ if (p_struct->code) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "code", p_struct->code); else { GWEN_DB_DeleteVar(p_db, "code"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "runtimeFlags" is volatile, not writing to db */ return 0; } AQFINTS_TANJOBINFO *AQFINTS_TanJobInfo_fromDb(GWEN_DB_NODE *p_db) { AQFINTS_TANJOBINFO *p_struct; p_struct=AQFINTS_TanJobInfo_new(); AQFINTS_TanJobInfo_ReadDb(p_struct, p_db); return p_struct; } int AQFINTS_TanJobInfo_toDb(const AQFINTS_TANJOBINFO *p_struct, GWEN_DB_NODE *p_db) { return AQFINTS_TanJobInfo_WriteDb(p_struct, p_db); } AQFINTS_TANJOBINFO *AQFINTS_TanJobInfo_List_GetByCode(const AQFINTS_TANJOBINFO_LIST *p_list, const char *p_cmp){ AQFINTS_TANJOBINFO *p_struct; assert(p_list); p_struct = AQFINTS_TanJobInfo_List_First(p_list); while(p_struct) { int p_rv; if (p_struct->code && p_cmp) p_rv=strcasecmp(p_cmp, p_struct->code); else if (p_cmp) p_rv=1; else if (p_struct->code) p_rv=-1; else p_rv=0; if (p_rv == 0) return p_struct; p_struct = AQFINTS_TanJobInfo_List_Next(p_struct); } return NULL; } /* code headers */ aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/service/bpd/bpdaddr.c0000664000175000017500000002156015037736054025145 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "bpdaddr.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "./bpdaddr_p.h" #include #include /* code headers */ #include /* macro functions */ GWEN_LIST_FUNCTIONS(AQFINTS_BPDADDR, AQFINTS_BpdAddr) AQFINTS_BPDADDR *AQFINTS_BpdAddr_new(void) { AQFINTS_BPDADDR *p_struct; GWEN_NEW_OBJECT(AQFINTS_BPDADDR, p_struct) p_struct->_refCount=1; GWEN_LIST_INIT(AQFINTS_BPDADDR, p_struct) /* members */ p_struct->country=0; p_struct->bankCode=NULL; p_struct->language=0; p_struct->services=NULL; p_struct->runtimeFlags=0; /* virtual functions */ return p_struct; } void AQFINTS_BpdAddr_free(AQFINTS_BPDADDR *p_struct) { if (p_struct) { assert(p_struct->_refCount); if (p_struct->_refCount==1) { GWEN_LIST_FINI(AQFINTS_BPDADDR, p_struct) /* members */ free(p_struct->bankCode); p_struct->bankCode=NULL; AQFINTS_BpdAddrService_List_free(p_struct->services); p_struct->services=NULL; p_struct->_refCount=0; GWEN_FREE_OBJECT(p_struct); } else p_struct->_refCount--; } } void AQFINTS_BpdAddr_Attach(AQFINTS_BPDADDR *p_struct) { assert(p_struct); assert(p_struct->_refCount); p_struct->_refCount++; } AQFINTS_BPDADDR *AQFINTS_BpdAddr_dup(const AQFINTS_BPDADDR *p_src) { AQFINTS_BPDADDR *p_struct; assert(p_src); p_struct=AQFINTS_BpdAddr_new(); /* member "country" */ p_struct->country=p_src->country; /* member "bankCode" */ if (p_struct->bankCode) { free(p_struct->bankCode); p_struct->bankCode=NULL; p_struct->bankCode=NULL; } if (p_src->bankCode) { p_struct->bankCode=strdup(p_src->bankCode); } /* member "language" */ p_struct->language=p_src->language; /* member "services" */ if (p_struct->services) { AQFINTS_BpdAddrService_List_free(p_struct->services); p_struct->services=NULL; p_struct->services=NULL; } if (p_src->services) { p_struct->services=AQFINTS_BpdAddrService_List_dup(p_src->services); } /* member "runtimeFlags" */ p_struct->runtimeFlags=p_src->runtimeFlags; return p_struct; } AQFINTS_BPDADDR *AQFINTS_BpdAddr_copy(AQFINTS_BPDADDR *p_struct, const AQFINTS_BPDADDR *p_src) { assert(p_struct); assert(p_src); /* member "country" */ p_struct->country=p_src->country; /* member "bankCode" */ if (p_struct->bankCode) { free(p_struct->bankCode); p_struct->bankCode=NULL; p_struct->bankCode=NULL; } if (p_src->bankCode) { p_struct->bankCode=strdup(p_src->bankCode); } /* member "language" */ p_struct->language=p_src->language; /* member "services" */ if (p_struct->services) { AQFINTS_BpdAddrService_List_free(p_struct->services); p_struct->services=NULL; p_struct->services=NULL; } if (p_src->services) { p_struct->services=AQFINTS_BpdAddrService_List_dup(p_src->services); } /* member "runtimeFlags" */ p_struct->runtimeFlags=p_src->runtimeFlags; return p_struct; } int AQFINTS_BpdAddr_GetCountry(const AQFINTS_BPDADDR *p_struct){ assert(p_struct); return p_struct->country; } const char *AQFINTS_BpdAddr_GetBankCode(const AQFINTS_BPDADDR *p_struct){ assert(p_struct); return p_struct->bankCode; } int AQFINTS_BpdAddr_GetLanguage(const AQFINTS_BPDADDR *p_struct){ assert(p_struct); return p_struct->language; } AQFINTS_BPDADDR_SERVICE_LIST *AQFINTS_BpdAddr_GetServices(const AQFINTS_BPDADDR *p_struct){ assert(p_struct); return p_struct->services; } uint32_t AQFINTS_BpdAddr_GetRuntimeFlags(const AQFINTS_BPDADDR *p_struct){ assert(p_struct); return p_struct->runtimeFlags; } void AQFINTS_BpdAddr_SetCountry(AQFINTS_BPDADDR *p_struct, int p_src){ assert(p_struct); p_struct->country=p_src; } void AQFINTS_BpdAddr_SetBankCode(AQFINTS_BPDADDR *p_struct, const char *p_src){ assert(p_struct); if (p_struct->bankCode) { free(p_struct->bankCode); p_struct->bankCode=NULL; p_struct->bankCode=NULL; } if (p_src) { p_struct->bankCode=strdup(p_src); } else { p_struct->bankCode=NULL; } } void AQFINTS_BpdAddr_SetLanguage(AQFINTS_BPDADDR *p_struct, int p_src){ assert(p_struct); p_struct->language=p_src; } void AQFINTS_BpdAddr_SetServices(AQFINTS_BPDADDR *p_struct, AQFINTS_BPDADDR_SERVICE_LIST *p_src){ assert(p_struct); if (p_struct->services) { AQFINTS_BpdAddrService_List_free(p_struct->services); p_struct->services=NULL; p_struct->services=NULL; } p_struct->services=p_src; } void AQFINTS_BpdAddr_SetRuntimeFlags(AQFINTS_BPDADDR *p_struct, uint32_t p_src){ assert(p_struct); p_struct->runtimeFlags=p_src; } void AQFINTS_BpdAddr_AddRuntimeFlags(AQFINTS_BPDADDR *p_struct, uint32_t p_src) { assert(p_struct); p_struct->runtimeFlags|=p_src; } void AQFINTS_BpdAddr_SubRuntimeFlags(AQFINTS_BPDADDR *p_struct, uint32_t p_src) { assert(p_struct); p_struct->runtimeFlags&=~p_src; } AQFINTS_BPDADDR_LIST *AQFINTS_BpdAddr_List_dup(const AQFINTS_BPDADDR_LIST *p_src) { AQFINTS_BPDADDR_LIST *p_dest; AQFINTS_BPDADDR *p_elem; assert(p_src); p_dest=AQFINTS_BpdAddr_List_new(); p_elem=AQFINTS_BpdAddr_List_First(p_src); while(p_elem) { AQFINTS_BPDADDR *p_cpy; p_cpy=AQFINTS_BpdAddr_dup(p_elem); AQFINTS_BpdAddr_List_Add(p_cpy, p_dest); p_elem=AQFINTS_BpdAddr_List_Next(p_elem); } return p_dest; } void AQFINTS_BpdAddr_ReadDb(AQFINTS_BPDADDR *p_struct, GWEN_DB_NODE *p_db){ assert(p_struct); /* member "country" */ p_struct->country=GWEN_DB_GetIntValue(p_db, "country", 0, 0); /* member "bankCode" */ if (p_struct->bankCode) { free(p_struct->bankCode); p_struct->bankCode=NULL; p_struct->bankCode=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "bankCode", 0, NULL); if (s) p_struct->bankCode=strdup(s); } /* member "language" */ p_struct->language=GWEN_DB_GetIntValue(p_db, "language", 0, 0); /* member "services" */ if (p_struct->services) { AQFINTS_BpdAddrService_List_free(p_struct->services); p_struct->services=NULL; p_struct->services=NULL; } { GWEN_DB_NODE *dbSource; dbSource=GWEN_DB_GetGroup(p_db, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "services"); if (dbSource) { AQFINTS_BPDADDR_SERVICE_LIST *t; GWEN_DB_NODE *dbT; t=AQFINTS_BpdAddrService_List_new(); dbT=GWEN_DB_FindFirstGroup(dbSource, "element"); while(dbT) { AQFINTS_BPDADDR_SERVICE *elem; elem=AQFINTS_BpdAddrService_fromDb(dbT); if (elem) AQFINTS_BpdAddrService_List_Add(elem, t); dbT=GWEN_DB_FindNextGroup(dbT, "element"); } p_struct->services=t; } else p_struct->services=NULL; } /* member "runtimeFlags" */ /* member "runtimeFlags" is volatile, just presetting it */ p_struct->runtimeFlags=0; } int AQFINTS_BpdAddr_WriteDb(const AQFINTS_BPDADDR *p_struct, GWEN_DB_NODE *p_db) { int p_rv; assert(p_struct); /* member "country" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "country", p_struct->country); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "bankCode" */ if (p_struct->bankCode) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "bankCode", p_struct->bankCode); else { GWEN_DB_DeleteVar(p_db, "bankCode"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "language" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "language", p_struct->language); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "services" */ { if (p_struct->services) { GWEN_DB_NODE *dbDest; AQFINTS_BPDADDR_SERVICE *elem; dbDest=GWEN_DB_GetGroup(p_db, GWEN_DB_FLAGS_OVERWRITE_GROUPS, "services"); assert(dbDest); p_rv=0; elem=AQFINTS_BpdAddrService_List_First(p_struct->services); while(elem) { GWEN_DB_NODE *dbElem; dbElem=GWEN_DB_GetGroup(dbDest, GWEN_PATH_FLAGS_CREATE_GROUP, "element"); assert(dbElem); p_rv=AQFINTS_BpdAddrService_toDb(elem, dbElem); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", p_rv); break; } elem=AQFINTS_BpdAddrService_List_Next(elem); } } else p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "runtimeFlags" is volatile, not writing to db */ return 0; } AQFINTS_BPDADDR *AQFINTS_BpdAddr_fromDb(GWEN_DB_NODE *p_db) { AQFINTS_BPDADDR *p_struct; p_struct=AQFINTS_BpdAddr_new(); AQFINTS_BpdAddr_ReadDb(p_struct, p_db); return p_struct; } int AQFINTS_BpdAddr_toDb(const AQFINTS_BPDADDR *p_struct, GWEN_DB_NODE *p_db) { return AQFINTS_BpdAddr_WriteDb(p_struct, p_db); } void AQFINTS_BpdAddr_AddService(AQFINTS_BPDADDR *st, AQFINTS_BPDADDR_SERVICE *srv) { if (st->services==NULL) st->services=AQFINTS_BpdAddrService_List_new(); AQFINTS_BpdAddrService_List_Add(srv, st->services); } /* code headers */ aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/service/bpd/Makefile.am0000664000175000017500000000533114043610745025425 00000000000000 AM_CFLAGS=@visibility_cflags@ AM_CPPFLAGS = -I$(top_srcdir)/src/lib -I$(top_builddir)/src/lib $(gwenhywfar_includes) \ -I$(srcdir)/../../.. \ -I$(srcdir)/../.. \ -I$(srcdir)/.. \ $(all_includes) noinst_LTLIBRARIES=libafmsgbpd.la typefiles= \ tanjobinfo.xml \ taninfo.xml \ tanmethod.xml \ bankdata.xml \ bpdjob.xml \ bpdaddrservice.xml \ bpdaddr.xml \ bpd.xml \ bpdsecprofile.xml fintsdatadir=$(aqfints_datadir)/fints fintsdata_DATA=\ bpd.fints typedatadir=$(datadir)/aqbanking/typemaker2/c dist_typedata_DATA= built_sources=\ bankdata.c \ bpdjob.c \ bpd.c \ bpdaddrservice.c \ bpdaddr.c \ bpdsecprofile.c \ tanjobinfo.c \ taninfo.c \ tanmethod.c build_headers_priv=\ bankdata_p.h \ bpdjob_p.h \ bpd_p.h \ bpdaddrservice_p.h \ bpdaddr_p.h \ bpdsecprofile_p.h \ tanjobinfo_p.h \ taninfo_p.h \ tanmethod_p.h build_headers_pub=\ bankdata.h \ bpdjob.h \ bpd.h \ bpdaddrservice.h \ bpdaddr.h \ bpdsecprofile.h \ tanjobinfo.h \ taninfo.h \ tanmethod.h build_headers=$(build_headers_priv) $(build_headers_pub) noinst_HEADERS= $(build_headers) \ bpd_read.h \ bpd_write.h libafmsgbpd_la_SOURCES= $(built_sources) \ bpd_read.c \ bpd_write.c EXTRA_DIST=$(typefiles) $(built_sources) $(build_headers) $(fintsdata_DATA) built_sources: $(built_sources) list='$(SUBDIRS)'; for d in $$list; do \ $(MAKE) -C $$d built_sources; \ done ; clean_build_files: rm -f $(built_sources) $(build_headers) format_built_files: for f in $(built_sources) $(build_headers); do \ $(ASTYLE) --style=stroustrup -s2 --min-conditional-indent=0 --indent-labels --max-continuation-indent=80 --pad-comma --pad-header --unpad-paren --align-pointer=name --break-closing-braces --break-one-line-headers --attach-return-type --convert-tabs --max-code-length=120 --break-after-logical --suffix=none $$f; \ done sources: for f in $(libafmsgbpd_la_SOURCES) $(EXTRA_DIST); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d sources; \ done typefiles: $(typefiles) for d in $(SUBDIRS); do \ $(MAKE) -C $$d typefiles; \ done $(typemaker2_exe) -I $(top_srcdir)/src/libs/aqbanking/typemaker2/c -I $(gwenhywfar_dir)/share/gwenhywfar/typemaker2/c -I $(srcdir) --destfolder="$(srcdir)" $(typefiles) typedefs: $(typefiles) for d in $(SUBDIRS); do \ $(MAKE) -C $$d typedefs; \ done $(typemaker2_exe) --defs-only -I $(top_srcdir)/src/libs/aqbanking/typemaker2/c -I $(gwenhywfar_dir)/share/gwenhywfar/typemaker2/c -I $(srcdir) --destfolder="$(srcdir)" $(typefiles) cppcheck: for f in $(libafmsgbpd_la_SOURCES); do \ cppcheck --force $$f ; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/service/bpd/bpd_write.h0000664000175000017500000000151414043610745025520 00000000000000/*************************************************************************** begin : Sat Augl 03 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQFINTS_BPD_WRITE_H #define AQFINTS_BPD_WRITE_H #include "service/bpd/bpd.h" #include "parser/parser.h" #include "parser/segment.h" #include int AQFINTS_Bpd_Write(const AQFINTS_BPD *bpd, AQFINTS_PARSER *parser, int hbciVersion, int refSegNum, AQFINTS_SEGMENT_LIST *segmentList); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/service/bpd/bpdaddrservice.c0000664000175000017500000002511015037736054026521 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "bpdaddrservice.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "./bpdaddrservice_p.h" #include #include /* code headers */ #include /* macro functions */ GWEN_LIST_FUNCTIONS(AQFINTS_BPDADDR_SERVICE, AQFINTS_BpdAddrService) AQFINTS_BPDADDR_SERVICE *AQFINTS_BpdAddrService_new(void) { AQFINTS_BPDADDR_SERVICE *p_struct; GWEN_NEW_OBJECT(AQFINTS_BPDADDR_SERVICE, p_struct) p_struct->_refCount=1; GWEN_LIST_INIT(AQFINTS_BPDADDR_SERVICE, p_struct) /* members */ p_struct->flags=0; p_struct->type=0; p_struct->address=NULL; p_struct->suffix=NULL; p_struct->filter=NULL; p_struct->filterVersion=0; p_struct->runtimeFlags=0; /* virtual functions */ return p_struct; } void AQFINTS_BpdAddrService_free(AQFINTS_BPDADDR_SERVICE *p_struct) { if (p_struct) { assert(p_struct->_refCount); if (p_struct->_refCount==1) { GWEN_LIST_FINI(AQFINTS_BPDADDR_SERVICE, p_struct) /* members */ free(p_struct->address); p_struct->address=NULL; free(p_struct->suffix); p_struct->suffix=NULL; free(p_struct->filter); p_struct->filter=NULL; p_struct->_refCount=0; GWEN_FREE_OBJECT(p_struct); } else p_struct->_refCount--; } } void AQFINTS_BpdAddrService_Attach(AQFINTS_BPDADDR_SERVICE *p_struct) { assert(p_struct); assert(p_struct->_refCount); p_struct->_refCount++; } AQFINTS_BPDADDR_SERVICE *AQFINTS_BpdAddrService_dup(const AQFINTS_BPDADDR_SERVICE *p_src) { AQFINTS_BPDADDR_SERVICE *p_struct; assert(p_src); p_struct=AQFINTS_BpdAddrService_new(); /* member "flags" */ p_struct->flags=p_src->flags; /* member "type" */ p_struct->type=p_src->type; /* member "address" */ if (p_struct->address) { free(p_struct->address); p_struct->address=NULL; p_struct->address=NULL; } if (p_src->address) { p_struct->address=strdup(p_src->address); } /* member "suffix" */ if (p_struct->suffix) { free(p_struct->suffix); p_struct->suffix=NULL; p_struct->suffix=NULL; } if (p_src->suffix) { p_struct->suffix=strdup(p_src->suffix); } /* member "filter" */ if (p_struct->filter) { free(p_struct->filter); p_struct->filter=NULL; p_struct->filter=NULL; } if (p_src->filter) { p_struct->filter=strdup(p_src->filter); } /* member "filterVersion" */ p_struct->filterVersion=p_src->filterVersion; /* member "runtimeFlags" */ p_struct->runtimeFlags=p_src->runtimeFlags; return p_struct; } AQFINTS_BPDADDR_SERVICE *AQFINTS_BpdAddrService_copy(AQFINTS_BPDADDR_SERVICE *p_struct, const AQFINTS_BPDADDR_SERVICE *p_src) { assert(p_struct); assert(p_src); /* member "flags" */ p_struct->flags=p_src->flags; /* member "type" */ p_struct->type=p_src->type; /* member "address" */ if (p_struct->address) { free(p_struct->address); p_struct->address=NULL; p_struct->address=NULL; } if (p_src->address) { p_struct->address=strdup(p_src->address); } /* member "suffix" */ if (p_struct->suffix) { free(p_struct->suffix); p_struct->suffix=NULL; p_struct->suffix=NULL; } if (p_src->suffix) { p_struct->suffix=strdup(p_src->suffix); } /* member "filter" */ if (p_struct->filter) { free(p_struct->filter); p_struct->filter=NULL; p_struct->filter=NULL; } if (p_src->filter) { p_struct->filter=strdup(p_src->filter); } /* member "filterVersion" */ p_struct->filterVersion=p_src->filterVersion; /* member "runtimeFlags" */ p_struct->runtimeFlags=p_src->runtimeFlags; return p_struct; } uint32_t AQFINTS_BpdAddrService_GetFlags(const AQFINTS_BPDADDR_SERVICE *p_struct){ assert(p_struct); return p_struct->flags; } int AQFINTS_BpdAddrService_GetType(const AQFINTS_BPDADDR_SERVICE *p_struct){ assert(p_struct); return p_struct->type; } const char *AQFINTS_BpdAddrService_GetAddress(const AQFINTS_BPDADDR_SERVICE *p_struct){ assert(p_struct); return p_struct->address; } const char *AQFINTS_BpdAddrService_GetSuffix(const AQFINTS_BPDADDR_SERVICE *p_struct){ assert(p_struct); return p_struct->suffix; } const char *AQFINTS_BpdAddrService_GetFilter(const AQFINTS_BPDADDR_SERVICE *p_struct){ assert(p_struct); return p_struct->filter; } int AQFINTS_BpdAddrService_GetFilterVersion(const AQFINTS_BPDADDR_SERVICE *p_struct){ assert(p_struct); return p_struct->filterVersion; } uint32_t AQFINTS_BpdAddrService_GetRuntimeFlags(const AQFINTS_BPDADDR_SERVICE *p_struct){ assert(p_struct); return p_struct->runtimeFlags; } void AQFINTS_BpdAddrService_SetFlags(AQFINTS_BPDADDR_SERVICE *p_struct, uint32_t p_src){ assert(p_struct); p_struct->flags=p_src; } void AQFINTS_BpdAddrService_AddFlags(AQFINTS_BPDADDR_SERVICE *p_struct, uint32_t p_src) { assert(p_struct); p_struct->flags|=p_src; } void AQFINTS_BpdAddrService_SubFlags(AQFINTS_BPDADDR_SERVICE *p_struct, uint32_t p_src) { assert(p_struct); p_struct->flags&=~p_src; } void AQFINTS_BpdAddrService_SetType(AQFINTS_BPDADDR_SERVICE *p_struct, int p_src){ assert(p_struct); p_struct->type=p_src; } void AQFINTS_BpdAddrService_SetAddress(AQFINTS_BPDADDR_SERVICE *p_struct, const char *p_src){ assert(p_struct); if (p_struct->address) { free(p_struct->address); p_struct->address=NULL; p_struct->address=NULL; } if (p_src) { p_struct->address=strdup(p_src); } else { p_struct->address=NULL; } } void AQFINTS_BpdAddrService_SetSuffix(AQFINTS_BPDADDR_SERVICE *p_struct, const char *p_src){ assert(p_struct); if (p_struct->suffix) { free(p_struct->suffix); p_struct->suffix=NULL; p_struct->suffix=NULL; } if (p_src) { p_struct->suffix=strdup(p_src); } else { p_struct->suffix=NULL; } } void AQFINTS_BpdAddrService_SetFilter(AQFINTS_BPDADDR_SERVICE *p_struct, const char *p_src){ assert(p_struct); if (p_struct->filter) { free(p_struct->filter); p_struct->filter=NULL; p_struct->filter=NULL; } if (p_src) { p_struct->filter=strdup(p_src); } else { p_struct->filter=NULL; } } void AQFINTS_BpdAddrService_SetFilterVersion(AQFINTS_BPDADDR_SERVICE *p_struct, int p_src){ assert(p_struct); p_struct->filterVersion=p_src; } void AQFINTS_BpdAddrService_SetRuntimeFlags(AQFINTS_BPDADDR_SERVICE *p_struct, uint32_t p_src){ assert(p_struct); p_struct->runtimeFlags=p_src; } void AQFINTS_BpdAddrService_AddRuntimeFlags(AQFINTS_BPDADDR_SERVICE *p_struct, uint32_t p_src) { assert(p_struct); p_struct->runtimeFlags|=p_src; } void AQFINTS_BpdAddrService_SubRuntimeFlags(AQFINTS_BPDADDR_SERVICE *p_struct, uint32_t p_src) { assert(p_struct); p_struct->runtimeFlags&=~p_src; } AQFINTS_BPDADDR_SERVICE_LIST *AQFINTS_BpdAddrService_List_dup(const AQFINTS_BPDADDR_SERVICE_LIST *p_src) { AQFINTS_BPDADDR_SERVICE_LIST *p_dest; AQFINTS_BPDADDR_SERVICE *p_elem; assert(p_src); p_dest=AQFINTS_BpdAddrService_List_new(); p_elem=AQFINTS_BpdAddrService_List_First(p_src); while(p_elem) { AQFINTS_BPDADDR_SERVICE *p_cpy; p_cpy=AQFINTS_BpdAddrService_dup(p_elem); AQFINTS_BpdAddrService_List_Add(p_cpy, p_dest); p_elem=AQFINTS_BpdAddrService_List_Next(p_elem); } return p_dest; } void AQFINTS_BpdAddrService_ReadDb(AQFINTS_BPDADDR_SERVICE *p_struct, GWEN_DB_NODE *p_db){ assert(p_struct); /* member "flags" */ p_struct->flags=GWEN_DB_GetIntValue(p_db, "flags", 0, 0); /* member "type" */ p_struct->type=GWEN_DB_GetIntValue(p_db, "type", 0, 0); /* member "address" */ if (p_struct->address) { free(p_struct->address); p_struct->address=NULL; p_struct->address=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "address", 0, NULL); if (s) p_struct->address=strdup(s); } /* member "suffix" */ if (p_struct->suffix) { free(p_struct->suffix); p_struct->suffix=NULL; p_struct->suffix=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "suffix", 0, NULL); if (s) p_struct->suffix=strdup(s); } /* member "filter" */ if (p_struct->filter) { free(p_struct->filter); p_struct->filter=NULL; p_struct->filter=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "filter", 0, NULL); if (s) p_struct->filter=strdup(s); } /* member "filterVersion" */ p_struct->filterVersion=GWEN_DB_GetIntValue(p_db, "filterVersion", 0, 0); /* member "runtimeFlags" */ /* member "runtimeFlags" is volatile, just presetting it */ p_struct->runtimeFlags=0; } int AQFINTS_BpdAddrService_WriteDb(const AQFINTS_BPDADDR_SERVICE *p_struct, GWEN_DB_NODE *p_db) { int p_rv; assert(p_struct); /* member "flags" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "flags", p_struct->flags); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "type" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "type", p_struct->type); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "address" */ if (p_struct->address) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "address", p_struct->address); else { GWEN_DB_DeleteVar(p_db, "address"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "suffix" */ if (p_struct->suffix) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "suffix", p_struct->suffix); else { GWEN_DB_DeleteVar(p_db, "suffix"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "filter" */ if (p_struct->filter) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "filter", p_struct->filter); else { GWEN_DB_DeleteVar(p_db, "filter"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "filterVersion" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "filterVersion", p_struct->filterVersion); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "runtimeFlags" is volatile, not writing to db */ return 0; } AQFINTS_BPDADDR_SERVICE *AQFINTS_BpdAddrService_fromDb(GWEN_DB_NODE *p_db) { AQFINTS_BPDADDR_SERVICE *p_struct; p_struct=AQFINTS_BpdAddrService_new(); AQFINTS_BpdAddrService_ReadDb(p_struct, p_db); return p_struct; } int AQFINTS_BpdAddrService_toDb(const AQFINTS_BPDADDR_SERVICE *p_struct, GWEN_DB_NODE *p_db) { return AQFINTS_BpdAddrService_WriteDb(p_struct, p_db); } /* code headers */ aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/service/bpd/taninfo.xml0000664000175000017500000000710514044534775025563 00000000000000 Content of a HIPINS segment. AQFINTS_TANINFO AQFINTS_TanInfo taninfo with_db with_list1 with_refcount
libaqfints/aqfints.h
libaqfints/service/bpd/tanjobinfo.h
$(api) void $(struct_prefix)_AddTanJobInfo($(struct_type) *st, AQFINTS_TANJOBINFO *tj); void $(struct_prefix)_AddTanJobInfo($(struct_type) *st, AQFINTS_TANJOBINFO *tj) { if (st->tanJobInfoList==NULL) st->tanJobInfoList=AQFINTS_TanJobInfo_List_new(); AQFINTS_TanJobInfo_List_Add(tj, st->tanJobInfoList); }
0 0 public 0 0 public 0 0 public 0 0 public 0 0 public 0 0 public NULL NULL public own const dup const NULL NULL public own const dup const public own none none 0 0 volatile with_flags public
aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/service/bpd/taninfo_p.h0000664000175000017500000000145515037736054025530 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "taninfo.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef AQFINTS_TANINFO_TANINFO_P_H #define AQFINTS_TANINFO_TANINFO_P_H #include "./taninfo.h" #ifdef __cplusplus extern "C" { #endif struct AQFINTS_TANINFO { GWEN_LIST_ELEMENT(AQFINTS_TANINFO) int _refCount; int jobsPerMsg; int minSigs; int securityClass; int minPinLen; int maxPinLen; int maxTanLen; char *userIdText; char *customerIdText; AQFINTS_TANJOBINFO_LIST *tanJobInfoList; uint32_t runtimeFlags; /* volatile */ }; #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/service/bpd/bpd.h0000664000175000017500000001402315037736054024313 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "bpd.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef AQFINTS_BPD_BPD_H #define AQFINTS_BPD_BPD_H #ifdef __cplusplus extern "C" { #endif /** @page P_AQFINTS_BPD Structure AQFINTS_BPD

This page describes the properties of AQFINTS_BPD.

AQFINTS_BPD

@anchor AQFINTS_BPD_bankData

bankData

Set this property with @ref AQFINTS_Bpd_SetBankData(), get it with @ref AQFINTS_Bpd_GetBankData().

@anchor AQFINTS_BPD_tanInfo

tanInfo

Set this property with @ref AQFINTS_Bpd_SetTanInfo(), get it with @ref AQFINTS_Bpd_GetTanInfo().

@anchor AQFINTS_BPD_bpdJobs

bpdJobs

Set this property with @ref AQFINTS_Bpd_SetBpdJobs(), get it with @ref AQFINTS_Bpd_GetBpdJobs().

@anchor AQFINTS_BPD_addresses

addresses

Set this property with @ref AQFINTS_Bpd_SetAddresses(), get it with @ref AQFINTS_Bpd_GetAddresses().

@anchor AQFINTS_BPD_securityProfiles

securityProfiles

Set this property with @ref AQFINTS_Bpd_SetSecurityProfiles(), get it with @ref AQFINTS_Bpd_GetSecurityProfiles().

@anchor AQFINTS_BPD_tanMethodList

tanMethodList

Set this property with @ref AQFINTS_Bpd_SetTanMethodList(), get it with @ref AQFINTS_Bpd_GetTanMethodList().

@anchor AQFINTS_BPD_runtimeFlags

runtimeFlags

Set this property with @ref AQFINTS_Bpd_SetRuntimeFlags(), get it with @ref AQFINTS_Bpd_GetRuntimeFlags().

*/ /* define AQFINTS_BPD_RTFLAGS */ /* define AQFINTS_BPD_FLAGS */ /* needed system headers */ #include #include #include /* pre-headers */ #include typedef struct AQFINTS_BPD AQFINTS_BPD; GWEN_LIST_FUNCTION_DEFS(AQFINTS_BPD, AQFINTS_Bpd) /* post-headers */ #include "libaqfints/service/bpd/bankdata.h" #include "libaqfints/service/bpd/bpdjob.h" #include "libaqfints/service/bpd/bpdaddr.h" #include "libaqfints/service/bpd/bpdsecprofile.h" #include "libaqfints/service/bpd/taninfo.h" #include "libaqfints/service/bpd/tanmethod.h" /** Constructor. */ AQFINTS_BPD *AQFINTS_Bpd_new(void); /** Destructor. */ void AQFINTS_Bpd_free(AQFINTS_BPD *p_struct); void AQFINTS_Bpd_Attach(AQFINTS_BPD *p_struct); AQFINTS_BPD *AQFINTS_Bpd_dup(const AQFINTS_BPD *p_src); AQFINTS_BPD *AQFINTS_Bpd_copy(AQFINTS_BPD *p_struct, const AQFINTS_BPD *p_src); /** Getter. * Use this function to get the member "bankData" (see @ref AQFINTS_BPD_bankData) */ AQFINTS_BANKDATA *AQFINTS_Bpd_GetBankData(const AQFINTS_BPD *p_struct); /** Getter. * Use this function to get the member "tanInfo" (see @ref AQFINTS_BPD_tanInfo) */ AQFINTS_TANINFO *AQFINTS_Bpd_GetTanInfo(const AQFINTS_BPD *p_struct); /** Getter. * Use this function to get the member "bpdJobs" (see @ref AQFINTS_BPD_bpdJobs) */ AQFINTS_BPDJOB_LIST *AQFINTS_Bpd_GetBpdJobs(const AQFINTS_BPD *p_struct); /** Getter. * Use this function to get the member "addresses" (see @ref AQFINTS_BPD_addresses) */ AQFINTS_BPDADDR_LIST *AQFINTS_Bpd_GetAddresses(const AQFINTS_BPD *p_struct); /** Getter. * Use this function to get the member "securityProfiles" (see @ref AQFINTS_BPD_securityProfiles) */ AQFINTS_BPD_SECPROFILE_LIST *AQFINTS_Bpd_GetSecurityProfiles(const AQFINTS_BPD *p_struct); /** Getter. * Use this function to get the member "tanMethodList" (see @ref AQFINTS_BPD_tanMethodList) */ AQFINTS_TANMETHOD_LIST *AQFINTS_Bpd_GetTanMethodList(const AQFINTS_BPD *p_struct); /** Getter. * Use this function to get the member "runtimeFlags" (see @ref AQFINTS_BPD_runtimeFlags) */ uint32_t AQFINTS_Bpd_GetRuntimeFlags(const AQFINTS_BPD *p_struct); /** Setter. * Use this function to set the member "bankData" (see @ref AQFINTS_BPD_bankData) */ void AQFINTS_Bpd_SetBankData(AQFINTS_BPD *p_struct, AQFINTS_BANKDATA *p_src); /** Setter. * Use this function to set the member "tanInfo" (see @ref AQFINTS_BPD_tanInfo) */ void AQFINTS_Bpd_SetTanInfo(AQFINTS_BPD *p_struct, AQFINTS_TANINFO *p_src); /** Setter. * Use this function to set the member "bpdJobs" (see @ref AQFINTS_BPD_bpdJobs) */ void AQFINTS_Bpd_SetBpdJobs(AQFINTS_BPD *p_struct, AQFINTS_BPDJOB_LIST *p_src); /** Setter. * Use this function to set the member "addresses" (see @ref AQFINTS_BPD_addresses) */ void AQFINTS_Bpd_SetAddresses(AQFINTS_BPD *p_struct, AQFINTS_BPDADDR_LIST *p_src); /** Setter. * Use this function to set the member "securityProfiles" (see @ref AQFINTS_BPD_securityProfiles) */ void AQFINTS_Bpd_SetSecurityProfiles(AQFINTS_BPD *p_struct, AQFINTS_BPD_SECPROFILE_LIST *p_src); /** Setter. * Use this function to set the member "tanMethodList" (see @ref AQFINTS_BPD_tanMethodList) */ void AQFINTS_Bpd_SetTanMethodList(AQFINTS_BPD *p_struct, AQFINTS_TANMETHOD_LIST *p_src); /** Setter. * Use this function to set the member "runtimeFlags" (see @ref AQFINTS_BPD_runtimeFlags) */ void AQFINTS_Bpd_SetRuntimeFlags(AQFINTS_BPD *p_struct, uint32_t p_src); /** Add flags. * Use this function to add flags to member "runtimeFlags" (see @ref AQFINTS_BPD_runtimeFlags) */ void AQFINTS_Bpd_AddRuntimeFlags(AQFINTS_BPD *p_struct, uint32_t p_src); /** Add flags. * Use this function to add flags to member "runtimeFlags" (see @ref AQFINTS_BPD_runtimeFlags) */ void AQFINTS_Bpd_SubRuntimeFlags(AQFINTS_BPD *p_struct, uint32_t p_src); AQFINTS_BPD_LIST *AQFINTS_Bpd_List_dup(const AQFINTS_BPD_LIST *p_src); void AQFINTS_Bpd_ReadDb(AQFINTS_BPD *p_struct, GWEN_DB_NODE *p_db); int AQFINTS_Bpd_WriteDb(const AQFINTS_BPD *p_struct, GWEN_DB_NODE *p_db); AQFINTS_BPD *AQFINTS_Bpd_fromDb(GWEN_DB_NODE *p_db); int AQFINTS_Bpd_toDb(const AQFINTS_BPD *p_struct, GWEN_DB_NODE *p_db); void AQFINTS_Bpd_AddBpdJob(AQFINTS_BPD *st, AQFINTS_BPDJOB *j); void AQFINTS_Bpd_AddBpdAddr(AQFINTS_BPD *st, AQFINTS_BPDADDR *addr); void AQFINTS_Bpd_AddBpdSecurityProfile(AQFINTS_BPD *st, AQFINTS_BPD_SECPROFILE *secProfile); #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/service/bpd/bpdjob.xml0000664000175000017500000000520614043610745025354 00000000000000 AQFINTS_BPDJOB AQFINTS_BpdJob bpdjob with_db with_list1 with_refcount
libaqfints/aqfints.h
string.h
0 0 with_flags public NULL NULL public own const dup const NULL NULL public own const dup const 0 0 public 1 1 public 0 0 public 0 0 public NULL NULL public own none none 0 0 volatile with_flags public
aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/service/bpd/bpdsecprofile.c0000664000175000017500000001326715037736054026373 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "bpdsecprofile.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "./bpdsecprofile_p.h" #include #include /* code headers */ /* macro functions */ GWEN_LIST_FUNCTIONS(AQFINTS_BPD_SECPROFILE, AQFINTS_BpdSecProfile) AQFINTS_BPD_SECPROFILE *AQFINTS_BpdSecProfile_new(void) { AQFINTS_BPD_SECPROFILE *p_struct; GWEN_NEW_OBJECT(AQFINTS_BPD_SECPROFILE, p_struct) p_struct->_refCount=1; GWEN_LIST_INIT(AQFINTS_BPD_SECPROFILE, p_struct) /* members */ p_struct->code=NULL; memset(p_struct->versions, 0, (9)*sizeof(int)); /* virtual functions */ return p_struct; } void AQFINTS_BpdSecProfile_free(AQFINTS_BPD_SECPROFILE *p_struct) { if (p_struct) { assert(p_struct->_refCount); if (p_struct->_refCount==1) { GWEN_LIST_FINI(AQFINTS_BPD_SECPROFILE, p_struct) /* members */ free(p_struct->code); p_struct->code=NULL; p_struct->_refCount=0; GWEN_FREE_OBJECT(p_struct); } else p_struct->_refCount--; } } void AQFINTS_BpdSecProfile_Attach(AQFINTS_BPD_SECPROFILE *p_struct) { assert(p_struct); assert(p_struct->_refCount); p_struct->_refCount++; } AQFINTS_BPD_SECPROFILE *AQFINTS_BpdSecProfile_dup(const AQFINTS_BPD_SECPROFILE *p_src) { AQFINTS_BPD_SECPROFILE *p_struct; assert(p_src); p_struct=AQFINTS_BpdSecProfile_new(); /* member "code" */ if (p_struct->code) { free(p_struct->code); p_struct->code=NULL; p_struct->code=NULL; } if (p_src->code) { p_struct->code=strdup(p_src->code); } /* member "versions" */ memmove(p_struct->versions, p_src->versions, (9)*sizeof(int)); return p_struct; } AQFINTS_BPD_SECPROFILE *AQFINTS_BpdSecProfile_copy(AQFINTS_BPD_SECPROFILE *p_struct, const AQFINTS_BPD_SECPROFILE *p_src) { assert(p_struct); assert(p_src); /* member "code" */ if (p_struct->code) { free(p_struct->code); p_struct->code=NULL; p_struct->code=NULL; } if (p_src->code) { p_struct->code=strdup(p_src->code); } /* member "versions" */ memmove(p_struct->versions, p_src->versions, (9)*sizeof(int)); return p_struct; } const char *AQFINTS_BpdSecProfile_GetCode(const AQFINTS_BPD_SECPROFILE *p_struct){ assert(p_struct); return p_struct->code; } const int *AQFINTS_BpdSecProfile_GetVersions(const AQFINTS_BPD_SECPROFILE *p_struct){ assert(p_struct); return p_struct->versions; } void AQFINTS_BpdSecProfile_SetCode(AQFINTS_BPD_SECPROFILE *p_struct, const char *p_src){ assert(p_struct); if (p_struct->code) { free(p_struct->code); p_struct->code=NULL; p_struct->code=NULL; } if (p_src) { p_struct->code=strdup(p_src); } else { p_struct->code=NULL; } } void AQFINTS_BpdSecProfile_SetVersions(AQFINTS_BPD_SECPROFILE *p_struct, const int *p_src){ assert(p_struct); memmove(p_struct->versions, p_src, (9)*sizeof(int)); } AQFINTS_BPD_SECPROFILE_LIST *AQFINTS_BpdSecProfile_List_dup(const AQFINTS_BPD_SECPROFILE_LIST *p_src) { AQFINTS_BPD_SECPROFILE_LIST *p_dest; AQFINTS_BPD_SECPROFILE *p_elem; assert(p_src); p_dest=AQFINTS_BpdSecProfile_List_new(); p_elem=AQFINTS_BpdSecProfile_List_First(p_src); while(p_elem) { AQFINTS_BPD_SECPROFILE *p_cpy; p_cpy=AQFINTS_BpdSecProfile_dup(p_elem); AQFINTS_BpdSecProfile_List_Add(p_cpy, p_dest); p_elem=AQFINTS_BpdSecProfile_List_Next(p_elem); } return p_dest; } void AQFINTS_BpdSecProfile_ReadDb(AQFINTS_BPD_SECPROFILE *p_struct, GWEN_DB_NODE *p_db){ assert(p_struct); /* member "code" */ if (p_struct->code) { free(p_struct->code); p_struct->code=NULL; p_struct->code=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "code", 0, NULL); if (s) p_struct->code=strdup(s); } /* member "versions" */ { int i; memset(p_struct->versions, 0, (9)*sizeof(int)); for (i=0; i < 9; i++) { int v; v=GWEN_DB_GetIntValue(p_db, "versions", i, 0); if (v==0) break; p_struct->versions[i]=v; } } } int AQFINTS_BpdSecProfile_WriteDb(const AQFINTS_BPD_SECPROFILE *p_struct, GWEN_DB_NODE *p_db) { int p_rv; assert(p_struct); /* member "code" */ if (p_struct->code) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "code", p_struct->code); else { GWEN_DB_DeleteVar(p_db, "code"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "versions" */ { int i=0; int result=0; GWEN_DB_DeleteVar(p_db, "versions"); for (i=0; i < 9; i++) { result=GWEN_DB_SetIntValue(p_db, 0, "versions", p_struct->versions[i]); } p_rv=result; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } return 0; } AQFINTS_BPD_SECPROFILE *AQFINTS_BpdSecProfile_fromDb(GWEN_DB_NODE *p_db) { AQFINTS_BPD_SECPROFILE *p_struct; p_struct=AQFINTS_BpdSecProfile_new(); AQFINTS_BpdSecProfile_ReadDb(p_struct, p_db); return p_struct; } int AQFINTS_BpdSecProfile_toDb(const AQFINTS_BPD_SECPROFILE *p_struct, GWEN_DB_NODE *p_db) { return AQFINTS_BpdSecProfile_WriteDb(p_struct, p_db); } int AQFINTS_BpdSecProfile_GetVersionsAt(const AQFINTS_BPD_SECPROFILE *p_struct, int idx) { if (p_struct && (idx < 9)) return p_struct->versions[idx]; return 0; } int AQFINTS_BpdSecProfile_SetVersionsAt(AQFINTS_BPD_SECPROFILE *p_struct, int idx, int v) { if (p_struct && (idx < 9)) { p_struct->versions[idx]=v; return 0; } return GWEN_ERROR_INVALID; } void AQFINTS_BpdSecProfile_PresetVersions(AQFINTS_BPD_SECPROFILE *p_struct, int v) { int i; for(i=0; i < 9; i++) p_struct->versions[i]=v; } /* code headers */ aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/service/bpd/bpdjob.h0000664000175000017500000001553515037736054025017 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "bpdjob.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef AQFINTS_BPDJOB_BPDJOB_H #define AQFINTS_BPDJOB_BPDJOB_H #ifdef __cplusplus extern "C" { #endif /** @page P_AQFINTS_BPDJOB Structure AQFINTS_BPDJOB

This page describes the properties of AQFINTS_BPDJOB.

AQFINTS_BPDJOB

@anchor AQFINTS_BPDJOB_flags

flags

Set this property with @ref AQFINTS_BpdJob_SetFlags(), get it with @ref AQFINTS_BpdJob_GetFlags().

@anchor AQFINTS_BPDJOB_name

name

Set this property with @ref AQFINTS_BpdJob_SetName(), get it with @ref AQFINTS_BpdJob_GetName().

@anchor AQFINTS_BPDJOB_code

code

Set this property with @ref AQFINTS_BpdJob_SetCode(), get it with @ref AQFINTS_BpdJob_GetCode().

@anchor AQFINTS_BPDJOB_version

version

Set this property with @ref AQFINTS_BpdJob_SetVersion(), get it with @ref AQFINTS_BpdJob_GetVersion().

@anchor AQFINTS_BPDJOB_jobsPerMsg

jobsPerMsg

Set this property with @ref AQFINTS_BpdJob_SetJobsPerMsg(), get it with @ref AQFINTS_BpdJob_GetJobsPerMsg().

@anchor AQFINTS_BPDJOB_minSigs

minSigs

Set this property with @ref AQFINTS_BpdJob_SetMinSigs(), get it with @ref AQFINTS_BpdJob_GetMinSigs().

@anchor AQFINTS_BPDJOB_securityClass

securityClass

Set this property with @ref AQFINTS_BpdJob_SetSecurityClass(), get it with @ref AQFINTS_BpdJob_GetSecurityClass().

@anchor AQFINTS_BPDJOB_settings

settings

Set this property with @ref AQFINTS_BpdJob_SetSettings(), get it with @ref AQFINTS_BpdJob_GetSettings().

@anchor AQFINTS_BPDJOB_runtimeFlags

runtimeFlags

Set this property with @ref AQFINTS_BpdJob_SetRuntimeFlags(), get it with @ref AQFINTS_BpdJob_GetRuntimeFlags().

*/ /* define AQFINTS_BPDJOB_RTFLAGS */ /* define AQFINTS_BPDJOB_FLAGS */ /* needed system headers */ #include #include #include /* pre-headers */ #include typedef struct AQFINTS_BPDJOB AQFINTS_BPDJOB; GWEN_LIST_FUNCTION_DEFS(AQFINTS_BPDJOB, AQFINTS_BpdJob) /* post-headers */ /** Constructor. */ AQFINTS_BPDJOB *AQFINTS_BpdJob_new(void); /** Destructor. */ void AQFINTS_BpdJob_free(AQFINTS_BPDJOB *p_struct); void AQFINTS_BpdJob_Attach(AQFINTS_BPDJOB *p_struct); AQFINTS_BPDJOB *AQFINTS_BpdJob_dup(const AQFINTS_BPDJOB *p_src); AQFINTS_BPDJOB *AQFINTS_BpdJob_copy(AQFINTS_BPDJOB *p_struct, const AQFINTS_BPDJOB *p_src); /** Getter. * Use this function to get the member "flags" (see @ref AQFINTS_BPDJOB_flags) */ uint32_t AQFINTS_BpdJob_GetFlags(const AQFINTS_BPDJOB *p_struct); /** Getter. * Use this function to get the member "name" (see @ref AQFINTS_BPDJOB_name) */ const char *AQFINTS_BpdJob_GetName(const AQFINTS_BPDJOB *p_struct); /** Getter. * Use this function to get the member "code" (see @ref AQFINTS_BPDJOB_code) */ const char *AQFINTS_BpdJob_GetCode(const AQFINTS_BPDJOB *p_struct); /** Getter. * Use this function to get the member "version" (see @ref AQFINTS_BPDJOB_version) */ int AQFINTS_BpdJob_GetVersion(const AQFINTS_BPDJOB *p_struct); /** Getter. * Use this function to get the member "jobsPerMsg" (see @ref AQFINTS_BPDJOB_jobsPerMsg) */ int AQFINTS_BpdJob_GetJobsPerMsg(const AQFINTS_BPDJOB *p_struct); /** Getter. * Use this function to get the member "minSigs" (see @ref AQFINTS_BPDJOB_minSigs) */ int AQFINTS_BpdJob_GetMinSigs(const AQFINTS_BPDJOB *p_struct); /** Getter. * Use this function to get the member "securityClass" (see @ref AQFINTS_BPDJOB_securityClass) */ int AQFINTS_BpdJob_GetSecurityClass(const AQFINTS_BPDJOB *p_struct); /** Getter. * Use this function to get the member "settings" (see @ref AQFINTS_BPDJOB_settings) */ GWEN_DB_NODE *AQFINTS_BpdJob_GetSettings(const AQFINTS_BPDJOB *p_struct); /** Getter. * Use this function to get the member "runtimeFlags" (see @ref AQFINTS_BPDJOB_runtimeFlags) */ uint32_t AQFINTS_BpdJob_GetRuntimeFlags(const AQFINTS_BPDJOB *p_struct); /** Setter. * Use this function to set the member "flags" (see @ref AQFINTS_BPDJOB_flags) */ void AQFINTS_BpdJob_SetFlags(AQFINTS_BPDJOB *p_struct, uint32_t p_src); /** Add flags. * Use this function to add flags to member "flags" (see @ref AQFINTS_BPDJOB_flags) */ void AQFINTS_BpdJob_AddFlags(AQFINTS_BPDJOB *p_struct, uint32_t p_src); /** Add flags. * Use this function to add flags to member "flags" (see @ref AQFINTS_BPDJOB_flags) */ void AQFINTS_BpdJob_SubFlags(AQFINTS_BPDJOB *p_struct, uint32_t p_src); /** Setter. * Use this function to set the member "name" (see @ref AQFINTS_BPDJOB_name) */ void AQFINTS_BpdJob_SetName(AQFINTS_BPDJOB *p_struct, const char *p_src); /** Setter. * Use this function to set the member "code" (see @ref AQFINTS_BPDJOB_code) */ void AQFINTS_BpdJob_SetCode(AQFINTS_BPDJOB *p_struct, const char *p_src); /** Setter. * Use this function to set the member "version" (see @ref AQFINTS_BPDJOB_version) */ void AQFINTS_BpdJob_SetVersion(AQFINTS_BPDJOB *p_struct, int p_src); /** Setter. * Use this function to set the member "jobsPerMsg" (see @ref AQFINTS_BPDJOB_jobsPerMsg) */ void AQFINTS_BpdJob_SetJobsPerMsg(AQFINTS_BPDJOB *p_struct, int p_src); /** Setter. * Use this function to set the member "minSigs" (see @ref AQFINTS_BPDJOB_minSigs) */ void AQFINTS_BpdJob_SetMinSigs(AQFINTS_BPDJOB *p_struct, int p_src); /** Setter. * Use this function to set the member "securityClass" (see @ref AQFINTS_BPDJOB_securityClass) */ void AQFINTS_BpdJob_SetSecurityClass(AQFINTS_BPDJOB *p_struct, int p_src); /** Setter. * Use this function to set the member "settings" (see @ref AQFINTS_BPDJOB_settings) */ void AQFINTS_BpdJob_SetSettings(AQFINTS_BPDJOB *p_struct, GWEN_DB_NODE *p_src); /** Setter. * Use this function to set the member "runtimeFlags" (see @ref AQFINTS_BPDJOB_runtimeFlags) */ void AQFINTS_BpdJob_SetRuntimeFlags(AQFINTS_BPDJOB *p_struct, uint32_t p_src); /** Add flags. * Use this function to add flags to member "runtimeFlags" (see @ref AQFINTS_BPDJOB_runtimeFlags) */ void AQFINTS_BpdJob_AddRuntimeFlags(AQFINTS_BPDJOB *p_struct, uint32_t p_src); /** Add flags. * Use this function to add flags to member "runtimeFlags" (see @ref AQFINTS_BPDJOB_runtimeFlags) */ void AQFINTS_BpdJob_SubRuntimeFlags(AQFINTS_BPDJOB *p_struct, uint32_t p_src); AQFINTS_BPDJOB_LIST *AQFINTS_BpdJob_List_dup(const AQFINTS_BPDJOB_LIST *p_src); void AQFINTS_BpdJob_ReadDb(AQFINTS_BPDJOB *p_struct, GWEN_DB_NODE *p_db); int AQFINTS_BpdJob_WriteDb(const AQFINTS_BPDJOB *p_struct, GWEN_DB_NODE *p_db); AQFINTS_BPDJOB *AQFINTS_BpdJob_fromDb(GWEN_DB_NODE *p_db); int AQFINTS_BpdJob_toDb(const AQFINTS_BPDJOB *p_struct, GWEN_DB_NODE *p_db); #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/service/bpd/bpdjob_p.h0000664000175000017500000000136215037736054025327 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "bpdjob.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef AQFINTS_BPDJOB_BPDJOB_P_H #define AQFINTS_BPDJOB_BPDJOB_P_H #include "./bpdjob.h" #ifdef __cplusplus extern "C" { #endif struct AQFINTS_BPDJOB { GWEN_LIST_ELEMENT(AQFINTS_BPDJOB) int _refCount; uint32_t flags; char *name; char *code; int version; int jobsPerMsg; int minSigs; int securityClass; GWEN_DB_NODE *settings; uint32_t runtimeFlags; /* volatile */ }; #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/service/bpd/taninfo.c0000664000175000017500000003332415037736054025204 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "taninfo.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "./taninfo_p.h" #include #include /* code headers */ /* macro functions */ GWEN_LIST_FUNCTIONS(AQFINTS_TANINFO, AQFINTS_TanInfo) AQFINTS_TANINFO *AQFINTS_TanInfo_new(void) { AQFINTS_TANINFO *p_struct; GWEN_NEW_OBJECT(AQFINTS_TANINFO, p_struct) p_struct->_refCount=1; GWEN_LIST_INIT(AQFINTS_TANINFO, p_struct) /* members */ p_struct->jobsPerMsg=0; p_struct->minSigs=0; p_struct->securityClass=0; p_struct->minPinLen=0; p_struct->maxPinLen=0; p_struct->maxTanLen=0; p_struct->userIdText=NULL; p_struct->customerIdText=NULL; p_struct->tanJobInfoList=NULL; p_struct->runtimeFlags=0; /* virtual functions */ return p_struct; } void AQFINTS_TanInfo_free(AQFINTS_TANINFO *p_struct) { if (p_struct) { assert(p_struct->_refCount); if (p_struct->_refCount==1) { GWEN_LIST_FINI(AQFINTS_TANINFO, p_struct) /* members */ free(p_struct->userIdText); p_struct->userIdText=NULL; free(p_struct->customerIdText); p_struct->customerIdText=NULL; AQFINTS_TanJobInfo_List_free(p_struct->tanJobInfoList); p_struct->tanJobInfoList=NULL; p_struct->_refCount=0; GWEN_FREE_OBJECT(p_struct); } else p_struct->_refCount--; } } void AQFINTS_TanInfo_Attach(AQFINTS_TANINFO *p_struct) { assert(p_struct); assert(p_struct->_refCount); p_struct->_refCount++; } AQFINTS_TANINFO *AQFINTS_TanInfo_dup(const AQFINTS_TANINFO *p_src) { AQFINTS_TANINFO *p_struct; assert(p_src); p_struct=AQFINTS_TanInfo_new(); /* member "jobsPerMsg" */ p_struct->jobsPerMsg=p_src->jobsPerMsg; /* member "minSigs" */ p_struct->minSigs=p_src->minSigs; /* member "securityClass" */ p_struct->securityClass=p_src->securityClass; /* member "minPinLen" */ p_struct->minPinLen=p_src->minPinLen; /* member "maxPinLen" */ p_struct->maxPinLen=p_src->maxPinLen; /* member "maxTanLen" */ p_struct->maxTanLen=p_src->maxTanLen; /* member "userIdText" */ if (p_struct->userIdText) { free(p_struct->userIdText); p_struct->userIdText=NULL; p_struct->userIdText=NULL; } if (p_src->userIdText) { p_struct->userIdText=strdup(p_src->userIdText); } /* member "customerIdText" */ if (p_struct->customerIdText) { free(p_struct->customerIdText); p_struct->customerIdText=NULL; p_struct->customerIdText=NULL; } if (p_src->customerIdText) { p_struct->customerIdText=strdup(p_src->customerIdText); } /* member "tanJobInfoList" */ if (p_struct->tanJobInfoList) { AQFINTS_TanJobInfo_List_free(p_struct->tanJobInfoList); p_struct->tanJobInfoList=NULL; p_struct->tanJobInfoList=NULL; } if (p_src->tanJobInfoList) { p_struct->tanJobInfoList=AQFINTS_TanJobInfo_List_dup(p_src->tanJobInfoList); } /* member "runtimeFlags" */ p_struct->runtimeFlags=p_src->runtimeFlags; return p_struct; } AQFINTS_TANINFO *AQFINTS_TanInfo_copy(AQFINTS_TANINFO *p_struct, const AQFINTS_TANINFO *p_src) { assert(p_struct); assert(p_src); /* member "jobsPerMsg" */ p_struct->jobsPerMsg=p_src->jobsPerMsg; /* member "minSigs" */ p_struct->minSigs=p_src->minSigs; /* member "securityClass" */ p_struct->securityClass=p_src->securityClass; /* member "minPinLen" */ p_struct->minPinLen=p_src->minPinLen; /* member "maxPinLen" */ p_struct->maxPinLen=p_src->maxPinLen; /* member "maxTanLen" */ p_struct->maxTanLen=p_src->maxTanLen; /* member "userIdText" */ if (p_struct->userIdText) { free(p_struct->userIdText); p_struct->userIdText=NULL; p_struct->userIdText=NULL; } if (p_src->userIdText) { p_struct->userIdText=strdup(p_src->userIdText); } /* member "customerIdText" */ if (p_struct->customerIdText) { free(p_struct->customerIdText); p_struct->customerIdText=NULL; p_struct->customerIdText=NULL; } if (p_src->customerIdText) { p_struct->customerIdText=strdup(p_src->customerIdText); } /* member "tanJobInfoList" */ if (p_struct->tanJobInfoList) { AQFINTS_TanJobInfo_List_free(p_struct->tanJobInfoList); p_struct->tanJobInfoList=NULL; p_struct->tanJobInfoList=NULL; } if (p_src->tanJobInfoList) { p_struct->tanJobInfoList=AQFINTS_TanJobInfo_List_dup(p_src->tanJobInfoList); } /* member "runtimeFlags" */ p_struct->runtimeFlags=p_src->runtimeFlags; return p_struct; } int AQFINTS_TanInfo_GetJobsPerMsg(const AQFINTS_TANINFO *p_struct){ assert(p_struct); return p_struct->jobsPerMsg; } int AQFINTS_TanInfo_GetMinSigs(const AQFINTS_TANINFO *p_struct){ assert(p_struct); return p_struct->minSigs; } int AQFINTS_TanInfo_GetSecurityClass(const AQFINTS_TANINFO *p_struct){ assert(p_struct); return p_struct->securityClass; } int AQFINTS_TanInfo_GetMinPinLen(const AQFINTS_TANINFO *p_struct){ assert(p_struct); return p_struct->minPinLen; } int AQFINTS_TanInfo_GetMaxPinLen(const AQFINTS_TANINFO *p_struct){ assert(p_struct); return p_struct->maxPinLen; } int AQFINTS_TanInfo_GetMaxTanLen(const AQFINTS_TANINFO *p_struct){ assert(p_struct); return p_struct->maxTanLen; } const char *AQFINTS_TanInfo_GetUserIdText(const AQFINTS_TANINFO *p_struct){ assert(p_struct); return p_struct->userIdText; } const char *AQFINTS_TanInfo_GetCustomerIdText(const AQFINTS_TANINFO *p_struct){ assert(p_struct); return p_struct->customerIdText; } AQFINTS_TANJOBINFO_LIST *AQFINTS_TanInfo_GetTanJobInfoList(const AQFINTS_TANINFO *p_struct){ assert(p_struct); return p_struct->tanJobInfoList; } uint32_t AQFINTS_TanInfo_GetRuntimeFlags(const AQFINTS_TANINFO *p_struct){ assert(p_struct); return p_struct->runtimeFlags; } void AQFINTS_TanInfo_SetJobsPerMsg(AQFINTS_TANINFO *p_struct, int p_src){ assert(p_struct); p_struct->jobsPerMsg=p_src; } void AQFINTS_TanInfo_SetMinSigs(AQFINTS_TANINFO *p_struct, int p_src){ assert(p_struct); p_struct->minSigs=p_src; } void AQFINTS_TanInfo_SetSecurityClass(AQFINTS_TANINFO *p_struct, int p_src){ assert(p_struct); p_struct->securityClass=p_src; } void AQFINTS_TanInfo_SetMinPinLen(AQFINTS_TANINFO *p_struct, int p_src){ assert(p_struct); p_struct->minPinLen=p_src; } void AQFINTS_TanInfo_SetMaxPinLen(AQFINTS_TANINFO *p_struct, int p_src){ assert(p_struct); p_struct->maxPinLen=p_src; } void AQFINTS_TanInfo_SetMaxTanLen(AQFINTS_TANINFO *p_struct, int p_src){ assert(p_struct); p_struct->maxTanLen=p_src; } void AQFINTS_TanInfo_SetUserIdText(AQFINTS_TANINFO *p_struct, const char *p_src){ assert(p_struct); if (p_struct->userIdText) { free(p_struct->userIdText); p_struct->userIdText=NULL; p_struct->userIdText=NULL; } if (p_src) { p_struct->userIdText=strdup(p_src); } else { p_struct->userIdText=NULL; } } void AQFINTS_TanInfo_SetCustomerIdText(AQFINTS_TANINFO *p_struct, const char *p_src){ assert(p_struct); if (p_struct->customerIdText) { free(p_struct->customerIdText); p_struct->customerIdText=NULL; p_struct->customerIdText=NULL; } if (p_src) { p_struct->customerIdText=strdup(p_src); } else { p_struct->customerIdText=NULL; } } void AQFINTS_TanInfo_SetTanJobInfoList(AQFINTS_TANINFO *p_struct, AQFINTS_TANJOBINFO_LIST *p_src){ assert(p_struct); if (p_struct->tanJobInfoList) { AQFINTS_TanJobInfo_List_free(p_struct->tanJobInfoList); p_struct->tanJobInfoList=NULL; p_struct->tanJobInfoList=NULL; } p_struct->tanJobInfoList=p_src; } void AQFINTS_TanInfo_SetRuntimeFlags(AQFINTS_TANINFO *p_struct, uint32_t p_src){ assert(p_struct); p_struct->runtimeFlags=p_src; } void AQFINTS_TanInfo_AddRuntimeFlags(AQFINTS_TANINFO *p_struct, uint32_t p_src) { assert(p_struct); p_struct->runtimeFlags|=p_src; } void AQFINTS_TanInfo_SubRuntimeFlags(AQFINTS_TANINFO *p_struct, uint32_t p_src) { assert(p_struct); p_struct->runtimeFlags&=~p_src; } AQFINTS_TANINFO_LIST *AQFINTS_TanInfo_List_dup(const AQFINTS_TANINFO_LIST *p_src) { AQFINTS_TANINFO_LIST *p_dest; AQFINTS_TANINFO *p_elem; assert(p_src); p_dest=AQFINTS_TanInfo_List_new(); p_elem=AQFINTS_TanInfo_List_First(p_src); while(p_elem) { AQFINTS_TANINFO *p_cpy; p_cpy=AQFINTS_TanInfo_dup(p_elem); AQFINTS_TanInfo_List_Add(p_cpy, p_dest); p_elem=AQFINTS_TanInfo_List_Next(p_elem); } return p_dest; } void AQFINTS_TanInfo_ReadDb(AQFINTS_TANINFO *p_struct, GWEN_DB_NODE *p_db){ assert(p_struct); /* member "jobsPerMsg" */ p_struct->jobsPerMsg=GWEN_DB_GetIntValue(p_db, "jobsPerMsg", 0, 0); /* member "minSigs" */ p_struct->minSigs=GWEN_DB_GetIntValue(p_db, "minSigs", 0, 0); /* member "securityClass" */ p_struct->securityClass=GWEN_DB_GetIntValue(p_db, "securityClass", 0, 0); /* member "minPinLen" */ p_struct->minPinLen=GWEN_DB_GetIntValue(p_db, "minPinLen", 0, 0); /* member "maxPinLen" */ p_struct->maxPinLen=GWEN_DB_GetIntValue(p_db, "maxPinLen", 0, 0); /* member "maxTanLen" */ p_struct->maxTanLen=GWEN_DB_GetIntValue(p_db, "maxTanLen", 0, 0); /* member "userIdText" */ if (p_struct->userIdText) { free(p_struct->userIdText); p_struct->userIdText=NULL; p_struct->userIdText=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "userIdText", 0, NULL); if (s) p_struct->userIdText=strdup(s); } /* member "customerIdText" */ if (p_struct->customerIdText) { free(p_struct->customerIdText); p_struct->customerIdText=NULL; p_struct->customerIdText=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "customerIdText", 0, NULL); if (s) p_struct->customerIdText=strdup(s); } /* member "tanJobInfoList" */ if (p_struct->tanJobInfoList) { AQFINTS_TanJobInfo_List_free(p_struct->tanJobInfoList); p_struct->tanJobInfoList=NULL; p_struct->tanJobInfoList=NULL; } { GWEN_DB_NODE *dbSource; dbSource=GWEN_DB_GetGroup(p_db, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "tanJobInfoList"); if (dbSource) { AQFINTS_TANJOBINFO_LIST *t; GWEN_DB_NODE *dbT; t=AQFINTS_TanJobInfo_List_new(); dbT=GWEN_DB_FindFirstGroup(dbSource, "element"); while(dbT) { AQFINTS_TANJOBINFO *elem; elem=AQFINTS_TanJobInfo_fromDb(dbT); if (elem) AQFINTS_TanJobInfo_List_Add(elem, t); dbT=GWEN_DB_FindNextGroup(dbT, "element"); } p_struct->tanJobInfoList=t; } else p_struct->tanJobInfoList=NULL; } /* member "runtimeFlags" */ /* member "runtimeFlags" is volatile, just presetting it */ p_struct->runtimeFlags=0; } int AQFINTS_TanInfo_WriteDb(const AQFINTS_TANINFO *p_struct, GWEN_DB_NODE *p_db) { int p_rv; assert(p_struct); /* member "jobsPerMsg" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "jobsPerMsg", p_struct->jobsPerMsg); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "minSigs" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "minSigs", p_struct->minSigs); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "securityClass" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "securityClass", p_struct->securityClass); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "minPinLen" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "minPinLen", p_struct->minPinLen); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "maxPinLen" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "maxPinLen", p_struct->maxPinLen); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "maxTanLen" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "maxTanLen", p_struct->maxTanLen); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "userIdText" */ if (p_struct->userIdText) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "userIdText", p_struct->userIdText); else { GWEN_DB_DeleteVar(p_db, "userIdText"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "customerIdText" */ if (p_struct->customerIdText) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "customerIdText", p_struct->customerIdText); else { GWEN_DB_DeleteVar(p_db, "customerIdText"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "tanJobInfoList" */ { if (p_struct->tanJobInfoList) { GWEN_DB_NODE *dbDest; AQFINTS_TANJOBINFO *elem; dbDest=GWEN_DB_GetGroup(p_db, GWEN_DB_FLAGS_OVERWRITE_GROUPS, "tanJobInfoList"); assert(dbDest); p_rv=0; elem=AQFINTS_TanJobInfo_List_First(p_struct->tanJobInfoList); while(elem) { GWEN_DB_NODE *dbElem; dbElem=GWEN_DB_GetGroup(dbDest, GWEN_PATH_FLAGS_CREATE_GROUP, "element"); assert(dbElem); p_rv=AQFINTS_TanJobInfo_toDb(elem, dbElem); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", p_rv); break; } elem=AQFINTS_TanJobInfo_List_Next(elem); } } else p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "runtimeFlags" is volatile, not writing to db */ return 0; } AQFINTS_TANINFO *AQFINTS_TanInfo_fromDb(GWEN_DB_NODE *p_db) { AQFINTS_TANINFO *p_struct; p_struct=AQFINTS_TanInfo_new(); AQFINTS_TanInfo_ReadDb(p_struct, p_db); return p_struct; } int AQFINTS_TanInfo_toDb(const AQFINTS_TANINFO *p_struct, GWEN_DB_NODE *p_db) { return AQFINTS_TanInfo_WriteDb(p_struct, p_db); } void AQFINTS_TanInfo_AddTanJobInfo(AQFINTS_TANINFO *st, AQFINTS_TANJOBINFO *tj) { if (st->tanJobInfoList==NULL) st->tanJobInfoList=AQFINTS_TanJobInfo_List_new(); AQFINTS_TanJobInfo_List_Add(tj, st->tanJobInfoList); } /* code headers */ aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/service/bpd/bankdata.h0000664000175000017500000002067715037736054025327 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "bankdata.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef AQFINTS_BANKDATA_BANKDATA_H #define AQFINTS_BANKDATA_BANKDATA_H #ifdef __cplusplus extern "C" { #endif /** @page P_AQFINTS_BANKDATA Structure AQFINTS_BANKDATA

This page describes the properties of AQFINTS_BANKDATA.

AQFINTS_BANKDATA

@anchor AQFINTS_BANKDATA_version

version

Set this property with @ref AQFINTS_BankData_SetVersion(), get it with @ref AQFINTS_BankData_GetVersion().

@anchor AQFINTS_BANKDATA_country

country

Set this property with @ref AQFINTS_BankData_SetCountry(), get it with @ref AQFINTS_BankData_GetCountry().

@anchor AQFINTS_BANKDATA_bankCode

bankCode

Set this property with @ref AQFINTS_BankData_SetBankCode(), get it with @ref AQFINTS_BankData_GetBankCode().

@anchor AQFINTS_BANKDATA_bankName

bankName

Set this property with @ref AQFINTS_BankData_SetBankName(), get it with @ref AQFINTS_BankData_GetBankName().

@anchor AQFINTS_BANKDATA_jobTypesPerMsg

jobTypesPerMsg

Set this property with @ref AQFINTS_BankData_SetJobTypesPerMsg(), get it with @ref AQFINTS_BankData_GetJobTypesPerMsg().

@anchor AQFINTS_BANKDATA_maxMsgSize

maxMsgSize

Set this property with @ref AQFINTS_BankData_SetMaxMsgSize(), get it with @ref AQFINTS_BankData_GetMaxMsgSize().

@anchor AQFINTS_BANKDATA_minTimeout

minTimeout

Set this property with @ref AQFINTS_BankData_SetMinTimeout(), get it with @ref AQFINTS_BankData_GetMinTimeout().

@anchor AQFINTS_BANKDATA_maxTimeout

maxTimeout

Set this property with @ref AQFINTS_BankData_SetMaxTimeout(), get it with @ref AQFINTS_BankData_GetMaxTimeout().

@anchor AQFINTS_BANKDATA_hbciVersions

hbciVersions

Set this property with @ref AQFINTS_BankData_SetHbciVersions(), get it with @ref AQFINTS_BankData_GetHbciVersions().

@anchor AQFINTS_BANKDATA_languages

languages

Set this property with @ref AQFINTS_BankData_SetLanguages(), get it with @ref AQFINTS_BankData_GetLanguages().

@anchor AQFINTS_BANKDATA_runtimeFlags

runtimeFlags

Set this property with @ref AQFINTS_BankData_SetRuntimeFlags(), get it with @ref AQFINTS_BankData_GetRuntimeFlags().

*/ /* define AQFINTS_BANKDATA_RTFLAGS */ /* define AQFINTS_BANKDATA_FLAGS */ /* needed system headers */ #include #include #include /* pre-headers */ #include typedef struct AQFINTS_BANKDATA AQFINTS_BANKDATA; GWEN_LIST_FUNCTION_DEFS(AQFINTS_BANKDATA, AQFINTS_BankData) /* post-headers */ /** Constructor. */ AQFINTS_BANKDATA *AQFINTS_BankData_new(void); /** Destructor. */ void AQFINTS_BankData_free(AQFINTS_BANKDATA *p_struct); void AQFINTS_BankData_Attach(AQFINTS_BANKDATA *p_struct); AQFINTS_BANKDATA *AQFINTS_BankData_dup(const AQFINTS_BANKDATA *p_src); AQFINTS_BANKDATA *AQFINTS_BankData_copy(AQFINTS_BANKDATA *p_struct, const AQFINTS_BANKDATA *p_src); /** Getter. * Use this function to get the member "version" (see @ref AQFINTS_BANKDATA_version) */ int AQFINTS_BankData_GetVersion(const AQFINTS_BANKDATA *p_struct); /** Getter. * Use this function to get the member "country" (see @ref AQFINTS_BANKDATA_country) */ int AQFINTS_BankData_GetCountry(const AQFINTS_BANKDATA *p_struct); /** Getter. * Use this function to get the member "bankCode" (see @ref AQFINTS_BANKDATA_bankCode) */ const char *AQFINTS_BankData_GetBankCode(const AQFINTS_BANKDATA *p_struct); /** Getter. * Use this function to get the member "bankName" (see @ref AQFINTS_BANKDATA_bankName) */ const char *AQFINTS_BankData_GetBankName(const AQFINTS_BANKDATA *p_struct); /** Getter. * Use this function to get the member "jobTypesPerMsg" (see @ref AQFINTS_BANKDATA_jobTypesPerMsg) */ int AQFINTS_BankData_GetJobTypesPerMsg(const AQFINTS_BANKDATA *p_struct); /** Getter. * Use this function to get the member "maxMsgSize" (see @ref AQFINTS_BANKDATA_maxMsgSize) */ int AQFINTS_BankData_GetMaxMsgSize(const AQFINTS_BANKDATA *p_struct); /** Getter. * Use this function to get the member "minTimeout" (see @ref AQFINTS_BANKDATA_minTimeout) */ int AQFINTS_BankData_GetMinTimeout(const AQFINTS_BANKDATA *p_struct); /** Getter. * Use this function to get the member "maxTimeout" (see @ref AQFINTS_BANKDATA_maxTimeout) */ int AQFINTS_BankData_GetMaxTimeout(const AQFINTS_BANKDATA *p_struct); /** Getter. * Use this function to get the member "hbciVersions" (see @ref AQFINTS_BANKDATA_hbciVersions) */ const int *AQFINTS_BankData_GetHbciVersions(const AQFINTS_BANKDATA *p_struct); /** Getter. * Use this function to get the member "languages" (see @ref AQFINTS_BANKDATA_languages) */ const int *AQFINTS_BankData_GetLanguages(const AQFINTS_BANKDATA *p_struct); /** Getter. * Use this function to get the member "runtimeFlags" (see @ref AQFINTS_BANKDATA_runtimeFlags) */ uint32_t AQFINTS_BankData_GetRuntimeFlags(const AQFINTS_BANKDATA *p_struct); /** Setter. * Use this function to set the member "version" (see @ref AQFINTS_BANKDATA_version) */ void AQFINTS_BankData_SetVersion(AQFINTS_BANKDATA *p_struct, int p_src); /** Setter. * Use this function to set the member "country" (see @ref AQFINTS_BANKDATA_country) */ void AQFINTS_BankData_SetCountry(AQFINTS_BANKDATA *p_struct, int p_src); /** Setter. * Use this function to set the member "bankCode" (see @ref AQFINTS_BANKDATA_bankCode) */ void AQFINTS_BankData_SetBankCode(AQFINTS_BANKDATA *p_struct, const char *p_src); /** Setter. * Use this function to set the member "bankName" (see @ref AQFINTS_BANKDATA_bankName) */ void AQFINTS_BankData_SetBankName(AQFINTS_BANKDATA *p_struct, const char *p_src); /** Setter. * Use this function to set the member "jobTypesPerMsg" (see @ref AQFINTS_BANKDATA_jobTypesPerMsg) */ void AQFINTS_BankData_SetJobTypesPerMsg(AQFINTS_BANKDATA *p_struct, int p_src); /** Setter. * Use this function to set the member "maxMsgSize" (see @ref AQFINTS_BANKDATA_maxMsgSize) */ void AQFINTS_BankData_SetMaxMsgSize(AQFINTS_BANKDATA *p_struct, int p_src); /** Setter. * Use this function to set the member "minTimeout" (see @ref AQFINTS_BANKDATA_minTimeout) */ void AQFINTS_BankData_SetMinTimeout(AQFINTS_BANKDATA *p_struct, int p_src); /** Setter. * Use this function to set the member "maxTimeout" (see @ref AQFINTS_BANKDATA_maxTimeout) */ void AQFINTS_BankData_SetMaxTimeout(AQFINTS_BANKDATA *p_struct, int p_src); /** Setter. * Use this function to set the member "hbciVersions" (see @ref AQFINTS_BANKDATA_hbciVersions) */ void AQFINTS_BankData_SetHbciVersions(AQFINTS_BANKDATA *p_struct, const int *p_src); /** Setter. * Use this function to set the member "languages" (see @ref AQFINTS_BANKDATA_languages) */ void AQFINTS_BankData_SetLanguages(AQFINTS_BANKDATA *p_struct, const int *p_src); /** Setter. * Use this function to set the member "runtimeFlags" (see @ref AQFINTS_BANKDATA_runtimeFlags) */ void AQFINTS_BankData_SetRuntimeFlags(AQFINTS_BANKDATA *p_struct, uint32_t p_src); /** Add flags. * Use this function to add flags to member "runtimeFlags" (see @ref AQFINTS_BANKDATA_runtimeFlags) */ void AQFINTS_BankData_AddRuntimeFlags(AQFINTS_BANKDATA *p_struct, uint32_t p_src); /** Add flags. * Use this function to add flags to member "runtimeFlags" (see @ref AQFINTS_BANKDATA_runtimeFlags) */ void AQFINTS_BankData_SubRuntimeFlags(AQFINTS_BANKDATA *p_struct, uint32_t p_src); AQFINTS_BANKDATA_LIST *AQFINTS_BankData_List_dup(const AQFINTS_BANKDATA_LIST *p_src); void AQFINTS_BankData_ReadDb(AQFINTS_BANKDATA *p_struct, GWEN_DB_NODE *p_db); int AQFINTS_BankData_WriteDb(const AQFINTS_BANKDATA *p_struct, GWEN_DB_NODE *p_db); AQFINTS_BANKDATA *AQFINTS_BankData_fromDb(GWEN_DB_NODE *p_db); int AQFINTS_BankData_toDb(const AQFINTS_BANKDATA *p_struct, GWEN_DB_NODE *p_db); int AQFINTS_BankData_GetHbciVersionsAt(const AQFINTS_BANKDATA *p_struct, int idx); int AQFINTS_BankData_SetHbciVersionsAt(AQFINTS_BANKDATA *p_struct, int idx, int v); void AQFINTS_BankData_PresetHbciVersions(AQFINTS_BANKDATA *p_struct, int v); int AQFINTS_BankData_GetLanguagesAt(const AQFINTS_BANKDATA *p_struct, int idx); int AQFINTS_BankData_SetLanguagesAt(AQFINTS_BANKDATA *p_struct, int idx, int v); void AQFINTS_BankData_PresetLanguages(AQFINTS_BANKDATA *p_struct, int v); #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/service/bpd/tanmethod.h0000664000175000017500000003433115037736054025535 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "tanmethod.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef AQFINTS_TANMETHOD_TANMETHOD_H #define AQFINTS_TANMETHOD_TANMETHOD_H #ifdef __cplusplus extern "C" { #endif /** @page P_AQFINTS_TANMETHOD Structure AQFINTS_TANMETHOD

This page describes the properties of AQFINTS_TANMETHOD.

AQFINTS_TANMETHOD

@anchor AQFINTS_TANMETHOD_flags

flags

Set this property with @ref AQFINTS_TanMethod_SetFlags(), get it with @ref AQFINTS_TanMethod_GetFlags().

@anchor AQFINTS_TANMETHOD_function

function

Set this property with @ref AQFINTS_TanMethod_SetFunction(), get it with @ref AQFINTS_TanMethod_GetFunction().

@anchor AQFINTS_TANMETHOD_process

process

Set this property with @ref AQFINTS_TanMethod_SetProcess(), get it with @ref AQFINTS_TanMethod_GetProcess().

@anchor AQFINTS_TANMETHOD_methodId

methodId

Set this property with @ref AQFINTS_TanMethod_SetMethodId(), get it with @ref AQFINTS_TanMethod_GetMethodId().

@anchor AQFINTS_TANMETHOD_zkaTanName

zkaTanName

Set this property with @ref AQFINTS_TanMethod_SetZkaTanName(), get it with @ref AQFINTS_TanMethod_GetZkaTanName().

@anchor AQFINTS_TANMETHOD_zkaTanVersion

zkaTanVersion

Set this property with @ref AQFINTS_TanMethod_SetZkaTanVersion(), get it with @ref AQFINTS_TanMethod_GetZkaTanVersion().

@anchor AQFINTS_TANMETHOD_methodName

methodName

Set this property with @ref AQFINTS_TanMethod_SetMethodName(), get it with @ref AQFINTS_TanMethod_GetMethodName().

@anchor AQFINTS_TANMETHOD_tanMaxLen

tanMaxLen

Set this property with @ref AQFINTS_TanMethod_SetTanMaxLen(), get it with @ref AQFINTS_TanMethod_GetTanMaxLen().

@anchor AQFINTS_TANMETHOD_formatId

formatId

1: numeric, 2: alphanumeric

Set this property with @ref AQFINTS_TanMethod_SetFormatId(), get it with @ref AQFINTS_TanMethod_GetFormatId().

@anchor AQFINTS_TANMETHOD_prompt

prompt

Set this property with @ref AQFINTS_TanMethod_SetPrompt(), get it with @ref AQFINTS_TanMethod_GetPrompt().

@anchor AQFINTS_TANMETHOD_returnMaxLen

returnMaxLen

Set this property with @ref AQFINTS_TanMethod_SetReturnMaxLen(), get it with @ref AQFINTS_TanMethod_GetReturnMaxLen().

@anchor AQFINTS_TANMETHOD_maxActiveLists

maxActiveLists

Set this property with @ref AQFINTS_TanMethod_SetMaxActiveLists(), get it with @ref AQFINTS_TanMethod_GetMaxActiveLists().

@anchor AQFINTS_TANMETHOD_timeShiftAllowed

timeShiftAllowed

1: not allowed, 2: allowed, 3: both supported

Set this property with @ref AQFINTS_TanMethod_SetTimeShiftAllowed(), get it with @ref AQFINTS_TanMethod_GetTimeShiftAllowed().

@anchor AQFINTS_TANMETHOD_tanListMode

tanListMode

Set this property with @ref AQFINTS_TanMethod_SetTanListMode(), get it with @ref AQFINTS_TanMethod_GetTanListMode().

@anchor AQFINTS_TANMETHOD_needSmsAccount

needSmsAccount

0: must not be given, 1: may be given, 2: must be given

Set this property with @ref AQFINTS_TanMethod_SetNeedSmsAccount(), get it with @ref AQFINTS_TanMethod_GetNeedSmsAccount().

@anchor AQFINTS_TANMETHOD_needLocalAccount

needLocalAccount

0: must not be given, 2: must be given

Set this property with @ref AQFINTS_TanMethod_SetNeedLocalAccount(), get it with @ref AQFINTS_TanMethod_GetNeedLocalAccount().

@anchor AQFINTS_TANMETHOD_initMode

initMode

00: PIN without TAN, 01: HHD template 01, 02: reserved

Set this property with @ref AQFINTS_TanMethod_SetInitMode(), get it with @ref AQFINTS_TanMethod_GetInitMode().

@anchor AQFINTS_TANMETHOD_needTanMediumId

needTanMediumId

0: must not be given, 1: may be given, 2: must be given

Set this property with @ref AQFINTS_TanMethod_SetNeedTanMediumId(), get it with @ref AQFINTS_TanMethod_GetNeedTanMediumId().

@anchor AQFINTS_TANMETHOD_maxActiveTanMedia

maxActiveTanMedia

Set this property with @ref AQFINTS_TanMethod_SetMaxActiveTanMedia(), get it with @ref AQFINTS_TanMethod_GetMaxActiveTanMedia().

@anchor AQFINTS_TANMETHOD_runtimeFlags

runtimeFlags

Set this property with @ref AQFINTS_TanMethod_SetRuntimeFlags(), get it with @ref AQFINTS_TanMethod_GetRuntimeFlags().

*/ /* define AQFINTS_TANMETHOD_RTFLAGS */ /* define AQFINTS_TANMETHOD_FLAGS */ #define AQFINTS_TANMETHOD_FLAGS_MULTITAN_ALLOWED 0x00000001 #define AQFINTS_TANMETHOD_FLAGS_STORNO_ALLOWED 0x00000002 #define AQFINTS_TANMETHOD_FLAGS_NEED_CHALLENGE_CLASS 0x00000004 #define AQFINTS_TANMETHOD_FLAGS_CHALLENGE_IS_STRUCTURED 0x00000008 #define AQFINTS_TANMETHOD_FLAGS_NEED_HHDUC 0x00000010 /* needed system headers */ #include #include #include /* pre-headers */ #include typedef struct AQFINTS_TANMETHOD AQFINTS_TANMETHOD; GWEN_LIST_FUNCTION_DEFS(AQFINTS_TANMETHOD, AQFINTS_TanMethod) /* post-headers */ /** Constructor. */ AQFINTS_TANMETHOD *AQFINTS_TanMethod_new(void); /** Destructor. */ void AQFINTS_TanMethod_free(AQFINTS_TANMETHOD *p_struct); void AQFINTS_TanMethod_Attach(AQFINTS_TANMETHOD *p_struct); AQFINTS_TANMETHOD *AQFINTS_TanMethod_dup(const AQFINTS_TANMETHOD *p_src); AQFINTS_TANMETHOD *AQFINTS_TanMethod_copy(AQFINTS_TANMETHOD *p_struct, const AQFINTS_TANMETHOD *p_src); /** Getter. * Use this function to get the member "flags" (see @ref AQFINTS_TANMETHOD_flags) */ uint32_t AQFINTS_TanMethod_GetFlags(const AQFINTS_TANMETHOD *p_struct); /** Getter. * Use this function to get the member "function" (see @ref AQFINTS_TANMETHOD_function) */ int AQFINTS_TanMethod_GetFunction(const AQFINTS_TANMETHOD *p_struct); /** Getter. * Use this function to get the member "process" (see @ref AQFINTS_TANMETHOD_process) */ int AQFINTS_TanMethod_GetProcess(const AQFINTS_TANMETHOD *p_struct); /** Getter. * Use this function to get the member "methodId" (see @ref AQFINTS_TANMETHOD_methodId) */ const char *AQFINTS_TanMethod_GetMethodId(const AQFINTS_TANMETHOD *p_struct); /** Getter. * Use this function to get the member "zkaTanName" (see @ref AQFINTS_TANMETHOD_zkaTanName) */ const char *AQFINTS_TanMethod_GetZkaTanName(const AQFINTS_TANMETHOD *p_struct); /** Getter. * Use this function to get the member "zkaTanVersion" (see @ref AQFINTS_TANMETHOD_zkaTanVersion) */ const char *AQFINTS_TanMethod_GetZkaTanVersion(const AQFINTS_TANMETHOD *p_struct); /** Getter. * Use this function to get the member "methodName" (see @ref AQFINTS_TANMETHOD_methodName) */ const char *AQFINTS_TanMethod_GetMethodName(const AQFINTS_TANMETHOD *p_struct); /** Getter. * Use this function to get the member "tanMaxLen" (see @ref AQFINTS_TANMETHOD_tanMaxLen) */ int AQFINTS_TanMethod_GetTanMaxLen(const AQFINTS_TANMETHOD *p_struct); /** Getter. * Use this function to get the member "formatId" (see @ref AQFINTS_TANMETHOD_formatId) */ int AQFINTS_TanMethod_GetFormatId(const AQFINTS_TANMETHOD *p_struct); /** Getter. * Use this function to get the member "prompt" (see @ref AQFINTS_TANMETHOD_prompt) */ const char *AQFINTS_TanMethod_GetPrompt(const AQFINTS_TANMETHOD *p_struct); /** Getter. * Use this function to get the member "returnMaxLen" (see @ref AQFINTS_TANMETHOD_returnMaxLen) */ int AQFINTS_TanMethod_GetReturnMaxLen(const AQFINTS_TANMETHOD *p_struct); /** Getter. * Use this function to get the member "maxActiveLists" (see @ref AQFINTS_TANMETHOD_maxActiveLists) */ int AQFINTS_TanMethod_GetMaxActiveLists(const AQFINTS_TANMETHOD *p_struct); /** Getter. * Use this function to get the member "timeShiftAllowed" (see @ref AQFINTS_TANMETHOD_timeShiftAllowed) */ int AQFINTS_TanMethod_GetTimeShiftAllowed(const AQFINTS_TANMETHOD *p_struct); /** Getter. * Use this function to get the member "tanListMode" (see @ref AQFINTS_TANMETHOD_tanListMode) */ int AQFINTS_TanMethod_GetTanListMode(const AQFINTS_TANMETHOD *p_struct); /** Getter. * Use this function to get the member "needSmsAccount" (see @ref AQFINTS_TANMETHOD_needSmsAccount) */ int AQFINTS_TanMethod_GetNeedSmsAccount(const AQFINTS_TANMETHOD *p_struct); /** Getter. * Use this function to get the member "needLocalAccount" (see @ref AQFINTS_TANMETHOD_needLocalAccount) */ int AQFINTS_TanMethod_GetNeedLocalAccount(const AQFINTS_TANMETHOD *p_struct); /** Getter. * Use this function to get the member "initMode" (see @ref AQFINTS_TANMETHOD_initMode) */ const char *AQFINTS_TanMethod_GetInitMode(const AQFINTS_TANMETHOD *p_struct); /** Getter. * Use this function to get the member "needTanMediumId" (see @ref AQFINTS_TANMETHOD_needTanMediumId) */ int AQFINTS_TanMethod_GetNeedTanMediumId(const AQFINTS_TANMETHOD *p_struct); /** Getter. * Use this function to get the member "maxActiveTanMedia" (see @ref AQFINTS_TANMETHOD_maxActiveTanMedia) */ int AQFINTS_TanMethod_GetMaxActiveTanMedia(const AQFINTS_TANMETHOD *p_struct); /** Getter. * Use this function to get the member "runtimeFlags" (see @ref AQFINTS_TANMETHOD_runtimeFlags) */ uint32_t AQFINTS_TanMethod_GetRuntimeFlags(const AQFINTS_TANMETHOD *p_struct); /** Setter. * Use this function to set the member "flags" (see @ref AQFINTS_TANMETHOD_flags) */ void AQFINTS_TanMethod_SetFlags(AQFINTS_TANMETHOD *p_struct, uint32_t p_src); /** Add flags. * Use this function to add flags to member "flags" (see @ref AQFINTS_TANMETHOD_flags) */ void AQFINTS_TanMethod_AddFlags(AQFINTS_TANMETHOD *p_struct, uint32_t p_src); /** Add flags. * Use this function to add flags to member "flags" (see @ref AQFINTS_TANMETHOD_flags) */ void AQFINTS_TanMethod_SubFlags(AQFINTS_TANMETHOD *p_struct, uint32_t p_src); /** Setter. * Use this function to set the member "function" (see @ref AQFINTS_TANMETHOD_function) */ void AQFINTS_TanMethod_SetFunction(AQFINTS_TANMETHOD *p_struct, int p_src); /** Setter. * Use this function to set the member "process" (see @ref AQFINTS_TANMETHOD_process) */ void AQFINTS_TanMethod_SetProcess(AQFINTS_TANMETHOD *p_struct, int p_src); /** Setter. * Use this function to set the member "methodId" (see @ref AQFINTS_TANMETHOD_methodId) */ void AQFINTS_TanMethod_SetMethodId(AQFINTS_TANMETHOD *p_struct, const char *p_src); /** Setter. * Use this function to set the member "zkaTanName" (see @ref AQFINTS_TANMETHOD_zkaTanName) */ void AQFINTS_TanMethod_SetZkaTanName(AQFINTS_TANMETHOD *p_struct, const char *p_src); /** Setter. * Use this function to set the member "zkaTanVersion" (see @ref AQFINTS_TANMETHOD_zkaTanVersion) */ void AQFINTS_TanMethod_SetZkaTanVersion(AQFINTS_TANMETHOD *p_struct, const char *p_src); /** Setter. * Use this function to set the member "methodName" (see @ref AQFINTS_TANMETHOD_methodName) */ void AQFINTS_TanMethod_SetMethodName(AQFINTS_TANMETHOD *p_struct, const char *p_src); /** Setter. * Use this function to set the member "tanMaxLen" (see @ref AQFINTS_TANMETHOD_tanMaxLen) */ void AQFINTS_TanMethod_SetTanMaxLen(AQFINTS_TANMETHOD *p_struct, int p_src); /** Setter. * Use this function to set the member "formatId" (see @ref AQFINTS_TANMETHOD_formatId) */ void AQFINTS_TanMethod_SetFormatId(AQFINTS_TANMETHOD *p_struct, int p_src); /** Setter. * Use this function to set the member "prompt" (see @ref AQFINTS_TANMETHOD_prompt) */ void AQFINTS_TanMethod_SetPrompt(AQFINTS_TANMETHOD *p_struct, const char *p_src); /** Setter. * Use this function to set the member "returnMaxLen" (see @ref AQFINTS_TANMETHOD_returnMaxLen) */ void AQFINTS_TanMethod_SetReturnMaxLen(AQFINTS_TANMETHOD *p_struct, int p_src); /** Setter. * Use this function to set the member "maxActiveLists" (see @ref AQFINTS_TANMETHOD_maxActiveLists) */ void AQFINTS_TanMethod_SetMaxActiveLists(AQFINTS_TANMETHOD *p_struct, int p_src); /** Setter. * Use this function to set the member "timeShiftAllowed" (see @ref AQFINTS_TANMETHOD_timeShiftAllowed) */ void AQFINTS_TanMethod_SetTimeShiftAllowed(AQFINTS_TANMETHOD *p_struct, int p_src); /** Setter. * Use this function to set the member "tanListMode" (see @ref AQFINTS_TANMETHOD_tanListMode) */ void AQFINTS_TanMethod_SetTanListMode(AQFINTS_TANMETHOD *p_struct, int p_src); /** Setter. * Use this function to set the member "needSmsAccount" (see @ref AQFINTS_TANMETHOD_needSmsAccount) */ void AQFINTS_TanMethod_SetNeedSmsAccount(AQFINTS_TANMETHOD *p_struct, int p_src); /** Setter. * Use this function to set the member "needLocalAccount" (see @ref AQFINTS_TANMETHOD_needLocalAccount) */ void AQFINTS_TanMethod_SetNeedLocalAccount(AQFINTS_TANMETHOD *p_struct, int p_src); /** Setter. * Use this function to set the member "initMode" (see @ref AQFINTS_TANMETHOD_initMode) */ void AQFINTS_TanMethod_SetInitMode(AQFINTS_TANMETHOD *p_struct, const char *p_src); /** Setter. * Use this function to set the member "needTanMediumId" (see @ref AQFINTS_TANMETHOD_needTanMediumId) */ void AQFINTS_TanMethod_SetNeedTanMediumId(AQFINTS_TANMETHOD *p_struct, int p_src); /** Setter. * Use this function to set the member "maxActiveTanMedia" (see @ref AQFINTS_TANMETHOD_maxActiveTanMedia) */ void AQFINTS_TanMethod_SetMaxActiveTanMedia(AQFINTS_TANMETHOD *p_struct, int p_src); /** Setter. * Use this function to set the member "runtimeFlags" (see @ref AQFINTS_TANMETHOD_runtimeFlags) */ void AQFINTS_TanMethod_SetRuntimeFlags(AQFINTS_TANMETHOD *p_struct, uint32_t p_src); /** Add flags. * Use this function to add flags to member "runtimeFlags" (see @ref AQFINTS_TANMETHOD_runtimeFlags) */ void AQFINTS_TanMethod_AddRuntimeFlags(AQFINTS_TANMETHOD *p_struct, uint32_t p_src); /** Add flags. * Use this function to add flags to member "runtimeFlags" (see @ref AQFINTS_TANMETHOD_runtimeFlags) */ void AQFINTS_TanMethod_SubRuntimeFlags(AQFINTS_TANMETHOD *p_struct, uint32_t p_src); AQFINTS_TANMETHOD_LIST *AQFINTS_TanMethod_List_dup(const AQFINTS_TANMETHOD_LIST *p_src); void AQFINTS_TanMethod_ReadDb(AQFINTS_TANMETHOD *p_struct, GWEN_DB_NODE *p_db); int AQFINTS_TanMethod_WriteDb(const AQFINTS_TANMETHOD *p_struct, GWEN_DB_NODE *p_db); AQFINTS_TANMETHOD *AQFINTS_TanMethod_fromDb(GWEN_DB_NODE *p_db); int AQFINTS_TanMethod_toDb(const AQFINTS_TANMETHOD *p_struct, GWEN_DB_NODE *p_db); AQFINTS_TANMETHOD *AQFINTS_TanMethod_List_GetByFunction(const AQFINTS_TANMETHOD_LIST *p_list, int p_cmp); #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/service/bpd/bpd_write.c0000664000175000017500000003452414044534775025533 00000000000000/*************************************************************************** begin : Sat Augl 03 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "libaqfints/service/bpd/bpd_read.h" #include "libaqfints/aqfints.h" #include "libaqfints/service/bpd/bpd.h" #include /* ------------------------------------------------------------------------------------------------ * forward declarations * ------------------------------------------------------------------------------------------------ */ static AQFINTS_SEGMENT *_mkSegBankData(AQFINTS_PARSER *parser, int hbciVersion, const AQFINTS_BANKDATA *bankData); static AQFINTS_SEGMENT *_mkSegBankAddr(AQFINTS_PARSER *parser, int hbciVersion, const AQFINTS_BPDADDR *bpdAddr); static AQFINTS_SEGMENT *_mkSegTanInfo(AQFINTS_PARSER *parser, int hbciVersion, const AQFINTS_TANINFO *tanInfo); static AQFINTS_SEGMENT *_mkSegBpdJob(AQFINTS_PARSER *parser, int hbciVersion, const AQFINTS_BPDJOB *bpdJob); static AQFINTS_SEGMENT *_mkSegBankSecProfiles(AQFINTS_PARSER *parser, int hbciVersion, const AQFINTS_BPD_SECPROFILE_LIST *secProfileList); /* ------------------------------------------------------------------------------------------------ * implementations * ------------------------------------------------------------------------------------------------ */ int AQFINTS_Bpd_Write(const AQFINTS_BPD *bpd, AQFINTS_PARSER *parser, int hbciVersion, int refSegNum, AQFINTS_SEGMENT_LIST *segmentList) { AQFINTS_BANKDATA *bankData; AQFINTS_BPDADDR_LIST *addrList; AQFINTS_TANINFO *tanInfo; AQFINTS_BPDJOB_LIST *bpdJobList; AQFINTS_BPD_SECPROFILE_LIST *secProfileList; bankData=AQFINTS_Bpd_GetBankData(bpd); if (bankData) { AQFINTS_SEGMENT *segment; segment=_mkSegBankData(parser, hbciVersion, bankData); if (segment==NULL) { DBG_ERROR(AQFINTS_LOGDOMAIN, "here"); return GWEN_ERROR_GENERIC; } AQFINTS_Segment_SetRefSegmentNumber(segment, refSegNum); AQFINTS_Segment_List_Add(segment, segmentList); } addrList=AQFINTS_Bpd_GetAddresses(bpd); if (addrList) { AQFINTS_BPDADDR *bpdAddr; bpdAddr=AQFINTS_BpdAddr_List_First(addrList); while (bpdAddr) { AQFINTS_SEGMENT *segment; segment=_mkSegBankAddr(parser, hbciVersion, bpdAddr); if (segment==NULL) { DBG_ERROR(AQFINTS_LOGDOMAIN, "here"); return GWEN_ERROR_GENERIC; } AQFINTS_Segment_SetRefSegmentNumber(segment, refSegNum); AQFINTS_Segment_List_Add(segment, segmentList); bpdAddr=AQFINTS_BpdAddr_List_Next(bpdAddr); } } secProfileList=AQFINTS_Bpd_GetSecurityProfiles(bpd); if (secProfileList) { AQFINTS_SEGMENT *segment; segment=_mkSegBankSecProfiles(parser, hbciVersion, secProfileList); if (segment==NULL) { DBG_ERROR(AQFINTS_LOGDOMAIN, "here"); return GWEN_ERROR_GENERIC; } AQFINTS_Segment_SetRefSegmentNumber(segment, refSegNum); AQFINTS_Segment_List_Add(segment, segmentList); } tanInfo=AQFINTS_Bpd_GetTanInfo(bpd); if (tanInfo) { AQFINTS_SEGMENT *segment; segment=_mkSegTanInfo(parser, hbciVersion, tanInfo); if (segment==NULL) { DBG_ERROR(AQFINTS_LOGDOMAIN, "here"); return GWEN_ERROR_GENERIC; } AQFINTS_Segment_SetRefSegmentNumber(segment, refSegNum); AQFINTS_Segment_List_Add(segment, segmentList); } bpdJobList=AQFINTS_Bpd_GetBpdJobs(bpd); if (bpdJobList) { AQFINTS_BPDJOB *bpdJob; bpdJob=AQFINTS_BpdJob_List_First(bpdJobList); while (bpdJob) { AQFINTS_SEGMENT *segment; segment=_mkSegBpdJob(parser, hbciVersion, bpdJob); if (segment==NULL) { DBG_ERROR(AQFINTS_LOGDOMAIN, "here"); return GWEN_ERROR_GENERIC; } AQFINTS_Segment_SetRefSegmentNumber(segment, refSegNum); AQFINTS_Segment_List_Add(segment, segmentList); bpdJob=AQFINTS_BpdJob_List_Next(bpdJob); } } else { DBG_ERROR(AQFINTS_LOGDOMAIN, "No BPD jobs"); } return 0; } AQFINTS_SEGMENT *_mkSegBankData(AQFINTS_PARSER *parser, int hbciVersion, const AQFINTS_BANKDATA *bankData) { AQFINTS_SEGMENT *defSegment; AQFINTS_SEGMENT *segment; GWEN_DB_NODE *dbSegment; GWEN_DB_NODE *dbGroup; const char *s; int i; defSegment=AQFINTS_Parser_FindSegmentHighestVersionForProto(parser, "HIBPA", hbciVersion); if (defSegment==NULL) { DBG_ERROR(0, "No matching definition segment found for HIBPA (proto=%d)", hbciVersion); return NULL; } segment=AQFINTS_Segment_new(); AQFINTS_Segment_copy(segment, defSegment); dbSegment=GWEN_DB_Group_new("bankData"); AQFINTS_Segment_SetDbData(segment, dbSegment); i=AQFINTS_BankData_GetVersion(bankData); GWEN_DB_SetIntValue(dbSegment, GWEN_DB_FLAGS_OVERWRITE_VARS, "version", i); i=AQFINTS_BankData_GetCountry(bankData); GWEN_DB_SetIntValue(dbSegment, GWEN_DB_FLAGS_OVERWRITE_VARS, "country", i); s=AQFINTS_BankData_GetBankCode(bankData); if (s) GWEN_DB_SetCharValue(dbSegment, GWEN_DB_FLAGS_OVERWRITE_VARS, "bankCode", s); s=AQFINTS_BankData_GetBankName(bankData); if (s) GWEN_DB_SetCharValue(dbSegment, GWEN_DB_FLAGS_OVERWRITE_VARS, "name", s); i=AQFINTS_BankData_GetJobTypesPerMsg(bankData); GWEN_DB_SetIntValue(dbSegment, GWEN_DB_FLAGS_OVERWRITE_VARS, "jobTypesPerMsg", i); i=AQFINTS_BankData_GetMaxMsgSize(bankData); if (i>0) GWEN_DB_SetIntValue(dbSegment, GWEN_DB_FLAGS_OVERWRITE_VARS, "maxMsgSize", i); i=AQFINTS_BankData_GetMinTimeout(bankData); if (i>0) GWEN_DB_SetIntValue(dbSegment, GWEN_DB_FLAGS_OVERWRITE_VARS, "minTimeout", i); i=AQFINTS_BankData_GetMaxTimeout(bankData); if (i>0) GWEN_DB_SetIntValue(dbSegment, GWEN_DB_FLAGS_OVERWRITE_VARS, "maxTimeout", i); dbGroup=GWEN_DB_GetGroup(dbSegment, GWEN_DB_FLAGS_OVERWRITE_GROUPS, "languages"); assert(dbGroup); for (i=0; i<9; i++) { int v; v=AQFINTS_BankData_GetLanguagesAt(bankData, i); if (v<1) break; GWEN_DB_SetIntValue(dbGroup, 0, "language", v); } if (i==0) GWEN_DB_SetIntValue(dbGroup, GWEN_DB_FLAGS_OVERWRITE_VARS, "language", 1); dbGroup=GWEN_DB_GetGroup(dbSegment, GWEN_DB_FLAGS_OVERWRITE_GROUPS, "versions"); assert(dbGroup); for (i=0; i<9; i++) { int v; v=AQFINTS_BankData_GetHbciVersionsAt(bankData, i); if (v<1) break; GWEN_DB_SetIntValue(dbGroup, 0, "version", v); } if (i==0) GWEN_DB_SetIntValue(dbGroup, GWEN_DB_FLAGS_OVERWRITE_VARS, "version", 300); return segment; } AQFINTS_SEGMENT *_mkSegBankAddr(AQFINTS_PARSER *parser, int hbciVersion, const AQFINTS_BPDADDR *bpdAddr) { AQFINTS_SEGMENT *defSegment; AQFINTS_SEGMENT *segment; GWEN_DB_NODE *dbSegment; AQFINTS_BPDADDR_SERVICE_LIST *serviceList; const char *s; int i; defSegment=AQFINTS_Parser_FindSegmentHighestVersionForProto(parser, "HIKOM", hbciVersion); if (defSegment==NULL) { DBG_ERROR(0, "No matching definition segment found for HIKOM (proto=%d)", hbciVersion); return NULL; } segment=AQFINTS_Segment_new(); AQFINTS_Segment_copy(segment, defSegment); dbSegment=GWEN_DB_Group_new("bpdAddr"); AQFINTS_Segment_SetDbData(segment, dbSegment); i=AQFINTS_BpdAddr_GetCountry(bpdAddr); GWEN_DB_SetIntValue(dbSegment, GWEN_DB_FLAGS_OVERWRITE_VARS, "country", i); s=AQFINTS_BpdAddr_GetBankCode(bpdAddr); if (s) GWEN_DB_SetCharValue(dbSegment, GWEN_DB_FLAGS_OVERWRITE_VARS, "bankCode", s); i=AQFINTS_BpdAddr_GetLanguage(bpdAddr); GWEN_DB_SetIntValue(dbSegment, GWEN_DB_FLAGS_OVERWRITE_VARS, "language", i); serviceList=AQFINTS_BpdAddr_GetServices(bpdAddr); if (serviceList) { AQFINTS_BPDADDR_SERVICE *service; service=AQFINTS_BpdAddrService_List_First(serviceList); while (service) { GWEN_DB_NODE *dbService; dbService=GWEN_DB_GetGroup(dbSegment, GWEN_PATH_FLAGS_CREATE_GROUP, "service"); i=AQFINTS_BpdAddrService_GetType(service); GWEN_DB_SetIntValue(dbService, GWEN_DB_FLAGS_OVERWRITE_VARS, "type", i); s=AQFINTS_BpdAddrService_GetAddress(service); if (s) GWEN_DB_SetCharValue(dbService, GWEN_DB_FLAGS_OVERWRITE_VARS, "address", s); s=AQFINTS_BpdAddrService_GetSuffix(service); if (s) GWEN_DB_SetCharValue(dbService, GWEN_DB_FLAGS_OVERWRITE_VARS, "suffix", s); s=AQFINTS_BpdAddrService_GetFilter(service); if (s) { GWEN_DB_SetCharValue(dbService, GWEN_DB_FLAGS_OVERWRITE_VARS, "filter", s); i=AQFINTS_BpdAddrService_GetFilterVersion(service); GWEN_DB_SetIntValue(dbService, GWEN_DB_FLAGS_OVERWRITE_VARS, "filterVersion", i); } service=AQFINTS_BpdAddrService_List_Next(service); } /* while */ } return segment; } AQFINTS_SEGMENT *_mkSegTanInfo(AQFINTS_PARSER *parser, int hbciVersion, const AQFINTS_TANINFO *tanInfo) { AQFINTS_SEGMENT *defSegment; AQFINTS_SEGMENT *segment; GWEN_DB_NODE *dbSegment; AQFINTS_TANJOBINFO_LIST *tanJobList; const char *s; int i; defSegment=AQFINTS_Parser_FindSegmentHighestVersionForProto(parser, "HIPINS", hbciVersion); if (defSegment==NULL) { DBG_ERROR(0, "No matching definition segment found for HIPINS (proto=%d)", hbciVersion); return NULL; } segment=AQFINTS_Segment_new(); AQFINTS_Segment_copy(segment, defSegment); dbSegment=GWEN_DB_Group_new("tanInfo"); AQFINTS_Segment_SetDbData(segment, dbSegment); i=AQFINTS_TanInfo_GetJobsPerMsg(tanInfo); GWEN_DB_SetIntValue(dbSegment, GWEN_DB_FLAGS_OVERWRITE_VARS, "jobsPerMsg", i); i=AQFINTS_TanInfo_GetMinSigs(tanInfo); GWEN_DB_SetIntValue(dbSegment, GWEN_DB_FLAGS_OVERWRITE_VARS, "minSigs", i); i=AQFINTS_TanInfo_GetSecurityClass(tanInfo); if (i) GWEN_DB_SetIntValue(dbSegment, GWEN_DB_FLAGS_OVERWRITE_VARS, "securityClass", i); i=AQFINTS_TanInfo_GetMinPinLen(tanInfo); if (i) GWEN_DB_SetIntValue(dbSegment, GWEN_DB_FLAGS_OVERWRITE_VARS, "minPinLen", i); i=AQFINTS_TanInfo_GetMaxPinLen(tanInfo); if (i) GWEN_DB_SetIntValue(dbSegment, GWEN_DB_FLAGS_OVERWRITE_VARS, "maxPinLen", i); i=AQFINTS_TanInfo_GetMaxTanLen(tanInfo); if (i) GWEN_DB_SetIntValue(dbSegment, GWEN_DB_FLAGS_OVERWRITE_VARS, "maxTanLen", i); s=AQFINTS_TanInfo_GetUserIdText(tanInfo); if (s) GWEN_DB_SetCharValue(dbSegment, GWEN_DB_FLAGS_OVERWRITE_VARS, "userIdText", s); s=AQFINTS_TanInfo_GetCustomerIdText(tanInfo); if (s) GWEN_DB_SetCharValue(dbSegment, GWEN_DB_FLAGS_OVERWRITE_VARS, "customerIdText", s); tanJobList=AQFINTS_TanInfo_GetTanJobInfoList(tanInfo); if (tanJobList) { AQFINTS_TANJOBINFO *tanJob; tanJob=AQFINTS_TanJobInfo_List_First(tanJobList); while (tanJob) { GWEN_DB_NODE *dbTanJob; dbTanJob=GWEN_DB_GetGroup(dbSegment, GWEN_PATH_FLAGS_CREATE_GROUP, "job"); s=AQFINTS_TanJobInfo_GetCode(tanJob); if (s) { GWEN_DB_SetCharValue(dbTanJob, GWEN_DB_FLAGS_OVERWRITE_VARS, "code", s); GWEN_DB_SetCharValue(dbTanJob, GWEN_DB_FLAGS_OVERWRITE_VARS, "needTan", (AQFINTS_TanJobInfo_GetFlags(tanJob) & AQFINTS_TANJOBINFO_FLAGS_NEEDTAN)?"J":"N"); } tanJob=AQFINTS_TanJobInfo_List_Next(tanJob); } /* while */ } return segment; } AQFINTS_SEGMENT *_mkSegBpdJob(AQFINTS_PARSER *parser, int hbciVersion, const AQFINTS_BPDJOB *bpdJob) { AQFINTS_SEGMENT *defSegment; AQFINTS_SEGMENT *segment; GWEN_DB_NODE *dbSegment; GWEN_DB_NODE *dbSettings; const char *segCode; int segVersion; int i; segCode=AQFINTS_BpdJob_GetCode(bpdJob); if (!(segCode && *segCode)) { DBG_ERROR(AQFINTS_LOGDOMAIN, "BPD job has no code (proto=%d), internal error", hbciVersion); return NULL; } segVersion=AQFINTS_BpdJob_GetVersion(bpdJob); if (segVersion<1) { DBG_ERROR(AQFINTS_LOGDOMAIN, "BPD job \"%s\" has no version (proto=%d), internal error", segCode, hbciVersion); return NULL; } defSegment=AQFINTS_Parser_FindSegmentByCode(parser, segCode, segVersion, 0); if (defSegment==NULL) { DBG_ERROR(AQFINTS_LOGDOMAIN, "No matching definition segment found for %s (proto=%d)", segCode, hbciVersion); return NULL; } segment=AQFINTS_Segment_new(); AQFINTS_Segment_copy(segment, defSegment); dbSettings=AQFINTS_BpdJob_GetSettings(bpdJob); if (dbSettings) dbSegment=GWEN_DB_Group_dup(dbSettings); else dbSegment=GWEN_DB_Group_new("tanInfo"); AQFINTS_Segment_SetDbData(segment, dbSegment); i=AQFINTS_BpdJob_GetJobsPerMsg(bpdJob); GWEN_DB_SetIntValue(dbSegment, GWEN_DB_FLAGS_OVERWRITE_VARS, "jobspermsg", i); i=AQFINTS_BpdJob_GetMinSigs(bpdJob); GWEN_DB_SetIntValue(dbSegment, GWEN_DB_FLAGS_OVERWRITE_VARS, "minsigs", i); i=AQFINTS_BpdJob_GetSecurityClass(bpdJob); GWEN_DB_SetIntValue(dbSegment, GWEN_DB_FLAGS_OVERWRITE_VARS, "securityClass", i); return segment; } AQFINTS_SEGMENT *_mkSegBankSecProfiles(AQFINTS_PARSER *parser, int hbciVersion, const AQFINTS_BPD_SECPROFILE_LIST *secProfileList) { AQFINTS_SEGMENT *defSegment; AQFINTS_SEGMENT *segment; GWEN_DB_NODE *dbSegment; AQFINTS_BPD_SECPROFILE *secProfile; defSegment=AQFINTS_Parser_FindSegmentHighestVersionForProto(parser, "HISHV", hbciVersion); if (defSegment==NULL) { DBG_ERROR(0, "No matching definition segment found for HISHV (proto=%d)", hbciVersion); return NULL; } segment=AQFINTS_Segment_new(); AQFINTS_Segment_copy(segment, defSegment); dbSegment=GWEN_DB_Group_new("bpdSecProfile"); AQFINTS_Segment_SetDbData(segment, dbSegment); GWEN_DB_SetCharValue(dbSegment, GWEN_DB_FLAGS_OVERWRITE_VARS, "mixingAllowed", "J"); secProfile=AQFINTS_BpdSecProfile_List_First(secProfileList); while (secProfile) { GWEN_DB_NODE *dbSecProfile; const char *s; int i; dbSecProfile=GWEN_DB_GetGroup(dbSegment, GWEN_PATH_FLAGS_CREATE_GROUP, "secProfile"); s=AQFINTS_BpdSecProfile_GetCode(secProfile); if (s) GWEN_DB_SetCharValue(dbSecProfile, GWEN_DB_FLAGS_OVERWRITE_VARS, "code", s); for (i=0; i<9; i++) { int v; v=AQFINTS_BpdSecProfile_GetVersionsAt(secProfile, i); if (v<1) break; GWEN_DB_SetIntValue(dbSecProfile, 0, "versions", v); } secProfile=AQFINTS_BpdSecProfile_List_Next(secProfile); } return segment; } aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/service/bpd/bpdaddr.xml0000664000175000017500000000532014044534775025522 00000000000000 AQFINTS_BPDADDR AQFINTS_BpdAddr bpdaddr with_db with_list1 with_refcount
libaqfints/aqfints.h
string.h
libaqfints/service/bpd/bpdaddrservice.h
$(api) void $(struct_prefix)_AddService($(struct_type) *st, AQFINTS_BPDADDR_SERVICE *srv); void $(struct_prefix)_AddService($(struct_type) *st, AQFINTS_BPDADDR_SERVICE *srv) { if (st->services==NULL) st->services=AQFINTS_BpdAddrService_List_new(); AQFINTS_BpdAddrService_List_Add(srv, st->services); }
0 0 public NULL NULL public own const dup const 0 0 public public own none none 0 0 volatile with_flags public
aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/service/bpd/bpdaddr_p.h0000664000175000017500000000131015037736054025460 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "bpdaddr.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef AQFINTS_BPDADDR_BPDADDR_P_H #define AQFINTS_BPDADDR_BPDADDR_P_H #include "./bpdaddr.h" #ifdef __cplusplus extern "C" { #endif struct AQFINTS_BPDADDR { GWEN_LIST_ELEMENT(AQFINTS_BPDADDR) int _refCount; int country; char *bankCode; int language; AQFINTS_BPDADDR_SERVICE_LIST *services; uint32_t runtimeFlags; /* volatile */ }; #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/service/bpd/bpdaddrservice.h0000664000175000017500000001547115037736054026537 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "bpdaddrservice.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef AQFINTS_BPDADDR_SERVICE_BPDADDRSERVICE_H #define AQFINTS_BPDADDR_SERVICE_BPDADDRSERVICE_H #ifdef __cplusplus extern "C" { #endif /** @page P_AQFINTS_BPDADDR_SERVICE Structure AQFINTS_BPDADDR_SERVICE

This page describes the properties of AQFINTS_BPDADDR_SERVICE.

AQFINTS_BPDADDR_SERVICE

@anchor AQFINTS_BPDADDR_SERVICE_flags

flags

Set this property with @ref AQFINTS_BpdAddrService_SetFlags(), get it with @ref AQFINTS_BpdAddrService_GetFlags().

@anchor AQFINTS_BPDADDR_SERVICE_type

type

Set this property with @ref AQFINTS_BpdAddrService_SetType(), get it with @ref AQFINTS_BpdAddrService_GetType().

@anchor AQFINTS_BPDADDR_SERVICE_address

address

Set this property with @ref AQFINTS_BpdAddrService_SetAddress(), get it with @ref AQFINTS_BpdAddrService_GetAddress().

@anchor AQFINTS_BPDADDR_SERVICE_suffix

suffix

Set this property with @ref AQFINTS_BpdAddrService_SetSuffix(), get it with @ref AQFINTS_BpdAddrService_GetSuffix().

@anchor AQFINTS_BPDADDR_SERVICE_filter

filter

Set this property with @ref AQFINTS_BpdAddrService_SetFilter(), get it with @ref AQFINTS_BpdAddrService_GetFilter().

@anchor AQFINTS_BPDADDR_SERVICE_filterVersion

filterVersion

Set this property with @ref AQFINTS_BpdAddrService_SetFilterVersion(), get it with @ref AQFINTS_BpdAddrService_GetFilterVersion().

@anchor AQFINTS_BPDADDR_SERVICE_runtimeFlags

runtimeFlags

Set this property with @ref AQFINTS_BpdAddrService_SetRuntimeFlags(), get it with @ref AQFINTS_BpdAddrService_GetRuntimeFlags().

*/ /* define AQFINTS_BPDADDR_SERVICE_RTFLAGS */ /* define AQFINTS_BPDADDR_SERVICE_FLAGS */ /* needed system headers */ #include #include #include /* pre-headers */ #include typedef struct AQFINTS_BPDADDR_SERVICE AQFINTS_BPDADDR_SERVICE; GWEN_LIST_FUNCTION_DEFS(AQFINTS_BPDADDR_SERVICE, AQFINTS_BpdAddrService) /* post-headers */ /** Constructor. */ AQFINTS_BPDADDR_SERVICE *AQFINTS_BpdAddrService_new(void); /** Destructor. */ void AQFINTS_BpdAddrService_free(AQFINTS_BPDADDR_SERVICE *p_struct); void AQFINTS_BpdAddrService_Attach(AQFINTS_BPDADDR_SERVICE *p_struct); AQFINTS_BPDADDR_SERVICE *AQFINTS_BpdAddrService_dup(const AQFINTS_BPDADDR_SERVICE *p_src); AQFINTS_BPDADDR_SERVICE *AQFINTS_BpdAddrService_copy(AQFINTS_BPDADDR_SERVICE *p_struct, const AQFINTS_BPDADDR_SERVICE *p_src); /** Getter. * Use this function to get the member "flags" (see @ref AQFINTS_BPDADDR_SERVICE_flags) */ uint32_t AQFINTS_BpdAddrService_GetFlags(const AQFINTS_BPDADDR_SERVICE *p_struct); /** Getter. * Use this function to get the member "type" (see @ref AQFINTS_BPDADDR_SERVICE_type) */ int AQFINTS_BpdAddrService_GetType(const AQFINTS_BPDADDR_SERVICE *p_struct); /** Getter. * Use this function to get the member "address" (see @ref AQFINTS_BPDADDR_SERVICE_address) */ const char *AQFINTS_BpdAddrService_GetAddress(const AQFINTS_BPDADDR_SERVICE *p_struct); /** Getter. * Use this function to get the member "suffix" (see @ref AQFINTS_BPDADDR_SERVICE_suffix) */ const char *AQFINTS_BpdAddrService_GetSuffix(const AQFINTS_BPDADDR_SERVICE *p_struct); /** Getter. * Use this function to get the member "filter" (see @ref AQFINTS_BPDADDR_SERVICE_filter) */ const char *AQFINTS_BpdAddrService_GetFilter(const AQFINTS_BPDADDR_SERVICE *p_struct); /** Getter. * Use this function to get the member "filterVersion" (see @ref AQFINTS_BPDADDR_SERVICE_filterVersion) */ int AQFINTS_BpdAddrService_GetFilterVersion(const AQFINTS_BPDADDR_SERVICE *p_struct); /** Getter. * Use this function to get the member "runtimeFlags" (see @ref AQFINTS_BPDADDR_SERVICE_runtimeFlags) */ uint32_t AQFINTS_BpdAddrService_GetRuntimeFlags(const AQFINTS_BPDADDR_SERVICE *p_struct); /** Setter. * Use this function to set the member "flags" (see @ref AQFINTS_BPDADDR_SERVICE_flags) */ void AQFINTS_BpdAddrService_SetFlags(AQFINTS_BPDADDR_SERVICE *p_struct, uint32_t p_src); /** Add flags. * Use this function to add flags to member "flags" (see @ref AQFINTS_BPDADDR_SERVICE_flags) */ void AQFINTS_BpdAddrService_AddFlags(AQFINTS_BPDADDR_SERVICE *p_struct, uint32_t p_src); /** Add flags. * Use this function to add flags to member "flags" (see @ref AQFINTS_BPDADDR_SERVICE_flags) */ void AQFINTS_BpdAddrService_SubFlags(AQFINTS_BPDADDR_SERVICE *p_struct, uint32_t p_src); /** Setter. * Use this function to set the member "type" (see @ref AQFINTS_BPDADDR_SERVICE_type) */ void AQFINTS_BpdAddrService_SetType(AQFINTS_BPDADDR_SERVICE *p_struct, int p_src); /** Setter. * Use this function to set the member "address" (see @ref AQFINTS_BPDADDR_SERVICE_address) */ void AQFINTS_BpdAddrService_SetAddress(AQFINTS_BPDADDR_SERVICE *p_struct, const char *p_src); /** Setter. * Use this function to set the member "suffix" (see @ref AQFINTS_BPDADDR_SERVICE_suffix) */ void AQFINTS_BpdAddrService_SetSuffix(AQFINTS_BPDADDR_SERVICE *p_struct, const char *p_src); /** Setter. * Use this function to set the member "filter" (see @ref AQFINTS_BPDADDR_SERVICE_filter) */ void AQFINTS_BpdAddrService_SetFilter(AQFINTS_BPDADDR_SERVICE *p_struct, const char *p_src); /** Setter. * Use this function to set the member "filterVersion" (see @ref AQFINTS_BPDADDR_SERVICE_filterVersion) */ void AQFINTS_BpdAddrService_SetFilterVersion(AQFINTS_BPDADDR_SERVICE *p_struct, int p_src); /** Setter. * Use this function to set the member "runtimeFlags" (see @ref AQFINTS_BPDADDR_SERVICE_runtimeFlags) */ void AQFINTS_BpdAddrService_SetRuntimeFlags(AQFINTS_BPDADDR_SERVICE *p_struct, uint32_t p_src); /** Add flags. * Use this function to add flags to member "runtimeFlags" (see @ref AQFINTS_BPDADDR_SERVICE_runtimeFlags) */ void AQFINTS_BpdAddrService_AddRuntimeFlags(AQFINTS_BPDADDR_SERVICE *p_struct, uint32_t p_src); /** Add flags. * Use this function to add flags to member "runtimeFlags" (see @ref AQFINTS_BPDADDR_SERVICE_runtimeFlags) */ void AQFINTS_BpdAddrService_SubRuntimeFlags(AQFINTS_BPDADDR_SERVICE *p_struct, uint32_t p_src); AQFINTS_BPDADDR_SERVICE_LIST *AQFINTS_BpdAddrService_List_dup(const AQFINTS_BPDADDR_SERVICE_LIST *p_src); void AQFINTS_BpdAddrService_ReadDb(AQFINTS_BPDADDR_SERVICE *p_struct, GWEN_DB_NODE *p_db); int AQFINTS_BpdAddrService_WriteDb(const AQFINTS_BPDADDR_SERVICE *p_struct, GWEN_DB_NODE *p_db); AQFINTS_BPDADDR_SERVICE *AQFINTS_BpdAddrService_fromDb(GWEN_DB_NODE *p_db); int AQFINTS_BpdAddrService_toDb(const AQFINTS_BPDADDR_SERVICE *p_struct, GWEN_DB_NODE *p_db); #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/service/bpd/tanjobinfo.xml0000664000175000017500000000313114043610745026240 00000000000000 AQFINTS_TANJOBINFO AQFINTS_TanJobInfo tanjobinfo with_db with_list1 with_refcount
libaqfints/aqfints.h
string.h
0 0 with_flags public NULL NULL public own with_getbymember const dup const 0 0 volatile with_flags public
aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/service/bpd/tanjobinfo_p.h0000664000175000017500000000124515037736054026220 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "tanjobinfo.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef AQFINTS_TANJOBINFO_TANJOBINFO_P_H #define AQFINTS_TANJOBINFO_TANJOBINFO_P_H #include "./tanjobinfo.h" #ifdef __cplusplus extern "C" { #endif struct AQFINTS_TANJOBINFO { GWEN_LIST_ELEMENT(AQFINTS_TANJOBINFO) int _refCount; uint32_t flags; char *code; uint32_t runtimeFlags; /* volatile */ }; #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/service/bpd/bpd.c0000664000175000017500000004113515037736054024312 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "bpd.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "./bpd_p.h" #include #include /* code headers */ #include /* macro functions */ GWEN_LIST_FUNCTIONS(AQFINTS_BPD, AQFINTS_Bpd) AQFINTS_BPD *AQFINTS_Bpd_new(void) { AQFINTS_BPD *p_struct; GWEN_NEW_OBJECT(AQFINTS_BPD, p_struct) p_struct->_refCount=1; GWEN_LIST_INIT(AQFINTS_BPD, p_struct) /* members */ p_struct->bankData=NULL; p_struct->tanInfo=NULL; p_struct->bpdJobs=NULL; p_struct->addresses=NULL; p_struct->securityProfiles=NULL; p_struct->tanMethodList=NULL; p_struct->runtimeFlags=0; /* virtual functions */ return p_struct; } void AQFINTS_Bpd_free(AQFINTS_BPD *p_struct) { if (p_struct) { assert(p_struct->_refCount); if (p_struct->_refCount==1) { GWEN_LIST_FINI(AQFINTS_BPD, p_struct) /* members */ AQFINTS_BankData_free(p_struct->bankData); p_struct->bankData=NULL; AQFINTS_TanInfo_free(p_struct->tanInfo); p_struct->tanInfo=NULL; AQFINTS_BpdJob_List_free(p_struct->bpdJobs); p_struct->bpdJobs=NULL; AQFINTS_BpdAddr_List_free(p_struct->addresses); p_struct->addresses=NULL; AQFINTS_BpdSecProfile_List_free(p_struct->securityProfiles); p_struct->securityProfiles=NULL; AQFINTS_TanMethod_List_free(p_struct->tanMethodList); p_struct->tanMethodList=NULL; p_struct->_refCount=0; GWEN_FREE_OBJECT(p_struct); } else p_struct->_refCount--; } } void AQFINTS_Bpd_Attach(AQFINTS_BPD *p_struct) { assert(p_struct); assert(p_struct->_refCount); p_struct->_refCount++; } AQFINTS_BPD *AQFINTS_Bpd_dup(const AQFINTS_BPD *p_src) { AQFINTS_BPD *p_struct; assert(p_src); p_struct=AQFINTS_Bpd_new(); /* member "bankData" */ if (p_struct->bankData) { AQFINTS_BankData_free(p_struct->bankData); p_struct->bankData=NULL; p_struct->bankData=NULL; } if (p_src->bankData) { p_struct->bankData=AQFINTS_BankData_dup(p_src->bankData); } /* member "tanInfo" */ if (p_struct->tanInfo) { AQFINTS_TanInfo_free(p_struct->tanInfo); p_struct->tanInfo=NULL; p_struct->tanInfo=NULL; } if (p_src->tanInfo) { p_struct->tanInfo=AQFINTS_TanInfo_dup(p_src->tanInfo); } /* member "bpdJobs" */ if (p_struct->bpdJobs) { AQFINTS_BpdJob_List_free(p_struct->bpdJobs); p_struct->bpdJobs=NULL; p_struct->bpdJobs=NULL; } if (p_src->bpdJobs) { p_struct->bpdJobs=AQFINTS_BpdJob_List_dup(p_src->bpdJobs); } /* member "addresses" */ if (p_struct->addresses) { AQFINTS_BpdAddr_List_free(p_struct->addresses); p_struct->addresses=NULL; p_struct->addresses=NULL; } if (p_src->addresses) { p_struct->addresses=AQFINTS_BpdAddr_List_dup(p_src->addresses); } /* member "securityProfiles" */ if (p_struct->securityProfiles) { AQFINTS_BpdSecProfile_List_free(p_struct->securityProfiles); p_struct->securityProfiles=NULL; p_struct->securityProfiles=NULL; } if (p_src->securityProfiles) { p_struct->securityProfiles=AQFINTS_BpdSecProfile_List_dup(p_src->securityProfiles); } /* member "tanMethodList" */ if (p_struct->tanMethodList) { AQFINTS_TanMethod_List_free(p_struct->tanMethodList); p_struct->tanMethodList=NULL; p_struct->tanMethodList=NULL; } if (p_src->tanMethodList) { p_struct->tanMethodList=AQFINTS_TanMethod_List_dup(p_src->tanMethodList); } /* member "runtimeFlags" */ p_struct->runtimeFlags=p_src->runtimeFlags; return p_struct; } AQFINTS_BPD *AQFINTS_Bpd_copy(AQFINTS_BPD *p_struct, const AQFINTS_BPD *p_src) { assert(p_struct); assert(p_src); /* member "bankData" */ if (p_struct->bankData) { AQFINTS_BankData_free(p_struct->bankData); p_struct->bankData=NULL; p_struct->bankData=NULL; } if (p_src->bankData) { p_struct->bankData=AQFINTS_BankData_dup(p_src->bankData); } /* member "tanInfo" */ if (p_struct->tanInfo) { AQFINTS_TanInfo_free(p_struct->tanInfo); p_struct->tanInfo=NULL; p_struct->tanInfo=NULL; } if (p_src->tanInfo) { p_struct->tanInfo=AQFINTS_TanInfo_dup(p_src->tanInfo); } /* member "bpdJobs" */ if (p_struct->bpdJobs) { AQFINTS_BpdJob_List_free(p_struct->bpdJobs); p_struct->bpdJobs=NULL; p_struct->bpdJobs=NULL; } if (p_src->bpdJobs) { p_struct->bpdJobs=AQFINTS_BpdJob_List_dup(p_src->bpdJobs); } /* member "addresses" */ if (p_struct->addresses) { AQFINTS_BpdAddr_List_free(p_struct->addresses); p_struct->addresses=NULL; p_struct->addresses=NULL; } if (p_src->addresses) { p_struct->addresses=AQFINTS_BpdAddr_List_dup(p_src->addresses); } /* member "securityProfiles" */ if (p_struct->securityProfiles) { AQFINTS_BpdSecProfile_List_free(p_struct->securityProfiles); p_struct->securityProfiles=NULL; p_struct->securityProfiles=NULL; } if (p_src->securityProfiles) { p_struct->securityProfiles=AQFINTS_BpdSecProfile_List_dup(p_src->securityProfiles); } /* member "tanMethodList" */ if (p_struct->tanMethodList) { AQFINTS_TanMethod_List_free(p_struct->tanMethodList); p_struct->tanMethodList=NULL; p_struct->tanMethodList=NULL; } if (p_src->tanMethodList) { p_struct->tanMethodList=AQFINTS_TanMethod_List_dup(p_src->tanMethodList); } /* member "runtimeFlags" */ p_struct->runtimeFlags=p_src->runtimeFlags; return p_struct; } AQFINTS_BANKDATA *AQFINTS_Bpd_GetBankData(const AQFINTS_BPD *p_struct){ assert(p_struct); return p_struct->bankData; } AQFINTS_TANINFO *AQFINTS_Bpd_GetTanInfo(const AQFINTS_BPD *p_struct){ assert(p_struct); return p_struct->tanInfo; } AQFINTS_BPDJOB_LIST *AQFINTS_Bpd_GetBpdJobs(const AQFINTS_BPD *p_struct){ assert(p_struct); return p_struct->bpdJobs; } AQFINTS_BPDADDR_LIST *AQFINTS_Bpd_GetAddresses(const AQFINTS_BPD *p_struct){ assert(p_struct); return p_struct->addresses; } AQFINTS_BPD_SECPROFILE_LIST *AQFINTS_Bpd_GetSecurityProfiles(const AQFINTS_BPD *p_struct){ assert(p_struct); return p_struct->securityProfiles; } AQFINTS_TANMETHOD_LIST *AQFINTS_Bpd_GetTanMethodList(const AQFINTS_BPD *p_struct){ assert(p_struct); return p_struct->tanMethodList; } uint32_t AQFINTS_Bpd_GetRuntimeFlags(const AQFINTS_BPD *p_struct){ assert(p_struct); return p_struct->runtimeFlags; } void AQFINTS_Bpd_SetBankData(AQFINTS_BPD *p_struct, AQFINTS_BANKDATA *p_src){ assert(p_struct); if (p_struct->bankData) { AQFINTS_BankData_free(p_struct->bankData); p_struct->bankData=NULL; p_struct->bankData=NULL; } p_struct->bankData=p_src; } void AQFINTS_Bpd_SetTanInfo(AQFINTS_BPD *p_struct, AQFINTS_TANINFO *p_src){ assert(p_struct); if (p_struct->tanInfo) { AQFINTS_TanInfo_free(p_struct->tanInfo); p_struct->tanInfo=NULL; p_struct->tanInfo=NULL; } p_struct->tanInfo=p_src; } void AQFINTS_Bpd_SetBpdJobs(AQFINTS_BPD *p_struct, AQFINTS_BPDJOB_LIST *p_src){ assert(p_struct); if (p_struct->bpdJobs) { AQFINTS_BpdJob_List_free(p_struct->bpdJobs); p_struct->bpdJobs=NULL; p_struct->bpdJobs=NULL; } p_struct->bpdJobs=p_src; } void AQFINTS_Bpd_SetAddresses(AQFINTS_BPD *p_struct, AQFINTS_BPDADDR_LIST *p_src){ assert(p_struct); if (p_struct->addresses) { AQFINTS_BpdAddr_List_free(p_struct->addresses); p_struct->addresses=NULL; p_struct->addresses=NULL; } p_struct->addresses=p_src; } void AQFINTS_Bpd_SetSecurityProfiles(AQFINTS_BPD *p_struct, AQFINTS_BPD_SECPROFILE_LIST *p_src){ assert(p_struct); if (p_struct->securityProfiles) { AQFINTS_BpdSecProfile_List_free(p_struct->securityProfiles); p_struct->securityProfiles=NULL; p_struct->securityProfiles=NULL; } p_struct->securityProfiles=p_src; } void AQFINTS_Bpd_SetTanMethodList(AQFINTS_BPD *p_struct, AQFINTS_TANMETHOD_LIST *p_src){ assert(p_struct); if (p_struct->tanMethodList) { AQFINTS_TanMethod_List_free(p_struct->tanMethodList); p_struct->tanMethodList=NULL; p_struct->tanMethodList=NULL; } p_struct->tanMethodList=p_src; } void AQFINTS_Bpd_SetRuntimeFlags(AQFINTS_BPD *p_struct, uint32_t p_src){ assert(p_struct); p_struct->runtimeFlags=p_src; } void AQFINTS_Bpd_AddRuntimeFlags(AQFINTS_BPD *p_struct, uint32_t p_src) { assert(p_struct); p_struct->runtimeFlags|=p_src; } void AQFINTS_Bpd_SubRuntimeFlags(AQFINTS_BPD *p_struct, uint32_t p_src) { assert(p_struct); p_struct->runtimeFlags&=~p_src; } AQFINTS_BPD_LIST *AQFINTS_Bpd_List_dup(const AQFINTS_BPD_LIST *p_src) { AQFINTS_BPD_LIST *p_dest; AQFINTS_BPD *p_elem; assert(p_src); p_dest=AQFINTS_Bpd_List_new(); p_elem=AQFINTS_Bpd_List_First(p_src); while(p_elem) { AQFINTS_BPD *p_cpy; p_cpy=AQFINTS_Bpd_dup(p_elem); AQFINTS_Bpd_List_Add(p_cpy, p_dest); p_elem=AQFINTS_Bpd_List_Next(p_elem); } return p_dest; } void AQFINTS_Bpd_ReadDb(AQFINTS_BPD *p_struct, GWEN_DB_NODE *p_db){ assert(p_struct); /* member "bankData" */ if (p_struct->bankData) { AQFINTS_BankData_free(p_struct->bankData); p_struct->bankData=NULL; p_struct->bankData=NULL; } { GWEN_DB_NODE *dbSource; dbSource=GWEN_DB_GetGroup(p_db, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "bankData"); if (dbSource) p_struct->bankData=AQFINTS_BankData_fromDb(dbSource); else p_struct->bankData=NULL; } /* member "tanInfo" */ if (p_struct->tanInfo) { AQFINTS_TanInfo_free(p_struct->tanInfo); p_struct->tanInfo=NULL; p_struct->tanInfo=NULL; } { GWEN_DB_NODE *dbSource; dbSource=GWEN_DB_GetGroup(p_db, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "tanInfo"); if (dbSource) p_struct->tanInfo=AQFINTS_TanInfo_fromDb(dbSource); else p_struct->tanInfo=NULL; } /* member "bpdJobs" */ if (p_struct->bpdJobs) { AQFINTS_BpdJob_List_free(p_struct->bpdJobs); p_struct->bpdJobs=NULL; p_struct->bpdJobs=NULL; } { GWEN_DB_NODE *dbSource; dbSource=GWEN_DB_GetGroup(p_db, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "bpdJobs"); if (dbSource) { AQFINTS_BPDJOB_LIST *t; GWEN_DB_NODE *dbT; t=AQFINTS_BpdJob_List_new(); dbT=GWEN_DB_FindFirstGroup(dbSource, "element"); while(dbT) { AQFINTS_BPDJOB *elem; elem=AQFINTS_BpdJob_fromDb(dbT); if (elem) AQFINTS_BpdJob_List_Add(elem, t); dbT=GWEN_DB_FindNextGroup(dbT, "element"); } p_struct->bpdJobs=t; } else p_struct->bpdJobs=NULL; } /* member "addresses" */ if (p_struct->addresses) { AQFINTS_BpdAddr_List_free(p_struct->addresses); p_struct->addresses=NULL; p_struct->addresses=NULL; } { GWEN_DB_NODE *dbSource; dbSource=GWEN_DB_GetGroup(p_db, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "addresses"); if (dbSource) { AQFINTS_BPDADDR_LIST *t; GWEN_DB_NODE *dbT; t=AQFINTS_BpdAddr_List_new(); dbT=GWEN_DB_FindFirstGroup(dbSource, "element"); while(dbT) { AQFINTS_BPDADDR *elem; elem=AQFINTS_BpdAddr_fromDb(dbT); if (elem) AQFINTS_BpdAddr_List_Add(elem, t); dbT=GWEN_DB_FindNextGroup(dbT, "element"); } p_struct->addresses=t; } else p_struct->addresses=NULL; } /* member "securityProfiles" */ if (p_struct->securityProfiles) { AQFINTS_BpdSecProfile_List_free(p_struct->securityProfiles); p_struct->securityProfiles=NULL; p_struct->securityProfiles=NULL; } { GWEN_DB_NODE *dbSource; dbSource=GWEN_DB_GetGroup(p_db, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "securityProfiles"); if (dbSource) { AQFINTS_BPD_SECPROFILE_LIST *t; GWEN_DB_NODE *dbT; t=AQFINTS_BpdSecProfile_List_new(); dbT=GWEN_DB_FindFirstGroup(dbSource, "element"); while(dbT) { AQFINTS_BPD_SECPROFILE *elem; elem=AQFINTS_BpdSecProfile_fromDb(dbT); if (elem) AQFINTS_BpdSecProfile_List_Add(elem, t); dbT=GWEN_DB_FindNextGroup(dbT, "element"); } p_struct->securityProfiles=t; } else p_struct->securityProfiles=NULL; } /* member "tanMethodList" */ if (p_struct->tanMethodList) { AQFINTS_TanMethod_List_free(p_struct->tanMethodList); p_struct->tanMethodList=NULL; p_struct->tanMethodList=NULL; } { GWEN_DB_NODE *dbSource; dbSource=GWEN_DB_GetGroup(p_db, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "tanMethodList"); if (dbSource) { AQFINTS_TANMETHOD_LIST *t; GWEN_DB_NODE *dbT; t=AQFINTS_TanMethod_List_new(); dbT=GWEN_DB_FindFirstGroup(dbSource, "element"); while(dbT) { AQFINTS_TANMETHOD *elem; elem=AQFINTS_TanMethod_fromDb(dbT); if (elem) AQFINTS_TanMethod_List_Add(elem, t); dbT=GWEN_DB_FindNextGroup(dbT, "element"); } p_struct->tanMethodList=t; } else p_struct->tanMethodList=NULL; } /* member "runtimeFlags" */ /* member "runtimeFlags" is volatile, just presetting it */ p_struct->runtimeFlags=0; } int AQFINTS_Bpd_WriteDb(const AQFINTS_BPD *p_struct, GWEN_DB_NODE *p_db) { int p_rv; assert(p_struct); /* member "bankData" */ { if (p_struct->bankData) { GWEN_DB_NODE *dbDest; dbDest=GWEN_DB_GetGroup(p_db, GWEN_DB_FLAGS_OVERWRITE_GROUPS, "bankData"); assert(dbDest); p_rv=AQFINTS_BankData_toDb(p_struct->bankData, dbDest); } else p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "tanInfo" */ { if (p_struct->tanInfo) { GWEN_DB_NODE *dbDest; dbDest=GWEN_DB_GetGroup(p_db, GWEN_DB_FLAGS_OVERWRITE_GROUPS, "tanInfo"); assert(dbDest); p_rv=AQFINTS_TanInfo_toDb(p_struct->tanInfo, dbDest); } else p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "bpdJobs" */ { if (p_struct->bpdJobs) { GWEN_DB_NODE *dbDest; AQFINTS_BPDJOB *elem; dbDest=GWEN_DB_GetGroup(p_db, GWEN_DB_FLAGS_OVERWRITE_GROUPS, "bpdJobs"); assert(dbDest); p_rv=0; elem=AQFINTS_BpdJob_List_First(p_struct->bpdJobs); while(elem) { GWEN_DB_NODE *dbElem; dbElem=GWEN_DB_GetGroup(dbDest, GWEN_PATH_FLAGS_CREATE_GROUP, "element"); assert(dbElem); p_rv=AQFINTS_BpdJob_toDb(elem, dbElem); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", p_rv); break; } elem=AQFINTS_BpdJob_List_Next(elem); } } else p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "addresses" */ { if (p_struct->addresses) { GWEN_DB_NODE *dbDest; AQFINTS_BPDADDR *elem; dbDest=GWEN_DB_GetGroup(p_db, GWEN_DB_FLAGS_OVERWRITE_GROUPS, "addresses"); assert(dbDest); p_rv=0; elem=AQFINTS_BpdAddr_List_First(p_struct->addresses); while(elem) { GWEN_DB_NODE *dbElem; dbElem=GWEN_DB_GetGroup(dbDest, GWEN_PATH_FLAGS_CREATE_GROUP, "element"); assert(dbElem); p_rv=AQFINTS_BpdAddr_toDb(elem, dbElem); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", p_rv); break; } elem=AQFINTS_BpdAddr_List_Next(elem); } } else p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "securityProfiles" */ { if (p_struct->securityProfiles) { GWEN_DB_NODE *dbDest; AQFINTS_BPD_SECPROFILE *elem; dbDest=GWEN_DB_GetGroup(p_db, GWEN_DB_FLAGS_OVERWRITE_GROUPS, "securityProfiles"); assert(dbDest); p_rv=0; elem=AQFINTS_BpdSecProfile_List_First(p_struct->securityProfiles); while(elem) { GWEN_DB_NODE *dbElem; dbElem=GWEN_DB_GetGroup(dbDest, GWEN_PATH_FLAGS_CREATE_GROUP, "element"); assert(dbElem); p_rv=AQFINTS_BpdSecProfile_toDb(elem, dbElem); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", p_rv); break; } elem=AQFINTS_BpdSecProfile_List_Next(elem); } } else p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "tanMethodList" */ { if (p_struct->tanMethodList) { GWEN_DB_NODE *dbDest; AQFINTS_TANMETHOD *elem; dbDest=GWEN_DB_GetGroup(p_db, GWEN_DB_FLAGS_OVERWRITE_GROUPS, "tanMethodList"); assert(dbDest); p_rv=0; elem=AQFINTS_TanMethod_List_First(p_struct->tanMethodList); while(elem) { GWEN_DB_NODE *dbElem; dbElem=GWEN_DB_GetGroup(dbDest, GWEN_PATH_FLAGS_CREATE_GROUP, "element"); assert(dbElem); p_rv=AQFINTS_TanMethod_toDb(elem, dbElem); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", p_rv); break; } elem=AQFINTS_TanMethod_List_Next(elem); } } else p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "runtimeFlags" is volatile, not writing to db */ return 0; } AQFINTS_BPD *AQFINTS_Bpd_fromDb(GWEN_DB_NODE *p_db) { AQFINTS_BPD *p_struct; p_struct=AQFINTS_Bpd_new(); AQFINTS_Bpd_ReadDb(p_struct, p_db); return p_struct; } int AQFINTS_Bpd_toDb(const AQFINTS_BPD *p_struct, GWEN_DB_NODE *p_db) { return AQFINTS_Bpd_WriteDb(p_struct, p_db); } void AQFINTS_Bpd_AddBpdJob(AQFINTS_BPD *st, AQFINTS_BPDJOB *j) { if (st->bpdJobs==NULL) st->bpdJobs=AQFINTS_BpdJob_List_new(); AQFINTS_BpdJob_List_Add(j, st->bpdJobs); } void AQFINTS_Bpd_AddBpdAddr(AQFINTS_BPD *st, AQFINTS_BPDADDR *addr) { if (st->addresses==NULL) st->addresses=AQFINTS_BpdAddr_List_new(); AQFINTS_BpdAddr_List_Add(addr, st->addresses); } void AQFINTS_Bpd_AddBpdSecurityProfile(AQFINTS_BPD *st, AQFINTS_BPD_SECPROFILE *secProfile) { if (st->securityProfiles==NULL) st->securityProfiles=AQFINTS_BpdSecProfile_List_new(); AQFINTS_BpdSecProfile_List_Add(secProfile, st->securityProfiles); } /* code headers */ aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/service/bpd/bpdaddr.h0000664000175000017500000001150615037736054025151 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "bpdaddr.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef AQFINTS_BPDADDR_BPDADDR_H #define AQFINTS_BPDADDR_BPDADDR_H #ifdef __cplusplus extern "C" { #endif /** @page P_AQFINTS_BPDADDR Structure AQFINTS_BPDADDR

This page describes the properties of AQFINTS_BPDADDR.

AQFINTS_BPDADDR

@anchor AQFINTS_BPDADDR_country

country

Set this property with @ref AQFINTS_BpdAddr_SetCountry(), get it with @ref AQFINTS_BpdAddr_GetCountry().

@anchor AQFINTS_BPDADDR_bankCode

bankCode

Set this property with @ref AQFINTS_BpdAddr_SetBankCode(), get it with @ref AQFINTS_BpdAddr_GetBankCode().

@anchor AQFINTS_BPDADDR_language

language

Set this property with @ref AQFINTS_BpdAddr_SetLanguage(), get it with @ref AQFINTS_BpdAddr_GetLanguage().

@anchor AQFINTS_BPDADDR_services

services

Set this property with @ref AQFINTS_BpdAddr_SetServices(), get it with @ref AQFINTS_BpdAddr_GetServices().

@anchor AQFINTS_BPDADDR_runtimeFlags

runtimeFlags

Set this property with @ref AQFINTS_BpdAddr_SetRuntimeFlags(), get it with @ref AQFINTS_BpdAddr_GetRuntimeFlags().

*/ /* define AQFINTS_BPDADDR_RTFLAGS */ /* define AQFINTS_BPDADDR_FLAGS */ /* needed system headers */ #include #include #include /* pre-headers */ #include typedef struct AQFINTS_BPDADDR AQFINTS_BPDADDR; GWEN_LIST_FUNCTION_DEFS(AQFINTS_BPDADDR, AQFINTS_BpdAddr) /* post-headers */ #include "libaqfints/service/bpd/bpdaddrservice.h" /** Constructor. */ AQFINTS_BPDADDR *AQFINTS_BpdAddr_new(void); /** Destructor. */ void AQFINTS_BpdAddr_free(AQFINTS_BPDADDR *p_struct); void AQFINTS_BpdAddr_Attach(AQFINTS_BPDADDR *p_struct); AQFINTS_BPDADDR *AQFINTS_BpdAddr_dup(const AQFINTS_BPDADDR *p_src); AQFINTS_BPDADDR *AQFINTS_BpdAddr_copy(AQFINTS_BPDADDR *p_struct, const AQFINTS_BPDADDR *p_src); /** Getter. * Use this function to get the member "country" (see @ref AQFINTS_BPDADDR_country) */ int AQFINTS_BpdAddr_GetCountry(const AQFINTS_BPDADDR *p_struct); /** Getter. * Use this function to get the member "bankCode" (see @ref AQFINTS_BPDADDR_bankCode) */ const char *AQFINTS_BpdAddr_GetBankCode(const AQFINTS_BPDADDR *p_struct); /** Getter. * Use this function to get the member "language" (see @ref AQFINTS_BPDADDR_language) */ int AQFINTS_BpdAddr_GetLanguage(const AQFINTS_BPDADDR *p_struct); /** Getter. * Use this function to get the member "services" (see @ref AQFINTS_BPDADDR_services) */ AQFINTS_BPDADDR_SERVICE_LIST *AQFINTS_BpdAddr_GetServices(const AQFINTS_BPDADDR *p_struct); /** Getter. * Use this function to get the member "runtimeFlags" (see @ref AQFINTS_BPDADDR_runtimeFlags) */ uint32_t AQFINTS_BpdAddr_GetRuntimeFlags(const AQFINTS_BPDADDR *p_struct); /** Setter. * Use this function to set the member "country" (see @ref AQFINTS_BPDADDR_country) */ void AQFINTS_BpdAddr_SetCountry(AQFINTS_BPDADDR *p_struct, int p_src); /** Setter. * Use this function to set the member "bankCode" (see @ref AQFINTS_BPDADDR_bankCode) */ void AQFINTS_BpdAddr_SetBankCode(AQFINTS_BPDADDR *p_struct, const char *p_src); /** Setter. * Use this function to set the member "language" (see @ref AQFINTS_BPDADDR_language) */ void AQFINTS_BpdAddr_SetLanguage(AQFINTS_BPDADDR *p_struct, int p_src); /** Setter. * Use this function to set the member "services" (see @ref AQFINTS_BPDADDR_services) */ void AQFINTS_BpdAddr_SetServices(AQFINTS_BPDADDR *p_struct, AQFINTS_BPDADDR_SERVICE_LIST *p_src); /** Setter. * Use this function to set the member "runtimeFlags" (see @ref AQFINTS_BPDADDR_runtimeFlags) */ void AQFINTS_BpdAddr_SetRuntimeFlags(AQFINTS_BPDADDR *p_struct, uint32_t p_src); /** Add flags. * Use this function to add flags to member "runtimeFlags" (see @ref AQFINTS_BPDADDR_runtimeFlags) */ void AQFINTS_BpdAddr_AddRuntimeFlags(AQFINTS_BPDADDR *p_struct, uint32_t p_src); /** Add flags. * Use this function to add flags to member "runtimeFlags" (see @ref AQFINTS_BPDADDR_runtimeFlags) */ void AQFINTS_BpdAddr_SubRuntimeFlags(AQFINTS_BPDADDR *p_struct, uint32_t p_src); AQFINTS_BPDADDR_LIST *AQFINTS_BpdAddr_List_dup(const AQFINTS_BPDADDR_LIST *p_src); void AQFINTS_BpdAddr_ReadDb(AQFINTS_BPDADDR *p_struct, GWEN_DB_NODE *p_db); int AQFINTS_BpdAddr_WriteDb(const AQFINTS_BPDADDR *p_struct, GWEN_DB_NODE *p_db); AQFINTS_BPDADDR *AQFINTS_BpdAddr_fromDb(GWEN_DB_NODE *p_db); int AQFINTS_BpdAddr_toDb(const AQFINTS_BPDADDR *p_struct, GWEN_DB_NODE *p_db); void AQFINTS_BpdAddr_AddService(AQFINTS_BPDADDR *st, AQFINTS_BPDADDR_SERVICE *srv); #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/service/bpd/bankdata_p.h0000664000175000017500000000145615037736054025640 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "bankdata.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef AQFINTS_BANKDATA_BANKDATA_P_H #define AQFINTS_BANKDATA_BANKDATA_P_H #include "./bankdata.h" #ifdef __cplusplus extern "C" { #endif struct AQFINTS_BANKDATA { GWEN_LIST_ELEMENT(AQFINTS_BANKDATA) int _refCount; int version; int country; char *bankCode; char *bankName; int jobTypesPerMsg; int maxMsgSize; int minTimeout; int maxTimeout; int hbciVersions[9]; int languages[9]; uint32_t runtimeFlags; /* volatile */ }; #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/service/bpd/bankdata.xml0000664000175000017500000000546214043610745025665 00000000000000 AQFINTS_BANKDATA AQFINTS_BankData bankdata with_db with_list1 with_refcount
libaqfints/aqfints.h
0 0 public 0 0 public NULL NULL public own const dup const NULL NULL public own const dup const 0 0 public 0 0 public 0 0 public 0 0 public 0 0 public 0 0 public 0 0 volatile with_flags public
aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/service/bpd/bpdsecprofile_p.h0000664000175000017500000000123215037736054026704 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "bpdsecprofile.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef AQFINTS_BPD_SECPROFILE_BPDSECPROFILE_P_H #define AQFINTS_BPD_SECPROFILE_BPDSECPROFILE_P_H #include "./bpdsecprofile.h" #ifdef __cplusplus extern "C" { #endif struct AQFINTS_BPD_SECPROFILE { GWEN_LIST_ELEMENT(AQFINTS_BPD_SECPROFILE) int _refCount; char *code; int versions[9]; }; #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/service/bpd/bpdsecprofile.xml0000664000175000017500000000205314043610745026732 00000000000000 AQFINTS_BPD_SECPROFILE AQFINTS_BpdSecProfile bpdsecprofile with_db with_list1 with_refcount
libaqfints/aqfints.h
NULL NULL public own const dup const 0 0 public
aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/service/bpd/bpd_read.c0000664000175000017500000003221714044534775025311 00000000000000/*************************************************************************** begin : Sat Augl 03 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "libaqfints/service/bpd/bpd_read.h" #include "libaqfints/aqfints.h" #include "libaqfints/service/bpd/bpd.h" #include /* ------------------------------------------------------------------------------------------------ * forward declarations * ------------------------------------------------------------------------------------------------ */ static void _readTanMethods(GWEN_DB_NODE *db, int segmentVersion, AQFINTS_TANMETHOD_LIST *tmList); static void _readSecurityProfiles(GWEN_DB_NODE *db, AQFINTS_BPD_SECPROFILE_LIST *securityProfileList); /* ------------------------------------------------------------------------------------------------ * implementations * ------------------------------------------------------------------------------------------------ */ AQFINTS_BPD *AQFINTS_Bpd_SampleBpdFromSegmentList(AQFINTS_PARSER *parser, AQFINTS_SEGMENT_LIST *segmentList, int removeFromSegList) { AQFINTS_SEGMENT *segment; AQFINTS_BPD *bpd=NULL; bpd=AQFINTS_Bpd_new(); segment=AQFINTS_Segment_List_First(segmentList); while (segment) { AQFINTS_SEGMENT *nextSegment; const char *sCode; int segVer; int doRemoveSegment=0; GWEN_DB_NODE *db; nextSegment=AQFINTS_Segment_List_Next(segment); db=AQFINTS_Segment_GetDbData(segment); segVer=AQFINTS_Segment_GetSegmentVersion(segment); sCode=AQFINTS_Segment_GetCode(segment); DBG_ERROR(0, "Handling segment %s:%d", sCode?sCode:"(unnamed)", segVer); if (db && sCode && *sCode) { if (strcasecmp(sCode, "HIBPA")==0) { /* read bankData */ AQFINTS_BANKDATA *bankData; bankData=AQFINTS_Bpd_ReadBankData(db); if (bankData) { DBG_ERROR(AQFINTS_LOGDOMAIN, "Found bank data"); AQFINTS_Bpd_SetBankData(bpd, bankData); if (removeFromSegList) doRemoveSegment=1; } } else if (strcasecmp(sCode, "HIKOM")==0) { /* read bpdAddr */ AQFINTS_BPDADDR *bpdAddr; bpdAddr=AQFINTS_Bpd_ReadBpdAddr(db); if (bpdAddr) { AQFINTS_Bpd_AddBpdAddr(bpd, bpdAddr); if (removeFromSegList) doRemoveSegment=1; } } else if (strcasecmp(sCode, "HIPINS")==0) { /* read tanInfo */ AQFINTS_TANINFO *ti; ti=AQFINTS_Bpd_ReadTanInfo(db); if (ti) { AQFINTS_Bpd_SetTanInfo(bpd, ti); if (removeFromSegList) doRemoveSegment=1; } } else if (strcasecmp(sCode, "HISHV")==0) { /* read security profiles */ AQFINTS_BPD_SECPROFILE_LIST *securityProfileList; securityProfileList=AQFINTS_Bpd_GetSecurityProfiles(bpd); if (securityProfileList==NULL) { securityProfileList=AQFINTS_BpdSecProfile_List_new(); AQFINTS_Bpd_SetSecurityProfiles(bpd, securityProfileList); } _readSecurityProfiles(db, securityProfileList); } else { AQFINTS_SEGMENT *defSegment; defSegment=AQFINTS_Parser_FindSegmentByCode(parser, sCode, segVer, 0); if (defSegment==NULL) { DBG_ERROR(0, "Segment %s:%d not found in definitions", sCode?sCode:"(unnamed)", segVer); } if (defSegment && (AQFINTS_Segment_GetFlags(defSegment) & AQFINTS_SEGMENT_FLAGS_ISBPD)) { AQFINTS_BPDJOB *j; /* is a bpd job */ DBG_ERROR(0, "Job %s:%d is a BPD job", sCode, segVer); j=AQFINTS_Bpd_ReadBpdJob(db); if (j) { AQFINTS_Bpd_AddBpdJob(bpd, j); if (strcasecmp(sCode, "HITANS")==0) { AQFINTS_TANMETHOD_LIST *tmList; /* special handling for HITANS (parameters for HKTAN) */ tmList=AQFINTS_Bpd_GetTanMethodList(bpd); if (tmList==NULL) { tmList=AQFINTS_TanMethod_List_new(); AQFINTS_Bpd_SetTanMethodList(bpd, tmList); } _readTanMethods(db, segVer, tmList); } if (removeFromSegList) doRemoveSegment=1; } } } } if (doRemoveSegment) { AQFINTS_Segment_List_Del(segment); AQFINTS_Segment_free(segment); } segment=nextSegment; } if (AQFINTS_Bpd_GetBankData(bpd)==NULL) { AQFINTS_Bpd_free(bpd); return NULL; } return bpd; } void _readTanMethods(GWEN_DB_NODE *db, int segmentVersion, AQFINTS_TANMETHOD_LIST *tmList) { GWEN_DB_NODE *dbT; dbT=GWEN_DB_FindFirstGroup(db, "tanMethod"); while (dbT) { AQFINTS_TANMETHOD *tm; tm=AQFINTS_Bpd_ReadTanMethod(dbT); if (tm) { int fn; /* store segment version within function code */ fn=(segmentVersion*1000)+AQFINTS_TanMethod_GetFunction(tm); AQFINTS_TanMethod_SetFunction(tm, fn); AQFINTS_TanMethod_List_Add(tm, tmList); } dbT=GWEN_DB_FindNextGroup(dbT, "tanMethod"); } } AQFINTS_BANKDATA *AQFINTS_Bpd_ReadBankData(GWEN_DB_NODE *db) { AQFINTS_BANKDATA *bankData; const char *s; int i; GWEN_DB_NODE *dbT; bankData=AQFINTS_BankData_new(); i=GWEN_DB_GetIntValue(db, "version", 0, 0); AQFINTS_BankData_SetVersion(bankData, i); i=GWEN_DB_GetIntValue(db, "country", 0, 0); AQFINTS_BankData_SetCountry(bankData, i); s=GWEN_DB_GetCharValue(db, "bankCode", 0, NULL); if (s && *s) AQFINTS_BankData_SetBankCode(bankData, s); s=GWEN_DB_GetCharValue(db, "name", 0, NULL); if (s && *s) AQFINTS_BankData_SetBankName(bankData, s); i=GWEN_DB_GetIntValue(db, "jobTypesPerMsg", 0, 0); AQFINTS_BankData_SetJobTypesPerMsg(bankData, i); dbT=GWEN_DB_GetGroup(db, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "languages"); if (dbT) { for (i=0; i<9; i++) { int v; v=GWEN_DB_GetIntValue(dbT, "language", i, -1); if (v<0) break; AQFINTS_BankData_SetLanguagesAt(bankData, i, v); } } dbT=GWEN_DB_GetGroup(db, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "versions"); if (dbT) { for (i=0; i<9; i++) { int v; v=GWEN_DB_GetIntValue(dbT, "version", i, -1); if (v<0) break; AQFINTS_BankData_SetHbciVersionsAt(bankData, i, v); } } i=GWEN_DB_GetIntValue(db, "maxMsgSize", 0, 0); AQFINTS_BankData_SetMaxMsgSize(bankData, i); i=GWEN_DB_GetIntValue(db, "minTimeout", 0, 0); AQFINTS_BankData_SetMinTimeout(bankData, i); i=GWEN_DB_GetIntValue(db, "maxTimeout", 0, 0); AQFINTS_BankData_SetMaxTimeout(bankData, i); return bankData; } AQFINTS_BPDADDR *AQFINTS_Bpd_ReadBpdAddr(GWEN_DB_NODE *db) { AQFINTS_BPDADDR *addr; const char *s; int i; GWEN_DB_NODE *dbT; addr=AQFINTS_BpdAddr_new(); i=GWEN_DB_GetIntValue(db, "country", 0, 0); AQFINTS_BpdAddr_SetCountry(addr, i); s=GWEN_DB_GetCharValue(db, "bankCode", 0, NULL); AQFINTS_BpdAddr_SetBankCode(addr, s); i=GWEN_DB_GetIntValue(db, "language", 0, 0); AQFINTS_BpdAddr_SetLanguage(addr, i); dbT=GWEN_DB_FindFirstGroup(db, "service"); while (dbT) { AQFINTS_BPDADDR_SERVICE *srv; srv=AQFINTS_Bpd_ReadBpdAddrService(dbT); AQFINTS_BpdAddr_AddService(addr, srv); dbT=GWEN_DB_FindNextGroup(dbT, "service"); } return addr; } AQFINTS_BPDADDR_SERVICE *AQFINTS_Bpd_ReadBpdAddrService(GWEN_DB_NODE *db) { AQFINTS_BPDADDR_SERVICE *srv; srv=AQFINTS_BpdAddrService_fromDb(db); if (srv==NULL) { DBG_INFO(0, "here"); return NULL; } return srv; } AQFINTS_BPDJOB *AQFINTS_Bpd_ReadBpdJob(GWEN_DB_NODE *db) { GWEN_DB_NODE *dbT; dbT=GWEN_DB_GetGroup(db, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "head"); if (dbT) { AQFINTS_BPDJOB *j; const char *s; int i; j=AQFINTS_BpdJob_new(); s=GWEN_DB_GetCharValue(dbT, "code", 0, NULL); if (s && *s) AQFINTS_BpdJob_SetCode(j, s); i=GWEN_DB_GetIntValue(dbT, "version", 0, 0); AQFINTS_BpdJob_SetVersion(j, i); i=GWEN_DB_GetIntValue(db, "jobsPerMsg", 0, 0); AQFINTS_BpdJob_SetJobsPerMsg(j, i); i=GWEN_DB_GetIntValue(db, "minSigs", 0, 0); AQFINTS_BpdJob_SetMinSigs(j, i); i=GWEN_DB_GetIntValue(db, "securityClass", 0, 0); AQFINTS_BpdJob_SetSecurityClass(j, i); AQFINTS_BpdJob_SetSettings(j, GWEN_DB_Group_dup(db)); return j; } else { DBG_ERROR(0, "BpdJob has no HEAD group"); GWEN_DB_Dump(db, 2); } return NULL; } AQFINTS_TANINFO *AQFINTS_Bpd_ReadTanInfo(GWEN_DB_NODE *db) { AQFINTS_TANINFO *ti; int i; GWEN_DB_NODE *dbT; ti=AQFINTS_TanInfo_new(); i=GWEN_DB_GetIntValue(db, "jobsPerMsg", 0, 0); AQFINTS_TanInfo_SetJobsPerMsg(ti, i); i=GWEN_DB_GetIntValue(db, "minSigs", 0, 0); AQFINTS_TanInfo_SetMinSigs(ti, i); i=GWEN_DB_GetIntValue(db, "securityClass", 0, 0); AQFINTS_TanInfo_SetSecurityClass(ti, i); dbT=GWEN_DB_FindFirstGroup(db, "job"); while (dbT) { AQFINTS_TANJOBINFO *tj; tj=AQFINTS_Bpd_ReadTanJobInfo(dbT); AQFINTS_TanInfo_AddTanJobInfo(ti, tj); dbT=GWEN_DB_FindNextGroup(dbT, "job"); } return ti; } AQFINTS_TANJOBINFO *AQFINTS_Bpd_ReadTanJobInfo(GWEN_DB_NODE *db) { AQFINTS_TANJOBINFO *tj; const char *s; tj=AQFINTS_TanJobInfo_new(); s=GWEN_DB_GetCharValue(db, "code", 0, NULL); AQFINTS_TanJobInfo_SetCode(tj, s); s=GWEN_DB_GetCharValue(db, "needTan", 0, NULL); if (s && (*s=='j' || *s=='J')) AQFINTS_TanJobInfo_AddFlags(tj, AQFINTS_TANJOBINFO_FLAGS_NEEDTAN); return tj; } AQFINTS_TANMETHOD *AQFINTS_Bpd_ReadTanMethod(GWEN_DB_NODE *db) { AQFINTS_TANMETHOD *tm; int i; const char *s; tm=AQFINTS_TanMethod_new(); i=GWEN_DB_GetIntValue(db, "function", 0, 0); AQFINTS_TanMethod_SetFunction(tm, i); i=GWEN_DB_GetIntValue(db, "process", 0, 0); AQFINTS_TanMethod_SetProcess(tm, i); s=GWEN_DB_GetCharValue(db, "methodId", 0, NULL); AQFINTS_TanMethod_SetMethodId(tm, s); s=GWEN_DB_GetCharValue(db, "zkaTanName", 0, NULL); AQFINTS_TanMethod_SetZkaTanName(tm, s); s=GWEN_DB_GetCharValue(db, "zkaTanVersion", 0, NULL); AQFINTS_TanMethod_SetZkaTanVersion(tm, s); s=GWEN_DB_GetCharValue(db, "methodName", 0, NULL); AQFINTS_TanMethod_SetMethodName(tm, s); i=GWEN_DB_GetIntValue(db, "tanMaxLen", 0, 0); AQFINTS_TanMethod_SetTanMaxLen(tm, i); i=GWEN_DB_GetIntValue(db, "formatId", 0, 0); AQFINTS_TanMethod_SetFormatId(tm, i); s=GWEN_DB_GetCharValue(db, "prompt", 0, NULL); AQFINTS_TanMethod_SetPrompt(tm, s); i=GWEN_DB_GetIntValue(db, "returnMaxLen", 0, 0); AQFINTS_TanMethod_SetReturnMaxLen(tm, i); s=GWEN_DB_GetCharValue(db, "multiTanAllowed", 0, "N"); if (s && (*s=='J' || *s=='j')) AQFINTS_TanMethod_AddFlags(tm, AQFINTS_TANMETHOD_FLAGS_MULTITAN_ALLOWED); i=GWEN_DB_GetIntValue(db, "timeShiftAllowed", 0, 0); AQFINTS_TanMethod_SetTimeShiftAllowed(tm, i); s=GWEN_DB_GetCharValue(db, "stornoAllowed", 0, "N"); if (s && (*s=='J' || *s=='j')) AQFINTS_TanMethod_AddFlags(tm, AQFINTS_TANMETHOD_FLAGS_STORNO_ALLOWED); i=GWEN_DB_GetIntValue(db, "needSmsAccount", 0, 0); AQFINTS_TanMethod_SetNeedSmsAccount(tm, i); i=GWEN_DB_GetIntValue(db, "needLocalAccount", 0, 0); AQFINTS_TanMethod_SetNeedLocalAccount(tm, i); s=GWEN_DB_GetCharValue(db, "needChallengeClass", 0, "N"); if (s && (*s=='J' || *s=='j')) AQFINTS_TanMethod_AddFlags(tm, AQFINTS_TANMETHOD_FLAGS_NEED_CHALLENGE_CLASS); s=GWEN_DB_GetCharValue(db, "challengeIsStructured", 0, "N"); if (s && (*s=='J' || *s=='j')) AQFINTS_TanMethod_AddFlags(tm, AQFINTS_TANMETHOD_FLAGS_CHALLENGE_IS_STRUCTURED); s=GWEN_DB_GetCharValue(db, "initMode", 0, 0); AQFINTS_TanMethod_SetInitMode(tm, s); i=GWEN_DB_GetIntValue(db, "needTanMediumId", 0, 0); AQFINTS_TanMethod_SetNeedTanMediumId(tm, i); s=GWEN_DB_GetCharValue(db, "needHhdUcResponse", 0, "N"); if (s && (*s=='J' || *s=='j')) AQFINTS_TanMethod_AddFlags(tm, AQFINTS_TANMETHOD_FLAGS_NEED_HHDUC); i=GWEN_DB_GetIntValue(db, "maxActiveTanMedia", 0, 0); AQFINTS_TanMethod_SetMaxActiveTanMedia(tm, i); return tm; } void _readSecurityProfiles(GWEN_DB_NODE *db, AQFINTS_BPD_SECPROFILE_LIST *securityProfileList) { GWEN_DB_NODE *dbT; dbT=GWEN_DB_FindFirstGroup(db, "secProfile"); while (dbT) { AQFINTS_BPD_SECPROFILE *securityProfile; const char *securityProfileName; securityProfileName=GWEN_DB_GetCharValue(dbT, "code", 0, NULL); if (securityProfileName && *securityProfileName) { int i; securityProfile=AQFINTS_BpdSecProfile_new(); AQFINTS_BpdSecProfile_SetCode(securityProfile, securityProfileName); for (i=0; i<10; i++) { int securityProfileVersion; securityProfileVersion=GWEN_DB_GetIntValue(dbT, "versions", i, 0); if (securityProfileVersion<1) break; AQFINTS_BpdSecProfile_SetVersionsAt(securityProfile, i, securityProfileVersion); } AQFINTS_BpdSecProfile_List_Add(securityProfile, securityProfileList); } dbT=GWEN_DB_FindNextGroup(dbT, "tanMethod"); } } aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/service/bpd/tanjobinfo.h0000664000175000017500000001052015037736054025675 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "tanjobinfo.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef AQFINTS_TANJOBINFO_TANJOBINFO_H #define AQFINTS_TANJOBINFO_TANJOBINFO_H #ifdef __cplusplus extern "C" { #endif /** @page P_AQFINTS_TANJOBINFO Structure AQFINTS_TANJOBINFO

This page describes the properties of AQFINTS_TANJOBINFO.

AQFINTS_TANJOBINFO

@anchor AQFINTS_TANJOBINFO_flags

flags

Set this property with @ref AQFINTS_TanJobInfo_SetFlags(), get it with @ref AQFINTS_TanJobInfo_GetFlags().

@anchor AQFINTS_TANJOBINFO_code

code

Set this property with @ref AQFINTS_TanJobInfo_SetCode(), get it with @ref AQFINTS_TanJobInfo_GetCode().

@anchor AQFINTS_TANJOBINFO_runtimeFlags

runtimeFlags

Set this property with @ref AQFINTS_TanJobInfo_SetRuntimeFlags(), get it with @ref AQFINTS_TanJobInfo_GetRuntimeFlags().

*/ /* define AQFINTS_TANJOBINFO_RTFLAGS */ /* define AQFINTS_TANJOBINFO_FLAGS */ #define AQFINTS_TANJOBINFO_FLAGS_NEEDTAN 0x00000001 /* needed system headers */ #include #include #include /* pre-headers */ #include typedef struct AQFINTS_TANJOBINFO AQFINTS_TANJOBINFO; GWEN_LIST_FUNCTION_DEFS(AQFINTS_TANJOBINFO, AQFINTS_TanJobInfo) /* post-headers */ /** Constructor. */ AQFINTS_TANJOBINFO *AQFINTS_TanJobInfo_new(void); /** Destructor. */ void AQFINTS_TanJobInfo_free(AQFINTS_TANJOBINFO *p_struct); void AQFINTS_TanJobInfo_Attach(AQFINTS_TANJOBINFO *p_struct); AQFINTS_TANJOBINFO *AQFINTS_TanJobInfo_dup(const AQFINTS_TANJOBINFO *p_src); AQFINTS_TANJOBINFO *AQFINTS_TanJobInfo_copy(AQFINTS_TANJOBINFO *p_struct, const AQFINTS_TANJOBINFO *p_src); /** Getter. * Use this function to get the member "flags" (see @ref AQFINTS_TANJOBINFO_flags) */ uint32_t AQFINTS_TanJobInfo_GetFlags(const AQFINTS_TANJOBINFO *p_struct); /** Getter. * Use this function to get the member "code" (see @ref AQFINTS_TANJOBINFO_code) */ const char *AQFINTS_TanJobInfo_GetCode(const AQFINTS_TANJOBINFO *p_struct); /** Getter. * Use this function to get the member "runtimeFlags" (see @ref AQFINTS_TANJOBINFO_runtimeFlags) */ uint32_t AQFINTS_TanJobInfo_GetRuntimeFlags(const AQFINTS_TANJOBINFO *p_struct); /** Setter. * Use this function to set the member "flags" (see @ref AQFINTS_TANJOBINFO_flags) */ void AQFINTS_TanJobInfo_SetFlags(AQFINTS_TANJOBINFO *p_struct, uint32_t p_src); /** Add flags. * Use this function to add flags to member "flags" (see @ref AQFINTS_TANJOBINFO_flags) */ void AQFINTS_TanJobInfo_AddFlags(AQFINTS_TANJOBINFO *p_struct, uint32_t p_src); /** Add flags. * Use this function to add flags to member "flags" (see @ref AQFINTS_TANJOBINFO_flags) */ void AQFINTS_TanJobInfo_SubFlags(AQFINTS_TANJOBINFO *p_struct, uint32_t p_src); /** Setter. * Use this function to set the member "code" (see @ref AQFINTS_TANJOBINFO_code) */ void AQFINTS_TanJobInfo_SetCode(AQFINTS_TANJOBINFO *p_struct, const char *p_src); /** Setter. * Use this function to set the member "runtimeFlags" (see @ref AQFINTS_TANJOBINFO_runtimeFlags) */ void AQFINTS_TanJobInfo_SetRuntimeFlags(AQFINTS_TANJOBINFO *p_struct, uint32_t p_src); /** Add flags. * Use this function to add flags to member "runtimeFlags" (see @ref AQFINTS_TANJOBINFO_runtimeFlags) */ void AQFINTS_TanJobInfo_AddRuntimeFlags(AQFINTS_TANJOBINFO *p_struct, uint32_t p_src); /** Add flags. * Use this function to add flags to member "runtimeFlags" (see @ref AQFINTS_TANJOBINFO_runtimeFlags) */ void AQFINTS_TanJobInfo_SubRuntimeFlags(AQFINTS_TANJOBINFO *p_struct, uint32_t p_src); AQFINTS_TANJOBINFO_LIST *AQFINTS_TanJobInfo_List_dup(const AQFINTS_TANJOBINFO_LIST *p_src); void AQFINTS_TanJobInfo_ReadDb(AQFINTS_TANJOBINFO *p_struct, GWEN_DB_NODE *p_db); int AQFINTS_TanJobInfo_WriteDb(const AQFINTS_TANJOBINFO *p_struct, GWEN_DB_NODE *p_db); AQFINTS_TANJOBINFO *AQFINTS_TanJobInfo_fromDb(GWEN_DB_NODE *p_db); int AQFINTS_TanJobInfo_toDb(const AQFINTS_TANJOBINFO *p_struct, GWEN_DB_NODE *p_db); AQFINTS_TANJOBINFO *AQFINTS_TanJobInfo_List_GetByCode(const AQFINTS_TANJOBINFO_LIST *p_list, const char *p_cmp); #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/service/jobs/0000755000175000017500000000000015037736161023642 500000000000000aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/service/jobs/getbalance.fints0000664000175000017500000000447014043610745026716 00000000000000 aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/service/jobs/Makefile.am0000664000175000017500000000067114043610745025617 00000000000000 AM_CFLAGS=@visibility_cflags@ AM_CPPFLAGS = -I$(top_srcdir)/src/libs -I$(top_builddir)/src/libs $(gwenhywfar_includes) \ -I$(srcdir)/../.. \ -I$(srcdir)/.. \ $(all_includes) fintsdatadir=$(aqfints_datadir)/fints fintsdata_DATA=\ getbalance.fints EXTRA_DIST=$(fintsdata_DATA) typefiles: for d in $(SUBDIRS); do \ $(MAKE) -C $$d typefiles; \ done typedefs: for d in $(SUBDIRS); do \ $(MAKE) -C $$d typedefs; \ done aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/service/jobs/Makefile.in0000644000175000017500000004655215037736025025642 00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/libs/plugins/backends/aqfints/libaqfints/service/jobs ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/distri.m4 $(top_srcdir)/m4/gwenhywfar.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/os.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(fintsdatadir)" DATA = $(fintsdata_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADD_ACLOCAL_FLAGS = @ADD_ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AQBANKING_CLI_VERSION_STRING = @AQBANKING_CLI_VERSION_STRING@ AQBANKING_FINTS_VERSION_STRING = @AQBANKING_FINTS_VERSION_STRING@ AQBANKING_SO_AGE = @AQBANKING_SO_AGE@ AQBANKING_SO_CURRENT = @AQBANKING_SO_CURRENT@ AQBANKING_SO_EFFECTIVE = @AQBANKING_SO_EFFECTIVE@ AQBANKING_SO_REVISION = @AQBANKING_SO_REVISION@ AQBANKING_VERSION_BUILD = @AQBANKING_VERSION_BUILD@ AQBANKING_VERSION_FULL_STRING = @AQBANKING_VERSION_FULL_STRING@ AQBANKING_VERSION_MAJOR = @AQBANKING_VERSION_MAJOR@ AQBANKING_VERSION_MINOR = @AQBANKING_VERSION_MINOR@ AQBANKING_VERSION_PATCHLEVEL = @AQBANKING_VERSION_PATCHLEVEL@ AQBANKING_VERSION_RELEASE_STRING = @AQBANKING_VERSION_RELEASE_STRING@ AQBANKING_VERSION_STRING = @AQBANKING_VERSION_STRING@ AQBANKING_VERSION_TAG = @AQBANKING_VERSION_TAG@ AQEBICS_CFLAGS = @AQEBICS_CFLAGS@ AQEBICS_LIBS = @AQEBICS_LIBS@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATETIME = @DATETIME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_EXCLUDE_PATTERNS = @DOXYGEN_EXCLUDE_PATTERNS@ DOXYGEN_FILE_PATTERNS = @DOXYGEN_FILE_PATTERNS@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENGUI_GTK2_CFLAGS = @GWENGUI_GTK2_CFLAGS@ GWENGUI_GTK2_LIBS = @GWENGUI_GTK2_LIBS@ GWENHYWFAR_MINIMUM_VERSION = @GWENHYWFAR_MINIMUM_VERSION@ HAVE_GWENGUI_GTK2 = @HAVE_GWENGUI_GTK2@ HAVE_I18N = @HAVE_I18N@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIBXSLT_CFLAGS = @LIBXSLT_CFLAGS@ LIBXSLT_LIBS = @LIBXSLT_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_SUPPORTS_QT = @MSGFMT_SUPPORTS_QT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ TUTORIALS = @TUTORIALS@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XMLMERGE = @XMLMERGE@ XMLSEC_CFLAGS = @XMLSEC_CFLAGS@ XMLSEC_LIBS = @XMLSEC_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ aqbanking_backends = @aqbanking_backends@ aqbanking_cfg_searchdir = @aqbanking_cfg_searchdir@ aqbanking_data_searchdir = @aqbanking_data_searchdir@ aqbanking_headerdir = @aqbanking_headerdir@ aqbanking_headerdir_am = @aqbanking_headerdir_am@ aqbanking_includes = @aqbanking_includes@ aqbanking_internal_libs = @aqbanking_internal_libs@ aqbanking_ldflags = @aqbanking_ldflags@ aqbanking_libs = @aqbanking_libs@ aqbanking_locale_searchdir = @aqbanking_locale_searchdir@ aqbanking_modules = @aqbanking_modules@ aqbanking_pkgdatadir = @aqbanking_pkgdatadir@ aqbanking_plugin_searchdir = @aqbanking_plugin_searchdir@ aqbanking_plugindir = @aqbanking_plugindir@ aqbanking_plugins_backends_dirs = @aqbanking_plugins_backends_dirs@ aqbanking_plugins_backends_libs = @aqbanking_plugins_backends_libs@ aqbanking_plugins_bankinfo_dirs = @aqbanking_plugins_bankinfo_dirs@ aqbanking_plugins_bankinfo_libs = @aqbanking_plugins_bankinfo_libs@ aqbanking_plugins_imexporters_dirs = @aqbanking_plugins_imexporters_dirs@ aqbanking_plugins_imexporters_libs = @aqbanking_plugins_imexporters_libs@ aqbanking_plugins_parsers_dirs = @aqbanking_plugins_parsers_dirs@ aqbanking_symlinkdir = @aqbanking_symlinkdir@ aqbanking_sys_is_windows = @aqbanking_sys_is_windows@ aqbankingpp_modules = @aqbankingpp_modules@ aqebics_datadir = @aqebics_datadir@ aqebics_includes = @aqebics_includes@ aqebics_internal_libs = @aqebics_internal_libs@ aqebics_ldflags = @aqebics_ldflags@ aqebics_libs = @aqebics_libs@ aqfints_datadir = @aqfints_datadir@ aqhbci_datadir = @aqhbci_datadir@ aqhbci_includes = @aqhbci_includes@ aqhbci_internal_libs = @aqhbci_internal_libs@ aqhbci_ldflags = @aqhbci_ldflags@ aqhbci_libs = @aqhbci_libs@ aqofxconnect_includes = @aqofxconnect_includes@ aqofxconnect_internal_libs = @aqofxconnect_internal_libs@ aqofxconnect_libs = @aqofxconnect_libs@ aqpaypal_includes = @aqpaypal_includes@ aqpaypal_internal_libs = @aqpaypal_internal_libs@ aqpaypal_libs = @aqpaypal_libs@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gmp_libs = @gmp_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_dir = @gwenhywfar_dir@ gwenhywfar_has_crypt = @gwenhywfar_has_crypt@ gwenhywfar_headers = @gwenhywfar_headers@ gwenhywfar_includes = @gwenhywfar_includes@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_plugins = @gwenhywfar_plugins@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ typemaker2_exe = @typemaker2_exe@ visibility_cflags = @visibility_cflags@ with_aqebics = @with_aqebics@ with_aqhbci = @with_aqhbci@ AM_CFLAGS = @visibility_cflags@ AM_CPPFLAGS = -I$(top_srcdir)/src/libs -I$(top_builddir)/src/libs $(gwenhywfar_includes) \ -I$(srcdir)/../.. \ -I$(srcdir)/.. \ $(all_includes) fintsdatadir = $(aqfints_datadir)/fints fintsdata_DATA = \ getbalance.fints EXTRA_DIST = $(fintsdata_DATA) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libs/plugins/backends/aqfints/libaqfints/service/jobs/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libs/plugins/backends/aqfints/libaqfints/service/jobs/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-fintsdataDATA: $(fintsdata_DATA) @$(NORMAL_INSTALL) @list='$(fintsdata_DATA)'; test -n "$(fintsdatadir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(fintsdatadir)'"; \ $(MKDIR_P) "$(DESTDIR)$(fintsdatadir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(fintsdatadir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(fintsdatadir)" || exit $$?; \ done uninstall-fintsdataDATA: @$(NORMAL_UNINSTALL) @list='$(fintsdata_DATA)'; test -n "$(fintsdatadir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(fintsdatadir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(fintsdatadir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-fintsdataDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-fintsdataDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am \ install-fintsdataDATA install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags-am uninstall \ uninstall-am uninstall-fintsdataDATA .PRECIOUS: Makefile typefiles: for d in $(SUBDIRS); do \ $(MAKE) -C $$d typefiles; \ done typedefs: for d in $(SUBDIRS); do \ $(MAKE) -C $$d typedefs; \ done # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/service/upd/0000755000175000017500000000000015037736161023475 500000000000000aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/service/upd/accountdata.h0000664000175000017500000002761615037736055026074 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "accountdata.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef AQFINTS_ACCOUNTDATA_ACCOUNTDATA_H #define AQFINTS_ACCOUNTDATA_ACCOUNTDATA_H #ifdef __cplusplus extern "C" { #endif /** @page P_AQFINTS_ACCOUNTDATA Structure AQFINTS_ACCOUNTDATA

This page describes the properties of AQFINTS_ACCOUNTDATA.

AQFINTS_ACCOUNTDATA

@anchor AQFINTS_ACCOUNTDATA_accountNumber

accountNumber

Set this property with @ref AQFINTS_AccountData_SetAccountNumber(), get it with @ref AQFINTS_AccountData_GetAccountNumber().

@anchor AQFINTS_ACCOUNTDATA_accountSuffix

accountSuffix

Set this property with @ref AQFINTS_AccountData_SetAccountSuffix(), get it with @ref AQFINTS_AccountData_GetAccountSuffix().

@anchor AQFINTS_ACCOUNTDATA_bankCode

bankCode

Set this property with @ref AQFINTS_AccountData_SetBankCode(), get it with @ref AQFINTS_AccountData_GetBankCode().

@anchor AQFINTS_ACCOUNTDATA_country

country

Set this property with @ref AQFINTS_AccountData_SetCountry(), get it with @ref AQFINTS_AccountData_GetCountry().

@anchor AQFINTS_ACCOUNTDATA_iban

iban

Set this property with @ref AQFINTS_AccountData_SetIban(), get it with @ref AQFINTS_AccountData_GetIban().

@anchor AQFINTS_ACCOUNTDATA_accountName

accountName

Set this property with @ref AQFINTS_AccountData_SetAccountName(), get it with @ref AQFINTS_AccountData_GetAccountName().

@anchor AQFINTS_ACCOUNTDATA_customerId

customerId

Set this property with @ref AQFINTS_AccountData_SetCustomerId(), get it with @ref AQFINTS_AccountData_GetCustomerId().

@anchor AQFINTS_ACCOUNTDATA_accountType

accountType

Set this property with @ref AQFINTS_AccountData_SetAccountType(), get it with @ref AQFINTS_AccountData_GetAccountType().

@anchor AQFINTS_ACCOUNTDATA_currency

currency

Set this property with @ref AQFINTS_AccountData_SetCurrency(), get it with @ref AQFINTS_AccountData_GetCurrency().

@anchor AQFINTS_ACCOUNTDATA_name1

name1

Set this property with @ref AQFINTS_AccountData_SetName1(), get it with @ref AQFINTS_AccountData_GetName1().

@anchor AQFINTS_ACCOUNTDATA_name2

name2

Set this property with @ref AQFINTS_AccountData_SetName2(), get it with @ref AQFINTS_AccountData_GetName2().

@anchor AQFINTS_ACCOUNTDATA_limitType

limitType

Set this property with @ref AQFINTS_AccountData_SetLimitType(), get it with @ref AQFINTS_AccountData_GetLimitType().

@anchor AQFINTS_ACCOUNTDATA_limitValue

limitValue

Set this property with @ref AQFINTS_AccountData_SetLimitValue(), get it with @ref AQFINTS_AccountData_GetLimitValue().

@anchor AQFINTS_ACCOUNTDATA_limitDays

limitDays

Set this property with @ref AQFINTS_AccountData_SetLimitDays(), get it with @ref AQFINTS_AccountData_GetLimitDays().

@anchor AQFINTS_ACCOUNTDATA_updJobs

updJobs

Set this property with @ref AQFINTS_AccountData_SetUpdJobs(), get it with @ref AQFINTS_AccountData_GetUpdJobs().

@anchor AQFINTS_ACCOUNTDATA_genericExtension

genericExtension

Set this property with @ref AQFINTS_AccountData_SetGenericExtension(), get it with @ref AQFINTS_AccountData_GetGenericExtension().

@anchor AQFINTS_ACCOUNTDATA_runtimeFlags

runtimeFlags

Set this property with @ref AQFINTS_AccountData_SetRuntimeFlags(), get it with @ref AQFINTS_AccountData_GetRuntimeFlags().

*/ /* define AQFINTS_ACCOUNTDATA_RTFLAGS */ /* define AQFINTS_ACCOUNTDATA_FLAGS */ /* needed system headers */ #include #include #include /* pre-headers */ #include typedef struct AQFINTS_ACCOUNTDATA AQFINTS_ACCOUNTDATA; GWEN_LIST_FUNCTION_DEFS(AQFINTS_ACCOUNTDATA, AQFINTS_AccountData) /* post-headers */ #include "libaqfints/service/upd/updjob.h" /** Constructor. */ AQFINTS_ACCOUNTDATA *AQFINTS_AccountData_new(void); /** Destructor. */ void AQFINTS_AccountData_free(AQFINTS_ACCOUNTDATA *p_struct); void AQFINTS_AccountData_Attach(AQFINTS_ACCOUNTDATA *p_struct); AQFINTS_ACCOUNTDATA *AQFINTS_AccountData_dup(const AQFINTS_ACCOUNTDATA *p_src); AQFINTS_ACCOUNTDATA *AQFINTS_AccountData_copy(AQFINTS_ACCOUNTDATA *p_struct, const AQFINTS_ACCOUNTDATA *p_src); /** Getter. * Use this function to get the member "accountNumber" (see @ref AQFINTS_ACCOUNTDATA_accountNumber) */ const char *AQFINTS_AccountData_GetAccountNumber(const AQFINTS_ACCOUNTDATA *p_struct); /** Getter. * Use this function to get the member "accountSuffix" (see @ref AQFINTS_ACCOUNTDATA_accountSuffix) */ const char *AQFINTS_AccountData_GetAccountSuffix(const AQFINTS_ACCOUNTDATA *p_struct); /** Getter. * Use this function to get the member "bankCode" (see @ref AQFINTS_ACCOUNTDATA_bankCode) */ const char *AQFINTS_AccountData_GetBankCode(const AQFINTS_ACCOUNTDATA *p_struct); /** Getter. * Use this function to get the member "country" (see @ref AQFINTS_ACCOUNTDATA_country) */ int AQFINTS_AccountData_GetCountry(const AQFINTS_ACCOUNTDATA *p_struct); /** Getter. * Use this function to get the member "iban" (see @ref AQFINTS_ACCOUNTDATA_iban) */ const char *AQFINTS_AccountData_GetIban(const AQFINTS_ACCOUNTDATA *p_struct); /** Getter. * Use this function to get the member "accountName" (see @ref AQFINTS_ACCOUNTDATA_accountName) */ const char *AQFINTS_AccountData_GetAccountName(const AQFINTS_ACCOUNTDATA *p_struct); /** Getter. * Use this function to get the member "customerId" (see @ref AQFINTS_ACCOUNTDATA_customerId) */ const char *AQFINTS_AccountData_GetCustomerId(const AQFINTS_ACCOUNTDATA *p_struct); /** Getter. * Use this function to get the member "accountType" (see @ref AQFINTS_ACCOUNTDATA_accountType) */ int AQFINTS_AccountData_GetAccountType(const AQFINTS_ACCOUNTDATA *p_struct); /** Getter. * Use this function to get the member "currency" (see @ref AQFINTS_ACCOUNTDATA_currency) */ const char *AQFINTS_AccountData_GetCurrency(const AQFINTS_ACCOUNTDATA *p_struct); /** Getter. * Use this function to get the member "name1" (see @ref AQFINTS_ACCOUNTDATA_name1) */ const char *AQFINTS_AccountData_GetName1(const AQFINTS_ACCOUNTDATA *p_struct); /** Getter. * Use this function to get the member "name2" (see @ref AQFINTS_ACCOUNTDATA_name2) */ const char *AQFINTS_AccountData_GetName2(const AQFINTS_ACCOUNTDATA *p_struct); /** Getter. * Use this function to get the member "limitType" (see @ref AQFINTS_ACCOUNTDATA_limitType) */ int AQFINTS_AccountData_GetLimitType(const AQFINTS_ACCOUNTDATA *p_struct); /** Getter. * Use this function to get the member "limitValue" (see @ref AQFINTS_ACCOUNTDATA_limitValue) */ const AB_VALUE *AQFINTS_AccountData_GetLimitValue(const AQFINTS_ACCOUNTDATA *p_struct); /** Getter. * Use this function to get the member "limitDays" (see @ref AQFINTS_ACCOUNTDATA_limitDays) */ int AQFINTS_AccountData_GetLimitDays(const AQFINTS_ACCOUNTDATA *p_struct); /** Getter. * Use this function to get the member "updJobs" (see @ref AQFINTS_ACCOUNTDATA_updJobs) */ AQFINTS_UPDJOB_LIST *AQFINTS_AccountData_GetUpdJobs(const AQFINTS_ACCOUNTDATA *p_struct); /** Getter. * Use this function to get the member "genericExtension" (see @ref AQFINTS_ACCOUNTDATA_genericExtension) */ const char *AQFINTS_AccountData_GetGenericExtension(const AQFINTS_ACCOUNTDATA *p_struct); /** Getter. * Use this function to get the member "runtimeFlags" (see @ref AQFINTS_ACCOUNTDATA_runtimeFlags) */ uint32_t AQFINTS_AccountData_GetRuntimeFlags(const AQFINTS_ACCOUNTDATA *p_struct); /** Setter. * Use this function to set the member "accountNumber" (see @ref AQFINTS_ACCOUNTDATA_accountNumber) */ void AQFINTS_AccountData_SetAccountNumber(AQFINTS_ACCOUNTDATA *p_struct, const char *p_src); /** Setter. * Use this function to set the member "accountSuffix" (see @ref AQFINTS_ACCOUNTDATA_accountSuffix) */ void AQFINTS_AccountData_SetAccountSuffix(AQFINTS_ACCOUNTDATA *p_struct, const char *p_src); /** Setter. * Use this function to set the member "bankCode" (see @ref AQFINTS_ACCOUNTDATA_bankCode) */ void AQFINTS_AccountData_SetBankCode(AQFINTS_ACCOUNTDATA *p_struct, const char *p_src); /** Setter. * Use this function to set the member "country" (see @ref AQFINTS_ACCOUNTDATA_country) */ void AQFINTS_AccountData_SetCountry(AQFINTS_ACCOUNTDATA *p_struct, int p_src); /** Setter. * Use this function to set the member "iban" (see @ref AQFINTS_ACCOUNTDATA_iban) */ void AQFINTS_AccountData_SetIban(AQFINTS_ACCOUNTDATA *p_struct, const char *p_src); /** Setter. * Use this function to set the member "accountName" (see @ref AQFINTS_ACCOUNTDATA_accountName) */ void AQFINTS_AccountData_SetAccountName(AQFINTS_ACCOUNTDATA *p_struct, const char *p_src); /** Setter. * Use this function to set the member "customerId" (see @ref AQFINTS_ACCOUNTDATA_customerId) */ void AQFINTS_AccountData_SetCustomerId(AQFINTS_ACCOUNTDATA *p_struct, const char *p_src); /** Setter. * Use this function to set the member "accountType" (see @ref AQFINTS_ACCOUNTDATA_accountType) */ void AQFINTS_AccountData_SetAccountType(AQFINTS_ACCOUNTDATA *p_struct, int p_src); /** Setter. * Use this function to set the member "currency" (see @ref AQFINTS_ACCOUNTDATA_currency) */ void AQFINTS_AccountData_SetCurrency(AQFINTS_ACCOUNTDATA *p_struct, const char *p_src); /** Setter. * Use this function to set the member "name1" (see @ref AQFINTS_ACCOUNTDATA_name1) */ void AQFINTS_AccountData_SetName1(AQFINTS_ACCOUNTDATA *p_struct, const char *p_src); /** Setter. * Use this function to set the member "name2" (see @ref AQFINTS_ACCOUNTDATA_name2) */ void AQFINTS_AccountData_SetName2(AQFINTS_ACCOUNTDATA *p_struct, const char *p_src); /** Setter. * Use this function to set the member "limitType" (see @ref AQFINTS_ACCOUNTDATA_limitType) */ void AQFINTS_AccountData_SetLimitType(AQFINTS_ACCOUNTDATA *p_struct, int p_src); /** Setter. * Use this function to set the member "limitValue" (see @ref AQFINTS_ACCOUNTDATA_limitValue) */ void AQFINTS_AccountData_SetLimitValue(AQFINTS_ACCOUNTDATA *p_struct, const AB_VALUE *p_src); /** Setter. * Use this function to set the member "limitDays" (see @ref AQFINTS_ACCOUNTDATA_limitDays) */ void AQFINTS_AccountData_SetLimitDays(AQFINTS_ACCOUNTDATA *p_struct, int p_src); /** Setter. * Use this function to set the member "updJobs" (see @ref AQFINTS_ACCOUNTDATA_updJobs) */ void AQFINTS_AccountData_SetUpdJobs(AQFINTS_ACCOUNTDATA *p_struct, AQFINTS_UPDJOB_LIST *p_src); /** Setter. * Use this function to set the member "genericExtension" (see @ref AQFINTS_ACCOUNTDATA_genericExtension) */ void AQFINTS_AccountData_SetGenericExtension(AQFINTS_ACCOUNTDATA *p_struct, const char *p_src); /** Setter. * Use this function to set the member "runtimeFlags" (see @ref AQFINTS_ACCOUNTDATA_runtimeFlags) */ void AQFINTS_AccountData_SetRuntimeFlags(AQFINTS_ACCOUNTDATA *p_struct, uint32_t p_src); /** Add flags. * Use this function to add flags to member "runtimeFlags" (see @ref AQFINTS_ACCOUNTDATA_runtimeFlags) */ void AQFINTS_AccountData_AddRuntimeFlags(AQFINTS_ACCOUNTDATA *p_struct, uint32_t p_src); /** Add flags. * Use this function to add flags to member "runtimeFlags" (see @ref AQFINTS_ACCOUNTDATA_runtimeFlags) */ void AQFINTS_AccountData_SubRuntimeFlags(AQFINTS_ACCOUNTDATA *p_struct, uint32_t p_src); AQFINTS_ACCOUNTDATA_LIST *AQFINTS_AccountData_List_dup(const AQFINTS_ACCOUNTDATA_LIST *p_src); void AQFINTS_AccountData_ReadDb(AQFINTS_ACCOUNTDATA *p_struct, GWEN_DB_NODE *p_db); int AQFINTS_AccountData_WriteDb(const AQFINTS_ACCOUNTDATA *p_struct, GWEN_DB_NODE *p_db); AQFINTS_ACCOUNTDATA *AQFINTS_AccountData_fromDb(GWEN_DB_NODE *p_db); int AQFINTS_AccountData_toDb(const AQFINTS_ACCOUNTDATA *p_struct, GWEN_DB_NODE *p_db); void AQFINTS_AccountData_AddUpdJob(AQFINTS_ACCOUNTDATA *st, AQFINTS_UPDJOB *j); #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/service/upd/userdata.c0000664000175000017500000003071015037736055025376 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "userdata.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "./userdata_p.h" #include #include /* code headers */ #include /* macro functions */ GWEN_LIST_FUNCTIONS(AQFINTS_USERDATA, AQFINTS_UserData) AQFINTS_USERDATA *AQFINTS_UserData_new(void) { AQFINTS_USERDATA *p_struct; GWEN_NEW_OBJECT(AQFINTS_USERDATA, p_struct) p_struct->_refCount=1; GWEN_LIST_INIT(AQFINTS_USERDATA, p_struct) /* members */ p_struct->userId=NULL; p_struct->version=0; p_struct->ignoreUpdJobs=0; p_struct->userName=NULL; p_struct->genericExtension=NULL; p_struct->accountDataList=NULL; p_struct->runtimeFlags=0; /* virtual functions */ return p_struct; } void AQFINTS_UserData_free(AQFINTS_USERDATA *p_struct) { if (p_struct) { assert(p_struct->_refCount); if (p_struct->_refCount==1) { GWEN_LIST_FINI(AQFINTS_USERDATA, p_struct) /* members */ free(p_struct->userId); p_struct->userId=NULL; free(p_struct->userName); p_struct->userName=NULL; free(p_struct->genericExtension); p_struct->genericExtension=NULL; AQFINTS_AccountData_List_free(p_struct->accountDataList); p_struct->accountDataList=NULL; p_struct->_refCount=0; GWEN_FREE_OBJECT(p_struct); } else p_struct->_refCount--; } } void AQFINTS_UserData_Attach(AQFINTS_USERDATA *p_struct) { assert(p_struct); assert(p_struct->_refCount); p_struct->_refCount++; } AQFINTS_USERDATA *AQFINTS_UserData_dup(const AQFINTS_USERDATA *p_src) { AQFINTS_USERDATA *p_struct; assert(p_src); p_struct=AQFINTS_UserData_new(); /* member "userId" */ if (p_struct->userId) { free(p_struct->userId); p_struct->userId=NULL; p_struct->userId=NULL; } if (p_src->userId) { p_struct->userId=strdup(p_src->userId); } /* member "version" */ p_struct->version=p_src->version; /* member "ignoreUpdJobs" */ p_struct->ignoreUpdJobs=p_src->ignoreUpdJobs; /* member "userName" */ if (p_struct->userName) { free(p_struct->userName); p_struct->userName=NULL; p_struct->userName=NULL; } if (p_src->userName) { p_struct->userName=strdup(p_src->userName); } /* member "genericExtension" */ if (p_struct->genericExtension) { free(p_struct->genericExtension); p_struct->genericExtension=NULL; p_struct->genericExtension=NULL; } if (p_src->genericExtension) { p_struct->genericExtension=strdup(p_src->genericExtension); } /* member "accountDataList" */ if (p_struct->accountDataList) { AQFINTS_AccountData_List_free(p_struct->accountDataList); p_struct->accountDataList=NULL; p_struct->accountDataList=NULL; } if (p_src->accountDataList) { p_struct->accountDataList=AQFINTS_AccountData_List_dup(p_src->accountDataList); } /* member "runtimeFlags" */ p_struct->runtimeFlags=p_src->runtimeFlags; return p_struct; } AQFINTS_USERDATA *AQFINTS_UserData_copy(AQFINTS_USERDATA *p_struct, const AQFINTS_USERDATA *p_src) { assert(p_struct); assert(p_src); /* member "userId" */ if (p_struct->userId) { free(p_struct->userId); p_struct->userId=NULL; p_struct->userId=NULL; } if (p_src->userId) { p_struct->userId=strdup(p_src->userId); } /* member "version" */ p_struct->version=p_src->version; /* member "ignoreUpdJobs" */ p_struct->ignoreUpdJobs=p_src->ignoreUpdJobs; /* member "userName" */ if (p_struct->userName) { free(p_struct->userName); p_struct->userName=NULL; p_struct->userName=NULL; } if (p_src->userName) { p_struct->userName=strdup(p_src->userName); } /* member "genericExtension" */ if (p_struct->genericExtension) { free(p_struct->genericExtension); p_struct->genericExtension=NULL; p_struct->genericExtension=NULL; } if (p_src->genericExtension) { p_struct->genericExtension=strdup(p_src->genericExtension); } /* member "accountDataList" */ if (p_struct->accountDataList) { AQFINTS_AccountData_List_free(p_struct->accountDataList); p_struct->accountDataList=NULL; p_struct->accountDataList=NULL; } if (p_src->accountDataList) { p_struct->accountDataList=AQFINTS_AccountData_List_dup(p_src->accountDataList); } /* member "runtimeFlags" */ p_struct->runtimeFlags=p_src->runtimeFlags; return p_struct; } const char *AQFINTS_UserData_GetUserId(const AQFINTS_USERDATA *p_struct){ assert(p_struct); return p_struct->userId; } int AQFINTS_UserData_GetVersion(const AQFINTS_USERDATA *p_struct){ assert(p_struct); return p_struct->version; } int AQFINTS_UserData_GetIgnoreUpdJobs(const AQFINTS_USERDATA *p_struct){ assert(p_struct); return p_struct->ignoreUpdJobs; } const char *AQFINTS_UserData_GetUserName(const AQFINTS_USERDATA *p_struct){ assert(p_struct); return p_struct->userName; } const char *AQFINTS_UserData_GetGenericExtension(const AQFINTS_USERDATA *p_struct){ assert(p_struct); return p_struct->genericExtension; } AQFINTS_ACCOUNTDATA_LIST *AQFINTS_UserData_GetAccountDataList(const AQFINTS_USERDATA *p_struct){ assert(p_struct); return p_struct->accountDataList; } uint32_t AQFINTS_UserData_GetRuntimeFlags(const AQFINTS_USERDATA *p_struct){ assert(p_struct); return p_struct->runtimeFlags; } void AQFINTS_UserData_SetUserId(AQFINTS_USERDATA *p_struct, const char *p_src){ assert(p_struct); if (p_struct->userId) { free(p_struct->userId); p_struct->userId=NULL; p_struct->userId=NULL; } if (p_src) { p_struct->userId=strdup(p_src); } else { p_struct->userId=NULL; } } void AQFINTS_UserData_SetVersion(AQFINTS_USERDATA *p_struct, int p_src){ assert(p_struct); p_struct->version=p_src; } void AQFINTS_UserData_SetIgnoreUpdJobs(AQFINTS_USERDATA *p_struct, int p_src){ assert(p_struct); p_struct->ignoreUpdJobs=p_src; } void AQFINTS_UserData_SetUserName(AQFINTS_USERDATA *p_struct, const char *p_src){ assert(p_struct); if (p_struct->userName) { free(p_struct->userName); p_struct->userName=NULL; p_struct->userName=NULL; } if (p_src) { p_struct->userName=strdup(p_src); } else { p_struct->userName=NULL; } } void AQFINTS_UserData_SetGenericExtension(AQFINTS_USERDATA *p_struct, const char *p_src){ assert(p_struct); if (p_struct->genericExtension) { free(p_struct->genericExtension); p_struct->genericExtension=NULL; p_struct->genericExtension=NULL; } if (p_src) { p_struct->genericExtension=strdup(p_src); } else { p_struct->genericExtension=NULL; } } void AQFINTS_UserData_SetAccountDataList(AQFINTS_USERDATA *p_struct, AQFINTS_ACCOUNTDATA_LIST *p_src){ assert(p_struct); if (p_struct->accountDataList) { AQFINTS_AccountData_List_free(p_struct->accountDataList); p_struct->accountDataList=NULL; p_struct->accountDataList=NULL; } p_struct->accountDataList=p_src; } void AQFINTS_UserData_SetRuntimeFlags(AQFINTS_USERDATA *p_struct, uint32_t p_src){ assert(p_struct); p_struct->runtimeFlags=p_src; } void AQFINTS_UserData_AddRuntimeFlags(AQFINTS_USERDATA *p_struct, uint32_t p_src) { assert(p_struct); p_struct->runtimeFlags|=p_src; } void AQFINTS_UserData_SubRuntimeFlags(AQFINTS_USERDATA *p_struct, uint32_t p_src) { assert(p_struct); p_struct->runtimeFlags&=~p_src; } AQFINTS_USERDATA_LIST *AQFINTS_UserData_List_dup(const AQFINTS_USERDATA_LIST *p_src) { AQFINTS_USERDATA_LIST *p_dest; AQFINTS_USERDATA *p_elem; assert(p_src); p_dest=AQFINTS_UserData_List_new(); p_elem=AQFINTS_UserData_List_First(p_src); while(p_elem) { AQFINTS_USERDATA *p_cpy; p_cpy=AQFINTS_UserData_dup(p_elem); AQFINTS_UserData_List_Add(p_cpy, p_dest); p_elem=AQFINTS_UserData_List_Next(p_elem); } return p_dest; } void AQFINTS_UserData_ReadDb(AQFINTS_USERDATA *p_struct, GWEN_DB_NODE *p_db){ assert(p_struct); /* member "userId" */ if (p_struct->userId) { free(p_struct->userId); p_struct->userId=NULL; p_struct->userId=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "userId", 0, NULL); if (s) p_struct->userId=strdup(s); } /* member "version" */ p_struct->version=GWEN_DB_GetIntValue(p_db, "version", 0, 0); /* member "ignoreUpdJobs" */ p_struct->ignoreUpdJobs=GWEN_DB_GetIntValue(p_db, "ignoreUpdJobs", 0, 0); /* member "userName" */ if (p_struct->userName) { free(p_struct->userName); p_struct->userName=NULL; p_struct->userName=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "userName", 0, NULL); if (s) p_struct->userName=strdup(s); } /* member "genericExtension" */ if (p_struct->genericExtension) { free(p_struct->genericExtension); p_struct->genericExtension=NULL; p_struct->genericExtension=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "genericExtension", 0, NULL); if (s) p_struct->genericExtension=strdup(s); } /* member "accountDataList" */ if (p_struct->accountDataList) { AQFINTS_AccountData_List_free(p_struct->accountDataList); p_struct->accountDataList=NULL; p_struct->accountDataList=NULL; } { GWEN_DB_NODE *dbSource; dbSource=GWEN_DB_GetGroup(p_db, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "accountDataList"); if (dbSource) { AQFINTS_ACCOUNTDATA_LIST *t; GWEN_DB_NODE *dbT; t=AQFINTS_AccountData_List_new(); dbT=GWEN_DB_FindFirstGroup(dbSource, "element"); while(dbT) { AQFINTS_ACCOUNTDATA *elem; elem=AQFINTS_AccountData_fromDb(dbT); if (elem) AQFINTS_AccountData_List_Add(elem, t); dbT=GWEN_DB_FindNextGroup(dbT, "element"); } p_struct->accountDataList=t; } else p_struct->accountDataList=NULL; } /* member "runtimeFlags" */ /* member "runtimeFlags" is volatile, just presetting it */ p_struct->runtimeFlags=0; } int AQFINTS_UserData_WriteDb(const AQFINTS_USERDATA *p_struct, GWEN_DB_NODE *p_db) { int p_rv; assert(p_struct); /* member "userId" */ if (p_struct->userId) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "userId", p_struct->userId); else { GWEN_DB_DeleteVar(p_db, "userId"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "version" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "version", p_struct->version); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "ignoreUpdJobs" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "ignoreUpdJobs", p_struct->ignoreUpdJobs); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "userName" */ if (p_struct->userName) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "userName", p_struct->userName); else { GWEN_DB_DeleteVar(p_db, "userName"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "genericExtension" */ if (p_struct->genericExtension) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "genericExtension", p_struct->genericExtension); else { GWEN_DB_DeleteVar(p_db, "genericExtension"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "accountDataList" */ { if (p_struct->accountDataList) { GWEN_DB_NODE *dbDest; AQFINTS_ACCOUNTDATA *elem; dbDest=GWEN_DB_GetGroup(p_db, GWEN_DB_FLAGS_OVERWRITE_GROUPS, "accountDataList"); assert(dbDest); p_rv=0; elem=AQFINTS_AccountData_List_First(p_struct->accountDataList); while(elem) { GWEN_DB_NODE *dbElem; dbElem=GWEN_DB_GetGroup(dbDest, GWEN_PATH_FLAGS_CREATE_GROUP, "element"); assert(dbElem); p_rv=AQFINTS_AccountData_toDb(elem, dbElem); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", p_rv); break; } elem=AQFINTS_AccountData_List_Next(elem); } } else p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "runtimeFlags" is volatile, not writing to db */ return 0; } AQFINTS_USERDATA *AQFINTS_UserData_fromDb(GWEN_DB_NODE *p_db) { AQFINTS_USERDATA *p_struct; p_struct=AQFINTS_UserData_new(); AQFINTS_UserData_ReadDb(p_struct, p_db); return p_struct; } int AQFINTS_UserData_toDb(const AQFINTS_USERDATA *p_struct, GWEN_DB_NODE *p_db) { return AQFINTS_UserData_WriteDb(p_struct, p_db); } void AQFINTS_UserData_AddAccountData(AQFINTS_USERDATA *st, AQFINTS_ACCOUNTDATA *accountData) { if (st->accountDataList==NULL) st->accountDataList=AQFINTS_AccountData_List_new(); AQFINTS_AccountData_List_Add(accountData, st->accountDataList); } /* code headers */ aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/service/upd/updjob_p.h0000664000175000017500000000134515037736055025377 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "updjob.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef AQFINTS_UPDJOB_UPDJOB_P_H #define AQFINTS_UPDJOB_UPDJOB_P_H #include "./updjob.h" #ifdef __cplusplus extern "C" { #endif struct AQFINTS_UPDJOB { GWEN_LIST_ELEMENT(AQFINTS_UPDJOB) int _refCount; uint32_t flags; char *code; int minSigs; int limitType; AB_VALUE *limitValue; char *limitCurrency; int limitDays; uint32_t runtimeFlags; /* volatile */ }; #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/service/upd/updjob.xml0000664000175000017500000000526714043610745025431 00000000000000 AQFINTS_UPDJOB AQFINTS_UpdJob updjob with_db with_list1 with_refcount
libaqfints/aqfints.h
aqbanking/types/value.h
string.h
0 0 with_flags public NULL NULL public own const dup const 0 0 public 0 0 public public own with_hash const dup const NULL NULL NULL NULL public own const dup const 0 0 public 0 0 volatile with_flags public
aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/service/upd/upd_write.h0000664000175000017500000000170514044534775025601 00000000000000/*************************************************************************** begin : Sun Jul 28 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQFINTS_UPD_WRITE_H #define AQFINTS_UPD_WRITE_H #include "libaqfints/service/upd/accountdata.h" #include "libaqfints/service/upd/userdata.h" #include "libaqfints/parser/parser.h" #include "libaqfints/parser/segment.h" #include int AQFINTS_Upd_Write(const AQFINTS_USERDATA *userData, AQFINTS_PARSER *parser, int refSegNum, AQFINTS_SEGMENT_LIST *segmentList); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/service/upd/updjob.h0000664000175000017500000001474715037736055025072 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "updjob.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef AQFINTS_UPDJOB_UPDJOB_H #define AQFINTS_UPDJOB_UPDJOB_H #ifdef __cplusplus extern "C" { #endif /** @page P_AQFINTS_UPDJOB Structure AQFINTS_UPDJOB

This page describes the properties of AQFINTS_UPDJOB.

AQFINTS_UPDJOB

@anchor AQFINTS_UPDJOB_flags

flags

Set this property with @ref AQFINTS_UpdJob_SetFlags(), get it with @ref AQFINTS_UpdJob_GetFlags().

@anchor AQFINTS_UPDJOB_code

code

Set this property with @ref AQFINTS_UpdJob_SetCode(), get it with @ref AQFINTS_UpdJob_GetCode().

@anchor AQFINTS_UPDJOB_minSigs

minSigs

Set this property with @ref AQFINTS_UpdJob_SetMinSigs(), get it with @ref AQFINTS_UpdJob_GetMinSigs().

@anchor AQFINTS_UPDJOB_runtimeFlags

runtimeFlags

Set this property with @ref AQFINTS_UpdJob_SetRuntimeFlags(), get it with @ref AQFINTS_UpdJob_GetRuntimeFlags().

Limit

@anchor AQFINTS_UPDJOB_limitType

limitType

Set this property with @ref AQFINTS_UpdJob_SetLimitType(), get it with @ref AQFINTS_UpdJob_GetLimitType().

@anchor AQFINTS_UPDJOB_limitValue

limitValue

Set this property with @ref AQFINTS_UpdJob_SetLimitValue(), get it with @ref AQFINTS_UpdJob_GetLimitValue().

@anchor AQFINTS_UPDJOB_limitCurrency

limitCurrency

Set this property with @ref AQFINTS_UpdJob_SetLimitCurrency(), get it with @ref AQFINTS_UpdJob_GetLimitCurrency().

@anchor AQFINTS_UPDJOB_limitDays

limitDays

Set this property with @ref AQFINTS_UpdJob_SetLimitDays(), get it with @ref AQFINTS_UpdJob_GetLimitDays().

*/ /* define AQFINTS_UPDJOB_RTFLAGS */ /* define AQFINTS_UPDJOB_FLAGS */ /* needed system headers */ #include #include #include /* pre-headers */ #include #include typedef struct AQFINTS_UPDJOB AQFINTS_UPDJOB; GWEN_LIST_FUNCTION_DEFS(AQFINTS_UPDJOB, AQFINTS_UpdJob) /* post-headers */ /** Constructor. */ AQFINTS_UPDJOB *AQFINTS_UpdJob_new(void); /** Destructor. */ void AQFINTS_UpdJob_free(AQFINTS_UPDJOB *p_struct); void AQFINTS_UpdJob_Attach(AQFINTS_UPDJOB *p_struct); AQFINTS_UPDJOB *AQFINTS_UpdJob_dup(const AQFINTS_UPDJOB *p_src); AQFINTS_UPDJOB *AQFINTS_UpdJob_copy(AQFINTS_UPDJOB *p_struct, const AQFINTS_UPDJOB *p_src); /** Getter. * Use this function to get the member "flags" (see @ref AQFINTS_UPDJOB_flags) */ uint32_t AQFINTS_UpdJob_GetFlags(const AQFINTS_UPDJOB *p_struct); /** Getter. * Use this function to get the member "code" (see @ref AQFINTS_UPDJOB_code) */ const char *AQFINTS_UpdJob_GetCode(const AQFINTS_UPDJOB *p_struct); /** Getter. * Use this function to get the member "minSigs" (see @ref AQFINTS_UPDJOB_minSigs) */ int AQFINTS_UpdJob_GetMinSigs(const AQFINTS_UPDJOB *p_struct); /** Getter. * Use this function to get the member "limitType" (see @ref AQFINTS_UPDJOB_limitType) */ int AQFINTS_UpdJob_GetLimitType(const AQFINTS_UPDJOB *p_struct); /** Getter. * Use this function to get the member "limitValue" (see @ref AQFINTS_UPDJOB_limitValue) */ const AB_VALUE *AQFINTS_UpdJob_GetLimitValue(const AQFINTS_UPDJOB *p_struct); /** Getter. * Use this function to get the member "limitCurrency" (see @ref AQFINTS_UPDJOB_limitCurrency) */ const char *AQFINTS_UpdJob_GetLimitCurrency(const AQFINTS_UPDJOB *p_struct); /** Getter. * Use this function to get the member "limitDays" (see @ref AQFINTS_UPDJOB_limitDays) */ int AQFINTS_UpdJob_GetLimitDays(const AQFINTS_UPDJOB *p_struct); /** Getter. * Use this function to get the member "runtimeFlags" (see @ref AQFINTS_UPDJOB_runtimeFlags) */ uint32_t AQFINTS_UpdJob_GetRuntimeFlags(const AQFINTS_UPDJOB *p_struct); /** Setter. * Use this function to set the member "flags" (see @ref AQFINTS_UPDJOB_flags) */ void AQFINTS_UpdJob_SetFlags(AQFINTS_UPDJOB *p_struct, uint32_t p_src); /** Add flags. * Use this function to add flags to member "flags" (see @ref AQFINTS_UPDJOB_flags) */ void AQFINTS_UpdJob_AddFlags(AQFINTS_UPDJOB *p_struct, uint32_t p_src); /** Add flags. * Use this function to add flags to member "flags" (see @ref AQFINTS_UPDJOB_flags) */ void AQFINTS_UpdJob_SubFlags(AQFINTS_UPDJOB *p_struct, uint32_t p_src); /** Setter. * Use this function to set the member "code" (see @ref AQFINTS_UPDJOB_code) */ void AQFINTS_UpdJob_SetCode(AQFINTS_UPDJOB *p_struct, const char *p_src); /** Setter. * Use this function to set the member "minSigs" (see @ref AQFINTS_UPDJOB_minSigs) */ void AQFINTS_UpdJob_SetMinSigs(AQFINTS_UPDJOB *p_struct, int p_src); /** Setter. * Use this function to set the member "limitType" (see @ref AQFINTS_UPDJOB_limitType) */ void AQFINTS_UpdJob_SetLimitType(AQFINTS_UPDJOB *p_struct, int p_src); /** Setter. * Use this function to set the member "limitValue" (see @ref AQFINTS_UPDJOB_limitValue) */ void AQFINTS_UpdJob_SetLimitValue(AQFINTS_UPDJOB *p_struct, const AB_VALUE *p_src); /** Setter. * Use this function to set the member "limitCurrency" (see @ref AQFINTS_UPDJOB_limitCurrency) */ void AQFINTS_UpdJob_SetLimitCurrency(AQFINTS_UPDJOB *p_struct, const char *p_src); /** Setter. * Use this function to set the member "limitDays" (see @ref AQFINTS_UPDJOB_limitDays) */ void AQFINTS_UpdJob_SetLimitDays(AQFINTS_UPDJOB *p_struct, int p_src); /** Setter. * Use this function to set the member "runtimeFlags" (see @ref AQFINTS_UPDJOB_runtimeFlags) */ void AQFINTS_UpdJob_SetRuntimeFlags(AQFINTS_UPDJOB *p_struct, uint32_t p_src); /** Add flags. * Use this function to add flags to member "runtimeFlags" (see @ref AQFINTS_UPDJOB_runtimeFlags) */ void AQFINTS_UpdJob_AddRuntimeFlags(AQFINTS_UPDJOB *p_struct, uint32_t p_src); /** Add flags. * Use this function to add flags to member "runtimeFlags" (see @ref AQFINTS_UPDJOB_runtimeFlags) */ void AQFINTS_UpdJob_SubRuntimeFlags(AQFINTS_UPDJOB *p_struct, uint32_t p_src); AQFINTS_UPDJOB_LIST *AQFINTS_UpdJob_List_dup(const AQFINTS_UPDJOB_LIST *p_src); void AQFINTS_UpdJob_ReadDb(AQFINTS_UPDJOB *p_struct, GWEN_DB_NODE *p_db); int AQFINTS_UpdJob_WriteDb(const AQFINTS_UPDJOB *p_struct, GWEN_DB_NODE *p_db); AQFINTS_UPDJOB *AQFINTS_UpdJob_fromDb(GWEN_DB_NODE *p_db); int AQFINTS_UpdJob_toDb(const AQFINTS_UPDJOB *p_struct, GWEN_DB_NODE *p_db); #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/service/upd/accountdata_p.h0000664000175000017500000000171215037736055026400 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "accountdata.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef AQFINTS_ACCOUNTDATA_ACCOUNTDATA_P_H #define AQFINTS_ACCOUNTDATA_ACCOUNTDATA_P_H #include "./accountdata.h" #ifdef __cplusplus extern "C" { #endif struct AQFINTS_ACCOUNTDATA { GWEN_LIST_ELEMENT(AQFINTS_ACCOUNTDATA) int _refCount; char *accountNumber; char *accountSuffix; char *bankCode; int country; char *iban; char *accountName; char *customerId; int accountType; char *currency; char *name1; char *name2; int limitType; AB_VALUE *limitValue; int limitDays; AQFINTS_UPDJOB_LIST *updJobs; char *genericExtension; uint32_t runtimeFlags; /* volatile */ }; #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/service/upd/upd_read.c0000664000175000017500000002110414044534775025350 00000000000000/*************************************************************************** begin : Sun Jul 28 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "upd_read.h" #include "libaqfints/aqfints.h" #include "libaqfints/service/upd/updjob.h" #include "libaqfints/service/upd/accountdata.h" #include "libaqfints/service/upd/userdata.h" #include /* ------------------------------------------------------------------------------------------------ * forward declarations * ------------------------------------------------------------------------------------------------ */ static AQFINTS_UPDJOB *readUpdJob(GWEN_DB_NODE *db); static void readAccountDataLimit(AQFINTS_ACCOUNTDATA *accountData, GWEN_DB_NODE *db); static AQFINTS_LIMIT_TYPE limitTypeFromChar(const char *s); /* ------------------------------------------------------------------------------------------------ * implementations * ------------------------------------------------------------------------------------------------ */ AQFINTS_USERDATA_LIST *AQFINTS_Upd_SampleUpdFromSegmentList(AQFINTS_SEGMENT_LIST *segmentList, int removeFromSegList) { AQFINTS_SEGMENT *segment; AQFINTS_USERDATA_LIST *userDataList; userDataList=AQFINTS_UserData_List_new(); segment=AQFINTS_Segment_List_First(segmentList); while (segment) { AQFINTS_SEGMENT *nextSegment; const char *sCode; int doRemoveSegment=0; nextSegment=AQFINTS_Segment_List_Next(segment); sCode=AQFINTS_Segment_GetCode(segment); if (sCode && *sCode && strcasecmp(sCode, "HIUPA")==0) { /* read userData */ GWEN_DB_NODE *db; db=AQFINTS_Segment_GetDbData(segment); if (db) { AQFINTS_USERDATA *userData; userData=AQFINTS_Upd_ReadUserData(db); if (userData) { DBG_ERROR(AQFINTS_LOGDOMAIN, "Adding user data"); AQFINTS_UserData_List_Add(userData, userDataList); if (removeFromSegList) doRemoveSegment=1; } } } else if (sCode && *sCode && strcasecmp(sCode, "HIUPD")==0) { /* read accountData */ GWEN_DB_NODE *db; db=AQFINTS_Segment_GetDbData(segment); if (db) { AQFINTS_ACCOUNTDATA *accountData; accountData=AQFINTS_Upd_ReadAccountData(db); if (accountData) { AQFINTS_USERDATA *userData; userData=AQFINTS_UserData_List_Last(userDataList); if (userData) { DBG_ERROR(AQFINTS_LOGDOMAIN, "Adding account data"); AQFINTS_UserData_AddAccountData(userData, accountData); } else { DBG_ERROR(AQFINTS_LOGDOMAIN, "Got account data wihtout prior userData, ignoring accountData"); AQFINTS_AccountData_free(accountData); } if (removeFromSegList) doRemoveSegment=1; } } } if (doRemoveSegment) { AQFINTS_Segment_List_Del(segment); AQFINTS_Segment_free(segment); } segment=nextSegment; } if (AQFINTS_UserData_List_GetCount(userDataList)==0) { AQFINTS_UserData_List_free(userDataList); return NULL; } return userDataList; } AQFINTS_USERDATA *AQFINTS_Upd_ReadUserData(GWEN_DB_NODE *db) { AQFINTS_USERDATA *userData; const char *s; int i; userData=AQFINTS_UserData_new(); s=GWEN_DB_GetCharValue(db, "userId", 0, NULL); if (s && *s) AQFINTS_UserData_SetUserId(userData, s); i=GWEN_DB_GetIntValue(db, "version", 0, 0); AQFINTS_UserData_SetVersion(userData, i); i=GWEN_DB_GetIntValue(db, "ignoreUpdJobs", 0, 0); AQFINTS_UserData_SetIgnoreUpdJobs(userData, i); s=GWEN_DB_GetCharValue(db, "userName", 0, NULL); if (s && *s) AQFINTS_UserData_SetUserName(userData, s); s=GWEN_DB_GetCharValue(db, "genericExt", 0, NULL); if (s && *s) AQFINTS_UserData_SetGenericExtension(userData, s); return userData; } AQFINTS_ACCOUNTDATA *AQFINTS_Upd_ReadAccountData(GWEN_DB_NODE *db) { AQFINTS_ACCOUNTDATA *accountData; const char *s; int i; GWEN_DB_NODE *dbGroup; accountData=AQFINTS_AccountData_new(); s=GWEN_DB_GetCharValue(db, "accountId", 0, NULL); if (s && *s) AQFINTS_AccountData_SetAccountNumber(accountData, s); i=GWEN_DB_GetIntValue(db, "country", 0, 280); AQFINTS_AccountData_SetCountry(accountData, i); s=GWEN_DB_GetCharValue(db, "bankCode", 0, NULL); if (s && *s) AQFINTS_AccountData_SetBankCode(accountData, s); s=GWEN_DB_GetCharValue(db, "iban", 0, NULL); if (s && *s) AQFINTS_AccountData_SetIban(accountData, s); s=GWEN_DB_GetCharValue(db, "customer", 0, NULL); if (s && *s) AQFINTS_AccountData_SetCustomerId(accountData, s); i=GWEN_DB_GetIntValue(db, "type", 0, 280); AQFINTS_AccountData_SetAccountType(accountData, i); s=GWEN_DB_GetCharValue(db, "currency", 0, NULL); if (s && *s) AQFINTS_AccountData_SetCurrency(accountData, s); s=GWEN_DB_GetCharValue(db, "name1", 0, NULL); if (s && *s) AQFINTS_AccountData_SetName1(accountData, s); s=GWEN_DB_GetCharValue(db, "name2", 0, NULL); if (s && *s) AQFINTS_AccountData_SetName2(accountData, s); s=GWEN_DB_GetCharValue(db, "accountName", 0, NULL); if (s && *s) AQFINTS_AccountData_SetAccountName(accountData, s); s=GWEN_DB_GetCharValue(db, "genericExt", 0, NULL); if (s && *s) AQFINTS_AccountData_SetGenericExtension(accountData, s); readAccountDataLimit(accountData, db); dbGroup=GWEN_DB_FindFirstGroup(db, "updJob"); while (dbGroup) { AQFINTS_UPDJOB *j; j=readUpdJob(dbGroup); assert(j); AQFINTS_AccountData_AddUpdJob(accountData, j); dbGroup=GWEN_DB_FindNextGroup(dbGroup, "updJob"); } return accountData; } void readAccountDataLimit(AQFINTS_ACCOUNTDATA *accountData, GWEN_DB_NODE *db) { GWEN_DB_NODE *dbLimit; dbLimit=GWEN_DB_FindFirstGroup(db, "limit"); if (dbLimit) { GWEN_DB_NODE *dbBtg; const char *s; int i; s=GWEN_DB_GetCharValue(dbLimit, "type", 0, NULL); if (s && *s) { AQFINTS_LIMIT_TYPE limitType; limitType=limitTypeFromChar(s); if (limitType>AQFINTS_LimitType_None) AQFINTS_AccountData_SetLimitType(accountData, limitType); } dbBtg=GWEN_DB_GetGroup(db, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "btg"); if (dbBtg) { s=GWEN_DB_GetCharValue(dbBtg, "value", 0, NULL); if (s && *s) { const char *sCurrency; AB_VALUE *val; sCurrency=GWEN_DB_GetCharValue(dbBtg, "currency", 0, NULL); val=AB_Value_fromString(s); assert(val); if (sCurrency && *sCurrency) AB_Value_SetCurrency(val, sCurrency); AQFINTS_AccountData_SetLimitValue(accountData, val); AB_Value_free(val); } i=GWEN_DB_GetIntValue(dbLimit, "days", 0, 0); AQFINTS_AccountData_SetLimitDays(accountData, i); } } } AQFINTS_UPDJOB *readUpdJob(GWEN_DB_NODE *db) { AQFINTS_UPDJOB *j; const char *s; int i; j=AQFINTS_UpdJob_new(); s=GWEN_DB_GetCharValue(db, "job", 0, NULL); if (s && *s) AQFINTS_UpdJob_SetCode(j, s); i=GWEN_DB_GetIntValue(db, "minsign", 0, 0); AQFINTS_UpdJob_SetMinSigs(j, i); s=GWEN_DB_GetCharValue(db, "limitType", 0, NULL); if (s && *s) { AQFINTS_LIMIT_TYPE limitType; limitType=limitTypeFromChar(s); if (limitType>AQFINTS_LimitType_None) AQFINTS_UpdJob_SetLimitType(j, limitType); } s=GWEN_DB_GetCharValue(db, "limitValue", 0, NULL); if (s && *s) { const char *sCurrency; AB_VALUE *val; sCurrency=GWEN_DB_GetCharValue(db, "limitCurrency", 0, NULL); val=AB_Value_fromString(s); assert(val); if (sCurrency && *sCurrency) { AB_Value_SetCurrency(val, sCurrency); AQFINTS_UpdJob_SetLimitCurrency(j, sCurrency); } AQFINTS_UpdJob_SetLimitValue(j, val); AB_Value_free(val); } return j; } AQFINTS_LIMIT_TYPE limitTypeFromChar(const char *s) { if (strcasecmp(s, "E")==0) return AQFINTS_LimitType_JobLimit; else if (strcasecmp(s, "T")==0) return AQFINTS_LimitType_DayLimit; else if (strcasecmp(s, "W")==0) return AQFINTS_LimitType_WeekLimit; else if (strcasecmp(s, "M")==0) return AQFINTS_LimitType_MonthLimit; else if (strcasecmp(s, "Z")==0) return AQFINTS_LimitType_TimeLimit; else { DBG_ERROR(0, "Unknown limit type \"%s\"", s); return AQFINTS_LimitType_Unknown; } } aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/service/upd/accountdata.xml0000664000175000017500000001325414044534775026440 00000000000000 AQFINTS_ACCOUNTDATA AQFINTS_AccountData accountdata with_db with_list1 with_refcount
libaqfints/aqfints.h
string.h
libaqfints/service/upd/updjob.h
$(api) void $(struct_prefix)_AddUpdJob($(struct_type) *st, AQFINTS_UPDJOB *j); void $(struct_prefix)_AddUpdJob($(struct_type) *st, AQFINTS_UPDJOB *j) { if (st->updJobs==NULL) st->updJobs=AQFINTS_UpdJob_List_new(); AQFINTS_UpdJob_List_Add(j, st->updJobs); }
NULL NULL public own const dup const NULL NULL public own const dup const NULL NULL public own const dup const 0 0 public NULL NULL public own const dup const NULL NULL public own const dup const NULL NULL public own const dup const 0 0 public NULL NULL public own const dup const NULL NULL public own const dup const NULL NULL public own const dup const 0 0 public public own with_hash const dup const NULL NULL 0 0 public public own none none NULL NULL public own const dup const 0 0 volatile with_flags public
aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/service/upd/updjob.c0000664000175000017500000002600315037736055025051 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "updjob.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "./updjob_p.h" #include #include /* code headers */ #include /* macro functions */ GWEN_LIST_FUNCTIONS(AQFINTS_UPDJOB, AQFINTS_UpdJob) AQFINTS_UPDJOB *AQFINTS_UpdJob_new(void) { AQFINTS_UPDJOB *p_struct; GWEN_NEW_OBJECT(AQFINTS_UPDJOB, p_struct) p_struct->_refCount=1; GWEN_LIST_INIT(AQFINTS_UPDJOB, p_struct) /* members */ p_struct->flags=0; p_struct->code=NULL; p_struct->minSigs=0; p_struct->limitType=0; p_struct->limitValue=AB_Value_new(); p_struct->limitCurrency=NULL; p_struct->limitDays=0; p_struct->runtimeFlags=0; /* virtual functions */ return p_struct; } void AQFINTS_UpdJob_free(AQFINTS_UPDJOB *p_struct) { if (p_struct) { assert(p_struct->_refCount); if (p_struct->_refCount==1) { GWEN_LIST_FINI(AQFINTS_UPDJOB, p_struct) /* members */ free(p_struct->code); p_struct->code=NULL; AB_Value_free(p_struct->limitValue); free(p_struct->limitCurrency); p_struct->limitCurrency=NULL; p_struct->_refCount=0; GWEN_FREE_OBJECT(p_struct); } else p_struct->_refCount--; } } void AQFINTS_UpdJob_Attach(AQFINTS_UPDJOB *p_struct) { assert(p_struct); assert(p_struct->_refCount); p_struct->_refCount++; } AQFINTS_UPDJOB *AQFINTS_UpdJob_dup(const AQFINTS_UPDJOB *p_src) { AQFINTS_UPDJOB *p_struct; assert(p_src); p_struct=AQFINTS_UpdJob_new(); /* member "flags" */ p_struct->flags=p_src->flags; /* member "code" */ if (p_struct->code) { free(p_struct->code); p_struct->code=NULL; p_struct->code=NULL; } if (p_src->code) { p_struct->code=strdup(p_src->code); } /* member "minSigs" */ p_struct->minSigs=p_src->minSigs; /* member "limitType" */ p_struct->limitType=p_src->limitType; /* member "limitValue" */ if (p_struct->limitValue) { AB_Value_free(p_struct->limitValue); p_struct->limitValue=NULL; } if (p_src->limitValue) { p_struct->limitValue=AB_Value_dup(p_src->limitValue); } /* member "limitCurrency" */ if (p_struct->limitCurrency) { free(p_struct->limitCurrency); p_struct->limitCurrency=NULL; p_struct->limitCurrency=NULL; } if (p_src->limitCurrency) { p_struct->limitCurrency=strdup(p_src->limitCurrency); } /* member "limitDays" */ p_struct->limitDays=p_src->limitDays; /* member "runtimeFlags" */ p_struct->runtimeFlags=p_src->runtimeFlags; return p_struct; } AQFINTS_UPDJOB *AQFINTS_UpdJob_copy(AQFINTS_UPDJOB *p_struct, const AQFINTS_UPDJOB *p_src) { assert(p_struct); assert(p_src); /* member "flags" */ p_struct->flags=p_src->flags; /* member "code" */ if (p_struct->code) { free(p_struct->code); p_struct->code=NULL; p_struct->code=NULL; } if (p_src->code) { p_struct->code=strdup(p_src->code); } /* member "minSigs" */ p_struct->minSigs=p_src->minSigs; /* member "limitType" */ p_struct->limitType=p_src->limitType; /* member "limitValue" */ if (p_struct->limitValue) { AB_Value_free(p_struct->limitValue); p_struct->limitValue=NULL; } if (p_src->limitValue) { p_struct->limitValue=AB_Value_dup(p_src->limitValue); } /* member "limitCurrency" */ if (p_struct->limitCurrency) { free(p_struct->limitCurrency); p_struct->limitCurrency=NULL; p_struct->limitCurrency=NULL; } if (p_src->limitCurrency) { p_struct->limitCurrency=strdup(p_src->limitCurrency); } /* member "limitDays" */ p_struct->limitDays=p_src->limitDays; /* member "runtimeFlags" */ p_struct->runtimeFlags=p_src->runtimeFlags; return p_struct; } uint32_t AQFINTS_UpdJob_GetFlags(const AQFINTS_UPDJOB *p_struct){ assert(p_struct); return p_struct->flags; } const char *AQFINTS_UpdJob_GetCode(const AQFINTS_UPDJOB *p_struct){ assert(p_struct); return p_struct->code; } int AQFINTS_UpdJob_GetMinSigs(const AQFINTS_UPDJOB *p_struct){ assert(p_struct); return p_struct->minSigs; } int AQFINTS_UpdJob_GetLimitType(const AQFINTS_UPDJOB *p_struct){ assert(p_struct); return p_struct->limitType; } const AB_VALUE *AQFINTS_UpdJob_GetLimitValue(const AQFINTS_UPDJOB *p_struct){ assert(p_struct); return p_struct->limitValue; } const char *AQFINTS_UpdJob_GetLimitCurrency(const AQFINTS_UPDJOB *p_struct){ assert(p_struct); return p_struct->limitCurrency; } int AQFINTS_UpdJob_GetLimitDays(const AQFINTS_UPDJOB *p_struct){ assert(p_struct); return p_struct->limitDays; } uint32_t AQFINTS_UpdJob_GetRuntimeFlags(const AQFINTS_UPDJOB *p_struct){ assert(p_struct); return p_struct->runtimeFlags; } void AQFINTS_UpdJob_SetFlags(AQFINTS_UPDJOB *p_struct, uint32_t p_src){ assert(p_struct); p_struct->flags=p_src; } void AQFINTS_UpdJob_AddFlags(AQFINTS_UPDJOB *p_struct, uint32_t p_src) { assert(p_struct); p_struct->flags|=p_src; } void AQFINTS_UpdJob_SubFlags(AQFINTS_UPDJOB *p_struct, uint32_t p_src) { assert(p_struct); p_struct->flags&=~p_src; } void AQFINTS_UpdJob_SetCode(AQFINTS_UPDJOB *p_struct, const char *p_src){ assert(p_struct); if (p_struct->code) { free(p_struct->code); p_struct->code=NULL; p_struct->code=NULL; } if (p_src) { p_struct->code=strdup(p_src); } else { p_struct->code=NULL; } } void AQFINTS_UpdJob_SetMinSigs(AQFINTS_UPDJOB *p_struct, int p_src){ assert(p_struct); p_struct->minSigs=p_src; } void AQFINTS_UpdJob_SetLimitType(AQFINTS_UPDJOB *p_struct, int p_src){ assert(p_struct); p_struct->limitType=p_src; } void AQFINTS_UpdJob_SetLimitValue(AQFINTS_UPDJOB *p_struct, const AB_VALUE *p_src){ assert(p_struct); if (p_struct->limitValue) { AB_Value_free(p_struct->limitValue); p_struct->limitValue=NULL; } if (p_src) { p_struct->limitValue=AB_Value_dup(p_src); } else { p_struct->limitValue=NULL; } } void AQFINTS_UpdJob_SetLimitCurrency(AQFINTS_UPDJOB *p_struct, const char *p_src){ assert(p_struct); if (p_struct->limitCurrency) { free(p_struct->limitCurrency); p_struct->limitCurrency=NULL; p_struct->limitCurrency=NULL; } if (p_src) { p_struct->limitCurrency=strdup(p_src); } else { p_struct->limitCurrency=NULL; } } void AQFINTS_UpdJob_SetLimitDays(AQFINTS_UPDJOB *p_struct, int p_src){ assert(p_struct); p_struct->limitDays=p_src; } void AQFINTS_UpdJob_SetRuntimeFlags(AQFINTS_UPDJOB *p_struct, uint32_t p_src){ assert(p_struct); p_struct->runtimeFlags=p_src; } void AQFINTS_UpdJob_AddRuntimeFlags(AQFINTS_UPDJOB *p_struct, uint32_t p_src) { assert(p_struct); p_struct->runtimeFlags|=p_src; } void AQFINTS_UpdJob_SubRuntimeFlags(AQFINTS_UPDJOB *p_struct, uint32_t p_src) { assert(p_struct); p_struct->runtimeFlags&=~p_src; } AQFINTS_UPDJOB_LIST *AQFINTS_UpdJob_List_dup(const AQFINTS_UPDJOB_LIST *p_src) { AQFINTS_UPDJOB_LIST *p_dest; AQFINTS_UPDJOB *p_elem; assert(p_src); p_dest=AQFINTS_UpdJob_List_new(); p_elem=AQFINTS_UpdJob_List_First(p_src); while(p_elem) { AQFINTS_UPDJOB *p_cpy; p_cpy=AQFINTS_UpdJob_dup(p_elem); AQFINTS_UpdJob_List_Add(p_cpy, p_dest); p_elem=AQFINTS_UpdJob_List_Next(p_elem); } return p_dest; } void AQFINTS_UpdJob_ReadDb(AQFINTS_UPDJOB *p_struct, GWEN_DB_NODE *p_db){ assert(p_struct); /* member "flags" */ p_struct->flags=GWEN_DB_GetIntValue(p_db, "flags", 0, 0); /* member "code" */ if (p_struct->code) { free(p_struct->code); p_struct->code=NULL; p_struct->code=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "code", 0, NULL); if (s) p_struct->code=strdup(s); } /* member "minSigs" */ p_struct->minSigs=GWEN_DB_GetIntValue(p_db, "minSigs", 0, 0); /* member "limitType" */ p_struct->limitType=GWEN_DB_GetIntValue(p_db, "limitType", 0, 0); /* member "limitValue" */ if (p_struct->limitValue) { AB_Value_free(p_struct->limitValue); p_struct->limitValue=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "limitValue", 0, NULL); if (s) p_struct->limitValue=AB_Value_fromString(s); else p_struct->limitValue=NULL; } /* member "limitCurrency" */ if (p_struct->limitCurrency) { free(p_struct->limitCurrency); p_struct->limitCurrency=NULL; p_struct->limitCurrency=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "limitCurrency", 0, NULL); if (s) p_struct->limitCurrency=strdup(s); } /* member "limitDays" */ p_struct->limitDays=GWEN_DB_GetIntValue(p_db, "limitDays", 0, 0); /* member "runtimeFlags" */ /* member "runtimeFlags" is volatile, just presetting it */ p_struct->runtimeFlags=0; } int AQFINTS_UpdJob_WriteDb(const AQFINTS_UPDJOB *p_struct, GWEN_DB_NODE *p_db) { int p_rv; assert(p_struct); /* member "flags" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "flags", p_struct->flags); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "code" */ if (p_struct->code) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "code", p_struct->code); else { GWEN_DB_DeleteVar(p_db, "code"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "minSigs" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "minSigs", p_struct->minSigs); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "limitType" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "limitType", p_struct->limitType); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "limitValue" */ if (p_struct->limitValue) { GWEN_BUFFER *tbuf=GWEN_Buffer_new(0, 64, 0, 1); AB_Value_toString(p_struct->limitValue, tbuf); p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "limitValue", GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } else { GWEN_DB_DeleteVar(p_db, "limitValue"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "limitCurrency" */ if (p_struct->limitCurrency) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "limitCurrency", p_struct->limitCurrency); else { GWEN_DB_DeleteVar(p_db, "limitCurrency"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "limitDays" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "limitDays", p_struct->limitDays); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "runtimeFlags" is volatile, not writing to db */ return 0; } AQFINTS_UPDJOB *AQFINTS_UpdJob_fromDb(GWEN_DB_NODE *p_db) { AQFINTS_UPDJOB *p_struct; p_struct=AQFINTS_UpdJob_new(); AQFINTS_UpdJob_ReadDb(p_struct, p_db); return p_struct; } int AQFINTS_UpdJob_toDb(const AQFINTS_UPDJOB *p_struct, GWEN_DB_NODE *p_db) { return AQFINTS_UpdJob_WriteDb(p_struct, p_db); } /* code headers */ aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/service/upd/accountdata.c0000664000175000017500000006404015037736055026057 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "accountdata.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "./accountdata_p.h" #include #include /* code headers */ #include /* macro functions */ GWEN_LIST_FUNCTIONS(AQFINTS_ACCOUNTDATA, AQFINTS_AccountData) AQFINTS_ACCOUNTDATA *AQFINTS_AccountData_new(void) { AQFINTS_ACCOUNTDATA *p_struct; GWEN_NEW_OBJECT(AQFINTS_ACCOUNTDATA, p_struct) p_struct->_refCount=1; GWEN_LIST_INIT(AQFINTS_ACCOUNTDATA, p_struct) /* members */ p_struct->accountNumber=NULL; p_struct->accountSuffix=NULL; p_struct->bankCode=NULL; p_struct->country=0; p_struct->iban=NULL; p_struct->accountName=NULL; p_struct->customerId=NULL; p_struct->accountType=0; p_struct->currency=NULL; p_struct->name1=NULL; p_struct->name2=NULL; p_struct->limitType=0; p_struct->limitValue=AB_Value_new(); p_struct->limitDays=0; p_struct->updJobs=NULL; p_struct->genericExtension=NULL; p_struct->runtimeFlags=0; /* virtual functions */ return p_struct; } void AQFINTS_AccountData_free(AQFINTS_ACCOUNTDATA *p_struct) { if (p_struct) { assert(p_struct->_refCount); if (p_struct->_refCount==1) { GWEN_LIST_FINI(AQFINTS_ACCOUNTDATA, p_struct) /* members */ free(p_struct->accountNumber); p_struct->accountNumber=NULL; free(p_struct->accountSuffix); p_struct->accountSuffix=NULL; free(p_struct->bankCode); p_struct->bankCode=NULL; free(p_struct->iban); p_struct->iban=NULL; free(p_struct->accountName); p_struct->accountName=NULL; free(p_struct->customerId); p_struct->customerId=NULL; free(p_struct->currency); p_struct->currency=NULL; free(p_struct->name1); p_struct->name1=NULL; free(p_struct->name2); p_struct->name2=NULL; AB_Value_free(p_struct->limitValue); AQFINTS_UpdJob_List_free(p_struct->updJobs); p_struct->updJobs=NULL; free(p_struct->genericExtension); p_struct->genericExtension=NULL; p_struct->_refCount=0; GWEN_FREE_OBJECT(p_struct); } else p_struct->_refCount--; } } void AQFINTS_AccountData_Attach(AQFINTS_ACCOUNTDATA *p_struct) { assert(p_struct); assert(p_struct->_refCount); p_struct->_refCount++; } AQFINTS_ACCOUNTDATA *AQFINTS_AccountData_dup(const AQFINTS_ACCOUNTDATA *p_src) { AQFINTS_ACCOUNTDATA *p_struct; assert(p_src); p_struct=AQFINTS_AccountData_new(); /* member "accountNumber" */ if (p_struct->accountNumber) { free(p_struct->accountNumber); p_struct->accountNumber=NULL; p_struct->accountNumber=NULL; } if (p_src->accountNumber) { p_struct->accountNumber=strdup(p_src->accountNumber); } /* member "accountSuffix" */ if (p_struct->accountSuffix) { free(p_struct->accountSuffix); p_struct->accountSuffix=NULL; p_struct->accountSuffix=NULL; } if (p_src->accountSuffix) { p_struct->accountSuffix=strdup(p_src->accountSuffix); } /* member "bankCode" */ if (p_struct->bankCode) { free(p_struct->bankCode); p_struct->bankCode=NULL; p_struct->bankCode=NULL; } if (p_src->bankCode) { p_struct->bankCode=strdup(p_src->bankCode); } /* member "country" */ p_struct->country=p_src->country; /* member "iban" */ if (p_struct->iban) { free(p_struct->iban); p_struct->iban=NULL; p_struct->iban=NULL; } if (p_src->iban) { p_struct->iban=strdup(p_src->iban); } /* member "accountName" */ if (p_struct->accountName) { free(p_struct->accountName); p_struct->accountName=NULL; p_struct->accountName=NULL; } if (p_src->accountName) { p_struct->accountName=strdup(p_src->accountName); } /* member "customerId" */ if (p_struct->customerId) { free(p_struct->customerId); p_struct->customerId=NULL; p_struct->customerId=NULL; } if (p_src->customerId) { p_struct->customerId=strdup(p_src->customerId); } /* member "accountType" */ p_struct->accountType=p_src->accountType; /* member "currency" */ if (p_struct->currency) { free(p_struct->currency); p_struct->currency=NULL; p_struct->currency=NULL; } if (p_src->currency) { p_struct->currency=strdup(p_src->currency); } /* member "name1" */ if (p_struct->name1) { free(p_struct->name1); p_struct->name1=NULL; p_struct->name1=NULL; } if (p_src->name1) { p_struct->name1=strdup(p_src->name1); } /* member "name2" */ if (p_struct->name2) { free(p_struct->name2); p_struct->name2=NULL; p_struct->name2=NULL; } if (p_src->name2) { p_struct->name2=strdup(p_src->name2); } /* member "limitType" */ p_struct->limitType=p_src->limitType; /* member "limitValue" */ if (p_struct->limitValue) { AB_Value_free(p_struct->limitValue); p_struct->limitValue=NULL; } if (p_src->limitValue) { p_struct->limitValue=AB_Value_dup(p_src->limitValue); } /* member "limitDays" */ p_struct->limitDays=p_src->limitDays; /* member "updJobs" */ if (p_struct->updJobs) { AQFINTS_UpdJob_List_free(p_struct->updJobs); p_struct->updJobs=NULL; p_struct->updJobs=NULL; } if (p_src->updJobs) { p_struct->updJobs=AQFINTS_UpdJob_List_dup(p_src->updJobs); } /* member "genericExtension" */ if (p_struct->genericExtension) { free(p_struct->genericExtension); p_struct->genericExtension=NULL; p_struct->genericExtension=NULL; } if (p_src->genericExtension) { p_struct->genericExtension=strdup(p_src->genericExtension); } /* member "runtimeFlags" */ p_struct->runtimeFlags=p_src->runtimeFlags; return p_struct; } AQFINTS_ACCOUNTDATA *AQFINTS_AccountData_copy(AQFINTS_ACCOUNTDATA *p_struct, const AQFINTS_ACCOUNTDATA *p_src) { assert(p_struct); assert(p_src); /* member "accountNumber" */ if (p_struct->accountNumber) { free(p_struct->accountNumber); p_struct->accountNumber=NULL; p_struct->accountNumber=NULL; } if (p_src->accountNumber) { p_struct->accountNumber=strdup(p_src->accountNumber); } /* member "accountSuffix" */ if (p_struct->accountSuffix) { free(p_struct->accountSuffix); p_struct->accountSuffix=NULL; p_struct->accountSuffix=NULL; } if (p_src->accountSuffix) { p_struct->accountSuffix=strdup(p_src->accountSuffix); } /* member "bankCode" */ if (p_struct->bankCode) { free(p_struct->bankCode); p_struct->bankCode=NULL; p_struct->bankCode=NULL; } if (p_src->bankCode) { p_struct->bankCode=strdup(p_src->bankCode); } /* member "country" */ p_struct->country=p_src->country; /* member "iban" */ if (p_struct->iban) { free(p_struct->iban); p_struct->iban=NULL; p_struct->iban=NULL; } if (p_src->iban) { p_struct->iban=strdup(p_src->iban); } /* member "accountName" */ if (p_struct->accountName) { free(p_struct->accountName); p_struct->accountName=NULL; p_struct->accountName=NULL; } if (p_src->accountName) { p_struct->accountName=strdup(p_src->accountName); } /* member "customerId" */ if (p_struct->customerId) { free(p_struct->customerId); p_struct->customerId=NULL; p_struct->customerId=NULL; } if (p_src->customerId) { p_struct->customerId=strdup(p_src->customerId); } /* member "accountType" */ p_struct->accountType=p_src->accountType; /* member "currency" */ if (p_struct->currency) { free(p_struct->currency); p_struct->currency=NULL; p_struct->currency=NULL; } if (p_src->currency) { p_struct->currency=strdup(p_src->currency); } /* member "name1" */ if (p_struct->name1) { free(p_struct->name1); p_struct->name1=NULL; p_struct->name1=NULL; } if (p_src->name1) { p_struct->name1=strdup(p_src->name1); } /* member "name2" */ if (p_struct->name2) { free(p_struct->name2); p_struct->name2=NULL; p_struct->name2=NULL; } if (p_src->name2) { p_struct->name2=strdup(p_src->name2); } /* member "limitType" */ p_struct->limitType=p_src->limitType; /* member "limitValue" */ if (p_struct->limitValue) { AB_Value_free(p_struct->limitValue); p_struct->limitValue=NULL; } if (p_src->limitValue) { p_struct->limitValue=AB_Value_dup(p_src->limitValue); } /* member "limitDays" */ p_struct->limitDays=p_src->limitDays; /* member "updJobs" */ if (p_struct->updJobs) { AQFINTS_UpdJob_List_free(p_struct->updJobs); p_struct->updJobs=NULL; p_struct->updJobs=NULL; } if (p_src->updJobs) { p_struct->updJobs=AQFINTS_UpdJob_List_dup(p_src->updJobs); } /* member "genericExtension" */ if (p_struct->genericExtension) { free(p_struct->genericExtension); p_struct->genericExtension=NULL; p_struct->genericExtension=NULL; } if (p_src->genericExtension) { p_struct->genericExtension=strdup(p_src->genericExtension); } /* member "runtimeFlags" */ p_struct->runtimeFlags=p_src->runtimeFlags; return p_struct; } const char *AQFINTS_AccountData_GetAccountNumber(const AQFINTS_ACCOUNTDATA *p_struct){ assert(p_struct); return p_struct->accountNumber; } const char *AQFINTS_AccountData_GetAccountSuffix(const AQFINTS_ACCOUNTDATA *p_struct){ assert(p_struct); return p_struct->accountSuffix; } const char *AQFINTS_AccountData_GetBankCode(const AQFINTS_ACCOUNTDATA *p_struct){ assert(p_struct); return p_struct->bankCode; } int AQFINTS_AccountData_GetCountry(const AQFINTS_ACCOUNTDATA *p_struct){ assert(p_struct); return p_struct->country; } const char *AQFINTS_AccountData_GetIban(const AQFINTS_ACCOUNTDATA *p_struct){ assert(p_struct); return p_struct->iban; } const char *AQFINTS_AccountData_GetAccountName(const AQFINTS_ACCOUNTDATA *p_struct){ assert(p_struct); return p_struct->accountName; } const char *AQFINTS_AccountData_GetCustomerId(const AQFINTS_ACCOUNTDATA *p_struct){ assert(p_struct); return p_struct->customerId; } int AQFINTS_AccountData_GetAccountType(const AQFINTS_ACCOUNTDATA *p_struct){ assert(p_struct); return p_struct->accountType; } const char *AQFINTS_AccountData_GetCurrency(const AQFINTS_ACCOUNTDATA *p_struct){ assert(p_struct); return p_struct->currency; } const char *AQFINTS_AccountData_GetName1(const AQFINTS_ACCOUNTDATA *p_struct){ assert(p_struct); return p_struct->name1; } const char *AQFINTS_AccountData_GetName2(const AQFINTS_ACCOUNTDATA *p_struct){ assert(p_struct); return p_struct->name2; } int AQFINTS_AccountData_GetLimitType(const AQFINTS_ACCOUNTDATA *p_struct){ assert(p_struct); return p_struct->limitType; } const AB_VALUE *AQFINTS_AccountData_GetLimitValue(const AQFINTS_ACCOUNTDATA *p_struct){ assert(p_struct); return p_struct->limitValue; } int AQFINTS_AccountData_GetLimitDays(const AQFINTS_ACCOUNTDATA *p_struct){ assert(p_struct); return p_struct->limitDays; } AQFINTS_UPDJOB_LIST *AQFINTS_AccountData_GetUpdJobs(const AQFINTS_ACCOUNTDATA *p_struct){ assert(p_struct); return p_struct->updJobs; } const char *AQFINTS_AccountData_GetGenericExtension(const AQFINTS_ACCOUNTDATA *p_struct){ assert(p_struct); return p_struct->genericExtension; } uint32_t AQFINTS_AccountData_GetRuntimeFlags(const AQFINTS_ACCOUNTDATA *p_struct){ assert(p_struct); return p_struct->runtimeFlags; } void AQFINTS_AccountData_SetAccountNumber(AQFINTS_ACCOUNTDATA *p_struct, const char *p_src){ assert(p_struct); if (p_struct->accountNumber) { free(p_struct->accountNumber); p_struct->accountNumber=NULL; p_struct->accountNumber=NULL; } if (p_src) { p_struct->accountNumber=strdup(p_src); } else { p_struct->accountNumber=NULL; } } void AQFINTS_AccountData_SetAccountSuffix(AQFINTS_ACCOUNTDATA *p_struct, const char *p_src){ assert(p_struct); if (p_struct->accountSuffix) { free(p_struct->accountSuffix); p_struct->accountSuffix=NULL; p_struct->accountSuffix=NULL; } if (p_src) { p_struct->accountSuffix=strdup(p_src); } else { p_struct->accountSuffix=NULL; } } void AQFINTS_AccountData_SetBankCode(AQFINTS_ACCOUNTDATA *p_struct, const char *p_src){ assert(p_struct); if (p_struct->bankCode) { free(p_struct->bankCode); p_struct->bankCode=NULL; p_struct->bankCode=NULL; } if (p_src) { p_struct->bankCode=strdup(p_src); } else { p_struct->bankCode=NULL; } } void AQFINTS_AccountData_SetCountry(AQFINTS_ACCOUNTDATA *p_struct, int p_src){ assert(p_struct); p_struct->country=p_src; } void AQFINTS_AccountData_SetIban(AQFINTS_ACCOUNTDATA *p_struct, const char *p_src){ assert(p_struct); if (p_struct->iban) { free(p_struct->iban); p_struct->iban=NULL; p_struct->iban=NULL; } if (p_src) { p_struct->iban=strdup(p_src); } else { p_struct->iban=NULL; } } void AQFINTS_AccountData_SetAccountName(AQFINTS_ACCOUNTDATA *p_struct, const char *p_src){ assert(p_struct); if (p_struct->accountName) { free(p_struct->accountName); p_struct->accountName=NULL; p_struct->accountName=NULL; } if (p_src) { p_struct->accountName=strdup(p_src); } else { p_struct->accountName=NULL; } } void AQFINTS_AccountData_SetCustomerId(AQFINTS_ACCOUNTDATA *p_struct, const char *p_src){ assert(p_struct); if (p_struct->customerId) { free(p_struct->customerId); p_struct->customerId=NULL; p_struct->customerId=NULL; } if (p_src) { p_struct->customerId=strdup(p_src); } else { p_struct->customerId=NULL; } } void AQFINTS_AccountData_SetAccountType(AQFINTS_ACCOUNTDATA *p_struct, int p_src){ assert(p_struct); p_struct->accountType=p_src; } void AQFINTS_AccountData_SetCurrency(AQFINTS_ACCOUNTDATA *p_struct, const char *p_src){ assert(p_struct); if (p_struct->currency) { free(p_struct->currency); p_struct->currency=NULL; p_struct->currency=NULL; } if (p_src) { p_struct->currency=strdup(p_src); } else { p_struct->currency=NULL; } } void AQFINTS_AccountData_SetName1(AQFINTS_ACCOUNTDATA *p_struct, const char *p_src){ assert(p_struct); if (p_struct->name1) { free(p_struct->name1); p_struct->name1=NULL; p_struct->name1=NULL; } if (p_src) { p_struct->name1=strdup(p_src); } else { p_struct->name1=NULL; } } void AQFINTS_AccountData_SetName2(AQFINTS_ACCOUNTDATA *p_struct, const char *p_src){ assert(p_struct); if (p_struct->name2) { free(p_struct->name2); p_struct->name2=NULL; p_struct->name2=NULL; } if (p_src) { p_struct->name2=strdup(p_src); } else { p_struct->name2=NULL; } } void AQFINTS_AccountData_SetLimitType(AQFINTS_ACCOUNTDATA *p_struct, int p_src){ assert(p_struct); p_struct->limitType=p_src; } void AQFINTS_AccountData_SetLimitValue(AQFINTS_ACCOUNTDATA *p_struct, const AB_VALUE *p_src){ assert(p_struct); if (p_struct->limitValue) { AB_Value_free(p_struct->limitValue); p_struct->limitValue=NULL; } if (p_src) { p_struct->limitValue=AB_Value_dup(p_src); } else { p_struct->limitValue=NULL; } } void AQFINTS_AccountData_SetLimitDays(AQFINTS_ACCOUNTDATA *p_struct, int p_src){ assert(p_struct); p_struct->limitDays=p_src; } void AQFINTS_AccountData_SetUpdJobs(AQFINTS_ACCOUNTDATA *p_struct, AQFINTS_UPDJOB_LIST *p_src){ assert(p_struct); if (p_struct->updJobs) { AQFINTS_UpdJob_List_free(p_struct->updJobs); p_struct->updJobs=NULL; p_struct->updJobs=NULL; } p_struct->updJobs=p_src; } void AQFINTS_AccountData_SetGenericExtension(AQFINTS_ACCOUNTDATA *p_struct, const char *p_src){ assert(p_struct); if (p_struct->genericExtension) { free(p_struct->genericExtension); p_struct->genericExtension=NULL; p_struct->genericExtension=NULL; } if (p_src) { p_struct->genericExtension=strdup(p_src); } else { p_struct->genericExtension=NULL; } } void AQFINTS_AccountData_SetRuntimeFlags(AQFINTS_ACCOUNTDATA *p_struct, uint32_t p_src){ assert(p_struct); p_struct->runtimeFlags=p_src; } void AQFINTS_AccountData_AddRuntimeFlags(AQFINTS_ACCOUNTDATA *p_struct, uint32_t p_src) { assert(p_struct); p_struct->runtimeFlags|=p_src; } void AQFINTS_AccountData_SubRuntimeFlags(AQFINTS_ACCOUNTDATA *p_struct, uint32_t p_src) { assert(p_struct); p_struct->runtimeFlags&=~p_src; } AQFINTS_ACCOUNTDATA_LIST *AQFINTS_AccountData_List_dup(const AQFINTS_ACCOUNTDATA_LIST *p_src) { AQFINTS_ACCOUNTDATA_LIST *p_dest; AQFINTS_ACCOUNTDATA *p_elem; assert(p_src); p_dest=AQFINTS_AccountData_List_new(); p_elem=AQFINTS_AccountData_List_First(p_src); while(p_elem) { AQFINTS_ACCOUNTDATA *p_cpy; p_cpy=AQFINTS_AccountData_dup(p_elem); AQFINTS_AccountData_List_Add(p_cpy, p_dest); p_elem=AQFINTS_AccountData_List_Next(p_elem); } return p_dest; } void AQFINTS_AccountData_ReadDb(AQFINTS_ACCOUNTDATA *p_struct, GWEN_DB_NODE *p_db){ assert(p_struct); /* member "accountNumber" */ if (p_struct->accountNumber) { free(p_struct->accountNumber); p_struct->accountNumber=NULL; p_struct->accountNumber=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "accountNumber", 0, NULL); if (s) p_struct->accountNumber=strdup(s); } /* member "accountSuffix" */ if (p_struct->accountSuffix) { free(p_struct->accountSuffix); p_struct->accountSuffix=NULL; p_struct->accountSuffix=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "accountSuffix", 0, NULL); if (s) p_struct->accountSuffix=strdup(s); } /* member "bankCode" */ if (p_struct->bankCode) { free(p_struct->bankCode); p_struct->bankCode=NULL; p_struct->bankCode=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "bankCode", 0, NULL); if (s) p_struct->bankCode=strdup(s); } /* member "country" */ p_struct->country=GWEN_DB_GetIntValue(p_db, "country", 0, 0); /* member "iban" */ if (p_struct->iban) { free(p_struct->iban); p_struct->iban=NULL; p_struct->iban=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "iban", 0, NULL); if (s) p_struct->iban=strdup(s); } /* member "accountName" */ if (p_struct->accountName) { free(p_struct->accountName); p_struct->accountName=NULL; p_struct->accountName=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "accountName", 0, NULL); if (s) p_struct->accountName=strdup(s); } /* member "customerId" */ if (p_struct->customerId) { free(p_struct->customerId); p_struct->customerId=NULL; p_struct->customerId=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "customerId", 0, NULL); if (s) p_struct->customerId=strdup(s); } /* member "accountType" */ p_struct->accountType=GWEN_DB_GetIntValue(p_db, "accountType", 0, 0); /* member "currency" */ if (p_struct->currency) { free(p_struct->currency); p_struct->currency=NULL; p_struct->currency=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "currency", 0, NULL); if (s) p_struct->currency=strdup(s); } /* member "name1" */ if (p_struct->name1) { free(p_struct->name1); p_struct->name1=NULL; p_struct->name1=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "name1", 0, NULL); if (s) p_struct->name1=strdup(s); } /* member "name2" */ if (p_struct->name2) { free(p_struct->name2); p_struct->name2=NULL; p_struct->name2=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "name2", 0, NULL); if (s) p_struct->name2=strdup(s); } /* member "limitType" */ p_struct->limitType=GWEN_DB_GetIntValue(p_db, "limitType", 0, 0); /* member "limitValue" */ if (p_struct->limitValue) { AB_Value_free(p_struct->limitValue); p_struct->limitValue=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "limitValue", 0, NULL); if (s) p_struct->limitValue=AB_Value_fromString(s); else p_struct->limitValue=NULL; } /* member "limitDays" */ p_struct->limitDays=GWEN_DB_GetIntValue(p_db, "limitDays", 0, 0); /* member "updJobs" */ if (p_struct->updJobs) { AQFINTS_UpdJob_List_free(p_struct->updJobs); p_struct->updJobs=NULL; p_struct->updJobs=NULL; } { GWEN_DB_NODE *dbSource; dbSource=GWEN_DB_GetGroup(p_db, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "updJobs"); if (dbSource) { AQFINTS_UPDJOB_LIST *t; GWEN_DB_NODE *dbT; t=AQFINTS_UpdJob_List_new(); dbT=GWEN_DB_FindFirstGroup(dbSource, "element"); while(dbT) { AQFINTS_UPDJOB *elem; elem=AQFINTS_UpdJob_fromDb(dbT); if (elem) AQFINTS_UpdJob_List_Add(elem, t); dbT=GWEN_DB_FindNextGroup(dbT, "element"); } p_struct->updJobs=t; } else p_struct->updJobs=NULL; } /* member "genericExtension" */ if (p_struct->genericExtension) { free(p_struct->genericExtension); p_struct->genericExtension=NULL; p_struct->genericExtension=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "genericExtension", 0, NULL); if (s) p_struct->genericExtension=strdup(s); } /* member "runtimeFlags" */ /* member "runtimeFlags" is volatile, just presetting it */ p_struct->runtimeFlags=0; } int AQFINTS_AccountData_WriteDb(const AQFINTS_ACCOUNTDATA *p_struct, GWEN_DB_NODE *p_db) { int p_rv; assert(p_struct); /* member "accountNumber" */ if (p_struct->accountNumber) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "accountNumber", p_struct->accountNumber); else { GWEN_DB_DeleteVar(p_db, "accountNumber"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "accountSuffix" */ if (p_struct->accountSuffix) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "accountSuffix", p_struct->accountSuffix); else { GWEN_DB_DeleteVar(p_db, "accountSuffix"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "bankCode" */ if (p_struct->bankCode) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "bankCode", p_struct->bankCode); else { GWEN_DB_DeleteVar(p_db, "bankCode"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "country" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "country", p_struct->country); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "iban" */ if (p_struct->iban) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "iban", p_struct->iban); else { GWEN_DB_DeleteVar(p_db, "iban"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "accountName" */ if (p_struct->accountName) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "accountName", p_struct->accountName); else { GWEN_DB_DeleteVar(p_db, "accountName"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "customerId" */ if (p_struct->customerId) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "customerId", p_struct->customerId); else { GWEN_DB_DeleteVar(p_db, "customerId"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "accountType" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "accountType", p_struct->accountType); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "currency" */ if (p_struct->currency) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "currency", p_struct->currency); else { GWEN_DB_DeleteVar(p_db, "currency"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "name1" */ if (p_struct->name1) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "name1", p_struct->name1); else { GWEN_DB_DeleteVar(p_db, "name1"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "name2" */ if (p_struct->name2) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "name2", p_struct->name2); else { GWEN_DB_DeleteVar(p_db, "name2"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "limitType" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "limitType", p_struct->limitType); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "limitValue" */ if (p_struct->limitValue) { GWEN_BUFFER *tbuf=GWEN_Buffer_new(0, 64, 0, 1); AB_Value_toString(p_struct->limitValue, tbuf); p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "limitValue", GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } else { GWEN_DB_DeleteVar(p_db, "limitValue"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "limitDays" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "limitDays", p_struct->limitDays); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "updJobs" */ { if (p_struct->updJobs) { GWEN_DB_NODE *dbDest; AQFINTS_UPDJOB *elem; dbDest=GWEN_DB_GetGroup(p_db, GWEN_DB_FLAGS_OVERWRITE_GROUPS, "updJobs"); assert(dbDest); p_rv=0; elem=AQFINTS_UpdJob_List_First(p_struct->updJobs); while(elem) { GWEN_DB_NODE *dbElem; dbElem=GWEN_DB_GetGroup(dbDest, GWEN_PATH_FLAGS_CREATE_GROUP, "element"); assert(dbElem); p_rv=AQFINTS_UpdJob_toDb(elem, dbElem); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", p_rv); break; } elem=AQFINTS_UpdJob_List_Next(elem); } } else p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "genericExtension" */ if (p_struct->genericExtension) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "genericExtension", p_struct->genericExtension); else { GWEN_DB_DeleteVar(p_db, "genericExtension"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "runtimeFlags" is volatile, not writing to db */ return 0; } AQFINTS_ACCOUNTDATA *AQFINTS_AccountData_fromDb(GWEN_DB_NODE *p_db) { AQFINTS_ACCOUNTDATA *p_struct; p_struct=AQFINTS_AccountData_new(); AQFINTS_AccountData_ReadDb(p_struct, p_db); return p_struct; } int AQFINTS_AccountData_toDb(const AQFINTS_ACCOUNTDATA *p_struct, GWEN_DB_NODE *p_db) { return AQFINTS_AccountData_WriteDb(p_struct, p_db); } void AQFINTS_AccountData_AddUpdJob(AQFINTS_ACCOUNTDATA *st, AQFINTS_UPDJOB *j) { if (st->updJobs==NULL) st->updJobs=AQFINTS_UpdJob_List_new(); AQFINTS_UpdJob_List_Add(j, st->updJobs); } /* code headers */ aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/service/upd/userdata.h0000664000175000017500000001420115037736055025400 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "userdata.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef AQFINTS_USERDATA_USERDATA_H #define AQFINTS_USERDATA_USERDATA_H #ifdef __cplusplus extern "C" { #endif /** @page P_AQFINTS_USERDATA Structure AQFINTS_USERDATA

This page describes the properties of AQFINTS_USERDATA.

AQFINTS_USERDATA

@anchor AQFINTS_USERDATA_userId

userId

Set this property with @ref AQFINTS_UserData_SetUserId(), get it with @ref AQFINTS_UserData_GetUserId().

@anchor AQFINTS_USERDATA_version

version

Set this property with @ref AQFINTS_UserData_SetVersion(), get it with @ref AQFINTS_UserData_GetVersion().

@anchor AQFINTS_USERDATA_ignoreUpdJobs

ignoreUpdJobs

Set this property with @ref AQFINTS_UserData_SetIgnoreUpdJobs(), get it with @ref AQFINTS_UserData_GetIgnoreUpdJobs().

@anchor AQFINTS_USERDATA_userName

userName

Set this property with @ref AQFINTS_UserData_SetUserName(), get it with @ref AQFINTS_UserData_GetUserName().

@anchor AQFINTS_USERDATA_genericExtension

genericExtension

Set this property with @ref AQFINTS_UserData_SetGenericExtension(), get it with @ref AQFINTS_UserData_GetGenericExtension().

@anchor AQFINTS_USERDATA_accountDataList

accountDataList

Set this property with @ref AQFINTS_UserData_SetAccountDataList(), get it with @ref AQFINTS_UserData_GetAccountDataList().

@anchor AQFINTS_USERDATA_runtimeFlags

runtimeFlags

Set this property with @ref AQFINTS_UserData_SetRuntimeFlags(), get it with @ref AQFINTS_UserData_GetRuntimeFlags().

*/ /* define AQFINTS_USERDATA_RTFLAGS */ /* define AQFINTS_USERDATA_FLAGS */ /* needed system headers */ #include #include #include /* pre-headers */ #include typedef struct AQFINTS_USERDATA AQFINTS_USERDATA; GWEN_LIST_FUNCTION_DEFS(AQFINTS_USERDATA, AQFINTS_UserData) /* post-headers */ #include "libaqfints/service/upd/accountdata.h" /** Constructor. */ AQFINTS_USERDATA *AQFINTS_UserData_new(void); /** Destructor. */ void AQFINTS_UserData_free(AQFINTS_USERDATA *p_struct); void AQFINTS_UserData_Attach(AQFINTS_USERDATA *p_struct); AQFINTS_USERDATA *AQFINTS_UserData_dup(const AQFINTS_USERDATA *p_src); AQFINTS_USERDATA *AQFINTS_UserData_copy(AQFINTS_USERDATA *p_struct, const AQFINTS_USERDATA *p_src); /** Getter. * Use this function to get the member "userId" (see @ref AQFINTS_USERDATA_userId) */ const char *AQFINTS_UserData_GetUserId(const AQFINTS_USERDATA *p_struct); /** Getter. * Use this function to get the member "version" (see @ref AQFINTS_USERDATA_version) */ int AQFINTS_UserData_GetVersion(const AQFINTS_USERDATA *p_struct); /** Getter. * Use this function to get the member "ignoreUpdJobs" (see @ref AQFINTS_USERDATA_ignoreUpdJobs) */ int AQFINTS_UserData_GetIgnoreUpdJobs(const AQFINTS_USERDATA *p_struct); /** Getter. * Use this function to get the member "userName" (see @ref AQFINTS_USERDATA_userName) */ const char *AQFINTS_UserData_GetUserName(const AQFINTS_USERDATA *p_struct); /** Getter. * Use this function to get the member "genericExtension" (see @ref AQFINTS_USERDATA_genericExtension) */ const char *AQFINTS_UserData_GetGenericExtension(const AQFINTS_USERDATA *p_struct); /** Getter. * Use this function to get the member "accountDataList" (see @ref AQFINTS_USERDATA_accountDataList) */ AQFINTS_ACCOUNTDATA_LIST *AQFINTS_UserData_GetAccountDataList(const AQFINTS_USERDATA *p_struct); /** Getter. * Use this function to get the member "runtimeFlags" (see @ref AQFINTS_USERDATA_runtimeFlags) */ uint32_t AQFINTS_UserData_GetRuntimeFlags(const AQFINTS_USERDATA *p_struct); /** Setter. * Use this function to set the member "userId" (see @ref AQFINTS_USERDATA_userId) */ void AQFINTS_UserData_SetUserId(AQFINTS_USERDATA *p_struct, const char *p_src); /** Setter. * Use this function to set the member "version" (see @ref AQFINTS_USERDATA_version) */ void AQFINTS_UserData_SetVersion(AQFINTS_USERDATA *p_struct, int p_src); /** Setter. * Use this function to set the member "ignoreUpdJobs" (see @ref AQFINTS_USERDATA_ignoreUpdJobs) */ void AQFINTS_UserData_SetIgnoreUpdJobs(AQFINTS_USERDATA *p_struct, int p_src); /** Setter. * Use this function to set the member "userName" (see @ref AQFINTS_USERDATA_userName) */ void AQFINTS_UserData_SetUserName(AQFINTS_USERDATA *p_struct, const char *p_src); /** Setter. * Use this function to set the member "genericExtension" (see @ref AQFINTS_USERDATA_genericExtension) */ void AQFINTS_UserData_SetGenericExtension(AQFINTS_USERDATA *p_struct, const char *p_src); /** Setter. * Use this function to set the member "accountDataList" (see @ref AQFINTS_USERDATA_accountDataList) */ void AQFINTS_UserData_SetAccountDataList(AQFINTS_USERDATA *p_struct, AQFINTS_ACCOUNTDATA_LIST *p_src); /** Setter. * Use this function to set the member "runtimeFlags" (see @ref AQFINTS_USERDATA_runtimeFlags) */ void AQFINTS_UserData_SetRuntimeFlags(AQFINTS_USERDATA *p_struct, uint32_t p_src); /** Add flags. * Use this function to add flags to member "runtimeFlags" (see @ref AQFINTS_USERDATA_runtimeFlags) */ void AQFINTS_UserData_AddRuntimeFlags(AQFINTS_USERDATA *p_struct, uint32_t p_src); /** Add flags. * Use this function to add flags to member "runtimeFlags" (see @ref AQFINTS_USERDATA_runtimeFlags) */ void AQFINTS_UserData_SubRuntimeFlags(AQFINTS_USERDATA *p_struct, uint32_t p_src); AQFINTS_USERDATA_LIST *AQFINTS_UserData_List_dup(const AQFINTS_USERDATA_LIST *p_src); void AQFINTS_UserData_ReadDb(AQFINTS_USERDATA *p_struct, GWEN_DB_NODE *p_db); int AQFINTS_UserData_WriteDb(const AQFINTS_USERDATA *p_struct, GWEN_DB_NODE *p_db); AQFINTS_USERDATA *AQFINTS_UserData_fromDb(GWEN_DB_NODE *p_db); int AQFINTS_UserData_toDb(const AQFINTS_USERDATA *p_struct, GWEN_DB_NODE *p_db); void AQFINTS_UserData_AddAccountData(AQFINTS_USERDATA *st, AQFINTS_ACCOUNTDATA *accountData); #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/service/upd/Makefile.am0000664000175000017500000000470314044534775025463 00000000000000 AM_CFLAGS=@visibility_cflags@ AM_CPPFLAGS = -I$(top_srcdir)/src/libs -I$(top_builddir)/src/libs $(gwenhywfar_includes) $(aqbanking_includes) \ -I$(srcdir)/../../.. \ -I$(srcdir)/../.. \ -I$(srcdir)/.. noinst_LTLIBRARIES=libafmsgupd.la typefiles= \ updjob.xml \ accountdata.xml \ userdata.xml fintsdatadir=$(aqfints_datadir)/fints fintsdata_DATA=\ upd.fints typedatadir=$(datadir)/aqbanking/typemaker2/c dist_typedata_DATA= built_sources=\ updjob.c \ accountdata.c \ userdata.c build_headers_priv=\ updjob_p.h \ accountdata_p.h \ userdata_p.h build_headers_pub=\ updjob.h \ accountdata.h \ userdata.h build_headers=$(build_headers_priv) $(build_headers_pub) noinst_HEADERS= $(build_headers) \ upd_read.h \ upd_write.h libafmsgupd_la_SOURCES= $(built_sources) \ upd_read.c \ upd_write.c EXTRA_DIST=$(typefiles) $(built_sources) $(build_headers) $(fintsdata_DATA) built_sources: $(built_sources) list='$(SUBDIRS)'; for d in $$list; do \ $(MAKE) -C $$d built_sources; \ done ; clean_build_files: rm -f $(built_sources) $(build_headers) format_built_files: for f in $(built_sources) $(build_headers); do \ $(ASTYLE) --style=stroustrup -s2 --min-conditional-indent=0 --indent-labels --max-continuation-indent=80 --pad-comma --pad-header --unpad-paren --align-pointer=name --break-closing-braces --break-one-line-headers --attach-return-type --convert-tabs --max-code-length=120 --break-after-logical --suffix=none $$f; \ done sources: for f in $(libafmsgupd_la_SOURCES) $(EXTRA_DIST); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d sources; \ done typefiles: $(typefiles) for d in $(SUBDIRS); do \ $(MAKE) -C $$d typefiles; \ done $(typemaker2_exe) -I $(top_srcdir)/src/libs/aqbanking/typemaker2/c -I $(aqbanking_dir)/share/aqbanking/aqbanking/typemaker2/c -I $(gwenhywfar_dir)/share/gwenhywfar/typemaker2/c -I $(srcdir) --destfolder="$(srcdir)" $(typefiles) typedefs: $(typefiles) for d in $(SUBDIRS); do \ $(MAKE) -C $$d typedefs; \ done $(typemaker2_exe) --defs-only -I $(top_srcdir)/src/libs/aqbanking/typemaker2/c -I $(aqbanking_dir)/share/aqbanking/aqbanking/typemaker2/c -I $(gwenhywfar_dir)/share/gwenhywfar/typemaker2/c -I $(srcdir) --destfolder="$(srcdir)" $(typefiles) cppcheck: for f in $(libafmsgupd_la_SOURCES); do \ cppcheck --force $$f ; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/service/upd/upd_write.c0000664000175000017500000001775714044534775025612 00000000000000/*************************************************************************** begin : Sun Jul 28 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "upd_write.h" #include "libaqfints/aqfints.h" #include "libaqfints/service/upd/updjob.h" #include "libaqfints/service/upd/accountdata.h" #include "libaqfints/service/upd/userdata.h" #include /* ------------------------------------------------------------------------------------------------ * forward declarations * ------------------------------------------------------------------------------------------------ */ static void _writeUserData(const AQFINTS_USERDATA *userData, GWEN_DB_NODE *db); static void _writeAccountData(const AQFINTS_ACCOUNTDATA *accountData, GWEN_DB_NODE *db); static void _writeUpdJob(const AQFINTS_UPDJOB *updJob, GWEN_DB_NODE *db); static const char *_limitTypeToChar(AQFINTS_LIMIT_TYPE t); /* ------------------------------------------------------------------------------------------------ * implementations * ------------------------------------------------------------------------------------------------ */ int AQFINTS_Upd_Write(const AQFINTS_USERDATA *userData, AQFINTS_PARSER *parser, int refSegNum, AQFINTS_SEGMENT_LIST *segmentList) { AQFINTS_SEGMENT *segment; GWEN_DB_NODE *dbSegment; AQFINTS_ACCOUNTDATA_LIST *accountDataList; segment=AQFINTS_Parser_CreateSegmentByCode(parser, "HIUPA", 0); if (segment==NULL) { DBG_INFO(AQFINTS_LOGDOMAIN, "Segment definition not found"); return GWEN_ERROR_GENERIC; } dbSegment=AQFINTS_Segment_GetDbData(segment); _writeUserData(userData, dbSegment); AQFINTS_Segment_SetRefSegmentNumber(segment, refSegNum); AQFINTS_Segment_List_Add(segment, segmentList); accountDataList=AQFINTS_UserData_GetAccountDataList(userData); if (accountDataList && AQFINTS_AccountData_List_GetCount(accountDataList)) { AQFINTS_ACCOUNTDATA *accountData; accountData=AQFINTS_AccountData_List_First(accountDataList); while (accountData) { segment=AQFINTS_Parser_CreateSegmentByCode(parser, "HIUPD", 0); if (segment==NULL) { DBG_INFO(AQFINTS_LOGDOMAIN, "Segment definition not found"); return GWEN_ERROR_GENERIC; } dbSegment=AQFINTS_Segment_GetDbData(segment); _writeAccountData(accountData, dbSegment); AQFINTS_Segment_SetRefSegmentNumber(segment, refSegNum); AQFINTS_Segment_List_Add(segment, segmentList); accountData=AQFINTS_AccountData_List_Next(accountData); } } return 0; } void _writeUserData(const AQFINTS_USERDATA *userData, GWEN_DB_NODE *db) { const char *s; int i; s=AQFINTS_UserData_GetUserId(userData); if (s && *s) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "userId", s); i=AQFINTS_UserData_GetVersion(userData); if (i>=0) GWEN_DB_SetIntValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "version", i); i=AQFINTS_UserData_GetIgnoreUpdJobs(userData); GWEN_DB_SetIntValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "ignoreUPDJobs", i); s=AQFINTS_UserData_GetUserName(userData); if (s && *s) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "userName", s); s=AQFINTS_UserData_GetGenericExtension(userData); if (s && *s) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "genericExt", s); } void _writeAccountData(const AQFINTS_ACCOUNTDATA *accountData, GWEN_DB_NODE *db) { const char *s; int i; AQFINTS_UPDJOB_LIST *updJobList; s=AQFINTS_AccountData_GetAccountNumber(accountData); if (s && *s) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "accountId", s); s=AQFINTS_AccountData_GetAccountSuffix(accountData); if (s && *s) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "accountSubId", s); s=AQFINTS_AccountData_GetBankCode(accountData); if (s && *s) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "bankCode", s); i=AQFINTS_AccountData_GetCountry(accountData); if (i>=0) GWEN_DB_SetIntValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "country", i); s=AQFINTS_AccountData_GetIban(accountData); if (s && *s) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "iban", s); s=AQFINTS_AccountData_GetAccountName(accountData); if (s && *s) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "accountName", s); s=AQFINTS_AccountData_GetCustomerId(accountData); if (s && *s) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "customer", s); i=AQFINTS_AccountData_GetAccountType(accountData); GWEN_DB_SetIntValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "type", i); s=AQFINTS_AccountData_GetCurrency(accountData); if (s && *s) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "currency", s); s=AQFINTS_AccountData_GetName1(accountData); if (s && *s) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "name1", s); s=AQFINTS_AccountData_GetName2(accountData); if (s && *s) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "name2", s); s=_limitTypeToChar(AQFINTS_AccountData_GetLimitType(accountData)); if (s && *s) { const AB_VALUE *v; GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "limitType", s); v=AQFINTS_AccountData_GetLimitValue(accountData); if (v) { GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 32, 0, 1); AB_Value_toHbciString(v, tbuf); GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "limitValue", GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } i=AQFINTS_AccountData_GetLimitDays(accountData); if (i>0) GWEN_DB_SetIntValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "limitDays", i); } updJobList=AQFINTS_AccountData_GetUpdJobs(accountData); if (updJobList && AQFINTS_UpdJob_List_GetCount(updJobList)) { AQFINTS_UPDJOB *updJob; updJob=AQFINTS_UpdJob_List_First(updJobList); while (updJob) { GWEN_DB_NODE *dbUpdJob; dbUpdJob=GWEN_DB_GetGroup(db, GWEN_PATH_FLAGS_CREATE_GROUP, "updjob"); _writeUpdJob(updJob, dbUpdJob); updJob=AQFINTS_UpdJob_List_Next(updJob); } } s=AQFINTS_AccountData_GetGenericExtension(accountData); if (s && *s) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "genericExt", s); } void _writeUpdJob(const AQFINTS_UPDJOB *updJob, GWEN_DB_NODE *db) { const char *s; int i; s=AQFINTS_UpdJob_GetCode(updJob); if (s && *s) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "job", s); i=AQFINTS_UpdJob_GetMinSigs(updJob); if (i>0) GWEN_DB_SetIntValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "minsign", i); s=_limitTypeToChar(AQFINTS_UpdJob_GetLimitType(updJob)); if (s && *s) { const AB_VALUE *v; GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "limitType", s); v=AQFINTS_UpdJob_GetLimitValue(updJob); if (v) { GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 32, 0, 1); AB_Value_toHbciString(v, tbuf); GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "limitValue", GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } s=AQFINTS_UpdJob_GetLimitCurrency(updJob); if (s && *s) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "limitCurrency", s); i=AQFINTS_UpdJob_GetLimitDays(updJob); if (i>0) GWEN_DB_SetIntValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "limitDays", i); } } const char *_limitTypeToChar(AQFINTS_LIMIT_TYPE t) { switch (t) { case AQFINTS_LimitType_JobLimit: return "E"; case AQFINTS_LimitType_DayLimit: return "T"; case AQFINTS_LimitType_WeekLimit: return "W"; case AQFINTS_LimitType_MonthLimit: return "M"; case AQFINTS_LimitType_TimeLimit: return "Z"; default: break; } return NULL; } aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/service/upd/upd.fints0000664000175000017500000001372714043610745025261 00000000000000 aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/service/upd/userdata_p.h0000664000175000017500000000140215037736055025716 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "userdata.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef AQFINTS_USERDATA_USERDATA_P_H #define AQFINTS_USERDATA_USERDATA_P_H #include "./userdata.h" #ifdef __cplusplus extern "C" { #endif struct AQFINTS_USERDATA { GWEN_LIST_ELEMENT(AQFINTS_USERDATA) int _refCount; char *userId; int version; int ignoreUpdJobs; char *userName; char *genericExtension; AQFINTS_ACCOUNTDATA_LIST *accountDataList; uint32_t runtimeFlags; /* volatile */ }; #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/service/upd/userdata.xml0000664000175000017500000000644114044534775025762 00000000000000 AQFINTS_USERDATA AQFINTS_UserData userdata with_db with_list1 with_refcount
libaqfints/aqfints.h
string.h
libaqfints/service/upd/accountdata.h
$(api) void $(struct_prefix)_AddAccountData($(struct_type) *st, AQFINTS_ACCOUNTDATA *accountData); void $(struct_prefix)_AddAccountData($(struct_type) *st, AQFINTS_ACCOUNTDATA *accountData) { if (st->accountDataList==NULL) st->accountDataList=AQFINTS_AccountData_List_new(); AQFINTS_AccountData_List_Add(accountData, st->accountDataList); }
NULL NULL public own const dup const 0 0 public 0 0 public NULL NULL public own const dup const NULL NULL public own const dup const public own none none 0 0 volatile with_flags public
aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/service/upd/upd_read.h0000664000175000017500000000337614044534775025370 00000000000000/*************************************************************************** begin : Sun Jul 28 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQFINTS_UPD_READ_H #define AQFINTS_UPD_READ_H #include "libaqfints/service/upd/accountdata.h" #include "libaqfints/service/upd/userdata.h" #include "libaqfints/parser/segment.h" #include /** * Sample user ("HIUPA") and account ("HIUPD") data from a given segment list. * * @return list of userData objects (NULL if there were no matching segments in the list) * @param segmentList list of segments from which to extract UPD data * @param removeFromSegList if nonzero transformed segments are removed from the list */ AQFINTS_USERDATA_LIST *AQFINTS_Upd_SampleUpdFromSegmentList(AQFINTS_SEGMENT_LIST *segmentList, int removeFromSegList); /** * Read a AQFINTS_USERDATA from a DB created by @ref AQFINTS_Parser_ReadSegmentListToDb(). * * @return AQFINTS_USERDATA object (asserts on error) * @param db db node with a "UserData" group */ AQFINTS_USERDATA *AQFINTS_Upd_ReadUserData(GWEN_DB_NODE *db); /** * Read a AQFINTS_ACCOUNTDATA from a DB created by @ref AQFINTS_Parser_ReadSegmentListToDb(). * * @return AQFINTS_ACCOUNTDATA object (asserts on error) * @param db db node with a "AccountData" group */ AQFINTS_ACCOUNTDATA *AQFINTS_Upd_ReadAccountData(GWEN_DB_NODE *db); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/service/upd/Makefile.in0000644000175000017500000007143315037736025025471 00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/libs/plugins/backends/aqfints/libaqfints/service/upd ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/distri.m4 $(top_srcdir)/m4/gwenhywfar.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/os.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(dist_typedata_DATA) \ $(noinst_HEADERS) $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libafmsgupd_la_LIBADD = am__objects_1 = updjob.lo accountdata.lo userdata.lo am_libafmsgupd_la_OBJECTS = $(am__objects_1) upd_read.lo upd_write.lo libafmsgupd_la_OBJECTS = $(am_libafmsgupd_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/accountdata.Plo \ ./$(DEPDIR)/upd_read.Plo ./$(DEPDIR)/upd_write.Plo \ ./$(DEPDIR)/updjob.Plo ./$(DEPDIR)/userdata.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libafmsgupd_la_SOURCES) DIST_SOURCES = $(libafmsgupd_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(typedatadir)" \ "$(DESTDIR)$(fintsdatadir)" DATA = $(dist_typedata_DATA) $(fintsdata_DATA) HEADERS = $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADD_ACLOCAL_FLAGS = @ADD_ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AQBANKING_CLI_VERSION_STRING = @AQBANKING_CLI_VERSION_STRING@ AQBANKING_FINTS_VERSION_STRING = @AQBANKING_FINTS_VERSION_STRING@ AQBANKING_SO_AGE = @AQBANKING_SO_AGE@ AQBANKING_SO_CURRENT = @AQBANKING_SO_CURRENT@ AQBANKING_SO_EFFECTIVE = @AQBANKING_SO_EFFECTIVE@ AQBANKING_SO_REVISION = @AQBANKING_SO_REVISION@ AQBANKING_VERSION_BUILD = @AQBANKING_VERSION_BUILD@ AQBANKING_VERSION_FULL_STRING = @AQBANKING_VERSION_FULL_STRING@ AQBANKING_VERSION_MAJOR = @AQBANKING_VERSION_MAJOR@ AQBANKING_VERSION_MINOR = @AQBANKING_VERSION_MINOR@ AQBANKING_VERSION_PATCHLEVEL = @AQBANKING_VERSION_PATCHLEVEL@ AQBANKING_VERSION_RELEASE_STRING = @AQBANKING_VERSION_RELEASE_STRING@ AQBANKING_VERSION_STRING = @AQBANKING_VERSION_STRING@ AQBANKING_VERSION_TAG = @AQBANKING_VERSION_TAG@ AQEBICS_CFLAGS = @AQEBICS_CFLAGS@ AQEBICS_LIBS = @AQEBICS_LIBS@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATETIME = @DATETIME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_EXCLUDE_PATTERNS = @DOXYGEN_EXCLUDE_PATTERNS@ DOXYGEN_FILE_PATTERNS = @DOXYGEN_FILE_PATTERNS@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENGUI_GTK2_CFLAGS = @GWENGUI_GTK2_CFLAGS@ GWENGUI_GTK2_LIBS = @GWENGUI_GTK2_LIBS@ GWENHYWFAR_MINIMUM_VERSION = @GWENHYWFAR_MINIMUM_VERSION@ HAVE_GWENGUI_GTK2 = @HAVE_GWENGUI_GTK2@ HAVE_I18N = @HAVE_I18N@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIBXSLT_CFLAGS = @LIBXSLT_CFLAGS@ LIBXSLT_LIBS = @LIBXSLT_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_SUPPORTS_QT = @MSGFMT_SUPPORTS_QT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ TUTORIALS = @TUTORIALS@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XMLMERGE = @XMLMERGE@ XMLSEC_CFLAGS = @XMLSEC_CFLAGS@ XMLSEC_LIBS = @XMLSEC_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ aqbanking_backends = @aqbanking_backends@ aqbanking_cfg_searchdir = @aqbanking_cfg_searchdir@ aqbanking_data_searchdir = @aqbanking_data_searchdir@ aqbanking_headerdir = @aqbanking_headerdir@ aqbanking_headerdir_am = @aqbanking_headerdir_am@ aqbanking_includes = @aqbanking_includes@ aqbanking_internal_libs = @aqbanking_internal_libs@ aqbanking_ldflags = @aqbanking_ldflags@ aqbanking_libs = @aqbanking_libs@ aqbanking_locale_searchdir = @aqbanking_locale_searchdir@ aqbanking_modules = @aqbanking_modules@ aqbanking_pkgdatadir = @aqbanking_pkgdatadir@ aqbanking_plugin_searchdir = @aqbanking_plugin_searchdir@ aqbanking_plugindir = @aqbanking_plugindir@ aqbanking_plugins_backends_dirs = @aqbanking_plugins_backends_dirs@ aqbanking_plugins_backends_libs = @aqbanking_plugins_backends_libs@ aqbanking_plugins_bankinfo_dirs = @aqbanking_plugins_bankinfo_dirs@ aqbanking_plugins_bankinfo_libs = @aqbanking_plugins_bankinfo_libs@ aqbanking_plugins_imexporters_dirs = @aqbanking_plugins_imexporters_dirs@ aqbanking_plugins_imexporters_libs = @aqbanking_plugins_imexporters_libs@ aqbanking_plugins_parsers_dirs = @aqbanking_plugins_parsers_dirs@ aqbanking_symlinkdir = @aqbanking_symlinkdir@ aqbanking_sys_is_windows = @aqbanking_sys_is_windows@ aqbankingpp_modules = @aqbankingpp_modules@ aqebics_datadir = @aqebics_datadir@ aqebics_includes = @aqebics_includes@ aqebics_internal_libs = @aqebics_internal_libs@ aqebics_ldflags = @aqebics_ldflags@ aqebics_libs = @aqebics_libs@ aqfints_datadir = @aqfints_datadir@ aqhbci_datadir = @aqhbci_datadir@ aqhbci_includes = @aqhbci_includes@ aqhbci_internal_libs = @aqhbci_internal_libs@ aqhbci_ldflags = @aqhbci_ldflags@ aqhbci_libs = @aqhbci_libs@ aqofxconnect_includes = @aqofxconnect_includes@ aqofxconnect_internal_libs = @aqofxconnect_internal_libs@ aqofxconnect_libs = @aqofxconnect_libs@ aqpaypal_includes = @aqpaypal_includes@ aqpaypal_internal_libs = @aqpaypal_internal_libs@ aqpaypal_libs = @aqpaypal_libs@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gmp_libs = @gmp_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_dir = @gwenhywfar_dir@ gwenhywfar_has_crypt = @gwenhywfar_has_crypt@ gwenhywfar_headers = @gwenhywfar_headers@ gwenhywfar_includes = @gwenhywfar_includes@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_plugins = @gwenhywfar_plugins@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ typemaker2_exe = @typemaker2_exe@ visibility_cflags = @visibility_cflags@ with_aqebics = @with_aqebics@ with_aqhbci = @with_aqhbci@ AM_CFLAGS = @visibility_cflags@ AM_CPPFLAGS = -I$(top_srcdir)/src/libs -I$(top_builddir)/src/libs $(gwenhywfar_includes) $(aqbanking_includes) \ -I$(srcdir)/../../.. \ -I$(srcdir)/../.. \ -I$(srcdir)/.. noinst_LTLIBRARIES = libafmsgupd.la typefiles = \ updjob.xml \ accountdata.xml \ userdata.xml fintsdatadir = $(aqfints_datadir)/fints fintsdata_DATA = \ upd.fints typedatadir = $(datadir)/aqbanking/typemaker2/c dist_typedata_DATA = built_sources = \ updjob.c \ accountdata.c \ userdata.c build_headers_priv = \ updjob_p.h \ accountdata_p.h \ userdata_p.h build_headers_pub = \ updjob.h \ accountdata.h \ userdata.h build_headers = $(build_headers_priv) $(build_headers_pub) noinst_HEADERS = $(build_headers) \ upd_read.h \ upd_write.h libafmsgupd_la_SOURCES = $(built_sources) \ upd_read.c \ upd_write.c EXTRA_DIST = $(typefiles) $(built_sources) $(build_headers) $(fintsdata_DATA) all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libs/plugins/backends/aqfints/libaqfints/service/upd/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libs/plugins/backends/aqfints/libaqfints/service/upd/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libafmsgupd.la: $(libafmsgupd_la_OBJECTS) $(libafmsgupd_la_DEPENDENCIES) $(EXTRA_libafmsgupd_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libafmsgupd_la_OBJECTS) $(libafmsgupd_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/accountdata.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/upd_read.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/upd_write.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/updjob.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/userdata.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-dist_typedataDATA: $(dist_typedata_DATA) @$(NORMAL_INSTALL) @list='$(dist_typedata_DATA)'; test -n "$(typedatadir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(typedatadir)'"; \ $(MKDIR_P) "$(DESTDIR)$(typedatadir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(typedatadir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(typedatadir)" || exit $$?; \ done uninstall-dist_typedataDATA: @$(NORMAL_UNINSTALL) @list='$(dist_typedata_DATA)'; test -n "$(typedatadir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(typedatadir)'; $(am__uninstall_files_from_dir) install-fintsdataDATA: $(fintsdata_DATA) @$(NORMAL_INSTALL) @list='$(fintsdata_DATA)'; test -n "$(fintsdatadir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(fintsdatadir)'"; \ $(MKDIR_P) "$(DESTDIR)$(fintsdatadir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(fintsdatadir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(fintsdatadir)" || exit $$?; \ done uninstall-fintsdataDATA: @$(NORMAL_UNINSTALL) @list='$(fintsdata_DATA)'; test -n "$(fintsdatadir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(fintsdatadir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(typedatadir)" "$(DESTDIR)$(fintsdatadir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/accountdata.Plo -rm -f ./$(DEPDIR)/upd_read.Plo -rm -f ./$(DEPDIR)/upd_write.Plo -rm -f ./$(DEPDIR)/updjob.Plo -rm -f ./$(DEPDIR)/userdata.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dist_typedataDATA install-fintsdataDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/accountdata.Plo -rm -f ./$(DEPDIR)/upd_read.Plo -rm -f ./$(DEPDIR)/upd_write.Plo -rm -f ./$(DEPDIR)/updjob.Plo -rm -f ./$(DEPDIR)/userdata.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-dist_typedataDATA uninstall-fintsdataDATA .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-generic clean-libtool clean-noinstLTLIBRARIES \ cscopelist-am ctags ctags-am distclean distclean-compile \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dist_typedataDATA \ install-dvi install-dvi-am install-exec install-exec-am \ install-fintsdataDATA install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am \ uninstall-dist_typedataDATA uninstall-fintsdataDATA .PRECIOUS: Makefile built_sources: $(built_sources) list='$(SUBDIRS)'; for d in $$list; do \ $(MAKE) -C $$d built_sources; \ done ; clean_build_files: rm -f $(built_sources) $(build_headers) format_built_files: for f in $(built_sources) $(build_headers); do \ $(ASTYLE) --style=stroustrup -s2 --min-conditional-indent=0 --indent-labels --max-continuation-indent=80 --pad-comma --pad-header --unpad-paren --align-pointer=name --break-closing-braces --break-one-line-headers --attach-return-type --convert-tabs --max-code-length=120 --break-after-logical --suffix=none $$f; \ done sources: for f in $(libafmsgupd_la_SOURCES) $(EXTRA_DIST); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d sources; \ done typefiles: $(typefiles) for d in $(SUBDIRS); do \ $(MAKE) -C $$d typefiles; \ done $(typemaker2_exe) -I $(top_srcdir)/src/libs/aqbanking/typemaker2/c -I $(aqbanking_dir)/share/aqbanking/aqbanking/typemaker2/c -I $(gwenhywfar_dir)/share/gwenhywfar/typemaker2/c -I $(srcdir) --destfolder="$(srcdir)" $(typefiles) typedefs: $(typefiles) for d in $(SUBDIRS); do \ $(MAKE) -C $$d typedefs; \ done $(typemaker2_exe) --defs-only -I $(top_srcdir)/src/libs/aqbanking/typemaker2/c -I $(aqbanking_dir)/share/aqbanking/aqbanking/typemaker2/c -I $(gwenhywfar_dir)/share/gwenhywfar/typemaker2/c -I $(srcdir) --destfolder="$(srcdir)" $(typefiles) cppcheck: for f in $(libafmsgupd_la_SOURCES); do \ cppcheck --force $$f ; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/service/dummy.c0000664000175000017500000000000014043610745024107 00000000000000aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/aqfints.c0000664000175000017500000000336014043610745022775 00000000000000/*************************************************************************** begin : Sun Jul 28 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "libaqfints/aqfints.h" #include #include #include static void _openLogger(const char *sLogdomainId, const char *sLogdomainLabel, const char *sEnvName); int AQFINTS_Init() { int rv; rv=GWEN_Init(); if (rv) { DBG_ERROR_ERR(AQFINTS_LOGDOMAIN, rv); return rv; } _openLogger(AQFINTS_LOGDOMAIN, "aqfints", "AQFINTS_LOGLEVEL"); _openLogger(AQFINTS_PARSER_LOGDOMAIN, "aqfints-parser", "AQFINTS_PARSER_LOGLEVEL"); DBG_INFO(AQFINTS_LOGDOMAIN, "AqFinTS initialising"); return 0; } int AQFINTS_Fini() { GWEN_Logger_Close(AQFINTS_LOGDOMAIN); GWEN_Fini(); return 0; } void _openLogger(const char *sLogdomainId, const char *sLogdomainLabel, const char *sEnvName) { const char *s; if (!GWEN_Logger_IsOpen(sLogdomainId)) { GWEN_Logger_Open(sLogdomainId, sLogdomainLabel, 0, GWEN_LoggerType_Console, GWEN_LoggerFacility_User); } s=getenv(sEnvName); if (s && *s) { GWEN_LOGGER_LEVEL ll; ll=GWEN_Logger_Name2Level(s); GWEN_Logger_SetLevel(sLogdomainId, ll); } else GWEN_Logger_SetLevel(sLogdomainId, GWEN_LoggerLevel_Notice); } aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/TODO0000664000175000017500000000004214043610745021646 00000000000000Next: - upd_write (HIUPD, HIUPA) aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/parser/0000755000175000017500000000000015037736161022541 500000000000000aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/parser/element.h0000664000175000017500000002357715037736054024304 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "element.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef AQFINTS_ELEMENT_ELEMENT_H #define AQFINTS_ELEMENT_ELEMENT_H #ifdef __cplusplus extern "C" { #endif /** @page P_AQFINTS_ELEMENT Structure AQFINTS_ELEMENT

This page describes the properties of AQFINTS_ELEMENT.

AQFINTS_ELEMENT

@anchor AQFINTS_ELEMENT_flags

flags

Set this property with @ref AQFINTS_Element_SetFlags(), get it with @ref AQFINTS_Element_GetFlags().

@anchor AQFINTS_ELEMENT_elementType

elementType

Set this property with @ref AQFINTS_Element_SetElementType(), get it with @ref AQFINTS_Element_GetElementType().

@anchor AQFINTS_ELEMENT_id

id

Set this property with @ref AQFINTS_Element_SetId(), get it with @ref AQFINTS_Element_GetId().

@anchor AQFINTS_ELEMENT_name

name

Set this property with @ref AQFINTS_Element_SetName(), get it with @ref AQFINTS_Element_GetName().

@anchor AQFINTS_ELEMENT_version

version

Set this property with @ref AQFINTS_Element_SetVersion(), get it with @ref AQFINTS_Element_GetVersion().

@anchor AQFINTS_ELEMENT_type

type

Set this property with @ref AQFINTS_Element_SetType(), get it with @ref AQFINTS_Element_GetType().

@anchor AQFINTS_ELEMENT_minNum

minNum

Set this property with @ref AQFINTS_Element_SetMinNum(), get it with @ref AQFINTS_Element_GetMinNum().

@anchor AQFINTS_ELEMENT_maxNum

maxNum

Set this property with @ref AQFINTS_Element_SetMaxNum(), get it with @ref AQFINTS_Element_GetMaxNum().

@anchor AQFINTS_ELEMENT_minSize

minSize

Set this property with @ref AQFINTS_Element_SetMinSize(), get it with @ref AQFINTS_Element_GetMinSize().

@anchor AQFINTS_ELEMENT_maxSize

maxSize

Set this property with @ref AQFINTS_Element_SetMaxSize(), get it with @ref AQFINTS_Element_GetMaxSize().

@anchor AQFINTS_ELEMENT_trustLevel

trustLevel

Set this property with @ref AQFINTS_Element_SetTrustLevel(), get it with @ref AQFINTS_Element_GetTrustLevel().

@anchor AQFINTS_ELEMENT_data

data

Set this property with @ref AQFINTS_Element_SetData(), get it with @ref AQFINTS_Element_GetData().

@anchor AQFINTS_ELEMENT_runtimeFlags

runtimeFlags

Set this property with @ref AQFINTS_Element_SetRuntimeFlags(), get it with @ref AQFINTS_Element_GetRuntimeFlags().

*/ /* define AQFINTS_ELEMENT_RTFLAGS */ /* define AQFINTS_ELEMENT_FLAGS */ #define AQFINTS_ELEMENT_FLAGS_ISBIN 0x00000001 #define AQFINTS_ELEMENT_FLAGS_LEFTFILL 0x00000002 #define AQFINTS_ELEMENT_FLAGS_RIGHTFILL 0x00000004 /* needed system headers */ #include #include #include /* pre-headers */ #include #include typedef struct AQFINTS_ELEMENT AQFINTS_ELEMENT; GWEN_TREE2_FUNCTION_DEFS(AQFINTS_ELEMENT, AQFINTS_Element) typedef enum { AQFINTS_ElementType_Unknown = -1, AQFINTS_ElementType_Root, AQFINTS_ElementType_Group, AQFINTS_ElementType_De, AQFINTS_ElementType_Deg } AQFINTS_ELEMENT_TYPE; typedef enum { AQFINTS_ElementDataType_Unknown = -1, AQFINTS_ElementDataType_Int, AQFINTS_ElementDataType_Char, AQFINTS_ElementDataType_Bin } AQFINTS_ELEMENT_DATATYPE; /* post-headers */ AQFINTS_ELEMENT_TYPE AQFINTS_ElementType_fromString(const char *p_s); AQFINTS_ELEMENT_DATATYPE AQFINTS_ElementDataType_fromString(const char *p_s); const char *AQFINTS_ElementType_toString(AQFINTS_ELEMENT_TYPE p_i); const char *AQFINTS_ElementDataType_toString(AQFINTS_ELEMENT_DATATYPE p_i); /** Constructor. */ AQFINTS_ELEMENT *AQFINTS_Element_new(void); /** Destructor. */ void AQFINTS_Element_free(AQFINTS_ELEMENT *p_struct); void AQFINTS_Element_Attach(AQFINTS_ELEMENT *p_struct); AQFINTS_ELEMENT *AQFINTS_Element_dup(const AQFINTS_ELEMENT *p_src); AQFINTS_ELEMENT *AQFINTS_Element_copy(AQFINTS_ELEMENT *p_struct, const AQFINTS_ELEMENT *p_src); /** Getter. * Use this function to get the member "flags" (see @ref AQFINTS_ELEMENT_flags) */ uint32_t AQFINTS_Element_GetFlags(const AQFINTS_ELEMENT *p_struct); /** Getter. * Use this function to get the member "elementType" (see @ref AQFINTS_ELEMENT_elementType) */ AQFINTS_ELEMENT_TYPE AQFINTS_Element_GetElementType(const AQFINTS_ELEMENT *p_struct); /** Getter. * Use this function to get the member "id" (see @ref AQFINTS_ELEMENT_id) */ const char *AQFINTS_Element_GetId(const AQFINTS_ELEMENT *p_struct); /** Getter. * Use this function to get the member "name" (see @ref AQFINTS_ELEMENT_name) */ const char *AQFINTS_Element_GetName(const AQFINTS_ELEMENT *p_struct); /** Getter. * Use this function to get the member "version" (see @ref AQFINTS_ELEMENT_version) */ int AQFINTS_Element_GetVersion(const AQFINTS_ELEMENT *p_struct); /** Getter. * Use this function to get the member "type" (see @ref AQFINTS_ELEMENT_type) */ const char *AQFINTS_Element_GetType(const AQFINTS_ELEMENT *p_struct); /** Getter. * Use this function to get the member "minNum" (see @ref AQFINTS_ELEMENT_minNum) */ int AQFINTS_Element_GetMinNum(const AQFINTS_ELEMENT *p_struct); /** Getter. * Use this function to get the member "maxNum" (see @ref AQFINTS_ELEMENT_maxNum) */ int AQFINTS_Element_GetMaxNum(const AQFINTS_ELEMENT *p_struct); /** Getter. * Use this function to get the member "minSize" (see @ref AQFINTS_ELEMENT_minSize) */ int AQFINTS_Element_GetMinSize(const AQFINTS_ELEMENT *p_struct); /** Getter. * Use this function to get the member "maxSize" (see @ref AQFINTS_ELEMENT_maxSize) */ int AQFINTS_Element_GetMaxSize(const AQFINTS_ELEMENT *p_struct); /** Getter. * Use this function to get the member "trustLevel" (see @ref AQFINTS_ELEMENT_trustLevel) */ int AQFINTS_Element_GetTrustLevel(const AQFINTS_ELEMENT *p_struct); /** Getter. * Use this function to get the member "runtimeFlags" (see @ref AQFINTS_ELEMENT_runtimeFlags) */ uint32_t AQFINTS_Element_GetRuntimeFlags(const AQFINTS_ELEMENT *p_struct); /** Setter. * Use this function to set the member "flags" (see @ref AQFINTS_ELEMENT_flags) */ void AQFINTS_Element_SetFlags(AQFINTS_ELEMENT *p_struct, uint32_t p_src); /** Add flags. * Use this function to add flags to member "flags" (see @ref AQFINTS_ELEMENT_flags) */ void AQFINTS_Element_AddFlags(AQFINTS_ELEMENT *p_struct, uint32_t p_src); /** Add flags. * Use this function to add flags to member "flags" (see @ref AQFINTS_ELEMENT_flags) */ void AQFINTS_Element_SubFlags(AQFINTS_ELEMENT *p_struct, uint32_t p_src); /** Setter. * Use this function to set the member "elementType" (see @ref AQFINTS_ELEMENT_elementType) */ void AQFINTS_Element_SetElementType(AQFINTS_ELEMENT *p_struct, AQFINTS_ELEMENT_TYPE p_src); /** Setter. * Use this function to set the member "id" (see @ref AQFINTS_ELEMENT_id) */ void AQFINTS_Element_SetId(AQFINTS_ELEMENT *p_struct, const char *p_src); /** Setter. * Use this function to set the member "name" (see @ref AQFINTS_ELEMENT_name) */ void AQFINTS_Element_SetName(AQFINTS_ELEMENT *p_struct, const char *p_src); /** Setter. * Use this function to set the member "version" (see @ref AQFINTS_ELEMENT_version) */ void AQFINTS_Element_SetVersion(AQFINTS_ELEMENT *p_struct, int p_src); /** Setter. * Use this function to set the member "type" (see @ref AQFINTS_ELEMENT_type) */ void AQFINTS_Element_SetType(AQFINTS_ELEMENT *p_struct, const char *p_src); /** Setter. * Use this function to set the member "minNum" (see @ref AQFINTS_ELEMENT_minNum) */ void AQFINTS_Element_SetMinNum(AQFINTS_ELEMENT *p_struct, int p_src); /** Setter. * Use this function to set the member "maxNum" (see @ref AQFINTS_ELEMENT_maxNum) */ void AQFINTS_Element_SetMaxNum(AQFINTS_ELEMENT *p_struct, int p_src); /** Setter. * Use this function to set the member "minSize" (see @ref AQFINTS_ELEMENT_minSize) */ void AQFINTS_Element_SetMinSize(AQFINTS_ELEMENT *p_struct, int p_src); /** Setter. * Use this function to set the member "maxSize" (see @ref AQFINTS_ELEMENT_maxSize) */ void AQFINTS_Element_SetMaxSize(AQFINTS_ELEMENT *p_struct, int p_src); /** Setter. * Use this function to set the member "trustLevel" (see @ref AQFINTS_ELEMENT_trustLevel) */ void AQFINTS_Element_SetTrustLevel(AQFINTS_ELEMENT *p_struct, int p_src); /** Setter. * Use this function to set the member "runtimeFlags" (see @ref AQFINTS_ELEMENT_runtimeFlags) */ void AQFINTS_Element_SetRuntimeFlags(AQFINTS_ELEMENT *p_struct, uint32_t p_src); /** Add flags. * Use this function to add flags to member "runtimeFlags" (see @ref AQFINTS_ELEMENT_runtimeFlags) */ void AQFINTS_Element_AddRuntimeFlags(AQFINTS_ELEMENT *p_struct, uint32_t p_src); /** Add flags. * Use this function to add flags to member "runtimeFlags" (see @ref AQFINTS_ELEMENT_runtimeFlags) */ void AQFINTS_Element_SubRuntimeFlags(AQFINTS_ELEMENT *p_struct, uint32_t p_src); void AQFINTS_Element_ReadDb(AQFINTS_ELEMENT *p_struct, GWEN_DB_NODE *p_db); int AQFINTS_Element_WriteDb(const AQFINTS_ELEMENT *p_struct, GWEN_DB_NODE *p_db); AQFINTS_ELEMENT *AQFINTS_Element_fromDb(GWEN_DB_NODE *p_db); int AQFINTS_Element_toDb(const AQFINTS_ELEMENT *p_struct, GWEN_DB_NODE *p_db); void AQFINTS_Element_SetData(AQFINTS_ELEMENT *st, uint8_t *ptr, uint32_t len); void AQFINTS_Element_SetDataCopy(AQFINTS_ELEMENT *st, const uint8_t *ptr, uint32_t len); void AQFINTS_Element_SetTextDataCopy(AQFINTS_ELEMENT *st, const char *ptr); const uint8_t* AQFINTS_Element_GetDataPointer(const AQFINTS_ELEMENT *st); uint32_t AQFINTS_Element_GetDataLength(const AQFINTS_ELEMENT *st); const char* AQFINTS_Element_GetDataAsChar(const AQFINTS_ELEMENT *st, const char *defaultValue); int AQFINTS_Element_GetDataAsInt(const AQFINTS_ELEMENT *st, int defaultValue); void AQFINTS_Element_SetDataAsInt(AQFINTS_ELEMENT *st, int value); #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/parser/parser_dbwrite.c0000664000175000017500000004475514044534775025666 00000000000000/*************************************************************************** begin : Wed Jul 17 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "libaqfints/parser/parser_dbwrite.h" #include "libaqfints/parser/parser_internal.h" #include /* ------------------------------------------------------------------------------------------------ * forward declarations * ------------------------------------------------------------------------------------------------ */ static int writeDegSequence(AQFINTS_ELEMENT *elementDefinition, AQFINTS_ELEMENT *elementDataParent, GWEN_DB_NODE *db); static int writeDegGroup(AQFINTS_ELEMENT *elementDefinition, AQFINTS_ELEMENT *elementDataParent, GWEN_DB_NODE *db); static int writeDeg(AQFINTS_ELEMENT *elementDefinition, AQFINTS_ELEMENT *elementDataParent, GWEN_DB_NODE *db); static int writeDeGroup(AQFINTS_ELEMENT *elementDefinition, AQFINTS_ELEMENT *elementDataParent, GWEN_DB_NODE *db); static int writeDeSequence(AQFINTS_ELEMENT *elementDefinition, AQFINTS_ELEMENT *elementDataParent, GWEN_DB_NODE *db); static int writeElement(AQFINTS_ELEMENT *elementDefinition, AQFINTS_ELEMENT *elementDataParent, GWEN_DB_NODE *db); static int writeCharElement(AQFINTS_ELEMENT *elementDefinition, AQFINTS_ELEMENT *elementDataParent, GWEN_DB_NODE *db); static int writeIntElement(AQFINTS_ELEMENT *elementDefinition, AQFINTS_ELEMENT *elementDataParent, GWEN_DB_NODE *db); static int writeBinElement(AQFINTS_ELEMENT *elementDefinition, AQFINTS_ELEMENT *elementDataParent, GWEN_DB_NODE *db); /* ------------------------------------------------------------------------------------------------ * implementations * ------------------------------------------------------------------------------------------------ */ int AQFINTS_Parser_Db_WriteSegment(AQFINTS_SEGMENT *segmentDefinition, AQFINTS_SEGMENT *segmentData, GWEN_DB_NODE *db) { AQFINTS_ELEMENT *elementDefinition; AQFINTS_ELEMENT *childDefinitionData; AQFINTS_ELEMENT *elementDataParent; const char *segCode; int rv; elementDefinition=AQFINTS_Segment_GetElements(segmentDefinition); assert(elementDefinition); segCode=AQFINTS_Segment_GetCode(segmentDefinition); elementDataParent=AQFINTS_Segment_GetElements(segmentData); if (elementDataParent==NULL) { elementDataParent=AQFINTS_Element_new(); AQFINTS_Element_SetElementType(elementDataParent, AQFINTS_ElementType_Root); AQFINTS_Segment_SetElements(segmentData, elementDataParent); } assert(elementDataParent); childDefinitionData=AQFINTS_Element_Tree2_GetFirstChild(elementDefinition); if (childDefinitionData==NULL) { DBG_ERROR(AQFINTS_PARSER_LOGDOMAIN, "Definition has no children"); return GWEN_ERROR_BAD_DATA; } rv=writeDegSequence(childDefinitionData, elementDataParent, db); if (rv<0) { DBG_INFO(AQFINTS_PARSER_LOGDOMAIN, "here (%d) [%s]", rv, segCode?segCode:""); return rv; } return 0; } int writeDegSequence(AQFINTS_ELEMENT *elementDefinition, AQFINTS_ELEMENT *elementDataParent, GWEN_DB_NODE *db) { while (elementDefinition) { int rv; if (AQFINTS_Element_GetElementType(elementDefinition)==AQFINTS_ElementType_Group) rv=writeDegGroup(elementDefinition, elementDataParent, db); else rv=writeDeg(elementDefinition, elementDataParent, db); if (rv<0) { DBG_INFO(AQFINTS_PARSER_LOGDOMAIN, "here (%d)", rv); return rv; } elementDefinition=AQFINTS_Element_Tree2_GetNext(elementDefinition); } return 0; } int writeDegGroup(AQFINTS_ELEMENT *elementDefinition, AQFINTS_ELEMENT *elementDataParent, GWEN_DB_NODE *db) { AQFINTS_ELEMENT *childDefinitionData; int minNum; int maxNum; const char *sDbName; int rv; minNum=AQFINTS_Element_GetMinNum(elementDefinition); maxNum=AQFINTS_Element_GetMaxNum(elementDefinition); sDbName=AQFINTS_Element_GetName(elementDefinition); childDefinitionData=AQFINTS_Element_Tree2_GetFirstChild(elementDefinition); if (childDefinitionData==NULL) { DBG_ERROR(AQFINTS_PARSER_LOGDOMAIN, "Definition has no children"); return GWEN_ERROR_BAD_DATA; } if (sDbName && *sDbName) { GWEN_DB_NODE *dbForGroup; int idx=0; dbForGroup=GWEN_DB_FindFirstGroup(db, sDbName); while (dbForGroup) { if (maxNum && idx>=maxNum) { DBG_ERROR(AQFINTS_PARSER_LOGDOMAIN, "Too many elements in DB (%d < %d)", idx, maxNum); return GWEN_ERROR_BAD_DATA; } rv=writeDegSequence(childDefinitionData, elementDataParent, dbForGroup); if (rv<0) { DBG_INFO(AQFINTS_PARSER_LOGDOMAIN, "here (%d)", rv); return rv; } idx++; dbForGroup=GWEN_DB_FindNextGroup(dbForGroup, sDbName); } if (minNum && idx=maxNum) { DBG_ERROR(AQFINTS_PARSER_LOGDOMAIN, "Too many elements in DB (%d < %d)", idx, maxNum); return GWEN_ERROR_BAD_DATA; } elementData=AQFINTS_Element_new(); AQFINTS_Element_SetElementType(elementData, AQFINTS_ElementType_Deg); AQFINTS_Element_SetTrustLevel(elementData, AQFINTS_Element_GetTrustLevel(elementDefinition)); AQFINTS_Element_Tree2_AddChild(elementDataParent, elementData); rv=writeDeSequence(childDefinitionData, elementData, dbForGroup); if (rv<0) { DBG_INFO(AQFINTS_PARSER_LOGDOMAIN, "here (%d)", rv); return rv; } idx++; dbForGroup=GWEN_DB_FindNextGroup(dbForGroup, sDbName); } if (minNum && idx=maxNum) { DBG_ERROR(AQFINTS_PARSER_LOGDOMAIN, "Too many elements in DB (%d < %d)", idx, maxNum); return GWEN_ERROR_BAD_DATA; } rv=writeDeSequence(childDefinitionData, elementDataParent, dbForGroup); if (rv<0) { DBG_INFO(AQFINTS_PARSER_LOGDOMAIN, "here (%d)", rv); return rv; } idx++; dbForGroup=GWEN_DB_FindNextGroup(dbForGroup, sDbName); } if (minNum && idx=maxNum) { DBG_ERROR(AQFINTS_PARSER_LOGDOMAIN, "Too many elements in DB (%d < %d [%s])", idx, maxNum, sDbName?sDbName:""); return GWEN_ERROR_BAD_DATA; } elementData=AQFINTS_Element_new(); AQFINTS_Element_SetElementType(elementData, AQFINTS_ElementType_De); AQFINTS_Element_SetType(elementData, AQFINTS_Element_GetType(elementDefinition)); AQFINTS_Element_SetTrustLevel(elementData, AQFINTS_Element_GetTrustLevel(elementDefinition)); AQFINTS_Element_SetTextDataCopy(elementData, s); AQFINTS_Element_Tree2_AddChild(elementDataParent, elementData); } if (minNum && idx=maxNum) { DBG_ERROR(AQFINTS_PARSER_LOGDOMAIN, "Too many elements in DB (%d < %d)", idx, maxNum); return GWEN_ERROR_BAD_DATA; } value=GWEN_DB_GetIntValue(db, sDbName, idx, 0); elementData=AQFINTS_Element_new(); AQFINTS_Element_SetElementType(elementData, AQFINTS_ElementType_De); AQFINTS_Element_SetType(elementData, AQFINTS_Element_GetType(elementDefinition)); AQFINTS_Element_SetTrustLevel(elementData, AQFINTS_Element_GetTrustLevel(elementDefinition)); if ((eFlags & (AQFINTS_ELEMENT_FLAGS_LEFTFILL | AQFINTS_ELEMENT_FLAGS_RIGHTFILL)) && maxSize) { char numbuf[64]; int len; len=snprintf(numbuf, sizeof(numbuf)-1, "%d", value); if (len>=sizeof(numbuf)) { DBG_ERROR(AQFINTS_PARSER_LOGDOMAIN, "Buffer too small to convert integer value (would need %d bytes)", len); return GWEN_ERROR_INTERNAL; } numbuf[len]=0; if (len>maxSize) { DBG_ERROR(AQFINTS_PARSER_LOGDOMAIN, "Data bigger than allowed (%d > %d)", len, maxSize); return GWEN_ERROR_INVALID; } else if (len=maxNum) { DBG_ERROR(AQFINTS_PARSER_LOGDOMAIN, "Too many elements in DB (%d < %d)", idx, maxNum); return GWEN_ERROR_BAD_DATA; } len=0; ptr=(const uint8_t *) GWEN_DB_GetBinValue(db, sDbName, idx, NULL, 0, &len); if (ptr && len) { AQFINTS_ELEMENT *elementData; elementData=AQFINTS_Element_new(); AQFINTS_Element_SetElementType(elementData, AQFINTS_ElementType_De); AQFINTS_Element_SetType(elementData, AQFINTS_Element_GetType(elementDefinition)); AQFINTS_Element_SetTrustLevel(elementData, AQFINTS_Element_GetTrustLevel(elementDefinition)); AQFINTS_Element_SetDataCopy(elementData, ptr, len); AQFINTS_Element_AddFlags(elementData, AQFINTS_ELEMENT_FLAGS_ISBIN); AQFINTS_Element_Tree2_AddChild(elementDataParent, elementData); } else { DBG_ERROR(AQFINTS_PARSER_LOGDOMAIN, "Empty binary data"); break; } } else break; } if (minNum && idx&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ noinst_PROGRAMS = libtest$(EXEEXT) subdir = src/libs/plugins/backends/aqfints/libaqfints/parser ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/distri.m4 $(top_srcdir)/m4/gwenhywfar.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/os.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(dist_typedata_DATA) \ $(noinst_HEADERS) $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = PROGRAMS = $(noinst_PROGRAMS) LTLIBRARIES = $(noinst_LTLIBRARIES) libaqfintsparser_la_LIBADD = am__objects_1 = element.lo segment.lo jobdef.lo am_libaqfintsparser_la_OBJECTS = $(am__objects_1) parser.lo \ parser_xml.lo parser_normalize.lo parser_dump.lo \ parser_hbci.lo parser_dbread.lo parser_dbwrite.lo \ parser_internal.lo libaqfintsparser_la_OBJECTS = $(am_libaqfintsparser_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = am_libtest_OBJECTS = libtest.$(OBJEXT) libtest_OBJECTS = $(am_libtest_OBJECTS) am__DEPENDENCIES_1 = libtest_DEPENDENCIES = libaqfintsparser.la $(am__DEPENDENCIES_1) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/element.Plo ./$(DEPDIR)/jobdef.Plo \ ./$(DEPDIR)/libtest.Po ./$(DEPDIR)/parser.Plo \ ./$(DEPDIR)/parser_dbread.Plo ./$(DEPDIR)/parser_dbwrite.Plo \ ./$(DEPDIR)/parser_dump.Plo ./$(DEPDIR)/parser_hbci.Plo \ ./$(DEPDIR)/parser_internal.Plo \ ./$(DEPDIR)/parser_normalize.Plo ./$(DEPDIR)/parser_xml.Plo \ ./$(DEPDIR)/segment.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libaqfintsparser_la_SOURCES) $(libtest_SOURCES) DIST_SOURCES = $(libaqfintsparser_la_SOURCES) $(libtest_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(typedatadir)" DATA = $(dist_typedata_DATA) HEADERS = $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADD_ACLOCAL_FLAGS = @ADD_ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AQBANKING_CLI_VERSION_STRING = @AQBANKING_CLI_VERSION_STRING@ AQBANKING_FINTS_VERSION_STRING = @AQBANKING_FINTS_VERSION_STRING@ AQBANKING_SO_AGE = @AQBANKING_SO_AGE@ AQBANKING_SO_CURRENT = @AQBANKING_SO_CURRENT@ AQBANKING_SO_EFFECTIVE = @AQBANKING_SO_EFFECTIVE@ AQBANKING_SO_REVISION = @AQBANKING_SO_REVISION@ AQBANKING_VERSION_BUILD = @AQBANKING_VERSION_BUILD@ AQBANKING_VERSION_FULL_STRING = @AQBANKING_VERSION_FULL_STRING@ AQBANKING_VERSION_MAJOR = @AQBANKING_VERSION_MAJOR@ AQBANKING_VERSION_MINOR = @AQBANKING_VERSION_MINOR@ AQBANKING_VERSION_PATCHLEVEL = @AQBANKING_VERSION_PATCHLEVEL@ AQBANKING_VERSION_RELEASE_STRING = @AQBANKING_VERSION_RELEASE_STRING@ AQBANKING_VERSION_STRING = @AQBANKING_VERSION_STRING@ AQBANKING_VERSION_TAG = @AQBANKING_VERSION_TAG@ AQEBICS_CFLAGS = @AQEBICS_CFLAGS@ AQEBICS_LIBS = @AQEBICS_LIBS@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATETIME = @DATETIME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_EXCLUDE_PATTERNS = @DOXYGEN_EXCLUDE_PATTERNS@ DOXYGEN_FILE_PATTERNS = @DOXYGEN_FILE_PATTERNS@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENGUI_GTK2_CFLAGS = @GWENGUI_GTK2_CFLAGS@ GWENGUI_GTK2_LIBS = @GWENGUI_GTK2_LIBS@ GWENHYWFAR_MINIMUM_VERSION = @GWENHYWFAR_MINIMUM_VERSION@ HAVE_GWENGUI_GTK2 = @HAVE_GWENGUI_GTK2@ HAVE_I18N = @HAVE_I18N@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIBXSLT_CFLAGS = @LIBXSLT_CFLAGS@ LIBXSLT_LIBS = @LIBXSLT_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_SUPPORTS_QT = @MSGFMT_SUPPORTS_QT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ TUTORIALS = @TUTORIALS@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XMLMERGE = @XMLMERGE@ XMLSEC_CFLAGS = @XMLSEC_CFLAGS@ XMLSEC_LIBS = @XMLSEC_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ aqbanking_backends = @aqbanking_backends@ aqbanking_cfg_searchdir = @aqbanking_cfg_searchdir@ aqbanking_data_searchdir = @aqbanking_data_searchdir@ aqbanking_headerdir = @aqbanking_headerdir@ aqbanking_headerdir_am = @aqbanking_headerdir_am@ aqbanking_includes = @aqbanking_includes@ aqbanking_internal_libs = @aqbanking_internal_libs@ aqbanking_ldflags = @aqbanking_ldflags@ aqbanking_libs = @aqbanking_libs@ aqbanking_locale_searchdir = @aqbanking_locale_searchdir@ aqbanking_modules = @aqbanking_modules@ aqbanking_pkgdatadir = @aqbanking_pkgdatadir@ aqbanking_plugin_searchdir = @aqbanking_plugin_searchdir@ aqbanking_plugindir = @aqbanking_plugindir@ aqbanking_plugins_backends_dirs = @aqbanking_plugins_backends_dirs@ aqbanking_plugins_backends_libs = @aqbanking_plugins_backends_libs@ aqbanking_plugins_bankinfo_dirs = @aqbanking_plugins_bankinfo_dirs@ aqbanking_plugins_bankinfo_libs = @aqbanking_plugins_bankinfo_libs@ aqbanking_plugins_imexporters_dirs = @aqbanking_plugins_imexporters_dirs@ aqbanking_plugins_imexporters_libs = @aqbanking_plugins_imexporters_libs@ aqbanking_plugins_parsers_dirs = @aqbanking_plugins_parsers_dirs@ aqbanking_symlinkdir = @aqbanking_symlinkdir@ aqbanking_sys_is_windows = @aqbanking_sys_is_windows@ aqbankingpp_modules = @aqbankingpp_modules@ aqebics_datadir = @aqebics_datadir@ aqebics_includes = @aqebics_includes@ aqebics_internal_libs = @aqebics_internal_libs@ aqebics_ldflags = @aqebics_ldflags@ aqebics_libs = @aqebics_libs@ aqfints_datadir = @aqfints_datadir@ aqhbci_datadir = @aqhbci_datadir@ aqhbci_includes = @aqhbci_includes@ aqhbci_internal_libs = @aqhbci_internal_libs@ aqhbci_ldflags = @aqhbci_ldflags@ aqhbci_libs = @aqhbci_libs@ aqofxconnect_includes = @aqofxconnect_includes@ aqofxconnect_internal_libs = @aqofxconnect_internal_libs@ aqofxconnect_libs = @aqofxconnect_libs@ aqpaypal_includes = @aqpaypal_includes@ aqpaypal_internal_libs = @aqpaypal_internal_libs@ aqpaypal_libs = @aqpaypal_libs@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gmp_libs = @gmp_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_dir = @gwenhywfar_dir@ gwenhywfar_has_crypt = @gwenhywfar_has_crypt@ gwenhywfar_headers = @gwenhywfar_headers@ gwenhywfar_includes = @gwenhywfar_includes@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_plugins = @gwenhywfar_plugins@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ typemaker2_exe = @typemaker2_exe@ visibility_cflags = @visibility_cflags@ with_aqebics = @with_aqebics@ with_aqhbci = @with_aqhbci@ AM_CFLAGS = @visibility_cflags@ AM_CPPFLAGS = -I$(top_srcdir)/src/lib -I$(top_builddir)/src/lib $(gwenhywfar_includes) -I$(srcdir)/../.. -I$(srcdir)/.. noinst_LTLIBRARIES = libaqfintsparser.la typefiles = \ element.xml \ segment.xml \ jobdef.xml typedatadir = $(datadir)/aqbanking/typemaker2/c dist_typedata_DATA = \ aqfints_element.tm2 aqfints_element_tree2.tm2 \ aqfints_segment.tm2 aqfints_segment_list.tm2 \ aqfints_jobdef.tm2 aqfints_jobdef_list.tm2 built_sources = \ element.c \ segment.c \ jobdef.c build_headers_priv = \ element_p.h \ segment_p.h build_headers_pub = \ element.h \ segment.h \ jobdef.h build_headers = $(build_headers_priv) $(build_headers_pub) noinst_HEADERS = $(build_headers) \ parser.h \ parser_p.h \ parser_xml.h \ parser_normalize.h \ parser_dump.h \ parser_hbci.h \ parser_dbread.h \ parser_dbwrite.h \ parser_internal.h libaqfintsparser_la_SOURCES = $(built_sources) \ parser.c \ parser_xml.c \ parser_normalize.c \ parser_dump.c \ parser_hbci.c \ parser_dbread.c \ parser_dbwrite.c \ parser_internal.c libtest_SOURCES = libtest.c libtest_LDADD = libaqfintsparser.la $(gwenhywfar_libs) EXTRA_DIST = $(typefiles) $(built_sources) $(build_headers) all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libs/plugins/backends/aqfints/libaqfints/parser/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libs/plugins/backends/aqfints/libaqfints/parser/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libaqfintsparser.la: $(libaqfintsparser_la_OBJECTS) $(libaqfintsparser_la_DEPENDENCIES) $(EXTRA_libaqfintsparser_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libaqfintsparser_la_OBJECTS) $(libaqfintsparser_la_LIBADD) $(LIBS) libtest$(EXEEXT): $(libtest_OBJECTS) $(libtest_DEPENDENCIES) $(EXTRA_libtest_DEPENDENCIES) @rm -f libtest$(EXEEXT) $(AM_V_CCLD)$(LINK) $(libtest_OBJECTS) $(libtest_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/element.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jobdef.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtest.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parser.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parser_dbread.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parser_dbwrite.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parser_dump.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parser_hbci.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parser_internal.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parser_normalize.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parser_xml.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/segment.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-dist_typedataDATA: $(dist_typedata_DATA) @$(NORMAL_INSTALL) @list='$(dist_typedata_DATA)'; test -n "$(typedatadir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(typedatadir)'"; \ $(MKDIR_P) "$(DESTDIR)$(typedatadir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(typedatadir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(typedatadir)" || exit $$?; \ done uninstall-dist_typedataDATA: @$(NORMAL_UNINSTALL) @list='$(dist_typedata_DATA)'; test -n "$(typedatadir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(typedatadir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) $(LTLIBRARIES) $(DATA) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(typedatadir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ clean-noinstPROGRAMS mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/element.Plo -rm -f ./$(DEPDIR)/jobdef.Plo -rm -f ./$(DEPDIR)/libtest.Po -rm -f ./$(DEPDIR)/parser.Plo -rm -f ./$(DEPDIR)/parser_dbread.Plo -rm -f ./$(DEPDIR)/parser_dbwrite.Plo -rm -f ./$(DEPDIR)/parser_dump.Plo -rm -f ./$(DEPDIR)/parser_hbci.Plo -rm -f ./$(DEPDIR)/parser_internal.Plo -rm -f ./$(DEPDIR)/parser_normalize.Plo -rm -f ./$(DEPDIR)/parser_xml.Plo -rm -f ./$(DEPDIR)/segment.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dist_typedataDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/element.Plo -rm -f ./$(DEPDIR)/jobdef.Plo -rm -f ./$(DEPDIR)/libtest.Po -rm -f ./$(DEPDIR)/parser.Plo -rm -f ./$(DEPDIR)/parser_dbread.Plo -rm -f ./$(DEPDIR)/parser_dbwrite.Plo -rm -f ./$(DEPDIR)/parser_dump.Plo -rm -f ./$(DEPDIR)/parser_hbci.Plo -rm -f ./$(DEPDIR)/parser_internal.Plo -rm -f ./$(DEPDIR)/parser_normalize.Plo -rm -f ./$(DEPDIR)/parser_xml.Plo -rm -f ./$(DEPDIR)/segment.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-dist_typedataDATA .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-generic clean-libtool clean-noinstLTLIBRARIES \ clean-noinstPROGRAMS cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am \ install-dist_typedataDATA install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am \ uninstall-dist_typedataDATA .PRECIOUS: Makefile built_sources: $(built_sources) list='$(SUBDIRS)'; for d in $$list; do \ $(MAKE) -C $$d built_sources; \ done ; clean_build_files: rm -f $(built_sources) $(build_headers) format_built_files: for f in $(built_sources) $(build_headers); do \ $(ASTYLE) --style=stroustrup -s2 --min-conditional-indent=0 --indent-labels --max-continuation-indent=80 --pad-comma --pad-header --unpad-paren --align-pointer=name --break-closing-braces --break-one-line-headers --attach-return-type --convert-tabs --max-code-length=120 --break-after-logical --suffix=none $$f; \ done sources: for f in $(libaqfintsparser_la_SOURCES) $(EXTRA_DIST); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d sources; \ done typefiles: $(typefiles) for d in $(SUBDIRS); do \ $(MAKE) -C $$d typefiles; \ done $(typemaker2_exe) -I $(top_srcdir)/src/libs/aqbanking/typemaker2/c -I $(gwenhywfar_dir)/share/gwenhywfar/typemaker2/c -I $(srcdir) --destfolder="$(srcdir)" $(typefiles) typedefs: $(typefiles) for d in $(SUBDIRS); do \ $(MAKE) -C $$d typedefs; \ done $(typemaker2_exe) --defs-only -I $(top_srcdir)/src/libs/aqbanking/typemaker2/c -I $(gwenhywfar_dir)/share/gwenhywfar/typemaker2/c -I $(srcdir) --destfolder="$(srcdir)" $(typefiles) cppcheck: for f in $(libaqfintsparser_la_SOURCES); do \ cppcheck --force $$f ; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/parser/parser_hbci.c0000664000175000017500000003635414044534775025127 00000000000000/*************************************************************************** begin : Fri Jul 04 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "libaqfints/parser/parser_hbci.h" #include "libaqfints/parser/parser_normalize.h" #include #include #include #define AQFINTS_PARSER_HBCI_BUFFERSIZE 1024 /* ------------------------------------------------------------------------------------------------ * forward declarations * ------------------------------------------------------------------------------------------------ */ static int readSeg(AQFINTS_SEGMENT *targetSegment, const uint8_t *ptrBuf, uint32_t lenBuf); static int readDeg(AQFINTS_ELEMENT *targetElement, const uint8_t *ptrBuf, uint32_t lenBuf); static int readDe(AQFINTS_ELEMENT *targetElement, const uint8_t *ptrBuf, uint32_t lenBuf); static int readString(AQFINTS_ELEMENT *targetElement, const uint8_t *ptrBuf, uint32_t lenBuf); static int readBin(AQFINTS_ELEMENT *targetElement, const uint8_t *ptrBuf, uint32_t lenBuf); static void parseSegHeader(AQFINTS_SEGMENT *segment); static void writeDegSequence(AQFINTS_ELEMENT *element, GWEN_BUFFER *destBuf, int elementCount, int *pEndOfLastNonEmptyElement); static int writeDeg(AQFINTS_ELEMENT *element, GWEN_BUFFER *destBuf); static void writeDeSequence(AQFINTS_ELEMENT *element, GWEN_BUFFER *destBuf, int elementCount, int *pEndOfLastNonEmptyElement); static int writeDe(AQFINTS_ELEMENT *element, GWEN_BUFFER *destBuf); static void writeBin(const uint8_t *ptrBuf, uint32_t lenBuf, GWEN_BUFFER *destBuf); static void writeString(const char *s, GWEN_BUFFER *destBuf); /* ------------------------------------------------------------------------------------------------ * implementations * ------------------------------------------------------------------------------------------------ */ int AQFINTS_Parser_Hbci_ReadBuffer(AQFINTS_SEGMENT_LIST *targetSegmentList, const uint8_t *ptrBuf, uint32_t lenBuf) { uint32_t origLenBuf; origLenBuf=lenBuf; while (lenBuf && *ptrBuf) { AQFINTS_SEGMENT *targetSegment; int rv; targetSegment=AQFINTS_Segment_new(); rv=readSeg(targetSegment, ptrBuf, lenBuf); if (rv<0) { DBG_INFO(AQFINTS_PARSER_LOGDOMAIN, "here (%d)", rv); AQFINTS_Segment_free(targetSegment); return rv; } parseSegHeader(targetSegment); AQFINTS_Parser_Segment_RemoveTrailingEmptyElements(targetSegment); AQFINTS_Segment_List_Add(targetSegment, targetSegmentList); /* store copy of segment data */ if (lenBuf>rv) { if (ptrBuf[rv]!='\'') { DBG_ERROR(AQFINTS_PARSER_LOGDOMAIN, "Segment not terminated by quotation mark"); return GWEN_ERROR_BAD_DATA; } AQFINTS_Segment_SetDataAsCopy(targetSegment, ptrBuf, rv+1); } else { DBG_ERROR(AQFINTS_PARSER_LOGDOMAIN, "Segment too small (no room for terminating quotation mark)"); return GWEN_ERROR_BAD_DATA; } /* advance pointer and size */ lenBuf-=rv; ptrBuf+=rv; if (lenBuf) { if (*ptrBuf!='\'') { /* DE was terminated, but not by "'", error */ return GWEN_ERROR_BAD_DATA; } ptrBuf++; lenBuf--; } } /* while */ return (int)(origLenBuf-lenBuf); } void AQFINTS_Parser_Hbci_WriteBuffer(AQFINTS_SEGMENT_LIST *segmentList) { AQFINTS_SEGMENT *segment; segment=AQFINTS_Segment_List_First(segmentList); while (segment) { AQFINTS_Parser_Hbci_WriteSegment(segment); segment=AQFINTS_Segment_List_Next(segment); } } void AQFINTS_Parser_Hbci_WriteSegment(AQFINTS_SEGMENT *segment) { AQFINTS_ELEMENT *rootElement; uint32_t segmentStartPos; int endOfLastNonEmptyElement=0; uint32_t pos; GWEN_BUFFER *destBuf; int rv; destBuf=GWEN_Buffer_new(0, 256, 0, 1); segmentStartPos=GWEN_Buffer_GetPos(destBuf); rootElement=AQFINTS_Segment_GetElements(segment); if (rootElement) { writeDegSequence(rootElement, destBuf, 0, &endOfLastNonEmptyElement); /* remove trailing '+'s */ pos=GWEN_Buffer_GetPos(destBuf); if (pos>endOfLastNonEmptyElement) { uint32_t cropPos; cropPos=endOfLastNonEmptyElement?endOfLastNonEmptyElement:segmentStartPos; /*DBG_ERROR(AQFINTS_PARSER_LOGDOMAIN, "Crop destbuffer: %d->%d", pos, cropPos);*/ GWEN_Buffer_Crop(destBuf, 0, cropPos); } } /* append segment end sign */ GWEN_Buffer_AppendByte(destBuf, '\''); /* set data to segment, take over GWEN_BUFFER content */ AQFINTS_Segment_SetData(segment, (uint8_t *) GWEN_Buffer_GetStart(destBuf), GWEN_Buffer_GetUsedBytes(destBuf)); rv=GWEN_Buffer_Relinquish(destBuf); if (rv<0) { DBG_ERROR(AQFINTS_PARSER_LOGDOMAIN, "here (%d)", rv); abort(); } GWEN_Buffer_free(destBuf); } void parseSegHeader(AQFINTS_SEGMENT *segment) { AQFINTS_ELEMENT *element; element=AQFINTS_Segment_GetElements(segment); if (element) { AQFINTS_ELEMENT *deg1; deg1=AQFINTS_Element_Tree2_GetFirstChild(element); if (deg1) { AQFINTS_ELEMENT *de; de=AQFINTS_Element_Tree2_GetFirstChild(deg1); if (de) { const char *s; int i; /* read segment code */ s=AQFINTS_Element_GetDataAsChar(de, NULL); if (s && *s) AQFINTS_Segment_SetCode(segment, s); /* read segment number */ de=AQFINTS_Element_Tree2_GetNext(de); if (de) { i=AQFINTS_Element_GetDataAsInt(de, 0); AQFINTS_Segment_SetSegmentNumber(segment, i); /* read segment version */ de=AQFINTS_Element_Tree2_GetNext(de); if (de) { i=AQFINTS_Element_GetDataAsInt(de, 0); AQFINTS_Segment_SetSegmentVersion(segment, i); /* read reference segment number */ de=AQFINTS_Element_Tree2_GetNext(de); if (de) { i=AQFINTS_Element_GetDataAsInt(de, 0); AQFINTS_Segment_SetRefSegmentNumber(segment, i); } /* if fourth de */ } /* if third de */ } /* if second de */ } /* if first de */ } /* if deg1 */ } /* if element */ } int readSeg(AQFINTS_SEGMENT *targetSegment, const uint8_t *ptrBuf, uint32_t lenBuf) { AQFINTS_ELEMENT *targetElement; uint32_t origLenBuf; origLenBuf=lenBuf; targetElement=AQFINTS_Segment_GetElements(targetSegment); if (targetElement==NULL) { targetElement=AQFINTS_Element_new(); AQFINTS_Element_SetElementType(targetElement, AQFINTS_ElementType_Root); AQFINTS_Segment_SetElements(targetSegment, targetElement); } while (lenBuf && *ptrBuf) { AQFINTS_ELEMENT *targetDegElement; int rv; targetDegElement=AQFINTS_Element_new(); AQFINTS_Element_SetElementType(targetDegElement, AQFINTS_ElementType_Deg); rv=readDeg(targetDegElement, ptrBuf, lenBuf); if (rv<0) { DBG_INFO(AQFINTS_PARSER_LOGDOMAIN, "here (%d)", rv); AQFINTS_Element_free(targetDegElement); return rv; } AQFINTS_Element_Tree2_AddChild(targetElement, targetDegElement); /* advance pointer and size */ lenBuf-=rv; ptrBuf+=rv; if (lenBuf) { if (*ptrBuf!='+') { /* DE was terminated, but not by ':', so a higher syntax element ended */ return (int)(origLenBuf-lenBuf); } ptrBuf++; lenBuf--; } } /* while */ DBG_ERROR(AQFINTS_PARSER_LOGDOMAIN, "No delimiter at end of data"); return GWEN_ERROR_BAD_DATA; } int readDeg(AQFINTS_ELEMENT *targetElement, const uint8_t *ptrBuf, uint32_t lenBuf) { uint32_t origLenBuf; origLenBuf=lenBuf; while (lenBuf && *ptrBuf) { AQFINTS_ELEMENT *targetDeElement; int rv; targetDeElement=AQFINTS_Element_new(); AQFINTS_Element_SetElementType(targetDeElement, AQFINTS_ElementType_De); rv=readDe(targetDeElement, ptrBuf, lenBuf); if (rv<0) { DBG_INFO(AQFINTS_PARSER_LOGDOMAIN, "here (%d)", rv); AQFINTS_Element_free(targetDeElement); return rv; } AQFINTS_Element_Tree2_AddChild(targetElement, targetDeElement); /* advance pointer and size */ lenBuf-=rv; ptrBuf+=rv; if (lenBuf) { if (*ptrBuf!=':') { /* DE was terminated, but not by ':', so a higher syntax element ended */ return (int)(origLenBuf-lenBuf); } ptrBuf++; lenBuf--; } } /* while */ DBG_ERROR(AQFINTS_PARSER_LOGDOMAIN, "No delimiter at end of data"); return GWEN_ERROR_BAD_DATA; } int readDe(AQFINTS_ELEMENT *targetElement, const uint8_t *ptrBuf, uint32_t lenBuf) { if (lenBuf) { if (*ptrBuf=='@') { int rv; rv=readBin(targetElement, ptrBuf, lenBuf); if (rv<0) { DBG_INFO(AQFINTS_PARSER_LOGDOMAIN, "here (%d)", rv); return rv; } return rv; } else { int rv; rv=readString(targetElement, ptrBuf, lenBuf); if (rv<0) { DBG_INFO(AQFINTS_PARSER_LOGDOMAIN, "here (%d)", rv); return rv; } return rv; } } DBG_ERROR(AQFINTS_PARSER_LOGDOMAIN, "Empty data buffer"); return GWEN_ERROR_NO_DATA; } int readString(AQFINTS_ELEMENT *targetElement, const uint8_t *ptrBuf, uint32_t lenBuf) { uint32_t origLenBuf; GWEN_BUFFER *destBuf; origLenBuf=lenBuf; destBuf=GWEN_Buffer_new(0, 256, 0, 1); while (*ptrBuf && lenBuf) { switch (*ptrBuf) { case '\'': case '+': case ':': /* end of segment, DEG or DE reached */ if (GWEN_Buffer_GetUsedBytes(destBuf)) AQFINTS_Element_SetTextDataCopy(targetElement, GWEN_Buffer_GetStart(destBuf)); GWEN_Buffer_free(destBuf); return (int)(origLenBuf-lenBuf); case '?': /* escape character */ ptrBuf++; lenBuf--; if (lenBuf && *ptrBuf) GWEN_Buffer_AppendByte(destBuf, *ptrBuf); else { DBG_ERROR(AQFINTS_PARSER_LOGDOMAIN, "Premature end of data (question mark was last character)"); GWEN_Buffer_free(destBuf); return GWEN_ERROR_BAD_DATA; } break; default: GWEN_Buffer_AppendByte(destBuf, *ptrBuf); } /* switch */ ptrBuf++; lenBuf--; } /* while */ DBG_ERROR(AQFINTS_PARSER_LOGDOMAIN, "No delimiter at end of data"); GWEN_Buffer_free(destBuf); return GWEN_ERROR_BAD_DATA; } int readBin(AQFINTS_ELEMENT *targetElement, const uint8_t *ptrBuf, uint32_t lenBuf) { uint32_t origLenBuf; origLenBuf=lenBuf; if (lenBuf && *ptrBuf=='@') { uint32_t lenBinary=0; ptrBuf++; lenBuf--; while (lenBuf && *ptrBuf && isdigit(*ptrBuf)) { lenBinary*=10; lenBinary+=((*ptrBuf)-'0'); ptrBuf++; lenBuf--; } if (lenBuf && *ptrBuf=='@') { ptrBuf++; lenBuf--; if (lenBuf0) *pEndOfLastNonEmptyElement=GWEN_Buffer_GetPos(destBuf); } elementCount++; childElement=AQFINTS_Element_Tree2_GetNext(childElement); } } int writeDeg(AQFINTS_ELEMENT *element, GWEN_BUFFER *destBuf) { uint32_t elementStartPos; uint32_t elementSize; int endOfLastNonEmptyElement=0; uint32_t pos; elementStartPos=GWEN_Buffer_GetPos(destBuf); writeDeSequence(element, destBuf, 0, &endOfLastNonEmptyElement); /* remove trailing ':'s */ pos=GWEN_Buffer_GetPos(destBuf); if (pos>endOfLastNonEmptyElement) { uint32_t cropPos; cropPos=endOfLastNonEmptyElement?endOfLastNonEmptyElement:elementStartPos; DBG_DEBUG(AQFINTS_PARSER_LOGDOMAIN, "Crop destbuffer: %d->%d", pos, cropPos); GWEN_Buffer_Crop(destBuf, 0, cropPos); } /* set size and pos */ elementSize=GWEN_Buffer_GetPos(destBuf)-elementStartPos; return (elementSize>0)?1:0; } void writeDeSequence(AQFINTS_ELEMENT *element, GWEN_BUFFER *destBuf, int elementCount, int *pEndOfLastNonEmptyElement) { AQFINTS_ELEMENT *childElement; childElement=AQFINTS_Element_Tree2_GetFirstChild(element); while (childElement) { if (elementCount) GWEN_Buffer_AppendByte(destBuf, ':'); if (AQFINTS_Element_GetElementType(childElement)==AQFINTS_ElementType_Group) writeDeSequence(childElement, destBuf, elementCount, pEndOfLastNonEmptyElement); else { int rv; rv=writeDe(childElement, destBuf); if (rv>0) { *pEndOfLastNonEmptyElement=GWEN_Buffer_GetPos(destBuf); DBG_DEBUG(AQFINTS_PARSER_LOGDOMAIN, "Nonempty element ends at %d", GWEN_Buffer_GetPos(destBuf)); } else { DBG_DEBUG(AQFINTS_PARSER_LOGDOMAIN, "Empty element ends at %d", GWEN_Buffer_GetPos(destBuf)); } } elementCount++; childElement=AQFINTS_Element_Tree2_GetNext(childElement); } } int writeDe(AQFINTS_ELEMENT *element, GWEN_BUFFER *destBuf) { uint32_t elementStartPos; uint32_t elementSize; elementStartPos=GWEN_Buffer_GetPos(destBuf); if (AQFINTS_Element_GetFlags(element) & AQFINTS_ELEMENT_FLAGS_ISBIN) { uint32_t lenBuf; const uint8_t *ptrBuf; lenBuf=AQFINTS_Element_GetDataLength(element); ptrBuf=AQFINTS_Element_GetDataPointer(element); if (lenBuf && ptrBuf) writeBin(ptrBuf, lenBuf, destBuf); } else { const char *s; s=AQFINTS_Element_GetDataAsChar(element, NULL); if (s && *s) writeString(s, destBuf); } elementSize=GWEN_Buffer_GetPos(destBuf)-elementStartPos; return (elementSize>0)?1:0; } void writeBin(const uint8_t *ptrBuf, uint32_t lenBuf, GWEN_BUFFER *destBuf) { char numbuf[32]; int i; i=snprintf(numbuf, sizeof(numbuf)-1, "%u", (unsigned int) lenBuf); assert(i int AQFINTS_Parser_Xml_ReadFile(AQFINTS_JOBDEF_LIST *jobDefList, AQFINTS_SEGMENT_LIST *segmentList, AQFINTS_ELEMENT *groupTree, const char *filename); int AQFINTS_Parser_Xml_ReadBuffer(AQFINTS_JOBDEF_LIST *jobDefList, AQFINTS_SEGMENT_LIST *segmentList, AQFINTS_ELEMENT *groupTree, const char *dataString); int AQFINTS_Parser_Xml_WriteSegmentDefinitionFile(const AQFINTS_SEGMENT_LIST *segmentList, const char *filename); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/parser/parser_p.h0000664000175000017500000000140114044534775024447 00000000000000/*************************************************************************** begin : Fri Jun 28 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQFINTS_PARSER_P_H #define AQFINTS_PARSER_P_H #include "libaqfints/parser/parser.h" #include struct AQFINTS_PARSER { AQFINTS_JOBDEF_LIST *jobDefList; AQFINTS_SEGMENT_LIST *segmentList; GWEN_STRINGLIST *pathList; }; #endif aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/parser/aqfints_jobdef_list.tm20000664000175000017500000000035115037736054027120 00000000000000 AQFINTS_JOBDEF_LIST AQFINTS_JobDef_List aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/parser/aqfints_segment_list.tm20000664000175000017500000000035515037736054027335 00000000000000 AQFINTS_SEGMENT_LIST AQFINTS_Segment_List aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/parser/parser_internal.c0000664000175000017500000000240214044534775026021 00000000000000/*************************************************************************** begin : Fri Jun 28 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "libaqfints/parser/parser_normalize.h" #include int AQFINTS_Parser_IsCharType(const char *sType) { if (sType && *sType) { if (strcasecmp(sType, "AN")==0 || strcasecmp(sType, "float")==0 || strcasecmp(sType, "alpha")==0 || strcasecmp(sType, "date")==0 || strcasecmp(sType, "time")==0 || strcasecmp(sType, "ascii")==0) return 1; } return 0; } int AQFINTS_Parser_IsIntType(const char *sType) { if (sType && *sType) { if (strcasecmp(sType, "num")==0) return 1; } return 0; } int AQFINTS_Parser_IsBinType(const char *sType) { if (sType && *sType) { if (strcasecmp(sType, "bin")==0) return 1; } return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/parser/jobdef.c0000664000175000017500000003620115037736054024063 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "jobdef.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "./jobdef_p.h" #include #include /* code headers */ /* macro functions */ GWEN_LIST_FUNCTIONS(AQFINTS_JOBDEF, AQFINTS_JobDef) AQFINTS_JOBDEF *AQFINTS_JobDef_new(void) { AQFINTS_JOBDEF *p_struct; GWEN_NEW_OBJECT(AQFINTS_JOBDEF, p_struct) p_struct->_refCount=1; GWEN_LIST_INIT(AQFINTS_JOBDEF, p_struct) /* members */ p_struct->flags=0; p_struct->id=NULL; p_struct->code=NULL; p_struct->jobVersion=0; p_struct->protocolVersion=0; p_struct->paramsSegmentCode=NULL; p_struct->responseSegmentCode=NULL; p_struct->neededSignatures=0; p_struct->securityClass=0; p_struct->runtimeFlags=0; /* virtual functions */ return p_struct; } void AQFINTS_JobDef_free(AQFINTS_JOBDEF *p_struct) { if (p_struct) { assert(p_struct->_refCount); if (p_struct->_refCount==1) { GWEN_LIST_FINI(AQFINTS_JOBDEF, p_struct) /* members */ free(p_struct->id); p_struct->id=NULL; free(p_struct->code); p_struct->code=NULL; free(p_struct->paramsSegmentCode); p_struct->paramsSegmentCode=NULL; free(p_struct->responseSegmentCode); p_struct->responseSegmentCode=NULL; p_struct->_refCount=0; GWEN_FREE_OBJECT(p_struct); } else p_struct->_refCount--; } } void AQFINTS_JobDef_Attach(AQFINTS_JOBDEF *p_struct) { assert(p_struct); assert(p_struct->_refCount); p_struct->_refCount++; } AQFINTS_JOBDEF *AQFINTS_JobDef_dup(const AQFINTS_JOBDEF *p_src) { AQFINTS_JOBDEF *p_struct; assert(p_src); p_struct=AQFINTS_JobDef_new(); /* member "flags" */ p_struct->flags=p_src->flags; /* member "id" */ if (p_struct->id) { free(p_struct->id); p_struct->id=NULL; p_struct->id=NULL; } if (p_src->id) { p_struct->id=strdup(p_src->id); } /* member "code" */ if (p_struct->code) { free(p_struct->code); p_struct->code=NULL; p_struct->code=NULL; } if (p_src->code) { p_struct->code=strdup(p_src->code); } /* member "jobVersion" */ p_struct->jobVersion=p_src->jobVersion; /* member "protocolVersion" */ p_struct->protocolVersion=p_src->protocolVersion; /* member "paramsSegmentCode" */ if (p_struct->paramsSegmentCode) { free(p_struct->paramsSegmentCode); p_struct->paramsSegmentCode=NULL; p_struct->paramsSegmentCode=NULL; } if (p_src->paramsSegmentCode) { p_struct->paramsSegmentCode=strdup(p_src->paramsSegmentCode); } /* member "responseSegmentCode" */ if (p_struct->responseSegmentCode) { free(p_struct->responseSegmentCode); p_struct->responseSegmentCode=NULL; p_struct->responseSegmentCode=NULL; } if (p_src->responseSegmentCode) { p_struct->responseSegmentCode=strdup(p_src->responseSegmentCode); } /* member "neededSignatures" */ p_struct->neededSignatures=p_src->neededSignatures; /* member "securityClass" */ p_struct->securityClass=p_src->securityClass; /* member "runtimeFlags" */ p_struct->runtimeFlags=p_src->runtimeFlags; return p_struct; } AQFINTS_JOBDEF *AQFINTS_JobDef_copy(AQFINTS_JOBDEF *p_struct, const AQFINTS_JOBDEF *p_src) { assert(p_struct); assert(p_src); /* member "flags" */ p_struct->flags=p_src->flags; /* member "id" */ if (p_struct->id) { free(p_struct->id); p_struct->id=NULL; p_struct->id=NULL; } if (p_src->id) { p_struct->id=strdup(p_src->id); } /* member "code" */ if (p_struct->code) { free(p_struct->code); p_struct->code=NULL; p_struct->code=NULL; } if (p_src->code) { p_struct->code=strdup(p_src->code); } /* member "jobVersion" */ p_struct->jobVersion=p_src->jobVersion; /* member "protocolVersion" */ p_struct->protocolVersion=p_src->protocolVersion; /* member "paramsSegmentCode" */ if (p_struct->paramsSegmentCode) { free(p_struct->paramsSegmentCode); p_struct->paramsSegmentCode=NULL; p_struct->paramsSegmentCode=NULL; } if (p_src->paramsSegmentCode) { p_struct->paramsSegmentCode=strdup(p_src->paramsSegmentCode); } /* member "responseSegmentCode" */ if (p_struct->responseSegmentCode) { free(p_struct->responseSegmentCode); p_struct->responseSegmentCode=NULL; p_struct->responseSegmentCode=NULL; } if (p_src->responseSegmentCode) { p_struct->responseSegmentCode=strdup(p_src->responseSegmentCode); } /* member "neededSignatures" */ p_struct->neededSignatures=p_src->neededSignatures; /* member "securityClass" */ p_struct->securityClass=p_src->securityClass; /* member "runtimeFlags" */ p_struct->runtimeFlags=p_src->runtimeFlags; return p_struct; } uint32_t AQFINTS_JobDef_GetFlags(const AQFINTS_JOBDEF *p_struct){ assert(p_struct); return p_struct->flags; } const char *AQFINTS_JobDef_GetId(const AQFINTS_JOBDEF *p_struct){ assert(p_struct); return p_struct->id; } const char *AQFINTS_JobDef_GetCode(const AQFINTS_JOBDEF *p_struct){ assert(p_struct); return p_struct->code; } int AQFINTS_JobDef_GetJobVersion(const AQFINTS_JOBDEF *p_struct){ assert(p_struct); return p_struct->jobVersion; } int AQFINTS_JobDef_GetProtocolVersion(const AQFINTS_JOBDEF *p_struct){ assert(p_struct); return p_struct->protocolVersion; } const char *AQFINTS_JobDef_GetParamsSegmentCode(const AQFINTS_JOBDEF *p_struct){ assert(p_struct); return p_struct->paramsSegmentCode; } const char *AQFINTS_JobDef_GetResponseSegmentCode(const AQFINTS_JOBDEF *p_struct){ assert(p_struct); return p_struct->responseSegmentCode; } int AQFINTS_JobDef_GetNeededSignatures(const AQFINTS_JOBDEF *p_struct){ assert(p_struct); return p_struct->neededSignatures; } int AQFINTS_JobDef_GetSecurityClass(const AQFINTS_JOBDEF *p_struct){ assert(p_struct); return p_struct->securityClass; } uint32_t AQFINTS_JobDef_GetRuntimeFlags(const AQFINTS_JOBDEF *p_struct){ assert(p_struct); return p_struct->runtimeFlags; } void AQFINTS_JobDef_SetFlags(AQFINTS_JOBDEF *p_struct, uint32_t p_src){ assert(p_struct); p_struct->flags=p_src; } void AQFINTS_JobDef_AddFlags(AQFINTS_JOBDEF *p_struct, uint32_t p_src) { assert(p_struct); p_struct->flags|=p_src; } void AQFINTS_JobDef_SubFlags(AQFINTS_JOBDEF *p_struct, uint32_t p_src) { assert(p_struct); p_struct->flags&=~p_src; } void AQFINTS_JobDef_SetId(AQFINTS_JOBDEF *p_struct, const char *p_src){ assert(p_struct); if (p_struct->id) { free(p_struct->id); p_struct->id=NULL; p_struct->id=NULL; } if (p_src) { p_struct->id=strdup(p_src); } else { p_struct->id=NULL; } } void AQFINTS_JobDef_SetCode(AQFINTS_JOBDEF *p_struct, const char *p_src){ assert(p_struct); if (p_struct->code) { free(p_struct->code); p_struct->code=NULL; p_struct->code=NULL; } if (p_src) { p_struct->code=strdup(p_src); } else { p_struct->code=NULL; } } void AQFINTS_JobDef_SetJobVersion(AQFINTS_JOBDEF *p_struct, int p_src){ assert(p_struct); p_struct->jobVersion=p_src; } void AQFINTS_JobDef_SetProtocolVersion(AQFINTS_JOBDEF *p_struct, int p_src){ assert(p_struct); p_struct->protocolVersion=p_src; } void AQFINTS_JobDef_SetParamsSegmentCode(AQFINTS_JOBDEF *p_struct, const char *p_src){ assert(p_struct); if (p_struct->paramsSegmentCode) { free(p_struct->paramsSegmentCode); p_struct->paramsSegmentCode=NULL; p_struct->paramsSegmentCode=NULL; } if (p_src) { p_struct->paramsSegmentCode=strdup(p_src); } else { p_struct->paramsSegmentCode=NULL; } } void AQFINTS_JobDef_SetResponseSegmentCode(AQFINTS_JOBDEF *p_struct, const char *p_src){ assert(p_struct); if (p_struct->responseSegmentCode) { free(p_struct->responseSegmentCode); p_struct->responseSegmentCode=NULL; p_struct->responseSegmentCode=NULL; } if (p_src) { p_struct->responseSegmentCode=strdup(p_src); } else { p_struct->responseSegmentCode=NULL; } } void AQFINTS_JobDef_SetNeededSignatures(AQFINTS_JOBDEF *p_struct, int p_src){ assert(p_struct); p_struct->neededSignatures=p_src; } void AQFINTS_JobDef_SetSecurityClass(AQFINTS_JOBDEF *p_struct, int p_src){ assert(p_struct); p_struct->securityClass=p_src; } void AQFINTS_JobDef_SetRuntimeFlags(AQFINTS_JOBDEF *p_struct, uint32_t p_src){ assert(p_struct); p_struct->runtimeFlags=p_src; } void AQFINTS_JobDef_AddRuntimeFlags(AQFINTS_JOBDEF *p_struct, uint32_t p_src) { assert(p_struct); p_struct->runtimeFlags|=p_src; } void AQFINTS_JobDef_SubRuntimeFlags(AQFINTS_JOBDEF *p_struct, uint32_t p_src) { assert(p_struct); p_struct->runtimeFlags&=~p_src; } AQFINTS_JOBDEF_LIST *AQFINTS_JobDef_List_dup(const AQFINTS_JOBDEF_LIST *p_src) { AQFINTS_JOBDEF_LIST *p_dest; AQFINTS_JOBDEF *p_elem; assert(p_src); p_dest=AQFINTS_JobDef_List_new(); p_elem=AQFINTS_JobDef_List_First(p_src); while(p_elem) { AQFINTS_JOBDEF *p_cpy; p_cpy=AQFINTS_JobDef_dup(p_elem); AQFINTS_JobDef_List_Add(p_cpy, p_dest); p_elem=AQFINTS_JobDef_List_Next(p_elem); } return p_dest; } void AQFINTS_JobDef_ReadDb(AQFINTS_JOBDEF *p_struct, GWEN_DB_NODE *p_db){ assert(p_struct); /* member "flags" */ p_struct->flags=GWEN_DB_GetIntValue(p_db, "flags", 0, 0); /* member "id" */ if (p_struct->id) { free(p_struct->id); p_struct->id=NULL; p_struct->id=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "id", 0, NULL); if (s) p_struct->id=strdup(s); } /* member "code" */ if (p_struct->code) { free(p_struct->code); p_struct->code=NULL; p_struct->code=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "code", 0, NULL); if (s) p_struct->code=strdup(s); } /* member "jobVersion" */ p_struct->jobVersion=GWEN_DB_GetIntValue(p_db, "jobVersion", 0, 0); /* member "protocolVersion" */ p_struct->protocolVersion=GWEN_DB_GetIntValue(p_db, "protocolVersion", 0, 0); /* member "paramsSegmentCode" */ if (p_struct->paramsSegmentCode) { free(p_struct->paramsSegmentCode); p_struct->paramsSegmentCode=NULL; p_struct->paramsSegmentCode=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "paramsSegmentCode", 0, NULL); if (s) p_struct->paramsSegmentCode=strdup(s); } /* member "responseSegmentCode" */ if (p_struct->responseSegmentCode) { free(p_struct->responseSegmentCode); p_struct->responseSegmentCode=NULL; p_struct->responseSegmentCode=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "responseSegmentCode", 0, NULL); if (s) p_struct->responseSegmentCode=strdup(s); } /* member "neededSignatures" */ p_struct->neededSignatures=GWEN_DB_GetIntValue(p_db, "neededSignatures", 0, 0); /* member "securityClass" */ p_struct->securityClass=GWEN_DB_GetIntValue(p_db, "securityClass", 0, 0); /* member "runtimeFlags" */ /* member "runtimeFlags" is volatile, just presetting it */ p_struct->runtimeFlags=0; } int AQFINTS_JobDef_WriteDb(const AQFINTS_JOBDEF *p_struct, GWEN_DB_NODE *p_db) { int p_rv; assert(p_struct); /* member "flags" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "flags", p_struct->flags); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "id" */ if (p_struct->id) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "id", p_struct->id); else { GWEN_DB_DeleteVar(p_db, "id"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "code" */ if (p_struct->code) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "code", p_struct->code); else { GWEN_DB_DeleteVar(p_db, "code"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "jobVersion" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "jobVersion", p_struct->jobVersion); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "protocolVersion" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "protocolVersion", p_struct->protocolVersion); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "paramsSegmentCode" */ if (p_struct->paramsSegmentCode) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "paramsSegmentCode", p_struct->paramsSegmentCode); else { GWEN_DB_DeleteVar(p_db, "paramsSegmentCode"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "responseSegmentCode" */ if (p_struct->responseSegmentCode) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "responseSegmentCode", p_struct->responseSegmentCode); else { GWEN_DB_DeleteVar(p_db, "responseSegmentCode"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "neededSignatures" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "neededSignatures", p_struct->neededSignatures); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "securityClass" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "securityClass", p_struct->securityClass); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "runtimeFlags" is volatile, not writing to db */ return 0; } AQFINTS_JOBDEF *AQFINTS_JobDef_fromDb(GWEN_DB_NODE *p_db) { AQFINTS_JOBDEF *p_struct; p_struct=AQFINTS_JobDef_new(); AQFINTS_JobDef_ReadDb(p_struct, p_db); return p_struct; } int AQFINTS_JobDef_toDb(const AQFINTS_JOBDEF *p_struct, GWEN_DB_NODE *p_db) { return AQFINTS_JobDef_WriteDb(p_struct, p_db); } AQFINTS_JOBDEF *AQFINTS_JobDef_List_GetById(const AQFINTS_JOBDEF_LIST *p_list, const char *p_cmp){ AQFINTS_JOBDEF *p_struct; assert(p_list); p_struct = AQFINTS_JobDef_List_First(p_list); while(p_struct) { int p_rv; if (p_struct->id && p_cmp) p_rv=strcasecmp(p_cmp, p_struct->id); else if (p_cmp) p_rv=1; else if (p_struct->id) p_rv=-1; else p_rv=0; if (p_rv == 0) return p_struct; p_struct = AQFINTS_JobDef_List_Next(p_struct); } return NULL; } AQFINTS_JOBDEF *AQFINTS_JobDef_List_GetByCode(const AQFINTS_JOBDEF_LIST *p_list, const char *p_cmp){ AQFINTS_JOBDEF *p_struct; assert(p_list); p_struct = AQFINTS_JobDef_List_First(p_list); while(p_struct) { int p_rv; if (p_struct->code && p_cmp) p_rv=strcasecmp(p_cmp, p_struct->code); else if (p_cmp) p_rv=1; else if (p_struct->code) p_rv=-1; else p_rv=0; if (p_rv == 0) return p_struct; p_struct = AQFINTS_JobDef_List_Next(p_struct); } return NULL; } AQFINTS_JOBDEF *AQFINTS_JobDef_List_GetByParamsSegmentCode(const AQFINTS_JOBDEF_LIST *p_list, const char *p_cmp){ AQFINTS_JOBDEF *p_struct; assert(p_list); p_struct = AQFINTS_JobDef_List_First(p_list); while(p_struct) { int p_rv; if (p_struct->paramsSegmentCode && p_cmp) p_rv=strcasecmp(p_cmp, p_struct->paramsSegmentCode); else if (p_cmp) p_rv=1; else if (p_struct->paramsSegmentCode) p_rv=-1; else p_rv=0; if (p_rv == 0) return p_struct; p_struct = AQFINTS_JobDef_List_Next(p_struct); } return NULL; } /* code headers */ aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/parser/segment.c0000664000175000017500000004337115037736054024302 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "segment.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "./segment_p.h" #include #include /* code headers */ /* macro functions */ GWEN_LIST_FUNCTIONS(AQFINTS_SEGMENT, AQFINTS_Segment) AQFINTS_SEGMENT *AQFINTS_Segment_new(void) { AQFINTS_SEGMENT *p_struct; GWEN_NEW_OBJECT(AQFINTS_SEGMENT, p_struct) p_struct->_refCount=1; GWEN_LIST_INIT(AQFINTS_SEGMENT, p_struct) /* members */ p_struct->flags=0; p_struct->id=NULL; p_struct->code=NULL; p_struct->segmentVersion=0; p_struct->segmentNumber=0; p_struct->refSegmentNumber=0; p_struct->protocolVersion=0; p_struct->data.pointer=NULL; p_struct->data.length=0; p_struct->elements=NULL; p_struct->dbData=NULL; p_struct->runtimeFlags=0; /* virtual functions */ return p_struct; } void AQFINTS_Segment_free(AQFINTS_SEGMENT *p_struct) { if (p_struct) { assert(p_struct->_refCount); if (p_struct->_refCount==1) { GWEN_LIST_FINI(AQFINTS_SEGMENT, p_struct) /* members */ free(p_struct->id); p_struct->id=NULL; free(p_struct->code); p_struct->code=NULL; if (p_struct->data.length && p_struct->data.pointer) { free(p_struct->data.pointer); } p_struct->data.pointer=NULL; p_struct->data.length=0; AQFINTS_Element_free(p_struct->elements); p_struct->elements=NULL; GWEN_DB_Group_free(p_struct->dbData); p_struct->dbData=NULL; p_struct->_refCount=0; GWEN_FREE_OBJECT(p_struct); } else p_struct->_refCount--; } } void AQFINTS_Segment_Attach(AQFINTS_SEGMENT *p_struct) { assert(p_struct); assert(p_struct->_refCount); p_struct->_refCount++; } AQFINTS_SEGMENT *AQFINTS_Segment_dup(const AQFINTS_SEGMENT *p_src) { AQFINTS_SEGMENT *p_struct; assert(p_src); p_struct=AQFINTS_Segment_new(); /* member "flags" */ p_struct->flags=p_src->flags; /* member "id" */ if (p_struct->id) { free(p_struct->id); p_struct->id=NULL; p_struct->id=NULL; } if (p_src->id) { p_struct->id=strdup(p_src->id); } /* member "code" */ if (p_struct->code) { free(p_struct->code); p_struct->code=NULL; p_struct->code=NULL; } if (p_src->code) { p_struct->code=strdup(p_src->code); } /* member "segmentVersion" */ p_struct->segmentVersion=p_src->segmentVersion; /* member "segmentNumber" */ p_struct->segmentNumber=p_src->segmentNumber; /* member "refSegmentNumber" */ p_struct->refSegmentNumber=p_src->refSegmentNumber; /* member "protocolVersion" */ p_struct->protocolVersion=p_src->protocolVersion; /* member "data" */ if (p_struct->data.length && p_struct->data.pointer) { free(p_struct->data.pointer); } p_struct->data.pointer=NULL; p_struct->data.length=0; if (p_src->data.length && p_src->data.pointer) { p_struct->data.pointer=(uint8_t*) malloc(p_src->data.length); if (p_struct->data.pointer) { p_struct->data.length=p_src->data.length; memmove(p_struct->data.pointer, p_src->data.pointer, p_src->data.length); } else { p_struct->data.pointer=NULL; p_struct->data.length=0; } } else { p_struct->data.pointer=NULL; p_struct->data.length=0; } /* member "elements" */ if (p_struct->elements) { AQFINTS_Element_free(p_struct->elements); p_struct->elements=NULL; p_struct->elements=NULL; } if (p_src->elements) { p_struct->elements=AQFINTS_Element_dup(p_src->elements); } /* member "dbData" */ if (p_struct->dbData) { GWEN_DB_Group_free(p_struct->dbData); p_struct->dbData=NULL; p_struct->dbData=NULL; } if (p_src->dbData) { p_struct->dbData=GWEN_DB_Group_dup(p_src->dbData); } /* member "runtimeFlags" */ p_struct->runtimeFlags=p_src->runtimeFlags; return p_struct; } AQFINTS_SEGMENT *AQFINTS_Segment_copy(AQFINTS_SEGMENT *p_struct, const AQFINTS_SEGMENT *p_src) { assert(p_struct); assert(p_src); /* member "flags" */ p_struct->flags=p_src->flags; /* member "id" */ if (p_struct->id) { free(p_struct->id); p_struct->id=NULL; p_struct->id=NULL; } if (p_src->id) { p_struct->id=strdup(p_src->id); } /* member "code" */ if (p_struct->code) { free(p_struct->code); p_struct->code=NULL; p_struct->code=NULL; } if (p_src->code) { p_struct->code=strdup(p_src->code); } /* member "segmentVersion" */ p_struct->segmentVersion=p_src->segmentVersion; /* member "segmentNumber" */ p_struct->segmentNumber=p_src->segmentNumber; /* member "refSegmentNumber" */ p_struct->refSegmentNumber=p_src->refSegmentNumber; /* member "protocolVersion" */ p_struct->protocolVersion=p_src->protocolVersion; /* member "data" */ if (p_struct->data.length && p_struct->data.pointer) { free(p_struct->data.pointer); } p_struct->data.pointer=NULL; p_struct->data.length=0; if (p_src->data.length && p_src->data.pointer) { p_struct->data.pointer=(uint8_t*) malloc(p_src->data.length); if (p_struct->data.pointer) { p_struct->data.length=p_src->data.length; memmove(p_struct->data.pointer, p_src->data.pointer, p_src->data.length); } else { p_struct->data.pointer=NULL; p_struct->data.length=0; } } else { p_struct->data.pointer=NULL; p_struct->data.length=0; } /* member "elements" has nocopy flag, not copying */ /* member "dbData" */ if (p_struct->dbData) { GWEN_DB_Group_free(p_struct->dbData); p_struct->dbData=NULL; p_struct->dbData=NULL; } if (p_src->dbData) { p_struct->dbData=GWEN_DB_Group_dup(p_src->dbData); } /* member "runtimeFlags" */ p_struct->runtimeFlags=p_src->runtimeFlags; return p_struct; } uint32_t AQFINTS_Segment_GetFlags(const AQFINTS_SEGMENT *p_struct){ assert(p_struct); return p_struct->flags; } const char *AQFINTS_Segment_GetId(const AQFINTS_SEGMENT *p_struct){ assert(p_struct); return p_struct->id; } const char *AQFINTS_Segment_GetCode(const AQFINTS_SEGMENT *p_struct){ assert(p_struct); return p_struct->code; } int AQFINTS_Segment_GetSegmentVersion(const AQFINTS_SEGMENT *p_struct){ assert(p_struct); return p_struct->segmentVersion; } int AQFINTS_Segment_GetSegmentNumber(const AQFINTS_SEGMENT *p_struct){ assert(p_struct); return p_struct->segmentNumber; } int AQFINTS_Segment_GetRefSegmentNumber(const AQFINTS_SEGMENT *p_struct){ assert(p_struct); return p_struct->refSegmentNumber; } int AQFINTS_Segment_GetProtocolVersion(const AQFINTS_SEGMENT *p_struct){ assert(p_struct); return p_struct->protocolVersion; } AQFINTS_ELEMENT *AQFINTS_Segment_GetElements(const AQFINTS_SEGMENT *p_struct){ assert(p_struct); return p_struct->elements; } GWEN_DB_NODE *AQFINTS_Segment_GetDbData(const AQFINTS_SEGMENT *p_struct){ assert(p_struct); return p_struct->dbData; } uint32_t AQFINTS_Segment_GetRuntimeFlags(const AQFINTS_SEGMENT *p_struct){ assert(p_struct); return p_struct->runtimeFlags; } void AQFINTS_Segment_SetFlags(AQFINTS_SEGMENT *p_struct, uint32_t p_src){ assert(p_struct); p_struct->flags=p_src; } void AQFINTS_Segment_AddFlags(AQFINTS_SEGMENT *p_struct, uint32_t p_src) { assert(p_struct); p_struct->flags|=p_src; } void AQFINTS_Segment_SubFlags(AQFINTS_SEGMENT *p_struct, uint32_t p_src) { assert(p_struct); p_struct->flags&=~p_src; } void AQFINTS_Segment_SetId(AQFINTS_SEGMENT *p_struct, const char *p_src){ assert(p_struct); if (p_struct->id) { free(p_struct->id); p_struct->id=NULL; p_struct->id=NULL; } if (p_src) { p_struct->id=strdup(p_src); } else { p_struct->id=NULL; } } void AQFINTS_Segment_SetCode(AQFINTS_SEGMENT *p_struct, const char *p_src){ assert(p_struct); if (p_struct->code) { free(p_struct->code); p_struct->code=NULL; p_struct->code=NULL; } if (p_src) { p_struct->code=strdup(p_src); } else { p_struct->code=NULL; } } void AQFINTS_Segment_SetSegmentVersion(AQFINTS_SEGMENT *p_struct, int p_src){ assert(p_struct); p_struct->segmentVersion=p_src; } void AQFINTS_Segment_SetSegmentNumber(AQFINTS_SEGMENT *p_struct, int p_src){ assert(p_struct); p_struct->segmentNumber=p_src; } void AQFINTS_Segment_SetRefSegmentNumber(AQFINTS_SEGMENT *p_struct, int p_src){ assert(p_struct); p_struct->refSegmentNumber=p_src; } void AQFINTS_Segment_SetProtocolVersion(AQFINTS_SEGMENT *p_struct, int p_src){ assert(p_struct); p_struct->protocolVersion=p_src; } void AQFINTS_Segment_SetElements(AQFINTS_SEGMENT *p_struct, AQFINTS_ELEMENT *p_src){ assert(p_struct); if (p_struct->elements) { AQFINTS_Element_free(p_struct->elements); p_struct->elements=NULL; p_struct->elements=NULL; } p_struct->elements=p_src; } void AQFINTS_Segment_SetDbData(AQFINTS_SEGMENT *p_struct, GWEN_DB_NODE *p_src){ assert(p_struct); if (p_struct->dbData) { GWEN_DB_Group_free(p_struct->dbData); p_struct->dbData=NULL; p_struct->dbData=NULL; } p_struct->dbData=p_src; } void AQFINTS_Segment_SetRuntimeFlags(AQFINTS_SEGMENT *p_struct, uint32_t p_src){ assert(p_struct); p_struct->runtimeFlags=p_src; } void AQFINTS_Segment_AddRuntimeFlags(AQFINTS_SEGMENT *p_struct, uint32_t p_src) { assert(p_struct); p_struct->runtimeFlags|=p_src; } void AQFINTS_Segment_SubRuntimeFlags(AQFINTS_SEGMENT *p_struct, uint32_t p_src) { assert(p_struct); p_struct->runtimeFlags&=~p_src; } AQFINTS_SEGMENT_LIST *AQFINTS_Segment_List_dup(const AQFINTS_SEGMENT_LIST *p_src) { AQFINTS_SEGMENT_LIST *p_dest; AQFINTS_SEGMENT *p_elem; assert(p_src); p_dest=AQFINTS_Segment_List_new(); p_elem=AQFINTS_Segment_List_First(p_src); while(p_elem) { AQFINTS_SEGMENT *p_cpy; p_cpy=AQFINTS_Segment_dup(p_elem); AQFINTS_Segment_List_Add(p_cpy, p_dest); p_elem=AQFINTS_Segment_List_Next(p_elem); } return p_dest; } void AQFINTS_Segment_ReadDb(AQFINTS_SEGMENT *p_struct, GWEN_DB_NODE *p_db){ assert(p_struct); /* member "flags" */ p_struct->flags=GWEN_DB_GetIntValue(p_db, "flags", 0, 0); /* member "id" */ if (p_struct->id) { free(p_struct->id); p_struct->id=NULL; p_struct->id=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "id", 0, NULL); if (s) p_struct->id=strdup(s); } /* member "code" */ if (p_struct->code) { free(p_struct->code); p_struct->code=NULL; p_struct->code=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "code", 0, NULL); if (s) p_struct->code=strdup(s); } /* member "segmentVersion" */ p_struct->segmentVersion=GWEN_DB_GetIntValue(p_db, "segmentVersion", 0, 0); /* member "segmentNumber" */ p_struct->segmentNumber=GWEN_DB_GetIntValue(p_db, "segmentNumber", 0, 0); /* member "refSegmentNumber" */ p_struct->refSegmentNumber=GWEN_DB_GetIntValue(p_db, "refSegmentNumber", 0, 0); /* member "protocolVersion" */ p_struct->protocolVersion=GWEN_DB_GetIntValue(p_db, "protocolVersion", 0, 0); /* member "data" */ if (p_struct->data.length && p_struct->data.pointer) { free(p_struct->data.pointer); } p_struct->data.pointer=NULL; p_struct->data.length=0; { const void *v; unsigned int vlen; v=GWEN_DB_GetBinValue(p_db, "data", 0, NULL, 0, &vlen); if (v && vlen) { uint8_t *dest; dest=(uint8_t*) malloc(vlen); memmove(dest, v, vlen); p_struct->data.pointer=dest; p_struct->data.length=vlen; } } /* member "elements" */ if (p_struct->elements) { AQFINTS_Element_free(p_struct->elements); p_struct->elements=NULL; p_struct->elements=NULL; } { GWEN_DB_NODE *dbSource; dbSource=GWEN_DB_GetGroup(p_db, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "elements"); if (dbSource) p_struct->elements=AQFINTS_Element_fromDb(dbSource); else p_struct->elements=NULL; } /* member "dbData" */ if (p_struct->dbData) { GWEN_DB_Group_free(p_struct->dbData); p_struct->dbData=NULL; p_struct->dbData=NULL; } { GWEN_DB_NODE *dbSrc; dbSrc=GWEN_DB_GetGroup(p_db, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "dbData"); if (dbSrc) { p_struct->dbData=GWEN_DB_Group_dup(dbSrc); } else p_struct->dbData=NULL; } /* member "runtimeFlags" */ /* member "runtimeFlags" is volatile, just presetting it */ p_struct->runtimeFlags=0; } int AQFINTS_Segment_WriteDb(const AQFINTS_SEGMENT *p_struct, GWEN_DB_NODE *p_db) { int p_rv; assert(p_struct); /* member "flags" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "flags", p_struct->flags); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "id" */ if (p_struct->id) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "id", p_struct->id); else { GWEN_DB_DeleteVar(p_db, "id"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "code" */ if (p_struct->code) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "code", p_struct->code); else { GWEN_DB_DeleteVar(p_db, "code"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "segmentVersion" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "segmentVersion", p_struct->segmentVersion); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "segmentNumber" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "segmentNumber", p_struct->segmentNumber); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "refSegmentNumber" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "refSegmentNumber", p_struct->refSegmentNumber); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "protocolVersion" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "protocolVersion", p_struct->protocolVersion); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "data" */ { if (p_struct->data.length && p_struct->data.pointer) { GWEN_DB_SetBinValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "data", p_struct->data.pointer, p_struct->data.length); } else { GWEN_DB_DeleteVar(p_db, "data"); p_rv=0; } } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "elements" */ { if (p_struct->elements) { GWEN_DB_NODE *dbDest; dbDest=GWEN_DB_GetGroup(p_db, GWEN_DB_FLAGS_OVERWRITE_GROUPS, "elements"); assert(dbDest); p_rv=AQFINTS_Element_toDb(p_struct->elements, dbDest); } else p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "dbData" */ if (p_struct->dbData){ GWEN_DB_NODE *dbCopy; dbCopy=GWEN_DB_GetGroup(p_db, GWEN_DB_FLAGS_DEFAULT, "dbData"); assert(dbCopy); p_rv=GWEN_DB_AddGroupChildren(dbCopy, p_struct->dbData); } else { GWEN_DB_DeleteGroup(p_db, "dbData"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "runtimeFlags" is volatile, not writing to db */ return 0; } AQFINTS_SEGMENT *AQFINTS_Segment_fromDb(GWEN_DB_NODE *p_db) { AQFINTS_SEGMENT *p_struct; p_struct=AQFINTS_Segment_new(); AQFINTS_Segment_ReadDb(p_struct, p_db); return p_struct; } int AQFINTS_Segment_toDb(const AQFINTS_SEGMENT *p_struct, GWEN_DB_NODE *p_db) { return AQFINTS_Segment_WriteDb(p_struct, p_db); } AQFINTS_SEGMENT *AQFINTS_Segment_List_GetByCode(const AQFINTS_SEGMENT_LIST *p_list, const char *p_cmp){ AQFINTS_SEGMENT *p_struct; assert(p_list); p_struct = AQFINTS_Segment_List_First(p_list); while(p_struct) { int p_rv; if (p_struct->code && p_cmp) p_rv=strcasecmp(p_cmp, p_struct->code); else if (p_cmp) p_rv=1; else if (p_struct->code) p_rv=-1; else p_rv=0; if (p_rv == 0) return p_struct; p_struct = AQFINTS_Segment_List_Next(p_struct); } return NULL; } AQFINTS_SEGMENT *AQFINTS_Segment_List_GetBySegmentNumber(const AQFINTS_SEGMENT_LIST *p_list, int p_cmp){ AQFINTS_SEGMENT *p_struct; assert(p_list); p_struct = AQFINTS_Segment_List_First(p_list); while(p_struct) { int p_rv; if (p_struct->segmentNumber==p_cmp) p_rv=0; else if (p_cmpsegmentNumber) p_rv=-1; else p_rv=1; if (p_rv == 0) return p_struct; p_struct = AQFINTS_Segment_List_Next(p_struct); } return NULL; } void AQFINTS_Segment_SetData(AQFINTS_SEGMENT *st, uint8_t *ptr, uint32_t len) { if (st->data.pointer && st->data.length) free(st->data.pointer); st->data.pointer=ptr; st->data.length=len; } void AQFINTS_Segment_SetDataAsCopy(AQFINTS_SEGMENT *st, const uint8_t *ptr, uint32_t len) { if (st->data.pointer && st->data.length) free(st->data.pointer); if (ptr && len>0) { void *ptrCopy; ptrCopy=malloc(len); assert(ptrCopy); memmove(ptrCopy, ptr, len); st->data.pointer=ptrCopy; st->data.length=len; } else { st->data.pointer=NULL; st->data.length=0; } } uint8_t* AQFINTS_Segment_GetDataPointer(const AQFINTS_SEGMENT *st) { return st->data.pointer; } uint32_t AQFINTS_Segment_GetDataLength(const AQFINTS_SEGMENT *st) { return st->data.length; } uint32_t AQFINTS_Segment_List_SampleFlags(const AQFINTS_SEGMENT_LIST *stl) { uint32_t flags=0; if (stl) { AQFINTS_SEGMENT *segment; segment=AQFINTS_Segment_List_First(stl); while(segment) { flags|=AQFINTS_Segment_GetFlags(segment); segment=AQFINTS_Segment_List_Next(segment); } } return flags; } uint32_t AQFINTS_Segment_List_SampleSizes(const AQFINTS_SEGMENT_LIST *stl) { uint32_t len=0; if (stl) { AQFINTS_SEGMENT *segment; segment=AQFINTS_Segment_List_First(stl); while(segment) { len+=segment->data.length; segment=AQFINTS_Segment_List_Next(segment); } } return len; } void AQFINTS_Segment_List_SampleBuffers(const AQFINTS_SEGMENT_LIST *segmentList, GWEN_BUFFER *destBuf) { if (segmentList) { AQFINTS_SEGMENT *segment; segment=AQFINTS_Segment_List_First(segmentList); while (segment) { if (segment->data.pointer && segment->data.length>0) GWEN_Buffer_AppendBytes(destBuf, (const char*) segment->data.pointer, segment->data.length); segment=AQFINTS_Segment_List_Next(segment); } } } /* code headers */ aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/parser/libtest.c0000664000175000017500000010044014044534775024300 00000000000000/*************************************************************************** begin : Fri Jun 28 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #include "libaqfints/parser/parser.h" #include "libaqfints/parser/parser_xml.h" #include "libaqfints/parser/parser_dump.h" #include "libaqfints/parser/parser_normalize.h" #include "libaqfints/parser/parser_hbci.h" #include "libaqfints/parser/parser_dbread.h" #include "libaqfints/parser/parser_dbwrite.h" int test_loadFile(const char *filename) { int rv; AQFINTS_JOBDEF_LIST *jobDefList; AQFINTS_SEGMENT_LIST *segmentList; AQFINTS_ELEMENT *groupTree; jobDefList=AQFINTS_JobDef_List_new(); segmentList=AQFINTS_Segment_List_new(); groupTree=AQFINTS_Element_new(); AQFINTS_Element_SetElementType(groupTree, AQFINTS_ElementType_Root); rv=AQFINTS_Parser_Xml_ReadFile(jobDefList, segmentList, groupTree, filename); if (rv<0) { fprintf(stderr, "Error reading file.\n"); AQFINTS_Element_Tree2_free(groupTree); AQFINTS_Segment_List_free(segmentList); return 2; } fprintf(stderr, "Groups:\n"); AQFINTS_Parser_DumpElementTree(groupTree, 2); fprintf(stderr, "Segments:\n"); AQFINTS_Parser_DumpSegmentList(segmentList, 2); AQFINTS_Parser_SegmentList_ResolveGroups(segmentList, groupTree); fprintf(stderr, "Segments after resolving groups:\n"); AQFINTS_Parser_DumpSegmentList(segmentList, 2); AQFINTS_Parser_SegmentList_Normalize(segmentList); fprintf(stderr, "Segments after normalizing:\n"); AQFINTS_Parser_DumpSegmentList(segmentList, 2); AQFINTS_Element_Tree2_free(groupTree); AQFINTS_Segment_List_free(segmentList); fprintf(stderr, "Success.\n"); return 0; } int test_readHbci(void) { const char *testData= "HNSHK:2:4+PIN:2+942+20190625002302+1+1+1::3333333333333333333333333333+1+1:20190625:002302+1:999:1+6:10:16+280:49999924:1111111111111111111:S:1:1'" "HKIDN:3:2+280:49999924+1111111111111111111+2222222222222222222222222222+1'" "HKVVB:4:3+4+0+1+AQHBCI+5.99'" "HNSHA:5:2+20190625002302++444444444'" "TEST1:6:1+testdata1::@12@123456789012'"; int rv; AQFINTS_SEGMENT_LIST *segmentList; segmentList=AQFINTS_Segment_List_new(); rv=AQFINTS_Parser_Hbci_ReadBuffer(segmentList, (const uint8_t *) testData, strlen(testData)); if (rv<0) { fprintf(stderr, "Error reading HBCI data.\n"); AQFINTS_Segment_List_free(segmentList); return 2; } fprintf(stderr, "Segments:\n"); AQFINTS_Parser_DumpSegmentList(segmentList, 2); fprintf(stderr, "Success.\n"); return 0; } int test_readHbci2(const char *fileName) { int rv; GWEN_BUFFER *tbuf; AQFINTS_SEGMENT_LIST *segmentList; tbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_SyncIo_Helper_ReadFile(fileName, tbuf); if (rv<0) { fprintf(stderr, "Error reading HBCI file.\n"); GWEN_Buffer_free(tbuf); return 2; } segmentList=AQFINTS_Segment_List_new(); rv=AQFINTS_Parser_Hbci_ReadBuffer(segmentList, (const uint8_t *) GWEN_Buffer_GetStart(tbuf), GWEN_Buffer_GetUsedBytes(tbuf)); if (rv<0) { fprintf(stderr, "Error reading HBCI data.\n"); AQFINTS_Segment_List_free(segmentList); GWEN_Buffer_free(tbuf); return 2; } fprintf(stderr, "Segments:\n"); AQFINTS_Parser_DumpSegmentList(segmentList, 2); AQFINTS_Segment_List_free(segmentList); GWEN_Buffer_free(tbuf); fprintf(stderr, "Success.\n"); return 0; } int test_saveFile1(const char *filenameIn, const char *filenameOut) { int rv; AQFINTS_JOBDEF_LIST *jobDefList; AQFINTS_SEGMENT_LIST *segmentList; AQFINTS_ELEMENT *groupTree; jobDefList=AQFINTS_JobDef_List_new(); segmentList=AQFINTS_Segment_List_new(); groupTree=AQFINTS_Element_new(); AQFINTS_Element_SetElementType(groupTree, AQFINTS_ElementType_Root); rv=AQFINTS_Parser_Xml_ReadFile(jobDefList, segmentList, groupTree, filenameIn); if (rv<0) { fprintf(stderr, "Error reading file.\n"); AQFINTS_Element_Tree2_free(groupTree); AQFINTS_Segment_List_free(segmentList); return 2; } AQFINTS_Parser_SegmentList_ResolveGroups(segmentList, groupTree); AQFINTS_Parser_SegmentList_Normalize(segmentList); rv=AQFINTS_Parser_Xml_WriteSegmentDefinitionFile(segmentList, filenameOut); if (rv<0) { fprintf(stderr, "Error writing file (%d).\n", rv); AQFINTS_Element_Tree2_free(groupTree); AQFINTS_Segment_List_free(segmentList); return 2; } AQFINTS_Element_Tree2_free(groupTree); AQFINTS_Segment_List_free(segmentList); fprintf(stderr, "Success.\n"); return 0; } int test_saveFile2(const char *filenameOut) { const char *testData= "HNSHK:2:4+PIN:2+942+20190625002302+1+1+1::3333333333333333333333333333+1+1:20190625:002302+1:999:1+6:10:16+280:49999924:1111111111111111111:S:1:1'" "HKIDN:3:2+280:49999924+1111111111111111111+2222222222222222222222222222+1'" "HKVVB:4:3+4+0+1+AQHBCI+5.99'" "HNSHA:5:2+20190625002302++444444444'" "TEST1:6:1+testdata1::@12@123456789012'"; int rv; AQFINTS_SEGMENT_LIST *segmentList; segmentList=AQFINTS_Segment_List_new(); rv=AQFINTS_Parser_Hbci_ReadBuffer(segmentList, (const uint8_t *) testData, strlen(testData)); if (rv<0) { fprintf(stderr, "Error reading HBCI data.\n"); AQFINTS_Segment_List_free(segmentList); return 2; } rv=AQFINTS_Parser_Xml_WriteSegmentDefinitionFile(segmentList, filenameOut); if (rv<0) { fprintf(stderr, "Error writing file (%d).\n", rv); AQFINTS_Segment_List_free(segmentList); return 2; } AQFINTS_Segment_List_free(segmentList); fprintf(stderr, "Success.\n"); return 0; } int test_writeSegments() { const char *testData= "HNSHK:2:4+PIN:2+942+20190625002302+1+1+1::3333333333333333333333333333+1+1:20190625:002302+1:999:1+6:10:16+280:49999924:1111111111111111111:S:1:1'" "HKIDN:3:2+280:49999924+1111111111111111111+2222222222222222222222222222+1'" "HKVVB:4:3+4+0+1+AQHBCI+5.99'" "HNSHA:5:2+20190625002302++444444444'" "TEST1:6:1+testdata1::@12@123456789012'"; int rv; AQFINTS_SEGMENT_LIST *segmentList; GWEN_BUFFER *destBuf; segmentList=AQFINTS_Segment_List_new(); rv=AQFINTS_Parser_Hbci_ReadBuffer(segmentList, (const uint8_t *) testData, strlen(testData)); if (rv<0) { fprintf(stderr, "Error reading HBCI data.\n"); AQFINTS_Segment_List_free(segmentList); return 2; } AQFINTS_Parser_Hbci_WriteBuffer(segmentList); destBuf=GWEN_Buffer_new(0, 256, 0, 1); AQFINTS_Segment_List_SampleBuffers(segmentList, destBuf); GWEN_Buffer_Dump(destBuf, 2); fprintf(stderr, "Segments:\n"); AQFINTS_Parser_DumpSegmentList(segmentList, 2); if (strlen(testData)!=GWEN_Buffer_GetUsedBytes(destBuf)) { fprintf(stderr, "ERROR: Size differs (orig=%d, returned=%d)\n", (int) strlen(testData), GWEN_Buffer_GetUsedBytes(destBuf)); } if (memcmp(testData, GWEN_Buffer_GetStart(destBuf), GWEN_Buffer_GetUsedBytes(destBuf))) { fprintf(stderr, "ERROR: Data differs\n"); } GWEN_Buffer_free(destBuf); AQFINTS_Segment_List_free(segmentList); fprintf(stderr, "Success.\n"); return 0; } int test_segmentToDb1() { AQFINTS_JOBDEF_LIST *jobDefList; AQFINTS_SEGMENT_LIST *segmentListDef; AQFINTS_SEGMENT_LIST *segmentListData; AQFINTS_ELEMENT *groupTree; GWEN_DB_NODE *dbData; int rv; const char *defData= "" "" "" "" "" "" "" "" "" "" "" "" "" ""; const char *elemData= "" "" "" "" "123" "data 1.1.2" "" "" "data 1.2.1" "data 1.2.2" "" "" "" ""; groupTree=AQFINTS_Element_new(); AQFINTS_Element_SetElementType(groupTree, AQFINTS_ElementType_Root); jobDefList=AQFINTS_JobDef_List_new(); segmentListDef=AQFINTS_Segment_List_new(); segmentListData=AQFINTS_Segment_List_new(); rv=AQFINTS_Parser_Xml_ReadBuffer(jobDefList, segmentListDef, groupTree, defData); if (rv<0) { fprintf(stderr, "Error reading definitions (%d).\n", rv); AQFINTS_Element_Tree2_free(groupTree); AQFINTS_Segment_List_free(segmentListData); AQFINTS_Segment_List_free(segmentListDef); return 2; } rv=AQFINTS_Parser_Xml_ReadBuffer(jobDefList, segmentListData, groupTree, elemData); if (rv<0) { fprintf(stderr, "Error reading data (%d).\n", rv); AQFINTS_Element_Tree2_free(groupTree); AQFINTS_Segment_List_free(segmentListData); AQFINTS_Segment_List_free(segmentListDef); return 2; } dbData=GWEN_DB_Group_new("data"); rv=AQFINTS_Parser_Db_ReadSegment(AQFINTS_Segment_List_First(segmentListDef), AQFINTS_Segment_List_First(segmentListData), dbData); if (rv<0) { fprintf(stderr, "Error parsing data.\n"); GWEN_DB_Group_free(dbData); AQFINTS_Element_Tree2_free(groupTree); AQFINTS_Segment_List_free(segmentListData); AQFINTS_Segment_List_free(segmentListDef); return 2; } GWEN_DB_Dump(dbData, 2); GWEN_DB_Group_free(dbData); AQFINTS_Element_Tree2_free(groupTree); AQFINTS_Segment_List_free(segmentListData); AQFINTS_Segment_List_free(segmentListDef); fprintf(stderr, "Success.\n"); return 0; } int test_segmentToDb2() { AQFINTS_JOBDEF_LIST *jobDefList; AQFINTS_SEGMENT_LIST *segmentListDef; AQFINTS_SEGMENT_LIST *segmentListData; AQFINTS_ELEMENT *groupTree; GWEN_DB_NODE *dbData; int rv; const char *defData= "" "" "" "" "" "" "" "" "" "" "" "" "" ""; const char *elemData= "" "" "" "" "123" "data 1.1.2" "" "" "data 1.2.1" "data 1.2.2" "data 1.2.2b" "" "" "" ""; groupTree=AQFINTS_Element_new(); AQFINTS_Element_SetElementType(groupTree, AQFINTS_ElementType_Root); jobDefList=AQFINTS_JobDef_List_new(); segmentListDef=AQFINTS_Segment_List_new(); segmentListData=AQFINTS_Segment_List_new(); rv=AQFINTS_Parser_Xml_ReadBuffer(jobDefList, segmentListDef, groupTree, defData); if (rv<0) { fprintf(stderr, "Error reading definitions (%d).\n", rv); AQFINTS_Element_Tree2_free(groupTree); AQFINTS_Segment_List_free(segmentListData); AQFINTS_Segment_List_free(segmentListDef); return 2; } rv=AQFINTS_Parser_Xml_ReadBuffer(jobDefList, segmentListData, groupTree, elemData); if (rv<0) { fprintf(stderr, "Error reading data (%d).\n", rv); AQFINTS_Element_Tree2_free(groupTree); AQFINTS_Segment_List_free(segmentListData); AQFINTS_Segment_List_free(segmentListDef); return 2; } dbData=GWEN_DB_Group_new("data"); rv=AQFINTS_Parser_Db_ReadSegment(AQFINTS_Segment_List_First(segmentListDef), AQFINTS_Segment_List_First(segmentListData), dbData); if (rv<0) { fprintf(stderr, "Error parsing data.\n"); GWEN_DB_Group_free(dbData); AQFINTS_Element_Tree2_free(groupTree); AQFINTS_Segment_List_free(segmentListData); AQFINTS_Segment_List_free(segmentListDef); return 2; } GWEN_DB_Dump(dbData, 2); GWEN_DB_Group_free(dbData); AQFINTS_Element_Tree2_free(groupTree); AQFINTS_Segment_List_free(segmentListData); AQFINTS_Segment_List_free(segmentListDef); fprintf(stderr, "Success.\n"); return 0; } int test_segmentToDb3() { AQFINTS_JOBDEF_LIST *jobDefList; AQFINTS_SEGMENT_LIST *segmentListDef; AQFINTS_SEGMENT_LIST *segmentListData; AQFINTS_ELEMENT *groupTree; GWEN_DB_NODE *dbData; int rv; const char *defData= "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""; const char *elemData= "" "" "" "" "123" "data 1.1.2" "" "" "data 1.2.1" "data 1.2.2" "" "" "" ""; groupTree=AQFINTS_Element_new(); AQFINTS_Element_SetElementType(groupTree, AQFINTS_ElementType_Root); jobDefList=AQFINTS_JobDef_List_new(); segmentListDef=AQFINTS_Segment_List_new(); segmentListData=AQFINTS_Segment_List_new(); rv=AQFINTS_Parser_Xml_ReadBuffer(jobDefList, segmentListDef, groupTree, defData); if (rv<0) { fprintf(stderr, "Error reading definitions (%d).\n", rv); AQFINTS_Element_Tree2_free(groupTree); AQFINTS_Segment_List_free(segmentListData); AQFINTS_Segment_List_free(segmentListDef); return 2; } rv=AQFINTS_Parser_Xml_ReadBuffer(jobDefList, segmentListData, groupTree, elemData); if (rv<0) { fprintf(stderr, "Error reading data (%d).\n", rv); AQFINTS_Element_Tree2_free(groupTree); AQFINTS_Segment_List_free(segmentListData); AQFINTS_Segment_List_free(segmentListDef); return 2; } dbData=GWEN_DB_Group_new("data"); rv=AQFINTS_Parser_Db_ReadSegment(AQFINTS_Segment_List_First(segmentListDef), AQFINTS_Segment_List_First(segmentListData), dbData); if (rv<0) { fprintf(stderr, "Error parsing data.\n"); GWEN_DB_Group_free(dbData); AQFINTS_Element_Tree2_free(groupTree); AQFINTS_Segment_List_free(segmentListData); AQFINTS_Segment_List_free(segmentListDef); return 2; } GWEN_DB_Dump(dbData, 2); GWEN_DB_Group_free(dbData); AQFINTS_Element_Tree2_free(groupTree); AQFINTS_Segment_List_free(segmentListData); AQFINTS_Segment_List_free(segmentListDef); fprintf(stderr, "Success.\n"); return 0; } int test_segmentToDb4() { AQFINTS_JOBDEF_LIST *jobDefList; AQFINTS_SEGMENT_LIST *segmentListDef; AQFINTS_SEGMENT_LIST *segmentListData; AQFINTS_ELEMENT *groupTree; GWEN_DB_NODE *dbData; int rv; const char *defData= "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""; const char *elemData= "" "" "" "" "123" "data 1.1.2" "" "" "data 1.2.1" "data 1.2.2" "" "" "" ""; groupTree=AQFINTS_Element_new(); AQFINTS_Element_SetElementType(groupTree, AQFINTS_ElementType_Root); jobDefList=AQFINTS_JobDef_List_new(); segmentListDef=AQFINTS_Segment_List_new(); segmentListData=AQFINTS_Segment_List_new(); rv=AQFINTS_Parser_Xml_ReadBuffer(jobDefList, segmentListDef, groupTree, defData); if (rv<0) { fprintf(stderr, "Error reading definitions (%d).\n", rv); AQFINTS_Element_Tree2_free(groupTree); AQFINTS_Segment_List_free(segmentListData); AQFINTS_Segment_List_free(segmentListDef); return 2; } rv=AQFINTS_Parser_Xml_ReadBuffer(jobDefList, segmentListData, groupTree, elemData); if (rv<0) { fprintf(stderr, "Error reading data (%d).\n", rv); AQFINTS_Element_Tree2_free(groupTree); AQFINTS_Segment_List_free(segmentListData); AQFINTS_Segment_List_free(segmentListDef); return 2; } dbData=GWEN_DB_Group_new("data"); rv=AQFINTS_Parser_Db_ReadSegment(AQFINTS_Segment_List_First(segmentListDef), AQFINTS_Segment_List_First(segmentListData), dbData); if (rv<0) { fprintf(stderr, "Error parsing data.\n"); GWEN_DB_Group_free(dbData); AQFINTS_Element_Tree2_free(groupTree); AQFINTS_Segment_List_free(segmentListData); AQFINTS_Segment_List_free(segmentListDef); return 2; } GWEN_DB_Dump(dbData, 2); GWEN_DB_Group_free(dbData); AQFINTS_Element_Tree2_free(groupTree); AQFINTS_Segment_List_free(segmentListData); AQFINTS_Segment_List_free(segmentListDef); fprintf(stderr, "Success.\n"); return 0; } int test_segmentToDb5() { AQFINTS_JOBDEF_LIST *jobDefList; AQFINTS_SEGMENT_LIST *segmentListDef; AQFINTS_SEGMENT_LIST *segmentListData; AQFINTS_ELEMENT *groupTree; GWEN_DB_NODE *dbData; int rv; const char *defData= "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""; const char *hbciData= "HIPINS:4:1:5+1+1+0+5:6:6:Kunden-Nr aus dem TAN-Brief::HKCCS:J:HKKAN:N:HKSAL:J:HKPAE:J:HKTLA:J:HKTLF:J'"; /* read HBCI data */ segmentListData=AQFINTS_Segment_List_new(); rv=AQFINTS_Parser_Hbci_ReadBuffer(segmentListData, (const uint8_t *) hbciData, strlen(hbciData)); if (rv<0) { fprintf(stderr, "Error reading HBCI data.\n"); AQFINTS_Segment_List_free(segmentListData); return 2; } fprintf(stderr, "Data Segments:\n"); AQFINTS_Parser_DumpSegmentList(segmentListData, 2); /* read definition data */ groupTree=AQFINTS_Element_new(); jobDefList=AQFINTS_JobDef_List_new(); segmentListDef=AQFINTS_Segment_List_new(); rv=AQFINTS_Parser_Xml_ReadBuffer(jobDefList, segmentListDef, groupTree, defData); if (rv<0) { fprintf(stderr, "Error reading definitions (%d).\n", rv); AQFINTS_Element_Tree2_free(groupTree); AQFINTS_Segment_List_free(segmentListData); AQFINTS_Segment_List_free(segmentListDef); return 2; } AQFINTS_Parser_SegmentList_ResolveGroups(segmentListDef, groupTree); AQFINTS_Parser_SegmentList_Normalize(segmentListDef); fprintf(stderr, "Definition Segments:\n"); AQFINTS_Parser_DumpSegmentList(segmentListDef, 2); /* read data from definition and segment data */ dbData=GWEN_DB_Group_new("data"); rv=AQFINTS_Parser_Db_ReadSegment(AQFINTS_Segment_List_First(segmentListDef), AQFINTS_Segment_List_First(segmentListData), dbData); if (rv<0) { fprintf(stderr, "Error parsing data.\n"); GWEN_DB_Dump(dbData, 2); GWEN_DB_Group_free(dbData); AQFINTS_Element_Tree2_free(groupTree); AQFINTS_Segment_List_free(segmentListData); AQFINTS_Segment_List_free(segmentListDef); return 2; } GWEN_DB_Dump(dbData, 2); fprintf(stderr, "Success.\n"); return 0; } int test_segmentFromDb() { AQFINTS_JOBDEF_LIST *jobDefList; AQFINTS_SEGMENT_LIST *segmentListDef; AQFINTS_SEGMENT_LIST *segmentListData; AQFINTS_SEGMENT *segmentOut; AQFINTS_ELEMENT *groupTree; GWEN_DB_NODE *dbData; int rv; const char *defData= "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""; const char *hbciData= "HIPINS:4:1:5+1+1+0+5:6:6:Kunden-Nr aus dem TAN-Brief::HKCCS:J:HKKAN:N:HKSAL:J:HKPAE:J:HKTLA:J:HKTLF:J'"; /* read HBCI data */ fprintf(stderr, "Reading HBCI data\n"); segmentListData=AQFINTS_Segment_List_new(); rv=AQFINTS_Parser_Hbci_ReadBuffer(segmentListData, (const uint8_t *) hbciData, strlen(hbciData)); if (rv<0) { fprintf(stderr, "Error reading HBCI data.\n"); AQFINTS_Segment_List_free(segmentListData); return 2; } fprintf(stderr, "Data Segments:\n"); AQFINTS_Parser_DumpSegmentList(segmentListData, 2); /* read definition data */ fprintf(stderr, "Reading definition data\n"); groupTree=AQFINTS_Element_new(); jobDefList=AQFINTS_JobDef_List_new(); segmentListDef=AQFINTS_Segment_List_new(); rv=AQFINTS_Parser_Xml_ReadBuffer(jobDefList, segmentListDef, groupTree, defData); if (rv<0) { fprintf(stderr, "Error reading definitions (%d).\n", rv); AQFINTS_Element_Tree2_free(groupTree); AQFINTS_Segment_List_free(segmentListData); AQFINTS_Segment_List_free(segmentListDef); return 2; } AQFINTS_Parser_SegmentList_ResolveGroups(segmentListDef, groupTree); AQFINTS_Parser_SegmentList_Normalize(segmentListDef); fprintf(stderr, "Definition Segments:\n"); AQFINTS_Parser_DumpSegmentList(segmentListDef, 2); /* read data from definition and segment data */ fprintf(stderr, "Reading data into DB\n"); dbData=GWEN_DB_Group_new("data"); rv=AQFINTS_Parser_Db_ReadSegment(AQFINTS_Segment_List_First(segmentListDef), AQFINTS_Segment_List_First(segmentListData), dbData); if (rv<0) { fprintf(stderr, "Error parsing data.\n"); GWEN_DB_Dump(dbData, 2); GWEN_DB_Group_free(dbData); AQFINTS_Element_Tree2_free(groupTree); AQFINTS_Segment_List_free(segmentListData); AQFINTS_Segment_List_free(segmentListDef); return 2; } GWEN_DB_Dump(dbData, 2); fprintf(stderr, "Creating output segments\n"); segmentOut=AQFINTS_Segment_new(); rv=AQFINTS_Parser_Db_WriteSegment(AQFINTS_Segment_List_First(segmentListDef), segmentOut, dbData); if (rv<0) { fprintf(stderr, "Error writing data.\n"); AQFINTS_Parser_DumpSegment(segmentOut, 2); GWEN_DB_Group_free(dbData); AQFINTS_Element_Tree2_free(groupTree); AQFINTS_Segment_List_free(segmentListData); AQFINTS_Segment_List_free(segmentListDef); return 2; } AQFINTS_Parser_Segment_RemoveTrailingEmptyElements(segmentOut); fprintf(stderr, "Output Segment:\n"); AQFINTS_Parser_DumpSegment(segmentOut, 2); fprintf(stderr, "Success.\n"); return 0; } int test_segmentFromDb2() { AQFINTS_JOBDEF_LIST *jobDefList; AQFINTS_SEGMENT_LIST *segmentListDef; AQFINTS_SEGMENT_LIST *segmentListData; AQFINTS_SEGMENT *segmentOut; AQFINTS_ELEMENT *groupTree; GWEN_DB_NODE *dbData; GWEN_BUFFER *outBuf; int rv; const char *defData= "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""; const char *hbciData= "HIPINS:4:1:5+1+1+0+5:6:6:Kunden-Nr aus dem TAN-Brief::HKCCS:J:HKKAN:N:HKSAL:J:HKPAE:J:HKTLA:J:HKTLF:J'"; /* read HBCI data */ fprintf(stderr, "Reading HBCI data\n"); segmentListData=AQFINTS_Segment_List_new(); rv=AQFINTS_Parser_Hbci_ReadBuffer(segmentListData, (const uint8_t *) hbciData, strlen(hbciData)); if (rv<0) { fprintf(stderr, "Error reading HBCI data.\n"); AQFINTS_Segment_List_free(segmentListData); return 2; } fprintf(stderr, "Data Segments:\n"); AQFINTS_Parser_DumpSegmentList(segmentListData, 2); /* read definition data */ fprintf(stderr, "Reading definition data\n"); groupTree=AQFINTS_Element_new(); jobDefList=AQFINTS_JobDef_List_new(); segmentListDef=AQFINTS_Segment_List_new(); rv=AQFINTS_Parser_Xml_ReadBuffer(jobDefList, segmentListDef, groupTree, defData); if (rv<0) { fprintf(stderr, "Error reading definitions (%d).\n", rv); AQFINTS_Element_Tree2_free(groupTree); AQFINTS_Segment_List_free(segmentListData); AQFINTS_Segment_List_free(segmentListDef); return 2; } AQFINTS_Parser_SegmentList_ResolveGroups(segmentListDef, groupTree); AQFINTS_Parser_SegmentList_Normalize(segmentListDef); fprintf(stderr, "Definition Segments:\n"); AQFINTS_Parser_DumpSegmentList(segmentListDef, 2); /* read data from definition and segment data */ fprintf(stderr, "Reading data into DB\n"); dbData=GWEN_DB_Group_new("data"); rv=AQFINTS_Parser_Db_ReadSegment(AQFINTS_Segment_List_First(segmentListDef), AQFINTS_Segment_List_First(segmentListData), dbData); if (rv<0) { fprintf(stderr, "Error parsing data.\n"); GWEN_DB_Dump(dbData, 2); GWEN_DB_Group_free(dbData); AQFINTS_Element_Tree2_free(groupTree); AQFINTS_Segment_List_free(segmentListData); AQFINTS_Segment_List_free(segmentListDef); return 2; } GWEN_DB_Dump(dbData, 2); fprintf(stderr, "Creating output segments\n"); segmentOut=AQFINTS_Segment_new(); rv=AQFINTS_Parser_Db_WriteSegment(AQFINTS_Segment_List_First(segmentListDef), segmentOut, dbData); if (rv<0) { fprintf(stderr, "Error writing data.\n"); AQFINTS_Parser_DumpSegment(segmentOut, 2); GWEN_DB_Group_free(dbData); AQFINTS_Element_Tree2_free(groupTree); AQFINTS_Segment_List_free(segmentListData); AQFINTS_Segment_List_free(segmentListDef); return 2; } AQFINTS_Parser_Segment_RemoveTrailingEmptyElements(segmentOut); fprintf(stderr, "Output Segment:\n"); AQFINTS_Parser_DumpSegment(segmentOut, 2); outBuf=GWEN_Buffer_new(0, 256, 0, 1); AQFINTS_Parser_Hbci_WriteSegment(segmentOut); GWEN_Buffer_AppendBytes(outBuf, (const char *) AQFINTS_Segment_GetDataPointer(segmentOut), AQFINTS_Segment_GetDataLength(segmentOut)); fprintf(stderr, "HBCI Segments (original and copy)\n"); fprintf(stderr, "ORIG: %s\n", hbciData); fprintf(stderr, "COPY: %s\n", GWEN_Buffer_GetStart(outBuf)); if (memcmp(hbciData, GWEN_Buffer_GetStart(outBuf), GWEN_Buffer_GetUsedBytes(outBuf))) { fprintf(stderr, "ERROR: Data differs\n"); return 2; } fprintf(stderr, "Success.\n"); return 0; } int test_parser() { AQFINTS_PARSER *parser; int rv; parser=AQFINTS_Parser_new(); AQFINTS_Parser_AddPath(parser, "../.."); rv=AQFINTS_Parser_ReadFiles(parser); if (rv<0) { fprintf(stderr, "Error reading files.\n"); return 2; } fprintf(stderr, "Success.\n"); return 0; } int main(int args, char **argv) { //test_loadFile("example.xml"); //test_readHbci(); //test_readHbci2("/tmp/test.hbci"); //test_saveFile1("example.xml", "example.xml.out"); //test_saveFile2("example.xml.out"); //test_writeSegments(); //test_segmentToDb5(); //test_segmentFromDb2(); test_parser(); return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/parser/parser_dbread.h0000664000175000017500000000140314044534775025433 00000000000000/*************************************************************************** begin : Sun Jul 07 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQFINTS_PARSER_DBREAD_H #define AQFINTS_PARSER_DBREAD_H #include "libaqfints/parser/element.h" #include "libaqfints/parser/segment.h" int AQFINTS_Parser_Db_ReadSegment(AQFINTS_SEGMENT *definitionSegment, AQFINTS_SEGMENT *dataSegment, GWEN_DB_NODE *db); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/parser/parser_normalize.c0000664000175000017500000001636114044534775026216 00000000000000/*************************************************************************** begin : Fri Jun 28 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "libaqfints/parser/parser_normalize.h" #include "libaqfints/parser/parser.h" #include /* ------------------------------------------------------------------------------------------------ * forward declarations * ------------------------------------------------------------------------------------------------ */ static AQFINTS_ELEMENT *findGroupInTree(AQFINTS_ELEMENT *groupTree, const char *id, int version); static void normalizeSequence(AQFINTS_ELEMENT *elementTree); static void normalizeSegment(AQFINTS_SEGMENT *segment); static void resolveGroups(AQFINTS_ELEMENT *elementTree, AQFINTS_ELEMENT *groupTree); static void segmentResolveGroups(AQFINTS_SEGMENT *segment, AQFINTS_ELEMENT *groupTree); static void removeTrailingEmptyDegChildren(AQFINTS_ELEMENT *elementTree); static void removeTrailingEmptyDeChildren(AQFINTS_ELEMENT *elementTree); /* ------------------------------------------------------------------------------------------------ * implementations * ------------------------------------------------------------------------------------------------ */ void AQFINTS_Parser_SegmentList_ResolveGroups(AQFINTS_SEGMENT_LIST *segmentList, AQFINTS_ELEMENT *groupTree) { AQFINTS_SEGMENT *segment; segment=AQFINTS_Segment_List_First(segmentList); while (segment) { segmentResolveGroups(segment, groupTree); segment=AQFINTS_Segment_List_Next(segment); } } void AQFINTS_Parser_SegmentList_Normalize(AQFINTS_SEGMENT_LIST *segmentList) { AQFINTS_SEGMENT *segment; segment=AQFINTS_Segment_List_First(segmentList); while (segment) { normalizeSegment(segment); segment=AQFINTS_Segment_List_Next(segment); } } void AQFINTS_Parser_Segment_RemoveTrailingEmptyElements(AQFINTS_SEGMENT *segment) { AQFINTS_ELEMENT *elementTree; elementTree=AQFINTS_Segment_GetElements(segment); if (elementTree) { AQFINTS_ELEMENT *element; /* shorten content of DEG's */ element=AQFINTS_Element_Tree2_GetFirstChild(elementTree); while (element) { removeTrailingEmptyDeChildren(element); element=AQFINTS_Element_Tree2_GetNext(element); } /* shorten the list of DEG */ removeTrailingEmptyDegChildren(elementTree); } } AQFINTS_ELEMENT *findGroupInTree(AQFINTS_ELEMENT *groupTree, const char *id, int version) { AQFINTS_ELEMENT *group; group=AQFINTS_Element_Tree2_GetFirstChild(groupTree); while (group) { if (version==0 || version==AQFINTS_Element_GetVersion(group)) { if (!(id && *id)) return group; else { const char *s; s=AQFINTS_Element_GetId(group); if (s && *s && strcasecmp(s, id)==0) return group; } } group=AQFINTS_Element_Tree2_GetNext(group); } return NULL; } void normalizeSegment(AQFINTS_SEGMENT *segment) { AQFINTS_ELEMENT *elementTree; elementTree=AQFINTS_Segment_GetElements(segment); if (elementTree) { normalizeSequence(elementTree); } } void normalizeSequence(AQFINTS_ELEMENT *elementTree) { AQFINTS_ELEMENT *element; /* check top-level elements: if DE, prepend a DEG before it */ element=AQFINTS_Element_Tree2_GetFirstChild(elementTree); while (element) { AQFINTS_ELEMENT *nextElement; nextElement=AQFINTS_Element_Tree2_GetNext(element); if (AQFINTS_Element_GetElementType(element)==AQFINTS_ElementType_Group) { normalizeSequence(element); } else if (AQFINTS_Element_GetElementType(element)==AQFINTS_ElementType_De) { AQFINTS_ELEMENT *elementDeg; elementDeg=AQFINTS_Element_new(); AQFINTS_Element_SetElementType(elementDeg, AQFINTS_ElementType_Deg); AQFINTS_Element_SetVersion(elementDeg, AQFINTS_Element_GetVersion(element)); AQFINTS_Element_SetMinNum(elementDeg, AQFINTS_Element_GetMinNum(element)); AQFINTS_Element_SetMaxNum(elementDeg, AQFINTS_Element_GetMaxNum(element)); AQFINTS_Element_Tree2_Replace(element, elementDeg); AQFINTS_Element_Tree2_AddChild(elementDeg, element); } element=nextElement; } } void segmentResolveGroups(AQFINTS_SEGMENT *segment, AQFINTS_ELEMENT *groupTree) { resolveGroups(AQFINTS_Segment_GetElements(segment), groupTree); } void resolveGroups(AQFINTS_ELEMENT *elementTree, AQFINTS_ELEMENT *groupTree) { AQFINTS_ELEMENT *element; element=AQFINTS_Element_Tree2_GetFirstChild(elementTree); while (element) { const char *sGroupType; AQFINTS_ELEMENT_TYPE eType; eType=AQFINTS_Element_GetElementType(element); sGroupType=AQFINTS_Element_GetType(element); if ((eType==AQFINTS_ElementType_Group) || (eType==AQFINTS_ElementType_Deg && sGroupType && *sGroupType)) { if (sGroupType && *sGroupType) { AQFINTS_ELEMENT *groupDefElement; int iGroupVersion; iGroupVersion=AQFINTS_Element_GetVersion(element); DBG_INFO(AQFINTS_PARSER_LOGDOMAIN, "Looking for group \"%s:%d\"", sGroupType, iGroupVersion); groupDefElement=findGroupInTree(groupTree, sGroupType, iGroupVersion); if (groupDefElement==NULL) { DBG_INFO(AQFINTS_PARSER_LOGDOMAIN, "Group \"%s:%d\" not found", sGroupType, iGroupVersion); assert(0); } else { AQFINTS_ELEMENT *groupElement; DBG_INFO(AQFINTS_PARSER_LOGDOMAIN, "Found group \"%s:%d\"", sGroupType, AQFINTS_Element_GetVersion(groupDefElement)); groupElement=AQFINTS_Element_Tree2_GetFirstChild(groupDefElement); while (groupElement) { AQFINTS_ELEMENT *elementCopy; elementCopy=AQFINTS_Element_dup(groupElement); AQFINTS_Element_Tree2_AddChild(element, elementCopy); groupElement=AQFINTS_Element_Tree2_GetNext(groupElement); } } } } /* recursion */ resolveGroups(element, groupTree); element=AQFINTS_Element_Tree2_GetNext(element); } } void removeTrailingEmptyDegChildren(AQFINTS_ELEMENT *elementTree) { AQFINTS_ELEMENT *element; while ((element=AQFINTS_Element_Tree2_GetLastChild(elementTree))) { if (AQFINTS_Element_GetElementType(element)==AQFINTS_ElementType_Deg) { if (AQFINTS_Element_Tree2_GetFirstChild(element)==NULL) { AQFINTS_Element_Tree2_Unlink(element); AQFINTS_Element_free(element); } else break; } else break; } } void removeTrailingEmptyDeChildren(AQFINTS_ELEMENT *elementTree) { AQFINTS_ELEMENT *element; while ((element=AQFINTS_Element_Tree2_GetLastChild(elementTree))) { if (AQFINTS_Element_GetElementType(element)==AQFINTS_ElementType_De) { if (AQFINTS_Element_GetDataLength(element)==0 || AQFINTS_Element_GetDataPointer(element)==NULL) { AQFINTS_Element_Tree2_Unlink(element); AQFINTS_Element_free(element); } else break; } else break; } } aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/parser/aqfints_jobdef.tm20000664000175000017500000000030115037736054026060 00000000000000 AQFINTS_JOBDEF AQFINTS_JobDef aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/parser/segment.xml0000664000175000017500000002411414044534775024655 00000000000000 AQFINTS_SEGMENT AQFINTS_Segment segment with_db with_list1 with_refcount
libaqfints/aqfints.h
gwenhywfar/bindata.h
gwenhywfar/buffer.h
libaqfints/parser/element.h
$(api) void $(struct_prefix)_SetData($(struct_type) *st, uint8_t *ptr, uint32_t len); void $(struct_prefix)_SetData($(struct_type) *st, uint8_t *ptr, uint32_t len) { if (st->data.pointer && st->data.length) free(st->data.pointer); st->data.pointer=ptr; st->data.length=len; } $(api) void $(struct_prefix)_SetDataAsCopy($(struct_type) *st, const uint8_t *ptr, uint32_t len); void $(struct_prefix)_SetDataAsCopy($(struct_type) *st, const uint8_t *ptr, uint32_t len) { if (st->data.pointer && st->data.length) free(st->data.pointer); if (ptr && len>0) { void *ptrCopy; ptrCopy=malloc(len); assert(ptrCopy); memmove(ptrCopy, ptr, len); st->data.pointer=ptrCopy; st->data.length=len; } else { st->data.pointer=NULL; st->data.length=0; } } $(api) uint8_t* $(struct_prefix)_GetDataPointer(const $(struct_type) *st); uint8_t* $(struct_prefix)_GetDataPointer(const $(struct_type) *st) { return st->data.pointer; } $(api) uint32_t $(struct_prefix)_GetDataLength(const $(struct_type) *st); uint32_t $(struct_prefix)_GetDataLength(const $(struct_type) *st) { return st->data.length; } with_list1 with_list1 $(api) uint32_t $(struct_prefix)_List_SampleFlags(const $(struct_type)_LIST *stl); with_list1 with_list1 uint32_t $(struct_prefix)_List_SampleFlags(const $(struct_type)_LIST *stl) { uint32_t flags=0; if (stl) { $(struct_type) *segment; segment=$(struct_prefix)_List_First(stl); while(segment) { flags|=$(struct_prefix)_GetFlags(segment); segment=$(struct_prefix)_List_Next(segment); } } return flags; } with_list1 with_list1 $(api) uint32_t $(struct_prefix)_List_SampleSizes(const $(struct_type)_LIST *stl); with_list1 with_list1 uint32_t $(struct_prefix)_List_SampleSizes(const $(struct_type)_LIST *stl) { uint32_t len=0; if (stl) { $(struct_type) *segment; segment=$(struct_prefix)_List_First(stl); while(segment) { len+=segment->data.length; segment=$(struct_prefix)_List_Next(segment); } } return len; } with_list1 with_list1 $(api) void $(struct_prefix)_List_SampleBuffers(const $(struct_type)_LIST *segmentList, GWEN_BUFFER *destBuf); with_list1 with_list1 void $(struct_prefix)_List_SampleBuffers(const $(struct_type)_LIST *segmentList, GWEN_BUFFER *destBuf) { if (segmentList) { $(struct_type) *segment; segment=$(struct_prefix)_List_First(segmentList); while (segment) { if (segment->data.pointer && segment->data.length>0) GWEN_Buffer_AppendBytes(destBuf, (const char*) segment->data.pointer, segment->data.length); segment=$(struct_prefix)_List_Next(segment); } } }
0 0 with_flags public NULL NULL public own const dup const NULL NULL public own with_getbymember const dup const 0 0 public 0 0 public with_getbymember 0 0 public 0 0 public private own omit omit public own noCopy none none public own none none 0 0 volatile with_flags public
aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/parser/Makefile.am0000664000175000017500000000526214043610745024517 00000000000000 AM_CFLAGS=@visibility_cflags@ AM_CPPFLAGS = -I$(top_srcdir)/src/lib -I$(top_builddir)/src/lib $(gwenhywfar_includes) -I$(srcdir)/../.. -I$(srcdir)/.. noinst_LTLIBRARIES=libaqfintsparser.la typefiles=\ element.xml \ segment.xml \ jobdef.xml typedatadir=$(datadir)/aqbanking/typemaker2/c dist_typedata_DATA=\ aqfints_element.tm2 aqfints_element_tree2.tm2 \ aqfints_segment.tm2 aqfints_segment_list.tm2 \ aqfints_jobdef.tm2 aqfints_jobdef_list.tm2 built_sources= \ element.c \ segment.c \ jobdef.c build_headers_priv= \ element_p.h \ segment_p.h build_headers_pub= \ element.h \ segment.h \ jobdef.h build_headers=$(build_headers_priv) $(build_headers_pub) noinst_HEADERS= $(build_headers) \ parser.h \ parser_p.h \ parser_xml.h \ parser_normalize.h \ parser_dump.h \ parser_hbci.h \ parser_dbread.h \ parser_dbwrite.h \ parser_internal.h libaqfintsparser_la_SOURCES= $(built_sources) \ parser.c \ parser_xml.c \ parser_normalize.c \ parser_dump.c \ parser_hbci.c \ parser_dbread.c \ parser_dbwrite.c \ parser_internal.c noinst_PROGRAMS = libtest libtest_SOURCES = libtest.c libtest_LDADD = libaqfintsparser.la $(gwenhywfar_libs) EXTRA_DIST=$(typefiles) $(built_sources) $(build_headers) built_sources: $(built_sources) list='$(SUBDIRS)'; for d in $$list; do \ $(MAKE) -C $$d built_sources; \ done ; clean_build_files: rm -f $(built_sources) $(build_headers) format_built_files: for f in $(built_sources) $(build_headers); do \ $(ASTYLE) --style=stroustrup -s2 --min-conditional-indent=0 --indent-labels --max-continuation-indent=80 --pad-comma --pad-header --unpad-paren --align-pointer=name --break-closing-braces --break-one-line-headers --attach-return-type --convert-tabs --max-code-length=120 --break-after-logical --suffix=none $$f; \ done sources: for f in $(libaqfintsparser_la_SOURCES) $(EXTRA_DIST); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d sources; \ done typefiles: $(typefiles) for d in $(SUBDIRS); do \ $(MAKE) -C $$d typefiles; \ done $(typemaker2_exe) -I $(top_srcdir)/src/libs/aqbanking/typemaker2/c -I $(gwenhywfar_dir)/share/gwenhywfar/typemaker2/c -I $(srcdir) --destfolder="$(srcdir)" $(typefiles) typedefs: $(typefiles) for d in $(SUBDIRS); do \ $(MAKE) -C $$d typedefs; \ done $(typemaker2_exe) --defs-only -I $(top_srcdir)/src/libs/aqbanking/typemaker2/c -I $(gwenhywfar_dir)/share/gwenhywfar/typemaker2/c -I $(srcdir) --destfolder="$(srcdir)" $(typefiles) cppcheck: for f in $(libaqfintsparser_la_SOURCES); do \ cppcheck --force $$f ; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/parser/segment_p.h0000664000175000017500000000147515037736054024625 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "segment.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef AQFINTS_SEGMENT_SEGMENT_P_H #define AQFINTS_SEGMENT_SEGMENT_P_H #include "./segment.h" #ifdef __cplusplus extern "C" { #endif struct AQFINTS_SEGMENT { GWEN_LIST_ELEMENT(AQFINTS_SEGMENT) int _refCount; uint32_t flags; char *id; char *code; int segmentVersion; int segmentNumber; int refSegmentNumber; int protocolVersion; GWEN_BINDATA data; AQFINTS_ELEMENT *elements; GWEN_DB_NODE *dbData; uint32_t runtimeFlags; /* volatile */ }; #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/parser/parser.h0000664000175000017500000001662514044534775024146 00000000000000/*************************************************************************** begin : Fri Jun 28 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQFINTS_PARSER_H #define AQFINTS_PARSER_H #include "libaqfints/parser/element.h" #include "libaqfints/parser/segment.h" #include "libaqfints/parser/jobdef.h" #include typedef struct AQFINTS_PARSER AQFINTS_PARSER; /** @name Constructor, Destructor * */ /*@{*/ /** * Constructor. */ AQFINTS_PARSER *AQFINTS_Parser_new(); /** * Destructor. */ void AQFINTS_Parser_free(AQFINTS_PARSER *parser); /*@}*/ /** @name Read HBCI/FinTS Segments * */ /*@{*/ /** * Read a HBCI message from a buffer into a GWEN_DB_NODE. * * First reads a HBCI message into a segment list and retrieves data from that list * by looking up definitions for the segments contained in the message. * Unknown segments are skipped. * * @return 0 if okay (i.e. at least one segment could be parsed), error code otherwise * @param parser parser object * @param ptrBuf pointer to the buffer containing the HBCI message * @param lenBuf size of the HBCI message * @param dbData GWEN_DB_NODE tree to receive the parsed data */ int AQFINTS_Parser_ReadIntoDb(AQFINTS_PARSER *parser, const uint8_t *ptrBuf, uint32_t lenBuf, GWEN_DB_NODE *dbData); /** * Read a HBCI message into a segment list. * * This function only parses HBCI messages into segment lists without interpreting the data. * * @return 0 if okay, errorcode otherwise * @param parser parser object * @param targetSegmentList segment list to receive the HBCI segments read * @param ptrBuf pointer to the buffer containing the HBCI message * @param lenBuf size of the HBCI message */ int AQFINTS_Parser_ReadIntoSegmentList(AQFINTS_PARSER *parser, AQFINTS_SEGMENT_LIST *targetSegmentList, const uint8_t *ptrBuf, uint32_t lenBuf); /** * Parses a segment list into a GWEN_DB_NODE. * * The segment list should have been read via @ref AQFINTS_Parser_ReadIntoSegmentList(). * * @return 0 if okay, errorcode otherwise * @param parser parser object * @param segmentList segment list to read data from */ int AQFINTS_Parser_ReadSegmentListToDb(AQFINTS_PARSER *parser, AQFINTS_SEGMENT_LIST *segmentList); /*@}*/ /** @name Write HBCI/FinTS Segments * */ /*@{*/ int AQFINTS_Parser_WriteSegment(AQFINTS_PARSER *parser, AQFINTS_SEGMENT *segment); /*@}*/ /** @name Load Definition Files * */ /*@{*/ /** * Add a path containing *.fints files to the parser, * * The paths added here are used by @ref AQFINTS_Parser_ReadFiles(). * * @param parser parser object * @param path folder to add */ void AQFINTS_Parser_AddPath(AQFINTS_PARSER *parser, const char *path); /** * Read files from the folders specified via @ref AQFINTS_Parser_AddPath(). * * Adding paths after calling this function here has no effect. * Only returns an error if no file could be loaded (either because of errors or because there was no file to load). * This function is used to load segment and job definitions for the parser. * * @return 0 if okay, errorcode otherwise * @param parser parser object */ int AQFINTS_Parser_ReadFiles(AQFINTS_PARSER *parser); /*@}*/ /** @name Find Segments * */ /*@{*/ /** * Find segment by id. * * @return segment found (NULL otherwise) * @param parser parser object * @param id segment id (see @ref AQFINTS_Segment_GetId) * @param segmentVersion segment version (0 matches any) * @param protocolVersion protocol version (0 matches any) */ AQFINTS_SEGMENT *AQFINTS_Parser_FindSegmentById(const AQFINTS_PARSER *parser, const char *id, int segmentVersion, int protocolVersion); /** * Find segment by code. * * @return segment found (NULL otherwise) * @param parser parser object * @param code HBCI segment code (like "HNSHK", see @ref AQFINTS_Segment_GetCode) * @param segmentVersion segment version (0 matches any) * @param protocolVersion protocol version (0 matches any) */ AQFINTS_SEGMENT *AQFINTS_Parser_FindSegmentByCode(const AQFINTS_PARSER *parser, const char *code, int segmentVersion, int protocolVersion); /** * Find segment with highest version for the given protocol. * * @return segment found (NULL otherwise) * @param parser parser object * @param code HBCI segment code (like "HNSHK", see @ref AQFINTS_Segment_GetCode) * @param protocolVersion protocol version (0 matches any) */ AQFINTS_SEGMENT *AQFINTS_Parser_FindSegmentHighestVersionForProto(const AQFINTS_PARSER *parser, const char *code, int protocolVersion); /** * Creates segment ready to be used by the caller. * * This function looks up the segment definition using given id and segment version and makes a copy of that * definition. It also creates and sets a GWEN_DB_NODE for the segment and stores it with the new segment. * * @return prepared segment * @param parser parser object * @param code HBCI segment code (like "HNSHK", see @ref AQFINTS_Segment_GetCode) * @param segmentVersion segment version (0 matches any) */ AQFINTS_SEGMENT *AQFINTS_Parser_CreateSegmentByCode(const AQFINTS_PARSER *parser, const char *code, int segmentVersion); /*@}*/ /** @name Find Job Definitions * */ /*@{*/ /** * Find job definition by id. * * @return object found (NULL otherwise) * @param parser parser object * @param id job id (see @ref AQFINTS_JobDef_GetId) * @param jobVersion segment version (0 matches any) * @param protocolVersion protocol version (0 matches any) */ AQFINTS_JOBDEF *AQFINTS_Parser_FindJobDefByCode(const AQFINTS_PARSER *parser, const char *id, int jobVersion, int protocolVersion); /** * Find job definition by code. * * @return object found (NULL otherwise) * @param parser parser object * @param code HBCI segment code (like "HNSHK", see @ref AQFINTS_JobDef_GetCode) * @param jobVersion segment version (0 matches any) * @param protocolVersion protocol version (0 matches any) */ AQFINTS_JOBDEF *AQFINTS_Parser_FindJobDefById(const AQFINTS_PARSER *parser, const char *id, int jobVersion, int protocolVersion); /** * Find job definition by name of the PARAMs segment. * * @return object found (NULL otherwise) * @param parser parser object * @param code HBCI segment code (like "HNSHK", see @ref AQFINTS_JobDef_GetParams) * @param jobVersion segment version (0 matches any) * @param protocolVersion protocol version (0 matches any) */ AQFINTS_JOBDEF *AQFINTS_Parser_FindJobDefByParams(const AQFINTS_PARSER *parser, const char *params, int jobVersion, int protocolVersion); /*@}*/ void AQFINTS_Parser_DumpDefinitions(AQFINTS_PARSER *parser, int indent); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/parser/element_p.h0000664000175000017500000000147415037736054024613 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "element.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef AQFINTS_ELEMENT_ELEMENT_P_H #define AQFINTS_ELEMENT_ELEMENT_P_H #include "./element.h" #ifdef __cplusplus extern "C" { #endif struct AQFINTS_ELEMENT { GWEN_TREE2_ELEMENT(AQFINTS_ELEMENT) int _refCount; uint32_t flags; AQFINTS_ELEMENT_TYPE elementType; char *id; char *name; int version; char *type; int minNum; int maxNum; int minSize; int maxSize; int trustLevel; GWEN_BINDATA data; uint32_t runtimeFlags; /* volatile */ }; #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/parser/element.xml0000664000175000017500000002622014043610745024633 00000000000000 AQFINTS_ELEMENT AQFINTS_Element element with_db with_tree2 with_refcount
libaqfints/aqfints.h
gwenhywfar/bindata.h
string.h
$(api) void $(struct_prefix)_SetData($(struct_type) *st, uint8_t *ptr, uint32_t len); void $(struct_prefix)_SetData($(struct_type) *st, uint8_t *ptr, uint32_t len) { if (st->data.pointer && st->data.length) { free(st->data.pointer); } st->data.pointer=ptr; st->data.length=len; } $(api) void $(struct_prefix)_SetDataCopy($(struct_type) *st, const uint8_t *ptr, uint32_t len); void $(struct_prefix)_SetDataCopy($(struct_type) *st, const uint8_t *ptr, uint32_t len) { \n /* free previous data */ \n if (st->data.pointer && st->data.length) { free(st->data.pointer); } \n /* create copy if there is data to copy */ \n if (ptr && len) { uint8_t *ptrCopy; ptrCopy=(uint8_t*) malloc(len); assert(ptrCopy); memmove(ptrCopy, ptr, len); st->data.pointer=ptrCopy; st->data.length=len; } else { st->data.pointer=NULL; st->data.length=0; } } $(api) void $(struct_prefix)_SetTextDataCopy($(struct_type) *st, const char *ptr); void $(struct_prefix)_SetTextDataCopy($(struct_type) *st, const char *ptr) { \n /* free previous data */ \n if (st->data.pointer && st->data.length) { free(st->data.pointer); } \n /* create copy if there is data to copy */ \n if (ptr) { char *ptrCopy; ptrCopy=strdup(ptr); assert(ptrCopy); st->data.pointer=(uint8_t*) ptrCopy; st->data.length=strlen(ptrCopy)+1; /* count trailing zero */ \n } else { st->data.pointer=NULL; st->data.length=0; } } $(api) const uint8_t* $(struct_prefix)_GetDataPointer(const $(struct_type) *st); const uint8_t* $(struct_prefix)_GetDataPointer(const $(struct_type) *st) { return st->data.pointer; } $(api) uint32_t $(struct_prefix)_GetDataLength(const $(struct_type) *st); uint32_t $(struct_prefix)_GetDataLength(const $(struct_type) *st) { return st->data.length; } $(api) const char* $(struct_prefix)_GetDataAsChar(const $(struct_type) *st, const char *defaultValue); const char* $(struct_prefix)_GetDataAsChar(const $(struct_type) *st, const char *defaultValue) { if (st->data.length && st->data.pointer && !(st->flags & AQFINTS_ELEMENT_FLAGS_ISBIN)) return (const char*) (st->data.pointer); return defaultValue; } $(api) int $(struct_prefix)_GetDataAsInt(const $(struct_type) *st, int defaultValue); int $(struct_prefix)_GetDataAsInt(const $(struct_type) *st, int defaultValue) { const char *s; s=$(struct_prefix)_GetDataAsChar(st, NULL); if (s && *s) { long int retVal=0; if (1==sscanf(s, "%li", &retVal)) return retVal; } return defaultValue; } $(api) void $(struct_prefix)_SetDataAsInt($(struct_type) *st, int value); void $(struct_prefix)_SetDataAsInt($(struct_type) *st, int value) { \n char numbuf[32]; int i; i=snprintf(numbuf, sizeof(numbuf)-1, "%i", value); assert(i<=(sizeof(numbuf)-1)); numbuf[sizeof(numbuf)-1]=0; $(struct_prefix)_SetTextDataCopy(st, numbuf); }
0 0 with_flags public AQFINTS_ElementType_De AQFINTS_ElementType_De enum public NULL NULL public own const dup const NULL NULL public own const dup const 0 0 public NULL NULL public own const dup const 1 1 public 1 1 public 0 0 public -1 -1 public 0 0 public NULL NULL public own omit omit 0 0 volatile with_flags public
aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/parser/parser_hbci.h0000664000175000017500000000207214044534775025122 00000000000000/*************************************************************************** begin : Fri Jun 28 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQFINTS_PARSER_HBCI_H #define AQFINTS_PARSER_HBCI_H #include "libaqfints/parser/element.h" #include "libaqfints/parser/segment.h" int AQFINTS_Parser_Hbci_ReadBuffer(AQFINTS_SEGMENT_LIST *targetSegmentList, const uint8_t *ptrBuf, uint32_t lenBuf); void AQFINTS_Parser_Hbci_WriteBuffer(AQFINTS_SEGMENT_LIST *segmentList); void AQFINTS_Parser_Hbci_SampleSegmentBuffers(AQFINTS_SEGMENT_LIST *segmentList, GWEN_BUFFER *destBuf); void AQFINTS_Parser_Hbci_WriteSegment(AQFINTS_SEGMENT *segment); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/parser/parser_dump.c0000664000175000017500000002053414044534775025160 00000000000000/*************************************************************************** begin : Fri Jun 28 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "libaqfints/parser/parser_normalize.h" #include static void appendElementInfo(AQFINTS_ELEMENT *element, GWEN_BUFFER *pbuf, int indent); static void appendString(const char *name, const char *s, GWEN_BUFFER *pbuf); static void appendInt(const char *name, int value, int emptyValue, GWEN_BUFFER *pbuf); static void addPathElementDumpElementTree(AQFINTS_ELEMENT *element, GWEN_BUFFER *pbuf, int indent); static void dumpPath(AQFINTS_ELEMENT *element, GWEN_BUFFER *pbuf, int indent); static void dumpElementTreeToBuffer(AQFINTS_ELEMENT *element, GWEN_BUFFER *pbuf, int indent); void AQFINTS_Parser_DumpElementTree(AQFINTS_ELEMENT *element, int indent) { GWEN_BUFFER *pbuf; pbuf=GWEN_Buffer_new(0, 256, 0, 1); dumpElementTreeToBuffer(element, pbuf, indent); fprintf(stderr, "%s\n", GWEN_Buffer_GetStart(pbuf)); GWEN_Buffer_free(pbuf); } void dumpElementTreeToBuffer(AQFINTS_ELEMENT *element, GWEN_BUFFER *pbuf, int indent) { AQFINTS_ELEMENT *childElement; appendElementInfo(element, pbuf, indent); GWEN_Buffer_AppendString(pbuf, "\n"); childElement=AQFINTS_Element_Tree2_GetFirstChild(element); while (childElement) { dumpElementTreeToBuffer(childElement, pbuf, indent+2); childElement=AQFINTS_Element_Tree2_GetNext(childElement); } } void AQFINTS_Parser_DumpSegment(AQFINTS_SEGMENT *segment, int indent) { int i; const char *s; AQFINTS_ELEMENT *elementTree; uint32_t rtflags; GWEN_DB_NODE *db; for (i=0; i #endif #include "libaqfints/parser/parser_xml.h" #include #include /* ------------------------------------------------------------------------------------------------ * forward declarations * ------------------------------------------------------------------------------------------------ */ static void readGroupsAndSegsAndJobs(AQFINTS_JOBDEF_LIST *jobDefList, AQFINTS_SEGMENT_LIST *segmentList, AQFINTS_ELEMENT *groupTree, GWEN_XMLNODE *xmlSource); static void readGroups(AQFINTS_ELEMENT *groupTree, GWEN_XMLNODE *xmlSource); static void readSegments(AQFINTS_SEGMENT_LIST *segmentList, GWEN_XMLNODE *xmlSource); static void readElementWithChildren(AQFINTS_ELEMENT *el, GWEN_XMLNODE *xmlSource); static void readElement(AQFINTS_ELEMENT *el, GWEN_XMLNODE *xmlSource); static void readChildElements(AQFINTS_ELEMENT *el, GWEN_XMLNODE *xmlSource); static void readSegment(AQFINTS_SEGMENT *segment, GWEN_XMLNODE *xmlSource); static void readSegmentWithChildren(AQFINTS_SEGMENT *segment, GWEN_XMLNODE *xmlSource); static void readSegmentChildren(AQFINTS_SEGMENT *segment, GWEN_XMLNODE *xmlSource); static void readJobDefs(AQFINTS_JOBDEF_LIST *jobDefList, GWEN_XMLNODE *xmlSource); static void writeSegmentDefinitions(const AQFINTS_SEGMENT_LIST *segmentList, GWEN_XMLNODE *xmlDest); static void writeSegmentWithElements(const AQFINTS_SEGMENT *segment, GWEN_XMLNODE *xmlDest); static void writeElementTree(const AQFINTS_ELEMENT *el, GWEN_XMLNODE *xmlDest); static void writeSegment(const AQFINTS_SEGMENT *segment, GWEN_XMLNODE *xmlDest); static void writeElement(const AQFINTS_ELEMENT *el, GWEN_XMLNODE *xmlDest); static void readJobDef(AQFINTS_JOBDEF *jobDef, GWEN_XMLNODE *xmlSource); /* ------------------------------------------------------------------------------------------------ * implementations * ------------------------------------------------------------------------------------------------ */ int AQFINTS_Parser_Xml_ReadFile(AQFINTS_JOBDEF_LIST *jobDefList, AQFINTS_SEGMENT_LIST *segmentList, AQFINTS_ELEMENT *groupTree, const char *filename) { GWEN_XMLNODE *xmlNodeFile; int rv; xmlNodeFile=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "fintsFile"); rv=GWEN_XML_ReadFile(xmlNodeFile, filename, GWEN_XML_FLAGS_HANDLE_COMMENTS | GWEN_XML_FLAGS_HANDLE_HEADERS | GWEN_XML_FLAGS_SIMPLE); if (rv<0) { DBG_ERROR(AQFINTS_PARSER_LOGDOMAIN, "Error reading XML file \"%s\" (%d)", filename, rv); GWEN_XMLNode_free(xmlNodeFile); return rv; } else { GWEN_XMLNODE *xmlNodeFints; xmlNodeFints=GWEN_XMLNode_FindFirstTag(xmlNodeFile, "FinTS", NULL, NULL); if (xmlNodeFints) { readGroupsAndSegsAndJobs(jobDefList, segmentList, groupTree, xmlNodeFints); } else { GWEN_XMLNode_free(xmlNodeFile); return GWEN_ERROR_BAD_DATA; } } GWEN_XMLNode_free(xmlNodeFile); return 0; } int AQFINTS_Parser_Xml_ReadBuffer(AQFINTS_JOBDEF_LIST *jobDefList, AQFINTS_SEGMENT_LIST *segmentList, AQFINTS_ELEMENT *groupTree, const char *dataString) { GWEN_XMLNODE *xmlNodeFile; xmlNodeFile=GWEN_XMLNode_fromString(dataString, strlen(dataString), GWEN_XML_FLAGS_HANDLE_COMMENTS | GWEN_XML_FLAGS_HANDLE_HEADERS | GWEN_XML_FLAGS_SIMPLE); if (xmlNodeFile==NULL) { DBG_ERROR(AQFINTS_PARSER_LOGDOMAIN, "Error reading XML data from buffer"); return GWEN_ERROR_BAD_DATA; } else { GWEN_XMLNODE *xmlNodeFints; xmlNodeFints=GWEN_XMLNode_FindFirstTag(xmlNodeFile, "FinTS", NULL, NULL); if (xmlNodeFints) { readGroupsAndSegsAndJobs(jobDefList, segmentList, groupTree, xmlNodeFints); } else { DBG_ERROR(AQFINTS_PARSER_LOGDOMAIN, "No FinTS group."); GWEN_XMLNode_free(xmlNodeFile); return GWEN_ERROR_BAD_DATA; } } GWEN_XMLNode_free(xmlNodeFile); return 0; } int AQFINTS_Parser_Xml_WriteSegmentDefinitionFile(const AQFINTS_SEGMENT_LIST *segmentList, const char *filename) { GWEN_XMLNODE *xmlFile; GWEN_XMLNODE *xmlHeader; GWEN_XMLNODE *xmlFinTS; GWEN_XMLNODE *xmlSegs; int rv; xmlFile=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "ROOT"); xmlHeader=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "?xml"); GWEN_XMLNode_AddHeader(xmlFile, xmlHeader); xmlFinTS=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "FinTS"); GWEN_XMLNode_AddChild(xmlFile, xmlFinTS); xmlSegs=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "SEGs"); GWEN_XMLNode_AddChild(xmlFinTS, xmlSegs); writeSegmentDefinitions(segmentList, xmlSegs); rv=GWEN_XMLNode_WriteFile(xmlFile, filename, GWEN_XML_FLAGS_INDENT | GWEN_XML_FLAGS_HANDLE_COMMENTS | GWEN_XML_FLAGS_HANDLE_HEADERS | GWEN_XML_FLAGS_SIMPLE); if (rv<0) { DBG_INFO(AQFINTS_PARSER_LOGDOMAIN, "here (%d)", rv); GWEN_XMLNode_free(xmlFile); return rv; } GWEN_XMLNode_free(xmlFile); return 0; } void writeSegmentDefinitions(const AQFINTS_SEGMENT_LIST *segmentList, GWEN_XMLNODE *xmlDest) { const AQFINTS_SEGMENT *segment; segment=AQFINTS_Segment_List_First(segmentList); while (segment) { GWEN_XMLNODE *xmlNode; xmlNode=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "SEGdef"); writeSegmentWithElements(segment, xmlNode); GWEN_XMLNode_AddChild(xmlDest, xmlNode); segment=AQFINTS_Segment_List_Next(segment); } } void readGroupsAndSegsAndJobs(AQFINTS_JOBDEF_LIST *jobDefList, AQFINTS_SEGMENT_LIST *segmentList, AQFINTS_ELEMENT *groupTree, GWEN_XMLNODE *xmlSource) { GWEN_XMLNODE *xmlNode; xmlNode=GWEN_XMLNode_GetFirstTag(xmlSource); while (xmlNode) { const char *s; s=GWEN_XMLNode_GetData(xmlNode); if (s && *s) { if (strcasecmp(s, "GROUPs")==0) { readGroups(groupTree, xmlNode); } else if (strcasecmp(s, "SEGs")==0) { readSegments(segmentList, xmlNode); } else if (strcasecmp(s, "JOBs")==0) { readJobDefs(jobDefList, xmlNode); } else { DBG_INFO(AQFINTS_PARSER_LOGDOMAIN, "Ignoring XML element \"%s\"", s); } } xmlNode=GWEN_XMLNode_GetNextTag(xmlNode); } } void readGroups(AQFINTS_ELEMENT *groupTree, GWEN_XMLNODE *xmlSource) { GWEN_XMLNODE *xmlNode; xmlNode=GWEN_XMLNode_GetFirstTag(xmlSource); while (xmlNode) { const char *s; s=GWEN_XMLNode_GetData(xmlNode); if (s && *s && strcasecmp(s, "GROUPdef")==0) { AQFINTS_ELEMENT *elChild; elChild=AQFINTS_Element_new(); AQFINTS_Element_Tree2_AddChild(groupTree, elChild); readElementWithChildren(elChild, xmlNode); } xmlNode=GWEN_XMLNode_GetNextTag(xmlNode); } } void readSegments(AQFINTS_SEGMENT_LIST *segmentList, GWEN_XMLNODE *xmlSource) { GWEN_XMLNODE *xmlNode; xmlNode=GWEN_XMLNode_GetFirstTag(xmlSource); while (xmlNode) { const char *s; s=GWEN_XMLNode_GetData(xmlNode); if (s && *s && strcasecmp(s, "SEGdef")==0) { AQFINTS_SEGMENT *segment; segment=AQFINTS_Segment_new(); readSegmentWithChildren(segment, xmlNode); AQFINTS_Segment_List_Add(segment, segmentList); } xmlNode=GWEN_XMLNode_GetNextTag(xmlNode); } } void readJobDefs(AQFINTS_JOBDEF_LIST *jobDefList, GWEN_XMLNODE *xmlSource) { GWEN_XMLNODE *xmlNode; xmlNode=GWEN_XMLNode_GetFirstTag(xmlSource); while (xmlNode) { const char *s; s=GWEN_XMLNode_GetData(xmlNode); if (s && *s && strcasecmp(s, "JOBdef")==0) { AQFINTS_JOBDEF *jobDef; jobDef=AQFINTS_JobDef_new(); readJobDef(jobDef, xmlNode); AQFINTS_JobDef_List_Add(jobDef, jobDefList); } xmlNode=GWEN_XMLNode_GetNextTag(xmlNode); } } void readElementWithChildren(AQFINTS_ELEMENT *el, GWEN_XMLNODE *xmlSource) { /* read this element */ readElement(el, xmlSource); /* read child elements for some groups */ switch (AQFINTS_Element_GetElementType(el)) { case AQFINTS_ElementType_Root: case AQFINTS_ElementType_Group: case AQFINTS_ElementType_Deg: readChildElements(el, xmlSource); break; case AQFINTS_ElementType_De: case AQFINTS_ElementType_Unknown: break; } } void readChildElements(AQFINTS_ELEMENT *el, GWEN_XMLNODE *xmlSource) { GWEN_XMLNODE *xmlNode; xmlNode=GWEN_XMLNode_GetFirstTag(xmlSource); while (xmlNode) { AQFINTS_ELEMENT *elChild; elChild=AQFINTS_Element_new(); AQFINTS_Element_Tree2_AddChild(el, elChild); readElementWithChildren(elChild, xmlNode); xmlNode=GWEN_XMLNode_GetNextTag(xmlNode); } } void readSegmentWithChildren(AQFINTS_SEGMENT *segment, GWEN_XMLNODE *xmlSource) { readSegment(segment, xmlSource); readSegmentChildren(segment, xmlSource); } void readSegmentChildren(AQFINTS_SEGMENT *segment, GWEN_XMLNODE *xmlSource) { GWEN_XMLNODE *xmlNode; AQFINTS_ELEMENT *elementTree; /* get or create element tree */ elementTree=AQFINTS_Segment_GetElements(segment); if (elementTree==NULL) { elementTree=AQFINTS_Element_new(); AQFINTS_Element_SetElementType(elementTree, AQFINTS_ElementType_Root); AQFINTS_Segment_SetElements(segment, elementTree); } xmlNode=GWEN_XMLNode_GetFirstTag(xmlSource); while (xmlNode) { AQFINTS_ELEMENT *elChild; elChild=AQFINTS_Element_new(); AQFINTS_Element_Tree2_AddChild(elementTree, elChild); readElementWithChildren(elChild, xmlNode); xmlNode=GWEN_XMLNode_GetNextTag(xmlNode); } } void writeSegmentWithElements(const AQFINTS_SEGMENT *segment, GWEN_XMLNODE *xmlDest) { const AQFINTS_ELEMENT *elements; writeSegment(segment, xmlDest); elements=AQFINTS_Segment_GetElements(segment); if (elements) { const AQFINTS_ELEMENT *el; el=AQFINTS_Element_Tree2_GetFirstChild(elements); while (el) { writeElementTree(el, xmlDest); el=AQFINTS_Element_Tree2_GetNext(el); } } } void writeElementTree(const AQFINTS_ELEMENT *el, GWEN_XMLNODE *xmlDest) { AQFINTS_ELEMENT_TYPE elementType; const char *s; elementType=AQFINTS_Element_GetElementType(el); switch (elementType) { case AQFINTS_ElementType_Root: s="root"; break; case AQFINTS_ElementType_Group: s="GROUP"; break; case AQFINTS_ElementType_De: s="DE"; break; case AQFINTS_ElementType_Deg: s="DEG"; break; default: s=NULL; break; } if (s) { GWEN_XMLNODE *xmlNode; const AQFINTS_ELEMENT *elChild; xmlNode=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, s); writeElement(el, xmlNode); elChild=AQFINTS_Element_Tree2_GetFirstChild(el); while (elChild) { writeElementTree(elChild, xmlNode); elChild=AQFINTS_Element_Tree2_GetNext(elChild); } GWEN_XMLNode_AddChild(xmlDest, xmlNode); } } /* ------------------------------------------------------------------------------------------------ * basic object reading/writing * ------------------------------------------------------------------------------------------------ */ void readElement(AQFINTS_ELEMENT *el, GWEN_XMLNODE *xmlSource) { const char *s; int i; uint32_t flags=0; assert(el); assert(xmlSource); s=GWEN_XMLNode_GetData(xmlSource); if (s && *s) { if (strcasecmp(s, "DE")==0) AQFINTS_Element_SetElementType(el, AQFINTS_ElementType_De); else if (strcasecmp(s, "DEG")==0) AQFINTS_Element_SetElementType(el, AQFINTS_ElementType_Deg); else if (strcasecmp(s, "Group")==0 || strcasecmp(s, "GROUPdef")==0) AQFINTS_Element_SetElementType(el, AQFINTS_ElementType_Group); else { DBG_ERROR(AQFINTS_PARSER_LOGDOMAIN, "Invalid element type \"%s\"", s); return; } } s=GWEN_XMLNode_GetProperty(xmlSource, "name", NULL); if (s && *s) AQFINTS_Element_SetName(el, s); s=GWEN_XMLNode_GetProperty(xmlSource, "id", NULL); if (s && *s) AQFINTS_Element_SetId(el, s); i=GWEN_XMLNode_GetIntProperty(xmlSource, "version", 0); AQFINTS_Element_SetVersion(el, i); s=GWEN_XMLNode_GetProperty(xmlSource, "type", NULL); if (s && *s) AQFINTS_Element_SetType(el, s); i=GWEN_XMLNode_GetIntProperty(xmlSource, "minNum", 1); AQFINTS_Element_SetMinNum(el, i); i=GWEN_XMLNode_GetIntProperty(xmlSource, "maxNum", 1); AQFINTS_Element_SetMaxNum(el, i); i=GWEN_XMLNode_GetIntProperty(xmlSource, "minSize", 0); AQFINTS_Element_SetMinSize(el, i); i=GWEN_XMLNode_GetIntProperty(xmlSource, "maxSize", -1); AQFINTS_Element_SetMaxSize(el, i); i=GWEN_XMLNode_GetIntProperty(xmlSource, "trustLevel", 0); AQFINTS_Element_SetTrustLevel(el, i); flags|=(GWEN_XMLNode_GetIntProperty(xmlSource, "leftFill", 0)?AQFINTS_ELEMENT_FLAGS_LEFTFILL:0); flags|=(GWEN_XMLNode_GetIntProperty(xmlSource, "rightFill", 0)?AQFINTS_ELEMENT_FLAGS_RIGHTFILL:0); flags|=(GWEN_XMLNode_GetIntProperty(xmlSource, "isBin", 0)?AQFINTS_ELEMENT_FLAGS_ISBIN:0); AQFINTS_Element_SetFlags(el, flags); if (AQFINTS_Element_GetElementType(el)==AQFINTS_ElementType_De) { const GWEN_XMLNODE *xmlNode; xmlNode=GWEN_XMLNode_GetFirstData(xmlSource); if (xmlNode) { s=GWEN_XMLNode_GetData(xmlNode); if (s && *s) { if (flags & AQFINTS_ELEMENT_FLAGS_ISBIN) { GWEN_BUFFER *binBuffer; binBuffer=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Text_FromHexBuffer(s, binBuffer); AQFINTS_Element_SetDataCopy(el, (const uint8_t *) GWEN_Buffer_GetStart(binBuffer), GWEN_Buffer_GetUsedBytes(binBuffer)); GWEN_Buffer_free(binBuffer); } else { AQFINTS_Element_SetTextDataCopy(el, s); } } } } } void writeElement(const AQFINTS_ELEMENT *el, GWEN_XMLNODE *xmlDest) { const char *s; int i; uint32_t flags; assert(el); assert(xmlDest); s=AQFINTS_Element_GetName(el); if (s && *s) GWEN_XMLNode_SetProperty(xmlDest, "name", s); s=AQFINTS_Element_GetId(el); if (s && *s) GWEN_XMLNode_SetProperty(xmlDest, "id", s); i=AQFINTS_Element_GetVersion(el); if (i!=0) GWEN_XMLNode_SetIntProperty(xmlDest, "version", i); s=AQFINTS_Element_GetType(el); if (s && *s) GWEN_XMLNode_SetProperty(xmlDest, "type", s); i=AQFINTS_Element_GetMinNum(el); if (i!=1) GWEN_XMLNode_SetIntProperty(xmlDest, "minNum", i); i=AQFINTS_Element_GetMaxNum(el); if (i!=1) GWEN_XMLNode_SetIntProperty(xmlDest, "maxNum", i); i=AQFINTS_Element_GetMinSize(el); if (i!=0) GWEN_XMLNode_SetIntProperty(xmlDest, "minSize", i); i=AQFINTS_Element_GetMaxSize(el); if (i!=-1) GWEN_XMLNode_SetIntProperty(xmlDest, "maxSize", i); i=AQFINTS_Element_GetTrustLevel(el); if (i!=0) GWEN_XMLNode_SetIntProperty(xmlDest, "trustLevel", i); flags=AQFINTS_Element_GetFlags(el); if (flags & AQFINTS_ELEMENT_FLAGS_LEFTFILL) GWEN_XMLNode_SetIntProperty(xmlDest, "leftFill", 1); if (flags & AQFINTS_ELEMENT_FLAGS_RIGHTFILL) GWEN_XMLNode_SetIntProperty(xmlDest, "rightFill", 1); if (flags & AQFINTS_ELEMENT_FLAGS_ISBIN) GWEN_XMLNode_SetIntProperty(xmlDest, "isBin", 1); if (AQFINTS_Element_GetElementType(el)==AQFINTS_ElementType_De) { if (flags & AQFINTS_ELEMENT_FLAGS_ISBIN) { const uint8_t *ptrData; uint32_t lenData; ptrData=AQFINTS_Element_GetDataPointer(el); lenData=AQFINTS_Element_GetDataLength(el); if (lenData && ptrData) { GWEN_BUFFER *hexBuffer; GWEN_XMLNODE *xmlNode; hexBuffer=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Text_ToHexBuffer((const char *) ptrData, lenData, hexBuffer, 32, '\n', 0); xmlNode=GWEN_XMLNode_new(GWEN_XMLNodeTypeData, GWEN_Buffer_GetStart(hexBuffer)); GWEN_XMLNode_AddChild(xmlDest, xmlNode); GWEN_Buffer_free(hexBuffer); } } else { s=AQFINTS_Element_GetDataAsChar(el, NULL); if (s && *s) { GWEN_XMLNODE *xmlNode; xmlNode=GWEN_XMLNode_new(GWEN_XMLNodeTypeData, s); GWEN_XMLNode_AddChild(xmlDest, xmlNode); } } } } void readSegment(AQFINTS_SEGMENT *segment, GWEN_XMLNODE *xmlSource) { const char *s; int i; assert(segment); assert(xmlSource); s=GWEN_XMLNode_GetProperty(xmlSource, "id", NULL); if (s && *s) AQFINTS_Segment_SetId(segment, s); s=GWEN_XMLNode_GetProperty(xmlSource, "code", NULL); if (s && *s) AQFINTS_Segment_SetCode(segment, s); i=GWEN_XMLNode_GetIntProperty(xmlSource, "segmentVersion", -1); AQFINTS_Segment_SetSegmentVersion(segment, i); i=GWEN_XMLNode_GetIntProperty(xmlSource, "protocolVersion", -1); AQFINTS_Segment_SetProtocolVersion(segment, i); i=GWEN_XMLNode_GetIntProperty(xmlSource, "isBpdJob", 0); if (i) AQFINTS_Segment_AddFlags(segment, AQFINTS_SEGMENT_FLAGS_ISBPD); } void writeSegment(const AQFINTS_SEGMENT *segment, GWEN_XMLNODE *xmlDest) { const char *s; int i; assert(segment); assert(xmlDest); s=AQFINTS_Segment_GetId(segment); if (s && *s) GWEN_XMLNode_SetProperty(xmlDest, "id", s); s=AQFINTS_Segment_GetCode(segment); if (s && *s) GWEN_XMLNode_SetProperty(xmlDest, "code", s); i=AQFINTS_Segment_GetSegmentVersion(segment); if (i!=0) GWEN_XMLNode_SetIntProperty(xmlDest, "segmentVersion", i); i=AQFINTS_Segment_GetProtocolVersion(segment); if (i!=0) GWEN_XMLNode_SetIntProperty(xmlDest, "protocolVersion", i); } void readJobDef(AQFINTS_JOBDEF *jobDef, GWEN_XMLNODE *xmlSource) { const char *s; int i; uint32_t flags=0; assert(jobDef); assert(xmlSource); s=GWEN_XMLNode_GetProperty(xmlSource, "id", NULL); if (s && *s) AQFINTS_JobDef_SetId(jobDef, s); s=GWEN_XMLNode_GetProperty(xmlSource, "code", NULL); if (s && *s) AQFINTS_JobDef_SetCode(jobDef, s); s=GWEN_XMLNode_GetProperty(xmlSource, "params", NULL); if (s && *s) AQFINTS_JobDef_SetParamsSegmentCode(jobDef, s); s=GWEN_XMLNode_GetProperty(xmlSource, "response", NULL); if (s && *s) AQFINTS_JobDef_SetResponseSegmentCode(jobDef, s); i=GWEN_XMLNode_GetIntProperty(xmlSource, "jobVersion", -1); AQFINTS_JobDef_SetJobVersion(jobDef, i); i=GWEN_XMLNode_GetIntProperty(xmlSource, "protocolVersion", -1); AQFINTS_JobDef_SetProtocolVersion(jobDef, i); flags|=(GWEN_XMLNode_GetIntProperty(xmlSource, "crypt", 0)?AQFINTS_JOBDEF_FLAGS_CRYPT:0); flags|=(GWEN_XMLNode_GetIntProperty(xmlSource, "sign", 0)?AQFINTS_JOBDEF_FLAGS_SIGN:0); flags|=(GWEN_XMLNode_GetIntProperty(xmlSource, "attachable", 0)?AQFINTS_JOBDEF_FLAGS_ATTACHABLE:0); flags|=(GWEN_XMLNode_GetIntProperty(xmlSource, "needBPD", 0)?AQFINTS_JOBDEF_FLAGS_NEED_BPD:0); flags|=(GWEN_XMLNode_GetIntProperty(xmlSource, "single", 0)?AQFINTS_JOBDEF_FLAGS_SINGLE:0); AQFINTS_JobDef_SetFlags(jobDef, flags); } void writeJobDef(const AQFINTS_JOBDEF *jobDef, GWEN_XMLNODE *xmlDest) { const char *s; int i; uint32_t flags; assert(jobDef); assert(xmlDest); s=AQFINTS_JobDef_GetId(jobDef); if (s && *s) GWEN_XMLNode_SetProperty(xmlDest, "id", s); s=AQFINTS_JobDef_GetCode(jobDef); if (s && *s) GWEN_XMLNode_SetProperty(xmlDest, "code", s); s=AQFINTS_JobDef_GetParamsSegmentCode(jobDef); if (s && *s) GWEN_XMLNode_SetProperty(xmlDest, "params", s); s=AQFINTS_JobDef_GetResponseSegmentCode(jobDef); if (s && *s) GWEN_XMLNode_SetProperty(xmlDest, "response", s); i=AQFINTS_JobDef_GetJobVersion(jobDef); if (i!=0) GWEN_XMLNode_SetIntProperty(xmlDest, "jobVersion", i); i=AQFINTS_JobDef_GetProtocolVersion(jobDef); if (i!=0) GWEN_XMLNode_SetIntProperty(xmlDest, "protocolVersion", i); flags=AQFINTS_JobDef_GetFlags(jobDef); if (flags & AQFINTS_JOBDEF_FLAGS_CRYPT) GWEN_XMLNode_SetIntProperty(xmlDest, "crypt", 1); if (flags & AQFINTS_JOBDEF_FLAGS_SIGN) GWEN_XMLNode_SetIntProperty(xmlDest, "sign", 1); if (flags & AQFINTS_JOBDEF_FLAGS_ATTACHABLE) GWEN_XMLNode_SetIntProperty(xmlDest, "attachable", 1); if (flags & AQFINTS_JOBDEF_FLAGS_NEED_BPD) GWEN_XMLNode_SetIntProperty(xmlDest, "needBPD", 1); if (flags & AQFINTS_JOBDEF_FLAGS_SINGLE) GWEN_XMLNode_SetIntProperty(xmlDest, "single", 1); } aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/parser/element.c0000664000175000017500000004446515037736054024276 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "element.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "./element_p.h" #include #include /* code headers */ #include /* macro functions */ GWEN_TREE2_FUNCTIONS(AQFINTS_ELEMENT, AQFINTS_Element) AQFINTS_ELEMENT_TYPE AQFINTS_ElementType_fromString(const char *p_s) { if (p_s && *p_s) { if (strcasecmp(p_s, "root")==0) return AQFINTS_ElementType_Root; else if (strcasecmp(p_s, "group")==0) return AQFINTS_ElementType_Group; else if (strcasecmp(p_s, "de")==0) return AQFINTS_ElementType_De; else if (strcasecmp(p_s, "deg")==0) return AQFINTS_ElementType_Deg; } return AQFINTS_ElementType_Unknown; } AQFINTS_ELEMENT_DATATYPE AQFINTS_ElementDataType_fromString(const char *p_s) { if (p_s && *p_s) { if (strcasecmp(p_s, "int")==0) return AQFINTS_ElementDataType_Int; else if (strcasecmp(p_s, "char")==0) return AQFINTS_ElementDataType_Char; else if (strcasecmp(p_s, "bin")==0) return AQFINTS_ElementDataType_Bin; } return AQFINTS_ElementDataType_Unknown; } const char *AQFINTS_ElementType_toString(AQFINTS_ELEMENT_TYPE p_i) { switch(p_i) { case AQFINTS_ElementType_Root: return "root"; case AQFINTS_ElementType_Group: return "group"; case AQFINTS_ElementType_De: return "de"; case AQFINTS_ElementType_Deg: return "deg"; case AQFINTS_ElementType_Unknown: default: return "unknown"; } } const char *AQFINTS_ElementDataType_toString(AQFINTS_ELEMENT_DATATYPE p_i) { switch(p_i) { case AQFINTS_ElementDataType_Int: return "int"; case AQFINTS_ElementDataType_Char: return "char"; case AQFINTS_ElementDataType_Bin: return "bin"; case AQFINTS_ElementDataType_Unknown: default: return "unknown"; } } AQFINTS_ELEMENT *AQFINTS_Element_new(void) { AQFINTS_ELEMENT *p_struct; GWEN_NEW_OBJECT(AQFINTS_ELEMENT, p_struct) p_struct->_refCount=1; GWEN_TREE2_INIT(AQFINTS_ELEMENT, p_struct, AQFINTS_Element) /* members */ p_struct->flags=0; p_struct->elementType=AQFINTS_ElementType_De; p_struct->id=NULL; p_struct->name=NULL; p_struct->version=0; p_struct->type=NULL; p_struct->minNum=1; p_struct->maxNum=1; p_struct->minSize=0; p_struct->maxSize=-1; p_struct->trustLevel=0; p_struct->data.pointer=NULL; p_struct->data.length=0; p_struct->runtimeFlags=0; /* virtual functions */ return p_struct; } void AQFINTS_Element_free(AQFINTS_ELEMENT *p_struct) { if (p_struct) { assert(p_struct->_refCount); if (p_struct->_refCount==1) { GWEN_TREE2_FINI(AQFINTS_ELEMENT, p_struct, AQFINTS_Element) /* members */ free(p_struct->id); p_struct->id=NULL; free(p_struct->name); p_struct->name=NULL; free(p_struct->type); p_struct->type=NULL; if (p_struct->data.length && p_struct->data.pointer) { free(p_struct->data.pointer); } p_struct->data.pointer=NULL; p_struct->data.length=0; p_struct->_refCount=0; GWEN_FREE_OBJECT(p_struct); } else p_struct->_refCount--; } } void AQFINTS_Element_Attach(AQFINTS_ELEMENT *p_struct) { assert(p_struct); assert(p_struct->_refCount); p_struct->_refCount++; } AQFINTS_ELEMENT *AQFINTS_Element_dup(const AQFINTS_ELEMENT *p_src) { AQFINTS_ELEMENT *p_struct; assert(p_src); p_struct=AQFINTS_Element_new(); /* member "flags" */ p_struct->flags=p_src->flags; /* member "elementType" */ p_struct->elementType=p_src->elementType; /* member "id" */ if (p_struct->id) { free(p_struct->id); p_struct->id=NULL; p_struct->id=NULL; } if (p_src->id) { p_struct->id=strdup(p_src->id); } /* member "name" */ if (p_struct->name) { free(p_struct->name); p_struct->name=NULL; p_struct->name=NULL; } if (p_src->name) { p_struct->name=strdup(p_src->name); } /* member "version" */ p_struct->version=p_src->version; /* member "type" */ if (p_struct->type) { free(p_struct->type); p_struct->type=NULL; p_struct->type=NULL; } if (p_src->type) { p_struct->type=strdup(p_src->type); } /* member "minNum" */ p_struct->minNum=p_src->minNum; /* member "maxNum" */ p_struct->maxNum=p_src->maxNum; /* member "minSize" */ p_struct->minSize=p_src->minSize; /* member "maxSize" */ p_struct->maxSize=p_src->maxSize; /* member "trustLevel" */ p_struct->trustLevel=p_src->trustLevel; /* member "data" */ if (p_struct->data.length && p_struct->data.pointer) { free(p_struct->data.pointer); } p_struct->data.pointer=NULL; p_struct->data.length=0; if (p_src->data.length && p_src->data.pointer) { p_struct->data.pointer=(uint8_t*) malloc(p_src->data.length); if (p_struct->data.pointer) { p_struct->data.length=p_src->data.length; memmove(p_struct->data.pointer, p_src->data.pointer, p_src->data.length); } else { p_struct->data.pointer=NULL; p_struct->data.length=0; } } else { p_struct->data.pointer=NULL; p_struct->data.length=0; } /* member "runtimeFlags" */ p_struct->runtimeFlags=p_src->runtimeFlags; return p_struct; } AQFINTS_ELEMENT *AQFINTS_Element_copy(AQFINTS_ELEMENT *p_struct, const AQFINTS_ELEMENT *p_src) { assert(p_struct); assert(p_src); /* member "flags" */ p_struct->flags=p_src->flags; /* member "elementType" */ p_struct->elementType=p_src->elementType; /* member "id" */ if (p_struct->id) { free(p_struct->id); p_struct->id=NULL; p_struct->id=NULL; } if (p_src->id) { p_struct->id=strdup(p_src->id); } /* member "name" */ if (p_struct->name) { free(p_struct->name); p_struct->name=NULL; p_struct->name=NULL; } if (p_src->name) { p_struct->name=strdup(p_src->name); } /* member "version" */ p_struct->version=p_src->version; /* member "type" */ if (p_struct->type) { free(p_struct->type); p_struct->type=NULL; p_struct->type=NULL; } if (p_src->type) { p_struct->type=strdup(p_src->type); } /* member "minNum" */ p_struct->minNum=p_src->minNum; /* member "maxNum" */ p_struct->maxNum=p_src->maxNum; /* member "minSize" */ p_struct->minSize=p_src->minSize; /* member "maxSize" */ p_struct->maxSize=p_src->maxSize; /* member "trustLevel" */ p_struct->trustLevel=p_src->trustLevel; /* member "data" */ if (p_struct->data.length && p_struct->data.pointer) { free(p_struct->data.pointer); } p_struct->data.pointer=NULL; p_struct->data.length=0; if (p_src->data.length && p_src->data.pointer) { p_struct->data.pointer=(uint8_t*) malloc(p_src->data.length); if (p_struct->data.pointer) { p_struct->data.length=p_src->data.length; memmove(p_struct->data.pointer, p_src->data.pointer, p_src->data.length); } else { p_struct->data.pointer=NULL; p_struct->data.length=0; } } else { p_struct->data.pointer=NULL; p_struct->data.length=0; } /* member "runtimeFlags" */ p_struct->runtimeFlags=p_src->runtimeFlags; return p_struct; } uint32_t AQFINTS_Element_GetFlags(const AQFINTS_ELEMENT *p_struct){ assert(p_struct); return p_struct->flags; } AQFINTS_ELEMENT_TYPE AQFINTS_Element_GetElementType(const AQFINTS_ELEMENT *p_struct){ assert(p_struct); return p_struct->elementType; } const char *AQFINTS_Element_GetId(const AQFINTS_ELEMENT *p_struct){ assert(p_struct); return p_struct->id; } const char *AQFINTS_Element_GetName(const AQFINTS_ELEMENT *p_struct){ assert(p_struct); return p_struct->name; } int AQFINTS_Element_GetVersion(const AQFINTS_ELEMENT *p_struct){ assert(p_struct); return p_struct->version; } const char *AQFINTS_Element_GetType(const AQFINTS_ELEMENT *p_struct){ assert(p_struct); return p_struct->type; } int AQFINTS_Element_GetMinNum(const AQFINTS_ELEMENT *p_struct){ assert(p_struct); return p_struct->minNum; } int AQFINTS_Element_GetMaxNum(const AQFINTS_ELEMENT *p_struct){ assert(p_struct); return p_struct->maxNum; } int AQFINTS_Element_GetMinSize(const AQFINTS_ELEMENT *p_struct){ assert(p_struct); return p_struct->minSize; } int AQFINTS_Element_GetMaxSize(const AQFINTS_ELEMENT *p_struct){ assert(p_struct); return p_struct->maxSize; } int AQFINTS_Element_GetTrustLevel(const AQFINTS_ELEMENT *p_struct){ assert(p_struct); return p_struct->trustLevel; } uint32_t AQFINTS_Element_GetRuntimeFlags(const AQFINTS_ELEMENT *p_struct){ assert(p_struct); return p_struct->runtimeFlags; } void AQFINTS_Element_SetFlags(AQFINTS_ELEMENT *p_struct, uint32_t p_src){ assert(p_struct); p_struct->flags=p_src; } void AQFINTS_Element_AddFlags(AQFINTS_ELEMENT *p_struct, uint32_t p_src) { assert(p_struct); p_struct->flags|=p_src; } void AQFINTS_Element_SubFlags(AQFINTS_ELEMENT *p_struct, uint32_t p_src) { assert(p_struct); p_struct->flags&=~p_src; } void AQFINTS_Element_SetElementType(AQFINTS_ELEMENT *p_struct, AQFINTS_ELEMENT_TYPE p_src){ assert(p_struct); p_struct->elementType=p_src; } void AQFINTS_Element_SetId(AQFINTS_ELEMENT *p_struct, const char *p_src){ assert(p_struct); if (p_struct->id) { free(p_struct->id); p_struct->id=NULL; p_struct->id=NULL; } if (p_src) { p_struct->id=strdup(p_src); } else { p_struct->id=NULL; } } void AQFINTS_Element_SetName(AQFINTS_ELEMENT *p_struct, const char *p_src){ assert(p_struct); if (p_struct->name) { free(p_struct->name); p_struct->name=NULL; p_struct->name=NULL; } if (p_src) { p_struct->name=strdup(p_src); } else { p_struct->name=NULL; } } void AQFINTS_Element_SetVersion(AQFINTS_ELEMENT *p_struct, int p_src){ assert(p_struct); p_struct->version=p_src; } void AQFINTS_Element_SetType(AQFINTS_ELEMENT *p_struct, const char *p_src){ assert(p_struct); if (p_struct->type) { free(p_struct->type); p_struct->type=NULL; p_struct->type=NULL; } if (p_src) { p_struct->type=strdup(p_src); } else { p_struct->type=NULL; } } void AQFINTS_Element_SetMinNum(AQFINTS_ELEMENT *p_struct, int p_src){ assert(p_struct); p_struct->minNum=p_src; } void AQFINTS_Element_SetMaxNum(AQFINTS_ELEMENT *p_struct, int p_src){ assert(p_struct); p_struct->maxNum=p_src; } void AQFINTS_Element_SetMinSize(AQFINTS_ELEMENT *p_struct, int p_src){ assert(p_struct); p_struct->minSize=p_src; } void AQFINTS_Element_SetMaxSize(AQFINTS_ELEMENT *p_struct, int p_src){ assert(p_struct); p_struct->maxSize=p_src; } void AQFINTS_Element_SetTrustLevel(AQFINTS_ELEMENT *p_struct, int p_src){ assert(p_struct); p_struct->trustLevel=p_src; } void AQFINTS_Element_SetRuntimeFlags(AQFINTS_ELEMENT *p_struct, uint32_t p_src){ assert(p_struct); p_struct->runtimeFlags=p_src; } void AQFINTS_Element_AddRuntimeFlags(AQFINTS_ELEMENT *p_struct, uint32_t p_src) { assert(p_struct); p_struct->runtimeFlags|=p_src; } void AQFINTS_Element_SubRuntimeFlags(AQFINTS_ELEMENT *p_struct, uint32_t p_src) { assert(p_struct); p_struct->runtimeFlags&=~p_src; } void AQFINTS_Element_ReadDb(AQFINTS_ELEMENT *p_struct, GWEN_DB_NODE *p_db){ assert(p_struct); /* member "flags" */ p_struct->flags=GWEN_DB_GetIntValue(p_db, "flags", 0, 0); /* member "elementType" */ { const char *s; s=GWEN_DB_GetCharValue(p_db, "elementType", 0, NULL); if (s) p_struct->elementType=AQFINTS_ElementType_fromString(s); else p_struct->elementType=AQFINTS_ElementType_De; } /* member "id" */ if (p_struct->id) { free(p_struct->id); p_struct->id=NULL; p_struct->id=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "id", 0, NULL); if (s) p_struct->id=strdup(s); } /* member "name" */ if (p_struct->name) { free(p_struct->name); p_struct->name=NULL; p_struct->name=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "name", 0, NULL); if (s) p_struct->name=strdup(s); } /* member "version" */ p_struct->version=GWEN_DB_GetIntValue(p_db, "version", 0, 0); /* member "type" */ if (p_struct->type) { free(p_struct->type); p_struct->type=NULL; p_struct->type=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "type", 0, NULL); if (s) p_struct->type=strdup(s); } /* member "minNum" */ p_struct->minNum=GWEN_DB_GetIntValue(p_db, "minNum", 0, 1); /* member "maxNum" */ p_struct->maxNum=GWEN_DB_GetIntValue(p_db, "maxNum", 0, 1); /* member "minSize" */ p_struct->minSize=GWEN_DB_GetIntValue(p_db, "minSize", 0, 0); /* member "maxSize" */ p_struct->maxSize=GWEN_DB_GetIntValue(p_db, "maxSize", 0, -1); /* member "trustLevel" */ p_struct->trustLevel=GWEN_DB_GetIntValue(p_db, "trustLevel", 0, 0); /* member "data" */ if (p_struct->data.length && p_struct->data.pointer) { free(p_struct->data.pointer); } p_struct->data.pointer=NULL; p_struct->data.length=0; { const void *v; unsigned int vlen; v=GWEN_DB_GetBinValue(p_db, "data", 0, NULL, 0, &vlen); if (v && vlen) { uint8_t *dest; dest=(uint8_t*) malloc(vlen); memmove(dest, v, vlen); p_struct->data.pointer=dest; p_struct->data.length=vlen; } } /* member "runtimeFlags" */ /* member "runtimeFlags" is volatile, just presetting it */ p_struct->runtimeFlags=0; } int AQFINTS_Element_WriteDb(const AQFINTS_ELEMENT *p_struct, GWEN_DB_NODE *p_db) { int p_rv; assert(p_struct); /* member "flags" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "flags", p_struct->flags); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "elementType" */ p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "elementType", AQFINTS_ElementType_toString(p_struct->elementType)); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "id" */ if (p_struct->id) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "id", p_struct->id); else { GWEN_DB_DeleteVar(p_db, "id"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "name" */ if (p_struct->name) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "name", p_struct->name); else { GWEN_DB_DeleteVar(p_db, "name"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "version" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "version", p_struct->version); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "type" */ if (p_struct->type) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "type", p_struct->type); else { GWEN_DB_DeleteVar(p_db, "type"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "minNum" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "minNum", p_struct->minNum); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "maxNum" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "maxNum", p_struct->maxNum); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "minSize" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "minSize", p_struct->minSize); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "maxSize" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "maxSize", p_struct->maxSize); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "trustLevel" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "trustLevel", p_struct->trustLevel); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "data" */ { if (p_struct->data.length && p_struct->data.pointer) { GWEN_DB_SetBinValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "data", p_struct->data.pointer, p_struct->data.length); } else { GWEN_DB_DeleteVar(p_db, "data"); p_rv=0; } } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "runtimeFlags" is volatile, not writing to db */ return 0; } AQFINTS_ELEMENT *AQFINTS_Element_fromDb(GWEN_DB_NODE *p_db) { AQFINTS_ELEMENT *p_struct; p_struct=AQFINTS_Element_new(); AQFINTS_Element_ReadDb(p_struct, p_db); return p_struct; } int AQFINTS_Element_toDb(const AQFINTS_ELEMENT *p_struct, GWEN_DB_NODE *p_db) { return AQFINTS_Element_WriteDb(p_struct, p_db); } void AQFINTS_Element_SetData(AQFINTS_ELEMENT *st, uint8_t *ptr, uint32_t len) { if (st->data.pointer && st->data.length) { free(st->data.pointer); } st->data.pointer=ptr; st->data.length=len; } void AQFINTS_Element_SetDataCopy(AQFINTS_ELEMENT *st, const uint8_t *ptr, uint32_t len) { /* free previous data */ if (st->data.pointer && st->data.length) { free(st->data.pointer); } /* create copy if there is data to copy */ if (ptr && len) { uint8_t *ptrCopy; ptrCopy=(uint8_t*) malloc(len); assert(ptrCopy); memmove(ptrCopy, ptr, len); st->data.pointer=ptrCopy; st->data.length=len; } else { st->data.pointer=NULL; st->data.length=0; } } void AQFINTS_Element_SetTextDataCopy(AQFINTS_ELEMENT *st, const char *ptr) { /* free previous data */ if (st->data.pointer && st->data.length) { free(st->data.pointer); } /* create copy if there is data to copy */ if (ptr) { char *ptrCopy; ptrCopy=strdup(ptr); assert(ptrCopy); st->data.pointer=(uint8_t*) ptrCopy; st->data.length=strlen(ptrCopy)+1; /* count trailing zero */ } else { st->data.pointer=NULL; st->data.length=0; } } const uint8_t* AQFINTS_Element_GetDataPointer(const AQFINTS_ELEMENT *st) { return st->data.pointer; } uint32_t AQFINTS_Element_GetDataLength(const AQFINTS_ELEMENT *st) { return st->data.length; } const char* AQFINTS_Element_GetDataAsChar(const AQFINTS_ELEMENT *st, const char *defaultValue) { if (st->data.length && st->data.pointer && !(st->flags & AQFINTS_ELEMENT_FLAGS_ISBIN)) return (const char*) (st->data.pointer); return defaultValue; } int AQFINTS_Element_GetDataAsInt(const AQFINTS_ELEMENT *st, int defaultValue) { const char *s; s=AQFINTS_Element_GetDataAsChar(st, NULL); if (s && *s) { long int retVal=0; if (1==sscanf(s, "%li", &retVal)) return retVal; } return defaultValue; } void AQFINTS_Element_SetDataAsInt(AQFINTS_ELEMENT *st, int value) { char numbuf[32]; int i; i=snprintf(numbuf, sizeof(numbuf)-1, "%i", value); assert(i<=(sizeof(numbuf)-1)); numbuf[sizeof(numbuf)-1]=0; AQFINTS_Element_SetTextDataCopy(st, numbuf); } /* code headers */ aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/parser/parser_dbwrite.h0000664000175000017500000000144214044534775025655 00000000000000/*************************************************************************** begin : Wed Jul 17 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQFINTS_PARSER_DBWRITE_H #define AQFINTS_PARSER_DBWRITE_H #include "libaqfints/parser/element.h" #include "libaqfints/parser/segment.h" #include int AQFINTS_Parser_Db_WriteSegment(AQFINTS_SEGMENT *segmentDefinition, AQFINTS_SEGMENT *segmentData, GWEN_DB_NODE *db); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/parser/jobdef.xml0000664000175000017500000000633014043610745024433 00000000000000 AQFINTS_JOBDEF AQFINTS_JobDef jobdef with_db with_list1 with_refcount
libaqfints/aqfints.h
0 0 with_flags public NULL NULL public own with_getbymember const dup const NULL NULL public own with_getbymember const dup const 0 0 public 0 0 public NULL NULL public own with_getbymember const dup const NULL NULL public own const dup const 0 0 public 0 0 public 0 0 volatile with_flags public
aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/parser/aqfints_element_tree2.tm20000664000175000017500000000035715037736054027374 00000000000000 AQFINTS_ELEMENT_TREE2 AQFINTS_Element_Tree2 aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/parser/parser.c0000664000175000017500000003274014044534775024135 00000000000000/*************************************************************************** begin : Sun Jun 23 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "parser_p.h" #include "libaqfints/parser/parser_xml.h" #include "libaqfints/parser/parser_hbci.h" #include "libaqfints/parser/parser_normalize.h" #include "libaqfints/parser/parser_dbread.h" #include "libaqfints/parser/parser_dbwrite.h" #include "libaqfints/parser/parser_dump.h" #include #include #include AQFINTS_PARSER *AQFINTS_Parser_new() { AQFINTS_PARSER *parser; GWEN_NEW_OBJECT(AQFINTS_PARSER, parser); parser->jobDefList=AQFINTS_JobDef_List_new(); parser->segmentList=AQFINTS_Segment_List_new(); parser->pathList=GWEN_StringList_new(); return parser; } void AQFINTS_Parser_free(AQFINTS_PARSER *parser) { if (parser) { GWEN_StringList_free(parser->pathList); AQFINTS_Segment_List_free(parser->segmentList); AQFINTS_JobDef_List_free(parser->jobDefList); GWEN_FREE_OBJECT(parser); } } void AQFINTS_Parser_AddPath(AQFINTS_PARSER *parser, const char *path) { assert(parser); assert(path); GWEN_StringList_AppendString(parser->pathList, path, 0, 1); } int AQFINTS_Parser_ReadFiles(AQFINTS_PARSER *parser) { GWEN_STRINGLIST *slFiles; GWEN_STRINGLISTENTRY *slEntry; AQFINTS_ELEMENT *groupTree; int filesLoaded=0; slFiles=GWEN_StringList_new(); groupTree=AQFINTS_Element_new(); /* sample file names */ slEntry=GWEN_StringList_FirstEntry(parser->pathList); while (slEntry) { const char *s; s=GWEN_StringListEntry_Data(slEntry); if (s && *s) { int rv; rv=GWEN_Directory_GetMatchingFilesRecursively(s, slFiles, "*.fints"); if (rv<0) { DBG_ERROR(AQFINTS_PARSER_LOGDOMAIN, "Error reading file names from \"%s\", ignoring", s); } } slEntry=GWEN_StringListEntry_Next(slEntry); } /* check whether we have files to load */ if (GWEN_StringList_Count(slFiles)<1) { DBG_ERROR(AQFINTS_PARSER_LOGDOMAIN, "No files found to load"); GWEN_StringList_free(slFiles); AQFINTS_Element_free(groupTree); return GWEN_ERROR_GENERIC; } /* load files */ slEntry=GWEN_StringList_FirstEntry(slFiles); while (slEntry) { const char *s; s=GWEN_StringListEntry_Data(slEntry); if (s && *s) { int rv; DBG_ERROR(AQFINTS_PARSER_LOGDOMAIN, "Reading parser file %s", s); rv=AQFINTS_Parser_Xml_ReadFile(parser->jobDefList, parser->segmentList, groupTree, s); if (rv<0) { DBG_ERROR(AQFINTS_PARSER_LOGDOMAIN, "Error reading file \"%s\" (%d), ignoring", s, rv); } else filesLoaded++; } slEntry=GWEN_StringListEntry_Next(slEntry); } if (filesLoaded<1) { DBG_ERROR(AQFINTS_PARSER_LOGDOMAIN, "No files loaded"); GWEN_StringList_free(slFiles); AQFINTS_Element_free(groupTree); return GWEN_ERROR_GENERIC; } /* post-process files */ AQFINTS_Parser_SegmentList_ResolveGroups(parser->segmentList, groupTree); AQFINTS_Parser_SegmentList_Normalize(parser->segmentList); /* cleanup */ GWEN_StringList_free(slFiles); AQFINTS_Element_free(groupTree); return 0; } AQFINTS_SEGMENT *AQFINTS_Parser_FindSegmentByCode(const AQFINTS_PARSER *parser, const char *id, int segmentVersion, int protocolVersion) { AQFINTS_SEGMENT *segment; segment=AQFINTS_Segment_List_First(parser->segmentList); while (segment) { if ((segmentVersion==0 || segmentVersion==AQFINTS_Segment_GetSegmentVersion(segment)) && (protocolVersion==0 || protocolVersion==AQFINTS_Segment_GetProtocolVersion(segment))) { if (!(id && *id)) return segment; else { const char *s; s=AQFINTS_Segment_GetCode(segment); if (s && *s && strcasecmp(s, id)==0) return segment; } } segment=AQFINTS_Segment_List_Next(segment); } return NULL; } AQFINTS_SEGMENT *AQFINTS_Parser_FindSegmentById(const AQFINTS_PARSER *parser, const char *id, int segmentVersion, int protocolVersion) { AQFINTS_SEGMENT *segment; segment=AQFINTS_Segment_List_First(parser->segmentList); while (segment) { if ((segmentVersion==0 || segmentVersion==AQFINTS_Segment_GetSegmentVersion(segment)) && (protocolVersion==0 || protocolVersion==AQFINTS_Segment_GetProtocolVersion(segment))) { if (!(id && *id)) return segment; else { const char *s; s=AQFINTS_Segment_GetId(segment); if (s && *s && strcasecmp(s, id)==0) return segment; } } segment=AQFINTS_Segment_List_Next(segment); } return NULL; } AQFINTS_SEGMENT *AQFINTS_Parser_FindSegmentHighestVersionForProto(const AQFINTS_PARSER *parser, const char *id, int protocolVersion) { AQFINTS_SEGMENT *segment; AQFINTS_SEGMENT *bestMatchSoFar=NULL; assert((id && *id)); segment=AQFINTS_Segment_List_First(parser->segmentList); while (segment) { int possibleMatch=0; if ((protocolVersion==0 || (protocolVersion>=AQFINTS_Segment_GetProtocolVersion(segment)))) { const char *s; s=AQFINTS_Segment_GetCode(segment); if (s && *s && strcasecmp(s, id)==0) possibleMatch=1; } if (possibleMatch) { if (bestMatchSoFar==NULL) bestMatchSoFar=segment; else { if (AQFINTS_Segment_GetSegmentVersion(segment)>AQFINTS_Segment_GetSegmentVersion(bestMatchSoFar)) bestMatchSoFar=segment; } } segment=AQFINTS_Segment_List_Next(segment); } return bestMatchSoFar; } AQFINTS_SEGMENT *AQFINTS_Parser_CreateSegmentByCode(const AQFINTS_PARSER *parser, const char *code, int segmentVersion) { AQFINTS_SEGMENT *defSegment; AQFINTS_SEGMENT *segment; GWEN_DB_NODE *dbSegment; if (segmentVersion) defSegment=AQFINTS_Parser_FindSegmentByCode(parser, code, segmentVersion, 0); else defSegment=AQFINTS_Parser_FindSegmentHighestVersionForProto(parser, code, 0); if (defSegment==NULL) { DBG_INFO(AQFINTS_PARSER_LOGDOMAIN, "Segment %s:%d not found", code, segmentVersion); return NULL; } segment=AQFINTS_Segment_new(); AQFINTS_Segment_copy(segment, defSegment); dbSegment=GWEN_DB_Group_new(code); AQFINTS_Segment_SetDbData(segment, dbSegment); return segment; } AQFINTS_JOBDEF *AQFINTS_Parser_FindJobDefByCode(const AQFINTS_PARSER *parser, const char *id, int jobVersion, int protocolVersion) { AQFINTS_JOBDEF *jobDef; jobDef=AQFINTS_JobDef_List_First(parser->jobDefList); while (jobDef) { if ((jobVersion==0 || jobVersion==AQFINTS_JobDef_GetJobVersion(jobDef)) && (protocolVersion==0 || protocolVersion==AQFINTS_JobDef_GetProtocolVersion(jobDef))) { if (!(id && *id)) return jobDef; else { const char *s; s=AQFINTS_JobDef_GetCode(jobDef); if (s && *s && strcasecmp(s, id)==0) return jobDef; } } jobDef=AQFINTS_JobDef_List_Next(jobDef); } return NULL; } AQFINTS_JOBDEF *AQFINTS_Parser_FindJobDefById(const AQFINTS_PARSER *parser, const char *id, int jobVersion, int protocolVersion) { AQFINTS_JOBDEF *jobDef; jobDef=AQFINTS_JobDef_List_First(parser->jobDefList); while (jobDef) { if ((jobVersion==0 || jobVersion==AQFINTS_JobDef_GetJobVersion(jobDef)) && (protocolVersion==0 || protocolVersion==AQFINTS_JobDef_GetProtocolVersion(jobDef))) { if (!(id && *id)) return jobDef; else { const char *s; s=AQFINTS_JobDef_GetId(jobDef); if (s && *s && strcasecmp(s, id)==0) return jobDef; } } jobDef=AQFINTS_JobDef_List_Next(jobDef); } return NULL; } AQFINTS_JOBDEF *AQFINTS_Parser_FindJobDefByParams(const AQFINTS_PARSER *parser, const char *params, int jobVersion, int protocolVersion) { AQFINTS_JOBDEF *jobDef; jobDef=AQFINTS_JobDef_List_First(parser->jobDefList); while (jobDef) { if ((jobVersion==0 || jobVersion==AQFINTS_JobDef_GetJobVersion(jobDef)) && (protocolVersion==0 || protocolVersion==AQFINTS_JobDef_GetProtocolVersion(jobDef))) { if (!(params && *params)) return jobDef; else { const char *s; s=AQFINTS_JobDef_GetParamsSegmentCode(jobDef); if (s && *s && strcasecmp(s, params)==0) return jobDef; } } jobDef=AQFINTS_JobDef_List_Next(jobDef); } return NULL; } int AQFINTS_Parser_ReadIntoDb(AQFINTS_PARSER *parser, const uint8_t *ptrBuf, uint32_t lenBuf, GWEN_DB_NODE *dbData) { AQFINTS_SEGMENT_LIST *segmentList; AQFINTS_SEGMENT *segment; int rv; segmentList=AQFINTS_Segment_List_new(); rv=AQFINTS_Parser_ReadIntoSegmentList(parser, segmentList, ptrBuf, lenBuf); if (rv<0) { DBG_INFO(AQFINTS_PARSER_LOGDOMAIN, "here (%d)", rv); AQFINTS_Segment_List_free(segmentList); return rv; } rv=AQFINTS_Parser_ReadSegmentListToDb(parser, segmentList); if (rv<0) { DBG_INFO(AQFINTS_PARSER_LOGDOMAIN, "here (%d)", rv); AQFINTS_Segment_List_free(segmentList); return rv; } #if 0 DBG_ERROR(AQFINTS_PARSER_LOGDOMAIN, "Got these segments"); AQFINTS_Parser_DumpSegmentList(segmentList, 2); #endif segment=AQFINTS_Segment_List_First(segmentList); while (segment) { GWEN_DB_NODE *dbSegment; dbSegment=AQFINTS_Segment_GetDbData(segment); if (dbSegment) GWEN_DB_AddGroup(dbData, GWEN_DB_Group_dup(dbSegment)); segment=AQFINTS_Segment_List_Next(segment); } AQFINTS_Segment_List_free(segmentList); return 0; } int AQFINTS_Parser_ReadIntoSegmentList(AQFINTS_PARSER *parser, AQFINTS_SEGMENT_LIST *targetSegmentList, const uint8_t *ptrBuf, uint32_t lenBuf) { int rv; rv=AQFINTS_Parser_Hbci_ReadBuffer(targetSegmentList, ptrBuf, lenBuf); if (rv<0) { DBG_INFO(AQFINTS_PARSER_LOGDOMAIN, "here (%d)", rv); return rv; } return 0; } int AQFINTS_Parser_ReadSegmentListToDb(AQFINTS_PARSER *parser, AQFINTS_SEGMENT_LIST *segmentList) { AQFINTS_SEGMENT *segment; int segmentsRead=0; segment=AQFINTS_Segment_List_First(segmentList); while (segment) { const char *sCode; int segmentVersion; sCode=AQFINTS_Segment_GetCode(segment); segmentVersion=AQFINTS_Segment_GetSegmentVersion(segment); if (sCode && *sCode && segmentVersion>0) { AQFINTS_SEGMENT *defSegment; /* TODO: set protocol version somehow */ defSegment=AQFINTS_Parser_FindSegmentByCode(parser, sCode, segmentVersion, 0); if (defSegment) { int rv; GWEN_DB_NODE *dbSegment; const char *sGroupName; sGroupName=AQFINTS_Segment_GetId(defSegment); if (!(sGroupName && *sGroupName)) sGroupName=AQFINTS_Segment_GetCode(defSegment); dbSegment=GWEN_DB_Group_new(sGroupName); AQFINTS_Segment_SetDbData(segment, dbSegment); rv=AQFINTS_Parser_Db_ReadSegment(defSegment, segment, dbSegment); if (rv<0) { DBG_ERROR(AQFINTS_PARSER_LOGDOMAIN, "Error reading segment \"%s\" (version %d) into DB (%d)", sCode, segmentVersion, rv); return rv; } AQFINTS_Segment_AddRuntimeFlags(segment, AQFINTS_SEGMENT_RTFLAGS_PARSED); segmentsRead++; } else { DBG_ERROR(AQFINTS_PARSER_LOGDOMAIN, "Segment \"%s\" (version %d) not found, ignoring", sCode, segmentVersion); } } else { DBG_ERROR(AQFINTS_PARSER_LOGDOMAIN, "Unnamed segment, ignoring"); } segment=AQFINTS_Segment_List_Next(segment); } if (segmentsRead<1) { DBG_ERROR(AQFINTS_PARSER_LOGDOMAIN, "No segment read into DB"); return GWEN_ERROR_GENERIC; } return 0; } int AQFINTS_Parser_WriteSegment(AQFINTS_PARSER *parser, AQFINTS_SEGMENT *segment) { AQFINTS_SEGMENT *defSegment; int rv; const char *sCode; int sVersion; int pVersion; GWEN_DB_NODE *db; sCode=AQFINTS_Segment_GetCode(segment); sVersion=AQFINTS_Segment_GetSegmentVersion(segment); pVersion=AQFINTS_Segment_GetProtocolVersion(segment); defSegment=AQFINTS_Parser_FindSegmentByCode(parser, sCode, sVersion, pVersion); if (defSegment==NULL) { DBG_ERROR(AQFINTS_PARSER_LOGDOMAIN, "Segment \"%s\" (version %d, proto=%d) not found", sCode, sVersion, pVersion); return GWEN_ERROR_INTERNAL; } db=AQFINTS_Segment_GetDbData(segment); if (db==NULL) { DBG_ERROR(AQFINTS_PARSER_LOGDOMAIN, "Segment \"%s\" (version %d, proto=%d): No DB data", sCode, sVersion, pVersion); return GWEN_ERROR_INTERNAL; } rv=AQFINTS_Parser_Db_WriteSegment(defSegment, segment, db); if (rv<0) { DBG_INFO(AQFINTS_PARSER_LOGDOMAIN, "here (%d)", rv); return rv; } AQFINTS_Parser_Hbci_WriteSegment(segment); return 0; } void AQFINTS_Parser_DumpDefinitions(AQFINTS_PARSER *parser, int indent) { AQFINTS_Parser_DumpSegmentList(parser->segmentList, indent); } aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/parser/parser_internal.h0000664000175000017500000000175614044534775026041 00000000000000/*************************************************************************** begin : Sun Jul 07 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQFINTS_PARSER_INTERNAL_H #define AQFINTS_PARSER_INTERNAL_H #include "libaqfints/parser/element.h" #include "libaqfints/parser/segment.h" /** * @return 1 if sType referes to a char type, 0 otherwise */ int AQFINTS_Parser_IsCharType(const char *sType); /** * @return 1 if sType referes to an int type, 0 otherwise */ int AQFINTS_Parser_IsIntType(const char *sType); /** * @return 1 if sType referes to a binary type, 0 otherwise */ int AQFINTS_Parser_IsBinType(const char *sType); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/parser/aqfints_element.tm20000664000175000017500000000030415037736054026263 00000000000000 AQFINTS_ELEMENT AQFINTS_Element aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/parser/jobdef.h0000664000175000017500000002035215037736054024070 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "jobdef.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef AQFINTS_JOBDEF_JOBDEF_H #define AQFINTS_JOBDEF_JOBDEF_H #ifdef __cplusplus extern "C" { #endif /** @page P_AQFINTS_JOBDEF Structure AQFINTS_JOBDEF

This page describes the properties of AQFINTS_JOBDEF.

AQFINTS_JOBDEF

@anchor AQFINTS_JOBDEF_flags

flags

Set this property with @ref AQFINTS_JobDef_SetFlags(), get it with @ref AQFINTS_JobDef_GetFlags().

@anchor AQFINTS_JOBDEF_id

id

Set this property with @ref AQFINTS_JobDef_SetId(), get it with @ref AQFINTS_JobDef_GetId().

@anchor AQFINTS_JOBDEF_code

code

Set this property with @ref AQFINTS_JobDef_SetCode(), get it with @ref AQFINTS_JobDef_GetCode().

@anchor AQFINTS_JOBDEF_jobVersion

jobVersion

Set this property with @ref AQFINTS_JobDef_SetJobVersion(), get it with @ref AQFINTS_JobDef_GetJobVersion().

@anchor AQFINTS_JOBDEF_protocolVersion

protocolVersion

Set this property with @ref AQFINTS_JobDef_SetProtocolVersion(), get it with @ref AQFINTS_JobDef_GetProtocolVersion().

@anchor AQFINTS_JOBDEF_paramsSegmentCode

paramsSegmentCode

Set this property with @ref AQFINTS_JobDef_SetParamsSegmentCode(), get it with @ref AQFINTS_JobDef_GetParamsSegmentCode().

@anchor AQFINTS_JOBDEF_responseSegmentCode

responseSegmentCode

Set this property with @ref AQFINTS_JobDef_SetResponseSegmentCode(), get it with @ref AQFINTS_JobDef_GetResponseSegmentCode().

@anchor AQFINTS_JOBDEF_neededSignatures

neededSignatures

Set this property with @ref AQFINTS_JobDef_SetNeededSignatures(), get it with @ref AQFINTS_JobDef_GetNeededSignatures().

@anchor AQFINTS_JOBDEF_securityClass

securityClass

Set this property with @ref AQFINTS_JobDef_SetSecurityClass(), get it with @ref AQFINTS_JobDef_GetSecurityClass().

@anchor AQFINTS_JOBDEF_runtimeFlags

runtimeFlags

Set this property with @ref AQFINTS_JobDef_SetRuntimeFlags(), get it with @ref AQFINTS_JobDef_GetRuntimeFlags().

*/ /* define AQFINTS_JOBDEF_RTFLAGS */ /* define AQFINTS_JOBDEF_FLAGS */ #define AQFINTS_JOBDEF_FLAGS_CRYPT 0x00000001 #define AQFINTS_JOBDEF_FLAGS_SIGN 0x00000002 #define AQFINTS_JOBDEF_FLAGS_NEED_BPD 0x00000004 #define AQFINTS_JOBDEF_FLAGS_ATTACHABLE 0x00000008 #define AQFINTS_JOBDEF_FLAGS_SINGLE 0x00000010 /* needed system headers */ #include #include #include /* pre-headers */ #include typedef struct AQFINTS_JOBDEF AQFINTS_JOBDEF; GWEN_LIST_FUNCTION_DEFS(AQFINTS_JOBDEF, AQFINTS_JobDef) /* post-headers */ /** Constructor. */ AQFINTS_JOBDEF *AQFINTS_JobDef_new(void); /** Destructor. */ void AQFINTS_JobDef_free(AQFINTS_JOBDEF *p_struct); void AQFINTS_JobDef_Attach(AQFINTS_JOBDEF *p_struct); AQFINTS_JOBDEF *AQFINTS_JobDef_dup(const AQFINTS_JOBDEF *p_src); AQFINTS_JOBDEF *AQFINTS_JobDef_copy(AQFINTS_JOBDEF *p_struct, const AQFINTS_JOBDEF *p_src); /** Getter. * Use this function to get the member "flags" (see @ref AQFINTS_JOBDEF_flags) */ uint32_t AQFINTS_JobDef_GetFlags(const AQFINTS_JOBDEF *p_struct); /** Getter. * Use this function to get the member "id" (see @ref AQFINTS_JOBDEF_id) */ const char *AQFINTS_JobDef_GetId(const AQFINTS_JOBDEF *p_struct); /** Getter. * Use this function to get the member "code" (see @ref AQFINTS_JOBDEF_code) */ const char *AQFINTS_JobDef_GetCode(const AQFINTS_JOBDEF *p_struct); /** Getter. * Use this function to get the member "jobVersion" (see @ref AQFINTS_JOBDEF_jobVersion) */ int AQFINTS_JobDef_GetJobVersion(const AQFINTS_JOBDEF *p_struct); /** Getter. * Use this function to get the member "protocolVersion" (see @ref AQFINTS_JOBDEF_protocolVersion) */ int AQFINTS_JobDef_GetProtocolVersion(const AQFINTS_JOBDEF *p_struct); /** Getter. * Use this function to get the member "paramsSegmentCode" (see @ref AQFINTS_JOBDEF_paramsSegmentCode) */ const char *AQFINTS_JobDef_GetParamsSegmentCode(const AQFINTS_JOBDEF *p_struct); /** Getter. * Use this function to get the member "responseSegmentCode" (see @ref AQFINTS_JOBDEF_responseSegmentCode) */ const char *AQFINTS_JobDef_GetResponseSegmentCode(const AQFINTS_JOBDEF *p_struct); /** Getter. * Use this function to get the member "neededSignatures" (see @ref AQFINTS_JOBDEF_neededSignatures) */ int AQFINTS_JobDef_GetNeededSignatures(const AQFINTS_JOBDEF *p_struct); /** Getter. * Use this function to get the member "securityClass" (see @ref AQFINTS_JOBDEF_securityClass) */ int AQFINTS_JobDef_GetSecurityClass(const AQFINTS_JOBDEF *p_struct); /** Getter. * Use this function to get the member "runtimeFlags" (see @ref AQFINTS_JOBDEF_runtimeFlags) */ uint32_t AQFINTS_JobDef_GetRuntimeFlags(const AQFINTS_JOBDEF *p_struct); /** Setter. * Use this function to set the member "flags" (see @ref AQFINTS_JOBDEF_flags) */ void AQFINTS_JobDef_SetFlags(AQFINTS_JOBDEF *p_struct, uint32_t p_src); /** Add flags. * Use this function to add flags to member "flags" (see @ref AQFINTS_JOBDEF_flags) */ void AQFINTS_JobDef_AddFlags(AQFINTS_JOBDEF *p_struct, uint32_t p_src); /** Add flags. * Use this function to add flags to member "flags" (see @ref AQFINTS_JOBDEF_flags) */ void AQFINTS_JobDef_SubFlags(AQFINTS_JOBDEF *p_struct, uint32_t p_src); /** Setter. * Use this function to set the member "id" (see @ref AQFINTS_JOBDEF_id) */ void AQFINTS_JobDef_SetId(AQFINTS_JOBDEF *p_struct, const char *p_src); /** Setter. * Use this function to set the member "code" (see @ref AQFINTS_JOBDEF_code) */ void AQFINTS_JobDef_SetCode(AQFINTS_JOBDEF *p_struct, const char *p_src); /** Setter. * Use this function to set the member "jobVersion" (see @ref AQFINTS_JOBDEF_jobVersion) */ void AQFINTS_JobDef_SetJobVersion(AQFINTS_JOBDEF *p_struct, int p_src); /** Setter. * Use this function to set the member "protocolVersion" (see @ref AQFINTS_JOBDEF_protocolVersion) */ void AQFINTS_JobDef_SetProtocolVersion(AQFINTS_JOBDEF *p_struct, int p_src); /** Setter. * Use this function to set the member "paramsSegmentCode" (see @ref AQFINTS_JOBDEF_paramsSegmentCode) */ void AQFINTS_JobDef_SetParamsSegmentCode(AQFINTS_JOBDEF *p_struct, const char *p_src); /** Setter. * Use this function to set the member "responseSegmentCode" (see @ref AQFINTS_JOBDEF_responseSegmentCode) */ void AQFINTS_JobDef_SetResponseSegmentCode(AQFINTS_JOBDEF *p_struct, const char *p_src); /** Setter. * Use this function to set the member "neededSignatures" (see @ref AQFINTS_JOBDEF_neededSignatures) */ void AQFINTS_JobDef_SetNeededSignatures(AQFINTS_JOBDEF *p_struct, int p_src); /** Setter. * Use this function to set the member "securityClass" (see @ref AQFINTS_JOBDEF_securityClass) */ void AQFINTS_JobDef_SetSecurityClass(AQFINTS_JOBDEF *p_struct, int p_src); /** Setter. * Use this function to set the member "runtimeFlags" (see @ref AQFINTS_JOBDEF_runtimeFlags) */ void AQFINTS_JobDef_SetRuntimeFlags(AQFINTS_JOBDEF *p_struct, uint32_t p_src); /** Add flags. * Use this function to add flags to member "runtimeFlags" (see @ref AQFINTS_JOBDEF_runtimeFlags) */ void AQFINTS_JobDef_AddRuntimeFlags(AQFINTS_JOBDEF *p_struct, uint32_t p_src); /** Add flags. * Use this function to add flags to member "runtimeFlags" (see @ref AQFINTS_JOBDEF_runtimeFlags) */ void AQFINTS_JobDef_SubRuntimeFlags(AQFINTS_JOBDEF *p_struct, uint32_t p_src); AQFINTS_JOBDEF_LIST *AQFINTS_JobDef_List_dup(const AQFINTS_JOBDEF_LIST *p_src); void AQFINTS_JobDef_ReadDb(AQFINTS_JOBDEF *p_struct, GWEN_DB_NODE *p_db); int AQFINTS_JobDef_WriteDb(const AQFINTS_JOBDEF *p_struct, GWEN_DB_NODE *p_db); AQFINTS_JOBDEF *AQFINTS_JobDef_fromDb(GWEN_DB_NODE *p_db); int AQFINTS_JobDef_toDb(const AQFINTS_JOBDEF *p_struct, GWEN_DB_NODE *p_db); AQFINTS_JOBDEF *AQFINTS_JobDef_List_GetById(const AQFINTS_JOBDEF_LIST *p_list, const char *p_cmp); AQFINTS_JOBDEF *AQFINTS_JobDef_List_GetByCode(const AQFINTS_JOBDEF_LIST *p_list, const char *p_cmp); AQFINTS_JOBDEF *AQFINTS_JobDef_List_GetByParamsSegmentCode(const AQFINTS_JOBDEF_LIST *p_list, const char *p_cmp); #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/parser/segment.h0000664000175000017500000002206615037736054024305 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "segment.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef AQFINTS_SEGMENT_SEGMENT_H #define AQFINTS_SEGMENT_SEGMENT_H #ifdef __cplusplus extern "C" { #endif /** @page P_AQFINTS_SEGMENT Structure AQFINTS_SEGMENT

This page describes the properties of AQFINTS_SEGMENT.

AQFINTS_SEGMENT

@anchor AQFINTS_SEGMENT_flags

flags

Set this property with @ref AQFINTS_Segment_SetFlags(), get it with @ref AQFINTS_Segment_GetFlags().

@anchor AQFINTS_SEGMENT_id

id

Set this property with @ref AQFINTS_Segment_SetId(), get it with @ref AQFINTS_Segment_GetId().

@anchor AQFINTS_SEGMENT_code

code

Set this property with @ref AQFINTS_Segment_SetCode(), get it with @ref AQFINTS_Segment_GetCode().

@anchor AQFINTS_SEGMENT_segmentVersion

segmentVersion

Set this property with @ref AQFINTS_Segment_SetSegmentVersion(), get it with @ref AQFINTS_Segment_GetSegmentVersion().

@anchor AQFINTS_SEGMENT_segmentNumber

segmentNumber

Set this property with @ref AQFINTS_Segment_SetSegmentNumber(), get it with @ref AQFINTS_Segment_GetSegmentNumber().

@anchor AQFINTS_SEGMENT_refSegmentNumber

refSegmentNumber

Set this property with @ref AQFINTS_Segment_SetRefSegmentNumber(), get it with @ref AQFINTS_Segment_GetRefSegmentNumber().

@anchor AQFINTS_SEGMENT_protocolVersion

protocolVersion

Set this property with @ref AQFINTS_Segment_SetProtocolVersion(), get it with @ref AQFINTS_Segment_GetProtocolVersion().

@anchor AQFINTS_SEGMENT_data

data

Set this property with @ref AQFINTS_Segment_SetData(), get it with @ref AQFINTS_Segment_GetData().

@anchor AQFINTS_SEGMENT_elements

elements

Set this property with @ref AQFINTS_Segment_SetElements(), get it with @ref AQFINTS_Segment_GetElements().

@anchor AQFINTS_SEGMENT_dbData

dbData

Set this property with @ref AQFINTS_Segment_SetDbData(), get it with @ref AQFINTS_Segment_GetDbData().

@anchor AQFINTS_SEGMENT_runtimeFlags

runtimeFlags

Set this property with @ref AQFINTS_Segment_SetRuntimeFlags(), get it with @ref AQFINTS_Segment_GetRuntimeFlags().

*/ /* define AQFINTS_SEGMENT_RTFLAGS */ #define AQFINTS_SEGMENT_RTFLAGS_PARSED 0x00000001 #define AQFINTS_SEGMENT_RTFLAGS_SIGNED 0x00000002 #define AQFINTS_SEGMENT_RTFLAGS_ENCRYPTED 0x00000004 #define AQFINTS_SEGMENT_RTFLAGS_HANDLED 0x00000008 /* define AQFINTS_SEGMENT_FLAGS */ #define AQFINTS_SEGMENT_FLAGS_CRYPT 0x00000001 #define AQFINTS_SEGMENT_FLAGS_SIGN 0x00000002 #define AQFINTS_SEGMENT_FLAGS_NEEDTAN 0x00000004 #define AQFINTS_SEGMENT_FLAGS_ISBPD 0x00000008 /* needed system headers */ #include #include #include /* pre-headers */ #include #include #include typedef struct AQFINTS_SEGMENT AQFINTS_SEGMENT; GWEN_LIST_FUNCTION_DEFS(AQFINTS_SEGMENT, AQFINTS_Segment) /* post-headers */ #include "libaqfints/parser/element.h" /** Constructor. */ AQFINTS_SEGMENT *AQFINTS_Segment_new(void); /** Destructor. */ void AQFINTS_Segment_free(AQFINTS_SEGMENT *p_struct); void AQFINTS_Segment_Attach(AQFINTS_SEGMENT *p_struct); AQFINTS_SEGMENT *AQFINTS_Segment_dup(const AQFINTS_SEGMENT *p_src); AQFINTS_SEGMENT *AQFINTS_Segment_copy(AQFINTS_SEGMENT *p_struct, const AQFINTS_SEGMENT *p_src); /** Getter. * Use this function to get the member "flags" (see @ref AQFINTS_SEGMENT_flags) */ uint32_t AQFINTS_Segment_GetFlags(const AQFINTS_SEGMENT *p_struct); /** Getter. * Use this function to get the member "id" (see @ref AQFINTS_SEGMENT_id) */ const char *AQFINTS_Segment_GetId(const AQFINTS_SEGMENT *p_struct); /** Getter. * Use this function to get the member "code" (see @ref AQFINTS_SEGMENT_code) */ const char *AQFINTS_Segment_GetCode(const AQFINTS_SEGMENT *p_struct); /** Getter. * Use this function to get the member "segmentVersion" (see @ref AQFINTS_SEGMENT_segmentVersion) */ int AQFINTS_Segment_GetSegmentVersion(const AQFINTS_SEGMENT *p_struct); /** Getter. * Use this function to get the member "segmentNumber" (see @ref AQFINTS_SEGMENT_segmentNumber) */ int AQFINTS_Segment_GetSegmentNumber(const AQFINTS_SEGMENT *p_struct); /** Getter. * Use this function to get the member "refSegmentNumber" (see @ref AQFINTS_SEGMENT_refSegmentNumber) */ int AQFINTS_Segment_GetRefSegmentNumber(const AQFINTS_SEGMENT *p_struct); /** Getter. * Use this function to get the member "protocolVersion" (see @ref AQFINTS_SEGMENT_protocolVersion) */ int AQFINTS_Segment_GetProtocolVersion(const AQFINTS_SEGMENT *p_struct); /** Getter. * Use this function to get the member "elements" (see @ref AQFINTS_SEGMENT_elements) */ AQFINTS_ELEMENT *AQFINTS_Segment_GetElements(const AQFINTS_SEGMENT *p_struct); /** Getter. * Use this function to get the member "dbData" (see @ref AQFINTS_SEGMENT_dbData) */ GWEN_DB_NODE *AQFINTS_Segment_GetDbData(const AQFINTS_SEGMENT *p_struct); /** Getter. * Use this function to get the member "runtimeFlags" (see @ref AQFINTS_SEGMENT_runtimeFlags) */ uint32_t AQFINTS_Segment_GetRuntimeFlags(const AQFINTS_SEGMENT *p_struct); /** Setter. * Use this function to set the member "flags" (see @ref AQFINTS_SEGMENT_flags) */ void AQFINTS_Segment_SetFlags(AQFINTS_SEGMENT *p_struct, uint32_t p_src); /** Add flags. * Use this function to add flags to member "flags" (see @ref AQFINTS_SEGMENT_flags) */ void AQFINTS_Segment_AddFlags(AQFINTS_SEGMENT *p_struct, uint32_t p_src); /** Add flags. * Use this function to add flags to member "flags" (see @ref AQFINTS_SEGMENT_flags) */ void AQFINTS_Segment_SubFlags(AQFINTS_SEGMENT *p_struct, uint32_t p_src); /** Setter. * Use this function to set the member "id" (see @ref AQFINTS_SEGMENT_id) */ void AQFINTS_Segment_SetId(AQFINTS_SEGMENT *p_struct, const char *p_src); /** Setter. * Use this function to set the member "code" (see @ref AQFINTS_SEGMENT_code) */ void AQFINTS_Segment_SetCode(AQFINTS_SEGMENT *p_struct, const char *p_src); /** Setter. * Use this function to set the member "segmentVersion" (see @ref AQFINTS_SEGMENT_segmentVersion) */ void AQFINTS_Segment_SetSegmentVersion(AQFINTS_SEGMENT *p_struct, int p_src); /** Setter. * Use this function to set the member "segmentNumber" (see @ref AQFINTS_SEGMENT_segmentNumber) */ void AQFINTS_Segment_SetSegmentNumber(AQFINTS_SEGMENT *p_struct, int p_src); /** Setter. * Use this function to set the member "refSegmentNumber" (see @ref AQFINTS_SEGMENT_refSegmentNumber) */ void AQFINTS_Segment_SetRefSegmentNumber(AQFINTS_SEGMENT *p_struct, int p_src); /** Setter. * Use this function to set the member "protocolVersion" (see @ref AQFINTS_SEGMENT_protocolVersion) */ void AQFINTS_Segment_SetProtocolVersion(AQFINTS_SEGMENT *p_struct, int p_src); /** Setter. * Use this function to set the member "elements" (see @ref AQFINTS_SEGMENT_elements) */ void AQFINTS_Segment_SetElements(AQFINTS_SEGMENT *p_struct, AQFINTS_ELEMENT *p_src); /** Setter. * Use this function to set the member "dbData" (see @ref AQFINTS_SEGMENT_dbData) */ void AQFINTS_Segment_SetDbData(AQFINTS_SEGMENT *p_struct, GWEN_DB_NODE *p_src); /** Setter. * Use this function to set the member "runtimeFlags" (see @ref AQFINTS_SEGMENT_runtimeFlags) */ void AQFINTS_Segment_SetRuntimeFlags(AQFINTS_SEGMENT *p_struct, uint32_t p_src); /** Add flags. * Use this function to add flags to member "runtimeFlags" (see @ref AQFINTS_SEGMENT_runtimeFlags) */ void AQFINTS_Segment_AddRuntimeFlags(AQFINTS_SEGMENT *p_struct, uint32_t p_src); /** Add flags. * Use this function to add flags to member "runtimeFlags" (see @ref AQFINTS_SEGMENT_runtimeFlags) */ void AQFINTS_Segment_SubRuntimeFlags(AQFINTS_SEGMENT *p_struct, uint32_t p_src); AQFINTS_SEGMENT_LIST *AQFINTS_Segment_List_dup(const AQFINTS_SEGMENT_LIST *p_src); void AQFINTS_Segment_ReadDb(AQFINTS_SEGMENT *p_struct, GWEN_DB_NODE *p_db); int AQFINTS_Segment_WriteDb(const AQFINTS_SEGMENT *p_struct, GWEN_DB_NODE *p_db); AQFINTS_SEGMENT *AQFINTS_Segment_fromDb(GWEN_DB_NODE *p_db); int AQFINTS_Segment_toDb(const AQFINTS_SEGMENT *p_struct, GWEN_DB_NODE *p_db); AQFINTS_SEGMENT *AQFINTS_Segment_List_GetByCode(const AQFINTS_SEGMENT_LIST *p_list, const char *p_cmp); AQFINTS_SEGMENT *AQFINTS_Segment_List_GetBySegmentNumber(const AQFINTS_SEGMENT_LIST *p_list, int p_cmp); void AQFINTS_Segment_SetData(AQFINTS_SEGMENT *st, uint8_t *ptr, uint32_t len); void AQFINTS_Segment_SetDataAsCopy(AQFINTS_SEGMENT *st, const uint8_t *ptr, uint32_t len); uint8_t* AQFINTS_Segment_GetDataPointer(const AQFINTS_SEGMENT *st); uint32_t AQFINTS_Segment_GetDataLength(const AQFINTS_SEGMENT *st); uint32_t AQFINTS_Segment_List_SampleFlags(const AQFINTS_SEGMENT_LIST *stl); uint32_t AQFINTS_Segment_List_SampleSizes(const AQFINTS_SEGMENT_LIST *stl); void AQFINTS_Segment_List_SampleBuffers(const AQFINTS_SEGMENT_LIST *segmentList, GWEN_BUFFER *destBuf); #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/parser/parser_dbread.c0000664000175000017500000003402414044534775025433 00000000000000/*************************************************************************** begin : Sun Jul 07 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "libaqfints/parser/parser_dbread.h" #include "libaqfints/parser/parser_dump.h" #include "libaqfints/parser/parser_internal.h" #include /* ------------------------------------------------------------------------------------------------ * forward declarations * ------------------------------------------------------------------------------------------------ */ static int readDe(AQFINTS_ELEMENT *elementDefinition, AQFINTS_ELEMENT **pElementData, GWEN_DB_NODE *db); static int readDeSequence(AQFINTS_ELEMENT *elementDefinition, AQFINTS_ELEMENT **pElementData, GWEN_DB_NODE *db); static int readDeg(AQFINTS_ELEMENT *elementDefinition, AQFINTS_ELEMENT **pElementData, GWEN_DB_NODE *db); static int readDeGroup(AQFINTS_ELEMENT *elementDefinition, AQFINTS_ELEMENT **pElementData, GWEN_DB_NODE *db); static int readDegSequence(AQFINTS_ELEMENT *elementDefinition, AQFINTS_ELEMENT **pElementData, GWEN_DB_NODE *db); static int readSeg(AQFINTS_ELEMENT *elementDefinition, AQFINTS_ELEMENT *elementData, GWEN_DB_NODE *db); /* ------------------------------------------------------------------------------------------------ * implementations * ------------------------------------------------------------------------------------------------ */ int AQFINTS_Parser_Db_ReadSegment(AQFINTS_SEGMENT *definitionSegment, AQFINTS_SEGMENT *dataSegment, GWEN_DB_NODE *db) { AQFINTS_ELEMENT *elementDefinition; AQFINTS_ELEMENT *elementData; int rv; elementDefinition=AQFINTS_Segment_GetElements(definitionSegment); elementData=AQFINTS_Segment_GetElements(dataSegment); rv=readSeg(elementDefinition, elementData, db); if (rv<0) { DBG_INFO(AQFINTS_PARSER_LOGDOMAIN, "here (%d)", rv); return rv; } return 0; } int readSeg(AQFINTS_ELEMENT *elementDefinition, AQFINTS_ELEMENT *elementData, GWEN_DB_NODE *db) { const char *sDbName; sDbName=AQFINTS_Element_GetName(elementDefinition); if (elementData) { AQFINTS_ELEMENT *childDefinitionData; AQFINTS_ELEMENT *childElementData; int rv; GWEN_DB_NODE *dbForDeg; childDefinitionData=AQFINTS_Element_Tree2_GetFirstChild(elementDefinition); if (childDefinitionData==NULL) { DBG_ERROR(AQFINTS_PARSER_LOGDOMAIN, "DEG Definition has no children"); return GWEN_ERROR_BAD_DATA; } childElementData=AQFINTS_Element_Tree2_GetFirstChild(elementData); if (childElementData==NULL) { DBG_ERROR(AQFINTS_PARSER_LOGDOMAIN, "DEG Data has no children"); return GWEN_ERROR_BAD_DATA; } if (sDbName && *sDbName) dbForDeg=GWEN_DB_GetGroup(db, GWEN_PATH_FLAGS_CREATE_GROUP, sDbName); else dbForDeg=db; rv=readDegSequence(childDefinitionData, &childElementData, dbForDeg); if (rv<0) { DBG_INFO(AQFINTS_PARSER_LOGDOMAIN, "here (%d)", rv); return rv; } if (childElementData) { DBG_ERROR(AQFINTS_PARSER_LOGDOMAIN, "Too many data elements for definition element \"%s\"", sDbName?sDbName:"unnamed"); return GWEN_ERROR_BAD_DATA; } } else { DBG_ERROR(AQFINTS_PARSER_LOGDOMAIN, "No data elements for definition element \"%s\"", sDbName?sDbName:"unnamed"); return GWEN_ERROR_BAD_DATA; } return 0; } int readDegSequence(AQFINTS_ELEMENT *elementDefinition, AQFINTS_ELEMENT **pElementData, GWEN_DB_NODE *db) { AQFINTS_ELEMENT *elementData; elementData=*pElementData; while (elementDefinition) { const char *sDbName; int minNum; sDbName=AQFINTS_Element_GetName(elementDefinition); minNum=AQFINTS_Element_GetMinNum(elementDefinition); if (AQFINTS_Element_GetElementType(elementDefinition)==AQFINTS_ElementType_Group) { AQFINTS_ELEMENT *childElementDefinition; childElementDefinition=AQFINTS_Element_Tree2_GetFirstChild(elementDefinition); if (childElementDefinition) { const char *sDbName; GWEN_DB_NODE *dbForGroup; int rv; sDbName=AQFINTS_Element_GetName(elementDefinition); if (sDbName && *sDbName) dbForGroup=GWEN_DB_GetGroup(db, GWEN_PATH_FLAGS_CREATE_GROUP, sDbName); else dbForGroup=db; rv=readDegSequence(childElementDefinition, &elementData, dbForGroup); if (rv<0) { DBG_INFO(AQFINTS_PARSER_LOGDOMAIN, "here (%d)", rv); return rv; } } } /* if group */ else { int rv; if (elementData) { rv=readDeg(elementDefinition, &elementData, db); if (rv<0) { DBG_INFO(AQFINTS_PARSER_LOGDOMAIN, "here (%d)", rv); return rv; } } else { if (minNum>0) { DBG_ERROR(AQFINTS_PARSER_LOGDOMAIN, "Too few data elements for definition element \"%s\"", sDbName?sDbName:"unnamed"); AQFINTS_Parser_DumpContext(elementDefinition, elementData, NULL, 2); return GWEN_ERROR_BAD_DATA; } } } /* if not group */ elementDefinition=AQFINTS_Element_Tree2_GetNext(elementDefinition); } /* while */ *pElementData=elementData; return 0; } int readDeg(AQFINTS_ELEMENT *elementDefinition, AQFINTS_ELEMENT **pElementData, GWEN_DB_NODE *db) { AQFINTS_ELEMENT *elementData; int idx=0; int minNum; int maxNum; const char *sDbName; const char *sType; elementData=*pElementData; sDbName=AQFINTS_Element_GetName(elementDefinition); minNum=AQFINTS_Element_GetMinNum(elementDefinition); maxNum=AQFINTS_Element_GetMaxNum(elementDefinition); sType=AQFINTS_Element_GetType(elementDefinition); DBG_INFO(AQFINTS_PARSER_LOGDOMAIN, "Reading DEG (name=%s, type=%s)", sDbName?sDbName:"(unnamed)", sType?sType:"(unnamed)"); while (elementData) { AQFINTS_ELEMENT *childElementData; DBG_INFO(AQFINTS_PARSER_LOGDOMAIN, "Reading DEG %d (name=%s, type=%s)", idx, sDbName?sDbName:"(unnamed)", sType?sType:"(unnamed)"); /*AQFINTS_Parser_DumpContext(elementDefinition, elementData, NULL, 2);*/ childElementData=AQFINTS_Element_Tree2_GetFirstChild(elementData); if (childElementData==NULL) { DBG_INFO(AQFINTS_PARSER_LOGDOMAIN, "DEG Data has no children, checking for fillers"); if (maxNum) { int j; /* empty element, and there is a maxnum, so these might be fillers */ for (j=idx; j=maxNum) break; } if (minNum && idx=maxNum) break; } if (minNum && idx0) { DBG_ERROR(AQFINTS_PARSER_LOGDOMAIN, "Too few data elements for definition element \"%s\"", sDbName?sDbName:"unnamed"); AQFINTS_Parser_DumpContext(elementDefinition, elementData, db, 2); return GWEN_ERROR_BAD_DATA; } } } /* if not group */ elementDefinition=AQFINTS_Element_Tree2_GetNext(elementDefinition); } /* while */ *pElementData=elementData; return 0; } int readDe(AQFINTS_ELEMENT *elementDefinition, AQFINTS_ELEMENT **pElementData, GWEN_DB_NODE *db) { AQFINTS_ELEMENT *elementData; int idx=0; int minNum; int maxNum; const char *sDbName; const char *sType; elementData=*pElementData; sDbName=AQFINTS_Element_GetName(elementDefinition); sType=AQFINTS_Element_GetType(elementDefinition); minNum=AQFINTS_Element_GetMinNum(elementDefinition); maxNum=AQFINTS_Element_GetMaxNum(elementDefinition); DBG_INFO(AQFINTS_PARSER_LOGDOMAIN, "Reading DE (name=%s)", sDbName?sDbName:"(unnamed)"); while (elementData) { if (sDbName && *sDbName) { if (AQFINTS_Parser_IsCharType(sType)) { const char *sData; sData=AQFINTS_Element_GetDataAsChar(elementData, NULL); if (sData && *sData) { // TODO: check limits DBG_INFO(AQFINTS_PARSER_LOGDOMAIN, "Read char value %s", sData); GWEN_DB_SetCharValue(db, 0, sDbName, sData); } } else if (AQFINTS_Parser_IsIntType(sType)) { GWEN_DB_SetIntValue(db, 0, sDbName, AQFINTS_Element_GetDataAsInt(elementData, 0)); } else if (AQFINTS_Parser_IsBinType(sType)) { const uint8_t *val; uint32_t valSize; val=AQFINTS_Element_GetDataPointer(elementData); valSize=AQFINTS_Element_GetDataLength(elementData); if (val && valSize) GWEN_DB_SetBinValue(db, 0, sDbName, (const void *) val, valSize); } else { DBG_ERROR(AQFINTS_PARSER_LOGDOMAIN, "Unknown data type \"%s\"", sType); return GWEN_ERROR_BAD_DATA; } } elementData=AQFINTS_Element_Tree2_GetNext(elementData); idx++; if (maxNum && idx>=maxNum) break; } DBG_INFO(AQFINTS_PARSER_LOGDOMAIN, "Read DE %d times (name=%s, ptr=%p)", idx, sDbName?sDbName:"(unnamed)", (void *)elementData); if (minNum && idx void AQFINTS_Parser_SegmentList_ResolveGroups(AQFINTS_SEGMENT_LIST *segmentList, AQFINTS_ELEMENT *groupTree); void AQFINTS_Parser_SegmentList_Normalize(AQFINTS_SEGMENT_LIST *segmentList); void AQFINTS_Parser_Segment_RemoveTrailingEmptyElements(AQFINTS_SEGMENT *segment); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/parser/aqfints_segment.tm20000664000175000017500000000030415037736054026274 00000000000000 AQFINTS_SEGMENT AQFINTS_Segment aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/README0000664000175000017500000000177414043610745022053 00000000000000AqFinTS Backend This module was created in an attempt to create a test HBCI server, because it is not easy to get supported access to HBCI test servers at banks. This module is generic regarding its usability for client and server libraries/apps. The idea is to reuse the code for client and server code which may lead to a new FINTS module in the process. This module is shared across AqBanking and AqBankServers. parser ------ This folder contains the HBCI encoder/decoder. msglayer -------- Code to organize segments into messages. servicelayer ------------ The module in this folder makes use of the HBCI codec and defines segments and jobs pertaining to the HBCI/FinTS protocol. sessionlayer ------------ Code in this folder handles encoding and decoding messages of the HBCI protocol including handling of the cryptographic mechanisms defined by that protocol (e.g. signing and encryption). transportlayer -------------- This layer contains code for exchanging messages between clients and servers. aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/session/0000755000175000017500000000000015037736161022730 500000000000000aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/session/s_message.h0000664000175000017500000000167414044534775025005 00000000000000/*************************************************************************** begin : Sat Aug 03 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQFINTS_SESSION_MESSAGE_H #define AQFINTS_SESSION_MESSAGE_H #include "libaqfints/session/session.h" #include "libaqfints/parser/segment.h" int AQFINTS_Session_WrapMessageHeadAndTail(AQFINTS_SESSION *sess, AQFINTS_SEGMENT_LIST *segmentList, const char *dialogId, int msgNum, int refMsgNum, int lastSegNum); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/session/session.h0000664000175000017500000002656214044534775024525 00000000000000/*************************************************************************** begin : Thu Aug 01 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQFINTS_SESSION_H #define AQFINTS_SESSION_H #include "libaqfints/aqfints.h" #include "libaqfints/msg/message.h" #include "libaqfints/msg/keydescr.h" #include "libaqfints/parser/parser.h" #include "libaqfints/transport/transport.h" #include "libaqfints/service/upd/userdata.h" #include "libaqfints/service/bpd/bpd.h" #include "libaqfints/session/cryptparams.h" #include #include #include #include #include #include #include typedef struct AQFINTS_SESSION AQFINTS_SESSION; GWEN_INHERIT_FUNCTION_DEFS(AQFINTS_SESSION) enum { AQFINTS_SESSION_CRYPTOP_UNKNOWN=-1, AQFINTS_SESSION_CRYPTOP_NONE, AQFINTS_SESSION_CRYPTOP_SIGN, AQFINTS_SESSION_CRYPTOP_ENCRYPT, AQFINTS_SESSION_CRYPTOP_AUTH, }; /** @name Definitions for virtual functions * */ /*@{*/ /* definitions for virtual functions (post) */ typedef AQFINTS_MESSAGE *GWENHYWFAR_CB(*AQFINTS_SESSION_EXCHANGEMESSAGES_FN)(AQFINTS_SESSION *sess, AQFINTS_MESSAGE *messageOut); typedef int GWENHYWFAR_CB(*AQFINTS_SESSION_FILLOUT_KEYDESCR_FN)(AQFINTS_SESSION *sess, AQFINTS_KEYDESCR *keyDescr, int mode); typedef int GWENHYWFAR_CB(*AQFINTS_SESSION_DECRYPT_SKEY_FN)(AQFINTS_SESSION *sess, const AQFINTS_KEYDESCR *keyDescr, const AQFINTS_CRYPTPARAMS *cryptParams, const uint8_t *pInData, uint32_t inLen, uint8_t *pOutData, uint32_t *pOutLen); typedef int GWENHYWFAR_CB(*AQFINTS_SESSION_ENCRYPT_SKEY_FN)(AQFINTS_SESSION *sess, const AQFINTS_KEYDESCR *keyDescr, const AQFINTS_CRYPTPARAMS *cryptParams, const uint8_t *pInData, uint32_t inLen, uint8_t *pOutData, uint32_t *pOutLen); typedef int GWENHYWFAR_CB(*AQFINTS_SESSION_SIGN_FN)(AQFINTS_SESSION *sess, const AQFINTS_KEYDESCR *keyDescr, const AQFINTS_CRYPTPARAMS *cryptParams, const uint8_t *pInData, uint32_t inLen, uint8_t *pSignatureData, uint32_t *pSignatureLen); /** * GWEN_ERROR_TRY_AGAIN: retry after handling the message */ typedef int GWENHYWFAR_CB(*AQFINTS_SESSION_VERIFY_FN)(AQFINTS_SESSION *sess, const AQFINTS_KEYDESCR *keyDescr, const AQFINTS_CRYPTPARAMS *cryptParams, const uint8_t *pInData, uint32_t inLen, const uint8_t *pSignatureData, uint32_t signatureLen, uint32_t seqCounter); typedef int GWENHYWFAR_CB(*AQFINTS_SESSION_VERIFYPIN_FN)(AQFINTS_SESSION *sess, const AQFINTS_KEYDESCR *keyDescr, const char *pin); /*@}*/ /** @name Constructor, destructor * */ /*@{*/ AQFINTS_SESSION *AQFINTS_Session_new(AQFINTS_PARSER *parser, AQFINTS_TRANSPORT *trans); void AQFINTS_Session_free(AQFINTS_SESSION *sess); void AQFINTS_Session_Attach(AQFINTS_SESSION *sess); /*@}*/ /** @name Variables to set before working with sessions * */ /*@{*/ int AQFINTS_Session_GetHbciVersion(const AQFINTS_SESSION *sess); void AQFINTS_Session_SetHbciVersion(AQFINTS_SESSION *sess, int v); int AQFINTS_Session_GetIsServer(const AQFINTS_SESSION *sess); void AQFINTS_Session_SetIsServer(AQFINTS_SESSION *sess, int v); /*@}*/ /** @name Variables set when parsing received messages * */ /*@{*/ const char *AQFINTS_Session_GetDialogId(const AQFINTS_SESSION *sess); void AQFINTS_Session_SetDialogId(AQFINTS_SESSION *sess, const char *s); /*@}*/ /** @name Internal functions to be used by the various session submodules * */ /*@{*/ AQFINTS_PARSER *AQFINTS_Session_GetParser(const AQFINTS_SESSION *sess); int AQFINTS_Session_GetLastMessageNumSent(const AQFINTS_SESSION *sess); void AQFINTS_Session_SetLastMessageNumSent(AQFINTS_SESSION *sess, int p_src); int AQFINTS_Session_GetLastMessageNumReceived(const AQFINTS_SESSION *sess); void AQFINTS_Session_SetLastMessageNumReceived(AQFINTS_SESSION *sess, int p_src); /*@}*/ /** @name Sending, Receiving * */ /*@{*/ int AQFINTS_Session_Connect(AQFINTS_SESSION *sess); int AQFINTS_Session_Disconnect(AQFINTS_SESSION *sess); /** * @return message received (or NULL on error) * @param sess session pointer * @param messageOut Pointer to a message to be sent */ AQFINTS_MESSAGE *AQFINTS_Session_ExchangeMessages(AQFINTS_SESSION *sess, AQFINTS_MESSAGE *messageOut); AQFINTS_MESSAGE *AQFINTS_Session_DirectlyExchangeMessages(AQFINTS_SESSION *sess, AQFINTS_MESSAGE *messageOut); int AQFINTS_Session_SendMessage(AQFINTS_SESSION *sess, const char *ptrBuffer, int lenBuffer); int AQFINTS_Session_ReceiveMessage(AQFINTS_SESSION *sess, GWEN_BUFFER *buffer); /*@}*/ /** @name Cryptographic Functions * */ /*@{*/ int AQFINTS_Session_FilloutKeyname(AQFINTS_SESSION *sess, AQFINTS_KEYDESCR *keyDescr, int mode); int AQFINTS_Session_DecryptSessionKey(AQFINTS_SESSION *sess, const AQFINTS_KEYDESCR *keyDescr, const AQFINTS_CRYPTPARAMS *cryptParams, const uint8_t *pInData, uint32_t inLen, uint8_t *pOutData, uint32_t *pOutLen); int AQFINTS_Session_EncryptSessionKey(AQFINTS_SESSION *sess, const AQFINTS_KEYDESCR *keyDescr, const AQFINTS_CRYPTPARAMS *cryptParams, const uint8_t *pInData, uint32_t inLen, uint8_t *pOutData, uint32_t *pOutLen); int AQFINTS_Session_VerifyPin(AQFINTS_SESSION *sess, const AQFINTS_KEYDESCR *keyDescr, const char *pin); int AQFINTS_Session_Sign(AQFINTS_SESSION *sess, const AQFINTS_KEYDESCR *keyDescr, const AQFINTS_CRYPTPARAMS *cryptParams, const uint8_t *pInData, uint32_t inLen, uint8_t *pSignatureData, uint32_t *pSignatureLen); /** * * @return GWEN_ERROR_TRY_AGAIN if the sign key is not yet available, 0 if okay, error code otherwise */ int AQFINTS_Session_Verify(AQFINTS_SESSION *sess, const AQFINTS_KEYDESCR *keyDescr, const AQFINTS_CRYPTPARAMS *cryptParams, const uint8_t *pInData, uint32_t inLen, const uint8_t *pSignatureData, uint32_t signatureLen, uint32_t seqCounter); /*@}*/ /** @name Setters for virtual functions * */ /*@{*/ AQFINTS_SESSION_EXCHANGEMESSAGES_FN AQFINTS_Session_SetExchangeMessagesFn(AQFINTS_SESSION *sess, AQFINTS_SESSION_EXCHANGEMESSAGES_FN fn); AQFINTS_SESSION_DECRYPT_SKEY_FN AQFINTS_Session_SetDecryptSessionKeyFn(AQFINTS_SESSION *sess, AQFINTS_SESSION_DECRYPT_SKEY_FN fn); AQFINTS_SESSION_ENCRYPT_SKEY_FN AQFINTS_Session_SetEncryptSessionKeyFn(AQFINTS_SESSION *sess, AQFINTS_SESSION_ENCRYPT_SKEY_FN fn); AQFINTS_SESSION_VERIFYPIN_FN AQFINTS_Session_SetVerifyPinFn(AQFINTS_SESSION *sess, AQFINTS_SESSION_VERIFYPIN_FN fn); AQFINTS_SESSION_FILLOUT_KEYDESCR_FN AQFINTS_Session_SetFilloutKeynameFn(AQFINTS_SESSION *sess, AQFINTS_SESSION_FILLOUT_KEYDESCR_FN fn); AQFINTS_SESSION_SIGN_FN AQFINTS_Session_SetSignFn(AQFINTS_SESSION *sess, AQFINTS_SESSION_SIGN_FN fn); AQFINTS_SESSION_VERIFY_FN AQFINTS_Session_SetVerifyFn(AQFINTS_SESSION *sess, AQFINTS_SESSION_VERIFY_FN fn); /*@}*/ /** @name Internal functions * */ /*@{*/ int AQFINTS_Session_WriteSegmentList(AQFINTS_SESSION *sess, AQFINTS_SEGMENT_LIST *segmentList); int AQFINTS_Session_WriteSegment(AQFINTS_SESSION *sess, AQFINTS_SEGMENT *segment); AQFINTS_BPD *AQFINTS_Session_ExtractBpdFromSegmentList(AQFINTS_SESSION *sess, AQFINTS_SEGMENT_LIST *segmentList); AQFINTS_USERDATA_LIST *AQFINTS_Session_ExtractUpdFromSegmentList(AQFINTS_SESSION *sess, AQFINTS_SEGMENT_LIST *segmentList); /** * Returns the number of TAN methods added. */ int AQFINTS_Session_SampleAllowedTanMethods(int *ptrIntArray, int sizeIntArray, AQFINTS_SEGMENT_LIST *segmentList); int AQFINTS_Session_SampleDataToHash(AQFINTS_SEGMENT *segSigHead, AQFINTS_SEGMENT *segFirstToSign, AQFINTS_SEGMENT *segLastToSign, GWEN_BUFFER *destBuf); void AQFINTS_Session_LogMessage(AQFINTS_SESSION *sess, const uint8_t *ptrLogData, uint32_t lenLogData, int rec, int crypt); int AQFINTS_Session_GetAnonBpd(AQFINTS_SESSION *sess, const char *bankCode, AQFINTS_BPD **pBpd); const char *AQFINTS_Session_GetLogFile(const AQFINTS_SESSION *sess); void AQFINTS_Session_SetLogFile(AQFINTS_SESSION *sess, const char *s); const char *AQFINTS_Session_GetAppRegKey(const AQFINTS_SESSION *sess); void AQFINTS_Session_SetAppRegKey(AQFINTS_SESSION *sess, const char *s); const char *AQFINTS_Session_GetAppVersion(const AQFINTS_SESSION *sess); void AQFINTS_Session_SetAppVersion(AQFINTS_SESSION *sess, const char *s); /*@}*/ #endif aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/session/s_sign.h0000664000175000017500000000133314044534775024311 00000000000000/*************************************************************************** begin : Sun Oct 27 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQFINTS_SESSION_SIGN_H #define AQFINTS_SESSION_SIGN_H #include "libaqfints/session/session.h" #include "libaqfints/msg/message.h" int AQFINTS_Session_SignMessage(AQFINTS_SESSION *sess, AQFINTS_MESSAGE *message); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/session/cryptparams.h0000664000175000017500000002314515037736055025377 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "cryptparams.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef AQFINTS_CRYPTPARAMS_CRYPTPARAMS_H #define AQFINTS_CRYPTPARAMS_CRYPTPARAMS_H #ifdef __cplusplus extern "C" { #endif /** @page P_AQFINTS_CRYPTPARAMS Structure AQFINTS_CRYPTPARAMS

This page describes the properties of AQFINTS_CRYPTPARAMS.

AQFINTS_CRYPTPARAMS

@anchor AQFINTS_CRYPTPARAMS_securityProfileName

securityProfileName

Set this property with @ref AQFINTS_CryptParams_SetSecurityProfileName(), get it with @ref AQFINTS_CryptParams_GetSecurityProfileName().

@anchor AQFINTS_CRYPTPARAMS_securityProfileVersion

securityProfileVersion

Set this property with @ref AQFINTS_CryptParams_SetSecurityProfileVersion(), get it with @ref AQFINTS_CryptParams_GetSecurityProfileVersion().

@anchor AQFINTS_CRYPTPARAMS_signAlgo

signAlgo

Set this property with @ref AQFINTS_CryptParams_SetSignAlgo(), get it with @ref AQFINTS_CryptParams_GetSignAlgo().

@anchor AQFINTS_CRYPTPARAMS_opModeSign

opModeSign

Set this property with @ref AQFINTS_CryptParams_SetOpModeSign(), get it with @ref AQFINTS_CryptParams_GetOpModeSign().

@anchor AQFINTS_CRYPTPARAMS_opModeAuth

opModeAuth

Set this property with @ref AQFINTS_CryptParams_SetOpModeAuth(), get it with @ref AQFINTS_CryptParams_GetOpModeAuth().

@anchor AQFINTS_CRYPTPARAMS_sigUsage

sigUsage

Set this property with @ref AQFINTS_CryptParams_SetSigUsage(), get it with @ref AQFINTS_CryptParams_GetSigUsage().

@anchor AQFINTS_CRYPTPARAMS_hashAlgoSign

hashAlgoSign

Set this property with @ref AQFINTS_CryptParams_SetHashAlgoSign(), get it with @ref AQFINTS_CryptParams_GetHashAlgoSign().

@anchor AQFINTS_CRYPTPARAMS_hashAlgoAuth

hashAlgoAuth

Set this property with @ref AQFINTS_CryptParams_SetHashAlgoAuth(), get it with @ref AQFINTS_CryptParams_GetHashAlgoAuth().

@anchor AQFINTS_CRYPTPARAMS_cryptAlgo

cryptAlgo

Set this property with @ref AQFINTS_CryptParams_SetCryptAlgo(), get it with @ref AQFINTS_CryptParams_GetCryptAlgo().

@anchor AQFINTS_CRYPTPARAMS_opModeCrypt

opModeCrypt

Set this property with @ref AQFINTS_CryptParams_SetOpModeCrypt(), get it with @ref AQFINTS_CryptParams_GetOpModeCrypt().

*/ /* needed system headers */ #include /* pre-headers */ #include #include typedef struct AQFINTS_CRYPTPARAMS AQFINTS_CRYPTPARAMS; typedef enum { AQFINTS_CryptParams_OpModeUnknown = -1, AQFINTS_CryptParams_OpModeNone = 0, AQFINTS_CryptParams_OpModeCbc = 2, AQFINTS_CryptParams_OpModeIso9796_1 = 16, AQFINTS_CryptParams_OpModeIso9796_2 = 17, AQFINTS_CryptParams_OpModeRsa_Pkcs1_v1_5 = 18, AQFINTS_CryptParams_OpModeRsa_Pss = 19, AQFINTS_CryptParams_OpModeRetail_MAC = 999 } AQFINTS_CRYPTPARAMS_OPMODE; typedef enum { AQFINTS_CryptParams_HashAlgoUnknown = -1, AQFINTS_CryptParams_HashAlgoNone = 0, AQFINTS_CryptParams_HashAlgoSha1 = 1, AQFINTS_CryptParams_HashAlgoSha256 = 3, AQFINTS_CryptParams_HashAlgoSha256sha256 = 6, AQFINTS_CryptParams_HashAlgoRipeMd160 = 999 } AQFINTS_CRYPTPARAMS_HASHALGO; typedef enum { AQFINTS_CryptParams_SignAlgoUnknown = -1, AQFINTS_CryptParams_SignAlgoNone = 0, AQFINTS_CryptParams_SignAlgoDes = 1, AQFINTS_CryptParams_SignAlgoRsa = 10 } AQFINTS_CRYPTPARAMS_SIGNALGO; typedef enum { AQFINTS_CryptParams_CryptAlgoUnknown = -1, AQFINTS_CryptParams_CryptAlgoNone = 0, AQFINTS_CryptParams_CryptAlgoTwoKeyTripleDes = 13, AQFINTS_CryptParams_CryptAlgoAes256 = 14 } AQFINTS_CRYPTPARAMS_CRYPTALGO; typedef enum { AQFINTS_CryptParams_SigUsageUnknown = -1, AQFINTS_CryptParams_SigUsageNone = 0, AQFINTS_CryptParams_SigUsageOwnerSigning = 6 } AQFINTS_CRYPTPARAMS_SIGUSAGE; /* post-headers */ AQFINTS_CRYPTPARAMS_OPMODE AQFINTS_CryptParams_OpMode_fromString(const char *p_s); AQFINTS_CRYPTPARAMS_HASHALGO AQFINTS_CryptParams_HashAlgo_fromString(const char *p_s); AQFINTS_CRYPTPARAMS_SIGNALGO AQFINTS_CryptParams_SignAlgo_fromString(const char *p_s); AQFINTS_CRYPTPARAMS_CRYPTALGO AQFINTS_CryptParams_CryptAlgo_fromString(const char *p_s); AQFINTS_CRYPTPARAMS_SIGUSAGE AQFINTS_CryptParams_SigUsage_fromString(const char *p_s); const char *AQFINTS_CryptParams_OpMode_toString(AQFINTS_CRYPTPARAMS_OPMODE p_i); const char *AQFINTS_CryptParams_HashAlgo_toString(AQFINTS_CRYPTPARAMS_HASHALGO p_i); const char *AQFINTS_CryptParams_SignAlgo_toString(AQFINTS_CRYPTPARAMS_SIGNALGO p_i); const char *AQFINTS_CryptParams_CryptAlgo_toString(AQFINTS_CRYPTPARAMS_CRYPTALGO p_i); const char *AQFINTS_CryptParams_SigUsage_toString(AQFINTS_CRYPTPARAMS_SIGUSAGE p_i); /** Constructor. */ AQFINTS_CRYPTPARAMS *AQFINTS_CryptParams_new(void); /** Destructor. */ void AQFINTS_CryptParams_free(AQFINTS_CRYPTPARAMS *p_struct); AQFINTS_CRYPTPARAMS *AQFINTS_CryptParams_dup(const AQFINTS_CRYPTPARAMS *p_src); AQFINTS_CRYPTPARAMS *AQFINTS_CryptParams_copy(AQFINTS_CRYPTPARAMS *p_struct, const AQFINTS_CRYPTPARAMS *p_src); /** Getter. * Use this function to get the member "securityProfileName" (see @ref AQFINTS_CRYPTPARAMS_securityProfileName) */ const char *AQFINTS_CryptParams_GetSecurityProfileName(const AQFINTS_CRYPTPARAMS *p_struct); /** Getter. * Use this function to get the member "securityProfileVersion" (see @ref AQFINTS_CRYPTPARAMS_securityProfileVersion) */ int AQFINTS_CryptParams_GetSecurityProfileVersion(const AQFINTS_CRYPTPARAMS *p_struct); /** Getter. * Use this function to get the member "signAlgo" (see @ref AQFINTS_CRYPTPARAMS_signAlgo) */ AQFINTS_CRYPTPARAMS_SIGNALGO AQFINTS_CryptParams_GetSignAlgo(const AQFINTS_CRYPTPARAMS *p_struct); /** Getter. * Use this function to get the member "opModeSign" (see @ref AQFINTS_CRYPTPARAMS_opModeSign) */ AQFINTS_CRYPTPARAMS_OPMODE AQFINTS_CryptParams_GetOpModeSign(const AQFINTS_CRYPTPARAMS *p_struct); /** Getter. * Use this function to get the member "opModeAuth" (see @ref AQFINTS_CRYPTPARAMS_opModeAuth) */ AQFINTS_CRYPTPARAMS_OPMODE AQFINTS_CryptParams_GetOpModeAuth(const AQFINTS_CRYPTPARAMS *p_struct); /** Getter. * Use this function to get the member "sigUsage" (see @ref AQFINTS_CRYPTPARAMS_sigUsage) */ AQFINTS_CRYPTPARAMS_SIGUSAGE AQFINTS_CryptParams_GetSigUsage(const AQFINTS_CRYPTPARAMS *p_struct); /** Getter. * Use this function to get the member "hashAlgoSign" (see @ref AQFINTS_CRYPTPARAMS_hashAlgoSign) */ AQFINTS_CRYPTPARAMS_HASHALGO AQFINTS_CryptParams_GetHashAlgoSign(const AQFINTS_CRYPTPARAMS *p_struct); /** Getter. * Use this function to get the member "hashAlgoAuth" (see @ref AQFINTS_CRYPTPARAMS_hashAlgoAuth) */ AQFINTS_CRYPTPARAMS_HASHALGO AQFINTS_CryptParams_GetHashAlgoAuth(const AQFINTS_CRYPTPARAMS *p_struct); /** Getter. * Use this function to get the member "cryptAlgo" (see @ref AQFINTS_CRYPTPARAMS_cryptAlgo) */ AQFINTS_CRYPTPARAMS_CRYPTALGO AQFINTS_CryptParams_GetCryptAlgo(const AQFINTS_CRYPTPARAMS *p_struct); /** Getter. * Use this function to get the member "opModeCrypt" (see @ref AQFINTS_CRYPTPARAMS_opModeCrypt) */ AQFINTS_CRYPTPARAMS_OPMODE AQFINTS_CryptParams_GetOpModeCrypt(const AQFINTS_CRYPTPARAMS *p_struct); /** Setter. * Use this function to set the member "securityProfileName" (see @ref AQFINTS_CRYPTPARAMS_securityProfileName) */ void AQFINTS_CryptParams_SetSecurityProfileName(AQFINTS_CRYPTPARAMS *p_struct, const char *p_src); /** Setter. * Use this function to set the member "securityProfileVersion" (see @ref AQFINTS_CRYPTPARAMS_securityProfileVersion) */ void AQFINTS_CryptParams_SetSecurityProfileVersion(AQFINTS_CRYPTPARAMS *p_struct, int p_src); /** Setter. * Use this function to set the member "signAlgo" (see @ref AQFINTS_CRYPTPARAMS_signAlgo) */ void AQFINTS_CryptParams_SetSignAlgo(AQFINTS_CRYPTPARAMS *p_struct, AQFINTS_CRYPTPARAMS_SIGNALGO p_src); /** Setter. * Use this function to set the member "opModeSign" (see @ref AQFINTS_CRYPTPARAMS_opModeSign) */ void AQFINTS_CryptParams_SetOpModeSign(AQFINTS_CRYPTPARAMS *p_struct, AQFINTS_CRYPTPARAMS_OPMODE p_src); /** Setter. * Use this function to set the member "opModeAuth" (see @ref AQFINTS_CRYPTPARAMS_opModeAuth) */ void AQFINTS_CryptParams_SetOpModeAuth(AQFINTS_CRYPTPARAMS *p_struct, AQFINTS_CRYPTPARAMS_OPMODE p_src); /** Setter. * Use this function to set the member "sigUsage" (see @ref AQFINTS_CRYPTPARAMS_sigUsage) */ void AQFINTS_CryptParams_SetSigUsage(AQFINTS_CRYPTPARAMS *p_struct, AQFINTS_CRYPTPARAMS_SIGUSAGE p_src); /** Setter. * Use this function to set the member "hashAlgoSign" (see @ref AQFINTS_CRYPTPARAMS_hashAlgoSign) */ void AQFINTS_CryptParams_SetHashAlgoSign(AQFINTS_CRYPTPARAMS *p_struct, AQFINTS_CRYPTPARAMS_HASHALGO p_src); /** Setter. * Use this function to set the member "hashAlgoAuth" (see @ref AQFINTS_CRYPTPARAMS_hashAlgoAuth) */ void AQFINTS_CryptParams_SetHashAlgoAuth(AQFINTS_CRYPTPARAMS *p_struct, AQFINTS_CRYPTPARAMS_HASHALGO p_src); /** Setter. * Use this function to set the member "cryptAlgo" (see @ref AQFINTS_CRYPTPARAMS_cryptAlgo) */ void AQFINTS_CryptParams_SetCryptAlgo(AQFINTS_CRYPTPARAMS *p_struct, AQFINTS_CRYPTPARAMS_CRYPTALGO p_src); /** Setter. * Use this function to set the member "opModeCrypt" (see @ref AQFINTS_CRYPTPARAMS_opModeCrypt) */ void AQFINTS_CryptParams_SetOpModeCrypt(AQFINTS_CRYPTPARAMS *p_struct, AQFINTS_CRYPTPARAMS_OPMODE p_src); const AQFINTS_CRYPTPARAMS* AQFINTS_CryptParams_GetParamsForSecurityProfile(const char *securityProfileName, int securityProfileVersion); #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/session/Makefile.in0000644000175000017500000010265515037736025024725 00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/libs/plugins/backends/aqfints/libaqfints/session ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/distri.m4 $(top_srcdir)/m4/gwenhywfar.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/os.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(dist_typedata_DATA) \ $(noinst_HEADERS) $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libaqfintssession_la_DEPENDENCIES = pintan/libaqfintssession_pin.la \ hbci/libaqfintssession_hbci.la am__objects_1 = cryptparams.lo am_libaqfintssession_la_OBJECTS = $(am__objects_1) session.lo \ s_getanonbpd.lo s_message.lo s_log.lo s_decode.lo s_decrypt.lo \ s_verify.lo s_sign.lo s_encrypt.lo s_encode.lo libaqfintssession_la_OBJECTS = $(am_libaqfintssession_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/cryptparams.Plo \ ./$(DEPDIR)/s_decode.Plo ./$(DEPDIR)/s_decrypt.Plo \ ./$(DEPDIR)/s_encode.Plo ./$(DEPDIR)/s_encrypt.Plo \ ./$(DEPDIR)/s_getanonbpd.Plo ./$(DEPDIR)/s_log.Plo \ ./$(DEPDIR)/s_message.Plo ./$(DEPDIR)/s_sign.Plo \ ./$(DEPDIR)/s_verify.Plo ./$(DEPDIR)/session.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libaqfintssession_la_SOURCES) DIST_SOURCES = $(libaqfintssession_la_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(typedatadir)" DATA = $(dist_typedata_DATA) HEADERS = $(noinst_HEADERS) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir distdir-am am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp TODO DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ADD_ACLOCAL_FLAGS = @ADD_ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AQBANKING_CLI_VERSION_STRING = @AQBANKING_CLI_VERSION_STRING@ AQBANKING_FINTS_VERSION_STRING = @AQBANKING_FINTS_VERSION_STRING@ AQBANKING_SO_AGE = @AQBANKING_SO_AGE@ AQBANKING_SO_CURRENT = @AQBANKING_SO_CURRENT@ AQBANKING_SO_EFFECTIVE = @AQBANKING_SO_EFFECTIVE@ AQBANKING_SO_REVISION = @AQBANKING_SO_REVISION@ AQBANKING_VERSION_BUILD = @AQBANKING_VERSION_BUILD@ AQBANKING_VERSION_FULL_STRING = @AQBANKING_VERSION_FULL_STRING@ AQBANKING_VERSION_MAJOR = @AQBANKING_VERSION_MAJOR@ AQBANKING_VERSION_MINOR = @AQBANKING_VERSION_MINOR@ AQBANKING_VERSION_PATCHLEVEL = @AQBANKING_VERSION_PATCHLEVEL@ AQBANKING_VERSION_RELEASE_STRING = @AQBANKING_VERSION_RELEASE_STRING@ AQBANKING_VERSION_STRING = @AQBANKING_VERSION_STRING@ AQBANKING_VERSION_TAG = @AQBANKING_VERSION_TAG@ AQEBICS_CFLAGS = @AQEBICS_CFLAGS@ AQEBICS_LIBS = @AQEBICS_LIBS@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATETIME = @DATETIME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_EXCLUDE_PATTERNS = @DOXYGEN_EXCLUDE_PATTERNS@ DOXYGEN_FILE_PATTERNS = @DOXYGEN_FILE_PATTERNS@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENGUI_GTK2_CFLAGS = @GWENGUI_GTK2_CFLAGS@ GWENGUI_GTK2_LIBS = @GWENGUI_GTK2_LIBS@ GWENHYWFAR_MINIMUM_VERSION = @GWENHYWFAR_MINIMUM_VERSION@ HAVE_GWENGUI_GTK2 = @HAVE_GWENGUI_GTK2@ HAVE_I18N = @HAVE_I18N@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIBXSLT_CFLAGS = @LIBXSLT_CFLAGS@ LIBXSLT_LIBS = @LIBXSLT_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_SUPPORTS_QT = @MSGFMT_SUPPORTS_QT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ TUTORIALS = @TUTORIALS@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XMLMERGE = @XMLMERGE@ XMLSEC_CFLAGS = @XMLSEC_CFLAGS@ XMLSEC_LIBS = @XMLSEC_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ aqbanking_backends = @aqbanking_backends@ aqbanking_cfg_searchdir = @aqbanking_cfg_searchdir@ aqbanking_data_searchdir = @aqbanking_data_searchdir@ aqbanking_headerdir = @aqbanking_headerdir@ aqbanking_headerdir_am = @aqbanking_headerdir_am@ aqbanking_includes = @aqbanking_includes@ aqbanking_internal_libs = @aqbanking_internal_libs@ aqbanking_ldflags = @aqbanking_ldflags@ aqbanking_libs = @aqbanking_libs@ aqbanking_locale_searchdir = @aqbanking_locale_searchdir@ aqbanking_modules = @aqbanking_modules@ aqbanking_pkgdatadir = @aqbanking_pkgdatadir@ aqbanking_plugin_searchdir = @aqbanking_plugin_searchdir@ aqbanking_plugindir = @aqbanking_plugindir@ aqbanking_plugins_backends_dirs = @aqbanking_plugins_backends_dirs@ aqbanking_plugins_backends_libs = @aqbanking_plugins_backends_libs@ aqbanking_plugins_bankinfo_dirs = @aqbanking_plugins_bankinfo_dirs@ aqbanking_plugins_bankinfo_libs = @aqbanking_plugins_bankinfo_libs@ aqbanking_plugins_imexporters_dirs = @aqbanking_plugins_imexporters_dirs@ aqbanking_plugins_imexporters_libs = @aqbanking_plugins_imexporters_libs@ aqbanking_plugins_parsers_dirs = @aqbanking_plugins_parsers_dirs@ aqbanking_symlinkdir = @aqbanking_symlinkdir@ aqbanking_sys_is_windows = @aqbanking_sys_is_windows@ aqbankingpp_modules = @aqbankingpp_modules@ aqebics_datadir = @aqebics_datadir@ aqebics_includes = @aqebics_includes@ aqebics_internal_libs = @aqebics_internal_libs@ aqebics_ldflags = @aqebics_ldflags@ aqebics_libs = @aqebics_libs@ aqfints_datadir = @aqfints_datadir@ aqhbci_datadir = @aqhbci_datadir@ aqhbci_includes = @aqhbci_includes@ aqhbci_internal_libs = @aqhbci_internal_libs@ aqhbci_ldflags = @aqhbci_ldflags@ aqhbci_libs = @aqhbci_libs@ aqofxconnect_includes = @aqofxconnect_includes@ aqofxconnect_internal_libs = @aqofxconnect_internal_libs@ aqofxconnect_libs = @aqofxconnect_libs@ aqpaypal_includes = @aqpaypal_includes@ aqpaypal_internal_libs = @aqpaypal_internal_libs@ aqpaypal_libs = @aqpaypal_libs@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gmp_libs = @gmp_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_dir = @gwenhywfar_dir@ gwenhywfar_has_crypt = @gwenhywfar_has_crypt@ gwenhywfar_headers = @gwenhywfar_headers@ gwenhywfar_includes = @gwenhywfar_includes@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_plugins = @gwenhywfar_plugins@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ typemaker2_exe = @typemaker2_exe@ visibility_cflags = @visibility_cflags@ with_aqebics = @with_aqebics@ with_aqhbci = @with_aqhbci@ SUBDIRS = pintan hbci AM_CFLAGS = -DBUILDING_AQBANKING @visibility_cflags@ AM_CPPFLAGS = -I$(top_srcdir)/src/libs -I$(top_builddir)/src/libs $(gwenhywfar_includes) $(aqbanking_includes) \ -I$(srcdir)/../.. \ -I$(srcdir)/.. noinst_LTLIBRARIES = libaqfintssession.la typefiles = \ cryptparams.xml typedatadir = $(datadir)/aqbanking/typemaker2/c dist_typedata_DATA = built_sources = \ cryptparams.c build_headers_priv = \ cryptparams_p.h build_headers_pub = \ cryptparams.h build_headers = $(build_headers_priv) $(build_headers_pub) noinst_HEADERS = $(build_headers) \ session.h \ session_p.h \ s_decode.h \ s_decrypt.h \ s_encrypt.h \ s_encode.h \ s_log.h \ s_message.h \ s_sign.h \ s_verify.h libaqfintssession_la_SOURCES = $(built_sources) \ session.c \ s_getanonbpd.c \ s_message.c \ s_log.c \ s_decode.c \ s_decrypt.c \ s_verify.c \ s_sign.c \ s_encrypt.c \ s_encode.c libaqfintssession_la_LIBADD = \ pintan/libaqfintssession_pin.la \ hbci/libaqfintssession_hbci.la EXTRA_DIST = $(typefiles) $(built_sources) $(build_headers) all: all-recursive .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libs/plugins/backends/aqfints/libaqfints/session/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libs/plugins/backends/aqfints/libaqfints/session/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libaqfintssession.la: $(libaqfintssession_la_OBJECTS) $(libaqfintssession_la_DEPENDENCIES) $(EXTRA_libaqfintssession_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libaqfintssession_la_OBJECTS) $(libaqfintssession_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cryptparams.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/s_decode.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/s_decrypt.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/s_encode.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/s_encrypt.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/s_getanonbpd.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/s_log.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/s_message.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/s_sign.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/s_verify.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/session.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-dist_typedataDATA: $(dist_typedata_DATA) @$(NORMAL_INSTALL) @list='$(dist_typedata_DATA)'; test -n "$(typedatadir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(typedatadir)'"; \ $(MKDIR_P) "$(DESTDIR)$(typedatadir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(typedatadir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(typedatadir)" || exit $$?; \ done uninstall-dist_typedataDATA: @$(NORMAL_UNINSTALL) @list='$(dist_typedata_DATA)'; test -n "$(typedatadir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(typedatadir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(typedatadir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-recursive -rm -f ./$(DEPDIR)/cryptparams.Plo -rm -f ./$(DEPDIR)/s_decode.Plo -rm -f ./$(DEPDIR)/s_decrypt.Plo -rm -f ./$(DEPDIR)/s_encode.Plo -rm -f ./$(DEPDIR)/s_encrypt.Plo -rm -f ./$(DEPDIR)/s_getanonbpd.Plo -rm -f ./$(DEPDIR)/s_log.Plo -rm -f ./$(DEPDIR)/s_message.Plo -rm -f ./$(DEPDIR)/s_sign.Plo -rm -f ./$(DEPDIR)/s_verify.Plo -rm -f ./$(DEPDIR)/session.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dist_typedataDATA install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f ./$(DEPDIR)/cryptparams.Plo -rm -f ./$(DEPDIR)/s_decode.Plo -rm -f ./$(DEPDIR)/s_decrypt.Plo -rm -f ./$(DEPDIR)/s_encode.Plo -rm -f ./$(DEPDIR)/s_encrypt.Plo -rm -f ./$(DEPDIR)/s_getanonbpd.Plo -rm -f ./$(DEPDIR)/s_log.Plo -rm -f ./$(DEPDIR)/s_message.Plo -rm -f ./$(DEPDIR)/s_sign.Plo -rm -f ./$(DEPDIR)/s_verify.Plo -rm -f ./$(DEPDIR)/session.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-dist_typedataDATA .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ am--depfiles check check-am clean clean-generic clean-libtool \ clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am \ install-dist_typedataDATA install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs installdirs-am \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \ uninstall-dist_typedataDATA .PRECIOUS: Makefile built_sources: $(built_sources) list='$(SUBDIRS)'; for d in $$list; do \ $(MAKE) -C $$d built_sources; \ done ; clean_build_files: rm -f $(built_sources) $(build_headers) format_built_files: for f in $(built_sources) $(build_headers); do \ $(ASTYLE) --style=stroustrup -s2 --min-conditional-indent=0 --indent-labels --max-continuation-indent=80 --pad-comma --pad-header --unpad-paren --align-pointer=name --break-closing-braces --break-one-line-headers --attach-return-type --convert-tabs --max-code-length=120 --break-after-logical --suffix=none $$f; \ done sources: for f in $(libaqfintssession_la_SOURCES) $(EXTRA_DIST); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d sources; \ done typefiles: $(typefiles) for d in $(SUBDIRS); do \ $(MAKE) -C $$d typefiles; \ done $(typemaker2_exe) -I $(top_srcdir)/src/libs/aqbanking/typemaker2/c -I $(gwenhywfar_dir)/share/gwenhywfar/typemaker2/c -I $(srcdir) --destfolder="$(srcdir)" $(typefiles) typedefs: $(typefiles) for d in $(SUBDIRS); do \ $(MAKE) -C $$d typedefs; \ done $(typemaker2_exe) --defs-only -I $(top_srcdir)/src/libs/aqbanking/typemaker2/c -I $(gwenhywfar_dir)/share/gwenhywfar/typemaker2/c -I $(srcdir) --destfolder="$(srcdir)" $(typefiles) cppcheck: for f in $(libaqfintssession_la_SOURCES); do \ cppcheck --force $$f ; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/session/s_log.h0000664000175000017500000000154114044534775024133 00000000000000/*************************************************************************** begin : Sat Aug 03 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQFINTS_SESSION_LOG_H #define AQFINTS_SESSION_LOG_H #include "libaqfints/session/session.h" void AQFINTS_Session_LogMessage(AQFINTS_SESSION *sess, const uint8_t *ptrLogData, uint32_t lenLogData, int rec, int crypt); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/session/s_encrypt.c0000664000175000017500000000457614044534775025044 00000000000000/*************************************************************************** begin : Sun Oct 27 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "libaqfints/session/s_encrypt.h" #include "libaqfints/session/pintan/s_encrypt_pintan.h" #include "libaqfints/session/hbci/s_encrypt_hbci.h" #include "libaqfints/parser/parser.h" #include #include #include /* ------------------------------------------------------------------------------------------------ * forward declarations * ------------------------------------------------------------------------------------------------ */ /* ------------------------------------------------------------------------------------------------ * implementations * ------------------------------------------------------------------------------------------------ */ int AQFINTS_Session_EncryptMessage(AQFINTS_SESSION *sess, AQFINTS_MESSAGE *message) { AQFINTS_KEYDESCR *keyDescr; const char *sSecProfileCode; keyDescr=AQFINTS_Message_GetCrypter(message); if (keyDescr==NULL) { DBG_ERROR(AQFINTS_LOGDOMAIN, "No crypter set"); return GWEN_ERROR_GENERIC; } sSecProfileCode=AQFINTS_KeyDescr_GetSecurityProfileName(keyDescr); if (sSecProfileCode && *sSecProfileCode) { int rv; if (strcasecmp(sSecProfileCode, "PIN")==0) rv=AQFINTS_Session_EncryptMessagePinTan(sess, message); else if (strcasecmp(sSecProfileCode, "RDH")==0) rv=AQFINTS_Session_EncryptMessageHbci(sess, message); else if (strcasecmp(sSecProfileCode, "RAH")==0) rv=AQFINTS_Session_EncryptMessageHbci(sess, message); else { DBG_ERROR(AQFINTS_LOGDOMAIN, "Unhandled security profile \"%s\"", sSecProfileCode); return GWEN_ERROR_GENERIC; } if (rv<0) { DBG_ERROR(AQFINTS_LOGDOMAIN, "here (%d)", rv); return rv; } return 0; } else { DBG_ERROR(AQFINTS_LOGDOMAIN, "No security profile code set in session"); return GWEN_ERROR_INVALID; } } aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/session/s_decrypt.c0000664000175000017500000001675514044534775025034 00000000000000/*************************************************************************** begin : Sun Oct 27 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "libaqfints/session/s_decrypt.h" #include "libaqfints/session/pintan/s_decrypt_pintan.h" #include "libaqfints/session/hbci/s_decrypt_hbci.h" #include "libaqfints/session/s_decode.h" #include "libaqfints/parser/parser.h" #include #include #include /* ------------------------------------------------------------------------------------------------ * forward declarations * ------------------------------------------------------------------------------------------------ */ static int _decryptMessage(AQFINTS_SESSION *sess, AQFINTS_SEGMENT *segCryptHead, AQFINTS_SEGMENT *segCryptData, AQFINTS_MESSAGE *message); static int _decryptSegmentDdv(AQFINTS_SESSION *sess, AQFINTS_SEGMENT *segCryptHead, AQFINTS_SEGMENT *segCryptData, const AQFINTS_CRYPTPARAMS *cryptParams, const AQFINTS_KEYDESCR *keyDescr, AQFINTS_SEGMENT_LIST *segmentList); /* ------------------------------------------------------------------------------------------------ * implementations * ------------------------------------------------------------------------------------------------ */ int AQFINTS_Session_DecryptMessage(AQFINTS_SESSION *sess, AQFINTS_MESSAGE *message) { AQFINTS_SEGMENT_LIST *segmentList; AQFINTS_SEGMENT *segment; const char *sCode; segmentList=AQFINTS_Message_GetSegmentList(message); segment=AQFINTS_Segment_List_First(segmentList); if (segment==NULL) return GWEN_ERROR_NO_DATA; sCode=AQFINTS_Segment_GetCode(segment); if (sCode==NULL || *sCode==0 || strcasecmp(sCode, "HNHBK")) { DBG_ERROR(AQFINTS_LOGDOMAIN, "No message head"); return GWEN_ERROR_INVALID; } segment=AQFINTS_Segment_List_Next(segment); if (segment==NULL) return GWEN_ERROR_NO_DATA; sCode=AQFINTS_Segment_GetCode(segment); if (sCode && *sCode && strcasecmp(sCode, "HNVSK")==0) { AQFINTS_SEGMENT *segCryptHead=NULL; AQFINTS_SEGMENT *segCryptData=NULL; AQFINTS_SEGMENT *segMsgTail=NULL; int rv; segCryptHead=segment; segment=AQFINTS_Segment_List_Next(segment); if (segment==NULL) return GWEN_ERROR_NO_DATA; sCode=AQFINTS_Segment_GetCode(segment); if (sCode==NULL || *sCode==0 || strcasecmp(sCode, "HNVSD")) { DBG_ERROR(AQFINTS_LOGDOMAIN, "No message data"); return GWEN_ERROR_INVALID; } segCryptData=segment; segment=AQFINTS_Segment_List_Next(segment); if (segment==NULL) return GWEN_ERROR_NO_DATA; sCode=AQFINTS_Segment_GetCode(segment); if (sCode==NULL || *sCode==0 || strcasecmp(sCode, "HNHBS")) { DBG_ERROR(AQFINTS_LOGDOMAIN, "No message tail"); return GWEN_ERROR_INVALID; } segMsgTail=segment; if (AQFINTS_Segment_List_Next(segment)!=NULL) { DBG_ERROR(AQFINTS_LOGDOMAIN, "Unexpected segment behind MessageTail"); return GWEN_ERROR_INVALID; } rv=_decryptMessage(sess, segCryptHead, segCryptData, message); if (rv<0) { DBG_INFO(AQFINTS_LOGDOMAIN, "here (%d)", rv); return rv; } /* move cryptHead to end of list */ AQFINTS_Segment_List_Del(segCryptHead); AQFINTS_Segment_List_Add(segCryptHead, segmentList); /* move cryptData to end of list */ AQFINTS_Segment_List_Del(segCryptData); AQFINTS_Segment_List_Add(segCryptData, segmentList); /* move messageTail to end of list */ AQFINTS_Segment_List_Del(segMsgTail); AQFINTS_Segment_List_Add(segMsgTail, segmentList); } else { segment=AQFINTS_Segment_List_Last(segmentList); if (segment==NULL) return GWEN_ERROR_NO_DATA; sCode=AQFINTS_Segment_GetCode(segment); if (sCode==NULL || *sCode==0 || strcasecmp(sCode, "HNHBS")) { DBG_ERROR(AQFINTS_LOGDOMAIN, "No message tail"); return GWEN_ERROR_INVALID; } } return 0; } int _decryptMessage(AQFINTS_SESSION *sess, AQFINTS_SEGMENT *segCryptHead, AQFINTS_SEGMENT *segCryptData, AQFINTS_MESSAGE *message) { AQFINTS_SEGMENT_LIST *segmentList; GWEN_DB_NODE *dbCryptHead; AQFINTS_KEYDESCR *keyDescr; const char *securityProfileName; int securityProfileVersion; segmentList=AQFINTS_Message_GetSegmentList(message); dbCryptHead=AQFINTS_Segment_GetDbData(segCryptHead); assert(dbCryptHead); keyDescr=AQFINTS_Session_ReadKeyDescrFromDbHead(dbCryptHead); securityProfileName=GWEN_DB_GetCharValue(dbCryptHead, "secProfile/code", 0, NULL); securityProfileVersion=GWEN_DB_GetIntValue(dbCryptHead, "secProfile/version", 0, 0); /* hack for hibiscus */ if (securityProfileVersion==0) { if (securityProfileName && strcasecmp(securityProfileName, "RDH")==0) securityProfileVersion=10; } if (securityProfileName && *securityProfileName) { int rv; const AQFINTS_CRYPTPARAMS *cryptParams; DBG_INFO(AQFINTS_LOGDOMAIN, "Selected security profile is \"%s\" (version %d)", securityProfileName, securityProfileVersion); cryptParams=AQFINTS_CryptParams_GetParamsForSecurityProfile(securityProfileName, securityProfileVersion); if (cryptParams==NULL) { DBG_INFO(AQFINTS_LOGDOMAIN, "Security profile \"%s\" (version %d) no found", securityProfileName, securityProfileVersion); AQFINTS_KeyDescr_free(keyDescr); return GWEN_ERROR_GENERIC; } if (strcasecmp(securityProfileName, "PIN")==0) rv=AQFINTS_Session_DecryptSegmentPinTan(sess, segCryptHead, segCryptData, cryptParams, keyDescr, segmentList); else if (strcasecmp(securityProfileName, "RDH")==0) rv=AQFINTS_Session_DecryptSegmentHbci(sess, segCryptHead, segCryptData, cryptParams, keyDescr, segmentList); else if (strcasecmp(securityProfileName, "RAH")==0) rv=AQFINTS_Session_DecryptSegmentHbci(sess, segCryptHead, segCryptData, cryptParams, keyDescr, segmentList); else if (strcasecmp(securityProfileName, "DDV")==0) rv=_decryptSegmentDdv(sess, segCryptHead, segCryptData, cryptParams, keyDescr, segmentList); else { DBG_ERROR(AQFINTS_LOGDOMAIN, "Invalid security profile \"%s\"", securityProfileName); AQFINTS_KeyDescr_free(keyDescr); return GWEN_ERROR_BAD_DATA; } if (rv<0) { DBG_ERROR(AQFINTS_LOGDOMAIN, "here (%d)", rv); AQFINTS_KeyDescr_free(keyDescr); return rv; } AQFINTS_Message_SetCrypter(message, keyDescr); return 0; } else { DBG_ERROR(AQFINTS_LOGDOMAIN, "Missing security profile code"); AQFINTS_KeyDescr_free(keyDescr); return GWEN_ERROR_BAD_DATA; } } int _decryptSegmentDdv(AQFINTS_SESSION *sess, AQFINTS_SEGMENT *segCryptHead, AQFINTS_SEGMENT *segCryptData, const AQFINTS_CRYPTPARAMS *cryptParams, const AQFINTS_KEYDESCR *keyDescr, AQFINTS_SEGMENT_LIST *segmentList) { return GWEN_ERROR_NOT_IMPLEMENTED; } aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/session/cryptparams_p.h0000664000175000017500000000167115037736055025716 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "cryptparams.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef AQFINTS_CRYPTPARAMS_CRYPTPARAMS_P_H #define AQFINTS_CRYPTPARAMS_CRYPTPARAMS_P_H #include "./cryptparams.h" #ifdef __cplusplus extern "C" { #endif struct AQFINTS_CRYPTPARAMS { char *securityProfileName; int securityProfileVersion; AQFINTS_CRYPTPARAMS_SIGNALGO signAlgo; AQFINTS_CRYPTPARAMS_OPMODE opModeSign; AQFINTS_CRYPTPARAMS_OPMODE opModeAuth; AQFINTS_CRYPTPARAMS_SIGUSAGE sigUsage; AQFINTS_CRYPTPARAMS_HASHALGO hashAlgoSign; AQFINTS_CRYPTPARAMS_HASHALGO hashAlgoAuth; AQFINTS_CRYPTPARAMS_CRYPTALGO cryptAlgo; AQFINTS_CRYPTPARAMS_OPMODE opModeCrypt; }; #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/session/TODO0000664000175000017500000000226614043610745023343 00000000000000Session->exchangeMsg: - wrap outMsg in HNHBK/HNHBS - if SIGN: sign message - if CRYPT: encrypt message - send message - receive message Things to do when creating a session (client): - AQFINTS_Session_new() - AQFINTS_Session_SetHbciVersion() - AQFINTS_Session_SetSecProfileCode() - AQFINTS_Session_SetSecProfileVersion() - AQFINTS_Session_SetTanMethod() - AQFINTS_Session_SetBpd() - AQFINTS_Session_SetUserData() - AQFINTS_Session_SetLogFile() - AQFINTS_Session_SetAppRegKey() - AQFINTS_Session_SetAppVersion() Virtual functions: - encodeMsg() - decodeMsg() Oberhalb dieser Ebene hier: - AQFINTS_UserSession - setzt die notwendigen Infos (siehe oben) aus dem User - bei RxH/DDV: - implementiert - encodeMsg() - decodeMsg() Vorgehen beim Server: - Session::receiveMsg() - cryptHead? - ja: - ermittle Verfahren (PinTan, DDV, RDH) - extend mit entsprechender Session (SessionPinTan, SessionDdv etc) - decodeMsg() (kuemmert sich auch um signatur) - fertig - sigHead? - ja - ermittle Verfahren (PinTan, DDV, RDH) - extend mit entsprechender Session (SessionPinTan, SessionDdv etc) - decodeMsg() (kuemmert sich auch um signatur) - fertig aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/session/cryptparams.xml0000664000175000017500000005073414043610745025745 00000000000000 AQFINTS_CRYPTPARAMS AQFINTS_CryptParams cryptparams none
libaqfints/aqfints.h
gwenhywfar/bindata.h
static const AQFINTS_CRYPTPARAMS cryptParamArray[]={ \n { \n "RDH", \n 1, \n $(struct_prefix)_SignAlgoRsa, \n $(struct_prefix)_OpModeIso9796_1, \n $(struct_prefix)_OpModeNone, \n $(struct_prefix)_SigUsageOwnerSigning, \n $(struct_prefix)_HashAlgoRipeMd160, \n $(struct_prefix)_HashAlgoNone, \n $(struct_prefix)_CryptAlgoTwoKeyTripleDes, \n $(struct_prefix)_OpModeCbc \n }, \n \n \n { \n "RDH", \n 2, \n $(struct_prefix)_SignAlgoRsa, \n $(struct_prefix)_OpModeIso9796_2, \n $(struct_prefix)_OpModeNone, \n $(struct_prefix)_SigUsageOwnerSigning, \n $(struct_prefix)_HashAlgoRipeMd160, \n $(struct_prefix)_HashAlgoNone, \n $(struct_prefix)_CryptAlgoTwoKeyTripleDes, \n $(struct_prefix)_OpModeCbc \n }, \n \n \n { \n "RDH", \n 3, \n $(struct_prefix)_SignAlgoRsa, \n $(struct_prefix)_OpModeRsa_Pkcs1_v1_5, \n $(struct_prefix)_OpModeIso9796_2, \n $(struct_prefix)_SigUsageOwnerSigning, \n $(struct_prefix)_HashAlgoSha1, \n $(struct_prefix)_HashAlgoRipeMd160, \n $(struct_prefix)_CryptAlgoTwoKeyTripleDes, \n $(struct_prefix)_OpModeRsa_Pkcs1_v1_5 \n }, \n \n \n { \n "RDH", \n 5, \n $(struct_prefix)_SignAlgoRsa, \n $(struct_prefix)_OpModeRsa_Pkcs1_v1_5, \n $(struct_prefix)_OpModeNone, \n $(struct_prefix)_SigUsageOwnerSigning, \n $(struct_prefix)_HashAlgoSha1, \n $(struct_prefix)_HashAlgoNone, \n $(struct_prefix)_CryptAlgoTwoKeyTripleDes, \n $(struct_prefix)_OpModeRsa_Pkcs1_v1_5 \n }, \n \n \n { \n "RDH", \n 6, \n $(struct_prefix)_SignAlgoRsa, \n $(struct_prefix)_OpModeRsa_Pkcs1_v1_5, \n $(struct_prefix)_OpModeRsa_Pkcs1_v1_5, \n $(struct_prefix)_SigUsageOwnerSigning, \n $(struct_prefix)_HashAlgoSha256, \n $(struct_prefix)_HashAlgoSha256, \n $(struct_prefix)_CryptAlgoTwoKeyTripleDes, \n $(struct_prefix)_OpModeRsa_Pkcs1_v1_5 \n }, \n \n \n { \n "RDH", \n 7, \n $(struct_prefix)_SignAlgoRsa, \n $(struct_prefix)_OpModeRsa_Pss, \n $(struct_prefix)_OpModeRsa_Pss, \n $(struct_prefix)_SigUsageOwnerSigning, \n $(struct_prefix)_HashAlgoSha256sha256, \n $(struct_prefix)_HashAlgoSha256, \n $(struct_prefix)_CryptAlgoTwoKeyTripleDes, \n $(struct_prefix)_OpModeRsa_Pkcs1_v1_5 \n }, \n \n \n { \n "RDH", \n 8, \n $(struct_prefix)_SignAlgoRsa, \n $(struct_prefix)_OpModeRsa_Pkcs1_v1_5, \n $(struct_prefix)_OpModeNone, \n $(struct_prefix)_SigUsageOwnerSigning, \n $(struct_prefix)_HashAlgoSha256, \n $(struct_prefix)_HashAlgoNone, \n $(struct_prefix)_CryptAlgoTwoKeyTripleDes, \n $(struct_prefix)_OpModeRsa_Pkcs1_v1_5 \n }, \n \n \n { \n "RDH", \n 9, \n $(struct_prefix)_SignAlgoRsa, \n $(struct_prefix)_OpModeRsa_Pss, \n $(struct_prefix)_OpModeNone, \n $(struct_prefix)_SigUsageOwnerSigning, \n $(struct_prefix)_HashAlgoSha256sha256, \n $(struct_prefix)_HashAlgoNone, \n $(struct_prefix)_CryptAlgoTwoKeyTripleDes, \n $(struct_prefix)_OpModeRsa_Pkcs1_v1_5 \n }, \n \n \n { \n "RDH", \n 10, \n $(struct_prefix)_SignAlgoRsa, \n $(struct_prefix)_OpModeRsa_Pss, \n $(struct_prefix)_OpModeNone, \n $(struct_prefix)_SigUsageOwnerSigning, \n $(struct_prefix)_HashAlgoSha256sha256, \n $(struct_prefix)_HashAlgoNone, \n $(struct_prefix)_CryptAlgoTwoKeyTripleDes, \n $(struct_prefix)_OpModeCbc \n }, \n \n \n { \n "RAH", \n 7, \n $(struct_prefix)_SignAlgoRsa, \n $(struct_prefix)_OpModeRsa_Pss, \n $(struct_prefix)_OpModeRsa_Pss, \n $(struct_prefix)_SigUsageOwnerSigning, \n $(struct_prefix)_HashAlgoSha256sha256, \n $(struct_prefix)_HashAlgoSha256, \n $(struct_prefix)_CryptAlgoAes256, \n $(struct_prefix)_OpModeRsa_Pkcs1_v1_5 \n }, \n \n \n { \n "RAH", \n 9, \n $(struct_prefix)_SignAlgoRsa, \n $(struct_prefix)_OpModeRsa_Pss, \n $(struct_prefix)_OpModeNone, \n $(struct_prefix)_SigUsageOwnerSigning, \n $(struct_prefix)_HashAlgoSha256sha256, \n $(struct_prefix)_HashAlgoNone, \n $(struct_prefix)_CryptAlgoAes256, \n $(struct_prefix)_OpModeRsa_Pkcs1_v1_5 \n }, \n \n \n { \n "RAH", \n 10, \n $(struct_prefix)_SignAlgoRsa, \n $(struct_prefix)_OpModeRsa_Pss, \n $(struct_prefix)_OpModeNone, \n $(struct_prefix)_SigUsageOwnerSigning, \n $(struct_prefix)_HashAlgoSha256sha256, \n $(struct_prefix)_HashAlgoNone, \n $(struct_prefix)_CryptAlgoAes256, \n $(struct_prefix)_OpModeCbc \n } \n }; \n \n $(api) const AQFINTS_CRYPTPARAMS* $(struct_prefix)_GetParamsForSecurityProfile(const char *securityProfileName, int securityProfileVersion); const AQFINTS_CRYPTPARAMS* $(struct_prefix)_GetParamsForSecurityProfile(const char *securityProfileName, int securityProfileVersion) \n { \n int i; \n const AQFINTS_CRYPTPARAMS *p; \n int arrayMemberCount; \n \n arrayMemberCount=*(&cryptParamArray+1)-cryptParamArray; \n p=cryptParamArray; \n for (i=0; i< arrayMemberCount; i++) { \n if ((strcasecmp(p->securityProfileName, securityProfileName)==0) && \n (p->securityProfileVersion==securityProfileVersion)) \n return p; \n p++; \n } \n \n return NULL; \n } \n
NULL NULL public own const dup const 0 0 public AQFINTS_CryptParams_SignAlgoUnknown AQFINTS_CryptParams_SignAlgoUnknown public enum none none AQFINTS_CryptParams_OpModeUnknown AQFINTS_CryptParams_OpModeUnknown public enum none none AQFINTS_CryptParams_OpModeUnknown AQFINTS_CryptParams_OpModeUnknown public enum none none AQFINTS_CryptParams_SigUsageUnknown AQFINTS_CryptParams_SigUsageUnknown public enum none none AQFINTS_CryptParams_HashAlgoUnknown AQFINTS_CryptParams_HashAlgoUnknown public enum none none AQFINTS_CryptParams_HashAlgoUnknown AQFINTS_CryptParams_HashAlgoUnknown public enum none none AQFINTS_CryptParams_CryptAlgoUnknown AQFINTS_CryptParams_CryptAlgoUnknown public enum none none AQFINTS_CryptParams_OpModeUnknown AQFINTS_CryptParams_OpModeUnknown public enum none none
aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/session/session_p.h0000664000175000017500000000242314043610745025021 00000000000000/*************************************************************************** begin : Thu Aug 01 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQFINTS_SESSION_P_H #define AQFINTS_SESSION_P_H #include "session.h" #define AQFINTS_SESSION_MAX_ALLOWED_TANMETHODS 16 struct AQFINTS_SESSION { GWEN_INHERIT_ELEMENT(AQFINTS_SESSION) int _refCount; int lastMessageNumSent; int lastMessageNumReceived; char *logFile; int hbciVersion; char *appRegKey; char *appVersion; char *dialogId; int isServer; AQFINTS_PARSER *parser; AQFINTS_TRANSPORT *transport; AQFINTS_SESSION_EXCHANGEMESSAGES_FN exchangeMessagesFn; AQFINTS_SESSION_FILLOUT_KEYDESCR_FN filloutKeynameFn; AQFINTS_SESSION_DECRYPT_SKEY_FN decryptSessionKeyFn; AQFINTS_SESSION_ENCRYPT_SKEY_FN encryptSessionKeyFn; AQFINTS_SESSION_SIGN_FN signFn; AQFINTS_SESSION_VERIFY_FN verifyFn; AQFINTS_SESSION_VERIFYPIN_FN verifyPinFn; }; #endif aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/session/Makefile.am0000664000175000017500000000476614043610745024716 00000000000000SUBDIRS=pintan hbci AM_CFLAGS=-DBUILDING_AQBANKING @visibility_cflags@ AM_CPPFLAGS = -I$(top_srcdir)/src/libs -I$(top_builddir)/src/libs $(gwenhywfar_includes) $(aqbanking_includes) \ -I$(srcdir)/../.. \ -I$(srcdir)/.. noinst_LTLIBRARIES=libaqfintssession.la typefiles=\ cryptparams.xml typedatadir=$(datadir)/aqbanking/typemaker2/c dist_typedata_DATA= built_sources=\ cryptparams.c build_headers_priv=\ cryptparams_p.h build_headers_pub=\ cryptparams.h build_headers=$(build_headers_priv) $(build_headers_pub) noinst_HEADERS= $(build_headers) \ session.h \ session_p.h \ s_decode.h \ s_decrypt.h \ s_encrypt.h \ s_encode.h \ s_log.h \ s_message.h \ s_sign.h \ s_verify.h libaqfintssession_la_SOURCES=$(built_sources) \ session.c \ s_getanonbpd.c \ s_message.c \ s_log.c \ s_decode.c \ s_decrypt.c \ s_verify.c \ s_sign.c \ s_encrypt.c \ s_encode.c libaqfintssession_la_LIBADD=\ pintan/libaqfintssession_pin.la \ hbci/libaqfintssession_hbci.la EXTRA_DIST=$(typefiles) $(built_sources) $(build_headers) built_sources: $(built_sources) list='$(SUBDIRS)'; for d in $$list; do \ $(MAKE) -C $$d built_sources; \ done ; clean_build_files: rm -f $(built_sources) $(build_headers) format_built_files: for f in $(built_sources) $(build_headers); do \ $(ASTYLE) --style=stroustrup -s2 --min-conditional-indent=0 --indent-labels --max-continuation-indent=80 --pad-comma --pad-header --unpad-paren --align-pointer=name --break-closing-braces --break-one-line-headers --attach-return-type --convert-tabs --max-code-length=120 --break-after-logical --suffix=none $$f; \ done sources: for f in $(libaqfintssession_la_SOURCES) $(EXTRA_DIST); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d sources; \ done typefiles: $(typefiles) for d in $(SUBDIRS); do \ $(MAKE) -C $$d typefiles; \ done $(typemaker2_exe) -I $(top_srcdir)/src/libs/aqbanking/typemaker2/c -I $(gwenhywfar_dir)/share/gwenhywfar/typemaker2/c -I $(srcdir) --destfolder="$(srcdir)" $(typefiles) typedefs: $(typefiles) for d in $(SUBDIRS); do \ $(MAKE) -C $$d typedefs; \ done $(typemaker2_exe) --defs-only -I $(top_srcdir)/src/libs/aqbanking/typemaker2/c -I $(gwenhywfar_dir)/share/gwenhywfar/typemaker2/c -I $(srcdir) --destfolder="$(srcdir)" $(typefiles) cppcheck: for f in $(libaqfintssession_la_SOURCES); do \ cppcheck --force $$f ; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/session/s_decode.h0000664000175000017500000000172314044534775024577 00000000000000/*************************************************************************** begin : Thu Aug 01 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQFINTS_SESSION_DECODE_H #define AQFINTS_SESSION_DECODE_H #include "libaqfints/aqfints.h" #include "libaqfints/msg/message.h" #include "libaqfints/msg/keydescr.h" #include "libaqfints/session/session.h" #include #include AQFINTS_MESSAGE *AQFINTS_Session_DecodeMessage(AQFINTS_SESSION *sess, const uint8_t *ptrBuffer, uint32_t lenBuffer); AQFINTS_KEYDESCR *AQFINTS_Session_ReadKeyDescrFromDbHead(GWEN_DB_NODE *dbHead); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/session/s_verify.c0000664000175000017500000002335514044534775024660 00000000000000/*************************************************************************** begin : Sun Oct 27 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "libaqfints/session/pintan/s_verify_pintan.h" #include "libaqfints/session/hbci/s_verify_hbci.h" #include "libaqfints/session/s_decode.h" #include "libaqfints/parser/parser.h" #include #include #include /* ------------------------------------------------------------------------------------------------ * forward declarations * ------------------------------------------------------------------------------------------------ */ static int _verifyMessage(AQFINTS_SESSION *sess, AQFINTS_SEGMENT *segSigHead, AQFINTS_SEGMENT *segSigTail, AQFINTS_SEGMENT *segFirstSigned, AQFINTS_SEGMENT *segLastSigned, AQFINTS_MESSAGE *message); static int _verifySegmentsDdv(AQFINTS_SESSION *sess, AQFINTS_SEGMENT *segSigHead, AQFINTS_SEGMENT *segSigTail, AQFINTS_SEGMENT *segFirstSigned, AQFINTS_SEGMENT *segLastSigned, int secProfileVersion, const AQFINTS_KEYDESCR *keyDescr); static AQFINTS_SEGMENT *_getFirstSegmentByCode(AQFINTS_SEGMENT_LIST *segmentList, const char *code); static AQFINTS_SEGMENT *_getSigTailByControlReference(AQFINTS_SEGMENT *segment, const char *ctrlRef); static AQFINTS_SEGMENT *_getFirstSignedSegment(AQFINTS_SEGMENT *segment); static AQFINTS_SEGMENT *_getLastSignedSegment(AQFINTS_SEGMENT *segment); static void _dumpKeyDescr(const char *s, const AQFINTS_KEYDESCR *keyDescr); /* ------------------------------------------------------------------------------------------------ * implementations * ------------------------------------------------------------------------------------------------ */ int AQFINTS_Session_VerifyMessage(AQFINTS_SESSION *sess, AQFINTS_MESSAGE *message) { AQFINTS_SEGMENT_LIST *segmentList; AQFINTS_SEGMENT *segSigHead; AQFINTS_SEGMENT *segFirstSigned; AQFINTS_SEGMENT *segLastSigned; AQFINTS_SEGMENT *segment; segmentList=AQFINTS_Message_GetSegmentList(message); segSigHead=_getFirstSegmentByCode(segmentList, "HNSHK"); if (segSigHead==NULL) { DBG_INFO(AQFINTS_LOGDOMAIN, "No signatures in segment list"); return 0; } segFirstSigned=_getFirstSignedSegment(segSigHead); if (segFirstSigned==NULL) { DBG_INFO(AQFINTS_LOGDOMAIN, "No signed segments in segment list"); return GWEN_ERROR_BAD_DATA; } segLastSigned=_getLastSignedSegment(segFirstSigned); if (segLastSigned==NULL) { DBG_INFO(AQFINTS_LOGDOMAIN, "No signature tail in segment list"); return GWEN_ERROR_BAD_DATA; } while (segSigHead && segSigHead!=segFirstSigned) { GWEN_DB_NODE *dbSigHead; const char *sCtrlRef; AQFINTS_SEGMENT *segSigTail; int rv; dbSigHead=AQFINTS_Segment_GetDbData(segSigHead); assert(dbSigHead); sCtrlRef=GWEN_DB_GetCharValue(dbSigHead, "ctrlref", 0, NULL); if (!(sCtrlRef && *sCtrlRef)) { DBG_ERROR(AQFINTS_LOGDOMAIN, "No control reference in signature head"); return GWEN_ERROR_BAD_DATA; } segSigTail=_getSigTailByControlReference(segLastSigned, sCtrlRef); if (segSigTail==NULL) { DBG_ERROR(AQFINTS_LOGDOMAIN, "No matching signature tail with reference \"%s\" found", sCtrlRef); return GWEN_ERROR_BAD_DATA; } rv=_verifyMessage(sess, segSigHead, segSigTail, segFirstSigned, segLastSigned, message); if (rv<0) { if (rv==GWEN_ERROR_TRY_AGAIN) { DBG_INFO(AQFINTS_LOGDOMAIN, "Signature not yet verified, try again later"); AQFINTS_Message_AddFlags(message, AQFINTS_MESSAGE_FLAGS_DELAYED_VERIFY); return 0; } else { DBG_INFO(AQFINTS_LOGDOMAIN, "here (%d)", rv); return rv; } } segSigHead=AQFINTS_Segment_List_Next(segSigHead); } /* mark segments as signed */ segment=segFirstSigned; while (segment) { AQFINTS_Segment_AddRuntimeFlags(segment, AQFINTS_SEGMENT_RTFLAGS_SIGNED); if (segment==segLastSigned) break; segment=AQFINTS_Segment_List_Next(segment); } AQFINTS_Message_SubFlags(message, AQFINTS_MESSAGE_FLAGS_DELAYED_VERIFY); /* done */ return 0; } int _verifyMessage(AQFINTS_SESSION *sess, AQFINTS_SEGMENT *segSigHead, AQFINTS_SEGMENT *segSigTail, AQFINTS_SEGMENT *segFirstSigned, AQFINTS_SEGMENT *segLastSigned, AQFINTS_MESSAGE *message) { GWEN_DB_NODE *dbSigHead; GWEN_DB_NODE *dbSigTail; AQFINTS_KEYDESCR *keyDescr; const char *s; int v; dbSigHead=AQFINTS_Segment_GetDbData(segSigHead); assert(dbSigHead); dbSigTail=AQFINTS_Segment_GetDbData(segSigTail); assert(dbSigTail); /* setup key name */ keyDescr=AQFINTS_Session_ReadKeyDescrFromDbHead(dbSigHead); s=GWEN_DB_GetCharValue(dbSigTail, "pin", 0, NULL); AQFINTS_KeyDescr_SetPin(keyDescr, s); s=GWEN_DB_GetCharValue(dbSigTail, "tan", 0, NULL); AQFINTS_KeyDescr_SetTan(keyDescr, s); _dumpKeyDescr("Signer", keyDescr); /* call appropriate function according to security profile */ v=GWEN_DB_GetIntValue(dbSigHead, "secProfile/version", 0, 0); s=GWEN_DB_GetCharValue(dbSigHead, "secProfile/code", 0, NULL); if (s && *s) { int rv; DBG_INFO(AQFINTS_LOGDOMAIN, "Selected security profile is \"%s\" (version %d)", s, v); if (strcasecmp(s, "PIN")==0) rv=AQFINTS_Session_VerifySegmentsPinTan(sess, segSigHead, segSigTail, segFirstSigned, segLastSigned, v, keyDescr); else if (strcasecmp(s, "RDH")==0) rv=AQFINTS_Session_VerifySegmentHbci(sess, message, keyDescr, segSigHead, segSigTail, segFirstSigned, segLastSigned); else if (strcasecmp(s, "RAH")==0) rv=AQFINTS_Session_VerifySegmentHbci(sess, message, keyDescr, segSigHead, segSigTail, segFirstSigned, segLastSigned); else if (strcasecmp(s, "DDV")==0) rv=_verifySegmentsDdv(sess, segSigHead, segSigTail, segFirstSigned, segLastSigned, v, keyDescr); else { DBG_ERROR(AQFINTS_LOGDOMAIN, "Invalid security profile \"%s\"", s); AQFINTS_KeyDescr_free(keyDescr); return GWEN_ERROR_BAD_DATA; } if (rv<0) { if (rv==GWEN_ERROR_TRY_AGAIN) { DBG_INFO(AQFINTS_LOGDOMAIN, "Signature not yet available, probably key not yet processed, retry later"); } else { DBG_INFO(AQFINTS_LOGDOMAIN, "here (%d)", rv); } AQFINTS_KeyDescr_free(keyDescr); return rv; } AQFINTS_Message_AddSigner(message, keyDescr); return 0; } else { DBG_ERROR(AQFINTS_LOGDOMAIN, "Missing security profile code"); AQFINTS_KeyDescr_free(keyDescr); return GWEN_ERROR_BAD_DATA; } } void _dumpKeyDescr(const char *s, const AQFINTS_KEYDESCR *keyDescr) { const char *sKeyName; const char *sKeyType; sKeyName=AQFINTS_KeyDescr_GetUserId(keyDescr); sKeyType=AQFINTS_KeyDescr_GetKeyType(keyDescr); DBG_ERROR(AQFINTS_LOGDOMAIN, "%s: %s:%s:%d:%d", s?s:"", sKeyName?sKeyName:"", sKeyType?sKeyType:"", AQFINTS_KeyDescr_GetKeyNumber(keyDescr), AQFINTS_KeyDescr_GetKeyVersion(keyDescr)); } int _verifySegmentsDdv(AQFINTS_SESSION *sess, AQFINTS_SEGMENT *segSigHead, AQFINTS_SEGMENT *segSigTail, AQFINTS_SEGMENT *segFirstSigned, AQFINTS_SEGMENT *segLastSigned, int secProfileVersion, const AQFINTS_KEYDESCR *keyDescr) { return GWEN_ERROR_NOT_IMPLEMENTED; } AQFINTS_SEGMENT *_getFirstSegmentByCode(AQFINTS_SEGMENT_LIST *segmentList, const char *code) { AQFINTS_SEGMENT *segment; segment=AQFINTS_Segment_List_First(segmentList); while (segment) { const char *s; s=AQFINTS_Segment_GetCode(segment); if (s && *s && strcasecmp(s, code)==0) return segment; segment=AQFINTS_Segment_List_Next(segment); } return NULL; } AQFINTS_SEGMENT *_getSigTailByControlReference(AQFINTS_SEGMENT *segment, const char *ctrlRef) { while (segment) { const char *sCode; sCode=AQFINTS_Segment_GetCode(segment); if (sCode && *sCode && strcasecmp(sCode, "HNSHA")==0) { GWEN_DB_NODE *dbSigTail; const char *s; dbSigTail=AQFINTS_Segment_GetDbData(segment); assert(dbSigTail); s=GWEN_DB_GetCharValue(dbSigTail, "ctrlref", 0, NULL); if (s && *s && strcasecmp(s, ctrlRef)==0) return segment; } segment=AQFINTS_Segment_List_Next(segment); } return NULL; } AQFINTS_SEGMENT *_getFirstSignedSegment(AQFINTS_SEGMENT *segment) { while (segment) { const char *sCode; sCode=AQFINTS_Segment_GetCode(segment); if (sCode && *sCode && strcasecmp(sCode, "HNSHK")!=0) return segment; segment=AQFINTS_Segment_List_Next(segment); } return NULL; } AQFINTS_SEGMENT *_getLastSignedSegment(AQFINTS_SEGMENT *segment) { while (segment) { AQFINTS_SEGMENT *nextSegment; nextSegment=AQFINTS_Segment_List_Next(segment); if (nextSegment) { const char *sCode; sCode=AQFINTS_Segment_GetCode(nextSegment); if (sCode && *sCode && strcasecmp(sCode, "HNSHA")==0) return segment; } segment=nextSegment; } return NULL; } aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/session/s_getanonbpd.c0000664000175000017500000001611514044534775025471 00000000000000/*************************************************************************** begin : Thu Aug 01 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "./session.h" #include "s_message.h" #include "libaqfints/service/bpd/bpd_read.h" #include /* ------------------------------------------------------------------------------------------------ * forward declarations * ------------------------------------------------------------------------------------------------ */ static AQFINTS_MESSAGE *createMessage(AQFINTS_SESSION *sess, const char *bankCode); static int mkGetAnonBpdMessage(AQFINTS_SESSION *sess, const char *bankCode, GWEN_BUFFER *destBuffer); static AQFINTS_BPD *extractBpd(AQFINTS_SESSION *sess, const uint8_t *ptrBuffer, uint32_t lenBuffer); /* ------------------------------------------------------------------------------------------------ * implementations * ------------------------------------------------------------------------------------------------ */ int AQFINTS_Session_GetAnonBpd(AQFINTS_SESSION *sess, const char *bankCode, AQFINTS_BPD **pBpd) { GWEN_BUFFER *destBuffer; int rv; AQFINTS_BPD *bpd; destBuffer=GWEN_Buffer_new(0, 256, 0, 1); rv=mkGetAnonBpdMessage(sess, bankCode, destBuffer); if (rv<0) { DBG_ERROR(AQFINTS_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(destBuffer); return rv; } rv=AQFINTS_Session_Connect(sess); if (rv<0) { DBG_ERROR(AQFINTS_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(destBuffer); return rv; } rv=AQFINTS_Session_SendMessage(sess, GWEN_Buffer_GetStart(destBuffer), GWEN_Buffer_GetUsedBytes(destBuffer)); if (rv<0) { DBG_ERROR(AQFINTS_LOGDOMAIN, "here (%d)", rv); AQFINTS_Session_Disconnect(sess); GWEN_Buffer_free(destBuffer); return rv; } GWEN_Buffer_Reset(destBuffer); rv=AQFINTS_Session_ReceiveMessage(sess, destBuffer); if (rv<0) { DBG_ERROR(AQFINTS_LOGDOMAIN, "here (%d)", rv); AQFINTS_Session_Disconnect(sess); GWEN_Buffer_free(destBuffer); return rv; } AQFINTS_Session_Disconnect(sess); bpd=extractBpd(sess, (const uint8_t *) GWEN_Buffer_GetStart(destBuffer), GWEN_Buffer_GetUsedBytes(destBuffer)); if (bpd==NULL) { DBG_ERROR(AQFINTS_LOGDOMAIN, "No BPD extracted"); GWEN_Buffer_free(destBuffer); return rv; } GWEN_Buffer_free(destBuffer); *pBpd=bpd; return 0; } AQFINTS_BPD *extractBpd(AQFINTS_SESSION *sess, const uint8_t *ptrBuffer, uint32_t lenBuffer) { AQFINTS_SEGMENT_LIST *segmentList; AQFINTS_PARSER *parser; AQFINTS_BPD *bpd; int rv; parser=AQFINTS_Session_GetParser(sess); segmentList=AQFINTS_Segment_List_new(); rv=AQFINTS_Parser_ReadIntoSegmentList(parser, segmentList, ptrBuffer, lenBuffer); if (rv<0) { DBG_ERROR(AQFINTS_LOGDOMAIN, "here (%d)", rv); AQFINTS_Segment_List_free(segmentList); return NULL; } rv=AQFINTS_Parser_ReadSegmentListToDb(parser, segmentList); if (rv<0) { DBG_ERROR(AQFINTS_LOGDOMAIN, "here (%d)", rv); AQFINTS_Segment_List_free(segmentList); return NULL; } bpd=AQFINTS_Session_ExtractBpdFromSegmentList(sess, segmentList); if (bpd==NULL) { DBG_ERROR(AQFINTS_LOGDOMAIN, "Empty BPD"); AQFINTS_Segment_List_free(segmentList); return NULL; } AQFINTS_Segment_List_free(segmentList); return bpd; } int mkGetAnonBpdMessage(AQFINTS_SESSION *sess, const char *bankCode, GWEN_BUFFER *destBuffer) { AQFINTS_MESSAGE *message; AQFINTS_SEGMENT_LIST *segmentList; AQFINTS_SEGMENT *segment; int rv; message=createMessage(sess, bankCode); if (message==NULL) { DBG_ERROR(AQFINTS_LOGDOMAIN, "No message created"); return GWEN_ERROR_INVALID; } segmentList=AQFINTS_Message_GetSegmentList(message); segment=AQFINTS_Segment_List_Last(segmentList); assert(segment); rv=AQFINTS_Session_WrapMessageHeadAndTail(sess, segmentList, AQFINTS_Message_GetDialogId(message), AQFINTS_Message_GetMessageNumber(message), AQFINTS_Message_GetRefMessageNumber(message), AQFINTS_Segment_GetSegmentNumber(segment)); if (rv<0) { DBG_ERROR(AQFINTS_LOGDOMAIN, "here (%d)", rv); AQFINTS_Message_free(message); return rv; } AQFINTS_Segment_List_SampleBuffers(segmentList, destBuffer); AQFINTS_Message_free(message); return 0; } AQFINTS_MESSAGE *createMessage(AQFINTS_SESSION *sess, const char *bankCode) { AQFINTS_PARSER *parser; int hbciVersion; AQFINTS_MESSAGE *message; AQFINTS_SEGMENT *defSegment; AQFINTS_SEGMENT *segment; GWEN_DB_NODE *dbSegment; parser=AQFINTS_Session_GetParser(sess); hbciVersion=AQFINTS_Session_GetHbciVersion(sess); message=AQFINTS_Message_new(); AQFINTS_Message_SetMessageNumber(message, AQFINTS_Session_GetLastMessageNumSent(sess)+1); /* ident */ defSegment=AQFINTS_Parser_FindSegmentHighestVersionForProto(parser, "HKIDN", hbciVersion); if (defSegment==NULL) { DBG_ERROR(AQFINTS_LOGDOMAIN, "No matching definition segment found for HKIDN (proto=%d)", hbciVersion); return NULL; } segment=AQFINTS_Segment_new(); AQFINTS_Segment_copy(segment, defSegment); dbSegment=GWEN_DB_Group_new("ident"); AQFINTS_Segment_SetDbData(segment, dbSegment); GWEN_DB_SetIntValue(dbSegment, GWEN_DB_FLAGS_OVERWRITE_VARS, "country", 280); GWEN_DB_SetCharValue(dbSegment, GWEN_DB_FLAGS_OVERWRITE_VARS, "bankCode", bankCode); GWEN_DB_SetCharValue(dbSegment, GWEN_DB_FLAGS_OVERWRITE_VARS, "customerId", "9999999999"); GWEN_DB_SetCharValue(dbSegment, GWEN_DB_FLAGS_OVERWRITE_VARS, "systemId", "0"); GWEN_DB_SetIntValue(dbSegment, GWEN_DB_FLAGS_OVERWRITE_VARS, "status", 0); AQFINTS_Message_AddSegment(message, segment); /* prepare */ defSegment=AQFINTS_Parser_FindSegmentHighestVersionForProto(parser, "HKVVB", hbciVersion); if (defSegment==NULL) { DBG_ERROR(AQFINTS_LOGDOMAIN, "No matching definition segment found for HKVVB (proto=%d)", hbciVersion); return NULL; } segment=AQFINTS_Segment_new(); AQFINTS_Segment_copy(segment, defSegment); dbSegment=GWEN_DB_Group_new("ident"); AQFINTS_Segment_SetDbData(segment, dbSegment); GWEN_DB_SetIntValue(dbSegment, GWEN_DB_FLAGS_OVERWRITE_VARS, "bpdVersion", 0); GWEN_DB_SetIntValue(dbSegment, GWEN_DB_FLAGS_OVERWRITE_VARS, "updVersion", 0); GWEN_DB_SetIntValue(dbSegment, GWEN_DB_FLAGS_OVERWRITE_VARS, "lang", 1); GWEN_DB_SetCharValue(dbSegment, GWEN_DB_FLAGS_OVERWRITE_VARS, "product", "AqBanking"); GWEN_DB_SetCharValue(dbSegment, GWEN_DB_FLAGS_OVERWRITE_VARS, "version", "5.99"); AQFINTS_Message_AddSegment(message, segment); return message; } aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/session/s_encode.h0000664000175000017500000000155414044534775024613 00000000000000/*************************************************************************** begin : Thu Aug 01 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQFINTS_SESSION_ENCODE_H #define AQFINTS_SESSION_ENCODE_H #include "libaqfints/aqfints.h" #include "libaqfints/msg/message.h" #include "libaqfints/msg/keydescr.h" #include "libaqfints/session/session.h" #include #include GWEN_BUFFER *AQFINTS_Session_EncodeMessage(AQFINTS_SESSION *sess, AQFINTS_MESSAGE *message); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/session/s_encrypt.h0000664000175000017500000000134414044534775025037 00000000000000/*************************************************************************** begin : Sun Oct 27 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQFINTS_SESSION_ENCRYPT_H #define AQFINTS_SESSION_ENCRYPT_H #include "libaqfints/session/session.h" #include "libaqfints/msg/message.h" int AQFINTS_Session_EncryptMessage(AQFINTS_SESSION *sess, AQFINTS_MESSAGE *message); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/session/s_decrypt.h0000664000175000017500000000132614044534775025025 00000000000000/*************************************************************************** begin : Sun Oct 27 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQFINTS_SESSION_DECRYPT_H #define AQFINTS_SESSION_DECRYPT_H #include "./session.h" #include "libaqfints/msg/message.h" int AQFINTS_Session_DecryptMessage(AQFINTS_SESSION *sess, AQFINTS_MESSAGE *message); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/session/pintan/0000755000175000017500000000000015037736161024221 500000000000000aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/session/pintan/s_encrypt_pintan.h0000664000175000017500000000137014044534775027700 00000000000000/*************************************************************************** begin : Sun Oct 27 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQFINTS_SESSION_ENCRYPT_PINTAN_H #define AQFINTS_SESSION_ENCRYPT_PINTAN_H #include "libaqfints/session/session.h" #include "libaqfints/msg/message.h" int AQFINTS_Session_EncryptMessagePinTan(AQFINTS_SESSION *sess, AQFINTS_MESSAGE *message); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/session/pintan/s_pintan_p.h0000664000175000017500000000113514043610745026441 00000000000000/*************************************************************************** begin : Sun Oct 27 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQFINTS_SESSION_PINTAN_P_H #define AQFINTS_SESSION_PINTAN_P_H #include "s_pintan.h" #endif aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/session/pintan/Makefile.in0000644000175000017500000006677415037736025026231 00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ #SUBDIRS= VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/libs/plugins/backends/aqfints/libaqfints/session/pintan ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/distri.m4 $(top_srcdir)/m4/gwenhywfar.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/os.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(dist_typedata_DATA) \ $(noinst_HEADERS) $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libaqfintssession_pin_la_LIBADD = am__objects_1 = am_libaqfintssession_pin_la_OBJECTS = $(am__objects_1) s_pintan.lo \ s_decrypt_pintan.lo s_verify_pintan.lo s_sign_pintan.lo \ s_encrypt_pintan.lo libaqfintssession_pin_la_OBJECTS = \ $(am_libaqfintssession_pin_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/s_decrypt_pintan.Plo \ ./$(DEPDIR)/s_encrypt_pintan.Plo ./$(DEPDIR)/s_pintan.Plo \ ./$(DEPDIR)/s_sign_pintan.Plo ./$(DEPDIR)/s_verify_pintan.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libaqfintssession_pin_la_SOURCES) DIST_SOURCES = $(libaqfintssession_pin_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(typedatadir)" DATA = $(dist_typedata_DATA) HEADERS = $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADD_ACLOCAL_FLAGS = @ADD_ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AQBANKING_CLI_VERSION_STRING = @AQBANKING_CLI_VERSION_STRING@ AQBANKING_FINTS_VERSION_STRING = @AQBANKING_FINTS_VERSION_STRING@ AQBANKING_SO_AGE = @AQBANKING_SO_AGE@ AQBANKING_SO_CURRENT = @AQBANKING_SO_CURRENT@ AQBANKING_SO_EFFECTIVE = @AQBANKING_SO_EFFECTIVE@ AQBANKING_SO_REVISION = @AQBANKING_SO_REVISION@ AQBANKING_VERSION_BUILD = @AQBANKING_VERSION_BUILD@ AQBANKING_VERSION_FULL_STRING = @AQBANKING_VERSION_FULL_STRING@ AQBANKING_VERSION_MAJOR = @AQBANKING_VERSION_MAJOR@ AQBANKING_VERSION_MINOR = @AQBANKING_VERSION_MINOR@ AQBANKING_VERSION_PATCHLEVEL = @AQBANKING_VERSION_PATCHLEVEL@ AQBANKING_VERSION_RELEASE_STRING = @AQBANKING_VERSION_RELEASE_STRING@ AQBANKING_VERSION_STRING = @AQBANKING_VERSION_STRING@ AQBANKING_VERSION_TAG = @AQBANKING_VERSION_TAG@ AQEBICS_CFLAGS = @AQEBICS_CFLAGS@ AQEBICS_LIBS = @AQEBICS_LIBS@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATETIME = @DATETIME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_EXCLUDE_PATTERNS = @DOXYGEN_EXCLUDE_PATTERNS@ DOXYGEN_FILE_PATTERNS = @DOXYGEN_FILE_PATTERNS@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENGUI_GTK2_CFLAGS = @GWENGUI_GTK2_CFLAGS@ GWENGUI_GTK2_LIBS = @GWENGUI_GTK2_LIBS@ GWENHYWFAR_MINIMUM_VERSION = @GWENHYWFAR_MINIMUM_VERSION@ HAVE_GWENGUI_GTK2 = @HAVE_GWENGUI_GTK2@ HAVE_I18N = @HAVE_I18N@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIBXSLT_CFLAGS = @LIBXSLT_CFLAGS@ LIBXSLT_LIBS = @LIBXSLT_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_SUPPORTS_QT = @MSGFMT_SUPPORTS_QT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ TUTORIALS = @TUTORIALS@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XMLMERGE = @XMLMERGE@ XMLSEC_CFLAGS = @XMLSEC_CFLAGS@ XMLSEC_LIBS = @XMLSEC_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ aqbanking_backends = @aqbanking_backends@ aqbanking_cfg_searchdir = @aqbanking_cfg_searchdir@ aqbanking_data_searchdir = @aqbanking_data_searchdir@ aqbanking_headerdir = @aqbanking_headerdir@ aqbanking_headerdir_am = @aqbanking_headerdir_am@ aqbanking_includes = @aqbanking_includes@ aqbanking_internal_libs = @aqbanking_internal_libs@ aqbanking_ldflags = @aqbanking_ldflags@ aqbanking_libs = @aqbanking_libs@ aqbanking_locale_searchdir = @aqbanking_locale_searchdir@ aqbanking_modules = @aqbanking_modules@ aqbanking_pkgdatadir = @aqbanking_pkgdatadir@ aqbanking_plugin_searchdir = @aqbanking_plugin_searchdir@ aqbanking_plugindir = @aqbanking_plugindir@ aqbanking_plugins_backends_dirs = @aqbanking_plugins_backends_dirs@ aqbanking_plugins_backends_libs = @aqbanking_plugins_backends_libs@ aqbanking_plugins_bankinfo_dirs = @aqbanking_plugins_bankinfo_dirs@ aqbanking_plugins_bankinfo_libs = @aqbanking_plugins_bankinfo_libs@ aqbanking_plugins_imexporters_dirs = @aqbanking_plugins_imexporters_dirs@ aqbanking_plugins_imexporters_libs = @aqbanking_plugins_imexporters_libs@ aqbanking_plugins_parsers_dirs = @aqbanking_plugins_parsers_dirs@ aqbanking_symlinkdir = @aqbanking_symlinkdir@ aqbanking_sys_is_windows = @aqbanking_sys_is_windows@ aqbankingpp_modules = @aqbankingpp_modules@ aqebics_datadir = @aqebics_datadir@ aqebics_includes = @aqebics_includes@ aqebics_internal_libs = @aqebics_internal_libs@ aqebics_ldflags = @aqebics_ldflags@ aqebics_libs = @aqebics_libs@ aqfints_datadir = @aqfints_datadir@ aqhbci_datadir = @aqhbci_datadir@ aqhbci_includes = @aqhbci_includes@ aqhbci_internal_libs = @aqhbci_internal_libs@ aqhbci_ldflags = @aqhbci_ldflags@ aqhbci_libs = @aqhbci_libs@ aqofxconnect_includes = @aqofxconnect_includes@ aqofxconnect_internal_libs = @aqofxconnect_internal_libs@ aqofxconnect_libs = @aqofxconnect_libs@ aqpaypal_includes = @aqpaypal_includes@ aqpaypal_internal_libs = @aqpaypal_internal_libs@ aqpaypal_libs = @aqpaypal_libs@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gmp_libs = @gmp_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_dir = @gwenhywfar_dir@ gwenhywfar_has_crypt = @gwenhywfar_has_crypt@ gwenhywfar_headers = @gwenhywfar_headers@ gwenhywfar_includes = @gwenhywfar_includes@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_plugins = @gwenhywfar_plugins@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ typemaker2_exe = @typemaker2_exe@ visibility_cflags = @visibility_cflags@ with_aqebics = @with_aqebics@ with_aqhbci = @with_aqhbci@ AM_CFLAGS = -DBUILDING_AQBANKING @visibility_cflags@ AM_CPPFLAGS = -I$(top_srcdir)/src/libs -I$(top_builddir)/src/libs $(gwenhywfar_includes) $(aqbanking_includes) \ -I$(srcdir)/../../.. \ -I$(srcdir)/../.. \ -I$(srcdir)/.. \ -I$(aqbanking_symlinkdir) $(all_includes) noinst_LTLIBRARIES = libaqfintssession_pin.la typefiles = typedatadir = $(datadir)/aqbanking/typemaker2/c dist_typedata_DATA = built_sources = build_headers_priv = build_headers_pub = build_headers = $(build_headers_priv) $(build_headers_pub) noinst_HEADERS = $(build_headers) \ s_pintan.h \ s_pintan_p.h \ s_decrypt_pintan.h \ s_verify_pintan.h \ s_sign_pintan.h \ s_encrypt_pintan.h libaqfintssession_pin_la_SOURCES = $(built_sources) \ s_pintan.c \ s_decrypt_pintan.c \ s_verify_pintan.c \ s_sign_pintan.c \ s_encrypt_pintan.c #libaqfintssession_pin_la_LIBADD= EXTRA_DIST = $(typefiles) $(built_sources) $(build_headers) all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libs/plugins/backends/aqfints/libaqfints/session/pintan/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libs/plugins/backends/aqfints/libaqfints/session/pintan/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libaqfintssession_pin.la: $(libaqfintssession_pin_la_OBJECTS) $(libaqfintssession_pin_la_DEPENDENCIES) $(EXTRA_libaqfintssession_pin_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libaqfintssession_pin_la_OBJECTS) $(libaqfintssession_pin_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/s_decrypt_pintan.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/s_encrypt_pintan.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/s_pintan.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/s_sign_pintan.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/s_verify_pintan.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-dist_typedataDATA: $(dist_typedata_DATA) @$(NORMAL_INSTALL) @list='$(dist_typedata_DATA)'; test -n "$(typedatadir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(typedatadir)'"; \ $(MKDIR_P) "$(DESTDIR)$(typedatadir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(typedatadir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(typedatadir)" || exit $$?; \ done uninstall-dist_typedataDATA: @$(NORMAL_UNINSTALL) @list='$(dist_typedata_DATA)'; test -n "$(typedatadir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(typedatadir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(typedatadir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/s_decrypt_pintan.Plo -rm -f ./$(DEPDIR)/s_encrypt_pintan.Plo -rm -f ./$(DEPDIR)/s_pintan.Plo -rm -f ./$(DEPDIR)/s_sign_pintan.Plo -rm -f ./$(DEPDIR)/s_verify_pintan.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dist_typedataDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/s_decrypt_pintan.Plo -rm -f ./$(DEPDIR)/s_encrypt_pintan.Plo -rm -f ./$(DEPDIR)/s_pintan.Plo -rm -f ./$(DEPDIR)/s_sign_pintan.Plo -rm -f ./$(DEPDIR)/s_verify_pintan.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-dist_typedataDATA .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-generic clean-libtool clean-noinstLTLIBRARIES \ cscopelist-am ctags ctags-am distclean distclean-compile \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dist_typedataDATA \ install-dvi install-dvi-am install-exec install-exec-am \ install-html install-html-am install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-dist_typedataDATA .PRECIOUS: Makefile built_sources: $(built_sources) list='$(SUBDIRS)'; for d in $$list; do \ $(MAKE) -C $$d built_sources; \ done ; clean_build_files: rm -f $(built_sources) $(build_headers) format_built_files: for f in $(built_sources) $(build_headers); do \ $(ASTYLE) --style=stroustrup -s2 --min-conditional-indent=0 --indent-labels --max-continuation-indent=80 --pad-comma --pad-header --unpad-paren --align-pointer=name --break-closing-braces --break-one-line-headers --attach-return-type --convert-tabs --max-code-length=120 --break-after-logical --suffix=none $$f; \ done sources: for f in $(libaqfintssession_pin_la_SOURCES) $(EXTRA_DIST); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d sources; \ done typefiles: typedefs: cppcheck: for f in $(libaqfintssession_pin_la_SOURCES); do \ cppcheck --force $$f ; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/session/pintan/s_verify_pintan.c0000644000175000017500000000443315037735651027513 00000000000000/*************************************************************************** begin : Sun Oct 27 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "libaqfints/session/pintan/s_verify_pintan.h" #include "libaqfints/parser/parser.h" #include #include #include /* ------------------------------------------------------------------------------------------------ * forward declarations * ------------------------------------------------------------------------------------------------ */ /* ------------------------------------------------------------------------------------------------ * implementations * ------------------------------------------------------------------------------------------------ */ int AQFINTS_Session_VerifySegmentsPinTan(AQFINTS_SESSION *sess, AQFINTS_SEGMENT *segSigHead, AQFINTS_SEGMENT *segSigTail, AQFINTS_SEGMENT *segFirstSigned, AQFINTS_SEGMENT *segLastSigned, int secProfileVersion, const AQFINTS_KEYDESCR *keyDescr) { GWEN_DB_NODE *dbSigTail; const char *sPin; int rv; AQFINTS_SEGMENT *segment; dbSigTail=AQFINTS_Segment_GetDbData(segSigTail); assert(dbSigTail); sPin=GWEN_DB_GetCharValue(dbSigTail, "pin", 0, NULL); if (AQFINTS_Session_GetIsServer(sess)) { rv=AQFINTS_Session_VerifyPin(sess, keyDescr, sPin); if (rv<0) { DBG_INFO(AQFINTS_LOGDOMAIN, "here (%d)", rv); return rv; } } segment=segFirstSigned; while (segment) { AQFINTS_Segment_AddRuntimeFlags(segment, AQFINTS_SEGMENT_RTFLAGS_SIGNED); if (segment==segLastSigned) break; segment=AQFINTS_Segment_List_Next(segment); } return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/session/pintan/s_decrypt_pintan.h0000664000175000017500000000213414044534775027665 00000000000000/*************************************************************************** begin : Sun Oct 27 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQFINTS_SESSION_DECRYPT_PINTAN_H #define AQFINTS_SESSION_DECRYPT_PINTAN_H #include "libaqfints/session/session.h" #include "libaqfints/parser/segment.h" int AQFINTS_Session_DecryptSegmentPinTan(AQFINTS_SESSION *sess, AQFINTS_SEGMENT *segCryptHead, AQFINTS_SEGMENT *segCryptData, const AQFINTS_CRYPTPARAMS *cryptParams, const AQFINTS_KEYDESCR *keyDescr, AQFINTS_SEGMENT_LIST *segmentList); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/session/pintan/s_pintan.h0000664000175000017500000000131314043610745026120 00000000000000/*************************************************************************** begin : Sun Oct 27 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQFINTS_SESSION_PINTAN_H #define AQFINTS_SESSION_PINTAN_H #include "libaqfints/session/session.h" AQFINTS_SESSION *AQFINTS_SessionPinTan_new(AQFINTS_PARSER *parser, AQFINTS_TRANSPORT *trans); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/session/pintan/s_sign_pintan.c0000664000175000017500000002130614044534775027150 00000000000000/*************************************************************************** begin : Sun Oct 27 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "libaqfints/session/pintan/s_sign_pintan.h" #include "libaqfints/session/s_decode.h" #include "libaqfints/parser/parser.h" #include #include #include #include /* ------------------------------------------------------------------------------------------------ * forward declarations * ------------------------------------------------------------------------------------------------ */ static AQFINTS_SEGMENT *_createSigHead(AQFINTS_SESSION *sess, int segNum, const AQFINTS_KEYDESCR *keyDescr, const char *ctrlRef); static AQFINTS_SEGMENT *_createSigTail(AQFINTS_SESSION *sess, int segNum, const AQFINTS_KEYDESCR *keyDescr, const char *ctrlRef); static int _createCtrlRef(char *ptrBuf, size_t lenBuf); static int _prepareSignSeg(AQFINTS_SESSION *sess, const AQFINTS_KEYDESCR *keyDescr, const char *ctrlRef, GWEN_DB_NODE *cfg); /* ------------------------------------------------------------------------------------------------ * implementations * ------------------------------------------------------------------------------------------------ */ int AQFINTS_Session_SignSegmentPinTan(AQFINTS_SESSION *sess, AQFINTS_MESSAGE *message, const AQFINTS_KEYDESCR *keyDescr, AQFINTS_SEGMENT *segFirstToSign, AQFINTS_SEGMENT *segLastToSign, int sigHeadNum, int sigTailNum) { int rv; AQFINTS_SEGMENT_LIST *segmentList; char ctrlref[15]; AQFINTS_SEGMENT *segment; segmentList=AQFINTS_Message_GetSegmentList(message); rv=_createCtrlRef(ctrlref, sizeof(ctrlref)); if (rv<0) { DBG_INFO(AQFINTS_LOGDOMAIN, "here (%d)", rv); return rv; } segment=_createSigHead(sess, sigHeadNum, keyDescr, ctrlref); if (segment==NULL) { DBG_INFO(AQFINTS_LOGDOMAIN, "here"); return GWEN_ERROR_GENERIC; } AQFINTS_Segment_List_Insert(segment, segmentList); segment=_createSigTail(sess, sigTailNum, keyDescr, ctrlref); if (segment==NULL) { DBG_INFO(AQFINTS_LOGDOMAIN, "here"); return GWEN_ERROR_GENERIC; } AQFINTS_Segment_List_Add(segment, segmentList); return 0; } AQFINTS_SEGMENT *_createSigHead(AQFINTS_SESSION *sess, int segNum, const AQFINTS_KEYDESCR *keyDescr, const char *ctrlRef) { GWEN_DB_NODE *dbSegment; AQFINTS_PARSER *parser; int hbciVersion; AQFINTS_SEGMENT *defSegment; AQFINTS_SEGMENT *segment; int rv; parser=AQFINTS_Session_GetParser(sess); hbciVersion=AQFINTS_Session_GetHbciVersion(sess); /* HNSHA */ defSegment=AQFINTS_Parser_FindSegmentHighestVersionForProto(parser, "HNSHK", hbciVersion); if (defSegment==NULL) { DBG_ERROR(AQFINTS_LOGDOMAIN, "No matching definition segment found for HNSHK (proto=%d)", hbciVersion); return NULL; } segment=AQFINTS_Segment_new(); AQFINTS_Segment_copy(segment, defSegment); AQFINTS_Segment_SetSegmentNumber(segment, segNum); dbSegment=GWEN_DB_Group_new("sigHead"); AQFINTS_Segment_SetDbData(segment, dbSegment); rv=_prepareSignSeg(sess, keyDescr, ctrlRef, dbSegment); if (rv<0) { DBG_INFO(AQFINTS_LOGDOMAIN, "here (%d)", rv); AQFINTS_Segment_free(segment); return NULL; } rv=AQFINTS_Session_WriteSegment(sess, segment); if (rv<0) { DBG_INFO(0, "here (%d)", rv); AQFINTS_Segment_free(segment); } return segment; } AQFINTS_SEGMENT *_createSigTail(AQFINTS_SESSION *sess, int segNum, const AQFINTS_KEYDESCR *keyDescr, const char *ctrlRef) { GWEN_DB_NODE *dbSegment; AQFINTS_PARSER *parser; int hbciVersion; AQFINTS_SEGMENT *defSegment; AQFINTS_SEGMENT *segment; int rv; const char *s; parser=AQFINTS_Session_GetParser(sess); hbciVersion=AQFINTS_Session_GetHbciVersion(sess); /* HNSHA */ defSegment=AQFINTS_Parser_FindSegmentHighestVersionForProto(parser, "HNSHA", hbciVersion); if (defSegment==NULL) { DBG_ERROR(AQFINTS_LOGDOMAIN, "No matching definition segment found for HNSHA (proto=%d)", hbciVersion); return NULL; } segment=AQFINTS_Segment_new(); AQFINTS_Segment_copy(segment, defSegment); AQFINTS_Segment_SetSegmentNumber(segment, segNum); dbSegment=GWEN_DB_Group_new("sigTail"); AQFINTS_Segment_SetDbData(segment, dbSegment); GWEN_DB_SetCharValue(dbSegment, GWEN_DB_FLAGS_DEFAULT, "ctrlref", ctrlRef); s=AQFINTS_KeyDescr_GetPin(keyDescr); if (s && *s) GWEN_DB_SetCharValue(dbSegment, GWEN_DB_FLAGS_DEFAULT, "pin", s); s=AQFINTS_KeyDescr_GetTan(keyDescr); if (s && *s) GWEN_DB_SetCharValue(dbSegment, GWEN_DB_FLAGS_DEFAULT, "tan", s); rv=AQFINTS_Session_WriteSegment(sess, segment); if (rv<0) { DBG_INFO(AQFINTS_LOGDOMAIN, "here (%d)", rv); AQFINTS_Segment_free(segment); } return segment; } int _createCtrlRef(char *ptrBuf, size_t lenBuf) { struct tm *lt; time_t tt; tt=time(0); lt=localtime(&tt); if (!strftime(ptrBuf, lenBuf, "%Y%m%d%H%M%S", lt)) { DBG_INFO(AQFINTS_LOGDOMAIN, "CtrlRef string too long"); return GWEN_ERROR_INTERNAL; } return 0; } int _prepareSignSeg(AQFINTS_SESSION *sess, const AQFINTS_KEYDESCR *keyDescr, const char *ctrlRef, GWEN_DB_NODE *cfg) { char sdate[9]; char stime[7]; struct tm *lt; time_t tt; /* some preparations */ tt=time(0); lt=localtime(&tt); /* create date */ if (!strftime(sdate, sizeof(sdate), "%Y%m%d", lt)) { DBG_INFO(AQFINTS_LOGDOMAIN, "Date string too long"); return GWEN_ERROR_INTERNAL; } /* create time */ if (!strftime(stime, sizeof(stime), "%H%M%S", lt)) { DBG_INFO(AQFINTS_LOGDOMAIN, "Date string too long"); return GWEN_ERROR_INTERNAL; } /* store info */ GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "function", 2); GWEN_DB_SetCharValue(cfg, GWEN_DB_FLAGS_DEFAULT, "ctrlref", ctrlRef); GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "area", 1); GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "role", 1); GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "SecDetails/dir", AQFINTS_Session_GetIsServer(sess)?2:1); /* 1 client, 2=server */ GWEN_DB_SetCharValue(cfg, GWEN_DB_FLAGS_DEFAULT, "SecDetails/secId", AQFINTS_KeyDescr_GetSystemId(keyDescr)); GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "signseq", AQFINTS_KeyDescr_GetSignatureCounter(keyDescr)); GWEN_DB_SetCharValue(cfg, GWEN_DB_FLAGS_DEFAULT, "SecStamp/date", sdate); GWEN_DB_SetCharValue(cfg, GWEN_DB_FLAGS_DEFAULT, "SecStamp/time", stime); /* hashAlgo */ GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "hashAlgo/purpose", 1); GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "hashAlgo/algo", 999); GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "hashAlgo/pname", 1); /* signAlgo */ GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "signAlgo/purpose", 6); GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "signAlgo/algo", 10); GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "signAlgo/mode", 16); /* keyname */ GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "key/country", AQFINTS_KeyDescr_GetCountry(keyDescr)); GWEN_DB_SetCharValue(cfg, GWEN_DB_FLAGS_DEFAULT, "key/bankcode", AQFINTS_KeyDescr_GetBankCode(keyDescr)); GWEN_DB_SetCharValue(cfg, GWEN_DB_FLAGS_DEFAULT, "key/userid", AQFINTS_KeyDescr_GetUserId(keyDescr)); GWEN_DB_SetCharValue(cfg, GWEN_DB_FLAGS_DEFAULT, "key/keytype", AQFINTS_KeyDescr_GetKeyType(keyDescr)); GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "key/keynum", AQFINTS_KeyDescr_GetKeyNumber(keyDescr)); GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "key/keyversion", AQFINTS_KeyDescr_GetKeyVersion(keyDescr)); /* security profile */ GWEN_DB_SetCharValue(cfg, GWEN_DB_FLAGS_DEFAULT, "secProfile/code", AQFINTS_KeyDescr_GetSecurityProfileName(keyDescr)); GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "secProfile/version", AQFINTS_KeyDescr_GetSecurityProfileVersion(keyDescr)); return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/session/pintan/Makefile.am0000664000175000017500000000356414043610745026202 00000000000000#SUBDIRS= AM_CFLAGS=-DBUILDING_AQBANKING @visibility_cflags@ AM_CPPFLAGS = -I$(top_srcdir)/src/libs -I$(top_builddir)/src/libs $(gwenhywfar_includes) $(aqbanking_includes) \ -I$(srcdir)/../../.. \ -I$(srcdir)/../.. \ -I$(srcdir)/.. \ -I$(aqbanking_symlinkdir) $(all_includes) noinst_LTLIBRARIES=libaqfintssession_pin.la typefiles= typedatadir=$(datadir)/aqbanking/typemaker2/c dist_typedata_DATA= built_sources= build_headers_priv= build_headers_pub= build_headers=$(build_headers_priv) $(build_headers_pub) noinst_HEADERS= $(build_headers) \ s_pintan.h \ s_pintan_p.h \ s_decrypt_pintan.h \ s_verify_pintan.h \ s_sign_pintan.h \ s_encrypt_pintan.h libaqfintssession_pin_la_SOURCES=$(built_sources) \ s_pintan.c \ s_decrypt_pintan.c \ s_verify_pintan.c \ s_sign_pintan.c \ s_encrypt_pintan.c #libaqfintssession_pin_la_LIBADD= EXTRA_DIST=$(typefiles) $(built_sources) $(build_headers) built_sources: $(built_sources) list='$(SUBDIRS)'; for d in $$list; do \ $(MAKE) -C $$d built_sources; \ done ; clean_build_files: rm -f $(built_sources) $(build_headers) format_built_files: for f in $(built_sources) $(build_headers); do \ $(ASTYLE) --style=stroustrup -s2 --min-conditional-indent=0 --indent-labels --max-continuation-indent=80 --pad-comma --pad-header --unpad-paren --align-pointer=name --break-closing-braces --break-one-line-headers --attach-return-type --convert-tabs --max-code-length=120 --break-after-logical --suffix=none $$f; \ done sources: for f in $(libaqfintssession_pin_la_SOURCES) $(EXTRA_DIST); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d sources; \ done typefiles: typedefs: cppcheck: for f in $(libaqfintssession_pin_la_SOURCES); do \ cppcheck --force $$f ; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/session/pintan/s_decrypt_pintan.c0000664000175000017500000000573114044534775027666 00000000000000/*************************************************************************** begin : Sun Oct 27 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "libaqfints/session/pintan/s_decrypt_pintan.h" #include "libaqfints/parser/parser.h" #include #include #include /* ------------------------------------------------------------------------------------------------ * forward declarations * ------------------------------------------------------------------------------------------------ */ /* ------------------------------------------------------------------------------------------------ * implementations * ------------------------------------------------------------------------------------------------ */ int AQFINTS_Session_DecryptSegmentPinTan(AQFINTS_SESSION *sess, AQFINTS_SEGMENT *segCryptHead, AQFINTS_SEGMENT *segCryptData, const AQFINTS_CRYPTPARAMS *cryptParams, const AQFINTS_KEYDESCR *keyDescr, AQFINTS_SEGMENT_LIST *segmentList) { GWEN_DB_NODE *dbCryptData; unsigned int len=0; const uint8_t *ptr; dbCryptData=AQFINTS_Segment_GetDbData(segCryptData); assert(dbCryptData); ptr=(const uint8_t *) GWEN_DB_GetBinValue(dbCryptData, "CryptData", 0, NULL, 0, &len); if (ptr==NULL || len<1) { DBG_ERROR(AQFINTS_LOGDOMAIN, "No CryptData in segment"); return GWEN_ERROR_BAD_DATA; } else { AQFINTS_PARSER *parser; AQFINTS_SEGMENT_LIST *newSegmentList; AQFINTS_SEGMENT *segment; int rv; parser=AQFINTS_Session_GetParser(sess); newSegmentList=AQFINTS_Segment_List_new(); rv=AQFINTS_Parser_ReadIntoSegmentList(parser, newSegmentList, ptr, len); if (rv<0) { DBG_INFO(AQFINTS_LOGDOMAIN, "here (%d)", rv); AQFINTS_Segment_List_free(newSegmentList); return rv; } rv=AQFINTS_Parser_ReadSegmentListToDb(parser, newSegmentList); if (rv<0) { DBG_ERROR(0, "here (%d)", rv); AQFINTS_Segment_List_free(newSegmentList); return rv; } /* move new segments to given segment list, delete new segment list */ while ((segment=AQFINTS_Segment_List_First(newSegmentList))) { AQFINTS_Segment_AddRuntimeFlags(segment, AQFINTS_SEGMENT_RTFLAGS_ENCRYPTED); AQFINTS_Segment_List_Del(segment); AQFINTS_Segment_List_Add(segment, segmentList); } AQFINTS_Segment_List_free(newSegmentList); /* done */ return 0; } } aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/session/pintan/s_verify_pintan.h0000664000175000017500000000221114044534775027513 00000000000000/*************************************************************************** begin : Sun Oct 27 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQFINTS_SESSION_VERIFY_PINTAN_H #define AQFINTS_SESSION_VERIFY_PINTAN_H #include "libaqfints/session/session.h" #include "libaqfints/parser/segment.h" int AQFINTS_Session_VerifySegmentsPinTan(AQFINTS_SESSION *sess, AQFINTS_SEGMENT *segSigHead, AQFINTS_SEGMENT *segSigTail, AQFINTS_SEGMENT *segFirstSigned, AQFINTS_SEGMENT *segLastSigned, int secProfileVersion, const AQFINTS_KEYDESCR *keyDescr); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/session/pintan/s_encrypt_pintan.c0000664000175000017500000002065014044534775027675 00000000000000/*************************************************************************** begin : Sun Oct 27 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "libaqfints/session/pintan/s_encrypt_pintan.h" #include "libaqfints/parser/parser.h" #include #include #include #include /* ------------------------------------------------------------------------------------------------ * forward declarations * ------------------------------------------------------------------------------------------------ */ static AQFINTS_SEGMENT *_createCryptHead(AQFINTS_SESSION *sess, const AQFINTS_KEYDESCR *keyDescr); static AQFINTS_SEGMENT *_createCryptData(AQFINTS_SESSION *sess, const AQFINTS_KEYDESCR *keyDescr, const uint8_t *ptrEncryptedData, uint32_t lenEncryptedData); static GWEN_BUFFER *_getSegmentListData(AQFINTS_SEGMENT_LIST *segmentList); static int _prepareCryptSeg(AQFINTS_SESSION *sess, const AQFINTS_KEYDESCR *keyDescr, GWEN_DB_NODE *cfg); /* ------------------------------------------------------------------------------------------------ * implementations * ------------------------------------------------------------------------------------------------ */ int AQFINTS_Session_EncryptMessagePinTan(AQFINTS_SESSION *sess, AQFINTS_MESSAGE *message) { AQFINTS_SEGMENT_LIST *segmentList; AQFINTS_SEGMENT *segCryptHead; AQFINTS_SEGMENT *segCryptData; GWEN_BUFFER *bufDataToEncrypt; const AQFINTS_KEYDESCR *keyDescr; keyDescr=AQFINTS_Message_GetCrypter(message); if (keyDescr==NULL) { DBG_ERROR(AQFINTS_LOGDOMAIN, "No crypter set"); return GWEN_ERROR_GENERIC; } segmentList=AQFINTS_Message_GetSegmentList(message); bufDataToEncrypt=_getSegmentListData(segmentList); segCryptHead=_createCryptHead(sess, keyDescr); if (segCryptHead==NULL) { DBG_INFO(AQFINTS_LOGDOMAIN, "here"); GWEN_Buffer_free(bufDataToEncrypt); return GWEN_ERROR_GENERIC; } segCryptData=_createCryptData(sess, keyDescr, (const uint8_t *) GWEN_Buffer_GetStart(bufDataToEncrypt), GWEN_Buffer_GetUsedBytes(bufDataToEncrypt)); if (segCryptData==NULL) { DBG_INFO(AQFINTS_LOGDOMAIN, "here"); AQFINTS_Segment_free(segCryptHead); GWEN_Buffer_free(bufDataToEncrypt); return GWEN_ERROR_GENERIC; } GWEN_Buffer_free(bufDataToEncrypt); /* replace segment list in message with HNVSK and HNVSD */ AQFINTS_Segment_List_Clear(segmentList); AQFINTS_Segment_List_Add(segCryptHead, segmentList); AQFINTS_Segment_List_Add(segCryptData, segmentList); return 0; } GWEN_BUFFER *_getSegmentListData(AQFINTS_SEGMENT_LIST *segmentList) { GWEN_BUFFER *buf; buf=GWEN_Buffer_new(0, 1024, 0, 1); AQFINTS_Segment_List_SampleBuffers(segmentList, buf); return buf; } AQFINTS_SEGMENT *_createCryptHead(AQFINTS_SESSION *sess, const AQFINTS_KEYDESCR *keyDescr) { GWEN_DB_NODE *dbSegment; AQFINTS_PARSER *parser; int hbciVersion; AQFINTS_SEGMENT *defSegment; AQFINTS_SEGMENT *segment; int rv; parser=AQFINTS_Session_GetParser(sess); hbciVersion=AQFINTS_Session_GetHbciVersion(sess); /* HNSHA */ defSegment=AQFINTS_Parser_FindSegmentHighestVersionForProto(parser, "HNVSK", hbciVersion); if (defSegment==NULL) { DBG_ERROR(AQFINTS_LOGDOMAIN, "No matching definition segment found for HNVSK (proto=%d)", hbciVersion); return NULL; } segment=AQFINTS_Segment_new(); AQFINTS_Segment_copy(segment, defSegment); AQFINTS_Segment_SetSegmentNumber(segment, 998); dbSegment=GWEN_DB_Group_new("cryptHead"); AQFINTS_Segment_SetDbData(segment, dbSegment); rv=_prepareCryptSeg(sess, keyDescr, dbSegment); if (rv<0) { DBG_INFO(AQFINTS_LOGDOMAIN, "here (%d)", rv); return NULL; } rv=AQFINTS_Session_WriteSegment(sess, segment); if (rv<0) { DBG_INFO(AQFINTS_LOGDOMAIN, "here (%d)", rv); AQFINTS_Segment_free(segment); return NULL; } return segment; } AQFINTS_SEGMENT *_createCryptData(AQFINTS_SESSION *sess, const AQFINTS_KEYDESCR *keyDescr, const uint8_t *ptrEncryptedData, uint32_t lenEncryptedData) { GWEN_DB_NODE *dbSegment; AQFINTS_PARSER *parser; int hbciVersion; AQFINTS_SEGMENT *defSegment; AQFINTS_SEGMENT *segment; int rv; parser=AQFINTS_Session_GetParser(sess); hbciVersion=AQFINTS_Session_GetHbciVersion(sess); /* HNSHA */ defSegment=AQFINTS_Parser_FindSegmentHighestVersionForProto(parser, "HNVSD", hbciVersion); if (defSegment==NULL) { DBG_ERROR(AQFINTS_LOGDOMAIN, "No matching definition segment found for HNVSD (proto=%d)", hbciVersion); return NULL; } segment=AQFINTS_Segment_new(); AQFINTS_Segment_copy(segment, defSegment); AQFINTS_Segment_SetSegmentNumber(segment, 999); dbSegment=GWEN_DB_Group_new("cryptData"); AQFINTS_Segment_SetDbData(segment, dbSegment); if (ptrEncryptedData && lenEncryptedData) GWEN_DB_SetBinValue(dbSegment, GWEN_DB_FLAGS_DEFAULT, "cryptData", ptrEncryptedData, lenEncryptedData); rv=AQFINTS_Session_WriteSegment(sess, segment); if (rv<0) { DBG_INFO(AQFINTS_LOGDOMAIN, "here (%d)", rv); AQFINTS_Segment_free(segment); return NULL; } return segment; } int _prepareCryptSeg(AQFINTS_SESSION *sess, const AQFINTS_KEYDESCR *keyDescr, GWEN_DB_NODE *cfg) { char sdate[9]; char stime[7]; struct tm *lt; time_t tt; /* some preparations */ tt=time(0); lt=localtime(&tt); /* create date */ if (!strftime(sdate, sizeof(sdate), "%Y%m%d", lt)) { DBG_INFO(AQFINTS_LOGDOMAIN, "Date string too long"); return GWEN_ERROR_INTERNAL; } /* create time */ if (!strftime(stime, sizeof(stime), "%H%M%S", lt)) { DBG_INFO(AQFINTS_LOGDOMAIN, "Date string too long"); return GWEN_ERROR_INTERNAL; } /* store info */ /* security profile */ GWEN_DB_SetCharValue(cfg, GWEN_DB_FLAGS_DEFAULT, "secProfile/code", AQFINTS_KeyDescr_GetSecurityProfileName(keyDescr)); GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "secProfile/version", AQFINTS_KeyDescr_GetSecurityProfileVersion(keyDescr)); GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "function", 998); GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "role", 1); /* security details */ GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "SecDetails/dir", AQFINTS_Session_GetIsServer(sess)?2:1); /* 1 client, 2=server */ GWEN_DB_SetCharValue(cfg, GWEN_DB_FLAGS_DEFAULT, "SecDetails/secId", AQFINTS_KeyDescr_GetSystemId(keyDescr)); /* security stamp */ GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "SecStamp/stampCode", 1); GWEN_DB_SetCharValue(cfg, GWEN_DB_FLAGS_DEFAULT, "SecStamp/date", sdate); GWEN_DB_SetCharValue(cfg, GWEN_DB_FLAGS_DEFAULT, "SecStamp/time", stime); /* cryptAlgo */ GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "cryptAlgo/purpose", 2); GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "cryptAlgo/mode", 2); GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "cryptAlgo/algo", 13); GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "cryptAlgo/pname", 1); GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "cryptAlgo/keytype", 6); GWEN_DB_SetBinValue(cfg, GWEN_DB_FLAGS_DEFAULT, "cryptAlgo/msgKey", "NOKEY", 5); /* keyname */ GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "key/country", AQFINTS_KeyDescr_GetCountry(keyDescr)); GWEN_DB_SetCharValue(cfg, GWEN_DB_FLAGS_DEFAULT, "key/bankcode", AQFINTS_KeyDescr_GetBankCode(keyDescr)); GWEN_DB_SetCharValue(cfg, GWEN_DB_FLAGS_DEFAULT, "key/userid", AQFINTS_KeyDescr_GetUserId(keyDescr)); GWEN_DB_SetCharValue(cfg, GWEN_DB_FLAGS_DEFAULT, "key/keytype", AQFINTS_KeyDescr_GetKeyType(keyDescr)); GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "key/keynum", AQFINTS_KeyDescr_GetKeyNumber(keyDescr)); GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "key/keyversion", AQFINTS_KeyDescr_GetKeyVersion(keyDescr)); GWEN_DB_SetCharValue(cfg, GWEN_DB_FLAGS_DEFAULT, "compress", "0"); return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/session/pintan/s_pintan.c0000664000175000017500000000317114043610745026117 00000000000000/*************************************************************************** begin : Sun Oct 27 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "s_pintan.h" #include /* ------------------------------------------------------------------------------------------------ * forward declarations * ------------------------------------------------------------------------------------------------ */ static AQFINTS_MESSAGE *GWENHYWFAR_CB _exchangeMessages(AQFINTS_SESSION *sess, AQFINTS_MESSAGE *messageOut); /* ------------------------------------------------------------------------------------------------ * implementations * ------------------------------------------------------------------------------------------------ */ AQFINTS_SESSION *AQFINTS_SessionPinTan_new(AQFINTS_PARSER *parser, AQFINTS_TRANSPORT *trans) { AQFINTS_SESSION *sess; sess=AQFINTS_Session_new(parser, trans); assert(sess); AQFINTS_Session_SetExchangeMessagesFn(sess, _exchangeMessages); return sess; } AQFINTS_MESSAGE *_exchangeMessages(AQFINTS_SESSION *sess, AQFINTS_MESSAGE *messageOut) { /* for now (later check for two-step tan) */ return AQFINTS_Session_DirectlyExchangeMessages(sess, messageOut); } aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/session/pintan/s_sign_pintan.h0000664000175000017500000000224214044534775027153 00000000000000/*************************************************************************** begin : Sun Oct 27 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQFINTS_SESSION_SIGN_PINTAN_H #define AQFINTS_SESSION_SIGN_PINTAN_H #include "libaqfints/session/session.h" #include "libaqfints/msg/message.h" #include "libaqfints/msg/keydescr.h" #include "libaqfints/parser/segment.h" int AQFINTS_Session_SignSegmentPinTan(AQFINTS_SESSION *sess, AQFINTS_MESSAGE *message, const AQFINTS_KEYDESCR *keyDescr, AQFINTS_SEGMENT *segFirstToSign, AQFINTS_SEGMENT *segLastToSign, int sigHeadNum, int sigTailNum); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/session/cryptparams.c0000664000175000017500000004065415037736055025376 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "cryptparams.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "./cryptparams_p.h" #include #include /* code headers */ /* macro functions */ AQFINTS_CRYPTPARAMS_OPMODE AQFINTS_CryptParams_OpMode_fromString(const char *p_s) { if (p_s && *p_s) { if (strcasecmp(p_s, "none")==0) return AQFINTS_CryptParams_OpModeNone; else if (strcasecmp(p_s, "cbc")==0) return AQFINTS_CryptParams_OpModeCbc; else if (strcasecmp(p_s, "iso9796_1")==0) return AQFINTS_CryptParams_OpModeIso9796_1; else if (strcasecmp(p_s, "iso9796_2")==0) return AQFINTS_CryptParams_OpModeIso9796_2; else if (strcasecmp(p_s, "rsa_Pkcs1_v1_5")==0) return AQFINTS_CryptParams_OpModeRsa_Pkcs1_v1_5; else if (strcasecmp(p_s, "rsa_Pss")==0) return AQFINTS_CryptParams_OpModeRsa_Pss; else if (strcasecmp(p_s, "retail_MAC")==0) return AQFINTS_CryptParams_OpModeRetail_MAC; } return AQFINTS_CryptParams_OpModeUnknown; } AQFINTS_CRYPTPARAMS_HASHALGO AQFINTS_CryptParams_HashAlgo_fromString(const char *p_s) { if (p_s && *p_s) { if (strcasecmp(p_s, "none")==0) return AQFINTS_CryptParams_HashAlgoNone; else if (strcasecmp(p_s, "sha1")==0) return AQFINTS_CryptParams_HashAlgoSha1; else if (strcasecmp(p_s, "sha256")==0) return AQFINTS_CryptParams_HashAlgoSha256; else if (strcasecmp(p_s, "sha256sha256")==0) return AQFINTS_CryptParams_HashAlgoSha256sha256; else if (strcasecmp(p_s, "ripeMd160")==0) return AQFINTS_CryptParams_HashAlgoRipeMd160; } return AQFINTS_CryptParams_HashAlgoUnknown; } AQFINTS_CRYPTPARAMS_SIGNALGO AQFINTS_CryptParams_SignAlgo_fromString(const char *p_s) { if (p_s && *p_s) { if (strcasecmp(p_s, "none")==0) return AQFINTS_CryptParams_SignAlgoNone; else if (strcasecmp(p_s, "des")==0) return AQFINTS_CryptParams_SignAlgoDes; else if (strcasecmp(p_s, "rsa")==0) return AQFINTS_CryptParams_SignAlgoRsa; } return AQFINTS_CryptParams_SignAlgoUnknown; } AQFINTS_CRYPTPARAMS_CRYPTALGO AQFINTS_CryptParams_CryptAlgo_fromString(const char *p_s) { if (p_s && *p_s) { if (strcasecmp(p_s, "none")==0) return AQFINTS_CryptParams_CryptAlgoNone; else if (strcasecmp(p_s, "twoKeyTripleDes")==0) return AQFINTS_CryptParams_CryptAlgoTwoKeyTripleDes; else if (strcasecmp(p_s, "aes256")==0) return AQFINTS_CryptParams_CryptAlgoAes256; } return AQFINTS_CryptParams_CryptAlgoUnknown; } AQFINTS_CRYPTPARAMS_SIGUSAGE AQFINTS_CryptParams_SigUsage_fromString(const char *p_s) { if (p_s && *p_s) { if (strcasecmp(p_s, "none")==0) return AQFINTS_CryptParams_SigUsageNone; else if (strcasecmp(p_s, "ownerSigning")==0) return AQFINTS_CryptParams_SigUsageOwnerSigning; } return AQFINTS_CryptParams_SigUsageUnknown; } const char *AQFINTS_CryptParams_OpMode_toString(AQFINTS_CRYPTPARAMS_OPMODE p_i) { switch(p_i) { case AQFINTS_CryptParams_OpModeNone: return "none"; case AQFINTS_CryptParams_OpModeCbc: return "cbc"; case AQFINTS_CryptParams_OpModeIso9796_1: return "iso9796_1"; case AQFINTS_CryptParams_OpModeIso9796_2: return "iso9796_2"; case AQFINTS_CryptParams_OpModeRsa_Pkcs1_v1_5: return "rsa_Pkcs1_v1_5"; case AQFINTS_CryptParams_OpModeRsa_Pss: return "rsa_Pss"; case AQFINTS_CryptParams_OpModeRetail_MAC: return "retail_MAC"; case AQFINTS_CryptParams_OpModeUnknown: default: return "unknown"; } } const char *AQFINTS_CryptParams_HashAlgo_toString(AQFINTS_CRYPTPARAMS_HASHALGO p_i) { switch(p_i) { case AQFINTS_CryptParams_HashAlgoNone: return "none"; case AQFINTS_CryptParams_HashAlgoSha1: return "sha1"; case AQFINTS_CryptParams_HashAlgoSha256: return "sha256"; case AQFINTS_CryptParams_HashAlgoSha256sha256: return "sha256sha256"; case AQFINTS_CryptParams_HashAlgoRipeMd160: return "ripeMd160"; case AQFINTS_CryptParams_HashAlgoUnknown: default: return "unknown"; } } const char *AQFINTS_CryptParams_SignAlgo_toString(AQFINTS_CRYPTPARAMS_SIGNALGO p_i) { switch(p_i) { case AQFINTS_CryptParams_SignAlgoNone: return "none"; case AQFINTS_CryptParams_SignAlgoDes: return "des"; case AQFINTS_CryptParams_SignAlgoRsa: return "rsa"; case AQFINTS_CryptParams_SignAlgoUnknown: default: return "unknown"; } } const char *AQFINTS_CryptParams_CryptAlgo_toString(AQFINTS_CRYPTPARAMS_CRYPTALGO p_i) { switch(p_i) { case AQFINTS_CryptParams_CryptAlgoNone: return "none"; case AQFINTS_CryptParams_CryptAlgoTwoKeyTripleDes: return "twoKeyTripleDes"; case AQFINTS_CryptParams_CryptAlgoAes256: return "aes256"; case AQFINTS_CryptParams_CryptAlgoUnknown: default: return "unknown"; } } const char *AQFINTS_CryptParams_SigUsage_toString(AQFINTS_CRYPTPARAMS_SIGUSAGE p_i) { switch(p_i) { case AQFINTS_CryptParams_SigUsageNone: return "none"; case AQFINTS_CryptParams_SigUsageOwnerSigning: return "ownerSigning"; case AQFINTS_CryptParams_SigUsageUnknown: default: return "unknown"; } } AQFINTS_CRYPTPARAMS *AQFINTS_CryptParams_new(void) { AQFINTS_CRYPTPARAMS *p_struct; GWEN_NEW_OBJECT(AQFINTS_CRYPTPARAMS, p_struct) /* members */ p_struct->securityProfileName=NULL; p_struct->securityProfileVersion=0; p_struct->signAlgo=AQFINTS_CryptParams_SignAlgoUnknown; p_struct->opModeSign=AQFINTS_CryptParams_OpModeUnknown; p_struct->opModeAuth=AQFINTS_CryptParams_OpModeUnknown; p_struct->sigUsage=AQFINTS_CryptParams_SigUsageUnknown; p_struct->hashAlgoSign=AQFINTS_CryptParams_HashAlgoUnknown; p_struct->hashAlgoAuth=AQFINTS_CryptParams_HashAlgoUnknown; p_struct->cryptAlgo=AQFINTS_CryptParams_CryptAlgoUnknown; p_struct->opModeCrypt=AQFINTS_CryptParams_OpModeUnknown; /* virtual functions */ return p_struct; } void AQFINTS_CryptParams_free(AQFINTS_CRYPTPARAMS *p_struct) { if (p_struct) { /* members */ free(p_struct->securityProfileName); p_struct->securityProfileName=NULL; GWEN_FREE_OBJECT(p_struct); } } AQFINTS_CRYPTPARAMS *AQFINTS_CryptParams_dup(const AQFINTS_CRYPTPARAMS *p_src) { AQFINTS_CRYPTPARAMS *p_struct; assert(p_src); p_struct=AQFINTS_CryptParams_new(); /* member "securityProfileName" */ if (p_struct->securityProfileName) { free(p_struct->securityProfileName); p_struct->securityProfileName=NULL; p_struct->securityProfileName=NULL; } if (p_src->securityProfileName) { p_struct->securityProfileName=strdup(p_src->securityProfileName); } /* member "securityProfileVersion" */ p_struct->securityProfileVersion=p_src->securityProfileVersion; /* member "signAlgo" */ p_struct->signAlgo=p_src->signAlgo; /* member "opModeSign" */ p_struct->opModeSign=p_src->opModeSign; /* member "opModeAuth" */ p_struct->opModeAuth=p_src->opModeAuth; /* member "sigUsage" */ p_struct->sigUsage=p_src->sigUsage; /* member "hashAlgoSign" */ p_struct->hashAlgoSign=p_src->hashAlgoSign; /* member "hashAlgoAuth" */ p_struct->hashAlgoAuth=p_src->hashAlgoAuth; /* member "cryptAlgo" */ p_struct->cryptAlgo=p_src->cryptAlgo; /* member "opModeCrypt" */ p_struct->opModeCrypt=p_src->opModeCrypt; return p_struct; } AQFINTS_CRYPTPARAMS *AQFINTS_CryptParams_copy(AQFINTS_CRYPTPARAMS *p_struct, const AQFINTS_CRYPTPARAMS *p_src) { assert(p_struct); assert(p_src); /* member "securityProfileName" */ if (p_struct->securityProfileName) { free(p_struct->securityProfileName); p_struct->securityProfileName=NULL; p_struct->securityProfileName=NULL; } if (p_src->securityProfileName) { p_struct->securityProfileName=strdup(p_src->securityProfileName); } /* member "securityProfileVersion" */ p_struct->securityProfileVersion=p_src->securityProfileVersion; /* member "signAlgo" */ p_struct->signAlgo=p_src->signAlgo; /* member "opModeSign" */ p_struct->opModeSign=p_src->opModeSign; /* member "opModeAuth" */ p_struct->opModeAuth=p_src->opModeAuth; /* member "sigUsage" */ p_struct->sigUsage=p_src->sigUsage; /* member "hashAlgoSign" */ p_struct->hashAlgoSign=p_src->hashAlgoSign; /* member "hashAlgoAuth" */ p_struct->hashAlgoAuth=p_src->hashAlgoAuth; /* member "cryptAlgo" */ p_struct->cryptAlgo=p_src->cryptAlgo; /* member "opModeCrypt" */ p_struct->opModeCrypt=p_src->opModeCrypt; return p_struct; } const char *AQFINTS_CryptParams_GetSecurityProfileName(const AQFINTS_CRYPTPARAMS *p_struct){ assert(p_struct); return p_struct->securityProfileName; } int AQFINTS_CryptParams_GetSecurityProfileVersion(const AQFINTS_CRYPTPARAMS *p_struct){ assert(p_struct); return p_struct->securityProfileVersion; } AQFINTS_CRYPTPARAMS_SIGNALGO AQFINTS_CryptParams_GetSignAlgo(const AQFINTS_CRYPTPARAMS *p_struct){ assert(p_struct); return p_struct->signAlgo; } AQFINTS_CRYPTPARAMS_OPMODE AQFINTS_CryptParams_GetOpModeSign(const AQFINTS_CRYPTPARAMS *p_struct){ assert(p_struct); return p_struct->opModeSign; } AQFINTS_CRYPTPARAMS_OPMODE AQFINTS_CryptParams_GetOpModeAuth(const AQFINTS_CRYPTPARAMS *p_struct){ assert(p_struct); return p_struct->opModeAuth; } AQFINTS_CRYPTPARAMS_SIGUSAGE AQFINTS_CryptParams_GetSigUsage(const AQFINTS_CRYPTPARAMS *p_struct){ assert(p_struct); return p_struct->sigUsage; } AQFINTS_CRYPTPARAMS_HASHALGO AQFINTS_CryptParams_GetHashAlgoSign(const AQFINTS_CRYPTPARAMS *p_struct){ assert(p_struct); return p_struct->hashAlgoSign; } AQFINTS_CRYPTPARAMS_HASHALGO AQFINTS_CryptParams_GetHashAlgoAuth(const AQFINTS_CRYPTPARAMS *p_struct){ assert(p_struct); return p_struct->hashAlgoAuth; } AQFINTS_CRYPTPARAMS_CRYPTALGO AQFINTS_CryptParams_GetCryptAlgo(const AQFINTS_CRYPTPARAMS *p_struct){ assert(p_struct); return p_struct->cryptAlgo; } AQFINTS_CRYPTPARAMS_OPMODE AQFINTS_CryptParams_GetOpModeCrypt(const AQFINTS_CRYPTPARAMS *p_struct){ assert(p_struct); return p_struct->opModeCrypt; } void AQFINTS_CryptParams_SetSecurityProfileName(AQFINTS_CRYPTPARAMS *p_struct, const char *p_src){ assert(p_struct); if (p_struct->securityProfileName) { free(p_struct->securityProfileName); p_struct->securityProfileName=NULL; p_struct->securityProfileName=NULL; } if (p_src) { p_struct->securityProfileName=strdup(p_src); } else { p_struct->securityProfileName=NULL; } } void AQFINTS_CryptParams_SetSecurityProfileVersion(AQFINTS_CRYPTPARAMS *p_struct, int p_src){ assert(p_struct); p_struct->securityProfileVersion=p_src; } void AQFINTS_CryptParams_SetSignAlgo(AQFINTS_CRYPTPARAMS *p_struct, AQFINTS_CRYPTPARAMS_SIGNALGO p_src){ assert(p_struct); p_struct->signAlgo=p_src; } void AQFINTS_CryptParams_SetOpModeSign(AQFINTS_CRYPTPARAMS *p_struct, AQFINTS_CRYPTPARAMS_OPMODE p_src){ assert(p_struct); p_struct->opModeSign=p_src; } void AQFINTS_CryptParams_SetOpModeAuth(AQFINTS_CRYPTPARAMS *p_struct, AQFINTS_CRYPTPARAMS_OPMODE p_src){ assert(p_struct); p_struct->opModeAuth=p_src; } void AQFINTS_CryptParams_SetSigUsage(AQFINTS_CRYPTPARAMS *p_struct, AQFINTS_CRYPTPARAMS_SIGUSAGE p_src){ assert(p_struct); p_struct->sigUsage=p_src; } void AQFINTS_CryptParams_SetHashAlgoSign(AQFINTS_CRYPTPARAMS *p_struct, AQFINTS_CRYPTPARAMS_HASHALGO p_src){ assert(p_struct); p_struct->hashAlgoSign=p_src; } void AQFINTS_CryptParams_SetHashAlgoAuth(AQFINTS_CRYPTPARAMS *p_struct, AQFINTS_CRYPTPARAMS_HASHALGO p_src){ assert(p_struct); p_struct->hashAlgoAuth=p_src; } void AQFINTS_CryptParams_SetCryptAlgo(AQFINTS_CRYPTPARAMS *p_struct, AQFINTS_CRYPTPARAMS_CRYPTALGO p_src){ assert(p_struct); p_struct->cryptAlgo=p_src; } void AQFINTS_CryptParams_SetOpModeCrypt(AQFINTS_CRYPTPARAMS *p_struct, AQFINTS_CRYPTPARAMS_OPMODE p_src){ assert(p_struct); p_struct->opModeCrypt=p_src; } static const AQFINTS_CRYPTPARAMS cryptParamArray[]={ { "RDH", 1, AQFINTS_CryptParams_SignAlgoRsa, AQFINTS_CryptParams_OpModeIso9796_1, AQFINTS_CryptParams_OpModeNone, AQFINTS_CryptParams_SigUsageOwnerSigning, AQFINTS_CryptParams_HashAlgoRipeMd160, AQFINTS_CryptParams_HashAlgoNone, AQFINTS_CryptParams_CryptAlgoTwoKeyTripleDes, AQFINTS_CryptParams_OpModeCbc }, { "RDH", 2, AQFINTS_CryptParams_SignAlgoRsa, AQFINTS_CryptParams_OpModeIso9796_2, AQFINTS_CryptParams_OpModeNone, AQFINTS_CryptParams_SigUsageOwnerSigning, AQFINTS_CryptParams_HashAlgoRipeMd160, AQFINTS_CryptParams_HashAlgoNone, AQFINTS_CryptParams_CryptAlgoTwoKeyTripleDes, AQFINTS_CryptParams_OpModeCbc }, { "RDH", 3, AQFINTS_CryptParams_SignAlgoRsa, AQFINTS_CryptParams_OpModeRsa_Pkcs1_v1_5, AQFINTS_CryptParams_OpModeIso9796_2, AQFINTS_CryptParams_SigUsageOwnerSigning, AQFINTS_CryptParams_HashAlgoSha1, AQFINTS_CryptParams_HashAlgoRipeMd160, AQFINTS_CryptParams_CryptAlgoTwoKeyTripleDes, AQFINTS_CryptParams_OpModeRsa_Pkcs1_v1_5 }, { "RDH", 5, AQFINTS_CryptParams_SignAlgoRsa, AQFINTS_CryptParams_OpModeRsa_Pkcs1_v1_5, AQFINTS_CryptParams_OpModeNone, AQFINTS_CryptParams_SigUsageOwnerSigning, AQFINTS_CryptParams_HashAlgoSha1, AQFINTS_CryptParams_HashAlgoNone, AQFINTS_CryptParams_CryptAlgoTwoKeyTripleDes, AQFINTS_CryptParams_OpModeRsa_Pkcs1_v1_5 }, { "RDH", 6, AQFINTS_CryptParams_SignAlgoRsa, AQFINTS_CryptParams_OpModeRsa_Pkcs1_v1_5, AQFINTS_CryptParams_OpModeRsa_Pkcs1_v1_5, AQFINTS_CryptParams_SigUsageOwnerSigning, AQFINTS_CryptParams_HashAlgoSha256, AQFINTS_CryptParams_HashAlgoSha256, AQFINTS_CryptParams_CryptAlgoTwoKeyTripleDes, AQFINTS_CryptParams_OpModeRsa_Pkcs1_v1_5 }, { "RDH", 7, AQFINTS_CryptParams_SignAlgoRsa, AQFINTS_CryptParams_OpModeRsa_Pss, AQFINTS_CryptParams_OpModeRsa_Pss, AQFINTS_CryptParams_SigUsageOwnerSigning, AQFINTS_CryptParams_HashAlgoSha256sha256, AQFINTS_CryptParams_HashAlgoSha256, AQFINTS_CryptParams_CryptAlgoTwoKeyTripleDes, AQFINTS_CryptParams_OpModeRsa_Pkcs1_v1_5 }, { "RDH", 8, AQFINTS_CryptParams_SignAlgoRsa, AQFINTS_CryptParams_OpModeRsa_Pkcs1_v1_5, AQFINTS_CryptParams_OpModeNone, AQFINTS_CryptParams_SigUsageOwnerSigning, AQFINTS_CryptParams_HashAlgoSha256, AQFINTS_CryptParams_HashAlgoNone, AQFINTS_CryptParams_CryptAlgoTwoKeyTripleDes, AQFINTS_CryptParams_OpModeRsa_Pkcs1_v1_5 }, { "RDH", 9, AQFINTS_CryptParams_SignAlgoRsa, AQFINTS_CryptParams_OpModeRsa_Pss, AQFINTS_CryptParams_OpModeNone, AQFINTS_CryptParams_SigUsageOwnerSigning, AQFINTS_CryptParams_HashAlgoSha256sha256, AQFINTS_CryptParams_HashAlgoNone, AQFINTS_CryptParams_CryptAlgoTwoKeyTripleDes, AQFINTS_CryptParams_OpModeRsa_Pkcs1_v1_5 }, { "RDH", 10, AQFINTS_CryptParams_SignAlgoRsa, AQFINTS_CryptParams_OpModeRsa_Pss, AQFINTS_CryptParams_OpModeNone, AQFINTS_CryptParams_SigUsageOwnerSigning, AQFINTS_CryptParams_HashAlgoSha256sha256, AQFINTS_CryptParams_HashAlgoNone, AQFINTS_CryptParams_CryptAlgoTwoKeyTripleDes, AQFINTS_CryptParams_OpModeCbc }, { "RAH", 7, AQFINTS_CryptParams_SignAlgoRsa, AQFINTS_CryptParams_OpModeRsa_Pss, AQFINTS_CryptParams_OpModeRsa_Pss, AQFINTS_CryptParams_SigUsageOwnerSigning, AQFINTS_CryptParams_HashAlgoSha256sha256, AQFINTS_CryptParams_HashAlgoSha256, AQFINTS_CryptParams_CryptAlgoAes256, AQFINTS_CryptParams_OpModeRsa_Pkcs1_v1_5 }, { "RAH", 9, AQFINTS_CryptParams_SignAlgoRsa, AQFINTS_CryptParams_OpModeRsa_Pss, AQFINTS_CryptParams_OpModeNone, AQFINTS_CryptParams_SigUsageOwnerSigning, AQFINTS_CryptParams_HashAlgoSha256sha256, AQFINTS_CryptParams_HashAlgoNone, AQFINTS_CryptParams_CryptAlgoAes256, AQFINTS_CryptParams_OpModeRsa_Pkcs1_v1_5 }, { "RAH", 10, AQFINTS_CryptParams_SignAlgoRsa, AQFINTS_CryptParams_OpModeRsa_Pss, AQFINTS_CryptParams_OpModeNone, AQFINTS_CryptParams_SigUsageOwnerSigning, AQFINTS_CryptParams_HashAlgoSha256sha256, AQFINTS_CryptParams_HashAlgoNone, AQFINTS_CryptParams_CryptAlgoAes256, AQFINTS_CryptParams_OpModeCbc } }; const AQFINTS_CRYPTPARAMS* AQFINTS_CryptParams_GetParamsForSecurityProfile(const char *securityProfileName, int securityProfileVersion) { int i; const AQFINTS_CRYPTPARAMS *p; int arrayMemberCount; arrayMemberCount=*(&cryptParamArray+1)-cryptParamArray; p=cryptParamArray; for (i=0; i< arrayMemberCount; i++) { if ((strcasecmp(p->securityProfileName, securityProfileName)==0) && (p->securityProfileVersion==securityProfileVersion)) return p; p++; } return NULL; } /* code headers */ aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/session/s_log.c0000664000175000017500000002143714044534775024134 00000000000000/*************************************************************************** begin : Mon Oct 28 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "./session.h" #include "libaqfints/parser/parser.h" #include "aqbanking/version.h" #include #include #include #include #include #include /* ------------------------------------------------------------------------------------------------ * forward declarations * ------------------------------------------------------------------------------------------------ */ static int _anonHnsha(const uint8_t *psegment, unsigned int slen, GWEN_SYNCIO *sio); static int _anonHkpae(const uint8_t *psegment, unsigned int slen, GWEN_SYNCIO *sio); static int _setCharValue(GWEN_DB_NODE *n, uint32_t flags, const char *path, const char *val); /* ------------------------------------------------------------------------------------------------ * implementations * ------------------------------------------------------------------------------------------------ */ void AQFINTS_Session_LogMessage(AQFINTS_SESSION *sess, const uint8_t *ptrLogData, uint32_t lenLogData, int rec, int crypt) { GWEN_DB_NODE *db; GWEN_SYNCIO *sio; unsigned int bsize; const char *logFile; int vmajor, vminor, vpatchlevel, vbuild; char vbuf[32]; int rv; assert(sess); logFile=AQFINTS_Session_GetLogFile(sess); if (!logFile) { DBG_ERROR(AQFINTS_LOGDOMAIN, "No log file, logging disabled for this dialog"); return; } DBG_INFO(AQFINTS_LOGDOMAIN, "Logging to file [%s]", logFile); db=GWEN_DB_Group_new("header"); GWEN_DB_SetIntValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "hbciVersion", AQFINTS_Session_GetHbciVersion(sess)); _setCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "crypt", crypt?"yes":"no"); _setCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "sender", rec?"bank":"user"); _setCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "direction", rec?"inbound":"outbound"); GWEN_Version(&vmajor, &vminor, &vpatchlevel, &vbuild); snprintf(vbuf, sizeof(vbuf)-1, "%d.%d.%d.%d", vmajor, vminor, vpatchlevel, vbuild); vbuf[sizeof(vbuf)-1]=0; _setCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "gwenhywfar", vbuf); _setCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "aqhbci", AQBANKING_VERSION_FULL_STRING); _setCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "appname", AQFINTS_Session_GetAppRegKey(sess)); _setCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "appversion", AQFINTS_Session_GetAppVersion(sess)); GWEN_DB_SetIntValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "size", lenLogData); if (GWEN_Directory_GetPath(logFile, GWEN_PATH_FLAGS_VARIABLE)) { DBG_ERROR(AQFINTS_LOGDOMAIN, "Path \"%s\" is not available, cannot log", logFile); GWEN_DB_Group_free(db); return; } sio=GWEN_SyncIo_File_new(logFile, GWEN_SyncIo_File_CreationMode_OpenAlways); GWEN_SyncIo_AddFlags(sio, GWEN_SYNCIO_FILE_FLAGS_READ | GWEN_SYNCIO_FILE_FLAGS_WRITE | GWEN_SYNCIO_FILE_FLAGS_UREAD | GWEN_SYNCIO_FILE_FLAGS_UWRITE | GWEN_SYNCIO_FILE_FLAGS_APPEND); rv=GWEN_SyncIo_Connect(sio); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_SyncIo_free(sio); GWEN_DB_Group_free(db); return; } /* write header */ rv=GWEN_DB_WriteToIo(db, sio, GWEN_DB_FLAGS_WRITE_SUBGROUPS | GWEN_DB_FLAGS_DETAILED_GROUPS | GWEN_DB_FLAGS_USE_COLON| GWEN_DB_FLAGS_OMIT_TYPES); if (rv<0) { DBG_INFO(AQFINTS_LOGDOMAIN, "here (%d)", rv); GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); GWEN_DB_Group_free(db); return; } /* append empty line to separate header from data */ rv=GWEN_SyncIo_WriteForced(sio, (const uint8_t *) "\n", 1); if (rv<0) { DBG_INFO(AQFINTS_LOGDOMAIN, "here (%d)", rv); GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); GWEN_DB_Group_free(db); return; } /* write data */ bsize=lenLogData; if (bsize) { const uint8_t *p; unsigned int bleft; bleft=bsize; p=ptrLogData; while (bleft) { const uint8_t *segEnd; unsigned int slen; if (*p=='\'') { rv=GWEN_SyncIo_WriteForced(sio, p, 1); if (rv<0) { DBG_INFO(AQFINTS_LOGDOMAIN, "here (%d)", rv); GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); GWEN_DB_Group_free(db); return; } p++; bleft--; } else { segEnd=(const uint8_t *) strchr((const char *) p, '\''); if (segEnd==NULL) { /* no segment end found, write rest of the buffer */ rv=GWEN_SyncIo_WriteForced(sio, p, bleft); if (rv<0) { DBG_INFO(AQFINTS_LOGDOMAIN, "here (%d)", rv); GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); GWEN_DB_Group_free(db); return; } break; } assert(segEnd); slen=segEnd-p+1; assert(slen); if (strncasecmp((const char *) p, "HNSHA:", 6)==0) rv=_anonHnsha(p, slen, sio); else if (strncasecmp((const char *) p, "HKPAE:", 6)==0 || strncasecmp((const char *) p, "DKPAE:", 6)==0) rv=_anonHkpae(p, slen, sio); /* add more segments with confidential data here */ else { unsigned int l; l=slen; rv=GWEN_SyncIo_WriteForced(sio, (const uint8_t *)p, l); } if (rv<0) { DBG_INFO(AQFINTS_LOGDOMAIN, "here (%d)", rv); GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); GWEN_DB_Group_free(db); return; } bleft-=slen; p=segEnd+1; } } /* while bleft */ } /* add LF for better readability */ rv=GWEN_SyncIo_WriteForced(sio, (const uint8_t *) "\n", 1); if (rv<0) { DBG_INFO(AQFINTS_LOGDOMAIN, "here (%d)", rv); GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); GWEN_DB_Group_free(db); return; } /* close layer */ rv=GWEN_SyncIo_Disconnect(sio); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_SyncIo_free(sio); return; } GWEN_SyncIo_free(sio); GWEN_DB_Group_free(db); DBG_DEBUG(AQFINTS_LOGDOMAIN, "Message logged"); } int _anonHnsha(const uint8_t *psegment, unsigned int slen, GWEN_SYNCIO *sio) { int plusCount=0; int lastWasEscape=0; int segDone=0; const uint8_t *p; unsigned int count; p=psegment; count=slen; while (*p && !segDone && count--) { int normalChar=1; int err; err=0; if (lastWasEscape) { lastWasEscape=0; normalChar=0; } else { if (*p=='?') { lastWasEscape=1; } else { if (*p=='\'') segDone=1; else if (*p=='+') plusCount++; lastWasEscape=0; } } if (plusCount>=3 && normalChar && *p!='+' && *p!='\'' && *p!=':') err=GWEN_SyncIo_WriteForced(sio, (const uint8_t *) "*", 1); else err=GWEN_SyncIo_WriteForced(sio, p, 1); if (err<0) { DBG_INFO(AQFINTS_LOGDOMAIN, "here (%d)", err); return err; } p++; } /* while */ return 0; } int _anonHkpae(const uint8_t *psegment, unsigned int slen, GWEN_SYNCIO *sio) { int plusCount=0; int lastWasEscape=0; int segDone=0; const uint8_t *p; unsigned int count; p=psegment; count=slen; while (*p && !segDone && count--) { int normalChar=1; int err; err=0; if (lastWasEscape) { lastWasEscape=0; normalChar=0; } else { if (*p=='?') { lastWasEscape=1; } else { if (*p=='\'') segDone=1; else if (*p=='+') plusCount++; lastWasEscape=0; } } if (plusCount>=1 && normalChar && *p!='+' && *p!='\'' && *p!=':') err=GWEN_SyncIo_WriteForced(sio, (const uint8_t *) "*", 1); else err=GWEN_SyncIo_WriteForced(sio, p, 1); if (err<0) { DBG_INFO(AQFINTS_LOGDOMAIN, "here (%d)", err); return err; } p++; } /* while */ return 0; } int _setCharValue(GWEN_DB_NODE *n, uint32_t flags, const char *path, const char *val) { return GWEN_DB_SetCharValue(n, flags, path, val?val:""); } aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/session/s_message.c0000664000175000017500000001341414044534775024773 00000000000000/*************************************************************************** begin : Sat Aug 03 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "s_message.h" #include "libaqfints/parser/parser.h" #include #include #include /* ------------------------------------------------------------------------------------------------ * forward declarations * ------------------------------------------------------------------------------------------------ */ static AQFINTS_SEGMENT *createMessageHead(AQFINTS_SESSION *sess, const char *dialogId, int msgNum, int refMsgNum, int sizeOfMessageWithoutHead); static AQFINTS_SEGMENT *createMessageTail(AQFINTS_SESSION *sess, int msgNum, int segNum); /* ------------------------------------------------------------------------------------------------ * implementations * ------------------------------------------------------------------------------------------------ */ int AQFINTS_Session_WrapMessageHeadAndTail(AQFINTS_SESSION *sess, AQFINTS_SEGMENT_LIST *segmentList, const char *dialogId, int msgNum, int refMsgNum, int lastSegNum) { int msgSizeWithoutHead; AQFINTS_SEGMENT *segment; /* create and append msg tail */ segment=createMessageTail(sess, msgNum, lastSegNum+1); if (segment==NULL) { DBG_ERROR(AQFINTS_LOGDOMAIN, "here"); return GWEN_ERROR_INTERNAL; } AQFINTS_Segment_List_Add(segment, segmentList); /* take msg tail into account */ msgSizeWithoutHead=AQFINTS_Segment_List_SampleSizes(segmentList); /* create and insert msg tail */ segment=createMessageHead(sess, dialogId, msgNum, refMsgNum, msgSizeWithoutHead); if (segment==NULL) { DBG_ERROR(AQFINTS_LOGDOMAIN, "here"); return GWEN_ERROR_INTERNAL; } AQFINTS_Segment_List_Insert(segment, segmentList); return 0; } AQFINTS_SEGMENT *createMessageHead(AQFINTS_SESSION *sess, const char *dialogId, int msgNum, int refMsgNum, int sizeOfMessageWithoutHead) { AQFINTS_PARSER *parser; int hbciVersion; AQFINTS_SEGMENT *defSegment; AQFINTS_SEGMENT *segment; GWEN_DB_NODE *dbSegment; uint32_t segSize; int rv; parser=AQFINTS_Session_GetParser(sess); hbciVersion=AQFINTS_Session_GetHbciVersion(sess); /* HNHBK */ defSegment=AQFINTS_Parser_FindSegmentHighestVersionForProto(parser, "HNHBK", hbciVersion); if (defSegment==NULL) { DBG_ERROR(AQFINTS_LOGDOMAIN, "No matching definition segment found for HNHBK (proto=%d)", hbciVersion); return NULL; } segment=AQFINTS_Segment_new(); AQFINTS_Segment_copy(segment, defSegment); AQFINTS_Segment_SetSegmentNumber(segment, 1); dbSegment=GWEN_DB_Group_new("msgHead"); AQFINTS_Segment_SetDbData(segment, dbSegment); /* temp */ GWEN_DB_SetIntValue(dbSegment, GWEN_DB_FLAGS_OVERWRITE_VARS, "size", sizeOfMessageWithoutHead); GWEN_DB_SetIntValue(dbSegment, GWEN_DB_FLAGS_OVERWRITE_VARS, "hversion", hbciVersion); GWEN_DB_SetCharValue(dbSegment, GWEN_DB_FLAGS_OVERWRITE_VARS, "dialogId", dialogId?dialogId:"0"); GWEN_DB_SetIntValue(dbSegment, GWEN_DB_FLAGS_OVERWRITE_VARS, "msgnum", msgNum); if (refMsgNum) { GWEN_DB_SetCharValue(dbSegment, GWEN_DB_FLAGS_OVERWRITE_VARS, "msgref/dialogId", dialogId?dialogId:"0"); GWEN_DB_SetIntValue(dbSegment, GWEN_DB_FLAGS_OVERWRITE_VARS, "msgref/msgnum", refMsgNum); } /* create temporary version to determine the full message size */ rv=AQFINTS_Session_WriteSegment(sess, segment); if (rv<0) { DBG_ERROR(AQFINTS_LOGDOMAIN, "here (%d)", rv); AQFINTS_Segment_free(segment); return NULL; } segSize=AQFINTS_Segment_GetDataLength(segment); /* reset segment */ AQFINTS_Segment_SetElements(segment, NULL); AQFINTS_Segment_SetData(segment, NULL, 0); /* finally write the message header */ GWEN_DB_SetIntValue(dbSegment, GWEN_DB_FLAGS_OVERWRITE_VARS, "size", sizeOfMessageWithoutHead+segSize); rv=AQFINTS_Session_WriteSegment(sess, segment); if (rv<0) { DBG_ERROR(AQFINTS_LOGDOMAIN, "here (%d)", rv); AQFINTS_Segment_free(segment); return NULL; } return segment; } AQFINTS_SEGMENT *createMessageTail(AQFINTS_SESSION *sess, int msgNum, int segNum) { AQFINTS_PARSER *parser; int hbciVersion; AQFINTS_SEGMENT *defSegment; AQFINTS_SEGMENT *segment; GWEN_DB_NODE *dbSegment; int rv; parser=AQFINTS_Session_GetParser(sess); hbciVersion=AQFINTS_Session_GetHbciVersion(sess); /* HNHBS */ defSegment=AQFINTS_Parser_FindSegmentHighestVersionForProto(parser, "HNHBS", hbciVersion); if (defSegment==NULL) { DBG_ERROR(AQFINTS_LOGDOMAIN, "No matching definition segment found for HNHBS (proto=%d)", hbciVersion); return NULL; } segment=AQFINTS_Segment_new(); AQFINTS_Segment_copy(segment, defSegment); AQFINTS_Segment_SetSegmentNumber(segment, segNum); dbSegment=GWEN_DB_Group_new("msgTail"); AQFINTS_Segment_SetDbData(segment, dbSegment); GWEN_DB_SetIntValue(dbSegment, GWEN_DB_FLAGS_OVERWRITE_VARS, "msgnum", msgNum); rv=AQFINTS_Session_WriteSegment(sess, segment); if (rv<0) { DBG_ERROR(AQFINTS_LOGDOMAIN, "here (%d)", rv); AQFINTS_Segment_free(segment); return NULL; } return segment; } aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/session/session.c0000664000175000017500000004321414044534775024511 00000000000000/*************************************************************************** begin : Thu Aug 01 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "./session_p.h" #include "libaqfints/session/s_encode.h" #include "libaqfints/session/s_decode.h" #include "libaqfints/parser/parser.h" #include "libaqfints/parser/parser_dump.h" #include "libaqfints/service/upd/upd_read.h" #include "libaqfints/service/bpd/bpd_read.h" #include #include #include /* ------------------------------------------------------------------------------------------------ * forward declarations * ------------------------------------------------------------------------------------------------ */ static AQFINTS_MESSAGE *GWENHYWFAR_CB _exchangeMessagesInternal(AQFINTS_SESSION *sess, AQFINTS_MESSAGE *messageOut); /* ------------------------------------------------------------------------------------------------ * implementations * ------------------------------------------------------------------------------------------------ */ GWEN_INHERIT_FUNCTIONS(AQFINTS_SESSION) AQFINTS_SESSION *AQFINTS_Session_new(AQFINTS_PARSER *parser, AQFINTS_TRANSPORT *trans) { AQFINTS_SESSION *sess; GWEN_NEW_OBJECT(AQFINTS_SESSION, sess); sess->_refCount=1; GWEN_INHERIT_INIT(AQFINTS_SESSION, sess); sess->lastMessageNumSent=0; sess->lastMessageNumReceived=0; sess->hbciVersion=300; sess->parser=parser; sess->transport=trans; sess->exchangeMessagesFn=_exchangeMessagesInternal; return sess; } void AQFINTS_Session_free(AQFINTS_SESSION *sess) { if (sess) { assert(sess->_refCount); if (sess->_refCount==1) { GWEN_INHERIT_FINI(AQFINTS_SESSION, sess) sess->_refCount=0; free(sess->logFile); free(sess->appRegKey); free(sess->appVersion); free(sess->dialogId); if (sess->transport) AQFINTS_Transport_free(sess->transport); GWEN_FREE_OBJECT(sess); } else sess->_refCount--; } } void AQFINTS_Session_Attach(AQFINTS_SESSION *sess) { assert(sess); assert(sess->_refCount); sess->_refCount++; } int AQFINTS_Session_GetHbciVersion(const AQFINTS_SESSION *sess) { assert(sess); return sess->hbciVersion; } void AQFINTS_Session_SetHbciVersion(AQFINTS_SESSION *sess, int v) { assert(sess); sess->hbciVersion=v; } int AQFINTS_Session_GetIsServer(const AQFINTS_SESSION *sess) { assert(sess); return sess->isServer; } void AQFINTS_Session_SetIsServer(AQFINTS_SESSION *sess, int v) { assert(sess); sess->isServer=v?1:0; } const char *AQFINTS_Session_GetDialogId(const AQFINTS_SESSION *sess) { assert(sess); return sess->dialogId; } void AQFINTS_Session_SetDialogId(AQFINTS_SESSION *sess, const char *s) { assert(sess); if (sess->dialogId) free(sess->dialogId); if (s) sess->dialogId=strdup(s); else sess->dialogId=NULL; } int AQFINTS_Session_GetLastMessageNumSent(const AQFINTS_SESSION *sess) { assert(sess); return sess->lastMessageNumSent; } void AQFINTS_Session_SetLastMessageNumSent(AQFINTS_SESSION *sess, int p_src) { assert(sess); sess->lastMessageNumSent=p_src; } int AQFINTS_Session_GetLastMessageNumReceived(const AQFINTS_SESSION *sess) { assert(sess); return sess->lastMessageNumReceived; } void AQFINTS_Session_SetLastMessageNumReceived(AQFINTS_SESSION *sess, int p_src) { assert(sess); sess->lastMessageNumReceived=p_src; } AQFINTS_PARSER *AQFINTS_Session_GetParser(const AQFINTS_SESSION *sess) { assert(sess); return sess->parser; } const char *AQFINTS_Session_GetLogFile(const AQFINTS_SESSION *sess) { assert(sess); return sess->logFile; } void AQFINTS_Session_SetLogFile(AQFINTS_SESSION *sess, const char *s) { assert(sess); if (sess->logFile) free(sess->logFile); if (s) sess->logFile=strdup(s); else sess->logFile=NULL; } const char *AQFINTS_Session_GetAppRegKey(const AQFINTS_SESSION *sess) { assert(sess); return sess->appRegKey; } void AQFINTS_Session_SetAppRegKey(AQFINTS_SESSION *sess, const char *s) { assert(sess); if (sess->appRegKey) free(sess->appRegKey); if (s) sess->appRegKey=strdup(s); else sess->appRegKey=NULL; } const char *AQFINTS_Session_GetAppVersion(const AQFINTS_SESSION *sess) { assert(sess); return sess->appVersion; } void AQFINTS_Session_SetAppVersion(AQFINTS_SESSION *sess, const char *s) { assert(sess); if (sess->appVersion) free(sess->appVersion); if (s) sess->appVersion=strdup(s); else sess->appVersion=NULL; } AQFINTS_MESSAGE *AQFINTS_Session_ExchangeMessages(AQFINTS_SESSION *sess, AQFINTS_MESSAGE *messageOut) { assert(sess); if (sess->exchangeMessagesFn) return sess->exchangeMessagesFn(sess, messageOut); else return NULL; } AQFINTS_MESSAGE *_exchangeMessagesInternal(AQFINTS_SESSION *sess, AQFINTS_MESSAGE *messageOut) { return AQFINTS_Session_DirectlyExchangeMessages(sess, messageOut); } int AQFINTS_Session_FilloutKeyname(AQFINTS_SESSION *sess, AQFINTS_KEYDESCR *keyDescr, int mode) { assert(sess); if (sess->filloutKeynameFn) return sess->filloutKeynameFn(sess, keyDescr, mode); else return GWEN_ERROR_NOT_IMPLEMENTED; } int AQFINTS_Session_DecryptSessionKey(AQFINTS_SESSION *sess, const AQFINTS_KEYDESCR *keyDescr, const AQFINTS_CRYPTPARAMS *cryptParams, const uint8_t *pInData, uint32_t inLen, uint8_t *pOutData, uint32_t *pOutLen) { assert(sess); if (sess->decryptSessionKeyFn) return sess->decryptSessionKeyFn(sess, keyDescr, cryptParams, pInData, inLen, pOutData, pOutLen); else return GWEN_ERROR_NOT_IMPLEMENTED; } int AQFINTS_Session_EncryptSessionKey(AQFINTS_SESSION *sess, const AQFINTS_KEYDESCR *keyDescr, const AQFINTS_CRYPTPARAMS *cryptParams, const uint8_t *pInData, uint32_t inLen, uint8_t *pOutData, uint32_t *pOutLen) { assert(sess); if (sess->encryptSessionKeyFn) return sess->encryptSessionKeyFn(sess, keyDescr, cryptParams, pInData, inLen, pOutData, pOutLen); else return GWEN_ERROR_NOT_IMPLEMENTED; } int AQFINTS_Session_VerifyPin(AQFINTS_SESSION *sess, const AQFINTS_KEYDESCR *keyDescr, const char *pin) { assert(sess); if (sess->verifyPinFn) return sess->verifyPinFn(sess, keyDescr, pin); else return GWEN_ERROR_NOT_IMPLEMENTED; } int AQFINTS_Session_Sign(AQFINTS_SESSION *sess, const AQFINTS_KEYDESCR *keyDescr, const AQFINTS_CRYPTPARAMS *cryptParams, const uint8_t *pInData, uint32_t inLen, uint8_t *pSignatureData, uint32_t *pSignatureLen) { assert(sess); if (sess->signFn) return sess->signFn(sess, keyDescr, cryptParams, pInData, inLen, pSignatureData, pSignatureLen); else return GWEN_ERROR_NOT_IMPLEMENTED; } int AQFINTS_Session_Verify(AQFINTS_SESSION *sess, const AQFINTS_KEYDESCR *keyDescr, const AQFINTS_CRYPTPARAMS *cryptParams, const uint8_t *pInData, uint32_t inLen, const uint8_t *pSignatureData, uint32_t signatureLen, uint32_t seqCounter) { assert(sess); if (sess->verifyFn) return sess->verifyFn(sess, keyDescr, cryptParams, pInData, inLen, pSignatureData, signatureLen, seqCounter); else return GWEN_ERROR_NOT_IMPLEMENTED; } AQFINTS_SESSION_EXCHANGEMESSAGES_FN AQFINTS_Session_SetExchangeMessagesFn(AQFINTS_SESSION *sess, AQFINTS_SESSION_EXCHANGEMESSAGES_FN fn) { AQFINTS_SESSION_EXCHANGEMESSAGES_FN oldFn; assert(sess); oldFn=sess->exchangeMessagesFn; sess->exchangeMessagesFn=fn; return oldFn; } AQFINTS_SESSION_FILLOUT_KEYDESCR_FN AQFINTS_Session_SetFilloutKeynameFn(AQFINTS_SESSION *sess, AQFINTS_SESSION_FILLOUT_KEYDESCR_FN fn) { AQFINTS_SESSION_FILLOUT_KEYDESCR_FN oldFn; assert(sess); oldFn=sess->filloutKeynameFn; sess->filloutKeynameFn=fn; return oldFn; } AQFINTS_SESSION_SIGN_FN AQFINTS_Session_SetSignFn(AQFINTS_SESSION *sess, AQFINTS_SESSION_SIGN_FN fn) { AQFINTS_SESSION_SIGN_FN oldFn; assert(sess); oldFn=sess->signFn; sess->signFn=fn; return oldFn; } AQFINTS_SESSION_VERIFY_FN AQFINTS_Session_SetVerifyFn(AQFINTS_SESSION *sess, AQFINTS_SESSION_VERIFY_FN fn) { AQFINTS_SESSION_VERIFY_FN oldFn; assert(sess); oldFn=sess->verifyFn; sess->verifyFn=fn; return oldFn; } AQFINTS_SESSION_DECRYPT_SKEY_FN AQFINTS_Session_SetDecryptSessionKeyFn(AQFINTS_SESSION *sess, AQFINTS_SESSION_DECRYPT_SKEY_FN fn) { AQFINTS_SESSION_DECRYPT_SKEY_FN oldFn; assert(sess); oldFn=sess->decryptSessionKeyFn; sess->decryptSessionKeyFn=fn; return oldFn; } AQFINTS_SESSION_ENCRYPT_SKEY_FN AQFINTS_Session_SetEncryptSessionKeyFn(AQFINTS_SESSION *sess, AQFINTS_SESSION_ENCRYPT_SKEY_FN fn) { AQFINTS_SESSION_ENCRYPT_SKEY_FN oldFn; assert(sess); oldFn=sess->encryptSessionKeyFn; sess->encryptSessionKeyFn=fn; return oldFn; } AQFINTS_SESSION_VERIFYPIN_FN AQFINTS_Session_SetVerifyPinFn(AQFINTS_SESSION *sess, AQFINTS_SESSION_VERIFYPIN_FN fn) { AQFINTS_SESSION_VERIFYPIN_FN oldFn; assert(sess); oldFn=sess->verifyPinFn; sess->verifyPinFn=fn; return oldFn; } int AQFINTS_Session_WriteSegmentList(AQFINTS_SESSION *sess, AQFINTS_SEGMENT_LIST *segmentList) { AQFINTS_SEGMENT *segment; segment=AQFINTS_Segment_List_First(segmentList); while (segment) { int rv; rv=AQFINTS_Session_WriteSegment(sess, segment); if (rv<0) { DBG_INFO(AQFINTS_LOGDOMAIN, "here (%d)", rv); return rv; } segment=AQFINTS_Segment_List_Next(segment); } return 0; } int AQFINTS_Session_WriteSegment(AQFINTS_SESSION *sess, AQFINTS_SEGMENT *segment) { GWEN_DB_NODE *db; GWEN_DB_NODE *dbHead; const char *sCode; int segVersion; int segNum; int refSegNum; int rv; sCode=AQFINTS_Segment_GetCode(segment); segVersion=AQFINTS_Segment_GetSegmentVersion(segment); segNum=AQFINTS_Segment_GetSegmentNumber(segment); refSegNum=AQFINTS_Segment_GetRefSegmentNumber(segment); db=AQFINTS_Segment_GetDbData(segment); if (db==NULL) { DBG_ERROR(AQFINTS_LOGDOMAIN, "Segment has no DB data"); return GWEN_ERROR_INTERNAL; } /* prepare segment head */ dbHead=GWEN_DB_GetGroup(db, GWEN_DB_FLAGS_DEFAULT, "head"); assert(dbHead); GWEN_DB_SetCharValue(dbHead, GWEN_DB_FLAGS_OVERWRITE_VARS, "code", sCode); GWEN_DB_SetIntValue(dbHead, GWEN_DB_FLAGS_OVERWRITE_VARS, "seq", segNum); GWEN_DB_SetIntValue(dbHead, GWEN_DB_FLAGS_OVERWRITE_VARS, "version", segVersion); if (refSegNum) GWEN_DB_SetIntValue(dbHead, GWEN_DB_FLAGS_OVERWRITE_VARS, "ref", refSegNum); rv=AQFINTS_Parser_WriteSegment(sess->parser, segment); if (rv<0) { DBG_INFO(AQFINTS_LOGDOMAIN, "Error writing segment [%s] (%d)", AQFINTS_Segment_GetCode(segment), rv); AQFINTS_Parser_DumpSegment(segment, 2); return rv; } return 0; } int AQFINTS_Session_SampleAllowedTanMethods(int *ptrIntArray, int sizeIntArray, AQFINTS_SEGMENT_LIST *segmentList) { AQFINTS_SEGMENT *segment; int numMethodsAdded=0; segment=AQFINTS_Segment_List_First(segmentList); while (segment) { AQFINTS_SEGMENT *nextSegment; const char *sCode; nextSegment=AQFINTS_Segment_List_Next(segment); sCode=AQFINTS_Segment_GetCode(segment); if (sCode && *sCode && strcasecmp(sCode, "HIRMS")==0) { /* check result */ GWEN_DB_NODE *db; db=AQFINTS_Segment_GetDbData(segment); if (db) { GWEN_DB_NODE *dbResult; dbResult=GWEN_DB_FindFirstGroup(db, "result"); while (dbResult) { int resultCode; const char *resultText; resultCode=GWEN_DB_GetIntValue(dbResult, "resultcode", 0, 0); resultText=GWEN_DB_GetCharValue(dbResult, "text", 0, 0); DBG_NOTICE(0, "Segment result: %d (%s)", resultCode, resultText?resultText:""); if (resultCode==3920) { int i; /* reset array */ for (i=0; itransport); } int AQFINTS_Session_Disconnect(AQFINTS_SESSION *sess) { assert(sess); return AQFINTS_Transport_Disconnect(sess->transport); } int AQFINTS_Session_SendMessage(AQFINTS_SESSION *sess, const char *ptrBuffer, int lenBuffer) { int rv; assert(sess); rv=AQFINTS_Transport_SendMessage(sess->transport, ptrBuffer, lenBuffer); sess->lastMessageNumSent++; if (rv<0) { DBG_INFO(AQFINTS_LOGDOMAIN, "here (%d)", rv); return rv; } return rv; } int AQFINTS_Session_ReceiveMessage(AQFINTS_SESSION *sess, GWEN_BUFFER *buffer) { int rv; /* TODO: add logging mechanism */ rv=AQFINTS_Transport_ReceiveMessage(sess->transport, buffer); if (rv<0) { DBG_ERROR(AQFINTS_LOGDOMAIN, "here (%d)", rv); return rv; } sess->lastMessageNumReceived++; return rv; } AQFINTS_BPD *AQFINTS_Session_ExtractBpdFromSegmentList(AQFINTS_SESSION *sess, AQFINTS_SEGMENT_LIST *segmentList) { AQFINTS_BPD *bpd; bpd=AQFINTS_Bpd_SampleBpdFromSegmentList(sess->parser, segmentList, 1); if (bpd==NULL) { DBG_ERROR(AQFINTS_LOGDOMAIN, "Empty BPD"); return NULL; } return bpd; } AQFINTS_USERDATA_LIST *AQFINTS_Session_ExtractUpdFromSegmentList(AQFINTS_SESSION *sess, AQFINTS_SEGMENT_LIST *segmentList) { AQFINTS_USERDATA_LIST *userDataList; userDataList=AQFINTS_Upd_SampleUpdFromSegmentList(segmentList, 1); if (userDataList==NULL) { DBG_ERROR(AQFINTS_LOGDOMAIN, "Empty userDataList"); return NULL; } return userDataList; } AQFINTS_MESSAGE *AQFINTS_Session_DirectlyExchangeMessages(AQFINTS_SESSION *sess, AQFINTS_MESSAGE *messageOut) { GWEN_BUFFER *msgBuffer; AQFINTS_MESSAGE *message; int rv; msgBuffer=AQFINTS_Session_EncodeMessage(sess, messageOut); if (msgBuffer==NULL) { DBG_INFO(AQFINTS_LOGDOMAIN, "here"); return NULL; } rv=AQFINTS_Session_SendMessage(sess, GWEN_Buffer_GetStart(msgBuffer), GWEN_Buffer_GetUsedBytes(msgBuffer)); if (rv<0) { DBG_INFO(AQFINTS_LOGDOMAIN, "here"); GWEN_Buffer_free(msgBuffer); return NULL; } GWEN_Buffer_Reset(msgBuffer); rv=AQFINTS_Session_ReceiveMessage(sess, msgBuffer); if (rv<0) { DBG_INFO(AQFINTS_LOGDOMAIN, "here"); GWEN_Buffer_free(msgBuffer); return NULL; } message=AQFINTS_Session_DecodeMessage(sess, (const uint8_t *) GWEN_Buffer_GetStart(msgBuffer), GWEN_Buffer_GetUsedBytes(msgBuffer)); if (message==NULL) { DBG_ERROR(AQFINTS_LOGDOMAIN, "Could not decode this message:"); GWEN_Buffer_Dump(msgBuffer, 2); GWEN_Buffer_free(msgBuffer); return NULL; } GWEN_Buffer_free(msgBuffer); return message; } int AQFINTS_Session_SampleDataToHash(AQFINTS_SEGMENT *segSigHead, AQFINTS_SEGMENT *segFirstToSign, AQFINTS_SEGMENT *segLastToSign, GWEN_BUFFER *destBuf) { AQFINTS_SEGMENT *segment; int rv; /* add signature head */ rv=GWEN_Buffer_AppendBytes(destBuf, (const char *) AQFINTS_Segment_GetDataPointer(segSigHead), AQFINTS_Segment_GetDataLength(segSigHead)); if (rv<0) { DBG_INFO(AQFINTS_LOGDOMAIN, "here (%d)", rv); return rv; } /* hash data segments */ segment=segFirstToSign; while (segment) { rv=GWEN_Buffer_AppendBytes(destBuf, (const char *) AQFINTS_Segment_GetDataPointer(segment), AQFINTS_Segment_GetDataLength(segment)); if (rv<0) { DBG_INFO(AQFINTS_LOGDOMAIN, "here (%d)", rv); return rv; } if (segment==segLastToSign) break; segment=AQFINTS_Segment_List_Next(segment); } return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/session/s_sign.c0000664000175000017500000001133114044534775024303 00000000000000/*************************************************************************** begin : Sun Oct 27 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "libaqfints/session/s_sign.h" #include "libaqfints/session/pintan/s_sign_pintan.h" #include "libaqfints/session/hbci/s_sign_hbci.h" #include "libaqfints/session/s_decode.h" #include "libaqfints/parser/parser.h" #include #include #include /* ------------------------------------------------------------------------------------------------ * forward declarations * ------------------------------------------------------------------------------------------------ */ static int _signSegment(AQFINTS_SESSION *sess, AQFINTS_MESSAGE *message, AQFINTS_KEYDESCR *keyDescr, AQFINTS_SEGMENT *segFirstToSign, AQFINTS_SEGMENT *segLastToSign, int sigHeadNum, int sigTailNum); /* ------------------------------------------------------------------------------------------------ * implementations * ------------------------------------------------------------------------------------------------ */ int AQFINTS_Session_SignMessage(AQFINTS_SESSION *sess, AQFINTS_MESSAGE *message) { AQFINTS_KEYDESCR_LIST *signerKeyDescrList; signerKeyDescrList=AQFINTS_Message_GetSignerList(message); if (signerKeyDescrList) { AQFINTS_SEGMENT_LIST *segmentList; AQFINTS_SEGMENT *segFirstToSign; AQFINTS_SEGMENT *segLastToSign; AQFINTS_SEGMENT *segment; AQFINTS_KEYDESCR *keyDescr; int sigHeadNum; int sigTailNum; segmentList=AQFINTS_Message_GetSegmentList(message); segFirstToSign=AQFINTS_Segment_List_First(segmentList); segLastToSign=AQFINTS_Segment_List_Last(segmentList); sigHeadNum=AQFINTS_Segment_GetSegmentNumber(segFirstToSign)-1; sigTailNum=AQFINTS_Segment_GetSegmentNumber(segLastToSign)+1; keyDescr=AQFINTS_KeyDescr_List_First(signerKeyDescrList); while (keyDescr) { const char *sUserId; int rv; sUserId=AQFINTS_KeyDescr_GetUserId(keyDescr); DBG_INFO(AQFINTS_LOGDOMAIN, "User [%s]: Filling out keyname", sUserId?sUserId:""); rv=AQFINTS_Session_FilloutKeyname(sess, keyDescr, AQFINTS_SESSION_CRYPTOP_SIGN); if (rv<0) { DBG_INFO(AQFINTS_LOGDOMAIN, "here (%d)", rv); return rv; } rv=_signSegment(sess, message, keyDescr, segFirstToSign, segLastToSign, sigHeadNum, sigTailNum); if (rv<0) { DBG_INFO(AQFINTS_LOGDOMAIN, "here (%d)", rv); return rv; } sigHeadNum--; sigTailNum++; keyDescr=AQFINTS_KeyDescr_List_Next(keyDescr); } /* mark segments as signed */ segment=segFirstToSign; while (segment) { AQFINTS_Segment_AddRuntimeFlags(segment, AQFINTS_SEGMENT_RTFLAGS_SIGNED); if (segment==segLastToSign) break; segment=AQFINTS_Segment_List_Next(segment); } } /* done */ return 0; } int _signSegment(AQFINTS_SESSION *sess, AQFINTS_MESSAGE *message, AQFINTS_KEYDESCR *keyDescr, AQFINTS_SEGMENT *segFirstToSign, AQFINTS_SEGMENT *segLastToSign, int sigHeadNum, int sigTailNum) { const char *sSecProfileCode; sSecProfileCode=AQFINTS_KeyDescr_GetSecurityProfileName(keyDescr); if (sSecProfileCode && *sSecProfileCode) { int rv; if (strcasecmp(sSecProfileCode, "PIN")==0) rv=AQFINTS_Session_SignSegmentPinTan(sess, message, keyDescr, segFirstToSign, segLastToSign, sigHeadNum, sigTailNum); else if (strcasecmp(sSecProfileCode, "RDH")==0) rv=AQFINTS_Session_SignSegmentHbci(sess, message, keyDescr, segFirstToSign, segLastToSign, sigHeadNum, sigTailNum); else if (strcasecmp(sSecProfileCode, "RAH")==0) rv=AQFINTS_Session_SignSegmentHbci(sess, message, keyDescr, segFirstToSign, segLastToSign, sigHeadNum, sigTailNum); else { DBG_ERROR(AQFINTS_LOGDOMAIN, "Unhandled security profile \"%s\"", sSecProfileCode); return GWEN_ERROR_GENERIC; } if (rv<0) { DBG_ERROR(AQFINTS_LOGDOMAIN, "here (%d)", rv); return rv; } return 0; } else { DBG_ERROR(AQFINTS_LOGDOMAIN, "No security profile code set in session"); return GWEN_ERROR_INVALID; } } aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/session/s_encode.c0000664000175000017500000000760714044534775024613 00000000000000/*************************************************************************** begin : Sat Aug 03 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "libaqfints/session/s_encode.h" #include "libaqfints/session/session.h" #include "libaqfints/session/s_encrypt.h" #include "libaqfints/session/s_sign.h" #include "libaqfints/session/s_message.h" #include "libaqfints/parser/parser_dump.h" #include "libaqfints/parser/parser.h" #include #include #include /* ------------------------------------------------------------------------------------------------ * forward declarations * ------------------------------------------------------------------------------------------------ */ /* ------------------------------------------------------------------------------------------------ * implementations * ------------------------------------------------------------------------------------------------ */ GWEN_BUFFER *AQFINTS_Session_EncodeMessage(AQFINTS_SESSION *sess, AQFINTS_MESSAGE *message) { AQFINTS_SEGMENT_LIST *segmentList; GWEN_BUFFER *msgBuffer; int lastSegNum; uint32_t flags; int rv; uint32_t messageSize; segmentList=AQFINTS_Message_GetSegmentList(message); assert(segmentList); flags=AQFINTS_Segment_List_SampleFlags(segmentList); AQFINTS_Message_MoveResultSegsToFront(message); AQFINTS_Message_Reenumerate(message); rv=AQFINTS_Session_WriteSegmentList(sess, segmentList); if (rv<0) { DBG_INFO(AQFINTS_LOGDOMAIN, "here (%d)", rv); return NULL; } #if 0 if (1) { AQFINTS_SEGMENT_LIST *segmentList; DBG_ERROR(AQFINTS_LOGDOMAIN, "Segment list before encoding:"); segmentList=AQFINTS_Message_GetSegmentList(message); if (segmentList) AQFINTS_Parser_DumpSegmentList(segmentList, 2); } #endif if (flags & AQFINTS_SEGMENT_FLAGS_SIGN) { DBG_INFO(AQFINTS_LOGDOMAIN, "Signing requested"); rv=AQFINTS_Session_SignMessage(sess, message); if (rv<0) { DBG_INFO(AQFINTS_LOGDOMAIN, "here (%d)", rv); return NULL; } } lastSegNum=AQFINTS_Message_GetLastSegNum(message); if (flags & AQFINTS_SEGMENT_FLAGS_CRYPT) { DBG_INFO(AQFINTS_LOGDOMAIN, "Encryption requested"); rv=AQFINTS_Session_EncryptMessage(sess, message); if (rv<0) { DBG_INFO(AQFINTS_LOGDOMAIN, "here (%d)", rv); return NULL; } } rv=AQFINTS_Session_WrapMessageHeadAndTail(sess, segmentList, AQFINTS_Message_GetDialogId(message), AQFINTS_Message_GetMessageNumber(message), AQFINTS_Message_GetRefMessageNumber(message), lastSegNum); if (rv<0) { DBG_INFO(AQFINTS_LOGDOMAIN, "here (%d)", rv); return NULL; } #if 0 if (1) { AQFINTS_SEGMENT_LIST *segmentList; DBG_ERROR(AQFINTS_LOGDOMAIN, "Segment list after encoding:"); segmentList=AQFINTS_Message_GetSegmentList(message); if (segmentList) AQFINTS_Parser_DumpSegmentList(segmentList, 2); } #endif messageSize=AQFINTS_Segment_List_SampleSizes(segmentList); msgBuffer=GWEN_Buffer_new(0, messageSize, 0, 1); AQFINTS_Segment_List_SampleBuffers(segmentList, msgBuffer); AQFINTS_Session_LogMessage(sess, (const uint8_t *) GWEN_Buffer_GetStart(msgBuffer), GWEN_Buffer_GetUsedBytes(msgBuffer), 0, 1); /* !rec, crypt */ return msgBuffer; } aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/session/s_verify.h0000664000175000017500000000134114044534775024654 00000000000000/*************************************************************************** begin : Sun Oct 27 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQFINTS_SESSION_VERIFY_H #define AQFINTS_SESSION_VERIFY_H #include "libaqfints/session/session.h" #include "libaqfints/msg/message.h" int AQFINTS_Session_VerifyMessage(AQFINTS_SESSION *sess, AQFINTS_MESSAGE *message); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/session/hbci/0000755000175000017500000000000015037736161023635 500000000000000aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/session/hbci/s_verify_hbci.h0000664000175000017500000000227414044534775026554 00000000000000/*************************************************************************** begin : Sun Oct 27 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQFINTS_SESSION_VERIFY_HBCI_H #define AQFINTS_SESSION_VERIFY_HBCI_H #include "libaqfints/session/session.h" #include "libaqfints/msg/message.h" #include "libaqfints/msg/keydescr.h" #include "libaqfints/parser/segment.h" int AQFINTS_Session_VerifySegmentHbci(AQFINTS_SESSION *sess, AQFINTS_MESSAGE *message, const AQFINTS_KEYDESCR *keyDescr, AQFINTS_SEGMENT *segSigHead, AQFINTS_SEGMENT *segSigTail, AQFINTS_SEGMENT *segFirstSigned, AQFINTS_SEGMENT *segLastSigned); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/session/hbci/s_encrypt_hbci.c0000664000175000017500000005232714044534775026733 00000000000000/*************************************************************************** begin : Sun Oct 27 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "libaqfints/session/hbci/s_encrypt_hbci.h" #include "libaqfints/parser/parser.h" #include #include #include #include #include #include /* ------------------------------------------------------------------------------------------------ * forward declarations * ------------------------------------------------------------------------------------------------ */ static int _encrypt(AQFINTS_SESSION *sess, GWEN_BUFFER *bufInRawData, AQFINTS_KEYDESCR *keyDescr, const AQFINTS_CRYPTPARAMS *cryptParams, GWEN_BUFFER *bufOutEncryptedData, GWEN_BUFFER *bufOutEncryptedKey); static int _encryptDes(AQFINTS_SESSION *sess, GWEN_BUFFER *bufInRawData, AQFINTS_KEYDESCR *keyDescr, const AQFINTS_CRYPTPARAMS *cryptParams, GWEN_BUFFER *bufOutEncryptedData, GWEN_BUFFER *bufOutEncryptedKey); static int _encryptAes(AQFINTS_SESSION *sess, GWEN_BUFFER *bufInRawData, AQFINTS_KEYDESCR *keyDescr, const AQFINTS_CRYPTPARAMS *cryptParams, GWEN_BUFFER *bufOutEncryptedData, GWEN_BUFFER *bufOutEncryptedKey); static int _encryptMessageAndKey(AQFINTS_SESSION *sess, AQFINTS_KEYDESCR *keyDescr, const AQFINTS_CRYPTPARAMS *cryptParams, GWEN_CRYPT_KEY *keyMessage, uint8_t messageKeySize, GWEN_BUFFER *bufInRawData, GWEN_BUFFER *bufRawKeyData, GWEN_BUFFER *bufOutEncryptedData, GWEN_BUFFER *bufOutEncryptedKey); static AQFINTS_SEGMENT *_createCryptHead(AQFINTS_SESSION *sess, const AQFINTS_CRYPTPARAMS *cryptParams, const AQFINTS_KEYDESCR *keyDescr, const uint8_t *ptrEncryptedKey, uint32_t lenEncryptedKey); static AQFINTS_SEGMENT *_createCryptData(AQFINTS_SESSION *sess, const AQFINTS_KEYDESCR *keyDescr, const uint8_t *ptrEncryptedData, uint32_t lenEncryptedData); static GWEN_BUFFER *_getSegmentListData(AQFINTS_SEGMENT_LIST *segmentList); static int _prepareCryptSeg(AQFINTS_SESSION *sess, const AQFINTS_CRYPTPARAMS *cryptParams, const AQFINTS_KEYDESCR *keyDescr, GWEN_DB_NODE *cfg); /* ------------------------------------------------------------------------------------------------ * implementations * ------------------------------------------------------------------------------------------------ */ int AQFINTS_Session_EncryptMessageHbci(AQFINTS_SESSION *sess, AQFINTS_MESSAGE *message) { AQFINTS_SEGMENT *segCryptHead; AQFINTS_SEGMENT *segCryptData; GWEN_BUFFER *bufDataToEncrypt; GWEN_BUFFER *bufEncryptedData; GWEN_BUFFER *bufEncryptedKey; AQFINTS_KEYDESCR *keyDescr; const char *securityProfileName; int securityProfileVersion; const AQFINTS_CRYPTPARAMS *cryptParams; AQFINTS_SEGMENT_LIST *segmentList; int rv; /* get and update key descriptor */ keyDescr=AQFINTS_Message_GetCrypter(message); if (keyDescr==NULL) { DBG_ERROR(AQFINTS_LOGDOMAIN, "No crypter set"); return GWEN_ERROR_GENERIC; } rv=AQFINTS_Session_FilloutKeyname(sess, keyDescr, AQFINTS_SESSION_CRYPTOP_ENCRYPT); if (rv<0) { DBG_INFO(AQFINTS_LOGDOMAIN, "here (%d)", rv); return rv; } /* get crypt params */ securityProfileName=AQFINTS_KeyDescr_GetSecurityProfileName(keyDescr); securityProfileVersion=AQFINTS_KeyDescr_GetSecurityProfileVersion(keyDescr); /* hack for hibiscus */ if (securityProfileVersion==0) { if (securityProfileName && strcasecmp(securityProfileName, "RDH")==0) securityProfileVersion=10; } cryptParams=AQFINTS_CryptParams_GetParamsForSecurityProfile(securityProfileName, securityProfileVersion); if (cryptParams==NULL) { DBG_ERROR(AQFINTS_LOGDOMAIN, "No crypt params for [%s:%d]", securityProfileName?securityProfileName:"", securityProfileVersion); return GWEN_ERROR_INVALID; } /* encrypt message and key */ segmentList=AQFINTS_Message_GetSegmentList(message); bufDataToEncrypt=_getSegmentListData(segmentList); GWEN_Buffer_Rewind(bufDataToEncrypt); AQFINTS_Session_LogMessage(sess, (const uint8_t *) GWEN_Buffer_GetStart(bufDataToEncrypt), GWEN_Buffer_GetUsedBytes(bufDataToEncrypt), 0, 0); /* !rec, !crypt */ bufEncryptedData=GWEN_Buffer_new(0, 1024, 0, 1); /* size doesn't matter here, will be adjusted in called fn */ bufEncryptedKey=GWEN_Buffer_new(0, 512, 0, 1); rv=_encrypt(sess, bufDataToEncrypt, keyDescr, cryptParams, bufEncryptedData, bufEncryptedKey); if (rv<0) { DBG_INFO(AQFINTS_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(bufEncryptedKey); GWEN_Buffer_free(bufEncryptedData); GWEN_Buffer_free(bufDataToEncrypt); return rv; } GWEN_Buffer_free(bufDataToEncrypt); /* create crypt head segment */ segCryptHead=_createCryptHead(sess, cryptParams, keyDescr, (const uint8_t *) GWEN_Buffer_GetStart(bufEncryptedKey), GWEN_Buffer_GetUsedBytes(bufEncryptedKey)); if (segCryptHead==NULL) { DBG_INFO(AQFINTS_LOGDOMAIN, "here"); GWEN_Buffer_free(bufEncryptedKey); GWEN_Buffer_free(bufEncryptedData); return GWEN_ERROR_GENERIC; } GWEN_Buffer_free(bufEncryptedKey); /* create crypt data segment */ segCryptData=_createCryptData(sess, keyDescr, (const uint8_t *) GWEN_Buffer_GetStart(bufEncryptedData), GWEN_Buffer_GetUsedBytes(bufEncryptedData)); if (segCryptData==NULL) { DBG_INFO(AQFINTS_LOGDOMAIN, "here"); AQFINTS_Segment_free(segCryptHead); GWEN_Buffer_free(bufEncryptedData); return GWEN_ERROR_GENERIC; } GWEN_Buffer_free(bufEncryptedData); /* replace segment list in message with HNVSK and HNVSD */ AQFINTS_Segment_List_Clear(segmentList); AQFINTS_Segment_List_Add(segCryptHead, segmentList); AQFINTS_Segment_List_Add(segCryptData, segmentList); DBG_INFO(AQFINTS_LOGDOMAIN, "Message encrypted."); return 0; } int _encrypt(AQFINTS_SESSION *sess, GWEN_BUFFER *bufInRawData, AQFINTS_KEYDESCR *keyDescr, const AQFINTS_CRYPTPARAMS *cryptParams, GWEN_BUFFER *bufOutEncryptedData, GWEN_BUFFER *bufOutEncryptedKey) { AQFINTS_CRYPTPARAMS_CRYPTALGO cryptAlgo; int rv; cryptAlgo=AQFINTS_CryptParams_GetCryptAlgo(cryptParams); switch (cryptAlgo) { case AQFINTS_CryptParams_CryptAlgoTwoKeyTripleDes: rv=_encryptDes(sess, bufInRawData, keyDescr, cryptParams, bufOutEncryptedData, bufOutEncryptedKey); break; case AQFINTS_CryptParams_CryptAlgoAes256: rv=_encryptAes(sess, bufInRawData, keyDescr, cryptParams, bufOutEncryptedData, bufOutEncryptedKey); break; default: DBG_ERROR(AQFINTS_LOGDOMAIN, "Unexpected crypt algo \"%d\"", cryptAlgo); return GWEN_ERROR_INVALID; } if (rv<0) { DBG_INFO(AQFINTS_LOGDOMAIN, "here (%d)", rv); return rv; } return 0; } int _encryptDes(AQFINTS_SESSION *sess, GWEN_BUFFER *bufInRawData, AQFINTS_KEYDESCR *keyDescr, const AQFINTS_CRYPTPARAMS *cryptParams, GWEN_BUFFER *bufOutEncryptedData, GWEN_BUFFER *bufOutEncryptedKey) { int rv; uint8_t messageKeySize; int cryptKeySizeInBytes; GWEN_CRYPT_KEY *keyMessage; GWEN_BUFFER *bufRawKeyData; keyMessage=GWEN_Crypt_KeyDes3K_Generate(GWEN_Crypt_CryptMode_Cbc, 24, 2); messageKeySize=16; /* padd message */ rv=GWEN_Padd_PaddWithAnsiX9_23(bufInRawData); if (rv<0) { DBG_INFO(AQFINTS_LOGDOMAIN, "here (%d)", rv); GWEN_Crypt_Key_free(keyMessage); return rv; } cryptKeySizeInBytes=AQFINTS_KeyDescr_GetKeySizeInBytes(keyDescr); if (cryptKeySizeInBytes==0) { DBG_ERROR(AQFINTS_LOGDOMAIN, "Key size in bytes not set (backend error)"); GWEN_Crypt_Key_free(keyMessage); return GWEN_ERROR_GENERIC; } bufRawKeyData=GWEN_Buffer_new(0, cryptKeySizeInBytes, 0, 1); GWEN_Buffer_AppendBytes(bufRawKeyData, (const char *) GWEN_Crypt_KeyDes3K_GetKeyDataPtr(keyMessage), messageKeySize); GWEN_Buffer_Rewind(bufRawKeyData); rv=_encryptMessageAndKey(sess, keyDescr, cryptParams, keyMessage, messageKeySize, bufInRawData, bufRawKeyData, bufOutEncryptedData, bufOutEncryptedKey); if (rv<0) { DBG_INFO(AQFINTS_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(bufRawKeyData); GWEN_Crypt_Key_free(keyMessage); return rv; } GWEN_Buffer_free(bufRawKeyData); GWEN_Crypt_Key_free(keyMessage); return 0; } int _encryptAes(AQFINTS_SESSION *sess, GWEN_BUFFER *bufInRawData, AQFINTS_KEYDESCR *keyDescr, const AQFINTS_CRYPTPARAMS *cryptParams, GWEN_BUFFER *bufOutEncryptedData, GWEN_BUFFER *bufOutEncryptedKey) { int rv; uint8_t messageKeySize; int cryptKeySizeInBytes; GWEN_CRYPT_KEY *keyMessage; GWEN_BUFFER *bufRawKeyData; keyMessage=GWEN_Crypt_KeyAes256_Generate(GWEN_Crypt_CryptMode_Cbc, 32, 2); messageKeySize=32; /* padd message */ rv=GWEN_Padd_PaddWithZka(bufInRawData); if (rv<0) { DBG_INFO(AQFINTS_LOGDOMAIN, "here (%d)", rv); return rv; } /* write message key data to buffer */ cryptKeySizeInBytes=AQFINTS_KeyDescr_GetKeySizeInBytes(keyDescr); if (cryptKeySizeInBytes==0) { DBG_ERROR(AQFINTS_LOGDOMAIN, "Key size in bytes not set (backend error)"); GWEN_Crypt_Key_free(keyMessage); return GWEN_ERROR_GENERIC; } bufRawKeyData=GWEN_Buffer_new(0, cryptKeySizeInBytes, 0, 1); GWEN_Buffer_AppendBytes(bufRawKeyData, (const char *) GWEN_Crypt_KeyAes256_GetKeyDataPtr(keyMessage), messageKeySize); GWEN_Buffer_Rewind(bufRawKeyData); rv=_encryptMessageAndKey(sess, keyDescr, cryptParams, keyMessage, messageKeySize, bufInRawData, bufRawKeyData, bufOutEncryptedData, bufOutEncryptedKey); if (rv<0) { DBG_INFO(AQFINTS_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(bufRawKeyData); GWEN_Crypt_Key_free(keyMessage); return rv; } GWEN_Buffer_free(bufRawKeyData); GWEN_Crypt_Key_free(keyMessage); return 0; } int _encryptMessageAndKey(AQFINTS_SESSION *sess, AQFINTS_KEYDESCR *keyDescr, const AQFINTS_CRYPTPARAMS *cryptParams, GWEN_CRYPT_KEY *keyMessage, uint8_t messageKeySize, GWEN_BUFFER *bufInRawData, GWEN_BUFFER *bufInRawKeyData, GWEN_BUFFER *bufOutEncryptedData, GWEN_BUFFER *bufOutEncryptedKey) { uint32_t l; int rv; int cryptKeySizeInBytes; AQFINTS_CRYPTPARAMS_OPMODE opMode; GWEN_CRYPT_PADDALGO *paddAlgo; /* encrypt message with message-key */ l=GWEN_Buffer_GetUsedBytes(bufInRawData); GWEN_Buffer_AllocRoom(bufOutEncryptedData, l); l=GWEN_Buffer_GetMaxUnsegmentedWrite(bufOutEncryptedData); rv=GWEN_Crypt_Key_Encipher(keyMessage, (uint8_t *)GWEN_Buffer_GetStart(bufInRawData), GWEN_Buffer_GetUsedBytes(bufInRawData), (uint8_t *)GWEN_Buffer_GetPosPointer(bufOutEncryptedData), &l); if (rv<0) { DBG_INFO(AQFINTS_LOGDOMAIN, "Could not encipher with message key (%d)", rv); return rv; } GWEN_Buffer_IncrementPos(bufOutEncryptedData, l); GWEN_Buffer_AdjustUsedBytes(bufOutEncryptedData); cryptKeySizeInBytes=AQFINTS_KeyDescr_GetKeySizeInBytes(keyDescr); /* valid size already checked by caller */ opMode=AQFINTS_CryptParams_GetOpModeCrypt(cryptParams); switch (opMode) { case AQFINTS_CryptParams_OpModeCbc: paddAlgo=GWEN_Crypt_PaddAlgo_new(GWEN_Crypt_PaddAlgoId_LeftZero); break; case AQFINTS_CryptParams_OpModeRsa_Pkcs1_v1_5: paddAlgo=GWEN_Crypt_PaddAlgo_new(GWEN_Crypt_PaddAlgoId_Pkcs1_2); break; default: DBG_ERROR(AQFINTS_LOGDOMAIN, "Unexpected op mode %d", opMode); return GWEN_ERROR_GENERIC; } GWEN_Crypt_PaddAlgo_SetPaddSize(paddAlgo, cryptKeySizeInBytes); rv=GWEN_Padd_ApplyPaddAlgo(paddAlgo, bufInRawKeyData); GWEN_Crypt_PaddAlgo_free(paddAlgo); if (rv) { DBG_INFO(AQFINTS_LOGDOMAIN, "here (%d)", rv); return rv; } #if 0 DBG_ERROR(AQFINTS_LOGDOMAIN, "Padded message key: (cryptKeySizeInBytes=%d)", cryptKeySizeInBytes); GWEN_Buffer_Dump(bufInRawKeyData, 2); #endif /* encrypt message key */ GWEN_Buffer_AllocRoom(bufOutEncryptedKey, cryptKeySizeInBytes+16); l=GWEN_Buffer_GetMaxUnsegmentedWrite(bufOutEncryptedKey); rv=AQFINTS_Session_EncryptSessionKey(sess, keyDescr, cryptParams, (uint8_t *)GWEN_Buffer_GetPosPointer(bufInRawKeyData), GWEN_Buffer_GetUsedBytes(bufInRawKeyData), (uint8_t *)GWEN_Buffer_GetPosPointer(bufOutEncryptedKey), &l); if (rv<0) { DBG_INFO(AQFINTS_LOGDOMAIN, "Could not encipher with message key (%d)", rv); return rv; } GWEN_Buffer_IncrementPos(bufOutEncryptedKey, l); GWEN_Buffer_AdjustUsedBytes(bufOutEncryptedKey); return 0; } GWEN_BUFFER *_getSegmentListData(AQFINTS_SEGMENT_LIST *segmentList) { GWEN_BUFFER *buf; buf=GWEN_Buffer_new(0, 1024, 0, 1); AQFINTS_Segment_List_SampleBuffers(segmentList, buf); return buf; } AQFINTS_SEGMENT *_createCryptHead(AQFINTS_SESSION *sess, const AQFINTS_CRYPTPARAMS *cryptParams, const AQFINTS_KEYDESCR *keyDescr, const uint8_t *ptrEncryptedKey, uint32_t lenEncryptedKey) { GWEN_DB_NODE *dbSegment; AQFINTS_PARSER *parser; int hbciVersion; AQFINTS_SEGMENT *defSegment; AQFINTS_SEGMENT *segment; int rv; parser=AQFINTS_Session_GetParser(sess); hbciVersion=AQFINTS_Session_GetHbciVersion(sess); /* HNSHA */ defSegment=AQFINTS_Parser_FindSegmentHighestVersionForProto(parser, "HNVSK", hbciVersion); if (defSegment==NULL) { DBG_ERROR(AQFINTS_LOGDOMAIN, "No matching definition segment found for HNVSK (proto=%d)", hbciVersion); return NULL; } segment=AQFINTS_Segment_new(); AQFINTS_Segment_copy(segment, defSegment); AQFINTS_Segment_SetSegmentNumber(segment, 998); dbSegment=GWEN_DB_Group_new("cryptHead"); AQFINTS_Segment_SetDbData(segment, dbSegment); rv=_prepareCryptSeg(sess, cryptParams, keyDescr, dbSegment); if (rv<0) { DBG_INFO(AQFINTS_LOGDOMAIN, "here (%d)", rv); return NULL; } GWEN_DB_SetBinValue(dbSegment, GWEN_DB_FLAGS_DEFAULT, "cryptAlgo/msgKey", ptrEncryptedKey, lenEncryptedKey); rv=AQFINTS_Session_WriteSegment(sess, segment); if (rv<0) { DBG_INFO(AQFINTS_LOGDOMAIN, "here (%d)", rv); AQFINTS_Segment_free(segment); return NULL; } return segment; } AQFINTS_SEGMENT *_createCryptData(AQFINTS_SESSION *sess, const AQFINTS_KEYDESCR *keyDescr, const uint8_t *ptrEncryptedData, uint32_t lenEncryptedData) { GWEN_DB_NODE *dbSegment; AQFINTS_PARSER *parser; int hbciVersion; AQFINTS_SEGMENT *defSegment; AQFINTS_SEGMENT *segment; int rv; parser=AQFINTS_Session_GetParser(sess); hbciVersion=AQFINTS_Session_GetHbciVersion(sess); /* HNSHA */ defSegment=AQFINTS_Parser_FindSegmentHighestVersionForProto(parser, "HNVSD", hbciVersion); if (defSegment==NULL) { DBG_ERROR(AQFINTS_LOGDOMAIN, "No matching definition segment found for HNVSD (proto=%d)", hbciVersion); return NULL; } segment=AQFINTS_Segment_new(); AQFINTS_Segment_copy(segment, defSegment); AQFINTS_Segment_SetSegmentNumber(segment, 999); dbSegment=GWEN_DB_Group_new("cryptData"); AQFINTS_Segment_SetDbData(segment, dbSegment); if (ptrEncryptedData && lenEncryptedData) GWEN_DB_SetBinValue(dbSegment, GWEN_DB_FLAGS_DEFAULT, "cryptData", ptrEncryptedData, lenEncryptedData); rv=AQFINTS_Session_WriteSegment(sess, segment); if (rv<0) { DBG_INFO(AQFINTS_LOGDOMAIN, "here (%d)", rv); AQFINTS_Segment_free(segment); return NULL; } return segment; } int _prepareCryptSeg(AQFINTS_SESSION *sess, const AQFINTS_CRYPTPARAMS *cryptParams, const AQFINTS_KEYDESCR *keyDescr, GWEN_DB_NODE *cfg) { char sdate[9]; char stime[7]; struct tm *lt; time_t tt; const char *s; const char *securityProfileName; int securityProfileVersion; /* some preparations */ tt=time(0); lt=localtime(&tt); /* create date */ if (!strftime(sdate, sizeof(sdate), "%Y%m%d", lt)) { DBG_INFO(AQFINTS_LOGDOMAIN, "Date string too long"); return GWEN_ERROR_INTERNAL; } /* create time */ if (!strftime(stime, sizeof(stime), "%H%M%S", lt)) { DBG_INFO(AQFINTS_LOGDOMAIN, "Date string too long"); return GWEN_ERROR_INTERNAL; } /* store info */ /* security profile */ securityProfileName=AQFINTS_KeyDescr_GetSecurityProfileName(keyDescr); securityProfileVersion=AQFINTS_KeyDescr_GetSecurityProfileVersion(keyDescr); /* hack for hibiscus */ if (securityProfileVersion==0) { if (securityProfileName && strcasecmp(securityProfileName, "RDH")==0) securityProfileVersion=10; } GWEN_DB_SetCharValue(cfg, GWEN_DB_FLAGS_DEFAULT, "secProfile/code", securityProfileName); GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "secProfile/version", securityProfileVersion); GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "function", 4); GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "role", 1); /* security details */ GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "SecDetails/id", AQFINTS_Session_GetIsServer(sess)?2:1); /* 1 client, 2=server */ s=AQFINTS_KeyDescr_GetSystemId(keyDescr); if (s && *s) GWEN_DB_SetCharValue(cfg, GWEN_DB_FLAGS_DEFAULT, "SecDetails/secId", s); /* security stamp */ GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "SecStamp/stampCode", 1); GWEN_DB_SetCharValue(cfg, GWEN_DB_FLAGS_DEFAULT, "SecStamp/date", sdate); GWEN_DB_SetCharValue(cfg, GWEN_DB_FLAGS_DEFAULT, "SecStamp/time", stime); /* cryptAlgo */ GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "cryptAlgo/purpose", 2); GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "cryptAlgo/mode", AQFINTS_CryptParams_GetOpModeCrypt(cryptParams)); GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "cryptAlgo/algo", AQFINTS_CryptParams_GetCryptAlgo(cryptParams)); GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "cryptAlgo/keytype", 6); GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "cryptAlgo/pname", 1); //GWEN_DB_SetBinValue(cfg, GWEN_DB_FLAGS_DEFAULT, "cryptAlgo/msgKey", "NOKEY", 5); /* keyname */ GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "key/country", AQFINTS_KeyDescr_GetCountry(keyDescr)); GWEN_DB_SetCharValue(cfg, GWEN_DB_FLAGS_DEFAULT, "key/bankcode", AQFINTS_KeyDescr_GetBankCode(keyDescr)); GWEN_DB_SetCharValue(cfg, GWEN_DB_FLAGS_DEFAULT, "key/userid", AQFINTS_KeyDescr_GetUserId(keyDescr)); GWEN_DB_SetCharValue(cfg, GWEN_DB_FLAGS_DEFAULT, "key/keytype", AQFINTS_KeyDescr_GetKeyType(keyDescr)); GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "key/keynum", AQFINTS_KeyDescr_GetKeyNumber(keyDescr)); GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "key/keyversion", AQFINTS_KeyDescr_GetKeyVersion(keyDescr)); GWEN_DB_SetCharValue(cfg, GWEN_DB_FLAGS_DEFAULT, "compress", "0"); return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/session/hbci/s_hbci.c0000664000175000017500000000316514043610745025152 00000000000000/*************************************************************************** begin : Sun Oct 27 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "s_hbci.h" #include /* ------------------------------------------------------------------------------------------------ * forward declarations * ------------------------------------------------------------------------------------------------ */ static AQFINTS_MESSAGE *GWENHYWFAR_CB _exchangeMessages(AQFINTS_SESSION *sess, AQFINTS_MESSAGE *messageOut); /* ------------------------------------------------------------------------------------------------ * implementations * ------------------------------------------------------------------------------------------------ */ AQFINTS_SESSION *AQFINTS_SessionHbci_new(AQFINTS_PARSER *parser, AQFINTS_TRANSPORT *trans) { AQFINTS_SESSION *sess; sess=AQFINTS_Session_new(parser, trans); assert(sess); AQFINTS_Session_SetExchangeMessagesFn(sess, _exchangeMessages); return sess; } AQFINTS_MESSAGE *_exchangeMessages(AQFINTS_SESSION *sess, AQFINTS_MESSAGE *messageOut) { /* for now (later check for two-step tan) */ return AQFINTS_Session_DirectlyExchangeMessages(sess, messageOut); } aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/session/hbci/s_sign_hbci.h0000664000175000017500000000221214044534775026200 00000000000000/*************************************************************************** begin : Sun Oct 27 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQFINTS_SESSION_SIGN_HBCI_H #define AQFINTS_SESSION_SIGN_HBCI_H #include "libaqfints/session/session.h" #include "libaqfints/msg/message.h" #include "libaqfints/msg/keydescr.h" #include "libaqfints/parser/segment.h" int AQFINTS_Session_SignSegmentHbci(AQFINTS_SESSION *sess, AQFINTS_MESSAGE *message, AQFINTS_KEYDESCR *keyDescr, AQFINTS_SEGMENT *segFirstToSign, AQFINTS_SEGMENT *segLastToSign, int sigHeadNum, int sigTailNum); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/session/hbci/s_decrypt_hbci.c0000664000175000017500000002206614044534775026716 00000000000000/*************************************************************************** begin : Sun Oct 27 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "libaqfints/session/hbci/s_decrypt_hbci.h" #include "libaqfints/parser/parser.h" #include #include #include #include #include #define AQFINTS_DECRYPT_HBCI_MAXKEYBUF 4096 /* ------------------------------------------------------------------------------------------------ * forward declarations * ------------------------------------------------------------------------------------------------ */ static GWEN_CRYPT_KEY *_getDecryptedMessageKey(AQFINTS_SESSION *sess, const AQFINTS_CRYPTPARAMS *cryptParams, const AQFINTS_KEYDESCR *keyDescr, const uint8_t *ptr, uint32_t len); static GWEN_BUFFER *_getDecryptedMessage(GWEN_CRYPT_KEY *sk, const AQFINTS_CRYPTPARAMS *cryptParams, const uint8_t *pSource, uint32_t lSource); /* ------------------------------------------------------------------------------------------------ * implementations * ------------------------------------------------------------------------------------------------ */ int AQFINTS_Session_DecryptSegmentHbci(AQFINTS_SESSION *sess, AQFINTS_SEGMENT *segCryptHead, AQFINTS_SEGMENT *segCryptData, const AQFINTS_CRYPTPARAMS *cryptParams, const AQFINTS_KEYDESCR *keyDescr, AQFINTS_SEGMENT_LIST *segmentList) { GWEN_DB_NODE *dbCryptHead; GWEN_DB_NODE *dbCryptData; unsigned int len=0; const uint8_t *ptr; GWEN_CRYPT_KEY *key; GWEN_BUFFER *bufDecodedMessage; dbCryptHead=AQFINTS_Segment_GetDbData(segCryptHead); assert(dbCryptHead); dbCryptData=AQFINTS_Segment_GetDbData(segCryptData); assert(dbCryptData); ptr=(const uint8_t *) GWEN_DB_GetBinValue(dbCryptHead, "CryptAlgo/MsgKey", 0, 0, 0, &len); if (ptr==NULL || len<1) { DBG_ERROR(AQFINTS_LOGDOMAIN, "No message key in segment"); return GWEN_ERROR_BAD_DATA; } key=_getDecryptedMessageKey(sess, cryptParams, keyDescr, ptr, len); if (key==NULL) { DBG_INFO(AQFINTS_LOGDOMAIN, "here"); return GWEN_ERROR_BAD_DATA; } ptr=(const uint8_t *) GWEN_DB_GetBinValue(dbCryptData, "CryptData", 0, NULL, 0, &len); if (ptr==NULL || len<1) { DBG_ERROR(AQFINTS_LOGDOMAIN, "No CryptData in segment"); GWEN_Crypt_Key_free(key); return GWEN_ERROR_BAD_DATA; } bufDecodedMessage=_getDecryptedMessage(key, cryptParams, ptr, len); if (bufDecodedMessage==NULL) { DBG_ERROR(AQFINTS_LOGDOMAIN, "Error decrypting CryptData"); GWEN_Crypt_Key_free(key); return GWEN_ERROR_BAD_DATA; } else { AQFINTS_PARSER *parser; AQFINTS_SEGMENT_LIST *newSegmentList; AQFINTS_SEGMENT *segment; int rv; AQFINTS_Session_LogMessage(sess, (const uint8_t *) GWEN_Buffer_GetStart(bufDecodedMessage), GWEN_Buffer_GetUsedBytes(bufDecodedMessage), 1, 0); /* rec, crypt */ parser=AQFINTS_Session_GetParser(sess); newSegmentList=AQFINTS_Segment_List_new(); rv=AQFINTS_Parser_ReadIntoSegmentList(parser, newSegmentList, (const uint8_t *) GWEN_Buffer_GetStart(bufDecodedMessage), GWEN_Buffer_GetUsedBytes(bufDecodedMessage)); if (rv<0) { DBG_INFO(AQFINTS_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(bufDecodedMessage); GWEN_Crypt_Key_free(key); AQFINTS_Segment_List_free(newSegmentList); return rv; } rv=AQFINTS_Parser_ReadSegmentListToDb(parser, newSegmentList); if (rv<0) { DBG_INFO(AQFINTS_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(bufDecodedMessage); GWEN_Crypt_Key_free(key); AQFINTS_Segment_List_free(newSegmentList); return rv; } /* move new segments to given segment list, delete new segment list */ while ((segment=AQFINTS_Segment_List_First(newSegmentList))) { AQFINTS_Segment_AddRuntimeFlags(segment, AQFINTS_SEGMENT_RTFLAGS_ENCRYPTED); AQFINTS_Segment_List_Del(segment); AQFINTS_Segment_List_Add(segment, segmentList); } AQFINTS_Segment_List_free(newSegmentList); GWEN_Buffer_free(bufDecodedMessage); GWEN_Crypt_Key_free(key); /* done */ return 0; } } GWEN_CRYPT_KEY *_getDecryptedMessageKey(AQFINTS_SESSION *sess, const AQFINTS_CRYPTPARAMS *cryptParams, const AQFINTS_KEYDESCR *keyDescr, const uint8_t *ptr, uint32_t len) { GWEN_CRYPT_KEY *key; uint8_t bufDecKey[AQFINTS_DECRYPT_HBCI_MAXKEYBUF+64]; uint32_t lenDecKey; uint8_t *pKeyStart; int rv; AQFINTS_CRYPTPARAMS_CRYPTALGO cryptAlgo; int decKeySize; lenDecKey=sizeof(bufDecKey); rv=AQFINTS_Session_DecryptSessionKey(sess, keyDescr, cryptParams, ptr, len, bufDecKey, &lenDecKey); if (rv<0) { DBG_INFO(AQFINTS_LOGDOMAIN, "here (%d)", rv); return NULL; } /* get resulting keysize */ cryptAlgo=AQFINTS_CryptParams_GetCryptAlgo(cryptParams); switch (cryptAlgo) { case AQFINTS_CryptParams_CryptAlgoTwoKeyTripleDes: decKeySize=16; break; case AQFINTS_CryptParams_CryptAlgoAes256: decKeySize=32; break; default: DBG_ERROR(AQFINTS_LOGDOMAIN, "Unhandled crypt algo %d (%s)", cryptAlgo, AQFINTS_CryptParams_CryptAlgo_toString(cryptAlgo)); return NULL; } /* unpadd */ pKeyStart=bufDecKey+(lenDecKey-decKeySize); #if 0 DBG_ERROR(AQFINTS_LOGDOMAIN, "Message key provided in message (padded key size=%d, unpadded keysize=%d, keyPos=%d):", lenDecKey, decKeySize, (lenDecKey-decKeySize)); GWEN_Text_LogString((const char *)bufDecKey, lenDecKey, AQFINTS_LOGDOMAIN, GWEN_LoggerLevel_Error); #endif /* generate key */ switch (cryptAlgo) { case AQFINTS_CryptParams_CryptAlgoTwoKeyTripleDes: key=GWEN_Crypt_KeyDes3K_fromData(GWEN_Crypt_CryptMode_Cbc, 24, pKeyStart, 16); break; case AQFINTS_CryptParams_CryptAlgoAes256: key=GWEN_Crypt_KeyAes256_fromData(GWEN_Crypt_CryptMode_Cbc, 32, pKeyStart, 32); break; default: DBG_ERROR(AQFINTS_LOGDOMAIN, "Unhandled crypt algo %d (%s)", cryptAlgo, AQFINTS_CryptParams_CryptAlgo_toString(cryptAlgo)); return NULL; } if (key==NULL) { DBG_ERROR(AQFINTS_LOGDOMAIN, "Invalid key data in message"); return NULL; } return key; } GWEN_BUFFER *_getDecryptedMessage(GWEN_CRYPT_KEY *sk, const AQFINTS_CRYPTPARAMS *cryptParams, const uint8_t *pSource, uint32_t lSource) { GWEN_BUFFER *mbuf; int rv; uint32_t lDest; AQFINTS_CRYPTPARAMS_CRYPTALGO cryptAlgo; /* decipher message with session key */ lDest=lSource+1024; /* maybe the size should be increased even more */ mbuf=GWEN_Buffer_new(0, lSource+1024, 0, 1); lDest=GWEN_Buffer_GetMaxUnsegmentedWrite(mbuf); rv=GWEN_Crypt_Key_Decipher(sk, (const uint8_t *)pSource, lSource, (uint8_t *)GWEN_Buffer_GetPosPointer(mbuf), &lDest); if (rv<0) { DBG_INFO(AQFINTS_LOGDOMAIN, "Could not decipher with message key (%d)", rv); GWEN_Buffer_free(mbuf); return NULL; } GWEN_Buffer_IncrementPos(mbuf, lDest); GWEN_Buffer_AdjustUsedBytes(mbuf); /* unpadd message */ cryptAlgo=AQFINTS_CryptParams_GetCryptAlgo(cryptParams); switch (cryptAlgo) { case AQFINTS_CryptParams_CryptAlgoTwoKeyTripleDes: DBG_DEBUG(AQFINTS_LOGDOMAIN, "Unpadding with ANSI X9.23"); rv=GWEN_Padd_UnpaddWithAnsiX9_23(mbuf); break; case AQFINTS_CryptParams_CryptAlgoAes256: DBG_DEBUG(AQFINTS_LOGDOMAIN, "Unpadding with ZKA padding"); rv=GWEN_Padd_UnpaddWithZka(mbuf); break; default: DBG_ERROR(AQFINTS_LOGDOMAIN, "Unhandled crypt algo %d (%s)", cryptAlgo, AQFINTS_CryptParams_CryptAlgo_toString(cryptAlgo)); GWEN_Buffer_free(mbuf); return NULL; } if (rv) { DBG_ERROR(AQFINTS_LOGDOMAIN, "Error unpadding this message (%d)", rv); GWEN_Buffer_Dump(mbuf, 2); GWEN_Buffer_free(mbuf); return NULL; } return mbuf; } aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/session/hbci/Makefile.am0000664000175000017500000000352414043610745025612 00000000000000#SUBDIRS= AM_CFLAGS=-DBUILDING_AQBANKING @visibility_cflags@ AM_CPPFLAGS = -I$(top_srcdir)/src/libs -I$(top_builddir)/src/libs $(gwenhywfar_includes) $(aqbanking_includes) \ -I$(srcdir)/../../.. \ -I$(srcdir)/../.. \ -I$(srcdir)/.. \ -I$(aqbanking_symlinkdir) $(all_includes) noinst_LTLIBRARIES=libaqfintssession_hbci.la typefiles= typedatadir=$(datadir)/aqbanking/typemaker2/c dist_typedata_DATA= built_sources= build_headers_priv= build_headers_pub= build_headers=$(build_headers_priv) $(build_headers_pub) noinst_HEADERS= $(build_headers) \ s_hbci.h \ s_sign_hbci.h \ s_decrypt_hbci.h \ s_encrypt_hbci.h \ s_verify_hbci.h libaqfintssession_hbci_la_SOURCES=$(built_sources) \ s_hbci.c \ s_sign_hbci.c \ s_decrypt_hbci.c \ s_encrypt_hbci.c \ s_verify_hbci.c #libaqfintssession_hbci_la_LIBADD= EXTRA_DIST=$(typefiles) $(built_sources) $(build_headers) built_sources: $(built_sources) list='$(SUBDIRS)'; for d in $$list; do \ $(MAKE) -C $$d built_sources; \ done ; clean_build_files: rm -f $(built_sources) $(build_headers) format_built_files: for f in $(built_sources) $(build_headers); do \ $(ASTYLE) --style=stroustrup -s2 --min-conditional-indent=0 --indent-labels --max-continuation-indent=80 --pad-comma --pad-header --unpad-paren --align-pointer=name --break-closing-braces --break-one-line-headers --attach-return-type --convert-tabs --max-code-length=120 --break-after-logical --suffix=none $$f; \ done sources: for f in $(libaqfintssession_hbci_la_SOURCES) $(EXTRA_DIST); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d sources; \ done typefiles: typedefs: cppcheck: for f in $(libaqfintssession_hbci_la_SOURCES); do \ cppcheck --force $$f ; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/session/hbci/s_hbci.h0000664000175000017500000000130514043610745025151 00000000000000/*************************************************************************** begin : Sun Oct 27 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQFINTS_SESSION_HBCI_H #define AQFINTS_SESSION_HBCI_H #include "libaqfints/session/session.h" AQFINTS_SESSION *AQFINTS_SessionHbci_new(AQFINTS_PARSER *parser, AQFINTS_TRANSPORT *trans); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/session/hbci/s_sign_hbci.c0000664000175000017500000003230014044534775026174 00000000000000/*************************************************************************** begin : Sun Oct 27 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "libaqfints/session/hbci/s_sign_hbci.h" #include "libaqfints/session/s_decode.h" #include "libaqfints/session/cryptparams.h" #include "libaqfints/parser/parser.h" #include #include #include #include #include #include /* ------------------------------------------------------------------------------------------------ * forward declarations * ------------------------------------------------------------------------------------------------ */ static AQFINTS_SEGMENT *_createSigHead(AQFINTS_SESSION *sess, const AQFINTS_CRYPTPARAMS *cryptParams, int segNum, const AQFINTS_KEYDESCR *keyDescr, const char *ctrlRef); static AQFINTS_SEGMENT *_createSigTail(AQFINTS_SESSION *sess, const AQFINTS_CRYPTPARAMS *cryptParams, int segNum, const AQFINTS_KEYDESCR *keyDescr, const char *ctrlRef, const uint8_t *ptrSignature, uint32_t lenSignature); static int _createCtrlRef(char *ptrBuf, size_t lenBuf); static int _prepareSignSeg(AQFINTS_SESSION *sess, const AQFINTS_CRYPTPARAMS *cryptParams, const AQFINTS_KEYDESCR *keyDescr, const char *ctrlRef, GWEN_DB_NODE *cfg); static int _signSegments(AQFINTS_SESSION *sess, const AQFINTS_CRYPTPARAMS *cryptParams, const AQFINTS_KEYDESCR *keyDescr, AQFINTS_SEGMENT *segSigHead, AQFINTS_SEGMENT *segFirstToSign, AQFINTS_SEGMENT *segLastToSign, GWEN_BUFFER *sigBuf); /* ------------------------------------------------------------------------------------------------ * implementations * ------------------------------------------------------------------------------------------------ */ int AQFINTS_Session_SignSegmentHbci(AQFINTS_SESSION *sess, AQFINTS_MESSAGE *message, AQFINTS_KEYDESCR *keyDescr, AQFINTS_SEGMENT *segFirstToSign, AQFINTS_SEGMENT *segLastToSign, int sigHeadNum, int sigTailNum) { int rv; AQFINTS_SEGMENT_LIST *segmentList; char ctrlref[15]; AQFINTS_SEGMENT *segment; const char *securityProfileName; int securityProfileVersion; const AQFINTS_CRYPTPARAMS *cryptParams; GWEN_BUFFER *sigBuf; securityProfileName=AQFINTS_KeyDescr_GetSecurityProfileName(keyDescr); securityProfileVersion=AQFINTS_KeyDescr_GetSecurityProfileVersion(keyDescr); /* hack for hibiscus */ if (securityProfileVersion==0) { if (securityProfileName && strcasecmp(securityProfileName, "RDH")==0) securityProfileVersion=10; } cryptParams=AQFINTS_CryptParams_GetParamsForSecurityProfile(securityProfileName, securityProfileVersion); if (cryptParams==NULL) { DBG_ERROR(AQFINTS_LOGDOMAIN, "No crypt params for [%s:%d]", securityProfileName?securityProfileName:"", securityProfileVersion); return GWEN_ERROR_INVALID; } segmentList=AQFINTS_Message_GetSegmentList(message); rv=_createCtrlRef(ctrlref, sizeof(ctrlref)); if (rv<0) { DBG_INFO(AQFINTS_LOGDOMAIN, "here (%d)", rv); return rv; } rv=AQFINTS_Session_FilloutKeyname(sess, keyDescr, AQFINTS_SESSION_CRYPTOP_SIGN); if (rv<0) { DBG_INFO(AQFINTS_LOGDOMAIN, "here (%d)", rv); return rv; } segment=_createSigHead(sess, cryptParams, sigHeadNum, keyDescr, ctrlref); if (segment==NULL) { DBG_INFO(AQFINTS_LOGDOMAIN, "here"); return GWEN_ERROR_GENERIC; } AQFINTS_Segment_List_Insert(segment, segmentList); sigBuf=GWEN_Buffer_new(0, 256, 0, 1); rv=_signSegments(sess, cryptParams, keyDescr, segment, segFirstToSign, segLastToSign, sigBuf); if (rv<0) { DBG_INFO(AQFINTS_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(sigBuf); return rv; } segment=_createSigTail(sess, cryptParams, sigTailNum, keyDescr, ctrlref, (const uint8_t *) GWEN_Buffer_GetStart(sigBuf), GWEN_Buffer_GetUsedBytes(sigBuf)); if (segment==NULL) { DBG_INFO(AQFINTS_LOGDOMAIN, "here"); GWEN_Buffer_free(sigBuf); return GWEN_ERROR_GENERIC; } GWEN_Buffer_free(sigBuf); AQFINTS_Segment_List_Add(segment, segmentList); return 0; } int _signSegments(AQFINTS_SESSION *sess, const AQFINTS_CRYPTPARAMS *cryptParams, const AQFINTS_KEYDESCR *keyDescr, AQFINTS_SEGMENT *segSigHead, AQFINTS_SEGMENT *segFirstToSign, AQFINTS_SEGMENT *segLastToSign, GWEN_BUFFER *sigBuf) { uint32_t signLen; int rv; GWEN_BUFFER *hashSrcBuffer; hashSrcBuffer=GWEN_Buffer_new(0, 1024, 0, 1); rv=AQFINTS_Session_SampleDataToHash(segSigHead, segFirstToSign, segLastToSign, hashSrcBuffer); if (rv<0) { DBG_INFO(AQFINTS_LOGDOMAIN, "here (%d)", rv); return rv; } signLen=GWEN_Buffer_GetMaxUnsegmentedWrite(sigBuf); GWEN_Buffer_AllocRoom(sigBuf, 256); rv=AQFINTS_Session_Sign(sess, keyDescr, cryptParams, (const uint8_t *) GWEN_Buffer_GetStart(hashSrcBuffer), GWEN_Buffer_GetUsedBytes(hashSrcBuffer), (uint8_t *)GWEN_Buffer_GetStart(sigBuf), &signLen); if (rv<0) { DBG_INFO(AQFINTS_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(hashSrcBuffer); return rv; } GWEN_Buffer_free(hashSrcBuffer); GWEN_Buffer_IncrementPos(sigBuf, signLen); GWEN_Buffer_AdjustUsedBytes(sigBuf); return 0; } AQFINTS_SEGMENT *_createSigHead(AQFINTS_SESSION *sess, const AQFINTS_CRYPTPARAMS *cryptParams, int segNum, const AQFINTS_KEYDESCR *keyDescr, const char *ctrlRef) { GWEN_DB_NODE *dbSegment; AQFINTS_PARSER *parser; int hbciVersion; AQFINTS_SEGMENT *defSegment; AQFINTS_SEGMENT *segment; int rv; parser=AQFINTS_Session_GetParser(sess); hbciVersion=AQFINTS_Session_GetHbciVersion(sess); /* HNSHA */ defSegment=AQFINTS_Parser_FindSegmentHighestVersionForProto(parser, "HNSHK", hbciVersion); if (defSegment==NULL) { DBG_ERROR(AQFINTS_LOGDOMAIN, "No matching definition segment found for HNSHK (proto=%d)", hbciVersion); return NULL; } segment=AQFINTS_Segment_new(); AQFINTS_Segment_copy(segment, defSegment); AQFINTS_Segment_SetSegmentNumber(segment, segNum); dbSegment=GWEN_DB_Group_new("sigHead"); AQFINTS_Segment_SetDbData(segment, dbSegment); rv=_prepareSignSeg(sess, cryptParams, keyDescr, ctrlRef, dbSegment); if (rv<0) { DBG_INFO(AQFINTS_LOGDOMAIN, "here (%d)", rv); AQFINTS_Segment_free(segment); return NULL; } rv=AQFINTS_Session_WriteSegment(sess, segment); if (rv<0) { DBG_INFO(0, "here (%d)", rv); AQFINTS_Segment_free(segment); } return segment; } AQFINTS_SEGMENT *_createSigTail(AQFINTS_SESSION *sess, const AQFINTS_CRYPTPARAMS *cryptParams, int segNum, const AQFINTS_KEYDESCR *keyDescr, const char *ctrlRef, const uint8_t *ptrSignature, uint32_t lenSignature) { GWEN_DB_NODE *dbSegment; AQFINTS_PARSER *parser; int hbciVersion; AQFINTS_SEGMENT *defSegment; AQFINTS_SEGMENT *segment; int rv; const char *s; parser=AQFINTS_Session_GetParser(sess); hbciVersion=AQFINTS_Session_GetHbciVersion(sess); /* HNSHA */ defSegment=AQFINTS_Parser_FindSegmentHighestVersionForProto(parser, "HNSHA", hbciVersion); if (defSegment==NULL) { DBG_ERROR(AQFINTS_LOGDOMAIN, "No matching definition segment found for HNSHA (proto=%d)", hbciVersion); return NULL; } segment=AQFINTS_Segment_new(); AQFINTS_Segment_copy(segment, defSegment); AQFINTS_Segment_SetSegmentNumber(segment, segNum); dbSegment=GWEN_DB_Group_new("sigTail"); AQFINTS_Segment_SetDbData(segment, dbSegment); GWEN_DB_SetCharValue(dbSegment, GWEN_DB_FLAGS_DEFAULT, "ctrlref", ctrlRef); if (ptrSignature && lenSignature) GWEN_DB_SetBinValue(dbSegment, GWEN_DB_FLAGS_DEFAULT, "signature", ptrSignature, lenSignature); s=AQFINTS_KeyDescr_GetPin(keyDescr); if (s && *s) GWEN_DB_SetCharValue(dbSegment, GWEN_DB_FLAGS_DEFAULT, "pin", s); s=AQFINTS_KeyDescr_GetTan(keyDescr); if (s && *s) GWEN_DB_SetCharValue(dbSegment, GWEN_DB_FLAGS_DEFAULT, "tan", s); rv=AQFINTS_Session_WriteSegment(sess, segment); if (rv<0) { DBG_INFO(AQFINTS_LOGDOMAIN, "here (%d)", rv); AQFINTS_Segment_free(segment); } return segment; } int _createCtrlRef(char *ptrBuf, size_t lenBuf) { struct tm *lt; time_t tt; tt=time(0); lt=localtime(&tt); if (!strftime(ptrBuf, lenBuf, "%Y%m%d%H%M%S", lt)) { DBG_INFO(AQFINTS_LOGDOMAIN, "CtrlRef string too long"); return GWEN_ERROR_INTERNAL; } return 0; } int _prepareSignSeg(AQFINTS_SESSION *sess, const AQFINTS_CRYPTPARAMS *cryptParams, const AQFINTS_KEYDESCR *keyDescr, const char *ctrlRef, GWEN_DB_NODE *cfg) { char sdate[9]; char stime[7]; struct tm *lt; time_t tt; const char *s; const char *securityProfileName; int securityProfileVersion; /* some preparations */ tt=time(0); lt=localtime(&tt); /* create date */ if (!strftime(sdate, sizeof(sdate), "%Y%m%d", lt)) { DBG_INFO(AQFINTS_LOGDOMAIN, "Date string too long"); return GWEN_ERROR_INTERNAL; } /* create time */ if (!strftime(stime, sizeof(stime), "%H%M%S", lt)) { DBG_INFO(AQFINTS_LOGDOMAIN, "Date string too long"); return GWEN_ERROR_INTERNAL; } /* store info */ /* security profile */ securityProfileName=AQFINTS_KeyDescr_GetSecurityProfileName(keyDescr); securityProfileVersion=AQFINTS_KeyDescr_GetSecurityProfileVersion(keyDescr); /* hack for hibiscus */ if (securityProfileVersion==0) { if (securityProfileName && strcasecmp(securityProfileName, "RDH")==0) securityProfileVersion=10; } GWEN_DB_SetCharValue(cfg, GWEN_DB_FLAGS_DEFAULT, "secProfile/code", securityProfileName); GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "secProfile/version", securityProfileVersion); GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "function", 2); /* sign with digital signature key */ GWEN_DB_SetCharValue(cfg, GWEN_DB_FLAGS_DEFAULT, "ctrlref", ctrlRef); GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "area", 1); GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "role", 1); GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "SecDetails/id", AQFINTS_Session_GetIsServer(sess)?2:1); /* 1 client, 2=server */ s=AQFINTS_KeyDescr_GetSystemId(keyDescr); if (s && *s) GWEN_DB_SetCharValue(cfg, GWEN_DB_FLAGS_DEFAULT, "SecDetails/secId", s); GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "signseq", AQFINTS_KeyDescr_GetSignatureCounter(keyDescr)); GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "SecStamp/stampCode", 1); GWEN_DB_SetCharValue(cfg, GWEN_DB_FLAGS_DEFAULT, "SecStamp/date", sdate); GWEN_DB_SetCharValue(cfg, GWEN_DB_FLAGS_DEFAULT, "SecStamp/time", stime); /* hashAlgo */ GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "hashAlgo/purpose", 1); GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "hashAlgo/algo", AQFINTS_CryptParams_GetHashAlgoSign(cryptParams)); GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "hashAlgo/pname", 1); /* signAlgo */ GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "signAlgo/purpose", 6); GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "signAlgo/algo", AQFINTS_CryptParams_GetSignAlgo(cryptParams)); GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "signAlgo/mode", AQFINTS_CryptParams_GetOpModeSign(cryptParams)); /* keyname */ GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "key/country", AQFINTS_KeyDescr_GetCountry(keyDescr)); GWEN_DB_SetCharValue(cfg, GWEN_DB_FLAGS_DEFAULT, "key/bankcode", AQFINTS_KeyDescr_GetBankCode(keyDescr)); GWEN_DB_SetCharValue(cfg, GWEN_DB_FLAGS_DEFAULT, "key/userid", AQFINTS_KeyDescr_GetUserId(keyDescr)); GWEN_DB_SetCharValue(cfg, GWEN_DB_FLAGS_DEFAULT, "key/keytype", AQFINTS_KeyDescr_GetKeyType(keyDescr)); GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "key/keynum", AQFINTS_KeyDescr_GetKeyNumber(keyDescr)); GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "key/keyversion", AQFINTS_KeyDescr_GetKeyVersion(keyDescr)); /* TODO: add certificate data */ return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/session/hbci/s_encrypt_hbci.h0000664000175000017500000000136714044534775026736 00000000000000/*************************************************************************** begin : Sun Oct 27 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQFINTS_SESSION_ENCRYPT_HBCI_H #define AQFINTS_SESSION_ENCRYPT_HBCI_H #include "libaqfints/session/session.h" #include "libaqfints/parser/segment.h" int AQFINTS_Session_EncryptMessageHbci(AQFINTS_SESSION *sess, AQFINTS_MESSAGE *message); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/session/hbci/s_verify_hbci.c0000664000175000017500000000753214044534775026551 00000000000000/*************************************************************************** begin : Sun Oct 27 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "libaqfints/session/hbci/s_verify_hbci.h" #include "libaqfints/session/s_decode.h" #include "libaqfints/session/cryptparams.h" #include "libaqfints/parser/parser.h" #include #include #include #include #include #include /* ------------------------------------------------------------------------------------------------ * forward declarations * ------------------------------------------------------------------------------------------------ */ /* ------------------------------------------------------------------------------------------------ * implementations * ------------------------------------------------------------------------------------------------ */ int AQFINTS_Session_VerifySegmentHbci(AQFINTS_SESSION *sess, AQFINTS_MESSAGE *message, const AQFINTS_KEYDESCR *keyDescr, AQFINTS_SEGMENT *segSigHead, AQFINTS_SEGMENT *segSigTail, AQFINTS_SEGMENT *segFirstSigned, AQFINTS_SEGMENT *segLastSigned) { int rv; GWEN_DB_NODE *dbSigHead; GWEN_DB_NODE *dbSigTail; const uint8_t *ptr; unsigned int len=0; int sigCounter; const char *securityProfileName; int securityProfileVersion; const AQFINTS_CRYPTPARAMS *cryptParams; GWEN_BUFFER *bufHashData; securityProfileName=AQFINTS_KeyDescr_GetSecurityProfileName(keyDescr); securityProfileVersion=AQFINTS_KeyDescr_GetSecurityProfileVersion(keyDescr); /* hack for hibiscus */ if (securityProfileVersion==0) { if (securityProfileName && strcasecmp(securityProfileName, "RDH")==0) securityProfileVersion=10; } cryptParams=AQFINTS_CryptParams_GetParamsForSecurityProfile(securityProfileName, securityProfileVersion); if (cryptParams==NULL) { DBG_ERROR(AQFINTS_LOGDOMAIN, "No crypt params for [%s:%d]", securityProfileName?securityProfileName:"", securityProfileVersion); return GWEN_ERROR_INVALID; } dbSigTail=AQFINTS_Segment_GetDbData(segSigTail); assert(dbSigTail); ptr=(const uint8_t *) GWEN_DB_GetBinValue(dbSigTail, "signature", 0, 0, 0, &len); if (ptr==NULL || len<1) { DBG_ERROR(AQFINTS_LOGDOMAIN, "No signature in segment"); return GWEN_ERROR_BAD_DATA; } dbSigHead=AQFINTS_Segment_GetDbData(segSigHead); assert(dbSigHead); sigCounter=GWEN_DB_GetIntValue(dbSigHead, "signseq", 0, 0); bufHashData=GWEN_Buffer_new(0, 256, 0, 1); rv=AQFINTS_Session_SampleDataToHash(segSigHead, segFirstSigned, segLastSigned, bufHashData); if (rv<0) { DBG_INFO(AQFINTS_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(bufHashData); return rv; } rv=AQFINTS_Session_Verify(sess, keyDescr, cryptParams, (const uint8_t *) GWEN_Buffer_GetStart(bufHashData), GWEN_Buffer_GetUsedBytes(bufHashData), ptr, len, sigCounter); if (rv<0) { if (rv==GWEN_ERROR_TRY_AGAIN) { DBG_INFO(AQFINTS_LOGDOMAIN, "Not yet ready to verify signature, retry later"); GWEN_Buffer_free(bufHashData); } else { DBG_INFO(AQFINTS_LOGDOMAIN, "here (%d)", rv); } return rv; } return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/session/hbci/Makefile.in0000644000175000017500000006666015037736025025637 00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ #SUBDIRS= VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/libs/plugins/backends/aqfints/libaqfints/session/hbci ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/distri.m4 $(top_srcdir)/m4/gwenhywfar.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/os.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(dist_typedata_DATA) \ $(noinst_HEADERS) $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libaqfintssession_hbci_la_LIBADD = am__objects_1 = am_libaqfintssession_hbci_la_OBJECTS = $(am__objects_1) s_hbci.lo \ s_sign_hbci.lo s_decrypt_hbci.lo s_encrypt_hbci.lo \ s_verify_hbci.lo libaqfintssession_hbci_la_OBJECTS = \ $(am_libaqfintssession_hbci_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/s_decrypt_hbci.Plo \ ./$(DEPDIR)/s_encrypt_hbci.Plo ./$(DEPDIR)/s_hbci.Plo \ ./$(DEPDIR)/s_sign_hbci.Plo ./$(DEPDIR)/s_verify_hbci.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libaqfintssession_hbci_la_SOURCES) DIST_SOURCES = $(libaqfintssession_hbci_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(typedatadir)" DATA = $(dist_typedata_DATA) HEADERS = $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADD_ACLOCAL_FLAGS = @ADD_ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AQBANKING_CLI_VERSION_STRING = @AQBANKING_CLI_VERSION_STRING@ AQBANKING_FINTS_VERSION_STRING = @AQBANKING_FINTS_VERSION_STRING@ AQBANKING_SO_AGE = @AQBANKING_SO_AGE@ AQBANKING_SO_CURRENT = @AQBANKING_SO_CURRENT@ AQBANKING_SO_EFFECTIVE = @AQBANKING_SO_EFFECTIVE@ AQBANKING_SO_REVISION = @AQBANKING_SO_REVISION@ AQBANKING_VERSION_BUILD = @AQBANKING_VERSION_BUILD@ AQBANKING_VERSION_FULL_STRING = @AQBANKING_VERSION_FULL_STRING@ AQBANKING_VERSION_MAJOR = @AQBANKING_VERSION_MAJOR@ AQBANKING_VERSION_MINOR = @AQBANKING_VERSION_MINOR@ AQBANKING_VERSION_PATCHLEVEL = @AQBANKING_VERSION_PATCHLEVEL@ AQBANKING_VERSION_RELEASE_STRING = @AQBANKING_VERSION_RELEASE_STRING@ AQBANKING_VERSION_STRING = @AQBANKING_VERSION_STRING@ AQBANKING_VERSION_TAG = @AQBANKING_VERSION_TAG@ AQEBICS_CFLAGS = @AQEBICS_CFLAGS@ AQEBICS_LIBS = @AQEBICS_LIBS@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATETIME = @DATETIME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_EXCLUDE_PATTERNS = @DOXYGEN_EXCLUDE_PATTERNS@ DOXYGEN_FILE_PATTERNS = @DOXYGEN_FILE_PATTERNS@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENGUI_GTK2_CFLAGS = @GWENGUI_GTK2_CFLAGS@ GWENGUI_GTK2_LIBS = @GWENGUI_GTK2_LIBS@ GWENHYWFAR_MINIMUM_VERSION = @GWENHYWFAR_MINIMUM_VERSION@ HAVE_GWENGUI_GTK2 = @HAVE_GWENGUI_GTK2@ HAVE_I18N = @HAVE_I18N@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIBXSLT_CFLAGS = @LIBXSLT_CFLAGS@ LIBXSLT_LIBS = @LIBXSLT_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_SUPPORTS_QT = @MSGFMT_SUPPORTS_QT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ TUTORIALS = @TUTORIALS@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XMLMERGE = @XMLMERGE@ XMLSEC_CFLAGS = @XMLSEC_CFLAGS@ XMLSEC_LIBS = @XMLSEC_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ aqbanking_backends = @aqbanking_backends@ aqbanking_cfg_searchdir = @aqbanking_cfg_searchdir@ aqbanking_data_searchdir = @aqbanking_data_searchdir@ aqbanking_headerdir = @aqbanking_headerdir@ aqbanking_headerdir_am = @aqbanking_headerdir_am@ aqbanking_includes = @aqbanking_includes@ aqbanking_internal_libs = @aqbanking_internal_libs@ aqbanking_ldflags = @aqbanking_ldflags@ aqbanking_libs = @aqbanking_libs@ aqbanking_locale_searchdir = @aqbanking_locale_searchdir@ aqbanking_modules = @aqbanking_modules@ aqbanking_pkgdatadir = @aqbanking_pkgdatadir@ aqbanking_plugin_searchdir = @aqbanking_plugin_searchdir@ aqbanking_plugindir = @aqbanking_plugindir@ aqbanking_plugins_backends_dirs = @aqbanking_plugins_backends_dirs@ aqbanking_plugins_backends_libs = @aqbanking_plugins_backends_libs@ aqbanking_plugins_bankinfo_dirs = @aqbanking_plugins_bankinfo_dirs@ aqbanking_plugins_bankinfo_libs = @aqbanking_plugins_bankinfo_libs@ aqbanking_plugins_imexporters_dirs = @aqbanking_plugins_imexporters_dirs@ aqbanking_plugins_imexporters_libs = @aqbanking_plugins_imexporters_libs@ aqbanking_plugins_parsers_dirs = @aqbanking_plugins_parsers_dirs@ aqbanking_symlinkdir = @aqbanking_symlinkdir@ aqbanking_sys_is_windows = @aqbanking_sys_is_windows@ aqbankingpp_modules = @aqbankingpp_modules@ aqebics_datadir = @aqebics_datadir@ aqebics_includes = @aqebics_includes@ aqebics_internal_libs = @aqebics_internal_libs@ aqebics_ldflags = @aqebics_ldflags@ aqebics_libs = @aqebics_libs@ aqfints_datadir = @aqfints_datadir@ aqhbci_datadir = @aqhbci_datadir@ aqhbci_includes = @aqhbci_includes@ aqhbci_internal_libs = @aqhbci_internal_libs@ aqhbci_ldflags = @aqhbci_ldflags@ aqhbci_libs = @aqhbci_libs@ aqofxconnect_includes = @aqofxconnect_includes@ aqofxconnect_internal_libs = @aqofxconnect_internal_libs@ aqofxconnect_libs = @aqofxconnect_libs@ aqpaypal_includes = @aqpaypal_includes@ aqpaypal_internal_libs = @aqpaypal_internal_libs@ aqpaypal_libs = @aqpaypal_libs@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gmp_libs = @gmp_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_dir = @gwenhywfar_dir@ gwenhywfar_has_crypt = @gwenhywfar_has_crypt@ gwenhywfar_headers = @gwenhywfar_headers@ gwenhywfar_includes = @gwenhywfar_includes@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_plugins = @gwenhywfar_plugins@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ typemaker2_exe = @typemaker2_exe@ visibility_cflags = @visibility_cflags@ with_aqebics = @with_aqebics@ with_aqhbci = @with_aqhbci@ AM_CFLAGS = -DBUILDING_AQBANKING @visibility_cflags@ AM_CPPFLAGS = -I$(top_srcdir)/src/libs -I$(top_builddir)/src/libs $(gwenhywfar_includes) $(aqbanking_includes) \ -I$(srcdir)/../../.. \ -I$(srcdir)/../.. \ -I$(srcdir)/.. \ -I$(aqbanking_symlinkdir) $(all_includes) noinst_LTLIBRARIES = libaqfintssession_hbci.la typefiles = typedatadir = $(datadir)/aqbanking/typemaker2/c dist_typedata_DATA = built_sources = build_headers_priv = build_headers_pub = build_headers = $(build_headers_priv) $(build_headers_pub) noinst_HEADERS = $(build_headers) \ s_hbci.h \ s_sign_hbci.h \ s_decrypt_hbci.h \ s_encrypt_hbci.h \ s_verify_hbci.h libaqfintssession_hbci_la_SOURCES = $(built_sources) \ s_hbci.c \ s_sign_hbci.c \ s_decrypt_hbci.c \ s_encrypt_hbci.c \ s_verify_hbci.c #libaqfintssession_hbci_la_LIBADD= EXTRA_DIST = $(typefiles) $(built_sources) $(build_headers) all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libs/plugins/backends/aqfints/libaqfints/session/hbci/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libs/plugins/backends/aqfints/libaqfints/session/hbci/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libaqfintssession_hbci.la: $(libaqfintssession_hbci_la_OBJECTS) $(libaqfintssession_hbci_la_DEPENDENCIES) $(EXTRA_libaqfintssession_hbci_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libaqfintssession_hbci_la_OBJECTS) $(libaqfintssession_hbci_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/s_decrypt_hbci.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/s_encrypt_hbci.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/s_hbci.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/s_sign_hbci.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/s_verify_hbci.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-dist_typedataDATA: $(dist_typedata_DATA) @$(NORMAL_INSTALL) @list='$(dist_typedata_DATA)'; test -n "$(typedatadir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(typedatadir)'"; \ $(MKDIR_P) "$(DESTDIR)$(typedatadir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(typedatadir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(typedatadir)" || exit $$?; \ done uninstall-dist_typedataDATA: @$(NORMAL_UNINSTALL) @list='$(dist_typedata_DATA)'; test -n "$(typedatadir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(typedatadir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(typedatadir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/s_decrypt_hbci.Plo -rm -f ./$(DEPDIR)/s_encrypt_hbci.Plo -rm -f ./$(DEPDIR)/s_hbci.Plo -rm -f ./$(DEPDIR)/s_sign_hbci.Plo -rm -f ./$(DEPDIR)/s_verify_hbci.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dist_typedataDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/s_decrypt_hbci.Plo -rm -f ./$(DEPDIR)/s_encrypt_hbci.Plo -rm -f ./$(DEPDIR)/s_hbci.Plo -rm -f ./$(DEPDIR)/s_sign_hbci.Plo -rm -f ./$(DEPDIR)/s_verify_hbci.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-dist_typedataDATA .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-generic clean-libtool clean-noinstLTLIBRARIES \ cscopelist-am ctags ctags-am distclean distclean-compile \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dist_typedataDATA \ install-dvi install-dvi-am install-exec install-exec-am \ install-html install-html-am install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-dist_typedataDATA .PRECIOUS: Makefile built_sources: $(built_sources) list='$(SUBDIRS)'; for d in $$list; do \ $(MAKE) -C $$d built_sources; \ done ; clean_build_files: rm -f $(built_sources) $(build_headers) format_built_files: for f in $(built_sources) $(build_headers); do \ $(ASTYLE) --style=stroustrup -s2 --min-conditional-indent=0 --indent-labels --max-continuation-indent=80 --pad-comma --pad-header --unpad-paren --align-pointer=name --break-closing-braces --break-one-line-headers --attach-return-type --convert-tabs --max-code-length=120 --break-after-logical --suffix=none $$f; \ done sources: for f in $(libaqfintssession_hbci_la_SOURCES) $(EXTRA_DIST); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d sources; \ done typefiles: typedefs: cppcheck: for f in $(libaqfintssession_hbci_la_SOURCES); do \ cppcheck --force $$f ; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/session/hbci/s_decrypt_hbci.h0000664000175000017500000000211314044534775026712 00000000000000/*************************************************************************** begin : Sun Oct 27 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQFINTS_SESSION_DECRYPT_HBCI_H #define AQFINTS_SESSION_DECRYPT_HBCI_H #include "libaqfints/session/session.h" #include "libaqfints/parser/segment.h" int AQFINTS_Session_DecryptSegmentHbci(AQFINTS_SESSION *sess, AQFINTS_SEGMENT *segCryptHead, AQFINTS_SEGMENT *segCryptData, const AQFINTS_CRYPTPARAMS *cryptParams, const AQFINTS_KEYDESCR *keyDescr, AQFINTS_SEGMENT_LIST *segmentList); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/session/s_decode.c0000664000175000017500000001516014044534775024572 00000000000000/*************************************************************************** begin : Sat Aug 03 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "libaqfints/session/s_decode.h" #include "libaqfints/session/session.h" #include "libaqfints/session/s_decrypt.h" #include "libaqfints/session/s_verify.h" #include "libaqfints/session/s_log.h" #include "libaqfints/parser/parser.h" #include "libaqfints/parser/parser_dump.h" #include #include #include /* ------------------------------------------------------------------------------------------------ * forward declarations * ------------------------------------------------------------------------------------------------ */ int _setMessageInfoFromHeadSegment(AQFINTS_MESSAGE *message, AQFINTS_SEGMENT_LIST *segmentList); /* ------------------------------------------------------------------------------------------------ * implementations * ------------------------------------------------------------------------------------------------ */ AQFINTS_MESSAGE *AQFINTS_Session_DecodeMessage(AQFINTS_SESSION *sess, const uint8_t *ptrBuffer, uint32_t lenBuffer) { AQFINTS_SEGMENT_LIST *segmentList; AQFINTS_PARSER *parser; AQFINTS_MESSAGE *message; int rv; message=AQFINTS_Message_new(); parser=AQFINTS_Session_GetParser(sess); segmentList=AQFINTS_Message_GetSegmentList(message); /* parse HBCI message into a segment list */ DBG_DEBUG(AQFINTS_LOGDOMAIN, "Reading message into segment list"); rv=AQFINTS_Parser_ReadIntoSegmentList(parser, segmentList, ptrBuffer, lenBuffer); if (rv<0) { DBG_ERROR(AQFINTS_LOGDOMAIN, "here (%d)", rv); AQFINTS_Message_free(message); return NULL; } /* interprete segment list and extract data */ DBG_DEBUG(AQFINTS_LOGDOMAIN, "Reading segment list into dbs"); rv=AQFINTS_Parser_ReadSegmentListToDb(parser, segmentList); if (rv<0) { DBG_ERROR(AQFINTS_LOGDOMAIN, "here (%d)", rv); AQFINTS_Message_free(message); return NULL; } AQFINTS_Session_LogMessage(sess, ptrBuffer, lenBuffer, 1, 1); /* rec, crypt */ #if 0 DBG_ERROR(AQFINTS_LOGDOMAIN, "Received this segment list:"); AQFINTS_Parser_DumpSegmentList(segmentList, 2); #endif /* read basic message info from message head */ DBG_INFO(AQFINTS_LOGDOMAIN, "Reading basic message info from db"); rv=_setMessageInfoFromHeadSegment(message, segmentList); if (rv<0) { DBG_ERROR(AQFINTS_LOGDOMAIN, "here (%d)", rv); AQFINTS_Message_free(message); return NULL; } /* decrypt message, if necessary */ DBG_INFO(AQFINTS_LOGDOMAIN, "Decrypting message"); rv=AQFINTS_Session_DecryptMessage(sess, message); if (rv<0) { DBG_ERROR(AQFINTS_LOGDOMAIN, "here (%d)", rv); AQFINTS_Message_free(message); return NULL; } /* verify signatures, if any */ DBG_INFO(AQFINTS_LOGDOMAIN, "Verifying signatures"); rv=AQFINTS_Session_VerifyMessage(sess, message); if (rv<0) { DBG_ERROR(AQFINTS_LOGDOMAIN, "here (%d)", rv); AQFINTS_Message_free(message); return NULL; } DBG_INFO(AQFINTS_LOGDOMAIN, "Message decoded."); return message; } AQFINTS_KEYDESCR *AQFINTS_Session_ReadKeyDescrFromDbHead(GWEN_DB_NODE *dbHead) { GWEN_DB_NODE *dbKey; GWEN_DB_NODE *dbSecDetails; GWEN_DB_NODE *dbSecProfile; AQFINTS_KEYDESCR *keyDescr; unsigned int len; const uint8_t *ptr; dbKey=GWEN_DB_GetGroup(dbHead, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "key"); if (dbKey==NULL) { DBG_ERROR(AQFINTS_LOGDOMAIN, "No keyDescr in segment"); GWEN_DB_Dump(dbHead, 2); return NULL; } dbSecDetails=GWEN_DB_GetGroup(dbHead, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "secDetails"); if (dbSecDetails==NULL) { DBG_ERROR(AQFINTS_LOGDOMAIN, "No security details in segment"); GWEN_DB_Dump(dbHead, 2); return NULL; } dbSecProfile=GWEN_DB_GetGroup(dbHead, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "secProfile"); if (dbSecProfile==NULL) { DBG_ERROR(AQFINTS_LOGDOMAIN, "No security profile info in segment"); GWEN_DB_Dump(dbHead, 2); return NULL; } /* now create key description */ keyDescr=AQFINTS_KeyDescr_new(); /* info from "Key" */ AQFINTS_KeyDescr_SetUserId(keyDescr, GWEN_DB_GetCharValue(dbKey, "userId", 0, NULL)); AQFINTS_KeyDescr_SetKeyType(keyDescr, GWEN_DB_GetCharValue(dbKey, "keyType", 0, NULL)); AQFINTS_KeyDescr_SetKeyNumber(keyDescr, GWEN_DB_GetIntValue(dbKey, "keyNum", 0, 0)); AQFINTS_KeyDescr_SetKeyVersion(keyDescr, GWEN_DB_GetIntValue(dbKey, "keyVersion", 0, 0)); /* info from "SecDetails" */ len=0; ptr=(const uint8_t *) GWEN_DB_GetBinValue(dbSecDetails, "cid", 0, NULL, 0, &len); if (ptr && len>0) { uint8_t *ptrCopy; ptrCopy=(uint8_t *) malloc(len); assert(ptrCopy); memmove(ptrCopy, ptr, len); AQFINTS_KeyDescr_SetCid(keyDescr, ptrCopy, len); } AQFINTS_KeyDescr_SetSystemId(keyDescr, GWEN_DB_GetCharValue(dbSecDetails, "secId", 0, NULL)); /* info from security profile */ AQFINTS_KeyDescr_SetSecurityProfileName(keyDescr, GWEN_DB_GetCharValue(dbSecProfile, "code", 0, NULL)); AQFINTS_KeyDescr_SetSecurityProfileVersion(keyDescr, GWEN_DB_GetIntValue(dbSecProfile, "version", 0, 0)); /* done */ return keyDescr; } int _setMessageInfoFromHeadSegment(AQFINTS_MESSAGE *message, AQFINTS_SEGMENT_LIST *segmentList) { AQFINTS_SEGMENT *segment; const char *sCode; GWEN_DB_NODE *dbMsgHead; segment=AQFINTS_Segment_List_First(segmentList); if (segment==NULL) { DBG_ERROR(AQFINTS_LOGDOMAIN, "No segment in message"); return GWEN_ERROR_NO_DATA; } sCode=AQFINTS_Segment_GetCode(segment); if (sCode==NULL || *sCode==0 || strcasecmp(sCode, "HNHBK")) { DBG_ERROR(AQFINTS_LOGDOMAIN, "Message does not start with message head (%s)", sCode); return GWEN_ERROR_INVALID; } dbMsgHead=AQFINTS_Segment_GetDbData(segment); if (dbMsgHead==NULL) { DBG_ERROR(AQFINTS_LOGDOMAIN, "Segment has no DB data"); return GWEN_ERROR_BAD_DATA; } AQFINTS_Message_SetMessageNumber(message, GWEN_DB_GetIntValue(dbMsgHead, "msgnum", 0, 0)); AQFINTS_Message_SetRefMessageNumber(message, GWEN_DB_GetIntValue(dbMsgHead, "msgref", 0, 0)); AQFINTS_Message_SetDialogId(message, GWEN_DB_GetCharValue(dbMsgHead, "dialogId", 0, NULL)); AQFINTS_Message_SetHbciVersion(message, GWEN_DB_GetIntValue(dbMsgHead, "hversion", 0, 0)); return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/aqfints.h0000664000175000017500000000165614043610745023010 00000000000000/*************************************************************************** begin : Sun Jul 28 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQFINTS_H #define AQFINTS_H #define AQFINTS_LOGDOMAIN "aqfints" #define AQFINTS_PARSER_LOGDOMAIN "aqfints-parser" typedef enum { AQFINTS_LimitType_Unknown=-1, AQFINTS_LimitType_None=0, AQFINTS_LimitType_JobLimit=1, AQFINTS_LimitType_DayLimit, AQFINTS_LimitType_WeekLimit, AQFINTS_LimitType_MonthLimit, AQFINTS_LimitType_TimeLimit } AQFINTS_LIMIT_TYPE; int AQFINTS_Init(); int AQFINTS_Fini(); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/Makefile.am0000664000175000017500000000214414043610745023217 00000000000000SUBDIRS=parser msg service transport session AM_CPPFLAGS = -I$(srcdir) -I$(top_srcdir)/src/lib -I$(top_builddir)/src/lib $(gwenhywfar_includes) $(aqbanking_includes) -I$(srcdir)/.. AM_CFLAGS=@visibility_cflags@ # static plugin library noinst_LTLIBRARIES=libaqfints.la libaqfints_la_SOURCES=\ aqfints.c noinst_HEADERS= \ aqfints.h libaqfints_la_LIBADD= $(gwenhywfar_libs) \ parser/libaqfintsparser.la \ msg/libaqfintsmsg.la \ service/libaqfintsservice.la \ transport/libaqfintstransport.la \ session/libaqfintssession.la sources: for f in $(libaqfints_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for f in $(plugin_DATA); do \ echo $(subdir)/$$f >>$(top_srcdir)/pdsources; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d sources; \ done built_sources: cppcheck: for f in $(libaqfints_la_SOURCES); do \ cppcheck --force $$f ; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done typefiles: for d in $(SUBDIRS); do \ $(MAKE) -C $$d typefiles; \ done typedefs: for d in $(SUBDIRS); do \ $(MAKE) -C $$d typedefs; \ done aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/transport/0000755000175000017500000000000015037736161023301 500000000000000aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/transport/Makefile.am0000664000175000017500000000375014043610745025257 00000000000000#SUBDIRS= AM_CFLAGS=-DBUILDING_AQBANKING @visibility_cflags@ AM_CPPFLAGS = -I$(top_srcdir)/src/libs -I$(top_builddir)/src/libs $(gwenhywfar_includes) \ -I$(srcdir)/../.. \ -I$(srcdir)/.. \ -I$(aqbanking_symlinkdir) $(all_includes) \ -I$(top_srcdir)/src/libs/aqbanking noinst_LTLIBRARIES=libaqfintstransport.la typefiles=\ transport.xml typedatadir=$(datadir)/aqbanking/typemaker2/c dist_typedata_DATA= built_sources=\ transport.c build_headers_priv=\ transport_p.h build_headers_pub=\ transport.h build_headers=$(build_headers_priv) $(build_headers_pub) noinst_HEADERS= $(build_headers) \ transportssl.h \ transportssl_p.h \ transporthbci.h \ transporthbci_p.h libaqfintstransport_la_SOURCES=$(built_sources) \ transportssl.c \ transporthbci.c #libaqfintstransport_la_LIBADD= EXTRA_DIST=$(typefiles) $(built_sources) $(build_headers) built_sources: $(built_sources) list='$(SUBDIRS)'; for d in $$list; do \ $(MAKE) -C $$d built_sources; \ done ; clean_build_files: rm -f $(built_sources) $(build_headers) format_built_files: for f in $(built_sources) $(build_headers); do \ $(ASTYLE) --style=stroustrup -s2 --min-conditional-indent=0 --indent-labels --max-continuation-indent=80 --pad-comma --pad-header --unpad-paren --align-pointer=name --break-closing-braces --break-one-line-headers --attach-return-type --convert-tabs --max-code-length=120 --break-after-logical --suffix=none $$f; \ done sources: for f in $(libaqfintstransport_la_SOURCES) $(EXTRA_DIST); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d sources; \ done typefiles: $(typefiles) $(typemaker2_exe) -I $(top_srcdir)/src/libs/aqbanking/typemaker2/c -I $(gwenhywfar_dir)/share/gwenhywfar/typemaker2/c -I $(srcdir) --destfolder="$(srcdir)" $(typefiles) cppcheck: for f in $(libaqfintstransport_la_SOURCES); do \ cppcheck --force $$f ; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/transport/transporthbci.h0000664000175000017500000000170214044534775026262 00000000000000/*************************************************************************** begin : Wed Jul 31 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQFINTS_TRANSPORTHBCI_H #define AQFINTS_TRANSPORTHBCI_H #include "libaqfints/transport/transport.h" #include /** * Create a transport layer for traditional HBCI (port 3000). */ AQFINTS_TRANSPORT *AQFINTS_TransportHbci_new(const char *url); /** * Create a transport layer for traditional HBCI (port 3000) using an already open GWEN_SYNCIO. */ AQFINTS_TRANSPORT *AQFINTS_TransportHbci_fromSyncIo(GWEN_SYNCIO *sio); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/transport/transport_p.h0000664000175000017500000000152115037736055025750 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "transport.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef AQFINTS_TRANSPORT_TRANSPORT_P_H #define AQFINTS_TRANSPORT_TRANSPORT_P_H #include "./transport.h" #ifdef __cplusplus extern "C" { #endif struct AQFINTS_TRANSPORT { GWEN_INHERIT_ELEMENT(AQFINTS_TRANSPORT) int _refCount; char *url; uint32_t runtimeFlags; /* volatile */ AQFINTS_TRANSPORT_CONNECT_FN connectFn; AQFINTS_TRANSPORT_DISCONNECT_FN disconnectFn; AQFINTS_TRANSPORT_SENDMESSAGE_FN sendMessageFn; AQFINTS_TRANSPORT_RECEIVEMESSAGE_FN receiveMessageFn; }; #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/transport/transport.xml0000664000175000017500000001164414043610745026002 00000000000000 AQFINTS_TRANSPORT AQFINTS_Transport transport with_inherit with_refcount noCopy noDup
libaqfints/aqfints.h
gwenhywfar/buffer.h
ctype.h
/** \n * Expects the given to contain the beginning of a HBCI message starting with a \n * HNHBK segment. Reads the message size from the appropriate field of that segment. \n */ \n $(api) int $(struct_prefix)_DetermineMessageSize(const char *ptr); int $(struct_prefix)_DetermineMessageSize(const char *ptr) { const char *p1; const char *p2; char *copiedString=NULL; int msgSize; /* seek to begin of size */ p1=strchr(ptr, '+'); if (p1==NULL) { DBG_ERROR(AQFINTS_LOGDOMAIN, "Bad data (missing '+')"); return GWEN_ERROR_BAD_DATA; } p1++; /* seek to end of size */ p2=strchr(p1, '+'); if (p2==NULL) { DBG_ERROR(AQFINTS_LOGDOMAIN, "Bad data (missing second '+')"); return GWEN_ERROR_BAD_DATA; } /* read message size */ copiedString=strndup(p1, (p2-p1)); assert(copiedString); if (1!=sscanf(p1, "%d", &msgSize)) { DBG_ERROR(AQFINTS_LOGDOMAIN, "Bad size field [%s]", copiedString); free(copiedString); return GWEN_ERROR_BAD_DATA; } free(copiedString); return msgSize; }
public own with_hash const dup const 0 0 volatile with_flags public public int GWEN_ERROR_NOT_IMPLEMENTED public int GWEN_ERROR_NOT_IMPLEMENTED Send a HBCI message. Returns 0 if okay, error code otherwise. public int GWEN_ERROR_NOT_IMPLEMENTED Pointer to a buffer containing the message to be sent size of the buffer containing the message to be sent Receive a HBCI message. Returns 0 if okay, error code otherwise. public int GWEN_ERROR_NOT_IMPLEMENTED Pointer to a GWEN_BUFFER to receive the HBCI message
aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/transport/Makefile.in0000644000175000017500000006613715037736025025302 00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ #SUBDIRS= VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/libs/plugins/backends/aqfints/libaqfints/transport ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/distri.m4 $(top_srcdir)/m4/gwenhywfar.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/os.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(dist_typedata_DATA) \ $(noinst_HEADERS) $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libaqfintstransport_la_LIBADD = am__objects_1 = transport.lo am_libaqfintstransport_la_OBJECTS = $(am__objects_1) transportssl.lo \ transporthbci.lo libaqfintstransport_la_OBJECTS = $(am_libaqfintstransport_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/transport.Plo \ ./$(DEPDIR)/transporthbci.Plo ./$(DEPDIR)/transportssl.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libaqfintstransport_la_SOURCES) DIST_SOURCES = $(libaqfintstransport_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(typedatadir)" DATA = $(dist_typedata_DATA) HEADERS = $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADD_ACLOCAL_FLAGS = @ADD_ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AQBANKING_CLI_VERSION_STRING = @AQBANKING_CLI_VERSION_STRING@ AQBANKING_FINTS_VERSION_STRING = @AQBANKING_FINTS_VERSION_STRING@ AQBANKING_SO_AGE = @AQBANKING_SO_AGE@ AQBANKING_SO_CURRENT = @AQBANKING_SO_CURRENT@ AQBANKING_SO_EFFECTIVE = @AQBANKING_SO_EFFECTIVE@ AQBANKING_SO_REVISION = @AQBANKING_SO_REVISION@ AQBANKING_VERSION_BUILD = @AQBANKING_VERSION_BUILD@ AQBANKING_VERSION_FULL_STRING = @AQBANKING_VERSION_FULL_STRING@ AQBANKING_VERSION_MAJOR = @AQBANKING_VERSION_MAJOR@ AQBANKING_VERSION_MINOR = @AQBANKING_VERSION_MINOR@ AQBANKING_VERSION_PATCHLEVEL = @AQBANKING_VERSION_PATCHLEVEL@ AQBANKING_VERSION_RELEASE_STRING = @AQBANKING_VERSION_RELEASE_STRING@ AQBANKING_VERSION_STRING = @AQBANKING_VERSION_STRING@ AQBANKING_VERSION_TAG = @AQBANKING_VERSION_TAG@ AQEBICS_CFLAGS = @AQEBICS_CFLAGS@ AQEBICS_LIBS = @AQEBICS_LIBS@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATETIME = @DATETIME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_EXCLUDE_PATTERNS = @DOXYGEN_EXCLUDE_PATTERNS@ DOXYGEN_FILE_PATTERNS = @DOXYGEN_FILE_PATTERNS@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENGUI_GTK2_CFLAGS = @GWENGUI_GTK2_CFLAGS@ GWENGUI_GTK2_LIBS = @GWENGUI_GTK2_LIBS@ GWENHYWFAR_MINIMUM_VERSION = @GWENHYWFAR_MINIMUM_VERSION@ HAVE_GWENGUI_GTK2 = @HAVE_GWENGUI_GTK2@ HAVE_I18N = @HAVE_I18N@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIBXSLT_CFLAGS = @LIBXSLT_CFLAGS@ LIBXSLT_LIBS = @LIBXSLT_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_SUPPORTS_QT = @MSGFMT_SUPPORTS_QT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ TUTORIALS = @TUTORIALS@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XMLMERGE = @XMLMERGE@ XMLSEC_CFLAGS = @XMLSEC_CFLAGS@ XMLSEC_LIBS = @XMLSEC_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ aqbanking_backends = @aqbanking_backends@ aqbanking_cfg_searchdir = @aqbanking_cfg_searchdir@ aqbanking_data_searchdir = @aqbanking_data_searchdir@ aqbanking_headerdir = @aqbanking_headerdir@ aqbanking_headerdir_am = @aqbanking_headerdir_am@ aqbanking_includes = @aqbanking_includes@ aqbanking_internal_libs = @aqbanking_internal_libs@ aqbanking_ldflags = @aqbanking_ldflags@ aqbanking_libs = @aqbanking_libs@ aqbanking_locale_searchdir = @aqbanking_locale_searchdir@ aqbanking_modules = @aqbanking_modules@ aqbanking_pkgdatadir = @aqbanking_pkgdatadir@ aqbanking_plugin_searchdir = @aqbanking_plugin_searchdir@ aqbanking_plugindir = @aqbanking_plugindir@ aqbanking_plugins_backends_dirs = @aqbanking_plugins_backends_dirs@ aqbanking_plugins_backends_libs = @aqbanking_plugins_backends_libs@ aqbanking_plugins_bankinfo_dirs = @aqbanking_plugins_bankinfo_dirs@ aqbanking_plugins_bankinfo_libs = @aqbanking_plugins_bankinfo_libs@ aqbanking_plugins_imexporters_dirs = @aqbanking_plugins_imexporters_dirs@ aqbanking_plugins_imexporters_libs = @aqbanking_plugins_imexporters_libs@ aqbanking_plugins_parsers_dirs = @aqbanking_plugins_parsers_dirs@ aqbanking_symlinkdir = @aqbanking_symlinkdir@ aqbanking_sys_is_windows = @aqbanking_sys_is_windows@ aqbankingpp_modules = @aqbankingpp_modules@ aqebics_datadir = @aqebics_datadir@ aqebics_includes = @aqebics_includes@ aqebics_internal_libs = @aqebics_internal_libs@ aqebics_ldflags = @aqebics_ldflags@ aqebics_libs = @aqebics_libs@ aqfints_datadir = @aqfints_datadir@ aqhbci_datadir = @aqhbci_datadir@ aqhbci_includes = @aqhbci_includes@ aqhbci_internal_libs = @aqhbci_internal_libs@ aqhbci_ldflags = @aqhbci_ldflags@ aqhbci_libs = @aqhbci_libs@ aqofxconnect_includes = @aqofxconnect_includes@ aqofxconnect_internal_libs = @aqofxconnect_internal_libs@ aqofxconnect_libs = @aqofxconnect_libs@ aqpaypal_includes = @aqpaypal_includes@ aqpaypal_internal_libs = @aqpaypal_internal_libs@ aqpaypal_libs = @aqpaypal_libs@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gmp_libs = @gmp_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_dir = @gwenhywfar_dir@ gwenhywfar_has_crypt = @gwenhywfar_has_crypt@ gwenhywfar_headers = @gwenhywfar_headers@ gwenhywfar_includes = @gwenhywfar_includes@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_plugins = @gwenhywfar_plugins@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ typemaker2_exe = @typemaker2_exe@ visibility_cflags = @visibility_cflags@ with_aqebics = @with_aqebics@ with_aqhbci = @with_aqhbci@ AM_CFLAGS = -DBUILDING_AQBANKING @visibility_cflags@ AM_CPPFLAGS = -I$(top_srcdir)/src/libs -I$(top_builddir)/src/libs $(gwenhywfar_includes) \ -I$(srcdir)/../.. \ -I$(srcdir)/.. \ -I$(aqbanking_symlinkdir) $(all_includes) \ -I$(top_srcdir)/src/libs/aqbanking noinst_LTLIBRARIES = libaqfintstransport.la typefiles = \ transport.xml typedatadir = $(datadir)/aqbanking/typemaker2/c dist_typedata_DATA = built_sources = \ transport.c build_headers_priv = \ transport_p.h build_headers_pub = \ transport.h build_headers = $(build_headers_priv) $(build_headers_pub) noinst_HEADERS = $(build_headers) \ transportssl.h \ transportssl_p.h \ transporthbci.h \ transporthbci_p.h libaqfintstransport_la_SOURCES = $(built_sources) \ transportssl.c \ transporthbci.c #libaqfintstransport_la_LIBADD= EXTRA_DIST = $(typefiles) $(built_sources) $(build_headers) all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libs/plugins/backends/aqfints/libaqfints/transport/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libs/plugins/backends/aqfints/libaqfints/transport/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libaqfintstransport.la: $(libaqfintstransport_la_OBJECTS) $(libaqfintstransport_la_DEPENDENCIES) $(EXTRA_libaqfintstransport_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libaqfintstransport_la_OBJECTS) $(libaqfintstransport_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/transport.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/transporthbci.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/transportssl.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-dist_typedataDATA: $(dist_typedata_DATA) @$(NORMAL_INSTALL) @list='$(dist_typedata_DATA)'; test -n "$(typedatadir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(typedatadir)'"; \ $(MKDIR_P) "$(DESTDIR)$(typedatadir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(typedatadir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(typedatadir)" || exit $$?; \ done uninstall-dist_typedataDATA: @$(NORMAL_UNINSTALL) @list='$(dist_typedata_DATA)'; test -n "$(typedatadir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(typedatadir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(typedatadir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/transport.Plo -rm -f ./$(DEPDIR)/transporthbci.Plo -rm -f ./$(DEPDIR)/transportssl.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dist_typedataDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/transport.Plo -rm -f ./$(DEPDIR)/transporthbci.Plo -rm -f ./$(DEPDIR)/transportssl.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-dist_typedataDATA .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-generic clean-libtool clean-noinstLTLIBRARIES \ cscopelist-am ctags ctags-am distclean distclean-compile \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dist_typedataDATA \ install-dvi install-dvi-am install-exec install-exec-am \ install-html install-html-am install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-dist_typedataDATA .PRECIOUS: Makefile built_sources: $(built_sources) list='$(SUBDIRS)'; for d in $$list; do \ $(MAKE) -C $$d built_sources; \ done ; clean_build_files: rm -f $(built_sources) $(build_headers) format_built_files: for f in $(built_sources) $(build_headers); do \ $(ASTYLE) --style=stroustrup -s2 --min-conditional-indent=0 --indent-labels --max-continuation-indent=80 --pad-comma --pad-header --unpad-paren --align-pointer=name --break-closing-braces --break-one-line-headers --attach-return-type --convert-tabs --max-code-length=120 --break-after-logical --suffix=none $$f; \ done sources: for f in $(libaqfintstransport_la_SOURCES) $(EXTRA_DIST); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d sources; \ done typefiles: $(typefiles) $(typemaker2_exe) -I $(top_srcdir)/src/libs/aqbanking/typemaker2/c -I $(gwenhywfar_dir)/share/gwenhywfar/typemaker2/c -I $(srcdir) --destfolder="$(srcdir)" $(typefiles) cppcheck: for f in $(libaqfintstransport_la_SOURCES); do \ cppcheck --force $$f ; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/transport/transportssl.c0000664000175000017500000003371414043610745026150 00000000000000/*************************************************************************** begin : Wed Jul 31 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "transportssl_p.h" #include "libaqfints/aqfints.h" #include #include #include #define I18N /* ------------------------------------------------------------------------------------------------ * forward declarations * ------------------------------------------------------------------------------------------------ */ static void GWENHYWFAR_CB freeData(void *bp, void *p); static int createIoLayer(AQFINTS_TRANSPORT *trans); static int transportConnect(AQFINTS_TRANSPORT *trans); static int transportDisconnect(AQFINTS_TRANSPORT *trans); static int transportSendMessage(AQFINTS_TRANSPORT *trans, const char *ptrBuffer, int lenBuffer); static int transportReallySendMessage(AQFINTS_TRANSPORT *trans, const char *ptrBuffer, int lenBuffer); static int transportReceiveMessage(AQFINTS_TRANSPORT *trans, GWEN_BUFFER *buffer); static int transportReallyReceiveMessage(AQFINTS_TRANSPORT *trans, GWEN_BUFFER *buffer); static int recvPacket(AQFINTS_TRANSPORT *trans, GWEN_BUFFER *tbuf); static void trimBuffer(GWEN_BUFFER *tbuf); /* ------------------------------------------------------------------------------------------------ * implementations * ------------------------------------------------------------------------------------------------ */ GWEN_INHERIT(AQFINTS_TRANSPORT, AQFINTS_TRANSPORT_SSL) AQFINTS_TRANSPORT *AQFINTS_TransportSsl_new(const char *url) { AQFINTS_TRANSPORT *trans; AQFINTS_TRANSPORT_SSL *xtrans; trans=AQFINTS_Transport_new(); GWEN_NEW_OBJECT(AQFINTS_TRANSPORT_SSL, xtrans); GWEN_INHERIT_SETDATA(AQFINTS_TRANSPORT, AQFINTS_TRANSPORT_SSL, trans, xtrans, freeData); AQFINTS_Transport_SetUrl(trans, url); /* set virtual functions */ AQFINTS_Transport_SetConnectFn(trans, transportConnect); AQFINTS_Transport_SetDisconnectFn(trans, transportDisconnect); AQFINTS_Transport_SetSendMessageFn(trans, transportSendMessage); AQFINTS_Transport_SetReceiveMessageFn(trans, transportReceiveMessage); return trans; } AQFINTS_TRANSPORT *AQFINTS_TransportSsl_fromHttpSession(GWEN_HTTP_SESSION *httpSession) { AQFINTS_TRANSPORT *trans; AQFINTS_TRANSPORT_SSL *xtrans; trans=AQFINTS_Transport_new(); GWEN_NEW_OBJECT(AQFINTS_TRANSPORT_SSL, xtrans); GWEN_INHERIT_SETDATA(AQFINTS_TRANSPORT, AQFINTS_TRANSPORT_SSL, trans, xtrans, freeData); /* set virtual functions */ AQFINTS_Transport_SetConnectFn(trans, transportConnect); AQFINTS_Transport_SetDisconnectFn(trans, transportDisconnect); AQFINTS_Transport_SetSendMessageFn(trans, transportSendMessage); AQFINTS_Transport_SetReceiveMessageFn(trans, transportReceiveMessage); xtrans->httpSession=httpSession; return trans; } void GWENHYWFAR_CB freeData(void *bp, void *p) { AQFINTS_TRANSPORT_SSL *xtrans; xtrans=(AQFINTS_TRANSPORT_SSL *) p; free(xtrans->contentType); free(xtrans->userAgent); GWEN_HttpSession_free(xtrans->httpSession); GWEN_FREE_OBJECT(xtrans); } int AQFINTS_TransportSsl_TestConnection(AQFINTS_TRANSPORT *trans) { AQFINTS_TRANSPORT_SSL *xtrans; int rv; assert(trans); xtrans=GWEN_INHERIT_GETDATA(AQFINTS_TRANSPORT, AQFINTS_TRANSPORT_SSL, trans); assert(xtrans); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Notice, I18N("Preparing connection")); rv=transportConnect(trans); if (rv<0) { DBG_INFO(AQFINTS_LOGDOMAIN, "Could not connect (%d)", rv); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("Error preparing connection")); return rv; } rv=GWEN_HttpSession_ConnectionTest(xtrans->httpSession); GWEN_HttpSession_Fini(xtrans->httpSession); GWEN_HttpSession_free(xtrans->httpSession); xtrans->httpSession=NULL; if (rv<0) { DBG_INFO(AQFINTS_LOGDOMAIN, "here (%d)", rv); return rv; } return 0; } const char *AQFINTS_TransportSsl_GetContentType(const AQFINTS_TRANSPORT *trans) { AQFINTS_TRANSPORT_SSL *xtrans; assert(trans); xtrans=GWEN_INHERIT_GETDATA(AQFINTS_TRANSPORT, AQFINTS_TRANSPORT_SSL, trans); assert(xtrans); return xtrans->contentType; } void AQFINTS_TransportSsl_SetContentType(AQFINTS_TRANSPORT *trans, const char *s) { AQFINTS_TRANSPORT_SSL *xtrans; assert(trans); xtrans=GWEN_INHERIT_GETDATA(AQFINTS_TRANSPORT, AQFINTS_TRANSPORT_SSL, trans); assert(xtrans); if (xtrans->contentType) free(xtrans->contentType); if (s) xtrans->contentType=strdup(s); else xtrans->contentType=NULL; } const char *AQFINTS_TransportSsl_GetUserAgent(const AQFINTS_TRANSPORT *trans) { AQFINTS_TRANSPORT_SSL *xtrans; assert(trans); xtrans=GWEN_INHERIT_GETDATA(AQFINTS_TRANSPORT, AQFINTS_TRANSPORT_SSL, trans); assert(xtrans); return xtrans->userAgent; } void AQFINTS_TransportSsl_SetUserAgent(AQFINTS_TRANSPORT *trans, const char *s) { AQFINTS_TRANSPORT_SSL *xtrans; assert(trans); xtrans=GWEN_INHERIT_GETDATA(AQFINTS_TRANSPORT, AQFINTS_TRANSPORT_SSL, trans); assert(xtrans); if (xtrans->userAgent) free(xtrans->userAgent); if (s) xtrans->userAgent=strdup(s); else xtrans->userAgent=NULL; } int AQFINTS_TransportSsl_GetVersionMajor(const AQFINTS_TRANSPORT *trans) { AQFINTS_TRANSPORT_SSL *xtrans; assert(trans); xtrans=GWEN_INHERIT_GETDATA(AQFINTS_TRANSPORT, AQFINTS_TRANSPORT_SSL, trans); assert(xtrans); return xtrans->versionMajor; } void AQFINTS_TransportSsl_SetVersionMajor(AQFINTS_TRANSPORT *trans, int v) { AQFINTS_TRANSPORT_SSL *xtrans; assert(trans); xtrans=GWEN_INHERIT_GETDATA(AQFINTS_TRANSPORT, AQFINTS_TRANSPORT_SSL, trans); assert(xtrans); xtrans->versionMajor=v; } int AQFINTS_TransportSsl_GetVersionMinor(const AQFINTS_TRANSPORT *trans) { AQFINTS_TRANSPORT_SSL *xtrans; assert(trans); xtrans=GWEN_INHERIT_GETDATA(AQFINTS_TRANSPORT, AQFINTS_TRANSPORT_SSL, trans); assert(xtrans); return xtrans->versionMinor; } void AQFINTS_TransportSsl_SetVersionMinor(AQFINTS_TRANSPORT *trans, int v) { AQFINTS_TRANSPORT_SSL *xtrans; assert(trans); xtrans=GWEN_INHERIT_GETDATA(AQFINTS_TRANSPORT, AQFINTS_TRANSPORT_SSL, trans); assert(xtrans); xtrans->versionMinor=v; } int createIoLayer(AQFINTS_TRANSPORT *trans) { AQFINTS_TRANSPORT_SSL *xtrans; GWEN_HTTP_SESSION *sess; int rv; assert(trans); xtrans=GWEN_INHERIT_GETDATA(AQFINTS_TRANSPORT, AQFINTS_TRANSPORT_SSL, trans); assert(xtrans); sess=GWEN_HttpSession_new(AQFINTS_Transport_GetUrl(trans), "https", 443); assert(sess); GWEN_HttpSession_AddFlags(sess, GWEN_HTTP_SESSION_FLAGS_NO_CACHE); GWEN_HttpSession_AddFlags(sess, GWEN_HTTP_SESSION_FLAGS_TLS_IGN_PREMATURE_CLOSE); if (xtrans->contentType) GWEN_HttpSession_SetHttpContentType(sess, xtrans->contentType); if (xtrans->userAgent) GWEN_HttpSession_SetHttpUserAgent(sess, xtrans->userAgent); rv=GWEN_HttpSession_Init(sess); if (rv<0) { DBG_INFO(AQFINTS_LOGDOMAIN, "here (%d)", rv); GWEN_HttpSession_free(sess); return rv; } xtrans->httpSession=sess; return 0; } int transportConnect(AQFINTS_TRANSPORT *trans) { AQFINTS_TRANSPORT_SSL *xtrans; assert(trans); xtrans=GWEN_INHERIT_GETDATA(AQFINTS_TRANSPORT, AQFINTS_TRANSPORT_SSL, trans); assert(xtrans); if (xtrans->httpSession==NULL) { int rv; rv=createIoLayer(trans); if (rv<0) { DBG_INFO(AQFINTS_LOGDOMAIN, "here (%d)", rv); return rv; } AQFINTS_Transport_AddRuntimeFlags(trans, AQFINTS_TRANSPORT_RTFLAGS_CONNECTED); } return 0; } int transportDisconnect(AQFINTS_TRANSPORT *trans) { AQFINTS_TRANSPORT_SSL *xtrans; assert(trans); xtrans=GWEN_INHERIT_GETDATA(AQFINTS_TRANSPORT, AQFINTS_TRANSPORT_SSL, trans); assert(xtrans); if (xtrans->httpSession) { GWEN_HttpSession_Fini(xtrans->httpSession); GWEN_HttpSession_free(xtrans->httpSession); xtrans->httpSession=NULL; AQFINTS_Transport_SubRuntimeFlags(trans, AQFINTS_TRANSPORT_RTFLAGS_CONNECTED); } return 0; } int transportSendMessage(AQFINTS_TRANSPORT *trans, const char *ptrBuffer, int lenBuffer) { AQFINTS_TRANSPORT_SSL *xtrans; int rv; assert(trans); xtrans=GWEN_INHERIT_GETDATA(AQFINTS_TRANSPORT, AQFINTS_TRANSPORT_SSL, trans); assert(xtrans); rv=transportReallySendMessage(trans, ptrBuffer, lenBuffer); if (rv<0) { DBG_INFO(AQFINTS_LOGDOMAIN, "Could not BASE64 encode data (%d)", rv); GWEN_HttpSession_Fini(xtrans->httpSession); GWEN_HttpSession_free(xtrans->httpSession); xtrans->httpSession=NULL; return rv; } return 0; } int transportReallySendMessage(AQFINTS_TRANSPORT *trans, const char *ptrBuffer, int lenBuffer) { AQFINTS_TRANSPORT_SSL *xtrans; GWEN_BUFFER *tbuf; int rv; assert(trans); xtrans=GWEN_INHERIT_GETDATA(AQFINTS_TRANSPORT, AQFINTS_TRANSPORT_SSL, trans); assert(xtrans); if (xtrans->httpSession==NULL) { DBG_ERROR(AQFINTS_LOGDOMAIN, "No HTTP session"); return GWEN_ERROR_INVALID; } /* base64 encode */ tbuf=GWEN_Buffer_new(0, lenBuffer, 0, 1); rv=GWEN_Base64_Encode((const unsigned char *)ptrBuffer, lenBuffer, tbuf, 0); if (rv<0) { DBG_INFO(AQFINTS_LOGDOMAIN, "Could not BASE64 encode data (%d)", rv); GWEN_Buffer_free(tbuf); return rv; } GWEN_Buffer_AppendString(tbuf, "\r\n"); rv=GWEN_HttpSession_SendPacket(xtrans->httpSession, "POST", (const uint8_t *) GWEN_Buffer_GetStart(tbuf), GWEN_Buffer_GetUsedBytes(tbuf)); if (rv<0) { DBG_INFO(AQFINTS_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); return rv; } GWEN_Buffer_free(tbuf); DBG_INFO(AQFINTS_LOGDOMAIN, "Message sent."); return 0; } int transportReceiveMessage(AQFINTS_TRANSPORT *trans, GWEN_BUFFER *buffer) { AQFINTS_TRANSPORT_SSL *xtrans; int rv; assert(trans); xtrans=GWEN_INHERIT_GETDATA(AQFINTS_TRANSPORT, AQFINTS_TRANSPORT_SSL, trans); assert(xtrans); rv=transportReallyReceiveMessage(trans, buffer); if (rv<0) { DBG_INFO(AQFINTS_LOGDOMAIN, "here (%d)", rv); GWEN_HttpSession_Fini(xtrans->httpSession); GWEN_HttpSession_free(xtrans->httpSession); xtrans->httpSession=NULL; return rv; } return 0; } int recvPacket(AQFINTS_TRANSPORT *trans, GWEN_BUFFER *tbuf) { AQFINTS_TRANSPORT_SSL *xtrans; int rv; assert(trans); xtrans=GWEN_INHERIT_GETDATA(AQFINTS_TRANSPORT, AQFINTS_TRANSPORT_SSL, trans); assert(xtrans); /* read HBCI message */ rv=GWEN_HttpSession_RecvPacket(xtrans->httpSession, tbuf); if (rv<0) { DBG_INFO(AQFINTS_LOGDOMAIN, "here (%d)", rv); return rv; } else if (rv==0) { /* not a HTTP code */ DBG_INFO(AQFINTS_LOGDOMAIN, "here (%d)", rv); return GWEN_ERROR_INTERNAL; } else if (!(rv>=200 && rv<=299)) { /* not a HTTP: ok code */ DBG_INFO(AQFINTS_LOGDOMAIN, "here (%d)", rv); return rv; } return 0; } void trimBuffer(GWEN_BUFFER *tbuf) { const char *p; int i; i=GWEN_Buffer_GetUsedBytes(tbuf); p=GWEN_Buffer_GetStart(tbuf); while (i>0) { if (p[i-1]!=0) break; i--; } GWEN_Buffer_Crop(tbuf, 0, i); } int transportReallyReceiveMessage(AQFINTS_TRANSPORT *trans, GWEN_BUFFER *buffer) { GWEN_BUFFER *tbuf; int rv; int msgSize; tbuf=GWEN_Buffer_new(0, 1024, 0, 1); /* read HBCI message */ rv=recvPacket(trans, tbuf); if (rv<0) { DBG_INFO(AQFINTS_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); return rv; } /* optionally decode BASE64 encoded message */ if (strstr(GWEN_Buffer_GetStart(tbuf), "HNHBK:")==NULL) { GWEN_BUFFER *bbuf; bbuf=GWEN_Buffer_new(0, GWEN_Buffer_GetUsedBytes(tbuf), 0, 1); rv=GWEN_Base64_Decode((const unsigned char *) GWEN_Buffer_GetStart(tbuf), GWEN_Buffer_GetUsedBytes(tbuf), bbuf); if (rv) { DBG_INFO(AQFINTS_LOGDOMAIN, "Could not decode BASE64 message (%d)", rv); /* for debugging purposes */ GWEN_Buffer_Dump(tbuf, 2); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("Could not BASE64-decode the message")); GWEN_Buffer_free(bbuf); GWEN_Buffer_free(tbuf); return rv; } GWEN_Buffer_free(tbuf); tbuf=bbuf; } /* check message for HBCI message */ if (strstr(GWEN_Buffer_GetStart(tbuf), "HNHBK:")==NULL) { DBG_INFO(AQFINTS_LOGDOMAIN, "Received message is not HBCI"); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("Received message is not HBCI")); /* for debugging purposes */ GWEN_Buffer_Dump(tbuf, 2); GWEN_Buffer_free(tbuf); return rv; } /* trim response */ trimBuffer(tbuf); /* check message size */ msgSize=AQFINTS_Transport_DetermineMessageSize(GWEN_Buffer_GetStart(tbuf)); if (msgSize<0) { DBG_INFO(AQFINTS_LOGDOMAIN, "here (%d)", msgSize); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("Unparsable message received")); /* for debugging purposes */ GWEN_Buffer_Dump(tbuf, 2); GWEN_Buffer_free(tbuf); return GWEN_ERROR_BAD_DATA; } /* check message size */ if (GWEN_Buffer_GetUsedBytes(tbuf)This page describes the properties of AQFINTS_TRANSPORT.

AQFINTS_TRANSPORT

@anchor AQFINTS_TRANSPORT_url

url

Set this property with @ref AQFINTS_Transport_SetUrl(), get it with @ref AQFINTS_Transport_GetUrl().

@anchor AQFINTS_TRANSPORT_runtimeFlags

runtimeFlags

Set this property with @ref AQFINTS_Transport_SetRuntimeFlags(), get it with @ref AQFINTS_Transport_GetRuntimeFlags().

*/ /* define AQFINTS_TRANSPORT_RTFLAGS */ #define AQFINTS_TRANSPORT_RTFLAGS_CONNECTED 0x00000001 /* needed system headers */ #include #include /* pre-headers */ #include #include #include typedef struct AQFINTS_TRANSPORT AQFINTS_TRANSPORT; GWEN_INHERIT_FUNCTION_DEFS(AQFINTS_TRANSPORT) /* post-headers */ /* definitions for virtual functions (post) */ typedef int (*AQFINTS_TRANSPORT_CONNECT_FN)(AQFINTS_TRANSPORT *p_struct); typedef int (*AQFINTS_TRANSPORT_DISCONNECT_FN)(AQFINTS_TRANSPORT *p_struct); typedef int (*AQFINTS_TRANSPORT_SENDMESSAGE_FN)(AQFINTS_TRANSPORT *p_struct, const char* ptrBuffer, int lenBuffer); typedef int (*AQFINTS_TRANSPORT_RECEIVEMESSAGE_FN)(AQFINTS_TRANSPORT *p_struct, GWEN_BUFFER* buffer); /** Constructor. */ AQFINTS_TRANSPORT *AQFINTS_Transport_new(void); /** Destructor. */ void AQFINTS_Transport_free(AQFINTS_TRANSPORT *p_struct); void AQFINTS_Transport_Attach(AQFINTS_TRANSPORT *p_struct); /** Getter. * Use this function to get the member "url" (see @ref AQFINTS_TRANSPORT_url) */ const char *AQFINTS_Transport_GetUrl(const AQFINTS_TRANSPORT *p_struct); /** Getter. * Use this function to get the member "runtimeFlags" (see @ref AQFINTS_TRANSPORT_runtimeFlags) */ uint32_t AQFINTS_Transport_GetRuntimeFlags(const AQFINTS_TRANSPORT *p_struct); /** Setter. * Use this function to set the member "url" (see @ref AQFINTS_TRANSPORT_url) */ void AQFINTS_Transport_SetUrl(AQFINTS_TRANSPORT *p_struct, const char *p_src); /** Setter. * Use this function to set the member "runtimeFlags" (see @ref AQFINTS_TRANSPORT_runtimeFlags) */ void AQFINTS_Transport_SetRuntimeFlags(AQFINTS_TRANSPORT *p_struct, uint32_t p_src); /** Add flags. * Use this function to add flags to member "runtimeFlags" (see @ref AQFINTS_TRANSPORT_runtimeFlags) */ void AQFINTS_Transport_AddRuntimeFlags(AQFINTS_TRANSPORT *p_struct, uint32_t p_src); /** Add flags. * Use this function to add flags to member "runtimeFlags" (see @ref AQFINTS_TRANSPORT_runtimeFlags) */ void AQFINTS_Transport_SubRuntimeFlags(AQFINTS_TRANSPORT *p_struct, uint32_t p_src); /* prototypes for virtual functions */ /** */ int AQFINTS_Transport_Connect(AQFINTS_TRANSPORT *p_struct); /** */ int AQFINTS_Transport_Disconnect(AQFINTS_TRANSPORT *p_struct); /** * Send a HBCI message. Returns 0 if okay, error code otherwise. * @param ptrBuffer Pointer to a buffer containing the message to be sent * @param lenBuffer size of the buffer containing the message to be sent */ int AQFINTS_Transport_SendMessage(AQFINTS_TRANSPORT *p_struct, const char* ptrBuffer, int lenBuffer); /** * Receive a HBCI message. Returns 0 if okay, error code otherwise. * @param buffer Pointer to a GWEN_BUFFER to receive the HBCI message */ int AQFINTS_Transport_ReceiveMessage(AQFINTS_TRANSPORT *p_struct, GWEN_BUFFER* buffer); /* setters for virtual functions */ AQFINTS_TRANSPORT_CONNECT_FN AQFINTS_Transport_SetConnectFn(AQFINTS_TRANSPORT *p_struct, AQFINTS_TRANSPORT_CONNECT_FN fn); AQFINTS_TRANSPORT_DISCONNECT_FN AQFINTS_Transport_SetDisconnectFn(AQFINTS_TRANSPORT *p_struct, AQFINTS_TRANSPORT_DISCONNECT_FN fn); AQFINTS_TRANSPORT_SENDMESSAGE_FN AQFINTS_Transport_SetSendMessageFn(AQFINTS_TRANSPORT *p_struct, AQFINTS_TRANSPORT_SENDMESSAGE_FN fn); AQFINTS_TRANSPORT_RECEIVEMESSAGE_FN AQFINTS_Transport_SetReceiveMessageFn(AQFINTS_TRANSPORT *p_struct, AQFINTS_TRANSPORT_RECEIVEMESSAGE_FN fn); /* getters for virtual functions */ AQFINTS_TRANSPORT_CONNECT_FN AQFINTS_Transport_GetConnectFn(const AQFINTS_TRANSPORT *p_struct); AQFINTS_TRANSPORT_DISCONNECT_FN AQFINTS_Transport_GetDisconnectFn(const AQFINTS_TRANSPORT *p_struct); AQFINTS_TRANSPORT_SENDMESSAGE_FN AQFINTS_Transport_GetSendMessageFn(const AQFINTS_TRANSPORT *p_struct); AQFINTS_TRANSPORT_RECEIVEMESSAGE_FN AQFINTS_Transport_GetReceiveMessageFn(const AQFINTS_TRANSPORT *p_struct); /** * Expects the given to contain the beginning of a HBCI message starting with a * HNHBK segment. Reads the message size from the appropriate field of that segment. */ int AQFINTS_Transport_DetermineMessageSize(const char *ptr); #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/transport/transporthbci_p.h0000664000175000017500000000137014043610745026571 00000000000000/*************************************************************************** begin : Wed Jul 31 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQFINTS_TRANSPORTHBCI_P_H #define AQFINTS_TRANSPORTHBCI_P_H #include "transporthbci.h" #include typedef struct AQFINTS_TRANSPORT_HBCI AQFINTS_TRANSPORT_HBCI; struct AQFINTS_TRANSPORT_HBCI { GWEN_SYNCIO *ioLayer; }; #endif aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/transport/transporthbci.c0000664000175000017500000001744414043610745026256 00000000000000/*************************************************************************** begin : Wed Jul 31 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "transporthbci_p.h" #include "libaqfints/aqfints.h" #include #include #include #define I18N /* ------------------------------------------------------------------------------------------------ * forward declarations * ------------------------------------------------------------------------------------------------ */ static void GWENHYWFAR_CB freeData(void *bp, void *p); static int transportConnect(AQFINTS_TRANSPORT *trans); static int transportDisconnect(AQFINTS_TRANSPORT *trans); static int transportSendMessage(AQFINTS_TRANSPORT *trans, const char *ptrBuffer, int lenBuffer); static int transportReceiveMessage(AQFINTS_TRANSPORT *trans, GWEN_BUFFER *buffer); /* ------------------------------------------------------------------------------------------------ * implementations * ------------------------------------------------------------------------------------------------ */ GWEN_INHERIT(AQFINTS_TRANSPORT, AQFINTS_TRANSPORT_HBCI) AQFINTS_TRANSPORT *AQFINTS_TransportHbci_new(const char *url) { AQFINTS_TRANSPORT *trans; AQFINTS_TRANSPORT_HBCI *xtrans; trans=AQFINTS_Transport_new(); GWEN_NEW_OBJECT(AQFINTS_TRANSPORT_HBCI, xtrans); GWEN_INHERIT_SETDATA(AQFINTS_TRANSPORT, AQFINTS_TRANSPORT_HBCI, trans, xtrans, freeData); AQFINTS_Transport_SetUrl(trans, url); /* set virtual functions */ AQFINTS_Transport_SetConnectFn(trans, transportConnect); AQFINTS_Transport_SetDisconnectFn(trans, transportDisconnect); AQFINTS_Transport_SetSendMessageFn(trans, transportSendMessage); AQFINTS_Transport_SetReceiveMessageFn(trans, transportReceiveMessage); return trans; } AQFINTS_TRANSPORT *AQFINTS_TransportHbci_fromSyncIo(GWEN_SYNCIO *sio) { AQFINTS_TRANSPORT *trans; AQFINTS_TRANSPORT_HBCI *xtrans; trans=AQFINTS_Transport_new(); GWEN_NEW_OBJECT(AQFINTS_TRANSPORT_HBCI, xtrans); GWEN_INHERIT_SETDATA(AQFINTS_TRANSPORT, AQFINTS_TRANSPORT_HBCI, trans, xtrans, freeData); /* set virtual functions */ AQFINTS_Transport_SetConnectFn(trans, transportConnect); AQFINTS_Transport_SetDisconnectFn(trans, transportDisconnect); AQFINTS_Transport_SetSendMessageFn(trans, transportSendMessage); AQFINTS_Transport_SetReceiveMessageFn(trans, transportReceiveMessage); xtrans->ioLayer=sio; return trans; } void GWENHYWFAR_CB freeData(void *bp, void *p) { AQFINTS_TRANSPORT_HBCI *xtrans; xtrans=(AQFINTS_TRANSPORT_HBCI *) p; GWEN_SyncIo_free(xtrans->ioLayer); GWEN_FREE_OBJECT(xtrans); } int createIoLayer(AQFINTS_TRANSPORT *trans) { AQFINTS_TRANSPORT_HBCI *xtrans; GWEN_SYNCIO *sio; int rv; assert(trans); xtrans=GWEN_INHERIT_GETDATA(AQFINTS_TRANSPORT, AQFINTS_TRANSPORT_HBCI, trans); assert(xtrans); rv=GWEN_Gui_GetSyncIo(AQFINTS_Transport_GetUrl(trans), "hbci", 3000, &sio); if (rv<0) { DBG_INFO(AQFINTS_LOGDOMAIN, "here (%d)", rv); return GWEN_ERROR_GENERIC; } xtrans->ioLayer=sio; return 0; } int transportConnect(AQFINTS_TRANSPORT *trans) { AQFINTS_TRANSPORT_HBCI *xtrans; assert(trans); xtrans=GWEN_INHERIT_GETDATA(AQFINTS_TRANSPORT, AQFINTS_TRANSPORT_HBCI, trans); assert(xtrans); if (xtrans->ioLayer==NULL) { int rv; rv=createIoLayer(trans); if (rv<0) { DBG_INFO(AQFINTS_LOGDOMAIN, "here (%d)", rv); return rv; } do { rv=GWEN_SyncIo_Connect(xtrans->ioLayer); } while (rv==GWEN_ERROR_INTERRUPTED); if (rv<0) { DBG_ERROR(AQFINTS_LOGDOMAIN, "Could not connect to bank (%d)", rv); GWEN_SyncIo_free(xtrans->ioLayer); xtrans->ioLayer=NULL; GWEN_Gui_ProgressLog2(0, GWEN_LoggerLevel_Error, I18N("Could not connect (%d)"), rv); return rv; } GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Notice, I18N("Connected.")); AQFINTS_Transport_AddRuntimeFlags(trans, AQFINTS_TRANSPORT_RTFLAGS_CONNECTED); } return 0; } int transportDisconnect(AQFINTS_TRANSPORT *trans) { AQFINTS_TRANSPORT_HBCI *xtrans; assert(trans); xtrans=GWEN_INHERIT_GETDATA(AQFINTS_TRANSPORT, AQFINTS_TRANSPORT_HBCI, trans); assert(xtrans); if (xtrans->ioLayer) { int rv; GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Notice, I18N("Disconnecting from bank...")); do { rv=GWEN_SyncIo_Disconnect(xtrans->ioLayer); } while (rv==GWEN_ERROR_INTERRUPTED); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Notice, I18N("Disconnected.")); GWEN_SyncIo_free(xtrans->ioLayer); xtrans->ioLayer=NULL; AQFINTS_Transport_SubRuntimeFlags(trans, AQFINTS_TRANSPORT_RTFLAGS_CONNECTED); } return 0; } int transportSendMessage(AQFINTS_TRANSPORT *trans, const char *ptrBuffer, int lenBuffer) { AQFINTS_TRANSPORT_HBCI *xtrans; int rv; assert(trans); xtrans=GWEN_INHERIT_GETDATA(AQFINTS_TRANSPORT, AQFINTS_TRANSPORT_HBCI, trans); assert(xtrans); if (xtrans->ioLayer==NULL) { DBG_ERROR(AQFINTS_LOGDOMAIN, "Not connected"); return GWEN_ERROR_INVALID; } rv=GWEN_SyncIo_WriteForced(xtrans->ioLayer, (const uint8_t *)ptrBuffer, lenBuffer); if (rv<0) { DBG_INFO(AQFINTS_LOGDOMAIN, "here (%d)", rv); return rv; } return 0; } int transportReceiveMessage(AQFINTS_TRANSPORT *trans, GWEN_BUFFER *buffer) { AQFINTS_TRANSPORT_HBCI *xtrans; int rv; char header[32]; int headerBytesRead; int msgSize; assert(trans); xtrans=GWEN_INHERIT_GETDATA(AQFINTS_TRANSPORT, AQFINTS_TRANSPORT_HBCI, trans); assert(xtrans); if (xtrans->ioLayer==NULL) { DBG_ERROR(AQFINTS_LOGDOMAIN, "Not connected"); return GWEN_ERROR_INVALID; } /* receive HNHBK */ rv=GWEN_SyncIo_ReadForced(xtrans->ioLayer, (uint8_t *)header, sizeof(header)-1); if (rv<0) { DBG_ERROR(AQFINTS_LOGDOMAIN, "Error reading header (%d)", rv); return rv; } else if (rv!=sizeof(header)-1) { DBG_ERROR(AQFINTS_LOGDOMAIN, "EOF met"); return GWEN_ERROR_EOF; } headerBytesRead=rv; header[headerBytesRead]=0; /* check for beginning of HBCI message */ if (strncmp(header, "HNHBK:", 6)!=0) { DBG_ERROR(AQFINTS_LOGDOMAIN, "Message does not start with HNHBK"); return GWEN_ERROR_BAD_DATA; } msgSize=AQFINTS_Transport_DetermineMessageSize(header); if (msgSize<0) { DBG_INFO(AQFINTS_LOGDOMAIN, "here (%d)", msgSize); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("Unparsable message received")); return GWEN_ERROR_BAD_DATA; } /* subtract bytes already received */ msgSize-=rv; /* make room for the rest of the message */ GWEN_Buffer_AllocRoom(buffer, msgSize); GWEN_Buffer_AppendBytes(buffer, header, headerBytesRead); /* receive rest of the message */ rv=GWEN_SyncIo_ReadForced(xtrans->ioLayer, (uint8_t *)GWEN_Buffer_GetPosPointer(buffer), msgSize); if (rv<0) { DBG_ERROR(AQFINTS_LOGDOMAIN, "Error reading message (%d)", rv); return rv; } else if (rv!=msgSize) { DBG_ERROR(AQFINTS_LOGDOMAIN, "EOF met"); return GWEN_ERROR_EOF; } /* advance pointer and counter in buffer */ GWEN_Buffer_IncrementPos(buffer, msgSize); GWEN_Buffer_AdjustUsedBytes(buffer); return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/transport/transportssl_p.h0000664000175000017500000000152414043610745026466 00000000000000/*************************************************************************** begin : Wed Jul 31 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQFINTS_TRANSPORTSSL_P_H #define AQFINTS_TRANSPORTSSL_P_H #include "transportssl.h" #include typedef struct AQFINTS_TRANSPORT_SSL AQFINTS_TRANSPORT_SSL; struct AQFINTS_TRANSPORT_SSL { char *contentType; char *userAgent; int versionMajor; int versionMinor; GWEN_HTTP_SESSION *httpSession; }; #endif aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/transport/transport.c0000664000175000017500000001333115037736055025426 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "transport.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "./transport_p.h" #include #include /* code headers */ /* macro functions */ GWEN_INHERIT_FUNCTIONS(AQFINTS_TRANSPORT) AQFINTS_TRANSPORT *AQFINTS_Transport_new(void) { AQFINTS_TRANSPORT *p_struct; GWEN_NEW_OBJECT(AQFINTS_TRANSPORT, p_struct) p_struct->_refCount=1; GWEN_INHERIT_INIT(AQFINTS_TRANSPORT, p_struct) /* members */ p_struct->url=NULL; p_struct->runtimeFlags=0; /* virtual functions */ return p_struct; } void AQFINTS_Transport_free(AQFINTS_TRANSPORT *p_struct) { if (p_struct) { assert(p_struct->_refCount); if (p_struct->_refCount==1) { GWEN_INHERIT_FINI(AQFINTS_TRANSPORT, p_struct) /* members */ free(p_struct->url); p_struct->url=NULL; p_struct->_refCount=0; GWEN_FREE_OBJECT(p_struct); } else p_struct->_refCount--; } } void AQFINTS_Transport_Attach(AQFINTS_TRANSPORT *p_struct) { assert(p_struct); assert(p_struct->_refCount); p_struct->_refCount++; } const char *AQFINTS_Transport_GetUrl(const AQFINTS_TRANSPORT *p_struct){ assert(p_struct); return p_struct->url; } uint32_t AQFINTS_Transport_GetRuntimeFlags(const AQFINTS_TRANSPORT *p_struct){ assert(p_struct); return p_struct->runtimeFlags; } void AQFINTS_Transport_SetUrl(AQFINTS_TRANSPORT *p_struct, const char *p_src){ assert(p_struct); if (p_struct->url) { free(p_struct->url); p_struct->url=NULL; p_struct->url=NULL; } if (p_src) { p_struct->url=strdup(p_src); } else { p_struct->url=NULL; } } void AQFINTS_Transport_SetRuntimeFlags(AQFINTS_TRANSPORT *p_struct, uint32_t p_src){ assert(p_struct); p_struct->runtimeFlags=p_src; } void AQFINTS_Transport_AddRuntimeFlags(AQFINTS_TRANSPORT *p_struct, uint32_t p_src) { assert(p_struct); p_struct->runtimeFlags|=p_src; } void AQFINTS_Transport_SubRuntimeFlags(AQFINTS_TRANSPORT *p_struct, uint32_t p_src) { assert(p_struct); p_struct->runtimeFlags&=~p_src; } /* code for virtual functions */ int AQFINTS_Transport_Connect(AQFINTS_TRANSPORT *p_struct) { assert(p_struct); if (p_struct->connectFn) return p_struct->connectFn(p_struct); else return GWEN_ERROR_NOT_IMPLEMENTED; } int AQFINTS_Transport_Disconnect(AQFINTS_TRANSPORT *p_struct) { assert(p_struct); if (p_struct->disconnectFn) return p_struct->disconnectFn(p_struct); else return GWEN_ERROR_NOT_IMPLEMENTED; } int AQFINTS_Transport_SendMessage(AQFINTS_TRANSPORT *p_struct, const char* ptrBuffer, int lenBuffer) { assert(p_struct); if (p_struct->sendMessageFn) return p_struct->sendMessageFn(p_struct, ptrBuffer, lenBuffer); else return GWEN_ERROR_NOT_IMPLEMENTED; } int AQFINTS_Transport_ReceiveMessage(AQFINTS_TRANSPORT *p_struct, GWEN_BUFFER* buffer) { assert(p_struct); if (p_struct->receiveMessageFn) return p_struct->receiveMessageFn(p_struct, buffer); else return GWEN_ERROR_NOT_IMPLEMENTED; } /* setters for virtual functions */ AQFINTS_TRANSPORT_CONNECT_FN AQFINTS_Transport_SetConnectFn(AQFINTS_TRANSPORT *p_struct, AQFINTS_TRANSPORT_CONNECT_FN fn){ AQFINTS_TRANSPORT_CONNECT_FN oldFn; assert(p_struct); oldFn=p_struct->connectFn; p_struct->connectFn=fn; return oldFn; } AQFINTS_TRANSPORT_DISCONNECT_FN AQFINTS_Transport_SetDisconnectFn(AQFINTS_TRANSPORT *p_struct, AQFINTS_TRANSPORT_DISCONNECT_FN fn){ AQFINTS_TRANSPORT_DISCONNECT_FN oldFn; assert(p_struct); oldFn=p_struct->disconnectFn; p_struct->disconnectFn=fn; return oldFn; } AQFINTS_TRANSPORT_SENDMESSAGE_FN AQFINTS_Transport_SetSendMessageFn(AQFINTS_TRANSPORT *p_struct, AQFINTS_TRANSPORT_SENDMESSAGE_FN fn){ AQFINTS_TRANSPORT_SENDMESSAGE_FN oldFn; assert(p_struct); oldFn=p_struct->sendMessageFn; p_struct->sendMessageFn=fn; return oldFn; } AQFINTS_TRANSPORT_RECEIVEMESSAGE_FN AQFINTS_Transport_SetReceiveMessageFn(AQFINTS_TRANSPORT *p_struct, AQFINTS_TRANSPORT_RECEIVEMESSAGE_FN fn){ AQFINTS_TRANSPORT_RECEIVEMESSAGE_FN oldFn; assert(p_struct); oldFn=p_struct->receiveMessageFn; p_struct->receiveMessageFn=fn; return oldFn; } /* getters for virtual functions */ AQFINTS_TRANSPORT_CONNECT_FN AQFINTS_Transport_GetConnectFn(const AQFINTS_TRANSPORT *p_struct){ assert(p_struct); return p_struct->connectFn; } AQFINTS_TRANSPORT_DISCONNECT_FN AQFINTS_Transport_GetDisconnectFn(const AQFINTS_TRANSPORT *p_struct){ assert(p_struct); return p_struct->disconnectFn; } AQFINTS_TRANSPORT_SENDMESSAGE_FN AQFINTS_Transport_GetSendMessageFn(const AQFINTS_TRANSPORT *p_struct){ assert(p_struct); return p_struct->sendMessageFn; } AQFINTS_TRANSPORT_RECEIVEMESSAGE_FN AQFINTS_Transport_GetReceiveMessageFn(const AQFINTS_TRANSPORT *p_struct){ assert(p_struct); return p_struct->receiveMessageFn; } int AQFINTS_Transport_DetermineMessageSize(const char *ptr) { const char *p1; const char *p2; char *copiedString=NULL; int msgSize; /* seek to begin of size */ p1=strchr(ptr, '+'); if (p1==NULL) { DBG_ERROR(AQFINTS_LOGDOMAIN, "Bad data (missing '+')"); return GWEN_ERROR_BAD_DATA; } p1++; /* seek to end of size */ p2=strchr(p1, '+'); if (p2==NULL) { DBG_ERROR(AQFINTS_LOGDOMAIN, "Bad data (missing second '+')"); return GWEN_ERROR_BAD_DATA; } /* read message size */ copiedString=strndup(p1, (p2-p1)); assert(copiedString); if (1!=sscanf(p1, "%d", &msgSize)) { DBG_ERROR(AQFINTS_LOGDOMAIN, "Bad size field [%s]", copiedString); free(copiedString); return GWEN_ERROR_BAD_DATA; } free(copiedString); return msgSize; } /* code headers */ aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/transport/transportssl.h0000664000175000017500000000422114044534775026155 00000000000000/*************************************************************************** begin : Wed Jul 31 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQFINTS_TRANSPORTSSL_H #define AQFINTS_TRANSPORTSSL_H #include "libaqfints/transport/transport.h" #include /** * Create a transport layer for HTTPS (used for PIN/TAN). */ AQFINTS_TRANSPORT *AQFINTS_TransportSsl_new(const char *url); /** * Create a transport layer for HTTPS using an already open http session. * * @param httpSession pointer to the open http session (will be taken over) */ AQFINTS_TRANSPORT *AQFINTS_TransportSsl_fromHttpSession(GWEN_HTTP_SESSION *httpSession); /** * Try to connect using the given settings (URL etc.) */ int AQFINTS_TransportSsl_TestConnection(AQFINTS_TRANSPORT *trans); /** * Return the currently set "contentType" HTTP header. */ const char *AQFINTS_TransportSsl_GetContentType(const AQFINTS_TRANSPORT *trans); /** * Set contentType" HTTP header. */ void AQFINTS_TransportSsl_SetContentType(AQFINTS_TRANSPORT *trans, const char *s); /** * Return the currently set "userAgent" HTTP header. */ const char *AQFINTS_TransportSsl_GetUserAgent(const AQFINTS_TRANSPORT *trans); /** * Set "userAgent" HTTP header. */ void AQFINTS_TransportSsl_SetUserAgent(AQFINTS_TRANSPORT *trans, const char *s); /** * Return the currently set HTTP major version. */ int AQFINTS_TransportSsl_GetVersionMajor(const AQFINTS_TRANSPORT *trans); /** * Set HTTP major version. */ void AQFINTS_TransportSsl_SetVersionMajor(AQFINTS_TRANSPORT *trans, int v); /** * Return the currently set HTTP minor version. */ int AQFINTS_TransportSsl_GetVersionMinor(const AQFINTS_TRANSPORT *trans); /** * Set HTTP minor version. */ void AQFINTS_TransportSsl_SetVersionMinor(AQFINTS_TRANSPORT *trans, int v); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/msg/0000755000175000017500000000000015037736161022033 500000000000000aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/msg/message.c0000664000175000017500000002016514044534775023555 00000000000000/*************************************************************************** begin : Fri Jul 19 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "message_p.h" #include "libaqfints/aqfints.h" #include "libaqfints/parser/parser_xml.h" #include "libaqfints/parser/parser_hbci.h" #include "libaqfints/parser/parser_normalize.h" #include "libaqfints/parser/parser_dbwrite.h" #include #include /* ------------------------------------------------------------------------------------------------ * forward declarations * ------------------------------------------------------------------------------------------------ */ static void _moveSegmentsBetweenLists(AQFINTS_SEGMENT_LIST *segmentList1, AQFINTS_SEGMENT_LIST *segmentList2); static void _moveSegmentsByCodeBetweenLists(AQFINTS_SEGMENT_LIST *segmentList1, AQFINTS_SEGMENT_LIST *segmentList2, const char *code); /* ------------------------------------------------------------------------------------------------ * implementations * ------------------------------------------------------------------------------------------------ */ AQFINTS_MESSAGE *AQFINTS_Message_new(void) { AQFINTS_MESSAGE *msg; GWEN_NEW_OBJECT(AQFINTS_MESSAGE, msg); msg->signerList=AQFINTS_KeyDescr_List_new(); msg->segmentList=AQFINTS_Segment_List_new(); return msg; } void AQFINTS_Message_free(AQFINTS_MESSAGE *msg) { if (msg) { free(msg->dialogId); free(msg->tanJobCode); AQFINTS_Segment_List_free(msg->segmentList); AQFINTS_KeyDescr_List_free(msg->signerList); AQFINTS_KeyDescr_free(msg->crypter); GWEN_FREE_OBJECT(msg); } } uint32_t AQFINTS_Message_GetFlags(const AQFINTS_MESSAGE *msg) { assert(msg); return msg->flags; } void AQFINTS_Message_SetFlags(AQFINTS_MESSAGE *msg, uint32_t f) { assert(msg); msg->flags=f; } void AQFINTS_Message_AddFlags(AQFINTS_MESSAGE *msg, uint32_t f) { assert(msg); msg->flags|=f; } void AQFINTS_Message_SubFlags(AQFINTS_MESSAGE *msg, uint32_t f) { assert(msg); msg->flags&=~f; } int AQFINTS_Message_GetMessageNumber(const AQFINTS_MESSAGE *msg) { assert(msg); return msg->messageNumber; } void AQFINTS_Message_SetMessageNumber(AQFINTS_MESSAGE *msg, int v) { assert(msg); msg->messageNumber=v; } int AQFINTS_Message_GetRefMessageNumber(const AQFINTS_MESSAGE *msg) { assert(msg); return msg->refMessageNumber; } void AQFINTS_Message_SetRefMessageNumber(AQFINTS_MESSAGE *msg, int v) { assert(msg); msg->refMessageNumber=v; } const char *AQFINTS_Message_GetDialogId(const AQFINTS_MESSAGE *msg) { assert(msg); return msg->dialogId; } void AQFINTS_Message_SetDialogId(AQFINTS_MESSAGE *msg, const char *s) { assert(msg); if (msg->dialogId) free(msg->dialogId); if (s) msg->dialogId=strdup(s); else msg->dialogId=NULL; } int AQFINTS_Message_GetHbciVersion(const AQFINTS_MESSAGE *msg) { assert(msg); return msg->hbciVersion; } void AQFINTS_Message_SetHbciVersion(AQFINTS_MESSAGE *msg, int i) { assert(msg); msg->hbciVersion=i; } const char *AQFINTS_Message_GetTanJobCode(const AQFINTS_MESSAGE *msg) { assert(msg); return msg->tanJobCode; } void AQFINTS_Message_SetTanJobCode(AQFINTS_MESSAGE *msg, const char *s) { assert(msg); if (msg->tanJobCode) free(msg->tanJobCode); if (s) msg->tanJobCode=strdup(s); else msg->tanJobCode=NULL; } AQFINTS_KEYDESCR_LIST *AQFINTS_Message_GetSignerList(const AQFINTS_MESSAGE *msg) { assert(msg); return msg->signerList; } int AQFINTS_Message_HasAnySigner(const AQFINTS_MESSAGE *msg) { assert(msg); if (msg->signerList && AQFINTS_KeyDescr_List_GetCount(msg->signerList)>0) return 1; return 0; } void AQFINTS_Message_AddSigner(AQFINTS_MESSAGE *msg, AQFINTS_KEYDESCR *keyDescr) { uint32_t uid; assert(msg); uid=AQFINTS_KeyDescr_GetUniqueUserId(keyDescr); if (AQFINTS_Message_FindSigner(msg, uid)) { DBG_WARN(AQFINTS_LOGDOMAIN, "Signer %" PRIx32 "already exists, not adding", uid); } else AQFINTS_KeyDescr_List_Add(keyDescr, msg->signerList); } AQFINTS_KEYDESCR *AQFINTS_Message_FindSigner(AQFINTS_MESSAGE *msg, uint32_t uniqueUserId) { if (msg->signerList) { AQFINTS_KEYDESCR *keyDescr; keyDescr=AQFINTS_KeyDescr_List_First(msg->signerList); while (keyDescr) { if (AQFINTS_KeyDescr_GetUniqueUserId(keyDescr)==uniqueUserId) return keyDescr; keyDescr=AQFINTS_KeyDescr_List_Next(keyDescr); } } return NULL; } void AQFINTS_Message_ClearSigners(AQFINTS_MESSAGE *msg) { assert(msg); if (msg->signerList) { AQFINTS_KeyDescr_List_Clear(msg->signerList); } } AQFINTS_KEYDESCR *AQFINTS_Message_GetCrypter(const AQFINTS_MESSAGE *msg) { assert(msg); return msg->crypter; } void AQFINTS_Message_SetCrypter(AQFINTS_MESSAGE *msg, AQFINTS_KEYDESCR *keyDescr) { assert(msg); if (msg->crypter) AQFINTS_KeyDescr_free(msg->crypter); msg->crypter=keyDescr; } AQFINTS_SEGMENT_LIST *AQFINTS_Message_GetSegmentList(const AQFINTS_MESSAGE *msg) { assert(msg); return msg->segmentList; } void AQFINTS_Message_AddSegment(AQFINTS_MESSAGE *msg, AQFINTS_SEGMENT *segment) { assert(msg); assert(segment); AQFINTS_Segment_List_Add(segment, msg->segmentList); } void AQFINTS_Message_Reenumerate(AQFINTS_MESSAGE *msg) { int segNum; AQFINTS_SEGMENT *segment; assert(msg); /* first segment number is 2 + number of signers (1 x HNHBK, n x HNSHK) */ segNum=AQFINTS_KeyDescr_List_GetCount(msg->signerList)+2; segment=AQFINTS_Segment_List_First(msg->segmentList); while (segment) { AQFINTS_Segment_SetSegmentNumber(segment, segNum++); segment=AQFINTS_Segment_List_Next(segment); } } int AQFINTS_Message_GetFirstSegNum(const AQFINTS_MESSAGE *msg) { AQFINTS_SEGMENT *segment; assert(msg); segment=AQFINTS_Segment_List_First(msg->segmentList); if (segment) return AQFINTS_Segment_GetSegmentNumber(segment); return 0; } int AQFINTS_Message_GetLastSegNum(const AQFINTS_MESSAGE *msg) { AQFINTS_SEGMENT *segment; assert(msg); segment=AQFINTS_Segment_List_Last(msg->segmentList); if (segment) return AQFINTS_Segment_GetSegmentNumber(segment); return 0; } void AQFINTS_Message_MoveResultSegsToFront(AQFINTS_MESSAGE *msg) { AQFINTS_SEGMENT_LIST *tmpSegmentList; tmpSegmentList=AQFINTS_Segment_List_new(); _moveSegmentsBetweenLists(msg->segmentList, tmpSegmentList); _moveSegmentsByCodeBetweenLists(tmpSegmentList, msg->segmentList, "HIRMG"); _moveSegmentsByCodeBetweenLists(tmpSegmentList, msg->segmentList, "HIRMS"); _moveSegmentsBetweenLists(tmpSegmentList, msg->segmentList); AQFINTS_Segment_List_free(tmpSegmentList); AQFINTS_Message_Reenumerate(msg); } void _moveSegmentsBetweenLists(AQFINTS_SEGMENT_LIST *segmentList1, AQFINTS_SEGMENT_LIST *segmentList2) { AQFINTS_SEGMENT *segment; while ((segment=AQFINTS_Segment_List_First(segmentList1))) { AQFINTS_Segment_List_Del(segment); AQFINTS_Segment_List_Add(segment, segmentList2); } } void _moveSegmentsByCodeBetweenLists(AQFINTS_SEGMENT_LIST *segmentList1, AQFINTS_SEGMENT_LIST *segmentList2, const char *code) { AQFINTS_SEGMENT *segment; /* move all HIRMG segments back to old list */ segment=AQFINTS_Segment_List_First(segmentList1); while (segment) { AQFINTS_SEGMENT *nextSegment; nextSegment=AQFINTS_Segment_List_Next(segment); if (strcasecmp(AQFINTS_Segment_GetCode(segment), code)==0) { AQFINTS_Segment_List_Del(segment); AQFINTS_Segment_List_Add(segment, segmentList2); } segment=nextSegment; } } uint32_t AQFINTS_Message_SampleSegmentFlags(const AQFINTS_MESSAGE *msg) { uint32_t flags=0; if (msg->segmentList) flags=AQFINTS_Segment_List_SampleFlags(msg->segmentList); return flags; } aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/msg/keydescr_p.h0000664000175000017500000000165615037736054024267 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "keydescr.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef AQFINTS_KEYDESCR_KEYDESCR_P_H #define AQFINTS_KEYDESCR_KEYDESCR_P_H #include "./keydescr.h" #ifdef __cplusplus extern "C" { #endif struct AQFINTS_KEYDESCR { GWEN_LIST_ELEMENT(AQFINTS_KEYDESCR) int _refCount; uint32_t flags; uint32_t uniqueUserId; char *userId; char *bankCode; int country; char *keyType; int keyNumber; int keyVersion; int keySizeInBytes; int signatureCounter; GWEN_BINDATA cid; char *systemId; char *securityProfileName; int securityProfileVersion; char *pin; char *tan; uint32_t runtimeFlags; /* volatile */ }; #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/msg/keydescr.xml0000664000175000017500000001503014043610745024302 00000000000000 AQFINTS_KEYDESCR AQFINTS_KeyDescr keydescr with_db with_list1 with_refcount
libaqfints/aqfints.h
gwenhywfar/bindata.h
$(api) void $(struct_prefix)_SetCid($(struct_type) *st, uint8_t *ptr, uint32_t len); void $(struct_prefix)_SetCid($(struct_type) *st, uint8_t *ptr, uint32_t len) { if (st->cid.pointer && st->cid.length) free(st->cid.pointer); st->cid.pointer=ptr; st->cid.length=len; } $(api) uint8_t* $(struct_prefix)_GetCidPointer(const $(struct_type) *st); uint8_t* $(struct_prefix)_GetCidPointer(const $(struct_type) *st) { return st->cid.pointer; } $(api) uint32_t $(struct_prefix)_GetCidLength(const $(struct_type) *st); uint32_t $(struct_prefix)_GetCidLength(const $(struct_type) *st) { return st->cid.length; }
0 0 with_flags public 0 0 public with_getbymember NULL NULL public own with_getbymember const dup const NULL NULL public own const dup const 0 0 public NULL NULL public own const dup const 0 0 public 0 0 public 0 0 public 0 0 public private own omit omit NULL NULL public own const dup const NULL NULL public own with_getbymember const dup const 0 0 public NULL NULL public own const dup const NULL NULL public own const dup const 0 0 volatile with_flags public
aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/msg/message_p.h0000664000175000017500000000154014044534775024075 00000000000000/*************************************************************************** begin : Fri Jul 19 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQFINTS_MESSAGE_P_H #define AQFINTS_MESSAGE_P_H #include "libaqfints/msg/message.h" struct AQFINTS_MESSAGE { int messageNumber; int refMessageNumber; AQFINTS_KEYDESCR_LIST *signerList; AQFINTS_KEYDESCR *crypter; AQFINTS_SEGMENT_LIST *segmentList; int hbciVersion; char *dialogId; char *tanJobCode; uint32_t flags; }; #endif aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/msg/TODO0000664000175000017500000000461414043610745022445 00000000000000 - job list for user: - contains jobs to be sent for a given user, from those the job queue will be filled - job queue: - contains jobs to be sent now to the bank - there is only one job queue - sending jobs in HBCI mode: - create message 1 - for every job from the queue: - get segment and DB from job - set segment number accordingly - encode and add segment to commandBuffer - if message needs signing: - for every signer: - create signature head - encode signature head - hash data from signature head - hash data from commandBuffer (jobs to sign) - add signature head to fullMessageBuffer - create signature tail, set hash - add signature tail to tailBuffer - add commandBuffer to fullMessageBuffer - add signatureTails to fullMessageBuffer - if message needs crypting: - generate crypt head - add crypt head to encryptedMessageBuffer - generate and encode crypt data segment - add crypt data segment to encryptedMessageBuffer - exchange encryptedMessageBuffer and fullMessageBuffer - determine full size of HBCI message - generate message head - insert message head into fullMessageBuffer - folder - formals oder hbci - bpd - upd - xml - parser - Session: - haelt Nummer der naechsten zu sendenden Message - haelt Nummer der naechsten zu empfangenen Message - sendCommands() - kuemmert sich intern um Signatur, Verschluesselung - schickt Nachricht ueber TransportLayer - empfaengt Nachricht ueber TransportLayer - entschluesselt Nachricht, prueft ggf. Signatur - parsed Nachricht in Segmente - parsed Segmente in DB - Message: - add Signer (KeyName) - set Crypter (KeyName) - vor dem Senden: - jedes segment in einen Puffer schreiben - diesen Puffer im Segment speichern - beim Signieren: - fuer jeden Signierer: - erzeuge SigHead segment - fuege SigHead zu SigHead-Liste hinzu - schreibe SigHead in buffer, speichere im Segment - hashe SigHead - hashe alle Daten-Segmente (alles ausser SigTail und SigHead) - signiere hash - erzeuge SigTail - fuege SigTail zu SigTail-Liste hinzu - addiere alle SigHead-Buffer in den Zielbuffer - addiere alle Daten-Segmente in den Zielbuffer - addiere alle SigTail-Buffer in den Zielbuffer - neue Klasse: KeyName (wie bei HBCI, also BLZ, UserId, KeyType, KeyVer, KeyNum) aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/msg/keydescr.c0000664000175000017500000005765215037736054023752 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "keydescr.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "./keydescr_p.h" #include #include /* code headers */ /* macro functions */ GWEN_LIST_FUNCTIONS(AQFINTS_KEYDESCR, AQFINTS_KeyDescr) AQFINTS_KEYDESCR *AQFINTS_KeyDescr_new(void) { AQFINTS_KEYDESCR *p_struct; GWEN_NEW_OBJECT(AQFINTS_KEYDESCR, p_struct) p_struct->_refCount=1; GWEN_LIST_INIT(AQFINTS_KEYDESCR, p_struct) /* members */ p_struct->flags=0; p_struct->uniqueUserId=0; p_struct->userId=NULL; p_struct->bankCode=NULL; p_struct->country=0; p_struct->keyType=NULL; p_struct->keyNumber=0; p_struct->keyVersion=0; p_struct->keySizeInBytes=0; p_struct->signatureCounter=0; p_struct->cid.pointer=NULL; p_struct->cid.length=0; p_struct->systemId=NULL; p_struct->securityProfileName=NULL; p_struct->securityProfileVersion=0; p_struct->pin=NULL; p_struct->tan=NULL; p_struct->runtimeFlags=0; /* virtual functions */ return p_struct; } void AQFINTS_KeyDescr_free(AQFINTS_KEYDESCR *p_struct) { if (p_struct) { assert(p_struct->_refCount); if (p_struct->_refCount==1) { GWEN_LIST_FINI(AQFINTS_KEYDESCR, p_struct) /* members */ free(p_struct->userId); p_struct->userId=NULL; free(p_struct->bankCode); p_struct->bankCode=NULL; free(p_struct->keyType); p_struct->keyType=NULL; if (p_struct->cid.length && p_struct->cid.pointer) { free(p_struct->cid.pointer); } p_struct->cid.pointer=NULL; p_struct->cid.length=0; free(p_struct->systemId); p_struct->systemId=NULL; free(p_struct->securityProfileName); p_struct->securityProfileName=NULL; free(p_struct->pin); p_struct->pin=NULL; free(p_struct->tan); p_struct->tan=NULL; p_struct->_refCount=0; GWEN_FREE_OBJECT(p_struct); } else p_struct->_refCount--; } } void AQFINTS_KeyDescr_Attach(AQFINTS_KEYDESCR *p_struct) { assert(p_struct); assert(p_struct->_refCount); p_struct->_refCount++; } AQFINTS_KEYDESCR *AQFINTS_KeyDescr_dup(const AQFINTS_KEYDESCR *p_src) { AQFINTS_KEYDESCR *p_struct; assert(p_src); p_struct=AQFINTS_KeyDescr_new(); /* member "flags" */ p_struct->flags=p_src->flags; /* member "uniqueUserId" */ p_struct->uniqueUserId=p_src->uniqueUserId; /* member "userId" */ if (p_struct->userId) { free(p_struct->userId); p_struct->userId=NULL; p_struct->userId=NULL; } if (p_src->userId) { p_struct->userId=strdup(p_src->userId); } /* member "bankCode" */ if (p_struct->bankCode) { free(p_struct->bankCode); p_struct->bankCode=NULL; p_struct->bankCode=NULL; } if (p_src->bankCode) { p_struct->bankCode=strdup(p_src->bankCode); } /* member "country" */ p_struct->country=p_src->country; /* member "keyType" */ if (p_struct->keyType) { free(p_struct->keyType); p_struct->keyType=NULL; p_struct->keyType=NULL; } if (p_src->keyType) { p_struct->keyType=strdup(p_src->keyType); } /* member "keyNumber" */ p_struct->keyNumber=p_src->keyNumber; /* member "keyVersion" */ p_struct->keyVersion=p_src->keyVersion; /* member "keySizeInBytes" */ p_struct->keySizeInBytes=p_src->keySizeInBytes; /* member "signatureCounter" */ p_struct->signatureCounter=p_src->signatureCounter; /* member "cid" */ if (p_struct->cid.length && p_struct->cid.pointer) { free(p_struct->cid.pointer); } p_struct->cid.pointer=NULL; p_struct->cid.length=0; if (p_src->cid.length && p_src->cid.pointer) { p_struct->cid.pointer=(uint8_t*) malloc(p_src->cid.length); if (p_struct->cid.pointer) { p_struct->cid.length=p_src->cid.length; memmove(p_struct->cid.pointer, p_src->cid.pointer, p_src->cid.length); } else { p_struct->cid.pointer=NULL; p_struct->cid.length=0; } } else { p_struct->cid.pointer=NULL; p_struct->cid.length=0; } /* member "systemId" */ if (p_struct->systemId) { free(p_struct->systemId); p_struct->systemId=NULL; p_struct->systemId=NULL; } if (p_src->systemId) { p_struct->systemId=strdup(p_src->systemId); } /* member "securityProfileName" */ if (p_struct->securityProfileName) { free(p_struct->securityProfileName); p_struct->securityProfileName=NULL; p_struct->securityProfileName=NULL; } if (p_src->securityProfileName) { p_struct->securityProfileName=strdup(p_src->securityProfileName); } /* member "securityProfileVersion" */ p_struct->securityProfileVersion=p_src->securityProfileVersion; /* member "pin" */ if (p_struct->pin) { free(p_struct->pin); p_struct->pin=NULL; p_struct->pin=NULL; } if (p_src->pin) { p_struct->pin=strdup(p_src->pin); } /* member "tan" */ if (p_struct->tan) { free(p_struct->tan); p_struct->tan=NULL; p_struct->tan=NULL; } if (p_src->tan) { p_struct->tan=strdup(p_src->tan); } /* member "runtimeFlags" */ p_struct->runtimeFlags=p_src->runtimeFlags; return p_struct; } AQFINTS_KEYDESCR *AQFINTS_KeyDescr_copy(AQFINTS_KEYDESCR *p_struct, const AQFINTS_KEYDESCR *p_src) { assert(p_struct); assert(p_src); /* member "flags" */ p_struct->flags=p_src->flags; /* member "uniqueUserId" */ p_struct->uniqueUserId=p_src->uniqueUserId; /* member "userId" */ if (p_struct->userId) { free(p_struct->userId); p_struct->userId=NULL; p_struct->userId=NULL; } if (p_src->userId) { p_struct->userId=strdup(p_src->userId); } /* member "bankCode" */ if (p_struct->bankCode) { free(p_struct->bankCode); p_struct->bankCode=NULL; p_struct->bankCode=NULL; } if (p_src->bankCode) { p_struct->bankCode=strdup(p_src->bankCode); } /* member "country" */ p_struct->country=p_src->country; /* member "keyType" */ if (p_struct->keyType) { free(p_struct->keyType); p_struct->keyType=NULL; p_struct->keyType=NULL; } if (p_src->keyType) { p_struct->keyType=strdup(p_src->keyType); } /* member "keyNumber" */ p_struct->keyNumber=p_src->keyNumber; /* member "keyVersion" */ p_struct->keyVersion=p_src->keyVersion; /* member "keySizeInBytes" */ p_struct->keySizeInBytes=p_src->keySizeInBytes; /* member "signatureCounter" */ p_struct->signatureCounter=p_src->signatureCounter; /* member "cid" */ if (p_struct->cid.length && p_struct->cid.pointer) { free(p_struct->cid.pointer); } p_struct->cid.pointer=NULL; p_struct->cid.length=0; if (p_src->cid.length && p_src->cid.pointer) { p_struct->cid.pointer=(uint8_t*) malloc(p_src->cid.length); if (p_struct->cid.pointer) { p_struct->cid.length=p_src->cid.length; memmove(p_struct->cid.pointer, p_src->cid.pointer, p_src->cid.length); } else { p_struct->cid.pointer=NULL; p_struct->cid.length=0; } } else { p_struct->cid.pointer=NULL; p_struct->cid.length=0; } /* member "systemId" */ if (p_struct->systemId) { free(p_struct->systemId); p_struct->systemId=NULL; p_struct->systemId=NULL; } if (p_src->systemId) { p_struct->systemId=strdup(p_src->systemId); } /* member "securityProfileName" */ if (p_struct->securityProfileName) { free(p_struct->securityProfileName); p_struct->securityProfileName=NULL; p_struct->securityProfileName=NULL; } if (p_src->securityProfileName) { p_struct->securityProfileName=strdup(p_src->securityProfileName); } /* member "securityProfileVersion" */ p_struct->securityProfileVersion=p_src->securityProfileVersion; /* member "pin" */ if (p_struct->pin) { free(p_struct->pin); p_struct->pin=NULL; p_struct->pin=NULL; } if (p_src->pin) { p_struct->pin=strdup(p_src->pin); } /* member "tan" */ if (p_struct->tan) { free(p_struct->tan); p_struct->tan=NULL; p_struct->tan=NULL; } if (p_src->tan) { p_struct->tan=strdup(p_src->tan); } /* member "runtimeFlags" */ p_struct->runtimeFlags=p_src->runtimeFlags; return p_struct; } uint32_t AQFINTS_KeyDescr_GetFlags(const AQFINTS_KEYDESCR *p_struct){ assert(p_struct); return p_struct->flags; } uint32_t AQFINTS_KeyDescr_GetUniqueUserId(const AQFINTS_KEYDESCR *p_struct){ assert(p_struct); return p_struct->uniqueUserId; } const char *AQFINTS_KeyDescr_GetUserId(const AQFINTS_KEYDESCR *p_struct){ assert(p_struct); return p_struct->userId; } const char *AQFINTS_KeyDescr_GetBankCode(const AQFINTS_KEYDESCR *p_struct){ assert(p_struct); return p_struct->bankCode; } int AQFINTS_KeyDescr_GetCountry(const AQFINTS_KEYDESCR *p_struct){ assert(p_struct); return p_struct->country; } const char *AQFINTS_KeyDescr_GetKeyType(const AQFINTS_KEYDESCR *p_struct){ assert(p_struct); return p_struct->keyType; } int AQFINTS_KeyDescr_GetKeyNumber(const AQFINTS_KEYDESCR *p_struct){ assert(p_struct); return p_struct->keyNumber; } int AQFINTS_KeyDescr_GetKeyVersion(const AQFINTS_KEYDESCR *p_struct){ assert(p_struct); return p_struct->keyVersion; } int AQFINTS_KeyDescr_GetKeySizeInBytes(const AQFINTS_KEYDESCR *p_struct){ assert(p_struct); return p_struct->keySizeInBytes; } int AQFINTS_KeyDescr_GetSignatureCounter(const AQFINTS_KEYDESCR *p_struct){ assert(p_struct); return p_struct->signatureCounter; } const char *AQFINTS_KeyDescr_GetSystemId(const AQFINTS_KEYDESCR *p_struct){ assert(p_struct); return p_struct->systemId; } const char *AQFINTS_KeyDescr_GetSecurityProfileName(const AQFINTS_KEYDESCR *p_struct){ assert(p_struct); return p_struct->securityProfileName; } int AQFINTS_KeyDescr_GetSecurityProfileVersion(const AQFINTS_KEYDESCR *p_struct){ assert(p_struct); return p_struct->securityProfileVersion; } const char *AQFINTS_KeyDescr_GetPin(const AQFINTS_KEYDESCR *p_struct){ assert(p_struct); return p_struct->pin; } const char *AQFINTS_KeyDescr_GetTan(const AQFINTS_KEYDESCR *p_struct){ assert(p_struct); return p_struct->tan; } uint32_t AQFINTS_KeyDescr_GetRuntimeFlags(const AQFINTS_KEYDESCR *p_struct){ assert(p_struct); return p_struct->runtimeFlags; } void AQFINTS_KeyDescr_SetFlags(AQFINTS_KEYDESCR *p_struct, uint32_t p_src){ assert(p_struct); p_struct->flags=p_src; } void AQFINTS_KeyDescr_AddFlags(AQFINTS_KEYDESCR *p_struct, uint32_t p_src) { assert(p_struct); p_struct->flags|=p_src; } void AQFINTS_KeyDescr_SubFlags(AQFINTS_KEYDESCR *p_struct, uint32_t p_src) { assert(p_struct); p_struct->flags&=~p_src; } void AQFINTS_KeyDescr_SetUniqueUserId(AQFINTS_KEYDESCR *p_struct, uint32_t p_src){ assert(p_struct); p_struct->uniqueUserId=p_src; } void AQFINTS_KeyDescr_SetUserId(AQFINTS_KEYDESCR *p_struct, const char *p_src){ assert(p_struct); if (p_struct->userId) { free(p_struct->userId); p_struct->userId=NULL; p_struct->userId=NULL; } if (p_src) { p_struct->userId=strdup(p_src); } else { p_struct->userId=NULL; } } void AQFINTS_KeyDescr_SetBankCode(AQFINTS_KEYDESCR *p_struct, const char *p_src){ assert(p_struct); if (p_struct->bankCode) { free(p_struct->bankCode); p_struct->bankCode=NULL; p_struct->bankCode=NULL; } if (p_src) { p_struct->bankCode=strdup(p_src); } else { p_struct->bankCode=NULL; } } void AQFINTS_KeyDescr_SetCountry(AQFINTS_KEYDESCR *p_struct, int p_src){ assert(p_struct); p_struct->country=p_src; } void AQFINTS_KeyDescr_SetKeyType(AQFINTS_KEYDESCR *p_struct, const char *p_src){ assert(p_struct); if (p_struct->keyType) { free(p_struct->keyType); p_struct->keyType=NULL; p_struct->keyType=NULL; } if (p_src) { p_struct->keyType=strdup(p_src); } else { p_struct->keyType=NULL; } } void AQFINTS_KeyDescr_SetKeyNumber(AQFINTS_KEYDESCR *p_struct, int p_src){ assert(p_struct); p_struct->keyNumber=p_src; } void AQFINTS_KeyDescr_SetKeyVersion(AQFINTS_KEYDESCR *p_struct, int p_src){ assert(p_struct); p_struct->keyVersion=p_src; } void AQFINTS_KeyDescr_SetKeySizeInBytes(AQFINTS_KEYDESCR *p_struct, int p_src){ assert(p_struct); p_struct->keySizeInBytes=p_src; } void AQFINTS_KeyDescr_SetSignatureCounter(AQFINTS_KEYDESCR *p_struct, int p_src){ assert(p_struct); p_struct->signatureCounter=p_src; } void AQFINTS_KeyDescr_SetSystemId(AQFINTS_KEYDESCR *p_struct, const char *p_src){ assert(p_struct); if (p_struct->systemId) { free(p_struct->systemId); p_struct->systemId=NULL; p_struct->systemId=NULL; } if (p_src) { p_struct->systemId=strdup(p_src); } else { p_struct->systemId=NULL; } } void AQFINTS_KeyDescr_SetSecurityProfileName(AQFINTS_KEYDESCR *p_struct, const char *p_src){ assert(p_struct); if (p_struct->securityProfileName) { free(p_struct->securityProfileName); p_struct->securityProfileName=NULL; p_struct->securityProfileName=NULL; } if (p_src) { p_struct->securityProfileName=strdup(p_src); } else { p_struct->securityProfileName=NULL; } } void AQFINTS_KeyDescr_SetSecurityProfileVersion(AQFINTS_KEYDESCR *p_struct, int p_src){ assert(p_struct); p_struct->securityProfileVersion=p_src; } void AQFINTS_KeyDescr_SetPin(AQFINTS_KEYDESCR *p_struct, const char *p_src){ assert(p_struct); if (p_struct->pin) { free(p_struct->pin); p_struct->pin=NULL; p_struct->pin=NULL; } if (p_src) { p_struct->pin=strdup(p_src); } else { p_struct->pin=NULL; } } void AQFINTS_KeyDescr_SetTan(AQFINTS_KEYDESCR *p_struct, const char *p_src){ assert(p_struct); if (p_struct->tan) { free(p_struct->tan); p_struct->tan=NULL; p_struct->tan=NULL; } if (p_src) { p_struct->tan=strdup(p_src); } else { p_struct->tan=NULL; } } void AQFINTS_KeyDescr_SetRuntimeFlags(AQFINTS_KEYDESCR *p_struct, uint32_t p_src){ assert(p_struct); p_struct->runtimeFlags=p_src; } void AQFINTS_KeyDescr_AddRuntimeFlags(AQFINTS_KEYDESCR *p_struct, uint32_t p_src) { assert(p_struct); p_struct->runtimeFlags|=p_src; } void AQFINTS_KeyDescr_SubRuntimeFlags(AQFINTS_KEYDESCR *p_struct, uint32_t p_src) { assert(p_struct); p_struct->runtimeFlags&=~p_src; } AQFINTS_KEYDESCR_LIST *AQFINTS_KeyDescr_List_dup(const AQFINTS_KEYDESCR_LIST *p_src) { AQFINTS_KEYDESCR_LIST *p_dest; AQFINTS_KEYDESCR *p_elem; assert(p_src); p_dest=AQFINTS_KeyDescr_List_new(); p_elem=AQFINTS_KeyDescr_List_First(p_src); while(p_elem) { AQFINTS_KEYDESCR *p_cpy; p_cpy=AQFINTS_KeyDescr_dup(p_elem); AQFINTS_KeyDescr_List_Add(p_cpy, p_dest); p_elem=AQFINTS_KeyDescr_List_Next(p_elem); } return p_dest; } void AQFINTS_KeyDescr_ReadDb(AQFINTS_KEYDESCR *p_struct, GWEN_DB_NODE *p_db){ assert(p_struct); /* member "flags" */ p_struct->flags=GWEN_DB_GetIntValue(p_db, "flags", 0, 0); /* member "uniqueUserId" */ p_struct->uniqueUserId=GWEN_DB_GetIntValue(p_db, "uniqueUserId", 0, 0); /* member "userId" */ if (p_struct->userId) { free(p_struct->userId); p_struct->userId=NULL; p_struct->userId=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "userId", 0, NULL); if (s) p_struct->userId=strdup(s); } /* member "bankCode" */ if (p_struct->bankCode) { free(p_struct->bankCode); p_struct->bankCode=NULL; p_struct->bankCode=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "bankCode", 0, NULL); if (s) p_struct->bankCode=strdup(s); } /* member "country" */ p_struct->country=GWEN_DB_GetIntValue(p_db, "country", 0, 0); /* member "keyType" */ if (p_struct->keyType) { free(p_struct->keyType); p_struct->keyType=NULL; p_struct->keyType=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "keyType", 0, NULL); if (s) p_struct->keyType=strdup(s); } /* member "keyNumber" */ p_struct->keyNumber=GWEN_DB_GetIntValue(p_db, "keyNumber", 0, 0); /* member "keyVersion" */ p_struct->keyVersion=GWEN_DB_GetIntValue(p_db, "keyVersion", 0, 0); /* member "keySizeInBytes" */ p_struct->keySizeInBytes=GWEN_DB_GetIntValue(p_db, "keySizeInBytes", 0, 0); /* member "signatureCounter" */ p_struct->signatureCounter=GWEN_DB_GetIntValue(p_db, "signatureCounter", 0, 0); /* member "cid" */ if (p_struct->cid.length && p_struct->cid.pointer) { free(p_struct->cid.pointer); } p_struct->cid.pointer=NULL; p_struct->cid.length=0; { const void *v; unsigned int vlen; v=GWEN_DB_GetBinValue(p_db, "cid", 0, NULL, 0, &vlen); if (v && vlen) { uint8_t *dest; dest=(uint8_t*) malloc(vlen); memmove(dest, v, vlen); p_struct->cid.pointer=dest; p_struct->cid.length=vlen; } } /* member "systemId" */ if (p_struct->systemId) { free(p_struct->systemId); p_struct->systemId=NULL; p_struct->systemId=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "systemId", 0, NULL); if (s) p_struct->systemId=strdup(s); } /* member "securityProfileName" */ if (p_struct->securityProfileName) { free(p_struct->securityProfileName); p_struct->securityProfileName=NULL; p_struct->securityProfileName=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "securityProfileName", 0, NULL); if (s) p_struct->securityProfileName=strdup(s); } /* member "securityProfileVersion" */ p_struct->securityProfileVersion=GWEN_DB_GetIntValue(p_db, "securityProfileVersion", 0, 0); /* member "pin" */ if (p_struct->pin) { free(p_struct->pin); p_struct->pin=NULL; p_struct->pin=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "pin", 0, NULL); if (s) p_struct->pin=strdup(s); } /* member "tan" */ if (p_struct->tan) { free(p_struct->tan); p_struct->tan=NULL; p_struct->tan=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "tan", 0, NULL); if (s) p_struct->tan=strdup(s); } /* member "runtimeFlags" */ /* member "runtimeFlags" is volatile, just presetting it */ p_struct->runtimeFlags=0; } int AQFINTS_KeyDescr_WriteDb(const AQFINTS_KEYDESCR *p_struct, GWEN_DB_NODE *p_db) { int p_rv; assert(p_struct); /* member "flags" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "flags", p_struct->flags); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "uniqueUserId" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "uniqueUserId", p_struct->uniqueUserId); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "userId" */ if (p_struct->userId) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "userId", p_struct->userId); else { GWEN_DB_DeleteVar(p_db, "userId"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "bankCode" */ if (p_struct->bankCode) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "bankCode", p_struct->bankCode); else { GWEN_DB_DeleteVar(p_db, "bankCode"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "country" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "country", p_struct->country); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "keyType" */ if (p_struct->keyType) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "keyType", p_struct->keyType); else { GWEN_DB_DeleteVar(p_db, "keyType"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "keyNumber" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "keyNumber", p_struct->keyNumber); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "keyVersion" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "keyVersion", p_struct->keyVersion); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "keySizeInBytes" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "keySizeInBytes", p_struct->keySizeInBytes); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "signatureCounter" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "signatureCounter", p_struct->signatureCounter); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "cid" */ { if (p_struct->cid.length && p_struct->cid.pointer) { GWEN_DB_SetBinValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "cid", p_struct->cid.pointer, p_struct->cid.length); } else { GWEN_DB_DeleteVar(p_db, "cid"); p_rv=0; } } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "systemId" */ if (p_struct->systemId) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "systemId", p_struct->systemId); else { GWEN_DB_DeleteVar(p_db, "systemId"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "securityProfileName" */ if (p_struct->securityProfileName) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "securityProfileName", p_struct->securityProfileName); else { GWEN_DB_DeleteVar(p_db, "securityProfileName"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "securityProfileVersion" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "securityProfileVersion", p_struct->securityProfileVersion); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "pin" */ if (p_struct->pin) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "pin", p_struct->pin); else { GWEN_DB_DeleteVar(p_db, "pin"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "tan" */ if (p_struct->tan) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "tan", p_struct->tan); else { GWEN_DB_DeleteVar(p_db, "tan"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "runtimeFlags" is volatile, not writing to db */ return 0; } AQFINTS_KEYDESCR *AQFINTS_KeyDescr_fromDb(GWEN_DB_NODE *p_db) { AQFINTS_KEYDESCR *p_struct; p_struct=AQFINTS_KeyDescr_new(); AQFINTS_KeyDescr_ReadDb(p_struct, p_db); return p_struct; } int AQFINTS_KeyDescr_toDb(const AQFINTS_KEYDESCR *p_struct, GWEN_DB_NODE *p_db) { return AQFINTS_KeyDescr_WriteDb(p_struct, p_db); } AQFINTS_KEYDESCR *AQFINTS_KeyDescr_List_GetByUniqueUserId(const AQFINTS_KEYDESCR_LIST *p_list, uint32_t p_cmp){ AQFINTS_KEYDESCR *p_struct; assert(p_list); p_struct = AQFINTS_KeyDescr_List_First(p_list); while(p_struct) { int p_rv; if (p_struct->uniqueUserId==p_cmp) p_rv=0; else if (p_cmpuniqueUserId) p_rv=-1; else p_rv=1; if (p_rv == 0) return p_struct; p_struct = AQFINTS_KeyDescr_List_Next(p_struct); } return NULL; } AQFINTS_KEYDESCR *AQFINTS_KeyDescr_List_GetByUserId(const AQFINTS_KEYDESCR_LIST *p_list, const char *p_cmp){ AQFINTS_KEYDESCR *p_struct; assert(p_list); p_struct = AQFINTS_KeyDescr_List_First(p_list); while(p_struct) { int p_rv; if (p_struct->userId && p_cmp) p_rv=strcasecmp(p_cmp, p_struct->userId); else if (p_cmp) p_rv=1; else if (p_struct->userId) p_rv=-1; else p_rv=0; if (p_rv == 0) return p_struct; p_struct = AQFINTS_KeyDescr_List_Next(p_struct); } return NULL; } AQFINTS_KEYDESCR *AQFINTS_KeyDescr_List_GetBySecurityProfileName(const AQFINTS_KEYDESCR_LIST *p_list, const char *p_cmp){ AQFINTS_KEYDESCR *p_struct; assert(p_list); p_struct = AQFINTS_KeyDescr_List_First(p_list); while(p_struct) { int p_rv; if (p_struct->securityProfileName && p_cmp) p_rv=strcasecmp(p_cmp, p_struct->securityProfileName); else if (p_cmp) p_rv=1; else if (p_struct->securityProfileName) p_rv=-1; else p_rv=0; if (p_rv == 0) return p_struct; p_struct = AQFINTS_KeyDescr_List_Next(p_struct); } return NULL; } void AQFINTS_KeyDescr_SetCid(AQFINTS_KEYDESCR *st, uint8_t *ptr, uint32_t len) { if (st->cid.pointer && st->cid.length) free(st->cid.pointer); st->cid.pointer=ptr; st->cid.length=len; } uint8_t* AQFINTS_KeyDescr_GetCidPointer(const AQFINTS_KEYDESCR *st) { return st->cid.pointer; } uint32_t AQFINTS_KeyDescr_GetCidLength(const AQFINTS_KEYDESCR *st) { return st->cid.length; } /* code headers */ aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/msg/message.h0000664000175000017500000000610214044534775023555 00000000000000/*************************************************************************** begin : Fri Jul 19 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQFINTS_MESSAGE_H #define AQFINTS_MESSAGE_H //#include "msglayer/parser/parser.h" #include "libaqfints/parser/segment.h" #include "libaqfints/msg/keydescr.h" #include #define AQFINTS_MESSAGE_FLAGS_DELAYED_VERIFY 0x00000001 typedef struct AQFINTS_MESSAGE AQFINTS_MESSAGE; /** @name Constructor, Destructor * */ /*@{*/ AQFINTS_MESSAGE *AQFINTS_Message_new(void); void AQFINTS_Message_free(AQFINTS_MESSAGE *msg); /*@}*/ int AQFINTS_Message_GetMessageNumber(const AQFINTS_MESSAGE *msg); void AQFINTS_Message_SetMessageNumber(AQFINTS_MESSAGE *msg, int v); int AQFINTS_Message_GetRefMessageNumber(const AQFINTS_MESSAGE *msg); void AQFINTS_Message_SetRefMessageNumber(AQFINTS_MESSAGE *msg, int v); const char *AQFINTS_Message_GetDialogId(const AQFINTS_MESSAGE *msg); void AQFINTS_Message_SetDialogId(AQFINTS_MESSAGE *msg, const char *s); int AQFINTS_Message_GetHbciVersion(const AQFINTS_MESSAGE *msg); void AQFINTS_Message_SetHbciVersion(AQFINTS_MESSAGE *msg, int i); /** @name Cryptography * */ /*@{*/ AQFINTS_KEYDESCR_LIST *AQFINTS_Message_GetSignerList(const AQFINTS_MESSAGE *msg); void AQFINTS_Message_AddSigner(AQFINTS_MESSAGE *msg, AQFINTS_KEYDESCR *keyDescr); int AQFINTS_Message_HasAnySigner(const AQFINTS_MESSAGE *msg); void AQFINTS_Message_ClearSigners(AQFINTS_MESSAGE *msg); AQFINTS_KEYDESCR *AQFINTS_Message_FindSigner(AQFINTS_MESSAGE *msg, uint32_t uniqueUserId); AQFINTS_KEYDESCR *AQFINTS_Message_GetCrypter(const AQFINTS_MESSAGE *msg); void AQFINTS_Message_SetCrypter(AQFINTS_MESSAGE *msg, AQFINTS_KEYDESCR *keyDescr); /*@}*/ /** @name Segments * */ /*@{*/ AQFINTS_SEGMENT_LIST *AQFINTS_Message_GetSegmentList(const AQFINTS_MESSAGE *msg); void AQFINTS_Message_AddSegment(AQFINTS_MESSAGE *msg, AQFINTS_SEGMENT *segment); /*@}*/ void AQFINTS_Message_Reenumerate(AQFINTS_MESSAGE *msg); void AQFINTS_Message_MoveResultSegsToFront(AQFINTS_MESSAGE *msg); int AQFINTS_Message_GetFirstSegNum(const AQFINTS_MESSAGE *msg); int AQFINTS_Message_GetLastSegNum(const AQFINTS_MESSAGE *msg); /** * Code of the TAN-relevant segment (i.e. code of the segment for which a tan is needed). */ const char *AQFINTS_Message_GetTanJobCode(const AQFINTS_MESSAGE *msg); void AQFINTS_Message_SetTanJobCode(AQFINTS_MESSAGE *msg, const char *s); uint32_t AQFINTS_Message_GetFlags(const AQFINTS_MESSAGE *msg); void AQFINTS_Message_SetFlags(AQFINTS_MESSAGE *msg, uint32_t f); void AQFINTS_Message_AddFlags(AQFINTS_MESSAGE *msg, uint32_t f); void AQFINTS_Message_SubFlags(AQFINTS_MESSAGE *msg, uint32_t f); uint32_t AQFINTS_Message_SampleSegmentFlags(const AQFINTS_MESSAGE *msg); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/msg/Makefile.am0000664000175000017500000000410514043610745024004 00000000000000 AM_CFLAGS=@visibility_cflags@ AM_CPPFLAGS = -I$(top_srcdir)/src/libs -I$(top_builddir)/src/libs $(gwenhywfar_includes) \ -I$(srcdir)/../.. \ -I$(srcdir)/.. \ $(all_includes) noinst_LTLIBRARIES=libaqfintsmsg.la typefiles=\ keydescr.xml typedatadir=$(datadir)/aqbanking/typemaker2/c dist_typedata_DATA= built_sources=\ keydescr.c build_headers_priv=\ keydescr_p.h build_headers_pub=\ keydescr.h build_headers=$(build_headers_priv) $(build_headers_pub) noinst_HEADERS= $(build_headers) \ message.h \ message_p.h libaqfintsmsg_la_SOURCES=$(built_sources) \ message.c EXTRA_DIST=$(typefiles) $(built_sources) $(build_headers) built_sources: $(built_sources) list='$(SUBDIRS)'; for d in $$list; do \ $(MAKE) -C $$d built_sources; \ done ; clean_build_files: rm -f $(built_sources) $(build_headers) format_built_files: for f in $(built_sources) $(build_headers); do \ $(ASTYLE) --style=stroustrup -s2 --min-conditional-indent=0 --indent-labels --max-continuation-indent=80 --pad-comma --pad-header --unpad-paren --align-pointer=name --break-closing-braces --break-one-line-headers --attach-return-type --convert-tabs --max-code-length=120 --break-after-logical --suffix=none $$f; \ done sources: for f in $(libaqfintsmsg_la_SOURCES) $(EXTRA_DIST); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d sources; \ done typefiles: $(typefiles) for d in $(SUBDIRS); do \ $(MAKE) -C $$d typefiles; \ done $(typemaker2_exe) -I $(top_srcdir)/src/libs/aqbanking/typemaker2/c -I $(gwenhywfar_dir)/share/gwenhywfar/typemaker2/c -I $(srcdir) --destfolder="$(srcdir)" $(typefiles) typedefs: $(typefiles) for d in $(SUBDIRS); do \ $(MAKE) -C $$d typedefs; \ done $(typemaker2_exe) --defs-only -I $(top_srcdir)/src/libs/aqbanking/typemaker2/c -I $(gwenhywfar_dir)/share/gwenhywfar/typemaker2/c -I $(srcdir) --destfolder="$(srcdir)" $(typefiles) cppcheck: for f in $(libaqfintsmsg_la_SOURCES); do \ cppcheck --force $$f ; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/msg/keydescr.h0000664000175000017500000002745115037736054023751 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "keydescr.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef AQFINTS_KEYDESCR_KEYDESCR_H #define AQFINTS_KEYDESCR_KEYDESCR_H #ifdef __cplusplus extern "C" { #endif /** @page P_AQFINTS_KEYDESCR Structure AQFINTS_KEYDESCR

This page describes the properties of AQFINTS_KEYDESCR.

AQFINTS_KEYDESCR

@anchor AQFINTS_KEYDESCR_flags

flags

Set this property with @ref AQFINTS_KeyDescr_SetFlags(), get it with @ref AQFINTS_KeyDescr_GetFlags().

@anchor AQFINTS_KEYDESCR_uniqueUserId

uniqueUserId

Set this property with @ref AQFINTS_KeyDescr_SetUniqueUserId(), get it with @ref AQFINTS_KeyDescr_GetUniqueUserId().

@anchor AQFINTS_KEYDESCR_userId

userId

Set this property with @ref AQFINTS_KeyDescr_SetUserId(), get it with @ref AQFINTS_KeyDescr_GetUserId().

@anchor AQFINTS_KEYDESCR_bankCode

bankCode

Set this property with @ref AQFINTS_KeyDescr_SetBankCode(), get it with @ref AQFINTS_KeyDescr_GetBankCode().

@anchor AQFINTS_KEYDESCR_country

country

Set this property with @ref AQFINTS_KeyDescr_SetCountry(), get it with @ref AQFINTS_KeyDescr_GetCountry().

@anchor AQFINTS_KEYDESCR_keyType

keyType

Set this property with @ref AQFINTS_KeyDescr_SetKeyType(), get it with @ref AQFINTS_KeyDescr_GetKeyType().

@anchor AQFINTS_KEYDESCR_keyNumber

keyNumber

Set this property with @ref AQFINTS_KeyDescr_SetKeyNumber(), get it with @ref AQFINTS_KeyDescr_GetKeyNumber().

@anchor AQFINTS_KEYDESCR_keyVersion

keyVersion

Set this property with @ref AQFINTS_KeyDescr_SetKeyVersion(), get it with @ref AQFINTS_KeyDescr_GetKeyVersion().

@anchor AQFINTS_KEYDESCR_keySizeInBytes

keySizeInBytes

Set this property with @ref AQFINTS_KeyDescr_SetKeySizeInBytes(), get it with @ref AQFINTS_KeyDescr_GetKeySizeInBytes().

@anchor AQFINTS_KEYDESCR_signatureCounter

signatureCounter

Set this property with @ref AQFINTS_KeyDescr_SetSignatureCounter(), get it with @ref AQFINTS_KeyDescr_GetSignatureCounter().

@anchor AQFINTS_KEYDESCR_cid

cid

Set this property with @ref AQFINTS_KeyDescr_SetCid(), get it with @ref AQFINTS_KeyDescr_GetCid().

@anchor AQFINTS_KEYDESCR_systemId

systemId

Set this property with @ref AQFINTS_KeyDescr_SetSystemId(), get it with @ref AQFINTS_KeyDescr_GetSystemId().

@anchor AQFINTS_KEYDESCR_securityProfileName

securityProfileName

Set this property with @ref AQFINTS_KeyDescr_SetSecurityProfileName(), get it with @ref AQFINTS_KeyDescr_GetSecurityProfileName().

@anchor AQFINTS_KEYDESCR_securityProfileVersion

securityProfileVersion

Set this property with @ref AQFINTS_KeyDescr_SetSecurityProfileVersion(), get it with @ref AQFINTS_KeyDescr_GetSecurityProfileVersion().

@anchor AQFINTS_KEYDESCR_pin

pin

Set this property with @ref AQFINTS_KeyDescr_SetPin(), get it with @ref AQFINTS_KeyDescr_GetPin().

@anchor AQFINTS_KEYDESCR_tan

tan

Set this property with @ref AQFINTS_KeyDescr_SetTan(), get it with @ref AQFINTS_KeyDescr_GetTan().

@anchor AQFINTS_KEYDESCR_runtimeFlags

runtimeFlags

Set this property with @ref AQFINTS_KeyDescr_SetRuntimeFlags(), get it with @ref AQFINTS_KeyDescr_GetRuntimeFlags().

*/ /* define AQFINTS_KEYDESCR_RTFLAGS */ /* define AQFINTS_KEYDESCR_FLAGS */ /* needed system headers */ #include #include #include /* pre-headers */ #include #include typedef struct AQFINTS_KEYDESCR AQFINTS_KEYDESCR; GWEN_LIST_FUNCTION_DEFS(AQFINTS_KEYDESCR, AQFINTS_KeyDescr) /* post-headers */ /** Constructor. */ AQFINTS_KEYDESCR *AQFINTS_KeyDescr_new(void); /** Destructor. */ void AQFINTS_KeyDescr_free(AQFINTS_KEYDESCR *p_struct); void AQFINTS_KeyDescr_Attach(AQFINTS_KEYDESCR *p_struct); AQFINTS_KEYDESCR *AQFINTS_KeyDescr_dup(const AQFINTS_KEYDESCR *p_src); AQFINTS_KEYDESCR *AQFINTS_KeyDescr_copy(AQFINTS_KEYDESCR *p_struct, const AQFINTS_KEYDESCR *p_src); /** Getter. * Use this function to get the member "flags" (see @ref AQFINTS_KEYDESCR_flags) */ uint32_t AQFINTS_KeyDescr_GetFlags(const AQFINTS_KEYDESCR *p_struct); /** Getter. * Use this function to get the member "uniqueUserId" (see @ref AQFINTS_KEYDESCR_uniqueUserId) */ uint32_t AQFINTS_KeyDescr_GetUniqueUserId(const AQFINTS_KEYDESCR *p_struct); /** Getter. * Use this function to get the member "userId" (see @ref AQFINTS_KEYDESCR_userId) */ const char *AQFINTS_KeyDescr_GetUserId(const AQFINTS_KEYDESCR *p_struct); /** Getter. * Use this function to get the member "bankCode" (see @ref AQFINTS_KEYDESCR_bankCode) */ const char *AQFINTS_KeyDescr_GetBankCode(const AQFINTS_KEYDESCR *p_struct); /** Getter. * Use this function to get the member "country" (see @ref AQFINTS_KEYDESCR_country) */ int AQFINTS_KeyDescr_GetCountry(const AQFINTS_KEYDESCR *p_struct); /** Getter. * Use this function to get the member "keyType" (see @ref AQFINTS_KEYDESCR_keyType) */ const char *AQFINTS_KeyDescr_GetKeyType(const AQFINTS_KEYDESCR *p_struct); /** Getter. * Use this function to get the member "keyNumber" (see @ref AQFINTS_KEYDESCR_keyNumber) */ int AQFINTS_KeyDescr_GetKeyNumber(const AQFINTS_KEYDESCR *p_struct); /** Getter. * Use this function to get the member "keyVersion" (see @ref AQFINTS_KEYDESCR_keyVersion) */ int AQFINTS_KeyDescr_GetKeyVersion(const AQFINTS_KEYDESCR *p_struct); /** Getter. * Use this function to get the member "keySizeInBytes" (see @ref AQFINTS_KEYDESCR_keySizeInBytes) */ int AQFINTS_KeyDescr_GetKeySizeInBytes(const AQFINTS_KEYDESCR *p_struct); /** Getter. * Use this function to get the member "signatureCounter" (see @ref AQFINTS_KEYDESCR_signatureCounter) */ int AQFINTS_KeyDescr_GetSignatureCounter(const AQFINTS_KEYDESCR *p_struct); /** Getter. * Use this function to get the member "systemId" (see @ref AQFINTS_KEYDESCR_systemId) */ const char *AQFINTS_KeyDescr_GetSystemId(const AQFINTS_KEYDESCR *p_struct); /** Getter. * Use this function to get the member "securityProfileName" (see @ref AQFINTS_KEYDESCR_securityProfileName) */ const char *AQFINTS_KeyDescr_GetSecurityProfileName(const AQFINTS_KEYDESCR *p_struct); /** Getter. * Use this function to get the member "securityProfileVersion" (see @ref AQFINTS_KEYDESCR_securityProfileVersion) */ int AQFINTS_KeyDescr_GetSecurityProfileVersion(const AQFINTS_KEYDESCR *p_struct); /** Getter. * Use this function to get the member "pin" (see @ref AQFINTS_KEYDESCR_pin) */ const char *AQFINTS_KeyDescr_GetPin(const AQFINTS_KEYDESCR *p_struct); /** Getter. * Use this function to get the member "tan" (see @ref AQFINTS_KEYDESCR_tan) */ const char *AQFINTS_KeyDescr_GetTan(const AQFINTS_KEYDESCR *p_struct); /** Getter. * Use this function to get the member "runtimeFlags" (see @ref AQFINTS_KEYDESCR_runtimeFlags) */ uint32_t AQFINTS_KeyDescr_GetRuntimeFlags(const AQFINTS_KEYDESCR *p_struct); /** Setter. * Use this function to set the member "flags" (see @ref AQFINTS_KEYDESCR_flags) */ void AQFINTS_KeyDescr_SetFlags(AQFINTS_KEYDESCR *p_struct, uint32_t p_src); /** Add flags. * Use this function to add flags to member "flags" (see @ref AQFINTS_KEYDESCR_flags) */ void AQFINTS_KeyDescr_AddFlags(AQFINTS_KEYDESCR *p_struct, uint32_t p_src); /** Add flags. * Use this function to add flags to member "flags" (see @ref AQFINTS_KEYDESCR_flags) */ void AQFINTS_KeyDescr_SubFlags(AQFINTS_KEYDESCR *p_struct, uint32_t p_src); /** Setter. * Use this function to set the member "uniqueUserId" (see @ref AQFINTS_KEYDESCR_uniqueUserId) */ void AQFINTS_KeyDescr_SetUniqueUserId(AQFINTS_KEYDESCR *p_struct, uint32_t p_src); /** Setter. * Use this function to set the member "userId" (see @ref AQFINTS_KEYDESCR_userId) */ void AQFINTS_KeyDescr_SetUserId(AQFINTS_KEYDESCR *p_struct, const char *p_src); /** Setter. * Use this function to set the member "bankCode" (see @ref AQFINTS_KEYDESCR_bankCode) */ void AQFINTS_KeyDescr_SetBankCode(AQFINTS_KEYDESCR *p_struct, const char *p_src); /** Setter. * Use this function to set the member "country" (see @ref AQFINTS_KEYDESCR_country) */ void AQFINTS_KeyDescr_SetCountry(AQFINTS_KEYDESCR *p_struct, int p_src); /** Setter. * Use this function to set the member "keyType" (see @ref AQFINTS_KEYDESCR_keyType) */ void AQFINTS_KeyDescr_SetKeyType(AQFINTS_KEYDESCR *p_struct, const char *p_src); /** Setter. * Use this function to set the member "keyNumber" (see @ref AQFINTS_KEYDESCR_keyNumber) */ void AQFINTS_KeyDescr_SetKeyNumber(AQFINTS_KEYDESCR *p_struct, int p_src); /** Setter. * Use this function to set the member "keyVersion" (see @ref AQFINTS_KEYDESCR_keyVersion) */ void AQFINTS_KeyDescr_SetKeyVersion(AQFINTS_KEYDESCR *p_struct, int p_src); /** Setter. * Use this function to set the member "keySizeInBytes" (see @ref AQFINTS_KEYDESCR_keySizeInBytes) */ void AQFINTS_KeyDescr_SetKeySizeInBytes(AQFINTS_KEYDESCR *p_struct, int p_src); /** Setter. * Use this function to set the member "signatureCounter" (see @ref AQFINTS_KEYDESCR_signatureCounter) */ void AQFINTS_KeyDescr_SetSignatureCounter(AQFINTS_KEYDESCR *p_struct, int p_src); /** Setter. * Use this function to set the member "systemId" (see @ref AQFINTS_KEYDESCR_systemId) */ void AQFINTS_KeyDescr_SetSystemId(AQFINTS_KEYDESCR *p_struct, const char *p_src); /** Setter. * Use this function to set the member "securityProfileName" (see @ref AQFINTS_KEYDESCR_securityProfileName) */ void AQFINTS_KeyDescr_SetSecurityProfileName(AQFINTS_KEYDESCR *p_struct, const char *p_src); /** Setter. * Use this function to set the member "securityProfileVersion" (see @ref AQFINTS_KEYDESCR_securityProfileVersion) */ void AQFINTS_KeyDescr_SetSecurityProfileVersion(AQFINTS_KEYDESCR *p_struct, int p_src); /** Setter. * Use this function to set the member "pin" (see @ref AQFINTS_KEYDESCR_pin) */ void AQFINTS_KeyDescr_SetPin(AQFINTS_KEYDESCR *p_struct, const char *p_src); /** Setter. * Use this function to set the member "tan" (see @ref AQFINTS_KEYDESCR_tan) */ void AQFINTS_KeyDescr_SetTan(AQFINTS_KEYDESCR *p_struct, const char *p_src); /** Setter. * Use this function to set the member "runtimeFlags" (see @ref AQFINTS_KEYDESCR_runtimeFlags) */ void AQFINTS_KeyDescr_SetRuntimeFlags(AQFINTS_KEYDESCR *p_struct, uint32_t p_src); /** Add flags. * Use this function to add flags to member "runtimeFlags" (see @ref AQFINTS_KEYDESCR_runtimeFlags) */ void AQFINTS_KeyDescr_AddRuntimeFlags(AQFINTS_KEYDESCR *p_struct, uint32_t p_src); /** Add flags. * Use this function to add flags to member "runtimeFlags" (see @ref AQFINTS_KEYDESCR_runtimeFlags) */ void AQFINTS_KeyDescr_SubRuntimeFlags(AQFINTS_KEYDESCR *p_struct, uint32_t p_src); AQFINTS_KEYDESCR_LIST *AQFINTS_KeyDescr_List_dup(const AQFINTS_KEYDESCR_LIST *p_src); void AQFINTS_KeyDescr_ReadDb(AQFINTS_KEYDESCR *p_struct, GWEN_DB_NODE *p_db); int AQFINTS_KeyDescr_WriteDb(const AQFINTS_KEYDESCR *p_struct, GWEN_DB_NODE *p_db); AQFINTS_KEYDESCR *AQFINTS_KeyDescr_fromDb(GWEN_DB_NODE *p_db); int AQFINTS_KeyDescr_toDb(const AQFINTS_KEYDESCR *p_struct, GWEN_DB_NODE *p_db); AQFINTS_KEYDESCR *AQFINTS_KeyDescr_List_GetByUniqueUserId(const AQFINTS_KEYDESCR_LIST *p_list, uint32_t p_cmp); AQFINTS_KEYDESCR *AQFINTS_KeyDescr_List_GetByUserId(const AQFINTS_KEYDESCR_LIST *p_list, const char *p_cmp); AQFINTS_KEYDESCR *AQFINTS_KeyDescr_List_GetBySecurityProfileName(const AQFINTS_KEYDESCR_LIST *p_list, const char *p_cmp); void AQFINTS_KeyDescr_SetCid(AQFINTS_KEYDESCR *st, uint8_t *ptr, uint32_t len); uint8_t* AQFINTS_KeyDescr_GetCidPointer(const AQFINTS_KEYDESCR *st); uint32_t AQFINTS_KeyDescr_GetCidLength(const AQFINTS_KEYDESCR *st); #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/msg/Makefile.in0000644000175000017500000006555215037736025024034 00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/libs/plugins/backends/aqfints/libaqfints/msg ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/distri.m4 $(top_srcdir)/m4/gwenhywfar.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/os.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(dist_typedata_DATA) \ $(noinst_HEADERS) $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libaqfintsmsg_la_LIBADD = am__objects_1 = keydescr.lo am_libaqfintsmsg_la_OBJECTS = $(am__objects_1) message.lo libaqfintsmsg_la_OBJECTS = $(am_libaqfintsmsg_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/keydescr.Plo ./$(DEPDIR)/message.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libaqfintsmsg_la_SOURCES) DIST_SOURCES = $(libaqfintsmsg_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(typedatadir)" DATA = $(dist_typedata_DATA) HEADERS = $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp TODO DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADD_ACLOCAL_FLAGS = @ADD_ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AQBANKING_CLI_VERSION_STRING = @AQBANKING_CLI_VERSION_STRING@ AQBANKING_FINTS_VERSION_STRING = @AQBANKING_FINTS_VERSION_STRING@ AQBANKING_SO_AGE = @AQBANKING_SO_AGE@ AQBANKING_SO_CURRENT = @AQBANKING_SO_CURRENT@ AQBANKING_SO_EFFECTIVE = @AQBANKING_SO_EFFECTIVE@ AQBANKING_SO_REVISION = @AQBANKING_SO_REVISION@ AQBANKING_VERSION_BUILD = @AQBANKING_VERSION_BUILD@ AQBANKING_VERSION_FULL_STRING = @AQBANKING_VERSION_FULL_STRING@ AQBANKING_VERSION_MAJOR = @AQBANKING_VERSION_MAJOR@ AQBANKING_VERSION_MINOR = @AQBANKING_VERSION_MINOR@ AQBANKING_VERSION_PATCHLEVEL = @AQBANKING_VERSION_PATCHLEVEL@ AQBANKING_VERSION_RELEASE_STRING = @AQBANKING_VERSION_RELEASE_STRING@ AQBANKING_VERSION_STRING = @AQBANKING_VERSION_STRING@ AQBANKING_VERSION_TAG = @AQBANKING_VERSION_TAG@ AQEBICS_CFLAGS = @AQEBICS_CFLAGS@ AQEBICS_LIBS = @AQEBICS_LIBS@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATETIME = @DATETIME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_EXCLUDE_PATTERNS = @DOXYGEN_EXCLUDE_PATTERNS@ DOXYGEN_FILE_PATTERNS = @DOXYGEN_FILE_PATTERNS@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENGUI_GTK2_CFLAGS = @GWENGUI_GTK2_CFLAGS@ GWENGUI_GTK2_LIBS = @GWENGUI_GTK2_LIBS@ GWENHYWFAR_MINIMUM_VERSION = @GWENHYWFAR_MINIMUM_VERSION@ HAVE_GWENGUI_GTK2 = @HAVE_GWENGUI_GTK2@ HAVE_I18N = @HAVE_I18N@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIBXSLT_CFLAGS = @LIBXSLT_CFLAGS@ LIBXSLT_LIBS = @LIBXSLT_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_SUPPORTS_QT = @MSGFMT_SUPPORTS_QT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ TUTORIALS = @TUTORIALS@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XMLMERGE = @XMLMERGE@ XMLSEC_CFLAGS = @XMLSEC_CFLAGS@ XMLSEC_LIBS = @XMLSEC_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ aqbanking_backends = @aqbanking_backends@ aqbanking_cfg_searchdir = @aqbanking_cfg_searchdir@ aqbanking_data_searchdir = @aqbanking_data_searchdir@ aqbanking_headerdir = @aqbanking_headerdir@ aqbanking_headerdir_am = @aqbanking_headerdir_am@ aqbanking_includes = @aqbanking_includes@ aqbanking_internal_libs = @aqbanking_internal_libs@ aqbanking_ldflags = @aqbanking_ldflags@ aqbanking_libs = @aqbanking_libs@ aqbanking_locale_searchdir = @aqbanking_locale_searchdir@ aqbanking_modules = @aqbanking_modules@ aqbanking_pkgdatadir = @aqbanking_pkgdatadir@ aqbanking_plugin_searchdir = @aqbanking_plugin_searchdir@ aqbanking_plugindir = @aqbanking_plugindir@ aqbanking_plugins_backends_dirs = @aqbanking_plugins_backends_dirs@ aqbanking_plugins_backends_libs = @aqbanking_plugins_backends_libs@ aqbanking_plugins_bankinfo_dirs = @aqbanking_plugins_bankinfo_dirs@ aqbanking_plugins_bankinfo_libs = @aqbanking_plugins_bankinfo_libs@ aqbanking_plugins_imexporters_dirs = @aqbanking_plugins_imexporters_dirs@ aqbanking_plugins_imexporters_libs = @aqbanking_plugins_imexporters_libs@ aqbanking_plugins_parsers_dirs = @aqbanking_plugins_parsers_dirs@ aqbanking_symlinkdir = @aqbanking_symlinkdir@ aqbanking_sys_is_windows = @aqbanking_sys_is_windows@ aqbankingpp_modules = @aqbankingpp_modules@ aqebics_datadir = @aqebics_datadir@ aqebics_includes = @aqebics_includes@ aqebics_internal_libs = @aqebics_internal_libs@ aqebics_ldflags = @aqebics_ldflags@ aqebics_libs = @aqebics_libs@ aqfints_datadir = @aqfints_datadir@ aqhbci_datadir = @aqhbci_datadir@ aqhbci_includes = @aqhbci_includes@ aqhbci_internal_libs = @aqhbci_internal_libs@ aqhbci_ldflags = @aqhbci_ldflags@ aqhbci_libs = @aqhbci_libs@ aqofxconnect_includes = @aqofxconnect_includes@ aqofxconnect_internal_libs = @aqofxconnect_internal_libs@ aqofxconnect_libs = @aqofxconnect_libs@ aqpaypal_includes = @aqpaypal_includes@ aqpaypal_internal_libs = @aqpaypal_internal_libs@ aqpaypal_libs = @aqpaypal_libs@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gmp_libs = @gmp_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_dir = @gwenhywfar_dir@ gwenhywfar_has_crypt = @gwenhywfar_has_crypt@ gwenhywfar_headers = @gwenhywfar_headers@ gwenhywfar_includes = @gwenhywfar_includes@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_plugins = @gwenhywfar_plugins@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ typemaker2_exe = @typemaker2_exe@ visibility_cflags = @visibility_cflags@ with_aqebics = @with_aqebics@ with_aqhbci = @with_aqhbci@ AM_CFLAGS = @visibility_cflags@ AM_CPPFLAGS = -I$(top_srcdir)/src/libs -I$(top_builddir)/src/libs $(gwenhywfar_includes) \ -I$(srcdir)/../.. \ -I$(srcdir)/.. \ $(all_includes) noinst_LTLIBRARIES = libaqfintsmsg.la typefiles = \ keydescr.xml typedatadir = $(datadir)/aqbanking/typemaker2/c dist_typedata_DATA = built_sources = \ keydescr.c build_headers_priv = \ keydescr_p.h build_headers_pub = \ keydescr.h build_headers = $(build_headers_priv) $(build_headers_pub) noinst_HEADERS = $(build_headers) \ message.h \ message_p.h libaqfintsmsg_la_SOURCES = $(built_sources) \ message.c EXTRA_DIST = $(typefiles) $(built_sources) $(build_headers) all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libs/plugins/backends/aqfints/libaqfints/msg/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libs/plugins/backends/aqfints/libaqfints/msg/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libaqfintsmsg.la: $(libaqfintsmsg_la_OBJECTS) $(libaqfintsmsg_la_DEPENDENCIES) $(EXTRA_libaqfintsmsg_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libaqfintsmsg_la_OBJECTS) $(libaqfintsmsg_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/keydescr.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/message.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-dist_typedataDATA: $(dist_typedata_DATA) @$(NORMAL_INSTALL) @list='$(dist_typedata_DATA)'; test -n "$(typedatadir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(typedatadir)'"; \ $(MKDIR_P) "$(DESTDIR)$(typedatadir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(typedatadir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(typedatadir)" || exit $$?; \ done uninstall-dist_typedataDATA: @$(NORMAL_UNINSTALL) @list='$(dist_typedata_DATA)'; test -n "$(typedatadir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(typedatadir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(typedatadir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/keydescr.Plo -rm -f ./$(DEPDIR)/message.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dist_typedataDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/keydescr.Plo -rm -f ./$(DEPDIR)/message.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-dist_typedataDATA .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-generic clean-libtool clean-noinstLTLIBRARIES \ cscopelist-am ctags ctags-am distclean distclean-compile \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dist_typedataDATA \ install-dvi install-dvi-am install-exec install-exec-am \ install-html install-html-am install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-dist_typedataDATA .PRECIOUS: Makefile built_sources: $(built_sources) list='$(SUBDIRS)'; for d in $$list; do \ $(MAKE) -C $$d built_sources; \ done ; clean_build_files: rm -f $(built_sources) $(build_headers) format_built_files: for f in $(built_sources) $(build_headers); do \ $(ASTYLE) --style=stroustrup -s2 --min-conditional-indent=0 --indent-labels --max-continuation-indent=80 --pad-comma --pad-header --unpad-paren --align-pointer=name --break-closing-braces --break-one-line-headers --attach-return-type --convert-tabs --max-code-length=120 --break-after-logical --suffix=none $$f; \ done sources: for f in $(libaqfintsmsg_la_SOURCES) $(EXTRA_DIST); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d sources; \ done typefiles: $(typefiles) for d in $(SUBDIRS); do \ $(MAKE) -C $$d typefiles; \ done $(typemaker2_exe) -I $(top_srcdir)/src/libs/aqbanking/typemaker2/c -I $(gwenhywfar_dir)/share/gwenhywfar/typemaker2/c -I $(srcdir) --destfolder="$(srcdir)" $(typefiles) typedefs: $(typefiles) for d in $(SUBDIRS); do \ $(MAKE) -C $$d typedefs; \ done $(typemaker2_exe) --defs-only -I $(top_srcdir)/src/libs/aqbanking/typemaker2/c -I $(gwenhywfar_dir)/share/gwenhywfar/typemaker2/c -I $(srcdir) --destfolder="$(srcdir)" $(typefiles) cppcheck: for f in $(libaqfintsmsg_la_SOURCES); do \ cppcheck --force $$f ; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: aqbanking-6.6.1/src/libs/plugins/backends/aqfints/libaqfints/Makefile.in0000644000175000017500000006743715037736025023252 00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/libs/plugins/backends/aqfints/libaqfints ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/distri.m4 $(top_srcdir)/m4/gwenhywfar.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/os.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) am__DEPENDENCIES_1 = libaqfints_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \ parser/libaqfintsparser.la msg/libaqfintsmsg.la \ service/libaqfintsservice.la transport/libaqfintstransport.la \ session/libaqfintssession.la am_libaqfints_la_OBJECTS = aqfints.lo libaqfints_la_OBJECTS = $(am_libaqfints_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/aqfints.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libaqfints_la_SOURCES) DIST_SOURCES = $(libaqfints_la_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac HEADERS = $(noinst_HEADERS) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir distdir-am am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp README \ TODO DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ADD_ACLOCAL_FLAGS = @ADD_ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AQBANKING_CLI_VERSION_STRING = @AQBANKING_CLI_VERSION_STRING@ AQBANKING_FINTS_VERSION_STRING = @AQBANKING_FINTS_VERSION_STRING@ AQBANKING_SO_AGE = @AQBANKING_SO_AGE@ AQBANKING_SO_CURRENT = @AQBANKING_SO_CURRENT@ AQBANKING_SO_EFFECTIVE = @AQBANKING_SO_EFFECTIVE@ AQBANKING_SO_REVISION = @AQBANKING_SO_REVISION@ AQBANKING_VERSION_BUILD = @AQBANKING_VERSION_BUILD@ AQBANKING_VERSION_FULL_STRING = @AQBANKING_VERSION_FULL_STRING@ AQBANKING_VERSION_MAJOR = @AQBANKING_VERSION_MAJOR@ AQBANKING_VERSION_MINOR = @AQBANKING_VERSION_MINOR@ AQBANKING_VERSION_PATCHLEVEL = @AQBANKING_VERSION_PATCHLEVEL@ AQBANKING_VERSION_RELEASE_STRING = @AQBANKING_VERSION_RELEASE_STRING@ AQBANKING_VERSION_STRING = @AQBANKING_VERSION_STRING@ AQBANKING_VERSION_TAG = @AQBANKING_VERSION_TAG@ AQEBICS_CFLAGS = @AQEBICS_CFLAGS@ AQEBICS_LIBS = @AQEBICS_LIBS@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATETIME = @DATETIME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_EXCLUDE_PATTERNS = @DOXYGEN_EXCLUDE_PATTERNS@ DOXYGEN_FILE_PATTERNS = @DOXYGEN_FILE_PATTERNS@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENGUI_GTK2_CFLAGS = @GWENGUI_GTK2_CFLAGS@ GWENGUI_GTK2_LIBS = @GWENGUI_GTK2_LIBS@ GWENHYWFAR_MINIMUM_VERSION = @GWENHYWFAR_MINIMUM_VERSION@ HAVE_GWENGUI_GTK2 = @HAVE_GWENGUI_GTK2@ HAVE_I18N = @HAVE_I18N@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIBXSLT_CFLAGS = @LIBXSLT_CFLAGS@ LIBXSLT_LIBS = @LIBXSLT_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_SUPPORTS_QT = @MSGFMT_SUPPORTS_QT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ TUTORIALS = @TUTORIALS@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XMLMERGE = @XMLMERGE@ XMLSEC_CFLAGS = @XMLSEC_CFLAGS@ XMLSEC_LIBS = @XMLSEC_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ aqbanking_backends = @aqbanking_backends@ aqbanking_cfg_searchdir = @aqbanking_cfg_searchdir@ aqbanking_data_searchdir = @aqbanking_data_searchdir@ aqbanking_headerdir = @aqbanking_headerdir@ aqbanking_headerdir_am = @aqbanking_headerdir_am@ aqbanking_includes = @aqbanking_includes@ aqbanking_internal_libs = @aqbanking_internal_libs@ aqbanking_ldflags = @aqbanking_ldflags@ aqbanking_libs = @aqbanking_libs@ aqbanking_locale_searchdir = @aqbanking_locale_searchdir@ aqbanking_modules = @aqbanking_modules@ aqbanking_pkgdatadir = @aqbanking_pkgdatadir@ aqbanking_plugin_searchdir = @aqbanking_plugin_searchdir@ aqbanking_plugindir = @aqbanking_plugindir@ aqbanking_plugins_backends_dirs = @aqbanking_plugins_backends_dirs@ aqbanking_plugins_backends_libs = @aqbanking_plugins_backends_libs@ aqbanking_plugins_bankinfo_dirs = @aqbanking_plugins_bankinfo_dirs@ aqbanking_plugins_bankinfo_libs = @aqbanking_plugins_bankinfo_libs@ aqbanking_plugins_imexporters_dirs = @aqbanking_plugins_imexporters_dirs@ aqbanking_plugins_imexporters_libs = @aqbanking_plugins_imexporters_libs@ aqbanking_plugins_parsers_dirs = @aqbanking_plugins_parsers_dirs@ aqbanking_symlinkdir = @aqbanking_symlinkdir@ aqbanking_sys_is_windows = @aqbanking_sys_is_windows@ aqbankingpp_modules = @aqbankingpp_modules@ aqebics_datadir = @aqebics_datadir@ aqebics_includes = @aqebics_includes@ aqebics_internal_libs = @aqebics_internal_libs@ aqebics_ldflags = @aqebics_ldflags@ aqebics_libs = @aqebics_libs@ aqfints_datadir = @aqfints_datadir@ aqhbci_datadir = @aqhbci_datadir@ aqhbci_includes = @aqhbci_includes@ aqhbci_internal_libs = @aqhbci_internal_libs@ aqhbci_ldflags = @aqhbci_ldflags@ aqhbci_libs = @aqhbci_libs@ aqofxconnect_includes = @aqofxconnect_includes@ aqofxconnect_internal_libs = @aqofxconnect_internal_libs@ aqofxconnect_libs = @aqofxconnect_libs@ aqpaypal_includes = @aqpaypal_includes@ aqpaypal_internal_libs = @aqpaypal_internal_libs@ aqpaypal_libs = @aqpaypal_libs@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gmp_libs = @gmp_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_dir = @gwenhywfar_dir@ gwenhywfar_has_crypt = @gwenhywfar_has_crypt@ gwenhywfar_headers = @gwenhywfar_headers@ gwenhywfar_includes = @gwenhywfar_includes@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_plugins = @gwenhywfar_plugins@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ typemaker2_exe = @typemaker2_exe@ visibility_cflags = @visibility_cflags@ with_aqebics = @with_aqebics@ with_aqhbci = @with_aqhbci@ SUBDIRS = parser msg service transport session AM_CPPFLAGS = -I$(srcdir) -I$(top_srcdir)/src/lib -I$(top_builddir)/src/lib $(gwenhywfar_includes) $(aqbanking_includes) -I$(srcdir)/.. AM_CFLAGS = @visibility_cflags@ # static plugin library noinst_LTLIBRARIES = libaqfints.la libaqfints_la_SOURCES = \ aqfints.c noinst_HEADERS = \ aqfints.h libaqfints_la_LIBADD = $(gwenhywfar_libs) \ parser/libaqfintsparser.la \ msg/libaqfintsmsg.la \ service/libaqfintsservice.la \ transport/libaqfintstransport.la \ session/libaqfintssession.la all: all-recursive .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libs/plugins/backends/aqfints/libaqfints/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libs/plugins/backends/aqfints/libaqfints/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libaqfints.la: $(libaqfints_la_OBJECTS) $(libaqfints_la_DEPENDENCIES) $(EXTRA_libaqfints_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libaqfints_la_OBJECTS) $(libaqfints_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aqfints.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-recursive -rm -f ./$(DEPDIR)/aqfints.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f ./$(DEPDIR)/aqfints.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ am--depfiles check check-am clean clean-generic clean-libtool \ clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am .PRECIOUS: Makefile sources: for f in $(libaqfints_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for f in $(plugin_DATA); do \ echo $(subdir)/$$f >>$(top_srcdir)/pdsources; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d sources; \ done built_sources: cppcheck: for f in $(libaqfints_la_SOURCES); do \ cppcheck --force $$f ; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done typefiles: for d in $(SUBDIRS); do \ $(MAKE) -C $$d typefiles; \ done typedefs: for d in $(SUBDIRS); do \ $(MAKE) -C $$d typedefs; \ done # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: aqbanking-6.6.1/src/libs/plugins/backends/Makefile.in0000644000175000017500000006577415037736024017452 00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/libs/plugins/backends ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/distri.m4 $(top_srcdir)/m4/gwenhywfar.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/os.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libabbackends_la_DEPENDENCIES = am_libabbackends_la_OBJECTS = dummy.lo libabbackends_la_OBJECTS = $(am_libabbackends_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/dummy.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libabbackends_la_SOURCES) DIST_SOURCES = $(libabbackends_la_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir distdir-am am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ADD_ACLOCAL_FLAGS = @ADD_ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AQBANKING_CLI_VERSION_STRING = @AQBANKING_CLI_VERSION_STRING@ AQBANKING_FINTS_VERSION_STRING = @AQBANKING_FINTS_VERSION_STRING@ AQBANKING_SO_AGE = @AQBANKING_SO_AGE@ AQBANKING_SO_CURRENT = @AQBANKING_SO_CURRENT@ AQBANKING_SO_EFFECTIVE = @AQBANKING_SO_EFFECTIVE@ AQBANKING_SO_REVISION = @AQBANKING_SO_REVISION@ AQBANKING_VERSION_BUILD = @AQBANKING_VERSION_BUILD@ AQBANKING_VERSION_FULL_STRING = @AQBANKING_VERSION_FULL_STRING@ AQBANKING_VERSION_MAJOR = @AQBANKING_VERSION_MAJOR@ AQBANKING_VERSION_MINOR = @AQBANKING_VERSION_MINOR@ AQBANKING_VERSION_PATCHLEVEL = @AQBANKING_VERSION_PATCHLEVEL@ AQBANKING_VERSION_RELEASE_STRING = @AQBANKING_VERSION_RELEASE_STRING@ AQBANKING_VERSION_STRING = @AQBANKING_VERSION_STRING@ AQBANKING_VERSION_TAG = @AQBANKING_VERSION_TAG@ AQEBICS_CFLAGS = @AQEBICS_CFLAGS@ AQEBICS_LIBS = @AQEBICS_LIBS@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATETIME = @DATETIME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_EXCLUDE_PATTERNS = @DOXYGEN_EXCLUDE_PATTERNS@ DOXYGEN_FILE_PATTERNS = @DOXYGEN_FILE_PATTERNS@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENGUI_GTK2_CFLAGS = @GWENGUI_GTK2_CFLAGS@ GWENGUI_GTK2_LIBS = @GWENGUI_GTK2_LIBS@ GWENHYWFAR_MINIMUM_VERSION = @GWENHYWFAR_MINIMUM_VERSION@ HAVE_GWENGUI_GTK2 = @HAVE_GWENGUI_GTK2@ HAVE_I18N = @HAVE_I18N@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIBXSLT_CFLAGS = @LIBXSLT_CFLAGS@ LIBXSLT_LIBS = @LIBXSLT_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_SUPPORTS_QT = @MSGFMT_SUPPORTS_QT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ TUTORIALS = @TUTORIALS@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XMLMERGE = @XMLMERGE@ XMLSEC_CFLAGS = @XMLSEC_CFLAGS@ XMLSEC_LIBS = @XMLSEC_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ aqbanking_backends = @aqbanking_backends@ aqbanking_cfg_searchdir = @aqbanking_cfg_searchdir@ aqbanking_data_searchdir = @aqbanking_data_searchdir@ aqbanking_headerdir = @aqbanking_headerdir@ aqbanking_headerdir_am = @aqbanking_headerdir_am@ aqbanking_includes = @aqbanking_includes@ aqbanking_internal_libs = @aqbanking_internal_libs@ aqbanking_ldflags = @aqbanking_ldflags@ aqbanking_libs = @aqbanking_libs@ aqbanking_locale_searchdir = @aqbanking_locale_searchdir@ aqbanking_modules = @aqbanking_modules@ aqbanking_pkgdatadir = @aqbanking_pkgdatadir@ aqbanking_plugin_searchdir = @aqbanking_plugin_searchdir@ aqbanking_plugindir = @aqbanking_plugindir@ aqbanking_plugins_backends_dirs = @aqbanking_plugins_backends_dirs@ aqbanking_plugins_backends_libs = @aqbanking_plugins_backends_libs@ aqbanking_plugins_bankinfo_dirs = @aqbanking_plugins_bankinfo_dirs@ aqbanking_plugins_bankinfo_libs = @aqbanking_plugins_bankinfo_libs@ aqbanking_plugins_imexporters_dirs = @aqbanking_plugins_imexporters_dirs@ aqbanking_plugins_imexporters_libs = @aqbanking_plugins_imexporters_libs@ aqbanking_plugins_parsers_dirs = @aqbanking_plugins_parsers_dirs@ aqbanking_symlinkdir = @aqbanking_symlinkdir@ aqbanking_sys_is_windows = @aqbanking_sys_is_windows@ aqbankingpp_modules = @aqbankingpp_modules@ aqebics_datadir = @aqebics_datadir@ aqebics_includes = @aqebics_includes@ aqebics_internal_libs = @aqebics_internal_libs@ aqebics_ldflags = @aqebics_ldflags@ aqebics_libs = @aqebics_libs@ aqfints_datadir = @aqfints_datadir@ aqhbci_datadir = @aqhbci_datadir@ aqhbci_includes = @aqhbci_includes@ aqhbci_internal_libs = @aqhbci_internal_libs@ aqhbci_ldflags = @aqhbci_ldflags@ aqhbci_libs = @aqhbci_libs@ aqofxconnect_includes = @aqofxconnect_includes@ aqofxconnect_internal_libs = @aqofxconnect_internal_libs@ aqofxconnect_libs = @aqofxconnect_libs@ aqpaypal_includes = @aqpaypal_includes@ aqpaypal_internal_libs = @aqpaypal_internal_libs@ aqpaypal_libs = @aqpaypal_libs@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gmp_libs = @gmp_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_dir = @gwenhywfar_dir@ gwenhywfar_has_crypt = @gwenhywfar_has_crypt@ gwenhywfar_headers = @gwenhywfar_headers@ gwenhywfar_includes = @gwenhywfar_includes@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_plugins = @gwenhywfar_plugins@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ typemaker2_exe = @typemaker2_exe@ visibility_cflags = @visibility_cflags@ with_aqebics = @with_aqebics@ with_aqhbci = @with_aqhbci@ SUBDIRS = $(aqbanking_plugins_backends_dirs) DIST_SUBDIRS = aqfints aqhbci aqofxconnect aqnone aqebics aqpaypal aqgivve noinst_LTLIBRARIES = libabbackends.la libabbackends_la_SOURCES = dummy.c libabbackends_la_LIBADD = @aqbanking_plugins_backends_libs@ all: all-recursive .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libs/plugins/backends/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libs/plugins/backends/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libabbackends.la: $(libabbackends_la_OBJECTS) $(libabbackends_la_DEPENDENCIES) $(EXTRA_libabbackends_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libabbackends_la_OBJECTS) $(libabbackends_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dummy.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(LTLIBRARIES) installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-recursive -rm -f ./$(DEPDIR)/dummy.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f ./$(DEPDIR)/dummy.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ am--depfiles check check-am clean clean-generic clean-libtool \ clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am .PRECIOUS: Makefile sources: for d in $(DIST_SUBDIRS); do \ $(MAKE) -C $$d sources; \ done built_sources: for d in $(DIST_SUBDIRS); do \ $(MAKE) -C $$d built_sources; \ done ; cppcheck: for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done typefiles: for d in $(SUBDIRS); do \ $(MAKE) -C $$d typefiles; \ done typedefs: for d in $(SUBDIRS); do \ $(MAKE) -C $$d typedefs; \ done # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: aqbanking-6.6.1/src/libs/plugins/backends/dummy.c0000664000175000017500000000000014043610745016646 00000000000000aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/0000755000175000017500000000000015037736163016675 500000000000000aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/aqhbci_l.h0000664000175000017500000000136714043610745020532 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Mon Mar 01 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AQHBCI_AQHBCI_L_H #define AQHBCI_AQHBCI_L_H #include #include #define I18N(msg) GWEN_I18N_Translate(PACKAGE, msg) #define I18N_NOOP(msg) msg #define I18S(msg) msg #endif /* AQHBCI_AQHBCI_L_H */ aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/ajobs/0000755000175000017500000000000015037736162017772 500000000000000aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/ajobs/jobsepadebitdatedsinglecreate_l.h0000664000175000017500000000127614043610745026423 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_JOBSEPADEBITDATEDSINGLECREATE_L_H #define AH_JOBSEPADEBITDATEDSINGLECREATE_L_H #include "accountjob_l.h" AH_JOB *AH_Job_SepaDebitDatedSingleCreate_new(AB_PROVIDER *pro, AB_USER *u, AB_ACCOUNT *account); #endif /* AH_JOBSEPADEBITDATEDSINGLECREATE_L_H */ aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/ajobs/jobsepaxfersingle.xml0000664000175000017500000000270314043610745024144 00000000000000 %code %version %code %version %code %version aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/ajobs/jobgetdepot.c0000664000175000017500000001357514044534775022404 00000000000000/*************************************************************************** begin : Sun Dec 27 2020 copyright : (C) 2020 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "jobgetdepot_l.h" #include "aqhbci_l.h" #include "accountjob_l.h" #include "aqhbci/joblayer/job_l.h" #include "aqhbci/joblayer/job_swift.h" #include "aqhbci/joblayer/job_crypt.h" #include "aqhbci/banking/user_l.h" #include #include #include #include #include #include #include /* ------------------------------------------------------------------------------------------------ * forward declarations * ------------------------------------------------------------------------------------------------ */ static int AH_Job_GetDepot_Process(AH_JOB *j, AB_IMEXPORTER_CONTEXT *ctx); static int AH_Job_GetDepot_GetLimits(AH_JOB *j, AB_TRANSACTION_LIMITS **pLimits); static GWEN_BUFFER *_sampleDepotInfo(AH_JOB *j, GWEN_DB_NODE *dbResponses); static int _readDepotInfo(AH_JOB *j, AB_IMEXPORTER_CONTEXT *ctx, const uint8_t *ptr, uint32_t len); /* ------------------------------------------------------------------------------------------------ * implementations * ------------------------------------------------------------------------------------------------ */ AH_JOB *AH_Job_GetDepot_new(AB_PROVIDER *pro, AB_USER *u, AB_ACCOUNT *account) { AH_JOB *j; DBG_INFO(AQHBCI_LOGDOMAIN, "Trying to create depot job"); j=AH_AccountJob_new("JobGetDepot", pro, u, account); if (!j) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Depot job not found"); return NULL; } AH_Job_SetSupportedCommand(j, AB_Transaction_CommandGetDepot); /* overwrite some virtual functions */ AH_Job_SetProcessFn(j, AH_Job_GetDepot_Process); AH_Job_SetGetLimitsFn(j, AH_Job_GetDepot_GetLimits); AH_Job_SetHandleResultsFn(j, AH_Job_HandleResults_Empty); return j; } int AH_Job_GetDepot_Process(AH_JOB *j, AB_IMEXPORTER_CONTEXT *ctx) { AB_ACCOUNT *a; GWEN_DB_NODE *dbResponses; GWEN_BUFFER *dataBuf; int rv; DBG_INFO(AQHBCI_LOGDOMAIN, "Processing JobGetTransactionsDepot"); assert(j); a=AH_AccountJob_GetAccount(j); assert(a); dbResponses=AH_Job_GetResponses(j); assert(dbResponses); dataBuf=_sampleDepotInfo(j, dbResponses); if (dataBuf==NULL) { AH_Job_SetStatus(j, AH_JobStatusError); return GWEN_ERROR_GENERIC; } rv=_readDepotInfo(j, ctx, (const uint8_t *) GWEN_Buffer_GetStart(dataBuf), GWEN_Buffer_GetUsedBytes(dataBuf)); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(dataBuf); AH_Job_SetStatus(j, AH_JobStatusError); return rv; } return 0; } GWEN_BUFFER *_sampleDepotInfo(AH_JOB *j, GWEN_DB_NODE *dbResponses) { GWEN_DB_NODE *dbCurr; GWEN_BUFFER *dataBuf; int loop; /* sample transactions */ dataBuf=GWEN_Buffer_new(0, 256, 0, 1); loop=1; dbCurr=GWEN_DB_GetFirstGroup(dbResponses); while (dbCurr) { int rv; GWEN_DB_NODE *dbXA; rv=AH_Job_CheckEncryption(j, dbCurr); if (rv) { DBG_INFO(AQHBCI_LOGDOMAIN, "Compromised security (encryption)"); GWEN_Buffer_free(dataBuf); return NULL; } rv=AH_Job_CheckSignature(j, dbCurr); if (rv) { DBG_INFO(AQHBCI_LOGDOMAIN, "Compromised security (signature)"); GWEN_Buffer_free(dataBuf); return NULL; } /* add transaction data from response to data buffer */ dbXA=GWEN_DB_GetGroup(dbCurr, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "data/depotResponse"); if (dbXA) { const void *p; unsigned int bs; /* get noted transactions */ p=GWEN_DB_GetBinValue(dbXA, "depotInfo", 0, 0, 0, &bs); if (p && bs) GWEN_Buffer_AppendBytes(dataBuf, p, bs); else { DBG_INFO(AQHBCI_LOGDOMAIN, "No depot info in response %d", loop); } } loop++; dbCurr=GWEN_DB_GetNextGroup(dbCurr); } if (GWEN_Buffer_GetUsedBytes(dataBuf)==0) { DBG_INFO(AQHBCI_LOGDOMAIN, "No depot info in buffer"); GWEN_Buffer_free(dataBuf); return NULL; } return dataBuf; } int _readDepotInfo(AH_JOB *j, AB_IMEXPORTER_CONTEXT *ctx, const uint8_t *ptr, uint32_t len) { AB_PROVIDER *pro; AB_IMEXPORTER_CONTEXT *tempContext; AB_SECURITY_LIST *tmpSecurityList; int rv; assert(j); pro=AH_Job_GetProvider(j); assert(pro); /* import data into a temporary context */ tempContext=AB_ImExporterContext_new(); rv=AB_Banking_ImportFromBufferLoadProfile(AB_Provider_GetBanking(pro), "swift", tempContext, "SWIFT-MT535", NULL, ptr, len); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); AB_ImExporterContext_free(tempContext); return rv; } /* copy data from temporary context to real context */ tmpSecurityList=AB_ImExporterContext_GetSecurityList(tempContext); if (tmpSecurityList) { AB_SECURITY *sec; while ((sec=AB_Security_List_First(tmpSecurityList))) { AB_Security_List_Del(sec); AB_ImExporterContext_AddSecurity(ctx, sec); } } AB_ImExporterContext_free(tempContext); return 0; } int AH_Job_GetDepot_GetLimits(AH_JOB *j, AB_TRANSACTION_LIMITS **pLimits) { AB_TRANSACTION_LIMITS *tl; tl=AB_TransactionLimits_new(); AB_TransactionLimits_SetCommand(tl, AH_Job_GetSupportedCommand(j)); /* nothing more to set for this kind of job */ *pLimits=tl; return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/ajobs/jobsepastandingordercreate.c0000664000175000017500000000331214300721174025437 00000000000000/*************************************************************************** begin : Wed Jan 15 2014 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "jobsepastandingordercreate_l.h" #include "jobtransferbase_l.h" #include "aqhbci/aqhbci_l.h" #include "accountjob_l.h" #include "aqhbci/joblayer/job_l.h" #include "aqhbci/banking/user_l.h" #include "aqhbci/banking/provider_l.h" #include "aqhbci/applayer/hhd_l.h" #include #include #include #include #include AH_JOB *AH_Job_SepaStandingOrderCreate_new(AB_PROVIDER *pro, AB_USER *u, AB_ACCOUNT *account) { AH_JOB *j; j=AH_Job_TransferBase_new("JobSepaStandingOrderCreate", AB_Transaction_TypeTransfer, AB_Transaction_SubTypeStandingOrder, pro, u, account); if (!j) return 0; AH_Job_SetChallengeClass(j, 35); AH_Job_SetSupportedCommand(j, AB_Transaction_CommandSepaCreateStandingOrder); /* overwrite some virtual functions */ AH_Job_SetPrepareFn(j, AH_Job_TransferBase_Prepare_SepaStandingOrder); AH_Job_SetAddChallengeParamsFn(j, AH_Job_TransferBase_AddChallengeParams35); AH_Job_SetGetLimitsFn(j, AH_Job_TransferBase_GetLimits_SepaStandingOrder); AH_Job_SetHandleCommandFn(j, AH_Job_TransferBase_HandleCommand_SepaStandingOrder); return j; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/ajobs/jobsepacor1datedmulticreate.c0000664000175000017500000001563414300721174025527 00000000000000/*************************************************************************** begin : Wed Jan 08 2014 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "jobsepacor1datedmulticreate_p.h" #include "jobtransferbase_l.h" #include "aqhbci/aqhbci_l.h" #include "accountjob_l.h" #include "aqhbci/joblayer/job_l.h" #include "aqhbci/banking/user_l.h" #include "aqhbci/banking/provider_l.h" #include "aqhbci/applayer/hhd_l.h" #include #include #include #include #include #include GWEN_INHERIT(AH_JOB, AH_JOB_CREATESEPAMULTICOR1); /* ------------------------------------------------------------------------------------------------ * forward declarations * ------------------------------------------------------------------------------------------------ */ static void GWENHYWFAR_CB _jobApi_FreeData(void *bp, void *p); static int _jobApi_AddChallengeParams(AH_JOB *j, int hkTanVer, GWEN_DB_NODE *dbMethod); static int _jobApi_Prepare(AH_JOB *j); /* ------------------------------------------------------------------------------------------------ * implementations * ------------------------------------------------------------------------------------------------ */ AH_JOB *AH_Job_SepaCor1DebitDatedMultiCreate_new(AB_PROVIDER *pro, AB_USER *u, AB_ACCOUNT *account) { AH_JOB *j; AH_JOB_CREATESEPAMULTICOR1 *aj; GWEN_DB_NODE *dbParams; GWEN_DB_NODE *dbArgs; const char *s; j=AH_Job_TransferBase_new("JobSepaCor1DebitDatedMultiCreate", AB_Transaction_TypeDebitNote, AB_Transaction_SubTypeStandard, pro, u, account); if (!j) return 0; AH_Job_SetChallengeClass(j, 32); AH_Job_SetSupportedCommand(j, AB_Transaction_CommandSepaFlashDebitNote); GWEN_NEW_OBJECT(AH_JOB_CREATESEPAMULTICOR1, aj); GWEN_INHERIT_SETDATA(AH_JOB, AH_JOB_CREATESEPAMULTICOR1, j, aj, _jobApi_FreeData); /* overwrite some virtual functions */ AH_Job_SetPrepareFn(j, _jobApi_Prepare); AH_Job_SetAddChallengeParamsFn(j, _jobApi_AddChallengeParams); AH_Job_SetGetLimitsFn(j, AH_Job_TransferBase_GetLimits_SepaDated); AH_Job_SetHandleCommandFn(j, AH_Job_TransferBase_HandleCommand_SepaDatedDebit); /* get params */ dbParams=AH_Job_GetParams(j); assert(dbParams); AH_Job_SetMaxTransfers(j, GWEN_DB_GetIntValue(dbParams, "maxTransfers", 0, 0)); s=GWEN_DB_GetCharValue(dbParams, "sumFieldNeeded", 0, "j"); if (s && toupper(*s)=='J') aj->sumFieldNeeded=1; else aj->sumFieldNeeded=0; s=GWEN_DB_GetCharValue(dbParams, "singleBookingAllowed", 0, "j"); if (s && toupper(*s)=='J') aj->singleBookingAllowed=1; else aj->singleBookingAllowed=0; /* set some known arguments */ dbArgs=AH_Job_GetArguments(j); assert(dbArgs); return j; } void GWENHYWFAR_CB _jobApi_FreeData(void *bp, void *p) { AH_JOB_CREATESEPAMULTICOR1 *aj; aj=(AH_JOB_CREATESEPAMULTICOR1 *)p; free(aj->fiid); AB_Value_free(aj->sumValues); GWEN_FREE_OBJECT(aj); } int _jobApi_AddChallengeParams(AH_JOB *j, int hkTanVer, GWEN_DB_NODE *dbMethod) { AH_JOB_CREATESEPAMULTICOR1 *aj; const AB_TRANSACTION *t; const char *s; int tanVer=AH_JOB_TANVER_1_4; DBG_ERROR(AQHBCI_LOGDOMAIN, "AddChallengeParams function called"); assert(j); aj=GWEN_INHERIT_GETDATA(AH_JOB, AH_JOB_CREATESEPAMULTICOR1, j); assert(aj); /* get data from first transaction */ t=AH_Job_GetFirstTransfer(j); if (t==NULL) { DBG_ERROR(AQHBCI_LOGDOMAIN, "No transaction"); return GWEN_ERROR_INVALID; } s=GWEN_DB_GetCharValue(dbMethod, "zkaTanVersion", 0, NULL); if (s && *s && strncasecmp(s, "1.3", 3)==0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "TAN version is 1.3 (%s)", s); tanVer=AH_JOB_TANVER_1_3; } if (tanVer==AH_JOB_TANVER_1_4) { int rv; DBG_ERROR(AQHBCI_LOGDOMAIN, "TAN version is 1.4.x"); rv=AH_HHD14_AddChallengeParams_32(j, AH_Job_GetTransferCount(j), aj->sumValues, AB_Transaction_GetLocalIban(t), AB_Transaction_GetDate(t)); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } } else { DBG_ERROR(AQHBCI_LOGDOMAIN, "Unhandled tan version %d for now", tanVer); return GWEN_ERROR_INTERNAL; } return 0; } int _jobApi_Prepare(AH_JOB *j) { AH_JOB_CREATESEPAMULTICOR1 *aj; GWEN_DB_NODE *dbArgs; int rv; AB_TRANSACTION *t; DBG_INFO(AQHBCI_LOGDOMAIN, "Preparing transfers"); assert(j); aj=GWEN_INHERIT_GETDATA(AH_JOB, AH_JOB_CREATESEPAMULTICOR1, j); assert(aj); dbArgs=AH_Job_GetArguments(j); /* calculate sum */ AB_Value_free(aj->sumValues); aj->sumValues=AB_Value_new(); AB_Value_SetCurrency(aj->sumValues, "EUR"); t=AH_Job_GetFirstTransfer(j); if (t==NULL) { DBG_ERROR(AQHBCI_LOGDOMAIN, "No transaction in job"); assert(t); /* debug */ return GWEN_ERROR_INTERNAL; } while (t) { const AB_VALUE *v; v=AB_Transaction_GetValue(t); if (v) AB_Value_AddValue(aj->sumValues, v); t=AB_Transaction_List_Next(t); } /* select pain profile from group "008" */ rv=AH_Job_TransferBase_SelectPainProfile(j, 8); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } /* set singleBookingWanted */ GWEN_DB_SetCharValue(dbArgs, GWEN_DB_FLAGS_OVERWRITE_VARS, "singleBookingWanted", (aj->singleBookingAllowed)?"J":"N"); /* adjust parameters for COR1 transactions */ AH_Job_TransferBase_SetLocalInstrumentationCode(j, "COR1"); /* export transfers to SEPA */ rv=AH_Job_TransferBase_SepaExportTransactions(j); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } /* store sum value */ if (aj->sumValues) { GWEN_DB_NODE *dbV; GWEN_BUFFER *nbuf; const char *s; dbV=GWEN_DB_GetGroup(dbArgs, GWEN_DB_FLAGS_OVERWRITE_GROUPS, "totalSum"); assert(dbV); nbuf=GWEN_Buffer_new(0, 32, 0, 1); AB_Value_toHbciString(aj->sumValues, nbuf); if (GWEN_Buffer_GetUsedBytes(nbuf)<1) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Error in conversion"); GWEN_Buffer_free(nbuf); return GWEN_ERROR_BAD_DATA; } /* store value */ GWEN_DB_SetCharValue(dbV, GWEN_DB_FLAGS_OVERWRITE_VARS, "value", GWEN_Buffer_GetStart(nbuf)); GWEN_Buffer_free(nbuf); /* store currency */ s=AB_Value_GetCurrency(aj->sumValues); if (!s) s="EUR"; GWEN_DB_SetCharValue(dbV, GWEN_DB_FLAGS_OVERWRITE_VARS, "currency", s); } return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/ajobs/jobsepastandingordermodify_l.h0000664000175000017500000000124714043610745026015 00000000000000/*************************************************************************** begin : Wed Jan 15 2014 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_JOBSEPASTANDINGORDERMODIFY_L_H #define AH_JOBSEPASTANDINGORDERMODIFY_L_H #include "accountjob_l.h" AH_JOB *AH_Job_SepaStandingOrderModify_new(AB_PROVIDER *pro, AB_USER *u, AB_ACCOUNT *account); #endif /* AH_JOBSEPASTANDINGORDERMODIFY_L_H */ aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/ajobs/jobsepainternalxfer.xml0000664000175000017500000000316214156464025024502 00000000000000 %code %version %code %version %code %version aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/ajobs/jobtransferbase.c0000664000175000017500000007400414546575647023254 00000000000000/*************************************************************************** begin : Tue Dec 31 2013 copyright : (C) 2022 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "jobtransferbase_p.h" #include "aqhbci/aqhbci_l.h" #include "aqhbci/joblayer/job_swift.h" #include "aqhbci/joblayer/job_crypt.h" #include "aqhbci/applayer/hhd_l.h" #include #include #include #include #include GWEN_INHERIT(AH_JOB, AH_JOB_TRANSFERBASE); /* ------------------------------------------------------------------------------------------------ * forward declarations * ------------------------------------------------------------------------------------------------ */ static void GWENHYWFAR_CB _freeData(void *bp, void *p); static int _process(AH_JOB *j, AB_IMEXPORTER_CONTEXT *ctx); static int _handleResults(AH_JOB *j, AB_IMEXPORTER_CONTEXT *ctx); /** * Set given status on all transfers and add copies of them to the given context. */ static void _setStatusOnTransfersAndAddToCtx(AH_JOB *j, AB_IMEXPORTER_CONTEXT *ctx, AB_TRANSACTION_STATUS status); static void _replaceCtrlCharsInPurpose(AB_TRANSACTION *t); static void _setProfileName(AH_JOB *j, const char *s); static void _setDescriptor(AH_JOB *j, const char *s); static void _setLimitsCycleMonth(AB_TRANSACTION_LIMITS *lim, GWEN_DB_NODE *dbParams); static void _setLimitsExecDaysOfMonth(AB_TRANSACTION_LIMITS *lim, GWEN_DB_NODE *dbParams); static void _setLimitsCycleWeek(AB_TRANSACTION_LIMITS *lim, GWEN_DB_NODE *dbParams); static void _setLimitsExecDaysOfWeek(AB_TRANSACTION_LIMITS *lim, GWEN_DB_NODE *dbParams); /* ------------------------------------------------------------------------------------------------ * implementations * ------------------------------------------------------------------------------------------------ */ AH_JOB *AH_Job_TransferBase_new(const char *jobName, AB_TRANSACTION_TYPE tt, AB_TRANSACTION_SUBTYPE tst, AB_PROVIDER *pro, AB_USER *u, AB_ACCOUNT *account) { AH_JOB *j; AH_JOB_TRANSFERBASE *aj; j=AH_AccountJob_new(jobName, pro, u, account); if (!j) return 0; GWEN_NEW_OBJECT(AH_JOB_TRANSFERBASE, aj); GWEN_INHERIT_SETDATA(AH_JOB, AH_JOB_TRANSFERBASE, j, aj, _freeData); aj->transactionType=tt; aj->transactionSubType=tst; /* overwrite some virtual functions */ AH_Job_SetProcessFn(j, _process); AH_Job_SetHandleResultsFn(j, _handleResults); return j; } void GWENHYWFAR_CB _freeData(void *bp, void *p) { AH_JOB_TRANSFERBASE *aj; aj=(AH_JOB_TRANSFERBASE *)p; free(aj->localInstrumentationCode); free(aj->profileName); free(aj->fiid); GWEN_FREE_OBJECT(aj); } const char *AH_Job_TransferBase_GetFiid(const AH_JOB *j) { AH_JOB_TRANSFERBASE *aj; assert(j); aj=GWEN_INHERIT_GETDATA(AH_JOB, AH_JOB_TRANSFERBASE, j); assert(aj); return aj->fiid; } int AH_Job_TransferBase_SepaExportTransactions(AH_JOB *j) { AH_JOB_TRANSFERBASE *aj; GWEN_DB_NODE *dbArgs; AB_BANKING *ab; const AB_TRANSACTION *t; int rv; AB_ACCOUNT *a; GWEN_DB_NODE *dbProfile; DBG_INFO(AQHBCI_LOGDOMAIN, "Exporting transaction"); assert(j); aj=GWEN_INHERIT_GETDATA(AH_JOB, AH_JOB_TRANSFERBASE, j); assert(aj); ab=AH_Job_GetBankingApi(j); assert(ab); dbArgs=AH_Job_GetArguments(j); assert(dbArgs); a=AH_AccountJob_GetAccount(j); assert(a); if (aj->profileName==NULL) { DBG_ERROR(AQHBCI_LOGDOMAIN, "No profile set. SNH!!"); return GWEN_ERROR_INTERNAL; } if (aj->descriptor==NULL) { DBG_ERROR(AQHBCI_LOGDOMAIN, "No descriptor set. SNH!!"); return GWEN_ERROR_INTERNAL; } DBG_INFO(AQHBCI_LOGDOMAIN, "Using SEPA descriptor %s and profile %s", aj->descriptor, aj->profileName); GWEN_Gui_ProgressLog2(0, GWEN_LoggerLevel_Notice, I18N("Using SEPA descriptor %s and profile %s"), aj->descriptor, aj->profileName); dbProfile=AB_Banking_GetImExporterProfile(ab, "xml", aj->profileName); if (dbProfile==NULL) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Profile \"%s\" not found.", aj->profileName); return GWEN_ERROR_INTERNAL; } if (aj->localInstrumentationCode) GWEN_DB_SetCharValue(dbProfile, GWEN_DB_FLAGS_OVERWRITE_VARS, "LocalInstrumentSEPACode", aj->localInstrumentationCode); /* set data in job */ t=AH_Job_GetFirstTransfer(j); if (t) { AB_IMEXPORTER_CONTEXT *ioc; AB_TRANSACTION *cpy; GWEN_BUFFER *dbuf; /* add copies of transfers */ ioc=AB_ImExporterContext_new(); while (t) { cpy=AB_Transaction_dup(t); _replaceCtrlCharsInPurpose(cpy); AB_Transaction_SetUniqueAccountId(cpy, AB_Account_GetUniqueId(a)); AB_ImExporterContext_AddTransaction(ioc, cpy); t=AB_Transaction_List_Next(t); } dbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=AB_Banking_ExportToBuffer(ab, "xml", ioc, dbuf, dbProfile); AB_ImExporterContext_free(ioc); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(dbuf); GWEN_DB_Group_free(dbProfile); return rv; } /* store descriptor */ GWEN_DB_SetCharValue(dbArgs, GWEN_DB_FLAGS_OVERWRITE_VARS, "descriptor", aj->descriptor); /* store transfer */ GWEN_DB_SetBinValue(dbArgs, GWEN_DB_FLAGS_OVERWRITE_VARS, "transfer", GWEN_Buffer_GetStart(dbuf), GWEN_Buffer_GetUsedBytes(dbuf)); GWEN_Buffer_free(dbuf); GWEN_DB_Group_free(dbProfile); } else { DBG_ERROR(AQHBCI_LOGDOMAIN, "No transaction in job"); GWEN_DB_Group_free(dbProfile); return GWEN_ERROR_INTERNAL; } return 0; } void _replaceCtrlCharsInPurpose(AB_TRANSACTION *trans) { const char *s; s=AB_Transaction_GetPurpose(trans); if (s && *s) { GWEN_BUFFER *buf; char *t; buf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(buf, s); t=GWEN_Buffer_GetStart(buf); while (*t) { if (iscntrl(*t)) *t=' '; t++; } AB_Transaction_SetPurpose(trans, GWEN_Buffer_GetStart(buf)); GWEN_Buffer_free(buf); } } int AH_Job_TransferBase_GetLimits_SepaUndated(AH_JOB *j, AB_TRANSACTION_LIMITS **pLimits) { AB_TRANSACTION_LIMITS *lim; DBG_INFO(AQHBCI_LOGDOMAIN, "Exchanging params"); /* set some default limits */ lim=AB_TransactionLimits_new(); AB_TransactionLimits_SetCommand(lim, AH_Job_GetSupportedCommand(j)); AB_TransactionLimits_SetMaxLenPurpose(lim, 35); AB_TransactionLimits_SetMaxLinesPurpose(lim, 4); AB_TransactionLimits_SetMaxLenRemoteName(lim, 70); AB_TransactionLimits_SetNeedDate(lim, -1); *pLimits=lim; return 0; } int AH_Job_TransferBase_GetLimits_SepaDated(AH_JOB *j, AB_TRANSACTION_LIMITS **pLimits) { AB_TRANSACTION_LIMITS *lim; GWEN_DB_NODE *dbParams; int i, i1, i2; dbParams=AH_Job_GetParams(j); lim=AB_TransactionLimits_new(); AB_TransactionLimits_SetCommand(lim, AH_Job_GetSupportedCommand(j)); AB_TransactionLimits_SetMaxLenPurpose(lim, 35); AB_TransactionLimits_SetMaxLinesPurpose(lim, 4); AB_TransactionLimits_SetMaxLenRemoteName(lim, 70); AB_TransactionLimits_SetNeedDate(lim, 1); /* set info from BPD */ i1=GWEN_DB_GetIntValue(dbParams, "minDelay_FNAL_RCUR", 0, 0); AB_TransactionLimits_SetMinValueSetupTimeRecurring(lim, i1); AB_TransactionLimits_SetMinValueSetupTimeFinal(lim, i1); i2=GWEN_DB_GetIntValue(dbParams, "minDelay_FRST_OOFF", 0, 0); AB_TransactionLimits_SetMinValueSetupTimeFirst(lim, i2); AB_TransactionLimits_SetMinValueSetupTimeOnce(lim, i2); /* combine into minimum values for older apps */ i=(i1>i2)?i1:i2; AB_TransactionLimits_SetMinValueSetupTime(lim, i); i1=GWEN_DB_GetIntValue(dbParams, "maxDelay_FNAL_RCUR", 0, 0); AB_TransactionLimits_SetMaxValueSetupTimeRecurring(lim, i1); AB_TransactionLimits_SetMinValueSetupTimeFinal(lim, i1); i2=GWEN_DB_GetIntValue(dbParams, "maxDelay_FRST_OOFF", 0, 0); AB_TransactionLimits_SetMaxValueSetupTimeFirst(lim, i2); AB_TransactionLimits_SetMaxValueSetupTimeOnce(lim, i2); /* combine into minimum values for older apps */ i=(i1=GWEN_LoggerLevel_Debug) GWEN_DB_Dump(dbParams, 2); /* set some default limits */ lim=AB_TransactionLimits_new(); AB_TransactionLimits_SetCommand(lim, AH_Job_GetSupportedCommand(j)); if (AH_Job_GetSupportedCommand(j)!=AB_Transaction_CommandSepaDeleteStandingOrder) { AB_TransactionLimits_SetMaxLenPurpose(lim, 35); AB_TransactionLimits_SetMaxLinesPurpose(lim, 4); AB_TransactionLimits_SetMaxLenRemoteName(lim, 70); /* get specific limits for creation of standing orders */ _setLimitsCycleMonth(lim, dbParams); _setLimitsExecDaysOfMonth(lim, dbParams); _setLimitsCycleWeek(lim, dbParams); _setLimitsExecDaysOfWeek(lim, dbParams); } i=GWEN_DB_GetIntValue(dbParams, "mindelay", 0, 0); AB_TransactionLimits_SetMinValueSetupTime(lim, i); i=GWEN_DB_GetIntValue(dbParams, "maxdelay", 0, 0); AB_TransactionLimits_SetMaxValueSetupTime(lim, i); /* nothing more to set for this kind of job */ *pLimits=lim; return 0; } int AH_Job_TransferBase_HandleCommand_SepaUndated(AH_JOB *j, const AB_TRANSACTION *t) { AB_TRANSACTION_LIMITS *lim=NULL; AB_BANKING *ab; AB_TRANSACTION *tCopy=NULL; int rv; AB_USER *u; uint32_t uflags; DBG_INFO(AQHBCI_LOGDOMAIN, "Handling command"); ab=AH_Job_GetBankingApi(j); assert(ab); u=AH_Job_GetUser(j); assert(u); uflags=AH_User_GetFlags(u); /* get limits and transaction */ if (t==NULL) { DBG_ERROR(AQHBCI_LOGDOMAIN, "No transaction in job"); return GWEN_ERROR_INVALID; } rv=AH_Job_GetLimits(j, &lim); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } /* validate transaction */ rv=AB_Banking_CheckTransactionForSepaConformity(t, (uflags & AH_USER_FLAGS_USE_STRICT_SEPA_CHARSET)?1:0); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); AB_TransactionLimits_free(lim); return rv; } rv=AB_Banking_CheckTransactionAgainstLimits_Purpose(t, lim); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); AB_TransactionLimits_free(lim); return rv; } rv=AB_Banking_CheckTransactionAgainstLimits_Names(t, lim); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); AB_TransactionLimits_free(lim); return rv; } AB_TransactionLimits_free(lim); tCopy=AB_Transaction_dup(t); /* set group id so the application can know which transfers went together in one setting */ AB_Transaction_SetGroupId(tCopy, AH_Job_GetId(j)); /* store copy of transaction for later */ AH_Job_AddTransfer(j, tCopy); return 0; } int AH_Job_TransferBase_HandleCommand_SepaDated(AH_JOB *j, const AB_TRANSACTION *t) { AB_TRANSACTION_LIMITS *lim=NULL; AB_BANKING *ab; AB_TRANSACTION *tCopy=NULL; int rv; AB_USER *u; uint32_t uflags; DBG_INFO(AQHBCI_LOGDOMAIN, "Handling command"); ab=AH_Job_GetBankingApi(j); assert(ab); u=AH_Job_GetUser(j); assert(u); uflags=AH_User_GetFlags(u); /* get limits and transaction */ if (t==NULL) { DBG_ERROR(AQHBCI_LOGDOMAIN, "No transaction in job"); return GWEN_ERROR_INVALID; } rv=AH_Job_GetLimits(j, &lim); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } /* validate transaction */ rv=AB_Banking_CheckTransactionForSepaConformity(t, (uflags & AH_USER_FLAGS_USE_STRICT_SEPA_CHARSET)?1:0); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); AB_TransactionLimits_free(lim); return rv; } rv=AB_Banking_CheckTransactionAgainstLimits_Purpose(t, lim); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); AB_TransactionLimits_free(lim); return rv; } rv=AB_Banking_CheckTransactionAgainstLimits_Names(t, lim); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); AB_TransactionLimits_free(lim); return rv; } rv=AB_Banking_CheckTransactionAgainstLimits_Date(t, lim); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); AB_TransactionLimits_free(lim); return rv; } AB_TransactionLimits_free(lim); tCopy=AB_Transaction_dup(t); /* set group id so the application can know which transfers went together in one setting */ AB_Transaction_SetGroupId(tCopy, AH_Job_GetId(j)); /* store copy of transaction for later */ AH_Job_AddTransfer(j, tCopy); return 0; } int AH_Job_TransferBase_HandleCommand_SepaDatedDebit(AH_JOB *j, const AB_TRANSACTION *t) { AB_TRANSACTION_LIMITS *lim=NULL; AB_BANKING *ab; AB_TRANSACTION *tCopy=NULL; int rv; AB_USER *u; uint32_t uflags; DBG_INFO(AQHBCI_LOGDOMAIN, "Handling command"); ab=AH_Job_GetBankingApi(j); assert(ab); u=AH_Job_GetUser(j); assert(u); uflags=AH_User_GetFlags(u); /* get limits and transaction */ if (t==NULL) { DBG_ERROR(AQHBCI_LOGDOMAIN, "No transaction in job"); return GWEN_ERROR_INVALID; } rv=AH_Job_GetLimits(j, &lim); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } /* validate transaction */ rv=AB_Banking_CheckTransactionForSepaConformity(t, (uflags & AH_USER_FLAGS_USE_STRICT_SEPA_CHARSET)?1:0); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); AB_TransactionLimits_free(lim); return rv; } rv=AB_Banking_CheckTransactionAgainstLimits_Purpose(t, lim); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); AB_TransactionLimits_free(lim); return rv; } rv=AB_Banking_CheckTransactionAgainstLimits_Names(t, lim); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); AB_TransactionLimits_free(lim); return rv; } rv=AB_Banking_CheckTransactionAgainstLimits_Date(t, lim); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); AB_TransactionLimits_free(lim); return rv; } AB_TransactionLimits_free(lim); tCopy=AB_Transaction_dup(t); /* set group id so the application can know which transfers went together in one setting */ AB_Transaction_SetGroupId(tCopy, AH_Job_GetId(j)); /* store copy of transaction for later */ AH_Job_AddTransfer(j, tCopy); return 0; } int AH_Job_TransferBase_HandleCommand_SepaStandingOrder(AH_JOB *j, const AB_TRANSACTION *t) { AB_TRANSACTION_LIMITS *lim=NULL; AB_BANKING *ab; AB_TRANSACTION *tCopy=NULL; int rv; AB_USER *u; uint32_t uflags; const char *s; DBG_INFO(AQHBCI_LOGDOMAIN, "Handling command"); ab=AH_Job_GetBankingApi(j); assert(ab); u=AH_Job_GetUser(j); assert(u); uflags=AH_User_GetFlags(u); /* get limits and transaction */ if (t==NULL) { DBG_ERROR(AQHBCI_LOGDOMAIN, "No transaction in job"); return GWEN_ERROR_INVALID; } rv=AH_Job_GetLimits(j, &lim); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } /* validate transaction */ rv=AB_Banking_CheckTransactionForSepaConformity(t, (uflags & AH_USER_FLAGS_USE_STRICT_SEPA_CHARSET)?1:0); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); AB_TransactionLimits_free(lim); return rv; } rv=AB_Banking_CheckTransactionAgainstLimits_Purpose(t, lim); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); AB_TransactionLimits_free(lim); return rv; } rv=AB_Banking_CheckTransactionAgainstLimits_Names(t, lim); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); AB_TransactionLimits_free(lim); return rv; } rv=AB_Banking_CheckTransactionAgainstLimits_Recurrence(t, lim); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } /* CheckFirstExecutionDateAgainstLimits for standingordercreate only */ s=AB_Transaction_GetFiId(t); if (s) { DBG_INFO(AQHBCI_LOGDOMAIN, "Check FirstExecutionDate for delete or modify DISABLED"); } else { rv=AB_Banking_CheckTransactionAgainstLimits_ExecutionDate(t, lim); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } } AB_TransactionLimits_free(lim); tCopy=AB_Transaction_dup(t); /* set group id so the application can know which transfers went together in one setting */ AB_Transaction_SetGroupId(tCopy, AH_Job_GetId(j)); /* store copy of transaction for later */ AH_Job_AddTransfer(j, tCopy); return 0; } int AH_Job_TransferBase_Prepare_SepaStandingOrder(AH_JOB *j) { GWEN_DB_NODE *dbArgs; int rv; const GWEN_DATE *da; GWEN_BUFFER *tbuf; const char *s; AB_TRANSACTION *t; DBG_INFO(AQHBCI_LOGDOMAIN, "Preparing transfer"); dbArgs=AH_Job_GetArguments(j); t=AH_Job_GetFirstTransfer(j); if (t==NULL) { DBG_ERROR(AQHBCI_LOGDOMAIN, "No transaction in job"); assert(t); /* debug */ return GWEN_ERROR_INTERNAL; } /* select pain profile from group "001" */ rv=AH_Job_TransferBase_SelectPainProfile(j, 1); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } /* export transfers to SEPA */ rv=AH_Job_TransferBase_SepaExportTransactions(j); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } /* execution date */ tbuf=GWEN_Buffer_new(0, 16, 0, 1); da=AB_Transaction_GetDate(t); if (da) { GWEN_Date_toStringWithTemplate(da, "YYYYMMDD", tbuf); GWEN_DB_SetCharValue(dbArgs, GWEN_DB_FLAGS_OVERWRITE_VARS, "xnextExecutionDate", GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_Reset(tbuf); } else { DBG_ERROR(AQHBCI_LOGDOMAIN, "Missing execution date."); } /* first execution date */ da=AB_Transaction_GetFirstDate(t); if (da) { GWEN_Date_toStringWithTemplate(da, "YYYYMMDD", tbuf); GWEN_DB_SetCharValue(dbArgs, GWEN_DB_FLAGS_OVERWRITE_VARS, "details/xfirstExecutionDate", GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_Reset(tbuf); } else { DBG_ERROR(AQHBCI_LOGDOMAIN, "Missing first execution date."); } /* last execution date */ da=AB_Transaction_GetLastDate(t); if (da) { GWEN_Date_toStringWithTemplate(da, "YYYYMMDD", tbuf); GWEN_DB_SetCharValue(dbArgs, GWEN_DB_FLAGS_OVERWRITE_VARS, "details/xlastExecutionDate", GWEN_Buffer_GetStart(tbuf)); } else { DBG_ERROR(AQHBCI_LOGDOMAIN, "Missing last execution date."); } GWEN_Buffer_free(tbuf); /* period */ switch (AB_Transaction_GetPeriod(t)) { case AB_Transaction_PeriodMonthly: s="M"; break; case AB_Transaction_PeriodWeekly: s="W"; break; default: DBG_ERROR(AQHBCI_LOGDOMAIN, "Unsupported period %d", AB_Transaction_GetPeriod(t)); return GWEN_ERROR_INVALID; } GWEN_DB_SetCharValue(dbArgs, GWEN_DB_FLAGS_OVERWRITE_VARS, "details/xperiod", s); /* cycle */ GWEN_DB_SetIntValue(dbArgs, GWEN_DB_FLAGS_OVERWRITE_VARS, "details/cycle", AB_Transaction_GetCycle(t)); /* execution day */ GWEN_DB_SetIntValue(dbArgs, GWEN_DB_FLAGS_OVERWRITE_VARS, "details/executionDay", AB_Transaction_GetExecutionDay(t)); /* SET fiId, if present */ s=AB_Transaction_GetFiId(t); if (s) { GWEN_DB_SetCharValue(dbArgs, GWEN_DB_FLAGS_OVERWRITE_VARS, "fiId", AB_Transaction_GetFiId(t)); } return 0; } int AH_Job_TransferBase_AddChallengeParams29(AH_JOB *j, int hkTanVer, GWEN_DB_NODE *dbMethod) { const AB_TRANSACTION *t; const char *s; int tanVer=AH_JOB_TANVER_1_4; DBG_ERROR(AQHBCI_LOGDOMAIN, "AddChallengeParams function called"); t=AH_Job_GetFirstTransfer(j); if (t==NULL) { DBG_ERROR(AQHBCI_LOGDOMAIN, "No validated transaction"); return GWEN_ERROR_INVALID; } s=GWEN_DB_GetCharValue(dbMethod, "zkaTanVersion", 0, NULL); if (s && *s && strncasecmp(s, "1.3", 3)==0) { DBG_INFO(AQHBCI_LOGDOMAIN, "TAN version is 1.3 (%s)", s); tanVer=AH_JOB_TANVER_1_3; } if (tanVer==AH_JOB_TANVER_1_4) { int rv; DBG_INFO(AQHBCI_LOGDOMAIN, "TAN version is 1.4.x"); rv=AH_HHD14_AddChallengeParams_29(j, AB_Transaction_GetValue(t), AB_Transaction_GetRemoteIban(t), AB_Transaction_GetDate(t)); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } } else { DBG_ERROR(AQHBCI_LOGDOMAIN, "Unhandled tan version %d for now", tanVer); return GWEN_ERROR_INTERNAL; } return 0; } int AH_Job_TransferBase_AddChallengeParams35(AH_JOB *j, int hkTanVer, GWEN_DB_NODE *dbMethod) { const AB_TRANSACTION *t; const char *s; int tanVer=AH_JOB_TANVER_1_4; t=AH_Job_GetFirstTransfer(j); if (t==NULL) { DBG_ERROR(AQHBCI_LOGDOMAIN, "No validated transaction"); return GWEN_ERROR_INVALID; } s=GWEN_DB_GetCharValue(dbMethod, "zkaTanVersion", 0, NULL); if (s && *s && strncasecmp(s, "1.3", 3)==0) { DBG_INFO(AQHBCI_LOGDOMAIN, "TAN version is 1.3 (%s)", s); tanVer=AH_JOB_TANVER_1_3; } if (tanVer==AH_JOB_TANVER_1_4) { int rv; DBG_INFO(AQHBCI_LOGDOMAIN, "TAN version is 1.4.x"); rv=AH_HHD14_AddChallengeParams_35(j, AB_Transaction_GetValue(t), AB_Transaction_GetRemoteIban(t)); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } } else { DBG_ERROR(AQHBCI_LOGDOMAIN, "Unhandled tan version %d for now", tanVer); return GWEN_ERROR_INTERNAL; } return 0; } void _setStatusOnTransfersAndAddToCtx(AH_JOB *j, AB_IMEXPORTER_CONTEXT *ctx, AB_TRANSACTION_STATUS status) { AH_JOB_TRANSFERBASE *aj; const AB_TRANSACTION *t; AB_ACCOUNT *a; assert(j); aj=GWEN_INHERIT_GETDATA(AH_JOB, AH_JOB_TRANSFERBASE, j); assert(aj); a=AH_AccountJob_GetAccount(j); assert(a); t=AH_Job_GetFirstTransfer(j); while (t) { AB_TRANSACTION *cpy; cpy=AB_Transaction_dup(t); AB_Transaction_SetFiId(cpy, aj->fiid); AB_Transaction_SetStatus(cpy, status); AB_Transaction_SetType(cpy, aj->transactionType); AB_Transaction_SetSubType(cpy, aj->transactionSubType); if (AB_Transaction_GetDate(cpy)==NULL) { GWEN_DATE *dt; dt=GWEN_Date_CurrentDate(); AB_Transaction_SetDate(cpy, dt); GWEN_Date_free(dt); } AB_Transaction_SetUniqueAccountId(cpy, AB_Account_GetUniqueId(a)); AB_ImExporterContext_AddTransaction(ctx, cpy); /* takes over cpy */ t=AB_Transaction_List_Next(t); } } int _handleResults(AH_JOB *j, AB_IMEXPORTER_CONTEXT *ctx) { AH_JOB_TRANSFERBASE *aj; AH_RESULT_LIST *rl; AH_RESULT *r; AB_TRANSACTION_STATUS tStatus; assert(j); aj=GWEN_INHERIT_GETDATA(AH_JOB, AH_JOB_TRANSFERBASE, j); assert(aj); rl=AH_Job_GetSegResults(j); assert(rl); r=AH_Result_List_First(rl); if (!r) { DBG_ERROR(AQHBCI_LOGDOMAIN, "No segment results"); tStatus=AB_Transaction_StatusError; } else { int has10=0; int has20=0; while (r) { int rcode; rcode=AH_Result_GetCode(r); if (rcode>=10 && rcode<=19) { DBG_INFO(AQBANKING_LOGDOMAIN, "Has10: %d (%s)", rcode, AH_Result_GetText(r)); has10=1; } else if (rcode>=20 && rcode <=29) { DBG_INFO(AQBANKING_LOGDOMAIN, "Has20: %d (%s)", rcode, AH_Result_GetText(r)); has20=1; } r=AH_Result_List_Next(r); } if (has20) tStatus=AB_Transaction_StatusAccepted; else if (has10) tStatus=AB_Transaction_StatusPending; else tStatus=AB_Transaction_StatusRejected; } _setStatusOnTransfersAndAddToCtx(j, ctx, tStatus); AH_Job_SetStatusOnCommands(j, tStatus); return 0; } int _process(AH_JOB *j, AB_IMEXPORTER_CONTEXT *ctx) { AH_JOB_TRANSFERBASE *aj; GWEN_DB_NODE *dbResponses; GWEN_DB_NODE *dbCurr; const char *responseName; assert(j); aj=GWEN_INHERIT_GETDATA(AH_JOB, AH_JOB_TRANSFERBASE, j); assert(aj); DBG_INFO(AQHBCI_LOGDOMAIN, "Processing"); responseName=AH_Job_GetResponseName(j); dbResponses=AH_Job_GetResponses(j); assert(dbResponses); /* search for "TransferBaseSingleResponse" */ dbCurr=GWEN_DB_GetFirstGroup(dbResponses); while (dbCurr) { int rv; rv=AH_Job_CheckEncryption(j, dbCurr); if (rv) { DBG_INFO(AQHBCI_LOGDOMAIN, "Compromised security (encryption)"); AH_Job_SetStatus(j, AH_JobStatusError); return rv; } rv=AH_Job_CheckSignature(j, dbCurr); if (rv) { DBG_INFO(AQHBCI_LOGDOMAIN, "Compromised security (signature)"); AH_Job_SetStatus(j, AH_JobStatusError); return rv; } if (responseName && *responseName) { GWEN_DB_NODE *dbXA; dbXA=GWEN_DB_GetGroup(dbCurr, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "data"); if (dbXA) dbXA=GWEN_DB_GetGroup(dbXA, GWEN_PATH_FLAGS_NAMEMUSTEXIST, responseName); if (dbXA) { const char *s; s=GWEN_DB_GetCharValue(dbXA, "referenceId", 0, 0); if (s) { free(aj->fiid); aj->fiid=strdup(s); } } } dbCurr=GWEN_DB_GetNextGroup(dbCurr); } return 0; } int AH_Job_TransferBase_SelectPainProfile(AH_JOB *j, int version1) { GWEN_DB_NODE *dbArgs; AB_SWIFT_DESCR_LIST *descrList; /* get arguments DB */ dbArgs=AH_Job_GetArguments(j); assert(dbArgs); /* check for "pain.VERSION1.*" */ descrList=AH_Job_GetSwiftDescriptorsSupportedByUser(j, "pain", version1); if (descrList) { AB_SWIFT_DESCR *descr; const char *s; descr=AB_SwiftDescr_List_First(descrList); assert(descr); s=AB_SwiftDescr_GetAlias2(descr); DBG_INFO(AQHBCI_LOGDOMAIN, "Selecting PAIN format [%s]", s); _setDescriptor(j, s); _setProfileName(j, AB_SwiftDescr_GetAlias1(descr)); AB_SwiftDescr_List_free(descrList); } else { DBG_ERROR(AQHBCI_LOGDOMAIN, "No supported PAIN profile found, job not supported"); return GWEN_ERROR_GENERIC; } return 0; } void AH_Job_TransferBase_SetLocalInstrumentationCode(AH_JOB *j, const char *s) { AH_JOB_TRANSFERBASE *aj; assert(j); aj=GWEN_INHERIT_GETDATA(AH_JOB, AH_JOB_TRANSFERBASE, j); assert(aj); if (aj->localInstrumentationCode) free(aj->localInstrumentationCode); if (s) aj->localInstrumentationCode=strdup(s); else aj->localInstrumentationCode=NULL; } void _setProfileName(AH_JOB *j, const char *s) { AH_JOB_TRANSFERBASE *aj; assert(j); aj=GWEN_INHERIT_GETDATA(AH_JOB, AH_JOB_TRANSFERBASE, j); assert(aj); if (aj->profileName) free(aj->profileName); if (s) aj->profileName=strdup(s); else aj->profileName=NULL; } void _setDescriptor(AH_JOB *j, const char *s) { AH_JOB_TRANSFERBASE *aj; assert(j); aj=GWEN_INHERIT_GETDATA(AH_JOB, AH_JOB_TRANSFERBASE, j); assert(aj); if (aj->descriptor) free(aj->descriptor); if (s) aj->descriptor=strdup(s); else aj->descriptor=NULL; } void _setLimitsCycleMonth(AB_TRANSACTION_LIMITS *lim, GWEN_DB_NODE *dbParams) { const char *s; AB_TransactionLimits_PresetValuesCycleMonth(lim, 0); AB_TransactionLimits_SetValuesCycleMonthUsed(lim, 0); s=GWEN_DB_GetCharValue(dbParams, "AllowedTurnusMonths", 0, 0); if (s && *s) { AB_TransactionLimits_SetAllowMonthly(lim, 1); while (*s) { /* read 2-digit number */ if (isdigit(*s) && isdigit(s[1])) AB_TransactionLimits_ValuesCycleMonthAdd(lim, ((int)((s[0]-'0')*10))+((int)(s[1]-'0'))); else { DBG_ERROR(AQHBCI_LOGDOMAIN, "Invalid number in params [%s]", s); } s+=2; } /* while */ } else AB_TransactionLimits_SetAllowMonthly(lim, -1); } void _setLimitsExecDaysOfMonth(AB_TRANSACTION_LIMITS *lim, GWEN_DB_NODE *dbParams) { const char *s; AB_TransactionLimits_PresetValuesExecutionDayMonth(lim, 0); AB_TransactionLimits_SetValuesExecutionDayMonthUsed(lim, 0); s=GWEN_DB_GetCharValue(dbParams, "AllowedMonthDays", 0, 0); if (s && *s) { while (*s) { /* read 2-digit number */ if (isdigit(*s) && isdigit(s[1])) AB_TransactionLimits_ValuesExecutionDayMonthAdd(lim, ((int)((s[0]-'0')*10))+((int)(s[1]-'0'))); else { DBG_ERROR(AQHBCI_LOGDOMAIN, "Invalid number in params [%s]", s); } s+=2; } /* while */ } } void _setLimitsCycleWeek(AB_TRANSACTION_LIMITS *lim, GWEN_DB_NODE *dbParams) { const char *s; AB_TransactionLimits_PresetValuesCycleWeek(lim, 0); AB_TransactionLimits_SetValuesCycleWeekUsed(lim, 0); s=GWEN_DB_GetCharValue(dbParams, "AllowedTurnusWeeks", 0, 0); if (s && *s) { AB_TransactionLimits_SetAllowWeekly(lim, 1); while (*s) { /* read 2-digit number */ if (isdigit(*s) && isdigit(s[1])) AB_TransactionLimits_ValuesCycleWeekAdd(lim, ((int)((s[0]-'0')*10))+((int)(s[1]-'0'))); else { DBG_ERROR(AQHBCI_LOGDOMAIN, "Invalid number in params [%s]", s); } s+=2; } /* while */ } else AB_TransactionLimits_SetAllowWeekly(lim, -1); } void _setLimitsExecDaysOfWeek(AB_TRANSACTION_LIMITS *lim, GWEN_DB_NODE *dbParams) { const char *s; AB_TransactionLimits_PresetValuesExecutionDayWeek(lim, 0); AB_TransactionLimits_SetValuesExecutionDayWeekUsed(lim, 0); s=GWEN_DB_GetCharValue(dbParams, "AllowedWeekDays", 0, 0); if (s && *s) { while (*s) { if (isdigit(*s)) AB_TransactionLimits_ValuesExecutionDayWeekAdd(lim, (int)((*s)-'0')); /* 1-digit number */ else { DBG_ERROR(AQHBCI_LOGDOMAIN, "Invalid number in params [%s]", s); } s++; } } else { AB_TransactionLimits_SetAllowWeekly(lim, -1); } } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/ajobs/jobforeignxferwh.c0000664000175000017500000000627214043610745023431 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "jobforeignxferwh_p.h" #include "aqhbci_l.h" #include "accountjob_l.h" #include "aqhbci/banking/account.h" #include #include #include #include #include #include GWEN_INHERIT(AH_JOB, AH_JOB_FOREIGNXFERWH); /* --------------------------------------------------------------- FUNCTION */ AH_JOB *AH_Job_ForeignTransferWH_new(AB_PROVIDER *pro, AB_USER *u, AB_ACCOUNT *account) { AH_JOB *j; AH_JOB_FOREIGNXFERWH *aj; GWEN_DB_NODE *dbArgs; GWEN_DB_NODE *dbParams; j=AH_AccountJob_new("JobForeignTransferWH", pro, u, account); if (!j) return 0; AH_Job_SetChallengeClass(j, 60); AH_Job_SetSupportedCommand(j, AB_Transaction_CommandNone); GWEN_NEW_OBJECT(AH_JOB_FOREIGNXFERWH, aj); GWEN_INHERIT_SETDATA(AH_JOB, AH_JOB_FOREIGNXFERWH, j, aj, AH_Job_ForeignTransferWH_FreeData); /* overwrite some virtual functions */ AH_Job_SetProcessFn(j, AH_Job_ForeignTransferWH_Process); /* set some known arguments */ dbArgs=AH_Job_GetArguments(j); assert(dbArgs); GWEN_DB_SetCharValue(dbArgs, GWEN_DB_FLAGS_OVERWRITE_VARS, "bankCode", AB_Account_GetBankCode(account)); GWEN_DB_SetCharValue(dbArgs, GWEN_DB_FLAGS_OVERWRITE_VARS, "accountId", AB_Account_GetAccountNumber(account)); dbParams=AH_Job_GetParams(j); aj->maxTransfers=GWEN_DB_GetIntValue(dbParams, "maxTransfers", 0, 0); if (aj->maxTransfers==0 || aj->maxTransfers>AH_JOBFOREIGNXFERWH_MAXTRANS) aj->maxTransfers=AH_JOBFOREIGNXFERWH_MAXTRANS; return j; } /* --------------------------------------------------------------- FUNCTION */ void GWENHYWFAR_CB AH_Job_ForeignTransferWH_FreeData(void *bp, void *p) { AH_JOB_FOREIGNXFERWH *aj; aj=(AH_JOB_FOREIGNXFERWH *)p; GWEN_FREE_OBJECT(aj); } /* --------------------------------------------------------------- FUNCTION */ int AH_Job_ForeignTransferWH_Process(AH_JOB *j, AB_IMEXPORTER_CONTEXT *ctx) { AH_JOB_FOREIGNXFERWH *aj; assert(j); aj=GWEN_INHERIT_GETDATA(AH_JOB, AH_JOB_FOREIGNXFERWH, j); assert(aj); DBG_INFO(AQHBCI_LOGDOMAIN, "Processing JobForeignTransferWH"); return 0; } /* --------------------------------------------------------------- FUNCTION */ int AH_Job_ForeignTransferWH_SetDtazv(AH_JOB *j, const uint8_t *dataPtr, uint32_t dataLen) { GWEN_DB_NODE *dbArgs; dbArgs=AH_Job_GetArguments(j); assert(dbArgs); GWEN_DB_SetBinValue(dbArgs, GWEN_DB_FLAGS_OVERWRITE_VARS, "transfers", dataPtr, dataLen); return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/ajobs/Makefile.in0000644000175000017500000007503215037736025021764 00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/libs/plugins/backends/aqhbci/ajobs ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/distri.m4 $(top_srcdir)/m4/gwenhywfar.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/os.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libhbciaccjobs_la_LIBADD = am_libhbciaccjobs_la_OBJECTS = accountjob.lo jobgetbalance.lo \ jobgettransactions.lo jobgettrans_camt.lo jobforeignxferwh.lo \ jobloadcellphone.lo jobsepadebitdatedsinglecreate.lo \ jobsepadebitdatedmulticreate.lo jobsepacor1datedmulticreate.lo \ jobsepaxfermulti.lo jobsepaxfersingle.lo jobsepadebitsingle.lo \ jobsepacor1datedsinglecreate.lo jobtransferbase.lo \ jobsepastandingordercreate.lo jobsepastandingorderget.lo \ jobsepastandingordermodify.lo jobsepastandingorderdelete.lo \ jobgetestatements.lo jobgetdepot.lo jobsepainternalxfer.lo libhbciaccjobs_la_OBJECTS = $(am_libhbciaccjobs_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/accountjob.Plo \ ./$(DEPDIR)/jobforeignxferwh.Plo ./$(DEPDIR)/jobgetbalance.Plo \ ./$(DEPDIR)/jobgetdepot.Plo ./$(DEPDIR)/jobgetestatements.Plo \ ./$(DEPDIR)/jobgettrans_camt.Plo \ ./$(DEPDIR)/jobgettransactions.Plo \ ./$(DEPDIR)/jobloadcellphone.Plo \ ./$(DEPDIR)/jobsepacor1datedmulticreate.Plo \ ./$(DEPDIR)/jobsepacor1datedsinglecreate.Plo \ ./$(DEPDIR)/jobsepadebitdatedmulticreate.Plo \ ./$(DEPDIR)/jobsepadebitdatedsinglecreate.Plo \ ./$(DEPDIR)/jobsepadebitsingle.Plo \ ./$(DEPDIR)/jobsepainternalxfer.Plo \ ./$(DEPDIR)/jobsepastandingordercreate.Plo \ ./$(DEPDIR)/jobsepastandingorderdelete.Plo \ ./$(DEPDIR)/jobsepastandingorderget.Plo \ ./$(DEPDIR)/jobsepastandingordermodify.Plo \ ./$(DEPDIR)/jobsepaxfermulti.Plo \ ./$(DEPDIR)/jobsepaxfersingle.Plo \ ./$(DEPDIR)/jobtransferbase.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libhbciaccjobs_la_SOURCES) DIST_SOURCES = $(libhbciaccjobs_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac HEADERS = $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADD_ACLOCAL_FLAGS = @ADD_ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AQBANKING_CLI_VERSION_STRING = @AQBANKING_CLI_VERSION_STRING@ AQBANKING_FINTS_VERSION_STRING = @AQBANKING_FINTS_VERSION_STRING@ AQBANKING_SO_AGE = @AQBANKING_SO_AGE@ AQBANKING_SO_CURRENT = @AQBANKING_SO_CURRENT@ AQBANKING_SO_EFFECTIVE = @AQBANKING_SO_EFFECTIVE@ AQBANKING_SO_REVISION = @AQBANKING_SO_REVISION@ AQBANKING_VERSION_BUILD = @AQBANKING_VERSION_BUILD@ AQBANKING_VERSION_FULL_STRING = @AQBANKING_VERSION_FULL_STRING@ AQBANKING_VERSION_MAJOR = @AQBANKING_VERSION_MAJOR@ AQBANKING_VERSION_MINOR = @AQBANKING_VERSION_MINOR@ AQBANKING_VERSION_PATCHLEVEL = @AQBANKING_VERSION_PATCHLEVEL@ AQBANKING_VERSION_RELEASE_STRING = @AQBANKING_VERSION_RELEASE_STRING@ AQBANKING_VERSION_STRING = @AQBANKING_VERSION_STRING@ AQBANKING_VERSION_TAG = @AQBANKING_VERSION_TAG@ AQEBICS_CFLAGS = @AQEBICS_CFLAGS@ AQEBICS_LIBS = @AQEBICS_LIBS@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATETIME = @DATETIME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_EXCLUDE_PATTERNS = @DOXYGEN_EXCLUDE_PATTERNS@ DOXYGEN_FILE_PATTERNS = @DOXYGEN_FILE_PATTERNS@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENGUI_GTK2_CFLAGS = @GWENGUI_GTK2_CFLAGS@ GWENGUI_GTK2_LIBS = @GWENGUI_GTK2_LIBS@ GWENHYWFAR_MINIMUM_VERSION = @GWENHYWFAR_MINIMUM_VERSION@ HAVE_GWENGUI_GTK2 = @HAVE_GWENGUI_GTK2@ HAVE_I18N = @HAVE_I18N@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIBXSLT_CFLAGS = @LIBXSLT_CFLAGS@ LIBXSLT_LIBS = @LIBXSLT_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_SUPPORTS_QT = @MSGFMT_SUPPORTS_QT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ TUTORIALS = @TUTORIALS@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XMLMERGE = @XMLMERGE@ XMLSEC_CFLAGS = @XMLSEC_CFLAGS@ XMLSEC_LIBS = @XMLSEC_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ aqbanking_backends = @aqbanking_backends@ aqbanking_cfg_searchdir = @aqbanking_cfg_searchdir@ aqbanking_data_searchdir = @aqbanking_data_searchdir@ aqbanking_headerdir = @aqbanking_headerdir@ aqbanking_headerdir_am = @aqbanking_headerdir_am@ aqbanking_includes = @aqbanking_includes@ aqbanking_internal_libs = @aqbanking_internal_libs@ aqbanking_ldflags = @aqbanking_ldflags@ aqbanking_libs = @aqbanking_libs@ aqbanking_locale_searchdir = @aqbanking_locale_searchdir@ aqbanking_modules = @aqbanking_modules@ aqbanking_pkgdatadir = @aqbanking_pkgdatadir@ aqbanking_plugin_searchdir = @aqbanking_plugin_searchdir@ aqbanking_plugindir = @aqbanking_plugindir@ aqbanking_plugins_backends_dirs = @aqbanking_plugins_backends_dirs@ aqbanking_plugins_backends_libs = @aqbanking_plugins_backends_libs@ aqbanking_plugins_bankinfo_dirs = @aqbanking_plugins_bankinfo_dirs@ aqbanking_plugins_bankinfo_libs = @aqbanking_plugins_bankinfo_libs@ aqbanking_plugins_imexporters_dirs = @aqbanking_plugins_imexporters_dirs@ aqbanking_plugins_imexporters_libs = @aqbanking_plugins_imexporters_libs@ aqbanking_plugins_parsers_dirs = @aqbanking_plugins_parsers_dirs@ aqbanking_symlinkdir = @aqbanking_symlinkdir@ aqbanking_sys_is_windows = @aqbanking_sys_is_windows@ aqbankingpp_modules = @aqbankingpp_modules@ aqebics_datadir = @aqebics_datadir@ aqebics_includes = @aqebics_includes@ aqebics_internal_libs = @aqebics_internal_libs@ aqebics_ldflags = @aqebics_ldflags@ aqebics_libs = @aqebics_libs@ aqfints_datadir = @aqfints_datadir@ aqhbci_datadir = @aqhbci_datadir@ aqhbci_includes = @aqhbci_includes@ aqhbci_internal_libs = @aqhbci_internal_libs@ aqhbci_ldflags = @aqhbci_ldflags@ aqhbci_libs = @aqhbci_libs@ aqofxconnect_includes = @aqofxconnect_includes@ aqofxconnect_internal_libs = @aqofxconnect_internal_libs@ aqofxconnect_libs = @aqofxconnect_libs@ aqpaypal_includes = @aqpaypal_includes@ aqpaypal_internal_libs = @aqpaypal_internal_libs@ aqpaypal_libs = @aqpaypal_libs@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gmp_libs = @gmp_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_dir = @gwenhywfar_dir@ gwenhywfar_has_crypt = @gwenhywfar_has_crypt@ gwenhywfar_headers = @gwenhywfar_headers@ gwenhywfar_includes = @gwenhywfar_includes@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_plugins = @gwenhywfar_plugins@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ typemaker2_exe = @typemaker2_exe@ visibility_cflags = @visibility_cflags@ with_aqebics = @with_aqebics@ with_aqhbci = @with_aqhbci@ AM_CFLAGS = -DBUILDING_AQBANKING @visibility_cflags@ AM_CPPFLAGS = -I$(top_srcdir)/src/libs -I$(top_builddir)/src/libs $(gwenhywfar_includes) \ -I$(srcdir)/../../ \ -I$(srcdir)/../joblayer \ -I$(srcdir)/../msglayer \ -I$(srcdir)/../banking \ -I$(srcdir)/../applayer \ -I$(srcdir)/../tan \ -I$(srcdir)/.. noinst_LTLIBRARIES = libhbciaccjobs.la noinst_HEADERS = \ accountjob_l.h \ accountjob_p.h \ jobgetbalance_l.h \ jobgettransactions_l.h \ jobgettrans_camt_l.h \ jobforeignxferwh_l.h \ jobforeignxferwh_p.h \ jobloadcellphone_l.h \ jobloadcellphone_p.h \ jobsepadebitdatedsinglecreate_l.h \ jobsepadebitdatedmulticreate_l.h \ jobsepadebitdatedmulticreate_p.h \ jobsepacor1datedmulticreate_l.h \ jobsepacor1datedmulticreate_p.h \ jobsepaxfermulti_l.h \ jobsepaxfermulti_p.h \ jobsepaxfersingle_l.h \ jobsepadebitsingle_l.h \ jobsepacor1datedsinglecreate_l.h \ jobtransferbase_l.h jobtransferbase_p.h \ jobsepastandingordercreate_l.h \ jobsepastandingorderget_l.h \ jobsepastandingordermodify_l.h \ jobsepastandingorderdelete_l.h \ jobgetestatements_l.h \ jobgetdepot_l.h \ jobsepainternalxfer_l.h libhbciaccjobs_la_SOURCES = \ accountjob.c \ jobgetbalance.c \ jobgettransactions.c \ jobgettrans_camt.c \ jobforeignxferwh.c \ jobloadcellphone.c \ jobsepadebitdatedsinglecreate.c \ jobsepadebitdatedmulticreate.c \ jobsepacor1datedmulticreate.c \ jobsepaxfermulti.c \ jobsepaxfersingle.c \ jobsepadebitsingle.c \ jobsepacor1datedsinglecreate.c \ jobtransferbase.c \ jobsepastandingordercreate.c \ jobsepastandingorderget.c \ jobsepastandingordermodify.c \ jobsepastandingorderdelete.c \ jobgetestatements.c \ jobgetdepot.c \ jobsepainternalxfer.c xmlfiles = \ $(srcdir)/jobgetbalance.xml \ $(srcdir)/jobgettransactions.xml \ $(srcdir)/jobgettrans_camt.xml \ $(srcdir)/jobforeignxferwh.xml \ $(srcdir)/jobloadcellphone.xml \ $(srcdir)/jobsepadebitdatedsinglecreate.xml \ $(srcdir)/jobsepadebitdatedmulticreate.xml \ $(srcdir)/jobsepacor1datedmulticreate.xml \ $(srcdir)/jobsepaxfermulti.xml \ $(srcdir)/jobsepaxfersingle.xml \ $(srcdir)/jobsepadebitsingle.xml \ $(srcdir)/jobsepacor1datedsinglecreate.xml \ $(srcdir)/jobsepastandingordercreate.xml \ $(srcdir)/jobsepastandingorderget.xml \ $(srcdir)/jobsepastandingordermodify.xml \ $(srcdir)/jobsepastandingorderdelete.xml \ $(srcdir)/jobgetestatements.xml \ $(srcdir)/jobgetestatements2.xml \ $(srcdir)/jobgetdepot.xml \ $(srcdir)/jobsepainternalxfer.xml EXTRA_DIST = $(xmlfiles) CLEANFILES = accountjobs.xml all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libs/plugins/backends/aqhbci/ajobs/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libs/plugins/backends/aqhbci/ajobs/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libhbciaccjobs.la: $(libhbciaccjobs_la_OBJECTS) $(libhbciaccjobs_la_DEPENDENCIES) $(EXTRA_libhbciaccjobs_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libhbciaccjobs_la_OBJECTS) $(libhbciaccjobs_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/accountjob.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jobforeignxferwh.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jobgetbalance.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jobgetdepot.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jobgetestatements.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jobgettrans_camt.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jobgettransactions.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jobloadcellphone.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jobsepacor1datedmulticreate.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jobsepacor1datedsinglecreate.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jobsepadebitdatedmulticreate.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jobsepadebitdatedsinglecreate.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jobsepadebitsingle.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jobsepainternalxfer.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jobsepastandingordercreate.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jobsepastandingorderdelete.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jobsepastandingorderget.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jobsepastandingordermodify.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jobsepaxfermulti.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jobsepaxfersingle.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jobtransferbase.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) all-local installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/accountjob.Plo -rm -f ./$(DEPDIR)/jobforeignxferwh.Plo -rm -f ./$(DEPDIR)/jobgetbalance.Plo -rm -f ./$(DEPDIR)/jobgetdepot.Plo -rm -f ./$(DEPDIR)/jobgetestatements.Plo -rm -f ./$(DEPDIR)/jobgettrans_camt.Plo -rm -f ./$(DEPDIR)/jobgettransactions.Plo -rm -f ./$(DEPDIR)/jobloadcellphone.Plo -rm -f ./$(DEPDIR)/jobsepacor1datedmulticreate.Plo -rm -f ./$(DEPDIR)/jobsepacor1datedsinglecreate.Plo -rm -f ./$(DEPDIR)/jobsepadebitdatedmulticreate.Plo -rm -f ./$(DEPDIR)/jobsepadebitdatedsinglecreate.Plo -rm -f ./$(DEPDIR)/jobsepadebitsingle.Plo -rm -f ./$(DEPDIR)/jobsepainternalxfer.Plo -rm -f ./$(DEPDIR)/jobsepastandingordercreate.Plo -rm -f ./$(DEPDIR)/jobsepastandingorderdelete.Plo -rm -f ./$(DEPDIR)/jobsepastandingorderget.Plo -rm -f ./$(DEPDIR)/jobsepastandingordermodify.Plo -rm -f ./$(DEPDIR)/jobsepaxfermulti.Plo -rm -f ./$(DEPDIR)/jobsepaxfersingle.Plo -rm -f ./$(DEPDIR)/jobtransferbase.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/accountjob.Plo -rm -f ./$(DEPDIR)/jobforeignxferwh.Plo -rm -f ./$(DEPDIR)/jobgetbalance.Plo -rm -f ./$(DEPDIR)/jobgetdepot.Plo -rm -f ./$(DEPDIR)/jobgetestatements.Plo -rm -f ./$(DEPDIR)/jobgettrans_camt.Plo -rm -f ./$(DEPDIR)/jobgettransactions.Plo -rm -f ./$(DEPDIR)/jobloadcellphone.Plo -rm -f ./$(DEPDIR)/jobsepacor1datedmulticreate.Plo -rm -f ./$(DEPDIR)/jobsepacor1datedsinglecreate.Plo -rm -f ./$(DEPDIR)/jobsepadebitdatedmulticreate.Plo -rm -f ./$(DEPDIR)/jobsepadebitdatedsinglecreate.Plo -rm -f ./$(DEPDIR)/jobsepadebitsingle.Plo -rm -f ./$(DEPDIR)/jobsepainternalxfer.Plo -rm -f ./$(DEPDIR)/jobsepastandingordercreate.Plo -rm -f ./$(DEPDIR)/jobsepastandingorderdelete.Plo -rm -f ./$(DEPDIR)/jobsepastandingorderget.Plo -rm -f ./$(DEPDIR)/jobsepastandingordermodify.Plo -rm -f ./$(DEPDIR)/jobsepaxfermulti.Plo -rm -f ./$(DEPDIR)/jobsepaxfersingle.Plo -rm -f ./$(DEPDIR)/jobtransferbase.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am all-local am--depfiles check \ check-am clean clean-generic clean-libtool \ clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am .PRECIOUS: Makefile sources: for f in $(libhbciaccjobs_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d sources; \ done accountjobs.xml: $(xmlfiles) $(XMLMERGE) -v --compact -o $@ $(xmlfiles) all-local: accountjobs.xml typefiles: for d in $(SUBDIRS); do \ $(MAKE) -C $$d typefiles; \ done typedefs: for d in $(SUBDIRS); do \ $(MAKE) -C $$d typedefs; \ done cppcheck: for f in $(libhbciaccjobs_la_SOURCES); do \ cppcheck --force $$f ; \ done # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/ajobs/jobtransferbase_l.h0000664000175000017500000001057714300721174023551 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_JOBTRANSFERBASE_L_H #define AH_JOBTRANSFERBASE_L_H #include "accountjob_l.h" AH_JOB *AH_Job_TransferBase_new(const char *jobName, AB_TRANSACTION_TYPE tt, AB_TRANSACTION_SUBTYPE tst, AB_PROVIDER *pro, AB_USER *u, AB_ACCOUNT *account); const char *AH_Job_TransferBase_GetFiid(const AH_JOB *j); /** * Select SEPA PAIN profile to be used. * * Lookup SWIFT descriptor which is supported by the user BPD/UPD and by the XML imexporter. */ int AH_Job_TransferBase_SelectPainProfile(AH_JOB *j, int version1); void AH_Job_TransferBase_SetLocalInstrumentationCode(AH_JOB *j, const char *s); /** * Export the transactions stored with this job and export them to SEPA using the * previously selected SEPA profile (see @ref AH_Job_TransferBase_SelectPainProfile). */ int AH_Job_TransferBase_SepaExportTransactions(AH_JOB *j); /** * Returns AB_TRANSACTION_LIMITS for undated SEPA transfers and debit notes. */ int AH_Job_TransferBase_GetLimits_SepaUndated(AH_JOB *j, AB_TRANSACTION_LIMITS **pLimits); /** * Returns AB_TRANSACTION_LIMITS for dated SEPA transfers and debit notes. */ int AH_Job_TransferBase_GetLimits_SepaDated(AH_JOB *j, AB_TRANSACTION_LIMITS **pLimits); /** * Returns AB_TRANSACTION_LIMITS for SEPA standing order jobs. */ int AH_Job_TransferBase_GetLimits_SepaStandingOrder(AH_JOB *j, AB_TRANSACTION_LIMITS **pLimits); /** * Implementation of AH_Job_HandleCommand() for undated SEPA jobs. * It checks the given transaction and adds it to the internal list of transfers for the given job. * Checks performed here are: * - @ref AB_Transaction_CheckForSepaConformity * - @ref AB_Transaction_CheckPurposeAgainstLimits * - @ref AB_Transaction_CheckNamesAgainstLimits */ int AH_Job_TransferBase_HandleCommand_SepaUndated(AH_JOB *j, const AB_TRANSACTION *t); /** * Implementation of AH_Job_HandleCommand() for dated SEPA jobs. * It checks the given transaction and adds it to the internal list of transfers for the given job. * Checks performed here are: * - @ref AB_Transaction_CheckForSepaConformity * - @ref AB_Transaction_CheckPurposeAgainstLimits * - @ref AB_Transaction_CheckNamesAgainstLimits * - @ref AB_Transaction_CheckDateAgainstLimits */ int AH_Job_TransferBase_HandleCommand_SepaDated(AH_JOB *j, const AB_TRANSACTION *t); /** * Implementation of AH_Job_HandleCommand() for dated SEPA debit noted jobs. * It checks the given transaction and adds it to the internal list of transfers for the given job. * Checks performed here are: * - @ref AB_Transaction_CheckForSepaConformity * - @ref AB_Transaction_CheckPurposeAgainstLimits * - @ref AB_Transaction_CheckNamesAgainstLimits * - @ref AB_Transaction_CheckDateAgainstSequenceLimits */ int AH_Job_TransferBase_HandleCommand_SepaDatedDebit(AH_JOB *j, const AB_TRANSACTION *t); /** * Implementation of AH_Job_HandleCommand() for SEPA standing order jobs. * It checks the given transaction and adds it to the internal list of transfers for the given job. * Checks performed here are: * - @ref AB_Transaction_CheckForSepaConformity * - @ref AB_Transaction_CheckPurposeAgainstLimits * - @ref AB_Transaction_CheckNamesAgainstLimits * - @ref AB_Transaction_CheckRecurrenceAgainstLimits * - @ref AB_Transaction_CheckFirstExecutionDateAgainstLimits (only for CreateStandingOrder) */ int AH_Job_TransferBase_HandleCommand_SepaStandingOrder(AH_JOB *j, const AB_TRANSACTION *t); /** * Prepare a SEPA standing order job (create, modify). */ int AH_Job_TransferBase_Prepare_SepaStandingOrder(AH_JOB *j); /** * Add challenge parameters type 29 (used in dated transfers/debit notes). */ int AH_Job_TransferBase_AddChallengeParams29(AH_JOB *j, int hkTanVer, GWEN_DB_NODE *dbMethod); /** * Add challenge parameters type 35 (used in SEPA standing orders). */ int AH_Job_TransferBase_AddChallengeParams35(AH_JOB *j, int hkTanVer, GWEN_DB_NODE *dbMethod); #endif /* AH_JOBTRANSFERBASE_L_H */ aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/ajobs/jobgetestatements.c0000664000175000017500000002255514546575647023635 00000000000000/*************************************************************************** begin : Tue Apr 03 2018 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "jobgetestatements_l.h" #include "aqhbci/aqhbci_l.h" #include "accountjob_l.h" #include "aqhbci/joblayer/job_l.h" #include "aqhbci/joblayer/job_crypt.h" #include "aqhbci/banking/user_l.h" #include "aqbanking/types/transaction.h" #include #include #include #include #include #include #include #include #include /* ------------------------------------------------------------------------------------------------ * forward declarations * ------------------------------------------------------------------------------------------------ */ static AH_JOB *_createJob(AB_PROVIDER *pro, AB_USER *u, AB_ACCOUNT *account, const char *jobName); static int AH_Job_GetEstatements_HandleCommand(AH_JOB *j, const AB_TRANSACTION *t); static int _process(AH_JOB *j, AB_IMEXPORTER_CONTEXT *ctx); static AB_DOCUMENT *_createDocFromResponseDb(AH_JOB *j, GWEN_DB_NODE *dbResponse, int runningDocNumber); static int _writeDocToDataDirAndStorePath(AH_JOB *j, AB_DOCUMENT *doc, const char *fileNameExt); /* ------------------------------------------------------------------------------------------------ * implementations * ------------------------------------------------------------------------------------------------ */ AH_JOB *AH_Job_GetEStatements_new(AB_PROVIDER *pro, AB_USER *u, AB_ACCOUNT *account) { return _createJob(pro, u, account, "JobGetEStatements"); } AH_JOB *AH_Job_GetEStatements2_new(AB_PROVIDER *pro, AB_USER *u, AB_ACCOUNT *account) { return _createJob(pro, u, account, "JobGetEStatements2"); } static int AH_Job_GetEstatements_HandleCommand(AH_JOB *j, const AB_TRANSACTION *t) { const char *s; GWEN_DB_NODE *dbArgs=AH_Job_GetArguments(j); GWEN_DB_NODE *dbParams=AH_Job_GetParams(j); assert(dbArgs && dbParams); /* * FinTS restriction (for both HKEKA and HKEKP): * Filtering by "Kontoauszugsnummer" and "Kontoauszugsjahr" is optionally allowed * if "Kontoauszugsnummer erlaubt" (BPD) == "J". Else not allowd. */ s=GWEN_DB_GetCharValue(dbParams, "eStatementNumAllowed", 0, 0); if (s && !strcmp(s, "J")) { const GWEN_DATE *da=AB_Transaction_GetFirstDate(t); uint32_t estatementNumber=AB_Transaction_GetEstatementNumber(t); if (da) { char dbuf[16]; /* AB_TRANSACTION API specifies YYYYMMDD for the from-date, * but estatements can only be filtered by year + document number. * Take YYYY from the from-date, and discard the MMDD. */ snprintf(dbuf, sizeof(dbuf), "%04d", GWEN_Date_GetYear(da)); GWEN_DB_SetCharValue(dbArgs, GWEN_DB_FLAGS_OVERWRITE_VARS, "eStatementYear", dbuf); } if (estatementNumber>0) { GWEN_DB_SetIntValue(dbArgs, GWEN_DB_FLAGS_OVERWRITE_VARS, "eStatementNum", estatementNumber); } } /* * FinTS restriction (for both HKEKA and HKEKP): * Element "Maximale Anzahl Eintraege" is optionally allowed * if "Eingabe Anzahl Eintraege erlaubt" (BPD) == "J". Else not allowed. */ s=GWEN_DB_GetCharValue(dbParams, "maxEntriesAllowed", 0, 0); if (s && !strcmp(s, "J")) { uint32_t maxEntries=AB_Transaction_GetEstatementMaxEntries(t); if (maxEntries>0) { GWEN_DB_SetIntValue(dbArgs, GWEN_DB_FLAGS_DEFAULT, "maxEntries", maxEntries); } } /* * If the user reqeusted to acknowledge this job, * and the bank also wants to acknowledge the job, flag it for acknowledgement. */ if (AB_Transaction_GetAcknowledge(t) == AB_Transaction_AckJobsWithAckCode) { s=GWEN_DB_GetCharValue(dbParams, "ackNeeded", 0, 0); if (s && !strcmp(s, "J")) { AH_Job_AddFlags(j, AH_JOB_FLAGS_ACKNOWLEDGE); } } return 0; } AH_JOB *_createJob(AB_PROVIDER *pro, AB_USER *u, AB_ACCOUNT *account, const char *jobName) { AH_JOB *j; j=AH_AccountJob_new(jobName, pro, u, account); if (!j) return NULL; AH_Job_SetSupportedCommand(j, AB_Transaction_CommandGetEStatements); /* overwrite some virtual functions */ AH_Job_SetProcessFn(j, _process); AH_Job_SetGetLimitsFn(j, AH_Job_GetLimits_EmptyLimits); AH_Job_SetHandleCommandFn(j, AH_Job_GetEstatements_HandleCommand); AH_Job_SetHandleResultsFn(j, AH_Job_HandleResults_Empty); return j; } int _process(AH_JOB *j, AB_IMEXPORTER_CONTEXT *ctx) { GWEN_DB_NODE *dbResponses; GWEN_DB_NODE *dbCurr; const char *responseName; AB_ACCOUNT *acc; int rv; AB_IMEXPORTER_ACCOUNTINFO *iea=NULL; int runningDocNumber=0; DBG_INFO(AQHBCI_LOGDOMAIN, "Processing JobGetEStatements"); assert(j); acc=AH_AccountJob_GetAccount(j); assert(acc); responseName=AH_Job_GetResponseName(j); dbResponses=AH_Job_GetResponses(j); assert(dbResponses); /* search for "Transactions" */ dbCurr=GWEN_DB_GetFirstGroup(dbResponses); while (dbCurr) { rv=AH_Job_CheckEncryption(j, dbCurr); if (rv) { DBG_INFO(AQHBCI_LOGDOMAIN, "Compromised security (encryption)"); AH_Job_SetStatus(j, AH_JobStatusError); return rv; } rv=AH_Job_CheckSignature(j, dbCurr); if (rv) { DBG_INFO(AQHBCI_LOGDOMAIN, "Compromised security (signature)"); AH_Job_SetStatus(j, AH_JobStatusError); return rv; } if (responseName && *responseName) { GWEN_DB_NODE *dbXA; dbXA=GWEN_DB_GetGroup(dbCurr, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "data"); if (dbXA) dbXA=GWEN_DB_GetGroup(dbXA, GWEN_PATH_FLAGS_NAMEMUSTEXIST, responseName); if (dbXA) { AB_DOCUMENT *doc; doc=_createDocFromResponseDb(j, dbXA, ++runningDocNumber); if (doc) { AB_Document_SetOwnerId(doc, AB_Account_GetUniqueId(acc)); if (iea==NULL) iea=AB_Provider_GetOrAddAccountInfoForAccount(ctx, acc); AB_ImExporterAccountInfo_AddEStatement(iea, doc); } } } dbCurr=GWEN_DB_GetNextGroup(dbCurr); } /* while */ return 0; } AB_DOCUMENT *_createDocFromResponseDb(AH_JOB *j, GWEN_DB_NODE *dbResponse, int runningDocNumber) { const void *p; unsigned int bs; p=GWEN_DB_GetBinValue(dbResponse, "eStatement", 0, 0, 0, &bs); if (p && bs) { AB_DOCUMENT *doc; char *docId; int rv; /* TODO: base64-decode if necessary */ /* add eStatement (PDF) to imExporterContext */ doc=AB_Document_new(); AB_Document_SetData(doc, p, bs); AB_Document_SetMimeType(doc, "application/pdf"); docId=AH_Job_GenerateIdFromDateTimeAndJobId(j, runningDocNumber); if (docId) { AB_Document_SetId(doc, docId); free(docId); } p=GWEN_DB_GetBinValue(dbResponse, "ackCode", 0, 0, 0, &bs); if (p && bs) { AB_Document_SetAcknowledgeCode(doc, p, bs); } rv=_writeDocToDataDirAndStorePath(j, doc, "pdf"); if (rv<0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not write document to storage, keeping data in document (%d)", rv); } else { /* clear data in document, because it is written to disk (AB_Document_GetFilePath() has the path) */ AB_Document_SetData(doc, NULL, 0); } return doc; } return NULL; } int _writeDocToDataDirAndStorePath(AH_JOB *j, AB_DOCUMENT *doc, const char *fileNameExt) { AH_HBCI *hbci; AB_USER *user; GWEN_BUFFER *pathBuffer; int rv; hbci=AH_Job_GetHbci(j); user=AH_Job_GetUser(j); /* pathname: customer data dir / docs / docId.ext */ pathBuffer=GWEN_Buffer_new(0, 256, 0, 1); if (AH_HBCI_AddUserPath(hbci, user, pathBuffer)) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not add customer path, cannot store document"); GWEN_Buffer_free(pathBuffer); return GWEN_ERROR_GENERIC; } GWEN_Buffer_AppendString(pathBuffer, GWEN_DIR_SEPARATOR_S "docs"); /* create folder if it not already exists */ rv=GWEN_Directory_GetPath(GWEN_Buffer_GetStart(pathBuffer), 0); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(pathBuffer); return rv; } /* add file name to full path */ GWEN_Buffer_AppendString(pathBuffer, GWEN_DIR_SEPARATOR_S); GWEN_Buffer_AppendString(pathBuffer, AB_Document_GetId(doc)); GWEN_Buffer_AppendString(pathBuffer, "."); GWEN_Buffer_AppendString(pathBuffer, fileNameExt); /* check whether the full path (including filename) exists, it should not! */ rv=GWEN_Directory_GetPath(GWEN_Buffer_GetStart(pathBuffer), GWEN_PATH_FLAGS_NAMEMUSTEXIST|GWEN_PATH_FLAGS_VARIABLE); if (rv==0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Path \"%s\" already exists (%d)", GWEN_Buffer_GetStart(pathBuffer), rv); GWEN_Buffer_free(pathBuffer); return GWEN_ERROR_FOUND; } /* path exists, file does not, write file now */ rv=GWEN_SyncIo_Helper_WriteFile(GWEN_Buffer_GetStart(pathBuffer), AB_Document_GetDataPtr(doc), AB_Document_GetDataLen(doc)); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(pathBuffer); return rv; } AB_Document_SetFilePath(doc, GWEN_Buffer_GetStart(pathBuffer)); GWEN_Buffer_free(pathBuffer); return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/ajobs/jobsepaxfersingle_l.h0000664000175000017500000000122214043610745024101 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_JOBSEPAXFERSINGLE_L_H #define AH_JOBSEPAXFERSINGLE_L_H #include "accountjob_l.h" AH_JOB *AH_Job_SepaTransferSingle_new(AB_PROVIDER *pro, AB_USER *u, AB_ACCOUNT *account); #endif /* AH_JOBSEPAXFERSINGLE_L_H */ aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/ajobs/jobloadcellphone.c0000664000175000017500000001727614044534775023404 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "jobloadcellphone_p.h" #include "aqhbci/aqhbci_l.h" #include "accountjob_l.h" #include "aqhbci/joblayer/job_l.h" #include #include #include #include #include GWEN_INHERIT(AH_JOB, AH_JOB_LOADCELLPHONE); /* --------------------------------------------------------------- FUNCTION */ AH_JOB *AH_Job_LoadCellPhone_new(AB_PROVIDER *pro, AB_USER *u, AB_ACCOUNT *account) { AH_JOB *j; AH_JOB_LOADCELLPHONE *aj; GWEN_DB_NODE *dbArgs; j=AH_AccountJob_new("JobLoadCellPhone", pro, u, account); if (!j) return 0; AH_Job_SetChallengeClass(j, 41); AH_Job_SetSupportedCommand(j, AB_Transaction_CommandLoadCellPhone); GWEN_NEW_OBJECT(AH_JOB_LOADCELLPHONE, aj); GWEN_INHERIT_SETDATA(AH_JOB, AH_JOB_LOADCELLPHONE, j, aj, AH_Job_LoadCellPhone_FreeData); AH_Job_SetGetLimitsFn(j, AH_Job_GetLimits_EmptyLimits); /* set some known arguments */ dbArgs=AH_Job_GetArguments(j); assert(dbArgs); GWEN_DB_SetCharValue(dbArgs, GWEN_DB_FLAGS_DEFAULT, "allAccounts", "N"); return j; } /* --------------------------------------------------------------- FUNCTION */ void GWENHYWFAR_CB AH_Job_LoadCellPhone_FreeData(void *bp, void *p) { AH_JOB_LOADCELLPHONE *aj; aj=(AH_JOB_LOADCELLPHONE *)p; GWEN_FREE_OBJECT(aj); } #if 0 /* --------------------------------------------------------------- FUNCTION */ int AH_Job_LoadCellPhone_ExchangeParams(AH_JOB *j, AB_JOB *bj, AB_IMEXPORTER_CONTEXT *ctx) { AH_JOB_LOADCELLPHONE *aj; GWEN_DB_NODE *dbParams; GWEN_DB_NODE *dbProduct; AB_CELLPHONE_PRODUCT_LIST *pl; int i; DBG_INFO(AQHBCI_LOGDOMAIN, "Exchanging params"); assert(j); aj=GWEN_INHERIT_GETDATA(AH_JOB, AH_JOB_LOADCELLPHONE, j); assert(aj); dbParams=AH_Job_GetParams(j); DBG_DEBUG(AQHBCI_LOGDOMAIN, "Have this parameters to exchange:"); if (GWEN_Logger_GetLevel(AQHBCI_LOGDOMAIN)>=GWEN_LoggerLevel_Debug) GWEN_DB_Dump(dbParams, 2); /* read products */ pl=AB_CellPhoneProduct_List_new(); dbProduct=GWEN_DB_FindFirstGroup(dbParams, "product"); while (dbProduct) { AB_CELLPHONE_PRODUCT *cp; char numbuf[16]; const char *s; cp=AB_CellPhoneProduct_new(); i=GWEN_DB_GetIntValue(dbProduct, "Code", 0, -1); snprintf(numbuf, sizeof(numbuf), "%d", i); AB_CellPhoneProduct_SetId(cp, numbuf); i=GWEN_DB_GetIntValue(dbParams, "FreeValueAllowed", 0, 0); AB_CellPhoneProduct_SetAllowFreeValue(cp, i); s=GWEN_DB_GetCharValue(dbProduct, "Name", 0, NULL); if (s) AB_CellPhoneProduct_SetProviderName(cp, s); s=GWEN_DB_GetCharValue(dbProduct, "ProductName", 0, NULL); if (s) AB_CellPhoneProduct_SetProductName(cp, s); s=GWEN_DB_GetCharValue(dbProduct, "MinimumValue", 0, NULL); if (s) { AB_VALUE *v; v=AB_Value_fromString(s); if (v==NULL) { DBG_INFO(GWEN_LOGDOMAIN, "Bad minimum value [%s]", s); } else { AB_CellPhoneProduct_SetMinimumValue(cp, v); AB_Value_free(v); } } s=GWEN_DB_GetCharValue(dbProduct, "MaximumValue", 0, NULL); if (s) { AB_VALUE *v; v=AB_Value_fromString(s); if (v==NULL) { DBG_INFO(GWEN_LOGDOMAIN, "Bad maximum value [%s]", s); } else { AB_CellPhoneProduct_SetMaximumValue(cp, v); AB_Value_free(v); } } s=GWEN_DB_GetCharValue(dbProduct, "ValueList", 0, NULL); if (s) { char *ns; char *p; AB_VALUE_LIST *vl; /* read value list */ vl=AB_CellPhoneProduct_GetValues(cp); ns=strdup(s); p=ns; while (*p) { char *p0; p0=p; p=strchr(p0, ';'); if (p) *p=0; if (*p0) { AB_VALUE *v; v=AB_Value_fromString(p0); if (v) { AB_Value_List_Add(v, vl); } else { DBG_INFO(GWEN_LOGDOMAIN, "Bad value [%s]", p0); } } if (p) p++; else break; } } AB_CellPhoneProduct_List_Add(cp, pl); dbProduct=GWEN_DB_FindNextGroup(dbProduct, "product"); } AB_JobLoadCellPhone_SetProductList(bj, pl); return 0; } #endif # if 0 /* --------------------------------------------------------------- FUNCTION */ int AH_Job_LoadCellPhone_ExchangeArgs(AH_JOB *j, AB_JOB *bj, AB_IMEXPORTER_CONTEXT *ctx) { AH_JOB_LOADCELLPHONE *aj; GWEN_DB_NODE *dbArgs; const AB_CELLPHONE_PRODUCT *cp; const AB_VALUE *v; const char *s; DBG_INFO(AQHBCI_LOGDOMAIN, "Exchanging args"); assert(j); aj=GWEN_INHERIT_GETDATA(AH_JOB, AH_JOB_LOADCELLPHONE, j); assert(aj); dbArgs=AH_Job_GetArguments(j); cp=AB_JobLoadCellPhone_GetCellPhoneProduct(bj); if (cp==NULL) { DBG_ERROR(AQHBCI_LOGDOMAIN, "No product"); AB_Job_SetStatus(bj, AB_Job_StatusError); return GWEN_ERROR_NO_DATA; } /* cell phone card provider */ s=AB_CellPhoneProduct_GetId(cp); assert(s); GWEN_DB_SetCharValue(dbArgs, GWEN_DB_FLAGS_OVERWRITE_VARS, "ProviderCode", s); /* phone number */ s=AB_JobLoadCellPhone_GetPhoneNumber(bj); if (s==NULL || *s==0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "No phone number"); AB_Job_SetStatus(bj, AB_Job_StatusError); return GWEN_ERROR_NO_DATA; } GWEN_DB_SetCharValue(dbArgs, GWEN_DB_FLAGS_OVERWRITE_VARS, "PhoneNumber", s); /* value */ v=AB_JobLoadCellPhone_GetValue(bj); if (v==NULL) { DBG_ERROR(AQHBCI_LOGDOMAIN, "No value"); AB_Job_SetStatus(bj, AB_Job_StatusError); return GWEN_ERROR_NO_DATA; } else if (AB_Value_IsZero(v) || AB_Value_IsNegative(v)) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Bad value"); AB_Job_SetStatus(bj, AB_Job_StatusError); return GWEN_ERROR_INVALID; } else { GWEN_DB_NODE *dbV; GWEN_BUFFER *nbuf; char *p; const char *s; int l; dbV=GWEN_DB_GetGroup(dbArgs, GWEN_DB_FLAGS_OVERWRITE_GROUPS, "value"); assert(dbV); nbuf=GWEN_Buffer_new(0, 32, 0, 1); if (GWEN_Text_DoubleToBuffer(AB_Value_GetValueAsDouble(v), nbuf)) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Buffer overflow"); GWEN_Buffer_free(nbuf); abort(); } l=GWEN_Buffer_GetUsedBytes(nbuf); if (!l) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Error in conversion"); GWEN_Buffer_free(nbuf); abort(); } /* replace "C" comma with "DE" comma, remove thousand's comma */ p=GWEN_Buffer_GetStart(nbuf); s=p; while (*s) { if (*s=='.') { *p=','; p++; } else if (*s!=',') { *p=*s; p++; } s++; } /* while */ *p=0; if (strchr(GWEN_Buffer_GetStart(nbuf), ',')) { /* kill all trailing '0' behind the comma */ p=GWEN_Buffer_GetStart(nbuf)+l; while (l--) { --p; if (*p=='0') *p=0; else break; } } else GWEN_Buffer_AppendString(nbuf, ","); /* store value */ GWEN_DB_SetCharValue(dbV, GWEN_DB_FLAGS_OVERWRITE_VARS, "value", GWEN_Buffer_GetStart(nbuf)); GWEN_Buffer_free(nbuf); s=AB_Value_GetCurrency(v); if (!s) s="EUR"; GWEN_DB_SetCharValue(dbV, GWEN_DB_FLAGS_OVERWRITE_VARS, "currency", s); } return 0; } #endif aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/ajobs/jobsepadebitdatedsinglecreate.xml0000664000175000017500000000417614043610745026463 00000000000000 %code %version %code %version %code %version %code %version aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/ajobs/jobgettransactions.c0000664000175000017500000003461214546575647024006 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "jobgettransactions_l.h" #include "aqhbci/aqhbci_l.h" #include "accountjob_l.h" #include "aqhbci/joblayer/job_l.h" #include "aqhbci/joblayer/job_crypt.h" #include "aqhbci/banking/user_l.h" #include #include #include #include #include #include #include #include /* ------------------------------------------------------------------------------------------------ * forward declarations * ------------------------------------------------------------------------------------------------ */ static int _jobApi_ProcessForBankAccount(AH_JOB *j, AB_IMEXPORTER_CONTEXT *ctx); static int _jobApi_ProcessForCreditCard(AH_JOB *j, AB_IMEXPORTER_CONTEXT *ctx); static int _jobApi_GetLimits(AH_JOB *j, AB_TRANSACTION_LIMITS **pLimits); static int _jobApi_HandleCommand(AH_JOB *j, const AB_TRANSACTION *t); static int _readTransIntoAccountInfo(AH_JOB *j, AB_IMEXPORTER_ACCOUNTINFO *ai, const char *docType, int ty, const uint8_t *ptr, uint32_t len); static int _readCheckAndConcatTransDataFromResponses(AH_JOB *j, GWEN_DB_NODE *dbResponses, GWEN_BUFFER *tbooked, GWEN_BUFFER *tnoted); static int _parseTransData(AH_JOB *j, AB_IMEXPORTER_ACCOUNTINFO *ai, const uint8_t *ptrBooked, uint32_t lenBooked, const uint8_t *ptrNoted, uint32_t lenNoted); static AB_TRANSACTION *_readCreditCardTransactionFromResponse(AB_USER *u, AB_ACCOUNT *a, GWEN_DB_NODE *dbTransaction); static AB_VALUE *_readValueFromCreditCardTransResp(GWEN_DB_NODE *dbTransaction); static void _appendBufferToFile(const char *fname, const char *ptr, uint32_t length); /* ------------------------------------------------------------------------------------------------ * implementations * ------------------------------------------------------------------------------------------------ */ AH_JOB *AH_Job_GetTransactions_new(AB_PROVIDER *pro, AB_USER *u, AB_ACCOUNT *account) { AH_JOB *j; GWEN_DB_NODE *dbArgs; GWEN_DB_NODE *updgroup; int useCreditCardJob = 0; //Check if we should use DKKKU updgroup=AH_User_GetUpdForAccount(u, account); if (updgroup) { GWEN_DB_NODE *n; n=GWEN_DB_GetFirstGroup(updgroup); while (n) { if (strcasecmp(GWEN_DB_GetCharValue(n, "job", 0, ""), "DKKKU")==0) { useCreditCardJob = 1; break; } n=GWEN_DB_GetNextGroup(n); } /* while */ } /* if updgroup for the given account found */ if (useCreditCardJob) j=AH_AccountJob_new("JobGetTransactionsCreditCard", pro, u, account); else j=AH_AccountJob_new("JobGetTransactions", pro, u, account); if (!j) return 0; AH_Job_SetSupportedCommand(j, AB_Transaction_CommandGetTransactions); /* overwrite some virtual functions */ if (useCreditCardJob) AH_Job_SetProcessFn(j, _jobApi_ProcessForCreditCard); else AH_Job_SetProcessFn(j, _jobApi_ProcessForBankAccount); AH_Job_SetGetLimitsFn(j, _jobApi_GetLimits); AH_Job_SetHandleCommandFn(j, _jobApi_HandleCommand); AH_Job_SetHandleResultsFn(j, AH_Job_HandleResults_Empty); /* set some known arguments */ dbArgs=AH_Job_GetArguments(j); assert(dbArgs); if (useCreditCardJob) GWEN_DB_SetCharValue(dbArgs, GWEN_DB_FLAGS_DEFAULT, "accountNumber", AB_Account_GetAccountNumber(account)); else GWEN_DB_SetCharValue(dbArgs, GWEN_DB_FLAGS_DEFAULT, "allAccounts", "N"); return j; } int _readTransIntoAccountInfo(AH_JOB *j, AB_IMEXPORTER_ACCOUNTINFO *ai, const char *docType, int ty, const uint8_t *ptr, uint32_t len) { AB_PROVIDER *pro; AB_IMEXPORTER_CONTEXT *tempContext; int rv; assert(j); pro=AH_Job_GetProvider(j); assert(pro); /* import data into a temporary context */ tempContext=AB_ImExporterContext_new(); #if 0 DBG_ERROR(0, "About to read this SWIFT data (%s)", docType); GWEN_Text_DumpString((const char *) ptr, len, 2); #endif rv=AB_Banking_ImportFromBufferLoadProfile(AB_Provider_GetBanking(pro), "swift", tempContext, docType, NULL, ptr, len); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); AB_ImExporterContext_free(tempContext); return rv; } AB_Provider_MergeContextsSetTypeAndFreeSrc(ai, tempContext, ty); return 0; } int _jobApi_ProcessForBankAccount(AH_JOB *j, AB_IMEXPORTER_CONTEXT *ctx) { AB_ACCOUNT *a; AB_IMEXPORTER_ACCOUNTINFO *ai; GWEN_DB_NODE *dbResponses; GWEN_BUFFER *tbooked; GWEN_BUFFER *tnoted; int rv; DBG_INFO(AQHBCI_LOGDOMAIN, "Processing JobGetTransactions"); a=AH_AccountJob_GetAccount(j); assert(a); dbResponses=AH_Job_GetResponses(j); assert(dbResponses); tbooked=GWEN_Buffer_new(0, 1024, 0, 1); tnoted=GWEN_Buffer_new(0, 1024, 0, 1); rv=_readCheckAndConcatTransDataFromResponses(j, dbResponses, tbooked, tnoted); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbooked); GWEN_Buffer_free(tnoted); AH_Job_SetStatus(j, AH_JobStatusError); return rv; } if (getenv("AQHBCI_LOGBOOKED")) _appendBufferToFile("/tmp/booked.mt", GWEN_Buffer_GetStart(tbooked), GWEN_Buffer_GetUsedBytes(tbooked)); if (getenv("AQHBCI_LOGNOTED")) _appendBufferToFile("/tmp/noted.mt", GWEN_Buffer_GetStart(tnoted), GWEN_Buffer_GetUsedBytes(tnoted)); ai=AB_Provider_GetOrAddAccountInfoForAccount(ctx, a); rv=_parseTransData(j, ai, (const uint8_t *) GWEN_Buffer_GetStart(tbooked), GWEN_Buffer_GetUsedBytes(tbooked), (const uint8_t *) GWEN_Buffer_GetStart(tnoted), GWEN_Buffer_GetUsedBytes(tnoted)); GWEN_Buffer_free(tbooked); GWEN_Buffer_free(tnoted); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); AH_Job_SetStatus(j, AH_JobStatusError); return rv; } AB_Provider_DumpTransactionsIfDebug(ai, AQHBCI_LOGDOMAIN); return 0; } int _readCheckAndConcatTransDataFromResponses(AH_JOB *j, GWEN_DB_NODE *dbResponses, GWEN_BUFFER *tbooked, GWEN_BUFFER *tnoted) { GWEN_DB_NODE *dbCurr; int rv; dbCurr=GWEN_DB_GetFirstGroup(dbResponses); while (dbCurr) { GWEN_DB_NODE *dbXA; rv=AH_Job_CheckEncryption(j, dbCurr); if (rv) { DBG_INFO(AQHBCI_LOGDOMAIN, "Compromised security (encryption)"); return rv; } rv=AH_Job_CheckSignature(j, dbCurr); if (rv) { DBG_INFO(AQHBCI_LOGDOMAIN, "Compromised security (signature)"); return rv; } dbXA=GWEN_DB_GetGroup(dbCurr, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "data/transactions"); if (dbXA) { const void *p; unsigned int bs; if (GWEN_Logger_GetLevel(0)>=GWEN_LoggerLevel_Debug) GWEN_DB_Dump(dbXA, 2); p=GWEN_DB_GetBinValue(dbXA, "booked", 0, 0, 0, &bs); if (p && bs) GWEN_Buffer_AppendBytes(tbooked, p, bs); p=GWEN_DB_GetBinValue(dbXA, "noted", 0, 0, 0, &bs); if (p && bs) GWEN_Buffer_AppendBytes(tnoted, p, bs); } /* if "Transactions" */ dbCurr=GWEN_DB_GetNextGroup(dbCurr); } return 0; } int _parseTransData(AH_JOB *j, AB_IMEXPORTER_ACCOUNTINFO *ai, const uint8_t *ptrBooked, uint32_t lenBooked, const uint8_t *ptrNoted, uint32_t lenNoted) { int rv; /* read booked transactions */ if (ptrBooked && lenBooked) { rv=_readTransIntoAccountInfo(j, ai, "fints940", AB_Transaction_TypeStatement, ptrBooked, lenBooked); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "Error parsing booked transactions (%d)", rv); return rv; } } /* read noted transactions */ if (ptrNoted && lenNoted) { rv=_readTransIntoAccountInfo(j, ai, "fints942", AB_Transaction_TypeNotedStatement, ptrNoted, lenNoted); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "Error parsing noted transactions (%d)", rv); return rv; } } return 0; } int _jobApi_ProcessForCreditCard(AH_JOB *j, AB_IMEXPORTER_CONTEXT *ctx) { AB_ACCOUNT *a; AB_IMEXPORTER_ACCOUNTINFO *ai; AB_USER *u; GWEN_DB_NODE *dbResponses; GWEN_DB_NODE *dbCurr; int rv; DBG_INFO(AQHBCI_LOGDOMAIN, "Processing JobGetTransactionsCreditCard"); dbResponses=AH_Job_GetResponses(j); assert(dbResponses); a=AH_AccountJob_GetAccount(j); u=AH_Job_GetUser(j); ai=AB_Provider_GetOrAddAccountInfoForAccount(ctx, a); AB_ImExporterAccountInfo_SetAccountId(ai, AB_Account_GetUniqueId(a)); /* search for "Transactions" */ dbCurr=GWEN_DB_GetFirstGroup(dbResponses); while (dbCurr) { GWEN_DB_NODE *dbXA; rv=AH_Job_CheckEncryption(j, dbCurr); if (rv) { DBG_INFO(AQHBCI_LOGDOMAIN, "Compromised security (encryption)"); AH_Job_SetStatus(j, AH_JobStatusError); return rv; } rv=AH_Job_CheckSignature(j, dbCurr); if (rv) { DBG_INFO(AQHBCI_LOGDOMAIN, "Compromised security (signature)"); AH_Job_SetStatus(j, AH_JobStatusError); return rv; } dbXA=GWEN_DB_GetGroup(dbCurr, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "data/transactionscreditcard"); if (dbXA) { GWEN_DB_NODE *dbT; dbT=GWEN_DB_GetGroup(dbXA, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "entries"); while (dbT) { AB_TRANSACTION *t; t=_readCreditCardTransactionFromResponse(u, a, dbT); if (t) { DBG_INFO(AQHBCI_LOGDOMAIN, "Adding transaction"); AB_ImExporterAccountInfo_AddTransaction(ai, t); } dbT=GWEN_DB_FindNextGroup(dbT, "entries"); } //while (dbT) } //if (dbXA) dbCurr=GWEN_DB_GetNextGroup(dbCurr); } AB_Provider_DumpTransactionsIfDebug(ai, AQHBCI_LOGDOMAIN); return 0; } AB_TRANSACTION *_readCreditCardTransactionFromResponse(AB_USER *u, AB_ACCOUNT *a, GWEN_DB_NODE *dbTransaction) { GWEN_DATE *date=NULL; GWEN_DATE *valutaDate=NULL; AB_VALUE *value=NULL; const char *p; const char *ref; int i; GWEN_STRINGLIST *purpose; AB_TRANSACTION *t; p=GWEN_DB_GetCharValue(dbTransaction, "date", 0, 0); /* "Buchungsdatum" */ if (p) date=GWEN_Date_fromStringWithTemplate(p, "YYYYMMDD"); p=GWEN_DB_GetCharValue(dbTransaction, "valutaDate", 0, 0); /* "Umsatzdatum" */ if (p) valutaDate=GWEN_Date_fromStringWithTemplate(p, "YYYYMMDD"); value=_readValueFromCreditCardTransResp(dbTransaction); if (value==NULL || (date==NULL && valutaDate==NULL)) { DBG_WARN(AQHBCI_LOGDOMAIN, "Incomplete credit card transaction received"); } /* read purpose */ purpose=GWEN_StringList_new(); for (i=0; i<10; i++) { p=GWEN_DB_GetCharValue(dbTransaction, "purpose", i, 0); if (!p) break; GWEN_StringList_AppendString(purpose, p, 0, 0); } /* read reference */ ref=GWEN_DB_GetCharValue(dbTransaction, "reference", 0, 0); if (ref) GWEN_StringList_AppendString(purpose, ref, 0, 0); t=AB_Transaction_new(); if (ref) AB_Transaction_SetFiId(t, ref); AB_Transaction_SetType(t, AB_Transaction_TypeStatement); AB_Transaction_SetUniqueAccountId(t, AB_Account_GetUniqueId(a)); AB_Transaction_SetLocalBankCode(t, AB_User_GetBankCode(u)); AB_Transaction_SetLocalAccountNumber(t, AB_Account_GetAccountNumber(a)); AB_Transaction_SetValutaDate(t, valutaDate); AB_Transaction_SetDate(t, date); AB_Transaction_SetValue(t, value); AB_Transaction_SetPurposeFromStringList(t, purpose); GWEN_StringList_free(purpose); AB_Value_free(value); GWEN_Date_free(date); GWEN_Date_free(valutaDate); return t; } AB_VALUE *_readValueFromCreditCardTransResp(GWEN_DB_NODE *dbTransaction) { GWEN_DB_NODE *dbV; const char *p; AB_VALUE *value=NULL; dbV=GWEN_DB_GetGroup(dbTransaction, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "value"); if (dbV) value=AB_Value_fromDb(dbV); if (value==NULL) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Error parsing value from DB"); return NULL; } p=GWEN_DB_GetCharValue(dbTransaction, "debitMark", 0, 0); if (p) { if (strcasecmp(p, "D")==0 || strcasecmp(p, "RC")==0) { AB_Value_Negate(value); } else if (strcasecmp(p, "C")==0 || strcasecmp(p, "RD")==0) { } else { DBG_ERROR(AQHBCI_LOGDOMAIN, "Bad debit mark \"%s\"", p); AB_Value_free(value); return NULL; } } return value; } int _jobApi_GetLimits(AH_JOB *j, AB_TRANSACTION_LIMITS **pLimits) { AB_TRANSACTION_LIMITS *tl; GWEN_DB_NODE *dbParams; dbParams=AH_Job_GetParams(j); tl=AB_TransactionLimits_new(); AB_TransactionLimits_SetCommand(tl, AH_Job_GetSupportedCommand(j)); AB_TransactionLimits_SetMaxValueSetupTime(tl, GWEN_DB_GetIntValue(dbParams, "storeDays", 0, 0)); /* nothing more to set for this kind of job */ *pLimits=tl; return 0; } int _jobApi_HandleCommand(AH_JOB *j, const AB_TRANSACTION *t) { const GWEN_DATE *da; da=AB_Transaction_GetFirstDate(t); if (da) { char dbuf[16]; GWEN_DB_NODE *dbArgs; dbArgs=AH_Job_GetArguments(j); snprintf(dbuf, sizeof(dbuf), "%04d%02d%02d", GWEN_Date_GetYear(da), GWEN_Date_GetMonth(da), GWEN_Date_GetDay(da)); GWEN_DB_SetCharValue(dbArgs, GWEN_DB_FLAGS_OVERWRITE_VARS, "fromDate", dbuf); } da=AB_Transaction_GetLastDate(t); if (da) { char dbuf[16]; GWEN_DB_NODE *dbArgs; dbArgs=AH_Job_GetArguments(j); snprintf(dbuf, sizeof(dbuf), "%04d%02d%02d", GWEN_Date_GetYear(da), GWEN_Date_GetMonth(da), GWEN_Date_GetDay(da)); GWEN_DB_SetCharValue(dbArgs, GWEN_DB_FLAGS_OVERWRITE_VARS, "toDate", dbuf); } return 0; } void _appendBufferToFile(const char *fname, const char *ptr, uint32_t length) { if (ptr && length) { FILE *f; f=fopen(fname, "w+"); if (f) { if (fwrite(ptr, length, 1, f)!=1) { DBG_ERROR(AQHBCI_LOGDOMAIN, "fwrite: %s", strerror(errno)); } if (fclose(f)) { DBG_ERROR(AQHBCI_LOGDOMAIN, "fclose: %s", strerror(errno)); } } } } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/ajobs/jobsepastandingorderget.c0000664000175000017500000001740014300721174024756 00000000000000/*************************************************************************** begin : Sat Aug 03 2014 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "jobsepastandingorderget_l.h" #include "aqhbci/aqhbci_l.h" #include "accountjob_l.h" #include "aqhbci/joblayer/job_l.h" #include "aqhbci/joblayer/job_swift.h" #include "aqhbci/joblayer/job_crypt.h" #include "aqhbci/banking/user_l.h" #include #include #include #include #include #include #include /* ------------------------------------------------------------------------------------------------ * forward declarations * ------------------------------------------------------------------------------------------------ */ static int _jobApi_Prepare(AH_JOB *j); static int _jobApi_Process(AH_JOB *j, AB_IMEXPORTER_CONTEXT *ctx); static AB_TRANSACTION *_readSto(AH_JOB *j, const char *docType, const uint8_t *ptr, uint32_t len); static AB_TRANSACTION_PERIOD _getPeriod(const char *s); static AB_TRANSACTION *_readTransactionFromResponse(AH_JOB *j, GWEN_DB_NODE *dbXA); /* ------------------------------------------------------------------------------------------------ * implementations * ------------------------------------------------------------------------------------------------ */ AH_JOB *AH_Job_SepaStandingOrderGet_new(AB_PROVIDER *pro, AB_USER *u, AB_ACCOUNT *account) { AH_JOB *j; GWEN_DB_NODE *dbArgs; j=AH_AccountJob_new("JobSepaStandingOrderGet", pro, u, account); if (!j) return 0; AH_Job_SetSupportedCommand(j, AB_Transaction_CommandSepaGetStandingOrders); /* overwrite some virtual functions */ AH_Job_SetPrepareFn(j, _jobApi_Prepare); AH_Job_SetProcessFn(j, _jobApi_Process); AH_Job_SetGetLimitsFn(j, AH_Job_GetLimits_EmptyLimits); AH_Job_SetHandleCommandFn(j, AH_Job_HandleCommand_Accept); AH_Job_SetHandleResultsFn(j, AH_Job_HandleResults_Empty); /* set some known arguments */ dbArgs=AH_Job_GetArguments(j); assert(dbArgs); GWEN_DB_SetCharValue(dbArgs, GWEN_DB_FLAGS_DEFAULT, "allAccounts", "N"); return j; } int _jobApi_Prepare(AH_JOB *j) { GWEN_DB_NODE *dbArgs; AB_SWIFT_DESCR_LIST *descrList; DBG_INFO(AQHBCI_LOGDOMAIN, "Preparing job"); /* get arguments DB */ dbArgs=AH_Job_GetArguments(j); assert(dbArgs); /* check for "pain.001.*" (dont use leading zeros because that would make it an octadecimal! */ descrList=AH_Job_GetSwiftDescriptorsSupportedByUser(j, "pain", 1); if (descrList) { AB_SWIFT_DESCR *descr; descr=AB_SwiftDescr_List_First(descrList); while (descr) { const char *s; s=AB_SwiftDescr_GetAlias2(descr); DBG_ERROR(AQHBCI_LOGDOMAIN, "Adding supported PAIN format [%s]", s); GWEN_DB_SetCharValue(dbArgs, GWEN_DB_FLAGS_DEFAULT, "SupportedSepaFormats/Format", s); descr=AB_SwiftDescr_List_Next(descr); } AB_SwiftDescr_List_free(descrList); } else { DBG_ERROR(AQHBCI_LOGDOMAIN, "No supported PAIN profile found, job not supported"); return GWEN_ERROR_GENERIC; } return 0; } int _jobApi_Process(AH_JOB *j, AB_IMEXPORTER_CONTEXT *ctx) { const char *responseName; int rv; AB_ACCOUNT *a; DBG_INFO(AQHBCI_LOGDOMAIN, "Processing JobSepaStandingOrdersGet"); assert(j); a=AH_AccountJob_GetAccount(j); assert(a); responseName=AH_Job_GetResponseName(j); if (responseName && *responseName) { AB_IMEXPORTER_ACCOUNTINFO *ai; GWEN_DB_NODE *dbResponses; GWEN_DB_NODE *dbCurr; ai=AB_Provider_GetOrAddAccountInfoForAccount(ctx, a); dbResponses=AH_Job_GetResponses(j); assert(dbResponses); /* search for "Transactions" */ dbCurr=GWEN_DB_GetFirstGroup(dbResponses); while (dbCurr) { GWEN_DB_NODE *dbXA; rv=AH_Job_CheckEncryption(j, dbCurr); if (rv) { DBG_INFO(AQHBCI_LOGDOMAIN, "Compromised security (encryption)"); AH_Job_SetStatus(j, AH_JobStatusError); return rv; } rv=AH_Job_CheckSignature(j, dbCurr); if (rv) { DBG_INFO(AQHBCI_LOGDOMAIN, "Compromised security (signature)"); AH_Job_SetStatus(j, AH_JobStatusError); return rv; } /* handle job specific response data */ dbXA=GWEN_DB_GetGroup(dbCurr, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "data"); if (dbXA) dbXA=GWEN_DB_GetGroup(dbXA, GWEN_PATH_FLAGS_NAMEMUSTEXIST, responseName); if (dbXA) { AB_TRANSACTION *t; t=_readTransactionFromResponse(j, dbXA); if (t) AB_ImExporterAccountInfo_AddTransaction(ai, t); } /* if dbXA */ dbCurr=GWEN_DB_GetNextGroup(dbCurr); } /* while dbCurr */ } return 0; } AB_TRANSACTION *_readTransactionFromResponse(AH_JOB *j, GWEN_DB_NODE *dbXA) { const char *fiId; const void *p; unsigned int bs; fiId=GWEN_DB_GetCharValue(dbXA, "fiId", 0, NULL); p=GWEN_DB_GetBinValue(dbXA, "transfer", 0, 0, 0, &bs); if (p && bs) { AB_TRANSACTION *t; t=_readSto(j, "sepa", p, bs); /* use generic profile "sepa" */ if (t) { const char *s; AB_Transaction_SetFiId(t, fiId); s=GWEN_DB_GetCharValue(dbXA, "xfirstExecutionDate", 0, NULL); if (s && *s) { GWEN_DATE *dt; dt=GWEN_Date_fromStringWithTemplate(s, "YYYYMMDD"); if (dt) { AB_Transaction_SetFirstDate(t, dt); GWEN_Date_free(dt); } } s=GWEN_DB_GetCharValue(dbXA, "xperiod", 0, NULL); AB_Transaction_SetPeriod(t, _getPeriod(s)); AB_Transaction_SetCycle(t, GWEN_DB_GetIntValue(dbXA, "cycle", 0, 0)); AB_Transaction_SetExecutionDay(t, GWEN_DB_GetIntValue(dbXA, "executionDay", 0, 0)); /* done */ return t; } /* if t */ else { DBG_WARN(AQHBCI_LOGDOMAIN, "Error reading standing order from data, ignoring"); } } /* if transaction bindata */ return NULL; } AB_TRANSACTION *_readSto(AH_JOB *j, const char *docType, const uint8_t *ptr, uint32_t len) { AB_PROVIDER *pro; AB_IMEXPORTER_CONTEXT *tempContext; AB_IMEXPORTER_ACCOUNTINFO *tempAccountInfo; int rv; assert(j); pro=AH_Job_GetProvider(j); assert(pro); /* import data into a temporary context */ tempContext=AB_ImExporterContext_new(); rv=AB_Banking_ImportFromBufferLoadProfile(AB_Provider_GetBanking(pro), "xml", tempContext, docType, NULL, ptr, len); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); AB_ImExporterContext_free(tempContext); return NULL; } /* return first transaction from temporary context (only contains ONE transaction) */ tempAccountInfo=AB_ImExporterContext_GetFirstAccountInfo(tempContext); if (tempAccountInfo) { AB_TRANSACTION *t; t=AB_ImExporterAccountInfo_GetFirstTransaction(tempAccountInfo, 0, 0); if (t) { AB_Transaction_List_Del(t); AB_Transaction_SetType(t, AB_Transaction_TypeStandingOrder); AB_ImExporterContext_free(tempContext); return t; } } AB_ImExporterContext_free(tempContext); return 0; } AB_TRANSACTION_PERIOD _getPeriod(const char *s) { if (s && *s) { if (strcasecmp(s, "M")==0) return AB_Transaction_PeriodMonthly; else if (strcasecmp(s, "W")==0) return AB_Transaction_PeriodWeekly; } return AB_Transaction_PeriodUnknown; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/ajobs/jobsepastandingordermodify.c0000664000175000017500000000264414300721174025472 00000000000000/*************************************************************************** begin : Wed Jan 15 2014 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "jobsepastandingordermodify_l.h" #include "jobtransferbase_l.h" AH_JOB *AH_Job_SepaStandingOrderModify_new(AB_PROVIDER *pro, AB_USER *u, AB_ACCOUNT *account) { AH_JOB *j; j=AH_Job_TransferBase_new("JobSepaStandingOrderModify", AB_Transaction_TypeTransfer, AB_Transaction_SubTypeStandingOrder, pro, u, account); if (!j) return 0; AH_Job_SetChallengeClass(j, 35); AH_Job_SetSupportedCommand(j, AB_Transaction_CommandSepaModifyStandingOrder); /* overwrite some virtual functions (use those from AH_Job_SepaStandingOrderCreate) */ AH_Job_SetPrepareFn(j, AH_Job_TransferBase_Prepare_SepaStandingOrder); AH_Job_SetAddChallengeParamsFn(j, AH_Job_TransferBase_AddChallengeParams35); AH_Job_SetGetLimitsFn(j, AH_Job_TransferBase_GetLimits_SepaStandingOrder); AH_Job_SetHandleCommandFn(j, AH_Job_TransferBase_HandleCommand_SepaStandingOrder); return j; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/ajobs/jobsepadebitdatedsinglecreate.c0000664000175000017500000000532014300721174026070 00000000000000/*************************************************************************** begin : Tue Dec 31 2013 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "jobsepadebitdatedsinglecreate_l.h" #include "jobtransferbase_l.h" #include "aqhbci/aqhbci_l.h" #include "accountjob_l.h" #include "aqhbci/joblayer/job_l.h" #include "aqhbci/banking/user_l.h" #include "aqhbci/banking/provider_l.h" #include "aqhbci/applayer/hhd_l.h" #include #include #include #include #include /* ------------------------------------------------------------------------------------------------ * forward declarations * ------------------------------------------------------------------------------------------------ */ static int _jobApi_Prepare(AH_JOB *j); /* ------------------------------------------------------------------------------------------------ * implementations * ------------------------------------------------------------------------------------------------ */ AH_JOB *AH_Job_SepaDebitDatedSingleCreate_new(AB_PROVIDER *pro, AB_USER *u, AB_ACCOUNT *account) { AH_JOB *j; GWEN_DB_NODE *dbArgs; j=AH_Job_TransferBase_new("JobSepaDebitDatedSingleCreate", AB_Transaction_TypeDebitNote, AB_Transaction_SubTypeStandard, pro, u, account); if (!j) return 0; AH_Job_SetChallengeClass(j, 29); AH_Job_SetSupportedCommand(j, AB_Transaction_CommandSepaDebitNote); /* overwrite some virtual functions */ AH_Job_SetPrepareFn(j, _jobApi_Prepare); AH_Job_SetAddChallengeParamsFn(j, AH_Job_TransferBase_AddChallengeParams29); AH_Job_SetGetLimitsFn(j, AH_Job_TransferBase_GetLimits_SepaDated); AH_Job_SetHandleCommandFn(j, AH_Job_TransferBase_HandleCommand_SepaDatedDebit); /* set some known arguments */ dbArgs=AH_Job_GetArguments(j); assert(dbArgs); return j; } int _jobApi_Prepare(AH_JOB *j) { int rv; DBG_INFO(AQHBCI_LOGDOMAIN, "Preparing transfer"); /* select pain profile from group "008" */ rv=AH_Job_TransferBase_SelectPainProfile(j, 8); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } /* export transfers to SEPA */ rv=AH_Job_TransferBase_SepaExportTransactions(j); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/ajobs/jobsepastandingordermodify.xml0000664000175000017500000000605314043610745026053 00000000000000 %code %version %code %version %code %version %code %version aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/ajobs/jobsepaxfersingle.c0000664000175000017500000000732614300721174023567 00000000000000/*************************************************************************** begin : Tue Dec 31 2013 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "jobsepaxfersingle_l.h" #include "jobtransferbase_l.h" #include "aqhbci_l.h" #include "accountjob_l.h" #include "aqhbci/joblayer/job_l.h" #include "aqhbci/banking/user_l.h" #include "aqhbci/banking/provider_l.h" #include "aqhbci/applayer/hhd_l.h" #include #include #include #include #include /* ------------------------------------------------------------------------------------------------ * forward declarations * ------------------------------------------------------------------------------------------------ */ static int _jobApi_Prepare(AH_JOB *j); static int _jobApi_AddChallengeParams(AH_JOB *j, int hkTanVer, GWEN_DB_NODE *dbMethod); /* ------------------------------------------------------------------------------------------------ * implementations * ------------------------------------------------------------------------------------------------ */ AH_JOB *AH_Job_SepaTransferSingle_new(AB_PROVIDER *pro, AB_USER *u, AB_ACCOUNT *account) { AH_JOB *j; j=AH_Job_TransferBase_new("JobSepaTransferSingle", AB_Transaction_TypeTransfer, AB_Transaction_SubTypeStandard, pro, u, account); if (!j) return 0; AH_Job_SetChallengeClass(j, 9); AH_Job_SetSupportedCommand(j, AB_Transaction_CommandSepaTransfer); /* overwrite some virtual functions */ AH_Job_SetPrepareFn(j, _jobApi_Prepare); AH_Job_SetAddChallengeParamsFn(j, _jobApi_AddChallengeParams); AH_Job_SetHandleCommandFn(j, AH_Job_TransferBase_HandleCommand_SepaUndated); AH_Job_SetGetLimitsFn(j, AH_Job_TransferBase_GetLimits_SepaUndated); return j; } int _jobApi_AddChallengeParams(AH_JOB *j, int hkTanVer, GWEN_DB_NODE *dbMethod) { const AB_TRANSACTION *t; const char *s; int tanVer=AH_JOB_TANVER_1_4; DBG_ERROR(AQHBCI_LOGDOMAIN, "AddChallengeParams function called"); t=AH_Job_GetFirstTransfer(j); if (t==NULL) { DBG_ERROR(AQHBCI_LOGDOMAIN, "No validated transaction"); return GWEN_ERROR_INVALID; } s=GWEN_DB_GetCharValue(dbMethod, "zkaTanVersion", 0, NULL); if (s && *s && strncasecmp(s, "1.3", 3)==0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "TAN version is 1.3 (%s)", s); tanVer=AH_JOB_TANVER_1_3; } if (tanVer==AH_JOB_TANVER_1_4) { int rv; DBG_ERROR(AQHBCI_LOGDOMAIN, "TAN version is 1.4.x"); rv=AH_HHD14_AddChallengeParams_09(j, AB_Transaction_GetValue(t), AB_Transaction_GetRemoteIban(t)); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } } else { DBG_ERROR(AQHBCI_LOGDOMAIN, "Unhandled tan version %d for now", tanVer); return GWEN_ERROR_INTERNAL; } return 0; } int _jobApi_Prepare(AH_JOB *j) { int rv; DBG_INFO(AQHBCI_LOGDOMAIN, "Preparing transfer"); /* select pain profile from group "001" */ rv=AH_Job_TransferBase_SelectPainProfile(j, 1); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } /* export transfers to SEPA */ rv=AH_Job_TransferBase_SepaExportTransactions(j); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/ajobs/jobsepainternalxfer_l.h0000664000175000017500000000123514156464025024443 00000000000000/*************************************************************************** begin : Tue Oct 12 2021 copyright : (C) 2021 by Stefan Bayer, Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_JOBSEPAINTERNALXFER_L_H #define AH_JOBSEPAINTERNALXFER_L_H #include "accountjob_l.h" AH_JOB *AH_Job_SepaInternalTransfer_new(AB_PROVIDER *pro, AB_USER *u, AB_ACCOUNT *account); #endif /* AH_JOBSEPAXFERSINGLE_L_H */ aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/ajobs/Makefile.am0000664000175000017500000000607314300721174021743 00000000000000 AM_CFLAGS=-DBUILDING_AQBANKING @visibility_cflags@ AM_CPPFLAGS = -I$(top_srcdir)/src/libs -I$(top_builddir)/src/libs $(gwenhywfar_includes) \ -I$(srcdir)/../../ \ -I$(srcdir)/../joblayer \ -I$(srcdir)/../msglayer \ -I$(srcdir)/../banking \ -I$(srcdir)/../applayer \ -I$(srcdir)/../tan \ -I$(srcdir)/.. noinst_LTLIBRARIES=libhbciaccjobs.la noinst_HEADERS=\ accountjob_l.h \ accountjob_p.h \ jobgetbalance_l.h \ jobgettransactions_l.h \ jobgettrans_camt_l.h \ jobforeignxferwh_l.h \ jobforeignxferwh_p.h \ jobloadcellphone_l.h \ jobloadcellphone_p.h \ jobsepadebitdatedsinglecreate_l.h \ jobsepadebitdatedmulticreate_l.h \ jobsepadebitdatedmulticreate_p.h \ jobsepacor1datedmulticreate_l.h \ jobsepacor1datedmulticreate_p.h \ jobsepaxfermulti_l.h \ jobsepaxfermulti_p.h \ jobsepaxfersingle_l.h \ jobsepadebitsingle_l.h \ jobsepacor1datedsinglecreate_l.h \ jobtransferbase_l.h jobtransferbase_p.h \ jobsepastandingordercreate_l.h \ jobsepastandingorderget_l.h \ jobsepastandingordermodify_l.h \ jobsepastandingorderdelete_l.h \ jobgetestatements_l.h \ jobgetdepot_l.h \ jobsepainternalxfer_l.h libhbciaccjobs_la_SOURCES=\ accountjob.c \ jobgetbalance.c \ jobgettransactions.c \ jobgettrans_camt.c \ jobforeignxferwh.c \ jobloadcellphone.c \ jobsepadebitdatedsinglecreate.c \ jobsepadebitdatedmulticreate.c \ jobsepacor1datedmulticreate.c \ jobsepaxfermulti.c \ jobsepaxfersingle.c \ jobsepadebitsingle.c \ jobsepacor1datedsinglecreate.c \ jobtransferbase.c \ jobsepastandingordercreate.c \ jobsepastandingorderget.c \ jobsepastandingordermodify.c \ jobsepastandingorderdelete.c \ jobgetestatements.c \ jobgetdepot.c \ jobsepainternalxfer.c sources: for f in $(libhbciaccjobs_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d sources; \ done xmlfiles=\ $(srcdir)/jobgetbalance.xml \ $(srcdir)/jobgettransactions.xml \ $(srcdir)/jobgettrans_camt.xml \ $(srcdir)/jobforeignxferwh.xml \ $(srcdir)/jobloadcellphone.xml \ $(srcdir)/jobsepadebitdatedsinglecreate.xml \ $(srcdir)/jobsepadebitdatedmulticreate.xml \ $(srcdir)/jobsepacor1datedmulticreate.xml \ $(srcdir)/jobsepaxfermulti.xml \ $(srcdir)/jobsepaxfersingle.xml \ $(srcdir)/jobsepadebitsingle.xml \ $(srcdir)/jobsepacor1datedsinglecreate.xml \ $(srcdir)/jobsepastandingordercreate.xml \ $(srcdir)/jobsepastandingorderget.xml \ $(srcdir)/jobsepastandingordermodify.xml \ $(srcdir)/jobsepastandingorderdelete.xml \ $(srcdir)/jobgetestatements.xml \ $(srcdir)/jobgetestatements2.xml \ $(srcdir)/jobgetdepot.xml \ $(srcdir)/jobsepainternalxfer.xml EXTRA_DIST=$(xmlfiles) accountjobs.xml: $(xmlfiles) $(XMLMERGE) -v --compact -o $@ $(xmlfiles) all-local: accountjobs.xml CLEANFILES = accountjobs.xml typefiles: for d in $(SUBDIRS); do \ $(MAKE) -C $$d typefiles; \ done typedefs: for d in $(SUBDIRS); do \ $(MAKE) -C $$d typedefs; \ done cppcheck: for f in $(libhbciaccjobs_la_SOURCES); do \ cppcheck --force $$f ; \ done aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/ajobs/jobtransferbase_p.h0000664000175000017500000000153014275012617023550 00000000000000/*************************************************************************** begin : Tue Dec 31 2013 copyright : (C) 2022 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_JOBTRANSFERBASE_P_H #define AH_JOBTRANSFERBASE_P_H #include "jobtransferbase_l.h" #include typedef struct AH_JOB_TRANSFERBASE AH_JOB_TRANSFERBASE; struct AH_JOB_TRANSFERBASE { AB_TRANSACTION_TYPE transactionType; AB_TRANSACTION_SUBTYPE transactionSubType; char *fiid; char *descriptor; char *profileName; char *localInstrumentationCode; }; #endif /* AH_JOBTRANSFERBASE_P_H */ aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/ajobs/jobsepastandingorderdelete.c0000664000175000017500000000265114300721174025443 00000000000000/*************************************************************************** begin : Wed Jan 15 2014 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "jobsepastandingorderdelete_l.h" #include "jobtransferbase_l.h" AH_JOB *AH_Job_SepaStandingOrderDelete_new(AB_PROVIDER *pro, AB_USER *u, AB_ACCOUNT *account) { AH_JOB *j; j=AH_Job_TransferBase_new("JobSepaStandingOrderDelete", AB_Transaction_TypeTransfer, AB_Transaction_SubTypeStandingOrder, pro, u, account); if (!j) return 0; AH_Job_SetChallengeClass(j, 35); AH_Job_SetSupportedCommand(j, AB_Transaction_CommandSepaDeleteStandingOrder); /* overwrite some virtual functions (use those from AH_Job_SepaStandingOrderCreate) */ AH_Job_SetPrepareFn(j, AH_Job_TransferBase_Prepare_SepaStandingOrder); AH_Job_SetAddChallengeParamsFn(j, AH_Job_TransferBase_AddChallengeParams35); AH_Job_SetGetLimitsFn(j, AH_Job_TransferBase_GetLimits_SepaStandingOrder); AH_Job_SetHandleCommandFn(j, AH_Job_TransferBase_HandleCommand_SepaStandingOrder); return j; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/ajobs/jobsepainternalxfer.c0000664000175000017500000000735114300721174024120 00000000000000/*************************************************************************** begin : Tue Oct 12 2021 copyright : (C) 2021 by Stefan Bayer, Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "jobsepainternalxfer_l.h" #include "jobtransferbase_l.h" #include "aqhbci_l.h" #include "accountjob_l.h" #include "aqhbci/joblayer/job_l.h" #include "aqhbci/banking/user_l.h" #include "aqhbci/banking/provider_l.h" #include "aqhbci/applayer/hhd_l.h" #include #include #include #include #include /* ------------------------------------------------------------------------------------------------ * forward declarations * ------------------------------------------------------------------------------------------------ */ static int _jobApi_Prepare(AH_JOB *j); static int _jobApi_AddChallengeParams(AH_JOB *j, int hkTanVer, GWEN_DB_NODE *dbMethod); /* ------------------------------------------------------------------------------------------------ * implementations * ------------------------------------------------------------------------------------------------ */ AH_JOB *AH_Job_SepaInternalTransfer_new(AB_PROVIDER *pro, AB_USER *u, AB_ACCOUNT *account) { AH_JOB *j; j=AH_Job_TransferBase_new("JobSepaInternalTransfer", AB_Transaction_TypeTransfer, AB_Transaction_SubTypeStandard, pro, u, account); if (!j) return 0; AH_Job_SetChallengeClass(j, 9); AH_Job_SetSupportedCommand(j, AB_Transaction_CommandSepaInternalTransfer); /* overwrite some virtual functions */ AH_Job_SetPrepareFn(j, _jobApi_Prepare); AH_Job_SetAddChallengeParamsFn(j, _jobApi_AddChallengeParams); AH_Job_SetHandleCommandFn(j, AH_Job_TransferBase_HandleCommand_SepaUndated); AH_Job_SetGetLimitsFn(j, AH_Job_TransferBase_GetLimits_SepaUndated); return j; } int _jobApi_AddChallengeParams(AH_JOB *j, int hkTanVer, GWEN_DB_NODE *dbMethod) { const AB_TRANSACTION *t; const char *s; int tanVer=AH_JOB_TANVER_1_4; DBG_ERROR(AQHBCI_LOGDOMAIN, "AddChallengeParams function called"); t=AH_Job_GetFirstTransfer(j); if (t==NULL) { DBG_ERROR(AQHBCI_LOGDOMAIN, "No validated transaction"); return GWEN_ERROR_INVALID; } s=GWEN_DB_GetCharValue(dbMethod, "zkaTanVersion", 0, NULL); if (s && *s && strncasecmp(s, "1.3", 3)==0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "TAN version is 1.3 (%s)", s); tanVer=AH_JOB_TANVER_1_3; } if (tanVer==AH_JOB_TANVER_1_4) { int rv; DBG_ERROR(AQHBCI_LOGDOMAIN, "TAN version is 1.4.x"); rv=AH_HHD14_AddChallengeParams_09(j, AB_Transaction_GetValue(t), AB_Transaction_GetRemoteIban(t)); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } } else { DBG_ERROR(AQHBCI_LOGDOMAIN, "Unhandled tan version %d for now", tanVer); return GWEN_ERROR_INTERNAL; } return 0; } int _jobApi_Prepare(AH_JOB *j) { int rv; DBG_INFO(AQHBCI_LOGDOMAIN, "Preparing transfer"); /* select pain profile from group "001" */ rv=AH_Job_TransferBase_SelectPainProfile(j, 1); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } /* export transfers to SEPA */ rv=AH_Job_TransferBase_SepaExportTransactions(j); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/ajobs/jobsepacor1datedsinglecreate.xml0000664000175000017500000000472714043610745026242 00000000000000 %code %version %code %version %code %version %code %version aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/ajobs/accountjob.c0000664000175000017500000001531414214726437022213 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "accountjob_p.h" #include "aqhbci/aqhbci_l.h" #include "aqhbci/joblayer/job_l.h" #include #include #include #include #include #include GWEN_INHERIT(AH_JOB, AH_ACCOUNTJOB); /* ------------------------------------------------------------------------------------------------ * forward declarations * ------------------------------------------------------------------------------------------------ */ static int _getJobVersionToUse(const char *name, AB_USER *u, const AB_ACCOUNT *account); /* ------------------------------------------------------------------------------------------------ * implementations * ------------------------------------------------------------------------------------------------ */ AH_JOB *AH_AccountJob_new(const char *name, AB_PROVIDER *pro, AB_USER *u, AB_ACCOUNT *account) { AH_ACCOUNTJOB *aj; AH_JOB *j; GWEN_DB_NODE *dbArgs; const char *s; const char *sAccountNumOrIban=NULL; int jobVersion=0; assert(name); assert(u); assert(account); /* this might later be removed, since all accounts should now have a suffix reported by the bank, * and if an account doesn't, it is just not needed anymore */ jobVersion=_getJobVersionToUse(name, u, account); if (jobVersion<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here"); return NULL; } j=AH_Job_new(name, pro, u, account, jobVersion); if (!j) return 0; GWEN_NEW_OBJECT(AH_ACCOUNTJOB, aj); GWEN_INHERIT_SETDATA(AH_JOB, AH_ACCOUNTJOB, j, aj, AH_AccountJob_FreeData); aj->account=account; /* set some known arguments */ dbArgs=AH_Job_GetArguments(j); assert(dbArgs); s=AB_Account_GetAccountNumber(account); if (s && *s) { GWEN_DB_SetCharValue(dbArgs, GWEN_DB_FLAGS_DEFAULT, "accountId", s); sAccountNumOrIban=s; } s=AB_Account_GetSubAccountId(account); if (s && *s) GWEN_DB_SetCharValue(dbArgs, GWEN_DB_FLAGS_DEFAULT, "accountSubId", s); s=AB_Account_GetBankCode(account); if (s && *s) GWEN_DB_SetCharValue(dbArgs, GWEN_DB_FLAGS_DEFAULT, "bankCode", s); GWEN_DB_SetIntValue(dbArgs, GWEN_DB_FLAGS_DEFAULT, "country", 280); /* new for SEPA jobs */ s=AB_Account_GetIban(account); if (s && *s) { GWEN_DB_SetCharValue(dbArgs, GWEN_DB_FLAGS_DEFAULT, "iban", s); sAccountNumOrIban=s; } s=AB_Account_GetBic(account); if (s && *s) GWEN_DB_SetCharValue(dbArgs, GWEN_DB_FLAGS_DEFAULT, "bic", s); else { DBG_WARN(AQHBCI_LOGDOMAIN, "No BIC in account \"%s\", maybe you need to request SEPA infos for your account?", sAccountNumOrIban?sAccountNumOrIban:""); #if 0 GWEN_Gui_ProgressLog2(0, GWEN_LoggerLevel_Info, I18N("No SWIFT-BIC in account \"%s\", maybe you need to request SEPA info for this account?"), sAccountNumOrIban?sAccountNumOrIban:""); #endif } return j; } AB_ACCOUNT *AH_AccountJob_GetAccount(const AH_JOB *j) { AH_ACCOUNTJOB *aj; assert(j); aj=GWEN_INHERIT_GETDATA(AH_JOB, AH_ACCOUNTJOB, j); assert(aj); return aj->account; } void GWENHYWFAR_CB AH_AccountJob_FreeData(void *bp, void *p) { AH_ACCOUNTJOB *aj; aj=(AH_ACCOUNTJOB *)p; GWEN_FREE_OBJECT(aj); } int AH_AccountJob_IsAccountJob(const AH_JOB *j) { return GWEN_INHERIT_ISOFTYPE(AH_JOB, AH_ACCOUNTJOB, j); } int _getJobVersionToUse(const char *name, AB_USER *u, const AB_ACCOUNT *account) { int jobVersion=0; if (!(AH_Account_GetFlags(account) & AH_BANK_FLAGS_KTV2)) { int maxVer=0; /* no account suffix, so we try to determine the highest usable * version of the job which still doesn't need the suffix */ DBG_NOTICE(AQHBCI_LOGDOMAIN, "No account suffix [%u], determining highest possible job version for \"%s\" (%08x)", AB_Account_GetUniqueId(account), name, AH_Account_GetFlags(account)); if (strcasecmp(name, "JobGetTransactions")==0) maxVer=4; else if (strcasecmp(name, "JobGetBalance")==0) maxVer=4; else if (strcasecmp(name, "JobSingleTransfer")==0) maxVer=3; else if (strcasecmp(name, "JobSingleDebitNote")==0) maxVer=3; else if (strcasecmp(name, "JobInternalTransfer")==0 || strcasecmp(name, "JobLoadCellPhone")==0) /* this job needs a suffix, so if there is none you don't get it */ maxVer=-1; else if (strcasecmp(name, "JobGetDatedTransfers")==0) maxVer=1; else if (strcasecmp(name, "JobCreateDatedTransfer")==0) maxVer=2; else if (strcasecmp(name, "JobModifyDatedTransfer")==0) maxVer=2; else if (strcasecmp(name, "JobDeleteDatedTransfer")==0) maxVer=1; else if (strcasecmp(name, "JobCreateStandingOrder")==0) maxVer=2; else if (strcasecmp(name, "JobModifyStandingOrder")==0) maxVer=2; else if (strcasecmp(name, "JobDeleteStandingOrder")==0) maxVer=1; if (maxVer==-1) { DBG_ERROR(AQHBCI_LOGDOMAIN, "This job needs an account suffix, but your bank didn't provide one. " "Therefore this job is not supported with your account."); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("This job needs an account suffix, but your bank did not provide one. " "Therefore this job is not supported with your account.\n" "Setting a higher HBCI version in the user settings might fix " "the problem.")); return GWEN_ERROR_GENERIC; } if (maxVer>0) { jobVersion=AH_Job_GetMaxVersionUpUntil(name, u, maxVer); if (jobVersion<1) { DBG_ERROR(AQHBCI_LOGDOMAIN, "No job [%s] below version %d, falling back to 0", name, maxVer); GWEN_Gui_ProgressLog2(0, GWEN_LoggerLevel_Warning, "No version for job [%s] up to %d found, falling back to 0", name, maxVer); jobVersion=0; } else { DBG_INFO(AQHBCI_LOGDOMAIN, "Reducing version of job [%s] to %d", name, jobVersion); } } } return jobVersion; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/ajobs/jobsepadebitdatedmulticreate_p.h0000664000175000017500000000161714300721174026272 00000000000000/*************************************************************************** begin : Tue Dec 31 2013 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_JOBSEPADEBITDATEDMULTICREATE_P_H #define AH_JOBSEPADEBITDATEDMULTICREATE_P_H #include "jobsepadebitdatedmulticreate_l.h" #include #include typedef struct AH_JOB_CREATESEPAMULTIDEBIT AH_JOB_CREATESEPAMULTIDEBIT; struct AH_JOB_CREATESEPAMULTIDEBIT { char *fiid; int sumFieldNeeded; int singleBookingAllowed; AB_VALUE *sumValues; char *localIban; }; #endif /* AH_JOBSEPADEBITDATEDMULTICREATE_P_H */ aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/ajobs/jobsepadebitdatedmulticreate.xml0000664000175000017500000000466714043610745026341 00000000000000 %code %version %code %version %code %version %code %version aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/ajobs/jobsepaxfermulti_p.h0000664000175000017500000000147414300721174023762 00000000000000/*************************************************************************** begin : Tue Dec 31 2013 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_JOBSEPAXFERMULTI_P_H #define AH_JOBSEPAXFERMULTI_P_H #include "jobsepaxfermulti_l.h" #include #include typedef struct AH_JOB_SEPAXFERMULTI AH_JOB_SEPAXFERMULTI; struct AH_JOB_SEPAXFERMULTI { int sumFieldNeeded; int singleBookingAllowed; AB_VALUE *sumValues; char *localIban; }; #endif /* AH_JOBSEPAXFERMULTI_P_H */ aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/ajobs/jobsepadebitsingle.xml0000664000175000017500000000347014043610745024271 00000000000000 %code %version %code %version %code %version %code %version aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/ajobs/jobsepastandingorderget.xml0000664000175000017500000000700614043610745025342 00000000000000 %code %version %code %version %code %version %code %version aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/ajobs/jobsepaxfermulti.c0000664000175000017500000001517714300721174023443 00000000000000/*************************************************************************** begin : Wed Jan 08 2014 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "jobsepaxfermulti_p.h" #include "jobtransferbase_l.h" #include "aqhbci/aqhbci_l.h" #include "accountjob_l.h" #include "aqhbci/joblayer/job_l.h" #include "aqhbci/banking/user_l.h" #include "aqhbci/banking/provider_l.h" #include "aqhbci/applayer/hhd_l.h" #include #include #include #include #include #include GWEN_INHERIT(AH_JOB, AH_JOB_SEPAXFERMULTI); /* ------------------------------------------------------------------------------------------------ * forward declarations * ------------------------------------------------------------------------------------------------ */ static void GWENHYWFAR_CB _jobApi_FreeData(void *bp, void *p); static int _jobApi_AddChallengeParams(AH_JOB *j, int hkTanVer, GWEN_DB_NODE *dbMethod); static int _jobApi_Prepare(AH_JOB *j); /* ------------------------------------------------------------------------------------------------ * implementations * ------------------------------------------------------------------------------------------------ */ AH_JOB *AH_Job_SepaTransferMulti_new(AB_PROVIDER *pro, AB_USER *u, AB_ACCOUNT *account) { AH_JOB *j; AH_JOB_SEPAXFERMULTI *aj; GWEN_DB_NODE *dbParams; const char *s; j=AH_Job_TransferBase_new("JobSepaTransferMulti", AB_Transaction_TypeTransfer, AB_Transaction_SubTypeStandard, pro, u, account); if (!j) return 0; AH_Job_SetChallengeClass(j, 13); GWEN_NEW_OBJECT(AH_JOB_SEPAXFERMULTI, aj); GWEN_INHERIT_SETDATA(AH_JOB, AH_JOB_SEPAXFERMULTI, j, aj, _jobApi_FreeData); AH_Job_SetSupportedCommand(j, AB_Transaction_CommandSepaTransfer); /* overwrite some virtual functions */ AH_Job_SetPrepareFn(j, _jobApi_Prepare); AH_Job_SetGetLimitsFn(j, AH_Job_TransferBase_GetLimits_SepaUndated); AH_Job_SetHandleCommandFn(j, AH_Job_TransferBase_HandleCommand_SepaUndated); AH_Job_SetAddChallengeParamsFn(j, _jobApi_AddChallengeParams); /* get params */ dbParams=AH_Job_GetParams(j); assert(dbParams); AH_Job_SetMaxTransfers(j, GWEN_DB_GetIntValue(dbParams, "maxTransfers", 0, 0)); s=GWEN_DB_GetCharValue(dbParams, "sumFieldNeeded", 0, "j"); if (s && toupper(*s)=='J') aj->sumFieldNeeded=1; else aj->sumFieldNeeded=0; s=GWEN_DB_GetCharValue(dbParams, "singleBookingAllowed", 0, "j"); if (s && toupper(*s)=='J') aj->singleBookingAllowed=1; else aj->singleBookingAllowed=0; return j; } void GWENHYWFAR_CB _jobApi_FreeData(void *bp, void *p) { AH_JOB_SEPAXFERMULTI *aj; aj=(AH_JOB_SEPAXFERMULTI *)p; AB_Value_free(aj->sumValues); GWEN_FREE_OBJECT(aj); } int _jobApi_AddChallengeParams(AH_JOB *j, int hkTanVer, GWEN_DB_NODE *dbMethod) { AH_JOB_SEPAXFERMULTI *aj; const AB_TRANSACTION *t; const char *s; int tanVer=AH_JOB_TANVER_1_4; DBG_ERROR(AQHBCI_LOGDOMAIN, "AddChallengeParams function called"); assert(j); aj=GWEN_INHERIT_GETDATA(AH_JOB, AH_JOB_SEPAXFERMULTI, j); assert(aj); /* get data from first transaction */ t=AH_Job_GetFirstTransfer(j); if (t==NULL) { DBG_ERROR(AQHBCI_LOGDOMAIN, "No validated transaction"); return GWEN_ERROR_INVALID; } s=GWEN_DB_GetCharValue(dbMethod, "zkaTanVersion", 0, NULL); if (s && *s && strncasecmp(s, "1.3", 3)==0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "TAN version is 1.3 (%s)", s); tanVer=AH_JOB_TANVER_1_3; } if (tanVer==AH_JOB_TANVER_1_4) { int rv; DBG_ERROR(AQHBCI_LOGDOMAIN, "TAN version is 1.4.x"); rv=AH_HHD14_AddChallengeParams_13(j, AH_Job_GetTransferCount(j), aj->sumValues, AB_Transaction_GetLocalIban(t)); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } } else { DBG_ERROR(AQHBCI_LOGDOMAIN, "Unhandled tan version %d for now", tanVer); return GWEN_ERROR_INTERNAL; } return 0; } int _jobApi_Prepare(AH_JOB *j) { AH_JOB_SEPAXFERMULTI *aj; GWEN_DB_NODE *dbArgs; int rv; AB_TRANSACTION *t; DBG_INFO(AQHBCI_LOGDOMAIN, "Preparing transfers"); assert(j); aj=GWEN_INHERIT_GETDATA(AH_JOB, AH_JOB_SEPAXFERMULTI, j); assert(aj); dbArgs=AH_Job_GetArguments(j); /* calculate sum */ AB_Value_free(aj->sumValues); aj->sumValues=AB_Value_new(); AB_Value_SetCurrency(aj->sumValues, "EUR"); t=AH_Job_GetFirstTransfer(j); if (t==NULL) { DBG_ERROR(AQHBCI_LOGDOMAIN, "No transaction in job"); return GWEN_ERROR_INTERNAL; } while (t) { const AB_VALUE *v; v=AB_Transaction_GetValue(t); if (v) { const char *s; s=AB_Value_GetCurrency(v); if (s && strcmp(s, "EUR")) { DBG_ERROR(AQHBCI_LOGDOMAIN, "EUR required in SEPA transactions (%s)", s); return GWEN_ERROR_BAD_DATA; } AB_Value_AddValue(aj->sumValues, v); } t=AB_Transaction_List_Next(t); } rv=AH_Job_TransferBase_SelectPainProfile(j, 1); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } /* set singleBookingWanted */ GWEN_DB_SetCharValue(dbArgs, GWEN_DB_FLAGS_OVERWRITE_VARS, "singleBookingWanted", (aj->singleBookingAllowed)?"J":"N"); /* export transfers to SEPA */ rv=AH_Job_TransferBase_SepaExportTransactions(j); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } /* store sum value */ if (1) { GWEN_DB_NODE *dbV; GWEN_BUFFER *nbuf; const char *s; dbV=GWEN_DB_GetGroup(dbArgs, GWEN_DB_FLAGS_OVERWRITE_GROUPS, "totalSum"); assert(dbV); nbuf=GWEN_Buffer_new(0, 32, 0, 1); AB_Value_toHbciString(aj->sumValues, nbuf); if (GWEN_Buffer_GetUsedBytes(nbuf)<1) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Error in conversion"); GWEN_Buffer_free(nbuf); return GWEN_ERROR_BAD_DATA; } /* store value */ GWEN_DB_SetCharValue(dbV, GWEN_DB_FLAGS_OVERWRITE_VARS, "value", GWEN_Buffer_GetStart(nbuf)); GWEN_Buffer_free(nbuf); /* store currency */ s=AB_Value_GetCurrency(aj->sumValues); assert(s); GWEN_DB_SetCharValue(dbV, GWEN_DB_FLAGS_OVERWRITE_VARS, "currency", s); } return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/ajobs/jobgetestatements.xml0000664000175000017500000001214214043610745024157 00000000000000 %code %version %code %version %code %version %code %version %code %version %code %version aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/ajobs/jobsepaxfermulti.xml0000664000175000017500000000333614043610745024020 00000000000000 %code %version %code %version %code %version aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/ajobs/jobgettrans_camt.xml0000664000175000017500000000470214043610745023761 00000000000000 %code %version N %code %version %code %version %code %version N aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/ajobs/accountjob_l.h0000664000175000017500000000162314044534775022534 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_ACCOUNTJOBS_L_H #define AH_ACCOUNTJOBS_L_H #include "aqhbci/joblayer/job_l.h" #include #include AH_JOB *AH_AccountJob_new(const char *name, AB_PROVIDER *pro, AB_USER *u, AB_ACCOUNT *account); int AH_AccountJob_IsAccountJob(const AH_JOB *j); AB_ACCOUNT *AH_AccountJob_GetAccount(const AH_JOB *j); #endif /* AH_ACCOUNTJOBS_L_H */ aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/ajobs/jobgetbalance.xml0000664000175000017500000002625614043610745023223 00000000000000 %code %version %code %version %code %version %code %version %code %version %code %version %code %version %code %version %code %version %code %version %code %version %code %version %code %version %code %version %code %version %code %version aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/ajobs/jobgetdepot.xml0000664000175000017500000000360014043610745022735 00000000000000 %code %version %code %version %code %version %code %version N aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/ajobs/jobgettransactions.xml0000664000175000017500000004234214043610745024340 00000000000000 %code %version %code %version %code %version %code %version %code %version %code %version %code %version N %code %version %code %version %code %version %code %version %code %version N %code %version %code %version %code %version N %code %version %code %version %code %version %code %version %code %version %code %version N %code %version N %code %version N aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/ajobs/jobforeignxferwh_p.h0000664000175000017500000000171514043610745023752 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2004-2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_JOB_FOREIGNXFERWH_P_H #define AH_JOB_FOREIGNXFERWH_P_H #include "jobforeignxferwh_l.h" #include #define AH_JOBFOREIGNXFERWH_MAXTRANS 256 typedef struct AH_JOB_FOREIGNXFERWH AH_JOB_FOREIGNXFERWH; struct AH_JOB_FOREIGNXFERWH { int maxTransfers; }; static void GWENHYWFAR_CB AH_Job_ForeignTransferWH_FreeData(void *bp, void *p); static int AH_Job_ForeignTransferWH_Process(AH_JOB *j, AB_IMEXPORTER_CONTEXT *ctx); #endif /* AH_JOB_FOREIGNXFERWH_P_H */ aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/ajobs/jobsepacor1datedmulticreate_l.h0000664000175000017500000000127314043610745026046 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_JOBSEPACOR1DATEDMULTICREATE_L_H #define AH_JOBSEPACOR1DATEDMULTICREATE_L_H #include "accountjob_l.h" AH_JOB *AH_Job_SepaCor1DebitDatedMultiCreate_new(AB_PROVIDER *pro, AB_USER *u, AB_ACCOUNT *account); #endif /* AH_JOBSEPACOR1DATEDMULTICREATE_L_H */ aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/ajobs/jobforeignxferwh.xml0000664000175000017500000001041214043610745023776 00000000000000 %code %version %code %version %code %version %code %version %code %version %code %version %code %version %code %version aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/ajobs/jobsepastandingordercreate.xml0000664000175000017500000000472114043610745026027 00000000000000 %code %version %code %version %code %version %code %version aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/ajobs/jobsepastandingorderdelete_l.h0000664000175000017500000000125014043610745025762 00000000000000/*************************************************************************** begin : Wed Jan 15 2014 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_JOBSEPASTANDINGORDERDELETE_L_H #define AH_JOBSEPASTANDINGORDERDELETE_L_H #include "accountjob_l.h" AH_JOB *AH_Job_SepaStandingOrderDelete_new(AB_PROVIDER *pro, AB_USER *u, AB_ACCOUNT *account); #endif /* AH_JOBSEPASTANDINGORDERDELETE_L_H */ aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/ajobs/jobloadcellphone_l.h0000664000175000017500000000121214043610745023672 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_JOBLOADCELLPHONE_L_H #define AH_JOBLOADCELLPHONE_L_H #include "accountjob_l.h" AH_JOB *AH_Job_LoadCellPhone_new(AB_PROVIDER *pro, AB_USER *u, AB_ACCOUNT *account); #endif /* AH_JOBLOADCELLPHONE_L_H */ aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/ajobs/jobsepacor1datedsinglecreate_l.h0000664000175000017500000000131614043610745026173 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_JOBSEPACOR1DEBITDATEDSINGLECREATE_L_H #define AH_JOBSEPACOR1DEBITDATEDSINGLECREATE_L_H #include "accountjob_l.h" AH_JOB *AH_Job_SepaCor1DebitDatedSingleCreate_new(AB_PROVIDER *pro, AB_USER *u, AB_ACCOUNT *account); #endif /* AH_JOBSEPACOR1DEBITDATEDSINGLECREATE_L_H */ aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/ajobs/jobsepadebitdatedmulticreate_l.h0000664000175000017500000000127214043610745026270 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_JOBSEPADEBITDATEDMULTICREATE_L_H #define AH_JOBSEPADEBITDATEDMULTICREATE_L_H #include "accountjob_l.h" AH_JOB *AH_Job_SepaDebitDatedMultiCreate_new(AB_PROVIDER *pro, AB_USER *u, AB_ACCOUNT *account); #endif /* AH_JOBSEPADEBITDATEDMULTICREATE_L_H */ aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/ajobs/jobsepacor1datedsinglecreate.c0000664000175000017500000000460414300721174025651 00000000000000/*************************************************************************** begin : Tue Dec 31 2013 copyright : (C) 2022 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "jobsepacor1datedsinglecreate_l.h" #include "jobtransferbase_l.h" #include "aqhbci/aqhbci_l.h" #include "accountjob_l.h" #include "aqhbci/joblayer/job_l.h" #include "aqhbci/banking/user_l.h" #include "aqhbci/banking/provider_l.h" #include "aqhbci/applayer/hhd_l.h" #include #include #include #include #include static int _jobApi_Prepare(AH_JOB *j); AH_JOB *AH_Job_SepaCor1DebitDatedSingleCreate_new(AB_PROVIDER *pro, AB_USER *u, AB_ACCOUNT *account) { AH_JOB *j; GWEN_DB_NODE *dbArgs; j=AH_Job_TransferBase_new("JobSepaCor1DebitDatedSingleCreate", AB_Transaction_TypeDebitNote, AB_Transaction_SubTypeStandard, pro, u, account); if (!j) return 0; AH_Job_SetChallengeClass(j, 29); AH_Job_SetSupportedCommand(j, AB_Transaction_CommandSepaFlashDebitNote); /* overwrite some virtual functions */ AH_Job_SetPrepareFn(j, _jobApi_Prepare); AH_Job_SetAddChallengeParamsFn(j, AH_Job_TransferBase_AddChallengeParams29); AH_Job_SetGetLimitsFn(j, AH_Job_TransferBase_GetLimits_SepaDated); AH_Job_SetHandleCommandFn(j, AH_Job_TransferBase_HandleCommand_SepaDatedDebit); /* set some known arguments */ dbArgs=AH_Job_GetArguments(j); assert(dbArgs); return j; } int _jobApi_Prepare(AH_JOB *j) { int rv; DBG_INFO(AQHBCI_LOGDOMAIN, "Preparing transfer"); /* select pain profile from group "008" */ rv=AH_Job_TransferBase_SelectPainProfile(j, 8); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } /* adjust parameters for COR1 transactions */ AH_Job_TransferBase_SetLocalInstrumentationCode(j, "COR1"); /* export transfers to SEPA */ rv=AH_Job_TransferBase_SepaExportTransactions(j); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/ajobs/jobgetestatements2.xml0000664000175000017500000000600214044534775024250 00000000000000 %code %version %code %version %code %version aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/ajobs/jobgetestatements_l.h0000664000175000017500000000146614044534775024141 00000000000000/*************************************************************************** begin : Tue Apr 03 2018 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_JOB_GETESTATEMENTS_L_H #define AH_JOB_GETESTATEMENTS_L_H #include "accountjob_l.h" /* This job uses HBCI/FinTS job "HKEKP" */ AH_JOB *AH_Job_GetEStatements_new(AB_PROVIDER *pro, AB_USER *u, AB_ACCOUNT *account); /* This job uses HBCI/FinTS job "HKEKA" */ AH_JOB *AH_Job_GetEStatements2_new(AB_PROVIDER *pro, AB_USER *u, AB_ACCOUNT *account); #endif /* AH_JOB_GETESTATEMENTS_L_H */ aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/ajobs/jobsepaxfermulti_l.h0000664000175000017500000000121614043610745023755 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_JOBSEPAXFERMULTI_L_H #define AH_JOBSEPAXFERMULTI_L_H #include "accountjob_l.h" AH_JOB *AH_Job_SepaTransferMulti_new(AB_PROVIDER *pro, AB_USER *u, AB_ACCOUNT *account); #endif /* AH_JOBSEPAXFERMULTI_L_H */ aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/ajobs/jobsepastandingorderget_l.h0000664000175000017500000000123514043610745025302 00000000000000/*************************************************************************** begin : Wed Jan 15 2014 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_JOBSEPASTANDINGORDERGET_L_H #define AH_JOBSEPASTANDINGORDERGET_L_H #include "accountjob_l.h" AH_JOB *AH_Job_SepaStandingOrderGet_new(AB_PROVIDER *pro, AB_USER *u, AB_ACCOUNT *account); #endif /* AH_JOBSEPASTANDINGORDERGET_L_H */ aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/ajobs/jobsepadebitsingle_l.h0000664000175000017500000000122214043610745024224 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_JOBSEPADEBITSINGLE_L_H #define AH_JOBSEPADEBITSINGLE_L_H #include "accountjob_l.h" AH_JOB *AH_Job_SepaDebitSingle_new(AB_PROVIDER *pro, AB_USER *u, AB_ACCOUNT *account); #endif /* AH_JOBSEPADEBITSINGLE_L_H */ aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/ajobs/accountjob_p.h0000664000175000017500000000143714043610745022532 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Mon Mar 01 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_ACCOUNTJOBS_P_H #define AH_ACCOUNTJOBS_P_H #include "accountjob_l.h" typedef struct AH_ACCOUNTJOB AH_ACCOUNTJOB; struct AH_ACCOUNTJOB { AB_ACCOUNT *account; }; static void GWENHYWFAR_CB AH_AccountJob_FreeData(void *bp, void *p); #endif /* AH_ACCOUNTJOBS_P_H */ aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/ajobs/jobgettrans_camt.c0000664000175000017500000002141714546575647023430 00000000000000/*************************************************************************** begin : Sat Dec 15 2018 copyright : (C) 2021 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "jobgettrans_camt_l.h" #include "aqhbci/joblayer/job_swift.h" #include "aqhbci/joblayer/job_crypt.h" #include GWEN_INHERIT(AH_JOB, AH_JOB_GETTRANS_CAMT); /* ------------------------------------------------------------------------------------------------ * forward declarations * ------------------------------------------------------------------------------------------------ */ static int _jobApi_Process(AH_JOB *j, AB_IMEXPORTER_CONTEXT *ctx); static int _jobApi_GetLimits(AH_JOB *j, AB_TRANSACTION_LIMITS **pLimits); static int _jobApi_HandleCommand(AH_JOB *j, const AB_TRANSACTION *t); static int _addSupportedCamtFormats(AH_JOB *j, GWEN_DB_NODE *dbArgs); static int _readBooked(AH_JOB *j, AB_IMEXPORTER_ACCOUNTINFO *ai, GWEN_DB_NODE *dbBooked); static int _readTransactionsFromResponse(AH_JOB *j, AB_IMEXPORTER_ACCOUNTINFO *ai, GWEN_DB_NODE *dbXA); static int _readTransactions(AH_JOB *j, AB_IMEXPORTER_ACCOUNTINFO *ai, const char *docType, int ty, const uint8_t *ptr, uint32_t len); /* ------------------------------------------------------------------------------------------------ * implementations * ------------------------------------------------------------------------------------------------ */ AH_JOB *AH_Job_GetTransactionsCAMT_new(AB_PROVIDER *pro, AB_USER *u, AB_ACCOUNT *account) { AH_JOB *j; GWEN_DB_NODE *dbArgs; int rv; DBG_INFO(AQHBCI_LOGDOMAIN, "Trying to create CAMT job"); j=AH_AccountJob_new("JobGetTransactionsCAMT", pro, u, account); if (!j) { DBG_ERROR(AQHBCI_LOGDOMAIN, "CAMT Job not found"); return NULL; } AH_Job_SetSupportedCommand(j, AB_Transaction_CommandGetTransactions); /* set virtual functions */ AH_Job_SetProcessFn(j, _jobApi_Process); AH_Job_SetGetLimitsFn(j, _jobApi_GetLimits); AH_Job_SetHandleCommandFn(j, _jobApi_HandleCommand); AH_Job_SetHandleResultsFn(j, AH_Job_HandleResults_Empty); /* get arguments DB */ dbArgs=AH_Job_GetArguments(j); assert(dbArgs); /*GWEN_DB_Dump(dbParams, 2); */ rv=_addSupportedCamtFormats(j, dbArgs); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); AH_Job_free(j); return NULL; } /* set some known arguments */ GWEN_DB_SetCharValue(dbArgs, GWEN_DB_FLAGS_DEFAULT, "allAccounts", "N"); return j; } int _jobApi_Process(AH_JOB *j, AB_IMEXPORTER_CONTEXT *ctx) { AB_ACCOUNT *a; AB_IMEXPORTER_ACCOUNTINFO *ai; GWEN_DB_NODE *dbResponses; GWEN_DB_NODE *dbCurr; DBG_INFO(AQHBCI_LOGDOMAIN, "Processing JobGetTransactionsCAMT"); a=AH_AccountJob_GetAccount(j); dbResponses=AH_Job_GetResponses(j); ai=AB_Provider_GetOrAddAccountInfoForAccount(ctx, a); /* search for "Transactions" */ dbCurr=GWEN_DB_GetFirstGroup(dbResponses); while (dbCurr) { int rv; GWEN_DB_NODE *dbTransactions; rv=AH_Job_CheckEncryption(j, dbCurr); if (rv) { DBG_INFO(AQHBCI_LOGDOMAIN, "Compromised security (encryption)"); AH_Job_SetStatus(j, AH_JobStatusError); return rv; } rv=AH_Job_CheckSignature(j, dbCurr); if (rv) { DBG_INFO(AQHBCI_LOGDOMAIN, "Compromised security (signature)"); AH_Job_SetStatus(j, AH_JobStatusError); return rv; } dbTransactions=GWEN_DB_GetGroup(dbCurr, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "data/transactionsCAMT"); if (dbTransactions) { rv=_readTransactionsFromResponse(j, ai, dbTransactions); if (rv) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); AH_Job_SetStatus(j, AH_JobStatusError); return rv; } } dbCurr=GWEN_DB_GetNextGroup(dbCurr); } AB_Provider_DumpTransactionsIfDebug(ai, AQHBCI_LOGDOMAIN); return 0; } int _jobApi_GetLimits(AH_JOB *j, AB_TRANSACTION_LIMITS **pLimits) { AB_TRANSACTION_LIMITS *tl; GWEN_DB_NODE *dbParams; dbParams=AH_Job_GetParams(j); tl=AB_TransactionLimits_new(); AB_TransactionLimits_SetCommand(tl, AH_Job_GetSupportedCommand(j)); AB_TransactionLimits_SetMaxValueSetupTime(tl, GWEN_DB_GetIntValue(dbParams, "storeDays", 0, 0)); /* nothing more to set for this kind of job */ *pLimits=tl; return 0; } int _jobApi_HandleCommand(AH_JOB *j, const AB_TRANSACTION *t) { const GWEN_DATE *da; da=AB_Transaction_GetFirstDate(t); if (da) { char dbuf[16]; GWEN_DB_NODE *dbArgs; dbArgs=AH_Job_GetArguments(j); snprintf(dbuf, sizeof(dbuf), "%04d%02d%02d", GWEN_Date_GetYear(da), GWEN_Date_GetMonth(da), GWEN_Date_GetDay(da)); GWEN_DB_SetCharValue(dbArgs, GWEN_DB_FLAGS_OVERWRITE_VARS, "fromDate", dbuf); } da=AB_Transaction_GetLastDate(t); if (da) { char dbuf[16]; GWEN_DB_NODE *dbArgs; dbArgs=AH_Job_GetArguments(j); snprintf(dbuf, sizeof(dbuf), "%04d%02d%02d", GWEN_Date_GetYear(da), GWEN_Date_GetMonth(da), GWEN_Date_GetDay(da)); GWEN_DB_SetCharValue(dbArgs, GWEN_DB_FLAGS_OVERWRITE_VARS, "toDate", dbuf); } return 0; } int _addSupportedCamtFormats(AH_JOB *j, GWEN_DB_NODE *dbArgs) { AB_SWIFT_DESCR_LIST *descrList; int foundAtLeastOneDescr=0; descrList=AH_Job_GetSwiftDescriptorsSupportedByJob(j, NULL, "supportedFormat", "camt", 52); if (descrList) { AB_SWIFT_DESCR *descr; descr=AB_SwiftDescr_List_First(descrList); while (descr) { const char *s; s=AB_SwiftDescr_GetAlias2(descr); DBG_ERROR(AQHBCI_LOGDOMAIN, "Adding supported CAMT format [%s]", s); GWEN_DB_SetCharValue(dbArgs, GWEN_DB_FLAGS_DEFAULT, "SupportedFormats/format", s); foundAtLeastOneDescr=1; descr=AB_SwiftDescr_List_Next(descr); } AB_SwiftDescr_List_free(descrList); } if (!foundAtLeastOneDescr) { DBG_ERROR(AQHBCI_LOGDOMAIN, "No supported CAMT profile found, job not supported"); return GWEN_ERROR_GENERIC; } return 0; } int _readTransactionsFromResponse(AH_JOB *j, AB_IMEXPORTER_ACCOUNTINFO *ai, GWEN_DB_NODE *dbXA) { if (dbXA) { int rv; const void *p; unsigned int bs; rv=_readBooked(j, ai, GWEN_DB_GetGroup(dbXA, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "booked")); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } /* get noted transactions */ p=GWEN_DB_GetBinValue(dbXA, "noted", 0, 0, 0, &bs); if (p && bs) { DBG_INFO(AQHBCI_LOGDOMAIN, "Reading noted data"); rv=_readTransactions(j, ai, "default", AB_Transaction_TypeNotedStatement, p, bs); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } } } return 0; } int _readBooked(AH_JOB *j, AB_IMEXPORTER_ACCOUNTINFO *ai, GWEN_DB_NODE *dbBooked) { if (dbBooked) { int i=0; /* get booked transactions (daily reports!) */ DBG_INFO(AQHBCI_LOGDOMAIN, "Found booked transaction group"); for (i=0; i<10000; i++) { const void *p; unsigned int bs; p=GWEN_DB_GetBinValue(dbBooked, "dayData", i, 0, 0, &bs); if (p && bs) { int rv; DBG_INFO(AQHBCI_LOGDOMAIN, "Reading booked day data (%d)", i+1); rv=_readTransactions(j, ai, "default", AB_Transaction_TypeStatement, p, bs); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } } else break; } /* for i */ } /* if dbBooked */ return 0; } int _readTransactions(AH_JOB *j, AB_IMEXPORTER_ACCOUNTINFO *ai, const char *docType, int ty, const uint8_t *ptr, uint32_t len) { AB_PROVIDER *pro; AB_IMEXPORTER_CONTEXT *tempContext; int rv; assert(j); pro=AH_Job_GetProvider(j); assert(pro); /* import data into a temporary context */ tempContext=AB_ImExporterContext_new(); rv=AB_Banking_ImportFromBufferLoadProfile(AB_Provider_GetBanking(pro), "xml", tempContext, docType, NULL, ptr, len); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); AB_ImExporterContext_free(tempContext); return rv; } AB_Provider_MergeContextsSetTypeAndFreeSrc(ai, tempContext, ty); return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/ajobs/jobgettrans_camt_l.h0000664000175000017500000000124314044534775023731 00000000000000/*************************************************************************** begin : Sat Dec 15 2018 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_JOBGETTRANSACTIONS_CAMT_L_H #define AH_JOBGETTRANSACTIONS_CAMT_L_H #include "accountjob_l.h" AH_JOB *AH_Job_GetTransactionsCAMT_new(AB_PROVIDER *pro, AB_USER *u, AB_ACCOUNT *account); #endif /* AH_JOBGETTRANSACTIONS_CAMT_H */ aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/ajobs/jobgetdepot_l.h0000664000175000017500000000122614043610745022701 00000000000000/*************************************************************************** begin : Sun Dec 27 2020 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_JOBGETDEPOT_L_H #define AH_JOBGETDEPOT_L_H #include "accountjob_l.h" #include AH_JOB *AH_Job_GetDepot_new(AB_PROVIDER *pro, AB_USER *u, AB_ACCOUNT *account); #endif /* AH_JOBGETDEPOT_H */ aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/ajobs/jobsepadebitsingle.c0000664000175000017500000000747314300721174023715 00000000000000/*************************************************************************** begin : Tue Dec 31 2013 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "jobsepadebitsingle_l.h" #include "jobtransferbase_l.h" #include "aqhbci/aqhbci_l.h" #include "accountjob_l.h" #include "aqhbci/joblayer/job_l.h" #include "aqhbci/banking/user_l.h" #include "aqhbci/banking/provider_l.h" #include "aqhbci/applayer/hhd_l.h" #include #include #include #include #include /* ------------------------------------------------------------------------------------------------ * forward declarations * ------------------------------------------------------------------------------------------------ */ static int _jobApi_Prepare(AH_JOB *j); static int _jobApi_AddChallengeParams(AH_JOB *j, int hkTanVer, GWEN_DB_NODE *dbMethod); /* ------------------------------------------------------------------------------------------------ * implementations * ------------------------------------------------------------------------------------------------ */ AH_JOB *AH_Job_SepaDebitSingle_new(AB_PROVIDER *pro, AB_USER *u, AB_ACCOUNT *account) { AH_JOB *j; GWEN_DB_NODE *dbArgs; j=AH_Job_TransferBase_new("JobSepaDebitSingle", AB_Transaction_TypeDebitNote, AB_Transaction_SubTypeStandard, pro, u, account); if (!j) return 0; AH_Job_SetChallengeClass(j, 17); AH_Job_SetSupportedCommand(j, AB_Transaction_CommandSepaDebitNote); /* overwrite some virtual functions */ AH_Job_SetPrepareFn(j, _jobApi_Prepare); AH_Job_SetAddChallengeParamsFn(j, _jobApi_AddChallengeParams); AH_Job_SetGetLimitsFn(j, AH_Job_TransferBase_GetLimits_SepaUndated); AH_Job_SetHandleCommandFn(j, AH_Job_TransferBase_HandleCommand_SepaUndated); /* set some known arguments */ dbArgs=AH_Job_GetArguments(j); assert(dbArgs); return j; } int _jobApi_AddChallengeParams(AH_JOB *j, int hkTanVer, GWEN_DB_NODE *dbMethod) { const AB_TRANSACTION *t; const char *s; int tanVer=AH_JOB_TANVER_1_4; DBG_ERROR(AQHBCI_LOGDOMAIN, "AddChallengeParams function called"); t=AH_Job_GetFirstTransfer(j); if (t==NULL) { DBG_ERROR(AQHBCI_LOGDOMAIN, "No validated transaction"); return GWEN_ERROR_INVALID; } s=GWEN_DB_GetCharValue(dbMethod, "zkaTanVersion", 0, NULL); if (s && *s && strncasecmp(s, "1.3", 3)==0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "TAN version is 1.3 (%s)", s); tanVer=AH_JOB_TANVER_1_3; } if (tanVer==AH_JOB_TANVER_1_4) { int rv; DBG_ERROR(AQHBCI_LOGDOMAIN, "TAN version is 1.4.x"); rv=AH_HHD14_AddChallengeParams_17(j, AB_Transaction_GetValue(t), AB_Transaction_GetRemoteIban(t)); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } } else { DBG_ERROR(AQHBCI_LOGDOMAIN, "Unhandled tan version %d for now", tanVer); return GWEN_ERROR_INTERNAL; } return 0; } int _jobApi_Prepare(AH_JOB *j) { int rv; DBG_INFO(AQHBCI_LOGDOMAIN, "Preparing transfer"); /* select from pain group "008" */ rv=AH_Job_TransferBase_SelectPainProfile(j, 8); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } /* export transfers to SEPA */ rv=AH_Job_TransferBase_SepaExportTransactions(j); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/ajobs/jobgetbalance_l.h0000664000175000017500000000124314043610745023152 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_JOBGETBALANCE_L_H #define AH_JOBGETBALANCE_L_H #include "accountjob_l.h" #include AH_JOB *AH_Job_GetBalance_new(AB_PROVIDER *pro, AB_USER *u, AB_ACCOUNT *account); #endif /* AH_JOBGETBALANCE_L_H */ aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/ajobs/jobgetbalance.c0000664000175000017500000003361514546575647022665 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "jobgetbalance_l.h" #include "aqhbci/aqhbci_l.h" #include "accountjob_l.h" #include "aqhbci/joblayer/job_l.h" #include "aqhbci/joblayer/job_crypt.h" #include "aqhbci/banking/user_l.h" #include #include #include #include #include #include /* ------------------------------------------------------------------------------------------------ * forward declarations * ------------------------------------------------------------------------------------------------ */ static int _jobApi_ProcessBankAccount(AH_JOB *j, AB_IMEXPORTER_CONTEXT *ctx); static int _jobApi_ProcessInvestmentAccount(AH_JOB *j, AB_IMEXPORTER_CONTEXT *ctx); static AB_BALANCE *_readBalance(GWEN_DB_NODE *dbBalance); static int _readSecurities(AH_JOB *j, AB_IMEXPORTER_CONTEXT *ctx, const char *docType, int noted, GWEN_BUFFER *buf); static AB_VALUE *_readAmountFromResponseDb(GWEN_DB_NODE *dbBalance); static GWEN_DATE *_readDateFromResponseDb(GWEN_DB_NODE *dbBalance); /* ------------------------------------------------------------------------------------------------ * implementations * ------------------------------------------------------------------------------------------------ */ AH_JOB *AH_Job_GetBalance_new(AB_PROVIDER *pro, AB_USER *u, AB_ACCOUNT *account) { AH_JOB *j; GWEN_DB_NODE *dbArgs; int useCreditCardJob=0; int useInvestmentJob=0; GWEN_DB_NODE *updgroup; //Check if we should use DKKKS updgroup=AH_User_GetUpdForAccount(u, account); if (updgroup) { GWEN_DB_NODE *n; n=GWEN_DB_GetFirstGroup(updgroup); while (n) { if (strcasecmp(GWEN_DB_GetCharValue(n, "job", 0, ""), "DKKKS")==0) { useCreditCardJob = 1; break; } if (strcasecmp(GWEN_DB_GetCharValue(n, "job", 0, ""), "HKWPD")==0) { useInvestmentJob = 1; break; } n=GWEN_DB_GetNextGroup(n); } /* while */ } /* if updgroup for the given account found */ if (useCreditCardJob) j=AH_AccountJob_new("JobGetBalanceCreditCard", pro, u, account); else if (useInvestmentJob) j=AH_AccountJob_new("JobGetBalanceInvestment", pro, u, account); else j=AH_AccountJob_new("JobGetBalance", pro, u, account); if (!j) return 0; AH_Job_SetSupportedCommand(j, AB_Transaction_CommandGetBalance); /* overwrite some virtual functions */ if (useInvestmentJob) AH_Job_SetProcessFn(j, _jobApi_ProcessInvestmentAccount); else AH_Job_SetProcessFn(j, _jobApi_ProcessBankAccount); AH_Job_SetGetLimitsFn(j, AH_Job_GetLimits_EmptyLimits); AH_Job_SetHandleCommandFn(j, AH_Job_HandleCommand_Accept); AH_Job_SetHandleResultsFn(j, AH_Job_HandleResults_Empty); /* set some known arguments */ dbArgs=AH_Job_GetArguments(j); assert(dbArgs); if (useCreditCardJob || useInvestmentJob) GWEN_DB_SetCharValue(dbArgs, GWEN_DB_FLAGS_DEFAULT, "accountNumber", AB_Account_GetAccountNumber(account)); else GWEN_DB_SetCharValue(dbArgs, GWEN_DB_FLAGS_DEFAULT, "allAccounts", "N"); return j; } AB_BALANCE *_readBalance(GWEN_DB_NODE *dbBalance) { AB_BALANCE *bal; AB_VALUE *value; GWEN_DATE *dt; bal=AB_Balance_new(); value=_readAmountFromResponseDb(dbBalance); AB_Balance_SetValue(bal, value); AB_Value_free(value); dt=_readDateFromResponseDb(dbBalance); AB_Balance_SetDate(bal, dt); GWEN_Date_free(dt); return bal; } AB_VALUE *_readAmountFromResponseDb(GWEN_DB_NODE *dbBalance) { AB_VALUE *value; const char *p; /* get value */ value=AB_Value_fromDb(dbBalance); if (!value) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Error parsing value from DB"); return NULL; } /* get isCredit */ p=GWEN_DB_GetCharValue(dbBalance, "debitMark", 0, 0); if (p) { if (strcasecmp(p, "D")==0 || strcasecmp(p, "RC")==0) { AB_Value_Negate(value); } else if (strcasecmp(p, "C")==0 || strcasecmp(p, "RD")==0) { /* nothing to do */ } else { DBG_ERROR(AQHBCI_LOGDOMAIN, "Bad debit mark \"%s\"", p); AB_Value_free(value); return NULL; } } return value; } GWEN_DATE *_readDateFromResponseDb(GWEN_DB_NODE *dbBalance) { GWEN_DATE *dt=NULL; const char *p; /* read date */ p=GWEN_DB_GetCharValue(dbBalance, "date", 0, 0); if (p) { dt=GWEN_Date_fromStringWithTemplate(p, "YYYYMMDD"); if (dt==NULL) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Bad date \"%s\"", p); return NULL; } } else { DBG_WARN(AQHBCI_LOGDOMAIN, "No date, using current date"); dt=GWEN_Date_CurrentDate(); assert(dt); } return dt; } int _jobApi_ProcessBankAccount(AH_JOB *j, AB_IMEXPORTER_CONTEXT *ctx) { GWEN_DB_NODE *dbResponses; GWEN_DB_NODE *dbCurr; int rv; DBG_INFO(AQHBCI_LOGDOMAIN, "Processing JobGetBalance"); dbResponses=AH_Job_GetResponses(j); assert(dbResponses); /* search for "Balance" */ dbCurr=GWEN_DB_GetFirstGroup(dbResponses); while (dbCurr) { GWEN_DB_NODE *dbBalance; rv=AH_Job_CheckEncryption(j, dbCurr); if (rv) { DBG_INFO(AQHBCI_LOGDOMAIN, "Compromised security (encryption)"); AH_Job_SetStatus(j, AH_JobStatusError); return rv; } rv=AH_Job_CheckSignature(j, dbCurr); if (rv) { DBG_INFO(AQHBCI_LOGDOMAIN, "Compromised security (signature)"); AH_Job_SetStatus(j, AH_JobStatusError); return rv; } dbBalance=GWEN_DB_GetGroup(dbCurr, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "data/balance"); if (!dbBalance) dbBalance=GWEN_DB_GetGroup(dbCurr, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "data/balancecreditcard"); if (dbBalance) { GWEN_DB_NODE *dbT; AB_ACCOUNT *a; AB_IMEXPORTER_ACCOUNTINFO *ai; DBG_NOTICE(AQHBCI_LOGDOMAIN, "Got a balance"); if (GWEN_Logger_GetLevel(0)>=GWEN_LoggerLevel_Debug) GWEN_DB_Dump(dbBalance, 2); a=AH_AccountJob_GetAccount(j); assert(a); ai=AB_Provider_GetOrAddAccountInfoForAccount(ctx, a); /* read booked balance */ dbT=GWEN_DB_GetGroup(dbBalance, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "booked"); if (dbT) { AB_BALANCE *bal; bal=_readBalance(dbT); if (bal) { AB_Balance_SetType(bal, AB_Balance_TypeBooked); AB_ImExporterAccountInfo_AddBalance(ai, bal); } } /* read noted balance */ dbT=GWEN_DB_GetGroup(dbBalance, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "noted"); if (dbT) { AB_BALANCE *bal; bal=_readBalance(dbT); if (bal) { AB_Balance_SetType(bal, AB_Balance_TypeNoted); AB_ImExporterAccountInfo_AddBalance(ai, bal); } } #if 0 /* read credit Line */ dbT=GWEN_DB_GetGroup(dbBalance, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "creditLine"); if (dbT) { AB_VALUE *v; v=AB_Value_fromDb(dbT); if (!v) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Error parsing value from DB"); } else { AB_AccountStatus_SetBankLine(acst, v); } AB_Value_free(v); } #endif break; /* break loop, we found the balance */ } /* if "Balance" */ dbCurr=GWEN_DB_GetNextGroup(dbCurr); } return 0; } int _jobApi_ProcessInvestmentAccount(AH_JOB *j, AB_IMEXPORTER_CONTEXT *ctx) { GWEN_DB_NODE *dbResponses; GWEN_DB_NODE *dbCurr; GWEN_BUFFER *tbooked; int rv; DBG_INFO(AQHBCI_LOGDOMAIN, "Processing JobGetBalance"); dbResponses=AH_Job_GetResponses(j); assert(dbResponses); tbooked=GWEN_Buffer_new(0, 8192, 0, 1); /* search for "Balance" */ dbCurr=GWEN_DB_GetFirstGroup(dbResponses); while (dbCurr) { GWEN_DB_NODE *dbBalance; //GWEN_DB_Dump(dbCurr, 8); rv=AH_Job_CheckEncryption(j, dbCurr); if (rv) { DBG_INFO(AQHBCI_LOGDOMAIN, "Compromised security (encryption)"); AH_Job_SetStatus(j, AH_JobStatusError); return rv; } rv=AH_Job_CheckSignature(j, dbCurr); if (rv) { DBG_INFO(AQHBCI_LOGDOMAIN, "Compromised security (signature)"); AH_Job_SetStatus(j, AH_JobStatusError); return rv; } dbBalance=GWEN_DB_GetGroup(dbCurr, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "data/BalanceInvestment"); if (dbBalance) { const void *p; unsigned int bs; DBG_NOTICE(AQHBCI_LOGDOMAIN, "Got a balance"); if (GWEN_Logger_GetLevel(0)>=GWEN_LoggerLevel_Debug) GWEN_DB_Dump(dbBalance, 2); p=GWEN_DB_GetBinValue(dbBalance, "booked", 0, 0, 0, &bs); if (p && bs) GWEN_Buffer_AppendBytes(tbooked, p, bs); break; /* break loop, we found the balance */ } /* if(dbBalance) */ dbCurr=GWEN_DB_GetNextGroup(dbCurr); } /* while(dbCurr) */ GWEN_Buffer_Rewind(tbooked); /* now the buffers contain data to be parsed by DBIOs */ /* read received securities */ if (GWEN_Buffer_GetUsedBytes(tbooked)) { if (_readSecurities(j, ctx, "mt535", 0, tbooked)) { GWEN_Buffer_free(tbooked); DBG_INFO(AQHBCI_LOGDOMAIN, "Error parsing received securities"); AH_Job_SetStatus(j, AH_JobStatusError); return -1; } } if (GWEN_Logger_GetLevel(AQHBCI_LOGDOMAIN)>=GWEN_LoggerLevel_Debug) { GWEN_DB_NODE *gn; AB_SECURITY *stmp; DBG_INFO(AQHBCI_LOGDOMAIN, "*** Dumping securities *********************"); stmp=AB_ImExporterContext_GetFirstSecurity(ctx); while (stmp) { DBG_INFO(AQHBCI_LOGDOMAIN, "*** --------------------------------------"); gn=GWEN_DB_Group_new("security"); AB_Security_toDb(stmp, gn); GWEN_DB_Dump(gn, 2); if (gn) GWEN_DB_Group_free(gn); stmp=AB_Security_List_Next(stmp); } AB_Security_free(stmp); DBG_INFO(AQHBCI_LOGDOMAIN, "*** End dumping securities *****************"); } GWEN_Buffer_free(tbooked); return 0; } /* the following is ancient code. We should probably switch to using AqBanking's import functions like in * JobGetBalance, but I have no way of testing changes (I don't have a credit card for which HBCI is available) * and this code seems to work, so I don't want to touch it ATM. */ int _readSecurities(AH_JOB *j, AB_IMEXPORTER_CONTEXT *ctx, const char *docType, int noted, GWEN_BUFFER *buf) { GWEN_DBIO *dbio; GWEN_SYNCIO *sio; int rv; GWEN_DB_NODE *db; GWEN_DB_NODE *dbSecurity; GWEN_DB_NODE *dbParams; AB_ACCOUNT *a; AB_USER *u; uint32_t progressId; uint64_t cnt=0; a=AH_AccountJob_GetAccount(j); assert(a); u=AH_Job_GetUser(j); assert(u); dbio=GWEN_DBIO_GetPlugin("swift"); if (!dbio) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Plugin SWIFT is not found"); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("Plugin \"SWIFT\" not found.")); return AB_ERROR_PLUGIN_MISSING; } GWEN_Buffer_Rewind(buf); sio=GWEN_SyncIo_Memory_new(buf, 0); db=GWEN_DB_Group_new("transactions"); dbParams=GWEN_DB_Group_new("params"); GWEN_DB_SetCharValue(dbParams, GWEN_DB_FLAGS_OVERWRITE_VARS, "type", docType); if (AH_User_GetFlags(u) & AH_USER_FLAGS_KEEP_MULTIPLE_BLANKS) GWEN_DB_SetIntValue(dbParams, GWEN_DB_FLAGS_OVERWRITE_VARS, "keepMultipleBlanks", 1); else GWEN_DB_SetIntValue(dbParams, GWEN_DB_FLAGS_OVERWRITE_VARS, "keepMultipleBlanks", 0); rv=GWEN_DBIO_Import(dbio, sio, db, dbParams, GWEN_PATH_FLAGS_CREATE_GROUP); if (rv<0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Error parsing SWIFT %s (%d)", docType, rv); GWEN_DB_Group_free(dbParams); GWEN_DB_Group_free(db); GWEN_SyncIo_free(sio); GWEN_DBIO_free(dbio); return rv; } GWEN_DB_Group_free(dbParams); GWEN_SyncIo_free(sio); GWEN_DBIO_free(dbio); /* first count the securities */ dbSecurity=GWEN_DB_FindFirstGroup(db, "security"); while (dbSecurity) { cnt++; dbSecurity=GWEN_DB_FindNextGroup(dbSecurity, "security"); } /* while */ progressId=GWEN_Gui_ProgressStart(GWEN_GUI_PROGRESS_DELAY | GWEN_GUI_PROGRESS_ALLOW_EMBED | GWEN_GUI_PROGRESS_SHOW_PROGRESS | GWEN_GUI_PROGRESS_SHOW_ABORT, I18N("Importing transactions..."), NULL, cnt, 0); /* add security to list */ dbSecurity=GWEN_DB_FindFirstGroup(db, "security"); while (dbSecurity) { AB_SECURITY *asec; AB_VALUE *aval; GWEN_TIME *gt = NULL; const char *p; asec=AB_Security_new(); p=GWEN_DB_GetCharValue(dbSecurity, "name", 0, NULL); if (p) { AB_Security_SetName(asec, p); } p=GWEN_DB_GetCharValue(dbSecurity, "nameSpace", 0, NULL); if (p) { AB_Security_SetNameSpace(asec, p); } p=GWEN_DB_GetCharValue(dbSecurity, "uniqueId", 0, NULL); if (p) { AB_Security_SetUniqueId(asec, p); } p=GWEN_DB_GetCharValue(dbSecurity, "units", 0, NULL); if (p) { aval=AB_Value_fromString(p); AB_Security_SetUnits(asec, aval); AB_Value_free(aval); } p=GWEN_DB_GetCharValue(dbSecurity, "unitPriceValue/value", 0, NULL); if (p) { aval=AB_Value_fromString(p); p=GWEN_DB_GetCharValue(dbSecurity, "unitPriceValue/currency", 0, NULL); if (p) AB_Value_SetCurrency(aval, p); AB_Security_SetUnitPriceValue(asec, aval); AB_Value_free(aval); } p=GWEN_DB_GetCharValue(dbSecurity, "unitPriceDate", 0, NULL); if (p) { gt=GWEN_Time_fromString(p, "YYYYMMDD"); if (gt) AB_Security_SetUnitPriceDate(asec, gt); } AB_ImExporterContext_AddSecurity(ctx, asec); GWEN_Time_free(gt); dbSecurity=GWEN_DB_FindNextGroup(dbSecurity, "security"); } /* while */ GWEN_Gui_ProgressEnd(progressId); GWEN_DB_Group_free(db); return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/ajobs/jobsepadebitdatedmulticreate.c0000664000175000017500000001542414300721174025747 00000000000000/*************************************************************************** begin : Wed Jan 08 2014 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "jobsepadebitdatedmulticreate_p.h" #include "jobtransferbase_l.h" #include "aqhbci/aqhbci_l.h" #include "accountjob_l.h" #include "aqhbci/joblayer/job_l.h" #include "aqhbci/banking/user_l.h" #include "aqhbci/banking/provider_l.h" #include "aqhbci/applayer/hhd_l.h" #include #include #include #include #include #include GWEN_INHERIT(AH_JOB, AH_JOB_CREATESEPAMULTIDEBIT); /* ------------------------------------------------------------------------------------------------ * forward declarations * ------------------------------------------------------------------------------------------------ */ static void GWENHYWFAR_CB _jobApi_FreeData(void *bp, void *p); static int _jobApi_AddChallengeParams(AH_JOB *j, int hkTanVer, GWEN_DB_NODE *dbMethod); static int _jobApi_Prepare(AH_JOB *j); /* ------------------------------------------------------------------------------------------------ * implementations * ------------------------------------------------------------------------------------------------ */ AH_JOB *AH_Job_SepaDebitDatedMultiCreate_new(AB_PROVIDER *pro, AB_USER *u, AB_ACCOUNT *account) { AH_JOB *j; AH_JOB_CREATESEPAMULTIDEBIT *aj; GWEN_DB_NODE *dbParams; GWEN_DB_NODE *dbArgs; const char *s; j=AH_Job_TransferBase_new("JobSepaDebitDatedMultiCreate", AB_Transaction_TypeDebitNote, AB_Transaction_SubTypeStandard, pro, u, account); if (!j) return 0; AH_Job_SetChallengeClass(j, 32); AH_Job_SetSupportedCommand(j, AB_Transaction_CommandSepaDebitNote); GWEN_NEW_OBJECT(AH_JOB_CREATESEPAMULTIDEBIT, aj); GWEN_INHERIT_SETDATA(AH_JOB, AH_JOB_CREATESEPAMULTIDEBIT, j, aj, _jobApi_FreeData); /* overwrite some virtual functions */ AH_Job_SetPrepareFn(j, _jobApi_Prepare); AH_Job_SetAddChallengeParamsFn(j, _jobApi_AddChallengeParams); AH_Job_SetGetLimitsFn(j, AH_Job_TransferBase_GetLimits_SepaDated); AH_Job_SetHandleCommandFn(j, AH_Job_TransferBase_HandleCommand_SepaDatedDebit); /* get params */ dbParams=AH_Job_GetParams(j); assert(dbParams); AH_Job_SetMaxTransfers(j, GWEN_DB_GetIntValue(dbParams, "maxTransfers", 0, 0)); s=GWEN_DB_GetCharValue(dbParams, "sumFieldNeeded", 0, "j"); if (s && toupper(*s)=='J') aj->sumFieldNeeded=1; else aj->sumFieldNeeded=0; s=GWEN_DB_GetCharValue(dbParams, "singleBookingAllowed", 0, "j"); if (s && toupper(*s)=='J') aj->singleBookingAllowed=1; else aj->singleBookingAllowed=0; /* set some known arguments */ dbArgs=AH_Job_GetArguments(j); assert(dbArgs); return j; } void GWENHYWFAR_CB _jobApi_FreeData(void *bp, void *p) { AH_JOB_CREATESEPAMULTIDEBIT *aj; aj=(AH_JOB_CREATESEPAMULTIDEBIT *)p; free(aj->fiid); AB_Value_free(aj->sumValues); GWEN_FREE_OBJECT(aj); } int _jobApi_AddChallengeParams(AH_JOB *j, int hkTanVer, GWEN_DB_NODE *dbMethod) { AH_JOB_CREATESEPAMULTIDEBIT *aj; const AB_TRANSACTION *t; const char *s; int tanVer=AH_JOB_TANVER_1_4; DBG_ERROR(AQHBCI_LOGDOMAIN, "AddChallengeParams function called"); assert(j); aj=GWEN_INHERIT_GETDATA(AH_JOB, AH_JOB_CREATESEPAMULTIDEBIT, j); assert(aj); /* get data from first transaction */ t=AH_Job_GetFirstTransfer(j); if (t==NULL) { DBG_ERROR(AQHBCI_LOGDOMAIN, "No transaction"); return GWEN_ERROR_INVALID; } s=GWEN_DB_GetCharValue(dbMethod, "zkaTanVersion", 0, NULL); if (s && *s && strncasecmp(s, "1.3", 3)==0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "TAN version is 1.3 (%s)", s); tanVer=AH_JOB_TANVER_1_3; } if (tanVer==AH_JOB_TANVER_1_4) { int rv; DBG_ERROR(AQHBCI_LOGDOMAIN, "TAN version is 1.4.x"); rv=AH_HHD14_AddChallengeParams_32(j, AH_Job_GetTransferCount(j), aj->sumValues, AB_Transaction_GetLocalIban(t), AB_Transaction_GetDate(t)); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } } else { DBG_ERROR(AQHBCI_LOGDOMAIN, "Unhandled tan version %d for now", tanVer); return GWEN_ERROR_INTERNAL; } return 0; } int _jobApi_Prepare(AH_JOB *j) { AH_JOB_CREATESEPAMULTIDEBIT *aj; GWEN_DB_NODE *dbArgs; int rv; AB_TRANSACTION *t; DBG_INFO(AQHBCI_LOGDOMAIN, "Preparing transfers"); assert(j); aj=GWEN_INHERIT_GETDATA(AH_JOB, AH_JOB_CREATESEPAMULTIDEBIT, j); assert(aj); dbArgs=AH_Job_GetArguments(j); /* calculate sum */ AB_Value_free(aj->sumValues); aj->sumValues=AB_Value_new(); AB_Value_SetCurrency(aj->sumValues, "EUR"); t=AH_Job_GetFirstTransfer(j); if (t==NULL) { DBG_ERROR(AQHBCI_LOGDOMAIN, "No transaction in job"); assert(t); /* debug */ return GWEN_ERROR_INTERNAL; } while (t) { const AB_VALUE *v; v=AB_Transaction_GetValue(t); if (v) AB_Value_AddValue(aj->sumValues, v); t=AB_Transaction_List_Next(t); } /* select pain profile from group "008" */ rv=AH_Job_TransferBase_SelectPainProfile(j, 8); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } /* set singleBookingWanted */ GWEN_DB_SetCharValue(dbArgs, GWEN_DB_FLAGS_OVERWRITE_VARS, "singleBookingWanted", (aj->singleBookingAllowed)?"J":"N"); /* export transfers to SEPA */ rv=AH_Job_TransferBase_SepaExportTransactions(j); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } /* store sum value */ if (aj->sumValues) { GWEN_DB_NODE *dbV; GWEN_BUFFER *nbuf; const char *s; dbV=GWEN_DB_GetGroup(dbArgs, GWEN_DB_FLAGS_OVERWRITE_GROUPS, "totalSum"); assert(dbV); nbuf=GWEN_Buffer_new(0, 32, 0, 1); AB_Value_toHbciString(aj->sumValues, nbuf); if (GWEN_Buffer_GetUsedBytes(nbuf)<1) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Error in conversion"); GWEN_Buffer_free(nbuf); return GWEN_ERROR_BAD_DATA; } /* store value */ GWEN_DB_SetCharValue(dbV, GWEN_DB_FLAGS_OVERWRITE_VARS, "value", GWEN_Buffer_GetStart(nbuf)); GWEN_Buffer_free(nbuf); /* store currency */ s=AB_Value_GetCurrency(aj->sumValues); if (!s) s="EUR"; GWEN_DB_SetCharValue(dbV, GWEN_DB_FLAGS_OVERWRITE_VARS, "currency", s); } return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/ajobs/jobsepacor1datedmulticreate_p.h0000664000175000017500000000161114300721174026041 00000000000000/*************************************************************************** begin : Tue Dec 31 2013 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_JOBSEPACOR1DATEDMULTICREATE_P_H #define AH_JOBSEPACOR1DATEDMULTICREATE_P_H #include "jobsepacor1datedmulticreate_l.h" #include #include typedef struct AH_JOB_CREATESEPAMULTICOR1 AH_JOB_CREATESEPAMULTICOR1; struct AH_JOB_CREATESEPAMULTICOR1 { char *fiid; int sumFieldNeeded; int singleBookingAllowed; AB_VALUE *sumValues; char *localIban; }; #endif /* AH_JOBSEPACOR1DATEDMULTICREATE_P_H */ aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/ajobs/jobforeignxferwh_l.h0000664000175000017500000000135714043610745023750 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_JOB_FOREIGNXFERWH_L_H #define AH_JOB_FOREIGNXFERWH_L_H #include "accountjob_l.h" AH_JOB *AH_Job_ForeignTransferWH_new(AB_PROVIDER *pro, AB_USER *u, AB_ACCOUNT *account); int AH_Job_ForeignTransferWH_SetDtazv(AH_JOB *j, const uint8_t *dataPtr, uint32_t dataLen); #endif /* AH_JOB_FOREIGNXFERWH_L_H */ aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/ajobs/jobsepastandingorderdelete.xml0000664000175000017500000000430614043610745026025 00000000000000 %code %version %code %version %code %version aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/ajobs/jobsepastandingordercreate_l.h0000664000175000017500000000125114300721174025757 00000000000000/*************************************************************************** begin : Wed Jan 15 2014 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_JOBSEPASTANDINGORDERCREATE_L_H #define AH_JOBSEPASTANDINGORDERCREATE_L_H #include "accountjob_l.h" AH_JOB *AH_Job_SepaStandingOrderCreate_new(AB_PROVIDER *pro, AB_USER *u, AB_ACCOUNT *account); #endif /* AH_JOBSEPASTANDINGORDERCREATE_L_H */ aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/ajobs/jobgettransactions_l.h0000664000175000017500000000126214043610745024276 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_JOBGETTRANSACTIONS_L_H #define AH_JOBGETTRANSACTIONS_L_H #include "accountjob_l.h" #include AH_JOB *AH_Job_GetTransactions_new(AB_PROVIDER *pro, AB_USER *u, AB_ACCOUNT *account); #endif /* AH_JOBGETTRANSACTIONS_H */ aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/ajobs/jobsepacor1datedmulticreate.xml0000664000175000017500000000542014043610745026102 00000000000000 %code %version %code %version %code %version %code %version aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/ajobs/jobloadcellphone.xml0000664000175000017500000000356714043610745023747 00000000000000 %code %version %code %version aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/ajobs/jobloadcellphone_p.h0000664000175000017500000000173414043610745023707 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_JOBLOADCELLPHONE_P_H #define AH_JOBLOADCELLPHONE_P_H #include "jobloadcellphone_l.h" #include typedef struct AH_JOB_LOADCELLPHONE AH_JOB_LOADCELLPHONE; struct AH_JOB_LOADCELLPHONE { int dummy; }; static void GWENHYWFAR_CB AH_Job_LoadCellPhone_FreeData(void *bp, void *p); #if 0 static int AH_Job_LoadCellPhone_ExchangeParams(AH_JOB *j, AB_JOB *bj, AB_IMEXPORTER_CONTEXT *ctx); static int AH_Job_LoadCellPhone_ExchangeArgs(AH_JOB *j, AB_JOB *bj, AB_IMEXPORTER_CONTEXT *ctx); #endif #endif /* AH_JOBLOADCELLPHONE_P_H */ aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/Makefile.am0000664000175000017500000000350614044534775020661 00000000000000DIST_SUBDIRS=msglayer joblayer ajobs admjobs applayer banking tan dialogs control SUBDIRS=msglayer joblayer ajobs admjobs applayer banking tan dialogs control AM_CFLAGS=-DBUILDING_AQBANKING @visibility_cflags@ EXTRA_DIST=aqhbci.xml.in header.xml.in AM_CPPFLAGS = -I$(top_srcdir)/src/libs -I$(top_builddir)/src/libs $(gwenhywfar_includes) \ -I$(srcdir)/../ \ -I$(srcdir)/joblayer BUILT_SOURCES = version.h CLEANFILES = $(BUILT_SOURCES) hbci.xml plugindir= $(aqbanking_plugindir)/providers plugin_DATA=aqhbci.xml #iheaderdir=@aqbanking_headerdir_am@/aqhbci #iheader_HEADERS= noinst_HEADERS = \ aqhbci.h \ aqhbci_l.h xmldatadir=$(aqbanking_pkgdatadir)/backends/aqhbci xmldata_DATA=hbci.xml hbci.xml: header.xml applayer/xml/base.xml ajobs/accountjobs.xml admjobs/adminjobs.xml $(XMLMERGE) --compact --header -v header.xml applayer/xml/base.xml ajobs/accountjobs.xml admjobs/adminjobs.xml -o $@ sources: for f in $(libaqhbci_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for f in $(plugin_DATA); do \ echo $(subdir)/$$f >>$(top_srcdir)/pdsources; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d sources; \ done # AqHBCI plugin library noinst_LTLIBRARIES=libaqhbci.la libaqhbci_la_SOURCES=aqhbci.c libaqhbci_la_LIBADD=\ msglayer/libhbcimsg.la \ joblayer/libhbcijob.la \ ajobs/libhbciaccjobs.la \ admjobs/libhbciadmjobs.la \ applayer/libhbciapp.la \ banking/libhbcibanking.la \ control/libhbcicontrol.la \ dialogs/libaqhbci_dlgs.la \ tan/libhbcitan.la built_sources: $(BUILT_SOURCES) cppcheck: for f in $(libaqhbci_la_SOURCES); do \ cppcheck --force $$f ; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done typefiles: for d in $(SUBDIRS); do \ $(MAKE) -C $$d typefiles; \ done typedefs: for d in $(SUBDIRS); do \ $(MAKE) -C $$d typedefs; \ done aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/admjobs/0000755000175000017500000000000015037736162020313 500000000000000aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/admjobs/jobgetsepainfo.c0000664000175000017500000002547714043610745023411 00000000000000/*************************************************************************** begin : Thu Jan 31 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "jobgetsepainfo_p.h" #include "aqhbci/joblayer/job_crypt.h" GWEN_INHERIT(AH_JOB, AH_JOB_GETACCSEPAINFO) AH_JOB *AH_Job_GetAccountSepaInfo_new(AB_PROVIDER *pro, AB_USER *u, AB_ACCOUNT *acc) { AH_JOB *j; GWEN_DB_NODE *dbArgs; AH_JOB_GETACCSEPAINFO *jd; const char *s; assert(u); j=AH_Job_new("JobGetAccountSepaInfo", pro, u, 0, 0); if (!j) { DBG_ERROR(AQHBCI_LOGDOMAIN, "JobGetAccountSepaInfo not supported, should not happen"); return 0; } GWEN_NEW_OBJECT(AH_JOB_GETACCSEPAINFO, jd); GWEN_INHERIT_SETDATA(AH_JOB, AH_JOB_GETACCSEPAINFO, j, jd, AH_Job_GetAccountSepaInfo_FreeData) AH_Job_SetProcessFn(j, AH_Job_GetAccountSepaInfo_Process); jd->account=acc; /* set arguments */ dbArgs=AH_Job_GetArguments(j); assert(dbArgs); s=AB_Account_GetAccountNumber(jd->account); if (s && *s) GWEN_DB_SetCharValue(dbArgs, GWEN_DB_FLAGS_DEFAULT, "accountId", s); s=AB_Account_GetSubAccountId(jd->account); if (s && *s) GWEN_DB_SetCharValue(dbArgs, GWEN_DB_FLAGS_DEFAULT, "accountSubId", s); s=AB_Account_GetBankCode(jd->account); if (s && *s) GWEN_DB_SetCharValue(dbArgs, GWEN_DB_FLAGS_DEFAULT, "bankCode", s); GWEN_DB_SetIntValue(dbArgs, GWEN_DB_FLAGS_DEFAULT, "country", 280); s=AB_Account_GetIban(jd->account); if (s && *s) GWEN_DB_SetCharValue(dbArgs, GWEN_DB_FLAGS_DEFAULT, "iban", s); s=AB_Account_GetBic(jd->account); if (s && *s) GWEN_DB_SetCharValue(dbArgs, GWEN_DB_FLAGS_DEFAULT, "bic", s); DBG_INFO(AQHBCI_LOGDOMAIN, "JobGetAccountSepaInfo created"); return j; } void GWENHYWFAR_CB AH_Job_GetAccountSepaInfo_FreeData(void *bp, void *p) { AH_JOB_GETACCSEPAINFO *jd; jd=(AH_JOB_GETACCSEPAINFO *)p; GWEN_FREE_OBJECT(jd); } int AH_Job_GetAccountSepaInfo_Process(AH_JOB *j, AB_IMEXPORTER_CONTEXT *ctx) { AH_JOB_GETACCSEPAINFO *jd; GWEN_DB_NODE *dbResponses; GWEN_DB_NODE *dbCurr; AB_USER *u; AB_BANKING *ab; AB_PROVIDER *pro; assert(j); jd=GWEN_INHERIT_GETDATA(AH_JOB, AH_JOB_GETACCSEPAINFO, j); assert(jd); if (jd->scanned) return 0; jd->scanned=1; dbResponses=AH_Job_GetResponses(j); assert(dbResponses); u=AH_Job_GetUser(j); assert(u); ab=AH_Job_GetBankingApi(j); assert(ab); pro=AH_Job_GetProvider(j); assert(pro); /* search for "GetAccountSepaInfoResponse" */ dbCurr=GWEN_DB_GetFirstGroup(dbResponses); while (dbCurr) { GWEN_DB_NODE *dbXA; int rv; rv=AH_Job_CheckEncryption(j, dbCurr); if (rv) { DBG_INFO(AQHBCI_LOGDOMAIN, "Compromised security (encryption)"); AH_Job_SetStatus(j, AH_JobStatusError); return rv; } rv=AH_Job_CheckSignature(j, dbCurr); if (rv) { DBG_INFO(AQHBCI_LOGDOMAIN, "Compromised security (signature)"); AH_Job_SetStatus(j, AH_JobStatusError); return rv; } dbXA=GWEN_DB_GetGroup(dbCurr, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "data/GetAccountSepaInfoResponse"); if (dbXA) { /* check if we have a structure with an "account" group" */ GWEN_DB_NODE *dbAccount=GWEN_DB_FindFirstGroup(dbXA, "account"); if (dbAccount) { const char *accountId; const char *bankCode; const char *accountSuffix; const char *sSepa; /* there is account info, are there multiple accounts returned? */ if (NULL!=GWEN_DB_FindNextGroup(dbAccount, "account")) { const char *reqAccountId; const char *reqBankCode; const char *reqAccountSuffix; /* yes, multiple accounts, find the one we requested */ DBG_INFO(AQHBCI_LOGDOMAIN, "Multiple accounts returned in GetAccountSepaInfoResponse"); /* GWEN_DB_Dump(dbXA, 2); */ reqAccountId=AB_Account_GetAccountNumber(jd->account); reqBankCode=AB_Account_GetBankCode(jd->account); reqAccountSuffix=AB_Account_GetSubAccountId(jd->account); if (reqAccountSuffix==NULL) reqAccountSuffix=""; while (dbAccount) { accountId=GWEN_DB_GetCharValue(dbAccount, "accountId", 0, 0); accountSuffix=GWEN_DB_GetCharValue(dbAccount, "accountsubid", 0, 0); if (accountSuffix==NULL) accountSuffix=""; bankCode=GWEN_DB_GetCharValue(dbAccount, "bankCode", 0, 0); sSepa=GWEN_DB_GetCharValue(dbAccount, "sepa", 0, "n"); DBG_DEBUG(AQHBCI_LOGDOMAIN, "- checking this account: bc=%s, an=%s, as=%s, sepa=%s (searching bc=%s, an=%s, as=%s)", bankCode, accountId, accountSuffix, sSepa, reqBankCode, reqAccountId, reqAccountSuffix); if ( (bankCode && reqBankCode && 0==strcasecmp(bankCode, reqBankCode)) && (accountId && reqAccountId && 0==strcasecmp(accountId, reqAccountId)) && (accountSuffix && reqAccountSuffix && 0==strcasecmp(accountSuffix, reqAccountSuffix)) && (strcasecmp(sSepa, "j")==0) ) { /* matching account found, break */ DBG_INFO(AQHBCI_LOGDOMAIN, "Found matching account in GetAccountSepaInfoResponse"); break; } dbAccount=GWEN_DB_FindNextGroup(dbAccount, "account"); } /* while */ } if (dbAccount) { const char *iban; const char *bic; int useWithSepa=0; /* account data found */ DBG_INFO(AQHBCI_LOGDOMAIN, "Found a GetAccountSepaInfoResponse segment"); accountId=GWEN_DB_GetCharValue(dbAccount, "accountId", 0, 0); accountSuffix=GWEN_DB_GetCharValue(dbAccount, "accountsubid", 0, 0); bankCode=GWEN_DB_GetCharValue(dbAccount, "bankCode", 0, 0); sSepa=GWEN_DB_GetCharValue(dbAccount, "sepa", 0, "n"); if (strcasecmp(sSepa, "j")==0) useWithSepa=1; iban=GWEN_DB_GetCharValue(dbAccount, "iban", 0, 0); bic=GWEN_DB_GetCharValue(dbAccount, "bic", 0, 0); rv=AB_Provider_BeginExclUseAccount(pro, jd->account); if (rv<0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Unable to lock account"); } else { if (accountSuffix) AB_Account_SetSubAccountId(jd->account, accountSuffix); AH_Account_AddFlags(jd->account, AH_BANK_FLAGS_KTV2); /* we have a sub id (even if emtpy), set flag */ if (useWithSepa) { DBG_INFO(AQHBCI_LOGDOMAIN, "SEPA available with this account"); AH_Account_AddFlags(jd->account, AH_BANK_FLAGS_SEPA); /* we have a sub id (even if emtpy), set flag */ } else { DBG_INFO(AQHBCI_LOGDOMAIN, "SEPA not available with this account"); AH_Account_SubFlags(jd->account, AH_BANK_FLAGS_SEPA); /* we have a sub id (even if emtpy), set flag */ } if (iban && *iban) { if (bic && *bic) { DBG_NOTICE(AQHBCI_LOGDOMAIN, "Setting IBAN and BIC: %s/%s", iban, bic); AB_Account_SetIban(jd->account, iban); AB_Account_SetBic(jd->account, bic); } else { DBG_NOTICE(AQHBCI_LOGDOMAIN, "Setting IBAN (no BIC): %s", iban); AB_Account_SetIban(jd->account, iban); } } else { DBG_ERROR(AQHBCI_LOGDOMAIN, "Missing information in account: BLZ=[%s], Kto=[%s], IBAN=[%s], BIC=[%s]", bankCode?bankCode:"", accountId?accountId:"", iban?iban:"", bic?bic:""); } AB_Provider_EndExclUseAccount(pro, jd->account, 0); } } } /* if dbAccount */ else { const char *accountId; const char *bankCode; const char *accountSuffix; const char *sSepa; const char *iban; const char *bic; int useWithSepa=0; /* account data found */ DBG_INFO(AQHBCI_LOGDOMAIN, "Found a GetAccountSepaInfoResponse segment"); accountId=GWEN_DB_GetCharValue(dbXA, "accountid", 0, 0); accountSuffix=GWEN_DB_GetCharValue(dbXA, "accountsubid", 0, 0); bankCode=GWEN_DB_GetCharValue(dbXA, "bankcode", 0, 0); sSepa=GWEN_DB_GetCharValue(dbXA, "sepa", 0, "n"); if (strcasecmp(sSepa, "j")==0) useWithSepa=1; iban=GWEN_DB_GetCharValue(dbXA, "iban", 0, 0); bic=GWEN_DB_GetCharValue(dbXA, "bic", 0, 0); DBG_INFO(AQHBCI_LOGDOMAIN, "Update Account"); rv=AB_Provider_BeginExclUseAccount(pro, jd->account); if (rv<0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Unable to lock account"); } else { if (accountSuffix) AB_Account_SetSubAccountId(jd->account, accountSuffix); AH_Account_AddFlags(jd->account, AH_BANK_FLAGS_KTV2); /* we have a sub id (even if emtpy), set flag */ if (useWithSepa) { DBG_INFO(AQHBCI_LOGDOMAIN, "SEPA available with this account"); AH_Account_AddFlags(jd->account, AH_BANK_FLAGS_SEPA); /* we have a sub id (even if emtpy), set flag */ } else { DBG_INFO(AQHBCI_LOGDOMAIN, "SEPA not available with this account"); AH_Account_SubFlags(jd->account, AH_BANK_FLAGS_SEPA); /* we have a sub id (even if emtpy), set flag */ } if (iban && *iban) { if (bic && *bic) { DBG_NOTICE(AQHBCI_LOGDOMAIN, "Setting IBAN and BIC: %s/%s", iban, bic); AB_Account_SetIban(jd->account, iban); AB_Account_SetBic(jd->account, bic); } else { DBG_NOTICE(AQHBCI_LOGDOMAIN, "Setting IBAN (no BIC): %s", iban); AB_Account_SetIban(jd->account, iban); } } else { DBG_ERROR(AQHBCI_LOGDOMAIN, "Missing information in account: BLZ=[%s], Kto=[%s], IBAN=[%s], BIC=[%s]", bankCode?bankCode:"", accountId?accountId:"", iban?iban:"", bic?bic:""); } AB_Provider_EndExclUseAccount(pro, jd->account, 0); DBG_INFO(AQHBCI_LOGDOMAIN, "Write AccountSpec"); rv=AB_Provider_WriteAccountSpecForAccount(pro, jd->account, 0); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); } } } /* if (dbAccount) */ } /* if (dbXA) */ dbCurr=GWEN_DB_GetNextGroup(dbCurr); } /* while dbCurr */ return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/admjobs/jobunblockpin.c0000664000175000017500000000164714043610745023242 00000000000000/*************************************************************************** begin : Mon Mar 16 2020 copyright : (C) 2020 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "jobunblockpin_l.h" AH_JOB *AH_Job_UnblockPin_new(AB_PROVIDER *pro, AB_USER *u) { AH_JOB *j; GWEN_DB_NODE *dbArgs; assert(u); j=AH_Job_new("JobUnblockPin", pro, u, 0, 0); if (!j) { DBG_ERROR(AQHBCI_LOGDOMAIN, "JobUnblockPin not supported, should not happen"); return NULL; } /* set arguments */ dbArgs=AH_Job_GetArguments(j); assert(dbArgs); DBG_INFO(AQHBCI_LOGDOMAIN, "JobUnblockPin created"); return j; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/admjobs/jobchangekeys_p.h0000664000175000017500000000174714043610745023544 00000000000000/*************************************************************************** *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_JOBLOCKKEYS_P_H #define AH_JOBLOCKKEYS_P_H #include "jobchangekeys_l.h" typedef struct AH_JOB_CHANGEKEYS AH_JOB_CHANGEKEYS; struct AH_JOB_CHANGEKEYS { uint16_t flags; uint8_t *canceled; AB_PROVIDER *pro; AB_USER *u; AB_USER *uTmp; const char *fm; char *tokenType; char *tokenName; uint32_t currentCryptKeyVersion; uint32_t currentSignKeyVersion; uint32_t currentAuthKeyVersion; GWEN_CRYPT_TOKEN *ct; const GWEN_CRYPT_TOKEN_CONTEXT *ctx; int tokenCtxId; const GWEN_CRYPT_TOKEN_KEYINFO *cryptKeyInfo; const GWEN_CRYPT_TOKEN_KEYINFO *signKeyInfo; const GWEN_CRYPT_TOKEN_KEYINFO *authKeyInfo; int8_t resp; GWEN_BUFFER *emsg; }; #endif aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/admjobs/jobchangekeys.xml0000664000175000017500000000407414043610745023572 00000000000000 %code %version 2 112 aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/admjobs/jobgetsysid.c0000664000175000017500000000766314043610745022735 00000000000000/*************************************************************************** begin : Fri Feb 01 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "jobgetsysid_p.h" GWEN_INHERIT(AH_JOB, AH_JOB_GETSYSID) AH_JOB *AH_Job_GetSysId_new(AB_PROVIDER *pro, AB_USER *u) { AH_JOB *j; GWEN_DB_NODE *args; AH_JOB_GETSYSID *jd; assert(u); j=AH_Job_new("JobSync", pro, u, 0, 0); if (!j) { DBG_ERROR(AQHBCI_LOGDOMAIN, "JobSync not supported, should not happen"); return 0; } GWEN_NEW_OBJECT(AH_JOB_GETSYSID, jd); GWEN_INHERIT_SETDATA(AH_JOB, AH_JOB_GETSYSID, j, jd, AH_Job_GetSysId_FreeData); AH_Job_SetProcessFn(j, AH_Job_GetSysId_Process); AH_Job_SetNextMsgFn(j, AH_Job_GetSysId_NextMsg); /* set arguments */ args=AH_Job_GetArguments(j); assert(args); GWEN_DB_SetIntValue(args, GWEN_DB_FLAGS_OVERWRITE_VARS, "ident/country", 280); GWEN_DB_SetCharValue(args, GWEN_DB_FLAGS_OVERWRITE_VARS, "ident/bankCode", AB_User_GetBankCode(u)); GWEN_DB_SetCharValue(args, GWEN_DB_FLAGS_OVERWRITE_VARS, "ident/customerId", AB_User_GetCustomerId(u)); GWEN_DB_SetIntValue(args, GWEN_DB_FLAGS_OVERWRITE_VARS, "sync/mode", 0); GWEN_DB_SetCharValue(args, GWEN_DB_FLAGS_OVERWRITE_VARS, "sync/systemId", "0"); DBG_INFO(AQHBCI_LOGDOMAIN, "JobGetSysId created"); #if 0 AH_Job_Dump(j, stderr, 2); #endif return j; } void GWENHYWFAR_CB AH_Job_GetSysId_FreeData(void *bp, void *p) { AH_JOB_GETSYSID *jd; jd=(AH_JOB_GETSYSID *)p; free(jd->sysId); GWEN_FREE_OBJECT(jd); } int AH_Job_GetSysId_ExtractSysId(AH_JOB *j) { AH_JOB_GETSYSID *jd; GWEN_DB_NODE *dbResponses; GWEN_DB_NODE *dbCurr; GWEN_DB_NODE *dbSyncResponse; assert(j); jd=GWEN_INHERIT_GETDATA(AH_JOB, AH_JOB_GETSYSID, j); assert(jd); dbResponses=AH_Job_GetResponses(j); assert(dbResponses); DBG_DEBUG(AQHBCI_LOGDOMAIN, "Extracting system-id from this response:"); if (GWEN_Logger_GetLevel(AQHBCI_LOGDOMAIN)>=GWEN_LoggerLevel_Debug) GWEN_DB_Dump(dbResponses, 2); /* search for "SyncResponse" */ dbCurr=GWEN_DB_GetFirstGroup(dbResponses); while (dbCurr) { dbSyncResponse=GWEN_DB_GetGroup(dbCurr, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "data/SyncResponse"); if (dbSyncResponse) { const char *s; DBG_INFO(AQHBCI_LOGDOMAIN, "Found a sync response"); s=GWEN_DB_GetCharValue(dbSyncResponse, "systemId", 0, 0); if (s) { free(jd->sysId); jd->sysId=strdup(s); return 0; } else { DBG_ERROR(AQHBCI_LOGDOMAIN, "No system id found"); free(jd->sysId); jd->sysId=0; AH_Job_SetStatus(j, AH_JobStatusError); return -1; } } dbCurr=GWEN_DB_GetNextGroup(dbCurr); } DBG_ERROR(AQHBCI_LOGDOMAIN, "No syncresponse found"); AH_Job_SetStatus(j, AH_JobStatusError); return GWEN_ERROR_GENERIC; } int AH_Job_GetSysId_Process(AH_JOB *j, AB_IMEXPORTER_CONTEXT *ctx) { AH_JOB_GETSYSID *jd; assert(j); jd=GWEN_INHERIT_GETDATA(AH_JOB, AH_JOB_GETSYSID, j); assert(jd); return AH_Job_GetSysId_ExtractSysId(j); } const char *AH_Job_GetSysId_GetSysId(AH_JOB *j) { AH_JOB_GETSYSID *jd; assert(j); jd=GWEN_INHERIT_GETDATA(AH_JOB, AH_JOB_GETSYSID, j); assert(jd); return jd->sysId; } int AH_Job_GetSysId_NextMsg(AH_JOB *j) { AH_JOB_GETSYSID *jd; assert(j); jd=GWEN_INHERIT_GETDATA(AH_JOB, AH_JOB_GETSYSID, j); assert(jd); if (AH_Job_GetSysId_ExtractSysId(j)) { DBG_INFO(AQHBCI_LOGDOMAIN, "Could not extract system id"); return 0; } else { DBG_INFO(AQHBCI_LOGDOMAIN, "Setting system id [%s]", jd->sysId); AH_User_SetSystemId(AH_Job_GetUser(j), jd->sysId); } return 1; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/admjobs/jobtan_p.h0000664000175000017500000000157214044534775022212 00000000000000/*************************************************************************** begin : Thu Jan 31 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_JOBTAN_P_H #define AH_JOBTAN_P_H #include "jobtan_l.h" #include "aqhbci/aqhbci_l.h" #include "aqhbci/joblayer/job_l.h" typedef struct AH_JOB_TAN AH_JOB_TAN; struct AH_JOB_TAN { char *challenge; char *challengeHhd; char *reference; int tanMethod; char *tanMediumId; int tanProcess; }; static void GWENHYWFAR_CB AH_Job_Tan_FreeData(void *bp, void *p); static int AH_Job_Tan_Process(AH_JOB *j, AB_IMEXPORTER_CONTEXT *ctx); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/admjobs/jobtan.xml0000664000175000017500000005370614546575647022264 00000000000000 %code %version %code %version %code %version 1 1 %code %version %code %version %code %version 1 1 %code %version %code %version %code %version 1 1 %code %version %code %version %code %version 1 1 %code %version %code %version %code %version 1 1 %code %version %code %version %code %version 1 1 %code %version %code %version %code %version 1 1 aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/admjobs/jobgetsepainfo_p.h0000664000175000017500000000153014043610745023715 00000000000000/*************************************************************************** begin : Thu Jan 31 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_JOBGETSEPAINFO_P_H #define AH_JOBGETSEPAINFO_P_H #include "aqhbci_l.h" #include "jobgetsepainfo_l.h" typedef struct AH_JOB_GETACCSEPAINFO AH_JOB_GETACCSEPAINFO; struct AH_JOB_GETACCSEPAINFO { AB_ACCOUNT *account; int scanned; }; static void GWENHYWFAR_CB AH_Job_GetAccountSepaInfo_FreeData(void *bp, void *p); static int AH_Job_GetAccountSepaInfo_Process(AH_JOB *j, AB_IMEXPORTER_CONTEXT *ctx); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/admjobs/jobgetsepainfo.xml0000664000175000017500000001346214043610745023756 00000000000000 %code %version %code %version %code %version %code %version %code %version %code %version %code %version %code %version %code %version aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/admjobs/jobacknowledge.c0000664000175000017500000000223214044534775023361 00000000000000/*************************************************************************** begin : Sat Mar 20 2021 copyright : (C) 2021 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "jobacknowledge_l.h" AH_JOB *AH_Job_Acknowledge_new(AB_PROVIDER *pro, AB_USER *u, const uint8_t *ptrAckCode, uint32_t lenAckCode) { AH_JOB *j; GWEN_DB_NODE *dbArgs; assert(u); j=AH_Job_new("JobAcknowledge", pro, u, 0, 0); if (!j) { DBG_ERROR(AQHBCI_LOGDOMAIN, "JobAcknowledge not supported, should not happen"); return NULL; } /* set arguments */ dbArgs=AH_Job_GetArguments(j); assert(dbArgs); GWEN_DB_SetBinValue(dbArgs, GWEN_DB_FLAGS_OVERWRITE_VARS, "ackCode", ptrAckCode, lenAckCode); DBG_INFO(AQHBCI_LOGDOMAIN, "JobAcknowledge created"); return j; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/admjobs/jobchangekeys_l.h0000664000175000017500000000115414044534775023541 00000000000000/*************************************************************************** *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_JOBCHANGEKEYS_L_H #define AH_JOBCHANGEKEYS_L_H #include "aqhbci/aqhbci_l.h" #include "aqhbci/joblayer/job_l.h" AH_JOB *AH_Job_ChangeKeys_new(AB_PROVIDER *pro, AB_USER *u, GWEN_DB_NODE *args, uint8_t *canceled); int AH_Job_ChangeKeys_finish(AB_PROVIDER *pro, AH_JOB *job, int res); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/admjobs/jobchangekeys.c0000664000175000017500000013126614043610745023220 00000000000000/*************************************************************************** *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "jobchangekeys_p.h" #include "../banking/user_l.h" #include "../banking/provider_l.h" #include "aqhbci/joblayer/job_crypt.h" #include #include #include #include /* Moegliche Wechsel: medium type mode datei RDH 1 karte o. cert RAH 9 datei RDH 1 datei RAH 10 karte o. cert RDH 1 karte o. cert RAH 9 datei RDH 2 karte o. cert RAH 9 datei RDH 2 datei RAH 10 karte o. cert RDH 5 karte o. cert RAH 9 ohne Schluesselwechsel: karte o. cert RDH 9 karte o. cert RAH 9 datei RDH 10 karte o. cert RAH 9 datei RDH 10 datei RAH 10 */ GWEN_INHERIT(AH_JOB, AH_JOB_CHANGEKEYS) const char *fmtStr(char *buff, size_t buffLen, const char *fmt, ...) __attribute__((format(printf, 3, 4))); const char *fmtStr(char *buff, size_t buffLen, const char *fmt, ...) { va_list args; va_start(args, fmt); vsnprintf(buff, buffLen - 1, fmt, args); buff[buffLen - 1] = 0; va_end(args); return buff; } #define FB fmtBuff, sizeof(fmtBuff) int onError(const char *m, int rv) { DBG_ERROR(AQHBCI_LOGDOMAIN, "%s", m); GWEN_Gui_MessageBox(GWEN_GUI_MSG_FLAGS_TYPE_ERROR, I18N("Change keys: error"), I18N(m), I18N("OK"), NULL, NULL, 0); return rv; } const char *strUpper(char *s) { size_t i; size_t l = strlen(s); for (i = 0; i < l; i++) { if ((s[i] >= 'a') && (s[i] <= 'z')) s[i] -= 0x20; } return s; } int8_t getKeyInfo(AH_HBCI *h, const char *tt, const char *tn, uint32_t cid, GWEN_CRYPT_TOKEN **ct, const GWEN_CRYPT_TOKEN_CONTEXT **ctx, const GWEN_CRYPT_TOKEN_KEYINFO **cryptKeyInfo, const GWEN_CRYPT_TOKEN_KEYINFO **signKeyInfo, const GWEN_CRYPT_TOKEN_KEYINFO **authKeyInfo) { int8_t res = 0; uint8_t i; uint32_t f = GWEN_CRYPT_TOKEN_KEYFLAGS_HASMODULUS | GWEN_CRYPT_TOKEN_KEYFLAGS_HASEXPONENT | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYVERSION | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYNUMBER; if (!*ct && (((AB_Banking_GetCryptToken(AH_HBCI_GetBankingApi(h), tt, tn, ct) < 0)) || !*ct)) { DBG_ERROR(AQHBCI_LOGDOMAIN, "AB_Banking_GetCryptToken() failed (tt '%s', tn '%s').", tt, tn); return -1; } if (GWEN_Crypt_Token_Open(*ct, 0, 0) < 0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "GWEN_Crypt_Token_Open() failed."); return -1; } *ctx = GWEN_Crypt_Token_GetContext(*ct, cid, 0); if (!*ctx) { DBG_ERROR(AQHBCI_LOGDOMAIN, "GWEN_Crypt_Token_GetContext() failed (cid %ld).", (long)cid); return -1; } for (i = 0; i < 3; i++) { uint32_t kid = 0; const GWEN_CRYPT_TOKEN_KEYINFO **ki = NULL; char kl = '?'; switch (i) { case 0: kid = GWEN_Crypt_Token_Context_GetDecipherKeyId(*ctx); ki = cryptKeyInfo, kl = 'V'; break; case 1: kid = GWEN_Crypt_Token_Context_GetSignKeyId(*ctx); ki = signKeyInfo; kl = 'S'; break; case 2: kid = GWEN_Crypt_Token_Context_GetAuthSignKeyId(*ctx); ki = authKeyInfo; kl = 'D'; break; } if ((kl == 'D') && !strcmp(tt, "ddvcard")) continue; if ((*ki = GWEN_Crypt_Token_GetKeyInfo(*ct, kid, f, 0)) == NULL) { DBG_ERROR(AQHBCI_LOGDOMAIN, "GWEN_Crypt_Token_GetKeyInfo() (%c) failed.", kl); res = -1; break; } } return res; } int8_t tokenHasKeys(GWEN_CRYPT_TOKEN *ct, const GWEN_CRYPT_TOKEN_CONTEXT *ctx) { uint8_t i; int8_t res = 2; for (i = 0; (res > 0) && (i < 2); i++) { const GWEN_CRYPT_TOKEN_KEYINFO *ki = NULL; int kn = 0, kv = 0; uint32_t flags = 0; uint32_t id = (i == 0) ? GWEN_Crypt_Token_Context_GetDecipherKeyId(ctx) : GWEN_Crypt_Token_Context_GetVerifyKeyId(ctx); if (res == 2) res = 1; if (!id) res = -1; else ki = GWEN_Crypt_Token_GetKeyInfo(ct, id, 0, 0); if (!ki) res = -1; else { kn = GWEN_Crypt_Token_KeyInfo_GetKeyNumber(ki); kv = GWEN_Crypt_Token_KeyInfo_GetKeyVersion(ki); flags = GWEN_Crypt_Token_KeyInfo_GetFlags(ki); } if ((res >= 0) && (!kn || !kv || !(flags & GWEN_CRYPT_TOKEN_KEYFLAGS_HASMODULUS) || !(flags & GWEN_CRYPT_TOKEN_KEYFLAGS_HASEXPONENT))) res = 0; DBG_NOTICE(AQHBCI_LOGDOMAIN, "%s(): id %ld %d %d m %d e %d -> %d.", __FUNCTION__, (long)id, kn, kv, (flags & GWEN_CRYPT_TOKEN_KEYFLAGS_HASMODULUS) != 0, (flags & GWEN_CRYPT_TOKEN_KEYFLAGS_HASEXPONENT) != 0, res); } return (res == 1) ? 1 : 0; } #if 1 int8_t setKeyVersion(GWEN_CRYPT_TOKEN *ct, const GWEN_CRYPT_TOKEN_CONTEXT *ctx, const GWEN_CRYPT_TOKEN_KEYINFO *ki, char t, uint32_t kv) { int8_t ret = 0; GWEN_CRYPT_TOKEN_KEYINFO *kin = NULL; uint32_t kid = 0; switch (t) { case 'V': kid = GWEN_Crypt_Token_Context_GetDecipherKeyId(ctx); break; case 'S': kid = GWEN_Crypt_Token_Context_GetSignKeyId(ctx); break; case 'A': kid = GWEN_Crypt_Token_Context_GetAuthSignKeyId(ctx); break; default: DBG_ERROR(AQHBCI_LOGDOMAIN, "type %c invalid.", t); return -1; } kin = GWEN_Crypt_Token_KeyInfo_dup(ki); if (kv > 999) kv = 1; DBG_NOTICE(AQHBCI_LOGDOMAIN, "%s(): key %ld '%c' set version %ld.", __FUNCTION__, (long)kid, t, (long)kv); GWEN_Crypt_Token_KeyInfo_SetKeyVersion(kin, kv); if (GWEN_Crypt_Token_SetKeyInfo(ct, kid, kin, 0)) { DBG_ERROR(AQHBCI_LOGDOMAIN, "%s(): GWEN_Crypt_Token_SetKeyInfo() failed.", __FUNCTION__); ret = -1; } GWEN_Crypt_Token_KeyInfo_free(kin); if (ret) return ret; if ((ret == 0) && (ki = GWEN_Crypt_Token_GetKeyInfo(ct, kid, 0, 0)) == NULL) { DBG_ERROR(AQHBCI_LOGDOMAIN, "%s(): GWEN_Crypt_Token_GetKeyInfo() (%c) failed.", __FUNCTION__, t); ret = -1; } if (ret) return ret; DBG_NOTICE(AQHBCI_LOGDOMAIN, "%s(): key '%c' version now %d.", __FUNCTION__, t, GWEN_Crypt_Token_KeyInfo_GetKeyVersion(ki)); return 0; } #endif #define FJCK_CHMEDIA 1 #define FJCK_CHKEY 2 #define FJCK_CHPROFILE 4 #define FJCK_SRCFILE 8 #define FJCK_DSTFILE 16 #define FJCK_DSTFILE_EXISTS 32 void GWENHYWFAR_CB GWENHYWFAR_CB AH_Job_ChangeKeys_FreeData(void *bp, void *p); int AH_Job_ChangeKeys_NextMsg(AH_JOB *j); AH_JOB *AH_Job_ChangeKeys_new(AB_PROVIDER *pro, AB_USER *u, GWEN_DB_NODE *args, uint8_t *canceled) { int res = 0; char fmtBuff[256]; AH_JOB *j = NULL; AH_JOB_CHANGEKEYS *jd = NULL; AB_USER *uTmp = NULL; AH_HBCI *h = AH_Provider_GetHbci(pro); uint16_t flags = FJCK_CHKEY | FJCK_CHMEDIA | FJCK_CHPROFILE; AH_CRYPT_MODE cryptModeNew = AH_CryptMode_None; int cryptTypeNew = -1; int tokenCtxIdNew = -1; const char *tokenTypeFromToken = NULL; const char *tokenNameFromToken = NULL; char *wantedTokenType = NULL, *wantedTokenName = NULL; const char *wantedCryptMode = NULL; GWEN_CRYPT_TOKEN *ct = NULL, *ctNew = NULL; const GWEN_CRYPT_TOKEN_CONTEXT *ctx = NULL, *ctxNew = NULL; const GWEN_CRYPT_TOKEN_KEYINFO *cryptKeyInfo = NULL, *signKeyInfo = NULL, *authKeyInfo = NULL, *kiVNew = NULL, *kiSNew = NULL, *kiANew = NULL; GWEN_PLUGIN *plg = NULL; GWEN_PLUGIN_MANAGER *pm = GWEN_PluginManager_FindPluginManager(GWEN_CRYPT_TOKEN_PLUGIN_TYPENAME); const char *cmn = "?", *fm = "?", *fmn = "?"; assert(h); //GWEN_DB_Dump(args, 0); wantedTokenType = strdup(GWEN_DB_GetCharValue(args, "tokenType", 0, "")); wantedTokenName = strdup(GWEN_DB_GetCharValue(args, "tokenName", 0, "")); wantedCryptMode = GWEN_DB_GetCharValue(args, "cryptMode", 0, ""); cryptTypeNew = GWEN_DB_GetIntValue(args, "cryptType", 0, -1); tokenCtxIdNew = GWEN_DB_GetIntValue(args, "context", 0, -1); if (wantedCryptMode && *wantedCryptMode) { if (!strcasecmp(wantedCryptMode, "RDH")) cryptModeNew = AH_CryptMode_Rdh; else if (!strcasecmp(wantedCryptMode, "RAH")) cryptModeNew = AH_CryptMode_Rah; } tokenTypeFromToken = AH_User_GetTokenType(u); tokenNameFromToken = AH_User_GetTokenName(u); if (!strcasecmp(tokenTypeFromToken, "ohbci")) flags |= FJCK_SRCFILE; if (!*wantedTokenType) { free(wantedTokenType); wantedTokenType = NULL; if (*wantedTokenName && !strchr(wantedTokenName, '/') && !strchr(wantedTokenName, '\\')) { // assume thats a card number size_t l = strlen(wantedTokenName); size_t i = 0; for (; i < l; i++) { if ((wantedTokenName[i] < '0') || (wantedTokenName[i] > '9')) break; } if (i == l) { wantedTokenType = strdup("card"); if (l < 10) { char *tmp = strdup("0000000000"); for (i = 0; i < l; i++) tmp[9 - i] = wantedTokenName[(l - 1) - i]; free(wantedTokenName); wantedTokenName = tmp; } } } } if (wantedTokenType && !*wantedTokenType) { free(wantedTokenType); wantedTokenType = NULL; } if (!wantedTokenType) wantedTokenType = strdup(tokenTypeFromToken); if (!strcasecmp(wantedTokenType, "file") || !strcasecmp(wantedTokenType, "ohbci")) { flags |= FJCK_DSTFILE; free(wantedTokenType); wantedTokenType = strdup("ohbci"); } else if (!strstr(wantedTokenType, "card")) res = onError(fmtStr(FB, "Invalid token-type '%s'.", wantedTokenType), -1); if (!*wantedTokenName) { free(wantedTokenName); wantedTokenName = strdup(tokenNameFromToken); if (!strcasecmp(tokenTypeFromToken, "ohbci")) flags |= FJCK_DSTFILE; } if (res == 0) { if (!access(wantedTokenName, F_OK)) flags |= FJCK_DSTFILE_EXISTS; if (!strcasecmp(tokenTypeFromToken, wantedTokenType) && !strcmp(tokenNameFromToken, wantedTokenName)) { if (cryptModeNew == AH_CryptMode_None) cryptModeNew = AH_User_GetCryptMode(u); if (cryptTypeNew < 0) cryptTypeNew = AH_User_GetRdhType(u); } if (cryptModeNew == AH_CryptMode_None) res = onError("Crypt-mode must be specified.", -1); if ((res == 0) && (cryptTypeNew < 0)) res = onError("Crypt-typ must specified.", -1); } if (tokenCtxIdNew < 0) tokenCtxIdNew = 1; fm = (flags & FJCK_SRCFILE) ? "Keyfile" : "Chipcard"; fmn = (flags & FJCK_DSTFILE) ? "Keyfile" : "Chipcard"; DBG_INFO(AQHBCI_LOGDOMAIN, "'%s' '%s' -> '%s' '%s', file %d exists %d'.", tokenTypeFromToken, tokenNameFromToken, wantedTokenType, wantedTokenName, (flags & FJCK_DSTFILE) != 0, (flags & FJCK_DSTFILE_EXISTS) != 0); if (res == 0) { if ( (!((flags & FJCK_SRCFILE)) == !((flags & FJCK_DSTFILE))) && !strcmp(tokenNameFromToken, wantedTokenName) ) res = onError("Keychange without media change is not supported, yet.", -1); } if (res == 0) { switch (cryptModeNew) { case AH_CryptMode_Rah: cmn = "RAH"; break; case AH_CryptMode_Rdh: cmn = "RDH"; break; default: cmn = "unknown"; } if (!strcasecmp(tokenTypeFromToken, wantedTokenType) && !strcmp(tokenNameFromToken, wantedTokenName)) flags &= ~FJCK_CHMEDIA; if ((AH_User_GetCryptMode(u) == cryptModeNew) && (AH_User_GetRdhType(u) == cryptTypeNew)) flags &= ~FJCK_CHPROFILE; DBG_INFO(AQHBCI_LOGDOMAIN, "'%s %d' -> '%s' '%s' '%s %d', change: m %d, k %d, p %d.", AH_CryptMode_toString(AH_User_GetCryptMode(u)), AH_User_GetRdhType(u), wantedTokenType, wantedTokenName, AH_CryptMode_toString(cryptModeNew), cryptTypeNew, (flags & FJCK_CHMEDIA) != 0, (flags & FJCK_CHKEY) != 0, (flags & FJCK_CHPROFILE) != 0); if (flags & FJCK_CHPROFILE) { res = -1; switch (AH_User_GetCryptMode(u)) { case AH_CryptMode_Rdh: switch (cryptModeNew) { case AH_CryptMode_Rdh: onError("„nderung des Schlĵsselsprofils nach RDH nicht unterstĵtzt.", -1); break; default: if (!(flags & FJCK_SRCFILE) && !(flags & FJCK_DSTFILE) && (AH_User_GetRdhType(u) == 9) && (cryptTypeNew == 9)) res = 1; else if ((flags & FJCK_SRCFILE) && !(flags & FJCK_DSTFILE) && (AH_User_GetRdhType(u) == 10) && (cryptTypeNew == 9)) res = 1; else if ((flags & FJCK_SRCFILE) && (flags & FJCK_DSTFILE) && (AH_User_GetRdhType(u) == 10) && (cryptTypeNew == 10)) res = 1; if (res == 1) { flags &= ~FJCK_CHKEY; res = 0; } else { if (flags & FJCK_SRCFILE) { switch (AH_User_GetRdhType(u)) { case 1: case 2: if (!(flags & FJCK_DSTFILE) && (cryptTypeNew == 9)) res = 0; if ((flags & FJCK_DSTFILE) && (cryptTypeNew == 10)) res = 0; break; default: ; } } else { switch (AH_User_GetRdhType(u)) { case 1: case 5: if (!(flags & FJCK_DSTFILE) && (cryptTypeNew == 9)) res = 0; break; default: ; } } if (res) onError(fmtStr(FB, "Aenderung des Schluesselsprofils von %s RDH-%d nach %s RAH-%d nicht unterstuetzt.", fm, AH_User_GetRdhType(u), fmn, cryptTypeNew), -1); } } break; default: onError("Aenderung des Sicherheitsprofils nur von RDH aus unterstuetzt.", -1); } } if (res) *canceled = 2; } if (res == 0) { // keyinfo current token if (getKeyInfo(h, AH_User_GetTokenType(u), AH_User_GetTokenName(u), AH_User_GetTokenContextId(u), &ct, &ctx, &cryptKeyInfo, &signKeyInfo, &authKeyInfo) || !ct || !ctx || !cryptKeyInfo || !signKeyInfo || !authKeyInfo) { DBG_INFO(AQHBCI_LOGDOMAIN, "getKeyInfo() ct %p, ctx %p, ki %p %p %p.", ct, ctx, cryptKeyInfo, signKeyInfo, authKeyInfo); if (!ct || !ctx) res = onError("Could not get token.", -1); else res = onError("Crypt token type not suitable for this operation.", -1); } } if ((res == 0) && (flags & FJCK_CHMEDIA)) { char *tokenNew = NULL; if (!strcmp(wantedTokenType, "card")) { GWEN_BUFFER *ctn = GWEN_Buffer_new(0, 64, 0, 1); GWEN_BUFFER *cmn = GWEN_Buffer_new(0, 64, 0, 1); for (; res == 0;) { res = AB_Banking_CheckCryptToken(AB_Provider_GetBanking(pro), GWEN_Crypt_Token_Device_Card, ctn, cmn); DBG_INFO(AQHBCI_LOGDOMAIN, "card: '%s' '%s'.", GWEN_Buffer_GetStart(ctn), GWEN_Buffer_GetStart(cmn)); if (res) res = onError("AB_Banking_CheckCryptToken() failed.", -1); else { if (tokenNew) free(tokenNew); tokenNew = strdup(GWEN_Buffer_GetStart(ctn)); if (!strcmp(wantedTokenName, GWEN_Buffer_GetStart(cmn))) break; if (GWEN_Gui_MessageBox(GWEN_GUI_MSG_FLAGS_TYPE_INFO, I18N("Change keys: insert card"), fmtStr(FB, "Chipcard '%s' needed.", wantedTokenName), I18N("Abort"), I18N("OK"), NULL, 0) != 2) res = -2; } } GWEN_Buffer_free(ctn); GWEN_Buffer_free(cmn); if (tokenNew) { free(wantedTokenType); wantedTokenType = tokenNew; tokenNew = NULL; } } if (tokenNew) free(tokenNew); if (res == 0) plg = GWEN_PluginManager_GetPlugin(pm, wantedTokenType); if (!plg && (res == 0)) res = onError(fmtStr(FB, "Could not get plugin for new tokentype '%s'.", wantedTokenType), -1); if (plg && (flags & FJCK_DSTFILE)) { // diff. context? if ((flags & FJCK_SRCFILE) && !strcmp(tokenNameFromToken, wantedTokenName)) res = onError(fmtStr(FB, "New and old keyfile must be different."), -1); else { uint8_t del = 1; tokenCtxIdNew = 1; if (flags & FJCK_DSTFILE_EXISTS) { del = 0; res = GWEN_Gui_MessageBox(GWEN_GUI_MSG_FLAGS_TYPE_INFO, I18N("Change keys: confirm"), fmtStr(FB, "Keyfile '%s' already exists.", wantedTokenName), I18N("Abort"), I18N("Use"), I18N("Delete"), 0); if (res == 1) res = -1; else if (res == 2) { // use res = 0; //flags &= ~FJCK_CHKEY; if (getKeyInfo(h, wantedTokenType, wantedTokenName, tokenCtxIdNew, &ctNew, &ctxNew, &kiVNew, &kiSNew, &kiANew) || !ctNew || !ctxNew || !kiVNew || !kiSNew || !kiANew) res = onError("Could not get token for new keyfile.", -1); } else if (GWEN_Gui_MessageBox(GWEN_GUI_MSG_FLAGS_TYPE_INFO, I18N("Change keys: confirm"), fmtStr(FB, "Really delete keyfile '%s'?", wantedTokenName), I18N("Abort"), I18N("Delete"), NULL, 0) != 2) res = -1; else { res = 0; del = 1; } if (res) { res = onError("Canceled.", -1); *canceled = 1; } else if (del) unlink(wantedTokenName); } if ((res == 0) && del) { if (GWEN_Gui_MessageBox(GWEN_GUI_MSG_FLAGS_TYPE_INFO, I18N("Change keys: confirm"), fmtStr(FB, "Schlĵsseldatei '%s' wird erzeugt.", wantedTokenName), I18N("Abort"), I18N("OK"), NULL, 0) != 2) { res = onError("Canceled.", -1); *canceled = 1; } if (res == 0) { ctNew = GWEN_Crypt_Token_Plugin_CreateToken(plg, wantedTokenName); if (!ctNew) res = onError(fmtStr(FB, "Could not create crypt token '%s'.", wantedTokenName), -1); else if (GWEN_Crypt_Token_Create(ctNew, 0) < 0) res = onError(fmtStr(FB, "Could not create keyfile '%s'.", GWEN_Crypt_Token_GetTokenName(ctNew)), -1); else if (GWEN_Crypt_Token_Close(ctNew, 0, 0)) res = onError("Could not close token.", -1); } } } } // keyinfo dest. token if (res == 0) { if (getKeyInfo(h, wantedTokenType, wantedTokenName, tokenCtxIdNew, &ctNew, &ctxNew, &kiVNew, &kiSNew, &kiANew) || !ctNew || !ctxNew || !kiVNew || !kiSNew || !kiANew) { DBG_NOTICE(AQHBCI_LOGDOMAIN, "getKeyInfo() ct %p, ctx %p, ki %p %p %p.", ct, ctx, cryptKeyInfo, signKeyInfo, authKeyInfo); if (!ct || !ctx) res = onError("Could not get token.", -1); else res = onError("Crypt token not suitable for this operation.", -1); } } if ((res == 0) && !(flags & FJCK_DSTFILE)) { int tnV = GWEN_Crypt_Token_KeyInfo_GetKeyNumber(kiVNew); int tnS = GWEN_Crypt_Token_KeyInfo_GetKeyNumber(kiSNew); if ((cryptTypeNew != tnV) || (cryptTypeNew != tnS)) { DBG_ERROR(AQHBCI_LOGDOMAIN, "rdh-type %d, card %d/%d..", cryptTypeNew, tnV, tnS); res = onError("Target crypt token not suitable for thius operation.", -1); } } } #if 1 if (res == 0) { // how get key-pair from token? if (!(flags & FJCK_CHKEY) && (flags & FJCK_CHMEDIA)) res = onError("Change of security profile without change of crypt token not implemented.", -1); } #endif if (res == 0) { if (flags & FJCK_CHMEDIA) { char *cm = strdup(AH_CryptMode_toString(AH_User_GetCryptMode(u))); const char *m = fmtStr(FB, "Change crypt token from\n %s '%s', %s-%d\nto\n %s '%s', %s-%d?", fm, tokenNameFromToken, strUpper(cm), AH_User_GetRdhType(u), fmn, wantedTokenName, cmn, cryptTypeNew); free(cm); if (GWEN_Gui_MessageBox(GWEN_GUI_MSG_FLAGS_TYPE_INFO, I18N("Change keys: confirm"), m, I18N("Abort"), I18N("OK"), NULL, 0) != 2) { res = -1; *canceled = 1; } } } if (res == 0) { uTmp = AB_Provider_CreateUserObject(pro); AH_User_SetCryptMode(uTmp, cryptModeNew); AH_User_SetRdhType(uTmp, cryptTypeNew); AH_User_SetTokenType(uTmp, wantedTokenType); AH_User_SetTokenName(uTmp, wantedTokenName); AH_User_SetTokenContextId(uTmp, tokenCtxIdNew); AB_User_SetBankCode(uTmp, AB_User_GetBankCode(u)); AH_User_SetHbciVersion(uTmp, AH_User_GetHbciVersion(u)); AH_User_SetServerUrl(uTmp, AH_User_GetServerUrl(u)); DBG_NOTICE(AQHBCI_LOGDOMAIN, "chng k %d p %d m %d, token: open %d ctx %d knr dst %d %d %d.", (flags & FJCK_CHKEY) != 0, (flags & FJCK_CHPROFILE) != 0, (flags & FJCK_CHMEDIA) != 0, GWEN_Crypt_Token_IsOpen(ctNew), tokenCtxIdNew, kiVNew ? GWEN_Crypt_Token_KeyInfo_GetKeyNumber(kiVNew) : - 1, kiSNew ? GWEN_Crypt_Token_KeyInfo_GetKeyNumber(kiSNew) : -1, kiANew ? GWEN_Crypt_Token_KeyInfo_GetKeyNumber(kiANew) : -1); } if (res == 0) { j = AH_Job_new((flags & FJCK_DSTFILE) ? "JobChangeKeys" : "JobChangeKeysA", pro, u, NULL, 0); DBG_INFO(AQHBCI_LOGDOMAIN, "%s(): j %p u %p '%s'.", __FUNCTION__, j, u, j ? AH_Job_GetCode(j) : "-"); if (!j) res = onError("AH_Job_new() failed.", -1); } if (res == 0) { GWEN_NEW_OBJECT(AH_JOB_CHANGEKEYS, jd); GWEN_INHERIT_SETDATA(AH_JOB, AH_JOB_CHANGEKEYS, j, jd, AH_Job_ChangeKeys_FreeData); AH_Job_SetNextMsgFn(j, AH_Job_ChangeKeys_NextMsg); args = AH_Job_GetArguments(j); assert(args); } if (res == 0) { char *cm = strdup(AH_CryptMode_toString(cryptModeNew)); uint8_t i; strUpper(cm); for (i = 0; i < 3; i++) { const char *kt = "?"; GWEN_DB_NODE *db = NULL; if (i < 2) { switch (i) { case 0: kt = "V"; db = GWEN_DB_GetGroup(args, GWEN_DB_FLAGS_DEFAULT, "getcryptKey"); break; case 1: kt = "S"; db = GWEN_DB_GetGroup(args, GWEN_DB_FLAGS_DEFAULT, "getsignKey"); break; } // HKISA GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "secProfile/code", cm); GWEN_DB_SetIntValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "secProfile/version", cryptTypeNew); GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "key/userid", AH_User_GetPeerId(u)); GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "key/keyType", kt); GWEN_DB_SetIntValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "key/keynum", 999); GWEN_DB_SetIntValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "key/keyversion", 999); } switch (i) { case 0: kt = "V"; db = GWEN_DB_GetGroup(args, GWEN_DB_FLAGS_DEFAULT, "setcryptKey"); break; case 1: kt = "S"; db = GWEN_DB_GetGroup(args, GWEN_DB_FLAGS_DEFAULT, "setsignKey"); break; case 2: kt = "D"; db = GWEN_DB_GetGroup(args, GWEN_DB_FLAGS_DEFAULT, "setauthKey"); break; } // HKSAK GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "secProfile/code", cm); GWEN_DB_SetIntValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "secProfile/version", cryptTypeNew); GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "key/userid", AH_User_GetPeerId(u)); GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "key/keyType", kt); GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "keyName/keyType", kt); GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "keyName/userid", AH_User_GetPeerId(u)); } free(cm); } if (res) { if (j) AH_Job_free(j); j = NULL; if (res == -2) *canceled = 2; } if (jd) { jd->flags = flags; jd->canceled = canceled; jd->pro = pro; jd->u = u; jd->uTmp = uTmp; jd->fm = fmn; jd->tokenType = wantedTokenType; jd->tokenName = wantedTokenName; jd->currentCryptKeyVersion = cryptKeyInfo ? GWEN_Crypt_Token_KeyInfo_GetKeyVersion(cryptKeyInfo) : 0; jd->currentSignKeyVersion = signKeyInfo ? GWEN_Crypt_Token_KeyInfo_GetKeyVersion(signKeyInfo) : 0; jd->currentAuthKeyVersion = authKeyInfo ? GWEN_Crypt_Token_KeyInfo_GetKeyVersion(authKeyInfo) : 0; jd->ct = ctNew; jd->ctx = ctxNew; jd->tokenCtxId = tokenCtxIdNew; jd->cryptKeyInfo = kiVNew; jd->signKeyInfo = kiSNew; jd->authKeyInfo = kiANew; jd->resp = -1; jd->emsg = NULL; } if (ctNew) GWEN_Crypt_Token_Close(ctNew, 0, 0); if (ct) GWEN_Crypt_Token_Close(ct, 0, 0); return j; } int onServerKeysImported(AH_JOB_CHANGEKEYS *jd) { // serverkeys imported (knowing server-keys length is necessary for some key-types when created) // create keys if required char fmtBuff[256]; AH_HBCI *h = AH_Provider_GetHbci(jd->pro); int res = 0; const char *m = NULL; const char *btn1 = NULL, *btn2 = NULL, *btn3 = NULL; uint8_t ok = 0; DBG_NOTICE(AQHBCI_LOGDOMAIN, "%s(): flags 0x%04X.", __FUNCTION__, jd->flags); if (jd->flags & FJCK_CHKEY) { //if(!jd->cryptKeyInfo || !GWEN_Crypt_Token_KeyInfo_GetKeyNumber(jd->cryptKeyInfo) || !jd->signKeyInfo || !GWEN_Crypt_Token_KeyInfo_GetKeyNumber(jd->signKeyInfo)) if (!tokenHasKeys(jd->ct, jd->ctx)) { m = fmtStr(FB, "Creating new keys on %s '%s'.", jd->fm, jd->tokenName); btn1 = "Abort"; btn2 = "OK"; ok = 2; } else { #if 0 // TODO check keys are compatible with cryptmode // if so, ... { m = fmtStr(FB, "Auf %s '%s' sind Schluessel vorhanden,\nsollen dennoch neue Schluessel erzeugt werden?", fmn, wantedTokenName); btn1 = "Abort"; btn2 = "No"; btn3 = "Yes"; ok = 3; } else { m = fmtStr(FB, "Auf %s '%s' vorhandene Schluessel koennen nicht verwendet werden,\nneue Schluessel werden erzeugt.", fmn, wantedTokenName); btn1 = "Abort"; btn2 = "OK"; ok = 2; } #else m = fmtStr(FB, "Auf %s '%s' sind Schluessel vorhanden die verwendet werden koennen,\n" "wenn sie zum gewuehlten Verschluesselungsverfahren passen.\n" "Sollen neue Schluessel erzeugt werden?", jd->fm, jd->tokenName); btn1 = "Abort"; btn2 = "No"; btn3 = "Yes"; ok = 3; #endif } res = GWEN_Gui_MessageBox(GWEN_GUI_MSG_FLAGS_TYPE_INFO, I18N("Change keys: confirm"), m, I18N(btn1), I18N(btn2), btn3 ? I18N(btn3) : NULL, 0); if (res == 1) { res = -1; *jd->canceled = 1; } else { if (res == ok) { res = 0; DBG_INFO(AQHBCI_LOGDOMAIN, "creating keys..."); res = AH_Provider_CreateKeys(jd->pro, jd->uTmp, 1); if (res) res = onError(fmtStr(FB, "Could not create keys (%d).", res), -1); DBG_INFO(AQHBCI_LOGDOMAIN, "creating keys done."); } else res = 0; } } else res = -1; if ((res == 0) && (getKeyInfo(h, jd->tokenType, jd->tokenName, jd->tokenCtxId, &jd->ct, &jd->ctx, &jd->cryptKeyInfo, &jd->signKeyInfo, &jd->authKeyInfo) || !jd->ct || !jd->ctx || !jd->cryptKeyInfo || !jd->signKeyInfo || !jd->authKeyInfo)) res = onError("Could not get key-info.", -1); if (res == 0) { #if 1 if (!(jd->flags & FJCK_CHPROFILE)) { // set keyversion from current token + 1 on dest.-token uint32_t kvV = jd->currentCryptKeyVersion ? (jd->currentCryptKeyVersion + 1) : 0; uint32_t kvS = jd->currentSignKeyVersion ? (jd->currentSignKeyVersion + 1) : 0; uint32_t kvA = jd->currentAuthKeyVersion ? (jd->currentAuthKeyVersion + 1) : 0; DBG_NOTICE(AQHBCI_LOGDOMAIN, "set keyversions %ld -> %ld, %ld -> %ld, %ld -> %ld.", (long)jd->currentCryptKeyVersion, (long)kvV, (long)jd->currentSignKeyVersion, (long)kvS, (long)jd->currentAuthKeyVersion, (long)kvA); if (kvV) setKeyVersion((GWEN_CRYPT_TOKEN *)jd->ct, jd->ctx, jd->cryptKeyInfo, 'V', kvV); if (kvS) setKeyVersion((GWEN_CRYPT_TOKEN *)jd->ct, jd->ctx, jd->signKeyInfo, 'S', kvS); if (!(jd->flags & FJCK_DSTFILE) && kvA) setKeyVersion((GWEN_CRYPT_TOKEN *)jd->ct, jd->ctx, jd->authKeyInfo, 'A', kvA); } #endif if (jd->flags & FJCK_CHKEY) { if (!jd->signKeyInfo || !GWEN_Crypt_Token_KeyInfo_GetKeyNumber(jd->signKeyInfo)) { DBG_INFO(AQHBCI_LOGDOMAIN, "Kein Signierschluessel."); res = onError("Kein Signierschluessel auf dem Ziel-medium gefunden.", -1); } else { int sc = GWEN_Crypt_Token_KeyInfo_GetSignCounter(jd->signKeyInfo); DBG_INFO(AQHBCI_LOGDOMAIN, "%s(): sig counter %d.", __FUNCTION__, sc); if (sc > 1) { if (!(jd->flags & FJCK_DSTFILE)) res = onError("Der Sequenzzaehler kann nicht zurueckgesetzt werden.", -1); else { res = GWEN_Gui_MessageBox(GWEN_GUI_MSG_FLAGS_TYPE_INFO, I18N("Change keys: confirm"), "Der Sequenzzaehler wird zurueckgesetzt.", I18N("Abort"), I18N("OK"), NULL, 0); if (res != 2) res = -1; else res = 0; } if (res == 0) { DBG_INFO(AQHBCI_LOGDOMAIN, "%s(): reset sig counter.", __FUNCTION__); GWEN_Crypt_Token_KeyInfo_SetSignCounter((GWEN_CRYPT_TOKEN_KEYINFO *)jd->signKeyInfo, 1); } } } } } if (res == 0) { if (getKeyInfo(h, jd->tokenType, jd->tokenName, jd->tokenCtxId, &jd->ct, &jd->ctx, &jd->cryptKeyInfo, &jd->signKeyInfo, &jd->authKeyInfo) || !jd->ct || !jd->ctx || !jd->cryptKeyInfo || !jd->signKeyInfo || !jd->authKeyInfo) res = onError("Could not get key-info.", -1); } if ((res == 0) && !jd->ctx) res = onError("Missing new ctx.", -1); return res; } #define RSP_NOSRVRSP 1 #define RSP_WARN 2 #define RSP_ERR 3 int8_t parseResponse(AH_JOB *j) { int8_t res = 0; int rc = 0; uint8_t gotResp = 0; AH_JOB_CHANGEKEYS *jd = GWEN_INHERIT_GETDATA(AH_JOB, AH_JOB_CHANGEKEYS, j); GWEN_DB_NODE *n = AH_Job_GetResponses(j); if (AH_Job_GetStatus(j) != AH_JobStatusAnswered) rc = -1; assert(n); jd->emsg = GWEN_Buffer_new(NULL, 2048, 0, 0); n = GWEN_DB_GetFirstGroup(n); while (n) { //GWEN_DB_Dump(n, 0); if (!strcmp(GWEN_DB_GroupName(n), "SegResult")) { int mn = GWEN_DB_GetIntValue(n, "security/msgnum", 0, -1); if (mn == 2) { gotResp = 1; if ((rc >= 0) && (rc < 9000)) { rc = GWEN_DB_GetIntValue(n, "data/SegResult/result/resultcode", 0, -1); if (rc == 3250) { DBG_NOTICE(AQHBCI_LOGDOMAIN, "%s(): response %d tells us: no HKEND.", __FUNCTION__, rc); res = 1; rc = 0; } else { GWEN_Buffer_AppendString(jd->emsg, GWEN_DB_GetCharValue(n, "data/SegResult/result/text", 0, "?")); GWEN_Buffer_AppendString(jd->emsg, "\n"); } } DBG_NOTICE(AQHBCI_LOGDOMAIN, "result %d.", rc); DBG_NOTICE(AQHBCI_LOGDOMAIN, "result '%s'.", GWEN_Buffer_GetStart(jd->emsg)); } else { DBG_NOTICE(AQHBCI_LOGDOMAIN, "%s(): #%d result %d '%s'.", __FUNCTION__, GWEN_DB_GetIntValue(n, "security/msgnum", 0, -1), GWEN_DB_GetIntValue(n, "data/SegResult/result/resultcode", 0, -1), GWEN_DB_GetCharValue(n, "data/SegResult/result/text", 0, "?")); if (GWEN_DB_GetIntValue(n, "data/SegResult/result/resultcode", 0, -1) >= 9000) { rc = GWEN_DB_GetIntValue(n, "data/SegResult/result/resultcode", 0, -1); GWEN_Buffer_AppendString(jd->emsg, GWEN_DB_GetCharValue(n, "data/SegResult/result/text", 0, "?")); GWEN_Buffer_AppendString(jd->emsg, "\n"); } } } n = GWEN_DB_GetNextGroup(n); } if (!gotResp) jd->resp = RSP_NOSRVRSP; else jd->resp = (rc < 3000) ? 0 : (rc < 9000) ? RSP_WARN : RSP_ERR; return res; } void GWENHYWFAR_CB GWENHYWFAR_CB AH_Job_ChangeKeys_FreeData(void *bp, void *p) { AH_JOB_CHANGEKEYS *jd = (AH_JOB_CHANGEKEYS *)p; DBG_NOTICE(AQHBCI_LOGDOMAIN, "%s(): %p uTmp %p.", __FUNCTION__, jd, jd->uTmp); if (jd->uTmp) AB_User_free(jd->uTmp); if (jd->tokenType) free(jd->tokenType); if (jd->tokenName) free(jd->tokenName); if (jd->emsg) GWEN_Buffer_free(jd->emsg); GWEN_FREE_OBJECT(jd); } int AH_Job_ChangeKeys_NextMsg(AH_JOB *j) { int rv = 0; int mn = -1; unsigned int jmn = 0; GWEN_DB_NODE *dbr = NULL; AH_JOB_CHANGEKEYS *jd; assert(j); jmn = AH_Job_GetMsgNum(j); dbr = AH_Job_GetResponses(j); dbr = GWEN_DB_GetFirstGroup(dbr); DBG_NOTICE(AQHBCI_LOGDOMAIN, "%s(): jmn %d.", __FUNCTION__, jmn); while (dbr) { //GWEN_DB_Dump(dbr, 0); rv = AH_Job_CheckEncryption(j, dbr); if (rv) { DBG_ERROR(AQHBCI_LOGDOMAIN, "%s(): AH_Job_CheckEncryption() failed (%d).", __FUNCTION__, rv); return -1; } rv = AH_Job_CheckSignature(j, dbr); if (rv) { DBG_ERROR(AQHBCI_LOGDOMAIN, "%s(): AH_Job_CheckSignature() failed (%d).", __FUNCTION__, rv); return -1; } if (!strcasecmp(GWEN_DB_GroupName(dbr), "MsgTail")) { mn = GWEN_DB_GetIntValue(dbr, "security/msgnum", 0, -1); if (mn < 0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "%s: find msgnum failed.", __FUNCTION__); } else if ((mn == 1) && (jmn == mn)) { const GWEN_CRYPT_KEY *bk = NULL; GWEN_CRYPT_KEY *bkCurrV = NULL, *bkCurrS = NULL; jd = GWEN_INHERIT_GETDATA(AH_JOB, AH_JOB_CHANGEKEYS, j); assert(jd); // get actual serverkeys to restore later bk = AH_User_GetBankPubCryptKey(jd->u); if (bk) bkCurrV = GWEN_Crypt_KeyRsa_dup(bk); bk = AH_User_GetBankPubSignKey(jd->u); if (bk) bkCurrS = GWEN_Crypt_KeyRsa_dup(bk); rv = AH_Job_CommitSystemData(j, 0); if (rv != 0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "%s(): AH_Job_CommitSystemData() failed(%d).", __FUNCTION__, rv); } else if (!GWEN_Crypt_Token_IsOpen(jd->ct) && (GWEN_Crypt_Token_Open(jd->ct, 0, 0) < 0)) rv = onError("GWEN_Crypt_Token_Open() failed.", -1); else { uint8_t i; GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Info, I18N("Serverkeys imported.")); DBG_NOTICE(AQHBCI_LOGDOMAIN, "%s(): serverkeys should be imported now.", __FUNCTION__); // some cryptmodes need length of serverkeys // AH_Provider_CreateKeys() reads the length from user-token, // which is the temporary user with the new token, // so store server-keys from actual user (the now imported) on the new token //DBG_NOTICE(AQHBCI_LOGDOMAIN, "%s(): ctx %p.", __FUNCTION__, jd->ctx); jd->ctx = GWEN_Crypt_Token_GetContext(jd->ct, jd->tokenCtxId, 0); //DBG_NOTICE(AQHBCI_LOGDOMAIN, "%s(): -> ctx %p.", __FUNCTION__, jd->ctx); for (i = 0; (rv == 0) && (i < 2); i++) { const GWEN_CRYPT_TOKEN_KEYINFO *tmp = NULL; uint8_t *m = NULL, *e = NULL; uint32_t ml = 0, el = 0; uint32_t id = 0; bk = NULL; switch (i) { case 0: bk = AH_User_GetBankPubCryptKey(jd->u); id = GWEN_Crypt_Token_Context_GetEncipherKeyId(jd->ctx); AH_User_SetBankPubCryptKey(jd->uTmp, (GWEN_CRYPT_KEY *)bk); break; case 1: bk = AH_User_GetBankPubSignKey(jd->u); id = GWEN_Crypt_Token_Context_GetVerifyKeyId(jd->ctx); AH_User_SetBankPubSignKey(jd->uTmp, (GWEN_CRYPT_KEY *)bk); break; } if (!bk) { if (i == 0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "%s(): get bankkey failed.", __FUNCTION__); rv = -1; } else DBG_NOTICE(AQHBCI_LOGDOMAIN, "%s(): bank has no signkey.", __FUNCTION__); continue; } ml = GWEN_Crypt_Key_GetKeySize(bk); el = 3; if (ml) { m = malloc(ml); e = malloc(el); GWEN_Crypt_KeyRsa_GetModulus(bk, m, &ml); GWEN_Crypt_KeyRsa_GetExponent(bk, e, &el); } tmp = GWEN_Crypt_Token_GetKeyInfo(jd->ct, id, 0, 0); DBG_NOTICE(AQHBCI_LOGDOMAIN, "%s(): k %ld m %ld %p e %ld %p.", __FUNCTION__, (long)id, (long)ml, m, (long)el, e); if (!tmp) { DBG_ERROR(AQHBCI_LOGDOMAIN, "%s(): damn, get keyinfo '%c' failed.", __FUNCTION__, (i == 0) ? 'V' : 'S'); rv = onError("GWEN_Crypt_Token_GetKeyInfo() failed.", -1); } if (rv == 0) { GWEN_CRYPT_TOKEN_KEYINFO *ki = GWEN_Crypt_Token_KeyInfo_dup(tmp); uint32_t flags = GWEN_Crypt_Token_KeyInfo_GetFlags(ki); GWEN_Crypt_Token_KeyInfo_SetFlags(ki, flags | GWEN_CRYPT_TOKEN_KEYFLAGS_HASMODULUS | GWEN_CRYPT_TOKEN_KEYFLAGS_HASEXPONENT); GWEN_Crypt_Token_KeyInfo_SetModulus(ki, m, ml); GWEN_Crypt_Token_KeyInfo_SetExponent(ki, e, el); GWEN_Crypt_Token_KeyInfo_SetKeySize(ki, ml); GWEN_Crypt_Token_KeyInfo_SetKeyNumber(ki, GWEN_Crypt_Key_GetKeyNumber(bk)); GWEN_Crypt_Token_KeyInfo_SetKeyVersion(ki, GWEN_Crypt_Key_GetKeyVersion(bk)); if (GWEN_Crypt_Token_SetKeyInfo(jd->ct, id, ki, 0)) { DBG_ERROR(AQHBCI_LOGDOMAIN, "%s(): GWEN_Crypt_Token_SetKeyInfo() failed.", __FUNCTION__); rv = -1; } else ki = NULL; if (ki) GWEN_Crypt_Token_KeyInfo_free(ki); } if (m) free(m); if (e) free(e); } if (rv == 0) { rv = onServerKeysImported(jd); if (rv != 0) DBG_ERROR(AQHBCI_LOGDOMAIN, "%s(): onServerKeysImported() failed.", __FUNCTION__); } // serverkeys set in job_commit() must restored if (bkCurrV) { AH_User_SetBankPubCryptKey(jd->u, bkCurrV); DBG_NOTICE(AQHBCI_LOGDOMAIN, "%s(): serverkey 'V' restored.", __FUNCTION__); GWEN_Crypt_Key_free(bkCurrV); } if (bkCurrS) { AH_User_SetBankPubSignKey(jd->u, bkCurrS); DBG_NOTICE(AQHBCI_LOGDOMAIN, "%s(): serverkey 'S' restored.", __FUNCTION__); GWEN_Crypt_Key_free(bkCurrS); } if (rv == 0) { uint8_t i; // update segment-data GWEN_DB_NODE *args = AH_Job_GetArguments(j); assert(args); for (i = 0; (rv == 0) && (i < 3); i++) { GWEN_DB_NODE *db = NULL; const GWEN_CRYPT_TOKEN_KEYINFO *ki = NULL; const uint8_t *kd = NULL; uint32_t kdsz = 0; const char *kt = "?"; int kn = 0, kv = 0; switch (i) { case 0: kt = "V"; ki = jd->cryptKeyInfo; db = GWEN_DB_GetGroup(args, GWEN_DB_FLAGS_DEFAULT, "setcryptKey"); break; case 1: kt = "S"; ki = jd->signKeyInfo; db = GWEN_DB_GetGroup(args, GWEN_DB_FLAGS_DEFAULT, "setsignKey"); break; case 2: kt = "D"; ki = jd->authKeyInfo; db = GWEN_DB_GetGroup(args, GWEN_DB_FLAGS_DEFAULT, "setauthKey"); break; } if (!ki) { if (i < 2) { DBG_ERROR(AQHBCI_LOGDOMAIN, "%s(): get keyinfo '%s' failed.", __FUNCTION__, kt); rv = -1; } else DBG_NOTICE(AQHBCI_LOGDOMAIN, "%s(): token has no authkey.", __FUNCTION__); continue; } kd = GWEN_Crypt_Token_KeyInfo_GetModulusData(ki); kdsz = GWEN_Crypt_Token_KeyInfo_GetModulusLen(ki); if (!kd || !kdsz) { DBG_ERROR(AQHBCI_LOGDOMAIN, "No modulus in '%s' key.", kt); rv = -1; break; } GWEN_DB_SetBinValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "key/modulus", kd, kdsz); kd = GWEN_Crypt_Token_KeyInfo_GetExponentData(ki); kdsz = GWEN_Crypt_Token_KeyInfo_GetExponentLen(ki); if (!kd || !kdsz) { DBG_ERROR(AQHBCI_LOGDOMAIN, "No exponent in '%s' key.", kt); rv = -1; break; } GWEN_DB_SetBinValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "key/exponent", kd, kdsz); kd = GWEN_Crypt_Token_KeyInfo_GetCertificateData(ki); kdsz = GWEN_Crypt_Token_KeyInfo_GetCertificateLen(ki); if (kd && kdsz) { GWEN_DB_SetIntValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "cert/type", GWEN_Crypt_Token_KeyInfo_GetCertType(ki)); GWEN_DB_SetBinValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "cert/cert", kd, kdsz); } else DBG_NOTICE(AQHBCI_LOGDOMAIN, "No cert for '%s' on token.", kt); kn = GWEN_Crypt_Token_KeyInfo_GetKeyNumber(ki); kv = GWEN_Crypt_Token_KeyInfo_GetKeyVersion(ki); GWEN_DB_SetIntValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "key/keynum", kn); GWEN_DB_SetIntValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "key/keyversion", kv); GWEN_DB_SetIntValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "keyName/keynum", kn); GWEN_DB_SetIntValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "keyName/keyversion", kv); } } } } else if ((mn == 2) && (jmn == mn)) { int8_t resp = parseResponse(j); DBG_NOTICE(AQHBCI_LOGDOMAIN, "%s: resp %d, %s HKEND.", __FUNCTION__, resp, (resp == 1) ? "no" : "next"); if (resp == 1) // since 5.99.25 no chance to prevent HKEND :-( return 0; } } dbr = GWEN_DB_GetNextGroup(dbr); } return (rv == 0) ? 1 : -1; } int AH_Job_ChangeKeys_finish(AB_PROVIDER *pro, AH_JOB *job, int res) { AH_JOB_CHANGEKEYS *jd = NULL; AB_USER *u = NULL; AB_USER *uTmp = NULL; if (!job) return res; jd = GWEN_INHERIT_GETDATA(AH_JOB, AH_JOB_CHANGEKEYS, job); if (*jd->canceled) { DBG_NOTICE(AQHBCI_LOGDOMAIN, "%s(): user canceled.", __FUNCTION__); jd->resp = -1; } u = jd->u; uTmp = jd->uTmp; res = -1; if (jd->resp >= 0) { char fmtBuff[1024]; const char *m = NULL; const char *btn1 = I18N("Abort"); const char *btn2 = I18N("Finish"); if (jd->resp == RSP_NOSRVRSP) { GWEN_Gui_MessageBox(GWEN_GUI_MSG_FLAGS_TYPE_INFO, I18N("Change keys: Error"), "Der Bankserver hat keine Antwort zur Schluesselaenderung gesendet.", I18N("OK"), NULL, NULL, 0); res = -1; } else { if ((jd->resp == RSP_WARN) || (jd->resp == RSP_ERR)) { m = strdup(fmtStr(FB, "Der Bankserver meldet %s:\n\n'%s'\n\n" "Es ist moeglich, dass der neue Schluessel dennoch angenommenn wurde.\n" "Neue Schluessel / neues Medium uebernehmen?", (jd->resp == RSP_ERR) ? "Fehler" : "Warnungen", GWEN_Buffer_GetStart(jd->emsg))); btn1 = I18N("No"); btn2 = fmtStr(FB, "%s, %s", I18N("Yes"), I18N("finish")); } else { m = strdup(fmtStr(FB, "Die Uebermittlung der Schluessel ergab keinen Fehler,\n" "aus den Meldungen des Bankservers sollte eine Uebernahme ersichtlich sein:\n\n%s\nNeue Schluessel / neues Medium\n" "wird uebernommen.", GWEN_Buffer_GetStart(jd->emsg))); } if (GWEN_Gui_MessageBox(GWEN_GUI_MSG_FLAGS_TYPE_INFO, I18N("Change keys: confirm"), m, btn1, btn2, NULL, 0) == 2) res = 0; } if (m) free((char *)m); } DBG_NOTICE(AQHBCI_LOGDOMAIN, "%s(): %d/%d %p %p.", __FUNCTION__, jd->resp, res, u, uTmp); if (uTmp) { DBG_INFO(AQHBCI_LOGDOMAIN, "%s: tokenTypeFromToken '%s' tokenNameFromToken '%s' rdh %d cm %d ctx-id %d.", __FUNCTION__, AH_User_GetTokenType(uTmp), AH_User_GetTokenName(uTmp), AH_User_GetRdhType(uTmp), AH_User_GetCryptMode(uTmp), AH_User_GetTokenContextId(uTmp)); if (res == 0) { if (AB_Provider_BeginExclUseUser(pro, u)) { DBG_ERROR(AQHBCI_LOGDOMAIN, "%s(): AB_Provider_BeginExclUseUser() failed.", __FUNCTION__); res = -1; } else { AH_User_SetBankPubCryptKey(u, AH_User_GetBankPubCryptKey(uTmp)); AH_User_SetBankPubSignKey(u, AH_User_GetBankPubSignKey(uTmp)); AH_User_SetTokenType(u, AH_User_GetTokenType(uTmp)); AH_User_SetTokenName(u, AH_User_GetTokenName(uTmp)); AH_User_SetRdhType(u, AH_User_GetRdhType(uTmp)); AH_User_SetCryptMode(u, AH_User_GetCryptMode(uTmp)); AH_User_SetTokenContextId(u, AH_User_GetTokenContextId(uTmp)); if (AB_Provider_EndExclUseUser(pro, u, 0)) { DBG_ERROR(AQHBCI_LOGDOMAIN, "%s(): AB_Provider_EndExclUseUser() failed.", __FUNCTION__); res = -1; } } } AB_Provider_DeleteUser(pro, AB_User_GetUniqueId(uTmp)); } return res; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/admjobs/jobgetkeys.c0000664000175000017500000001733714043610745022554 00000000000000/*************************************************************************** begin : Thu Jan 31 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "jobgetkeys_p.h" #include "aqhbci/joblayer/job_crypt.h" GWEN_INHERIT(AH_JOB, AH_JOB_GETKEYS); AH_JOB *AH_Job_GetKeys_new(AB_PROVIDER *pro, AB_USER *u) { AH_JOB *j; AH_JOB_GETKEYS *jd; GWEN_DB_NODE *args; int version; assert(u); j=AH_Job_new("JobGetKeys", pro, u, 0, 0); if (!j) { DBG_ERROR(AQHBCI_LOGDOMAIN, "JobGetKeys not supported, should not happen"); return NULL; } /* create data for inheriting class */ GWEN_NEW_OBJECT(AH_JOB_GETKEYS, jd); GWEN_INHERIT_SETDATA(AH_JOB, AH_JOB_GETKEYS, j, jd, AH_Job_GetKeys_FreeData); /* overwrite virtual function */ AH_Job_SetProcessFn(j, AH_Job_GetKeys_Process); /* set args */ args=AH_Job_GetArguments(j); assert(args); GWEN_DB_SetCharValue(args, GWEN_DB_FLAGS_OVERWRITE_VARS, "open/ident/customerId", "9999999999"); GWEN_DB_SetIntValue(args, GWEN_DB_FLAGS_OVERWRITE_VARS, "open/ident/status", 0); GWEN_DB_SetCharValue(args, GWEN_DB_FLAGS_OVERWRITE_VARS, "open/ident/systemId", "0"); version=AH_User_GetRdhType(u); if (version==0) version=1; switch (AH_User_GetCryptMode(u)) { case AH_CryptMode_Rdh: GWEN_DB_SetCharValue(args, GWEN_DB_FLAGS_OVERWRITE_VARS, "open/cryptKey/secprofile/code", "RDH"); GWEN_DB_SetCharValue(args, GWEN_DB_FLAGS_OVERWRITE_VARS, "open/signKey/secprofile/code", "RDH"); break; case AH_CryptMode_Rah: GWEN_DB_SetCharValue(args, GWEN_DB_FLAGS_OVERWRITE_VARS, "open/cryptKey/secprofile/code", "RAH"); GWEN_DB_SetCharValue(args, GWEN_DB_FLAGS_OVERWRITE_VARS, "open/signKey/secprofile/code", "RAH"); break; default: break; } GWEN_DB_SetIntValue(args, GWEN_DB_FLAGS_OVERWRITE_VARS, "open/cryptKey/secprofile/version", version); GWEN_DB_SetIntValue(args, GWEN_DB_FLAGS_OVERWRITE_VARS, "open/signKey/secprofile/version", version); return j; } void GWENHYWFAR_CB GWENHYWFAR_CB AH_Job_GetKeys_FreeData(void *bp, void *p) { AH_JOB_GETKEYS *jd; jd=(AH_JOB_GETKEYS *) p; GWEN_Crypt_Token_KeyInfo_free(jd->signKeyInfo); GWEN_Crypt_Token_KeyInfo_free(jd->cryptKeyInfo); GWEN_Crypt_Token_KeyInfo_free(jd->authKeyInfo); free(jd->peerId); GWEN_FREE_OBJECT(jd); } int AH_Job_GetKeys_Process(AH_JOB *j, AB_IMEXPORTER_CONTEXT *ctx) { AH_HBCI *h; AH_JOB_GETKEYS *jd; AB_USER *u; GWEN_DB_NODE *dbResponses; GWEN_DB_NODE *dbCurr; int rv; int haveKey; GWEN_CRYPT_TOKEN *ct; const GWEN_CRYPT_TOKEN_CONTEXT *cctx; assert(j); jd=GWEN_INHERIT_GETDATA(AH_JOB, AH_JOB_GETKEYS, j); assert(jd); h=AH_Job_GetHbci(j); u=AH_Job_GetUser(j); rv=AB_Banking_GetCryptToken(AH_HBCI_GetBankingApi(h), AH_User_GetTokenType(u), AH_User_GetTokenName(u), &ct); if (rv) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } cctx=GWEN_Crypt_Token_GetContext(ct, AH_User_GetTokenContextId(u), 0); if (cctx==NULL) { DBG_ERROR(AQHBCI_LOGDOMAIN, "CT context %d not found", AH_User_GetTokenContextId(u)); return GWEN_ERROR_NOT_FOUND; } dbResponses=AH_Job_GetResponses(j); assert(dbResponses); /* search for "GetKeyResponse" */ haveKey=0; dbCurr=GWEN_DB_GetFirstGroup(dbResponses); while (dbCurr) { GWEN_DB_NODE *dbKeyResponse; int rv; rv=AH_Job_CheckEncryption(j, dbCurr); if (rv) { DBG_INFO(AQHBCI_LOGDOMAIN, "Compromised security (encryption)"); return rv; } rv=AH_Job_CheckSignature(j, dbCurr); if (rv) { DBG_INFO(AQHBCI_LOGDOMAIN, "Compromised security (signature)"); return rv; } dbKeyResponse=GWEN_DB_GetGroup(dbCurr, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "data/GetKeyResponse"); if (dbKeyResponse) { unsigned int bs; const uint8_t *p; DBG_DEBUG(AQHBCI_LOGDOMAIN, "Got this key response:"); if (GWEN_Logger_GetLevel(AQHBCI_LOGDOMAIN)>=GWEN_LoggerLevel_Debug) GWEN_DB_Dump(dbKeyResponse, 2); p=GWEN_DB_GetBinValue(dbKeyResponse, "key/modulus", 0, 0, 0, &bs); if (!p || !bs) { DBG_ERROR(AQHBCI_LOGDOMAIN, "No modulus"); return GWEN_ERROR_BAD_DATA; } else { const uint8_t defaultExpo[3]= {0x01, 0x00, 0x01}; const char *s; uint32_t keyId; GWEN_CRYPT_TOKEN_KEYINFO *ki; int keySize; uint32_t flags=0; /* skip zero bytes if any */ while (bs && *p==0) { p++; bs--; } /* calculate key size in bytes */ if (bs<=96) keySize=96; else { keySize=bs; } s=GWEN_DB_GetCharValue(dbKeyResponse, "keyname/keytype", 0, "V"); if (strcasecmp(s, "V")==0) keyId=GWEN_Crypt_Token_Context_GetEncipherKeyId(cctx); else if (strcasecmp(s, "S")==0) keyId=GWEN_Crypt_Token_Context_GetVerifyKeyId(cctx); else keyId=GWEN_Crypt_Token_Context_GetAuthVerifyKeyId(cctx); ki=GWEN_Crypt_Token_KeyInfo_new(keyId, GWEN_Crypt_CryptAlgoId_Rsa, keySize); GWEN_Crypt_Token_KeyInfo_SetModulus(ki, p, bs); GWEN_Crypt_Token_KeyInfo_SetExponent(ki, defaultExpo, sizeof(defaultExpo)); flags|= GWEN_CRYPT_TOKEN_KEYFLAGS_HASACTIONFLAGS | GWEN_CRYPT_TOKEN_KEYFLAGS_HASMODULUS | GWEN_CRYPT_TOKEN_KEYFLAGS_HASEXPONENT | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYVERSION | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYNUMBER; if (strcasecmp(s, "V")==0) { flags|=GWEN_CRYPT_TOKEN_KEYFLAGS_CANENCIPHER; jd->cryptKeyInfo=ki; s=GWEN_DB_GetCharValue(dbKeyResponse, "keyname/userId", 0, NULL); free(jd->peerId); if (s) jd->peerId=strdup(s); else jd->peerId=NULL; } else if (strcasecmp(s, "S")==0) { flags|=GWEN_CRYPT_TOKEN_KEYFLAGS_CANVERIFY; jd->signKeyInfo=ki; } else { flags|=GWEN_CRYPT_TOKEN_KEYFLAGS_CANVERIFY; jd->authKeyInfo=ki; } GWEN_Crypt_Token_KeyInfo_SetFlags(ki, flags); GWEN_Crypt_Token_KeyInfo_SetKeyNumber(ki, GWEN_DB_GetIntValue(dbKeyResponse, "keyname/keynum", 0, 0)); GWEN_Crypt_Token_KeyInfo_SetKeyVersion(ki, GWEN_DB_GetIntValue(dbKeyResponse, "keyname/keyversion", 0, 0)); } haveKey++; } /* if we have one */ dbCurr=GWEN_DB_GetNextGroup(dbCurr); } /* while */ if (haveKey==0) { DBG_INFO(AQHBCI_LOGDOMAIN, "No server keys found"); AH_Job_SetStatus(j, AH_JobStatusError); return GWEN_ERROR_NO_DATA; } return 0; } GWEN_CRYPT_TOKEN_KEYINFO *AH_Job_GetKeys_GetSignKeyInfo(const AH_JOB *j) { AH_JOB_GETKEYS *jd; assert(j); jd=GWEN_INHERIT_GETDATA(AH_JOB, AH_JOB_GETKEYS, j); assert(jd); return jd->signKeyInfo; } GWEN_CRYPT_TOKEN_KEYINFO *AH_Job_GetKeys_GetCryptKeyInfo(const AH_JOB *j) { AH_JOB_GETKEYS *jd; assert(j); jd=GWEN_INHERIT_GETDATA(AH_JOB, AH_JOB_GETKEYS, j); assert(jd); return jd->cryptKeyInfo; } GWEN_CRYPT_TOKEN_KEYINFO *AH_Job_GetKeys_GetAuthKeyInfo(const AH_JOB *j) { AH_JOB_GETKEYS *jd; assert(j); jd=GWEN_INHERIT_GETDATA(AH_JOB, AH_JOB_GETKEYS, j); assert(jd); return jd->authKeyInfo; } const char *AH_Job_GetKeys_GetPeerId(const AH_JOB *j) { AH_JOB_GETKEYS *jd; assert(j); jd=GWEN_INHERIT_GETDATA(AH_JOB, AH_JOB_GETKEYS, j); assert(jd); return jd->peerId; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/admjobs/jobtan_l.h0000664000175000017500000000357114044534775022207 00000000000000/*************************************************************************** begin : Thu Jan 31 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_JOBTAN_L_H #define AH_JOBTAN_L_H #include "aqhbci/aqhbci_l.h" #include "aqhbci/joblayer/job_l.h" /** * This is an internal job. It is only used to present a TAN using a * two-step mechanism (iTAN). */ AH_JOB *AH_Job_Tan_new(AB_PROVIDER *pro, AB_USER *u, int process, int jobVersion); void AH_Job_Tan_SetHash(AH_JOB *j, const unsigned char *p, unsigned int len); void AH_Job_Tan_SetReference(AH_JOB *j, const char *p); void AH_Job_Tan_SetTanList(AH_JOB *j, const char *s); void AH_Job_Tan_SetTanInfo(AH_JOB *j, const char *p); const char *AH_Job_Tan_GetChallenge(const AH_JOB *j); const char *AH_Job_Tan_GetHhdChallenge(const AH_JOB *j); const char *AH_Job_Tan_GetReference(const AH_JOB *j); int AH_Job_Tan_GetTanMethod(const AH_JOB *j); void AH_Job_Tan_SetTanMethod(AH_JOB *j, int i); void AH_Job_Tan_SetTanMediumId(AH_JOB *j, const char *s); void AH_Job_Tan_SetLocalAccountInfo(AH_JOB *j, const char *bankCode, const char *accountId, const char *accountSubId); void AH_Job_Tan_SetSmsAccountInfo(AH_JOB *j, const char *bankCode, const char *accountId, const char *accountSubId); void AH_Job_Tan_SetSegCode(AH_JOB *j, const char *p); int AH_Job_Tan_FinishSetup(AH_JOB *j, AH_JOB *accJob); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/admjobs/jobgetsepainfo_l.h0000664000175000017500000000121714044534775023724 00000000000000/*************************************************************************** begin : Thu Jan 31 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_JOBGETSEPAINFO_L_H #define AH_JOBGETSEPAINFO_L_H #include "aqhbci/aqhbci_l.h" #include "aqhbci/joblayer/job_l.h" AH_JOB *AH_Job_GetAccountSepaInfo_new(AB_PROVIDER *pro, AB_USER *u, AB_ACCOUNT *acc); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/admjobs/jobgettargetacc.c0000664000175000017500000002222614625171605023532 00000000000000/*************************************************************************** begin : Tue Oct 12 2021 copyright : (C) 2024 by Stefan Bayer, Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "jobgettargetacc_p.h" #include "aqhbci/joblayer/job_crypt.h" #include "aqhbci/banking/provider_job.h" #include "aqhbci/ajobs//accountjob_l.h" #include #include #include GWEN_INHERIT(AH_JOB, AH_JOB_GETTARGETACC) /* ------------------------------------------------------------------------------------------------ * forward declarations * ------------------------------------------------------------------------------------------------ */ static void GWENHYWFAR_CB _freeData(void *bp, void *p); static int _cbProcess(AH_JOB *j, AB_IMEXPORTER_CONTEXT *ctx); static AB_REFERENCE_ACCOUNT *_getOrCreateReferenceAccount(AB_ACCOUNT_SPEC *as, GWEN_DB_NODE *dbTargetAccount); static int _createTransactionLimitsForSepaInternalTransfer(const AH_JOB *j, AB_ACCOUNT_SPEC *as); static int _parseResponses(AH_JOB *j, AB_ACCOUNT_SPEC *as); /* ------------------------------------------------------------------------------------------------ * implementations * ------------------------------------------------------------------------------------------------ */ AH_JOB *AH_Job_GetTargetAccount_new(AB_PROVIDER *pro, AB_USER *u, AB_ACCOUNT *acc) { AH_JOB *j; AH_JOB_GETTARGETACC *jd; assert(u); j=AH_AccountJob_new("JobGetAccountTargetAccount", pro, u, acc); if (!j) { DBG_ERROR(AQHBCI_LOGDOMAIN, "JobGetAccountTargetAccount not supported, should not happen"); return NULL; } GWEN_NEW_OBJECT(AH_JOB_GETTARGETACC, jd); GWEN_INHERIT_SETDATA(AH_JOB, AH_JOB_GETTARGETACC, j, jd, _freeData) AH_Job_SetProcessFn(j, _cbProcess); DBG_INFO(AQHBCI_LOGDOMAIN, "JobGetAccountTargetAccount created"); return j; } void GWENHYWFAR_CB _freeData(void *bp, void *p) { AH_JOB_GETTARGETACC *jd; jd = (AH_JOB_GETTARGETACC *) p; GWEN_FREE_OBJECT(jd); } int _cbProcess(AH_JOB *j, AB_IMEXPORTER_CONTEXT *ctx) { AH_JOB_GETTARGETACC *jd; AB_ACCOUNT_SPEC *as; AB_BANKING *ab; AB_PROVIDER *pro; uint32_t uniqueAccountId; int rv; assert(j); jd = GWEN_INHERIT_GETDATA(AH_JOB, AH_JOB_GETTARGETACC, j); assert(jd); if (jd->scanned) return 0; jd->scanned = 1; ab = AH_Job_GetBankingApi(j); assert(ab); pro = AH_Job_GetProvider(j); assert(pro); uniqueAccountId=AB_Account_GetUniqueId(AH_AccountJob_GetAccount(j)); rv=AB_Banking_GetAccountSpecByUniqueId(ab, uniqueAccountId, &as); if (rv<0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "No account spec for account, SNH!"); return GWEN_ERROR_INTERNAL; } /* check if the internal transfer is already part of the transaction limits, if not, add them */ if (AB_AccountSpec_GetTransactionLimitsForCommand(as, AB_Transaction_CommandSepaInternalTransfer)==NULL) { rv=_createTransactionLimitsForSepaInternalTransfer(j, as); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); AB_AccountSpec_free(as); return rv; } } rv=_parseResponses(j, as); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); AB_AccountSpec_free(as); return rv; } rv=AB_Banking_WriteAccountSpec(AB_Provider_GetBanking(pro), as); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); AB_AccountSpec_free(as); return rv; } AB_AccountSpec_free(as); return 0; } int _parseResponses(AH_JOB *j, AB_ACCOUNT_SPEC *as) { GWEN_DB_NODE *dbResponses; dbResponses = AH_Job_GetResponses(j); if (dbResponses) { GWEN_DB_NODE *dbCurr; /* search for "GetAccountTargetAccountResponse" */ dbCurr = GWEN_DB_GetFirstGroup(dbResponses); while (dbCurr) { GWEN_DB_NODE *dbXA; int rv; rv = AH_Job_CheckEncryption(j, dbCurr); if (rv) { DBG_INFO(AQHBCI_LOGDOMAIN, "Compromised security (encryption)"); AH_Job_SetStatus(j, AH_JobStatusError); return rv; } rv = AH_Job_CheckSignature(j, dbCurr); if (rv) { DBG_INFO(AQHBCI_LOGDOMAIN, "Compromised security (signature)"); AH_Job_SetStatus(j, AH_JobStatusError); return rv; } dbXA = GWEN_DB_GetGroup(dbCurr, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "data/GetAccountTargetAccountResponse"); if (dbXA) { GWEN_DB_NODE *dbTargetAccount; /* check if we have a structure with an "account" group" */ dbTargetAccount = GWEN_DB_FindFirstGroup(dbXA, "targetAccount"); while (dbTargetAccount) { AB_REFERENCE_ACCOUNT *ra; ra=_getOrCreateReferenceAccount(as, dbTargetAccount); if (ra==NULL) { DBG_INFO(AQHBCI_LOGDOMAIN, "Error getting reference account from response segment"); return GWEN_ERROR_GENERIC; } dbTargetAccount = GWEN_DB_FindNextGroup(dbTargetAccount, "targetAccount"); } /* while (dbTargetAccount) */ } /* if (dbXA) */ dbCurr = GWEN_DB_GetNextGroup(dbCurr); } /* while dbCurr */ } return 0; } AB_REFERENCE_ACCOUNT *_getOrCreateReferenceAccount(AB_ACCOUNT_SPEC *as, GWEN_DB_NODE *dbTargetAccount) { const char *reqIban; const char *reqBic; const char *reqAccountId; const char *reqAccountSubId; const char *reqOwnerName; const char *reqAddtlOwnerName; const char *reqAccDescription; const char *reqCountry; const char *reqBankCode; int reqAccountType; AB_REFERENCE_ACCOUNT_LIST *refAccountList; AB_REFERENCE_ACCOUNT *refAccount=NULL; reqIban = GWEN_DB_GetCharValue(dbTargetAccount, "account/iban", 0, NULL); reqBic = GWEN_DB_GetCharValue(dbTargetAccount, "account/bic", 0, NULL); reqAccountId = GWEN_DB_GetCharValue(dbTargetAccount, "account/accountid", 0, NULL); reqAccountSubId = GWEN_DB_GetCharValue(dbTargetAccount, "account/accountsubid", 0, NULL); reqCountry = GWEN_DB_GetCharValue(dbTargetAccount, "account/country", 0, NULL); reqBankCode = GWEN_DB_GetCharValue(dbTargetAccount, "account/bankcode", 0, NULL); reqOwnerName = GWEN_DB_GetCharValue(dbTargetAccount, "rcvName1", 0, NULL); /* make sure there is a remote name in the account (this could also be done later upon sending an internal transfer) */ if (!(reqOwnerName && *reqOwnerName)) reqOwnerName=AB_AccountSpec_GetOwnerName(as); reqAddtlOwnerName = GWEN_DB_GetCharValue(dbTargetAccount, "rcvName2", 0, NULL); reqAccountType = GWEN_DB_GetIntValue(dbTargetAccount, "accType", 0, 0); reqAccDescription = GWEN_DB_GetCharValue(dbTargetAccount, "accDescription", 0, NULL); refAccountList = AB_AccountSpec_GetRefAccountList(as); refAccount=refAccountList?AB_ReferenceAccount_List_FindFirst(refAccountList, reqIban, reqBic, reqAccountId, reqAccountSubId, reqCountry, reqBankCode, "*", reqAccDescription):NULL; if (refAccount == NULL) { refAccount = AB_ReferenceAccount_new(); AB_ReferenceAccount_SetIban(refAccount, reqIban); AB_ReferenceAccount_SetBic(refAccount, reqBic); AB_ReferenceAccount_SetAccountNumber(refAccount, reqAccountId); AB_ReferenceAccount_SetSubAccountNumber(refAccount, reqAccountSubId); AB_ReferenceAccount_SetCountry(refAccount, reqCountry); AB_ReferenceAccount_SetBankCode(refAccount, reqBankCode); AB_ReferenceAccount_SetOwnerName(refAccount, reqOwnerName); AB_ReferenceAccount_SetOwnerName2(refAccount, reqAddtlOwnerName); AB_ReferenceAccount_SetAccountName(refAccount, reqAccDescription); AB_ReferenceAccount_SetAccountType(refAccount, reqAccountType); AB_AccountSpec_AddReferenceAccount(as, refAccount); } return refAccount; } int _createTransactionLimitsForSepaInternalTransfer(const AH_JOB *j, AB_ACCOUNT_SPEC *as) { AB_PROVIDER *pro; AB_USER *u; AB_TRANSACTION_LIMITS *limits; AH_JOB *tmpJob=NULL; AB_TRANSACTION_LIMITS_LIST *tll; int rv; u=AH_Job_GetUser(j); pro=AH_Job_GetProvider(j); tll=AB_AccountSpec_GetTransactionLimitsList(as); DBG_INFO(AQHBCI_LOGDOMAIN, "Creating transaction limits for job \"%s\"", AB_Transaction_Command_toString(AB_Transaction_CommandSepaInternalTransfer)); DBG_INFO(AQHBCI_LOGDOMAIN, "- creating job"); rv = AH_Provider_CreateHbciJob(pro, u, AH_AccountJob_GetAccount(j), AB_Transaction_CommandSepaInternalTransfer, &tmpJob); if (rv < 0) { if (rv == GWEN_ERROR_NOT_AVAILABLE) { DBG_NOTICE(AQHBCI_LOGDOMAIN, "Job \"%s\" is not available", AB_Transaction_Command_toString(AB_Transaction_CommandSepaInternalTransfer)); } else { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } } else { DBG_INFO(AQHBCI_LOGDOMAIN, "- getting limits"); rv = AH_Job_GetLimits(tmpJob, &limits); if (rv < 0) { DBG_INFO(AQHBCI_LOGDOMAIN, "Error getting limits for job \"%s\": %d", AB_Transaction_Command_toString(AB_Transaction_CommandSepaInternalTransfer), rv); AH_Job_free(tmpJob); return rv; } DBG_NOTICE(AQHBCI_LOGDOMAIN, "- adding limits"); AB_TransactionLimits_List_Add(limits, tll); AH_Job_free(tmpJob); } return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/admjobs/jobgettargetacc_l.h0000664000175000017500000000123414156464025024046 00000000000000/*************************************************************************** begin : Tue Oct 12 2021 copyright : (C) 2021 by Stefan Bayer, Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_JOBGETTARGETACCOUNT_L_H #define AH_JOBGETTARGETACCOUNT_L_H #include "aqhbci/aqhbci_l.h" #include "aqhbci/joblayer/job_l.h" AH_JOB *AH_Job_GetTargetAccount_new(AB_PROVIDER *pro, AB_USER *u, AB_ACCOUNT *acc); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/admjobs/jobsendkeys_p.h0000664000175000017500000000135614043610745023244 00000000000000/*************************************************************************** begin : Thu Jan 31 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_JOBSENDKEYS_P_H #define AH_JOBSENDKEYS_P_H #include "jobsendkeys_l.h" static int AH_Job_SendKeys_PrepareKey(AH_JOB *j, GWEN_DB_NODE *dbKey, GWEN_CRYPT_TOKEN_KEYINFO *ki, int kn); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/admjobs/jobsendkeys.xml0000664000175000017500000003315714043610745023302 00000000000000 %code %version 2 112 %code %version 2 112 %code %version 2 112 %code %version 2 112 %code %version 2 112 %code %version 2 112 %code %version 2 112 %code %version 2 112 %code %version 2 112 %code %version 2 112 %code %version 2 112 %code %version 2 112 %code %version 2 112 %code %version 2 112 %code %version 2 112 %code %version 2 112 V S 1 V S D 1 V S V S D aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/admjobs/jobsendkeys.c0000664000175000017500000001771114043610745022722 00000000000000/*************************************************************************** begin : Thu Jan 31 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "jobsendkeys_p.h" AH_JOB *AH_Job_SendKeys_new(AB_PROVIDER *pro, AB_USER *u, GWEN_CRYPT_TOKEN_KEYINFO *cryptKeyInfo, GWEN_CRYPT_TOKEN_KEYINFO *signKeyInfo, GWEN_CRYPT_TOKEN_KEYINFO *authKeyInfo) { AH_JOB *j; GWEN_DB_NODE *dbArgs; GWEN_DB_NODE *dbKey; int version; assert(u); if (authKeyInfo) j=AH_Job_new("JobSendKeysWithAuthKey", pro, u, 0, 0); else j=AH_Job_new("JobSendKeys", pro, u, 0, 0); if (!j) { DBG_ERROR(AQHBCI_LOGDOMAIN, "JobSendKeys not supported, should not happen"); return NULL; } /* set arguments */ dbArgs=AH_Job_GetArguments(j); dbKey=GWEN_DB_GetGroup(dbArgs, GWEN_DB_FLAGS_DEFAULT, "cryptKey"); assert(dbKey); DBG_INFO(AQHBCI_LOGDOMAIN, "Preparing crypt key"); if (AH_Job_SendKeys_PrepareKey(j, dbKey, cryptKeyInfo, 0)) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not prepare cryptkey"); AH_Job_free(j); return 0; } dbKey=GWEN_DB_GetGroup(dbArgs, GWEN_DB_FLAGS_DEFAULT, "signKey"); assert(dbKey); DBG_INFO(AQHBCI_LOGDOMAIN, "Preparing sign key"); if (AH_Job_SendKeys_PrepareKey(j, dbKey, signKeyInfo, 1)) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not prepare signkey"); AH_Job_free(j); return 0; } if (authKeyInfo) { dbKey=GWEN_DB_GetGroup(dbArgs, GWEN_DB_FLAGS_DEFAULT, "authKey"); assert(dbKey); DBG_INFO(AQHBCI_LOGDOMAIN, "Preparing auth key"); if (AH_Job_SendKeys_PrepareKey(j, dbKey, authKeyInfo, 2)) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not prepare authkey"); AH_Job_free(j); return 0; } } else { DBG_INFO(AQHBCI_LOGDOMAIN, "No auth key info"); } version=AH_User_GetRdhType(u); if (version==0) version=1; GWEN_DB_SetIntValue(dbArgs, GWEN_DB_FLAGS_OVERWRITE_VARS, "authKey/secprofile/version", version); GWEN_DB_SetIntValue(dbArgs, GWEN_DB_FLAGS_OVERWRITE_VARS, "cryptKey/secprofile/version", version); GWEN_DB_SetIntValue(dbArgs, GWEN_DB_FLAGS_OVERWRITE_VARS, "signKey/secprofile/version", version); switch (AH_User_GetCryptMode(u)) { case AH_CryptMode_Rdh: GWEN_DB_SetCharValue(dbArgs, GWEN_DB_FLAGS_OVERWRITE_VARS, "cryptKey/secprofile/code", "RDH"); GWEN_DB_SetCharValue(dbArgs, GWEN_DB_FLAGS_OVERWRITE_VARS, "signKey/secprofile/code", "RDH"); GWEN_DB_SetCharValue(dbArgs, GWEN_DB_FLAGS_OVERWRITE_VARS, "authKey/secprofile/code", "RDH"); break; case AH_CryptMode_Rah: GWEN_DB_SetCharValue(dbArgs, GWEN_DB_FLAGS_OVERWRITE_VARS, "cryptKey/secprofile/code", "RAH"); GWEN_DB_SetCharValue(dbArgs, GWEN_DB_FLAGS_OVERWRITE_VARS, "signKey/secprofile/code", "RAH"); GWEN_DB_SetCharValue(dbArgs, GWEN_DB_FLAGS_OVERWRITE_VARS, "authKey/secprofile/code", "RAH"); break; default: DBG_ERROR(AQHBCI_LOGDOMAIN, "We need to send public keys only for RDH or RAH!\n"); } DBG_INFO(AQHBCI_LOGDOMAIN, "JobSendKeys created"); return j; } int AH_Job_SendKeys_PrepareKey(AH_JOB *j, GWEN_DB_NODE *dbKey, GWEN_CRYPT_TOKEN_KEYINFO *ki, int kn) { uint32_t bsize; const uint8_t *p; AB_USER *u; const char *userId; int country; int hbciVersion; assert(j); assert(dbKey); assert(ki); u=AH_Job_GetUser(j); assert(u); userId=AB_User_GetUserId(u); assert(userId); assert(*userId); /* set keyname */ country=280; /* fixed value for "Germany", since HBCI is only used here */ hbciVersion=AH_User_GetHbciVersion(u); if (hbciVersion==0) hbciVersion=220; GWEN_DB_SetIntValue(dbKey, GWEN_DB_FLAGS_OVERWRITE_VARS, "keyName/country", country); GWEN_DB_SetCharValue(dbKey, GWEN_DB_FLAGS_OVERWRITE_VARS, "keyName/bankCode", AB_User_GetBankCode(u)); GWEN_DB_SetCharValue(dbKey, GWEN_DB_FLAGS_OVERWRITE_VARS, "keyName/userid", userId); switch (kn) { case 0: GWEN_DB_SetCharValue(dbKey, GWEN_DB_FLAGS_OVERWRITE_VARS, "keyName/keyType", "V"); break; case 1: GWEN_DB_SetCharValue(dbKey, GWEN_DB_FLAGS_OVERWRITE_VARS, "keyName/keyType", "S"); break; case 2: default: GWEN_DB_SetCharValue(dbKey, GWEN_DB_FLAGS_OVERWRITE_VARS, "keyName/keyType", "D"); break; } GWEN_DB_SetIntValue(dbKey, GWEN_DB_FLAGS_OVERWRITE_VARS, "keyName/keyNum", GWEN_Crypt_Token_KeyInfo_GetKeyNumber(ki)); GWEN_DB_SetIntValue(dbKey, GWEN_DB_FLAGS_OVERWRITE_VARS, "keyName/keyVersion", GWEN_Crypt_Token_KeyInfo_GetKeyVersion(ki)); /* set key */ if (kn==0) { /* crypt key */ GWEN_DB_SetIntValue(dbKey, GWEN_DB_FLAGS_OVERWRITE_VARS, "key/purpose", 5); switch (AH_User_GetRdhType(u)) { case 10: GWEN_DB_SetIntValue(dbKey, GWEN_DB_FLAGS_OVERWRITE_VARS, "key/opmode", 2); break; /**** RDH7 Block Start******/ case 7: GWEN_DB_SetIntValue(dbKey, GWEN_DB_FLAGS_OVERWRITE_VARS, "key/opmode", 18); break; /**** RDH7 Block End***/ case 5: GWEN_DB_SetIntValue(dbKey, GWEN_DB_FLAGS_OVERWRITE_VARS, "key/opmode", 18); break; case 2: GWEN_DB_SetIntValue(dbKey, GWEN_DB_FLAGS_OVERWRITE_VARS, "key/opmode", 2); break; case 1: if (hbciVersion<300) /* for HBCI up until 2.20 the opmode has to be set to 16 even for crypt keys */ GWEN_DB_SetIntValue(dbKey, GWEN_DB_FLAGS_OVERWRITE_VARS, "key/opmode", 16); else /* since FinTS 3.00 the crypt key uses the value "2" (meaning CBC) */ GWEN_DB_SetIntValue(dbKey, GWEN_DB_FLAGS_OVERWRITE_VARS, "key/opmode", 2); break; case 0: default: GWEN_DB_SetIntValue(dbKey, GWEN_DB_FLAGS_OVERWRITE_VARS, "key/opmode", 2); break; } } else { /* sign key */ GWEN_DB_SetIntValue(dbKey, GWEN_DB_FLAGS_OVERWRITE_VARS, "key/purpose", 6); switch (AH_User_GetRdhType(u)) { case 10: GWEN_DB_SetIntValue(dbKey, GWEN_DB_FLAGS_OVERWRITE_VARS, "key/opmode", 19); break; /**** RDH7 Block Start******/ case 7: GWEN_DB_SetIntValue(dbKey, GWEN_DB_FLAGS_OVERWRITE_VARS, "key/opmode", 19); break; /**** RDH7 Block End***/ case 5: GWEN_DB_SetIntValue(dbKey, GWEN_DB_FLAGS_OVERWRITE_VARS, "key/opmode", 18); break; case 2: GWEN_DB_SetIntValue(dbKey, GWEN_DB_FLAGS_OVERWRITE_VARS, "key/opmode", 17); break; case 0: case 1: default: GWEN_DB_SetIntValue(dbKey, GWEN_DB_FLAGS_OVERWRITE_VARS, "key/opmode", 16); break; } } GWEN_DB_SetIntValue(dbKey, GWEN_DB_FLAGS_OVERWRITE_VARS, "key/type", 10); GWEN_DB_SetIntValue(dbKey, GWEN_DB_FLAGS_OVERWRITE_VARS, "key/modname", 12); GWEN_DB_SetIntValue(dbKey, GWEN_DB_FLAGS_OVERWRITE_VARS, "key/expname", 13); p=GWEN_Crypt_Token_KeyInfo_GetModulusData(ki); bsize=GWEN_Crypt_Token_KeyInfo_GetModulusLen(ki); if (!p || !bsize) { DBG_ERROR(AQHBCI_LOGDOMAIN, "No modulus in key"); return GWEN_ERROR_INVALID; } GWEN_DB_SetBinValue(dbKey, GWEN_DB_FLAGS_OVERWRITE_VARS, "key/modulus", p, bsize); p=GWEN_Crypt_Token_KeyInfo_GetExponentData(ki); bsize=GWEN_Crypt_Token_KeyInfo_GetExponentLen(ki); if (!p || !bsize) { DBG_ERROR(AQHBCI_LOGDOMAIN, "No exponent in key"); return GWEN_ERROR_INVALID; } GWEN_DB_SetBinValue(dbKey, GWEN_DB_FLAGS_OVERWRITE_VARS, "key/exponent", p, bsize); p=GWEN_Crypt_Token_KeyInfo_GetCertificateData(ki); bsize=GWEN_Crypt_Token_KeyInfo_GetCertificateLen(ki); if (p && bsize) { GWEN_DB_SetIntValue(dbKey, GWEN_DB_FLAGS_OVERWRITE_VARS, "cert/type", GWEN_Crypt_Token_KeyInfo_GetCertType(ki)); GWEN_DB_SetBinValue(dbKey, GWEN_DB_FLAGS_OVERWRITE_VARS, "cert/cert", p, bsize); } return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/admjobs/jobgetkeys.xml0000664000175000017500000003175114043610745023126 00000000000000 %code %version 2 124 %code %version 1 224 %code %version 2 124 %code %version 1 224 %code %version 2 124 %code %version 1 224 %code %version 2 124 %code %version 2 124 %code %version 1 224 9999999999 0 0 V 999 999 9999999999 S 999 999 9999999999 9999999999 0 0 V 999 999 999 S 999 999 999 9999999999 0 0 V 999 999 999 S 999 999 999 9999999999 0 0 V 999 999 999 S 999 999 999 D 999 999 999 9999999999 0 0 V 999 999 999 S 999 999 999 D 999 999 999 aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/admjobs/jobgetbankinfo_l.h0000664000175000017500000000121014044534775023700 00000000000000/*************************************************************************** begin : Mon Sep 09 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_JOBGETBANKINFO_L_H #define AH_JOBGETBANKINFO_L_H #include "aqhbci/aqhbci_l.h" #include "aqhbci/joblayer/job_l.h" AH_JOB *AH_Job_GetBankInfo_new(AB_PROVIDER *pro, AB_USER *u, int withHkTan); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/admjobs/jobgetkeys_p.h0000664000175000017500000000156314043610745023072 00000000000000/*************************************************************************** begin : Thu Jan 31 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_JOBGETKEYS_P_H #define AH_JOBGETKEYS_P_H #include "jobgetkeys_l.h" typedef struct AH_JOB_GETKEYS AH_JOB_GETKEYS; struct AH_JOB_GETKEYS { char *peerId; GWEN_CRYPT_TOKEN_KEYINFO *signKeyInfo; GWEN_CRYPT_TOKEN_KEYINFO *cryptKeyInfo; GWEN_CRYPT_TOKEN_KEYINFO *authKeyInfo; }; static void GWENHYWFAR_CB AH_Job_GetKeys_FreeData(void *bp, void *p); static int AH_Job_GetKeys_Process(AH_JOB *j, AB_IMEXPORTER_CONTEXT *ctx); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/admjobs/jobgetbankinfo.c0000664000175000017500000000636514576127360023376 00000000000000/*************************************************************************** begin : Mon Sep 09 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "jobgetbankinfo_p.h" #include "aqhbci/aqhbci_l.h" /* ------------------------------------------------------------------------------------------------ * forward declarations * ------------------------------------------------------------------------------------------------ */ static int _process(AH_JOB *j, AB_IMEXPORTER_CONTEXT *ctx); static void GWENHYWFAR_CB _freeData(void *bp, void *p); /* ------------------------------------------------------------------------------------------------ * implementations * ------------------------------------------------------------------------------------------------ */ GWEN_INHERIT(AH_JOB, AH_JOB_GETBANKINFO) AH_JOB *AH_Job_GetBankInfo_new(AB_PROVIDER *pro, AB_USER *u, int withHkTan) { AH_JOB *j; GWEN_DB_NODE *args; AH_JOB_GETBANKINFO *jd; assert(u); if (withHkTan) j=AH_Job_new("JobGetBankInfoWithTan", pro, u, 0, 0); else j=AH_Job_new("JobGetBankInfo", pro, u, 0, 0); if (!j) { DBG_ERROR(AQHBCI_LOGDOMAIN, "JobGetBankInfo not supported, should not happen"); return 0; } GWEN_NEW_OBJECT(AH_JOB_GETBANKINFO, jd); GWEN_INHERIT_SETDATA(AH_JOB, AH_JOB_GETBANKINFO, j, jd, _freeData) AH_Job_SetProcessFn(j, _process); /* set arguments */ args=AH_Job_GetArguments(j); assert(args); GWEN_DB_SetIntValue(args, GWEN_DB_FLAGS_OVERWRITE_VARS, "open/prepare/bpdversion", 0); GWEN_DB_SetIntValue(args, GWEN_DB_FLAGS_OVERWRITE_VARS, "open/prepare/updversion", 0); DBG_INFO(AQHBCI_LOGDOMAIN, "JobGetBankInfo created"); return j; } void GWENHYWFAR_CB _freeData(void *bp, void *p) { AH_JOB_GETBANKINFO *jd; jd=(AH_JOB_GETBANKINFO *)p; GWEN_FREE_OBJECT(jd); } int _process(AH_JOB *j, AB_IMEXPORTER_CONTEXT *ctx) { AH_JOB_GETBANKINFO *jd; GWEN_DB_NODE *dbResponses; AB_USER *u; AB_BANKING *ab; GWEN_DB_NODE *dbCurr; int tanMaxVersion=0; assert(j); jd=GWEN_INHERIT_GETDATA(AH_JOB, AH_JOB_GETBANKINFO, j); assert(jd); if (jd->scanned) return 0; jd->scanned=1; dbResponses=AH_Job_GetResponses(j); assert(dbResponses); u=AH_Job_GetUser(j); assert(u); ab=AH_Job_GetBankingApi(j); assert(ab); dbCurr=GWEN_DB_FindFirstGroup(dbResponses, "HITANS"); while (dbCurr) { GWEN_DB_NODE *dbTanData; dbTanData=GWEN_DB_GetGroup(dbCurr, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "data/HITANS"); if (dbTanData) { int tanSegVersion; tanSegVersion=GWEN_DB_GetIntValue(dbTanData, "head/version", 0, 0); if (tanSegVersion>tanMaxVersion) tanMaxVersion=tanSegVersion; DBG_INFO(AQHBCI_LOGDOMAIN, "Found a TAN segment definition (version %d)", tanSegVersion); } dbCurr=GWEN_DB_FindNextGroup(dbCurr, "HITANS"); } if (tanMaxVersion<1) { DBG_ERROR(AQHBCI_LOGDOMAIN, "No HITANS segments found in server response."); } return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/admjobs/jobgetsysid.xml0000664000175000017500000000424214043610745023301 00000000000000 0 0 0 0 aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/admjobs/Makefile.in0000644000175000017500000006413015037736025022302 00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/libs/plugins/backends/aqhbci/admjobs ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/distri.m4 $(top_srcdir)/m4/gwenhywfar.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/os.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libhbciadmjobs_la_LIBADD = am_libhbciadmjobs_la_OBJECTS = jobgetkeys.lo jobsendkeys.lo \ jobchangekeys.lo jobtan.lo jobgetsepainfo.lo jobgetsysid.lo \ jobgetbankinfo.lo jobunblockpin.lo jobacknowledge.lo \ jobgettargetacc.lo libhbciadmjobs_la_OBJECTS = $(am_libhbciadmjobs_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/jobacknowledge.Plo \ ./$(DEPDIR)/jobchangekeys.Plo ./$(DEPDIR)/jobgetbankinfo.Plo \ ./$(DEPDIR)/jobgetkeys.Plo ./$(DEPDIR)/jobgetsepainfo.Plo \ ./$(DEPDIR)/jobgetsysid.Plo ./$(DEPDIR)/jobgettargetacc.Plo \ ./$(DEPDIR)/jobsendkeys.Plo ./$(DEPDIR)/jobtan.Plo \ ./$(DEPDIR)/jobunblockpin.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libhbciadmjobs_la_SOURCES) DIST_SOURCES = $(libhbciadmjobs_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac HEADERS = $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADD_ACLOCAL_FLAGS = @ADD_ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AQBANKING_CLI_VERSION_STRING = @AQBANKING_CLI_VERSION_STRING@ AQBANKING_FINTS_VERSION_STRING = @AQBANKING_FINTS_VERSION_STRING@ AQBANKING_SO_AGE = @AQBANKING_SO_AGE@ AQBANKING_SO_CURRENT = @AQBANKING_SO_CURRENT@ AQBANKING_SO_EFFECTIVE = @AQBANKING_SO_EFFECTIVE@ AQBANKING_SO_REVISION = @AQBANKING_SO_REVISION@ AQBANKING_VERSION_BUILD = @AQBANKING_VERSION_BUILD@ AQBANKING_VERSION_FULL_STRING = @AQBANKING_VERSION_FULL_STRING@ AQBANKING_VERSION_MAJOR = @AQBANKING_VERSION_MAJOR@ AQBANKING_VERSION_MINOR = @AQBANKING_VERSION_MINOR@ AQBANKING_VERSION_PATCHLEVEL = @AQBANKING_VERSION_PATCHLEVEL@ AQBANKING_VERSION_RELEASE_STRING = @AQBANKING_VERSION_RELEASE_STRING@ AQBANKING_VERSION_STRING = @AQBANKING_VERSION_STRING@ AQBANKING_VERSION_TAG = @AQBANKING_VERSION_TAG@ AQEBICS_CFLAGS = @AQEBICS_CFLAGS@ AQEBICS_LIBS = @AQEBICS_LIBS@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATETIME = @DATETIME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_EXCLUDE_PATTERNS = @DOXYGEN_EXCLUDE_PATTERNS@ DOXYGEN_FILE_PATTERNS = @DOXYGEN_FILE_PATTERNS@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENGUI_GTK2_CFLAGS = @GWENGUI_GTK2_CFLAGS@ GWENGUI_GTK2_LIBS = @GWENGUI_GTK2_LIBS@ GWENHYWFAR_MINIMUM_VERSION = @GWENHYWFAR_MINIMUM_VERSION@ HAVE_GWENGUI_GTK2 = @HAVE_GWENGUI_GTK2@ HAVE_I18N = @HAVE_I18N@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIBXSLT_CFLAGS = @LIBXSLT_CFLAGS@ LIBXSLT_LIBS = @LIBXSLT_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_SUPPORTS_QT = @MSGFMT_SUPPORTS_QT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ TUTORIALS = @TUTORIALS@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XMLMERGE = @XMLMERGE@ XMLSEC_CFLAGS = @XMLSEC_CFLAGS@ XMLSEC_LIBS = @XMLSEC_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ aqbanking_backends = @aqbanking_backends@ aqbanking_cfg_searchdir = @aqbanking_cfg_searchdir@ aqbanking_data_searchdir = @aqbanking_data_searchdir@ aqbanking_headerdir = @aqbanking_headerdir@ aqbanking_headerdir_am = @aqbanking_headerdir_am@ aqbanking_includes = @aqbanking_includes@ aqbanking_internal_libs = @aqbanking_internal_libs@ aqbanking_ldflags = @aqbanking_ldflags@ aqbanking_libs = @aqbanking_libs@ aqbanking_locale_searchdir = @aqbanking_locale_searchdir@ aqbanking_modules = @aqbanking_modules@ aqbanking_pkgdatadir = @aqbanking_pkgdatadir@ aqbanking_plugin_searchdir = @aqbanking_plugin_searchdir@ aqbanking_plugindir = @aqbanking_plugindir@ aqbanking_plugins_backends_dirs = @aqbanking_plugins_backends_dirs@ aqbanking_plugins_backends_libs = @aqbanking_plugins_backends_libs@ aqbanking_plugins_bankinfo_dirs = @aqbanking_plugins_bankinfo_dirs@ aqbanking_plugins_bankinfo_libs = @aqbanking_plugins_bankinfo_libs@ aqbanking_plugins_imexporters_dirs = @aqbanking_plugins_imexporters_dirs@ aqbanking_plugins_imexporters_libs = @aqbanking_plugins_imexporters_libs@ aqbanking_plugins_parsers_dirs = @aqbanking_plugins_parsers_dirs@ aqbanking_symlinkdir = @aqbanking_symlinkdir@ aqbanking_sys_is_windows = @aqbanking_sys_is_windows@ aqbankingpp_modules = @aqbankingpp_modules@ aqebics_datadir = @aqebics_datadir@ aqebics_includes = @aqebics_includes@ aqebics_internal_libs = @aqebics_internal_libs@ aqebics_ldflags = @aqebics_ldflags@ aqebics_libs = @aqebics_libs@ aqfints_datadir = @aqfints_datadir@ aqhbci_datadir = @aqhbci_datadir@ aqhbci_includes = @aqhbci_includes@ aqhbci_internal_libs = @aqhbci_internal_libs@ aqhbci_ldflags = @aqhbci_ldflags@ aqhbci_libs = @aqhbci_libs@ aqofxconnect_includes = @aqofxconnect_includes@ aqofxconnect_internal_libs = @aqofxconnect_internal_libs@ aqofxconnect_libs = @aqofxconnect_libs@ aqpaypal_includes = @aqpaypal_includes@ aqpaypal_internal_libs = @aqpaypal_internal_libs@ aqpaypal_libs = @aqpaypal_libs@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gmp_libs = @gmp_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_dir = @gwenhywfar_dir@ gwenhywfar_has_crypt = @gwenhywfar_has_crypt@ gwenhywfar_headers = @gwenhywfar_headers@ gwenhywfar_includes = @gwenhywfar_includes@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_plugins = @gwenhywfar_plugins@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ typemaker2_exe = @typemaker2_exe@ visibility_cflags = @visibility_cflags@ with_aqebics = @with_aqebics@ with_aqhbci = @with_aqhbci@ AM_CFLAGS = -DBUILDING_AQBANKING @visibility_cflags@ AM_CPPFLAGS = -I$(top_srcdir)/src/libs -I$(top_builddir)/src/libs $(gwenhywfar_includes) \ -I$(srcdir)/../../ \ -I$(srcdir)/../joblayer \ -I$(srcdir)/../msglayer \ -I$(srcdir)/../banking \ -I$(srcdir)/../applayer \ -I$(srcdir)/../tan \ -I$(srcdir)/.. noinst_LTLIBRARIES = libhbciadmjobs.la noinst_HEADERS = \ jobgetkeys_l.h jobgetkeys_p.h \ jobsendkeys_l.h jobsendkeys_p.h \ jobchangekeys_l.h jobchangekeys_p.h \ jobtan_l.h jobtan_p.h \ jobgetsepainfo_l.h jobgetsepainfo_p.h \ jobgetsysid_l.h jobgetsysid_p.h \ jobgetbankinfo_l.h jobgetbankinfo_p.h \ jobunblockpin_l.h \ jobacknowledge_l.h \ jobgettargetacc_l.h jobgettargetacc_p.h libhbciadmjobs_la_SOURCES = \ jobgetkeys.c \ jobsendkeys.c \ jobchangekeys.c \ jobtan.c \ jobgetsepainfo.c \ jobgetsysid.c \ jobgetbankinfo.c \ jobunblockpin.c \ jobacknowledge.c \ jobgettargetacc.c xmlfiles = \ $(srcdir)/jobgetkeys.xml \ $(srcdir)/jobsendkeys.xml \ $(srcdir)/jobchangekeys.xml \ $(srcdir)/jobtan.xml \ $(srcdir)/jobgetsepainfo.xml \ $(srcdir)/jobgetsysid.xml \ $(srcdir)/jobgetbankinfo.xml \ $(srcdir)/jobunblockpin.xml \ $(srcdir)/jobacknowledge.xml \ $(srcdir)/jobgettargetacc.xml EXTRA_DIST = $(xmlfiles) CLEANFILES = adminjobs.xml all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libs/plugins/backends/aqhbci/admjobs/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libs/plugins/backends/aqhbci/admjobs/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libhbciadmjobs.la: $(libhbciadmjobs_la_OBJECTS) $(libhbciadmjobs_la_DEPENDENCIES) $(EXTRA_libhbciadmjobs_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libhbciadmjobs_la_OBJECTS) $(libhbciadmjobs_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jobacknowledge.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jobchangekeys.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jobgetbankinfo.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jobgetkeys.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jobgetsepainfo.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jobgetsysid.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jobgettargetacc.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jobsendkeys.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jobtan.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jobunblockpin.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) all-local installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/jobacknowledge.Plo -rm -f ./$(DEPDIR)/jobchangekeys.Plo -rm -f ./$(DEPDIR)/jobgetbankinfo.Plo -rm -f ./$(DEPDIR)/jobgetkeys.Plo -rm -f ./$(DEPDIR)/jobgetsepainfo.Plo -rm -f ./$(DEPDIR)/jobgetsysid.Plo -rm -f ./$(DEPDIR)/jobgettargetacc.Plo -rm -f ./$(DEPDIR)/jobsendkeys.Plo -rm -f ./$(DEPDIR)/jobtan.Plo -rm -f ./$(DEPDIR)/jobunblockpin.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/jobacknowledge.Plo -rm -f ./$(DEPDIR)/jobchangekeys.Plo -rm -f ./$(DEPDIR)/jobgetbankinfo.Plo -rm -f ./$(DEPDIR)/jobgetkeys.Plo -rm -f ./$(DEPDIR)/jobgetsepainfo.Plo -rm -f ./$(DEPDIR)/jobgetsysid.Plo -rm -f ./$(DEPDIR)/jobgettargetacc.Plo -rm -f ./$(DEPDIR)/jobsendkeys.Plo -rm -f ./$(DEPDIR)/jobtan.Plo -rm -f ./$(DEPDIR)/jobunblockpin.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am all-local am--depfiles check \ check-am clean clean-generic clean-libtool \ clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am .PRECIOUS: Makefile sources: for f in $(libhbciadmjobs_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d sources; \ done adminjobs.xml: $(xmlfiles) $(XMLMERGE) -v --compact -o $@ $(xmlfiles) all-local: adminjobs.xml typefiles: for d in $(SUBDIRS); do \ $(MAKE) -C $$d typefiles; \ done typedefs: for d in $(SUBDIRS); do \ $(MAKE) -C $$d typedefs; \ done cppcheck: for f in $(libhbciadmjobs_la_SOURCES); do \ cppcheck --force $$f ; \ done # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/admjobs/jobgetsysid_p.h0000664000175000017500000000153714043610745023253 00000000000000/*************************************************************************** begin : Fri Feb 01 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_JOBGETSYSID_P_H #define AH_JOBGETSYSID_P_H #include "jobgetsysid_l.h" typedef struct AH_JOB_GETSYSID AH_JOB_GETSYSID; struct AH_JOB_GETSYSID { char *sysId; }; static void GWENHYWFAR_CB AH_Job_GetSysId_FreeData(void *bp, void *p); static int AH_Job_GetSysId_Process(AH_JOB *j, AB_IMEXPORTER_CONTEXT *ctx); static int AH_Job_GetSysId_NextMsg(AH_JOB *j); static int AH_Job_GetSysId_ExtractSysId(AH_JOB *j); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/admjobs/jobunblockpin_l.h0000664000175000017500000000116514044534775023566 00000000000000/*************************************************************************** begin : Mon Mar 16 2020 copyright : (C) 2020 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_JOBUNBLOCKPIN_L_H #define AH_JOBUNBLOCKPIN_L_H #include "aqhbci/aqhbci_l.h" #include "aqhbci/joblayer/job_l.h" AH_JOB *AH_Job_UnblockPin_new(AB_PROVIDER *pro, AB_USER *u); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/admjobs/jobacknowledge_l.h0000664000175000017500000000134614044534775023706 00000000000000/*************************************************************************** begin : Mon Mar 16 2020 copyright : (C) 2020 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_JOBACKNOWLEDGE_L_H #define AH_JOBACKNOWLEDGE_L_H #include "aqhbci/aqhbci_l.h" #include "aqhbci/joblayer/job_l.h" AH_JOB *AH_Job_Acknowledge_new(AB_PROVIDER *pro, AB_USER *u, const uint8_t *ptrAckCode, uint32_t lenAckCode); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/admjobs/jobgettargetacc.xml0000664000175000017500000000477314156464025024117 00000000000000 %code %version %code %version %code %version aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/admjobs/jobgettargetacc_p.h0000664000175000017500000000123414625171605024052 00000000000000/*************************************************************************** begin : Tue Oct 12 2021 copyright : (C) 2021 by Stefan Bayer, Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_JOBGETTARGETACC_P_H #define AH_JOBGETTARGETACC_P_H #include "aqhbci_l.h" #include "jobgettargetacc_l.h" typedef struct AH_JOB_GETTARGETACC AH_JOB_GETTARGETACC; struct AH_JOB_GETTARGETACC { int scanned; }; #endif aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/admjobs/jobsendkeys_l.h0000664000175000017500000000147214044534775023250 00000000000000/*************************************************************************** begin : Thu Jan 31 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_JOBSENDKEYS_L_H #define AH_JOBSENDKEYS_L_H #include "aqhbci/aqhbci_l.h" #include "aqhbci/joblayer/job_l.h" AH_JOB *AH_Job_SendKeys_new(AB_PROVIDER *pro, AB_USER *u, GWEN_CRYPT_TOKEN_KEYINFO *cryptKeyInfo, GWEN_CRYPT_TOKEN_KEYINFO *signKeyInfo, GWEN_CRYPT_TOKEN_KEYINFO *authKeyInfo); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/admjobs/jobgetbankinfo.xml0000664000175000017500000000345514043610745023742 00000000000000 9999999999 0 0 0 0 9999999999 0 0 0 0 2 N aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/admjobs/jobgetkeys_l.h0000664000175000017500000000160114044534775023070 00000000000000/*************************************************************************** begin : Thu Jan 31 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_JOBGETKEYS_L_H #define AH_JOBGETKEYS_L_H #include "aqhbci/aqhbci_l.h" #include "aqhbci/joblayer/job_l.h" AH_JOB *AH_Job_GetKeys_new(AB_PROVIDER *pro, AB_USER *u); GWEN_CRYPT_TOKEN_KEYINFO *AH_Job_GetKeys_GetSignKeyInfo(const AH_JOB *j); GWEN_CRYPT_TOKEN_KEYINFO *AH_Job_GetKeys_GetCryptKeyInfo(const AH_JOB *j); GWEN_CRYPT_TOKEN_KEYINFO *AH_Job_GetKeys_GetAuthKeyInfo(const AH_JOB *j); const char *AH_Job_GetKeys_GetPeerId(const AH_JOB *j); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/admjobs/jobgetbankinfo_p.h0000664000175000017500000000117514043610745023705 00000000000000/*************************************************************************** begin : Mon Sep 09 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_JOBGETBANKINFO_P_H #define AH_JOBGETBANKINFO_P_H #include "jobgetbankinfo_l.h" typedef struct AH_JOB_GETBANKINFO AH_JOB_GETBANKINFO; struct AH_JOB_GETBANKINFO { int scanned; }; #endif aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/admjobs/jobgetsysid_l.h0000664000175000017500000000124014044534775023247 00000000000000/*************************************************************************** begin : Fri Feb 01 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_JOBGETSYSID_L_H #define AH_JOBGETSYSID_L_H #include "aqhbci/aqhbci_l.h" #include "aqhbci/joblayer/job_l.h" AH_JOB *AH_Job_GetSysId_new(AB_PROVIDER *pro, AB_USER *u); const char *AH_Job_GetSysId_GetSysId(AH_JOB *j); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/admjobs/jobunblockpin.xml0000664000175000017500000000321014043610745023604 00000000000000 %code %version %code %version 1 aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/admjobs/Makefile.am0000664000175000017500000000345314156464025022273 00000000000000 AM_CFLAGS=-DBUILDING_AQBANKING @visibility_cflags@ AM_CPPFLAGS = -I$(top_srcdir)/src/libs -I$(top_builddir)/src/libs $(gwenhywfar_includes) \ -I$(srcdir)/../../ \ -I$(srcdir)/../joblayer \ -I$(srcdir)/../msglayer \ -I$(srcdir)/../banking \ -I$(srcdir)/../applayer \ -I$(srcdir)/../tan \ -I$(srcdir)/.. noinst_LTLIBRARIES=libhbciadmjobs.la noinst_HEADERS=\ jobgetkeys_l.h jobgetkeys_p.h \ jobsendkeys_l.h jobsendkeys_p.h \ jobchangekeys_l.h jobchangekeys_p.h \ jobtan_l.h jobtan_p.h \ jobgetsepainfo_l.h jobgetsepainfo_p.h \ jobgetsysid_l.h jobgetsysid_p.h \ jobgetbankinfo_l.h jobgetbankinfo_p.h \ jobunblockpin_l.h \ jobacknowledge_l.h \ jobgettargetacc_l.h jobgettargetacc_p.h libhbciadmjobs_la_SOURCES=\ jobgetkeys.c \ jobsendkeys.c \ jobchangekeys.c \ jobtan.c \ jobgetsepainfo.c \ jobgetsysid.c \ jobgetbankinfo.c \ jobunblockpin.c \ jobacknowledge.c \ jobgettargetacc.c sources: for f in $(libhbciadmjobs_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d sources; \ done xmlfiles=\ $(srcdir)/jobgetkeys.xml \ $(srcdir)/jobsendkeys.xml \ $(srcdir)/jobchangekeys.xml \ $(srcdir)/jobtan.xml \ $(srcdir)/jobgetsepainfo.xml \ $(srcdir)/jobgetsysid.xml \ $(srcdir)/jobgetbankinfo.xml \ $(srcdir)/jobunblockpin.xml \ $(srcdir)/jobacknowledge.xml \ $(srcdir)/jobgettargetacc.xml EXTRA_DIST=$(xmlfiles) adminjobs.xml: $(xmlfiles) $(XMLMERGE) -v --compact -o $@ $(xmlfiles) all-local: adminjobs.xml CLEANFILES = adminjobs.xml typefiles: for d in $(SUBDIRS); do \ $(MAKE) -C $$d typefiles; \ done typedefs: for d in $(SUBDIRS); do \ $(MAKE) -C $$d typedefs; \ done cppcheck: for f in $(libhbciadmjobs_la_SOURCES); do \ cppcheck --force $$f ; \ done aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/admjobs/jobtan.c0000664000175000017500000002601714627071733021664 00000000000000/*************************************************************************** begin : Thu Jan 31 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "jobtan_p.h" #include "aqhbci/joblayer/job_crypt.h" GWEN_INHERIT(AH_JOB, AH_JOB_TAN); AH_JOB *AH_Job_Tan_new(AB_PROVIDER *pro, AB_USER *u, int process, int jobVersion) { AH_JOB *j; AH_JOB_TAN *aj; GWEN_DB_NODE *dbArgs; GWEN_DB_NODE *dbParams; const char *s; DBG_INFO(AQHBCI_LOGDOMAIN, "Looking for TAN job in version %d", jobVersion); j=AH_Job_new("JobTan", pro, u, 0, jobVersion); if (!j) { DBG_INFO(AQHBCI_LOGDOMAIN, "TAN job in version %d not found", jobVersion); return NULL; } GWEN_NEW_OBJECT(AH_JOB_TAN, aj); GWEN_INHERIT_SETDATA(AH_JOB, AH_JOB_TAN, j, aj, AH_Job_Tan_FreeData); /* overwrite some virtual functions */ AH_Job_SetProcessFn(j, AH_Job_Tan_Process); /* set some known arguments */ dbArgs=AH_Job_GetArguments(j); assert(dbArgs); dbParams=AH_Job_GetParams(j); assert(dbParams); if (process=='S') GWEN_DB_SetCharValue(dbArgs, GWEN_DB_FLAGS_OVERWRITE_VARS, "process", "S"); else GWEN_DB_SetIntValue(dbArgs, GWEN_DB_FLAGS_OVERWRITE_VARS, "process", process); if (process==1 || process==2 || process=='S') GWEN_DB_SetCharValue(dbArgs, GWEN_DB_FLAGS_OVERWRITE_VARS, "moreTans", "N"); /* set tanmedium id (if any) */ s=AH_User_GetTanMediumId(u); if (s && *s) AH_Job_Tan_SetTanMediumId(j, s); aj->tanProcess=process; return j; } void GWENHYWFAR_CB AH_Job_Tan_FreeData(void *bp, void *p) { AH_JOB_TAN *aj; aj=(AH_JOB_TAN *)p; free(aj->tanMediumId); free(aj->reference); free(aj->challenge); free(aj->challengeHhd); GWEN_FREE_OBJECT(aj); } int AH_Job_Tan_Process(AH_JOB *j, AB_IMEXPORTER_CONTEXT *ctx) { AH_JOB_TAN *aj; GWEN_DB_NODE *dbResponses; GWEN_DB_NODE *dbCurr; int rv; DBG_NOTICE(AQHBCI_LOGDOMAIN, "Processing JobTan"); assert(j); aj=GWEN_INHERIT_GETDATA(AH_JOB, AH_JOB_TAN, j); assert(aj); dbResponses=AH_Job_GetResponses(j); assert(dbResponses); /* search for "TanResponse" */ dbCurr=GWEN_DB_GetFirstGroup(dbResponses); while (dbCurr) { GWEN_DB_NODE *dbTanResponse; rv=AH_Job_CheckEncryption(j, dbCurr); if (rv) { DBG_NOTICE(AQHBCI_LOGDOMAIN, "Compromised security (encryption)"); AH_Job_SetStatus(j, AH_JobStatusError); return rv; } rv=AH_Job_CheckSignature(j, dbCurr); if (rv) { DBG_NOTICE(AQHBCI_LOGDOMAIN, "Compromised security (signature)"); AH_Job_SetStatus(j, AH_JobStatusError); return rv; } dbTanResponse=GWEN_DB_GetGroup(dbCurr, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "data/tanResponse"); if (dbTanResponse) { const char *s; DBG_NOTICE(AQHBCI_LOGDOMAIN, "Got a TAN response"); if (GWEN_Logger_GetLevel(0)>=GWEN_LoggerLevel_Debug) GWEN_DB_Dump(dbTanResponse, 2); s=GWEN_DB_GetCharValue(dbTanResponse, "challenge", 0, 0); if (s) { free(aj->challenge); aj->challenge=strdup(s); } /* get special HHD challenge */ if (GWEN_DB_VariableExists(dbTanResponse, "challengeHHD")) { const uint8_t *p; unsigned int l; p=GWEN_DB_GetBinValue(dbTanResponse, "challengeHHD", 0, NULL, 0, &l); if (p && l) { GWEN_BUFFER *bbuf; DBG_INFO(AQHBCI_LOGDOMAIN, "Job has a challengeHHD string:"); GWEN_Text_LogString((const char *)p, l, AQHBCI_LOGDOMAIN, GWEN_LoggerLevel_Info); bbuf=GWEN_Buffer_new(0, 256, 0, 1); #if 1 /* data is binary, transform to string */ GWEN_Text_ToHexBuffer((const char *) p, l, bbuf, 0, 0, 0); #else /* data is a string, no need to transform to hex */ GWEN_Buffer_AppendBytes(bbuf, (const char *) p, l); #endif free(aj->challengeHhd); aj->challengeHhd=strdup(GWEN_Buffer_GetStart(bbuf)); GWEN_Buffer_free(bbuf); } } s=GWEN_DB_GetCharValue(dbTanResponse, "jobReference", 0, 0); if (s) { free(aj->reference); aj->reference=strdup(s); } break; /* break loop, we found the tanResponse */ } /* if "TanResponse" */ dbCurr=GWEN_DB_GetNextGroup(dbCurr); } return 0; } int AH_Job_Tan_GetTanMethod(const AH_JOB *j) { AH_JOB_TAN *aj; assert(j); aj=GWEN_INHERIT_GETDATA(AH_JOB, AH_JOB_TAN, j); assert(aj); return aj->tanMethod; } void AH_Job_Tan_SetTanMethod(AH_JOB *j, int i) { AH_JOB_TAN *aj; assert(j); aj=GWEN_INHERIT_GETDATA(AH_JOB, AH_JOB_TAN, j); assert(aj); aj->tanMethod=i; } void AH_Job_Tan_SetHash(AH_JOB *j, const unsigned char *p, unsigned int len) { AH_JOB_TAN *aj; GWEN_DB_NODE *dbArgs; assert(j); aj=GWEN_INHERIT_GETDATA(AH_JOB, AH_JOB_TAN, j); assert(aj); dbArgs=AH_Job_GetArguments(j); assert(dbArgs); GWEN_DB_SetBinValue(dbArgs, GWEN_DB_FLAGS_OVERWRITE_VARS, "jobHash", p, len); } void AH_Job_Tan_SetReference(AH_JOB *j, const char *p) { AH_JOB_TAN *aj; GWEN_DB_NODE *dbArgs; assert(j); aj=GWEN_INHERIT_GETDATA(AH_JOB, AH_JOB_TAN, j); assert(aj); dbArgs=AH_Job_GetArguments(j); assert(dbArgs); GWEN_DB_SetCharValue(dbArgs, GWEN_DB_FLAGS_OVERWRITE_VARS, "jobReference", p); } void AH_Job_Tan_SetTanList(AH_JOB *j, const char *p) { AH_JOB_TAN *aj; GWEN_DB_NODE *dbArgs; assert(j); aj=GWEN_INHERIT_GETDATA(AH_JOB, AH_JOB_TAN, j); assert(aj); dbArgs=AH_Job_GetArguments(j); assert(dbArgs); GWEN_DB_SetCharValue(dbArgs, GWEN_DB_FLAGS_OVERWRITE_VARS, "tanList", p); } void AH_Job_Tan_SetTanInfo(AH_JOB *j, const char *p) { AH_JOB_TAN *aj; GWEN_DB_NODE *dbArgs; assert(j); aj=GWEN_INHERIT_GETDATA(AH_JOB, AH_JOB_TAN, j); assert(aj); dbArgs=AH_Job_GetArguments(j); assert(dbArgs); GWEN_DB_SetCharValue(dbArgs, GWEN_DB_FLAGS_OVERWRITE_VARS, "tanInfo", p); } void AH_Job_Tan_SetSegCode(AH_JOB *j, const char *p) { AH_JOB_TAN *aj; GWEN_DB_NODE *dbArgs; assert(j); aj=GWEN_INHERIT_GETDATA(AH_JOB, AH_JOB_TAN, j); assert(aj); dbArgs=AH_Job_GetArguments(j); assert(dbArgs); if (p && *p) { DBG_INFO(AQHBCI_LOGDOMAIN, "Setting segment id in TAN to [%s]", p); GWEN_DB_SetCharValue(dbArgs, GWEN_DB_FLAGS_OVERWRITE_VARS, "segmentId", p); if ((aj->tanProcess==1 || aj->tanProcess==2) && p && (strcasecmp(p, "HKIDN")==0)) GWEN_DB_SetCharValue(dbArgs, GWEN_DB_FLAGS_OVERWRITE_VARS, "moreTans", "N"); } else { GWEN_DB_DeleteVar(dbArgs, "segmentId"); } } const char *AH_Job_Tan_GetChallenge(const AH_JOB *j) { AH_JOB_TAN *aj; assert(j); aj=GWEN_INHERIT_GETDATA(AH_JOB, AH_JOB_TAN, j); assert(aj); return aj->challenge; } const char *AH_Job_Tan_GetHhdChallenge(const AH_JOB *j) { AH_JOB_TAN *aj; assert(j); aj=GWEN_INHERIT_GETDATA(AH_JOB, AH_JOB_TAN, j); assert(aj); return aj->challengeHhd; } const char *AH_Job_Tan_GetReference(const AH_JOB *j) { AH_JOB_TAN *aj; assert(j); aj=GWEN_INHERIT_GETDATA(AH_JOB, AH_JOB_TAN, j); assert(aj); return aj->reference; } void AH_Job_Tan_SetTanMediumId(AH_JOB *j, const char *s) { AH_JOB_TAN *aj; GWEN_DB_NODE *dbArgs; assert(j); aj=GWEN_INHERIT_GETDATA(AH_JOB, AH_JOB_TAN, j); assert(aj); dbArgs=AH_Job_GetArguments(j); assert(dbArgs); if (s) GWEN_DB_SetCharValue(dbArgs, GWEN_DB_FLAGS_OVERWRITE_VARS, "tanMediumId", s); else GWEN_DB_DeleteVar(dbArgs, "tanMediumId"); } void AH_Job_Tan_SetLocalAccountInfo(AH_JOB *j, const char *bankCode, const char *accountId, const char *accountSubId) { AH_JOB_TAN *aj; GWEN_DB_NODE *dbArgs; assert(j); aj=GWEN_INHERIT_GETDATA(AH_JOB, AH_JOB_TAN, j); assert(aj); dbArgs=AH_Job_GetArguments(j); assert(dbArgs); if (bankCode && *bankCode) GWEN_DB_SetCharValue(dbArgs, GWEN_DB_FLAGS_OVERWRITE_VARS, "localAccount/bankCode", bankCode); if (accountId && *accountId) GWEN_DB_SetCharValue(dbArgs, GWEN_DB_FLAGS_OVERWRITE_VARS, "localAccount/accountId", accountId); if (accountSubId && *accountSubId) GWEN_DB_SetCharValue(dbArgs, GWEN_DB_FLAGS_OVERWRITE_VARS, "localAccount/accountSubId", accountSubId); } void AH_Job_Tan_SetSmsAccountInfo(AH_JOB *j, const char *bankCode, const char *accountId, const char *accountSubId) { AH_JOB_TAN *aj; GWEN_DB_NODE *dbArgs; assert(j); aj=GWEN_INHERIT_GETDATA(AH_JOB, AH_JOB_TAN, j); assert(aj); dbArgs=AH_Job_GetArguments(j); assert(dbArgs); if (bankCode && *bankCode) GWEN_DB_SetCharValue(dbArgs, GWEN_DB_FLAGS_OVERWRITE_VARS, "smsAccount/bankCode", bankCode); if (accountId && *accountId) GWEN_DB_SetCharValue(dbArgs, GWEN_DB_FLAGS_OVERWRITE_VARS, "smsAccount/accountId", accountId); if (accountSubId && *accountSubId) GWEN_DB_SetCharValue(dbArgs, GWEN_DB_FLAGS_OVERWRITE_VARS, "smsAccount/accountSubId", accountSubId); } int AH_Job_Tan_FinishSetup(AH_JOB *j, AH_JOB *accJob) { AH_JOB_TAN *aj; int rv; GWEN_DB_NODE *args; GWEN_DB_NODE *dbParams; GWEN_DB_NODE *dbMethod; const char *s; assert(j); aj=GWEN_INHERIT_GETDATA(AH_JOB, AH_JOB_TAN, j); assert(aj); args=AH_Job_GetArguments(j); assert(args); dbParams=AH_Job_GetParams(j); assert(dbParams); /* get data for the selected tan method */ dbMethod=GWEN_DB_FindFirstGroup(dbParams, "tanMethod"); while (dbMethod) { int tm; tm=GWEN_DB_GetIntValue(dbMethod, "function", 0, -1); if (tm!=-1 && tm==aj->tanMethod) break; dbMethod=GWEN_DB_FindNextGroup(dbMethod, "tanMethod"); } if (!dbMethod) { DBG_ERROR(AQHBCI_LOGDOMAIN, "No info for the selected iTAN method"); return GWEN_ERROR_GENERIC; } rv=AH_Job_AddChallengeParams(accJob, AH_Job_GetSegmentVersion(j), dbMethod); if (rv<0) { if (rv==GWEN_ERROR_NOT_SUPPORTED) { DBG_INFO(AQHBCI_LOGDOMAIN, "Challenge parameters not supported by job, ignoring"); } else { DBG_ERROR(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } } else { GWEN_STRINGLIST *sl; /* add challenge params as provided by addChallengeParams function */ DBG_ERROR(AQHBCI_LOGDOMAIN, "Using result of AddChallengeParams function"); sl=AH_Job_GetChallengeParams(accJob); if (sl) { GWEN_STRINGLISTENTRY *e; e=GWEN_StringList_FirstEntry(sl); while (e) { GWEN_DB_SetCharValue(args, GWEN_DB_FLAGS_DEFAULT, "challengeParams/param", GWEN_StringListEntry_Data(e)); e=GWEN_StringListEntry_Next(e); } } } /* set challenge class */ s=GWEN_DB_GetCharValue(dbMethod, "needChallengeClass", 0, "N"); if (strcasecmp(s, "J")==0) GWEN_DB_SetIntValue(args, GWEN_DB_FLAGS_OVERWRITE_VARS, "challengeClass", AH_Job_GetChallengeClass(accJob)); return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/admjobs/jobacknowledge.xml0000664000175000017500000000323314044534775023741 00000000000000 %code %version %code %version 1 aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/Makefile.in0000644000175000017500000010051615037736025020662 00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/libs/plugins/backends/aqhbci ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/distri.m4 $(top_srcdir)/m4/gwenhywfar.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/os.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = aqhbci.xml header.xml version.h CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libaqhbci_la_DEPENDENCIES = msglayer/libhbcimsg.la \ joblayer/libhbcijob.la ajobs/libhbciaccjobs.la \ admjobs/libhbciadmjobs.la applayer/libhbciapp.la \ banking/libhbcibanking.la control/libhbcicontrol.la \ dialogs/libaqhbci_dlgs.la tan/libhbcitan.la am_libaqhbci_la_OBJECTS = aqhbci.lo libaqhbci_la_OBJECTS = $(am_libaqhbci_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/aqhbci.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libaqhbci_la_SOURCES) DIST_SOURCES = $(libaqhbci_la_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(plugindir)" "$(DESTDIR)$(xmldatadir)" DATA = $(plugin_DATA) $(xmldata_DATA) HEADERS = $(noinst_HEADERS) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir distdir-am am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/aqhbci.xml.in \ $(srcdir)/header.xml.in $(srcdir)/version.h.in \ $(top_srcdir)/depcomp README DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ADD_ACLOCAL_FLAGS = @ADD_ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AQBANKING_CLI_VERSION_STRING = @AQBANKING_CLI_VERSION_STRING@ AQBANKING_FINTS_VERSION_STRING = @AQBANKING_FINTS_VERSION_STRING@ AQBANKING_SO_AGE = @AQBANKING_SO_AGE@ AQBANKING_SO_CURRENT = @AQBANKING_SO_CURRENT@ AQBANKING_SO_EFFECTIVE = @AQBANKING_SO_EFFECTIVE@ AQBANKING_SO_REVISION = @AQBANKING_SO_REVISION@ AQBANKING_VERSION_BUILD = @AQBANKING_VERSION_BUILD@ AQBANKING_VERSION_FULL_STRING = @AQBANKING_VERSION_FULL_STRING@ AQBANKING_VERSION_MAJOR = @AQBANKING_VERSION_MAJOR@ AQBANKING_VERSION_MINOR = @AQBANKING_VERSION_MINOR@ AQBANKING_VERSION_PATCHLEVEL = @AQBANKING_VERSION_PATCHLEVEL@ AQBANKING_VERSION_RELEASE_STRING = @AQBANKING_VERSION_RELEASE_STRING@ AQBANKING_VERSION_STRING = @AQBANKING_VERSION_STRING@ AQBANKING_VERSION_TAG = @AQBANKING_VERSION_TAG@ AQEBICS_CFLAGS = @AQEBICS_CFLAGS@ AQEBICS_LIBS = @AQEBICS_LIBS@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATETIME = @DATETIME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_EXCLUDE_PATTERNS = @DOXYGEN_EXCLUDE_PATTERNS@ DOXYGEN_FILE_PATTERNS = @DOXYGEN_FILE_PATTERNS@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENGUI_GTK2_CFLAGS = @GWENGUI_GTK2_CFLAGS@ GWENGUI_GTK2_LIBS = @GWENGUI_GTK2_LIBS@ GWENHYWFAR_MINIMUM_VERSION = @GWENHYWFAR_MINIMUM_VERSION@ HAVE_GWENGUI_GTK2 = @HAVE_GWENGUI_GTK2@ HAVE_I18N = @HAVE_I18N@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIBXSLT_CFLAGS = @LIBXSLT_CFLAGS@ LIBXSLT_LIBS = @LIBXSLT_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_SUPPORTS_QT = @MSGFMT_SUPPORTS_QT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ TUTORIALS = @TUTORIALS@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XMLMERGE = @XMLMERGE@ XMLSEC_CFLAGS = @XMLSEC_CFLAGS@ XMLSEC_LIBS = @XMLSEC_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ aqbanking_backends = @aqbanking_backends@ aqbanking_cfg_searchdir = @aqbanking_cfg_searchdir@ aqbanking_data_searchdir = @aqbanking_data_searchdir@ aqbanking_headerdir = @aqbanking_headerdir@ aqbanking_headerdir_am = @aqbanking_headerdir_am@ aqbanking_includes = @aqbanking_includes@ aqbanking_internal_libs = @aqbanking_internal_libs@ aqbanking_ldflags = @aqbanking_ldflags@ aqbanking_libs = @aqbanking_libs@ aqbanking_locale_searchdir = @aqbanking_locale_searchdir@ aqbanking_modules = @aqbanking_modules@ aqbanking_pkgdatadir = @aqbanking_pkgdatadir@ aqbanking_plugin_searchdir = @aqbanking_plugin_searchdir@ aqbanking_plugindir = @aqbanking_plugindir@ aqbanking_plugins_backends_dirs = @aqbanking_plugins_backends_dirs@ aqbanking_plugins_backends_libs = @aqbanking_plugins_backends_libs@ aqbanking_plugins_bankinfo_dirs = @aqbanking_plugins_bankinfo_dirs@ aqbanking_plugins_bankinfo_libs = @aqbanking_plugins_bankinfo_libs@ aqbanking_plugins_imexporters_dirs = @aqbanking_plugins_imexporters_dirs@ aqbanking_plugins_imexporters_libs = @aqbanking_plugins_imexporters_libs@ aqbanking_plugins_parsers_dirs = @aqbanking_plugins_parsers_dirs@ aqbanking_symlinkdir = @aqbanking_symlinkdir@ aqbanking_sys_is_windows = @aqbanking_sys_is_windows@ aqbankingpp_modules = @aqbankingpp_modules@ aqebics_datadir = @aqebics_datadir@ aqebics_includes = @aqebics_includes@ aqebics_internal_libs = @aqebics_internal_libs@ aqebics_ldflags = @aqebics_ldflags@ aqebics_libs = @aqebics_libs@ aqfints_datadir = @aqfints_datadir@ aqhbci_datadir = @aqhbci_datadir@ aqhbci_includes = @aqhbci_includes@ aqhbci_internal_libs = @aqhbci_internal_libs@ aqhbci_ldflags = @aqhbci_ldflags@ aqhbci_libs = @aqhbci_libs@ aqofxconnect_includes = @aqofxconnect_includes@ aqofxconnect_internal_libs = @aqofxconnect_internal_libs@ aqofxconnect_libs = @aqofxconnect_libs@ aqpaypal_includes = @aqpaypal_includes@ aqpaypal_internal_libs = @aqpaypal_internal_libs@ aqpaypal_libs = @aqpaypal_libs@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gmp_libs = @gmp_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_dir = @gwenhywfar_dir@ gwenhywfar_has_crypt = @gwenhywfar_has_crypt@ gwenhywfar_headers = @gwenhywfar_headers@ gwenhywfar_includes = @gwenhywfar_includes@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_plugins = @gwenhywfar_plugins@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ typemaker2_exe = @typemaker2_exe@ visibility_cflags = @visibility_cflags@ with_aqebics = @with_aqebics@ with_aqhbci = @with_aqhbci@ DIST_SUBDIRS = msglayer joblayer ajobs admjobs applayer banking tan dialogs control SUBDIRS = msglayer joblayer ajobs admjobs applayer banking tan dialogs control AM_CFLAGS = -DBUILDING_AQBANKING @visibility_cflags@ EXTRA_DIST = aqhbci.xml.in header.xml.in AM_CPPFLAGS = -I$(top_srcdir)/src/libs -I$(top_builddir)/src/libs $(gwenhywfar_includes) \ -I$(srcdir)/../ \ -I$(srcdir)/joblayer BUILT_SOURCES = version.h CLEANFILES = $(BUILT_SOURCES) hbci.xml plugindir = $(aqbanking_plugindir)/providers plugin_DATA = aqhbci.xml #iheaderdir=@aqbanking_headerdir_am@/aqhbci #iheader_HEADERS= noinst_HEADERS = \ aqhbci.h \ aqhbci_l.h xmldatadir = $(aqbanking_pkgdatadir)/backends/aqhbci xmldata_DATA = hbci.xml # AqHBCI plugin library noinst_LTLIBRARIES = libaqhbci.la libaqhbci_la_SOURCES = aqhbci.c libaqhbci_la_LIBADD = \ msglayer/libhbcimsg.la \ joblayer/libhbcijob.la \ ajobs/libhbciaccjobs.la \ admjobs/libhbciadmjobs.la \ applayer/libhbciapp.la \ banking/libhbcibanking.la \ control/libhbcicontrol.la \ dialogs/libaqhbci_dlgs.la \ tan/libhbcitan.la all: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libs/plugins/backends/aqhbci/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libs/plugins/backends/aqhbci/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): aqhbci.xml: $(top_builddir)/config.status $(srcdir)/aqhbci.xml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ header.xml: $(top_builddir)/config.status $(srcdir)/header.xml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ version.h: $(top_builddir)/config.status $(srcdir)/version.h.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libaqhbci.la: $(libaqhbci_la_OBJECTS) $(libaqhbci_la_DEPENDENCIES) $(EXTRA_libaqhbci_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libaqhbci_la_OBJECTS) $(libaqhbci_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aqhbci.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-pluginDATA: $(plugin_DATA) @$(NORMAL_INSTALL) @list='$(plugin_DATA)'; test -n "$(plugindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(plugindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(plugindir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(plugindir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(plugindir)" || exit $$?; \ done uninstall-pluginDATA: @$(NORMAL_UNINSTALL) @list='$(plugin_DATA)'; test -n "$(plugindir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(plugindir)'; $(am__uninstall_files_from_dir) install-xmldataDATA: $(xmldata_DATA) @$(NORMAL_INSTALL) @list='$(xmldata_DATA)'; test -n "$(xmldatadir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(xmldatadir)'"; \ $(MKDIR_P) "$(DESTDIR)$(xmldatadir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(xmldatadir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(xmldatadir)" || exit $$?; \ done uninstall-xmldataDATA: @$(NORMAL_UNINSTALL) @list='$(xmldata_DATA)'; test -n "$(xmldatadir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(xmldatadir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-recursive all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(plugindir)" "$(DESTDIR)$(xmldatadir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-recursive install-exec: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) clean: clean-recursive clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-recursive -rm -f ./$(DEPDIR)/aqhbci.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-pluginDATA install-xmldataDATA install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f ./$(DEPDIR)/aqhbci.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-pluginDATA uninstall-xmldataDATA .MAKE: $(am__recursive_targets) all check install install-am \ install-exec install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ am--depfiles check check-am clean clean-generic clean-libtool \ clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-pluginDATA install-ps \ install-ps-am install-strip install-xmldataDATA installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am uninstall-pluginDATA \ uninstall-xmldataDATA .PRECIOUS: Makefile hbci.xml: header.xml applayer/xml/base.xml ajobs/accountjobs.xml admjobs/adminjobs.xml $(XMLMERGE) --compact --header -v header.xml applayer/xml/base.xml ajobs/accountjobs.xml admjobs/adminjobs.xml -o $@ sources: for f in $(libaqhbci_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for f in $(plugin_DATA); do \ echo $(subdir)/$$f >>$(top_srcdir)/pdsources; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d sources; \ done built_sources: $(BUILT_SOURCES) cppcheck: for f in $(libaqhbci_la_SOURCES); do \ cppcheck --force $$f ; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done typefiles: for d in $(SUBDIRS); do \ $(MAKE) -C $$d typefiles; \ done typedefs: for d in $(SUBDIRS); do \ $(MAKE) -C $$d typedefs; \ done # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/aqhbci.xml.in0000664000175000017500000000044514214726437021177 00000000000000 @AQBANKING_VERSION_STRING@ Martin Preuss(martin@libchipcard.de) HBCI backend using AqHBCI This backend provides support for HBCI using AqHBCI. aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/header.xml.in0000664000175000017500000000013714043610745021170 00000000000000 Martin Preuss @DATETIME@ aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/aqhbci.h0000664000175000017500000000373414043610745020217 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AQHBCI_AQHBCI_H #define AQHBCI_AQHBCI_H #include /* ___________________________________________________________________________*/ #if 0 #ifdef BUILDING_AQHBCI # /* building AqHBCI */ # if AQBANKING_SYS_IS_WINDOWS # /* for windows */ # ifdef __declspec # define AQHBCI_API __declspec (dllexport) # else /* if __declspec */ # define AQHBCI_API # endif /* if NOT __declspec */ # else # /* for non-win32 */ # ifdef GCC_WITH_VISIBILITY_ATTRIBUTE # define AQHBCI_API __attribute__((visibility("default"))) # else # define AQHBCI_API # endif # endif #else # /* not building AqHBCI */ # if AQBANKING_SYS_IS_WINDOWS # /* for windows */ # ifdef __declspec # define AQHBCI_API __declspec (dllimport) # else /* if __declspec */ # define AQHBCI_API # endif /* if NOT __declspec */ # else # /* for non-win32 */ # define AQHBCI_API # endif #endif #endif /* ___________________________________________________________________________*/ /* no longer export symbols */ #define AQHBCI_API #define AH_PROVIDER_NAME "AQHBCI" #define AQHBCI_LOGDOMAIN "aqhbci" typedef enum { AH_CryptMode_Unknown=-1, /** No type. */ AH_CryptMode_None=0, /** DES-DES-Verfahren */ AH_CryptMode_Ddv, /** PIN/TAN mode */ AH_CryptMode_Pintan, /** RSA-DES-Hybridverfahren */ AH_CryptMode_Rdh, /** RSA-Verfahren */ AH_CryptMode_Rah } AH_CRYPT_MODE; AQHBCI_API AH_CRYPT_MODE AH_CryptMode_fromString(const char *s); AQHBCI_API const char *AH_CryptMode_toString(AH_CRYPT_MODE v); #endif /* AQHBCI_AQHBCI_H */ aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/version.h.in0000664000175000017500000000166514043610745021063 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Mon Mar 01 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AQHBCI_VERSION_H #define AQHBCI_VERSION_H #define AQHBCI_VERSION_MAJOR @AQHBCI_VERSION_MAJOR@ #define AQHBCI_VERSION_MINOR @AQHBCI_VERSION_MINOR@ #define AQHBCI_VERSION_PATCHLEVEL @AQHBCI_VERSION_PATCHLEVEL@ #define AQHBCI_VERSION_BUILD @AQHBCI_VERSION_BUILD@ #define AQHBCI_VERSION_TAG "@AQHBCI_VERSION_TAG@" #define AQHBCI_VERSION_FULL_STRING "@AQHBCI_VERSION_FULL_STRING@" #define AQHBCI_VERSION_STRING "@AQHBCI_VERSION_STRING@" #endif /* AQHBCI_VERSION_H */ aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/msglayer/0000755000175000017500000000000015037736162020517 500000000000000aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/msglayer/msgcrypt_pintan_verify.c0000664000175000017500000000411714546575650025424 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "aqhbci/msglayer/msgcrypt_pintan_verify.h" #include "aqhbci/msglayer/msgcrypt.h" #include "aqhbci/banking/user_l.h" #include "message_p.h" #include "aqbanking/i18n_l.h" #include "aqbanking/banking_be.h" /* ------------------------------------------------------------------------------------------------ * forward declarations * ------------------------------------------------------------------------------------------------ */ static int _verifyAllSignatures(AH_MSG *hmsg, GWEN_DB_NODE *dbParsedMsg, GWEN_LIST *sigheads, GWEN_LIST *sigtails, unsigned int signedDataBeginPos, unsigned int signedDataLength); /* ------------------------------------------------------------------------------------------------ * implementations * ------------------------------------------------------------------------------------------------ */ int AH_Msg_VerifyPinTan(AH_MSG *hmsg, GWEN_DB_NODE *dbParsedMsg) { int rv; rv=AH_Msg_VerifyWithCallback(hmsg, dbParsedMsg, _verifyAllSignatures); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } return 0; } int _verifyAllSignatures(AH_MSG *hmsg, GWEN_DB_NODE *dbParsedMsg, GWEN_LIST *sigheads, GWEN_LIST *sigtails, unsigned int signedDataBeginPos, unsigned int signedDataLength) { /* in PINTAN mode there is no crypto stuff on the HBCI layer */ return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/msglayer/msgcrypt_rxh_encrypt.h0000664000175000017500000000107414463251767025116 00000000000000/*************************************************************************** begin : Tue Nov 25 2008 copyright : (C) 2023 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_MSGCRYPT_RXH_ENCRYPT_H #define AH_MSGCRYPT_RXH_ENCRYPT_H #include "message_l.h" int AH_Msg_EncryptRxh(AH_MSG *hmsg); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/msglayer/Makefile.in0000644000175000017500000006577515037736025022526 00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/libs/plugins/backends/aqhbci/msglayer ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/distri.m4 $(top_srcdir)/m4/gwenhywfar.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/os.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libhbcimsg_la_LIBADD = am_libhbcimsg_la_OBJECTS = bpd.lo dialog.lo hbci.lo hbci-updates.lo \ message.lo msgcrypt_rxh_common.lo msgcrypt_rxh_encrypt.lo \ msgcrypt_rxh_decrypt.lo msgcrypt_rxh_verify.lo \ msgcrypt_pintan.lo msgcrypt_pintan_verify.lo \ msgcrypt_pintan_sign.lo msgcrypt_pintan_encrypt.lo \ msgengine.lo libhbcimsg_la_OBJECTS = $(am_libhbcimsg_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/bpd.Plo ./$(DEPDIR)/dialog.Plo \ ./$(DEPDIR)/hbci-updates.Plo ./$(DEPDIR)/hbci.Plo \ ./$(DEPDIR)/message.Plo ./$(DEPDIR)/msgcrypt_pintan.Plo \ ./$(DEPDIR)/msgcrypt_pintan_encrypt.Plo \ ./$(DEPDIR)/msgcrypt_pintan_sign.Plo \ ./$(DEPDIR)/msgcrypt_pintan_verify.Plo \ ./$(DEPDIR)/msgcrypt_rxh_common.Plo \ ./$(DEPDIR)/msgcrypt_rxh_decrypt.Plo \ ./$(DEPDIR)/msgcrypt_rxh_encrypt.Plo \ ./$(DEPDIR)/msgcrypt_rxh_verify.Plo ./$(DEPDIR)/msgengine.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libhbcimsg_la_SOURCES) DIST_SOURCES = $(libhbcimsg_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac HEADERS = $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADD_ACLOCAL_FLAGS = @ADD_ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AQBANKING_CLI_VERSION_STRING = @AQBANKING_CLI_VERSION_STRING@ AQBANKING_FINTS_VERSION_STRING = @AQBANKING_FINTS_VERSION_STRING@ AQBANKING_SO_AGE = @AQBANKING_SO_AGE@ AQBANKING_SO_CURRENT = @AQBANKING_SO_CURRENT@ AQBANKING_SO_EFFECTIVE = @AQBANKING_SO_EFFECTIVE@ AQBANKING_SO_REVISION = @AQBANKING_SO_REVISION@ AQBANKING_VERSION_BUILD = @AQBANKING_VERSION_BUILD@ AQBANKING_VERSION_FULL_STRING = @AQBANKING_VERSION_FULL_STRING@ AQBANKING_VERSION_MAJOR = @AQBANKING_VERSION_MAJOR@ AQBANKING_VERSION_MINOR = @AQBANKING_VERSION_MINOR@ AQBANKING_VERSION_PATCHLEVEL = @AQBANKING_VERSION_PATCHLEVEL@ AQBANKING_VERSION_RELEASE_STRING = @AQBANKING_VERSION_RELEASE_STRING@ AQBANKING_VERSION_STRING = @AQBANKING_VERSION_STRING@ AQBANKING_VERSION_TAG = @AQBANKING_VERSION_TAG@ AQEBICS_CFLAGS = @AQEBICS_CFLAGS@ AQEBICS_LIBS = @AQEBICS_LIBS@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATETIME = @DATETIME@ DEFS = @DEFS@ \ -DAH_XMLDATADIR=\"$(aqbanking_data_searchdir)/aqbanking/backends/aqhbci\" DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_EXCLUDE_PATTERNS = @DOXYGEN_EXCLUDE_PATTERNS@ DOXYGEN_FILE_PATTERNS = @DOXYGEN_FILE_PATTERNS@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENGUI_GTK2_CFLAGS = @GWENGUI_GTK2_CFLAGS@ GWENGUI_GTK2_LIBS = @GWENGUI_GTK2_LIBS@ GWENHYWFAR_MINIMUM_VERSION = @GWENHYWFAR_MINIMUM_VERSION@ HAVE_GWENGUI_GTK2 = @HAVE_GWENGUI_GTK2@ HAVE_I18N = @HAVE_I18N@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIBXSLT_CFLAGS = @LIBXSLT_CFLAGS@ LIBXSLT_LIBS = @LIBXSLT_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_SUPPORTS_QT = @MSGFMT_SUPPORTS_QT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ TUTORIALS = @TUTORIALS@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XMLMERGE = @XMLMERGE@ XMLSEC_CFLAGS = @XMLSEC_CFLAGS@ XMLSEC_LIBS = @XMLSEC_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ aqbanking_backends = @aqbanking_backends@ aqbanking_cfg_searchdir = @aqbanking_cfg_searchdir@ aqbanking_data_searchdir = @aqbanking_data_searchdir@ aqbanking_headerdir = @aqbanking_headerdir@ aqbanking_headerdir_am = @aqbanking_headerdir_am@ aqbanking_includes = @aqbanking_includes@ aqbanking_internal_libs = @aqbanking_internal_libs@ aqbanking_ldflags = @aqbanking_ldflags@ aqbanking_libs = @aqbanking_libs@ aqbanking_locale_searchdir = @aqbanking_locale_searchdir@ aqbanking_modules = @aqbanking_modules@ aqbanking_pkgdatadir = @aqbanking_pkgdatadir@ aqbanking_plugin_searchdir = @aqbanking_plugin_searchdir@ aqbanking_plugindir = @aqbanking_plugindir@ aqbanking_plugins_backends_dirs = @aqbanking_plugins_backends_dirs@ aqbanking_plugins_backends_libs = @aqbanking_plugins_backends_libs@ aqbanking_plugins_bankinfo_dirs = @aqbanking_plugins_bankinfo_dirs@ aqbanking_plugins_bankinfo_libs = @aqbanking_plugins_bankinfo_libs@ aqbanking_plugins_imexporters_dirs = @aqbanking_plugins_imexporters_dirs@ aqbanking_plugins_imexporters_libs = @aqbanking_plugins_imexporters_libs@ aqbanking_plugins_parsers_dirs = @aqbanking_plugins_parsers_dirs@ aqbanking_symlinkdir = @aqbanking_symlinkdir@ aqbanking_sys_is_windows = @aqbanking_sys_is_windows@ aqbankingpp_modules = @aqbankingpp_modules@ aqebics_datadir = @aqebics_datadir@ aqebics_includes = @aqebics_includes@ aqebics_internal_libs = @aqebics_internal_libs@ aqebics_ldflags = @aqebics_ldflags@ aqebics_libs = @aqebics_libs@ aqfints_datadir = @aqfints_datadir@ aqhbci_datadir = @aqhbci_datadir@ aqhbci_includes = @aqhbci_includes@ aqhbci_internal_libs = @aqhbci_internal_libs@ aqhbci_ldflags = @aqhbci_ldflags@ aqhbci_libs = @aqhbci_libs@ aqofxconnect_includes = @aqofxconnect_includes@ aqofxconnect_internal_libs = @aqofxconnect_internal_libs@ aqofxconnect_libs = @aqofxconnect_libs@ aqpaypal_includes = @aqpaypal_includes@ aqpaypal_internal_libs = @aqpaypal_internal_libs@ aqpaypal_libs = @aqpaypal_libs@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gmp_libs = @gmp_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_dir = @gwenhywfar_dir@ gwenhywfar_has_crypt = @gwenhywfar_has_crypt@ gwenhywfar_headers = @gwenhywfar_headers@ gwenhywfar_includes = @gwenhywfar_includes@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_plugins = @gwenhywfar_plugins@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ typemaker2_exe = @typemaker2_exe@ visibility_cflags = @visibility_cflags@ with_aqebics = @with_aqebics@ with_aqhbci = @with_aqhbci@ AM_CFLAGS = -DBUILDING_AQBANKING @visibility_cflags@ AM_CPPFLAGS = -I$(top_srcdir)/src/libs -I$(top_builddir)/src/libs $(gwenhywfar_includes) \ -I$(srcdir)/../.. \ -I$(srcdir)/.. -I$(srcdir)/../banking \ -I$(srcdir)/../applayer \ -I$(srcdir)/../joblayer \ -I$(srcdir)/../tan \ -I$(aqbanking_symlinkdir) $(all_includes) \ -I$(top_srcdir)/src/libs/aqbanking EXTRA_DIST = \ msgcrypt.c \ msgcrypt_ddv.c \ dialog_hbci.c \ dialog_https.c noinst_LTLIBRARIES = libhbcimsg.la noinst_HEADERS = \ bpd_l.h \ bpd_p.h \ dialog_l.h \ dialog_p.h \ hbci_l.h \ hbci_p.h \ hbci-updates_l.h \ hbci-updates_p.h \ message_l.h \ message_p.h \ msgcrypt.h \ msgcrypt_rxh_common.h \ msgcrypt_rxh_encrypt.h \ msgcrypt_rxh_decrypt.h \ msgcrypt_rxh_verify.h \ msgcrypt_pintan.h \ msgcrypt_pintan_verify.h \ msgcrypt_pintan_sign.h \ msgcrypt_pintan_encrypt.h \ msgengine_l.h \ msgengine_p.h \ msgengine.h #iheaderdir=@aqbanking_headerdir_am@/aqhbci #iheader_HEADERS= libhbcimsg_la_SOURCES = \ bpd.c \ dialog.c \ hbci.c \ hbci-updates.c \ message.c \ msgcrypt_rxh_common.c \ msgcrypt_rxh_encrypt.c \ msgcrypt_rxh_decrypt.c \ msgcrypt_rxh_verify.c \ msgcrypt_pintan.c \ msgcrypt_pintan_verify.c \ msgcrypt_pintan_sign.c \ msgcrypt_pintan_encrypt.c \ msgengine.c all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libs/plugins/backends/aqhbci/msglayer/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libs/plugins/backends/aqhbci/msglayer/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libhbcimsg.la: $(libhbcimsg_la_OBJECTS) $(libhbcimsg_la_DEPENDENCIES) $(EXTRA_libhbcimsg_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libhbcimsg_la_OBJECTS) $(libhbcimsg_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bpd.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dialog.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hbci-updates.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hbci.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/message.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/msgcrypt_pintan.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/msgcrypt_pintan_encrypt.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/msgcrypt_pintan_sign.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/msgcrypt_pintan_verify.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/msgcrypt_rxh_common.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/msgcrypt_rxh_decrypt.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/msgcrypt_rxh_encrypt.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/msgcrypt_rxh_verify.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/msgengine.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/bpd.Plo -rm -f ./$(DEPDIR)/dialog.Plo -rm -f ./$(DEPDIR)/hbci-updates.Plo -rm -f ./$(DEPDIR)/hbci.Plo -rm -f ./$(DEPDIR)/message.Plo -rm -f ./$(DEPDIR)/msgcrypt_pintan.Plo -rm -f ./$(DEPDIR)/msgcrypt_pintan_encrypt.Plo -rm -f ./$(DEPDIR)/msgcrypt_pintan_sign.Plo -rm -f ./$(DEPDIR)/msgcrypt_pintan_verify.Plo -rm -f ./$(DEPDIR)/msgcrypt_rxh_common.Plo -rm -f ./$(DEPDIR)/msgcrypt_rxh_decrypt.Plo -rm -f ./$(DEPDIR)/msgcrypt_rxh_encrypt.Plo -rm -f ./$(DEPDIR)/msgcrypt_rxh_verify.Plo -rm -f ./$(DEPDIR)/msgengine.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/bpd.Plo -rm -f ./$(DEPDIR)/dialog.Plo -rm -f ./$(DEPDIR)/hbci-updates.Plo -rm -f ./$(DEPDIR)/hbci.Plo -rm -f ./$(DEPDIR)/message.Plo -rm -f ./$(DEPDIR)/msgcrypt_pintan.Plo -rm -f ./$(DEPDIR)/msgcrypt_pintan_encrypt.Plo -rm -f ./$(DEPDIR)/msgcrypt_pintan_sign.Plo -rm -f ./$(DEPDIR)/msgcrypt_pintan_verify.Plo -rm -f ./$(DEPDIR)/msgcrypt_rxh_common.Plo -rm -f ./$(DEPDIR)/msgcrypt_rxh_decrypt.Plo -rm -f ./$(DEPDIR)/msgcrypt_rxh_encrypt.Plo -rm -f ./$(DEPDIR)/msgcrypt_rxh_verify.Plo -rm -f ./$(DEPDIR)/msgengine.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-generic clean-libtool clean-noinstLTLIBRARIES \ cscopelist-am ctags ctags-am distclean distclean-compile \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am .PRECIOUS: Makefile sources: for f in $(libhbcimsg_la_SOURCES) $(EXTRA_DIST); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d sources; \ done typedefs: for d in $(SUBDIRS); do \ $(MAKE) -C $$d typedefs; \ done typefiles: $(typefiles) typemaker -d AQHBCI_API $(typefiles) cppcheck: for f in $(libhbcimsg_la_SOURCES); do \ cppcheck --force $$f ; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/msglayer/msgcrypt_rxh_decrypt.h0000664000175000017500000000111614463251767025101 00000000000000/*************************************************************************** begin : Tue Nov 25 2008 copyright : (C) 2020 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_MSGCRYPT_RXH_DECRYPT_H #define AH_MSGCRYPT_RXH_DECRYPT_H #include "message_l.h" int AH_Msg_DecryptRxh(AH_MSG *hmsg, GWEN_DB_NODE *gr); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/msglayer/dialog_p.h0000664000175000017500000000346314043610745022370 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWHBCI_DIALOG_P_H #define GWHBCI_DIALOG_P_H #include "dialog_l.h" #include #include struct AH_DIALOG { uint32_t lastMsgNum; uint32_t lastReceivedMsgNum; char *dialogId; AB_PROVIDER *provider; AB_USER *dialogOwner; GWEN_MSGENGINE *msgEngine; GWEN_SYNCIO *ioLayer; GWEN_HTTP_SESSION *httpSession; uint32_t flags; uint32_t usage; GWEN_DB_NODE *globalValues; char *logName; uint32_t itanMethod; int itanProcessType; int tanJobVersion; AH_TAN_METHOD *tanMethodDescription; }; static int AH_Dialog_SendPacket(AH_DIALOG *dlg, const char *buf, int blen); static int AH_Dialog_CreateIoLayer_Hbci(AH_DIALOG *dlg); static int AH_Dialog_Connect_Hbci(AH_DIALOG *dlg); static int AH_Dialog_Disconnect_Hbci(AH_DIALOG *dlg); static int AH_Dialog_SendPacket_Hbci(AH_DIALOG *dlg, const char *buf, int blen); static int AH_Dialog_RecvMessage_Hbci(AH_DIALOG *dlg, AH_MSG **pMsg); static int AH_Dialog_CreateIoLayer_Https(AH_DIALOG *dlg); static int AH_Dialog_Connect_Https(AH_DIALOG *dlg); static int AH_Dialog_Disconnect_Https(AH_DIALOG *dlg); static int AH_Dialog_SendPacket_Https(AH_DIALOG *dlg, const char *buf, int blen); static int AH_Dialog_RecvMessage_Https(AH_DIALOG *dlg, AH_MSG **pMsg); #endif /* GWHBCI_DIALOG_P_H */ aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/msglayer/msgcrypt_rxh_verify.c0000664000175000017500000004762614576127360024742 00000000000000/*************************************************************************** begin : Tue Nov 25 2008 copyright : (C) 2023 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "msgcrypt_rxh_verify.h" #include "msgcrypt_rxh_common.h" #include "msgcrypt.h" #include "message_p.h" #include "aqhbci/aqhbci_l.h" #include "aqhbci/banking/user_l.h" #include #include #include #include #include #include #include /* ------------------------------------------------------------------------------------------------ * forward declarations * ------------------------------------------------------------------------------------------------ */ static int _genHashForSigHeadAndSignedData(AH_MSG *hmsg, unsigned int signedDataPos, unsigned int signedDataLength, AH_HASH_ALG hashAlg, GWEN_DB_NODE *sighead, GWEN_DB_NODE *sigtail, uint8_t *destHashBuffer32Bytes); static GWEN_MDIGEST *_getDigestorForAlgo(AH_HASH_ALG hashAlg); static int _digestSigHeadAndData(GWEN_MDIGEST *md, const uint8_t *sigHeadPtr, uint32_t sigHeadLen, const uint8_t *signedDataPtr, uint32_t signedDataLength, uint8_t *destHashBuffer32Bytes); static int _verifyAllSignatures(AH_MSG *hmsg, GWEN_DB_NODE *dbParsedMsg, GWEN_LIST *sigheads, GWEN_LIST *sigtails, unsigned int signedDataBeginPos, unsigned int signedDataLength); static void _addSignerAccordingToVerifyResult(AH_MSG *hmsg, AB_USER *u, const char *signerId, int rv); static int _verifySignatureAgainstHash(GWEN_CRYPT_KEY *k, AH_OPMODE opMode, const uint8_t *pInData, uint32_t inLen, const uint8_t *pSignatureData, uint32_t signatureLen); static int _verifyInternal(GWEN_CRYPT_KEY *k, GWEN_CRYPT_PADDALGO *a, const uint8_t *pInData, uint32_t inLen, const uint8_t *pSignatureData, uint32_t signatureLen); static GWEN_CRYPT_KEY *_verifyInitialSignKey(GWEN_CRYPT_TOKEN *ct, const GWEN_CRYPT_TOKEN_CONTEXT *ctx, AB_USER *user, GWEN_DB_NODE *dbParsedMsg); static GWEN_CRYPT_KEY *_getBankPubSignKey(AH_MSG *hmsg, GWEN_DB_NODE *dbParsedMsg); /* ------------------------------------------------------------------------------------------------ * implementations * ------------------------------------------------------------------------------------------------ */ int AH_Msg_VerifyRxh(AH_MSG *hmsg, GWEN_DB_NODE *dbParsedMsg) { int rv; rv=AH_Msg_VerifyWithCallback(hmsg, dbParsedMsg, _verifyAllSignatures); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } return 0; } int _verifyAllSignatures(AH_MSG *hmsg, GWEN_DB_NODE *dbParsedMsg, GWEN_LIST *sigheads, GWEN_LIST *sigtails, unsigned int signedDataBeginPos, unsigned int signedDataLength) { int i; AB_USER *u; GWEN_CRYPT_KEY *bankPubSignKey; const RXH_PARAMETER *rParams; int signatureCount; u=AH_Dialog_GetDialogOwner(hmsg->dialog); rParams=AH_MsgRxh_GetParameters(AH_User_GetCryptMode(u), AH_User_GetRdhType(u)); if (rParams==NULL) { DBG_INFO(AQHBCI_LOGDOMAIN, "No matching RxH parameters"); return GWEN_ERROR_GENERIC; } bankPubSignKey=_getBankPubSignKey(hmsg, dbParsedMsg); if (bankPubSignKey==NULL) { DBG_INFO(AQHBCI_LOGDOMAIN, "here"); return GWEN_ERROR_GENERIC; } signatureCount=GWEN_List_GetSize(sigtails); for (i=0; ihashAlgS, sighead, sigtail, hash); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } hashLen=rv; /* verify signature */ p=GWEN_DB_GetBinValue(sigtail, "signature", 0, 0, 0, &l); if (p && l) { rv=_verifySignatureAgainstHash(bankPubSignKey, rParams->opmodSignS, hash, hashLen, p, l); _addSignerAccordingToVerifyResult(hmsg, u, signerId, rv); } else { DBG_DEBUG(AQHBCI_LOGDOMAIN, "No signature"); return GWEN_ERROR_BAD_DATA; } DBG_DEBUG(AQHBCI_LOGDOMAIN, "Verification done"); } /* for */ return 0; } void _addSignerAccordingToVerifyResult(AH_MSG *hmsg, AB_USER *u, const char *signerId, int rv) { if (rv) { if (rv==GWEN_ERROR_NO_KEY) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Unable to verify signature of user \"%s\" (no key)", signerId); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("Unable to verify signature (no key)")); } else { GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 32, 0, 1); if (rv==GWEN_ERROR_VERIFY) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Invalid signature of user \"%s\"", signerId); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("Invalid signature!!!")); GWEN_Buffer_AppendString(tbuf, "!"); } else { GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("Could not verify signature")); DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not verify data with medium of user \"%s\" (%d)", AB_User_GetUserId(u), rv); GWEN_Buffer_AppendString(tbuf, "?"); } GWEN_Buffer_AppendString(tbuf, signerId); AH_Msg_AddSignerId(hmsg, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } } else { DBG_INFO(AQHBCI_LOGDOMAIN, "Message signed by \"%s\"", signerId); AH_Msg_AddSignerId(hmsg, signerId); } } int _genHashForSigHeadAndSignedData(AH_MSG *hmsg, unsigned int signedDataPos, unsigned int signedDataLength, AH_HASH_ALG hashAlg, GWEN_DB_NODE *sighead, GWEN_DB_NODE *sigtail, uint8_t *destHashBuffer32Bytes) { GWEN_MDIGEST *md; const uint8_t *signedDataPtr; const uint8_t *sigHeadPtr; uint32_t sigHeadLen; int rv; int hashLen; /* hash sighead + data */ sigHeadPtr=(const uint8_t *)GWEN_Buffer_GetStart(hmsg->buffer); signedDataPtr=sigHeadPtr+signedDataPos; sigHeadPtr+=GWEN_DB_GetIntValue(sighead, "segment/pos", 0, 0); sigHeadLen=GWEN_DB_GetIntValue(sighead, "segment/length", 0, 0); md=_getDigestorForAlgo(hashAlg); if (md==NULL) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Invalid hash algo %d", hashAlg); return GWEN_ERROR_INVALID; } /* first round */ rv=_digestSigHeadAndData(md, sigHeadPtr, sigHeadLen, signedDataPtr, signedDataLength, destHashBuffer32Bytes); if (rv<0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Hash error (%d)", rv); GWEN_MDigest_free(md); return rv; } /* possible second round */ if (hashAlg==AH_HashAlg_Sha256Sha256) { uint8_t tempHashBuffer[32]; memmove(tempHashBuffer, destHashBuffer32Bytes, GWEN_MDigest_GetDigestSize(md)); rv=GWEN_MDigest_Digest(md, tempHashBuffer, GWEN_MDigest_GetDigestSize(md), destHashBuffer32Bytes, 32); if (rv<0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Hash error (%d)", rv); GWEN_MDigest_free(md); return rv; } } hashLen=GWEN_MDigest_GetDigestSize(md); GWEN_MDigest_free(md); return hashLen; } GWEN_MDIGEST *_getDigestorForAlgo(AH_HASH_ALG hashAlg) { switch (hashAlg) { case AH_HashAlg_Sha1: return GWEN_MDigest_Sha1_new(); case AH_HashAlg_Sha256: case AH_HashAlg_Sha256Sha256: return GWEN_MDigest_Sha256_new(); case AH_HashAlg_Ripmed160: return GWEN_MDigest_Rmd160_new(); default: return NULL; } } int _digestSigHeadAndData(GWEN_MDIGEST *md, const uint8_t *sigHeadPtr, uint32_t sigHeadLen, const uint8_t *signedDataPtr, uint32_t signedDataLength, uint8_t *destHashBuffer32Bytes) { int rv; /* first round */ rv=GWEN_MDigest_Begin(md); if (rv==0) /* digest signature head */ rv=GWEN_MDigest_Update(md, sigHeadPtr, sigHeadLen); if (rv==0) /* digest data */ rv=GWEN_MDigest_Update(md, signedDataPtr, signedDataLength); if (rv==0) rv=GWEN_MDigest_End(md); if (rv<0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Hash error (%d)", rv); GWEN_MDigest_free(md); return rv; } memmove(destHashBuffer32Bytes, GWEN_MDigest_GetDigestPtr(md), GWEN_MDigest_GetDigestSize(md)); return GWEN_MDigest_GetDigestSize(md); } int _verifySignatureAgainstHash(GWEN_CRYPT_KEY *k, AH_OPMODE opMode, const uint8_t *pInData, uint32_t inLen, const uint8_t *pSignatureData, uint32_t signatureLen) { GWEN_CRYPT_PADDALGO *algo; int rv; switch (opMode) { case AH_Opmode_Iso9796_1: algo=GWEN_Crypt_PaddAlgo_new(GWEN_Crypt_PaddAlgoId_Iso9796_1A4); GWEN_Crypt_PaddAlgo_SetPaddSize(algo, GWEN_Crypt_Key_GetKeySize(k)); break; case AH_Opmode_Iso9796_2: algo=GWEN_Crypt_PaddAlgo_new(GWEN_Crypt_PaddAlgoId_Iso9796_2); GWEN_Crypt_PaddAlgo_SetPaddSize(algo, GWEN_Crypt_Key_GetKeySize(k)); break; case AH_Opmode_Rsa_Pkcs1_v1_5: algo=GWEN_Crypt_PaddAlgo_new(GWEN_Crypt_PaddAlgoId_Pkcs1_2); GWEN_Crypt_PaddAlgo_SetPaddSize(algo, GWEN_Crypt_Key_GetKeySize(k)); break; case AH_Opmode_Rsa_Pss: algo=GWEN_Crypt_PaddAlgo_new(GWEN_Crypt_PaddAlgoId_Pkcs1_Pss_Sha256); GWEN_Crypt_PaddAlgo_SetPaddSize(algo, GWEN_Crypt_Key_GetKeySize(k)); break; default: return GWEN_ERROR_INTERNAL; } rv=_verifyInternal(k, algo, pInData, inLen, pSignatureData, signatureLen); GWEN_Crypt_PaddAlgo_free(algo); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } return rv; } int _verifyInternal(GWEN_CRYPT_KEY *k, GWEN_CRYPT_PADDALGO *a, const uint8_t *pInData, uint32_t inLen, const uint8_t *pSignatureData, uint32_t signatureLen) { int rv; GWEN_CRYPT_PADDALGOID aid; aid=GWEN_Crypt_PaddAlgo_GetId(a); if (aid==GWEN_Crypt_PaddAlgoId_Iso9796_2 || aid==GWEN_Crypt_PaddAlgoId_Pkcs1_2 || aid==GWEN_Crypt_PaddAlgoId_Pkcs1_Pss_Sha256) { GWEN_BUFFER *tbuf; uint32_t l; /* these algos add random numbers, we must use encrypt fn here and * compare the decrypted and unpadded data with the source data */ tbuf=GWEN_Buffer_new(0, signatureLen+16, 0, 0); l=GWEN_Buffer_GetMaxUnsegmentedWrite(tbuf); rv=GWEN_Crypt_Key_Encipher(k, pSignatureData, signatureLen, (uint8_t *)GWEN_Buffer_GetStart(tbuf), &l); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); return rv; } GWEN_Buffer_IncrementPos(tbuf, l); GWEN_Buffer_AdjustUsedBytes(tbuf); if (aid==GWEN_Crypt_PaddAlgoId_Pkcs1_Pss_Sha256) { int nbits; uint8_t *modPtr; /* nasty hack, do something better later */ uint8_t modBuffer[AH_MSGRXH_MAXKEYBUF]; uint32_t modLen; GWEN_MDIGEST *md; modPtr=&modBuffer[0]; modLen=AH_MSGRXH_MAXKEYBUF; /* calculate real number of bits */ rv=GWEN_Crypt_KeyRsa_GetModulus(k, modPtr, &modLen); nbits=modLen*8; while (modLen && *modPtr==0) { nbits-=8; modLen--; modPtr++; } if (modLen) { uint8_t b=*modPtr; int i; uint8_t mask=0x80; for (i=0; i<8; i++) { if (b & mask) break; nbits--; mask>>=1; } } if (nbits==0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Empty modulus"); GWEN_Buffer_free(tbuf); return GWEN_ERROR_GENERIC; } md=GWEN_MDigest_Sha256_new(); rv=GWEN_Padd_VerifyPkcs1Pss((const uint8_t *) GWEN_Buffer_GetStart(tbuf), GWEN_Buffer_GetUsedBytes(tbuf), nbits, pInData, inLen, inLen, md); GWEN_MDigest_free(md); if (rv<0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "here (%d)", rv); DBG_ERROR(AQHBCI_LOGDOMAIN, "Error verifying this data:"); GWEN_Buffer_Dump(tbuf, 2); GWEN_Buffer_free(tbuf); return rv; } } else { rv=GWEN_Padd_UnapplyPaddAlgo(a, tbuf); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); return rv; } l=GWEN_Buffer_GetUsedBytes(tbuf); if (l!=inLen) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Signature length doesn't match"); GWEN_Buffer_free(tbuf); return GWEN_ERROR_VERIFY; } if (memcmp(pInData, GWEN_Buffer_GetStart(tbuf), l)!=0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Signature doesn't match:"); GWEN_Buffer_free(tbuf); return GWEN_ERROR_VERIFY; } } GWEN_Buffer_free(tbuf); } else { GWEN_BUFFER *srcBuf; /* copy to a buffer for padding */ srcBuf=GWEN_Buffer_new(0, inLen, 0, 0); GWEN_Buffer_AppendBytes(srcBuf, (const char *)pInData, inLen); /* padd according to given algo */ rv=GWEN_Padd_ApplyPaddAlgo(a, srcBuf); if (rv) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(srcBuf); return rv; } /* verify with key */ rv=GWEN_Crypt_Key_Verify(k, (const uint8_t *)GWEN_Buffer_GetStart(srcBuf), GWEN_Buffer_GetUsedBytes(srcBuf), pSignatureData, signatureLen); GWEN_Buffer_free(srcBuf); if (rv) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } } return 0; } GWEN_CRYPT_KEY *_verifyInitialSignKey(GWEN_CRYPT_TOKEN *ct, const GWEN_CRYPT_TOKEN_CONTEXT *ctx, AB_USER *user, GWEN_DB_NODE *dbParsedMsg) { GWEN_DB_NODE *dbCurr; int verified; GWEN_CRYPT_KEY *bpk = NULL; /* search for "GetKeyResponse" */ dbCurr=GWEN_DB_GetFirstGroup(dbParsedMsg); while (dbCurr) { GWEN_DB_NODE *dbKeyResponse; const char *s; if (strcasecmp(GWEN_DB_GroupName(dbCurr), "GetKeyResponse")==0) { unsigned int bs; const uint8_t *p; dbKeyResponse=dbCurr; DBG_DEBUG(AQHBCI_LOGDOMAIN, "Got this key response:"); if (GWEN_Logger_GetLevel(AQHBCI_LOGDOMAIN)>=GWEN_LoggerLevel_Debug) GWEN_DB_Dump(dbKeyResponse, 2); p=GWEN_DB_GetBinValue(dbKeyResponse, "key/modulus", 0, 0, 0, &bs); if (!p || !bs) { DBG_ERROR(AQHBCI_LOGDOMAIN, "No modulus"); return NULL; } else { /* :TODO: if no key hash is on the card, check if a certificate was sent with the * key and verify that, if not, ask the user for the INI-Letter */ const uint8_t *exponent; unsigned int expLen; int msgKeyNum; int msgKeyVer; uint16_t sentModulusLength; int keySize; exponent=GWEN_DB_GetBinValue(dbKeyResponse, "key/exponent", 0, 0, 0, &expLen); sentModulusLength=bs; /* skip zero bytes if any */ while (bs && *p==0) { p++; bs--; } /* calculate key size in bytes */ if (bs<=96) keySize=96; else { keySize=bs; } s=GWEN_DB_GetCharValue(dbKeyResponse, "keyname/keytype", 0, "V"); msgKeyNum=GWEN_DB_GetIntValue(dbKeyResponse, "keyname/keynum", 0, 0); msgKeyVer=GWEN_DB_GetIntValue(dbKeyResponse, "keyname/keyversion", 0, 0); if (strcasecmp(s, "S")==0) { bpk=GWEN_Crypt_KeyRsa_fromModExp(keySize, p, bs, exponent, expLen); GWEN_Crypt_Key_SetKeyNumber(bpk, msgKeyNum); GWEN_Crypt_Key_SetKeyVersion(bpk, msgKeyVer); verified=AH_User_VerifyInitialKey(ct, ctx, user, bpk, sentModulusLength, "sign"); if (verified==1) { GWEN_Crypt_KeyRsa_AddFlags(bpk, GWEN_CRYPT_KEYRSA_FLAGS_ISVERIFIED); AH_User_SetBankPubSignKey(user, bpk); /* reload */ bpk=AH_User_GetBankPubSignKey(user); } else { return NULL; } } } } /* if we have one */ dbCurr=GWEN_DB_GetNextGroup(dbCurr); } /* while */ return bpk; } GWEN_CRYPT_KEY *_getBankPubSignKey(AH_MSG *hmsg, GWEN_DB_NODE *dbParsedMsg) { AB_USER *u; GWEN_CRYPT_TOKEN *ct; const GWEN_CRYPT_TOKEN_CONTEXT *ctx; GWEN_CRYPT_KEY *bankPubSignKey; u=AH_Dialog_GetDialogOwner(hmsg->dialog); ct=AH_MsgRxh_GetOpenCryptToken(hmsg); if (ct==NULL) { DBG_INFO(AQHBCI_LOGDOMAIN, "here"); return NULL; } ctx=GWEN_Crypt_Token_GetContext(ct, AH_User_GetTokenContextId(u), 0); if (ctx==NULL) { DBG_INFO(AQHBCI_LOGDOMAIN, "Context %d not found on crypt token [%s:%s]", AH_User_GetTokenContextId(u), GWEN_Crypt_Token_GetTypeName(ct), GWEN_Crypt_Token_GetTokenName(ct)); return NULL; } /* only now we need the verify key */ /* the public sign key is not on the RDH card, but exchanged in the * initial key exchange and resides in the user information */ bankPubSignKey=AH_User_GetBankPubSignKey(u); if (bankPubSignKey==NULL) { /* this may be the first message with the public keys from the bank server, * if its signed, the key is transmitted in the message and my be verified with * different methods ([HBCI] B.3.1.3, case A): * * the zka card contains the hash in EF_NOTEPAD * * a certificate is sent with the message to verify * * INI letter * * check message for "S"-KEy, look up if there is a hash on the chip card */ bankPubSignKey=_verifyInitialSignKey(ct, ctx, u, dbParsedMsg); if (bankPubSignKey==NULL) { DBG_INFO(AQHBCI_LOGDOMAIN, "No public bank sign key for user [%s]", AB_User_GetUserName(u)); return NULL; } } if (GWEN_Crypt_Key_GetKeySize(bankPubSignKey)>AH_MSGRXH_MAXKEYBUF) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Size of banks public crypt key too large (%d > %d)", GWEN_Crypt_Key_GetKeySize(bankPubSignKey), AH_MSGRXH_MAXKEYBUF); return NULL; } return bankPubSignKey; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/msglayer/bpd_p.h0000664000175000017500000000217514043610745021675 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Mon Mar 01 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_BPD_P_H #define AH_BPD_P_H #include "bpd_l.h" #define AH_BPD_MAXHBCIVERSIONS 16 #define AH_BPD_MAXLANGUAGES 16 struct AH_BPD { int bpdVersion; GWEN_DB_NODE *bpdJobs; char *bankName; char *bankAddr; int bankPort; AH_BPD_ADDR_TYPE addrType; int jobTypesPerMsg; int maxMsgSize; int hbciVersions[AH_BPD_MAXHBCIVERSIONS+1]; int languages[AH_BPD_MAXLANGUAGES+1]; int isDirty; AH_BPD_ADDR_LIST *addrList; }; struct AH_BPD_ADDR { GWEN_LIST_ELEMENT(AH_BPD_ADDR) AH_BPD_ADDR_TYPE type; char *addr; char *suffix; AH_BPD_FILTER_TYPE ftype; int fversion; }; #endif /* AH_BPD_P_H */ aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/msglayer/dialog_hbci.c0000664000175000017500000001207614043610745023031 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2004-2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ /* this file is included from dialog.c" */ int AH_Dialog_CreateIoLayer_Hbci(AH_DIALOG *dlg) { const GWEN_URL *url; GWEN_SYNCIO *sio; int rv; GWEN_BUFFER *tbuf; assert(dlg); /* take bank addr from user */ url=AH_User_GetServerUrl(dlg->dialogOwner); if (!url) { DBG_ERROR(AQHBCI_LOGDOMAIN, "User has no valid address settings"); return GWEN_ERROR_INVALID; } tbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Url_toString(url, tbuf); rv=GWEN_Gui_GetSyncIo(GWEN_Buffer_GetStart(tbuf), "hbci", 3000, &sio); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); return GWEN_ERROR_GENERIC; } GWEN_Buffer_free(tbuf); dlg->ioLayer=sio; return 0; } int AH_Dialog_Connect_Hbci(AH_DIALOG *dlg) { if (dlg->ioLayer==NULL) { int rv; GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Notice, I18N("Connecting to bank...")); rv=AH_Dialog_CreateIoLayer_Hbci(dlg); if (rv) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } do { rv=GWEN_SyncIo_Connect(dlg->ioLayer); } while (rv==GWEN_ERROR_INTERRUPTED); if (rv<0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not connect to bank (%d)", rv); GWEN_SyncIo_free(dlg->ioLayer); dlg->ioLayer=NULL; GWEN_Gui_ProgressLog2(0, GWEN_LoggerLevel_Error, I18N("Could not connect (%d)"), rv); return rv; } GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Notice, I18N("Connected.")); } return 0; } int AH_Dialog_Disconnect_Hbci(AH_DIALOG *dlg) { if (dlg->ioLayer) { int rv; GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Notice, I18N("Disconnecting from bank...")); do { rv=GWEN_SyncIo_Disconnect(dlg->ioLayer); } while (rv==GWEN_ERROR_INTERRUPTED); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Notice, I18N("Disconnected.")); GWEN_SyncIo_free(dlg->ioLayer); dlg->ioLayer=NULL; } return 0; } int AH_Dialog_SendPacket_Hbci(AH_DIALOG *dlg, const char *buf, int blen) { int rv; rv=GWEN_SyncIo_WriteForced(dlg->ioLayer, (const uint8_t *)buf, blen); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } return 0; } int AH_Dialog_RecvMessage_Hbci(AH_DIALOG *dlg, AH_MSG **pMsg) { AH_MSG *msg; GWEN_BUFFER *tbuf; int rv; char *p1; char *p2; char header[32]; int msgSize; assert(dlg->ioLayer); /* receive header */ rv=GWEN_SyncIo_ReadForced(dlg->ioLayer, (uint8_t *)header, sizeof(header)-1); if (rv<0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Error reading header (%d)", rv); return rv; } else if (rv!=sizeof(header)-1) { DBG_ERROR(AQHBCI_LOGDOMAIN, "EOF met"); return GWEN_ERROR_EOF; } header[rv]=0; /* check for beginning of HBCI message */ if (strncmp(header, "HNHBK:", 6)!=0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Message does not start with HNHBK"); return GWEN_ERROR_BAD_DATA; } /* seek to begin of size */ p1=strchr(header, '+'); if (p1==NULL) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Bad data (missing '+')"); return GWEN_ERROR_BAD_DATA; } p1++; /* seek to end of size */ p2=strchr(p1, '+'); if (p2==NULL) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Bad data (missing '+')"); GWEN_Text_DumpString(header, 21, 2); return GWEN_ERROR_BAD_DATA; } /* save received bytes */ tbuf=GWEN_Buffer_new(0, 512, 0, 1); GWEN_Buffer_AppendBytes(tbuf, header, rv); /* read message size */ *p2=0; if (1!=sscanf(p1, "%d", &msgSize)) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Bad size field [%s]", p1); GWEN_Buffer_free(tbuf); return GWEN_ERROR_BAD_DATA; } /* subtract bytes already received */ msgSize-=rv; /* make room for the rest of the message */ GWEN_Buffer_AllocRoom(tbuf, msgSize); /* receive rest of the message */ rv=GWEN_SyncIo_ReadForced(dlg->ioLayer, (uint8_t *)GWEN_Buffer_GetPosPointer(tbuf), msgSize); if (rv<0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Error reading message (%d)", rv); GWEN_Buffer_free(tbuf); return rv; } else if (rv!=msgSize) { DBG_ERROR(AQHBCI_LOGDOMAIN, "EOF met"); GWEN_Buffer_free(tbuf); return GWEN_ERROR_EOF; } /* advance pointer and counter in buffer */ GWEN_Buffer_IncrementPos(tbuf, msgSize); GWEN_Buffer_AdjustUsedBytes(tbuf); /* create message and assign the buffer */ msg=AH_Msg_new(dlg); AH_Msg_SetBuffer(msg, tbuf); /* done */ *pMsg=msg; return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/msglayer/hbci.c0000664000175000017500000003704314044534776021525 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2004-2011 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif /* #define AH_HBCI_HEAVY_DEBUG */ #ifdef OS_WIN32 # define AH_PATH_SEP "\\" #else # define AH_PATH_SEP "/" #endif #include "hbci_p.h" #include "aqhbci_l.h" #include "hbci-updates_l.h" #include #include #include #include #include #include #include #include #include #include /* We need a printf format specifier for "size_t" but * does not have one. So in this one single exception we define our * own, inspired from here: * https://stackoverflow.com/questions/44382862/how-to-printf-a-size-t-without-warning-in-mingw-w64-gcc-7-1 */ #ifdef _WIN32 # ifdef _WIN64 # define PRI_SIZET PRIu64 # else # define PRI_SIZET PRIu32 # endif #else # define PRI_SIZET "zd" #endif AH_HBCI *AH_HBCI_new(AB_PROVIDER *pro) { AH_HBCI *hbci; char numbuf[32]; int rv; assert(pro); GWEN_NEW_OBJECT(AH_HBCI, hbci); hbci->provider=pro; hbci->banking=AB_Provider_GetBanking(pro); rv=snprintf(numbuf, sizeof(numbuf), "%d.%d", AQBANKING_VERSION_MAJOR, AQBANKING_VERSION_MINOR); if (rv==-1 || rv>=sizeof(numbuf)) { DBG_ERROR(AQHBCI_LOGDOMAIN, "What ?? %" PRI_SIZET " bytes isn't enough space for two decimals ?!", sizeof(numbuf)); hbci->productVersion=strdup("0"); } else hbci->productVersion=strdup(numbuf); hbci->transferTimeout=AH_HBCI_DEFAULT_TRANSFER_TIMEOUT; hbci->connectTimeout=AH_HBCI_DEFAULT_CONNECT_TIMEOUT; return hbci; } void AH_HBCI_free(AH_HBCI *hbci) { if (hbci) { DBG_DEBUG(AQHBCI_LOGDOMAIN, "Destroying AH_HBCI"); GWEN_DB_Group_free(hbci->dbProviderConfig); free(hbci->productVersion); GWEN_XMLNode_free(hbci->defs); GWEN_FREE_OBJECT(hbci); GWEN_Logger_Close(AQHBCI_LOGDOMAIN); } } int AH_HBCI_Init(AH_HBCI *hbci, GWEN_DB_NODE *db) { GWEN_XMLNODE *node; assert(hbci); /* store config */ GWEN_DB_Group_free(hbci->dbProviderConfig); hbci->dbProviderConfig=GWEN_DB_Group_dup(db); /* load and update config data */ hbci->lastVersion=GWEN_DB_GetIntValue(db, "lastVersion", 0, 0); GWEN_PathManager_DefinePath(AH_PM_LIBNAME, AH_PM_XMLDATADIR); #if defined(OS_WIN32) || defined(ENABLE_LOCAL_INSTALL) GWEN_PathManager_AddPathFromWinReg(AH_PM_LIBNAME, AH_PM_LIBNAME, AH_PM_XMLDATADIR, AH_REGKEY_PATHS, AH_REGKEY_XMLDATADIR); GWEN_PathManager_AddRelPath(AH_PM_LIBNAME, AH_PM_LIBNAME, AH_PM_XMLDATADIR, AH_XMLDATADIR, GWEN_PathManager_RelModeExe); #else GWEN_PathManager_AddPath(AH_PM_LIBNAME, AH_PM_LIBNAME, AH_PM_XMLDATADIR, AH_XMLDATADIR); #endif /* Load XML files */ DBG_NOTICE(AQHBCI_LOGDOMAIN, "Loading XML files"); node=AH_HBCI_LoadDefaultXmlFiles(hbci); if (!node) { DBG_ERROR(AQHBCI_LOGDOMAIN, "AqHBCI: Error loading XML files."); return 0; } DBG_NOTICE(AQHBCI_LOGDOMAIN, "Adding XML descriptions"); if (AH_HBCI_AddDefinitions(hbci, node)) { DBG_ERROR(AQHBCI_LOGDOMAIN, "ERROR: Could not add XML definitions.\n"); GWEN_XMLNode_free(node); return 0; } GWEN_XMLNode_free(node); hbci->sharedRuntimeData=GWEN_DB_Group_new("sharedRuntimeData"); hbci->transferTimeout=GWEN_DB_GetIntValue(db, "transferTimeout", 0, AH_HBCI_DEFAULT_TRANSFER_TIMEOUT); hbci->connectTimeout=GWEN_DB_GetIntValue(db, "connectTimeout", 0, AH_HBCI_DEFAULT_CONNECT_TIMEOUT); return 0; } int AH_HBCI_Fini(AH_HBCI *hbci, GWEN_DB_NODE *db) { DBG_INFO(AQHBCI_LOGDOMAIN, "Deinitializing AH_HBCI"); assert(hbci); GWEN_DB_SetIntValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "transferTimeout", hbci->transferTimeout); GWEN_DB_SetIntValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "connectTimeout", hbci->connectTimeout); GWEN_PathManager_UndefinePath(AH_PM_LIBNAME, AH_PM_XMLDATADIR); GWEN_PathManager_RemovePaths(AH_PM_LIBNAME); GWEN_DB_Group_free(hbci->sharedRuntimeData); hbci->sharedRuntimeData=0; GWEN_XMLNode_free(hbci->defs); hbci->defs=0; return 0; } AB_BANKING *AH_HBCI_GetBankingApi(const AH_HBCI *hbci) { assert(hbci); return hbci->banking; } GWEN_DB_NODE *AH_HBCI_GetProviderDb(const AH_HBCI *hbci) { assert(hbci); return hbci->dbProviderConfig; } const char *AH_HBCI_GetProductName(const AH_HBCI *hbci) { const char *s; assert(hbci); s=AB_Banking_RuntimeConfig_GetCharValue(hbci->banking, "fintsRegistrationKey", NULL); if (s && *s) { int i; DBG_INFO(AQHBCI_LOGDOMAIN, "Using given FinTS registration key"); i=strlen(s); if (i>25) { DBG_ERROR(AQHBCI_LOGDOMAIN, "WARNING: The registration key is longer than allowed (maximum is 25, current size is %d), " "bank servers might abort the next connection with or without error message.", i); } return s; } else { DBG_ERROR(AQHBCI_LOGDOMAIN, "WARNING: Your application doesn't set the FinTS registration key, " "bank servers adhering to latest PSD2 guidelines will most likely reject the following connection."); return "AQHBCI"; } } const char *AH_HBCI_GetProductVersion(const AH_HBCI *hbci) { const char *s; assert(hbci); s=AB_Banking_RuntimeConfig_GetCharValue(hbci->banking, "fintsApplicationVersionString", hbci->productVersion); assert(s); if (s) { int i; i=strlen(s); if (i>5) { DBG_ERROR(AQHBCI_LOGDOMAIN, "WARNING: The version number \"%s\" is longer than allowed (maximum is 5, current size is %d), " "bank servers might abort the next connection with or without error message.", s, i); } } return s; } GWEN_XMLNODE *AH_HBCI_GetDefinitions(const AH_HBCI *hbci) { assert(hbci); return hbci->defs; } GWEN_XMLNODE *AH_HBCI_LoadDefaultXmlFiles(const AH_HBCI *hbci) { GWEN_STRINGLIST *paths; paths=GWEN_PathManager_GetPaths(AH_PM_LIBNAME, AH_PM_XMLDATADIR); if (paths) { GWEN_BUFFER *fbuf; int rv; fbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_Directory_FindFileInPaths(paths, "hbci.xml", fbuf); GWEN_StringList_free(paths); if (rv) { DBG_ERROR(AQHBCI_LOGDOMAIN, "XML data file not found (%d)", rv); GWEN_Buffer_free(fbuf); return NULL; } else { GWEN_XMLNODE *xmlNode; xmlNode=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "root"); rv=GWEN_XML_ReadFile(xmlNode, GWEN_Buffer_GetStart(fbuf), GWEN_XML_FLAGS_DEFAULT | GWEN_XML_FLAGS_HANDLE_HEADERS); if (rv) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not load XML file [%s]: %d.\n", GWEN_Buffer_GetStart(fbuf), rv); GWEN_XMLNode_free(xmlNode); GWEN_Buffer_free(fbuf); return NULL; } GWEN_Buffer_free(fbuf); return xmlNode; } } else { DBG_ERROR(AQHBCI_LOGDOMAIN, "No data files found."); return NULL; } } int AH_HBCI_AddDefinitions(AH_HBCI *hbci, GWEN_XMLNODE *node) { GWEN_XMLNODE *nsrc, *ndst; assert(node); if (!hbci->defs) { hbci->defs=GWEN_XMLNode_dup(node); return 0; } nsrc=GWEN_XMLNode_GetChild(node); while (nsrc) { if (GWEN_XMLNode_GetType(nsrc)==GWEN_XMLNodeTypeTag) { ndst=GWEN_XMLNode_FindNode(hbci->defs, GWEN_XMLNodeTypeTag, GWEN_XMLNode_GetData(nsrc)); if (ndst) { GWEN_XMLNODE *n; n=GWEN_XMLNode_GetChild(nsrc); while (n) { GWEN_XMLNODE *newNode; DBG_DEBUG(AQHBCI_LOGDOMAIN, "Adding node \"%s\"", GWEN_XMLNode_GetData(n)); newNode=GWEN_XMLNode_dup(n); GWEN_XMLNode_AddChild(ndst, newNode); n=GWEN_XMLNode_Next(n); } /* while n */ } else { GWEN_XMLNODE *newNode; DBG_DEBUG(AQHBCI_LOGDOMAIN, "Adding branch \"%s\"", GWEN_XMLNode_GetData(nsrc)); newNode=GWEN_XMLNode_dup(nsrc); GWEN_XMLNode_AddChild(hbci->defs, newNode); } } /* if TAG */ nsrc=GWEN_XMLNode_Next(nsrc); } /* while */ return 0; } void AH_HBCI_AppendUniqueName(AH_HBCI *hbci, GWEN_BUFFER *nbuf) { char buffer[16]; GWEN_TIME *ti; ti=GWEN_CurrentTime(); assert(ti); GWEN_Time_toString(ti, "YYYYMMDD-hhmmss", nbuf); GWEN_Time_free(ti); snprintf(buffer, sizeof(buffer), "%03d", ++(hbci->counter)); GWEN_Buffer_AppendString(nbuf, "-"); GWEN_Buffer_AppendString(nbuf, buffer); } int AH_HBCI_SaveSettings(const char *path, GWEN_DB_NODE *db) { /* check for existence of that file */ if (GWEN_Directory_GetPath(path, GWEN_PATH_FLAGS_VARIABLE)) { DBG_INFO(AQHBCI_LOGDOMAIN, "Path \"%s\" is not available", path); return -1; } /* write file */ if (GWEN_DB_WriteFile(db, path, GWEN_DB_FLAGS_DEFAULT)) { DBG_INFO(AQHBCI_LOGDOMAIN, "Could not write file \"%s\"", path); return -1; } return 0; } GWEN_DB_NODE *AH_HBCI_LoadSettings(const char *path) { GWEN_DB_NODE *db; /* check for existence of the file */ if (GWEN_Directory_GetPath(path, GWEN_PATH_FLAGS_PATHMUSTEXIST | GWEN_PATH_FLAGS_VARIABLE)) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Path \"%s\" does not exist", path); return 0; } /* file exists, load it */ db=GWEN_DB_Group_new("cfg"); if (GWEN_DB_ReadFile(db, path, GWEN_DB_FLAGS_DEFAULT | GWEN_PATH_FLAGS_CREATE_GROUP)) { DBG_INFO(AQHBCI_LOGDOMAIN, "Could not read file \"%s\"", path); GWEN_DB_Group_free(db); return 0; } return db; } int AH_HBCI_SaveMessage(AH_HBCI *hbci, const AB_USER *u, GWEN_DB_NODE *dbMsg) { GWEN_BUFFER *nbuf; int rv; assert(hbci); assert(u); /* create path */ nbuf=GWEN_Buffer_new(0, 64, 0, 1); AH_HBCI_AddCustomerPath(hbci, u, nbuf); GWEN_Buffer_AppendString(nbuf, AH_PATH_SEP "messages" AH_PATH_SEP "in" AH_PATH_SEP); AH_HBCI_AppendUniqueName(hbci, nbuf); GWEN_Buffer_AppendString(nbuf, ".msg"); rv=AH_HBCI_SaveSettings(GWEN_Buffer_GetStart(nbuf), dbMsg); GWEN_Buffer_free(nbuf); if (rv) { DBG_INFO(AQHBCI_LOGDOMAIN, "Could not save message"); return -1; } DBG_DEBUG(AQHBCI_LOGDOMAIN, "Message for customer saved"); return 0; } int AH_HBCI_AddBankPath(const AH_HBCI *hbci, const AB_USER *u, GWEN_BUFFER *nbuf) { const char *country; const char *bankId; assert(hbci); assert(nbuf); country=AB_User_GetCountry(u); if (!country) country="de"; bankId=AB_User_GetBankCode(u); assert(bankId); AB_Provider_GetUserDataDir(hbci->provider, nbuf); GWEN_Buffer_AppendString(nbuf, AH_PATH_SEP "banks" AH_PATH_SEP); while (*country) GWEN_Buffer_AppendByte(nbuf, tolower(*(country++))); GWEN_Buffer_AppendString(nbuf, AH_PATH_SEP); GWEN_Buffer_AppendString(nbuf, bankId); return 0; } int AH_HBCI_AddUserPath(const AH_HBCI *hbci, const AB_USER *u, GWEN_BUFFER *nbuf) { const char *userId; assert(hbci); assert(u); if (AH_HBCI_AddBankPath(hbci, u, nbuf)) return -1; userId=AB_User_GetUserId(u); GWEN_Buffer_AppendString(nbuf, AH_PATH_SEP "users" AH_PATH_SEP); /* escape and append user name */ if (GWEN_Path_Convert(userId, nbuf, GWEN_PATH_FLAGS_ESCAPE | GWEN_PATH_FLAGS_TOLERANT_ESCAPE)) { return -1; } return 0; } int AH_HBCI_AddCustomerPath(const AH_HBCI *hbci, const AB_USER *u, GWEN_BUFFER *nbuf) { const char *customerId; assert(hbci); assert(u); if (AH_HBCI_AddUserPath(hbci, u, nbuf)) return -1; GWEN_Buffer_AppendString(nbuf, AH_PATH_SEP); /* escape and append customer name */ customerId=AB_User_GetCustomerId(u); if (GWEN_Path_Convert(customerId, nbuf, GWEN_PATH_FLAGS_ESCAPE | GWEN_PATH_FLAGS_TOLERANT_ESCAPE)) { return -1; } return 0; } int AH_HBCI_AddObjectPath(const AH_HBCI *hbci, const char *country, const char *bankId, const char *accountId, const char *userId, const char *customerId, GWEN_BUFFER *nbuf) { assert(hbci); AB_Provider_GetUserDataDir(hbci->provider, nbuf); GWEN_Buffer_AppendString(nbuf, AH_PATH_SEP "banks" AH_PATH_SEP); if (country==0) return 0; GWEN_Buffer_AppendString(nbuf, country); if (!bankId) return 0; GWEN_Buffer_AppendString(nbuf, AH_PATH_SEP); GWEN_Buffer_AppendString(nbuf, bankId); if (accountId) { GWEN_Buffer_AppendString(nbuf, AH_PATH_SEP "accounts" AH_PATH_SEP); if (GWEN_Path_Convert(accountId, nbuf, GWEN_PATH_FLAGS_ESCAPE | GWEN_PATH_FLAGS_TOLERANT_ESCAPE)) { return -1; } } else { /* escape and append user name */ if (!userId) return 0; GWEN_Buffer_AppendString(nbuf, AH_PATH_SEP "users" AH_PATH_SEP); if (GWEN_Path_Convert(userId, nbuf, GWEN_PATH_FLAGS_ESCAPE | GWEN_PATH_FLAGS_TOLERANT_ESCAPE)) { return -1; } /* escape and append customer name */ if (!customerId) return 0; if (GWEN_Path_Convert(customerId, nbuf, GWEN_PATH_FLAGS_ESCAPE | GWEN_PATH_FLAGS_TOLERANT_ESCAPE)) { return -1; } } return 0; } int AH_HBCI_CheckStringSanity(const char *s) { assert(s); while (*s) { if (iscntrl(*s) || isspace(*s)) { return -1; } s++; } /* while */ return 0; } AB_PROVIDER *AH_HBCI_GetProvider(const AH_HBCI *hbci) { assert(hbci); return hbci->provider; } GWEN_DB_NODE *AH_HBCI_GetSharedRuntimeData(const AH_HBCI *hbci) { assert(hbci); return hbci->sharedRuntimeData; } int AH_HBCI_GetTransferTimeout(const AH_HBCI *hbci) { assert(hbci); return hbci->transferTimeout; } void AH_HBCI_SetTransferTimeout(AH_HBCI *hbci, int i) { assert(hbci); hbci->transferTimeout=i; } int AH_HBCI_GetConnectTimeout(const AH_HBCI *hbci) { assert(hbci); return hbci->connectTimeout; } void AH_HBCI_SetConnectTimeout(AH_HBCI *hbci, int i) { assert(hbci); hbci->connectTimeout=i; } uint32_t AH_HBCI_GetLastVersion(const AH_HBCI *hbci) { assert(hbci); return hbci->lastVersion; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/msglayer/msgengine_p.h0000664000175000017500000000404714043610745023104 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Mon Mar 01 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_MSGENGINE_P_H #define AH_MSGENGINE_P_H #include "msgengine_l.h" struct AH_MSGENGINE { AB_USER *user; }; static int AH_MsgEngine_TypeRead(GWEN_MSGENGINE *e, GWEN_BUFFER *msgbuf, GWEN_XMLNODE *node, GWEN_BUFFER *vbuf, char escapeChar, const char *delimiters); static int AH_MsgEngine_TypeWrite(GWEN_MSGENGINE *e, GWEN_BUFFER *gbuf, GWEN_BUFFER *data, GWEN_XMLNODE *node); static GWEN_DB_NODE_TYPE AH_MsgEngine_TypeCheck(GWEN_MSGENGINE *e, const char *tname); static int AH_MsgEngine_BinTypeWrite(GWEN_MSGENGINE *e, GWEN_XMLNODE *node, GWEN_DB_NODE *gr, GWEN_BUFFER *dbuf); static const char *AH_MsgEngine_GetCharValue(GWEN_MSGENGINE *e, const char *name, const char *defValue); static int AH_MsgEngine_GetIntValue(GWEN_MSGENGINE *e, const char *name, int defValue); static AH_MSGENGINE *AH_MsgEngine_Data_new(); static void AH_MsgEngine_Data_free(AH_MSGENGINE *x); static void GWENHYWFAR_CB AH_MsgEngine_FreeData(void *bp, void *p); #endif /* AH_MSGENGINE_P_H */ aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/msglayer/msgengine.h0000664000175000017500000000235114043610745022561 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_MSGENGINE_H #define AH_MSGENGINE_H /** @defgroup G_AB_BE_AQHBCI_MSGENGINE HBCI Message Engine * @ingroup G_AB_BE_AQHBCI * @short HBCI-specific message engine extension * @author Martin Preuss * * This is an extension for @ref GWEN_MSGENGINE which additionally supports * some HBCI types (like date, time, DTAUS binary type, SWIFT binary type * etc). * It is used by AqHBCI internally and by the tool hbcixml2. */ /*@{*/ #ifdef __cplusplus extern "C" { #endif typedef struct AH_MSGENGINE AH_MSGENGINE; #ifdef __cplusplus } #endif #include #include #include #ifdef __cplusplus extern "C" { #endif GWEN_MSGENGINE *AH_MsgEngine_new(); #ifdef __cplusplus } #endif /*@}*/ #endif /* AH_MSGENGINE_H */ aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/msglayer/msgcrypt_pintan_sign.h0000664000175000017500000000117014546575650025061 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2023 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_MSGCRYPT_PINTAN_SIGN_H #define AH_MSGCRYPT_PINTAN_SIGN_H #include "aqhbci/msglayer/msgcrypt_pintan.h" int AH_Msg_SignPinTan(AH_MSG *hmsg, GWEN_BUFFER *rawBuf, const char *signer); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/msglayer/msgcrypt_rxh_common.c0000664000175000017500000005722114546575650024724 00000000000000/*************************************************************************** begin : Tue Nov 25 2008 copyright : (C) 2023 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "msgcrypt_rxh_common.h" #include "msgcrypt.h" #include "message_p.h" #include "aqhbci/aqhbci_l.h" #include "aqhbci/banking/user_l.h" #include #include #include #include #include #include #include #include #define AH_MSGRXH_MAXKEYBUF 4096 /* ------------------------------------------------------------------------------------------------ * static variables * ------------------------------------------------------------------------------------------------ */ static const RXH_PARAMETER rdh1_parameter= { AH_CryptMode_Rdh, 1, AH_SignAlg_RSA, AH_Opmode_Iso9796_1, AH_Opmode_None, AH_UsageSign_OwnerSigning, AH_HashAlg_Ripmed160, AH_HashAlg_None, AH_CryptAlg_2_Key_Triple_Des, AH_Opmode_Cbc }; static const RXH_PARAMETER rdh2_parameter= { AH_CryptMode_Rdh, 2, AH_SignAlg_RSA, AH_Opmode_Iso9796_2, AH_Opmode_None, AH_UsageSign_OwnerSigning, AH_HashAlg_Ripmed160, AH_HashAlg_None, AH_CryptAlg_2_Key_Triple_Des, AH_Opmode_Cbc }; static const RXH_PARAMETER rdh3_parameter= { AH_CryptMode_Rdh, 3, AH_SignAlg_RSA, AH_Opmode_Rsa_Pkcs1_v1_5, AH_Opmode_Iso9796_2, AH_UsageSign_OwnerSigning, AH_HashAlg_Sha1, AH_HashAlg_Ripmed160, AH_CryptAlg_2_Key_Triple_Des, AH_Opmode_Rsa_Pkcs1_v1_5 }; static const RXH_PARAMETER rdh5_parameter= { AH_CryptMode_Rdh, 5, AH_SignAlg_RSA, AH_Opmode_Rsa_Pkcs1_v1_5, AH_Opmode_None, AH_UsageSign_OwnerSigning, AH_HashAlg_Sha1, AH_HashAlg_None, AH_CryptAlg_2_Key_Triple_Des, AH_Opmode_Rsa_Pkcs1_v1_5 }; static const RXH_PARAMETER rdh6_parameter= { AH_CryptMode_Rdh, 6, AH_SignAlg_RSA, AH_Opmode_Rsa_Pkcs1_v1_5, AH_Opmode_Rsa_Pkcs1_v1_5, AH_UsageSign_OwnerSigning, AH_HashAlg_Sha256, AH_HashAlg_Sha256, AH_CryptAlg_2_Key_Triple_Des, AH_Opmode_Rsa_Pkcs1_v1_5 }; static const RXH_PARAMETER rdh7_parameter= { AH_CryptMode_Rdh, 7, AH_SignAlg_RSA, AH_Opmode_Rsa_Pss, AH_Opmode_Rsa_Pss, AH_UsageSign_OwnerSigning, AH_HashAlg_Sha256Sha256, AH_HashAlg_Sha256, AH_CryptAlg_2_Key_Triple_Des, AH_Opmode_Rsa_Pkcs1_v1_5 }; static const RXH_PARAMETER rdh8_parameter= { AH_CryptMode_Rdh, 8, AH_SignAlg_RSA, AH_Opmode_Rsa_Pkcs1_v1_5, AH_Opmode_None, AH_UsageSign_OwnerSigning, AH_HashAlg_Sha256, AH_HashAlg_None, AH_CryptAlg_2_Key_Triple_Des, AH_Opmode_Rsa_Pkcs1_v1_5 }; static const RXH_PARAMETER rdh9_parameter= { AH_CryptMode_Rdh, 9, AH_SignAlg_RSA, AH_Opmode_Rsa_Pss, AH_Opmode_None, AH_UsageSign_OwnerSigning, AH_HashAlg_Sha256Sha256, AH_HashAlg_None, AH_CryptAlg_2_Key_Triple_Des, AH_Opmode_Rsa_Pkcs1_v1_5 }; static const RXH_PARAMETER rdh10_parameter= { AH_CryptMode_Rdh, 10, AH_SignAlg_RSA, AH_Opmode_Rsa_Pss, AH_Opmode_None, AH_UsageSign_OwnerSigning, AH_HashAlg_Sha256Sha256, AH_HashAlg_None, AH_CryptAlg_2_Key_Triple_Des, AH_Opmode_Cbc }; static const RXH_PARAMETER *rdh_parameter[11]= { NULL, /* 0 */ &rdh1_parameter, /* 1 */ &rdh2_parameter, /* 2 */ &rdh3_parameter, /* 3 */ NULL, /* 4 */ &rdh5_parameter, /* 5 */ &rdh6_parameter, /* 6 */ &rdh7_parameter, /* 7 */ &rdh8_parameter, /* 8 */ &rdh9_parameter, /* 9 */ &rdh10_parameter /* 10 */ }; static const RXH_PARAMETER rah7_parameter= { AH_CryptMode_Rah, 7, AH_SignAlg_RSA, AH_Opmode_Rsa_Pss, AH_Opmode_Rsa_Pss, AH_UsageSign_OwnerSigning, AH_HashAlg_Sha256Sha256, AH_HashAlg_Sha256, AH_CryptAlg_AES256, AH_Opmode_Rsa_Pkcs1_v1_5 }; static const RXH_PARAMETER rah9_parameter= { AH_CryptMode_Rah, 9, AH_SignAlg_RSA, AH_Opmode_Rsa_Pss, AH_Opmode_None, AH_UsageSign_OwnerSigning, AH_HashAlg_Sha256Sha256, AH_HashAlg_None, AH_CryptAlg_AES256, AH_Opmode_Rsa_Pkcs1_v1_5 }; static const RXH_PARAMETER rah10_parameter= { AH_CryptMode_Rah, 10, AH_SignAlg_RSA, AH_Opmode_Rsa_Pss, AH_Opmode_None, AH_UsageSign_OwnerSigning, AH_HashAlg_Sha256Sha256, AH_HashAlg_None, AH_CryptAlg_AES256, AH_Opmode_Cbc }; static const RXH_PARAMETER *rah_parameter[11]= { NULL, /* 0 */ NULL, /* 1 */ NULL, /* 2 */ NULL, /* 3 */ NULL, /* 4 */ NULL, /* 5 */ NULL, /* 6 */ &rah7_parameter, /* 7 */ NULL, /* 8 */ &rah9_parameter, /* 9 */ &rah10_parameter /* 10 */ }; /* ------------------------------------------------------------------------------------------------ * code * ------------------------------------------------------------------------------------------------ */ const RXH_PARAMETER *AH_MsgRxh_GetParameters(AH_CRYPT_MODE cryptMode, int rxhVersion) { const RXH_PARAMETER *rParams=NULL; switch (cryptMode) { case AH_CryptMode_Rdh: if (rxhVersion<11) rParams=rdh_parameter[rxhVersion]; if (rParams == NULL) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Profile RDH%d is not supported!", rxhVersion); return NULL; } break; case AH_CryptMode_Rah: if (rxhVersion<11) rParams=rah_parameter[rxhVersion]; if (rParams == NULL) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Profile RDH%d is not supported!", rxhVersion); return NULL; } break; default: return NULL; } return rParams; } GWEN_CRYPT_TOKEN *AH_MsgRxh_GetOpenCryptToken(AH_MSG *hmsg) { AH_HBCI *h; AB_USER *u; GWEN_CRYPT_TOKEN *ct; int rv; uint32_t gid; h=AH_Dialog_GetHbci(hmsg->dialog); assert(h); u=AH_Dialog_GetDialogOwner(hmsg->dialog); assert(u); gid=0; /* get crypt token of signer */ rv=AB_Banking_GetCryptToken(AH_HBCI_GetBankingApi(h), AH_User_GetTokenType(u), AH_User_GetTokenName(u), &ct); if (rv) { DBG_INFO(AQHBCI_LOGDOMAIN, "Could not get crypt token for user \"%s\" (%d)", AB_User_GetUserId(u), rv); return NULL; } /* open CryptToken if necessary */ if (!GWEN_Crypt_Token_IsOpen(ct)) { GWEN_Crypt_Token_AddModes(ct, GWEN_CRYPT_TOKEN_MODE_DIRECT_SIGN); rv=GWEN_Crypt_Token_Open(ct, 0, gid); if (rv) { DBG_INFO(AQHBCI_LOGDOMAIN, "Could not open crypt token for user \"%s\" (%d)", AB_User_GetUserId(u), rv); return NULL; } } return ct; } const GWEN_CRYPT_TOKEN_CONTEXT *AH_MsgRxh_GetUserContext(AH_MSG *hmsg) { AH_HBCI *h; AB_USER *u; GWEN_CRYPT_TOKEN *ct; const GWEN_CRYPT_TOKEN_CONTEXT *ctx; uint32_t gid; h=AH_Dialog_GetHbci(hmsg->dialog); assert(h); u=AH_Dialog_GetDialogOwner(hmsg->dialog); assert(u); gid=0; ct=AH_MsgRxh_GetOpenCryptToken(hmsg); if (ct==NULL) { DBG_INFO(AQHBCI_LOGDOMAIN, "here"); return NULL; } /* get context and key info */ ctx=GWEN_Crypt_Token_GetContext(ct, AH_User_GetTokenContextId(u), gid); if (ctx==NULL) { DBG_INFO(AQHBCI_LOGDOMAIN, "Context %d not found on crypt token [%s:%s]", AH_User_GetTokenContextId(u), GWEN_Crypt_Token_GetTypeName(ct), GWEN_Crypt_Token_GetTokenName(ct)); return NULL; } return ctx; } int AH_MsgRxh_PrepareCryptoSeg(AH_MSG *hmsg, AB_USER *u, const RXH_PARAMETER *rxh_parameter, int keyNum, int keyVer, const GWEN_CRYPT_TOKEN_KEYINFO *ki, GWEN_DB_NODE *cfg, int crypt, int createCtrlRef) { char sdate[9]; char stime[7]; char ctrlref[15]; struct tm *lt; time_t tt; const char *userId; const char *peerId; int secProfile; assert(hmsg); assert(u); assert(cfg); userId=AB_User_GetUserId(u); secProfile = AH_Msg_GetSecurityProfile(hmsg); assert(userId); assert(*userId); peerId=AH_User_GetPeerId(u); if (!peerId || *peerId==0) { DBG_INFO(AQHBCI_LOGDOMAIN, "No PeerId in user, using user id"); peerId=userId; } tt=time(0); lt=localtime(&tt); if (createCtrlRef) { /* create control reference */ if (!strftime(ctrlref, sizeof(ctrlref), "%Y%m%d%H%M%S", lt)) { DBG_INFO(AQHBCI_LOGDOMAIN, "CtrlRef string too long"); return GWEN_ERROR_INTERNAL; } GWEN_DB_SetCharValue(cfg, GWEN_DB_FLAGS_DEFAULT, "ctrlref", ctrlref); } /* create date */ if (!strftime(sdate, sizeof(sdate), "%Y%m%d", lt)) { DBG_INFO(AQHBCI_LOGDOMAIN, "Date string too long"); return GWEN_ERROR_INTERNAL; } /* create time */ if (!strftime(stime, sizeof(stime), "%H%M%S", lt)) { DBG_INFO(AQHBCI_LOGDOMAIN, "Date string too long"); return GWEN_ERROR_INTERNAL; } GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "SecDetails/dir", 1); GWEN_DB_SetCharValue(cfg, GWEN_DB_FLAGS_DEFAULT, "SecStamp/date", sdate); GWEN_DB_SetCharValue(cfg, GWEN_DB_FLAGS_DEFAULT, "SecStamp/time", stime); GWEN_DB_SetCharValue(cfg, GWEN_DB_FLAGS_DEFAULT, "key/bankcode", AB_User_GetBankCode(u)); GWEN_DB_SetCharValue(cfg, GWEN_DB_FLAGS_DEFAULT, "key/userid", crypt?peerId:userId); GWEN_DB_SetCharValue(cfg, GWEN_DB_FLAGS_DEFAULT, "key/keytype", crypt?"V":(secProfile>2?"D":"S")); if (crypt) { GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "key/keynum", keyNum); GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "key/keyversion", keyVer); } else { GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "key/keynum", keyNum); GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "key/keyversion", keyVer); } switch (rxh_parameter->protocol) { case AH_CryptMode_Rdh: GWEN_DB_SetCharValue(cfg, GWEN_DB_FLAGS_DEFAULT, "secProfile/code", "RDH"); break; case AH_CryptMode_Rah: GWEN_DB_SetCharValue(cfg, GWEN_DB_FLAGS_DEFAULT, "secProfile/code", "RAH"); break; default: return GWEN_ERROR_INTERNAL; } GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "secProfile/version", rxh_parameter->protocolVersion); if (crypt) { GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "function", 4); /* crypt */ GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "cryptAlgo/algo", rxh_parameter->cryptAlg); GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "cryptAlgo/mode", rxh_parameter->opmodCrypt); } else { GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "signAlgo/algo", rxh_parameter->signAlgo); if (secProfile > 2) { GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "function", 1); /* sign with digital signature key */ assert(rxh_parameter->opmodSignD > 0); assert(rxh_parameter->hashAlgD > 0); GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "signAlgo/mode", rxh_parameter->opmodSignD); GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "hashAlgo/algo", rxh_parameter->hashAlgD); } else { GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "function", 2); /* sign with signature key */ GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "signAlgo/mode", rxh_parameter->opmodSignS); GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "hashAlgo/algo", rxh_parameter->hashAlgS); } if (secProfile > 1) { /* add certificate TODO: we need to get the type of certificate from outside */ int certLen = GWEN_Crypt_Token_KeyInfo_GetCertificateLen(ki); const uint8_t *certData = GWEN_Crypt_Token_KeyInfo_GetCertificateData(ki); GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "cert/type", 3); /* X.509 */ GWEN_DB_SetBinValue(cfg, GWEN_DB_FLAGS_DEFAULT, "cert/cert", certData, certLen); } } return 0; } int AH_Msg_SignRxh(AH_MSG *hmsg, GWEN_BUFFER *rawBuf, const char *signer) { AH_HBCI *h; GWEN_XMLNODE *node; GWEN_DB_NODE *cfg; GWEN_BUFFER *sigbuf; GWEN_BUFFER *hbuf; unsigned int l; int rv; char ctrlref[15]; const char *p; GWEN_MSGENGINE *e; uint32_t uFlags; GWEN_CRYPT_TOKEN *ct; const GWEN_CRYPT_TOKEN_CONTEXT *ctx; const GWEN_CRYPT_TOKEN_KEYINFO *ki; uint32_t keyId; uint32_t gid; int secProfile; const RXH_PARAMETER *rxh_parameter; int rxhVersion; AB_USER *su; assert(hmsg); su=AH_Msg_GetUser(hmsg, signer); if (!su) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Unknown user \"%s\"", signer); return GWEN_ERROR_NOT_FOUND; } h=AH_Dialog_GetHbci(hmsg->dialog); assert(h); e=AH_Dialog_GetMsgEngine(hmsg->dialog); assert(e); /* get correct parameters */ rxhVersion = AH_User_GetRdhType(su); switch (AH_User_GetCryptMode(su)) { case AH_CryptMode_Rdh: rxh_parameter=rdh_parameter[rxhVersion]; if (rxh_parameter == NULL) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Profile RDH%d is not supported!", rxhVersion); return AB_ERROR_NOT_INIT; } break; case AH_CryptMode_Rah: rxh_parameter=rah_parameter[rxhVersion]; if (rxh_parameter == NULL) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Profile RAH%d is not supported!", rxhVersion); return AB_ERROR_NOT_INIT; } break; default: return AB_ERROR_NOT_INIT; } GWEN_MsgEngine_SetMode(e, AH_CryptMode_toString(rxh_parameter->protocol)); //GWEN_MsgEngine_SetMode(e,"rdh"); secProfile = AH_Msg_GetSecurityProfile(hmsg); gid=0; uFlags=AH_User_GetFlags(su); /* get crypt token of signer */ rv=AB_Banking_GetCryptToken(AH_HBCI_GetBankingApi(h), AH_User_GetTokenType(su), AH_User_GetTokenName(su), &ct); if (rv) { DBG_INFO(AQHBCI_LOGDOMAIN, "Could not get crypt token for user \"%s\" (%d)", AB_User_GetUserId(su), rv); return rv; } /* open CryptToken if necessary */ if (!GWEN_Crypt_Token_IsOpen(ct)) { GWEN_Crypt_Token_AddModes(ct, GWEN_CRYPT_TOKEN_MODE_DIRECT_SIGN); rv=GWEN_Crypt_Token_Open(ct, 0, gid); if (rv) { DBG_INFO(AQHBCI_LOGDOMAIN, "Could not open crypt token for user \"%s\" (%d)", AB_User_GetUserId(su), rv); return rv; } } /* get context and key info */ ctx=GWEN_Crypt_Token_GetContext(ct, AH_User_GetTokenContextId(su), gid); if (ctx==NULL) { DBG_INFO(AQHBCI_LOGDOMAIN, "Context %d not found on crypt token [%s:%s]", AH_User_GetTokenContextId(su), GWEN_Crypt_Token_GetTypeName(ct), GWEN_Crypt_Token_GetTokenName(ct)); return GWEN_ERROR_NOT_FOUND; } if (secProfile > 2) { keyId=GWEN_Crypt_Token_Context_GetAuthSignKeyId(ctx); DBG_ERROR(AQHBCI_LOGDOMAIN, "AQHBCI does not yet support non-reputation!"); return AB_ERROR_NOT_INIT; } else { keyId=GWEN_Crypt_Token_Context_GetSignKeyId(ctx); } ki=GWEN_Crypt_Token_GetKeyInfo(ct, keyId, 0xffffffff, gid); if (ki==NULL) { DBG_INFO(AQHBCI_LOGDOMAIN, "Keyinfo %04x not found on crypt token [%s:%s]", keyId, GWEN_Crypt_Token_GetTypeName(ct), GWEN_Crypt_Token_GetTokenName(ct)); return GWEN_ERROR_NOT_FOUND; } node=GWEN_MsgEngine_FindNodeByPropertyStrictProto(e, "SEG", "id", 0, "SigHead"); if (!node) { DBG_INFO(AQHBCI_LOGDOMAIN, "Segment \"SigHead\" not found"); return GWEN_ERROR_INTERNAL; } /* prepare config for segment */ cfg=GWEN_DB_Group_new("sighead"); rv=AH_MsgRxh_PrepareCryptoSeg(hmsg, su, rxh_parameter, rxh_parameter->protocolVersion, GWEN_Crypt_Token_KeyInfo_GetKeyVersion(ki), ki, cfg, 0, 1); if (rv) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); GWEN_DB_Group_free(cfg); return rv; } /* set expected signer */ if (!(uFlags & AH_USER_FLAGS_BANK_DOESNT_SIGN)) { const char *remoteId; remoteId=AH_User_GetPeerId(su); if (!remoteId || *remoteId==0) remoteId=AB_User_GetUserId(su); assert(remoteId); assert(*remoteId); DBG_DEBUG(AQHBCI_LOGDOMAIN, "Expecting \"%s\" to sign the response", remoteId); AH_Msg_SetExpectedSigner(hmsg, remoteId); } /* store system id */ if (hmsg->noSysId) { GWEN_DB_SetCharValue(cfg, GWEN_DB_FLAGS_DEFAULT, "SecDetails/SecId", "0"); } else { /* store CID if we use a card */ const uint8_t *cidData; uint32_t cidLen=GWEN_Crypt_Token_Context_GetCidLen(ctx); cidData=GWEN_Crypt_Token_Context_GetCidPtr(ctx); if (cidLen > 0 && cidData != NULL) { GWEN_DB_SetBinValue(cfg, GWEN_DB_FLAGS_DEFAULT, "SecDetails/CID", cidData, cidLen); } p=AH_User_GetSystemId(su); if (p==NULL) { p=GWEN_Crypt_Token_Context_GetSystemId(ctx); } if (p) { GWEN_DB_SetCharValue(cfg, GWEN_DB_FLAGS_DEFAULT, "SecDetails/SecId", p); } else { GWEN_DB_SetCharValue(cfg, GWEN_DB_FLAGS_DEFAULT, "SecDetails/SecId", "0"); } } /* retrieve control reference for sigtail (to be used later) */ p=GWEN_DB_GetCharValue(cfg, "ctrlref", 0, ""); if (strlen(p)>=sizeof(ctrlref)) { DBG_INFO(AQHBCI_LOGDOMAIN, "Control reference too long (14 bytes maximum)"); GWEN_DB_Group_free(cfg); return -1; } strcpy(ctrlref, p); /* create SigHead */ hbuf=GWEN_Buffer_new(0, 128+GWEN_Buffer_GetUsedBytes(rawBuf), 0, 1); GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "head/seq", hmsg->firstSegment-1); if (AH_Msg_SignSeqOne(hmsg)) { GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "signseq", 1); } else { GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "signseq", GWEN_Crypt_Token_KeyInfo_GetSignCounter(ki)); } /* create signature head segment */ rv=GWEN_MsgEngine_CreateMessageFromNode(e, node, hbuf, cfg); GWEN_DB_Group_free(cfg); cfg=0; if (rv) { DBG_INFO(AQHBCI_LOGDOMAIN, "Could not create SigHead"); GWEN_Buffer_free(hbuf); return rv; } /* remember size of sighead for now */ l=GWEN_Buffer_GetUsedBytes(hbuf); /* add raw data to to-sign data buffer */ GWEN_Buffer_AppendBuffer(hbuf, rawBuf); /* sign message */ sigbuf=GWEN_Buffer_new(0, 512, 0, 1); { uint32_t signLen; GWEN_CRYPT_PADDALGO *algo; GWEN_MDIGEST *md=NULL; uint32_t seq; AH_HASH_ALG hashAlg; AH_OPMODE opMode; uint8_t *digestPtr; unsigned int digestSize; const char *tokenType = AH_User_GetTokenType(su); uint8_t doSHA256inSW = 0; if (secProfile > 2) { hashAlg = rxh_parameter->hashAlgD; opMode= rxh_parameter->opmodSignD; } else { hashAlg = rxh_parameter->hashAlgS; opMode= rxh_parameter->opmodSignS; } /* https://www.aquamaniac.de/rdm/issues/41 */ if (tokenType && !strcasecmp(tokenType, "ohbci")) doSHA256inSW = 1; /* hash sighead + data */ switch (hashAlg) { case AH_HashAlg_Sha1: md=GWEN_MDigest_Sha1_new(); break; case AH_HashAlg_Sha256: break; case AH_HashAlg_Sha256Sha256: md=GWEN_MDigest_Sha256_new(); break; case AH_HashAlg_Ripmed160: md=GWEN_MDigest_Rmd160_new(); break; default: md=NULL; } if (md != NULL) { rv=GWEN_MDigest_Begin(md); if (rv==0) rv=GWEN_MDigest_Update(md, (uint8_t *)GWEN_Buffer_GetStart(hbuf), GWEN_Buffer_GetUsedBytes(hbuf)); if (rv==0) rv=GWEN_MDigest_End(md); if (rv<0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Hash error (%d)", rv); GWEN_MDigest_free(md); GWEN_Buffer_free(sigbuf); GWEN_Buffer_free(hbuf); return rv; } if ((hashAlg == AH_HashAlg_Sha256Sha256) && doSHA256inSW) { DBG_NOTICE(AQHBCI_LOGDOMAIN, "%s(): doSHA256inSW (2nd).", __FUNCTION__); rv = GWEN_MDigest_Begin(md); if (rv == 0) { uint8_t h[32]; memcpy(h, GWEN_MDigest_GetDigestPtr(md), 32); rv = GWEN_MDigest_Update(md, h, 32); if (rv == 0) rv = GWEN_MDigest_End(md); } if (rv < 0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Hash error round 2 (%d)", rv); GWEN_MDigest_free(md); GWEN_Buffer_free(sigbuf); GWEN_Buffer_free(hbuf); return rv; } } digestPtr=GWEN_MDigest_GetDigestPtr(md); digestSize=GWEN_MDigest_GetDigestSize(md); } else { digestPtr=(uint8_t *)GWEN_Buffer_GetStart(hbuf); digestSize=GWEN_Buffer_GetUsedBytes(hbuf); } /* sign hash */ switch (opMode) { case AH_Opmode_Iso9796_1: algo=GWEN_Crypt_PaddAlgo_new(GWEN_Crypt_PaddAlgoId_Iso9796_1A4); GWEN_Crypt_PaddAlgo_SetPaddSize(algo, GWEN_Crypt_Token_KeyInfo_GetKeySize(ki)); break; case AH_Opmode_Iso9796_2: algo=GWEN_Crypt_PaddAlgo_new(GWEN_Crypt_PaddAlgoId_Iso9796_2); GWEN_Crypt_PaddAlgo_SetPaddSize(algo, GWEN_Crypt_Token_KeyInfo_GetKeySize(ki)); break; case AH_Opmode_Rsa_Pkcs1_v1_5: algo=GWEN_Crypt_PaddAlgo_new(GWEN_Crypt_PaddAlgoId_Pkcs1_2); GWEN_Crypt_PaddAlgo_SetPaddSize(algo, GWEN_Crypt_Token_KeyInfo_GetKeySize(ki)); break; case AH_Opmode_Rsa_Pss: algo=GWEN_Crypt_PaddAlgo_new(GWEN_Crypt_PaddAlgoId_Pkcs1_Pss_Sha256); GWEN_Crypt_PaddAlgo_SetPaddSize(algo, GWEN_Crypt_Token_KeyInfo_GetKeySize(ki)); break; default: return GWEN_ERROR_INTERNAL; } signLen=GWEN_Buffer_GetMaxUnsegmentedWrite(sigbuf); rv=GWEN_Crypt_Token_Sign(ct, keyId, algo, digestPtr, digestSize, (uint8_t *)GWEN_Buffer_GetStart(sigbuf), &signLen, &seq, gid); GWEN_Crypt_PaddAlgo_free(algo); GWEN_MDigest_free(md); if (rv) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not sign data with medium of user \"%s\" (%d)", AB_User_GetUserId(su), rv); GWEN_Buffer_free(sigbuf); GWEN_Buffer_free(hbuf); return rv; } GWEN_Buffer_IncrementPos(sigbuf, signLen); GWEN_Buffer_AdjustUsedBytes(sigbuf); } DBG_DEBUG(AQHBCI_LOGDOMAIN, "Signing done"); /* insert new SigHead at beginning of message buffer */ DBG_DEBUG(AQHBCI_LOGDOMAIN, "Inserting signature head"); GWEN_Buffer_Rewind(hmsg->buffer); GWEN_Buffer_InsertBytes(hmsg->buffer, GWEN_Buffer_GetStart(hbuf), l); /* create sigtail */ DBG_DEBUG(AQHBCI_LOGDOMAIN, "Completing signature tail"); cfg=GWEN_DB_Group_new("sigtail"); GWEN_Buffer_Reset(hbuf); GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "head/seq", hmsg->lastSegment+1); /* store to DB */ GWEN_DB_SetBinValue(cfg, GWEN_DB_FLAGS_DEFAULT, "signature", GWEN_Buffer_GetStart(sigbuf), GWEN_Buffer_GetUsedBytes(sigbuf)); GWEN_Buffer_free(sigbuf); GWEN_DB_SetCharValue(cfg, GWEN_DB_FLAGS_DEFAULT, "ctrlref", ctrlref); /* get node */ node=GWEN_MsgEngine_FindNodeByPropertyStrictProto(e, "SEG", "id", 0, "SigTail"); if (!node) { DBG_INFO(AQHBCI_LOGDOMAIN, "Segment \"SigTail\"not found"); GWEN_Buffer_free(hbuf); GWEN_DB_Group_free(cfg); return -1; } rv=GWEN_MsgEngine_CreateMessageFromNode(e, node, hbuf, cfg); if (rv) { DBG_INFO(AQHBCI_LOGDOMAIN, "Could not create SigTail"); GWEN_Buffer_free(hbuf); GWEN_DB_Group_free(cfg); return -1; } /* append sigtail */ DBG_DEBUG(AQHBCI_LOGDOMAIN, "Appending signature tail"); if (GWEN_Buffer_AppendBuffer(hmsg->buffer, hbuf)) { DBG_INFO(AQHBCI_LOGDOMAIN, "here"); GWEN_Buffer_free(hbuf); GWEN_DB_Group_free(cfg); return -1; } DBG_DEBUG(AQHBCI_LOGDOMAIN, "Appending signature tail: done"); GWEN_Buffer_free(hbuf); GWEN_DB_Group_free(cfg); /* adjust segment numbers (for next signature and message tail */ hmsg->firstSegment--; hmsg->lastSegment++; return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/msglayer/dialog_l.h0000664000175000017500000000617414043610745022366 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWHBCI_DIALOG_L_H #define GWHBCI_DIALOG_L_H typedef struct AH_DIALOG AH_DIALOG; #define AH_DIALOG_FLAGS_INITIATOR 0x0001 #define AH_DIALOG_FLAGS_OPEN 0x0002 #define AH_DIALOG_FLAGS_AUTHENTICATED 0x0004 #define AH_DIALOG_FLAGS_SECURED 0x0008 #define AH_DIALOG_FLAGS_ANONYMOUS 0x0010 #define AH_DIALOG_FLAGS_HAVEKEYS 0x0020 #define AH_DIALOG_FLAGS_SCA 0x0040 /* strong customer authentication */ #include "hbci_l.h" #include "aqhbci/aqhbci.h" #include "aqhbci/msglayer/message_l.h" #include "aqhbci/tan/tanmethod.h" #include #include #include #include #include #include AH_DIALOG *AH_Dialog_new(AB_USER *owner, AB_PROVIDER *pro); void AH_Dialog_free(AH_DIALOG *dlg); void AH_Dialog_Attach(AH_DIALOG *dlg); AB_BANKING *AH_Dialog_GetBankingApi(const AH_DIALOG *dlg); int AH_Dialog_Connect(AH_DIALOG *dlg); int AH_Dialog_Disconnect(AH_DIALOG *dlg); uint32_t AH_Dialog_GetFlags(const AH_DIALOG *dlg); void AH_Dialog_SetFlags(AH_DIALOG *dlg, uint32_t f); void AH_Dialog_AddFlags(AH_DIALOG *dlg, uint32_t f); void AH_Dialog_SubFlags(AH_DIALOG *dlg, uint32_t f); const char *AH_Dialog_GetLogFile(const AH_DIALOG *dlg); uint32_t AH_Dialog_GetNextMsgNum(AH_DIALOG *dlg); uint32_t AH_Dialog_GetLastMsgNum(const AH_DIALOG *dlg); uint32_t AH_Dialog_GetLastReceivedMsgNum(const AH_DIALOG *dlg); const char *AH_Dialog_GetDialogId(const AH_DIALOG *dlg); void AH_Dialog_SetDialogId(AH_DIALOG *dlg, const char *s); AB_USER *AH_Dialog_GetDialogOwner(const AH_DIALOG *dlg); GWEN_MSGENGINE *AH_Dialog_GetMsgEngine(const AH_DIALOG *dlg); void AH_Dialog_SetMsgEngine(AH_DIALOG *dlg, GWEN_MSGENGINE *e); GWEN_DB_NODE *AH_Dialog_GetGlobalValues(const AH_DIALOG *dlg); int AH_Dialog_CheckReceivedMsgNum(AH_DIALOG *dlg, uint32_t msgnum); int AH_Dialog_ExchangeMessages(AH_DIALOG *dlg, AH_MSG *msgToSend, AH_MSG **pMsgReceived); int AH_Dialog_RecvMessage(AH_DIALOG *dlg, AH_MSG **pMsg); int AH_Dialog_SendMessage(AH_DIALOG *dlg, AH_MSG *msg); AH_HBCI *AH_Dialog_GetHbci(const AH_DIALOG *dlg); void AH_Dialog_SetItanMethod(AH_DIALOG *dlg, uint32_t i); uint32_t AH_Dialog_GetItanMethod(const AH_DIALOG *dlg); int AH_Dialog_GetItanProcessType(const AH_DIALOG *dlg); void AH_Dialog_SetItanProcessType(AH_DIALOG *dlg, int i); int AH_Dialog_GetTanJobVersion(const AH_DIALOG *dlg); void AH_Dialog_SetTanJobVersion(AH_DIALOG *dlg, int i); const AH_TAN_METHOD *AH_Dialog_GetTanMethodDescription(const AH_DIALOG *dlg); void AH_Dialog_SetTanMethodDescription(AH_DIALOG *dlg, const AH_TAN_METHOD *tm); int AH_Dialog_TestServer_Https(AH_DIALOG *dlg); #endif /* GWHBCI_DIALOG_L_H */ aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/msglayer/msgcrypt_ddv.c0000664000175000017500000010343514043610745023312 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ int AH_MsgDdv_PrepareCryptoSeg(AH_MSG *hmsg, AB_USER *u, const GWEN_CRYPT_TOKEN_KEYINFO *ki, GWEN_DB_NODE *cfg, int crypt, int createCtrlRef) { char sdate[9]; char stime[7]; char ctrlref[15]; struct tm *lt; time_t tt; const char *userId; const char *peerId; assert(hmsg); assert(u); assert(cfg); userId=AB_User_GetUserId(u); assert(userId); assert(*userId); peerId=AH_User_GetPeerId(u); if (!peerId || !*peerId) peerId=userId; tt=time(0); lt=localtime(&tt); if (createCtrlRef) { /* create control reference */ if (!strftime(ctrlref, sizeof(ctrlref), "%Y%m%d%H%M%S", lt)) { DBG_INFO(AQHBCI_LOGDOMAIN, "CtrlRef string too long"); return GWEN_ERROR_INTERNAL; } GWEN_DB_SetCharValue(cfg, GWEN_DB_FLAGS_DEFAULT, "ctrlref", ctrlref); } /* create date */ if (!strftime(sdate, sizeof(sdate), "%Y%m%d", lt)) { DBG_INFO(AQHBCI_LOGDOMAIN, "Date string too long"); return GWEN_ERROR_INTERNAL; } /* create time */ if (!strftime(stime, sizeof(stime), "%H%M%S", lt)) { DBG_INFO(AQHBCI_LOGDOMAIN, "Date string too long"); return GWEN_ERROR_INTERNAL; } GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "SecDetails/dir", 1); GWEN_DB_SetCharValue(cfg, GWEN_DB_FLAGS_DEFAULT, "SecStamp/date", sdate); GWEN_DB_SetCharValue(cfg, GWEN_DB_FLAGS_DEFAULT, "SecStamp/time", stime); GWEN_DB_SetCharValue(cfg, GWEN_DB_FLAGS_DEFAULT, "key/bankcode", AB_User_GetBankCode(u)); GWEN_DB_SetCharValue(cfg, GWEN_DB_FLAGS_DEFAULT, "key/userid", crypt?peerId:userId); GWEN_DB_SetCharValue(cfg, GWEN_DB_FLAGS_DEFAULT, "key/keytype", crypt?"V":"S"); GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "key/keynum", GWEN_Crypt_Token_KeyInfo_GetKeyNumber(ki)); GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "key/keyversion", GWEN_Crypt_Token_KeyInfo_GetKeyVersion(ki)); GWEN_DB_SetCharValue(cfg, GWEN_DB_FLAGS_DEFAULT, "secProfile/code", "DDV"); GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "secProfile/version", 1); return 0; } int AH_Msg_SignDdv(AH_MSG *hmsg, GWEN_BUFFER *rawBuf, const char *signer) { AH_HBCI *h; GWEN_XMLNODE *node; GWEN_DB_NODE *cfg; GWEN_BUFFER *sigbuf; GWEN_BUFFER *hbuf; unsigned int l; int rv; char ctrlref[15]; const char *p; GWEN_MSGENGINE *e; AB_USER *su; uint32_t uFlags; GWEN_CRYPT_TOKEN *ct; const GWEN_CRYPT_TOKEN_CONTEXT *ctx; const GWEN_CRYPT_TOKEN_KEYINFO *ki; uint32_t keyId; uint32_t gid; assert(hmsg); h=AH_Dialog_GetHbci(hmsg->dialog); assert(h); e=AH_Dialog_GetMsgEngine(hmsg->dialog); assert(e); GWEN_MsgEngine_SetMode(e, "ddv"); gid=0; su=AH_Msg_GetUser(hmsg, signer); if (!su) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Unknown user \"%s\"", signer); return GWEN_ERROR_NOT_FOUND; } uFlags=AH_User_GetFlags(su); /* get crypt token of signer */ rv=AB_Banking_GetCryptToken(AH_HBCI_GetBankingApi(h), AH_User_GetTokenType(su), AH_User_GetTokenName(su), &ct); if (rv) { DBG_INFO(AQHBCI_LOGDOMAIN, "Could not get crypt token for user \"%s\" (%d)", AB_User_GetUserId(su), rv); return rv; } /* open CryptToken if necessary */ if (!GWEN_Crypt_Token_IsOpen(ct)) { rv=GWEN_Crypt_Token_Open(ct, 0, gid); if (rv) { DBG_INFO(AQHBCI_LOGDOMAIN, "Could not open crypt token for user \"%s\" (%d)", AB_User_GetUserId(su), rv); return rv; } } /* get context and key info */ ctx=GWEN_Crypt_Token_GetContext(ct, AH_User_GetTokenContextId(su), gid); if (ctx==NULL) { DBG_INFO(AQHBCI_LOGDOMAIN, "Context %d not found on crypt token [%s:%s]", AH_User_GetTokenContextId(su), GWEN_Crypt_Token_GetTypeName(ct), GWEN_Crypt_Token_GetTokenName(ct)); return GWEN_ERROR_NOT_FOUND; } keyId=GWEN_Crypt_Token_Context_GetSignKeyId(ctx); ki=GWEN_Crypt_Token_GetKeyInfo(ct, keyId, 0xffffffff, gid); if (ki==NULL) { DBG_INFO(AQHBCI_LOGDOMAIN, "Keyinfo %04x not found on crypt token [%s:%s]", keyId, GWEN_Crypt_Token_GetTypeName(ct), GWEN_Crypt_Token_GetTokenName(ct)); return GWEN_ERROR_NOT_FOUND; } node=GWEN_MsgEngine_FindNodeByPropertyStrictProto(e, "SEG", "id", 0, "SigHead"); if (!node) { DBG_INFO(AQHBCI_LOGDOMAIN, "Segment \"SigHead\" not found"); return GWEN_ERROR_INTERNAL; } /* prepare config for segment */ cfg=GWEN_DB_Group_new("sighead"); rv=AH_MsgDdv_PrepareCryptoSeg(hmsg, su, ki, cfg, 0, 1); if (rv) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); GWEN_DB_Group_free(cfg); return rv; } /* set expected signer */ if (!(uFlags & AH_USER_FLAGS_BANK_DOESNT_SIGN)) { const char *remoteId; remoteId=AH_User_GetPeerId(su); if (!remoteId || *remoteId==0) remoteId=AB_User_GetUserId(su); assert(remoteId); assert(*remoteId); DBG_DEBUG(AQHBCI_LOGDOMAIN, "Expecting \"%s\" to sign the response", remoteId); AH_Msg_SetExpectedSigner(hmsg, remoteId); } /* store system id */ p=GWEN_Crypt_Token_Context_GetSystemId(ctx); if (p) { GWEN_BUFFER *idBuf; idBuf=GWEN_Buffer_new(0, 128, 0, 1); rv=GWEN_Text_FromHexBuffer(p, idBuf); if (rv) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Bad system id on DDV medium, should not happen (%d)", rv); GWEN_Buffer_free(idBuf); GWEN_DB_Group_free(cfg); return rv; } GWEN_DB_SetBinValue(cfg, GWEN_DB_FLAGS_DEFAULT, "SecDetails/SecId", GWEN_Buffer_GetStart(idBuf), GWEN_Buffer_GetUsedBytes(idBuf)); GWEN_Buffer_free(idBuf); } else { DBG_ERROR(AQHBCI_LOGDOMAIN, "No system id on DDV medium, should not happen (%d)", rv); GWEN_DB_Group_free(cfg); return GWEN_ERROR_INTERNAL; } /* retrieve control reference for sigtail (to be used later) */ p=GWEN_DB_GetCharValue(cfg, "ctrlref", 0, ""); if (strlen(p)>=sizeof(ctrlref)) { DBG_INFO(AQHBCI_LOGDOMAIN, "Control reference too long (14 bytes maximum)"); GWEN_DB_Group_free(cfg); return -1; } strcpy(ctrlref, p); /* create SigHead */ hbuf=GWEN_Buffer_new(0, 128+GWEN_Buffer_GetUsedBytes(rawBuf), 0, 1); GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "head/seq", hmsg->firstSegment-1); GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "signseq", GWEN_Crypt_Token_KeyInfo_GetSignCounter(ki)); /* create signature head segment */ rv=GWEN_MsgEngine_CreateMessageFromNode(e, node, hbuf, cfg); GWEN_DB_Group_free(cfg); cfg=0; if (rv) { DBG_INFO(AQHBCI_LOGDOMAIN, "Could not create SigHead"); GWEN_Buffer_free(hbuf); return rv; } /* remember size of sighead for now */ l=GWEN_Buffer_GetUsedBytes(hbuf); /* add raw data to to-sign data buffer */ GWEN_Buffer_AppendBuffer(hbuf, rawBuf); /* sign message */ sigbuf=GWEN_Buffer_new(0, 512, 0, 1); if (1) { uint32_t signLen; GWEN_CRYPT_PADDALGO *algo; GWEN_MDIGEST *md; uint32_t seq; /* hash sighead + data */ md=GWEN_MDigest_Rmd160_new(); rv=GWEN_MDigest_Begin(md); if (rv==0) rv=GWEN_MDigest_Update(md, (uint8_t *)GWEN_Buffer_GetStart(hbuf), GWEN_Buffer_GetUsedBytes(hbuf)); if (rv==0) rv=GWEN_MDigest_End(md); if (rv<0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Hash error (%d)", rv); GWEN_MDigest_free(md); GWEN_Buffer_free(sigbuf); GWEN_Buffer_free(hbuf); return rv; } /* sign hash */ algo=GWEN_Crypt_PaddAlgo_new(GWEN_Crypt_PaddAlgoId_None); signLen=20; rv=GWEN_Crypt_Token_Sign(ct, keyId, algo, GWEN_MDigest_GetDigestPtr(md), GWEN_MDigest_GetDigestSize(md), (uint8_t *)GWEN_Buffer_GetPosPointer(sigbuf), &signLen, &seq, gid); GWEN_Crypt_PaddAlgo_free(algo); GWEN_MDigest_free(md); if (rv) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not sign data with medium of user \"%s\" (%d)", AB_User_GetUserId(su), rv); GWEN_Buffer_free(sigbuf); GWEN_Buffer_free(hbuf); return rv; } GWEN_Buffer_IncrementPos(sigbuf, signLen); GWEN_Buffer_AdjustUsedBytes(sigbuf); } DBG_DEBUG(AQHBCI_LOGDOMAIN, "Signing done"); /* insert new SigHead at beginning of message buffer */ DBG_DEBUG(AQHBCI_LOGDOMAIN, "Inserting signature head"); GWEN_Buffer_Rewind(hmsg->buffer); GWEN_Buffer_InsertBytes(hmsg->buffer, GWEN_Buffer_GetStart(hbuf), l); /* create sigtail */ DBG_DEBUG(AQHBCI_LOGDOMAIN, "Completing signature tail"); cfg=GWEN_DB_Group_new("sigtail"); GWEN_Buffer_Reset(hbuf); GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "head/seq", hmsg->lastSegment+1); /* store to DB */ GWEN_DB_SetBinValue(cfg, GWEN_DB_FLAGS_DEFAULT, "signature", GWEN_Buffer_GetStart(sigbuf), GWEN_Buffer_GetUsedBytes(sigbuf)); GWEN_Buffer_free(sigbuf); GWEN_DB_SetCharValue(cfg, GWEN_DB_FLAGS_DEFAULT, "ctrlref", ctrlref); /* get node */ node=GWEN_MsgEngine_FindNodeByPropertyStrictProto(e, "SEG", "id", 0, "SigTail"); if (!node) { DBG_INFO(AQHBCI_LOGDOMAIN, "Segment \"SigTail\"not found"); GWEN_Buffer_free(hbuf); GWEN_DB_Group_free(cfg); return -1; } rv=GWEN_MsgEngine_CreateMessageFromNode(e, node, hbuf, cfg); if (rv) { DBG_INFO(AQHBCI_LOGDOMAIN, "Could not create SigTail"); GWEN_Buffer_free(hbuf); GWEN_DB_Group_free(cfg); return -1; } /* append sigtail */ DBG_DEBUG(AQHBCI_LOGDOMAIN, "Appending signature tail"); if (GWEN_Buffer_AppendBuffer(hmsg->buffer, hbuf)) { DBG_INFO(AQHBCI_LOGDOMAIN, "here"); GWEN_Buffer_free(hbuf); GWEN_DB_Group_free(cfg); return -1; } DBG_DEBUG(AQHBCI_LOGDOMAIN, "Appending signature tail: done"); GWEN_Buffer_free(hbuf); GWEN_DB_Group_free(cfg); /* adjust segment numbers (for next signature and message tail */ hmsg->firstSegment--; hmsg->lastSegment++; return 0; } int AH_Msg_EncryptDdv(AH_MSG *hmsg) { AH_HBCI *h; GWEN_XMLNODE *node; GWEN_DB_NODE *cfg; GWEN_BUFFER *mbuf; GWEN_BUFFER *hbuf; uint32_t l; int rv; const char *p; GWEN_MSGENGINE *e; AB_USER *u; const char *peerId; // uint32_t uFlags; GWEN_CRYPT_TOKEN *ct; const GWEN_CRYPT_TOKEN_CONTEXT *ctx; const GWEN_CRYPT_TOKEN_KEYINFO *ki; uint32_t keyId; GWEN_CRYPT_KEY *sk; uint8_t encKey[16]; uint32_t gid; assert(hmsg); h=AH_Dialog_GetHbci(hmsg->dialog); assert(h); e=AH_Dialog_GetMsgEngine(hmsg->dialog); assert(e); GWEN_MsgEngine_SetMode(e, "ddv"); gid=0; u=AH_Dialog_GetDialogOwner(hmsg->dialog); // uFlags=AH_User_GetFlags(u); peerId=AH_User_GetPeerId(u); if (!peerId || *peerId==0) peerId=AB_User_GetUserId(u); /* get crypt token of signer */ rv=AB_Banking_GetCryptToken(AH_HBCI_GetBankingApi(h), AH_User_GetTokenType(u), AH_User_GetTokenName(u), &ct); if (rv) { DBG_INFO(AQHBCI_LOGDOMAIN, "Could not get crypt token for user \"%s\" (%d)", AB_User_GetUserId(u), rv); return rv; } /* open CryptToken if necessary */ if (!GWEN_Crypt_Token_IsOpen(ct)) { rv=GWEN_Crypt_Token_Open(ct, 0, gid); if (rv) { DBG_INFO(AQHBCI_LOGDOMAIN, "Could not open crypt token for user \"%s\" (%d)", AB_User_GetUserId(u), rv); return rv; } } /* get context and key info */ ctx=GWEN_Crypt_Token_GetContext(ct, AH_User_GetTokenContextId(u), gid); if (ctx==NULL) { DBG_INFO(AQHBCI_LOGDOMAIN, "Context %d not found on crypt token [%s:%s]", AH_User_GetTokenContextId(u), GWEN_Crypt_Token_GetTypeName(ct), GWEN_Crypt_Token_GetTokenName(ct)); return GWEN_ERROR_NOT_FOUND; } keyId=GWEN_Crypt_Token_Context_GetEncipherKeyId(ctx); ki=GWEN_Crypt_Token_GetKeyInfo(ct, keyId, 0xffffffff, gid); if (ki==NULL) { DBG_INFO(AQHBCI_LOGDOMAIN, "Keyinfo %04x not found on crypt token [%s:%s]", keyId, GWEN_Crypt_Token_GetTypeName(ct), GWEN_Crypt_Token_GetTokenName(ct)); return GWEN_ERROR_NOT_FOUND; } rv=GWEN_Padd_PaddWithAnsiX9_23(hmsg->buffer); if (rv) { DBG_INFO(AQHBCI_LOGDOMAIN, "Error padding message with ANSI X9.23 (%d)", rv); return rv; } /* create session key */ sk=GWEN_Crypt_KeyDes3K_Generate(GWEN_Crypt_CryptMode_Cbc, 24, 2); if (sk==NULL) { DBG_INFO(AQHBCI_LOGDOMAIN, "Could not generate DES key"); return GWEN_ERROR_INTERNAL; } /* encrypt message with that session key */ mbuf=GWEN_Buffer_new(0, GWEN_Buffer_GetUsedBytes(hmsg->buffer), 0, 1); l=GWEN_Buffer_GetUsedBytes(hmsg->buffer); rv=GWEN_Crypt_Key_Encipher(sk, (uint8_t *)GWEN_Buffer_GetStart(hmsg->buffer), GWEN_Buffer_GetUsedBytes(hmsg->buffer), (uint8_t *)GWEN_Buffer_GetPosPointer(mbuf), &l); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "Could not encipher with DES session key (%d)", rv); GWEN_Buffer_free(mbuf); GWEN_Crypt_Key_free(sk); return rv; } GWEN_Buffer_IncrementPos(mbuf, l); GWEN_Buffer_AdjustUsedBytes(mbuf); /* encrypt session key */ if (1) { uint32_t elen; GWEN_CRYPT_PADDALGO *algo; algo=GWEN_Crypt_PaddAlgo_new(GWEN_Crypt_PaddAlgoId_None); elen=sizeof(encKey); rv=GWEN_Crypt_Token_Encipher(ct, keyId, algo, GWEN_Crypt_KeyDes3K_GetKeyDataPtr(sk), 16, encKey, &elen, gid); GWEN_Crypt_PaddAlgo_free(algo); if (rv) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(mbuf); GWEN_Crypt_Key_free(sk); } } GWEN_Crypt_Key_free(sk); /* create crypt head */ node=GWEN_MsgEngine_FindNodeByPropertyStrictProto(e, "SEG", "id", 0, "CryptHead"); if (!node) { DBG_INFO(AQHBCI_LOGDOMAIN, "Segment \"CryptHead\" not found"); GWEN_Buffer_free(mbuf); GWEN_Crypt_Key_free(sk); return GWEN_ERROR_INTERNAL; } /* create CryptHead */ cfg=GWEN_DB_Group_new("crypthead"); GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "head/seq", 998); rv=AH_MsgDdv_PrepareCryptoSeg(hmsg, u, ki, cfg, 1, 0); if (rv) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); GWEN_DB_Group_free(cfg); GWEN_Buffer_free(mbuf); return rv; } /* store system id */ p=GWEN_Crypt_Token_Context_GetSystemId(ctx); if (p) { GWEN_BUFFER *idBuf; idBuf=GWEN_Buffer_new(0, 128, 0, 1); rv=GWEN_Text_FromHexBuffer(p, idBuf); if (rv) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Bad system id on DDV medium, should not happen (%d)", rv); GWEN_Buffer_free(idBuf); GWEN_DB_Group_free(cfg); GWEN_Buffer_free(mbuf); return rv; } GWEN_DB_SetBinValue(cfg, GWEN_DB_FLAGS_DEFAULT, "SecDetails/SecId", GWEN_Buffer_GetStart(idBuf), GWEN_Buffer_GetUsedBytes(idBuf)); GWEN_Buffer_free(idBuf); } else { DBG_ERROR(AQHBCI_LOGDOMAIN, "No system id on DDV medium, should not happen (%d)", rv); GWEN_DB_Group_free(cfg); GWEN_Buffer_free(mbuf); return GWEN_ERROR_INTERNAL; } /* store encrypted message key */ GWEN_DB_SetBinValue(cfg, GWEN_DB_FLAGS_DEFAULT, "CryptAlgo/MsgKey", encKey, 16); hbuf=GWEN_Buffer_new(0, 256+GWEN_Buffer_GetUsedBytes(mbuf), 0, 1); rv=GWEN_MsgEngine_CreateMessageFromNode(e, node, hbuf, cfg); if (rv) { DBG_INFO(AQHBCI_LOGDOMAIN, "Could not create CryptHead (%d)", rv); GWEN_Buffer_free(hbuf); GWEN_DB_Group_free(cfg); GWEN_Buffer_free(mbuf); return rv; } GWEN_DB_Group_free(cfg); /* create cryptdata */ cfg=GWEN_DB_Group_new("cryptdata"); GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "head/seq", 999); GWEN_DB_SetBinValue(cfg, GWEN_DB_FLAGS_DEFAULT, "cryptdata", GWEN_Buffer_GetStart(mbuf), GWEN_Buffer_GetUsedBytes(mbuf)); GWEN_Buffer_free(mbuf); node=GWEN_MsgEngine_FindNodeByPropertyStrictProto(e, "SEG", "id", 0, "CryptData"); if (!node) { DBG_INFO(AQHBCI_LOGDOMAIN, "Segment \"CryptData\"not found"); GWEN_Buffer_free(hbuf); GWEN_DB_Group_free(cfg); return -1; } rv=GWEN_MsgEngine_CreateMessageFromNode(e, node, hbuf, cfg); if (rv) { DBG_INFO(AQHBCI_LOGDOMAIN, "Could not create CryptData (%d)", rv); GWEN_Buffer_free(hbuf); GWEN_DB_Group_free(cfg); return rv; } /* replace existing buffer by encrypted one */ GWEN_Buffer_free(hmsg->buffer); hmsg->buffer=hbuf; GWEN_DB_Group_free(cfg); return 0; } int AH_Msg_DecryptDdv(AH_MSG *hmsg, GWEN_DB_NODE *gr) { AH_HBCI *h; GWEN_BUFFER *mbuf; uint32_t l; int rv; const char *p; GWEN_MSGENGINE *e; AB_USER *u; const char *peerId; // uint32_t uFlags; GWEN_CRYPT_TOKEN *ct; const GWEN_CRYPT_TOKEN_CONTEXT *ctx; const GWEN_CRYPT_TOKEN_KEYINFO *ki; uint32_t keyId; GWEN_CRYPT_KEY *sk=NULL; uint8_t decKey[16]; GWEN_DB_NODE *nhead=NULL; GWEN_DB_NODE *ndata=NULL; const char *crypterId; uint32_t gid; assert(hmsg); h=AH_Dialog_GetHbci(hmsg->dialog); assert(h); e=AH_Dialog_GetMsgEngine(hmsg->dialog); assert(e); GWEN_MsgEngine_SetMode(e, "ddv"); gid=0; u=AH_Dialog_GetDialogOwner(hmsg->dialog); // uFlags=AH_User_GetFlags(u); peerId=AH_User_GetPeerId(u); if (!peerId || *peerId==0) peerId=AB_User_GetUserId(u); /* get crypt token of signer */ rv=AB_Banking_GetCryptToken(AH_HBCI_GetBankingApi(h), AH_User_GetTokenType(u), AH_User_GetTokenName(u), &ct); if (rv) { DBG_INFO(AQHBCI_LOGDOMAIN, "Could not get crypt token for user \"%s\" (%d)", AB_User_GetUserId(u), rv); return rv; } /* open CryptToken if necessary */ if (!GWEN_Crypt_Token_IsOpen(ct)) { rv=GWEN_Crypt_Token_Open(ct, 0, gid); if (rv) { DBG_INFO(AQHBCI_LOGDOMAIN, "Could not open crypt token for user \"%s\" (%d)", AB_User_GetUserId(u), rv); return rv; } } /* get context and key info */ ctx=GWEN_Crypt_Token_GetContext(ct, AH_User_GetTokenContextId(u), gid); if (ctx==NULL) { DBG_INFO(AQHBCI_LOGDOMAIN, "Context %d not found on crypt token [%s:%s]", AH_User_GetTokenContextId(u), GWEN_Crypt_Token_GetTypeName(ct), GWEN_Crypt_Token_GetTokenName(ct)); return GWEN_ERROR_NOT_FOUND; } keyId=GWEN_Crypt_Token_Context_GetDecipherKeyId(ctx); ki=GWEN_Crypt_Token_GetKeyInfo(ct, keyId, 0xffffffff, gid); if (ki==NULL) { DBG_INFO(AQHBCI_LOGDOMAIN, "Keyinfo %04x not found on crypt token [%s:%s]", keyId, GWEN_Crypt_Token_GetTypeName(ct), GWEN_Crypt_Token_GetTokenName(ct)); return GWEN_ERROR_NOT_FOUND; } /* get encrypted session key */ nhead=GWEN_DB_GetGroup(gr, GWEN_DB_FLAGS_DEFAULT | GWEN_PATH_FLAGS_NAMEMUSTEXIST, "CryptHead"); if (!nhead) { DBG_ERROR(AQHBCI_LOGDOMAIN, "No crypt head"); return GWEN_ERROR_BAD_DATA; } ndata=GWEN_DB_GetGroup(gr, GWEN_DB_FLAGS_DEFAULT | GWEN_PATH_FLAGS_NAMEMUSTEXIST, "CryptData"); if (!ndata) { DBG_ERROR(AQHBCI_LOGDOMAIN, "No crypt data"); return GWEN_ERROR_BAD_DATA; } crypterId=GWEN_DB_GetCharValue(nhead, "key/userId", 0, I18N("unknown")); p=GWEN_DB_GetBinValue(nhead, "CryptAlgo/MsgKey", 0, 0, 0, &l); if (p && l) { uint32_t elen; GWEN_CRYPT_PADDALGO *algo; algo=GWEN_Crypt_PaddAlgo_new(GWEN_Crypt_PaddAlgoId_None); elen=sizeof(decKey); rv=GWEN_Crypt_Token_Decipher(ct, keyId, algo, (const uint8_t *)p, l, decKey, &elen, gid); GWEN_Crypt_PaddAlgo_free(algo); if (rv) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } sk=GWEN_Crypt_KeyDes3K_fromData(GWEN_Crypt_CryptMode_Cbc, 24, decKey, elen); if (sk==NULL) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not create DES key from data"); return GWEN_ERROR_BAD_DATA; } } else { DBG_ERROR(AQHBCI_LOGDOMAIN, "Missing message key"); return GWEN_ERROR_BAD_DATA; } /* get encrypted data */ p=GWEN_DB_GetBinValue(ndata, "CryptData", 0, 0, 0, &l); if (!p || !l) { DBG_ERROR(AQHBCI_LOGDOMAIN, "No crypt data"); GWEN_Crypt_Key_free(sk); return GWEN_ERROR_BAD_DATA; } /* decipher message with session key */ mbuf=GWEN_Buffer_new(0, l, 0, 1); rv=GWEN_Crypt_Key_Decipher(sk, (const uint8_t *)p, l, (uint8_t *)GWEN_Buffer_GetPosPointer(mbuf), &l); GWEN_Crypt_Key_free(sk); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "Could not decipher with DES session key (%d)", rv); GWEN_Buffer_free(mbuf); return rv; } GWEN_Buffer_IncrementPos(mbuf, l); GWEN_Buffer_AdjustUsedBytes(mbuf); /* unpadd message */ rv=GWEN_Padd_UnpaddWithAnsiX9_23(mbuf); if (rv) { DBG_INFO(AQHBCI_LOGDOMAIN, "Error unpadding message with ANSI X9.23 (%d)", rv); GWEN_Buffer_free(mbuf); return rv; } /* store crypter id */ AH_Msg_SetCrypterId(hmsg, crypterId); /* store new buffer inside message */ GWEN_Buffer_free(hmsg->origbuffer); hmsg->origbuffer=hmsg->buffer; GWEN_Buffer_Rewind(mbuf); hmsg->buffer=mbuf; return 0; } int AH_Msg_VerifyDdv(AH_MSG *hmsg, GWEN_DB_NODE *gr) { AH_HBCI *h; GWEN_LIST *sigheads; GWEN_LIST *sigtails; GWEN_DB_NODE *n; int nonSigHeads; int nSigheads; unsigned int dataBegin; char *dataStart; unsigned int dataLength; unsigned int i; AB_USER *u; GWEN_CRYPT_TOKEN *ct; const GWEN_CRYPT_TOKEN_CONTEXT *ctx; const GWEN_CRYPT_TOKEN_KEYINFO *ki; uint32_t keyId; int rv; uint32_t gid; assert(hmsg); h=AH_Dialog_GetHbci(hmsg->dialog); assert(h); u=AH_Dialog_GetDialogOwner(hmsg->dialog); assert(u); gid=0; /* get crypt token of signer */ rv=AB_Banking_GetCryptToken(AH_HBCI_GetBankingApi(h), AH_User_GetTokenType(u), AH_User_GetTokenName(u), &ct); if (rv) { DBG_INFO(AQHBCI_LOGDOMAIN, "Could not get crypt token for user \"%s\" (%d)", AB_User_GetUserId(u), rv); return rv; } /* open CryptToken if necessary */ if (!GWEN_Crypt_Token_IsOpen(ct)) { rv=GWEN_Crypt_Token_Open(ct, 0, gid); if (rv) { DBG_INFO(AQHBCI_LOGDOMAIN, "Could not open crypt token for user \"%s\" (%d)", AB_User_GetUserId(u), rv); return rv; } } /* get context and key info */ ctx=GWEN_Crypt_Token_GetContext(ct, AH_User_GetTokenContextId(u), gid); if (ctx==NULL) { DBG_INFO(AQHBCI_LOGDOMAIN, "Context %d not found on crypt token [%s:%s]", AH_User_GetTokenContextId(u), GWEN_Crypt_Token_GetTypeName(ct), GWEN_Crypt_Token_GetTokenName(ct)); return GWEN_ERROR_NOT_FOUND; } keyId=GWEN_Crypt_Token_Context_GetVerifyKeyId(ctx); ki=GWEN_Crypt_Token_GetKeyInfo(ct, keyId, 0xffffffff, gid); if (ki==NULL) { DBG_INFO(AQHBCI_LOGDOMAIN, "Keyinfo %04x not found on crypt token [%s:%s]", keyId, GWEN_Crypt_Token_GetTypeName(ct), GWEN_Crypt_Token_GetTokenName(ct)); return GWEN_ERROR_NOT_FOUND; } /* let's go */ sigheads=GWEN_List_new(); /* enumerate signature heads */ nonSigHeads=0; nSigheads=0; n=GWEN_DB_GetFirstGroup(gr); while (n) { if (strcasecmp(GWEN_DB_GroupName(n), "SigHead")==0) { /* found a signature head */ if (nonSigHeads) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Found some unsigned parts at the beginning"); GWEN_List_free(sigheads); return GWEN_ERROR_BAD_DATA; } GWEN_List_PushBack(sigheads, n); nSigheads++; } else if (strcasecmp(GWEN_DB_GroupName(n), "MsgHead")!=0) { if (nSigheads) break; nonSigHeads++; } n=GWEN_DB_GetNextGroup(n); } /* while */ if (!n) { if (nSigheads) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Found Signature heads but no other segments"); GWEN_List_free(sigheads); return GWEN_ERROR_BAD_DATA; } DBG_DEBUG(AQHBCI_LOGDOMAIN, "No signatures"); GWEN_List_free(sigheads); return 0; } /* store begin of signed data */ dataBegin=GWEN_DB_GetIntValue(n, "segment/pos", 0, 0); if (!dataBegin) { DBG_ERROR(AQHBCI_LOGDOMAIN, "No position specifications in segment"); GWEN_List_free(sigheads); return GWEN_ERROR_BAD_DATA; } /* now get first signature tail */ while (n) { if (strcasecmp(GWEN_DB_GroupName(n), "SigTail")==0) { unsigned int currpos; /* found a signature tail */ currpos=GWEN_DB_GetIntValue(n, "segment/pos", 0, 0); if (!currpos || dataBegin>currpos) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Bad position specification in Signature tail"); GWEN_List_free(sigheads); return GWEN_ERROR_BAD_DATA; } dataLength=currpos-dataBegin; break; } n=GWEN_DB_GetNextGroup(n); } /* while */ if (!n) { DBG_ERROR(AQHBCI_LOGDOMAIN, "No signature tail found"); GWEN_List_free(sigheads); return GWEN_ERROR_BAD_DATA; } sigtails=GWEN_List_new(); while (n) { if (strcasecmp(GWEN_DB_GroupName(n), "SigTail")!=0) break; GWEN_List_PushBack(sigtails, n); n=GWEN_DB_GetNextGroup(n); } /* while */ if (!n) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Message tail expected"); GWEN_List_free(sigheads); GWEN_List_free(sigtails); return GWEN_ERROR_BAD_DATA; } if (strcasecmp(GWEN_DB_GroupName(n), "MsgTail")!=0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Unexpected segment (msg tail expected)"); GWEN_List_free(sigheads); GWEN_List_free(sigtails); return GWEN_ERROR_BAD_DATA; } n=GWEN_DB_GetNextGroup(n); if (n) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Unexpected segment (end expected)"); GWEN_List_free(sigheads); GWEN_List_free(sigtails); return GWEN_ERROR_BAD_DATA; } if (GWEN_List_GetSize(sigheads)!= GWEN_List_GetSize(sigtails)) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Number of signature heads (%d) does not match " "number of signature tails (%d)", GWEN_List_GetSize(sigheads), GWEN_List_GetSize(sigtails)); GWEN_List_free(sigheads); GWEN_List_free(sigtails); return GWEN_ERROR_BAD_DATA; } /* ok, now verify all signatures */ dataStart=GWEN_Buffer_GetStart(hmsg->buffer)+dataBegin; for (i=0; i< GWEN_List_GetSize(sigtails); i++) { GWEN_DB_NODE *sighead; GWEN_DB_NODE *sigtail; const uint8_t *p; uint32_t l; int rv; uint8_t hash[20]; const char *signerId; /* get signature tail */ sigtail=(GWEN_DB_NODE *)GWEN_List_GetBack(sigtails); /* get corresponding signature head */ sighead=(GWEN_DB_NODE *)GWEN_List_GetFront(sigheads); if (!sighead || !sigtail) { DBG_ERROR(AQHBCI_LOGDOMAIN, "No signature head/tail left (internal error)"); GWEN_List_free(sigheads); GWEN_List_free(sigtails); return GWEN_ERROR_INTERNAL; } GWEN_List_PopBack(sigtails); GWEN_List_PopFront(sigheads); signerId=GWEN_DB_GetCharValue(sighead, "key/userid", 0, I18N("unknown")); /* some checks */ if (strcasecmp(GWEN_DB_GetCharValue(sighead, "ctrlref", 0, ""), GWEN_DB_GetCharValue(sigtail, "ctrlref", 0, ""))!=0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Non-matching signature tail"); GWEN_List_free(sigheads); GWEN_List_free(sigtails); return GWEN_ERROR_BAD_DATA; } /* hash signature head and data */ if (1) { GWEN_MDIGEST *md; /* hash sighead + data */ p=(const uint8_t *)GWEN_Buffer_GetStart(hmsg->buffer); p+=GWEN_DB_GetIntValue(sighead, "segment/pos", 0, 0); l=GWEN_DB_GetIntValue(sighead, "segment/length", 0, 0); md=GWEN_MDigest_Rmd160_new(); rv=GWEN_MDigest_Begin(md); if (rv==0) /* digest signature head */ rv=GWEN_MDigest_Update(md, p, l); if (rv==0) /* digest data */ rv=GWEN_MDigest_Update(md, (const uint8_t *)dataStart, dataLength); if (rv==0) rv=GWEN_MDigest_End(md); if (rv<0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Hash error (%d)", rv); GWEN_MDigest_free(md); GWEN_List_free(sigheads); GWEN_List_free(sigtails); return rv; } memmove(hash, GWEN_MDigest_GetDigestPtr(md), GWEN_MDigest_GetDigestSize(md)); GWEN_MDigest_free(md); } /* verify signature */ p=GWEN_DB_GetBinValue(sigtail, "signature", 0, 0, 0, &l); if (p && l) { GWEN_CRYPT_PADDALGO *algo; algo=GWEN_Crypt_PaddAlgo_new(GWEN_Crypt_PaddAlgoId_None); rv=GWEN_Crypt_Token_Verify(ct, keyId, algo, hash, 20, p, l, 0, gid); GWEN_Crypt_PaddAlgo_free(algo); if (rv) { if (rv==GWEN_ERROR_VERIFY) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Invalid signature of user \"%s\"", signerId); } else { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not verify data with medium of user \"%s\" (%d)", AB_User_GetUserId(u), rv); } GWEN_List_free(sigheads); GWEN_List_free(sigtails); return rv; } DBG_INFO(AQHBCI_LOGDOMAIN, "Message signed by \"%s\"", signerId); AH_Msg_AddSignerId(hmsg, signerId); } else { DBG_DEBUG(AQHBCI_LOGDOMAIN, "No signature"); GWEN_List_free(sigheads); GWEN_List_free(sigtails); return GWEN_ERROR_BAD_DATA; } DBG_DEBUG(AQHBCI_LOGDOMAIN, "Verification done"); } /* for */ GWEN_List_free(sigheads); GWEN_List_free(sigtails); return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/msglayer/Makefile.am0000664000175000017500000000347014576134106022476 00000000000000 AM_CFLAGS=-DBUILDING_AQBANKING @visibility_cflags@ AM_CPPFLAGS = -I$(top_srcdir)/src/libs -I$(top_builddir)/src/libs $(gwenhywfar_includes) \ -I$(srcdir)/../.. \ -I$(srcdir)/.. -I$(srcdir)/../banking \ -I$(srcdir)/../applayer \ -I$(srcdir)/../joblayer \ -I$(srcdir)/../tan \ -I$(aqbanking_symlinkdir) $(all_includes) \ -I$(top_srcdir)/src/libs/aqbanking EXTRA_DIST=\ msgcrypt.c \ msgcrypt_ddv.c \ dialog_hbci.c \ dialog_https.c DEFS+=-DAH_XMLDATADIR=\"$(aqbanking_data_searchdir)/aqbanking/backends/aqhbci\" noinst_LTLIBRARIES=libhbcimsg.la noinst_HEADERS=\ bpd_l.h \ bpd_p.h \ dialog_l.h \ dialog_p.h \ hbci_l.h \ hbci_p.h \ hbci-updates_l.h \ hbci-updates_p.h \ message_l.h \ message_p.h \ msgcrypt.h \ msgcrypt_rxh_common.h \ msgcrypt_rxh_encrypt.h \ msgcrypt_rxh_decrypt.h \ msgcrypt_rxh_verify.h \ msgcrypt_pintan.h \ msgcrypt_pintan_verify.h \ msgcrypt_pintan_sign.h \ msgcrypt_pintan_encrypt.h \ msgengine_l.h \ msgengine_p.h \ msgengine.h #iheaderdir=@aqbanking_headerdir_am@/aqhbci #iheader_HEADERS= libhbcimsg_la_SOURCES=\ bpd.c \ dialog.c \ hbci.c \ hbci-updates.c \ message.c \ msgcrypt_rxh_common.c \ msgcrypt_rxh_encrypt.c \ msgcrypt_rxh_decrypt.c \ msgcrypt_rxh_verify.c \ msgcrypt_pintan.c \ msgcrypt_pintan_verify.c \ msgcrypt_pintan_sign.c \ msgcrypt_pintan_encrypt.c \ msgengine.c sources: for f in $(libhbcimsg_la_SOURCES) $(EXTRA_DIST); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d sources; \ done typedefs: for d in $(SUBDIRS); do \ $(MAKE) -C $$d typedefs; \ done typefiles: $(typefiles) typemaker -d AQHBCI_API $(typefiles) cppcheck: for f in $(libhbcimsg_la_SOURCES); do \ cppcheck --force $$f ; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/msglayer/bpd.c0000664000175000017500000004212014043610745021343 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "bpd_p.h" #include "aqhbci_l.h" #include #include #include #include GWEN_LIST_FUNCTIONS(AH_BPD_ADDR, AH_BpdAddr); GWEN_LIST2_FUNCTIONS(AH_BPD_ADDR, AH_BpdAddr); AH_BPD *AH_Bpd_new() { AH_BPD *bpd; GWEN_NEW_OBJECT(AH_BPD, bpd); bpd->bpdVersion=1; bpd->bpdJobs=GWEN_DB_Group_new("bpdjobs"); bpd->addrList=AH_BpdAddr_List_new(); bpd->isDirty=0; return bpd; } void AH_Bpd_free(AH_BPD *bpd) { if (bpd) { DBG_DEBUG(AQHBCI_LOGDOMAIN, "Destroying AH_BPD"); free(bpd->bankName); free(bpd->bankAddr); GWEN_DB_Group_free(bpd->bpdJobs); AH_BpdAddr_List_free(bpd->addrList); GWEN_FREE_OBJECT(bpd); } } AH_BPD *AH_Bpd_dup(const AH_BPD *oldBpd) { AH_BPD *bpd; GWEN_DB_NODE *db; db=GWEN_DB_Group_new("tmp"); if (AH_Bpd_ToDb(oldBpd, db)) { DBG_INFO(AQHBCI_LOGDOMAIN, "here"); GWEN_DB_Group_free(db); return 0; } bpd=AH_Bpd_FromDb(db); GWEN_DB_Group_free(db); if (!bpd) { DBG_INFO(AQHBCI_LOGDOMAIN, "here"); return 0; } return bpd; } AH_BPD *AH_Bpd_FromDb(GWEN_DB_NODE *db) { GWEN_DB_NODE *gr; int i; const char *p; AH_BPD *bpd; GWEN_NEW_OBJECT(AH_BPD, bpd); bpd->addrList=AH_BpdAddr_List_new(); p=GWEN_DB_GetCharValue(db, "bankAddr", 0, 0); if (p) bpd->bankAddr=strdup(p); bpd->bankPort=GWEN_DB_GetIntValue(db, "bankPort", 0, 3000); p=GWEN_DB_GetCharValue(db, "addrType", 0, "tcp"); if (strcasecmp(p, "tcp")==0) bpd->addrType=AH_BPD_AddrTypeTCP; else if (strcasecmp(p, "btx")==0) bpd->addrType=AH_BPD_AddrTypeBTX; else if (strcasecmp(p, "ssl")==0) bpd->addrType=AH_BPD_AddrTypeSSL; else { DBG_WARN(AQHBCI_LOGDOMAIN, "Unsupported address type (%s), assuming TCP", p); bpd->addrType=AH_BPD_AddrTypeTCP; } p=GWEN_DB_GetCharValue(db, "bankName", 0, 0); if (p) bpd->bankName=strdup(p); bpd->jobTypesPerMsg=GWEN_DB_GetIntValue(db, "jobtypespermsg", 0, 0); bpd->maxMsgSize=GWEN_DB_GetIntValue(db, "maxmsgsize", 0, 0); bpd->bpdVersion=GWEN_DB_GetIntValue(db, "bpdversion", 0, 1); gr=GWEN_DB_GetGroup(db, GWEN_PATH_FLAGS_PATHMUSTEXIST, "bpdjobs"); if (gr) { bpd->bpdJobs=GWEN_DB_Group_dup(gr); } else bpd->bpdJobs=GWEN_DB_Group_new("bpdjobs"); /* read supported hbci versions */ for (i=0; ; i++) { int j; j=GWEN_DB_GetIntValue(db, "hbciversions", i, 0); if (j) { if (AH_Bpd_AddHbciVersion(bpd, j)) { DBG_WARN(AQHBCI_LOGDOMAIN, "Too many HBCI versions"); break; } } else break; } /* for */ /* read supported languages */ for (i=0; ; i++) { int j; j=GWEN_DB_GetIntValue(db, "languages", i, 0); if (j) { if (AH_Bpd_AddLanguage(bpd, j)) { DBG_WARN(AQHBCI_LOGDOMAIN, "Too many languages"); break; } } else break; } /* for */ /* store BPD addresses */ gr=GWEN_DB_GetGroup(db, GWEN_PATH_FLAGS_PATHMUSTEXIST, "addresses"); if (gr) { gr=GWEN_DB_FindFirstGroup(gr, "addr"); while (gr) { AH_BPD_ADDR *ba; ba=AH_BpdAddr_FromDb(gr); if (ba) AH_BpdAddr_List_Add(ba, bpd->addrList); else { DBG_WARN(AQHBCI_LOGDOMAIN, "Bad BPD address"); } gr=GWEN_DB_FindNextGroup(gr, "addr"); } } bpd->isDirty=0; return bpd; } int AH_Bpd_ToDb(const AH_BPD *bpd, GWEN_DB_NODE *db) { GWEN_DB_NODE *gr; unsigned int i; const char *p; AH_BPD_ADDR *ba; if (bpd->bankName) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_DEFAULT | GWEN_DB_FLAGS_OVERWRITE_VARS, "bankName", bpd->bankName); if (bpd->bankAddr) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "bankAddr", bpd->bankAddr); GWEN_DB_SetIntValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "bankPort", bpd->bankPort); switch (bpd->addrType) { case AH_BPD_AddrTypeTCP: p="tcp"; break; case AH_BPD_AddrTypeBTX: p="btx"; break; case AH_BPD_AddrTypeSSL: p="ssl"; break; default: DBG_ERROR(AQHBCI_LOGDOMAIN, "Unsupported address type (%d)", bpd->addrType); return -1; } GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_DEFAULT | GWEN_DB_FLAGS_OVERWRITE_VARS, "addrType", p); GWEN_DB_SetIntValue(db, GWEN_DB_FLAGS_DEFAULT | GWEN_DB_FLAGS_OVERWRITE_VARS, "jobtypespermsg", bpd->jobTypesPerMsg); GWEN_DB_SetIntValue(db, GWEN_DB_FLAGS_DEFAULT | GWEN_DB_FLAGS_OVERWRITE_VARS, "maxmsgsize", bpd->maxMsgSize); GWEN_DB_SetIntValue(db, GWEN_DB_FLAGS_DEFAULT | GWEN_DB_FLAGS_OVERWRITE_VARS, "bpdversion", bpd->bpdVersion); if (bpd->bpdJobs) { gr=GWEN_DB_GetGroup(db, GWEN_DB_FLAGS_OVERWRITE_GROUPS, "bpdjobs"); assert(gr); GWEN_DB_AddGroupChildren(gr, bpd->bpdJobs); } GWEN_DB_DeleteVar(db, "hbciversions"); for (i=0; ihbciVersions[i]; if (!j) break; GWEN_DB_SetIntValue(db, GWEN_DB_FLAGS_DEFAULT, "hbciversions", j); } GWEN_DB_DeleteVar(db, "languages"); for (i=0; ilanguages[i]; if (!j) break; GWEN_DB_SetIntValue(db, GWEN_DB_FLAGS_DEFAULT, "languages", j); } /* store BPD addresses */ ba=AH_BpdAddr_List_First(bpd->addrList); if (ba) { gr=GWEN_DB_GetGroup(db, GWEN_DB_FLAGS_OVERWRITE_GROUPS, "addresses"); while (ba) { GWEN_DB_NODE *dbA; dbA=GWEN_DB_GetGroup(gr, GWEN_PATH_FLAGS_CREATE_GROUP, "addr"); assert(dbA); if (AH_BpdAddr_ToDb(ba, dbA)) { DBG_INFO(AQHBCI_LOGDOMAIN, "here"); return -1; } ba=AH_BpdAddr_List_Next(ba); } } return 0; } int AH_Bpd_GetJobTypesPerMsg(const AH_BPD *bpd) { assert(bpd); return bpd->jobTypesPerMsg; } void AH_Bpd_SetJobTypesPerMsg(AH_BPD *bpd, int i) { assert(bpd); bpd->jobTypesPerMsg=i; bpd->isDirty=1; } int AH_Bpd_GetMaxMsgSize(const AH_BPD *bpd) { assert(bpd); return bpd->maxMsgSize; } void AH_Bpd_SetMaxMsgSize(AH_BPD *bpd, int i) { assert(bpd); bpd->maxMsgSize=i; bpd->isDirty=1; } int AH_Bpd_GetBpdVersion(const AH_BPD *bpd) { assert(bpd); return bpd->bpdVersion; } void AH_Bpd_SetBpdVersion(AH_BPD *bpd, int i) { assert(bpd); bpd->bpdVersion=i; bpd->isDirty=1; } GWEN_DB_NODE *AH_Bpd_GetBpdJobs(const AH_BPD *bpd, int hbciVersion) { GWEN_DB_NODE *gr; char numbuf[16]; assert(bpd); snprintf(numbuf, sizeof(numbuf), "%3d", hbciVersion); gr=GWEN_DB_GetGroup(bpd->bpdJobs, GWEN_PATH_FLAGS_NAMEMUSTEXIST, numbuf); if (gr) return gr; return bpd->bpdJobs; } void AH_Bpd_SetBpdJobs(AH_BPD *bpd, GWEN_DB_NODE *n) { assert(bpd); GWEN_DB_Group_free(bpd->bpdJobs); bpd->bpdJobs=n; bpd->isDirty=1; } void AH_Bpd_ClearBpdJobs(AH_BPD *bpd) { assert(bpd); GWEN_DB_ClearGroup(bpd->bpdJobs, 0); bpd->isDirty=1; } const int *AH_Bpd_GetHbciVersions(const AH_BPD *bpd) { assert(bpd); return bpd->hbciVersions; } int AH_Bpd_AddHbciVersion(AH_BPD *bpd, int i) { int j; assert(bpd); assert(i); for (j=0; jhbciVersions[j]==i) { DBG_ERROR(AQHBCI_LOGDOMAIN, "HBCI version %d already enlisted", i); return -1; } if (bpd->hbciVersions[j]==0) { bpd->hbciVersions[j]=i; bpd->isDirty=1; return 0; } } DBG_ERROR(AQHBCI_LOGDOMAIN, "Too many HBCI versions."); return -1; } void AH_Bpd_ClearHbciVersions(AH_BPD *bpd) { unsigned int i; assert(bpd); /* note: i<= is correct here, since the field size is k+1 */ for (i=0; i<=AH_BPD_MAXHBCIVERSIONS; i++) bpd->hbciVersions[i]=0; bpd->isDirty=1; } int AH_Bpd_AddLanguage(AH_BPD *bpd, int i) { int j; assert(bpd); assert(i); for (j=0; jlanguages[j]==i) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Language %d already enlisted", i); return -1; } if (bpd->languages[j]==0) { bpd->languages[j]=i; bpd->isDirty=1; return 0; } } DBG_ERROR(AQHBCI_LOGDOMAIN, "Too many languages."); return -1; } const int *AH_Bpd_GetLanguages(const AH_BPD *bpd) { assert(bpd); return bpd->languages; } void AH_Bpd_ClearLanguages(AH_BPD *bpd) { unsigned int i; assert(bpd); /* note: i<= is correct here, since the field size is k+1 */ for (i=0; i<=AH_BPD_MAXLANGUAGES; i++) bpd->languages[i]=0; bpd->isDirty=1; } int AH_Bpd_IsDirty(const AH_BPD *bpd) { assert(bpd); if (bpd->isDirty) return 1; return 0; } void AH_Bpd_SetIsDirty(AH_BPD *bpd, int dirty) { assert(bpd); bpd->isDirty=dirty; } void AH_Bpd_Dump(const AH_BPD *bpd, int insert) { uint32_t k; unsigned int i; for (k=0; kbpdVersion); for (k=0; kjobTypesPerMsg); for (k=0; kmaxMsgSize); for (k=0; khbciVersions[i]) fprintf(stderr, "%d ", bpd->hbciVersions[i]); } fprintf(stderr, "\n"); for (k=0; klanguages[i]) fprintf(stderr, "%d ", bpd->languages[i]); } fprintf(stderr, "\n"); for (k=0; kbpdJobs, insert+17); } const char *AH_Bpd_GetBankAddr(const AH_BPD *bpd) { assert(bpd); return bpd->bankAddr; } void AH_Bpd_SetBankAddr(AH_BPD *bpd, const char *addr) { assert(bpd); assert(addr); free(bpd->bankAddr); bpd->bankAddr=strdup(addr); bpd->isDirty=1; } int AH_Bpd_GetBankPort(const AH_BPD *bpd) { assert(bpd); return bpd->bankPort; } void AH_Bpd_SetBankPort(AH_BPD *bpd, int p) { assert(bpd); bpd->bankPort=p; bpd->isDirty=1; } AH_BPD_ADDR_TYPE AH_Bpd_GetAddrType(const AH_BPD *bpd) { assert(bpd); return bpd->addrType; } void AH_Bpd_SetAddrType(AH_BPD *bpd, AH_BPD_ADDR_TYPE i) { bpd->addrType=i; bpd->isDirty=1; } const char *AH_Bpd_GetBankName(const AH_BPD *bpd) { assert(bpd); return bpd->bankName; } void AH_Bpd_SetBankName(AH_BPD *bpd, const char *s) { assert(bpd); assert(s); free(bpd->bankName); bpd->bankName=strdup(s); bpd->isDirty=1; } void AH_Bpd_ClearAddr(AH_BPD *bpd) { assert(bpd); AH_BpdAddr_List_Clear(bpd->addrList); } void AH_Bpd_AddAddr(AH_BPD *bpd, AH_BPD_ADDR *ba) { assert(bpd); assert(ba); AH_BpdAddr_List_Add(ba, bpd->addrList); } AH_BPD_ADDR_LIST *AH_Bpd_GetAddrList(const AH_BPD *bpd) { assert(bpd); return bpd->addrList; } AH_BPD_ADDR *AH_BpdAddr_new() { AH_BPD_ADDR *ba; GWEN_NEW_OBJECT(AH_BPD_ADDR, ba); GWEN_LIST_INIT(AH_BPD_ADDR, ba); return ba; } void AH_BpdAddr_free(AH_BPD_ADDR *ba) { if (ba) { GWEN_LIST_FINI(AH_BPD_ADDR, ba); free(ba->addr); free(ba->suffix); GWEN_FREE_OBJECT(ba); } } AH_BPD_ADDR *AH_BpdAddr_dup(const AH_BPD_ADDR *ba) { AH_BPD_ADDR *newBa; assert(ba); newBa=AH_BpdAddr_new(); newBa->type=ba->type; if (ba->addr) newBa->addr=strdup(ba->addr); if (ba->suffix) newBa->suffix=strdup(ba->suffix); newBa->ftype=ba->ftype; newBa->fversion=ba->fversion; return newBa; } AH_BPD_ADDR_TYPE AH_BpdAddr_GetType(const AH_BPD_ADDR *ba) { assert(ba); return ba->type; } void AH_BpdAddr_SetType(AH_BPD_ADDR *ba, AH_BPD_ADDR_TYPE t) { assert(ba); ba->type=t; } const char *AH_BpdAddr_GetAddr(const AH_BPD_ADDR *ba) { assert(ba); return ba->addr; } void AH_BpdAddr_SetAddr(AH_BPD_ADDR *ba, const char *s) { assert(ba); free(ba->addr); if (s) ba->addr=strdup(s); else ba->addr=0; } const char *AH_BpdAddr_GetSuffix(const AH_BPD_ADDR *ba) { assert(ba); return ba->suffix; } void AH_BpdAddr_SetSuffix(AH_BPD_ADDR *ba, const char *s) { assert(ba); free(ba->suffix); if (s) ba->suffix=strdup(s); else ba->suffix=0; } AH_BPD_FILTER_TYPE AH_BpdAddr_GetFType(const AH_BPD_ADDR *ba) { assert(ba); return ba->ftype; } void AH_BpdAddr_SetFType(AH_BPD_ADDR *ba, AH_BPD_FILTER_TYPE t) { assert(ba); ba->ftype=t; } int AH_BpdAddr_GetFVersion(const AH_BPD_ADDR *ba) { assert(ba); return ba->fversion; } void AH_BpdAddr_SetFVersion(AH_BPD_ADDR *ba, int i) { assert(ba); ba->fversion=i; } AH_BPD_ADDR *AH_BpdAddr_FromDb(GWEN_DB_NODE *db) { AH_BPD_ADDR *ba; const char *p; ba=AH_BpdAddr_new(); p=GWEN_DB_GetCharValue(db, "type", 0, 0); if (!p) { int i; i=GWEN_DB_GetIntValue(db, "type", 0, -1); if (i==-1) { DBG_ERROR(AQHBCI_LOGDOMAIN, "bad BPD address"); GWEN_DB_Dump(db, 2); AH_BpdAddr_free(ba); return 0; } switch (i) { case 1: ba->type=AH_BPD_AddrTypeBTX; break; case 2: ba->type=AH_BPD_AddrTypeTCP; break; case 3: ba->type=AH_BPD_AddrTypeSSL; break; default: DBG_ERROR(AQHBCI_LOGDOMAIN, "bad BPD address: unknown type %i", i); ba->type=AH_BPD_AddrTypeUnknown; break; GWEN_DB_Dump(db, 2); AH_BpdAddr_free(ba); return 0; } } else { if (strcasecmp(p, "tcp")==0) ba->type=AH_BPD_AddrTypeTCP; else if (strcasecmp(p, "btx")==0) ba->type=AH_BPD_AddrTypeBTX; else if (strcasecmp(p, "ssl")==0) ba->type=AH_BPD_AddrTypeSSL; else { DBG_ERROR(AQHBCI_LOGDOMAIN, "bad BPD address: bad type %s", p); GWEN_DB_Dump(db, 2); AH_BpdAddr_free(ba); return 0; } } p=GWEN_DB_GetCharValue(db, "filter", 0, 0); if (p) { if (strcasecmp(p, "mim")==0) ba->ftype=AH_BPD_FilterTypeBase64; else if (strcasecmp(p, "uue")==0) ba->ftype=AH_BPD_FilterTypeUUE; else if (strcasecmp(p, "none")==0) ba->ftype=AH_BPD_FilterTypeNone; else { DBG_ERROR(AQHBCI_LOGDOMAIN, "bad BPD address: bad filter type %s", p); GWEN_DB_Dump(db, 2); AH_BpdAddr_free(ba); return 0; } ba->fversion=GWEN_DB_GetIntValue(db, "fversion", 0, 0); } else { ba->ftype=AH_BPD_FilterTypeNone; } p=GWEN_DB_GetCharValue(db, "address", 0, 0); if (!p) { DBG_ERROR(AQHBCI_LOGDOMAIN, "bad BPD address: no address"); GWEN_DB_Dump(db, 2); AH_BpdAddr_free(ba); return 0; } ba->addr=strdup(p); p=GWEN_DB_GetCharValue(db, "suffix", 0, 0); if (p) ba->suffix=strdup(p); return ba; } int AH_BpdAddr_ToDb(const AH_BPD_ADDR *ba, GWEN_DB_NODE *db) { assert(ba); assert(db); if (!ba->addr) { DBG_ERROR(AQHBCI_LOGDOMAIN, "No address in BPD address"); return -1; } switch (ba->type) { case AH_BPD_AddrTypeTCP: GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "type", "tcp"); break; case AH_BPD_AddrTypeBTX: GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "type", "btx"); break; case AH_BPD_AddrTypeSSL: GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "type", "ssl"); break; default: GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "type", "unknown"); break; } switch (ba->ftype) { case AH_BPD_FilterTypeBase64: GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "ftype", "mim"); break; case AH_BPD_FilterTypeUUE: GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "ftype", "uue"); break; case AH_BPD_FilterTypeNone: default: GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "filter", "none"); break; } GWEN_DB_SetIntValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "fversion", ba->fversion); if (ba->addr) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "address", ba->addr); if (ba->suffix) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "suffix", ba->suffix); return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/msglayer/msgcrypt_pintan.c0000664000175000017500000001231514546575650024037 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2023 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "msgcrypt_pintan.h" #include "msgcrypt.h" #include "message_p.h" #include "aqhbci/aqhbci_l.h" #include "aqhbci/banking/user_l.h" #include /* ------------------------------------------------------------------------------------------------ * forward declarations * ------------------------------------------------------------------------------------------------ */ /* ------------------------------------------------------------------------------------------------ * implementations * ------------------------------------------------------------------------------------------------ */ int AH_MsgPinTan_PrepareCryptoSeg(AH_MSG *hmsg, AB_USER *u, GWEN_DB_NODE *cfg, int crypt, int createCtrlRef) { char sdate[9]; char stime[7]; char ctrlref[15]; struct tm *lt; time_t tt; const char *userId; const char *peerId; assert(hmsg); assert(u); assert(cfg); userId=AB_User_GetUserId(u); assert(userId); assert(*userId); peerId=AH_User_GetPeerId(u); if (!peerId || *peerId==0) peerId=userId; tt=time(0); lt=localtime(&tt); if (createCtrlRef) { int rv; rv=AH_Msg_CreateCtrlRef(ctrlref, sizeof(ctrlref)); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } GWEN_DB_SetCharValue(cfg, GWEN_DB_FLAGS_DEFAULT, "ctrlref", ctrlref); } /* create date */ if (!strftime(sdate, sizeof(sdate), "%Y%m%d", lt)) { DBG_INFO(AQHBCI_LOGDOMAIN, "Date string too long"); return GWEN_ERROR_INTERNAL; } /* create time */ if (!strftime(stime, sizeof(stime), "%H%M%S", lt)) { DBG_INFO(AQHBCI_LOGDOMAIN, "Date string too long"); return GWEN_ERROR_INTERNAL; } GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "SecDetails/dir", 1); GWEN_DB_SetCharValue(cfg, GWEN_DB_FLAGS_DEFAULT, "SecStamp/date", sdate); GWEN_DB_SetCharValue(cfg, GWEN_DB_FLAGS_DEFAULT, "SecStamp/time", stime); GWEN_DB_SetCharValue(cfg, GWEN_DB_FLAGS_DEFAULT, "key/bankcode", AB_User_GetBankCode(u)); GWEN_DB_SetCharValue(cfg, GWEN_DB_FLAGS_DEFAULT, "key/userid", crypt?peerId:userId); GWEN_DB_SetCharValue(cfg, GWEN_DB_FLAGS_DEFAULT, "key/keytype", crypt?"V":"S"); GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "key/keynum", 0); GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "key/keyversion", 0); GWEN_DB_SetCharValue(cfg, GWEN_DB_FLAGS_DEFAULT, "secProfile/code", "PIN"); if (hmsg->itanMethod==999) { DBG_INFO(AQHBCI_LOGDOMAIN, "Using itanMethod 999"); } /* if (crypt) GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "secProfile/version", 1); else */ GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "secProfile/version", (hmsg->itanMethod==999)?1:2); return 0; } int AH_Msg_DecryptPinTan(AH_MSG *hmsg, GWEN_DB_NODE *gr) { AH_HBCI *h; GWEN_BUFFER *mbuf; uint32_t l; const uint8_t *p; GWEN_MSGENGINE *e; AB_USER *u; const char *peerId; // uint32_t uFlags; GWEN_DB_NODE *nhead=NULL; GWEN_DB_NODE *ndata=NULL; const char *crypterId; assert(hmsg); h=AH_Dialog_GetHbci(hmsg->dialog); assert(h); e=AH_Dialog_GetMsgEngine(hmsg->dialog); assert(e); GWEN_MsgEngine_SetMode(e, "pintan"); u=AH_Dialog_GetDialogOwner(hmsg->dialog); // uFlags=AH_User_GetFlags(u); peerId=AH_User_GetPeerId(u); if (!peerId || *peerId==0) peerId=AB_User_GetUserId(u); /* get encrypted session key */ nhead=GWEN_DB_GetGroup(gr, GWEN_DB_FLAGS_DEFAULT | GWEN_PATH_FLAGS_NAMEMUSTEXIST, "CryptHead"); if (!nhead) { DBG_ERROR(AQHBCI_LOGDOMAIN, "No crypt head"); return GWEN_ERROR_BAD_DATA; } ndata=GWEN_DB_GetGroup(gr, GWEN_DB_FLAGS_DEFAULT | GWEN_PATH_FLAGS_NAMEMUSTEXIST, "CryptData"); if (!ndata) { DBG_ERROR(AQHBCI_LOGDOMAIN, "No crypt data"); return GWEN_ERROR_BAD_DATA; } crypterId=GWEN_DB_GetCharValue(nhead, "key/userId", 0, I18N("unknown")); /* get encrypted data */ p=GWEN_DB_GetBinValue(ndata, "CryptData", 0, 0, 0, &l); if (!p || !l) { DBG_ERROR(AQHBCI_LOGDOMAIN, "No crypt data"); return GWEN_ERROR_BAD_DATA; } /* decipher message with session key */ mbuf=GWEN_Buffer_new(0, l, 0, 1); GWEN_Buffer_AppendBytes(mbuf, (const char *)p, l); /* store crypter id */ AH_Msg_SetCrypterId(hmsg, crypterId); /* store new buffer inside message */ GWEN_Buffer_free(hmsg->origbuffer); hmsg->origbuffer=hmsg->buffer; GWEN_Buffer_Rewind(mbuf); hmsg->buffer=mbuf; return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/msglayer/msgcrypt.c0000664000175000017500000002043114576127360022456 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2023 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #include "msgcrypt.h" #include "msgcrypt_rxh_common.h" #include "msgcrypt_rxh_decrypt.h" #include "msgcrypt_rxh_encrypt.h" #include "msgcrypt_rxh_verify.h" #include "msgcrypt_pintan.h" #include "msgcrypt_pintan_verify.h" #include "msgcrypt_pintan_sign.h" #include "msgcrypt_pintan_encrypt.h" int AH_Msg__Sign(AH_MSG *hmsg, GWEN_BUFFER *rawBuf, const char *signer) { AB_USER *u; u=AH_Dialog_GetDialogOwner(hmsg->dialog); assert(u); switch (AH_User_GetCryptMode(u)) { case AH_CryptMode_Ddv: return AH_Msg_SignDdv(hmsg, rawBuf, signer); case AH_CryptMode_Rdh: case AH_CryptMode_Rah: return AH_Msg_SignRxh(hmsg, rawBuf, signer); case AH_CryptMode_Pintan: return AH_Msg_SignPinTan(hmsg, rawBuf, signer); default: DBG_ERROR(AQHBCI_LOGDOMAIN, "CryptMode %d not supported", AH_User_GetCryptMode(u)); return GWEN_ERROR_NOT_SUPPORTED; } } int AH_Msg__Encrypt(AH_MSG *hmsg) { AB_USER *u; u=AH_Dialog_GetDialogOwner(hmsg->dialog); assert(u); switch (AH_User_GetCryptMode(u)) { case AH_CryptMode_Ddv: return AH_Msg_EncryptDdv(hmsg); case AH_CryptMode_Rdh: case AH_CryptMode_Rah: return AH_Msg_EncryptRxh(hmsg); case AH_CryptMode_Pintan: return AH_Msg_EncryptPinTan(hmsg); default: DBG_ERROR(AQHBCI_LOGDOMAIN, "CryptMode %d not supported", AH_User_GetCryptMode(u)); return GWEN_ERROR_NOT_SUPPORTED; } } int AH_Msg__Decrypt(AH_MSG *hmsg, GWEN_DB_NODE *gr) { AB_USER *u; u=AH_Dialog_GetDialogOwner(hmsg->dialog); assert(u); switch (AH_User_GetCryptMode(u)) { case AH_CryptMode_Ddv: return AH_Msg_DecryptDdv(hmsg, gr); case AH_CryptMode_Rdh: case AH_CryptMode_Rah: return AH_Msg_DecryptRxh(hmsg, gr); case AH_CryptMode_Pintan: return AH_Msg_DecryptPinTan(hmsg, gr); default: DBG_ERROR(AQHBCI_LOGDOMAIN, "CryptMode %d not supported", AH_User_GetCryptMode(u)); return GWEN_ERROR_NOT_SUPPORTED; } } int AH_Msg__Verify(AH_MSG *hmsg, GWEN_DB_NODE *gr) { AB_USER *u; u=AH_Dialog_GetDialogOwner(hmsg->dialog); assert(u); switch (AH_User_GetCryptMode(u)) { case AH_CryptMode_Ddv: return AH_Msg_VerifyDdv(hmsg, gr); case AH_CryptMode_Rdh: case AH_CryptMode_Rah: return AH_Msg_VerifyRxh(hmsg, gr); case AH_CryptMode_Pintan: return AH_Msg_VerifyPinTan(hmsg, gr); default: DBG_ERROR(AQHBCI_LOGDOMAIN, "CryptMode %d not supported", AH_User_GetCryptMode(u)); return GWEN_ERROR_NOT_SUPPORTED; } } /* helper functions */ int AH_Msg_SampleSigHeadsAndTailsFromDecodedMsg(GWEN_DB_NODE *gr, GWEN_LIST *sigheads, GWEN_LIST *sigtails) { GWEN_DB_NODE *n; n=GWEN_DB_GetFirstGroup(gr); if (n && strcasecmp(GWEN_DB_GroupName(n), "MsgHead")==0) n=GWEN_DB_GetNextGroup(n); /* skip MsgHead, if any */ while (n) { if (strcasecmp(GWEN_DB_GroupName(n), "SigHead")==0) { DBG_INFO(AQHBCI_LOGDOMAIN, "Adding signature head"); GWEN_List_PushBack(sigheads, n); } else break; n=GWEN_DB_GetNextGroup(n); } /* while */ if (GWEN_List_GetSize(sigheads)<1) { DBG_INFO(AQHBCI_LOGDOMAIN, "No signatures"); return 0; } if (n==NULL) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Found signature heads but no other segments"); return GWEN_ERROR_BAD_DATA; } /* find first signature tail */ while (n) { if (strcasecmp(GWEN_DB_GroupName(n), "SigTail")==0) break; n=GWEN_DB_GetNextGroup(n); } /* while */ if (!n) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Have signature heads but no signature tails"); return GWEN_ERROR_BAD_DATA; } /* sample signature tails */ while (n) { if (strcasecmp(GWEN_DB_GroupName(n), "SigTail")!=0) break; GWEN_List_PushBack(sigtails, n); n=GWEN_DB_GetNextGroup(n); } /* while */ if (!n) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Message tail expected"); return GWEN_ERROR_BAD_DATA; } if (strcasecmp(GWEN_DB_GroupName(n), "MsgTail")!=0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Unexpected segment (msg tail expected)"); return GWEN_ERROR_BAD_DATA; } n=GWEN_DB_GetNextGroup(n); if (n) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Unexpected segment (end expected)"); return GWEN_ERROR_BAD_DATA; } if (GWEN_List_GetSize(sigheads)!=GWEN_List_GetSize(sigtails)) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Number of signature heads (%d) does not match number of signature tails (%d)", GWEN_List_GetSize(sigheads), GWEN_List_GetSize(sigtails)); return GWEN_ERROR_BAD_DATA; } return 0; } int AH_Msg_GetStartPosOfSignedData(const GWEN_LIST *sigheads) { GWEN_DB_NODE *n; n=(GWEN_DB_NODE *)GWEN_List_GetBack(sigheads); /* look behind last signature head */ if (n) { int segBegin; int segLen; segBegin=GWEN_DB_GetIntValue(n, "segment/pos", 0, 0); segLen=GWEN_DB_GetIntValue(n, "segment/length", 0, 0); if (!segLen) { DBG_ERROR(AQHBCI_LOGDOMAIN, "No length specification in segment"); return GWEN_ERROR_BAD_DATA; } return segBegin+segLen; } else { DBG_ERROR(AQHBCI_LOGDOMAIN, "No signature head"); return GWEN_ERROR_INVALID; } } int AH_Msg_GetFirstPosBehindSignedData(const GWEN_LIST *sigtails) { GWEN_DB_NODE *n; n=(GWEN_DB_NODE *)GWEN_List_GetFront(sigtails); if (n) { int segBegin; int segLen; segBegin=GWEN_DB_GetIntValue(n, "segment/pos", 0, 0); segLen=GWEN_DB_GetIntValue(n, "segment/length", 0, 0); if (!segLen) { DBG_ERROR(AQHBCI_LOGDOMAIN, "No length specification in segment"); return GWEN_ERROR_BAD_DATA; } return segBegin; } else { DBG_ERROR(AQHBCI_LOGDOMAIN, "No signature head"); return GWEN_ERROR_INVALID; } } int AH_Msg_VerifyWithCallback(AH_MSG *hmsg, GWEN_DB_NODE *dbParsedMsg, AH_MSG_VERIFY_SIGNATURES_FN verifyCallback) { AH_HBCI *h; GWEN_LIST *sigheads; GWEN_LIST *sigtails; unsigned int signedDataBeginPos; unsigned int signedDataLength; AB_USER *u; int rv; assert(hmsg); h=AH_Dialog_GetHbci(hmsg->dialog); assert(h); u=AH_Dialog_GetDialogOwner(hmsg->dialog); assert(u); #if 0 DBG_ERROR(AQHBCI_LOGDOMAIN, "Verifying message with these segments:"); GWEN_DB_Dump(dbParsedMsg, 2); #endif sigheads=GWEN_List_new(); sigtails=GWEN_List_new(); rv=AH_Msg_SampleSigHeadsAndTailsFromDecodedMsg(dbParsedMsg, sigheads, sigtails); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); GWEN_List_free(sigtails); GWEN_List_free(sigheads); return rv; } if (GWEN_List_GetSize(sigheads)==0) { DBG_DEBUG(AQHBCI_LOGDOMAIN, "No signatures"); GWEN_List_free(sigtails); GWEN_List_free(sigheads); return 0; } rv=AH_Msg_GetStartPosOfSignedData(sigheads); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); GWEN_List_free(sigtails); GWEN_List_free(sigheads); return GWEN_ERROR_GENERIC; } signedDataBeginPos=(unsigned int) rv; rv=AH_Msg_GetFirstPosBehindSignedData(sigtails); if (rv<0 || ((unsigned int)rv) #include #include #include typedef enum { AH_BPD_AddrTypeTCP=0, AH_BPD_AddrTypeBTX, AH_BPD_AddrTypeSSL, AH_BPD_AddrTypeUnknown=99 } AH_BPD_ADDR_TYPE; typedef enum { AH_BPD_FilterTypeNone=0, AH_BPD_FilterTypeBase64, AH_BPD_FilterTypeUUE } AH_BPD_FILTER_TYPE; typedef struct AH_BPD AH_BPD; typedef struct AH_BPD_ADDR AH_BPD_ADDR; GWEN_LIST_FUNCTION_LIB_DEFS(AH_BPD_ADDR, AH_BpdAddr, AQHBCI_API); GWEN_LIST2_FUNCTION_LIB_DEFS(AH_BPD_ADDR, AH_BpdAddr, AQHBCI_API); AH_BPD *AH_Bpd_new(); void AH_Bpd_free(AH_BPD *bpd); AH_BPD *AH_Bpd_dup(const AH_BPD *oldBpd); AH_BPD *AH_Bpd_FromDb(GWEN_DB_NODE *db); int AH_Bpd_ToDb(const AH_BPD *bpd, GWEN_DB_NODE *db); int AH_Bpd_GetBpdVersion(const AH_BPD *bpd); void AH_Bpd_SetBpdVersion(AH_BPD *bpd, int i); GWEN_DB_NODE *AH_Bpd_GetBpdJobs(const AH_BPD *bpd, int hbciVersion); void AH_Bpd_SetBpdJobs(AH_BPD *bpd, GWEN_DB_NODE *n); void AH_Bpd_ClearBpdJobs(AH_BPD *bpd); int AH_Bpd_GetJobTypesPerMsg(const AH_BPD *bpd); void AH_Bpd_SetJobTypesPerMsg(AH_BPD *bpd, int i); int AH_Bpd_GetMaxMsgSize(const AH_BPD *bpd); void AH_Bpd_SetMaxMsgSize(AH_BPD *bpd, int i); /** * Returns a NULL terminated list of HBCI versions supported by the server. */ const int *AH_Bpd_GetHbciVersions(const AH_BPD *bpd); int AH_Bpd_AddHbciVersion(AH_BPD *bpd, int i); void AH_Bpd_ClearHbciVersions(AH_BPD *bpd); /** * Returns a NULL terminated list of languages supported by the server. */ const int *AH_Bpd_GetLanguages(const AH_BPD *bpd); int AH_Bpd_AddLanguage(AH_BPD *bpd, int i); void AH_Bpd_ClearLanguages(AH_BPD *bpd); const char *AH_Bpd_GetBankAddr(const AH_BPD *bpd); void AH_Bpd_SetBankAddr(AH_BPD *bpd, const char *addr); int AH_Bpd_GetBankPort(const AH_BPD *bpd); void AH_Bpd_SetBankPort(AH_BPD *bpd, int p); AH_BPD_ADDR_TYPE AH_Bpd_GetAddrType(const AH_BPD *bpd); void AH_Bpd_SetAddrType(AH_BPD *bpd, AH_BPD_ADDR_TYPE i); const char *AH_Bpd_GetBankName(const AH_BPD *bpd); void AH_Bpd_SetBankName(AH_BPD *bpd, const char *s); int AH_Bpd_IsDirty(const AH_BPD *bpd); void AH_Bpd_SetIsDirty(AH_BPD *bpd, int dirty); void AH_Bpd_Dump(const AH_BPD *bpd, int insert); void AH_Bpd_ClearAddr(AH_BPD *bpd); /** takes over ownership of the given BPD address */ void AH_Bpd_AddAddr(AH_BPD *bpd, AH_BPD_ADDR *ba); AH_BPD_ADDR_LIST *AH_Bpd_GetAddrList(const AH_BPD *bpd); AH_BPD_ADDR *AH_BpdAddr_new(); void AH_BpdAddr_free(AH_BPD_ADDR *ba); AH_BPD_ADDR *AH_BpdAddr_dup(const AH_BPD_ADDR *ba); AH_BPD_ADDR *AH_BpdAddr_FromDb(GWEN_DB_NODE *db); int AH_BpdAddr_ToDb(const AH_BPD_ADDR *ba, GWEN_DB_NODE *db); AH_BPD_ADDR_TYPE AH_BpdAddr_GetType(const AH_BPD_ADDR *ba); void AH_BpdAddr_SetType(AH_BPD_ADDR *ba, AH_BPD_ADDR_TYPE t); const char *AH_BpdAddr_GetAddr(const AH_BPD_ADDR *ba); void AH_BpdAddr_SetAddr(AH_BPD_ADDR *ba, const char *s); const char *AH_BpdAddr_GetSuffix(const AH_BPD_ADDR *ba); void AH_BpdAddr_SetSuffix(AH_BPD_ADDR *ba, const char *s); AH_BPD_FILTER_TYPE AH_BpdAddr_GetFType(const AH_BPD_ADDR *ba); void AH_BpdAddr_SetFType(AH_BPD_ADDR *ba, AH_BPD_FILTER_TYPE t); int AH_BpdAddr_GetFVersion(const AH_BPD_ADDR *ba); void AH_BpdAddr_SetFVersion(AH_BPD_ADDR *ba, int i); #endif /* AH_BPD_H */ aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/msglayer/msgcrypt_pintan_encrypt.c0000664000175000017500000000620714546575650025606 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2023 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "aqhbci/msglayer/msgcrypt_pintan_sign.h" #include "aqhbci/msglayer/msgcrypt.h" #include "aqhbci/banking/user_l.h" #include "message_p.h" #include "aqbanking/i18n_l.h" #include "aqbanking/banking_be.h" /* ------------------------------------------------------------------------------------------------ * forward declarations * ------------------------------------------------------------------------------------------------ */ /* ------------------------------------------------------------------------------------------------ * implementations * ------------------------------------------------------------------------------------------------ */ int AH_Msg_EncryptPinTan(AH_MSG *hmsg) { AH_HBCI *h; GWEN_DB_NODE *cfg; GWEN_BUFFER *hbuf; int rv; const char *p; GWEN_MSGENGINE *e; AB_USER *u; assert(hmsg); h=AH_Dialog_GetHbci(hmsg->dialog); assert(h); e=AH_Dialog_GetMsgEngine(hmsg->dialog); assert(e); GWEN_MsgEngine_SetMode(e, "pintan"); u=AH_Dialog_GetDialogOwner(hmsg->dialog); /* buffer for final message */ hbuf=GWEN_Buffer_new(0, 256, 0, 1); /* create crypt head */ cfg=GWEN_DB_Group_new("crypthead"); GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "head/seq", 998); rv=AH_MsgPinTan_PrepareCryptoSeg(hmsg, u, cfg, 1, 0); if (rv) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); GWEN_DB_Group_free(cfg); GWEN_Buffer_free(hbuf); return rv; } /* store system id */ if (!hmsg->noSysId) p=AH_User_GetSystemId(u); else p=NULL; GWEN_DB_SetCharValue(cfg, GWEN_DB_FLAGS_DEFAULT, "SecDetails/SecId", p?p:"0"); GWEN_DB_SetBinValue(cfg, GWEN_DB_FLAGS_DEFAULT, "CryptAlgo/MsgKey", "XXXXXXXX", 8); GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "CryptAlgo/keytype", 5); rv=AH_Msg_GenerateAndAddSegment(e, "CryptHead", cfg, hbuf); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); GWEN_DB_Group_free(cfg); GWEN_Buffer_free(hbuf); return GWEN_ERROR_INTERNAL; } GWEN_DB_Group_free(cfg); /* create cryptdata */ cfg=GWEN_DB_Group_new("cryptdata"); GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "head/seq", 999); GWEN_DB_SetBinValue(cfg, GWEN_DB_FLAGS_DEFAULT, "cryptdata", GWEN_Buffer_GetStart(hmsg->buffer), GWEN_Buffer_GetUsedBytes(hmsg->buffer)); rv=AH_Msg_GenerateAndAddSegment(e, "CryptData", cfg, hbuf); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(hbuf); GWEN_DB_Group_free(cfg); return GWEN_ERROR_INTERNAL; } GWEN_DB_Group_free(cfg); /* replace existing buffer by encrypted one */ GWEN_Buffer_free(hmsg->buffer); hmsg->buffer=hbuf; return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/msglayer/msgengine_l.h0000664000175000017500000000124314043610745023073 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Mon Mar 01 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_MSGENGINE_L_H #define AH_MSGENGINE_L_H #include "msgengine.h" void AH_MsgEngine_SetUser(GWEN_MSGENGINE *e, AB_USER *u); #endif /* AH_MSGENGINE_H */ aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/msglayer/hbci_p.h0000664000175000017500000000276514043610745022042 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWHBCI_HBCI_P_H #define GWHBCI_HBCI_P_H #include "hbci_l.h" /* Note: We use the key "AqBanking" because from the windows registry * point of view, these plugins all belong to the large AqBanking * package. */ #define AH_REGKEY_PATHS "Software\\AqBanking\\Paths" #define AH_REGKEY_XMLDATADIR "xmldatadir" #define AH_PM_LIBNAME "aqhbci" #define AH_PM_XMLDATADIR "xmldatadir" #define AH_HBCI_DEFAULT_CONNECT_TIMEOUT 30 #define AH_HBCI_DEFAULT_TRANSFER_TIMEOUT 60 struct AH_HBCI { AB_BANKING *banking; AB_PROVIDER *provider; char *productVersion; GWEN_XMLNODE *defs; uint32_t counter; GWEN_DB_NODE *sharedRuntimeData; int transferTimeout; int connectTimeout; uint32_t lastVersion; GWEN_DB_NODE *dbProviderConfig; }; static int AH_HBCI_SaveSettings(const char *path, GWEN_DB_NODE *db); #if 0 static GWEN_DB_NODE *AH_HBCI_LoadSettings(const char *path); #endif static int AH_HBCI_AddDefinitions(AH_HBCI *hbci, GWEN_XMLNODE *node); static GWEN_XMLNODE *AH_HBCI_LoadDefaultXmlFiles(const AH_HBCI *hbci); #endif /* GWHBCI_HBCI_P_H */ aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/msglayer/msgengine.c0000664000175000017500000003116214044534776022570 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "msgengine_p.h" #include "aqhbci/aqhbci_l.h" #include "aqhbci/msglayer/hbci_l.h" #include "aqhbci/banking/user_l.h" #include #include #include #include #include GWEN_INHERIT(GWEN_MSGENGINE, AH_MSGENGINE); int AH_MsgEngine_TypeRead(GWEN_MSGENGINE *e, GWEN_BUFFER *msgbuf, GWEN_XMLNODE *node, GWEN_BUFFER *vbuf, char escapeChar, const char *delimiters) { AH_MSGENGINE *x; const char *type; int v; DBG_VERBOUS(AQHBCI_LOGDOMAIN, "AH_MsgEngine_TypeRead"); assert(e); x=GWEN_INHERIT_GETDATA(GWEN_MSGENGINE, AH_MSGENGINE, e); assert(x); type=GWEN_XMLNode_GetProperty(node, "type", ""); if (strcasecmp(type, "date")==0) { char buffer[9]; unsigned int i; DBG_VERBOUS(AQHBCI_LOGDOMAIN, "Supporting type \"date\""); memset(buffer, 0, sizeof(buffer)); if (GWEN_Buffer_GetBytesLeft(msgbuf)<8) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Too few bytes for date (%d<8)", GWEN_Buffer_GetBytesLeft(msgbuf)); return -1; } for (i=0; i<8; i++) { int c; c=GWEN_Buffer_ReadByte(msgbuf); if (c==-1) return -1; if (!isdigit(c)) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Non-digit found in date"); return -1; } buffer[i]=c; if (i==3) { /* year is full, check it */ v=atoi(buffer); if (v<1970 || v>2100) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Year out of range (%d)", v); return -1; } } /* if i==3 */ else if (i==5) { /* month is full, check it */ v=atoi(buffer+4); if (v<1 || v>12) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Month out of range (%d)", v); return -1; } } /* if i==6 */ } v=atoi(buffer+6); if (v<1 || v>31) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Day out of range (%d)", v); return -1; } /* date read, now store it */ if (GWEN_Buffer_AppendBytes(vbuf, buffer, 8)) { DBG_INFO(AQHBCI_LOGDOMAIN, "called from here"); return -1; } return 0; } /* if date */ else if (strcasecmp(type, "time")==0) { char buffer[7]; unsigned int i; DBG_INFO(AQHBCI_LOGDOMAIN, "Supporting type \"time\""); memset(buffer, 0, sizeof(buffer)); if (GWEN_Buffer_GetBytesLeft(msgbuf)<6) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Too few bytes for time (%d<6)", GWEN_Buffer_GetBytesLeft(msgbuf)); return -1; } for (i=0; i<6; i++) { int c; c=GWEN_Buffer_ReadByte(msgbuf); if (c==-1) return -1; if (!isdigit(c)) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Non-digit found in date"); return -1; } buffer[i]=c; if (i==1) { /* hour is full, check it */ v=atoi(buffer); if (v>23) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Hour out of range (%d)", v); return -1; } } /* if i==1 */ else if (i==3) { /* minutes full, check */ v=atoi(buffer+2); if (v>59) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Minutes out of range (%d)", v); return -1; } } /* if i==3 */ } v=atoi(buffer+4); if (v>59) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Seconds out of range (%d)", v); return -1; } /* date read, now store it */ if (GWEN_Buffer_AppendBytes(vbuf, buffer, 6)) { DBG_INFO(AQHBCI_LOGDOMAIN, "called from here"); return -1; } return 0; } else { DBG_VERBOUS(AQHBCI_LOGDOMAIN, "Type \"%s\" not supported by HBCI MsgEngine", type); return 1; } } int AH_MsgEngine_BinTypeWrite(GWEN_MSGENGINE *e, GWEN_XMLNODE *node, GWEN_DB_NODE *gr, GWEN_BUFFER *dbuf) { const char *s; s=GWEN_XMLNode_GetProperty(node, "binType", 0); if (s && *s) { if (strcasecmp(s, "dtaus")==0) { int rv; GWEN_DBIO *dbio; GWEN_DB_NODE *dbCfg; GWEN_DB_NODE *dbTransfers; dbio=GWEN_DBIO_GetPlugin("dtaus"); if (!dbio) { DBG_ERROR(AQHBCI_LOGDOMAIN, "DTAUS parser plugin not available"); return GWEN_ERROR_NOT_SUPPORTED; } s=GWEN_XMLNode_GetProperty(node, "name", 0); assert(s); dbCfg=GWEN_DB_GetGroup(gr, GWEN_PATH_FLAGS_NAMEMUSTEXIST, s); assert(dbCfg); dbTransfers=GWEN_DB_GetGroup(dbCfg, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "transactions"); rv=GWEN_DBIO_ExportToBuffer(dbio, dbuf, dbTransfers, dbCfg, GWEN_DB_FLAGS_DEFAULT); if (rv<0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Error creating DTAUS object"); return rv; } return 0; } } return 1; } int AH_MsgEngine_TypeWrite(GWEN_MSGENGINE *e, GWEN_BUFFER *gbuf, GWEN_BUFFER *data, GWEN_XMLNODE *node) { AH_MSGENGINE *x; const char *type; int v; DBG_VERBOUS(AQHBCI_LOGDOMAIN, "AH_MsgEngine_TypeWrite"); assert(e); x=GWEN_INHERIT_GETDATA(GWEN_MSGENGINE, AH_MSGENGINE, e); assert(x); type=GWEN_XMLNode_GetProperty(node, "type", ""); if (strcasecmp(type, "date")==0) { char buffer[9]; unsigned int i; DBG_VERBOUS(AQHBCI_LOGDOMAIN, "Supporting type \"date\""); memset(buffer, 0, sizeof(buffer)); if (GWEN_Buffer_GetBytesLeft(data)<8) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Too few bytes for date (%d<8)", GWEN_Buffer_GetBytesLeft(data)); return -1; } for (i=0; i<8; i++) { int c; c=GWEN_Buffer_ReadByte(data); if (c==-1) return -1; if (!isdigit(c)) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Non-digit found in date"); return -1; } buffer[i]=c; if (i==3) { /* year is full, check it */ v=atoi(buffer); if (v<1970 || v>2100) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Year out of range (%d)", v); return -1; } } /* if i==3 */ else if (i==5) { /* month is full, check it */ v=atoi(buffer+4); if (v<1 || v>12) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Month out of range (%d)", v); return -1; } } /* if i==5 */ } v=atoi(buffer+6); if (v<1 || v>31) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Day out of range (%d)", v); return -1; } /* date read, now store it */ if (GWEN_Buffer_AppendBytes(gbuf, buffer, 8)) { DBG_INFO(AQHBCI_LOGDOMAIN, "called from here"); return -1; } return 0; } /* if date */ else if (strcasecmp(type, "time")==0) { char buffer[7]; unsigned int i; DBG_VERBOUS(AQHBCI_LOGDOMAIN, "Supporting type \"time\""); memset(buffer, 0, sizeof(buffer)); if (GWEN_Buffer_GetBytesLeft(data)<6) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Too few bytes for time (%d<6)", GWEN_Buffer_GetBytesLeft(data)); return -1; } for (i=0; i<6; i++) { int c; c=GWEN_Buffer_ReadByte(data); if (c==-1) return -1; if (!isdigit(c)) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Non-digit found in date"); return -1; } buffer[i]=c; if (i==1) { /* hour is full, check it */ v=atoi(buffer); if (v>23) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Hour out of range (%d)", v); return -1; } } /* if i==1 */ else if (i==3) { /* minutes full, check */ v=atoi(buffer+2); if (v>59) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Minutes out of range (%d)", v); return -1; } } /* if i==3 */ } v=atoi(buffer+4); if (v>59) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Seconds out of range (%d)", v); return -1; } /* date read, now store it */ if (GWEN_Buffer_AppendBytes(gbuf, buffer, 6)) { DBG_INFO(AQHBCI_LOGDOMAIN, "called from here"); return -1; } return 0; } else { DBG_VERBOUS(AQHBCI_LOGDOMAIN, "Type \"%s\" not supported by MsgEngineHBCI", type); return 1; } } GWEN_DB_NODE_TYPE AH_MsgEngine_TypeCheck(GWEN_MSGENGINE *e, const char *tname) { AH_MSGENGINE *x; DBG_VERBOUS(AQHBCI_LOGDOMAIN, "AH_MsgEngine_TypeCheck"); assert(e); x=GWEN_INHERIT_GETDATA(GWEN_MSGENGINE, AH_MSGENGINE, e); assert(x); if (strcasecmp(tname, "date")==0 || strcasecmp(tname, "time")==0) return GWEN_DB_NodeType_ValueChar; else return GWEN_DB_NodeType_Unknown; } const char *AH_MsgEngine_GetCharValue(GWEN_MSGENGINE *e, const char *name, const char *defValue) { AH_MSGENGINE *x; AH_HBCI *h; DBG_VERBOUS(AQHBCI_LOGDOMAIN, "AH_MsgEngine_GetCharValue"); assert(e); x=GWEN_INHERIT_GETDATA(GWEN_MSGENGINE, AH_MSGENGINE, e); assert(x); DBG_INFO(AQHBCI_LOGDOMAIN, "Mode is: \"%s\"", GWEN_MsgEngine_GetMode(e)); DBG_INFO(AQHBCI_LOGDOMAIN, "Variable is: \"%s\"", name); assert(x->user); h=AH_User_GetHbci(x->user); assert(h); if (strcasecmp(name, "product")==0) return AH_HBCI_GetProductName(h); else if (strcasecmp(name, "productversion")==0) return AH_HBCI_GetProductVersion(h); if (strcasecmp(name, "customerid")==0) return AB_User_GetCustomerId(x->user); else if (strcasecmp(name, "userid")==0) return AB_User_GetUserId(x->user); else if (strcasecmp(name, "bankcode")==0) return AB_User_GetBankCode(x->user); else if (strcasecmp(name, "systemId")==0) { const char *p; DBG_WARN(AQHBCI_LOGDOMAIN, "SystemId requested (deprecated), in mode \"%s\" variable \"%s\"", GWEN_MsgEngine_GetMode(e), name); p=AH_User_GetSystemId(x->user); if (p) return p; return "0"; } else { DBG_VERBOUS(AQHBCI_LOGDOMAIN, "Unknown char variable \"%s\", returning default value", name); return defValue; } } int AH_MsgEngine_GetIntValue(GWEN_MSGENGINE *e, const char *name, int defValue) { AH_MSGENGINE *x; DBG_VERBOUS(AQHBCI_LOGDOMAIN, "AH_MsgEngine_GetIntValue"); assert(e); x=GWEN_INHERIT_GETDATA(GWEN_MSGENGINE, AH_MSGENGINE, e); assert(x); assert(x->user); if (strcasecmp(name, "country")==0) { const char *s; s=AB_User_GetCountry(x->user); if (!s || !*s) return defValue; if (strcasecmp(s, "de")==0) return 280; /* HBCI is only used in Germany, so we only check for DE here */ return defValue; } else if (strcasecmp(name, "updversion")==0) return AH_User_GetUpdVersion(x->user); else if (strcasecmp(name, "bpdversion")==0) return AH_User_GetBpdVersion(x->user); else { DBG_VERBOUS(AQHBCI_LOGDOMAIN, "Unknown int variable \"%s\", returning default value", name); return defValue; } } AH_MSGENGINE *AH_MsgEngine_Data_new() { AH_MSGENGINE *x; GWEN_NEW_OBJECT(AH_MSGENGINE, x); return x; } void AH_MsgEngine_Data_free(AH_MSGENGINE *x) { assert(x); DBG_INFO(AQHBCI_LOGDOMAIN, "Destroying AH_MSGENGINE"); GWEN_FREE_OBJECT(x); } void GWENHYWFAR_CB AH_MsgEngine_FreeData(void *bp, void *p) { AH_MSGENGINE *x; x=(AH_MSGENGINE *)p; AH_MsgEngine_Data_free(x); } void AH_MsgEngine_SetUser(GWEN_MSGENGINE *e, AB_USER *u) { AH_MSGENGINE *x; assert(e); x=GWEN_INHERIT_GETDATA(GWEN_MSGENGINE, AH_MSGENGINE, e); assert(x); x->user=u; } GWEN_MSGENGINE *AH_MsgEngine_new() { GWEN_MSGENGINE *e; AH_MSGENGINE *x; e=GWEN_MsgEngine_new(); assert(e); x=AH_MsgEngine_Data_new(); GWEN_INHERIT_SETDATA(GWEN_MSGENGINE, AH_MSGENGINE, e, x, AH_MsgEngine_FreeData); GWEN_MsgEngine_SetTypeReadFunction(e, AH_MsgEngine_TypeRead); GWEN_MsgEngine_SetTypeWriteFunction(e, AH_MsgEngine_TypeWrite); GWEN_MsgEngine_SetTypeCheckFunction(e, AH_MsgEngine_TypeCheck); GWEN_MsgEngine_SetBinTypeWriteFunction(e, AH_MsgEngine_BinTypeWrite); GWEN_MsgEngine_SetGetCharValueFunction(e, AH_MsgEngine_GetCharValue); GWEN_MsgEngine_SetGetIntValueFunction(e, AH_MsgEngine_GetIntValue); GWEN_MsgEngine_SetEscapeChar(e, '?'); return e; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/msglayer/message_l.h0000664000175000017500000001063014546575650022560 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2023 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_MESSAGE_L_H #define AH_MESSAGE_L_H #include typedef struct AH_MSG AH_MSG; GWEN_LIST_FUNCTION_DEFS(AH_MSG, AH_Msg); #include "dialog_l.h" #include #include AH_MSG *AH_Msg_new(AH_DIALOG *dlg); void AH_Msg_free(AH_MSG *hmsg); const GWEN_STRINGLIST *AH_Msg_GetSignerIdList(const AH_MSG *hmsg); unsigned int AH_Msg_GetSignerCount(AH_MSG *hmsg); int AH_Msg_AddSignerId(AH_MSG *hmsg, const char *s); int AH_Msg_IsSignedBy(const AH_MSG *hmsg, const char *s); const char *AH_Msg_GetCrypterId(const AH_MSG *hmsg); void AH_Msg_SetCrypterId(AH_MSG *hmsg, const char *s); AB_USER *AH_Msg_GetUser(const AH_MSG *hmsg, const char *userId); GWEN_BUFFER *AH_Msg_GetBuffer(AH_MSG *hmsg); GWEN_BUFFER *AH_Msg_TakeBuffer(AH_MSG *hmsg); void AH_Msg_SetBuffer(AH_MSG *hmsg, GWEN_BUFFER *bf); unsigned int AH_Msg_GetMsgNum(const AH_MSG *hmsg); unsigned int AH_Msg_GetMsgRef(const AH_MSG *hmsg); void AH_Msg_SetMsgRef(AH_MSG *hmsg, unsigned int i); unsigned int AH_Msg_GetNodes(AH_MSG *hmsg); AH_DIALOG *AH_Msg_GetDialog(const AH_MSG *hmsg); int AH_Msg_EnableInsert(AH_MSG *hmsg); int AH_Msg_HasWarnings(const AH_MSG *hmsg); void AH_Msg_SetHasWarnings(AH_MSG *hmsg, int i); int AH_Msg_HasErrors(const AH_MSG *hmsg); void AH_Msg_SetHasErrors(AH_MSG *hmsg, int i); int AH_Msg_GetResultCode(const AH_MSG *hmsg); void AH_Msg_SetResultCode(AH_MSG *hmsg, int i); const char *AH_Msg_GetResultText(const AH_MSG *hmsg); void AH_Msg_SetResultText(AH_MSG *hmsg, const char *s); const char *AH_Msg_GetResultParam(const AH_MSG *hmsg); void AH_Msg_SetResultParam(AH_MSG *hmsg, const char *s); unsigned int AH_Msg_GetHbciVersion(const AH_MSG *hmsg); void AH_Msg_SetHbciVersion(AH_MSG *hmsg, unsigned int i); int AH_Msg_GetSecurityProfile(const AH_MSG *hmsg); void AH_Msg_SetSecurityProfile(AH_MSG *hmsg, int i); int AH_Msg_GetSecurityClass(const AH_MSG *hmsg); void AH_Msg_SetSecurityClass(AH_MSG *hmsg, int i); const char *AH_Msg_GetTan(const AH_MSG *hmsg); void AH_Msg_SetTan(AH_MSG *hmsg, const char *s); int AH_Msg_GetNeedTan(const AH_MSG *hmsg); void AH_Msg_SetNeedTan(AH_MSG *hmsg, int i); int AH_Msg_NoSysId(const AH_MSG *hmsg); void AH_Msg_SetNoSysId(AH_MSG *hmsg, int i); int AH_Msg_SignSeqOne(const AH_MSG *hmsg); void AH_Msg_SetSignSeqOne(AH_MSG *hmsg, int i); unsigned int AH_Msg_GetCurrentSegmentNumber(AH_MSG *hmsg); unsigned int AH_Msg_AddNode(AH_MSG *hmsg, GWEN_XMLNODE *node, GWEN_DB_NODE *data); void AH_Msg_SetItanMethod(AH_MSG *hmsg, uint32_t i); uint32_t AH_Msg_GetItanMethod(const AH_MSG *hmsg); void AH_Msg_SetItanHashMode(AH_MSG *hmsg, int i); int AH_Msg_GetItanHashMode(const AH_MSG *hmsg); void AH_Msg_SetItanHashBuffer(AH_MSG *hmsg, GWEN_BUFFER *hbuf); GWEN_BUFFER *AH_Msg_GetItanHashBuffer(const AH_MSG *hmsg); unsigned int AH_Msg_InsertNode(AH_MSG *hmsg, GWEN_XMLNODE *node, GWEN_DB_NODE *data); int AH_Msg_EncodeMsg(AH_MSG *hmsg); int AH_Msg_DecodeMsg(AH_MSG *hmsg, GWEN_DB_NODE *gr, unsigned int flags); void AH_Msg__Dump(const AH_MSG *hmsg, unsigned int indent); #define AH_Msg_Dump(hmsg, indent) \ {fprintf(stderr, "Dumping message from "__FILE__" %d\n", __LINE__);\ AH_Msg__Dump(hmsg, indent);} GWEN_BUFFER *AH_Msg_GetOrigBuffer(AH_MSG *hmsg); void AH_Msg_LogMessage(AH_MSG *msg, GWEN_BUFFER *buf, int rec, int crypt); const char *AH_Msg_GetExpectedSigner(const AH_MSG *msg); void AH_Msg_SetExpectedSigner(AH_MSG *msg, const char *s); const char *AH_Msg_GetExpectedCrypter(const AH_MSG *msg); void AH_Msg_SetExpectedCrypter(AH_MSG *msg, const char *s); const char *AH_Msg_GetPin(const AH_MSG *msg); void AH_Msg_SetPin(AH_MSG *hmsg, const char *s); int AH_Msg_GenerateAndAddSegment(GWEN_MSGENGINE *e, const char *segName, GWEN_DB_NODE *cfg, GWEN_BUFFER *hbuf); #endif /* AH_MESSAGE_L_H */ aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/msglayer/hbci-updates_l.h0000664000175000017500000000162214043610745023470 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_HBCI_UPDATES_L_H #define AH_HBCI_UPDATES_L_H #include "hbci_l.h" #include /** * This function is called from AH_User_Extend to extend the given user data * DB to the latest version. */ int AH_HBCI_UpdateDbUser(AH_HBCI *hbci, GWEN_DB_NODE *db); #if 0 /** * This function is called from AH_User_Extend to extend the given account * data DB to the latest version. */ int AH_HBCI_UpdateDbAccount(AH_HBCI *hbci, GWEN_DB_NODE *db); #endif #endif aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/msglayer/msgcrypt_rxh_verify.h0000664000175000017500000000111314546575650024732 00000000000000/*************************************************************************** begin : Tue Nov 25 2008 copyright : (C) 2023 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_MSGCRYPT_RXH_VERIFY_H #define AH_MSGCRYPT_RXH_VERIFY_H #include "message_l.h" int AH_Msg_VerifyRxh(AH_MSG *hmsg, GWEN_DB_NODE *gr); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/msglayer/msgcrypt_pintan_verify.h0000664000175000017500000000114714546575650025431 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_MSGCRYPT_PINTAN_VERIFY_H #define AH_MSGCRYPT_PINTAN_VERIFY_H #include "aqhbci/msglayer/msgcrypt_pintan.h" int AH_Msg_VerifyPinTan(AH_MSG *hmsg, GWEN_DB_NODE *gr); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/msglayer/msgcrypt_rxh_encrypt.c0000664000175000017500000003645314546575650025124 00000000000000/*************************************************************************** begin : Tue Nov 25 2008 copyright : (C) 2023 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "msgcrypt_rxh_encrypt.h" #include "msgcrypt_rxh_common.h" #include "message_p.h" #include "aqhbci/aqhbci_l.h" #include #include #include #include #include #include #include /* ------------------------------------------------------------------------------------------------ * forward declarations * ------------------------------------------------------------------------------------------------ */ static int _paddMessageAccordingToParams(GWEN_BUFFER *buffer, const RXH_PARAMETER *rParams); static GWEN_CRYPT_KEY *_genMsgKeyAccordingToParams(const RXH_PARAMETER *rParams); static GWEN_BUFFER *_encryptMessageIntoReturnedBuffer(GWEN_CRYPT_KEY *sk, const uint8_t *msgPtr, uint32_t msgLen); static int _encryptMessageKey(GWEN_CRYPT_KEY *ek, const RXH_PARAMETER *rParams, const GWEN_CRYPT_KEY *sk, uint8_t *encKeyBufferPtr, uint32_t encKeyBufferSize); static GWEN_BUFFER *_sessionKeyToBuffer(const GWEN_CRYPT_KEY *sk, const RXH_PARAMETER *rParams); static int _paddMessageKey(GWEN_BUFFER *skbuf, const RXH_PARAMETER *rParams, int encryptionKeySize); static int _writeCtyptHead(AH_MSG *hmsg, const RXH_PARAMETER *rParams, const GWEN_CRYPT_TOKEN_CONTEXT *ctx, GWEN_CRYPT_KEY *ek, const uint8_t *encKey, int encKeyLen, GWEN_BUFFER *hbuf); static int _writeCryptData(GWEN_MSGENGINE *e, const uint8_t *encryptedMsgPtr, int encryptedMsgLen, GWEN_BUFFER *hbuf); static GWEN_BUFFER *_composeMessage(AH_MSG *hmsg, const RXH_PARAMETER *rParams, const GWEN_CRYPT_TOKEN_CONTEXT *ctx, GWEN_BUFFER *mbuf, GWEN_CRYPT_KEY *ek, const uint8_t *encKey, int encKeyLen); static void _dumpDesKey(GWEN_CRYPT_KEY *sk, const char *sText); /* ------------------------------------------------------------------------------------------------ * implementations * ------------------------------------------------------------------------------------------------ */ int AH_Msg_EncryptRxh(AH_MSG *hmsg) { GWEN_BUFFER *mbuf; GWEN_BUFFER *hbuf; int rv; GWEN_MSGENGINE *e; AB_USER *u; const GWEN_CRYPT_TOKEN_CONTEXT *ctx; GWEN_CRYPT_KEY *sk, *ek; uint8_t encKey[AH_MSGRXH_MAXKEYBUF+64]; int encKeyLen; const RXH_PARAMETER *rParams; DBG_NOTICE(AQHBCI_LOGDOMAIN, "RXH-encrypting message"); assert(hmsg); u=AH_Dialog_GetDialogOwner(hmsg->dialog); rParams=AH_MsgRxh_GetParameters(AH_User_GetCryptMode(u), AH_User_GetRdhType(u)); if (rParams==NULL) { DBG_INFO(AQHBCI_LOGDOMAIN, "No matching RxH parameters"); return GWEN_ERROR_GENERIC; } e=AH_Dialog_GetMsgEngine(hmsg->dialog); assert(e); GWEN_MsgEngine_SetMode(e, AH_CryptMode_toString(rParams->protocol)); ctx=AH_MsgRxh_GetUserContext(hmsg); if (ctx==NULL) { DBG_INFO(AQHBCI_LOGDOMAIN, "Error getting user context"); return GWEN_ERROR_GENERIC; } ek=AH_User_GetBankPubCryptKey(u); if (!ek) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Bank Public Key not available, please download it first, e.g. with aqhbci-tool4 getkeys -u %lu", (unsigned long int) AB_User_GetUniqueId(u)); GWEN_Gui_ProgressLog2(0, GWEN_LoggerLevel_Error, I18N("The public key from the bank is not available, please download it first, e.g. with " "aqhbci-tool4 getkeys -u %lu"), (unsigned long int) AB_User_GetUniqueId(u)); return GWEN_ERROR_GENERIC; } rv=_paddMessageAccordingToParams(hmsg->buffer, rParams); if (rv) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } sk=_genMsgKeyAccordingToParams(rParams); if (sk==NULL) { DBG_INFO(AQHBCI_LOGDOMAIN, "Could not generate message key"); return GWEN_ERROR_GENERIC; } mbuf=_encryptMessageIntoReturnedBuffer(sk, (uint8_t *)GWEN_Buffer_GetStart(hmsg->buffer), GWEN_Buffer_GetUsedBytes(hmsg->buffer)); if (mbuf==NULL) { GWEN_Crypt_Key_free(sk); return GWEN_ERROR_GENERIC; } rv=_encryptMessageKey(ek, rParams, sk, encKey, sizeof(encKey)); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(mbuf); GWEN_Crypt_Key_free(sk); } encKeyLen=rv; GWEN_Crypt_Key_free(sk); hbuf=_composeMessage(hmsg, rParams, ctx, mbuf, ek, encKey, encKeyLen); if (hbuf==NULL) { DBG_INFO(AQHBCI_LOGDOMAIN, "here"); GWEN_Buffer_free(mbuf); return GWEN_ERROR_INTERNAL; } /* replace existing buffer by encrypted one */ GWEN_Buffer_free(hmsg->buffer); hmsg->buffer=hbuf; return 0; } int _paddMessageAccordingToParams(GWEN_BUFFER *buffer, const RXH_PARAMETER *rParams) { int rv; switch (rParams->protocol) { case AH_CryptMode_Rdh: DBG_INFO(AQHBCI_LOGDOMAIN, "Padding message with ANSI X9.23"); rv=GWEN_Padd_PaddWithAnsiX9_23(buffer); if (rv) { DBG_INFO(AQHBCI_LOGDOMAIN, "Error padding message with ANSI X9.23 (%d)", rv); return rv; } break; case AH_CryptMode_Rah: DBG_INFO(AQHBCI_LOGDOMAIN, "Padding message with ZKA method"); rv=GWEN_Padd_PaddWithZka(buffer); if (rv) { DBG_INFO(AQHBCI_LOGDOMAIN, "Error padding message with ZKA padding (%d)", rv); return rv; } break; default: DBG_INFO(AQHBCI_LOGDOMAIN, "Protocol not supported!"); return GWEN_ERROR_INTERNAL; } return 0; } GWEN_CRYPT_KEY *_genMsgKeyAccordingToParams(const RXH_PARAMETER *rParams) { GWEN_CRYPT_KEY *sk; switch (rParams->protocol) { case AH_CryptMode_Rdh: sk=GWEN_Crypt_KeyDes3K_Generate(GWEN_Crypt_CryptMode_Cbc, 24, 2); if (sk==NULL) { DBG_INFO(AQHBCI_LOGDOMAIN, "Could not generate DES key"); return NULL; } _dumpDesKey(sk, "DES Key for message"); break; case AH_CryptMode_Rah: sk=GWEN_Crypt_KeyAes256_Generate(GWEN_Crypt_CryptMode_Cbc, 32, 2); if (sk==NULL) { DBG_INFO(AQHBCI_LOGDOMAIN, "Could not generate AES-256 key"); return NULL; } break; default: DBG_INFO(AQHBCI_LOGDOMAIN, "Protocol not supported!"); return NULL; } return sk; } GWEN_BUFFER *_encryptMessageIntoReturnedBuffer(GWEN_CRYPT_KEY *sk, const uint8_t *msgPtr, uint32_t msgLen) { GWEN_BUFFER *mbuf; uint32_t l; int rv; mbuf=GWEN_Buffer_new(0, msgLen, 0, 1); l=msgLen; rv=GWEN_Crypt_Key_Encipher(sk, msgPtr, msgLen, (uint8_t *)GWEN_Buffer_GetPosPointer(mbuf), &l); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "Could not encipher with DES session key (%d)", rv); GWEN_Buffer_free(mbuf); return NULL; } GWEN_Buffer_IncrementPos(mbuf, l); GWEN_Buffer_AdjustUsedBytes(mbuf); return mbuf; } int _encryptMessageKey(GWEN_CRYPT_KEY *ek, const RXH_PARAMETER *rParams, const GWEN_CRYPT_KEY *sk, uint8_t *encKeyBufferPtr, uint32_t encKeyBufferSize) { uint32_t encryptionKeySizeInBytes; uint32_t elen; GWEN_BUFFER *skbuf; int rv; encryptionKeySizeInBytes=GWEN_Crypt_Key_GetKeySize(ek); if (encKeyBufferSizeprotocol) { case AH_CryptMode_Rdh: GWEN_Buffer_InsertBytes(skbuf, (const char *) GWEN_Crypt_KeyDes3K_GetKeyDataPtr(sk), 16); break; case AH_CryptMode_Rah: GWEN_Buffer_InsertBytes(skbuf, (const char *) GWEN_Crypt_KeyAes256_GetKeyDataPtr(sk), 32); break; default: GWEN_Buffer_free(skbuf); return NULL; } GWEN_Buffer_Rewind(skbuf); return skbuf; } int _paddMessageKey(GWEN_BUFFER *skbuf, const RXH_PARAMETER *rParams, int encryptionKeySize) { GWEN_CRYPT_PADDALGO *algo; int rv; switch (rParams->opmodCrypt) { case AH_Opmode_Cbc: algo=GWEN_Crypt_PaddAlgo_new(GWEN_Crypt_PaddAlgoId_LeftZero); break; case AH_Opmode_Rsa_Pkcs1_v1_5: algo=GWEN_Crypt_PaddAlgo_new(GWEN_Crypt_PaddAlgoId_Pkcs1_2); break; default: return GWEN_ERROR_INTERNAL; } GWEN_Crypt_PaddAlgo_SetPaddSize(algo, encryptionKeySize); /* padd according to given algo */ rv=GWEN_Padd_ApplyPaddAlgo(algo, skbuf); GWEN_Crypt_PaddAlgo_free(algo); if (rv) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } return 0; } void _dumpDesKey(GWEN_CRYPT_KEY *sk, const char *sText) { const uint8_t *p; uint32_t len; p=GWEN_Crypt_KeyDes3K_GetKeyDataPtr(sk); len=GWEN_Crypt_KeyDes3K_GetKeyDataLen(sk); DBG_INFO(AQHBCI_LOGDOMAIN, "%s (len=%d)", sText?sText:"KEY", len); GWEN_Text_LogString((const char *)p, len, AQHBCI_LOGDOMAIN, GWEN_LoggerLevel_Info); } GWEN_BUFFER *_composeMessage(AH_MSG *hmsg, const RXH_PARAMETER *rParams, const GWEN_CRYPT_TOKEN_CONTEXT *ctx, GWEN_BUFFER *mbuf, GWEN_CRYPT_KEY *ek, const uint8_t *encKey, int encKeyLen) { GWEN_BUFFER *hbuf; int rv; GWEN_MSGENGINE *e; e=AH_Dialog_GetMsgEngine(hmsg->dialog); hbuf=GWEN_Buffer_new(0, 256+GWEN_Buffer_GetUsedBytes(mbuf), 0, 1); rv=_writeCtyptHead(hmsg, rParams, ctx, ek, encKey, encKeyLen, hbuf); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(hbuf); return NULL; } rv=_writeCryptData(e, (const uint8_t *) GWEN_Buffer_GetStart(mbuf), GWEN_Buffer_GetUsedBytes(mbuf), hbuf); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(hbuf); return NULL; } return hbuf; } int _writeCtyptHead(AH_MSG *hmsg, const RXH_PARAMETER *rParams, const GWEN_CRYPT_TOKEN_CONTEXT *ctx, GWEN_CRYPT_KEY *ek, const uint8_t *encKey, int encKeyLen, GWEN_BUFFER *hbuf) { GWEN_XMLNODE *node; GWEN_DB_NODE *cfg; GWEN_MSGENGINE *e; AB_USER *u; int rv; u=AH_Dialog_GetDialogOwner(hmsg->dialog); e=AH_Dialog_GetMsgEngine(hmsg->dialog); /* create crypt head */ node=GWEN_MsgEngine_FindNodeByPropertyStrictProto(e, "SEG", "id", 0, "CryptHead"); if (!node) { DBG_INFO(AQHBCI_LOGDOMAIN, "Segment \"CryptHead\" not found"); return GWEN_ERROR_GENERIC; } /* create CryptHead */ cfg=GWEN_DB_Group_new("crypthead"); GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "head/seq", 998); rv=AH_MsgRxh_PrepareCryptoSeg(hmsg, u, rParams, GWEN_Crypt_Key_GetKeyNumber(ek), GWEN_Crypt_Key_GetKeyVersion(ek), NULL, cfg, 1, 0); if (rv) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); GWEN_DB_Group_free(cfg); return rv; } /* store system id */ if (hmsg->noSysId) { GWEN_DB_SetCharValue(cfg, GWEN_DB_FLAGS_DEFAULT, "SecDetails/SecId", "0"); } else { /* store CID if we use a card */ const uint8_t *cidData; uint32_t cidLen; const char *p; cidLen=GWEN_Crypt_Token_Context_GetCidLen(ctx); cidData=GWEN_Crypt_Token_Context_GetCidPtr(ctx); if (cidLen > 0 && cidData != NULL) { GWEN_DB_SetBinValue(cfg, GWEN_DB_FLAGS_DEFAULT, "SecDetails/CID", cidData, cidLen); } p=AH_User_GetSystemId(u); if (p==NULL) { p=GWEN_Crypt_Token_Context_GetSystemId(ctx); } if (p) { GWEN_DB_SetCharValue(cfg, GWEN_DB_FLAGS_DEFAULT, "SecDetails/SecId", p); } else { GWEN_DB_SetCharValue(cfg, GWEN_DB_FLAGS_DEFAULT, "SecDetails/SecId", "0"); } } /* store encrypted message key */ GWEN_DB_SetBinValue(cfg, GWEN_DB_FLAGS_DEFAULT, "CryptAlgo/MsgKey", encKey, encKeyLen); rv=GWEN_MsgEngine_CreateMessageFromNode(e, node, hbuf, cfg); if (rv) { DBG_INFO(AQHBCI_LOGDOMAIN, "Could not create CryptHead (%d)", rv); GWEN_DB_Group_free(cfg); return rv; } GWEN_DB_Group_free(cfg); return 0; } int _writeCryptData(GWEN_MSGENGINE *e, const uint8_t *encryptedMsgPtr, int encryptedMsgLen, GWEN_BUFFER *hbuf) { GWEN_DB_NODE *cfg; GWEN_XMLNODE *node; int rv; /* create cryptdata */ cfg=GWEN_DB_Group_new("cryptdata"); GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "head/seq", 999); GWEN_DB_SetBinValue(cfg, GWEN_DB_FLAGS_DEFAULT, "cryptdata", encryptedMsgPtr, encryptedMsgLen); node=GWEN_MsgEngine_FindNodeByPropertyStrictProto(e, "SEG", "id", 0, "CryptData"); if (!node) { DBG_INFO(AQHBCI_LOGDOMAIN, "Segment \"CryptData\"not found"); GWEN_DB_Group_free(cfg); return GWEN_ERROR_GENERIC; } rv=GWEN_MsgEngine_CreateMessageFromNode(e, node, hbuf, cfg); if (rv) { DBG_INFO(AQHBCI_LOGDOMAIN, "Could not create CryptData (%d)", rv); GWEN_DB_Group_free(cfg); return rv; } GWEN_DB_Group_free(cfg); return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/msglayer/msgcrypt_rxh_decrypt.c0000664000175000017500000003203614546575650025103 00000000000000/*************************************************************************** begin : Tue Nov 25 2008 copyright : (C) 2020 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "msgcrypt_rxh_decrypt.h" #include "msgcrypt_rxh_common.h" #include "message_p.h" #include "aqhbci/aqhbci_l.h" #include #include #include #include #include #include #include /* ------------------------------------------------------------------------------------------------ * defines * ------------------------------------------------------------------------------------------------ */ #define AH_MSG_DECRYPTRXH_MAXOFFSET 32 /* ------------------------------------------------------------------------------------------------ * forward declarations * ------------------------------------------------------------------------------------------------ */ static GWEN_CRYPT_KEY *_extractMessageKeyFromCryptHead(AH_MSG *hmsg, int rxhProtocol, GWEN_DB_NODE *grHead); static const GWEN_CRYPT_TOKEN_KEYINFO *_retrieveDecryptKeyInfoFromCryptToken(AB_USER *u, GWEN_CRYPT_TOKEN *ct); static GWEN_CRYPT_KEY *_decryptMessageKey(int rxhProtocol, GWEN_CRYPT_TOKEN *ct, uint32_t idDecryptUserKey, int sizeDecryptUserKey, const uint8_t *ptrRawEncryptedMsgKey, uint32_t lenRawEncryptedMsgKey); static GWEN_CRYPT_KEY *_mkMessageKeyFromDecryptedData(int rxhProtocol, uint8_t *ptrDecryptedMsgKey, uint32_t lenDecryptedMsgKey); static GWEN_BUFFER *_getDecryptedMessage(GWEN_CRYPT_KEY *sk, int rxhProtocol, const uint8_t *pSource, uint32_t lSource); /* ------------------------------------------------------------------------------------------------ * implementations * ------------------------------------------------------------------------------------------------ */ int AH_Msg_DecryptRxh(AH_MSG *hmsg, GWEN_DB_NODE *gr) { AH_HBCI *h; GWEN_BUFFER *mbuf; uint32_t l; const uint8_t *p; AB_USER *u; GWEN_CRYPT_KEY *sk=NULL; GWEN_DB_NODE *nhead=NULL; GWEN_DB_NODE *ndata=NULL; const char *crypterId; const RXH_PARAMETER *rxh_parameter; assert(hmsg); h=AH_Dialog_GetHbci(hmsg->dialog); assert(h); u=AH_Dialog_GetDialogOwner(hmsg->dialog); rxh_parameter=AH_MsgRxh_GetParameters(AH_User_GetCryptMode(u), AH_User_GetRdhType(u)); /* get encrypted session key */ nhead=GWEN_DB_GetGroup(gr, GWEN_DB_FLAGS_DEFAULT | GWEN_PATH_FLAGS_NAMEMUSTEXIST, "CryptHead"); if (!nhead) { DBG_ERROR(AQHBCI_LOGDOMAIN, "No crypt head"); return GWEN_ERROR_BAD_DATA; } sk=_extractMessageKeyFromCryptHead(hmsg, rxh_parameter->protocol, nhead); if (sk==NULL) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Missing message key"); return GWEN_ERROR_BAD_DATA; } /* get encrypted data */ ndata=GWEN_DB_GetGroup(gr, GWEN_DB_FLAGS_DEFAULT | GWEN_PATH_FLAGS_NAMEMUSTEXIST, "CryptData"); if (!ndata) { DBG_ERROR(AQHBCI_LOGDOMAIN, "No crypt data"); GWEN_Crypt_Key_free(sk); return GWEN_ERROR_BAD_DATA; } p=GWEN_DB_GetBinValue(ndata, "CryptData", 0, 0, 0, &l); if (!p || !l) { DBG_ERROR(AQHBCI_LOGDOMAIN, "No crypt data"); GWEN_Crypt_Key_free(sk); return GWEN_ERROR_BAD_DATA; } /* decrypt data */ mbuf=_getDecryptedMessage(sk, rxh_parameter->protocol, p, l); if (mbuf==NULL) { DBG_INFO(AQHBCI_LOGDOMAIN, "Could not decipher with DES session key."); GWEN_Crypt_Key_free(sk); return GWEN_ERROR_GENERIC; } GWEN_Crypt_Key_free(sk); /* store crypter id */ crypterId=GWEN_DB_GetCharValue(nhead, "key/userId", 0, I18N("unknown")); AH_Msg_SetCrypterId(hmsg, crypterId); /* store new buffer inside message */ GWEN_Buffer_free(hmsg->origbuffer); hmsg->origbuffer=hmsg->buffer; GWEN_Buffer_Rewind(mbuf); hmsg->buffer=mbuf; return 0; } GWEN_CRYPT_KEY *_extractMessageKeyFromCryptHead(AH_MSG *hmsg, int rxhProtocol, GWEN_DB_NODE *grCryptHead) { AH_HBCI *h; int rv; const uint8_t *ptrRawEncryptedMsgKey; uint32_t lenRawEncryptedMsgKey; AB_USER *u; GWEN_CRYPT_TOKEN *ct; const GWEN_CRYPT_TOKEN_KEYINFO *ki; uint32_t idDecryptUserKey; int sizeDecryptUserKey; assert(hmsg); h=AH_Dialog_GetHbci(hmsg->dialog); assert(h); u=AH_Dialog_GetDialogOwner(hmsg->dialog); rv=AB_Banking_GetCryptToken(AH_HBCI_GetBankingApi(h), AH_User_GetTokenType(u), AH_User_GetTokenName(u), &ct); if (rv) { DBG_INFO(AQHBCI_LOGDOMAIN, "Could not get crypt token for user \"%s\" (%d)", AB_User_GetUserId(u), rv); return NULL; } ki=_retrieveDecryptKeyInfoFromCryptToken(u, ct); if (ki==NULL) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); return NULL; } idDecryptUserKey=GWEN_Crypt_Token_KeyInfo_GetId(ki); sizeDecryptUserKey=GWEN_Crypt_Token_KeyInfo_GetKeySize(ki); /* get encrypted session key */ ptrRawEncryptedMsgKey=GWEN_DB_GetBinValue(grCryptHead, "CryptAlgo/MsgKey", 0, 0, 0, &lenRawEncryptedMsgKey); if (ptrRawEncryptedMsgKey && lenRawEncryptedMsgKey) { GWEN_CRYPT_KEY *sk; sk=_decryptMessageKey(rxhProtocol, ct, idDecryptUserKey, sizeDecryptUserKey, ptrRawEncryptedMsgKey, lenRawEncryptedMsgKey); if (sk==NULL) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not create message key from data"); return NULL; } return sk; } else { DBG_ERROR(AQHBCI_LOGDOMAIN, "Missing message key in HBCI message"); return NULL; } } const GWEN_CRYPT_TOKEN_KEYINFO *_retrieveDecryptKeyInfoFromCryptToken(AB_USER *u, GWEN_CRYPT_TOKEN *ct) { const GWEN_CRYPT_TOKEN_KEYINFO *ki; const GWEN_CRYPT_TOKEN_CONTEXT *ctx; const char *sTokenType; const char *sTokenName; int rv; uint32_t idDecryptUserKey; /* get token info for logging */ sTokenType=GWEN_Crypt_Token_GetTypeName(ct); sTokenName=GWEN_Crypt_Token_GetTokenName(ct); /* open CryptToken if necessary */ if (!GWEN_Crypt_Token_IsOpen(ct)) { GWEN_Crypt_Token_AddModes(ct, GWEN_CRYPT_TOKEN_MODE_DIRECT_SIGN); rv=GWEN_Crypt_Token_Open(ct, 0, 0); if (rv) { DBG_INFO(AQHBCI_LOGDOMAIN, "Could not open crypt token for user \"%s\" (%d)", AB_User_GetUserId(u), rv); return NULL; } } /* get context and key info */ ctx=GWEN_Crypt_Token_GetContext(ct, AH_User_GetTokenContextId(u), 0); if (ctx==NULL) { DBG_INFO(AQHBCI_LOGDOMAIN, "Context %d not found on crypt token [%s:%s]", AH_User_GetTokenContextId(u), sTokenType, sTokenName); return NULL; } idDecryptUserKey=GWEN_Crypt_Token_Context_GetDecipherKeyId(ctx); ki=GWEN_Crypt_Token_GetKeyInfo(ct, idDecryptUserKey, 0xffffffff, 0); if (ki==NULL) { DBG_INFO(AQHBCI_LOGDOMAIN, "Keyinfo %04x not found on crypt token [%s:%s]", idDecryptUserKey, sTokenType, sTokenName); return NULL; } return ki; } GWEN_CRYPT_KEY *_decryptMessageKey(int rxhProtocol, GWEN_CRYPT_TOKEN *ct, uint32_t idDecryptUserKey, int sizeDecryptUserKey, const uint8_t *ptrRawEncryptedMsgKey, uint32_t lenRawEncryptedMsgKey) { int rv; GWEN_CRYPT_PADDALGO *algo; uint8_t bufEncryptedKey[AH_MSGRXH_MAXKEYBUF+64]; uint8_t bufDecryptedMsgKey[AH_MSGRXH_MAXKEYBUF+64+AH_MSG_DECRYPTRXH_MAXOFFSET]; uint8_t *ptrDecryptedMsgKey; uint32_t lenDecryptedMsgKey; GWEN_CRYPT_KEY *sk=NULL; if (sizeDecryptUserKeyexpectedMsgKeySize) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Decrypted data larger than keysize (%d > %d), skipping bytes", lenDecryptedMsgKey, expectedMsgKeySize); ptrDecryptedMsgKey+=(lenDecryptedMsgKey-expectedMsgKeySize); lenDecryptedMsgKey=expectedMsgKeySize; } else if (lenDecryptedMsgKeyAH_MSG_DECRYPTRXH_MAXOFFSET) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Decrypted data is way too small (%d < %d), aborting", lenDecryptedMsgKey, expectedMsgKeySize); return NULL; } else { DBG_ERROR(AQHBCI_LOGDOMAIN, "Decrypted data smaller than keysize (%d < %d), adapting", lenDecryptedMsgKey, expectedMsgKeySize); ptrDecryptedMsgKey-=delta; lenDecryptedMsgKey=expectedMsgKeySize; } } #if 0 DBG_ERROR(AQHBCI_LOGDOMAIN, "DES key provided in message (padded key size=%d, unpadded keysize=%d, keyPos=%d):", lenDecryptedMsgKey, expectedMsgKeySize, (lenDecryptedMsgKey-expectedMsgKeySize)); GWEN_Text_LogString((const char *)ptrDecryptedMsgKey, lenDecryptedMsgKey, AQHBCI_LOGDOMAIN, GWEN_LoggerLevel_Error); #endif switch (rxhProtocol) { case AH_CryptMode_Rdh: sk=GWEN_Crypt_KeyDes3K_fromData(GWEN_Crypt_CryptMode_Cbc, 24, ptrDecryptedMsgKey, 16); break; case AH_CryptMode_Rah: sk=GWEN_Crypt_KeyAes256_fromData(GWEN_Crypt_CryptMode_Cbc, 32, ptrDecryptedMsgKey, 32); break; default: return NULL; } if (sk==NULL) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not create message key from data"); return NULL; } return sk; } GWEN_BUFFER *_getDecryptedMessage(GWEN_CRYPT_KEY *sk, int rxhProtocol, const uint8_t *pSource, uint32_t lSource) { GWEN_BUFFER *mbuf; int rv; uint32_t lDest; /* decipher message with session key */ lDest=lSource+1024; /* maybe the size should be increased even more */ mbuf=GWEN_Buffer_new(0, lDest, 0, 1); rv=GWEN_Crypt_Key_Decipher(sk, (const uint8_t *)pSource, lSource, (uint8_t *)GWEN_Buffer_GetPosPointer(mbuf), &lDest); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "Could not decipher with DES session key (%d)", rv); GWEN_Buffer_free(mbuf); return NULL; } GWEN_Buffer_IncrementPos(mbuf, lDest); GWEN_Buffer_AdjustUsedBytes(mbuf); /* unpadd message */ switch (rxhProtocol) { case AH_CryptMode_Rdh: DBG_INFO(AQHBCI_LOGDOMAIN, "Unpadding with ANSI X9.23"); rv=GWEN_Padd_UnpaddWithAnsiX9_23(mbuf); break; case AH_CryptMode_Rah: DBG_INFO(AQHBCI_LOGDOMAIN, "Unpadding with ZKA padding"); rv=GWEN_Padd_UnpaddWithZka(mbuf); break; default: return NULL; } if (rv) { uint8_t *keyData; uint32_t keyLen; DBG_ERROR(AQHBCI_LOGDOMAIN, "Error unpadding message (%d), details follow", rv); keyData=GWEN_Crypt_KeySym_GetKeyDataPtr(sk); keyLen=GWEN_Crypt_KeySym_GetKeyDataLen(sk); DBG_ERROR(AQHBCI_LOGDOMAIN, "Key data (rxhProtocol: %d):", rxhProtocol); GWEN_Text_LogString((const char *) keyData, keyLen, AQHBCI_LOGDOMAIN, GWEN_LoggerLevel_Error); DBG_ERROR(AQHBCI_LOGDOMAIN, "Encrypted data:"); GWEN_Text_LogString((const char *) pSource, lSource, AQHBCI_LOGDOMAIN, GWEN_LoggerLevel_Error); DBG_ERROR(AQHBCI_LOGDOMAIN, "Decrypted data (after unpadding):"); GWEN_Text_LogString(GWEN_Buffer_GetStart(mbuf), GWEN_Buffer_GetUsedBytes(mbuf), AQHBCI_LOGDOMAIN, GWEN_LoggerLevel_Error); GWEN_Buffer_free(mbuf); return NULL; } return mbuf; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/msglayer/dialog.c0000664000175000017500000001664714044534776022066 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif /* #define AH_DIALOG_HEAVY_DEBUG */ #include "dialog_p.h" #include "aqhbci/aqhbci_l.h" #include "aqhbci/msglayer/hbci_l.h" #include "aqhbci/banking/user_l.h" #include "aqhbci/msglayer/msgengine_l.h" #include "aqhbci/banking/user.h" #include #include #include #include #include #include #ifdef OS_WIN32 # define AH_PATH_SEP "\\" #else # define AH_PATH_SEP "/" #endif AH_DIALOG *AH_Dialog_new(AB_USER *u, AB_PROVIDER *pro) { AH_DIALOG *dlg; AH_HBCI *h; GWEN_BUFFER *pbuf; assert(u); h=AH_User_GetHbci(u); GWEN_NEW_OBJECT(AH_DIALOG, dlg); dlg->usage=1; dlg->globalValues=GWEN_DB_Group_new("globalValues"); dlg->dialogId=strdup("0"); dlg->msgEngine=AH_User_GetMsgEngine(u); GWEN_MsgEngine_Attach(dlg->msgEngine); dlg->provider=pro; dlg->dialogOwner=u; /* create path */ pbuf=GWEN_Buffer_new(0, 256, 0, 1); if (AH_HBCI_AddBankPath(h, u, pbuf)) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not add bank path, cannot log"); GWEN_Buffer_free(pbuf); } else { GWEN_Buffer_AppendString(pbuf, AH_PATH_SEP "logs" AH_PATH_SEP); AH_HBCI_AppendUniqueName(h, pbuf); GWEN_Buffer_AppendString(pbuf, ".log"); dlg->logName=strdup(GWEN_Buffer_GetStart(pbuf)); } GWEN_Buffer_free(pbuf); return dlg; } void AH_Dialog_Attach(AH_DIALOG *dlg) { assert(dlg); dlg->usage++; } void AH_Dialog_free(AH_DIALOG *dlg) { if (dlg) { assert(dlg->usage); if (--(dlg->usage)==0) { DBG_DEBUG(AQHBCI_LOGDOMAIN, "Destroying AH_DIALOG"); GWEN_SyncIo_free(dlg->ioLayer); GWEN_HttpSession_free(dlg->httpSession); free(dlg->dialogId); free(dlg->logName); GWEN_MsgEngine_free(dlg->msgEngine); GWEN_DB_Group_free(dlg->globalValues); AH_TanMethod_free(dlg->tanMethodDescription); GWEN_FREE_OBJECT(dlg); } } } const char *AH_Dialog_GetLogFile(const AH_DIALOG *dlg) { assert(dlg); return dlg->logName; } uint32_t AH_Dialog_GetNextMsgNum(AH_DIALOG *dlg) { assert(dlg); return ++dlg->lastMsgNum; } uint32_t AH_Dialog_GetLastReceivedMsgNum(const AH_DIALOG *dlg) { assert(dlg); return dlg->lastReceivedMsgNum; } const char *AH_Dialog_GetDialogId(const AH_DIALOG *dlg) { assert(dlg); return dlg->dialogId; } void AH_Dialog_SetDialogId(AH_DIALOG *dlg, const char *s) { assert(dlg); free(dlg->dialogId); if (s) dlg->dialogId=strdup(s); else dlg->dialogId=0; } AB_USER *AH_Dialog_GetDialogOwner(const AH_DIALOG *dlg) { assert(dlg); return dlg->dialogOwner; } GWEN_MSGENGINE *AH_Dialog_GetMsgEngine(const AH_DIALOG *dlg) { assert(dlg); assert(dlg->msgEngine); return dlg->msgEngine; } int AH_Dialog_CheckReceivedMsgNum(AH_DIALOG *dlg, uint32_t msgnum) { assert(dlg); if (msgnum!=dlg->lastReceivedMsgNum+1) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Continuity error in received message " "(expected %d, got %d)", dlg->lastReceivedMsgNum+1, msgnum); return -1; } dlg->lastReceivedMsgNum++; return 0; } uint32_t AH_Dialog_GetFlags(const AH_DIALOG *dlg) { assert(dlg); return dlg->flags; } void AH_Dialog_SetFlags(AH_DIALOG *dlg, uint32_t f) { assert(dlg); dlg->flags=f; } GWEN_DB_NODE *AH_Dialog_GetGlobalValues(const AH_DIALOG *dlg) { assert(dlg); return dlg->globalValues; } void AH_Dialog_AddFlags(AH_DIALOG *dlg, uint32_t f) { assert(dlg); dlg->flags|=f; } void AH_Dialog_SubFlags(AH_DIALOG *dlg, uint32_t f) { assert(dlg); dlg->flags&=~f; } AH_HBCI *AH_Dialog_GetHbci(const AH_DIALOG *dlg) { assert(dlg); return AH_User_GetHbci(dlg->dialogOwner); } AB_BANKING *AH_Dialog_GetBankingApi(const AH_DIALOG *dlg) { return AH_HBCI_GetBankingApi(AH_Dialog_GetHbci(dlg)); } uint32_t AH_Dialog_GetLastMsgNum(const AH_DIALOG *dlg) { assert(dlg); return dlg->lastMsgNum; } /* network stuff */ int AH_Dialog_RecvMessage(AH_DIALOG *dlg, AH_MSG **pMsg) { assert(dlg); if (AH_User_GetCryptMode(dlg->dialogOwner)==AH_CryptMode_Pintan) return AH_Dialog_RecvMessage_Https(dlg, pMsg); else return AH_Dialog_RecvMessage_Hbci(dlg, pMsg); } int AH_Dialog_SendPacket(AH_DIALOG *dlg, const char *buf, int blen) { assert(dlg); if (AH_User_GetCryptMode(dlg->dialogOwner)==AH_CryptMode_Pintan) return AH_Dialog_SendPacket_Https(dlg, buf, blen); else return AH_Dialog_SendPacket_Hbci(dlg, buf, blen); } int AH_Dialog_SendMessage(AH_DIALOG *dlg, AH_MSG *msg) { int rv; GWEN_BUFFER *mbuf; assert(dlg); assert(msg); if (AH_Msg_GetDialog(msg)!=dlg) { DBG_WARN(AQHBCI_LOGDOMAIN, "Message wasn't created for this dialog !"); return GWEN_ERROR_INVALID; } mbuf=AH_Msg_GetBuffer(msg); assert(mbuf); rv=AH_Dialog_SendPacket(dlg, GWEN_Buffer_GetStart(mbuf), GWEN_Buffer_GetUsedBytes(mbuf)); if (rv) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Error sending message for dialog (%d)", rv); return rv; } DBG_DEBUG(AQHBCI_LOGDOMAIN, "Message sent"); return 0; } int AH_Dialog_ExchangeMessages(AH_DIALOG *dlg, AH_MSG *msgToSend, AH_MSG **pMsgReceived) { int rv; rv=AH_Dialog_SendMessage(dlg, msgToSend); if (rv) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } rv=AH_Dialog_RecvMessage(dlg, pMsgReceived); if (rv) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } return rv; } int AH_Dialog_Connect(AH_DIALOG *dlg) { AH_Dialog_AddFlags(dlg, AH_DIALOG_FLAGS_INITIATOR); if (AH_User_GetCryptMode(dlg->dialogOwner)==AH_CryptMode_Pintan) return AH_Dialog_Connect_Https(dlg); else return AH_Dialog_Connect_Hbci(dlg); } int AH_Dialog_Disconnect(AH_DIALOG *dlg) { if (AH_User_GetCryptMode(dlg->dialogOwner)==AH_CryptMode_Pintan) return AH_Dialog_Disconnect_Https(dlg); else return AH_Dialog_Disconnect_Hbci(dlg); } void AH_Dialog_SetItanMethod(AH_DIALOG *dlg, uint32_t i) { assert(dlg); dlg->itanMethod=i; } uint32_t AH_Dialog_GetItanMethod(const AH_DIALOG *dlg) { assert(dlg); return dlg->itanMethod; } int AH_Dialog_GetItanProcessType(const AH_DIALOG *dlg) { assert(dlg); return dlg->itanProcessType; } void AH_Dialog_SetItanProcessType(AH_DIALOG *dlg, int i) { assert(dlg); dlg->itanProcessType=i; } int AH_Dialog_GetTanJobVersion(const AH_DIALOG *dlg) { assert(dlg); return dlg->tanJobVersion; } void AH_Dialog_SetTanJobVersion(AH_DIALOG *dlg, int i) { assert(dlg); dlg->tanJobVersion=i; } const AH_TAN_METHOD *AH_Dialog_GetTanMethodDescription(const AH_DIALOG *dlg) { assert(dlg); return dlg->tanMethodDescription; } void AH_Dialog_SetTanMethodDescription(AH_DIALOG *dlg, const AH_TAN_METHOD *tm) { assert(dlg); AH_TanMethod_free(dlg->tanMethodDescription); if (tm) dlg->tanMethodDescription=AH_TanMethod_dup(tm); else dlg->tanMethodDescription=NULL; } #include "dialog_hbci.c" #include "dialog_https.c" aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/msglayer/hbci_l.h0000664000175000017500000000735614043610745022037 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWHBCI_HBCI_L_H #define GWHBCI_HBCI_L_H #include #include #include #include #include "aqhbci.h" #include typedef struct AH_HBCI AH_HBCI; #include "aqhbci/banking/user.h" #include "aqhbci/banking/account.h" #define AH_DEFAULT_KEYLEN 768 #define AH_HBCI_LAST_VERSION_NONE 0xffffffff int AH_HBCI_AddObjectPath(const AH_HBCI *hbci, const char *country, const char *bankId, const char *accountId, const char *userId, const char *customerId, GWEN_BUFFER *nbuf); int AH_HBCI_GetAccountPath(const AH_HBCI *hbci, const AB_ACCOUNT *acc, GWEN_BUFFER *buf); int AH_HBCI_GetCustomerPath(const AH_HBCI *hbci, const AB_USER *u, GWEN_BUFFER *buf); int AH_HBCI_AddBankPath(const AH_HBCI *hbci, const AB_USER *u, GWEN_BUFFER *nbuf); int AH_HBCI_AddUserPath(const AH_HBCI *hbci, const AB_USER *u, GWEN_BUFFER *nbuf); int AH_HBCI_AddCustomerPath(const AH_HBCI *hbci, const AB_USER *u, GWEN_BUFFER *nbuf); int AH_HBCI_AddAccountPath(const AH_HBCI *hbci, const AB_ACCOUNT *a, GWEN_BUFFER *nbuf); void AH_HBCI_AppendUniqueName(AH_HBCI *hbci, GWEN_BUFFER *nbuf); GWEN_XMLNODE *AH_HBCI_GetDefinitions(const AH_HBCI *hbci); uint32_t AH_HBCI_GetLastVersion(const AH_HBCI *hbci); GWEN_DB_NODE *AH_HBCI_GetProviderDb(const AH_HBCI *hbci); /** @name Constructors, Destructors * */ /*@{*/ AH_HBCI *AH_HBCI_new(AB_PROVIDER *pro); void AH_HBCI_free(AH_HBCI *hbci); /*@}*/ /** @name Informational Functions * */ /*@{*/ const char *AH_HBCI_GetProductName(const AH_HBCI *hbci); const char *AH_HBCI_GetProductVersion(const AH_HBCI *hbci); AB_BANKING *AH_HBCI_GetBankingApi(const AH_HBCI *hbci); AB_PROVIDER *AH_HBCI_GetProvider(const AH_HBCI *hbci); /*@}*/ int AH_HBCI_Init(AH_HBCI *hbci, GWEN_DB_NODE *db); int AH_HBCI_Fini(AH_HBCI *hbci, GWEN_DB_NODE *db); int AH_HBCI_AddBankPath(const AH_HBCI *hbci, const AB_USER *u, GWEN_BUFFER *nbuf); int AH_HBCI_AddUserPath(const AH_HBCI *hbci, const AB_USER *u, GWEN_BUFFER *nbuf); int AH_HBCI_AddCustomerPath(const AH_HBCI *hbci, const AB_USER *u, GWEN_BUFFER *nbuf); int AH_HBCI_AddAccountPath(const AH_HBCI *hbci, const AB_ACCOUNT *a, GWEN_BUFFER *nbuf); int AH_HBCI_SaveMessage(AH_HBCI *hbci, const AB_USER *u, GWEN_DB_NODE *dbMsg); GWEN_DB_NODE *AH_HBCI_GetSharedRuntimeData(const AH_HBCI *hbci); int AH_HBCI_GetTransferTimeout(const AH_HBCI *hbci); void AH_HBCI_SetTransferTimeout(AH_HBCI *hbci, int i); int AH_HBCI_GetConnectTimeout(const AH_HBCI *hbci); void AH_HBCI_SetConnectTimeout(AH_HBCI *hbci, int i); int AH_HBCI_CheckStringSanity(const char *s); #endif /* GWHBCI_HBCI_L_H */ aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/msglayer/msgcrypt_pintan_encrypt.h0000664000175000017500000000113014546575650025601 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2023 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_MSGCRYPT_PINTAN_ENCRYPT_H #define AH_MSGCRYPT_PINTAN_ENCRYPT_H #include "aqhbci/msglayer/msgcrypt_pintan.h" int AH_Msg_EncryptPinTan(AH_MSG *hmsg); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/msglayer/hbci-updates.c0000664000175000017500000000655514044534776023174 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "aqhbci/msglayer/hbci-updates_p.h" #include "aqhbci/banking/user_l.h" #include "aqhbci/banking/account_l.h" #include "aqbanking/i18n_l.h" #include #include int AH_HBCI_UpdateDbUser(AH_HBCI *hbci, GWEN_DB_NODE *db) { int rv; uint32_t oldVersion; uint32_t currentVersion; oldVersion=AH_HBCI_GetLastVersion(hbci); currentVersion= (AQBANKING_VERSION_MAJOR<<24) | (AQBANKING_VERSION_MINOR<<16) | (AQBANKING_VERSION_PATCHLEVEL<<8) | AQBANKING_VERSION_BUILD; if (currentVersion>oldVersion) { DBG_WARN(AQHBCI_LOGDOMAIN, "Updating user from %d.%d.%d.%d", (oldVersion>>24) & 0xff, (oldVersion>>16) & 0xff, (oldVersion>>8) & 0xff, oldVersion & 0xff); if (oldVersion<((5<<24) | (0<<16) | (3<<8) | 1)) { DBG_WARN(AQHBCI_LOGDOMAIN, "Updating user from pre 5.0.3.1"); rv=AH_HBCI_UpdateUser_5_0_3_1(hbci, db); if (rv) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } } /* insert more updates here */ /* updated! */ return 1; } /* if update */ else /* not updated */ return 0; } int AH_HBCI_UpdateUser_5_0_3_1(AH_HBCI *hbci, GWEN_DB_NODE *db) { int tmn; /* update selectedTanMethod */ tmn=GWEN_DB_GetIntValue(db, "selectedTanMethod", 0, 0); if (tmn>0 && tmn < 1000) { GWEN_DB_NODE *dbT; /* get first version group of "bpd/bpdjobs/HITANS" */ dbT=GWEN_DB_GetGroup(db, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "bpd"); if (dbT) dbT=GWEN_DB_GetGroup(dbT, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "bpdjobs"); if (dbT) dbT=GWEN_DB_GetGroup(dbT, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "HITANS"); if (dbT) dbT=GWEN_DB_GetFirstGroup(dbT); if (dbT) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Starting with group %s", GWEN_DB_GroupName(dbT)); } else { DBG_ERROR(AQHBCI_LOGDOMAIN, "No group"); } while (dbT) { int foundTm=0; int version; /* find tanMethod group in any of the tanMethod groups of every HITANS version */ version=atoi(GWEN_DB_GroupName(dbT)); if (version>0) { GWEN_DB_NODE *dbM; dbM=GWEN_DB_FindFirstGroup(dbT, "tanMethod"); while (dbM) { int fn; fn=GWEN_DB_GetIntValue(dbM, "function", 0, 0); if (fn==tmn) { int newFn; newFn=(version*1000)+fn; DBG_WARN(AQHBCI_LOGDOMAIN, "Updating selectedTanMethod from %d to %d", tmn, newFn); GWEN_DB_SetIntValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "selectedTanMethod", newFn); foundTm=1; break; } dbM=GWEN_DB_FindNextGroup(dbM, "tanMethod"); } } if (foundTm) break; dbT=GWEN_DB_GetNextGroup(dbT); } } else { DBG_ERROR(AQHBCI_LOGDOMAIN, "No selectedTanMethod"); } return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/msglayer/msgcrypt_pintan.h0000664000175000017500000000171414546575650024045 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_MSGCRYPT_PINTAN_H #define AH_MSGCRYPT_PINTAN_H #include "aqhbci/msglayer/message_l.h" int AH_MsgPinTan_PrepareCryptoSeg(AH_MSG *hmsg, AB_USER *u, GWEN_DB_NODE *cfg, int crypt, int createCtrlRef); int AH_Msg_SignPinTan(AH_MSG *hmsg, GWEN_UNUSED GWEN_BUFFER *rawBuf, const char *signer); int AH_Msg_EncryptPinTan(AH_MSG *hmsg); int AH_Msg_DecryptPinTan(AH_MSG *hmsg, GWEN_DB_NODE *gr); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/msglayer/msgcrypt.h0000664000175000017500000000251414546575650022473 00000000000000/*************************************************************************** begin : Tue Nov 25 2008 copyright : (C) 2023 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_MSGCRYPT_H #define AH_MSGCRYPT_H #include #include int AH_Msg_SampleSigHeadsAndTailsFromDecodedMsg(GWEN_DB_NODE *gr, GWEN_LIST *sigheads, GWEN_LIST *sigtails); int AH_Msg_GetStartPosOfSignedData(const GWEN_LIST *sigheads); int AH_Msg_GetFirstPosBehindSignedData(const GWEN_LIST *sigtails); int AH_Msg_CreateCtrlRef(char *ctrlref, int len); typedef int (*AH_MSG_VERIFY_SIGNATURES_FN)(AH_MSG *hmsg, GWEN_DB_NODE *dbParsedMsg, GWEN_LIST *sigheads, GWEN_LIST *sigtails, unsigned int signedDataBeginPos, unsigned int signedDataLength); int AH_Msg_VerifyWithCallback(AH_MSG *hmsg, GWEN_DB_NODE *dbParsedMsg, AH_MSG_VERIFY_SIGNATURES_FN verifyCallback); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/msglayer/message_p.h0000664000175000017500000000261014463251767022561 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_MESSAGE_P_H #define AH_MESSAGE_P_H #define AH_MSG_DEFAULTSIZE 512 #define AH_MSG_DEFAULTRESERVE 256 #define AH_MSG_DEFAULTSTEP 512 #include "message_l.h" struct AH_MSG { GWEN_LIST_ELEMENT(AH_MSG); AH_DIALOG *dialog; GWEN_BUFFER *buffer; GWEN_BUFFER *origbuffer; GWEN_STRINGLIST *signerIdList; char *crypterId; char *expectedSigner; char *expectedCrypter; unsigned int hbciVersion; int secProfile; int secClass; unsigned int nodes; unsigned int firstSegment; unsigned int lastSegment; unsigned int msgNum; unsigned int refMsgNum; int enableInsert; int hasWarnings; int hasErrors; int resultCode; char *resultText; char *resultParam; char *usedTan; int needTan; int noSysId; int signSeqOne; /* set signature sequence to 1 (used by AH_Msg_SignRxh) */ char *usedPin; int itanMethod; int itanHashMode; GWEN_BUFFER *itanHashBuffer; GWEN_DB_NODE *decodedMsg; }; #endif /* AH_MESSAGE_P_H */ aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/msglayer/hbci-updates_p.h0000664000175000017500000000157114043610745023477 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_HBCI_UPDATES_P_H #define AH_HBCI_UPDATES_P_H #include "hbci-updates_l.h" /** @name Init Update Functions * * Functions of this group are called from AB_Provider_Init(). */ /*@{*/ /*@}*/ /** @name User DB Update Functions * * Functions in this group called from @ref AB_User_Extend. */ /*@{*/ /** * This update transforms selectedTanMethod */ static int AH_HBCI_UpdateUser_5_0_3_1(AH_HBCI *hbci, GWEN_DB_NODE *db); /*@}*/ #endif aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/msglayer/msgcrypt_rxh_common.h0000664000175000017500000000527514576127360024725 00000000000000/*************************************************************************** begin : Tue Nov 25 2008 copyright : (C) 2020 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_MSGCRYPT_RXH_COMMON_H #define AH_MSGCRYPT_RXH_COMMON_H #include "aqhbci/msglayer/hbci_l.h" #include "aqhbci/msglayer/message_l.h" #include #define AH_MSGRXH_MAXKEYBUF 4096 typedef enum { AH_Opmode_None=0, AH_Opmode_Cbc=2, AH_Opmode_Iso9796_1=16, AH_Opmode_Iso9796_2=17, AH_Opmode_Rsa_Pkcs1_v1_5=18, AH_Opmode_Rsa_Pss=19, AH_Opmode_Retail_MAC=999 } AH_OPMODE; typedef enum { AH_HashAlg_None=0, AH_HashAlg_Sha1=1, AH_HashAlg_Sha256=3, AH_HashAlg_Sha256Sha256=6, AH_HashAlg_Ripmed160=999 } AH_HASH_ALG; typedef enum { AH_SignAlg_DES=1, AH_SignAlg_RSA=10 } AH_SIGN_ALG; typedef enum { AH_CryptAlg_2_Key_Triple_Des=13, AH_CryptAlg_AES256=14 } AH_CRYPT_ALG; typedef enum { AH_UsageSign_None=0, AH_UsageSign_OwnerSigning=6 } AH_USAGE_SIGN; typedef struct { AH_CRYPT_MODE protocol; uint8_t protocolVersion; AH_SIGN_ALG signAlgo; /* Signaturalgorithmus, kodiert */ AH_OPMODE opmodSignS; /* Operationsmodus bei Signatur (Signierschluessel) */ AH_OPMODE opmodSignD; /* Operationsmodus bei Signatur (Signaturschluessel) */ AH_USAGE_SIGN usageSign; /* Verwendung des Signaturalgorithmus */ AH_HASH_ALG hashAlgS; /* Hashalgorithmus, kodiert (Signierschluessel) */ AH_HASH_ALG hashAlgD; /* Hashalgorithmus, kodiert (Signaturschluessel) */ AH_CRYPT_ALG cryptAlg; /* Verschluesselungsalgorithmus, kodiert */ AH_OPMODE opmodCrypt; /* Operationsmodus bei Verschluesselung */ } RXH_PARAMETER; const RXH_PARAMETER *AH_MsgRxh_GetParameters(AH_CRYPT_MODE cryptMode, int rxhVersion); GWEN_CRYPT_TOKEN *AH_MsgRxh_GetOpenCryptToken(AH_MSG *hmsg); const GWEN_CRYPT_TOKEN_CONTEXT *AH_MsgRxh_GetUserContext(AH_MSG *hmsg); int AH_MsgRxh_PrepareCryptoSeg(AH_MSG *hmsg, AB_USER *u, const RXH_PARAMETER *rxh_parameter, int keyNum, int keyVer, const GWEN_CRYPT_TOKEN_KEYINFO *ki, GWEN_DB_NODE *cfg, int crypt, int createCtrlRef); int AH_Msg_SignRxh(AH_MSG *hmsg, GWEN_BUFFER *rawBuf, const char *signer); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/msglayer/msgcrypt_pintan_sign.c0000664000175000017500000001735314546575650025066 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2023 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "aqhbci/msglayer/msgcrypt_pintan_sign.h" #include "aqhbci/msglayer/msgcrypt.h" #include "aqhbci/banking/user_l.h" #include "message_p.h" #include "aqbanking/i18n_l.h" #include "aqbanking/banking_be.h" /* ------------------------------------------------------------------------------------------------ * forward declarations * ------------------------------------------------------------------------------------------------ */ static int _createAndInsertSigHead(AH_MSG *hmsg, AB_USER *su, GWEN_MSGENGINE *e, const char *ctrlref); static int _createAndAppendSigTail(AH_MSG *hmsg, AB_USER *su, GWEN_MSGENGINE *e, const char *ctrlref); static GWEN_BUFFER *_pinTanCreateSigHead(AH_MSG *hmsg, AB_USER *su, GWEN_MSGENGINE *e, const char *ctrlref); static GWEN_BUFFER *_pinTanCreateSigTail(AH_MSG *hmsg, AB_USER *su, GWEN_MSGENGINE *e, const char *ctrlref); /* ------------------------------------------------------------------------------------------------ * implementations * ------------------------------------------------------------------------------------------------ */ int AH_Msg_SignPinTan(AH_MSG *hmsg, GWEN_UNUSED GWEN_BUFFER *rawBuf, const char *signer) { int rv; char ctrlref[15]; GWEN_MSGENGINE *e; AB_USER *su; assert(hmsg); e=AH_Dialog_GetMsgEngine(hmsg->dialog); assert(e); GWEN_MsgEngine_SetMode(e, "pintan"); rv=AH_Msg_CreateCtrlRef(ctrlref, sizeof(ctrlref)); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } su=AH_Msg_GetUser(hmsg, signer); if (!su) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Unknown user \"%s\"", signer); return GWEN_ERROR_NOT_FOUND; } rv=_createAndInsertSigHead(hmsg, su, e, ctrlref); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } rv=_createAndAppendSigTail(hmsg, su, e, ctrlref); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } /* adjust segment numbers (for next signature and message tail */ hmsg->firstSegment--; hmsg->lastSegment++; return 0; } int _createAndInsertSigHead(AH_MSG *hmsg, AB_USER *su, GWEN_MSGENGINE *e, const char *ctrlref) { /* create and insert signature head */ GWEN_BUFFER *hbuf; hbuf=_pinTanCreateSigHead(hmsg, su, e, ctrlref); if (hbuf==NULL) { DBG_INFO(AQHBCI_LOGDOMAIN, "here"); return GWEN_ERROR_GENERIC; } /* insert new SigHead at beginning of message buffer */ DBG_DEBUG(AQHBCI_LOGDOMAIN, "Inserting signature head"); GWEN_Buffer_Rewind(hmsg->buffer); GWEN_Buffer_InsertBytes(hmsg->buffer, GWEN_Buffer_GetStart(hbuf), GWEN_Buffer_GetUsedBytes(hbuf)); GWEN_Buffer_free(hbuf); return 0; } int _createAndAppendSigTail(AH_MSG *hmsg, AB_USER *su, GWEN_MSGENGINE *e, const char *ctrlref) { GWEN_BUFFER *hbuf; hbuf=_pinTanCreateSigTail(hmsg, su, e, ctrlref); if (hbuf==NULL) { DBG_INFO(AQHBCI_LOGDOMAIN, "here"); return GWEN_ERROR_GENERIC; } /* append sigtail */ DBG_DEBUG(AQHBCI_LOGDOMAIN, "Appending signature tail"); if (GWEN_Buffer_AppendBuffer(hmsg->buffer, hbuf)) { DBG_INFO(AQHBCI_LOGDOMAIN, "here"); GWEN_Buffer_free(hbuf); return GWEN_ERROR_MEMORY_FULL; } DBG_DEBUG(AQHBCI_LOGDOMAIN, "Appending signature tail: done"); GWEN_Buffer_free(hbuf); return 0; } GWEN_BUFFER *_pinTanCreateSigHead(AH_MSG *hmsg, AB_USER *su, GWEN_MSGENGINE *e, const char *ctrlref) { uint32_t uFlags; GWEN_DB_NODE *cfg; GWEN_BUFFER *hbuf; uint32_t tm; const char *p; int rv; hbuf=GWEN_Buffer_new(0, 256, 0, 1); cfg=GWEN_DB_Group_new("sighead"); uFlags=AH_User_GetFlags(su); /* for iTAN mode: set selected mode (Sicherheitsfunktion, kodiert) */ tm=AH_Msg_GetItanMethod(hmsg); if (tm==0) { tm=AH_Dialog_GetItanMethod(hmsg->dialog); if (tm) /* this is needed by AH_MsgPinTan_PrepareCryptoSeg */ AH_Msg_SetItanMethod(hmsg, tm); } /* prepare config for segment */ rv=AH_MsgPinTan_PrepareCryptoSeg(hmsg, su, cfg, 0, 0); /* dont create trlref */ if (rv) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); GWEN_DB_Group_free(cfg); GWEN_Buffer_free(hbuf); return NULL; } GWEN_DB_SetCharValue(cfg, GWEN_DB_FLAGS_DEFAULT, "ctrlref", ctrlref); /* set expected signer */ if (!(uFlags & AH_USER_FLAGS_BANK_DOESNT_SIGN)) { const char *remoteId; remoteId=AH_User_GetPeerId(su); if (!remoteId || *remoteId==0) remoteId=AB_User_GetUserId(su); assert(remoteId); assert(*remoteId); DBG_DEBUG(AQHBCI_LOGDOMAIN, "Expecting \"%s\" to sign the response", remoteId); AH_Msg_SetExpectedSigner(hmsg, remoteId); } /* store system id */ if (!hmsg->noSysId) p=AH_User_GetSystemId(su); else p=NULL; GWEN_DB_SetCharValue(cfg, GWEN_DB_FLAGS_DEFAULT, "SecDetails/SecId", p?p:"0"); if (tm) GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "function", tm); /* create SigHead */ GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "head/seq", hmsg->firstSegment-1); GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "signseq", 1); /* create signature head segment */ rv=AH_Msg_GenerateAndAddSegment(e, "SigHead", cfg, hbuf); if (rv) { DBG_INFO(AQHBCI_LOGDOMAIN, "Could not create SigHead"); GWEN_DB_Group_free(cfg); GWEN_Buffer_free(hbuf); return NULL; } GWEN_DB_Group_free(cfg); return hbuf; } GWEN_BUFFER *_pinTanCreateSigTail(AH_MSG *hmsg, AB_USER *su, GWEN_MSGENGINE *e, const char *ctrlref) { GWEN_DB_NODE *cfg; GWEN_BUFFER *hbuf; char pin[64]; int rv; /* create sigtail */ DBG_DEBUG(AQHBCI_LOGDOMAIN, "Completing signature tail"); hbuf=GWEN_Buffer_new(0, 256, 0, 1); cfg=GWEN_DB_Group_new("sigtail"); GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "head/seq", hmsg->lastSegment+1); GWEN_DB_SetBinValue(cfg, GWEN_DB_FLAGS_DEFAULT, "signature", "NOSIGNATURE", 11); GWEN_DB_SetCharValue(cfg, GWEN_DB_FLAGS_DEFAULT, "ctrlref", ctrlref); /* handle pin */ memset(pin, 0, sizeof(pin)); rv=AH_User_InputPin(su, pin, 4, sizeof(pin), 0); if (rv<0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Error getting pin from medium (%d)", rv); GWEN_DB_Group_free(cfg); GWEN_Buffer_free(hbuf); memset(pin, 0, sizeof(pin)); return NULL; } GWEN_DB_SetCharValue(cfg, GWEN_DB_FLAGS_DEFAULT, "pin", pin); AH_Msg_SetPin(hmsg, pin); memset(pin, 0, sizeof(pin)); /* handle tan */ if (hmsg->needTan) { DBG_NOTICE(AQHBCI_LOGDOMAIN, "This queue needs a TAN"); if (hmsg->usedTan) { DBG_NOTICE(AQHBCI_LOGDOMAIN, "Using existing TAN"); GWEN_DB_SetCharValue(cfg, GWEN_DB_FLAGS_DEFAULT, "tan", hmsg->usedTan); } else { char tan[16]; memset(tan, 0, sizeof(tan)); DBG_NOTICE(AQHBCI_LOGDOMAIN, "Asking for TAN"); rv=AH_User_InputTan(su, tan, 4, sizeof(tan)); if (rv<0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Error getting TAN from medium"); GWEN_DB_Group_free(cfg); GWEN_Buffer_free(hbuf); return NULL; } GWEN_DB_SetCharValue(cfg, GWEN_DB_FLAGS_DEFAULT, "tan", tan); AH_Msg_SetTan(hmsg, tan); } } else { DBG_NOTICE(AQHBCI_LOGDOMAIN, "This queue doesn't need a TAN"); } rv=AH_Msg_GenerateAndAddSegment(e, "SigTail", cfg, hbuf); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(hbuf); GWEN_DB_Group_free(cfg); return NULL; } GWEN_DB_Group_free(cfg); return hbuf; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/msglayer/message.c0000664000175000017500000015337314576274523022252 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif /* #define AH_MSG_HEAVY_DEBUG */ #include "message_p.h" #include "aqhbci/aqhbci_l.h" #include "aqhbci/msglayer/hbci_l.h" #include "aqhbci/msglayer/dialog_l.h" #include "aqhbci/msglayer/msgengine_l.h" #include "aqhbci/banking/user_l.h" #include "aqhbci/banking/provider.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include GWEN_LIST_FUNCTIONS(AH_MSG, AH_Msg); /* ------------------------------------------------------------------------------------------------ * forward declarations * ------------------------------------------------------------------------------------------------ */ static int AH_Msg_AddMsgTail(AH_MSG *hmsg); static int AH_Msg_AddMsgHead(AH_MSG *hmsg); static int AH_Msg_ReadSegment(AH_MSG *hmsg, GWEN_MSGENGINE *e, const char *gtype, GWEN_BUFFER *mbuf, GWEN_DB_NODE *gr, unsigned int flags); static int AH_Msg_ReadMessage(AH_MSG *hmsg, GWEN_MSGENGINE *e, const char *gtype, GWEN_BUFFER *mbuf, GWEN_DB_NODE *gr, unsigned int flags); static int AH_Msg_SequenceCheck(GWEN_DB_NODE *gr); static int AH_Msg__Sign(AH_MSG *hmsg, GWEN_BUFFER *rawBuf, const char *signer); static int AH_Msg__Encrypt(AH_MSG *hmsg); static int AH_Msg__Decrypt(AH_MSG *hmsg, GWEN_DB_NODE *gr); static int AH_Msg__Verify(AH_MSG *hmsg, GWEN_DB_NODE *gr); static int AH_Msg__AnonHnsha(const char *psegment, unsigned int slen, GWEN_SYNCIO *sio); static int AH_Msg__AnonHkpae(const char *psegment, unsigned int slen, GWEN_SYNCIO *sio); /* ------------------------------------------------------------------------------------------------ * implementations * ------------------------------------------------------------------------------------------------ */ /* --------------------------------------------------------------- FUNCTION */ int AH_Msg_AddSignerId(AH_MSG *hmsg, const char *s) { assert(hmsg); if (hmsg->nodes) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Signers must be added before nodes !"); return GWEN_ERROR_INVALID; } return GWEN_StringList_AppendString(hmsg->signerIdList, s, 0, 1); } /* --------------------------------------------------------------- FUNCTION */ unsigned int AH_Msg_GetSignerCount(AH_MSG *hmsg) { assert(hmsg); return GWEN_StringList_Count(hmsg->signerIdList); } /* --------------------------------------------------------------- FUNCTION */ GWEN_BUFFER *AH_Msg_GetBuffer(AH_MSG *hmsg) { assert(hmsg); return hmsg->buffer; } /* --------------------------------------------------------------- FUNCTION */ GWEN_BUFFER *AH_Msg_TakeBuffer(AH_MSG *hmsg) { GWEN_BUFFER *bf; assert(hmsg); bf=hmsg->buffer; hmsg->buffer=0; return bf; } /* --------------------------------------------------------------- FUNCTION */ void AH_Msg_SetBuffer(AH_MSG *hmsg, GWEN_BUFFER *bf) { assert(hmsg); GWEN_Buffer_free(hmsg->buffer); hmsg->buffer=bf; } /* --------------------------------------------------------------- FUNCTION */ unsigned int AH_Msg_GetMsgNum(const AH_MSG *hmsg) { assert(hmsg); return hmsg->msgNum; } /* --------------------------------------------------------------- FUNCTION */ unsigned int AH_Msg_GetMsgRef(const AH_MSG *hmsg) { assert(hmsg); return hmsg->refMsgNum; } /* --------------------------------------------------------------- FUNCTION */ void AH_Msg_SetMsgRef(AH_MSG *hmsg, unsigned int i) { assert(hmsg); hmsg->refMsgNum=i; } /* --------------------------------------------------------------- FUNCTION */ unsigned int AH_Msg_GetNodes(AH_MSG *hmsg) { assert(hmsg); return hmsg->nodes; } /* --------------------------------------------------------------- FUNCTION */ AH_MSG *AH_Msg_new(AH_DIALOG *dlg) { AH_MSG *hmsg; assert(dlg); GWEN_NEW_OBJECT(AH_MSG, hmsg); GWEN_LIST_INIT(AH_MSG, hmsg); hmsg->dialog=dlg; AH_Dialog_Attach(dlg); hmsg->buffer=GWEN_Buffer_new(0, AH_MSG_DEFAULTSIZE, 0, 1); GWEN_Buffer_ReserveBytes(hmsg->buffer, AH_MSG_DEFAULTRESERVE); GWEN_Buffer_SetStep(hmsg->buffer, AH_MSG_DEFAULTSTEP); hmsg->signerIdList=GWEN_StringList_new(); return hmsg; } /* --------------------------------------------------------------- FUNCTION */ void AH_Msg_free(AH_MSG *hmsg) { if (hmsg) { DBG_DEBUG(AQHBCI_LOGDOMAIN, "Destroying AH_MSG"); GWEN_LIST_FINI(AH_MSG, hmsg); GWEN_StringList_free(hmsg->signerIdList); GWEN_Buffer_free(hmsg->itanHashBuffer); GWEN_Buffer_free(hmsg->buffer); GWEN_Buffer_free(hmsg->origbuffer); AH_Dialog_free(hmsg->dialog); free(hmsg->crypterId); free(hmsg->resultText); free(hmsg->resultParam); free(hmsg->usedTan); free(hmsg->expectedSigner); free(hmsg->expectedCrypter); if (hmsg->usedPin) { memset(hmsg->usedPin, 0, strlen(hmsg->usedPin)); free(hmsg->usedPin); } GWEN_DB_Group_free(hmsg->decodedMsg); GWEN_FREE_OBJECT(hmsg); } } /* --------------------------------------------------------------- FUNCTION */ AB_USER *AH_Msg_GetUser(const AH_MSG *hmsg, const char *userId) { assert(hmsg); if (hmsg->dialog) { AB_USER *u; u=AH_Dialog_GetDialogOwner(hmsg->dialog); if (u) { const char *s; s=AB_User_GetUserId(u); if (s && *s && userId && *userId && strcasecmp(userId, s)==0) return u; } } return NULL; } /* --------------------------------------------------------------- FUNCTION */ int AH_Msg_GetSecurityProfile(const AH_MSG *hmsg) { assert(hmsg); return hmsg->secProfile; } /* --------------------------------------------------------------- FUNCTION */ void AH_Msg_SetSecurityProfile(AH_MSG *hmsg, int i) { assert(hmsg); hmsg->secProfile=i; } int AH_Msg_GetSecurityClass(const AH_MSG *hmsg) { assert(hmsg); return hmsg->secClass; } void AH_Msg_SetSecurityClass(AH_MSG *hmsg, int i) { assert(hmsg); hmsg->secClass=i; } /* --------------------------------------------------------------- FUNCTION */ int AH_Msg_AddMsgTail(AH_MSG *hmsg) { GWEN_XMLNODE *node; GWEN_DB_NODE *cfg; int rv; GWEN_MSGENGINE *e; assert(hmsg); e=AH_Dialog_GetMsgEngine(hmsg->dialog); assert(e); node=GWEN_MsgEngine_FindNodeByPropertyStrictProto(e, "SEG", "id", 0, "MsgTail"); if (!node) { DBG_INFO(AQHBCI_LOGDOMAIN, "Segment \"MsgTail\" not found"); return -1; } cfg=GWEN_DB_Group_new("msgtail"); GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "head/seq", hmsg->lastSegment+1); GWEN_Buffer_SetPos(hmsg->buffer, GWEN_Buffer_GetUsedBytes(hmsg->buffer)); rv=GWEN_MsgEngine_CreateMessageFromNode(e, node, hmsg->buffer, cfg); GWEN_DB_Group_free(cfg); if (rv) { DBG_INFO(AQHBCI_LOGDOMAIN, "Could not create msgTail"); return -1; } return 0; } /* --------------------------------------------------------------- FUNCTION */ int AH_Msg_AddMsgHead(AH_MSG *hmsg) { GWEN_XMLNODE *node; GWEN_DB_NODE *cfg; GWEN_BUFFER *hbuf; unsigned int msize; int rv; GWEN_MSGENGINE *e; assert(hmsg); e=AH_Dialog_GetMsgEngine(hmsg->dialog); assert(e); node=GWEN_MsgEngine_FindNodeByPropertyStrictProto(e, "SEG", "id", 0, "MsgHead"); if (!node) { DBG_INFO(AQHBCI_LOGDOMAIN, "Segment \"MsgHead\"not found"); return -1; } cfg=GWEN_DB_Group_new("msghead"); GWEN_DB_SetCharValue(cfg, GWEN_DB_FLAGS_DEFAULT, "dialogid", AH_Dialog_GetDialogId(hmsg->dialog)); GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "msgnum", hmsg->msgNum); if (hmsg->refMsgNum) { DBG_DEBUG(AQHBCI_LOGDOMAIN, "Adding Reference Message Number"); /* add message reference */ GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "msgref/msgnum", hmsg->refMsgNum); GWEN_DB_SetCharValue(cfg, GWEN_DB_FLAGS_DEFAULT, "msgref/dialogid", AH_Dialog_GetDialogId(hmsg->dialog)); } DBG_DEBUG(AQHBCI_LOGDOMAIN, "Protocol version is %d", GWEN_MsgEngine_GetProtocolVersion(e)); GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "hversion", GWEN_MsgEngine_GetProtocolVersion(e)); GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "size", 1); GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "head/seq", 1); hbuf=GWEN_Buffer_new(0, 128, 0, 1); /* create first version of msgHead just to calculate the size */ rv=GWEN_MsgEngine_CreateMessageFromNode(e, node, hbuf, cfg); if (rv) { DBG_INFO(AQHBCI_LOGDOMAIN, "Could not create msgHead"); GWEN_Buffer_free(hbuf); GWEN_DB_Group_free(cfg); return -1; } msize=GWEN_Buffer_GetUsedBytes(hmsg->buffer)+ GWEN_Buffer_GetUsedBytes(hbuf); DBG_DEBUG(AQHBCI_LOGDOMAIN, "Message size is: %d", msize); GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_OVERWRITE_VARS, "size", msize); GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_DEFAULT, "head/seq", 1); GWEN_Buffer_Reset(hbuf); /* create final version of msgHead (we now know the size) */ rv=GWEN_MsgEngine_CreateMessageFromNode(e, node, hbuf, cfg); GWEN_DB_Group_free(cfg); if (rv) { DBG_INFO(AQHBCI_LOGDOMAIN, "Could not create 2nd version of msgHead"); GWEN_Buffer_free(hbuf); return -1; } /* insert msgHead */ GWEN_Buffer_SetPos(hmsg->buffer, 0); if (GWEN_Buffer_InsertBuffer(hmsg->buffer, hbuf)) { DBG_INFO(AQHBCI_LOGDOMAIN, "Could not insert msgHead"); GWEN_Buffer_free(hbuf); return -1; } GWEN_Buffer_free(hbuf); return 0; } /* --------------------------------------------------------------- FUNCTION */ unsigned int AH_Msg_GetCurrentSegmentNumber(AH_MSG *hmsg) { if (hmsg->firstSegment==0) { unsigned int rv; rv=2; if (hmsg->enableInsert) rv++; rv+=GWEN_StringList_Count(hmsg->signerIdList); return rv; } return hmsg->lastSegment+1; } static int _createMessageFromNode(GWEN_MSGENGINE *e, GWEN_XMLNODE *node, GWEN_BUFFER *msgBuf, GWEN_DB_NODE *data) { int rv; GWEN_BUFFER *dbuf; uint32_t len; dbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_MsgEngine_CreateMessageFromNode(e, node, dbuf, data); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(dbuf); return rv; } /* remove trailing "+" */ len=GWEN_Buffer_GetUsedBytes(dbuf); if (len>2) { char *ptr; int pos; pos=len-2; ptr=GWEN_Buffer_GetStart(dbuf)+pos; while (pos>0) { if (*ptr=='+') *ptr=0; else { ptr[1]='\''; GWEN_Buffer_AppendBytes(msgBuf, GWEN_Buffer_GetStart(dbuf), pos+2); GWEN_Buffer_free(dbuf); return 0; } pos--; ptr--; } } GWEN_Buffer_AppendBytes(msgBuf, GWEN_Buffer_GetStart(dbuf), GWEN_Buffer_GetUsedBytes(dbuf)); GWEN_Buffer_free(dbuf); return 0; } /* --------------------------------------------------------------- FUNCTION */ unsigned int AH_Msg_AddNode(AH_MSG *hmsg, GWEN_XMLNODE *node, GWEN_DB_NODE *data) { int rv; GWEN_MSGENGINE *e; unsigned int usedBefore; assert(hmsg); assert(node); assert(data); e=AH_Dialog_GetMsgEngine(hmsg->dialog); assert(e); if (hmsg->firstSegment==0) { /* first node */ hmsg->firstSegment=2; if (hmsg->enableInsert) hmsg->firstSegment++; hmsg->firstSegment+=GWEN_StringList_Count(hmsg->signerIdList); GWEN_MsgEngine_SetIntValue(e, "SegmentNumber", hmsg->firstSegment); hmsg->lastSegment=hmsg->firstSegment-1; } usedBefore=GWEN_Buffer_GetUsedBytes(hmsg->buffer); //rv=GWEN_MsgEngine_CreateMessageFromNode(e, node, hmsg->buffer, data); rv=_createMessageFromNode(e, node, hmsg->buffer, data); #if 0 DBG_ERROR(AQHBCI_LOGDOMAIN, "Buffer:"); GWEN_Buffer_Dump(hmsg->buffer, 2); #endif if (rv) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_Crop(hmsg->buffer, 0, usedBefore); GWEN_Buffer_SetPos(hmsg->buffer, usedBefore); DBG_ERROR(AQHBCI_LOGDOMAIN, "Buffer:"); GWEN_Buffer_Dump(hmsg->buffer, 2); DBG_ERROR(AQHBCI_LOGDOMAIN, "XML:"); GWEN_XMLNode_Dump(node, 2); DBG_ERROR(0, "MsgEngine - mode: %s version:%d", GWEN_MsgEngine_GetMode(e), GWEN_MsgEngine_GetProtocolVersion(e)); return 0; } hmsg->lastSegment=GWEN_MsgEngine_GetIntValue(e, "SegmentNumber", 1)-1; hmsg->nodes++; return hmsg->lastSegment; } /* --------------------------------------------------------------- FUNCTION */ unsigned int AH_Msg_InsertNode(AH_MSG *hmsg, GWEN_XMLNODE *node, GWEN_DB_NODE *data) { int rv; GWEN_MSGENGINE *e; GWEN_BUFFER *tmpbuf; unsigned int pos; assert(hmsg); assert(node); assert(data); if (hmsg->nodes==0) return AH_Msg_AddNode(hmsg, node, data); e=AH_Dialog_GetMsgEngine(hmsg->dialog); assert(e); if (!hmsg->enableInsert) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Inserting a node without enableInsert flag"); return 0; } if (hmsg->firstSegment<(2+GWEN_StringList_Count(hmsg->signerIdList))) { DBG_ERROR(AQHBCI_LOGDOMAIN, "First segment is %d (%d signers), can't insert a new one", hmsg->firstSegment, GWEN_StringList_Count(hmsg->signerIdList)); return 0; } hmsg->firstSegment--; GWEN_MsgEngine_SetIntValue(e, "SegmentNumber", hmsg->firstSegment); tmpbuf=GWEN_Buffer_new(0, 512, 0, 1); rv=GWEN_MsgEngine_CreateMessageFromNode(e, node, tmpbuf, data); GWEN_MsgEngine_SetIntValue(e, "SegmentNumber", hmsg->lastSegment+1); if (rv) { DBG_INFO(AQHBCI_LOGDOMAIN, "here"); GWEN_Buffer_free(tmpbuf); return 0; } pos=GWEN_Buffer_GetPos(hmsg->buffer); GWEN_Buffer_SetPos(hmsg->buffer, 0); GWEN_Buffer_InsertBuffer(hmsg->buffer, tmpbuf); GWEN_Buffer_SetPos(hmsg->buffer, pos+GWEN_Buffer_GetUsedBytes(tmpbuf)); GWEN_Buffer_free(tmpbuf); hmsg->nodes++; return hmsg->firstSegment; } /* --------------------------------------------------------------- FUNCTION */ int AH_Msg_EncodeMsg(AH_MSG *hmsg) { GWEN_MSGENGINE *e; int rv; assert(hmsg); e=AH_Dialog_GetMsgEngine(hmsg->dialog); assert(e); GWEN_MsgEngine_SetProtocolVersion(e, hmsg->hbciVersion); if (hmsg->firstSegment==0) { /* first node */ hmsg->firstSegment=2; hmsg->firstSegment+=GWEN_StringList_Count(hmsg->signerIdList); GWEN_MsgEngine_SetIntValue(e, "SegmentNumber", hmsg->firstSegment); hmsg->lastSegment=hmsg->firstSegment-1; } hmsg->msgNum=AH_Dialog_GetNextMsgNum(hmsg->dialog); GWEN_MsgEngine_SetIntValue(AH_Dialog_GetMsgEngine(hmsg->dialog), "MessageNumber", hmsg->msgNum); GWEN_MsgEngine_SetValue(AH_Dialog_GetMsgEngine(hmsg->dialog), "DialogId", AH_Dialog_GetDialogId(hmsg->dialog)); /* sign message */ DBG_NOTICE(AQHBCI_LOGDOMAIN, "Letting all signers sign"); if (GWEN_StringList_Count(hmsg->signerIdList)) { GWEN_BUFFER *rawBuf; GWEN_STRINGLISTENTRY *se; rawBuf=GWEN_Buffer_dup(hmsg->buffer); se=GWEN_StringList_FirstEntry(hmsg->signerIdList); while (se) { DBG_NOTICE(AQHBCI_LOGDOMAIN, "Letting signer [%s] sign", GWEN_StringListEntry_Data(se)); rv=AH_Msg__Sign(hmsg, rawBuf, GWEN_StringListEntry_Data(se)); if (rv) { GWEN_Buffer_free(rawBuf); DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } se=GWEN_StringListEntry_Next(se); } /* while */ GWEN_Buffer_free(rawBuf); } /* if signing is needed */ else { DBG_NOTICE(AQHBCI_LOGDOMAIN, "No signers"); } DBG_NOTICE(AQHBCI_LOGDOMAIN, "Letting all signers sign: done"); /* log unencrypted message */ AH_Msg_LogMessage(hmsg, hmsg->buffer, 0, 0); /* encrypt message */ if (hmsg->crypterId) { DBG_DEBUG(AQHBCI_LOGDOMAIN, "Encrypting message"); rv=AH_Msg__Encrypt(hmsg); if (rv) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } DBG_DEBUG(AQHBCI_LOGDOMAIN, "Encrypting message: done"); } /* add msg tail */ DBG_DEBUG(AQHBCI_LOGDOMAIN, "Adding message tail"); if (AH_Msg_AddMsgTail(hmsg)) { DBG_INFO(AQHBCI_LOGDOMAIN, "here"); return -1; } DBG_DEBUG(AQHBCI_LOGDOMAIN, "Adding message tail: done"); /* add msg head */ DBG_DEBUG(AQHBCI_LOGDOMAIN, "Adding message head"); if (AH_Msg_AddMsgHead(hmsg)) { DBG_INFO(AQHBCI_LOGDOMAIN, "here"); return -1; } DBG_DEBUG(AQHBCI_LOGDOMAIN, "Adding message head: done"); /* log final message */ AH_Msg_LogMessage(hmsg, hmsg->buffer, 0, 1); DBG_DEBUG(AQHBCI_LOGDOMAIN, "Message finished"); return 0; } /* --------------------------------------------------------------- FUNCTION */ /* return -1 on error (with group "seg/error" set) or -2 if the message is * faulty */ int AH_Msg_ReadSegment(AH_MSG *msg, GWEN_MSGENGINE *e, const char *gtype, GWEN_BUFFER *mbuf, GWEN_DB_NODE *gr, unsigned int flags) { GWEN_XMLNODE *node; unsigned int posBak; const char *p; GWEN_DB_NODE *tmpdb; int segVer; /* find head segment description */ tmpdb=GWEN_DB_Group_new("head"); node=GWEN_MsgEngine_FindGroupByProperty(e, "id", 0, "SegHead"); if (node==0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Segment description not found (internal error)"); GWEN_DB_Group_free(tmpdb); return -2; } /* parse head segment */ posBak=GWEN_Buffer_GetPos(mbuf); if (GWEN_MsgEngine_ParseMessage(e, node, mbuf, tmpdb, flags)) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Error parsing segment head"); GWEN_DB_Group_free(tmpdb); return -2; } GWEN_Buffer_SetPos(mbuf, posBak); /* get segment code */ segVer=GWEN_DB_GetIntValue(tmpdb, "version", 0, 0); p=GWEN_DB_GetCharValue(tmpdb, "code", 0, 0); if (!p) { DBG_ERROR(AQHBCI_LOGDOMAIN, "No segment code for %s ? This seems to be a bad msg...", gtype); DBG_ERROR(AQHBCI_LOGDOMAIN, "Full message (pos=%04x)", posBak); GWEN_Text_DumpString(GWEN_Buffer_GetStart(mbuf), GWEN_Buffer_GetUsedBytes(mbuf), 1); GWEN_DB_Dump(tmpdb, 1); GWEN_DB_Group_free(tmpdb); return -1; } /* try to find corresponding XML node */ node=GWEN_MsgEngine_FindNodeByProperty(e, gtype, "code", segVer, p); if (node==0) { GWEN_DB_NODE *storegrp; unsigned int startPos; GWEN_Buffer_SetPos(mbuf, posBak); startPos=posBak; storegrp=GWEN_DB_GetGroup(gr, GWEN_PATH_FLAGS_CREATE_GROUP, p); assert(storegrp); GWEN_DB_AddGroup(storegrp, GWEN_DB_Group_dup(tmpdb)); /* store the start position of this segment within the DB */ GWEN_DB_SetIntValue(storegrp, GWEN_DB_FLAGS_OVERWRITE_VARS, "segment/pos", startPos); GWEN_DB_SetIntValue(storegrp, GWEN_DB_FLAGS_OVERWRITE_VARS, "segment/error/code", 9130); GWEN_DB_SetCharValue(storegrp, GWEN_DB_FLAGS_OVERWRITE_VARS, "segment/error/text", "Unbekanntes segment (Parser)"); GWEN_DB_SetIntValue(storegrp, GWEN_DB_FLAGS_OVERWRITE_VARS, "segment/error/pos", startPos); /* node not found, skip it */ DBG_WARN(AQHBCI_LOGDOMAIN, "Unknown segment \"%s\" (Segnum=%d, version=%d, ref=%d)", p, GWEN_DB_GetIntValue(tmpdb, "seq", 0, -1), GWEN_DB_GetIntValue(tmpdb, "version", 0, -1), GWEN_DB_GetIntValue(tmpdb, "ref", 0, -1)); if (GWEN_MsgEngine_SkipSegment(e, mbuf, '?', '\'')) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Error skipping segment \"%s\"", p); GWEN_DB_Group_free(tmpdb); return -1; } /* store segment size within DB */ GWEN_DB_SetIntValue(storegrp, GWEN_DB_FLAGS_OVERWRITE_VARS, "segment/length", GWEN_Buffer_GetPos(mbuf)-startPos); /* handle trust info */ if (flags & GWEN_MSGENGINE_READ_FLAGS_TRUSTINFO) { unsigned int usize; usize=GWEN_Buffer_GetPos(mbuf)-(startPos+1)-1; if (GWEN_MsgEngine_AddTrustInfo(e, GWEN_Buffer_GetStart(mbuf)+startPos, usize, p, GWEN_MsgEngineTrustLevelHigh, startPos)) { DBG_INFO(AQHBCI_LOGDOMAIN, "called from here"); GWEN_DB_Group_free(tmpdb); return -1; } } /* if trustInfo handling wanted */ } else { /* ok, node available, get the corresponding description and parse * the segment */ const char *id; GWEN_DB_NODE *storegrp; unsigned int startPos; /* restore start position, since the segment head is part of a full * description, so we need to restart reading from the very begin */ GWEN_Buffer_SetPos(mbuf, posBak); /* create group in DB for this segment */ id=GWEN_XMLNode_GetProperty(node, "id", p); storegrp=GWEN_DB_GetGroup(gr, GWEN_PATH_FLAGS_CREATE_GROUP, id); assert(storegrp); /* store the start position of this segment within the DB */ startPos=GWEN_Buffer_GetPos(mbuf); GWEN_DB_SetIntValue(storegrp, GWEN_DB_FLAGS_OVERWRITE_VARS, "segment/pos", startPos); /* parse the segment */ if (GWEN_MsgEngine_ParseMessage(e, node, mbuf, storegrp, flags)) { GWEN_DB_SetIntValue(storegrp, GWEN_DB_FLAGS_OVERWRITE_VARS, "segment/error/code", 9130); GWEN_DB_SetCharValue(storegrp, GWEN_DB_FLAGS_OVERWRITE_VARS, "segment/error/text", "Syntaxfehler"); GWEN_DB_SetIntValue(storegrp, GWEN_DB_FLAGS_OVERWRITE_VARS, "segment/error/pos", GWEN_Buffer_GetPos(mbuf)-startPos); DBG_ERROR(AQHBCI_LOGDOMAIN, "Error parsing segment \"%s\"", p); GWEN_Text_DumpString(GWEN_Buffer_GetStart(mbuf)+startPos, GWEN_Buffer_GetUsedBytes(mbuf)-startPos, 1); GWEN_DB_Group_free(tmpdb); return -1; } /* store segment size within DB */ GWEN_DB_SetIntValue(storegrp, GWEN_DB_FLAGS_OVERWRITE_VARS, "segment/length", GWEN_Buffer_GetPos(mbuf)-startPos); if (strcasecmp(id, "MsgHead")==0) { int protocolVersion; protocolVersion=GWEN_DB_GetIntValue(storegrp, "hversion", 0, 0); if (!protocolVersion) { DBG_WARN(AQHBCI_LOGDOMAIN, "Unknown protocol version, using default of 210"); protocolVersion=210; } /* set HBCI protocol version to be used (taken from MsgHead) */ DBG_DEBUG(AQHBCI_LOGDOMAIN, "Setting protocol version to %d", protocolVersion); GWEN_MsgEngine_SetProtocolVersion(e, protocolVersion); msg->hbciVersion=protocolVersion; } } /* if node found */ GWEN_DB_Group_free(tmpdb); return 0; } /* --------------------------------------------------------------- FUNCTION */ int AH_Msg_ReadMessage(AH_MSG *msg, GWEN_MSGENGINE *e, const char *gtype, GWEN_BUFFER *mbuf, GWEN_DB_NODE *gr, unsigned int flags) { unsigned int segments; unsigned int errors; int rv; segments=0; errors=0; while (GWEN_Buffer_GetBytesLeft(mbuf)) { rv=AH_Msg_ReadSegment(msg, e, gtype, mbuf, gr, flags); if (rv==-2) { DBG_INFO(AQHBCI_LOGDOMAIN, "here"); return -1; } else if (rv==-1) { DBG_INFO(AQHBCI_LOGDOMAIN, "here"); DBG_ERROR(AQHBCI_LOGDOMAIN, "Error here:"); GWEN_Buffer_Dump(mbuf, 2); #ifdef AH_MSG_HEAVY_DEBUG return -1; #endif if (GWEN_MsgEngine_SkipSegment(e, mbuf, '?', '\'')) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Error skipping segment"); return -1; } errors++; } segments++; } /* while */ DBG_DEBUG(AQHBCI_LOGDOMAIN, "Parsed %d segments (%d had errors)", segments, errors); return 0; } /* --------------------------------------------------------------- FUNCTION */ int AH_Msg_SequenceCheck(GWEN_DB_NODE *gr) { GWEN_DB_NODE *n; unsigned int expectedSequenceNum; unsigned int errors; DBG_DEBUG(AQHBCI_LOGDOMAIN, "Sequence check"); expectedSequenceNum=1; errors=0; n=GWEN_DB_GetFirstGroup(gr); while (n) { unsigned int receivedSequenceNum; receivedSequenceNum=GWEN_DB_GetIntValue(n, "head/seq", 0, 0); if (receivedSequenceNum<900) { if (receivedSequenceNum!=expectedSequenceNum) { if (receivedSequenceNumdialog); e=AH_Dialog_GetMsgEngine(hmsg->dialog); assert(e); /* set mode */ u=AH_Dialog_GetDialogOwner(hmsg->dialog); assert(u); guiid=0; mode=AH_CryptMode_toString(AH_User_GetCryptMode(u)); DBG_NOTICE(AQHBCI_LOGDOMAIN, "Mode is: %s", mode); GWEN_MsgEngine_SetMode(e, mode); DBG_NOTICE(AQHBCI_LOGDOMAIN, "Decoding message:"); /* log encrypted message */ AH_Msg_LogMessage(hmsg, hmsg->buffer, 1, 1); GWEN_Buffer_Rewind(hmsg->buffer); rv=AH_Msg_ReadMessage(hmsg, e, "SEG", hmsg->buffer, gr, flags); if (rv) { DBG_INFO(AQHBCI_LOGDOMAIN, "here"); return GWEN_ERROR_BAD_DATA; } /* take some values out of the message head (with checks) */ n=GWEN_DB_GetGroup(gr, GWEN_DB_FLAGS_DEFAULT | GWEN_PATH_FLAGS_NAMEMUSTEXIST, "MsgHead"); if (!n) { DBG_ERROR(AQHBCI_LOGDOMAIN, "No message head segment"); return GWEN_ERROR_BAD_DATA; } /* sample message number */ expMsgNum=AH_Dialog_GetLastMsgNum(hmsg->dialog); hmsg->msgNum=GWEN_DB_GetIntValue(n, "msgnum", 0, 0); if (AH_Dialog_CheckReceivedMsgNum(hmsg->dialog, hmsg->msgNum)) { DBG_WARN(AQHBCI_LOGDOMAIN, "Bad message number, ignoring"); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Warning, I18N("Bad message number, ignoring")); /* FIXME: this is sometimes returned by the Sparkasse server, when * the server is currently out of service * We will for now ignore this, since this message still returns an * error code and text which might be of interest to the user. */ /* return -1; */ hmsg->msgNum=expMsgNum; } /* sample dialog id if necessary */ if (strcasecmp(AH_Dialog_GetDialogId(hmsg->dialog), "0")==0) { /* dialog id not yet known, copy it */ const char *p; p=GWEN_DB_GetCharValue(n, "dialogid", 0, 0); if (!p) { DBG_ERROR(AQHBCI_LOGDOMAIN, "No dialog id in message"); return GWEN_ERROR_BAD_DATA; } if (AH_Dialog_GetFlags(hmsg->dialog) & AH_DIALOG_FLAGS_INITIATOR) { DBG_DEBUG(AQHBCI_LOGDOMAIN, "Setting new dialog id (%s)", p); AH_Dialog_SetDialogId(hmsg->dialog, p); GWEN_MsgEngine_SetValue(e, "dialogid", p); } else { const char *myDlgId; myDlgId=AH_Dialog_GetDialogId(hmsg->dialog); assert(myDlgId); if (strcasecmp(myDlgId, p)!=0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Bad dialog id received from peer"); GWEN_DB_SetIntValue(n, GWEN_DB_FLAGS_OVERWRITE_VARS, "segment/error/code", 9210); GWEN_DB_SetCharValue(n, GWEN_DB_FLAGS_OVERWRITE_VARS, "segment/error/text", "Ungueltige Dialog Kennung"); return GWEN_ERROR_BAD_DATA; } /* if bad dialog id */ } /* if !initialtor */ } n2=GWEN_DB_GetGroup(n, GWEN_DB_FLAGS_DEFAULT | GWEN_PATH_FLAGS_NAMEMUSTEXIST, "msgref"); if (n2) { /* we have a message reference, get it */ const char *p; DBG_DEBUG(AQHBCI_LOGDOMAIN, "Found a message reference"); p=GWEN_DB_GetCharValue(n2, "dialogid", 0, 0); if (!p) { DBG_WARN(AQHBCI_LOGDOMAIN, "No reference dialog id in message, ignoring"); /*return GWEN_ERROR_BAD_DATA;*/ } else { if (strcasecmp(AH_Dialog_GetDialogId(hmsg->dialog), p)!=0) { /* some servers send error responses with invalid dialog id and * message number 9999; we don't rely on the correct id anyway, so * we might as well ignore that error here */ DBG_WARN(AQHBCI_LOGDOMAIN, "Dialog id does not match current dialog id, ignoring"); GWEN_Gui_ProgressLog(guiid, GWEN_LoggerLevel_Warning, I18N("Dialog id does not match, ignoring")); /*return GWEN_ERROR_BAD_DATA;*/ } hmsg->refMsgNum=GWEN_DB_GetIntValue(n2, "msgnum", 0, 0); if (hmsg->refMsgNum!=expMsgNum) { DBG_WARN(AQHBCI_LOGDOMAIN, "Bad message reference number, ignoring"); GWEN_Gui_ProgressLog(guiid, GWEN_LoggerLevel_Warning, I18N("Bad message reference number, ignoring")); hmsg->refMsgNum=expMsgNum; } } } else { DBG_DEBUG(AQHBCI_LOGDOMAIN, "No message reference found"); GWEN_Gui_ProgressLog(guiid, GWEN_LoggerLevel_Warning, I18N("No message reference found, ignoring")); } /* find Crypt head */ n=GWEN_DB_GetGroup(gr, GWEN_DB_FLAGS_DEFAULT | GWEN_PATH_FLAGS_NAMEMUSTEXIST, "CryptHead"); if (n) { if (GWEN_DB_GetIntValue(n, "segment/error/code", 0, 0)>=9000) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Encryption error"); return GWEN_ERROR_GENERIC; } rv=AH_Msg__Decrypt(hmsg, gr); if (rv) { DBG_INFO(AQHBCI_LOGDOMAIN, "here"); return AB_ERROR_SECURITY; } /* unlink and delete crypthead */ GWEN_DB_UnlinkGroup(n); GWEN_DB_Group_free(n); /* unlink and delete cryptdata */ n=GWEN_DB_GetGroup(gr, GWEN_DB_FLAGS_DEFAULT | GWEN_PATH_FLAGS_NAMEMUSTEXIST, "CryptData"); if (n) { GWEN_DB_UnlinkGroup(n); GWEN_DB_Group_free(n); } /* parse decrypted message part */ n=GWEN_DB_GetGroup(gr, GWEN_DB_FLAGS_DEFAULT | GWEN_PATH_FLAGS_NAMEMUSTEXIST, "MsgTail"); if (n) { /* temporarily unlink MsgTail, it will be appended after decoding * the crypted part, to keep the segment sequence correct */ GWEN_DB_UnlinkGroup(n); } rv=AH_Msg_ReadMessage(hmsg, e, "SEG", hmsg->buffer, gr, flags); if (n) GWEN_DB_AddGroup(gr, n); if (rv) { DBG_INFO(AQHBCI_LOGDOMAIN, "here"); return GWEN_ERROR_BAD_DATA; } } /* if crypthead */ /* log decrypted message */ AH_Msg_LogMessage(hmsg, hmsg->buffer, 1, 0); /* check segment sequence numbers */ rv=AH_Msg_SequenceCheck(gr); if (rv) { DBG_INFO(AQHBCI_LOGDOMAIN, "here"); return AB_ERROR_SECURITY; } /* verify signatures */ rv=AH_Msg__Verify(hmsg, gr); if (rv) { DBG_INFO(AQHBCI_LOGDOMAIN, "here"); return rv; } return 0; } /* --------------------------------------------------------------- FUNCTION */ void AH_Msg__Dump(const AH_MSG *hmsg, unsigned int indent) { unsigned int i; GWEN_STRINGLISTENTRY *se; for (i=0; iorigbuffer) { for (i=0; iorigbuffer, indent+2); } else { for (i=0; ibuffer) { for (i=0; ibuffer, indent+2); } else { for (i=0; icrypterId) { fprintf(stderr, "Crypter: %s\n", hmsg->crypterId); } else { fprintf(stderr, "Crypter: none\n"); } for (i=0; isignerIdList)); se=GWEN_StringList_FirstEntry(AH_Msg_GetSignerIdList(hmsg)); while (se) { for (i=0; inodes); for (i=0; imsgNum); for (i=0; irefMsgNum); for (i=0; ifirstSegment); for (i=0; ilastSegment); for (i=0; idialog; } /* --------------------------------------------------------------- FUNCTION */ int AH_Msg_IsSignedBy(const AH_MSG *hmsg, const char *s) { GWEN_STRINGLISTENTRY *se; se=GWEN_StringList_FirstEntry(hmsg->signerIdList); while (se) { if (strcasecmp(GWEN_StringListEntry_Data(se), s)==0) break; se=GWEN_StringListEntry_Next(se); } if (se) { DBG_DEBUG(AQHBCI_LOGDOMAIN, "Message signed by \"%s\"", s); return 1; } else { DBG_DEBUG(AQHBCI_LOGDOMAIN, "Customer \"%s\" did not sign the message", s); return 0; } } /* --------------------------------------------------------------- FUNCTION */ int AH_Msg_EnableInsert(AH_MSG *hmsg) { assert(hmsg); if (hmsg->nodes && !hmsg->enableInsert) { DBG_INFO(AQHBCI_LOGDOMAIN, "There already are nodes in the buffer, " "cannot insert"); return GWEN_ERROR_INVALID; } hmsg->enableInsert=1; return 0; } /* --------------------------------------------------------------- FUNCTION */ int AH_Msg_HasWarnings(const AH_MSG *hmsg) { assert(hmsg); return hmsg->hasWarnings; } /* --------------------------------------------------------------- FUNCTION */ void AH_Msg_SetHasWarnings(AH_MSG *hmsg, int i) { assert(hmsg); hmsg->hasWarnings=i; } /* --------------------------------------------------------------- FUNCTION */ int AH_Msg_HasErrors(const AH_MSG *hmsg) { assert(hmsg); return hmsg->hasErrors; } /* --------------------------------------------------------------- FUNCTION */ void AH_Msg_SetHasErrors(AH_MSG *hmsg, int i) { assert(hmsg); hmsg->hasErrors=i; } /* --------------------------------------------------------------- FUNCTION */ int AH_Msg_GetResultCode(const AH_MSG *hmsg) { assert(hmsg); return hmsg->resultCode; } /* --------------------------------------------------------------- FUNCTION */ void AH_Msg_SetResultCode(AH_MSG *hmsg, int i) { assert(hmsg); hmsg->resultCode=i; } /* --------------------------------------------------------------- FUNCTION */ const char *AH_Msg_GetResultText(const AH_MSG *hmsg) { assert(hmsg); return hmsg->resultText; } /* --------------------------------------------------------------- FUNCTION */ void AH_Msg_SetResultText(AH_MSG *hmsg, const char *s) { assert(hmsg); free(hmsg->resultText); if (s) hmsg->resultText=strdup(s); else hmsg->resultText=0; } /* --------------------------------------------------------------- FUNCTION */ const char *AH_Msg_GetResultParam(const AH_MSG *hmsg) { assert(hmsg); return hmsg->resultParam; } /* --------------------------------------------------------------- FUNCTION */ void AH_Msg_SetResultParam(AH_MSG *hmsg, const char *s) { assert(hmsg); free(hmsg->resultParam); if (s) hmsg->resultParam=strdup(s); else hmsg->resultParam=0; } /* --------------------------------------------------------------- FUNCTION */ unsigned int AH_Msg_GetHbciVersion(const AH_MSG *hmsg) { assert(hmsg); return hmsg->hbciVersion; } /* --------------------------------------------------------------- FUNCTION */ void AH_Msg_SetHbciVersion(AH_MSG *hmsg, unsigned int i) { assert(hmsg); hmsg->hbciVersion=i; } /* --------------------------------------------------------------- FUNCTION */ void AH_Msg_SetTan(AH_MSG *hmsg, const char *s) { assert(hmsg); free(hmsg->usedTan); if (s) hmsg->usedTan=strdup(s); else hmsg->usedTan=0; } /* --------------------------------------------------------------- FUNCTION */ const char *AH_Msg_GetTan(const AH_MSG *hmsg) { assert(hmsg); return hmsg->usedTan; } /* --------------------------------------------------------------- FUNCTION */ int AH_Msg_GetNeedTan(const AH_MSG *hmsg) { assert(hmsg); return hmsg->needTan; } /* --------------------------------------------------------------- FUNCTION */ void AH_Msg_SetNeedTan(AH_MSG *hmsg, int i) { assert(hmsg); if (hmsg->needTan!=i) { DBG_INFO(AQHBCI_LOGDOMAIN, "Changing needTan to %d (was %d)", i, hmsg->needTan); } hmsg->needTan=i; } /* --------------------------------------------------------------- FUNCTION */ int AH_Msg_NoSysId(const AH_MSG *hmsg) { assert(hmsg); return hmsg->noSysId; } /* --------------------------------------------------------------- FUNCTION */ void AH_Msg_SetNoSysId(AH_MSG *hmsg, int i) { assert(hmsg); hmsg->noSysId=i; } /* --------------------------------------------------------------- FUNCTION */ void AH_Msg_SetSignSeqOne(AH_MSG *hmsg, int i) { assert(hmsg); hmsg->signSeqOne=i; } /* --------------------------------------------------------------- FUNCTION */ int AH_Msg_SignSeqOne(const AH_MSG *hmsg) { assert(hmsg); return hmsg->signSeqOne; } /* --------------------------------------------------------------- FUNCTION */ int AH_Msg__AnonHnsha(const char *psegment, unsigned int slen, GWEN_SYNCIO *sio) { int plusCount=0; int lastWasEscape=0; int segDone=0; const char *p; unsigned int count; p=psegment; count=slen; while (*p && !segDone && count--) { int normalChar=1; int err; err=0; if (lastWasEscape) { lastWasEscape=0; normalChar=0; } else { if (*p=='?') { lastWasEscape=1; } else { if (*p=='\'') segDone=1; else if (*p=='+') plusCount++; lastWasEscape=0; } } if (plusCount>=3 && normalChar && *p!='+' && *p!='\'' && *p!=':') err=GWEN_SyncIo_WriteForced(sio, (const uint8_t *) "*", 1); else err=GWEN_SyncIo_WriteForced(sio, (const uint8_t *) p, 1); if (err<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", err); return err; } p++; } /* while */ return 0; } /* --------------------------------------------------------------- FUNCTION */ int AH_Msg__AnonHkpae(const char *psegment, unsigned int slen, GWEN_SYNCIO *sio) { int plusCount=0; int lastWasEscape=0; int segDone=0; const char *p; unsigned int count; p=psegment; count=slen; while (*p && !segDone && count--) { int normalChar=1; int err; err=0; if (lastWasEscape) { lastWasEscape=0; normalChar=0; } else { if (*p=='?') { lastWasEscape=1; } else { if (*p=='\'') segDone=1; else if (*p=='+') plusCount++; lastWasEscape=0; } } if (plusCount>=1 && normalChar && *p!='+' && *p!='\'' && *p!=':') err=GWEN_SyncIo_WriteForced(sio, (const uint8_t *) "*", 1); else err=GWEN_SyncIo_WriteForced(sio, (const uint8_t *) p, 1); if (err<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", err); return err; } p++; } /* while */ return 0; } /* --------------------------------------------------------------- FUNCTION */ void AH_Msg_LogMessage(AH_MSG *msg, GWEN_BUFFER *buf, int rec, int crypt) { GWEN_DB_NODE *db; AB_USER *u; AH_HBCI *h; GWEN_SYNCIO *sio; unsigned int bsize; const char *logFile; int vmajor, vminor, vpatchlevel, vbuild; char vbuf[32]; int rv; assert(msg); assert(buf); logFile=AH_Dialog_GetLogFile(msg->dialog); if (!logFile) { DBG_ERROR(AQHBCI_LOGDOMAIN, "No log file, logging disabled for this dialog"); return; } DBG_INFO(AQHBCI_LOGDOMAIN, "Logging to file [%s]", logFile); db=GWEN_DB_Group_new("header"); u=AH_Dialog_GetDialogOwner(msg->dialog); h=AH_Dialog_GetHbci(msg->dialog); assert(h); GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "mode", AH_CryptMode_toString(AH_User_GetCryptMode(u))); GWEN_DB_SetIntValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "rdhtype", AH_User_GetRdhType(u)); GWEN_DB_SetIntValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "hbciVersion", AH_User_GetHbciVersion(u)); GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "tokenType", AH_User_GetTokenType(u)); GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "crypt", crypt?"yes":"no"); GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "sender", rec?"bank":"user"); GWEN_Version(&vmajor, &vminor, &vpatchlevel, &vbuild); snprintf(vbuf, sizeof(vbuf)-1, "%d.%d.%d.%d", vmajor, vminor, vpatchlevel, vbuild); vbuf[sizeof(vbuf)-1]=0; GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "gwenhywfar", vbuf); GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "aqhbci", AQBANKING_VERSION_FULL_STRING); GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "appname", AH_HBCI_GetProductName(h)); GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "appversion", AH_HBCI_GetProductVersion(h)); GWEN_DB_SetIntValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "size", GWEN_Buffer_GetUsedBytes(buf)); if (GWEN_Directory_GetPath(logFile, GWEN_PATH_FLAGS_VARIABLE)) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Path \"%s\" is not available, cannot log", logFile); GWEN_DB_Group_free(db); return; } sio=GWEN_SyncIo_File_new(logFile, GWEN_SyncIo_File_CreationMode_OpenAlways); GWEN_SyncIo_AddFlags(sio, GWEN_SYNCIO_FILE_FLAGS_READ | GWEN_SYNCIO_FILE_FLAGS_WRITE | GWEN_SYNCIO_FILE_FLAGS_UREAD | GWEN_SYNCIO_FILE_FLAGS_UWRITE | GWEN_SYNCIO_FILE_FLAGS_APPEND); rv=GWEN_SyncIo_Connect(sio); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_SyncIo_free(sio); GWEN_DB_Group_free(db); return; } /* write header */ rv=GWEN_DB_WriteToIo(db, sio, GWEN_DB_FLAGS_WRITE_SUBGROUPS | GWEN_DB_FLAGS_DETAILED_GROUPS | GWEN_DB_FLAGS_USE_COLON| GWEN_DB_FLAGS_OMIT_TYPES); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); GWEN_DB_Group_free(db); return; } /* append empty line to separate header from data */ rv=GWEN_SyncIo_WriteForced(sio, (const uint8_t *) "\n", 1); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); GWEN_DB_Group_free(db); return; } /* write data */ bsize=GWEN_Buffer_GetUsedBytes(buf); if (bsize && msg->usedPin) { char *p; unsigned int bleft; bleft=bsize; p=GWEN_Buffer_GetStart(buf); while (bleft) { char *segEnd; unsigned int slen; if (*p=='\'') { rv=GWEN_SyncIo_WriteForced(sio, (const uint8_t *) p, 1); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); GWEN_DB_Group_free(db); return; } p++; bleft--; } else { segEnd=strchr(p, '\''); if (segEnd==NULL) { /* no segment end found, write rest of the buffer */ rv=GWEN_SyncIo_WriteForced(sio, (const uint8_t *)p, bleft); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); GWEN_DB_Group_free(db); return; } break; } assert(segEnd); slen=segEnd-p+1; assert(slen); if (strncasecmp(p, "HNSHA:", 6)==0) rv=AH_Msg__AnonHnsha(p, slen, sio); else if (strncasecmp(p, "HKPAE:", 6)==0 || strncasecmp(p, "DKPAE:", 6)==0) rv=AH_Msg__AnonHkpae(p, slen, sio); /* add more segments with confidential data here */ else { unsigned int l; l=slen; rv=GWEN_SyncIo_WriteForced(sio, (const uint8_t *)p, l); } if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); GWEN_DB_Group_free(db); return; } bleft-=slen; p=segEnd+1; } } /* while bleft */ } else { rv=GWEN_SyncIo_WriteForced(sio, (const uint8_t *)GWEN_Buffer_GetStart(buf), bsize); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); GWEN_DB_Group_free(db); return; } } /* add LF for better readability */ rv=GWEN_SyncIo_WriteForced(sio, (const uint8_t *) "\n", 1); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); GWEN_DB_Group_free(db); return; } /* close layer */ rv=GWEN_SyncIo_Disconnect(sio); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_SyncIo_free(sio); return; } GWEN_SyncIo_free(sio); GWEN_DB_Group_free(db); DBG_DEBUG(AQHBCI_LOGDOMAIN, "Message logged"); } const char *AH_Msg_GetExpectedSigner(const AH_MSG *msg) { assert(msg); return msg->expectedSigner; } void AH_Msg_SetExpectedSigner(AH_MSG *msg, const char *s) { assert(msg); free(msg->expectedSigner); if (s) msg->expectedSigner=strdup(s); else msg->expectedSigner=0; } const char *AH_Msg_GetExpectedCrypter(const AH_MSG *msg) { assert(msg); return msg->expectedCrypter; } void AH_Msg_SetExpectedCrypter(AH_MSG *msg, const char *s) { assert(msg); free(msg->expectedCrypter); if (s) msg->expectedCrypter=strdup(s); else msg->expectedCrypter=0; } void AH_Msg_SetPin(AH_MSG *msg, const char *s) { assert(msg); if (msg->usedPin) { memset(msg->usedPin, 0, strlen(msg->usedPin)); free(msg->usedPin); } if (s) msg->usedPin=strdup(s); else msg->usedPin=0; } const char *AH_Msg_GetPin(const AH_MSG *msg) { assert(msg); return msg->usedPin; } void AH_Msg_SetItanHashMode(AH_MSG *hmsg, int i) { assert(hmsg); hmsg->itanHashMode=i; } int AH_Msg_GetItanHashMode(const AH_MSG *hmsg) { assert(hmsg); return hmsg->itanHashMode; } void AH_Msg_SetItanHashBuffer(AH_MSG *hmsg, GWEN_BUFFER *hbuf) { assert(hmsg); if (hmsg->itanHashBuffer!=hbuf) { GWEN_Buffer_free(hmsg->itanHashBuffer); hmsg->itanHashBuffer=hbuf; } } GWEN_BUFFER *AH_Msg_GetItanHashBuffer(const AH_MSG *hmsg) { assert(hmsg); return hmsg->itanHashBuffer; } void AH_Msg_SetItanMethod(AH_MSG *hmsg, uint32_t i) { assert(hmsg); hmsg->itanMethod=i; } uint32_t AH_Msg_GetItanMethod(const AH_MSG *hmsg) { assert(hmsg); return hmsg->itanMethod; } const GWEN_STRINGLIST *AH_Msg_GetSignerIdList(const AH_MSG *hmsg) { assert(hmsg); return hmsg->signerIdList; } void AH_Msg_SetCrypterId(AH_MSG *hmsg, const char *s) { assert(hmsg); free(hmsg->crypterId); if (s) hmsg->crypterId=strdup(s); else hmsg->crypterId=NULL; } const char *AH_Msg_GetCrypterId(const AH_MSG *hmsg) { assert(hmsg); return hmsg->crypterId; } int AH_Msg_GenerateAndAddSegment(GWEN_MSGENGINE *e, const char *segName, GWEN_DB_NODE *cfg, GWEN_BUFFER *hbuf) { GWEN_XMLNODE *node; int rv; node=GWEN_MsgEngine_FindNodeByPropertyStrictProto(e, "SEG", "id", 0, segName); if (!node) { DBG_INFO(AQHBCI_LOGDOMAIN, "Segment \"%s\" not found", segName); return GWEN_ERROR_NOT_FOUND; } rv=GWEN_MsgEngine_CreateMessageFromNode(e, node, hbuf, cfg); if (rv) { DBG_INFO(AQHBCI_LOGDOMAIN, "Could not create CryptHead (%d)", rv); return rv; } return 0; } #include "msgcrypt_ddv.c" #include "msgcrypt.c" aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/msglayer/dialog_https.c0000664000175000017500000002204414043610745023262 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ /* this file is included from dialog.c" */ int AH_Dialog_CreateIoLayer_Https(AH_DIALOG *dlg) { const GWEN_URL *url; int rv; GWEN_HTTP_SESSION *sess; GWEN_BUFFER *tbuf; const char *s; assert(dlg); /* take bank addr from user */ url=AH_User_GetServerUrl(dlg->dialogOwner); if (!url) { DBG_ERROR(AQHBCI_LOGDOMAIN, "User has no valid address settings"); return GWEN_ERROR_INVALID; } tbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Url_toString(url, tbuf); sess=AB_HttpSession_new(dlg->provider, dlg->dialogOwner, GWEN_Buffer_GetStart(tbuf), "https", 443); GWEN_Buffer_free(tbuf); /* setup session */ GWEN_HttpSession_AddFlags(sess, GWEN_HTTP_SESSION_FLAGS_TLS_IGN_PREMATURE_CLOSE); GWEN_HttpSession_AddFlags(sess, GWEN_HTTP_SESSION_FLAGS_NO_CACHE); s=AH_User_GetHttpContentType(dlg->dialogOwner); if (s && *s) GWEN_HttpSession_SetHttpContentType(sess, s); else GWEN_HttpSession_SetHttpContentType(sess, "application/octet-stream"); s=AH_User_GetHttpUserAgent(dlg->dialogOwner); if (s && *s) GWEN_HttpSession_SetHttpUserAgent(sess, s); GWEN_HttpSession_SetHttpVMajor(sess, AH_User_GetHttpVMajor(dlg->dialogOwner)); GWEN_HttpSession_SetHttpVMinor(sess, AH_User_GetHttpVMinor(dlg->dialogOwner)); /* init session */ rv=GWEN_HttpSession_Init(sess); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); GWEN_HttpSession_free(sess); return rv; } dlg->httpSession=sess; return 0; } int AH_Dialog_Connect_Https(AH_DIALOG *dlg) { if (dlg->httpSession==NULL) { int rv; rv=AH_Dialog_CreateIoLayer_Https(dlg); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } } return 0; } int AH_Dialog_Disconnect_Https(AH_DIALOG *dlg) { if (dlg->httpSession) { GWEN_HttpSession_Fini(dlg->httpSession); GWEN_HttpSession_free(dlg->httpSession); dlg->httpSession=NULL; } return 0; } int AH_Dialog_SendPacket_Https(AH_DIALOG *dlg, const char *buf, int blen) { int rv; GWEN_BUFFER *tbuf; uint32_t fl; fl=AH_User_GetFlags(dlg->dialogOwner); /* possibly base64 encode message */ tbuf=GWEN_Buffer_new(0, blen, 0, 1); if (fl & AH_USER_FLAGS_NO_BASE64) { DBG_INFO(AQHBCI_LOGDOMAIN, "Not encoding message using BASE64"); GWEN_Buffer_AppendBytes(tbuf, buf, blen); } else { rv=GWEN_Base64_Encode((const unsigned char *)buf, blen, tbuf, 0); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "Could not BASE64 encode data (%d)", rv); GWEN_Buffer_free(tbuf); GWEN_HttpSession_Fini(dlg->httpSession); GWEN_HttpSession_free(dlg->httpSession); dlg->httpSession=NULL; return rv; } GWEN_Buffer_AppendString(tbuf, "\r\n"); } rv=GWEN_HttpSession_SendPacket(dlg->httpSession, "POST", (const uint8_t *) GWEN_Buffer_GetStart(tbuf), GWEN_Buffer_GetUsedBytes(tbuf)); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); GWEN_HttpSession_Fini(dlg->httpSession); GWEN_HttpSession_free(dlg->httpSession); dlg->httpSession=NULL; return rv; } GWEN_Buffer_free(tbuf); DBG_INFO(AQHBCI_LOGDOMAIN, "Message sent."); return 0; } int AH_Dialog_RecvMessage_Https(AH_DIALOG *dlg, AH_MSG **pMsg) { GWEN_BUFFER *tbuf; AH_MSG *msg; int rv; const char *p; unsigned int i; char c; char *p1; char *p2; int msgSize; tbuf=GWEN_Buffer_new(0, 1024, 0, 1); /* read HBCI message */ rv=GWEN_HttpSession_RecvPacket(dlg->httpSession, tbuf); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); GWEN_HttpSession_Fini(dlg->httpSession); GWEN_HttpSession_free(dlg->httpSession); dlg->httpSession=NULL; return rv; } else if (rv==0) { /* not a HTTP code */ DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); GWEN_HttpSession_Fini(dlg->httpSession); GWEN_HttpSession_free(dlg->httpSession); dlg->httpSession=NULL; return GWEN_ERROR_INTERNAL; } else if (!(rv>=200 && rv<=299)) { /* not a HTTP: ok code */ DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); GWEN_HttpSession_Fini(dlg->httpSession); GWEN_HttpSession_free(dlg->httpSession); dlg->httpSession=NULL; return rv; } /* optionally decode BASE64 encoded message */ if (strstr(GWEN_Buffer_GetStart(tbuf), "HNHBK:")==NULL) { GWEN_BUFFER *bbuf; bbuf=GWEN_Buffer_new(0, GWEN_Buffer_GetUsedBytes(tbuf), 0, 1); rv=GWEN_Base64_Decode((const unsigned char *) GWEN_Buffer_GetStart(tbuf), GWEN_Buffer_GetUsedBytes(tbuf), bbuf); if (rv) { DBG_INFO(AQHBCI_LOGDOMAIN, "Could not decode BASE64 message (%d)", rv); /* for debugging purposes */ GWEN_Buffer_Dump(tbuf, 2); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("Could not BASE64-decode the message")); GWEN_Buffer_free(bbuf); GWEN_Buffer_free(tbuf); GWEN_HttpSession_Fini(dlg->httpSession); GWEN_HttpSession_free(dlg->httpSession); dlg->httpSession=NULL; return rv; } GWEN_Buffer_free(tbuf); tbuf=bbuf; if (strstr(GWEN_Buffer_GetStart(tbuf), "HNHBK:")==NULL) { DBG_INFO(AQHBCI_LOGDOMAIN, "Received message is not HBCI"); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("Received message is not HBCI")); /* for debugging purposes */ GWEN_Buffer_Dump(tbuf, 2); GWEN_Buffer_free(tbuf); GWEN_HttpSession_Fini(dlg->httpSession); GWEN_HttpSession_free(dlg->httpSession); dlg->httpSession=NULL; return rv; } } /* trim response */ i=GWEN_Buffer_GetUsedBytes(tbuf); p=GWEN_Buffer_GetStart(tbuf); while (i>0) { if (p[i-1]!=0) break; i--; } GWEN_Buffer_Crop(tbuf, 0, i); /* seek to begin of size */ p1=strchr(GWEN_Buffer_GetStart(tbuf), '+'); if (p1==NULL) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Bad data (missing '+')"); /* for debugging purposes */ GWEN_Buffer_Dump(tbuf, 2); GWEN_Buffer_free(tbuf); GWEN_HttpSession_Fini(dlg->httpSession); GWEN_HttpSession_free(dlg->httpSession); dlg->httpSession=NULL; return GWEN_ERROR_BAD_DATA; } p1++; /* seek to end of size */ p2=strchr(p1, '+'); if (p2==NULL) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Bad data (missing '+')"); /* for debugging purposes */ GWEN_Buffer_Dump(tbuf, 2); GWEN_Buffer_free(tbuf); GWEN_HttpSession_Fini(dlg->httpSession); GWEN_HttpSession_free(dlg->httpSession); dlg->httpSession=NULL; return GWEN_ERROR_BAD_DATA; } /* read message size */ c=*p2; *p2=0; if (1!=sscanf(p1, "%d", &msgSize)) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Bad size field [%s]", p1); /* for debugging purposes */ GWEN_Buffer_Dump(tbuf, 2); GWEN_Buffer_free(tbuf); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("Unparsable message received")); GWEN_HttpSession_Fini(dlg->httpSession); GWEN_HttpSession_free(dlg->httpSession); dlg->httpSession=NULL; return GWEN_ERROR_BAD_DATA; } *p2=c; /* check message size */ if (GWEN_Buffer_GetUsedBytes(tbuf)httpSession); GWEN_HttpSession_free(dlg->httpSession); dlg->httpSession=NULL; return GWEN_ERROR_BAD_DATA; } msg=AH_Msg_new(dlg); AH_Msg_SetBuffer(msg, tbuf); *pMsg=msg; return 0; } int AH_Dialog_TestServer_Https(AH_DIALOG *dlg) { int rv; GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Notice, I18N("Preparing connection")); rv=AH_Dialog_CreateIoLayer_Https(dlg); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "Could not create io layer (%d)", rv); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("Error preparing connection")); return rv; } rv=GWEN_HttpSession_ConnectionTest(dlg->httpSession); GWEN_HttpSession_Fini(dlg->httpSession); GWEN_HttpSession_free(dlg->httpSession); dlg->httpSession=NULL; if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/README0000664000175000017500000000546414044534775017512 00000000000000 This folder contains all sub-libraries. - remove flag "AH_BANK_FLAGS_KTV2" This was needed with old HBCI versions and should no longer be needed. SendCommands: - SortProviderQueuesIntoUserQueues - AddCommandsToOutbox - OutBox_Execute - OutBox_StartSending - OutBox_Prepare - for ever CBox: - CBox_Prepare - for every ToDoJob: - Job_Prepare - sort jobs into jobQueues - OutBox_SendAndReceive - for every CBox: - CBox_SendAndReceive - CBox_SendAndRecvDialogQueues - for every dialog queue: - CBox_PerformDialogQueues - CBox_SelectTanMode - possibly create and add JOB_TAN (for PSD2) - CBox_PerformQueue - FOR every job in the queue - IF status==finished - Job_PrepareNextMessage - Job_Next - add job to todo queue - ELSE IF status==enqueued - add job to todo queue - ELSE - error - CBox_SendAndRecvQueue - IF NEEDTAN: - CBox_SendAndReceiveQueueWithTan - CBox_SendAndReceiveQueueWithTan2 - create HKTAN, add to jobQueue - CBox_SendAndRecvQueueNoTan - CBox_SendQueue - JobQueue_ToMessage - FOR every job - Msg_AddNode - Msg_EncodeMsg - sign - encrypt - add msg head and tail - CBox_SendMessage - Dialog_SendMessage - Dialog_SendPacket - CBox_RecvQueue - CBox_RecvMessage - JobQueue_DispatchMessage - IF no result 3076: - _sendAndReceiveTanResponseProc2 - ELSE - CBox_SendAndRecvQueueNoTan - CBox_CloseDialog - CBox_SendAndRecvSelected(nonDialog, unSigned, unCrypted) - CBox_PerformNonDialogQueues - CBox_SendAndRecvSelected(nonDialog, unSigned, crypted) - CBox_PerformNonDialogQueues - CBox_SendAndRecvSelected(nonDialog, signed, unCrypted) - CBox_PerformNonDialogQueues - CBox_SendAndRecvSelected(nonDialog, signed, crypted) - CBox_PerformNonDialogQueues - OutBox_Finish_CBox - Job_Process - OutBox_FinishOutbox - FOR every cbox: - OutBox_Finish_CBox - SampleResults - FreeUsersAndAccountsFromUserQueueList aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/joblayer/0000755000175000017500000000000015037736162020503 500000000000000aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/joblayer/jobqueue_tomsg.c0000664000175000017500000001573314576274523023637 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2021 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "jobqueue_tomsg.h" #include "aqhbci/banking/user_l.h" #include "aqbanking/i18n_l.h" #include #include /* ------------------------------------------------------------------------------------------------ * forward declarations * ------------------------------------------------------------------------------------------------ */ static int _messageSetupWithCryptoAndTan(AH_JOBQUEUE *jq, AH_DIALOG *dlg, AH_MSG *msg, const char *sTan); static int _encodeJobs(AH_JOBQUEUE *jq, AH_MSG *msg); static void _updateJobsAfterEncodingMessage(AH_JOBQUEUE *jq, AH_DIALOG *dlg, AH_MSG *msg); /* ------------------------------------------------------------------------------------------------ * implementations * ------------------------------------------------------------------------------------------------ */ AH_MSG *AH_JobQueue_ToMessage(AH_JOBQUEUE *jq, AH_DIALOG *dlg) { return AH_JobQueue_ToMessageWithTan(jq, dlg, NULL); } AH_MSG *AH_JobQueue_ToMessageWithTan(AH_JOBQUEUE *jq, AH_DIALOG *dlg, const char *sTan) { AH_MSG *msg; int rv; assert(jq); assert(dlg); if (AH_JobQueue_GetCount(jq)<1) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Empty queue"); return NULL; } msg=AH_Msg_new(dlg); rv=_messageSetupWithCryptoAndTan(jq, dlg, msg, sTan); if (rv) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); AH_Msg_free(msg); return NULL; } rv=_encodeJobs(jq, msg); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); AH_Msg_free(msg); return NULL; } rv=AH_Msg_EncodeMsg(msg); if (rv) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not encode message (%d)", rv); AH_JobQueue_SetJobStatusOnMatch(jq, AH_JobStatusEncoded, AH_JobStatusError); AH_Msg_free(msg); return 0; } _updateJobsAfterEncodingMessage(jq, dlg, msg); DBG_DEBUG(AQHBCI_LOGDOMAIN, "Job queue encoded and ready to be sent"); return msg; } int _messageSetupWithCryptoAndTan(AH_JOBQUEUE *jq, AH_DIALOG *dlg, AH_MSG *msg, const char *sTan) { AB_USER *user; user=AH_JobQueue_GetUser(jq); AH_Msg_SetHbciVersion(msg, AH_User_GetHbciVersion(user)); AH_Msg_SetSecurityProfile(msg, AH_JobQueue_GetSecProfile(jq)); AH_Msg_SetSecurityClass(msg, AH_JobQueue_GetSecClass(jq)); if (sTan && *sTan) AH_Msg_SetTan(msg, sTan); DBG_INFO(AQHBCI_LOGDOMAIN, "Adding queue to message (flags: %08x)", AH_JobQueue_GetFlags(jq)); if (AH_JobQueue_GetFlags(jq) & AH_JOBQUEUE_FLAGS_NEEDTAN) { DBG_INFO(AQHBCI_LOGDOMAIN, "Queue needs a TAN"); } else { DBG_INFO(AQHBCI_LOGDOMAIN, "Queue doesn't need a TAN"); } AH_Msg_SetNeedTan(msg, (AH_JobQueue_GetFlags(jq) & AH_JOBQUEUE_FLAGS_NEEDTAN)?1:0); AH_Msg_SetNoSysId(msg, (AH_JobQueue_GetFlags(jq) & AH_JOBQUEUE_FLAGS_NOSYSID)?1:0); AH_Msg_SetSignSeqOne(msg, (AH_JobQueue_GetFlags(jq) & AH_JOBQUEUE_FLAGS_SIGNSEQONE)?1:0); /* copy signers */ if (AH_JobQueue_GetFlags(jq) & AH_JOBQUEUE_FLAGS_SIGN) { GWEN_STRINGLISTENTRY *se; se=GWEN_StringList_FirstEntry(AH_JobQueue_GetSigners(jq)); if (!se) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Signatures needed but no signer given"); return GWEN_ERROR_GENERIC; } while (se) { DBG_INFO(AQHBCI_LOGDOMAIN, "Adding signer [%s]", GWEN_StringListEntry_Data(se)); AH_Msg_AddSignerId(msg, GWEN_StringListEntry_Data(se)); se=GWEN_StringListEntry_Next(se); } /* while */ } /* copy crypter */ if (AH_JobQueue_GetFlags(jq) & AH_JOBQUEUE_FLAGS_CRYPT) { const char *s; s=AH_User_GetPeerId(user); if (!s) s=AB_User_GetUserId(user); AH_Msg_SetCrypterId(msg, s); } return 0; } int _encodeJobs(AH_JOBQUEUE *jq, AH_MSG *msg) { AH_JOB *j; unsigned int encodedJobs=0; j=AH_JobQueue_GetFirstJob(jq); while (j) { AH_JOB_STATUS st; st=AH_Job_GetStatus(j); /* only encode jobs which have not already been sent or which have no errors */ if (st==AH_JobStatusEnqueued) { unsigned int firstSeg; unsigned int lastSeg; GWEN_DB_NODE *jargs; GWEN_XMLNODE *jnode; GWEN_BUFFER *msgBuf; DBG_DEBUG(AQHBCI_LOGDOMAIN, "Encoding job \"%s\"", AH_Job_GetName(j)); jargs=AH_Job_GetArguments(j); jnode=AH_Job_GetXmlNode(j); if (strcasecmp(GWEN_XMLNode_GetData(jnode), "message")==0) { const char *s; s=GWEN_XMLNode_GetProperty(jnode, "name", 0); if (s) { DBG_NOTICE(AQHBCI_LOGDOMAIN, "Getting message specific data (%s)", s); jargs=GWEN_DB_GetGroup(jargs, GWEN_PATH_FLAGS_NAMEMUSTEXIST, s); if (!jargs) { DBG_NOTICE(AQHBCI_LOGDOMAIN, "No message specific data"); jargs=AH_Job_GetArguments(j); } } } firstSeg=AH_Msg_GetCurrentSegmentNumber(msg); msgBuf=AH_Msg_GetBuffer(msg); assert(msgBuf); lastSeg=AH_Msg_AddNode(msg, jnode, jargs); if (!lastSeg) { DBG_INFO(AQHBCI_LOGDOMAIN, "Could not encode job \"%s\"", AH_Job_GetName(j)); AH_Job_SetStatus(j, AH_JobStatusError); } else { AH_Job_SetFirstSegment(j, firstSeg); AH_Job_SetLastSegment(j, lastSeg); if (AH_Job_GetStatus(j)!=AH_JobStatusError) { DBG_DEBUG(AQHBCI_LOGDOMAIN, "Job \"%s\" encoded", AH_Job_GetName(j)); AH_Job_SetStatus(j, AH_JobStatusEncoded); encodedJobs++; } } } /* if status matches */ j=AH_Job_List_Next(j); } /* while */ if (encodedJobs<1) { DBG_ERROR(AQHBCI_LOGDOMAIN, "No job in queue encoded"); return GWEN_ERROR_GENERIC; } return 0; } void _updateJobsAfterEncodingMessage(AH_JOBQUEUE *jq, AH_DIALOG *dlg, AH_MSG *msg) { AH_JOB *j; /* * inform all jobs that they have been encoded * this is needed for multi-message jobs so that they can prepare * themselves for the next message */ j=AH_JobQueue_GetFirstJob(jq); AH_JobQueue_SetUsedTan(jq, AH_Msg_GetTan(msg)); AH_JobQueue_SetUsedPin(jq, AH_Msg_GetPin(msg)); while (j) { if (AH_Job_GetStatus(j)==AH_JobStatusEncoded) { const char *s; /* store some information about the message in the job */ AH_Job_SetMsgNum(j, AH_Msg_GetMsgNum(msg)); AH_Job_SetDialogId(j, AH_Dialog_GetDialogId(dlg)); /* store expected signer and crypter (if any) */ s=AH_Msg_GetExpectedSigner(msg); if (s) AH_Job_SetExpectedSigner(j, s); s=AH_Msg_GetExpectedCrypter(msg); if (s) AH_Job_SetExpectedCrypter(j, s); /* store used TAN (if any) */ s=AH_Msg_GetTan(msg); if (s) AH_Job_SetUsedTan(j, s); } j=AH_Job_List_Next(j); } /* while */ } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/joblayer/jobqueue_account.h0000664000175000017500000000115514170115771024125 00000000000000/*************************************************************************** begin : Wed Jan 12 2022 copyright : (C) 2022 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_JOBQUEUE_ACCOUNT_H #define AH_JOBQUEUE_ACCOUNT_H #include "aqhbci/joblayer/jobqueue_l.h" void AH_JobQueue_ReadAccounts(AH_JOBQUEUE *jq, GWEN_DB_NODE *dbResponses); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/joblayer/job_commit.h0000664000175000017500000000110514043610745022707 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2020 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_JOB_COMMIT_H #define AH_JOB_COMMIT_H #include "aqhbci/joblayer/job_l.h" int AH_Job_CommitSystemData(AH_JOB *j, int doLock); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/joblayer/job_crypt.h0000664000175000017500000000124214043610745022562 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_JOB_CRYPT_H #define AH_JOB_CRYPT_H #include "aqhbci/joblayer/job_l.h" #include int AH_Job_CheckEncryption(AH_JOB *j, GWEN_DB_NODE *dbRsp); int AH_Job_CheckSignature(AH_JOB *j, GWEN_DB_NODE *dbRsp); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/joblayer/job_l.h0000664000175000017500000002762514576274523021704 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_JOB_L_H #define AH_JOB_L_H typedef struct AH_JOB AH_JOB; #define AH_JOB_FLAGS_ACKNOWLEDGE 0x00000200 #define AH_JOB_FLAGS_IGNOREACCOUNTS 0x00000400 #define AH_JOB_FLAGS_SIGNSEQONE 0x00000800 #define AH_JOB_FLAGS_IGNORE_ERROR 0x00001000 #define AH_JOB_FLAGS_NOITAN 0x00002000 #define AH_JOB_FLAGS_TANUSED 0x00004000 #define AH_JOB_FLAGS_NOSYSID 0x00008000 #define AH_JOB_FLAGS_NEEDCRYPT 0x00010000 #define AH_JOB_FLAGS_NEEDSIGN 0x00020000 #define AH_JOB_FLAGS_ATTACHABLE 0x00040000 #define AH_JOB_FLAGS_SINGLE 0x00080000 #define AH_JOB_FLAGS_DLGJOB 0x00100000 #define AH_JOB_FLAGS_CRYPT 0x00200000 #define AH_JOB_FLAGS_SIGN 0x00400000 #define AH_JOB_FLAGS_MULTIMSG 0x00800000 #define AH_JOB_FLAGS_HASATTACHPOINT 0x01000000 #define AH_JOB_FLAGS_HASMOREMSGS 0x02000000 #define AH_JOB_FLAGS_HASWARNINGS 0x04000000 #define AH_JOB_FLAGS_HASERRORS 0x08000000 #define AH_JOB_FLAGS_PROCESSED 0x10000000 #define AH_JOB_FLAGS_COMMITTED 0x20000000 #define AH_JOB_FLAGS_NEEDTAN 0x40000000 #define AH_JOB_FLAGS_OUTBOX 0x80000000 #define AH_JOB_TANVER_1_4 0x14 #define AH_JOB_TANVER_1_3 0x13 #include #include #include GWEN_LIST_FUNCTION_DEFS(AH_JOB, AH_Job); GWEN_INHERIT_FUNCTION_DEFS(AH_JOB); GWEN_LIST2_FUNCTION_DEFS(AH_JOB, AH_Job); void AH_Job_List2_FreeAll(AH_JOB_LIST2 *jl); #include "aqhbci/msglayer/hbci_l.h" #include "aqhbci/joblayer/result_l.h" #include #include #include #include #include typedef enum { AH_JobStatusUnknown=0, AH_JobStatusToDo, AH_JobStatusEnqueued, AH_JobStatusEncoded, AH_JobStatusSent, AH_JobStatusAnswered, AH_JobStatusError, AH_JobStatusAll=255 } AH_JOB_STATUS; /** @name Prototypes For Virtual Functions * */ /*@{*/ typedef int (*AH_JOB_PROCESS_FN)(AH_JOB *j, AB_IMEXPORTER_CONTEXT *ctx); typedef int (*AH_JOB_COMMIT_FN)(AH_JOB *j, int doLock); typedef int (*AH_JOB_PREPARE_FN)(AH_JOB *j); typedef int (*AH_JOB_ADDCHALLENGEPARAMS_FN)(AH_JOB *j, int hkTanVer, GWEN_DB_NODE *dbMethod); typedef int (*AH_JOB_GETLIMITS_FN)(AH_JOB *j, AB_TRANSACTION_LIMITS **pLimits); typedef int (*AH_JOB_HANDLECOMMAND_FN)(AH_JOB *j, const AB_TRANSACTION *t); typedef int (*AH_JOB_HANDLERESULTS_FN)(AH_JOB *j, AB_IMEXPORTER_CONTEXT *ctx); /** * This function is called on multi-message jobs and should return: *
    *
  • 0 if it is sure that no message is to follow
  • *
  • 1 if there might be more message (will be checked by AqHBCI)
  • *
  • any other value (indicating an error)
  • *
*/ typedef int (*AH_JOB_NEXTMSG_FN)(AH_JOB *j); /*@}*/ /** @name Constructors, Destructors * */ /*@{*/ AH_JOB *AH_Job_new(const char *name, AB_PROVIDER *pro, AB_USER *u, AB_ACCOUNT *acc, int jobVersion); void AH_Job_free(AH_JOB *j); void AH_Job_Attach(AH_JOB *j); /*@}*/ /** @name Informational Functions * */ /*@{*/ const char *AH_Job_GetName(const AH_JOB *j); const char *AH_Job_GetDescription(const AH_JOB *j); const char *AH_Job_GetCode(const AH_JOB *j); void AH_Job_SetCode(AH_JOB *j, const char *s); const char *AH_Job_GetResponseName(const AH_JOB *j); void AH_Job_SetResponseName(AH_JOB *j, const char *s); int AH_Job_GetMinSignatures(const AH_JOB *j); int AH_Job_GetSecurityProfile(const AH_JOB *j); int AH_Job_GetSecurityClass(const AH_JOB *j); int AH_Job_GetJobsPerMsg(const AH_JOB *j); int AH_Job_GetChallengeClass(const AH_JOB *j); void AH_Job_SetChallengeClass(AH_JOB *j, int i); AB_USER *AH_Job_GetUser(const AH_JOB *j); GWEN_DB_NODE *AH_Job_GetParams(const AH_JOB *j); GWEN_DB_NODE *AH_Job_GetArguments(const AH_JOB *j); GWEN_DB_NODE *AH_Job_GetResponses(const AH_JOB *j); unsigned int AH_Job_GetMsgNum(const AH_JOB *j); const char *AH_Job_GetDialogId(const AH_JOB *j); AH_JOB_STATUS AH_Job_GetStatus(const AH_JOB *j); const char *AH_Job_StatusName(AH_JOB_STATUS st); void AH_Job_AddSigner(AH_JOB *j, const char *s); int AH_Job_AddSigners(AH_JOB *j, const GWEN_STRINGLIST *sl); int AH_Job_HasWarnings(const AH_JOB *j); int AH_Job_HasErrors(const AH_JOB *j); AH_RESULT_LIST *AH_Job_GetSegResults(const AH_JOB *j); AH_RESULT_LIST *AH_Job_GetMsgResults(const AH_JOB *j); AB_MESSAGE_LIST *AH_Job_GetMessages(const AH_JOB *j); /** * Add command to job for later reference. */ void AH_Job_AddCommand(AH_JOB *j, AB_TRANSACTION *t); AB_TRANSACTION_LIST2 *AH_Job_GetCommandList(const AH_JOB *j); /*@}*/ /** @name Virtual Functions * */ /*@{*/ int AH_Job_Process(AH_JOB *j, AB_IMEXPORTER_CONTEXT *ctx); int AH_Job_Commit(AH_JOB *j, int doLock); /** * Check whether the results for this job contain warning 3920. In this * case the result must be commited. * @return 0 if there is no such result, !=0 otherwise */ int AH_Job_HasItanResult(const AH_JOB *j); int AH_Job_HasResultWithCode(const AH_JOB *j, int code); /** * You can use this from the Commit function of the inheriting class to * additionally let the job do some basic stuff (like saving UPD, BPD, * messages etc). */ int AH_Job_CommitSystemData(AH_JOB *j, int doLock); /** * You can use this from the Process function of the inheriting class to * additionally let the job do some basic stuff (like catching UPD, BPD, * messages etc). */ int AH_Job_DefaultProcessHandler(AH_JOB *j); /** * You can use this from the Commit function of the inheriting class. * It calls @ref AH_Job_CommitSystemData. */ int AH_Job_DefaultCommitHandler(AH_JOB *j, int doLock); int AH_Job_Prepare(AH_JOB *j); /** * This function lets the job add its challenge parameters itself. * Unfortunately this is needed, because the ZKA decided to make FinTS * even more complicated than it already is :-/ * For some HKTAN versions the list of parameters differs from others. */ int AH_Job_AddChallengeParams(AH_JOB *j, int hkTanVer, GWEN_DB_NODE *dbMethod); /** * Get transaction limits for a given job. */ int AH_Job_GetLimits(AH_JOB *j, AB_TRANSACTION_LIMITS **pLimits); /** * Handle a given command transaction. * The transaction contains the command and parameters for a given job. * The job should test the given transaction. If the transaction is not acceptable an * error code should be returned. * If zero is returned the job should have taken all the data from the given command, * e.g. a transfer job will add the transfer represented by the command to its internal list. * Don't call AH_Job_AddCommand() within that function, this will be done outside. */ int AH_Job_HandleCommand(AH_JOB *j, const AB_TRANSACTION *t); /** * Let the job transfer remaining results to the imExporter context. * Some jobs already add their results to the context upon @ref AH_Job_Process. * This function is for those jobs which don't. */ int AH_Job_HandleResults(AH_JOB *j, AB_IMEXPORTER_CONTEXT *ctx); /*@}*/ /** @name Setters For Virtual Functions * */ /*@{*/ void AH_Job_SetProcessFn(AH_JOB *j, AH_JOB_PROCESS_FN f); void AH_Job_SetCommitFn(AH_JOB *j, AH_JOB_COMMIT_FN f); void AH_Job_SetNextMsgFn(AH_JOB *j, AH_JOB_NEXTMSG_FN f); void AH_Job_SetPrepareFn(AH_JOB *j, AH_JOB_PREPARE_FN f); void AH_Job_SetAddChallengeParamsFn(AH_JOB *j, AH_JOB_ADDCHALLENGEPARAMS_FN f); void AH_Job_SetGetLimitsFn(AH_JOB *j, AH_JOB_GETLIMITS_FN f); void AH_Job_SetHandleCommandFn(AH_JOB *j, AH_JOB_HANDLECOMMAND_FN f); void AH_Job_SetHandleResultsFn(AH_JOB *j, AH_JOB_HANDLERESULTS_FN f); /*@}*/ void AH_Job_Dump(const AH_JOB *j, FILE *f, unsigned int insert); void AH_Job_DumpShort(const AH_JOB *j, FILE *f, unsigned int insert); void AH_Job_LogFlags(const AH_JOB *j, const char *msg); const GWEN_STRINGLIST *AH_Job_GetLogs(const AH_JOB *j); uint32_t AH_Job_GetFirstSegment(const AH_JOB *j); void AH_Job_SetFirstSegment(AH_JOB *j, uint32_t i); uint32_t AH_Job_GetLastSegment(const AH_JOB *j); void AH_Job_SetLastSegment(AH_JOB *j, uint32_t i); int AH_Job_HasSegment(const AH_JOB *j, int seg); /** * Takes over ownership of the given group. */ void AH_Job_AddResponse(AH_JOB *j, GWEN_DB_NODE *db); void AH_Job_SetStatus(AH_JOB *j, AH_JOB_STATUS st); GWEN_XMLNODE *AH_Job_GetXmlNode(const AH_JOB *j); const GWEN_STRINGLIST *AH_Job_GetSigners(const AH_JOB *j); int AH_Job_PrepareNextMessage(AH_JOB *j); void AH_Job_SetMsgNum(AH_JOB *j, unsigned int i); void AH_Job_SetDialogId(AH_JOB *j, const char *s); uint32_t AH_Job_GetFlags(const AH_JOB *j); void AH_Job_SetFlags(AH_JOB *j, uint32_t f); void AH_Job_AddFlags(AH_JOB *j, uint32_t f); void AH_Job_SubFlags(AH_JOB *j, uint32_t f); uint32_t AH_Job_GetId(const AH_JOB *j); void AH_Job_SetId(AH_JOB *j, uint32_t i); AH_HBCI *AH_Job_GetHbci(const AH_JOB *j); AB_BANKING *AH_Job_GetBankingApi(const AH_JOB *j); const char *AH_Job_GetExpectedSigner(const AH_JOB *j); void AH_Job_SetExpectedSigner(AH_JOB *j, const char *s); const char *AH_Job_GetExpectedCrypter(const AH_JOB *j); void AH_Job_SetExpectedCrypter(AH_JOB *j, const char *s); const char *AH_Job_GetUsedTan(const AH_JOB *j); void AH_Job_SetUsedTan(AH_JOB *j, const char *s); void AH_Job_Log(AH_JOB *j, GWEN_LOGGER_LEVEL ll, const char *txt); GWEN_STRINGLIST *AH_Job_GetChallengeParams(const AH_JOB *j); void AH_Job_AddChallengeParam(AH_JOB *j, const char *s); void AH_Job_ClearChallengeParams(AH_JOB *j); int AH_Job_GetChallengeClass(const AH_JOB *j); void AH_Job_SetChallengeClass(AH_JOB *j, int i); void AH_Job_ValueToChallengeString(const AB_VALUE *v, GWEN_BUFFER *buf); /** * This function adds all BPD groups of the job with the given name and for * which XML descriptions are available. So basically, the user can choose * a job version from the returned list. */ int AH_Job_SampleBpdVersions(const char *name, AB_USER *u, GWEN_DB_NODE *dbResult); int AH_Job_GetMaxVersionUpUntil(const char *name, AB_USER *u, int maxVersion); int AH_Job_GetSegmentVersion(const AH_JOB *j); int AH_Job_GetTransferCount(AH_JOB *j); void AH_Job_IncTransferCount(AH_JOB *j); int AH_Job_GetMaxTransfers(AH_JOB *j); void AH_Job_SetMaxTransfers(AH_JOB *j, int i); AB_TRANSACTION_LIST *AH_Job_GetTransferList(const AH_JOB *j); void AH_Job_AddTransfer(AH_JOB *j, AB_TRANSACTION *t); AB_TRANSACTION *AH_Job_GetFirstTransfer(const AH_JOB *j); AB_TRANSACTION_COMMAND AH_Job_GetSupportedCommand(const AH_JOB *j); void AH_Job_SetSupportedCommand(AH_JOB *j, AB_TRANSACTION_COMMAND tc); /** * This is a simple implementation of the GetLimits-callback which just creates * an empty transaction limits object with just the command field set. */ int AH_Job_GetLimits_EmptyLimits(AH_JOB *j, AB_TRANSACTION_LIMITS **pLimits); /** * Implementation of AH_Job_HandleCommand which just accepts the command * and does nothing else. */ int AH_Job_HandleCommand_Accept(AH_JOB *j, const AB_TRANSACTION *t); /** * Implementation of AH_Job_HandleResults which does nothing. */ int AH_Job_HandleResults_Empty(AH_JOB *j, AB_IMEXPORTER_CONTEXT *ctx); void AH_Job_ReadAccountDataSeg(AB_ACCOUNT *acc, GWEN_DB_NODE *dbAccountData); AB_PROVIDER *AH_Job_GetProvider(const AH_JOB *j); /* Get job from list by id */ AH_JOB *AH_Job_List_GetById(AH_JOB_LIST *jl, uint32_t id); void AH_Job_SetStatusOnCommands(AH_JOB *j, AB_TRANSACTION_STATUS status); char *AH_Job_GenerateIdFromDateTimeAndJobId(const AH_JOB *j, int runningNumber); #endif /* AH_JOB_L_H */ aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/joblayer/result_l.h0000664000175000017500000000257114043610745022426 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_RESULT_L_H #define AH_RESULT_L_H #include typedef struct AH_RESULT AH_RESULT; GWEN_LIST_FUNCTION_DEFS(AH_RESULT, AH_Result); AH_RESULT *AH_Result_new(int code, const char *text, const char *ref, const char *param, int isMsgResult); void AH_Result_free(AH_RESULT *r); AH_RESULT *AH_Result_dup(const AH_RESULT *or); int AH_Result_GetCode(const AH_RESULT *r); const char *AH_Result_GetText(const AH_RESULT *r); const char *AH_Result_GetRef(const AH_RESULT *r); const char *AH_Result_GetParam(const AH_RESULT *r); int AH_Result_IsError(const AH_RESULT *r); int AH_Result_IsWarning(const AH_RESULT *r); int AH_Result_IsInfo(const AH_RESULT *r); int AH_Result_IsOk(const AH_RESULT *r); int AH_Result_IsMsgResult(const AH_RESULT *r); void AH_Result_Dump(const AH_RESULT *r, FILE *f, unsigned int insert); #endif /* AH_RESULT_H */ aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/joblayer/jobqueue.c0000664000175000017500000001667014576404066022424 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "jobqueue_p.h" #include "aqhbci/aqhbci_l.h" #include "aqhbci/joblayer/job_l.h" #include "aqhbci/banking/user_l.h" #include "aqhbci/msglayer/message_l.h" #include "aqhbci/msglayer/hbci_l.h" #include "aqhbci/msglayer/dialog_l.h" #include #include #include #include #include #include GWEN_LIST_FUNCTIONS(AH_JOBQUEUE, AH_JobQueue); AH_JOBQUEUE *AH_JobQueue_new(AB_USER *u) { AH_JOBQUEUE *jq; assert(u); GWEN_NEW_OBJECT(AH_JOBQUEUE, jq); GWEN_LIST_INIT(AH_JOBQUEUE, jq); jq->user=u; jq->signers=GWEN_StringList_new(); jq->jobs=AH_Job_List_new(); jq->usage=1; return jq; } void AH_JobQueue_free(AH_JOBQUEUE *jq) { if (jq) { assert(jq->usage); if (--(jq->usage)==0) { GWEN_StringList_free(jq->signers); AH_Job_List_free(jq->jobs); free(jq->usedTan); free(jq->usedPin); if (jq->referenceQueue) AH_JobQueue_free(jq->referenceQueue); GWEN_LIST_FINI(AH_JOBQUEUE, jq); GWEN_FREE_OBJECT(jq); } } } void AH_JobQueue_Attach(AH_JOBQUEUE *jq) { assert(jq); jq->usage++; } uint32_t AH_JobQueue_GetFlags(const AH_JOBQUEUE *jq) { assert(jq); assert(jq->usage); return jq->flags; } void AH_JobQueue_SetFlags(AH_JOBQUEUE *jq, uint32_t f) { assert(jq); assert(jq->usage); jq->flags=f; } void AH_JobQueue_AddFlags(AH_JOBQUEUE *jq, uint32_t f) { assert(jq); assert(jq->usage); jq->flags|=f; } void AH_JobQueue_SubFlags(AH_JOBQUEUE *jq, uint32_t f) { assert(jq); assert(jq->usage); jq->flags&=~f; } AB_USER *AH_JobQueue_GetUser(const AH_JOBQUEUE *jq) { assert(jq); assert(jq->usage); return jq->user; } int AH_JobQueue_GetSecProfile(const AH_JOBQUEUE *jq) { assert(jq); assert(jq->usage); return jq->secProfile; } void AH_JobQueue_SetSecProfile(AH_JOBQUEUE *jq, int i) { assert(jq); assert(jq->usage); jq->secProfile=i; } int AH_JobQueue_GetSecClass(const AH_JOBQUEUE *jq) { assert(jq); assert(jq->usage); return jq->secClass; } void AH_JobQueue_SetSecClass(AH_JOBQUEUE *jq, int i) { assert(jq); assert(jq->usage); jq->secClass=i; } GWEN_STRINGLIST *AH_JobQueue_GetSigners(const AH_JOBQUEUE *jq) { assert(jq); assert(jq->usage); return jq->signers; } void AH_JobQueue_SetSigners(AH_JOBQUEUE *jq, GWEN_STRINGLIST *signers) { assert(jq); assert(jq->usage); if (jq->signers) GWEN_StringList_free(jq->signers); jq->signers=signers; } AH_JOBQUEUE *AH_JobQueue_fromQueue(AH_JOBQUEUE *oldq) { AH_JOBQUEUE *jq; assert(oldq); jq=AH_JobQueue_new(oldq->user); GWEN_StringList_free(jq->signers); jq->signers=GWEN_StringList_dup(oldq->signers); jq->secProfile=oldq->secProfile; jq->secClass=oldq->secClass; if (oldq->usedTan) jq->usedTan=strdup(oldq->usedTan); if (oldq->usedPin) jq->usedPin=strdup(oldq->usedPin); return jq; } void AH_JobQueue_SetUsedTan(AH_JOBQUEUE *jq, const char *s) { assert(jq); assert(jq->usage); free(jq->usedTan); if (s) jq->usedTan=strdup(s); else jq->usedTan=0; } void AH_JobQueue_SetUsedPin(AH_JOBQUEUE *jq, const char *s) { assert(jq); assert(jq->usage); free(jq->usedPin); if (s) jq->usedPin=strdup(s); else jq->usedPin=0; } AH_JOB_LIST *AH_JobQueue_GetJobList(const AH_JOBQUEUE *jq) { assert(jq); assert(jq->usage); return jq->jobs; } AH_JOB_LIST *AH_JobQueue_TakeJobList(AH_JOBQUEUE *jq) { AH_JOB_LIST *jl; assert(jq); assert(jq->usage); jl=jq->jobs; jq->jobs=AH_Job_List_new(); return jl; } AH_JOB *AH_JobQueue_GetFirstJob(const AH_JOBQUEUE *jq) { assert(jq); assert(jq->usage); if (jq->jobs) return AH_Job_List_First(jq->jobs); return NULL; } void AH_JobQueue_SetJobStatusOnMatch(AH_JOBQUEUE *jq, AH_JOB_STATUS matchSt, AH_JOB_STATUS newSt) { AH_JOB *j; assert(jq); assert(jq->usage); j=AH_Job_List_First(jq->jobs); while (j) { if (matchSt==AH_JobStatusAll || AH_Job_GetStatus(j)==matchSt) AH_Job_SetStatus(j, newSt); j=AH_Job_List_Next(j); } /* while */ } void AH_JobQueue_Dump(AH_JOBQUEUE *jq, FILE *f, unsigned int insert) { uint32_t k; AH_JOB *j; GWEN_STRINGLISTENTRY *se; for (k=0; kusage); for (k=0; kuser)); for (k=0; kflags); if (jq->flags & AH_JOBQUEUE_FLAGS_CRYPT) fprintf(f, "CRYPT "); if (jq->flags & AH_JOBQUEUE_FLAGS_SIGN) fprintf(f, "SIGN "); if (jq->flags & AH_JOBQUEUE_FLAGS_ISDIALOG) fprintf(f, "ISDIALOG "); if (jq->flags & AH_JOBQUEUE_FLAGS_NEEDTAN) fprintf(f, "NEEDTAN "); if (jq->flags & AH_JOBQUEUE_FLAGS_NOSYSID) fprintf(f, "NOSYSID "); if (jq->flags & AH_JOBQUEUE_FLAGS_NOITAN) fprintf(f, "NOITAN "); if (jq->flags & AH_JOBQUEUE_FLAGS_SIGNSEQONE) fprintf(f, "SIGNSEQONE "); if (jq->flags & AH_JOBQUEUE_FLAGS_OUTBOX) fprintf(f, "OUTBOX "); if (jq->flags & AH_JOBQUEUE_FLAGS_HASWARNINGS) fprintf(f, "HASWARNINGS "); if (jq->flags & AH_JOBQUEUE_FLAGS_HASERRORS) fprintf(f, "HASERRORS "); fprintf(f, ")\n"); for (k=0; ksigners); while (se) { for (k=0; kjobs); while (j) { AH_Job_Dump(j, f, insert+2); j=AH_Job_List_Next(j); } /* while j */ } void AH_JobQueue_DumpJobList(const AH_JOBQUEUE *jq, FILE *f, unsigned int insert) { uint32_t k; AH_JOB *j; for (k=0; kjobs); while (j) { AH_Job_DumpShort(j, f, insert+2); j=AH_Job_List_Next(j); } /* while j */ } unsigned int AH_JobQueue_GetCount(const AH_JOBQUEUE *jq) { assert(jq); assert(jq->usage); if (jq->jobs) return AH_Job_List_GetCount(jq->jobs); return 0; } const char *AH_JobQueue_GetUsedTan(const AH_JOBQUEUE *jq) { assert(jq); assert(jq->usage); return jq->usedTan; } const char *AH_JobQueue_GetUsedPin(const AH_JOBQUEUE *jq) { assert(jq); assert(jq->usage); return jq->usedPin; } AH_JOBQUEUE *AH_JobQueue_GetReferenceQueue(const AH_JOBQUEUE *jq) { assert(jq); assert(jq->usage); return jq->referenceQueue; } void AH_JobQueue_SetReferenceQueue(AH_JOBQUEUE *jq, AH_JOBQUEUE *refq) { assert(jq); assert(jq->usage); if (refq) AH_JobQueue_Attach(refq); if (jq->referenceQueue) AH_JobQueue_free(jq->referenceQueue); jq->referenceQueue=refq; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/joblayer/job_virtual.c0000664000175000017500000001412214576127360023112 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ /* * This file is included by job.c */ /* ======================================================================== * Virtual Functions * ======================================================================== */ int AH_Job_Process(AH_JOB *j, AB_IMEXPORTER_CONTEXT *ctx) { assert(j); assert(j->usage); DBG_NOTICE(AQHBCI_LOGDOMAIN, "Processing job \"%s\" (%llu)", AH_Job_GetName(j), (unsigned long long int) AH_Job_GetId(j)); AH_Job_SampleResults(j); if (j->processFn) return j->processFn(j, ctx); else { DBG_INFO(AQHBCI_LOGDOMAIN, "No processFn set"); return AH_Job_DefaultProcessHandler(j); } } int AH_Job_Commit(AH_JOB *j, int doLock) { assert(j); assert(j->usage); if (j->commitFn) return j->commitFn(j, doLock); else { DBG_DEBUG(AQHBCI_LOGDOMAIN, "No commitFn set"); return AH_Job_DefaultCommitHandler(j, doLock); } } int AH_Job_Prepare(AH_JOB *j) { assert(j); assert(j->usage); if (j->prepareFn) return j->prepareFn(j); else { DBG_DEBUG(AQHBCI_LOGDOMAIN, "No prepareFn set"); return GWEN_ERROR_NOT_SUPPORTED; } } int AH_Job_AddChallengeParams(AH_JOB *j, int hkTanVer, GWEN_DB_NODE *dbMethod) { assert(j); assert(j->usage); if (j->addChallengeParamsFn) return j->addChallengeParamsFn(j, hkTanVer, dbMethod); else { DBG_ERROR(AQHBCI_LOGDOMAIN, "No addChallengeParamsFn set"); return GWEN_ERROR_NOT_SUPPORTED; } } int AH_Job_GetLimits(AH_JOB *j, AB_TRANSACTION_LIMITS **pLimits) { assert(j); assert(j->usage); if (j->getLimitsFn) return j->getLimitsFn(j, pLimits); else { DBG_ERROR(AQHBCI_LOGDOMAIN, "No getLimitsFn set"); return GWEN_ERROR_NOT_SUPPORTED; } } int AH_Job_HandleCommand(AH_JOB *j, const AB_TRANSACTION *t) { assert(j); assert(j->usage); if (j->handleCommandFn) return j->handleCommandFn(j, t); else { DBG_ERROR(AQHBCI_LOGDOMAIN, "No handleCommandFn set"); return GWEN_ERROR_NOT_SUPPORTED; } } int AH_Job_HandleResults(AH_JOB *j, AB_IMEXPORTER_CONTEXT *ctx) { assert(j); assert(j->usage); if (j->handleResultsFn) return j->handleResultsFn(j, ctx); else { DBG_INFO(AQHBCI_LOGDOMAIN, "No handleResultsFn set in job \"%s\"", (j->name)?(j->name):"(unnamed)"); return GWEN_ERROR_NOT_SUPPORTED; } } /* ======================================================================== * Setters for Virtual Functions * ======================================================================== */ void AH_Job_SetProcessFn(AH_JOB *j, AH_JOB_PROCESS_FN f) { assert(j); assert(j->usage); j->processFn=f; } void AH_Job_SetCommitFn(AH_JOB *j, AH_JOB_COMMIT_FN f) { assert(j); assert(j->usage); j->commitFn=f; } void AH_Job_SetNextMsgFn(AH_JOB *j, AH_JOB_NEXTMSG_FN f) { assert(j); assert(j->usage); j->nextMsgFn=f; } void AH_Job_SetPrepareFn(AH_JOB *j, AH_JOB_PREPARE_FN f) { assert(j); assert(j->usage); j->prepareFn=f; } void AH_Job_SetAddChallengeParamsFn(AH_JOB *j, AH_JOB_ADDCHALLENGEPARAMS_FN f) { assert(j); assert(j->usage); j->addChallengeParamsFn=f; } void AH_Job_SetGetLimitsFn(AH_JOB *j, AH_JOB_GETLIMITS_FN f) { assert(j); assert(j->usage); j->getLimitsFn=f; } void AH_Job_SetHandleCommandFn(AH_JOB *j, AH_JOB_HANDLECOMMAND_FN f) { assert(j); assert(j->usage); j->handleCommandFn=f; } void AH_Job_SetHandleResultsFn(AH_JOB *j, AH_JOB_HANDLERESULTS_FN f) { assert(j); assert(j->usage); j->handleResultsFn=f; } /* ======================================================================== * Defaults or Offers for Virtual Functions * ======================================================================== */ int AH_Job_DefaultProcessHandler(AH_JOB *j) { assert(j); assert(j->usage); if (AH_Job_GetFlags(j) & AH_JOB_FLAGS_PROCESSED) { DBG_WARN(AQHBCI_LOGDOMAIN, "Already processed job \"%s\"", j->name); return 0; } return 0; } int AH_Job_DefaultCommitHandler(AH_JOB *j, int doLock) { int rv; assert(j); assert(j->usage); if (AH_Job_GetFlags(j) & AH_JOB_FLAGS_COMMITTED) { DBG_WARN(AQHBCI_LOGDOMAIN, "Already committed job \"%s\"", j->name); return 0; } rv=AH_Job_CommitSystemData(j, doLock); AH_Job_AddFlags(j, AH_JOB_FLAGS_COMMITTED); return rv; } int AH_Job_GetLimits_EmptyLimits(AH_JOB *j, AB_TRANSACTION_LIMITS **pLimits) { AB_TRANSACTION_LIMITS *tl; tl=AB_TransactionLimits_new(); AB_TransactionLimits_SetCommand(tl, AH_Job_GetSupportedCommand(j)); *pLimits=tl; return 0; } int AH_Job_HandleCommand_Accept(AH_JOB *j, const AB_TRANSACTION *t) { return 0; } int AH_Job_HandleResults_Empty(AH_JOB *j, AB_IMEXPORTER_CONTEXT *ctx) { AH_RESULT_LIST *rl; AH_RESULT *r; AB_TRANSACTION_STATUS tStatus; assert(j); assert(j->usage); rl=AH_Job_GetSegResults(j); assert(rl); r=AH_Result_List_First(rl); if (!r) { DBG_ERROR(AQHBCI_LOGDOMAIN, "No segment results"); tStatus=AB_Transaction_StatusError; } else { int has10=0; int has20=0; while (r) { int rcode; rcode=AH_Result_GetCode(r); if (rcode>=10 && rcode<=19) { DBG_INFO(AQBANKING_LOGDOMAIN, "Has10: %d (%s)", rcode, AH_Result_GetText(r)); has10=1; } else if ((rcode>=20 && rcode <=29) || rcode==3010) { DBG_INFO(AQBANKING_LOGDOMAIN, "Has20: %d (%s)", rcode, AH_Result_GetText(r)); has20=1; } else { DBG_INFO(AQBANKING_LOGDOMAIN, "Other: %d (%s)", rcode, AH_Result_GetText(r)); } r=AH_Result_List_Next(r); } if (has20) tStatus=AB_Transaction_StatusAccepted; else if (has10) tStatus=AB_Transaction_StatusPending; else tStatus=AB_Transaction_StatusRejected; } AH_Job_SetStatusOnCommands(j, tStatus); return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/joblayer/jobqueue_addjob.c0000664000175000017500000002223414170115771023710 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2021 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "jobqueue_addjob.h" #include "aqhbci/banking/user_l.h" #include "aqbanking/i18n_l.h" #include #include /* ------------------------------------------------------------------------------------------------ * forward declarations * ------------------------------------------------------------------------------------------------ */ AH_JOBQUEUE_ADDRESULT _checkJobTypes(AH_JOBQUEUE *jq, AH_JOB *jobToAdd); AH_JOBQUEUE_ADDRESULT _checkJobFlags(AH_JOBQUEUE *jq, AH_JOB *jobToAdd); AH_JOBQUEUE_ADDRESULT _checkSigners(AH_JOBQUEUE *jq, AH_JOB *jobToAdd); int _countJobTypes(const AH_JOBQUEUE *jq, const AH_JOB *jobToAdd); int _countJobsOtherThanTan(const AH_JOBQUEUE *jq); int _countJobsOfType(const AH_JOBQUEUE *jq, const char *jobTypeName); int _list2HasAllEntriesOfList1(const GWEN_STRINGLIST *stringList1, const GWEN_STRINGLIST *stringList2); /* ------------------------------------------------------------------------------------------------ * implementations * ------------------------------------------------------------------------------------------------ */ AH_JOBQUEUE_ADDRESULT AH_JobQueue_AddJob(AH_JOBQUEUE *jq, AH_JOB *j) { assert(jq); /* job owner must equal queue owner */ if (AH_Job_GetUser(j)!=AH_JobQueue_GetUser(jq)) { DBG_INFO(AQHBCI_LOGDOMAIN, "Owner of the job doesn't match"); return AH_JobQueueAddResultJobLimit; } if (AH_JobQueue_GetCount(jq)<1) { const GWEN_STRINGLIST *sl; sl=AH_Job_GetSigners(j); if (sl) { DBG_DEBUG(AQHBCI_LOGDOMAIN, "Copying %d signers from job to queue", GWEN_StringList_Count(sl)); AH_JobQueue_SetSigners(jq, GWEN_StringList_dup(sl)); } } else { if (strcasecmp(AH_Job_GetName(j), "JobTan")!=0) { AH_JOBQUEUE_ADDRESULT jobQueueResult; jobQueueResult=_checkJobFlags(jq, j); if (jobQueueResult!=AH_JobQueueAddResultOk) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", jobQueueResult); return jobQueueResult; } jobQueueResult=_checkJobTypes(jq, j); if (jobQueueResult!=AH_JobQueueAddResultOk) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", jobQueueResult); return jobQueueResult; } jobQueueResult=_checkSigners(jq, j); if (jobQueueResult!=AH_JobQueueAddResultOk) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", jobQueueResult); return jobQueueResult; } if (AH_JobQueue_GetSecClass(jq)==0) AH_JobQueue_SetSecClass(jq, AH_Job_GetSecurityClass(j)); else { if (AH_JobQueue_GetSecClass(jq)!=AH_Job_GetSecurityClass(j)) { DBG_INFO(AQHBCI_LOGDOMAIN, "Job's security class doesn't match that of the queue (%d != %d)", AH_JobQueue_GetSecClass(jq), AH_Job_GetSecurityClass(j)); return AH_JobQueueAddResultJobLimit; } } } /* if not JobTan */ } /* update maximum security profile */ if (AH_Job_GetSecurityProfile(j)>AH_JobQueue_GetSecProfile(jq)) AH_JobQueue_SetSecProfile(jq, AH_Job_GetSecurityProfile(j)); if (strcasecmp(AH_Job_GetName(j), "JobTan")!=0) { /* adjust queue flags according to current job */ if (AH_Job_GetFlags(j) & AH_JOB_FLAGS_CRYPT) AH_JobQueue_AddFlags(jq, AH_JOBQUEUE_FLAGS_CRYPT); if (AH_Job_GetFlags(j) & AH_JOB_FLAGS_SIGN) AH_JobQueue_AddFlags(jq, AH_JOBQUEUE_FLAGS_SIGN); if (AH_Job_GetFlags(j) & AH_JOB_FLAGS_NEEDTAN) AH_JobQueue_AddFlags(jq, AH_JOBQUEUE_FLAGS_NEEDTAN); if (AH_Job_GetFlags(j) & AH_JOB_FLAGS_NOSYSID) AH_JobQueue_AddFlags(jq, AH_JOBQUEUE_FLAGS_NOSYSID); if (AH_Job_GetFlags(j) & AH_JOB_FLAGS_SIGNSEQONE) AH_JobQueue_AddFlags(jq, AH_JOBQUEUE_FLAGS_SIGNSEQONE); if (AH_Job_GetFlags(j) & AH_JOB_FLAGS_NOITAN) AH_JobQueue_AddFlags(jq, AH_JOBQUEUE_FLAGS_NOITAN); if (AH_Job_GetFlags(j) & AH_JOB_FLAGS_IGNOREACCOUNTS) AH_JobQueue_AddFlags(jq, AH_JOBQUEUE_FLAGS_IGNOREACCOUNTS); } /* actually add job to queue */ AH_Job_List_Add(j, AH_JobQueue_GetJobList(jq)); AH_Job_SetStatus(j, AH_JobStatusEnqueued); DBG_DEBUG(AQHBCI_LOGDOMAIN, "Job added to the queue (flags: %08x)", AH_JobQueue_GetFlags(jq)); return AH_JobQueueAddResultOk; } AH_JOBQUEUE_ADDRESULT _checkJobTypes(AH_JOBQUEUE *jq, AH_JOB *jobToAdd) { AB_USER *user; AH_BPD *bpd; int maxNumOfThisJobPerMsg; int maxJobTypes; int jobTypeCount; int thisJobTypeCount; /* sample some variables */ user=AH_JobQueue_GetUser(jq); bpd=AH_User_GetBpd(user); maxNumOfThisJobPerMsg=AH_Job_GetJobsPerMsg(jobToAdd); maxJobTypes=AH_Bpd_GetJobTypesPerMsg(bpd); /* count jobs */ jobTypeCount=_countJobTypes(jq, jobToAdd); thisJobTypeCount=_countJobsOfType(jq, AH_Job_GetName(jobToAdd))+1; /* checks */ if (maxNumOfThisJobPerMsg && thisJobTypeCount>maxNumOfThisJobPerMsg) { DBG_INFO(AQHBCI_LOGDOMAIN, "Too many jobs of this kind (limit is %d)", maxNumOfThisJobPerMsg); return AH_JobQueueAddResultJobLimit; } if (maxJobTypes && jobTypeCount>maxJobTypes) { DBG_INFO(AQHBCI_LOGDOMAIN, "Too many different job types (limit is %d)", maxJobTypes); return AH_JobQueueAddResultJobLimit; } return AH_JobQueueAddResultOk; } int _countJobTypes(const AH_JOBQUEUE *jq, const AH_JOB *jobToAdd) { AH_JOB *j; GWEN_STRINGLIST *jobTypeList; int jobTypeCount; jobTypeList=GWEN_StringList_new(); j=AH_JobQueue_GetFirstJob(jq); while (j) { const char *jobType; jobType=AH_Job_GetName(j); if (strcasecmp(jobType, "JobTan")!=0) GWEN_StringList_AppendString(jobTypeList, jobType, 0, 1); j=AH_Job_List_Next(j); } /* while */ if (strcasecmp(AH_Job_GetName(jobToAdd), "JobTan")!=0) GWEN_StringList_AppendString(jobTypeList, AH_Job_GetName(jobToAdd), 0, 1); jobTypeCount=GWEN_StringList_Count(jobTypeList); GWEN_StringList_free(jobTypeList); return jobTypeCount; } int _countJobsOfType(const AH_JOBQUEUE *jq, const char *jobTypeName) { AH_JOB *j; int jobCount=0; j=AH_JobQueue_GetFirstJob(jq); while (j) { if (strcasecmp(AH_Job_GetName(j), jobTypeName)==0) jobCount++; j=AH_Job_List_Next(j); } /* while */ return jobCount; } int _countJobsOtherThanTan(const AH_JOBQUEUE *jq) { AH_JOB *j; int jobCount=0; j=AH_JobQueue_GetFirstJob(jq); while (j) { if (strcasecmp(AH_Job_GetName(j), "JobTan")!=0) jobCount++; j=AH_Job_List_Next(j); } /* while */ return jobCount; } AH_JOBQUEUE_ADDRESULT _checkJobFlags(AH_JOBQUEUE *jq, AH_JOB *jobToAdd) { if (strcasecmp(AH_Job_GetName(jobToAdd), "JobTan")!=0 && strcasecmp(AH_Job_GetName(jobToAdd), "JobAcknowledge")!=0) { uint32_t flagsInJobToAdd; uint32_t flagsInFirstJob; AH_JOB *firstJob; firstJob=AH_JobQueue_GetFirstJob(jq); flagsInJobToAdd=AH_Job_GetFlags(jobToAdd); flagsInFirstJob=AH_Job_GetFlags(firstJob); if ((flagsInJobToAdd & AH_JOB_FLAGS_SINGLE) || (flagsInJobToAdd & AH_JOB_FLAGS_DLGJOB)) { DBG_INFO(AQHBCI_LOGDOMAIN, "New jobs wants to be alone but queue is not empty"); return AH_JobQueueAddResultQueueFull; } if ((flagsInFirstJob & AH_JOB_FLAGS_SINGLE) || (flagsInFirstJob & AH_JOB_FLAGS_DLGJOB)) { DBG_INFO(AQHBCI_LOGDOMAIN, "Queue already contains a job which wants to be left alone"); return AH_JobQueueAddResultQueueFull; } if ((flagsInJobToAdd & (AH_JOB_FLAGS_CRYPT | AH_JOB_FLAGS_NEEDTAN | AH_JOB_FLAGS_NOSYSID | AH_JOB_FLAGS_NOITAN)) != (flagsInFirstJob & (AH_JOB_FLAGS_CRYPT | AH_JOB_FLAGS_NEEDTAN | AH_JOB_FLAGS_NOSYSID | AH_JOB_FLAGS_NOITAN))) { DBG_INFO(AQHBCI_LOGDOMAIN, "Encryption/TAN/SysId flags for queue and this job differ"); return AH_JobQueueAddResultJobLimit; } } return AH_JobQueueAddResultOk; } AH_JOBQUEUE_ADDRESULT _checkSigners(AH_JOBQUEUE *jq, AH_JOB *jobToAdd) { if (strcasecmp(AH_Job_GetName(jobToAdd), "JobTan")!=0) { if (!_list2HasAllEntriesOfList1(AH_Job_GetSigners(jobToAdd), AH_JobQueue_GetSigners(jq)) || !_list2HasAllEntriesOfList1(AH_JobQueue_GetSigners(jq), AH_Job_GetSigners(jobToAdd))) { DBG_INFO(AQHBCI_LOGDOMAIN, "Signers of the job differ from those of the queue"); return AH_JobQueueAddResultJobLimit; } } return AH_JobQueueAddResultOk; } int _list2HasAllEntriesOfList1(const GWEN_STRINGLIST *stringList1, const GWEN_STRINGLIST *stringList2) { GWEN_STRINGLISTENTRY *se; se=GWEN_StringList_FirstEntry(stringList1); while (se) { if (!GWEN_StringList_HasString(stringList2, GWEN_StringListEntry_Data(se))) { DBG_INFO(AQHBCI_LOGDOMAIN, "Entry from first list is missing in 2nd list"); return 0; } se=GWEN_StringListEntry_Next(se); } /* while se */ return 1; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/joblayer/job_swift.h0000664000175000017500000000361714043610745022565 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_JOB_SWIFT_H #define AH_JOB_SWIFT_H #include "aqhbci/joblayer/job_l.h" #include /** * Return SWIFT descriptors which are supported by both the job's BPD/UPD and the XML importer. * * @return list of supported descriptiors * @param j job object * @param paramDbGroupName db group within the job params db (below @ref AH_Job_GetParams) * @param paramDbVarName db variable within the job params db (below @ref AH_Job_GetParams) * @param family document family (e.g. "camt", "pain") * @param version1 major version (as "001" in pain.001.002.03). Please don't use leading zeros here!! */ AB_SWIFT_DESCR_LIST *AH_Job_GetSwiftDescriptorsSupportedByJob(AH_JOB *j, const char *paramDbGroupName, const char *paramDbVarName, const char *family, int version1); /** * Return SWIFT descriptors which are supported by both the user and the XML importer. * * @return list of supported descriptiors * @param j job object * @param family document family (e.g. "camt", "pain") * @param version1 major version (as "001" in pain.001.002.03). Please don't use leading zeros here!! */ AB_SWIFT_DESCR_LIST *AH_Job_GetSwiftDescriptorsSupportedByUser(AH_JOB *j, const char *family, int version1); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/joblayer/result.c0000664000175000017500000000600214043610745022077 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "result_p.h" #include "aqhbci_l.h" #include #include #include GWEN_LIST_FUNCTIONS(AH_RESULT, AH_Result); AH_RESULT *AH_Result_new(int code, const char *text, const char *ref, const char *param, int isMsgResult) { AH_RESULT *r; GWEN_NEW_OBJECT(AH_RESULT, r); GWEN_LIST_INIT(AH_RESULT, r); r->code=code; if (text) r->text=strdup(text); if (ref) r->ref=strdup(ref); if (param) r->param=strdup(param); r->isMsgResult=isMsgResult; return r; } void AH_Result_free(AH_RESULT *r) { if (r) { GWEN_LIST_FINI(AH_RESULT, r); free(r->text); free(r->ref); free(r->param); GWEN_FREE_OBJECT(r); } } AH_RESULT *AH_Result_dup(const AH_RESULT *or) { AH_RESULT *r; assert(or); r=AH_Result_new(or->code, or->text, or->ref, or->param, or->isMsgResult); return r; } int AH_Result_GetCode(const AH_RESULT *r) { assert(r); return r->code; } const char *AH_Result_GetText(const AH_RESULT *r) { assert(r); return r->text; } const char *AH_Result_GetRef(const AH_RESULT *r) { assert(r); return r->ref; } const char *AH_Result_GetParam(const AH_RESULT *r) { assert(r); return r->param; } int AH_Result_IsError(const AH_RESULT *r) { assert(r); return (r->code>=9000); } int AH_Result_IsWarning(const AH_RESULT *r) { assert(r); return (r->code>=3000 && r->code<4000); } int AH_Result_IsInfo(const AH_RESULT *r) { assert(r); return (r->code>=1000 && r->code<2000); } int AH_Result_IsOk(const AH_RESULT *r) { assert(r); return (r->code<9000); } int AH_Result_IsMsgResult(const AH_RESULT *r) { assert(r); return r->isMsgResult; } void AH_Result_Dump(const AH_RESULT *r, FILE *f, unsigned int insert) { uint32_t k; for (k=0; kcode); if (r->text) { for (k=0; ktext); } if (r->ref) { for (k=0; kref); } if (r->param) { for (k=0; kparam); } } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/joblayer/jobqueue_bpd.h0000664000175000017500000000114014170115771023230 00000000000000/*************************************************************************** begin : Wed Jan 12 2022 copyright : (C) 2022 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_JOBQUEUE_BPD_H #define AH_JOBQUEUE_BPD_H #include "aqhbci/joblayer/jobqueue_l.h" void AH_JobQueue_ReadBpd(AH_JOBQUEUE *jq, GWEN_DB_NODE *dbResponses); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/joblayer/job_p.h0000664000175000017500000000421514043610745021663 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ /** @file src/plugins/backends/aqhbci/plugin/joblayer/job_p.h */ #ifndef AH_JOB_P_H #define AH_JOB_P_H #include "job_l.h" #include #include struct AH_JOB { GWEN_LIST_ELEMENT(AH_JOB); GWEN_INHERIT_ELEMENT(AH_JOB); char *name; char *code; char *description; char *responseName; int segmentVersion; int challengeClass; char *expectedSigner; char *expectedCrypter; char *usedTan; AB_USER *user; unsigned int msgNum; char *dialogId; uint32_t firstSegment; uint32_t lastSegment; GWEN_STRINGLIST *signers; GWEN_STRINGLIST *sepaDescriptors; GWEN_XMLNODE *xmlNode; GWEN_XMLNODE *msgNode; GWEN_DB_NODE *jobParams; GWEN_DB_NODE *jobArguments; GWEN_DB_NODE *jobResponses; GWEN_DB_NODE *sepaProfile; AH_JOB_STATUS status; uint32_t flags; int minSigs; int secProfile; int secClass; int jobsPerMsg; GWEN_MSGENGINE *msgEngine; uint32_t usage; AH_JOB_PROCESS_FN processFn; AH_JOB_COMMIT_FN commitFn; AH_JOB_PREPARE_FN prepareFn; AH_JOB_NEXTMSG_FN nextMsgFn; AH_JOB_ADDCHALLENGEPARAMS_FN addChallengeParamsFn; AH_JOB_GETLIMITS_FN getLimitsFn; AH_JOB_HANDLECOMMAND_FN handleCommandFn; AH_JOB_HANDLERESULTS_FN handleResultsFn; AH_RESULT_LIST *segResults; AH_RESULT_LIST *msgResults; uint32_t id; AB_MESSAGE_LIST *messages; GWEN_STRINGLIST *log; GWEN_STRINGLIST *challengeParams; int maxTransfers; int transferCount; AB_TRANSACTION_LIST *transferList; AB_TRANSACTION_COMMAND supportedCommand; AB_TRANSACTION_LIST2 *commandList; AB_PROVIDER *provider; }; static void AH_Job_SampleResults(AH_JOB *j); static AH_JOB *AH_Job__freeAll_cb(AH_JOB *j, void *userData); #endif /* AH_JOB_P_H */ aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/joblayer/jobqueue_dispatch.c0000664000175000017500000006200714663126043024267 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2022 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "jobqueue_dispatch.h" #include "jobqueue_bpd.h" #include "jobqueue_account.h" #include "aqhbci/banking/user_l.h" #include "aqbanking/i18n_l.h" #include #include /* ------------------------------------------------------------------------------------------------ * forward declarations * ------------------------------------------------------------------------------------------------ */ static void _scanAllResultSegments(AH_JOBQUEUE *jq, GWEN_DB_NODE *db, uint32_t guiid); static GWEN_DB_NODE *_sampleSecuritySegments(AH_JOBQUEUE *jq, AH_MSG *msg, GWEN_DB_NODE *db); static void _removeAttachPoints(const AH_JOBQUEUE *jq); static void _setUsedTanStatusInJobs(const AH_JOBQUEUE *jq); static void _adjustSystemTanStatus(AH_JOBQUEUE *jq, uint32_t guiid); static AH_JOB *_findReferencedJob(AH_JOBQUEUE *jq, int refMsgNum, int refSegNum); static void _possiblyExtractJobAckCode(AH_JOB *j, GWEN_DB_NODE *dbSegment); static void _possiblyExtractAttachPoint(AH_JOB *j, GWEN_DB_NODE *dbSegment); static void _handleSegmentResultForAllJobs(AH_JOBQUEUE *jq, GWEN_DB_NODE *dbSegment); static void _handleSegmentResult(AH_JOBQUEUE *jq, AH_JOB *j, GWEN_DB_NODE *dbSegment); static void _addResponseToAllJobs(AH_JOBQUEUE *jq, GWEN_DB_NODE *dbPreparedJobResponse); static void _handleResponseSegments(AH_JOBQUEUE *jq, AH_MSG *msg, GWEN_DB_NODE *db, GWEN_DB_NODE *dbSecurity); static GWEN_DB_NODE *_sampleResponseSegments(AH_JOBQUEUE *jq, AH_MSG *msg, GWEN_DB_NODE *db, GWEN_DB_NODE *dbSecurity); static void _dispatchResponsesToJobQueue(AH_JOBQUEUE *jq, GWEN_DB_NODE *dbResponses, int anyMsg); static void _logResultSegment(int rcode, const char *p, int isMsgResult, GWEN_LOGGER_LEVEL level, uint32_t guiid); static void _scanSingleResultSegment(AH_JOBQUEUE *jq, GWEN_DB_NODE *dbResult, int isMsgResult, uint32_t guiid); static void _checkErrorResultSegment(AH_JOBQUEUE *jq, GWEN_DB_NODE *dbResult, int isMsgResult, uint32_t guiid); static void _checkWarningResultSegment(AH_JOBQUEUE *jq, GWEN_DB_NODE *dbResult, int isMsgResult, uint32_t guiid); static void _handleResult_3920(AH_JOBQUEUE *jq, GWEN_DB_NODE *dbResult); static void _handleResult_3072(AH_JOBQUEUE *jq, GWEN_DB_NODE *dbResult, uint32_t guiid); /* ------------------------------------------------------------------------------------------------ * implementations * ------------------------------------------------------------------------------------------------ */ int AH_JobQueue_DispatchMessage(AH_JOBQUEUE *jq, AH_MSG *msg, GWEN_DB_NODE *db) { GWEN_DB_NODE *dbSecurity; AH_DIALOG *dlg; uint32_t guiid; uint32_t jobQueueFlags; assert(jq); assert(msg); assert(db); dlg=AH_Msg_GetDialog(msg); assert(dlg); guiid=0; _removeAttachPoints(jq); _scanAllResultSegments(jq, db, guiid); dbSecurity=_sampleSecuritySegments(jq, msg, db); _handleResponseSegments(jq, msg, db, dbSecurity); GWEN_DB_Group_free(dbSecurity); _setUsedTanStatusInJobs(jq); _adjustSystemTanStatus(jq, guiid); jobQueueFlags=AH_JobQueue_GetFlags(jq); if (jobQueueFlags & (AH_JOBQUEUE_FLAGS_ACCESS_PROBLEM | AH_JOBQUEUE_FLAGS_DIALOG_ABORTED)) { DBG_NOTICE(AQHBCI_LOGDOMAIN, "Dialog logically aborted by peer"); return GWEN_ERROR_ABORTED; } if (jobQueueFlags & AH_JOBQUEUE_FLAGS_BAD_PIN) { DBG_NOTICE(AQHBCI_LOGDOMAIN, "Bad PIN reported by peer"); if (AH_JobQueue_GetUsedPin(jq)) { GWEN_Gui_ProgressLog(guiid, GWEN_LoggerLevel_Info, I18N("Peer reported bad PIN")); AH_User_SetPinStatus(AH_JobQueue_GetUser(jq), AH_JobQueue_GetUsedPin(jq), GWEN_Gui_PasswordStatus_Bad); } return GWEN_ERROR_ABORTED; } if (!(jobQueueFlags & AH_JOBQUEUE_FLAGS_BAD_PIN)) { if (AH_JobQueue_GetUsedPin(jq)) { DBG_INFO(AQHBCI_LOGDOMAIN, "Dialog not aborted, assuming correct PIN"); GWEN_Gui_ProgressLog(guiid, GWEN_LoggerLevel_Info, I18N("Dialog not aborted, assuming PIN is ok")); AH_User_SetPinStatus(AH_JobQueue_GetUser(jq), AH_JobQueue_GetUsedPin(jq), GWEN_Gui_PasswordStatus_Ok); } } return 0; } void _scanAllResultSegments(AH_JOBQUEUE *jq, GWEN_DB_NODE *db, uint32_t guiid) { GWEN_DB_NODE *dbCurr; dbCurr=GWEN_DB_GetFirstGroup(db); while (dbCurr) { if (strcasecmp(GWEN_DB_GroupName(dbCurr), "SegResult")==0 || strcasecmp(GWEN_DB_GroupName(dbCurr), "MsgResult")==0) { int isMsgResult; GWEN_DB_NODE *dbResult; DBG_NOTICE(AQHBCI_LOGDOMAIN, "Found a result"); isMsgResult=(strcasecmp(GWEN_DB_GroupName(dbCurr), "MsgResult")==0); dbResult=GWEN_DB_FindFirstGroup(dbCurr, "result"); while (dbResult) { _scanSingleResultSegment(jq, dbResult, isMsgResult, guiid); dbResult=GWEN_DB_FindNextGroup(dbResult, "result"); } /* while results */ } dbCurr=GWEN_DB_GetNextGroup(dbCurr); } } void _scanSingleResultSegment(AH_JOBQUEUE *jq, GWEN_DB_NODE *dbResult, int isMsgResult, uint32_t guiid) { int rcode; rcode=GWEN_DB_GetIntValue(dbResult, "resultcode", 0, 0); if (rcode>=9000 && rcode<10000) _checkErrorResultSegment(jq, dbResult, isMsgResult, guiid); else if (rcode>=3000 && rcode<4000) _checkWarningResultSegment(jq, dbResult, isMsgResult, guiid); else { const char *p; p=GWEN_DB_GetCharValue(dbResult, "text", 0, ""); DBG_INFO(AQHBCI_LOGDOMAIN, "Segment result: Ok (%d: %s)", rcode, p); _logResultSegment(rcode, p, isMsgResult, GWEN_LoggerLevel_Notice, guiid); } } void _checkErrorResultSegment(AH_JOBQUEUE *jq, GWEN_DB_NODE *dbResult, int isMsgResult, uint32_t guiid) { int rcode; const char *p; rcode=GWEN_DB_GetIntValue(dbResult, "resultcode", 0, 0); p=GWEN_DB_GetCharValue(dbResult, "text", 0, ""); DBG_INFO(AQHBCI_LOGDOMAIN, "Result: Error (%d: %s)", rcode, p); _logResultSegment(rcode, p, isMsgResult, GWEN_LoggerLevel_Error, guiid), AH_JobQueue_AddFlags(jq, AH_JOBQUEUE_FLAGS_HASERRORS); if (isMsgResult) { if (rcode==9800) AH_JobQueue_AddFlags(jq, AH_JOBQUEUE_FLAGS_DIALOG_ABORTED); else if (rcode>9300 && rcode<9400) AH_JobQueue_AddFlags(jq, AH_JOBQUEUE_FLAGS_ACCESS_PROBLEM); } /* check for bad pins here */ if (rcode==9340 || rcode==9942) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Bad PIN flagged: %d", rcode); AH_JobQueue_AddFlags(jq, AH_JOBQUEUE_FLAGS_BAD_PIN | AH_JOBQUEUE_FLAGS_DIALOG_ABORTED); if (AH_JobQueue_GetUsedPin(jq)) { AB_USER *user; user=AH_JobQueue_GetUser(jq); GWEN_Gui_ProgressLog(guiid, GWEN_LoggerLevel_Error, I18N("PIN invalid according to server")); AH_User_SetPinStatus(user, AH_JobQueue_GetUsedPin(jq), GWEN_Gui_PasswordStatus_Bad); } } } void _checkWarningResultSegment(AH_JOBQUEUE *jq, GWEN_DB_NODE *dbResult, int isMsgResult, uint32_t guiid) { int rcode; const char *p; rcode=GWEN_DB_GetIntValue(dbResult, "resultcode", 0, 0); p=GWEN_DB_GetCharValue(dbResult, "text", 0, ""); DBG_INFO(AQHBCI_LOGDOMAIN, "Result: Warning (%d: %s)", rcode, p); _logResultSegment(rcode, p, isMsgResult, GWEN_LoggerLevel_Warning, guiid); AH_JobQueue_AddFlags(jq, AH_JOBQUEUE_FLAGS_HASWARNINGS); if (rcode==3910) AH_JobQueue_AddFlags(jq, AH_JOBQUEUE_FLAGS_RECYCLE_TAN); else if (rcode==3920) _handleResult_3920(jq, dbResult); else if (rcode==3072) _handleResult_3072(jq, dbResult, guiid); /* extract new user/customer id */ } void _handleResult_3920(AH_JOBQUEUE *jq, GWEN_DB_NODE *dbResult) { int i; AB_USER *user; user=AH_JobQueue_GetUser(jq); AH_User_ClearTanMethodList(user); for (i=0; ; i++) { int j; j=GWEN_DB_GetIntValue(dbResult, "param", i, 0); if (j==0) break; AH_User_AddTanMethod(user, j); } /* for */ if (i==0) /* add single step if empty list */ AH_User_AddTanMethod(user, 999); } void _handleResult_3072(AH_JOBQUEUE *jq, GWEN_DB_NODE *dbResult, uint32_t guiid) { const char *sUserId; sUserId=GWEN_DB_GetCharValue(dbResult, "param", 0, NULL); if (sUserId && *sUserId) { const char *sCustomerId; AB_USER *user; sCustomerId=GWEN_DB_GetCharValue(dbResult, "param", 1, NULL); if (!(sCustomerId && *sCustomerId)) sCustomerId=sUserId; DBG_WARN(AQHBCI_LOGDOMAIN, "USERID/CUSTOMERID changed by bank"); GWEN_Gui_ProgressLog(guiid, GWEN_LoggerLevel_Warning, "USERID/CUSTOMERID changed by bank"); user=AH_JobQueue_GetUser(jq); AB_User_SetUserId(user, sUserId); AB_User_SetCustomerId(user, sCustomerId); } } void _logResultSegment(int rcode, const char *p, int isMsgResult, GWEN_LOGGER_LEVEL level, uint32_t guiid) { GWEN_BUFFER *logmsg; logmsg=GWEN_Buffer_new(0, 256, 0, 1); if (p) GWEN_Buffer_AppendArgs(logmsg, "HBCI: %04d - %s (%s)", rcode, p, isMsgResult?"M":"S"); else GWEN_Buffer_AppendArgs(logmsg, "HBCI: %04d - (no text) (%s)", rcode, isMsgResult?"M":"S"); GWEN_Gui_ProgressLog(guiid, level, GWEN_Buffer_GetStart(logmsg)); GWEN_Buffer_free(logmsg); } GWEN_DB_NODE *_sampleSecuritySegments(AH_JOBQUEUE *jq, AH_MSG *msg, GWEN_DB_NODE *db) { AH_DIALOG *dlg; const GWEN_STRINGLIST *msgSignerList; GWEN_DB_NODE *dbSecurity; const char *p; dlg=AH_Msg_GetDialog(msg); /* prepare security group */ dbSecurity=GWEN_DB_Group_new("security"); p=AH_Dialog_GetDialogId(dlg); assert(p); GWEN_DB_SetIntValue(dbSecurity, GWEN_DB_FLAGS_DEFAULT, "msgnum", AH_Msg_GetMsgNum(msg)); GWEN_DB_SetCharValue(dbSecurity, GWEN_DB_FLAGS_DEFAULT, "dialogId", p); /* get all signers */ msgSignerList=AH_Msg_GetSignerIdList(msg); if (msgSignerList) { GWEN_STRINGLISTENTRY *se; se=GWEN_StringList_FirstEntry(AH_Msg_GetSignerIdList(msg)); while (se) { const char *p; p=GWEN_StringListEntry_Data(se); DBG_DEBUG(AQHBCI_LOGDOMAIN, "Adding signer \"%s\"", p); GWEN_DB_SetCharValue(dbSecurity, GWEN_DB_FLAGS_DEFAULT, "signer", p); se=GWEN_StringListEntry_Next(se); } /* while */ } /* set crypter */ p=AH_Msg_GetCrypterId(msg); if (p) { DBG_DEBUG(AQHBCI_LOGDOMAIN, "Storing crypter \"%s\"", p); GWEN_DB_SetCharValue(dbSecurity, GWEN_DB_FLAGS_DEFAULT, "crypter", p); } return dbSecurity; } void _removeAttachPoints(const AH_JOBQUEUE *jq) { AH_JOB *j; /* remove attach points of all jobs */ j=AH_JobQueue_GetFirstJob(jq); while (j) { AH_JOB_STATUS st; st=AH_Job_GetStatus(j); if (st==AH_JobStatusSent) { if (AH_Job_GetFlags(j) & AH_JOB_FLAGS_ATTACHABLE) { GWEN_DB_NODE *args; AH_Job_SubFlags(j, AH_JOB_FLAGS_HASATTACHPOINT); /* remove the attach point */ args=AH_Job_GetArguments(j); if (GWEN_DB_DeleteVar(args, "attach")) { DBG_DEBUG(AQHBCI_LOGDOMAIN, "Attach point removed"); } } /* if job is attachable */ } /* if status matches */ j=AH_Job_List_Next(j); } /* while */ } void _setUsedTanStatusInJobs(const AH_JOBQUEUE *jq) { AH_JOB *j; /* set usedTan status accordingly */ j=AH_JobQueue_GetFirstJob(jq); while (j) { const char *usedTan; usedTan=AH_Job_GetUsedTan(j); if (usedTan) { AH_JOB_STATUS st; AH_Job_AddFlags(j, AH_JOB_FLAGS_TANUSED); st=AH_Job_GetStatus(j); if (st==AH_JobStatusSent || st==AH_JobStatusAnswered) { if (AH_JobQueue_GetFlags(jq) & AH_JOBQUEUE_FLAGS_RECYCLE_TAN) AH_Job_SubFlags(j, AH_JOB_FLAGS_TANUSED); } } else { DBG_INFO(AQHBCI_LOGDOMAIN, "No TAN in job [%s]", AH_Job_GetName(j)); } j=AH_Job_List_Next(j); } /* while */ } void _adjustSystemTanStatus(AH_JOBQUEUE *jq, uint32_t guiid) { AH_JOB *j; assert(jq); j=AH_JobQueue_GetFirstJob(jq); while (j) { const char *tan; AB_USER *user; user=AH_Job_GetUser(j); assert(user); tan=AH_Job_GetUsedTan(j); if (tan) { int rv; if (AH_Job_GetFlags(j) & AH_JOB_FLAGS_TANUSED) { char tbuf[256]; DBG_INFO(AQHBCI_LOGDOMAIN, "TAN \"%s\" used", tan); snprintf(tbuf, sizeof(tbuf)-1, I18N("TAN \"%s\" has been used, please strike it out."), tan); tbuf[sizeof(tbuf)-1]=0; GWEN_Gui_ProgressLog(guiid, GWEN_LoggerLevel_Notice, tbuf); rv=AH_User_SetTanStatus(user, NULL, tan, GWEN_Gui_PasswordStatus_Used); } else { DBG_INFO(AQHBCI_LOGDOMAIN, "TAN not used"); rv=AH_User_SetTanStatus(user, NULL, tan, GWEN_Gui_PasswordStatus_Unused); } if (rv) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Error adjusting TAN status (%d), ignoring", rv); /*return rv;*/ } } /* if tan */ j=AH_Job_List_Next(j); } } AH_JOB *_findReferencedJob(AH_JOBQUEUE *jq, int refMsgNum, int refSegNum) { AH_JOB *j; j=AH_JobQueue_GetFirstJob(jq); while (j) { AH_JOB_STATUS jobStatus; const char *jobName; jobName=AH_Job_GetName(j); jobStatus=AH_Job_GetStatus(j); if (jobStatus==AH_JobStatusSent || jobStatus==AH_JobStatusAnswered) { DBG_INFO(AQHBCI_LOGDOMAIN, "Checking whether job \"%s\" has segment %d", jobName, refSegNum); if ((refMsgNum==0 || AH_Job_GetMsgNum(j)==refMsgNum) && AH_Job_HasSegment(j, refSegNum)) { DBG_INFO(AQHBCI_LOGDOMAIN, "Job \"%s\" claims to have the segment %d for msg %d", jobName, refSegNum, refMsgNum); return j; } } else { DBG_INFO(AQHBCI_LOGDOMAIN, "Skipping job \"%s\" because of status \"%s\" (%d)", jobName, AH_Job_StatusName(jobStatus), jobStatus); } j=AH_Job_List_Next(j); } /* while j */ return NULL; } void _possiblyExtractJobAckCode(AH_JOB *j, GWEN_DB_NODE *dbSegment) { if (AH_Job_GetFlags(j) & AH_JOB_FLAGS_ACKNOWLEDGE) { const char *responseName; responseName=AH_Job_GetResponseName(j); if (strcasecmp(GWEN_DB_GroupName(dbSegment), responseName)==0) { unsigned int byteSize = 0; const void *ackCode; ackCode = GWEN_DB_GetBinValue(dbSegment, "ackCode", 0, NULL, 0, &byteSize); if (ackCode) { GWEN_DB_NODE *args; args=AH_Job_GetArguments(j); GWEN_DB_SetBinValue(args, GWEN_DB_FLAGS_OVERWRITE_VARS, "_tmpAckCode", ackCode, byteSize); DBG_INFO(AQHBCI_LOGDOMAIN, "Found acknowledge code in job response, storing it."); AB_Banking_LogMsgForJobId(AH_Job_GetBankingApi(j), AH_Job_GetId(j), "Job has acknowledge code"); } } } else { DBG_INFO(AQHBCI_LOGDOMAIN, "Job \"%s\" has no ACKNOWLEDGE flag", AH_Job_GetName(j)); AB_Banking_LogMsgForJobId(AH_Job_GetBankingApi(j), AH_Job_GetId(j), "Job has no ACKNOWLEDGE flag, ignoring"); } } void _possiblyExtractAttachPoint(AH_JOB *j, GWEN_DB_NODE *dbSegment) { if (AH_Job_GetFlags(j) & AH_JOB_FLAGS_ATTACHABLE) { /* job is attachable, check whether this is segment result */ if (strcasecmp(GWEN_DB_GroupName(dbSegment), "SegResult")==0) { GWEN_DB_NODE *dbResult; dbResult=GWEN_DB_FindFirstGroup(dbSegment, "result"); while (dbResult) { int rcode; rcode=GWEN_DB_GetIntValue(dbResult, "resultcode", 0, 0); /* it is a segment result, does it contain an attach point ? */ if (rcode==3040) { const char *p; /* it should... */ p=GWEN_DB_GetCharValue(dbResult, "param", 0, 0); if (!p) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Segment result 3040 without attachpoint"); } else { GWEN_DB_NODE *args; /* store the attach point */ DBG_INFO(AQHBCI_LOGDOMAIN, "Storing attach point"); args=AH_Job_GetArguments(j); GWEN_DB_SetCharValue(args, GWEN_DB_FLAGS_OVERWRITE_VARS, "attach", p); AH_Job_AddFlags(j, AH_JOB_FLAGS_HASATTACHPOINT); AB_Banking_LogMsgForJobId(AH_Job_GetBankingApi(j), AH_Job_GetId(j), "Job has attach point \"%s\"", p); } } /* if code 3040 (means "more data available") */ dbResult=GWEN_DB_FindNextGroup(dbResult, "result"); } /* while */ } /* if segresult */ } /* if attachable */ else { DBG_INFO(AQHBCI_LOGDOMAIN, "Job \"%s\" not attachable", AH_Job_GetName(j)); AB_Banking_LogMsgForJobId(AH_Job_GetBankingApi(j), AH_Job_GetId(j), "Job not attachable, ignoring"); } } void _handleSegmentResultForAllJobs(AH_JOBQUEUE *jq, GWEN_DB_NODE *dbSegment) { AH_JOB *j; j=AH_JobQueue_GetFirstJob(jq); while (j) { _handleSegmentResult(jq, j, dbSegment); j=AH_Job_List_Next(j); } /* while j */ } void _handleSegmentResult(AH_JOBQUEUE *jq, AH_JOB *j, GWEN_DB_NODE *dbSegment) { if (strcasecmp(GWEN_DB_GroupName(dbSegment), "SegResult")==0) { GWEN_DB_NODE *dbResult; dbResult=GWEN_DB_FindFirstGroup(dbSegment, "result"); if (dbResult==NULL) { DBG_INFO(AQHBCI_LOGDOMAIN, "Segment result has no \"result\" group"); } else { while (dbResult) { int rcode; const char *rtext; rcode=GWEN_DB_GetIntValue(dbResult, "resultcode", 0, 0); rtext=GWEN_DB_GetCharValue(dbResult, "text", 0, ""); if (rcode>=9000 && rcode<10000) { DBG_INFO(AQHBCI_LOGDOMAIN, "Segment result: Error (%d: %s)", rcode, rtext); if (!(AH_Job_GetFlags(j) & AH_JOB_FLAGS_IGNORE_ERROR)) { AH_Job_AddFlags(j, AH_JOB_FLAGS_HASERRORS); AH_JobQueue_AddFlags(jq, AH_JOBQUEUE_FLAGS_HASERRORS); } } else if (rcode>=3000 && rcode<4000) { DBG_INFO(AQHBCI_LOGDOMAIN, "Segment result: Warning (%d: %s)", rcode, rtext); if (!(AH_Job_GetFlags(j) & AH_JOB_FLAGS_IGNORE_ERROR)) { AH_Job_AddFlags(j, AH_JOB_FLAGS_HASWARNINGS); AH_JobQueue_AddFlags(jq, AH_JOBQUEUE_FLAGS_HASWARNINGS); } } else { DBG_INFO(AQHBCI_LOGDOMAIN, "Segment result: Ok (%d: %s)", rcode, rtext); } dbResult=GWEN_DB_FindNextGroup(dbResult, "result"); } /* while */ } /* if dbResult */ } /* if SegResult */ } void _addResponseToAllJobs(AH_JOBQUEUE *jq, GWEN_DB_NODE *dbPreparedJobResponse) { AH_JOB *j; j=AH_JobQueue_GetFirstJob(jq); while (j) { AH_JOB_STATUS jobStatus; jobStatus=AH_Job_GetStatus(j); if (jobStatus==AH_JobStatusSent || jobStatus==AH_JobStatusAnswered) AH_Job_AddResponse(j, GWEN_DB_Group_dup(dbPreparedJobResponse)); else { DBG_ERROR(AQHBCI_LOGDOMAIN, "Status %d of job doesn't match", jobStatus); } j=AH_Job_List_Next(j); } /* while */ } GWEN_DB_NODE *_sampleResponseSegments(AH_JOBQUEUE *jq, AH_MSG *msg, GWEN_DB_NODE *db, GWEN_DB_NODE *dbSecurity) { GWEN_DB_NODE *dbAllResponses; GWEN_DB_NODE *dbCurr; int responsesAdded=0; DBG_INFO(AQHBCI_LOGDOMAIN, "Handling responses for message %d (received message num is %d)", AH_Msg_GetMsgRef(msg), AH_Msg_GetMsgNum(msg)); dbAllResponses=GWEN_DB_Group_new("responses"); dbCurr=GWEN_DB_GetFirstGroup(db); while (dbCurr) { GWEN_DB_NODE *dbPreparedJobResponse; GWEN_DB_NODE *dbData; int refSegNum; int segNum; refSegNum=GWEN_DB_GetIntValue(dbCurr, "head/ref", 0, 0); segNum=GWEN_DB_GetIntValue(dbCurr, "head/seq", 0, 0); DBG_INFO(AQHBCI_LOGDOMAIN, "Checking response \"%s\" (seg num %d, ref seg num %d)", GWEN_DB_GroupName(dbCurr), segNum, refSegNum); /* use same name for main response group */ dbPreparedJobResponse=GWEN_DB_Group_new(GWEN_DB_GroupName(dbCurr)); GWEN_DB_SetIntValue(dbPreparedJobResponse, GWEN_DB_FLAGS_DEFAULT, "refSegNum", refSegNum); GWEN_DB_SetIntValue(dbPreparedJobResponse, GWEN_DB_FLAGS_DEFAULT, "refMsgNum", AH_Msg_GetMsgRef(msg)); /* add security group */ GWEN_DB_AddGroup(dbPreparedJobResponse, GWEN_DB_Group_dup(dbSecurity)); /* create data group */ dbData=GWEN_DB_GetGroup(dbPreparedJobResponse, GWEN_DB_FLAGS_DEFAULT, "data"); assert(dbData); /* store copy of original response there */ GWEN_DB_AddGroup(dbData, GWEN_DB_Group_dup(dbCurr)); GWEN_DB_AddGroup(dbAllResponses, dbPreparedJobResponse); responsesAdded++; dbCurr=GWEN_DB_GetNextGroup(dbCurr); } /* while */ if (responsesAdded<1) { GWEN_DB_Group_free(dbAllResponses); return NULL; } return dbAllResponses; } void _dispatchResponsesToJobQueue(AH_JOBQUEUE *jq, GWEN_DB_NODE *dbResponses, int anyMsg) { GWEN_DB_NODE *dbPreparedJobResponse; DBG_DEBUG(AQHBCI_LOGDOMAIN, "Dispatching response to job queue"); dbPreparedJobResponse=GWEN_DB_GetFirstGroup(dbResponses); while (dbPreparedJobResponse) { const char *groupName; int refSegNum; int refMsgNum; GWEN_DB_NODE *dbData; GWEN_DB_NODE *dbDataSegment; if (GWEN_Logger_GetLevel(AQHBCI_LOGDOMAIN)>=GWEN_LoggerLevel_Debug) { DBG_INFO(AQHBCI_LOGDOMAIN, "Dispatching this response:"); GWEN_DB_Dump(dbPreparedJobResponse, 2); } refMsgNum=GWEN_DB_GetIntValue(dbPreparedJobResponse, "refMsgNum", 0, 0); refSegNum=GWEN_DB_GetIntValue(dbPreparedJobResponse, "refSegNum", 0, 0); groupName=GWEN_DB_GroupName(dbPreparedJobResponse); DBG_INFO(AQHBCI_LOGDOMAIN, "Checking response \"%s\" (ref seg num %d)", groupName, refSegNum); dbData=GWEN_DB_GetGroup(dbPreparedJobResponse, GWEN_DB_FLAGS_DEFAULT, "data"); assert(dbData); dbDataSegment=GWEN_DB_GetGroup(dbData, GWEN_DB_FLAGS_DEFAULT, groupName); assert(dbDataSegment); if (refSegNum) { AH_JOB *j; /* search for job to which this response belongs */ j=_findReferencedJob(jq, anyMsg?0:refMsgNum, refSegNum); if (j) { const char *refJobName; refJobName=AH_Job_GetName(j); DBG_INFO(AQHBCI_LOGDOMAIN, "Job \"%s\" (msg %d, segs :%d-%d) claims response \"%s\" (ref msg %d, ref seg %d)", refJobName, AH_Job_GetMsgNum(j), AH_Job_GetFirstSegment(j), AH_Job_GetLastSegment(j), groupName, refMsgNum, refSegNum); if (!(strcasecmp(refJobName, "JobTan")==0 && strcasecmp(groupName, "TanResponse")!=0 && strcasecmp(groupName, "SegResult")!=0)) { _possiblyExtractJobAckCode(j, dbDataSegment); _possiblyExtractAttachPoint(j, dbDataSegment); /* check for segment results */ if (strcasecmp(groupName, "SegResult")==0) _handleSegmentResult(jq, j, dbDataSegment); DBG_INFO(AQHBCI_LOGDOMAIN, "Adding response \"%s\" to job \"%s\"", groupName, AH_Job_GetName(j)); AH_Job_AddResponse(j, GWEN_DB_Group_dup(dbPreparedJobResponse)); AH_Job_SetStatus(j, AH_JobStatusAnswered); } else { DBG_NOTICE(AQHBCI_LOGDOMAIN, "Not adding response \"%s\" to job \"%s\" (neither TanResponse nor SegResult)", groupName, refJobName); } } /* if matching job found */ else { DBG_WARN(AQHBCI_LOGDOMAIN, "No job found for response \"%s\"", groupName); if (strcasecmp(groupName, "SegResult")==0) { DBG_WARN(AQHBCI_LOGDOMAIN, "Adding response \"%s\" to all jobs", groupName); _handleSegmentResultForAllJobs(jq, dbDataSegment); _addResponseToAllJobs(jq, dbPreparedJobResponse); } } } /* if refSegNum */ else { /* no reference segment number, add response to all jobs */ DBG_DEBUG(AQHBCI_LOGDOMAIN, "No segment reference number, adding response \"%s\" to all jobs", groupName); if (strcasecmp(groupName, "SegResult")==0) _handleSegmentResultForAllJobs(jq, dbData); else if (strcasecmp(groupName, "MsgResult")==0) _addResponseToAllJobs(jq, dbPreparedJobResponse); } dbPreparedJobResponse=GWEN_DB_GetNextGroup(dbPreparedJobResponse); } /* while */ } void _handleResponseSegments(AH_JOBQUEUE *jq, AH_MSG *msg, GWEN_DB_NODE *db, GWEN_DB_NODE *dbSecurity) { GWEN_DB_NODE *dbAllResponses; dbAllResponses=_sampleResponseSegments(jq, msg, db, dbSecurity); if (dbAllResponses) { AH_JOBQUEUE *jqRun; int queueNum=0; /* first extract all interesting data */ AH_JobQueue_ReadBpd(jq, dbAllResponses); if (AH_JobQueue_GetFlags(jq) & AH_JOBQUEUE_FLAGS_IGNOREACCOUNTS) { DBG_INFO(AQHBCI_LOGDOMAIN, "Ignoring possibly received accounts"); } else AH_JobQueue_ReadAccounts(jq, dbAllResponses); jqRun=jq; while (jqRun) { DBG_INFO(AQHBCI_LOGDOMAIN, "Dispatching responses to queue %d", queueNum); if (GWEN_Logger_GetLevel(AQHBCI_LOGDOMAIN)>=GWEN_LoggerLevel_Info) AH_JobQueue_DumpJobList(jqRun, stderr, 2); /* then dispatch to jobs in this and in reference queue */ _dispatchResponsesToJobQueue(jqRun, dbAllResponses, (queueNum>0)?1:0); queueNum++; jqRun=AH_JobQueue_GetReferenceQueue(jqRun); if (jqRun) { DBG_INFO(AQHBCI_LOGDOMAIN, "Queue %d has a reference queue", queueNum); } else { DBG_INFO(AQHBCI_LOGDOMAIN, "Queue %d has no reference queue", queueNum); } } GWEN_DB_Group_free(dbAllResponses); } } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/joblayer/job_commit_key.c0000664000175000017500000001613214043610745023560 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "job_commit_key.h" #include "aqhbci/banking/user_l.h" #include "aqhbci/banking/account_l.h" #include "aqbanking/i18n_l.h" #include #include /* ------------------------------------------------------------------------------------------------ * forward declarations * ------------------------------------------------------------------------------------------------ */ static int _verifiyInitialKey(AB_USER *user, AH_HBCI *h, GWEN_CRYPT_KEY *key, uint16_t sentModl, const char *keyName); /* ------------------------------------------------------------------------------------------------ * implementations * ------------------------------------------------------------------------------------------------ */ void AH_Job_Commit_Key(AH_JOB *j, GWEN_DB_NODE *dbRd) { const char *keytype; AH_HBCI *hbci; AB_USER *user; user=AH_Job_GetUser(j); hbci=AH_Job_GetHbci(j); keytype=GWEN_DB_GetCharValue(dbRd, "keyname/keytype", 0, NULL); if (keytype && *keytype) { GWEN_CRYPT_KEY *bpk; uint8_t *expp, *modp; unsigned int expl, modl; int keynum, keyver; uint16_t sentModulusLength; uint16_t nbits; int keySize; int verified=0; GWEN_CRYPT_KEY *bpsk; /* process received keys */ keynum=GWEN_DB_GetIntValue(dbRd, "keyname/keynum", 0, -1); keyver=GWEN_DB_GetIntValue(dbRd, "keyname/keyversion", 0, -1); modp=(uint8_t *)GWEN_DB_GetBinValue(dbRd, "key/modulus", 0, NULL, 0, &modl); sentModulusLength=modl; DBG_DEBUG(AQHBCI_LOGDOMAIN, "Got Key with modulus length %d.", modl); /* skip zero bytes if any */ while (modl && *modp==0) { modp++; modl--; } /* calc real length in bits for information purposes */ nbits=modl*8; if (modl) { uint8_t b=*modp; int i; uint8_t mask=0x80; for (i=0; i<8; i++) { if (b & mask) break; nbits--; mask>>=1; } } /* calculate key size in bytes */ if (modl<=96) /* could only be for RDH1, in this case we have to pad to 768 bits */ keySize=96; else { keySize=modl; } DBG_INFO(AQHBCI_LOGDOMAIN, "Key has real modulus length %d bytes (%d bits) after skipping leading zero bits.", modl, nbits); expp=(uint8_t *)GWEN_DB_GetBinValue(dbRd, "key/exponent", 0, NULL, 0, &expl); bpk=GWEN_Crypt_KeyRsa_fromModExp(keySize, modp, modl, expp, expl); GWEN_Crypt_Key_SetKeyNumber(bpk, keynum); GWEN_Crypt_Key_SetKeyVersion(bpk, keyver); /* check if it was already verified and saved at the signature verification stage * (this is implemented for RDH7 and RDH9 only at the moment) */ bpsk=AH_User_GetBankPubSignKey(user); if (bpsk) { int hasVerifiedFlag = GWEN_Crypt_KeyRsa_GetFlags(bpsk) & GWEN_CRYPT_KEYRSA_FLAGS_ISVERIFIED ; if (hasVerifiedFlag == GWEN_CRYPT_KEYRSA_FLAGS_ISVERIFIED) verified=1; } /* commit the new key */ if (strcasecmp(keytype, "S")==0) { if (verified == 0) { verified=_verifiyInitialKey(user, hbci, bpk, sentModulusLength, "sign"); } if (verified == 1) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Imported sign key."); GWEN_Crypt_KeyRsa_AddFlags(bpk, GWEN_CRYPT_KEYRSA_FLAGS_ISVERIFIED); AH_User_SetBankPubSignKey(user, bpk); } else { DBG_ERROR(AQHBCI_LOGDOMAIN, "Crypt key not imported."); } } else if (strcasecmp(keytype, "V")==0) { if (verified == 0) { verified = _verifiyInitialKey(user, hbci, bpk, sentModulusLength, "crypt"); } if (verified == 1) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Imported crypt key."); GWEN_Crypt_KeyRsa_AddFlags(bpk, GWEN_CRYPT_KEYRSA_FLAGS_ISVERIFIED); AH_User_SetBankPubCryptKey(user, bpk); } else { DBG_ERROR(AQHBCI_LOGDOMAIN, "Crypt key not imported."); } } else { char hashString[1024]; int expPadBytes=keySize-expl; uint8_t *mdPtr; unsigned int mdSize; /* pad exponent to length of modulus */ GWEN_BUFFER *keyBuffer; GWEN_MDIGEST *md; uint16_t i; keyBuffer=GWEN_Buffer_new(NULL, 2*keySize, 0, 0); GWEN_Buffer_FillWithBytes(keyBuffer, 0x0, expPadBytes); GWEN_Buffer_AppendBytes(keyBuffer, (const char *)expp, expl); GWEN_Buffer_AppendBytes(keyBuffer, (const char *)modp, keySize); /*SHA256*/ md=GWEN_MDigest_Sha256_new(); GWEN_MDigest_Begin(md); GWEN_MDigest_Update(md, (uint8_t *)GWEN_Buffer_GetStart(keyBuffer), 2*keySize); GWEN_MDigest_End(md); mdPtr=GWEN_MDigest_GetDigestPtr(md); mdSize=GWEN_MDigest_GetDigestSize(md); memset(hashString, 0, 1024); for (i=0; i #endif #include "job_commit.h" #include "job_commit_key.h" #include "aqhbci/banking/user_l.h" #include "aqhbci/banking/account_l.h" #include "aqbanking/i18n_l.h" #include #include /* ------------------------------------------------------------------------------------------------ * forward declarations * ------------------------------------------------------------------------------------------------ */ static int _commitSystemData(AH_JOB *j, int doLock); static void _readSomeKnownSegments(AH_JOB *j, GWEN_DB_NODE *dbResponses); static void _readSegmentResult(AH_JOB *j, GWEN_DB_NODE *dbRd); static void _readTanMethodsFromResult(AB_USER *user, GWEN_DB_NODE *dbRes); static void _readSecurityProfile(AH_JOB *j, GWEN_DB_NODE *dbRd); static void _readBankMessage(AH_JOB *j, GWEN_DB_NODE *dbRd); /* ------------------------------------------------------------------------------------------------ * implementations * ------------------------------------------------------------------------------------------------ */ int AH_Job_CommitSystemData(AH_JOB *j, int doLock) { AB_USER *user; AB_PROVIDER *pro; int rv, rv2; user=AH_Job_GetUser(j); pro=AH_Job_GetProvider(j); assert(pro); /* lock user */ if (doLock) { rv=AB_Provider_BeginExclUseUser(pro, user); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } } /* commit data */ rv2=_commitSystemData(j, doLock); if (doLock) { /* unlock user */ rv=AB_Provider_EndExclUseUser(pro, user, 0); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); AB_Provider_EndExclUseUser(pro, user, 1); /* abandon */ return rv; } } return rv2; } void AH_Job_ReadAccountDataSeg(AB_ACCOUNT *acc, GWEN_DB_NODE *dbAccountData) { int t; assert(acc); AB_Account_SetBankCode(acc, GWEN_DB_GetCharValue(dbAccountData, "bankCode", 0, 0)); AB_Account_SetAccountNumber(acc, GWEN_DB_GetCharValue(dbAccountData, "accountId", 0, 0)); AB_Account_SetIban(acc, GWEN_DB_GetCharValue(dbAccountData, "iban", 0, 0)); AB_Account_SetAccountName(acc, GWEN_DB_GetCharValue(dbAccountData, "account/name", 0, 0)); AB_Account_SetSubAccountId(acc, GWEN_DB_GetCharValue(dbAccountData, "accountsubid", 0, 0)); AB_Account_SetOwnerName(acc, GWEN_DB_GetCharValue(dbAccountData, "name1", 0, 0)); if (GWEN_DB_GetIntValue(dbAccountData, "head/version", 0, 1)>=4) /* KTV in version 2 available */ AH_Account_AddFlags(acc, AH_BANK_FLAGS_KTV2); else AH_Account_SubFlags(acc, AH_BANK_FLAGS_KTV2); /* account type (from FinTS_3.0_Formals) */ t=GWEN_DB_GetIntValue(dbAccountData, "type", 0, 1); if (t>=1 && t<=9) /* Kontokorrent-/Girokonto */ AB_Account_SetAccountType(acc, AB_AccountType_Bank); else if (t>=10 && t<=19) /* Sparkonto */ AB_Account_SetAccountType(acc, AB_AccountType_Savings); else if (t>=20 && t<=29) /* Festgeldkonto/Termineinlagen */ AB_Account_SetAccountType(acc, AB_AccountType_MoneyMarket); else if (t>=30 && t<=39) /* Wertpapierdepot */ AB_Account_SetAccountType(acc, AB_AccountType_Investment); else if (t>=40 && t<=49) /* Kredit-/Darlehenskonto */ AB_Account_SetAccountType(acc, AB_AccountType_Credit); else if (t>=50 && t<=59) /* Kreditkartenkonto */ AB_Account_SetAccountType(acc, AB_AccountType_CreditCard); else if (t>=60 && t<=69) /* Fonds-Depot bei einer Kapitalanlagengesellschaft */ AB_Account_SetAccountType(acc, AB_AccountType_Investment); else if (t>=70 && t<=79) /* Bausparvertrag */ AB_Account_SetAccountType(acc, AB_AccountType_Savings); else if (t>=80 && t<=89) /* Versicherungsvertrag */ AB_Account_SetAccountType(acc, AB_AccountType_Savings); else if (t>=90 && t<=99) /* sonstige */ AB_Account_SetAccountType(acc, AB_AccountType_Unspecified); else AB_Account_SetAccountType(acc, AB_AccountType_Unspecified); } int _commitSystemData(AH_JOB *j, int doLock) { DBG_NOTICE(AQHBCI_LOGDOMAIN, "Committing data"); /* GWEN_DB_Dump(j->jobResponses, 2); */ DBG_DEBUG(AQHBCI_LOGDOMAIN, "Reading segment results, bank messages etc"); _readSomeKnownSegments(j, AH_Job_GetResponses(j)); DBG_NOTICE(AQHBCI_LOGDOMAIN, "Finished."); return 0; } void _readSomeKnownSegments(AH_JOB *j, GWEN_DB_NODE *dbResponses) { AB_USER *user; GWEN_DB_NODE *dbCurr; user=AH_Job_GetUser(j); dbCurr=GWEN_DB_GetFirstGroup(dbResponses); while (dbCurr) { GWEN_DB_NODE *dbRd; dbRd=GWEN_DB_GetGroup(dbCurr, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "data"); if (dbRd) { dbRd=GWEN_DB_GetFirstGroup(dbRd); } if (dbRd) { DBG_NOTICE(AQHBCI_LOGDOMAIN, "Checking group \"%s\"", GWEN_DB_GroupName(dbRd)); if (strcasecmp(GWEN_DB_GroupName(dbRd), "SegResult")==0) { DBG_INFO(AQHBCI_LOGDOMAIN, "Reading segment result"); _readSegmentResult(j, dbRd); } else if (strcasecmp(GWEN_DB_GroupName(dbRd), "GetKeyResponse")==0) { DBG_INFO(AQHBCI_LOGDOMAIN, "Reading key response"); AH_Job_Commit_Key(j, dbRd); } else if (strcasecmp(GWEN_DB_GroupName(dbRd), "SecurityMethods")==0) { DBG_INFO(AQHBCI_LOGDOMAIN, "Reading security profiles"); _readSecurityProfile(j, dbRd); } else if (strcasecmp(GWEN_DB_GroupName(dbRd), "UserData")==0) { /* UserData found */ DBG_NOTICE(AQHBCI_LOGDOMAIN, "Found UserData"); AH_User_SetUpdVersion(user, GWEN_DB_GetIntValue(dbRd, "version", 0, 0)); } else if (strcasecmp(GWEN_DB_GroupName(dbRd), "BankMsg")==0) { DBG_INFO(AQHBCI_LOGDOMAIN, "Reading bank message"); _readBankMessage(j, dbRd); } /* if bank msg */ } /* if response data found */ dbCurr=GWEN_DB_GetNextGroup(dbCurr); } /* while */ } void _readSegmentResult(AH_JOB *j, GWEN_DB_NODE *dbRd) { AB_USER *user; GWEN_DB_NODE *dbRes; user=AH_Job_GetUser(j); dbRes=GWEN_DB_GetFirstGroup(dbRd); while (dbRes) { if (strcasecmp(GWEN_DB_GroupName(dbRes), "result")==0) { int code; const char *text; code=GWEN_DB_GetIntValue(dbRes, "resultcode", 0, 0); text=GWEN_DB_GetCharValue(dbRes, "text", 0, 0); DBG_INFO(AQHBCI_LOGDOMAIN, "Segment result: %d (%s)", code, text?text:""); if (code==3920) _readTanMethodsFromResult(user, dbRes); } /* if result */ dbRes=GWEN_DB_GetNextGroup(dbRes); } /* while */ } void _readTanMethodsFromResult(AB_USER *user, GWEN_DB_NODE *dbRes) { int i; DBG_INFO(AQHBCI_LOGDOMAIN, "Reading supported TAN methods"); AH_User_ClearTanMethodList(user); for (i=0; ; i++) { int j; j=GWEN_DB_GetIntValue(dbRes, "param", i, 0); if (j==0) break; DBG_INFO(AQHBCI_LOGDOMAIN, "Adding allowed TAN method %d", j); AH_User_AddTanMethod(user, j); } /* for */ if (i==0) { /* add single step if empty list */ DBG_INFO(AQHBCI_LOGDOMAIN, "No allowed TAN method reported, assuming 999"); AH_User_AddTanMethod(user, 999); } } void _readSecurityProfile(AH_JOB *j, GWEN_DB_NODE *dbRd) { GWEN_DB_NODE *dbT; dbT=GWEN_DB_FindFirstGroup(dbRd, "SecProfile"); while (dbT) { const char *code; int version; code=GWEN_DB_GetCharValue(dbT, "code", 0, NULL); version=GWEN_DB_GetIntValue(dbT, "version", 0, -1); if (code && (version>0)) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Bank supports mode %s %d", code, version); /* TODO: store possible modes */ } dbT=GWEN_DB_FindNextGroup(dbT, "SecProfile"); } /* while */ } void _readBankMessage(AH_JOB *j, GWEN_DB_NODE *dbRd) { AB_USER *user; AH_HBCI *hbci; AB_MESSAGE_LIST *messageList; const char *subject; const char *text; user=AH_Job_GetUser(j); hbci=AH_Job_GetHbci(j); messageList=AH_Job_GetMessages(j); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Notice, I18N("Bank message received")); subject=GWEN_DB_GetCharValue(dbRd, "subject", 0, "(Kein Betreff)"); text=GWEN_DB_GetCharValue(dbRd, "text", 0, 0); if (subject && text) { AB_MESSAGE *amsg; GWEN_TIME *ti; ti=GWEN_CurrentTime(); amsg=AB_Message_new(); AB_Message_SetSource(amsg, AB_Message_SourceBank); AB_Message_SetSubject(amsg, subject); AB_Message_SetText(amsg, text); AB_Message_SetDateReceived(amsg, ti); GWEN_Time_free(ti); AB_Message_SetUserId(amsg, AB_User_GetUniqueId(user)); AB_Message_List_Add(amsg, messageList); if (1) { GWEN_DB_NODE *dbTmp; /* save message, later this will no longer be necessary */ dbTmp=GWEN_DB_Group_new("bank message"); GWEN_DB_SetCharValue(dbTmp, GWEN_DB_FLAGS_OVERWRITE_VARS, "subject", subject); GWEN_DB_SetCharValue(dbTmp, GWEN_DB_FLAGS_OVERWRITE_VARS, "text", text); if (AH_HBCI_SaveMessage(hbci, user, dbTmp)) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not save this message:"); GWEN_DB_Dump(dbTmp, 2); } GWEN_DB_Group_free(dbTmp); } } /* if subject and text given */ } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/joblayer/job_crypt.c0000664000175000017500000002356414214726437022576 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "job_swift.h" #include "aqhbci/banking/user_l.h" #include #include #include #include int AH_Job_CheckEncryption(AH_JOB *j, GWEN_DB_NODE *dbRsp) { AB_USER *user; const char *sExpectedCrypter; assert(j); user=AH_Job_GetUser(j); assert(user); if (AH_User_GetCryptMode(user)==AH_CryptMode_Pintan) { DBG_DEBUG(AQHBCI_LOGDOMAIN, "Not checking security in PIN/TAN mode"); } else { GWEN_DB_NODE *dbSecurity; const char *s; assert(dbRsp); dbSecurity=GWEN_DB_GetGroup(dbRsp, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "security"); if (!dbSecurity) { DBG_ERROR(AQHBCI_LOGDOMAIN, "No security settings, should not happen"); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("Response without security info (internal)")); return AB_ERROR_SECURITY; } s=GWEN_DB_GetCharValue(dbSecurity, "crypter", 0, 0); if (s) { DBG_DEBUG(AQHBCI_LOGDOMAIN, "Response encrypted with key [%s]", s); if (*s=='!' || *s=='?') { DBG_ERROR(AQHBCI_LOGDOMAIN, "Encrypted with invalid key (%s)", s); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("Response encrypted with invalid key")); return AB_ERROR_SECURITY; } } sExpectedCrypter=AH_Job_GetExpectedCrypter(j); if (sExpectedCrypter) { /* check crypter */ if (!s) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Response is not encrypted (but expected to be)"); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("Response is not encrypted as expected")); return AB_ERROR_SECURITY; } if (strcasecmp(s, sExpectedCrypter)!=0) { DBG_WARN(AQHBCI_LOGDOMAIN, "Not encrypted with the expected key " "(exp: \"%s\", is: \"%s\"", sExpectedCrypter, s); /* GWEN_Gui_ProgressLog( 0, GWEN_LoggerLevel_Error, I18N("Response not encrypted with expected key")); return AB_ERROR_SECURITY; */ } } else { DBG_DEBUG(AQHBCI_LOGDOMAIN, "No specific encrypter expected"); } } return 0; } int AH_Job_CheckSignature(AH_JOB *j, GWEN_DB_NODE *dbRsp) { AB_USER *user; const char *sExpectedSigner; assert(j); user=AH_Job_GetUser(j); assert(user); if (AH_User_GetCryptMode(user)==AH_CryptMode_Pintan) { DBG_DEBUG(AQHBCI_LOGDOMAIN, "Not checking signature in PIN/TAN mode"); } else { GWEN_DB_NODE *dbSecurity; int i; uint32_t uFlags; assert(j); uFlags=AH_User_GetFlags(user); assert(dbRsp); dbSecurity=GWEN_DB_GetGroup(dbRsp, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "security"); if (!dbSecurity) { DBG_ERROR(AQHBCI_LOGDOMAIN, "No security settings, should not happen"); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("Response without security info (internal)")); return GWEN_ERROR_GENERIC; } /* check for invalid signers */ for (i=0; ; i++) { const char *s; s=GWEN_DB_GetCharValue(dbSecurity, "signer", i, 0); if (!s) break; if (*s=='!') { DBG_ERROR(AQHBCI_LOGDOMAIN, "Invalid signature found, will not tolerate it"); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("Invalid bank signature")); return AB_ERROR_SECURITY; } } /* for */ sExpectedSigner=AH_Job_GetExpectedSigner(j); if (sExpectedSigner && !(uFlags & AH_USER_FLAGS_BANK_DOESNT_SIGN)) { /* check signer */ for (i=0; ; i++) { const char *s; s=GWEN_DB_GetCharValue(dbSecurity, "signer", i, 0); if (!s) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Not signed by expected signer (%d)", i); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("Response not signed by the bank")); if (i==0) { int button; /* check whether the user want's to accept the unsigned message */ button=GWEN_Gui_MessageBox(GWEN_GUI_MSG_FLAGS_TYPE_WARN | GWEN_GUI_MSG_FLAGS_CONFIRM_B1 | GWEN_GUI_MSG_FLAGS_SEVERITY_DANGEROUS, I18N("Security Warning"), I18N("The HBCI response of the bank has not been signed by the bank, \n" "contrary to what has been expected. This can be the case because the \n" "bank just stopped signing their HBCI responses. This error message \n" "would also occur if there were a replay attack against your computer \n" "in progress right now, which is probably quite unlikely. \n" " \n" "Please contact your bank and ask them whether their HBCI server \n" "stopped signing the HBCI responses. If the bank is concerned about \n" "your security, it should not stop signing the HBCI responses. \n" " \n" "Do you nevertheless want to accept this response this time or always?" "

" "The HBCI response of the bank has not been signed by the bank, \n" "contrary to what has been expected. This can be the case because the \n" "bank just stopped signing their HBCI responses. This error message \n" "would also occur if there were a replay attack against your computer \n" "in progress right now, which is probably quite unlikely. \n" "

" "Please contact your bank and ask them whether their HBCI server \n" "stopped signing the HBCI responses. If the bank is concerned about \n" "your security, it should not stop signing the HBCI responses. \n" "

" "Do you nevertheless want to accept this response this time or always?" "

" ), I18N("Accept this time"), I18N("Accept always"), I18N("Abort"), 0); if (button==1) { GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Notice, I18N("User accepts this unsigned " "response")); AH_Job_SetExpectedSigner(j, 0); break; } else if (button==2) { GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Notice, I18N("User accepts all further unsigned " "responses")); AH_User_AddFlags(user, AH_USER_FLAGS_BANK_DOESNT_SIGN); AH_Job_SetExpectedSigner(j, NULL); break; } else { GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("Aborted")); return AB_ERROR_SECURITY; } } else { int ii; DBG_ERROR(AQHBCI_LOGDOMAIN, "Job signed with unexpected key(s)" "(was expecting \"%s\"):", sExpectedSigner); for (ii=0; ; ii++) { s=GWEN_DB_GetCharValue(dbSecurity, "signer", ii, 0); if (!s) break; DBG_ERROR(AQHBCI_LOGDOMAIN, "Signed unexpectedly with key \"%s\"", s); } return AB_ERROR_SECURITY; } } else { if (strcasecmp(s, sExpectedSigner)==0) { DBG_DEBUG(AQHBCI_LOGDOMAIN, "Jobs signed as expected with \"%s\"", sExpectedSigner); break; } else if (*s!='!' && *s!='?') { DBG_INFO(AQHBCI_LOGDOMAIN, "Signer name does not match expected name (%s!=%s), " "but we accept it anyway", s, sExpectedSigner); break; } } } /* for */ DBG_DEBUG(AQHBCI_LOGDOMAIN, "Signature check ok"); } else { DBG_DEBUG(AQHBCI_LOGDOMAIN, "No signature expected"); } } return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/joblayer/Makefile.in0000644000175000017500000006363515037736025022503 00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/libs/plugins/backends/aqhbci/joblayer ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/distri.m4 $(top_srcdir)/m4/gwenhywfar.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/os.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libhbcijob_la_LIBADD = am_libhbcijob_la_OBJECTS = job.lo job_commit.lo job_commit_key.lo \ job_crypt.lo job_swift.lo jobqueue.lo jobqueue_dispatch.lo \ jobqueue_tomsg.lo jobqueue_addjob.lo jobqueue_bpd.lo \ jobqueue_account.lo result.lo libhbcijob_la_OBJECTS = $(am_libhbcijob_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/job.Plo ./$(DEPDIR)/job_commit.Plo \ ./$(DEPDIR)/job_commit_key.Plo ./$(DEPDIR)/job_crypt.Plo \ ./$(DEPDIR)/job_swift.Plo ./$(DEPDIR)/jobqueue.Plo \ ./$(DEPDIR)/jobqueue_account.Plo \ ./$(DEPDIR)/jobqueue_addjob.Plo ./$(DEPDIR)/jobqueue_bpd.Plo \ ./$(DEPDIR)/jobqueue_dispatch.Plo \ ./$(DEPDIR)/jobqueue_tomsg.Plo ./$(DEPDIR)/result.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libhbcijob_la_SOURCES) DIST_SOURCES = $(libhbcijob_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac HEADERS = $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADD_ACLOCAL_FLAGS = @ADD_ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AQBANKING_CLI_VERSION_STRING = @AQBANKING_CLI_VERSION_STRING@ AQBANKING_FINTS_VERSION_STRING = @AQBANKING_FINTS_VERSION_STRING@ AQBANKING_SO_AGE = @AQBANKING_SO_AGE@ AQBANKING_SO_CURRENT = @AQBANKING_SO_CURRENT@ AQBANKING_SO_EFFECTIVE = @AQBANKING_SO_EFFECTIVE@ AQBANKING_SO_REVISION = @AQBANKING_SO_REVISION@ AQBANKING_VERSION_BUILD = @AQBANKING_VERSION_BUILD@ AQBANKING_VERSION_FULL_STRING = @AQBANKING_VERSION_FULL_STRING@ AQBANKING_VERSION_MAJOR = @AQBANKING_VERSION_MAJOR@ AQBANKING_VERSION_MINOR = @AQBANKING_VERSION_MINOR@ AQBANKING_VERSION_PATCHLEVEL = @AQBANKING_VERSION_PATCHLEVEL@ AQBANKING_VERSION_RELEASE_STRING = @AQBANKING_VERSION_RELEASE_STRING@ AQBANKING_VERSION_STRING = @AQBANKING_VERSION_STRING@ AQBANKING_VERSION_TAG = @AQBANKING_VERSION_TAG@ AQEBICS_CFLAGS = @AQEBICS_CFLAGS@ AQEBICS_LIBS = @AQEBICS_LIBS@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATETIME = @DATETIME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_EXCLUDE_PATTERNS = @DOXYGEN_EXCLUDE_PATTERNS@ DOXYGEN_FILE_PATTERNS = @DOXYGEN_FILE_PATTERNS@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENGUI_GTK2_CFLAGS = @GWENGUI_GTK2_CFLAGS@ GWENGUI_GTK2_LIBS = @GWENGUI_GTK2_LIBS@ GWENHYWFAR_MINIMUM_VERSION = @GWENHYWFAR_MINIMUM_VERSION@ HAVE_GWENGUI_GTK2 = @HAVE_GWENGUI_GTK2@ HAVE_I18N = @HAVE_I18N@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIBXSLT_CFLAGS = @LIBXSLT_CFLAGS@ LIBXSLT_LIBS = @LIBXSLT_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_SUPPORTS_QT = @MSGFMT_SUPPORTS_QT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ TUTORIALS = @TUTORIALS@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XMLMERGE = @XMLMERGE@ XMLSEC_CFLAGS = @XMLSEC_CFLAGS@ XMLSEC_LIBS = @XMLSEC_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ aqbanking_backends = @aqbanking_backends@ aqbanking_cfg_searchdir = @aqbanking_cfg_searchdir@ aqbanking_data_searchdir = @aqbanking_data_searchdir@ aqbanking_headerdir = @aqbanking_headerdir@ aqbanking_headerdir_am = @aqbanking_headerdir_am@ aqbanking_includes = @aqbanking_includes@ aqbanking_internal_libs = @aqbanking_internal_libs@ aqbanking_ldflags = @aqbanking_ldflags@ aqbanking_libs = @aqbanking_libs@ aqbanking_locale_searchdir = @aqbanking_locale_searchdir@ aqbanking_modules = @aqbanking_modules@ aqbanking_pkgdatadir = @aqbanking_pkgdatadir@ aqbanking_plugin_searchdir = @aqbanking_plugin_searchdir@ aqbanking_plugindir = @aqbanking_plugindir@ aqbanking_plugins_backends_dirs = @aqbanking_plugins_backends_dirs@ aqbanking_plugins_backends_libs = @aqbanking_plugins_backends_libs@ aqbanking_plugins_bankinfo_dirs = @aqbanking_plugins_bankinfo_dirs@ aqbanking_plugins_bankinfo_libs = @aqbanking_plugins_bankinfo_libs@ aqbanking_plugins_imexporters_dirs = @aqbanking_plugins_imexporters_dirs@ aqbanking_plugins_imexporters_libs = @aqbanking_plugins_imexporters_libs@ aqbanking_plugins_parsers_dirs = @aqbanking_plugins_parsers_dirs@ aqbanking_symlinkdir = @aqbanking_symlinkdir@ aqbanking_sys_is_windows = @aqbanking_sys_is_windows@ aqbankingpp_modules = @aqbankingpp_modules@ aqebics_datadir = @aqebics_datadir@ aqebics_includes = @aqebics_includes@ aqebics_internal_libs = @aqebics_internal_libs@ aqebics_ldflags = @aqebics_ldflags@ aqebics_libs = @aqebics_libs@ aqfints_datadir = @aqfints_datadir@ aqhbci_datadir = @aqhbci_datadir@ aqhbci_includes = @aqhbci_includes@ aqhbci_internal_libs = @aqhbci_internal_libs@ aqhbci_ldflags = @aqhbci_ldflags@ aqhbci_libs = @aqhbci_libs@ aqofxconnect_includes = @aqofxconnect_includes@ aqofxconnect_internal_libs = @aqofxconnect_internal_libs@ aqofxconnect_libs = @aqofxconnect_libs@ aqpaypal_includes = @aqpaypal_includes@ aqpaypal_internal_libs = @aqpaypal_internal_libs@ aqpaypal_libs = @aqpaypal_libs@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gmp_libs = @gmp_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_dir = @gwenhywfar_dir@ gwenhywfar_has_crypt = @gwenhywfar_has_crypt@ gwenhywfar_headers = @gwenhywfar_headers@ gwenhywfar_includes = @gwenhywfar_includes@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_plugins = @gwenhywfar_plugins@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ typemaker2_exe = @typemaker2_exe@ visibility_cflags = @visibility_cflags@ with_aqebics = @with_aqebics@ with_aqhbci = @with_aqhbci@ AM_CFLAGS = -DBUILDING_AQBANKING @visibility_cflags@ AM_CPPFLAGS = -I$(top_srcdir)/src/libs -I$(top_builddir)/src/libs $(gwenhywfar_includes) \ -I$(srcdir)/../.. \ -I$(srcdir)/../tan \ -I$(srcdir)/../msglayer -I$(srcdir)/.. noinst_LTLIBRARIES = libhbcijob.la noinst_HEADERS = \ job_l.h \ job_p.h \ job_commit.h \ job_commit_key.h \ job_crypt.h \ job_swift.h \ jobqueue_l.h \ jobqueue_p.h \ jobqueue_dispatch.h \ jobqueue_tomsg.h \ jobqueue_addjob.h \ jobqueue_bpd.h \ jobqueue_account.h \ result_l.h \ result_p.h #iheaderdir=@aqbanking_headerdir_am@/aqhbci #iheader_HEADERS= libhbcijob_la_SOURCES = \ job.c \ job_commit.c \ job_commit_key.c \ job_crypt.c \ job_swift.c \ jobqueue.c \ jobqueue_dispatch.c \ jobqueue_tomsg.c \ jobqueue_addjob.c \ jobqueue_bpd.c \ jobqueue_account.c \ result.c EXTRA_DIST = \ job_virtual.c \ job_new.c all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libs/plugins/backends/aqhbci/joblayer/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libs/plugins/backends/aqhbci/joblayer/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libhbcijob.la: $(libhbcijob_la_OBJECTS) $(libhbcijob_la_DEPENDENCIES) $(EXTRA_libhbcijob_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libhbcijob_la_OBJECTS) $(libhbcijob_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/job.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/job_commit.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/job_commit_key.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/job_crypt.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/job_swift.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jobqueue.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jobqueue_account.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jobqueue_addjob.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jobqueue_bpd.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jobqueue_dispatch.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jobqueue_tomsg.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/result.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/job.Plo -rm -f ./$(DEPDIR)/job_commit.Plo -rm -f ./$(DEPDIR)/job_commit_key.Plo -rm -f ./$(DEPDIR)/job_crypt.Plo -rm -f ./$(DEPDIR)/job_swift.Plo -rm -f ./$(DEPDIR)/jobqueue.Plo -rm -f ./$(DEPDIR)/jobqueue_account.Plo -rm -f ./$(DEPDIR)/jobqueue_addjob.Plo -rm -f ./$(DEPDIR)/jobqueue_bpd.Plo -rm -f ./$(DEPDIR)/jobqueue_dispatch.Plo -rm -f ./$(DEPDIR)/jobqueue_tomsg.Plo -rm -f ./$(DEPDIR)/result.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/job.Plo -rm -f ./$(DEPDIR)/job_commit.Plo -rm -f ./$(DEPDIR)/job_commit_key.Plo -rm -f ./$(DEPDIR)/job_crypt.Plo -rm -f ./$(DEPDIR)/job_swift.Plo -rm -f ./$(DEPDIR)/jobqueue.Plo -rm -f ./$(DEPDIR)/jobqueue_account.Plo -rm -f ./$(DEPDIR)/jobqueue_addjob.Plo -rm -f ./$(DEPDIR)/jobqueue_bpd.Plo -rm -f ./$(DEPDIR)/jobqueue_dispatch.Plo -rm -f ./$(DEPDIR)/jobqueue_tomsg.Plo -rm -f ./$(DEPDIR)/result.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-generic clean-libtool clean-noinstLTLIBRARIES \ cscopelist-am ctags ctags-am distclean distclean-compile \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am .PRECIOUS: Makefile typedefs: for d in $(SUBDIRS); do \ $(MAKE) -C $$d typedefs; \ done typefiles: $(typefiles) $(gwenhywfar_bindir)/typemaker -d AQHBCI_API $(typefiles) sources: for f in $(libhbcijob_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d sources; \ done cppcheck: for f in $(libhbcijob_la_SOURCES); do \ cppcheck --force $$f ; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/joblayer/job_new.c0000664000175000017500000003754414576274523022236 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2020 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ /* file included by job.c */ /* ------------------------------------------------------------------------------------------------ * forward declarations * ------------------------------------------------------------------------------------------------ */ static GWEN_XMLNODE *_jobGetJobNode(const AH_JOB *j, int jobVersion); static int _jobGetBpdParamsForVersion(const AH_JOB *j, const char *paramName, int jobVersion); static GWEN_DB_NODE *_jobGetUpdJob(const AH_JOB *j, const AB_ACCOUNT *a); static GWEN_DB_NODE *_jobGetBpdPinTanParams(const AH_JOB *j); static void _jobReadFromDescriptorNode(AH_JOB *j, GWEN_XMLNODE *jobNode); static void _jobReadFromBpdParamsNode(AH_JOB *j, GWEN_DB_NODE *jobBPD); static void _jobReadFromUpdNode(AH_JOB *j, GWEN_DB_NODE *jobUPD); static void _jobReadSepaDescriptors(AH_JOB *j); /* ------------------------------------------------------------------------------------------------ * code * ------------------------------------------------------------------------------------------------ */ AH_JOB *AH_Job_new(const char *name, AB_PROVIDER *pro, AB_USER *u, AB_ACCOUNT *acc, int jobVersion) { AH_JOB *j; GWEN_MSGENGINE *e; const char *paramName=NULL; assert(name); assert(u); GWEN_NEW_OBJECT(AH_JOB, j); j->usage=1; GWEN_LIST_INIT(AH_JOB, j); GWEN_INHERIT_INIT(AH_JOB, j); j->name=strdup(name); j->user=u; j->provider=pro; j->signers=GWEN_StringList_new(); j->log=GWEN_StringList_new(); j->challengeParams=GWEN_StringList_new(); j->jobParams=GWEN_DB_Group_new("jobParams"); j->jobArguments=GWEN_DB_Group_new("jobArguments"); j->jobResponses=GWEN_DB_Group_new("jobResponses"); j->segResults=AH_Result_List_new(); j->msgResults=AH_Result_List_new(); j->messages=AB_Message_List_new(); AH_Job_AddFlags(j, AH_JOB_FLAGS_HASMOREMSGS); if (AH_User_GetCryptMode(u)==AH_CryptMode_Pintan) /* always make jobs single when in PIN/TAN mode */ AH_Job_AddFlags(j, AH_JOB_FLAGS_SINGLE); AH_Job_LogFlags(j, "Creating job"); /* setup message engine */ e=AH_User_GetMsgEngine(u); assert(e); j->msgEngine=e; GWEN_MsgEngine_Attach(e); /* just to make sure the XMLNode is not freed before this job is */ if (AH_User_GetHbciVersion(u)==0) GWEN_MsgEngine_SetProtocolVersion(e, 300); else GWEN_MsgEngine_SetProtocolVersion(e, AH_User_GetHbciVersion(u)); GWEN_MsgEngine_SetMode(e, AH_CryptMode_toString(AH_User_GetCryptMode(u))); /* sample some info from job description node */ if (1) { GWEN_XMLNODE *jobNode=NULL; /* get job descriptor node for selected (or highest) version */ DBG_INFO(AQHBCI_LOGDOMAIN, "Reading job description from XML files"); jobNode=_jobGetJobNode(j, jobVersion); if (!jobNode) { DBG_INFO(AQHBCI_LOGDOMAIN, "Job \"%s\" not supported by local XML files", name); AH_Job_free(j); return NULL; } j->xmlNode=jobNode; paramName=GWEN_XMLNode_GetProperty(jobNode, "params", NULL); _jobReadFromDescriptorNode(j, jobNode); } /* sample PinTan params */ if (1) { GWEN_DB_NODE *jobPinTan; jobPinTan=_jobGetBpdPinTanParams(j); if (jobPinTan) { /* sample flag NEEDTAN */ AH_Job_AddFlags(j, (GWEN_DB_GetIntValue(jobPinTan, "needTan", 0, 0)!=0)?AH_JOB_FLAGS_NEEDTAN:0); } } /* sample some info from BPD */ if (paramName && *paramName) { GWEN_DB_NODE *jobBPD; DBG_INFO(AQHBCI_LOGDOMAIN, "Reading info from BPD job (if any)"); jobBPD=AH_User_GetBpdJobForParamNameAndVersion(j->user, paramName, j->segmentVersion); if (jobBPD) _jobReadFromBpdParamsNode(j, jobBPD); } /* sample some info from UPD */ if (1) { GWEN_DB_NODE *jobUPD; DBG_INFO(AQHBCI_LOGDOMAIN, "Reading info from UPD job (if any)"); jobUPD=_jobGetUpdJob(j, acc); if (jobUPD) _jobReadFromUpdNode(j, jobUPD); } /* check BPD for job specific SEPA descriptors */ DBG_INFO(AQHBCI_LOGDOMAIN, "Reading SEPA format descriptors (if any)"); _jobReadSepaDescriptors(j); /* done */ if (GWEN_Logger_GetLevel(AQHBCI_LOGDOMAIN)>=GWEN_LoggerLevel_Debug) { DBG_DEBUG(AQHBCI_LOGDOMAIN, "Created this job:"); AH_Job_Dump(j, stderr, 2); } AH_Job_Log(j, GWEN_LoggerLevel_Info, "HBCI-Job created"); DBG_INFO(AQHBCI_LOGDOMAIN, "%s: Job created", j->name); return j; } GWEN_XMLNODE *_jobGetJobNode(const AH_JOB *j, int jobVersion) { GWEN_XMLNODE *node; const char *paramName; int needsBPD; int rv; int realJobVersion=0; node=GWEN_MsgEngine_FindNodeByProperty(j->msgEngine, "JOB", "id", 0, j->name); if (!node) { DBG_INFO(AQHBCI_LOGDOMAIN, "Job \"%s\" not supported by local XML files", j->name); return NULL; } /* preset */ realJobVersion=GWEN_XMLNode_GetIntProperty(node, "version", 0); paramName=GWEN_XMLNode_GetProperty(node, "params", NULL); needsBPD=GWEN_XMLNode_GetIntProperty(node, "needbpd", 0)!=0; if (paramName && *paramName) { rv=_jobGetBpdParamsForVersion(j, paramName, jobVersion); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); if (needsBPD) { DBG_INFO(AQHBCI_LOGDOMAIN, "No BPD job found when needed"); return NULL; } } else realJobVersion=rv; } if (realJobVersion<1) { DBG_INFO(AQHBCI_LOGDOMAIN, "Could not determine real job version to use"); return NULL; } node=GWEN_MsgEngine_FindNodeByProperty(j->msgEngine, "JOB", "id", realJobVersion, j->name); if (node==NULL) { DBG_INFO(AQHBCI_LOGDOMAIN, "Job node \"%s\"[%d] not found", j->name, realJobVersion); return NULL; } return node; } GWEN_DB_NODE *_jobGetBpdPinTanParams(const AH_JOB *j) { if (j->code) { const AH_BPD *bpd; GWEN_DB_NODE *bpdgrp; GWEN_DB_NODE *jobPinTan; DBG_INFO(AQHBCI_LOGDOMAIN, "Searching BPD PinTan params for job \"%s\" (%s)", j->code, j->name); bpd=AH_User_GetBpd(j->user); if (!bpd) { DBG_ERROR(AQHBCI_LOGDOMAIN, "No BPD"); return NULL; } bpdgrp=AH_Bpd_GetBpdJobs(bpd, AH_User_GetHbciVersion(j->user)); if (bpdgrp==NULL) { DBG_ERROR(AQHBCI_LOGDOMAIN, "No BPD jobs in BPD"); return NULL; } jobPinTan=GWEN_DB_GetGroup(bpdgrp, GWEN_PATH_FLAGS_NAMEMUSTEXIST, j->code); if (jobPinTan) return jobPinTan; } return NULL; } int _jobGetBpdParamsForVersion(const AH_JOB *j, const char *paramName, int jobVersion) { const AH_BPD *bpd; GWEN_DB_NODE *bpdgrp; GWEN_DB_NODE *jobBPD; int highestVersion; DBG_INFO(AQHBCI_LOGDOMAIN, "Searching BPD job \"%s\" for Job \"%s\" (version %d)", paramName, j->name, jobVersion); bpd=AH_User_GetBpd(j->user); if (!bpd) { DBG_ERROR(AQHBCI_LOGDOMAIN, "No BPD"); return GWEN_ERROR_GENERIC; } bpdgrp=AH_Bpd_GetBpdJobs(bpd, AH_User_GetHbciVersion(j->user)); if (bpdgrp==NULL) { DBG_ERROR(AQHBCI_LOGDOMAIN, "No BPD jobs in BPD"); return GWEN_ERROR_GENERIC; } /* get BPD job */ jobBPD=GWEN_DB_GetGroup(bpdgrp, GWEN_PATH_FLAGS_NAMEMUSTEXIST, paramName); if (jobBPD) { /* children are one group per version */ jobBPD=GWEN_DB_GetFirstGroup(jobBPD); } /* check for a job for which we have a BPD */ highestVersion=-1; if (jobVersion) { /* a job version has been selected from outside, look for * the BPD of that particular version */ while (jobBPD) { int version; /* get version from BPD */ version=atoi(GWEN_DB_GroupName(jobBPD)); DBG_INFO(AQHBCI_LOGDOMAIN, "Checking Job %s (%d)", j->name, version); if (version==jobVersion) { GWEN_XMLNODE *node; /* now get the correct version of the JOB */ DBG_INFO(AQHBCI_LOGDOMAIN, "Checking whether job %s (%d) can be instantiated", j->name, version); node=GWEN_MsgEngine_FindNodeByProperty(j->msgEngine, "JOB", "id", version, j->name); if (node) { DBG_INFO(AQHBCI_LOGDOMAIN, "Found BPD job"); highestVersion=version; break; } } jobBPD=GWEN_DB_GetNextGroup(jobBPD); } /* while */ } else { while (jobBPD) { int version; /* get version from BPD */ version=atoi(GWEN_DB_GroupName(jobBPD)); DBG_INFO(AQHBCI_LOGDOMAIN, "Checking Job %s (%d)", j->name, version); if (version>highestVersion) { GWEN_XMLNODE *node; /* now get the correct version of the JOB */ DBG_INFO(AQHBCI_LOGDOMAIN, "Checking whether job %s (%d) can be instantiated", j->name, version); node=GWEN_MsgEngine_FindNodeByProperty(j->msgEngine, "JOB", "id", version, j->name); if (node) { DBG_INFO(AQHBCI_LOGDOMAIN, "Found BPD job candidate version %d", version); highestVersion=version; } } jobBPD=GWEN_DB_GetNextGroup(jobBPD); } /* while */ } if (highestVersion<1) { DBG_INFO(AQHBCI_LOGDOMAIN, "No matching BPD job found for job \"%s\"(%d)", j->name, jobVersion); return GWEN_ERROR_NOT_FOUND; } return highestVersion; } GWEN_DB_NODE *_jobGetUpdJob(const AH_JOB *j, const AB_ACCOUNT *a) { if (j && a && j->code && *(j->code)) { GWEN_DB_NODE *updgroup; GWEN_DB_NODE *updnode=NULL; updgroup=AH_User_GetUpdForAccount(j->user, a); if (updgroup) { DBG_NOTICE(AQHBCI_LOGDOMAIN, "Code is \"%s\"", j->code); updnode=GWEN_DB_GetFirstGroup(updgroup); while (updnode) { if (strcasecmp(GWEN_DB_GetCharValue(updnode, "job", 0, ""), j->code)==0) return updnode; updnode=GWEN_DB_GetNextGroup(updnode); } /* while */ } /* if updgroup for the given account found */ } /* if account */ return NULL; } void _jobReadFromDescriptorNode(AH_JOB *j, GWEN_XMLNODE *jobNode) { GWEN_XMLNODE *msgNode; GWEN_XMLNODE *descrNode; const char *s; j->xmlNode=jobNode; /* get some properties */ j->segmentVersion=GWEN_XMLNode_GetIntProperty(jobNode, "version", 0); s=GWEN_XMLNode_GetProperty(jobNode, "response", NULL); AH_Job_SetResponseName(j, s); s=GWEN_XMLNode_GetProperty(jobNode, "code", NULL); AH_Job_SetCode(j, s); /* sample flags from XML file */ if (GWEN_XMLNode_GetIntProperty(jobNode, "dlg", 0)!=0) { AH_Job_AddFlags(j, AH_JOB_FLAGS_DLGJOB); AH_Job_AddFlags(j, AH_JOB_FLAGS_SINGLE); } AH_Job_AddFlags(j, (GWEN_XMLNode_GetIntProperty(jobNode, "attachable", 0)!=0)?AH_JOB_FLAGS_ATTACHABLE:0); AH_Job_AddFlags(j, (GWEN_XMLNode_GetIntProperty(jobNode, "single", 0)!=0)?AH_JOB_FLAGS_SINGLE:0); AH_Job_AddFlags(j, (GWEN_XMLNode_GetIntProperty(jobNode, "ignoreAccounts", 0)!=0)?AH_JOB_FLAGS_IGNOREACCOUNTS:0); /* get description */ descrNode=GWEN_XMLNode_FindFirstTag(jobNode, "DESCR", 0, 0); if (descrNode) { GWEN_BUFFER *descrBuf; GWEN_XMLNODE *dn; descrBuf=GWEN_Buffer_new(0, 64, 0, 1); dn=GWEN_XMLNode_GetFirstData(descrNode); while (dn) { const char *d; d=GWEN_XMLNode_GetData(dn); if (d) { GWEN_Buffer_AppendString(descrBuf, d); } dn=GWEN_XMLNode_GetNextData(dn); } /* while */ if (GWEN_Buffer_GetUsedBytes(descrBuf)) { j->description=strdup(GWEN_Buffer_GetStart(descrBuf)); } GWEN_Buffer_free(descrBuf); } /* if there is a description */ /* check for multi message job */ msgNode=GWEN_XMLNode_FindFirstTag(jobNode, "MESSAGE", 0, 0); if (msgNode) { /* we have nodes, so this is not a simple case */ DBG_INFO(AQHBCI_LOGDOMAIN, "Multi message job"); /* GWEN_XMLNode_Dump(msgNode, stderr, 2); */ AH_Job_AddFlags(j, AH_JOB_FLAGS_MULTIMSG); /* a multi message job must be single, too */ AH_Job_AddFlags(j, AH_JOB_FLAGS_SINGLE); j->msgNode=msgNode; AH_Job_AddFlags(j, (GWEN_XMLNode_GetIntProperty(msgNode, "sign", 1)!=0)?(AH_JOB_FLAGS_NEEDSIGN | AH_JOB_FLAGS_SIGN):0); AH_Job_AddFlags(j, (GWEN_XMLNode_GetIntProperty(msgNode, "crypt", 1)!=0)?(AH_JOB_FLAGS_NEEDCRYPT | AH_JOB_FLAGS_CRYPT):0); AH_Job_AddFlags(j, (GWEN_XMLNode_GetIntProperty(msgNode, "needtan", 0)!=0)?AH_JOB_FLAGS_NEEDTAN:0); AH_Job_AddFlags(j, (GWEN_XMLNode_GetIntProperty(msgNode, "nosysid", 0)!=0)?(AH_JOB_FLAGS_NOSYSID | AH_JOB_FLAGS_SINGLE):0); AH_Job_AddFlags(j, (GWEN_XMLNode_GetIntProperty(msgNode, "signseqone", 0)!=0)?AH_JOB_FLAGS_SIGNSEQONE:0); AH_Job_AddFlags(j, (GWEN_XMLNode_GetIntProperty(msgNode, "noitan", 0)!=0)?AH_JOB_FLAGS_NOITAN:0); } /* if msgNode */ else { DBG_INFO(AQHBCI_LOGDOMAIN, "Single message job"); AH_Job_AddFlags(j, (GWEN_XMLNode_GetIntProperty(jobNode, "sign", 1)!=0)?(AH_JOB_FLAGS_NEEDSIGN | AH_JOB_FLAGS_SIGN):0); AH_Job_AddFlags(j, (GWEN_XMLNode_GetIntProperty(jobNode, "crypt", 1)!=0)?(AH_JOB_FLAGS_NEEDCRYPT | AH_JOB_FLAGS_CRYPT):0); AH_Job_AddFlags(j, (GWEN_XMLNode_GetIntProperty(jobNode, "needtan", 0)!=0)?AH_JOB_FLAGS_NEEDTAN:0); AH_Job_AddFlags(j, (GWEN_XMLNode_GetIntProperty(jobNode, "nosysid", 0)!=0)?(AH_JOB_FLAGS_NOSYSID | AH_JOB_FLAGS_SINGLE):0); AH_Job_AddFlags(j, (GWEN_XMLNode_GetIntProperty(jobNode, "signseqone", 0)!=0)?AH_JOB_FLAGS_SIGNSEQONE:0); AH_Job_AddFlags(j, (GWEN_XMLNode_GetIntProperty(jobNode, "noitan", 0)!=0)?AH_JOB_FLAGS_NOITAN:0); } if (AH_Job_GetFlags(j) & (AH_JOB_FLAGS_NEEDSIGN | AH_JOB_FLAGS_SIGN)) { DBG_INFO(AQHBCI_LOGDOMAIN, "%s: Signature needed according to job description in our XML files", j->name); j->minSigs=1; } else { DBG_INFO(AQHBCI_LOGDOMAIN, "%s: No signature needed according to job description in XML our files", j->name); j->minSigs=0; } } void _jobReadFromBpdParamsNode(AH_JOB *j, GWEN_DB_NODE *jobBPD) { GWEN_DB_AddGroupChildren(j->jobParams, jobBPD); /* sample some variables from BPD jobs */ j->minSigs=GWEN_DB_GetIntValue(jobBPD, "minsigs", 0, 0); if (j->minSigs>0) { DBG_INFO(AQHBCI_LOGDOMAIN, "%s: Signature needed according to BPD", j->name); AH_Job_AddFlags(j, AH_JOB_FLAGS_NEEDSIGN | AH_JOB_FLAGS_SIGN); } else { AH_Job_SubFlags(j, AH_JOB_FLAGS_NEEDSIGN | AH_JOB_FLAGS_SIGN); DBG_INFO(AQHBCI_LOGDOMAIN, "%s: No signature needed according to BPD", j->name); } j->secProfile=GWEN_DB_GetIntValue(jobBPD, "secProfile", 0, 1); j->secClass=GWEN_DB_GetIntValue(jobBPD, "securityClass", 0, 0); j->jobsPerMsg=GWEN_DB_GetIntValue(jobBPD, "jobspermsg", 0, 0); } void _jobReadFromUpdNode(AH_JOB *j, GWEN_DB_NODE *jobUPD) { GWEN_DB_NODE *dgr; dgr=GWEN_DB_GetGroup(j->jobParams, GWEN_DB_FLAGS_OVERWRITE_GROUPS, "upd"); assert(dgr); GWEN_DB_AddGroupChildren(dgr, jobUPD); j->minSigs=GWEN_DB_GetIntValue(jobUPD, "minsign", 0, 0); if (j->minSigs>0) { DBG_INFO(AQHBCI_LOGDOMAIN, "%s: Signature needed according to UPD", j->name); AH_Job_AddFlags(j, AH_JOB_FLAGS_NEEDSIGN | AH_JOB_FLAGS_SIGN); } else { AH_Job_SubFlags(j, AH_JOB_FLAGS_NEEDSIGN | AH_JOB_FLAGS_SIGN); DBG_INFO(AQHBCI_LOGDOMAIN, "%s: No signature needed according to UPD", j->name); } } void _jobReadSepaDescriptors(AH_JOB *j) { GWEN_DB_NODE *dbT; dbT=GWEN_DB_FindFirstGroup(j->jobParams, "SupportedSepaFormats"); if (dbT) { GWEN_STRINGLIST *descriptors; unsigned int i; const char *s; descriptors=GWEN_StringList_new(); while (dbT) { for (i=0; i<10; i++) { s=GWEN_DB_GetCharValue(dbT, "format", i, NULL); if (!(s && *s)) break; GWEN_StringList_AppendString(descriptors, s, 0, 1); } dbT=GWEN_DB_FindNextGroup(dbT, "SupportedSepaFormats"); } if (GWEN_StringList_Count(descriptors)>0) j->sepaDescriptors=descriptors; else GWEN_StringList_free(descriptors); } } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/joblayer/jobqueue_tomsg.h0000664000175000017500000000126514043610745023624 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2021 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_JOBQUEUE_TOMSG_H #define AH_JOBQUEUE_TOMSG_H #include "aqhbci/joblayer/jobqueue_l.h" AH_MSG *AH_JobQueue_ToMessage(AH_JOBQUEUE *jq, AH_DIALOG *dlg); AH_MSG *AH_JobQueue_ToMessageWithTan(AH_JOBQUEUE *jq, AH_DIALOG *dlg, const char *sTan); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/joblayer/jobqueue_p.h0000664000175000017500000000163314214726437022737 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_JOBQUEUE_P_H #define AH_JOBQUEUE_P_H #include "jobqueue_l.h" #include "job_l.h" #include struct AH_JOBQUEUE { GWEN_LIST_ELEMENT(AH_JOBQUEUE); AB_USER *user; GWEN_STRINGLIST *signers; uint32_t usage; AH_JOB_LIST *jobs; uint32_t flags; int secProfile; int secClass; char *usedTan; char *usedPin; /* used for checking bad pins in AH_JobQueue_DispatchMessage */ AH_JOBQUEUE *referenceQueue; }; #endif /* AH_JOBQUEUE_P_H */ aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/joblayer/jobqueue_account.c0000664000175000017500000003466414170115771024133 00000000000000/*************************************************************************** begin : Wed Jan 12 2022 copyright : (C) 2022 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "jobqueue_account.h" #include "aqhbci/banking/user_l.h" #include "aqhbci/banking/account_l.h" #include "aqhbci/banking/provider_l.h" #include "aqhbci/banking/provider_accspec.h" #include "aqbanking/i18n_l.h" #include #include /* ------------------------------------------------------------------------------------------------ * forward declarations * ------------------------------------------------------------------------------------------------ */ static AB_ACCOUNT_LIST *_readAccounts(AB_PROVIDER *pro, AB_USER *user, GWEN_DB_NODE *dbResponses); static AB_ACCOUNT *_readAndSanitizeAccountData(AB_PROVIDER *pro, AH_BPD *bpd, GWEN_DB_NODE *dbAccountData); static void _removeEmpty(AB_ACCOUNT_LIST *accList); static void _matchAccountsWithStoredAccountsAndAssignStoredId(AB_PROVIDER *pro, AB_ACCOUNT_LIST *accList); static uint32_t _findStored(AB_PROVIDER *pro, const AB_ACCOUNT *acc, AB_ACCOUNT_SPEC_LIST *asl); static void _addOrModify(AB_PROVIDER *pro, AB_USER *user, AB_ACCOUNT *acc); static void _possiblyReplaceUpdJobsForAccountInLockedUser(AB_USER *user, AB_ACCOUNT *storedAcc, GWEN_DB_NODE *dbTempUpd); static AB_ACCOUNT *_getLoadedAndUpdatedOrCreatedAccount(AB_PROVIDER *pro, AB_USER *user, AB_ACCOUNT *acc); static void _possiblyUpdateAndWriteAccountSpec(AB_PROVIDER *pro, AB_USER *user, AB_ACCOUNT *storedAcc); static void _updateAccountInfo(AB_ACCOUNT *targetAccount, const AB_ACCOUNT *sourceAccount); /* ------------------------------------------------------------------------------------------------ * implementations * ------------------------------------------------------------------------------------------------ */ void AH_JobQueue_ReadAccounts(AH_JOBQUEUE *jq, GWEN_DB_NODE *dbResponses) { AB_PROVIDER *pro; AB_USER *user; AB_ACCOUNT_LIST *accList; user=AH_JobQueue_GetUser(jq); pro=AB_User_GetProvider(user); accList=_readAccounts(pro, user, dbResponses); if (accList) { _removeEmpty(accList); _matchAccountsWithStoredAccountsAndAssignStoredId(pro, accList); /* now either add new accounts or modify existing ones */ DBG_DEBUG(AQHBCI_LOGDOMAIN, "Adding new or modifying existing accounts"); if (AB_Account_List_GetCount(accList)) { AB_ACCOUNT *acc; while ((acc=AB_Account_List_First(accList))) { AB_Account_List_Del(acc); _addOrModify(pro, user, acc); AB_Account_free(acc); } /* while */ } /* if accounts */ AB_Account_List_free(accList); } } AB_ACCOUNT_LIST *_readAccounts(AB_PROVIDER *pro, AB_USER *user, GWEN_DB_NODE *dbResponses) { AB_ACCOUNT_LIST *accList; AH_BPD *bpd; GWEN_DB_NODE *dbCurr; bpd=AH_User_GetBpd(user); accList=AB_Account_List_new(); dbCurr=GWEN_DB_FindFirstGroup(dbResponses, "AccountData"); while (dbCurr) { AB_ACCOUNT *acc; acc=_readAndSanitizeAccountData(pro, bpd, GWEN_DB_GetGroup(dbCurr, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "data/AccountData")); if (acc) AB_Account_List_Add(acc, accList); dbCurr=GWEN_DB_FindNextGroup(dbCurr, "AccountData"); } if (AB_Account_List_GetCount(accList)<1) { DBG_INFO(AQHBCI_LOGDOMAIN, "No account received."); AB_Account_List_free(accList); return NULL; } return accList; } AB_ACCOUNT *_readAndSanitizeAccountData(AB_PROVIDER *pro, AH_BPD *bpd, GWEN_DB_NODE *dbAccountData) { if (dbAccountData) { AB_ACCOUNT *acc; GWEN_DB_NODE *dbUpd; GWEN_DB_NODE *gr; DBG_DEBUG(AQHBCI_LOGDOMAIN, "Found an account"); /* account data found */ acc=AB_Provider_CreateAccountObject(pro); assert(acc); /* read info from "AccountData" segment */ AH_Job_ReadAccountDataSeg(acc, dbAccountData); /* set bank name */ if (bpd) { const char *s; s=AH_Bpd_GetBankName(bpd); if (s && *s) AB_Account_SetBankName(acc, s); } /* Fixes a bug where the bank sends an account with no bank & account name */ if (!AB_Account_GetBankName(acc)) AB_Account_SetBankName(acc, "dummy"); if (!AB_Account_GetAccountName(acc)) AB_Account_SetAccountName(acc, "dummy"); /* temporarily store UPD jobs */ dbUpd=GWEN_DB_Group_new("tmpUpd"); assert(dbUpd); gr=GWEN_DB_GetFirstGroup(dbAccountData); while (gr) { if (strcasecmp(GWEN_DB_GroupName(gr), "updjob")==0) GWEN_DB_AddGroup(dbUpd, GWEN_DB_Group_dup(gr)); gr=GWEN_DB_GetNextGroup(gr); } AH_Account_SetDbTempUpd(acc, dbUpd); return acc; } else return NULL; } static void _removeEmpty(AB_ACCOUNT_LIST *accList) { /* only keep accounts which have at least IBAN or bankcode and account number */ DBG_DEBUG(AQHBCI_LOGDOMAIN, "Checking for empty accounts"); if (AB_Account_List_GetCount(accList)) { AB_ACCOUNT *acc; acc=AB_Account_List_First(accList); while (acc) { AB_ACCOUNT *accNext; const char *accountNum; const char *bankCode; const char *iban; accNext=AB_Account_List_Next(acc); accountNum=AB_Account_GetAccountNumber(acc); bankCode=AB_Account_GetBankCode(acc); iban=AB_Account_GetIban(acc); if (!((iban && *iban) || (accountNum && *accountNum && bankCode && *bankCode))) { DBG_DEBUG(AQHBCI_LOGDOMAIN, "Removing empty account from import list"); AB_Account_List_Del(acc); AB_Account_free(acc); } acc=accNext; } /* while(acc) */ } /* if (AB_Account_List_GetCount(accList)) */ } void _matchAccountsWithStoredAccountsAndAssignStoredId(AB_PROVIDER *pro, AB_ACCOUNT_LIST *accList) { /* find out which accounts are new */ DBG_DEBUG(AQHBCI_LOGDOMAIN, "Checking for existing or to be added accounts"); if (AB_Account_List_GetCount(accList)) { AB_BANKING *ab; AB_ACCOUNT_SPEC_LIST *accountSpecList=NULL; int rv; ab=AB_Provider_GetBanking(pro); accountSpecList=AB_AccountSpec_List_new(); rv=AB_Banking_GetAccountSpecList(ab, &accountSpecList); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "No account spec list"); } else { AB_ACCOUNT *acc; acc=AB_Account_List_First(accList); while (acc) { uint32_t storedUid; storedUid=_findStored(pro, acc, accountSpecList); if (storedUid) { DBG_INFO(AQHBCI_LOGDOMAIN, "Found a matching account (%x, %lu)", storedUid, (long unsigned int) storedUid); AB_Account_SetUniqueId(acc, storedUid); } acc=AB_Account_List_Next(acc); } } AB_AccountSpec_List_free(accountSpecList); } } static uint32_t _findStored(AB_PROVIDER *pro, const AB_ACCOUNT *acc, AB_ACCOUNT_SPEC_LIST *asl) { const char *accountNum; const char *bankCode; const char *iban; int accountType; AB_ACCOUNT_SPEC *as=NULL; accountNum=AB_Account_GetAccountNumber(acc); bankCode=AB_Account_GetBankCode(acc); iban=AB_Account_GetIban(acc); accountType=AB_Account_GetAccountType(acc); DBG_INFO(AQHBCI_LOGDOMAIN, "Checking account [blz=%s, acc=%s, iban=%s, type=%d]", bankCode?bankCode:"", accountNum?accountNum:"", iban?iban:"", accountType); if (iban && *iban && accountType>AB_AccountType_Unknown) { DBG_DEBUG(AQHBCI_LOGDOMAIN, "Comparing IBAN and old account specs"); /* IBAN given, try that first */ as=AB_AccountSpec_List_FindFirst(asl, AB_Provider_GetName(pro), NULL, /* country */ NULL, /* bank code */ NULL, /* account number */ NULL, /* subAccountId */ AB_Account_GetIban(acc), /* iban */ NULL, /* any currency */ accountType); } if (as==NULL) { if (accountNum && *accountNum && bankCode && *bankCode && accountType>AB_AccountType_Unknown) { DBG_DEBUG(AQHBCI_LOGDOMAIN, "Comparing old account specs"); as=AB_AccountSpec_List_FindFirst(asl, AB_Provider_GetName(pro), AB_Account_GetCountry(acc), AB_Account_GetBankCode(acc), AB_Account_GetAccountNumber(acc), AB_Account_GetSubAccountId(acc), NULL, NULL, /* any currency */ accountType); } } if (as) { uint32_t uniqueId; uniqueId=AB_AccountSpec_GetUniqueId(as); DBG_DEBUG(AQHBCI_LOGDOMAIN, "Found a matching account (%lu)", (long unsigned int) uniqueId); return uniqueId; } return 0; } static void _addOrModify(AB_PROVIDER *pro, AB_USER *user, AB_ACCOUNT *acc) { AB_ACCOUNT *storedAcc; GWEN_DB_NODE *dbTempUpd; dbTempUpd=AH_Account_GetDbTempUpd(acc); if (dbTempUpd) dbTempUpd=GWEN_DB_Group_dup(dbTempUpd); storedAcc=_getLoadedAndUpdatedOrCreatedAccount(pro, user, acc); _possiblyReplaceUpdJobsForAccountInLockedUser(user, storedAcc, dbTempUpd); _possiblyUpdateAndWriteAccountSpec(pro, user, storedAcc); GWEN_DB_Group_free(dbTempUpd); /* is a copy, we need to free it */ AB_Account_free(storedAcc); } void _possiblyReplaceUpdJobsForAccountInLockedUser(AB_USER *user, AB_ACCOUNT *storedAcc, GWEN_DB_NODE *dbTempUpd) { /* replace UPD jobs for this account inside user (user should be locked outside this function) */ if (storedAcc && dbTempUpd) { GWEN_DB_NODE *dbUpd; GWEN_DB_NODE *gr; char numbuf[32]; DBG_INFO(AQHBCI_LOGDOMAIN, "Setting UPD jobs for account %u in user %u", (unsigned int) AB_Account_GetUniqueId(storedAcc), (unsigned int) AB_User_GetUniqueId(user)); /* get UPD jobs */ dbUpd=AH_User_GetUpd(user); assert(dbUpd); /* create and clear group for each account */ snprintf(numbuf, sizeof(numbuf)-1, "uaid-%08" PRIx32, AB_Account_GetUniqueId(storedAcc)); numbuf[sizeof(numbuf)-1]=0; dbUpd=GWEN_DB_GetGroup(dbUpd, GWEN_DB_FLAGS_OVERWRITE_GROUPS, numbuf); gr=GWEN_DB_GetFirstGroup(dbTempUpd); while (gr) { if (strcasecmp(GWEN_DB_GroupName(gr), "updjob")==0) { /* found an upd job */ DBG_DEBUG(AQHBCI_LOGDOMAIN, "Adding UPD job"); GWEN_DB_AddGroup(dbUpd, GWEN_DB_Group_dup(gr)); } gr=GWEN_DB_GetNextGroup(gr); } /* while */ } } AB_ACCOUNT *_getLoadedAndUpdatedOrCreatedAccount(AB_PROVIDER *pro, AB_USER *user, AB_ACCOUNT *acc) { if (AB_Account_GetUniqueId(acc)) { int rv; AB_ACCOUNT *storedAcc=NULL; /* account already exists, needs update */ DBG_INFO(AQHBCI_LOGDOMAIN, "Account exists, modifying"); rv=AB_Provider_GetAccount(pro, AB_Account_GetUniqueId(acc), 1, 0, &storedAcc); /* lock, don't unlock */ if (rv<0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Error getting referred account (%d)", rv); return NULL; } else { /* account is locked now, apply changes */ _updateAccountInfo(storedAcc, acc); AB_Account_SetUserId(storedAcc, AB_User_GetUniqueId(user)); /* unlock account */ rv=AB_Provider_EndExclUseAccount(pro, storedAcc, 0); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); AB_Provider_EndExclUseAccount(pro, storedAcc, 1); /* abort */ AB_Account_free(storedAcc); return NULL; } return storedAcc; } } else { int rv; /* account is new, add it */ DBG_ERROR(AQHBCI_LOGDOMAIN, "Account is new, adding"); AB_Account_SetUserId(acc, AB_User_GetUniqueId(user)); rv=AB_Provider_AddAccount(pro, acc, 0); /* do not lock corresponding user because it already is locked! */ if (rv<0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Coud not write new account (%d)", rv); return NULL; } else { AB_ACCOUNT *storedAcc=NULL; DBG_DEBUG(AQHBCI_LOGDOMAIN, "Reading back added account"); rv=AB_Provider_GetAccount(pro, AB_Account_GetUniqueId(acc), 0, 0, &storedAcc); /* no-lock, no-unlock */ if (rv<0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Error getting referred account (%d)", rv); return NULL; } return storedAcc; } } } void _possiblyUpdateAndWriteAccountSpec(AB_PROVIDER *pro, AB_USER *user, AB_ACCOUNT *storedAcc) { /* update and write account spec */ if (storedAcc) { int rv; DBG_NOTICE(AQHBCI_LOGDOMAIN, "Updating account spec for account %u in user %u", (unsigned int) AB_Account_GetUniqueId(storedAcc), (unsigned int) AB_User_GetUniqueId(user)); rv=AH_Provider_CreateAndWriteAccountSpecWithUserAndAccount(pro, user, storedAcc); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); } } } void _updateAccountInfo(AB_ACCOUNT *targetAccount, const AB_ACCOUNT *sourceAccount) { const char *s; s=AB_Account_GetCountry(sourceAccount); if (s && *s) AB_Account_SetCountry(targetAccount, s); s=AB_Account_GetBankCode(sourceAccount); if (s && *s) AB_Account_SetBankCode(targetAccount, s); s=AB_Account_GetBankName(sourceAccount); if (s && *s) AB_Account_SetBankName(targetAccount, s); s=AB_Account_GetAccountNumber(sourceAccount); if (s && *s) AB_Account_SetAccountNumber(targetAccount, s); s=AB_Account_GetSubAccountId(sourceAccount); if (s && *s) AB_Account_SetSubAccountId(targetAccount, s); s=AB_Account_GetIban(sourceAccount); if (s && *s) AB_Account_SetIban(targetAccount, s); s=AB_Account_GetBic(sourceAccount); if (s && *s) AB_Account_SetBic(targetAccount, s); s=AB_Account_GetOwnerName(sourceAccount); if (s && *s) AB_Account_SetOwnerName(targetAccount, s); s=AB_Account_GetCurrency(sourceAccount); if (s && *s) AB_Account_SetCurrency(targetAccount, s); AB_Account_SetAccountType(targetAccount, AB_Account_GetAccountType(sourceAccount)); /* use flags from new account */ AH_Account_AddFlags(targetAccount, AH_Account_GetFlags(sourceAccount)); } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/joblayer/Makefile.am0000664000175000017500000000254414170115771022460 00000000000000 AM_CFLAGS=-DBUILDING_AQBANKING @visibility_cflags@ AM_CPPFLAGS = -I$(top_srcdir)/src/libs -I$(top_builddir)/src/libs $(gwenhywfar_includes) \ -I$(srcdir)/../.. \ -I$(srcdir)/../tan \ -I$(srcdir)/../msglayer -I$(srcdir)/.. noinst_LTLIBRARIES=libhbcijob.la noinst_HEADERS=\ job_l.h \ job_p.h \ job_commit.h \ job_commit_key.h \ job_crypt.h \ job_swift.h \ jobqueue_l.h \ jobqueue_p.h \ jobqueue_dispatch.h \ jobqueue_tomsg.h \ jobqueue_addjob.h \ jobqueue_bpd.h \ jobqueue_account.h \ result_l.h \ result_p.h #iheaderdir=@aqbanking_headerdir_am@/aqhbci #iheader_HEADERS= libhbcijob_la_SOURCES=\ job.c \ job_commit.c \ job_commit_key.c \ job_crypt.c \ job_swift.c \ jobqueue.c \ jobqueue_dispatch.c \ jobqueue_tomsg.c \ jobqueue_addjob.c \ jobqueue_bpd.c \ jobqueue_account.c \ result.c EXTRA_DIST=\ job_virtual.c \ job_new.c typedefs: for d in $(SUBDIRS); do \ $(MAKE) -C $$d typedefs; \ done typefiles: $(typefiles) $(gwenhywfar_bindir)/typemaker -d AQHBCI_API $(typefiles) sources: for f in $(libhbcijob_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d sources; \ done cppcheck: for f in $(libhbcijob_la_SOURCES); do \ cppcheck --force $$f ; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/joblayer/job_commit_key.h0000664000175000017500000000112014043610745023554 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2020 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_JOB_COMMIT_KEY_H #define AH_JOB_COMMIT_KEY_H #include "aqhbci/joblayer/job_l.h" void AH_Job_Commit_Key(AH_JOB *j, GWEN_DB_NODE *dbRd); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/joblayer/job_swift.c0000664000175000017500000002016714546575650022574 00000000000000/*************************************************************************** begin : Frin Oct 03 2020 copyright : (C) 2020 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "job_swift.h" #include "aqhbci/banking/user_l.h" #include #include #include #include /* ------------------------------------------------------------------------------------------------ * forward declarations * ------------------------------------------------------------------------------------------------ */ static void _parseAndProbablyAddDescriptor(const char *sName, const char *family, int version1, AB_SWIFT_DESCR_LIST *descrList, AB_SWIFT_DESCR_LIST *returnDescrList); /* ------------------------------------------------------------------------------------------------ * implementations * ------------------------------------------------------------------------------------------------ */ AB_SWIFT_DESCR_LIST *AH_Job_GetSwiftDescriptorsSupportedByJob(AH_JOB *j, const char *paramDbGroupName, const char *paramDbVarName, const char *family, int version1) { GWEN_DB_NODE *dbParams; AB_BANKING *ab; AB_SWIFT_DESCR_LIST *descrList; AB_SWIFT_DESCR_LIST *returnDescrList; int i; dbParams=AH_Job_GetParams(j); assert(dbParams); ab=AH_Job_GetBankingApi(j); assert(ab); if (paramDbGroupName && *paramDbGroupName) { dbParams=GWEN_DB_GetGroup(dbParams, GWEN_PATH_FLAGS_NAMEMUSTEXIST, paramDbGroupName); if (dbParams==NULL) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Group \"%s\" not found in params for job \"%s\"", paramDbGroupName, AH_Job_GetName(j)); return NULL; } } descrList=AB_Banking_GetSwiftDescriptorsForImExporter(ab, "xml"); if (descrList==NULL) { DBG_ERROR(AQHBCI_LOGDOMAIN, "No SWIFT descriptors found for XML imexporter (job \"%s\")", AH_Job_GetName(j)); return NULL; } returnDescrList=AB_SwiftDescr_List_new(); for (i=0; i<100; i++) { const char *s; s=GWEN_DB_GetCharValue(dbParams, paramDbVarName, i, NULL); if (s==NULL) { if (i==0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "No supported param stored in params (%s/%s)", paramDbGroupName?paramDbGroupName:"", paramDbVarName?paramDbVarName:""); } break; } else _parseAndProbablyAddDescriptor(s, family, version1, descrList, returnDescrList); } /* for */ AB_SwiftDescr_List_free(descrList); if (AB_SwiftDescr_List_GetCount(returnDescrList)==0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "No matching descriptors found for %s_%03d_* (job %s)", family?family:"", version1, AH_Job_GetName(j)); AB_SwiftDescr_List_free(returnDescrList); return NULL; } return returnDescrList; } void _parseAndProbablyAddDescriptor(const char *sName, const char *family, int version1, AB_SWIFT_DESCR_LIST *descrList, AB_SWIFT_DESCR_LIST *returnDescrList) { AB_SWIFT_DESCR *tmpDescr; tmpDescr=AB_SwiftDescr_FromString(sName); if (tmpDescr) { if (AB_SwiftDescr_Matches(tmpDescr, family, version1, 0, 0)) { AB_SWIFT_DESCR *descrFromList; /* found a candidate */ descrFromList=AB_SwiftDescr_List_FindFirst(descrList, AB_SwiftDescr_GetFamily(tmpDescr), AB_SwiftDescr_GetVersion1(tmpDescr), AB_SwiftDescr_GetVersion2(tmpDescr), AB_SwiftDescr_GetVersion3(tmpDescr)); if (descrFromList) { AB_SWIFT_DESCR *descrCopy; /* store name of selected profile */ AB_SwiftDescr_SetAlias2(descrFromList, sName); DBG_INFO(AQHBCI_LOGDOMAIN, "Adding matching profile [%s] (%s)", AB_SwiftDescr_GetAlias1(tmpDescr), AB_SwiftDescr_GetAlias2(tmpDescr)); /* copy to return list */ descrCopy=AB_SwiftDescr_dup(descrFromList); AB_SwiftDescr_List_Add(descrCopy, returnDescrList); } } else { DBG_INFO(AQHBCI_LOGDOMAIN, "Param [%s] does not match family %s.%d", sName, family, version1); } } else { DBG_INFO(AQHBCI_LOGDOMAIN, "Could not create SWIFT descriptor from string \"%s\", ignoring", sName); } } AB_SWIFT_DESCR_LIST *AH_Job_GetSwiftDescriptorsSupportedByUser(AH_JOB *j, const char *family, int version1) { GWEN_DB_NODE *dbParams; AB_BANKING *ab; const GWEN_STRINGLIST *userDescriptors; GWEN_STRINGLISTENTRY *se; AB_SWIFT_DESCR_LIST *descrList; AB_SWIFT_DESCR_LIST *returnDescrList; AB_USER *user; dbParams=AH_Job_GetParams(j); assert(dbParams); ab=AH_Job_GetBankingApi(j); assert(ab); user=AH_Job_GetUser(j); assert(user); userDescriptors=AH_User_GetSepaDescriptors(user); if (GWEN_StringList_Count(userDescriptors)==0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "No SEPA descriptor found, please update your account information"); return NULL; } descrList=AB_Banking_GetSwiftDescriptorsForImExporter(ab, "xml"); if (descrList==NULL) { DBG_ERROR(AQHBCI_LOGDOMAIN, "No SWIFT descriptors found for XML imexporter (job \"%s\")", AH_Job_GetName(j)); return NULL; } returnDescrList=AB_SwiftDescr_List_new(); se=GWEN_StringList_FirstEntry(userDescriptors); while (se) { const char *s; s=GWEN_StringListEntry_Data(se); if (s && *s) { AB_SWIFT_DESCR *tmpDescr; DBG_INFO(AQHBCI_LOGDOMAIN, "Checking user supported param [%s] (job \"%s\")", s, AH_Job_GetName(j)); tmpDescr=AB_SwiftDescr_FromString(s); if (tmpDescr) { if (AB_SwiftDescr_Matches(tmpDescr, family, version1, 0, 0)) { AB_SWIFT_DESCR *descrFromList; /* found a candidate */ descrFromList=AB_SwiftDescr_List_FindFirst(descrList, AB_SwiftDescr_GetFamily(tmpDescr), AB_SwiftDescr_GetVersion1(tmpDescr), AB_SwiftDescr_GetVersion2(tmpDescr), AB_SwiftDescr_GetVersion3(tmpDescr)); if (descrFromList) { AB_SWIFT_DESCR *descrCopy; /* store name of selected profile */ AB_SwiftDescr_SetAlias2(descrFromList, s); DBG_INFO(AQHBCI_LOGDOMAIN, "Adding matching profile [%s] (%s)", AB_SwiftDescr_GetAlias1(descrFromList), AB_SwiftDescr_GetAlias2(descrFromList)); /* copy to return list */ descrCopy=AB_SwiftDescr_dup(descrFromList); AB_SwiftDescr_List_Add(descrCopy, returnDescrList); } } else { DBG_INFO(AQHBCI_LOGDOMAIN, "Param [%s] does not match family %s.%03d", s, family, version1); } } else { DBG_INFO(AQHBCI_LOGDOMAIN, "Could not create SWIFT descriptor from string \"%s\" (job \"%s\"), ignoring", s, AH_Job_GetName(j)); } } se=GWEN_StringListEntry_Next(se); } AB_SwiftDescr_List_free(descrList); if (AB_SwiftDescr_List_GetCount(returnDescrList)==0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "No matching descriptors found for %s_%03d_* (job %s)", family?family:"", version1, AH_Job_GetName(j)); AB_SwiftDescr_List_free(returnDescrList); return NULL; } return returnDescrList; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/joblayer/jobqueue_bpd.c0000664000175000017500000003457614576127360023255 00000000000000/*************************************************************************** begin : Wed Jan 12 2022 copyright : (C) 2020 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "jobqueue_bpd.h" #include "aqhbci/banking/user_l.h" #include "aqbanking/i18n_l.h" #include #include /* ------------------------------------------------------------------------------------------------ * definitions * ------------------------------------------------------------------------------------------------ */ #define AH_JOBQUEUE_CHECKADDR_RESULT_CONTAINS_TYPE 1 #define AH_JOBQUEUE_CHECKADDR_RESULT_CONTAINS_ADDR 2 /* ------------------------------------------------------------------------------------------------ * forward declarations * ------------------------------------------------------------------------------------------------ */ static int _getJobGroup(GWEN_DB_NODE *dbJob, const char *groupName, GWEN_DB_NODE **pResult); static void _readLanguages(GWEN_DB_NODE *dbRd, AH_BPD *bpd); static void _readVersions(GWEN_DB_NODE *dbRd, AH_BPD *bpd); static void _readCommParams(GWEN_DB_NODE *dbJob, AH_BPD *bpd); static void _checkCommParams(const AB_USER *user, const AH_BPD *newBpd); static GWEN_BUFFER *_normalizeUrlToBuffer(const char *urlString); static GWEN_BUFFER *_urlToBuffer(const GWEN_URL *url); static int _hasMatchingServerTypeAndAddr(const char *currentAddr, int currentType, const AH_BPD_ADDR_LIST *addrList); static void _logMatchingAddresses(const AH_BPD_ADDR_LIST *addrList, int currentType); static void _readPinTanBpd(GWEN_DB_NODE *dbJob, AH_BPD *bpd, int protocolVersion); static void _readBpdJobs(GWEN_DB_NODE *dbJob, AH_BPD *bpd, GWEN_MSGENGINE *msgEngine); static int _isBpdJobSegment(GWEN_MSGENGINE *msgEngine, const char *segmentName, int segmentVersion); static void _dumpBpdAddr(const AH_BPD_ADDR *ba); /* ------------------------------------------------------------------------------------------------ * implementations * ------------------------------------------------------------------------------------------------ */ void AH_JobQueue_ReadBpd(AH_JOBQUEUE *jq, GWEN_DB_NODE *dbResponses) { GWEN_DB_NODE *dbBpd=NULL; AH_BPD *bpd; const char *p; int rv; AB_USER *user; GWEN_MSGENGINE *msgEngine; DBG_DEBUG(AQHBCI_LOGDOMAIN, "Extracting BPD"); user=AH_JobQueue_GetUser(jq); msgEngine=AH_User_GetMsgEngine(user); assert(msgEngine); rv=_getJobGroup(dbResponses, "bpd", &dbBpd); if (rv>=0) { DBG_NOTICE(AQHBCI_LOGDOMAIN, "Found BPD, replacing existing"); /* create new BPD */ bpd=AH_Bpd_new(); /* read version */ AH_Bpd_SetBpdVersion(bpd, GWEN_DB_GetIntValue(dbBpd, "version", 0, 0)); /* read bank name */ p=GWEN_DB_GetCharValue(dbBpd, "name", 0, 0); if (p) AH_Bpd_SetBankName(bpd, p); /* read message and job limits */ AH_Bpd_SetJobTypesPerMsg(bpd, GWEN_DB_GetIntValue(dbBpd, "jobtypespermsg", 0, 0)); AH_Bpd_SetMaxMsgSize(bpd, GWEN_DB_GetIntValue(dbBpd, "maxmsgsize", 0, 0)); _readLanguages(dbBpd, bpd); _readVersions(dbBpd, bpd); _readCommParams(dbResponses, bpd); _checkCommParams(user, bpd); _readPinTanBpd(dbResponses, bpd, GWEN_MsgEngine_GetProtocolVersion(msgEngine)); _readBpdJobs(dbResponses, bpd, msgEngine); /* set BPD */ AH_User_SetBpd(user, bpd); } else { DBG_INFO(AQHBCI_LOGDOMAIN, "No BPD in responses"); } } int _getJobGroup(GWEN_DB_NODE *dbJob, const char *groupName, GWEN_DB_NODE **pResult) { GWEN_DB_NODE *dbRd; dbRd=GWEN_DB_GetGroup(dbJob, GWEN_PATH_FLAGS_NAMEMUSTEXIST, groupName); if (dbRd==NULL) { DBG_DEBUG(AQHBCI_LOGDOMAIN, "Group \"%s\" not found in response", groupName); return GWEN_ERROR_NOT_FOUND; } dbRd=GWEN_DB_GetGroup(dbRd, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "data"); if (dbRd==NULL) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Missing \"data\" group inside group \"%s\"", groupName); return GWEN_ERROR_INVALID; } dbRd=GWEN_DB_GetGroup(dbRd, GWEN_PATH_FLAGS_NAMEMUSTEXIST, groupName); if (dbRd==NULL) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Missing effective group \"%s\" inside response", groupName); return GWEN_ERROR_INVALID; } *pResult=dbRd; return 0; } void _readLanguages(GWEN_DB_NODE *dbRd, AH_BPD *bpd) { GWEN_DB_NODE *n; /* read languages */ n=GWEN_DB_GetGroup(dbRd, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "languages"); if (n) { int i; for (i=0;; i++) { int k; k=GWEN_DB_GetIntValue(n, "language", i, 0); if (k) { if (AH_Bpd_AddLanguage(bpd, k)) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Too many languages (%d)", i); break; } } else break; } /* for */ } /* if languages */ } void _readVersions(GWEN_DB_NODE *dbRd, AH_BPD *bpd) { GWEN_DB_NODE *n; /* read supported version */ n=GWEN_DB_GetGroup(dbRd, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "versions"); if (n) { int i; for (i=0;; i++) { int k; k=GWEN_DB_GetIntValue(n, "version", i, 0); if (k) { if (AH_Bpd_AddHbciVersion(bpd, k)) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Too many versions (%d)", i); break; } } else break; } /* for */ } /* if versions */ } void _readCommParams(GWEN_DB_NODE *dbJob, AH_BPD *bpd) { int rv; GWEN_DB_NODE *dbRd=NULL; /* communication parameters */ rv=_getJobGroup(dbJob, "ComData", &dbRd); if (rv==0) { GWEN_DB_NODE *currService; DBG_DEBUG(AQHBCI_LOGDOMAIN, "Found communication infos"); currService=GWEN_DB_FindFirstGroup(dbRd, "service"); while (currService) { AH_BPD_ADDR *ba; ba=AH_BpdAddr_FromDb(currService); if (ba) { _dumpBpdAddr(ba); /* debug */ AH_Bpd_AddAddr(bpd, ba); } currService=GWEN_DB_FindNextGroup(currService, "service"); } } /* if ComData found */ } void _checkCommParams(const AB_USER *user, const AH_BPD *newBpd) { if (user && newBpd) { const GWEN_URL *url; const AH_BPD_ADDR_LIST *addrList; int checkResult; addrList=AH_Bpd_GetAddrList(newBpd); url=AH_User_GetServerUrl(user); if (addrList && url) { GWEN_BUFFER *ubuf; const char *currentBankAddr; int t; ubuf=_urlToBuffer(url); if (AH_User_GetCryptMode(user)==AH_CryptMode_Pintan) t=AH_BPD_AddrTypeSSL; else t=AH_BPD_AddrTypeTCP; currentBankAddr=GWEN_Buffer_GetStart(ubuf); checkResult=_hasMatchingServerTypeAndAddr(GWEN_Buffer_GetStart(ubuf), t, addrList); if (checkResult & AH_JOBQUEUE_CHECKADDR_RESULT_CONTAINS_ADDR) GWEN_Gui_ProgressLog2(0, GWEN_LoggerLevel_Info, I18N("New bank info confirms current server address (%s)"), currentBankAddr); else { if (checkResult & AH_JOBQUEUE_CHECKADDR_RESULT_CONTAINS_TYPE) { GWEN_Gui_ProgressLog2(0, GWEN_LoggerLevel_Warning, I18N("Bank server address changed (was: %s), please consider using one of the following:"), currentBankAddr); _logMatchingAddresses(addrList, t); } else { GWEN_Gui_ProgressLog2(0, GWEN_LoggerLevel_Warning, I18N("New bank info no longer contains an appropriate server address")); } } GWEN_Buffer_free(ubuf); } } } GWEN_BUFFER *_urlToBuffer(const GWEN_URL *url) { GWEN_BUFFER *ubuf; const char *s; ubuf=GWEN_Buffer_new(0, 256, 0, 1); s=GWEN_Url_GetServer(url); if (s && *s) GWEN_Buffer_AppendString(ubuf, s); s=GWEN_Url_GetPath(url); if (s && *s) GWEN_Buffer_AppendString(ubuf, s); return ubuf; } GWEN_BUFFER *_normalizeUrlToBuffer(const char *urlString) { if (urlString) { GWEN_URL *url; url=GWEN_Url_fromString(urlString); if (url) { GWEN_BUFFER *ubuf; ubuf=_urlToBuffer(url); GWEN_Url_free(url); return ubuf; } } return NULL; } int _hasMatchingServerTypeAndAddr(const char *currentAddr, int currentType, const AH_BPD_ADDR_LIST *addrList) { int result=0; if (addrList) { const AH_BPD_ADDR *ba; ba=AH_BpdAddr_List_First(addrList); while(ba) { if (AH_BpdAddr_GetType(ba)==currentType) { const char *newAddr; result|=AH_JOBQUEUE_CHECKADDR_RESULT_CONTAINS_TYPE; newAddr=AH_BpdAddr_GetAddr(ba); if (newAddr && *newAddr) { GWEN_BUFFER *newAddrBuf; newAddrBuf=_normalizeUrlToBuffer(newAddr); if (newAddrBuf && strcasecmp(currentAddr, GWEN_Buffer_GetStart(newAddrBuf))==0) result|=AH_JOBQUEUE_CHECKADDR_RESULT_CONTAINS_ADDR; GWEN_Buffer_free(newAddrBuf); } } ba=AH_BpdAddr_List_Next(ba); } } return result; } void _logMatchingAddresses(const AH_BPD_ADDR_LIST *addrList, int currentType) { if (addrList) { const AH_BPD_ADDR *ba; ba=AH_BpdAddr_List_First(addrList); while(ba) { if (AH_BpdAddr_GetType(ba)==currentType) { const char *newAddr; newAddr=AH_BpdAddr_GetAddr(ba); if (newAddr && *newAddr) GWEN_Gui_ProgressLog2(0, GWEN_LoggerLevel_Warning, "- %s", newAddr); } ba=AH_BpdAddr_List_Next(ba); } } } void _readPinTanBpd(GWEN_DB_NODE *dbJob, AH_BPD *bpd, int protocolVersion) { int rv; GWEN_DB_NODE *dbRd=NULL; /* special extension of BPD for PIN/TAN mode */ rv=_getJobGroup(dbJob, "PinTanBPD", &dbRd); if (rv==0) { GWEN_DB_NODE *bn; GWEN_DB_NODE *currJob; bn=AH_Bpd_GetBpdJobs(bpd, protocolVersion); assert(bn); currJob=GWEN_DB_FindFirstGroup(dbRd, "job"); while (currJob) { const char *jobName; int needTAN; GWEN_DB_NODE *dbJob; jobName=GWEN_DB_GetCharValue(currJob, "job", 0, 0); assert(jobName); dbJob=GWEN_DB_GetGroup(bn, GWEN_DB_FLAGS_DEFAULT, jobName); assert(dbJob); needTAN=strcasecmp(GWEN_DB_GetCharValue(currJob, "needTan", 0, "N"), "J")==0; GWEN_DB_SetIntValue(dbJob, GWEN_DB_FLAGS_OVERWRITE_VARS, "needTan", needTAN); currJob=GWEN_DB_FindNextGroup(currJob, "job"); } /* while */ } /* if PIN/TAN extension found */ } void _readBpdJobs(GWEN_DB_NODE *dbJob, AH_BPD *bpd, GWEN_MSGENGINE *msgEngine) { GWEN_DB_NODE *n; /* check for BPD jobs */ n=GWEN_DB_GetFirstGroup(dbJob); while (n) { GWEN_DB_NODE *dbRd; dbRd=GWEN_DB_GetGroup(n, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "data"); if (dbRd) dbRd=GWEN_DB_GetFirstGroup(dbRd); if (dbRd) { const char *segmentName; int segmentVersion; /* check for BPD job */ segmentName=GWEN_DB_GroupName(dbRd); segmentVersion=GWEN_DB_GetIntValue(dbRd, "head/version", 0, 0); if (_isBpdJobSegment(msgEngine, segmentName, segmentVersion)) { GWEN_DB_NODE *dbBpdJobs; GWEN_DB_NODE *dbNewBpdJob; char numbuffer[32]; DBG_NOTICE(AQHBCI_LOGDOMAIN, "Found BPD job \"%s\"", segmentName); dbBpdJobs=AH_Bpd_GetBpdJobs(bpd, GWEN_MsgEngine_GetProtocolVersion(msgEngine)); assert(dbBpdJobs); dbNewBpdJob=GWEN_DB_GetGroup(dbBpdJobs, GWEN_DB_FLAGS_DEFAULT, segmentName); assert(dbNewBpdJob); if (GWEN_Text_NumToString(segmentVersion, numbuffer, sizeof(numbuffer)-1, 0)<1) { DBG_NOTICE(AQHBCI_LOGDOMAIN, "Buffer too small"); abort(); } dbNewBpdJob=GWEN_DB_GetGroup(dbNewBpdJob, GWEN_DB_FLAGS_OVERWRITE_GROUPS, numbuffer); assert(dbNewBpdJob); GWEN_DB_AddGroupChildren(dbNewBpdJob, dbRd); /* remove "head" and "segment" group */ GWEN_DB_DeleteGroup(dbNewBpdJob, "head"); GWEN_DB_DeleteGroup(dbNewBpdJob, "segment"); DBG_DEBUG(AQHBCI_LOGDOMAIN, "Added BPD Job %s:%d", segmentName, segmentVersion); } } n=GWEN_DB_GetNextGroup(n); } /* while */ } int _isBpdJobSegment(GWEN_MSGENGINE *msgEngine, const char *segmentName, int segmentVersion) { GWEN_XMLNODE *xmlDescrForSegNameAndVer; DBG_DEBUG(AQHBCI_LOGDOMAIN, "Checking whether \"%s\" version %d is a BPD job", segmentName, segmentVersion); /* get segment description (first try id, then code) */ xmlDescrForSegNameAndVer=GWEN_MsgEngine_FindNodeByProperty(msgEngine, "SEG", "id", segmentVersion, segmentName); if (xmlDescrForSegNameAndVer==NULL) xmlDescrForSegNameAndVer=GWEN_MsgEngine_FindNodeByProperty(msgEngine, "SEG", "code", segmentVersion, segmentName); if (xmlDescrForSegNameAndVer) { DBG_DEBUG(AQHBCI_LOGDOMAIN, "Found a candidate"); if (atoi(GWEN_XMLNode_GetProperty(xmlDescrForSegNameAndVer, "isbpdjob", "0"))) { DBG_DEBUG(AQHBCI_LOGDOMAIN, "Segment \"%s\" is a BPD job", segmentName); return 1; } else { DBG_DEBUG(AQHBCI_LOGDOMAIN, "Segment \"%s\" is known but not as a BPD job", segmentName); } } else { DBG_WARN(AQHBCI_LOGDOMAIN, "Did not find segment \"%s\" (%d)", segmentName, segmentVersion); } return 0; } void _dumpBpdAddr(const AH_BPD_ADDR *ba) { GWEN_BUFFER *tbuf; const char *s; tbuf=GWEN_Buffer_new(0, 256, 0, 1); switch (AH_BpdAddr_GetType(ba)) { case AH_BPD_AddrTypeTCP: GWEN_Buffer_AppendString(tbuf, "TCP: "); break; case AH_BPD_AddrTypeBTX: GWEN_Buffer_AppendString(tbuf, "BTX: "); break; case AH_BPD_AddrTypeSSL: GWEN_Buffer_AppendString(tbuf, "SSL: "); break; default: GWEN_Buffer_AppendString(tbuf, ": "); break; } s=AH_BpdAddr_GetAddr(ba); if (s && *s) GWEN_Buffer_AppendString(tbuf, s); else GWEN_Buffer_AppendString(tbuf, ""); s=AH_BpdAddr_GetSuffix(ba); if (s && *s) { GWEN_Buffer_AppendString(tbuf, ", "); GWEN_Buffer_AppendString(tbuf, s); } GWEN_Buffer_AppendString(tbuf, ", "); switch (AH_BpdAddr_GetFType(ba)) { case AH_BPD_FilterTypeNone: GWEN_Buffer_AppendString(tbuf, "none"); break; case AH_BPD_FilterTypeBase64: GWEN_Buffer_AppendString(tbuf, "base64"); break; case AH_BPD_FilterTypeUUE: GWEN_Buffer_AppendString(tbuf, "uue"); break; default: GWEN_Buffer_AppendString(tbuf, ""); break; } DBG_DEBUG(AQHBCI_LOGDOMAIN, "Server address found: %s", GWEN_Buffer_GetStart(tbuf)); GWEN_Gui_ProgressLog2(0, GWEN_LoggerLevel_Info, I18N("Server address found: %s"), GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/joblayer/jobqueue_dispatch.h0000664000175000017500000000116314043610745024267 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2021 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_JOBQUEUE_DISPATCH_H #define AH_JOBQUEUE_DISPATCH_H #include "aqhbci/joblayer/jobqueue_l.h" int AH_JobQueue_DispatchMessage(AH_JOBQUEUE *jq, AH_MSG *msg, GWEN_DB_NODE *db); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/joblayer/jobqueue_addjob.h0000664000175000017500000000114414043610745023712 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2021 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_JOBQUEUE_ADDJOB_H #define AH_JOBQUEUE_ADDJOB_H #include "aqhbci/joblayer/jobqueue_l.h" AH_JOBQUEUE_ADDRESULT AH_JobQueue_AddJob(AH_JOBQUEUE *jq, AH_JOB *j); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/joblayer/jobqueue_l.h0000664000175000017500000001032014214726437022724 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_JOBQUEUE_L_H #define AH_JOBQUEUE_L_H #include "aqhbci/joblayer/job_l.h" typedef struct AH_JOBQUEUE AH_JOBQUEUE; /** jobs in the queue need encrytion */ #define AH_JOBQUEUE_FLAGS_CRYPT 0x00000001 /** jobs in the queue need signature */ #define AH_JOBQUEUE_FLAGS_SIGN 0x00000002 /** job queue contains a dialog job */ #define AH_JOBQUEUE_FLAGS_ISDIALOG 0x00000004 /** jobs in the queue need a TAN */ #define AH_JOBQUEUE_FLAGS_NEEDTAN 0x00000010 /** set systemid "0" instead of real value */ #define AH_JOBQUEUE_FLAGS_NOSYSID 0x00000020 /** dont select iTAN mode for this queue (i.e. use single step mode) */ #define AH_JOBQUEUE_FLAGS_NOITAN 0x00000040 /** use "1" as signature counter value in signatures, not the real sequence counter */ #define AH_JOBQUEUE_FLAGS_SIGNSEQONE 0x00000080 #define AH_JOBQUEUE_FLAGS_COPYMASK 0x0000ffff /** job queue has been sent to outbox */ #define AH_JOBQUEUE_FLAGS_OUTBOX 0x00040000 /** at least on job in the queue has warnings */ #define AH_JOBQUEUE_FLAGS_HASWARNINGS 0x00080000 /** at least on job in the queue has errors */ #define AH_JOBQUEUE_FLAGS_HASERRORS 0x00100000 /** dialog was aborted by peer */ #define AH_JOBQUEUE_FLAGS_DIALOG_ABORTED 0x00200000 /** received an error code about access problems (e.g. user key blocked at the bank) */ #define AH_JOBQUEUE_FLAGS_ACCESS_PROBLEM 0x00400000 /** used tan was not really used, free to reuse */ #define AH_JOBQUEUE_FLAGS_RECYCLE_TAN 0x00800000 /** bad pin flagged by server */ #define AH_JOBQUEUE_FLAGS_BAD_PIN 0x01000000 #define AH_JOBQUEUE_FLAGS_IGNOREACCOUNTS 0x02000000 #include #include "aqhbci/msglayer/message_l.h" typedef enum { AH_JobQueueAddResultOk=0, AH_JobQueueAddResultJobLimit, AH_JobQueueAddResultQueueFull, AH_JobQueueAddResultError, } AH_JOBQUEUE_ADDRESULT; GWEN_LIST_FUNCTION_DEFS(AH_JOBQUEUE, AH_JobQueue); AH_JOBQUEUE *AH_JobQueue_new(AB_USER *u); void AH_JobQueue_free(AH_JOBQUEUE *jq); void AH_JobQueue_Attach(AH_JOBQUEUE *jq); AH_JOBQUEUE *AH_JobQueue_fromQueue(AH_JOBQUEUE *oldq); AB_USER *AH_JobQueue_GetUser(const AH_JOBQUEUE *jq); AH_JOBQUEUE_ADDRESULT AH_JobQueue_AddJob(AH_JOBQUEUE *jq, AH_JOB *j); AH_JOB_LIST *AH_JobQueue_GetJobList(const AH_JOBQUEUE *jq); AH_JOB_LIST *AH_JobQueue_TakeJobList(AH_JOBQUEUE *jq); AH_JOB *AH_JobQueue_GetFirstJob(const AH_JOBQUEUE *jq); unsigned int AH_JobQueue_GetCount(const AH_JOBQUEUE *jq); void AH_JobQueue_Dump(AH_JOBQUEUE *jq, FILE *f, unsigned int insert); void AH_JobQueue_DumpJobList(const AH_JOBQUEUE *jq, FILE *f, unsigned int insert); uint32_t AH_JobQueue_GetFlags(const AH_JOBQUEUE *jq); void AH_JobQueue_SetFlags(AH_JOBQUEUE *jq, uint32_t f); void AH_JobQueue_AddFlags(AH_JOBQUEUE *jq, uint32_t f); void AH_JobQueue_SubFlags(AH_JOBQUEUE *jq, uint32_t f); void AH_JobQueue_SetJobStatusOnMatch(AH_JOBQUEUE *jq, AH_JOB_STATUS matchSt, AH_JOB_STATUS newSt); const char *AH_JobQueue_GetUsedTan(const AH_JOBQUEUE *jq); void AH_JobQueue_SetUsedTan(AH_JOBQUEUE *jq, const char *s); const char *AH_JobQueue_GetUsedPin(const AH_JOBQUEUE *jq); void AH_JobQueue_SetUsedPin(AH_JOBQUEUE *jq, const char *s); int AH_JobQueue_GetSecProfile(const AH_JOBQUEUE *jq); void AH_JobQueue_SetSecProfile(AH_JOBQUEUE *jq, int i); int AH_JobQueue_GetSecClass(const AH_JOBQUEUE *jq); void AH_JobQueue_SetSecClass(AH_JOBQUEUE *jq, int i); GWEN_STRINGLIST *AH_JobQueue_GetSigners(const AH_JOBQUEUE *jq); void AH_JobQueue_SetSigners(AH_JOBQUEUE *jq, GWEN_STRINGLIST *signers); AH_JOBQUEUE *AH_JobQueue_GetReferenceQueue(const AH_JOBQUEUE *jq); /** * Internally calls @ref AH_JobQueue_Attach. */ void AH_JobQueue_SetReferenceQueue(AH_JOBQUEUE *jq, AH_JOBQUEUE *refq); #endif /* AH_JOBQUEUE_L_H */ aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/joblayer/job.c0000664000175000017500000011570514576274523021361 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "job_p.h" #include "aqhbci/aqhbci_l.h" #include "aqhbci/msglayer/hbci_l.h" #include "aqhbci/banking/user_l.h" #include "aqhbci/banking/account_l.h" #include "aqhbci/banking/provider_l.h" #include "aqhbci/banking/provider.h" #include #include #include #include #include #include #include #include GWEN_LIST_FUNCTIONS(AH_JOB, AH_Job); GWEN_LIST2_FUNCTIONS(AH_JOB, AH_Job); GWEN_INHERIT_FUNCTIONS(AH_JOB); static void _flagsToBuffer(uint32_t flags, GWEN_BUFFER *dbuf); void AH_Job_free(AH_JOB *j) { if (j) { assert(j->usage); if (--(j->usage)==0) { GWEN_StringList_free(j->challengeParams); GWEN_StringList_free(j->log); GWEN_StringList_free(j->signers); GWEN_StringList_free(j->sepaDescriptors); free(j->responseName); free(j->code); free(j->name); free(j->dialogId); free(j->expectedSigner); free(j->expectedCrypter); free(j->usedTan); GWEN_MsgEngine_free(j->msgEngine); GWEN_DB_Group_free(j->jobParams); GWEN_DB_Group_free(j->jobArguments); GWEN_DB_Group_free(j->jobResponses); GWEN_DB_Group_free(j->sepaProfile); AH_Result_List_free(j->msgResults); AH_Result_List_free(j->segResults); AB_Message_List_free(j->messages); AB_Transaction_List_free(j->transferList); AB_Transaction_List2_free(j->commandList); GWEN_LIST_FINI(AH_JOB, j); GWEN_INHERIT_FINI(AH_JOB, j); GWEN_FREE_OBJECT(j); } } } int AH_Job_SampleBpdVersions(const char *name, AB_USER *u, GWEN_DB_NODE *dbResult) { GWEN_XMLNODE *node; const char *paramName; GWEN_DB_NODE *bpdgrp; const AH_BPD *bpd; GWEN_MSGENGINE *e; assert(name); assert(u); DBG_INFO(AQHBCI_LOGDOMAIN, "Sampling BPD versions for job \"%s\"", name?name:""); /* get job descriptions */ e=AH_User_GetMsgEngine(u); assert(e); bpd=AH_User_GetBpd(u); if (AH_User_GetHbciVersion(u)==0) GWEN_MsgEngine_SetProtocolVersion(e, 210); else GWEN_MsgEngine_SetProtocolVersion(e, AH_User_GetHbciVersion(u)); GWEN_MsgEngine_SetMode(e, AH_CryptMode_toString(AH_User_GetCryptMode(u))); /* first select any version, we simply need to know the BPD job name */ node=GWEN_MsgEngine_FindNodeByProperty(e, "JOB", "id", 0, name); if (!node) { DBG_INFO(AQHBCI_LOGDOMAIN, "Job \"%s\" not supported by local XML files", name); return GWEN_ERROR_NOT_FOUND; } /* get some properties */ paramName=GWEN_XMLNode_GetProperty(node, "params", ""); if (bpd) { bpdgrp=AH_Bpd_GetBpdJobs(bpd, AH_User_GetHbciVersion(u)); assert(bpdgrp); } else bpdgrp=NULL; if (paramName && *paramName) { GWEN_DB_NODE *jobBPD; DBG_INFO(AQHBCI_LOGDOMAIN, "Job \"%s\" needs BPD job \"%s\"", name, paramName); if (!bpd) { DBG_ERROR(AQHBCI_LOGDOMAIN, "No BPD"); return GWEN_ERROR_BAD_DATA; } /* get BPD job */ jobBPD=GWEN_DB_GetGroup(bpdgrp, GWEN_PATH_FLAGS_NAMEMUSTEXIST, paramName); if (jobBPD) { /* children are one group per version */ jobBPD=GWEN_DB_GetFirstGroup(jobBPD); } /* check for jobs for which we have a BPD */ while (jobBPD) { int version; /* get version from BPD */ version=atoi(GWEN_DB_GroupName(jobBPD)); /* now get the correct version of the JOB */ DBG_DEBUG(AQHBCI_LOGDOMAIN, "Checking Job %s (%d)", name, version); node=GWEN_MsgEngine_FindNodeByProperty(e, "JOB", "id", version, name); if (node) { GWEN_DB_NODE *cpy; cpy=GWEN_DB_Group_dup(jobBPD); GWEN_DB_AddGroup(dbResult, cpy); } jobBPD=GWEN_DB_GetNextGroup(jobBPD); } /* while */ } /* if paramName */ else { DBG_ERROR(AQHBCI_LOGDOMAIN, "Job has no BPDs"); return 0; } return 0; } int AH_Job_GetMaxVersionUpUntil(const char *name, AB_USER *u, int maxVersion) { GWEN_DB_NODE *db; int rv; db=GWEN_DB_Group_new("bpd"); rv=AH_Job_SampleBpdVersions(name, u, db); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); GWEN_DB_Group_free(db); return rv; } else { GWEN_DB_NODE *dbT; int m=-1; /* determine maximum version */ dbT=GWEN_DB_GetFirstGroup(db); while (dbT) { int v; v=atoi(GWEN_DB_GroupName(dbT)); if (v>0 && v>m && v<=maxVersion) m=v; dbT=GWEN_DB_GetNextGroup(dbT); } GWEN_DB_Group_free(db); DBG_DEBUG(AQHBCI_LOGDOMAIN, "Max version of [%s] up until %d: %d", name, maxVersion, m); return m; } } AB_MESSAGE_LIST *AH_Job_GetMessages(const AH_JOB *j) { assert(j); assert(j->usage); return j->messages; } int AH_Job_GetChallengeClass(const AH_JOB *j) { assert(j); assert(j->usage); return j->challengeClass; } int AH_Job_GetSegmentVersion(const AH_JOB *j) { assert(j); assert(j->usage); return j->segmentVersion; } void AH_Job_SetChallengeClass(AH_JOB *j, int i) { assert(j); assert(j->usage); j->challengeClass=i; } void AH_Job_Attach(AH_JOB *j) { assert(j); assert(j->usage); j->usage++; } int AH_Job_PrepareNextMessage(AH_JOB *j) { assert(j); assert(j->usage); if (j->nextMsgFn) { int rv; rv=j->nextMsgFn(j); if (rv==0) { /* callback flagged that no message follows */ DBG_INFO(AQHBCI_LOGDOMAIN, "Job \"%s\" says: No more messages", j->name); AH_Job_SubFlags(j, AH_JOB_FLAGS_HASMOREMSGS); return 0; } else if (rv!=1) { DBG_INFO(AQHBCI_LOGDOMAIN, "Job \"%s\" says: Error", j->name); AH_Job_SubFlags(j, AH_JOB_FLAGS_HASMOREMSGS); return rv; } } if (j->status==AH_JobStatusUnknown || j->status==AH_JobStatusError) { DBG_INFO(AQHBCI_LOGDOMAIN, "At least one message had errors, aborting job \"%s\"", j->name); AH_Job_SubFlags(j, AH_JOB_FLAGS_HASMOREMSGS); return 0; } if (j->status==AH_JobStatusToDo) { DBG_NOTICE(AQHBCI_LOGDOMAIN, "Hmm, job \"%s\" has never been sent, so we do nothing here", j->name); AH_Job_SubFlags(j, AH_JOB_FLAGS_HASMOREMSGS); return 0; } if (AH_Job_GetFlags(j) & AH_JOB_FLAGS_HASATTACHPOINT) { DBG_INFO(AQHBCI_LOGDOMAIN, "Job \"%s\" has an attachpoint, so yes, we need more messages", j->name); AH_Job_AddFlags(j, AH_JOB_FLAGS_HASMOREMSGS); AH_Job_Log(j, GWEN_LoggerLevel_Debug, "Job has an attachpoint"); return 1; } else { DBG_INFO(AQHBCI_LOGDOMAIN, "Job \"%s\" has no attachpoint", j->name); } if (!(AH_Job_GetFlags(j) & AH_JOB_FLAGS_MULTIMSG)) { DBG_NOTICE(AQHBCI_LOGDOMAIN, "Not a multi-message job \"%s\", so we don't need more messages", j->name); AH_Job_SubFlags(j, AH_JOB_FLAGS_HASMOREMSGS); return 0; } DBG_INFO(AQHBCI_LOGDOMAIN, "Multi-message job \"%s\", looking for next message", j->name); assert(j->msgNode); j->msgNode=GWEN_XMLNode_FindNextTag(j->msgNode, "MESSAGE", 0, 0); if (j->msgNode) { /* there is another message, so set flags accordingly */ DBG_NOTICE(AQHBCI_LOGDOMAIN, "Multi-message job \"%s\", still more messages", j->name); AH_Job_Log(j, GWEN_LoggerLevel_Debug, "Job has more messages"); /* sample some flags for the next message */ if (atoi(GWEN_XMLNode_GetProperty(j->msgNode, "sign", "1"))!=0) { if (j->minSigs==0) j->minSigs=1; AH_Job_AddFlags(j, AH_JOB_FLAGS_NEEDSIGN | AH_JOB_FLAGS_SIGN); } else { AH_Job_SubFlags(j, AH_JOB_FLAGS_NEEDSIGN | AH_JOB_FLAGS_SIGN); } if (atoi(GWEN_XMLNode_GetProperty(j->msgNode, "crypt", "1"))!=0) AH_Job_AddFlags(j, AH_JOB_FLAGS_NEEDCRYPT| AH_JOB_FLAGS_CRYPT); else AH_Job_SubFlags(j, AH_JOB_FLAGS_NEEDCRYPT| AH_JOB_FLAGS_CRYPT); if (atoi(GWEN_XMLNode_GetProperty(j->msgNode, "nosysid", "0"))!=0) AH_Job_AddFlags(j, AH_JOB_FLAGS_NOSYSID); else AH_Job_SubFlags(j, AH_JOB_FLAGS_NOSYSID); if (atoi(GWEN_XMLNode_GetProperty(j->msgNode, "signseqone", "0"))!=0) AH_Job_AddFlags(j, AH_JOB_FLAGS_SIGNSEQONE); else AH_Job_SubFlags(j, AH_JOB_FLAGS_SIGNSEQONE); if (atoi(GWEN_XMLNode_GetProperty(j->msgNode, "noitan", "0"))!=0) { AH_Job_AddFlags(j, AH_JOB_FLAGS_NOITAN); } else AH_Job_SubFlags(j, AH_JOB_FLAGS_NOITAN); if (atoi(GWEN_XMLNode_GetProperty(j->msgNode, "ignerrors", "0"))!=0) AH_Job_AddFlags(j, AH_JOB_FLAGS_IGNORE_ERROR); else AH_Job_SubFlags(j, AH_JOB_FLAGS_IGNORE_ERROR); AH_Job_AddFlags(j, AH_JOB_FLAGS_HASMOREMSGS); return 1; } else { DBG_INFO(AQHBCI_LOGDOMAIN, "Multi-message job \"%s\" is finished", j->name); AH_Job_Log(j, GWEN_LoggerLevel_Debug, "Job has no more messages"); AH_Job_SubFlags(j, AH_JOB_FLAGS_HASMOREMSGS); return 0; } } uint32_t AH_Job_GetId(const AH_JOB *j) { assert(j); assert(j->usage); return j->id; } void AH_Job_SetId(AH_JOB *j, uint32_t i) { assert(j); assert(j->usage); j->id=i; } const char *AH_Job_GetName(const AH_JOB *j) { assert(j); assert(j->usage); return j->name; } const char *AH_Job_GetCode(const AH_JOB *j) { assert(j); assert(j->usage); return j->code; } void AH_Job_SetCode(AH_JOB *j, const char *s) { assert(j); assert(j->usage); if (j->code) free(j->code); if (s) j->code=strdup(s); else j->code=NULL; } const char *AH_Job_GetResponseName(const AH_JOB *j) { assert(j); assert(j->usage); return j->responseName; } void AH_Job_SetResponseName(AH_JOB *j, const char *s) { assert(j); assert(j->usage); if (j->responseName) free(j->responseName); if (s) j->responseName=strdup(s); else j->responseName=NULL; } int AH_Job_GetMinSignatures(const AH_JOB *j) { assert(j); assert(j->usage); return j->minSigs; } int AH_Job_GetSecurityProfile(const AH_JOB *j) { assert(j); assert(j->usage); return j->secProfile; } int AH_Job_GetSecurityClass(const AH_JOB *j) { assert(j); assert(j->usage); return j->secClass; } int AH_Job_GetJobsPerMsg(const AH_JOB *j) { assert(j); assert(j->usage); return j->jobsPerMsg; } uint32_t AH_Job_GetFlags(const AH_JOB *j) { assert(j); assert(j->usage); return j->flags; } void AH_Job_SetFlags(AH_JOB *j, uint32_t f) { assert(j); assert(j->usage); if (j->flags!=f) { GWEN_BUFFER *bufBefore; GWEN_BUFFER *bufAfter; bufBefore=GWEN_Buffer_new(0, 128, 0, 1); bufAfter=GWEN_Buffer_new(0, 128, 0, 1); _flagsToBuffer(j->flags, bufBefore); _flagsToBuffer(f, bufAfter); DBG_INFO(AQHBCI_LOGDOMAIN, "Changing flags of job \"%s\" to %08x: %s, was %08x: %s", j->name, f, GWEN_Buffer_GetStart(bufAfter), j->flags, GWEN_Buffer_GetStart(bufBefore)); AB_Banking_LogMsgForJobId(AH_Job_GetBankingApi(j), AH_Job_GetId(j), "Changing flags to %08x: %s (was %08x: %s)", j->flags, GWEN_Buffer_GetStart(bufBefore), f, GWEN_Buffer_GetStart(bufAfter)); GWEN_Buffer_free(bufAfter); GWEN_Buffer_free(bufBefore); j->flags=f; } } void AH_Job_AddFlags(AH_JOB *j, uint32_t f) { AH_Job_SetFlags(j, j->flags|f); } void AH_Job_SubFlags(AH_JOB *j, uint32_t f) { AH_Job_SetFlags(j, j->flags&~f); } void AH_Job_LogFlags(const AH_JOB *j, const char *msg) { GWEN_BUFFER *bufFlags; bufFlags=GWEN_Buffer_new(0, 128, 0, 1); _flagsToBuffer(j->flags, bufFlags); DBG_INFO(AQHBCI_LOGDOMAIN, "%s [job \"%s\", flags %08x: %s]", msg?msg:"", j->name, j->flags, GWEN_Buffer_GetStart(bufFlags)); GWEN_Buffer_free(bufFlags); } GWEN_DB_NODE *AH_Job_GetParams(const AH_JOB *j) { assert(j); assert(j->usage); return j->jobParams; } GWEN_DB_NODE *AH_Job_GetArguments(const AH_JOB *j) { assert(j); assert(j->usage); return j->jobArguments; } GWEN_DB_NODE *AH_Job_GetResponses(const AH_JOB *j) { assert(j); assert(j->usage); return j->jobResponses; } uint32_t AH_Job_GetFirstSegment(const AH_JOB *j) { assert(j); assert(j->usage); return j->firstSegment; } void AH_Job_SetFirstSegment(AH_JOB *j, uint32_t i) { assert(j); assert(j->usage); j->firstSegment=i; } uint32_t AH_Job_GetLastSegment(const AH_JOB *j) { assert(j); assert(j->usage); return j->lastSegment; } void AH_Job_SetLastSegment(AH_JOB *j, uint32_t i) { assert(j); assert(j->usage); j->lastSegment=i; } int AH_Job_HasSegment(const AH_JOB *j, int seg) { assert(j); assert(j->usage); DBG_DEBUG(AQHBCI_LOGDOMAIN, "Job \"%s\" checked for %d: first=%d, last=%d", j->name, seg, j->firstSegment, j->lastSegment); return (seg<=j->lastSegment && seg>=j->firstSegment); } void AH_Job_AddResponse(AH_JOB *j, GWEN_DB_NODE *db) { assert(j); assert(j->usage); GWEN_DB_AddGroup(j->jobResponses, db); } AH_JOB_STATUS AH_Job_GetStatus(const AH_JOB *j) { assert(j); assert(j->usage); return j->status; } void AH_Job_SetStatus(AH_JOB *j, AH_JOB_STATUS st) { assert(j); assert(j->usage); if (j->status!=st) { GWEN_BUFFER *lbuf; lbuf=GWEN_Buffer_new(0, 64, 0, 1); DBG_INFO(AQHBCI_LOGDOMAIN, "Changing status of job \"%s\" from \"%s\" (%d) to \"%s\" (%d)", j->name, AH_Job_StatusName(j->status), j->status, AH_Job_StatusName(st), st); GWEN_Buffer_AppendString(lbuf, "Status changed from \""); GWEN_Buffer_AppendString(lbuf, AH_Job_StatusName(j->status)); GWEN_Buffer_AppendString(lbuf, "\" to \""); GWEN_Buffer_AppendString(lbuf, AH_Job_StatusName(st)); GWEN_Buffer_AppendString(lbuf, "\""); AH_Job_Log(j, GWEN_LoggerLevel_Info, GWEN_Buffer_GetStart(lbuf)); GWEN_Buffer_free(lbuf); AB_Banking_LogMsgForJobId(AH_Job_GetBankingApi(j), AH_Job_GetId(j), "Changing status from \"%s\" (%d) to \"%s\" (%d)", AH_Job_StatusName(j->status), j->status, AH_Job_StatusName(st), st); j->status=st; /* set status to original command */ if (j->commandList) { AB_TRANSACTION_LIST2_ITERATOR *jit; jit=AB_Transaction_List2_First(j->commandList); if (jit) { AB_TRANSACTION *t; AB_TRANSACTION_STATUS ts=AB_Transaction_StatusUnknown; switch (st) { case AH_JobStatusUnknown: ts=AB_Transaction_StatusUnknown; break; case AH_JobStatusToDo: ts=AB_Transaction_StatusEnqueued; break; case AH_JobStatusEnqueued: ts=AB_Transaction_StatusEnqueued; break; case AH_JobStatusEncoded: ts=AB_Transaction_StatusSending; break; case AH_JobStatusSent: ts=AB_Transaction_StatusSending; break; case AH_JobStatusAnswered: ts=AB_Transaction_StatusSending; break; case AH_JobStatusError: ts=AB_Transaction_StatusError; break; case AH_JobStatusAll: ts=AB_Transaction_StatusUnknown; break; } t=AB_Transaction_List2Iterator_Data(jit); while (t) { AB_Banking_LogMsgForJobId(AH_Job_GetBankingApi(j), AB_Transaction_GetUniqueId(t), "Changing command status to \"%s\" (%d)", AB_Transaction_Status_toString(ts), ts); AB_Transaction_SetStatus(t, ts); t=AB_Transaction_List2Iterator_Next(jit); } AB_Transaction_List2Iterator_free(jit); } /* if (jit) */ } /* if (j->commandList) */ } } void AH_Job_AddSigner(AH_JOB *j, const char *s) { GWEN_BUFFER *lbuf; assert(j); assert(j->usage); assert(s); lbuf=GWEN_Buffer_new(0, 128, 0, 1); if (!GWEN_StringList_AppendString(j->signers, s, 0, 1)) { DBG_INFO(AQHBCI_LOGDOMAIN, "Signer \"%s\" already in list", s); GWEN_Buffer_AppendString(lbuf, "Signer \""); GWEN_Text_EscapeToBufferTolerant(s, lbuf); GWEN_Buffer_AppendString(lbuf, "\" already in list"); AH_Job_Log(j, GWEN_LoggerLevel_Warning, GWEN_Buffer_GetStart(lbuf)); } else { GWEN_Buffer_AppendString(lbuf, "Signer \""); GWEN_Text_EscapeToBufferTolerant(s, lbuf); GWEN_Buffer_AppendString(lbuf, "\" added"); AH_Job_Log(j, GWEN_LoggerLevel_Info, GWEN_Buffer_GetStart(lbuf)); AB_Banking_LogMsgForJobId(AH_Job_GetBankingApi(j), AH_Job_GetId(j), "Adding signer \"%s\"", s?s:""); } GWEN_Buffer_free(lbuf); AH_Job_AddFlags(j, AH_JOB_FLAGS_SIGN); } int AH_Job_AddSigners(AH_JOB *j, const GWEN_STRINGLIST *sl) { int sCount=0; if (sl) { GWEN_STRINGLISTENTRY *se; se=GWEN_StringList_FirstEntry(sl); while (se) { AH_Job_AddSigner(j, GWEN_StringListEntry_Data(se)); sCount++; se=GWEN_StringListEntry_Next(se); } /* while */ } return sCount; } AB_USER *AH_Job_GetUser(const AH_JOB *j) { assert(j); assert(j->usage); return j->user; } const GWEN_STRINGLIST *AH_Job_GetSigners(const AH_JOB *j) { assert(j); assert(j->usage); return j->signers; } GWEN_XMLNODE *AH_Job_GetXmlNode(const AH_JOB *j) { assert(j); assert(j->usage); if (AH_Job_GetFlags(j) & AH_JOB_FLAGS_MULTIMSG) { DBG_DEBUG(AQHBCI_LOGDOMAIN, "Multi message node, returning current message node"); return j->msgNode; } return j->xmlNode; } unsigned int AH_Job_GetMsgNum(const AH_JOB *j) { assert(j); assert(j->usage); return j->msgNum; } const char *AH_Job_GetDialogId(const AH_JOB *j) { assert(j); assert(j->usage); return j->dialogId; } void AH_Job_SetMsgNum(AH_JOB *j, unsigned int i) { assert(j); assert(j->usage); j->msgNum=i; } void AH_Job_SetDialogId(AH_JOB *j, const char *s) { assert(j); assert(j->usage); assert(s); free(j->dialogId); j->dialogId=strdup(s); } const char *AH_Job_StatusName(AH_JOB_STATUS st) { switch (st) { case AH_JobStatusUnknown: return "unknown"; case AH_JobStatusToDo: return "todo"; case AH_JobStatusEnqueued: return "enqueued"; case AH_JobStatusEncoded: return "encoded"; case AH_JobStatusSent: return "sent"; case AH_JobStatusAnswered: return "answered"; case AH_JobStatusError: return "error"; case AH_JobStatusAll: return "any"; default: return "?"; } } int AH_Job_HasWarnings(const AH_JOB *j) { assert(j); assert(j->usage); return (AH_Job_GetFlags(j) & AH_JOB_FLAGS_HASWARNINGS); } int AH_Job_HasErrors(const AH_JOB *j) { assert(j); assert(j->usage); return (j->status==AH_JobStatusError) || (AH_Job_GetFlags(j) & AH_JOB_FLAGS_HASERRORS); } void AH_Job_SampleResults(AH_JOB *j) { GWEN_DB_NODE *dbCurr; assert(j); assert(j->usage); dbCurr=GWEN_DB_GetFirstGroup(j->jobResponses); while (dbCurr) { GWEN_DB_NODE *dbResults; dbResults=GWEN_DB_GetGroup(dbCurr, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "data/SegResult"); if (dbResults) { GWEN_DB_NODE *dbRes; dbRes=GWEN_DB_GetFirstGroup(dbResults); while (dbRes) { if (strcasecmp(GWEN_DB_GroupName(dbRes), "result")==0) { AH_RESULT *r; int code; const char *text; code=GWEN_DB_GetIntValue(dbRes, "resultcode", 0, 0); text=GWEN_DB_GetCharValue(dbRes, "text", 0, 0); if (code) { GWEN_BUFFER *lbuf; char numbuf[32]; GWEN_LOGGER_LEVEL ll; if (code>=9000) ll=GWEN_LoggerLevel_Error; else if (code>=3000 && code!=3920) ll=GWEN_LoggerLevel_Warning; else ll=GWEN_LoggerLevel_Info; lbuf=GWEN_Buffer_new(0, 128, 0, 1); GWEN_Buffer_AppendString(lbuf, "SegResult: "); snprintf(numbuf, sizeof(numbuf), "%d", code); GWEN_Buffer_AppendString(lbuf, numbuf); if (text) { GWEN_Buffer_AppendString(lbuf, "("); GWEN_Buffer_AppendString(lbuf, text); GWEN_Buffer_AppendString(lbuf, ")"); } AH_Job_Log(j, ll, GWEN_Buffer_GetStart(lbuf)); GWEN_Buffer_free(lbuf); AB_Banking_LogMsgForJobId(AH_Job_GetBankingApi(j), AH_Job_GetId(j), "SegResult: %d (%s)", code, text?text:""); } /* found a result */ r=AH_Result_new(code, text, GWEN_DB_GetCharValue(dbRes, "ref", 0, 0), GWEN_DB_GetCharValue(dbRes, "param", 0, 0), 0); AH_Result_List_Add(r, j->segResults); DBG_DEBUG(AQHBCI_LOGDOMAIN, "Segment result:"); if (GWEN_Logger_GetLevel(0)>=GWEN_LoggerLevel_Debug) AH_Result_Dump(r, stderr, 4); /* check result */ if (code>=9000) AH_Job_AddFlags(j, AH_JOB_FLAGS_HASERRORS); else if (code>=3000 && code<4000) AH_Job_AddFlags(j, AH_JOB_FLAGS_HASWARNINGS); } /* if result */ dbRes=GWEN_DB_GetNextGroup(dbRes); } /* while */ } /* if segResult */ else { dbResults=GWEN_DB_GetGroup(dbCurr, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "data/MsgResult"); if (dbResults) { GWEN_DB_NODE *dbRes; dbRes=GWEN_DB_GetFirstGroup(dbResults); while (dbRes) { if (strcasecmp(GWEN_DB_GroupName(dbRes), "result")==0) { AH_RESULT *r; int code; const char *text; code=GWEN_DB_GetIntValue(dbRes, "resultcode", 0, 0); text=GWEN_DB_GetCharValue(dbRes, "text", 0, 0); if (code) { GWEN_BUFFER *lbuf; char numbuf[32]; GWEN_LOGGER_LEVEL ll; if (code>=9000) ll=GWEN_LoggerLevel_Error; else if (code>=3000) ll=GWEN_LoggerLevel_Warning; else ll=GWEN_LoggerLevel_Info; lbuf=GWEN_Buffer_new(0, 128, 0, 1); GWEN_Buffer_AppendString(lbuf, "MsgResult: "); snprintf(numbuf, sizeof(numbuf), "%d", code); GWEN_Buffer_AppendString(lbuf, numbuf); if (text) { GWEN_Buffer_AppendString(lbuf, "("); GWEN_Buffer_AppendString(lbuf, text); GWEN_Buffer_AppendString(lbuf, ")"); } AH_Job_Log(j, ll, GWEN_Buffer_GetStart(lbuf)); GWEN_Buffer_free(lbuf); AB_Banking_LogMsgForJobId(AH_Job_GetBankingApi(j), AH_Job_GetId(j), "MsgResult: %d (%s)", code, text?text:""); } /* found a result */ r=AH_Result_new(code, text, GWEN_DB_GetCharValue(dbRes, "ref", 0, 0), GWEN_DB_GetCharValue(dbRes, "param", 0, 0), 1); AH_Result_List_Add(r, j->msgResults); DBG_DEBUG(AQHBCI_LOGDOMAIN, "Message result:"); if (GWEN_Logger_GetLevel(0)>=GWEN_LoggerLevel_Debug) AH_Result_Dump(r, stderr, 4); /* check result */ if (code>=9000) { /* FIXME: Maybe disable here, let only the segment results * influence the error flags */ AH_Job_AddFlags(j, AH_JOB_FLAGS_HASERRORS); } else if (code>=3000 && code<4000) AH_Job_AddFlags(j, AH_JOB_FLAGS_HASWARNINGS); } /* if result */ dbRes=GWEN_DB_GetNextGroup(dbRes); } /* while */ } /* if msgResult */ } dbCurr=GWEN_DB_GetNextGroup(dbCurr); } /* while */ } const char *AH_Job_GetDescription(const AH_JOB *j) { assert(j); assert(j->usage); if (j->description) return j->description; return j->name; } void AH_Job_Dump(const AH_JOB *j, FILE *f, unsigned int insert) { uint32_t k; for (k=0; kname); for (k=0; kcode)?(j->code):"(empty)"); for (k=0; ksegmentVersion); for (k=0; kfirstSegment); for (k=0; klastSegment); for (k=0; kchallengeClass); for (k=0; kminSigs); for (k=0; ksecProfile); for (k=0; ksecClass); for (k=0; kjobsPerMsg); for (k=0; kstatus), j->status); for (k=0; kmsgNum); for (k=0; kdialogId); for (k=0; kuser)); for (k=0; kmaxTransfers); for (k=0; ktransferCount); for (k=0; ksupportedCommand)); for (k=0; kflags); if (j->flags & AH_JOB_FLAGS_IGNOREACCOUNTS) fprintf(f, "IGNOREACCOUNTS "); if (j->flags & AH_JOB_FLAGS_SIGNSEQONE) fprintf(f, "SIGNSEQONE "); if (j->flags & AH_JOB_FLAGS_IGNORE_ERROR) fprintf(f, "IGNORE_ERROR "); if (j->flags & AH_JOB_FLAGS_NOITAN) fprintf(f, "NOITAN "); if (j->flags & AH_JOB_FLAGS_TANUSED) fprintf(f, "TANUSED "); if (j->flags & AH_JOB_FLAGS_NOSYSID) fprintf(f, "NOSYSID "); if (j->flags & AH_JOB_FLAGS_NEEDCRYPT) fprintf(f, "NEEDCRYPT "); if (j->flags & AH_JOB_FLAGS_NEEDSIGN) fprintf(f, "NEEDSIGN "); if (j->flags & AH_JOB_FLAGS_ATTACHABLE) fprintf(f, "ATTACHABLE "); if (j->flags & AH_JOB_FLAGS_SINGLE) fprintf(f, "SINGLE "); if (j->flags & AH_JOB_FLAGS_DLGJOB) fprintf(f, "DLGJOB "); if (j->flags & AH_JOB_FLAGS_CRYPT) fprintf(f, "CRYPT "); if (j->flags & AH_JOB_FLAGS_SIGN) fprintf(f, "SIGN "); if (j->flags & AH_JOB_FLAGS_MULTIMSG) fprintf(f, "MULTIMSG "); if (j->flags & AH_JOB_FLAGS_HASATTACHPOINT) fprintf(f, "HASATTACHPOINT "); if (j->flags & AH_JOB_FLAGS_HASMOREMSGS) fprintf(f, "HASMOREMSGS "); if (j->flags & AH_JOB_FLAGS_HASWARNINGS) fprintf(f, "HASWARNINGS "); if (j->flags & AH_JOB_FLAGS_HASERRORS) fprintf(f, "HASERRORS "); if (j->flags & AH_JOB_FLAGS_PROCESSED) fprintf(f, "PROCESSED "); if (j->flags & AH_JOB_FLAGS_COMMITTED) fprintf(f, "COMMITTED "); if (j->flags & AH_JOB_FLAGS_NEEDTAN) fprintf(f, "NEEDTAN "); if (j->flags & AH_JOB_FLAGS_OUTBOX) fprintf(f, "OUTBOX "); fprintf(f, ")\n"); if (j->segResults) { AH_RESULT *r; for (k=0; ksegResults); while (r) { int code; const char *text; code=AH_Result_GetCode(r); text=AH_Result_GetText(r); for (k=0; k"); r=AH_Result_List_Next(r); } } if (j->jobResponses) { for (k=0; kjobResponses, insert+2); } } void AH_Job_DumpShort(const AH_JOB *j, FILE *f, unsigned int insert) { if (j) { uint32_t k; GWEN_BUFFER *dbuf; dbuf=GWEN_Buffer_new(0, 128, 0, 1); _flagsToBuffer(AH_Job_GetFlags(j), dbuf); for (k=0; kname, j->code, j->segmentVersion, j->firstSegment, j->lastSegment, AH_Job_StatusName(j->status), j->status, GWEN_Buffer_GetStart(dbuf)); GWEN_Buffer_free(dbuf); } else { DBG_ERROR(AQHBCI_LOGDOMAIN, "No job"); } } int AH_Job_HasItanResult(const AH_JOB *j) { return AH_Job_HasResultWithCode(j, 3920); } int AH_Job_HasResultWithCode(const AH_JOB *j, int wantedCode) { GWEN_DB_NODE *dbCurr; assert(j); assert(j->usage); dbCurr=GWEN_DB_GetFirstGroup(j->jobResponses); while (dbCurr) { GWEN_DB_NODE *dbRd; dbRd=GWEN_DB_GetGroup(dbCurr, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "data"); if (dbRd) { dbRd=GWEN_DB_GetFirstGroup(dbRd); } if (dbRd) { const char *sGroupName; sGroupName=GWEN_DB_GroupName(dbRd); if (sGroupName && *sGroupName && ((strcasecmp(sGroupName, "SegResult")==0) || (strcasecmp(sGroupName, "MsgResult")==0))) { GWEN_DB_NODE *dbRes; dbRes=GWEN_DB_GetFirstGroup(dbRd); while (dbRes) { if (strcasecmp(GWEN_DB_GroupName(dbRes), "result")==0) { int code; code=GWEN_DB_GetIntValue(dbRes, "resultcode", 0, 0); DBG_DEBUG(AQHBCI_LOGDOMAIN, "Checking result code %d against %d", code, wantedCode); if (code==wantedCode) { return 1; } } /* if result */ dbRes=GWEN_DB_GetNextGroup(dbRes); } /* while */ } } /* if response data found */ dbCurr=GWEN_DB_GetNextGroup(dbCurr); } /* while */ return 0; /* no iTAN response */ } AH_JOB *AH_Job__freeAll_cb(AH_JOB *j, void *userData) { assert(j); assert(j->usage); AH_Job_free(j); return 0; } void AH_Job_List2_FreeAll(AH_JOB_LIST2 *jl) { AH_Job_List2_ForEach(jl, AH_Job__freeAll_cb, 0); AH_Job_List2_free(jl); } AH_HBCI *AH_Job_GetHbci(const AH_JOB *j) { assert(j); assert(j->usage); return AH_User_GetHbci(j->user); } AB_BANKING *AH_Job_GetBankingApi(const AH_JOB *j) { AH_HBCI *hbci; assert(j); assert(j->usage); hbci=AH_Job_GetHbci(j); assert(hbci); return AH_HBCI_GetBankingApi(hbci); } AH_RESULT_LIST *AH_Job_GetSegResults(const AH_JOB *j) { assert(j); assert(j->usage); return j->segResults; } AH_RESULT_LIST *AH_Job_GetMsgResults(const AH_JOB *j) { assert(j); assert(j->usage); return j->msgResults; } const char *AH_Job_GetExpectedSigner(const AH_JOB *j) { assert(j); assert(j->usage); return j->expectedSigner; } void AH_Job_SetExpectedSigner(AH_JOB *j, const char *s) { assert(j); assert(j->usage); free(j->expectedSigner); if (s) j->expectedSigner=strdup(s); else j->expectedSigner=0; } const char *AH_Job_GetExpectedCrypter(const AH_JOB *j) { assert(j); assert(j->usage); return j->expectedCrypter; } void AH_Job_SetExpectedCrypter(AH_JOB *j, const char *s) { assert(j); assert(j->usage); free(j->expectedCrypter); if (s) j->expectedCrypter=strdup(s); else j->expectedCrypter=0; } const char *AH_Job_GetUsedTan(const AH_JOB *j) { assert(j); assert(j->usage); return j->usedTan; } void AH_Job_SetUsedTan(AH_JOB *j, const char *s) { assert(j); assert(j->usage); DBG_DEBUG(AQHBCI_LOGDOMAIN, "Changing TAN in job [%s](%08x) from [%s] to [%s]", j->name, j->id, (j->usedTan)?(j->usedTan):"(empty)", s?s:"(empty)"); free(j->usedTan); if (s) { j->usedTan=strdup(s); } else j->usedTan=0; } void AH_Job_Log(AH_JOB *j, GWEN_LOGGER_LEVEL ll, const char *txt) { char buffer[32]; GWEN_TIME *ti; GWEN_BUFFER *lbuf; assert(j); lbuf=GWEN_Buffer_new(0, 128, 0, 1); snprintf(buffer, sizeof(buffer), "%02d", ll); GWEN_Buffer_AppendString(lbuf, buffer); GWEN_Buffer_AppendByte(lbuf, ':'); ti=GWEN_CurrentTime(); assert(ti); GWEN_Time_toString(ti, "YYYYMMDD:hhmmss:", lbuf); GWEN_Time_free(ti); GWEN_Text_EscapeToBufferTolerant(AH_PROVIDER_NAME, lbuf); GWEN_Buffer_AppendByte(lbuf, ':'); GWEN_Text_EscapeToBufferTolerant(txt, lbuf); GWEN_StringList_AppendString(j->log, GWEN_Buffer_GetStart(lbuf), 0, 0); GWEN_Buffer_free(lbuf); } const GWEN_STRINGLIST *AH_Job_GetLogs(const AH_JOB *j) { assert(j); return j->log; } GWEN_STRINGLIST *AH_Job_GetChallengeParams(const AH_JOB *j) { assert(j); return j->challengeParams; } void AH_Job_ClearChallengeParams(AH_JOB *j) { assert(j); GWEN_StringList_Clear(j->challengeParams); } void AH_Job_AddChallengeParam(AH_JOB *j, const char *s) { assert(j); GWEN_StringList_AppendString(j->challengeParams, s, 0, 0); } void AH_Job_ValueToChallengeString(const AB_VALUE *v, GWEN_BUFFER *buf) { AB_Value_toHbciString(v, buf); } int AH_Job_GetTransferCount(AH_JOB *j) { assert(j); return j->transferCount; } void AH_Job_IncTransferCount(AH_JOB *j) { assert(j); j->transferCount++; } int AH_Job_GetMaxTransfers(AH_JOB *j) { assert(j); return j->maxTransfers; } void AH_Job_SetMaxTransfers(AH_JOB *j, int i) { assert(j); j->maxTransfers=i; } AB_TRANSACTION_LIST *AH_Job_GetTransferList(const AH_JOB *j) { assert(j); return j->transferList; } AB_TRANSACTION *AH_Job_GetFirstTransfer(const AH_JOB *j) { assert(j); if (j->transferList==NULL) return NULL; return AB_Transaction_List_First(j->transferList); } void AH_Job_AddTransfer(AH_JOB *j, AB_TRANSACTION *t) { assert(j); if (j->transferList==NULL) j->transferList=AB_Transaction_List_new(); AB_Transaction_List_Add(t, j->transferList); j->transferCount++; } AB_TRANSACTION_COMMAND AH_Job_GetSupportedCommand(const AH_JOB *j) { assert(j); assert(j->usage); return j->supportedCommand; } void AH_Job_SetSupportedCommand(AH_JOB *j, AB_TRANSACTION_COMMAND tc) { assert(j); assert(j->usage); j->supportedCommand=tc; } AB_PROVIDER *AH_Job_GetProvider(const AH_JOB *j) { assert(j); assert(j->usage); return j->provider; } void AH_Job_AddCommand(AH_JOB *j, AB_TRANSACTION *t) { assert(j); assert(j->usage); if (j->commandList==NULL) j->commandList=AB_Transaction_List2_new(); AB_Transaction_List2_PushBack(j->commandList, t); } AB_TRANSACTION_LIST2 *AH_Job_GetCommandList(const AH_JOB *j) { assert(j); assert(j->usage); return j->commandList; } AH_JOB *AH_Job_List_GetById(AH_JOB_LIST *jl, uint32_t id) { if (jl) { AH_JOB *j; j=AH_Job_List_First(jl); while (j) { if (AH_Job_GetId(j)==id) return j; j=AH_Job_List_Next(j); } } return NULL; } void AH_Job_SetStatusOnCommands(AH_JOB *j, AB_TRANSACTION_STATUS status) { AB_TRANSACTION_LIST2 *cmdList; assert(j); cmdList=AH_Job_GetCommandList(j); if (cmdList) { AB_TRANSACTION_LIST2_ITERATOR *it; it=AB_Transaction_List2_First(cmdList); if (it) { AB_TRANSACTION *t; t=AB_Transaction_List2Iterator_Data(it); while (t) { AB_Transaction_SetStatus(t, status); t=AB_Transaction_List2Iterator_Next(it); } AB_Transaction_List2Iterator_free(it); } } } char *AH_Job_GenerateIdFromDateTimeAndJobId(const AH_JOB *j, int runningNumber) { GWEN_TIME *ti; int days, month, year; int hours, mins, secs; char *string31; int rv; ti=GWEN_CurrentTime(); assert(ti); GWEN_Time_GetBrokenDownDate(ti, &days, &month, &year); GWEN_Time_GetBrokenDownTime(ti, &hours, &mins, &secs); GWEN_Time_free(ti); string31=(char *) malloc(31); /* YYYYMMDDhhmmssJJJJJJJJRRRRRRRR */ rv=snprintf(string31, 31, "%04d%02d%02d%02d%02d%02d%08x%08x", year, month+1, days, hours, mins, secs, j->id, runningNumber); if (rv<0 || rv>30) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Error on snprintf (%d)", rv); free(string31); return NULL; } return string31; } void _flagsToBuffer(uint32_t flags, GWEN_BUFFER *dbuf) { if (flags==0) GWEN_Buffer_AppendString(dbuf, " "); else if (flags & AH_JOB_FLAGS_ACKNOWLEDGE) GWEN_Buffer_AppendString(dbuf, "ACKNOWLEDGE "); else if (flags & AH_JOB_FLAGS_IGNOREACCOUNTS) GWEN_Buffer_AppendString(dbuf, "IGNOREACCOUNTS "); if (flags & AH_JOB_FLAGS_SIGNSEQONE) GWEN_Buffer_AppendString(dbuf, "SIGNSEQONE "); if (flags & AH_JOB_FLAGS_IGNORE_ERROR) GWEN_Buffer_AppendString(dbuf, "IGNORE_ERROR "); if (flags & AH_JOB_FLAGS_NOITAN) GWEN_Buffer_AppendString(dbuf, "NOITAN "); if (flags & AH_JOB_FLAGS_TANUSED) GWEN_Buffer_AppendString(dbuf, "TANUSED "); if (flags & AH_JOB_FLAGS_NOSYSID) GWEN_Buffer_AppendString(dbuf, "NOSYSID "); if (flags & AH_JOB_FLAGS_NEEDCRYPT) GWEN_Buffer_AppendString(dbuf, "NEEDCRYPT "); if (flags & AH_JOB_FLAGS_NEEDSIGN) GWEN_Buffer_AppendString(dbuf, "NEEDSIGN "); if (flags & AH_JOB_FLAGS_ATTACHABLE) GWEN_Buffer_AppendString(dbuf, "ATTACHABLE "); if (flags & AH_JOB_FLAGS_SINGLE) GWEN_Buffer_AppendString(dbuf, "SINGLE "); if (flags & AH_JOB_FLAGS_DLGJOB) GWEN_Buffer_AppendString(dbuf, "DLGJOB "); if (flags & AH_JOB_FLAGS_CRYPT) GWEN_Buffer_AppendString(dbuf, "CRYPT "); if (flags & AH_JOB_FLAGS_SIGN) GWEN_Buffer_AppendString(dbuf, "SIGN "); if (flags & AH_JOB_FLAGS_MULTIMSG) GWEN_Buffer_AppendString(dbuf, "MULTIMSG "); if (flags & AH_JOB_FLAGS_HASATTACHPOINT) GWEN_Buffer_AppendString(dbuf, "HASATTACHPOINT "); if (flags & AH_JOB_FLAGS_HASMOREMSGS) GWEN_Buffer_AppendString(dbuf, "HASMOREMSGS "); if (flags & AH_JOB_FLAGS_HASWARNINGS) GWEN_Buffer_AppendString(dbuf, "HASWARNINGS "); if (flags & AH_JOB_FLAGS_HASERRORS) GWEN_Buffer_AppendString(dbuf, "HASERRORS "); if (flags & AH_JOB_FLAGS_PROCESSED) GWEN_Buffer_AppendString(dbuf, "PROCESSED "); if (flags & AH_JOB_FLAGS_COMMITTED) GWEN_Buffer_AppendString(dbuf, "COMMITTED "); if (flags & AH_JOB_FLAGS_NEEDTAN) GWEN_Buffer_AppendString(dbuf, "NEEDTAN "); if (flags & AH_JOB_FLAGS_OUTBOX) GWEN_Buffer_AppendString(dbuf, "OUTBOX "); } #include "job_new.c" #include "job_virtual.c" aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/applayer/0000755000175000017500000000000015037736162020511 500000000000000aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/applayer/adminjobs.c0000664000175000017500000003531514044534775022557 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "adminjobs_p.h" #include "aqhbci/aqhbci_l.h" #include "aqhbci/joblayer/job_l.h" #include "aqhbci/joblayer/jobqueue_l.h" #include "aqhbci/msglayer/hbci_l.h" #include "aqhbci/banking/provider_l.h" #include #include #include #include #include #include #include #include /* __________________________________________________________________________ * AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA * AH_Job_UpdateBank * YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY */ GWEN_INHERIT(AH_JOB, AH_JOB_UPDATEBANK) /* --------------------------------------------------------------- FUNCTION */ AH_JOB *AH_Job_UpdateBank_new(AB_PROVIDER *pro, AB_USER *u) { AH_JOB *j; GWEN_DB_NODE *args; AH_JOB_UPDATEBANK *jd; assert(u); j=AH_Job_new("JobUpdateBankInfo", pro, u, 0, 0); if (!j) { DBG_ERROR(AQHBCI_LOGDOMAIN, "JobUpdateBankInfo not supported, should not happen"); return 0; } GWEN_NEW_OBJECT(AH_JOB_UPDATEBANK, jd); GWEN_INHERIT_SETDATA(AH_JOB, AH_JOB_UPDATEBANK, j, jd, AH_Job_UpdateBank_FreeData) AH_Job_SetProcessFn(j, AH_Job_UpdateBank_Process); /* set arguments */ args=AH_Job_GetArguments(j); assert(args); GWEN_DB_SetIntValue(args, GWEN_DB_FLAGS_OVERWRITE_VARS, "open/prepare/bpdversion", 0); GWEN_DB_SetIntValue(args, GWEN_DB_FLAGS_OVERWRITE_VARS, "open/prepare/updversion", 0); DBG_INFO(AQHBCI_LOGDOMAIN, "JobUpdateBankInfo created"); return j; } void GWENHYWFAR_CB AH_Job_UpdateBank_FreeData(void *bp, void *p) { AH_JOB_UPDATEBANK *jd; jd=(AH_JOB_UPDATEBANK *)p; GWEN_FREE_OBJECT(jd); } int AH_Job_UpdateBank_Process(AH_JOB *j, AB_IMEXPORTER_CONTEXT *ctx) { AH_JOB_UPDATEBANK *jd; GWEN_DB_NODE *dbResponses; GWEN_DB_NODE *dbCurr; GWEN_DB_NODE *dbAccountData; AB_USER *u; AB_BANKING *ab; int accs; assert(j); jd=GWEN_INHERIT_GETDATA(AH_JOB, AH_JOB_UPDATEBANK, j); assert(jd); /* This function is just for informational purposes, the real account handling is done in * AH_Job_CommitSystemData() */ if (jd->scanned) return 0; jd->scanned=1; dbResponses=AH_Job_GetResponses(j); assert(dbResponses); u=AH_Job_GetUser(j); assert(u); ab=AH_Job_GetBankingApi(j); assert(ab); /* search for "AccountData" */ accs=0; dbCurr=GWEN_DB_FindFirstGroup(dbResponses, "AccountData"); while (dbCurr) { dbAccountData=GWEN_DB_GetGroup(dbCurr, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "data/AccountData"); if (dbAccountData) { DBG_INFO(AQHBCI_LOGDOMAIN, "Found an account"); accs++; } dbCurr=GWEN_DB_FindNextGroup(dbCurr, "AccountData"); } if (!accs) { DBG_WARN(AQHBCI_LOGDOMAIN, "No accounts found"); } return 0; } /* __________________________________________________________________________ * AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA * AH_Job_TestVersion * YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY */ GWEN_INHERIT(AH_JOB, AH_JOB_TESTVERSION); AH_JOB *AH_Job_TestVersion_new(AB_PROVIDER *pro, AB_USER *u, int anon) { AH_JOB *j; GWEN_DB_NODE *args; AH_JOB_TESTVERSION *jd; assert(u); if (anon) j=AH_Job_new("JobDialogInitAnon", pro, u, 0, 0); else j=AH_Job_new("JobDialogInit", pro, u, 0, 0); if (!j) { DBG_ERROR(AQHBCI_LOGDOMAIN, "JobTestVersion not supported, should not happen"); return 0; } AH_Job_AddFlags(j, AH_JOB_FLAGS_DLGJOB); GWEN_NEW_OBJECT(AH_JOB_TESTVERSION, jd); GWEN_INHERIT_SETDATA(AH_JOB, AH_JOB_TESTVERSION, j, jd, AH_Job_TestVersion_FreeData); AH_Job_SetProcessFn(j, AH_Job_TestVersion_Process); jd->versionSupported=AH_JobTestVersion_ResultUnknown; /* set arguments */ args=AH_Job_GetArguments(j); assert(args); GWEN_DB_SetIntValue(args, GWEN_DB_FLAGS_OVERWRITE_VARS, "prepare/bpdversion", 0); GWEN_DB_SetIntValue(args, GWEN_DB_FLAGS_OVERWRITE_VARS, "prepare/updversion", 0); DBG_INFO(AQHBCI_LOGDOMAIN, "JobTestVersion created"); return j; } void GWENHYWFAR_CB AH_Job_TestVersion_FreeData(void *bp, void *p) { AH_JOB_TESTVERSION *jd; jd=(AH_JOB_TESTVERSION *)p; GWEN_FREE_OBJECT(jd); } int AH_Job_TestVersion_Process(AH_JOB *j, AB_IMEXPORTER_CONTEXT *ctx) { AH_JOB_TESTVERSION *jd; GWEN_DB_NODE *dbResponses; GWEN_DB_NODE *dbCurr; GWEN_DB_NODE *dbMsgResponse; int hadAGoodResult=0; assert(j); jd=GWEN_INHERIT_GETDATA(AH_JOB, AH_JOB_TESTVERSION, j); assert(jd); dbResponses=AH_Job_GetResponses(j); assert(dbResponses); DBG_DEBUG(AQHBCI_LOGDOMAIN, "Parsing this response"); if (GWEN_Logger_GetLevel(AQHBCI_LOGDOMAIN)>=GWEN_LoggerLevel_Debug) GWEN_DB_Dump(dbResponses, 2); /* search for "MsgResult" */ dbCurr=GWEN_DB_GetFirstGroup(dbResponses); while (dbCurr && jd->versionSupported==AH_JobTestVersion_ResultUnknown) { dbMsgResponse=GWEN_DB_GetGroup(dbCurr, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "data/MsgResult"); if (dbMsgResponse) { GWEN_DB_NODE *dbResult; dbResult=GWEN_DB_FindFirstGroup(dbMsgResponse, "result"); while (dbResult && jd->versionSupported==AH_JobTestVersion_ResultUnknown) { int code; DBG_INFO(AQHBCI_LOGDOMAIN, "Found message result"); code=GWEN_DB_GetIntValue(dbResult, "resultCode", 0, -1); if (code>=9000) { if (code==9180) { /* version is definately not supported */ jd->versionSupported=AH_JobTestVersion_ResultNotSupported; } else { if (code>=9300 && code<9400) { /* error with the signature/encryption, so there was * no complaint about the version */ jd->versionSupported=AH_JobTestVersion_ResultMaybeSupported; } else { const char *s; /* any other error, check for substring "version" */ s=GWEN_DB_GetCharValue(dbResult, "text", 0, 0); if (s) { if (strstr(s, "version") || strstr(s, "Version")) { /* seems to be a complaint about the version */ jd->versionSupported=AH_JobTestVersion_ResultNotSupported; } } /* still undecided ? */ if (jd->versionSupported==AH_JobTestVersion_ResultUnknown) /* yes, so there was no complaint about the version */ jd->versionSupported=AH_JobTestVersion_ResultMaybeSupported; } } } /* if error */ else { /* not an error, so the version is definately supported */ hadAGoodResult=1; } dbResult=GWEN_DB_FindNextGroup(dbResult, "result"); } /* while result */ } dbCurr=GWEN_DB_GetNextGroup(dbCurr); } /* while */ /* still undecided ? */ if (jd->versionSupported==AH_JobTestVersion_ResultUnknown) if (hadAGoodResult) /* in dubio pro reo */ jd->versionSupported=AH_JobTestVersion_ResultSupported; return 0; } AH_JOB_TESTVERSION_RESULT AH_Job_TestVersion_GetResult(const AH_JOB *j) { AH_JOB_TESTVERSION *jd; assert(j); jd=GWEN_INHERIT_GETDATA(AH_JOB, AH_JOB_TESTVERSION, j); assert(jd); return jd->versionSupported; } /* __________________________________________________________________________ * AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA * AH_Job_GetStatus * YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY */ GWEN_INHERIT(AH_JOB, AH_JOB_GETSTATUS); AH_JOB *AH_Job_GetStatus_new(AB_PROVIDER *pro, AB_USER *u, const GWEN_TIME *fromDate, const GWEN_TIME *toDate) { AH_JOB *j; AH_JOB_GETSTATUS *aj; GWEN_DB_NODE *dbArgs; j=AH_Job_new("JobGetStatus", pro, u, 0, 0); if (!j) return 0; GWEN_NEW_OBJECT(AH_JOB_GETSTATUS, aj); GWEN_INHERIT_SETDATA(AH_JOB, AH_JOB_GETSTATUS, j, aj, AH_Job_GetStatus_FreeData); aj->results=AH_Result_List_new(); if (fromDate) aj->fromDate=GWEN_Time_dup(fromDate); if (toDate) aj->toDate=GWEN_Time_dup(toDate); /* overwrite some virtual functions */ AH_Job_SetProcessFn(j, AH_Job_GetStatus_Process); /* set some known arguments */ dbArgs=AH_Job_GetArguments(j); assert(dbArgs); if (fromDate) { GWEN_BUFFER *dbuf; dbuf=GWEN_Buffer_new(0, 32, 0, 1); if (GWEN_Time_toString(fromDate, "YYYYMMDD", dbuf)) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Error in fromDate"); } else { GWEN_DB_SetCharValue(dbArgs, GWEN_DB_FLAGS_OVERWRITE_VARS, "fromDate", GWEN_Buffer_GetStart(dbuf)); } GWEN_Buffer_free(dbuf); } if (toDate) { GWEN_BUFFER *dbuf; dbuf=GWEN_Buffer_new(0, 32, 0, 1); if (GWEN_Time_toString(toDate, "YYYYMMDD", dbuf)) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Error in toDate"); } else { GWEN_DB_SetCharValue(dbArgs, GWEN_DB_FLAGS_OVERWRITE_VARS, "toDate", GWEN_Buffer_GetStart(dbuf)); } GWEN_Buffer_free(dbuf); } return j; } void GWENHYWFAR_CB AH_Job_GetStatus_FreeData(void *bp, void *p) { AH_JOB_GETSTATUS *aj; aj=(AH_JOB_GETSTATUS *)p; AH_Result_List_free(aj->results); GWEN_FREE_OBJECT(aj); } int AH_Job_GetStatus_Process(AH_JOB *j, AB_IMEXPORTER_CONTEXT *ctx) { AH_JOB_GETSTATUS *aj; DBG_INFO(AQHBCI_LOGDOMAIN, "Processing JobGetStatus"); assert(j); aj=GWEN_INHERIT_GETDATA(AH_JOB, AH_JOB_GETSTATUS, j); assert(aj); /* nothing to do here (because this is not a real job and it is processed * by AH_Outbox) */ return 0; } /* __________________________________________________________________________ * AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA * AH_Job_GetItanModes * YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY */ GWEN_INHERIT(AH_JOB, AH_JOB_GETITANMODES); AH_JOB *AH_Job_GetItanModes_new(AB_PROVIDER *pro, AB_USER *u) { AH_JOB *j; GWEN_DB_NODE *args; AH_JOB_GETITANMODES *jd; assert(u); j=AH_Job_new("JobGetItanModes", pro, u, 0, 0); if (!j) { DBG_ERROR(AQHBCI_LOGDOMAIN, "JobGetItanModes not supported, should not happen"); return 0; } GWEN_NEW_OBJECT(AH_JOB_GETITANMODES, jd); GWEN_INHERIT_SETDATA(AH_JOB, AH_JOB_GETITANMODES, j, jd, AH_Job_GetItanModes_FreeData); AH_Job_SetProcessFn(j, AH_Job_GetItanModes_Process); /* set arguments */ args=AH_Job_GetArguments(j); assert(args); GWEN_DB_SetIntValue(args, GWEN_DB_FLAGS_OVERWRITE_VARS, "prepare/bpdversion", 0); GWEN_DB_SetIntValue(args, GWEN_DB_FLAGS_OVERWRITE_VARS, "prepare/updversion", 0); jd->modeList[0]=-1; jd->modeCount=0; DBG_INFO(AQHBCI_LOGDOMAIN, "JobGetItanModes created"); return j; } void GWENHYWFAR_CB AH_Job_GetItanModes_FreeData(void *bp, void *p) { AH_JOB_GETITANMODES *jd; jd=(AH_JOB_GETITANMODES *)p; GWEN_FREE_OBJECT(jd); } int AH_Job_GetItanModes_Process(AH_JOB *j, AB_IMEXPORTER_CONTEXT *ctx) { AH_JOB_GETITANMODES *jd; GWEN_DB_NODE *dbResponses; GWEN_DB_NODE *dbCurr; GWEN_DB_NODE *dbMsgResponse; assert(j); jd=GWEN_INHERIT_GETDATA(AH_JOB, AH_JOB_GETITANMODES, j); assert(jd); dbResponses=AH_Job_GetResponses(j); assert(dbResponses); DBG_DEBUG(AQHBCI_LOGDOMAIN, "Parsing this response"); if (GWEN_Logger_GetLevel(AQHBCI_LOGDOMAIN)>=GWEN_LoggerLevel_Debug) GWEN_DB_Dump(dbResponses, 2); /* search for "SegResult" */ dbCurr=GWEN_DB_GetFirstGroup(dbResponses); while (dbCurr) { dbMsgResponse=GWEN_DB_GetGroup(dbCurr, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "data/SegResult"); if (dbMsgResponse) { GWEN_DB_NODE *dbRes; dbRes=GWEN_DB_FindFirstGroup(dbMsgResponse, "result"); while (dbRes) { int code; code=GWEN_DB_GetIntValue(dbRes, "resultCode", 0, -1); DBG_DEBUG(AQHBCI_LOGDOMAIN, "Found message result (%d)", code); if (code==3920) { int i; jd->modeList[0]=-1; jd->modeCount=0; for (i=0; ; i++) { int k; k=GWEN_DB_GetIntValue(dbRes, "param", i, 0); if (k==0) break; if (jd->modeCountmodeList[jd->modeCount++]=k; jd->modeList[jd->modeCount]=-1; } else break; } /* for */ if (i==0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Bad server response: No TAN method reported"); return -1; } } /* if correct result found */ dbRes=GWEN_DB_FindNextGroup(dbRes, "result"); } /* while result */ } dbCurr=GWEN_DB_GetNextGroup(dbCurr); } /* while */ return 0; } const int *AH_Job_GetItanModes_GetModes(const AH_JOB *j) { AH_JOB_GETITANMODES *jd; assert(j); jd=GWEN_INHERIT_GETDATA(AH_JOB, AH_JOB_GETITANMODES, j); assert(jd); return jd->modeList; } /* __________________________________________________________________________ * AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA * AH_Job_ChangePin * YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY */ /* --------------------------------------------------------------- FUNCTION */ AH_JOB *AH_Job_ChangePin_new(AB_PROVIDER *pro, AB_USER *u, const char *newPin) { AH_JOB *j; GWEN_DB_NODE *dbArgs; assert(u); j=AH_Job_new("JobChangePin", pro, u, 0, 0); if (!j) { DBG_ERROR(AQHBCI_LOGDOMAIN, "JobChangePin not supported, should not happen"); return 0; } /* set challenge class */ AH_Job_SetChallengeClass(j, 90); /* set arguments */ dbArgs=AH_Job_GetArguments(j); assert(dbArgs); GWEN_DB_SetCharValue(dbArgs, GWEN_DB_FLAGS_OVERWRITE_VARS, "newPin", newPin); DBG_INFO(AQHBCI_LOGDOMAIN, "JobChangePin created"); return j; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/applayer/README0000664000175000017500000000151114043610745021303 00000000000000 This folder contains high-level modules to be used by applications. HBCI-XML Descriptions ===================== Segmente fuer Geschaeftsvorfaelle --------------------------------- Fuer die meisten Geschaeftvorfaelle werden mindestens 3 Segmente benoetigt: 1) Kundennachricht : beschreibt die Struktur der Nachricht, die das Kundensystem an die Bank sendet 2) Institutsnachr. : beschreibt die Struktur der Nachricht, die das Kreditinstitut als Antwort sendet 3) GV-parameter : beschreibt Parameter zu einem Geschaeftsvorfall (z.B. die Anzahl der Verwendungszweck-Zeilen) Ausserdem ist zu beachten, dass in der -Sektion der Versionsdatei entsprechende Jobs angelegt werden muessen, damit die Anwendung einen solchen Job auch erzeugen kann (siehe JOBGetBalance) aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/applayer/Makefile.am0000664000175000017500000000256114044534775022476 00000000000000SUBDIRS=xml AM_CFLAGS=-DBUILDING_AQBANKING @visibility_cflags@ AM_CPPFLAGS = -I$(top_srcdir)/src/libs -I$(top_builddir)/src/libs $(gwenhywfar_includes) \ -I$(srcdir)/../../ \ -I$(srcdir)/../ajobs \ -I$(srcdir)/../admjobs \ -I$(srcdir)/../banking \ -I$(srcdir)/../joblayer \ -I$(srcdir)/../msglayer \ -I$(srcdir)/../tan \ -I$(srcdir)/.. EXTRA_DIST=\ README noinst_LTLIBRARIES=libhbciapp.la noinst_HEADERS=\ adminjobs_l.h adminjobs_p.h\ outbox_l.h outbox_p.h \ hhd_l.h hhd_p.h \ cbox.h \ cbox_p.h \ cbox_itan.h \ cbox_itan1.h \ cbox_itan2.h \ cbox_send.h \ cbox_recv.h \ cbox_psd2.h \ cbox_hbci.h \ cbox_dialog.h \ cbox_prepare.h \ cbox_queue.h libhbciapp_la_SOURCES=\ adminjobs.c \ hhd.c \ outbox.c \ cbox.c \ cbox_recv.c \ cbox_send.c \ cbox_psd2.c \ cbox_hbci.c \ cbox_dialog.c \ cbox_itan.c \ cbox_itan1.c \ cbox_itan2.c \ cbox_prepare.c \ cbox_queue.c sources: for f in $(libhbciapp_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d sources; \ done CLEANFILES = $(xmldata_DATA) tmp.xml typefiles: for d in $(SUBDIRS); do \ $(MAKE) -C $$d typefiles; \ done typedefs: for d in $(SUBDIRS); do \ $(MAKE) -C $$d typedefs; \ done cppcheck: for f in $(libhbciapp_la_SOURCES); do \ cppcheck --force $$f ; \ done aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/applayer/outbox_p.h0000664000175000017500000000153014043610745022434 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_OUTBOX_P_H #define AH_OUTBOX_P_H #include "aqhbci/applayer/outbox_l.h" #include "aqhbci/joblayer/jobqueue_l.h" #include "aqhbci/applayer/cbox.h" #include struct AH_OUTBOX { GWEN_INHERIT_ELEMENT(AH_OUTBOX); AB_PROVIDER *provider; AH_OUTBOX_CBOX_LIST *userBoxes; AH_JOB_LIST *finishedJobs; AB_IMEXPORTER_CONTEXT *context; uint32_t usage; }; #endif /* AH_OUTBOX_P_H */ aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/applayer/xml/0000755000175000017500000000000015037736162021311 500000000000000aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/applayer/xml/Makefile.am0000664000175000017500000000112114044534776023266 00000000000000 xmlfiles=\ $(srcdir)/hbciallgrp.xml \ $(srcdir)/hbci210seg.xml \ $(srcdir)/hbci210job.xml \ $(srcdir)/hbci201seg.xml \ $(srcdir)/hbci201job.xml \ $(srcdir)/hbci220seg.xml \ $(srcdir)/hbci220job.xml \ $(srcdir)/fints300seg.xml \ $(srcdir)/fints300job.xml \ $(srcdir)/hbciallseg.xml EXTRA_DIST=$(xmlfiles) sources: base.xml: $(xmlfiles) $(XMLMERGE) $(xmlfiles) -v --compact -o $@ all-local: base.xml CLEANFILES = base.xml typefiles: for d in $(SUBDIRS); do \ $(MAKE) -C $$d typefiles; \ done typedefs: for d in $(SUBDIRS); do \ $(MAKE) -C $$d typedefs; \ done aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/applayer/xml/hbciallseg.xml0000664000175000017500000003342114043610745024047 00000000000000 %code %version %pversion $MessageNumber $DialogId %code %version %pversion $MessageNumber $DialogId %code %version %code %version %code %version $MessageNumber %code %version 2 1 1 1 ?userId ?signkeynumber ?signkeyversion S %code %version 1 1 1 1 ?userId ?signkeynumber ?signkeyversion S %code %version 1 1 1 1 ?userId ?signkeynumber ?signkeyversion S %code %version 999 1 1 1 ?userId 1 1 S %code %version %code %version 998 4 1 1 0 ?userId ?cryptkeynumber ?cryptkeyversion V %code %version 998 4 1 1 0 ?userId ?cryptkeynumber ?cryptkeyversion V %code %version 998 4 1 1 0 ?userId ?cryptkeynumber ?cryptkeyversion V %code %version 998 998 1 1 0 ?userId 1 1 V %code %version 999 aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/applayer/xml/hbci210job.xml0000664000175000017500000000467314043610745023604 00000000000000 9999999999 0 0 0 0 9999999999 0 0 0 0 %code %version aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/applayer/xml/fints300seg.xml0000664000175000017500000007377214043610745024034 00000000000000 %code %version %pversion $MessageNumber $DialogId %code %version %code %version $MessageNumber %code %version 2 1 1 1 ?userId ?signkeynumber ?signkeyversion S %code %version 1 1 1 1 ?userId ?signkeynumber ?signkeyversion S %code %version 1 1 1 1 ?userId ?signkeynumber ?signkeyversion S %code %version 999 1 1 1 ?userId 1 1 S %code %version %code %version %code %version %code %version %code %version 998 4 1 1 0 ?userId ?cryptkeynumber ?cryptkeyversion V %code %version 998 4 1 1 0 ?userId ?cryptkeynumber ?cryptkeyversion V %code %version 998 4 1 1 0 ?userId ?cryptkeynumber ?cryptkeyversion V %code %version 998 998 1 1 0 ?userId 1 1 V %code %version 999 %code %version %code %version %code %version %code %version %code %version %code %version %code %version 0 ?customerId 0 %code %version ?systemid ?customerId 1 %code %version ?systemid ?customerId 1 %code %version ?systemid ?customerId 1 %code %version ?bpdversion ?updversion 1 ?product ?productversion %code %version ?bpdversion ?updversion 1 ?product ?productversion %code %version $DialogId %code %version %code %version %code %version %code %version %code %version %code %version %code %version %code %version 1 %code %version %code %version aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/applayer/xml/hbci210seg.xml0000664000175000017500000005032414043610745023602 00000000000000 %code %version %pversion $MessageNumber $DialogId %code %version %code %version $MessageNumber %code %version 2 1 1 1 ?userId ?signkeynumber ?signkeyversion S %code %version 1 1 1 1 ?userId ?signkeynumber ?signkeyversion S %code %version 999 1 1 1 ?userId 1 1 S %code %version %code %version 998 4 1 1 0 ?userId ?cryptkeynumber ?cryptkeyversion V %code %version 998 4 1 1 0 ?userId ?cryptkeynumber ?cryptkeyversion V %code %version 998 998 1 1 0 ?userId 1 1 V %code %version 999 %code %version %code %version %code %version %code %version %code %version %code %version ?customerId 0 0 %code %version ?customerId ?systemid 1 %code %version ?customerId ?systemid 1 %code %version 1 ?bpdversion ?updversion ?product ?productversion %code %version $DialogId %code %version %code %version %code %version %code %version %code %version %code %version %code %version aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/applayer/xml/hbciallgrp.xml0000664000175000017500000005564514546575647024120 00000000000000 +SegmentNumber 280 ?bankcode S V 16 10 12 13 6 5 1 999 1 6 2 2 13 1 1 999 5 10 16 6 10 16 6 10 16 6 aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/applayer/xml/Makefile.in0000644000175000017500000004247015037736025023303 00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/libs/plugins/backends/aqhbci/applayer/xml ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/distri.m4 $(top_srcdir)/m4/gwenhywfar.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/os.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADD_ACLOCAL_FLAGS = @ADD_ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AQBANKING_CLI_VERSION_STRING = @AQBANKING_CLI_VERSION_STRING@ AQBANKING_FINTS_VERSION_STRING = @AQBANKING_FINTS_VERSION_STRING@ AQBANKING_SO_AGE = @AQBANKING_SO_AGE@ AQBANKING_SO_CURRENT = @AQBANKING_SO_CURRENT@ AQBANKING_SO_EFFECTIVE = @AQBANKING_SO_EFFECTIVE@ AQBANKING_SO_REVISION = @AQBANKING_SO_REVISION@ AQBANKING_VERSION_BUILD = @AQBANKING_VERSION_BUILD@ AQBANKING_VERSION_FULL_STRING = @AQBANKING_VERSION_FULL_STRING@ AQBANKING_VERSION_MAJOR = @AQBANKING_VERSION_MAJOR@ AQBANKING_VERSION_MINOR = @AQBANKING_VERSION_MINOR@ AQBANKING_VERSION_PATCHLEVEL = @AQBANKING_VERSION_PATCHLEVEL@ AQBANKING_VERSION_RELEASE_STRING = @AQBANKING_VERSION_RELEASE_STRING@ AQBANKING_VERSION_STRING = @AQBANKING_VERSION_STRING@ AQBANKING_VERSION_TAG = @AQBANKING_VERSION_TAG@ AQEBICS_CFLAGS = @AQEBICS_CFLAGS@ AQEBICS_LIBS = @AQEBICS_LIBS@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATETIME = @DATETIME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_EXCLUDE_PATTERNS = @DOXYGEN_EXCLUDE_PATTERNS@ DOXYGEN_FILE_PATTERNS = @DOXYGEN_FILE_PATTERNS@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENGUI_GTK2_CFLAGS = @GWENGUI_GTK2_CFLAGS@ GWENGUI_GTK2_LIBS = @GWENGUI_GTK2_LIBS@ GWENHYWFAR_MINIMUM_VERSION = @GWENHYWFAR_MINIMUM_VERSION@ HAVE_GWENGUI_GTK2 = @HAVE_GWENGUI_GTK2@ HAVE_I18N = @HAVE_I18N@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIBXSLT_CFLAGS = @LIBXSLT_CFLAGS@ LIBXSLT_LIBS = @LIBXSLT_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_SUPPORTS_QT = @MSGFMT_SUPPORTS_QT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ TUTORIALS = @TUTORIALS@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XMLMERGE = @XMLMERGE@ XMLSEC_CFLAGS = @XMLSEC_CFLAGS@ XMLSEC_LIBS = @XMLSEC_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ aqbanking_backends = @aqbanking_backends@ aqbanking_cfg_searchdir = @aqbanking_cfg_searchdir@ aqbanking_data_searchdir = @aqbanking_data_searchdir@ aqbanking_headerdir = @aqbanking_headerdir@ aqbanking_headerdir_am = @aqbanking_headerdir_am@ aqbanking_includes = @aqbanking_includes@ aqbanking_internal_libs = @aqbanking_internal_libs@ aqbanking_ldflags = @aqbanking_ldflags@ aqbanking_libs = @aqbanking_libs@ aqbanking_locale_searchdir = @aqbanking_locale_searchdir@ aqbanking_modules = @aqbanking_modules@ aqbanking_pkgdatadir = @aqbanking_pkgdatadir@ aqbanking_plugin_searchdir = @aqbanking_plugin_searchdir@ aqbanking_plugindir = @aqbanking_plugindir@ aqbanking_plugins_backends_dirs = @aqbanking_plugins_backends_dirs@ aqbanking_plugins_backends_libs = @aqbanking_plugins_backends_libs@ aqbanking_plugins_bankinfo_dirs = @aqbanking_plugins_bankinfo_dirs@ aqbanking_plugins_bankinfo_libs = @aqbanking_plugins_bankinfo_libs@ aqbanking_plugins_imexporters_dirs = @aqbanking_plugins_imexporters_dirs@ aqbanking_plugins_imexporters_libs = @aqbanking_plugins_imexporters_libs@ aqbanking_plugins_parsers_dirs = @aqbanking_plugins_parsers_dirs@ aqbanking_symlinkdir = @aqbanking_symlinkdir@ aqbanking_sys_is_windows = @aqbanking_sys_is_windows@ aqbankingpp_modules = @aqbankingpp_modules@ aqebics_datadir = @aqebics_datadir@ aqebics_includes = @aqebics_includes@ aqebics_internal_libs = @aqebics_internal_libs@ aqebics_ldflags = @aqebics_ldflags@ aqebics_libs = @aqebics_libs@ aqfints_datadir = @aqfints_datadir@ aqhbci_datadir = @aqhbci_datadir@ aqhbci_includes = @aqhbci_includes@ aqhbci_internal_libs = @aqhbci_internal_libs@ aqhbci_ldflags = @aqhbci_ldflags@ aqhbci_libs = @aqhbci_libs@ aqofxconnect_includes = @aqofxconnect_includes@ aqofxconnect_internal_libs = @aqofxconnect_internal_libs@ aqofxconnect_libs = @aqofxconnect_libs@ aqpaypal_includes = @aqpaypal_includes@ aqpaypal_internal_libs = @aqpaypal_internal_libs@ aqpaypal_libs = @aqpaypal_libs@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gmp_libs = @gmp_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_dir = @gwenhywfar_dir@ gwenhywfar_has_crypt = @gwenhywfar_has_crypt@ gwenhywfar_headers = @gwenhywfar_headers@ gwenhywfar_includes = @gwenhywfar_includes@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_plugins = @gwenhywfar_plugins@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ typemaker2_exe = @typemaker2_exe@ visibility_cflags = @visibility_cflags@ with_aqebics = @with_aqebics@ with_aqhbci = @with_aqhbci@ xmlfiles = \ $(srcdir)/hbciallgrp.xml \ $(srcdir)/hbci210seg.xml \ $(srcdir)/hbci210job.xml \ $(srcdir)/hbci201seg.xml \ $(srcdir)/hbci201job.xml \ $(srcdir)/hbci220seg.xml \ $(srcdir)/hbci220job.xml \ $(srcdir)/fints300seg.xml \ $(srcdir)/fints300job.xml \ $(srcdir)/hbciallseg.xml EXTRA_DIST = $(xmlfiles) CLEANFILES = base.xml all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libs/plugins/backends/aqhbci/applayer/xml/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libs/plugins/backends/aqhbci/applayer/xml/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile all-local installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am all-local check check-am clean clean-generic \ clean-libtool cscopelist-am ctags-am distclean \ distclean-generic distclean-libtool distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags-am uninstall \ uninstall-am .PRECIOUS: Makefile sources: base.xml: $(xmlfiles) $(XMLMERGE) $(xmlfiles) -v --compact -o $@ all-local: base.xml typefiles: for d in $(SUBDIRS); do \ $(MAKE) -C $$d typefiles; \ done typedefs: for d in $(SUBDIRS); do \ $(MAKE) -C $$d typedefs; \ done # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/applayer/xml/fints300job.xml0000664000175000017500000000442514043610745024015 00000000000000 9999999999 0 0 0 0 0 0 aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/applayer/xml/hbci220job.xml0000664000175000017500000000507514043610745023602 00000000000000 9999999999 0 0 0 0 9999999999 0 0 0 0 aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/applayer/xml/hbci201job.xml0000664000175000017500000000467414043610745023605 00000000000000 9999999999 0 0 0 0 9999999999 0 0 0 0 %code %version aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/applayer/xml/hbci220seg.xml0000664000175000017500000006141314043610745023604 00000000000000 %code %version %pversion $MessageNumber $DialogId %code %version %code %version $MessageNumber %code %version 2 1 1 1 ?userId ?signkeynumber ?signkeyversion S %code %version 1 1 1 1 ?userId ?signkeynumber ?signkeyversion S %code %version 999 1 1 1 ?userId 1 1 S %code %version %code %version %code %version %code %version 998 4 1 1 0 ?userId ?cryptkeynumber ?cryptkeyversion V %code %version 998 4 1 1 0 ?userId ?cryptkeynumber ?cryptkeyversion V %code %version 998 998 1 1 0 ?userId 1 1 V %code %version 999 %code %version %code %version %code %version %code %version 0 ?customerId 0 %code %version ?systemid ?customerId 1 %code %version ?systemid ?customerId 1 %code %version ?bpdversion ?updversion 1 ?product ?productversion %code %version $DialogId %code %version %code %version %code %version %code %version %code %version %code %version %code %version 1 %code %version %code %version %code %version %code %version %code %version %code %version %code %version %code %version %code %version aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/applayer/xml/hbci201seg.xml0000664000175000017500000005032614043610745023604 00000000000000 %code %version %pversion $MessageNumber $DialogId %code %version %code %version $MessageNumber %code %version 2 1 1 1 ?userId ?signkeynumber ?signkeyversion S %code %version 1 1 1 1 ?userId ?signkeynumber ?signkeyversion S %code %version 999 1 1 1 ?userId 1 1 S %code %version %code %version 998 4 1 1 0 ?userId ?cryptkeynumber ?cryptkeyversion V %code %version 998 4 1 1 0 ?userId ?cryptkeynumber ?cryptkeyversion V %code %version 998 998 1 1 0 ?userId 1 1 V %code %version 999 %code %version %code %version %code %version %code %version %code %version %code %version ?customerId 0 0 %code %version ?customerId ?systemId 1 %code %version ?customerId ?systemId 1 %code %version ?bpdversion ?updversion 1 ?product ?productversion %code %version $DialogId %code %version %code %version %code %version %code %version %code %version %code %version %code %version aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/applayer/adminjobs_l.h0000664000175000017500000000565114044534775023077 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_ADMINJOBS_L_H #define AH_ADMINJOBS_L_H #include "aqhbci/joblayer/job_l.h" #include "aqhbci/banking/account.h" #include #ifdef __cplusplus extern "C" { #endif /* __________________________________________________________________________ * AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA * AH_Job_UpdateBank * YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY */ AH_JOB *AH_Job_UpdateBank_new(AB_PROVIDER *pro, AB_USER *u); /* __________________________________________________________________________ * AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA * AH_Job_TestVersion * YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY */ typedef enum { AH_JobTestVersion_ResultUnknown=0, AH_JobTestVersion_ResultNotSupported, AH_JobTestVersion_ResultMaybeSupported, AH_JobTestVersion_ResultSupported } AH_JOB_TESTVERSION_RESULT; AH_JOB *AH_Job_TestVersion_new(AB_PROVIDER *pro, AB_USER *u, int anon); AH_JOB_TESTVERSION_RESULT AH_Job_TestVersion_GetResult(const AH_JOB *j); /* __________________________________________________________________________ * AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA * AH_Job_GetStatus * YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY */ AH_JOB *AH_Job_GetStatus_new(AB_PROVIDER *pro, AB_USER *u, const GWEN_TIME *fromDate, const GWEN_TIME *toDate); AH_RESULT_LIST *AH_Job_GetStatus_GetResults(const AH_JOB *j); /* __________________________________________________________________________ * AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA * AH_Job_GetItanModes * YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY */ AH_JOB *AH_Job_GetItanModes_new(AB_PROVIDER *pro, AB_USER *u); const int *AH_Job_GetItanModes_GetModes(const AH_JOB *j); /* __________________________________________________________________________ * AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA * AH_Job_ChangePin * YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY */ AH_JOB *AH_Job_ChangePin_new(AB_PROVIDER *pro, AB_USER *u, const char *newPin); #ifdef __cplusplus } #endif #endif /* AH_ADMINJOBS_L_H */ aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/applayer/cbox_itan.c0000664000175000017500000003352414576274523022561 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "aqhbci/applayer/cbox_itan.h" #include "aqhbci/banking/provider_tan.h" #include "aqhbci/applayer/cbox_itan1.h" #include "aqhbci/applayer/cbox_itan2.h" #include "aqbanking/i18n_l.h" #include #include #include /* ------------------------------------------------------------------------------------------------ * forward declarations * ------------------------------------------------------------------------------------------------ */ static int _hashAndSetAsItanHash(int mode, const uint8_t *p, unsigned int l, AH_MSG *msg); static int _setupNeedTanAndSignersAndCrypter(AH_JOB *j, AH_MSG *msg, int doCopySigners); static int _addJobNodesToMessage(AH_JOB *j, AH_MSG *msg); static GWEN_DB_NODE *_getMessageSpecificArgsOrJobArgs(AH_JOB *j, const GWEN_XMLNODE *jnode); static const AH_TAN_METHOD *_getAndCheckUserSelectedTanMethod(AB_USER *u, const AH_TAN_METHOD_LIST *tml); static const AH_TAN_METHOD *_getAndCheckAutoSelectedTanMethod(AB_USER *u, const AH_TAN_METHOD_LIST *tml); /* ------------------------------------------------------------------------------------------------ * implementations * ------------------------------------------------------------------------------------------------ */ int AH_OutboxCBox_JobToMessage(AH_JOB *j, AH_MSG *msg, int doCopySigners) { AB_USER *user; int rv; DBG_NOTICE(AQHBCI_LOGDOMAIN, "Encoding job \"%s\"", AH_Job_GetName(j)); user=AH_Job_GetUser(j); assert(user); /* setup message */ AH_Msg_SetHbciVersion(msg, AH_User_GetHbciVersion(user)); rv=_setupNeedTanAndSignersAndCrypter(j, msg, doCopySigners); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } rv=_addJobNodesToMessage(j, msg); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } if (AH_Job_GetStatus(j)!=AH_JobStatusError) { DBG_NOTICE(AQHBCI_LOGDOMAIN, "Job \"%s\" encoded", AH_Job_GetName(j)); AH_Job_SetStatus(j, AH_JobStatusEncoded); } return 0; } int AH_OutboxCBox_SendAndReceiveQueueWithTan(AH_OUTBOX_CBOX *cbox, AH_DIALOG *dlg, AH_JOBQUEUE *qJob) { int rv; int process; process=AH_Dialog_GetItanProcessType(dlg); if (process==1) rv=AH_OutboxCBox_Itan1(cbox, dlg, qJob); else if (process==2) rv=AH_OutboxCBox_SendAndReceiveQueueWithTan2(cbox, dlg, qJob); else { DBG_ERROR(AQHBCI_LOGDOMAIN, "iTAN method %d not supported", process); return GWEN_ERROR_INVALID; } return rv; } int AH_OutboxCBox_SelectItanMode(AH_OUTBOX_CBOX *cbox, AH_DIALOG *dlg) { AB_USER *u; const AH_TAN_METHOD_LIST *tml; const AH_TAN_METHOD *tm; const char *s; u=AH_OutboxCBox_GetUser(cbox); assert(u); tml=AH_User_GetTanMethodDescriptions(u); if (tml==NULL || AH_TanMethod_List_GetCount(tml)<1) { /* no or empty list, select 999 */ DBG_WARN(AQHBCI_LOGDOMAIN, "No tan methods, trying One-Step TAN"); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Warning, I18N("There are no tan method descriptions (yet), trying One-Step TAN.")); AH_Dialog_SetItanMethod(dlg, 999); AH_Dialog_SetItanProcessType(dlg, 1); AH_Dialog_SetTanJobVersion(dlg, 0); return 0; } tm=_getAndCheckUserSelectedTanMethod(u, tml); if (tm==NULL) tm=_getAndCheckAutoSelectedTanMethod(u, tml); if (tm==NULL) { DBG_ERROR(AQHBCI_LOGDOMAIN, "No matching iTAN mode found"); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Info, I18N("No valid iTAN method found")); return GWEN_ERROR_NOT_FOUND; } s=AH_TanMethod_GetMethodName(tm); if (!s || !*s) s=AH_TanMethod_GetMethodId(tm); DBG_NOTICE(AQHBCI_LOGDOMAIN, "Selecting TAN mode \"%s\" (%d, version %d, process %d))", s, AH_TanMethod_GetFunction(tm), AH_TanMethod_GetGvVersion(tm), AH_TanMethod_GetProcess(tm)); GWEN_Gui_ProgressLog2(0, GWEN_LoggerLevel_Info, I18N("Selecting iTAN mode \"%s\" (%d, version %d, process %d)"), s?s:I18N("(unnamed)"), AH_TanMethod_GetFunction(tm), AH_TanMethod_GetGvVersion(tm), AH_TanMethod_GetProcess(tm)); AH_Dialog_SetItanMethod(dlg, AH_TanMethod_GetFunction(tm)); AH_Dialog_SetItanProcessType(dlg, AH_TanMethod_GetProcess(tm)); AH_Dialog_SetTanJobVersion(dlg, AH_TanMethod_GetGvVersion(tm)); AH_Dialog_SetTanMethodDescription(dlg, tm); return 0; } int AH_OutboxCBox_InputTanWithChallenge(AH_OUTBOX_CBOX *cbox, AH_DIALOG *dialog, const char *sChallenge, const char *sChallengeHhd, char *passwordBuffer, int passwordMinLen, int passwordMaxLen) { int rv; const AH_TAN_METHOD *tanMethodDescription=NULL; AB_PROVIDER *provider; AB_USER *user; provider=AH_OutboxCBox_GetProvider(cbox); user=AH_OutboxCBox_GetUser(cbox); tanMethodDescription=AH_Dialog_GetTanMethodDescription(dialog); assert(tanMethodDescription); rv=AH_Provider_InputTanWithChallenge(provider, user, tanMethodDescription, sChallenge, sChallengeHhd, passwordBuffer, passwordMinLen, passwordMaxLen); return rv; } void AH_OutboxCBox_CopyJobResultsToJobList(const AH_JOB *j, const AH_JOB_LIST *qjl) { /* dispatch results from jTan to all other members of the queue */ if (qjl) { AH_RESULT_LIST *rl; /* segment results */ rl=AH_Job_GetSegResults(j); if (rl) { AH_RESULT *or; or=AH_Result_List_First(rl); while (or) { AH_JOB *qj; qj=AH_Job_List_First(qjl); while (qj) { if (qj!=j) { AH_RESULT *nr; nr=AH_Result_dup(or); AH_Result_List_Add(nr, AH_Job_GetSegResults(qj)); } qj=AH_Job_List_Next(qj); } or=AH_Result_List_Next(or); } /* while or */ } /* if rl */ } /* if qjl */ } int _setupNeedTanAndSignersAndCrypter(AH_JOB *j, AH_MSG *msg, int doCopySigners) { if (AH_Job_GetFlags(j) & AH_JOB_FLAGS_NEEDTAN) { DBG_NOTICE(AQHBCI_LOGDOMAIN, "Job needs a TAN"); } else { DBG_NOTICE(AQHBCI_LOGDOMAIN, "Jobs doesn't need a TAN"); } AH_Msg_SetNeedTan(msg, (AH_Job_GetFlags(j) & AH_JOB_FLAGS_NEEDTAN)?1:0); if (doCopySigners) { /* copy signers */ if (AH_Job_GetFlags(j) & AH_JOB_FLAGS_SIGN) { GWEN_STRINGLISTENTRY *se; se=GWEN_StringList_FirstEntry(AH_Job_GetSigners(j)); if (!se) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Signatures needed but no signer given"); return GWEN_ERROR_INVALID; } while (se) { AH_Msg_AddSignerId(msg, GWEN_StringListEntry_Data(se)); se=GWEN_StringListEntry_Next(se); } /* while */ } } /* copy crypter */ if (AH_Job_GetFlags(j) & AH_JOB_FLAGS_CRYPT) { /* The name doesn't matter here, since jobs are only used by clients * and the client code for getMedium always uses the name of the dialog * owner instead of the name from the keyspec when retrieving the medium * for encryption. */ AH_Msg_SetCrypterId(msg, "owner"); } return 0; } int _addJobNodesToMessage(AH_JOB *j, AH_MSG *msg) { GWEN_DB_NODE *jargs; GWEN_XMLNODE *jnode; unsigned int firstSeg; unsigned int lastSeg; GWEN_BUFFER *msgBuf; uint32_t startPos; /* get arguments and XML node */ jnode=AH_Job_GetXmlNode(j); jargs=_getMessageSpecificArgsOrJobArgs(j, jnode); /* add job node to message */ firstSeg=AH_Msg_GetCurrentSegmentNumber(msg); msgBuf=AH_Msg_GetBuffer(msg); assert(msgBuf); startPos=GWEN_Buffer_GetPos(msgBuf); lastSeg=AH_Msg_AddNode(msg, jnode, jargs); if (!lastSeg) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not encode job \"%s\"", AH_Job_GetName(j)); AH_Job_SetStatus(j, AH_JobStatusError); return GWEN_ERROR_INTERNAL; } AH_Job_SetFirstSegment(j, firstSeg); AH_Job_SetLastSegment(j, lastSeg); /* iTAN management */ if (AH_Msg_GetItanHashBuffer(msg)==NULL) { int rv; uint32_t endPos; endPos=GWEN_Buffer_GetPos(msgBuf); rv=_hashAndSetAsItanHash(AH_Msg_GetItanHashMode(msg), (const uint8_t *)GWEN_Buffer_GetStart(msgBuf)+startPos, endPos-startPos, msg); if (rv) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not hash data (%d)", rv); AH_Job_SetStatus(j, AH_JobStatusError); return rv; } } return 0; } GWEN_DB_NODE *_getMessageSpecificArgsOrJobArgs(AH_JOB *j, const GWEN_XMLNODE *jnode) { GWEN_DB_NODE *jargs; jargs=AH_Job_GetArguments(j); if (strcasecmp(GWEN_XMLNode_GetData(jnode), "message")==0) { const char *s; s=GWEN_XMLNode_GetProperty(jnode, "name", 0); if (s) { DBG_NOTICE(AQHBCI_LOGDOMAIN, "Getting for message specific data (%s)", s); jargs=GWEN_DB_GetGroup(jargs, GWEN_PATH_FLAGS_NAMEMUSTEXIST, s); if (!jargs) { DBG_NOTICE(AQHBCI_LOGDOMAIN, "No message specific data"); jargs=AH_Job_GetArguments(j); } } } return jargs; } const AH_TAN_METHOD *_getAndCheckUserSelectedTanMethod(AB_USER *u, const AH_TAN_METHOD_LIST *tml) { const AH_TAN_METHOD *tm=NULL; int fn; fn=AH_User_GetSelectedTanMethod(u); if (fn) { int utFunction; int utJobVersion; utFunction=fn % 1000; utJobVersion=fn / 1000; DBG_INFO(AQHBCI_LOGDOMAIN, "Selected TAN method: %d (Job version %d, Function %d)", fn, utFunction, utJobVersion); if (AH_User_HasTanMethod(u, utFunction)) { tm=AH_TanMethod_List_First(tml); while (tm) { int proc; if (AH_TanMethod_GetFunction(tm)==utFunction && AH_TanMethod_GetGvVersion(tm)==utJobVersion) { proc=AH_TanMethod_GetProcess(tm); if (proc==1 || proc==2) { DBG_INFO(AQHBCI_LOGDOMAIN, "Found description for selected TAN method %d (process: %d)", fn, proc); break; } else { DBG_NOTICE(AQHBCI_LOGDOMAIN, "iTan process type \"%d\" not supported, ignoring", proc); } } tm=AH_TanMethod_List_Next(tm); } if (tm==NULL) { GWEN_Gui_ProgressLog2(0, GWEN_LoggerLevel_Warning, I18N("TAN method (%d) selected by user is no longer valid, " "please choose another one"), fn); } } else { DBG_INFO(AQHBCI_LOGDOMAIN, "AH_User_HasTanMethod(%d): no", fn); } } else { DBG_INFO(AQHBCI_LOGDOMAIN, "No Tan method selected"); } return tm; } const AH_TAN_METHOD *_getAndCheckAutoSelectedTanMethod(AB_USER *u, const AH_TAN_METHOD_LIST *tml) { const AH_TAN_METHOD *tm; /* choose a method */ DBG_INFO(AQHBCI_LOGDOMAIN, "Autoselecting a usable TAN method"); tm=AH_TanMethod_List_First(tml); while (tm) { int proc; int fn; proc=AH_TanMethod_GetProcess(tm); fn=AH_TanMethod_GetFunction(tm); if (proc==1 || proc==2) { DBG_INFO(AQHBCI_LOGDOMAIN, "Found a possible description (fn=%d, process: %d)", fn, proc); if (AH_User_HasTanMethod(u, AH_TanMethod_GetFunction(tm))) { DBG_INFO(AQHBCI_LOGDOMAIN, "AH_User_HasTanMethod(%d): yes", fn); break; } else { DBG_INFO(AQHBCI_LOGDOMAIN, "AH_User_HasTanMethod(%d): no", fn); } } else { DBG_NOTICE(AQHBCI_LOGDOMAIN, "iTan process type \"%d\" not supported, ignoring", proc); } tm=AH_TanMethod_List_Next(tm); } return tm; } int _hashAndSetAsItanHash(int mode, const uint8_t *p, unsigned int l, AH_MSG *msg) { GWEN_MDIGEST *md=NULL; int rv; GWEN_BUFFER *hbuf; DBG_DEBUG(AQHBCI_LOGDOMAIN, "Hashmode: %d", mode); switch (mode) { case 0: DBG_NOTICE(AQHBCI_LOGDOMAIN, "No ITAN hash mode, assuming RMD160"); /* fall through */ case 1: /* RMD160 over buffer */ DBG_INFO(AQHBCI_LOGDOMAIN, "Using RMD160"); md=GWEN_MDigest_Rmd160_new(); if (md==NULL) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not create MD RMD160"); } break; case 2: /* SHA over buffer */ DBG_INFO(AQHBCI_LOGDOMAIN, "Using SHA1"); md=GWEN_MDigest_Sha1_new(); if (md==NULL) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not create MD SHA1"); } break; default: /* invalid mode */ DBG_ERROR(AQHBCI_LOGDOMAIN, "Invalid ITAN hash mode \"%d\"", mode); return GWEN_ERROR_INVALID; } if (md==NULL) { DBG_ERROR(AQHBCI_LOGDOMAIN, "No message digestion algo (mode %d)", mode); return GWEN_ERROR_INVALID; } rv=GWEN_MDigest_Begin(md); if (rv<0) { GWEN_MDigest_free(md); return rv; } rv=GWEN_MDigest_Update(md, p, l); if (rv<0) { GWEN_MDigest_free(md); return rv; } rv=GWEN_MDigest_End(md); if (rv<0) { GWEN_MDigest_free(md); return rv; } hbuf=GWEN_Buffer_new(0, 32, 0, 1); GWEN_Buffer_AppendBytes(hbuf, (const char *)GWEN_MDigest_GetDigestPtr(md), GWEN_MDigest_GetDigestSize(md)); GWEN_MDigest_free(md); AH_Msg_SetItanHashBuffer(msg, hbuf); DBG_NOTICE(AQHBCI_LOGDOMAIN, "Hashed job segment"); return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/applayer/cbox_dialog.h0000664000175000017500000000131414043610745023047 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_OUTBOX_CBOX_DIALOG_H #define AH_OUTBOX_CBOX_DIALOG_H #include "aqhbci/applayer/cbox.h" int AH_OutboxCBox_OpenDialog(AH_OUTBOX_CBOX *cbox, AH_DIALOG *dlg, uint32_t jqFlags); int AH_OutboxCBox_CloseDialog(AH_OUTBOX_CBOX *cbox, AH_DIALOG *dlg, uint32_t jqFlags); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/applayer/cbox_itan1.h0000664000175000017500000000116414043610745022627 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_OUTBOX_CBOX_ITAN1_H #define AH_OUTBOX_CBOX_ITAN1_H #include "aqhbci/applayer/cbox_itan.h" int AH_OutboxCBox_Itan1(AH_OUTBOX_CBOX *cbox, AH_DIALOG *dlg, AH_JOBQUEUE *qJob); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/applayer/cbox_recv.h0000664000175000017500000000131514043610745022550 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_OUTBOX_CBOX_RECV_H #define AH_OUTBOX_CBOX_RECV_H #include "aqhbci/applayer/cbox.h" AH_MSG *AH_OutboxCBox_RecvMessage(AH_OUTBOX_CBOX *cbox, AH_DIALOG *dlg, GWEN_DB_NODE *dbRsp); int AH_OutboxCBox_RecvQueue(AH_OUTBOX_CBOX *cbox, AH_DIALOG *dlg, AH_JOBQUEUE *jq); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/applayer/cbox_hbci.c0000664000175000017500000000761014043610745022515 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "aqhbci/applayer/cbox_hbci.h" #include "aqhbci/applayer/cbox_queue.h" #include "aqbanking/i18n_l.h" #include int AH_OutboxCBox_OpenDialog_Hbci(AH_OUTBOX_CBOX *cbox, AH_DIALOG *dlg, uint32_t jqFlags) { AB_PROVIDER *provider; AB_USER *user; AH_JOBQUEUE *jqDlgOpen; AH_JOB *jDlgOpen; int rv; DBG_NOTICE(AQHBCI_LOGDOMAIN, "Creating dialog open request"); provider=AH_OutboxCBox_GetProvider(cbox); user=AH_OutboxCBox_GetUser(cbox); AH_Dialog_SetItanProcessType(dlg, 0); if ((jqFlags & AH_JOBQUEUE_FLAGS_CRYPT) || (jqFlags & AH_JOBQUEUE_FLAGS_SIGN)) { /* sign and crypt, not anonymous */ DBG_NOTICE(AQHBCI_LOGDOMAIN, "Creating non-anonymous dialog open request"); jDlgOpen=AH_Job_new("JobDialogInit", provider, user, 0, 0); if (!jDlgOpen) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not create job JobDialogInit"); return GWEN_ERROR_GENERIC; } if (jqFlags & AH_JOBQUEUE_FLAGS_SIGN) AH_Job_AddSigner(jDlgOpen, AB_User_GetUserId(user)); AH_Dialog_SubFlags(dlg, AH_DIALOG_FLAGS_ANONYMOUS); if (AH_User_GetCryptMode(user)==AH_CryptMode_Pintan) { if (AH_User_HasTanMethodOtherThan(user, 999) && !(jqFlags & AH_JOBQUEUE_FLAGS_NOITAN)) { /* only use itan if any other mode than singleStep is available * and the job queue does not request non-ITAN mode */ rv=AH_OutboxCBox_SelectItanMode(cbox, dlg); if (rv) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } } } } else { /* neither sign nor crypt, use anonymous dialog */ DBG_NOTICE(AQHBCI_LOGDOMAIN, "Creating anonymous dialog open request"); jDlgOpen=AH_Job_new("JobDialogInitAnon", provider, user, 0, 0); if (!jDlgOpen) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not create job JobDialogInitAnon"); return GWEN_ERROR_GENERIC; } AH_Dialog_AddFlags(dlg, AH_DIALOG_FLAGS_ANONYMOUS); } GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Notice, I18N("Opening dialog")); jqDlgOpen=AH_JobQueue_new(user); AH_JobQueue_AddFlags(jqDlgOpen, AH_JOBQUEUE_FLAGS_OUTBOX); DBG_NOTICE(AQHBCI_LOGDOMAIN, "Enqueueing dialog open request"); if (AH_JobQueue_AddJob(jqDlgOpen, jDlgOpen)!=AH_JobQueueAddResultOk) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not add single job to queue"); AH_Job_free(jDlgOpen); AH_JobQueue_free(jqDlgOpen); return GWEN_ERROR_GENERIC; } rv=AH_OutboxCBox_SendAndRecvQueue(cbox, dlg, jqDlgOpen); if (rv) { DBG_NOTICE(AQHBCI_LOGDOMAIN, "Could not exchange message"); AH_JobQueue_free(jqDlgOpen); return rv; } if (AH_Job_HasErrors(jDlgOpen)) { /* TODO: check for iTAN related error and try again */ if (AH_Job_HasItanResult(jDlgOpen)) { DBG_NOTICE(AQHBCI_LOGDOMAIN, "Adjusting to iTAN modes of the server"); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Notice, I18N("Adjusting to iTAN modes of the server")); /* do not call AH_Job_CommitSystemData() here, the iTAN modes have already * been caught by AH_JobQueue_DispatchMessage() AH_Job_CommitSystemData(jDlgOpen); */ AH_JobQueue_free(jqDlgOpen); return 1; } else { DBG_ERROR(AQHBCI_LOGDOMAIN, "Error opening dialog, aborting"); AH_JobQueue_free(jqDlgOpen); return GWEN_ERROR_GENERIC; } } DBG_NOTICE(AQHBCI_LOGDOMAIN, "Dialog open request done"); rv=AH_Job_CommitSystemData(jDlgOpen, 0); AH_JobQueue_free(jqDlgOpen); return rv; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/applayer/Makefile.in0000644000175000017500000007471715037736025022514 00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/libs/plugins/backends/aqhbci/applayer ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/distri.m4 $(top_srcdir)/m4/gwenhywfar.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/os.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libhbciapp_la_LIBADD = am_libhbciapp_la_OBJECTS = adminjobs.lo hhd.lo outbox.lo cbox.lo \ cbox_recv.lo cbox_send.lo cbox_psd2.lo cbox_hbci.lo \ cbox_dialog.lo cbox_itan.lo cbox_itan1.lo cbox_itan2.lo \ cbox_prepare.lo cbox_queue.lo libhbciapp_la_OBJECTS = $(am_libhbciapp_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/adminjobs.Plo ./$(DEPDIR)/cbox.Plo \ ./$(DEPDIR)/cbox_dialog.Plo ./$(DEPDIR)/cbox_hbci.Plo \ ./$(DEPDIR)/cbox_itan.Plo ./$(DEPDIR)/cbox_itan1.Plo \ ./$(DEPDIR)/cbox_itan2.Plo ./$(DEPDIR)/cbox_prepare.Plo \ ./$(DEPDIR)/cbox_psd2.Plo ./$(DEPDIR)/cbox_queue.Plo \ ./$(DEPDIR)/cbox_recv.Plo ./$(DEPDIR)/cbox_send.Plo \ ./$(DEPDIR)/hhd.Plo ./$(DEPDIR)/outbox.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libhbciapp_la_SOURCES) DIST_SOURCES = $(libhbciapp_la_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac HEADERS = $(noinst_HEADERS) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir distdir-am am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp README DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ADD_ACLOCAL_FLAGS = @ADD_ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AQBANKING_CLI_VERSION_STRING = @AQBANKING_CLI_VERSION_STRING@ AQBANKING_FINTS_VERSION_STRING = @AQBANKING_FINTS_VERSION_STRING@ AQBANKING_SO_AGE = @AQBANKING_SO_AGE@ AQBANKING_SO_CURRENT = @AQBANKING_SO_CURRENT@ AQBANKING_SO_EFFECTIVE = @AQBANKING_SO_EFFECTIVE@ AQBANKING_SO_REVISION = @AQBANKING_SO_REVISION@ AQBANKING_VERSION_BUILD = @AQBANKING_VERSION_BUILD@ AQBANKING_VERSION_FULL_STRING = @AQBANKING_VERSION_FULL_STRING@ AQBANKING_VERSION_MAJOR = @AQBANKING_VERSION_MAJOR@ AQBANKING_VERSION_MINOR = @AQBANKING_VERSION_MINOR@ AQBANKING_VERSION_PATCHLEVEL = @AQBANKING_VERSION_PATCHLEVEL@ AQBANKING_VERSION_RELEASE_STRING = @AQBANKING_VERSION_RELEASE_STRING@ AQBANKING_VERSION_STRING = @AQBANKING_VERSION_STRING@ AQBANKING_VERSION_TAG = @AQBANKING_VERSION_TAG@ AQEBICS_CFLAGS = @AQEBICS_CFLAGS@ AQEBICS_LIBS = @AQEBICS_LIBS@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATETIME = @DATETIME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_EXCLUDE_PATTERNS = @DOXYGEN_EXCLUDE_PATTERNS@ DOXYGEN_FILE_PATTERNS = @DOXYGEN_FILE_PATTERNS@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENGUI_GTK2_CFLAGS = @GWENGUI_GTK2_CFLAGS@ GWENGUI_GTK2_LIBS = @GWENGUI_GTK2_LIBS@ GWENHYWFAR_MINIMUM_VERSION = @GWENHYWFAR_MINIMUM_VERSION@ HAVE_GWENGUI_GTK2 = @HAVE_GWENGUI_GTK2@ HAVE_I18N = @HAVE_I18N@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIBXSLT_CFLAGS = @LIBXSLT_CFLAGS@ LIBXSLT_LIBS = @LIBXSLT_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_SUPPORTS_QT = @MSGFMT_SUPPORTS_QT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ TUTORIALS = @TUTORIALS@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XMLMERGE = @XMLMERGE@ XMLSEC_CFLAGS = @XMLSEC_CFLAGS@ XMLSEC_LIBS = @XMLSEC_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ aqbanking_backends = @aqbanking_backends@ aqbanking_cfg_searchdir = @aqbanking_cfg_searchdir@ aqbanking_data_searchdir = @aqbanking_data_searchdir@ aqbanking_headerdir = @aqbanking_headerdir@ aqbanking_headerdir_am = @aqbanking_headerdir_am@ aqbanking_includes = @aqbanking_includes@ aqbanking_internal_libs = @aqbanking_internal_libs@ aqbanking_ldflags = @aqbanking_ldflags@ aqbanking_libs = @aqbanking_libs@ aqbanking_locale_searchdir = @aqbanking_locale_searchdir@ aqbanking_modules = @aqbanking_modules@ aqbanking_pkgdatadir = @aqbanking_pkgdatadir@ aqbanking_plugin_searchdir = @aqbanking_plugin_searchdir@ aqbanking_plugindir = @aqbanking_plugindir@ aqbanking_plugins_backends_dirs = @aqbanking_plugins_backends_dirs@ aqbanking_plugins_backends_libs = @aqbanking_plugins_backends_libs@ aqbanking_plugins_bankinfo_dirs = @aqbanking_plugins_bankinfo_dirs@ aqbanking_plugins_bankinfo_libs = @aqbanking_plugins_bankinfo_libs@ aqbanking_plugins_imexporters_dirs = @aqbanking_plugins_imexporters_dirs@ aqbanking_plugins_imexporters_libs = @aqbanking_plugins_imexporters_libs@ aqbanking_plugins_parsers_dirs = @aqbanking_plugins_parsers_dirs@ aqbanking_symlinkdir = @aqbanking_symlinkdir@ aqbanking_sys_is_windows = @aqbanking_sys_is_windows@ aqbankingpp_modules = @aqbankingpp_modules@ aqebics_datadir = @aqebics_datadir@ aqebics_includes = @aqebics_includes@ aqebics_internal_libs = @aqebics_internal_libs@ aqebics_ldflags = @aqebics_ldflags@ aqebics_libs = @aqebics_libs@ aqfints_datadir = @aqfints_datadir@ aqhbci_datadir = @aqhbci_datadir@ aqhbci_includes = @aqhbci_includes@ aqhbci_internal_libs = @aqhbci_internal_libs@ aqhbci_ldflags = @aqhbci_ldflags@ aqhbci_libs = @aqhbci_libs@ aqofxconnect_includes = @aqofxconnect_includes@ aqofxconnect_internal_libs = @aqofxconnect_internal_libs@ aqofxconnect_libs = @aqofxconnect_libs@ aqpaypal_includes = @aqpaypal_includes@ aqpaypal_internal_libs = @aqpaypal_internal_libs@ aqpaypal_libs = @aqpaypal_libs@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gmp_libs = @gmp_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_dir = @gwenhywfar_dir@ gwenhywfar_has_crypt = @gwenhywfar_has_crypt@ gwenhywfar_headers = @gwenhywfar_headers@ gwenhywfar_includes = @gwenhywfar_includes@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_plugins = @gwenhywfar_plugins@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ typemaker2_exe = @typemaker2_exe@ visibility_cflags = @visibility_cflags@ with_aqebics = @with_aqebics@ with_aqhbci = @with_aqhbci@ SUBDIRS = xml AM_CFLAGS = -DBUILDING_AQBANKING @visibility_cflags@ AM_CPPFLAGS = -I$(top_srcdir)/src/libs -I$(top_builddir)/src/libs $(gwenhywfar_includes) \ -I$(srcdir)/../../ \ -I$(srcdir)/../ajobs \ -I$(srcdir)/../admjobs \ -I$(srcdir)/../banking \ -I$(srcdir)/../joblayer \ -I$(srcdir)/../msglayer \ -I$(srcdir)/../tan \ -I$(srcdir)/.. EXTRA_DIST = \ README noinst_LTLIBRARIES = libhbciapp.la noinst_HEADERS = \ adminjobs_l.h adminjobs_p.h\ outbox_l.h outbox_p.h \ hhd_l.h hhd_p.h \ cbox.h \ cbox_p.h \ cbox_itan.h \ cbox_itan1.h \ cbox_itan2.h \ cbox_send.h \ cbox_recv.h \ cbox_psd2.h \ cbox_hbci.h \ cbox_dialog.h \ cbox_prepare.h \ cbox_queue.h libhbciapp_la_SOURCES = \ adminjobs.c \ hhd.c \ outbox.c \ cbox.c \ cbox_recv.c \ cbox_send.c \ cbox_psd2.c \ cbox_hbci.c \ cbox_dialog.c \ cbox_itan.c \ cbox_itan1.c \ cbox_itan2.c \ cbox_prepare.c \ cbox_queue.c CLEANFILES = $(xmldata_DATA) tmp.xml all: all-recursive .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libs/plugins/backends/aqhbci/applayer/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libs/plugins/backends/aqhbci/applayer/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libhbciapp.la: $(libhbciapp_la_OBJECTS) $(libhbciapp_la_DEPENDENCIES) $(EXTRA_libhbciapp_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libhbciapp_la_OBJECTS) $(libhbciapp_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/adminjobs.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cbox.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cbox_dialog.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cbox_hbci.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cbox_itan.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cbox_itan1.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cbox_itan2.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cbox_prepare.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cbox_psd2.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cbox_queue.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cbox_recv.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cbox_send.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hhd.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/outbox.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-recursive -rm -f ./$(DEPDIR)/adminjobs.Plo -rm -f ./$(DEPDIR)/cbox.Plo -rm -f ./$(DEPDIR)/cbox_dialog.Plo -rm -f ./$(DEPDIR)/cbox_hbci.Plo -rm -f ./$(DEPDIR)/cbox_itan.Plo -rm -f ./$(DEPDIR)/cbox_itan1.Plo -rm -f ./$(DEPDIR)/cbox_itan2.Plo -rm -f ./$(DEPDIR)/cbox_prepare.Plo -rm -f ./$(DEPDIR)/cbox_psd2.Plo -rm -f ./$(DEPDIR)/cbox_queue.Plo -rm -f ./$(DEPDIR)/cbox_recv.Plo -rm -f ./$(DEPDIR)/cbox_send.Plo -rm -f ./$(DEPDIR)/hhd.Plo -rm -f ./$(DEPDIR)/outbox.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f ./$(DEPDIR)/adminjobs.Plo -rm -f ./$(DEPDIR)/cbox.Plo -rm -f ./$(DEPDIR)/cbox_dialog.Plo -rm -f ./$(DEPDIR)/cbox_hbci.Plo -rm -f ./$(DEPDIR)/cbox_itan.Plo -rm -f ./$(DEPDIR)/cbox_itan1.Plo -rm -f ./$(DEPDIR)/cbox_itan2.Plo -rm -f ./$(DEPDIR)/cbox_prepare.Plo -rm -f ./$(DEPDIR)/cbox_psd2.Plo -rm -f ./$(DEPDIR)/cbox_queue.Plo -rm -f ./$(DEPDIR)/cbox_recv.Plo -rm -f ./$(DEPDIR)/cbox_send.Plo -rm -f ./$(DEPDIR)/hhd.Plo -rm -f ./$(DEPDIR)/outbox.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ am--depfiles check check-am clean clean-generic clean-libtool \ clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am .PRECIOUS: Makefile sources: for f in $(libhbciapp_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d sources; \ done typefiles: for d in $(SUBDIRS); do \ $(MAKE) -C $$d typefiles; \ done typedefs: for d in $(SUBDIRS); do \ $(MAKE) -C $$d typedefs; \ done cppcheck: for f in $(libhbciapp_la_SOURCES); do \ cppcheck --force $$f ; \ done # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/applayer/outbox_l.h0000664000175000017500000000263214043610745022434 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_OUTBOX_L_H #define AH_OUTBOX_L_H #define AH_OUTBOX_FLAGS_ENDDIALOG 0x00000001 #define AH_OUTBOX_FLAGS_DEFAULT \ (\ AH_OUTBOX_FLAGS_ENDDIALOG \ ) typedef struct AH_OUTBOX AH_OUTBOX; #include "aqhbci/joblayer/job_l.h" #include "aqbanking/backendsupport/imexporter.h" #include "aqbanking/backendsupport/provider.h" AH_OUTBOX *AH_Outbox_new(AB_PROVIDER *pro); void AH_Outbox_free(AH_OUTBOX *ob); void AH_Outbox_Attach(AH_OUTBOX *ob); AB_IMEXPORTER_CONTEXT *AH_Outbox_GetImExContext(const AH_OUTBOX *outbox); void AH_Outbox_AddJob(AH_OUTBOX *ob, AH_JOB *j); /* makes all jobs process their data */ void AH_Outbox_Process(AH_OUTBOX *ob); int AH_Outbox_Execute(AH_OUTBOX *ob, AB_IMEXPORTER_CONTEXT *ctx, int withProgress, int nounmount, int doLock); AH_JOB *AH_Outbox_FindTransferJob(AH_OUTBOX *ob, AB_USER *u, AB_ACCOUNT *a, const char *jobName); AH_JOB_LIST *AH_Outbox_GetFinishedJobs(AH_OUTBOX *ob); #endif /* AH_OUTBOX_L_H */ aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/applayer/cbox.c0000664000175000017500000000552114043610745021527 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "cbox_p.h" #include #include #include #include /*#define EXTREME_DEBUGGING */ GWEN_LIST_FUNCTIONS(AH_OUTBOX_CBOX, AH_OutboxCBox); AH_OUTBOX_CBOX *AH_OutboxCBox_new(AB_PROVIDER *pro, AB_USER *u, AH_OUTBOX *ob) { AH_OUTBOX_CBOX *cbox; assert(pro); assert(u); GWEN_NEW_OBJECT(AH_OUTBOX_CBOX, cbox); cbox->usage=1; GWEN_LIST_INIT(AH_OUTBOX_CBOX, cbox); cbox->user=u; cbox->todoQueues=AH_JobQueue_List_new(); cbox->todoJobs=AH_Job_List_new(); cbox->finishedJobs=AH_Job_List_new(); cbox->provider=pro; cbox->outbox=ob; return cbox; } void AH_OutboxCBox_free(AH_OUTBOX_CBOX *cbox) { if (cbox) { assert(cbox->usage); if (--(cbox->usage)==0) { GWEN_LIST_FINI(AH_OUTBOX_CBOX, cbox); AH_JobQueue_List_free(cbox->todoQueues); AH_Job_List_free(cbox->todoJobs); AH_Job_List_free(cbox->finishedJobs); GWEN_FREE_OBJECT(cbox); } } } AH_OUTBOX *AH_OutboxCBox_GetOutbox(const AH_OUTBOX_CBOX *cbox) { assert(cbox); return cbox->outbox; } AB_PROVIDER *AH_OutboxCBox_GetProvider(const AH_OUTBOX_CBOX *cbox) { assert(cbox); return cbox->provider; } AB_USER *AH_OutboxCBox_GetUser(const AH_OUTBOX_CBOX *cbox) { assert(cbox); return cbox->user; } AH_JOB_LIST *AH_OutboxCBox_GetTodoJobs(const AH_OUTBOX_CBOX *cbox) { assert(cbox); return cbox->todoJobs; } AH_JOB_LIST *AH_OutboxCBox_GetFinishedJobs(const AH_OUTBOX_CBOX *cbox) { assert(cbox); return cbox->finishedJobs; } AH_JOBQUEUE_LIST *AH_OutboxCBox_GetTodoQueues(const AH_OUTBOX_CBOX *cbox) { assert(cbox); return cbox->todoQueues; } AH_JOBQUEUE_LIST *AH_OutboxCBox_TakeTodoQueues(AH_OUTBOX_CBOX *cbox) { AH_JOBQUEUE_LIST *jql; assert(cbox); jql=cbox->todoQueues; cbox->todoQueues=NULL; return jql; } void AH_OutboxCBox_SetTodoQueues(AH_OUTBOX_CBOX *cbox, AH_JOBQUEUE_LIST *nl) { assert(cbox); if (cbox->todoQueues) AH_JobQueue_List_free(cbox->todoQueues); cbox->todoQueues=nl; } void AH_OutboxCBox_AddTodoJob(AH_OUTBOX_CBOX *cbox, AH_JOB *j) { assert(cbox); assert(j); AH_Job_SetStatus(j, AH_JobStatusToDo); AH_Job_List_Add(j, cbox->todoJobs); } AH_JOB_LIST *AH_OutboxCBox_TakeFinishedJobs(AH_OUTBOX_CBOX *cbox) { AH_JOB_LIST *jl; assert(cbox); jl=cbox->finishedJobs; cbox->finishedJobs=AH_Job_List_new(); return jl; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/applayer/adminjobs_p.h0000664000175000017500000000551014043610745023064 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2004-2013 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_ADMINJOBS_P_H #define AH_ADMINJOBS_P_H #include "adminjobs_l.h" /* __________________________________________________________________________ * AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA * AH_Job_UpdateBank * YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY */ typedef struct AH_JOB_UPDATEBANK AH_JOB_UPDATEBANK; struct AH_JOB_UPDATEBANK { int scanned; }; static void GWENHYWFAR_CB AH_Job_UpdateBank_FreeData(void *bp, void *p); static int AH_Job_UpdateBank_Process(AH_JOB *j, AB_IMEXPORTER_CONTEXT *ctx); /* __________________________________________________________________________ * AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA * AH_Job_TestVersion * YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY */ typedef struct AH_JOB_TESTVERSION AH_JOB_TESTVERSION; struct AH_JOB_TESTVERSION { AH_JOB_TESTVERSION_RESULT versionSupported; }; static void GWENHYWFAR_CB AH_Job_TestVersion_FreeData(void *bp, void *p); static int AH_Job_TestVersion_Process(AH_JOB *j, AB_IMEXPORTER_CONTEXT *ctx); /* __________________________________________________________________________ * AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA * AH_Job_GetStatus * YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY */ typedef struct AH_JOB_GETSTATUS AH_JOB_GETSTATUS; struct AH_JOB_GETSTATUS { AH_RESULT_LIST *results; GWEN_TIME *fromDate; GWEN_TIME *toDate; }; static void GWENHYWFAR_CB AH_Job_GetStatus_FreeData(void *bp, void *p); static int AH_Job_GetStatus_Process(AH_JOB *j, AB_IMEXPORTER_CONTEXT *ctx); /* __________________________________________________________________________ * AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA * AH_Job_GetItanModes * YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY */ #define AH_JOB_GETITANMODES_MAXMODES 20 typedef struct AH_JOB_GETITANMODES AH_JOB_GETITANMODES; struct AH_JOB_GETITANMODES { int modeList[AH_JOB_GETITANMODES_MAXMODES+1]; int modeCount; }; static void GWENHYWFAR_CB AH_Job_GetItanModes_FreeData(void *bp, void *p); static int AH_Job_GetItanModes_Process(AH_JOB *j, AB_IMEXPORTER_CONTEXT *ctx); #endif /* AH_ADMINJOBS_P_H */ aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/applayer/cbox_itan2.h0000664000175000017500000000135114043610745022626 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_OUTBOX_CBOX_ITAN2_H #define AH_OUTBOX_CBOX_ITAN2_H #include "aqhbci/applayer/cbox_itan.h" int AH_OutboxCBox_SendAndReceiveQueueWithTan2(AH_OUTBOX_CBOX *cbox, AH_DIALOG *dlg, AH_JOBQUEUE *qJob); int AH_OutboxCBox_SendAndReceiveJobWithTan2(AH_OUTBOX_CBOX *cbox, AH_DIALOG *dlg, AH_JOB *job); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/applayer/cbox_psd2.c0000664000175000017500000000501414043610745022454 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "aqhbci/applayer/cbox_psd2.h" #include "aqhbci/applayer/cbox_itan2.h" #include "aqbanking/i18n_l.h" #include int AH_OutboxCBox_OpenDialogPsd2_Proc2(AH_OUTBOX_CBOX *cbox, AH_DIALOG *dlg) { AB_PROVIDER *provider; AB_USER *user; AH_JOB *jDlgOpen; int rv; DBG_NOTICE(AQHBCI_LOGDOMAIN, "Creating dialog open request"); provider=AH_OutboxCBox_GetProvider(cbox); user=AH_OutboxCBox_GetUser(cbox); AH_Dialog_SetItanProcessType(dlg, 0); /* use strong authentication */ AH_Dialog_AddFlags(dlg, AH_DIALOG_FLAGS_SCA); if (AH_User_HasTanMethodOtherThan(user, 999)) { /* only use itan if any other mode than singleStep is available * and the job queue does not request non-ITAN mode */ rv=AH_OutboxCBox_SelectItanMode(cbox, dlg); if (rv) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } } else { DBG_INFO(AQHBCI_LOGDOMAIN, "We have no list of allowed two-step TAN methods, maybe you should request TAN methods."); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Warning, I18N("We have no list of allowed two-step TAN methods, maybe you should request TAN methods.")); AH_Dialog_SetItanMethod(dlg, 999); AH_Dialog_SetItanProcessType(dlg, 1); AH_Dialog_SetTanJobVersion(dlg, 0); } /* dialog open job */ jDlgOpen=AH_Job_new("JobDialogInit", provider, user, 0, 0); if (!jDlgOpen) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not create job JobDialogInit"); return GWEN_ERROR_GENERIC; } AH_Job_SetCode(jDlgOpen, "HKIDN"); /* needed for HKTAN6 in SCA mode */ AH_Job_AddSigner(jDlgOpen, AB_User_GetUserId(user)); /* need signature in any case */ AH_Job_AddFlags(jDlgOpen, AH_JOB_FLAGS_SIGN); rv=AH_OutboxCBox_SendAndReceiveJobWithTan2(cbox, dlg, jDlgOpen); if (rv) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); AH_Job_free(jDlgOpen); return rv; } DBG_NOTICE(AQHBCI_LOGDOMAIN, "Dialog open request done."); rv=AH_Job_CommitSystemData(jDlgOpen, 0); AH_Job_free(jDlgOpen); return rv; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/applayer/cbox_queue.h0000664000175000017500000000150014043610745022731 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_OUTBOX_CBOX_QUEUE_H #define AH_OUTBOX_CBOX_QUEUE_H #include "aqhbci/applayer/cbox.h" int AH_OutboxCBox_SendAndRecvBox(AH_OUTBOX_CBOX *cbox); int AH_OutboxCBox_SendAndRecvQueue(AH_OUTBOX_CBOX *cbox, AH_DIALOG *dlg, AH_JOBQUEUE *jq); int AH_OutboxCBox_SendAndRecvQueueNoTan(AH_OUTBOX_CBOX *cbox, AH_DIALOG *dlg, AH_JOBQUEUE *jq); void AH_OutboxCBox_Finish(AH_OUTBOX_CBOX *cbox); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/applayer/cbox_prepare.c0000664000175000017500000002371414546575647023274 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "cbox_prepare.h" /* ------------------------------------------------------------------------------------------------ * forward declarations * ------------------------------------------------------------------------------------------------ */ static int _prepareTodoJobs(AH_JOB_LIST *todoJobs, AH_JOB_LIST *finishedJobs); static int _prepareDialogJobs(AB_USER *user, AH_JOB_LIST *todoJobs, AH_JOB_LIST *finishedJobs, AH_JOBQUEUE_LIST *todoQueues); static int _sortTodoJobsIntoQueues(AB_USER *user, AH_JOB_LIST *todoJobs, AH_JOB_LIST *finishedJobs, AH_JOBQUEUE_LIST *todoQueues); static void _fillQueueWithTodoJobs(AH_JOB_LIST *todoJobs, AH_JOB_LIST *finishedJobs, AH_JOB_LIST *retryJobs, AH_JOBQUEUE *jq); static void _moveJobsAndSetErrorStatus(AH_JOB_LIST *todoJobs, AH_JOB_LIST *finishedJobs); /* ------------------------------------------------------------------------------------------------ * implementations * ------------------------------------------------------------------------------------------------ */ int AH_OutboxCBox_Prepare(AH_OUTBOX_CBOX *cbox) { AH_JOB_LIST *todoJobs; AH_JOB_LIST *finishedJobs; AH_JOBQUEUE_LIST *todoQueues; AB_USER *user; unsigned int errors=0; assert(cbox); todoJobs=AH_OutboxCBox_GetTodoJobs(cbox); finishedJobs=AH_OutboxCBox_GetFinishedJobs(cbox); todoQueues=AH_OutboxCBox_GetTodoQueues(cbox); user=AH_OutboxCBox_GetUser(cbox); if (_prepareTodoJobs(todoJobs, finishedJobs)<0) errors++; if (_prepareDialogJobs(user, todoJobs, finishedJobs, todoQueues)<0) errors++; /* try sorting remaining jobs (all non-dialog) */ if (_sortTodoJobsIntoQueues(user, todoJobs, finishedJobs, todoQueues)<0) errors++; /* move remaining todo jobs to finishedJobs with error status */ _moveJobsAndSetErrorStatus(todoJobs, finishedJobs); if (AH_JobQueue_List_GetCount(todoQueues)==0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "No executable job queues produced"); return GWEN_ERROR_GENERIC; } if (errors) { DBG_INFO(AQHBCI_LOGDOMAIN, "Some errors (%d) occurred", errors); } return 0; } int _prepareTodoJobs(AH_JOB_LIST *todoJobs, AH_JOB_LIST *finishedJobs) { AH_JOB *j; unsigned int errors=0; j=AH_Job_List_First(todoJobs); while (j) { AH_JOB_STATUS st; AH_JOB *next; next=AH_Job_List_Next(j); st=AH_Job_GetStatus(j); if (st==AH_JobStatusToDo) { int rv; AB_Banking_LogMsgForJobId(AH_Job_GetBankingApi(j), AH_Job_GetId(j), "Preparing job"); rv=AH_Job_Prepare(j); if (rv<0 && rv!=GWEN_ERROR_NOT_SUPPORTED) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); AH_Job_SetStatus(j, AH_JobStatusError); AH_Job_List_Del(j); AH_Job_List_Add(j, finishedJobs); AB_Banking_LogMsgForJobId(AH_Job_GetBankingApi(j), AH_Job_GetId(j), "Error on AH_Job_Prepare(): %d", rv); errors++; } } /* if status TODO */ else { DBG_INFO(AQHBCI_LOGDOMAIN, "Skip job \"%s\" for its status \"%s\" (%d)", AH_Job_GetName(j), AH_Job_StatusName(st), st); AB_Banking_LogMsgForJobId(AH_Job_GetBankingApi(j), AH_Job_GetId(j), "Skip job due to status(%s)", AH_Job_StatusName(st)); AH_Job_SetStatus(j, AH_JobStatusError); AH_Job_List_Del(j); AH_Job_List_Add(j, finishedJobs); errors++; } j=next; } /* while */ return (errors==0)?0:GWEN_ERROR_GENERIC; } int _prepareDialogJobs(AB_USER *user, AH_JOB_LIST *todoJobs, AH_JOB_LIST *finishedJobs, AH_JOBQUEUE_LIST *todoQueues) { AH_JOB *j; unsigned int errors=0; /* move all dialog jobs to new queues or to the list of finished jobs */ DBG_INFO(AQHBCI_LOGDOMAIN, "Preparing dialog jobs"); j=AH_Job_List_First(todoJobs); while (j) { AH_JOB_STATUS st; AH_JOB *next; next=AH_Job_List_Next(j); st=AH_Job_GetStatus(j); if (st==AH_JobStatusToDo) { if (AH_Job_GetFlags(j) & AH_JOB_FLAGS_DLGJOB) { /* this is a dialog job, create a new queue for it */ AH_JOBQUEUE *jq; DBG_INFO(AQHBCI_LOGDOMAIN, "Preparing dialog job \"%s\"", AH_Job_GetName(j)); jq=AH_JobQueue_new(user); AH_Job_List_Del(j); if (AH_JobQueue_AddJob(jq, j)!=AH_JobQueueAddResultOk) { /* error adding a single job to the queue */ DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not add dialog job \"%s\" to queue", AH_Job_GetName(j)); /* set status to ERROR and move to finished queue */ AH_Job_SetStatus(j, AH_JobStatusError); AH_Job_List_Add(j, finishedJobs); AH_JobQueue_free(jq); errors++; } else { AH_Job_Log(j, GWEN_LoggerLevel_Info, "Dialog job enqueued"); /* job added. This is a dialog job */ AH_JobQueue_AddFlags(jq, AH_JOBQUEUE_FLAGS_ISDIALOG); AH_JobQueue_List_Add(jq, todoQueues); } /* if added to queue */ } /* if dialog job */ } /* if status TODO */ else { DBG_INFO(AQHBCI_LOGDOMAIN, "Skip job \"%s\" for its status \"%s\" (%d)", AH_Job_GetName(j), AH_Job_StatusName(st), st); AH_Job_List_Add(j, finishedJobs); } j=next; } /* while */ return (errors==0)?0:GWEN_ERROR_GENERIC; } int _sortTodoJobsIntoQueues(AB_USER *user, AH_JOB_LIST *todoJobs, AH_JOB_LIST *finishedJobs, AH_JOBQUEUE_LIST *todoQueues) { DBG_INFO(AQHBCI_LOGDOMAIN, "Preparing non-dialog jobs"); while (AH_Job_List_GetCount(todoJobs)) { AH_JOBQUEUE *jq; AH_JOB_LIST *retryJobs; retryJobs=AH_Job_List_new(); jq=AH_JobQueue_new(user); _fillQueueWithTodoJobs(todoJobs, finishedJobs, retryJobs, jq); AH_Job_List_AddList(todoJobs, retryJobs); AH_Job_List_free(retryJobs); if (AH_JobQueue_GetCount(jq)==0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Empty queue, so all jobs failed, should not happen."); AH_JobQueue_free(jq); return GWEN_ERROR_GENERIC; } AH_JobQueue_List_Add(jq, todoQueues); } return 0; } /** * Add jobs from todoJobs to given queue until queue is full. * If a job can not be added to the given queue it will be added to the retryJobs list. * If an error occurrs when trying to add a job that job will je set to error status and added to the finishedJobs list. */ void _fillQueueWithTodoJobs(AH_JOB_LIST *todoJobs, AH_JOB_LIST *finishedJobs, AH_JOB_LIST *retryJobs, AH_JOBQUEUE *jq) { AH_JOB *j; while ((j=AH_Job_List_First(todoJobs))) { AH_JOBQUEUE_ADDRESULT res; DBG_INFO(AQHBCI_LOGDOMAIN, "Queueing job \"%s\"", AH_Job_GetName(j)); AB_Banking_LogMsgForJobId(AH_Job_GetBankingApi(j), AH_Job_GetId(j), "Adding job to run-queue"); AH_Job_List_Del(j); res=AH_JobQueue_AddJob(jq, j); if (res!=AH_JobQueueAddResultOk) { DBG_INFO(AQHBCI_LOGDOMAIN, "Could not add job \"%s\" to the current queue", AH_Job_GetName(j)); if (AH_JobQueue_GetCount(jq)==0) { /* error adding a job to an empty queue */ DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not add non-dialog job \"%s\" to empty queue", AH_Job_GetName(j)); AB_Banking_LogMsgForJobId(AH_Job_GetBankingApi(j), AH_Job_GetId(j), "Could not add to empty run-queue"); /* set status to ERROR and move to finished queue */ AH_Job_SetStatus(j, AH_JobStatusError); AH_Job_List_Add(j, finishedJobs); AH_Job_Log(j, GWEN_LoggerLevel_Error, "Could not enqueue HBCI-job"); } /* if first job failed */ else { /* not the first job, check for reason of failure */ if (res==AH_JobQueueAddResultQueueFull) { /* queue is full, so add it to the todo queue list and start * a new queue */ DBG_INFO(AQHBCI_LOGDOMAIN, "Queue full"); AB_Banking_LogMsgForJobId(AH_Job_GetBankingApi(j), AH_Job_GetId(j), "Queue full, retrying later"); AH_Job_List_Add(j, retryJobs); break; } else if (res==AH_JobQueueAddResultJobLimit) { DBG_INFO(AQHBCI_LOGDOMAIN, "Job \"%s\" does not fit into queue, will retry later", AH_Job_GetName(j)); AB_Banking_LogMsgForJobId(AH_Job_GetBankingApi(j), AH_Job_GetId(j), "Job limit reached for queue, retrying later"); /* move job to the end of the queue (retry it later) */ AH_Job_List_Add(j, retryJobs); } else { /* error adding a job to the queue */ DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not add non-dialog job \"%s\" to queue for " "unknown reason %d", AH_Job_GetName(j), res); AB_Banking_LogMsgForJobId(AH_Job_GetBankingApi(j), AH_Job_GetId(j), "Could not add job (AddJob res=%d)", res); /* set status to ERROR and move to finished queue */ AH_Job_SetStatus(j, AH_JobStatusError); AH_Job_List_Add(j, finishedJobs); } } /* if it wasn't the first job to fail */ } /* if adding to the queue failed */ else { /* job added successfully */ DBG_INFO(AQHBCI_LOGDOMAIN, "Job \"%s\" successfully added", AH_Job_GetName(j)); AB_Banking_LogMsgForJobId(AH_Job_GetBankingApi(j), AH_Job_GetId(j), "Job successfully added to run-queue"); AH_Job_Log(j, GWEN_LoggerLevel_Info, "HBCI-job enqueued (1)"); } } } void _moveJobsAndSetErrorStatus(AH_JOB_LIST *todoJobs, AH_JOB_LIST *finishedJobs) { AH_JOB *j; j=AH_Job_List_First(todoJobs); while (j) { AH_JOB *next; next=AH_Job_List_Next(j); AH_Job_SetStatus(j, AH_JobStatusError); AH_Job_List_Del(j); AH_Job_List_Add(j, finishedJobs); j=next; } } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/applayer/cbox_send.h0000664000175000017500000000130014043610745022534 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_OUTBOX_CBOX_SEND_H #define AH_OUTBOX_CBOX_SEND_H #include "aqhbci/applayer/cbox.h" int AH_OutboxCBox_SendMessage(AH_OUTBOX_CBOX *cbox, AH_DIALOG *dlg, AH_MSG *msg); int AH_OutboxCBox_SendQueue(AH_OUTBOX_CBOX *cbox, AH_DIALOG *dlg, AH_JOBQUEUE *jq); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/applayer/cbox_recv.c0000664000175000017500000000612214214726437022552 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "aqhbci/applayer/cbox_recv.h" #include "aqhbci/joblayer/jobqueue_dispatch.h" #include "aqbanking/i18n_l.h" #include AH_MSG *AH_OutboxCBox_RecvMessage(AH_OUTBOX_CBOX *cbox, AH_DIALOG *dlg, GWEN_DB_NODE *dbRsp) { AH_MSG *msg=NULL; int rv; assert(cbox); /*GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Info, I18N("Waiting for response"));*/ rv=AH_Dialog_RecvMessage(dlg, &msg); if (rv>=200 && rv<300) rv=0; if (rv) { DBG_INFO(AQHBCI_LOGDOMAIN, "Error receiving response (%d)", rv); GWEN_Gui_ProgressLog2(0, GWEN_LoggerLevel_Error, I18N("Error receiving response (%d)"), rv); return NULL; } DBG_INFO(AQHBCI_LOGDOMAIN, "Response received"); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Info, I18N("Response received")); /* try to dispatch the message */ if (AH_Msg_DecodeMsg(msg, dbRsp, GWEN_MSGENGINE_READ_FLAGS_DEFAULT)) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not decode this message:"); AH_Msg_Dump(msg, 2); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("Bad response (unable to decode)")); AH_Msg_free(msg); return NULL; } /* transform from ISO 8859-1 to UTF8 */ AB_ImExporter_DbFromIso8859_1ToUtf8(dbRsp); /* check for message reference */ if (AH_Msg_GetMsgRef(msg)==0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Unrequested message, deleting it"); AH_Msg_Dump(msg, 2); GWEN_DB_Dump(dbRsp, 2); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("Bad response (bad message reference)")); AH_Msg_free(msg); return NULL; } DBG_INFO(AQHBCI_LOGDOMAIN, "Message received and decoded"); return msg; } int AH_OutboxCBox_RecvQueue(AH_OUTBOX_CBOX *cbox, AH_DIALOG *dlg, AH_JOBQUEUE *jq) { AH_MSG *msg; GWEN_DB_NODE *dbRsp; int rv; assert(cbox); dbRsp=GWEN_DB_Group_new("response"); msg=AH_OutboxCBox_RecvMessage(cbox, dlg, dbRsp); if (msg==NULL) { DBG_INFO(AQHBCI_LOGDOMAIN, "here"); GWEN_DB_Group_free(dbRsp); return GWEN_ERROR_GENERIC; } rv=AH_JobQueue_DispatchMessage(jq, msg, dbRsp); if (rv) { if (rv==GWEN_ERROR_ABORTED) { DBG_INFO(AQHBCI_LOGDOMAIN, "Dialog aborted by server"); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("Dialog aborted by server")); } else { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not dispatch response"); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("Bad response (unable to dispatch)")); } GWEN_DB_Group_free(dbRsp); AH_Msg_free(msg); return rv; } DBG_INFO(AQHBCI_LOGDOMAIN, "Message dispatched"); GWEN_DB_Group_free(dbRsp); AH_Msg_free(msg); return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/applayer/cbox_hbci.h0000664000175000017500000000116414043610745022520 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_OUTBOX_CBOX_HBCI_H #define AH_OUTBOX_CBOX_HBCI_H #include "aqhbci/applayer/cbox.h" int AH_OutboxCBox_OpenDialog_Hbci(AH_OUTBOX_CBOX *cbox, AH_DIALOG *dlg, uint32_t jqFlags); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/applayer/cbox_itan.h0000664000175000017500000000255714043610745022555 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_OUTBOX_CBOX_ITAN_H #define AH_OUTBOX_CBOX_ITAN_H #include "aqhbci/applayer/cbox.h" #include "aqhbci/msglayer/message_l.h" #include "aqhbci/joblayer/jobqueue_l.h" int AH_OutboxCBox_JobToMessage(AH_JOB *j, AH_MSG *msg, int doCopySigners); int AH_OutboxCBox_SendAndReceiveQueueWithTan(AH_OUTBOX_CBOX *cbox, AH_DIALOG *dlg, AH_JOBQUEUE *qJob); int AH_OutboxCBox_SelectItanMode(AH_OUTBOX_CBOX *cbox, AH_DIALOG *dlg); void AH_OutboxCBox_CopyJobResultsToJobList(const AH_JOB *j, const AH_JOB_LIST *qjl); int AH_OutboxCBox_InputTanWithChallenge(AH_OUTBOX_CBOX *cbox, AH_DIALOG *dialog, const char *sChallenge, const char *sChallengeHhd, char *passwordBuffer, int passwordMinLen, int passwordMaxLen); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/applayer/cbox_dialog.c0000664000175000017500000001317014546575647023070 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "aqhbci/applayer/cbox_dialog.h" #include "aqhbci/applayer/cbox_psd2.h" #include "aqhbci/applayer/cbox_hbci.h" #include "aqhbci/applayer/cbox_queue.h" #include "aqhbci/admjobs/jobtan_l.h" #include "aqbanking/i18n_l.h" #include int AH_OutboxCBox_OpenDialog(AH_OUTBOX_CBOX *cbox, AH_DIALOG *dlg, uint32_t jqFlags) { AB_PROVIDER *provider; AB_USER *user; int rv; assert(cbox); assert(dlg); provider=AH_OutboxCBox_GetProvider(cbox); user=AH_OutboxCBox_GetUser(cbox); if (AH_User_GetCryptMode(user)==AH_CryptMode_Pintan) { int selectedTanVersion; selectedTanVersion=AH_User_GetSelectedTanMethod(user)/1000; DBG_INFO(AQHBCI_LOGDOMAIN, "CryptMode is PINTAN"); if (selectedTanVersion>=6) { AH_JOB *jTan; DBG_INFO(AQHBCI_LOGDOMAIN, "User-selected TAN job version is 6 or newer (%d)", selectedTanVersion); /* check for PSD2: HKTAN version >= 6 available? if so -> use that */ jTan=AH_Job_Tan_new(provider, user, 4, selectedTanVersion); if (jTan) { AH_Job_free(jTan); DBG_INFO(AQHBCI_LOGDOMAIN, "TAN job version is available"); DBG_NOTICE(AQHBCI_LOGDOMAIN, "Using PSD2 code to init dialog"); rv=AH_OutboxCBox_OpenDialogPsd2_Proc2(cbox, dlg); if (rv!=0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } return rv; } else { DBG_NOTICE(AQHBCI_LOGDOMAIN, "Not using PSD2 code: HKTAN version %d not supported by the bank", selectedTanVersion); } } else { DBG_NOTICE(AQHBCI_LOGDOMAIN, "Not using PSD2 code: User selected HKTAN version lesser than 6."); } } /* fall back */ DBG_NOTICE(AQHBCI_LOGDOMAIN, "Using standard HBCI code to init dialog"); rv=AH_OutboxCBox_OpenDialog_Hbci(cbox, dlg, jqFlags); if (rv!=0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } return rv; } int AH_OutboxCBox_CloseDialog(AH_OUTBOX_CBOX *cbox, AH_DIALOG *dlg, uint32_t jqFlags) { AB_PROVIDER *provider; AB_USER *user; AH_JOBQUEUE *jqDlgClose; AH_JOB *jDlgClose; GWEN_DB_NODE *db; uint32_t dlgFlags; int rv; provider=AH_OutboxCBox_GetProvider(cbox); user=AH_OutboxCBox_GetUser(cbox); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Notice, I18N("Closing dialog")); DBG_NOTICE(AQHBCI_LOGDOMAIN, "Sending dialog close request (flags=%08x)", jqFlags); dlgFlags=AH_Dialog_GetFlags(dlg); jDlgClose=AH_Job_new("JobDialogEnd", provider, user, 0, 0); if (!jDlgClose) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not create job JobDialogEnd"); return GWEN_ERROR_GENERIC; } /* set some parameters */ db=AH_Job_GetArguments(jDlgClose); assert(db); GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_DEFAULT | GWEN_DB_FLAGS_OVERWRITE_VARS, "dialogId", AH_Dialog_GetDialogId(dlg)); /* handle signing and encryption */ if (dlgFlags & AH_DIALOG_FLAGS_ANONYMOUS) { DBG_INFO(AQHBCI_LOGDOMAIN, "Will not encrypt and sign dialog close request"); AH_Job_SubFlags(jDlgClose, AH_JOB_FLAGS_CRYPT | AH_JOB_FLAGS_SIGN | AH_JOB_FLAGS_NEEDTAN); AH_Job_AddFlags(jDlgClose, AH_JOB_FLAGS_NOITAN); } else { /* possibly sign job */ if (jqFlags & AH_JOBQUEUE_FLAGS_SIGN) { DBG_INFO(AQHBCI_LOGDOMAIN, "Will sign dialog close request"); AH_Job_AddSigner(jDlgClose, AB_User_GetUserId(user)); AH_Job_AddFlags(jDlgClose, AH_JOB_FLAGS_SIGN | AH_JOB_FLAGS_NEEDSIGN); } else { DBG_INFO(AQHBCI_LOGDOMAIN, "Will not sign dialog close request"); AH_Job_SubFlags(jDlgClose, AH_JOB_FLAGS_SIGN | AH_JOB_FLAGS_NEEDSIGN); } /* possibly encrypt job */ if (jqFlags & AH_JOBQUEUE_FLAGS_CRYPT) { DBG_INFO(AQHBCI_LOGDOMAIN, "Will encrypt dialog close request"); AH_Job_AddFlags(jDlgClose, AH_JOB_FLAGS_CRYPT | AH_JOB_FLAGS_NEEDCRYPT); } else { DBG_INFO(AQHBCI_LOGDOMAIN, "Will not encrypt dialog close request"); AH_Job_SubFlags(jDlgClose, AH_JOB_FLAGS_CRYPT | AH_JOB_FLAGS_NEEDCRYPT); } /* possibly set NOITAN job */ if (jqFlags & AH_JOB_FLAGS_NOITAN) { DBG_INFO(AQHBCI_LOGDOMAIN, "Disable ITAN mode for dialog close request"); AH_Job_AddFlags(jDlgClose, AH_JOB_FLAGS_NOITAN); } else { DBG_INFO(AQHBCI_LOGDOMAIN, "Will not disable ITAN mode for dialog close request"); AH_Job_SubFlags(jDlgClose, AH_JOB_FLAGS_NOITAN); } } jqDlgClose=AH_JobQueue_new(user); DBG_NOTICE(AQHBCI_LOGDOMAIN, "Adding dialog close request to queue"); if (AH_JobQueue_AddJob(jqDlgClose, jDlgClose)!=AH_JobQueueAddResultOk) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not add single job to queue"); AH_JobQueue_free(jqDlgClose); return GWEN_ERROR_GENERIC; } rv=AH_OutboxCBox_SendAndRecvQueue(cbox, dlg, jqDlgClose); if (rv) { DBG_NOTICE(AQHBCI_LOGDOMAIN, "Could not exchange message"); AH_JobQueue_free(jqDlgClose); return rv; } DBG_NOTICE(AQHBCI_LOGDOMAIN, "Dialog closed"); rv=AH_Job_CommitSystemData(jDlgClose, 0); AH_JobQueue_free(jqDlgClose); if (rv) { DBG_NOTICE(AQHBCI_LOGDOMAIN, "Could not commit system data"); return rv; } return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/applayer/cbox_itan1.c0000664000175000017500000002256514214726437022640 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "aqhbci/applayer/cbox_itan1.h" #include "aqhbci/applayer/cbox_send.h" #include "aqhbci/applayer/cbox_recv.h" #include "aqhbci/admjobs/jobtan_l.h" #include "aqhbci/ajobs/accountjob_l.h" #include "aqbanking/i18n_l.h" #include #include #include int AH_OutboxCBox_Itan1(AH_OUTBOX_CBOX *cbox, AH_DIALOG *dlg, AH_JOBQUEUE *qJob) { const AH_JOB_LIST *jl; AH_OUTBOX *outbox; AB_PROVIDER *provider; AH_MSG *msg1; AH_MSG *msg2; int rv; AH_JOB *j; AH_JOB *jTan; AB_USER *u; GWEN_DB_NODE *dbParams; uint32_t um=0; GWEN_BUFFER *bHash; AH_JOBQUEUE *jq; const char *challenge; const char *challengeHhd; //GWEN_STRINGLIST *sl; AB_ACCOUNT *acc=NULL; DBG_INFO(AQHBCI_LOGDOMAIN, "Handling iTAN process type 1"); provider=AH_OutboxCBox_GetProvider(cbox); outbox=AH_OutboxCBox_GetOutbox(cbox); jl=AH_JobQueue_GetJobList(qJob); assert(jl); assert(AH_Job_List_GetCount(jl)==1); j=AH_Job_List_First(jl); assert(j); u=AH_Job_GetUser(j); assert(u); um=AH_Dialog_GetItanMethod(dlg); assert(um); /* get account for HKTAN5 */ if (j) { AH_JOB *aj; aj=j; while (aj) { if (AH_AccountJob_IsAccountJob(aj)) break; aj=AH_Job_List_Next(aj); } if (aj) acc=AH_AccountJob_GetAccount(aj); } /* prepare HKTAN */ jTan=AH_Job_Tan_new(provider, u, 1, AH_Dialog_GetTanJobVersion(dlg)); if (!jTan) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Job HKTAN not available"); return -1; } AH_Job_Tan_SetTanMethod(jTan, um); AH_Job_Tan_SetTanMediumId(jTan, AH_User_GetTanMediumId(u)); DBG_INFO(AQHBCI_LOGDOMAIN, "Setting up HKTAN from job [%s]", AH_Job_GetName(j)); if (acc) { const char *baBankCode; const char *baAccountId; const char *baAccountSubId; baBankCode=AB_Account_GetBankCode(acc); baAccountId=AB_Account_GetAccountNumber(acc); baAccountSubId=AB_Account_GetSubAccountId(acc); DBG_INFO(AQHBCI_LOGDOMAIN, "Setting local and sms bank account for HKTAN to %s/%s/%s", baBankCode?baBankCode:"(none)", baAccountId?baAccountId:"(none)", baAccountSubId?baAccountSubId:"(none)"); AH_Job_Tan_SetLocalAccountInfo(jTan, baBankCode, baAccountId, baAccountSubId); if (!(AH_User_GetFlags(u) & AH_USER_FLAGS_TAN_OMIT_SMS_ACCOUNT)) /* only set SMS account if allowed */ AH_Job_Tan_SetSmsAccountInfo(jTan, baBankCode, baAccountId, baAccountSubId); } #if 0 /* copy challenge params */ sl=AH_Job_GetChallengeParams(j); if (sl) { GWEN_STRINGLISTENTRY *e; e=GWEN_StringList_FirstEntry(sl); while (e) { AH_Job_AddChallengeParam(jTan, GWEN_StringListEntry_Data(e)); e=GWEN_StringListEntry_Next(e); } } else { DBG_INFO(AQHBCI_LOGDOMAIN, "No challenge params"); } /* copy challenge amount */ AH_Job_SetChallengeValue(jTan, AH_Job_GetChallengeValue(j)); #endif /* copy challenge class */ AH_Job_SetChallengeClass(jTan, AH_Job_GetChallengeClass(j)); /* copy signers */ if (AH_Job_GetFlags(j) & AH_JOB_FLAGS_SIGN) { GWEN_STRINGLISTENTRY *se; se=GWEN_StringList_FirstEntry(AH_Job_GetSigners(j)); if (!se) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Signatures needed but no signer given"); return GWEN_ERROR_INVALID; } while (se) { AH_Job_AddSigner(jTan, GWEN_StringListEntry_Data(se)); se=GWEN_StringListEntry_Next(se); } /* while */ } /* find DB_NODE for selected TanMethod */ dbParams=AH_Job_GetParams(jTan); assert(dbParams); /* calculate the job's hash */ msg1=AH_Msg_new(dlg); AH_Msg_SetItanMethod(msg1, um); AH_Msg_SetItanHashMode(msg1, GWEN_DB_GetIntValue(dbParams, "hashMethod", 0, 0)); rv=AH_OutboxCBox_JobToMessage(j, msg1, 1); if (rv) { DBG_NOTICE(AQHBCI_LOGDOMAIN, "here (%d)", rv); AH_Msg_free(msg1); AH_Job_free(jTan); return rv; } /* get the job's hash */ bHash=AH_Msg_GetItanHashBuffer(msg1); assert(bHash); /* create second message: This will be sent first */ msg2=AH_Msg_new(dlg); AH_Msg_SetItanMethod(msg2, 0); AH_Msg_SetItanHashMode(msg2, 0); AH_Job_Tan_SetHash(jTan, (const unsigned char *)GWEN_Buffer_GetStart(bHash), GWEN_Buffer_GetUsedBytes(bHash)); AH_Job_Tan_SetSegCode(jTan, AH_Job_GetCode(j)); rv=AH_Job_Tan_FinishSetup(jTan, j); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); AH_Msg_free(msg1); AH_Job_free(jTan); return rv; } jq=AH_JobQueue_new(u); rv=AH_JobQueue_AddJob(jq, jTan); if (rv) { DBG_NOTICE(AQHBCI_LOGDOMAIN, "here (%d)", rv); AH_Msg_free(msg2); AH_Msg_free(msg1); AH_JobQueue_free(jq); return rv; } rv=AH_OutboxCBox_JobToMessage(jTan, msg2, 1); if (rv) { DBG_NOTICE(AQHBCI_LOGDOMAIN, "here (%d)", rv); AH_Msg_free(msg2); AH_Msg_free(msg1); AH_JobQueue_free(jq); return rv; } /* encode HKTAN message */ DBG_NOTICE(AQHBCI_LOGDOMAIN, "Encoding queue"); /*GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Info, I18N("Encoding queue"));*/ AH_Msg_SetNeedTan(msg2, 0); rv=AH_Msg_EncodeMsg(msg2); if (rv) { DBG_NOTICE(AQHBCI_LOGDOMAIN, "here (%d)", rv); AH_Msg_free(msg2); AH_Msg_free(msg1); AH_JobQueue_free(jq); return rv; } if (AH_Job_GetStatus(jTan)==AH_JobStatusEncoded) { const char *s; AH_Job_SetMsgNum(jTan, AH_Msg_GetMsgNum(msg2)); AH_Job_SetDialogId(jTan, AH_Dialog_GetDialogId(dlg)); /* store expected signer and crypter (if any) */ s=AH_Msg_GetExpectedSigner(msg2); if (s) AH_Job_SetExpectedSigner(jTan, s); s=AH_Msg_GetExpectedCrypter(msg2); if (s) AH_Job_SetExpectedCrypter(jTan, s); } /* send HKTAN message */ rv=AH_OutboxCBox_SendMessage(cbox, dlg, msg2); if (rv) { DBG_NOTICE(AQHBCI_LOGDOMAIN, "here (%d)", rv); AH_Msg_free(msg2); AH_Msg_free(msg1); AH_JobQueue_free(jq); return rv; } AH_Msg_free(msg2); AH_Job_SetStatus(jTan, AH_JobStatusSent); /* wait for response, dispatch it */ rv=AH_OutboxCBox_RecvQueue(cbox, dlg, jq); if (rv) { DBG_NOTICE(AQHBCI_LOGDOMAIN, "here (%d)", rv); AH_OutboxCBox_CopyJobResultsToJobList(jTan, jl); AH_Msg_free(msg1); AH_JobQueue_free(jq); return rv; } AH_OutboxCBox_CopyJobResultsToJobList(jTan, jl); /* get challenge */ DBG_INFO(AQHBCI_LOGDOMAIN, "Processing job \"%s\"", AH_Job_GetName(jTan)); rv=AH_Job_Process(jTan, AH_Outbox_GetImExContext(outbox)); if (rv) { DBG_NOTICE(AQHBCI_LOGDOMAIN, "here (%d)", rv); AH_Msg_free(msg1); AH_JobQueue_free(jq); return rv; } challengeHhd=AH_Job_Tan_GetHhdChallenge(jTan); challenge=AH_Job_Tan_GetChallenge(jTan); /* ask for TAN */ if (challenge || challengeHhd) { char tanBuffer[64]; memset(tanBuffer, 0, sizeof(tanBuffer)); rv=AH_OutboxCBox_InputTanWithChallenge(cbox, dlg, challenge, challengeHhd, tanBuffer, 1, sizeof(tanBuffer)-1); if (rv) { DBG_NOTICE(AQHBCI_LOGDOMAIN, "here (%d)", rv); AH_Msg_free(msg1); AH_JobQueue_free(jq); return rv; } /* set TAN in msg 1 */ AH_Msg_SetTan(msg1, tanBuffer); } else { DBG_ERROR(AQHBCI_LOGDOMAIN, "No challenge received"); AH_Msg_free(msg1); AH_JobQueue_free(jq); return GWEN_ERROR_BAD_DATA; } AH_JobQueue_free(jq); jq=NULL; /* now handle the real job */ /* encode job message */ DBG_NOTICE(AQHBCI_LOGDOMAIN, "Encoding queue"); /*GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Info, I18N("Encoding queue"));*/ rv=AH_Msg_EncodeMsg(msg1); if (rv) { DBG_NOTICE(AQHBCI_LOGDOMAIN, "here (%d)", rv); AH_Msg_free(msg1); return rv; } /* store used TAN in original job (if any) */ DBG_INFO(AQHBCI_LOGDOMAIN, "Storing TAN in job [%s]", AH_Job_GetName(j)); AH_Job_SetUsedTan(j, AH_Msg_GetTan(msg1)); if (AH_Job_GetStatus(j)==AH_JobStatusEncoded) { const char *s; DBG_NOTICE(AQHBCI_LOGDOMAIN, "Job encoded"); AH_Job_SetMsgNum(j, AH_Msg_GetMsgNum(msg1)); AH_Job_SetDialogId(j, AH_Dialog_GetDialogId(dlg)); /* store expected signer and crypter (if any) */ s=AH_Msg_GetExpectedSigner(msg1); if (s) AH_Job_SetExpectedSigner(j, s); s=AH_Msg_GetExpectedCrypter(msg1); if (s) AH_Job_SetExpectedCrypter(j, s); } /* send job message */ rv=AH_OutboxCBox_SendMessage(cbox, dlg, msg1); if (rv) { DBG_NOTICE(AQHBCI_LOGDOMAIN, "here (%d)", rv); AH_Msg_free(msg1); return rv; } AH_Msg_free(msg1); AH_Job_SetStatus(j, AH_JobStatusSent); /* wait for response, dispatch it */ rv=AH_OutboxCBox_RecvQueue(cbox, dlg, qJob); if (rv) { DBG_NOTICE(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/applayer/hhd.c0000664000175000017500000005015414044534776021353 00000000000000/*************************************************************************** begin : Sat Dec 10 2011 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "hhd_p.h" #include "aqhbci_l.h" #include "aqhbci/joblayer/job_l.h" #include #include #include #if 0 /* * Currently not used (see tan_chiptan_opt.c) */ int AH_HHD14_ReadBytesDec(const char *p, int len) { int r=0; int i; const char *pSave; pSave=p; for (i=0; i'9') { DBG_ERROR(AQHBCI_LOGDOMAIN, "Bad char in data (no decimal digit), pos=%d, byte=%02x", i, c); GWEN_Text_LogString(pSave, len, AQHBCI_LOGDOMAIN, GWEN_LoggerLevel_Error); return GWEN_ERROR_INVALID; } c-='0'; r*=10; r+=c; p++; } return r; } int AH_HHD14_ReadBytesHex(const char *p, int len) { unsigned int r=0; int i; for (i=0; i='0' && c<='9') || (c>='A' && c<='F')) { c-='0'; if (c>9) c-=7; r*=16; r+=c; p++; } else { DBG_ERROR(AQHBCI_LOGDOMAIN, "Bad char in data (no hexadecimal digit)"); return GWEN_ERROR_INVALID; } } return (int) r; } unsigned int AH_HHD14_Quersumme(unsigned int i) { unsigned int qs=0; while (i) { qs+=i % 10; i/=10; } return qs; } int AH_HHD14_ExtractDataForLuhnSum(const char *code, GWEN_BUFFER *xbuf) { int rv; unsigned int len; unsigned int i=0; unsigned int LSandFlags; unsigned int numCtrlBytes; unsigned int moreCtrlBytes; unsigned int numBytes; /* preset bit masks for HHD 1.4 */ unsigned int maskLen = 0x3f; /* read LC */ rv=AH_HHD14_ReadBytesHex(code, 2); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d) at [%s]", rv, code); return rv; } len=((unsigned int) rv); code+=2; if ((strlen(code)+2) len) { DBG_INFO(AQHBCI_LOGDOMAIN, "try to read past the end of code (%d) at [%s]", v, code); return GWEN_ERROR_INVALID; } GWEN_Buffer_AppendBytes(xbuf, code, v*2); code+=v*2; i+=v+1; } return 0; } int AH_HHD14_CalcLuhnSum(const char *code, int len) { int i; int sum=0; int next; int dif; if (len % 2) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Invalid number of bytes in payload (%d)", len); return GWEN_ERROR_INVALID; } for (i=0; i>4) & 0xf)) + (AH_HHD14_Quersumme(2*(v & 0xf))); code+=2; } next=10*((sum+9)/10); dif=next-sum; return (unsigned int) dif; } int AH_HHD14_CalcXorSum(const char *code, int len) { int i; int sum=0; for (i=0; i='0' && c<='9') || (c>='A' && c<='Z') || c==',') GWEN_Buffer_AppendByte(cbuf, c); p++; } } void AH_HHD14_ExtractCode(GWEN_BUFFER *cbuf) { const char *pStart=NULL; const char *pEnd=NULL; pStart=GWEN_Text_StrCaseStr(GWEN_Buffer_GetStart(cbuf), "CHLGUC"); if (pStart) { pStart+=10; /* skip "CHLGUC" and following 4 digits */ pEnd=GWEN_Text_StrCaseStr(pStart, "CHLGTEXT"); } if (pStart && pEnd) { GWEN_Buffer_Crop(cbuf, pStart-GWEN_Buffer_GetStart(cbuf), pEnd-pStart); GWEN_Buffer_SetPos(cbuf, 0); GWEN_Buffer_InsertByte(cbuf, '0'); GWEN_Buffer_SetPos(cbuf, GWEN_Buffer_GetUsedBytes(cbuf)); } } int AH_HHD14__Translate(const char *code, GWEN_BUFFER *cbuf) { /*unsigned int totalLength;*/ /*TODO: handle total length */ unsigned int inLenAndFlags; unsigned int inLen; unsigned int outLenAndFlags; unsigned int outLen; /* preset bit masks for HHD 1.4 */ unsigned int maskLen = 0x3f; unsigned int maskAscFlag = 0x40; unsigned int maskCtlFlag = 0x80; int rv; GWEN_BUFFER *xbuf; char numbuf[16]; uint32_t cBufStartPos; uint32_t cBufEndPos; unsigned int checkSum; assert(code); xbuf=GWEN_Buffer_new(0, 256, 0, 1); /* read length */ rv=AH_HHD14_ReadBytesDec(code, 3); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(xbuf); return rv; } /*totalLength=(unsigned int) rv;*/ code+=3; /* translate startCode (length is in hex) */ rv=AH_HHD14_ReadBytesHex(code, 2); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(xbuf); return rv; } inLenAndFlags=(unsigned int) rv; inLen=inLenAndFlags & maskLen; code+=2; outLen=(inLen+1)/2; outLenAndFlags=outLen | (inLenAndFlags & maskCtlFlag); snprintf(numbuf, sizeof(numbuf)-1, "%02x", outLenAndFlags); numbuf[sizeof(numbuf)-1]=0; GWEN_Buffer_AppendString(xbuf, numbuf); /* copy control bytes, if necessary */ if (inLenAndFlags & maskCtlFlag) { unsigned int ctrl=0; do { /* control byte(s) follow (HHD1.4) */ rv=AH_HHD14_ReadBytesHex(code, 2); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(xbuf); return rv; } ctrl=(unsigned int) rv; /* write to output buffer */ snprintf(numbuf, sizeof(numbuf)-1, "%02x", ctrl); numbuf[sizeof(numbuf)-1]=0; GWEN_Buffer_AppendString(xbuf, numbuf); code+=2; } while (ctrl & maskCtlFlag); } else { DBG_ERROR(AQHBCI_LOGDOMAIN, "no control bytes fallback to HHD 1.3.2"); maskLen = 0xf; maskAscFlag = 0x10; } if (inLen) { GWEN_Buffer_AppendBytes(xbuf, code, inLen); if (inLen % 2) /* fill with "F" if necessary */ GWEN_Buffer_AppendByte(xbuf, 'F'); } code+=inLen; /* read DE's */ while (*code) { /* input length is in dec usually no AscFlag for DE's is provided */ rv=AH_HHD14_ReadBytesDec(code, 2); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(xbuf); return rv; } inLenAndFlags=(unsigned int) rv; inLen=inLenAndFlags & maskLen; code+=2; /* so we have to check whether we need to switch to ASC */ if ((inLenAndFlags & maskAscFlag)==0) { int i; for (i=0; i'9') { /* contains something other than digits, use ascii encoding */ DBG_ERROR(AQHBCI_LOGDOMAIN, "Switched to ASCII"); inLenAndFlags|=maskAscFlag; break; } } } /* write to outbuffer */ if (inLenAndFlags & maskAscFlag) { /* ascii */ outLen=inLen; outLenAndFlags=outLen | maskAscFlag; /* add encoding flag to length (bit 6 or 4) */ snprintf(numbuf, sizeof(numbuf)-1, "%02x", outLenAndFlags); numbuf[sizeof(numbuf)-1]=0; GWEN_Buffer_AppendString(xbuf, numbuf); if (inLen) /* hex encode data */ GWEN_Text_ToHexBuffer(code, inLen, xbuf, 0, 0, 0); code+=inLen; } else { /* bcd, pack 2 digits into 1 Byte */ outLen=(inLen+1)/2; outLenAndFlags=outLen; snprintf(numbuf, sizeof(numbuf)-1, "%02x", outLenAndFlags); numbuf[sizeof(numbuf)-1]=0; GWEN_Buffer_AppendString(xbuf, numbuf); if (inLen) { /* data is bcd, just copy */ GWEN_Buffer_AppendBytes(xbuf, code, inLen); if (inLen % 2) /* fill with "F" if necessary */ GWEN_Buffer_AppendByte(xbuf, 'F'); } code+=inLen; } } /* while */ /* cbuf starts here */ cBufStartPos=GWEN_Buffer_GetPos(cbuf); /* calculate full length (payload plus checksums) */ outLen=(GWEN_Buffer_GetUsedBytes(xbuf)+2+1)/2; snprintf(numbuf, sizeof(numbuf)-1, "%02x", outLen); numbuf[sizeof(numbuf)-1]=0; /* add length to outbuffer */ GWEN_Buffer_AppendString(cbuf, numbuf); /* add translated buffer to output buffer */ GWEN_Buffer_AppendBuffer(cbuf, xbuf); /* cbuf ends here */ cBufEndPos=GWEN_Buffer_GetPos(cbuf); /* get payload for luhn sum */ GWEN_Buffer_Reset(xbuf); rv=AH_HHD14_ExtractDataForLuhnSum(GWEN_Buffer_GetStart(cbuf)+cBufStartPos, xbuf); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(xbuf); return rv; } /* calculate luhn sum */ rv=AH_HHD14_CalcLuhnSum(GWEN_Buffer_GetStart(xbuf), GWEN_Buffer_GetUsedBytes(xbuf)); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(xbuf); return rv; } checkSum=(unsigned int) rv; /* add luhn sum */ if (checkSum>9) checkSum+=7; checkSum+='0'; GWEN_Buffer_AppendByte(cbuf, checkSum); /* calculate XOR sum */ rv=AH_HHD14_CalcXorSum(GWEN_Buffer_GetStart(cbuf)+cBufStartPos, cBufEndPos-cBufStartPos); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(xbuf); return rv; } checkSum=(unsigned int) rv; /* add XOR sum */ if (checkSum>9) checkSum+=7; checkSum+='0'; GWEN_Buffer_AppendByte(cbuf, checkSum); /* finish */ GWEN_Buffer_free(xbuf); return 0; } int AH_HHD14_Translate(const char *code, GWEN_BUFFER *cbuf) { GWEN_BUFFER *xbuf; int rv; xbuf=GWEN_Buffer_new(0, 256, 0, 1); AH_HHD14_CompressCode((const uint8_t *) code, xbuf); AH_HHD14_ExtractCode(xbuf); DBG_ERROR(AQHBCI_LOGDOMAIN, "HHD: Raw data is [%s]", GWEN_Buffer_GetStart(xbuf)); rv=AH_HHD14__Translate(GWEN_Buffer_GetStart(xbuf), cbuf); if (rv<0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Error translating HHD code (%d)", rv); GWEN_Text_LogString(code, strlen(code), AQHBCI_LOGDOMAIN, GWEN_LoggerLevel_Error); GWEN_Buffer_free(xbuf); return rv; } GWEN_Buffer_free(xbuf); return 0; } #endif int AH_HHD14_AddChallengeParams_04(AH_JOB *j, const AB_VALUE *vAmount, const char *sRemoteBankCode, const char *sRemoteAccountNumber) { /* P1: Betrag */ if (vAmount) { GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 64, 0, 1); AH_Job_ValueToChallengeString(vAmount, tbuf); AH_Job_AddChallengeParam(j, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } /* P2: BLZ Zahler/Empfaenger */ if (sRemoteBankCode && *sRemoteBankCode) AH_Job_AddChallengeParam(j, sRemoteBankCode); else { DBG_ERROR(AQHBCI_LOGDOMAIN, "No remote bank code number"); return GWEN_ERROR_INVALID; } /* P3: Konto Zahler/Empfaenger */ if (sRemoteAccountNumber && *sRemoteAccountNumber) { int i; GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 64, 0, 1); i=10-strlen(sRemoteAccountNumber); if (i>0) GWEN_Buffer_FillWithBytes(tbuf, '0', i); GWEN_Buffer_AppendString(tbuf, sRemoteAccountNumber); AH_Job_AddChallengeParam(j, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } else { DBG_ERROR(AQHBCI_LOGDOMAIN, "No remote account number"); return GWEN_ERROR_INVALID; } /* done */ return 0; } int AH_HHD14_AddChallengeParams_05(AH_JOB *j, const AB_VALUE *vAmount, const char *sRemoteAccountNumber) { GWEN_BUFFER *tbuf; /* P1: Betrag */ if (vAmount) { tbuf=GWEN_Buffer_new(0, 64, 0, 1); AB_Value_toHumanReadableString(vAmount, tbuf, 2, 0); /* TODO: currency needed?? -> apparently not */ AH_Job_AddChallengeParam(j, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } else { DBG_ERROR(AQHBCI_LOGDOMAIN, "No amount"); return GWEN_ERROR_INVALID; } /* P2: Konto Empfaenger */ if (sRemoteAccountNumber && *sRemoteAccountNumber) { int i; GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 64, 0, 1); i=10-strlen(sRemoteAccountNumber); if (i>0) GWEN_Buffer_FillWithBytes(tbuf, '0', i); GWEN_Buffer_AppendString(tbuf, sRemoteAccountNumber); AH_Job_AddChallengeParam(j, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } else { DBG_ERROR(AQHBCI_LOGDOMAIN, "No remote account number"); return GWEN_ERROR_INVALID; } /* done */ return 0; } int AH_HHD14_AddChallengeParams_09(AH_JOB *j, const AB_VALUE *vAmount, const char *sRemoteIban) { /* P1: Betrag */ if (vAmount) { GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 64, 0, 1); AH_Job_ValueToChallengeString(vAmount, tbuf); AH_Job_AddChallengeParam(j, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } /* P2: IBAN Empfaenger */ if (sRemoteIban && *sRemoteIban) AH_Job_AddChallengeParam(j, sRemoteIban); else { DBG_ERROR(AQHBCI_LOGDOMAIN, "No remote iban"); return GWEN_ERROR_INVALID; } /* done */ return 0; } int AH_HHD14_AddChallengeParams_12(AH_JOB *j, int numTransfers, const AB_VALUE *vSumOfAmount, const char *sLocalAccount, const AB_VALUE *vSumOfRemoteAccounts) { char numbuf[16]; /* P1: number of transfers */ snprintf(numbuf, sizeof(numbuf)-1, "%d", numTransfers); numbuf[sizeof(numbuf)-1]=0; AH_Job_AddChallengeParam(j, numbuf); /* P2: Betrag */ if (vSumOfAmount) { GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 64, 0, 1); AB_Value_toHumanReadableString(vSumOfAmount, tbuf, 2, 0); AH_Job_AddChallengeParam(j, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } else { DBG_ERROR(AQHBCI_LOGDOMAIN, "No amount"); return GWEN_ERROR_INVALID; } /* P3: Konto Zahler */ if (sLocalAccount && *sLocalAccount) { int i; GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 64, 0, 1); i=10-strlen(sLocalAccount); if (i>0) GWEN_Buffer_FillWithBytes(tbuf, '0', i); GWEN_Buffer_AppendString(tbuf, sLocalAccount); AH_Job_AddChallengeParam(j, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } else { DBG_ERROR(AQHBCI_LOGDOMAIN, "No local account"); return GWEN_ERROR_INVALID; } /* P4: Referenzzahl */ if (vSumOfRemoteAccounts) { GWEN_BUFFER *tbuf; char *p; tbuf=GWEN_Buffer_new(0, 64, 0, 1); AB_Value_toHumanReadableString(vSumOfRemoteAccounts, tbuf, 0, 0); /* remove decimal point */ p=strchr(GWEN_Buffer_GetStart(tbuf), '.'); if (p) *p=0; /* only use first 10 digits */ GWEN_Buffer_Crop(tbuf, 0, 10); AH_Job_AddChallengeParam(j, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } /* done */ return 0; } int AH_HHD14_AddChallengeParams_13(AH_JOB *j, int numTransfers, const AB_VALUE *vSumOfAmount, const char *sLocalIban) { /* same as 12, but uses IBAN */ return AH_HHD14_AddChallengeParams_12(j, numTransfers, vSumOfAmount, sLocalIban, NULL); } int AH_HHD14_AddChallengeParams_17(AH_JOB *j, const AB_VALUE *vAmount, const char *sRemoteIban) { return AH_HHD14_AddChallengeParams_09(j, vAmount, sRemoteIban); } int AH_HHD14_AddChallengeParams_19(AH_JOB *j, int numTransfers, const AB_VALUE *vSumOfAmount, const char *sLocalAccountNumber, const AB_VALUE *vSumOfRemoteAccounts) { /* same as 12 */ return AH_HHD14_AddChallengeParams_12(j, numTransfers, vSumOfAmount, sLocalAccountNumber, vSumOfRemoteAccounts); } int AH_HHD14_AddChallengeParams_20(AH_JOB *j, int numTransfers, const AB_VALUE *vSumOfAmount, const char *sLocalIban) { /* same as 12 */ return AH_HHD14_AddChallengeParams_12(j, numTransfers, vSumOfAmount, sLocalIban, NULL); } int AH_HHD14_AddChallengeParams_23(AH_JOB *j, const AB_VALUE *vAmount, const char *sRemoteIban, const GWEN_DATE *da) { /* P1: Betrag */ if (vAmount) { GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 64, 0, 1); AH_Job_ValueToChallengeString(vAmount, tbuf); AH_Job_AddChallengeParam(j, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } /* P2: IBAN Empfaenger */ if (sRemoteIban && *sRemoteIban) AH_Job_AddChallengeParam(j, sRemoteIban); else { DBG_ERROR(AQHBCI_LOGDOMAIN, "No remote iban"); return GWEN_ERROR_INVALID; } /* P3: Termin */ if (da) { GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 64, 0, 1); GWEN_Date_toStringWithTemplate(da, "YYYYMMDD", tbuf); AH_Job_AddChallengeParam(j, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } else { DBG_ERROR(AQHBCI_LOGDOMAIN, "No execution date"); return GWEN_ERROR_INVALID; } /* done */ return 0; } int AH_HHD14_AddChallengeParams_29(AH_JOB *j, const AB_VALUE *vAmount, const char *sRemoteIban, const GWEN_DATE *da) { /* same as 23 */ return AH_HHD14_AddChallengeParams_23(j, vAmount, sRemoteIban, da); } int AH_HHD14_AddChallengeParams_32(AH_JOB *j, int transferCount, const AB_VALUE *vAmount, const char *sLocalIban, const GWEN_DATE *da) { char numBuf[32]; /* P1: Anzahl */ snprintf(numBuf, sizeof(numBuf)-1, "%d", transferCount); numBuf[sizeof(numBuf)-1]=0; AH_Job_AddChallengeParam(j, numBuf); /* P2: Summe */ if (vAmount) { GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 64, 0, 1); AH_Job_ValueToChallengeString(vAmount, tbuf); AH_Job_AddChallengeParam(j, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } else { DBG_ERROR(AQHBCI_LOGDOMAIN, "Missing amount"); return GWEN_ERROR_INVALID; } /* P3: Eigene IBAN */ if (sLocalIban && *sLocalIban) AH_Job_AddChallengeParam(j, sLocalIban); else { DBG_ERROR(AQHBCI_LOGDOMAIN, "No local iban"); return GWEN_ERROR_INVALID; } /* P4: Referenzzahl */ AH_Job_AddChallengeParam(j, ""); /* P5: Termin */ if (da) { GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 64, 0, 1); GWEN_Date_toStringWithTemplate(da, "YYYYMMDD", tbuf); AH_Job_AddChallengeParam(j, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } else { DBG_ERROR(AQHBCI_LOGDOMAIN, "No execution date"); return GWEN_ERROR_INVALID; } /* done */ return 0; } int AH_HHD14_AddChallengeParams_35(AH_JOB *j, const AB_VALUE *vAmount, const char *sRemoteIban) { /* same as 09 */ return AH_HHD14_AddChallengeParams_09(j, vAmount, sRemoteIban); } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/applayer/hhd_l.h0000664000175000017500000000535614043610745021665 00000000000000/*************************************************************************** begin : Sat Dec 10 2011 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AQHBCI_HHD_L_H #define AQHBCI_HHD_L_H #include "aqhbci/joblayer/job_l.h" #include #if 0 int AH_HHD14_Translate(const char *code, GWEN_BUFFER *cbuf); #endif int AH_HHD14_AddChallengeParams_04(AH_JOB *j, const AB_VALUE *vAmount, const char *sRemoteBankCode, const char *sRemoteAccountNumber); int AH_HHD14_AddChallengeParams_05(AH_JOB *j, const AB_VALUE *vAmount, const char *sRemoteAccountNumber); int AH_HHD14_AddChallengeParams_09(AH_JOB *j, const AB_VALUE *vAmount, const char *sRemoteIban); int AH_HHD14_AddChallengeParams_12(AH_JOB *j, int numTransfers, const AB_VALUE *vSumOfAmount, const char *sLocalAccount, const AB_VALUE *vSumOfRemoteAccounts); int AH_HHD14_AddChallengeParams_13(AH_JOB *j, int numTransfers, const AB_VALUE *vSumOfAmount, const char *sLocalIban); int AH_HHD14_AddChallengeParams_17(AH_JOB *j, const AB_VALUE *vAmount, const char *sRemoteIban); int AH_HHD14_AddChallengeParams_19(AH_JOB *j, int numTransfers, const AB_VALUE *vSumOfAmount, const char *sLocalAccountNumber, const AB_VALUE *vSumOfRemoteAccounts); int AH_HHD14_AddChallengeParams_23(AH_JOB *j, const AB_VALUE *vAmount, const char *sRemoteIban, const GWEN_DATE *da); int AH_HHD14_AddChallengeParams_29(AH_JOB *j, const AB_VALUE *vAmount, const char *sRemoteIban, const GWEN_DATE *da); int AH_HHD14_AddChallengeParams_32(AH_JOB *j, int transferCount, const AB_VALUE *vAmount, const char *sLocalIban, const GWEN_DATE *da); int AH_HHD14_AddChallengeParams_35(AH_JOB *j, const AB_VALUE *vAmount, const char *sRemoteIban); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/applayer/cbox_prepare.h0000664000175000017500000000112114043610745023242 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_OUTBOX_CBOX_PREPARE_H #define AH_OUTBOX_CBOX_PREPARE_H #include "aqhbci/applayer/cbox.h" int AH_OutboxCBox_Prepare(AH_OUTBOX_CBOX *cbox); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/applayer/cbox_send.c0000664000175000017500000000373714214726437022555 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "aqhbci/applayer/cbox_send.h" #include "aqhbci/joblayer/jobqueue_tomsg.h" #include "aqbanking/i18n_l.h" #include int AH_OutboxCBox_SendMessage(AH_OUTBOX_CBOX *cbox, AH_DIALOG *dlg, AH_MSG *msg) { int rv; DBG_NOTICE(AQHBCI_LOGDOMAIN, "Sending message"); /*GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Info, I18N("Sending message"));*/ rv=AH_Dialog_SendMessage(dlg, msg); if (rv) { DBG_NOTICE(AQHBCI_LOGDOMAIN, "Could not send message"); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("Unable to send (network error)")); return rv; } DBG_NOTICE(AQHBCI_LOGDOMAIN, "Message sent"); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Info, I18N("Message sent")); return 0; } int AH_OutboxCBox_SendQueue(AH_OUTBOX_CBOX *cbox, AH_DIALOG *dlg, AH_JOBQUEUE *jq) { AH_MSG *msg; int rv; DBG_NOTICE(AQHBCI_LOGDOMAIN, "Encoding queue"); /*GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Info, I18N("Encoding queue"));*/ msg=AH_JobQueue_ToMessage(jq, dlg); if (!msg) { DBG_INFO(AQHBCI_LOGDOMAIN, "Could not encode queue"); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("Unable to encode")); return GWEN_ERROR_GENERIC; } rv=AH_OutboxCBox_SendMessage(cbox, dlg, msg); AH_Msg_free(msg); if (rv) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } DBG_NOTICE(AQHBCI_LOGDOMAIN, "Queue sent"); /*GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Info, I18N("Queue sent"));*/ return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/applayer/outbox.c0000664000175000017500000003362514576127360022131 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "outbox_p.h" #include "aqhbci/ajobs/accountjob_l.h" #include "aqhbci/applayer/cbox_prepare.h" #include "aqhbci/applayer/cbox_queue.h" #include "aqbanking/i18n_l.h" #include #include #include /*#define EXTREME_DEBUGGING */ /* ------------------------------------------------------------------------------------------------ * forward declarations * ------------------------------------------------------------------------------------------------ */ static unsigned int _countTodoJobs(AH_OUTBOX *ob); static int _sendOutboxWithProbablyLockedUsers(AH_OUTBOX *ob); static AH_JOB *_findTransferJobInCheckJobList(const AH_JOB_LIST *jl, AB_USER *u, AB_ACCOUNT *a, const char *jobName); static int _prepare(AH_OUTBOX *ob); static void _finishCBox(AH_OUTBOX *ob, AH_OUTBOX_CBOX *cbox); static int _sendAndRecvCustomerBoxes(AH_OUTBOX *ob); static int _lockUsers(AH_OUTBOX *ob, AB_USER_LIST2 *lockedUsers); static int _unlockUsers(AH_OUTBOX *ob, AB_USER_LIST2 *lockedUsers, int abandon); static void _finishRemainingCustomerBoxes(AH_OUTBOX *ob); static AH_OUTBOX_CBOX *_findCBox(const AH_OUTBOX *ob, const AB_USER *u); /* ------------------------------------------------------------------------------------------------ * implementations * ------------------------------------------------------------------------------------------------ */ AH_OUTBOX *AH_Outbox_new(AB_PROVIDER *pro) { AH_OUTBOX *ob; assert(pro); GWEN_NEW_OBJECT(AH_OUTBOX, ob); GWEN_INHERIT_INIT(AH_OUTBOX, ob); ob->provider=pro; ob->userBoxes=AH_OutboxCBox_List_new(); ob->finishedJobs=AH_Job_List_new(); ob->usage=1; return ob; } void AH_Outbox_free(AH_OUTBOX *ob) { if (ob) { assert(ob->usage); if (--(ob->usage)==0) { AH_OutboxCBox_List_free(ob->userBoxes); AH_Job_List_free(ob->finishedJobs); GWEN_INHERIT_FINI(AH_OUTBOX, ob); GWEN_FREE_OBJECT(ob); } } } void AH_Outbox_Attach(AH_OUTBOX *ob) { assert(ob); ob->usage++; } AB_IMEXPORTER_CONTEXT *AH_Outbox_GetImExContext(const AH_OUTBOX *ob) { assert(ob); return ob->context; } AH_JOB_LIST *AH_Outbox_GetFinishedJobs(AH_OUTBOX *ob) { assert(ob); assert(ob->usage); return ob->finishedJobs; } int AH_Outbox_Execute(AH_OUTBOX *ob, AB_IMEXPORTER_CONTEXT *ctx, int withProgress, int nounmount, int doLock) { int rv; uint32_t pid=0; AB_USER_LIST2 *lockedUsers=NULL; assert(ob); if (withProgress) { pid=GWEN_Gui_ProgressStart(GWEN_GUI_PROGRESS_DELAY | GWEN_GUI_PROGRESS_ALLOW_EMBED | GWEN_GUI_PROGRESS_SHOW_PROGRESS | GWEN_GUI_PROGRESS_SHOW_ABORT, I18N("Executing Jobs"), I18N("Now the jobs are sent via their " "backends to the credit institutes."), _countTodoJobs(ob), 0); } ob->context=ctx; if (doLock) { lockedUsers=AB_User_List2_new(); rv=_lockUsers(ob, lockedUsers); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); AB_User_List2_free(lockedUsers); } } else rv=0; if (rv==0) { rv=_sendOutboxWithProbablyLockedUsers(ob); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); } if (doLock) { int rv2; rv2=_unlockUsers(ob, lockedUsers, 0); if (rv2<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv2); } AB_User_List2_free(lockedUsers); if (rv==0 && rv2!=0) rv=rv2; } } if (!nounmount) AB_Banking_ClearCryptTokenList(AB_Provider_GetBanking(ob->provider)); if (withProgress) { GWEN_Gui_ProgressEnd(pid); } ob->context=NULL; return rv; } AH_JOB *AH_Outbox_FindTransferJob(AH_OUTBOX *ob, AB_USER *u, AB_ACCOUNT *a, const char *jobName) { AH_OUTBOX_CBOX *cbox; AH_JOB *j; assert(ob); assert(u); assert(a); assert(jobName); DBG_INFO(AQHBCI_LOGDOMAIN, "Searching for %s job", jobName); cbox=AH_OutboxCBox_List_First(ob->userBoxes); while (cbox) { if (AH_OutboxCBox_GetUser(cbox)==u) { AH_JOBQUEUE *jq; /* check jobs in lists */ j=_findTransferJobInCheckJobList(AH_OutboxCBox_GetTodoJobs(cbox), u, a, jobName); if (j) return j; /* check jobs in queues */ jq=AH_JobQueue_List_First(AH_OutboxCBox_GetTodoQueues(cbox)); while (jq) { const AH_JOB_LIST *jl; jl=AH_JobQueue_GetJobList(jq); if (jl) { j=_findTransferJobInCheckJobList(jl, u, a, jobName); if (j) return j; } jq=AH_JobQueue_List_Next(jq); } /* while */ } else { DBG_WARN(AQHBCI_LOGDOMAIN, "Customer doesn't match"); } cbox=AH_OutboxCBox_List_Next(cbox); } /* while */ DBG_INFO(AQHBCI_LOGDOMAIN, "No matching multi job found"); return 0; } int _sendOutboxWithProbablyLockedUsers(AH_OUTBOX *ob) { unsigned int jobCount; int rv; assert(ob); jobCount=_countTodoJobs(ob); if (jobCount==0) { DBG_WARN(AQHBCI_LOGDOMAIN, "Empty outbox"); return 0; } GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Notice, I18N("AqHBCI started")); rv=_prepare(ob); if (rv) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Error preparing jobs for sending."); return rv; } rv=_sendAndRecvCustomerBoxes(ob); if (rv) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Error while sending outbox."); return rv; } GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Notice, I18N("AqHBCI finished.")); return 0; } int _lockUsers(AH_OUTBOX *ob, AB_USER_LIST2 *lockedUsers) { AH_OUTBOX_CBOX *cbox; assert(ob); cbox=AH_OutboxCBox_List_First(ob->userBoxes); while (cbox) { int rv; AB_USER *user; user=AH_OutboxCBox_GetUser(cbox); DBG_INFO(AQHBCI_LOGDOMAIN, "Locking customer \"%lu\"", (unsigned long int) AB_User_GetUniqueId(user)); GWEN_Gui_ProgressLog2(0, GWEN_LoggerLevel_Info, I18N("Locking customer \"%lu\""), (unsigned long int) AB_User_GetUniqueId(user)); rv=AB_Provider_BeginExclUseUser(ob->provider, user); if (rv<0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not lock customer [%lu] (%d)", (unsigned long int) AB_User_GetUniqueId(user), rv); GWEN_Gui_ProgressLog2(0, GWEN_LoggerLevel_Error, I18N("Could not lock user %lu (%d)"), (unsigned long int) AB_User_GetUniqueId(user), rv); _unlockUsers(ob, lockedUsers, 1); /* abandon */ return rv; } AB_User_List2_PushBack(lockedUsers, user); cbox=AH_OutboxCBox_List_Next(cbox); } /* while */ return 0; } int _unlockUsers(AH_OUTBOX *ob, AB_USER_LIST2 *lockedUsers, int abandon) { int errors=0; AB_USER_LIST2_ITERATOR *it; assert(ob); it=AB_User_List2_First(lockedUsers); if (it) { AB_USER *u; u=AB_User_List2Iterator_Data(it); while (u) { int rv; DBG_INFO(AQHBCI_LOGDOMAIN, "Unlocking customer \"%lu\"", (unsigned long int) AB_User_GetUniqueId(u)); GWEN_Gui_ProgressLog2(0, GWEN_LoggerLevel_Info, I18N("Unlocking customer \"%lu\""), (unsigned long int) AB_User_GetUniqueId(u)); rv=AB_Provider_EndExclUseUser(ob->provider, u, abandon); if (rv<0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not unlock user %lu (%d)", (unsigned long int) AB_User_GetUniqueId(u), rv); GWEN_Gui_ProgressLog2(0, GWEN_LoggerLevel_Error, I18N("Could not unlock user %lu (%d)"), (unsigned long int) AB_User_GetUniqueId(u), rv); errors++; } u=AB_User_List2Iterator_Next(it); } AB_User_List2Iterator_free(it); } if (errors) return GWEN_ERROR_GENERIC; return 0; } AH_OUTBOX_CBOX *_findCBox(const AH_OUTBOX *ob, const AB_USER *u) { AH_OUTBOX_CBOX *cbox; assert(ob); assert(u); cbox=AH_OutboxCBox_List_First(ob->userBoxes); while (cbox) { if (AH_OutboxCBox_GetUser(cbox)==u) { DBG_DEBUG(AQHBCI_LOGDOMAIN, "CBox for customer \"%lu\" found", (unsigned long int) AB_User_GetUniqueId(u)); return cbox; } cbox=AH_OutboxCBox_List_Next(cbox); } /* while */ DBG_INFO(AQHBCI_LOGDOMAIN, "CBox for customer \"%lu\" not found", (unsigned long int) AB_User_GetUniqueId(u)); return 0; } void AH_Outbox_AddJob(AH_OUTBOX *ob, AH_JOB *j) { AB_USER *u; AH_OUTBOX_CBOX *cbox; assert(ob); assert(j); u=AH_Job_GetUser(j); assert(u); cbox=_findCBox(ob, u); if (!cbox) { DBG_NOTICE(AQHBCI_LOGDOMAIN, "Creating CBox for customer \"%lu\"", (unsigned long int) AB_User_GetUniqueId(u)); cbox=AH_OutboxCBox_new(ob->provider, u, ob); AH_OutboxCBox_List_Add(cbox, ob->userBoxes); } /* attach to job so that it will never be destroyed from me */ AH_Job_Attach(j); AH_OutboxCBox_AddTodoJob(cbox, j); } int _prepare(AH_OUTBOX *ob) { AH_OUTBOX_CBOX *cbox; unsigned int errors; assert(ob); errors=0; cbox=AH_OutboxCBox_List_First(ob->userBoxes); while (cbox) { AB_USER *u; u=AH_OutboxCBox_GetUser(cbox); DBG_INFO(AQHBCI_LOGDOMAIN, "Preparing queues for customer \"%lu\"", (unsigned long int) AB_User_GetUniqueId(u)); if (AH_OutboxCBox_Prepare(cbox)) { DBG_INFO(AQHBCI_LOGDOMAIN, "Error preparing cbox"); errors++; } else { DBG_INFO(AQHBCI_LOGDOMAIN, "Preparing queues for customer \"%lu\": done", (unsigned long int) AB_User_GetUniqueId(u)); } cbox=AH_OutboxCBox_List_Next(cbox); } /* while */ if (errors) { DBG_INFO(AQHBCI_LOGDOMAIN, "%d errors occurred", errors); return GWEN_ERROR_GENERIC; } return 0; } void _finishCBox(AH_OUTBOX *ob, AH_OUTBOX_CBOX *cbox) { AH_JOB_LIST *jl; AH_JOB *j; assert(ob); assert(cbox); AH_OutboxCBox_Finish(cbox); jl=AH_OutboxCBox_TakeFinishedJobs(cbox); assert(jl); DBG_INFO(AQHBCI_LOGDOMAIN, "Finishing customer outbox"); while ((j=AH_Job_List_First(jl))) { int rv; AH_JOB_STATUS st; AH_Job_List_Del(j); st=AH_Job_GetStatus(j); if (st==AH_JobStatusAnswered) { DBG_INFO(AQHBCI_LOGDOMAIN, "Letting job \"%s\" process", AH_Job_GetName(j)); rv=AH_Job_Process(j, ob->context); if (rv) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Error in job \"%s\": %d", AH_Job_GetName(j), rv); AH_Job_SetStatus(j, AH_JobStatusError); GWEN_Gui_ProgressLog2(0, GWEN_LoggerLevel_Error, I18N("Error processing job %s"), AH_Job_GetName(j)); } } else { DBG_INFO(AQHBCI_LOGDOMAIN, "Skipping job \"%s\" because of status \"%s\" (%d)", AH_Job_GetName(j), AH_Job_StatusName(st), st); } AH_Job_List_Add(j, ob->finishedJobs); } /* while */ AH_Job_List_free(jl); } void _finishRemainingCustomerBoxes(AH_OUTBOX *ob) { AH_OUTBOX_CBOX *cbox; assert(ob); while ((cbox=AH_OutboxCBox_List_First(ob->userBoxes))) { _finishCBox(ob, cbox); AH_OutboxCBox_List_Del(cbox); AH_OutboxCBox_free(cbox); } /* while */ } int _sendAndRecvCustomerBoxes(AH_OUTBOX *ob) { AH_OUTBOX_CBOX *cbox; int rv; while ((cbox=AH_OutboxCBox_List_First(ob->userBoxes))) { AB_USER *u; u=AH_OutboxCBox_GetUser(cbox); DBG_INFO(AQHBCI_LOGDOMAIN, "Sending messages for customer \"%lu\"", (unsigned long int) AB_User_GetUniqueId(u)); rv=AH_OutboxCBox_SendAndRecvBox(cbox); _finishCBox(ob, cbox); AH_OutboxCBox_List_Del(cbox); AH_OutboxCBox_free(cbox); if (rv==GWEN_ERROR_USER_ABORTED) { _finishRemainingCustomerBoxes(ob); return rv; } } /* while */ return 0; } unsigned int _countTodoJobs(AH_OUTBOX *ob) { unsigned int cnt; AH_OUTBOX_CBOX *cbox; assert(ob); cnt=0; cbox=AH_OutboxCBox_List_First(ob->userBoxes); while (cbox) { AH_JOBQUEUE_LIST *todoQueues; AH_JOB_LIST *todoJobs; AH_JOBQUEUE *jq; todoQueues=AH_OutboxCBox_GetTodoQueues(cbox); todoJobs=AH_OutboxCBox_GetTodoJobs(cbox); cnt+=AH_Job_List_GetCount(todoJobs); jq=AH_JobQueue_List_First(todoQueues); while (jq) { if (!(AH_JobQueue_GetFlags(jq) & AH_JOBQUEUE_FLAGS_OUTBOX)) { const AH_JOB_LIST *jl; jl=AH_JobQueue_GetJobList(jq); if (jl) { AH_JOB *j; j=AH_Job_List_First(jl); while (j) { if (!(AH_Job_GetFlags(j) & AH_JOB_FLAGS_OUTBOX)) cnt++; j=AH_Job_List_Next(j); } /* while */ } } jq=AH_JobQueue_List_Next(jq); } /* while */ cbox=AH_OutboxCBox_List_Next(cbox); } /* while */ return cnt; } AH_JOB *_findTransferJobInCheckJobList(const AH_JOB_LIST *jl, AB_USER *u, AB_ACCOUNT *a, const char *jobName) { AH_JOB *j; assert(jl); j=AH_Job_List_First(jl); while (j) { DBG_INFO(AQHBCI_LOGDOMAIN, "Checking job \"%s\"", AH_Job_GetName(j)); if (strcasecmp(AH_Job_GetName(j), jobName)==0 && AH_AccountJob_GetAccount(j)==a) { if (AH_Job_GetTransferCount(j) #endif #include "aqhbci/applayer/cbox_itan2.h" #include "aqhbci/applayer/cbox_send.h" #include "aqhbci/applayer/cbox_recv.h" #include "aqhbci/applayer/cbox_queue.h" #include "aqhbci/admjobs/jobtan_l.h" #include "aqbanking/i18n_l.h" #include #include #include /* ------------------------------------------------------------------------------------------------ * forward declarations * ------------------------------------------------------------------------------------------------ */ static int _sendTanAndReceiveResponseProc2(AH_OUTBOX_CBOX *cbox, AH_DIALOG *dlg, AH_JOBQUEUE *jobQueueNeedingTan, AH_JOB *tanJobFromFirstStage); static int _sendTanAndReceiveResponseProcS(AH_OUTBOX_CBOX *cbox, AH_DIALOG *dlg, AH_JOBQUEUE *jobQueueNeedingTan, AH_JOB *tanJobFromFirstStage); static int _sendTanQueue2AndDispatchResponse(AH_OUTBOX_CBOX *cbox, AH_DIALOG *dlg, AH_JOBQUEUE *jobQueueNeedingTan, const AH_JOB *tanJobFromFirstStage, AH_JOBQUEUE *jobQueue2); static int _inputTanForQueueWithChallenges(AH_OUTBOX_CBOX *cbox, AH_DIALOG *dlg, const char *challenge, const char *challengeHhd, AH_JOBQUEUE *jobQueue2); static int _letUserConfirmApproval(AH_OUTBOX_CBOX *cbox, AH_JOB *jobNeedingTan, const char *challenge); static AH_JOB *_createTanJobStage2(AB_PROVIDER *provider, AH_DIALOG *dlg, const AH_JOB *jobNeedingTan, const AH_JOB *tanJobFromFirstStage); static AH_JOB *_createTanJobDecoupledStageS(AB_PROVIDER *provider, AH_DIALOG *dlg, const AH_JOB *jobNeedingTan, const AH_JOB *tanJobFromFirstStage); static AH_MSG *_encodeTanJobStage2(AH_DIALOG *dlg, AH_JOBQUEUE *jobQueue2, AH_JOB *jobNeedingTan); static int _setupTanJobStage2OrS(AH_JOB *tanJob2, const AH_JOB *jobNeedingTan, const AH_JOB *tanJobFromFirstStage); static void _dispatchJobSegResultsToQueue(AH_JOB *job, AH_JOBQUEUE *qJob); static void _dispatchJobMsgResultsToQueue(AH_JOB *job, AH_JOBQUEUE *qJob); /* ------------------------------------------------------------------------------------------------ * implementations * ------------------------------------------------------------------------------------------------ */ int AH_OutboxCBox_SendAndReceiveQueueWithTan2(AH_OUTBOX_CBOX *cbox, AH_DIALOG *dlg, AH_JOBQUEUE *jobQueueNeedingTan) { int rv; AH_OUTBOX *outbox; AB_PROVIDER *provider; AH_JOB *jobNeedingTan; AH_JOB *tanJobForFirstStage; AB_USER *u; DBG_INFO(AQHBCI_LOGDOMAIN, "Sending job with TAN (process variant 2)"); outbox=AH_OutboxCBox_GetOutbox(cbox); provider=AH_OutboxCBox_GetProvider(cbox); jobNeedingTan=AH_JobQueue_GetFirstJob(jobQueueNeedingTan); u=AH_Job_GetUser(jobNeedingTan); /* don't need a TAN for this particular message, just a HKTAN segment */ AH_JobQueue_SubFlags(jobQueueNeedingTan, AH_JOBQUEUE_FLAGS_NEEDTAN); /* prepare HKTAN (process type 4) */ tanJobForFirstStage=AH_Job_Tan_new(provider, u, 4, AH_Dialog_GetTanJobVersion(dlg)); if (!tanJobForFirstStage) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Job HKTAN not available"); return GWEN_ERROR_GENERIC; } AH_Job_Tan_SetTanMediumId(tanJobForFirstStage, AH_User_GetTanMediumId(u)); if (AH_Dialog_GetFlags(dlg) & AH_DIALOG_FLAGS_SCA) { /* With tan process "4" only with strong verification */ AH_Job_Tan_SetSegCode(tanJobForFirstStage, AH_Job_GetCode(jobNeedingTan)); } /* copy signers */ if (AH_Job_GetFlags(jobNeedingTan) & AH_JOB_FLAGS_SIGN) { rv=AH_Job_AddSigners(tanJobForFirstStage, AH_Job_GetSigners(jobNeedingTan)); if (rv<1) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Signatures needed but no signer given"); return GWEN_ERROR_INVALID; } } /* add job to queue */ rv=AH_JobQueue_AddJob(jobQueueNeedingTan, tanJobForFirstStage); if (rv) { DBG_NOTICE(AQHBCI_LOGDOMAIN, "here (%d)", rv); AH_Job_free(tanJobForFirstStage); return rv; } /* send original job with HKTAN, receive response and dispatch it to those jobs */ rv=AH_OutboxCBox_SendAndRecvQueueNoTan(cbox, dlg, jobQueueNeedingTan); if (rv) { DBG_NOTICE(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } DBG_INFO(AQHBCI_LOGDOMAIN, "Processing TAN job from first stage"); rv=AH_Job_Process(tanJobForFirstStage, AH_Outbox_GetImExContext(outbox)); if (rv) { DBG_NOTICE(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } if (AH_Job_HasResultWithCode(jobNeedingTan, 3076) || AH_Job_HasResultWithCode(tanJobForFirstStage, 3076)) { /* SCA not needed */ DBG_NOTICE(AQHBCI_LOGDOMAIN, "No TAN needed"); } else if (AH_Job_HasResultWithCode(jobNeedingTan, 3955) || AH_Job_HasResultWithCode(tanJobForFirstStage, 3955)) { /* decoupled */ DBG_NOTICE(AQHBCI_LOGDOMAIN, "Decoupled (3955), waiting for user to approve transaction externally"); do { /* loop until positive status response received */ rv=_sendTanAndReceiveResponseProcS(cbox, dlg, jobQueueNeedingTan, tanJobForFirstStage); } while (rv==1); if (rv!=0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Error exchanging TAN status message (%d)", rv); return rv; } } else { DBG_NOTICE(AQHBCI_LOGDOMAIN, "Job has no 3076 result, getting TAN"); rv=_sendTanAndReceiveResponseProc2(cbox, dlg, jobQueueNeedingTan, tanJobForFirstStage); if (rv<0) { DBG_NOTICE(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } } return 0; } int AH_OutboxCBox_SendAndReceiveJobWithTan2(AH_OUTBOX_CBOX *cbox, AH_DIALOG *dlg, AH_JOB *job) { AB_USER *user; AH_JOBQUEUE *jobQueueNeedingTan; int rv; user=AH_OutboxCBox_GetUser(cbox); jobQueueNeedingTan=AH_JobQueue_new(user); /* add original job to queue */ AH_Job_Attach(job); rv=AH_JobQueue_AddJob(jobQueueNeedingTan, job); if (rv) { DBG_NOTICE(AQHBCI_LOGDOMAIN, "here (%d)", rv); AH_JobQueue_free(jobQueueNeedingTan); return rv; } /* send queue */ rv=AH_OutboxCBox_SendAndReceiveQueueWithTan2(cbox, dlg, jobQueueNeedingTan); if (rv) { DBG_NOTICE(AQHBCI_LOGDOMAIN, "here (%d)", rv); AH_JobQueue_free(jobQueueNeedingTan); return rv; } AH_JobQueue_free(jobQueueNeedingTan); return rv; } int _sendTanAndReceiveResponseProc2(AH_OUTBOX_CBOX *cbox, AH_DIALOG *dlg, AH_JOBQUEUE *jobQueueNeedingTan, AH_JOB *tanJobFromFirstStage) { AB_PROVIDER *provider; int rv; AH_JOB *jobNeedingTan; AH_JOBQUEUE *jobQueue2; AH_JOB *tanJob2; assert(jobQueueNeedingTan); assert(tanJobFromFirstStage); provider=AH_OutboxCBox_GetProvider(cbox); jobNeedingTan=AH_JobQueue_GetFirstJob(jobQueueNeedingTan); /* prepare second message (the one with the TAN) */ jobQueue2=AH_JobQueue_fromQueue(jobQueueNeedingTan); AH_JobQueue_SetReferenceQueue(jobQueue2, jobQueueNeedingTan); rv=_inputTanForQueueWithChallenges(cbox, dlg, AH_Job_Tan_GetChallenge(tanJobFromFirstStage), AH_Job_Tan_GetHhdChallenge(tanJobFromFirstStage), jobQueue2); if (rv<0) { DBG_NOTICE(AQHBCI_LOGDOMAIN, "here (%d)", rv); AH_JobQueue_free(jobQueue2); return rv; } /* prepare HKTAN (process type 2) */ tanJob2=_createTanJobStage2(provider, dlg, jobNeedingTan, tanJobFromFirstStage); if (tanJob2==NULL) { DBG_INFO(AQHBCI_LOGDOMAIN, "here"); AH_Job_free(tanJob2); AH_JobQueue_free(jobQueue2); return GWEN_ERROR_GENERIC; } rv=AH_JobQueue_AddJob(jobQueue2, tanJob2); if (rv) { DBG_NOTICE(AQHBCI_LOGDOMAIN, "here (%d)", rv); AH_Job_free(tanJob2); AH_JobQueue_free(jobQueue2); return rv; } rv=_sendTanQueue2AndDispatchResponse(cbox, dlg, jobQueueNeedingTan, tanJobFromFirstStage, jobQueue2); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here"); AH_JobQueue_free(jobQueue2); return rv; } /* store used TAN in original job (if any) */ DBG_INFO(AQHBCI_LOGDOMAIN, "Storing TAN in job [%s]", AH_Job_GetName(jobNeedingTan)); AH_Job_SetUsedTan(jobNeedingTan, AH_JobQueue_GetUsedTan(jobQueue2)); AH_JobQueue_free(jobQueue2); return 0; } int _sendTanAndReceiveResponseProcS(AH_OUTBOX_CBOX *cbox, AH_DIALOG *dlg, AH_JOBQUEUE *jobQueueNeedingTan, AH_JOB *tanJobFromFirstStage) { AB_PROVIDER *provider; int rv; AH_JOB *jobNeedingTan; AH_JOBQUEUE *jobQueue2; AH_JOB *tanJob2; provider=AH_OutboxCBox_GetProvider(cbox); jobNeedingTan=AH_JobQueue_GetFirstJob(jobQueueNeedingTan); /* prepare second message (the one with the TAN) */ jobQueue2=AH_JobQueue_fromQueue(jobQueueNeedingTan); AH_JobQueue_SetReferenceQueue(jobQueue2, jobQueueNeedingTan); /* we don't need a TAN with this queue, either, because the TAN is conveyed externally via app */ AH_JobQueue_SubFlags(jobQueue2, AH_JOBQUEUE_FLAGS_NEEDTAN); rv=_letUserConfirmApproval(cbox, jobNeedingTan, AH_Job_Tan_GetChallenge(tanJobFromFirstStage)); if (rv<0) { DBG_NOTICE(AQHBCI_LOGDOMAIN, "here (%d)", rv); AH_JobQueue_free(jobQueue2); return rv; } /* prepare HKTAN (process type 2) */ tanJob2=_createTanJobDecoupledStageS(provider, dlg, jobNeedingTan, tanJobFromFirstStage); if (tanJob2==NULL) { DBG_INFO(AQHBCI_LOGDOMAIN, "here"); AH_Job_free(tanJob2); AH_JobQueue_free(jobQueue2); return GWEN_ERROR_GENERIC; } rv=AH_JobQueue_AddJob(jobQueue2, tanJob2); if (rv) { DBG_NOTICE(AQHBCI_LOGDOMAIN, "here (%d)", rv); AH_Job_free(tanJob2); AH_JobQueue_free(jobQueue2); return rv; } rv=_sendTanQueue2AndDispatchResponse(cbox, dlg, jobQueueNeedingTan, tanJobFromFirstStage, jobQueue2); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here"); AH_JobQueue_free(jobQueue2); return rv; } if (AH_Job_HasResultWithCode(tanJob2, 3956) || AH_Job_HasResultWithCode(tanJob2, 3956)) { /* decoupled */ DBG_NOTICE(AQHBCI_LOGDOMAIN, "Decoupled (3956), still waiting for user to approve transaction externally"); AH_JobQueue_free(jobQueue2); return 1; } AH_JobQueue_free(jobQueue2); return 0; } int _sendTanQueue2AndDispatchResponse(AH_OUTBOX_CBOX *cbox, AH_DIALOG *dlg, AH_JOBQUEUE *jobQueueNeedingTan, const AH_JOB *tanJobFromFirstStage, AH_JOBQUEUE *jobQueue2) { AH_OUTBOX *outbox; AH_JOB *jobNeedingTan; AH_JOB *tanJob2; AH_MSG *msg2; int rv; outbox=AH_OutboxCBox_GetOutbox(cbox); tanJob2=AH_JobQueue_GetFirstJob(jobQueue2); jobNeedingTan=AH_JobQueue_GetFirstJob(jobQueueNeedingTan); msg2=_encodeTanJobStage2(dlg, jobQueue2, jobNeedingTan); if (msg2==NULL) { DBG_INFO(AQHBCI_LOGDOMAIN, "here"); return GWEN_ERROR_GENERIC; } rv=AH_OutboxCBox_SendMessage(cbox, dlg, msg2); if (rv) { DBG_NOTICE(AQHBCI_LOGDOMAIN, "here (%d)", rv); AH_Msg_free(msg2); return rv; } AH_Msg_free(msg2); AH_JobQueue_SetJobStatusOnMatch(jobQueue2, AH_JobStatusEncoded, AH_JobStatusSent); /* receive response */ rv=AH_OutboxCBox_RecvQueue(cbox, dlg, jobQueue2); if (rv) { DBG_NOTICE(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } else { DBG_INFO(AQHBCI_LOGDOMAIN, "Processing job \"%s\"", AH_Job_GetName(tanJob2)); rv=AH_Job_Process(tanJob2, AH_Outbox_GetImExContext(outbox)); if (rv) { DBG_NOTICE(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } /* dispatch results from tanJob2 to all members of the queue */ _dispatchJobSegResultsToQueue(tanJob2, jobQueueNeedingTan); _dispatchJobMsgResultsToQueue(tanJob2, jobQueueNeedingTan); } return 0; } int _inputTanForQueueWithChallenges(AH_OUTBOX_CBOX *cbox, AH_DIALOG *dlg, const char *challenge, const char *challengeHhd, AH_JOBQUEUE *jobQueue2) { /* ask for TAN */ if (challenge || challengeHhd) { char tanBuffer[64]; int rv; memset(tanBuffer, 0, sizeof(tanBuffer)); rv=AH_OutboxCBox_InputTanWithChallenge(cbox, dlg, challenge, challengeHhd, tanBuffer, 1, sizeof(tanBuffer)-1); if (rv) { DBG_NOTICE(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } AH_JobQueue_SetUsedTan(jobQueue2, tanBuffer); return 0; } else { DBG_ERROR(AQHBCI_LOGDOMAIN, "No challenge received"); return GWEN_ERROR_BAD_DATA; } } int _letUserConfirmApproval(AH_OUTBOX_CBOX *cbox, AH_JOB *jobNeedingTan, const char *challenge) { /* ask for TAN */ if (challenge) { AB_PROVIDER *provider; AB_BANKING *ab; AB_USER *user; GWEN_BUFFER *guiBuf; const char *sUserName; const char *sBankName=NULL; AB_BANKINFO *bankInfo; int rv; provider=AH_OutboxCBox_GetProvider(cbox); ab=AB_Provider_GetBanking(provider); user=AH_OutboxCBox_GetUser(cbox); sUserName=AB_User_GetUserId(user); /* find bank name */ bankInfo=AB_Banking_GetBankInfo(ab, "de", "*", AB_User_GetBankCode(user)); if (bankInfo) sBankName=AB_BankInfo_GetBankName(bankInfo); if (!sBankName) sBankName=AB_User_GetBankCode(user); guiBuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendArgs(guiBuf, I18N("Your approval for this communication with your bank server is required.\n" "Please use your smart phone app for this\n" "and click \"Approved\" afterwards (%s, user %s at %s).\n" "\n" "Message from bank server regarding this process:\n" "%s\n"), AH_Job_GetCode(jobNeedingTan), sUserName?sUserName:"", sBankName?sBankName:"", challenge); GWEN_Buffer_AppendString(guiBuf, ""); GWEN_Buffer_AppendArgs(guiBuf, I18N("" "

Your approval for this communication with your bank server is required.

" "

Please use your smart phone app for this " "and click Approved afterwards (%s, user %s at %s).

" "

Message from bank server regarding this process:

" "

%s

" ""), AH_Job_GetCode(jobNeedingTan), sUserName?sUserName:"no user id", sBankName?sBankName:"no bank name", challenge?challenge:"no message"); AB_BankInfo_free(bankInfo); rv=GWEN_Gui_MessageBox(GWEN_GUI_MSG_FLAGS_TYPE_INFO | GWEN_GUI_MSG_FLAGS_CONFIRM_B1 | GWEN_GUI_MSG_FLAGS_SEVERITY_NORMAL, I18N("Decoupled Mode: Waiting for Approval"), GWEN_Buffer_GetStart(guiBuf), I18N("Approved"), I18N("Abort"), NULL, 0); GWEN_Buffer_free(guiBuf); if (rv!=1) { DBG_INFO(AQHBCI_LOGDOMAIN, "Not confirming TAN (%d)", rv); return GWEN_ERROR_USER_ABORTED; } } return 0; } AH_JOB *_createTanJobStage2(AB_PROVIDER *provider, AH_DIALOG *dlg, const AH_JOB *jobNeedingTan, const AH_JOB *tanJobFromFirstStage) { AH_JOB *tanJob2; AB_USER *u; int rv; u=AH_Job_GetUser(jobNeedingTan); /* prepare HKTAN (process type 2) */ tanJob2=AH_Job_Tan_new(provider, u, 2, AH_Dialog_GetTanJobVersion(dlg)); if (!tanJob2) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Job HKTAN not available"); return NULL; } AH_Job_AddFlags(tanJob2, AH_JOB_FLAGS_NEEDTAN); rv=_setupTanJobStage2OrS(tanJob2, jobNeedingTan, tanJobFromFirstStage); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); AH_Job_free(tanJob2); return NULL; } return tanJob2; } AH_JOB *_createTanJobDecoupledStageS(AB_PROVIDER *provider, AH_DIALOG *dlg, const AH_JOB *jobNeedingTan, const AH_JOB *tanJobFromFirstStage) { AH_JOB *tanJob2; AB_USER *u; int rv; u=AH_Job_GetUser(jobNeedingTan); /* prepare HKTAN (process type 2) */ tanJob2=AH_Job_Tan_new(provider, u, 'S', AH_Dialog_GetTanJobVersion(dlg)); if (!tanJob2) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Job HKTAN not available"); return NULL; } AH_Job_SubFlags(tanJob2, AH_JOB_FLAGS_NEEDTAN); rv=_setupTanJobStage2OrS(tanJob2, jobNeedingTan, tanJobFromFirstStage); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); AH_Job_free(tanJob2); return NULL; } return tanJob2; } int _setupTanJobStage2OrS(AH_JOB *tanJob2, const AH_JOB *jobNeedingTan, const AH_JOB *tanJobFromFirstStage) { AB_USER *u; u=AH_Job_GetUser(tanJob2); AH_Job_Tan_SetReference(tanJob2, AH_Job_Tan_GetReference(tanJobFromFirstStage)); AH_Job_Tan_SetTanMediumId(tanJob2, AH_User_GetTanMediumId(u)); /* copy signers */ if (AH_Job_GetFlags(jobNeedingTan) & AH_JOB_FLAGS_SIGN) { if (AH_Job_AddSigners(tanJob2, AH_Job_GetSigners(jobNeedingTan))<1) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Signatures needed but no signer given"); AH_Job_free(tanJob2); return GWEN_ERROR_GENERIC; } } return 0; } AH_MSG *_encodeTanJobStage2(AH_DIALOG *dlg, AH_JOBQUEUE *jobQueue2, AH_JOB *jobNeedingTan) { int rv; AH_MSG *msg2; AH_JOB *tanJob2; tanJob2=AH_JobQueue_GetFirstJob(jobQueue2); msg2=AH_Msg_new(dlg); AH_Msg_SetNeedTan(msg2, (AH_JobQueue_GetFlags(jobQueue2) & AH_JOBQUEUE_FLAGS_NEEDTAN)?1:0); AH_Msg_SetItanMethod(msg2, 0); AH_Msg_SetItanHashMode(msg2, 0); AH_Msg_SetTan(msg2, AH_JobQueue_GetUsedTan(jobQueue2)); rv=AH_OutboxCBox_JobToMessage(tanJob2, msg2, 1); if (rv) { DBG_NOTICE(AQHBCI_LOGDOMAIN, "here (%d)", rv); AH_Msg_free(msg2); return NULL; } /* encode HKTAN message */ DBG_NOTICE(AQHBCI_LOGDOMAIN, "Encoding queue"); rv=AH_Msg_EncodeMsg(msg2); if (rv) { DBG_NOTICE(AQHBCI_LOGDOMAIN, "here (%d)", rv); AH_Msg_free(msg2); return NULL; } /* store used TAN in original job (if any) */ AH_Job_SetUsedTan(jobNeedingTan, AH_Msg_GetTan(msg2)); if (AH_Job_GetStatus(tanJob2)==AH_JobStatusEncoded) { AH_Job_SetMsgNum(tanJob2, AH_Msg_GetMsgNum(msg2)); AH_Job_SetDialogId(tanJob2, AH_Dialog_GetDialogId(dlg)); /* store expected signer and crypter (if any) */ AH_Job_SetExpectedSigner(tanJob2, AH_Msg_GetExpectedSigner(msg2)); AH_Job_SetExpectedCrypter(tanJob2, AH_Msg_GetExpectedCrypter(msg2)); /* store TAN in TAN job */ AH_Job_SetUsedTan(tanJob2, AH_Msg_GetTan(msg2)); } else { DBG_INFO(AQHBCI_LOGDOMAIN, "jTAN2 not encoded? (%d)", AH_Job_GetStatus(tanJob2)); } return msg2; } void _dispatchJobSegResultsToQueue(AH_JOB *job, AH_JOBQUEUE *qJob) { const AH_JOB_LIST *qjl; /* dispatch results from job to all members of the queue */ DBG_INFO(AQHBCI_LOGDOMAIN, "Dispatching results for HKTAN to queue jobs"); qjl=AH_JobQueue_GetJobList(qJob); if (qjl) { AH_RESULT_LIST *rl; /* segment results */ rl=AH_Job_GetSegResults(job); if (rl) { AH_RESULT *origRes; origRes=AH_Result_List_First(rl); if (origRes==NULL) { DBG_INFO(AQHBCI_LOGDOMAIN, "No segment result in job HKTAN"); } else { DBG_INFO(AQHBCI_LOGDOMAIN, "We have segment results in TAN job, setting status of all sent jobs to ANSWERED"); AH_JobQueue_SetJobStatusOnMatch(qJob, AH_JobStatusSent, AH_JobStatusAnswered); } while (origRes) { AH_JOB *qj; qj=AH_Job_List_First(qjl); while (qj) { if (qj!=job) { AH_RESULT *nr; nr=AH_Result_dup(origRes); DBG_INFO(AQHBCI_LOGDOMAIN, "Adding result %d to job %s", AH_Result_GetCode(origRes), AH_Job_GetName(qj)); AH_Result_List_Add(nr, AH_Job_GetSegResults(qj)); } else { DBG_INFO(AQHBCI_LOGDOMAIN, "Not adding result to the same job"); } qj=AH_Job_List_Next(qj); } origRes=AH_Result_List_Next(origRes); } /* while origRes */ } /* if rl */ else { DBG_INFO(AQHBCI_LOGDOMAIN, "No segment results in HKTAN"); } } /* if jql */ else { DBG_INFO(AQHBCI_LOGDOMAIN, "No job list"); } } void _dispatchJobMsgResultsToQueue(AH_JOB *job, AH_JOBQUEUE *qJob) { const AH_JOB_LIST *qjl; /* dispatch results from job to all members of the queue */ DBG_INFO(AQHBCI_LOGDOMAIN, "Dispatching results for HKTAN to queue jobs"); qjl=AH_JobQueue_GetJobList(qJob); if (qjl) { AH_RESULT_LIST *rl; /* msg results */ rl=AH_Job_GetMsgResults(job); if (rl) { AH_RESULT *origRes; origRes=AH_Result_List_First(rl); while (origRes) { AH_JOB *qj; qj=AH_Job_List_First(qjl); while (qj) { AH_RESULT *nr; nr=AH_Result_dup(origRes); AH_Result_List_Add(nr, AH_Job_GetMsgResults(qj)); qj=AH_Job_List_Next(qj); } origRes=AH_Result_List_Next(origRes); } /* while origRes */ } /* if rl */ else { DBG_INFO(AQHBCI_LOGDOMAIN, "No message results in HKTAN"); } } /* if qjl */ else { DBG_INFO(AQHBCI_LOGDOMAIN, "No job list"); } } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/applayer/cbox_psd2.h0000664000175000017500000000114714043610745022464 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_OUTBOX_CBOX_PSD2_H #define AH_OUTBOX_CBOX_PSD2_H #include "aqhbci/applayer/cbox.h" int AH_OutboxCBox_OpenDialogPsd2_Proc2(AH_OUTBOX_CBOX *cbox, AH_DIALOG *dlg); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/applayer/cbox_queue.c0000664000175000017500000006041114546575647022755 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "cbox_queue.h" #include "aqhbci/admjobs/jobacknowledge_l.h" #include "aqhbci/admjobs/jobtan_l.h" #include "aqhbci/applayer/cbox_send.h" #include "aqhbci/applayer/cbox_recv.h" #include "aqhbci/applayer/cbox_dialog.h" #include #include #include #include /* ------------------------------------------------------------------------------------------------ * forward declarations * ------------------------------------------------------------------------------------------------ */ static AH_JOBQUEUE *_createAckQueueFromTodoList(AB_USER *user, AH_JOB_LIST *jl, uint32_t jqFlags); static AH_JOBQUEUE *_createNextQueueFromTodoList(AB_USER *user, AH_JOB_LIST *jl, uint32_t jqFlags, AH_JOB_LIST *finishedJobs); static int _performQueue(AH_OUTBOX_CBOX *cbox, AH_DIALOG *dlg, AH_JOBQUEUE *jq); static int _performNonDialogQueues(AH_OUTBOX_CBOX *cbox, AH_JOBQUEUE_LIST *jql); static int _performDialogQueue(AH_OUTBOX_CBOX *cbox, AH_JOBQUEUE *jq); static void _extractMatchingQueues(AH_JOBQUEUE_LIST *jql, AH_JOBQUEUE_LIST *jqlWanted, AH_JOBQUEUE_LIST *jqlRest, uint32_t jqflags, uint32_t jqmask); static void _handleQueueListError(AH_OUTBOX_CBOX *cbox, AH_JOBQUEUE_LIST *jql, const char *logStr); static int _sendAndRecvDialogQueues(AH_OUTBOX_CBOX *cbox); static int _sendAndRecvSelected(AH_OUTBOX_CBOX *cbox, uint32_t jqflags, uint32_t jqmask); static void _handleQueueError(AH_OUTBOX_CBOX *cbox, AH_JOBQUEUE *jq, const char *logStr); static AH_DIALOG *_pndqOpenDialog(AH_OUTBOX_CBOX *cbox, uint32_t jqflags); /* ------------------------------------------------------------------------------------------------ * implementations * ------------------------------------------------------------------------------------------------ */ int AH_OutboxCBox_SendAndRecvBox(AH_OUTBOX_CBOX *cbox) { int rv; /* dialog queues */ rv=_sendAndRecvDialogQueues(cbox); if (rv) { DBG_INFO(AQHBCI_LOGDOMAIN, "Error performing dialog queues (%d)", rv); return rv; } /* non-dialog queues: unsigned, uncrypted */ rv=_sendAndRecvSelected(cbox, 0, AH_JOBQUEUE_FLAGS_ISDIALOG | AH_JOBQUEUE_FLAGS_SIGN | AH_JOBQUEUE_FLAGS_CRYPT); if (rv) { DBG_INFO(AQHBCI_LOGDOMAIN, "Error performing queues (-S, -C: %d)", rv); return rv; } /* non-dialog queues: unsigned, crypted */ rv=_sendAndRecvSelected(cbox, AH_JOBQUEUE_FLAGS_CRYPT, AH_JOBQUEUE_FLAGS_ISDIALOG | AH_JOBQUEUE_FLAGS_SIGN | AH_JOBQUEUE_FLAGS_CRYPT); if (rv) { DBG_INFO(AQHBCI_LOGDOMAIN, "Error performing queues (-S, +C: %d)", rv); return rv; } /* non-dialog queues: signed, uncrypted */ rv=_sendAndRecvSelected(cbox, AH_JOBQUEUE_FLAGS_SIGN, AH_JOBQUEUE_FLAGS_ISDIALOG | AH_JOBQUEUE_FLAGS_SIGN | AH_JOBQUEUE_FLAGS_CRYPT); if (rv) { DBG_INFO(AQHBCI_LOGDOMAIN, "Error performing queues (+S, -C: %d)", rv); return rv; } /* non-dialog queues: signed, crypted */ rv=_sendAndRecvSelected(cbox, AH_JOBQUEUE_FLAGS_SIGN | AH_JOBQUEUE_FLAGS_CRYPT, AH_JOBQUEUE_FLAGS_ISDIALOG | AH_JOBQUEUE_FLAGS_SIGN | AH_JOBQUEUE_FLAGS_CRYPT); if (rv) { DBG_INFO(AQHBCI_LOGDOMAIN, "Error performing queues (+S, +C: %d)", rv); return rv; } return 0; } /* NOTE: frees jq! */ int _performQueue(AH_OUTBOX_CBOX *cbox, AH_DIALOG *dlg, AH_JOBQUEUE *jq) { int rv; AB_USER *user; AH_JOB_LIST *finishedJobs; int loopNum; user=AH_OutboxCBox_GetUser(cbox); finishedJobs=AH_OutboxCBox_GetFinishedJobs(cbox); for (loopNum=1; loopNum++;) { AH_JOBQUEUE *jqAck; AH_JOBQUEUE *jqTodo; AH_JOB_LIST *jl; DBG_INFO(AQHBCI_LOGDOMAIN, "Performing queue (loop %d)", loopNum); if (GWEN_Logger_GetLevel(AQHBCI_LOGDOMAIN)>=GWEN_LoggerLevel_Info) AH_JobQueue_DumpJobList(jq, stderr, 2); else if (GWEN_Logger_GetLevel(AQHBCI_LOGDOMAIN)>=GWEN_LoggerLevel_Debug) AH_JobQueue_Dump(jq, stderr, 2); jl=AH_JobQueue_TakeJobList(jq); assert(jl); jqAck=_createAckQueueFromTodoList(user, jl, AH_JobQueue_GetFlags(jq)); jqTodo=_createNextQueueFromTodoList(user, jl, AH_JobQueue_GetFlags(jq), finishedJobs); AH_Job_List_free(jl); AH_JobQueue_free(jq); if (jqAck != NULL) { DBG_INFO(AQHBCI_LOGDOMAIN, "Handling ACK jobs"); rv=AH_OutboxCBox_SendAndRecvQueue(cbox, dlg, jqAck); if (rv) { _handleQueueError(cbox, jqAck, "Error performing acknowledge queue"); return rv; } /* if error during acknowledgement (jqAck freed by _handleQueueError */ AH_JobQueue_free(jqAck); } if (jqTodo==NULL) { DBG_INFO(AQHBCI_LOGDOMAIN, "No more jobs left"); break; } else { DBG_INFO(AQHBCI_LOGDOMAIN, "Handling TODO jobs"); jq=jqTodo; /* jq now contains all jobs to be executed */ /* Execute NEXT send-recv round, synchrounously. */ rv=AH_OutboxCBox_SendAndRecvQueue(cbox, dlg, jq); if (rv) { _handleQueueError(cbox, jq, "Error performing queue"); /* frees jobQueue */ return rv; } /* if error */ } } /* for */ return 0; } AH_JOBQUEUE *_createAckQueueFromTodoList(AB_USER *user, AH_JOB_LIST *jl, uint32_t jqFlags) { AH_JOB *j; AH_JOBQUEUE *jqAck; jqAck=AH_JobQueue_new(user); /* copy some flags */ jqFlags&=~(AH_JOBQUEUE_FLAGS_CRYPT | AH_JOBQUEUE_FLAGS_SIGN | AH_JOBQUEUE_FLAGS_NOSYSID | AH_JOBQUEUE_FLAGS_NOITAN); AH_JobQueue_SetFlags(jqAck, (jqFlags&AH_JOBQUEUE_FLAGS_COPYMASK)); /* insert intermediate round for possible acknowledgements */ j=AH_Job_List_First(jl); while (j) { const char *jobName; jobName=AH_Job_GetName(j); if (!(jobName && *jobName)) jobName=""; if (AH_Job_GetStatus(j)==AH_JobStatusAnswered) { /* Should we send an acknowledgement for the previously executed job? */ const void *ackCode = NULL; AH_JOB *jAck = NULL; unsigned int lenAckCode = 0; GWEN_DB_NODE *args = AH_Job_GetArguments(j); DBG_INFO(AQHBCI_LOGDOMAIN, "Job \"%s\" with status \"answered\", checking whether it needs acknowledgement", jobName); ackCode = GWEN_DB_GetBinValue(args, "_tmpAckCode", 0, 0, 0, &lenAckCode); if (ackCode != NULL && lenAckCode > 0) { jAck = AH_Job_Acknowledge_new(AH_Job_GetProvider(j), AH_Job_GetUser(j), ackCode, lenAckCode); DBG_NOTICE(AQHBCI_LOGDOMAIN, "Job \"%s\" received acknowledge code, prepare acknowledge job", jobName); if (GWEN_DB_DeleteVar(args, "_tmpAckCode")) { DBG_DEBUG(AQHBCI_LOGDOMAIN, "Temporary acknowledge code removed"); } } else { DBG_DEBUG(AQHBCI_LOGDOMAIN, "Job \"%s\" didn't receive an acknowledge code, no acknowledge job needed.", jobName); } /* Job received acknowledge code in previous response and acknowledge is allowed by BPD and user wants to acknowledge - so do it. */ if (jAck != NULL) { /* copy signers to new job */ if (AH_Job_GetFlags(j) & AH_JOB_FLAGS_SIGN) { GWEN_STRINGLISTENTRY *se; se=GWEN_StringList_FirstEntry(AH_Job_GetSigners(j)); while (se) { AH_Job_AddSigner(jAck, GWEN_StringListEntry_Data(se)); se=GWEN_StringListEntry_Next(se); } /* while */ } if (AH_JobQueue_AddJob(jqAck, jAck)!=AH_JobQueueAddResultOk) { DBG_DEBUG(AQHBCI_LOGDOMAIN, "Couldn't add ack job to todo list."); AH_Job_SetStatus(j, AH_JobStatusError); } else { AH_Job_Log(j, GWEN_LoggerLevel_Info, "Acknwoledge Job enqueued"); } } } j=AH_Job_List_Next(j); } if (AH_JobQueue_GetCount(jqAck)==0) { DBG_INFO(AQHBCI_LOGDOMAIN, "No acknwoledge jobs enqueued."); AH_JobQueue_free(jqAck); return NULL; } return jqAck; } AH_JOBQUEUE *_createNextQueueFromTodoList(AB_USER *user, AH_JOB_LIST *jl, uint32_t jqFlags, AH_JOB_LIST *finishedJobs) { AH_JOB *j; AH_JOBQUEUE *jqTodo; jqTodo=AH_JobQueue_new(user); /* copy some flags */ jqFlags&=~(AH_JOBQUEUE_FLAGS_CRYPT | AH_JOBQUEUE_FLAGS_SIGN | AH_JOBQUEUE_FLAGS_NOSYSID | AH_JOBQUEUE_FLAGS_NOITAN); AH_JobQueue_SetFlags(jqTodo, (jqFlags&AH_JOBQUEUE_FLAGS_COPYMASK)); while ((j=AH_Job_List_First(jl))) { const char *jobName; jobName=AH_Job_GetName(j); if (!(jobName && *jobName)) jobName=""; AH_Job_List_Del(j); if (AH_Job_GetStatus(j)==AH_JobStatusAnswered) { DBG_INFO(AQHBCI_LOGDOMAIN, "Job \"%s\" with status \"answered\", checking whether it needs to be re-enqueued", jobName); AB_Banking_LogMsgForJobId(AH_Job_GetBankingApi(j), AH_Job_GetId(j), "Job status \"answered\", checking for re-enqueing"); /* prepare job for next message * (if attachpoint or multi-message job) */ AH_Job_PrepareNextMessage(j); if (AH_Job_GetFlags(j) & AH_JOB_FLAGS_HASMOREMSGS) { DBG_NOTICE(AQHBCI_LOGDOMAIN, "Requeueing job \"%s\"", jobName); AB_Banking_LogMsgForJobId(AH_Job_GetBankingApi(j), AH_Job_GetId(j), "Re-enqueueing job"); /* we shall redo this job */ if (AH_JobQueue_AddJob(jqTodo, j)!=AH_JobQueueAddResultOk) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Job could not be re-added to queue, SNH!"); AH_Job_Log(j, GWEN_LoggerLevel_Error, "Could not re-enqueue job"); AB_Banking_LogMsgForJobId(AH_Job_GetBankingApi(j), AH_Job_GetId(j), "Error re-enqueueing job"); AH_Job_SetStatus(j, AH_JobStatusError); } else { AH_Job_Log(j, GWEN_LoggerLevel_Info, "Job re-enqueued (multi-message job)"); AB_Banking_LogMsgForJobId(AH_Job_GetBankingApi(j), AH_Job_GetId(j), "Job successfuly re-enqueued (multi-msg job)"); j=NULL; /* mark that this job has been dealt with */ } } /* if more messages */ else { DBG_NOTICE(AQHBCI_LOGDOMAIN, "Job \"%s\" has no messages left, not re-enqueueing", jobName); } } /* if status "answered" */ else if (AH_Job_GetStatus(j)==AH_JobStatusEnqueued) { DBG_NOTICE(AQHBCI_LOGDOMAIN, "Job \"%s\" with status \"enqueued\", trying to enqueue", jobName); AB_Banking_LogMsgForJobId(AH_Job_GetBankingApi(j), AH_Job_GetId(j), "Job status \"enqueued\", trying to enqueue"); if (AH_JobQueue_AddJob(jqTodo, j)!=AH_JobQueueAddResultOk) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Job could not be added to queue, SNH!"); AB_Banking_LogMsgForJobId(AH_Job_GetBankingApi(j), AH_Job_GetId(j), "Error enqueueing job (internal)"); AH_Job_SetStatus(j, AH_JobStatusError); AH_Job_Log(j, GWEN_LoggerLevel_Error, "Could not enqueue job"); } else { AH_Job_Log(j, GWEN_LoggerLevel_Info, "Job enqueued (2)"); AB_Banking_LogMsgForJobId(AH_Job_GetBankingApi(j), AH_Job_GetId(j), "Job successfully enqueued (2)"); j=NULL; /* mark that this job has been dealt with */ } } /* if status "enqueued" */ else { DBG_WARN(AQHBCI_LOGDOMAIN, "Job \"%s\" has unexpected status \"%s\" (%d)", jobName, AH_Job_StatusName(AH_Job_GetStatus(j)), AH_Job_GetStatus(j)); AB_Banking_LogMsgForJobId(AH_Job_GetBankingApi(j), AH_Job_GetId(j), "Job status \"%s\", unexpected", AH_Job_StatusName(AH_Job_GetStatus(j))); if (GWEN_Logger_GetLevel(0)>=GWEN_LoggerLevel_Debug) AH_Job_Dump(j, stderr, 4); } if (j) { /* move job to finished list if we still have the job */ AH_Job_List_Add(j, finishedJobs); } } /* while */ if (AH_JobQueue_GetCount(jqTodo)==0) { DBG_INFO(AQHBCI_LOGDOMAIN, "No jobs enqueued."); AH_JobQueue_free(jqTodo); return NULL; } return jqTodo; } int _performNonDialogQueues(AH_OUTBOX_CBOX *cbox, AH_JOBQUEUE_LIST *jql) { AH_DIALOG *dlg; AH_JOBQUEUE *jq; int rv=0; uint32_t jqflags; if (AH_JobQueue_List_GetCount(jql)==0) { DBG_NOTICE(AQHBCI_LOGDOMAIN, "No queues to handle, doing nothing"); AH_JobQueue_List_free(jql); return 0; } jqflags=AH_JobQueue_GetFlags(AH_JobQueue_List_First(jql)); dlg=_pndqOpenDialog(cbox, jqflags); if (dlg==NULL) { /* finish all queues */ _handleQueueListError(cbox, jql, "Could not open dialog"); return GWEN_ERROR_GENERIC; } /* handle queues */ rv=0; while ((jq=AH_JobQueue_List_First(jql))) { AH_JobQueue_List_Del(jq); rv=_performQueue(cbox, dlg, jq); /* frees jq */ if (rv) break; } /* while */ if (rv) { /* finish all remaining queues */ _handleQueueListError(cbox, jql, "Could not send "); AH_Dialog_Disconnect(dlg); AH_Dialog_free(dlg); return rv; } /* close dialog */ rv=AH_OutboxCBox_CloseDialog(cbox, dlg, jqflags); if (rv) { DBG_INFO(AQHBCI_LOGDOMAIN, "Could not close dialog, ignoring"); /*AH_HBCI_EndDialog(cbox->hbci, dlg); return rv;*/ } DBG_INFO(AQHBCI_LOGDOMAIN, "Closing connection"); AH_Dialog_Disconnect(dlg); AH_Dialog_free(dlg); AH_JobQueue_List_free(jql); return 0; } AH_DIALOG *_pndqOpenDialog(AH_OUTBOX_CBOX *cbox, uint32_t jqflags) { AB_PROVIDER *provider; AB_USER *user; int i; user=AH_OutboxCBox_GetUser(cbox); provider=AH_OutboxCBox_GetProvider(cbox); for (i=0; i<2; i++) { AH_DIALOG *dlg; int rv; dlg=AH_Dialog_new(user, provider); rv=AH_Dialog_Connect(dlg); if (rv) { DBG_INFO(AQHBCI_LOGDOMAIN, "Could not begin a dialog for customer \"%s\" (%d)", AB_User_GetCustomerId(user), rv); AH_Dialog_free(dlg); return NULL; } /* open dialog */ rv=AH_OutboxCBox_OpenDialog(cbox, dlg, jqflags); if (rv==0) { DBG_INFO(AQHBCI_LOGDOMAIN, "Dialog open."); return dlg; } else if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "Could not open dialog (%d)", rv); AH_Dialog_Disconnect(dlg); AH_Dialog_free(dlg); return NULL; } else if (rv==1) { /* TODO: Is this really needed?? I believe this was needed before when we had to try different SSL modi... */ DBG_INFO(AQHBCI_LOGDOMAIN, "Retrying to open dialog."); AH_Dialog_Disconnect(dlg); AH_Dialog_free(dlg); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Info, I18N("Retrying to open dialog")); } } DBG_INFO(AQHBCI_LOGDOMAIN, "Could not open dialog"); return NULL; } int _performDialogQueue(AH_OUTBOX_CBOX *cbox, AH_JOBQUEUE *jq) { AB_USER *user; AB_PROVIDER *provider; AH_DIALOG *dlg; int rv; uint32_t jqFlags; user=AH_OutboxCBox_GetUser(cbox); provider=AH_OutboxCBox_GetProvider(cbox); jqFlags=AH_JobQueue_GetFlags(jq); /* open connection */ dlg=AH_Dialog_new(user, provider); rv=AH_Dialog_Connect(dlg); if (rv) { DBG_INFO(AQHBCI_LOGDOMAIN, "Could not begin a dialog for customer \"%s\" (%d)", AB_User_GetCustomerId(user), rv); /* finish all queues */ _handleQueueError(cbox, jq, "Could not begin dialog"); AH_Dialog_free(dlg); return rv; } #ifdef EXTREME_DEBUGGING DBG_ERROR(AQHBCI_LOGDOMAIN, "Handling this job queue:"); AH_JobQueue_Dump(jq, stderr, 2); #endif if (AH_User_GetCryptMode(user)==AH_CryptMode_Pintan) { if (jqFlags & AH_JOBQUEUE_FLAGS_NOITAN) { DBG_NOTICE(AQHBCI_LOGDOMAIN, "Not using PSD2 code: Job queue has flag NOITAN set (using single step)."); AH_Dialog_SetItanMethod(dlg, 999); AH_Dialog_SetItanProcessType(dlg, 1); AH_Dialog_SetTanJobVersion(dlg, 0); } else { int selectedTanVersion; /* select iTAN mode */ DBG_INFO(AQHBCI_LOGDOMAIN, "Job queue doesn't have flag NOITAN"); rv=AH_OutboxCBox_SelectItanMode(cbox, dlg); if (rv) { AH_Dialog_Disconnect(dlg); AH_Dialog_free(dlg); return rv; } selectedTanVersion=AH_User_GetSelectedTanMethod(user)/1000; if (selectedTanVersion>=6) { AH_JOB *jTan; DBG_INFO(AQHBCI_LOGDOMAIN, "User-selected TAN job version is 6 or newer (%d)", selectedTanVersion); /* check for PSD2: HKTAN version >= 6 available? if so -> use that */ jTan=AH_Job_Tan_new(provider, user, 4, selectedTanVersion); if (jTan) { AH_Job_free(jTan); DBG_INFO(AQHBCI_LOGDOMAIN, "TAN job version %d is available", selectedTanVersion); DBG_NOTICE(AQHBCI_LOGDOMAIN, "Using PSD2 code for dialog job"); AH_JobQueue_AddFlags(jq, AH_JOBQUEUE_FLAGS_NEEDTAN); AH_Dialog_AddFlags(dlg, AH_DIALOG_FLAGS_SCA); } else { DBG_NOTICE(AQHBCI_LOGDOMAIN, "Not using PSD2 code: HKTAN version %d not supported by the bank", selectedTanVersion); } } else { DBG_NOTICE(AQHBCI_LOGDOMAIN, "Not using PSD2 code: User selected HKTAN version lesser than 6."); } } } /* handle queue */ rv=_performQueue(cbox, dlg, jq); if (rv) { AH_Dialog_Disconnect(dlg); AH_Dialog_free(dlg); return rv; } /* close dialog */ #if 0 if (AH_User_GetCryptMode(user)==AH_CryptMode_Pintan && (jqFlags & AH_JOBQUEUE_FLAGS_NOITAN)) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Changing dialog to anonymous mode"); AH_Dialog_AddFlags(dlg, AH_DIALOG_FLAGS_ANONYMOUS); } #endif rv=AH_OutboxCBox_CloseDialog(cbox, dlg, jqFlags); if (rv) { AH_Dialog_Disconnect(dlg); AH_Dialog_free(dlg); return rv; } /* close connection */ DBG_INFO(AQHBCI_LOGDOMAIN, "Closing connection"); AH_Dialog_Disconnect(dlg); AH_Dialog_free(dlg); return 0; } void _extractMatchingQueues(AH_JOBQUEUE_LIST *jql, AH_JOBQUEUE_LIST *jqlWanted, AH_JOBQUEUE_LIST *jqlRest, uint32_t jqflags, uint32_t jqmask) { AH_JOBQUEUE *jq; while ((jq=AH_JobQueue_List_First(jql))) { uint32_t flags; AH_JobQueue_List_Del(jq); flags=AH_JobQueue_GetFlags(jq); if ((flags^jqflags) & jqmask) /* no match */ AH_JobQueue_List_Add(jq, jqlRest); else AH_JobQueue_List_Add(jq, jqlWanted); } /* while */ } void _handleQueueListError(AH_OUTBOX_CBOX *cbox, AH_JOBQUEUE_LIST *jql, const char *logStr) { if (jql) { AH_JOBQUEUE *jq; while ((jq=AH_JobQueue_List_First(jql))) { AH_JobQueue_List_Del(jq); _handleQueueError(cbox, jq, logStr); } /* while */ AH_JobQueue_List_free(jql); } } int _sendAndRecvDialogQueues(AH_OUTBOX_CBOX *cbox) { AH_JOBQUEUE_LIST *todoQueues; AH_JOBQUEUE_LIST *jqlWanted; AH_JOBQUEUE_LIST *jqlRest; int rv; todoQueues=AH_OutboxCBox_TakeTodoQueues(cbox); jqlWanted=AH_JobQueue_List_new(); jqlRest=AH_JobQueue_List_new(); _extractMatchingQueues(todoQueues, jqlWanted, jqlRest, AH_JOBQUEUE_FLAGS_ISDIALOG, AH_JOBQUEUE_FLAGS_ISDIALOG); AH_JobQueue_List_free(todoQueues); /* is empty now */ AH_OutboxCBox_SetTodoQueues(cbox, jqlRest); todoQueues=jqlRest; if (AH_JobQueue_List_GetCount(jqlWanted)) { AH_JOBQUEUE *jq; /* there are matching queues, handle them */ while ((jq=AH_JobQueue_List_First(jqlWanted))) { AH_JobQueue_List_Del(jq); rv=_performDialogQueue(cbox, jq); if (rv) { DBG_INFO(AQHBCI_LOGDOMAIN, "Error performing queue (%d)", rv); _handleQueueListError(cbox, jqlWanted, "Could not perform dialog queue"); //_handleQueueListError(cbox, todoQueues, "Could not perform dialog queue"); //AH_OutboxCBox_SetTodoQueues(cbox, AH_JobQueue_List_new()); return rv; } } /* while */ } AH_JobQueue_List_free(jqlWanted); return 0; } int _sendAndRecvSelected(AH_OUTBOX_CBOX *cbox, uint32_t jqflags, uint32_t jqmask) { AH_JOBQUEUE_LIST *todoQueues; AH_JOBQUEUE_LIST *jqlWanted; AH_JOBQUEUE_LIST *jqlRest; int rv; todoQueues=AH_OutboxCBox_TakeTodoQueues(cbox); jqlWanted=AH_JobQueue_List_new(); jqlRest=AH_JobQueue_List_new(); _extractMatchingQueues(todoQueues, jqlWanted, jqlRest, jqflags, jqmask); AH_JobQueue_List_free(todoQueues); /* is empty now */ AH_OutboxCBox_SetTodoQueues(cbox, jqlRest); todoQueues=jqlRest; if (AH_JobQueue_List_GetCount(jqlWanted)) { /* there are matching queues, handle them */ rv=_performNonDialogQueues(cbox, jqlWanted); if (rv<0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Error performing queue (%d)", rv); //_handleQueueListError(cbox, todoQueues, "Error performing selected jobs"); //AH_OutboxCBox_SetTodoQueues(cbox, AH_JobQueue_List_new()); return rv; } } /* if matching queuees */ else AH_JobQueue_List_free(jqlWanted); return 0; } int AH_OutboxCBox_SendAndRecvQueueNoTan(AH_OUTBOX_CBOX *cbox, AH_DIALOG *dlg, AH_JOBQUEUE *jq) { int rv; rv=AH_OutboxCBox_SendQueue(cbox, dlg, jq); if (rv) { DBG_INFO(AQHBCI_LOGDOMAIN, "Error sending queue"); return rv; } AH_JobQueue_SetJobStatusOnMatch(jq, AH_JobStatusEncoded, AH_JobStatusSent); rv=AH_OutboxCBox_RecvQueue(cbox, dlg, jq); if (rv) { DBG_INFO(AQHBCI_LOGDOMAIN, "Error receiving queue response"); return rv; } return 0; } int AH_OutboxCBox_SendAndRecvQueue(AH_OUTBOX_CBOX *cbox, AH_DIALOG *dlg, AH_JOBQUEUE *jq) { int rv; if ((AH_JobQueue_GetFlags(jq) & AH_JOBQUEUE_FLAGS_NEEDTAN) && AH_Dialog_GetItanProcessType(dlg)!=0) { DBG_DEBUG(AQHBCI_LOGDOMAIN, "TAN mode"); rv=AH_OutboxCBox_SendAndReceiveQueueWithTan(cbox, dlg, jq); if (rv) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } } else { DBG_DEBUG(AQHBCI_LOGDOMAIN, "Normal mode"); rv=AH_OutboxCBox_SendAndRecvQueueNoTan(cbox, dlg, jq); if (rv) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } } return 0; } void _handleQueueError(AH_OUTBOX_CBOX *cbox, AH_JOBQUEUE *jq, const char *logStr) { AH_JOB_LIST *finishedJobs; AH_JOB *j; AH_JOB_LIST *jl; finishedJobs=AH_OutboxCBox_GetFinishedJobs(cbox); jl=AH_JobQueue_TakeJobList(jq); assert(jl); while ((j=AH_Job_List_First(jl))) { AH_Job_List_Del(j); if (AH_Job_GetStatus(j)!=AH_JobStatusAnswered) { if (logStr) { AH_Job_Log(j, GWEN_LoggerLevel_Error, logStr); AB_Banking_LogMsgForJobId(AH_Job_GetBankingApi(j), AH_Job_GetId(j), logStr); } DBG_INFO(AQHBCI_LOGDOMAIN, "Setting status of job \"%s\" to ERROR", AH_Job_GetName(j)); AH_Job_SetStatus(j, AH_JobStatusError); } AH_Job_List_Add(j, finishedJobs); } AH_Job_List_free(jl); AH_JobQueue_free(jq); } void AH_OutboxCBox_Finish(AH_OUTBOX_CBOX *cbox) { AH_JOB_LIST *finishedJobs; AH_JOBQUEUE_LIST *todoQueues; AH_JOB_LIST *todoJobs; AH_JOBQUEUE *jq; assert(cbox); finishedJobs=AH_OutboxCBox_GetFinishedJobs(cbox); todoQueues=AH_OutboxCBox_GetTodoQueues(cbox); todoJobs=AH_OutboxCBox_GetTodoJobs(cbox); DBG_INFO(AQHBCI_LOGDOMAIN, "Finishing customer box"); while ((jq=AH_JobQueue_List_First(todoQueues))) { AH_JOB_LIST *jl; AH_JOB *j; jl=AH_JobQueue_TakeJobList(jq); assert(jl); while ((j=AH_Job_List_First(jl))) { DBG_INFO(AQHBCI_LOGDOMAIN, "Moving job \"%s\" from todo queue to finished jobs", AH_Job_GetName(j)); AH_Job_List_Del(j); AH_Job_List_Add(j, finishedJobs); } /* while */ AH_Job_List_free(jl); AH_JobQueue_free(jq); } /* while */ if (AH_Job_List_GetCount(todoJobs)) { AH_JOB *j; while ((j=AH_Job_List_First(todoJobs))) { DBG_INFO(AQHBCI_LOGDOMAIN, "Moving job \"%s\" from todo queue to finished jobs", AH_Job_GetName(j)); AH_Job_List_Del(j); AH_Job_List_Add(j, finishedJobs); } /* while */ } } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/applayer/cbox_p.h0000664000175000017500000000164414044534776022067 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_OUTBOX_CBOX_P_H #define AH_OUTBOX_CBOX_P_H #include "aqhbci/joblayer/jobqueue_l.h" #include "outbox_l.h" #include "cbox_itan.h" #include #include /** Customer's outbox */ struct AH_OUTBOX_CBOX { GWEN_LIST_ELEMENT(AH_OUTBOX_CBOX); AH_OUTBOX *outbox; AB_PROVIDER *provider; AB_USER *user; AH_JOBQUEUE_LIST *todoQueues; AH_JOB_LIST *todoJobs; AH_JOB_LIST *finishedJobs; uint32_t usage; }; #endif /* AH_OUTBOX_CBOX_P_H */ aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/applayer/hhd_p.h0000664000175000017500000000210414043610745021655 00000000000000/*************************************************************************** begin : Sat Dec 10 2011 copyright : (C) 2011 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AQHBCI_HHD_P_H #define AQHBCI_HHD_P_H #include "hhd_l.h" #if 0 static int AH_HHD14_ReadBytesDec(const char *p, int len); static int AH_HHD14_ReadBytesHex(const char *p, int len); static unsigned int AH_HHD14_Quersumme(unsigned int i); static int AH_HHD14_CalcLuhnSum(const char *code, int len); static int AH_HHD14_CalcXorSum(const char *code, int len); static int AH_HHD14_ExtractDataForLuhnSum(const char *code, GWEN_BUFFER *xbuf); static void AH_HHD14_CompressCode(const uint8_t *code, GWEN_BUFFER *cbuf); static void AH_HHD14_ExtractCode(GWEN_BUFFER *cbuf); static int AH_HHD14__Translate(const char *code, GWEN_BUFFER *cbuf); #endif #endif aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/applayer/cbox.h0000664000175000017500000000313114043610745021527 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_OUTBOX_CBOX_H #define AH_OUTBOX_CBOX_H #include #include typedef struct AH_OUTBOX_CBOX AH_OUTBOX_CBOX; GWEN_LIST_FUNCTION_DEFS(AH_OUTBOX_CBOX, AH_OutboxCBox); #include "aqhbci/joblayer/jobqueue_l.h" #include "aqhbci/applayer/outbox_l.h" #include "aqhbci/applayer/cbox_itan.h" AH_OUTBOX_CBOX *AH_OutboxCBox_new(AB_PROVIDER *pro, AB_USER *u, AH_OUTBOX *ob); void AH_OutboxCBox_free(AH_OUTBOX_CBOX *cbox); void AH_OutboxCBox_AddTodoJob(AH_OUTBOX_CBOX *cbox, AH_JOB *j); AH_OUTBOX *AH_OutboxCBox_GetOutbox(const AH_OUTBOX_CBOX *cbox); AB_PROVIDER *AH_OutboxCBox_GetProvider(const AH_OUTBOX_CBOX *cbox); AB_USER *AH_OutboxCBox_GetUser(const AH_OUTBOX_CBOX *cbox); AH_JOB_LIST *AH_OutboxCBox_GetTodoJobs(const AH_OUTBOX_CBOX *cbox); AH_JOB_LIST *AH_OutboxCBox_GetFinishedJobs(const AH_OUTBOX_CBOX *cbox); AH_JOB_LIST *AH_OutboxCBox_TakeFinishedJobs(AH_OUTBOX_CBOX *cbox); AH_JOBQUEUE_LIST *AH_OutboxCBox_GetTodoQueues(const AH_OUTBOX_CBOX *cbox); AH_JOBQUEUE_LIST *AH_OutboxCBox_TakeTodoQueues(AH_OUTBOX_CBOX *cbox); void AH_OutboxCBox_SetTodoQueues(AH_OUTBOX_CBOX *cbox, AH_JOBQUEUE_LIST *nl); #endif /* AH_OUTBOX_CBOX_P_H */ aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/control/0000755000175000017500000000000015037736163020355 500000000000000aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/control/setitanmode.c0000664000175000017500000001016214043610745022750 00000000000000/*************************************************************************** begin : Tue May 03 2005 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals_l.h" #include #include "aqhbci/banking/user.h" int AH_Control_SetItanMode(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; uint32_t uid; AB_USER *u=NULL; int itanMethod; int itanMethodFunction; int rv; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Int, /* type */ "userId", /* name */ 0, /* minnum */ 1, /* maxnum */ "u", /* short option */ "user", /* long option */ "Specify the unique user id", /* short description */ "Specify the unique user id" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, GWEN_ArgsType_Int, "itanMethod", 1, 1, "m", "method", "Specify the iTAN method to use", "Specify the iTAN method to use" }, { 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(stdout, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } /* get and check params */ itanMethod=GWEN_DB_GetIntValue(db, "itanMethod", 0, -1); itanMethodFunction=itanMethod % 1000; if (itanMethodFunction<900 || itanMethodFunction>999) { fprintf(stderr, "Only methods between x900 and x999 allowed\n"); return 1; } /* doit */ uid=(uint32_t) GWEN_DB_GetIntValue(db, "userId", 0, 0); if (uid==0) { fprintf(stderr, "ERROR: Invalid or missing unique user id\n"); return 1; } rv=AB_Provider_HasUser(pro, uid); if (rv<0) { fprintf(stderr, "ERROR: User with id %lu not found\n", (unsigned long int) uid); return 2; } rv=AB_Provider_GetUser(pro, uid, 1, 0, &u); /* don't unlock to allow for AH_Provider_EndExclUseUser */ if (rv<0) { fprintf(stderr, "ERROR: User with id %lu not found\n", (unsigned long int) uid); return 2; } else { /* modify */ if (!AH_User_HasTanMethod(u, itanMethodFunction)) { fprintf(stderr, "ERROR: iTAN method not allowed for this user (try \"getitanmodes\" first)\n"); AB_Provider_EndExclUseUser(pro, u, 1); /* abort */ AB_User_free(u); return 3; } AH_User_SetSelectedTanMethod(u, itanMethod); /* unlock user */ rv=AB_Provider_EndExclUseUser(pro, u, 0); if (rv<0) { fprintf(stderr, "ERROR: Could not unlock user (%d)\n", rv); AB_Provider_EndExclUseUser(pro, u, 1); /* abort */ AB_User_free(u); return 4; } } AB_User_free(u); return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/control/globals_l.h0000664000175000017500000001471714156464025022414 00000000000000/*************************************************************************** begin : Tue May 03 2005 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AQHBCI_GLOBALS_H #define AQHBCI_GLOBALS_H #ifdef HAVE_I18N # ifdef HAVE_LOCALE_H # include # endif # ifdef HAVE_LIBINTL_H # include # endif # define I18N(msg) dgettext(PACKAGE, msg) #else # define I18N(msg) msg #endif #define I18N_NOOP(msg) msg #include "aqhbci/aqhbci.h" #include "aqhbci/banking/provider.h" #include "aqhbci/banking/provider_online.h" #include #include #include #include #include #include #include "control_l.h" int AH_Control_MkPinList(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv); int AH_Control_AddUser(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv); int AH_Control_DelUser(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv); int AH_Control_GetAccounts(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv); int AH_Control_AddAccount(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv); int AH_Control_DelAccount(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv); int AH_Control_GetSysId(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv); int AH_Control_GetKeys(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv); int AH_Control_CreateKeys(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv); int AH_Control_SendKeys(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv); int AH_Control_ChangeKeys(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv); int AH_Control_ListUsers(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv); int AH_Control_ListAccounts(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv); int AH_Control_IniLetter(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv); int AH_Control_GetItanModes(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv); int AH_Control_ListItanModes(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv); int AH_Control_SetItanMode(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv); int AH_Control_ChangePin(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv); int AH_Control_UnblockPin(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv); int AH_Control_GetCert(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv); int AH_Control_SetHbciVersion(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv); int AH_Control_AddsubUserFlags(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv, int is_add); int AH_Control_AddsubAccountFlags(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv, int is_add); int AH_Control_SetMaxTransfers(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv); int AH_Control_SetSepaProfile(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv); int AH_Control_SetTanMediumId(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv); int AH_Control_GetAccSepa(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv); int AH_Control_LogFile(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv); int AH_Control_Test1(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv); int AH_Control_GetBankInfo(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv); int AH_Control_SetTanMechanism(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv); int AH_Control_GetTargetAcc(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/control/addsubaccountflags.c0000664000175000017500000001170214043610745024271 00000000000000/*************************************************************************** begin : Tue Sep 20 2008 copyright : (C) 2008 by Patrick Prasse copyright : (C) 2018 by Martin Preuss email : patrick-oss@prasse.info *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals_l.h" #include #include "aqhbci/banking/user.h" #include "aqhbci/banking/account.h" int AH_Control_AddsubAccountFlags(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv, int is_add) { GWEN_DB_NODE *db; AB_ACCOUNT *a=NULL; int rv; uint32_t aid; GWEN_DB_NODE *vn; uint32_t flags; uint32_t bf; uint32_t c=0; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Int, /* type */ "accountId", /* name */ 0, /* minnum */ 1, /* maxnum */ "a", /* short option */ "account", /* long option */ "Specify the unique id of the account", /* short description */ "Specify the unique id of the account" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "flags", /* name */ 1, /* minnum */ 99, /* maxnum */ "f", /* short option */ "flags", /* long option */ "Specify the user flags", /* short description */ "Specify the user flags" /* 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; GWEN_DB_NODE *dbTmp; int i; 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; } dbTmp=GWEN_DB_Group_new("flagGroup"); AH_Account_Flags_toDb(dbTmp, "flags", 0xffffffff); GWEN_Buffer_AppendString(ubuf, "\nThe following flags are recognized:\n"); for (i=0; ; i++) { const char *s; s=GWEN_DB_GetCharValue(dbTmp, "flags", i, NULL); if (s==NULL) break; GWEN_Buffer_AppendString(ubuf, "- "); GWEN_Buffer_AppendString(ubuf, s); GWEN_Buffer_AppendString(ubuf, "\n"); } GWEN_DB_Group_free(dbTmp); fprintf(stdout, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } /* check aid */ aid=(uint32_t) GWEN_DB_GetIntValue(db, "accountId", 0, 0); if (aid==0) { fprintf(stderr, "ERROR: Invalid or missing unique account id\n"); return 1; } /* parse and check flags */ flags=AH_Account_Flags_fromDb(db, "flags"); for (bf=flags; bf; bf>>=1) { if (bf&1) c++; } vn=GWEN_DB_FindFirstVar(db, "flags"); if (GWEN_DB_Values_Count(vn)!=c) { fprintf(stderr, "ERROR: Specified flag(s) unknown\n"); return 4; } /* get account (lock, don't unlock, so we can later call AH_Provider_EndExclUseAccount */ rv=AB_Provider_HasAccount(pro, aid); if (rv<0) { fprintf(stderr, "ERROR: Account with id %lu not found\n", (unsigned long int) aid); return 2; } rv=AB_Provider_GetAccount(pro, aid, 1, 0, &a); if (rv<0) { fprintf(stderr, "ERROR: Account with id %lu not found\n", (unsigned long int) aid); return 2; } /* modify account */ if (is_add) { fprintf(stderr, "Adding flags: %08x\n", flags); AH_Account_AddFlags(a, flags); } else { fprintf(stderr, "Removing flags: %08x\n", flags); AH_Account_SubFlags(a, flags); } /* unlock account */ rv=AB_Provider_EndExclUseAccount(pro, a, 0); if (rv<0) { fprintf(stderr, "ERROR: Could not unlock account (%d)\n", rv); AB_Account_free(a); return 4; } AB_Account_free(a); return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/control/getaccounts.c0000664000175000017500000000626014043610745022757 00000000000000/*************************************************************************** begin : Tue May 03 2005 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals_l.h" #include int AH_Control_GetAccounts(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; uint32_t uid; AB_USER *u=NULL; int rv; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Int, /* type */ "userId", /* name */ 0, /* minnum */ 1, /* maxnum */ "u", /* short option */ "user", /* long option */ "Specify the unique user id", /* short description */ "Specify the unique user id" /* 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(stdout, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } /* doit */ uid=(uint32_t) GWEN_DB_GetIntValue(db, "userId", 0, 0); if (uid==0) { fprintf(stderr, "ERROR: Invalid or missing unique user id\n"); return 1; } rv=AB_Provider_HasUser(pro, uid); if (rv<0) { fprintf(stderr, "ERROR: User with id %lu not found\n", (unsigned long int) uid); return 2; } rv=AB_Provider_GetUser(pro, uid, 1, 1, &u); if (rv<0) { fprintf(stderr, "ERROR: User with id %lu not found\n", (unsigned long int) uid); return 2; } else { AB_IMEXPORTER_CONTEXT *ctx; ctx=AB_ImExporterContext_new(); rv=AH_Provider_GetAccounts(pro, u, ctx, 1, 0, 1); AB_ImExporterContext_free(ctx); if (rv) { DBG_ERROR_ERR(0, rv); AB_User_free(u); return 3; } } AB_User_free(u); return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/control/listitanmodes.c0000664000175000017500000001110014043610745023304 00000000000000/*************************************************************************** begin : Tue May 03 2005 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals_l.h" #include #include "aqhbci/banking/user.h" int AH_Control_ListItanModes(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; uint32_t uid; AB_USER *u=NULL; int rv; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Int, /* type */ "userId", /* name */ 0, /* minnum */ 1, /* maxnum */ "u", /* short option */ "user", /* long option */ "Specify the unique user id", /* short description */ "Specify the unique user id" /* 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(stdout, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } /* doit */ uid=(uint32_t) GWEN_DB_GetIntValue(db, "userId", 0, 0); if (uid==0) { fprintf(stderr, "ERROR: Invalid or missing unique user id\n"); return 1; } rv=AB_Provider_HasUser(pro, uid); if (rv<0) { fprintf(stderr, "ERROR: User with id %lu not found\n", (unsigned long int) uid); return 2; } rv=AB_Provider_GetUser(pro, uid, 1, 1, &u); if (rv<0) { fprintf(stderr, "ERROR: User with id %lu not found\n", (unsigned long int) uid); return 2; } else { const AH_TAN_METHOD_LIST *tl; tl=AH_User_GetTanMethodDescriptions(u); if (tl) { const AH_TAN_METHOD *tm; tm=AH_TanMethod_List_First(tl); fprintf(stdout, "TAN Methods\n"); while (tm) { const char *mid; const char *zkaName; const char *mname; int combinedVersion; combinedVersion=AH_TanMethod_GetFunction(tm)+(AH_TanMethod_GetGvVersion(tm)*1000); fprintf(stdout, "- %4d (F%3d/V%1d/P%1d)", combinedVersion, AH_TanMethod_GetFunction(tm), AH_TanMethod_GetGvVersion(tm), AH_TanMethod_GetProcess(tm)); mid=AH_TanMethod_GetMethodId(tm); mname=AH_TanMethod_GetMethodName(tm); zkaName=AH_TanMethod_GetZkaTanName(tm); if (mid && mname) { fprintf(stdout, ": %s (%s)", mid, mname); } else if (mid && !mname) { fprintf(stdout, ": %s", mid); } else if (!mid && mname) { fprintf(stdout, ": %s", mname); } else { fprintf(stdout, ": "); } if (zkaName && *zkaName) { fprintf(stdout, " ZKA-ID=%s", zkaName); } if (AH_User_HasTanMethod(u, AH_TanMethod_GetFunction(tm))) { if (AH_User_GetSelectedTanMethod(u)==combinedVersion) fprintf(stdout, " [available and selected]"); else fprintf(stdout, " [available]"); } else fprintf(stdout, " [not available]"); fprintf(stdout, "\n"); tm=AH_TanMethod_List_Next(tm); } } } AB_User_free(u); return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/control/unblockpin.c0000664000175000017500000000630514043610745022604 00000000000000/*************************************************************************** begin : Tue May 03 2005 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals_l.h" #include int AH_Control_UnblockPin(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; uint32_t uid; AB_USER *u=NULL; int rv; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Int, /* type */ "userId", /* name */ 0, /* minnum */ 1, /* maxnum */ "u", /* short option */ "user", /* long option */ "Specify the unique user id", /* short description */ "Specify the unique user id" /* 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(stdout, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } /* doit */ uid=(uint32_t) GWEN_DB_GetIntValue(db, "userId", 0, 0); if (uid==0) { fprintf(stderr, "ERROR: Invalid or missing unique user id\n"); return 1; } rv=AB_Provider_HasUser(pro, uid); if (rv<0) { fprintf(stderr, "ERROR: User with id %lu not found\n", (unsigned long int) uid); return 2; } rv=AB_Provider_GetUser(pro, uid, 1, 1, &u); if (rv<0) { fprintf(stderr, "ERROR: User with id %lu not found\n", (unsigned long int) uid); return 2; } else { AB_IMEXPORTER_CONTEXT *ctx; ctx=AB_ImExporterContext_new(); rv=AH_Provider_UnblockPin(pro, u, ctx, 1, 0, 1); AB_ImExporterContext_free(ctx); if (rv) { DBG_ERROR(0, "Error unblocking pin (%d)", rv); AB_User_free(u); return 3; } } AB_User_free(u); return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/control/test.c0000664000175000017500000001776214043610745021430 00000000000000/*************************************************************************** begin : Tue May 03 2005 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals_l.h" #include "aqhbci/banking/user.h" #include "aqhbci/banking/provider_l.h" #include "aqhbci/banking/provider_tan.h" #include #include #include #include static GWEN_DB_NODE *_readCommandLine(GWEN_DB_NODE *dbArgs, int argc, char **argv); static int _readFile(const char *fname, GWEN_BUFFER *dbuf); static const AH_TAN_METHOD *_getSelectedTanMethod(AB_USER *u, int tanMethodId); int AH_Control_Test1(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv) { int rv; GWEN_DB_NODE *db; uint32_t uid; AB_USER *u=NULL; uint32_t tanMethodId; const char *challengFile; GWEN_BUFFER *challengeBuf=NULL; db=_readCommandLine(dbArgs, argc, argv); if (db==NULL) { fprintf(stderr, "ERROR: Could not parse arguments\n"); return 1; } challengFile=GWEN_DB_GetCharValue(db, "challengeFile", 0, NULL); if (!(challengFile && *challengFile)) { fprintf(stderr, "ERROR: Missing challenge file\n"); return 1; } uid=(uint32_t) GWEN_DB_GetIntValue(db, "userId", 0, 0); if (uid==0) { fprintf(stderr, "ERROR: Invalid or missing unique user id\n"); return 1; } tanMethodId=(uint32_t) GWEN_DB_GetIntValue(db, "tanMethodId", 0, 0); if (tanMethodId==0) { fprintf(stderr, "ERROR: Invalid or missing tan method if\n"); return 1; } if (challengFile) { GWEN_BUFFER *dbuf; dbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=_readFile(challengFile, dbuf); if (rv<0) { fprintf(stderr, "ERROR: Could not read file \"%s\": %d\n", challengFile, rv); GWEN_Buffer_free(dbuf); return 2; } challengeBuf=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_Text_ToHexBuffer(GWEN_Buffer_GetStart(dbuf), GWEN_Buffer_GetUsedBytes(dbuf), challengeBuf, 0, 0, 0); if (rv<0) { fprintf(stderr, "ERROR: Could not hex encode file \"%s\": %d\n", challengFile, rv); GWEN_Buffer_free(challengeBuf); GWEN_Buffer_free(dbuf); return 2; } GWEN_Buffer_free(dbuf); } rv=AB_Provider_HasUser(pro, uid); if (rv<0) { fprintf(stderr, "ERROR: User with id %lu not found\n", (unsigned long int) uid); GWEN_Buffer_free(challengeBuf); return 2; } rv=AB_Provider_GetUser(pro, uid, 1, 1, &u); if (rv<0) { fprintf(stderr, "ERROR: User with id %lu not found\n", (unsigned long int) uid); GWEN_Buffer_free(challengeBuf); return 2; } else { const AH_TAN_METHOD *tanMethod; char tanBuffer[16]; tanMethod=_getSelectedTanMethod(u, tanMethodId); if (tanMethod==NULL) { fprintf(stderr, "ERROR: TAN method with id %lu not found\n", (unsigned long int) tanMethodId); GWEN_Buffer_free(challengeBuf); return 2; } rv=AH_Provider_InputTanWithChallenge(pro, u, tanMethod, "Could be a real challenge string but it isn't", GWEN_Buffer_GetStart(challengeBuf), tanBuffer, 1, sizeof(tanBuffer)-1); if (rv<0) { fprintf(stderr, "ERROR: Error in TAN input (%d)\n", rv); GWEN_Buffer_free(challengeBuf); return 2; } } AB_User_free(u); return 0; } GWEN_DB_NODE *_readCommandLine(GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; int rv; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Int, /* type */ "userId", /* name */ 0, /* minnum */ 1, /* maxnum */ "u", /* short option */ "user", /* long option */ "Specify the unique user id", /* short description */ "Specify the unique user id" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Int, /* type */ "tanMethodId", /* name */ 1, /* minnum */ 1, /* maxnum */ "m", /* short option */ NULL, /* long option */ "Specify the TAN method id", /* short description */ "Specify the TAN method id" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "challengeFile", /* name */ 1, /* minnum */ 1, /* maxnum */ "f", /* short option */ NULL, /* long option */ "Specify the challenge file to load", /* short */ "Specify the challenge file to load" /* long */ }, { 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 NULL; } 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 NULL; } fprintf(stdout, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return NULL; } return db; } int _readFile(const char *fname, GWEN_BUFFER *dbuf) { FILE *f; f=fopen(fname, "rb"); if (f) { while (!feof(f)) { uint32_t l; ssize_t s; char *p; GWEN_Buffer_AllocRoom(dbuf, 1024); l=GWEN_Buffer_GetMaxUnsegmentedWrite(dbuf); p=GWEN_Buffer_GetPosPointer(dbuf); s=fread(p, 1, l, f); if (s==0) break; if (s==(ssize_t)-1) { DBG_ERROR(0, "fread(%s): %s", fname, strerror(errno)); fclose(f); return GWEN_ERROR_IO; } GWEN_Buffer_IncrementPos(dbuf, s); GWEN_Buffer_AdjustUsedBytes(dbuf); } fclose(f); return 0; } else { DBG_ERROR(0, "fopen(%s): %s", fname, strerror(errno)); return GWEN_ERROR_IO; } } const AH_TAN_METHOD *_getSelectedTanMethod(AB_USER *u, int tanMethodId) { const AH_TAN_METHOD_LIST *tanMethodList; tanMethodList=AH_User_GetTanMethodDescriptions(u); if (tanMethodList) { const AH_TAN_METHOD *tanMethod; tanMethod=AH_TanMethod_List_First(tanMethodList); while (tanMethod) { int combinedVersion; combinedVersion=AH_TanMethod_GetFunction(tanMethod)+(AH_TanMethod_GetGvVersion(tanMethod)*1000); if (combinedVersion==tanMethodId) return tanMethod; tanMethod=AH_TanMethod_List_Next(tanMethod); } } return NULL; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/control/settanmechanism.c0000664000175000017500000001145414043610745023624 00000000000000/*************************************************************************** begin : Tue May 03 2005 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals_l.h" #include #include "aqhbci/banking/user.h" static int _tanMechnismFromString(const char *s); int AH_Control_SetTanMechanism(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; uint32_t uid; AB_USER *u=NULL; const char *sTanMechanism; int iTanMechanism; int rv; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Int, /* type */ "userId", /* name */ 0, /* minnum */ 1, /* maxnum */ "u", /* short option */ "user", /* long option */ "Specify the unique user id", /* short description */ "Specify the unique user id" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, GWEN_ArgsType_Char, "tanMechanism", 1, 1, "m", "mechanism", "Specify the TAN mechanism to use (auto, text, chipTanManual, chipTanOptic, chipTanUsb, chipTanQr, photoTan)", "Specify the TAN mechanism to use (auto, text, chipTanManual, chipTanOptic, chipTanUsb, chipTanQr, photoTan)" }, { 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(stdout, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } /* get and check params */ sTanMechanism=GWEN_DB_GetCharValue(db, "tanMechanism", 0, NULL); iTanMechanism=_tanMechnismFromString(sTanMechanism); if (iTanMechanism<0) { fprintf(stderr, "Invalid TAN mechanism %s\n", (sTanMechanism && sTanMechanism)?sTanMechanism:""); return 1; } /* doit */ uid=(uint32_t) GWEN_DB_GetIntValue(db, "userId", 0, 0); if (uid==0) { fprintf(stderr, "ERROR: Invalid or missing unique user id\n"); return 1; } rv=AB_Provider_HasUser(pro, uid); if (rv<0) { fprintf(stderr, "ERROR: User with id %lu not found\n", (unsigned long int) uid); return 2; } rv=AB_Provider_GetUser(pro, uid, 1, 0, &u); /* don't unlock to allow for AH_Provider_EndExclUseUser */ if (rv<0) { fprintf(stderr, "ERROR: User with id %lu not found\n", (unsigned long int) uid); return 2; } else { /* modify */ AH_User_SetSelectedTanInputMechanism(u, iTanMechanism); /* unlock user */ rv=AB_Provider_EndExclUseUser(pro, u, 0); if (rv<0) { fprintf(stderr, "ERROR: Could not unlock user (%d)\n", rv); AB_Provider_EndExclUseUser(pro, u, 1); /* abort */ AB_User_free(u); return 4; } } AB_User_free(u); return 0; } int _tanMechnismFromString(const char *s) { if (s && *s) { if (strcasecmp(s, "auto")==0) return 0; else if (strcasecmp(s, "text")==0) return AB_BANKING_TANMETHOD_TEXT; else if (strcasecmp(s, "chipTanManual")==0) return AB_BANKING_TANMETHOD_CHIPTAN; else if (strcasecmp(s, "chipTanOptic")==0) return AB_BANKING_TANMETHOD_CHIPTAN_OPTIC; else if (strcasecmp(s, "chipTanUsb")==0) return AB_BANKING_TANMETHOD_CHIPTAN_USB; else if (strcasecmp(s, "chipTanQr")==0) return AB_BANKING_TANMETHOD_CHIPTAN_QR; else if (strcasecmp(s, "photoTan")==0) return AB_BANKING_TANMETHOD_PHOTOTAN; } return -1; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/control/gettargetacc.c0000664000175000017500000000733614546575647023125 00000000000000/*************************************************************************** begin : Tue May 03 2005 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals_l.h" #include int AH_Control_GetTargetAcc(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; AB_ACCOUNT *a=NULL; int rv; uint32_t aid; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Int, /* type */ "accountId", /* name */ 0, /* minnum */ 1, /* maxnum */ "a", /* short option */ "account", /* long option */ "Specify the unique id of the account", /* short description */ "Specify the unique id of the account" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "flags", /* name */ 0, /* minnum */ 99, /* maxnum */ "f", /* short option */ "flags", /* long option */ "Specify the user flags", /* short description */ "Specify the user flags" /* 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(stdout, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } /* check aid */ aid=(uint32_t) GWEN_DB_GetIntValue(db, "accountId", 0, 0); if (aid==0) { fprintf(stderr, "ERROR: Invalid or missing unique account id\n"); return 1; } /* get account */ rv=AB_Provider_HasAccount(pro, aid); if (rv<0) { fprintf(stderr, "ERROR: Account with id %lu not found\n", (unsigned long int) aid); return 2; } rv=AB_Provider_GetAccount(pro, aid, 1, 1, &a); if (rv<0) { fprintf(stderr, "ERROR: Account with id %lu not found\n", (unsigned long int) aid); return 2; } else { AB_IMEXPORTER_CONTEXT *ctx; ctx=AB_ImExporterContext_new(); rv=AH_Provider_GetTargetAccount(pro, a, ctx, 1, 0, 1); if (rv<0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not execute outbox.\n"); AB_Account_free(a); return 4; } } AB_Account_free(a); return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/control/getaccsepa.c0000664000175000017500000000733014043610745022536 00000000000000/*************************************************************************** begin : Tue May 03 2005 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals_l.h" #include int AH_Control_GetAccSepa(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; AB_ACCOUNT *a=NULL; int rv; uint32_t aid; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Int, /* type */ "accountId", /* name */ 0, /* minnum */ 1, /* maxnum */ "a", /* short option */ "account", /* long option */ "Specify the unique id of the account", /* short description */ "Specify the unique id of the account" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "flags", /* name */ 0, /* minnum */ 99, /* maxnum */ "f", /* short option */ "flags", /* long option */ "Specify the user flags", /* short description */ "Specify the user flags" /* 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(stdout, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } /* check aid */ aid=(uint32_t) GWEN_DB_GetIntValue(db, "accountId", 0, 0); if (aid==0) { fprintf(stderr, "ERROR: Invalid or missing unique account id\n"); return 1; } /* get account */ rv=AB_Provider_HasAccount(pro, aid); if (rv<0) { fprintf(stderr, "ERROR: Account with id %lu not found\n", (unsigned long int) aid); return 2; } rv=AB_Provider_GetAccount(pro, aid, 1, 1, &a); if (rv<0) { fprintf(stderr, "ERROR: Account with id %lu not found\n", (unsigned long int) aid); return 2; } else { AB_IMEXPORTER_CONTEXT *ctx; ctx=AB_ImExporterContext_new(); rv=AH_Provider_GetAccountSepaInfo(pro, a, ctx, 1, 0, 1); if (rv<0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not execute outbox.\n"); AB_Account_free(a); return 4; } } AB_Account_free(a); return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/control/changekeys.c0000664000175000017500000000573714043610745022571 00000000000000/*************************************************************************** *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals_l.h" #include "aqhbci/banking/user.h" #include #include #include #include #include int AH_Control_ChangeKeys(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db = NULL; int res = 0; uint32_t uid = 0; AB_USER *u = NULL; // flags, type, name, minnum, maxnum, short option, long option, short description , long description const GWEN_ARGS args[] = { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, GWEN_ArgsType_Int, "userId", 1, 1, "u", "user", "user id", "user id" }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, GWEN_ArgsType_Char, "tokenType", 0, 1, "t", "tokentype", "token type", "type of new crypt token (file, card)" }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, GWEN_ArgsType_Char, "tokenName", 0, 1, "n", "tokenname", "token name", "name of new crypt token (filename, card-nr)" }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, GWEN_ArgsType_Int, "context", 0, 1, "c", "context", "token context", "context on new token" }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, GWEN_ArgsType_Char, "cryptMode", 0, 1, "m", "cryptmode", "crypt mode", "crypt mode of new token (RDH, RAH)" }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, GWEN_ArgsType_Int, "cryptType", 0, 1, "T", "crypttype", "crypt type", "crypt type of new token (1 - 10, depends on crypt mode)" }, { GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, GWEN_ArgsType_Int, "help", 0, 0, "h", "help", "Show this help screen", "Show this help screen" } }; db = GWEN_DB_GetGroup(dbArgs, GWEN_DB_FLAGS_DEFAULT, "local"); if (!db || ((res = GWEN_Args_Check(argc, argv, 1, 0, args, db)) == GWEN_ARGS_RESULT_ERROR)) { fprintf(stderr, "ERROR: Could not parse arguments\n"); return 1; } if (res == GWEN_ARGS_RESULT_HELP) { GWEN_BUFFER *b = GWEN_Buffer_new(0, 1024, 0, 1); if (GWEN_Args_Usage(args, b, GWEN_ArgsOutType_Txt)) { fprintf(stderr, "ERROR: Could not create help string\n"); return 1; } // TODO: help text default args fprintf(stdout, "%s\n", GWEN_Buffer_GetStart(b)); GWEN_Buffer_free(b); return 0; } if ((uid = (uint32_t)GWEN_DB_GetIntValue(db, "userId", 0, 0)) == 0) { fprintf(stderr, "ERROR: Invalid or missing unique user id\n"); return 1; } if ((AB_Provider_HasUser(pro, uid) < 0) || (AB_Provider_GetUser(pro, uid, 1, 1, &u) < 0) || !u) { fprintf(stderr, "ERROR: could not find user with id %ld.", (long)uid); return -1; } res = AH_Provider_ChangeUserKeys(pro, u, db, 1, 0, 0); AB_User_free(u); return res; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/control/sendkeys.c0000664000175000017500000000753114043610745022267 00000000000000/*************************************************************************** begin : Tue May 03 2005 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals_l.h" #include "aqhbci/banking/user.h" #include int AH_Control_SendKeys(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; uint32_t uid; AB_USER *u=NULL; int rv; int withAuthKey=0; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Int, /* type */ "userId", /* name */ 0, /* minnum */ 1, /* maxnum */ "u", /* short option */ "user", /* long option */ "Specify the unique user id", /* short description */ "Specify the unique user id" /* long description */ }, { 0, /* flags */ GWEN_ArgsType_Int, /* type */ "authkey", /* name */ 0, /* minnum */ 1, /* maxnum */ "A", /* short option */ "authkey", /* long option */ "Also send the authentication key", /* short description */ "Also send the authentication key" /* 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(stdout, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } withAuthKey=GWEN_DB_GetIntValue(db, "authKey", 0, 0); /* doit */ uid=(uint32_t) GWEN_DB_GetIntValue(db, "userId", 0, 0); if (uid==0) { fprintf(stderr, "ERROR: Invalid or missing unique user id\n"); return 1; } rv=AB_Provider_HasUser(pro, uid); if (rv<0) { fprintf(stderr, "ERROR: User with id %lu not found\n", (unsigned long int) uid); return 2; } rv=AB_Provider_GetUser(pro, uid, 1, 1, &u); if (rv<0) { fprintf(stderr, "ERROR: User with id %lu not found\n", (unsigned long int) uid); return 2; } else { AB_IMEXPORTER_CONTEXT *ctx; ctx=AB_ImExporterContext_new(); rv=AH_Provider_SendUserKeys2(pro, u, ctx, withAuthKey, 1, 0, 1); AB_ImExporterContext_free(ctx); if (rv<0) { DBG_ERROR(0, "Error getting system id (%d)", rv); AB_User_free(u); return 3; } fprintf(stderr, "Key(s) sent.\n"); } AB_User_free(u); return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/control/iniletter.c0000664000175000017500000001200514043610745022431 00000000000000/*************************************************************************** begin : Tue May 03 2005 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals_l.h" #include "aqhbci/banking/user.h" #include "aqhbci/banking/provider_iniletter.h" #include int AH_Control_IniLetter(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; AB_USER *u=0; uint32_t uid; int rv; int bankKey; int html; int variant; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Int, /* type */ "userId", /* name */ 0, /* minnum */ 1, /* maxnum */ "u", /* short option */ "user", /* long option */ "Specify the unique user id", /* short description */ "Specify the unique user id" /* long description */ }, { 0, /* flags */ GWEN_ArgsType_Int, /* type */ "bankKey", /* name */ 0, /* minnum */ 1, /* maxnum */ "B", /* short option */ "bankkey", /* long option */ "Show iniletter of bank keys",/* short description */ "Show iniletter of bank keys" /* long description */ }, { 0, /* flags */ GWEN_ArgsType_Int, /* type */ "html", /* name */ 0, /* minnum */ 1, /* maxnum */ NULL, /* short option */ "html", /* long option */ "HTML output",/* short description */ "HTML output" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Int, /* type */ "variant", /* name */ 0, /* minnum */ 1, /* maxnum */ 0, /* short option */ "variant", /* long option */ "Choose the variant of the iniletter (0, 1, 2)",/* short description */ "Choose the variant of the iniletter (0 for auto, 1 for RDH1, 2 for RDH2 and above)" }, { 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(stdout, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } /* get parameters */ bankKey=GWEN_DB_VariableExists(db, "bankKey"); html=GWEN_DB_VariableExists(db, "html"); variant=GWEN_DB_GetIntValue(db, "variant", 0, 0); /* do it */ uid=(uint32_t) GWEN_DB_GetIntValue(db, "userId", 0, 0); if (uid==0) { fprintf(stderr, "ERROR: Invalid or missing unique user id\n"); return 1; } rv=AB_Provider_HasUser(pro, uid); if (rv<0) { fprintf(stderr, "ERROR: User with id %lu not found\n", (unsigned long int) uid); return 2; } rv=AB_Provider_GetUser(pro, uid, 1, 1, &u); if (rv<0) { fprintf(stderr, "ERROR: User with id %lu not found\n", (unsigned long int) uid); return 2; } else { GWEN_BUFFER *lbuf; lbuf=GWEN_Buffer_new(0, 1024, 0, 1); if (html) rv=AH_Provider_GetIniLetterHtml(pro, u, bankKey, variant, lbuf, 0); else rv=AH_Provider_GetIniLetterTxt(pro, u, bankKey, variant, lbuf, 0); if (rv) { DBG_ERROR(0, "Could not create ini letter (%d)", rv); AB_User_free(u); return 3; } fprintf(stdout, "%s\n", GWEN_Buffer_GetStart(lbuf)); GWEN_Buffer_free(lbuf); } AB_User_free(u); return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/control/listusers.c0000664000175000017500000001003314043610745022466 00000000000000/*************************************************************************** begin : Tue May 03 2005 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals_l.h" #include int AH_Control_ListUsers(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; int rv; int xml=0; AB_USER_LIST *ul; AB_USER *u; int i=0; const GWEN_ARGS args[]= { { 0, /* flags */ GWEN_ArgsType_Int, /* type */ "xml", /* name */ 0, /* minnum */ 1, /* maxnum */ 0, /* short option */ "xml", /* long option */ "Export as xml", /* short description */ 0 }, { 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(stdout, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } xml=GWEN_DB_VariableExists(db, "xml"); if (xml) { fprintf(stdout, "\n"); fprintf(stdout, "\n"); } ul=AB_User_List_new(); rv=AB_Provider_ReadUsers(pro, ul); if (rv<0) { if (rv==GWEN_ERROR_NOT_FOUND) { DBG_ERROR(0, "No users found."); } else { DBG_ERROR_ERR(0, rv); } AB_User_List_free(ul); return 3; } u=AB_User_List_First(ul); while (u) { if (!xml) { fprintf(stdout, "User %d: Bank: %s/%s User Id: %s Customer Id: %s Unique Id: %lu\n", i++, AB_User_GetCountry(u), AB_User_GetBankCode(u), AB_User_GetUserId(u), AB_User_GetCustomerId(u), (unsigned long int) AB_User_GetUniqueId(u)); } else { const char *name = AB_User_GetUserName(u); fprintf(stdout, " \n"); fprintf(stdout, " %lu\n", (unsigned long int) AB_User_GetUniqueId(u)); if (!name) fprintf(stdout, " \n"); else fprintf(stdout, " \n", name); fprintf(stdout, " %s\n", AB_User_GetUserId(u)); fprintf(stdout, " %s\n", AB_User_GetCustomerId(u)); fprintf(stdout, " %s\n", AB_User_GetBankCode(u)); fprintf(stdout, " %s\n", AB_User_GetCountry(u)); fprintf(stdout, " %d\n", AB_User_GetLastSessionId(u)); fprintf(stdout, " \n\n"); } u=AB_User_List_Next(u); } AB_User_List_free(ul); if (xml) { fprintf(stdout, "\n"); } return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/control/mkpinlist.c0000664000175000017500000001172314043610745022452 00000000000000/*************************************************************************** begin : Tue May 03 2005 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals_l.h" #include "aqhbci/banking/user.h" #include #include #include int AH_Control_MkPinList(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; GWEN_SYNCIO *sio; AB_USER_LIST *ul; AB_USER *u; int rv; const char *outFile; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "outFile", /* name */ 0, /* minnum */ 1, /* maxnum */ "o", /* short option */ "outfile", /* long option */ "Specify the name of the output file", /* short description */ "Specify the name of the output file" /* 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(stdout, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } outFile=GWEN_DB_GetCharValue(db, "outfile", 0, 0); if (outFile==0) { sio=GWEN_SyncIo_File_fromStdout(); GWEN_SyncIo_AddFlags(sio, GWEN_SYNCIO_FLAGS_DONTCLOSE); } else { sio=GWEN_SyncIo_File_new(outFile, GWEN_SyncIo_File_CreationMode_CreateAlways); GWEN_SyncIo_AddFlags(sio, GWEN_SYNCIO_FILE_FLAGS_READ | GWEN_SYNCIO_FILE_FLAGS_WRITE | GWEN_SYNCIO_FILE_FLAGS_UREAD | GWEN_SYNCIO_FILE_FLAGS_UWRITE | GWEN_SYNCIO_FILE_FLAGS_GREAD | GWEN_SYNCIO_FILE_FLAGS_GWRITE); rv=GWEN_SyncIo_Connect(sio); if (rv<0) { DBG_ERROR(0, "Error opening output file: %s", strerror(errno)); return 4; } } GWEN_SyncIo_WriteLine(sio, "# This is a PIN file to be used with AqBanking"); GWEN_SyncIo_WriteLine(sio, "# Please insert the PINs/passwords for the users below"); ul=AB_User_List_new(); rv=AB_Provider_ReadUsers(pro, ul); if (rv<0) { DBG_ERROR_ERR(0, rv); AB_User_List_free(ul); GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); return 3; } u=AB_User_List_First(ul); while (u) { const char *s; GWEN_BUFFER *nbuf; int rv; GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteString(sio, "# User \""); s=AB_User_GetUserId(u); assert(s); GWEN_SyncIo_WriteString(sio, s); GWEN_SyncIo_WriteString(sio, "\" at \""); s=AB_User_GetBankCode(u); GWEN_SyncIo_WriteString(sio, s); GWEN_SyncIo_WriteLine(sio, "\""); nbuf=GWEN_Buffer_new(0, 256, 0, 1); if (AH_User_GetCryptMode(u)==AH_CryptMode_Pintan) rv=AH_User_MkPinName(u, nbuf); else rv=AH_User_MkPasswdName(u, nbuf); if (rv==0) { GWEN_BUFFER *obuf; obuf=GWEN_Buffer_new(0, 256, 0, 1); if (GWEN_Text_EscapeToBufferTolerant(GWEN_Buffer_GetStart(nbuf), obuf)) { DBG_ERROR(0, "Error escaping name to buffer"); GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); return 3; } GWEN_SyncIo_WriteString(sio, GWEN_Buffer_GetStart(obuf)); GWEN_SyncIo_WriteLine(sio, " = \"\""); GWEN_Buffer_free(obuf); } GWEN_Buffer_free(nbuf); u=AB_User_List_Next(u); } AB_User_List_free(ul); rv=GWEN_SyncIo_Disconnect(sio); if (rv<0) { DBG_ERROR_ERR(0, rv); GWEN_SyncIo_free(sio); return 4; } GWEN_SyncIo_free(sio); return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/control/adduser.c0000664000175000017500000004454414043610745022076 00000000000000/*************************************************************************** begin : Tue May 03 2005 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals_l.h" #include "aqhbci/banking/user.h" #include "aqhbci/banking/provider.h" #include #include #include #include static GWEN_DB_NODE *readCommandLine(GWEN_DB_NODE *dbArgs, int argc, char **argv); /*static int getBankUrl(AB_BANKING *ab, AH_CRYPT_MODE cryptMode, const char *bankId, GWEN_BUFFER *bufServer);*/ static int checkRdhType(int rdhType, int cryptModeRAH); static int checkHbciVersion(int hbciVersion); static int fillFromToken(AB_USER *user, const char *tokenType, const char *tokenName, uint32_t cid, int cryptModeRAH); static int fillUserDataFromContext(AB_USER *user, const GWEN_CRYPT_TOKEN_CONTEXT *ctx); static int determineCryptMode(AB_USER *user, GWEN_CRYPT_TOKEN *ct, const GWEN_CRYPT_TOKEN_CONTEXT *ctx, int cryptModeRAH); static int finishUser(AB_USER *user); int AH_Control_AddUser(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; int rv; AB_USER *user=NULL; const char *tokenName; const char *tokenType; const char *bankId; const char *userId; const char *customerId; const char *server; const char *userName; int hbciVersion; int rdhType; int cryptModeRAH=0; uint32_t cid; /* parse command line */ db=readCommandLine(dbArgs, argc, argv); if (db==NULL) { fprintf(stderr, "ERROR: Could not parse arguments\n"); return 1; } tokenType=GWEN_DB_GetCharValue(db, "tokenType", 0, 0); tokenName=GWEN_DB_GetCharValue(db, "tokenName", 0, 0); bankId=GWEN_DB_GetCharValue(db, "bankId", 0, 0); userId=GWEN_DB_GetCharValue(db, "userId", 0, 0); customerId=GWEN_DB_GetCharValue(db, "customerId", 0, 0); server=GWEN_DB_GetCharValue(db, "serverAddr", 0, 0); cid=GWEN_DB_GetIntValue(db, "context", 0, 1); hbciVersion=GWEN_DB_GetIntValue(db, "hbciVersion", 0, 0); rdhType=GWEN_DB_GetIntValue(db, "rdhType", 0, 1); cryptModeRAH=(NULL!=GWEN_DB_FindFirstVar(db, "cryptModeRAH"))?1:0; userName=GWEN_DB_GetCharValue(db, "userName", 0, 0); assert(userName); /* generic check for some arguments */ if (hbciVersion>0 && rdhType>1) { if (hbciVersion<300 && rdhType>1) { DBG_ERROR(AQHBCI_LOGDOMAIN, "RDH Types 2 and above only work with HBCI version 300 or later"); return 1; } } if (checkHbciVersion(hbciVersion)) return 1; if (checkRdhType(rdhType, cryptModeRAH)) return 1; /* create user */ user=AB_Provider_CreateUserObject(pro); assert(user); /* setup user data from input so far */ AB_User_SetUserName(user, userName); AB_User_SetCountry(user, "de"); AB_User_SetBankCode(user, bankId); AB_User_SetUserId(user, userId); AB_User_SetCustomerId(user, customerId?customerId:userId); AH_User_SetTokenType(user, tokenType); AH_User_SetTokenName(user, tokenName); AH_User_SetTokenContextId(user, cid); AH_User_SetHbciVersion(user, hbciVersion); if (rdhType>0) AH_User_SetRdhType(user, rdhType); if (server && *server) { GWEN_URL *url; url=GWEN_Url_fromString(server); if (url==NULL) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Bad URL \"%s\"", server); AB_User_free(user); return 3; } AH_User_SetServerUrl(user, url); GWEN_Url_free(url); } /* fill from CryptToken, if necessary */ if (strcasecmp(tokenType, "pintan")==0) { AH_User_SetCryptMode(user, AH_CryptMode_Pintan); } else { int rv; rv=fillFromToken(user, tokenType, tokenName, cid, cryptModeRAH); if (rv) return rv; } /* check settings for user before adding user */ rv=finishUser(user); if (rv) return rv; if (AH_User_GetCryptMode(user)==AH_CryptMode_Ddv) AH_User_SetStatus(user, AH_UserStatusEnabled); /* add user */ rv=AB_Provider_AddUser(pro, user); if (rv<0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not add new user (%d)", rv); AB_User_free(user); return 4; } /* cleanup */ AB_User_free(user); return 0; } GWEN_DB_NODE *readCommandLine(GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; int rv; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "userName", /* name */ 1, /* minnum */ 1, /* maxnum */ "N", /* short option */ "username", /* long option */ "Specify the user name", /* short description */ "Specify the user name (not the userid!)" /* long description */ }, { 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 */ "userId", /* name */ 0, /* minnum */ 1, /* maxnum */ "u", /* short option */ "user", /* long option */ "Specify the user id (Benutzerkennung)", /* short description */ "Specify the user id (Benutzerkennung)" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "customerId", /* name */ 0, /* minnum */ 1, /* maxnum */ "c", /* short option */ "customer", /* long option */ "Specify the customer id (Kundennummer)", /* short description */ "Specify the customer id (Kundennummer)" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "tokenType", /* name */ 1, /* minnum */ 1, /* maxnum */ "t", /* short option */ "tokentype", /* long option */ "Specify the crypt token type", /* short description */ "Specify the crypt token type" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "tokenName", /* name */ 0, /* minnum */ 1, /* maxnum */ "n", /* short option */ "tokenname", /* long option */ "Specify the crypt token name", /* short description */ "Specify the crypt token name" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "serverAddr", /* name */ 0, /* minnum */ 1, /* maxnum */ "s", /* short option */ "server", /* long option */ "Specify the server URL", /* short description */ "Specify the server URL" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Int, /* type */ "context", /* name */ 0, /* minnum */ 1, /* maxnum */ 0, /* short option */ "context", /* long option */ "Select a context on the medium", /* short description */ "Select a context on the medium" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, GWEN_ArgsType_Int, "hbciversion", 0, 1, 0, "hbciversion", "Select the HBCI version", "Select the HBCI protocol version" }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, GWEN_ArgsType_Int, "rdhType", 0, 1, 0, "rdhtype", "Select the RDH profile type (1, 2, 3, 5, 7, 9, 10)", "Select the RDH profile type (1, 2, 3, 5, 7, 9, 10)" }, { 0, GWEN_ArgsType_Int, "cryptModeRAH", 0, 1, 0, "cryptmoderah", "Selects RAH instead of RDH crypt mode", "Selects RAH instead of RDH crypt mode" }, { 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 NULL; } 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 NULL; } fprintf(stdout, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return NULL; } return db; } #if 0 int getBankUrl(AB_BANKING *ab, AH_CRYPT_MODE cryptMode, const char *bankId, GWEN_BUFFER *bufServer) { AB_BANKINFO *bi; bi=AB_Banking_GetBankInfo(ab, "de", 0, bankId); if (bi) { AB_BANKINFO_SERVICE_LIST *l; AB_BANKINFO_SERVICE *sv; l=AB_BankInfo_GetServices(bi); assert(l); sv=AB_BankInfoService_List_First(l); while (sv) { const char *st; st=AB_BankInfoService_GetType(sv); if (st && *st && strcasecmp(st, "hbci")==0) { const char *svm; svm=AB_BankInfoService_GetMode(sv); if (svm && *svm) { if (! ((strcasecmp(svm, "pintan")==0) ^ (cryptMode==AH_CryptMode_Pintan))) { const char *addr; addr=AB_BankInfoService_GetAddress(sv); if (addr && *addr) { GWEN_Buffer_Reset(bufServer); GWEN_Buffer_AppendString(bufServer, addr); return 0; } } } } sv=AB_BankInfoService_List_Next(sv); } AB_BankInfo_free(bi); } /* if bank info */ return -1; } #endif int checkRdhType(int rdhType, int cryptModeRAH) { if (rdhType>0) { if (cryptModeRAH) { switch (rdhType) { case 7: case 9: case 10: /* supported */ break; case 1: case 2: case 3: case 4: case 5: case 6: case 8: default: DBG_ERROR(AQHBCI_LOGDOMAIN, "RAH type %d not supported", rdhType); return 1; } } else { switch (rdhType) { case 1: case 2: case 3: case 5: case 6: case 7: case 8: case 9: case 10: /* supported */ break; case 4: default: DBG_ERROR(AQHBCI_LOGDOMAIN, "RDH type %d not supported", rdhType); return 1; } } } return 0; } int checkHbciVersion(int hbciVersion) { if (hbciVersion>0) { switch (hbciVersion) { case 201: case 210: case 220: case 300: /* supported */ break; default: DBG_ERROR(AQHBCI_LOGDOMAIN, "HBCI/FinTS version %d not supported", hbciVersion); return 1; } } return 0; } int fillFromToken(AB_USER *user, const char *tokenType, const char *tokenName, uint32_t cid, int cryptModeRAH) { GWEN_PLUGIN_MANAGER *pm; GWEN_PLUGIN *pl; GWEN_CRYPT_TOKEN *ct; const GWEN_CRYPT_TOKEN_CONTEXT *cryptTokenContext; int rv; if (cid==0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "No context given."); return 1; } /* get crypt token */ pm=GWEN_PluginManager_FindPluginManager("ct"); if (pm==0) { DBG_ERROR(0, "Plugin manager not found"); return 3; } pl=GWEN_PluginManager_GetPlugin(pm, tokenType); if (pl==0) { DBG_ERROR(0, "Plugin not found"); return 3; } DBG_INFO(0, "Plugin found"); ct=GWEN_Crypt_Token_Plugin_CreateToken(pl, tokenName); if (ct==0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not create crypt token"); return 3; } /* open crypt token */ rv=GWEN_Crypt_Token_Open(ct, 0, 0); if (rv) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not open token (%d)", rv); GWEN_Crypt_Token_free(ct); return 3; } /* get real token name */ if (AH_User_GetTokenName(user)==NULL) AH_User_SetTokenName(user, GWEN_Crypt_Token_GetTokenName(ct)); cryptTokenContext=GWEN_Crypt_Token_GetContext(ct, cid, 0); if (cryptTokenContext==NULL) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Context %02x not found", cid); GWEN_Crypt_Token_Close(ct, 1, 0); GWEN_Crypt_Token_free(ct); return 3; } rv=fillUserDataFromContext(user, cryptTokenContext); if (rv) { GWEN_Crypt_Token_Close(ct, 1, 0); GWEN_Crypt_Token_free(ct); return rv; } rv=determineCryptMode(user, ct, cryptTokenContext, cryptModeRAH); if (rv) { GWEN_Crypt_Token_Close(ct, 1, 0); GWEN_Crypt_Token_free(ct); return rv; } /* adapt RDH mode if needed */ if (GWEN_Crypt_Token_GetDevice(ct)==GWEN_Crypt_Token_Device_Card) { if (AH_User_GetCryptMode(user)==AH_CryptMode_Rdh) { int rdhType; rdhType=AH_User_GetRdhType(user); if (rdhType>1 && rdhType!=GWEN_Crypt_Token_Context_GetProtocolVersion(cryptTokenContext)) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Specified RDH version %d differs from RDH version %d on card!", rdhType, GWEN_Crypt_Token_Context_GetProtocolVersion(cryptTokenContext)); return 3; } else { AH_User_SetRdhType(user, GWEN_Crypt_Token_Context_GetProtocolVersion(cryptTokenContext)); } } /* if RDH */ } /* if card */ rv=GWEN_Crypt_Token_Close(ct, 0, 0); GWEN_Crypt_Token_free(ct); if (rv) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not close token (%d)", rv); return 3; } /* done */ return 0; } int fillUserDataFromContext(AB_USER *user, const GWEN_CRYPT_TOKEN_CONTEXT *ctx) { /* fill missing information from CryptToken */ if (AB_User_GetBankCode(user)==NULL) AB_User_SetBankCode(user, GWEN_Crypt_Token_Context_GetServiceId(ctx)); if (AB_User_GetUserId(user)==NULL) AB_User_SetUserId(user, GWEN_Crypt_Token_Context_GetUserId(ctx)); if (AB_User_GetCustomerId(user)==NULL) AB_User_SetCustomerId(user, GWEN_Crypt_Token_Context_GetCustomerId(ctx)); if (AH_User_GetServerUrl(user)==NULL) { const char *sUrl; sUrl=GWEN_Crypt_Token_Context_GetAddress(ctx); if (sUrl && *sUrl) { GWEN_URL *url; url=GWEN_Url_fromString(sUrl); if (url==NULL) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Bad URL \"%s\" on crypt token", sUrl); return 3; } AH_User_SetServerUrl(user, url); GWEN_Url_free(url); } } return 0; } int determineCryptMode(AB_USER *user, GWEN_CRYPT_TOKEN *ct, const GWEN_CRYPT_TOKEN_CONTEXT *ctx, int cryptModeRAH) { const GWEN_CRYPT_TOKEN_KEYINFO *ki; uint32_t keyId; GWEN_CRYPT_CRYPTALGOID algo; /* determine crypt mode */ keyId=GWEN_Crypt_Token_Context_GetSignKeyId(ctx); if (keyId==0) keyId=GWEN_Crypt_Token_Context_GetVerifyKeyId(ctx); if (keyId==0) keyId=GWEN_Crypt_Token_Context_GetEncipherKeyId(ctx); if (keyId==0) keyId=GWEN_Crypt_Token_Context_GetDecipherKeyId(ctx); if (keyId==0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "No keys, unable to determine crypt mode"); return 3; } ki=GWEN_Crypt_Token_GetKeyInfo(ct, keyId, 0xffffffff, 0); if (ki==NULL) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not get keyinfo for key %d, unable to determine crypt mode", keyId); return 3; } algo=GWEN_Crypt_Token_KeyInfo_GetCryptAlgoId(ki); if (algo==GWEN_Crypt_CryptAlgoId_Des3K) AH_User_SetCryptMode(user, AH_CryptMode_Ddv); else if (algo==GWEN_Crypt_CryptAlgoId_Rsa) { if (cryptModeRAH) AH_User_SetCryptMode(user, AH_CryptMode_Rah); else AH_User_SetCryptMode(user, AH_CryptMode_Rdh); } else { DBG_ERROR(AQHBCI_LOGDOMAIN, "Unexpected crypt algorithm \"%s\", unable to determine crypt mode", GWEN_Crypt_CryptAlgoId_toString(algo)); return 3; } return 0; } int finishUser(AB_USER *user) { const char *s; s=AB_User_GetUserId(user); if (!(s && *s)) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Missing user id"); return 3; } s=AB_User_GetCustomerId(user); if (!(s && *s)) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Missing customer id"); return 3; } s=AB_User_GetBankCode(user); if (!(s && *s)) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Missing bank code"); return 3; } /* setup URL */ if (AH_User_GetServerUrl(user)) { GWEN_URL *url; url=GWEN_Url_dup(AH_User_GetServerUrl(user)); if (GWEN_Url_GetProtocol(url)==NULL) { if (AH_User_GetCryptMode(user)==AH_CryptMode_Pintan) { GWEN_Url_SetProtocol(url, "https"); if (GWEN_Url_GetPort(url)==0) GWEN_Url_SetPort(url, 443); } else { GWEN_Url_SetProtocol(url, "hbci"); if (GWEN_Url_GetPort(url)==0) GWEN_Url_SetPort(url, 3000); } AH_User_SetServerUrl(user, url); } GWEN_Url_free(url); } else { DBG_ERROR(AQHBCI_LOGDOMAIN, "Missing URL"); return 3; } /* set default HBCI/FinTS version */ if (AH_User_GetHbciVersion(user)==0) AH_User_SetHbciVersion(user, 300); return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/control/createkeys.c0000664000175000017500000000610714043610745022577 00000000000000/*************************************************************************** begin : Tue May 03 2005 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals_l.h" #include "aqhbci/banking/user.h" #include int AH_Control_CreateKeys(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; uint32_t uid; AB_USER *u=NULL; int rv; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Int, /* type */ "userId", /* name */ 0, /* minnum */ 1, /* maxnum */ "u", /* short option */ "user", /* long option */ "Specify the unique user id", /* short description */ "Specify the unique user id" /* 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(stdout, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } /* doit */ uid=(uint32_t) GWEN_DB_GetIntValue(db, "userId", 0, 0); if (uid==0) { fprintf(stderr, "ERROR: Invalid or missing unique user id\n"); return 1; } rv=AB_Provider_HasUser(pro, uid); if (rv<0) { fprintf(stderr, "ERROR: User with id %lu not found\n", (unsigned long int) uid); return 2; } rv=AB_Provider_GetUser(pro, uid, 1, 1, &u); if (rv<0) { fprintf(stderr, "ERROR: User with id %lu not found\n", (unsigned long int) uid); return 2; } else { rv=AH_Provider_CreateKeys(pro, u, 0); if (rv) { DBG_ERROR(0, "Error getting system id (%d)", rv); return 3; } } return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/control/Makefile.in0000644000175000017500000007501415037736025022346 00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/libs/plugins/backends/aqhbci/control ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/distri.m4 $(top_srcdir)/m4/gwenhywfar.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/os.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libhbcicontrol_la_LIBADD = am_libhbcicontrol_la_OBJECTS = main.lo addaccount.lo \ addsubaccountflags.lo addsubuserflags.lo adduser.lo \ changepin.lo unblockpin.lo createkeys.lo delaccount.lo \ deluser.lo getaccounts.lo getaccsepa.lo getcert.lo \ getitanmodes.lo getkeys.lo getsysid.lo iniletter.lo \ listaccounts.lo listitanmodes.lo listusers.lo mkpinlist.lo \ logfile.lo sendkeys.lo changekeys.lo sethbciversion.lo \ setitanmode.lo setmaxtransfers.lo setsepaprofile.lo \ settanmediumid.lo getbankinfo.lo settanmechanism.lo \ gettargetacc.lo test.lo libhbcicontrol_la_OBJECTS = $(am_libhbcicontrol_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/addaccount.Plo \ ./$(DEPDIR)/addsubaccountflags.Plo \ ./$(DEPDIR)/addsubuserflags.Plo ./$(DEPDIR)/adduser.Plo \ ./$(DEPDIR)/changekeys.Plo ./$(DEPDIR)/changepin.Plo \ ./$(DEPDIR)/createkeys.Plo ./$(DEPDIR)/delaccount.Plo \ ./$(DEPDIR)/deluser.Plo ./$(DEPDIR)/getaccounts.Plo \ ./$(DEPDIR)/getaccsepa.Plo ./$(DEPDIR)/getbankinfo.Plo \ ./$(DEPDIR)/getcert.Plo ./$(DEPDIR)/getitanmodes.Plo \ ./$(DEPDIR)/getkeys.Plo ./$(DEPDIR)/getsysid.Plo \ ./$(DEPDIR)/gettargetacc.Plo ./$(DEPDIR)/iniletter.Plo \ ./$(DEPDIR)/listaccounts.Plo ./$(DEPDIR)/listitanmodes.Plo \ ./$(DEPDIR)/listusers.Plo ./$(DEPDIR)/logfile.Plo \ ./$(DEPDIR)/main.Plo ./$(DEPDIR)/mkpinlist.Plo \ ./$(DEPDIR)/sendkeys.Plo ./$(DEPDIR)/sethbciversion.Plo \ ./$(DEPDIR)/setitanmode.Plo ./$(DEPDIR)/setmaxtransfers.Plo \ ./$(DEPDIR)/setsepaprofile.Plo ./$(DEPDIR)/settanmechanism.Plo \ ./$(DEPDIR)/settanmediumid.Plo ./$(DEPDIR)/test.Plo \ ./$(DEPDIR)/unblockpin.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libhbcicontrol_la_SOURCES) DIST_SOURCES = $(libhbcicontrol_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac HEADERS = $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADD_ACLOCAL_FLAGS = @ADD_ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AQBANKING_CLI_VERSION_STRING = @AQBANKING_CLI_VERSION_STRING@ AQBANKING_FINTS_VERSION_STRING = @AQBANKING_FINTS_VERSION_STRING@ AQBANKING_SO_AGE = @AQBANKING_SO_AGE@ AQBANKING_SO_CURRENT = @AQBANKING_SO_CURRENT@ AQBANKING_SO_EFFECTIVE = @AQBANKING_SO_EFFECTIVE@ AQBANKING_SO_REVISION = @AQBANKING_SO_REVISION@ AQBANKING_VERSION_BUILD = @AQBANKING_VERSION_BUILD@ AQBANKING_VERSION_FULL_STRING = @AQBANKING_VERSION_FULL_STRING@ AQBANKING_VERSION_MAJOR = @AQBANKING_VERSION_MAJOR@ AQBANKING_VERSION_MINOR = @AQBANKING_VERSION_MINOR@ AQBANKING_VERSION_PATCHLEVEL = @AQBANKING_VERSION_PATCHLEVEL@ AQBANKING_VERSION_RELEASE_STRING = @AQBANKING_VERSION_RELEASE_STRING@ AQBANKING_VERSION_STRING = @AQBANKING_VERSION_STRING@ AQBANKING_VERSION_TAG = @AQBANKING_VERSION_TAG@ AQEBICS_CFLAGS = @AQEBICS_CFLAGS@ AQEBICS_LIBS = @AQEBICS_LIBS@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATETIME = @DATETIME@ DEFS = @DEFS@ -DLOCALEDIR=\"$(localedir)\" \ -DAQHBCI_PLUGINS=\"$(aqhbci_plugindir)\" \ -DXMLDATA_DIR=\"$(aqbanking_pkgdatadir)/backends/aqhbci\" DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_EXCLUDE_PATTERNS = @DOXYGEN_EXCLUDE_PATTERNS@ DOXYGEN_FILE_PATTERNS = @DOXYGEN_FILE_PATTERNS@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENGUI_GTK2_CFLAGS = @GWENGUI_GTK2_CFLAGS@ GWENGUI_GTK2_LIBS = @GWENGUI_GTK2_LIBS@ GWENHYWFAR_MINIMUM_VERSION = @GWENHYWFAR_MINIMUM_VERSION@ HAVE_GWENGUI_GTK2 = @HAVE_GWENGUI_GTK2@ HAVE_I18N = @HAVE_I18N@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIBXSLT_CFLAGS = @LIBXSLT_CFLAGS@ LIBXSLT_LIBS = @LIBXSLT_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_SUPPORTS_QT = @MSGFMT_SUPPORTS_QT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ TUTORIALS = @TUTORIALS@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XMLMERGE = @XMLMERGE@ XMLSEC_CFLAGS = @XMLSEC_CFLAGS@ XMLSEC_LIBS = @XMLSEC_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ aqbanking_backends = @aqbanking_backends@ aqbanking_cfg_searchdir = @aqbanking_cfg_searchdir@ aqbanking_data_searchdir = @aqbanking_data_searchdir@ aqbanking_headerdir = @aqbanking_headerdir@ aqbanking_headerdir_am = @aqbanking_headerdir_am@ aqbanking_includes = @aqbanking_includes@ aqbanking_internal_libs = @aqbanking_internal_libs@ aqbanking_ldflags = @aqbanking_ldflags@ aqbanking_libs = @aqbanking_libs@ aqbanking_locale_searchdir = @aqbanking_locale_searchdir@ aqbanking_modules = @aqbanking_modules@ aqbanking_pkgdatadir = @aqbanking_pkgdatadir@ aqbanking_plugin_searchdir = @aqbanking_plugin_searchdir@ aqbanking_plugindir = @aqbanking_plugindir@ aqbanking_plugins_backends_dirs = @aqbanking_plugins_backends_dirs@ aqbanking_plugins_backends_libs = @aqbanking_plugins_backends_libs@ aqbanking_plugins_bankinfo_dirs = @aqbanking_plugins_bankinfo_dirs@ aqbanking_plugins_bankinfo_libs = @aqbanking_plugins_bankinfo_libs@ aqbanking_plugins_imexporters_dirs = @aqbanking_plugins_imexporters_dirs@ aqbanking_plugins_imexporters_libs = @aqbanking_plugins_imexporters_libs@ aqbanking_plugins_parsers_dirs = @aqbanking_plugins_parsers_dirs@ aqbanking_symlinkdir = @aqbanking_symlinkdir@ aqbanking_sys_is_windows = @aqbanking_sys_is_windows@ aqbankingpp_modules = @aqbankingpp_modules@ aqebics_datadir = @aqebics_datadir@ aqebics_includes = @aqebics_includes@ aqebics_internal_libs = @aqebics_internal_libs@ aqebics_ldflags = @aqebics_ldflags@ aqebics_libs = @aqebics_libs@ aqfints_datadir = @aqfints_datadir@ aqhbci_datadir = @aqhbci_datadir@ aqhbci_includes = @aqhbci_includes@ aqhbci_internal_libs = @aqhbci_internal_libs@ aqhbci_ldflags = @aqhbci_ldflags@ aqhbci_libs = @aqhbci_libs@ aqofxconnect_includes = @aqofxconnect_includes@ aqofxconnect_internal_libs = @aqofxconnect_internal_libs@ aqofxconnect_libs = @aqofxconnect_libs@ aqpaypal_includes = @aqpaypal_includes@ aqpaypal_internal_libs = @aqpaypal_internal_libs@ aqpaypal_libs = @aqpaypal_libs@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gmp_libs = @gmp_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_dir = @gwenhywfar_dir@ gwenhywfar_has_crypt = @gwenhywfar_has_crypt@ gwenhywfar_headers = @gwenhywfar_headers@ gwenhywfar_includes = @gwenhywfar_includes@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_plugins = @gwenhywfar_plugins@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = $(datadir)/locale localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ typemaker2_exe = @typemaker2_exe@ visibility_cflags = @visibility_cflags@ with_aqebics = @with_aqebics@ with_aqhbci = @with_aqhbci@ AM_CFLAGS = -DBUILDING_AQBANKING @visibility_cflags@ AM_CPPFLAGS = -I$(top_srcdir)/src/libs -I$(top_builddir)/src/libs $(gwenhywfar_includes) \ -I$(srcdir)/../../ \ -I$(srcdir)/../msglayer -I$(srcdir)/../joblayer \ -I$(srcdir)/../applayer -I$(srcdir)/../ajobs -I$(srcdir)/.. \ -I$(srcdir)/../dialogs noinst_LTLIBRARIES = libhbcicontrol.la noinst_HEADERS = \ globals_l.h \ control_l.h iheaderdir = @aqbanking_headerdir_am@/aqhbci #iheader_HEADERS= libhbcicontrol_la_SOURCES = \ main.c \ addaccount.c \ addsubaccountflags.c \ addsubuserflags.c \ adduser.c \ changepin.c \ unblockpin.c \ createkeys.c \ delaccount.c \ deluser.c \ getaccounts.c \ getaccsepa.c \ getcert.c \ getitanmodes.c \ getkeys.c \ getsysid.c \ iniletter.c \ listaccounts.c \ listitanmodes.c \ listusers.c \ mkpinlist.c \ logfile.c \ sendkeys.c \ changekeys.c \ sethbciversion.c \ setitanmode.c \ setmaxtransfers.c \ setsepaprofile.c \ settanmediumid.c \ getbankinfo.c \ settanmechanism.c \ gettargetacc.c \ test.c all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libs/plugins/backends/aqhbci/control/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libs/plugins/backends/aqhbci/control/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libhbcicontrol.la: $(libhbcicontrol_la_OBJECTS) $(libhbcicontrol_la_DEPENDENCIES) $(EXTRA_libhbcicontrol_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libhbcicontrol_la_OBJECTS) $(libhbcicontrol_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/addaccount.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/addsubaccountflags.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/addsubuserflags.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/adduser.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/changekeys.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/changepin.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/createkeys.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/delaccount.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/deluser.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getaccounts.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getaccsepa.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getbankinfo.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getcert.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getitanmodes.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getkeys.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getsysid.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gettargetacc.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/iniletter.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/listaccounts.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/listitanmodes.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/listusers.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/logfile.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mkpinlist.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sendkeys.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sethbciversion.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/setitanmode.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/setmaxtransfers.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/setsepaprofile.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/settanmechanism.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/settanmediumid.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unblockpin.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/addaccount.Plo -rm -f ./$(DEPDIR)/addsubaccountflags.Plo -rm -f ./$(DEPDIR)/addsubuserflags.Plo -rm -f ./$(DEPDIR)/adduser.Plo -rm -f ./$(DEPDIR)/changekeys.Plo -rm -f ./$(DEPDIR)/changepin.Plo -rm -f ./$(DEPDIR)/createkeys.Plo -rm -f ./$(DEPDIR)/delaccount.Plo -rm -f ./$(DEPDIR)/deluser.Plo -rm -f ./$(DEPDIR)/getaccounts.Plo -rm -f ./$(DEPDIR)/getaccsepa.Plo -rm -f ./$(DEPDIR)/getbankinfo.Plo -rm -f ./$(DEPDIR)/getcert.Plo -rm -f ./$(DEPDIR)/getitanmodes.Plo -rm -f ./$(DEPDIR)/getkeys.Plo -rm -f ./$(DEPDIR)/getsysid.Plo -rm -f ./$(DEPDIR)/gettargetacc.Plo -rm -f ./$(DEPDIR)/iniletter.Plo -rm -f ./$(DEPDIR)/listaccounts.Plo -rm -f ./$(DEPDIR)/listitanmodes.Plo -rm -f ./$(DEPDIR)/listusers.Plo -rm -f ./$(DEPDIR)/logfile.Plo -rm -f ./$(DEPDIR)/main.Plo -rm -f ./$(DEPDIR)/mkpinlist.Plo -rm -f ./$(DEPDIR)/sendkeys.Plo -rm -f ./$(DEPDIR)/sethbciversion.Plo -rm -f ./$(DEPDIR)/setitanmode.Plo -rm -f ./$(DEPDIR)/setmaxtransfers.Plo -rm -f ./$(DEPDIR)/setsepaprofile.Plo -rm -f ./$(DEPDIR)/settanmechanism.Plo -rm -f ./$(DEPDIR)/settanmediumid.Plo -rm -f ./$(DEPDIR)/test.Plo -rm -f ./$(DEPDIR)/unblockpin.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/addaccount.Plo -rm -f ./$(DEPDIR)/addsubaccountflags.Plo -rm -f ./$(DEPDIR)/addsubuserflags.Plo -rm -f ./$(DEPDIR)/adduser.Plo -rm -f ./$(DEPDIR)/changekeys.Plo -rm -f ./$(DEPDIR)/changepin.Plo -rm -f ./$(DEPDIR)/createkeys.Plo -rm -f ./$(DEPDIR)/delaccount.Plo -rm -f ./$(DEPDIR)/deluser.Plo -rm -f ./$(DEPDIR)/getaccounts.Plo -rm -f ./$(DEPDIR)/getaccsepa.Plo -rm -f ./$(DEPDIR)/getbankinfo.Plo -rm -f ./$(DEPDIR)/getcert.Plo -rm -f ./$(DEPDIR)/getitanmodes.Plo -rm -f ./$(DEPDIR)/getkeys.Plo -rm -f ./$(DEPDIR)/getsysid.Plo -rm -f ./$(DEPDIR)/gettargetacc.Plo -rm -f ./$(DEPDIR)/iniletter.Plo -rm -f ./$(DEPDIR)/listaccounts.Plo -rm -f ./$(DEPDIR)/listitanmodes.Plo -rm -f ./$(DEPDIR)/listusers.Plo -rm -f ./$(DEPDIR)/logfile.Plo -rm -f ./$(DEPDIR)/main.Plo -rm -f ./$(DEPDIR)/mkpinlist.Plo -rm -f ./$(DEPDIR)/sendkeys.Plo -rm -f ./$(DEPDIR)/sethbciversion.Plo -rm -f ./$(DEPDIR)/setitanmode.Plo -rm -f ./$(DEPDIR)/setmaxtransfers.Plo -rm -f ./$(DEPDIR)/setsepaprofile.Plo -rm -f ./$(DEPDIR)/settanmechanism.Plo -rm -f ./$(DEPDIR)/settanmediumid.Plo -rm -f ./$(DEPDIR)/test.Plo -rm -f ./$(DEPDIR)/unblockpin.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-generic clean-libtool clean-noinstLTLIBRARIES \ cscopelist-am ctags ctags-am distclean distclean-compile \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am .PRECIOUS: Makefile #EXTRA_DIST= sources: for f in $(libhbcicontrol_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d sources; \ done typefiles: for d in $(SUBDIRS); do \ $(MAKE) -C $$d typefiles; \ done typedefs: for d in $(SUBDIRS); do \ $(MAKE) -C $$d typedefs; \ done cppcheck: for f in $(libhbcicontrol_la_SOURCES); do \ cppcheck --force $$f ; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/control/deluser.c0000664000175000017500000001013014043610745022072 00000000000000/*************************************************************************** begin : Tue Sep 20 2008 copyright : (C) 2008 by Patrick Prasse copyright : (C) 2018 by Martin Preuss email : patrick-oss@prasse.info *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals_l.h" #include "aqhbci/banking/user.h" #include #include #include #include int AH_Control_DelUser(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; AB_USER *u=NULL; uint32_t uid; int rv; uint32_t pretend = 0; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Int, /* type */ "userId", /* name */ 0, /* minnum */ 1, /* maxnum */ "u", /* short option */ "user", /* long option */ "Specify the unique user id", /* short description */ "Specify the unique user id" /* long description */ }, { 0, /* flags */ GWEN_ArgsType_Int, /* type */ "pretend", /* name */ 0, /* minnum */ 1, /* maxnum */ "p", /* short option */ "pretend", /* long option */ "Only print user, don't delete", /* short description */ "Only print user, don't delete" /* 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(stdout, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } uid=(uint32_t) GWEN_DB_GetIntValue(db, "userId", 0, 0); if (uid==0) { fprintf(stderr, "ERROR: Invalid or missing unique user id\n"); return 1; } pretend=GWEN_DB_GetIntValue(db, "pretend", 0, 0); rv=AB_Provider_HasUser(pro, uid); if (rv<0) { fprintf(stderr, "ERROR: User with id %lu not found\n", (unsigned long int) uid); return 2; } rv=AB_Provider_GetUser(pro, uid, 1, 1, &u); if (rv<0) { fprintf(stderr, "ERROR: User with id %lu not found\n", (unsigned long int) uid); return 2; } if (pretend) { fprintf(stdout, "User 0: Bank: %s/%s User Id: %s Customer Id: %s Unique Id: %lu\n", AB_User_GetCountry(u), AB_User_GetBankCode(u), AB_User_GetUserId(u), AB_User_GetCustomerId(u), (unsigned long int) AB_User_GetUniqueId(u)); } else { rv=AB_Provider_DeleteUser(pro, uid); if (rv<0) { fprintf(stderr, "ERROR: Could not delete user %lu (%d)\n", (unsigned long int) uid, rv); AB_User_free(u); return 2; } } AB_User_free(u); return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/control/getkeys.c0000664000175000017500000000624214043610745022113 00000000000000/*************************************************************************** begin : Tue May 03 2005 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals_l.h" #include int AH_Control_GetKeys(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; uint32_t uid; AB_USER *u=NULL; int rv; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Int, /* type */ "userId", /* name */ 0, /* minnum */ 1, /* maxnum */ "u", /* short option */ "user", /* long option */ "Specify the unique user id", /* short description */ "Specify the unique user id" /* 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(stdout, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } /* doit */ uid=(uint32_t) GWEN_DB_GetIntValue(db, "userId", 0, 0); if (uid==0) { fprintf(stderr, "ERROR: Invalid or missing unique user id\n"); return 1; } rv=AB_Provider_HasUser(pro, uid); if (rv<0) { fprintf(stderr, "ERROR: User with id %lu not found\n", (unsigned long int) uid); return 2; } rv=AB_Provider_GetUser(pro, uid, 1, 1, &u); if (rv<0) { fprintf(stderr, "ERROR: User with id %lu not found\n", (unsigned long int) uid); return 2; } else { AB_IMEXPORTER_CONTEXT *ctx; ctx=AB_ImExporterContext_new(); rv=AH_Provider_GetServerKeys(pro, u, ctx, 1, 0, 1); AB_ImExporterContext_free(ctx); if (rv) { DBG_ERROR_ERR(0, rv); AB_User_free(u); return 3; } } AB_User_free(u); return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/control/setsepaprofile.c0000664000175000017500000001452014043610745023463 00000000000000/*************************************************************************** begin : Tue May 03 2005 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals_l.h" #include #include "aqhbci/banking/user.h" int AH_Control_SetSepaProfile(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; uint32_t uid; AB_USER *u=NULL; int rv; const char *tProfile; const char *dProfile; GWEN_DB_NODE *profile; const char *s; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Int, /* type */ "userId", /* name */ 0, /* minnum */ 1, /* maxnum */ "u", /* short option */ "user", /* long option */ "Specify the unique user id", /* short description */ "Specify the unique user id" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "transferProfile", /* name */ 0, /* minnum */ 1, /* maxnum */ "t", /* short option */ "transfers", /* long option */ "Specify the SEPA profile for transfers", /* short description */ "Specify the SEPA profile for transfers (\"\" for default)" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "debitNoteProfile", /* name */ 0, /* minnum */ 1, /* maxnum */ "d", /* short option */ "debitnotes", /* long option */ "Specify the SEPA profile for debit notes", /* short description */ "Specify the SEPA profile for debit notes (\"\" for default)" /* 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(stdout, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } /* get and check params */ uid=(uint32_t) GWEN_DB_GetIntValue(db, "userId", 0, 0); if (uid==0) { fprintf(stderr, "ERROR: Invalid or missing unique user id\n"); return 1; } tProfile=GWEN_DB_GetCharValue(db, "transferProfile", 0, NULL); dProfile=GWEN_DB_GetCharValue(db, "debitNoteProfile", 0, NULL); if (!tProfile && !dProfile) { DBG_ERROR(0, "No action specified"); return 1; } /* doit */ if (tProfile && *tProfile) { /* check whether given profile is supported by AqBankings SEPA im-/exporter */ profile=AB_Banking_GetImExporterProfile(AB_Provider_GetBanking(pro), "sepa", tProfile); if (!profile) { DBG_ERROR(0, "Profile \"%s\" not found", tProfile); return 1; } s=GWEN_DB_GetCharValue(profile, "type", 0, ""); if (GWEN_Text_ComparePattern(s, "001.*", 1)==-1) { DBG_ERROR(0, "Profile \"%s\" is of type \"%s\" but should match \"001.*\"", tProfile, s); return 1; } } if (dProfile && *dProfile) { /* check whether given profile is supported by AqBankings SEPA im-/exporter */ profile=AB_Banking_GetImExporterProfile(AB_Provider_GetBanking(pro), "sepa", dProfile); if (!profile) { DBG_ERROR(0, "Profile \"%s\" not found", dProfile); return 1; } s=GWEN_DB_GetCharValue(profile, "type", 0, ""); if (GWEN_Text_ComparePattern(s, "008.*", 1)==-1) { DBG_ERROR(0, "Profile \"%s\" is of type \"%s\" but should match \"008.*\"", dProfile, s); return 1; } } rv=AB_Provider_HasUser(pro, uid); if (rv<0) { fprintf(stderr, "ERROR: User with id %lu not found\n", (unsigned long int) uid); return 2; } rv=AB_Provider_GetUser(pro, uid, 1, 0, &u); /* don't lock to allow for AH_Provider_EndExclUseUser */ if (rv<0) { fprintf(stderr, "ERROR: User with id %lu not found\n", (unsigned long int) uid); return 2; } else { /* modify user */ if (tProfile) { if (*tProfile) { fprintf(stderr, "Setting SEPA profile for transfers to \"%s\"\n", tProfile); } else { fprintf(stderr, "Resetting default SEPA profile for transfers\n"); tProfile=NULL; } AH_User_SetSepaTransferProfile(u, tProfile); } if (dProfile) { if (*dProfile) { fprintf(stderr, "Setting SEPA profile for debit notes to \"%s\"\n", dProfile); } else { fprintf(stderr, "Resetting default SEPA profile for debit notes\n"); dProfile=NULL; } AH_User_SetSepaDebitNoteProfile(u, dProfile); } /* unlock user */ rv=AB_Provider_EndExclUseUser(pro, u, 0); if (rv<0) { fprintf(stderr, "ERROR: Could not unlock user (%d)\n", rv); AB_Provider_EndExclUseUser(pro, u, 1); /* abort */ AB_User_free(u); return 4; } } AB_User_free(u); return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/control/settanmediumid.c0000664000175000017500000001003514043610745023447 00000000000000/*************************************************************************** begin : Thu May 06 2010 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals_l.h" #include #include "aqhbci/banking/user.h" int AH_Control_SetTanMediumId(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; uint32_t uid; AB_USER *u=NULL; int rv; const char *tanMediumId; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Int, /* type */ "userId", /* name */ 0, /* minnum */ 1, /* maxnum */ "u", /* short option */ "user", /* long option */ "Specify the unique user id", /* short description */ "Specify the unique user id" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "tanMediumId", /* name */ 1, /* minnum */ 1, /* maxnum */ "m", /* short option */ "tanmediumid", /* long option */ "Specify the TAN medium id", /* short description */ "Specify the TAN medium id" /* 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(stdout, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } /* get and check params */ uid=(uint32_t) GWEN_DB_GetIntValue(db, "userId", 0, 0); if (uid==0) { fprintf(stderr, "ERROR: Invalid or missing unique user id\n"); return 1; } tanMediumId=GWEN_DB_GetCharValue(db, "tanMediumId", 0, "none"); /* doit */ rv=AB_Provider_HasUser(pro, uid); if (rv<0) { fprintf(stderr, "ERROR: User with id %lu not found\n", (unsigned long int) uid); return 2; } rv=AB_Provider_GetUser(pro, uid, 1, 0, &u); /* don't lock to allow for AH_Provider_EndExclUseUser */ if (rv<0) { fprintf(stderr, "ERROR: User with id %lu not found\n", (unsigned long int) uid); return 2; } else { /* modify */ if (strcasecmp(tanMediumId, "none")==0) AH_User_SetTanMediumId(u, NULL); else AH_User_SetTanMediumId(u, tanMediumId); /* unlock user */ rv=AB_Provider_EndExclUseUser(pro, u, 0); if (rv<0) { fprintf(stderr, "ERROR: Could not unlock user (%d)\n", rv); AB_Provider_EndExclUseUser(pro, u, 1); /* abort */ AB_User_free(u); return 4; } } AB_User_free(u); return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/control/setmaxtransfers.c0000664000175000017500000001161314043610745023667 00000000000000/*************************************************************************** begin : Tue May 03 2005 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals_l.h" #include #include "aqhbci/banking/user.h" int AH_Control_SetMaxTransfers(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; uint32_t uid; AB_USER *u=NULL; int rv; int maxTransfers; int maxDebitNotes; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Int, /* type */ "userId", /* name */ 0, /* minnum */ 1, /* maxnum */ "u", /* short option */ "user", /* long option */ "Specify the unique user id", /* short description */ "Specify the unique user id" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Int, /* type */ "maxTransfers", /* name */ 0, /* minnum */ 1, /* maxnum */ "t", /* short option */ "transfers", /* long option */ "Specify the maximum number of transfers per job", /* short description */ "Specify the maximum number of transfers per job" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Int, /* type */ "maxDebitNotes", /* name */ 0, /* minnum */ 1, /* maxnum */ "d", /* short option */ "debitnotes", /* long option */ "Specify the maximum number of debit notes per job", /* short description */ "Specify the maximum number of debit notes per job" /* 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(stdout, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } /* get and check params */ maxTransfers=GWEN_DB_GetIntValue(db, "maxTransfers", 0, -1); maxDebitNotes=GWEN_DB_GetIntValue(db, "maxDebitNotes", 0, -1); /* doit */ uid=(uint32_t) GWEN_DB_GetIntValue(db, "userId", 0, 0); if (uid==0) { fprintf(stderr, "ERROR: Invalid or missing unique user id\n"); return 1; } rv=AB_Provider_HasUser(pro, uid); if (rv<0) { fprintf(stderr, "ERROR: User with id %lu not found\n", (unsigned long int) uid); return 2; } rv=AB_Provider_GetUser(pro, uid, 1, 0, &u); /* don't lock to allow for AH_Provider_EndExclUseUser */ if (rv<0) { fprintf(stderr, "ERROR: User with id %lu not found\n", (unsigned long int) uid); return 2; } else { /* modify */ if (maxTransfers>0) { fprintf(stderr, "Setting maximum number of transfers per job to %d\n", maxTransfers); AH_User_SetMaxTransfersPerJob(u, maxTransfers); } if (maxDebitNotes>0) { fprintf(stderr, "Setting maximum number of debit notes per job to %d\n", maxDebitNotes); AH_User_SetMaxDebitNotesPerJob(u, maxDebitNotes); } /* unlock user */ rv=AB_Provider_EndExclUseUser(pro, u, 0); if (rv<0) { fprintf(stderr, "ERROR: Could not unlock user (%d)\n", rv); AB_Provider_EndExclUseUser(pro, u, 1); /* abort */ AB_User_free(u); return 4; } } AB_User_free(u); return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/control/delaccount.c0000664000175000017500000001020714043610745022555 00000000000000/*************************************************************************** begin : Thu Nov 06 2008 copyright : (C) 2008 by Patrick Prasse copyright : (C) 2018 by Martin Preuss email : patrick-oss@prasse.info *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals_l.h" #include "aqhbci/banking/user.h" #include #include #include #include int AH_Control_DelAccount(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; AB_ACCOUNT *a=NULL; int rv; uint32_t aid; uint32_t pretend=0; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Int, /* type */ "accountId", /* name */ 0, /* minnum */ 1, /* maxnum */ "a", /* short option */ "account", /* long option */ "Specify the unique id of the account", /* short description */ "Specify the unique id of the account" /* long description */ }, { 0, /* flags */ GWEN_ArgsType_Int, /* type */ "pretend", /* name */ 0, /* minnum */ 1, /* maxnum */ "p", /* short option */ "pretend", /* long option */ "Only print account, don't delete", /* short description */ "Only print account, don't delete" /* 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(stdout, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } /* check aid */ aid=(uint32_t) GWEN_DB_GetIntValue(db, "accountId", 0, 0); if (aid==0) { fprintf(stderr, "ERROR: Invalid or missing unique account id\n"); return 1; } pretend=GWEN_DB_GetIntValue(db, "pretend", 0, 0); rv=AB_Provider_HasAccount(pro, aid); if (rv<0) { fprintf(stderr, "ERROR: Account with id %lu not found\n", (unsigned long int) aid); return 2; } rv=AB_Provider_GetAccount(pro, aid, 1, 1, &a); if (rv<0) { fprintf(stderr, "ERROR: Account with id %lu not found\n", (unsigned long int) aid); return 2; } if (pretend) { fprintf(stdout, "Account 0:\tUniqueId: %d\t\tAccount Number: %s\tBank: %s/%s\n", AB_Account_GetUniqueId(a), AB_Account_GetAccountNumber(a), AB_Account_GetCountry(a), AB_Account_GetBankCode(a) ); } else { /* delete account */ rv=AB_Provider_DeleteAccount(pro, aid); if (rv<0) { fprintf(stderr, "ERROR: Could not delete account (%d)\n", rv); AB_Account_free(a); return 4; } } AB_Account_free(a); return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/control/logfile.c0000664000175000017500000004041714043610745022063 00000000000000/*************************************************************************** begin : Mon May 30 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals_l.h" #include "aqhbci/banking/user.h" #include "aqhbci/msglayer/msgengine.h" #include #include #include static int _readLogFile(const char *fname, GWEN_DB_NODE *db) { GWEN_SYNCIO *sio; GWEN_FAST_BUFFER *fb; int rv; GWEN_BUFFER *tbuf = NULL; int msgNum=0; 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_ERROR(AQHBCI_LOGDOMAIN, "Error opening file [%s] (%d)", fname, rv); return rv; } /* create fast buffer around io layer */ fb=GWEN_FastBuffer_new(1024, sio); for (;;) { GWEN_DB_NODE *dbMsg; GWEN_DB_NODE *dbHeader; unsigned int size; DBG_INFO(AQHBCI_LOGDOMAIN, "Reading message %d", msgNum); /* read header */ dbMsg=GWEN_DB_Group_new("Message"); dbHeader=GWEN_DB_GetGroup(dbMsg, GWEN_DB_FLAGS_DEFAULT, "header"); rv=GWEN_DB_ReadFromFastBuffer(dbHeader, fb, GWEN_DB_FLAGS_HTTP | GWEN_DB_FLAGS_UNTIL_EMPTY_LINE); if (rv<0) { if (rv==GWEN_ERROR_EOF) break; else { GWEN_DB_Group_free(dbMsg); GWEN_FastBuffer_free(fb); GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); DBG_ERROR(AQHBCI_LOGDOMAIN, "Error reading header %d from file [%s] (%d)", msgNum, fname, rv); GWEN_DB_Dump(db, 2); return rv; } } /* read body */ size=GWEN_DB_GetIntValue(dbHeader, "size", 0, 0); tbuf=GWEN_Buffer_new(0, 2048, 0, 1); while (size) { unsigned int lsize; uint8_t buffer[1024]; lsize=size; if (lsize>sizeof(buffer)) lsize=sizeof(buffer); GWEN_FASTBUFFER_READFORCED(fb, rv, buffer, lsize); if (rv<0) { GWEN_DB_Group_free(dbMsg); GWEN_FastBuffer_free(fb); GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); DBG_ERROR(AQHBCI_LOGDOMAIN, "Error reading body %d from file [%s] (%d)", msgNum, fname, rv); return rv; } GWEN_Buffer_AppendBytes(tbuf, (const char *)buffer, lsize); size-=lsize; } // while GWEN_DB_SetBinValue(dbMsg, GWEN_DB_FLAGS_OVERWRITE_VARS, "body", GWEN_Buffer_GetStart(tbuf), GWEN_Buffer_GetUsedBytes(tbuf)); GWEN_Buffer_Reset(tbuf); GWEN_DB_AddGroup(db, dbMsg); msgNum++; } GWEN_Buffer_free(tbuf); GWEN_FastBuffer_free(fb); GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); DBG_INFO(AQHBCI_LOGDOMAIN, "%d message(s) read", msgNum); return 0; } static int dumpMsg(GWEN_SYNCIO *sio, GWEN_DB_NODE *hd, const uint8_t *p, uint32_t len) { int rv; rv=GWEN_DB_WriteToIo(hd, sio, GWEN_DB_FLAGS_WRITE_SUBGROUPS | GWEN_DB_FLAGS_DETAILED_GROUPS | GWEN_DB_FLAGS_USE_COLON| GWEN_DB_FLAGS_OMIT_TYPES); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } /* append empty line to separate header from data */ rv=GWEN_SyncIo_WriteForced(sio, (const uint8_t *) "\n", 1); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } /* write data */ if (p && len) { rv=GWEN_SyncIo_WriteForced(sio, p, len); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } } /* append CR for better readability */ rv=GWEN_SyncIo_WriteForced(sio, (const uint8_t *) "\n", 1); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } return 0; } int AH_Control_LogFile(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv) { int rv; GWEN_DB_NODE *db; GWEN_DB_NODE *dbMessages; const char *s; GWEN_MSGENGINE *e; GWEN_SYNCIO *sioOut=NULL; GWEN_SYNCIO *sioDb=NULL; const char *inFile; const char *outFile; const char *dbOutFile; int i; GWEN_DB_NODE *dbT; int trustLevel; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "xmlfile", /* name */ 0, /* minnum */ 99, /* maxnum */ "x", /* short option */ "xmlfile", /* long option */ "Specify XML files to load", /* short description */ "Specify XML files to load" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "infile", /* name */ 1, /* minnum */ 1, /* maxnum */ "i", /* short option */ "infile", /* long option */ "Specify input file", /* short description */ "Specify input file" /* 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 output file", /* short description */ "Specify output file" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "dboutfile", /* name */ 0, /* minnum */ 1, /* maxnum */ "d", /* short option */ "dbfile", /* long option */ "Specify DB output file", /* short description */ "Specify DB output file" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Int, /* type */ "trustLevel", /* name */ 0, /* minnum */ 1, /* maxnum */ "L", /* short option */ "trustlevel", /* long option */ "Specify the trust level", /* short description */ "Specify the trust level" /* 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(stdout, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } trustLevel=GWEN_DB_GetIntValue(db, "trustLevel", 0, 0); outFile=GWEN_DB_GetCharValue(db, "outFile", 0, NULL); dbOutFile=GWEN_DB_GetCharValue(db, "dbOutFile", 0, NULL); inFile=GWEN_DB_GetCharValue(db, "inFile", 0, NULL); assert(inFile); /* do it */ dbMessages=GWEN_DB_Group_new("Messages"); rv=_readLogFile(inFile, dbMessages); if (rv<0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Error reading message (%d)", rv); return 2; } /* create message engine, read XML definitions */ e=AH_MsgEngine_new(); for (i=0; i<99; i++) { s=GWEN_DB_GetCharValue(dbArgs, "xmlfile", i, NULL); if (s && *s) { GWEN_XMLNODE *defs; defs=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "defs"); if (GWEN_XML_ReadFile(defs, s, GWEN_XML_FLAGS_DEFAULT)) { fprintf(stderr, "Error parsing.\n"); GWEN_MsgEngine_free(e); return 2; } GWEN_MsgEngine_AddDefinitions(e, defs); GWEN_XMLNode_free(defs); } else { if (i==0) { GWEN_XMLNODE *defs; defs=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "defs"); if (GWEN_XML_ReadFile(defs, XMLDATA_DIR "/hbci.xml", GWEN_XML_FLAGS_DEFAULT)) { fprintf(stderr, "Error parsing.\n"); GWEN_MsgEngine_free(e); return 2; } GWEN_MsgEngine_AddDefinitions(e, defs); GWEN_XMLNode_free(defs); } break; } } if (outFile) { sioOut=GWEN_SyncIo_File_new(outFile, GWEN_SyncIo_File_CreationMode_CreateAlways); GWEN_SyncIo_AddFlags(sioOut, GWEN_SYNCIO_FILE_FLAGS_READ | GWEN_SYNCIO_FILE_FLAGS_WRITE | GWEN_SYNCIO_FILE_FLAGS_UREAD | GWEN_SYNCIO_FILE_FLAGS_UWRITE | GWEN_SYNCIO_FILE_FLAGS_APPEND); rv=GWEN_SyncIo_Connect(sioOut); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_SyncIo_free(sioOut); return 2; } } if (dbOutFile) { sioDb=GWEN_SyncIo_File_new(dbOutFile, GWEN_SyncIo_File_CreationMode_CreateAlways); GWEN_SyncIo_AddFlags(sioDb, GWEN_SYNCIO_FILE_FLAGS_READ | GWEN_SYNCIO_FILE_FLAGS_WRITE | GWEN_SYNCIO_FILE_FLAGS_UREAD | GWEN_SYNCIO_FILE_FLAGS_UWRITE | GWEN_SYNCIO_FILE_FLAGS_APPEND); rv=GWEN_SyncIo_Connect(sioDb); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_SyncIo_free(sioDb); return 2; } } dbT=GWEN_DB_GetFirstGroup(dbMessages); while (dbT) { const uint8_t *p; uint32_t len; GWEN_DB_NODE *dbHeader; dbHeader=GWEN_DB_GetGroup(dbT, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "header"); assert(dbHeader); s=GWEN_DB_GetCharValue(dbHeader, "mode", 0, "PINTAN"); GWEN_MsgEngine_SetMode(e, s); i=GWEN_DB_GetIntValue(dbHeader, "hbciVersion", 0, 220); GWEN_MsgEngine_SetProtocolVersion(e, i); p=GWEN_DB_GetBinValue(dbT, "body", 0, NULL, 0, &len); if (p && len) { GWEN_BUFFER *tbuf; GWEN_DB_NODE *gr; GWEN_MSGENGINE_TRUSTEDDATA *trustedData; GWEN_MSGENGINE_TRUSTEDDATA *ntd; GWEN_DB_NODE *repl; gr=GWEN_DB_Group_new("message"); tbuf=GWEN_Buffer_new((char *) p, len, len, 0); rv=GWEN_MsgEngine_ReadMessage(e, "SEG", tbuf, gr, GWEN_MSGENGINE_READ_FLAGS_TRUSTINFO); if (rv) { fprintf(stderr, "ERROR.\n"); GWEN_Buffer_Dump(tbuf, 2); return 2; } /* work on trust data */ trustedData=GWEN_MsgEngine_TakeTrustInfo(e); if (trustedData) { if (GWEN_MsgEngine_TrustedData_CreateReplacements(trustedData)) { fprintf(stderr, "Could not anonymize log (createReplacements)\n"); GWEN_MsgEngine_TrustedData_free(trustedData); GWEN_MsgEngine_free(e); return 2; } } /* anonymize file */ ntd=trustedData; repl=GWEN_DB_GetGroup(dbHeader, GWEN_DB_FLAGS_OVERWRITE_GROUPS, "replacements"); assert(repl); while (ntd) { if (GWEN_MsgEngine_TrustedData_GetTrustLevel(ntd)>trustLevel) { int pos; unsigned int size; char rbuffer[3]; const char *rpstr; rpstr=GWEN_MsgEngine_TrustedData_GetReplacement(ntd); assert(rpstr); assert(*rpstr); size=strlen(rpstr); if (size==1) { rbuffer[0]=rpstr[0]; rbuffer[1]=0; } else { rbuffer[0]=rpstr[0]; rbuffer[1]=rpstr[1]; rbuffer[2]=0; } GWEN_DB_SetCharValue(repl, GWEN_DB_FLAGS_DEFAULT | GWEN_PATH_FLAGS_CREATE_VAR, rbuffer, GWEN_MsgEngine_TrustedData_GetDescription(ntd)); size=GWEN_MsgEngine_TrustedData_GetSize(ntd); pos=GWEN_MsgEngine_TrustedData_GetFirstPos(ntd); while (pos>=0) { DBG_INFO(AQHBCI_LOGDOMAIN, "Replacing %d bytes at %d", size, pos); GWEN_Buffer_SetPos(tbuf, pos); GWEN_Buffer_ReplaceBytes(tbuf, size, GWEN_MsgEngine_TrustedData_GetReplacement(ntd), size); pos=GWEN_MsgEngine_TrustedData_GetNextPos(ntd); } // while pos } ntd=GWEN_MsgEngine_TrustedData_GetNext(ntd); } // while ntd GWEN_DB_SetIntValue(dbHeader, GWEN_DB_FLAGS_OVERWRITE_VARS, "size", GWEN_Buffer_GetUsedBytes(tbuf)); if (outFile) { rv=dumpMsg(sioOut, dbHeader, (const uint8_t *)GWEN_Buffer_GetStart(tbuf), GWEN_Buffer_GetUsedBytes(tbuf)); if (rv<0) { fprintf(stderr, "Could not anonymize log (dumpMsg)\n"); GWEN_MsgEngine_TrustedData_free(trustedData); GWEN_MsgEngine_free(e); return 2; } } if (dbOutFile) { GWEN_BUFFER *xbuf; GWEN_DB_NODE *dbOut; xbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(xbuf, "# ========== Message ( "); s=GWEN_DB_GetCharValue(dbHeader, "sender", 0, "UNK"); if (s && *s) { GWEN_Buffer_AppendString(xbuf, "sender="); GWEN_Buffer_AppendString(xbuf, s); GWEN_Buffer_AppendString(xbuf, " "); } s=GWEN_DB_GetCharValue(dbHeader, "crypt", 0, "UNK"); if (s && *s) { GWEN_Buffer_AppendString(xbuf, "crypt="); GWEN_Buffer_AppendString(xbuf, s); GWEN_Buffer_AppendString(xbuf, " "); } GWEN_Buffer_AppendString(xbuf, ") ==========\n"); dbOut=GWEN_DB_Group_new("Message"); GWEN_Buffer_Rewind(tbuf); rv=GWEN_MsgEngine_ReadMessage(e, "SEG", tbuf, dbOut, 0); if (rv) { fprintf(stderr, "ERROR.\n"); GWEN_Buffer_Dump(tbuf, 2); return 2; } rv=GWEN_SyncIo_WriteForced(sioDb, (const uint8_t *) GWEN_Buffer_GetStart(xbuf), GWEN_Buffer_GetUsedBytes(xbuf)); GWEN_Buffer_free(xbuf); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } rv=GWEN_DB_WriteToIo(dbOut, sioDb, GWEN_DB_FLAGS_DEFAULT); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); return 2; } /* append empty line to separate header from data */ rv=GWEN_SyncIo_WriteForced(sioDb, (const uint8_t *) "\n", 1); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } } GWEN_Buffer_free(tbuf); } dbT=GWEN_DB_GetNextGroup(dbT); } /* close output layer */ if (outFile) { rv=GWEN_SyncIo_Disconnect(sioOut); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); GWEN_SyncIo_free(sioOut); return 2; } GWEN_SyncIo_free(sioOut); } if (dbOutFile) { rv=GWEN_SyncIo_Disconnect(sioDb); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); GWEN_SyncIo_free(sioDb); return 2; } GWEN_SyncIo_free(sioDb); } return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/control/control_l.h0000664000175000017500000000104314043610745022432 00000000000000/*************************************************************************** begin : Wed Dec 05 2018 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AQHBCI_CONTROL_BE_H #define AQHBCI_CONTROL_BE_H int AH_Control(AB_PROVIDER *pro, int argc, char **argv); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/control/changepin.c0000664000175000017500000000630314043610745022372 00000000000000/*************************************************************************** begin : Tue May 03 2005 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals_l.h" #include int AH_Control_ChangePin(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; uint32_t uid; AB_USER *u=NULL; int rv; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Int, /* type */ "userId", /* name */ 0, /* minnum */ 1, /* maxnum */ "u", /* short option */ "user", /* long option */ "Specify the unique user id", /* short description */ "Specify the unique user id" /* 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(stdout, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } /* doit */ uid=(uint32_t) GWEN_DB_GetIntValue(db, "userId", 0, 0); if (uid==0) { fprintf(stderr, "ERROR: Invalid or missing unique user id\n"); return 1; } rv=AB_Provider_HasUser(pro, uid); if (rv<0) { fprintf(stderr, "ERROR: User with id %lu not found\n", (unsigned long int) uid); return 2; } rv=AB_Provider_GetUser(pro, uid, 1, 1, &u); if (rv<0) { fprintf(stderr, "ERROR: User with id %lu not found\n", (unsigned long int) uid); return 2; } else { AB_IMEXPORTER_CONTEXT *ctx; ctx=AB_ImExporterContext_new(); rv=AH_Provider_ChangePin(pro, u, ctx, 1, 0, 1); AB_ImExporterContext_free(ctx); if (rv) { DBG_ERROR(0, "Error getting system id (%d)", rv); AB_User_free(u); return 3; } } AB_User_free(u); return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/control/getbankinfo.c0000664000175000017500000000735214043610745022732 00000000000000/*************************************************************************** begin : Tue May 03 2005 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals_l.h" #include int AH_Control_GetBankInfo(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; uint32_t uid; AB_USER *u=NULL; int withTanSeg=0; int rv; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Int, /* type */ "userId", /* name */ 0, /* minnum */ 1, /* maxnum */ "u", /* short option */ "user", /* long option */ "Specify the unique user id", /* short description */ "Specify the unique user id" /* long description */ }, { 0, /* flags */ GWEN_ArgsType_Int, /* type */ "withTanSeg", /* name */ 0, /* minnum */ 1, /* maxnum */ "t", /* short option */ "withTanSeg", /* long option */ "include TAN segment (needed for PSD2)", /* short description */ "include TAN segment (needed for PSD2)" /* 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(stdout, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } /* doit */ uid=(uint32_t) GWEN_DB_GetIntValue(db, "userId", 0, 0); if (uid==0) { fprintf(stderr, "ERROR: Invalid or missing unique user id\n"); return 1; } withTanSeg=GWEN_DB_GetIntValue(db, "withTanSeg", 0, 0); rv=AB_Provider_HasUser(pro, uid); if (rv<0) { fprintf(stderr, "ERROR: User with id %lu not found\n", (unsigned long int) uid); return 2; } rv=AB_Provider_GetUser(pro, uid, 1, 1, &u); if (rv<0) { fprintf(stderr, "ERROR: User with id %lu not found\n", (unsigned long int) uid); return 2; } else { AB_IMEXPORTER_CONTEXT *ctx; ctx=AB_ImExporterContext_new(); rv=AH_Provider_GetBankInfo(pro, u, ctx, withTanSeg, 1, 0, 1); AB_ImExporterContext_free(ctx); if (rv) { DBG_ERROR_ERR(0, rv); AB_User_free(u); return 3; } } AB_User_free(u); return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/control/getsysid.c0000664000175000017500000000654114043610745022275 00000000000000/*************************************************************************** begin : Tue May 03 2005 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals_l.h" #include "aqhbci/banking/user.h" #include int AH_Control_GetSysId(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; AB_USER *u=NULL; uint32_t uid; int rv; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Int, /* type */ "userId", /* name */ 0, /* minnum */ 1, /* maxnum */ "u", /* short option */ "user", /* long option */ "Specify the unique user id", /* short description */ "Specify the unique user id" /* 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(stdout, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } uid=(uint32_t) GWEN_DB_GetIntValue(db, "userId", 0, 0); if (uid==0) { fprintf(stderr, "ERROR: Invalid or missing unique user id\n"); return 1; } rv=AB_Provider_HasUser(pro, uid); if (rv<0) { fprintf(stderr, "ERROR: User with id %lu not found\n", (unsigned long int) uid); return 2; } rv=AB_Provider_GetUser(pro, uid, 1, 1, &u); if (rv<0) { fprintf(stderr, "ERROR: User with id %lu not found\n", (unsigned long int) uid); return 2; } else { AB_IMEXPORTER_CONTEXT *ctx; if (AH_User_GetCryptMode(u)==AH_CryptMode_Pintan) { rv=AH_Provider_GetCert(pro, u, 1, 0, 1); if (rv<0) { DBG_ERROR(0, "Error getting certificate (%d)", rv); return 3; } } ctx=AB_ImExporterContext_new(); rv=AH_Provider_GetSysId(pro, u, ctx, 1, 0, 1); AB_ImExporterContext_free(ctx); if (rv) { DBG_ERROR_ERR(0, rv); return 3; } } return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/control/getitanmodes.c0000664000175000017500000000626614043610745023131 00000000000000/*************************************************************************** begin : Tue May 03 2005 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals_l.h" #include int AH_Control_GetItanModes(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; uint32_t uid; AB_USER *u=NULL; int rv; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Int, /* type */ "userId", /* name */ 0, /* minnum */ 1, /* maxnum */ "u", /* short option */ "user", /* long option */ "Specify the unique user id", /* short description */ "Specify the unique user id" /* 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(stdout, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } /* doit */ uid=(uint32_t) GWEN_DB_GetIntValue(db, "userId", 0, 0); if (uid==0) { fprintf(stderr, "ERROR: Invalid or missing unique user id\n"); return 1; } rv=AB_Provider_HasUser(pro, uid); if (rv<0) { fprintf(stderr, "ERROR: User with id %lu not found\n", (unsigned long int) uid); return 2; } rv=AB_Provider_GetUser(pro, uid, 1, 1, &u); if (rv<0) { fprintf(stderr, "ERROR: User with id %lu not found\n", (unsigned long int) uid); return 2; } else { AB_IMEXPORTER_CONTEXT *ctx; ctx=AB_ImExporterContext_new(); rv=AH_Provider_GetItanModes(pro, u, ctx, 1, 0, 1); AB_ImExporterContext_free(ctx); if (rv) { DBG_ERROR_ERR(0, rv); AB_User_free(u); return 3; } } AB_User_free(u); return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/control/addaccount.c0000664000175000017500000001535114043610745022546 00000000000000/*************************************************************************** begin : Tue May 03 2005 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals_l.h" #include "aqhbci/banking/account.h" #include int AH_Control_AddAccount(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; AB_USER *u=0; int rv; uint32_t userId; const char *bankId; const char *accountName; const char *accountId; const char *ownerName; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "bankId", /* name */ 1, /* 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_Int, /* type */ "userId", /* name */ 1, /* minnum */ 1, /* maxnum */ "u", /* short option */ "user", /* long option */ "Specify the unique user id", /* short description */ "Specify the unique user id" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "ownerName", /* name */ 0, /* minnum */ 1, /* maxnum */ "N" /* short option */ "owner", /* long option */ "Specify the owner name", /* short description */ "Specify the owner name" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "accountName", /* name */ 0, /* minnum */ 1, /* maxnum */ "n", /* short option */ "name", /* long option */ "Specify the account name (Konto-Name)", /* short description */ "Specify the account name (Konto-Name)" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "accountId", /* name */ 1, /* minnum */ 1, /* maxnum */ "a", /* short option */ "account", /* long option */ "Specify the account id (Kontonummer)", /* short description */ "Specify the account id (Kontonummer)" /* 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(stdout, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } userId=GWEN_DB_GetIntValue(db, "userId", 0, 0); if (userId<1) { fprintf(stderr, "ERROR: Invalid user id\n"); return 1; } bankId=GWEN_DB_GetCharValue(db, "bankId", 0, "*"); accountId=GWEN_DB_GetCharValue(db, "accountId", 0, "*"); accountName=GWEN_DB_GetCharValue(db, "accountName", 0, "Account"); ownerName=GWEN_DB_GetCharValue(db, "ownerName", 0, NULL); rv=AB_Provider_HasUser(pro, userId); if (rv<0) { fprintf(stderr, "ERROR: User with id %lu not found\n", (unsigned long int) userId); return 2; } rv=AB_Provider_GetUser(pro, userId, 1, 1, &u); if (rv<0) { fprintf(stderr, "ERROR: User with id %lu not found\n", (unsigned long int) userId); return 2; } else { AB_ACCOUNT *account; AB_BANKINFO_LIST2 *bl; AB_BANKINFO_LIST2_ITERATOR *bit; AB_BANKINFO *tbi; AB_BANKINFO *bi; int rv; bl=AB_BankInfo_List2_new(); tbi=AB_BankInfo_new(); AB_BankInfo_SetBankId(tbi, bankId); rv=AB_Banking_GetBankInfoByTemplate(AB_Provider_GetBanking(pro), "de", tbi, bl); if (rv) { fprintf(stderr, "Error looking for bank info: %d\n", rv); AB_User_free(u); return 3; } bit=AB_BankInfo_List2_First(bl); if (bit) { bi=AB_BankInfo_List2Iterator_Data(bit); assert(bi); AB_BankInfo_List2Iterator_free(bit); } else { bi=NULL; fprintf(stderr, "Could not find bank with id %s\n", bankId); } AB_BankInfo_List2_free(bl); account=AB_Provider_CreateAccountObject(pro); assert(account); if (!ownerName) AB_Account_SetOwnerName(account, AB_User_GetUserName(u)); else AB_Account_SetOwnerName(account, ownerName); AB_Account_SetAccountNumber(account, accountId); if (accountName) AB_Account_SetAccountName(account, accountName); AB_Account_SetBankCode(account, bankId); if (bi) AB_Account_SetBankName(account, AB_BankInfo_GetBankName(bi)); AB_Account_SetUserId(account, userId); /* add account to system */ rv=AB_Provider_AddAccount(pro, account, 1); /* lock corresponding user */ if (rv<0) { DBG_ERROR(0, "Error adding account (%d)", rv); AB_Account_free(account); AB_User_free(u); return 3; } AB_Account_free(account); AB_User_free(u); } return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/control/getcert.c0000664000175000017500000000654514043610745022103 00000000000000/*************************************************************************** begin : Tue May 03 2005 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals_l.h" #include int AH_Control_GetCert(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; uint32_t uid; AB_USER *u=NULL; int rv; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Int, /* type */ "userId", /* name */ 0, /* minnum */ 1, /* maxnum */ "u", /* short option */ "user", /* long option */ "Specify the unique user id", /* short description */ "Specify the unique user id" /* 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(stdout, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } /* doit */ uid=(uint32_t) GWEN_DB_GetIntValue(db, "userId", 0, 0); if (uid==0) { fprintf(stderr, "ERROR: Invalid or missing unique user id\n"); return 1; } rv=AB_Provider_HasUser(pro, uid); if (rv<0) { fprintf(stderr, "ERROR: User with id %lu not found\n", (unsigned long int) uid); return 2; } rv=AB_Provider_GetUser(pro, uid, 1, 0, &u); if (rv<0) { fprintf(stderr, "ERROR: User with id %lu not found\n", (unsigned long int) uid); return 2; } else { rv=AH_Provider_GetCert(pro, u, 1, 0, 1); if (rv) { DBG_ERROR_ERR(0, rv); AB_Provider_EndExclUseUser(pro, u, 1); /* abort */ AB_User_free(u); return 3; } /* unlock user */ rv=AB_Provider_EndExclUseUser(pro, u, 0); if (rv<0) { fprintf(stderr, "ERROR: Could not unlock user (%d)\n", rv); AB_Provider_EndExclUseUser(pro, u, 1); /* abort */ AB_User_free(u); return 4; } } AB_User_free(u); return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/control/addsubuserflags.c0000664000175000017500000001156314043610745023620 00000000000000/*************************************************************************** begin : Tue May 03 2005 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals_l.h" #include #include "aqhbci/banking/user.h" int AH_Control_AddsubUserFlags(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv, int is_add) { GWEN_DB_NODE *db; uint32_t uid; AB_USER *u=NULL; GWEN_DB_NODE *vn; uint32_t flags; uint32_t bf; uint32_t c=0; int rv; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Int, /* type */ "userId", /* name */ 0, /* minnum */ 1, /* maxnum */ "u", /* short option */ "user", /* long option */ "Specify the unique user id", /* short description */ "Specify the unique user id" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "flags", /* name */ 1, /* minnum */ 99, /* maxnum */ "f", /* short option */ "flags", /* long option */ "Specify the user flags", /* short description */ "Specify the user flags" /* 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; GWEN_DB_NODE *dbTmp; int i; 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; } dbTmp=GWEN_DB_Group_new("flagGroup"); AH_User_Flags_toDb(dbTmp, "flags", 0xffffffff); GWEN_Buffer_AppendString(ubuf, "\nThe following flags are recognized:\n"); for (i=0; ; i++) { const char *s; s=GWEN_DB_GetCharValue(dbTmp, "flags", i, NULL); if (s==NULL) break; GWEN_Buffer_AppendString(ubuf, "- "); GWEN_Buffer_AppendString(ubuf, s); GWEN_Buffer_AppendString(ubuf, "\n"); } GWEN_DB_Group_free(dbTmp); fprintf(stdout, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } /* parse flags */ flags=AH_User_Flags_fromDb(db, "flags"); for (bf=flags; bf; bf>>=1) { if (bf&1) c++; } vn=GWEN_DB_FindFirstVar(db, "flags"); if (GWEN_DB_Values_Count(vn)!=c) { fprintf(stderr, "ERROR: Specified flag(s) unknown\n"); return 4; } /* doit */ uid=(uint32_t) GWEN_DB_GetIntValue(db, "userId", 0, 0); if (uid==0) { fprintf(stderr, "ERROR: Invalid or missing unique user id\n"); return 1; } rv=AB_Provider_HasUser(pro, uid); if (rv<0) { fprintf(stderr, "ERROR: User with id %lu not found\n", (unsigned long int) uid); return 2; } rv=AB_Provider_GetUser(pro, uid, 1, 0, &u); /* don't unlock to allow for AH_Provider_EndExclUseUser */ if (rv<0) { fprintf(stderr, "ERROR: User with id %lu not found\n", (unsigned long int) uid); return 2; } else { /* modify */ if (is_add) { fprintf(stderr, "Adding flags: %08x\n", flags); AH_User_AddFlags(u, flags); } else { fprintf(stderr, "Removing flags: %08x\n", flags); AH_User_SubFlags(u, flags); } /* unlock user */ rv=AB_Provider_EndExclUseUser(pro, u, 0); if (rv<0) { fprintf(stderr, "ERROR: Could not unlock user (%d)\n", rv); AB_Provider_EndExclUseUser(pro, u, 1); /* abort */ AB_User_free(u); return 4; } } AB_User_free(u); return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/control/sethbciversion.c0000664000175000017500000001012414043610745023461 00000000000000/*************************************************************************** begin : Tue May 03 2005 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals_l.h" #include #include "aqhbci/banking/user.h" int AH_Control_SetHbciVersion(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; uint32_t uid; AB_USER *u=NULL; int rv; int hbciVersion; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Int, /* type */ "userId", /* name */ 0, /* minnum */ 1, /* maxnum */ "u", /* short option */ "user", /* long option */ "Specify the unique user id", /* short description */ "Specify the unique user id" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Int, /* type */ "hbciVersion", /* name */ 1, /* minnum */ 1, /* maxnum */ 0, /* short option */ "hbciversion", /* long option */ "Specify the HBCI version (201, 210, 220, 300)", /* short description */ "Specify the HBCI version (201, 210, 220, 300)" /* 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(stdout, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } /* get and check params */ hbciVersion=GWEN_DB_GetIntValue(db, "hbciVersion", 0, 220); if (hbciVersion<200 || hbciVersion>399) { DBG_ERROR(0, "Invalid HBCI version \"%d\"", hbciVersion); return 1; } /* doit */ uid=(uint32_t) GWEN_DB_GetIntValue(db, "userId", 0, 0); if (uid==0) { fprintf(stderr, "ERROR: Invalid or missing unique user id\n"); return 1; } rv=AB_Provider_HasUser(pro, uid); if (rv<0) { fprintf(stderr, "ERROR: User with id %lu not found\n", (unsigned long int) uid); return 2; } rv=AB_Provider_GetUser(pro, uid, 1, 0, &u); /* don't lock to allow for AH_Provider_EndExclUseUser */ if (rv<0) { fprintf(stderr, "ERROR: User with id %lu not found\n", (unsigned long int) uid); return 2; } else { /* modify */ AH_User_SetHbciVersion(u, hbciVersion); /* unlock user */ rv=AB_Provider_EndExclUseUser(pro, u, 0); if (rv<0) { fprintf(stderr, "ERROR: Could not unlock user (%d)\n", rv); AB_Provider_EndExclUseUser(pro, u, 1); /* abort */ AB_User_free(u); return 4; } } AB_User_free(u); return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/control/main.c0000664000175000017500000002666514156464025021402 00000000000000/*************************************************************************** begin : Tue May 03 2005 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include "globals_l.h" static void showVersions() { int vmajor, vminor, vpatchLevel, vbuild; fprintf(stdout, "Versions:\n"); GWEN_Version(&vmajor, &vminor, &vpatchLevel, &vbuild); fprintf(stdout, " Gwenhywfar : %d.%d.%d.%d\n", vmajor, vminor, vpatchLevel, vbuild); AB_Banking_GetVersion(&vmajor, &vminor, &vpatchLevel, &vbuild); fprintf(stdout, " AqBanking : %d.%d.%d.%d\n", vmajor, vminor, vpatchLevel, vbuild); } static void showUsage(const char *prgName) { GWEN_BUFFER *ubuf; ubuf=GWEN_Buffer_new(0, 1024, 0, 1); GWEN_Buffer_AppendString(ubuf, I18N("Usage: ")); GWEN_Buffer_AppendString(ubuf, prgName); GWEN_Buffer_AppendString(ubuf, I18N(" COMMAND [LOCAL OPTIONS]\n")); GWEN_Buffer_AppendString(ubuf, I18N("\nCommands:\n\n")); GWEN_Buffer_AppendString(ubuf, I18N(" mkpinlist:\n" " This command creates an empty PIN " "file\n\n")); GWEN_Buffer_AppendString(ubuf, I18N(" adduser:\n" " Adds a user " "(-> setup HBCI for a bank)\n\n")); GWEN_Buffer_AppendString(ubuf, I18N(" deluser:\n" " Deletes a user.\n\n")); GWEN_Buffer_AppendString(ubuf, I18N(" getkeys:\n" " Requests the server's key\n\n")); GWEN_Buffer_AppendString(ubuf, I18N(" getcert:\n" " Requests the server's SSL certificate\n\n")); GWEN_Buffer_AppendString(ubuf, I18N(" createkeys:\n" " Create user keys.\n\n")); GWEN_Buffer_AppendString(ubuf, I18N(" sendkeys:\n" " Send the user keys to the bank.\n\n")); GWEN_Buffer_AppendString(ubuf, I18N(" changekeys:\n" " Change user keys (and media).\n\n")); GWEN_Buffer_AppendString(ubuf, I18N(" getbankinfo:\n" " Request bank information\n\n")); GWEN_Buffer_AppendString(ubuf, I18N(" getaccounts:\n" " Requests account list for a " "user\n\n")); GWEN_Buffer_AppendString(ubuf, I18N(" getaccsepa:\n" " Requests SEPA account list for a " "user\n\n")); GWEN_Buffer_AppendString(ubuf, I18N(" gettargetacc:\n" " Requests target account list for a " "user\n\n")); GWEN_Buffer_AppendString(ubuf, I18N(" getsysid:\n" " Requests a system id for the given " "user\n\n")); GWEN_Buffer_AppendString(ubuf, I18N(" getitanmodes:\n" " Requests supported iTAN modes for the given " "user\n\n")); GWEN_Buffer_AppendString(ubuf, I18N(" listitanmodes:\n" " Show a list of supported iTAN modes for the given " "user\n\n")); GWEN_Buffer_AppendString(ubuf, I18N(" setitanmode:\n" " Select an iTAN mode for the given user\n\n")); GWEN_Buffer_AppendString(ubuf, I18N(" listusers:\n" " List the users\n\n")); GWEN_Buffer_AppendString(ubuf, I18N(" listaccounts:\n" " List the accounts\n\n")); GWEN_Buffer_AppendString(ubuf, I18N(" changepin:\n" " Change the PIN of a key file\n\n")); GWEN_Buffer_AppendString(ubuf, I18N(" unblockpin:\n" " Unblock the PIN in PIN TAN mode.\n\n")); GWEN_Buffer_AppendString(ubuf, I18N(" iniletter:\n" " Print the INI letter for a given " "user\n\n")); GWEN_Buffer_AppendString(ubuf, I18N(" addaccount:\n" " Manually add account \n\n")); GWEN_Buffer_AppendString(ubuf, I18N(" delaccount:\n" " Deletes account \n\n")); GWEN_Buffer_AppendString(ubuf, I18N(" sethbciversion:\n" " Set the HBCI protocol version to be used\n\n")); GWEN_Buffer_AppendString(ubuf, I18N(" setMaxTransfers:\n" " Set the maximum number of transfers/debit notes per job \n\n")); GWEN_Buffer_AppendString(ubuf, I18N(" setsepaprofile:\n" " Set the SEPA profile for transfers/debit notes\n\n")); GWEN_Buffer_AppendString(ubuf, I18N(" setTanMediumId:\n" " Set the medium id for some PIN/TAN methods (like mTAN) \n\n")); GWEN_Buffer_AppendString(ubuf, I18N(" setTanMechanism:\n" " Overwrite TAN mechanism to use \n\n")); GWEN_Buffer_AppendString(ubuf, I18N(" adduserflags:\n" " Set special flags for the given user\n\n")); GWEN_Buffer_AppendString(ubuf, I18N(" subuserflags:\n" " Unset special flags for the given user\n\n")); GWEN_Buffer_AppendString(ubuf, I18N(" addaccountflags:\n" " Set special flags for the given account\n\n")); GWEN_Buffer_AppendString(ubuf, I18N(" subaccountflags:\n" " Reset special flags for the given account\n\n")); GWEN_Buffer_AppendString(ubuf, I18N(" logfile:\n" " Make an AqBanking log file anonymous\n\n")); GWEN_Buffer_AppendString(ubuf, I18N(" versions:\n" " Print the program and library versions")); fprintf(stdout, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); } int AH_Control(AB_PROVIDER *pro, int argc, char **argv) { GWEN_DB_NODE *db; const char *cmd; int rv; db=GWEN_DB_Group_new("arguments"); if (argc<1) { showUsage(argv[0]); GWEN_DB_Group_free(db); return 0; } /* if too few args */ cmd=argv[0]; if (!(cmd && *cmd)) { fprintf(stderr, "ERROR: Command needed.\n"); GWEN_DB_Group_free(db); return 1; } if (strcasecmp(cmd, "help")==0) { showUsage(argv[0]); rv=0; } else if (strcasecmp(cmd, "mkpinlist")==0) { rv=AH_Control_MkPinList(pro, db, argc, argv); } else if (strcasecmp(cmd, "adduser")==0) { rv=AH_Control_AddUser(pro, db, argc, argv); } else if (strcasecmp(cmd, "deluser")==0) { rv=AH_Control_DelUser(pro, db, argc, argv); } else if (strcasecmp(cmd, "getaccounts")==0) { rv=AH_Control_GetAccounts(pro, db, argc, argv); } else if (strcasecmp(cmd, "addaccount")==0) { rv=AH_Control_AddAccount(pro, db, argc, argv); } else if (strcasecmp(cmd, "delaccount")==0) { rv=AH_Control_DelAccount(pro, db, argc, argv); } else if (strcasecmp(cmd, "getsysid")==0) { rv=AH_Control_GetSysId(pro, db, argc, argv); } else if (strcasecmp(cmd, "getcert")==0) { rv=AH_Control_GetCert(pro, db, argc, argv); } else if (strcasecmp(cmd, "getkeys")==0) { rv=AH_Control_GetKeys(pro, db, argc, argv); } else if (strcasecmp(cmd, "createkeys")==0) { rv=AH_Control_CreateKeys(pro, db, argc, argv); } else if (strcasecmp(cmd, "sendkeys")==0) { rv=AH_Control_SendKeys(pro, db, argc, argv); } else if (strcasecmp(cmd, "changekeys")==0) { rv=AH_Control_ChangeKeys(pro, db, argc, argv); } else if (strcasecmp(cmd, "listusers")==0) { rv=AH_Control_ListUsers(pro, db, argc, argv); } else if (strcasecmp(cmd, "listaccounts")==0) { rv=AH_Control_ListAccounts(pro, db, argc, argv); } else if (strcasecmp(cmd, "iniletter")==0) { rv=AH_Control_IniLetter(pro, db, argc, argv); } else if (strcasecmp(cmd, "getitanmodes")==0) { rv=AH_Control_GetItanModes(pro, db, argc, argv); } else if (strcasecmp(cmd, "listitanmodes")==0) { rv=AH_Control_ListItanModes(pro, db, argc, argv); } else if (strcasecmp(cmd, "setitanmode")==0) { rv=AH_Control_SetItanMode(pro, db, argc, argv); } else if (strcasecmp(cmd, "changepin")==0) { rv=AH_Control_ChangePin(pro, db, argc, argv); } else if (strcasecmp(cmd, "unblockpin")==0) { rv=AH_Control_UnblockPin(pro, db, argc, argv); } else if (strcasecmp(cmd, "sethbciversion")==0) { rv=AH_Control_SetHbciVersion(pro, db, argc, argv); } else if (strcasecmp(cmd, "adduserflags")==0) { rv=AH_Control_AddsubUserFlags(pro, db, argc, argv, 1); } else if (strcasecmp(cmd, "subuserflags")==0) { rv=AH_Control_AddsubUserFlags(pro, db, argc, argv, 0); } else if (strcasecmp(cmd, "addaccountflags")==0) { rv=AH_Control_AddsubAccountFlags(pro, db, argc, argv, 1); } else if (strcasecmp(cmd, "subaccountflags")==0) { rv=AH_Control_AddsubAccountFlags(pro, db, argc, argv, 0); } else if (strcasecmp(cmd, "setmaxtransfers")==0) { rv=AH_Control_SetMaxTransfers(pro, db, argc, argv); } else if (strcasecmp(cmd, "setTanMediumId")==0) { rv=AH_Control_SetTanMediumId(pro, db, argc, argv); } else if (strcasecmp(cmd, "logfile")==0) { rv=AH_Control_LogFile(pro, db, argc, argv); } else if (strcasecmp(cmd, "getaccsepa")==0) { rv=AH_Control_GetAccSepa(pro, db, argc, argv); } else if (strcasecmp(cmd, "gettargetacc")==0) { rv=AH_Control_GetTargetAcc(pro, db, argc, argv); } else if (strcasecmp(cmd, "setsepaprofile")==0) { rv=AH_Control_SetSepaProfile(pro, db, argc, argv); } else if (strcasecmp(cmd, "getbankinfo")==0) { rv=AH_Control_GetBankInfo(pro, db, argc, argv); } else if (strcasecmp(cmd, "setTanMechanism")==0) { rv=AH_Control_SetTanMechanism(pro, db, argc, argv); } else if (strcasecmp(cmd, "versions")==0) { showVersions(); rv=0; } else if (strcasecmp(cmd, "test1")==0) { rv=AH_Control_Test1(pro, db, argc, argv); } else { fprintf(stderr, "ERROR: Unknown command \"%s\".\n", cmd); rv=1; } GWEN_DB_Group_free(db); return rv; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/control/listaccounts.c0000664000175000017500000000642214043610745023153 00000000000000/*************************************************************************** begin : Tue May 03 2005 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals_l.h" #include int AH_Control_ListAccounts(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; int rv, verbose; AB_ACCOUNT_LIST *al; AB_ACCOUNT *a; int i=0; const GWEN_ARGS args[]= { { 0, /* flags */ GWEN_ArgsType_Int, /* type */ "verbose", /* name */ 0, /* minnum */ 1, /* maxnum */ "v", /* short option */ "verbose", /* long option */ "Show list in verbose form (with more columns)", /* short description */ 0 }, { 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(stdout, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } verbose = GWEN_DB_VariableExists(db, "verbose"); al=AB_Account_List_new(); rv=AB_Provider_ReadAccounts(pro, al); if (rv<0) { if (rv==GWEN_ERROR_NOT_FOUND) { DBG_ERROR(0, "No accounts found."); } else { DBG_ERROR_ERR(0, rv); } AB_Account_List_free(al); return 3; } a=AB_Account_List_First(al); while (a) { fprintf(stdout, "Account %d: Bank: %s Account Number: %s", i++, AB_Account_GetBankCode(a), AB_Account_GetAccountNumber(a)); if (verbose) { const char *subAccountId = AB_Account_GetSubAccountId(a); fprintf(stdout, " SubAccountId: %s Account Type: %s LocalUniqueId: %d", subAccountId ? subAccountId : "(none)", AB_AccountType_toChar(AB_Account_GetAccountType(a)), AB_Account_GetUniqueId(a)); } fprintf(stdout, "\n"); a=AB_Account_List_Next(a); } AB_Account_List_free(al); return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/control/Makefile.am0000664000175000017500000000324714156464025022335 00000000000000 AM_CFLAGS=-DBUILDING_AQBANKING @visibility_cflags@ AM_CPPFLAGS = -I$(top_srcdir)/src/libs -I$(top_builddir)/src/libs $(gwenhywfar_includes) \ -I$(srcdir)/../../ \ -I$(srcdir)/../msglayer -I$(srcdir)/../joblayer \ -I$(srcdir)/../applayer -I$(srcdir)/../ajobs -I$(srcdir)/.. \ -I$(srcdir)/../dialogs localedir = $(datadir)/locale DEFS += -DLOCALEDIR=\"$(localedir)\" \ -DAQHBCI_PLUGINS=\"$(aqhbci_plugindir)\" \ -DXMLDATA_DIR=\"$(aqbanking_pkgdatadir)/backends/aqhbci\" noinst_LTLIBRARIES=libhbcicontrol.la noinst_HEADERS=\ globals_l.h \ control_l.h iheaderdir=@aqbanking_headerdir_am@/aqhbci #iheader_HEADERS= libhbcicontrol_la_SOURCES=\ main.c \ addaccount.c \ addsubaccountflags.c \ addsubuserflags.c \ adduser.c \ changepin.c \ unblockpin.c \ createkeys.c \ delaccount.c \ deluser.c \ getaccounts.c \ getaccsepa.c \ getcert.c \ getitanmodes.c \ getkeys.c \ getsysid.c \ iniletter.c \ listaccounts.c \ listitanmodes.c \ listusers.c \ mkpinlist.c \ logfile.c \ sendkeys.c \ changekeys.c \ sethbciversion.c \ setitanmode.c \ setmaxtransfers.c \ setsepaprofile.c \ settanmediumid.c \ getbankinfo.c \ settanmechanism.c \ gettargetacc.c \ test.c #EXTRA_DIST= sources: for f in $(libhbcicontrol_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d sources; \ done typefiles: for d in $(SUBDIRS); do \ $(MAKE) -C $$d typefiles; \ done typedefs: for d in $(SUBDIRS); do \ $(MAKE) -C $$d typedefs; \ done cppcheck: for f in $(libhbcicontrol_la_SOURCES); do \ cppcheck --force $$f ; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/dialogs/0000755000175000017500000000000015037736163020317 500000000000000aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/dialogs/w_userstatuscombo.h0000664000175000017500000000155114625171605024200 00000000000000/*************************************************************************** begin : Wed May 01 2024 copyright : (C) 2024 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQHBCI_WIDGET_USERSTATUSCOMBO_H #define AQHBCI_WIDGET_USERSTATUSCOMBO_H #include void AH_Widget_UserStatusComboSetup(GWEN_DIALOG *dlg, const char *widgetName); void AH_Widget_UserStatusComboSetCurrent(GWEN_DIALOG *dlg, const char *widgetName, int v); int AH_Widget_UserStatusComboGetCurrent(GWEN_DIALOG *dlg, const char *widgetName); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/dialogs/dlg_editaccount.dlg0000664000175000017500000001072314625171605024060 00000000000000 aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/dialogs/dlg_newuser.c0000664000175000017500000002612114300721174022711 00000000000000/*************************************************************************** begin : Mon Apr 19 2010 copyright : (C) 2018 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "dlg_newuser_p.h" #include "dlg_pintan_l.h" #include "dlg_ddvcard_l.h" #include "dlg_newkeyfile_l.h" #include "aqbanking/i18n_l.h" #include "aqbanking/backendsupport/user.h" #include "aqbanking/banking_be.h" #include "aqbanking/dialogs/dlg_newuser_be.h" #include #include #include #include #include #include #define DIALOG_MINWIDTH 200 #define DIALOG_MINHEIGHT 200 GWEN_DIALOG *AH_NewUserDialog_new(AB_PROVIDER *pro) { GWEN_DIALOG *dlg; GWEN_BUFFER *fbuf; int rv; dlg=AB_NewUserDialog_new(AB_Provider_GetBanking(pro), pro, "ah_new_user"); GWEN_Dialog_SetSignalHandler(dlg, AH_NewUserDialog_SignalHandler); /* get path of dialog description file */ fbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_PathManager_FindFile(AB_PM_LIBNAME, AB_PM_DATADIR, "aqbanking/backends/aqhbci/dialogs/dlg_newuser.dlg", fbuf); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "Dialog description file not found (%d).", rv); GWEN_Buffer_free(fbuf); GWEN_Dialog_free(dlg); return NULL; } /* read dialog from dialog description file */ rv=GWEN_Dialog_ReadXmlFile(dlg, GWEN_Buffer_GetStart(fbuf)); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d).", rv); GWEN_Buffer_free(fbuf); GWEN_Dialog_free(dlg); return NULL; } GWEN_Buffer_free(fbuf); /* add media paths for icons */ GWEN_Dialog_AddMediaPathsFromPathManager(dlg, GWEN_PM_LIBNAME, GWEN_PM_SYSDATADIR, "aqbanking/backends/aqhbci/dialogs"); /* done */ return dlg; } void AH_NewUserDialog_Init(GWEN_DIALOG *dlg) { GWEN_DB_NODE *dbPrefs; int i; dbPrefs=GWEN_Dialog_GetPreferences(dlg); GWEN_Dialog_SetCharProperty(dlg, "", GWEN_DialogProperty_Title, 0, I18N("Create a New User"), 0); GWEN_Dialog_SetCharProperty(dlg, "introLabel", GWEN_DialogProperty_Title, 0, I18N("" "

You can now create a new HBCI/FinTS user.

" "AqBanking supports the following user types:" "
    " "
  • Keyfile-based user
  • " "
  • Chipcard-based user
  • " "
  • PIN/TAN user
  • " "
" "

Which type of user you need to setup is determined " "by the bank. The letter from your bank should contain this " "information.

" "" "You can now create a new HBCI/FinTS user.\n" "AqBanking supports the following user types:\n" " - Keyfile-based user\n" " - Chipcard-based user\n" " - PIN/TAN user\n" "Which type of user you need to setup is determined\n" "by the bank. The letter from your bank should contain this\n" "information."), 0); /* temporarily disable not-implemented buttons */ GWEN_Dialog_SetIntProperty(dlg, "importKeyFileButton", GWEN_DialogProperty_Enabled, 0, 0, 0); GWEN_Dialog_SetIntProperty(dlg, "initChipcardButton", GWEN_DialogProperty_Enabled, 0, 0, 0); /* read width */ i=GWEN_DB_GetIntValue(dbPrefs, "dialog_width", 0, -1); if (i>=DIALOG_MINWIDTH) GWEN_Dialog_SetIntProperty(dlg, "", GWEN_DialogProperty_Width, 0, i, 0); /* read height */ i=GWEN_DB_GetIntValue(dbPrefs, "dialog_height", 0, -1); if (i>=DIALOG_MINHEIGHT) GWEN_Dialog_SetIntProperty(dlg, "", GWEN_DialogProperty_Height, 0, i, 0); } void AH_NewUserDialog_Fini(GWEN_DIALOG *dlg) { int i; GWEN_DB_NODE *dbPrefs; dbPrefs=GWEN_Dialog_GetPreferences(dlg); /* store dialog width */ i=GWEN_Dialog_GetIntProperty(dlg, "", GWEN_DialogProperty_Width, 0, -1); GWEN_DB_SetIntValue(dbPrefs, GWEN_DB_FLAGS_OVERWRITE_VARS, "dialog_width", i); /* store dialog height */ i=GWEN_Dialog_GetIntProperty(dlg, "", GWEN_DialogProperty_Height, 0, -1); GWEN_DB_SetIntValue(dbPrefs, GWEN_DB_FLAGS_OVERWRITE_VARS, "dialog_height", i); } static int AH_NewUserDialog_HandleActivatedPinTan(GWEN_DIALOG *dlg) { GWEN_DIALOG *dlg2; int rv; dlg2=AH_PinTanDialog_new(AB_NewUserDialog_GetProvider(dlg)); if (dlg2==NULL) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (no dialog)"); return GWEN_DialogEvent_ResultHandled; } GWEN_Dialog_SetWidgetText(dlg2, "", I18N("Create HBCI/FinTS PIN/TAN User")); rv=GWEN_Gui_ExecDialog(dlg2, 0); if (rv==0) { /* rejected */ GWEN_Dialog_free(dlg2); return GWEN_DialogEvent_ResultHandled; } AB_NewUserDialog_SetUser(dlg, AH_PinTanDialog_GetUser(dlg2)); GWEN_Dialog_free(dlg2); return GWEN_DialogEvent_ResultAccept; } static int AH_NewUserDialog_HandleActivatedUseCard(GWEN_DIALOG *dlg) { int rv; GWEN_BUFFER *mtypeName; GWEN_BUFFER *mediumName; uint32_t pid; GWEN_CRYPT_TOKEN *ct; mtypeName=GWEN_Buffer_new(0, 64, 0, 1); mediumName=GWEN_Buffer_new(0, 64, 0, 1); pid=GWEN_Gui_ProgressStart(GWEN_GUI_PROGRESS_ALLOW_SUBLEVELS | GWEN_GUI_PROGRESS_SHOW_PROGRESS | GWEN_GUI_PROGRESS_KEEP_OPEN | GWEN_GUI_PROGRESS_SHOW_ABORT, I18N("Checking Chipcard"), I18N("Checking chipcard type, please wait..."), GWEN_GUI_PROGRESS_NONE, 0); rv=AB_Banking_CheckCryptToken(AB_NewUserDialog_GetBanking(dlg), GWEN_Crypt_Token_Device_Card, mtypeName, mediumName); GWEN_Gui_ProgressEnd(pid); if (rv<0) { DBG_NOTICE(AQHBCI_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(mediumName); GWEN_Buffer_free(mtypeName); return GWEN_DialogEvent_ResultHandled; } rv=AB_Banking_GetCryptToken(AB_NewUserDialog_GetBanking(dlg), GWEN_Buffer_GetStart(mtypeName), GWEN_Buffer_GetStart(mediumName), &ct); if (rv<0) { DBG_NOTICE(AQHBCI_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(mediumName); GWEN_Buffer_free(mtypeName); return GWEN_DialogEvent_ResultHandled; } if (strcasecmp(GWEN_Buffer_GetStart(mtypeName), "ddvcard")==0) { GWEN_DIALOG *dlg2; DBG_NOTICE(0, "DDV card"); dlg2=AH_DdvCardDialog_new(AB_NewUserDialog_GetProvider(dlg), ct); if (dlg2==NULL) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (no dialog)"); GWEN_Buffer_free(mediumName); GWEN_Buffer_free(mtypeName); return GWEN_DialogEvent_ResultHandled; } GWEN_Dialog_SetWidgetText(dlg2, "", I18N("Create HBCI/FinTS DDV User")); rv=GWEN_Gui_ExecDialog(dlg2, 0); if (rv==0) { /* rejected */ GWEN_Dialog_free(dlg2); AB_Banking_ClearCryptTokenList(AB_NewUserDialog_GetBanking(dlg)); return GWEN_DialogEvent_ResultHandled; } AB_NewUserDialog_SetUser(dlg, AH_PinTanDialog_GetUser(dlg2)); GWEN_Dialog_free(dlg2); GWEN_Buffer_free(mediumName); GWEN_Buffer_free(mtypeName); AB_Banking_ClearCryptTokenList(AB_NewUserDialog_GetBanking(dlg)); return GWEN_DialogEvent_ResultAccept; } else if (strcasecmp(GWEN_Buffer_GetStart(mtypeName), "starcoscard")==0) { DBG_NOTICE(0, "STARCOS RSA card"); // TODO } else { DBG_ERROR(AQHBCI_LOGDOMAIN, "Card type \"%s\" not yet supported", GWEN_Buffer_GetStart(mtypeName)); } GWEN_Buffer_free(mediumName); GWEN_Buffer_free(mtypeName); AB_Banking_ClearCryptTokenList(AB_NewUserDialog_GetBanking(dlg)); return GWEN_DialogEvent_ResultHandled; } static int AH_NewUserDialog_HandleActivatedNewKeyFile(GWEN_DIALOG *dlg) { GWEN_DIALOG *dlg2; int rv; dlg2=AH_NewKeyFileDialog_new(AB_NewUserDialog_GetProvider(dlg)); if (dlg2==NULL) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (no dialog)"); return GWEN_DialogEvent_ResultHandled; } GWEN_Dialog_SetWidgetText(dlg2, "", I18N("Create HBCI/FinTS Keyfile User")); rv=GWEN_Gui_ExecDialog(dlg2, 0); if (rv==0) { /* rejected */ GWEN_Dialog_free(dlg2); return GWEN_DialogEvent_ResultHandled; } AB_NewUserDialog_SetUser(dlg, AH_NewKeyFileDialog_GetUser(dlg2)); GWEN_Dialog_free(dlg2); return GWEN_DialogEvent_ResultAccept; } int AH_NewUserDialog_HandleActivated(GWEN_DIALOG *dlg, const char *sender) { if (strcasecmp(sender, "abortButton")==0) return GWEN_DialogEvent_ResultReject; else if (strcasecmp(sender, "usePinTanButton")==0) return AH_NewUserDialog_HandleActivatedPinTan(dlg); else if (strcasecmp(sender, "useChipcardButton")==0) return AH_NewUserDialog_HandleActivatedUseCard(dlg); else if (strcasecmp(sender, "createKeyFileButton")==0) return AH_NewUserDialog_HandleActivatedNewKeyFile(dlg); else if (strcasecmp(sender, "helpButton")==0) { /* TODO: open u help dialog */ } return GWEN_DialogEvent_ResultNotHandled; } int GWENHYWFAR_CB AH_NewUserDialog_SignalHandler(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender) { switch (t) { case GWEN_DialogEvent_TypeInit: AH_NewUserDialog_Init(dlg); return GWEN_DialogEvent_ResultHandled;; case GWEN_DialogEvent_TypeFini: AH_NewUserDialog_Fini(dlg); return GWEN_DialogEvent_ResultHandled;; case GWEN_DialogEvent_TypeValueChanged: return GWEN_DialogEvent_ResultHandled;; case GWEN_DialogEvent_TypeActivated: return AH_NewUserDialog_HandleActivated(dlg, sender); case GWEN_DialogEvent_TypeEnabled: case GWEN_DialogEvent_TypeDisabled: case GWEN_DialogEvent_TypeClose: case GWEN_DialogEvent_TypeLast: default: return GWEN_DialogEvent_ResultNotHandled; } return GWEN_DialogEvent_ResultNotHandled; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/dialogs/dlg_newkeyfile_l.h0000664000175000017500000000457214043610745023716 00000000000000/*************************************************************************** begin : Sat Jun 26 2010 copyright : (C) 2018 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQHBCI_DLG_NEWKEYFILE_H #define AQHBCI_DLG_NEWKEYFILE_H #include #include #include #include #include #ifdef __cplusplus extern "C" { #endif GWEN_DIALOG *AH_NewKeyFileDialog_new(AB_PROVIDER *pro); const char *AH_NewKeyFileDialog_GetFileName(const GWEN_DIALOG *dlg); void AH_NewKeyFileDialog_SetFileName(GWEN_DIALOG *dlg, const char *s); const char *AH_NewKeyFileDialog_GetBankCode(const GWEN_DIALOG *dlg); void AH_NewKeyFileDialog_SetBankCode(GWEN_DIALOG *dlg, const char *s); const char *AH_NewKeyFileDialog_GetBankName(const GWEN_DIALOG *dlg); void AH_NewKeyFileDialog_SetBankName(GWEN_DIALOG *dlg, const char *s); const char *AH_NewKeyFileDialog_GetUserName(const GWEN_DIALOG *dlg); void AH_NewKeyFileDialog_SetUserName(GWEN_DIALOG *dlg, const char *s); const char *AH_NewKeyFileDialog_GetUserId(const GWEN_DIALOG *dlg); void AH_NewKeyFileDialog_SetUserId(GWEN_DIALOG *dlg, const char *s); const char *AH_NewKeyFileDialog_GetCustomerId(const GWEN_DIALOG *dlg); void AH_NewKeyFileDialog_SetCustomerId(GWEN_DIALOG *dlg, const char *s); const char *AH_NewKeyFileDialog_GetUrl(const GWEN_DIALOG *dlg); void AH_NewKeyFileDialog_SetUrl(GWEN_DIALOG *dlg, const char *s); int AH_NewKeyFileDialog_GetHbciVersion(const GWEN_DIALOG *dlg); void AH_NewKeyFileDialog_SetHbciVersion(GWEN_DIALOG *dlg, int i); int AH_NewKeyFileDialog_GetRdhVersion(const GWEN_DIALOG *dlg); void AH_NewKeyFileDialog_SetRdhVersion(GWEN_DIALOG *dlg, int i); uint32_t AH_NewKeyFileDialog_GetFlags(const GWEN_DIALOG *dlg); void AH_NewKeyFileDialog_SetFlags(GWEN_DIALOG *dlg, uint32_t fl); void AH_NewKeyFileDialog_AddFlags(GWEN_DIALOG *dlg, uint32_t fl); void AH_NewKeyFileDialog_SubFlags(GWEN_DIALOG *dlg, uint32_t fl); AB_USER *AH_NewKeyFileDialog_GetUser(const GWEN_DIALOG *dlg); #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/dialogs/w_tanmethodcombo.c0000664000175000017500000000701114625171605023731 00000000000000/*************************************************************************** begin : Wed May 01 2024 copyright : (C) 2024 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "w_tanmethodcombo.h" #include "aqbanking/i18n_l.h" /* ------------------------------------------------------------------------------------------------ * forward declarations * ------------------------------------------------------------------------------------------------ */ static int _createTanMethodString(const AH_TAN_METHOD *tm, GWEN_BUFFER *tbuf); /* ------------------------------------------------------------------------------------------------ * implementations * ------------------------------------------------------------------------------------------------ */ void AH_Widget_TanMethodComboRebuild(GWEN_DIALOG *dlg, const char *widgetName, const AH_TAN_METHOD_LIST *ctl) { GWEN_Dialog_SetIntProperty(dlg, widgetName, GWEN_DialogProperty_ClearValues, 0, 0, 0); GWEN_Dialog_SetCharProperty(dlg, widgetName, GWEN_DialogProperty_AddValue, 0, I18N("-- select --"), 0); if (ctl) { AH_TAN_METHOD *tm; GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 256, 0, 1); tm=AH_TanMethod_List_First(ctl); while (tm) { if (_createTanMethodString(tm, tbuf)==0) GWEN_Dialog_SetCharProperty(dlg, widgetName, GWEN_DialogProperty_AddValue, 0, GWEN_Buffer_GetStart(tbuf), 0); GWEN_Buffer_Reset(tbuf); tm=AH_TanMethod_List_Next(tm); } GWEN_Buffer_free(tbuf); } } int AH_Widget_TanMethodComboFindMethodById(GWEN_DIALOG *dlg, const char *widgetName, int id) { int idx; for (idx=0; ; idx++) { const char *s; s=GWEN_Dialog_GetCharProperty(dlg, widgetName, GWEN_DialogProperty_Value, idx, NULL); if (s && *s) { int currentId; if (1==sscanf(s, "%u", ¤tId) && currentId==id) return idx; } else break; } /* for */ return -1; } void AH_Widget_TanMethodComboSetCurrent(GWEN_DIALOG *dlg, const char *widgetName, int id) { if (id) { int idx; idx=AH_Widget_TanMethodComboFindMethodById(dlg, widgetName, id); if (idx>=0) GWEN_Dialog_SetIntProperty(dlg, widgetName, GWEN_DialogProperty_Value, 0, idx, 0); } } int AH_Widget_TanMethodComboGetCurrent(GWEN_DIALOG *dlg, const char *widgetName) { int idx; idx=GWEN_Dialog_GetIntProperty(dlg, widgetName, GWEN_DialogProperty_Value, 0, -1); if (idx>=0) { const char *s; s=GWEN_Dialog_GetCharProperty(dlg, widgetName, GWEN_DialogProperty_Value, idx, NULL); if (s && *s) { int currentId; if (1==sscanf(s, "%u", ¤tId)) return currentId; } } return 0; } int _createTanMethodString(const AH_TAN_METHOD *tm, GWEN_BUFFER *tbuf) { const char *s; GWEN_Buffer_AppendArgs(tbuf, "%d - ", (AH_TanMethod_GetGvVersion(tm)*1000)+AH_TanMethod_GetFunction(tm)); GWEN_Buffer_AppendArgs(tbuf, "%d", AH_TanMethod_GetFunction(tm)); s=AH_TanMethod_GetMethodName(tm); if (!(s && *s)) s=AH_TanMethod_GetMethodId(tm); if (s && *s) GWEN_Buffer_AppendArgs(tbuf, " - %s", s); /* add HKTAN version */ GWEN_Buffer_AppendArgs(tbuf, " (Version %d)", AH_TanMethod_GetGvVersion(tm)); return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/dialogs/Makefile.am0000664000175000017500000000570014625171605022273 00000000000000AM_CPPFLAGS = -I$(top_srcdir)/src/libs -I$(top_builddir)/src/libs $(gwenhywfar_includes) \ -I$(srcdir)/../.. \ -I.. -I$(srcdir)/../banking \ -I.. -I$(srcdir)/../msglayer \ -I.. -I$(srcdir)/../joblayer \ -I$(srcdir)/../tan \ -I.. -I$(srcdir)/.. \ -I$(top_srcdir)/src/libs/aqbanking $(gwenhywfar_includes) AM_CFLAGS=-DBUILDING_AQBANKING @visibility_cflags@ noinst_LTLIBRARIES=libaqhbci_dlgs.la #iheaderdir=@aqbanking_headerdir_am@/aqhbci #iheader_HEADERS= noinst_HEADERS=\ dlg_edituserddv_l.h dlg_edituserddv_p.h \ dlg_edituserpintan_l.h dlg_edituserpintan_p.h \ dlg_edituserrdh_l.h dlg_edituserrdh_p.h \ dlg_pintan_l.h dlg_pintan_p.h \ dlg_pintan_special_l.h dlg_pintan_special_p.h \ dlg_newuser_l.h dlg_newuser_p.h \ dlg_ddvcard_l.h dlg_ddvcard_p.h \ dlg_zkacard_l.h dlg_zkacard_p.h \ dlg_ddvcard_special_l.h dlg_ddvcard_special_p.h \ dlg_newkeyfile_l.h dlg_newkeyfile_p.h \ dlg_rdh_special_l.h dlg_rdh_special_p.h \ dlg_importkeyfile_l.h dlg_importkeyfile_p.h \ dlg_choose_usertype_l.h dlg_choose_usertype_p.h \ dlg_editaccount_l.h dlg_editaccount_p.h \ dlg_pintan_tanmode_l.h dlg_pintan_tanmode_p.h \ w_hbciversioncombo.h \ w_accounttypecombo.h \ w_usercombo.h \ w_tanmethodcombo.h \ w_rdhversioncombo.h \ w_userstatuscombo.h \ w_utils.h libaqhbci_dlgs_la_SOURCES=\ dlg_edituserddv.c \ dlg_ddvcard_special.c \ dlg_edituserpintan.c \ dlg_edituserrdh.c \ dlg_pintan.c \ dlg_pintan_special.c \ dlg_ddvcard.c \ dlg_zkacard.c \ dlg_newkeyfile.c \ dlg_rdh_special.c \ dlg_importkeyfile.c \ dlg_newuser.c \ dlg_choose_usertype.c \ dlg_editaccount.c \ dlg_pintan_tanmode.c \ w_hbciversioncombo.c \ w_accounttypecombo.c \ w_usercombo.c \ w_tanmethodcombo.c \ w_rdhversioncombo.c \ w_userstatuscombo.c \ w_utils.c dlgdatadir=$(aqbanking_pkgdatadir)/backends/aqhbci/dialogs dlgdata_DATA=\ dlg_edituserddv.dlg \ dlg_edituserpintan.dlg \ dlg_edituserrdh.dlg \ dlg_ddvcard.dlg \ dlg_zkacard.dlg \ dlg_ddvcard_special.dlg \ dlg_pintan.dlg \ dlg_pintan_special.dlg \ dlg_newkeyfile.dlg \ dlg_rdh_special.dlg \ dlg_importkeyfile.dlg \ dlg_newuser.dlg \ dlg_choose_usertype.dlg \ dlg_editaccount.dlg \ dlg_pintan_tanmode.dlg dlgimagedir=$(aqbanking_pkgdatadir)/backends/aqhbci/dialogs dlgimage_DATA=\ chipcard.png \ keyfile.png \ pintan.png EXTRA_DIST=$(typefiles) $(dlgdata_DATA) $(dlgimage_DATA) sources: for f in $(libaqhbci_dlgs_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for f in $(dlgdata_DATA); do \ echo $(subdir)/$$f >>$(top_srcdir)/dlgsources; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d sources; \ done typefiles: for d in $(SUBDIRS); do \ $(MAKE) -C $$d typefiles; \ done typedefs: for d in $(SUBDIRS); do \ $(MAKE) -C $$d typedefs; \ done cppcheck: for f in $(libaqhbci_dlgs_la_SOURCES); do \ cppcheck --force $$f ; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/dialogs/dlg_pintan.c0000664000175000017500000010366514625171605022533 00000000000000/*************************************************************************** begin : Mon Apr 12 2010 copyright : (C) 2018 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "dlg_pintan_p.h" #include "aqhbci/banking/provider_l.h" #include "aqbanking/i18n_l.h" #include #include #include #include "aqhbci/banking/user.h" #include "aqhbci/banking/provider.h" #include "aqhbci/banking/provider_online.h" #include "dlg_pintan_special_l.h" #include "dlg_pintan_tanmode_l.h" #include #include #include #include #include #include #define PAGE_BEGIN 0 #define PAGE_BANK 1 #define PAGE_USER 2 #define PAGE_CREATE 3 #define PAGE_END 4 #define DIALOG_MINWIDTH 400 #define DIALOG_MINHEIGHT 200 GWEN_INHERIT(GWEN_DIALOG, AH_PINTAN_DIALOG) /* ------------------------------------------------------------------------------------------------ * forward declarations * ------------------------------------------------------------------------------------------------ */ static void GWENHYWFAR_CB _dlgApi_FreeData(void *bp, void *p); static void _dialogInit(GWEN_DIALOG *dlg); static void _dialogFini(GWEN_DIALOG *dlg); static int _dialogNext(GWEN_DIALOG *dlg); static int _dialogPrevious(GWEN_DIALOG *dlg); static int _dialogEnterPage(GWEN_DIALOG *dlg, int page, int forwards); static int GWENHYWFAR_CB _dlgApi_SignalHandler(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender); static int _handleSignalActivated(GWEN_DIALOG *dlg, const char *sender); static int _handleSignalActivatedBankCode(GWEN_DIALOG *dlg); static int _handleSignalActivatedSpecial(GWEN_DIALOG *dlg); static int _handleSignalValueChanged(GWEN_DIALOG *dlg, const char *sender); static int _getBankPageData(GWEN_DIALOG *dlg); static int _getUserPageData(GWEN_DIALOG *dlg); static void _setBankCode(GWEN_DIALOG *dlg, const char *s); static void _setBankName(GWEN_DIALOG *dlg, const char *s); static void _setUserName(GWEN_DIALOG *dlg, const char *s); static void _setUserId(GWEN_DIALOG *dlg, const char *s); static void _setCustomerId(GWEN_DIALOG *dlg, const char *s); static void _setUrl(GWEN_DIALOG *dlg, const char *s); static void _setTanMediumId(GWEN_DIALOG *dlg, const char *s); static int _addUserAndSetupWithBankServer(GWEN_DIALOG *dlg); static int _setupLockedUserWithBankServer(GWEN_DIALOG *dlg, AB_USER *u, uint32_t pid); static int _selectTanMethod(GWEN_DIALOG *dlg, AB_USER *u, int doLock); static AB_USER *_createAndSetupUser(GWEN_DIALOG *dlg, uint32_t pid); static int _getCertificate(AB_PROVIDER *pro, AB_USER *u, uint32_t pid); static int _getBankInfoAnon(AB_PROVIDER *pro, AB_USER *u, uint32_t pid); static int _getSystemId(AB_PROVIDER *pro, AB_USER *u, uint32_t pid); static int _getAccountList(AB_PROVIDER *pro, AB_USER *u, uint32_t pid); static void _removeAllSpaces(uint8_t *s); /* ------------------------------------------------------------------------------------------------ * implementations * ------------------------------------------------------------------------------------------------ */ GWEN_DIALOG *AH_PinTanDialog_new(AB_PROVIDER *pro) { GWEN_DIALOG *dlg; AH_PINTAN_DIALOG *xdlg; dlg=GWEN_Dialog_CreateAndLoadWithPath("ah_setup_pintan", AB_PM_LIBNAME, AB_PM_DATADIR, "aqbanking/backends/aqhbci/dialogs/dlg_pintan.dlg"); if (dlg==NULL) { DBG_INFO(AQHBCI_LOGDOMAIN, "here."); return NULL; } GWEN_NEW_OBJECT(AH_PINTAN_DIALOG, xdlg); GWEN_INHERIT_SETDATA(GWEN_DIALOG, AH_PINTAN_DIALOG, dlg, xdlg, _dlgApi_FreeData); GWEN_Dialog_SetSignalHandler(dlg, _dlgApi_SignalHandler); xdlg->banking=AB_Provider_GetBanking(pro); xdlg->provider=pro; /* preset */ xdlg->hbciVersion=300; xdlg->httpVMajor=1; xdlg->httpVMinor=1; /* done */ return dlg; } void GWENHYWFAR_CB _dlgApi_FreeData(void *bp, void *p) { AH_PINTAN_DIALOG *xdlg; xdlg=(AH_PINTAN_DIALOG *) p; free(xdlg->bankCode); free(xdlg->bankName); free(xdlg->userName); free(xdlg->userId); free(xdlg->customerId); free(xdlg->tanMediumId); GWEN_FREE_OBJECT(xdlg); } AB_USER *AH_PinTanDialog_GetUser(const GWEN_DIALOG *dlg) { AH_PINTAN_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_PINTAN_DIALOG, dlg); assert(xdlg); return xdlg->user; } void _setBankCode(GWEN_DIALOG *dlg, const char *s) { AH_PINTAN_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_PINTAN_DIALOG, dlg); assert(xdlg); free(xdlg->bankCode); xdlg->bankCode=s?strdup(s):NULL; } void _setBankName(GWEN_DIALOG *dlg, const char *s) { AH_PINTAN_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_PINTAN_DIALOG, dlg); assert(xdlg); free(xdlg->bankName); xdlg->bankName=s?strdup(s):NULL; } void _setUserName(GWEN_DIALOG *dlg, const char *s) { AH_PINTAN_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_PINTAN_DIALOG, dlg); assert(xdlg); free(xdlg->userName); xdlg->userName=s?strdup(s):NULL; } void _setUserId(GWEN_DIALOG *dlg, const char *s) { AH_PINTAN_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_PINTAN_DIALOG, dlg); assert(xdlg); free(xdlg->userId); xdlg->userId=s?strdup(s):NULL; } void _setCustomerId(GWEN_DIALOG *dlg, const char *s) { AH_PINTAN_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_PINTAN_DIALOG, dlg); assert(xdlg); free(xdlg->customerId); xdlg->customerId=s?strdup(s):NULL; } void _setUrl(GWEN_DIALOG *dlg, const char *s) { AH_PINTAN_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_PINTAN_DIALOG, dlg); assert(xdlg); free(xdlg->url); xdlg->url=s?strdup(s):NULL; } void _setTanMediumId(GWEN_DIALOG *dlg, const char *s) { AH_PINTAN_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_PINTAN_DIALOG, dlg); assert(xdlg); free(xdlg->tanMediumId); xdlg->tanMediumId=s?strdup(s):NULL; } void _dialogInit(GWEN_DIALOG *dlg) { AH_PINTAN_DIALOG *xdlg; GWEN_DB_NODE *dbPrefs; int i; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_PINTAN_DIALOG, dlg); assert(xdlg); dbPrefs=GWEN_Dialog_GetPreferences(dlg); GWEN_Dialog_SetCharProperty(dlg, "", GWEN_DialogProperty_Title, 0, I18N("HBCI PIN/TAN Setup Wizard"), 0); /* select first page */ GWEN_Dialog_SetIntProperty(dlg, "wiz_stack", GWEN_DialogProperty_Value, 0, 0, 0); /* setup intro page */ GWEN_Dialog_SetCharProperty(dlg, "wiz_begin_label", GWEN_DialogProperty_Title, 0, I18N("This dialog assists you in setting up a Pin/TAN User.\n"), 0); /* setup bank page */ GWEN_Dialog_SetCharProperty(dlg, "wiz_bank_label", GWEN_DialogProperty_Title, 0, I18N("" "

Please select the bank.

" "

AqBanking has an internal database which " "contains HBCI/FinTS information about many banks.

" "

If there is an entry for your bank this dialog will use the " "information from the database.

" "" "Please select the bank.\n" "AqBanking has an internal database which contains\n" "HBCI/FinTS information about many banks.\n" "If there is an entry for your bank this dialog will use the\n" "information from the database."), 0); /* setup user page */ GWEN_Dialog_SetCharProperty(dlg, "wiz_user_label", GWEN_DialogProperty_Title, 0, I18N("" "

For most banks the customer id must be the same as the user id.

" "

However, some banks actually use the customer id, so please look into " "the documentation provided by your bank to discover whether this is the " "case with your bank.

" "" "For most banks the customer id must be the same as the user id.\n" "However, some banks actually use the customer id, so please look into\n" "the documentation provided by your bank to discover whether this is the\n" "case with your bank."), 0); /* setup creation page */ GWEN_Dialog_SetCharProperty(dlg, "wiz_create_label", GWEN_DialogProperty_Title, 0, I18N("" "

We are now ready to create the user and retrieve the account list.

" "

Click the next button to proceed or abort to abort.

" "" "We are now ready to create the user and retrieve the account list.\n" "Click the NEXT button to proceed or ABORT to abort."), 0); /* setup extro page */ GWEN_Dialog_SetCharProperty(dlg, "wiz_end_label", GWEN_DialogProperty_Title, 0, I18N("The user has been successfully setup."), 0); /* read width */ i=GWEN_DB_GetIntValue(dbPrefs, "dialog_width", 0, -1); if (i>=DIALOG_MINWIDTH) GWEN_Dialog_SetIntProperty(dlg, "", GWEN_DialogProperty_Width, 0, i, 0); /* read height */ i=GWEN_DB_GetIntValue(dbPrefs, "dialog_height", 0, -1); if (i>=DIALOG_MINHEIGHT) GWEN_Dialog_SetIntProperty(dlg, "", GWEN_DialogProperty_Height, 0, i, 0); /* disable next and previous buttons */ GWEN_Dialog_SetIntProperty(dlg, "wiz_prev_button", GWEN_DialogProperty_Enabled, 0, 0, 0); GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 1, 0); } void _dialogFini(GWEN_DIALOG *dlg) { AH_PINTAN_DIALOG *xdlg; int i; GWEN_DB_NODE *dbPrefs; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_PINTAN_DIALOG, dlg); assert(xdlg); dbPrefs=GWEN_Dialog_GetPreferences(dlg); /* store dialog width */ i=GWEN_Dialog_GetIntProperty(dlg, "", GWEN_DialogProperty_Width, 0, -1); GWEN_DB_SetIntValue(dbPrefs, GWEN_DB_FLAGS_OVERWRITE_VARS, "dialog_width", i); /* store dialog height */ i=GWEN_Dialog_GetIntProperty(dlg, "", GWEN_DialogProperty_Height, 0, -1); GWEN_DB_SetIntValue(dbPrefs, GWEN_DB_FLAGS_OVERWRITE_VARS, "dialog_height", i); } int _getBankPageData(GWEN_DIALOG *dlg) { AH_PINTAN_DIALOG *xdlg; const char *s; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_PINTAN_DIALOG, dlg); assert(xdlg); s=GWEN_Dialog_GetCharProperty(dlg, "wiz_bankcode_edit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) { GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(tbuf, s); GWEN_Text_CondenseBuffer(tbuf); _setBankCode(dlg, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } else { DBG_INFO(AQHBCI_LOGDOMAIN, "Missing bank code"); return GWEN_ERROR_NO_DATA; } s=GWEN_Dialog_GetCharProperty(dlg, "wiz_bankname_edit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) { GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(tbuf, s); GWEN_Text_CondenseBuffer(tbuf); _setBankName(dlg, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } else _setBankName(dlg, NULL); s=GWEN_Dialog_GetCharProperty(dlg, "wiz_url_edit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) { GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(tbuf, s); GWEN_Text_CondenseBuffer(tbuf); _removeAllSpaces((uint8_t *)GWEN_Buffer_GetStart(tbuf)); _setUrl(dlg, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } else { DBG_INFO(AQHBCI_LOGDOMAIN, "Missing URL"); return GWEN_ERROR_NO_DATA; } return 0; } int _getUserPageData(GWEN_DIALOG *dlg) { AH_PINTAN_DIALOG *xdlg; const char *s; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_PINTAN_DIALOG, dlg); assert(xdlg); s=GWEN_Dialog_GetCharProperty(dlg, "wiz_username_edit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) { GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(tbuf, s); GWEN_Text_CondenseBuffer(tbuf); _setUserName(dlg, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } else { DBG_INFO(AQHBCI_LOGDOMAIN, "Missing user name"); return GWEN_ERROR_NO_DATA; } s=GWEN_Dialog_GetCharProperty(dlg, "wiz_userid_edit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) { GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(tbuf, s); GWEN_Text_CondenseBuffer(tbuf); _setUserId(dlg, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } else { DBG_INFO(AQHBCI_LOGDOMAIN, "Missing user id"); return GWEN_ERROR_NO_DATA; } s=GWEN_Dialog_GetCharProperty(dlg, "wiz_customerid_edit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) { GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(tbuf, s); GWEN_Text_CondenseBuffer(tbuf); _setCustomerId(dlg, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } else _setCustomerId(dlg, NULL); return 0; } int _dialogEnterPage(GWEN_DIALOG *dlg, int page, int forwards) { AH_PINTAN_DIALOG *xdlg; int rv; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_PINTAN_DIALOG, dlg); assert(xdlg); switch (page) { case PAGE_BEGIN: GWEN_Dialog_SetIntProperty(dlg, "wiz_prev_button", GWEN_DialogProperty_Enabled, 0, 0, 0); GWEN_Dialog_SetIntProperty(dlg, "wiz_stack", GWEN_DialogProperty_Value, 0, page, 0); return GWEN_DialogEvent_ResultHandled; case PAGE_BANK: GWEN_Dialog_SetIntProperty(dlg, "wiz_prev_button", GWEN_DialogProperty_Enabled, 0, 1, 0); rv=_getBankPageData(dlg); if (rv<0) GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 0, 0); else GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 1, 0); GWEN_Dialog_SetIntProperty(dlg, "wiz_stack", GWEN_DialogProperty_Value, 0, page, 0); return GWEN_DialogEvent_ResultHandled; case PAGE_USER: GWEN_Dialog_SetIntProperty(dlg, "wiz_prev_button", GWEN_DialogProperty_Enabled, 0, 1, 0); rv=_getUserPageData(dlg); if (rv<0) GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 0, 0); else GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 1, 0); GWEN_Dialog_SetIntProperty(dlg, "wiz_stack", GWEN_DialogProperty_Value, 0, page, 0); return GWEN_DialogEvent_ResultHandled; case PAGE_CREATE: if (!forwards) GWEN_Dialog_SetCharProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Title, 0, I18N("Next"), 0); GWEN_Dialog_SetIntProperty(dlg, "wiz_stack", GWEN_DialogProperty_Value, 0, page, 0); return GWEN_DialogEvent_ResultHandled; case PAGE_END: GWEN_Dialog_SetIntProperty(dlg, "wiz_stack", GWEN_DialogProperty_Value, 0, page, 0); GWEN_Dialog_SetCharProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Title, 0, I18N("Finish"), 0); GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 1, 0); GWEN_Dialog_SetIntProperty(dlg, "wiz_prev_button", GWEN_DialogProperty_Enabled, 0, 0, 0); GWEN_Dialog_SetIntProperty(dlg, "wiz_abort_button", GWEN_DialogProperty_Enabled, 0, 0, 0); return GWEN_DialogEvent_ResultHandled; default: return GWEN_DialogEvent_ResultHandled; } return GWEN_DialogEvent_ResultHandled; } int _addUserAndSetupWithBankServer(GWEN_DIALOG *dlg) { AH_PINTAN_DIALOG *xdlg; AB_USER *u; int rv; uint32_t pid; DBG_INFO(AQHBCI_LOGDOMAIN, "Create and Setup PinTan HBCI User"); assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_PINTAN_DIALOG, dlg); assert(xdlg); DBG_INFO(AQHBCI_LOGDOMAIN, "Creating user"); u=_createAndSetupUser(dlg, 0); if (u==NULL) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not create user, maybe backend missing?"); // TODO: show error message return GWEN_DialogEvent_ResultHandled; } DBG_INFO(AQHBCI_LOGDOMAIN, "Adding user"); rv=AB_Provider_AddUser(xdlg->provider, u); if (rv<0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not add user (%d)", rv); AB_User_free(u); return GWEN_DialogEvent_ResultHandled; } pid=GWEN_Gui_ProgressStart(GWEN_GUI_PROGRESS_DELAY | GWEN_GUI_PROGRESS_ALLOW_EMBED | GWEN_GUI_PROGRESS_SHOW_PROGRESS | GWEN_GUI_PROGRESS_SHOW_ABORT, I18N("Setting Up PIN/TAN User"), I18N("The system id and a list of accounts will be retrieved."), 4, 0); /* lock new user */ DBG_INFO(AQHBCI_LOGDOMAIN, "Locking user"); rv=AB_Provider_BeginExclUseUser(xdlg->provider, u); if (rv<0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not lock user (%d)", rv); GWEN_Gui_ProgressLog(pid, GWEN_LoggerLevel_Error, I18N("Unable to lock users")); AB_Provider_DeleteUser(xdlg->provider, AB_User_GetUniqueId(u)); GWEN_Gui_ProgressEnd(pid); return GWEN_DialogEvent_ResultHandled; } /* do all the magic stuff */ rv=_setupLockedUserWithBankServer(dlg, u, pid); if (rv<0) { AB_Provider_EndExclUseUser(xdlg->provider, u, 1); DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); AB_Provider_DeleteUser(xdlg->provider, AB_User_GetUniqueId(u)); GWEN_Gui_ProgressLog(pid, GWEN_LoggerLevel_Error, I18N("Aborted by user.")); GWEN_Gui_ProgressEnd(pid); return GWEN_DialogEvent_ResultHandled; } /* unlock user */ DBG_INFO(AQHBCI_LOGDOMAIN, "Unlocking user"); rv=AB_Provider_EndExclUseUser(xdlg->provider, u, 0); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "Could not unlock customer [%s] (%d)", AB_User_GetCustomerId(u), rv); GWEN_Gui_ProgressLog2(pid, GWEN_LoggerLevel_Error, I18N("Could not unlock user %s (%d)"), AB_User_GetUserId(u), rv); AB_Provider_EndExclUseUser(xdlg->provider, u, 1); AB_Provider_DeleteUser(xdlg->provider, AB_User_GetUniqueId(u)); GWEN_Gui_ProgressEnd(pid); return GWEN_DialogEvent_ResultHandled; } GWEN_Dialog_SetCharProperty(dlg, "wiz_end_label", GWEN_DialogProperty_Title, 0, I18N("The user has been successfully setup."), 0); GWEN_Gui_ProgressEnd(pid); _dialogEnterPage(dlg, PAGE_END, 1); xdlg->user=u; return GWEN_DialogEvent_ResultHandled; } AB_USER *_createAndSetupUser(GWEN_DIALOG *dlg, uint32_t pid) { AH_PINTAN_DIALOG *xdlg; AB_USER *u; GWEN_URL *url; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_PINTAN_DIALOG, dlg); assert(xdlg); DBG_INFO(0, "Creating user"); u=AB_Provider_CreateUserObject(xdlg->provider); if (u==NULL) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not create user, maybe backend missing?"); // TODO: show error message return NULL; } /* generic setup */ AB_User_SetUserName(u, xdlg->userName); AB_User_SetUserId(u, xdlg->userId); if (xdlg->customerId && *(xdlg->customerId)) AB_User_SetCustomerId(u, xdlg->customerId); else AB_User_SetCustomerId(u, xdlg->userId); AB_User_SetCountry(u, "de"); AB_User_SetBankCode(u, xdlg->bankCode); /* HBCI setup */ AH_User_SetTokenType(u, "pintan"); AH_User_SetCryptMode(u, AH_CryptMode_Pintan); AH_User_SetStatus(u, AH_UserStatusEnabled); url=GWEN_Url_fromString(xdlg->url); assert(url); GWEN_Url_SetProtocol(url, "https"); if (GWEN_Url_GetPort(url)==0) GWEN_Url_SetPort(url, 443); AH_User_SetServerUrl(u, url); GWEN_Url_free(url); AH_User_SetHbciVersion(u, xdlg->hbciVersion); AH_User_SetHttpVMajor(u, xdlg->httpVMajor); AH_User_SetHttpVMinor(u, xdlg->httpVMinor); AH_User_SetFlags(u, xdlg->flags); AH_User_SetTanMediumId(u, xdlg->tanMediumId); return u; } int _setupLockedUserWithBankServer(GWEN_DIALOG *dlg, AB_USER *u, uint32_t pid) { AH_PINTAN_DIALOG *xdlg; int rv; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_PINTAN_DIALOG, dlg); assert(xdlg); rv=_getCertificate(xdlg->provider, u, pid); if (rv<0) { DBG_NOTICE(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } rv=_getBankInfoAnon(xdlg->provider, u, pid); if (rv<0) { DBG_NOTICE(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } rv=_getSystemId(xdlg->provider, u, pid); if (rv<0) { DBG_NOTICE(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } /* select TAN method */ rv=_selectTanMethod(dlg, u, 0); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } rv=_getAccountList(xdlg->provider, u, pid); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } return 0; } int _getCertificate(AB_PROVIDER *pro, AB_USER *u, uint32_t pid) { int rv; DBG_NOTICE(0, "Getting cert (%08x)", AH_User_GetFlags(u)); GWEN_Gui_ProgressLog(pid, GWEN_LoggerLevel_Notice, I18N("Retrieving SSL certificate")); rv=AH_Provider_GetCert(pro, u, 0, 1, 0); if (rv<0) { DBG_NOTICE(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } rv=GWEN_Gui_ProgressAdvance(pid, GWEN_GUI_PROGRESS_ONE); if (rv==GWEN_ERROR_USER_ABORTED) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } return 0; } int _getBankInfoAnon(AB_PROVIDER *pro, AB_USER *u, uint32_t pid) { AB_IMEXPORTER_CONTEXT *ctx; int rv; /* get bank info (for SCA) */ DBG_NOTICE(0, "Getting generic bank info"); GWEN_Gui_ProgressLog(pid, GWEN_LoggerLevel_Notice, ""); GWEN_Gui_ProgressLog(pid, GWEN_LoggerLevel_Notice, I18N("Retrieving generic bank info (SCA)")); ctx=AB_ImExporterContext_new(); rv=AH_Provider_GetBankInfo(pro, u, ctx, 0 /* without HKTAN */, 0, 1, 0); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "Error getting bank info (%d), ignoring", rv); GWEN_Gui_ProgressLog(pid, GWEN_LoggerLevel_Notice, I18N("This step failed but that's okay, some banks just don't support it.")); } AB_ImExporterContext_free(ctx); rv=GWEN_Gui_ProgressAdvance(pid, GWEN_GUI_PROGRESS_ONE); if (rv==GWEN_ERROR_USER_ABORTED) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } return 0; } int _getSystemId(AB_PROVIDER *pro, AB_USER *u, uint32_t pid) { AB_IMEXPORTER_CONTEXT *ctx; int rv; DBG_NOTICE(0, "Getting sysid"); GWEN_Gui_ProgressLog(pid, GWEN_LoggerLevel_Notice, ""); GWEN_Gui_ProgressLog(pid, GWEN_LoggerLevel_Notice, I18N("Retrieving system id")); ctx=AB_ImExporterContext_new(); rv=AH_Provider_GetSysId(pro, u, ctx, 0, 1, 0); if (rv<0) { AB_ImExporterContext_free(ctx); DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } AB_ImExporterContext_free(ctx); rv=GWEN_Gui_ProgressAdvance(pid, GWEN_GUI_PROGRESS_ONE); if (rv==GWEN_ERROR_USER_ABORTED) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } return 0; } int _getAccountList(AB_PROVIDER *pro, AB_USER *u, uint32_t pid) { AB_IMEXPORTER_CONTEXT *ctx; int rv; /* get account list */ DBG_NOTICE(0, "Getting account list"); GWEN_Gui_ProgressLog(pid, GWEN_LoggerLevel_Notice, ""); GWEN_Gui_ProgressLog(pid, GWEN_LoggerLevel_Notice, I18N("Retrieving account list")); ctx=AB_ImExporterContext_new(); rv=AH_Provider_GetAccounts(pro, u, ctx, 0, 1, 0); if (rv<0) { AB_ImExporterContext_free(ctx); DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } AB_ImExporterContext_free(ctx); rv=GWEN_Gui_ProgressAdvance(pid, GWEN_GUI_PROGRESS_ONE); if (rv==GWEN_ERROR_USER_ABORTED) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } return 0; } int _dialogNext(GWEN_DIALOG *dlg) { AH_PINTAN_DIALOG *xdlg; int page; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_PINTAN_DIALOG, dlg); assert(xdlg); page=GWEN_Dialog_GetIntProperty(dlg, "wiz_stack", GWEN_DialogProperty_Value, 0, -1); if (page==PAGE_CREATE) { return _addUserAndSetupWithBankServer(dlg); } else if (pagePAGE_BEGIN) { page--; return _dialogEnterPage(dlg, page, 0); } return GWEN_DialogEvent_ResultHandled; } int _handleSignalActivatedBankCode(GWEN_DIALOG *dlg) { AH_PINTAN_DIALOG *xdlg; GWEN_DIALOG *dlg2; int rv; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_PINTAN_DIALOG, dlg); assert(xdlg); dlg2=AB_SelectBankInfoDialog_new(xdlg->banking, "de", NULL); if (dlg2==NULL) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not create dialog"); return GWEN_DialogEvent_ResultHandled; } rv=GWEN_Gui_ExecDialog(dlg2, 0); if (rv==0) { /* rejected */ GWEN_Dialog_free(dlg2); return GWEN_DialogEvent_ResultHandled; } else { const AB_BANKINFO *bi; bi=AB_SelectBankInfoDialog_GetSelectedBankInfo(dlg2); if (bi) { const char *s; AB_BANKINFO_SERVICE *sv; s=AB_BankInfo_GetBankId(bi); GWEN_Dialog_SetCharProperty(dlg, "wiz_bankcode_edit", GWEN_DialogProperty_Value, 0, (s && *s)?s:"", 0); s=AB_BankInfo_GetBankName(bi); GWEN_Dialog_SetCharProperty(dlg, "wiz_bankname_edit", GWEN_DialogProperty_Value, 0, (s && *s)?s:"", 0); sv=AB_BankInfoService_List_First(AB_BankInfo_GetServices(bi)); while (sv) { const char *s; s=AB_BankInfoService_GetType(sv); if (s && *s && strcasecmp(s, "HBCI")==0) { s=AB_BankInfoService_GetMode(sv); if (s && *s && strcasecmp(s, "PINTAN")==0) break; } sv=AB_BankInfoService_List_Next(sv); } if (sv) { /* PIN/TAN service found */ s=AB_BankInfoService_GetAddress(sv); GWEN_Dialog_SetCharProperty(dlg, "wiz_url_edit", GWEN_DialogProperty_Value, 0, (s && *s)?s:"", 0); s=AB_BankInfoService_GetPversion(sv); if (s && *s) { if (strcasecmp(s, "2.01")==0 || strcasecmp(s, "2")==0) xdlg->hbciVersion=201; else if (strcasecmp(s, "2.10")==0 || strcasecmp(s, "2.1")==0) xdlg->hbciVersion=210; else if (strcasecmp(s, "2.20")==0 || strcasecmp(s, "2.2")==0) xdlg->hbciVersion=220; else if (strcasecmp(s, "3.00")==0 || strcasecmp(s, "3.0")==0 || strcasecmp(s, "3")==0) xdlg->hbciVersion=300; else if (strcasecmp(s, "4.00")==0 || strcasecmp(s, "4.0")==0 || strcasecmp(s, "4")==0) xdlg->hbciVersion=400; } } } } GWEN_Dialog_free(dlg2); if (_getBankPageData(dlg)<0) GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 0, 0); else GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 1, 0); return GWEN_DialogEvent_ResultHandled; } int _handleSignalActivatedSpecial(GWEN_DIALOG *dlg) { AH_PINTAN_DIALOG *xdlg; GWEN_DIALOG *dlg2; int rv; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_PINTAN_DIALOG, dlg); assert(xdlg); dlg2=AH_PinTanSpecialDialog_new(xdlg->provider); if (dlg2==NULL) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not create dialog"); return GWEN_DialogEvent_ResultHandled; } AH_PinTanSpecialDialog_SetHttpVersion(dlg2, xdlg->httpVMajor, xdlg->httpVMinor); AH_PinTanSpecialDialog_SetHbciVersion(dlg2, xdlg->hbciVersion); AH_PinTanSpecialDialog_SetFlags(dlg2, xdlg->flags); AH_PinTanSpecialDialog_SetTanMediumId(dlg2, xdlg->tanMediumId); rv=GWEN_Gui_ExecDialog(dlg2, 0); if (rv==0) { /* rejected */ GWEN_Dialog_free(dlg2); return GWEN_DialogEvent_ResultHandled; } else { xdlg->httpVMajor=AH_PinTanSpecialDialog_GetHttpVMajor(dlg2); xdlg->httpVMinor=AH_PinTanSpecialDialog_GetHttpVMinor(dlg2); xdlg->hbciVersion=AH_PinTanSpecialDialog_GetHbciVersion(dlg2); xdlg->flags=AH_PinTanSpecialDialog_GetFlags(dlg2); _setTanMediumId(dlg, AH_PinTanSpecialDialog_GetTanMediumId(dlg2)); } GWEN_Dialog_free(dlg2); return GWEN_DialogEvent_ResultHandled; } int _handleSignalActivated(GWEN_DIALOG *dlg, const char *sender) { DBG_NOTICE(0, "Activated: %s", sender); if (strcasecmp(sender, "wiz_bankcode_button")==0) return _handleSignalActivatedBankCode(dlg); else if (strcasecmp(sender, "wiz_prev_button")==0) return _dialogPrevious(dlg); else if (strcasecmp(sender, "wiz_next_button")==0) return _dialogNext(dlg); else if (strcasecmp(sender, "wiz_abort_button")==0) return GWEN_DialogEvent_ResultReject; else if (strcasecmp(sender, "wiz_special_button")==0) return _handleSignalActivatedSpecial(dlg); else if (strcasecmp(sender, "wiz_help_button")==0) { /* TODO: open a help dialog */ } return GWEN_DialogEvent_ResultNotHandled; } int _handleSignalValueChanged(GWEN_DIALOG *dlg, const char *sender) { if (strcasecmp(sender, "wiz_bankcode_edit")==0 || strcasecmp(sender, "wiz_url_edit")==0 || strcasecmp(sender, "wiz_username_edit")==0 || strcasecmp(sender, "wiz_userid_edit")==0 || strcasecmp(sender, "wiz_customerid_edit")==0) { int rv; if (GWEN_Dialog_GetIntProperty(dlg, "wiz_stack", GWEN_DialogProperty_Value, 0, -1)==PAGE_BANK) { rv=_getBankPageData(dlg); if (rv<0) GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 0, 0); else GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 1, 0); } else if (GWEN_Dialog_GetIntProperty(dlg, "wiz_stack", GWEN_DialogProperty_Value, 0, -1)==PAGE_USER) { rv=_getUserPageData(dlg); if (rv<0) GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 0, 0); else GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 1, 0); } return GWEN_DialogEvent_ResultHandled; } return GWEN_DialogEvent_ResultNotHandled; } int GWENHYWFAR_CB _dlgApi_SignalHandler(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender) { AH_PINTAN_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_PINTAN_DIALOG, dlg); assert(xdlg); switch (t) { case GWEN_DialogEvent_TypeInit: _dialogInit(dlg); return GWEN_DialogEvent_ResultHandled;; case GWEN_DialogEvent_TypeFini: _dialogFini(dlg); return GWEN_DialogEvent_ResultHandled;; case GWEN_DialogEvent_TypeValueChanged: return _handleSignalValueChanged(dlg, sender); case GWEN_DialogEvent_TypeActivated: return _handleSignalActivated(dlg, sender); case GWEN_DialogEvent_TypeEnabled: case GWEN_DialogEvent_TypeDisabled: case GWEN_DialogEvent_TypeClose: case GWEN_DialogEvent_TypeLast: default: return GWEN_DialogEvent_ResultNotHandled; } return GWEN_DialogEvent_ResultNotHandled; } int _selectTanMethod(GWEN_DIALOG *dlg, AB_USER *u, int doLock) { AH_PINTAN_DIALOG *xdlg; GWEN_DIALOG *dlg2; int rv; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_PINTAN_DIALOG, dlg); assert(xdlg); dlg2=AH_PinTan_TanModeDialog_new(xdlg->provider, u, doLock); if (dlg2==NULL) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not create dialog"); return GWEN_DialogEvent_ResultHandled; } rv=GWEN_Gui_ExecDialog(dlg2, 0); if (rv==0) { /* rejected */ GWEN_Dialog_free(dlg2); return GWEN_ERROR_USER_ABORTED; } GWEN_Dialog_free(dlg2); return 0; } void _removeAllSpaces(uint8_t *s) { uint8_t *d; d=s; while (*s) { if (*s>33) *(d++)=*s; s++; } *d=0; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/dialogs/dlg_ddvcard.dlg0000664000175000017500000000736514043610745023172 00000000000000 aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/dialogs/dlg_pintan_tanmode.dlg0000664000175000017500000000254014043610745024551 00000000000000 aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/dialogs/chipcard.png0000664000175000017500000000034714043610745022521 00000000000000‰PNG  IHDR szzô pHYs a Äî–@µ™IDATX…c`£` 0`DĉĴ¸ó˙?=,Pa„Û gËrtG0ÑÓRl`ÔẌÑAGˆ!ğ#ÄE] ]§Ž9Œ—TĴ9baĊšó kÎTςMĈĈƒżò.f&Áĉ#˜ÄŠB›ïC€l` brÀƒÏA£ѨF0àíQ0 FÁ( oB[GĵOôIENDB`‚aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/dialogs/dlg_rdh_special_p.h0000664000175000017500000000217414043610745024031 00000000000000/*************************************************************************** begin : Sat Jun 26 2010 copyright : (C) 2018 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQHBCI_DLG_RDH_SPECIAL_P_H #define AQHBCI_DLG_RDH_SPECIAL_P_H #include "dlg_rdh_special_l.h" typedef struct AH_RDH_SPECIAL_DIALOG AH_RDH_SPECIAL_DIALOG; struct AH_RDH_SPECIAL_DIALOG { AB_BANKING *banking; AB_PROVIDER *provider; int hbciVersion; int rdhVersion; int cryptMode; uint32_t flags; }; static void GWENHYWFAR_CB AH_RdhSpecialDialog_FreeData(void *bp, void *p); static int GWENHYWFAR_CB AH_RdhSpecialDialog_SignalHandler(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/dialogs/dlg_pintan_special_l.h0000664000175000017500000000320014043610745024530 00000000000000/*************************************************************************** begin : Mon Apr 12 2010 copyright : (C) 2018 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQHBCI_DLG_PINTAN_SPECIAL_H #define AQHBCI_DLG_PINTAN_SPECIAL_H #include #include #include #include #include #ifdef __cplusplus extern "C" { #endif GWEN_DIALOG *AH_PinTanSpecialDialog_new(AB_PROVIDER *pro); int AH_PinTanSpecialDialog_GetHttpVMajor(const GWEN_DIALOG *dlg); int AH_PinTanSpecialDialog_GetHttpVMinor(const GWEN_DIALOG *dlg); void AH_PinTanSpecialDialog_SetHttpVersion(GWEN_DIALOG *dlg, int vmajor, int vminor); int AH_PinTanSpecialDialog_GetHbciVersion(const GWEN_DIALOG *dlg); void AH_PinTanSpecialDialog_SetHbciVersion(GWEN_DIALOG *dlg, int i); uint32_t AH_PinTanSpecialDialog_GetFlags(const GWEN_DIALOG *dlg); void AH_PinTanSpecialDialog_SetFlags(GWEN_DIALOG *dlg, uint32_t fl); void AH_PinTanSpecialDialog_AddFlags(GWEN_DIALOG *dlg, uint32_t fl); void AH_PinTanSpecialDialog_SubFlags(GWEN_DIALOG *dlg, uint32_t fl); const char *AH_PinTanSpecialDialog_GetTanMediumId(const GWEN_DIALOG *dlg); void AH_PinTanSpecialDialog_SetTanMediumId(GWEN_DIALOG *dlg, const char *s); #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/dialogs/dlg_edituserrdh.c0000664000175000017500000004456214625171605023564 00000000000000/*************************************************************************** begin : Thu Jul 08 2010 copyright : (C) 2024 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "dlg_edituserrdh_p.h" #include "w_hbciversioncombo.h" #include "w_rdhversioncombo.h" #include "w_userstatuscombo.h" #include "w_utils.h" #include "aqhbci/banking/provider_l.h" #include "aqhbci/banking/user.h" #include "aqhbci/banking/provider.h" #include "aqhbci/banking/provider_online.h" #include "aqhbci/banking/provider_iniletter.h" #include "aqbanking/i18n_l.h" #include #include #include #include #include #include #include #include #include /* ------------------------------------------------------------------------------------------------ * defines, types * ------------------------------------------------------------------------------------------------ */ #define DIALOG_MINWIDTH 200 #define DIALOG_MINHEIGHT 200 /* for improved readability */ #define DLG_WITHPROGRESS 1 #define DLG_UMOUNT 0 #define DLG_DIALOGFILE "aqbanking/backends/aqhbci/dialogs/dlg_edituserrdh.dlg" typedef int (*_DIALOG_SIGNAL_HANDLER_FN)(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender); typedef struct _DIALOG_SIGNAL_ENTRY _DIALOG_SIGNAL_ENTRY; struct _DIALOG_SIGNAL_ENTRY { const char *sender; GWEN_DIALOG_EVENTTYPE eventType; _DIALOG_SIGNAL_HANDLER_FN handlerFn; }; /* ------------------------------------------------------------------------------------------------ * forward declarations * ------------------------------------------------------------------------------------------------ */ static void GWENHYWFAR_CB _freeData(void *bp, void *p); static int GWENHYWFAR_CB _dlgApi_signalHandler(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender); static void _toGui(GWEN_DIALOG *dlg, AB_USER *user); static int _fromGui(GWEN_DIALOG *dlg, AB_USER *u, int quiet); static int _handleInit(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender); static int _handleFini(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender); static int _handleActivatedBankCode(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender); static int _handleActivatedOk(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender); static int _handleActivatedApply(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender); static int _handleActivatedReject(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender); static int _handleActivatedGetSysId(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender); static int _handleActivatedGetAccounts(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender); static int _handleActivatedIniLetter(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender); static int _handleValueChanged(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender); static int _saveUser(GWEN_DIALOG *dlg); static void _setModified(GWEN_DIALOG *dlg, int enabled); /* ------------------------------------------------------------------------------------------------ * static vars * ------------------------------------------------------------------------------------------------ */ GWEN_INHERIT(GWEN_DIALOG, AH_EDIT_USER_RDH_DIALOG) static _DIALOG_SIGNAL_ENTRY _signalMap[]={ {NULL, GWEN_DialogEvent_TypeInit, _handleInit}, {NULL, GWEN_DialogEvent_TypeFini, _handleFini}, {"bankCodeButton", GWEN_DialogEvent_TypeActivated, _handleActivatedBankCode}, {"getSysIdButton", GWEN_DialogEvent_TypeActivated, _handleActivatedGetSysId}, {"getAccountsButton", GWEN_DialogEvent_TypeActivated, _handleActivatedGetAccounts}, {"iniLetterButton", GWEN_DialogEvent_TypeActivated, _handleActivatedIniLetter}, {"userNameEdit", GWEN_DialogEvent_TypeValueChanged, _handleValueChanged}, {"bankCodeEdit", GWEN_DialogEvent_TypeValueChanged, _handleValueChanged}, {"userIdEdit", GWEN_DialogEvent_TypeValueChanged, _handleValueChanged}, {"customerIdEdit", GWEN_DialogEvent_TypeValueChanged, _handleValueChanged}, {"urlEdit", GWEN_DialogEvent_TypeValueChanged, _handleValueChanged}, {"hbciVersionCombo", GWEN_DialogEvent_TypeActivated, _handleValueChanged}, {"rdhVersionCombo", GWEN_DialogEvent_TypeActivated, _handleValueChanged}, {"statusCombo", GWEN_DialogEvent_TypeActivated, _handleValueChanged}, {"bankDoesntSignCheck", GWEN_DialogEvent_TypeActivated, _handleValueChanged}, {"bankUsesSignSeqCheck", GWEN_DialogEvent_TypeActivated, _handleValueChanged}, {"okButton", GWEN_DialogEvent_TypeActivated, _handleActivatedOk}, {"applyButton", GWEN_DialogEvent_TypeActivated, _handleActivatedApply}, {"abortButton", GWEN_DialogEvent_TypeActivated, _handleActivatedReject}, {NULL, 0, NULL} }; /* ------------------------------------------------------------------------------------------------ * implementations * ------------------------------------------------------------------------------------------------ */ GWEN_DIALOG *AH_EditUserRdhDialog_new(AB_PROVIDER *pro, AB_USER *u, int doLock) { GWEN_DIALOG *dlg; AH_EDIT_USER_RDH_DIALOG *xdlg; dlg=GWEN_Dialog_CreateAndLoadWithPath("ah_edit_user_rdh", AB_PM_LIBNAME, AB_PM_DATADIR, DLG_DIALOGFILE); if (dlg==NULL) { DBG_INFO(AQHBCI_LOGDOMAIN, "here"); return NULL; } GWEN_NEW_OBJECT(AH_EDIT_USER_RDH_DIALOG, xdlg); GWEN_INHERIT_SETDATA(GWEN_DIALOG, AH_EDIT_USER_RDH_DIALOG, dlg, xdlg, _freeData); GWEN_Dialog_SetSignalHandler(dlg, _dlgApi_signalHandler); /* preset */ xdlg->provider=pro; xdlg->banking=AB_Provider_GetBanking(pro); xdlg->user=u; xdlg->doLock=doLock; /* done */ return dlg; } void GWENHYWFAR_CB _freeData(void *bp, void *p) { AH_EDIT_USER_RDH_DIALOG *xdlg; xdlg=(AH_EDIT_USER_RDH_DIALOG *) p; GWEN_FREE_OBJECT(xdlg); } int _handleInit(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender) { AH_EDIT_USER_RDH_DIALOG *xdlg; GWEN_DB_NODE *dbPrefs; int i; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_EDIT_USER_RDH_DIALOG, dlg); assert(xdlg); dbPrefs=GWEN_Dialog_GetPreferences(dlg); GWEN_Dialog_SetCharProperty(dlg, "", GWEN_DialogProperty_Title, 0, I18N("Edit User"), 0); AH_Widget_HbciVersionComboSetup(dlg, "hbciVersionCombo"); AH_Widget_RdhVersionComboSetup(dlg, "rdhVersionCombo"); AH_Widget_UserStatusComboSetup(dlg, "statusCombo"); _toGui(dlg, xdlg->user); /* read width */ i=GWEN_DB_GetIntValue(dbPrefs, "dialog_width", 0, -1); if (i>=DIALOG_MINWIDTH) GWEN_Dialog_SetIntProperty(dlg, "", GWEN_DialogProperty_Width, 0, i, 0); /* read height */ i=GWEN_DB_GetIntValue(dbPrefs, "dialog_height", 0, -1); if (i>=DIALOG_MINHEIGHT) GWEN_Dialog_SetIntProperty(dlg, "", GWEN_DialogProperty_Height, 0, i, 0); return GWEN_DialogEvent_ResultHandled; } void _toGui(GWEN_DIALOG *dlg, AB_USER *user) { const GWEN_URL *gu; uint32_t flags; AH_Widget_UserToGuiText(dlg, "userNameEdit", user, AB_User_GetUserName); AH_Widget_UserToGuiText(dlg, "bankCodeEdit", user, AB_User_GetBankCode); AH_Widget_UserToGuiText(dlg, "userIdEdit", user, AB_User_GetUserId); AH_Widget_UserToGuiText(dlg, "customerIdEdit", user, AB_User_GetCustomerId); gu=AH_User_GetServerUrl(user); if (gu) { GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Url_toString(gu, tbuf); GWEN_Dialog_SetCharProperty(dlg, "urlEdit", GWEN_DialogProperty_Value, 0, GWEN_Buffer_GetStart(tbuf), 0); GWEN_Buffer_free(tbuf); } AH_Widget_HbciVersionComboSetCurrent(dlg, "hbciVersionCombo", AH_User_GetHbciVersion(user)); AH_Widget_RdhVersionComboSetCurrent(dlg, "rdhVersionCombo", (AH_User_GetCryptMode(user)<<8)+AH_User_GetRdhType(user)); AH_Widget_UserStatusComboSetCurrent(dlg, "statusCombo", AH_User_GetStatus(user)); flags=AH_User_GetFlags(user); GWEN_Dialog_SetIntProperty(dlg, "bankDoesntSignCheck", GWEN_DialogProperty_Value, 0, (flags & AH_USER_FLAGS_BANK_DOESNT_SIGN)?1:0, 0); GWEN_Dialog_SetIntProperty(dlg, "bankUsesSignSeqCheck", GWEN_DialogProperty_Value, 0, (flags & AH_USER_FLAGS_BANK_USES_SIGNSEQ)?1:0, 0); _setModified(dlg, 0); } int _fromGui(GWEN_DIALOG *dlg, AB_USER *u, int quiet) { int i; uint32_t flags; GWEN_URL *gu; if (AH_Widget_GuiTextToUserKeepSpaces(dlg, "userNameEdit", u, AB_User_SetUserName, NULL)<0 || AH_Widget_GuiTextToUserDeleSpaces(dlg, "bankCodeEdit", u, AB_User_SetBankCode, NULL)<0 || AH_Widget_GuiTextToUserKeepSpaces(dlg, "userIdEdit", u, AB_User_SetUserId, quiet?NULL:I18N("Missing user id"))<0 || AH_Widget_GuiTextToUserKeepSpaces(dlg, "customerIdEdit", u, AB_User_SetCustomerId, NULL)<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here"); return GWEN_ERROR_INVALID; } /* get country */ if (u) AB_User_SetCountry(u, "de"); i=AH_Widget_HbciVersionComboGetCurrent(dlg, "hbciVersionCombo"); if (u) AH_User_SetHbciVersion(u, i); i=AH_Widget_RdhVersionComboGetCurrent(dlg, "rdhVersionCombo"); if (u) { AH_User_SetCryptMode(u, i>>8); AH_User_SetRdhType(u, i & 0xff); } i=AH_Widget_UserStatusComboGetCurrent(dlg, "statusCombo"); if (u) AH_User_SetStatus(u, i); gu=AH_Widget_GuiTextToUrl(dlg, "urlEdit", 3000); if (gu==NULL) { if (!quiet) { GWEN_Gui_ShowError(I18N("Error"), "%s", I18N("Invalid URL")); return GWEN_ERROR_BAD_DATA; } } if (u) AH_User_SetServerUrl(u, gu); GWEN_Url_free(gu); flags=0; if (GWEN_Dialog_GetIntProperty(dlg, "bankDoesntSignCheck", GWEN_DialogProperty_Value, 0, 0)) flags|=AH_USER_FLAGS_BANK_DOESNT_SIGN; if (GWEN_Dialog_GetIntProperty(dlg, "bankUsesSignSeqCheck", GWEN_DialogProperty_Value, 0, 0)) flags|=AH_USER_FLAGS_BANK_USES_SIGNSEQ; AH_User_SetFlags(u, flags); return 0; } int _handleFini(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender) { AH_EDIT_USER_RDH_DIALOG *xdlg; int i; GWEN_DB_NODE *dbPrefs; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_EDIT_USER_RDH_DIALOG, dlg); assert(xdlg); dbPrefs=GWEN_Dialog_GetPreferences(dlg); /* store dialog width */ i=GWEN_Dialog_GetIntProperty(dlg, "", GWEN_DialogProperty_Width, 0, -1); GWEN_DB_SetIntValue(dbPrefs, GWEN_DB_FLAGS_OVERWRITE_VARS, "dialog_width", i); /* store dialog height */ i=GWEN_Dialog_GetIntProperty(dlg, "", GWEN_DialogProperty_Height, 0, -1); GWEN_DB_SetIntValue(dbPrefs, GWEN_DB_FLAGS_OVERWRITE_VARS, "dialog_height", i); return GWEN_DialogEvent_ResultHandled; } int _handleActivatedBankCode(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender) { AH_EDIT_USER_RDH_DIALOG *xdlg; GWEN_DIALOG *dlg2; int rv; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_EDIT_USER_RDH_DIALOG, dlg); assert(xdlg); dlg2=AB_SelectBankInfoDialog_new(xdlg->banking, "de", GWEN_Dialog_GetCharProperty(dlg, "bankCodeEdit", GWEN_DialogProperty_Value, 0, NULL)); if (dlg2==NULL) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not create dialog"); GWEN_Gui_ShowError(I18N("Error"), "%s", I18N("Could create dialog, maybe incomplete installation?")); return GWEN_DialogEvent_ResultHandled; } rv=GWEN_Gui_ExecDialog(dlg2, 0); if (rv==0) { /* rejected */ GWEN_Dialog_free(dlg2); return GWEN_DialogEvent_ResultHandled; } else { const AB_BANKINFO *bi; bi=AB_SelectBankInfoDialog_GetSelectedBankInfo(dlg2); if (bi) { const char *s; s=AB_BankInfo_GetBankId(bi); GWEN_Dialog_SetCharProperty(dlg, "bankCodeEdit", GWEN_DialogProperty_Value, 0, (s && *s)?s:"", 0); } } GWEN_Dialog_free(dlg2); return GWEN_DialogEvent_ResultHandled; } int _handleActivatedOk(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender) { int rv; rv=_saveUser(dlg); if (rv==0) return GWEN_DialogEvent_ResultAccept; return GWEN_DialogEvent_ResultHandled; } int _handleActivatedApply(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender) { int rv; rv=_saveUser(dlg); if (rv==0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); } return GWEN_DialogEvent_ResultHandled; } int _saveUser(GWEN_DIALOG *dlg) { AH_EDIT_USER_RDH_DIALOG *xdlg; int rv; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_EDIT_USER_RDH_DIALOG, dlg); assert(xdlg); rv=_fromGui(dlg, NULL, 0); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } if (xdlg->doLock) { int rv; rv=AB_Provider_BeginExclUseUser(xdlg->provider, xdlg->user); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); GWEN_Gui_ShowError(I18N("Error"), "%s", I18N("Unable to lock user. Maybe already in use?")); return rv; } } _fromGui(dlg, xdlg->user, 1); if (xdlg->doLock) { int rv; rv=AB_Provider_EndExclUseUser(xdlg->provider, xdlg->user, 0); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); GWEN_Gui_ShowError(I18N("Error"), "%s", I18N("Unable to unlock user.")); AB_Provider_EndExclUseUser(xdlg->provider, xdlg->user, 1); return rv; } } return 0; } int _handleActivatedReject(GWEN_DIALOG *dlg, GWEN_UNUSED GWEN_DIALOG_EVENTTYPE t, GWEN_UNUSED const char *sender) { return GWEN_DialogEvent_ResultReject; } int _handleActivatedGetSysId(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender) { AH_EDIT_USER_RDH_DIALOG *xdlg; int rv; AB_IMEXPORTER_CONTEXT *ctx; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_EDIT_USER_RDH_DIALOG, dlg); assert(xdlg); if (xdlg->modified) { GWEN_Gui_ShowError(I18N("User Modified"), "%s", I18N("Please apply current changes first.")); return GWEN_DialogEvent_ResultHandled; } ctx=AB_ImExporterContext_new(); rv=AH_Provider_GetSysId(xdlg->provider, xdlg->user, ctx, DLG_WITHPROGRESS, DLG_UMOUNT, xdlg->doLock); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); } _toGui(dlg, xdlg->user); AB_ImExporterContext_free(ctx); return GWEN_DialogEvent_ResultHandled; } int _handleActivatedGetAccounts(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender) { AH_EDIT_USER_RDH_DIALOG *xdlg; int rv; AB_IMEXPORTER_CONTEXT *ctx; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_EDIT_USER_RDH_DIALOG, dlg); assert(xdlg); if (xdlg->modified) { GWEN_Gui_ShowError(I18N("User Modified"), "%s", I18N("Please apply current changes first.")); return GWEN_DialogEvent_ResultHandled; } ctx=AB_ImExporterContext_new(); rv=AH_Provider_GetAccounts(xdlg->provider, xdlg->user, ctx, DLG_WITHPROGRESS, DLG_UMOUNT, xdlg->doLock); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); } _toGui(dlg, xdlg->user); AB_ImExporterContext_free(ctx); return GWEN_DialogEvent_ResultHandled; } int _handleActivatedIniLetter(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender) { AH_EDIT_USER_RDH_DIALOG *xdlg; int rv; GWEN_BUFFER *tbuf; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_EDIT_USER_RDH_DIALOG, dlg); assert(xdlg); tbuf=GWEN_Buffer_new(0, 16536, 0, 1); /* add HTML version of the INI letter */ GWEN_Buffer_AppendString(tbuf, ""); rv=AH_Provider_GetIniLetterHtml(xdlg->provider, xdlg->user, 0, 0, tbuf, 1); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); // TODO: show error message AB_Banking_ClearCryptTokenList(xdlg->banking); GWEN_Buffer_free(tbuf); return GWEN_DialogEvent_ResultHandled; } GWEN_Buffer_AppendString(tbuf, ""); /* add ASCII version of the INI letter for frontends which don't support HTML */ rv=AH_Provider_GetIniLetterTxt(xdlg->provider, xdlg->user, 0, 0, tbuf, 0); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); // TODO: show error message AB_Banking_ClearCryptTokenList(xdlg->banking); GWEN_Buffer_free(tbuf); return GWEN_DialogEvent_ResultHandled; } /* show INI letter before printing (workaround for missing GWEN_Gui_Print under qt4/5) */ GWEN_Gui_MessageBox(GWEN_GUI_MSG_FLAGS_SEVERITY_NORMAL | GWEN_GUI_MSG_FLAGS_TYPE_ERROR | GWEN_GUI_MSG_FLAGS_CONFIRM_B1, I18N("INI Letter for HBCI"), GWEN_Buffer_GetStart(tbuf), I18N("Dismiss"), NULL, NULL, 0); // GWEN_Gui_Print does not seem to be implemented for qt4/5 yet rv=GWEN_Gui_Print(I18N("INI Letter"), "HBCI-INILETTER", I18N("INI Letter for HBCI"), GWEN_Buffer_GetStart(tbuf), 0); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); GWEN_Gui_ShowError(I18N("Error"), I18N("Error creating INI-Letter (%d)"), rv); GWEN_Buffer_free(tbuf); return GWEN_DialogEvent_ResultHandled; } GWEN_Buffer_free(tbuf); return GWEN_DialogEvent_ResultHandled; } int _handleValueChanged(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender) { _setModified(dlg, 1); return GWEN_DialogEvent_ResultHandled; } void _setModified(GWEN_DIALOG *dlg, int enabled) { AH_EDIT_USER_RDH_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_EDIT_USER_RDH_DIALOG, dlg); assert(xdlg); xdlg->modified=enabled; GWEN_Dialog_SetIntProperty(dlg, "applyButton", GWEN_DialogProperty_Enabled, 0, enabled, 0); } int GWENHYWFAR_CB _dlgApi_signalHandler(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender) { const _DIALOG_SIGNAL_ENTRY *entry; entry=_signalMap; while(entry->handlerFn) { if (entry->eventType==t && (entry->sender==NULL || (sender && strcasecmp(sender, entry->sender)==0))) { return entry->handlerFn(dlg, t, sender); } entry++; } return GWEN_DialogEvent_ResultNotHandled; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/dialogs/dlg_edituserrdh_p.h0000664000175000017500000000151614625171605024100 00000000000000/*************************************************************************** begin : Thu Jul 08 2010 copyright : (C) 2018 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQHBCI_DLG_EDITUSER_RDH_P_H #define AQHBCI_DLG_EDITUSER_RDH_P_H #include "dlg_edituserrdh_l.h" #include "aqhbci/banking/user.h" typedef struct AH_EDIT_USER_RDH_DIALOG AH_EDIT_USER_RDH_DIALOG; struct AH_EDIT_USER_RDH_DIALOG { AB_BANKING *banking; AB_PROVIDER *provider; AB_USER *user; int doLock; int modified; }; #endif aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/dialogs/dlg_pintan_p.h0000664000175000017500000000166214300721174023041 00000000000000/*************************************************************************** begin : Mon Apr 12 2010 copyright : (C) 2018 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQHBCI_DLG_PINTAN_P_H #define AQHBCI_DLG_PINTAN_P_H #include "dlg_pintan_l.h" typedef struct AH_PINTAN_DIALOG AH_PINTAN_DIALOG; struct AH_PINTAN_DIALOG { AB_BANKING *banking; AB_PROVIDER *provider; char *bankCode; char *bankName; char *userName; char *userId; char *customerId; char *url; int httpVMajor; int httpVMinor; int hbciVersion; uint32_t flags; char *tanMediumId; AB_USER *user; }; #endif aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/dialogs/dlg_importkeyfile.dlg0000664000175000017500000001104114043610745024430 00000000000000 aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/dialogs/dlg_choose_usertype_l.h0000664000175000017500000000154614043610745024772 00000000000000/*************************************************************************** begin : Fri Jul 30 2010 copyright : (C) 2018 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQHBCI_CHOOSEUSERTYPE_DIALOG_H #define AQHBCI_CHOOSEUSERTYPE_DIALOG_H #include #include #include #include #ifdef __cplusplus extern "C" { #endif AQHBCI_API GWEN_DIALOG *AH_ChooseUserTypeDialog_new(AB_PROVIDER *pro); #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/dialogs/Makefile.in0000644000175000017500000010232715037736025022306 00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/libs/plugins/backends/aqhbci/dialogs ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/distri.m4 $(top_srcdir)/m4/gwenhywfar.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/os.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libaqhbci_dlgs_la_LIBADD = am_libaqhbci_dlgs_la_OBJECTS = dlg_edituserddv.lo \ dlg_ddvcard_special.lo dlg_edituserpintan.lo \ dlg_edituserrdh.lo dlg_pintan.lo dlg_pintan_special.lo \ dlg_ddvcard.lo dlg_zkacard.lo dlg_newkeyfile.lo \ dlg_rdh_special.lo dlg_importkeyfile.lo dlg_newuser.lo \ dlg_choose_usertype.lo dlg_editaccount.lo \ dlg_pintan_tanmode.lo w_hbciversioncombo.lo \ w_accounttypecombo.lo w_usercombo.lo w_tanmethodcombo.lo \ w_rdhversioncombo.lo w_userstatuscombo.lo w_utils.lo libaqhbci_dlgs_la_OBJECTS = $(am_libaqhbci_dlgs_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/dlg_choose_usertype.Plo \ ./$(DEPDIR)/dlg_ddvcard.Plo \ ./$(DEPDIR)/dlg_ddvcard_special.Plo \ ./$(DEPDIR)/dlg_editaccount.Plo \ ./$(DEPDIR)/dlg_edituserddv.Plo \ ./$(DEPDIR)/dlg_edituserpintan.Plo \ ./$(DEPDIR)/dlg_edituserrdh.Plo \ ./$(DEPDIR)/dlg_importkeyfile.Plo \ ./$(DEPDIR)/dlg_newkeyfile.Plo ./$(DEPDIR)/dlg_newuser.Plo \ ./$(DEPDIR)/dlg_pintan.Plo ./$(DEPDIR)/dlg_pintan_special.Plo \ ./$(DEPDIR)/dlg_pintan_tanmode.Plo \ ./$(DEPDIR)/dlg_rdh_special.Plo ./$(DEPDIR)/dlg_zkacard.Plo \ ./$(DEPDIR)/w_accounttypecombo.Plo \ ./$(DEPDIR)/w_hbciversioncombo.Plo \ ./$(DEPDIR)/w_rdhversioncombo.Plo \ ./$(DEPDIR)/w_tanmethodcombo.Plo ./$(DEPDIR)/w_usercombo.Plo \ ./$(DEPDIR)/w_userstatuscombo.Plo ./$(DEPDIR)/w_utils.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libaqhbci_dlgs_la_SOURCES) DIST_SOURCES = $(libaqhbci_dlgs_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(dlgdatadir)" "$(DESTDIR)$(dlgimagedir)" DATA = $(dlgdata_DATA) $(dlgimage_DATA) HEADERS = $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADD_ACLOCAL_FLAGS = @ADD_ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AQBANKING_CLI_VERSION_STRING = @AQBANKING_CLI_VERSION_STRING@ AQBANKING_FINTS_VERSION_STRING = @AQBANKING_FINTS_VERSION_STRING@ AQBANKING_SO_AGE = @AQBANKING_SO_AGE@ AQBANKING_SO_CURRENT = @AQBANKING_SO_CURRENT@ AQBANKING_SO_EFFECTIVE = @AQBANKING_SO_EFFECTIVE@ AQBANKING_SO_REVISION = @AQBANKING_SO_REVISION@ AQBANKING_VERSION_BUILD = @AQBANKING_VERSION_BUILD@ AQBANKING_VERSION_FULL_STRING = @AQBANKING_VERSION_FULL_STRING@ AQBANKING_VERSION_MAJOR = @AQBANKING_VERSION_MAJOR@ AQBANKING_VERSION_MINOR = @AQBANKING_VERSION_MINOR@ AQBANKING_VERSION_PATCHLEVEL = @AQBANKING_VERSION_PATCHLEVEL@ AQBANKING_VERSION_RELEASE_STRING = @AQBANKING_VERSION_RELEASE_STRING@ AQBANKING_VERSION_STRING = @AQBANKING_VERSION_STRING@ AQBANKING_VERSION_TAG = @AQBANKING_VERSION_TAG@ AQEBICS_CFLAGS = @AQEBICS_CFLAGS@ AQEBICS_LIBS = @AQEBICS_LIBS@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATETIME = @DATETIME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_EXCLUDE_PATTERNS = @DOXYGEN_EXCLUDE_PATTERNS@ DOXYGEN_FILE_PATTERNS = @DOXYGEN_FILE_PATTERNS@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENGUI_GTK2_CFLAGS = @GWENGUI_GTK2_CFLAGS@ GWENGUI_GTK2_LIBS = @GWENGUI_GTK2_LIBS@ GWENHYWFAR_MINIMUM_VERSION = @GWENHYWFAR_MINIMUM_VERSION@ HAVE_GWENGUI_GTK2 = @HAVE_GWENGUI_GTK2@ HAVE_I18N = @HAVE_I18N@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIBXSLT_CFLAGS = @LIBXSLT_CFLAGS@ LIBXSLT_LIBS = @LIBXSLT_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_SUPPORTS_QT = @MSGFMT_SUPPORTS_QT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ TUTORIALS = @TUTORIALS@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XMLMERGE = @XMLMERGE@ XMLSEC_CFLAGS = @XMLSEC_CFLAGS@ XMLSEC_LIBS = @XMLSEC_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ aqbanking_backends = @aqbanking_backends@ aqbanking_cfg_searchdir = @aqbanking_cfg_searchdir@ aqbanking_data_searchdir = @aqbanking_data_searchdir@ aqbanking_headerdir = @aqbanking_headerdir@ aqbanking_headerdir_am = @aqbanking_headerdir_am@ aqbanking_includes = @aqbanking_includes@ aqbanking_internal_libs = @aqbanking_internal_libs@ aqbanking_ldflags = @aqbanking_ldflags@ aqbanking_libs = @aqbanking_libs@ aqbanking_locale_searchdir = @aqbanking_locale_searchdir@ aqbanking_modules = @aqbanking_modules@ aqbanking_pkgdatadir = @aqbanking_pkgdatadir@ aqbanking_plugin_searchdir = @aqbanking_plugin_searchdir@ aqbanking_plugindir = @aqbanking_plugindir@ aqbanking_plugins_backends_dirs = @aqbanking_plugins_backends_dirs@ aqbanking_plugins_backends_libs = @aqbanking_plugins_backends_libs@ aqbanking_plugins_bankinfo_dirs = @aqbanking_plugins_bankinfo_dirs@ aqbanking_plugins_bankinfo_libs = @aqbanking_plugins_bankinfo_libs@ aqbanking_plugins_imexporters_dirs = @aqbanking_plugins_imexporters_dirs@ aqbanking_plugins_imexporters_libs = @aqbanking_plugins_imexporters_libs@ aqbanking_plugins_parsers_dirs = @aqbanking_plugins_parsers_dirs@ aqbanking_symlinkdir = @aqbanking_symlinkdir@ aqbanking_sys_is_windows = @aqbanking_sys_is_windows@ aqbankingpp_modules = @aqbankingpp_modules@ aqebics_datadir = @aqebics_datadir@ aqebics_includes = @aqebics_includes@ aqebics_internal_libs = @aqebics_internal_libs@ aqebics_ldflags = @aqebics_ldflags@ aqebics_libs = @aqebics_libs@ aqfints_datadir = @aqfints_datadir@ aqhbci_datadir = @aqhbci_datadir@ aqhbci_includes = @aqhbci_includes@ aqhbci_internal_libs = @aqhbci_internal_libs@ aqhbci_ldflags = @aqhbci_ldflags@ aqhbci_libs = @aqhbci_libs@ aqofxconnect_includes = @aqofxconnect_includes@ aqofxconnect_internal_libs = @aqofxconnect_internal_libs@ aqofxconnect_libs = @aqofxconnect_libs@ aqpaypal_includes = @aqpaypal_includes@ aqpaypal_internal_libs = @aqpaypal_internal_libs@ aqpaypal_libs = @aqpaypal_libs@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gmp_libs = @gmp_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_dir = @gwenhywfar_dir@ gwenhywfar_has_crypt = @gwenhywfar_has_crypt@ gwenhywfar_headers = @gwenhywfar_headers@ gwenhywfar_includes = @gwenhywfar_includes@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_plugins = @gwenhywfar_plugins@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ typemaker2_exe = @typemaker2_exe@ visibility_cflags = @visibility_cflags@ with_aqebics = @with_aqebics@ with_aqhbci = @with_aqhbci@ AM_CPPFLAGS = -I$(top_srcdir)/src/libs -I$(top_builddir)/src/libs $(gwenhywfar_includes) \ -I$(srcdir)/../.. \ -I.. -I$(srcdir)/../banking \ -I.. -I$(srcdir)/../msglayer \ -I.. -I$(srcdir)/../joblayer \ -I$(srcdir)/../tan \ -I.. -I$(srcdir)/.. \ -I$(top_srcdir)/src/libs/aqbanking $(gwenhywfar_includes) AM_CFLAGS = -DBUILDING_AQBANKING @visibility_cflags@ noinst_LTLIBRARIES = libaqhbci_dlgs.la #iheaderdir=@aqbanking_headerdir_am@/aqhbci #iheader_HEADERS= noinst_HEADERS = \ dlg_edituserddv_l.h dlg_edituserddv_p.h \ dlg_edituserpintan_l.h dlg_edituserpintan_p.h \ dlg_edituserrdh_l.h dlg_edituserrdh_p.h \ dlg_pintan_l.h dlg_pintan_p.h \ dlg_pintan_special_l.h dlg_pintan_special_p.h \ dlg_newuser_l.h dlg_newuser_p.h \ dlg_ddvcard_l.h dlg_ddvcard_p.h \ dlg_zkacard_l.h dlg_zkacard_p.h \ dlg_ddvcard_special_l.h dlg_ddvcard_special_p.h \ dlg_newkeyfile_l.h dlg_newkeyfile_p.h \ dlg_rdh_special_l.h dlg_rdh_special_p.h \ dlg_importkeyfile_l.h dlg_importkeyfile_p.h \ dlg_choose_usertype_l.h dlg_choose_usertype_p.h \ dlg_editaccount_l.h dlg_editaccount_p.h \ dlg_pintan_tanmode_l.h dlg_pintan_tanmode_p.h \ w_hbciversioncombo.h \ w_accounttypecombo.h \ w_usercombo.h \ w_tanmethodcombo.h \ w_rdhversioncombo.h \ w_userstatuscombo.h \ w_utils.h libaqhbci_dlgs_la_SOURCES = \ dlg_edituserddv.c \ dlg_ddvcard_special.c \ dlg_edituserpintan.c \ dlg_edituserrdh.c \ dlg_pintan.c \ dlg_pintan_special.c \ dlg_ddvcard.c \ dlg_zkacard.c \ dlg_newkeyfile.c \ dlg_rdh_special.c \ dlg_importkeyfile.c \ dlg_newuser.c \ dlg_choose_usertype.c \ dlg_editaccount.c \ dlg_pintan_tanmode.c \ w_hbciversioncombo.c \ w_accounttypecombo.c \ w_usercombo.c \ w_tanmethodcombo.c \ w_rdhversioncombo.c \ w_userstatuscombo.c \ w_utils.c dlgdatadir = $(aqbanking_pkgdatadir)/backends/aqhbci/dialogs dlgdata_DATA = \ dlg_edituserddv.dlg \ dlg_edituserpintan.dlg \ dlg_edituserrdh.dlg \ dlg_ddvcard.dlg \ dlg_zkacard.dlg \ dlg_ddvcard_special.dlg \ dlg_pintan.dlg \ dlg_pintan_special.dlg \ dlg_newkeyfile.dlg \ dlg_rdh_special.dlg \ dlg_importkeyfile.dlg \ dlg_newuser.dlg \ dlg_choose_usertype.dlg \ dlg_editaccount.dlg \ dlg_pintan_tanmode.dlg dlgimagedir = $(aqbanking_pkgdatadir)/backends/aqhbci/dialogs dlgimage_DATA = \ chipcard.png \ keyfile.png \ pintan.png EXTRA_DIST = $(typefiles) $(dlgdata_DATA) $(dlgimage_DATA) all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libs/plugins/backends/aqhbci/dialogs/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libs/plugins/backends/aqhbci/dialogs/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libaqhbci_dlgs.la: $(libaqhbci_dlgs_la_OBJECTS) $(libaqhbci_dlgs_la_DEPENDENCIES) $(EXTRA_libaqhbci_dlgs_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libaqhbci_dlgs_la_OBJECTS) $(libaqhbci_dlgs_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dlg_choose_usertype.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dlg_ddvcard.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dlg_ddvcard_special.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dlg_editaccount.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dlg_edituserddv.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dlg_edituserpintan.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dlg_edituserrdh.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dlg_importkeyfile.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dlg_newkeyfile.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dlg_newuser.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dlg_pintan.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dlg_pintan_special.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dlg_pintan_tanmode.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dlg_rdh_special.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dlg_zkacard.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/w_accounttypecombo.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/w_hbciversioncombo.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/w_rdhversioncombo.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/w_tanmethodcombo.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/w_usercombo.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/w_userstatuscombo.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/w_utils.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-dlgdataDATA: $(dlgdata_DATA) @$(NORMAL_INSTALL) @list='$(dlgdata_DATA)'; test -n "$(dlgdatadir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(dlgdatadir)'"; \ $(MKDIR_P) "$(DESTDIR)$(dlgdatadir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(dlgdatadir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(dlgdatadir)" || exit $$?; \ done uninstall-dlgdataDATA: @$(NORMAL_UNINSTALL) @list='$(dlgdata_DATA)'; test -n "$(dlgdatadir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(dlgdatadir)'; $(am__uninstall_files_from_dir) install-dlgimageDATA: $(dlgimage_DATA) @$(NORMAL_INSTALL) @list='$(dlgimage_DATA)'; test -n "$(dlgimagedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(dlgimagedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(dlgimagedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(dlgimagedir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(dlgimagedir)" || exit $$?; \ done uninstall-dlgimageDATA: @$(NORMAL_UNINSTALL) @list='$(dlgimage_DATA)'; test -n "$(dlgimagedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(dlgimagedir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(dlgdatadir)" "$(DESTDIR)$(dlgimagedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/dlg_choose_usertype.Plo -rm -f ./$(DEPDIR)/dlg_ddvcard.Plo -rm -f ./$(DEPDIR)/dlg_ddvcard_special.Plo -rm -f ./$(DEPDIR)/dlg_editaccount.Plo -rm -f ./$(DEPDIR)/dlg_edituserddv.Plo -rm -f ./$(DEPDIR)/dlg_edituserpintan.Plo -rm -f ./$(DEPDIR)/dlg_edituserrdh.Plo -rm -f ./$(DEPDIR)/dlg_importkeyfile.Plo -rm -f ./$(DEPDIR)/dlg_newkeyfile.Plo -rm -f ./$(DEPDIR)/dlg_newuser.Plo -rm -f ./$(DEPDIR)/dlg_pintan.Plo -rm -f ./$(DEPDIR)/dlg_pintan_special.Plo -rm -f ./$(DEPDIR)/dlg_pintan_tanmode.Plo -rm -f ./$(DEPDIR)/dlg_rdh_special.Plo -rm -f ./$(DEPDIR)/dlg_zkacard.Plo -rm -f ./$(DEPDIR)/w_accounttypecombo.Plo -rm -f ./$(DEPDIR)/w_hbciversioncombo.Plo -rm -f ./$(DEPDIR)/w_rdhversioncombo.Plo -rm -f ./$(DEPDIR)/w_tanmethodcombo.Plo -rm -f ./$(DEPDIR)/w_usercombo.Plo -rm -f ./$(DEPDIR)/w_userstatuscombo.Plo -rm -f ./$(DEPDIR)/w_utils.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dlgdataDATA install-dlgimageDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/dlg_choose_usertype.Plo -rm -f ./$(DEPDIR)/dlg_ddvcard.Plo -rm -f ./$(DEPDIR)/dlg_ddvcard_special.Plo -rm -f ./$(DEPDIR)/dlg_editaccount.Plo -rm -f ./$(DEPDIR)/dlg_edituserddv.Plo -rm -f ./$(DEPDIR)/dlg_edituserpintan.Plo -rm -f ./$(DEPDIR)/dlg_edituserrdh.Plo -rm -f ./$(DEPDIR)/dlg_importkeyfile.Plo -rm -f ./$(DEPDIR)/dlg_newkeyfile.Plo -rm -f ./$(DEPDIR)/dlg_newuser.Plo -rm -f ./$(DEPDIR)/dlg_pintan.Plo -rm -f ./$(DEPDIR)/dlg_pintan_special.Plo -rm -f ./$(DEPDIR)/dlg_pintan_tanmode.Plo -rm -f ./$(DEPDIR)/dlg_rdh_special.Plo -rm -f ./$(DEPDIR)/dlg_zkacard.Plo -rm -f ./$(DEPDIR)/w_accounttypecombo.Plo -rm -f ./$(DEPDIR)/w_hbciversioncombo.Plo -rm -f ./$(DEPDIR)/w_rdhversioncombo.Plo -rm -f ./$(DEPDIR)/w_tanmethodcombo.Plo -rm -f ./$(DEPDIR)/w_usercombo.Plo -rm -f ./$(DEPDIR)/w_userstatuscombo.Plo -rm -f ./$(DEPDIR)/w_utils.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-dlgdataDATA uninstall-dlgimageDATA .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-generic clean-libtool clean-noinstLTLIBRARIES \ cscopelist-am ctags ctags-am distclean distclean-compile \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dlgdataDATA \ install-dlgimageDATA install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am uninstall-dlgdataDATA \ uninstall-dlgimageDATA .PRECIOUS: Makefile sources: for f in $(libaqhbci_dlgs_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for f in $(dlgdata_DATA); do \ echo $(subdir)/$$f >>$(top_srcdir)/dlgsources; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d sources; \ done typefiles: for d in $(SUBDIRS); do \ $(MAKE) -C $$d typefiles; \ done typedefs: for d in $(SUBDIRS); do \ $(MAKE) -C $$d typedefs; \ done cppcheck: for f in $(libaqhbci_dlgs_la_SOURCES); do \ cppcheck --force $$f ; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/dialogs/dlg_newkeyfile_p.h0000664000175000017500000000263014043610745023713 00000000000000/*************************************************************************** begin : Sat Jun 26 2010 copyright : (C) 2018 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQHBCI_DLG_NEWKEYFILE_P_H #define AQHBCI_DLG_NEWKEYFILE_P_H #include "dlg_newkeyfile_l.h" typedef struct AH_NEWKEYFILE_DIALOG AH_NEWKEYFILE_DIALOG; struct AH_NEWKEYFILE_DIALOG { AB_BANKING *banking; AB_PROVIDER *provider; char *fileName; char *bankCode; char *bankName; char *userName; char *userId; char *customerId; char *url; int hbciVersion; int rdhVersion; int cryptMode; uint32_t flags; AB_USER *user; }; static void GWENHYWFAR_CB AH_NewKeyFileDialog_FreeData(void *bp, void *p); static int GWENHYWFAR_CB AH_NewKeyFileDialog_SignalHandler(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender); static int AH_NewKeyFileDialog_GetFilePageData(GWEN_DIALOG *dlg); static int AH_NewKeyFileDialog_CheckBankIniLetter(GWEN_DIALOG *dlg, AB_USER *u); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/dialogs/w_hbciversioncombo.h0000664000175000017500000000155614625171605024276 00000000000000/*************************************************************************** begin : Wed May 01 2024 copyright : (C) 2024 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQHBCI_WIDGET_HBCIVERSIONCOMBO_H #define AQHBCI_WIDGET_HBCIVERSIONCOMBO_H #include void AH_Widget_HbciVersionComboSetup(GWEN_DIALOG *dlg, const char *widgetName); void AH_Widget_HbciVersionComboSetCurrent(GWEN_DIALOG *dlg, const char *widgetName, int v); int AH_Widget_HbciVersionComboGetCurrent(GWEN_DIALOG *dlg, const char *widgetName); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/dialogs/dlg_zkacard.dlg0000664000175000017500000000736514043610745023202 00000000000000 aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/dialogs/dlg_ddvcard_special.c0000664000175000017500000002175014546575647024363 00000000000000/*************************************************************************** begin : Tue Apr 20 2010 copyright : (C) 2018 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "dlg_ddvcard_special_p.h" #include "aqbanking/i18n_l.h" #include #include #include "aqhbci/banking/user.h" #include "aqhbci/banking/provider.h" #include #include #include #include #include #define DIALOG_MINWIDTH 200 #define DIALOG_MINHEIGHT 100 GWEN_INHERIT(GWEN_DIALOG, AH_DDVCARD_SPECIAL_DIALOG) GWEN_DIALOG *AH_DdvCardSpecialDialog_new(AB_PROVIDER *pro) { GWEN_DIALOG *dlg; AH_DDVCARD_SPECIAL_DIALOG *xdlg; GWEN_BUFFER *fbuf; int rv; dlg=GWEN_Dialog_new("ah_setup_ddvcard_special"); GWEN_NEW_OBJECT(AH_DDVCARD_SPECIAL_DIALOG, xdlg); GWEN_INHERIT_SETDATA(GWEN_DIALOG, AH_DDVCARD_SPECIAL_DIALOG, dlg, xdlg, AH_DdvCardSpecialDialog_FreeData); GWEN_Dialog_SetSignalHandler(dlg, AH_DdvCardSpecialDialog_SignalHandler); /* get path of dialog description file */ fbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_PathManager_FindFile(AB_PM_LIBNAME, AB_PM_DATADIR, "aqbanking/backends/aqhbci/dialogs/dlg_ddvcard_special.dlg", fbuf); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "Dialog description file not found (%d).", rv); GWEN_Buffer_free(fbuf); GWEN_Dialog_free(dlg); return NULL; } /* read dialog from dialog description file */ rv=GWEN_Dialog_ReadXmlFile(dlg, GWEN_Buffer_GetStart(fbuf)); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d).", rv); GWEN_Buffer_free(fbuf); GWEN_Dialog_free(dlg); return NULL; } GWEN_Buffer_free(fbuf); xdlg->provider=pro; xdlg->banking=AB_Provider_GetBanking(pro); /* preset */ xdlg->hbciVersion=210; /* done */ return dlg; } void GWENHYWFAR_CB AH_DdvCardSpecialDialog_FreeData(void *bp, void *p) { AH_DDVCARD_SPECIAL_DIALOG *xdlg; xdlg=(AH_DDVCARD_SPECIAL_DIALOG *) p; GWEN_FREE_OBJECT(xdlg); } int AH_DdvCardSpecialDialog_GetHbciVersion(const GWEN_DIALOG *dlg) { AH_DDVCARD_SPECIAL_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_DDVCARD_SPECIAL_DIALOG, dlg); assert(xdlg); return xdlg->hbciVersion; } void AH_DdvCardSpecialDialog_SetHbciVersion(GWEN_DIALOG *dlg, int i) { AH_DDVCARD_SPECIAL_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_DDVCARD_SPECIAL_DIALOG, dlg); assert(xdlg); xdlg->hbciVersion=i; } uint32_t AH_DdvCardSpecialDialog_GetFlags(const GWEN_DIALOG *dlg) { AH_DDVCARD_SPECIAL_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_DDVCARD_SPECIAL_DIALOG, dlg); assert(xdlg); return xdlg->flags; } void AH_DdvCardSpecialDialog_SetFlags(GWEN_DIALOG *dlg, uint32_t fl) { AH_DDVCARD_SPECIAL_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_DDVCARD_SPECIAL_DIALOG, dlg); assert(xdlg); xdlg->flags=fl; } void AH_DdvCardSpecialDialog_AddFlags(GWEN_DIALOG *dlg, uint32_t fl) { AH_DDVCARD_SPECIAL_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_DDVCARD_SPECIAL_DIALOG, dlg); assert(xdlg); xdlg->flags&=~fl; } void AH_DdvCardSpecialDialog_SubFlags(GWEN_DIALOG *dlg, uint32_t fl) { AH_DDVCARD_SPECIAL_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_DDVCARD_SPECIAL_DIALOG, dlg); assert(xdlg); xdlg->flags&=~fl; } void AH_DdvCardSpecialDialog_Init(GWEN_DIALOG *dlg) { AH_DDVCARD_SPECIAL_DIALOG *xdlg; GWEN_DB_NODE *dbPrefs; int i; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_DDVCARD_SPECIAL_DIALOG, dlg); assert(xdlg); dbPrefs=GWEN_Dialog_GetPreferences(dlg); GWEN_Dialog_SetCharProperty(dlg, "", GWEN_DialogProperty_Title, 0, I18N("HBCI PIN/TAN Special Settings"), 0); GWEN_Dialog_SetCharProperty(dlg, "hbciVersionCombo", GWEN_DialogProperty_AddValue, 0, "2.01", 0); GWEN_Dialog_SetCharProperty(dlg, "hbciVersionCombo", GWEN_DialogProperty_AddValue, 0, "2.10", 0); GWEN_Dialog_SetCharProperty(dlg, "hbciVersionCombo", GWEN_DialogProperty_AddValue, 0, "2.20", 0); GWEN_Dialog_SetCharProperty(dlg, "hbciVersionCombo", GWEN_DialogProperty_AddValue, 0, "3.0", 0); /* toGui */ switch (xdlg->hbciVersion) { case 201: GWEN_Dialog_SetIntProperty(dlg, "hbciVersionCombo", GWEN_DialogProperty_Value, 0, 0, 0); break; case 210: GWEN_Dialog_SetIntProperty(dlg, "hbciVersionCombo", GWEN_DialogProperty_Value, 0, 1, 0); break; case 220: GWEN_Dialog_SetIntProperty(dlg, "hbciVersionCombo", GWEN_DialogProperty_Value, 0, 2, 0); break; case 300: GWEN_Dialog_SetIntProperty(dlg, "hbciVersionCombo", GWEN_DialogProperty_Value, 0, 3, 0); break; default: break; } GWEN_Dialog_SetIntProperty(dlg, "bankDoesntSignCheck", GWEN_DialogProperty_Value, 0, (xdlg->flags & AH_USER_FLAGS_BANK_DOESNT_SIGN)?1:0, 0); GWEN_Dialog_SetIntProperty(dlg, "bankUsesSignSeqCheck", GWEN_DialogProperty_Value, 0, (xdlg->flags & AH_USER_FLAGS_BANK_USES_SIGNSEQ)?1:0, 0); /* read width */ i=GWEN_DB_GetIntValue(dbPrefs, "dialog_width", 0, -1); if (i>=DIALOG_MINWIDTH) GWEN_Dialog_SetIntProperty(dlg, "", GWEN_DialogProperty_Width, 0, i, 0); /* read height */ i=GWEN_DB_GetIntValue(dbPrefs, "dialog_height", 0, -1); if (i>=DIALOG_MINHEIGHT) GWEN_Dialog_SetIntProperty(dlg, "", GWEN_DialogProperty_Height, 0, i, 0); } void AH_DdvCardSpecialDialog_Fini(GWEN_DIALOG *dlg) { AH_DDVCARD_SPECIAL_DIALOG *xdlg; int i; GWEN_DB_NODE *dbPrefs; uint32_t flags; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_DDVCARD_SPECIAL_DIALOG, dlg); assert(xdlg); dbPrefs=GWEN_Dialog_GetPreferences(dlg); /* fromGui */ i=GWEN_Dialog_GetIntProperty(dlg, "hbciVersionCombo", GWEN_DialogProperty_Value, 0, -1); switch (i) { case 0: xdlg->hbciVersion=201; break; default: case 1: xdlg->hbciVersion=210; break; case 2: xdlg->hbciVersion=220; break; case 3: xdlg->hbciVersion=300; break; } flags=0; if (GWEN_Dialog_GetIntProperty(dlg, "bankDoesntSignCheck", GWEN_DialogProperty_Value, 0, 0)) flags|=AH_USER_FLAGS_BANK_DOESNT_SIGN; if (GWEN_Dialog_GetIntProperty(dlg, "bankUsesSignSeqCheck", GWEN_DialogProperty_Value, 0, 0)) flags|=AH_USER_FLAGS_BANK_USES_SIGNSEQ; xdlg->flags=flags; /* store dialog width */ i=GWEN_Dialog_GetIntProperty(dlg, "", GWEN_DialogProperty_Width, 0, -1); GWEN_DB_SetIntValue(dbPrefs, GWEN_DB_FLAGS_OVERWRITE_VARS, "dialog_width", i); /* store dialog height */ i=GWEN_Dialog_GetIntProperty(dlg, "", GWEN_DialogProperty_Height, 0, -1); GWEN_DB_SetIntValue(dbPrefs, GWEN_DB_FLAGS_OVERWRITE_VARS, "dialog_height", i); } int AH_DdvCardSpecialDialog_HandleActivated(GWEN_DIALOG *dlg, const char *sender) { DBG_NOTICE(0, "Activated: %s", sender); if (strcasecmp(sender, "okButton")==0) return GWEN_DialogEvent_ResultAccept; else if (strcasecmp(sender, "abortButton")==0) return GWEN_DialogEvent_ResultReject; else if (strcasecmp(sender, "helpButton")==0) { /* TODO: open a help dialog */ } return GWEN_DialogEvent_ResultNotHandled; } int GWENHYWFAR_CB AH_DdvCardSpecialDialog_SignalHandler(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender) { AH_DDVCARD_SPECIAL_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_DDVCARD_SPECIAL_DIALOG, dlg); assert(xdlg); switch (t) { case GWEN_DialogEvent_TypeInit: AH_DdvCardSpecialDialog_Init(dlg); return GWEN_DialogEvent_ResultHandled;; case GWEN_DialogEvent_TypeFini: AH_DdvCardSpecialDialog_Fini(dlg); return GWEN_DialogEvent_ResultHandled;; case GWEN_DialogEvent_TypeValueChanged: return GWEN_DialogEvent_ResultHandled;; case GWEN_DialogEvent_TypeActivated: return AH_DdvCardSpecialDialog_HandleActivated(dlg, sender); case GWEN_DialogEvent_TypeEnabled: case GWEN_DialogEvent_TypeDisabled: case GWEN_DialogEvent_TypeClose: case GWEN_DialogEvent_TypeLast: return GWEN_DialogEvent_ResultNotHandled; default: break; } return GWEN_DialogEvent_ResultNotHandled; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/dialogs/w_rdhversioncombo.c0000664000175000017500000001057514625171605024142 00000000000000/*************************************************************************** begin : Wed May 01 2024 copyright : (C) 2024 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "w_rdhversioncombo.h" #include "aqhbci/banking/user.h" #include "aqbanking/i18n_l.h" void AH_Widget_RdhVersionComboSetup(GWEN_DIALOG *dlg, const char *widgetName) { const GWEN_DIALOG_PROPERTY addValue=GWEN_DialogProperty_AddValue; const GWEN_DIALOG_PROPERTY clrValue=GWEN_DialogProperty_ClearValues; GWEN_Dialog_SetIntProperty(dlg, widgetName, clrValue, 0, 0, 0); GWEN_Dialog_SetCharProperty(dlg, widgetName, addValue, 0, I18N("(auto)"), 0); GWEN_Dialog_SetCharProperty(dlg, widgetName, addValue, 0, "RDH-1", 0); GWEN_Dialog_SetCharProperty(dlg, widgetName, addValue, 0, "RDH-2", 0); GWEN_Dialog_SetCharProperty(dlg, widgetName, addValue, 0, "RDH-3", 0); GWEN_Dialog_SetCharProperty(dlg, widgetName, addValue, 0, "RDH-5", 0); GWEN_Dialog_SetCharProperty(dlg, widgetName, addValue, 0, "RDH-6", 0); GWEN_Dialog_SetCharProperty(dlg, widgetName, addValue, 0, "RDH-7", 0); GWEN_Dialog_SetCharProperty(dlg, widgetName, addValue, 0, "RDH-8", 0); GWEN_Dialog_SetCharProperty(dlg, widgetName, addValue, 0, "RDH-9", 0); GWEN_Dialog_SetCharProperty(dlg, widgetName, addValue, 0, "RDH-10", 0); GWEN_Dialog_SetCharProperty(dlg, widgetName, addValue, 0, "RAH-7", 0); GWEN_Dialog_SetCharProperty(dlg, widgetName, addValue, 0, "RAH-9", 0); GWEN_Dialog_SetCharProperty(dlg, widgetName, addValue, 0, "RAH-10", 0); } void AH_Widget_RdhVersionComboSetCurrent(GWEN_DIALOG *dlg, const char *widgetName, int v) { int cryptMode; int version; cryptMode=(v>>8); version=v & 0xff; if (cryptMode==AH_CryptMode_Rdh) { switch(version) { case 0: GWEN_Dialog_SetIntProperty(dlg, widgetName, GWEN_DialogProperty_Value, 0, 0, 0); break; case 1: GWEN_Dialog_SetIntProperty(dlg, widgetName, GWEN_DialogProperty_Value, 0, 1, 0); break; case 2: GWEN_Dialog_SetIntProperty(dlg, widgetName, GWEN_DialogProperty_Value, 0, 2, 0); break; case 3: GWEN_Dialog_SetIntProperty(dlg, widgetName, GWEN_DialogProperty_Value, 0, 3, 0); break; case 5: GWEN_Dialog_SetIntProperty(dlg, widgetName, GWEN_DialogProperty_Value, 0, 4, 0); break; case 6: GWEN_Dialog_SetIntProperty(dlg, widgetName, GWEN_DialogProperty_Value, 0, 5, 0); break; case 7: GWEN_Dialog_SetIntProperty(dlg, widgetName, GWEN_DialogProperty_Value, 0, 6, 0); break; case 8: GWEN_Dialog_SetIntProperty(dlg, widgetName, GWEN_DialogProperty_Value, 0, 7, 0); break; case 9: GWEN_Dialog_SetIntProperty(dlg, widgetName, GWEN_DialogProperty_Value, 0, 8, 0); break; case 10: GWEN_Dialog_SetIntProperty(dlg, widgetName, GWEN_DialogProperty_Value, 0, 9, 0); break; default: break; } } else if (cryptMode==AH_CryptMode_Rah) { switch(version) { case 7: GWEN_Dialog_SetIntProperty(dlg, widgetName, GWEN_DialogProperty_Value, 0, 10, 0); break; case 9: GWEN_Dialog_SetIntProperty(dlg, widgetName, GWEN_DialogProperty_Value, 0, 11, 0); break; case 10: GWEN_Dialog_SetIntProperty(dlg, widgetName, GWEN_DialogProperty_Value, 0, 12, 0); break; default: break; } } else { DBG_INFO(AQHBCI_LOGDOMAIN, "Unhandled crypt mode %d", cryptMode); } } int AH_Widget_RdhVersionComboGetCurrent(GWEN_DIALOG *dlg, const char *widgetName) { int i; i=GWEN_Dialog_GetIntProperty(dlg, widgetName, GWEN_DialogProperty_Value, 0, -1); switch (i) { case 1: return (AH_CryptMode_Rdh<<8)+1; case 2: return (AH_CryptMode_Rdh<<8)+2; case 3: return (AH_CryptMode_Rdh<<8)+3; case 4: return (AH_CryptMode_Rdh<<8)+5; case 5: return (AH_CryptMode_Rdh<<8)+6; case 6: return (AH_CryptMode_Rdh<<8)+7; case 7: return (AH_CryptMode_Rdh<<8)+8; case 8: return (AH_CryptMode_Rdh<<8)+9; case 9: return (AH_CryptMode_Rdh<<8)+10; case 10: return (AH_CryptMode_Rah<<8)+7; case 11: return (AH_CryptMode_Rah<<8)+9; case 12: return (AH_CryptMode_Rah<<8)+10; default: return (AH_CryptMode_Rdh<<8)+0; } } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/dialogs/dlg_importkeyfile.c0000664000175000017500000013444314546575647024143 00000000000000/*************************************************************************** begin : Sat Aug 07 2010 copyright : (C) 2018 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "dlg_importkeyfile_p.h" #include "aqbanking/i18n_l.h" #include #include #include #include "aqhbci/banking/user.h" #include "aqhbci/banking/provider.h" #include "aqhbci/banking/provider_online.h" #include "aqhbci/banking/provider_iniletter.h" #include "dlg_rdh_special_l.h" #include #include #include #include #include #include #define PAGE_BEGIN 0 #define PAGE_FILE 1 #define PAGE_BANK 2 #define PAGE_USER 3 #define PAGE_CREATE 4 #define PAGE_END 5 #define DIALOG_MINWIDTH 400 #define DIALOG_MINHEIGHT 200 #define MAX_CONTEXT_ID_ENTRIES 64 GWEN_INHERIT(GWEN_DIALOG, AH_IMPORTKEYFILE_DIALOG) GWEN_DIALOG *AH_ImportKeyFileDialog_new(AB_PROVIDER *pro) { GWEN_DIALOG *dlg; AH_IMPORTKEYFILE_DIALOG *xdlg; GWEN_BUFFER *fbuf; int rv; dlg=GWEN_Dialog_new("ah_setup_importkeyfile"); GWEN_NEW_OBJECT(AH_IMPORTKEYFILE_DIALOG, xdlg); GWEN_INHERIT_SETDATA(GWEN_DIALOG, AH_IMPORTKEYFILE_DIALOG, dlg, xdlg, AH_ImportKeyFileDialog_FreeData); GWEN_Dialog_SetSignalHandler(dlg, AH_ImportKeyFileDialog_SignalHandler); /* get path of dialog description file */ fbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_PathManager_FindFile(AB_PM_LIBNAME, AB_PM_DATADIR, "aqbanking/backends/aqhbci/dialogs/dlg_importkeyfile.dlg", fbuf); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "Dialog description file not found (%d).", rv); GWEN_Buffer_free(fbuf); GWEN_Dialog_free(dlg); return NULL; } /* read dialog from dialog description file */ rv=GWEN_Dialog_ReadXmlFile(dlg, GWEN_Buffer_GetStart(fbuf)); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d).", rv); GWEN_Buffer_free(fbuf); GWEN_Dialog_free(dlg); return NULL; } GWEN_Buffer_free(fbuf); xdlg->provider=pro; xdlg->banking=AB_Provider_GetBanking(pro); xdlg->contextList=GWEN_Crypt_Token_Context_List_new(); /* preset */ xdlg->hbciVersion=210; xdlg->rdhVersion=0; /* done */ return dlg; } void GWENHYWFAR_CB AH_ImportKeyFileDialog_FreeData(void *bp, void *p) { AH_IMPORTKEYFILE_DIALOG *xdlg; xdlg=(AH_IMPORTKEYFILE_DIALOG *) p; GWEN_Crypt_Token_Context_List_free(xdlg->contextList); free(xdlg->fileName); free(xdlg->bankCode); free(xdlg->bankName); free(xdlg->userName); free(xdlg->userId); free(xdlg->customerId); GWEN_FREE_OBJECT(xdlg); } AB_USER *AH_ImportKeyFileDialog_GetUser(const GWEN_DIALOG *dlg) { AH_IMPORTKEYFILE_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_IMPORTKEYFILE_DIALOG, dlg); assert(xdlg); return xdlg->user; } const char *AH_ImportKeyFileDialog_GetFileName(const GWEN_DIALOG *dlg) { AH_IMPORTKEYFILE_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_IMPORTKEYFILE_DIALOG, dlg); assert(xdlg); return xdlg->fileName; } void AH_ImportKeyFileDialog_SetFileName(GWEN_DIALOG *dlg, const char *s) { AH_IMPORTKEYFILE_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_IMPORTKEYFILE_DIALOG, dlg); assert(xdlg); free(xdlg->fileName); if (s) xdlg->fileName=strdup(s); else xdlg->fileName=NULL; } const char *AH_ImportKeyFileDialog_GetBankCode(const GWEN_DIALOG *dlg) { AH_IMPORTKEYFILE_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_IMPORTKEYFILE_DIALOG, dlg); assert(xdlg); return xdlg->bankCode; } void AH_ImportKeyFileDialog_SetBankCode(GWEN_DIALOG *dlg, const char *s) { AH_IMPORTKEYFILE_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_IMPORTKEYFILE_DIALOG, dlg); assert(xdlg); free(xdlg->bankCode); if (s) xdlg->bankCode=strdup(s); else xdlg->bankCode=NULL; } const char *AH_ImportKeyFileDialog_GetBankName(const GWEN_DIALOG *dlg) { AH_IMPORTKEYFILE_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_IMPORTKEYFILE_DIALOG, dlg); assert(xdlg); return xdlg->bankName; } void AH_ImportKeyFileDialog_SetBankName(GWEN_DIALOG *dlg, const char *s) { AH_IMPORTKEYFILE_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_IMPORTKEYFILE_DIALOG, dlg); assert(xdlg); free(xdlg->bankName); if (s) xdlg->bankName=strdup(s); else xdlg->bankName=NULL; } const char *AH_ImportKeyFileDialog_GetUserName(const GWEN_DIALOG *dlg) { AH_IMPORTKEYFILE_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_IMPORTKEYFILE_DIALOG, dlg); assert(xdlg); return xdlg->userName; } void AH_ImportKeyFileDialog_SetUserName(GWEN_DIALOG *dlg, const char *s) { AH_IMPORTKEYFILE_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_IMPORTKEYFILE_DIALOG, dlg); assert(xdlg); free(xdlg->userName); if (s) xdlg->userName=strdup(s); else xdlg->userName=NULL; } const char *AH_ImportKeyFileDialog_GetUserId(const GWEN_DIALOG *dlg) { AH_IMPORTKEYFILE_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_IMPORTKEYFILE_DIALOG, dlg); assert(xdlg); return xdlg->userId; } void AH_ImportKeyFileDialog_SetUserId(GWEN_DIALOG *dlg, const char *s) { AH_IMPORTKEYFILE_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_IMPORTKEYFILE_DIALOG, dlg); assert(xdlg); free(xdlg->userId); if (s) xdlg->userId=strdup(s); else xdlg->userId=NULL; } const char *AH_ImportKeyFileDialog_GetCustomerId(const GWEN_DIALOG *dlg) { AH_IMPORTKEYFILE_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_IMPORTKEYFILE_DIALOG, dlg); assert(xdlg); return xdlg->customerId; } void AH_ImportKeyFileDialog_SetCustomerId(GWEN_DIALOG *dlg, const char *s) { AH_IMPORTKEYFILE_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_IMPORTKEYFILE_DIALOG, dlg); assert(xdlg); free(xdlg->customerId); if (s) xdlg->customerId=strdup(s); else xdlg->customerId=NULL; } const char *AH_ImportKeyFileDialog_GetUrl(const GWEN_DIALOG *dlg) { AH_IMPORTKEYFILE_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_IMPORTKEYFILE_DIALOG, dlg); assert(xdlg); return xdlg->url; } void AH_ImportKeyFileDialog_SetUrl(GWEN_DIALOG *dlg, const char *s) { AH_IMPORTKEYFILE_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_IMPORTKEYFILE_DIALOG, dlg); assert(xdlg); free(xdlg->url); if (s) xdlg->url=strdup(s); else xdlg->url=NULL; } int AH_ImportKeyFileDialog_GetHbciVersion(const GWEN_DIALOG *dlg) { AH_IMPORTKEYFILE_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_IMPORTKEYFILE_DIALOG, dlg); assert(xdlg); return xdlg->hbciVersion; } void AH_ImportKeyFileDialog_SetHbciVersion(GWEN_DIALOG *dlg, int i) { AH_IMPORTKEYFILE_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_IMPORTKEYFILE_DIALOG, dlg); assert(xdlg); xdlg->hbciVersion=i; } int AH_ImportKeyFileDialog_GetRdhVersion(const GWEN_DIALOG *dlg) { AH_IMPORTKEYFILE_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_IMPORTKEYFILE_DIALOG, dlg); assert(xdlg); return xdlg->rdhVersion; } void AH_ImportKeyFileDialog_SetRdhVersion(GWEN_DIALOG *dlg, int i) { AH_IMPORTKEYFILE_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_IMPORTKEYFILE_DIALOG, dlg); assert(xdlg); xdlg->rdhVersion=i; } uint32_t AH_ImportKeyFileDialog_GetFlags(const GWEN_DIALOG *dlg) { AH_IMPORTKEYFILE_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_IMPORTKEYFILE_DIALOG, dlg); assert(xdlg); return xdlg->flags; } void AH_ImportKeyFileDialog_SetFlags(GWEN_DIALOG *dlg, uint32_t fl) { AH_IMPORTKEYFILE_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_IMPORTKEYFILE_DIALOG, dlg); assert(xdlg); xdlg->flags=fl; } void AH_ImportKeyFileDialog_AddFlags(GWEN_DIALOG *dlg, uint32_t fl) { AH_IMPORTKEYFILE_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_IMPORTKEYFILE_DIALOG, dlg); assert(xdlg); xdlg->flags&=~fl; } void AH_ImportKeyFileDialog_SubFlags(GWEN_DIALOG *dlg, uint32_t fl) { AH_IMPORTKEYFILE_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_IMPORTKEYFILE_DIALOG, dlg); assert(xdlg); xdlg->flags&=~fl; } void AH_ImportKeyFileDialog_Init(GWEN_DIALOG *dlg) { AH_IMPORTKEYFILE_DIALOG *xdlg; GWEN_DB_NODE *dbPrefs; int i; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_IMPORTKEYFILE_DIALOG, dlg); assert(xdlg); dbPrefs=GWEN_Dialog_GetPreferences(dlg); GWEN_Dialog_SetCharProperty(dlg, "", GWEN_DialogProperty_Title, 0, I18N("HBCI Keyfile Import Wizard"), 0); /* select first page */ GWEN_Dialog_SetIntProperty(dlg, "wiz_stack", GWEN_DialogProperty_Value, 0, 0, 0); /* setup intro page */ GWEN_Dialog_SetCharProperty(dlg, "wiz_begin_label", GWEN_DialogProperty_Title, 0, I18N("This dialog assists you in importing a Keyfile User.\n"), 0); /* setup bank page */ GWEN_Dialog_SetCharProperty(dlg, "wiz_bank_label", GWEN_DialogProperty_Title, 0, I18N("" "

Please select the bank.

" "

AqBanking has an internal database which " "contains HBCI/FinTS information about many banks.

" "

If there is an entry for your bank this dialog will use the " "information from the database.

" "" "Please select the bank.\n" "AqBanking has an internal database which contains\n" "HBCI/FinTS information about many banks.\n" "If there is an entry for your bank this dialog will use the\n" "information from the database."), 0); /* setup user page */ GWEN_Dialog_SetCharProperty(dlg, "wiz_user_label", GWEN_DialogProperty_Title, 0, I18N("" "

For most banks the customer id must be the same as the user id.

" "

However, some banks actually use the customer id, so please look into " "the documentation provided by your bank to discover whether this is the " "case with your bank.

" "" "For most banks the customer id must be the same as the user id.\n" "However, some banks actually use the customer id, so please look into\n" "the documentation provided by your bank to discover whether this is the\n" "case with your bank."), 0); /* setup creation page */ GWEN_Dialog_SetCharProperty(dlg, "wiz_create_label", GWEN_DialogProperty_Title, 0, I18N("" "

We are now ready to create the user and exchange keys with the server.

" "

Click the next button to proceed or abort to abort.

" "" "We are now ready to create the user and exchange keys with the server.\n" "Click the NEXT button to proceed or ABORT to abort."), 0); /* setup extro page */ GWEN_Dialog_SetCharProperty(dlg, "wiz_end_label", GWEN_DialogProperty_Title, 0, I18N("" "

The user has been successfully created.

" "" "The user has been successfully created."), 0); /* read width */ i=GWEN_DB_GetIntValue(dbPrefs, "dialog_width", 0, -1); if (i>=DIALOG_MINWIDTH) GWEN_Dialog_SetIntProperty(dlg, "", GWEN_DialogProperty_Width, 0, i, 0); /* read height */ i=GWEN_DB_GetIntValue(dbPrefs, "dialog_height", 0, -1); if (i>=DIALOG_MINHEIGHT) GWEN_Dialog_SetIntProperty(dlg, "", GWEN_DialogProperty_Height, 0, i, 0); /* disable next and previous buttons */ GWEN_Dialog_SetIntProperty(dlg, "wiz_prev_button", GWEN_DialogProperty_Enabled, 0, 0, 0); GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 1, 0); } void AH_ImportKeyFileDialog_Fini(GWEN_DIALOG *dlg) { AH_IMPORTKEYFILE_DIALOG *xdlg; int i; GWEN_DB_NODE *dbPrefs; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_IMPORTKEYFILE_DIALOG, dlg); assert(xdlg); dbPrefs=GWEN_Dialog_GetPreferences(dlg); /* store dialog width */ i=GWEN_Dialog_GetIntProperty(dlg, "", GWEN_DialogProperty_Width, 0, -1); GWEN_DB_SetIntValue(dbPrefs, GWEN_DB_FLAGS_OVERWRITE_VARS, "dialog_width", i); /* store dialog height */ i=GWEN_Dialog_GetIntProperty(dlg, "", GWEN_DialogProperty_Height, 0, -1); GWEN_DB_SetIntValue(dbPrefs, GWEN_DB_FLAGS_OVERWRITE_VARS, "dialog_height", i); } int AH_ImportKeyFileDialog_GetFilePageData(GWEN_DIALOG *dlg) { AH_IMPORTKEYFILE_DIALOG *xdlg; const char *s; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_IMPORTKEYFILE_DIALOG, dlg); assert(xdlg); s=GWEN_Dialog_GetCharProperty(dlg, "wiz_filename_edit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) AH_ImportKeyFileDialog_SetFileName(dlg, s); else { DBG_INFO(AQHBCI_LOGDOMAIN, "Missing file name"); return GWEN_ERROR_NO_DATA; } return 0; } int AH_ImportKeyFileDialog_GetBankPageData(GWEN_DIALOG *dlg) { AH_IMPORTKEYFILE_DIALOG *xdlg; const char *s; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_IMPORTKEYFILE_DIALOG, dlg); assert(xdlg); s=GWEN_Dialog_GetCharProperty(dlg, "wiz_bankcode_edit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) AH_ImportKeyFileDialog_SetBankCode(dlg, s); else { DBG_INFO(AQHBCI_LOGDOMAIN, "Missing bank code"); return GWEN_ERROR_NO_DATA; } s=GWEN_Dialog_GetCharProperty(dlg, "wiz_bankname_edit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) AH_ImportKeyFileDialog_SetBankName(dlg, s); else AH_ImportKeyFileDialog_SetBankName(dlg, NULL); s=GWEN_Dialog_GetCharProperty(dlg, "wiz_url_edit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) AH_ImportKeyFileDialog_SetUrl(dlg, s); else { DBG_INFO(AQHBCI_LOGDOMAIN, "Missing URL"); return GWEN_ERROR_NO_DATA; } return 0; } int AH_ImportKeyFileDialog_GetUserPageData(GWEN_DIALOG *dlg) { AH_IMPORTKEYFILE_DIALOG *xdlg; const char *s; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_IMPORTKEYFILE_DIALOG, dlg); assert(xdlg); s=GWEN_Dialog_GetCharProperty(dlg, "wiz_username_edit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) AH_ImportKeyFileDialog_SetUserName(dlg, s); else { DBG_INFO(AQHBCI_LOGDOMAIN, "Missing user name"); return GWEN_ERROR_NO_DATA; } s=GWEN_Dialog_GetCharProperty(dlg, "wiz_userid_edit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) AH_ImportKeyFileDialog_SetUserId(dlg, s); else { DBG_INFO(AQHBCI_LOGDOMAIN, "Missing user id"); return GWEN_ERROR_NO_DATA; } s=GWEN_Dialog_GetCharProperty(dlg, "wiz_customerid_edit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) AH_ImportKeyFileDialog_SetCustomerId(dlg, s); else AH_ImportKeyFileDialog_SetCustomerId(dlg, NULL); return 0; } int AH_ImportKeyFileDialog_CheckFileType(GWEN_DIALOG *dlg) { AH_IMPORTKEYFILE_DIALOG *xdlg; GWEN_PLUGIN_MANAGER *pm; GWEN_PLUGIN *pl; GWEN_BUFFER *tnBuf; GWEN_BUFFER *ttBuf; GWEN_CRYPT_TOKEN *ct; int rv; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_IMPORTKEYFILE_DIALOG, dlg); assert(xdlg); GWEN_Crypt_Token_Context_List_Clear(xdlg->contextList); /* create CryptToken */ pm=GWEN_PluginManager_FindPluginManager(GWEN_CRYPT_TOKEN_PLUGIN_TYPENAME); if (pm==NULL) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Plugin manager not found"); GWEN_Gui_ShowError(I18N("Error"), I18N("CryptToken plugin for type %s is not available. Did you install all necessary packages?"), GWEN_CRYPT_TOKEN_PLUGIN_TYPENAME); return GWEN_ERROR_INTERNAL; } tnBuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(tnBuf, xdlg->fileName); ttBuf=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_Crypt_Token_PluginManager_CheckToken(pm, GWEN_Crypt_Token_Device_File, ttBuf, tnBuf, 0); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(ttBuf); GWEN_Buffer_free(tnBuf); return rv; } pl=GWEN_PluginManager_GetPlugin(pm, GWEN_Buffer_GetStart(ttBuf)); if (pl==NULL) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Plugin not found"); GWEN_Gui_ShowError(I18N("Error"), I18N("CryptToken plugin for type %s is not available. Did you install all necessary packages?"), GWEN_Buffer_GetStart(ttBuf)); GWEN_Buffer_free(ttBuf); GWEN_Buffer_free(tnBuf); return GWEN_ERROR_NOT_SUPPORTED; } DBG_INFO(AQHBCI_LOGDOMAIN, "Plugin found"); ct=GWEN_Crypt_Token_Plugin_CreateToken(pl, GWEN_Buffer_GetStart(tnBuf)); if (ct==NULL) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not create crypt token"); GWEN_Buffer_free(ttBuf); GWEN_Buffer_free(tnBuf); return GWEN_ERROR_INTERNAL; } GWEN_Buffer_free(ttBuf); GWEN_Buffer_free(tnBuf); /* create crypt token */ rv=GWEN_Crypt_Token_Open(ct, 0, 0); if (rv<0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not open token"); GWEN_Gui_ShowError(I18N("Error"), I18N("The keyfile %s could not be opened. Please check permissions (%d)."), GWEN_Crypt_Token_GetTokenName(ct), rv); GWEN_Crypt_Token_free(ct); return rv; } GWEN_Dialog_SetIntProperty(dlg, "wiz_context_combo", GWEN_DialogProperty_ClearValues, 0, 0, 0); GWEN_Dialog_SetCharProperty(dlg, "wiz_context_combo", GWEN_DialogProperty_AddValue, 0, I18N("-- custom --"), 0); if (1) { uint32_t idList[MAX_CONTEXT_ID_ENTRIES]; uint32_t idCount; uint32_t i; idCount=MAX_CONTEXT_ID_ENTRIES; rv=GWEN_Crypt_Token_GetContextIdList(ct, idList, &idCount, 0); if (rv<0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not read context id list"); GWEN_Gui_ShowError(I18N("Error"), I18N("Could not read context id list (%d)."), rv); GWEN_Crypt_Token_Close(ct, 1, 0); GWEN_Crypt_Token_free(ct); return rv; } for (i=0; icontextList); tbuf=GWEN_Buffer_new(0, 256, 0, 1); snprintf(numbuf, sizeof(numbuf)-1, I18N("Context %d:"), i+1); numbuf[sizeof(numbuf)-1]=0; GWEN_Buffer_AppendString(tbuf, numbuf); s=GWEN_Crypt_Token_Context_GetServiceId(nctx); if (s && *s && strcasecmp(s, "20202020")!=0) GWEN_Buffer_AppendString(tbuf, s); else GWEN_Buffer_AppendString(tbuf, I18N("")); GWEN_Buffer_AppendString(tbuf, "-"); s=GWEN_Crypt_Token_Context_GetUserId(nctx); if (s && *s) GWEN_Buffer_AppendString(tbuf, s); else GWEN_Buffer_AppendString(tbuf, I18N("")); GWEN_Dialog_SetCharProperty(dlg, "wiz_context_combo", GWEN_DialogProperty_AddValue, 0, GWEN_Buffer_GetStart(tbuf), 0); GWEN_Buffer_free(tbuf); DBG_INFO(AQHBCI_LOGDOMAIN, "Added context %08x", idList[i]); } } } /* for */ /* close crypt token */ rv=GWEN_Crypt_Token_Close(ct, 0, 0); if (rv<0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not close token"); GWEN_Gui_ShowError(I18N("Error"), I18N("The keyfile %s could not be closed. Please check disc space."), GWEN_Crypt_Token_GetTokenName(ct), rv); GWEN_Crypt_Token_free(ct); return rv; } GWEN_Crypt_Token_free(ct); return 0; } int AH_ImportKeyFileDialog_EnterPage(GWEN_DIALOG *dlg, int page, int forwards) { AH_IMPORTKEYFILE_DIALOG *xdlg; int rv; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_IMPORTKEYFILE_DIALOG, dlg); assert(xdlg); switch (page) { case PAGE_BEGIN: GWEN_Dialog_SetIntProperty(dlg, "wiz_prev_button", GWEN_DialogProperty_Enabled, 0, 0, 0); GWEN_Dialog_SetIntProperty(dlg, "wiz_stack", GWEN_DialogProperty_Value, 0, page, 0); return GWEN_DialogEvent_ResultHandled; case PAGE_FILE: GWEN_Dialog_SetIntProperty(dlg, "wiz_prev_button", GWEN_DialogProperty_Enabled, 0, 1, 0); rv=AH_ImportKeyFileDialog_GetFilePageData(dlg); if (rv<0) GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 0, 0); else GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 1, 0); GWEN_Dialog_SetIntProperty(dlg, "wiz_stack", GWEN_DialogProperty_Value, 0, page, 0); return GWEN_DialogEvent_ResultHandled; case PAGE_BANK: if (forwards) { /* leaving FILE page, check whether we can open the file */ rv=AH_ImportKeyFileDialog_GetFilePageData(dlg); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); return GWEN_DialogEvent_ResultHandled; } rv=AH_ImportKeyFileDialog_CheckFileType(dlg); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); return GWEN_DialogEvent_ResultHandled; } } GWEN_Dialog_SetIntProperty(dlg, "wiz_prev_button", GWEN_DialogProperty_Enabled, 0, 1, 0); rv=AH_ImportKeyFileDialog_GetBankPageData(dlg); if (rv<0) GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 0, 0); else GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 1, 0); GWEN_Dialog_SetIntProperty(dlg, "wiz_stack", GWEN_DialogProperty_Value, 0, page, 0); return GWEN_DialogEvent_ResultHandled; case PAGE_USER: GWEN_Dialog_SetIntProperty(dlg, "wiz_prev_button", GWEN_DialogProperty_Enabled, 0, 1, 0); rv=AH_ImportKeyFileDialog_GetUserPageData(dlg); if (rv<0) GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 0, 0); else GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 1, 0); GWEN_Dialog_SetIntProperty(dlg, "wiz_stack", GWEN_DialogProperty_Value, 0, page, 0); return GWEN_DialogEvent_ResultHandled; case PAGE_CREATE: if (!forwards) GWEN_Dialog_SetCharProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Title, 0, I18N("Next"), 0); GWEN_Dialog_SetIntProperty(dlg, "wiz_stack", GWEN_DialogProperty_Value, 0, page, 0); return GWEN_DialogEvent_ResultHandled; case PAGE_END: GWEN_Dialog_SetIntProperty(dlg, "wiz_stack", GWEN_DialogProperty_Value, 0, page, 0); GWEN_Dialog_SetCharProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Title, 0, I18N("Finish"), 0); GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 1, 0); GWEN_Dialog_SetIntProperty(dlg, "wiz_prev_button", GWEN_DialogProperty_Enabled, 0, 0, 0); GWEN_Dialog_SetIntProperty(dlg, "wiz_abort_button", GWEN_DialogProperty_Enabled, 0, 0, 0); return GWEN_DialogEvent_ResultHandled; default: return GWEN_DialogEvent_ResultHandled; } return GWEN_DialogEvent_ResultHandled; } int AH_ImportKeyFileDialog_DoIt(GWEN_DIALOG *dlg) { AH_IMPORTKEYFILE_DIALOG *xdlg; AB_USER *u; GWEN_URL *url; int rv; uint32_t pid; AB_IMEXPORTER_CONTEXT *ctx; int contextId=1; int i; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_IMPORTKEYFILE_DIALOG, dlg); assert(xdlg); rv=AH_ImportKeyFileDialog_GetFilePageData(dlg); if (rv<0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "No file?"); // TODO: show error message return GWEN_DialogEvent_ResultHandled; } i=GWEN_Dialog_GetIntProperty(dlg, "wiz_context_combo", GWEN_DialogProperty_Value, 0, -1); if (i>0) { GWEN_CRYPT_TOKEN_CONTEXT *tctx; tctx=GWEN_Crypt_Token_Context_List_First(xdlg->contextList); while (tctx && --i) tctx=GWEN_Crypt_Token_Context_List_Next(tctx); if (tctx) contextId=GWEN_Crypt_Token_Context_GetId(tctx); } DBG_NOTICE(0, "Creating user"); u=AB_Provider_CreateUserObject(xdlg->provider); if (u==NULL) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not create user, maybe backend missing?"); GWEN_Gui_ShowError(I18N("Error"), "%s", I18N("Could not create HBCI user (internal error)")); return GWEN_DialogEvent_ResultHandled; } /* generic setup */ AB_User_SetUserName(u, xdlg->userName); AB_User_SetUserId(u, xdlg->userId); if (xdlg->customerId && *(xdlg->customerId)) AB_User_SetCustomerId(u, xdlg->customerId); else AB_User_SetCustomerId(u, xdlg->userId); AB_User_SetCountry(u, "de"); AB_User_SetBankCode(u, xdlg->bankCode); /* HBCI setup */ AH_User_SetTokenType(u, "ohbci"); AH_User_SetTokenName(u, AH_ImportKeyFileDialog_GetFileName(dlg)); AH_User_SetTokenContextId(u, contextId); AH_User_SetCryptMode(u, AH_CryptMode_Rdh); AH_User_SetStatus(u, AH_UserStatusPending); AH_User_SetHbciVersion(u, xdlg->hbciVersion); AH_User_SetRdhType(u, xdlg->rdhVersion); AH_User_SetFlags(u, xdlg->flags); url=GWEN_Url_fromString(xdlg->url); assert(url); GWEN_Url_SetProtocol(url, "hbci"); if (GWEN_Url_GetPort(url)==0) GWEN_Url_SetPort(url, 3000); AH_User_SetServerUrl(u, url); GWEN_Url_free(url); rv=AB_Provider_AddUser(xdlg->provider, u); if (rv<0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not add user (%d)", rv); AB_User_free(u); GWEN_Gui_ShowError(I18N("Error"), I18N("Could not add HBCI user, maybe there already is a user of that id (%d)"), rv); return GWEN_DialogEvent_ResultHandled; } pid=GWEN_Gui_ProgressStart(GWEN_GUI_PROGRESS_DELAY | GWEN_GUI_PROGRESS_ALLOW_EMBED | GWEN_GUI_PROGRESS_SHOW_PROGRESS | GWEN_GUI_PROGRESS_SHOW_ABORT, I18N("Setting Up Keyfile User"), I18N("The server keys and system id will now be retrieved."), 2, /* getkeys, getsysid */ 0); /* lock new user */ rv=AB_Provider_BeginExclUseUser(xdlg->provider, u); if (rv<0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not lock user (%d)", rv); GWEN_Gui_ProgressLog2(pid, GWEN_LoggerLevel_Error, I18N("Unable to lock users (%d)"), rv); AB_Provider_DeleteUser(xdlg->provider, AB_User_GetUniqueId(u)); GWEN_Gui_ProgressEnd(pid); return GWEN_DialogEvent_ResultHandled; } /* get server keys id */ GWEN_Gui_ProgressLog(pid, GWEN_LoggerLevel_Notice, I18N("Retrieving server keys")); ctx=AB_ImExporterContext_new(); rv=AH_Provider_GetServerKeys(xdlg->provider, u, ctx, 0, 1, 0); AB_ImExporterContext_free(ctx); if (rv<0) { AB_Provider_EndExclUseUser(xdlg->provider, u, 1); DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); AB_Provider_DeleteUser(xdlg->provider, AB_User_GetUniqueId(u)); GWEN_Gui_ProgressEnd(pid); return GWEN_DialogEvent_ResultHandled; } /* TODO: show bank key hash */ rv=GWEN_Gui_ProgressAdvance(pid, GWEN_GUI_PROGRESS_ONE); if (rv==GWEN_ERROR_USER_ABORTED) { AB_Provider_EndExclUseUser(xdlg->provider, u, 1); DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); AB_Provider_DeleteUser(xdlg->provider, AB_User_GetUniqueId(u)); GWEN_Gui_ProgressLog(pid, GWEN_LoggerLevel_Error, I18N("Aborted by user.")); GWEN_Gui_ProgressEnd(pid); return GWEN_DialogEvent_ResultHandled; } /* get sysid keys id */ GWEN_Gui_ProgressLog(pid, GWEN_LoggerLevel_Notice, I18N("Retrieving system id")); ctx=AB_ImExporterContext_new(); rv=AH_Provider_GetSysId(xdlg->provider, u, ctx, 0, 1, 0); AB_ImExporterContext_free(ctx); if (rv<0) { AB_Provider_EndExclUseUser(xdlg->provider, u, 1); DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); AB_Provider_DeleteUser(xdlg->provider, AB_User_GetUniqueId(u)); GWEN_Gui_ProgressEnd(pid); return GWEN_DialogEvent_ResultHandled; } rv=GWEN_Gui_ProgressAdvance(pid, GWEN_GUI_PROGRESS_ONE); if (rv==GWEN_ERROR_USER_ABORTED) { AB_Provider_EndExclUseUser(xdlg->provider, u, 1); DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); AB_Provider_DeleteUser(xdlg->provider, AB_User_GetUniqueId(u)); GWEN_Gui_ProgressLog(pid, GWEN_LoggerLevel_Error, I18N("Aborted by user.")); GWEN_Gui_ProgressEnd(pid); return GWEN_DialogEvent_ResultHandled; } /* unlock user */ rv=AB_Provider_EndExclUseUser(xdlg->provider, u, 0); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "Could not unlock customer [%s] (%d)", AB_User_GetCustomerId(u), rv); GWEN_Gui_ProgressLog2(pid, GWEN_LoggerLevel_Error, I18N("Could not unlock user %s (%d)"), AB_User_GetUserId(u), rv); AB_Provider_EndExclUseUser(xdlg->provider, u, 1); AB_Provider_DeleteUser(xdlg->provider, AB_User_GetUniqueId(u)); GWEN_Gui_ProgressEnd(pid); return GWEN_DialogEvent_ResultHandled; } GWEN_Gui_ProgressEnd(pid); AH_ImportKeyFileDialog_EnterPage(dlg, PAGE_END, 1); xdlg->user=u; return GWEN_DialogEvent_ResultHandled; } int AH_ImportKeyFileDialog_Next(GWEN_DIALOG *dlg) { AH_IMPORTKEYFILE_DIALOG *xdlg; int page; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_IMPORTKEYFILE_DIALOG, dlg); assert(xdlg); page=GWEN_Dialog_GetIntProperty(dlg, "wiz_stack", GWEN_DialogProperty_Value, 0, -1); if (page==PAGE_CREATE) { return AH_ImportKeyFileDialog_DoIt(dlg); } else if (pagePAGE_BEGIN) { page--; return AH_ImportKeyFileDialog_EnterPage(dlg, page, 0); } return GWEN_DialogEvent_ResultHandled; } int AH_ImportKeyFileDialog_HandleActivatedBankCode(GWEN_DIALOG *dlg) { AH_IMPORTKEYFILE_DIALOG *xdlg; GWEN_DIALOG *dlg2; int rv; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_IMPORTKEYFILE_DIALOG, dlg); assert(xdlg); dlg2=AB_SelectBankInfoDialog_new(xdlg->banking, "de", NULL); if (dlg2==NULL) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not create dialog"); GWEN_Gui_ShowError(I18N("Error"), "%s", I18N("Could not create dialog, maybe an installation error?")); return GWEN_DialogEvent_ResultHandled; } rv=GWEN_Gui_ExecDialog(dlg2, 0); if (rv==0) { /* rejected */ GWEN_Dialog_free(dlg2); return GWEN_DialogEvent_ResultHandled; } else { const AB_BANKINFO *bi; bi=AB_SelectBankInfoDialog_GetSelectedBankInfo(dlg2); if (bi) { const char *s; AB_BANKINFO_SERVICE *sv; s=AB_BankInfo_GetBankId(bi); GWEN_Dialog_SetCharProperty(dlg, "wiz_bankcode_edit", GWEN_DialogProperty_Value, 0, (s && *s)?s:"", 0); s=AB_BankInfo_GetBankName(bi); GWEN_Dialog_SetCharProperty(dlg, "wiz_bankname_edit", GWEN_DialogProperty_Value, 0, (s && *s)?s:"", 0); sv=AB_BankInfoService_List_First(AB_BankInfo_GetServices(bi)); while (sv) { const char *s; s=AB_BankInfoService_GetType(sv); if (s && *s && strcasecmp(s, "HBCI")==0) { s=AB_BankInfoService_GetMode(sv); if (s && *s && strncasecmp(s, "RDH", 3)==0) break; } sv=AB_BankInfoService_List_Next(sv); } if (sv) { /* RDH service found */ s=AB_BankInfoService_GetMode(sv); if (s && *s) { if (strcasecmp(s, "RDH1")==0) xdlg->rdhVersion=1; else if (strcasecmp(s, "RDH2")==0) xdlg->rdhVersion=2; else if (strcasecmp(s, "RDH3")==0) xdlg->rdhVersion=3; else if (strcasecmp(s, "RDH4")==0) xdlg->rdhVersion=4; else if (strcasecmp(s, "RDH5")==0) xdlg->rdhVersion=5; else if (strcasecmp(s, "RDH6")==0) xdlg->rdhVersion=6; else if (strcasecmp(s, "RDH7")==0) xdlg->rdhVersion=7; else if (strcasecmp(s, "RDH8")==0) xdlg->rdhVersion=8; else if (strcasecmp(s, "RDH9")==0) xdlg->rdhVersion=9; else if (strcasecmp(s, "RDH10")==0) xdlg->rdhVersion=10; else if (strcasecmp(s, "RDH")==0) xdlg->rdhVersion=1; } s=AB_BankInfoService_GetAddress(sv); GWEN_Dialog_SetCharProperty(dlg, "wiz_url_edit", GWEN_DialogProperty_Value, 0, (s && *s)?s:"", 0); s=AB_BankInfoService_GetPversion(sv); if (s && *s) { if (strcasecmp(s, "2.01")==0 || strcasecmp(s, "2")==0) xdlg->hbciVersion=201; else if (strcasecmp(s, "2.10")==0 || strcasecmp(s, "2.1")==0) xdlg->hbciVersion=210; else if (strcasecmp(s, "2.20")==0 || strcasecmp(s, "2.2")==0) xdlg->hbciVersion=220; else if (strcasecmp(s, "3.00")==0 || strcasecmp(s, "3.0")==0 || strcasecmp(s, "3")==0) xdlg->hbciVersion=300; else if (strcasecmp(s, "4.00")==0 || strcasecmp(s, "4.0")==0 || strcasecmp(s, "4")==0) xdlg->hbciVersion=400; } } } } GWEN_Dialog_free(dlg2); if (AH_ImportKeyFileDialog_GetBankPageData(dlg)<0) GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 0, 0); else GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 1, 0); return GWEN_DialogEvent_ResultHandled; } int AH_ImportKeyFileDialog_HandleActivatedSpecial(GWEN_DIALOG *dlg) { AH_IMPORTKEYFILE_DIALOG *xdlg; GWEN_DIALOG *dlg2; int rv; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_IMPORTKEYFILE_DIALOG, dlg); assert(xdlg); dlg2=AH_RdhSpecialDialog_new(xdlg->provider); if (dlg2==NULL) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not create dialog"); GWEN_Gui_ShowError(I18N("Error"), "%s", I18N("Could not create dialog, maybe an installation error?")); return GWEN_DialogEvent_ResultHandled; } AH_RdhSpecialDialog_SetFlags(dlg2, xdlg->flags); rv=GWEN_Gui_ExecDialog(dlg2, 0); if (rv==0) { /* rejected */ GWEN_Dialog_free(dlg2); return GWEN_DialogEvent_ResultHandled; } else { xdlg->hbciVersion=AH_RdhSpecialDialog_GetHbciVersion(dlg2); xdlg->rdhVersion=AH_RdhSpecialDialog_GetRdhVersion(dlg2); xdlg->flags=AH_RdhSpecialDialog_GetFlags(dlg2); } GWEN_Dialog_free(dlg2); return GWEN_DialogEvent_ResultHandled; } int AH_ImportKeyFileDialog_HandleActivatedFileButton(GWEN_DIALOG *dlg) { AH_IMPORTKEYFILE_DIALOG *xdlg; int rv; const char *s; GWEN_BUFFER *pathBuffer; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_IMPORTKEYFILE_DIALOG, dlg); assert(xdlg); pathBuffer=GWEN_Buffer_new(0, 256, 0, 1); s=GWEN_Dialog_GetCharProperty(dlg, "wiz_filename_edit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) GWEN_Buffer_AppendString(pathBuffer, s); rv=GWEN_Gui_GetFileName(I18N("Select Keyfile"), GWEN_Gui_FileNameType_OpenFileName, 0, I18N("All Files (*)\tOHBCI Files (*ohbci;*.medium)"), pathBuffer, GWEN_Dialog_GetGuiId(dlg)); if (rv==0) { GWEN_Dialog_SetCharProperty(dlg, "wiz_filename_edit", GWEN_DialogProperty_Value, 0, GWEN_Buffer_GetStart(pathBuffer), 0); rv=AH_ImportKeyFileDialog_GetFilePageData(dlg); if (rv<0) GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 0, 0); else GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 1, 0); } else { DBG_NOTICE(AQHBCI_LOGDOMAIN, "here (%d)", rv); } GWEN_Buffer_free(pathBuffer); return GWEN_DialogEvent_ResultHandled; } static int AH_ImportKeyFileDialog_HandleActivatedIniLetter(GWEN_DIALOG *dlg) { AH_IMPORTKEYFILE_DIALOG *xdlg; int rv; GWEN_BUFFER *tbuf; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_IMPORTKEYFILE_DIALOG, dlg); assert(xdlg); tbuf=GWEN_Buffer_new(0, 1024, 0, 1); /* add HTML version of the INI letter */ GWEN_Buffer_AppendString(tbuf, ""); rv=AH_Provider_GetIniLetterHtml(AB_User_GetProvider(xdlg->user), xdlg->user, 0, 0, tbuf, 1); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); // TODO: show error message AB_Banking_ClearCryptTokenList(xdlg->banking); GWEN_Buffer_free(tbuf); return GWEN_DialogEvent_ResultHandled; } GWEN_Buffer_AppendString(tbuf, ""); /* add ASCII version of the INI letter for frontends which don't support HTML */ rv=AH_Provider_GetIniLetterTxt(AB_User_GetProvider(xdlg->user), xdlg->user, 0, 0, tbuf, 0); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); // TODO: show error message AB_Banking_ClearCryptTokenList(xdlg->banking); GWEN_Buffer_free(tbuf); return GWEN_DialogEvent_ResultHandled; } rv=GWEN_Gui_Print(I18N("INI Letter"), "HBCI-INILETTER", I18N("INI Letter for HBCI"), GWEN_Buffer_GetStart(tbuf), 0); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); // TODO: show error message GWEN_Buffer_free(tbuf); return GWEN_DialogEvent_ResultHandled; } GWEN_Buffer_free(tbuf); return GWEN_DialogEvent_ResultHandled; } int AH_ImportKeyFileDialog_HandleActivatedContext(GWEN_DIALOG *dlg) { AH_IMPORTKEYFILE_DIALOG *xdlg; int i; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_IMPORTKEYFILE_DIALOG, dlg); assert(xdlg); i=GWEN_Dialog_GetIntProperty(dlg, "wiz_context_combo", GWEN_DialogProperty_Value, 0, -1); if (i>0) { GWEN_CRYPT_TOKEN_CONTEXT *ctx; ctx=GWEN_Crypt_Token_Context_List_First(xdlg->contextList); while (ctx && --i) ctx=GWEN_Crypt_Token_Context_List_Next(ctx); if (ctx) { const char *s; s=GWEN_Crypt_Token_Context_GetServiceId(ctx); GWEN_Dialog_SetCharProperty(dlg, "wiz_bankcode_edit", GWEN_DialogProperty_Value, 0, (s && *s)?s:"", 0); s=GWEN_Crypt_Token_Context_GetAddress(ctx); GWEN_Dialog_SetCharProperty(dlg, "wiz_url_edit", GWEN_DialogProperty_Value, 0, (s && *s)?s:"", 0); s=GWEN_Crypt_Token_Context_GetUserId(ctx); GWEN_Dialog_SetCharProperty(dlg, "wiz_userid_edit", GWEN_DialogProperty_Value, 0, (s && *s)?s:"", 0); GWEN_Dialog_SetCharProperty(dlg, "wiz_customerid_edit", GWEN_DialogProperty_Value, 0, (s && *s)?s:"", 0); } } return GWEN_DialogEvent_ResultHandled; } int AH_ImportKeyFileDialog_HandleActivated(GWEN_DIALOG *dlg, const char *sender) { if (strcasecmp(sender, "wiz_filename_button")==0) return AH_ImportKeyFileDialog_HandleActivatedFileButton(dlg); else if (strcasecmp(sender, "wiz_bankcode_button")==0) return AH_ImportKeyFileDialog_HandleActivatedBankCode(dlg); else if (strcasecmp(sender, "wiz_prev_button")==0) return AH_ImportKeyFileDialog_Previous(dlg); else if (strcasecmp(sender, "wiz_next_button")==0) return AH_ImportKeyFileDialog_Next(dlg); else if (strcasecmp(sender, "wiz_abort_button")==0) return GWEN_DialogEvent_ResultReject; else if (strcasecmp(sender, "wiz_special_button")==0) return AH_ImportKeyFileDialog_HandleActivatedSpecial(dlg); else if (strcasecmp(sender, "wiz_iniletter_button")==0) return AH_ImportKeyFileDialog_HandleActivatedIniLetter(dlg); else if (strcasecmp(sender, "wiz_help_button")==0) { /* TODO: open a help dialog */ } else if (strcasecmp(sender, "wiz_context_combo")==0) return AH_ImportKeyFileDialog_HandleActivatedContext(dlg); return GWEN_DialogEvent_ResultNotHandled; } int AH_ImportKeyFileDialog_HandleValueChanged(GWEN_DIALOG *dlg, const char *sender) { if (strcasecmp(sender, "wiz_filename_edit")==0 || strcasecmp(sender, "wiz_bankcode_edit")==0 || strcasecmp(sender, "wiz_url_edit")==0 || strcasecmp(sender, "wiz_username_edit")==0 || strcasecmp(sender, "wiz_userid_edit")==0 || strcasecmp(sender, "wiz_customerid_edit")==0) { int rv; if (GWEN_Dialog_GetIntProperty(dlg, "wiz_stack", GWEN_DialogProperty_Value, 0, -1)==PAGE_FILE) { rv=AH_ImportKeyFileDialog_GetFilePageData(dlg); if (rv<0) GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 0, 0); else GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 1, 0); } else if (GWEN_Dialog_GetIntProperty(dlg, "wiz_stack", GWEN_DialogProperty_Value, 0, -1)==PAGE_BANK) { rv=AH_ImportKeyFileDialog_GetBankPageData(dlg); if (rv<0) GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 0, 0); else GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 1, 0); } else if (GWEN_Dialog_GetIntProperty(dlg, "wiz_stack", GWEN_DialogProperty_Value, 0, -1)==PAGE_USER) { rv=AH_ImportKeyFileDialog_GetUserPageData(dlg); if (rv<0) GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 0, 0); else GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 1, 0); } return GWEN_DialogEvent_ResultHandled; } return GWEN_DialogEvent_ResultNotHandled; } int GWENHYWFAR_CB AH_ImportKeyFileDialog_SignalHandler(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender) { AH_IMPORTKEYFILE_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_IMPORTKEYFILE_DIALOG, dlg); assert(xdlg); switch (t) { case GWEN_DialogEvent_TypeInit: AH_ImportKeyFileDialog_Init(dlg); return GWEN_DialogEvent_ResultHandled;; case GWEN_DialogEvent_TypeFini: AH_ImportKeyFileDialog_Fini(dlg); return GWEN_DialogEvent_ResultHandled;; case GWEN_DialogEvent_TypeValueChanged: return AH_ImportKeyFileDialog_HandleValueChanged(dlg, sender); case GWEN_DialogEvent_TypeActivated: return AH_ImportKeyFileDialog_HandleActivated(dlg, sender); case GWEN_DialogEvent_TypeEnabled: case GWEN_DialogEvent_TypeDisabled: case GWEN_DialogEvent_TypeClose: case GWEN_DialogEvent_TypeLast: return GWEN_DialogEvent_ResultNotHandled; default: break; } return GWEN_DialogEvent_ResultNotHandled; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/dialogs/dlg_edituserddv.dlg0000664000175000017500000000611714043610745024077 00000000000000 aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/dialogs/w_utils.c0000664000175000017500000001370214625171605022072 00000000000000/*************************************************************************** begin : Wed May 01 2024 copyright : (C) 2024 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "w_utils.h" #include "aqhbci/aqhbci.h" #include "aqbanking/i18n_l.h" #include static void _removeAllSpaces(uint8_t *s); void AH_Widget_UserToGuiText(GWEN_DIALOG *dlg, const char *widgetName, const AB_USER *user, AH_WIDGET_USER_GETCHARVALUE_FN fn) { const char *s; s=fn(user); GWEN_Dialog_SetCharProperty(dlg, widgetName, GWEN_DialogProperty_Value, 0, s?s:"", 0); } int AH_Widget_GuiTextToUserDeleSpaces(GWEN_DIALOG *dlg, const char *widgetName, AB_USER *user, AH_WIDGET_USER_SETCHARVALUE_FN fn, const char *errMsgIfMissing) { const char *s; s=GWEN_Dialog_GetCharProperty(dlg, widgetName, GWEN_DialogProperty_Value, 0, NULL); if (s && *s) { GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(tbuf, s); GWEN_Text_CondenseBuffer(tbuf); _removeAllSpaces((uint8_t *)GWEN_Buffer_GetStart(tbuf)); if (user) fn(user, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } else { DBG_ERROR(NULL, "Missing input from widget %s", widgetName); if (errMsgIfMissing) { GWEN_Gui_ShowError(I18N("Error on Input"), "%s", errMsgIfMissing); GWEN_Dialog_SetIntProperty(dlg, widgetName, GWEN_DialogProperty_Focus, 0, 1, 0); return GWEN_ERROR_INVALID; } if (user) fn(user, NULL); } return 0; } int AH_Widget_GuiTextToUserKeepSpaces(GWEN_DIALOG *dlg, const char *widgetName, AB_USER *user, AH_WIDGET_USER_SETCHARVALUE_FN fn, const char *errMsgIfMissing) { const char *s; s=GWEN_Dialog_GetCharProperty(dlg, widgetName, GWEN_DialogProperty_Value, 0, NULL); if (s && *s) { GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(tbuf, s); GWEN_Text_CondenseBuffer(tbuf); if (user) fn(user, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } else { DBG_ERROR(NULL, "Missing input from widget %s", widgetName); if (errMsgIfMissing) { GWEN_Gui_ShowError(I18N("Error on Input"), "%s", errMsgIfMissing); GWEN_Dialog_SetIntProperty(dlg, widgetName, GWEN_DialogProperty_Focus, 0, 1, 0); return GWEN_ERROR_INVALID; } if (user) fn(user, NULL); } return 0; } void AH_Widget_AccountToGuiText(GWEN_DIALOG *dlg, const char *widgetName, const AB_ACCOUNT *acc, AH_WIDGET_ACCOUNT_GETCHARVALUE_FN fn) { const char *s; s=fn(acc); GWEN_Dialog_SetCharProperty(dlg, widgetName, GWEN_DialogProperty_Value, 0, s?s:"", 0); } int AH_Widget_GuiTextToAccountDeleSpaces(GWEN_DIALOG *dlg, const char *widgetName, AB_ACCOUNT *acc, AH_WIDGET_ACCOUNT_SETCHARVALUE_FN fn, const char *errMsgIfMissing) { const char *s; s=GWEN_Dialog_GetCharProperty(dlg, widgetName, GWEN_DialogProperty_Value, 0, NULL); if (s && *s) { GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(tbuf, s); GWEN_Text_CondenseBuffer(tbuf); _removeAllSpaces((uint8_t *)GWEN_Buffer_GetStart(tbuf)); if (acc) fn(acc, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } else { DBG_ERROR(NULL, "Missing input from widget %s", widgetName); if (errMsgIfMissing) { GWEN_Gui_ShowError(I18N("Error on Input"), "%s", errMsgIfMissing); GWEN_Dialog_SetIntProperty(dlg, widgetName, GWEN_DialogProperty_Focus, 0, 1, 0); return GWEN_ERROR_INVALID; } if (acc) fn(acc, NULL); } return 0; } int AH_Widget_GuiTextToAccountKeepSpaces(GWEN_DIALOG *dlg, const char *widgetName, AB_ACCOUNT *acc, AH_WIDGET_ACCOUNT_SETCHARVALUE_FN fn, const char *errMsgIfMissing) { const char *s; s=GWEN_Dialog_GetCharProperty(dlg, widgetName, GWEN_DialogProperty_Value, 0, NULL); if (s && *s) { GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(tbuf, s); GWEN_Text_CondenseBuffer(tbuf); if (acc) fn(acc, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } else { DBG_ERROR(NULL, "Missing input from widget %s", widgetName); if (errMsgIfMissing) { GWEN_Gui_ShowError(I18N("Error on Input"), "%s", errMsgIfMissing); GWEN_Dialog_SetIntProperty(dlg, widgetName, GWEN_DialogProperty_Focus, 0, 1, 0); return GWEN_ERROR_INVALID; } if (acc) fn(acc, NULL); } return 0; } void _removeAllSpaces(uint8_t *s) { uint8_t *d; d=s; while (*s) { if (*s>33) *(d++)=*s; s++; } *d=0; } GWEN_URL *AH_Widget_GuiTextToUrl(GWEN_DIALOG *dlg, const char *widgetName, int defaultPort) { const char *s; s=GWEN_Dialog_GetCharProperty(dlg, widgetName, GWEN_DialogProperty_Value, 0, NULL); if (s && *s) { GWEN_BUFFER *tbuf; GWEN_URL *gu; tbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(tbuf, s); GWEN_Text_CondenseBuffer(tbuf); _removeAllSpaces((uint8_t *)GWEN_Buffer_GetStart(tbuf)); gu=GWEN_Url_fromString(GWEN_Buffer_GetStart(tbuf)); if (gu==NULL) { DBG_INFO(AQHBCI_LOGDOMAIN, "Invalid URL string: [%s]", s); GWEN_Buffer_free(tbuf); return NULL; } /* set port to 3000 if not set */ if (GWEN_Url_GetPort(gu)==0) GWEN_Url_SetPort(gu, defaultPort); GWEN_Buffer_free(tbuf); return gu; } return NULL; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/dialogs/dlg_edituserpintan.dlg0000664000175000017500000001070414625171605024613 00000000000000 aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/dialogs/w_accounttypecombo.h0000664000175000017500000000165414625171605024320 00000000000000/*************************************************************************** begin : Wed May 01 2024 copyright : (C) 2024 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQHBCI_WIDGET_ACCOUNTTYPECOMBO_H #define AQHBCI_WIDGET_ACCOUNTTYPECOMBO_H #include #include void AH_Widget_AccountTypeComboSetup(GWEN_DIALOG *dlg, const char *widgetName); void AH_Widget_AccountTypeComboSetCurrent(GWEN_DIALOG *dlg, const char *widgetName, AB_ACCOUNT_TYPE t); AB_ACCOUNT_TYPE AH_Widget_AccountTypeComboGetCurrent(GWEN_DIALOG *dlg, const char *widgetName); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/dialogs/dlg_pintan_special.c0000664000175000017500000002623514546575647024250 00000000000000/*************************************************************************** begin : Mon Apr 12 2010 copyright : (C) 2018 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "dlg_pintan_special_p.h" #include "aqbanking/i18n_l.h" #include #include #include "aqhbci/banking/user.h" #include "aqhbci/banking/provider.h" #include #include #include #include #include #define DIALOG_MINWIDTH 200 #define DIALOG_MINHEIGHT 100 GWEN_INHERIT(GWEN_DIALOG, AH_PINTAN_SPECIAL_DIALOG) GWEN_DIALOG *AH_PinTanSpecialDialog_new(AB_PROVIDER *pro) { GWEN_DIALOG *dlg; AH_PINTAN_SPECIAL_DIALOG *xdlg; GWEN_BUFFER *fbuf; int rv; dlg=GWEN_Dialog_new("ah_setup_pintan_special"); GWEN_NEW_OBJECT(AH_PINTAN_SPECIAL_DIALOG, xdlg); GWEN_INHERIT_SETDATA(GWEN_DIALOG, AH_PINTAN_SPECIAL_DIALOG, dlg, xdlg, AH_PinTanSpecialDialog_FreeData); GWEN_Dialog_SetSignalHandler(dlg, AH_PinTanSpecialDialog_SignalHandler); /* get path of dialog description file */ fbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_PathManager_FindFile(AB_PM_LIBNAME, AB_PM_DATADIR, "aqbanking/backends/aqhbci/dialogs/dlg_pintan_special.dlg", fbuf); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "Dialog description file not found (%d).", rv); GWEN_Buffer_free(fbuf); GWEN_Dialog_free(dlg); return NULL; } /* read dialog from dialog description file */ rv=GWEN_Dialog_ReadXmlFile(dlg, GWEN_Buffer_GetStart(fbuf)); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d).", rv); GWEN_Buffer_free(fbuf); GWEN_Dialog_free(dlg); return NULL; } GWEN_Buffer_free(fbuf); xdlg->banking=AB_Provider_GetBanking(pro); xdlg->provider=pro; /* preset */ xdlg->hbciVersion=300; xdlg->httpVMajor=1; xdlg->httpVMinor=1; /* done */ return dlg; } void GWENHYWFAR_CB AH_PinTanSpecialDialog_FreeData(void *bp, void *p) { AH_PINTAN_SPECIAL_DIALOG *xdlg; xdlg=(AH_PINTAN_SPECIAL_DIALOG *) p; free(xdlg->tanMediumId); GWEN_FREE_OBJECT(xdlg); } int AH_PinTanSpecialDialog_GetHttpVMajor(const GWEN_DIALOG *dlg) { AH_PINTAN_SPECIAL_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_PINTAN_SPECIAL_DIALOG, dlg); assert(xdlg); return xdlg->httpVMajor; } int AH_PinTanSpecialDialog_GetHttpVMinor(const GWEN_DIALOG *dlg) { AH_PINTAN_SPECIAL_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_PINTAN_SPECIAL_DIALOG, dlg); assert(xdlg); return xdlg->httpVMinor; } void AH_PinTanSpecialDialog_SetHttpVersion(GWEN_DIALOG *dlg, int vmajor, int vminor) { AH_PINTAN_SPECIAL_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_PINTAN_SPECIAL_DIALOG, dlg); assert(xdlg); xdlg->httpVMajor=vmajor; xdlg->httpVMinor=vminor; } int AH_PinTanSpecialDialog_GetHbciVersion(const GWEN_DIALOG *dlg) { AH_PINTAN_SPECIAL_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_PINTAN_SPECIAL_DIALOG, dlg); assert(xdlg); return xdlg->hbciVersion; } void AH_PinTanSpecialDialog_SetHbciVersion(GWEN_DIALOG *dlg, int i) { AH_PINTAN_SPECIAL_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_PINTAN_SPECIAL_DIALOG, dlg); assert(xdlg); xdlg->hbciVersion=i; } uint32_t AH_PinTanSpecialDialog_GetFlags(const GWEN_DIALOG *dlg) { AH_PINTAN_SPECIAL_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_PINTAN_SPECIAL_DIALOG, dlg); assert(xdlg); return xdlg->flags; } void AH_PinTanSpecialDialog_SetFlags(GWEN_DIALOG *dlg, uint32_t fl) { AH_PINTAN_SPECIAL_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_PINTAN_SPECIAL_DIALOG, dlg); assert(xdlg); xdlg->flags=fl; } void AH_PinTanSpecialDialog_AddFlags(GWEN_DIALOG *dlg, uint32_t fl) { AH_PINTAN_SPECIAL_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_PINTAN_SPECIAL_DIALOG, dlg); assert(xdlg); xdlg->flags&=~fl; } void AH_PinTanSpecialDialog_SubFlags(GWEN_DIALOG *dlg, uint32_t fl) { AH_PINTAN_SPECIAL_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_PINTAN_SPECIAL_DIALOG, dlg); assert(xdlg); xdlg->flags&=~fl; } const char *AH_PinTanSpecialDialog_GetTanMediumId(const GWEN_DIALOG *dlg) { AH_PINTAN_SPECIAL_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_PINTAN_SPECIAL_DIALOG, dlg); assert(xdlg); return xdlg->tanMediumId; } void AH_PinTanSpecialDialog_SetTanMediumId(GWEN_DIALOG *dlg, const char *s) { AH_PINTAN_SPECIAL_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_PINTAN_SPECIAL_DIALOG, dlg); assert(xdlg); free(xdlg->tanMediumId); if (s && *s) xdlg->tanMediumId=strdup(s); else xdlg->tanMediumId=NULL; } void AH_PinTanSpecialDialog_Init(GWEN_DIALOG *dlg) { AH_PINTAN_SPECIAL_DIALOG *xdlg; GWEN_DB_NODE *dbPrefs; int i; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_PINTAN_SPECIAL_DIALOG, dlg); assert(xdlg); dbPrefs=GWEN_Dialog_GetPreferences(dlg); GWEN_Dialog_SetCharProperty(dlg, "", GWEN_DialogProperty_Title, 0, I18N("HBCI PIN/TAN Special Settings"), 0); GWEN_Dialog_SetCharProperty(dlg, "hbciVersionCombo", GWEN_DialogProperty_AddValue, 0, "2.20", 0); GWEN_Dialog_SetCharProperty(dlg, "hbciVersionCombo", GWEN_DialogProperty_AddValue, 0, "3.0", 0); GWEN_Dialog_SetCharProperty(dlg, "httpVersionCombo", GWEN_DialogProperty_AddValue, 0, "1.0", 0); GWEN_Dialog_SetCharProperty(dlg, "httpVersionCombo", GWEN_DialogProperty_AddValue, 0, "1.1", 0); /* toGui */ switch (((xdlg->httpVMajor)<<8)+xdlg->httpVMinor) { case 0x0100: GWEN_Dialog_SetIntProperty(dlg, "httpVersionCombo", GWEN_DialogProperty_Value, 0, 0, 0); break; case 0x0101: GWEN_Dialog_SetIntProperty(dlg, "httpVersionCombo", GWEN_DialogProperty_Value, 0, 1, 0); break; default: break; } switch (xdlg->hbciVersion) { case 220: GWEN_Dialog_SetIntProperty(dlg, "hbciVersionCombo", GWEN_DialogProperty_Value, 0, 0, 0); break; case 300: GWEN_Dialog_SetIntProperty(dlg, "hbciVersionCombo", GWEN_DialogProperty_Value, 0, 1, 0); break; default: break; } GWEN_Dialog_SetIntProperty(dlg, "noBase64Check", GWEN_DialogProperty_Value, 0, (xdlg->flags & AH_USER_FLAGS_NO_BASE64)?1:0, 0); GWEN_Dialog_SetIntProperty(dlg, "omitSmsAccountCheck", GWEN_DialogProperty_Value, 0, (xdlg->flags & AH_USER_FLAGS_TAN_OMIT_SMS_ACCOUNT)?1:0, 0); if (xdlg->tanMediumId) GWEN_Dialog_SetCharProperty(dlg, "tanMediumIdEdit", GWEN_DialogProperty_Value, 0, xdlg->tanMediumId, 0); /* set tooltip */ GWEN_Dialog_SetCharProperty(dlg, "tanMediumIdEdit", GWEN_DialogProperty_ToolTip, 0, I18N("For smsTAN or mTAN this is your mobile phone number. " "Please ask your bank for the necessary format of this number."), 0); /* read width */ i=GWEN_DB_GetIntValue(dbPrefs, "dialog_width", 0, -1); if (i>=DIALOG_MINWIDTH) GWEN_Dialog_SetIntProperty(dlg, "", GWEN_DialogProperty_Width, 0, i, 0); /* read height */ i=GWEN_DB_GetIntValue(dbPrefs, "dialog_height", 0, -1); if (i>=DIALOG_MINHEIGHT) GWEN_Dialog_SetIntProperty(dlg, "", GWEN_DialogProperty_Height, 0, i, 0); } void AH_PinTanSpecialDialog_Fini(GWEN_DIALOG *dlg) { AH_PINTAN_SPECIAL_DIALOG *xdlg; int i; GWEN_DB_NODE *dbPrefs; uint32_t flags; const char *s; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_PINTAN_SPECIAL_DIALOG, dlg); assert(xdlg); dbPrefs=GWEN_Dialog_GetPreferences(dlg); /* fromGui */ i=GWEN_Dialog_GetIntProperty(dlg, "hbciVersionCombo", GWEN_DialogProperty_Value, 0, -1); switch (i) { case 0: xdlg->hbciVersion=220; break; default: case 1: xdlg->hbciVersion=300; break; } i=GWEN_Dialog_GetIntProperty(dlg, "httpVersionCombo", GWEN_DialogProperty_Value, 0, -1); switch (i) { case 0: xdlg->httpVMajor=1; xdlg->httpVMinor=0; break; default: case 1: xdlg->httpVMajor=1; xdlg->httpVMinor=1; break; } flags=0; if (GWEN_Dialog_GetIntProperty(dlg, "noBase64Check", GWEN_DialogProperty_Value, 0, 0)) flags|=AH_USER_FLAGS_NO_BASE64; if (GWEN_Dialog_GetIntProperty(dlg, "omitSmsAccountCheck", GWEN_DialogProperty_Value, 0, 0)) flags|=AH_USER_FLAGS_TAN_OMIT_SMS_ACCOUNT; xdlg->flags=flags; s=GWEN_Dialog_GetCharProperty(dlg, "tanMediumIdEdit", GWEN_DialogProperty_Value, 0, NULL); AH_PinTanSpecialDialog_SetTanMediumId(dlg, s); /* store dialog width */ i=GWEN_Dialog_GetIntProperty(dlg, "", GWEN_DialogProperty_Width, 0, -1); GWEN_DB_SetIntValue(dbPrefs, GWEN_DB_FLAGS_OVERWRITE_VARS, "dialog_width", i); /* store dialog height */ i=GWEN_Dialog_GetIntProperty(dlg, "", GWEN_DialogProperty_Height, 0, -1); GWEN_DB_SetIntValue(dbPrefs, GWEN_DB_FLAGS_OVERWRITE_VARS, "dialog_height", i); } int AH_PinTanSpecialDialog_HandleActivated(GWEN_DIALOG *dlg, const char *sender) { DBG_NOTICE(0, "Activated: %s", sender); if (strcasecmp(sender, "okButton")==0) return GWEN_DialogEvent_ResultAccept; else if (strcasecmp(sender, "abortButton")==0) return GWEN_DialogEvent_ResultReject; else if (strcasecmp(sender, "helpButton")==0) { /* TODO: open a help dialog */ } return GWEN_DialogEvent_ResultNotHandled; } int GWENHYWFAR_CB AH_PinTanSpecialDialog_SignalHandler(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender) { AH_PINTAN_SPECIAL_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_PINTAN_SPECIAL_DIALOG, dlg); assert(xdlg); switch (t) { case GWEN_DialogEvent_TypeInit: AH_PinTanSpecialDialog_Init(dlg); return GWEN_DialogEvent_ResultHandled;; case GWEN_DialogEvent_TypeFini: AH_PinTanSpecialDialog_Fini(dlg); return GWEN_DialogEvent_ResultHandled;; case GWEN_DialogEvent_TypeValueChanged: return GWEN_DialogEvent_ResultHandled;; case GWEN_DialogEvent_TypeActivated: return AH_PinTanSpecialDialog_HandleActivated(dlg, sender); case GWEN_DialogEvent_TypeEnabled: case GWEN_DialogEvent_TypeDisabled: case GWEN_DialogEvent_TypeClose: case GWEN_DialogEvent_TypeLast: return GWEN_DialogEvent_ResultNotHandled; default: break; } return GWEN_DialogEvent_ResultNotHandled; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/dialogs/dlg_pintan_special_p.h0000664000175000017500000000226314043610745024544 00000000000000/*************************************************************************** begin : Wed Apr 14 2010 copyright : (C) 2018 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQHBCI_DLG_PINTAN_SPECIAL_P_H #define AQHBCI_DLG_PINTAN_SPECIAL_P_H #include "dlg_pintan_special_l.h" typedef struct AH_PINTAN_SPECIAL_DIALOG AH_PINTAN_SPECIAL_DIALOG; struct AH_PINTAN_SPECIAL_DIALOG { AB_BANKING *banking; AB_PROVIDER *provider; int httpVMajor; int httpVMinor; int hbciVersion; uint32_t flags; char *tanMediumId; }; static void GWENHYWFAR_CB AH_PinTanSpecialDialog_FreeData(void *bp, void *p); static int GWENHYWFAR_CB AH_PinTanSpecialDialog_SignalHandler(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/dialogs/dlg_rdh_special_l.h0000664000175000017500000000276214043610745024030 00000000000000/*************************************************************************** begin : Sat Jun 26 2010 copyright : (C) 2018 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQHBCI_DLG_RDH_SPECIAL_H #define AQHBCI_DLG_RDH_SPECIAL_H #include #include #include #include #include #ifdef __cplusplus extern "C" { #endif GWEN_DIALOG *AH_RdhSpecialDialog_new(AB_PROVIDER *pro); int AH_RdhSpecialDialog_GetHbciVersion(const GWEN_DIALOG *dlg); void AH_RdhSpecialDialog_SetHbciVersion(GWEN_DIALOG *dlg, int i); int AH_RdhSpecialDialog_GetRdhVersion(const GWEN_DIALOG *dlg); void AH_RdhSpecialDialog_SetRdhVersion(GWEN_DIALOG *dlg, int i); int AH_RdhSpecialDialog_GetCryptMode(const GWEN_DIALOG *dlg); void AH_RdhSpecialDialog_SetCryptMode(GWEN_DIALOG *dlg, int i); uint32_t AH_RdhSpecialDialog_GetFlags(const GWEN_DIALOG *dlg); void AH_RdhSpecialDialog_SetFlags(GWEN_DIALOG *dlg, uint32_t fl); void AH_RdhSpecialDialog_AddFlags(GWEN_DIALOG *dlg, uint32_t fl); void AH_RdhSpecialDialog_SubFlags(GWEN_DIALOG *dlg, uint32_t fl); #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/dialogs/dlg_ddvcard_special.dlg0000664000175000017500000000303114043610745024654 00000000000000 aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/dialogs/dlg_pintan_l.h0000664000175000017500000000161514300721174023033 00000000000000/*************************************************************************** begin : Mon Apr 12 2010 copyright : (C) 2018 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQHBCI_DLG_PINTAN_H #define AQHBCI_DLG_PINTAN_H #include #include #include #include #include #ifdef __cplusplus extern "C" { #endif GWEN_DIALOG *AH_PinTanDialog_new(AB_PROVIDER *pro); AB_USER *AH_PinTanDialog_GetUser(const GWEN_DIALOG *dlg); #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/dialogs/dlg_edituserrdh_l.h0000664000175000017500000000154214043610745024070 00000000000000/*************************************************************************** begin : Thu Jul 08 2010 copyright : (C) 2018 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQHBCI_DLG_EDITUSER_RDH_H #define AQHBCI_DLG_EDITUSER_RDH_H #include #include #include #include #ifdef __cplusplus extern "C" { #endif GWEN_DIALOG *AH_EditUserRdhDialog_new(AB_PROVIDER *pro, AB_USER *u, int doLock); #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/dialogs/dlg_zkacard.c0000775000175000017500000011753014625171605022660 00000000000000/*************************************************************************** begin : Tue Apr 20 2010 copyright : (C) 2018 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "dlg_zkacard_p.h" #include "aqhbci/banking/provider_l.h" #include "aqhbci/banking/user.h" #include "aqhbci/banking/provider.h" #include "aqhbci/banking/provider_online.h" #include "dlg_rdh_special_l.h" #include "aqbanking/i18n_l.h" #include #include #include #include #include #include #include #include #define PAGE_BEGIN 0 #define PAGE_BANK 1 #define PAGE_USER 2 #define PAGE_CREATE 3 #define PAGE_END 4 #define DIALOG_MINWIDTH 400 #define DIALOG_MINHEIGHT 200 #define MAX_CONTEXT_ID_ENTRIES 64 GWEN_INHERIT(GWEN_DIALOG, AH_ZKACARD_DIALOG) GWEN_DIALOG *AH_ZkaCardDialog_new(AB_PROVIDER *pro, GWEN_CRYPT_TOKEN *ct) { GWEN_DIALOG *dlg; AH_ZKACARD_DIALOG *xdlg; GWEN_BUFFER *fbuf; int rv; uint32_t pid; dlg=GWEN_Dialog_new("ah_setup_zkacard"); GWEN_NEW_OBJECT(AH_ZKACARD_DIALOG, xdlg); GWEN_INHERIT_SETDATA(GWEN_DIALOG, AH_ZKACARD_DIALOG, dlg, xdlg, AH_ZkaCardDialog_FreeData); GWEN_Dialog_SetSignalHandler(dlg, AH_ZkaCardDialog_SignalHandler); pid=GWEN_Gui_ProgressStart(GWEN_GUI_PROGRESS_ALLOW_SUBLEVELS | GWEN_GUI_PROGRESS_SHOW_PROGRESS, I18N("Getting context list"), I18N("The context list is read from the card."), GWEN_GUI_PROGRESS_NONE, 0); /* get path of dialog description file */ fbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_PathManager_FindFile(AB_PM_LIBNAME, AB_PM_DATADIR, "aqbanking/backends/aqhbci/dialogs/dlg_zkacard.dlg", fbuf); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "Dialog description file not found (%d).", rv); GWEN_Gui_ProgressEnd(pid); GWEN_Buffer_free(fbuf); GWEN_Dialog_free(dlg); return NULL; } /* read dialog from dialog description file */ rv=GWEN_Dialog_ReadXmlFile(dlg, GWEN_Buffer_GetStart(fbuf)); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d).", rv); GWEN_Gui_ProgressEnd(pid); GWEN_Buffer_free(fbuf); GWEN_Dialog_free(dlg); return NULL; } GWEN_Buffer_free(fbuf); xdlg->provider=pro; xdlg->banking=AB_Provider_GetBanking(pro); xdlg->cryptToken=ct; xdlg->contextList=GWEN_Crypt_Token_Context_List_new(); if (1) { uint32_t idList[MAX_CONTEXT_ID_ENTRIES]; uint32_t idCount; uint32_t i; if (!GWEN_Crypt_Token_IsOpen(ct)) { rv=GWEN_Crypt_Token_Open(ct, 0, 0); if (rv<0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Error opening token (%d)", rv); GWEN_Gui_ProgressEnd(pid); GWEN_Gui_ShowError(I18N("Error"), I18N("Could not contact card. Maybe removed? (%d)"), rv); GWEN_Dialog_free(dlg); return NULL; } } idCount=MAX_CONTEXT_ID_ENTRIES; rv=GWEN_Crypt_Token_GetContextIdList(ct, idList, &idCount, 0); if (rv<0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not read context id list"); GWEN_Gui_ProgressEnd(pid); GWEN_Dialog_free(dlg); GWEN_Gui_ShowError(I18N("Error"), I18N("Could not read context id list from card (%d)"), rv); return NULL; } for (i=0; icontextList); DBG_INFO(AQHBCI_LOGDOMAIN, "Added context %08x", idList[i]); } } } /* for */ /* preset */ xdlg->hbciVersion=300; xdlg->rdhVersion=9; xdlg->cryptMode = AH_CryptMode_Rdh; xdlg->flags= AH_USER_FLAGS_BANK_DOESNT_SIGN | AH_USER_FLAGS_BANK_USES_SIGNSEQ; GWEN_Gui_ProgressEnd(pid); /* done */ return dlg; } void GWENHYWFAR_CB AH_ZkaCardDialog_FreeData(void *bp, void *p) { AH_ZKACARD_DIALOG *xdlg; xdlg=(AH_ZKACARD_DIALOG *) p; GWEN_Crypt_Token_Context_List_free(xdlg->contextList); free(xdlg->bankCode); free(xdlg->bankName); free(xdlg->userName); free(xdlg->userId); free(xdlg->customerId); free(xdlg->peerId); GWEN_FREE_OBJECT(xdlg); } AB_USER *AH_ZkaCardDialog_GetUser(const GWEN_DIALOG *dlg) { AH_ZKACARD_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_ZKACARD_DIALOG, dlg); assert(xdlg); return xdlg->user; } GWEN_CRYPT_TOKEN *AH_ZkaCardDialog_GetCryptToken(const GWEN_DIALOG *dlg) { AH_ZKACARD_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_ZKACARD_DIALOG, dlg); assert(xdlg); return xdlg->cryptToken; } const char *AH_ZkaCardDialog_GetBankCode(const GWEN_DIALOG *dlg) { AH_ZKACARD_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_ZKACARD_DIALOG, dlg); assert(xdlg); return xdlg->bankCode; } void AH_ZkaCardDialog_SetBankCode(GWEN_DIALOG *dlg, const char *s) { AH_ZKACARD_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_ZKACARD_DIALOG, dlg); assert(xdlg); free(xdlg->bankCode); if (s) xdlg->bankCode=strdup(s); else xdlg->bankCode=NULL; } const char *AH_ZkaCardDialog_GetBankName(const GWEN_DIALOG *dlg) { AH_ZKACARD_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_ZKACARD_DIALOG, dlg); assert(xdlg); return xdlg->bankName; } void AH_ZkaCardDialog_SetBankName(GWEN_DIALOG *dlg, const char *s) { AH_ZKACARD_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_ZKACARD_DIALOG, dlg); assert(xdlg); free(xdlg->bankName); if (s) xdlg->bankName=strdup(s); else xdlg->bankName=NULL; } const char *AH_ZkaCardDialog_GetUserName(const GWEN_DIALOG *dlg) { AH_ZKACARD_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_ZKACARD_DIALOG, dlg); assert(xdlg); return xdlg->userName; } void AH_ZkaCardDialog_SetUserName(GWEN_DIALOG *dlg, const char *s) { AH_ZKACARD_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_ZKACARD_DIALOG, dlg); assert(xdlg); free(xdlg->userName); if (s) xdlg->userName=strdup(s); else xdlg->userName=NULL; } const char *AH_ZkaCardDialog_GetUserId(const GWEN_DIALOG *dlg) { AH_ZKACARD_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_ZKACARD_DIALOG, dlg); assert(xdlg); return xdlg->userId; } void AH_ZkaCardDialog_SetUserId(GWEN_DIALOG *dlg, const char *s) { AH_ZKACARD_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_ZKACARD_DIALOG, dlg); assert(xdlg); free(xdlg->userId); if (s) xdlg->userId=strdup(s); else xdlg->userId=NULL; } const char *AH_ZkaCardDialog_GetCustomerId(const GWEN_DIALOG *dlg) { AH_ZKACARD_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_ZKACARD_DIALOG, dlg); assert(xdlg); return xdlg->customerId; } void AH_ZkaCardDialog_SetCustomerId(GWEN_DIALOG *dlg, const char *s) { AH_ZKACARD_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_ZKACARD_DIALOG, dlg); assert(xdlg); free(xdlg->customerId); if (s) xdlg->customerId=strdup(s); else xdlg->customerId=NULL; } const char *AH_ZkaCardDialog_GetUrl(const GWEN_DIALOG *dlg) { AH_ZKACARD_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_ZKACARD_DIALOG, dlg); assert(xdlg); return xdlg->url; } void AH_ZkaCardDialog_SetUrl(GWEN_DIALOG *dlg, const char *s) { AH_ZKACARD_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_ZKACARD_DIALOG, dlg); assert(xdlg); free(xdlg->url); if (s) xdlg->url=strdup(s); else xdlg->url=NULL; } const char *AH_ZkaCardDialog_GetPeerId(const GWEN_DIALOG *dlg) { AH_ZKACARD_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_ZKACARD_DIALOG, dlg); assert(xdlg); return xdlg->peerId; } void AH_ZkaCardDialog_SetPeerId(GWEN_DIALOG *dlg, const char *s) { AH_ZKACARD_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_ZKACARD_DIALOG, dlg); assert(xdlg); free(xdlg->peerId); if (s) xdlg->peerId=strdup(s); else xdlg->peerId=NULL; } int AH_ZkaCardDialog_GetHbciVersion(const GWEN_DIALOG *dlg) { AH_ZKACARD_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_ZKACARD_DIALOG, dlg); assert(xdlg); return xdlg->hbciVersion; } void AH_ZkaCardDialog_SetHbciVersion(GWEN_DIALOG *dlg, int i) { AH_ZKACARD_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_ZKACARD_DIALOG, dlg); assert(xdlg); xdlg->hbciVersion=i; } uint32_t AH_ZkaCardDialog_GetFlags(const GWEN_DIALOG *dlg) { AH_ZKACARD_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_ZKACARD_DIALOG, dlg); assert(xdlg); return xdlg->flags; } void AH_ZkaCardDialog_SetFlags(GWEN_DIALOG *dlg, uint32_t fl) { AH_ZKACARD_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_ZKACARD_DIALOG, dlg); assert(xdlg); xdlg->flags=fl; } void AH_ZkaCardDialog_AddFlags(GWEN_DIALOG *dlg, uint32_t fl) { AH_ZKACARD_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_ZKACARD_DIALOG, dlg); assert(xdlg); xdlg->flags&=~fl; } void AH_ZkaCardDialog_SubFlags(GWEN_DIALOG *dlg, uint32_t fl) { AH_ZKACARD_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_ZKACARD_DIALOG, dlg); assert(xdlg); xdlg->flags&=~fl; } void AH_ZkaCardDialog_Init(GWEN_DIALOG *dlg) { AH_ZKACARD_DIALOG *xdlg; GWEN_DB_NODE *dbPrefs; int i; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_ZKACARD_DIALOG, dlg); assert(xdlg); dbPrefs=GWEN_Dialog_GetPreferences(dlg); GWEN_Dialog_SetCharProperty(dlg, "", GWEN_DialogProperty_Title, 0, I18N("HBCI ZKA-Card Setup Wizard"), 0); /* select first page */ GWEN_Dialog_SetIntProperty(dlg, "wiz_stack", GWEN_DialogProperty_Value, 0, 0, 0); /* setup intro page */ GWEN_Dialog_SetCharProperty(dlg, "wiz_begin_label", GWEN_DialogProperty_Title, 0, I18N("" "

This dialog assists you in setting up a ZKA Chipcard User.

" "

Some chipcards contain user information. You can click the button below " "to read that information from the card.

" "" "This dialog assists you in setting up a ZKA Chipcard User.\n" "Some chipcards contain user information. You can click the button below\n" "to read that information from the card."), 0); /* setup bank page */ GWEN_Dialog_SetCharProperty(dlg, "wiz_bank_label", GWEN_DialogProperty_Title, 0, I18N("" "

Please select the bank.

" "

AqBanking has an internal database which " "contains HBCI/FinTS information about many banks.

" "

If there is an entry for your bank this dialog will use the " "information from the database.

" "" "Please select the bank.\n" "AqBanking has an internal database which contains\n" "HBCI/FinTS information about many banks.\n" "If there is an entry for your bank this dialog will use the\n" "information from the database."), 0); /* setup user page */ GWEN_Dialog_SetCharProperty(dlg, "wiz_user_label", GWEN_DialogProperty_Title, 0, I18N("" "

For most banks the customer id must be the same as the user id.

" "

However, some banks actually use the customer id, so please look into " "the documentation provided by your bank to discover whether this is the " "case with your bank.

" "" "For most banks the customer id must be the same as the user id.\n" "However, some banks actually use the customer id, so please look into\n" "the documentation provided by your bank to discover whether this is the\n" "case with your bank."), 0); /* setup creation page */ GWEN_Dialog_SetCharProperty(dlg, "wiz_create_label", GWEN_DialogProperty_Title, 0, I18N("" "

We are now ready to create the user and retrieve the account list.

" "

Click the next button to proceed or abort to abort.

" "" "We are now ready to create the user and retrieve the account list.\n" "Click the NEXT button to proceed or ABORT to abort."), 0); /* setup extro page */ GWEN_Dialog_SetCharProperty(dlg, "wiz_end_label", GWEN_DialogProperty_Title, 0, I18N("The user has been successfully setup."), 0); GWEN_Dialog_SetIntProperty(dlg, "wiz_context_combo", GWEN_DialogProperty_ClearValues, 0, 0, 0); if (1) { const GWEN_CRYPT_TOKEN_CONTEXT *ctx; int i; i=1; ctx=GWEN_Crypt_Token_Context_List_First(xdlg->contextList); while (ctx) { char numbuf[64]; GWEN_BUFFER *tbuf; const char *s; tbuf=GWEN_Buffer_new(0, 256, 0, 1); snprintf(numbuf, sizeof(numbuf)-1, I18N("Context %d:"), i); numbuf[sizeof(numbuf)-1]=0; GWEN_Buffer_AppendString(tbuf, numbuf); s=GWEN_Crypt_Token_Context_GetServiceId(ctx); if (s && *s && strcasecmp(s, "20202020")!=0) GWEN_Buffer_AppendString(tbuf, s); else GWEN_Buffer_AppendString(tbuf, I18N("")); GWEN_Buffer_AppendString(tbuf, "-"); s=GWEN_Crypt_Token_Context_GetUserId(ctx); if (s && *s) GWEN_Buffer_AppendString(tbuf, s); else GWEN_Buffer_AppendString(tbuf, I18N("")); GWEN_Dialog_SetCharProperty(dlg, "wiz_context_combo", GWEN_DialogProperty_AddValue, 0, GWEN_Buffer_GetStart(tbuf), 0); GWEN_Buffer_free(tbuf); i++; ctx=GWEN_Crypt_Token_Context_List_Next(ctx); } } GWEN_Dialog_SetIntProperty(dlg, "wiz_context_combo", GWEN_DialogProperty_Value, 0, 0, 0); AH_ZkaCardDialog_FromContext(dlg, 0); /* read width */ i=GWEN_DB_GetIntValue(dbPrefs, "dialog_width", 0, -1); if (i>=DIALOG_MINWIDTH) GWEN_Dialog_SetIntProperty(dlg, "", GWEN_DialogProperty_Width, 0, i, 0); /* read height */ i=GWEN_DB_GetIntValue(dbPrefs, "dialog_height", 0, -1); if (i>=DIALOG_MINHEIGHT) GWEN_Dialog_SetIntProperty(dlg, "", GWEN_DialogProperty_Height, 0, i, 0); /* enable next and disable previous buttons */ GWEN_Dialog_SetIntProperty(dlg, "wiz_prev_button", GWEN_DialogProperty_Enabled, 0, 0, 0); GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 1, 0); } void AH_ZkaCardDialog_Fini(GWEN_DIALOG *dlg) { AH_ZKACARD_DIALOG *xdlg; int i; GWEN_DB_NODE *dbPrefs; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_ZKACARD_DIALOG, dlg); assert(xdlg); /* session within the zkacard might still be open, close it */ AB_Banking_ClearCryptTokenList(AH_HBCI_GetBankingApi(AH_Provider_GetHbci(xdlg->provider))); dbPrefs=GWEN_Dialog_GetPreferences(dlg); /* store dialog width */ i=GWEN_Dialog_GetIntProperty(dlg, "", GWEN_DialogProperty_Width, 0, -1); GWEN_DB_SetIntValue(dbPrefs, GWEN_DB_FLAGS_OVERWRITE_VARS, "dialog_width", i); /* store dialog height */ i=GWEN_Dialog_GetIntProperty(dlg, "", GWEN_DialogProperty_Height, 0, -1); GWEN_DB_SetIntValue(dbPrefs, GWEN_DB_FLAGS_OVERWRITE_VARS, "dialog_height", i); } int AH_ZkaCardDialog_GetBankPageData(GWEN_DIALOG *dlg) { AH_ZKACARD_DIALOG *xdlg; const char *s; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_ZKACARD_DIALOG, dlg); assert(xdlg); s=GWEN_Dialog_GetCharProperty(dlg, "wiz_bankcode_edit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) AH_ZkaCardDialog_SetBankCode(dlg, s); else { DBG_INFO(AQHBCI_LOGDOMAIN, "Missing bank code"); return GWEN_ERROR_NO_DATA; } s=GWEN_Dialog_GetCharProperty(dlg, "wiz_bankname_edit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) AH_ZkaCardDialog_SetBankName(dlg, s); else AH_ZkaCardDialog_SetBankName(dlg, NULL); s=GWEN_Dialog_GetCharProperty(dlg, "wiz_url_edit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) AH_ZkaCardDialog_SetUrl(dlg, s); else { DBG_INFO(AQHBCI_LOGDOMAIN, "Missing URL"); return GWEN_ERROR_NO_DATA; } return 0; } int AH_ZkaCardDialog_GetUserPageData(GWEN_DIALOG *dlg) { AH_ZKACARD_DIALOG *xdlg; const char *s; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_ZKACARD_DIALOG, dlg); assert(xdlg); s=GWEN_Dialog_GetCharProperty(dlg, "wiz_username_edit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) AH_ZkaCardDialog_SetUserName(dlg, s); else { DBG_INFO(AQHBCI_LOGDOMAIN, "Missing user name"); return GWEN_ERROR_NO_DATA; } s=GWEN_Dialog_GetCharProperty(dlg, "wiz_userid_edit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) AH_ZkaCardDialog_SetUserId(dlg, s); else { DBG_INFO(AQHBCI_LOGDOMAIN, "Missing user id"); return GWEN_ERROR_NO_DATA; } s=GWEN_Dialog_GetCharProperty(dlg, "wiz_customerid_edit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) AH_ZkaCardDialog_SetCustomerId(dlg, s); else AH_ZkaCardDialog_SetCustomerId(dlg, NULL); return 0; } int AH_ZkaCardDialog_EnterPage(GWEN_DIALOG *dlg, int page, int forwards) { AH_ZKACARD_DIALOG *xdlg; int rv; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_ZKACARD_DIALOG, dlg); assert(xdlg); switch (page) { case PAGE_BEGIN: GWEN_Dialog_SetIntProperty(dlg, "wiz_prev_button", GWEN_DialogProperty_Enabled, 0, 0, 0); GWEN_Dialog_SetIntProperty(dlg, "wiz_stack", GWEN_DialogProperty_Value, 0, page, 0); return GWEN_DialogEvent_ResultHandled; case PAGE_BANK: GWEN_Dialog_SetIntProperty(dlg, "wiz_prev_button", GWEN_DialogProperty_Enabled, 0, 1, 0); rv=AH_ZkaCardDialog_GetBankPageData(dlg); if (rv<0) GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 0, 0); else GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 1, 0); GWEN_Dialog_SetIntProperty(dlg, "wiz_stack", GWEN_DialogProperty_Value, 0, page, 0); return GWEN_DialogEvent_ResultHandled; case PAGE_USER: GWEN_Dialog_SetIntProperty(dlg, "wiz_prev_button", GWEN_DialogProperty_Enabled, 0, 1, 0); rv=AH_ZkaCardDialog_GetUserPageData(dlg); if (rv<0) GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 0, 0); else GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 1, 0); GWEN_Dialog_SetIntProperty(dlg, "wiz_stack", GWEN_DialogProperty_Value, 0, page, 0); return GWEN_DialogEvent_ResultHandled; case PAGE_CREATE: if (!forwards) GWEN_Dialog_SetCharProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Title, 0, I18N("Next"), 0); GWEN_Dialog_SetIntProperty(dlg, "wiz_stack", GWEN_DialogProperty_Value, 0, page, 0); return GWEN_DialogEvent_ResultHandled; case PAGE_END: GWEN_Dialog_SetIntProperty(dlg, "wiz_stack", GWEN_DialogProperty_Value, 0, page, 0); GWEN_Dialog_SetCharProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Title, 0, I18N("Finish"), 0); //GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 1, 0); GWEN_Dialog_SetIntProperty(dlg, "wiz_prev_button", GWEN_DialogProperty_Enabled, 0, 1, 0); GWEN_Dialog_SetIntProperty(dlg, "wiz_abort_button", GWEN_DialogProperty_Enabled, 0, 0, 0); return GWEN_DialogEvent_ResultHandled; default: return GWEN_DialogEvent_ResultHandled; } return GWEN_DialogEvent_ResultHandled; } int AH_ZkaCardDialog_DoIt(GWEN_DIALOG *dlg) { AH_ZKACARD_DIALOG *xdlg; AB_USER *u; GWEN_URL *url; int rv; uint32_t pid; AB_IMEXPORTER_CONTEXT *ctx; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_ZKACARD_DIALOG, dlg); assert(xdlg); u=AB_Provider_CreateUserObject(xdlg->provider); if (u==NULL) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not create user, maybe backend missing?"); GWEN_Gui_ShowError(I18N("Error"), "%s", I18N("Could not create user, maybe some plugins are not installed?")); return GWEN_DialogEvent_ResultHandled; } /* generic setup */ AB_User_SetUserName(u, xdlg->userName); AB_User_SetUserId(u, xdlg->userId); if (xdlg->customerId && *(xdlg->customerId)) AB_User_SetCustomerId(u, xdlg->customerId); else AB_User_SetCustomerId(u, xdlg->userId); AB_User_SetCountry(u, "de"); AB_User_SetBankCode(u, xdlg->bankCode); /* HBCI setup */ AH_User_SetTokenType(u, "zkacard"); AH_User_SetTokenName(u, GWEN_Crypt_Token_GetTokenName(xdlg->cryptToken)); AH_User_SetCryptMode(u, AH_CryptMode_Rdh); AH_User_SetTokenContextId(u, xdlg->contextId); AH_User_SetStatus(u, AH_UserStatusEnabled); url=GWEN_Url_fromString(xdlg->url); assert(url); GWEN_Url_SetProtocol(url, "hbci"); if (GWEN_Url_GetPort(url)==0) GWEN_Url_SetPort(url, 3000); AH_User_SetServerUrl(u, url); GWEN_Url_free(url); AH_User_SetHbciVersion(u, xdlg->hbciVersion); AH_User_SetRdhType(u, xdlg->rdhVersion); AH_User_AddFlags(u, xdlg->flags); rv=AB_Provider_AddUser(xdlg->provider, u); if (rv<0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not add user (%d)", rv); AB_User_free(u); GWEN_Gui_ShowError(I18N("Error"), I18N("Could not add user (%d)"), rv); return GWEN_DialogEvent_ResultHandled; } pid=GWEN_Gui_ProgressStart(GWEN_GUI_PROGRESS_DELAY | GWEN_GUI_PROGRESS_ALLOW_EMBED | GWEN_GUI_PROGRESS_SHOW_PROGRESS | GWEN_GUI_PROGRESS_SHOW_ABORT, I18N("Setting Up ZKA User"), I18N("The list of accounts will be retrieved."), 1, 0); /* get public bank server key */ ctx=AB_ImExporterContext_new(); rv=AH_Provider_GetServerKeys(xdlg->provider, u, ctx, 1, 1, 1); AB_ImExporterContext_free(ctx); if (rv) { AB_Banking_ClearCryptTokenList(AH_HBCI_GetBankingApi(AH_Provider_GetHbci(xdlg->provider))); AB_Provider_EndExclUseUser(xdlg->provider, u, 1); DBG_INFO(AQHBCI_LOGDOMAIN, "Error getting server keys (%d)", rv); AB_Provider_DeleteUser(xdlg->provider, AB_User_GetUniqueId(u)); GWEN_Gui_ProgressEnd(pid); GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 0, 0); return GWEN_DialogEvent_ResultHandled; } /* send user keys */ if (xdlg->keyStatus & 0x01) { int withAuthKey=0; if (xdlg->rdhVersion == 7) { withAuthKey=1; } ctx=AB_ImExporterContext_new(); rv=AH_Provider_SendUserKeys2(xdlg->provider, u, ctx, withAuthKey, 1, 1, 1); AB_ImExporterContext_free(ctx); if (rv) { AB_Banking_ClearCryptTokenList(AH_HBCI_GetBankingApi(AH_Provider_GetHbci(xdlg->provider))); AB_Provider_EndExclUseUser(xdlg->provider, u, 1); DBG_INFO(AQHBCI_LOGDOMAIN, "Error sending user keys (%d)", rv); AB_Provider_DeleteUser(xdlg->provider, AB_User_GetUniqueId(u)); GWEN_Gui_ProgressEnd(pid); GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 0, 0); return GWEN_DialogEvent_ResultHandled; } } /* get Kundensystem-ID */ /* FIXME the SysID of the zkacard is the CID, so this should not be necessary */ if (xdlg->rdhVersion != 7) { ctx=AB_ImExporterContext_new(); rv=AH_Provider_GetSysId(xdlg->provider, u, ctx, 1, 1, 1); AB_ImExporterContext_free(ctx); if (rv) { AB_Banking_ClearCryptTokenList(AH_HBCI_GetBankingApi(AH_Provider_GetHbci(xdlg->provider))); AB_Provider_EndExclUseUser(xdlg->provider, u, 1); DBG_INFO(AQHBCI_LOGDOMAIN, "Error getting Kundensystem ID (%d)", rv); AB_Provider_DeleteUser(xdlg->provider, AB_User_GetUniqueId(u)); GWEN_Gui_ProgressEnd(pid); GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 0, 0); return GWEN_DialogEvent_ResultHandled; } } /* lock new user */ rv=AB_Provider_BeginExclUseUser(xdlg->provider, u); if (rv<0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not lock user (%d)", rv); GWEN_Gui_ProgressLog2(pid, GWEN_LoggerLevel_Error, I18N("Unable to lock users (%d)"), rv); AB_Provider_DeleteUser(xdlg->provider, AB_User_GetUniqueId(u)); GWEN_Gui_ProgressEnd(pid); GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 0, 0); return GWEN_DialogEvent_ResultHandled; } /* get account list */ GWEN_Gui_ProgressLog(pid, GWEN_LoggerLevel_Notice, I18N("Retrieving account list")); ctx=AB_ImExporterContext_new(); rv=AH_Provider_GetAccounts(xdlg->provider, u, ctx, 0, 0, 0); AB_ImExporterContext_free(ctx); if (rv<0) { AB_Banking_ClearCryptTokenList(AH_HBCI_GetBankingApi(AH_Provider_GetHbci(xdlg->provider))); AB_Provider_EndExclUseUser(xdlg->provider, u, 1); DBG_INFO(AQHBCI_LOGDOMAIN, "Error getting accounts (%d)", rv); AB_Provider_DeleteUser(xdlg->provider, AB_User_GetUniqueId(u)); GWEN_Gui_ProgressEnd(pid); GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 0, 0); return GWEN_DialogEvent_ResultHandled; } rv=GWEN_Gui_ProgressAdvance(pid, GWEN_GUI_PROGRESS_ONE); if (rv==GWEN_ERROR_USER_ABORTED) { AB_Banking_ClearCryptTokenList(AH_HBCI_GetBankingApi(AH_Provider_GetHbci(xdlg->provider))); AB_Provider_EndExclUseUser(xdlg->provider, u, 1); DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); AB_Provider_DeleteUser(xdlg->provider, AB_User_GetUniqueId(u)); GWEN_Gui_ProgressLog(pid, GWEN_LoggerLevel_Error, I18N("Aborted by user.")); GWEN_Gui_ProgressEnd(pid); GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 0, 0); return GWEN_DialogEvent_ResultHandled; } /* unlock user */ rv=AB_Provider_EndExclUseUser(xdlg->provider, u, 0); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "Could not unlock customer [%s] (%d)", AB_User_GetCustomerId(u), rv); GWEN_Gui_ProgressLog2(pid, GWEN_LoggerLevel_Error, I18N("Could not unlock user %s (%d)"), AB_User_GetUserId(u), rv); AB_Banking_ClearCryptTokenList(AH_HBCI_GetBankingApi(AH_Provider_GetHbci(xdlg->provider))); AB_Provider_EndExclUseUser(xdlg->provider, u, 1); AB_Provider_DeleteUser(xdlg->provider, AB_User_GetUniqueId(u)); GWEN_Gui_ProgressEnd(pid); GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 0, 0); return GWEN_DialogEvent_ResultHandled; } GWEN_Dialog_SetCharProperty(dlg, "wiz_end_label", GWEN_DialogProperty_Title, 0, I18N("The user has been successfully setup."), 0); GWEN_Gui_ProgressEnd(pid); AH_ZkaCardDialog_EnterPage(dlg, PAGE_END, 1); xdlg->user=u; return GWEN_DialogEvent_ResultHandled; } int AH_ZkaCardDialog_Next(GWEN_DIALOG *dlg) { AH_ZKACARD_DIALOG *xdlg; int page; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_ZKACARD_DIALOG, dlg); assert(xdlg); page=GWEN_Dialog_GetIntProperty(dlg, "wiz_stack", GWEN_DialogProperty_Value, 0, -1); if (page==PAGE_CREATE) { return AH_ZkaCardDialog_DoIt(dlg); } else if (pagePAGE_BEGIN) { page--; return AH_ZkaCardDialog_EnterPage(dlg, page, 0); } return GWEN_DialogEvent_ResultHandled; } int AH_ZkaCardDialog_HandleActivatedBankCode(GWEN_DIALOG *dlg) { AH_ZKACARD_DIALOG *xdlg; GWEN_DIALOG *dlg2; int rv; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_ZKACARD_DIALOG, dlg); assert(xdlg); dlg2=AB_SelectBankInfoDialog_new(xdlg->banking, "de", GWEN_Dialog_GetCharProperty(dlg, "wiz_bankcode_edit", GWEN_DialogProperty_Value, 0, NULL)); if (dlg2==NULL) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not create dialog"); GWEN_Gui_ShowError(I18N("Error"), "%s", I18N("Could not create dialog, maybe an installation error?")); return GWEN_DialogEvent_ResultHandled; } rv=GWEN_Gui_ExecDialog(dlg2, 0); if (rv==0) { /* rejected */ GWEN_Dialog_free(dlg2); return GWEN_DialogEvent_ResultHandled; } else { const AB_BANKINFO *bi; bi=AB_SelectBankInfoDialog_GetSelectedBankInfo(dlg2); if (bi) { const char *s; AB_BANKINFO_SERVICE *sv; s=AB_BankInfo_GetBankId(bi); GWEN_Dialog_SetCharProperty(dlg, "wiz_bankcode_edit", GWEN_DialogProperty_Value, 0, (s && *s)?s:"", 0); s=AB_BankInfo_GetBankName(bi); GWEN_Dialog_SetCharProperty(dlg, "wiz_bankname_edit", GWEN_DialogProperty_Value, 0, (s && *s)?s:"", 0); sv=AB_BankInfoService_List_First(AB_BankInfo_GetServices(bi)); while (sv) { const char *s; s=AB_BankInfoService_GetType(sv); if (s && *s && strcasecmp(s, "HBCI")==0) { s=AB_BankInfoService_GetMode(sv); if (s && *s && strcasecmp(s, "zka")==0) break; } sv=AB_BankInfoService_List_Next(sv); } if (sv) { /* ZKA service found */ s=AB_BankInfoService_GetAddress(sv); GWEN_Dialog_SetCharProperty(dlg, "wiz_url_edit", GWEN_DialogProperty_Value, 0, (s && *s)?s:"", 0); s=AB_BankInfoService_GetPversion(sv); if (s && *s) { if (strcasecmp(s, "2.01")==0 || strcasecmp(s, "2")==0) xdlg->hbciVersion=201; else if (strcasecmp(s, "2.10")==0 || strcasecmp(s, "2.1")==0) xdlg->hbciVersion=210; else if (strcasecmp(s, "2.20")==0 || strcasecmp(s, "2.2")==0) xdlg->hbciVersion=220; else if (strcasecmp(s, "3.00")==0 || strcasecmp(s, "3.0")==0 || strcasecmp(s, "3")==0) xdlg->hbciVersion=300; else if (strcasecmp(s, "4.00")==0 || strcasecmp(s, "4.0")==0 || strcasecmp(s, "4")==0) xdlg->hbciVersion=400; } } } } GWEN_Dialog_free(dlg2); if (AH_ZkaCardDialog_GetBankPageData(dlg)<0) GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 0, 0); else GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 1, 0); return GWEN_DialogEvent_ResultHandled; } int AH_ZkaCardDialog_HandleActivatedSpecial(GWEN_DIALOG *dlg) { AH_ZKACARD_DIALOG *xdlg; GWEN_DIALOG *dlg2; int rv; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_ZKACARD_DIALOG, dlg); assert(xdlg); dlg2=AH_RdhSpecialDialog_new(xdlg->provider); if (dlg2==NULL) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not create dialog"); GWEN_Gui_ShowError(I18N("Error"), "%s", I18N("Could not create dialog, maybe an installation error?")); return GWEN_DialogEvent_ResultHandled; } AH_RdhSpecialDialog_SetHbciVersion(dlg2, xdlg->hbciVersion); AH_RdhSpecialDialog_SetRdhVersion(dlg2, xdlg->rdhVersion); AH_RdhSpecialDialog_SetCryptMode(dlg2, xdlg->cryptMode); AH_RdhSpecialDialog_SetFlags(dlg2, xdlg->flags); rv=GWEN_Gui_ExecDialog(dlg2, 0); if (rv==0) { /* rejected */ GWEN_Dialog_free(dlg2); return GWEN_DialogEvent_ResultHandled; } else { xdlg->hbciVersion=AH_RdhSpecialDialog_GetHbciVersion(dlg2); xdlg->rdhVersion=AH_RdhSpecialDialog_GetRdhVersion(dlg2); xdlg->cryptMode=AH_RdhSpecialDialog_GetCryptMode(dlg2); xdlg->flags=AH_RdhSpecialDialog_GetFlags(dlg2); } GWEN_Dialog_free(dlg2); return GWEN_DialogEvent_ResultHandled; } int AH_ZkaCardDialog_FromContext(GWEN_DIALOG *dlg, int i) { AH_ZKACARD_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_ZKACARD_DIALOG, dlg); assert(xdlg); xdlg->contextId = i+1; // Real contextId on the card if (i>=0) { GWEN_CRYPT_TOKEN_CONTEXT *ctx; ctx=GWEN_Crypt_Token_Context_List_First(xdlg->contextList); while (ctx && i--) ctx=GWEN_Crypt_Token_Context_List_Next(ctx); if (ctx) { const char *s; s=GWEN_Crypt_Token_Context_GetServiceId(ctx); if (s && strcasecmp(s, "20202020")==0) s=NULL; GWEN_Dialog_SetCharProperty(dlg, "wiz_bankcode_edit", GWEN_DialogProperty_Value, 0, (s && *s)?s:"", 0); s=GWEN_Crypt_Token_Context_GetAddress(ctx); GWEN_Dialog_SetCharProperty(dlg, "wiz_url_edit", GWEN_DialogProperty_Value, 0, (s && *s)?s:"", 0); s=GWEN_Crypt_Token_Context_GetUserId(ctx); GWEN_Dialog_SetCharProperty(dlg, "wiz_userid_edit", GWEN_DialogProperty_Value, 0, (s && *s)?s:"", 0); s=GWEN_Crypt_Token_Context_GetCustomerId(ctx); GWEN_Dialog_SetCharProperty(dlg, "wiz_customerid_edit", GWEN_DialogProperty_Value, 0, (s && *s)?s:"", 0); xdlg->rdhVersion = GWEN_Crypt_Token_Context_GetProtocolVersion(ctx); xdlg->cryptMode = AH_CryptMode_Rdh; xdlg->keyStatus = GWEN_Crypt_Token_Context_GetKeyStatus(ctx); } } return GWEN_DialogEvent_ResultHandled; } int AH_ZkaCardDialog_HandleActivatedContext(GWEN_DIALOG *dlg) { int i; i=GWEN_Dialog_GetIntProperty(dlg, "wiz_context_combo", GWEN_DialogProperty_Value, 0, -1); if (i>=0) AH_ZkaCardDialog_FromContext(dlg, i); return GWEN_DialogEvent_ResultHandled; } int AH_ZkaCardDialog_HandleActivated(GWEN_DIALOG *dlg, const char *sender) { if (strcasecmp(sender, "wiz_bankcode_button")==0) return AH_ZkaCardDialog_HandleActivatedBankCode(dlg); else if (strcasecmp(sender, "wiz_prev_button")==0) return AH_ZkaCardDialog_Previous(dlg); else if (strcasecmp(sender, "wiz_next_button")==0) return AH_ZkaCardDialog_Next(dlg); else if (strcasecmp(sender, "wiz_abort_button")==0) return GWEN_DialogEvent_ResultReject; else if (strcasecmp(sender, "wiz_special_button")==0) return AH_ZkaCardDialog_HandleActivatedSpecial(dlg); else if (strcasecmp(sender, "wiz_help_button")==0) { /* TODO: open a help dialog */ } else if (strcasecmp(sender, "wiz_context_combo")==0) return AH_ZkaCardDialog_HandleActivatedContext(dlg); return GWEN_DialogEvent_ResultNotHandled; } int AH_ZkaCardDialog_HandleValueChanged(GWEN_DIALOG *dlg, const char *sender) { if (strcasecmp(sender, "wiz_bankcode_edit")==0 || strcasecmp(sender, "wiz_url_edit")==0 || strcasecmp(sender, "wiz_username_edit")==0 || strcasecmp(sender, "wiz_userid_edit")==0 || strcasecmp(sender, "wiz_customerid_edit")==0) { int rv; if (GWEN_Dialog_GetIntProperty(dlg, "wiz_stack", GWEN_DialogProperty_Value, 0, -1)==PAGE_BANK) { rv=AH_ZkaCardDialog_GetBankPageData(dlg); if (rv<0) GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 0, 0); else GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 1, 0); } else if (GWEN_Dialog_GetIntProperty(dlg, "wiz_stack", GWEN_DialogProperty_Value, 0, -1)==PAGE_USER) { rv=AH_ZkaCardDialog_GetUserPageData(dlg); if (rv<0) GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 0, 0); else GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 1, 0); } return GWEN_DialogEvent_ResultHandled; } return GWEN_DialogEvent_ResultNotHandled; } int GWENHYWFAR_CB AH_ZkaCardDialog_SignalHandler(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender) { AH_ZKACARD_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_ZKACARD_DIALOG, dlg); assert(xdlg); switch (t) { case GWEN_DialogEvent_TypeInit: AH_ZkaCardDialog_Init(dlg); return GWEN_DialogEvent_ResultHandled;; case GWEN_DialogEvent_TypeFini: AH_ZkaCardDialog_Fini(dlg); return GWEN_DialogEvent_ResultHandled;; case GWEN_DialogEvent_TypeValueChanged: return AH_ZkaCardDialog_HandleValueChanged(dlg, sender); case GWEN_DialogEvent_TypeActivated: return AH_ZkaCardDialog_HandleActivated(dlg, sender); case GWEN_DialogEvent_TypeEnabled: case GWEN_DialogEvent_TypeDisabled: case GWEN_DialogEvent_TypeClose: case GWEN_DialogEvent_TypeLast: return GWEN_DialogEvent_ResultNotHandled; default: break; } return GWEN_DialogEvent_ResultNotHandled; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/dialogs/dlg_newuser.dlg0000664000175000017500000000411614043610745023242 00000000000000 aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/dialogs/w_usercombo.c0000664000175000017500000001007114625171605022724 00000000000000/*************************************************************************** begin : Wed May 01 2024 copyright : (C) 2024 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "w_usercombo.h" #include "aqbanking/i18n_l.h" /* ------------------------------------------------------------------------------------------------ * forward declarations * ------------------------------------------------------------------------------------------------ */ static void _userComboAddUser(GWEN_DIALOG *dlg, const char *widgetName, const AB_USER *u); /* ------------------------------------------------------------------------------------------------ * implementations * ------------------------------------------------------------------------------------------------ */ void AH_Widget_UserComboRebuild(GWEN_DIALOG *dlg, const char *widgetName, AB_PROVIDER *provider) { AB_USER_LIST *users; int rv; GWEN_Dialog_SetIntProperty(dlg, widgetName, GWEN_DialogProperty_ClearValues, 0, 0, 0); GWEN_Dialog_SetCharProperty(dlg, widgetName, GWEN_DialogProperty_AddValue, 0, I18N("-- select --"), 0); users=AB_User_List_new(); rv=AB_Provider_ReadUsers(provider, users); if (rv>=0) { const AB_USER *u; u=AB_User_List_First(users); while (u) { _userComboAddUser(dlg, widgetName, u); u=AB_User_List_Next(u); } AB_User_List_free(users); GWEN_Dialog_SetIntProperty(dlg, widgetName, GWEN_DialogProperty_Sort, 0, 0, 0); } else { DBG_ERROR(AQHBCI_LOGDOMAIN, "Error reading users (%d)", rv); } } int AH_Widget_UserComboFindUserByUid(GWEN_DIALOG *dlg, const char *widgetName, uint32_t uid) { int idx; for (idx=0; ; idx++) { const char *s; s=GWEN_Dialog_GetCharProperty(dlg, widgetName, GWEN_DialogProperty_Value, idx, NULL); if (s && *s) { unsigned long int currentUid; if (1==sscanf(s, "%lu", ¤tUid) && currentUid==(unsigned long int) uid) return idx; } else break; } /* for */ return -1; } void AH_Widget_UserComboSetCurrent(GWEN_DIALOG *dlg, const char *widgetName, uint32_t uid) { if (uid) { int idx; idx=AH_Widget_UserComboFindUserByUid(dlg, widgetName, uid); if (idx>=0) GWEN_Dialog_SetIntProperty(dlg, widgetName, GWEN_DialogProperty_Value, 0, idx, 0); } } uint32_t AH_Widget_UserComboGetCurrent(GWEN_DIALOG *dlg, const char *widgetName) { int idx; idx=GWEN_Dialog_GetIntProperty(dlg, widgetName, GWEN_DialogProperty_Value, 0, -1); if (idx>=0) { const char *s; s=GWEN_Dialog_GetCharProperty(dlg, widgetName, GWEN_DialogProperty_Value, idx, NULL); if (s && *s) { unsigned long int currentUid; if (1==sscanf(s, "%lu", ¤tUid)) return (uint32_t) currentUid; } } return 0; } void _userComboAddUser(GWEN_DIALOG *dlg, const char *widgetName, const AB_USER *u) { GWEN_BUFFER *buf; uint32_t uid; const char *s; buf=GWEN_Buffer_new(0, 256, 0, 1); /* column 1 */ uid=AB_User_GetUniqueId(u); GWEN_Buffer_AppendArgs(buf, "%lu ", (unsigned long int) uid); /* column 2 */ s=AB_User_GetBankCode(u); GWEN_Buffer_AppendArgs(buf, "%s ", s?s:""); /* column 3 */ s=AB_User_GetBankCode(u); GWEN_Buffer_AppendArgs(buf, "%s ", s?s:""); /* column 4 */ s=AB_User_GetCustomerId(u); if (!(s && *s)) s=AB_User_GetUserId(u); GWEN_Buffer_AppendArgs(buf, "%s ", s?s:""); /* column 5 */ s=AB_User_GetUserName(u); GWEN_Buffer_AppendArgs(buf, "%s", s?s:""); GWEN_Dialog_SetCharProperty(dlg, widgetName, GWEN_DialogProperty_AddValue, 0, GWEN_Buffer_GetStart(buf), 0); GWEN_Buffer_free(buf); } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/dialogs/keyfile.png0000664000175000017500000000030214043610745022363 00000000000000‰PNG  IHDR szzô pHYs a Äî–@µtIDATX…c` Ñ"""ŝÓÚÒ+VÀíe˘µe„À¨F@‘–/Ï`X #include #include #include #ifdef __cplusplus extern "C" { #endif GWEN_DIALOG *AH_EditUserPinTanDialog_new(AB_PROVIDER *pro, AB_USER *u, int doLock); #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/dialogs/dlg_edituserddv_l.h0000664000175000017500000000154214043610745024070 00000000000000/*************************************************************************** begin : Thu Jul 08 2010 copyright : (C) 2018 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQHBCI_DLG_EDITUSER_DDV_H #define AQHBCI_DLG_EDITUSER_DDV_H #include #include #include #include #ifdef __cplusplus extern "C" { #endif GWEN_DIALOG *AH_EditUserDdvDialog_new(AB_PROVIDER *pro, AB_USER *u, int doLock); #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/dialogs/pintan.png0000664000175000017500000000055314043610745022234 00000000000000‰PNG  IHDR szzô pHYs a Äî–@µIDATX…í–Ŭƒ „!cCtR,ÁR,A;I´NÌÓ1'ÜHb’qß?΅ƒçN–Ç˲l<Ž£ïÍ °m‡09看qNş>w0 `kı[î*@ „‚Ô¸ĤÄp\aϚ.¨qš•`Ä-­Ĉĉ\“jHÂËm-h5ÄímOíV ‡µ™jĊcœ y­”ĝRòŝîßÁßLB÷1ΟIB\L %KbŜòÖ³M™ħĈJ-¨ù¸ċxaI\ħ–‚DûÉP,Ċ Ê[z{Tâ&”fï%3îJÂïJž ל„Zşá˘–;ĦĈí ô8VµboDGǙ Ô‘–„ZKğÜ 9Yî„M$ü+½hüT ĠTß+IENDB`‚aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/dialogs/dlg_rdh_special.dlg0000664000175000017500000000322514043610745024027 00000000000000 aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/dialogs/dlg_ddvcard_special_l.h0000664000175000017500000000242214043610745024653 00000000000000/*************************************************************************** begin : Tue Apr 20 2010 copyright : (C) 2018 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQHBCI_DLG_DDVCARD_SPECIAL_H #define AQHBCI_DLG_DDVCARD_SPECIAL_H #include #include #include #include #include #ifdef __cplusplus extern "C" { #endif GWEN_DIALOG *AH_DdvCardSpecialDialog_new(AB_PROVIDER *pro); int AH_DdvCardSpecialDialog_GetHbciVersion(const GWEN_DIALOG *dlg); void AH_DdvCardSpecialDialog_SetHbciVersion(GWEN_DIALOG *dlg, int i); uint32_t AH_DdvCardSpecialDialog_GetFlags(const GWEN_DIALOG *dlg); void AH_DdvCardSpecialDialog_SetFlags(GWEN_DIALOG *dlg, uint32_t fl); void AH_DdvCardSpecialDialog_AddFlags(GWEN_DIALOG *dlg, uint32_t fl); void AH_DdvCardSpecialDialog_SubFlags(GWEN_DIALOG *dlg, uint32_t fl); #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/dialogs/dlg_edituserpintan.c0000664000175000017500000006075414730347270024301 00000000000000/*************************************************************************** begin : Thu Jul 08 2010 copyright : (C) 2024 by Martin Preuss email : martin@aqbanking.de copyright : (C) 2024 by Thomas Baumgart email : thb@net-bembel.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "dlg_edituserpintan_p.h" #include "w_hbciversioncombo.h" #include "w_tanmethodcombo.h" #include "w_utils.h" #include "banking/provider_l.h" #include "aqhbci/banking/user.h" #include "aqhbci/banking/provider.h" #include "aqhbci/banking/provider_online.h" #include #include #include #include "aqbanking/i18n_l.h" #include #include #include #include #include #include /* ------------------------------------------------------------------------------------------------ * defines, types * ------------------------------------------------------------------------------------------------ */ #define DIALOG_MINWIDTH 200 #define DIALOG_MINHEIGHT 200 /* for improved readability */ #define DLG_WITHPROGRESS 1 #define DLG_UMOUNT 0 #define DLG_DIALOGFILE "aqbanking/backends/aqhbci/dialogs/dlg_edituserpintan.dlg" typedef int (*_DIALOG_SIGNAL_HANDLER_FN)(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender); typedef struct _DIALOG_SIGNAL_ENTRY _DIALOG_SIGNAL_ENTRY; struct _DIALOG_SIGNAL_ENTRY { const char *sender; GWEN_DIALOG_EVENTTYPE eventType; _DIALOG_SIGNAL_HANDLER_FN handlerFn; }; /* ------------------------------------------------------------------------------------------------ * forward declarations * ------------------------------------------------------------------------------------------------ */ static void GWENHYWFAR_CB _freeData(void *bp, void *p); static int GWENHYWFAR_CB _dlgApi_signalHandler(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender); static int _saveUser(GWEN_DIALOG *dlg); static int _fromGui(GWEN_DIALOG *dlg, AB_USER *u, int quiet); static int _handleInit(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender); static int _handleFini(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender); static int _handleActivatedBankCode(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender); static int _handleActivatedOk(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender); static int _handleActivatedApply(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender); static int _handleActivatedReject(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender); static int _handleActivatedGetCert(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender); static int _handleActivatedGetSysId(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender); static int _handleActivatedGetBankInfo(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender); static int _handleActivatedGetItanModes(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender); static int _handleActivatedGetAccounts(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender); static int _handleValueChanged(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender); static void _setModified(GWEN_DIALOG *dlg, int enabled); static void _toGui(GWEN_DIALOG *dlg, AB_USER *user); static void _tanMechanismComboSetup(GWEN_DIALOG *dlg, const char *widgetName); static void _tanMechanismComboSetCurrent(GWEN_DIALOG *dlg, const char *widgetName, int t); static int _tanMechanismComboGetCurrent(GWEN_DIALOG *dlg, const char *widgetName); static void _httpVersionComboSetup(GWEN_DIALOG *dlg, const char *widgetName); static void _httpVersionComboSetCurrent(GWEN_DIALOG *dlg, const char *widgetName, int v); static int _httpVersionComboGetCurrent(GWEN_DIALOG *dlg, const char *widgetName); static void _userFlagsToGui(GWEN_DIALOG *dlg, uint32_t flags); static uint32_t _userFlagsFromGui(GWEN_DIALOG *dlg); /* ------------------------------------------------------------------------------------------------ * static vars * ------------------------------------------------------------------------------------------------ */ GWEN_INHERIT(GWEN_DIALOG, AH_EDIT_USER_PINTAN_DIALOG) static _DIALOG_SIGNAL_ENTRY _signalMap[]={ {NULL, GWEN_DialogEvent_TypeInit, _handleInit}, {NULL, GWEN_DialogEvent_TypeFini, _handleFini}, {"bankCodeButton", GWEN_DialogEvent_TypeActivated, _handleActivatedBankCode}, {"getCertButton", GWEN_DialogEvent_TypeActivated, _handleActivatedGetCert}, {"getBankInfoButton", GWEN_DialogEvent_TypeActivated, _handleActivatedGetBankInfo}, {"getSysIdButton", GWEN_DialogEvent_TypeActivated, _handleActivatedGetSysId}, {"getItanModesButton", GWEN_DialogEvent_TypeActivated, _handleActivatedGetItanModes}, {"getAccountsButton", GWEN_DialogEvent_TypeActivated, _handleActivatedGetAccounts}, {"userNameEdit", GWEN_DialogEvent_TypeValueChanged, _handleValueChanged}, {"bankCodeEdit", GWEN_DialogEvent_TypeValueChanged, _handleValueChanged}, {"userIdEdit", GWEN_DialogEvent_TypeValueChanged, _handleValueChanged}, {"customerIdEdit", GWEN_DialogEvent_TypeValueChanged, _handleValueChanged}, {"tanMediumIdEdit", GWEN_DialogEvent_TypeValueChanged, _handleValueChanged}, {"urlEdit", GWEN_DialogEvent_TypeValueChanged, _handleValueChanged}, {"hbciVersionCombo", GWEN_DialogEvent_TypeActivated, _handleValueChanged}, {"httpVersionCombo", GWEN_DialogEvent_TypeActivated, _handleValueChanged}, {"tanMethodCombo", GWEN_DialogEvent_TypeActivated, _handleValueChanged}, {"tanMechanismCombo", GWEN_DialogEvent_TypeActivated, _handleValueChanged}, {"noBase64Check", GWEN_DialogEvent_TypeActivated, _handleValueChanged}, {"omitSmsAccountCheck", GWEN_DialogEvent_TypeActivated, _handleValueChanged}, {"okButton", GWEN_DialogEvent_TypeActivated, _handleActivatedOk}, {"applyButton", GWEN_DialogEvent_TypeActivated, _handleActivatedApply}, {"abortButton", GWEN_DialogEvent_TypeActivated, _handleActivatedReject}, {NULL, 0, NULL} }; /* ------------------------------------------------------------------------------------------------ * implementations * ------------------------------------------------------------------------------------------------ */ GWEN_DIALOG *AH_EditUserPinTanDialog_new(AB_PROVIDER *pro, AB_USER *u, int doLock) { GWEN_DIALOG *dlg; AH_EDIT_USER_PINTAN_DIALOG *xdlg; dlg=GWEN_Dialog_CreateAndLoadWithPath("ah_edit_user_pintan", AB_PM_LIBNAME, AB_PM_DATADIR, DLG_DIALOGFILE); if (dlg==NULL) { DBG_INFO(AQHBCI_LOGDOMAIN, "here"); return NULL; } GWEN_NEW_OBJECT(AH_EDIT_USER_PINTAN_DIALOG, xdlg); GWEN_INHERIT_SETDATA(GWEN_DIALOG, AH_EDIT_USER_PINTAN_DIALOG, dlg, xdlg, _freeData); GWEN_Dialog_SetSignalHandler(dlg, _dlgApi_signalHandler); /* preset */ xdlg->provider=pro; xdlg->banking=AB_Provider_GetBanking(pro); xdlg->user=u; xdlg->doLock=doLock; /* done */ return dlg; } void GWENHYWFAR_CB _freeData(void *bp, void *p) { AH_EDIT_USER_PINTAN_DIALOG *xdlg; xdlg=(AH_EDIT_USER_PINTAN_DIALOG *) p; GWEN_FREE_OBJECT(xdlg); } int _handleInit(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender) { AH_EDIT_USER_PINTAN_DIALOG *xdlg; GWEN_DB_NODE *dbPrefs; int i; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_EDIT_USER_PINTAN_DIALOG, dlg); assert(xdlg); dbPrefs=GWEN_Dialog_GetPreferences(dlg); /* init */ GWEN_Dialog_SetCharProperty(dlg, "", GWEN_DialogProperty_Title, 0, I18N("Edit User"), 0); _tanMechanismComboSetup(dlg, "tanMechanismCombo"); AH_Widget_HbciVersionComboSetup(dlg, "hbciVersionCombo"); _httpVersionComboSetup(dlg, "httpVersionCombo"); GWEN_Dialog_SetCharProperty(dlg, "tanMediumIdEdit", GWEN_DialogProperty_ToolTip, 0, I18N("For smsTAN or mTAN this is your mobile phone number. " "Please ask your bank for the necessary format of this number."), 0); _toGui(dlg, xdlg->user); /* read width */ i=GWEN_DB_GetIntValue(dbPrefs, "dialog_width", 0, -1); if (i>=DIALOG_MINWIDTH) GWEN_Dialog_SetIntProperty(dlg, "", GWEN_DialogProperty_Width, 0, i, 0); /* read height */ i=GWEN_DB_GetIntValue(dbPrefs, "dialog_height", 0, -1); if (i>=DIALOG_MINHEIGHT) GWEN_Dialog_SetIntProperty(dlg, "", GWEN_DialogProperty_Height, 0, i, 0); return GWEN_DialogEvent_ResultHandled; } void _toGui(GWEN_DIALOG *dlg, AB_USER *user) { const GWEN_URL *gu; AH_Widget_TanMethodComboRebuild(dlg, "tanMethodCombo", AH_User_GetTanMethodDescriptions(user)); AH_Widget_TanMethodComboSetCurrent(dlg, "tanMethodCombo", AH_User_GetSelectedTanMethod(user)); AH_Widget_UserToGuiText(dlg, "userNameEdit", user, AB_User_GetUserName); AH_Widget_UserToGuiText(dlg, "bankCodeEdit", user, AB_User_GetBankCode); AH_Widget_UserToGuiText(dlg, "userIdEdit", user, AB_User_GetUserId); AH_Widget_UserToGuiText(dlg, "customerIdEdit", user, AB_User_GetCustomerId); AH_Widget_UserToGuiText(dlg, "tanMediumIdEdit", user, AH_User_GetTanMediumId); _tanMechanismComboSetCurrent(dlg, "tanMechanismCombo", AH_User_GetSelectedTanInputMechanism(user)); AH_Widget_HbciVersionComboSetCurrent(dlg, "hbciVersionCombo", AH_User_GetHbciVersion(user)); _httpVersionComboSetCurrent(dlg, "httpVersionCombo", ((AH_User_GetHttpVMajor(user))<<8)+AH_User_GetHttpVMinor(user)); _userFlagsToGui(dlg, AH_User_GetFlags(user)); gu=AH_User_GetServerUrl(user); if (gu) { GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Url_toString(gu, tbuf); GWEN_Dialog_SetCharProperty(dlg, "urlEdit", GWEN_DialogProperty_Value, 0, GWEN_Buffer_GetStart(tbuf), 0); GWEN_Buffer_free(tbuf); } _setModified(dlg, 0); } int _fromGui(GWEN_DIALOG *dlg, AB_USER *u, int quiet) { GWEN_URL *gu; assert(dlg); if (AH_Widget_GuiTextToUserKeepSpaces(dlg, "userNameEdit", u, AB_User_SetUserName, NULL)<0 || AH_Widget_GuiTextToUserDeleSpaces(dlg, "bankCodeEdit", u, AB_User_SetBankCode, NULL)<0 || AH_Widget_GuiTextToUserKeepSpaces(dlg, "userIdEdit", u, AB_User_SetUserId, quiet?NULL:I18N("Missing user id"))<0 || AH_Widget_GuiTextToUserKeepSpaces(dlg, "customerIdEdit", u, AB_User_SetCustomerId, NULL)<0 || AH_Widget_GuiTextToUserKeepSpaces(dlg, "tanMediumIdEdit", u, AH_User_SetTanMediumId, NULL)<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here"); return GWEN_ERROR_INVALID; } const int httpVersion = _httpVersionComboGetCurrent(dlg, "httpVersionCombo"); const int tanMethod = AH_Widget_TanMethodComboGetCurrent(dlg, "tanMethodCombo"); if (tanMethod == 0) { if (!quiet) { GWEN_Gui_ShowError(I18N("Error on Input"), "%s", I18N("Please select tan method.")); GWEN_Dialog_SetIntProperty(dlg, "tanMethodCombo", GWEN_DialogProperty_Focus, 0, 1, 0); } DBG_INFO(AQHBCI_LOGDOMAIN, "Missing tan method"); return GWEN_ERROR_INVALID; } gu=AH_Widget_GuiTextToUrl(dlg, "urlEdit", 443); if (gu==NULL) { if (!quiet) { GWEN_Gui_ShowError(I18N("Error"), "%s", I18N("Invalid URL")); } DBG_INFO(AQHBCI_LOGDOMAIN, "Invalid URL"); return GWEN_ERROR_BAD_DATA; } if (u) { AB_User_SetCountry(u, "de"); AH_User_SetHbciVersion(u, AH_Widget_HbciVersionComboGetCurrent(dlg, "hbciVersionCombo")); AH_User_SetHttpVMajor(u, ((httpVersion >> 8) & 0xff)); AH_User_SetHttpVMinor(u, (httpVersion & 0xff)); AH_User_SetSelectedTanInputMechanism(u, _tanMechanismComboGetCurrent(dlg, "tanMechanismCombo")); AH_User_SetSelectedTanMethod(u, tanMethod); AH_User_SetServerUrl(u, gu); AH_User_SetFlags(u, _userFlagsFromGui(dlg)); } GWEN_Url_free(gu); return 0; } int _handleFini(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender) { AH_EDIT_USER_PINTAN_DIALOG *xdlg; int i; GWEN_DB_NODE *dbPrefs; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_EDIT_USER_PINTAN_DIALOG, dlg); assert(xdlg); dbPrefs=GWEN_Dialog_GetPreferences(dlg); /* store dialog width */ i=GWEN_Dialog_GetIntProperty(dlg, "", GWEN_DialogProperty_Width, 0, -1); GWEN_DB_SetIntValue(dbPrefs, GWEN_DB_FLAGS_OVERWRITE_VARS, "dialog_width", i); /* store dialog height */ i=GWEN_Dialog_GetIntProperty(dlg, "", GWEN_DialogProperty_Height, 0, -1); GWEN_DB_SetIntValue(dbPrefs, GWEN_DB_FLAGS_OVERWRITE_VARS, "dialog_height", i); return GWEN_DialogEvent_ResultHandled; } int _handleActivatedBankCode(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender) { AH_EDIT_USER_PINTAN_DIALOG *xdlg; GWEN_DIALOG *dlg2; int rv; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_EDIT_USER_PINTAN_DIALOG, dlg); assert(xdlg); dlg2=AB_SelectBankInfoDialog_new(xdlg->banking, "de", NULL); if (dlg2==NULL) { GWEN_Gui_ShowError(I18N("Error"), "%s", I18N("Could create dialog, maybe incomplete installation?")); return GWEN_DialogEvent_ResultHandled; } rv=GWEN_Gui_ExecDialog(dlg2, 0); if (rv==0) { /* rejected */ GWEN_Dialog_free(dlg2); return GWEN_DialogEvent_ResultHandled; } else { const AB_BANKINFO *bi; bi=AB_SelectBankInfoDialog_GetSelectedBankInfo(dlg2); if (bi) { const char *s; s=AB_BankInfo_GetBankId(bi); GWEN_Dialog_SetCharProperty(dlg, "bankCodeEdit", GWEN_DialogProperty_Value, 0, (s && *s)?s:"", 0); } } GWEN_Dialog_free(dlg2); return GWEN_DialogEvent_ResultHandled; } int _handleActivatedOk(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender) { int rv; rv=_saveUser(dlg); if (rv==0) return GWEN_DialogEvent_ResultAccept; return GWEN_DialogEvent_ResultHandled; } int _handleActivatedApply(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender) { int rv; rv=_saveUser(dlg); if (rv==0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); } return GWEN_DialogEvent_ResultHandled; } int _saveUser(GWEN_DIALOG *dlg) { AH_EDIT_USER_PINTAN_DIALOG *xdlg; int rv; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_EDIT_USER_PINTAN_DIALOG, dlg); assert(xdlg); rv=_fromGui(dlg, NULL, 0); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } if (xdlg->doLock) { int rv; rv=AB_Provider_BeginExclUseUser(xdlg->provider, xdlg->user); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); GWEN_Gui_ShowError(I18N("Error"), "%s", I18N("Unable to lock user. Maybe already in use?")); return rv; } } _fromGui(dlg, xdlg->user, 1); if (xdlg->doLock) { int rv; rv=AB_Provider_EndExclUseUser(xdlg->provider, xdlg->user, 0); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); GWEN_Gui_ShowError(I18N("Error"), "%s", I18N("Unable to unlock user.")); AB_Provider_EndExclUseUser(xdlg->provider, xdlg->user, 1); return rv; } } xdlg->modified=0; return 0; } int _handleActivatedReject(GWEN_DIALOG *dlg, GWEN_UNUSED GWEN_DIALOG_EVENTTYPE t, GWEN_UNUSED const char *sender) { return GWEN_DialogEvent_ResultReject; } int _handleActivatedGetCert(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender) { AH_EDIT_USER_PINTAN_DIALOG *xdlg; int rv; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_EDIT_USER_PINTAN_DIALOG, dlg); assert(xdlg); if (xdlg->modified) { GWEN_Gui_ShowError(I18N("User Modified"), "%s", I18N("Please apply current changes first.")); return GWEN_DialogEvent_ResultHandled; } rv=AH_Provider_GetCert(xdlg->provider, xdlg->user, DLG_WITHPROGRESS, DLG_UMOUNT, xdlg->doLock); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); } return GWEN_DialogEvent_ResultHandled; } int _handleActivatedGetSysId(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender) { AH_EDIT_USER_PINTAN_DIALOG *xdlg; int rv; AB_IMEXPORTER_CONTEXT *ctx; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_EDIT_USER_PINTAN_DIALOG, dlg); assert(xdlg); if (xdlg->modified) { GWEN_Gui_ShowError(I18N("User Modified"), "%s", I18N("Please apply current changes first.")); return GWEN_DialogEvent_ResultHandled; } ctx=AB_ImExporterContext_new(); rv=AH_Provider_GetSysId(xdlg->provider, xdlg->user, ctx, DLG_WITHPROGRESS, DLG_UMOUNT, xdlg->doLock); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); } _toGui(dlg, xdlg->user); AB_ImExporterContext_free(ctx); return GWEN_DialogEvent_ResultHandled; } int _handleActivatedGetBankInfo(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender) { AH_EDIT_USER_PINTAN_DIALOG *xdlg; int rv; AB_IMEXPORTER_CONTEXT *ctx; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_EDIT_USER_PINTAN_DIALOG, dlg); assert(xdlg); if (xdlg->modified) { GWEN_Gui_ShowError(I18N("User Modified"), "%s", I18N("Please apply current changes first.")); return GWEN_DialogEvent_ResultHandled; } ctx=AB_ImExporterContext_new(); rv=AH_Provider_GetBankInfo(xdlg->provider, xdlg->user, ctx, 0, /* without TAN segment, maybe later add button for call with TAN segment */ DLG_WITHPROGRESS, DLG_UMOUNT, xdlg->doLock); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); } _toGui(dlg, xdlg->user); AB_ImExporterContext_free(ctx); return GWEN_DialogEvent_ResultHandled; } int _handleActivatedGetItanModes(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender) { AH_EDIT_USER_PINTAN_DIALOG *xdlg; int rv; AB_IMEXPORTER_CONTEXT *ctx; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_EDIT_USER_PINTAN_DIALOG, dlg); assert(xdlg); if (xdlg->modified) { GWEN_Gui_ShowError(I18N("User Modified"), "%s", I18N("Please apply current changes first.")); return GWEN_DialogEvent_ResultHandled; } ctx=AB_ImExporterContext_new(); rv=AH_Provider_GetItanModes(xdlg->provider, xdlg->user, ctx, DLG_WITHPROGRESS, DLG_UMOUNT, xdlg->doLock); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); } _toGui(dlg, xdlg->user); AB_ImExporterContext_free(ctx); return GWEN_DialogEvent_ResultHandled; } int _handleActivatedGetAccounts(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender) { AH_EDIT_USER_PINTAN_DIALOG *xdlg; int rv; AB_IMEXPORTER_CONTEXT *ctx; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_EDIT_USER_PINTAN_DIALOG, dlg); assert(xdlg); if (xdlg->modified) { GWEN_Gui_ShowError(I18N("User Modified"), "%s", I18N("Please apply current changes first.")); return GWEN_DialogEvent_ResultHandled; } ctx=AB_ImExporterContext_new(); rv=AH_Provider_GetAccounts(xdlg->provider, xdlg->user, ctx, DLG_WITHPROGRESS, DLG_UMOUNT, xdlg->doLock); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); } _toGui(dlg, xdlg->user); AB_ImExporterContext_free(ctx); return GWEN_DialogEvent_ResultHandled; } int _handleValueChanged(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender) { _setModified(dlg, 1); return GWEN_DialogEvent_ResultHandled; } void _setModified(GWEN_DIALOG *dlg, int enabled) { AH_EDIT_USER_PINTAN_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_EDIT_USER_PINTAN_DIALOG, dlg); assert(xdlg); xdlg->modified=enabled; GWEN_Dialog_SetIntProperty(dlg, "applyButton", GWEN_DialogProperty_Enabled, 0, enabled, 0); } int GWENHYWFAR_CB _dlgApi_signalHandler(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender) { const _DIALOG_SIGNAL_ENTRY *entry; entry=_signalMap; while(entry->handlerFn) { if (entry->eventType==t && (entry->sender==NULL || (sender && strcasecmp(sender, entry->sender)==0))) { return entry->handlerFn(dlg, t, sender); } entry++; } return GWEN_DialogEvent_ResultNotHandled; } void _tanMechanismComboSetup(GWEN_DIALOG *dlg, const char *widgetName) { const GWEN_DIALOG_PROPERTY addValue=GWEN_DialogProperty_AddValue; const GWEN_DIALOG_PROPERTY clrValue=GWEN_DialogProperty_ClearValues; const GWEN_DIALOG_PROPERTY toolTip=GWEN_DialogProperty_ToolTip; GWEN_Dialog_SetCharProperty(dlg, widgetName, toolTip, 0, I18N("Please only change this value if you know what you are doing, otherwise leave it at \"auto\"."), 0); GWEN_Dialog_SetIntProperty(dlg, widgetName, clrValue, 0, 0, 0); GWEN_Dialog_SetCharProperty(dlg, widgetName, addValue, 0, I18N("tanMechanism|auto"), 0); GWEN_Dialog_SetCharProperty(dlg, widgetName, addValue, 0, I18N("tanMechanism|text"), 0); GWEN_Dialog_SetCharProperty(dlg, widgetName, addValue, 0, I18N("tanMechanism|chipTAN optic"), 0); GWEN_Dialog_SetCharProperty(dlg, widgetName, addValue, 0, I18N("tanMechanism|QR image"), 0); GWEN_Dialog_SetCharProperty(dlg, widgetName, addValue, 0, I18N("tanMechanism|photoTAN"), 0); GWEN_Dialog_SetCharProperty(dlg, widgetName, addValue, 0, I18N("tanMechanism|chipTAN USB"), 0); } void _tanMechanismComboSetCurrent(GWEN_DIALOG *dlg, const char *widgetName, int t) { const GWEN_DIALOG_PROPERTY setValue=GWEN_DialogProperty_Value; switch (t) { case AB_BANKING_TANMETHOD_TEXT: GWEN_Dialog_SetIntProperty(dlg, widgetName, setValue, 0, 1, 0); break; case AB_BANKING_TANMETHOD_CHIPTAN_OPTIC: GWEN_Dialog_SetIntProperty(dlg, widgetName, setValue, 0, 2, 0); break; case AB_BANKING_TANMETHOD_CHIPTAN_QR: GWEN_Dialog_SetIntProperty(dlg, widgetName, setValue, 0, 3, 0); break; case AB_BANKING_TANMETHOD_PHOTOTAN: GWEN_Dialog_SetIntProperty(dlg, widgetName, setValue, 0, 4, 0); break; case AB_BANKING_TANMETHOD_CHIPTAN_USB: GWEN_Dialog_SetIntProperty(dlg, widgetName, setValue, 0, 5, 0); break; default: DBG_WARN(AQHBCI_LOGDOMAIN, "Using default tanMechanism"); GWEN_Dialog_SetIntProperty(dlg, widgetName, setValue, 0, 0, 0); break; } } int _tanMechanismComboGetCurrent(GWEN_DIALOG *dlg, const char *widgetName) { int idx; idx=GWEN_Dialog_GetIntProperty(dlg, widgetName, GWEN_DialogProperty_Value, 0, -1); switch(idx) { case 1: return AB_BANKING_TANMETHOD_TEXT; case 2: return AB_BANKING_TANMETHOD_CHIPTAN_OPTIC; case 3: return AB_BANKING_TANMETHOD_CHIPTAN_QR; case 4: return AB_BANKING_TANMETHOD_PHOTOTAN; case 5: return AB_BANKING_TANMETHOD_CHIPTAN_USB; default: return AB_BANKING_TANMETHOD_TEXT; } } void _httpVersionComboSetup(GWEN_DIALOG *dlg, const char *widgetName) { const GWEN_DIALOG_PROPERTY addValue=GWEN_DialogProperty_AddValue; const GWEN_DIALOG_PROPERTY clrValue=GWEN_DialogProperty_ClearValues; GWEN_Dialog_SetIntProperty(dlg, widgetName, clrValue, 0, 0, 0); GWEN_Dialog_SetCharProperty(dlg, widgetName, addValue, 0, I18N("-- select --"), 0); GWEN_Dialog_SetCharProperty(dlg, widgetName, addValue, 0, "1.0", 0); GWEN_Dialog_SetCharProperty(dlg, widgetName, addValue, 0, "1.1", 0); } void _httpVersionComboSetCurrent(GWEN_DIALOG *dlg, const char *widgetName, int v) { const GWEN_DIALOG_PROPERTY setValue=GWEN_DialogProperty_Value; switch (v) { case 0x0100: GWEN_Dialog_SetIntProperty(dlg, widgetName, setValue, 0, 1, 0); break; case 0x0101: GWEN_Dialog_SetIntProperty(dlg, widgetName, setValue, 0, 2, 0); break; default: GWEN_Dialog_SetIntProperty(dlg, widgetName, setValue, 0, 2, 0); break; } } int _httpVersionComboGetCurrent(GWEN_DIALOG *dlg, const char *widgetName) { int idx; idx=GWEN_Dialog_GetIntProperty(dlg, widgetName, GWEN_DialogProperty_Value, 0, -1); switch(idx) { case 1: return 0x0100; case 2: return 0x0101; default: return 0x0101; } } void _userFlagsToGui(GWEN_DIALOG *dlg, uint32_t flags) { const GWEN_DIALOG_PROPERTY setValue=GWEN_DialogProperty_Value; GWEN_Dialog_SetIntProperty(dlg, "noBase64Check", setValue, 0, (flags & AH_USER_FLAGS_NO_BASE64)?1:0, 0); GWEN_Dialog_SetIntProperty(dlg, "omitSmsAccountCheck", setValue, 0, (flags & AH_USER_FLAGS_TAN_OMIT_SMS_ACCOUNT)?1:0, 0); } uint32_t _userFlagsFromGui(GWEN_DIALOG *dlg) { uint32_t flags=0; if (GWEN_Dialog_GetIntProperty(dlg, "noBase64Check", GWEN_DialogProperty_Value, 0, 0)) flags|=AH_USER_FLAGS_NO_BASE64; if (GWEN_Dialog_GetIntProperty(dlg, "omitSmsAccountCheck", GWEN_DialogProperty_Value, 0, 0)) flags|=AH_USER_FLAGS_TAN_OMIT_SMS_ACCOUNT; return flags; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/dialogs/dlg_pintan.dlg0000664000175000017500000000705214043610745023045 00000000000000 aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/dialogs/dlg_edituserrdh.dlg0000664000175000017500000000740314625171605024101 00000000000000 aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/dialogs/dlg_importkeyfile_p.h0000664000175000017500000000307114043610745024434 00000000000000/*************************************************************************** begin : Sat Aug 07 2010 copyright : (C) 2018 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQHBCI_DLG_IMPORTKEYFILE_P_H #define AQHBCI_DLG_IMPORTKEYFILE_P_H #include "dlg_importkeyfile_l.h" #include typedef struct AH_IMPORTKEYFILE_DIALOG AH_IMPORTKEYFILE_DIALOG; struct AH_IMPORTKEYFILE_DIALOG { AB_BANKING *banking; AB_PROVIDER *provider; char *fileName; char *bankCode; char *bankName; char *userName; char *userId; char *customerId; char *url; int hbciVersion; int rdhVersion; uint32_t flags; GWEN_CRYPT_TOKEN_CONTEXT_LIST *contextList; AB_USER *user; }; static void GWENHYWFAR_CB AH_ImportKeyFileDialog_FreeData(void *bp, void *p); static int GWENHYWFAR_CB AH_ImportKeyFileDialog_SignalHandler(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender); static int AH_ImportKeyFileDialog_GetFilePageData(GWEN_DIALOG *dlg); static int AH_ImportKeyFileDialog_CheckFileType(GWEN_DIALOG *dlg); static int AH_ImportKeyFileDialog_HandleActivatedContext(GWEN_DIALOG *dlg); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/dialogs/dlg_newuser_l.h0000664000175000017500000000144614043610745023241 00000000000000/*************************************************************************** begin : Mon Apr 19 2010 copyright : (C) 2018 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQHBCI_NEWUSER_DIALOG_H #define AQHBCI_NEWUSER_DIALOG_H #include "aqhbci/aqhbci.h" #include "aqbanking/backendsupport/provider.h" #include #ifdef __cplusplus extern "C" { #endif GWEN_DIALOG *AH_NewUserDialog_new(AB_PROVIDER *pro); #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/dialogs/dlg_newkeyfile.c0000664000175000017500000013365414546575647023425 00000000000000/*************************************************************************** begin : Sat Jun 26 2010 copyright : (C) 2018 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "dlg_newkeyfile_p.h" #include "aqbanking/i18n_l.h" #include #include #include #include "aqhbci/banking/user.h" #include "aqhbci/banking/provider.h" #include "aqhbci/banking/provider_online.h" #include "aqhbci/banking/provider_iniletter.h" #include "dlg_rdh_special_l.h" #include #include #include #include #include #include #include #define PAGE_BEGIN 0 #define PAGE_FILE 1 #define PAGE_BANK 2 #define PAGE_USER 3 #define PAGE_CREATE 4 #define PAGE_END 5 #define DIALOG_MINWIDTH 400 #define DIALOG_MINHEIGHT 200 GWEN_INHERIT(GWEN_DIALOG, AH_NEWKEYFILE_DIALOG) GWEN_DIALOG *AH_NewKeyFileDialog_new(AB_PROVIDER *pro) { GWEN_DIALOG *dlg; AH_NEWKEYFILE_DIALOG *xdlg; GWEN_BUFFER *fbuf; int rv; dlg=GWEN_Dialog_new("ah_setup_newkeyfile"); GWEN_NEW_OBJECT(AH_NEWKEYFILE_DIALOG, xdlg); GWEN_INHERIT_SETDATA(GWEN_DIALOG, AH_NEWKEYFILE_DIALOG, dlg, xdlg, AH_NewKeyFileDialog_FreeData); GWEN_Dialog_SetSignalHandler(dlg, AH_NewKeyFileDialog_SignalHandler); /* get path of dialog description file */ fbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_PathManager_FindFile(AB_PM_LIBNAME, AB_PM_DATADIR, "aqbanking/backends/aqhbci/dialogs/dlg_newkeyfile.dlg", fbuf); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "Dialog description file not found (%d).", rv); GWEN_Buffer_free(fbuf); GWEN_Dialog_free(dlg); return NULL; } /* read dialog from dialog description file */ rv=GWEN_Dialog_ReadXmlFile(dlg, GWEN_Buffer_GetStart(fbuf)); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d).", rv); GWEN_Gui_ShowError(I18N("Error"), I18N("Could not read dialog description file [%s], maybe an installation error (%d)?"), GWEN_Buffer_GetStart(fbuf), rv); GWEN_Buffer_free(fbuf); GWEN_Dialog_free(dlg); return NULL; } GWEN_Buffer_free(fbuf); xdlg->provider=pro; xdlg->banking=AB_Provider_GetBanking(pro); /* preset */ xdlg->hbciVersion=210; xdlg->rdhVersion=0; xdlg->cryptMode = AH_CryptMode_Rdh; /* done */ return dlg; } void GWENHYWFAR_CB AH_NewKeyFileDialog_FreeData(void *bp, void *p) { AH_NEWKEYFILE_DIALOG *xdlg; xdlg=(AH_NEWKEYFILE_DIALOG *) p; free(xdlg->fileName); free(xdlg->bankCode); free(xdlg->bankName); free(xdlg->userName); free(xdlg->userId); free(xdlg->customerId); GWEN_FREE_OBJECT(xdlg); } AB_USER *AH_NewKeyFileDialog_GetUser(const GWEN_DIALOG *dlg) { AH_NEWKEYFILE_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_NEWKEYFILE_DIALOG, dlg); assert(xdlg); return xdlg->user; } const char *AH_NewKeyFileDialog_GetFileName(const GWEN_DIALOG *dlg) { AH_NEWKEYFILE_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_NEWKEYFILE_DIALOG, dlg); assert(xdlg); return xdlg->fileName; } void AH_NewKeyFileDialog_SetFileName(GWEN_DIALOG *dlg, const char *s) { AH_NEWKEYFILE_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_NEWKEYFILE_DIALOG, dlg); assert(xdlg); free(xdlg->fileName); if (s) xdlg->fileName=strdup(s); else xdlg->fileName=NULL; } const char *AH_NewKeyFileDialog_GetBankCode(const GWEN_DIALOG *dlg) { AH_NEWKEYFILE_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_NEWKEYFILE_DIALOG, dlg); assert(xdlg); return xdlg->bankCode; } void AH_NewKeyFileDialog_SetBankCode(GWEN_DIALOG *dlg, const char *s) { AH_NEWKEYFILE_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_NEWKEYFILE_DIALOG, dlg); assert(xdlg); free(xdlg->bankCode); if (s) xdlg->bankCode=strdup(s); else xdlg->bankCode=NULL; } const char *AH_NewKeyFileDialog_GetBankName(const GWEN_DIALOG *dlg) { AH_NEWKEYFILE_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_NEWKEYFILE_DIALOG, dlg); assert(xdlg); return xdlg->bankName; } void AH_NewKeyFileDialog_SetBankName(GWEN_DIALOG *dlg, const char *s) { AH_NEWKEYFILE_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_NEWKEYFILE_DIALOG, dlg); assert(xdlg); free(xdlg->bankName); if (s) xdlg->bankName=strdup(s); else xdlg->bankName=NULL; } const char *AH_NewKeyFileDialog_GetUserName(const GWEN_DIALOG *dlg) { AH_NEWKEYFILE_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_NEWKEYFILE_DIALOG, dlg); assert(xdlg); return xdlg->userName; } void AH_NewKeyFileDialog_SetUserName(GWEN_DIALOG *dlg, const char *s) { AH_NEWKEYFILE_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_NEWKEYFILE_DIALOG, dlg); assert(xdlg); free(xdlg->userName); if (s) xdlg->userName=strdup(s); else xdlg->userName=NULL; } const char *AH_NewKeyFileDialog_GetUserId(const GWEN_DIALOG *dlg) { AH_NEWKEYFILE_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_NEWKEYFILE_DIALOG, dlg); assert(xdlg); return xdlg->userId; } void AH_NewKeyFileDialog_SetUserId(GWEN_DIALOG *dlg, const char *s) { AH_NEWKEYFILE_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_NEWKEYFILE_DIALOG, dlg); assert(xdlg); free(xdlg->userId); if (s) xdlg->userId=strdup(s); else xdlg->userId=NULL; } const char *AH_NewKeyFileDialog_GetCustomerId(const GWEN_DIALOG *dlg) { AH_NEWKEYFILE_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_NEWKEYFILE_DIALOG, dlg); assert(xdlg); return xdlg->customerId; } void AH_NewKeyFileDialog_SetCustomerId(GWEN_DIALOG *dlg, const char *s) { AH_NEWKEYFILE_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_NEWKEYFILE_DIALOG, dlg); assert(xdlg); free(xdlg->customerId); if (s) xdlg->customerId=strdup(s); else xdlg->customerId=NULL; } const char *AH_NewKeyFileDialog_GetUrl(const GWEN_DIALOG *dlg) { AH_NEWKEYFILE_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_NEWKEYFILE_DIALOG, dlg); assert(xdlg); return xdlg->url; } void AH_NewKeyFileDialog_SetUrl(GWEN_DIALOG *dlg, const char *s) { AH_NEWKEYFILE_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_NEWKEYFILE_DIALOG, dlg); assert(xdlg); free(xdlg->url); if (s) xdlg->url=strdup(s); else xdlg->url=NULL; } int AH_NewKeyFileDialog_GetHbciVersion(const GWEN_DIALOG *dlg) { AH_NEWKEYFILE_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_NEWKEYFILE_DIALOG, dlg); assert(xdlg); return xdlg->hbciVersion; } void AH_NewKeyFileDialog_SetHbciVersion(GWEN_DIALOG *dlg, int i) { AH_NEWKEYFILE_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_NEWKEYFILE_DIALOG, dlg); assert(xdlg); xdlg->hbciVersion=i; } int AH_NewKeyFileDialog_GetRdhVersion(const GWEN_DIALOG *dlg) { AH_NEWKEYFILE_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_NEWKEYFILE_DIALOG, dlg); assert(xdlg); return xdlg->rdhVersion; } void AH_NewKeyFileDialog_SetRdhVersion(GWEN_DIALOG *dlg, int i) { AH_NEWKEYFILE_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_NEWKEYFILE_DIALOG, dlg); assert(xdlg); xdlg->rdhVersion=i; } uint32_t AH_NewKeyFileDialog_GetFlags(const GWEN_DIALOG *dlg) { AH_NEWKEYFILE_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_NEWKEYFILE_DIALOG, dlg); assert(xdlg); return xdlg->flags; } void AH_NewKeyFileDialog_SetFlags(GWEN_DIALOG *dlg, uint32_t fl) { AH_NEWKEYFILE_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_NEWKEYFILE_DIALOG, dlg); assert(xdlg); xdlg->flags=fl; } void AH_NewKeyFileDialog_AddFlags(GWEN_DIALOG *dlg, uint32_t fl) { AH_NEWKEYFILE_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_NEWKEYFILE_DIALOG, dlg); assert(xdlg); xdlg->flags&=~fl; } void AH_NewKeyFileDialog_SubFlags(GWEN_DIALOG *dlg, uint32_t fl) { AH_NEWKEYFILE_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_NEWKEYFILE_DIALOG, dlg); assert(xdlg); xdlg->flags&=~fl; } void AH_NewKeyFileDialog_Init(GWEN_DIALOG *dlg) { AH_NEWKEYFILE_DIALOG *xdlg; GWEN_DB_NODE *dbPrefs; int i; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_NEWKEYFILE_DIALOG, dlg); assert(xdlg); dbPrefs=GWEN_Dialog_GetPreferences(dlg); GWEN_Dialog_SetCharProperty(dlg, "", GWEN_DialogProperty_Title, 0, I18N("HBCI Keyfile Setup Wizard"), 0); /* select first page */ GWEN_Dialog_SetIntProperty(dlg, "wiz_stack", GWEN_DialogProperty_Value, 0, 0, 0); /* setup intro page */ GWEN_Dialog_SetCharProperty(dlg, "wiz_begin_label", GWEN_DialogProperty_Title, 0, I18N("This dialog assists you in setting up a Keyfile User.\n"), 0); /* setup bank page */ GWEN_Dialog_SetCharProperty(dlg, "wiz_bank_label", GWEN_DialogProperty_Title, 0, I18N("" "

Please select the bank.

" "

AqBanking has an internal database which " "contains HBCI/FinTS information about many banks.

" "

If there is an entry for your bank this dialog will use the " "information from the database.

" "" "Please select the bank.\n" "AqBanking has an internal database which contains\n" "HBCI/FinTS information about many banks.\n" "If there is an entry for your bank this dialog will use the\n" "information from the database."), 0); /* setup user page */ GWEN_Dialog_SetCharProperty(dlg, "wiz_user_label", GWEN_DialogProperty_Title, 0, I18N("" "

For most banks the customer id must be the same as the user id.

" "

However, some banks actually use the customer id, so please look into " "the documentation provided by your bank to discover whether this is the " "case with your bank.

" "" "For most banks the customer id must be the same as the user id.\n" "However, some banks actually use the customer id, so please look into\n" "the documentation provided by your bank to discover whether this is the\n" "case with your bank."), 0); /* setup creation page */ GWEN_Dialog_SetCharProperty(dlg, "wiz_create_label", GWEN_DialogProperty_Title, 0, I18N("" "

We are now ready to create the user and exchange keys with the server.

" "

Click the next button to proceed or abort to abort.

" "" "We are now ready to create the user and exchange keys with the server.\n" "Click the NEXT button to proceed or ABORT to abort."), 0); /* setup extro page */ GWEN_Dialog_SetCharProperty(dlg, "wiz_end_label", GWEN_DialogProperty_Title, 0, I18N("" "

The user has been successfully created.

" "

You must now print the INI letter (click the button below) " "and send it to the bank.

" "

The activation of your account by the bank can take a few days.

" "" "The user has been successfully created.\n" "You must now PRINT the INI letter (click the button below)\n" "and SEND it to the bank.\n" "The activation of your account by the bank can take a few days."), 0); /* read width */ i=GWEN_DB_GetIntValue(dbPrefs, "dialog_width", 0, -1); if (i>=DIALOG_MINWIDTH) GWEN_Dialog_SetIntProperty(dlg, "", GWEN_DialogProperty_Width, 0, i, 0); /* read height */ i=GWEN_DB_GetIntValue(dbPrefs, "dialog_height", 0, -1); if (i>=DIALOG_MINHEIGHT) GWEN_Dialog_SetIntProperty(dlg, "", GWEN_DialogProperty_Height, 0, i, 0); /* disable next and previous buttons */ GWEN_Dialog_SetIntProperty(dlg, "wiz_prev_button", GWEN_DialogProperty_Enabled, 0, 0, 0); GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 1, 0); } void AH_NewKeyFileDialog_Fini(GWEN_DIALOG *dlg) { AH_NEWKEYFILE_DIALOG *xdlg; int i; GWEN_DB_NODE *dbPrefs; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_NEWKEYFILE_DIALOG, dlg); assert(xdlg); dbPrefs=GWEN_Dialog_GetPreferences(dlg); /* store dialog width */ i=GWEN_Dialog_GetIntProperty(dlg, "", GWEN_DialogProperty_Width, 0, -1); GWEN_DB_SetIntValue(dbPrefs, GWEN_DB_FLAGS_OVERWRITE_VARS, "dialog_width", i); /* store dialog height */ i=GWEN_Dialog_GetIntProperty(dlg, "", GWEN_DialogProperty_Height, 0, -1); GWEN_DB_SetIntValue(dbPrefs, GWEN_DB_FLAGS_OVERWRITE_VARS, "dialog_height", i); } int AH_NewKeyFileDialog_GetFilePageData(GWEN_DIALOG *dlg) { AH_NEWKEYFILE_DIALOG *xdlg; const char *s; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_NEWKEYFILE_DIALOG, dlg); assert(xdlg); s=GWEN_Dialog_GetCharProperty(dlg, "wiz_filename_edit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) AH_NewKeyFileDialog_SetFileName(dlg, s); else { DBG_INFO(AQHBCI_LOGDOMAIN, "Missing file name"); return GWEN_ERROR_NO_DATA; } return 0; } int AH_NewKeyFileDialog_GetBankPageData(GWEN_DIALOG *dlg) { AH_NEWKEYFILE_DIALOG *xdlg; const char *s; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_NEWKEYFILE_DIALOG, dlg); assert(xdlg); s=GWEN_Dialog_GetCharProperty(dlg, "wiz_bankcode_edit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) AH_NewKeyFileDialog_SetBankCode(dlg, s); else { DBG_INFO(AQHBCI_LOGDOMAIN, "Missing bank code"); return GWEN_ERROR_NO_DATA; } s=GWEN_Dialog_GetCharProperty(dlg, "wiz_bankname_edit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) AH_NewKeyFileDialog_SetBankName(dlg, s); else AH_NewKeyFileDialog_SetBankName(dlg, NULL); s=GWEN_Dialog_GetCharProperty(dlg, "wiz_url_edit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) AH_NewKeyFileDialog_SetUrl(dlg, s); else { DBG_INFO(AQHBCI_LOGDOMAIN, "Missing URL"); return GWEN_ERROR_NO_DATA; } return 0; } int AH_NewKeyFileDialog_GetUserPageData(GWEN_DIALOG *dlg) { AH_NEWKEYFILE_DIALOG *xdlg; const char *s; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_NEWKEYFILE_DIALOG, dlg); assert(xdlg); s=GWEN_Dialog_GetCharProperty(dlg, "wiz_username_edit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) AH_NewKeyFileDialog_SetUserName(dlg, s); else { DBG_INFO(AQHBCI_LOGDOMAIN, "Missing user name"); return GWEN_ERROR_NO_DATA; } s=GWEN_Dialog_GetCharProperty(dlg, "wiz_userid_edit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) AH_NewKeyFileDialog_SetUserId(dlg, s); else { DBG_INFO(AQHBCI_LOGDOMAIN, "Missing user id"); return GWEN_ERROR_NO_DATA; } s=GWEN_Dialog_GetCharProperty(dlg, "wiz_customerid_edit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) AH_NewKeyFileDialog_SetCustomerId(dlg, s); else AH_NewKeyFileDialog_SetCustomerId(dlg, NULL); return 0; } int AH_NewKeyFileDialog_EnterPage(GWEN_DIALOG *dlg, int page, int forwards) { AH_NEWKEYFILE_DIALOG *xdlg; int rv; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_NEWKEYFILE_DIALOG, dlg); assert(xdlg); switch (page) { case PAGE_BEGIN: GWEN_Dialog_SetIntProperty(dlg, "wiz_prev_button", GWEN_DialogProperty_Enabled, 0, 0, 0); GWEN_Dialog_SetIntProperty(dlg, "wiz_stack", GWEN_DialogProperty_Value, 0, page, 0); return GWEN_DialogEvent_ResultHandled; case PAGE_FILE: GWEN_Dialog_SetIntProperty(dlg, "wiz_prev_button", GWEN_DialogProperty_Enabled, 0, 1, 0); rv=AH_NewKeyFileDialog_GetFilePageData(dlg); if (rv<0) GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 0, 0); else GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 1, 0); GWEN_Dialog_SetIntProperty(dlg, "wiz_stack", GWEN_DialogProperty_Value, 0, page, 0); return GWEN_DialogEvent_ResultHandled; case PAGE_BANK: GWEN_Dialog_SetIntProperty(dlg, "wiz_prev_button", GWEN_DialogProperty_Enabled, 0, 1, 0); rv=AH_NewKeyFileDialog_GetBankPageData(dlg); if (rv<0) GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 0, 0); else GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 1, 0); GWEN_Dialog_SetIntProperty(dlg, "wiz_stack", GWEN_DialogProperty_Value, 0, page, 0); return GWEN_DialogEvent_ResultHandled; case PAGE_USER: GWEN_Dialog_SetIntProperty(dlg, "wiz_prev_button", GWEN_DialogProperty_Enabled, 0, 1, 0); rv=AH_NewKeyFileDialog_GetUserPageData(dlg); if (rv<0) GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 0, 0); else GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 1, 0); GWEN_Dialog_SetIntProperty(dlg, "wiz_stack", GWEN_DialogProperty_Value, 0, page, 0); return GWEN_DialogEvent_ResultHandled; case PAGE_CREATE: if (!forwards) GWEN_Dialog_SetCharProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Title, 0, I18N("Next"), 0); GWEN_Dialog_SetIntProperty(dlg, "wiz_stack", GWEN_DialogProperty_Value, 0, page, 0); return GWEN_DialogEvent_ResultHandled; case PAGE_END: GWEN_Dialog_SetIntProperty(dlg, "wiz_stack", GWEN_DialogProperty_Value, 0, page, 0); GWEN_Dialog_SetCharProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Title, 0, I18N("Finish"), 0); GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 1, 0); GWEN_Dialog_SetIntProperty(dlg, "wiz_prev_button", GWEN_DialogProperty_Enabled, 0, 0, 0); GWEN_Dialog_SetIntProperty(dlg, "wiz_abort_button", GWEN_DialogProperty_Enabled, 0, 0, 0); return GWEN_DialogEvent_ResultHandled; default: return GWEN_DialogEvent_ResultHandled; } return GWEN_DialogEvent_ResultHandled; } int AH_NewKeyFileDialog_CheckBankIniLetter(GWEN_DIALOG *dlg, AB_USER *u) { AH_NEWKEYFILE_DIALOG *xdlg; int rv; GWEN_BUFFER *tbuf; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_NEWKEYFILE_DIALOG, dlg); assert(xdlg); tbuf=GWEN_Buffer_new(0, 1024, 0, 1); /* add HTML version of the INI letter */ GWEN_Buffer_AppendString(tbuf, ""); GWEN_Buffer_AppendString(tbuf, I18N("

The following is the INI letter describing the keys of your bank. " "Please look at it carefully and compare the information against that " "in the letter from your bank.

" "

Important Warning: Only proceed if the hash matches! " "Contact your bank immediately if the hash does not match!

")); rv=AH_Provider_GetIniLetterHtml(AB_User_GetProvider(u), u, 1, 0, tbuf, 1); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); // TODO: show error message GWEN_Buffer_free(tbuf); return GWEN_DialogEvent_ResultHandled; } GWEN_Buffer_AppendString(tbuf, ""); /* add ASCII version of the INI letter for frontends which don't support HTML */ GWEN_Buffer_AppendString(tbuf, I18N("The following is the INI letter describing the keys of your bank.\n" "Please look at it carefully and compare the information against that\n" "in the letter from your bank.\n" "\n" "IMPORTANT WARNING: Only proceed if the hash matches!\n" "Contact your bank immediately if the hash does not match!\n\n")); rv=AH_Provider_GetIniLetterTxt(AB_User_GetProvider(u), u, 1, 0, tbuf, 0); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); // TODO: show error message GWEN_Buffer_free(tbuf); return GWEN_DialogEvent_ResultHandled; } if (1!=GWEN_Gui_MessageBox(GWEN_GUI_MSG_FLAGS_TYPE_INFO | GWEN_GUI_MSG_FLAGS_CONFIRM_B1 | GWEN_GUI_MSG_FLAGS_SEVERITY_DANGEROUS, I18N("Check Bank Keys"), GWEN_Buffer_GetStart(tbuf), I18N("Keys are ok"), I18N("Keys do not match!"), NULL, 0)) { GWEN_Buffer_free(tbuf); return GWEN_ERROR_VERIFY; } GWEN_Buffer_free(tbuf); return 0; } int AH_NewKeyFileDialog_DoIt(GWEN_DIALOG *dlg) { AH_NEWKEYFILE_DIALOG *xdlg; AB_USER *u; GWEN_URL *url; int rv; uint32_t pid; AB_IMEXPORTER_CONTEXT *ctx; GWEN_PLUGIN_MANAGER *pm; GWEN_PLUGIN *pl; GWEN_CRYPT_TOKEN *ct; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_NEWKEYFILE_DIALOG, dlg); assert(xdlg); rv=AH_NewKeyFileDialog_GetFilePageData(dlg); if (rv<0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "No file?"); // TODO: show error message return GWEN_DialogEvent_ResultHandled; } u=AB_Provider_CreateUserObject(xdlg->provider); if (u==NULL) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not create user, maybe backend missing?"); GWEN_Gui_ShowError(I18N("Error"), "%s", I18N("Could not find HBCI backend, maybe some plugins are not installed?")); return GWEN_DialogEvent_ResultHandled; } /* generic setup */ AB_User_SetUserName(u, xdlg->userName); AB_User_SetUserId(u, xdlg->userId); if (xdlg->customerId && *(xdlg->customerId)) AB_User_SetCustomerId(u, xdlg->customerId); else AB_User_SetCustomerId(u, xdlg->userId); AB_User_SetCountry(u, "de"); AB_User_SetBankCode(u, xdlg->bankCode); /* HBCI setup */ AH_User_SetTokenType(u, "ohbci"); AH_User_SetTokenName(u, AH_NewKeyFileDialog_GetFileName(dlg)); AH_User_SetTokenContextId(u, 1); //AH_User_SetCryptMode(u, AH_CryptMode_Rdh); AH_User_SetCryptMode(u, xdlg->cryptMode); AH_User_SetStatus(u, AH_UserStatusPending); AH_User_SetHbciVersion(u, xdlg->hbciVersion); AH_User_SetRdhType(u, xdlg->rdhVersion); AH_User_SetFlags(u, xdlg->flags); /* create CryptToken */ pm=GWEN_PluginManager_FindPluginManager(GWEN_CRYPT_TOKEN_PLUGIN_TYPENAME); if (pm==0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Plugin manager not found"); GWEN_Gui_ShowError(I18N("Error"), I18N("CryptToken plugin for type %s is not available. Did you install all necessary packages?"), GWEN_CRYPT_TOKEN_PLUGIN_TYPENAME); return 3; } pl=GWEN_PluginManager_GetPlugin(pm, AH_User_GetTokenType(u)); if (pl==0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Plugin not found"); GWEN_Gui_ShowError(I18N("Error"), I18N("CryptToken plugin for type %s is not available. Did you install all necessary packages?"), AH_User_GetTokenType(u)); AB_User_free(u); return GWEN_DialogEvent_ResultHandled; } ct=GWEN_Crypt_Token_Plugin_CreateToken(pl, AH_User_GetTokenName(u)); if (ct==0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not create crypt token"); AB_User_free(u); return GWEN_DialogEvent_ResultHandled; } /* create crypt token */ rv=GWEN_Crypt_Token_Create(ct, 0); if (rv<0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not create token"); GWEN_Gui_ShowError(I18N("Error"), I18N("The keyfile %s could not be created. Maybe there already is a file of that name (%d)."), GWEN_Crypt_Token_GetTokenName(ct), rv); AB_User_free(u); return GWEN_DialogEvent_ResultHandled; } /* close crypt token */ rv=GWEN_Crypt_Token_Close(ct, 0, 0); if (rv) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not close token"); GWEN_Gui_ShowError(I18N("Error"), I18N("The keyfile %s could not be closed. Please check disc space."), GWEN_Crypt_Token_GetTokenName(ct), rv); AB_User_free(u); unlink(AH_User_GetTokenName(u)); return GWEN_DialogEvent_ResultHandled; } url=GWEN_Url_fromString(xdlg->url); assert(url); GWEN_Url_SetProtocol(url, "hbci"); if (GWEN_Url_GetPort(url)==0) GWEN_Url_SetPort(url, 3000); AH_User_SetServerUrl(u, url); GWEN_Url_free(url); rv=AB_Provider_AddUser(xdlg->provider, u); if (rv<0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not add user (%d)", rv); GWEN_Gui_ShowError(I18N("Error"), I18N("Could not add HBCI user, maybe there already is a user of that id (%d)"), rv); AB_User_free(u); DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not add user, maybe there already is a user of the same id (%d)?", rv); return GWEN_DialogEvent_ResultHandled; } pid=GWEN_Gui_ProgressStart(GWEN_GUI_PROGRESS_DELAY | GWEN_GUI_PROGRESS_ALLOW_EMBED | GWEN_GUI_PROGRESS_SHOW_PROGRESS | GWEN_GUI_PROGRESS_SHOW_ABORT, I18N("Setting Up Keyfile User"), I18N("The server keys will now be retrieved, keys created and sent to the bank."), 3, /* getkeys, mkKeys, sendKeys */ 0); /* lock new user */ rv=AB_Provider_BeginExclUseUser(xdlg->provider, u); if (rv<0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not lock user (%d)", rv); GWEN_Gui_ProgressLog2(pid, GWEN_LoggerLevel_Error, I18N("Unable to lock users (%d)"), rv); AB_Provider_DeleteUser(xdlg->provider, AB_User_GetUniqueId(u)); unlink(AH_NewKeyFileDialog_GetFileName(dlg)); GWEN_Gui_ProgressEnd(pid); return GWEN_DialogEvent_ResultHandled; } /* get server keys id */ GWEN_Gui_ProgressLog(pid, GWEN_LoggerLevel_Notice, I18N("Retrieving server keys")); ctx=AB_ImExporterContext_new(); rv=AH_Provider_GetServerKeys(xdlg->provider, u, ctx, 0, 1, 0); AB_ImExporterContext_free(ctx); if (rv<0) { AB_Provider_EndExclUseUser(xdlg->provider, u, 1); DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); AB_Provider_DeleteUser(xdlg->provider, AB_User_GetUniqueId(u)); unlink(AH_NewKeyFileDialog_GetFileName(dlg)); GWEN_Gui_ProgressEnd(pid); return GWEN_DialogEvent_ResultHandled; } rv=AH_NewKeyFileDialog_CheckBankIniLetter(dlg, u); if (rv<0) { AB_Provider_EndExclUseUser(xdlg->provider, u, 1); DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); AB_Provider_DeleteUser(xdlg->provider, AB_User_GetUniqueId(u)); unlink(AH_NewKeyFileDialog_GetFileName(dlg)); GWEN_Gui_ProgressLog(pid, GWEN_LoggerLevel_Error, I18N("Bad bank keys, you should contact your bank.")); GWEN_Gui_ProgressEnd(pid); return GWEN_DialogEvent_ResultHandled; } rv=GWEN_Gui_ProgressAdvance(pid, GWEN_GUI_PROGRESS_ONE); if (rv==GWEN_ERROR_USER_ABORTED) { AB_Provider_EndExclUseUser(xdlg->provider, u, 1); DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); AB_Provider_DeleteUser(xdlg->provider, AB_User_GetUniqueId(u)); unlink(AH_NewKeyFileDialog_GetFileName(dlg)); GWEN_Gui_ProgressLog(pid, GWEN_LoggerLevel_Error, I18N("Aborted by user.")); GWEN_Gui_ProgressEnd(pid); return GWEN_DialogEvent_ResultHandled; } /* generate keys */ rv=AH_Provider_CreateKeys(xdlg->provider, u, 0); if (rv<0) { AB_Provider_EndExclUseUser(xdlg->provider, u, 1); DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); AB_Provider_DeleteUser(xdlg->provider, AB_User_GetUniqueId(u)); unlink(AH_NewKeyFileDialog_GetFileName(dlg)); GWEN_Gui_ProgressLog2(pid, GWEN_LoggerLevel_Error, I18N("Error generating keys: %d"), rv); GWEN_Gui_ProgressEnd(pid); return GWEN_DialogEvent_ResultHandled; } rv=GWEN_Gui_ProgressAdvance(pid, GWEN_GUI_PROGRESS_ONE); if (rv==GWEN_ERROR_USER_ABORTED) { AB_Provider_EndExclUseUser(xdlg->provider, u, 1); DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); AB_Provider_DeleteUser(xdlg->provider, AB_User_GetUniqueId(u)); unlink(AH_NewKeyFileDialog_GetFileName(dlg)); GWEN_Gui_ProgressLog(pid, GWEN_LoggerLevel_Error, I18N("Aborted by user.")); GWEN_Gui_ProgressEnd(pid); return GWEN_DialogEvent_ResultHandled; } /* send user keys */ GWEN_Gui_ProgressLog(pid, GWEN_LoggerLevel_Notice, I18N("Sending user keys")); ctx=AB_ImExporterContext_new(); rv=AH_Provider_SendUserKeys2(xdlg->provider, u, ctx, 0, 0, 1, 0); /* withAuthKey, withProgress, nounmount, doLock */ AB_ImExporterContext_free(ctx); if (rv<0) { AB_Provider_EndExclUseUser(xdlg->provider, u, 1); DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); AB_Provider_DeleteUser(xdlg->provider, AB_User_GetUniqueId(u)); unlink(AH_NewKeyFileDialog_GetFileName(dlg)); GWEN_Gui_ProgressEnd(pid); return GWEN_DialogEvent_ResultHandled; } rv=GWEN_Gui_ProgressAdvance(pid, GWEN_GUI_PROGRESS_ONE); if (rv==GWEN_ERROR_USER_ABORTED) { AB_Provider_EndExclUseUser(xdlg->provider, u, 1); DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); AB_Provider_DeleteUser(xdlg->provider, AB_User_GetUniqueId(u)); //unlink(AH_NewKeyFileDialog_GetFileName(dlg)); GWEN_Gui_ProgressLog(pid, GWEN_LoggerLevel_Error, I18N("Aborted by user.")); GWEN_Gui_ProgressEnd(pid); return GWEN_DialogEvent_ResultHandled; } /* unlock user */ rv=AB_Provider_EndExclUseUser(xdlg->provider, u, 0); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "Could not unlock customer [%s] (%d)", AB_User_GetCustomerId(u), rv); GWEN_Gui_ProgressLog2(pid, GWEN_LoggerLevel_Error, I18N("Could not unlock user %s (%d)"), AB_User_GetUserId(u), rv); AB_Provider_EndExclUseUser(xdlg->provider, u, 1); AB_Provider_DeleteUser(xdlg->provider, AB_User_GetUniqueId(u)); GWEN_Gui_ProgressEnd(pid); return GWEN_DialogEvent_ResultHandled; } GWEN_Gui_ProgressEnd(pid); AH_NewKeyFileDialog_EnterPage(dlg, PAGE_END, 1); xdlg->user=u; return GWEN_DialogEvent_ResultHandled; } int AH_NewKeyFileDialog_Next(GWEN_DIALOG *dlg) { AH_NEWKEYFILE_DIALOG *xdlg; int page; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_NEWKEYFILE_DIALOG, dlg); assert(xdlg); page=GWEN_Dialog_GetIntProperty(dlg, "wiz_stack", GWEN_DialogProperty_Value, 0, -1); if (page==PAGE_CREATE) { return AH_NewKeyFileDialog_DoIt(dlg); } else if (pagePAGE_BEGIN) { page--; return AH_NewKeyFileDialog_EnterPage(dlg, page, 0); } return GWEN_DialogEvent_ResultHandled; } int AH_NewKeyFileDialog_HandleActivatedBankCode(GWEN_DIALOG *dlg) { AH_NEWKEYFILE_DIALOG *xdlg; GWEN_DIALOG *dlg2; int rv; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_NEWKEYFILE_DIALOG, dlg); assert(xdlg); dlg2=AB_SelectBankInfoDialog_new(xdlg->banking, "de", NULL); if (dlg2==NULL) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not create dialog"); GWEN_Gui_ShowError(I18N("Error"), "%s", I18N("Could not create dialog, maybe an installation error?")); return GWEN_DialogEvent_ResultHandled; } rv=GWEN_Gui_ExecDialog(dlg2, 0); if (rv==0) { /* rejected */ GWEN_Dialog_free(dlg2); return GWEN_DialogEvent_ResultHandled; } else { const AB_BANKINFO *bi; bi=AB_SelectBankInfoDialog_GetSelectedBankInfo(dlg2); if (bi) { const char *s; AB_BANKINFO_SERVICE *sv; s=AB_BankInfo_GetBankId(bi); GWEN_Dialog_SetCharProperty(dlg, "wiz_bankcode_edit", GWEN_DialogProperty_Value, 0, (s && *s)?s:"", 0); s=AB_BankInfo_GetBankName(bi); GWEN_Dialog_SetCharProperty(dlg, "wiz_bankname_edit", GWEN_DialogProperty_Value, 0, (s && *s)?s:"", 0); sv=AB_BankInfoService_List_First(AB_BankInfo_GetServices(bi)); while (sv) { const char *s; s=AB_BankInfoService_GetType(sv); if (s && *s && strcasecmp(s, "HBCI")==0) { s=AB_BankInfoService_GetMode(sv); if (s && *s && strncasecmp(s, "RDH", 3)==0) break; } sv=AB_BankInfoService_List_Next(sv); } if (sv) { /* RDH service found */ s=AB_BankInfoService_GetMode(sv); if (s && *s) { if (strcasecmp(s, "RDH1")==0) xdlg->rdhVersion=1; else if (strcasecmp(s, "RDH2")==0) xdlg->rdhVersion=2; else if (strcasecmp(s, "RDH3")==0) xdlg->rdhVersion=3; else if (strcasecmp(s, "RDH4")==0) xdlg->rdhVersion=4; else if (strcasecmp(s, "RDH5")==0) xdlg->rdhVersion=5; else if (strcasecmp(s, "RDH6")==0) xdlg->rdhVersion=6; else if (strcasecmp(s, "RDH7")==0) xdlg->rdhVersion=7; else if (strcasecmp(s, "RDH8")==0) xdlg->rdhVersion=8; else if (strcasecmp(s, "RDH9")==0) xdlg->rdhVersion=9; else if (strcasecmp(s, "RDH10")==0) xdlg->rdhVersion=10; else if (strcasecmp(s, "RDH")==0) xdlg->rdhVersion=1; } s=AB_BankInfoService_GetAddress(sv); GWEN_Dialog_SetCharProperty(dlg, "wiz_url_edit", GWEN_DialogProperty_Value, 0, (s && *s)?s:"", 0); s=AB_BankInfoService_GetPversion(sv); if (s && *s) { if (strcasecmp(s, "2.01")==0 || strcasecmp(s, "2")==0) xdlg->hbciVersion=201; else if (strcasecmp(s, "2.10")==0 || strcasecmp(s, "2.1")==0) xdlg->hbciVersion=210; else if (strcasecmp(s, "2.20")==0 || strcasecmp(s, "2.2")==0) xdlg->hbciVersion=220; else if (strcasecmp(s, "3.00")==0 || strcasecmp(s, "3.0")==0 || strcasecmp(s, "3")==0) xdlg->hbciVersion=300; else if (strcasecmp(s, "4.00")==0 || strcasecmp(s, "4.0")==0 || strcasecmp(s, "4")==0) xdlg->hbciVersion=400; } } } } GWEN_Dialog_free(dlg2); if (AH_NewKeyFileDialog_GetBankPageData(dlg)<0) GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 0, 0); else GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 1, 0); return GWEN_DialogEvent_ResultHandled; } int AH_NewKeyFileDialog_HandleActivatedSpecial(GWEN_DIALOG *dlg) { AH_NEWKEYFILE_DIALOG *xdlg; GWEN_DIALOG *dlg2; int rv; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_NEWKEYFILE_DIALOG, dlg); assert(xdlg); dlg2=AH_RdhSpecialDialog_new(xdlg->provider); if (dlg2==NULL) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not create dialog"); GWEN_Gui_ShowError(I18N("Error"), "%s", I18N("Could not create dialog, maybe an installation error?")); return GWEN_DialogEvent_ResultHandled; } AH_RdhSpecialDialog_SetFlags(dlg2, xdlg->flags); AH_RdhSpecialDialog_SetHbciVersion(dlg2, xdlg->hbciVersion); AH_RdhSpecialDialog_SetRdhVersion(dlg2, xdlg->rdhVersion); rv=GWEN_Gui_ExecDialog(dlg2, 0); if (rv==0) { /* rejected */ GWEN_Dialog_free(dlg2); return GWEN_DialogEvent_ResultHandled; } else { xdlg->hbciVersion=AH_RdhSpecialDialog_GetHbciVersion(dlg2); xdlg->rdhVersion=AH_RdhSpecialDialog_GetRdhVersion(dlg2); xdlg->cryptMode=AH_RdhSpecialDialog_GetCryptMode(dlg2); xdlg->flags=AH_RdhSpecialDialog_GetFlags(dlg2); } GWEN_Dialog_free(dlg2); return GWEN_DialogEvent_ResultHandled; } int AH_NewKeyFileDialog_HandleActivatedFileButton(GWEN_DIALOG *dlg) { AH_NEWKEYFILE_DIALOG *xdlg; int rv; const char *s; GWEN_BUFFER *pathBuffer; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_NEWKEYFILE_DIALOG, dlg); assert(xdlg); pathBuffer=GWEN_Buffer_new(0, 256, 0, 1); s=GWEN_Dialog_GetCharProperty(dlg, "wiz_filename_edit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) GWEN_Buffer_AppendString(pathBuffer, s); rv=GWEN_Gui_GetFileName(I18N("Create Keyfile"), GWEN_Gui_FileNameType_SaveFileName, 0, I18N("All Files (*)\tOHBCI Files (*ohbci;*.medium)"), pathBuffer, GWEN_Dialog_GetGuiId(dlg)); if (rv==0) { GWEN_Dialog_SetCharProperty(dlg, "wiz_filename_edit", GWEN_DialogProperty_Value, 0, GWEN_Buffer_GetStart(pathBuffer), 0); rv=AH_NewKeyFileDialog_GetFilePageData(dlg); if (rv<0) GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 0, 0); else GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 1, 0); } else { DBG_NOTICE(AQHBCI_LOGDOMAIN, "here (%d)", rv); } GWEN_Buffer_free(pathBuffer); return GWEN_DialogEvent_ResultHandled; } static int AH_NewKeyFileDialog_HandleActivatedIniLetter(GWEN_DIALOG *dlg) { AH_NEWKEYFILE_DIALOG *xdlg; int rv; GWEN_BUFFER *tbuf; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_NEWKEYFILE_DIALOG, dlg); assert(xdlg); tbuf=GWEN_Buffer_new(0, 1024, 0, 1); /* add HTML version of the INI letter */ GWEN_Buffer_AppendString(tbuf, ""); rv=AH_Provider_GetIniLetterHtml(AB_User_GetProvider(xdlg->user), xdlg->user, 0, 0, tbuf, 1); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); // TODO: show error message AB_Banking_ClearCryptTokenList(xdlg->banking); GWEN_Buffer_free(tbuf); return GWEN_DialogEvent_ResultHandled; } GWEN_Buffer_AppendString(tbuf, ""); /* add ASCII version of the INI letter for frontends which don't support HTML */ rv=AH_Provider_GetIniLetterTxt(AB_User_GetProvider(xdlg->user), xdlg->user, 0, 0, tbuf, 0); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); // TODO: show error message AB_Banking_ClearCryptTokenList(xdlg->banking); GWEN_Buffer_free(tbuf); return GWEN_DialogEvent_ResultHandled; } rv=GWEN_Gui_Print(I18N("INI Letter"), "HBCI-INILETTER", I18N("INI Letter for HBCI"), GWEN_Buffer_GetStart(tbuf), 0); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); // TODO: show error message GWEN_Buffer_free(tbuf); return GWEN_DialogEvent_ResultHandled; } GWEN_Buffer_free(tbuf); return GWEN_DialogEvent_ResultHandled; } int AH_NewKeyFileDialog_HandleActivated(GWEN_DIALOG *dlg, const char *sender) { if (strcasecmp(sender, "wiz_filename_button")==0) return AH_NewKeyFileDialog_HandleActivatedFileButton(dlg); else if (strcasecmp(sender, "wiz_bankcode_button")==0) return AH_NewKeyFileDialog_HandleActivatedBankCode(dlg); else if (strcasecmp(sender, "wiz_prev_button")==0) return AH_NewKeyFileDialog_Previous(dlg); else if (strcasecmp(sender, "wiz_next_button")==0) return AH_NewKeyFileDialog_Next(dlg); else if (strcasecmp(sender, "wiz_abort_button")==0) return GWEN_DialogEvent_ResultReject; else if (strcasecmp(sender, "wiz_special_button")==0) return AH_NewKeyFileDialog_HandleActivatedSpecial(dlg); else if (strcasecmp(sender, "wiz_iniletter_button")==0) return AH_NewKeyFileDialog_HandleActivatedIniLetter(dlg); else if (strcasecmp(sender, "wiz_help_button")==0) { /* TODO: open a help dialog */ } return GWEN_DialogEvent_ResultNotHandled; } int AH_NewKeyFileDialog_HandleValueChanged(GWEN_DIALOG *dlg, const char *sender) { if (strcasecmp(sender, "wiz_filename_edit")==0 || strcasecmp(sender, "wiz_bankcode_edit")==0 || strcasecmp(sender, "wiz_url_edit")==0 || strcasecmp(sender, "wiz_username_edit")==0 || strcasecmp(sender, "wiz_userid_edit")==0 || strcasecmp(sender, "wiz_customerid_edit")==0) { int rv; if (GWEN_Dialog_GetIntProperty(dlg, "wiz_stack", GWEN_DialogProperty_Value, 0, -1)==PAGE_FILE) { rv=AH_NewKeyFileDialog_GetFilePageData(dlg); if (rv<0) GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 0, 0); else GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 1, 0); } else if (GWEN_Dialog_GetIntProperty(dlg, "wiz_stack", GWEN_DialogProperty_Value, 0, -1)==PAGE_BANK) { rv=AH_NewKeyFileDialog_GetBankPageData(dlg); if (rv<0) GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 0, 0); else GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 1, 0); } else if (GWEN_Dialog_GetIntProperty(dlg, "wiz_stack", GWEN_DialogProperty_Value, 0, -1)==PAGE_USER) { rv=AH_NewKeyFileDialog_GetUserPageData(dlg); if (rv<0) GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 0, 0); else GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 1, 0); } return GWEN_DialogEvent_ResultHandled; } return GWEN_DialogEvent_ResultNotHandled; } int GWENHYWFAR_CB AH_NewKeyFileDialog_SignalHandler(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender) { AH_NEWKEYFILE_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_NEWKEYFILE_DIALOG, dlg); assert(xdlg); switch (t) { case GWEN_DialogEvent_TypeInit: AH_NewKeyFileDialog_Init(dlg); return GWEN_DialogEvent_ResultHandled;; case GWEN_DialogEvent_TypeFini: AH_NewKeyFileDialog_Fini(dlg); return GWEN_DialogEvent_ResultHandled;; case GWEN_DialogEvent_TypeValueChanged: return AH_NewKeyFileDialog_HandleValueChanged(dlg, sender); case GWEN_DialogEvent_TypeActivated: return AH_NewKeyFileDialog_HandleActivated(dlg, sender); case GWEN_DialogEvent_TypeEnabled: case GWEN_DialogEvent_TypeDisabled: case GWEN_DialogEvent_TypeClose: case GWEN_DialogEvent_TypeLast: return GWEN_DialogEvent_ResultNotHandled; default: break; } return GWEN_DialogEvent_ResultNotHandled; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/dialogs/w_tanmethodcombo.h0000664000175000017500000000200614625171605023735 00000000000000/*************************************************************************** begin : Wed May 01 2024 copyright : (C) 2024 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQHBCI_WIDGET_TANMETHODCOMBO_H #define AQHBCI_WIDGET_TANMETHODCOMBO_H #include "aqhbci/banking/user.h" #include void AH_Widget_TanMethodComboRebuild(GWEN_DIALOG *dlg, const char *widgetName, const AH_TAN_METHOD_LIST *ctl); int AH_Widget_TanMethodComboFindMethodById(GWEN_DIALOG *dlg, const char *widgetName, int id); void AH_Widget_TanMethodComboSetCurrent(GWEN_DIALOG *dlg, const char *widgetName, int id); int AH_Widget_TanMethodComboGetCurrent(GWEN_DIALOG *dlg, const char *widgetName); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/dialogs/dlg_editaccount_p.h0000664000175000017500000000144014625171605024054 00000000000000/*************************************************************************** begin : Thu Apr 15 2010 copyright : (C) 2024 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQHBCI_EDITACCOUNT_DIALOG_P_H #define AQHBCI_EDITACCOUNT_DIALOG_P_H #include "dlg_editaccount_l.h" typedef struct AH_EDIT_ACCOUNT_DIALOG AH_EDIT_ACCOUNT_DIALOG; struct AH_EDIT_ACCOUNT_DIALOG { AB_BANKING *banking; AB_PROVIDER *provider; AB_ACCOUNT *account; int doLock; }; #endif aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/dialogs/w_userstatuscombo.c0000664000175000017500000000444614625171605024201 00000000000000/*************************************************************************** begin : Wed May 01 2024 copyright : (C) 2024 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "w_userstatuscombo.h" #include "aqhbci/banking/user.h" #include "aqbanking/i18n_l.h" void AH_Widget_UserStatusComboSetup(GWEN_DIALOG *dlg, const char *widgetName) { const GWEN_DIALOG_PROPERTY addValue=GWEN_DialogProperty_AddValue; const GWEN_DIALOG_PROPERTY clrValue=GWEN_DialogProperty_ClearValues; GWEN_Dialog_SetIntProperty(dlg, widgetName, clrValue, 0, 0, 0); GWEN_Dialog_SetCharProperty(dlg, widgetName, addValue, 0, I18N("HBCIUserStatus|new"), 0); GWEN_Dialog_SetCharProperty(dlg, widgetName, addValue, 0, I18N("HBCIUserStatus|enabled"), 0); GWEN_Dialog_SetCharProperty(dlg, widgetName, addValue, 0, I18N("HBCIUserStatus|pending"), 0); GWEN_Dialog_SetCharProperty(dlg, widgetName, addValue, 0, I18N("HBCIUserStatus|disabled"), 0); } void AH_Widget_UserStatusComboSetCurrent(GWEN_DIALOG *dlg, const char *widgetName, int v) { switch (v) { case AH_UserStatusNew: GWEN_Dialog_SetIntProperty(dlg, widgetName, GWEN_DialogProperty_Value, 0, 0, 0); break; case AH_UserStatusEnabled: GWEN_Dialog_SetIntProperty(dlg, widgetName, GWEN_DialogProperty_Value, 0, 1, 0); break; case AH_UserStatusPending: GWEN_Dialog_SetIntProperty(dlg, widgetName, GWEN_DialogProperty_Value, 0, 2, 0); break; case AH_UserStatusDisabled: GWEN_Dialog_SetIntProperty(dlg, widgetName, GWEN_DialogProperty_Value, 0, 3, 0); break; default: break; } } int AH_Widget_UserStatusComboGetCurrent(GWEN_DIALOG *dlg, const char *widgetName) { int i; i=GWEN_Dialog_GetIntProperty(dlg, widgetName, GWEN_DialogProperty_Value, 0, -1); switch (i) { case 0: return AH_UserStatusNew; case 1: return AH_UserStatusEnabled; case 2: return AH_UserStatusPending; case 3: return AH_UserStatusDisabled; default: return AH_UserStatusNew; } } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/dialogs/dlg_rdh_special.c0000664000175000017500000003402114546575647023524 00000000000000/*************************************************************************** begin : Sat Jun 26 2010 copyright : (C) 2018 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "dlg_rdh_special_p.h" #include "aqbanking/i18n_l.h" #include #include #include "aqhbci/banking/user.h" #include "aqhbci/banking/provider.h" #include #include #include #include #include #define DIALOG_MINWIDTH 200 #define DIALOG_MINHEIGHT 100 GWEN_INHERIT(GWEN_DIALOG, AH_RDH_SPECIAL_DIALOG) GWEN_DIALOG *AH_RdhSpecialDialog_new(AB_PROVIDER *pro) { GWEN_DIALOG *dlg; AH_RDH_SPECIAL_DIALOG *xdlg; GWEN_BUFFER *fbuf; int rv; dlg=GWEN_Dialog_new("ah_rdh_special"); GWEN_NEW_OBJECT(AH_RDH_SPECIAL_DIALOG, xdlg); GWEN_INHERIT_SETDATA(GWEN_DIALOG, AH_RDH_SPECIAL_DIALOG, dlg, xdlg, AH_RdhSpecialDialog_FreeData); GWEN_Dialog_SetSignalHandler(dlg, AH_RdhSpecialDialog_SignalHandler); /* get path of dialog description file */ fbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_PathManager_FindFile(AB_PM_LIBNAME, AB_PM_DATADIR, "aqbanking/backends/aqhbci/dialogs/dlg_rdh_special.dlg", fbuf); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "Dialog description file not found (%d).", rv); GWEN_Buffer_free(fbuf); GWEN_Dialog_free(dlg); return NULL; } /* read dialog from dialog description file */ rv=GWEN_Dialog_ReadXmlFile(dlg, GWEN_Buffer_GetStart(fbuf)); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d).", rv); GWEN_Buffer_free(fbuf); GWEN_Dialog_free(dlg); return NULL; } GWEN_Buffer_free(fbuf); xdlg->provider=pro; xdlg->banking=AB_Provider_GetBanking(pro); /* preset */ xdlg->hbciVersion=300; xdlg->rdhVersion=0; /* done */ return dlg; } void GWENHYWFAR_CB AH_RdhSpecialDialog_FreeData(void *bp, void *p) { AH_RDH_SPECIAL_DIALOG *xdlg; xdlg=(AH_RDH_SPECIAL_DIALOG *) p; GWEN_FREE_OBJECT(xdlg); } int AH_RdhSpecialDialog_GetHbciVersion(const GWEN_DIALOG *dlg) { AH_RDH_SPECIAL_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_RDH_SPECIAL_DIALOG, dlg); assert(xdlg); return xdlg->hbciVersion; } void AH_RdhSpecialDialog_SetHbciVersion(GWEN_DIALOG *dlg, int i) { AH_RDH_SPECIAL_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_RDH_SPECIAL_DIALOG, dlg); assert(xdlg); xdlg->hbciVersion=i; } int AH_RdhSpecialDialog_GetRdhVersion(const GWEN_DIALOG *dlg) { AH_RDH_SPECIAL_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_RDH_SPECIAL_DIALOG, dlg); assert(xdlg); return xdlg->rdhVersion; } void AH_RdhSpecialDialog_SetRdhVersion(GWEN_DIALOG *dlg, int i) { AH_RDH_SPECIAL_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_RDH_SPECIAL_DIALOG, dlg); assert(xdlg); xdlg->rdhVersion=i; } int AH_RdhSpecialDialog_GetCryptMode(const GWEN_DIALOG *dlg) { AH_RDH_SPECIAL_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_RDH_SPECIAL_DIALOG, dlg); assert(xdlg); return xdlg->cryptMode; } void AH_RdhSpecialDialog_SetCryptMode(GWEN_DIALOG *dlg, int i) { AH_RDH_SPECIAL_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_RDH_SPECIAL_DIALOG, dlg); assert(xdlg); xdlg->cryptMode=i; } uint32_t AH_RdhSpecialDialog_GetFlags(const GWEN_DIALOG *dlg) { AH_RDH_SPECIAL_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_RDH_SPECIAL_DIALOG, dlg); assert(xdlg); return xdlg->flags; } void AH_RdhSpecialDialog_SetFlags(GWEN_DIALOG *dlg, uint32_t fl) { AH_RDH_SPECIAL_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_RDH_SPECIAL_DIALOG, dlg); assert(xdlg); xdlg->flags=fl; } void AH_RdhSpecialDialog_AddFlags(GWEN_DIALOG *dlg, uint32_t fl) { AH_RDH_SPECIAL_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_RDH_SPECIAL_DIALOG, dlg); assert(xdlg); xdlg->flags&=~fl; } void AH_RdhSpecialDialog_SubFlags(GWEN_DIALOG *dlg, uint32_t fl) { AH_RDH_SPECIAL_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_RDH_SPECIAL_DIALOG, dlg); assert(xdlg); xdlg->flags&=~fl; } void AH_RdhSpecialDialog_Init(GWEN_DIALOG *dlg) { AH_RDH_SPECIAL_DIALOG *xdlg; GWEN_DB_NODE *dbPrefs; int i; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_RDH_SPECIAL_DIALOG, dlg); assert(xdlg); dbPrefs=GWEN_Dialog_GetPreferences(dlg); GWEN_Dialog_SetCharProperty(dlg, "", GWEN_DialogProperty_Title, 0, I18N("HBCI Keyfile Special Settings"), 0); GWEN_Dialog_SetCharProperty(dlg, "hbciVersionCombo", GWEN_DialogProperty_AddValue, 0, "2.01", 0); GWEN_Dialog_SetCharProperty(dlg, "hbciVersionCombo", GWEN_DialogProperty_AddValue, 0, "2.10", 0); GWEN_Dialog_SetCharProperty(dlg, "hbciVersionCombo", GWEN_DialogProperty_AddValue, 0, "2.20", 0); GWEN_Dialog_SetCharProperty(dlg, "hbciVersionCombo", GWEN_DialogProperty_AddValue, 0, "3.0", 0); /* toGui */ switch (xdlg->hbciVersion) { case 201: GWEN_Dialog_SetIntProperty(dlg, "hbciVersionCombo", GWEN_DialogProperty_Value, 0, 0, 0); break; case 210: GWEN_Dialog_SetIntProperty(dlg, "hbciVersionCombo", GWEN_DialogProperty_Value, 0, 1, 0); break; case 220: GWEN_Dialog_SetIntProperty(dlg, "hbciVersionCombo", GWEN_DialogProperty_Value, 0, 2, 0); break; case 300: GWEN_Dialog_SetIntProperty(dlg, "hbciVersionCombo", GWEN_DialogProperty_Value, 0, 3, 0); break; default: break; } GWEN_Dialog_SetCharProperty(dlg, "rdhVersionCombo", GWEN_DialogProperty_AddValue, 0, I18N("(auto)"), 0); GWEN_Dialog_SetCharProperty(dlg, "rdhVersionCombo", GWEN_DialogProperty_AddValue, 0, "RDH-1", 0); GWEN_Dialog_SetCharProperty(dlg, "rdhVersionCombo", GWEN_DialogProperty_AddValue, 0, "RDH-2", 0); GWEN_Dialog_SetCharProperty(dlg, "rdhVersionCombo", GWEN_DialogProperty_AddValue, 0, "RDH-3", 0); GWEN_Dialog_SetCharProperty(dlg, "rdhVersionCombo", GWEN_DialogProperty_AddValue, 0, "RDH-5", 0); GWEN_Dialog_SetCharProperty(dlg, "rdhVersionCombo", GWEN_DialogProperty_AddValue, 0, "RDH-6", 0); GWEN_Dialog_SetCharProperty(dlg, "rdhVersionCombo", GWEN_DialogProperty_AddValue, 0, "RDH-7", 0); GWEN_Dialog_SetCharProperty(dlg, "rdhVersionCombo", GWEN_DialogProperty_AddValue, 0, "RDH-8", 0); GWEN_Dialog_SetCharProperty(dlg, "rdhVersionCombo", GWEN_DialogProperty_AddValue, 0, "RDH-9", 0); GWEN_Dialog_SetCharProperty(dlg, "rdhVersionCombo", GWEN_DialogProperty_AddValue, 0, "RDH-10", 0); GWEN_Dialog_SetCharProperty(dlg, "rdhVersionCombo", GWEN_DialogProperty_AddValue, 0, "RAH-7", 0); GWEN_Dialog_SetCharProperty(dlg, "rdhVersionCombo", GWEN_DialogProperty_AddValue, 0, "RAH-9", 0); GWEN_Dialog_SetCharProperty(dlg, "rdhVersionCombo", GWEN_DialogProperty_AddValue, 0, "RAH-10", 0); /* toGui */ switch (xdlg->cryptMode) { case AH_CryptMode_Rdh: switch (xdlg->rdhVersion) { case 0: GWEN_Dialog_SetIntProperty(dlg, "rdhVersionCombo", GWEN_DialogProperty_Value, 0, 0, 0); break; case 1: GWEN_Dialog_SetIntProperty(dlg, "rdhVersionCombo", GWEN_DialogProperty_Value, 0, 1, 0); break; case 2: GWEN_Dialog_SetIntProperty(dlg, "rdhVersionCombo", GWEN_DialogProperty_Value, 0, 2, 0); break; case 3: GWEN_Dialog_SetIntProperty(dlg, "rdhVersionCombo", GWEN_DialogProperty_Value, 0, 3, 0); break; case 5: GWEN_Dialog_SetIntProperty(dlg, "rdhVersionCombo", GWEN_DialogProperty_Value, 0, 4, 0); break; case 6: GWEN_Dialog_SetIntProperty(dlg, "rdhVersionCombo", GWEN_DialogProperty_Value, 0, 5, 0); break; case 7: GWEN_Dialog_SetIntProperty(dlg, "rdhVersionCombo", GWEN_DialogProperty_Value, 0, 6, 0); break; case 8: GWEN_Dialog_SetIntProperty(dlg, "rdhVersionCombo", GWEN_DialogProperty_Value, 0, 7, 0); break; case 9: GWEN_Dialog_SetIntProperty(dlg, "rdhVersionCombo", GWEN_DialogProperty_Value, 0, 8, 0); break; case 10: GWEN_Dialog_SetIntProperty(dlg, "rdhVersionCombo", GWEN_DialogProperty_Value, 0, 9, 0); break; default: break; } break; case AH_CryptMode_Rah: switch (xdlg->rdhVersion) { case 7: GWEN_Dialog_SetIntProperty(dlg, "rdhVersionCombo", GWEN_DialogProperty_Value, 0, 10, 0); break; case 9: GWEN_Dialog_SetIntProperty(dlg, "rdhVersionCombo", GWEN_DialogProperty_Value, 0, 11, 0); break; case 10: GWEN_Dialog_SetIntProperty(dlg, "rdhVersionCombo", GWEN_DialogProperty_Value, 0, 12, 0); break; default: break; } break; default: GWEN_Dialog_SetIntProperty(dlg, "rdhVersionCombo", GWEN_DialogProperty_Value, 0, 0, 0); break; } GWEN_Dialog_SetIntProperty(dlg, "bankDoesntSignCheck", GWEN_DialogProperty_Value, 0, (xdlg->flags & AH_USER_FLAGS_BANK_DOESNT_SIGN)?1:0, 0); GWEN_Dialog_SetIntProperty(dlg, "bankUsesSignSeqCheck", GWEN_DialogProperty_Value, 0, (xdlg->flags & AH_USER_FLAGS_BANK_USES_SIGNSEQ)?1:0, 0); /* read width */ i=GWEN_DB_GetIntValue(dbPrefs, "dialog_width", 0, -1); if (i>=DIALOG_MINWIDTH) GWEN_Dialog_SetIntProperty(dlg, "", GWEN_DialogProperty_Width, 0, i, 0); /* read height */ i=GWEN_DB_GetIntValue(dbPrefs, "dialog_height", 0, -1); if (i>=DIALOG_MINHEIGHT) GWEN_Dialog_SetIntProperty(dlg, "", GWEN_DialogProperty_Height, 0, i, 0); } void AH_RdhSpecialDialog_Fini(GWEN_DIALOG *dlg) { AH_RDH_SPECIAL_DIALOG *xdlg; int i; GWEN_DB_NODE *dbPrefs; uint32_t flags; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_RDH_SPECIAL_DIALOG, dlg); assert(xdlg); dbPrefs=GWEN_Dialog_GetPreferences(dlg); /* fromGui */ i=GWEN_Dialog_GetIntProperty(dlg, "hbciVersionCombo", GWEN_DialogProperty_Value, 0, -1); switch (i) { case 0: xdlg->hbciVersion=201; break; default: case 1: xdlg->hbciVersion=210; break; case 2: xdlg->hbciVersion=220; break; case 3: xdlg->hbciVersion=300; break; } i=GWEN_Dialog_GetIntProperty(dlg, "rdhVersionCombo", GWEN_DialogProperty_Value, 0, -1); switch (i) { case 1: xdlg->rdhVersion=1; xdlg->cryptMode=AH_CryptMode_Rdh; break; case 2: xdlg->rdhVersion=2; xdlg->cryptMode=AH_CryptMode_Rdh; break; case 3: xdlg->rdhVersion=3; xdlg->cryptMode=AH_CryptMode_Rdh; break; case 4: xdlg->rdhVersion=5; xdlg->cryptMode=AH_CryptMode_Rdh; break; case 5: xdlg->rdhVersion=6; xdlg->cryptMode=AH_CryptMode_Rdh; break; case 6: xdlg->rdhVersion=7; xdlg->cryptMode=AH_CryptMode_Rdh; break; case 7: xdlg->rdhVersion=8; xdlg->cryptMode=AH_CryptMode_Rdh; break; case 8: xdlg->rdhVersion=9; xdlg->cryptMode=AH_CryptMode_Rdh; break; case 9: xdlg->rdhVersion=10; xdlg->cryptMode=AH_CryptMode_Rdh; break; case 10: xdlg->rdhVersion=7; xdlg->cryptMode=AH_CryptMode_Rah; break; case 11: xdlg->rdhVersion=9; xdlg->cryptMode=AH_CryptMode_Rah; break; case 12: xdlg->rdhVersion=10; xdlg->cryptMode=AH_CryptMode_Rah; break; default: xdlg->rdhVersion=0; xdlg->cryptMode=AH_CryptMode_Rdh; break; } flags=0; if (GWEN_Dialog_GetIntProperty(dlg, "bankDoesntSignCheck", GWEN_DialogProperty_Value, 0, 0)) flags|=AH_USER_FLAGS_BANK_DOESNT_SIGN; if (GWEN_Dialog_GetIntProperty(dlg, "bankUsesSignSeqCheck", GWEN_DialogProperty_Value, 0, 0)) flags|=AH_USER_FLAGS_BANK_USES_SIGNSEQ; xdlg->flags=flags; /* store dialog width */ i=GWEN_Dialog_GetIntProperty(dlg, "", GWEN_DialogProperty_Width, 0, -1); GWEN_DB_SetIntValue(dbPrefs, GWEN_DB_FLAGS_OVERWRITE_VARS, "dialog_width", i); /* store dialog height */ i=GWEN_Dialog_GetIntProperty(dlg, "", GWEN_DialogProperty_Height, 0, -1); GWEN_DB_SetIntValue(dbPrefs, GWEN_DB_FLAGS_OVERWRITE_VARS, "dialog_height", i); } int AH_RdhSpecialDialog_HandleActivated(GWEN_DIALOG *dlg, const char *sender) { DBG_NOTICE(0, "Activated: %s", sender); if (strcasecmp(sender, "okButton")==0) return GWEN_DialogEvent_ResultAccept; else if (strcasecmp(sender, "abortButton")==0) return GWEN_DialogEvent_ResultReject; else if (strcasecmp(sender, "helpButton")==0) { /* TODO: open a help dialog */ } return GWEN_DialogEvent_ResultNotHandled; } int GWENHYWFAR_CB AH_RdhSpecialDialog_SignalHandler(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender) { AH_RDH_SPECIAL_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_RDH_SPECIAL_DIALOG, dlg); assert(xdlg); switch (t) { case GWEN_DialogEvent_TypeInit: AH_RdhSpecialDialog_Init(dlg); return GWEN_DialogEvent_ResultHandled;; case GWEN_DialogEvent_TypeFini: AH_RdhSpecialDialog_Fini(dlg); return GWEN_DialogEvent_ResultHandled;; case GWEN_DialogEvent_TypeValueChanged: return GWEN_DialogEvent_ResultHandled;; case GWEN_DialogEvent_TypeActivated: return AH_RdhSpecialDialog_HandleActivated(dlg, sender); case GWEN_DialogEvent_TypeEnabled: case GWEN_DialogEvent_TypeDisabled: case GWEN_DialogEvent_TypeClose: case GWEN_DialogEvent_TypeLast: return GWEN_DialogEvent_ResultNotHandled; default: break; } return GWEN_DialogEvent_ResultNotHandled; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/dialogs/dlg_pintan_tanmode_p.h0000664000175000017500000000155614043610745024557 00000000000000/*************************************************************************** begin : Tue Sep 17 2019 copyright : (C) 2019 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQHBCI_DLG_PINTAN_TANMODE_P_H #define AQHBCI_DLG_PINTAN_TANMODE_P_H #include "dlg_pintan_tanmode_l.h" #include "aqhbci/banking/user.h" typedef struct AH_PINTAN_TANMODE_DIALOG AH_PINTAN_TANMODE_DIALOG; struct AH_PINTAN_TANMODE_DIALOG { AB_BANKING *banking; AB_PROVIDER *provider; AB_USER *user; int doLock; AH_TAN_METHOD_LIST *tanMethodList; }; #endif aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/dialogs/dlg_ddvcard_p.h0000664000175000017500000000256514043610745023167 00000000000000/*************************************************************************** begin : Tue Apr 20 2010 copyright : (C) 2018 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQHBCI_DLG_DDVCARD_P_H #define AQHBCI_DLG_DDVCARD_P_H #include "dlg_ddvcard_l.h" #include typedef struct AH_DDVCARD_DIALOG AH_DDVCARD_DIALOG; struct AH_DDVCARD_DIALOG { AB_BANKING *banking; AB_PROVIDER *provider; char *bankCode; char *bankName; char *userName; char *userId; char *customerId; char *url; char *peerId; int hbciVersion; uint32_t flags; GWEN_CRYPT_TOKEN *cryptToken; GWEN_CRYPT_TOKEN_CONTEXT_LIST *contextList; AB_USER *user; }; static void GWENHYWFAR_CB AH_DdvCardDialog_FreeData(void *bp, void *p); static int GWENHYWFAR_CB AH_DdvCardDialog_SignalHandler(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender); static int AH_DdvCardDialog_FromContext(GWEN_DIALOG *dlg, int i); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/dialogs/dlg_zkacard_l.h0000664000175000017500000000445014043610745023166 00000000000000/*************************************************************************** begin : Tue Apr 20 2010 copyright : (C) 2018 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQHBCI_DLG_ZKACARD_H #define AQHBCI_DLG_ZKACARD_H #include #include #include #include #include #include #ifdef __cplusplus extern "C" { #endif GWEN_DIALOG *AH_ZkaCardDialog_new(AB_PROVIDER *pro, GWEN_CRYPT_TOKEN *ct); GWEN_CRYPT_TOKEN *AH_ZkaCardDialog_GetCryptToken(const GWEN_DIALOG *dlg); const char *AH_ZkaCardDialog_GetPeerId(const GWEN_DIALOG *dlg); void AH_ZkaCardDialog_SetPeerId(GWEN_DIALOG *dlg, const char *s); const char *AH_ZkaCardDialog_GetBankCode(const GWEN_DIALOG *dlg); void AH_ZkaCardDialog_SetBankCode(GWEN_DIALOG *dlg, const char *s); const char *AH_ZkaCardDialog_GetBankName(const GWEN_DIALOG *dlg); void AH_ZkaCardDialog_SetBankName(GWEN_DIALOG *dlg, const char *s); const char *AH_ZkaCardDialog_GetUserName(const GWEN_DIALOG *dlg); void AH_ZkaCardDialog_SetUserName(GWEN_DIALOG *dlg, const char *s); const char *AH_ZkaCardDialog_GetUserId(const GWEN_DIALOG *dlg); void AH_ZkaCardDialog_SetUserId(GWEN_DIALOG *dlg, const char *s); const char *AH_ZkaCardDialog_GetCustomerId(const GWEN_DIALOG *dlg); void AH_ZkaCardDialog_SetCustomerId(GWEN_DIALOG *dlg, const char *s); const char *AH_ZkaCardDialog_GetUrl(const GWEN_DIALOG *dlg); void AH_ZkaCardDialog_SetUrl(GWEN_DIALOG *dlg, const char *s); int AH_ZkaCardDialog_GetHbciVersion(const GWEN_DIALOG *dlg); void AH_ZkaCardDialog_SetHbciVersion(GWEN_DIALOG *dlg, int i); uint32_t AH_ZkaCardDialog_GetFlags(const GWEN_DIALOG *dlg); void AH_ZkaCardDialog_SetFlags(GWEN_DIALOG *dlg, uint32_t fl); void AH_ZkaCardDialog_AddFlags(GWEN_DIALOG *dlg, uint32_t fl); void AH_ZkaCardDialog_SubFlags(GWEN_DIALOG *dlg, uint32_t fl); AB_USER *AH_ZkaCardDialog_GetUser(const GWEN_DIALOG *dlg); #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/dialogs/dlg_choose_usertype.c0000664000175000017500000001443114546575647024472 00000000000000/*************************************************************************** begin : Fri Jul 30 2010 copyright : (C) 2018 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "dlg_choose_usertype_p.h" #include "aqbanking/i18n_l.h" #include "aqhbci/banking/provider.h" #include #include #include #include #include #include #include #include #include GWEN_DIALOG *AH_ChooseUserTypeDialog_new(AB_PROVIDER *pro) { GWEN_DIALOG *dlg; GWEN_BUFFER *fbuf; int rv; DBG_INFO(AQHBCI_LOGDOMAIN, "AH_ChooseUserTypeDialog_new called"); dlg=AB_UserTypePageDialog_new(AB_Provider_GetBanking(pro), "ah_choose_usertype"); GWEN_Dialog_SetSignalHandler(dlg, AH_ChooseUserTypeDialog_SignalHandler); /* get path of dialog description file */ fbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_PathManager_FindFile(AB_PM_LIBNAME, AB_PM_DATADIR, "aqbanking/backends/aqhbci/dialogs/dlg_choose_usertype.dlg", fbuf); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "Dialog description file not found (%d).", rv); GWEN_Buffer_free(fbuf); GWEN_Dialog_free(dlg); return NULL; } /* read dialog from dialog description file */ rv=GWEN_Dialog_ReadXmlFile(dlg, GWEN_Buffer_GetStart(fbuf)); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d).", rv); GWEN_Buffer_free(fbuf); GWEN_Dialog_free(dlg); return NULL; } GWEN_Buffer_free(fbuf); /* add media paths for icons */ GWEN_Dialog_AddMediaPathsFromPathManager(dlg, GWEN_PM_LIBNAME, GWEN_PM_SYSDATADIR, "aqbanking/backends/aqhbci/dialogs"); /* done */ return dlg; } void AH_ChooseUserTypeDialog_Init(GWEN_DIALOG *dlg) { GWEN_Dialog_SetCharProperty(dlg, "hbciIntroLabel", GWEN_DialogProperty_Title, 0, I18N("" "

The HBCI module supports a broad range of security " "media. Please choose the user setup mode from the following " "list.

" "

Click on the run button below to create the user.

" "" "The HBCI module supports a broad range of security\n" "media. Please choose the user setup mode from the following\n" "list.\n" "Click on the RUN button below to create the user." ), 0); switch (AB_UserTypePageDialog_GetSelectedType(dlg)) { case AqHBCI_NewUserDialog_CodeGeneric: case AqHBCI_NewUserDialog_CodeExistingPinTan: GWEN_Dialog_SetIntProperty(dlg, "hbciPinTanRadio", GWEN_DialogProperty_Value, 0, 1, 0); break; case AqHBCI_NewUserDialog_CodeCreateKeyFile: GWEN_Dialog_SetIntProperty(dlg, "hbciCreateKeyFileRadio", GWEN_DialogProperty_Value, 0, 1, 0); break; case AqHBCI_NewUserDialog_CodeExistingKeyFile: GWEN_Dialog_SetIntProperty(dlg, "hbciImportKeyFileRadio", GWEN_DialogProperty_Value, 0, 1, 0); break; case AqHBCI_NewUserDialog_CodeCreateChipcard: GWEN_Dialog_SetIntProperty(dlg, "hbciInitChipcardRadio", GWEN_DialogProperty_Value, 0, 1, 0); break; case AqHBCI_NewUserDialog_CodeExistingChipcard: GWEN_Dialog_SetIntProperty(dlg, "hbciUseChipcardRadio", GWEN_DialogProperty_Value, 0, 1, 0); break; } /* temporarily disable not-implemented buttons */ GWEN_Dialog_SetIntProperty(dlg, "hbciInitChipcardRadio", GWEN_DialogProperty_Enabled, 0, 0, 0); } void AH_ChooseUserTypeDialog_Fini(GWEN_DIALOG *dlg) { int i; if (GWEN_Dialog_GetIntProperty(dlg, "hbciPinTanRadio", GWEN_DialogProperty_Value, 0, 0)!=0) i=AqHBCI_NewUserDialog_CodeExistingPinTan; else if (GWEN_Dialog_GetIntProperty(dlg, "hbciUseChipcardRadio", GWEN_DialogProperty_Value, 0, 0)!=0) i=AqHBCI_NewUserDialog_CodeExistingChipcard; else if (GWEN_Dialog_GetIntProperty(dlg, "hbciCreateKeyFileRadio", GWEN_DialogProperty_Value, 0, 0)!=0) i=AqHBCI_NewUserDialog_CodeCreateKeyFile; else if (GWEN_Dialog_GetIntProperty(dlg, "hbciImportKeyFileRadio", GWEN_DialogProperty_Value, 0, 0)!=0) i=AqHBCI_NewUserDialog_CodeExistingKeyFile; else if (GWEN_Dialog_GetIntProperty(dlg, "hbciInitChipcardRadio", GWEN_DialogProperty_Value, 0, 0)!=0) i=AqHBCI_NewUserDialog_CodeCreateChipcard; else i=AqHBCI_NewUserDialog_CodeGeneric; DBG_NOTICE(0, "Setting selected type to %d", i); AB_UserTypePageDialog_SetSelectedType(dlg, i); } int AH_ChooseUserTypeDialog_HandleActivated(GWEN_DIALOG *dlg, const char *sender) { /* nothing for now */ return GWEN_DialogEvent_ResultNotHandled; } int GWENHYWFAR_CB AH_ChooseUserTypeDialog_SignalHandler(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender) { switch (t) { case GWEN_DialogEvent_TypeInit: AH_ChooseUserTypeDialog_Init(dlg); return GWEN_DialogEvent_ResultHandled;; case GWEN_DialogEvent_TypeFini: AH_ChooseUserTypeDialog_Fini(dlg); return GWEN_DialogEvent_ResultHandled;; case GWEN_DialogEvent_TypeValueChanged: return GWEN_DialogEvent_ResultHandled;; case GWEN_DialogEvent_TypeActivated: return AH_ChooseUserTypeDialog_HandleActivated(dlg, sender); case GWEN_DialogEvent_TypeEnabled: case GWEN_DialogEvent_TypeDisabled: case GWEN_DialogEvent_TypeClose: case GWEN_DialogEvent_TypeLast: return GWEN_DialogEvent_ResultNotHandled; default: break; } return GWEN_DialogEvent_ResultNotHandled; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/dialogs/dlg_edituserddv_p.h0000664000175000017500000000220114043610745024065 00000000000000/*************************************************************************** begin : Thu Jul 08 2010 copyright : (C) 2018 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQHBCI_DLG_EDITUSER_DDV_P_H #define AQHBCI_DLG_EDITUSER_DDV_P_H #include "dlg_edituserddv_l.h" #include "aqhbci/banking/user.h" typedef struct AH_EDIT_USER_DDV_DIALOG AH_EDIT_USER_DDV_DIALOG; struct AH_EDIT_USER_DDV_DIALOG { AB_BANKING *banking; AB_PROVIDER *provider; AB_USER *user; int doLock; }; static void GWENHYWFAR_CB AH_EditUserDdvDialog_FreeData(void *bp, void *p); static int GWENHYWFAR_CB AH_EditUserDdvDialog_SignalHandler(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/dialogs/dlg_edituserpintan_p.h0000664000175000017500000000153614625171605024616 00000000000000/*************************************************************************** begin : Thu Jul 08 2010 copyright : (C) 2024 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQHBCI_DLG_EDITUSER_PINTAN_P_H #define AQHBCI_DLG_EDITUSER_PINTAN_P_H #include "dlg_edituserpintan_l.h" #include "aqhbci/banking/user.h" typedef struct AH_EDIT_USER_PINTAN_DIALOG AH_EDIT_USER_PINTAN_DIALOG; struct AH_EDIT_USER_PINTAN_DIALOG { AB_BANKING *banking; AB_PROVIDER *provider; AB_USER *user; int doLock; int modified; }; #endif aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/dialogs/dlg_pintan_tanmode.c0000644000175000017500000001730515037735651024240 00000000000000/*************************************************************************** begin : Tue Sep 17 2019 copyright : (C) 2019 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "dlg_pintan_tanmode_p.h" #include "w_tanmethodcombo.h" #include "aqbanking/i18n_l.h" #include #include #include #define DIALOG_MINWIDTH 200 #define DIALOG_MINHEIGHT 100 #define DLG_DIALOGFILE "aqbanking/backends/aqhbci/dialogs/dlg_pintan_tanmode.dlg" /* ------------------------------------------------------------------------------------------------ * forward declarations * ------------------------------------------------------------------------------------------------ */ static void _init(GWEN_DIALOG *dlg); static void _fini(GWEN_DIALOG *dlg); static int _fromGui(GWEN_DIALOG *dlg, AB_USER *u, int quiet); static int _handleActivated(GWEN_DIALOG *dlg, const char *sender); static int _handleActivatedOk(GWEN_DIALOG *dlg, const char *sender); static void GWENHYWFAR_CB _freeData(void *bp, void *p); static int GWENHYWFAR_CB _signalHandler(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender); /* ------------------------------------------------------------------------------------------------ * implementations * ------------------------------------------------------------------------------------------------ */ GWEN_INHERIT(GWEN_DIALOG, AH_PINTAN_TANMODE_DIALOG) GWEN_DIALOG *AH_PinTan_TanModeDialog_new(AB_PROVIDER *pro, AB_USER *u, int doLock) { GWEN_DIALOG *dlg; AH_PINTAN_TANMODE_DIALOG *xdlg; dlg=GWEN_Dialog_CreateAndLoadWithPath("ah_setup_pintan_tanmode", AB_PM_LIBNAME, AB_PM_DATADIR, DLG_DIALOGFILE); if (dlg==NULL) { DBG_INFO(AQHBCI_LOGDOMAIN, "here"); return NULL; } GWEN_NEW_OBJECT(AH_PINTAN_TANMODE_DIALOG, xdlg); GWEN_INHERIT_SETDATA(GWEN_DIALOG, AH_PINTAN_TANMODE_DIALOG, dlg, xdlg, _freeData); GWEN_Dialog_SetSignalHandler(dlg, _signalHandler); xdlg->banking=AB_Provider_GetBanking(pro); xdlg->provider=pro; xdlg->user=u; /* preset */ xdlg->doLock=doLock; /* done */ return dlg; } void GWENHYWFAR_CB _freeData(void *bp, void *p) { AH_PINTAN_TANMODE_DIALOG *xdlg; xdlg=(AH_PINTAN_TANMODE_DIALOG *) p; GWEN_FREE_OBJECT(xdlg); } void _init(GWEN_DIALOG *dlg) { AH_PINTAN_TANMODE_DIALOG *xdlg; GWEN_DB_NODE *dbPrefs; int i; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_PINTAN_TANMODE_DIALOG, dlg); assert(xdlg); dbPrefs=GWEN_Dialog_GetPreferences(dlg); GWEN_Dialog_SetCharProperty(dlg, "", GWEN_DialogProperty_Title, 0, I18N("Select TAN Mode"), 0); GWEN_Dialog_SetCharProperty(dlg, "messageLabel", GWEN_DialogProperty_Title, 0, I18N("" "

Please select the TAN method to use for authentication purposes.

" "

You should choose a method with a version of 6 or higher, " "otherwise \"Strong Customer Authentication\" is disabled and connecting to most " "banks is not possible.

" "" "Please select the TAN method to use for authentication purposes.\n" "You should choose a method with a version of 6 or higher, " "otherwise \"Strong Customer Authentication\" is disabled and connecting to most " "banks is not possible."), 0); AH_Widget_TanMethodComboRebuild(dlg, "tanMethodCombo", AH_User_GetTanMethodDescriptions(xdlg->user)); AH_Widget_TanMethodComboSetCurrent(dlg, "tanMethodCombo", AH_User_GetSelectedTanMethod(xdlg->user)); /* read width */ i=GWEN_DB_GetIntValue(dbPrefs, "dialog_width", 0, -1); if (i>=DIALOG_MINWIDTH) GWEN_Dialog_SetIntProperty(dlg, "", GWEN_DialogProperty_Width, 0, i, 0); /* read height */ i=GWEN_DB_GetIntValue(dbPrefs, "dialog_height", 0, -1); if (i>=DIALOG_MINHEIGHT) GWEN_Dialog_SetIntProperty(dlg, "", GWEN_DialogProperty_Height, 0, i, 0); } void _fini(GWEN_DIALOG *dlg) { AH_PINTAN_TANMODE_DIALOG *xdlg; int i; GWEN_DB_NODE *dbPrefs; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_PINTAN_TANMODE_DIALOG, dlg); assert(xdlg); dbPrefs=GWEN_Dialog_GetPreferences(dlg); /* store dialog width */ i=GWEN_Dialog_GetIntProperty(dlg, "", GWEN_DialogProperty_Width, 0, -1); GWEN_DB_SetIntValue(dbPrefs, GWEN_DB_FLAGS_OVERWRITE_VARS, "dialog_width", i); /* store dialog height */ i=GWEN_Dialog_GetIntProperty(dlg, "", GWEN_DialogProperty_Height, 0, -1); GWEN_DB_SetIntValue(dbPrefs, GWEN_DB_FLAGS_OVERWRITE_VARS, "dialog_height", i); } int _fromGui(GWEN_DIALOG *dlg, AB_USER *u, int quiet) { int i; i=AH_Widget_TanMethodComboGetCurrent(dlg, "tanMethodCombo"); if (u && i>0) AH_User_SetSelectedTanMethod(u, i); return 0; } int GWENHYWFAR_CB _signalHandler(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender) { AH_PINTAN_TANMODE_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_PINTAN_TANMODE_DIALOG, dlg); assert(xdlg); switch (t) { case GWEN_DialogEvent_TypeInit: _init(dlg); return GWEN_DialogEvent_ResultHandled;; case GWEN_DialogEvent_TypeFini: _fini(dlg); return GWEN_DialogEvent_ResultHandled;; case GWEN_DialogEvent_TypeValueChanged: return GWEN_DialogEvent_ResultHandled;; case GWEN_DialogEvent_TypeActivated: return _handleActivated(dlg, sender); case GWEN_DialogEvent_TypeEnabled: case GWEN_DialogEvent_TypeDisabled: case GWEN_DialogEvent_TypeClose: case GWEN_DialogEvent_TypeLast: return GWEN_DialogEvent_ResultNotHandled; default: break; } return GWEN_DialogEvent_ResultNotHandled; } int _handleActivatedOk(GWEN_DIALOG *dlg, const char *sender) { AH_PINTAN_TANMODE_DIALOG *xdlg; int rv; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_PINTAN_TANMODE_DIALOG, dlg); assert(xdlg); rv=_fromGui(dlg, NULL, 0); if (rv<0) { return GWEN_DialogEvent_ResultHandled; } if (xdlg->doLock) { int rv; rv=AB_Provider_BeginExclUseUser(xdlg->provider, xdlg->user); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); GWEN_Gui_ShowError(I18N("Error"), "%s", I18N("Unable to lock user. Maybe already in use?")); return GWEN_DialogEvent_ResultHandled; } } _fromGui(dlg, xdlg->user, 1); if (xdlg->doLock) { int rv; rv=AB_Provider_EndExclUseUser(xdlg->provider, xdlg->user, 0); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); GWEN_Gui_ShowError(I18N("Error"), "%s", I18N("Unable to unlock user. Maybe already in use?")); AB_Provider_EndExclUseUser(xdlg->provider, xdlg->user, 1); return GWEN_DialogEvent_ResultHandled; } } return GWEN_DialogEvent_ResultAccept; } int _handleActivated(GWEN_DIALOG *dlg, const char *sender) { DBG_NOTICE(0, "Activated: %s", sender); if (strcasecmp(sender, "okButton")==0) return _handleActivatedOk(dlg, sender); else if (strcasecmp(sender, "abortButton")==0) return GWEN_DialogEvent_ResultReject; else if (strcasecmp(sender, "helpButton")==0) { /* TODO: open a help dialog */ } return GWEN_DialogEvent_ResultNotHandled; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/dialogs/dlg_editaccount.c0000664000175000017500000005003414625171605023533 00000000000000/*************************************************************************** begin : Thu Apr 15 2010 copyright : (C) 2024 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "dlg_editaccount_p.h" #include "w_utils.h" #include "w_accounttypecombo.h" #include "w_usercombo.h" #include "aqbanking/i18n_l.h" #include "aqhbci/banking/provider_l.h" #include "aqhbci/banking/account.h" #include "aqhbci/banking/provider.h" #include "aqhbci/banking/provider_online.h" #include #include #include #include #include #include #include #include #include /* ------------------------------------------------------------------------------------------------ * defines, types * ------------------------------------------------------------------------------------------------ */ #define DIALOG_MINWIDTH 400 #define DIALOG_MINHEIGHT 300 #define USER_LIST_MINCOLWIDTH 50 #define TARGET_ACCOUNT_LIST_MINCOLWIDTH 100 /* for improved readability */ #define DLG_WITHPROGRESS 1 #define DLG_UMOUNT 0 #define DLG_DIALOGFILE "aqbanking/backends/aqhbci/dialogs/dlg_editaccount.dlg" typedef int (*_DIALOG_SIGNAL_HANDLER_FN)(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender); typedef struct _DIALOG_SIGNAL_ENTRY _DIALOG_SIGNAL_ENTRY; struct _DIALOG_SIGNAL_ENTRY { const char *sender; GWEN_DIALOG_EVENTTYPE eventType; _DIALOG_SIGNAL_HANDLER_FN handlerFn; }; typedef const char*(*_ACCOUNT_GETCHARVALUE_FN)(const AB_ACCOUNT *acc); typedef void (*_ACCOUNT_SETCHARVALUE_FN)(AB_ACCOUNT *acc, const char *s); /* ------------------------------------------------------------------------------------------------ * forward declarations * ------------------------------------------------------------------------------------------------ */ static void GWENHYWFAR_CB _freeData(void *bp, void *p); static int GWENHYWFAR_CB _dlgApi_signalHandler(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender); static void _createTargetAccountListBoxString(const AB_REFERENCE_ACCOUNT *ra, GWEN_BUFFER *tbuf); static void _targetAccountListBoxSetup(GWEN_DIALOG *dlg, const char *widgetName); static void _targetAccountListBoxRebuild(GWEN_DIALOG *dlg); static void _accountFlagsToGui(GWEN_DIALOG *dlg, uint32_t aflags); static uint32_t _accountFlagsFromGui(GWEN_DIALOG *dlg); static void _toGui(GWEN_DIALOG *dlg, const AB_ACCOUNT *account); static int _fromGui(GWEN_DIALOG *dlg, AB_ACCOUNT *a, int quiet); static int _handleDialogInit(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender); static int _handleDialogFini(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender); static int _handleActivatedBankCode(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender); static int _handleActivatedOk(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender); static int _handleActivatedReject(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender); static int _handleActivatedSepa(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender); static int _handleActivatedTargetAcc(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender); /* ------------------------------------------------------------------------------------------------ * static vars * ------------------------------------------------------------------------------------------------ */ GWEN_INHERIT(GWEN_DIALOG, AH_EDIT_ACCOUNT_DIALOG) static _DIALOG_SIGNAL_ENTRY _signalMap[]={ {NULL, GWEN_DialogEvent_TypeInit, _handleDialogInit}, {NULL, GWEN_DialogEvent_TypeFini, _handleDialogFini}, {"bankCodeButton", GWEN_DialogEvent_TypeActivated, _handleActivatedBankCode}, {"okButton", GWEN_DialogEvent_TypeActivated, _handleActivatedOk}, {"abortButton", GWEN_DialogEvent_TypeActivated, _handleActivatedReject}, {"getSepaButton", GWEN_DialogEvent_TypeActivated, _handleActivatedSepa}, {"getTargetAccButton", GWEN_DialogEvent_TypeActivated, _handleActivatedTargetAcc}, {NULL, 0, NULL} }; /* ------------------------------------------------------------------------------------------------ * implementations * ------------------------------------------------------------------------------------------------ */ GWEN_DIALOG *AH_EditAccountDialog_new(AB_PROVIDER *pro, AB_ACCOUNT *a, int doLock) { GWEN_DIALOG *dlg; AH_EDIT_ACCOUNT_DIALOG *xdlg; dlg=GWEN_Dialog_CreateAndLoadWithPath("ah_edit_account", AB_PM_LIBNAME, AB_PM_DATADIR, DLG_DIALOGFILE); if (dlg==NULL) { DBG_INFO(AQHBCI_LOGDOMAIN, "here"); return NULL; } GWEN_NEW_OBJECT(AH_EDIT_ACCOUNT_DIALOG, xdlg); GWEN_INHERIT_SETDATA(GWEN_DIALOG, AH_EDIT_ACCOUNT_DIALOG, dlg, xdlg, _freeData); GWEN_Dialog_SetSignalHandler(dlg, _dlgApi_signalHandler); xdlg->provider=pro; xdlg->banking=AB_Provider_GetBanking(pro); xdlg->account=a; xdlg->doLock=doLock; /* done */ return dlg; } void GWENHYWFAR_CB _freeData(void *bp, void *p) { AH_EDIT_ACCOUNT_DIALOG *xdlg; xdlg=(AH_EDIT_ACCOUNT_DIALOG *) p; GWEN_FREE_OBJECT(xdlg); } void _toGui(GWEN_DIALOG *dlg, const AB_ACCOUNT *account) { AH_Widget_AccountToGuiText(dlg, "bankCodeEdit", account, AB_Account_GetBankCode); AH_Widget_AccountToGuiText(dlg, "bankNameEdit", account, AB_Account_GetBankName); AH_Widget_AccountToGuiText(dlg, "bicEdit", account, AB_Account_GetBic); AH_Widget_AccountToGuiText(dlg, "accountNumberEdit", account, AB_Account_GetAccountNumber); AH_Widget_AccountToGuiText(dlg, "accountNameEdit", account, AB_Account_GetAccountName); AH_Widget_AccountToGuiText(dlg, "ibanEdit", account, AB_Account_GetIban); AH_Widget_AccountToGuiText(dlg, "ownerNameEdit", account, AB_Account_GetOwnerName); AH_Widget_AccountToGuiText(dlg, "currencyEdit", account, AB_Account_GetCurrency); AH_Widget_AccountToGuiText(dlg, "countryEdit", account, AB_Account_GetCountry); AH_Widget_AccountTypeComboSetCurrent(dlg, "accountTypeCombo", AB_Account_GetAccountType(account)); AH_Widget_UserComboSetCurrent(dlg, "userCombo", AB_Account_GetUserId(account)); _accountFlagsToGui(dlg, AH_Account_GetFlags(account)); _targetAccountListBoxRebuild(dlg); } int _fromGui(GWEN_DIALOG *dlg, AB_ACCOUNT *a, int quiet) { AB_ACCOUNT_TYPE t; uint32_t uid; if (AH_Widget_GuiTextToAccountDeleSpaces(dlg, "accountNumberEdit", a, AB_Account_SetAccountNumber, NULL)<0 || AH_Widget_GuiTextToAccountKeepSpaces(dlg, "accountNameEdit", a, AB_Account_SetAccountName, NULL)<0 || AH_Widget_GuiTextToAccountDeleSpaces(dlg, "ibanEdit", a, AB_Account_SetIban, NULL)<0 || AH_Widget_GuiTextToAccountKeepSpaces(dlg, "ownerNameEdit", a, AB_Account_SetOwnerName, quiet?NULL:I18N("Missing owner name"))<0 || AH_Widget_GuiTextToAccountKeepSpaces(dlg, "currencyEdit", a, AB_Account_SetCurrency, NULL)<0 || AH_Widget_GuiTextToAccountKeepSpaces(dlg, "countryEdit", a, AB_Account_SetCountry, NULL)<0 || AH_Widget_GuiTextToAccountDeleSpaces(dlg, "bankCodeEdit", a, AB_Account_SetBankCode, NULL)<0 || AH_Widget_GuiTextToAccountKeepSpaces(dlg, "bankNameEdit", a, AB_Account_SetBankName, NULL)<0 || AH_Widget_GuiTextToAccountDeleSpaces(dlg, "bicEdit", a, AB_Account_SetBic, NULL)<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here"); return GWEN_ERROR_INVALID; } if (a && !quiet && AB_Account_GetIban(a)==NULL && AB_Account_GetAccountNumber(a)==NULL && AB_Account_GetAccountName(a)==NULL) { GWEN_Gui_ShowError(I18N("Error on Input"), "%s", I18N("At least one of IBAN, account number or account name required.")); GWEN_Dialog_SetIntProperty(dlg, "ibanEdit", GWEN_DialogProperty_Focus, 0, 1, 0); return GWEN_ERROR_INVALID; } t=AH_Widget_AccountTypeComboGetCurrent(dlg, "accountTypeCombo"); if (t==AB_AccountType_Unknown || t==AB_AccountType_Invalid) { DBG_ERROR(NULL, "Account type not selected"); if (!quiet) { GWEN_Gui_ShowError(I18N("Error on Input"), "%s", I18N("Please select account type.")); GWEN_Dialog_SetIntProperty(dlg, "accountTypeCombo", GWEN_DialogProperty_Focus, 0, 1, 0); return GWEN_ERROR_INVALID; } } if (a) AB_Account_SetAccountType(a, t); if (a) AH_Account_SetFlags(a, _accountFlagsFromGui(dlg)); uid=AH_Widget_UserComboGetCurrent(dlg, "userCombo"); if (uid==0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "User not selected"); if (!quiet) { GWEN_Gui_ShowError(I18N("Error on Input"), "%s", I18N("Please select a user for this account")); GWEN_Dialog_SetIntProperty(dlg, "userCombo", GWEN_DialogProperty_Focus, 0, 1, 0); return GWEN_ERROR_INVALID; } } if (a) AB_Account_SetUserId(a, uid); return 0; } int GWENHYWFAR_CB _dlgApi_signalHandler(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender) { const _DIALOG_SIGNAL_ENTRY *entry; entry=_signalMap; while(entry->handlerFn) { if (entry->eventType==t && (entry->sender==NULL || (sender && strcasecmp(sender, entry->sender)==0))) { return entry->handlerFn(dlg, t, sender); } entry++; } return GWEN_DialogEvent_ResultNotHandled; } int _handleDialogInit(GWEN_DIALOG *dlg, GWEN_UNUSED GWEN_DIALOG_EVENTTYPE t, GWEN_UNUSED const char *sender) { AH_EDIT_ACCOUNT_DIALOG *xdlg; GWEN_DB_NODE *dbPrefs; int i; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_EDIT_ACCOUNT_DIALOG, dlg); assert(xdlg); dbPrefs=GWEN_Dialog_GetPreferences(dlg); /* init */ GWEN_Dialog_SetCharProperty(dlg, "", GWEN_DialogProperty_Title, 0, I18N("Edit Account"), 0); AH_Widget_AccountTypeComboSetup(dlg, "accountTypeCombo"); _targetAccountListBoxSetup(dlg, "targetAccountListBox"); AH_Widget_UserComboRebuild(dlg, "userCombo", xdlg->provider); _toGui(dlg, xdlg->account); /* read account column widths */ GWEN_Dialog_ListReadColumnSettings(dlg, "targetAccountListBox", "target_account_list_", 2, TARGET_ACCOUNT_LIST_MINCOLWIDTH, dbPrefs); /* read width */ i=GWEN_DB_GetIntValue(dbPrefs, "dialog_width", 0, -1); if (i>=DIALOG_MINWIDTH) GWEN_Dialog_SetIntProperty(dlg, "", GWEN_DialogProperty_Width, 0, i, 0); /* read height */ i=GWEN_DB_GetIntValue(dbPrefs, "dialog_height", 0, -1); if (i>=DIALOG_MINHEIGHT) GWEN_Dialog_SetIntProperty(dlg, "", GWEN_DialogProperty_Height, 0, i, 0); return GWEN_DialogEvent_ResultHandled; } int _handleDialogFini(GWEN_DIALOG *dlg, GWEN_UNUSED GWEN_DIALOG_EVENTTYPE t, GWEN_UNUSED const char *sender) { AH_EDIT_ACCOUNT_DIALOG *xdlg; int i; GWEN_DB_NODE *dbPrefs; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_EDIT_ACCOUNT_DIALOG, dlg); assert(xdlg); dbPrefs=GWEN_Dialog_GetPreferences(dlg); /* store column widths of target account list */ GWEN_Dialog_ListWriteColumnSettings(dlg, "targetAccountListBox", "target_account_list_", 2, TARGET_ACCOUNT_LIST_MINCOLWIDTH, dbPrefs); /* store dialog width */ i=GWEN_Dialog_GetIntProperty(dlg, "", GWEN_DialogProperty_Width, 0, -1); GWEN_DB_SetIntValue(dbPrefs, GWEN_DB_FLAGS_OVERWRITE_VARS, "dialog_width", i); /* store dialog height */ i=GWEN_Dialog_GetIntProperty(dlg, "", GWEN_DialogProperty_Height, 0, -1); GWEN_DB_SetIntValue(dbPrefs, GWEN_DB_FLAGS_OVERWRITE_VARS, "dialog_height", i); return GWEN_DialogEvent_ResultHandled; } int _handleActivatedBankCode(GWEN_DIALOG *dlg, GWEN_UNUSED GWEN_DIALOG_EVENTTYPE t, GWEN_UNUSED const char *sender) { AH_EDIT_ACCOUNT_DIALOG *xdlg; GWEN_DIALOG *dlg2; int rv; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_EDIT_ACCOUNT_DIALOG, dlg); assert(xdlg); dlg2=AB_SelectBankInfoDialog_new(xdlg->banking, "de", NULL); if (dlg2==NULL) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not create dialog"); return GWEN_DialogEvent_ResultHandled; } rv=GWEN_Gui_ExecDialog(dlg2, 0); if (rv==0) { /* rejected */ GWEN_Dialog_free(dlg2); return GWEN_DialogEvent_ResultHandled; } else { const AB_BANKINFO *bi; bi=AB_SelectBankInfoDialog_GetSelectedBankInfo(dlg2); if (bi) { const char *s; s=AB_BankInfo_GetBankId(bi); GWEN_Dialog_SetCharProperty(dlg, "bankCodeEdit", GWEN_DialogProperty_Value, 0, (s && *s)?s:"", 0); s=AB_BankInfo_GetBankName(bi); GWEN_Dialog_SetCharProperty(dlg, "bankNameEdit", GWEN_DialogProperty_Value, 0, (s && *s)?s:"", 0); s=AB_BankInfo_GetBic(bi); GWEN_Dialog_SetCharProperty(dlg, "bicEdit", GWEN_DialogProperty_Value, 0, (s && *s)?s:"", 0); } } GWEN_Dialog_free(dlg2); return GWEN_DialogEvent_ResultHandled; } int _handleActivatedOk(GWEN_DIALOG *dlg, GWEN_UNUSED GWEN_DIALOG_EVENTTYPE t, GWEN_UNUSED const char *sender) { AH_EDIT_ACCOUNT_DIALOG *xdlg; int rv; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_EDIT_ACCOUNT_DIALOG, dlg); assert(xdlg); rv=_fromGui(dlg, NULL, 0); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "Incomplete GUI input"); return GWEN_DialogEvent_ResultHandled; } if (xdlg->doLock) { int rv; rv=AB_Provider_BeginExclUseAccount(xdlg->provider, xdlg->account); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); GWEN_Gui_ShowError(I18N("Error"), "%s", I18N("Unable to lock account. Maybe already in use?")); return GWEN_DialogEvent_ResultHandled; } } _fromGui(dlg, xdlg->account, 1); if (xdlg->doLock) { int rv; rv=AB_Provider_EndExclUseAccount(xdlg->provider, xdlg->account, 0); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); GWEN_Gui_ShowError(I18N("Error"), "%s", I18N("Unable to unlock account.")); AB_Provider_EndExclUseAccount(xdlg->provider, xdlg->account, 1); return GWEN_DialogEvent_ResultHandled; } } rv=AB_Provider_WriteAccountSpecForAccount(xdlg->provider, xdlg->account, 1); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); GWEN_Gui_ShowError(I18N("Error"), "%s", I18N("Unable to update account spec.")); } return GWEN_DialogEvent_ResultAccept; } int _handleActivatedReject(GWEN_DIALOG *dlg, GWEN_UNUSED GWEN_DIALOG_EVENTTYPE t, GWEN_UNUSED const char *sender) { return GWEN_DialogEvent_ResultReject; } int _handleActivatedSepa(GWEN_DIALOG *dlg, GWEN_UNUSED GWEN_DIALOG_EVENTTYPE t, GWEN_UNUSED const char *sender) { AH_EDIT_ACCOUNT_DIALOG *xdlg; int rv; AB_IMEXPORTER_CONTEXT *ctx; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_EDIT_ACCOUNT_DIALOG, dlg); assert(xdlg); ctx=AB_ImExporterContext_new(); rv=AH_Provider_GetAccountSepaInfo(xdlg->provider, xdlg->account, ctx, DLG_WITHPROGRESS, DLG_UMOUNT, xdlg->doLock); AB_ImExporterContext_free(ctx); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); } else { /* update dialog */ _toGui(dlg, xdlg->account); } return GWEN_DialogEvent_ResultHandled; } void _accountFlagsToGui(GWEN_DIALOG *dlg, uint32_t aflags) { GWEN_Dialog_SetIntProperty(dlg, "preferSingleTransferCheck", GWEN_DialogProperty_Value, 0, (aflags & AH_BANK_FLAGS_PREFER_SINGLE_TRANSFER)?1:0, 0); GWEN_Dialog_SetIntProperty(dlg, "preferSingleDebitNoteCheck", GWEN_DialogProperty_Value, 0, (aflags & AH_BANK_FLAGS_PREFER_SINGLE_DEBITNOTE)?1:0, 0); GWEN_Dialog_SetIntProperty(dlg, "sepaPreferSingleTransferCheck", GWEN_DialogProperty_Value, 0, (aflags & AH_BANK_FLAGS_SEPA_PREFER_SINGLE_TRANSFER)?1:0, 0); GWEN_Dialog_SetIntProperty(dlg, "sepaPreferSingleDebitNoteCheck", GWEN_DialogProperty_Value, 0, (aflags & AH_BANK_FLAGS_SEPA_PREFER_SINGLE_DEBITNOTE)?1:0, 0); GWEN_Dialog_SetIntProperty(dlg, "preferCamtDownloadCheck", GWEN_DialogProperty_Value, 0, (aflags & AH_BANK_FLAGS_PREFER_CAMT_DOWNLOAD)?1:0, 0); } uint32_t _accountFlagsFromGui(GWEN_DIALOG *dlg) { uint32_t aflags=0; if (GWEN_Dialog_GetIntProperty(dlg, "preferSingleTransferCheck", GWEN_DialogProperty_Value, 0, 0)) aflags|=AH_BANK_FLAGS_PREFER_SINGLE_TRANSFER; if (GWEN_Dialog_GetIntProperty(dlg, "preferSingleDebitNoteCheck", GWEN_DialogProperty_Value, 0, 0)) aflags|=AH_BANK_FLAGS_PREFER_SINGLE_DEBITNOTE; if (GWEN_Dialog_GetIntProperty(dlg, "sepaPreferSingleTransferCheck", GWEN_DialogProperty_Value, 0, 0)) aflags|=AH_BANK_FLAGS_SEPA_PREFER_SINGLE_TRANSFER; if (GWEN_Dialog_GetIntProperty(dlg, "sepaPreferSingleDebitNoteCheck", GWEN_DialogProperty_Value, 0, 0)) aflags|=AH_BANK_FLAGS_SEPA_PREFER_SINGLE_DEBITNOTE; if (GWEN_Dialog_GetIntProperty(dlg, "preferCamtDownloadCheck", GWEN_DialogProperty_Value, 0, 0)) aflags|=AH_BANK_FLAGS_PREFER_CAMT_DOWNLOAD; return aflags; } int _handleActivatedTargetAcc(GWEN_DIALOG *dlg, GWEN_UNUSED GWEN_DIALOG_EVENTTYPE t, GWEN_UNUSED const char *sender) { AH_EDIT_ACCOUNT_DIALOG *xdlg; int rv; AB_IMEXPORTER_CONTEXT *ctx; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_EDIT_ACCOUNT_DIALOG, dlg); assert(xdlg); ctx=AB_ImExporterContext_new(); rv=AH_Provider_GetTargetAccount(xdlg->provider, xdlg->account, ctx, DLG_WITHPROGRESS, DLG_UMOUNT, xdlg->doLock); AB_ImExporterContext_free(ctx); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); } else { /* update target account list */ _targetAccountListBoxRebuild(dlg); } return GWEN_DialogEvent_ResultHandled; } /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * _targetAccountList * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ void _targetAccountListBoxSetup(GWEN_DIALOG *dlg, const char *widgetName) { GWEN_Dialog_SetCharProperty(dlg, widgetName, GWEN_DialogProperty_Title, 0, I18N("Account Name\tIBAN"), 0); } void _targetAccountListBoxRebuild(GWEN_DIALOG *dlg) { AH_EDIT_ACCOUNT_DIALOG *xdlg; int i; AB_ACCOUNT_SPEC *as=NULL; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_EDIT_ACCOUNT_DIALOG, dlg); assert(xdlg); /* target account list */ i=0; GWEN_Dialog_SetIntProperty(dlg, "targetAccountListBox", GWEN_DialogProperty_ClearValues, 0, 0, 0); AB_Banking_GetAccountSpecByUniqueId(AB_Provider_GetBanking(xdlg->provider), AB_Account_GetUniqueId(xdlg->account), &as); if (as) { AB_REFERENCE_ACCOUNT_LIST *ral; AB_REFERENCE_ACCOUNT *ra; ral=AB_AccountSpec_GetRefAccountList(as); if (AB_ReferenceAccount_List_GetCount(ral)) { GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 256, 0, 1); ra=AB_ReferenceAccount_List_First(ral); while (ra) { _createTargetAccountListBoxString(ra, tbuf); GWEN_Dialog_SetCharProperty(dlg, "targetAccountListBox", GWEN_DialogProperty_AddValue, 0, GWEN_Buffer_GetStart(tbuf), 0); i++; GWEN_Buffer_Reset(tbuf); ra=AB_ReferenceAccount_List_Next(ra); } GWEN_Buffer_free(tbuf); } /* if account list not empty */ AB_AccountSpec_free(as); } GWEN_Dialog_SetIntProperty(dlg, "targetAccountListBox", GWEN_DialogProperty_Sort, 0, 0, 0); if (i) GWEN_Dialog_SetIntProperty(dlg, "targetAccountListBox", GWEN_DialogProperty_Value, 0, 0, 0); } void _createTargetAccountListBoxString(const AB_REFERENCE_ACCOUNT *ra, GWEN_BUFFER *tbuf) { const char *s; s=AB_ReferenceAccount_GetAccountName(ra); GWEN_Buffer_AppendString(tbuf, s?s:""); GWEN_Buffer_AppendString(tbuf, "\t"); s=AB_ReferenceAccount_GetIban(ra); GWEN_Buffer_AppendString(tbuf, s?s:""); } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/dialogs/w_usercombo.h0000664000175000017500000000203114625171605022726 00000000000000/*************************************************************************** begin : Wed May 01 2024 copyright : (C) 2024 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQHBCI_WIDGET_USERCOMBO_H #define AQHBCI_WIDGET_USERCOMBO_H #include "aqhbci/banking/user.h" #include "aqhbci/banking/provider.h" #include void AH_Widget_UserComboRebuild(GWEN_DIALOG *dlg, const char *widgetName, AB_PROVIDER *provider); int AH_Widget_UserComboFindUserByUid(GWEN_DIALOG *dlg, const char *widgetName, uint32_t uid); void AH_Widget_UserComboSetCurrent(GWEN_DIALOG *dlg, const char *widgetName, uint32_t uid); uint32_t AH_Widget_UserComboGetCurrent(GWEN_DIALOG *dlg, const char *widgetName); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/dialogs/dlg_pintan_special.dlg0000664000175000017500000000344014043610745024542 00000000000000 aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/dialogs/dlg_ddvcard_special_p.h0000664000175000017500000000220214043610745024653 00000000000000/*************************************************************************** begin : Tue Apr 20 2010 copyright : (C) 2018 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQHBCI_DLG_DDVCARD_SPECIAL_P_H #define AQHBCI_DLG_DDVCARD_SPECIAL_P_H #include "dlg_ddvcard_special_l.h" typedef struct AH_DDVCARD_SPECIAL_DIALOG AH_DDVCARD_SPECIAL_DIALOG; struct AH_DDVCARD_SPECIAL_DIALOG { AB_BANKING *banking; AB_PROVIDER *provider; int hbciVersion; uint32_t flags; }; static void GWENHYWFAR_CB AH_DdvCardSpecialDialog_FreeData(void *bp, void *p); static int GWENHYWFAR_CB AH_DdvCardSpecialDialog_SignalHandler(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/dialogs/w_utils.h0000664000175000017500000000450214625171605022075 00000000000000/*************************************************************************** begin : Wed May 01 2024 copyright : (C) 2024 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQHBCI_WIDGET_UTILS_H #define AQHBCI_WIDGET_UTILS_H #include #include #include #include typedef const char*(*AH_WIDGET_USER_GETCHARVALUE_FN)(const AB_USER *user); typedef void (*AH_WIDGET_USER_SETCHARVALUE_FN)(AB_USER *user, const char *s); void AH_Widget_UserToGuiText(GWEN_DIALOG *dlg, const char *widgetName, const AB_USER *user, AH_WIDGET_USER_GETCHARVALUE_FN fn); int AH_Widget_GuiTextToUserDeleSpaces(GWEN_DIALOG *dlg, const char *widgetName, AB_USER *user, AH_WIDGET_USER_SETCHARVALUE_FN fn, const char *errMsgIfMissing); int AH_Widget_GuiTextToUserKeepSpaces(GWEN_DIALOG *dlg, const char *widgetName, AB_USER *user, AH_WIDGET_USER_SETCHARVALUE_FN fn, const char *errMsgIfMissing); typedef const char*(*AH_WIDGET_ACCOUNT_GETCHARVALUE_FN)(const AB_ACCOUNT *acc); typedef void (*AH_WIDGET_ACCOUNT_SETCHARVALUE_FN)(AB_ACCOUNT *acc, const char *s); void AH_Widget_AccountToGuiText(GWEN_DIALOG *dlg, const char *widgetName, const AB_ACCOUNT *acc, AH_WIDGET_ACCOUNT_GETCHARVALUE_FN fn); int AH_Widget_GuiTextToAccountDeleSpaces(GWEN_DIALOG *dlg, const char *widgetName, AB_ACCOUNT *acc, AH_WIDGET_ACCOUNT_SETCHARVALUE_FN fn, const char *errMsgIfMissing); int AH_Widget_GuiTextToAccountKeepSpaces(GWEN_DIALOG *dlg, const char *widgetName, AB_ACCOUNT *acc, AH_WIDGET_ACCOUNT_SETCHARVALUE_FN fn, const char *errMsgIfMissing); GWEN_URL *AH_Widget_GuiTextToUrl(GWEN_DIALOG *dlg, const char *widgetName, int defaultPort); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/dialogs/w_accounttypecombo.c0000664000175000017500000000613114625171605024306 00000000000000/*************************************************************************** begin : Wed May 01 2024 copyright : (C) 2024 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "w_accounttypecombo.h" #include "aqbanking/i18n_l.h" void AH_Widget_AccountTypeComboSetup(GWEN_DIALOG *dlg, const char *widgetName) { const GWEN_DIALOG_PROPERTY addValue=GWEN_DialogProperty_AddValue; const GWEN_DIALOG_PROPERTY clrValue=GWEN_DialogProperty_ClearValues; GWEN_Dialog_SetIntProperty(dlg, widgetName, clrValue, 0, 0, 0); GWEN_Dialog_SetCharProperty(dlg, widgetName, addValue, 0, I18N("unknown"), 0); GWEN_Dialog_SetCharProperty(dlg, widgetName, addValue, 0, I18N("Bank Account"), 0); GWEN_Dialog_SetCharProperty(dlg, widgetName, addValue, 0, I18N("Credit Card Account"), 0); GWEN_Dialog_SetCharProperty(dlg, widgetName, addValue, 0, I18N("Checking Account"), 0); GWEN_Dialog_SetCharProperty(dlg, widgetName, addValue, 0, I18N("Savings Account"), 0); GWEN_Dialog_SetCharProperty(dlg, widgetName, addValue, 0, I18N("Investment Account"), 0); GWEN_Dialog_SetCharProperty(dlg, widgetName, addValue, 0, I18N("Cash Account"), 0); GWEN_Dialog_SetCharProperty(dlg, widgetName, addValue, 0, I18N("Moneymarket Account"), 0); GWEN_Dialog_SetCharProperty(dlg, widgetName, addValue, 0, I18N("Credit"), 0); GWEN_Dialog_SetCharProperty(dlg, widgetName, addValue, 0, I18N("Unspecified"), 0); } void AH_Widget_AccountTypeComboSetCurrent(GWEN_DIALOG *dlg, const char *widgetName, AB_ACCOUNT_TYPE t) { int v; switch(t) { case AB_AccountType_Bank: v=1; break; case AB_AccountType_CreditCard: v=2; break; case AB_AccountType_Checking: v=3; break; case AB_AccountType_Savings: v=4; break; case AB_AccountType_Investment: v=5; break; case AB_AccountType_Cash: v=6; break; case AB_AccountType_MoneyMarket: v=7; break; case AB_AccountType_Credit: v=8; break; case AB_AccountType_Unspecified: v=9; break; default: v=0; break; } GWEN_Dialog_SetIntProperty(dlg, widgetName, GWEN_DialogProperty_Value, 0, v, 0); } AB_ACCOUNT_TYPE AH_Widget_AccountTypeComboGetCurrent(GWEN_DIALOG *dlg, const char *widgetName) { int idx; idx=GWEN_Dialog_GetIntProperty(dlg, widgetName, GWEN_DialogProperty_Value, 0, -1); switch(idx) { case 1: return AB_AccountType_Bank; case 2: return AB_AccountType_CreditCard; case 3: return AB_AccountType_Checking; case 4: return AB_AccountType_Savings; case 5: return AB_AccountType_Investment; case 6: return AB_AccountType_Cash; case 7: return AB_AccountType_MoneyMarket; case 8: return AB_AccountType_Credit; case 9: return AB_AccountType_Unspecified; default: return AB_AccountType_Unknown; } } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/dialogs/dlg_newuser_p.h0000664000175000017500000000151014043610745023235 00000000000000/*************************************************************************** begin : Mon Apr 19 2010 copyright : (C) 2010 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQHBCI_NEWUSER_DIALOG_P_H #define AQHBCI_NEWUSER_DIALOG_P_H #include "dlg_newuser_l.h" static int GWENHYWFAR_CB AH_NewUserDialog_SignalHandler(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/dialogs/dlg_importkeyfile_l.h0000664000175000017500000000470714043610745024437 00000000000000/*************************************************************************** begin : Sat Aug 07 2010 copyright : (C) 2018 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQHBCI_DLG_IMPORTKEYFILE_H #define AQHBCI_DLG_IMPORTKEYFILE_H #include #include #include #include #include #ifdef __cplusplus extern "C" { #endif GWEN_DIALOG *AH_ImportKeyFileDialog_new(AB_PROVIDER *pro); const char *AH_ImportKeyFileDialog_GetFileName(const GWEN_DIALOG *dlg); void AH_ImportKeyFileDialog_SetFileName(GWEN_DIALOG *dlg, const char *s); const char *AH_ImportKeyFileDialog_GetBankCode(const GWEN_DIALOG *dlg); void AH_ImportKeyFileDialog_SetBankCode(GWEN_DIALOG *dlg, const char *s); const char *AH_ImportKeyFileDialog_GetBankName(const GWEN_DIALOG *dlg); void AH_ImportKeyFileDialog_SetBankName(GWEN_DIALOG *dlg, const char *s); const char *AH_ImportKeyFileDialog_GetUserName(const GWEN_DIALOG *dlg); void AH_ImportKeyFileDialog_SetUserName(GWEN_DIALOG *dlg, const char *s); const char *AH_ImportKeyFileDialog_GetUserId(const GWEN_DIALOG *dlg); void AH_ImportKeyFileDialog_SetUserId(GWEN_DIALOG *dlg, const char *s); const char *AH_ImportKeyFileDialog_GetCustomerId(const GWEN_DIALOG *dlg); void AH_ImportKeyFileDialog_SetCustomerId(GWEN_DIALOG *dlg, const char *s); const char *AH_ImportKeyFileDialog_GetUrl(const GWEN_DIALOG *dlg); void AH_ImportKeyFileDialog_SetUrl(GWEN_DIALOG *dlg, const char *s); int AH_ImportKeyFileDialog_GetHbciVersion(const GWEN_DIALOG *dlg); void AH_ImportKeyFileDialog_SetHbciVersion(GWEN_DIALOG *dlg, int i); int AH_ImportKeyFileDialog_GetRdhVersion(const GWEN_DIALOG *dlg); void AH_ImportKeyFileDialog_SetRdhVersion(GWEN_DIALOG *dlg, int i); uint32_t AH_ImportKeyFileDialog_GetFlags(const GWEN_DIALOG *dlg); void AH_ImportKeyFileDialog_SetFlags(GWEN_DIALOG *dlg, uint32_t fl); void AH_ImportKeyFileDialog_AddFlags(GWEN_DIALOG *dlg, uint32_t fl); void AH_ImportKeyFileDialog_SubFlags(GWEN_DIALOG *dlg, uint32_t fl); AB_USER *AH_ImportKeyFileDialog_GetUser(const GWEN_DIALOG *dlg); #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/dialogs/dlg_choose_usertype.dlg0000664000175000017500000000276714043610745025004 00000000000000 aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/dialogs/dlg_ddvcard.c0000664000175000017500000010707614546575647022671 00000000000000/*************************************************************************** begin : Tue Apr 20 2010 copyright : (C) 2018 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "dlg_ddvcard_p.h" #include "aqbanking/i18n_l.h" #include #include #include #include "aqhbci/banking/user.h" #include "aqhbci/banking/provider.h" #include "aqhbci/banking/provider_online.h" #include "dlg_ddvcard_special_l.h" #include #include #include #include #include #define PAGE_BEGIN 0 #define PAGE_BANK 1 #define PAGE_USER 2 #define PAGE_CREATE 3 #define PAGE_END 4 #define DIALOG_MINWIDTH 400 #define DIALOG_MINHEIGHT 200 #define MAX_CONTEXT_ID_ENTRIES 64 GWEN_INHERIT(GWEN_DIALOG, AH_DDVCARD_DIALOG) GWEN_DIALOG *AH_DdvCardDialog_new(AB_PROVIDER *pro, GWEN_CRYPT_TOKEN *ct) { GWEN_DIALOG *dlg; AH_DDVCARD_DIALOG *xdlg; GWEN_BUFFER *fbuf; int rv; dlg=GWEN_Dialog_new("ah_setup_ddvcard"); GWEN_NEW_OBJECT(AH_DDVCARD_DIALOG, xdlg); GWEN_INHERIT_SETDATA(GWEN_DIALOG, AH_DDVCARD_DIALOG, dlg, xdlg, AH_DdvCardDialog_FreeData); GWEN_Dialog_SetSignalHandler(dlg, AH_DdvCardDialog_SignalHandler); /* get path of dialog description file */ fbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_PathManager_FindFile(AB_PM_LIBNAME, AB_PM_DATADIR, "aqbanking/backends/aqhbci/dialogs/dlg_ddvcard.dlg", fbuf); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "Dialog description file not found (%d).", rv); GWEN_Buffer_free(fbuf); GWEN_Dialog_free(dlg); return NULL; } /* read dialog from dialog description file */ rv=GWEN_Dialog_ReadXmlFile(dlg, GWEN_Buffer_GetStart(fbuf)); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d).", rv); GWEN_Buffer_free(fbuf); GWEN_Dialog_free(dlg); return NULL; } GWEN_Buffer_free(fbuf); xdlg->provider=pro; xdlg->banking=AB_Provider_GetBanking(pro); xdlg->cryptToken=ct; xdlg->contextList=GWEN_Crypt_Token_Context_List_new(); if (1) { uint32_t idList[MAX_CONTEXT_ID_ENTRIES]; uint32_t idCount; uint32_t i; if (!GWEN_Crypt_Token_IsOpen(ct)) { rv=GWEN_Crypt_Token_Open(ct, 0, 0); if (rv<0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Error opening token (%d)", rv); GWEN_Gui_ShowError(I18N("Error"), I18N("Could not contact card. Maybe removed? (%d)"), rv); GWEN_Dialog_free(dlg); return NULL; } } idCount=MAX_CONTEXT_ID_ENTRIES; rv=GWEN_Crypt_Token_GetContextIdList(ct, idList, &idCount, 0); if (rv<0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not read context id list"); GWEN_Dialog_free(dlg); GWEN_Gui_ShowError(I18N("Error"), I18N("Could not read context id list from card (%d)"), rv); return NULL; } for (i=0; icontextList); DBG_INFO(AQHBCI_LOGDOMAIN, "Added context %08x", idList[i]); } } } /* for */ /* preset */ xdlg->hbciVersion=210; xdlg->flags=0; /* done */ return dlg; } void GWENHYWFAR_CB AH_DdvCardDialog_FreeData(void *bp, void *p) { AH_DDVCARD_DIALOG *xdlg; xdlg=(AH_DDVCARD_DIALOG *) p; GWEN_Crypt_Token_Context_List_free(xdlg->contextList); free(xdlg->bankCode); free(xdlg->bankName); free(xdlg->userName); free(xdlg->userId); free(xdlg->customerId); free(xdlg->peerId); GWEN_FREE_OBJECT(xdlg); } AB_USER *AH_DdvCardDialog_GetUser(const GWEN_DIALOG *dlg) { AH_DDVCARD_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_DDVCARD_DIALOG, dlg); assert(xdlg); return xdlg->user; } GWEN_CRYPT_TOKEN *AH_DdvCardDialog_GetCryptToken(const GWEN_DIALOG *dlg) { AH_DDVCARD_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_DDVCARD_DIALOG, dlg); assert(xdlg); return xdlg->cryptToken; } const char *AH_DdvCardDialog_GetBankCode(const GWEN_DIALOG *dlg) { AH_DDVCARD_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_DDVCARD_DIALOG, dlg); assert(xdlg); return xdlg->bankCode; } void AH_DdvCardDialog_SetBankCode(GWEN_DIALOG *dlg, const char *s) { AH_DDVCARD_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_DDVCARD_DIALOG, dlg); assert(xdlg); free(xdlg->bankCode); if (s) xdlg->bankCode=strdup(s); else xdlg->bankCode=NULL; } const char *AH_DdvCardDialog_GetBankName(const GWEN_DIALOG *dlg) { AH_DDVCARD_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_DDVCARD_DIALOG, dlg); assert(xdlg); return xdlg->bankName; } void AH_DdvCardDialog_SetBankName(GWEN_DIALOG *dlg, const char *s) { AH_DDVCARD_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_DDVCARD_DIALOG, dlg); assert(xdlg); free(xdlg->bankName); if (s) xdlg->bankName=strdup(s); else xdlg->bankName=NULL; } const char *AH_DdvCardDialog_GetUserName(const GWEN_DIALOG *dlg) { AH_DDVCARD_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_DDVCARD_DIALOG, dlg); assert(xdlg); return xdlg->userName; } void AH_DdvCardDialog_SetUserName(GWEN_DIALOG *dlg, const char *s) { AH_DDVCARD_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_DDVCARD_DIALOG, dlg); assert(xdlg); free(xdlg->userName); if (s) xdlg->userName=strdup(s); else xdlg->userName=NULL; } const char *AH_DdvCardDialog_GetUserId(const GWEN_DIALOG *dlg) { AH_DDVCARD_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_DDVCARD_DIALOG, dlg); assert(xdlg); return xdlg->userId; } void AH_DdvCardDialog_SetUserId(GWEN_DIALOG *dlg, const char *s) { AH_DDVCARD_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_DDVCARD_DIALOG, dlg); assert(xdlg); free(xdlg->userId); if (s) xdlg->userId=strdup(s); else xdlg->userId=NULL; } const char *AH_DdvCardDialog_GetCustomerId(const GWEN_DIALOG *dlg) { AH_DDVCARD_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_DDVCARD_DIALOG, dlg); assert(xdlg); return xdlg->customerId; } void AH_DdvCardDialog_SetCustomerId(GWEN_DIALOG *dlg, const char *s) { AH_DDVCARD_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_DDVCARD_DIALOG, dlg); assert(xdlg); free(xdlg->customerId); if (s) xdlg->customerId=strdup(s); else xdlg->customerId=NULL; } const char *AH_DdvCardDialog_GetUrl(const GWEN_DIALOG *dlg) { AH_DDVCARD_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_DDVCARD_DIALOG, dlg); assert(xdlg); return xdlg->url; } void AH_DdvCardDialog_SetUrl(GWEN_DIALOG *dlg, const char *s) { AH_DDVCARD_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_DDVCARD_DIALOG, dlg); assert(xdlg); free(xdlg->url); if (s) xdlg->url=strdup(s); else xdlg->url=NULL; } const char *AH_DdvCardDialog_GetPeerId(const GWEN_DIALOG *dlg) { AH_DDVCARD_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_DDVCARD_DIALOG, dlg); assert(xdlg); return xdlg->peerId; } void AH_DdvCardDialog_SetPeerId(GWEN_DIALOG *dlg, const char *s) { AH_DDVCARD_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_DDVCARD_DIALOG, dlg); assert(xdlg); free(xdlg->peerId); if (s) xdlg->peerId=strdup(s); else xdlg->peerId=NULL; } int AH_DdvCardDialog_GetHbciVersion(const GWEN_DIALOG *dlg) { AH_DDVCARD_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_DDVCARD_DIALOG, dlg); assert(xdlg); return xdlg->hbciVersion; } void AH_DdvCardDialog_SetHbciVersion(GWEN_DIALOG *dlg, int i) { AH_DDVCARD_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_DDVCARD_DIALOG, dlg); assert(xdlg); xdlg->hbciVersion=i; } uint32_t AH_DdvCardDialog_GetFlags(const GWEN_DIALOG *dlg) { AH_DDVCARD_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_DDVCARD_DIALOG, dlg); assert(xdlg); return xdlg->flags; } void AH_DdvCardDialog_SetFlags(GWEN_DIALOG *dlg, uint32_t fl) { AH_DDVCARD_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_DDVCARD_DIALOG, dlg); assert(xdlg); xdlg->flags=fl; } void AH_DdvCardDialog_AddFlags(GWEN_DIALOG *dlg, uint32_t fl) { AH_DDVCARD_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_DDVCARD_DIALOG, dlg); assert(xdlg); xdlg->flags&=~fl; } void AH_DdvCardDialog_SubFlags(GWEN_DIALOG *dlg, uint32_t fl) { AH_DDVCARD_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_DDVCARD_DIALOG, dlg); assert(xdlg); xdlg->flags&=~fl; } void AH_DdvCardDialog_Init(GWEN_DIALOG *dlg) { AH_DDVCARD_DIALOG *xdlg; GWEN_DB_NODE *dbPrefs; int i; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_DDVCARD_DIALOG, dlg); assert(xdlg); dbPrefs=GWEN_Dialog_GetPreferences(dlg); GWEN_Dialog_SetCharProperty(dlg, "", GWEN_DialogProperty_Title, 0, I18N("HBCI DDV-Card Setup Wizard"), 0); /* select first page */ GWEN_Dialog_SetIntProperty(dlg, "wiz_stack", GWEN_DialogProperty_Value, 0, 0, 0); /* setup intro page */ GWEN_Dialog_SetCharProperty(dlg, "wiz_begin_label", GWEN_DialogProperty_Title, 0, I18N("" "

This dialog assists you in setting up a DDV Chipcard User.

" "

Some chipcards contain user information. You can click the button below " "to read that information from the card.

" "" "This dialog assists you in setting up a DDV Chipcard User.\n" "Some chipcards contain user information. You can click the button below\n" "to read that information from the card."), 0); /* setup bank page */ GWEN_Dialog_SetCharProperty(dlg, "wiz_bank_label", GWEN_DialogProperty_Title, 0, I18N("" "

Please select the bank.

" "

AqBanking has an internal database which " "contains HBCI/FinTS information about many banks.

" "

If there is an entry for your bank this dialog will use the " "information from the database.

" "" "Please select the bank.\n" "AqBanking has an internal database which contains\n" "HBCI/FinTS information about many banks.\n" "If there is an entry for your bank this dialog will use the\n" "information from the database."), 0); /* setup user page */ GWEN_Dialog_SetCharProperty(dlg, "wiz_user_label", GWEN_DialogProperty_Title, 0, I18N("" "

For most banks the customer id must be the same as the user id.

" "

However, some banks actually use the customer id, so please look into " "the documentation provided by your bank to discover whether this is the " "case with your bank.

" "" "For most banks the customer id must be the same as the user id.\n" "However, some banks actually use the customer id, so please look into\n" "the documentation provided by your bank to discover whether this is the\n" "case with your bank."), 0); /* setup creation page */ GWEN_Dialog_SetCharProperty(dlg, "wiz_create_label", GWEN_DialogProperty_Title, 0, I18N("" "

We are now ready to create the user and retrieve the account list.

" "

Click the next button to proceed or abort to abort.

" "" "We are now ready to create the user and retrieve the account list.\n" "Click the NEXT button to proceed or ABORT to abort."), 0); /* setup extro page */ GWEN_Dialog_SetCharProperty(dlg, "wiz_end_label", GWEN_DialogProperty_Title, 0, I18N("The user has been successfully setup."), 0); GWEN_Dialog_SetIntProperty(dlg, "wiz_context_combo", GWEN_DialogProperty_ClearValues, 0, 0, 0); if (1) { const GWEN_CRYPT_TOKEN_CONTEXT *ctx; int i; i=1; ctx=GWEN_Crypt_Token_Context_List_First(xdlg->contextList); while (ctx) { char numbuf[64]; GWEN_BUFFER *tbuf; const char *s; tbuf=GWEN_Buffer_new(0, 256, 0, 1); snprintf(numbuf, sizeof(numbuf)-1, I18N("Context %d:"), i); numbuf[sizeof(numbuf)-1]=0; GWEN_Buffer_AppendString(tbuf, numbuf); s=GWEN_Crypt_Token_Context_GetServiceId(ctx); if (s && *s && strcasecmp(s, "20202020")!=0) GWEN_Buffer_AppendString(tbuf, s); else GWEN_Buffer_AppendString(tbuf, I18N("")); GWEN_Buffer_AppendString(tbuf, "-"); s=GWEN_Crypt_Token_Context_GetUserId(ctx); if (s && *s) GWEN_Buffer_AppendString(tbuf, s); else GWEN_Buffer_AppendString(tbuf, I18N("")); GWEN_Dialog_SetCharProperty(dlg, "wiz_context_combo", GWEN_DialogProperty_AddValue, 0, GWEN_Buffer_GetStart(tbuf), 0); GWEN_Buffer_free(tbuf); i++; ctx=GWEN_Crypt_Token_Context_List_Next(ctx); } } GWEN_Dialog_SetIntProperty(dlg, "wiz_context_combo", GWEN_DialogProperty_Value, 0, 0, 0); AH_DdvCardDialog_FromContext(dlg, 0); /* read width */ i=GWEN_DB_GetIntValue(dbPrefs, "dialog_width", 0, -1); if (i>=DIALOG_MINWIDTH) GWEN_Dialog_SetIntProperty(dlg, "", GWEN_DialogProperty_Width, 0, i, 0); /* read height */ i=GWEN_DB_GetIntValue(dbPrefs, "dialog_height", 0, -1); if (i>=DIALOG_MINHEIGHT) GWEN_Dialog_SetIntProperty(dlg, "", GWEN_DialogProperty_Height, 0, i, 0); /* disable next and previous buttons */ GWEN_Dialog_SetIntProperty(dlg, "wiz_prev_button", GWEN_DialogProperty_Enabled, 0, 0, 0); GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 1, 0); } void AH_DdvCardDialog_Fini(GWEN_DIALOG *dlg) { AH_DDVCARD_DIALOG *xdlg; int i; GWEN_DB_NODE *dbPrefs; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_DDVCARD_DIALOG, dlg); assert(xdlg); dbPrefs=GWEN_Dialog_GetPreferences(dlg); /* store dialog width */ i=GWEN_Dialog_GetIntProperty(dlg, "", GWEN_DialogProperty_Width, 0, -1); GWEN_DB_SetIntValue(dbPrefs, GWEN_DB_FLAGS_OVERWRITE_VARS, "dialog_width", i); /* store dialog height */ i=GWEN_Dialog_GetIntProperty(dlg, "", GWEN_DialogProperty_Height, 0, -1); GWEN_DB_SetIntValue(dbPrefs, GWEN_DB_FLAGS_OVERWRITE_VARS, "dialog_height", i); } int AH_DdvCardDialog_GetBankPageData(GWEN_DIALOG *dlg) { AH_DDVCARD_DIALOG *xdlg; const char *s; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_DDVCARD_DIALOG, dlg); assert(xdlg); s=GWEN_Dialog_GetCharProperty(dlg, "wiz_bankcode_edit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) AH_DdvCardDialog_SetBankCode(dlg, s); else { DBG_INFO(AQHBCI_LOGDOMAIN, "Missing bank code"); return GWEN_ERROR_NO_DATA; } s=GWEN_Dialog_GetCharProperty(dlg, "wiz_bankname_edit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) AH_DdvCardDialog_SetBankName(dlg, s); else AH_DdvCardDialog_SetBankName(dlg, NULL); s=GWEN_Dialog_GetCharProperty(dlg, "wiz_url_edit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) AH_DdvCardDialog_SetUrl(dlg, s); else { DBG_INFO(AQHBCI_LOGDOMAIN, "Missing URL"); return GWEN_ERROR_NO_DATA; } return 0; } int AH_DdvCardDialog_GetUserPageData(GWEN_DIALOG *dlg) { AH_DDVCARD_DIALOG *xdlg; const char *s; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_DDVCARD_DIALOG, dlg); assert(xdlg); s=GWEN_Dialog_GetCharProperty(dlg, "wiz_username_edit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) AH_DdvCardDialog_SetUserName(dlg, s); else { DBG_INFO(AQHBCI_LOGDOMAIN, "Missing user name"); return GWEN_ERROR_NO_DATA; } s=GWEN_Dialog_GetCharProperty(dlg, "wiz_userid_edit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) AH_DdvCardDialog_SetUserId(dlg, s); else { DBG_INFO(AQHBCI_LOGDOMAIN, "Missing user id"); return GWEN_ERROR_NO_DATA; } s=GWEN_Dialog_GetCharProperty(dlg, "wiz_customerid_edit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) AH_DdvCardDialog_SetCustomerId(dlg, s); else AH_DdvCardDialog_SetCustomerId(dlg, NULL); return 0; } int AH_DdvCardDialog_EnterPage(GWEN_DIALOG *dlg, int page, int forwards) { AH_DDVCARD_DIALOG *xdlg; int rv; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_DDVCARD_DIALOG, dlg); assert(xdlg); switch (page) { case PAGE_BEGIN: GWEN_Dialog_SetIntProperty(dlg, "wiz_prev_button", GWEN_DialogProperty_Enabled, 0, 0, 0); GWEN_Dialog_SetIntProperty(dlg, "wiz_stack", GWEN_DialogProperty_Value, 0, page, 0); return GWEN_DialogEvent_ResultHandled; case PAGE_BANK: GWEN_Dialog_SetIntProperty(dlg, "wiz_prev_button", GWEN_DialogProperty_Enabled, 0, 1, 0); rv=AH_DdvCardDialog_GetBankPageData(dlg); if (rv<0) GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 0, 0); else GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 1, 0); GWEN_Dialog_SetIntProperty(dlg, "wiz_stack", GWEN_DialogProperty_Value, 0, page, 0); return GWEN_DialogEvent_ResultHandled; case PAGE_USER: GWEN_Dialog_SetIntProperty(dlg, "wiz_prev_button", GWEN_DialogProperty_Enabled, 0, 1, 0); rv=AH_DdvCardDialog_GetUserPageData(dlg); if (rv<0) GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 0, 0); else GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 1, 0); GWEN_Dialog_SetIntProperty(dlg, "wiz_stack", GWEN_DialogProperty_Value, 0, page, 0); return GWEN_DialogEvent_ResultHandled; case PAGE_CREATE: if (!forwards) GWEN_Dialog_SetCharProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Title, 0, I18N("Next"), 0); GWEN_Dialog_SetIntProperty(dlg, "wiz_stack", GWEN_DialogProperty_Value, 0, page, 0); return GWEN_DialogEvent_ResultHandled; case PAGE_END: GWEN_Dialog_SetIntProperty(dlg, "wiz_stack", GWEN_DialogProperty_Value, 0, page, 0); GWEN_Dialog_SetCharProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Title, 0, I18N("Finish"), 0); GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 1, 0); GWEN_Dialog_SetIntProperty(dlg, "wiz_prev_button", GWEN_DialogProperty_Enabled, 0, 0, 0); GWEN_Dialog_SetIntProperty(dlg, "wiz_abort_button", GWEN_DialogProperty_Enabled, 0, 0, 0); return GWEN_DialogEvent_ResultHandled; default: return GWEN_DialogEvent_ResultHandled; } return GWEN_DialogEvent_ResultHandled; } int AH_DdvCardDialog_DoIt(GWEN_DIALOG *dlg) { AH_DDVCARD_DIALOG *xdlg; AB_USER *u; GWEN_URL *url; int rv; uint32_t pid; AB_IMEXPORTER_CONTEXT *ctx; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_DDVCARD_DIALOG, dlg); assert(xdlg); u=AB_Provider_CreateUserObject(xdlg->provider); if (u==NULL) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not create user, maybe backend missing?"); GWEN_Gui_ShowError(I18N("Error"), "%s", I18N("Could not create user, maybe some plugins are not installed?")); return GWEN_DialogEvent_ResultHandled; } /* generic setup */ AB_User_SetUserName(u, xdlg->userName); AB_User_SetUserId(u, xdlg->userId); if (xdlg->customerId && *(xdlg->customerId)) AB_User_SetCustomerId(u, xdlg->customerId); else AB_User_SetCustomerId(u, xdlg->userId); AB_User_SetCountry(u, "de"); AB_User_SetBankCode(u, xdlg->bankCode); /* HBCI setup */ AH_User_SetTokenType(u, "ddvcard"); AH_User_SetTokenName(u, GWEN_Crypt_Token_GetTokenName(xdlg->cryptToken)); AH_User_SetCryptMode(u, AH_CryptMode_Ddv); AH_User_SetTokenContextId(u, 1); AH_User_SetStatus(u, AH_UserStatusEnabled); url=GWEN_Url_fromString(xdlg->url); assert(url); GWEN_Url_SetProtocol(url, "hbci"); if (GWEN_Url_GetPort(url)==0) GWEN_Url_SetPort(url, 3000); AH_User_SetServerUrl(u, url); GWEN_Url_free(url); AH_User_SetHbciVersion(u, xdlg->hbciVersion); rv=AB_Provider_AddUser(xdlg->provider, u); if (rv<0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not add user (%d)", rv); AB_User_free(u); GWEN_Gui_ShowError(I18N("Error"), I18N("Could not add user (%d)"), rv); return GWEN_DialogEvent_ResultHandled; } pid=GWEN_Gui_ProgressStart(GWEN_GUI_PROGRESS_DELAY | GWEN_GUI_PROGRESS_ALLOW_EMBED | GWEN_GUI_PROGRESS_SHOW_PROGRESS | GWEN_GUI_PROGRESS_SHOW_ABORT, I18N("Setting Up DDV User"), I18N("The list of accounts will be retrieved."), 1, 0); /* lock new user */ rv=AB_Provider_BeginExclUseUser(xdlg->provider, u); if (rv<0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not lock user (%d)", rv); GWEN_Gui_ProgressLog2(pid, GWEN_LoggerLevel_Error, I18N("Unable to lock users (%d)"), rv); AB_Provider_DeleteUser(xdlg->provider, AB_User_GetUniqueId(u)); GWEN_Gui_ProgressEnd(pid); return GWEN_DialogEvent_ResultHandled; } /* get account list */ GWEN_Gui_ProgressLog(pid, GWEN_LoggerLevel_Notice, I18N("Retrieving account list")); ctx=AB_ImExporterContext_new(); rv=AH_Provider_GetAccounts(xdlg->provider, u, ctx, 0, 1, 0); if (rv<0) { AB_Provider_EndExclUseUser(xdlg->provider, u, 1); AB_ImExporterContext_free(ctx); DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); AB_Provider_DeleteUser(xdlg->provider, AB_User_GetUniqueId(u)); GWEN_Gui_ProgressEnd(pid); return GWEN_DialogEvent_ResultHandled; } AB_ImExporterContext_free(ctx); rv=GWEN_Gui_ProgressAdvance(pid, GWEN_GUI_PROGRESS_ONE); if (rv==GWEN_ERROR_USER_ABORTED) { AB_Provider_EndExclUseUser(xdlg->provider, u, 1); DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); AB_Provider_DeleteUser(xdlg->provider, AB_User_GetUniqueId(u)); GWEN_Gui_ProgressLog(pid, GWEN_LoggerLevel_Error, I18N("Aborted by user.")); GWEN_Gui_ProgressEnd(pid); return GWEN_DialogEvent_ResultHandled; } /* unlock user */ rv=AB_Provider_EndExclUseUser(xdlg->provider, u, 0); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "Could not unlock customer [%s] (%d)", AB_User_GetCustomerId(u), rv); GWEN_Gui_ProgressLog2(pid, GWEN_LoggerLevel_Error, I18N("Could not unlock user %s (%d)"), AB_User_GetUserId(u), rv); AB_Provider_EndExclUseUser(xdlg->provider, u, 1); AB_Provider_DeleteUser(xdlg->provider, AB_User_GetUniqueId(u)); GWEN_Gui_ProgressEnd(pid); return GWEN_DialogEvent_ResultHandled; } GWEN_Dialog_SetCharProperty(dlg, "wiz_end_label", GWEN_DialogProperty_Title, 0, I18N("The user has been successfully setup."), 0); GWEN_Gui_ProgressEnd(pid); AH_DdvCardDialog_EnterPage(dlg, PAGE_END, 1); xdlg->user=u; return GWEN_DialogEvent_ResultHandled; } int AH_DdvCardDialog_Next(GWEN_DIALOG *dlg) { AH_DDVCARD_DIALOG *xdlg; int page; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_DDVCARD_DIALOG, dlg); assert(xdlg); page=GWEN_Dialog_GetIntProperty(dlg, "wiz_stack", GWEN_DialogProperty_Value, 0, -1); if (page==PAGE_CREATE) { return AH_DdvCardDialog_DoIt(dlg); } else if (pagePAGE_BEGIN) { page--; return AH_DdvCardDialog_EnterPage(dlg, page, 0); } return GWEN_DialogEvent_ResultHandled; } int AH_DdvCardDialog_HandleActivatedBankCode(GWEN_DIALOG *dlg) { AH_DDVCARD_DIALOG *xdlg; GWEN_DIALOG *dlg2; int rv; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_DDVCARD_DIALOG, dlg); assert(xdlg); dlg2=AB_SelectBankInfoDialog_new(xdlg->banking, "de", NULL); if (dlg2==NULL) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not create dialog"); GWEN_Gui_ShowError(I18N("Error"), "%s", I18N("Could not create dialog, maybe an installation error?")); return GWEN_DialogEvent_ResultHandled; } rv=GWEN_Gui_ExecDialog(dlg2, 0); if (rv==0) { /* rejected */ GWEN_Dialog_free(dlg2); return GWEN_DialogEvent_ResultHandled; } else { const AB_BANKINFO *bi; bi=AB_SelectBankInfoDialog_GetSelectedBankInfo(dlg2); if (bi) { const char *s; AB_BANKINFO_SERVICE *sv; s=AB_BankInfo_GetBankId(bi); GWEN_Dialog_SetCharProperty(dlg, "wiz_bankcode_edit", GWEN_DialogProperty_Value, 0, (s && *s)?s:"", 0); s=AB_BankInfo_GetBankName(bi); GWEN_Dialog_SetCharProperty(dlg, "wiz_bankname_edit", GWEN_DialogProperty_Value, 0, (s && *s)?s:"", 0); sv=AB_BankInfoService_List_First(AB_BankInfo_GetServices(bi)); while (sv) { const char *s; s=AB_BankInfoService_GetType(sv); if (s && *s && strcasecmp(s, "HBCI")==0) { s=AB_BankInfoService_GetMode(sv); if (s && *s && strcasecmp(s, "ddv")==0) break; } sv=AB_BankInfoService_List_Next(sv); } if (sv) { /* DDV service found */ s=AB_BankInfoService_GetAddress(sv); GWEN_Dialog_SetCharProperty(dlg, "wiz_url_edit", GWEN_DialogProperty_Value, 0, (s && *s)?s:"", 0); s=AB_BankInfoService_GetPversion(sv); if (s && *s) { if (strcasecmp(s, "2.01")==0 || strcasecmp(s, "2")==0) xdlg->hbciVersion=201; else if (strcasecmp(s, "2.10")==0 || strcasecmp(s, "2.1")==0) xdlg->hbciVersion=210; else if (strcasecmp(s, "2.20")==0 || strcasecmp(s, "2.2")==0) xdlg->hbciVersion=220; else if (strcasecmp(s, "3.00")==0 || strcasecmp(s, "3.0")==0 || strcasecmp(s, "3")==0) xdlg->hbciVersion=300; else if (strcasecmp(s, "4.00")==0 || strcasecmp(s, "4.0")==0 || strcasecmp(s, "4")==0) xdlg->hbciVersion=400; } } } } GWEN_Dialog_free(dlg2); if (AH_DdvCardDialog_GetBankPageData(dlg)<0) GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 0, 0); else GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 1, 0); return GWEN_DialogEvent_ResultHandled; } int AH_DdvCardDialog_HandleActivatedSpecial(GWEN_DIALOG *dlg) { AH_DDVCARD_DIALOG *xdlg; GWEN_DIALOG *dlg2; int rv; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_DDVCARD_DIALOG, dlg); assert(xdlg); dlg2=AH_DdvCardSpecialDialog_new(xdlg->provider); if (dlg2==NULL) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not create dialog"); GWEN_Gui_ShowError(I18N("Error"), "%s", I18N("Could not create dialog, maybe an installation error?")); return GWEN_DialogEvent_ResultHandled; } AH_DdvCardSpecialDialog_SetHbciVersion(dlg2, xdlg->hbciVersion); AH_DdvCardSpecialDialog_SetFlags(dlg2, xdlg->flags); rv=GWEN_Gui_ExecDialog(dlg2, 0); if (rv==0) { /* rejected */ GWEN_Dialog_free(dlg2); return GWEN_DialogEvent_ResultHandled; } else { xdlg->hbciVersion=AH_DdvCardSpecialDialog_GetHbciVersion(dlg2); xdlg->flags=AH_DdvCardSpecialDialog_GetFlags(dlg2); } GWEN_Dialog_free(dlg2); return GWEN_DialogEvent_ResultHandled; } int AH_DdvCardDialog_FromContext(GWEN_DIALOG *dlg, int i) { AH_DDVCARD_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_DDVCARD_DIALOG, dlg); assert(xdlg); if (i>=0) { GWEN_CRYPT_TOKEN_CONTEXT *ctx; ctx=GWEN_Crypt_Token_Context_List_First(xdlg->contextList); while (ctx && i--) ctx=GWEN_Crypt_Token_Context_List_Next(ctx); if (ctx) { const char *s; s=GWEN_Crypt_Token_Context_GetServiceId(ctx); if (s && strcasecmp(s, "20202020")==0) s=NULL; GWEN_Dialog_SetCharProperty(dlg, "wiz_bankcode_edit", GWEN_DialogProperty_Value, 0, (s && *s)?s:"", 0); s=GWEN_Crypt_Token_Context_GetAddress(ctx); GWEN_Dialog_SetCharProperty(dlg, "wiz_url_edit", GWEN_DialogProperty_Value, 0, (s && *s)?s:"", 0); s=GWEN_Crypt_Token_Context_GetUserId(ctx); GWEN_Dialog_SetCharProperty(dlg, "wiz_userid_edit", GWEN_DialogProperty_Value, 0, (s && *s)?s:"", 0); GWEN_Dialog_SetCharProperty(dlg, "wiz_customerid_edit", GWEN_DialogProperty_Value, 0, (s && *s)?s:"", 0); } } return GWEN_DialogEvent_ResultHandled; } int AH_DdvCardDialog_HandleActivatedContext(GWEN_DIALOG *dlg) { int i; i=GWEN_Dialog_GetIntProperty(dlg, "wiz_context_combo", GWEN_DialogProperty_Value, 0, -1); if (i>=0) AH_DdvCardDialog_FromContext(dlg, i); return GWEN_DialogEvent_ResultHandled; } int AH_DdvCardDialog_HandleActivated(GWEN_DIALOG *dlg, const char *sender) { if (strcasecmp(sender, "wiz_bankcode_button")==0) return AH_DdvCardDialog_HandleActivatedBankCode(dlg); else if (strcasecmp(sender, "wiz_prev_button")==0) return AH_DdvCardDialog_Previous(dlg); else if (strcasecmp(sender, "wiz_next_button")==0) return AH_DdvCardDialog_Next(dlg); else if (strcasecmp(sender, "wiz_abort_button")==0) return GWEN_DialogEvent_ResultReject; else if (strcasecmp(sender, "wiz_special_button")==0) return AH_DdvCardDialog_HandleActivatedSpecial(dlg); else if (strcasecmp(sender, "wiz_help_button")==0) { /* TODO: open a help dialog */ } else if (strcasecmp(sender, "wiz_context_combo")==0) return AH_DdvCardDialog_HandleActivatedContext(dlg); return GWEN_DialogEvent_ResultNotHandled; } int AH_DdvCardDialog_HandleValueChanged(GWEN_DIALOG *dlg, const char *sender) { if (strcasecmp(sender, "wiz_bankcode_edit")==0 || strcasecmp(sender, "wiz_url_edit")==0 || strcasecmp(sender, "wiz_username_edit")==0 || strcasecmp(sender, "wiz_userid_edit")==0 || strcasecmp(sender, "wiz_customerid_edit")==0) { int rv; if (GWEN_Dialog_GetIntProperty(dlg, "wiz_stack", GWEN_DialogProperty_Value, 0, -1)==PAGE_BANK) { rv=AH_DdvCardDialog_GetBankPageData(dlg); if (rv<0) GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 0, 0); else GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 1, 0); } else if (GWEN_Dialog_GetIntProperty(dlg, "wiz_stack", GWEN_DialogProperty_Value, 0, -1)==PAGE_USER) { rv=AH_DdvCardDialog_GetUserPageData(dlg); if (rv<0) GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 0, 0); else GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 1, 0); } return GWEN_DialogEvent_ResultHandled; } return GWEN_DialogEvent_ResultNotHandled; } int GWENHYWFAR_CB AH_DdvCardDialog_SignalHandler(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender) { AH_DDVCARD_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_DDVCARD_DIALOG, dlg); assert(xdlg); switch (t) { case GWEN_DialogEvent_TypeInit: AH_DdvCardDialog_Init(dlg); return GWEN_DialogEvent_ResultHandled;; case GWEN_DialogEvent_TypeFini: AH_DdvCardDialog_Fini(dlg); return GWEN_DialogEvent_ResultHandled;; case GWEN_DialogEvent_TypeValueChanged: return AH_DdvCardDialog_HandleValueChanged(dlg, sender); case GWEN_DialogEvent_TypeActivated: return AH_DdvCardDialog_HandleActivated(dlg, sender); case GWEN_DialogEvent_TypeEnabled: case GWEN_DialogEvent_TypeDisabled: case GWEN_DialogEvent_TypeClose: case GWEN_DialogEvent_TypeLast: return GWEN_DialogEvent_ResultNotHandled; default: break; } return GWEN_DialogEvent_ResultNotHandled; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/dialogs/w_hbciversioncombo.c0000664000175000017500000000350014625171605024260 00000000000000/*************************************************************************** begin : Wed May 01 2024 copyright : (C) 2024 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "w_hbciversioncombo.h" #include "aqbanking/i18n_l.h" void AH_Widget_HbciVersionComboSetup(GWEN_DIALOG *dlg, const char *widgetName) { const GWEN_DIALOG_PROPERTY addValue=GWEN_DialogProperty_AddValue; const GWEN_DIALOG_PROPERTY clrValue=GWEN_DialogProperty_ClearValues; GWEN_Dialog_SetIntProperty(dlg, widgetName, clrValue, 0, 0, 0); GWEN_Dialog_SetCharProperty(dlg, widgetName, addValue, 0, I18N("-- select --"), 0); GWEN_Dialog_SetCharProperty(dlg, widgetName, addValue, 0, "2.20", 0); GWEN_Dialog_SetCharProperty(dlg, widgetName, addValue, 0, "3.0", 0); } void AH_Widget_HbciVersionComboSetCurrent(GWEN_DIALOG *dlg, const char *widgetName, int v) { const GWEN_DIALOG_PROPERTY setValue=GWEN_DialogProperty_Value; switch (v) { case 220: GWEN_Dialog_SetIntProperty(dlg, widgetName, setValue, 0, 1, 0); break; case 300: GWEN_Dialog_SetIntProperty(dlg, widgetName, setValue, 0, 2, 0); break; default: GWEN_Dialog_SetIntProperty(dlg, widgetName, setValue, 0, 2, 0); break; } } int AH_Widget_HbciVersionComboGetCurrent(GWEN_DIALOG *dlg, const char *widgetName) { int idx; idx=GWEN_Dialog_GetIntProperty(dlg, widgetName, GWEN_DialogProperty_Value, 0, -1); switch(idx) { case 1: return 220; case 2: return 300; default: return 300; } } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/dialogs/dlg_editaccount_l.h0000664000175000017500000000156114043610745024051 00000000000000/*************************************************************************** begin : Thu Apr 15 2010 copyright : (C) 2018 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQHBCI_EDITACCOUNT_DIALOG_L_H #define AQHBCI_EDITACCOUNT_DIALOG_L_H #include #include #include #include #ifdef __cplusplus extern "C" { #endif GWEN_DIALOG *AH_EditAccountDialog_new(AB_PROVIDER *pro, AB_ACCOUNT *a, int doLock); #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/dialogs/w_rdhversioncombo.h0000664000175000017500000000167214625171605024145 00000000000000/*************************************************************************** begin : Wed May 01 2024 copyright : (C) 2024 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQHBCI_WIDGET_RDHVERSIONCOMBO_H #define AQHBCI_WIDGET_RDHVERSIONCOMBO_H #include void AH_Widget_RdhVersionComboSetup(GWEN_DIALOG *dlg, const char *widgetName); void AH_Widget_RdhVersionComboSetCurrent(GWEN_DIALOG *dlg, const char *widgetName, int v); /** * Return selected RDH/RAH version (bits 0-7) and crypt mode (bit 8-15) */ int AH_Widget_RdhVersionComboGetCurrent(GWEN_DIALOG *dlg, const char *widgetName); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/dialogs/dlg_newkeyfile.dlg0000664000175000017500000001056714043610745023723 00000000000000 aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/dialogs/dlg_zkacard_p.h0000664000175000017500000000271114043610745023170 00000000000000/*************************************************************************** begin : Tue Apr 20 2010 copyright : (C) 2018 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQHBCI_DLG_ZKACARD_P_H #define AQHBCI_DLG_ZKACARD_P_H #include "dlg_zkacard_l.h" #include typedef struct AH_ZKACARD_DIALOG AH_ZKACARD_DIALOG; struct AH_ZKACARD_DIALOG { AB_BANKING *banking; AB_PROVIDER *provider; char *bankCode; char *bankName; char *userName; char *userId; char *customerId; char *url; char *peerId; int hbciVersion; int rdhVersion; int cryptMode; int contextId; /* RDH7 */ int keyStatus; uint32_t flags; GWEN_CRYPT_TOKEN *cryptToken; GWEN_CRYPT_TOKEN_CONTEXT_LIST *contextList; AB_USER *user; }; static void GWENHYWFAR_CB AH_ZkaCardDialog_FreeData(void *bp, void *p); static int GWENHYWFAR_CB AH_ZkaCardDialog_SignalHandler(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender); static int AH_ZkaCardDialog_FromContext(GWEN_DIALOG *dlg, int i); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/dialogs/dlg_ddvcard_l.h0000664000175000017500000000445014043610745023156 00000000000000/*************************************************************************** begin : Tue Apr 20 2010 copyright : (C) 2018 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQHBCI_DLG_DDVCARD_H #define AQHBCI_DLG_DDVCARD_H #include #include #include #include #include #include #ifdef __cplusplus extern "C" { #endif GWEN_DIALOG *AH_DdvCardDialog_new(AB_PROVIDER *pro, GWEN_CRYPT_TOKEN *ct); GWEN_CRYPT_TOKEN *AH_DdvCardDialog_GetCryptToken(const GWEN_DIALOG *dlg); const char *AH_DdvCardDialog_GetPeerId(const GWEN_DIALOG *dlg); void AH_DdvCardDialog_SetPeerId(GWEN_DIALOG *dlg, const char *s); const char *AH_DdvCardDialog_GetBankCode(const GWEN_DIALOG *dlg); void AH_DdvCardDialog_SetBankCode(GWEN_DIALOG *dlg, const char *s); const char *AH_DdvCardDialog_GetBankName(const GWEN_DIALOG *dlg); void AH_DdvCardDialog_SetBankName(GWEN_DIALOG *dlg, const char *s); const char *AH_DdvCardDialog_GetUserName(const GWEN_DIALOG *dlg); void AH_DdvCardDialog_SetUserName(GWEN_DIALOG *dlg, const char *s); const char *AH_DdvCardDialog_GetUserId(const GWEN_DIALOG *dlg); void AH_DdvCardDialog_SetUserId(GWEN_DIALOG *dlg, const char *s); const char *AH_DdvCardDialog_GetCustomerId(const GWEN_DIALOG *dlg); void AH_DdvCardDialog_SetCustomerId(GWEN_DIALOG *dlg, const char *s); const char *AH_DdvCardDialog_GetUrl(const GWEN_DIALOG *dlg); void AH_DdvCardDialog_SetUrl(GWEN_DIALOG *dlg, const char *s); int AH_DdvCardDialog_GetHbciVersion(const GWEN_DIALOG *dlg); void AH_DdvCardDialog_SetHbciVersion(GWEN_DIALOG *dlg, int i); uint32_t AH_DdvCardDialog_GetFlags(const GWEN_DIALOG *dlg); void AH_DdvCardDialog_SetFlags(GWEN_DIALOG *dlg, uint32_t fl); void AH_DdvCardDialog_AddFlags(GWEN_DIALOG *dlg, uint32_t fl); void AH_DdvCardDialog_SubFlags(GWEN_DIALOG *dlg, uint32_t fl); AB_USER *AH_DdvCardDialog_GetUser(const GWEN_DIALOG *dlg); #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/dialogs/dlg_pintan_tanmode_l.h0000664000175000017500000000162014043610745024543 00000000000000/*************************************************************************** begin : Tue Sep 17 2019 copyright : (C) 2019 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQHBCI_DLG_PINTAN_TANMODE_L_H #define AQHBCI_DLG_PINTAN_TANMODE_L_H #include #include #include #include #include #ifdef __cplusplus extern "C" { #endif GWEN_DIALOG *AH_PinTan_TanModeDialog_new(AB_PROVIDER *pro, AB_USER *u, int doLock); #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/dialogs/dlg_edituserddv.c0000664000175000017500000003445214546575647023601 00000000000000/*************************************************************************** begin : Thu Jul 08 2010 copyright : (C) 2018 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "dlg_edituserddv_p.h" #include "aqhbci/banking/provider_l.h" #include "aqhbci/banking/user.h" #include "aqhbci/banking/provider.h" #include "aqhbci/banking/provider_online.h" #include "aqbanking/i18n_l.h" #include #include #include #include #include #include #include #include #include #define DIALOG_MINWIDTH 200 #define DIALOG_MINHEIGHT 200 GWEN_INHERIT(GWEN_DIALOG, AH_EDIT_USER_DDV_DIALOG) GWEN_DIALOG *AH_EditUserDdvDialog_new(AB_PROVIDER *pro, AB_USER *u, int doLock) { GWEN_DIALOG *dlg; AH_EDIT_USER_DDV_DIALOG *xdlg; GWEN_BUFFER *fbuf; int rv; dlg=GWEN_Dialog_new("ah_edit_user_ddv"); GWEN_NEW_OBJECT(AH_EDIT_USER_DDV_DIALOG, xdlg); GWEN_INHERIT_SETDATA(GWEN_DIALOG, AH_EDIT_USER_DDV_DIALOG, dlg, xdlg, AH_EditUserDdvDialog_FreeData); GWEN_Dialog_SetSignalHandler(dlg, AH_EditUserDdvDialog_SignalHandler); /* get path of dialog description file */ fbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_PathManager_FindFile(AB_PM_LIBNAME, AB_PM_DATADIR, "aqbanking/backends/aqhbci/dialogs/dlg_edituserddv.dlg", fbuf); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "Dialog description file not found (%d).", rv); GWEN_Buffer_free(fbuf); GWEN_Dialog_free(dlg); return NULL; } /* read dialog from dialog description file */ rv=GWEN_Dialog_ReadXmlFile(dlg, GWEN_Buffer_GetStart(fbuf)); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d).", rv); GWEN_Buffer_free(fbuf); GWEN_Dialog_free(dlg); return NULL; } GWEN_Buffer_free(fbuf); /* preset */ xdlg->provider=pro; xdlg->banking=AB_Provider_GetBanking(pro); xdlg->user=u; xdlg->doLock=doLock; /* done */ return dlg; } void GWENHYWFAR_CB AH_EditUserDdvDialog_FreeData(void *bp, void *p) { AH_EDIT_USER_DDV_DIALOG *xdlg; xdlg=(AH_EDIT_USER_DDV_DIALOG *) p; GWEN_FREE_OBJECT(xdlg); } void AH_EditUserDdvDialog_Init(GWEN_DIALOG *dlg) { AH_EDIT_USER_DDV_DIALOG *xdlg; GWEN_DB_NODE *dbPrefs; int i; const char *s; const GWEN_URL *gu; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_EDIT_USER_DDV_DIALOG, dlg); assert(xdlg); dbPrefs=GWEN_Dialog_GetPreferences(dlg); /* init */ GWEN_Dialog_SetCharProperty(dlg, "", GWEN_DialogProperty_Title, 0, I18N("Edit User"), 0); s=AB_User_GetUserName(xdlg->user); GWEN_Dialog_SetCharProperty(dlg, "userNameEdit", GWEN_DialogProperty_Value, 0, s, 0); s=AB_User_GetBankCode(xdlg->user); GWEN_Dialog_SetCharProperty(dlg, "bankCodeEdit", GWEN_DialogProperty_Value, 0, s, 0); gu=AH_User_GetServerUrl(xdlg->user); if (gu) { GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Url_toString(gu, tbuf); GWEN_Dialog_SetCharProperty(dlg, "urlEdit", GWEN_DialogProperty_Value, 0, GWEN_Buffer_GetStart(tbuf), 0); GWEN_Buffer_free(tbuf); } s=AB_User_GetUserId(xdlg->user); GWEN_Dialog_SetCharProperty(dlg, "userIdEdit", GWEN_DialogProperty_Value, 0, s, 0); s=AB_User_GetCustomerId(xdlg->user); GWEN_Dialog_SetCharProperty(dlg, "customerIdEdit", GWEN_DialogProperty_Value, 0, s, 0); GWEN_Dialog_SetCharProperty(dlg, "hbciVersionCombo", GWEN_DialogProperty_AddValue, 0, "2.01", 0); GWEN_Dialog_SetCharProperty(dlg, "hbciVersionCombo", GWEN_DialogProperty_AddValue, 0, "2.10", 0); GWEN_Dialog_SetCharProperty(dlg, "hbciVersionCombo", GWEN_DialogProperty_AddValue, 0, "2.20", 0); GWEN_Dialog_SetCharProperty(dlg, "hbciVersionCombo", GWEN_DialogProperty_AddValue, 0, "3.0", 0); /* toGui */ switch (AH_User_GetHbciVersion(xdlg->user)) { case 201: GWEN_Dialog_SetIntProperty(dlg, "hbciVersionCombo", GWEN_DialogProperty_Value, 0, 0, 0); break; case 210: GWEN_Dialog_SetIntProperty(dlg, "hbciVersionCombo", GWEN_DialogProperty_Value, 0, 1, 0); break; case 220: GWEN_Dialog_SetIntProperty(dlg, "hbciVersionCombo", GWEN_DialogProperty_Value, 0, 2, 0); break; case 300: GWEN_Dialog_SetIntProperty(dlg, "hbciVersionCombo", GWEN_DialogProperty_Value, 0, 3, 0); break; default: break; } /* read width */ i=GWEN_DB_GetIntValue(dbPrefs, "dialog_width", 0, -1); if (i>=DIALOG_MINWIDTH) GWEN_Dialog_SetIntProperty(dlg, "", GWEN_DialogProperty_Width, 0, i, 0); /* read height */ i=GWEN_DB_GetIntValue(dbPrefs, "dialog_height", 0, -1); if (i>=DIALOG_MINHEIGHT) GWEN_Dialog_SetIntProperty(dlg, "", GWEN_DialogProperty_Height, 0, i, 0); } static void removeAllSpaces(uint8_t *s) { uint8_t *d; d=s; while (*s) { if (*s>33) *(d++)=*s; s++; } *d=0; } int AH_EditUserDdvDialog_fromGui(GWEN_DIALOG *dlg, AB_USER *u, int quiet) { AH_EDIT_USER_DDV_DIALOG *xdlg; const char *s; int i; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_EDIT_USER_DDV_DIALOG, dlg); assert(xdlg); /* fromGui */ s=GWEN_Dialog_GetCharProperty(dlg, "userNameEdit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) { GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(tbuf, s); GWEN_Text_CondenseBuffer(tbuf); if (u) AB_User_SetUserName(u, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } s=GWEN_Dialog_GetCharProperty(dlg, "bankCodeEdit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) { GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(tbuf, s); GWEN_Text_CondenseBuffer(tbuf); removeAllSpaces((uint8_t *)GWEN_Buffer_GetStart(tbuf)); if (u) AB_User_SetBankCode(u, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } s=GWEN_Dialog_GetCharProperty(dlg, "urlEdit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) { GWEN_BUFFER *tbuf; GWEN_URL *gu; tbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(tbuf, s); GWEN_Text_CondenseBuffer(tbuf); removeAllSpaces((uint8_t *)GWEN_Buffer_GetStart(tbuf)); gu=GWEN_Url_fromString(GWEN_Buffer_GetStart(tbuf)); if (gu==NULL) { if (!quiet) { GWEN_Gui_ShowError(I18N("Error"), "%s", I18N("Invalid URL")); } GWEN_Buffer_free(tbuf); return GWEN_ERROR_BAD_DATA; } /* set port to 3000 if not set */ if (GWEN_Url_GetPort(gu)==0) GWEN_Url_SetPort(gu, 3000); if (u) AH_User_SetServerUrl(u, gu); GWEN_Url_free(gu); GWEN_Buffer_free(tbuf); } s=GWEN_Dialog_GetCharProperty(dlg, "userIdEdit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) { GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(tbuf, s); GWEN_Text_CondenseBuffer(tbuf); if (u) AB_User_SetUserId(u, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } s=GWEN_Dialog_GetCharProperty(dlg, "customerIdEdit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) { GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(tbuf, s); GWEN_Text_CondenseBuffer(tbuf); if (u) AB_User_SetCustomerId(u, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } /* get country */ if (u) AB_User_SetCountry(u, "de"); i=GWEN_Dialog_GetIntProperty(dlg, "hbciVersionCombo", GWEN_DialogProperty_Value, 0, -1); switch (i) { case 0: AH_User_SetHbciVersion(xdlg->user, 201); break; case 1: AH_User_SetHbciVersion(xdlg->user, 210); break; case 2: AH_User_SetHbciVersion(xdlg->user, 220); break; default: case 3: AH_User_SetHbciVersion(xdlg->user, 300); break; } return 0; } void AH_EditUserDdvDialog_Fini(GWEN_DIALOG *dlg) { AH_EDIT_USER_DDV_DIALOG *xdlg; int i; GWEN_DB_NODE *dbPrefs; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_EDIT_USER_DDV_DIALOG, dlg); assert(xdlg); dbPrefs=GWEN_Dialog_GetPreferences(dlg); /* store dialog width */ i=GWEN_Dialog_GetIntProperty(dlg, "", GWEN_DialogProperty_Width, 0, -1); GWEN_DB_SetIntValue(dbPrefs, GWEN_DB_FLAGS_OVERWRITE_VARS, "dialog_width", i); /* store dialog height */ i=GWEN_Dialog_GetIntProperty(dlg, "", GWEN_DialogProperty_Height, 0, -1); GWEN_DB_SetIntValue(dbPrefs, GWEN_DB_FLAGS_OVERWRITE_VARS, "dialog_height", i); } int AH_EditUserDdvDialog_HandleActivatedBankCode(GWEN_DIALOG *dlg) { AH_EDIT_USER_DDV_DIALOG *xdlg; GWEN_DIALOG *dlg2; int rv; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_EDIT_USER_DDV_DIALOG, dlg); assert(xdlg); dlg2=AB_SelectBankInfoDialog_new(xdlg->banking, "de", NULL); if (dlg2==NULL) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not create dialog"); GWEN_Gui_ShowError(I18N("Error"), "%s", I18N("Could create dialog, maybe incomplete installation?")); return GWEN_DialogEvent_ResultHandled; } rv=GWEN_Gui_ExecDialog(dlg2, 0); if (rv==0) { /* rejected */ GWEN_Dialog_free(dlg2); return GWEN_DialogEvent_ResultHandled; } else { const AB_BANKINFO *bi; bi=AB_SelectBankInfoDialog_GetSelectedBankInfo(dlg2); if (bi) { const char *s; s=AB_BankInfo_GetBankId(bi); GWEN_Dialog_SetCharProperty(dlg, "bankCodeEdit", GWEN_DialogProperty_Value, 0, (s && *s)?s:"", 0); } } GWEN_Dialog_free(dlg2); return GWEN_DialogEvent_ResultHandled; } int AH_EditUserDdvDialog_HandleActivatedOk(GWEN_DIALOG *dlg) { AH_EDIT_USER_DDV_DIALOG *xdlg; int rv; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_EDIT_USER_DDV_DIALOG, dlg); assert(xdlg); rv=AH_EditUserDdvDialog_fromGui(dlg, NULL, 0); if (rv<0) { return GWEN_DialogEvent_ResultHandled; } if (xdlg->doLock) { int rv; rv=AB_Provider_BeginExclUseUser(xdlg->provider, xdlg->user); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); GWEN_Gui_MessageBox(GWEN_GUI_MSG_FLAGS_SEVERITY_NORMAL | GWEN_GUI_MSG_FLAGS_TYPE_ERROR | GWEN_GUI_MSG_FLAGS_CONFIRM_B1, I18N("Error"), I18N("Unable to lock user. Maybe already in use?"), I18N("Dismiss"), NULL, NULL, 0); return GWEN_DialogEvent_ResultHandled; } } AH_EditUserDdvDialog_fromGui(dlg, xdlg->user, 1); if (xdlg->doLock) { int rv; rv=AB_Provider_EndExclUseUser(xdlg->provider, xdlg->user, 0); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); GWEN_Gui_MessageBox(GWEN_GUI_MSG_FLAGS_SEVERITY_NORMAL | GWEN_GUI_MSG_FLAGS_TYPE_ERROR | GWEN_GUI_MSG_FLAGS_CONFIRM_B1, I18N("Error"), I18N("Unable to unlock user."), I18N("Dismiss"), NULL, NULL, 0); AB_Provider_EndExclUseUser(xdlg->provider, xdlg->user, 1); return GWEN_DialogEvent_ResultHandled; } } return GWEN_DialogEvent_ResultAccept; } static int AH_EditUserDdvDialog_HandleActivatedGetAccounts(GWEN_DIALOG *dlg) { AH_EDIT_USER_DDV_DIALOG *xdlg; int rv; AB_IMEXPORTER_CONTEXT *ctx; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_EDIT_USER_DDV_DIALOG, dlg); assert(xdlg); ctx=AB_ImExporterContext_new(); rv=AH_Provider_GetAccounts(xdlg->provider, xdlg->user, ctx, 1, /* withProgress */ 0, /* nounmount */ xdlg->doLock); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); } AB_ImExporterContext_free(ctx); return GWEN_DialogEvent_ResultHandled; } int AH_EditUserDdvDialog_HandleActivated(GWEN_DIALOG *dlg, const char *sender) { if (strcasecmp(sender, "bankCodeButton")==0) return AH_EditUserDdvDialog_HandleActivatedBankCode(dlg); else if (strcasecmp(sender, "getAccountsButton")==0) return AH_EditUserDdvDialog_HandleActivatedGetAccounts(dlg); else if (strcasecmp(sender, "okButton")==0) return AH_EditUserDdvDialog_HandleActivatedOk(dlg); else if (strcasecmp(sender, "abortButton")==0) return GWEN_DialogEvent_ResultReject; else if (strcasecmp(sender, "helpButton")==0) { /* TODO: open u help dialog */ } return GWEN_DialogEvent_ResultNotHandled; } int GWENHYWFAR_CB AH_EditUserDdvDialog_SignalHandler(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender) { AH_EDIT_USER_DDV_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AH_EDIT_USER_DDV_DIALOG, dlg); assert(xdlg); switch (t) { case GWEN_DialogEvent_TypeInit: AH_EditUserDdvDialog_Init(dlg); return GWEN_DialogEvent_ResultHandled;; case GWEN_DialogEvent_TypeFini: AH_EditUserDdvDialog_Fini(dlg); return GWEN_DialogEvent_ResultHandled;; case GWEN_DialogEvent_TypeValueChanged: return GWEN_DialogEvent_ResultHandled;; case GWEN_DialogEvent_TypeActivated: return AH_EditUserDdvDialog_HandleActivated(dlg, sender); case GWEN_DialogEvent_TypeEnabled: case GWEN_DialogEvent_TypeDisabled: case GWEN_DialogEvent_TypeClose: case GWEN_DialogEvent_TypeLast: return GWEN_DialogEvent_ResultNotHandled; default: break; } return GWEN_DialogEvent_ResultNotHandled; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/aqhbci.c0000664000175000017500000000236114043610745020205 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "aqhbci_l.h" AH_CRYPT_MODE AH_CryptMode_fromString(const char *s) { if (strcasecmp(s, "none")==0) return AH_CryptMode_None; else if (strcasecmp(s, "ddv")==0) return AH_CryptMode_Ddv; else if (strcasecmp(s, "pintan")==0) return AH_CryptMode_Pintan; else if (strcasecmp(s, "rdh")==0) return AH_CryptMode_Rdh; else if (strcasecmp(s, "rah")==0) return AH_CryptMode_Rah; else return AH_CryptMode_Unknown; } const char *AH_CryptMode_toString(AH_CRYPT_MODE v) { switch (v) { case AH_CryptMode_None: return "none"; case AH_CryptMode_Ddv: return "ddv"; case AH_CryptMode_Pintan: return "pintan"; case AH_CryptMode_Rdh: return "rdh"; case AH_CryptMode_Rah: return "rah"; default: return "unknown"; } } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/banking/0000755000175000017500000000000015037736163020306 500000000000000aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/banking/provider.h0000664000175000017500000000370614043610745022232 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_PROVIDER_H #define AH_PROVIDER_H #include #include #include #include /** @defgroup G_AB_BE_AQHBCI HBCI Backend (AqHBCI) * @ingroup G_AB_BACKENDS * * AqHBCI supports the German HBCI (Homebanking Computer Interface) protocol * for online banking. It currently supports version 2.01, 2.10 and 2.20 of * the HBCI specification. */ /*@{*/ #ifdef __cplusplus extern "C" { #endif /** * This enum can be used as argument to @ref AB_Provider_GetNewUserDialog */ enum AQHBCI_NEWUSER_DIALOG_CODE { AqHBCI_NewUserDialog_CodeGeneric=0, AqHBCI_NewUserDialog_CodeExistingPinTan, AqHBCI_NewUserDialog_CodeCreateKeyFile, AqHBCI_NewUserDialog_CodeExistingKeyFile, AqHBCI_NewUserDialog_CodeCreateChipcard, AqHBCI_NewUserDialog_CodeExistingChipcard }; AB_PROVIDER *AH_Provider_new(AB_BANKING *ab, const char *name); /** @name Informative Functions * */ /*@{*/ const char *AH_Provider_GetProductName(const AB_PROVIDER *pro); const char *AH_Provider_GetProductVersion(const AB_PROVIDER *pro); /*@}*/ /** * Creates user keys for RDH type users. * * @param pro provider * @param u user for which the keys are to be created * @param nounmount if !=0 the CryptToken will not be unmounted after use */ int AH_Provider_CreateKeys(AB_PROVIDER *pro, AB_USER *u, int nounmount); int AH_Provider_Test(AB_PROVIDER *pro); /*@}*/ #ifdef __cplusplus } #endif /*@}*/ /* defgroup */ #endif /* AH_PROVIDER_H */ aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/banking/provider_update.c0000664000175000017500000000403714043610745023565 00000000000000/*************************************************************************** begin : Sat Sep 29 2018 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "provider_update.h" #include "aqhbci/banking/provider_l.h" int AH_Provider_UpdatePreInit(AB_PROVIDER *pro, uint32_t lastVersion, uint32_t currentVersion) { #if 0 /* no preinit for now */ int rv; if (lastVersion!=0) { DBG_INFO(AQHBCI_LOGDOMAIN, "Update (pre init): Previous version %d.%d.%d.%d, new version %d.%d.%d.%d", (lastVersion>>24) & 0xff, (lastVersion>>16) & 0xff, (lastVersion>>8) & 0xff, lastVersion & 0xff, (currentVersion>>24) & 0xff, (currentVersion>>16) & 0xff, (currentVersion>>8) & 0xff, currentVersion & 0xff); } #endif return 0; } int AH_Provider_UpdatePostInit(AB_PROVIDER *pro, uint32_t lastVersion, uint32_t currentVersion) { int rv; if (lastVersion!=0) { DBG_INFO(AQHBCI_LOGDOMAIN, "Update (post init): Previous version %d.%d.%d.%d, new version %d.%d.%d.%d", (lastVersion>>24) & 0xff, (lastVersion>>16) & 0xff, (lastVersion>>8) & 0xff, lastVersion & 0xff, (currentVersion>>24) & 0xff, (currentVersion>>16) & 0xff, (currentVersion>>8) & 0xff, currentVersion & 0xff); if (lastVersion<((5<<24) | (99<<16) | (2<<8) | 0)) { /* change from previous versions: * - create account spec objects */ DBG_NOTICE(AQHBCI_LOGDOMAIN, "Creating account specs for accounts"); rv=AB_Provider_CreateInitialAccountSpecs(pro); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } } } return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/banking/provider_keys.c0000664000175000017500000003250114043610745023253 00000000000000/*************************************************************************** begin : Tue Jun 03 2018 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "provider_keys.h" #include "aqhbci/banking/provider_l.h" #include #include #include int AH_Provider_CreateKeys(AB_PROVIDER *pro, AB_USER *u, int nounmount) { GWEN_CRYPT_TOKEN *ct; const GWEN_CRYPT_TOKEN_CONTEXT *ctx; uint32_t keyId; GWEN_CRYPT_CRYPTALGO *algo; int rv; AH_HBCI *h; const GWEN_CRYPT_TOKEN_KEYINFO *oki; GWEN_CRYPT_TOKEN_KEYINFO *ki; int rdhType; int maxServerKeySizeInBits=0; h=AH_Provider_GetHbci(pro); assert(h); /* check crypt mode */ if ((AH_User_GetCryptMode(u)!=AH_CryptMode_Rdh) && (AH_User_GetCryptMode(u)!=AH_CryptMode_Rah)) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Key generation not supported with this token"); return GWEN_ERROR_INVALID; } rdhType=AH_User_GetRdhType(u); if (rdhType==0) rdhType=1; /* get token */ rv=AB_Banking_GetCryptToken(AH_HBCI_GetBankingApi(h), AH_User_GetTokenType(u), AH_User_GetTokenName(u), &ct); if (rv) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Error getting the user's crypt token (%d)", rv); return rv; } /* we always use 65537 as public exponent */ GWEN_Crypt_Token_AddModes(ct, GWEN_CRYPT_TOKEN_MODE_EXP_65537); /* create algo */ algo=GWEN_Crypt_CryptAlgo_new(GWEN_Crypt_CryptAlgoId_Rsa, GWEN_Crypt_CryptMode_None); /* open token for admin */ if (!GWEN_Crypt_Token_IsOpen(ct)) { rv=GWEN_Crypt_Token_Open(ct, 1, 0); if (rv) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Error opening crypt token (%d)", rv); GWEN_Crypt_CryptAlgo_free(algo); return rv; } } /* get context */ ctx=GWEN_Crypt_Token_GetContext(ct, AH_User_GetTokenContextId(u), 0); if (ctx==NULL) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not get context %d", AH_User_GetTokenContextId(u)); GWEN_Crypt_CryptAlgo_free(algo); return GWEN_ERROR_INVALID; } // XXX RAH? if ((AH_User_GetCryptMode(u)==AH_CryptMode_Rdh) && (rdhType==10)) { /* the specs say that for RDH-10 we must not create keys longer than the server's * sign key (or, if absent, the server's encipher key) */ uint32_t skeyId; const GWEN_CRYPT_TOKEN_KEYINFO *ski; skeyId=GWEN_Crypt_Token_Context_GetVerifyKeyId(ctx); if (skeyId==0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "No verify key id specified (internal error)"); GWEN_Crypt_CryptAlgo_free(algo); return GWEN_ERROR_INVALID; } ski=GWEN_Crypt_Token_GetKeyInfo(ct, skeyId, GWEN_CRYPT_TOKEN_KEYFLAGS_HASMODULUS, 0); /* the fact that a key info exists does not mean that it contains key data (modulus and exp), * so we need to check for key data explicitly */ if (!(ski && GWEN_Crypt_Token_KeyInfo_GetModulusData(ski) && GWEN_Crypt_Token_KeyInfo_GetModulusLen(ski))) { GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Notice, I18N("Server has no sign key, using encipher key")); skeyId=GWEN_Crypt_Token_Context_GetEncipherKeyId(ctx); if (skeyId==0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "No encipher key id specified (internal error)"); GWEN_Crypt_CryptAlgo_free(algo); return GWEN_ERROR_INVALID; } ski=GWEN_Crypt_Token_GetKeyInfo(ct, skeyId, GWEN_CRYPT_TOKEN_KEYFLAGS_HASMODULUS, 0); } if (ski) { const uint8_t *modPtr; uint32_t modLen; modPtr=GWEN_Crypt_Token_KeyInfo_GetModulusData(ski); modLen=GWEN_Crypt_Token_KeyInfo_GetModulusLen(ski); DBG_NOTICE(AQHBCI_LOGDOMAIN, "Server key has a modulus size of %d bytes", modLen); GWEN_Gui_ProgressLog2(0, GWEN_LoggerLevel_Notice, I18N("Server key has a modulus size of %d bytes"), modLen); if (modPtr && modLen) { /* The specs require us to use a key no longer than that of the server, * so for our key we use the largest multiple of 8 smaller or equal to * the length of the server key in order to keep everyone happy. */ maxServerKeySizeInBits=modLen*8; while (modLen && *modPtr==0) { maxServerKeySizeInBits-=8; modLen--; modPtr++; } if (modLen && (*modPtr&0x80)==0) maxServerKeySizeInBits-=8; DBG_NOTICE(AQHBCI_LOGDOMAIN, "Max Server Keysize in bits: %d", maxServerKeySizeInBits); } else { DBG_NOTICE(AQHBCI_LOGDOMAIN, "Key info for key %d has no modulus data, using default key size (2048 bits)", (int) skeyId); } } else { DBG_NOTICE(AQHBCI_LOGDOMAIN, "No key info found for key %d", (int) skeyId); } } if (AH_User_GetCryptMode(u)==AH_CryptMode_Rdh) { switch (rdhType) { case 1: GWEN_Crypt_CryptAlgo_SetChunkSize(algo, 96); GWEN_Crypt_CryptAlgo_SetKeySizeInBits(algo, 768); break; case 2: GWEN_Crypt_CryptAlgo_SetChunkSize(algo, 256); GWEN_Crypt_CryptAlgo_SetKeySizeInBits(algo, 2048); break; case 3: GWEN_Crypt_CryptAlgo_SetChunkSize(algo, 256); GWEN_Crypt_CryptAlgo_SetKeySizeInBits(algo, 2048); break; case 5: GWEN_Crypt_CryptAlgo_SetChunkSize(algo, 256); GWEN_Crypt_CryptAlgo_SetKeySizeInBits(algo, 2048); break; case 7: GWEN_Crypt_CryptAlgo_SetChunkSize(algo, 256); GWEN_Crypt_CryptAlgo_SetKeySizeInBits(algo, 2048); break; case 8: GWEN_Crypt_CryptAlgo_SetChunkSize(algo, 256); GWEN_Crypt_CryptAlgo_SetKeySizeInBits(algo, 2048); break; case 9: GWEN_Crypt_CryptAlgo_SetChunkSize(algo, 256); GWEN_Crypt_CryptAlgo_SetKeySizeInBits(algo, 2048); break; case 10: if (maxServerKeySizeInBits) { int n=maxServerKeySizeInBits/8; assert(maxServerKeySizeInBits%8==0); GWEN_Crypt_CryptAlgo_SetChunkSize(algo, n); GWEN_Crypt_CryptAlgo_SetKeySizeInBits(algo, maxServerKeySizeInBits); DBG_NOTICE(AQHBCI_LOGDOMAIN, "Creating keys of size: %d bytes, %d bits", n, maxServerKeySizeInBits); } else { GWEN_Crypt_CryptAlgo_SetChunkSize(algo, 256); GWEN_Crypt_CryptAlgo_SetKeySizeInBits(algo, 2048); } break; default: DBG_ERROR(AQHBCI_LOGDOMAIN, "RDH %d not supported", AH_User_GetRdhType(u)); return GWEN_ERROR_INVALID; } } if (AH_User_GetCryptMode(u)==AH_CryptMode_Rah) { switch (rdhType) { case 7: GWEN_Crypt_CryptAlgo_SetChunkSize(algo, 256); GWEN_Crypt_CryptAlgo_SetKeySizeInBits(algo, 2048); break; case 9: GWEN_Crypt_CryptAlgo_SetChunkSize(algo, 256); GWEN_Crypt_CryptAlgo_SetKeySizeInBits(algo, 2048); break; case 10: GWEN_Crypt_CryptAlgo_SetChunkSize(algo, 256); GWEN_Crypt_CryptAlgo_SetKeySizeInBits(algo, 2048); break; default: DBG_ERROR(AQHBCI_LOGDOMAIN, "RAH %d not supported", AH_User_GetRdhType(u)); return GWEN_ERROR_INVALID; } } GWEN_Gui_ProgressLog2(0, GWEN_LoggerLevel_Notice, I18N("Creating keys with %d bits (%d bytes), please wait..."), GWEN_Crypt_CryptAlgo_GetKeySizeInBits(algo), GWEN_Crypt_CryptAlgo_GetChunkSize(algo)); /* get cipher key id */ keyId=GWEN_Crypt_Token_Context_GetDecipherKeyId(ctx); if (keyId==0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "No decipher key id specified (internal error)"); GWEN_Crypt_CryptAlgo_free(algo); return GWEN_ERROR_INVALID; } /* generate cipher key */ rv=GWEN_Crypt_Token_GenerateKey(ct, keyId, algo, 0); if (rv) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Error generating key (%d)", rv); GWEN_Gui_ProgressLog2(0, GWEN_LoggerLevel_Error, I18N("Error creating cipher key (%d)"), rv); GWEN_Crypt_CryptAlgo_free(algo); return rv; } /* set key number/version */ oki=GWEN_Crypt_Token_GetKeyInfo(ct, keyId, GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYVERSION | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYNUMBER, 0); if (oki==NULL) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not get KeyInfo for newly created key %d", keyId); GWEN_Crypt_CryptAlgo_free(algo); return rv; } ki=GWEN_Crypt_Token_KeyInfo_dup(oki); if (rdhType>1) GWEN_Crypt_Token_KeyInfo_SetKeyNumber(ki, rdhType); else GWEN_Crypt_Token_KeyInfo_SetKeyNumber(ki, 1); GWEN_Crypt_Token_KeyInfo_SetKeyVersion(ki, 1); GWEN_Crypt_Token_KeyInfo_AddFlags(ki, GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYVERSION | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYNUMBER); rv=GWEN_Crypt_Token_SetKeyInfo(ct, keyId, ki, 0); GWEN_Crypt_Token_KeyInfo_free(ki); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); GWEN_Crypt_CryptAlgo_free(algo); return rv; } /* get sign key id */ keyId=GWEN_Crypt_Token_Context_GetSignKeyId(ctx); if (keyId==0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "No sign key id specified (internal error)"); GWEN_Crypt_CryptAlgo_free(algo); return GWEN_ERROR_INVALID; } /* generate sign key */ rv=GWEN_Crypt_Token_GenerateKey(ct, keyId, algo, 0); if (rv) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Error generating key (%d)", rv); GWEN_Gui_ProgressLog2(0, GWEN_LoggerLevel_Error, I18N("Error creating sign key (%d)"), rv); GWEN_Crypt_CryptAlgo_free(algo); return rv; } /* set key number/version */ oki=GWEN_Crypt_Token_GetKeyInfo(ct, keyId, GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYVERSION | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYNUMBER, 0); if (oki==NULL) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not get KeyInfo for newly created key %d", keyId); GWEN_Crypt_CryptAlgo_free(algo); return rv; } ki=GWEN_Crypt_Token_KeyInfo_dup(oki); if (rdhType>1) GWEN_Crypt_Token_KeyInfo_SetKeyNumber(ki, rdhType); else { if (AH_User_GetHbciVersion(u)>=300) GWEN_Crypt_Token_KeyInfo_SetKeyNumber(ki, 1); else GWEN_Crypt_Token_KeyInfo_SetKeyNumber(ki, 2); } GWEN_Crypt_Token_KeyInfo_SetKeyVersion(ki, 1); GWEN_Crypt_Token_KeyInfo_AddFlags(ki, GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYVERSION | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYNUMBER); rv=GWEN_Crypt_Token_SetKeyInfo(ct, keyId, ki, 0); GWEN_Crypt_Token_KeyInfo_free(ki); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); GWEN_Crypt_CryptAlgo_free(algo); return rv; } /* get auth sign key id */ keyId=GWEN_Crypt_Token_Context_GetAuthSignKeyId(ctx); if (keyId) { /* generate auth sign key */ rv=GWEN_Crypt_Token_GenerateKey(ct, keyId, algo, 0); if (rv) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Error generating key (%d)", rv); GWEN_Gui_ProgressLog2(0, GWEN_LoggerLevel_Error, I18N("Error creating auth key (%d)"), rv); GWEN_Crypt_CryptAlgo_free(algo); return rv; } /* set key number/version */ oki=GWEN_Crypt_Token_GetKeyInfo(ct, keyId, GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYVERSION | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYNUMBER, 0); if (oki==NULL) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not get KeyInfo for newly created key %d", keyId); GWEN_Crypt_CryptAlgo_free(algo); return rv; } ki=GWEN_Crypt_Token_KeyInfo_dup(oki); if (rdhType>1) GWEN_Crypt_Token_KeyInfo_SetKeyNumber(ki, rdhType); else { if (AH_User_GetHbciVersion(u)>=300) GWEN_Crypt_Token_KeyInfo_SetKeyNumber(ki, 1); else GWEN_Crypt_Token_KeyInfo_SetKeyNumber(ki, 3); } GWEN_Crypt_Token_KeyInfo_SetKeyVersion(ki, 1); GWEN_Crypt_Token_KeyInfo_AddFlags(ki, GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYVERSION | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYNUMBER); rv=GWEN_Crypt_Token_SetKeyInfo(ct, keyId, ki, 0); GWEN_Crypt_Token_KeyInfo_free(ki); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); GWEN_Crypt_CryptAlgo_free(algo); return rv; } } if (!nounmount) { /* close token */ rv=GWEN_Crypt_Token_Close(ct, 0, 0); if (rv) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Error closing crypt token (%d)", rv); GWEN_Crypt_CryptAlgo_free(algo); return rv; } } GWEN_Crypt_CryptAlgo_free(algo); return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/banking/provider_sendcmd.h0000664000175000017500000000146714043610745023731 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2020 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_PROVIDER_SENDCMD_H #define AH_PROVIDER_SENDCMD_H #include #include #include #include "aqhbci/joblayer/job_l.h" #include "aqhbci/applayer/outbox_l.h" int AH_Provider_SendCommands(AB_PROVIDER *pro, AB_PROVIDERQUEUE *pq, AB_IMEXPORTER_CONTEXT *ctx); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/banking/provider_dialogs.h0000664000175000017500000000173214043610745023731 00000000000000/*************************************************************************** begin : Tue Jun 03 2018 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_PROVIDER_DIALOGS_H #define AH_PROVIDER_DIALOGS_H #include #include #include GWEN_DIALOG *AH_Provider_GetNewCardUserDialog(AB_PROVIDER *pro); GWEN_DIALOG *AH_Provider_GetEditUserDialog(AB_PROVIDER *pro, AB_USER *u); GWEN_DIALOG *AH_Provider_GetNewUserDialog(AB_PROVIDER *pro, int i); GWEN_DIALOG *AH_Provider_GetEditAccountDialog(AB_PROVIDER *pro, AB_ACCOUNT *a); GWEN_DIALOG *AH_Provider_GetUserTypeDialog(AB_PROVIDER *pro); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/banking/provider_iniletter.h0000664000175000017500000000453414043610745024311 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2020 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_PROVIDER_INILETTER_H #define AH_PROVIDER_INILETTER_H #include #include #include /** @name Generating Ini-Letters * * INI letters are used in RDH mode only. They are used to verify the public * server keys and to create a letter to be sent to the bank for verification * of the public user keys. */ /*@{*/ /** * Creates a text version of the INI letter. This function needs to mount * the medium so the user will be ask for the pin. * @param pro provider * @param u user for which the iniletter is to be created * @param useBankKey if !=0 create an iniletter for the bank key * @param variant use 1 for RDH1, 2 for RDH2-10 (or 0 for autoselection) * @param lbuf buffer to write the iniletter to * @param nounmount if !=0 the CryptToken will not be unmounted after use */ int AH_Provider_GetIniLetterTxt(AB_PROVIDER *pro, AB_USER *u, int useBankKey, int variant, GWEN_BUFFER *lbuf, int nounmount); /** * Creates a HTML version of the INI letter. This function needs to mount * the medium so the user will be ask for the pin. * @param pro provider * @param u user for which the iniletter is to be created * @param useBankKey if !=0 create an iniletter for the bank key * @param variant use 1 for RDH1, 2 for RDH2-10 (or 0 for autoselection) * @param lbuf buffer to write the iniletter to * @param nounmount if !=0 the CryptToken will not be unmounted after use */ int AH_Provider_GetIniLetterHtml(AB_PROVIDER *pro, AB_USER *u, int useBankKey, int variant, GWEN_BUFFER *lbuf, int nounmount); /*@}*/ #endif aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/banking/provider_online.c0000664000175000017500000011403514546575647023612 00000000000000/*************************************************************************** begin : Tue Jun 03 2018 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "provider_online.h" #include "aqhbci/banking/provider_l.h" #include "aqhbci/applayer/adminjobs_l.h" #include "aqhbci/msglayer/dialog_l.h" #include "aqhbci/admjobs/jobgetkeys_l.h" #include "aqhbci/admjobs/jobsendkeys_l.h" #include "aqhbci/admjobs/jobchangekeys_l.h" #include "aqhbci/admjobs/jobgetsepainfo_l.h" #include "aqhbci/admjobs/jobgetsysid_l.h" #include "aqhbci/admjobs/jobgetbankinfo_l.h" #include "aqhbci/admjobs/jobunblockpin_l.h" #include "aqhbci/admjobs/jobgettargetacc_l.h" #include int AH_Provider_GetAccounts(AB_PROVIDER *pro, AB_USER *u, AB_IMEXPORTER_CONTEXT *ctx, int withProgress, int nounmount, int doLock) { AB_BANKING *ab; AH_HBCI *h; AH_JOB *job; AH_OUTBOX *ob; int rv; assert(pro); assert(u); ab=AB_Provider_GetBanking(pro); assert(ab); h=AH_Provider_GetHbci(pro); assert(h); job=AH_Job_UpdateBank_new(pro, u); if (!job) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Job not supported, should not happen"); return GWEN_ERROR_GENERIC; } AH_Job_AddSigner(job, AB_User_GetUserId(u)); ob=AH_Outbox_new(pro); AH_Outbox_AddJob(ob, job); rv=AH_Outbox_Execute(ob, ctx, withProgress, 1, doLock); AH_Outbox_free(ob); if (rv) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not execute outbox.\n"); AH_Job_free(job); if (!nounmount) AB_Banking_ClearCryptTokenList(AH_HBCI_GetBankingApi(h)); return rv; } /* always try to commit, even when there are errors */ rv=AH_Job_Commit(job, doLock); if (rv) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not commit result.\n"); AH_Job_free(job); if (!nounmount) AB_Banking_ClearCryptTokenList(AH_HBCI_GetBankingApi(h)); return rv; } if (AH_Job_HasErrors(job)) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Job has errors, but accounts may have been received."); AH_Job_free(job); if (!nounmount) AB_Banking_ClearCryptTokenList(AH_HBCI_GetBankingApi(h)); return GWEN_ERROR_GENERIC; } AH_Job_free(job); if (!nounmount) AB_Banking_ClearCryptTokenList(AH_HBCI_GetBankingApi(h)); return 0; } int AH_Provider_GetBankInfo(AB_PROVIDER *pro, AB_USER *u, AB_IMEXPORTER_CONTEXT *ctx, int withTanSeg, int withProgress, int nounmount, int doLock) { AB_BANKING *ab; AH_HBCI *h; AH_JOB *job; AH_OUTBOX *ob; int rv; assert(pro); assert(u); ab=AB_Provider_GetBanking(pro); assert(ab); h=AH_Provider_GetHbci(pro); assert(h); job=AH_Job_GetBankInfo_new(pro, u, withTanSeg); if (!job) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Job not supported, should not happen"); return GWEN_ERROR_GENERIC; } ob=AH_Outbox_new(pro); AH_Outbox_AddJob(ob, job); rv=AH_Outbox_Execute(ob, ctx, withProgress, 1, doLock); AH_Outbox_free(ob); if (rv) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not execute outbox.\n"); AH_Job_free(job); if (!nounmount) AB_Banking_ClearCryptTokenList(AH_HBCI_GetBankingApi(h)); return rv; } if (AH_Job_HasErrors(job)) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Job has errors"); // TODO: show errors AH_Job_free(job); if (!nounmount) AB_Banking_ClearCryptTokenList(AH_HBCI_GetBankingApi(h)); return GWEN_ERROR_GENERIC; } else { rv=AH_Job_Commit(job, doLock); if (rv) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not commit result.\n"); AH_Job_free(job); if (!nounmount) AB_Banking_ClearCryptTokenList(AH_HBCI_GetBankingApi(h)); return rv; } } AH_Job_free(job); if (!nounmount) AB_Banking_ClearCryptTokenList(AH_HBCI_GetBankingApi(h)); return 0; } int AH_Provider_GetSysId(AB_PROVIDER *pro, AB_USER *u, AB_IMEXPORTER_CONTEXT *ctx, int withProgress, int nounmount, int doLock) { AB_BANKING *ab; AH_HBCI *h; AH_JOB *job; int rv; const char *s; int i; char tbuf[256]; assert(pro); assert(u); ab=AB_Provider_GetBanking(pro); assert(ab); h=AH_Provider_GetHbci(pro); assert(h); job=0; rv=0; for (i=0; ; i++) { AH_OUTBOX *ob; job=AH_Job_GetSysId_new(pro, u); if (!job) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Job not supported, should not happen"); return GWEN_ERROR_GENERIC; } AH_Job_AddSigner(job, AB_User_GetUserId(u)); ob=AH_Outbox_new(pro); AH_Outbox_AddJob(ob, job); rv=AH_Outbox_Execute(ob, ctx, withProgress, 1, doLock); AH_Outbox_free(ob); if (rv) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not execute outbox.\n"); AH_Job_free(job); if (!nounmount) AB_Banking_ClearCryptTokenList(AH_HBCI_GetBankingApi(h)); return rv; } /* check whether we received a sysid */ s=AH_Job_GetSysId_GetSysId(job); if (s && *s) { /* we did, commit the job and break loop */ rv=AH_Job_Commit(job, doLock); if (rv<0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not commit result.\n"); AH_Job_free(job); if (!nounmount) AB_Banking_ClearCryptTokenList(AH_HBCI_GetBankingApi(h)); return rv; } break; } if (AH_Job_HasItanResult(job)) { GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Notice, I18N("Adjusting to iTAN modes of the server")); rv=AH_Job_Commit(job, doLock); if (rv) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not commit result.\n"); AH_Job_free(job); if (!nounmount) AB_Banking_ClearCryptTokenList(AH_HBCI_GetBankingApi(h)); return rv; } #if 0 /* save user in order to get the info written to config database for * inspection while debugging */ rv=AB_Banking_SaveUser(ab, u); if (rv<0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Error saving user (%d)", rv); AH_Outbox_free(ob); if (!nounmount) AB_Banking_ClearCryptTokenList(AH_HBCI_GetBankingApi(h)); return rv; } #endif rv=GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Notice, I18N("Retrying to get system id.")); if (rv) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Error in progress log, maybe user aborted?"); AH_Job_free(job); if (!nounmount) AB_Banking_ClearCryptTokenList(AH_HBCI_GetBankingApi(h)); return rv; } } else { DBG_ERROR(AQHBCI_LOGDOMAIN, "Job has no system id and no iTAN results"); // TODO: show errors AH_Job_free(job); if (!nounmount) AB_Banking_ClearCryptTokenList(AH_HBCI_GetBankingApi(h)); return GWEN_ERROR_GENERIC; } AH_Job_free(job); if (i>1) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Tried too often, giving up"); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("Could not get system id after multiple trials")); if (!nounmount) AB_Banking_ClearCryptTokenList(AH_HBCI_GetBankingApi(h)); return GWEN_ERROR_GENERIC; } } /* for */ /* lock user */ if (doLock) { rv=AB_Provider_BeginExclUseUser(pro, u); if (rv) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not lock user (%d)\n", rv); AH_Job_free(job); if (!nounmount) AB_Banking_ClearCryptTokenList(AH_HBCI_GetBankingApi(h)); return rv; } } s=AH_Job_GetSysId_GetSysId(job); if (!s) { DBG_ERROR(AQHBCI_LOGDOMAIN, "No system id"); if (doLock) AB_Provider_EndExclUseUser(pro, u, 1); AH_Job_free(job); if (!nounmount) AB_Banking_ClearCryptTokenList(AH_HBCI_GetBankingApi(h)); return GWEN_ERROR_NO_DATA; } AH_User_SetSystemId(u, s); AH_Job_free(job); /* unlock user */ if (doLock) { rv=AB_Provider_EndExclUseUser(pro, u, 0); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "Could not unlock customer [%s] (%d)", AB_User_GetCustomerId(u), rv); snprintf(tbuf, sizeof(tbuf)-1, I18N("Could not unlock user %s (%d)"), AB_User_GetUserId(u), rv); tbuf[sizeof(tbuf)-1]=0; GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, tbuf); AB_Provider_EndExclUseUser(pro, u, 1); if (!nounmount) AB_Banking_ClearCryptTokenList(AH_HBCI_GetBankingApi(h)); return rv; } } if (!nounmount) AB_Banking_ClearCryptTokenList(AH_HBCI_GetBankingApi(h)); return 0; } int AH_Provider_GetServerKeys(AB_PROVIDER *pro, AB_USER *u, AB_IMEXPORTER_CONTEXT *ctx, int withProgress, int nounmount, int doLock) { AB_BANKING *ab; AH_HBCI *h; AH_JOB *job; AH_OUTBOX *ob; int rv; GWEN_CRYPT_TOKEN *ct; const GWEN_CRYPT_TOKEN_CONTEXT *cctx; const char *s; assert(pro); assert(u); ab=AB_Provider_GetBanking(pro); assert(ab); h=AH_Provider_GetHbci(pro); assert(h); job=AH_Job_GetKeys_new(pro, u); if (!job) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Job not supported, should not happen"); return GWEN_ERROR_GENERIC; } ob=AH_Outbox_new(pro); AH_Outbox_AddJob(ob, job); rv=AH_Outbox_Execute(ob, ctx, withProgress, 1, doLock); AH_Outbox_free(ob); if (rv) { GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("Could not execute outbox.")); AH_Job_free(job); if (!nounmount) AB_Banking_ClearCryptTokenList(AH_HBCI_GetBankingApi(h)); return rv; } /* Store crypt and sign keys in database */ if (AH_Job_GetKeys_GetCryptKeyInfo(job)==NULL && AH_Job_GetKeys_GetSignKeyInfo(job)==NULL) { DBG_ERROR(AQHBCI_LOGDOMAIN, "No crypt key and no sign key received"); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("No crypt key and no sign key received.")); AH_Job_free(job); if (!nounmount) AB_Banking_ClearCryptTokenList(AH_HBCI_GetBankingApi(h)); return GWEN_ERROR_GENERIC; } else { rv=AH_Job_Commit(job, doLock); if (rv) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not commit result.\n"); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("Could not commit result")); AH_Job_free(job); if (!nounmount) AB_Banking_ClearCryptTokenList(AH_HBCI_GetBankingApi(h)); return rv; } } /* lock user */ if (doLock) { rv=AB_Provider_BeginExclUseUser(pro, u); if (rv) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not lock user (%d)\n", rv); AH_Job_free(job); if (!nounmount) AB_Banking_ClearCryptTokenList(AH_HBCI_GetBankingApi(h)); return rv; } } s=AH_User_GetPeerId(u); if (!s || !*s) { s=AH_Job_GetKeys_GetPeerId(job); if (s && *s) { char tbuf[256]; snprintf(tbuf, sizeof(tbuf)-1, I18N("Setting peer ID to \"%s\")"), s); tbuf[sizeof(tbuf)-1]=0; GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Notice, tbuf); AH_User_SetPeerId(u, s); } } /* get crypt token */ rv=AB_Banking_GetCryptToken(AH_HBCI_GetBankingApi(h), AH_User_GetTokenType(u), AH_User_GetTokenName(u), &ct); if (rv) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not get crypt token (%d)", rv); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("Error getting crypt token")); if (doLock) AB_Provider_EndExclUseUser(pro, u, 0); AH_Job_free(job); if (!nounmount) AB_Banking_ClearCryptTokenList(AH_HBCI_GetBankingApi(h)); return rv; } /* open crypt token */ rv=GWEN_Crypt_Token_Open(ct, 1, 0); if (rv) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not open crypt token (%d)", rv); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("Error opening crypt token")); if (doLock) AB_Provider_EndExclUseUser(pro, u, 0); AH_Job_free(job); if (!nounmount) AB_Banking_ClearCryptTokenList(AH_HBCI_GetBankingApi(h)); return rv; } /* get context */ cctx=GWEN_Crypt_Token_GetContext(ct, AH_User_GetTokenContextId(u), 0); if (!cctx) { DBG_ERROR(AQHBCI_LOGDOMAIN, "User context not found on crypt token"); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("User context not found on crypt token")); if (doLock) AB_Provider_EndExclUseUser(pro, u, 0); AH_Job_free(job); if (!nounmount) AB_Banking_ClearCryptTokenList(AH_HBCI_GetBankingApi(h)); return GWEN_ERROR_NOT_FOUND; } else { GWEN_CRYPT_TOKEN_KEYINFO *ki; uint32_t kid; /* store sign key on token (if any) */ kid=GWEN_Crypt_Token_Context_GetVerifyKeyId(cctx); ki=AH_Job_GetKeys_GetSignKeyInfo(job); if (kid && ki) { rv=GWEN_Crypt_Token_SetKeyInfo(ct, kid, ki, 0); if (rv) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not save key info (%d)", rv); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("Error saving sign key")); if (doLock) AB_Provider_EndExclUseUser(pro, u, 0); AH_Job_free(job); if (!nounmount) AB_Banking_ClearCryptTokenList(AH_HBCI_GetBankingApi(h)); return rv; } DBG_INFO(AQHBCI_LOGDOMAIN, "Sign key saved"); } /* store crypt key on token */ kid=GWEN_Crypt_Token_Context_GetEncipherKeyId(cctx); ki=AH_Job_GetKeys_GetCryptKeyInfo(job); if (kid && ki) { rv=GWEN_Crypt_Token_SetKeyInfo(ct, kid, ki, 0); if (rv) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not save key info (%d)", rv); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("Error saving crypt key")); if (doLock) AB_Provider_EndExclUseUser(pro, u, 0); AH_Job_free(job); if (!nounmount) AB_Banking_ClearCryptTokenList(AH_HBCI_GetBankingApi(h)); return rv; } DBG_INFO(AQHBCI_LOGDOMAIN, "Crypt key saved"); } /* store auth key on token (if any) */ kid=GWEN_Crypt_Token_Context_GetAuthVerifyKeyId(cctx); ki=AH_Job_GetKeys_GetAuthKeyInfo(job); if (kid && ki) { rv=GWEN_Crypt_Token_SetKeyInfo(ct, kid, ki, 0); if (rv) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not save key info (%d)", rv); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("Error saving auth key")); if (doLock) AB_Provider_EndExclUseUser(pro, u, 0); AH_Job_free(job); if (!nounmount) AB_Banking_ClearCryptTokenList(AH_HBCI_GetBankingApi(h)); return rv; } DBG_INFO(AQHBCI_LOGDOMAIN, "Auth key saved"); } } AH_Job_free(job); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Notice, I18N("Keys saved.")); /* unlock user */ if (doLock) { rv=AB_Provider_EndExclUseUser(pro, u, 0); if (rv) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not unlock user (%d)\n", rv); if (!nounmount) AB_Banking_ClearCryptTokenList(AH_HBCI_GetBankingApi(h)); return rv; } } if (!nounmount) AB_Banking_ClearCryptTokenList(AH_HBCI_GetBankingApi(h)); return 0; } int AH_Provider_SendUserKeys2(AB_PROVIDER *pro, AB_USER *u, AB_IMEXPORTER_CONTEXT *ctx, int withAuthKey, int withProgress, int nounmount, int doLock) { AB_BANKING *ab; AH_HBCI *h; AH_JOB *job; AH_OUTBOX *ob; int rv; GWEN_CRYPT_TOKEN *ct; uint32_t kid; const GWEN_CRYPT_TOKEN_CONTEXT *cctx; GWEN_CRYPT_TOKEN_KEYINFO *signKeyInfo=NULL; GWEN_CRYPT_TOKEN_KEYINFO *cryptKeyInfo=NULL; GWEN_CRYPT_TOKEN_KEYINFO *authKeyInfo=NULL; int mounted=0; assert(pro); assert(u); ab=AB_Provider_GetBanking(pro); assert(ab); h=AH_Provider_GetHbci(pro); assert(h); /* get crypt token */ rv=AB_Banking_GetCryptToken(AH_HBCI_GetBankingApi(h), AH_User_GetTokenType(u), AH_User_GetTokenName(u), &ct); if (rv) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not get crypt token (%d)", rv); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("Error getting crypt token")); if (!nounmount) AB_Banking_ClearCryptTokenList(AH_HBCI_GetBankingApi(h)); return rv; } /* open crypt token */ rv=GWEN_Crypt_Token_Open(ct, 1, 0); if (rv) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not open crypt token (%d)", rv); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("Error opening crypt token")); if (!nounmount) AB_Banking_ClearCryptTokenList(AH_HBCI_GetBankingApi(h)); return rv; } /* get context */ cctx=GWEN_Crypt_Token_GetContext(ct, AH_User_GetTokenContextId(u), 0); if (!cctx) { DBG_ERROR(AQHBCI_LOGDOMAIN, "User context not found on crypt token"); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("User context not found on crypt token")); if (!nounmount) AB_Banking_ClearCryptTokenList(AH_HBCI_GetBankingApi(h)); return GWEN_ERROR_NOT_FOUND; } /* get sign key info */ kid=GWEN_Crypt_Token_Context_GetSignKeyId(cctx); if (kid) { uint32_t ctxSignKeyNum=GWEN_Crypt_Token_Context_GetSignKeyNum(cctx); const GWEN_CRYPT_TOKEN_KEYINFO *signKeyInfoCT=GWEN_Crypt_Token_GetKeyInfo(ct, kid, GWEN_CRYPT_TOKEN_KEYFLAGS_HASMODULUS | GWEN_CRYPT_TOKEN_KEYFLAGS_HASEXPONENT | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYVERSION | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYNUMBER, 0); if (signKeyInfoCT==NULL) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Sign key info not found on crypt token"); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("Sign key info not found on crypt token")); if (!nounmount) AB_Banking_ClearCryptTokenList(AH_HBCI_GetBankingApi(h)); return GWEN_ERROR_NOT_FOUND; } signKeyInfo=GWEN_Crypt_Token_KeyInfo_dup(signKeyInfoCT); if (ctxSignKeyNum) { GWEN_Crypt_Token_KeyInfo_SetKeyNumber(signKeyInfo, ctxSignKeyNum); GWEN_Crypt_Token_KeyInfo_SetKeyVersion(signKeyInfo, GWEN_Crypt_Token_Context_GetSignKeyVer(cctx)); } } else { DBG_INFO(AQHBCI_LOGDOMAIN, "No sign key id"); } /* get crypt key info */ kid=GWEN_Crypt_Token_Context_GetDecipherKeyId(cctx); if (kid) { uint32_t ctxCryptKeyNum=GWEN_Crypt_Token_Context_GetDecipherKeyNum(cctx); const GWEN_CRYPT_TOKEN_KEYINFO *cryptKeyInfoCT=GWEN_Crypt_Token_GetKeyInfo(ct, kid, GWEN_CRYPT_TOKEN_KEYFLAGS_HASMODULUS | GWEN_CRYPT_TOKEN_KEYFLAGS_HASEXPONENT | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYVERSION | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYNUMBER, 0); if (cryptKeyInfoCT==NULL) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Crypt key info not found on crypt token"); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("Crypt key info not found on crypt token")); if (!nounmount) AB_Banking_ClearCryptTokenList(AH_HBCI_GetBankingApi(h)); return GWEN_ERROR_NOT_FOUND; } cryptKeyInfo=GWEN_Crypt_Token_KeyInfo_dup(cryptKeyInfoCT); if (ctxCryptKeyNum) { GWEN_Crypt_Token_KeyInfo_SetKeyNumber(cryptKeyInfo, ctxCryptKeyNum); GWEN_Crypt_Token_KeyInfo_SetKeyVersion(cryptKeyInfo, GWEN_Crypt_Token_Context_GetDecipherKeyVer(cctx)); } } else { DBG_INFO(AQHBCI_LOGDOMAIN, "No decipher key id"); } /* get auth sign key info */ if (withAuthKey) { kid=GWEN_Crypt_Token_Context_GetAuthSignKeyId(cctx); if (kid) { uint32_t ctxAuthKeyNum=GWEN_Crypt_Token_Context_GetAuthSignKeyNum(cctx); const GWEN_CRYPT_TOKEN_KEYINFO *authKeyInfoCT=GWEN_Crypt_Token_GetKeyInfo(ct, kid, GWEN_CRYPT_TOKEN_KEYFLAGS_HASMODULUS | GWEN_CRYPT_TOKEN_KEYFLAGS_HASEXPONENT | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYVERSION | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYNUMBER, 0); if (authKeyInfoCT==NULL) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Auth key info not found on crypt token"); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("Auth key info not found on crypt token")); if (!nounmount) AB_Banking_ClearCryptTokenList(AH_HBCI_GetBankingApi(h)); return GWEN_ERROR_NOT_FOUND; } authKeyInfo=GWEN_Crypt_Token_KeyInfo_dup(authKeyInfoCT); if (ctxAuthKeyNum) { GWEN_Crypt_Token_KeyInfo_SetKeyNumber(authKeyInfo, ctxAuthKeyNum); GWEN_Crypt_Token_KeyInfo_SetKeyVersion(authKeyInfo, GWEN_Crypt_Token_Context_GetAuthSignKeyVer(cctx)); } } else { DBG_INFO(AQHBCI_LOGDOMAIN, "No auth key id"); } } /* create job */ job=AH_Job_SendKeys_new(pro, u, cryptKeyInfo, signKeyInfo, authKeyInfo); /* free keyinfos */ if (signKeyInfo) { GWEN_Crypt_Token_KeyInfo_free(signKeyInfo); } if (cryptKeyInfo) { GWEN_Crypt_Token_KeyInfo_free(cryptKeyInfo); } if (authKeyInfo) { GWEN_Crypt_Token_KeyInfo_free(authKeyInfo); } if (!job) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Job not supported, should not happen"); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("Job not supported, should not happen")); if (!nounmount && mounted) AB_Banking_ClearCryptTokenList(AH_HBCI_GetBankingApi(h)); return GWEN_ERROR_GENERIC; } AH_Job_AddSigner(job, AB_User_GetUserId(u)); /* enqueue job */ ob=AH_Outbox_new(pro); AH_Outbox_AddJob(ob, job); /* execute queue */ rv=AH_Outbox_Execute(ob, ctx, withProgress, 0, doLock); AH_Outbox_free(ob); if (rv) { GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("Could not execute outbox.")); AH_Job_free(job); if (!nounmount && mounted) AB_Banking_ClearCryptTokenList(AH_HBCI_GetBankingApi(h)); return rv; } /* check result */ if (AH_Job_HasErrors(job)) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Job has errors"); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("Job contains errors.")); AH_Job_free(job); if (!nounmount && mounted) AB_Banking_ClearCryptTokenList(AH_HBCI_GetBankingApi(h)); return GWEN_ERROR_GENERIC; } else { rv=AH_Job_Commit(job, doLock); if (rv) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not commit result.\n"); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("Could not commit result")); AH_Job_free(job); if (!nounmount && mounted) AB_Banking_ClearCryptTokenList(AH_HBCI_GetBankingApi(h)); return rv; } } GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Notice, I18N("Keys sent")); AH_Job_free(job); if (!nounmount && mounted) AB_Banking_ClearCryptTokenList(AH_HBCI_GetBankingApi(h)); return 0; } int AH_Provider_SendUserKeys(AB_PROVIDER *pro, AB_USER *u, AB_IMEXPORTER_CONTEXT *ctx, int withProgress, int nounmount, int doLock) { return AH_Provider_SendUserKeys2(pro, u, ctx, 0, withProgress, nounmount, doLock); } int AH_Provider_ChangeUserKeys(AB_PROVIDER *pro, AB_USER *u, GWEN_DB_NODE *args, int withProgress, int nounmount, int doLock) { int res=0; uint8_t canceled=0; AH_JOB *job=NULL; AB_IMEXPORTER_CONTEXT *ctx=NULL; assert(u); job=AH_Job_ChangeKeys_new(pro, u, args, &canceled); if (!job) { res = -2; if (!canceled) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Unexplainable, 'AH_Job_ChangeKeys_new' not supported."); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("Unexplainable, 'AH_Job_ChangeKeys_new' not supported.")); res = -1; } if (canceled == 2) res = -1; } if (!res) { ctx = AB_ImExporterContext_new(); if (!ctx) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Error getting ctx."); res = -1; } } if (ctx) { AH_OUTBOX *ob = AH_Outbox_new(pro); if (!ob) GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("Allocate outbox failed.")); else { AH_Job_AddSigner(job, AB_User_GetUserId(u)); AH_Outbox_AddJob(ob, job); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Info, I18N("Fetching serverkeys.")); res = AH_Outbox_Execute(ob, ctx, withProgress, 0, doLock); AH_Outbox_free(ob); if (res) GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("Could not execute outbox.")); DBG_INFO(AQHBCI_LOGDOMAIN, "res %d, status %d.", res, AH_Job_GetStatus(job)); if (res || (AH_Job_GetStatus(job) == AH_JobStatusError)) res = -1; } AB_ImExporterContext_free(ctx); } res = AH_Job_ChangeKeys_finish(pro, job, res); if (job) AH_Job_free(job); AB_Banking_ClearCryptTokenList(AH_HBCI_GetBankingApi(AH_Provider_GetHbci(pro))); return (res == -2) ? 0 : res; } int AH_Provider_GetCert(AB_PROVIDER *pro, AB_USER *u, int withProgress, int nounmount, int doLock) { AB_BANKING *ab; AH_HBCI *h; int rv; AH_DIALOG *dialog; uint32_t pid; assert(pro); assert(u); ab=AB_Provider_GetBanking(pro); assert(ab); h=AH_Provider_GetHbci(pro); assert(h); pid=GWEN_Gui_ProgressStart(GWEN_GUI_PROGRESS_ALLOW_EMBED | GWEN_GUI_PROGRESS_SHOW_PROGRESS | GWEN_GUI_PROGRESS_SHOW_ABORT, I18N("Getting Certificate"), I18N("We are now asking the server for its " "SSL certificate"), GWEN_GUI_PROGRESS_NONE, 0); /* first try */ dialog=AH_Dialog_new(u, pro); assert(dialog); rv=AH_Dialog_TestServer_Https(dialog); AH_Dialog_Disconnect(dialog); AH_Dialog_free(dialog); if (rv) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not connect to server (%d)", rv); GWEN_Gui_ProgressLog(pid, GWEN_LoggerLevel_Error, I18N("Could not connect to server")); GWEN_Gui_ProgressEnd(pid); return rv; } GWEN_Gui_ProgressLog(pid, GWEN_LoggerLevel_Error, I18N("Got certificate")); GWEN_Gui_ProgressEnd(pid); return 0; } int AH_Provider_GetItanModes(AB_PROVIDER *pro, AB_USER *u, AB_IMEXPORTER_CONTEXT *ctx, int withProgress, int nounmount, int doLock) { AB_BANKING *ab; AH_HBCI *h; AH_JOB *job; AH_OUTBOX *ob; int rv; const int *tm; char tbuf[256]; assert(pro); assert(u); ab=AB_Provider_GetBanking(pro); assert(ab); h=AH_Provider_GetHbci(pro); assert(h); if (doLock) { rv=AB_Provider_BeginExclUseUser(pro, u); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "Could not lock customer [%s] (%d)", AB_User_GetCustomerId(u), rv); snprintf(tbuf, sizeof(tbuf)-1, I18N("Could not lock user %s (%d)"), AB_User_GetUserId(u), rv); tbuf[sizeof(tbuf)-1]=0; GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, tbuf); return rv; } } job=AH_Job_GetItanModes_new(pro, u); if (!job) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Job not supported, should not happen"); if (doLock) AB_Provider_EndExclUseUser(pro, u, 1); return GWEN_ERROR_GENERIC; } AH_Job_AddSigner(job, AB_User_GetUserId(u)); ob=AH_Outbox_new(pro); AH_Outbox_AddJob(ob, job); rv=AH_Outbox_Execute(ob, ctx, withProgress, 1, 0); AH_Outbox_free(ob); if (rv) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not execute outbox."); if (doLock) AB_Provider_EndExclUseUser(pro, u, 1); AH_Job_free(job); if (!nounmount) AB_Banking_ClearCryptTokenList(AH_HBCI_GetBankingApi(h)); return rv; } tm=AH_Job_GetItanModes_GetModes(job); if (tm[0]==-1) { DBG_ERROR(AQHBCI_LOGDOMAIN, "No iTAN modes reported"); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("No iTAN modes reported.")); if (doLock) AB_Provider_EndExclUseUser(pro, u, 1); AH_Job_free(job); if (!nounmount) AB_Banking_ClearCryptTokenList(AH_HBCI_GetBankingApi(h)); return GWEN_ERROR_NO_DATA; } /* we have received tan methods, so there was a 3920 response. In this * special case we need to apply the job data, because otherwise we couldn't * fully connect to the server next time. */ rv=AH_Job_Commit(job, 0); if (rv) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not commit result.\n"); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("Could not commit result to the system")); if (doLock) AB_Provider_EndExclUseUser(pro, u, 1); AH_Job_free(job); if (!nounmount) AB_Banking_ClearCryptTokenList(AH_HBCI_GetBankingApi(h)); return rv; } if (doLock) { rv=AB_Provider_EndExclUseUser(pro, u, 0); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "Could not unlock customer [%s] (%d)", AB_User_GetCustomerId(u), rv); snprintf(tbuf, sizeof(tbuf)-1, I18N("Could not unlock user %s (%d)"), AB_User_GetUserId(u), rv); tbuf[sizeof(tbuf)-1]=0; GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, tbuf); AB_Provider_EndExclUseUser(pro, u, 1); AH_Job_free(job); if (!nounmount) AB_Banking_ClearCryptTokenList(AH_HBCI_GetBankingApi(h)); return rv; } } AH_Job_free(job); if (!nounmount) AB_Banking_ClearCryptTokenList(AH_HBCI_GetBankingApi(h)); return 0; } int AH_Provider_ChangePin(AB_PROVIDER *pro, AB_USER *u, AB_IMEXPORTER_CONTEXT *ctx, int withProgress, int nounmount, int doLock) { AB_BANKING *ab; AH_HBCI *h; AH_JOB *job; AH_OUTBOX *ob; int rv; char pwbuf[32]; assert(pro); assert(u); ab=AB_Provider_GetBanking(pro); assert(ab); h=AH_Provider_GetHbci(pro); assert(h); memset(pwbuf, 0, sizeof(pwbuf)); rv=GWEN_Gui_InputBox(GWEN_GUI_INPUT_FLAGS_NUMERIC | GWEN_GUI_INPUT_FLAGS_CONFIRM, I18N("Enter New Banking PIN"), I18N("Please enter a new banking PIN.\n" "You must only enter numbers, not letters.\n" "" "

" "Please enter a new banking PIN." "

" "

" "You must only enter numbers, not letters." "

" ""), pwbuf, 0, 8, 0); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } job=AH_Job_ChangePin_new(pro, u, pwbuf); if (!job) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Job not supported, should not happen"); return GWEN_ERROR_GENERIC; } AH_Job_AddSigner(job, AB_User_GetUserId(u)); ob=AH_Outbox_new(pro); AH_Outbox_AddJob(ob, job); rv=AH_Outbox_Execute(ob, ctx, withProgress, nounmount, doLock); AH_Outbox_free(ob); if (rv) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not execute outbox.\n"); AH_Job_free(job); if (!nounmount) AB_Banking_ClearCryptTokenList(AH_HBCI_GetBankingApi(h)); return rv; } if (AH_Job_HasErrors(job)) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Job has errors"); // TODO: show errors AH_Job_free(job); if (!nounmount) AB_Banking_ClearCryptTokenList(AH_HBCI_GetBankingApi(h)); return GWEN_ERROR_GENERIC; } else { rv=AH_Job_Commit(job, doLock); if (rv) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not commit result.\n"); AH_Job_free(job); if (!nounmount) AB_Banking_ClearCryptTokenList(AH_HBCI_GetBankingApi(h)); return rv; } } AH_Job_free(job); if (!nounmount) AB_Banking_ClearCryptTokenList(AH_HBCI_GetBankingApi(h)); return 0; } int AH_Provider_UnblockPin(AB_PROVIDER *pro, AB_USER *u, AB_IMEXPORTER_CONTEXT *ctx, int withProgress, int nounmount, int doLock) { AB_BANKING *ab; AH_HBCI *h; AH_OUTBOX *ob; int rv; AH_JOB *job; assert(pro); ab=AB_Provider_GetBanking(pro); assert(ab); h=AH_Provider_GetHbci(pro); assert(h); ob=AH_Outbox_new(pro); /* TODO: store user to free it later */ job=AH_Job_UnblockPin_new(pro, u); if (!job) { DBG_WARN(AQHBCI_LOGDOMAIN, "Job not supported with this account"); AH_Outbox_free(ob); return GWEN_ERROR_GENERIC; } AH_Job_AddSigner(job, AB_User_GetUserId(u)); AH_Outbox_AddJob(ob, job); AH_Job_free(job); rv=AH_Outbox_Execute(ob, ctx, withProgress, nounmount, doLock); if (rv) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not execute outbox.\n"); AH_Outbox_free(ob); if (!nounmount) AB_Banking_ClearCryptTokenList(AH_HBCI_GetBankingApi(h)); return rv; } AH_Outbox_free(ob); if (!nounmount) AB_Banking_ClearCryptTokenList(AH_HBCI_GetBankingApi(h)); return 0; } int AH_Provider_GetAccountSepaInfo(AB_PROVIDER *pro, AB_ACCOUNT *a, AB_IMEXPORTER_CONTEXT *ctx, int withProgress, int nounmount, int doLock) { AB_BANKING *ab; AH_HBCI *h; AH_OUTBOX *ob; uint32_t uid; int rv; assert(pro); ab=AB_Provider_GetBanking(pro); assert(ab); h=AH_Provider_GetHbci(pro); assert(h); ob=AH_Outbox_new(pro); uid=AB_Account_GetUserId(a); if (uid==0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "No user for this account"); } else { AB_USER *u; rv=AB_Provider_GetUser(pro, uid, 1, 1, &u); if (rv<0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Unknown user for this account"); } else { AH_JOB *job; /* TODO: store user to free it later */ job=AH_Job_GetAccountSepaInfo_new(pro, u, a); if (!job) { DBG_WARN(AQHBCI_LOGDOMAIN, "Job not supported with this account"); AH_Outbox_free(ob); return GWEN_ERROR_GENERIC; } AH_Job_AddSigner(job, AB_User_GetUserId(u)); AH_Outbox_AddJob(ob, job); AH_Job_free(job); } } rv=AH_Outbox_Execute(ob, ctx, withProgress, nounmount, doLock); if (rv) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not execute outbox.\n"); AH_Outbox_free(ob); if (!nounmount) AB_Banking_ClearCryptTokenList(AH_HBCI_GetBankingApi(h)); return rv; } AH_Outbox_free(ob); if (!nounmount) AB_Banking_ClearCryptTokenList(AH_HBCI_GetBankingApi(h)); return 0; } int AH_Provider_GetTargetAccount(AB_PROVIDER *pro, AB_ACCOUNT *a, AB_IMEXPORTER_CONTEXT *ctx, int withProgress, int nounmount, int doLock) { AB_BANKING *ab; AH_HBCI *h; AH_OUTBOX *ob; uint32_t uid; int rv; assert(pro); ab=AB_Provider_GetBanking(pro); assert(ab); h=AH_Provider_GetHbci(pro); assert(h); ob=AH_Outbox_new(pro); uid=AB_Account_GetUserId(a); if (uid==0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "No user for this account"); } else { AB_USER *u; rv=AB_Provider_GetUser(pro, uid, 1, 1, &u); if (rv<0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Unknown user for this account"); } else { AH_JOB *job; /* TODO: store user to free it later */ job=AH_Job_GetTargetAccount_new(pro, u, a); if (!job) { DBG_WARN(AQHBCI_LOGDOMAIN, "Job not supported with this account"); AH_Outbox_free(ob); return GWEN_ERROR_GENERIC; } AH_Job_AddSigner(job, AB_User_GetUserId(u)); AH_Outbox_AddJob(ob, job); AH_Job_free(job); } } rv=AH_Outbox_Execute(ob, ctx, withProgress, nounmount, doLock); if (rv) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not execute outbox.\n"); AH_Outbox_free(ob); if (!nounmount) AB_Banking_ClearCryptTokenList(AH_HBCI_GetBankingApi(h)); return rv; } AH_Outbox_free(ob); if (!nounmount) AB_Banking_ClearCryptTokenList(AH_HBCI_GetBankingApi(h)); return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/banking/provider_tan.h0000664000175000017500000000213114043610745023063 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2020 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_PROVIDER_TAN_H #define AH_PROVIDER_TAN_H #include "aqhbci/tan/tanmethod.h" #include #include int AH_Provider_InputTanWithChallenge(AB_PROVIDER *pro, AB_USER *u, const AH_TAN_METHOD *tanMethodDescription, const char *sChallenge, const char *sChallengeHhd, char *passwordBuffer, int passwordMinLen, int passwordMaxLen); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/banking/account.h0000664000175000017500000000475414043610745022040 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_ACCOUNT_H #define AH_ACCOUNT_H #include "aqhbci/aqhbci.h" /* for AQHBCI_API */ #include /** @defgroup G_AB_BE_AQHBCI_Account HBCI Account Extensions * @ingroup G_AB_BE_AQHBCI * @short HBCI-specific user functions * @author Martin Preuss * */ /*@{*/ #ifdef __cplusplus extern "C" { #endif /** @name Flags * */ /*@{*/ /** Prefer single transfers over multi transfers for this account */ #define AH_BANK_FLAGS_PREFER_SINGLE_TRANSFER 0x00000001 /** Prefer single debit notes over multi debit notes for this account */ #define AH_BANK_FLAGS_PREFER_SINGLE_DEBITNOTE 0x00000002 /* for this account there are KTV2 information availabel (e.g. account sub id) */ #define AH_BANK_FLAGS_KTV2 0x00000004 /* this account can be used with SEPA jobs */ #define AH_BANK_FLAGS_SEPA 0x00000008 /** Prefer single transfers over multi transfers for this account (SEPA) */ #define AH_BANK_FLAGS_SEPA_PREFER_SINGLE_TRANSFER 0x00000010 /** Prefer single debit notes over multi debit notes for this account (SEPA) */ #define AH_BANK_FLAGS_SEPA_PREFER_SINGLE_DEBITNOTE 0x00000020 /** prefer download of transactions as CAMT 052.001.02 (as opposed to SWIFT MT94x) */ #define AH_BANK_FLAGS_PREFER_CAMT_DOWNLOAD 0x00000040 #define AH_BANK_FLAGS_DEFAULT 0 /*@}*/ AQHBCI_API AB_ACCOUNT *AH_Account_new(AB_PROVIDER *pro); /** @name Flag Manipulation Functions * * See @ref AH_BANK_FLAGS_PREFER_SINGLE_TRANSFER and following. */ /*@{*/ AQHBCI_API void AH_Account_Flags_toDb(GWEN_DB_NODE *db, const char *name, uint32_t flags); AQHBCI_API uint32_t AH_Account_Flags_fromDb(GWEN_DB_NODE *db, const char *name); AQHBCI_API uint32_t AH_Account_GetFlags(const AB_ACCOUNT *a); AQHBCI_API void AH_Account_SetFlags(AB_ACCOUNT *a, uint32_t flags); AQHBCI_API void AH_Account_AddFlags(AB_ACCOUNT *a, uint32_t flags); AQHBCI_API void AH_Account_SubFlags(AB_ACCOUNT *a, uint32_t flags); /*@}*/ #ifdef __cplusplus } #endif /*@}*/ /* defgroup */ #endif /* AH_ACCOUNT_H */ aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/banking/provider_job.c0000664000175000017500000002334214546575647023100 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "provider_job.h" #include "aqhbci/ajobs/jobgetbalance_l.h" #include "aqhbci/ajobs/jobgettransactions_l.h" #include "aqhbci/ajobs/jobgettrans_camt_l.h" #include "aqhbci/ajobs/jobloadcellphone_l.h" #include "aqhbci/ajobs/jobsepaxfersingle_l.h" #include "aqhbci/ajobs/jobsepainternalxfer_l.h" #include "aqhbci/ajobs/jobsepaxfermulti_l.h" #include "aqhbci/ajobs/jobsepadebitdatedsinglecreate_l.h" #include "aqhbci/ajobs/jobsepadebitdatedmulticreate_l.h" #include "aqhbci/ajobs/jobsepacor1datedsinglecreate_l.h" #include "aqhbci/ajobs/jobsepacor1datedmulticreate_l.h" #include "aqhbci/ajobs/jobsepastandingorderdelete_l.h" #include "aqhbci/ajobs/jobsepastandingordercreate_l.h" #include "aqhbci/ajobs/jobsepastandingordermodify_l.h" #include "aqhbci/ajobs/jobsepastandingorderget_l.h" #include "aqhbci/ajobs/jobgetestatements_l.h" #include "aqhbci/ajobs/jobgetdepot_l.h" #include "aqhbci/ajobs/jobsepadebitsingle_l.h" /* deprecated job */ int AH_Provider_CreateHbciJob(AB_PROVIDER *pro, AB_USER *mu, AB_ACCOUNT *ma, int cmd, AH_JOB **pHbciJob) { AH_JOB *mj; uint32_t aFlags; assert(pro); aFlags=AH_Account_GetFlags(ma); mj=0; switch (cmd) { case AB_Transaction_CommandGetBalance: mj=AH_Job_GetBalance_new(pro, mu, ma); if (!mj) { DBG_INFO(AQHBCI_LOGDOMAIN, "Job not supported with this account"); return GWEN_ERROR_NOT_AVAILABLE; } break; case AB_Transaction_CommandGetTransactions: if (aFlags & AH_BANK_FLAGS_PREFER_CAMT_DOWNLOAD) { DBG_INFO(AQHBCI_LOGDOMAIN, "Customer prefers CAMT download"); mj=AH_Job_GetTransactionsCAMT_new(pro, mu, ma); if (!mj) { DBG_WARN(AQHBCI_LOGDOMAIN, "CAMT download job not supported with this account, falling back to SWIFT"); } } if (!mj) { mj=AH_Job_GetTransactions_new(pro, mu, ma); if (!mj) { DBG_INFO(AQHBCI_LOGDOMAIN, "Job not supported with this account"); return GWEN_ERROR_NOT_AVAILABLE; } } break; case AB_Transaction_CommandLoadCellPhone: mj=AH_Job_LoadCellPhone_new(pro, mu, ma); if (!mj) { DBG_INFO(AQHBCI_LOGDOMAIN, "Job not supported with this account"); return GWEN_ERROR_NOT_AVAILABLE; } break; case AB_Transaction_CommandSepaTransfer: if (!(aFlags & AH_BANK_FLAGS_SEPA_PREFER_SINGLE_TRANSFER)) { DBG_INFO(AQHBCI_LOGDOMAIN, "Customer prefers multi jobs"); /* try multi transfer first */ mj=AH_Job_SepaTransferMulti_new(pro, mu, ma); if (!mj) { DBG_WARN(AQHBCI_LOGDOMAIN, "Job \"SepaTransferMulti\" not supported with this account"); /* try single transfer */ mj=AH_Job_SepaTransferSingle_new(pro, mu, ma); if (!mj) { DBG_WARN(AQHBCI_LOGDOMAIN, "Job \"SepaTransferSingle\" not supported with this account"); return GWEN_ERROR_NOT_AVAILABLE; } } } else { /* try single job first */ mj=AH_Job_SepaTransferSingle_new(pro, mu, ma); if (!mj) { DBG_WARN(AQHBCI_LOGDOMAIN, "Job \"SepaTransferSingle\" not supported with this account"); /* try multi transfer next */ mj=AH_Job_SepaTransferMulti_new(pro, mu, ma); if (!mj) { DBG_INFO(AQHBCI_LOGDOMAIN, "Job \"SepaTransferMulti\" not supported with this account"); return GWEN_ERROR_NOT_AVAILABLE; } } } break; case AB_Transaction_CommandSepaInternalTransfer: mj=AH_Job_SepaInternalTransfer_new(pro, mu, ma); if (!mj) { DBG_INFO(AQHBCI_LOGDOMAIN, "Job not supported with this account"); return GWEN_ERROR_NOT_AVAILABLE; } break; case AB_Transaction_CommandSepaDebitNote: if (!(aFlags & AH_BANK_FLAGS_SEPA_PREFER_SINGLE_DEBITNOTE)) { DBG_INFO(AQHBCI_LOGDOMAIN, "Customer prefers multi jobs"); /* try multi transfer first */ mj=AH_Job_SepaDebitDatedMultiCreate_new(pro, mu, ma); if (!mj) { DBG_WARN(AQHBCI_LOGDOMAIN, "SepaDebitDatedMultiCreate not supported with this account"); /* try single transfer */ mj=AH_Job_SepaDebitDatedSingleCreate_new(pro, mu, ma); if (!mj) { DBG_WARN(AQHBCI_LOGDOMAIN, "Job \"SepaDebitDatedSingleCreate\" not supported with this account, trying old single debit"); /* try old singleDebit job next */ mj=AH_Job_SepaDebitSingle_new(pro, mu, ma); if (!mj) { DBG_INFO(AQHBCI_LOGDOMAIN, "Job \"SepaDebitSingle\" not supported with this account"); return GWEN_ERROR_NOT_AVAILABLE; } } } } else { /* try single job first */ mj=AH_Job_SepaDebitDatedSingleCreate_new(pro, mu, ma); if (!mj) { DBG_WARN(AQHBCI_LOGDOMAIN, "SepaDebitDatedSingleCreate not supported with this account"); /* try old singleDebit job next */ mj=AH_Job_SepaDebitSingle_new(pro, mu, ma); if (!mj) { DBG_INFO(AQHBCI_LOGDOMAIN, "Job \"SepaDebitSingle\" not supported with this account"); /* try multi transfer next */ mj=AH_Job_SepaDebitDatedMultiCreate_new(pro, mu, ma); if (!mj) { DBG_INFO(AQHBCI_LOGDOMAIN, "SepaDebitDatedMultiCreate not supported with this account"); return GWEN_ERROR_NOT_AVAILABLE; } } } } break; case AB_Transaction_CommandSepaFlashDebitNote: if (!(aFlags & AH_BANK_FLAGS_SEPA_PREFER_SINGLE_DEBITNOTE)) { DBG_INFO(AQHBCI_LOGDOMAIN, "Customer prefers multi jobs"); /* try multi transfer first */ mj=AH_Job_SepaCor1DebitDatedMultiCreate_new(pro, mu, ma); if (!mj) { DBG_WARN(AQHBCI_LOGDOMAIN, "SepaCor1DebitDatedMultiCreate not supported with this account"); /* try single transfer */ mj=AH_Job_SepaCor1DebitDatedSingleCreate_new(pro, mu, ma); if (!mj) { DBG_WARN(AQHBCI_LOGDOMAIN, "Job \"SepaCor1DebitDatedSingleCreate\" not supported with this account"); return GWEN_ERROR_NOT_AVAILABLE; } } } else { /* try single job first */ mj=AH_Job_SepaCor1DebitDatedSingleCreate_new(pro, mu, ma); if (!mj) { DBG_WARN(AQHBCI_LOGDOMAIN, "SepaCor1DebitDatedSingleCreate not supported with this account"); /* try multi transfer next */ mj=AH_Job_SepaCor1DebitDatedMultiCreate_new(pro, mu, ma); if (!mj) { DBG_INFO(AQHBCI_LOGDOMAIN, "SepaCor1DebitDatedMultiCreate not supported with this account"); return GWEN_ERROR_NOT_AVAILABLE; } } } break; case AB_Transaction_CommandSepaCreateStandingOrder: mj=AH_Job_SepaStandingOrderCreate_new(pro, mu, ma); if (!mj) { DBG_INFO(AQHBCI_LOGDOMAIN, "Job not supported with this account"); return GWEN_ERROR_NOT_AVAILABLE; } break; case AB_Transaction_CommandSepaModifyStandingOrder: mj=AH_Job_SepaStandingOrderModify_new(pro, mu, ma); if (!mj) { DBG_INFO(AQHBCI_LOGDOMAIN, "Job not supported with this account"); return GWEN_ERROR_NOT_AVAILABLE; } break; case AB_Transaction_CommandSepaDeleteStandingOrder: mj=AH_Job_SepaStandingOrderDelete_new(pro, mu, ma); if (!mj) { DBG_INFO(AQHBCI_LOGDOMAIN, "Job not supported with this account"); return GWEN_ERROR_NOT_AVAILABLE; } break; case AB_Transaction_CommandSepaGetStandingOrders: mj=AH_Job_SepaStandingOrderGet_new(pro, mu, ma); if (!mj) { DBG_INFO(AQHBCI_LOGDOMAIN, "Job not supported with this account"); return GWEN_ERROR_NOT_AVAILABLE; } break; case AB_Transaction_CommandGetEStatements: mj=AH_Job_GetEStatements_new(pro, mu, ma); if (!mj) { DBG_INFO(AQHBCI_LOGDOMAIN, "Job GetEStatements not supported with this account, trying GetEStatements2"); mj=AH_Job_GetEStatements2_new(pro, mu, ma); if (!mj) { DBG_INFO(AQHBCI_LOGDOMAIN, "Neither job GetEStatements nor GetEStatements2 supported with this account"); return GWEN_ERROR_NOT_AVAILABLE; } } break; case AB_Transaction_CommandGetDepot: mj=AH_Job_GetDepot_new(pro, mu, ma); if (!mj) { DBG_INFO(AQHBCI_LOGDOMAIN, "Job not supported with this account"); return GWEN_ERROR_NOT_AVAILABLE; } break; default: DBG_INFO(AQHBCI_LOGDOMAIN, "Job not supported by AqHBCI"); return GWEN_ERROR_NOT_AVAILABLE; } /* switch */ assert(mj); DBG_INFO(AQHBCI_LOGDOMAIN, "Job successfully created"); *pHbciJob=mj; return 0; } int AH_Provider_GetMultiHbciJob(AB_PROVIDER *pro, AH_OUTBOX *outbox, AB_USER *mu, AB_ACCOUNT *ma, int cmd, AH_JOB **pHbciJob) { AH_JOB *mj=NULL; assert(pro); assert(mu); switch (cmd) { case AB_Transaction_CommandSepaTransfer: mj=AH_Outbox_FindTransferJob(outbox, mu, ma, "JobSepaTransferMulti"); break; case AB_Transaction_CommandSepaDebitNote: mj=AH_Outbox_FindTransferJob(outbox, mu, ma, "JobSepaDebitDatedMultiCreate"); break; default: DBG_INFO(AQHBCI_LOGDOMAIN, "No Multi jobs defined for this job type"); break; } /* switch */ if (mj) { DBG_INFO(AQHBCI_LOGDOMAIN, "Multi job found"); *pHbciJob=mj; return 0; } else { DBG_INFO(AQHBCI_LOGDOMAIN, "No multi job found"); return GWEN_ERROR_NOT_FOUND; } } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/banking/provider_accspec.h0000664000175000017500000000173014043610745023706 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2020 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_PROVIDER_ACCSPEC_H #define AH_PROVIDER_ACCSPEC_H #include #include #include #include int AH_Provider_UpdateAccountSpec(AB_PROVIDER *pro, AB_ACCOUNT_SPEC *as, int doLock); AB_ACCOUNT_SPEC *AH_Provider_CreateAccountSpecWithUserAndAccount(AB_PROVIDER *pro, AB_USER *u, AB_ACCOUNT *a); int AH_Provider_CreateAndWriteAccountSpecWithUserAndAccount(AB_PROVIDER *pro, AB_USER *u, AB_ACCOUNT *a); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/banking/user.h0000664000175000017500000001762714043610745021365 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_USER_H #define AH_USER_H #include "aqhbci/aqhbci.h" #include "aqhbci/tan/tanmethod.h" #include #include #include /** @defgroup G_AB_BE_AQHBCI_USER HBCI User Extensions * @ingroup G_AB_BE_AQHBCI * @short HBCI-specific user functions * @author Martin Preuss * */ /*@{*/ #include #include #include #ifdef __cplusplus extern "C" { #endif /** @name HBCI User Flags * */ /*@{*/ /** bank doesn't sign its messages */ #define AH_USER_FLAGS_BANK_DOESNT_SIGN 0x00000001 /** bank uses correct signature sequence counters for its messages */ #define AH_USER_FLAGS_BANK_USES_SIGNSEQ 0x00000002 #define AH_USER_FLAGS_RESERVED1 0x00000004 #define AH_USER_FLAGS_RESERVED2 0x00000008 /** this flag is set automatically by AqHBCI upon BPD/UPD receiption. It * indicates that some jobs are supported even when there is no UPD job * description for it */ #define AH_USER_FLAGS_IGNORE_UPD 0x00000020 /** do not encode message in BASE64 (needed for APO bank) */ #define AH_USER_FLAGS_NO_BASE64 0x00000080 /** Normally the SWIFT parser removed double blanks, with this flag set it * no longer does (as requested by Andreas Filsinger). */ #define AH_USER_FLAGS_KEEP_MULTIPLE_BLANKS 0x00000100 /** Some TAN jobs have a field for the account to be used to charge * for SMS. This field is semi-optional (some banks need it, some need * you not to use it). * If this flag is set then the SMS account specification is omitted. */ #define AH_USER_FLAGS_TAN_OMIT_SMS_ACCOUNT 0x00000200 #define AH_USER_FLAGS_USE_STRICT_SEPA_CHARSET 0x00000800 /* ignore error "GNUTLS_E_PREMATURE_TERMINATION" */ /*#define AH_USER_FLAGS_TLS_IGN_PREMATURE_CLOSE 0x00001000 (ignored) */ /** * This flag is set when there is no public sign key of the bank * and the user has been informed about it. */ #define AH_USER_FLAGS_VERIFY_NO_BANKSIGNKEY 0x00002000 /*@}*/ /** @name Functions for Flags and Status * */ /*@{*/ AQHBCI_API void AH_User_Flags_toDb(GWEN_DB_NODE *db, const char *name, uint32_t flags); AQHBCI_API uint32_t AH_User_Flags_fromDb(GWEN_DB_NODE *db, const char *name); typedef enum { AH_UserStatusNew=0, AH_UserStatusEnabled, AH_UserStatusPending, AH_UserStatusDisabled, AH_UserStatusUnknown=999 } AH_USER_STATUS; AQHBCI_API const char *AH_User_Status_toString(AH_USER_STATUS st); AQHBCI_API AH_USER_STATUS AH_User_Status_fromString(const char *s); AQHBCI_API AH_USER_STATUS AH_User_GetStatus(const AB_USER *u); AQHBCI_API void AH_User_SetStatus(AB_USER *u, AH_USER_STATUS i); /** * Returns 0 if the bank doesn't sign messages, 1 otherwise. * This can be used in case the bank sends a sign key upon request but * never signs it's messages. */ AQHBCI_API uint32_t AH_User_GetFlags(const AB_USER *u); AQHBCI_API void AH_User_SetFlags(AB_USER *u, uint32_t flags); AQHBCI_API void AH_User_AddFlags(AB_USER *u, uint32_t flags); AQHBCI_API void AH_User_SubFlags(AB_USER *u, uint32_t flags); /*@}*/ /** @name PIN/TAN Specific Functions * */ /*@{*/ AQHBCI_API const int *AH_User_GetTanMethodList(const AB_USER *u); AQHBCI_API int AH_User_GetTanMethodCount(const AB_USER *u); AQHBCI_API int AH_User_HasTanMethod(const AB_USER *u, int method); AQHBCI_API int AH_User_HasTanMethodOtherThan(const AB_USER *u, int method); AQHBCI_API void AH_User_AddTanMethod(AB_USER *u, int method); AQHBCI_API void AH_User_ClearTanMethodList(AB_USER *u); AQHBCI_API int AH_User_GetSelectedTanMethod(const AB_USER *u); AQHBCI_API void AH_User_SetSelectedTanMethod(AB_USER *u, int i); /** * Return selected TAN inpout method (see @ref AB_BANKING_TANMETHOD_TEXT and following). * * @return selected mechanism (0 if none selected) */ int AH_User_GetSelectedTanInputMechanism(const AB_USER *u); void AH_User_SetSelectedTanInputMechanism(AB_USER *u, int i); AQHBCI_API const char *AH_User_GetHttpContentType(const AB_USER *u); AQHBCI_API void AH_User_SetHttpContentType(AB_USER *u, const char *s); /*@}*/ AQHBCI_API const char *AH_User_GetTokenType(const AB_USER *u); AQHBCI_API void AH_User_SetTokenType(AB_USER *u, const char *s); AQHBCI_API const char *AH_User_GetTokenName(const AB_USER *u); AQHBCI_API void AH_User_SetTokenName(AB_USER *u, const char *s); AQHBCI_API uint32_t AH_User_GetTokenContextId(const AB_USER *u); AQHBCI_API void AH_User_SetTokenContextId(AB_USER *u, uint32_t id); /** @name Miscellanous Settings * */ /*@{*/ /** * Crypt mode (see @ref AH_CryptMode_Ddv and following). */ AQHBCI_API AH_CRYPT_MODE AH_User_GetCryptMode(const AB_USER *u); AQHBCI_API void AH_User_SetCryptMode(AB_USER *u, AH_CRYPT_MODE m); AQHBCI_API int AH_User_GetRdhType(const AB_USER *u); AQHBCI_API void AH_User_SetRdhType(AB_USER *u, int i); AQHBCI_API const char *AH_User_GetPeerId(const AB_USER *u); AQHBCI_API void AH_User_SetPeerId(AB_USER *u, const char *s); AQHBCI_API const char *AH_User_GetSystemId(const AB_USER *u); AQHBCI_API void AH_User_SetSystemId(AB_USER *u, const char *s); AQHBCI_API const GWEN_URL *AH_User_GetServerUrl(const AB_USER *u); AQHBCI_API void AH_User_SetServerUrl(AB_USER *u, const GWEN_URL *url); AQHBCI_API int AH_User_GetHbciVersion(const AB_USER *u); AQHBCI_API void AH_User_SetHbciVersion(AB_USER *u, int i); AQHBCI_API const char *AH_User_GetSepaTransferProfile(const AB_USER *u); AQHBCI_API void AH_User_SetSepaTransferProfile(AB_USER *u, const char *profileName); AQHBCI_API const char *AH_User_GetSepaDebitNoteProfile(const AB_USER *u); AQHBCI_API void AH_User_SetSepaDebitNoteProfile(AB_USER *u, const char *profileName); /*@}*/ /** @name Pin/Tan Settings * */ /*@{*/ /** * Returns the major HTTP version to be used in PIN/TAN mode (defaults to 1). */ AQHBCI_API int AH_User_GetHttpVMajor(const AB_USER *u); AQHBCI_API void AH_User_SetHttpVMajor(AB_USER *u, int i); /** * Returns the minor HTTP version to be used in PIN/TAN mode (defaults to 1). */ AQHBCI_API int AH_User_GetHttpVMinor(const AB_USER *u); AQHBCI_API void AH_User_SetHttpVMinor(AB_USER *u, int i); AQHBCI_API const char *AH_User_GetHttpUserAgent(const AB_USER *u); AQHBCI_API void AH_User_SetHttpUserAgent(AB_USER *u, const char *s); AQHBCI_API const char *AH_User_GetTanMediumId(const AB_USER *u); AQHBCI_API void AH_User_SetTanMediumId(AB_USER *u, const char *s); /*@}*/ /** @name Passwords/Pins/Tans * */ /*@{*/ AQHBCI_API int AH_User_MkPasswdName(const AB_USER *u, GWEN_BUFFER *buf); AQHBCI_API int AH_User_MkPinName(const AB_USER *u, GWEN_BUFFER *buf); AQHBCI_API int AH_User_MkTanName(const AB_USER *u, const char *challenge, GWEN_BUFFER *buf); /** * The list returned is only valid until the next call to this function! */ AQHBCI_API const AH_TAN_METHOD_LIST *AH_User_GetTanMethodDescriptions(AB_USER *u); /*@}*/ AQHBCI_API int AH_User_GetMaxTransfersPerJob(const AB_USER *u); AQHBCI_API void AH_User_SetMaxTransfersPerJob(AB_USER *u, int i); AQHBCI_API int AH_User_GetMaxDebitNotesPerJob(const AB_USER *u); AQHBCI_API void AH_User_SetMaxDebitNotesPerJob(AB_USER *u, int i); AQHBCI_API void AH_User_SetBankPubSignKey(AB_USER *u, GWEN_CRYPT_KEY *bankPubKey); AQHBCI_API GWEN_CRYPT_KEY *AH_User_GetBankPubSignKey(const AB_USER *u); AQHBCI_API void AH_User_SetBankPubCryptKey(AB_USER *u, GWEN_CRYPT_KEY *bankPubKey); AQHBCI_API GWEN_CRYPT_KEY *AH_User_GetBankPubCryptKey(const AB_USER *u); /*@}*/ /* defgroup */ #ifdef __cplusplus } #endif #endif /* AH_USER_H */ aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/banking/provider_online.h0000664000175000017500000002022614156464025023575 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2020 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_PROVIDER_ONLINE_H #define AH_PROVIDER_ONLINE_H #include #include #include #include "aqhbci/joblayer/job_l.h" #include "aqhbci/applayer/outbox_l.h" /** @name Server Interactive Functions * * Functions in this group are used from setup wizards or tools. * They send requests to the server (including opening and closing of the * progress dialog by calling @ref AB_Banking_ProgressStart etc). */ /*@{*/ /** * Anonymously retrieve BPD ("Bankparameterdaten") for the given user. * @param pro pointer to the HBCI provider * @param u user for which the BPD is to be received * @param withTanSeg include "HKTAN:6"-Segment (needed for Strong Customer Authentication) * @param nounmount if !=0 then the user's medium is not unmounted in the end. * This is used by setup wizards to avoid having to enter a pin too often. */ int AH_Provider_GetBankInfo(AB_PROVIDER *pro, AB_USER *u, AB_IMEXPORTER_CONTEXT *ctx, int withTanSeg, int withProgress, int nounmount, int doLock); /** * Retrieve a list of accounts. Not all banks support this. If the bank does * then the retrieved accounts are automatically added to AqBanking. * @param pro pointer to the HBCI provider * @param u user for which the list of accounts is to be received * @param nounmount if !=0 then the user's medium is not unmounted in the end. * This is used by setup wizards to avoid having to enter a pin too often. */ int AH_Provider_GetAccounts(AB_PROVIDER *pro, AB_USER *u, AB_IMEXPORTER_CONTEXT *ctx, int withProgress, int nounmount, int doLock); /** * Retrieve the system id for the given user. This is only needed for * PIN/TAN and for RDH mode. * @param pro pointer to the HBCI provider * @param u user for which the system id is to be received * @param nounmount if !=0 then the user's medium is not unmounted in the end. * This is used by setup wizards to avoid having to enter a pin too often. */ int AH_Provider_GetSysId(AB_PROVIDER *pro, AB_USER *u, AB_IMEXPORTER_CONTEXT *ctx, int withProgress, int nounmount, int doLock); /** * Retrieve the public server keys for the given user. This is only needed for * PIN/TAN and for RDH mode. * @param pro pointer to the HBCI provider * @param u user for which the public keys are to be received * @param nounmount if !=0 then the user's medium is not unmounted in the end. * This is used by setup wizards to avoid having to enter a pin too often. */ int AH_Provider_GetServerKeys(AB_PROVIDER *pro, AB_USER *u, AB_IMEXPORTER_CONTEXT *ctx, int withProgress, int nounmount, int doLock); /** * Send the public keys of the given user. This is only needed for * PIN/TAN and for RDH mode. * @param pro pointer to the HBCI provider * @param u user for which the public keys are to be sent * @param nounmount if !=0 then the user's medium is not unmounted in the end. * This is used by setup wizards to avoid having to enter a pin too often. */ int AH_Provider_SendUserKeys(AB_PROVIDER *pro, AB_USER *u, AB_IMEXPORTER_CONTEXT *ctx, int withProgress, int nounmount, int doLock); /** * Send the public keys of the given user. This is only needed for * PIN/TAN and for RDH mode. * In addition to @ref AH_Provider_SendUserKeys this function also sends the * authentication key if requested. * @param pro pointer to the HBCI provider * @param u user for which the public keys are to be sent * @param nounmount if !=0 then the user's medium is not unmounted in the end. * This is used by setup wizards to avoid having to enter a pin too often. */ int AH_Provider_SendUserKeys2(AB_PROVIDER *pro, AB_USER *u, AB_IMEXPORTER_CONTEXT *ctx, int withAuthKey, int withProgress, int nounmount, int doLock); /** */ int AH_Provider_ChangeUserKeys(AB_PROVIDER *pro, AB_USER *u, GWEN_DB_NODE *args, int withProgress, int nounmount, int doLock); /** * Retrieve the SSL certificate for the given user. This is only needed for * PIN/TAN mode. * @param pro pointer to the HBCI provider * @param u user for which the SSL certificate is to be received * @param nounmount if !=0 then the user's medium is not unmounted in the end. * This is used by setup wizards to avoid having to enter a pin too often. */ int AH_Provider_GetCert(AB_PROVIDER *pro, AB_USER *u, int withProgress, int nounmount, int doLock); /** * Ask the server for the list of supported iTAN modes. Not all servers * support iTAN so it is ok for the server to not report any modes. * @param pro pointer to the HBCI provider * @param u user for which the list of iTAN modes is to be received * @param nounmount if !=0 then the user's medium is not unmounted in the end. * This is used by setup wizards to avoid having to enter a pin too often. */ int AH_Provider_GetItanModes(AB_PROVIDER *pro, AB_USER *u, AB_IMEXPORTER_CONTEXT *ctx, int withProgress, int nounmount, int doLock); /** * Ask the user for a new PIN and make the server change the PIN to the * newly entered one. * @param pro pointer to the HBCI provider * @param u user for which the pin is to be changed * @param nounmount if !=0 then the user's medium is not unmounted in the end. * This is used by setup wizards to avoid having to enter a pin too often. */ int AH_Provider_ChangePin(AB_PROVIDER *pro, AB_USER *u, AB_IMEXPORTER_CONTEXT *ctx, int withProgress, int nounmount, int doLock); /** * Unblock the PIN in Pin-TAN mode. * @param pro pointer to the HBCI provider * @param u user for which the pin is to be changed * @param ctx im-/exporter context to receive info from the bank * @param nounmount if !=0 then the user's medium is not unmounted in the end. * This is used by setup wizards to avoid having to enter a pin too often. */ int AH_Provider_UnblockPin(AB_PROVIDER *pro, AB_USER *u, AB_IMEXPORTER_CONTEXT *ctx, int withProgress, int nounmount, int doLock); /** * Request SEPA information for a given account. This info is then stored * within the AqBanking account information (IBAN, BIC). * @param pro pointer to the HBCI provider * @param a account for which the info is to be requested * @param nounmount if !=0 then the user's medium is not unmounted in the end. * This is used by setup wizards to avoid having to enter a pin too often. */ int AH_Provider_GetAccountSepaInfo(AB_PROVIDER *pro, AB_ACCOUNT *a, AB_IMEXPORTER_CONTEXT *ctx, int withProgress, int nounmount, int doLock); /** * Request target accounts for a SEPA internal transfer for a given account. This info is then stored * within the AqBanking account information (IBAN, BIC). * @param pro pointer to the HBCI provider * @param a account for which the info is to be requested * @param nounmount if !=0 then the user's medium is not unmounted in the end. * This is used by setup wizards to avoid having to enter a pin too often. */ int AH_Provider_GetTargetAccount(AB_PROVIDER *pro, AB_ACCOUNT *a, AB_IMEXPORTER_CONTEXT *ctx, int withProgress, int nounmount, int doLock); /*@}*/ #endif aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/banking/account_p.h0000664000175000017500000000174614044534776022367 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_ACCOUNT_P_H #define AH_ACCOUNT_P_H #include "aqhbci/msglayer/hbci_l.h" #include "aqhbci/banking/account_l.h" typedef struct AH_ACCOUNT AH_ACCOUNT; struct AH_ACCOUNT { AH_HBCI *hbci; uint32_t flags; GWEN_DB_NODE *dbTempUpd; AB_ACCOUNT_READFROMDB_FN readFromDbFn; AB_ACCOUNT_WRITETODB_FN writeToDbFn; }; static void GWENHYWFAR_CB AH_Account_freeData(void *bp, void *p); static int AH_Account_ReadFromDb(AB_ACCOUNT *a, GWEN_DB_NODE *db); static int AH_Account_WriteToDb(const AB_ACCOUNT *a, GWEN_DB_NODE *db); #endif /* AH_ACCOUNT_P_H */ aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/banking/Makefile.in0000644000175000017500000006450115037736025022276 00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/libs/plugins/backends/aqhbci/banking ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/distri.m4 $(top_srcdir)/m4/gwenhywfar.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/os.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libhbcibanking_la_LIBADD = am_libhbcibanking_la_OBJECTS = provider.lo provider_accspec.lo \ provider_dialogs.lo provider_iniletter.lo provider_job.lo \ provider_keys.lo provider_online.lo provider_sendcmd.lo \ provider_tan.lo provider_update.lo account.lo user.lo libhbcibanking_la_OBJECTS = $(am_libhbcibanking_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/account.Plo ./$(DEPDIR)/provider.Plo \ ./$(DEPDIR)/provider_accspec.Plo \ ./$(DEPDIR)/provider_dialogs.Plo \ ./$(DEPDIR)/provider_iniletter.Plo \ ./$(DEPDIR)/provider_job.Plo ./$(DEPDIR)/provider_keys.Plo \ ./$(DEPDIR)/provider_online.Plo \ ./$(DEPDIR)/provider_sendcmd.Plo ./$(DEPDIR)/provider_tan.Plo \ ./$(DEPDIR)/provider_update.Plo ./$(DEPDIR)/user.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libhbcibanking_la_SOURCES) DIST_SOURCES = $(libhbcibanking_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac HEADERS = $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADD_ACLOCAL_FLAGS = @ADD_ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AQBANKING_CLI_VERSION_STRING = @AQBANKING_CLI_VERSION_STRING@ AQBANKING_FINTS_VERSION_STRING = @AQBANKING_FINTS_VERSION_STRING@ AQBANKING_SO_AGE = @AQBANKING_SO_AGE@ AQBANKING_SO_CURRENT = @AQBANKING_SO_CURRENT@ AQBANKING_SO_EFFECTIVE = @AQBANKING_SO_EFFECTIVE@ AQBANKING_SO_REVISION = @AQBANKING_SO_REVISION@ AQBANKING_VERSION_BUILD = @AQBANKING_VERSION_BUILD@ AQBANKING_VERSION_FULL_STRING = @AQBANKING_VERSION_FULL_STRING@ AQBANKING_VERSION_MAJOR = @AQBANKING_VERSION_MAJOR@ AQBANKING_VERSION_MINOR = @AQBANKING_VERSION_MINOR@ AQBANKING_VERSION_PATCHLEVEL = @AQBANKING_VERSION_PATCHLEVEL@ AQBANKING_VERSION_RELEASE_STRING = @AQBANKING_VERSION_RELEASE_STRING@ AQBANKING_VERSION_STRING = @AQBANKING_VERSION_STRING@ AQBANKING_VERSION_TAG = @AQBANKING_VERSION_TAG@ AQEBICS_CFLAGS = @AQEBICS_CFLAGS@ AQEBICS_LIBS = @AQEBICS_LIBS@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATETIME = @DATETIME@ DEFS = @DEFS@ -DLOCALEDIR=\"$(localedir)\" \ -DAQHBCI_PLUGINS=\"$(aqhbci_plugindir)\" DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_EXCLUDE_PATTERNS = @DOXYGEN_EXCLUDE_PATTERNS@ DOXYGEN_FILE_PATTERNS = @DOXYGEN_FILE_PATTERNS@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENGUI_GTK2_CFLAGS = @GWENGUI_GTK2_CFLAGS@ GWENGUI_GTK2_LIBS = @GWENGUI_GTK2_LIBS@ GWENHYWFAR_MINIMUM_VERSION = @GWENHYWFAR_MINIMUM_VERSION@ HAVE_GWENGUI_GTK2 = @HAVE_GWENGUI_GTK2@ HAVE_I18N = @HAVE_I18N@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIBXSLT_CFLAGS = @LIBXSLT_CFLAGS@ LIBXSLT_LIBS = @LIBXSLT_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_SUPPORTS_QT = @MSGFMT_SUPPORTS_QT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ TUTORIALS = @TUTORIALS@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XMLMERGE = @XMLMERGE@ XMLSEC_CFLAGS = @XMLSEC_CFLAGS@ XMLSEC_LIBS = @XMLSEC_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ aqbanking_backends = @aqbanking_backends@ aqbanking_cfg_searchdir = @aqbanking_cfg_searchdir@ aqbanking_data_searchdir = @aqbanking_data_searchdir@ aqbanking_headerdir = @aqbanking_headerdir@ aqbanking_headerdir_am = @aqbanking_headerdir_am@ aqbanking_includes = @aqbanking_includes@ aqbanking_internal_libs = @aqbanking_internal_libs@ aqbanking_ldflags = @aqbanking_ldflags@ aqbanking_libs = @aqbanking_libs@ aqbanking_locale_searchdir = @aqbanking_locale_searchdir@ aqbanking_modules = @aqbanking_modules@ aqbanking_pkgdatadir = @aqbanking_pkgdatadir@ aqbanking_plugin_searchdir = @aqbanking_plugin_searchdir@ aqbanking_plugindir = @aqbanking_plugindir@ aqbanking_plugins_backends_dirs = @aqbanking_plugins_backends_dirs@ aqbanking_plugins_backends_libs = @aqbanking_plugins_backends_libs@ aqbanking_plugins_bankinfo_dirs = @aqbanking_plugins_bankinfo_dirs@ aqbanking_plugins_bankinfo_libs = @aqbanking_plugins_bankinfo_libs@ aqbanking_plugins_imexporters_dirs = @aqbanking_plugins_imexporters_dirs@ aqbanking_plugins_imexporters_libs = @aqbanking_plugins_imexporters_libs@ aqbanking_plugins_parsers_dirs = @aqbanking_plugins_parsers_dirs@ aqbanking_symlinkdir = @aqbanking_symlinkdir@ aqbanking_sys_is_windows = @aqbanking_sys_is_windows@ aqbankingpp_modules = @aqbankingpp_modules@ aqebics_datadir = @aqebics_datadir@ aqebics_includes = @aqebics_includes@ aqebics_internal_libs = @aqebics_internal_libs@ aqebics_ldflags = @aqebics_ldflags@ aqebics_libs = @aqebics_libs@ aqfints_datadir = @aqfints_datadir@ aqhbci_datadir = @aqhbci_datadir@ aqhbci_includes = @aqhbci_includes@ aqhbci_internal_libs = @aqhbci_internal_libs@ aqhbci_ldflags = @aqhbci_ldflags@ aqhbci_libs = @aqhbci_libs@ aqofxconnect_includes = @aqofxconnect_includes@ aqofxconnect_internal_libs = @aqofxconnect_internal_libs@ aqofxconnect_libs = @aqofxconnect_libs@ aqpaypal_includes = @aqpaypal_includes@ aqpaypal_internal_libs = @aqpaypal_internal_libs@ aqpaypal_libs = @aqpaypal_libs@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gmp_libs = @gmp_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_dir = @gwenhywfar_dir@ gwenhywfar_has_crypt = @gwenhywfar_has_crypt@ gwenhywfar_headers = @gwenhywfar_headers@ gwenhywfar_includes = @gwenhywfar_includes@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_plugins = @gwenhywfar_plugins@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = $(datadir)/locale localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ typemaker2_exe = @typemaker2_exe@ visibility_cflags = @visibility_cflags@ with_aqebics = @with_aqebics@ with_aqhbci = @with_aqhbci@ AM_CFLAGS = -DBUILDING_AQBANKING @visibility_cflags@ AM_CPPFLAGS = -I$(top_srcdir)/src/libs -I$(top_builddir)/src/libs $(gwenhywfar_includes) \ -I$(srcdir)/../.. \ -I$(srcdir)/../msglayer -I$(srcdir)/../joblayer \ -I$(srcdir)/../applayer -I$(srcdir)/.. \ -I$(srcdir)/../tan \ -I$(srcdir)/../ajobs -I$(srcdir)/../admjobs \ -I$(srcdir)/../dialogs -I$(srcdir)/../control noinst_LTLIBRARIES = libhbcibanking.la noinst_HEADERS = \ provider_l.h \ provider_p.h \ provider.h \ provider_accspec.h \ provider_dialogs.h \ provider_iniletter.h \ provider_job.h \ provider_keys.h \ provider_online.h \ provider_sendcmd.h \ provider_tan.h \ provider_update.h \ user.h \ user_p.h \ user_l.h \ account.h \ account_l.h \ account_p.h #iheaderdir=@aqbanking_headerdir_am@/aqhbci #iheader_HEADERS= libhbcibanking_la_SOURCES = \ provider.c \ provider_accspec.c \ provider_dialogs.c \ provider_iniletter.c \ provider_job.c \ provider_keys.c \ provider_online.c \ provider_sendcmd.c \ provider_tan.c \ provider_update.c \ account.c \ user.c EXTRA_DIST = \ provider_dtazv.c all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libs/plugins/backends/aqhbci/banking/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libs/plugins/backends/aqhbci/banking/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libhbcibanking.la: $(libhbcibanking_la_OBJECTS) $(libhbcibanking_la_DEPENDENCIES) $(EXTRA_libhbcibanking_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libhbcibanking_la_OBJECTS) $(libhbcibanking_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/account.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/provider.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/provider_accspec.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/provider_dialogs.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/provider_iniletter.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/provider_job.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/provider_keys.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/provider_online.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/provider_sendcmd.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/provider_tan.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/provider_update.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/user.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/account.Plo -rm -f ./$(DEPDIR)/provider.Plo -rm -f ./$(DEPDIR)/provider_accspec.Plo -rm -f ./$(DEPDIR)/provider_dialogs.Plo -rm -f ./$(DEPDIR)/provider_iniletter.Plo -rm -f ./$(DEPDIR)/provider_job.Plo -rm -f ./$(DEPDIR)/provider_keys.Plo -rm -f ./$(DEPDIR)/provider_online.Plo -rm -f ./$(DEPDIR)/provider_sendcmd.Plo -rm -f ./$(DEPDIR)/provider_tan.Plo -rm -f ./$(DEPDIR)/provider_update.Plo -rm -f ./$(DEPDIR)/user.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/account.Plo -rm -f ./$(DEPDIR)/provider.Plo -rm -f ./$(DEPDIR)/provider_accspec.Plo -rm -f ./$(DEPDIR)/provider_dialogs.Plo -rm -f ./$(DEPDIR)/provider_iniletter.Plo -rm -f ./$(DEPDIR)/provider_job.Plo -rm -f ./$(DEPDIR)/provider_keys.Plo -rm -f ./$(DEPDIR)/provider_online.Plo -rm -f ./$(DEPDIR)/provider_sendcmd.Plo -rm -f ./$(DEPDIR)/provider_tan.Plo -rm -f ./$(DEPDIR)/provider_update.Plo -rm -f ./$(DEPDIR)/user.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-generic clean-libtool clean-noinstLTLIBRARIES \ cscopelist-am ctags ctags-am distclean distclean-compile \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am .PRECIOUS: Makefile sources: for f in $(libhbcibanking_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d sources; \ done typefiles: for d in $(SUBDIRS); do \ $(MAKE) -C $$d typefiles; \ done typedefs: for d in $(SUBDIRS); do \ $(MAKE) -C $$d typedefs; \ done cppcheck: for f in $(libhbcibanking_la_SOURCES); do \ cppcheck --force $$f ; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/banking/provider_l.h0000664000175000017500000000207714044534776022557 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_PROVIDER_L_H #define AH_PROVIDER_L_H #include "provider.h" #include "aqhbci/tan/tanmethod.h" #include "aqhbci/joblayer/job_l.h" #include "aqhbci/msglayer/hbci_l.h" AH_HBCI *AH_Provider_GetHbci(const AB_PROVIDER *pro); int AH_Provider_SendDtazv(AB_PROVIDER *pro, AB_USER *u, AB_ACCOUNT *a, AB_IMEXPORTER_CONTEXT *ctx, const uint8_t *dataPtr, uint32_t dataLen, int withProgress, int nounmount, int doLock); int AH_Provider_WriteValueToDb(const AB_VALUE *v, GWEN_DB_NODE *dbV); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/banking/provider_dialogs.c0000664000175000017500000001370714044534776023743 00000000000000/*************************************************************************** begin : Tue Jun 03 2018 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "provider_dialogs.h" #include "aqhbci/banking/provider.h" #include "aqhbci/banking/user.h" #include "aqhbci/dialogs/dlg_edituserpintan_l.h" #include "aqhbci/dialogs/dlg_edituserddv_l.h" #include "aqhbci/dialogs/dlg_edituserrdh_l.h" #include "aqhbci/dialogs/dlg_editaccount_l.h" #include "aqhbci/dialogs/dlg_newuser_l.h" #include "aqhbci/dialogs/dlg_ddvcard_l.h" #include "aqhbci/dialogs/dlg_zkacard_l.h" #include "aqhbci/dialogs/dlg_pintan_l.h" #include "aqhbci/dialogs/dlg_newkeyfile_l.h" #include "aqhbci/dialogs/dlg_importkeyfile_l.h" #include "aqhbci/dialogs/dlg_choose_usertype_l.h" #include #include #include GWEN_DIALOG *AH_Provider_GetNewCardUserDialog(AB_PROVIDER *pro) { int rv; GWEN_BUFFER *mtypeName; GWEN_BUFFER *mediumName; GWEN_CRYPT_TOKEN *ct; AB_BANKING *ab; assert(pro); ab=AB_Provider_GetBanking(pro); assert(ab); mtypeName=GWEN_Buffer_new(0, 64, 0, 1); mediumName=GWEN_Buffer_new(0, 64, 0, 1); rv=AB_Banking_CheckCryptToken(ab, GWEN_Crypt_Token_Device_Card, mtypeName, mediumName); if (rv<0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "here (%d)", rv); GWEN_Gui_ShowError(I18N("Chipcard Error"), I18N("Error checking chip card (%d).\n" "Maybe libchipcard or its plugins are not installed?")); GWEN_Buffer_free(mediumName); GWEN_Buffer_free(mtypeName); return NULL; } rv=AB_Banking_GetCryptToken(AB_Provider_GetBanking(pro), GWEN_Buffer_GetStart(mtypeName), GWEN_Buffer_GetStart(mediumName), &ct); if (rv<0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(mediumName); GWEN_Buffer_free(mtypeName); return NULL; } if (strcasecmp(GWEN_Buffer_GetStart(mtypeName), "ddvcard")==0) { GWEN_DIALOG *dlg2; DBG_WARN(0, "DDV card"); dlg2=AH_DdvCardDialog_new(pro, ct); if (dlg2==NULL) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (no dialog)"); GWEN_Buffer_free(mediumName); GWEN_Buffer_free(mtypeName); return NULL; } GWEN_Dialog_SetWidgetText(dlg2, "", I18N("Create HBCI/FinTS DDV User")); GWEN_Buffer_free(mediumName); GWEN_Buffer_free(mtypeName); return dlg2; } else if (strcasecmp(GWEN_Buffer_GetStart(mtypeName), "starcoscard")==0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "STARCOS RSA card currently not supported by this dialog"); // TODO } else if (strcasecmp(GWEN_Buffer_GetStart(mtypeName), "zkacard")==0) { GWEN_DIALOG *dlg2; DBG_WARN(0, "ZKA RSA card"); dlg2=AH_ZkaCardDialog_new(pro, ct); if (dlg2==NULL) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (no dialog)"); GWEN_Buffer_free(mediumName); GWEN_Buffer_free(mtypeName); return NULL; } GWEN_Dialog_SetWidgetText(dlg2, "", I18N("Create HBCI/FinTS ZKA RSA User")); GWEN_Buffer_free(mediumName); GWEN_Buffer_free(mtypeName); return dlg2; } else { DBG_ERROR(AQHBCI_LOGDOMAIN, "Card type \"%s\" not yet supported", GWEN_Buffer_GetStart(mtypeName)); } GWEN_Buffer_free(mediumName); GWEN_Buffer_free(mtypeName); AB_Banking_ClearCryptTokenList(AB_Provider_GetBanking(pro)); return NULL; } GWEN_DIALOG *AH_Provider_GetEditUserDialog(AB_PROVIDER *pro, AB_USER *u) { GWEN_DIALOG *dlg; DBG_ERROR(AQBANKING_LOGDOMAIN, "GetEditUserDialog"); assert(pro); switch (AH_User_GetCryptMode(u)) { case AH_CryptMode_Pintan: dlg=AH_EditUserPinTanDialog_new(pro, u, 1); break; case AH_CryptMode_Ddv: dlg=AH_EditUserDdvDialog_new(pro, u, 1); break; case AH_CryptMode_Rdh: dlg=AH_EditUserRdhDialog_new(pro, u, 1); break; case AH_CryptMode_Rah: dlg=AH_EditUserRdhDialog_new(pro, u, 1); break; default: DBG_ERROR(AQHBCI_LOGDOMAIN, "Unknown crypt mode %d)", AH_User_GetCryptMode(u)); dlg=NULL; break; } if (dlg==NULL) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (no dialog)"); return NULL; } return dlg; } GWEN_DIALOG *AH_Provider_GetNewUserDialog(AB_PROVIDER *pro, int i) { GWEN_DIALOG *dlg; assert(pro); DBG_INFO(AQHBCI_LOGDOMAIN, "Get user dialog %d", i); switch (i) { case AqHBCI_NewUserDialog_CodeExistingPinTan: dlg=AH_PinTanDialog_new(pro); break; case AqHBCI_NewUserDialog_CodeExistingChipcard: dlg=AH_Provider_GetNewCardUserDialog(pro); break; case AqHBCI_NewUserDialog_CodeCreateKeyFile: dlg=AH_NewKeyFileDialog_new(pro); break; case AqHBCI_NewUserDialog_CodeExistingKeyFile: dlg=AH_ImportKeyFileDialog_new(pro); break; case AqHBCI_NewUserDialog_CodeCreateChipcard: case AqHBCI_NewUserDialog_CodeGeneric: default: dlg=AH_NewUserDialog_new(pro); break; } if (dlg==NULL) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (no dialog)"); return NULL; } return dlg; } GWEN_DIALOG *AH_Provider_GetEditAccountDialog(AB_PROVIDER *pro, AB_ACCOUNT *a) { GWEN_DIALOG *dlg; assert(pro); dlg=AH_EditAccountDialog_new(pro, a, 1); if (dlg==NULL) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (no dialog)"); return NULL; } return dlg; } GWEN_DIALOG *AH_Provider_GetUserTypeDialog(AB_PROVIDER *pro) { GWEN_DIALOG *dlg; DBG_INFO(AQHBCI_LOGDOMAIN, "AH_Provider_GetUserTypeDialog called"); assert(pro); dlg=AH_ChooseUserTypeDialog_new(pro); if (dlg==NULL) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (no dialog)"); return NULL; } return dlg; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/banking/provider_iniletter.c0000664000175000017500000014267714576127360024326 00000000000000/*************************************************************************** begin : Tue Jun 03 2018 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "provider_iniletter.h" #include "aqhbci/banking/provider_l.h" #include "aqhbci/banking/user.h" #include "aqhbci/msglayer/hbci_l.h" #include #include #include /* ------------------------------------------------------------------------------------------------ * forward declarations * ------------------------------------------------------------------------------------------------ */ static int _getIniLetterTxt1(AB_PROVIDER *pro, AB_USER *u, int useBankKey, GWEN_BUFFER *lbuf, int nounmount); static int _getIniLetterHtml1(AB_PROVIDER *pro, AB_USER *u, int useBankKey, GWEN_BUFFER *lbuf, int nounmount); static int _getIniLetterTxt2(AB_PROVIDER *pro, AB_USER *u, int useBankKey, GWEN_BUFFER *lbuf, int nounmount); static int _getIniLetterHtml2(AB_PROVIDER *pro, AB_USER *u, int useBankKey, GWEN_BUFFER *lbuf, int nounmount); static int _hashRmd160(const uint8_t *p, unsigned int l, uint8_t *buf); static int _hashSha256(const uint8_t *p, unsigned int l, uint8_t *buf); /* ------------------------------------------------------------------------------------------------ * implementations * ------------------------------------------------------------------------------------------------ */ int AH_Provider_GetIniLetterTxt(AB_PROVIDER *pro, AB_USER *u, int useBankKey, int variant, GWEN_BUFFER *lbuf, int nounmount) { if (variant==0) { switch (AH_User_GetRdhType(u)) { case 0: case 1: variant=1; break; case 2: case 3: case 4: case 5: case 6: case 7: variant=2; break; case 8: case 9: variant=2; break; case 10: variant=2; break; default: DBG_ERROR(AQHBCI_LOGDOMAIN, "RDH mode %d not supported", AH_User_GetRdhType(u)); return GWEN_ERROR_INVALID; } } switch (variant) { case 1: return _getIniLetterTxt1(pro, u, useBankKey, lbuf, nounmount); case 2: return _getIniLetterTxt2(pro, u, useBankKey, lbuf, nounmount); default: DBG_ERROR(AQHBCI_LOGDOMAIN, "Variant %d not supported", variant); return GWEN_ERROR_INVALID; } } int AH_Provider_GetIniLetterHtml(AB_PROVIDER *pro, AB_USER *u, int useBankKey, int variant, GWEN_BUFFER *lbuf, int nounmount) { if (variant==0) { switch (AH_User_GetRdhType(u)) { case 0: case 1: variant=1; break; case 2: case 3: case 4: case 5: case 6: case 7: variant=2; break; case 8: case 9: variant=2; break; case 10: variant=2; break; default: DBG_ERROR(AQHBCI_LOGDOMAIN, "RDH mode %d not supported", AH_User_GetRdhType(u)); return GWEN_ERROR_INVALID; } } switch (variant) { case 1: return _getIniLetterHtml1(pro, u, useBankKey, lbuf, nounmount); case 2: return _getIniLetterHtml2(pro, u, useBankKey, lbuf, nounmount); default: DBG_ERROR(AQHBCI_LOGDOMAIN, "Variant %d not supported", variant); return GWEN_ERROR_INVALID; } } int _getIniLetterTxt1(AB_PROVIDER *pro, AB_USER *u, int useBankKey, GWEN_BUFFER *lbuf, int nounmount) { AB_BANKING *ab; AH_HBCI *h; const void *p; unsigned int l; GWEN_BUFFER *bbuf; GWEN_BUFFER *keybuf; int i; GWEN_TIME *ti; char numbuf[32]; char hashbuffer[21]; GWEN_CRYPT_TOKEN *ct; const GWEN_CRYPT_TOKEN_CONTEXT *cctx; const GWEN_CRYPT_TOKEN_KEYINFO *ki=NULL; uint32_t kid; int rv; assert(pro); assert(u); ab=AB_Provider_GetBanking(pro); assert(ab); h=AH_Provider_GetHbci(pro); assert(h); rv=AB_Banking_GetCryptToken(AH_HBCI_GetBankingApi(h), AH_User_GetTokenType(u), AH_User_GetTokenName(u), &ct); if (rv) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not get crypt token (%d)", rv); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("Error getting crypt token")); if (!nounmount) AB_Banking_ClearCryptTokenList(AH_HBCI_GetBankingApi(h)); return rv; } /* open crypt token */ rv=GWEN_Crypt_Token_Open(ct, 1, 0); if (rv) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not open crypt token (%d)", rv); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("Error opening crypt token")); if (!nounmount) AB_Banking_ClearCryptTokenList(AH_HBCI_GetBankingApi(h)); return rv; } /* get context */ cctx=GWEN_Crypt_Token_GetContext(ct, AH_User_GetTokenContextId(u), 0); if (!cctx) { DBG_ERROR(AQHBCI_LOGDOMAIN, "User context not found on crypt token"); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("User context not found on crypt token")); if (!nounmount) AB_Banking_ClearCryptTokenList(AH_HBCI_GetBankingApi(h)); return GWEN_ERROR_NOT_FOUND; } if (useBankKey) { /* get sign key info */ kid=GWEN_Crypt_Token_Context_GetVerifyKeyId(cctx); if (kid) { ki=GWEN_Crypt_Token_GetKeyInfo(ct, kid, GWEN_CRYPT_TOKEN_KEYFLAGS_HASMODULUS | GWEN_CRYPT_TOKEN_KEYFLAGS_HASEXPONENT | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYVERSION | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYNUMBER, 0); } if (!ki || !(GWEN_Crypt_Token_KeyInfo_GetFlags(ki) & GWEN_CRYPT_TOKEN_KEYFLAGS_HASMODULUS) || !(GWEN_Crypt_Token_KeyInfo_GetFlags(ki) & GWEN_CRYPT_TOKEN_KEYFLAGS_HASEXPONENT)) { kid=GWEN_Crypt_Token_Context_GetEncipherKeyId(cctx); if (kid) { ki=GWEN_Crypt_Token_GetKeyInfo(ct, kid, GWEN_CRYPT_TOKEN_KEYFLAGS_HASMODULUS | GWEN_CRYPT_TOKEN_KEYFLAGS_HASEXPONENT | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYVERSION | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYNUMBER, 0); } } if (!ki || !(GWEN_Crypt_Token_KeyInfo_GetFlags(ki) & GWEN_CRYPT_TOKEN_KEYFLAGS_HASMODULUS) || !(GWEN_Crypt_Token_KeyInfo_GetFlags(ki) & GWEN_CRYPT_TOKEN_KEYFLAGS_HASEXPONENT)) { if (!nounmount) AB_Banking_ClearCryptTokenList(AH_HBCI_GetBankingApi(h)); DBG_ERROR(AQHBCI_LOGDOMAIN, "Server keys missing, please get them first"); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("Server keys missing, " "please get them first")); return GWEN_ERROR_NOT_FOUND; } } else { /* get sign key info */ kid=GWEN_Crypt_Token_Context_GetSignKeyId(cctx); if (kid) { ki=GWEN_Crypt_Token_GetKeyInfo(ct, kid, GWEN_CRYPT_TOKEN_KEYFLAGS_HASMODULUS | GWEN_CRYPT_TOKEN_KEYFLAGS_HASEXPONENT | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYVERSION | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYNUMBER, 0); } if (!ki || !(GWEN_Crypt_Token_KeyInfo_GetFlags(ki) & GWEN_CRYPT_TOKEN_KEYFLAGS_HASMODULUS) || !(GWEN_Crypt_Token_KeyInfo_GetFlags(ki) & GWEN_CRYPT_TOKEN_KEYFLAGS_HASEXPONENT)) { if (!nounmount) AB_Banking_ClearCryptTokenList(AH_HBCI_GetBankingApi(h)); DBG_ERROR(AQHBCI_LOGDOMAIN, "User keys missing, please generate them first"); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("User keys missing, " "please generate them first")); return GWEN_ERROR_NOT_FOUND; } } keybuf=GWEN_Buffer_new(0, 257, 0, 1); /* prelude */ GWEN_Buffer_AppendString(lbuf, I18N("\n\n\nINI-Letter\n\n")); GWEN_Buffer_AppendString(lbuf, I18N("Date : ")); ti=GWEN_CurrentTime(); assert(ti); GWEN_Time_toString(ti, I18N("YYYY/MM/DD"), lbuf); GWEN_Buffer_AppendString(lbuf, "\n"); GWEN_Buffer_AppendString(lbuf, I18N("Time : ")); GWEN_Time_toString(ti, I18N("hh:mm:ss"), lbuf); GWEN_Buffer_AppendString(lbuf, "\n"); if (useBankKey) { GWEN_Buffer_AppendString(lbuf, I18N("Bank Code : ")); GWEN_Buffer_AppendString(lbuf, AB_User_GetBankCode(u)); } else { GWEN_Buffer_AppendString(lbuf, I18N("User : ")); GWEN_Buffer_AppendString(lbuf, AB_User_GetUserId(u)); } GWEN_Buffer_AppendString(lbuf, "\n"); GWEN_Buffer_AppendString(lbuf, I18N("Key number : ")); snprintf(numbuf, sizeof(numbuf), "%d", GWEN_Crypt_Token_KeyInfo_GetKeyNumber(ki)); GWEN_Buffer_AppendString(lbuf, numbuf); GWEN_Buffer_AppendString(lbuf, "\n"); GWEN_Buffer_AppendString(lbuf, I18N("Key version : ")); snprintf(numbuf, sizeof(numbuf), "%d", GWEN_Crypt_Token_KeyInfo_GetKeyVersion(ki)); GWEN_Buffer_AppendString(lbuf, numbuf); GWEN_Buffer_AppendString(lbuf, "\n"); if (!useBankKey) { GWEN_Buffer_AppendString(lbuf, I18N("Customer system: ")); GWEN_Buffer_AppendString(lbuf, AH_HBCI_GetProductName(h)); GWEN_Buffer_AppendString(lbuf, "\n"); } GWEN_Buffer_AppendString(lbuf, "\n"); GWEN_Buffer_AppendString(lbuf, I18N("Public key for electronic signature")); GWEN_Buffer_AppendString(lbuf, "\n\n"); GWEN_Buffer_AppendString(lbuf, " "); GWEN_Buffer_AppendString(lbuf, I18N("Exponent")); GWEN_Buffer_AppendString(lbuf, "\n\n"); /* exponent */ p=GWEN_Crypt_Token_KeyInfo_GetExponentData(ki); l=GWEN_Crypt_Token_KeyInfo_GetExponentLen(ki); if (!p || !l) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Bad key."); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("Bad key")); return GWEN_ERROR_BAD_DATA; } bbuf=GWEN_Buffer_new(0, 97, 0, 1); GWEN_Buffer_AppendBytes(bbuf, p, l); GWEN_Buffer_Rewind(bbuf); if (l<96) GWEN_Buffer_FillLeftWithBytes(bbuf, 0, 96-l); p=GWEN_Buffer_GetStart(bbuf); l=GWEN_Buffer_GetUsedBytes(bbuf); for (i=0; i<6; i++) { GWEN_Buffer_AppendString(lbuf, " "); if (GWEN_Text_ToHexBuffer(p, 16, lbuf, 2, ' ', 0)) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Error converting to hex??"); abort(); } p+=16; GWEN_Buffer_AppendString(lbuf, "\n"); } GWEN_Buffer_FillWithBytes(keybuf, 0, 128-l); GWEN_Buffer_AppendBuffer(keybuf, bbuf); GWEN_Buffer_free(bbuf); /* modulus */ GWEN_Buffer_AppendString(lbuf, "\n"); GWEN_Buffer_AppendString(lbuf, " "); GWEN_Buffer_AppendString(lbuf, I18N("Modulus")); GWEN_Buffer_AppendString(lbuf, "\n\n"); p=GWEN_Crypt_Token_KeyInfo_GetModulusData(ki); l=GWEN_Crypt_Token_KeyInfo_GetModulusLen(ki); if (!p || !l) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Bad key."); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("Bad key")); return GWEN_ERROR_BAD_DATA; } bbuf=GWEN_Buffer_new(0, 97, 0, 1); GWEN_Buffer_AppendBytes(bbuf, p, l); GWEN_Buffer_Rewind(bbuf); if (l<96) GWEN_Buffer_FillLeftWithBytes(bbuf, 0, 96-l); p=GWEN_Buffer_GetStart(bbuf); l=GWEN_Buffer_GetUsedBytes(bbuf); for (i=0; i<6; i++) { GWEN_Buffer_AppendString(lbuf, " "); if (GWEN_Text_ToHexBuffer(p, 16, lbuf, 2, ' ', 0)) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Error converting to hex??"); abort(); } p+=16; GWEN_Buffer_AppendString(lbuf, "\n"); } GWEN_Buffer_FillWithBytes(keybuf, 0, 128-l); GWEN_Buffer_AppendBuffer(keybuf, bbuf); GWEN_Buffer_free(bbuf); GWEN_Buffer_AppendString(lbuf, "\n"); GWEN_Buffer_AppendString(lbuf, " "); GWEN_Buffer_AppendString(lbuf, I18N("Hash")); GWEN_Buffer_AppendString(lbuf, "\n\n"); rv=_hashRmd160((const uint8_t *)GWEN_Buffer_GetStart(keybuf), GWEN_Buffer_GetUsedBytes(keybuf), (uint8_t *)hashbuffer); if (rv) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Error hashing (%d)", rv); abort(); } GWEN_Buffer_free(keybuf); GWEN_Buffer_AppendString(lbuf, " "); if (GWEN_Text_ToHexBuffer(hashbuffer, 20, lbuf, 2, ' ', 0)) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Error converting to hex??"); abort(); } GWEN_Buffer_AppendString(lbuf, "\n"); if (!useBankKey) { GWEN_Buffer_AppendString(lbuf, "\n\n"); GWEN_Buffer_AppendString(lbuf, I18N("I confirm that I created the above key " "for my electronic signature.\n")); GWEN_Buffer_AppendString(lbuf, "\n\n"); GWEN_Buffer_AppendString(lbuf, I18N("____________________________ " "____________________________\n" "Place, date " "Signature\n")); } return 0; } int _getIniLetterHtml1(AB_PROVIDER *pro, AB_USER *u, int useBankKey, GWEN_BUFFER *lbuf, int nounmount) { AB_BANKING *ab; AH_HBCI *h; const void *p; unsigned int l; GWEN_BUFFER *bbuf; GWEN_BUFFER *keybuf; int i; GWEN_TIME *ti; char numbuf[32]; char hashbuffer[21]; GWEN_CRYPT_TOKEN *ct; const GWEN_CRYPT_TOKEN_CONTEXT *cctx; const GWEN_CRYPT_TOKEN_KEYINFO *ki=NULL; uint32_t kid; int rv; assert(pro); assert(u); ab=AB_Provider_GetBanking(pro); assert(ab); h=AH_Provider_GetHbci(pro); assert(h); rv=AB_Banking_GetCryptToken(AH_HBCI_GetBankingApi(h), AH_User_GetTokenType(u), AH_User_GetTokenName(u), &ct); if (rv) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not get crypt token (%d)", rv); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("Error getting crypt token")); if (!nounmount) AB_Banking_ClearCryptTokenList(AH_HBCI_GetBankingApi(h)); return rv; } /* open crypt token */ rv=GWEN_Crypt_Token_Open(ct, 1, 0); if (rv) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not open crypt token (%d)", rv); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("Error opening crypt token")); if (!nounmount) AB_Banking_ClearCryptTokenList(AH_HBCI_GetBankingApi(h)); return rv; } /* get context */ cctx=GWEN_Crypt_Token_GetContext(ct, AH_User_GetTokenContextId(u), 0); if (!cctx) { DBG_ERROR(AQHBCI_LOGDOMAIN, "User context not found on crypt token"); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("User context not found on crypt token")); if (!nounmount) AB_Banking_ClearCryptTokenList(AH_HBCI_GetBankingApi(h)); return GWEN_ERROR_NOT_FOUND; } if (useBankKey) { /* get sign key info */ kid=GWEN_Crypt_Token_Context_GetVerifyKeyId(cctx); if (kid) { ki=GWEN_Crypt_Token_GetKeyInfo(ct, kid, GWEN_CRYPT_TOKEN_KEYFLAGS_HASMODULUS | GWEN_CRYPT_TOKEN_KEYFLAGS_HASEXPONENT | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYVERSION | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYNUMBER, 0); } if (!ki || !(GWEN_Crypt_Token_KeyInfo_GetFlags(ki) & GWEN_CRYPT_TOKEN_KEYFLAGS_HASMODULUS) || !(GWEN_Crypt_Token_KeyInfo_GetFlags(ki) & GWEN_CRYPT_TOKEN_KEYFLAGS_HASEXPONENT)) { kid=GWEN_Crypt_Token_Context_GetEncipherKeyId(cctx); if (kid) { ki=GWEN_Crypt_Token_GetKeyInfo(ct, kid, GWEN_CRYPT_TOKEN_KEYFLAGS_HASMODULUS | GWEN_CRYPT_TOKEN_KEYFLAGS_HASEXPONENT | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYVERSION | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYNUMBER, 0); } } if (!ki || !(GWEN_Crypt_Token_KeyInfo_GetFlags(ki) & GWEN_CRYPT_TOKEN_KEYFLAGS_HASMODULUS) || !(GWEN_Crypt_Token_KeyInfo_GetFlags(ki) & GWEN_CRYPT_TOKEN_KEYFLAGS_HASEXPONENT)) { if (!nounmount) AB_Banking_ClearCryptTokenList(AH_HBCI_GetBankingApi(h)); DBG_ERROR(AQHBCI_LOGDOMAIN, "Server keys missing, please get them first"); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("Server keys missing, " "please get them first")); return GWEN_ERROR_NOT_FOUND; } } else { /* get sign key info */ kid=GWEN_Crypt_Token_Context_GetSignKeyId(cctx); if (kid) { ki=GWEN_Crypt_Token_GetKeyInfo(ct, kid, GWEN_CRYPT_TOKEN_KEYFLAGS_HASMODULUS | GWEN_CRYPT_TOKEN_KEYFLAGS_HASEXPONENT | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYVERSION | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYNUMBER, 0); } if (!ki || !(GWEN_Crypt_Token_KeyInfo_GetFlags(ki) & GWEN_CRYPT_TOKEN_KEYFLAGS_HASMODULUS) || !(GWEN_Crypt_Token_KeyInfo_GetFlags(ki) & GWEN_CRYPT_TOKEN_KEYFLAGS_HASEXPONENT)) { if (!nounmount) AB_Banking_ClearCryptTokenList(AH_HBCI_GetBankingApi(h)); DBG_ERROR(AQHBCI_LOGDOMAIN, "User keys missing, please generate them first"); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("User keys missing, " "please generate them first")); return GWEN_ERROR_NOT_FOUND; } } keybuf=GWEN_Buffer_new(0, 257, 0, 1); /* prelude */ GWEN_Buffer_AppendString(lbuf, "

"); GWEN_Buffer_AppendString(lbuf, I18N("INI-Letter")); GWEN_Buffer_AppendString(lbuf, "

\n"); GWEN_Buffer_AppendString(lbuf, "\n"); GWEN_Buffer_AppendString(lbuf, "\n"); GWEN_Buffer_AppendString(lbuf, "\n"); if (useBankKey) { GWEN_Buffer_AppendString(lbuf, "\n"); } else { GWEN_Buffer_AppendString(lbuf, "\n"); } GWEN_Buffer_AppendString(lbuf, "\n"); GWEN_Buffer_AppendString(lbuf, "\n"); if (!useBankKey) { GWEN_Buffer_AppendString(lbuf, "\n"); } GWEN_Buffer_AppendString(lbuf, "
\n"); GWEN_Buffer_AppendString(lbuf, I18N("Date")); GWEN_Buffer_AppendString(lbuf, "\n"); ti=GWEN_CurrentTime(); assert(ti); GWEN_Time_toString(ti, I18N("YYYY/MM/DD"), lbuf); GWEN_Buffer_AppendString(lbuf, "
\n"); GWEN_Buffer_AppendString(lbuf, I18N("Time")); GWEN_Buffer_AppendString(lbuf, "\n"); GWEN_Time_toString(ti, I18N("hh:mm:ss"), lbuf); GWEN_Buffer_AppendString(lbuf, "
\n"); GWEN_Buffer_AppendString(lbuf, I18N("Bank Code")); GWEN_Buffer_AppendString(lbuf, "\n"); GWEN_Buffer_AppendString(lbuf, AB_User_GetBankCode(u)); GWEN_Buffer_AppendString(lbuf, "
\n"); GWEN_Buffer_AppendString(lbuf, I18N("User")); GWEN_Buffer_AppendString(lbuf, "\n"); GWEN_Buffer_AppendString(lbuf, AB_User_GetUserId(u)); GWEN_Buffer_AppendString(lbuf, "
\n"); GWEN_Buffer_AppendString(lbuf, I18N("Key number")); GWEN_Buffer_AppendString(lbuf, "\n"); snprintf(numbuf, sizeof(numbuf), "%d", GWEN_Crypt_Token_KeyInfo_GetKeyNumber(ki)); GWEN_Buffer_AppendString(lbuf, numbuf); GWEN_Buffer_AppendString(lbuf, "
\n"); GWEN_Buffer_AppendString(lbuf, I18N("Key version")); GWEN_Buffer_AppendString(lbuf, "\n"); snprintf(numbuf, sizeof(numbuf), "%d", GWEN_Crypt_Token_KeyInfo_GetKeyVersion(ki)); GWEN_Buffer_AppendString(lbuf, numbuf); GWEN_Buffer_AppendString(lbuf, "
\n"); GWEN_Buffer_AppendString(lbuf, I18N("Customer system")); GWEN_Buffer_AppendString(lbuf, "\n"); GWEN_Buffer_AppendString(lbuf, AH_HBCI_GetProductName(h)); GWEN_Buffer_AppendString(lbuf, "
\n"); GWEN_Buffer_AppendString(lbuf, "

"); GWEN_Buffer_AppendString(lbuf, I18N("Public key for electronic signature")); GWEN_Buffer_AppendString(lbuf, "

\n"); GWEN_Buffer_AppendString(lbuf, "

"); GWEN_Buffer_AppendString(lbuf, I18N("Exponent")); GWEN_Buffer_AppendString(lbuf, "

\n"); /* exponent */ p=GWEN_Crypt_Token_KeyInfo_GetExponentData(ki); l=GWEN_Crypt_Token_KeyInfo_GetExponentLen(ki); if (!p || !l) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Bad key."); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("Bad key")); return GWEN_ERROR_BAD_DATA; } GWEN_Buffer_AppendString(lbuf, "\n"); bbuf=GWEN_Buffer_new(0, 97, 0, 1); GWEN_Buffer_AppendBytes(bbuf, p, l); GWEN_Buffer_Rewind(bbuf); if (l<96) GWEN_Buffer_FillLeftWithBytes(bbuf, 0, 96-l); p=GWEN_Buffer_GetStart(bbuf); l=GWEN_Buffer_GetUsedBytes(bbuf); for (i=0; i<6; i++) { GWEN_Buffer_AppendString(lbuf, " "); if (GWEN_Text_ToHexBuffer(p, 16, lbuf, 2, ' ', 0)) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Error converting to hex??"); abort(); } p+=16; GWEN_Buffer_AppendString(lbuf, "
\n"); } GWEN_Buffer_FillWithBytes(keybuf, 0, 128-l); GWEN_Buffer_AppendBuffer(keybuf, bbuf); GWEN_Buffer_free(bbuf); GWEN_Buffer_AppendString(lbuf, "
\n"); GWEN_Buffer_AppendString(lbuf, "
\n"); /* modulus */ GWEN_Buffer_AppendString(lbuf, "\n"); GWEN_Buffer_AppendString(lbuf, "

"); GWEN_Buffer_AppendString(lbuf, I18N("Modulus")); GWEN_Buffer_AppendString(lbuf, "

\n"); p=GWEN_Crypt_Token_KeyInfo_GetModulusData(ki); l=GWEN_Crypt_Token_KeyInfo_GetModulusLen(ki); if (!p || !l) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Bad key."); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("Bad key")); return GWEN_ERROR_BAD_DATA; } GWEN_Buffer_AppendString(lbuf, "\n"); bbuf=GWEN_Buffer_new(0, 97, 0, 1); GWEN_Buffer_AppendBytes(bbuf, p, l); GWEN_Buffer_Rewind(bbuf); if (l<96) GWEN_Buffer_FillLeftWithBytes(bbuf, 0, 96-l); p=GWEN_Buffer_GetStart(bbuf); l=GWEN_Buffer_GetUsedBytes(bbuf); for (i=0; i<6; i++) { GWEN_Buffer_AppendString(lbuf, " "); if (GWEN_Text_ToHexBuffer(p, 16, lbuf, 2, ' ', 0)) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Error converting to hex??"); abort(); } p+=16; GWEN_Buffer_AppendString(lbuf, "
\n"); } GWEN_Buffer_FillWithBytes(keybuf, 0, 128-l); GWEN_Buffer_AppendBuffer(keybuf, bbuf); GWEN_Buffer_free(bbuf); GWEN_Buffer_AppendString(lbuf, "
\n"); GWEN_Buffer_AppendString(lbuf, "
\n"); GWEN_Buffer_AppendString(lbuf, "

"); GWEN_Buffer_AppendString(lbuf, I18N("Hash")); GWEN_Buffer_AppendString(lbuf, "

\n"); GWEN_Buffer_AppendString(lbuf, "\n"); rv=_hashRmd160((const uint8_t *)GWEN_Buffer_GetStart(keybuf), GWEN_Buffer_GetUsedBytes(keybuf), (uint8_t *)hashbuffer); if (rv) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Error hashing (%d)", rv); abort(); } GWEN_Buffer_free(keybuf); GWEN_Buffer_AppendString(lbuf, " "); if (GWEN_Text_ToHexBuffer(hashbuffer, 20, lbuf, 2, ' ', 0)) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Error converting to hex??"); abort(); } GWEN_Buffer_AppendString(lbuf, "\n"); GWEN_Buffer_AppendString(lbuf, "
\n"); if (!useBankKey) { GWEN_Buffer_AppendString(lbuf, "

\n"); GWEN_Buffer_AppendString(lbuf, I18N("I confirm that I created the above key " "for my electronic signature.\n")); GWEN_Buffer_AppendString(lbuf, "

\n"); GWEN_Buffer_AppendString(lbuf, "\n"); GWEN_Buffer_AppendString(lbuf, "
\n"); GWEN_Buffer_AppendString(lbuf, "____________________________ "); GWEN_Buffer_AppendString(lbuf, "\n"); GWEN_Buffer_AppendString(lbuf, "____________________________ "); GWEN_Buffer_AppendString(lbuf, "
\n"); GWEN_Buffer_AppendString(lbuf, I18N("Place, date")); GWEN_Buffer_AppendString(lbuf, "\n"); GWEN_Buffer_AppendString(lbuf, I18N("Signature")); GWEN_Buffer_AppendString(lbuf, "
\n"); GWEN_Buffer_AppendString(lbuf, "
\n"); } return 0; } int _getIniLetterTxt2(AB_PROVIDER *pro, AB_USER *u, int useBankKey, GWEN_BUFFER *lbuf, int nounmount) { AB_BANKING *ab; AH_HBCI *h; const void *p; unsigned int l; unsigned int modLen; GWEN_BUFFER *bbuf; GWEN_BUFFER *keybuf; int i; GWEN_TIME *ti; char numbuf[32]; char hashbuffer[33]; GWEN_CRYPT_TOKEN *ct; const GWEN_CRYPT_TOKEN_CONTEXT *cctx; const GWEN_CRYPT_TOKEN_KEYINFO *ki=NULL; uint32_t kid; int rv; assert(pro); assert(u); ab=AB_Provider_GetBanking(pro); assert(ab); h=AH_Provider_GetHbci(pro); assert(h); rv=AB_Banking_GetCryptToken(AH_HBCI_GetBankingApi(h), AH_User_GetTokenType(u), AH_User_GetTokenName(u), &ct); if (rv) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not get crypt token (%d)", rv); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("Error getting crypt token")); if (!nounmount) AB_Banking_ClearCryptTokenList(AH_HBCI_GetBankingApi(h)); return rv; } /* open crypt token */ rv=GWEN_Crypt_Token_Open(ct, 1, 0); if (rv) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not open crypt token (%d)", rv); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("Error opening crypt token")); if (!nounmount) AB_Banking_ClearCryptTokenList(AH_HBCI_GetBankingApi(h)); return rv; } /* get context */ cctx=GWEN_Crypt_Token_GetContext(ct, AH_User_GetTokenContextId(u), 0); if (!cctx) { DBG_ERROR(AQHBCI_LOGDOMAIN, "User context not found on crypt token"); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("User context not found on crypt token")); if (!nounmount) AB_Banking_ClearCryptTokenList(AH_HBCI_GetBankingApi(h)); return GWEN_ERROR_NOT_FOUND; } if (useBankKey) { /* get sign key info */ kid=GWEN_Crypt_Token_Context_GetVerifyKeyId(cctx); if (kid) { ki=GWEN_Crypt_Token_GetKeyInfo(ct, kid, GWEN_CRYPT_TOKEN_KEYFLAGS_HASMODULUS | GWEN_CRYPT_TOKEN_KEYFLAGS_HASEXPONENT | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYVERSION | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYNUMBER, 0); } if (!ki || !(GWEN_Crypt_Token_KeyInfo_GetFlags(ki) & GWEN_CRYPT_TOKEN_KEYFLAGS_HASMODULUS) || !(GWEN_Crypt_Token_KeyInfo_GetFlags(ki) & GWEN_CRYPT_TOKEN_KEYFLAGS_HASEXPONENT)) { kid=GWEN_Crypt_Token_Context_GetEncipherKeyId(cctx); if (kid) { ki=GWEN_Crypt_Token_GetKeyInfo(ct, kid, GWEN_CRYPT_TOKEN_KEYFLAGS_HASMODULUS | GWEN_CRYPT_TOKEN_KEYFLAGS_HASEXPONENT | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYVERSION | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYNUMBER, 0); } } if (!ki || !(GWEN_Crypt_Token_KeyInfo_GetFlags(ki) & GWEN_CRYPT_TOKEN_KEYFLAGS_HASMODULUS) || !(GWEN_Crypt_Token_KeyInfo_GetFlags(ki) & GWEN_CRYPT_TOKEN_KEYFLAGS_HASEXPONENT)) { if (!nounmount) AB_Banking_ClearCryptTokenList(AH_HBCI_GetBankingApi(h)); DBG_ERROR(AQHBCI_LOGDOMAIN, "Server keys missing, please get them first"); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("Server keys missing, " "please get them first")); return GWEN_ERROR_NOT_FOUND; } } else { /* get sign key info */ kid=GWEN_Crypt_Token_Context_GetSignKeyId(cctx); if (kid) { ki=GWEN_Crypt_Token_GetKeyInfo(ct, kid, GWEN_CRYPT_TOKEN_KEYFLAGS_HASMODULUS | GWEN_CRYPT_TOKEN_KEYFLAGS_HASEXPONENT | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYVERSION | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYNUMBER, 0); } if (!ki || !(GWEN_Crypt_Token_KeyInfo_GetFlags(ki) & GWEN_CRYPT_TOKEN_KEYFLAGS_HASMODULUS) || !(GWEN_Crypt_Token_KeyInfo_GetFlags(ki) & GWEN_CRYPT_TOKEN_KEYFLAGS_HASEXPONENT)) { if (!nounmount) AB_Banking_ClearCryptTokenList(AH_HBCI_GetBankingApi(h)); DBG_ERROR(AQHBCI_LOGDOMAIN, "User keys missing, please generate them first"); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("User keys missing, " "please generate them first")); return GWEN_ERROR_NOT_FOUND; } } #if 0 modLen=GWEN_Crypt_Token_KeyInfo_GetModulusLen(ki); #else /* use the real modulus length */ modLen=GWEN_Crypt_Token_KeyInfo_GetModulusLen(ki); #endif keybuf=GWEN_Buffer_new(0, (modLen*2)+1, 0, 1); /* prelude */ GWEN_Buffer_AppendString(lbuf, I18N("\n\n\nINI-Letter\n\n")); GWEN_Buffer_AppendString(lbuf, I18N("Date : ")); ti=GWEN_CurrentTime(); assert(ti); GWEN_Time_toString(ti, I18N("YYYY/MM/DD"), lbuf); GWEN_Buffer_AppendString(lbuf, "\n"); GWEN_Buffer_AppendString(lbuf, I18N("Time : ")); GWEN_Time_toString(ti, I18N("hh:mm:ss"), lbuf); GWEN_Buffer_AppendString(lbuf, "\n"); if (useBankKey) { GWEN_Buffer_AppendString(lbuf, I18N("Bank Code : ")); GWEN_Buffer_AppendString(lbuf, AB_User_GetBankCode(u)); } else { GWEN_Buffer_AppendString(lbuf, I18N("User : ")); GWEN_Buffer_AppendString(lbuf, AB_User_GetUserId(u)); } GWEN_Buffer_AppendString(lbuf, "\n"); GWEN_Buffer_AppendString(lbuf, I18N("Key number : ")); snprintf(numbuf, sizeof(numbuf), "%d", GWEN_Crypt_Token_KeyInfo_GetKeyNumber(ki)); GWEN_Buffer_AppendString(lbuf, numbuf); GWEN_Buffer_AppendString(lbuf, "\n"); GWEN_Buffer_AppendString(lbuf, I18N("Key version : ")); snprintf(numbuf, sizeof(numbuf), "%d", GWEN_Crypt_Token_KeyInfo_GetKeyVersion(ki)); GWEN_Buffer_AppendString(lbuf, numbuf); GWEN_Buffer_AppendString(lbuf, "\n"); if (!useBankKey) { GWEN_Buffer_AppendString(lbuf, I18N("Customer system: ")); GWEN_Buffer_AppendString(lbuf, AH_HBCI_GetProductName(h)); GWEN_Buffer_AppendString(lbuf, "\n"); } GWEN_Buffer_AppendString(lbuf, "\n"); GWEN_Buffer_AppendString(lbuf, I18N("Public key for electronic signature")); GWEN_Buffer_AppendString(lbuf, "\n\n"); GWEN_Buffer_AppendString(lbuf, " "); GWEN_Buffer_AppendString(lbuf, I18N("Exponent")); GWEN_Buffer_AppendString(lbuf, "\n\n"); /* exponent */ p=GWEN_Crypt_Token_KeyInfo_GetExponentData(ki); l=GWEN_Crypt_Token_KeyInfo_GetExponentLen(ki); if (!p || !l) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Bad key."); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("Bad key")); return GWEN_ERROR_BAD_DATA; } bbuf=GWEN_Buffer_new(0, modLen+1, 0, 1); GWEN_Buffer_AppendBytes(bbuf, p, l); GWEN_Buffer_Rewind(bbuf); if (l16) rl=16; GWEN_Buffer_AppendString(lbuf, " "); if (GWEN_Text_ToHexBuffer(p, rl, lbuf, 2, ' ', 0)) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Error converting to hex??"); abort(); } p+=rl; GWEN_Buffer_AppendString(lbuf, "\n"); } GWEN_Buffer_AppendBuffer(keybuf, bbuf); GWEN_Buffer_free(bbuf); /* modulus */ GWEN_Buffer_AppendString(lbuf, "\n"); GWEN_Buffer_AppendString(lbuf, " "); GWEN_Buffer_AppendString(lbuf, I18N("Modulus")); GWEN_Buffer_AppendString(lbuf, "\n\n"); p=GWEN_Crypt_Token_KeyInfo_GetModulusData(ki); l=GWEN_Crypt_Token_KeyInfo_GetModulusLen(ki); if (!p || !l) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Bad key."); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("Bad key")); return GWEN_ERROR_BAD_DATA; } bbuf=GWEN_Buffer_new(0, modLen+1, 0, 1); GWEN_Buffer_AppendBytes(bbuf, p, l); GWEN_Buffer_Rewind(bbuf); p=GWEN_Buffer_GetStart(bbuf); l=GWEN_Buffer_GetUsedBytes(bbuf); for (i=0; i16) rl=16; GWEN_Buffer_AppendString(lbuf, " "); if (GWEN_Text_ToHexBuffer(p, rl, lbuf, 2, ' ', 0)) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Error converting to hex??"); abort(); } p+=rl; GWEN_Buffer_AppendString(lbuf, "\n"); } GWEN_Buffer_AppendBuffer(keybuf, bbuf); GWEN_Buffer_free(bbuf); GWEN_Buffer_AppendString(lbuf, "\n"); GWEN_Buffer_AppendString(lbuf, " "); GWEN_Buffer_AppendString(lbuf, I18N("Hash (RMD-160)")); GWEN_Buffer_AppendString(lbuf, "\n\n"); rv=_hashRmd160((const uint8_t *)GWEN_Buffer_GetStart(keybuf), GWEN_Buffer_GetUsedBytes(keybuf), (uint8_t *)hashbuffer); if (rv) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Error hashing (%d)", rv); abort(); } GWEN_Buffer_AppendString(lbuf, " "); if (GWEN_Text_ToHexBuffer(hashbuffer, 10, lbuf, 2, ' ', 0)) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Error converting to hex??"); abort(); } GWEN_Buffer_AppendString(lbuf, "\n "); if (GWEN_Text_ToHexBuffer(hashbuffer+10, 10, lbuf, 2, ' ', 0)) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Error converting to hex??"); abort(); } GWEN_Buffer_AppendString(lbuf, "\n"); GWEN_Buffer_AppendString(lbuf, "\n"); GWEN_Buffer_AppendString(lbuf, " "); GWEN_Buffer_AppendString(lbuf, I18N("Hash (SHA-256)")); GWEN_Buffer_AppendString(lbuf, "\n\n"); rv=_hashSha256((const uint8_t *)GWEN_Buffer_GetStart(keybuf), GWEN_Buffer_GetUsedBytes(keybuf), (uint8_t *)hashbuffer); if (rv) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Error hashing (%d)", rv); abort(); } GWEN_Buffer_free(keybuf); GWEN_Buffer_AppendString(lbuf, " "); if (GWEN_Text_ToHexBuffer(hashbuffer, 16, lbuf, 2, ' ', 0)) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Error converting to hex??"); abort(); } GWEN_Buffer_AppendString(lbuf, "\n "); if (GWEN_Text_ToHexBuffer(hashbuffer+16, 16, lbuf, 2, ' ', 0)) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Error converting to hex??"); abort(); } GWEN_Buffer_AppendString(lbuf, "\n"); if (!useBankKey) { GWEN_Buffer_AppendString(lbuf, "\n\n"); GWEN_Buffer_AppendString(lbuf, I18N("I confirm that I created the above key " "for my electronic signature.\n")); GWEN_Buffer_AppendString(lbuf, "\n\n"); GWEN_Buffer_AppendString(lbuf, I18N("____________________________ " "____________________________\n" "Place, date " "Signature\n")); } return 0; } int _getIniLetterHtml2(AB_PROVIDER *pro, AB_USER *u, int useBankKey, GWEN_BUFFER *lbuf, int nounmount) { AB_BANKING *ab; AH_HBCI *h; const void *p; unsigned int l; GWEN_BUFFER *bbuf; GWEN_BUFFER *keybuf; int i; GWEN_TIME *ti; char numbuf[32]; char hashbuffer[33]; GWEN_CRYPT_TOKEN *ct; const GWEN_CRYPT_TOKEN_CONTEXT *cctx; const GWEN_CRYPT_TOKEN_KEYINFO *ki=NULL; uint32_t kid; int rv; int modLen; assert(pro); assert(u); ab=AB_Provider_GetBanking(pro); assert(ab); h=AH_Provider_GetHbci(pro); assert(h); rv=AB_Banking_GetCryptToken(AH_HBCI_GetBankingApi(h), AH_User_GetTokenType(u), AH_User_GetTokenName(u), &ct); if (rv) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not get crypt token (%d)", rv); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("Error getting crypt token")); if (!nounmount) AB_Banking_ClearCryptTokenList(AH_HBCI_GetBankingApi(h)); return rv; } /* open crypt token */ rv=GWEN_Crypt_Token_Open(ct, 1, 0); if (rv) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not open crypt token (%d)", rv); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("Error opening crypt token")); if (!nounmount) AB_Banking_ClearCryptTokenList(AH_HBCI_GetBankingApi(h)); return rv; } /* get context */ cctx=GWEN_Crypt_Token_GetContext(ct, AH_User_GetTokenContextId(u), 0); if (!cctx) { DBG_ERROR(AQHBCI_LOGDOMAIN, "User context not found on crypt token"); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("User context not found on crypt token")); if (!nounmount) AB_Banking_ClearCryptTokenList(AH_HBCI_GetBankingApi(h)); return GWEN_ERROR_NOT_FOUND; } if (useBankKey) { /* get sign key info */ kid=GWEN_Crypt_Token_Context_GetVerifyKeyId(cctx); if (kid) { ki=GWEN_Crypt_Token_GetKeyInfo(ct, kid, GWEN_CRYPT_TOKEN_KEYFLAGS_HASMODULUS | GWEN_CRYPT_TOKEN_KEYFLAGS_HASEXPONENT | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYVERSION | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYNUMBER, 0); } if (!ki || !(GWEN_Crypt_Token_KeyInfo_GetFlags(ki) & GWEN_CRYPT_TOKEN_KEYFLAGS_HASMODULUS) || !(GWEN_Crypt_Token_KeyInfo_GetFlags(ki) & GWEN_CRYPT_TOKEN_KEYFLAGS_HASEXPONENT)) { kid=GWEN_Crypt_Token_Context_GetEncipherKeyId(cctx); if (kid) { ki=GWEN_Crypt_Token_GetKeyInfo(ct, kid, GWEN_CRYPT_TOKEN_KEYFLAGS_HASMODULUS | GWEN_CRYPT_TOKEN_KEYFLAGS_HASEXPONENT | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYVERSION | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYNUMBER, 0); } } if (!ki || !(GWEN_Crypt_Token_KeyInfo_GetFlags(ki) & GWEN_CRYPT_TOKEN_KEYFLAGS_HASMODULUS) || !(GWEN_Crypt_Token_KeyInfo_GetFlags(ki) & GWEN_CRYPT_TOKEN_KEYFLAGS_HASEXPONENT)) { if (!nounmount) AB_Banking_ClearCryptTokenList(AH_HBCI_GetBankingApi(h)); DBG_ERROR(AQHBCI_LOGDOMAIN, "Server keys missing, please get them first"); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("Server keys missing, " "please get them first")); return GWEN_ERROR_NOT_FOUND; } } else { /* get sign key info */ kid=GWEN_Crypt_Token_Context_GetSignKeyId(cctx); if (kid) { ki=GWEN_Crypt_Token_GetKeyInfo(ct, kid, GWEN_CRYPT_TOKEN_KEYFLAGS_HASMODULUS | GWEN_CRYPT_TOKEN_KEYFLAGS_HASEXPONENT | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYVERSION | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYNUMBER, 0); } if (!ki || !(GWEN_Crypt_Token_KeyInfo_GetFlags(ki) & GWEN_CRYPT_TOKEN_KEYFLAGS_HASMODULUS) || !(GWEN_Crypt_Token_KeyInfo_GetFlags(ki) & GWEN_CRYPT_TOKEN_KEYFLAGS_HASEXPONENT)) { if (!nounmount) AB_Banking_ClearCryptTokenList(AH_HBCI_GetBankingApi(h)); DBG_ERROR(AQHBCI_LOGDOMAIN, "User keys missing, please generate them first"); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("User keys missing, " "please generate them first")); return GWEN_ERROR_NOT_FOUND; } } #if 0 modLen=GWEN_Crypt_Token_KeyInfo_GetModulusLen(ki); #else /* use the real modulus length */ modLen=GWEN_Crypt_Token_KeyInfo_GetModulusLen(ki); #endif keybuf=GWEN_Buffer_new(0, 257, 0, 1); /* prelude */ GWEN_Buffer_AppendString(lbuf, "

"); GWEN_Buffer_AppendString(lbuf, I18N("INI-Letter")); GWEN_Buffer_AppendString(lbuf, "

\n"); GWEN_Buffer_AppendString(lbuf, "\n"); GWEN_Buffer_AppendString(lbuf, "\n"); GWEN_Buffer_AppendString(lbuf, "\n"); if (useBankKey) { GWEN_Buffer_AppendString(lbuf, "\n"); } else { GWEN_Buffer_AppendString(lbuf, "\n"); } GWEN_Buffer_AppendString(lbuf, "\n"); GWEN_Buffer_AppendString(lbuf, "\n"); if (!useBankKey) { GWEN_Buffer_AppendString(lbuf, "\n"); } GWEN_Buffer_AppendString(lbuf, "
\n"); GWEN_Buffer_AppendString(lbuf, I18N("Date")); GWEN_Buffer_AppendString(lbuf, "\n"); ti=GWEN_CurrentTime(); assert(ti); GWEN_Time_toString(ti, I18N("YYYY/MM/DD"), lbuf); GWEN_Buffer_AppendString(lbuf, "
\n"); GWEN_Buffer_AppendString(lbuf, I18N("Time")); GWEN_Buffer_AppendString(lbuf, "\n"); GWEN_Time_toString(ti, I18N("hh:mm:ss"), lbuf); GWEN_Buffer_AppendString(lbuf, "
\n"); GWEN_Buffer_AppendString(lbuf, I18N("Bank Code")); GWEN_Buffer_AppendString(lbuf, "\n"); GWEN_Buffer_AppendString(lbuf, AB_User_GetBankCode(u)); GWEN_Buffer_AppendString(lbuf, "
\n"); GWEN_Buffer_AppendString(lbuf, I18N("User")); GWEN_Buffer_AppendString(lbuf, "\n"); GWEN_Buffer_AppendString(lbuf, AB_User_GetUserId(u)); GWEN_Buffer_AppendString(lbuf, "
\n"); GWEN_Buffer_AppendString(lbuf, I18N("Key number")); GWEN_Buffer_AppendString(lbuf, "\n"); snprintf(numbuf, sizeof(numbuf), "%d", GWEN_Crypt_Token_KeyInfo_GetKeyNumber(ki)); GWEN_Buffer_AppendString(lbuf, numbuf); GWEN_Buffer_AppendString(lbuf, "
\n"); GWEN_Buffer_AppendString(lbuf, I18N("Key version")); GWEN_Buffer_AppendString(lbuf, "\n"); snprintf(numbuf, sizeof(numbuf), "%d", GWEN_Crypt_Token_KeyInfo_GetKeyVersion(ki)); GWEN_Buffer_AppendString(lbuf, numbuf); GWEN_Buffer_AppendString(lbuf, "
\n"); GWEN_Buffer_AppendString(lbuf, I18N("Customer system")); GWEN_Buffer_AppendString(lbuf, "\n"); GWEN_Buffer_AppendString(lbuf, AH_HBCI_GetProductName(h)); GWEN_Buffer_AppendString(lbuf, "
\n"); GWEN_Buffer_AppendString(lbuf, "

"); GWEN_Buffer_AppendString(lbuf, I18N("Public key for electronic signature")); GWEN_Buffer_AppendString(lbuf, "

\n"); GWEN_Buffer_AppendString(lbuf, "

"); GWEN_Buffer_AppendString(lbuf, I18N("Exponent")); GWEN_Buffer_AppendString(lbuf, "

\n"); /* exponent */ p=GWEN_Crypt_Token_KeyInfo_GetExponentData(ki); l=GWEN_Crypt_Token_KeyInfo_GetExponentLen(ki); if (!p || !l) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Bad key."); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("Bad key")); return GWEN_ERROR_BAD_DATA; } GWEN_Buffer_AppendString(lbuf, "\n"); bbuf=GWEN_Buffer_new(0, modLen+1, 0, 1); GWEN_Buffer_AppendBytes(bbuf, p, l); GWEN_Buffer_Rewind(bbuf); if (l16) rl=16; GWEN_Buffer_AppendString(lbuf, " "); if (GWEN_Text_ToHexBuffer(p, rl, lbuf, 2, ' ', 0)) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Error converting to hex??"); abort(); } p+=rl; GWEN_Buffer_AppendString(lbuf, "
\n"); } GWEN_Buffer_AppendBuffer(keybuf, bbuf); GWEN_Buffer_free(bbuf); GWEN_Buffer_AppendString(lbuf, "
\n"); GWEN_Buffer_AppendString(lbuf, "
\n"); /* modulus */ GWEN_Buffer_AppendString(lbuf, "\n"); GWEN_Buffer_AppendString(lbuf, "

"); GWEN_Buffer_AppendString(lbuf, I18N("Modulus")); GWEN_Buffer_AppendString(lbuf, "

\n"); p=GWEN_Crypt_Token_KeyInfo_GetModulusData(ki); l=GWEN_Crypt_Token_KeyInfo_GetModulusLen(ki); if (!p || !l) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Bad key."); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("Bad key")); return GWEN_ERROR_BAD_DATA; } GWEN_Buffer_AppendString(lbuf, "\n"); bbuf=GWEN_Buffer_new(0, modLen+1, 0, 1); GWEN_Buffer_AppendBytes(bbuf, p, l); GWEN_Buffer_Rewind(bbuf); p=GWEN_Buffer_GetStart(bbuf); l=GWEN_Buffer_GetUsedBytes(bbuf); for (i=0; i16) rl=16; GWEN_Buffer_AppendString(lbuf, " "); if (GWEN_Text_ToHexBuffer(p, rl, lbuf, 2, ' ', 0)) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Error converting to hex??"); abort(); } p+=rl; GWEN_Buffer_AppendString(lbuf, "
\n"); } GWEN_Buffer_AppendBuffer(keybuf, bbuf); GWEN_Buffer_free(bbuf); GWEN_Buffer_AppendString(lbuf, "
\n"); GWEN_Buffer_AppendString(lbuf, "
\n"); GWEN_Buffer_AppendString(lbuf, "

"); GWEN_Buffer_AppendString(lbuf, I18N("Hash (RMD-160)")); GWEN_Buffer_AppendString(lbuf, "

\n"); GWEN_Buffer_AppendString(lbuf, "\n"); rv=_hashRmd160((const uint8_t *)GWEN_Buffer_GetStart(keybuf), GWEN_Buffer_GetUsedBytes(keybuf), (uint8_t *)hashbuffer); if (rv) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Error hashing (%d)", rv); abort(); } GWEN_Buffer_AppendString(lbuf, " "); if (GWEN_Text_ToHexBuffer(hashbuffer, 20, lbuf, 2, ' ', 0)) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Error converting to hex??"); abort(); } GWEN_Buffer_AppendString(lbuf, "\n"); GWEN_Buffer_AppendString(lbuf, "
\n"); GWEN_Buffer_AppendString(lbuf, "

"); GWEN_Buffer_AppendString(lbuf, I18N("Hash (SHA-256)")); GWEN_Buffer_AppendString(lbuf, "

\n"); GWEN_Buffer_AppendString(lbuf, "\n"); rv=_hashSha256((const uint8_t *)GWEN_Buffer_GetStart(keybuf), GWEN_Buffer_GetUsedBytes(keybuf), (uint8_t *)hashbuffer); if (rv) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Error hashing (%d)", rv); abort(); } GWEN_Buffer_free(keybuf); GWEN_Buffer_AppendString(lbuf, " "); if (GWEN_Text_ToHexBuffer(hashbuffer, 32, lbuf, 2, ' ', 0)) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Error converting to hex??"); abort(); } GWEN_Buffer_AppendString(lbuf, "\n"); GWEN_Buffer_AppendString(lbuf, "
\n"); if (!useBankKey) { GWEN_Buffer_AppendString(lbuf, "

\n"); GWEN_Buffer_AppendString(lbuf, I18N("I confirm that I created the above key " "for my electronic signature.\n")); GWEN_Buffer_AppendString(lbuf, "

\n"); GWEN_Buffer_AppendString(lbuf, "\n"); GWEN_Buffer_AppendString(lbuf, "
\n"); GWEN_Buffer_AppendString(lbuf, "____________________________ "); GWEN_Buffer_AppendString(lbuf, "\n"); GWEN_Buffer_AppendString(lbuf, "____________________________ "); GWEN_Buffer_AppendString(lbuf, "
\n"); GWEN_Buffer_AppendString(lbuf, I18N("Place, date")); GWEN_Buffer_AppendString(lbuf, "\n"); GWEN_Buffer_AppendString(lbuf, I18N("Signature")); GWEN_Buffer_AppendString(lbuf, "
\n"); GWEN_Buffer_AppendString(lbuf, "
\n"); } return 0; } int _hashRmd160(const uint8_t *p, unsigned int l, uint8_t *buf) { GWEN_MDIGEST *md; int rv; md=GWEN_MDigest_Rmd160_new(); assert(md); rv=GWEN_MDigest_Begin(md); if (rv<0) { GWEN_MDigest_free(md); return rv; } rv=GWEN_MDigest_Update(md, p, l); if (rv<0) { GWEN_MDigest_free(md); return rv; } rv=GWEN_MDigest_End(md); if (rv<0) { GWEN_MDigest_free(md); return rv; } memmove(buf, GWEN_MDigest_GetDigestPtr(md), GWEN_MDigest_GetDigestSize(md)); GWEN_MDigest_free(md); return 0; } int _hashSha256(const uint8_t *p, unsigned int l, uint8_t *buf) { GWEN_MDIGEST *md; int rv; md=GWEN_MDigest_Sha256_new(); assert(md); rv=GWEN_MDigest_Begin(md); if (rv<0) { GWEN_MDigest_free(md); return rv; } rv=GWEN_MDigest_Update(md, p, l); if (rv<0) { GWEN_MDigest_free(md); return rv; } rv=GWEN_MDigest_End(md); if (rv<0) { GWEN_MDigest_free(md); return rv; } memmove(buf, GWEN_MDigest_GetDigestPtr(md), GWEN_MDigest_GetDigestSize(md)); GWEN_MDigest_free(md); return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/banking/provider.c0000664000175000017500000002375214214726437022236 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "provider_p.h" #include "provider_accspec.h" #include "provider_dialogs.h" #include "provider_sendcmd.h" #include "provider_update.h" #include "aqhbci/aqhbci_l.h" #include "aqhbci/banking/account_l.h" #include "aqhbci/msglayer/hbci_l.h" #include "aqhbci/msglayer/dialog_l.h" #include "aqhbci/applayer/outbox_l.h" #include "aqhbci/banking/user_l.h" #include "aqhbci/control/control_l.h" #include "aqhbci/msglayer/message_l.h" /* for test4 */ /* #include "dlg_newuser_l.h" #include "dlg_pintan_l.h" #include "dlg_ddvcard_l.h" #include "dlg_zkacard_l.h" #include "dlg_newkeyfile_l.h" #include "dlg_importkeyfile_l.h" #include "dlg_edituserpintan_l.h" #include "dlg_edituserddv_l.h" #include "dlg_edituserrdh_l.h" #include "dlg_choose_usertype_l.h" #include "dlg_editaccount_l.h" */ #include "aqhbci/applayer/adminjobs_l.h" #include "aqhbci/banking/user.h" #include #include #include #include #include #include #include #include #include #include #include #include #ifdef OS_WIN32 # define AH_PATH_SEP "\\" #else # define AH_PATH_SEP "/" #endif GWEN_INHERIT(AB_PROVIDER, AH_PROVIDER); AB_PROVIDER *AH_Provider_new(AB_BANKING *ab, const char *name) { AB_PROVIDER *pro; AH_PROVIDER *hp; pro=AB_Provider_new(ab, name); assert(pro); AB_Provider_SetInitFn(pro, AH_Provider_Init); AB_Provider_SetFiniFn(pro, AH_Provider_Fini); AB_Provider_SetGetNewUserDialogFn(pro, AH_Provider_GetNewUserDialog); AB_Provider_SetGetEditUserDialogFn(pro, AH_Provider_GetEditUserDialog); AB_Provider_SetGetUserTypeDialogFn(pro, AH_Provider_GetUserTypeDialog); AB_Provider_SetGetEditAccountDialogFn(pro, AH_Provider_GetEditAccountDialog); AB_Provider_SetSendCommandsFn(pro, AH_Provider_SendCommands); AB_Provider_SetCreateAccountObjectsFn(pro, AH_Provider_CreateAccountObject); AB_Provider_SetCreateUserObjectsFn(pro, AH_Provider_CreateUserObject); AB_Provider_SetUpdateAccountSpecFn(pro, AH_Provider_UpdateAccountSpec); AB_Provider_SetControlFn(pro, AH_Control); AB_Provider_AddFlags(pro, AB_PROVIDER_FLAGS_HAS_NEWUSER_DIALOG | AB_PROVIDER_FLAGS_HAS_EDITUSER_DIALOG | AB_PROVIDER_FLAGS_HAS_EDITACCOUNT_DIALOG | AB_PROVIDER_FLAGS_HAS_USERTYPE_DIALOG); GWEN_NEW_OBJECT(AH_PROVIDER, hp); GWEN_INHERIT_SETDATA(AB_PROVIDER, AH_PROVIDER, pro, hp, AH_Provider_FreeData); hp->hbci=AH_HBCI_new(pro); assert(hp->hbci); hp->dbTempConfig=GWEN_DB_Group_new("tmpConfig"); return pro; } void GWENHYWFAR_CB AH_Provider_FreeData(void *bp, void *p) { AH_PROVIDER *hp; DBG_INFO(AQHBCI_LOGDOMAIN, "Destroying AH_PROVIDER"); hp=(AH_PROVIDER *)p; GWEN_DB_Group_free(hp->dbTempConfig); AH_HBCI_free(hp->hbci); GWEN_FREE_OBJECT(hp); } int AH_Provider_Init(AB_PROVIDER *pro, GWEN_DB_NODE *dbData) { AH_PROVIDER *hp; int rv; const char *logLevelName; uint32_t currentVersion; uint32_t lastVersion; if (!GWEN_Logger_IsOpen(AQHBCI_LOGDOMAIN)) { GWEN_Logger_Open(AQHBCI_LOGDOMAIN, "aqhbci", 0, GWEN_LoggerType_Console, GWEN_LoggerFacility_User); } logLevelName=getenv("AQHBCI_LOGLEVEL"); if (logLevelName) { GWEN_LOGGER_LEVEL ll; ll=GWEN_Logger_Name2Level(logLevelName); if (ll!=GWEN_LoggerLevel_Unknown) { GWEN_Logger_SetLevel(AQHBCI_LOGDOMAIN, ll); DBG_WARN(AQHBCI_LOGDOMAIN, "Overriding loglevel for AqHBCI with \"%s\"", logLevelName); } else { DBG_ERROR(AQHBCI_LOGDOMAIN, "Unknown loglevel \"%s\"", logLevelName); } } DBG_NOTICE(AQHBCI_LOGDOMAIN, "Initializing AqHBCI backend"); assert(pro); hp=GWEN_INHERIT_GETDATA(AB_PROVIDER, AH_PROVIDER, pro); assert(hp); GWEN_DB_ClearGroup(hp->dbTempConfig, 0); /* check whether we need to update */ currentVersion= (AQBANKING_VERSION_MAJOR<<24) | (AQBANKING_VERSION_MINOR<<16) | (AQBANKING_VERSION_PATCHLEVEL<<8) | AQBANKING_VERSION_BUILD; lastVersion=GWEN_DB_GetIntValue(dbData, "lastVersion", 0, 0); if (lastVersionhbci, dbData); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); } if (lastVersionhbci, dbData); GWEN_DB_ClearGroup(hp->dbTempConfig, 0); return rv; } const char *AH_Provider_GetProductName(const AB_PROVIDER *pro) { AH_HBCI *h; assert(pro); h=AH_Provider_GetHbci(pro); assert(h); return AH_HBCI_GetProductName(h); } const char *AH_Provider_GetProductVersion(const AB_PROVIDER *pro) { AH_HBCI *h; assert(pro); h=AH_Provider_GetHbci(pro); assert(h); return AH_HBCI_GetProductVersion(h); } AH_HBCI *AH_Provider_GetHbci(const AB_PROVIDER *pro) { AH_PROVIDER *hp; assert(pro); hp=GWEN_INHERIT_GETDATA(AB_PROVIDER, AH_PROVIDER, pro); assert(hp); return hp->hbci; } AB_ACCOUNT *AH_Provider_CreateAccountObject(AB_PROVIDER *pro) { return AH_Account_new(pro); } AB_USER *AH_Provider_CreateUserObject(AB_PROVIDER *pro) { return AH_User_new(pro); } int AH_Provider_CheckCryptToken(AB_PROVIDER *pro, GWEN_CRYPT_TOKEN_DEVICE devt, GWEN_BUFFER *typeName, GWEN_BUFFER *tokenName) { GWEN_PLUGIN_MANAGER *pm; int rv; /* get crypt token */ pm=GWEN_PluginManager_FindPluginManager(GWEN_CRYPT_TOKEN_PLUGIN_TYPENAME); if (pm==0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "CryptToken plugin manager not found"); return GWEN_ERROR_NOT_FOUND; } /* try to determine the type and name */ rv=GWEN_Crypt_Token_PluginManager_CheckToken(pm, devt, typeName, tokenName, 0); if (rv) { DBG_ERROR(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } return 0; } int AH_Provider_WriteValueToDb(const AB_VALUE *v, GWEN_DB_NODE *dbV) { if (v) { GWEN_BUFFER *nbuf; char *p; const char *s; int l; nbuf=GWEN_Buffer_new(0, 32, 0, 1); AH_Job_ValueToChallengeString(v, nbuf); l=GWEN_Buffer_GetUsedBytes(nbuf); if (!l) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Error in conversion"); GWEN_Buffer_free(nbuf); abort(); } /* replace "C" comma with "DE" comma, remove thousand's comma */ p=GWEN_Buffer_GetStart(nbuf); s=p; while (*s) { if (*s=='.') { *p=','; p++; } else if (*s!=',') { *p=*s; p++; } s++; } /* while */ *p=0; if (strchr(GWEN_Buffer_GetStart(nbuf), ',')) { /* kill all trailing '0' behind the comma */ p=GWEN_Buffer_GetStart(nbuf)+l; while (l--) { --p; if (*p=='0') *p=0; else break; } } else GWEN_Buffer_AppendString(nbuf, ","); /* store value */ GWEN_DB_SetCharValue(dbV, GWEN_DB_FLAGS_OVERWRITE_VARS, "value", GWEN_Buffer_GetStart(nbuf)); GWEN_Buffer_free(nbuf); s=AB_Value_GetCurrency(v); if (!s) s="EUR"; GWEN_DB_SetCharValue(dbV, GWEN_DB_FLAGS_OVERWRITE_VARS, "currency", s); return 0; } /* if value */ else { DBG_ERROR(AQHBCI_LOGDOMAIN, "No value"); return GWEN_ERROR_NO_DATA; } } static int AH_Provider_Test4(AB_PROVIDER *pro) { #if 0 AB_BANKING *ab; AB_USER *u; AH_DIALOG *dlg; AH_MSG *msg; GWEN_BUFFER *tbuf; ab=AB_Provider_GetBanking(pro); assert(ab); tbuf=GWEN_Buffer_new(0, 1024, 0, 1); GWEN_Buffer_AppendString(tbuf, "(Test-String)"); GWEN_Buffer_Rewind(tbuf); u=AB_Banking_FindUser(ab, "aqhbci", "de", "20090500", "*", "*"); assert(u); dlg=AH_Dialog_new(u); assert(dlg); AH_Dialog_AddFlags(dlg, AH_DIALOG_FLAGS_INITIATOR); msg=AH_Msg_new(dlg); assert(msg); AH_Msg_SetBuffer(msg, tbuf); AH_Msg_SetHbciVersion(msg, 220); AH_Msg_AddSignerId(msg, AB_User_GetUserId(u)); AH_Msg_SetCrypterId(msg, AB_User_GetUserId(u)); if (AH_Msg_EncodeMsg(msg)) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not decode this message:"); AH_Msg_Dump(msg, 2); return -1; } fprintf(stderr, "Message is:\n"); AH_Msg_Dump(msg, 2); #endif return 0; } int AH_Provider_Test(AB_PROVIDER *pro) { return AH_Provider_Test4(pro); } #include "provider_dtazv.c" aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/banking/provider_update.h0000664000175000017500000000134514043610745023571 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2020 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_PROVIDER_UPDATE_H #define AH_PROVIDER_UPDATE_H #include int AH_Provider_UpdatePreInit(AB_PROVIDER *pro, uint32_t lastVersion, uint32_t currentVersion); int AH_Provider_UpdatePostInit(AB_PROVIDER *pro, uint32_t lastVersion, uint32_t currentVersion); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/banking/provider_keys.h0000664000175000017500000000122514043610745023257 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2020 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_PROVIDER_KEYS_H #define AH_PROVIDER_KEYS_H #include #include int AH_Provider_CreateKeys(AB_PROVIDER *pro, AB_USER *u, int nounmount); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/banking/provider_sendcmd.c0000664000175000017500000002220314275012617023714 00000000000000/*************************************************************************** begin : Tue Jun 03 2018 copyright : (C) 2020 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "provider_sendcmd.h" #include "aqhbci/banking/provider_job.h" #include #include /* ------------------------------------------------------------------------------------------------ * forward declarations * ------------------------------------------------------------------------------------------------ */ static int _addCommandToOutbox(AB_PROVIDER *pro, AB_USER *u, AB_ACCOUNT *a, AB_TRANSACTION *t, AH_OUTBOX *outbox); static int _addCommandsToOutbox(AB_PROVIDER *pro, const AB_USERQUEUE_LIST *uql, AB_IMEXPORTER_CONTEXT *ctx, AH_OUTBOX *outbox); static int _sampleResults(AB_PROVIDER *pro, AH_OUTBOX *outbox, AB_IMEXPORTER_CONTEXT *ctx); /* ------------------------------------------------------------------------------------------------ * implementations * ------------------------------------------------------------------------------------------------ */ int AH_Provider_SendCommands(AB_PROVIDER *pro, AB_PROVIDERQUEUE *pq, AB_IMEXPORTER_CONTEXT *ctx) { AB_USERQUEUE_LIST *uql; int rv; int rv2; AH_OUTBOX *outbox; assert(pro); /* sort into user queue list */ uql=AB_UserQueue_List_new(); rv=AB_Provider_SortProviderQueueIntoUserQueueList(pro, pq, uql); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); AB_Provider_FreeUsersAndAccountsFromUserQueueList(pro, uql); AB_UserQueue_List_free(uql); return rv; } /* add users to outbox */ outbox=AH_Outbox_new(pro); rv=_addCommandsToOutbox(pro, uql, ctx, outbox); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); AB_Provider_FreeUsersAndAccountsFromUserQueueList(pro, uql); AB_UserQueue_List_free(uql); return rv; } /* actually send commands */ rv=AH_Outbox_Execute(outbox, ctx, 0, 1, 1); if (rv<0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Error executing outbox (%d).", rv); rv=GWEN_ERROR_GENERIC; } /* gather results */ rv2=_sampleResults(pro, outbox, ctx); if (rv2<0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Error sampling results (%d)", rv2); } AH_Outbox_free(outbox); /* release accounts and users we loaded */ AB_Provider_FreeUsersAndAccountsFromUserQueueList(pro, uql); AB_UserQueue_List_free(uql); /* error code from AH_Outbox_Execute is more important than that from _sampleResults */ if (rv>=0) rv=rv2; return rv; } int _addCommandToOutbox(AB_PROVIDER *pro, AB_USER *u, AB_ACCOUNT *a, AB_TRANSACTION *t, AH_OUTBOX *outbox) { int rv; int cmd; AH_JOB *mj=NULL; int jobIsNew=1; cmd=AB_Transaction_GetCommand(t); /* try to get an existing multi job to add the new one to */ rv=AH_Provider_GetMultiHbciJob(pro, outbox, u, a, cmd, &mj); if (rv==0) { DBG_INFO(AQHBCI_LOGDOMAIN, "Reusing existing multi job"); AB_Banking_LogMsgForJobId(AB_Provider_GetBanking(pro), AB_Transaction_GetUniqueId(t), "Reusing existing HBCI job %08x, look there for further logs", AH_Job_GetId(mj)); jobIsNew=0; } else { if (rv!=GWEN_ERROR_NOT_FOUND) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Error looking for multi job (%d), ignoring", rv); AB_Banking_LogMsgForJobId(AB_Provider_GetBanking(pro), AB_Transaction_GetUniqueId(t), "Error searching for multi-job (%d)", rv); } } /* create new job if necessary */ if (mj==NULL) { rv=AH_Provider_CreateHbciJob(pro, u, a, cmd, &mj); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); AB_Banking_LogMsgForJobId(AB_Provider_GetBanking(pro), AB_Transaction_GetUniqueId(t), "Error creating HbciJob (%d)", rv); return rv; } AB_Banking_LogMsgForJobId(AB_Provider_GetBanking(pro), AB_Transaction_GetUniqueId(t), "Created new HBCI job (%08x)", AH_Job_GetFlags(mj)); } assert(mj); if (AH_Job_GetId(mj)==0) { int jid; /*jid=AB_Banking_GetNamedUniqueId(AB_Provider_GetBanking(pro), "job", 1);*/ jid=AB_Transaction_GetUniqueId(t); /* reuse unique id */ assert(jid); AH_Job_SetId(mj, jid); } if (jobIsNew) { int sigs; /* check whether we need to sign the job */ sigs=AH_Job_GetMinSignatures(mj); if (sigs) { if (sigs>1) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Multiple signatures not yet supported"); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("ERROR: Multiple signatures not yet supported")); AB_Banking_LogMsgForJobId(AB_Provider_GetBanking(pro), AH_Job_GetId(mj), "Multiple signatures not supported"); AH_Job_free(mj); return GWEN_ERROR_GENERIC; } AH_Job_AddSigner(mj, AB_User_GetUserId(u)); } } /* exchange arguments */ AB_Banking_LogMsgForJobId(AB_Provider_GetBanking(pro), AH_Job_GetId(mj), "Letting job handle command %08x", (unsigned int) AB_Transaction_GetUniqueId(t)); rv=AH_Job_HandleCommand(mj, t); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); AB_Banking_LogMsgForJobId(AB_Provider_GetBanking(pro), AH_Job_GetId(mj), "Error on AH_Job_HandleCommand(): %d", rv); if (jobIsNew) AH_Job_free(mj); return rv; } /* add command to job */ AH_Job_AddCommand(mj, t); AB_Banking_LogCmdInfoMsgForJob(AB_Provider_GetBanking(pro), t, AH_Job_GetId(mj), "Added command to job: "); if (jobIsNew) { /* add job to outbox */ AH_Outbox_AddJob(outbox, mj); AB_Banking_LogMsgForJobId(AB_Provider_GetBanking(pro), AH_Job_GetId(mj), "Job added to outbox"); AH_Job_free(mj); } DBG_INFO(AQHBCI_LOGDOMAIN, "Command successfully added"); return 0; } int _addCommandsToOutbox(AB_PROVIDER *pro, const AB_USERQUEUE_LIST *uql, AB_IMEXPORTER_CONTEXT *ctx, AH_OUTBOX *outbox) { AB_USERQUEUE *uq; assert(pro); uq=AB_UserQueue_List_First(uql); while (uq) { AB_ACCOUNTQUEUE_LIST *aql; AB_USER *u; u=AB_UserQueue_GetUser(uq); assert(u); DBG_NOTICE(0, "Handling user \"%s\"", AB_User_GetUserId(u)); aql=AB_UserQueue_GetAccountQueueList(uq); if (aql) { AB_ACCOUNTQUEUE *aq; aq=AB_AccountQueue_List_First(aql); while (aq) { AB_ACCOUNT *a; AB_TRANSACTION_LIST2 *tl2; a=AB_AccountQueue_GetAccount(aq); assert(a); /* read transactions */ tl2=AB_AccountQueue_GetTransactionList(aq); if (tl2) { AB_TRANSACTION_LIST2_ITERATOR *it; it=AB_Transaction_List2_First(tl2); if (it) { AB_TRANSACTION *t; t=AB_Transaction_List2Iterator_Data(it); while (t) { int rv; rv=_addCommandToOutbox(pro, u, a, t, outbox); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); AB_Transaction_SetStatus(t, AB_Transaction_StatusError); } t=AB_Transaction_List2Iterator_Next(it); } AB_Transaction_List2Iterator_free(it); } } aq=AB_AccountQueue_List_Next(aq); } } uq=AB_UserQueue_List_Next(uq); } return 0; } int _sampleResults(AB_PROVIDER *pro, AH_OUTBOX *outbox, AB_IMEXPORTER_CONTEXT *ctx) { AH_JOB_LIST *mjl; AH_JOB *j; assert(pro); assert(outbox); mjl=AH_Outbox_GetFinishedJobs(outbox); assert(mjl); j=AH_Job_List_First(mjl); while (j) { AB_MESSAGE_LIST *ml; int rv; if (GWEN_Logger_GetLevel(AQHBCI_LOGDOMAIN)>=GWEN_LoggerLevel_Info) { const GWEN_STRINGLIST *sl; GWEN_STRINGLISTENTRY *se; /* exchange logs */ sl=AH_Job_GetLogs(j); assert(sl); se=GWEN_StringList_FirstEntry(sl); if (se) { DBG_DEBUG(AQHBCI_LOGDOMAIN, "Logs for job %s", AH_Job_GetName(j)); while (se) { const char *s; s=GWEN_StringListEntry_Data(se); assert(s); DBG_DEBUG(AQHBCI_LOGDOMAIN, "- %s", s); //AB_Job_LogRaw(bj, s); se=GWEN_StringListEntry_Next(se); } } } /* get remaining results */ rv=AH_Job_HandleResults(j, ctx); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); } /* copy messages from AH_JOB to imexporter context */ ml=AH_Job_GetMessages(j); if (ml) { AB_MESSAGE *msg; msg=AB_Message_List_First(ml); while (msg) { AB_ImExporterContext_AddMessage(ctx, AB_Message_dup(msg)); msg=AB_Message_List_Next(msg); } } j=AH_Job_List_Next(j); } /* while j */ return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/banking/user_p.h0000664000175000017500000000451614043610745021675 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_USER_P_H #define AH_USER_P_H #include "user_l.h" #include #include #define AH_USER_MAX_TANMETHODS 16 #define AH_USER_MAX_TRANSFERS_PER_JOB 64 #define AH_USER_MAX_DEBITNOTES_PER_JOB 64 typedef struct AH_USER AH_USER; struct AH_USER { AH_HBCI *hbci; GWEN_MSGENGINE *msgEngine; AH_CRYPT_MODE cryptMode; AH_USER_STATUS status; int hbciVersion; GWEN_URL *serverUrl; AH_BPD *bpd; GWEN_DB_NODE *dbUpd; char *peerId; char *systemId; int updVersion; int httpVMajor; int httpVMinor; char *httpUserAgent; char *httpContentType; uint32_t flags; uint32_t tanMethods; int selectedTanInputMechanism; char *tokenType; char *tokenName; uint32_t tokenContextId; int rdhType; int tanMethodList[AH_USER_MAX_TANMETHODS+1]; int tanMethodCount; int selectedTanMethod; char *prompt; AH_TAN_METHOD_LIST *tanMethodDescriptions; char *tanMediumId; GWEN_STRINGLIST *sepaDescriptors; char *sepaTransferProfile; char *sepaDebitNoteProfile; int maxTransfersPerJob; int maxDebitNotesPerJob; GWEN_CRYPT_KEY *bankPubCryptKey; GWEN_CRYPT_KEY *bankPubSignKey; AB_USER_READFROMDB_FN readFromDbFn; AB_USER_WRITETODB_FN writeToDbFn; }; static void GWENHYWFAR_CB AH_User_freeData(void *bp, void *p); static void AH_User__ReadDb(AB_USER *u, GWEN_DB_NODE *db); static void AH_User__WriteDb(const AB_USER *u, GWEN_DB_NODE *db); static void AH_User_LoadTanMethods(AB_USER *u); static void AH_User_LoadSepaDescriptors(AB_USER *u); static GWEN_DB_NODE *AH_User_GetUpdForAccountIdAndSuffix(const AB_USER *u, const char *sAccountNumber, const char *sAccountSuffix); static int AH_User_ReadFromDb(AB_USER *u, GWEN_DB_NODE *db); static int AH_User_WriteToDb(const AB_USER *u, GWEN_DB_NODE *db); #endif /* AH_USER_P_H */ aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/banking/Makefile.am0000664000175000017500000000323514044534776022272 00000000000000 AM_CFLAGS=-DBUILDING_AQBANKING @visibility_cflags@ AM_CPPFLAGS = -I$(top_srcdir)/src/libs -I$(top_builddir)/src/libs $(gwenhywfar_includes) \ -I$(srcdir)/../.. \ -I$(srcdir)/../msglayer -I$(srcdir)/../joblayer \ -I$(srcdir)/../applayer -I$(srcdir)/.. \ -I$(srcdir)/../tan \ -I$(srcdir)/../ajobs -I$(srcdir)/../admjobs \ -I$(srcdir)/../dialogs -I$(srcdir)/../control localedir = $(datadir)/locale DEFS += -DLOCALEDIR=\"$(localedir)\" \ -DAQHBCI_PLUGINS=\"$(aqhbci_plugindir)\" noinst_LTLIBRARIES=libhbcibanking.la noinst_HEADERS=\ provider_l.h \ provider_p.h \ provider.h \ provider_accspec.h \ provider_dialogs.h \ provider_iniletter.h \ provider_job.h \ provider_keys.h \ provider_online.h \ provider_sendcmd.h \ provider_tan.h \ provider_update.h \ user.h \ user_p.h \ user_l.h \ account.h \ account_l.h \ account_p.h #iheaderdir=@aqbanking_headerdir_am@/aqhbci #iheader_HEADERS= libhbcibanking_la_SOURCES=\ provider.c \ provider_accspec.c \ provider_dialogs.c \ provider_iniletter.c \ provider_job.c \ provider_keys.c \ provider_online.c \ provider_sendcmd.c \ provider_tan.c \ provider_update.c \ account.c \ user.c EXTRA_DIST=\ provider_dtazv.c sources: for f in $(libhbcibanking_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d sources; \ done typefiles: for d in $(SUBDIRS); do \ $(MAKE) -C $$d typefiles; \ done typedefs: for d in $(SUBDIRS); do \ $(MAKE) -C $$d typedefs; \ done cppcheck: for f in $(libhbcibanking_la_SOURCES); do \ cppcheck --force $$f ; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/banking/user.c0000664000175000017500000016463414044534776021373 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "user_p.h" #include "aqhbci/msglayer/hbci_l.h" #include "aqhbci/banking/provider_l.h" #include "aqhbci/msglayer/hbci-updates_l.h" #include "aqhbci/msglayer/msgengine_l.h" #include "aqhbci/tan/tanmethod.h" #include "aqhbci/banking/provider.h" #include "aqhbci/applayer/adminjobs_l.h" #include "aqhbci/applayer/hhd_l.h" #include "aqbanking/i18n_l.h" #include #include #include #include GWEN_INHERIT(AB_USER, AH_USER) const char *AH_User_Status_toString(AH_USER_STATUS st) { switch (st) { case AH_UserStatusNew: return "new"; case AH_UserStatusEnabled: return "enabled"; case AH_UserStatusPending: return "pending"; case AH_UserStatusDisabled: return "disabled"; default: return "unknown"; } /* switch */ } AH_USER_STATUS AH_User_Status_fromString(const char *s) { assert(s); if (strcasecmp(s, "new")==0) return AH_UserStatusNew; else if (strcasecmp(s, "enabled")==0) return AH_UserStatusEnabled; else if (strcasecmp(s, "pending")==0) return AH_UserStatusPending; else if (strcasecmp(s, "disabled")==0) return AH_UserStatusDisabled; else return AH_UserStatusUnknown; } void AH_User_Flags_toDb(GWEN_DB_NODE *db, const char *name, uint32_t flags) { GWEN_DB_DeleteVar(db, name); if (flags & AH_USER_FLAGS_BANK_DOESNT_SIGN) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_DEFAULT, name, "bankDoesntSign"); if (flags & AH_USER_FLAGS_BANK_USES_SIGNSEQ) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_DEFAULT, name, "bankUsesSignSeq"); if (flags & AH_USER_FLAGS_IGNORE_UPD) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_DEFAULT, name, "ignoreUpd"); if (flags & AH_USER_FLAGS_NO_BASE64) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_DEFAULT, name, "noBase64"); if (flags & AH_USER_FLAGS_KEEP_MULTIPLE_BLANKS) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_DEFAULT, name, "keepMultipleBlanks"); if (flags & AH_USER_FLAGS_TAN_OMIT_SMS_ACCOUNT) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_DEFAULT, name, "omitSmsAccount"); if (flags & AH_USER_FLAGS_USE_STRICT_SEPA_CHARSET) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_DEFAULT, name, "useStrictSepaCharset"); if (flags & AH_USER_FLAGS_VERIFY_NO_BANKSIGNKEY) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_DEFAULT, name, "verifyNoBankSignKey"); } uint32_t AH_User_Flags_fromDb(GWEN_DB_NODE *db, const char *name) { uint32_t fl=0; int i; for (i=0; ; i++) { const char *s; s=GWEN_DB_GetCharValue(db, name, i, 0); if (!s) break; if (strcasecmp(s, "bankDoesntSign")==0) fl|=AH_USER_FLAGS_BANK_DOESNT_SIGN; else if (strcasecmp(s, "bankUsesSignSeq")==0) fl|=AH_USER_FLAGS_BANK_USES_SIGNSEQ; else if (strcasecmp(s, "ignoreUpd")==0) fl|=AH_USER_FLAGS_IGNORE_UPD; else if (strcasecmp(s, "noBase64")==0) fl|=AH_USER_FLAGS_NO_BASE64; else if (strcasecmp(s, "keepMultipleBlanks")==0) fl|=AH_USER_FLAGS_KEEP_MULTIPLE_BLANKS; else if (strcasecmp(s, "omitSmsAccount")==0) fl|=AH_USER_FLAGS_TAN_OMIT_SMS_ACCOUNT; else if (strcasecmp(s, "useStrictSepaCharset")==0) fl|=AH_USER_FLAGS_USE_STRICT_SEPA_CHARSET; else if (strcasecmp(s, "tlsIgnPrematureClose")==0) { DBG_INFO(AQHBCI_LOGDOMAIN, "Flag \"tlsIgnPrematureClose\" is default now, ignoring."); } else if (strcasecmp(s, "verifyNoBankSignKey")==0) fl|=AH_USER_FLAGS_VERIFY_NO_BANKSIGNKEY; else { DBG_WARN(AQHBCI_LOGDOMAIN, "Unknown user flag \"%s\"", s); } } return fl; } AB_USER *AH_User_new(AB_PROVIDER *pro) { AB_USER *u; AH_USER *ue; assert(pro); u=AB_User_new(); assert(u); GWEN_NEW_OBJECT(AH_USER, ue); GWEN_INHERIT_SETDATA(AB_USER, AH_USER, u, ue, AH_User_freeData); AB_User_SetProvider(u, pro); AB_User_SetBackendName(u, "aqhbci"); ue->readFromDbFn=AB_User_SetReadFromDbFn(u, AH_User_ReadFromDb); ue->writeToDbFn=AB_User_SetWriteToDbFn(u, AH_User_WriteToDb); ue->tanMethodList[0]=-1; ue->tanMethodCount=0; ue->hbci=AH_Provider_GetHbci(pro); ue->tanMethodDescriptions=AH_TanMethod_List_new(); ue->sepaDescriptors=GWEN_StringList_new(); AB_User_SetCountry(u, "de"); ue->msgEngine=AH_MsgEngine_new(); GWEN_MsgEngine_SetEscapeChar(ue->msgEngine, '?'); GWEN_MsgEngine_SetCharsToEscape(ue->msgEngine, ":+\'@"); AH_MsgEngine_SetUser(ue->msgEngine, u); GWEN_MsgEngine_SetDefinitions(ue->msgEngine, AH_HBCI_GetDefinitions(ue->hbci), 0); ue->hbciVersion=210; ue->bpd=AH_Bpd_new(); ue->dbUpd=GWEN_DB_Group_new("upd"); ue->maxTransfersPerJob=AH_USER_MAX_TRANSFERS_PER_JOB; ue->maxDebitNotesPerJob=AH_USER_MAX_DEBITNOTES_PER_JOB; return u; } void GWENHYWFAR_CB AH_User_freeData(void *bp, void *p) { AH_USER *ue; ue=(AH_USER *)p; free(ue->tanMediumId); free(ue->peerId); free(ue->systemId); free(ue->httpContentType); free(ue->httpUserAgent); free(ue->tokenType); free(ue->tokenName); free(ue->prompt); GWEN_Url_free(ue->serverUrl); GWEN_DB_Group_free(ue->dbUpd); GWEN_Crypt_Key_free(ue->bankPubSignKey); GWEN_Crypt_Key_free(ue->bankPubCryptKey); AH_Bpd_free(ue->bpd); GWEN_MsgEngine_free(ue->msgEngine); AH_TanMethod_List_free(ue->tanMethodDescriptions); GWEN_StringList_free(ue->sepaDescriptors); GWEN_FREE_OBJECT(ue); } int AH_User_ReadFromDb(AB_USER *u, GWEN_DB_NODE *db) { AH_USER *ue; int rv; GWEN_DB_NODE *dbP; AB_PROVIDER *pro; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AH_USER, u); assert(ue); DBG_INFO(AQHBCI_LOGDOMAIN, "Reading user from db (%u)", (unsigned int) GWEN_DB_GetIntValue(db, "uniqueId", 0, 0)); /* save provider, because AB_User_ReadFromDb clears it */ pro=AB_User_GetProvider(u); /* read data for base class */ rv=(ue->readFromDbFn)(u, db); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } /* set provider again */ AB_User_SetProvider(u, pro); /* read data for provider */ dbP=GWEN_DB_GetGroup(db, GWEN_DB_FLAGS_DEFAULT, "data/backend"); AH_User__ReadDb(u, dbP); AH_User_LoadTanMethods(u); AH_User_LoadSepaDescriptors(u); return 0; } int AH_User_WriteToDb(const AB_USER *u, GWEN_DB_NODE *db) { AH_USER *ue; int rv; GWEN_DB_NODE *dbP; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AH_USER, u); assert(ue); DBG_INFO(AQHBCI_LOGDOMAIN, "Writing user db (%u)", (unsigned int) AB_User_GetUniqueId(u)); /* write data for base class */ rv=(ue->writeToDbFn)(u, db); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } /* write data for provider */ dbP=GWEN_DB_GetGroup(db, GWEN_DB_FLAGS_DEFAULT, "data/backend"); AH_User__WriteDb(u, dbP); return 0; } void AH_User__ReadDb(AB_USER *u, GWEN_DB_NODE *db) { AH_USER *ue; const char *s; GWEN_DB_NODE *gr; int i; DBG_INFO(AQHBCI_LOGDOMAIN, "Reading HBCI data for user (%u)", (unsigned int) AB_User_GetUniqueId(u)); assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AH_USER, u); assert(ue); s=GWEN_DB_GetCharValue(db, "cryptMode", 0, "unknown"); ue->cryptMode=AH_CryptMode_fromString(s); s=GWEN_DB_GetCharValue(db, "status", 0, "unknown"); ue->status=AH_User_Status_fromString(s); ue->hbciVersion=GWEN_DB_GetIntValue(db, "hbciVersion", 0, 210); ue->selectedTanInputMechanism=GWEN_DB_GetIntValue(db, "selectedTanInputMechanism", 0, 0); /* load server address */ GWEN_Url_free(ue->serverUrl); s=GWEN_DB_GetCharValue(db, "server", 0, 0); if (s) { ue->serverUrl=GWEN_Url_fromString(s); assert(ue->serverUrl); if (GWEN_Url_GetPort(ue->serverUrl)==0) { if (AH_User_GetCryptMode(u)==AH_CryptMode_Pintan) { GWEN_Url_SetPort(ue->serverUrl, 443); GWEN_Url_SetProtocol(ue->serverUrl, "https"); } else { GWEN_Url_SetProtocol(ue->serverUrl, "hbci"); GWEN_Url_SetPort(ue->serverUrl, 3000); } } } else ue->serverUrl=NULL; /* load bankPubCryptKey */ GWEN_Crypt_Key_free(ue->bankPubCryptKey); gr=GWEN_DB_GetGroup(db, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "bankPubCryptKey"); if (gr==NULL) gr=GWEN_DB_GetGroup(db, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "bankPubKey"); if (gr) { ue->bankPubCryptKey=GWEN_Crypt_KeyRsa_fromDb(gr); assert(ue->bankPubCryptKey); } else ue->bankPubCryptKey=NULL; /* load bankPubKey */ GWEN_Crypt_Key_free(ue->bankPubSignKey); gr=GWEN_DB_GetGroup(db, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "bankPubSignKey"); if (gr) { ue->bankPubSignKey=GWEN_Crypt_KeyRsa_fromDb(gr); assert(ue->bankPubSignKey); } else ue->bankPubSignKey=NULL; /* load BPD */ AH_Bpd_free(ue->bpd); gr=GWEN_DB_GetGroup(db, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "bpd"); if (gr) { ue->bpd=AH_Bpd_FromDb(gr); assert(ue->bpd); } else ue->bpd=AH_Bpd_new(); /* load UPD */ if (ue->dbUpd) GWEN_DB_Group_free(ue->dbUpd); gr=GWEN_DB_GetGroup(db, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "upd"); if (gr) { ue->dbUpd=GWEN_DB_Group_dup(gr); } else ue->dbUpd=GWEN_DB_Group_new("upd"); /* get peer id */ free(ue->peerId); s=GWEN_DB_GetCharValue(db, "peerId", 0, 0); if (s) ue->peerId=strdup(s); else ue->peerId=NULL; /* get system id */ free(ue->systemId); s=GWEN_DB_GetCharValue(db, "systemId", 0, 0); if (s) ue->systemId=strdup(s); else ue->systemId=NULL; ue->updVersion=GWEN_DB_GetIntValue(db, "updVersion", 0, 0); /* setup HTTP version */ ue->httpVMajor=GWEN_DB_GetIntValue(db, "httpVMajor", 0, -1); ue->httpVMinor=GWEN_DB_GetIntValue(db, "httpVMinor", 0, -1); if (ue->httpVMajor==-1 || ue->httpVMinor==-1) { ue->httpVMajor=1; ue->httpVMinor=0; } free(ue->httpContentType); s=GWEN_DB_GetCharValue(db, "httpContentType", 0, 0); if (s) ue->httpContentType=strdup(s); else ue->httpContentType=NULL; /* read user flags */ ue->flags=AH_User_Flags_fromDb(db, "userFlags"); /* setup medium stuff */ free(ue->tokenType); s=GWEN_DB_GetCharValue(db, "tokenType", 0, 0); if (s) ue->tokenType=strdup(s); else ue->tokenType=NULL; free(ue->tokenName); s=GWEN_DB_GetCharValue(db, "tokenName", 0, 0); if (s) ue->tokenName=strdup(s); else ue->tokenName=NULL; ue->tokenContextId=GWEN_DB_GetIntValue(db, "tokenContextId", 0, 1); /* get rdh type */ ue->rdhType=GWEN_DB_GetIntValue(db, "rdhType", 0, -1); if (ue->rdhType<1) ue->rdhType=1; /* read supported TAN methods */ DBG_INFO(AQHBCI_LOGDOMAIN, "Reading supported TAN methods (max %d)", AH_USER_MAX_TANMETHODS); for (i=0; itanMethodList[i]=-1; ue->tanMethodCount=0; for (i=0; itanMethodList[ue->tanMethodCount++]=method; /*ue->tanMethodList[ue->tanMethodCount]=-1;*/ DBG_INFO(AQHBCI_LOGDOMAIN, "- added TAN method %d (%d)", method, ue->tanMethodCount); } ue->selectedTanMethod=GWEN_DB_GetIntValue(db, "selectedTanMethod", 0, 0); /* read some settings */ ue->maxTransfersPerJob=GWEN_DB_GetIntValue(db, "maxTransfersPerJob", 0, AH_USER_MAX_TRANSFERS_PER_JOB); ue->maxDebitNotesPerJob=GWEN_DB_GetIntValue(db, "maxDebitNotesPerJob", 0, AH_USER_MAX_DEBITNOTES_PER_JOB); free(ue->sepaTransferProfile); s=GWEN_DB_GetCharValue(db, "sepaTransferProfile", 0, NULL); if (s) ue->sepaTransferProfile=strdup(s); else ue->sepaTransferProfile=NULL; free(ue->sepaDebitNoteProfile); s=GWEN_DB_GetCharValue(db, "sepaDebitNoteProfile", 0, NULL); if (s) ue->sepaDebitNoteProfile=strdup(s); else ue->sepaDebitNoteProfile=NULL; free(ue->tanMediumId); s=GWEN_DB_GetCharValue(db, "tanMediumId", 0, NULL); if (s) ue->tanMediumId=strdup(s); else ue->tanMediumId=NULL; } void AH_User__WriteDb(const AB_USER *u, GWEN_DB_NODE *db) { const AH_USER *ue; int i; GWEN_DB_NODE *gr; const char *s; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AH_USER, u); assert(ue); DBG_INFO(AQHBCI_LOGDOMAIN, "Writing HBCI data for user (%u)", (unsigned int) AB_User_GetUniqueId(u)); /* save crypt mode */ s=AH_CryptMode_toString(ue->cryptMode); GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "cryptMode", s); /* save status */ s=AH_User_Status_toString(ue->status); GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "status", s); GWEN_DB_SetIntValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "hbciVersion", ue->hbciVersion); GWEN_DB_SetIntValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "selectedTanInputMechanism", ue->selectedTanInputMechanism); if (ue->httpContentType) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "httpContentType", ue->httpContentType); else GWEN_DB_DeleteVar(db, "httpContentType"); /* save URL */ if (ue->serverUrl) { GWEN_BUFFER *nbuf; nbuf=GWEN_Buffer_new(0, 256, 0, 1); if (GWEN_Url_toString(ue->serverUrl, nbuf)) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not store url"); GWEN_Buffer_free(nbuf); assert(0); } GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "server", GWEN_Buffer_GetStart(nbuf)); GWEN_Buffer_free(nbuf); } /* if serverUrl */ /* save bankPubCryptKey */ if (ue->bankPubCryptKey) { assert(ue->bankPubCryptKey); gr=GWEN_DB_GetGroup(db, GWEN_DB_FLAGS_OVERWRITE_GROUPS, "bankPubCryptKey"); assert(gr); GWEN_Crypt_KeyRsa_toDb(ue->bankPubCryptKey, gr, 1); } else GWEN_DB_DeleteVar(db, "bankPubCryptKey"); /* save bankPubSignKey */ if (ue->bankPubSignKey) { assert(ue->bankPubSignKey); gr=GWEN_DB_GetGroup(db, GWEN_DB_FLAGS_OVERWRITE_GROUPS, "bankPubSignKey"); assert(gr); GWEN_Crypt_KeyRsa_toDb(ue->bankPubSignKey, gr, 1); } else GWEN_DB_DeleteVar(db, "bankPubSignKey"); /* save BPD */ assert(ue->bpd); gr=GWEN_DB_GetGroup(db, GWEN_DB_FLAGS_OVERWRITE_GROUPS, "bpd"); assert(gr); AH_Bpd_ToDb(ue->bpd, gr); /* save UPD */ if (ue->dbUpd) { gr=GWEN_DB_GetGroup(db, GWEN_DB_FLAGS_OVERWRITE_GROUPS, "upd"); assert(gr); GWEN_DB_AddGroupChildren(gr, ue->dbUpd); } if (ue->peerId) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "peerId", ue->peerId); if (ue->systemId) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "systemId", ue->systemId); GWEN_DB_SetIntValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "updVersion", ue->updVersion); /* save http settings */ GWEN_DB_SetIntValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "httpVMajor", ue->httpVMajor); GWEN_DB_SetIntValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "httpVMinor", ue->httpVMinor); if (ue->httpUserAgent) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "httpUserAgent", ue->httpUserAgent); /* save flags */ AH_User_Flags_toDb(db, "userFlags", ue->flags); /* save crypt token settings */ if (ue->tokenType) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "tokenType", ue->tokenType); if (ue->tokenName) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "tokenName", ue->tokenName); GWEN_DB_SetIntValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "tokenContextId", ue->tokenContextId); GWEN_DB_SetIntValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "rdhType", ue->rdhType); /* store list of supported/allowed tan methods */ GWEN_DB_DeleteVar(db, "tanMethodList"); for (i=0; itanMethodCount; i++) { if (ue->tanMethodList[i]==-1) break; GWEN_DB_SetIntValue(db, GWEN_DB_FLAGS_DEFAULT, "tanMethodList", ue->tanMethodList[i]); } GWEN_DB_SetIntValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "selectedTanMethod", ue->selectedTanMethod); /* store some settings */ GWEN_DB_SetIntValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "maxTransfersPerJob", ue->maxTransfersPerJob); GWEN_DB_SetIntValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "maxDebitNotesPerJob", ue->maxDebitNotesPerJob); if (ue->sepaTransferProfile) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "sepaTransferProfile", ue->sepaTransferProfile); if (ue->sepaDebitNoteProfile) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "sepaDebitNoteProfile", ue->sepaDebitNoteProfile); if (ue->tanMediumId) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "tanMediumId", ue->tanMediumId); } const char *AH_User_GetPeerId(const AB_USER *u) { AH_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AH_USER, u); assert(ue); return ue->peerId; } void AH_User_SetPeerId(AB_USER *u, const char *s) { AH_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AH_USER, u); assert(ue); free(ue->peerId); if (s) ue->peerId=strdup(s); else ue->peerId=NULL; } uint32_t AH_User_GetTokenContextId(const AB_USER *u) { AH_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AH_USER, u); assert(ue); return ue->tokenContextId; } void AH_User_SetTokenContextId(AB_USER *u, uint32_t id) { AH_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AH_USER, u); assert(ue); ue->tokenContextId=id; } AH_CRYPT_MODE AH_User_GetCryptMode(const AB_USER *u) { AH_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AH_USER, u); assert(ue); return ue->cryptMode; } void AH_User_SetCryptMode(AB_USER *u, AH_CRYPT_MODE m) { AH_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AH_USER, u); assert(ue); ue->cryptMode=m; } AH_USER_STATUS AH_User_GetStatus(const AB_USER *u) { AH_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AH_USER, u); assert(ue); return ue->status; } void AH_User_SetStatus(AB_USER *u, AH_USER_STATUS i) { AH_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AH_USER, u); assert(ue); ue->status=i; } AH_HBCI *AH_User_GetHbci(const AB_USER *u) { AH_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AH_USER, u); assert(ue); return ue->hbci; } const GWEN_URL *AH_User_GetServerUrl(const AB_USER *u) { AH_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AH_USER, u); assert(ue); return ue->serverUrl; } void AH_User_SetServerUrl(AB_USER *u, const GWEN_URL *url) { AH_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AH_USER, u); assert(ue); GWEN_Url_free(ue->serverUrl); if (url) ue->serverUrl=GWEN_Url_dup(url); else ue->serverUrl=0; } int AH_User_GetUpdVersion(const AB_USER *u) { AH_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AH_USER, u); assert(ue); return ue->updVersion; } void AH_User_SetUpdVersion(AB_USER *u, int i) { AH_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AH_USER, u); assert(ue); ue->updVersion=i; } GWEN_DB_NODE *AH_User_GetUpd(const AB_USER *u) { AH_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AH_USER, u); assert(ue); return ue->dbUpd; } GWEN_DB_NODE *AH_User_GetUpdForAccountIdAndSuffix(const AB_USER *u, const char *sAccountNumber, const char *sAccountSuffix) { AH_USER *ue; GWEN_DB_NODE *db; GWEN_BUFFER *tbuf; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AH_USER, u); assert(ue); db=AH_User_GetUpd(u); if (db==NULL) { DBG_INFO(AQHBCI_LOGDOMAIN, "No upd"); return NULL; } tbuf=GWEN_Buffer_new(0, 64, 0, 1); GWEN_Buffer_AppendString(tbuf, sAccountNumber); GWEN_Buffer_AppendString(tbuf, "-"); /* take into account the "Unterkontomerkmal", don't rely solely on account id */ if (sAccountSuffix && *sAccountSuffix) GWEN_Buffer_AppendString(tbuf, sAccountSuffix); else GWEN_Buffer_AppendString(tbuf, "none"); DBG_INFO(AQHBCI_LOGDOMAIN, "Checking upd for account \"%s\"", GWEN_Buffer_GetStart(tbuf)); db=GWEN_DB_GetGroup(db, GWEN_PATH_FLAGS_NAMEMUSTEXIST, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); if (db==NULL) { DBG_INFO(AQHBCI_LOGDOMAIN, "Falling back to old storage of UPD for account \"%s\"", sAccountNumber); db=AH_User_GetUpd(u); db=GWEN_DB_GetGroup(db, GWEN_PATH_FLAGS_NAMEMUSTEXIST, sAccountNumber); } return db; } GWEN_DB_NODE *AH_User_GetUpdForAccount(const AB_USER *u, const AB_ACCOUNT *acc) { GWEN_DB_NODE *db=NULL; db=AH_User_GetUpdForAccountUniqueId(u, AB_Account_GetUniqueId(acc)); if (db==NULL) { DBG_INFO(AQHBCI_LOGDOMAIN, "Falling back to previous storage of UPD for account \"%u\"", AB_Account_GetUniqueId(acc)); db=AH_User_GetUpdForAccountIdAndSuffix(u, AB_Account_GetAccountNumber(acc), AB_Account_GetSubAccountId(acc)); } return db; } GWEN_DB_NODE *AH_User_GetUpdForAccountUniqueId(const AB_USER *u, uint32_t uid) { AH_USER *ue; GWEN_DB_NODE *db; char numbuf[32]; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AH_USER, u); assert(ue); db=AH_User_GetUpd(u); if (db==NULL) { DBG_INFO(AQHBCI_LOGDOMAIN, "No upd"); return NULL; } snprintf(numbuf, sizeof(numbuf)-1, "uaid-%08" PRIx32, uid); numbuf[sizeof(numbuf)-1]=0; DBG_INFO(AQHBCI_LOGDOMAIN, "Checking upd for \"%s\"", numbuf); db=GWEN_DB_GetGroup(db, GWEN_PATH_FLAGS_NAMEMUSTEXIST, numbuf); return db; } GWEN_CRYPT_KEY *AH_User_GetBankPubCryptKey(const AB_USER *u) { AH_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AH_USER, u); assert(ue); return ue->bankPubCryptKey; } void AH_User_SetBankPubCryptKey(AB_USER *u, GWEN_CRYPT_KEY *bankPubCryptKey) { AH_USER *ue; assert(bankPubCryptKey); assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AH_USER, u); assert(ue); if (ue->bankPubCryptKey!=bankPubCryptKey) { //GWEN_Crypt_KeyRsa_free(ue->bankPubKey); if (ue->bankPubCryptKey) GWEN_Crypt_Key_free(ue->bankPubCryptKey); ue->bankPubCryptKey=GWEN_Crypt_KeyRsa_dup(bankPubCryptKey); } } GWEN_CRYPT_KEY *AH_User_GetBankPubSignKey(const AB_USER *u) { AH_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AH_USER, u); assert(ue); return ue->bankPubSignKey; } void AH_User_SetBankPubSignKey(AB_USER *u, GWEN_CRYPT_KEY *bankPubSignKey) { AH_USER *ue; assert(bankPubSignKey); assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AH_USER, u); assert(ue); if (ue->bankPubSignKey!=bankPubSignKey) { //GWEN_Crypt_KeyRsa_free(ue->bankPubKey); if (ue->bankPubSignKey) GWEN_Crypt_Key_free(ue->bankPubSignKey); ue->bankPubSignKey=GWEN_Crypt_KeyRsa_dup(bankPubSignKey); } } AH_BPD *AH_User_GetBpd(const AB_USER *u) { AH_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AH_USER, u); assert(ue); return ue->bpd; } void AH_User_SetBpd(AB_USER *u, AH_BPD *bpd) { AH_USER *ue; assert(bpd); assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AH_USER, u); assert(ue); if (ue->bpd!=bpd) { AH_Bpd_free(ue->bpd); ue->bpd=AH_Bpd_dup(bpd); } } int AH_User_GetBpdVersion(const AB_USER *u) { AH_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AH_USER, u); assert(ue); assert(ue->bpd); return AH_Bpd_GetBpdVersion(ue->bpd); } void AH_User_SetBpdVersion(AB_USER *u, int i) { AH_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AH_USER, u); assert(ue); assert(ue->bpd); AH_Bpd_SetBpdVersion(ue->bpd, i); } GWEN_DB_NODE *AH_User_GetBpdJobForParamNameAndVersion(const AB_USER *u, const char *paramName, int version) { AH_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AH_USER, u); assert(ue); if (ue->bpd) { GWEN_DB_NODE *dbJob; dbJob=AH_Bpd_GetBpdJobs(ue->bpd, ue->hbciVersion); if (dbJob) { dbJob=GWEN_DB_GetGroup(dbJob, GWEN_PATH_FLAGS_NAMEMUSTEXIST, paramName); if (dbJob) { char numbuf[64]; if (snprintf(numbuf, sizeof(numbuf), "%d", version)>=sizeof(numbuf)) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Error writing version number to buffer!"); return NULL; } dbJob=GWEN_DB_GetGroup(dbJob, GWEN_PATH_FLAGS_NAMEMUSTEXIST, numbuf); if (dbJob) return dbJob; } } } return NULL; } const char *AH_User_GetSystemId(const AB_USER *u) { AH_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AH_USER, u); assert(ue); return ue->systemId; } void AH_User_SetSystemId(AB_USER *u, const char *s) { AH_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AH_USER, u); assert(ue); free(ue->systemId); if (s) ue->systemId=strdup(s); else ue->systemId=NULL; } GWEN_MSGENGINE *AH_User_GetMsgEngine(const AB_USER *u) { AH_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AH_USER, u); assert(ue); return ue->msgEngine; } uint32_t AH_User_GetFlags(const AB_USER *u) { AH_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AH_USER, u); assert(ue); return ue->flags; } void AH_User_SetFlags(AB_USER *u, uint32_t flags) { AH_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AH_USER, u); assert(ue); ue->flags=flags; } void AH_User_AddFlags(AB_USER *u, uint32_t flags) { AH_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AH_USER, u); assert(ue); ue->flags|=flags; } void AH_User_SubFlags(AB_USER *u, uint32_t flags) { AH_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AH_USER, u); assert(ue); ue->flags&=~flags; } int AH_User_GetHbciVersion(const AB_USER *u) { AH_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AH_USER, u); assert(ue); return ue->hbciVersion; } void AH_User_SetHbciVersion(AB_USER *u, int i) { AH_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AH_USER, u); assert(ue); ue->hbciVersion=i; } const char *AH_User_GetHttpUserAgent(const AB_USER *u) { AH_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AH_USER, u); assert(ue); return ue->httpUserAgent; } void AH_User_SetHttpUserAgent(AB_USER *u, const char *s) { AH_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AH_USER, u); assert(ue); free(ue->httpUserAgent); if (s) ue->httpUserAgent=strdup(s); else ue->httpUserAgent=NULL; } int AH_User_GetHttpVMajor(const AB_USER *u) { AH_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AH_USER, u); assert(ue); return ue->httpVMajor; } void AH_User_SetHttpVMajor(AB_USER *u, int i) { AH_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AH_USER, u); assert(ue); ue->httpVMajor=i; } int AH_User_GetHttpVMinor(const AB_USER *u) { AH_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AH_USER, u); assert(ue); return ue->httpVMinor; } void AH_User_SetHttpVMinor(AB_USER *u, int i) { AH_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AH_USER, u); assert(ue); ue->httpVMinor=i; } uint32_t AH_User_GetTanMethods(const AB_USER *u) { AH_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AH_USER, u); assert(ue); return ue->tanMethods; } void AH_User_SetTanMethods(AB_USER *u, uint32_t m) { AH_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AH_USER, u); assert(ue); ue->tanMethods=m; } void AH_User_AddTanMethods(AB_USER *u, uint32_t m) { AH_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AH_USER, u); assert(ue); ue->tanMethods|=m; } void AH_User_SubTanMethods(AB_USER *u, uint32_t m) { AH_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AH_USER, u); assert(ue); ue->tanMethods&=~m; } int AH_User_GetSelectedTanInputMechanism(const AB_USER *u) { AH_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AH_USER, u); assert(ue); return ue->selectedTanInputMechanism; } void AH_User_SetSelectedTanInputMechanism(AB_USER *u, int i) { AH_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AH_USER, u); assert(ue); ue->selectedTanInputMechanism=i; } int AH_User_GetRdhType(const AB_USER *u) { AH_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AH_USER, u); assert(ue); return ue->rdhType; } void AH_User_SetRdhType(AB_USER *u, int i) { AH_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AH_USER, u); assert(ue); ue->rdhType=i; } const char *AH_User_GetTokenType(const AB_USER *u) { AH_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AH_USER, u); assert(ue); return ue->tokenType; } void AH_User_SetTokenType(AB_USER *u, const char *s) { AH_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AH_USER, u); assert(ue); free(ue->tokenType); if (s) ue->tokenType=strdup(s); else ue->tokenType=NULL; } const char *AH_User_GetTokenName(const AB_USER *u) { AH_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AH_USER, u); assert(ue); return ue->tokenName; } void AH_User_SetTokenName(AB_USER *u, const char *s) { AH_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AH_USER, u); assert(ue); free(ue->tokenName); if (s) ue->tokenName=strdup(s); else ue->tokenName=NULL; } int AH_User_MkPasswdName(const AB_USER *u, GWEN_BUFFER *buf) { AH_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AH_USER, u); assert(ue); if (ue->tokenType==NULL) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Missing tokenType or tokenName"); return GWEN_ERROR_NO_DATA; } if (strcasecmp(ue->tokenType, "pintan")==0) { const char *s; GWEN_Buffer_AppendString(buf, "PIN_"); s=AB_User_GetBankCode(u); if (s) GWEN_Buffer_AppendString(buf, s); GWEN_Buffer_AppendString(buf, "_"); GWEN_Buffer_AppendString(buf, AB_User_GetUserId(u)); return 0; } else { if (ue->tokenName) { GWEN_Buffer_AppendString(buf, "PASSWORD_"); GWEN_Buffer_AppendString(buf, ue->tokenType); GWEN_Buffer_AppendString(buf, "_"); GWEN_Buffer_AppendString(buf, ue->tokenName); return 0; } else { DBG_ERROR(AQHBCI_LOGDOMAIN, "Missing tokenName"); return GWEN_ERROR_NO_DATA; } } } int AH_User_MkPinName(const AB_USER *u, GWEN_BUFFER *buf) { return AH_User_MkPasswdName(u, buf); } int AH_User_MkTanName(const AB_USER *u, const char *challenge, GWEN_BUFFER *buf) { AH_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AH_USER, u); assert(ue); if (ue->tokenType && ue->tokenName) { GWEN_Buffer_AppendString(buf, "TAN_"); GWEN_Buffer_AppendString(buf, ue->tokenType); GWEN_Buffer_AppendString(buf, "_"); GWEN_Buffer_AppendString(buf, ue->tokenName); if (challenge) { GWEN_Buffer_AppendString(buf, "_"); GWEN_Buffer_AppendString(buf, challenge); } return 0; } else { const char *s; DBG_DEBUG(AQHBCI_LOGDOMAIN, "No tokenType or tokenName"); GWEN_Buffer_AppendString(buf, "TAN_"); s=AB_User_GetBankCode(u); if (s) GWEN_Buffer_AppendString(buf, s); GWEN_Buffer_AppendString(buf, "_"); GWEN_Buffer_AppendString(buf, AB_User_GetUserId(u)); if (challenge) { GWEN_Buffer_AppendString(buf, "_"); GWEN_Buffer_AppendString(buf, challenge); } return 0; } } int AH_User_InputPin(AB_USER *u, char *pwbuffer, int minLen, int maxLen, int flags) { AB_PROVIDER *pro; AB_BANKING *ab; GWEN_BUFFER *nbuf; int rv; const char *numeric_warning = ""; char buffer[512]; const char *un; const char *bn=NULL; AB_BANKINFO *bi; assert(u); un=AB_User_GetUserId(u); pro=AB_User_GetProvider(u); assert(pro); ab=AB_Provider_GetBanking(pro); assert(ab); /* find bank name */ bi=AB_Banking_GetBankInfo(ab, "de", "*", AB_User_GetBankCode(u)); if (bi) bn=AB_BankInfo_GetBankName(bi); if (!bn) bn=AB_User_GetBankCode(u); buffer[0]=0; buffer[sizeof(buffer)-1]=0; if (flags & GWEN_GUI_INPUT_FLAGS_NUMERIC) { numeric_warning = I18N(" You must only enter numbers, not letters."); } if (flags & GWEN_GUI_INPUT_FLAGS_CONFIRM) { snprintf(buffer, sizeof(buffer)-1, I18N("Please enter a new PIN for \n" "user %s at %s\n" "The input must be at least %d characters long.%s" "" "

" "Please enter a new PIN for user %s at " "%s." "

" "

" "The input must be at least %d characters long.%s" "

" ""), un, bn, minLen, numeric_warning, un, bn, minLen, numeric_warning); } else { snprintf(buffer, sizeof(buffer)-1, I18N("Please enter the PIN for \n" "user %s at %s\n" "%s" "" "Please enter the PIN for user %s at " "%s.
" "%s" ""), un, bn, numeric_warning, un, bn, numeric_warning); } buffer[sizeof(buffer)-1]=0; AB_BankInfo_free(bi); nbuf=GWEN_Buffer_new(0, 256, 0, 1); AH_User_MkPinName(u, nbuf); rv=GWEN_Gui_GetPassword(flags, GWEN_Buffer_GetStart(nbuf), I18N("Enter PIN"), buffer, pwbuffer, minLen, maxLen, GWEN_Gui_PasswordMethod_Text, NULL, 0); GWEN_Buffer_free(nbuf); return rv; } int AH_User_InputTan(AB_USER *u, char *pwbuffer, int minLen, int maxLen) { AB_PROVIDER *pro; AB_BANKING *ab; int rv; char buffer[512]; const char *un; const char *bn=NULL; GWEN_BUFFER *nbuf; AB_BANKINFO *bi; assert(u); un=AB_User_GetUserId(u); pro=AB_User_GetProvider(u); assert(pro); ab=AB_Provider_GetBanking(pro); assert(ab); /* find bank name */ bi=AB_Banking_GetBankInfo(ab, "de", "*", AB_User_GetBankCode(u)); if (bi) bn=AB_BankInfo_GetBankName(bi); if (!bn) AB_User_GetBankCode(u); buffer[0]=0; buffer[sizeof(buffer)-1]=0; snprintf(buffer, sizeof(buffer)-1, I18N("Please enter the next TAN\n" "for user %s at %s." "" "Please enter the next TAN for user %s at " "%s." ""), un, bn, un, bn); buffer[sizeof(buffer)-1]=0; nbuf=GWEN_Buffer_new(0, 256, 0, 1); AH_User_MkTanName(u, NULL, nbuf); rv=GWEN_Gui_GetPassword(GWEN_GUI_INPUT_FLAGS_TAN | /*GWEN_GUI_INPUT_FLAGS_NUMERIC |*/ GWEN_GUI_INPUT_FLAGS_SHOW, GWEN_Buffer_GetStart(nbuf), I18N("Enter TAN"), buffer, pwbuffer, minLen, maxLen, GWEN_Gui_PasswordMethod_Text, NULL, 0); GWEN_Buffer_free(nbuf); AB_BankInfo_free(bi); return rv; } int AH_User_SetTanStatus(AB_USER *u, const char *challenge, const char *tan, GWEN_GUI_PASSWORD_STATUS status) { GWEN_BUFFER *nbuf; int rv; nbuf=GWEN_Buffer_new(0, 256, 0, 1); AH_User_MkTanName(u, challenge, nbuf); rv=GWEN_Gui_SetPasswordStatus(GWEN_Buffer_GetStart(nbuf), tan, status, 0); GWEN_Buffer_free(nbuf); return rv; } int AH_User_SetPinStatus(AB_USER *u, const char *pin, GWEN_GUI_PASSWORD_STATUS status) { GWEN_BUFFER *nbuf; int rv; nbuf=GWEN_Buffer_new(0, 256, 0, 1); AH_User_MkPinName(u, nbuf); rv=GWEN_Gui_SetPasswordStatus(GWEN_Buffer_GetStart(nbuf), pin, status, 0); GWEN_Buffer_free(nbuf); return rv; } const char *AH_User_GetHttpContentType(const AB_USER *u) { AH_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AH_USER, u); assert(ue); return ue->httpContentType; } void AH_User_SetHttpContentType(AB_USER *u, const char *s) { AH_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AH_USER, u); assert(ue); free(ue->httpContentType); if (s) ue->httpContentType=strdup(s); else ue->httpContentType=NULL; } const int *AH_User_GetTanMethodList(const AB_USER *u) { AH_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AH_USER, u); assert(ue); return ue->tanMethodList; } int AH_User_HasTanMethod(const AB_USER *u, int method) { AH_USER *ue; int i; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AH_USER, u); assert(ue); for (i=0; itanMethodList[i]==method) return 1; } DBG_INFO(AQHBCI_LOGDOMAIN, "TAN method %d not available", method); return 0; } int AH_User_HasTanMethodOtherThan(const AB_USER *u, int method) { AH_USER *ue; int i; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AH_USER, u); assert(ue); DBG_INFO(AQHBCI_LOGDOMAIN, "Checking for methods other than %d in list of %d TAN methods", method, ue->tanMethodCount); for (i=0; itanMethodCount; i++) { DBG_INFO(AQHBCI_LOGDOMAIN, " - Tan method %d=%d", i, ue->tanMethodList[i]); if (ue->tanMethodList[i]!=method && ue->tanMethodList[i]!=-1) { DBG_INFO(AQHBCI_LOGDOMAIN, " match"); return 1; } else { DBG_INFO(AQHBCI_LOGDOMAIN, " no match"); } } DBG_INFO(AQHBCI_LOGDOMAIN, " No methods other than %d found", method); return 0; } void AH_User_AddTanMethod(AB_USER *u, int method) { AH_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AH_USER, u); assert(ue); DBG_INFO(AQHBCI_LOGDOMAIN, "Adding TAN method %d", method); if (!AH_User_HasTanMethod(u, method)) { if (ue->tanMethodCounttanMethodList[ue->tanMethodCount++]=method; ue->tanMethodList[ue->tanMethodCount]=-1; DBG_INFO(AQHBCI_LOGDOMAIN, " Added TAN method %d", method); } } } void AH_User_ClearTanMethodList(AB_USER *u) { AH_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AH_USER, u); assert(ue); ue->tanMethodList[0]=-1; ue->tanMethodCount=0; } int AH_User_GetTanMethodCount(const AB_USER *u) { AH_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AH_USER, u); assert(ue); return ue->tanMethodCount; } int AH_User_GetSelectedTanMethod(const AB_USER *u) { AH_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AH_USER, u); assert(ue); return ue->selectedTanMethod; } void AH_User_SetSelectedTanMethod(AB_USER *u, int i) { AH_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AH_USER, u); assert(ue); ue->selectedTanMethod=i; } const char *AH_User_GetTanMediumId(const AB_USER *u) { AH_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AH_USER, u); assert(ue); return ue->tanMediumId; } void AH_User_SetTanMediumId(AB_USER *u, const char *s) { AH_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AH_USER, u); assert(ue); free(ue->tanMediumId); if (s) ue->tanMediumId=strdup(s); else ue->tanMediumId=NULL; } void AH_User_LoadTanMethods(AB_USER *u) { AH_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AH_USER, u); assert(ue); /* read directly from BPD */ if (ue->cryptMode==AH_CryptMode_Pintan) { GWEN_DB_NODE *db; int rv; AH_TanMethod_List_Clear(ue->tanMethodDescriptions); db=GWEN_DB_Group_new("bpd"); rv=AH_Job_SampleBpdVersions("JobTan", u, db); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "No BPD for TAN job"); } else { GWEN_DB_NODE *dbV; dbV=GWEN_DB_GetFirstGroup(db); while (dbV) { int version; version=atoi(GWEN_DB_GroupName(dbV)); if (version>0) { GWEN_DB_NODE *dbT; dbT=GWEN_DB_FindFirstGroup(dbV, "tanMethod"); if (!dbT) { DBG_INFO(AQHBCI_LOGDOMAIN, "No tan method found"); } while (dbT) { AH_TAN_METHOD *tm; const char *s; tm=AH_TanMethod_new(); AH_TanMethod_SetFunction(tm, GWEN_DB_GetIntValue(dbT, "function", 0, 0)); AH_TanMethod_SetProcess(tm, GWEN_DB_GetIntValue(dbT, "process", 0, 0)); AH_TanMethod_SetMethodId(tm, GWEN_DB_GetCharValue(dbT, "methodId", 0, 0)); AH_TanMethod_SetZkaTanName(tm, GWEN_DB_GetCharValue(dbT, "zkaTanName", 0, 0)); AH_TanMethod_SetZkaTanVersion(tm, GWEN_DB_GetCharValue(dbT, "zkaTanVersion", 0, 0)); AH_TanMethod_SetMethodName(tm, GWEN_DB_GetCharValue(dbT, "methodName", 0, 0)); AH_TanMethod_SetTanMaxLen(tm, GWEN_DB_GetIntValue(dbT, "tanMaxLen", 0, 0)); AH_TanMethod_SetFormatId(tm, GWEN_DB_GetCharValue(dbT, "formatId", 0, 0)); AH_TanMethod_SetPrompt(tm, GWEN_DB_GetCharValue(dbT, "prompt", 0, 0)); AH_TanMethod_SetReturnMaxLen(tm, GWEN_DB_GetIntValue(dbT, "returnMaxLen", 0, 0)); AH_TanMethod_SetMaxActiveLists(tm, GWEN_DB_GetIntValue(dbT, "maxActiveLists", 0, 0)); /*AH_TanMethod_SetGvVersion(tm, GWEN_DB_GetIntValue(dbT, "gvVersion", 0, 0));*/ s=GWEN_DB_GetCharValue(dbT, "multiTanAllowed", 0, NULL); if (s && strcasecmp(s, "j")==0) AH_TanMethod_SetMultiTanAllowed(tm, 1); AH_TanMethod_SetTimeShiftAllowed(tm, GWEN_DB_GetIntValue(dbT, "timeShiftAllowed", 0, 0)); AH_TanMethod_SetTanListMode(tm, GWEN_DB_GetIntValue(dbT, "tanListMode", 0, 0)); s=GWEN_DB_GetCharValue(dbT, "stornoAllowed", 0, NULL); if (s && strcasecmp(s, "j")==0) AH_TanMethod_SetStornoAllowed(tm, 1); s=GWEN_DB_GetCharValue(dbT, "needChallengeClass", 0, NULL); if (s && strcasecmp(s, "j")==0) AH_TanMethod_SetNeedChallengeClass(tm, 1); s=GWEN_DB_GetCharValue(dbT, "needChallengeAmount", 0, NULL); if (s && strcasecmp(s, "j")==0) AH_TanMethod_SetNeedChallengeAmount(tm, 1); AH_TanMethod_SetInitMode(tm, GWEN_DB_GetIntValue(dbT, "initMode", 0, 0)); s=GWEN_DB_GetCharValue(dbT, "tanMediumIdNeeded", 0, NULL); if (s && strcasecmp(s, "j")==0) AH_TanMethod_SetNeedTanMediumId(tm, 1); AH_TanMethod_SetMaxActiveTanMedia(tm, GWEN_DB_GetIntValue(dbT, "maxActiveTanMedia", 0, 0)); DBG_INFO(AQHBCI_LOGDOMAIN, "Adding TAN method %d [%s] for GV version %d", AH_TanMethod_GetFunction(tm), AH_TanMethod_GetMethodId(tm), version); AH_TanMethod_SetGvVersion(tm, version); AH_TanMethod_List_Add(tm, ue->tanMethodDescriptions); dbT=GWEN_DB_FindNextGroup(dbT, "tanMethod"); } } dbV=GWEN_DB_GetNextGroup(dbV); } } GWEN_DB_Group_free(db); } } void AH_User_LoadSepaDescriptors(AB_USER *u) { AH_USER *ue; GWEN_DB_NODE *db; int rv; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AH_USER, u); assert(ue); DBG_INFO(AQHBCI_LOGDOMAIN, "Loading SEPA descriptors"); /* read directly from BPD */ GWEN_StringList_Clear(ue->sepaDescriptors); db=GWEN_DB_Group_new("bpd"); rv=AH_Job_SampleBpdVersions("JobGetAccountSepaInfo", u, db); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "No BPD for TAN job"); } else { GWEN_DB_NODE *dbV; dbV=GWEN_DB_GetFirstGroup(db); while (dbV) { int version; version=atoi(GWEN_DB_GroupName(dbV)); if (version>0) { GWEN_DB_NODE *dbT; /* always overwrite with latest version received */ GWEN_StringList_Clear(ue->sepaDescriptors); dbT=GWEN_DB_FindFirstGroup(dbV, "SupportedSepaFormats"); if (!dbT) { DBG_INFO(AQHBCI_LOGDOMAIN, "No SEPA descriptor found"); } while (dbT) { int i; for (i=0; i<100; i++) { const char *s; s=GWEN_DB_GetCharValue(dbT, "format", i, NULL); if (!(s && *s)) break; GWEN_StringList_AppendString(ue->sepaDescriptors, s, 0, 1); DBG_INFO(AQHBCI_LOGDOMAIN, "Adding SEPA descriptor [%s] for GV version %d", s, version); } dbT=GWEN_DB_FindNextGroup(dbT, "SupportedSepaFormats"); } } dbV=GWEN_DB_GetNextGroup(dbV); } } GWEN_DB_Group_free(db); } const AH_TAN_METHOD_LIST *AH_User_GetTanMethodDescriptions(AB_USER *u) { AH_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AH_USER, u); assert(ue); /* always reload TAN methods from BPD */ AH_User_LoadTanMethods(u); return ue->tanMethodDescriptions; } int AH_User_GetMaxTransfersPerJob(const AB_USER *u) { AH_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AH_USER, u); assert(ue); return ue->maxTransfersPerJob; } void AH_User_SetMaxTransfersPerJob(AB_USER *u, int i) { AH_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AH_USER, u); assert(ue); ue->maxTransfersPerJob=i; } int AH_User_GetMaxDebitNotesPerJob(const AB_USER *u) { AH_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AH_USER, u); assert(ue); return ue->maxDebitNotesPerJob; } void AH_User_SetMaxDebitNotesPerJob(AB_USER *u, int i) { AH_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AH_USER, u); assert(ue); ue->maxDebitNotesPerJob=i; } const GWEN_STRINGLIST *AH_User_GetSepaDescriptors(AB_USER *u) { AH_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AH_USER, u); assert(ue); return ue->sepaDescriptors; } const char *AH_User_GetSepaTransferProfile(const AB_USER *u) { const AH_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AH_USER, u); assert(ue); return ue->sepaTransferProfile; } void AH_User_SetSepaTransferProfile(AB_USER *u, const char *profileName) { AH_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AH_USER, u); assert(ue); free(ue->sepaTransferProfile); if (profileName) ue->sepaTransferProfile=strdup(profileName); else ue->sepaTransferProfile=NULL; } const char *AH_User_GetSepaDebitNoteProfile(const AB_USER *u) { const AH_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AH_USER, u); assert(ue); return ue->sepaDebitNoteProfile; } void AH_User_SetSepaDebitNoteProfile(AB_USER *u, const char *profileName) { AH_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AH_USER, u); assert(ue); free(ue->sepaDebitNoteProfile); if (profileName) ue->sepaDebitNoteProfile=strdup(profileName); else ue->sepaDebitNoteProfile=NULL; } int AH_User_VerifyInitialKey(GWEN_CRYPT_TOKEN *ct, const GWEN_CRYPT_TOKEN_CONTEXT *ctx, AB_USER *user, GWEN_CRYPT_KEY *key, uint16_t sentModl, const char *keyName) { uint32_t keyHashAlgo; uint32_t keySize; uint32_t keyNum; uint32_t keyVer; uint32_t expLen; uint8_t *modulus; uint8_t *exponent; GWEN_MDIGEST *md; uint8_t *mdPtr; unsigned int mdSize; uint8_t modBuffer[1024]; uint8_t expBuffer[256]; uint32_t keyHashNum; uint32_t keyHashVer; uint8_t canVerifyWithHash=0; uint16_t keySizeForHash=0; const uint8_t *keyHash; uint32_t keyHashLen; char hashString[1024]; int rv; int i; /* check if NOTEPAD contained a key hash */ keyHashAlgo=GWEN_Crypt_Token_Context_GetKeyHashAlgo(ctx); modulus=&modBuffer[0]; exponent=&expBuffer[0]; keySize=1024; expLen=256; GWEN_Crypt_KeyRsa_GetModulus(key, modulus, &keySize); GWEN_Crypt_KeyRsa_GetExponent(key, exponent, &expLen); keyNum=GWEN_Crypt_Key_GetKeyNumber(key); keyVer=GWEN_Crypt_Key_GetKeyVersion(key); /* check if we got the keyHashAlgo from a card, otherwise determine it ourselves */ if (keyHashAlgo == GWEN_Crypt_HashAlgoId_None || keyHashAlgo == GWEN_Crypt_HashAlgoId_Unknown) { uint8_t rxhVersion = AH_User_GetRdhType(user); if (rxhVersion < 6) { keyHashAlgo=GWEN_Crypt_HashAlgoId_Rmd160; } else { keyHashAlgo=GWEN_Crypt_HashAlgoId_Sha256; } } if (AH_User_GetCryptMode(user) == AH_CryptMode_Rdh && AH_User_GetRdhType(user) == 1) { keySizeForHash=128; } else { keySizeForHash=keySize; } keyHash=GWEN_Crypt_Token_Context_GetKeyHashPtr(ctx); keyHashLen=GWEN_Crypt_Token_Context_GetKeyHashLen(ctx); /* check if we got a hash from a banking card */ if (keyHash != NULL && keyHashLen > 0) { keyHashNum=GWEN_Crypt_Token_Context_GetKeyHashNum(ctx); keyHashVer=GWEN_Crypt_Token_Context_GetKeyHashVer(ctx); DBG_INFO(AQHBCI_LOGDOMAIN, "Found bank key hash on the zka card! (Hash Algo Identifier: [%d], keyNum: [%d], keyVer: [%d]", keyHashAlgo, keyHashNum, keyHashVer); if (keyHashNum == keyNum && keyHashVer==keyVer) { DBG_INFO(AQHBCI_LOGDOMAIN, "Key Number and Key Version of the Hash match transmitted key, try verifying with the Hash."); canVerifyWithHash=1; } } /* build key hash */ { int expPadBytes=keySizeForHash-expLen; int modPadBytes=keySizeForHash-keySize; /* pad exponent to length of modulus */ GWEN_BUFFER *keyBuffer; keyBuffer=GWEN_Buffer_new(NULL, 2*keySize, 0, 0); GWEN_Buffer_FillWithBytes(keyBuffer, 0x0, expPadBytes); GWEN_Buffer_AppendBytes(keyBuffer, (const char *)exponent, expLen); if (modPadBytes) { GWEN_Buffer_FillWithBytes(keyBuffer, 0x0, modPadBytes); } GWEN_Buffer_AppendBytes(keyBuffer, (const char *)modulus, keySize); if (keyHashAlgo==GWEN_Crypt_HashAlgoId_Sha256) { /*SHA256*/ md=GWEN_MDigest_Sha256_new(); DBG_INFO(AQHBCI_LOGDOMAIN, "Hash Algo for key verification is SHA256."); } else if (keyHashAlgo==GWEN_Crypt_HashAlgoId_Rmd160) { md=GWEN_MDigest_Rmd160_new(); DBG_INFO(AQHBCI_LOGDOMAIN, "Hash Algo for key verification is RIPMED160."); } else { /* ERROR, wrong hash algo */ DBG_ERROR(AQHBCI_LOGDOMAIN, "Hash Algorithm of Bank Public %s Key not correct! (Hash Identifier %d)", keyName, keyHashAlgo); return 0; } GWEN_MDigest_Begin(md); GWEN_MDigest_Update(md, (uint8_t *)GWEN_Buffer_GetStart(keyBuffer), 2*keySize); GWEN_MDigest_End(md); mdPtr=GWEN_MDigest_GetDigestPtr(md); mdSize=GWEN_MDigest_GetDigestSize(md); GWEN_Buffer_free(keyBuffer); } memset(hashString, 0, 1024); for (i=0; i AH_HBCI *AH_Account_GetHbci(const AB_ACCOUNT *a); GWEN_DB_NODE *AH_Account_GetDbTempUpd(const AB_ACCOUNT *a); void AH_Account_SetDbTempUpd(AB_ACCOUNT *a, GWEN_DB_NODE *db); #endif /* AH_ACCOUNT_L_H */ aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/banking/provider_p.h0000664000175000017500000000230314044534776022553 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_PROVIDER_P_H #define AH_PROVIDER_P_H #define AH_PROVIDER_DATADIR ".libaqhbci" #include "provider_l.h" #include "aqhbci/joblayer/job_l.h" #include "aqhbci/applayer/outbox_l.h" #include typedef struct AH_PROVIDER AH_PROVIDER; struct AH_PROVIDER { AH_HBCI *hbci; GWEN_DB_NODE *dbTempConfig; }; static void GWENHYWFAR_CB AH_Provider_FreeData(void *bp, void *p); /** @name Overwritten Virtual Functions * */ /*@{*/ static int AH_Provider_Init(AB_PROVIDER *pro, GWEN_DB_NODE *dbData); static int AH_Provider_Fini(AB_PROVIDER *pro, GWEN_DB_NODE *dbData); static AB_ACCOUNT *AH_Provider_CreateAccountObject(AB_PROVIDER *pro); static AB_USER *AH_Provider_CreateUserObject(AB_PROVIDER *pro); /*@}*/ #endif /* AH_PROVIDER_P_H */ aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/banking/provider_job.h0000664000175000017500000000211214043610745023052 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2020 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_PROVIDER_JOB_H #define AH_PROVIDER_JOB_H #include #include #include #include "aqhbci/joblayer/job_l.h" #include "aqhbci/applayer/outbox_l.h" int AH_Provider_CreateHbciJob(AB_PROVIDER *pro, AB_USER *mu, AB_ACCOUNT *ma, int cmd, AH_JOB **pHbciJob); int AH_Provider_GetMultiHbciJob(AB_PROVIDER *pro, AH_OUTBOX *outbox, AB_USER *mu, AB_ACCOUNT *ma, int cmd, AH_JOB **pHbciJob); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/banking/provider_accspec.c0000664000175000017500000002243614546575647023732 00000000000000/*************************************************************************** begin : Tue Jun 03 2018 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "provider_accspec.h" #include #include "aqhbci/banking/provider_l.h" #include "aqhbci/banking/provider_job.h" #include "aqhbci/joblayer/job_l.h" #include "aqhbci/tan/tanmethod.h" #include "aqhbci/msglayer/hbci_l.h" /* ------------------------------------------------------------------------------------------------ * forward declarations * ------------------------------------------------------------------------------------------------ */ static int _createTransactionLimitsForAccount(AB_PROVIDER *pro, AB_USER *u, AB_ACCOUNT *acc, AB_TRANSACTION_LIMITS_LIST *tll); static AB_ACCOUNT_SPEC *_createAccountSpecWithUserAndAccount(AB_PROVIDER *pro, AB_USER *u, AB_ACCOUNT *a); AB_REFERENCE_ACCOUNT *_copyRefAccountCb(AB_REFERENCE_ACCOUNT *ra, void *user_data); static int _updateAccountSpecWithUserAndAccount(AB_PROVIDER *pro, AB_USER *u, AB_ACCOUNT *a, AB_ACCOUNT_SPEC *as); static void _copyAccountToAccountSpec(const AB_ACCOUNT *acc, AB_ACCOUNT_SPEC *as); static int _updateAccountSpecWithRefAccounts(AB_PROVIDER *pro, AB_ACCOUNT *a, AB_ACCOUNT_SPEC *as); /* ------------------------------------------------------------------------------------------------ * implementations * ------------------------------------------------------------------------------------------------ */ int AH_Provider_UpdateAccountSpec(AB_PROVIDER *pro, AB_ACCOUNT_SPEC *as, int doLock) { int rv; uint32_t aid=0; AB_ACCOUNT *a=NULL; uint32_t uid=0; AB_USER *u=NULL; AB_TRANSACTION_LIMITS_LIST *tll; DBG_INFO(AQHBCI_LOGDOMAIN, "Updating account spec for account %u", (unsigned int) AB_AccountSpec_GetUniqueId(as)); /* get unique account id */ aid=AB_AccountSpec_GetUniqueId(as); if (aid==0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Account has no unique id assigned, SNH!"); return GWEN_ERROR_INTERNAL; } /* get corresponding account */ rv=AB_Provider_GetAccount(pro, aid, doLock, doLock, &a); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); AB_Account_free(a); return rv; } assert(a); /* get user id */ uid=AB_Account_GetUserId(a); if (uid==0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Account has no user id assigned, SNH!"); return GWEN_ERROR_INTERNAL; } /* get user */ rv=AB_Provider_GetUser(pro, uid, doLock, doLock, &u); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); AB_Account_free(a); return rv; } /* copy reference accounts */ _updateAccountSpecWithRefAccounts(pro, a, as); /* create and set transaction limits per command */ tll=AB_TransactionLimits_List_new(); rv=_createTransactionLimitsForAccount(pro, u, a, tll); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); AB_TransactionLimits_List_free(tll); AB_User_free(u); AB_Account_free(a); return rv; } AB_AccountSpec_SetTransactionLimitsList(as, tll); AB_User_free(u); AB_Account_free(a); return 0; } int AH_Provider_CreateAndWriteAccountSpecWithUserAndAccount(AB_PROVIDER *pro, AB_USER *u, AB_ACCOUNT *a) { AB_ACCOUNT_SPEC *as; int rv; DBG_INFO(AQHBCI_LOGDOMAIN, "Creating account spec for user %u / account %u", (unsigned int) AB_User_GetUniqueId(u), (unsigned int) AB_Account_GetUniqueId(a)); /* create account spec from given account using given user */ as=_createAccountSpecWithUserAndAccount(pro, u, a); if (as==NULL) { DBG_INFO(AQHBCI_LOGDOMAIN, "here"); return GWEN_ERROR_GENERIC; } /* write account spec to disk */ rv=AB_Banking_WriteAccountSpec(AB_Provider_GetBanking(pro), as); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); AB_AccountSpec_free(as); return rv; } AB_AccountSpec_free(as); return 0; } AB_ACCOUNT_SPEC *_createAccountSpecWithUserAndAccount(AB_PROVIDER *pro, AB_USER *u, AB_ACCOUNT *a) { AB_ACCOUNT_SPEC *as; int rv; as=AB_AccountSpec_new(); _copyAccountToAccountSpec(a, as); rv=_updateAccountSpecWithUserAndAccount(pro, u, a, as); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); AB_AccountSpec_free(as); return NULL; } return as; } AB_REFERENCE_ACCOUNT *_copyRefAccountCb(AB_REFERENCE_ACCOUNT *ra, void *user_data) { AB_ACCOUNT_SPEC *as = (AB_ACCOUNT_SPEC *) user_data; AB_REFERENCE_ACCOUNT *ra_new = AB_ReferenceAccount_dup(ra); AB_AccountSpec_AddReferenceAccount(as, ra_new); return NULL; } int _updateAccountSpecWithRefAccounts(AB_PROVIDER *pro, AB_ACCOUNT *a, AB_ACCOUNT_SPEC *as) { int rv; AB_ACCOUNT_SPEC *as_old = NULL; AB_REFERENCE_ACCOUNT_LIST *ral = NULL; /* copy reference accounts */ rv = AB_Banking_GetAccountSpecByUniqueId(AB_Provider_GetBanking(pro), AB_Account_GetUniqueId(a), &as_old); if (rv >= 0) { /* we have an account spec alread, copy the reference account list to the new one */ ral = AB_AccountSpec_GetRefAccountList(as_old); AB_ReferenceAccount_List_ForEach(ral, _copyRefAccountCb, (void *) as); AB_AccountSpec_free(as_old); } return 0; } int _updateAccountSpecWithUserAndAccount(AB_PROVIDER *pro, AB_USER *u, AB_ACCOUNT *a, AB_ACCOUNT_SPEC *as) { int rv; AB_TRANSACTION_LIMITS_LIST *tll; DBG_INFO(AQHBCI_LOGDOMAIN, "Updating account spec for account %u", (unsigned int) AB_Account_GetUniqueId(a)); /* copy reference accounts */ _updateAccountSpecWithRefAccounts(pro, a, as); /* create and set transaction limits per command */ tll=AB_TransactionLimits_List_new(); rv=_createTransactionLimitsForAccount(pro, u, a, tll); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); AB_TransactionLimits_List_free(tll); return rv; } AB_AccountSpec_SetTransactionLimitsList(as, tll); return 0; } void _copyAccountToAccountSpec(const AB_ACCOUNT *acc, AB_ACCOUNT_SPEC *as) { assert(acc); assert(as); AB_AccountSpec_SetType(as, AB_Account_GetAccountType(acc)); AB_AccountSpec_SetUniqueId(as, AB_Account_GetUniqueId(acc)); AB_AccountSpec_SetBackendName(as, AB_Account_GetBackendName(acc)); AB_AccountSpec_SetOwnerName(as, AB_Account_GetOwnerName(acc)); AB_AccountSpec_SetAccountName(as, AB_Account_GetAccountName(acc)); AB_AccountSpec_SetCurrency(as, AB_Account_GetCurrency(acc)); AB_AccountSpec_SetIban(as, AB_Account_GetIban(acc)); AB_AccountSpec_SetBic(as, AB_Account_GetBic(acc)); AB_AccountSpec_SetCountry(as, AB_Account_GetCountry(acc)); AB_AccountSpec_SetBankCode(as, AB_Account_GetBankCode(acc)); AB_AccountSpec_SetBankName(as, AB_Account_GetBankName(acc)); AB_AccountSpec_SetAccountNumber(as, AB_Account_GetAccountNumber(acc)); AB_AccountSpec_SetSubAccountNumber(as, AB_Account_GetSubAccountId(acc)); } int _createTransactionLimitsForAccount(AB_PROVIDER *pro, AB_USER *u, AB_ACCOUNT *acc, AB_TRANSACTION_LIMITS_LIST *tll) { int rv; int i; int jobList[]= { AB_Transaction_CommandGetBalance, AB_Transaction_CommandGetTransactions, /*AB_Transaction_CommandLoadCellPhone, */ AB_Transaction_CommandSepaTransfer, AB_Transaction_CommandSepaInternalTransfer, AB_Transaction_CommandSepaDebitNote, AB_Transaction_CommandSepaFlashDebitNote, AB_Transaction_CommandSepaCreateStandingOrder, AB_Transaction_CommandSepaModifyStandingOrder, AB_Transaction_CommandSepaDeleteStandingOrder, AB_Transaction_CommandSepaGetStandingOrders, AB_Transaction_CommandGetEStatements, AB_Transaction_CommandGetDepot, AB_Transaction_CommandUnknown }; DBG_INFO(AQHBCI_LOGDOMAIN, "Creating transaction limits for account \"%u\"", (unsigned int)AB_Account_GetUniqueId(acc)); DBG_INFO(AQHBCI_LOGDOMAIN, "You may see some messages like \"Job not supported with this account\" below, those are okay, please ignore"); i=0; while (jobList[i]!=AB_Transaction_CommandUnknown) { AH_JOB *j=NULL; AB_TRANSACTION_LIMITS *limits=NULL; DBG_INFO(AQHBCI_LOGDOMAIN, "Creating transaction limits for job \"%s\"", AB_Transaction_Command_toString(jobList[i])); DBG_INFO(AQHBCI_LOGDOMAIN, "- creating job"); rv=AH_Provider_CreateHbciJob(pro, u, acc, jobList[i], &j); if (rv<0) { if (rv==GWEN_ERROR_NOT_AVAILABLE) { DBG_NOTICE(AQHBCI_LOGDOMAIN, "Job \"%s\" is not available", AB_Transaction_Command_toString(jobList[i])); } else { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } } else { DBG_INFO(AQHBCI_LOGDOMAIN, "- getting limits"); rv=AH_Job_GetLimits(j, &limits); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "Error getting limits for job \"%s\": %d", AB_Transaction_Command_toString(jobList[i]), rv); AH_Job_free(j); return rv; } DBG_NOTICE(AQHBCI_LOGDOMAIN, "- adding limits"); AB_TransactionLimits_List_Add(limits, tll); AH_Job_free(j); } i++; } /* while i */ return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/banking/account.c0000664000175000017500000001435014044534776022036 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "account_p.h" #include "aqhbci/aqhbci_l.h" #include "aqhbci/banking/provider_l.h" #include "aqhbci/msglayer/hbci-updates_l.h" #include "aqhbci/banking/provider.h" #include #include #include #include #include GWEN_INHERIT(AB_ACCOUNT, AH_ACCOUNT) AB_ACCOUNT *AH_Account_new(AB_PROVIDER *pro) { AB_ACCOUNT *a; AH_ACCOUNT *ae; a=AB_Account_new(); assert(a); AB_Account_SetProvider(a, pro); AB_Account_SetBackendName(a, "aqhbci"); GWEN_NEW_OBJECT(AH_ACCOUNT, ae); GWEN_INHERIT_SETDATA(AB_ACCOUNT, AH_ACCOUNT, a, ae, AH_Account_freeData); ae->flags=AH_BANK_FLAGS_DEFAULT; ae->hbci=AH_Provider_GetHbci(pro); ae->readFromDbFn=AB_Account_SetReadFromDbFn(a, AH_Account_ReadFromDb); ae->writeToDbFn=AB_Account_SetWriteToDbFn(a, AH_Account_WriteToDb); return a; } int AH_Account_ReadFromDb(AB_ACCOUNT *a, GWEN_DB_NODE *db) { AH_ACCOUNT *ae; GWEN_DB_NODE *dbP; int rv; const char *s; AB_PROVIDER *pro; assert(a); ae=GWEN_INHERIT_GETDATA(AB_ACCOUNT, AH_ACCOUNT, a); assert(ae); /* save provider, because AB_Account_ReadFromDb clears it */ pro=AB_Account_GetProvider(a); /* read data for base class */ rv=(ae->readFromDbFn)(a, db); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } /* set provider again */ AB_Account_SetProvider(a, pro); /* read data for provider */ dbP=GWEN_DB_GetGroup(db, GWEN_DB_FLAGS_DEFAULT, "data/backend"); ae->flags=AH_Account_Flags_fromDb(dbP, "accountFlags"); s=GWEN_DB_GetCharValue(dbP, "suffix", 0, NULL); if (s && *s) { ae->flags|=AH_BANK_FLAGS_KTV2; if (strcasecmp(s, "")!=0) AB_Account_SetSubAccountId(a, s); } return 0; } int AH_Account_WriteToDb(const AB_ACCOUNT *a, GWEN_DB_NODE *db) { AH_ACCOUNT *ae; GWEN_DB_NODE *dbP; int rv; assert(a); ae=GWEN_INHERIT_GETDATA(AB_ACCOUNT, AH_ACCOUNT, a); assert(ae); rv=(ae->writeToDbFn)(a, db); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } /* write data for provider */ dbP=GWEN_DB_GetGroup(db, GWEN_DB_FLAGS_DEFAULT, "data/backend"); AH_Account_Flags_toDb(dbP, "accountFlags", ae->flags); GWEN_DB_DeleteVar(dbP, "suffix"); return 0; } void GWENHYWFAR_CB AH_Account_freeData(void *bp, void *p) { AH_ACCOUNT *ae; ae=(AH_ACCOUNT *) p; if (ae->dbTempUpd) GWEN_DB_Group_free(ae->dbTempUpd); GWEN_FREE_OBJECT(ae); } AH_HBCI *AH_Account_GetHbci(const AB_ACCOUNT *a) { AH_ACCOUNT *ae; assert(a); ae=GWEN_INHERIT_GETDATA(AB_ACCOUNT, AH_ACCOUNT, a); assert(ae); return ae->hbci; } void AH_Account_Flags_toDb(GWEN_DB_NODE *db, const char *name, uint32_t flags) { GWEN_DB_DeleteVar(db, name); if (flags & AH_BANK_FLAGS_PREFER_SINGLE_TRANSFER) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_DEFAULT, name, "preferSingleTransfer"); if (flags & AH_BANK_FLAGS_PREFER_SINGLE_DEBITNOTE) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_DEFAULT, name, "preferSingleDebitNote"); if (flags & AH_BANK_FLAGS_KTV2) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_DEFAULT, name, "ktv2"); if (flags & AH_BANK_FLAGS_SEPA) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_DEFAULT, name, "sepa"); if (flags & AH_BANK_FLAGS_SEPA_PREFER_SINGLE_TRANSFER) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_DEFAULT, name, "sepaPreferSingleTransfer"); if (flags & AH_BANK_FLAGS_SEPA_PREFER_SINGLE_DEBITNOTE) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_DEFAULT, name, "sepaPreferSingleDebitNote"); if (flags & AH_BANK_FLAGS_PREFER_CAMT_DOWNLOAD) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_DEFAULT, name, "preferCamtDownload"); } uint32_t AH_Account_Flags_fromDb(GWEN_DB_NODE *db, const char *name) { uint32_t fl=0; int i; for (i=0; ; i++) { const char *s; s=GWEN_DB_GetCharValue(db, name, i, 0); if (!s) break; if (strcasecmp(s, "preferSingleTransfer")==0) fl|=AH_BANK_FLAGS_PREFER_SINGLE_TRANSFER; else if (strcasecmp(s, "preferSingleDebitNote")==0) fl|=AH_BANK_FLAGS_PREFER_SINGLE_DEBITNOTE; else if (strcasecmp(s, "ktv2")==0) fl|=AH_BANK_FLAGS_KTV2; else if (strcasecmp(s, "sepa")==0) fl|=AH_BANK_FLAGS_SEPA; else if (strcasecmp(s, "sepaPreferSingleTransfer")==0) fl|=AH_BANK_FLAGS_SEPA_PREFER_SINGLE_TRANSFER; else if (strcasecmp(s, "sepaPreferSingleDebitNote")==0) fl|=AH_BANK_FLAGS_SEPA_PREFER_SINGLE_DEBITNOTE; else if (strcasecmp(s, "preferCamtDownload")==0) fl|=AH_BANK_FLAGS_PREFER_CAMT_DOWNLOAD; else { DBG_WARN(AQHBCI_LOGDOMAIN, "Unknown account flag \"%s\"", s); } } return fl; } uint32_t AH_Account_GetFlags(const AB_ACCOUNT *a) { AH_ACCOUNT *ae; assert(a); ae=GWEN_INHERIT_GETDATA(AB_ACCOUNT, AH_ACCOUNT, a); assert(ae); return ae->flags; } void AH_Account_SetFlags(AB_ACCOUNT *a, uint32_t flags) { AH_ACCOUNT *ae; assert(a); ae=GWEN_INHERIT_GETDATA(AB_ACCOUNT, AH_ACCOUNT, a); assert(ae); ae->flags=flags; } void AH_Account_AddFlags(AB_ACCOUNT *a, uint32_t flags) { AH_ACCOUNT *ae; assert(a); ae=GWEN_INHERIT_GETDATA(AB_ACCOUNT, AH_ACCOUNT, a); assert(ae); ae->flags|=flags; } void AH_Account_SubFlags(AB_ACCOUNT *a, uint32_t flags) { AH_ACCOUNT *ae; assert(a); ae=GWEN_INHERIT_GETDATA(AB_ACCOUNT, AH_ACCOUNT, a); assert(ae); ae->flags&=~flags; } GWEN_DB_NODE *AH_Account_GetDbTempUpd(const AB_ACCOUNT *a) { AH_ACCOUNT *ae; assert(a); ae=GWEN_INHERIT_GETDATA(AB_ACCOUNT, AH_ACCOUNT, a); assert(ae); return ae->dbTempUpd; } void AH_Account_SetDbTempUpd(AB_ACCOUNT *a, GWEN_DB_NODE *db) { AH_ACCOUNT *ae; assert(a); ae=GWEN_INHERIT_GETDATA(AB_ACCOUNT, AH_ACCOUNT, a); assert(ae); if (ae->dbTempUpd) GWEN_DB_Group_free(ae->dbTempUpd); ae->dbTempUpd=db; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/banking/provider_dtazv.c0000664000175000017500000000446614044534776023453 00000000000000/*************************************************************************** begin : Tue Jun 03 2018 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ /* * This file is included by provider.c */ #include "aqhbci/ajobs/jobforeignxferwh_l.h" int AH_Provider_SendDtazv(AB_PROVIDER *pro, AB_USER *u, AB_ACCOUNT *a, AB_IMEXPORTER_CONTEXT *ctx, const uint8_t *dataPtr, uint32_t dataLen, int withProgress, int nounmount, int doLock) { AH_PROVIDER *hp; AB_BANKING *ab; AH_HBCI *h; AH_JOB *job; AH_OUTBOX *ob; int rv; assert(pro); hp=GWEN_INHERIT_GETDATA(AB_PROVIDER, AH_PROVIDER, pro); assert(hp); assert(u); assert(a); /* gather all objects */ ab=AB_Provider_GetBanking(pro); assert(ab); h=AH_Provider_GetHbci(pro); assert(h); job=AH_Job_ForeignTransferWH_new(pro, u, a); if (!job) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Job not supported, should not happen"); return GWEN_ERROR_GENERIC; } rv=AH_Job_ForeignTransferWH_SetDtazv(job, dataPtr, dataLen); if (rv) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); AH_Job_free(job); return rv; } AH_Job_AddSigner(job, AB_User_GetUserId(u)); ob=AH_Outbox_new(pro); AH_Outbox_AddJob(ob, job); rv=AH_Outbox_Execute(ob, ctx, withProgress, 1, doLock); if (rv) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not execute outbox.\n"); if (!nounmount) AB_Banking_ClearCryptTokenList(AH_HBCI_GetBankingApi(h)); AH_Job_free(job); AH_Outbox_free(ob); return rv; } AH_Outbox_free(ob); if (AH_Job_HasErrors(job) || AH_Job_GetStatus(job)==AH_JobStatusError) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Job has errors"); // TODO: show errors AH_Job_free(job); if (!nounmount) AB_Banking_ClearCryptTokenList(AH_HBCI_GetBankingApi(h)); return GWEN_ERROR_GENERIC; } AH_Job_free(job); if (!nounmount) AB_Banking_ClearCryptTokenList(AH_HBCI_GetBankingApi(h)); return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/banking/user_l.h0000664000175000017500000000571614044534776021706 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_USER_L_H #define AH_USER_L_H #include "aqhbci/banking/user.h" #include "aqhbci/msglayer/bpd_l.h" #include "aqhbci/msglayer/hbci_l.h" #include #include #include AB_USER *AH_User_new(AB_PROVIDER *pro); AH_HBCI *AH_User_GetHbci(const AB_USER *u); GWEN_MSGENGINE *AH_User_GetMsgEngine(const AB_USER *u); int AH_User_GetBpdVersion(const AB_USER *u); void AH_User_SetBpdVersion(AB_USER *u, int i); AH_BPD *AH_User_GetBpd(const AB_USER *u); void AH_User_SetBpd(AB_USER *u, AH_BPD *bpd); /** * The upd (User Parameter Data) contains groups for every account * the customer has access to. The name of the group ressembles the * accountId. The structure is as follows (assuming an account id of * "123456" and a per day limit of 4000,- Euro for the job HKUEB which * is to be signed by at least one user): * * @code * * 11111 { * updjob { * char job="HKUEB" * int minsign="1" * limit { * char type="E" * char value="4000," * char currency="EUR" * } # limit * } # updjob * } # 11111 * @endcode * */ GWEN_DB_NODE *AH_User_GetUpd(const AB_USER *u); GWEN_DB_NODE *AH_User_GetUpdForAccount(const AB_USER *u, const AB_ACCOUNT *acc); GWEN_DB_NODE *AH_User_GetUpdForAccountUniqueId(const AB_USER *u, uint32_t uid); int AH_User_GetUpdVersion(const AB_USER *u); void AH_User_SetUpdVersion(AB_USER *u, int i); int AH_User_InputPin(AB_USER *u, char *pwbuffer, int minLen, int maxLen, int flags); int AH_User_InputTan(AB_USER *u, char *pwbuffer, int minLen, int maxLen); int AH_User_SetTanStatus(AB_USER *u, const char *challenge, const char *tan, GWEN_GUI_PASSWORD_STATUS status); int AH_User_SetPinStatus(AB_USER *u, const char *pin, GWEN_GUI_PASSWORD_STATUS status); const GWEN_STRINGLIST *AH_User_GetSepaDescriptors(AB_USER *u); int AH_User_VerifyInitialKey(GWEN_CRYPT_TOKEN *ct, const GWEN_CRYPT_TOKEN_CONTEXT *ctx, AB_USER *user, GWEN_CRYPT_KEY *key, uint16_t sentModl, const char *keyName); GWEN_DB_NODE *AH_User_GetBpdJobForParamNameAndVersion(const AB_USER *u, const char *paramName, int version); #endif /* AH_USER_L_H */ aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/banking/provider_tan.c0000664000175000017500000002062114043610745023062 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "provider_tan.h" #include "aqhbci/banking/provider_l.h" #include "aqhbci/tan/tanmechanism.h" #include #include #include /* ------------------------------------------------------------------------------------------------ * forward declarations * ------------------------------------------------------------------------------------------------ */ static int _addTextWithoutTags(const char *s, GWEN_BUFFER *obuf); static void _addPhrasePleaseEnterTanForUser(AB_PROVIDER *pro, AB_USER *u, GWEN_BUFFER *bufGuiText); static int _extractChallengeAndText(const char *sChallengeHhd, const char *sChallenge, GWEN_BUFFER *bufChallenge, GWEN_BUFFER *bufGuiText); static void _copyCompressedCodeIntoBuffer(const char *code, GWEN_BUFFER *cbuf); static void _keepHhdBytes(GWEN_BUFFER *cbuf); /* ------------------------------------------------------------------------------------------------ * implementations * ------------------------------------------------------------------------------------------------ */ int AH_Provider_InputTanWithChallenge(AB_PROVIDER *pro, AB_USER *u, const AH_TAN_METHOD *tanMethodDescription, const char *sChallenge, const char *sChallengeHhd, char *passwordBuffer, int passwordMinLen, int passwordMaxLen) { int rv; GWEN_BUFFER *bufGuiText; GWEN_BUFFER *bufChallenge; AH_TAN_MECHANISM *tanMechanism; int userSelectedTanMechanism; assert(tanMethodDescription); bufGuiText=GWEN_Buffer_new(0, 256, 0, 1); _addPhrasePleaseEnterTanForUser(pro, u, bufGuiText); bufChallenge=GWEN_Buffer_new(0, 256, 0, 1); rv=_extractChallengeAndText(sChallengeHhd, sChallenge, bufChallenge, bufGuiText); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(bufChallenge); GWEN_Buffer_free(bufGuiText); return rv; } userSelectedTanMechanism=AH_User_GetSelectedTanInputMechanism(u); tanMechanism=AH_TanMechanism_Factory(tanMethodDescription, userSelectedTanMechanism); if (tanMechanism==NULL) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Could not determine TAN mechanism to use"); return rv; } rv=AH_TanMechanism_GetTan(tanMechanism, u, I18N("TAN Entry"), GWEN_Buffer_GetStart(bufGuiText), (const uint8_t *) GWEN_Buffer_GetStart(bufChallenge), GWEN_Buffer_GetUsedBytes(bufChallenge), passwordBuffer, passwordMinLen, passwordMaxLen); AH_TanMechanism_free(tanMechanism); GWEN_Buffer_free(bufChallenge); GWEN_Buffer_free(bufGuiText); return rv; } int _extractChallengeAndText(const char *sChallengeHhd, const char *sChallenge, GWEN_BUFFER *bufChallenge, GWEN_BUFFER *bufGuiText) { if (sChallengeHhd && *sChallengeHhd) { int rv; DBG_ERROR(AQHBCI_LOGDOMAIN, "ChallengeHHD is [%s]", sChallengeHhd); /* use hex-encoded challenge */ rv=GWEN_Text_FromHexBuffer(sChallengeHhd, bufChallenge); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } DBG_ERROR(AQHBCI_LOGDOMAIN, "Created challenge HHUD is:"); GWEN_Text_LogString(GWEN_Buffer_GetStart(bufChallenge), GWEN_Buffer_GetUsedBytes(bufChallenge), AQHBCI_LOGDOMAIN, GWEN_LoggerLevel_Error); /* get text */ if (GWEN_Buffer_GetUsedBytes(bufGuiText)>0) GWEN_Buffer_AppendString(bufGuiText, "\n"); if (sChallenge && *sChallenge) GWEN_Buffer_AppendString(bufGuiText, sChallenge); else GWEN_Buffer_AppendString(bufGuiText, I18N("Please enter the TAN from the device.")); GWEN_Buffer_AppendString(bufGuiText, "\n"); } else if (sChallenge && *sChallenge) { const char *s; /* look for "CHLGUC" */ s=GWEN_Text_StrCaseStr(sChallenge, "CHLGUC"); if (s) { GWEN_BUFFER *cbuf; /* extract challenge */ DBG_ERROR(AQHBCI_LOGDOMAIN, "Challenge contains CHLGUC"); cbuf=GWEN_Buffer_new(0, 256, 0, 1); _copyCompressedCodeIntoBuffer(sChallenge, cbuf); _keepHhdBytes(cbuf); GWEN_Buffer_AppendString(bufChallenge, GWEN_Buffer_GetStart(cbuf)); GWEN_Buffer_free(cbuf); DBG_ERROR(AQHBCI_LOGDOMAIN, "Will use this challenge:"); GWEN_Buffer_Dump(bufChallenge, 2); /* extract text */ if (GWEN_Buffer_GetUsedBytes(bufGuiText)>0) GWEN_Buffer_AppendString(bufGuiText, "\n"); s=GWEN_Text_StrCaseStr(sChallenge, "CHLGTEXT"); if (s) { /* skip "CHLGTEXT" and 4 digits */ s+=12; /* add rest of the message (replace HTML tags, if any) */ _addTextWithoutTags(s, bufGuiText); } else { /* create own text */ GWEN_Buffer_AppendString(bufGuiText, I18N("Please enter the TAN from the device.")); } } else { /* no optical challenge */ DBG_ERROR(AQHBCI_LOGDOMAIN, "Challenge contains no optical data"); GWEN_Buffer_AppendString(bufGuiText, I18N("The server provided the following challenge:")); GWEN_Buffer_AppendString(bufGuiText, "\n"); GWEN_Buffer_AppendString(bufGuiText, sChallenge); } } else { DBG_ERROR(AQHBCI_LOGDOMAIN, "No challenge data given."); return GWEN_ERROR_BAD_DATA; } return 0; } void _copyCompressedCodeIntoBuffer(const char *code, GWEN_BUFFER *cbuf) { const uint8_t *p; p=(const uint8_t *)code; while (*p) { uint8_t c; c=toupper(*p); if ((c>='0' && c<='9') || (c>='A' && c<='Z') || c==',') GWEN_Buffer_AppendByte(cbuf, c); p++; } } void _keepHhdBytes(GWEN_BUFFER *cbuf) { const char *pStart=NULL; const char *pEnd=NULL; pStart=GWEN_Text_StrCaseStr(GWEN_Buffer_GetStart(cbuf), "CHLGUC"); if (pStart) { pStart+=10; /* skip "CHLGUC" and following 4 digits */ pEnd=GWEN_Text_StrCaseStr(pStart, "CHLGTEXT"); if (pStart && pEnd) { GWEN_Buffer_Crop(cbuf, pStart-GWEN_Buffer_GetStart(cbuf), pEnd-pStart); GWEN_Buffer_SetPos(cbuf, 0); GWEN_Buffer_InsertByte(cbuf, '0'); GWEN_Buffer_SetPos(cbuf, GWEN_Buffer_GetUsedBytes(cbuf)); } } } void _addPhrasePleaseEnterTanForUser(AB_PROVIDER *pro, AB_USER *u, GWEN_BUFFER *bufGuiText) { AB_BANKING *ab; char buffer[1024]; const char *sUserName; const char *sBankName=NULL; AB_BANKINFO *bankInfo; assert(u); sUserName=AB_User_GetUserId(u); ab=AB_Provider_GetBanking(pro); assert(ab); /* find bank name */ bankInfo=AB_Banking_GetBankInfo(ab, "de", "*", AB_User_GetBankCode(u)); if (bankInfo) sBankName=AB_BankInfo_GetBankName(bankInfo); if (!sBankName) sBankName=AB_User_GetBankCode(u); snprintf(buffer, sizeof(buffer)-1, I18N("Please enter the TAN for user %s at %s.\n"), sUserName, sBankName); buffer[sizeof(buffer)-1]=0; GWEN_Buffer_AppendString(bufGuiText, buffer); AB_BankInfo_free(bankInfo); } int _addTextWithoutTags(const char *s, GWEN_BUFFER *obuf) { while (*s) { if (*s=='<') { const char *s2; int l; s2=s; s2++; while (*s2 && *s2!='>') s2++; l=s2-s-2; if (l>0) { const char *s3; s3=s; s3++; if (l==2) { if (strncasecmp(s3, "br", 2)==0) GWEN_Buffer_AppendString(obuf, "\n"); } else if (l==3) { if (strncasecmp(s3, "br/", 3)==0) GWEN_Buffer_AppendString(obuf, "\n"); } } s=s2; /* set s to position of closing bracket */ } else GWEN_Buffer_AppendByte(obuf, *s); /* next char */ s++; } return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/tan/0000755000175000017500000000000015037736163017457 500000000000000aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/tan/Makefile.in0000644000175000017500000006063715037736025021455 00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/libs/plugins/backends/aqhbci/tan ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/distri.m4 $(top_srcdir)/m4/gwenhywfar.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/os.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libhbcitan_la_LIBADD = am_libhbcitan_la_OBJECTS = tanmethod.lo tanmechanism.lo \ tan_chiptan_opt.lo tan_image.lo tan_text.lo libhbcitan_la_OBJECTS = $(am_libhbcitan_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/tan_chiptan_opt.Plo \ ./$(DEPDIR)/tan_image.Plo ./$(DEPDIR)/tan_text.Plo \ ./$(DEPDIR)/tanmechanism.Plo ./$(DEPDIR)/tanmethod.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libhbcitan_la_SOURCES) DIST_SOURCES = $(libhbcitan_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac HEADERS = $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADD_ACLOCAL_FLAGS = @ADD_ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AQBANKING_CLI_VERSION_STRING = @AQBANKING_CLI_VERSION_STRING@ AQBANKING_FINTS_VERSION_STRING = @AQBANKING_FINTS_VERSION_STRING@ AQBANKING_SO_AGE = @AQBANKING_SO_AGE@ AQBANKING_SO_CURRENT = @AQBANKING_SO_CURRENT@ AQBANKING_SO_EFFECTIVE = @AQBANKING_SO_EFFECTIVE@ AQBANKING_SO_REVISION = @AQBANKING_SO_REVISION@ AQBANKING_VERSION_BUILD = @AQBANKING_VERSION_BUILD@ AQBANKING_VERSION_FULL_STRING = @AQBANKING_VERSION_FULL_STRING@ AQBANKING_VERSION_MAJOR = @AQBANKING_VERSION_MAJOR@ AQBANKING_VERSION_MINOR = @AQBANKING_VERSION_MINOR@ AQBANKING_VERSION_PATCHLEVEL = @AQBANKING_VERSION_PATCHLEVEL@ AQBANKING_VERSION_RELEASE_STRING = @AQBANKING_VERSION_RELEASE_STRING@ AQBANKING_VERSION_STRING = @AQBANKING_VERSION_STRING@ AQBANKING_VERSION_TAG = @AQBANKING_VERSION_TAG@ AQEBICS_CFLAGS = @AQEBICS_CFLAGS@ AQEBICS_LIBS = @AQEBICS_LIBS@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATETIME = @DATETIME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_EXCLUDE_PATTERNS = @DOXYGEN_EXCLUDE_PATTERNS@ DOXYGEN_FILE_PATTERNS = @DOXYGEN_FILE_PATTERNS@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENGUI_GTK2_CFLAGS = @GWENGUI_GTK2_CFLAGS@ GWENGUI_GTK2_LIBS = @GWENGUI_GTK2_LIBS@ GWENHYWFAR_MINIMUM_VERSION = @GWENHYWFAR_MINIMUM_VERSION@ HAVE_GWENGUI_GTK2 = @HAVE_GWENGUI_GTK2@ HAVE_I18N = @HAVE_I18N@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIBXSLT_CFLAGS = @LIBXSLT_CFLAGS@ LIBXSLT_LIBS = @LIBXSLT_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_SUPPORTS_QT = @MSGFMT_SUPPORTS_QT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ TUTORIALS = @TUTORIALS@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XMLMERGE = @XMLMERGE@ XMLSEC_CFLAGS = @XMLSEC_CFLAGS@ XMLSEC_LIBS = @XMLSEC_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ aqbanking_backends = @aqbanking_backends@ aqbanking_cfg_searchdir = @aqbanking_cfg_searchdir@ aqbanking_data_searchdir = @aqbanking_data_searchdir@ aqbanking_headerdir = @aqbanking_headerdir@ aqbanking_headerdir_am = @aqbanking_headerdir_am@ aqbanking_includes = @aqbanking_includes@ aqbanking_internal_libs = @aqbanking_internal_libs@ aqbanking_ldflags = @aqbanking_ldflags@ aqbanking_libs = @aqbanking_libs@ aqbanking_locale_searchdir = @aqbanking_locale_searchdir@ aqbanking_modules = @aqbanking_modules@ aqbanking_pkgdatadir = @aqbanking_pkgdatadir@ aqbanking_plugin_searchdir = @aqbanking_plugin_searchdir@ aqbanking_plugindir = @aqbanking_plugindir@ aqbanking_plugins_backends_dirs = @aqbanking_plugins_backends_dirs@ aqbanking_plugins_backends_libs = @aqbanking_plugins_backends_libs@ aqbanking_plugins_bankinfo_dirs = @aqbanking_plugins_bankinfo_dirs@ aqbanking_plugins_bankinfo_libs = @aqbanking_plugins_bankinfo_libs@ aqbanking_plugins_imexporters_dirs = @aqbanking_plugins_imexporters_dirs@ aqbanking_plugins_imexporters_libs = @aqbanking_plugins_imexporters_libs@ aqbanking_plugins_parsers_dirs = @aqbanking_plugins_parsers_dirs@ aqbanking_symlinkdir = @aqbanking_symlinkdir@ aqbanking_sys_is_windows = @aqbanking_sys_is_windows@ aqbankingpp_modules = @aqbankingpp_modules@ aqebics_datadir = @aqebics_datadir@ aqebics_includes = @aqebics_includes@ aqebics_internal_libs = @aqebics_internal_libs@ aqebics_ldflags = @aqebics_ldflags@ aqebics_libs = @aqebics_libs@ aqfints_datadir = @aqfints_datadir@ aqhbci_datadir = @aqhbci_datadir@ aqhbci_includes = @aqhbci_includes@ aqhbci_internal_libs = @aqhbci_internal_libs@ aqhbci_ldflags = @aqhbci_ldflags@ aqhbci_libs = @aqhbci_libs@ aqofxconnect_includes = @aqofxconnect_includes@ aqofxconnect_internal_libs = @aqofxconnect_internal_libs@ aqofxconnect_libs = @aqofxconnect_libs@ aqpaypal_includes = @aqpaypal_includes@ aqpaypal_internal_libs = @aqpaypal_internal_libs@ aqpaypal_libs = @aqpaypal_libs@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gmp_libs = @gmp_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_dir = @gwenhywfar_dir@ gwenhywfar_has_crypt = @gwenhywfar_has_crypt@ gwenhywfar_headers = @gwenhywfar_headers@ gwenhywfar_includes = @gwenhywfar_includes@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_plugins = @gwenhywfar_plugins@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ typemaker2_exe = @typemaker2_exe@ visibility_cflags = @visibility_cflags@ with_aqebics = @with_aqebics@ with_aqhbci = @with_aqhbci@ AM_CFLAGS = -DBUILDING_AQBANKING @visibility_cflags@ AM_CPPFLAGS = -I$(top_srcdir)/src/libs -I$(top_builddir)/src/libs $(gwenhywfar_includes) \ -I$(srcdir)/../.. \ -I$(srcdir)/../msglayer -I$(srcdir)/.. typefiles = tanmethod.xml noinst_LTLIBRARIES = libhbcitan.la noinst_HEADERS = \ tanmethod.h \ tanmethod_p.h \ tanmethod.h \ tanmechanism.h tanmechanism_p.h \ tan_chiptan_opt.h \ tan_text.h \ tan_image.h #iheaderdir=@aqbanking_headerdir_am@/aqhbci #iheader_HEADERS= libhbcitan_la_SOURCES = \ tanmethod.c \ tanmechanism.c \ tan_chiptan_opt.c \ tan_image.c \ tan_text.c EXTRA_DIST = $(typefiles) all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libs/plugins/backends/aqhbci/tan/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libs/plugins/backends/aqhbci/tan/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libhbcitan.la: $(libhbcitan_la_OBJECTS) $(libhbcitan_la_DEPENDENCIES) $(EXTRA_libhbcitan_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libhbcitan_la_OBJECTS) $(libhbcitan_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tan_chiptan_opt.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tan_image.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tan_text.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tanmechanism.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tanmethod.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/tan_chiptan_opt.Plo -rm -f ./$(DEPDIR)/tan_image.Plo -rm -f ./$(DEPDIR)/tan_text.Plo -rm -f ./$(DEPDIR)/tanmechanism.Plo -rm -f ./$(DEPDIR)/tanmethod.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/tan_chiptan_opt.Plo -rm -f ./$(DEPDIR)/tan_image.Plo -rm -f ./$(DEPDIR)/tan_text.Plo -rm -f ./$(DEPDIR)/tanmechanism.Plo -rm -f ./$(DEPDIR)/tanmethod.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-generic clean-libtool clean-noinstLTLIBRARIES \ cscopelist-am ctags ctags-am distclean distclean-compile \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am .PRECIOUS: Makefile typefiles: $(typefiles) $(typemaker2_exe) -I $(top_srcdir)/src/libs/aqbanking/typemaker2/c -I $(gwenhywfar_dir)/share/gwenhywfar/typemaker2/c -I $(srcdir) --destfolder="$(srcdir)" -D AQHBCI_API $(typefiles) typedefs: $(typefiles) $(typemaker2_exe) --defs-only -I $(top_srcdir)/src/libs/aqbanking/typemaker2/c -I $(gwenhywfar_dir)/share/gwenhywfar/typemaker2/c -I $(srcdir) --destfolder="$(srcdir)" -D AQHBCI_API $(typefiles) sources: for f in $(libhbcitan_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d sources; \ done cppcheck: for f in $(libhbcitan_la_SOURCES); do \ cppcheck --force $$f ; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/tan/tan_image.h0000664000175000017500000000117314043610745021471 00000000000000/*************************************************************************** begin : Sat Sep 14 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_TAN_MECHANISM_IMAGE_H #define AH_TAN_MECHANISM_IMAGE_H #include "tanmechanism.h" AH_TAN_MECHANISM *AH_TanMechanism_Image_new(const AH_TAN_METHOD *tanMethod, int tanMethodId); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/tan/tanmethod.c0000664000175000017500000006302415037736055021535 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "tanmethod.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "./tanmethod_p.h" #include #include /* code headers */ /* macro functions */ GWEN_LIST_FUNCTIONS(AH_TAN_METHOD, AH_TanMethod) GWEN_LIST2_FUNCTIONS(AH_TAN_METHOD, AH_TanMethod) GWEN_INHERIT_FUNCTIONS(AH_TAN_METHOD) AH_TAN_METHOD *AH_TanMethod_new(void) { AH_TAN_METHOD *p_struct; GWEN_NEW_OBJECT(AH_TAN_METHOD, p_struct) p_struct->_refCount=1; GWEN_INHERIT_INIT(AH_TAN_METHOD, p_struct) GWEN_LIST_INIT(AH_TAN_METHOD, p_struct) /* members */ p_struct->function=0; p_struct->process=0; p_struct->methodId=NULL; p_struct->methodName=NULL; p_struct->zkaTanName=NULL; p_struct->zkaTanVersion=NULL; p_struct->tanMaxLen=0; p_struct->formatId=NULL; p_struct->prompt=NULL; p_struct->returnMaxLen=0; p_struct->maxActiveLists=0; p_struct->multiTanAllowed=0; p_struct->timeShiftAllowed=0; p_struct->tanListMode=0; p_struct->stornoAllowed=0; p_struct->needSmsAccount=0; p_struct->needLocalAccount=0; p_struct->needChallengeClass=0; p_struct->needChallengeAmount=0; p_struct->challengeIsStructured=0; p_struct->initMode=0; p_struct->needTanMediumId=0; p_struct->maxActiveTanMedia=0; p_struct->gvVersion=0; /* virtual functions */ return p_struct; } void AH_TanMethod_free(AH_TAN_METHOD *p_struct) { if (p_struct) { assert(p_struct->_refCount); if (p_struct->_refCount==1) { GWEN_INHERIT_FINI(AH_TAN_METHOD, p_struct) GWEN_LIST_FINI(AH_TAN_METHOD, p_struct) /* members */ free(p_struct->methodId); p_struct->methodId=NULL; free(p_struct->methodName); p_struct->methodName=NULL; free(p_struct->zkaTanName); p_struct->zkaTanName=NULL; free(p_struct->zkaTanVersion); p_struct->zkaTanVersion=NULL; free(p_struct->formatId); p_struct->formatId=NULL; free(p_struct->prompt); p_struct->prompt=NULL; p_struct->_refCount=0; GWEN_FREE_OBJECT(p_struct); } else p_struct->_refCount--; } } void AH_TanMethod_Attach(AH_TAN_METHOD *p_struct) { assert(p_struct); assert(p_struct->_refCount); p_struct->_refCount++; } AH_TAN_METHOD *AH_TanMethod_dup(const AH_TAN_METHOD *p_src) { AH_TAN_METHOD *p_struct; assert(p_src); p_struct=AH_TanMethod_new(); /* member "function" */ p_struct->function=p_src->function; /* member "process" */ p_struct->process=p_src->process; /* member "methodId" */ if (p_struct->methodId) { free(p_struct->methodId); p_struct->methodId=NULL; p_struct->methodId=NULL; } if (p_src->methodId) { p_struct->methodId=strdup(p_src->methodId); } /* member "methodName" */ if (p_struct->methodName) { free(p_struct->methodName); p_struct->methodName=NULL; p_struct->methodName=NULL; } if (p_src->methodName) { p_struct->methodName=strdup(p_src->methodName); } /* member "zkaTanName" */ if (p_struct->zkaTanName) { free(p_struct->zkaTanName); p_struct->zkaTanName=NULL; p_struct->zkaTanName=NULL; } if (p_src->zkaTanName) { p_struct->zkaTanName=strdup(p_src->zkaTanName); } /* member "zkaTanVersion" */ if (p_struct->zkaTanVersion) { free(p_struct->zkaTanVersion); p_struct->zkaTanVersion=NULL; p_struct->zkaTanVersion=NULL; } if (p_src->zkaTanVersion) { p_struct->zkaTanVersion=strdup(p_src->zkaTanVersion); } /* member "tanMaxLen" */ p_struct->tanMaxLen=p_src->tanMaxLen; /* member "formatId" */ if (p_struct->formatId) { free(p_struct->formatId); p_struct->formatId=NULL; p_struct->formatId=NULL; } if (p_src->formatId) { p_struct->formatId=strdup(p_src->formatId); } /* member "prompt" */ if (p_struct->prompt) { free(p_struct->prompt); p_struct->prompt=NULL; p_struct->prompt=NULL; } if (p_src->prompt) { p_struct->prompt=strdup(p_src->prompt); } /* member "returnMaxLen" */ p_struct->returnMaxLen=p_src->returnMaxLen; /* member "maxActiveLists" */ p_struct->maxActiveLists=p_src->maxActiveLists; /* member "multiTanAllowed" */ p_struct->multiTanAllowed=p_src->multiTanAllowed; /* member "timeShiftAllowed" */ p_struct->timeShiftAllowed=p_src->timeShiftAllowed; /* member "tanListMode" */ p_struct->tanListMode=p_src->tanListMode; /* member "stornoAllowed" */ p_struct->stornoAllowed=p_src->stornoAllowed; /* member "needSmsAccount" */ p_struct->needSmsAccount=p_src->needSmsAccount; /* member "needLocalAccount" */ p_struct->needLocalAccount=p_src->needLocalAccount; /* member "needChallengeClass" */ p_struct->needChallengeClass=p_src->needChallengeClass; /* member "needChallengeAmount" */ p_struct->needChallengeAmount=p_src->needChallengeAmount; /* member "challengeIsStructured" */ p_struct->challengeIsStructured=p_src->challengeIsStructured; /* member "initMode" */ p_struct->initMode=p_src->initMode; /* member "needTanMediumId" */ p_struct->needTanMediumId=p_src->needTanMediumId; /* member "maxActiveTanMedia" */ p_struct->maxActiveTanMedia=p_src->maxActiveTanMedia; /* member "gvVersion" */ p_struct->gvVersion=p_src->gvVersion; return p_struct; } AH_TAN_METHOD *AH_TanMethod_copy(AH_TAN_METHOD *p_struct, const AH_TAN_METHOD *p_src) { assert(p_struct); assert(p_src); /* member "function" */ p_struct->function=p_src->function; /* member "process" */ p_struct->process=p_src->process; /* member "methodId" */ if (p_struct->methodId) { free(p_struct->methodId); p_struct->methodId=NULL; p_struct->methodId=NULL; } if (p_src->methodId) { p_struct->methodId=strdup(p_src->methodId); } /* member "methodName" */ if (p_struct->methodName) { free(p_struct->methodName); p_struct->methodName=NULL; p_struct->methodName=NULL; } if (p_src->methodName) { p_struct->methodName=strdup(p_src->methodName); } /* member "zkaTanName" */ if (p_struct->zkaTanName) { free(p_struct->zkaTanName); p_struct->zkaTanName=NULL; p_struct->zkaTanName=NULL; } if (p_src->zkaTanName) { p_struct->zkaTanName=strdup(p_src->zkaTanName); } /* member "zkaTanVersion" */ if (p_struct->zkaTanVersion) { free(p_struct->zkaTanVersion); p_struct->zkaTanVersion=NULL; p_struct->zkaTanVersion=NULL; } if (p_src->zkaTanVersion) { p_struct->zkaTanVersion=strdup(p_src->zkaTanVersion); } /* member "tanMaxLen" */ p_struct->tanMaxLen=p_src->tanMaxLen; /* member "formatId" */ if (p_struct->formatId) { free(p_struct->formatId); p_struct->formatId=NULL; p_struct->formatId=NULL; } if (p_src->formatId) { p_struct->formatId=strdup(p_src->formatId); } /* member "prompt" */ if (p_struct->prompt) { free(p_struct->prompt); p_struct->prompt=NULL; p_struct->prompt=NULL; } if (p_src->prompt) { p_struct->prompt=strdup(p_src->prompt); } /* member "returnMaxLen" */ p_struct->returnMaxLen=p_src->returnMaxLen; /* member "maxActiveLists" */ p_struct->maxActiveLists=p_src->maxActiveLists; /* member "multiTanAllowed" */ p_struct->multiTanAllowed=p_src->multiTanAllowed; /* member "timeShiftAllowed" */ p_struct->timeShiftAllowed=p_src->timeShiftAllowed; /* member "tanListMode" */ p_struct->tanListMode=p_src->tanListMode; /* member "stornoAllowed" */ p_struct->stornoAllowed=p_src->stornoAllowed; /* member "needSmsAccount" */ p_struct->needSmsAccount=p_src->needSmsAccount; /* member "needLocalAccount" */ p_struct->needLocalAccount=p_src->needLocalAccount; /* member "needChallengeClass" */ p_struct->needChallengeClass=p_src->needChallengeClass; /* member "needChallengeAmount" */ p_struct->needChallengeAmount=p_src->needChallengeAmount; /* member "challengeIsStructured" */ p_struct->challengeIsStructured=p_src->challengeIsStructured; /* member "initMode" */ p_struct->initMode=p_src->initMode; /* member "needTanMediumId" */ p_struct->needTanMediumId=p_src->needTanMediumId; /* member "maxActiveTanMedia" */ p_struct->maxActiveTanMedia=p_src->maxActiveTanMedia; /* member "gvVersion" */ p_struct->gvVersion=p_src->gvVersion; return p_struct; } int AH_TanMethod_GetFunction(const AH_TAN_METHOD *p_struct){ assert(p_struct); return p_struct->function; } int AH_TanMethod_GetProcess(const AH_TAN_METHOD *p_struct){ assert(p_struct); return p_struct->process; } const char *AH_TanMethod_GetMethodId(const AH_TAN_METHOD *p_struct){ assert(p_struct); return p_struct->methodId; } const char *AH_TanMethod_GetMethodName(const AH_TAN_METHOD *p_struct){ assert(p_struct); return p_struct->methodName; } const char *AH_TanMethod_GetZkaTanName(const AH_TAN_METHOD *p_struct){ assert(p_struct); return p_struct->zkaTanName; } const char *AH_TanMethod_GetZkaTanVersion(const AH_TAN_METHOD *p_struct){ assert(p_struct); return p_struct->zkaTanVersion; } int AH_TanMethod_GetTanMaxLen(const AH_TAN_METHOD *p_struct){ assert(p_struct); return p_struct->tanMaxLen; } const char *AH_TanMethod_GetFormatId(const AH_TAN_METHOD *p_struct){ assert(p_struct); return p_struct->formatId; } const char *AH_TanMethod_GetPrompt(const AH_TAN_METHOD *p_struct){ assert(p_struct); return p_struct->prompt; } int AH_TanMethod_GetReturnMaxLen(const AH_TAN_METHOD *p_struct){ assert(p_struct); return p_struct->returnMaxLen; } int AH_TanMethod_GetMaxActiveLists(const AH_TAN_METHOD *p_struct){ assert(p_struct); return p_struct->maxActiveLists; } int AH_TanMethod_GetMultiTanAllowed(const AH_TAN_METHOD *p_struct){ assert(p_struct); return p_struct->multiTanAllowed; } int AH_TanMethod_GetTimeShiftAllowed(const AH_TAN_METHOD *p_struct){ assert(p_struct); return p_struct->timeShiftAllowed; } int AH_TanMethod_GetTanListMode(const AH_TAN_METHOD *p_struct){ assert(p_struct); return p_struct->tanListMode; } int AH_TanMethod_GetStornoAllowed(const AH_TAN_METHOD *p_struct){ assert(p_struct); return p_struct->stornoAllowed; } int AH_TanMethod_GetNeedSmsAccount(const AH_TAN_METHOD *p_struct){ assert(p_struct); return p_struct->needSmsAccount; } int AH_TanMethod_GetNeedLocalAccount(const AH_TAN_METHOD *p_struct){ assert(p_struct); return p_struct->needLocalAccount; } int AH_TanMethod_GetNeedChallengeClass(const AH_TAN_METHOD *p_struct){ assert(p_struct); return p_struct->needChallengeClass; } int AH_TanMethod_GetNeedChallengeAmount(const AH_TAN_METHOD *p_struct){ assert(p_struct); return p_struct->needChallengeAmount; } int AH_TanMethod_GetChallengeIsStructured(const AH_TAN_METHOD *p_struct){ assert(p_struct); return p_struct->challengeIsStructured; } int AH_TanMethod_GetInitMode(const AH_TAN_METHOD *p_struct){ assert(p_struct); return p_struct->initMode; } int AH_TanMethod_GetNeedTanMediumId(const AH_TAN_METHOD *p_struct){ assert(p_struct); return p_struct->needTanMediumId; } int AH_TanMethod_GetMaxActiveTanMedia(const AH_TAN_METHOD *p_struct){ assert(p_struct); return p_struct->maxActiveTanMedia; } int AH_TanMethod_GetGvVersion(const AH_TAN_METHOD *p_struct){ assert(p_struct); return p_struct->gvVersion; } void AH_TanMethod_SetFunction(AH_TAN_METHOD *p_struct, int p_src){ assert(p_struct); p_struct->function=p_src; } void AH_TanMethod_SetProcess(AH_TAN_METHOD *p_struct, int p_src){ assert(p_struct); p_struct->process=p_src; } void AH_TanMethod_SetMethodId(AH_TAN_METHOD *p_struct, const char *p_src){ assert(p_struct); if (p_struct->methodId) { free(p_struct->methodId); p_struct->methodId=NULL; p_struct->methodId=NULL; } if (p_src) { p_struct->methodId=strdup(p_src); } else { p_struct->methodId=NULL; } } void AH_TanMethod_SetMethodName(AH_TAN_METHOD *p_struct, const char *p_src){ assert(p_struct); if (p_struct->methodName) { free(p_struct->methodName); p_struct->methodName=NULL; p_struct->methodName=NULL; } if (p_src) { p_struct->methodName=strdup(p_src); } else { p_struct->methodName=NULL; } } void AH_TanMethod_SetZkaTanName(AH_TAN_METHOD *p_struct, const char *p_src){ assert(p_struct); if (p_struct->zkaTanName) { free(p_struct->zkaTanName); p_struct->zkaTanName=NULL; p_struct->zkaTanName=NULL; } if (p_src) { p_struct->zkaTanName=strdup(p_src); } else { p_struct->zkaTanName=NULL; } } void AH_TanMethod_SetZkaTanVersion(AH_TAN_METHOD *p_struct, const char *p_src){ assert(p_struct); if (p_struct->zkaTanVersion) { free(p_struct->zkaTanVersion); p_struct->zkaTanVersion=NULL; p_struct->zkaTanVersion=NULL; } if (p_src) { p_struct->zkaTanVersion=strdup(p_src); } else { p_struct->zkaTanVersion=NULL; } } void AH_TanMethod_SetTanMaxLen(AH_TAN_METHOD *p_struct, int p_src){ assert(p_struct); p_struct->tanMaxLen=p_src; } void AH_TanMethod_SetFormatId(AH_TAN_METHOD *p_struct, const char *p_src){ assert(p_struct); if (p_struct->formatId) { free(p_struct->formatId); p_struct->formatId=NULL; p_struct->formatId=NULL; } if (p_src) { p_struct->formatId=strdup(p_src); } else { p_struct->formatId=NULL; } } void AH_TanMethod_SetPrompt(AH_TAN_METHOD *p_struct, const char *p_src){ assert(p_struct); if (p_struct->prompt) { free(p_struct->prompt); p_struct->prompt=NULL; p_struct->prompt=NULL; } if (p_src) { p_struct->prompt=strdup(p_src); } else { p_struct->prompt=NULL; } } void AH_TanMethod_SetReturnMaxLen(AH_TAN_METHOD *p_struct, int p_src){ assert(p_struct); p_struct->returnMaxLen=p_src; } void AH_TanMethod_SetMaxActiveLists(AH_TAN_METHOD *p_struct, int p_src){ assert(p_struct); p_struct->maxActiveLists=p_src; } void AH_TanMethod_SetMultiTanAllowed(AH_TAN_METHOD *p_struct, int p_src){ assert(p_struct); p_struct->multiTanAllowed=p_src; } void AH_TanMethod_SetTimeShiftAllowed(AH_TAN_METHOD *p_struct, int p_src){ assert(p_struct); p_struct->timeShiftAllowed=p_src; } void AH_TanMethod_SetTanListMode(AH_TAN_METHOD *p_struct, int p_src){ assert(p_struct); p_struct->tanListMode=p_src; } void AH_TanMethod_SetStornoAllowed(AH_TAN_METHOD *p_struct, int p_src){ assert(p_struct); p_struct->stornoAllowed=p_src; } void AH_TanMethod_SetNeedSmsAccount(AH_TAN_METHOD *p_struct, int p_src){ assert(p_struct); p_struct->needSmsAccount=p_src; } void AH_TanMethod_SetNeedLocalAccount(AH_TAN_METHOD *p_struct, int p_src){ assert(p_struct); p_struct->needLocalAccount=p_src; } void AH_TanMethod_SetNeedChallengeClass(AH_TAN_METHOD *p_struct, int p_src){ assert(p_struct); p_struct->needChallengeClass=p_src; } void AH_TanMethod_SetNeedChallengeAmount(AH_TAN_METHOD *p_struct, int p_src){ assert(p_struct); p_struct->needChallengeAmount=p_src; } void AH_TanMethod_SetChallengeIsStructured(AH_TAN_METHOD *p_struct, int p_src){ assert(p_struct); p_struct->challengeIsStructured=p_src; } void AH_TanMethod_SetInitMode(AH_TAN_METHOD *p_struct, int p_src){ assert(p_struct); p_struct->initMode=p_src; } void AH_TanMethod_SetNeedTanMediumId(AH_TAN_METHOD *p_struct, int p_src){ assert(p_struct); p_struct->needTanMediumId=p_src; } void AH_TanMethod_SetMaxActiveTanMedia(AH_TAN_METHOD *p_struct, int p_src){ assert(p_struct); p_struct->maxActiveTanMedia=p_src; } void AH_TanMethod_SetGvVersion(AH_TAN_METHOD *p_struct, int p_src){ assert(p_struct); p_struct->gvVersion=p_src; } AH_TAN_METHOD_LIST *AH_TanMethod_List_dup(const AH_TAN_METHOD_LIST *p_src) { AH_TAN_METHOD_LIST *p_dest; AH_TAN_METHOD *p_elem; assert(p_src); p_dest=AH_TanMethod_List_new(); p_elem=AH_TanMethod_List_First(p_src); while(p_elem) { AH_TAN_METHOD *p_cpy; p_cpy=AH_TanMethod_dup(p_elem); AH_TanMethod_List_Add(p_cpy, p_dest); p_elem=AH_TanMethod_List_Next(p_elem); } return p_dest; } void AH_TanMethod_ReadDb(AH_TAN_METHOD *p_struct, GWEN_DB_NODE *p_db){ assert(p_struct); /* member "function" */ p_struct->function=GWEN_DB_GetIntValue(p_db, "function", 0, 0); /* member "process" */ p_struct->process=GWEN_DB_GetIntValue(p_db, "process", 0, 0); /* member "methodId" */ if (p_struct->methodId) { free(p_struct->methodId); p_struct->methodId=NULL; p_struct->methodId=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "methodId", 0, NULL); if (s) p_struct->methodId=strdup(s); } /* member "methodName" */ if (p_struct->methodName) { free(p_struct->methodName); p_struct->methodName=NULL; p_struct->methodName=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "methodName", 0, NULL); if (s) p_struct->methodName=strdup(s); } /* member "zkaTanName" */ if (p_struct->zkaTanName) { free(p_struct->zkaTanName); p_struct->zkaTanName=NULL; p_struct->zkaTanName=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "zkaTanName", 0, NULL); if (s) p_struct->zkaTanName=strdup(s); } /* member "zkaTanVersion" */ if (p_struct->zkaTanVersion) { free(p_struct->zkaTanVersion); p_struct->zkaTanVersion=NULL; p_struct->zkaTanVersion=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "zkaTanVersion", 0, NULL); if (s) p_struct->zkaTanVersion=strdup(s); } /* member "tanMaxLen" */ p_struct->tanMaxLen=GWEN_DB_GetIntValue(p_db, "tanMaxLen", 0, 0); /* member "formatId" */ if (p_struct->formatId) { free(p_struct->formatId); p_struct->formatId=NULL; p_struct->formatId=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "formatId", 0, NULL); if (s) p_struct->formatId=strdup(s); } /* member "prompt" */ if (p_struct->prompt) { free(p_struct->prompt); p_struct->prompt=NULL; p_struct->prompt=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "prompt", 0, NULL); if (s) p_struct->prompt=strdup(s); } /* member "returnMaxLen" */ p_struct->returnMaxLen=GWEN_DB_GetIntValue(p_db, "returnMaxLen", 0, 0); /* member "maxActiveLists" */ p_struct->maxActiveLists=GWEN_DB_GetIntValue(p_db, "maxActiveLists", 0, 0); /* member "multiTanAllowed" */ p_struct->multiTanAllowed=GWEN_DB_GetIntValue(p_db, "multiTanAllowed", 0, 0); /* member "timeShiftAllowed" */ p_struct->timeShiftAllowed=GWEN_DB_GetIntValue(p_db, "timeShiftAllowed", 0, 0); /* member "tanListMode" */ p_struct->tanListMode=GWEN_DB_GetIntValue(p_db, "tanListMode", 0, 0); /* member "stornoAllowed" */ p_struct->stornoAllowed=GWEN_DB_GetIntValue(p_db, "stornoAllowed", 0, 0); /* member "needSmsAccount" */ p_struct->needSmsAccount=GWEN_DB_GetIntValue(p_db, "needSmsAccount", 0, 0); /* member "needLocalAccount" */ p_struct->needLocalAccount=GWEN_DB_GetIntValue(p_db, "needLocalAccount", 0, 0); /* member "needChallengeClass" */ p_struct->needChallengeClass=GWEN_DB_GetIntValue(p_db, "needChallengeClass", 0, 0); /* member "needChallengeAmount" */ p_struct->needChallengeAmount=GWEN_DB_GetIntValue(p_db, "needChallengeAmount", 0, 0); /* member "challengeIsStructured" */ p_struct->challengeIsStructured=GWEN_DB_GetIntValue(p_db, "challengeIsStructured", 0, 0); /* member "initMode" */ p_struct->initMode=GWEN_DB_GetIntValue(p_db, "initMode", 0, 0); /* member "needTanMediumId" */ p_struct->needTanMediumId=GWEN_DB_GetIntValue(p_db, "needTanMediumId", 0, 0); /* member "maxActiveTanMedia" */ p_struct->maxActiveTanMedia=GWEN_DB_GetIntValue(p_db, "maxActiveTanMedia", 0, 0); /* member "gvVersion" */ p_struct->gvVersion=GWEN_DB_GetIntValue(p_db, "gvVersion", 0, 0); } int AH_TanMethod_WriteDb(const AH_TAN_METHOD *p_struct, GWEN_DB_NODE *p_db) { int p_rv; assert(p_struct); /* member "function" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "function", p_struct->function); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "process" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "process", p_struct->process); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "methodId" */ if (p_struct->methodId) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "methodId", p_struct->methodId); else { GWEN_DB_DeleteVar(p_db, "methodId"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "methodName" */ if (p_struct->methodName) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "methodName", p_struct->methodName); else { GWEN_DB_DeleteVar(p_db, "methodName"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "zkaTanName" */ if (p_struct->zkaTanName) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "zkaTanName", p_struct->zkaTanName); else { GWEN_DB_DeleteVar(p_db, "zkaTanName"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "zkaTanVersion" */ if (p_struct->zkaTanVersion) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "zkaTanVersion", p_struct->zkaTanVersion); else { GWEN_DB_DeleteVar(p_db, "zkaTanVersion"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "tanMaxLen" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "tanMaxLen", p_struct->tanMaxLen); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "formatId" */ if (p_struct->formatId) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "formatId", p_struct->formatId); else { GWEN_DB_DeleteVar(p_db, "formatId"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "prompt" */ if (p_struct->prompt) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "prompt", p_struct->prompt); else { GWEN_DB_DeleteVar(p_db, "prompt"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "returnMaxLen" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "returnMaxLen", p_struct->returnMaxLen); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "maxActiveLists" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "maxActiveLists", p_struct->maxActiveLists); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "multiTanAllowed" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "multiTanAllowed", p_struct->multiTanAllowed); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "timeShiftAllowed" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "timeShiftAllowed", p_struct->timeShiftAllowed); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "tanListMode" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "tanListMode", p_struct->tanListMode); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "stornoAllowed" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "stornoAllowed", p_struct->stornoAllowed); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "needSmsAccount" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "needSmsAccount", p_struct->needSmsAccount); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "needLocalAccount" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "needLocalAccount", p_struct->needLocalAccount); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "needChallengeClass" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "needChallengeClass", p_struct->needChallengeClass); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "needChallengeAmount" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "needChallengeAmount", p_struct->needChallengeAmount); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "challengeIsStructured" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "challengeIsStructured", p_struct->challengeIsStructured); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "initMode" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "initMode", p_struct->initMode); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "needTanMediumId" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "needTanMediumId", p_struct->needTanMediumId); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "maxActiveTanMedia" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "maxActiveTanMedia", p_struct->maxActiveTanMedia); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "gvVersion" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "gvVersion", p_struct->gvVersion); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } return 0; } AH_TAN_METHOD *AH_TanMethod_fromDb(GWEN_DB_NODE *p_db) { AH_TAN_METHOD *p_struct; p_struct=AH_TanMethod_new(); AH_TanMethod_ReadDb(p_struct, p_db); return p_struct; } int AH_TanMethod_toDb(const AH_TAN_METHOD *p_struct, GWEN_DB_NODE *p_db) { return AH_TanMethod_WriteDb(p_struct, p_db); } /* code headers */ aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/tan/tanmechanism.c0000775000175000017500000001742014663126043022215 00000000000000/*************************************************************************** begin : Sun Jun 02 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "tanmechanism_p.h" #include "tan_chiptan_opt.h" #include "tan_image.h" #include "tan_text.h" #include #include #include GWEN_INHERIT_FUNCTIONS(AH_TAN_MECHANISM) typedef struct { const char *namePattern; int id; } TAN_MAP_ENTRY; static TAN_MAP_ENTRY _zkaNameMap[]= { {"HHD", AB_BANKING_TANMETHOD_TEXT}, {"mobileTAN", AB_BANKING_TANMETHOD_TEXT}, {"photoTAN", AB_BANKING_TANMETHOD_PHOTOTAN}, {"Decoupled", AB_BANKING_TANMETHOD_DECOUPLED}, {NULL, 0} }; static TAN_MAP_ENTRY _methodIdMap[]= { {"smsTAN", AB_BANKING_TANMETHOD_TEXT}, {"iTAN", AB_BANKING_TANMETHOD_TEXT}, {"HHD1.*OPT", AB_BANKING_TANMETHOD_CHIPTAN_OPTIC}, {"HHD1.*USB", AB_BANKING_TANMETHOD_CHIPTAN_USB}, {"HHD1.*QR", AB_BANKING_TANMETHOD_CHIPTAN_QR}, {"Q1S", AB_BANKING_TANMETHOD_CHIPTAN_QR}, {"Decoupled.*", AB_BANKING_TANMETHOD_DECOUPLED}, {NULL, 0} }; static TAN_MAP_ENTRY _methodNameMap[]= { {"*photo*", AB_BANKING_TANMETHOD_PHOTOTAN}, {"chipTAN-QR", AB_BANKING_TANMETHOD_CHIPTAN_QR}, {"Decoupled.*", AB_BANKING_TANMETHOD_DECOUPLED}, {"pushTAN 2.0", AB_BANKING_TANMETHOD_DECOUPLED}, {NULL, 0} }; /* forward declarations */ static int _getTanMethodIdFromString(const char *name, const TAN_MAP_ENTRY *nameMap); static int _getTanMethodIdForTanMethod(const AH_TAN_METHOD *tanMethod); AH_TAN_MECHANISM *AH_TanMechanism_new(const AH_TAN_METHOD *tanMethod, int tanMethodId) { AH_TAN_MECHANISM *tanMechanism; GWEN_NEW_OBJECT(AH_TAN_MECHANISM, tanMechanism); GWEN_INHERIT_INIT(AH_TAN_MECHANISM, tanMechanism); if (tanMethod) tanMechanism->tanMethod=AH_TanMethod_dup(tanMethod); tanMechanism->tanMethodId=tanMethodId; return tanMechanism; } void AH_TanMechanism_free(AH_TAN_MECHANISM *tanMechanism) { if (tanMechanism) { GWEN_INHERIT_FINI(AH_TAN_MECHANISM, tanMechanism) if (tanMechanism->tanMethod) AH_TanMethod_free(tanMechanism->tanMethod); GWEN_FREE_OBJECT(tanMechanism); } } const AH_TAN_METHOD *AH_TanMechanism_GetTanMethod(const AH_TAN_MECHANISM *tanMechanism) { assert(tanMechanism); return tanMechanism->tanMethod; } int AH_TanMechanism_GetTanMethodId(const AH_TAN_MECHANISM *tanMechanism) { assert(tanMechanism); return tanMechanism->tanMethodId; } int AH_TanMechanism_GetTan(AH_TAN_MECHANISM *tanMechanism, AB_USER *u, const char *title, const char *text, const uint8_t *challengePtr, uint32_t challengeLen, char *passwordBuffer, int passwordMinLen, int passwordMaxLen) { assert(tanMechanism); if (tanMechanism->getTanFn) return (tanMechanism->getTanFn)(tanMechanism, u, title, text, challengePtr, challengeLen, passwordBuffer, passwordMinLen, passwordMaxLen); else return GWEN_ERROR_NOT_IMPLEMENTED; } void AH_TanMechanism_SetGetTanFn(AH_TAN_MECHANISM *tanMechanism, AH_TAN_MECHANISM_GETTAN_FN fn) { assert(tanMechanism); tanMechanism->getTanFn=fn; } AH_TAN_MECHANISM *AH_TanMechanism_Factory(const AH_TAN_METHOD *tanMethod, int preselectedId) { int id; AH_TAN_MECHANISM *tanMechanism=NULL; if (preselectedId) { DBG_INFO(AQHBCI_LOGDOMAIN, "Using preselected id %d", preselectedId); id=preselectedId; } else id=_getTanMethodIdForTanMethod(tanMethod); if (id==0) { int idFunction; const char *sZkaName; const char *sMethodId; const char *sMethodName; idFunction=AH_TanMethod_GetFunction(tanMethod); sZkaName=AH_TanMethod_GetZkaTanName(tanMethod); sMethodId=AH_TanMethod_GetMethodId(tanMethod); sMethodName=AH_TanMethod_GetMethodName(tanMethod); DBG_ERROR(AQHBCI_LOGDOMAIN, "No tan mechanism for method %d: zkaName=%s methodId=%s methodName=%s found, trying simple text input.", idFunction, sZkaName?sZkaName:"", sMethodId?sMethodId:"", sMethodName?sMethodName:""); #if 0 if (1) { GWEN_DB_NODE *dbDump; dbDump=GWEN_DB_Group_new("TanMethod"); AH_TanMethod_toDb(tanMethod, dbDump); GWEN_DB_Dump(dbDump, 2); GWEN_DB_Group_free(dbDump); } #endif } switch (id) { case AB_BANKING_TANMETHOD_CHIPTAN_OPTIC: DBG_INFO(AQHBCI_LOGDOMAIN, "Using TAN mechanism \"chipTAN optisch\""); tanMechanism=AH_TanMechanism_ChipTanOpt_new(tanMethod, id); break; case AB_BANKING_TANMETHOD_PHOTOTAN: case AB_BANKING_TANMETHOD_CHIPTAN_QR: DBG_INFO(AQHBCI_LOGDOMAIN, "Using TAN mechanism \"image\""); tanMechanism=AH_TanMechanism_Image_new(tanMethod, id); break; case AB_BANKING_TANMETHOD_CHIPTAN_USB: DBG_INFO(AQHBCI_LOGDOMAIN, "Using TAN mechanism \"chipTAN USB\""); /* USB_TAN */ tanMechanism= AH_TanMechanism_ChipTanUSB_new(tanMethod, id); /* USB_TAN */ break; /* USB_TAN */ case AB_BANKING_TANMETHOD_DECOUPLED: case AB_BANKING_TANMETHOD_CHIPTAN: case AB_BANKING_TANMETHOD_TEXT: DBG_INFO(AQHBCI_LOGDOMAIN, "Using TAN mechanism \"text\""); tanMechanism=AH_TanMechanism_Text_new(tanMethod, id); break; default: DBG_INFO(AQHBCI_LOGDOMAIN, "Defaulting to TAN mechanism \"text\" (id=%d)", id); tanMechanism=AH_TanMechanism_Text_new(tanMethod, id); break; } if (tanMechanism==NULL) { int idFunction; const char *sZkaName; const char *sMethodId; idFunction=AH_TanMethod_GetFunction(tanMethod); sZkaName=AH_TanMethod_GetZkaTanName(tanMethod); sMethodId=AH_TanMethod_GetMethodId(tanMethod); DBG_ERROR(AQHBCI_LOGDOMAIN, "No tan mechanism for method %d: zkaName=%s methodId=%s created (%d).", idFunction, sZkaName?sZkaName:"", sMethodId?sMethodId:"", id); return NULL; } return tanMechanism; } int _getTanMethodIdForTanMethod(const AH_TAN_METHOD *tanMethod) { const char *sName; /* try ZKA name (at least Sparkassen in Hamburg or Lower Saxony dont provide this field in their TAN description */ sName=AH_TanMethod_GetZkaTanName(tanMethod); if (sName && *sName) { int id; DBG_INFO(AQHBCI_LOGDOMAIN, "Searching \"%s\" in ZKA map", sName); id=_getTanMethodIdFromString(sName, _zkaNameMap); if (id>0) return id; } /* try method id */ sName=AH_TanMethod_GetMethodId(tanMethod); if (sName && *sName) { int id; DBG_INFO(AQHBCI_LOGDOMAIN, "Searching \"%s\" in method id map", sName); id=_getTanMethodIdFromString(sName, _methodIdMap); if (id>0) return id; } /* try method name */ sName=AH_TanMethod_GetMethodName(tanMethod); if (sName && *sName) { int id; DBG_INFO(AQHBCI_LOGDOMAIN, "Searching \"%s\" in method name map", sName); id=_getTanMethodIdFromString(sName, _methodNameMap); if (id>0) return id; } return 0; } int _getTanMethodIdFromString(const char *name, const TAN_MAP_ENTRY *nameMap) { const TAN_MAP_ENTRY *currentMapEntry; currentMapEntry=nameMap; while (currentMapEntry->namePattern) { if (-1!=GWEN_Text_ComparePattern(name, currentMapEntry->namePattern, 0)) return currentMapEntry->id; currentMapEntry++; } return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/tan/Makefile.am0000664000175000017500000000254414044534776021445 00000000000000 AM_CFLAGS=-DBUILDING_AQBANKING @visibility_cflags@ AM_CPPFLAGS = -I$(top_srcdir)/src/libs -I$(top_builddir)/src/libs $(gwenhywfar_includes) \ -I$(srcdir)/../.. \ -I$(srcdir)/../msglayer -I$(srcdir)/.. typefiles=tanmethod.xml noinst_LTLIBRARIES=libhbcitan.la noinst_HEADERS=\ tanmethod.h \ tanmethod_p.h \ tanmethod.h \ tanmechanism.h tanmechanism_p.h \ tan_chiptan_opt.h \ tan_text.h \ tan_image.h #iheaderdir=@aqbanking_headerdir_am@/aqhbci #iheader_HEADERS= libhbcitan_la_SOURCES=\ tanmethod.c \ tanmechanism.c \ tan_chiptan_opt.c \ tan_image.c \ tan_text.c EXTRA_DIST=$(typefiles) typefiles: $(typefiles) $(typemaker2_exe) -I $(top_srcdir)/src/libs/aqbanking/typemaker2/c -I $(gwenhywfar_dir)/share/gwenhywfar/typemaker2/c -I $(srcdir) --destfolder="$(srcdir)" -D AQHBCI_API $(typefiles) typedefs: $(typefiles) $(typemaker2_exe) --defs-only -I $(top_srcdir)/src/libs/aqbanking/typemaker2/c -I $(gwenhywfar_dir)/share/gwenhywfar/typemaker2/c -I $(srcdir) --destfolder="$(srcdir)" -D AQHBCI_API $(typefiles) sources: for f in $(libhbcitan_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d sources; \ done cppcheck: for f in $(libhbcitan_la_SOURCES); do \ cppcheck --force $$f ; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/tan/tan_chiptan_opt.h0000775000175000017500000000136514043610745022725 00000000000000/*************************************************************************** begin : Sun Jun 02 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_TAN_MECHANISM_CHIPTAN_OPT_H #define AH_TAN_MECHANISM_CHIPTAN_OPT_H #include "tanmechanism.h" AH_TAN_MECHANISM *AH_TanMechanism_ChipTanOpt_new(const AH_TAN_METHOD *tanMethod, int tanMethodId); AH_TAN_MECHANISM *AH_TanMechanism_ChipTanUSB_new(const AH_TAN_METHOD *tanMethod, int tanMethodId);// USB_TAN #endif aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/tan/tan_text.c0000664000175000017500000000573014043610745021371 00000000000000/*************************************************************************** begin : Tue Jun 04 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "tan_text.h" #include #include #include #include /* forward declarations */ static int _getTan(AH_TAN_MECHANISM *tanMechanism, AB_USER *u, const char *title, const char *text, const uint8_t *challengePtr, uint32_t challengeLen, char *passwordBuffer, int passwordMinLen, int passwordMaxLen); /* implementation */ AH_TAN_MECHANISM *AH_TanMechanism_Text_new(const AH_TAN_METHOD *tanMethod, int tanMethodId) { AH_TAN_MECHANISM *tanMechanism; tanMechanism=AH_TanMechanism_new(tanMethod, tanMethodId); assert(tanMechanism); AH_TanMechanism_SetGetTanFn(tanMechanism, _getTan); return tanMechanism; } int _getTan(AH_TAN_MECHANISM *tanMechanism, AB_USER *u, const char *title, const char *text, const uint8_t *challengePtr, uint32_t challengeLen, char *passwordBuffer, int passwordMinLen, int passwordMaxLen) { const AH_TAN_METHOD *tanMethod; GWEN_DB_NODE *dbMethodParams; GWEN_BUFFER *bufToken; GWEN_DB_NODE *dbTanMethod; int rv; tanMethod=AH_TanMechanism_GetTanMethod(tanMechanism); assert(tanMethod); dbMethodParams=GWEN_DB_Group_new("methodParams"); GWEN_DB_SetIntValue(dbMethodParams, GWEN_DB_FLAGS_OVERWRITE_VARS, "tanMethodId", AH_TanMechanism_GetTanMethodId(tanMechanism)); dbTanMethod=GWEN_DB_GetGroup(dbMethodParams, GWEN_DB_FLAGS_OVERWRITE_GROUPS, "tanMethod"); AH_TanMethod_toDb(tanMethod, dbTanMethod); bufToken=GWEN_Buffer_new(0, 256, 0, 1); AH_User_MkTanName(u, (const char *) challengePtr, bufToken); rv=GWEN_Gui_GetPassword(GWEN_GUI_INPUT_FLAGS_TAN | GWEN_GUI_INPUT_FLAGS_SHOW | GWEN_GUI_INPUT_FLAGS_DIRECT, GWEN_Buffer_GetStart(bufToken), title, text, passwordBuffer, passwordMinLen, passwordMaxLen, GWEN_Gui_PasswordMethod_Text, dbMethodParams, 0); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(bufToken); GWEN_DB_Group_free(dbMethodParams); return rv; } GWEN_Buffer_free(bufToken); GWEN_DB_Group_free(dbMethodParams); return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/tan/tanmechanism_p.h0000664000175000017500000000126314043610745022533 00000000000000/*************************************************************************** begin : Sun Jun 02 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_TAN_MECHANISM_P_H #define AH_TAN_MECHANISM_P_H #include "tanmechanism.h" struct AH_TAN_MECHANISM { GWEN_INHERIT_ELEMENT(AH_TAN_MECHANISM) AH_TAN_METHOD *tanMethod; AH_TAN_MECHANISM_GETTAN_FN getTanFn; int tanMethodId; }; #endif aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/tan/tanmechanism.h0000664000175000017500000000522314043610745022214 00000000000000/*************************************************************************** begin : Sun Jun 02 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_TAN_MECHANISM_H #define AH_TAN_MECHANISM_H #include #ifdef __cplusplus extern "C" { #endif typedef struct AH_TAN_MECHANISM AH_TAN_MECHANISM; GWEN_INHERIT_FUNCTION_DEFS(AH_TAN_MECHANISM) #ifdef __cplusplus } /* __cplusplus */ #endif #include #ifdef __cplusplus extern "C" { #endif /* virtual functions */ typedef int (*AH_TAN_MECHANISM_GETTAN_FN)(AH_TAN_MECHANISM *tanMechanism, AB_USER *u, const char *title, const char *text, const uint8_t *challengePtr, uint32_t challengeLen, char *passwordBuffer, int passwordMinLen, int passwordMaxLen); /** * Select a TAN input mechanism for the given tan method description (or use preselected mechanism). * * @param tanMethod selected TAN method for which to determine the input mechanis to use * @param preselectedId tan mechanism id selected by user (see @ref AB_BANKING_TANMETHOD_TEXT and following) */ AH_TAN_MECHANISM *AH_TanMechanism_Factory(const AH_TAN_METHOD *tanMethod, int preselectedId); AH_TAN_MECHANISM *AH_TanMechanism_new(const AH_TAN_METHOD *tanMethod, int tanMethodId); void AH_TanMechanism_free(AH_TAN_MECHANISM *tanMechanism); const AH_TAN_METHOD *AH_TanMechanism_GetTanMethod(const AH_TAN_MECHANISM *tanMechanism); int AH_TanMechanism_GetTanMethodId(const AH_TAN_MECHANISM *tanMechanism); int AH_TanMechanism_GetTan(AH_TAN_MECHANISM *tanMechanism, AB_USER *u, const char *title, const char *text, const uint8_t *challengePtr, uint32_t challengeLen, char *passwordBuffer, int passwordMinLen, int passwordMaxLen); void AH_TanMechanism_SetGetTanFn(AH_TAN_MECHANISM *tanMechanism, AH_TAN_MECHANISM_GETTAN_FN fn); #ifdef __cplusplus } /* __cplusplus */ #endif #endif aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/tan/tanmethod.h0000664000175000017500000003575515037736055021554 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "tanmethod.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef AH_TAN_METHOD_TANMETHOD_H #define AH_TAN_METHOD_TANMETHOD_H #ifdef __cplusplus extern "C" { #endif /** @page P_AH_TAN_METHOD Structure AH_TAN_METHOD

This page describes the properties of AH_TAN_METHOD.

AH_TAN_METHOD

This group represents a TAN method within AqHBCI. @anchor AH_TAN_METHOD_function

function

Set this property with @ref AH_TanMethod_SetFunction(), get it with @ref AH_TanMethod_GetFunction().

@anchor AH_TAN_METHOD_process

process

Set this property with @ref AH_TanMethod_SetProcess(), get it with @ref AH_TanMethod_GetProcess().

@anchor AH_TAN_METHOD_methodId

methodId

Set this property with @ref AH_TanMethod_SetMethodId(), get it with @ref AH_TanMethod_GetMethodId().

@anchor AH_TAN_METHOD_methodName

methodName

Set this property with @ref AH_TanMethod_SetMethodName(), get it with @ref AH_TanMethod_GetMethodName().

@anchor AH_TAN_METHOD_zkaTanName

zkaTanName

Set this property with @ref AH_TanMethod_SetZkaTanName(), get it with @ref AH_TanMethod_GetZkaTanName().

@anchor AH_TAN_METHOD_zkaTanVersion

zkaTanVersion

Set this property with @ref AH_TanMethod_SetZkaTanVersion(), get it with @ref AH_TanMethod_GetZkaTanVersion().

@anchor AH_TAN_METHOD_tanMaxLen

tanMaxLen

Set this property with @ref AH_TanMethod_SetTanMaxLen(), get it with @ref AH_TanMethod_GetTanMaxLen().

@anchor AH_TAN_METHOD_formatId

formatId

Set this property with @ref AH_TanMethod_SetFormatId(), get it with @ref AH_TanMethod_GetFormatId().

@anchor AH_TAN_METHOD_prompt

prompt

Set this property with @ref AH_TanMethod_SetPrompt(), get it with @ref AH_TanMethod_GetPrompt().

@anchor AH_TAN_METHOD_returnMaxLen

returnMaxLen

Set this property with @ref AH_TanMethod_SetReturnMaxLen(), get it with @ref AH_TanMethod_GetReturnMaxLen().

@anchor AH_TAN_METHOD_maxActiveLists

maxActiveLists

Set this property with @ref AH_TanMethod_SetMaxActiveLists(), get it with @ref AH_TanMethod_GetMaxActiveLists().

@anchor AH_TAN_METHOD_multiTanAllowed

multiTanAllowed

Set this property with @ref AH_TanMethod_SetMultiTanAllowed(), get it with @ref AH_TanMethod_GetMultiTanAllowed().

@anchor AH_TAN_METHOD_timeShiftAllowed

timeShiftAllowed

Set this property with @ref AH_TanMethod_SetTimeShiftAllowed(), get it with @ref AH_TanMethod_GetTimeShiftAllowed().

@anchor AH_TAN_METHOD_tanListMode

tanListMode

Set this property with @ref AH_TanMethod_SetTanListMode(), get it with @ref AH_TanMethod_GetTanListMode().

@anchor AH_TAN_METHOD_stornoAllowed

stornoAllowed

Set this property with @ref AH_TanMethod_SetStornoAllowed(), get it with @ref AH_TanMethod_GetStornoAllowed().

@anchor AH_TAN_METHOD_needSmsAccount

needSmsAccount

Set this property with @ref AH_TanMethod_SetNeedSmsAccount(), get it with @ref AH_TanMethod_GetNeedSmsAccount().

@anchor AH_TAN_METHOD_needLocalAccount

needLocalAccount

Set this property with @ref AH_TanMethod_SetNeedLocalAccount(), get it with @ref AH_TanMethod_GetNeedLocalAccount().

@anchor AH_TAN_METHOD_needChallengeClass

needChallengeClass

Set this property with @ref AH_TanMethod_SetNeedChallengeClass(), get it with @ref AH_TanMethod_GetNeedChallengeClass().

@anchor AH_TAN_METHOD_needChallengeAmount

needChallengeAmount

Set this property with @ref AH_TanMethod_SetNeedChallengeAmount(), get it with @ref AH_TanMethod_GetNeedChallengeAmount().

@anchor AH_TAN_METHOD_challengeIsStructured

challengeIsStructured

Set this property with @ref AH_TanMethod_SetChallengeIsStructured(), get it with @ref AH_TanMethod_GetChallengeIsStructured().

@anchor AH_TAN_METHOD_initMode

initMode

Set this property with @ref AH_TanMethod_SetInitMode(), get it with @ref AH_TanMethod_GetInitMode().

@anchor AH_TAN_METHOD_needTanMediumId

needTanMediumId

Set this property with @ref AH_TanMethod_SetNeedTanMediumId(), get it with @ref AH_TanMethod_GetNeedTanMediumId().

@anchor AH_TAN_METHOD_maxActiveTanMedia

maxActiveTanMedia

Set this property with @ref AH_TanMethod_SetMaxActiveTanMedia(), get it with @ref AH_TanMethod_GetMaxActiveTanMedia().

@anchor AH_TAN_METHOD_gvVersion

gvVersion

Set this property with @ref AH_TanMethod_SetGvVersion(), get it with @ref AH_TanMethod_GetGvVersion().

*/ /* needed system headers */ #include #include #include #include #include /* pre-headers */ #include "aqhbci/aqhbci.h" typedef struct AH_TAN_METHOD AH_TAN_METHOD; GWEN_LIST_FUNCTION_LIB_DEFS(AH_TAN_METHOD, AH_TanMethod, AQHBCI_API) GWEN_LIST2_FUNCTION_LIB_DEFS(AH_TAN_METHOD, AH_TanMethod, AQHBCI_API) GWEN_INHERIT_FUNCTION_LIB_DEFS(AH_TAN_METHOD, AQHBCI_API) /* post-headers */ /** Constructor. */ AQHBCI_API AH_TAN_METHOD *AH_TanMethod_new(void); /** Destructor. */ AQHBCI_API void AH_TanMethod_free(AH_TAN_METHOD *p_struct); AQHBCI_API void AH_TanMethod_Attach(AH_TAN_METHOD *p_struct); AQHBCI_API AH_TAN_METHOD *AH_TanMethod_dup(const AH_TAN_METHOD *p_src); AQHBCI_API AH_TAN_METHOD *AH_TanMethod_copy(AH_TAN_METHOD *p_struct, const AH_TAN_METHOD *p_src); /** Getter. * Use this function to get the member "function" (see @ref AH_TAN_METHOD_function) */ AQHBCI_API int AH_TanMethod_GetFunction(const AH_TAN_METHOD *p_struct); /** Getter. * Use this function to get the member "process" (see @ref AH_TAN_METHOD_process) */ AQHBCI_API int AH_TanMethod_GetProcess(const AH_TAN_METHOD *p_struct); /** Getter. * Use this function to get the member "methodId" (see @ref AH_TAN_METHOD_methodId) */ AQHBCI_API const char *AH_TanMethod_GetMethodId(const AH_TAN_METHOD *p_struct); /** Getter. * Use this function to get the member "methodName" (see @ref AH_TAN_METHOD_methodName) */ AQHBCI_API const char *AH_TanMethod_GetMethodName(const AH_TAN_METHOD *p_struct); /** Getter. * Use this function to get the member "zkaTanName" (see @ref AH_TAN_METHOD_zkaTanName) */ AQHBCI_API const char *AH_TanMethod_GetZkaTanName(const AH_TAN_METHOD *p_struct); /** Getter. * Use this function to get the member "zkaTanVersion" (see @ref AH_TAN_METHOD_zkaTanVersion) */ AQHBCI_API const char *AH_TanMethod_GetZkaTanVersion(const AH_TAN_METHOD *p_struct); /** Getter. * Use this function to get the member "tanMaxLen" (see @ref AH_TAN_METHOD_tanMaxLen) */ AQHBCI_API int AH_TanMethod_GetTanMaxLen(const AH_TAN_METHOD *p_struct); /** Getter. * Use this function to get the member "formatId" (see @ref AH_TAN_METHOD_formatId) */ AQHBCI_API const char *AH_TanMethod_GetFormatId(const AH_TAN_METHOD *p_struct); /** Getter. * Use this function to get the member "prompt" (see @ref AH_TAN_METHOD_prompt) */ AQHBCI_API const char *AH_TanMethod_GetPrompt(const AH_TAN_METHOD *p_struct); /** Getter. * Use this function to get the member "returnMaxLen" (see @ref AH_TAN_METHOD_returnMaxLen) */ AQHBCI_API int AH_TanMethod_GetReturnMaxLen(const AH_TAN_METHOD *p_struct); /** Getter. * Use this function to get the member "maxActiveLists" (see @ref AH_TAN_METHOD_maxActiveLists) */ AQHBCI_API int AH_TanMethod_GetMaxActiveLists(const AH_TAN_METHOD *p_struct); /** Getter. * Use this function to get the member "multiTanAllowed" (see @ref AH_TAN_METHOD_multiTanAllowed) */ AQHBCI_API int AH_TanMethod_GetMultiTanAllowed(const AH_TAN_METHOD *p_struct); /** Getter. * Use this function to get the member "timeShiftAllowed" (see @ref AH_TAN_METHOD_timeShiftAllowed) */ AQHBCI_API int AH_TanMethod_GetTimeShiftAllowed(const AH_TAN_METHOD *p_struct); /** Getter. * Use this function to get the member "tanListMode" (see @ref AH_TAN_METHOD_tanListMode) */ AQHBCI_API int AH_TanMethod_GetTanListMode(const AH_TAN_METHOD *p_struct); /** Getter. * Use this function to get the member "stornoAllowed" (see @ref AH_TAN_METHOD_stornoAllowed) */ AQHBCI_API int AH_TanMethod_GetStornoAllowed(const AH_TAN_METHOD *p_struct); /** Getter. * Use this function to get the member "needSmsAccount" (see @ref AH_TAN_METHOD_needSmsAccount) */ AQHBCI_API int AH_TanMethod_GetNeedSmsAccount(const AH_TAN_METHOD *p_struct); /** Getter. * Use this function to get the member "needLocalAccount" (see @ref AH_TAN_METHOD_needLocalAccount) */ AQHBCI_API int AH_TanMethod_GetNeedLocalAccount(const AH_TAN_METHOD *p_struct); /** Getter. * Use this function to get the member "needChallengeClass" (see @ref AH_TAN_METHOD_needChallengeClass) */ AQHBCI_API int AH_TanMethod_GetNeedChallengeClass(const AH_TAN_METHOD *p_struct); /** Getter. * Use this function to get the member "needChallengeAmount" (see @ref AH_TAN_METHOD_needChallengeAmount) */ AQHBCI_API int AH_TanMethod_GetNeedChallengeAmount(const AH_TAN_METHOD *p_struct); /** Getter. * Use this function to get the member "challengeIsStructured" (see @ref AH_TAN_METHOD_challengeIsStructured) */ AQHBCI_API int AH_TanMethod_GetChallengeIsStructured(const AH_TAN_METHOD *p_struct); /** Getter. * Use this function to get the member "initMode" (see @ref AH_TAN_METHOD_initMode) */ AQHBCI_API int AH_TanMethod_GetInitMode(const AH_TAN_METHOD *p_struct); /** Getter. * Use this function to get the member "needTanMediumId" (see @ref AH_TAN_METHOD_needTanMediumId) */ AQHBCI_API int AH_TanMethod_GetNeedTanMediumId(const AH_TAN_METHOD *p_struct); /** Getter. * Use this function to get the member "maxActiveTanMedia" (see @ref AH_TAN_METHOD_maxActiveTanMedia) */ AQHBCI_API int AH_TanMethod_GetMaxActiveTanMedia(const AH_TAN_METHOD *p_struct); /** Getter. * Use this function to get the member "gvVersion" (see @ref AH_TAN_METHOD_gvVersion) */ AQHBCI_API int AH_TanMethod_GetGvVersion(const AH_TAN_METHOD *p_struct); /** Setter. * Use this function to set the member "function" (see @ref AH_TAN_METHOD_function) */ AQHBCI_API void AH_TanMethod_SetFunction(AH_TAN_METHOD *p_struct, int p_src); /** Setter. * Use this function to set the member "process" (see @ref AH_TAN_METHOD_process) */ AQHBCI_API void AH_TanMethod_SetProcess(AH_TAN_METHOD *p_struct, int p_src); /** Setter. * Use this function to set the member "methodId" (see @ref AH_TAN_METHOD_methodId) */ AQHBCI_API void AH_TanMethod_SetMethodId(AH_TAN_METHOD *p_struct, const char *p_src); /** Setter. * Use this function to set the member "methodName" (see @ref AH_TAN_METHOD_methodName) */ AQHBCI_API void AH_TanMethod_SetMethodName(AH_TAN_METHOD *p_struct, const char *p_src); /** Setter. * Use this function to set the member "zkaTanName" (see @ref AH_TAN_METHOD_zkaTanName) */ AQHBCI_API void AH_TanMethod_SetZkaTanName(AH_TAN_METHOD *p_struct, const char *p_src); /** Setter. * Use this function to set the member "zkaTanVersion" (see @ref AH_TAN_METHOD_zkaTanVersion) */ AQHBCI_API void AH_TanMethod_SetZkaTanVersion(AH_TAN_METHOD *p_struct, const char *p_src); /** Setter. * Use this function to set the member "tanMaxLen" (see @ref AH_TAN_METHOD_tanMaxLen) */ AQHBCI_API void AH_TanMethod_SetTanMaxLen(AH_TAN_METHOD *p_struct, int p_src); /** Setter. * Use this function to set the member "formatId" (see @ref AH_TAN_METHOD_formatId) */ AQHBCI_API void AH_TanMethod_SetFormatId(AH_TAN_METHOD *p_struct, const char *p_src); /** Setter. * Use this function to set the member "prompt" (see @ref AH_TAN_METHOD_prompt) */ AQHBCI_API void AH_TanMethod_SetPrompt(AH_TAN_METHOD *p_struct, const char *p_src); /** Setter. * Use this function to set the member "returnMaxLen" (see @ref AH_TAN_METHOD_returnMaxLen) */ AQHBCI_API void AH_TanMethod_SetReturnMaxLen(AH_TAN_METHOD *p_struct, int p_src); /** Setter. * Use this function to set the member "maxActiveLists" (see @ref AH_TAN_METHOD_maxActiveLists) */ AQHBCI_API void AH_TanMethod_SetMaxActiveLists(AH_TAN_METHOD *p_struct, int p_src); /** Setter. * Use this function to set the member "multiTanAllowed" (see @ref AH_TAN_METHOD_multiTanAllowed) */ AQHBCI_API void AH_TanMethod_SetMultiTanAllowed(AH_TAN_METHOD *p_struct, int p_src); /** Setter. * Use this function to set the member "timeShiftAllowed" (see @ref AH_TAN_METHOD_timeShiftAllowed) */ AQHBCI_API void AH_TanMethod_SetTimeShiftAllowed(AH_TAN_METHOD *p_struct, int p_src); /** Setter. * Use this function to set the member "tanListMode" (see @ref AH_TAN_METHOD_tanListMode) */ AQHBCI_API void AH_TanMethod_SetTanListMode(AH_TAN_METHOD *p_struct, int p_src); /** Setter. * Use this function to set the member "stornoAllowed" (see @ref AH_TAN_METHOD_stornoAllowed) */ AQHBCI_API void AH_TanMethod_SetStornoAllowed(AH_TAN_METHOD *p_struct, int p_src); /** Setter. * Use this function to set the member "needSmsAccount" (see @ref AH_TAN_METHOD_needSmsAccount) */ AQHBCI_API void AH_TanMethod_SetNeedSmsAccount(AH_TAN_METHOD *p_struct, int p_src); /** Setter. * Use this function to set the member "needLocalAccount" (see @ref AH_TAN_METHOD_needLocalAccount) */ AQHBCI_API void AH_TanMethod_SetNeedLocalAccount(AH_TAN_METHOD *p_struct, int p_src); /** Setter. * Use this function to set the member "needChallengeClass" (see @ref AH_TAN_METHOD_needChallengeClass) */ AQHBCI_API void AH_TanMethod_SetNeedChallengeClass(AH_TAN_METHOD *p_struct, int p_src); /** Setter. * Use this function to set the member "needChallengeAmount" (see @ref AH_TAN_METHOD_needChallengeAmount) */ AQHBCI_API void AH_TanMethod_SetNeedChallengeAmount(AH_TAN_METHOD *p_struct, int p_src); /** Setter. * Use this function to set the member "challengeIsStructured" (see @ref AH_TAN_METHOD_challengeIsStructured) */ AQHBCI_API void AH_TanMethod_SetChallengeIsStructured(AH_TAN_METHOD *p_struct, int p_src); /** Setter. * Use this function to set the member "initMode" (see @ref AH_TAN_METHOD_initMode) */ AQHBCI_API void AH_TanMethod_SetInitMode(AH_TAN_METHOD *p_struct, int p_src); /** Setter. * Use this function to set the member "needTanMediumId" (see @ref AH_TAN_METHOD_needTanMediumId) */ AQHBCI_API void AH_TanMethod_SetNeedTanMediumId(AH_TAN_METHOD *p_struct, int p_src); /** Setter. * Use this function to set the member "maxActiveTanMedia" (see @ref AH_TAN_METHOD_maxActiveTanMedia) */ AQHBCI_API void AH_TanMethod_SetMaxActiveTanMedia(AH_TAN_METHOD *p_struct, int p_src); /** Setter. * Use this function to set the member "gvVersion" (see @ref AH_TAN_METHOD_gvVersion) */ AQHBCI_API void AH_TanMethod_SetGvVersion(AH_TAN_METHOD *p_struct, int p_src); AQHBCI_API AH_TAN_METHOD_LIST *AH_TanMethod_List_dup(const AH_TAN_METHOD_LIST *p_src); AQHBCI_API void AH_TanMethod_ReadDb(AH_TAN_METHOD *p_struct, GWEN_DB_NODE *p_db); AQHBCI_API int AH_TanMethod_WriteDb(const AH_TAN_METHOD *p_struct, GWEN_DB_NODE *p_db); AQHBCI_API AH_TAN_METHOD *AH_TanMethod_fromDb(GWEN_DB_NODE *p_db); AQHBCI_API int AH_TanMethod_toDb(const AH_TAN_METHOD *p_struct, GWEN_DB_NODE *p_db); #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/tan/tan_image.c0000664000175000017500000001550414546575650021504 00000000000000/*************************************************************************** begin : Sat Sep 14 2019 copyright : (C) 2023 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "tan_image.h" #include #include #include #include /* ------------------------------------------------------------------------------------------------ * forward declarations * ------------------------------------------------------------------------------------------------ */ static int _getTan(AH_TAN_MECHANISM *tanMechanism, AB_USER *u, const char *title, const char *text, const uint8_t *challengePtr, uint32_t challengeLen, char *passwordBuffer, int passwordMinLen, int passwordMaxLen); static int _extractAndSetMimeTypeAndImageData(const uint8_t *challengePtr, uint32_t challengeLen, GWEN_DB_NODE *dbMethodParams); static int _readTagHeader(const uint8_t **pBufferPointer, int *pBufferLen, int *pTagLen, int tagNum); static void _readTagIntoDbAsString(const uint8_t *p, int tagLen, GWEN_DB_NODE *db, const char *varName); /* ------------------------------------------------------------------------------------------------ * implementations * ------------------------------------------------------------------------------------------------ */ AH_TAN_MECHANISM *AH_TanMechanism_Image_new(const AH_TAN_METHOD *tanMethod, int tanMethodId) { AH_TAN_MECHANISM *tanMechanism; tanMechanism=AH_TanMechanism_new(tanMethod, tanMethodId); assert(tanMechanism); AH_TanMechanism_SetGetTanFn(tanMechanism, _getTan); return tanMechanism; } int _getTan(AH_TAN_MECHANISM *tanMechanism, AB_USER *u, const char *title, const char *text, const uint8_t *challengePtr, uint32_t challengeLen, char *passwordBuffer, int passwordMinLen, int passwordMaxLen) { const AH_TAN_METHOD *tanMethod; tanMethod=AH_TanMechanism_GetTanMethod(tanMechanism); assert(tanMethod); if (challengePtr && challengeLen) { GWEN_BUFFER *bufToken; GWEN_DB_NODE *dbTanMethod; GWEN_DB_NODE *dbMethodParams; int rv; dbMethodParams=GWEN_DB_Group_new("methodParams"); GWEN_DB_SetIntValue(dbMethodParams, GWEN_DB_FLAGS_OVERWRITE_VARS, "tanMethodId", AH_TanMechanism_GetTanMethodId(tanMechanism)); dbTanMethod=GWEN_DB_GetGroup(dbMethodParams, GWEN_DB_FLAGS_OVERWRITE_GROUPS, "tanMethod"); AH_TanMethod_toDb(tanMethod, dbTanMethod); rv=_extractAndSetMimeTypeAndImageData(challengePtr, challengeLen, dbMethodParams); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); GWEN_DB_Group_free(dbMethodParams); return rv; } bufToken=GWEN_Buffer_new(0, 256, 0, 1); AH_User_MkTanName(u, (const char *) challengePtr, bufToken); rv=GWEN_Gui_GetPassword(GWEN_GUI_INPUT_FLAGS_TAN | GWEN_GUI_INPUT_FLAGS_SHOW | GWEN_GUI_INPUT_FLAGS_DIRECT, GWEN_Buffer_GetStart(bufToken), title, text, passwordBuffer, passwordMinLen, passwordMaxLen, GWEN_Gui_PasswordMethod_OpticalHHD, dbMethodParams, 0); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(bufToken); GWEN_DB_Group_free(dbMethodParams); return rv; } GWEN_Buffer_free(bufToken); GWEN_DB_Group_free(dbMethodParams); } else { int rv; rv=GWEN_Gui_GetPassword(GWEN_GUI_INPUT_FLAGS_TAN | GWEN_GUI_INPUT_FLAGS_SHOW | GWEN_GUI_INPUT_FLAGS_DIRECT, "TAN", title, text, passwordBuffer, passwordMinLen, passwordMaxLen, GWEN_Gui_PasswordMethod_Text, NULL, 0); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } } return 0; } int _extractAndSetMimeTypeAndImageData(const uint8_t *challengePtr, uint32_t challengeLen, GWEN_DB_NODE *dbMethodParams) { int len; const uint8_t *p; int tagLen; int rv; /* set bin:imageData, char:mimetype */ p=challengePtr; len=challengeLen; /* read 1st tag: mimetype */ rv=_readTagHeader(&p, &len, &tagLen, 1); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } if (tagLen) { _readTagIntoDbAsString(p, tagLen, dbMethodParams, "mimeType"); p+=tagLen; len-=tagLen; } else { DBG_ERROR(AQHBCI_LOGDOMAIN, "Empty mimetype"); return GWEN_ERROR_NO_DATA; } /* read 2nd tag: image data */ rv=_readTagHeader(&p, &len, &tagLen, 2); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); return rv; } if (tagLen) { GWEN_DB_SetBinValue(dbMethodParams, GWEN_DB_FLAGS_OVERWRITE_VARS, "imageData", p, tagLen); p+=tagLen; len-=tagLen; } else { DBG_ERROR(AQHBCI_LOGDOMAIN, "Empty image data"); return GWEN_ERROR_BAD_DATA; } /* ignore rest if any */ return 0; } int _readTagHeader(const uint8_t **pBufferPointer, int *pBufferLen, int *pTagLen, int tagNum) { int len; const uint8_t *p; int tagLen; len=*pBufferLen; p=*pBufferPointer; if (len<2) { DBG_ERROR(AQHBCI_LOGDOMAIN, "TAG %d: invalid data length (remaining data length: %d)", tagNum, len); return GWEN_ERROR_BAD_DATA; } tagLen=(p[0]<<8)+p[1]; p+=2; len-=2; if (len0; i--) { if (stringValue[i]==32) stringValue[i]=0; else break; } DBG_INFO(AQHBCI_LOGDOMAIN, "%s: \"%s\"", varName, stringValue); GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, varName, stringValue); free(stringValue); } aqbanking-6.6.1/src/libs/plugins/backends/aqhbci/tan/tan_chiptan_opt.c0000775000175000017500000004670714121404717022726 00000000000000/*************************************************************************** begin : Sun Jun 02 2019 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "tan_chiptan_opt.h" #include #include #include #include #include /* for toupper() */ #include /* for USB_TAN */ #include /* for USB_TAN */ /* forward declarations */ static int _readBytesDec(const char *p, int len); static int _readBytesHex(const char *p, int len); static unsigned int _quersumme(unsigned int i); static int _extractDataForLuhnSum(const char *code, GWEN_BUFFER *xbuf); static int _calcLuhnSum(const char *code, int len); static int _calcXorSum(const char *code, int len); static int __translate(const char *code, GWEN_BUFFER *cbuf); static int _translate(const char *code, GWEN_BUFFER *cbuf); static int __translateWithLen(const char *code, GWEN_BUFFER *cbuf, int sizeLen); static int _getTan(AH_TAN_MECHANISM *tanMechanism, AB_USER *u, const char *title, const char *text, const uint8_t *challengePtr, uint32_t challengeLen, char *passwordBuffer, int passwordMinLen, int passwordMaxLen); static int _getTanUSB(AH_TAN_MECHANISM *tanMechanism, AB_USER *u, const char *title, const char *text, const uint8_t *challengePtr, uint32_t challengeLen, char *passwordBuffer, int passwordMinLen, int passwordMaxLen); typedef int(*GetTanfromUSB_GeneratorFn)(unsigned char *HHDCommand, int fullHHD_Len, int *pATC, char *pGeneratedTAN, uint32_t maxTanLen, char *pCardnummber, char *pEndDate, char *IssueDate); /* implementation */ AH_TAN_MECHANISM *AH_TanMechanism_ChipTanUSB_new(const AH_TAN_METHOD *tanMethod, int tanMethodId) { AH_TAN_MECHANISM *tanMechanism; tanMechanism = AH_TanMechanism_new(tanMethod, tanMethodId); assert(tanMechanism); AH_TanMechanism_SetGetTanFn(tanMechanism, _getTanUSB); return tanMechanism; } AH_TAN_MECHANISM *AH_TanMechanism_ChipTanOpt_new(const AH_TAN_METHOD *tanMethod, int tanMethodId) { AH_TAN_MECHANISM *tanMechanism; tanMechanism=AH_TanMechanism_new(tanMethod, tanMethodId); assert(tanMechanism); AH_TanMechanism_SetGetTanFn(tanMechanism, _getTan); return tanMechanism; } int _getTanUSB(AH_TAN_MECHANISM *tanMechanism, AB_USER *u, const char *title, const char *text, const uint8_t *challengePtr, uint32_t challengeLen, char *passwordBuffer, int passwordMinLen, int passwordMaxLen) { int rv; const AH_TAN_METHOD *tanMethod; GWEN_BUFFER *cbuf; tanMethod=AH_TanMechanism_GetTanMethod(tanMechanism); assert(tanMethod); /* translate challenge string to flicker code */ cbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=_translate((const char *) challengePtr, cbuf); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(cbuf); return rv; } else { GWEN_DB_NODE *dbMethodParams; GWEN_BUFFER *bufToken; GWEN_DB_NODE *dbTanMethod; /* USB_TAN specific start */ static char cardPrefix[] = { 0, 0, 0, 0, 1, 0, 0 }; unsigned char HHDCommand[120]; int HHD_Generator_Len; unsigned char *pHHDDest; char *pHHDSrc; int fullHHD_Len; int i; GWEN_PLUGIN_MANAGER *pm; GWEN_PLUGIN *pl; GWEN_LIBLOADER *ll; void *p; int ATC; char Cardnummber[11]; char EndDate[5]; char IssueDate[7]; /* USB_TAN specific end */ #if 0 DBG_ERROR(AQHBCI_LOGDOMAIN, "Will use this challenge:"); GWEN_Buffer_Dump(cbuf, 2); #endif dbMethodParams=GWEN_DB_Group_new("methodParams"); GWEN_DB_SetIntValue(dbMethodParams, GWEN_DB_FLAGS_OVERWRITE_VARS, "tanMethodId", AH_TanMechanism_GetTanMethodId(tanMechanism)); GWEN_DB_SetCharValue(dbMethodParams, GWEN_DB_FLAGS_OVERWRITE_VARS, "challenge", GWEN_Buffer_GetStart(cbuf)); dbTanMethod=GWEN_DB_GetGroup(dbMethodParams, GWEN_DB_FLAGS_OVERWRITE_GROUPS, "tanMethod"); AH_TanMethod_toDb(tanMethod, dbTanMethod); bufToken=GWEN_Buffer_new(0, 256, 0, 1); AH_User_MkTanName(u, (const char *) challengePtr, bufToken); rv=GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Warning, text); /* TODO: hmm, this should probably be changed to a more typesafe way... * Maybe we need to add a virtual function for CryptTokens... */ pm = GWEN_PluginManager_FindPluginManager("ct"); if (pm == 0) { DBG_ERROR(0, "Plugin manager not found"); return GWEN_ERROR_NOT_FOUND; } pl = GWEN_PluginManager_GetPlugin(pm, "chiptanusb"); if (pl == 0) { DBG_ERROR(0, "Plugin not found"); return GWEN_ERROR_NOT_FOUND; } DBG_INFO(0, "Plugin found"); ll = GWEN_Plugin_GetLibLoader(pl); rv = GWEN_LibLoader_Resolve(ll, "GetTanfromUSB_Generator", &p); if (rv<0) { return rv; } /* Generate the binary input for the card */ pHHDDest = &HHDCommand[8]; HHD_Generator_Len = GWEN_Buffer_GetUsedBytes(cbuf) / 2; fullHHD_Len = HHD_Generator_Len + sizeof(cardPrefix) + 1; pHHDSrc = GWEN_Buffer_GetStart(cbuf); memcpy(HHDCommand, cardPrefix, sizeof(cardPrefix)); HHDCommand[sizeof(cardPrefix)] = HHD_Generator_Len; for (i = 0; i < HHD_Generator_Len; i++) { *pHHDDest++ = (unsigned char)_readBytesHex(pHHDSrc, 2); pHHDSrc++; pHHDSrc++; } rv = ((GetTanfromUSB_GeneratorFn)p)(HHDCommand, fullHHD_Len, &ATC, passwordBuffer, passwordMaxLen, &Cardnummber[0], &EndDate[0], &IssueDate[0]); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(bufToken); GWEN_Buffer_free(cbuf); GWEN_DB_Group_free(dbMethodParams); return rv; } GWEN_Buffer_free(bufToken); GWEN_Buffer_free(cbuf); GWEN_DB_Group_free(dbMethodParams); return 0; } } int _getTan(AH_TAN_MECHANISM *tanMechanism, AB_USER *u, const char *title, const char *text, const uint8_t *challengePtr, uint32_t challengeLen, char *passwordBuffer, int passwordMinLen, int passwordMaxLen) { int rv; const AH_TAN_METHOD *tanMethod; GWEN_BUFFER *cbuf; tanMethod=AH_TanMechanism_GetTanMethod(tanMechanism); assert(tanMethod); /* translate challenge string to flicker code */ cbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=_translate((const char *) challengePtr, cbuf); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(cbuf); return rv; } else { GWEN_DB_NODE *dbMethodParams; GWEN_BUFFER *bufToken; GWEN_DB_NODE *dbTanMethod; DBG_ERROR(AQHBCI_LOGDOMAIN, "Will use this challenge:"); GWEN_Buffer_Dump(cbuf, 2); dbMethodParams=GWEN_DB_Group_new("methodParams"); GWEN_DB_SetIntValue(dbMethodParams, GWEN_DB_FLAGS_OVERWRITE_VARS, "tanMethodId", AH_TanMechanism_GetTanMethodId(tanMechanism)); GWEN_DB_SetCharValue(dbMethodParams, GWEN_DB_FLAGS_OVERWRITE_VARS, "challenge", GWEN_Buffer_GetStart(cbuf)); dbTanMethod=GWEN_DB_GetGroup(dbMethodParams, GWEN_DB_FLAGS_OVERWRITE_GROUPS, "tanMethod"); AH_TanMethod_toDb(tanMethod, dbTanMethod); bufToken=GWEN_Buffer_new(0, 256, 0, 1); AH_User_MkTanName(u, (const char *) challengePtr, bufToken); rv=GWEN_Gui_GetPassword(GWEN_GUI_INPUT_FLAGS_TAN | GWEN_GUI_INPUT_FLAGS_SHOW | GWEN_GUI_INPUT_FLAGS_DIRECT, GWEN_Buffer_GetStart(bufToken), title, text, passwordBuffer, passwordMinLen, passwordMaxLen, GWEN_Gui_PasswordMethod_OpticalHHD, dbMethodParams, 0); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(bufToken); GWEN_Buffer_free(cbuf); GWEN_DB_Group_free(dbMethodParams); return rv; } GWEN_Buffer_free(bufToken); GWEN_Buffer_free(cbuf); GWEN_DB_Group_free(dbMethodParams); return 0; } } int _translate(const char *code, GWEN_BUFFER *cbuf) { int rv; DBG_ERROR(AQHBCI_LOGDOMAIN, "HHD: Raw data is [%s]", code); rv=__translate(code, cbuf); if (rv<0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Error translating HHD code (%d)", rv); GWEN_Text_LogString(code, strlen(code), AQHBCI_LOGDOMAIN, GWEN_LoggerLevel_Error); return rv; } return 0; } int __translate(const char *code, GWEN_BUFFER *cbuf) { GWEN_BUFFER *tmpBuf; int rv; tmpBuf=GWEN_Buffer_new(0, 256, 0, 1); DBG_INFO(AQHBCI_LOGDOMAIN, "Trying 3 bytes length"); rv=__translateWithLen(code, tmpBuf, 3); if (rv<0) { GWEN_Buffer_Reset(tmpBuf); DBG_INFO(AQHBCI_LOGDOMAIN, "Trying 2 bytes length"); rv=__translateWithLen(code, tmpBuf, 2); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "Invalid challenge data (%d)", rv); GWEN_Buffer_free(tmpBuf); return rv; } } GWEN_Buffer_AppendBuffer(cbuf, tmpBuf); GWEN_Buffer_free(tmpBuf); return rv; } int __translateWithLen(const char *code, GWEN_BUFFER *cbuf, int sizeLen) { unsigned int totalLength; /*handle total length */ unsigned int inLenAndFlags; unsigned int inLen; unsigned int outLenAndFlags; unsigned int outLen; unsigned int codeLen; /* preset bit masks for HHD 1.4 */ unsigned int maskLen = 0x3f; unsigned int maskAscFlag = 0x40; unsigned int maskCtlFlag = 0x80; int rv; GWEN_BUFFER *xbuf; char numbuf[16]; uint32_t cBufStartPos; uint32_t cBufEndPos; unsigned int checkSum; assert(code); codeLen=strlen(code); xbuf=GWEN_Buffer_new(0, 256, 0, 1); /* read length */ rv=_readBytesDec(code, sizeLen); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(xbuf); return rv; } totalLength=(unsigned int) rv; if ((totalLength+sizeLen)>codeLen) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Total length exceeds length of given code (%d+%d > %d)", totalLength, sizeLen, codeLen); GWEN_Buffer_free(xbuf); return GWEN_ERROR_BAD_DATA; } code+=sizeLen; /* translate startCode (length is in hex) */ rv=_readBytesHex(code, 2); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(xbuf); return rv; } inLenAndFlags=(unsigned int) rv; inLen=inLenAndFlags & maskLen; code+=2; outLen=(inLen+1)/2; outLenAndFlags=outLen | (inLenAndFlags & maskCtlFlag); snprintf(numbuf, sizeof(numbuf)-1, "%02x", outLenAndFlags); numbuf[sizeof(numbuf)-1]=0; GWEN_Buffer_AppendString(xbuf, numbuf); /* copy control bytes, if necessary */ if (inLenAndFlags & maskCtlFlag) { unsigned int ctrl=0; do { /* control byte(s) follow (HHD1.4) */ rv=_readBytesHex(code, 2); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(xbuf); return rv; } ctrl=(unsigned int) rv; /* write to output buffer */ snprintf(numbuf, sizeof(numbuf)-1, "%02x", ctrl); numbuf[sizeof(numbuf)-1]=0; GWEN_Buffer_AppendString(xbuf, numbuf); code+=2; } while (ctrl & maskCtlFlag); } else { DBG_ERROR(AQHBCI_LOGDOMAIN, "no control bytes fallback to HHD 1.3.2"); maskLen = 0xf; maskAscFlag = 0x10; } if (inLen) { GWEN_Buffer_AppendBytes(xbuf, code, inLen); if (inLen % 2) /* fill with "F" if necessary */ GWEN_Buffer_AppendByte(xbuf, 'F'); } code+=inLen; /* read DE's */ while (*code) { /* input length is in dec usually no AscFlag for DE's is provided */ rv=_readBytesDec(code, 2); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(xbuf); return rv; } inLenAndFlags=(unsigned int) rv; inLen=inLenAndFlags & maskLen; code+=2; /* so we have to check whether we need to switch to ASC */ if ((inLenAndFlags & maskAscFlag)==0) { int i; for (i=0; i'9') { /* contains something other than digits, use ascii encoding */ DBG_ERROR(AQHBCI_LOGDOMAIN, "Switched to ASCII"); inLenAndFlags|=maskAscFlag; break; } } } /* write to outbuffer */ if (inLenAndFlags & maskAscFlag) { /* ascii */ outLen=inLen; outLenAndFlags=outLen | maskAscFlag; /* add encoding flag to length (bit 6 or 4) */ snprintf(numbuf, sizeof(numbuf)-1, "%02x", outLenAndFlags); numbuf[sizeof(numbuf)-1]=0; GWEN_Buffer_AppendString(xbuf, numbuf); if (inLen) /* hex encode data */ GWEN_Text_ToHexBuffer(code, inLen, xbuf, 0, 0, 0); code+=inLen; } else { /* bcd, pack 2 digits into 1 Byte */ outLen=(inLen+1)/2; outLenAndFlags=outLen; snprintf(numbuf, sizeof(numbuf)-1, "%02x", outLenAndFlags); numbuf[sizeof(numbuf)-1]=0; GWEN_Buffer_AppendString(xbuf, numbuf); if (inLen) { /* data is bcd, just copy */ GWEN_Buffer_AppendBytes(xbuf, code, inLen); if (inLen % 2) /* fill with "F" if necessary */ GWEN_Buffer_AppendByte(xbuf, 'F'); } code+=inLen; } } /* while */ /* cbuf starts here */ cBufStartPos=GWEN_Buffer_GetPos(cbuf); /* calculate full length (payload plus checksums) */ outLen=(GWEN_Buffer_GetUsedBytes(xbuf)+2+1)/2; snprintf(numbuf, sizeof(numbuf)-1, "%02x", outLen); numbuf[sizeof(numbuf)-1]=0; /* add length to outbuffer */ GWEN_Buffer_AppendString(cbuf, numbuf); /* add translated buffer to output buffer */ GWEN_Buffer_AppendBuffer(cbuf, xbuf); /* cbuf ends here */ cBufEndPos=GWEN_Buffer_GetPos(cbuf); /* get payload for luhn sum */ GWEN_Buffer_Reset(xbuf); rv=_extractDataForLuhnSum(GWEN_Buffer_GetStart(cbuf)+cBufStartPos, xbuf); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(xbuf); return rv; } /* calculate luhn sum */ rv=_calcLuhnSum(GWEN_Buffer_GetStart(xbuf), GWEN_Buffer_GetUsedBytes(xbuf)); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(xbuf); return rv; } checkSum=(unsigned int) rv; /* add luhn sum */ if (checkSum>9) checkSum+=7; checkSum+='0'; GWEN_Buffer_AppendByte(cbuf, checkSum); /* calculate XOR sum */ rv=_calcXorSum(GWEN_Buffer_GetStart(cbuf)+cBufStartPos, cBufEndPos-cBufStartPos); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(xbuf); return rv; } checkSum=(unsigned int) rv; /* add XOR sum */ if (checkSum>9) checkSum+=7; checkSum+='0'; GWEN_Buffer_AppendByte(cbuf, checkSum); /* finish */ GWEN_Buffer_free(xbuf); return 0; } int _readBytesDec(const char *p, int len) { int r=0; int i; const char *pSave; pSave=p; for (i=0; i'9') { DBG_ERROR(AQHBCI_LOGDOMAIN, "Bad char in data (no decimal digit), pos=%d, byte=%02x", i, c); GWEN_Text_LogString(pSave, len, AQHBCI_LOGDOMAIN, GWEN_LoggerLevel_Error); return GWEN_ERROR_INVALID; } c-='0'; r*=10; r+=c; p++; } return r; } int _readBytesHex(const char *p, int len) { unsigned int r=0; int i; for (i=0; i='0' && c<='9') || (c>='A' && c<='F')) { c-='0'; if (c>9) c-=7; r*=16; r+=c; p++; } else { DBG_ERROR(AQHBCI_LOGDOMAIN, "Bad char in data (no hexadecimal digit)"); return GWEN_ERROR_INVALID; } } return (int) r; } unsigned int _quersumme(unsigned int i) { unsigned int qs=0; while (i) { qs+=i % 10; i/=10; } return qs; } int _extractDataForLuhnSum(const char *code, GWEN_BUFFER *xbuf) { int rv; unsigned int len; unsigned int i=0; unsigned int LSandFlags; unsigned int numCtrlBytes; unsigned int moreCtrlBytes; unsigned int numBytes; /* preset bit masks for HHD 1.4 */ unsigned int maskLen = 0x3f; /* read LC */ rv=_readBytesHex(code, 2); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d) at [%s]", rv, code); return rv; } len=((unsigned int) rv); code+=2; if ((strlen(code)+2) len) { DBG_INFO(AQHBCI_LOGDOMAIN, "try to read past the end of code (%d) at [%s]", v, code); return GWEN_ERROR_INVALID; } GWEN_Buffer_AppendBytes(xbuf, code, v*2); code+=v*2; i+=v+1; } return 0; } int _calcLuhnSum(const char *code, int len) { int i; int sum=0; int next; int dif; if (len % 2) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Invalid number of bytes in payload (%d)", len); return GWEN_ERROR_INVALID; } for (i=0; i>4) & 0xf)) + (_quersumme(2*(v & 0xf))); code+=2; } next=10*((sum+9)/10); dif=next-sum; return (unsigned int) dif; } int _calcXorSum(const char *code, int len) { int i; int sum=0; for (i=0; i This group represents a TAN method within AqHBCI. AH_TAN_METHOD AH_TanMethod tanmethod with_db with_list1 with_list2 with_inherit with_refcount
aqhbci/aqhbci.h
public public public own const dup const public own const dup const public own const dup const public own const dup const public public own const dup const public own const dup const public public public public public public public public public public public public public public public
aqbanking-6.6.1/src/libs/plugins/backends/aqpaypal/0000755000175000017500000000000015037736164017257 500000000000000aqbanking-6.6.1/src/libs/plugins/backends/aqpaypal/provider_credentials.h0000664000175000017500000000144114214726437023557 00000000000000/*************************************************************************** begin : Sat Dec 01 2018 copyright : (C) 2022 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AQPAYPAL_PROVIDER_CREDENTIALS_H #define AQPAYPAL_PROVIDER_CREDENTIALS_H #include #include int APY_Provider_ReadUserApiSecrets(AB_PROVIDER *pro, const AB_USER *u, GWEN_BUFFER *secbuf); int APY_Provider_WriteUserApiSecrets(AB_PROVIDER *pro, const AB_USER *u, const char *sec); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqpaypal/provider_request.c0000664000175000017500000002023114546575650022752 00000000000000/*************************************************************************** begin : Sat May 08 2010 copyright : (C) 2022 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "aqpaypal/provider_l.h" #include "aqpaypal/user_l.h" #include #include #include #include static GWEN_HTTP_SESSION *_setupHttpSession(AB_PROVIDER *pro, AB_USER *u); static void _logToFile(const char *fileName, const char *direction, const char *jobName, const char *ptr, uint32_t len); static GWEN_DB_NODE *_parseAndCheckResponse(AB_PROVIDER *pro, const char *recvdData); static int _parseResponse(AB_PROVIDER *pro, const char *s, GWEN_DB_NODE *db); GWEN_DB_NODE *APY_Provider_SendRequestParseResponse(AB_PROVIDER *pro, AB_USER *u, const char *requestString, const char *jobName) { GWEN_HTTP_SESSION *sess; GWEN_BUFFER *tbuf; int rv; GWEN_DB_NODE *dbResponse; sess=_setupHttpSession(pro, u); if (sess==NULL) { DBG_ERROR(AQPAYPAL_LOGDOMAIN, "Could not create http session for user [%s]", AB_User_GetUserId(u)); return NULL; } /* init session */ rv=GWEN_HttpSession_Init(sess); if (rv<0) { DBG_INFO(AQPAYPAL_LOGDOMAIN, "here (%d)", rv); GWEN_HttpSession_free(sess); return NULL; } if (getenv("AQPAYPAL_LOG_COMM")) _logToFile("paypal.log", "Sending", jobName, requestString, strlen(requestString)); /* send request */ rv=GWEN_HttpSession_SendPacket(sess, "POST", (const uint8_t *) requestString, strlen(requestString)); if (rv<0) { DBG_INFO(AQPAYPAL_LOGDOMAIN, "here (%d)", rv); GWEN_HttpSession_Fini(sess); GWEN_HttpSession_free(sess); return NULL; } /* get response */ tbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_HttpSession_RecvPacket(sess, tbuf); if (rv<0 || rv<200 || rv>299) { DBG_INFO(AQPAYPAL_LOGDOMAIN, "here (%d)", rv); GWEN_HttpSession_Fini(sess); GWEN_Buffer_free(tbuf); GWEN_HttpSession_free(sess); return NULL; } if (getenv("AQPAYPAL_LOG_COMM")) _logToFile("paypal.log", "Received", jobName, GWEN_Buffer_GetStart(tbuf), GWEN_Buffer_GetUsedBytes(tbuf)); /* deinit (ignore result because it isn't important) */ GWEN_HttpSession_Fini(sess); GWEN_HttpSession_free(sess); /* parse response */ dbResponse=_parseAndCheckResponse(pro, GWEN_Buffer_GetStart(tbuf)); if (dbResponse==NULL) { DBG_INFO(AQPAYPAL_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); return NULL; } return dbResponse; } int APY_Provider_SetupUrlString(AB_PROVIDER *pro, AB_USER *u, GWEN_BUFFER *tbuf) { const char *s; s=APY_User_GetApiUserId(u); if (!(s && *s)) { DBG_ERROR(AQPAYPAL_LOGDOMAIN, "Missing user id"); return GWEN_ERROR_INVALID; } GWEN_Buffer_AppendString(tbuf, "user="); GWEN_Text_EscapeToBuffer(s, tbuf); s=APY_User_GetApiPassword(u); if (!(s && *s)) { DBG_ERROR(AQPAYPAL_LOGDOMAIN, "Missing API password"); return GWEN_ERROR_INVALID; } GWEN_Buffer_AppendString(tbuf, "&pwd="); GWEN_Text_EscapeToBuffer(s, tbuf); s=APY_User_GetApiSignature(u); if (!(s && *s)) { DBG_ERROR(AQPAYPAL_LOGDOMAIN, "Missing API signature"); return GWEN_ERROR_INVALID; } GWEN_Buffer_AppendString(tbuf, "&signature="); GWEN_Text_EscapeToBuffer(s, tbuf); GWEN_Buffer_AppendString(tbuf, "&version="); GWEN_Text_EscapeToBuffer(AQPAYPAL_API_VER, tbuf); return 0; } GWEN_HTTP_SESSION *_setupHttpSession(AB_PROVIDER *pro, AB_USER *u) { GWEN_HTTP_SESSION *sess; int vmajor; int vminor; sess=AB_HttpSession_new(pro, u, APY_User_GetServerUrl(u), "https", 443); if (sess==NULL) { DBG_ERROR(AQPAYPAL_LOGDOMAIN, "Could not create http session for user [%s]", AB_User_GetUserId(u)); return NULL; } vmajor=APY_User_GetHttpVMajor(u); vminor=APY_User_GetHttpVMinor(u); if (vmajor==0 && vminor==0) { vmajor=1; vminor=0; } GWEN_HttpSession_SetHttpVMajor(sess, vmajor); GWEN_HttpSession_SetHttpVMinor(sess, vminor); GWEN_HttpSession_SetHttpContentType(sess, "application/x-www-form-urlencoded"); return sess; } void _logToFile(const char *fileName, const char *direction, const char *jobName, const char *ptr, uint32_t len) { FILE *f; f=fopen(fileName, "a+"); if (f) { fprintf(f, "\n============================================\n"); fprintf(f, "%s (%s)\n", direction?direction:"", jobName?jobName:""); if (ptr && len>0) { if (1!=fwrite(ptr, len, 1, f)) { DBG_INFO(AQPAYPAL_LOGDOMAIN, "here (%d: %s)", errno, strerror(errno)); fclose(f); } else { if (fclose(f)) { DBG_INFO(AQPAYPAL_LOGDOMAIN, "here (%d: %s)", errno, strerror(errno)); } } } else { fprintf(f, "Empty data.\n"); if (fclose(f)) { DBG_INFO(AQPAYPAL_LOGDOMAIN, "here (%d: %s)", errno, strerror(errno)); } } } } GWEN_DB_NODE *_parseAndCheckResponse(AB_PROVIDER *pro, const char *recvdData) { GWEN_DB_NODE *dbResponse; int rv; const char *s; dbResponse=GWEN_DB_Group_new("response"); rv=_parseResponse(pro, recvdData, dbResponse); #if 1 if (getenv("AQPAYPAL_LOG_COMM")) { static int debugCounter=0; char namebuf[64]; snprintf(namebuf, sizeof(namebuf)-1, "paypal-%02x.db", debugCounter++); GWEN_DB_WriteFile(dbResponse, namebuf, GWEN_DB_FLAGS_DEFAULT); } #endif if (rv<0) { DBG_INFO(AQPAYPAL_LOGDOMAIN, "here (%d)", rv); GWEN_DB_Group_free(dbResponse); return NULL; } /* check result */ s=GWEN_DB_GetCharValue(dbResponse, "ACK", 0, NULL); if (s && *s) { if (strcasecmp(s, "Success")==0 || strcasecmp(s, "SuccessWithWarning")==0) { DBG_INFO(AQPAYPAL_LOGDOMAIN, "Success"); } else { DBG_INFO(AQPAYPAL_LOGDOMAIN, "No positive response from server"); GWEN_DB_Group_free(dbResponse); return NULL; } } else { DBG_INFO(AQPAYPAL_LOGDOMAIN, "No ACK response from server"); GWEN_DB_Group_free(dbResponse); return NULL; } return dbResponse; } int _parseResponse(AB_PROVIDER *pro, const char *s, GWEN_DB_NODE *db) { /* read vars */ while (*s) { GWEN_BUFFER *bName; GWEN_BUFFER *bValue; const char *p; GWEN_DB_NODE *dbT; bName=GWEN_Buffer_new(0, 256, 0, 1); bValue=GWEN_Buffer_new(0, 256, 0, 1); p=s; while (*p && *p!='&' && *p!='=') p++; if (p!=s) GWEN_Buffer_AppendBytes(bName, s, (p-s)); s=p; if (*p=='=') { s++; p=s; while (*p && *p!='&') p++; if (p!=s) GWEN_Buffer_AppendBytes(bValue, s, (p-s)); s=p; } dbT=db; if (strncasecmp(GWEN_Buffer_GetStart(bName), "L_ERRORCODE", 11)!=0 && strncasecmp(GWEN_Buffer_GetStart(bName), "L_SHORTMESSAGE", 14)!=0 && strncasecmp(GWEN_Buffer_GetStart(bName), "L_LONGMESSAGE", 13)!=0 && strncasecmp(GWEN_Buffer_GetStart(bName), "L_SEVERITYCODE", 14)!=0 && strncasecmp(GWEN_Buffer_GetStart(bName), "SHIPTOSTREET2", 13)!=0) { int i; i=GWEN_Buffer_GetUsedBytes(bName)-1; if (i>0) { char *t; t=GWEN_Buffer_GetStart(bName)+i; while (i && isdigit(*t)) { i--; t--; } if (i>0) { t++; if (*t) { dbT=GWEN_DB_GetGroup(db, GWEN_DB_FLAGS_DEFAULT, t); *t=0; } } } } /* store variable/value pair */ if (strlen(GWEN_Buffer_GetStart(bName))) { GWEN_BUFFER *xbuf; xbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Text_UnescapeToBufferTolerant(GWEN_Buffer_GetStart(bValue), xbuf); GWEN_DB_SetCharValue(dbT, GWEN_DB_FLAGS_DEFAULT, GWEN_Buffer_GetStart(bName), GWEN_Buffer_GetStart(xbuf)); GWEN_Buffer_free(xbuf); } GWEN_Buffer_free(bValue); GWEN_Buffer_free(bName); if (*s!='&') break; s++; } return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqpaypal/user_p.h0000664000175000017500000000172114043610745020640 00000000000000/*************************************************************************** begin : Sat May 08 2010 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AQPAYPAL_USER_P_H #define AQPAYPAL_USER_P_H #include "user_l.h" #include typedef struct APY_USER APY_USER; struct APY_USER { char *serverUrl; char *apiUserId; char *apiPassword; char *apiSignature; int httpVMajor; int httpVMinor; AB_USER_READFROMDB_FN readFromDbFn; AB_USER_WRITETODB_FN writeToDbFn; }; static void GWENHYWFAR_CB APY_User_freeData(void *bp, void *p); int APY_User_ReadFromDb(AB_USER *u, GWEN_DB_NODE *db); int APY_User_WriteToDb(const AB_USER *u, GWEN_DB_NODE *db); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqpaypal/provider_accspec.h0000664000175000017500000000131214214726437022660 00000000000000/*************************************************************************** begin : Sun Dec 02 2018 copyright : (C) 2022 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AQPAYPAL_PROVIDER_ACCSPEC_H #define AQPAYPAL_PROVIDER_ACCSPEC_H #include #include #include int APY_Provider_UpdateAccountSpec(AB_PROVIDER *pro, AB_ACCOUNT_SPEC *as, int doLock); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqpaypal/provider.c0000664000175000017500000001500414214726437021175 00000000000000/*************************************************************************** begin : Sat May 08 2010 copyright : (C) 2022 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include #include "aqpaypal/provider_accspec.h" #include "aqpaypal/provider_credentials.h" #include "aqpaypal/provider_request.h" #include "aqpaypal/provider_getstm.h" #include "aqpaypal/provider_getbalance.h" #include "aqpaypal/provider_sendcmd.h" #include "aqpaypal/provider_update.h" #include "aqpaypal/provider_p.h" #include "aqpaypal/user_l.h" #include "aqpaypal/control/control_l.h" #include "aqpaypal/dlg_newuser_l.h" #include "aqpaypal/dlg_edituser_l.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #define I18N(msg) GWEN_I18N_Translate(PACKAGE, msg) /*#define DEBUG_PAYPAL */ GWEN_INHERIT(AB_PROVIDER, APY_PROVIDER) static void GWENHYWFAR_CB _providerFreeData(void *bp, void *p); static int _providerInit(AB_PROVIDER *pro, GWEN_DB_NODE *dbData); static int _providerFini(AB_PROVIDER *pro, GWEN_DB_NODE *dbData); static AB_USER *_createUserObject(AB_PROVIDER *pro); static GWEN_DIALOG *_getNewUserDialog(AB_PROVIDER *pro, int i); static GWEN_DIALOG *_getEditUserDialog(AB_PROVIDER *pro, AB_USER *u); AB_PROVIDER *APY_Provider_new(AB_BANKING *ab) { AB_PROVIDER *pro; APY_PROVIDER *xp; pro=AB_Provider_new(ab, APY_PROVIDER_NAME); GWEN_NEW_OBJECT(APY_PROVIDER, xp); GWEN_INHERIT_SETDATA(AB_PROVIDER, APY_PROVIDER, pro, xp, _providerFreeData); AB_Provider_SetInitFn(pro, _providerInit); AB_Provider_SetFiniFn(pro, _providerFini); AB_Provider_SetCreateUserObjectsFn(pro, _createUserObject); AB_Provider_SetUpdateAccountSpecFn(pro, APY_Provider_UpdateAccountSpec); AB_Provider_SetControlFn(pro, APY_Control); AB_Provider_SetSendCommandsFn(pro, APY_Provider_SendCommands); AB_Provider_SetGetNewUserDialogFn(pro, _getNewUserDialog); AB_Provider_SetGetEditUserDialogFn(pro, _getEditUserDialog); AB_Provider_AddFlags(pro, AB_PROVIDER_FLAGS_HAS_EDITUSER_DIALOG | AB_PROVIDER_FLAGS_HAS_NEWUSER_DIALOG); return pro; } void GWENHYWFAR_CB _providerFreeData(void *bp, void *p) { APY_PROVIDER *xp; xp=(APY_PROVIDER *) p; GWEN_FREE_OBJECT(xp); } int _providerInit(AB_PROVIDER *pro, GWEN_DB_NODE *dbData) { APY_PROVIDER *dp; const char *logLevelName; uint32_t currentVersion; uint32_t lastVersion; assert(pro); dp=GWEN_INHERIT_GETDATA(AB_PROVIDER, APY_PROVIDER, pro); assert(dp); if (!GWEN_Logger_IsOpen(AQPAYPAL_LOGDOMAIN)) { GWEN_Logger_Open(AQPAYPAL_LOGDOMAIN, "aqpaypal", 0, GWEN_LoggerType_Console, GWEN_LoggerFacility_User); } logLevelName=getenv("AQPAYPAL_LOGLEVEL"); if (logLevelName) { GWEN_LOGGER_LEVEL ll; ll=GWEN_Logger_Name2Level(logLevelName); if (ll!=GWEN_LoggerLevel_Unknown) { GWEN_Logger_SetLevel(AQPAYPAL_LOGDOMAIN, ll); DBG_WARN(AQPAYPAL_LOGDOMAIN, "Overriding loglevel for AqPAYPAL with \"%s\"", logLevelName); } else { DBG_ERROR(AQPAYPAL_LOGDOMAIN, "Unknown loglevel \"%s\"", logLevelName); } } /* check whether we need to update */ currentVersion= (AQBANKING_VERSION_MAJOR<<24) | (AQBANKING_VERSION_MINOR<<16) | (AQBANKING_VERSION_PATCHLEVEL<<8) | AQBANKING_VERSION_BUILD; lastVersion=GWEN_DB_GetIntValue(dbData, "lastVersion", 0, 0); if (lastVersion&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/libs/plugins/backends/aqpaypal ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/distri.m4 $(top_srcdir)/m4/gwenhywfar.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/os.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = aqpaypal.xml CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libaqpaypal_la_DEPENDENCIES = control/libpaypalcontrol.la am_libaqpaypal_la_OBJECTS = user.lo provider.lo provider_accspec.lo \ provider_credentials.lo provider_request.lo provider_getstm.lo \ provider_getbalance.lo provider_sendcmd.lo provider_update.lo \ dlg_newuser.lo dlg_edituser.lo dlg_editsecret.lo libaqpaypal_la_OBJECTS = $(am_libaqpaypal_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/dlg_editsecret.Plo \ ./$(DEPDIR)/dlg_edituser.Plo ./$(DEPDIR)/dlg_newuser.Plo \ ./$(DEPDIR)/provider.Plo ./$(DEPDIR)/provider_accspec.Plo \ ./$(DEPDIR)/provider_credentials.Plo \ ./$(DEPDIR)/provider_getbalance.Plo \ ./$(DEPDIR)/provider_getstm.Plo \ ./$(DEPDIR)/provider_request.Plo \ ./$(DEPDIR)/provider_sendcmd.Plo \ ./$(DEPDIR)/provider_update.Plo ./$(DEPDIR)/user.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libaqpaypal_la_SOURCES) DIST_SOURCES = $(libaqpaypal_la_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(dlgdatadir)" "$(DESTDIR)$(plugindir)" DATA = $(dlgdata_DATA) $(plugin_DATA) HEADERS = $(noinst_HEADERS) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir distdir-am am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/aqpaypal.xml.in \ $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ADD_ACLOCAL_FLAGS = @ADD_ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AQBANKING_CLI_VERSION_STRING = @AQBANKING_CLI_VERSION_STRING@ AQBANKING_FINTS_VERSION_STRING = @AQBANKING_FINTS_VERSION_STRING@ AQBANKING_SO_AGE = @AQBANKING_SO_AGE@ AQBANKING_SO_CURRENT = @AQBANKING_SO_CURRENT@ AQBANKING_SO_EFFECTIVE = @AQBANKING_SO_EFFECTIVE@ AQBANKING_SO_REVISION = @AQBANKING_SO_REVISION@ AQBANKING_VERSION_BUILD = @AQBANKING_VERSION_BUILD@ AQBANKING_VERSION_FULL_STRING = @AQBANKING_VERSION_FULL_STRING@ AQBANKING_VERSION_MAJOR = @AQBANKING_VERSION_MAJOR@ AQBANKING_VERSION_MINOR = @AQBANKING_VERSION_MINOR@ AQBANKING_VERSION_PATCHLEVEL = @AQBANKING_VERSION_PATCHLEVEL@ AQBANKING_VERSION_RELEASE_STRING = @AQBANKING_VERSION_RELEASE_STRING@ AQBANKING_VERSION_STRING = @AQBANKING_VERSION_STRING@ AQBANKING_VERSION_TAG = @AQBANKING_VERSION_TAG@ AQEBICS_CFLAGS = @AQEBICS_CFLAGS@ AQEBICS_LIBS = @AQEBICS_LIBS@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATETIME = @DATETIME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_EXCLUDE_PATTERNS = @DOXYGEN_EXCLUDE_PATTERNS@ DOXYGEN_FILE_PATTERNS = @DOXYGEN_FILE_PATTERNS@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENGUI_GTK2_CFLAGS = @GWENGUI_GTK2_CFLAGS@ GWENGUI_GTK2_LIBS = @GWENGUI_GTK2_LIBS@ GWENHYWFAR_MINIMUM_VERSION = @GWENHYWFAR_MINIMUM_VERSION@ HAVE_GWENGUI_GTK2 = @HAVE_GWENGUI_GTK2@ HAVE_I18N = @HAVE_I18N@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIBXSLT_CFLAGS = @LIBXSLT_CFLAGS@ LIBXSLT_LIBS = @LIBXSLT_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_SUPPORTS_QT = @MSGFMT_SUPPORTS_QT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ TUTORIALS = @TUTORIALS@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XMLMERGE = @XMLMERGE@ XMLSEC_CFLAGS = @XMLSEC_CFLAGS@ XMLSEC_LIBS = @XMLSEC_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ aqbanking_backends = @aqbanking_backends@ aqbanking_cfg_searchdir = @aqbanking_cfg_searchdir@ aqbanking_data_searchdir = @aqbanking_data_searchdir@ aqbanking_headerdir = @aqbanking_headerdir@ aqbanking_headerdir_am = @aqbanking_headerdir_am@ aqbanking_includes = @aqbanking_includes@ aqbanking_internal_libs = @aqbanking_internal_libs@ aqbanking_ldflags = @aqbanking_ldflags@ aqbanking_libs = @aqbanking_libs@ aqbanking_locale_searchdir = @aqbanking_locale_searchdir@ aqbanking_modules = @aqbanking_modules@ aqbanking_pkgdatadir = @aqbanking_pkgdatadir@ aqbanking_plugin_searchdir = @aqbanking_plugin_searchdir@ aqbanking_plugindir = @aqbanking_plugindir@ aqbanking_plugins_backends_dirs = @aqbanking_plugins_backends_dirs@ aqbanking_plugins_backends_libs = @aqbanking_plugins_backends_libs@ aqbanking_plugins_bankinfo_dirs = @aqbanking_plugins_bankinfo_dirs@ aqbanking_plugins_bankinfo_libs = @aqbanking_plugins_bankinfo_libs@ aqbanking_plugins_imexporters_dirs = @aqbanking_plugins_imexporters_dirs@ aqbanking_plugins_imexporters_libs = @aqbanking_plugins_imexporters_libs@ aqbanking_plugins_parsers_dirs = @aqbanking_plugins_parsers_dirs@ aqbanking_symlinkdir = @aqbanking_symlinkdir@ aqbanking_sys_is_windows = @aqbanking_sys_is_windows@ aqbankingpp_modules = @aqbankingpp_modules@ aqebics_datadir = @aqebics_datadir@ aqebics_includes = @aqebics_includes@ aqebics_internal_libs = @aqebics_internal_libs@ aqebics_ldflags = @aqebics_ldflags@ aqebics_libs = @aqebics_libs@ aqfints_datadir = @aqfints_datadir@ aqhbci_datadir = @aqhbci_datadir@ aqhbci_includes = @aqhbci_includes@ aqhbci_internal_libs = @aqhbci_internal_libs@ aqhbci_ldflags = @aqhbci_ldflags@ aqhbci_libs = @aqhbci_libs@ aqofxconnect_includes = @aqofxconnect_includes@ aqofxconnect_internal_libs = @aqofxconnect_internal_libs@ aqofxconnect_libs = @aqofxconnect_libs@ aqpaypal_includes = @aqpaypal_includes@ aqpaypal_internal_libs = @aqpaypal_internal_libs@ aqpaypal_libs = @aqpaypal_libs@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gmp_libs = @gmp_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_dir = @gwenhywfar_dir@ gwenhywfar_has_crypt = @gwenhywfar_has_crypt@ gwenhywfar_headers = @gwenhywfar_headers@ gwenhywfar_includes = @gwenhywfar_includes@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_plugins = @gwenhywfar_plugins@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ typemaker2_exe = @typemaker2_exe@ visibility_cflags = @visibility_cflags@ with_aqebics = @with_aqebics@ with_aqhbci = @with_aqhbci@ SUBDIRS = control AM_CPPFLAGS = -I$(top_srcdir)/src/libs -I$(top_builddir)/src/libs $(gwenhywfar_includes) -I$(srcdir)/.. AM_CFLAGS = -DBUILDING_AQBANKING @visibility_cflags@ #iheaderdir=${includedir}/aqpaypal #iheader_HEADERS= plugindir = $(aqbanking_plugindir)/providers plugin_DATA = aqpaypal.xml noinst_HEADERS = \ aqpaypal.h \ provider.h \ provider_accspec.h \ provider_credentials.h \ provider_request.h \ provider_getstm.h \ provider_getbalance.h \ provider_sendcmd.h \ provider_update.h \ user.h \ aqpaypal_l.h \ provider_l.h provider_p.h \ user_p.h user_l.h \ dlg_newuser_p.h dlg_newuser_l.h \ dlg_edituser_p.h dlg_edituser_l.h \ dlg_editsecret_p.h dlg_editsecret_l.h # library noinst_LTLIBRARIES = libaqpaypal.la libaqpaypal_la_LIBADD = \ control/libpaypalcontrol.la libaqpaypal_la_SOURCES = \ user.c \ provider.c \ provider_accspec.c \ provider_credentials.c \ provider_request.c \ provider_getstm.c \ provider_getbalance.c \ provider_sendcmd.c \ provider_update.c \ dlg_newuser.c \ dlg_edituser.c \ dlg_editsecret.c dlgdatadir = $(aqbanking_pkgdatadir)/backends/aqpaypal/dialogs dlgdata_DATA = \ dlg_newuser.dlg \ dlg_edituser.dlg \ dlg_editsecret.dlg EXTRA_DIST = aqpaypal.xml.in $(dlgdata_DATA) $(dlgimage_DATA) all: all-recursive .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libs/plugins/backends/aqpaypal/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libs/plugins/backends/aqpaypal/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): aqpaypal.xml: $(top_builddir)/config.status $(srcdir)/aqpaypal.xml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libaqpaypal.la: $(libaqpaypal_la_OBJECTS) $(libaqpaypal_la_DEPENDENCIES) $(EXTRA_libaqpaypal_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libaqpaypal_la_OBJECTS) $(libaqpaypal_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dlg_editsecret.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dlg_edituser.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dlg_newuser.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/provider.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/provider_accspec.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/provider_credentials.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/provider_getbalance.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/provider_getstm.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/provider_request.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/provider_sendcmd.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/provider_update.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/user.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-dlgdataDATA: $(dlgdata_DATA) @$(NORMAL_INSTALL) @list='$(dlgdata_DATA)'; test -n "$(dlgdatadir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(dlgdatadir)'"; \ $(MKDIR_P) "$(DESTDIR)$(dlgdatadir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(dlgdatadir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(dlgdatadir)" || exit $$?; \ done uninstall-dlgdataDATA: @$(NORMAL_UNINSTALL) @list='$(dlgdata_DATA)'; test -n "$(dlgdatadir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(dlgdatadir)'; $(am__uninstall_files_from_dir) install-pluginDATA: $(plugin_DATA) @$(NORMAL_INSTALL) @list='$(plugin_DATA)'; test -n "$(plugindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(plugindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(plugindir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(plugindir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(plugindir)" || exit $$?; \ done uninstall-pluginDATA: @$(NORMAL_UNINSTALL) @list='$(plugin_DATA)'; test -n "$(plugindir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(plugindir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(dlgdatadir)" "$(DESTDIR)$(plugindir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-recursive -rm -f ./$(DEPDIR)/dlg_editsecret.Plo -rm -f ./$(DEPDIR)/dlg_edituser.Plo -rm -f ./$(DEPDIR)/dlg_newuser.Plo -rm -f ./$(DEPDIR)/provider.Plo -rm -f ./$(DEPDIR)/provider_accspec.Plo -rm -f ./$(DEPDIR)/provider_credentials.Plo -rm -f ./$(DEPDIR)/provider_getbalance.Plo -rm -f ./$(DEPDIR)/provider_getstm.Plo -rm -f ./$(DEPDIR)/provider_request.Plo -rm -f ./$(DEPDIR)/provider_sendcmd.Plo -rm -f ./$(DEPDIR)/provider_update.Plo -rm -f ./$(DEPDIR)/user.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dlgdataDATA install-pluginDATA install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f ./$(DEPDIR)/dlg_editsecret.Plo -rm -f ./$(DEPDIR)/dlg_edituser.Plo -rm -f ./$(DEPDIR)/dlg_newuser.Plo -rm -f ./$(DEPDIR)/provider.Plo -rm -f ./$(DEPDIR)/provider_accspec.Plo -rm -f ./$(DEPDIR)/provider_credentials.Plo -rm -f ./$(DEPDIR)/provider_getbalance.Plo -rm -f ./$(DEPDIR)/provider_getstm.Plo -rm -f ./$(DEPDIR)/provider_request.Plo -rm -f ./$(DEPDIR)/provider_sendcmd.Plo -rm -f ./$(DEPDIR)/provider_update.Plo -rm -f ./$(DEPDIR)/user.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-dlgdataDATA uninstall-pluginDATA .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ am--depfiles check check-am clean clean-generic clean-libtool \ clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am \ install-dlgdataDATA install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-pluginDATA install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs installdirs-am \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \ uninstall-dlgdataDATA uninstall-pluginDATA .PRECIOUS: Makefile sources: for d in $(SUBDIRS); do \ $(MAKE) -C $$d sources; \ done for f in $(dlgdata_DATA); do \ echo $(subdir)/$$f >>$(top_srcdir)/dlgsources; \ done for f in $(plugin_DATA); do \ echo $(subdir)/$$f >>$(top_srcdir)/pdsources; \ done for f in $(libaqpaypal_la_SOURCES) $(INCLUDED_SOURCEFILES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done built_sources: cppcheck: for f in $(libaqpaypal_la_SOURCES); do \ cppcheck --force $$f ; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done typefiles: typedefs: # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: aqbanking-6.6.1/src/libs/plugins/backends/aqpaypal/dlg_editsecret_p.h0000664000175000017500000000210414043610745022637 00000000000000/*************************************************************************** begin : Thu Aug 19 2010 copyright : (C) 2010 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQPAYPAL_DLG_OFX_SPECIAL_P_H #define AQPAYPAL_DLG_OFX_SPECIAL_P_H #include "dlg_editsecret_l.h" typedef struct APY_EDITSECRET_DIALOG APY_EDITSECRET_DIALOG; struct APY_EDITSECRET_DIALOG { AB_BANKING *banking; char *apiUserId; char *apiPassword; char *apiSignature; }; void GWENHYWFAR_CB APY_EditSecretDialog_FreeData(void *bp, void *p); int GWENHYWFAR_CB APY_EditSecretDialog_SignalHandler(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqpaypal/user.h0000664000175000017500000000205114043610745020316 00000000000000/*************************************************************************** begin : Sat May 08 2010 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AQPAYPAL_USER_H #define AQPAYPAL_USER_H #include #include const char *APY_User_GetServerUrl(const AB_USER *u); void APY_User_SetServerUrl(AB_USER *u, const char *s); /** * This function sets the given secrets and writes a new secrets file. */ int APY_User_SetApiSecrets(AB_USER *u, const char *password, const char *signature, const char *userId); int APY_User_GetHttpVMajor(const AB_USER *u); void APY_User_SetHttpVMajor(const AB_USER *u, int i); int APY_User_GetHttpVMinor(const AB_USER *u); void APY_User_SetHttpVMinor(const AB_USER *u, int i); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqpaypal/dlg_edituser.c0000664000175000017500000004407714214726437022031 00000000000000/*************************************************************************** begin : Tue Aug 03 2010 copyright : (C) 2010 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "dlg_edituser_p.h" #include "aqpaypal/provider_l.h" #include "aqpaypal/provider_credentials.h" #include "dlg_editsecret_l.h" #include "aqbanking/i18n_l.h" #include #include #include #include #include #include #include #include #include #include #define DIALOG_MINWIDTH 400 #define DIALOG_MINHEIGHT 200 GWEN_INHERIT(GWEN_DIALOG, APY_EDITUSER_DIALOG) GWEN_DIALOG *APY_EditUserDialog_new(AB_PROVIDER *pro, AB_USER *u, int doLock) { GWEN_DIALOG *dlg; APY_EDITUSER_DIALOG *xdlg; const char *s; dlg=GWEN_Dialog_CreateAndLoadWithPath("apy_edituser", AB_PM_LIBNAME, AB_PM_DATADIR, "aqbanking/backends/aqpaypal/dialogs/dlg_edituser.dlg"); if (dlg==NULL) { DBG_ERROR(AQPAYPAL_LOGDOMAIN, "Could not create dialog \"apy_edituser\"."); return NULL; } GWEN_NEW_OBJECT(APY_EDITUSER_DIALOG, xdlg); GWEN_INHERIT_SETDATA(GWEN_DIALOG, APY_EDITUSER_DIALOG, dlg, xdlg, APY_EditUserDialog_FreeData); GWEN_Dialog_SetSignalHandler(dlg, APY_EditUserDialog_SignalHandler); xdlg->provider=pro; xdlg->banking=AB_Provider_GetBanking(pro); /* preset */ xdlg->doLock=doLock; xdlg->user=u; s=AB_User_GetUserName(u); if (s && *s) xdlg->userName=strdup(s); else xdlg->userName=NULL; s=AB_User_GetUserId(u); if (s && *s) xdlg->userId=strdup(s); else xdlg->userId=NULL; s=AB_User_GetCustomerId(u); if (s && *s) xdlg->customerId=strdup(s); else xdlg->customerId=NULL; s=APY_User_GetServerUrl(u); if (!(s && *s)) xdlg->url=strdup("https://api-3t.paypal.com/nvp"); else xdlg->url=strdup(s); /* done */ return dlg; } void GWENHYWFAR_CB APY_EditUserDialog_FreeData(void *bp, void *p) { APY_EDITUSER_DIALOG *xdlg; xdlg=(APY_EDITUSER_DIALOG *) p; free(xdlg->apiUserId); free(xdlg->apiPassword); free(xdlg->apiSignature); free(xdlg->userName); free(xdlg->userId); free(xdlg->url); GWEN_FREE_OBJECT(xdlg); } AB_USER *APY_EditUserDialog_GetUser(const GWEN_DIALOG *dlg) { APY_EDITUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, APY_EDITUSER_DIALOG, dlg); assert(xdlg); return xdlg->user; } const char *APY_EditUserDialog_GetApiUserId(const GWEN_DIALOG *dlg) { APY_EDITUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, APY_EDITUSER_DIALOG, dlg); assert(xdlg); return xdlg->apiUserId; } void APY_EditUserDialog_SetApiUserId(GWEN_DIALOG *dlg, const char *s) { APY_EDITUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, APY_EDITUSER_DIALOG, dlg); assert(xdlg); free(xdlg->apiUserId); if (s) xdlg->apiUserId=strdup(s); else xdlg->apiUserId=NULL; } const char *APY_EditUserDialog_GetApiPassword(const GWEN_DIALOG *dlg) { APY_EDITUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, APY_EDITUSER_DIALOG, dlg); assert(xdlg); return xdlg->apiPassword; } void APY_EditUserDialog_SetApiPassword(GWEN_DIALOG *dlg, const char *s) { APY_EDITUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, APY_EDITUSER_DIALOG, dlg); assert(xdlg); free(xdlg->apiPassword); if (s) xdlg->apiPassword=strdup(s); else xdlg->apiPassword=NULL; } const char *APY_EditUserDialog_GetApiSignature(const GWEN_DIALOG *dlg) { APY_EDITUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, APY_EDITUSER_DIALOG, dlg); assert(xdlg); return xdlg->apiSignature; } void APY_EditUserDialog_SetApiSignature(GWEN_DIALOG *dlg, const char *s) { APY_EDITUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, APY_EDITUSER_DIALOG, dlg); assert(xdlg); free(xdlg->apiSignature); if (s) xdlg->apiSignature=strdup(s); else xdlg->apiSignature=NULL; } const char *APY_EditUserDialog_GetUserName(const GWEN_DIALOG *dlg) { APY_EDITUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, APY_EDITUSER_DIALOG, dlg); assert(xdlg); return xdlg->userName; } void APY_EditUserDialog_SetUserName(GWEN_DIALOG *dlg, const char *s) { APY_EDITUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, APY_EDITUSER_DIALOG, dlg); assert(xdlg); free(xdlg->userName); if (s) xdlg->userName=strdup(s); else xdlg->userName=NULL; } const char *APY_EditUserDialog_GetUserId(const GWEN_DIALOG *dlg) { APY_EDITUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, APY_EDITUSER_DIALOG, dlg); assert(xdlg); return xdlg->userId; } void APY_EditUserDialog_SetUserId(GWEN_DIALOG *dlg, const char *s) { APY_EDITUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, APY_EDITUSER_DIALOG, dlg); assert(xdlg); free(xdlg->userId); if (s) xdlg->userId=strdup(s); else xdlg->userId=NULL; } const char *APY_EditUserDialog_GetUrl(const GWEN_DIALOG *dlg) { APY_EDITUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, APY_EDITUSER_DIALOG, dlg); assert(xdlg); return xdlg->url; } void APY_EditUserDialog_SetUrl(GWEN_DIALOG *dlg, const char *s) { APY_EDITUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, APY_EDITUSER_DIALOG, dlg); assert(xdlg); free(xdlg->url); if (s) xdlg->url=strdup(s); else xdlg->url=NULL; } uint32_t APY_EditUserDialog_GetFlags(const GWEN_DIALOG *dlg) { APY_EDITUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, APY_EDITUSER_DIALOG, dlg); assert(xdlg); return xdlg->flags; } void APY_EditUserDialog_SetFlags(GWEN_DIALOG *dlg, uint32_t fl) { APY_EDITUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, APY_EDITUSER_DIALOG, dlg); assert(xdlg); xdlg->flags=fl; } void APY_EditUserDialog_AddFlags(GWEN_DIALOG *dlg, uint32_t fl) { APY_EDITUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, APY_EDITUSER_DIALOG, dlg); assert(xdlg); xdlg->flags&=~fl; } void APY_EditUserDialog_SubFlags(GWEN_DIALOG *dlg, uint32_t fl) { APY_EDITUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, APY_EDITUSER_DIALOG, dlg); assert(xdlg); xdlg->flags&=~fl; } void APY_EditUserDialog_Init(GWEN_DIALOG *dlg) { APY_EDITUSER_DIALOG *xdlg; GWEN_DB_NODE *dbPrefs; int i; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, APY_EDITUSER_DIALOG, dlg); assert(xdlg); dbPrefs=GWEN_Dialog_GetPreferences(dlg); GWEN_Dialog_SetCharProperty(dlg, "", GWEN_DialogProperty_Title, 0, I18N("Edit Paypal User"), 0); if (xdlg->userName) GWEN_Dialog_SetCharProperty(dlg, "wiz_username_edit", GWEN_DialogProperty_Value, 0, xdlg->userName, 0); if (xdlg->userId) GWEN_Dialog_SetCharProperty(dlg, "wiz_userid_edit", GWEN_DialogProperty_Value, 0, xdlg->userId, 0); if (xdlg->url) GWEN_Dialog_SetCharProperty(dlg, "wiz_url_edit", GWEN_DialogProperty_Value, 0, xdlg->url, 0); /* read width */ i=GWEN_DB_GetIntValue(dbPrefs, "dialog_width", 0, -1); if (i>=DIALOG_MINWIDTH) GWEN_Dialog_SetIntProperty(dlg, "", GWEN_DialogProperty_Width, 0, i, 0); /* read height */ i=GWEN_DB_GetIntValue(dbPrefs, "dialog_height", 0, -1); if (i>=DIALOG_MINHEIGHT) GWEN_Dialog_SetIntProperty(dlg, "", GWEN_DialogProperty_Height, 0, i, 0); } void APY_EditUserDialog_Fini(GWEN_DIALOG *dlg) { APY_EDITUSER_DIALOG *xdlg; int i; GWEN_DB_NODE *dbPrefs; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, APY_EDITUSER_DIALOG, dlg); assert(xdlg); dbPrefs=GWEN_Dialog_GetPreferences(dlg); /* store dialog width */ i=GWEN_Dialog_GetIntProperty(dlg, "", GWEN_DialogProperty_Width, 0, -1); GWEN_DB_SetIntValue(dbPrefs, GWEN_DB_FLAGS_OVERWRITE_VARS, "dialog_width", i); /* store dialog height */ i=GWEN_Dialog_GetIntProperty(dlg, "", GWEN_DialogProperty_Height, 0, -1); GWEN_DB_SetIntValue(dbPrefs, GWEN_DB_FLAGS_OVERWRITE_VARS, "dialog_height", i); } int APY_EditUserDialog_fromGui(GWEN_DIALOG *dlg, AB_USER *u, int quiet) { APY_EDITUSER_DIALOG *xdlg; const char *s; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, APY_EDITUSER_DIALOG, dlg); assert(xdlg); s=GWEN_Dialog_GetCharProperty(dlg, "wiz_username_edit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) { GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(tbuf, s); GWEN_Text_CondenseBuffer(tbuf); if (u) APY_EditUserDialog_SetUserName(dlg, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } else { DBG_INFO(AQPAYPAL_LOGDOMAIN, "Missing user name"); return GWEN_ERROR_NO_DATA; } s=GWEN_Dialog_GetCharProperty(dlg, "wiz_userid_edit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) { GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(tbuf, s); GWEN_Text_CondenseBuffer(tbuf); if (u) APY_EditUserDialog_SetUserId(dlg, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } else { DBG_INFO(AQPAYPAL_LOGDOMAIN, "Missing user id"); return GWEN_ERROR_NO_DATA; } s=GWEN_Dialog_GetCharProperty(dlg, "wiz_url_edit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) { GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(tbuf, s); GWEN_Text_CondenseBuffer(tbuf); if (u) APY_EditUserDialog_SetUrl(dlg, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } else { DBG_INFO(AQPAYPAL_LOGDOMAIN, "Missing URL"); return GWEN_ERROR_NO_DATA; } return 0; } int APY_EditUserDialog_HandleActivatedOk(GWEN_DIALOG *dlg) { APY_EDITUSER_DIALOG *xdlg; int rv; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, APY_EDITUSER_DIALOG, dlg); assert(xdlg); rv=APY_EditUserDialog_fromGui(dlg, NULL, 0); if (rv<0) { return GWEN_DialogEvent_ResultHandled; } if (xdlg->doLock) { int rv; rv=AB_Provider_BeginExclUseUser(xdlg->provider, xdlg->user); if (rv<0) { DBG_INFO(AQPAYPAL_LOGDOMAIN, "here (%d)", rv); GWEN_Gui_MessageBox(GWEN_GUI_MSG_FLAGS_SEVERITY_NORMAL | GWEN_GUI_MSG_FLAGS_TYPE_ERROR | GWEN_GUI_MSG_FLAGS_CONFIRM_B1, I18N("Error"), I18N("Unable to lock user. Maybe already in use?"), I18N("Dismiss"), NULL, NULL, 0); return GWEN_DialogEvent_ResultHandled; } } APY_EditUserDialog_fromGui(dlg, xdlg->user, 1); AB_User_SetUserName(xdlg->user, xdlg->userName); AB_User_SetUserId(xdlg->user, xdlg->userId); AB_User_SetCustomerId(xdlg->user, xdlg->userId); AB_User_SetCountry(xdlg->user, "de"); AB_User_SetBankCode(xdlg->user, "PAYPAL"); if (xdlg->doLock) { int rv; rv=AB_Provider_EndExclUseUser(xdlg->provider, xdlg->user, 0); if (rv<0) { DBG_INFO(AQPAYPAL_LOGDOMAIN, "here (%d)", rv); GWEN_Gui_MessageBox(GWEN_GUI_MSG_FLAGS_SEVERITY_NORMAL | GWEN_GUI_MSG_FLAGS_TYPE_ERROR | GWEN_GUI_MSG_FLAGS_CONFIRM_B1, I18N("Error"), I18N("Unable to unlock user."), I18N("Dismiss"), NULL, NULL, 0); return GWEN_DialogEvent_ResultHandled; } } return GWEN_DialogEvent_ResultAccept; } int APY_EditUserDialog_HandleActivatedSecret(GWEN_DIALOG *dlg) { APY_EDITUSER_DIALOG *xdlg; GWEN_DIALOG *dlg2; int rv; AB_USER *u; GWEN_BUFFER *xbuf, *tbuf; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, APY_EDITUSER_DIALOG, dlg); assert(xdlg); u=xdlg->user; dlg2=APY_EditSecretDialog_new(xdlg->banking); if (dlg2==NULL) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Could not create dialog"); return GWEN_DialogEvent_ResultHandled; } xbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=APY_Provider_ReadUserApiSecrets(AB_User_GetProvider(u), u, xbuf); if (rv<0) { DBG_INFO(AQPAYPAL_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(xbuf); return rv; } else { char *t; char *t2=NULL; GWEN_BUFFER *sbuf1; GWEN_BUFFER *sbuf2; GWEN_BUFFER *sbuf3; t=strchr(GWEN_Buffer_GetStart(xbuf), ':'); if (t) { *(t++)=0; t2=strchr(t, ':'); if (t2) { *(t2++)=0; } } sbuf1=GWEN_Buffer_new(0, 256, 0, 1); sbuf2=GWEN_Buffer_new(0, 256, 0, 1); sbuf3=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Text_UnescapeToBufferTolerant(GWEN_Buffer_GetStart(xbuf), sbuf1); if (t) { GWEN_Text_UnescapeToBufferTolerant(t, sbuf2); if (t2) { GWEN_Text_UnescapeToBufferTolerant(t2, sbuf3); } } APY_EditSecretDialog_SetApiUserId(dlg2, GWEN_Buffer_GetStart(sbuf3)); APY_EditSecretDialog_SetApiPassword(dlg2, GWEN_Buffer_GetStart(sbuf1)); APY_EditSecretDialog_SetApiSignature(dlg2, GWEN_Buffer_GetStart(sbuf2)); GWEN_Buffer_free(xbuf); GWEN_Buffer_free(sbuf3); GWEN_Buffer_free(sbuf2); GWEN_Buffer_free(sbuf1); } rv=GWEN_Gui_ExecDialog(dlg2, 0); if (rv==0) { /* rejected */ DBG_INFO(AQPAYPAL_LOGDOMAIN, "Rejected"); GWEN_Dialog_free(dlg2); return GWEN_DialogEvent_ResultHandled; } else { DBG_INFO(AQPAYPAL_LOGDOMAIN, "Accepted"); tbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Text_EscapeToBuffer(APY_EditSecretDialog_GetApiPassword(dlg2), tbuf); GWEN_Buffer_AppendByte(tbuf, ':'); GWEN_Text_EscapeToBuffer(APY_EditSecretDialog_GetApiSignature(dlg2), tbuf); GWEN_Buffer_AppendByte(tbuf, ':'); GWEN_Text_EscapeToBuffer(APY_EditSecretDialog_GetApiUserId(dlg2), tbuf); rv=APY_Provider_WriteUserApiSecrets(AB_User_GetProvider(u), u, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); if (rv<0) { DBG_INFO(AQPAYPAL_LOGDOMAIN, "here (%d)", rv); return rv; } } GWEN_Dialog_free(dlg2); return GWEN_DialogEvent_ResultHandled; } int APY_EditUserDialog_GetSecretPageData(GWEN_DIALOG *dlg) { APY_EDITUSER_DIALOG *xdlg; const char *s; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, APY_EDITUSER_DIALOG, dlg); assert(xdlg); fprintf(stderr, "\n>>>> GetSecretPageData #1\n"); s=GWEN_Dialog_GetCharProperty(dlg, "wiz_apiuserid_edit", GWEN_DialogProperty_Value, 0, NULL); fprintf(stderr, "\n>>>> GetSecretPageData #2%s\n", s); if (s && *s) APY_EditUserDialog_SetApiUserId(dlg, s); else { DBG_INFO(AQPAYPAL_LOGDOMAIN, "Missing API User ID"); return GWEN_ERROR_NO_DATA; } fprintf(stderr, "\n>>>> GetSecretPageData #3\n"); s=GWEN_Dialog_GetCharProperty(dlg, "wiz_apipass_edit", GWEN_DialogProperty_Value, 0, NULL); fprintf(stderr, "\n>>>> GetSecretPageData #4\n"); if (s && *s) APY_EditUserDialog_SetApiPassword(dlg, s); else { DBG_INFO(AQPAYPAL_LOGDOMAIN, "Missing API Password"); return GWEN_ERROR_NO_DATA; } s=GWEN_Dialog_GetCharProperty(dlg, "wiz_apisig_edit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) APY_EditUserDialog_SetApiSignature(dlg, s); else { DBG_INFO(AQPAYPAL_LOGDOMAIN, "Missing API Signature"); return GWEN_ERROR_NO_DATA; } return 0; } int APY_EditUserDialog_HandleActivated(GWEN_DIALOG *dlg, const char *sender) { DBG_ERROR(0, "Activated: %s", sender); if (strcasecmp(sender, "okButton")==0) return APY_EditUserDialog_HandleActivatedOk(dlg); else if (strcasecmp(sender, "abortButton")==0) return GWEN_DialogEvent_ResultReject; else if (strcasecmp(sender, "wiz_secret_button")==0) { APY_EditUserDialog_HandleActivatedSecret(dlg); } else if (strcasecmp(sender, "wiz_help_button")==0) { /* TODO: open a help dialog */ } return GWEN_DialogEvent_ResultNotHandled; } int GWENHYWFAR_CB APY_EditUserDialog_SignalHandler(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender) { APY_EDITUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, APY_EDITUSER_DIALOG, dlg); assert(xdlg); switch (t) { case GWEN_DialogEvent_TypeInit: APY_EditUserDialog_Init(dlg); return GWEN_DialogEvent_ResultHandled; case GWEN_DialogEvent_TypeFini: APY_EditUserDialog_Fini(dlg); return GWEN_DialogEvent_ResultHandled; case GWEN_DialogEvent_TypeValueChanged: return GWEN_DialogEvent_ResultHandled; case GWEN_DialogEvent_TypeActivated: return APY_EditUserDialog_HandleActivated(dlg, sender); case GWEN_DialogEvent_TypeEnabled: case GWEN_DialogEvent_TypeDisabled: case GWEN_DialogEvent_TypeClose: case GWEN_DialogEvent_TypeLast: default: return GWEN_DialogEvent_ResultNotHandled; } return GWEN_DialogEvent_ResultNotHandled; } aqbanking-6.6.1/src/libs/plugins/backends/aqpaypal/provider_p.h0000664000175000017500000000130014214726437021513 00000000000000/*************************************************************************** begin : Sat May 08 2010 copyright : (C) 2022 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AQPAYPAL_PROVIDER_P_H #define AQPAYPAL_PROVIDER_P_H #include "provider_l.h" #include #include typedef struct APY_PROVIDER APY_PROVIDER; struct APY_PROVIDER { int dummy; }; #endif aqbanking-6.6.1/src/libs/plugins/backends/aqpaypal/provider_getstm.h0000664000175000017500000000160714214726437022571 00000000000000/*************************************************************************** begin : Sat Dec 01 2018 copyright : (C) 2022 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AQPAYPAL_PROVIDER_GETSTM_H #define AQPAYPAL_PROVIDER_GETSTM_H #include #include #include #include int APY_Provider_ExecGetTrans(AB_PROVIDER *pro, AB_IMEXPORTER_ACCOUNTINFO *ai, AB_USER *u, AB_TRANSACTION *j); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqpaypal/dlg_editsecret.c0000664000175000017500000002373414214726437022335 00000000000000/*************************************************************************** begin : Thu Aug 19 2010 copyright : (C) 2010 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "dlg_editsecret_p.h" #include "aqbanking/i18n_l.h" #include #include #include #include #include #include #include #include #include #define DIALOG_MINWIDTH 200 #define DIALOG_MINHEIGHT 100 GWEN_INHERIT(GWEN_DIALOG, APY_EDITSECRET_DIALOG) GWEN_DIALOG *APY_EditSecretDialog_new(AB_BANKING *ab) { GWEN_DIALOG *dlg; APY_EDITSECRET_DIALOG *xdlg; dlg=GWEN_Dialog_CreateAndLoadWithPath("apy_editsecret", AB_PM_LIBNAME, AB_PM_DATADIR, "aqbanking/backends/aqpaypal/dialogs/dlg_editsecret.dlg"); if (dlg==NULL) { DBG_ERROR(AQPAYPAL_LOGDOMAIN, "Could not create dialog \"apy_editsecret\"."); return NULL; } GWEN_NEW_OBJECT(APY_EDITSECRET_DIALOG, xdlg); GWEN_INHERIT_SETDATA(GWEN_DIALOG, APY_EDITSECRET_DIALOG, dlg, xdlg, APY_EditSecretDialog_FreeData); GWEN_Dialog_SetSignalHandler(dlg, APY_EditSecretDialog_SignalHandler); xdlg->banking=ab; /* done */ return dlg; } void GWENHYWFAR_CB APY_EditSecretDialog_FreeData(void *bp, void *p) { APY_EDITSECRET_DIALOG *xdlg; xdlg=(APY_EDITSECRET_DIALOG *) p; free(xdlg->apiUserId); free(xdlg->apiPassword); free(xdlg->apiSignature); GWEN_FREE_OBJECT(xdlg); } void APY_EditSecretDialog_SetApiUserId(GWEN_DIALOG *dlg, const char *s) { APY_EDITSECRET_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, APY_EDITSECRET_DIALOG, dlg); assert(xdlg); free(xdlg->apiUserId); if (s) xdlg->apiUserId=strdup(s); else xdlg->apiUserId=NULL; } char *APY_EditSecretDialog_GetApiUserId(const GWEN_DIALOG *dlg) { APY_EDITSECRET_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, APY_EDITSECRET_DIALOG, dlg); assert(xdlg); return xdlg->apiUserId; } void APY_EditSecretDialog_SetApiPassword(GWEN_DIALOG *dlg, const char *s) { APY_EDITSECRET_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, APY_EDITSECRET_DIALOG, dlg); assert(xdlg); free(xdlg->apiPassword); if (s) xdlg->apiPassword=strdup(s); else xdlg->apiPassword=NULL; } char *APY_EditSecretDialog_GetApiPassword(const GWEN_DIALOG *dlg) { APY_EDITSECRET_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, APY_EDITSECRET_DIALOG, dlg); assert(xdlg); return xdlg->apiPassword; } void APY_EditSecretDialog_SetApiSignature(GWEN_DIALOG *dlg, const char *s) { APY_EDITSECRET_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, APY_EDITSECRET_DIALOG, dlg); assert(xdlg); free(xdlg->apiSignature); if (s) xdlg->apiSignature=strdup(s); else xdlg->apiSignature=NULL; } char *APY_EditSecretDialog_GetApiSignature(const GWEN_DIALOG *dlg) { APY_EDITSECRET_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, APY_EDITSECRET_DIALOG, dlg); assert(xdlg); return xdlg->apiSignature; } void APY_EditSecretDialog_Init(GWEN_DIALOG *dlg) { APY_EDITSECRET_DIALOG *xdlg; GWEN_DB_NODE *dbPrefs; int i; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, APY_EDITSECRET_DIALOG, dlg); assert(xdlg); dbPrefs=GWEN_Dialog_GetPreferences(dlg); GWEN_Dialog_SetCharProperty(dlg, "", GWEN_DialogProperty_Title, 0, I18N("PayPal Secret Settings"), 0); GWEN_Dialog_SetCharProperty(dlg, "wiz_secret_label", GWEN_DialogProperty_Title, 0, I18N("" "

Enter the API password and signature as it is found on the " "Paypal page described in the previous steps.

" "

" "The API password and API signature are extremely sensitive " "information which you must under no circumstances reveal to " "anybody!

" "

That being said, these credentials are also quite hard to " "remember, so AqBanking stores them in a file which is very well " "encrypted.

" "

When the user is created in the next step you will be asked for " "the password to be set for that credential file.

" "" "Enter the API password and signature as it is found on the\n" "Paypal page described in the previous steps.\n" "The API password and API signature are extremely sensitive\n" "information which you must under no circumstances reveal to\n" "anybody!\n" "That being said, these credentials are also quite hard to\n" "remember, so AqBanking stores them in a file which is very well\n" "encrypted.\n" "When the user is created in the next step you will be asked for\n" "the password to be set for that credential file." ), 0); if (xdlg->apiUserId) GWEN_Dialog_SetCharProperty(dlg, "wiz_apiuserid_edit", GWEN_DialogProperty_Value, 0, xdlg->apiUserId, 0); if (xdlg->apiPassword) GWEN_Dialog_SetCharProperty(dlg, "wiz_apipass_edit", GWEN_DialogProperty_Value, 0, xdlg->apiPassword, 0); if (xdlg->apiSignature) GWEN_Dialog_SetCharProperty(dlg, "wiz_apisig_edit", GWEN_DialogProperty_Value, 0, xdlg->apiSignature, 0); /* read width */ i=GWEN_DB_GetIntValue(dbPrefs, "dialog_width", 0, -1); if (i>=DIALOG_MINWIDTH) GWEN_Dialog_SetIntProperty(dlg, "", GWEN_DialogProperty_Width, 0, i, 0); /* read height */ i=GWEN_DB_GetIntValue(dbPrefs, "dialog_height", 0, -1); if (i>=DIALOG_MINHEIGHT) GWEN_Dialog_SetIntProperty(dlg, "", GWEN_DialogProperty_Height, 0, i, 0); } void APY_EditSecretDialog_Fini(GWEN_DIALOG *dlg) { APY_EDITSECRET_DIALOG *xdlg; int i; GWEN_DB_NODE *dbPrefs; const char *s; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, APY_EDITSECRET_DIALOG, dlg); assert(xdlg); dbPrefs=GWEN_Dialog_GetPreferences(dlg); /* fromGui */ s=GWEN_Dialog_GetCharProperty(dlg, "wiz_apiuserid_edit", GWEN_DialogProperty_Value, 0, NULL); APY_EditSecretDialog_SetApiUserId(dlg, s); s=GWEN_Dialog_GetCharProperty(dlg, "wiz_apipass_edit", GWEN_DialogProperty_Value, 0, NULL); APY_EditSecretDialog_SetApiPassword(dlg, s); s=GWEN_Dialog_GetCharProperty(dlg, "wiz_apisig_edit", GWEN_DialogProperty_Value, 0, NULL); APY_EditSecretDialog_SetApiSignature(dlg, s); /* store dialog width */ i=GWEN_Dialog_GetIntProperty(dlg, "", GWEN_DialogProperty_Width, 0, -1); GWEN_DB_SetIntValue(dbPrefs, GWEN_DB_FLAGS_OVERWRITE_VARS, "dialog_width", i); /* store dialog height */ i=GWEN_Dialog_GetIntProperty(dlg, "", GWEN_DialogProperty_Height, 0, -1); GWEN_DB_SetIntValue(dbPrefs, GWEN_DB_FLAGS_OVERWRITE_VARS, "dialog_height", i); } int APY_EditSecretDialog_HandleActivated(GWEN_DIALOG *dlg, const char *sender) { DBG_INFO(0, "Activated: %s", sender); if (strcasecmp(sender, "okButton")==0) return GWEN_DialogEvent_ResultAccept; else if (strcasecmp(sender, "abortButton")==0) return GWEN_DialogEvent_ResultReject; else if (strcasecmp(sender, "helpButton")==0) { /* TODO: open a help dialog */ } return GWEN_DialogEvent_ResultNotHandled; } int GWENHYWFAR_CB APY_EditSecretDialog_SignalHandler(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender) { APY_EDITSECRET_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, APY_EDITSECRET_DIALOG, dlg); assert(xdlg); switch (t) { case GWEN_DialogEvent_TypeInit: APY_EditSecretDialog_Init(dlg); return GWEN_DialogEvent_ResultHandled;; case GWEN_DialogEvent_TypeFini: APY_EditSecretDialog_Fini(dlg); return GWEN_DialogEvent_ResultHandled;; case GWEN_DialogEvent_TypeValueChanged: return GWEN_DialogEvent_ResultHandled;; case GWEN_DialogEvent_TypeActivated: return APY_EditSecretDialog_HandleActivated(dlg, sender); case GWEN_DialogEvent_TypeEnabled: case GWEN_DialogEvent_TypeDisabled: case GWEN_DialogEvent_TypeClose: case GWEN_DialogEvent_TypeLast: default: return GWEN_DialogEvent_ResultNotHandled; } return GWEN_DialogEvent_ResultNotHandled; } aqbanking-6.6.1/src/libs/plugins/backends/aqpaypal/dlg_edituser.dlg0000664000175000017500000000404514043610745022336 00000000000000 aqbanking-6.6.1/src/libs/plugins/backends/aqpaypal/dlg_newuser.dlg0000664000175000017500000000664614043610745022213 00000000000000 aqbanking-6.6.1/src/libs/plugins/backends/aqpaypal/user_l.h0000664000175000017500000000165314043610745020640 00000000000000/*************************************************************************** begin : Sat May 08 2010 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AQPAYPAL_USER_L_H #define AQPAYPAL_USER_L_H #include #include AB_USER *APY_User_new(AB_PROVIDER *pro); /* internal function, called from APY_Provider */ void APY_User_SetApiSecrets_l(AB_USER *u, const char *password, const char *signature, const char *userid); const char *APY_User_GetApiUserId(const AB_USER *u); const char *APY_User_GetApiPassword(const AB_USER *u); const char *APY_User_GetApiSignature(const AB_USER *u); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqpaypal/provider_sendcmd.h0000664000175000017500000000137314214726437022703 00000000000000/*************************************************************************** begin : Sat May 08 2010 copyright : (C) 2022 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AQPAYPAL_PROVIDER_SENDCMD_H #define AQPAYPAL_PROVIDER_SENDCMD_H #include #include #include int APY_Provider_SendCommands(AB_PROVIDER *pro, AB_PROVIDERQUEUE *pq, AB_IMEXPORTER_CONTEXT *ctx); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqpaypal/dlg_editsecret_l.h0000664000175000017500000000235414043610745022642 00000000000000/*************************************************************************** begin : Thu Aug 19 2010 copyright : (C) 2010 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQPAYPAL_DLG_OFX_SPECIAL_L_H #define AQPAYPAL_DLG_OFX_SPECIAL_L_H #include #include #include #include #ifdef __cplusplus extern "C" { #endif GWEN_DIALOG *APY_EditSecretDialog_new(AB_BANKING *ab); void APY_EditSecretDialog_SetApiUserId(GWEN_DIALOG *dlg, const char *s); char *APY_EditSecretDialog_GetApiUserId(const GWEN_DIALOG *dlg); void APY_EditSecretDialog_SetApiPassword(GWEN_DIALOG *dlg, const char *s); char *APY_EditSecretDialog_GetApiPassword(const GWEN_DIALOG *dlg); void APY_EditSecretDialog_SetApiSignature(GWEN_DIALOG *dlg, const char *s); char *APY_EditSecretDialog_GetApiSignature(const GWEN_DIALOG *dlg); #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/plugins/backends/aqpaypal/provider_update.c0000664000175000017500000000365014214726437022543 00000000000000/*************************************************************************** begin : Sun Dec 02 2018 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "aqpaypal/provider_update.h" #include "aqpaypal/aqpaypal.h" #include "aqbanking/backendsupport/provider_be.h" #include int APY_Provider_UpdatePreInit(AB_PROVIDER *pro, uint32_t lastVersion, uint32_t currentVersion) { #if 0 /* no preinit for now */ int rv; DBG_INFO(AQPAYPAL_LOGDOMAIN, "Update (pre init): Previous version %d.%d.%d.%d, new version %d.%d.%d.%d", (lastVersion>>24) & 0xff, (lastVersion>>16) & 0xff, (lastVersion>>8) & 0xff, lastVersion & 0xff, (currentVersion>>24) & 0xff, (currentVersion>>16) & 0xff, (currentVersion>>8) & 0xff, currentVersion & 0xff); #endif return 0; } int APY_Provider_UpdatePostInit(AB_PROVIDER *pro, uint32_t lastVersion, uint32_t currentVersion) { int rv; DBG_INFO(AQPAYPAL_LOGDOMAIN, "Update (post init): Previous version %d.%d.%d.%d, new version %d.%d.%d.%d", (lastVersion>>24) & 0xff, (lastVersion>>16) & 0xff, (lastVersion>>8) & 0xff, lastVersion & 0xff, (currentVersion>>24) & 0xff, (currentVersion>>16) & 0xff, (currentVersion>>8) & 0xff, currentVersion & 0xff); if (lastVersion<((5<<24) | (99<<16) | (2<<8) | 0)) { /* change from previous versions: * - create account spec objects */ DBG_NOTICE(AQPAYPAL_LOGDOMAIN, "Creating account specs for accounts"); rv=AB_Provider_CreateInitialAccountSpecs(pro); if (rv<0) { DBG_INFO(AQPAYPAL_LOGDOMAIN, "here (%d)", rv); return rv; } } return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqpaypal/provider_getbalance.c0000664000175000017500000000615614214726437023352 00000000000000/*************************************************************************** begin : Sat Dec 01 2018 copyright : (C) 2022 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "aqpaypal/provider_getbalance.h" #include "aqpaypal/provider_request.h" #include #include #include #define I18N(msg) GWEN_I18N_Translate(PACKAGE, msg) int APY_Provider_ExecGetBal(AB_PROVIDER *pro, AB_IMEXPORTER_ACCOUNTINFO *ai, AB_USER *u, AB_TRANSACTION *j) { GWEN_BUFFER *tbuf; int rv; GWEN_DB_NODE *dbResponse; GWEN_DB_NODE *dbCurr; tbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=APY_Provider_SetupUrlString(pro, u, tbuf); if (rv<0) { DBG_INFO(AQPAYPAL_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); AB_Transaction_SetStatus(j, AB_Transaction_StatusError); return rv; } GWEN_Buffer_AppendString(tbuf, "&method=GetBalance"); /* send and receive */ AB_Transaction_SetStatus(j, AB_Transaction_StatusSending); dbResponse=APY_Provider_SendRequestParseResponse(pro, u, GWEN_Buffer_GetStart(tbuf), "getBalance"); GWEN_Buffer_free(tbuf); if (dbResponse==NULL) { DBG_INFO(AQPAYPAL_LOGDOMAIN, "here"); AB_Transaction_SetStatus(j, AB_Transaction_StatusError); return GWEN_ERROR_GENERIC; } /* handle response */ AB_Transaction_SetStatus(j, AB_Transaction_StatusAccepted); dbCurr=GWEN_DB_GetFirstGroup(dbResponse); while (dbCurr) { AB_BALANCE *bal; GWEN_DATE *t=NULL; AB_VALUE *vc; const char *p; DBG_NOTICE(AQPAYPAL_LOGDOMAIN, "Got a balance"); /* read and parse value */ p=GWEN_DB_GetCharValue(dbCurr, "L_AMT", 0, 0); if (!p) return GWEN_ERROR_BAD_DATA; vc=AB_Value_fromString(p); if (vc==NULL) return GWEN_ERROR_BAD_DATA; /* read currency (if any) */ p=GWEN_DB_GetCharValue(dbCurr, "L_CURRENCYCODE", 0, "EUR"); if (p) AB_Value_SetCurrency(vc, p); p=GWEN_DB_GetCharValue(dbResponse, "TIMESTAMP", 0, NULL); if (p && *p) { /*t=GWEN_Time_fromUtcString(p, "YYYY-MM-DDThh:mm:ssZ");*/ t=GWEN_Date_fromStringWithTemplate(p, "YYYY-MM-DD"); if (t==NULL) { DBG_ERROR(AQPAYPAL_LOGDOMAIN, "Invalid timespec [%s]", p); } } else { DBG_ERROR(AQPAYPAL_LOGDOMAIN, "Missing timespec"); } bal=AB_Balance_new(); AB_Balance_SetType(bal, AB_Balance_TypeBooked); AB_Balance_SetDate(bal, t); AB_Balance_SetValue(bal, vc); AB_Value_free(vc); GWEN_Date_free(t); /* add new balance */ AB_ImExporterAccountInfo_AddBalance(ai, bal); break; /* break loop, we found the balance */ dbCurr=GWEN_DB_GetNextGroup(dbCurr); } GWEN_DB_Group_free(dbResponse); AB_Transaction_SetStatus(j, AB_Transaction_StatusAccepted); return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqpaypal/provider_l.h0000664000175000017500000000107614214726437021521 00000000000000/*************************************************************************** begin : Sat May 08 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AQPAYPAL_PROVIDER_L_H #define AQPAYPAL_PROVIDER_L_H #include "aqpaypal/provider.h" #define AQPAYPAL_API_VER "56.0" #endif aqbanking-6.6.1/src/libs/plugins/backends/aqpaypal/Makefile.am0000664000175000017500000000345414214726437021241 00000000000000SUBDIRS=control AM_CPPFLAGS = -I$(top_srcdir)/src/libs -I$(top_builddir)/src/libs $(gwenhywfar_includes) -I$(srcdir)/.. AM_CFLAGS=-DBUILDING_AQBANKING @visibility_cflags@ #iheaderdir=${includedir}/aqpaypal #iheader_HEADERS= plugindir= $(aqbanking_plugindir)/providers plugin_DATA=aqpaypal.xml noinst_HEADERS=\ aqpaypal.h \ provider.h \ provider_accspec.h \ provider_credentials.h \ provider_request.h \ provider_getstm.h \ provider_getbalance.h \ provider_sendcmd.h \ provider_update.h \ user.h \ aqpaypal_l.h \ provider_l.h provider_p.h \ user_p.h user_l.h \ dlg_newuser_p.h dlg_newuser_l.h \ dlg_edituser_p.h dlg_edituser_l.h \ dlg_editsecret_p.h dlg_editsecret_l.h # library noinst_LTLIBRARIES=libaqpaypal.la libaqpaypal_la_LIBADD=\ control/libpaypalcontrol.la libaqpaypal_la_SOURCES=\ user.c \ provider.c \ provider_accspec.c \ provider_credentials.c \ provider_request.c \ provider_getstm.c \ provider_getbalance.c \ provider_sendcmd.c \ provider_update.c \ dlg_newuser.c \ dlg_edituser.c \ dlg_editsecret.c dlgdatadir=$(aqbanking_pkgdatadir)/backends/aqpaypal/dialogs dlgdata_DATA=\ dlg_newuser.dlg \ dlg_edituser.dlg \ dlg_editsecret.dlg sources: for d in $(SUBDIRS); do \ $(MAKE) -C $$d sources; \ done for f in $(dlgdata_DATA); do \ echo $(subdir)/$$f >>$(top_srcdir)/dlgsources; \ done for f in $(plugin_DATA); do \ echo $(subdir)/$$f >>$(top_srcdir)/pdsources; \ done for f in $(libaqpaypal_la_SOURCES) $(INCLUDED_SOURCEFILES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done EXTRA_DIST=aqpaypal.xml.in $(dlgdata_DATA) $(dlgimage_DATA) built_sources: cppcheck: for f in $(libaqpaypal_la_SOURCES); do \ cppcheck --force $$f ; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done typefiles: typedefs: aqbanking-6.6.1/src/libs/plugins/backends/aqpaypal/user.c0000664000175000017500000001361314214726437020325 00000000000000/*************************************************************************** begin : Sat May 08 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "user_p.h" #include "aqpaypal/provider_l.h" #include "aqpaypal/provider_credentials.h" #include #include GWEN_INHERIT(AB_USER, APY_USER) AB_USER *APY_User_new(AB_PROVIDER *pro) { AB_USER *u; APY_USER *ue; u=AB_User_new(); assert(u); GWEN_NEW_OBJECT(APY_USER, ue); GWEN_INHERIT_SETDATA(AB_USER, APY_USER, u, ue, APY_User_freeData); AB_User_SetProvider(u, pro); AB_User_SetBackendName(u, "aqpaypal"); ue->readFromDbFn=AB_User_SetReadFromDbFn(u, APY_User_ReadFromDb); ue->writeToDbFn=AB_User_SetWriteToDbFn(u, APY_User_WriteToDb); AB_User_SetCountry(u, "de"); return u; } void GWENHYWFAR_CB APY_User_freeData(void *bp, void *p) { APY_USER *ue; ue=(APY_USER *)p; free(ue->serverUrl); free(ue->apiPassword); free(ue->apiSignature); free(ue->apiUserId); GWEN_FREE_OBJECT(ue); } int APY_User_ReadFromDb(AB_USER *u, GWEN_DB_NODE *db) { APY_USER *ue; AB_PROVIDER *pro; GWEN_DB_NODE *dbP; int rv; const char *s; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, APY_USER, u); assert(ue); /* save provider, because AB_User_ReadFromDb clears it */ pro=AB_User_GetProvider(u); /* read data for base class */ rv=(ue->readFromDbFn)(u, db); if (rv<0) { DBG_INFO(AQPAYPAL_LOGDOMAIN, "here (%d)", rv); return rv; } /* set provider again */ AB_User_SetProvider(u, pro); /* read data for provider */ dbP=GWEN_DB_GetGroup(db, GWEN_DB_FLAGS_DEFAULT, "data/backend"); /* get server address */ free(ue->serverUrl); s=GWEN_DB_GetCharValue(dbP, "server", 0, 0); if (s && *s) ue->serverUrl=strdup(s); else ue->serverUrl=NULL; /* setup HTTP version */ ue->httpVMajor=GWEN_DB_GetIntValue(dbP, "httpVMajor", 0, -1); ue->httpVMinor=GWEN_DB_GetIntValue(dbP, "httpVMinor", 0, -1); if (ue->httpVMajor==-1 || ue->httpVMinor==-1) { ue->httpVMajor=1; ue->httpVMinor=1; } return 0; } int APY_User_WriteToDb(const AB_USER *u, GWEN_DB_NODE *db) { APY_USER *ue; int rv; GWEN_DB_NODE *dbP; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, APY_USER, u); assert(ue); /* write data for base class */ rv=(ue->writeToDbFn)(u, db); if (rv<0) { DBG_INFO(AQPAYPAL_LOGDOMAIN, "here (%d)", rv); return rv; } /* write data for provider */ dbP=GWEN_DB_GetGroup(db, GWEN_DB_FLAGS_DEFAULT, "data/backend"); if (ue->serverUrl) GWEN_DB_SetCharValue(dbP, GWEN_DB_FLAGS_OVERWRITE_VARS, "server", ue->serverUrl); /* save http settings */ GWEN_DB_SetIntValue(dbP, GWEN_DB_FLAGS_OVERWRITE_VARS, "httpVMajor", ue->httpVMajor); GWEN_DB_SetIntValue(dbP, GWEN_DB_FLAGS_OVERWRITE_VARS, "httpVMinor", ue->httpVMinor); return 0; } const char *APY_User_GetServerUrl(const AB_USER *u) { APY_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, APY_USER, u); assert(ue); return ue->serverUrl; } void APY_User_SetServerUrl(AB_USER *u, const char *s) { APY_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, APY_USER, u); assert(ue); free(ue->serverUrl); if (s) ue->serverUrl=strdup(s); else ue->serverUrl=NULL; } const char *APY_User_GetApiUserId(const AB_USER *u) { APY_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, APY_USER, u); assert(ue); return ue->apiUserId; } const char *APY_User_GetApiPassword(const AB_USER *u) { APY_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, APY_USER, u); assert(ue); return ue->apiPassword; } const char *APY_User_GetApiSignature(const AB_USER *u) { APY_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, APY_USER, u); assert(ue); return ue->apiSignature; } void APY_User_SetApiSecrets_l(AB_USER *u, const char *password, const char *signature, const char *userid) { APY_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, APY_USER, u); assert(ue); free(ue->apiPassword); if (password && *password) ue->apiPassword=strdup(password); else ue->apiPassword=NULL; free(ue->apiSignature); if (signature && *signature) ue->apiSignature=strdup(signature); else ue->apiSignature=NULL; free(ue->apiUserId); if (userid && *userid) ue->apiUserId=strdup(userid); else ue->apiUserId=NULL; } int APY_User_SetApiSecrets(AB_USER *u, const char *password, const char *signature, const char *userid) { GWEN_BUFFER *tbuf; int rv; tbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Text_EscapeToBuffer(password, tbuf); GWEN_Buffer_AppendByte(tbuf, ':'); GWEN_Text_EscapeToBuffer(signature, tbuf); GWEN_Buffer_AppendByte(tbuf, ':'); GWEN_Text_EscapeToBuffer(userid, tbuf); rv=APY_Provider_WriteUserApiSecrets(AB_User_GetProvider(u), u, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); if (rv<0) { DBG_INFO(AQPAYPAL_LOGDOMAIN, "here (%d)", rv); return rv; } return 0; } int APY_User_GetHttpVMajor(const AB_USER *u) { APY_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, APY_USER, u); assert(ue); return ue->httpVMajor; } void APY_User_SetHttpVMajor(const AB_USER *u, int i) { APY_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, APY_USER, u); assert(ue); ue->httpVMajor=i; } int APY_User_GetHttpVMinor(const AB_USER *u) { APY_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, APY_USER, u); assert(ue); return ue->httpVMinor; } void APY_User_SetHttpVMinor(const AB_USER *u, int i) { APY_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, APY_USER, u); assert(ue); ue->httpVMinor=i; } aqbanking-6.6.1/src/libs/plugins/backends/aqpaypal/dlg_editsecret.dlg0000664000175000017500000000401614043610745022643 00000000000000 aqbanking-6.6.1/src/libs/plugins/backends/aqpaypal/aqpaypal.xml.in0000664000175000017500000000041014043610745022123 00000000000000 @AQPAYPAL_VERSION_STRING@ Martin Preuss(martin@libchipcard.de) Paypal This backend provides support for Paypal. aqbanking-6.6.1/src/libs/plugins/backends/aqpaypal/dlg_newuser.c0000664000175000017500000007431514214726437021673 00000000000000/*************************************************************************** begin : Mon Apr 12 2010 copyright : (C) 2018 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "dlg_newuser_p.h" #include "aqbanking/i18n_l.h" #include #include #include #include //#include #include #include #include #include #include #define PAGE_BEGIN 0 #define PAGE_USER 1 #define PAGE_SECRET 2 #define PAGE_CREATE 3 #define PAGE_END 4 #define DIALOG_MINWIDTH 400 #define DIALOG_MINHEIGHT 200 GWEN_INHERIT(GWEN_DIALOG, APY_NEWUSER_DIALOG) GWEN_DIALOG *APY_NewUserDialog_new(AB_PROVIDER *pro) { GWEN_DIALOG *dlg; APY_NEWUSER_DIALOG *xdlg; dlg=GWEN_Dialog_CreateAndLoadWithPath("apy_newuser", AB_PM_LIBNAME, AB_PM_DATADIR, "aqbanking/backends/aqpaypal/dialogs/dlg_newuser.dlg"); if (dlg==NULL) { DBG_ERROR(AQPAYPAL_LOGDOMAIN, "Could not create dialog \"apy_newuser\"."); return NULL; } GWEN_NEW_OBJECT(APY_NEWUSER_DIALOG, xdlg); GWEN_INHERIT_SETDATA(GWEN_DIALOG, APY_NEWUSER_DIALOG, dlg, xdlg, APY_NewUserDialog_FreeData); GWEN_Dialog_SetSignalHandler(dlg, APY_NewUserDialog_SignalHandler); xdlg->provider=pro; xdlg->banking=AB_Provider_GetBanking(pro); /* preset */ xdlg->httpVMajor=1; xdlg->httpVMinor=1; xdlg->url=strdup("https://api-3t.paypal.com/nvp"); /* done */ return dlg; } void GWENHYWFAR_CB APY_NewUserDialog_FreeData(void *bp, void *p) { APY_NEWUSER_DIALOG *xdlg; xdlg=(APY_NEWUSER_DIALOG *) p; free(xdlg->apiUserId); free(xdlg->apiPassword); free(xdlg->apiSignature); free(xdlg->userName); free(xdlg->userId); free(xdlg->url); AB_User_free(xdlg->user); GWEN_FREE_OBJECT(xdlg); } AB_USER *APY_NewUserDialog_GetUser(const GWEN_DIALOG *dlg) { APY_NEWUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, APY_NEWUSER_DIALOG, dlg); assert(xdlg); return xdlg->user; } const char *APY_NewUserDialog_GetApiUserId(const GWEN_DIALOG *dlg) { APY_NEWUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, APY_NEWUSER_DIALOG, dlg); assert(xdlg); return xdlg->apiUserId; } void APY_NewUserDialog_SetApiUserId(GWEN_DIALOG *dlg, const char *s) { APY_NEWUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, APY_NEWUSER_DIALOG, dlg); assert(xdlg); free(xdlg->apiUserId); if (s) xdlg->apiUserId=strdup(s); else xdlg->apiUserId=NULL; } const char *APY_NewUserDialog_GetApiPassword(const GWEN_DIALOG *dlg) { APY_NEWUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, APY_NEWUSER_DIALOG, dlg); assert(xdlg); return xdlg->apiPassword; } void APY_NewUserDialog_SetApiPassword(GWEN_DIALOG *dlg, const char *s) { APY_NEWUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, APY_NEWUSER_DIALOG, dlg); assert(xdlg); free(xdlg->apiPassword); if (s) xdlg->apiPassword=strdup(s); else xdlg->apiPassword=NULL; } const char *APY_NewUserDialog_GetApiSignature(const GWEN_DIALOG *dlg) { APY_NEWUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, APY_NEWUSER_DIALOG, dlg); assert(xdlg); return xdlg->apiSignature; } void APY_NewUserDialog_SetApiSignature(GWEN_DIALOG *dlg, const char *s) { APY_NEWUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, APY_NEWUSER_DIALOG, dlg); assert(xdlg); free(xdlg->apiSignature); if (s) xdlg->apiSignature=strdup(s); else xdlg->apiSignature=NULL; } const char *APY_NewUserDialog_GetUserName(const GWEN_DIALOG *dlg) { APY_NEWUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, APY_NEWUSER_DIALOG, dlg); assert(xdlg); return xdlg->userName; } void APY_NewUserDialog_SetUserName(GWEN_DIALOG *dlg, const char *s) { APY_NEWUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, APY_NEWUSER_DIALOG, dlg); assert(xdlg); free(xdlg->userName); if (s) xdlg->userName=strdup(s); else xdlg->userName=NULL; } const char *APY_NewUserDialog_GetUserId(const GWEN_DIALOG *dlg) { APY_NEWUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, APY_NEWUSER_DIALOG, dlg); assert(xdlg); return xdlg->userId; } void APY_NewUserDialog_SetUserId(GWEN_DIALOG *dlg, const char *s) { APY_NEWUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, APY_NEWUSER_DIALOG, dlg); assert(xdlg); free(xdlg->userId); if (s) xdlg->userId=strdup(s); else xdlg->userId=NULL; } const char *APY_NewUserDialog_GetUrl(const GWEN_DIALOG *dlg) { APY_NEWUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, APY_NEWUSER_DIALOG, dlg); assert(xdlg); return xdlg->url; } void APY_NewUserDialog_SetUrl(GWEN_DIALOG *dlg, const char *s) { APY_NEWUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, APY_NEWUSER_DIALOG, dlg); assert(xdlg); free(xdlg->url); if (s) xdlg->url=strdup(s); else xdlg->url=NULL; } int APY_NewUserDialog_GetHttpVMajor(const GWEN_DIALOG *dlg) { APY_NEWUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, APY_NEWUSER_DIALOG, dlg); assert(xdlg); return xdlg->httpVMajor; } int APY_NewUserDialog_GetHttpVMinor(const GWEN_DIALOG *dlg) { APY_NEWUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, APY_NEWUSER_DIALOG, dlg); assert(xdlg); return xdlg->httpVMinor; } void APY_NewUserDialog_SetHttpVersion(GWEN_DIALOG *dlg, int vmajor, int vminor) { APY_NEWUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, APY_NEWUSER_DIALOG, dlg); assert(xdlg); xdlg->httpVMajor=vmajor; xdlg->httpVMinor=vminor; } uint32_t APY_NewUserDialog_GetFlags(const GWEN_DIALOG *dlg) { APY_NEWUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, APY_NEWUSER_DIALOG, dlg); assert(xdlg); return xdlg->flags; } void APY_NewUserDialog_SetFlags(GWEN_DIALOG *dlg, uint32_t fl) { APY_NEWUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, APY_NEWUSER_DIALOG, dlg); assert(xdlg); xdlg->flags=fl; } void APY_NewUserDialog_AddFlags(GWEN_DIALOG *dlg, uint32_t fl) { APY_NEWUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, APY_NEWUSER_DIALOG, dlg); assert(xdlg); xdlg->flags&=~fl; } void APY_NewUserDialog_SubFlags(GWEN_DIALOG *dlg, uint32_t fl) { APY_NEWUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, APY_NEWUSER_DIALOG, dlg); assert(xdlg); xdlg->flags&=~fl; } void APY_NewUserDialog_Init(GWEN_DIALOG *dlg) { APY_NEWUSER_DIALOG *xdlg; GWEN_DB_NODE *dbPrefs; int i; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, APY_NEWUSER_DIALOG, dlg); assert(xdlg); dbPrefs=GWEN_Dialog_GetPreferences(dlg); GWEN_Dialog_SetCharProperty(dlg, "", GWEN_DialogProperty_Title, 0, I18N("Paypal Setup Wizard"), 0); /* select first page */ GWEN_Dialog_SetIntProperty(dlg, "wiz_stack", GWEN_DialogProperty_Value, 0, 0, 0); /* setup intro page */ GWEN_Dialog_SetCharProperty(dlg, "wiz_begin_label", GWEN_DialogProperty_Title, 0, I18N("" "

This dialog assists you in setting up a Paypal User.

" "

Please note that you have to apply for API access with Paypal. " "The following procedure helps you getting there:

" "

Login into your Paypal account via web browser, enter the My Profile " "page, click API access under Account information.

" "

Choose Option 2.

" "" "This dialog assists you in setting up a Paypal User.\n" "Please note that you have to apply for API access with Paypal.\n" "The following procedure helps you getting there:\n" "Login into your Paypal account via web browser, enter the \"My Profile\"\n" "page, click \"API access\" under \"Account information\".\n" "Choose OPTION 2." ), 0); /* setup user page */ GWEN_Dialog_SetCharProperty(dlg, "wiz_user_label", GWEN_DialogProperty_Title, 0, I18N("" "

You can find the information needed here after logging into your " "Paypal account via web browser. The information can then be found " "under My Profile, Account Information, API Access.

" "" "You can find the information needed here after logging into your\n" "Paypal account via web browser. The information can then be found\n" "under <\"My Profile\", \"Account Information\", \"API Access\"." ), 0); GWEN_Dialog_SetCharProperty(dlg, "wiz_url_edit", GWEN_DialogProperty_Value, 0, "https://api-3t.paypal.com/nvp", 0); /* setup secret page */ GWEN_Dialog_SetCharProperty(dlg, "wiz_secret_label", GWEN_DialogProperty_Title, 0, I18N("" "

Enter the API password and signature as it is found on the " "Paypal page described in the previous steps.

" "

" "The API password and API signature are extremely sensitive " "information which you must under no circumstances reveal to " "anybody!

" "

That being said, these credentials are also quite hard to " "remember, so AqBanking stores them in a file which is very well " "encrypted.

" "

When the user is created in the next step you will be asked for " "the password to be set for that credential file.

" "" "Enter the API password and signature as it is found on the\n" "Paypal page described in the previous steps.\n" "The API password and API signature are extremely sensitive\n" "information which you must under no circumstances reveal to\n" "anybody!\n" "That being said, these credentials are also quite hard to\n" "remember, so AqBanking stores them in a file which is very well\n" "encrypted.\n" "When the user is created in the next step you will be asked for\n" "the password to be set for that credential file." ), 0); /* setup creation page */ GWEN_Dialog_SetCharProperty(dlg, "wiz_create_label", GWEN_DialogProperty_Title, 0, I18N("" "

We are now ready to create the user.

" "

Click the next button to proceed or abort to abort.

" "

If you proceed you will be asked to enter a new password. This is the password " "for the credentials file described in previous steps.

" "

Please be carefull to enter a sufficiently secure password

" "" "We are now ready to create the user.\n" "Click the \"next\" button to proceed or \"abort\" to abort.\n" "If you proceed you will be asked to enter a new password. This is the password\n" "for the credentials file described in previous steps.\n" "Please be carefull to enter a sufficiently secure password." ), 0); /* setup extro page */ GWEN_Dialog_SetCharProperty(dlg, "wiz_end_label", GWEN_DialogProperty_Title, 0, I18N("The user has been successfully setup."), 0); /* read width */ i=GWEN_DB_GetIntValue(dbPrefs, "dialog_width", 0, -1); if (i>=DIALOG_MINWIDTH) GWEN_Dialog_SetIntProperty(dlg, "", GWEN_DialogProperty_Width, 0, i, 0); /* read height */ i=GWEN_DB_GetIntValue(dbPrefs, "dialog_height", 0, -1); if (i>=DIALOG_MINHEIGHT) GWEN_Dialog_SetIntProperty(dlg, "", GWEN_DialogProperty_Height, 0, i, 0); /* disable next and previous buttons */ GWEN_Dialog_SetIntProperty(dlg, "wiz_prev_button", GWEN_DialogProperty_Enabled, 0, 0, 0); GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 1, 0); } void APY_NewUserDialog_Fini(GWEN_DIALOG *dlg) { APY_NEWUSER_DIALOG *xdlg; int i; GWEN_DB_NODE *dbPrefs; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, APY_NEWUSER_DIALOG, dlg); assert(xdlg); dbPrefs=GWEN_Dialog_GetPreferences(dlg); /* store dialog width */ i=GWEN_Dialog_GetIntProperty(dlg, "", GWEN_DialogProperty_Width, 0, -1); GWEN_DB_SetIntValue(dbPrefs, GWEN_DB_FLAGS_OVERWRITE_VARS, "dialog_width", i); /* store dialog height */ i=GWEN_Dialog_GetIntProperty(dlg, "", GWEN_DialogProperty_Height, 0, -1); GWEN_DB_SetIntValue(dbPrefs, GWEN_DB_FLAGS_OVERWRITE_VARS, "dialog_height", i); } int APY_NewUserDialog_GetSecretPageData(GWEN_DIALOG *dlg) { APY_NEWUSER_DIALOG *xdlg; const char *s; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, APY_NEWUSER_DIALOG, dlg); assert(xdlg); s=GWEN_Dialog_GetCharProperty(dlg, "wiz_apiuserid_edit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) APY_NewUserDialog_SetApiUserId(dlg, s); else { DBG_INFO(AQPAYPAL_LOGDOMAIN, "Missing API User ID"); return GWEN_ERROR_NO_DATA; } s=GWEN_Dialog_GetCharProperty(dlg, "wiz_apipass_edit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) APY_NewUserDialog_SetApiPassword(dlg, s); else { DBG_INFO(AQPAYPAL_LOGDOMAIN, "Missing API Password"); return GWEN_ERROR_NO_DATA; } s=GWEN_Dialog_GetCharProperty(dlg, "wiz_apisig_edit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) APY_NewUserDialog_SetApiSignature(dlg, s); else { DBG_INFO(AQPAYPAL_LOGDOMAIN, "Missing API Signature"); return GWEN_ERROR_NO_DATA; } return 0; } int APY_NewUserDialog_GetUserPageData(GWEN_DIALOG *dlg) { APY_NEWUSER_DIALOG *xdlg; const char *s; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, APY_NEWUSER_DIALOG, dlg); assert(xdlg); s=GWEN_Dialog_GetCharProperty(dlg, "wiz_username_edit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) APY_NewUserDialog_SetUserName(dlg, s); else { DBG_INFO(AQPAYPAL_LOGDOMAIN, "Missing user name"); return GWEN_ERROR_NO_DATA; } s=GWEN_Dialog_GetCharProperty(dlg, "wiz_userid_edit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) APY_NewUserDialog_SetUserId(dlg, s); else { DBG_INFO(AQPAYPAL_LOGDOMAIN, "Missing user id"); return GWEN_ERROR_NO_DATA; } s=GWEN_Dialog_GetCharProperty(dlg, "wiz_url_edit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) APY_NewUserDialog_SetUrl(dlg, s); else { DBG_INFO(AQPAYPAL_LOGDOMAIN, "Missing URL"); return GWEN_ERROR_NO_DATA; } return 0; } int APY_NewUserDialog_EnterPage(GWEN_DIALOG *dlg, int page, int forwards) { APY_NEWUSER_DIALOG *xdlg; int rv; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, APY_NEWUSER_DIALOG, dlg); assert(xdlg); switch (page) { case PAGE_BEGIN: GWEN_Dialog_SetIntProperty(dlg, "wiz_prev_button", GWEN_DialogProperty_Enabled, 0, 0, 0); GWEN_Dialog_SetIntProperty(dlg, "wiz_stack", GWEN_DialogProperty_Value, 0, page, 0); return GWEN_DialogEvent_ResultHandled; case PAGE_USER: GWEN_Dialog_SetIntProperty(dlg, "wiz_prev_button", GWEN_DialogProperty_Enabled, 0, 1, 0); rv=APY_NewUserDialog_GetUserPageData(dlg); if (rv<0) GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 0, 0); else GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 1, 0); GWEN_Dialog_SetIntProperty(dlg, "wiz_stack", GWEN_DialogProperty_Value, 0, page, 0); return GWEN_DialogEvent_ResultHandled; case PAGE_SECRET: GWEN_Dialog_SetIntProperty(dlg, "wiz_prev_button", GWEN_DialogProperty_Enabled, 0, 1, 0); rv=APY_NewUserDialog_GetSecretPageData(dlg); if (rv<0) GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 0, 0); else GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 1, 0); GWEN_Dialog_SetIntProperty(dlg, "wiz_stack", GWEN_DialogProperty_Value, 0, page, 0); return GWEN_DialogEvent_ResultHandled; case PAGE_CREATE: if (!forwards) GWEN_Dialog_SetCharProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Title, 0, I18N("Next"), 0); GWEN_Dialog_SetIntProperty(dlg, "wiz_stack", GWEN_DialogProperty_Value, 0, page, 0); return GWEN_DialogEvent_ResultHandled; case PAGE_END: GWEN_Dialog_SetIntProperty(dlg, "wiz_stack", GWEN_DialogProperty_Value, 0, page, 0); GWEN_Dialog_SetCharProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Title, 0, I18N("Finish"), 0); GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 1, 0); GWEN_Dialog_SetIntProperty(dlg, "wiz_prev_button", GWEN_DialogProperty_Enabled, 0, 0, 0); GWEN_Dialog_SetIntProperty(dlg, "wiz_abort_button", GWEN_DialogProperty_Enabled, 0, 0, 0); return GWEN_DialogEvent_ResultHandled; default: return GWEN_DialogEvent_ResultHandled; } return GWEN_DialogEvent_ResultHandled; } int APY_NewUserDialog_DoIt(GWEN_DIALOG *dlg) { APY_NEWUSER_DIALOG *xdlg; AB_USER *u; int rv; uint32_t pid; DBG_INFO(0, "Doit"); assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, APY_NEWUSER_DIALOG, dlg); assert(xdlg); DBG_INFO(0, "Creating user"); u=AB_Provider_CreateUserObject(xdlg->provider); if (u==NULL) { DBG_ERROR(AQPAYPAL_LOGDOMAIN, "Could not create user, maybe backend missing?"); // TODO: show error message return GWEN_DialogEvent_ResultHandled; } /* generic setup */ AB_User_SetUserName(u, xdlg->userName); AB_User_SetUserId(u, xdlg->userId); AB_User_SetCustomerId(u, xdlg->userId); AB_User_SetCountry(u, "de"); AB_User_SetBankCode(u, "PAYPAL"); APY_User_SetServerUrl(u, xdlg->url); APY_User_SetHttpVMajor(u, xdlg->httpVMajor); APY_User_SetHttpVMinor(u, xdlg->httpVMinor); DBG_INFO(0, "Adding user"); rv=AB_Provider_AddUser(xdlg->provider, u); if (rv<0) { DBG_ERROR(AQPAYPAL_LOGDOMAIN, "Could not add user (%d)", rv); AB_User_free(u); return GWEN_DialogEvent_ResultHandled; } pid=GWEN_Gui_ProgressStart(GWEN_GUI_PROGRESS_DELAY | GWEN_GUI_PROGRESS_ALLOW_EMBED | GWEN_GUI_PROGRESS_SHOW_PROGRESS | GWEN_GUI_PROGRESS_SHOW_ABORT, I18N("Setting Up Paypal User"), I18N("The user will be created."), 3, 0); /* lock new user */ DBG_INFO(0, "Locking user"); rv=AB_Provider_BeginExclUseUser(xdlg->provider, u); if (rv<0) { DBG_ERROR(AQPAYPAL_LOGDOMAIN, "Could not lock user (%d)", rv); GWEN_Gui_ProgressLog(pid, GWEN_LoggerLevel_Error, I18N("Unable to lock users")); AB_Provider_DeleteUser(xdlg->provider, AB_User_GetUniqueId(u)); GWEN_Gui_ProgressEnd(pid); return GWEN_DialogEvent_ResultHandled; } #if 0 DBG_INFO(0, "Getting certs (%08x)", AH_User_GetFlags(u)); GWEN_Gui_ProgressLog(pid, GWEN_LoggerLevel_Notice, I18N("Retrieving SSL certificate")); rv=APY_Provider_GetCert(pro, u, 0, 1, 0); if (rv<0) { // TODO: retry with SSLv3 if necessary AB_Banking_EndExclUseUser(xdlg->banking, u, 1); DBG_ERROR(AQPAYPAL_LOGDOMAIN, "here (%d)", rv); AB_Banking_DeleteUser(xdlg->banking, u); GWEN_Gui_ProgressEnd(pid); return GWEN_DialogEvent_ResultHandled; } rv=GWEN_Gui_ProgressAdvance(pid, GWEN_GUI_PROGRESS_ONE); if (rv==GWEN_ERROR_USER_ABORTED) { AB_Banking_EndExclUseUser(xdlg->banking, u, 1); DBG_INFO(AQPAYPAL_LOGDOMAIN, "here (%d)", rv); AB_Banking_DeleteUser(xdlg->banking, u); GWEN_Gui_ProgressLog(pid, GWEN_LoggerLevel_Error, I18N("Aborted by user.")); GWEN_Gui_ProgressEnd(pid); return GWEN_DialogEvent_ResultHandled; } #endif GWEN_Gui_ProgressLog(pid, GWEN_LoggerLevel_Notice, I18N("Creating API credentials file")); rv=APY_User_SetApiSecrets(u, xdlg->apiPassword, xdlg->apiSignature, xdlg->apiUserId); if (rv<0) { AB_Provider_EndExclUseUser(xdlg->provider, u, 1); DBG_INFO(AQPAYPAL_LOGDOMAIN, "here (%d)", rv); AB_Provider_DeleteUser(xdlg->provider, AB_User_GetUniqueId(u)); GWEN_Gui_ProgressLog(pid, GWEN_LoggerLevel_Error, I18N("Aborted by user.")); GWEN_Gui_ProgressEnd(pid); return GWEN_DialogEvent_ResultHandled; } /* unlock user */ DBG_INFO(0, "Unlocking user"); rv=AB_Provider_EndExclUseUser(xdlg->provider, u, 0); if (rv<0) { DBG_INFO(AQPAYPAL_LOGDOMAIN, "Could not unlock user [%s] (%d)", AB_User_GetUserId(u), rv); GWEN_Gui_ProgressLog2(pid, GWEN_LoggerLevel_Error, I18N("Could not unlock user %s (%d)"), AB_User_GetUserId(u), rv); AB_Provider_EndExclUseUser(xdlg->provider, u, 1); AB_Provider_DeleteUser(xdlg->provider, AB_User_GetUniqueId(u)); GWEN_Gui_ProgressEnd(pid); return GWEN_DialogEvent_ResultHandled; } if (1) { AB_ACCOUNT *account; int rv; static char accountname[256]; account=AB_Provider_CreateAccountObject(xdlg->provider); assert(account); #if 0 AB_User_SetUserName(u, xdlg->userName); AB_User_SetUserId(u, xdlg->userId); #endif AB_Account_SetOwnerName(account, AB_User_GetUserName(u)); AB_Account_SetAccountNumber(account, AB_User_GetUserId(u)); AB_Account_SetBankCode(account, "PAYPAL"); AB_Account_SetBankName(account, "PAYPAL"); strcpy(accountname, "PP "); strcat(accountname, AB_User_GetUserName(u)); AB_Account_SetAccountName(account, accountname); AB_Account_SetUserId(account, AB_User_GetUniqueId(u)); rv=AB_Provider_AddAccount(xdlg->provider, account, 1); /* do lock corresponding user */ if (rv<0) { DBG_INFO(AQPAYPAL_LOGDOMAIN, "Error adding account (%d)", rv); AB_Account_free(account); AB_Provider_DeleteUser(xdlg->provider, AB_User_GetUniqueId(u)); GWEN_Gui_ProgressEnd(pid); return GWEN_DialogEvent_ResultHandled; } } GWEN_Dialog_SetCharProperty(dlg, "wiz_end_label", GWEN_DialogProperty_Title, 0, I18N("The user has been successfully setup."), 0); GWEN_Gui_ProgressEnd(pid); APY_NewUserDialog_EnterPage(dlg, PAGE_END, 1); xdlg->user=u; return GWEN_DialogEvent_ResultHandled; } int APY_NewUserDialog_Next(GWEN_DIALOG *dlg) { APY_NEWUSER_DIALOG *xdlg; int page; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, APY_NEWUSER_DIALOG, dlg); assert(xdlg); page=GWEN_Dialog_GetIntProperty(dlg, "wiz_stack", GWEN_DialogProperty_Value, 0, -1); if (page==PAGE_CREATE) { return APY_NewUserDialog_DoIt(dlg); } else if (pagePAGE_BEGIN) { page--; return APY_NewUserDialog_EnterPage(dlg, page, 0); } return GWEN_DialogEvent_ResultHandled; } int APY_NewUserDialog_HandleActivatedSpecial(GWEN_DIALOG *dlg) { #if 0 APY_NEWUSER_DIALOG *xdlg; GWEN_DIALOG *dlg2; int rv; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, APY_NEWUSER_DIALOG, dlg); assert(xdlg); dlg2=AH_PinTanSpecialDialog_new(xdlg->banking); if (dlg2==NULL) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Could not create dialog"); return GWEN_DialogEvent_ResultHandled; } AH_PinTanSpecialDialog_SetHttpVersion(dlg2, xdlg->httpVMajor, xdlg->httpVMinor); AH_PinTanSpecialDialog_SetHbciVersion(dlg2, xdlg->hbciVersion); AH_PinTanSpecialDialog_SetFlags(dlg2, xdlg->flags); rv=GWEN_Gui_ExecDialog(dlg2, 0); if (rv==0) { /* rejected */ GWEN_Dialog_free(dlg2); return GWEN_DialogEvent_ResultHandled; } else { xdlg->httpVMajor=AH_PinTanSpecialDialog_GetHttpVMajor(dlg2); xdlg->httpVMinor=AH_PinTanSpecialDialog_GetHttpVMinor(dlg2); xdlg->hbciVersion=AH_PinTanSpecialDialog_GetHbciVersion(dlg2); xdlg->flags=AH_PinTanSpecialDialog_GetFlags(dlg2); } GWEN_Dialog_free(dlg2); #endif return GWEN_DialogEvent_ResultHandled; } int APY_NewUserDialog_HandleActivated(GWEN_DIALOG *dlg, const char *sender) { DBG_INFO(0, "Activated: %s", sender); if (strcasecmp(sender, "wiz_prev_button")==0) return APY_NewUserDialog_Previous(dlg); else if (strcasecmp(sender, "wiz_next_button")==0) return APY_NewUserDialog_Next(dlg); else if (strcasecmp(sender, "wiz_abort_button")==0) return GWEN_DialogEvent_ResultReject; else if (strcasecmp(sender, "wiz_special_button")==0) return APY_NewUserDialog_HandleActivatedSpecial(dlg); else if (strcasecmp(sender, "wiz_help_button")==0) { /* TODO: open a help dialog */ } return GWEN_DialogEvent_ResultNotHandled; } int APY_NewUserDialog_HandleValueChanged(GWEN_DIALOG *dlg, const char *sender) { if (strcasecmp(sender, "wiz_username_edit")==0 || strcasecmp(sender, "wiz_userid_edit")==0 || strcasecmp(sender, "wiz_url_edit")==0 || strcasecmp(sender, "wiz_apiuserid_edit")==0 || strcasecmp(sender, "wiz_apipass_edit")==0 || strcasecmp(sender, "wiz_apisig_edit")==0) { int rv; if (GWEN_Dialog_GetIntProperty(dlg, "wiz_stack", GWEN_DialogProperty_Value, 0, -1)==PAGE_USER) { rv=APY_NewUserDialog_GetUserPageData(dlg); if (rv<0) GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 0, 0); else GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 1, 0); } else if (GWEN_Dialog_GetIntProperty(dlg, "wiz_stack", GWEN_DialogProperty_Value, 0, -1)==PAGE_SECRET) { rv=APY_NewUserDialog_GetSecretPageData(dlg); if (rv<0) GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 0, 0); else GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 1, 0); } return GWEN_DialogEvent_ResultHandled; } return GWEN_DialogEvent_ResultNotHandled; } int GWENHYWFAR_CB APY_NewUserDialog_SignalHandler(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender) { APY_NEWUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, APY_NEWUSER_DIALOG, dlg); assert(xdlg); switch (t) { case GWEN_DialogEvent_TypeInit: APY_NewUserDialog_Init(dlg); return GWEN_DialogEvent_ResultHandled;; case GWEN_DialogEvent_TypeFini: APY_NewUserDialog_Fini(dlg); return GWEN_DialogEvent_ResultHandled;; case GWEN_DialogEvent_TypeValueChanged: return APY_NewUserDialog_HandleValueChanged(dlg, sender); case GWEN_DialogEvent_TypeActivated: return APY_NewUserDialog_HandleActivated(dlg, sender); case GWEN_DialogEvent_TypeEnabled: case GWEN_DialogEvent_TypeDisabled: case GWEN_DialogEvent_TypeClose: case GWEN_DialogEvent_TypeLast: default: return GWEN_DialogEvent_ResultNotHandled; } return GWEN_DialogEvent_ResultNotHandled; } aqbanking-6.6.1/src/libs/plugins/backends/aqpaypal/aqpaypal.h0000664000175000017500000000314414043610745021154 00000000000000/*************************************************************************** begin : Sat May 08 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AQPAYPAL_AQPAYPAL_H #define AQPAYPAL_AQPAYPAL_H #include #include /* ___________________________________________________________________________*/ #if 0 #ifdef BUILDING_AQPAYPAL # /* building AqEBICS */ # if AQBANKING_SYS_IS_WINDOWS # /* for windows */ # ifdef __declspec # define AQPAYPAL_API __declspec (dllexport) # else /* if __declspec */ # define AQPAYPAL_API # endif /* if NOT __declspec */ # else # /* for non-win32 */ # ifdef GCC_WITH_VISIBILITY_ATTRIBUTE # define AQPAYPAL_API __attribute__((visibility("default"))) # else # define AQPAYPAL_API # endif # endif #else # /* not building AqEBICS */ # if AQBANKING_SYS_IS_WINDOWS # /* for windows */ # ifdef __declspec # define AQPAYPAL_API __declspec (dllimport) # else /* if __declspec */ # define AQPAYPAL_API # endif /* if NOT __declspec */ # else # /* for non-win32 */ # define AQPAYPAL_API # endif #endif #endif /* ___________________________________________________________________________*/ /* no longer export symbols */ #define AQPAYPAL_API #define APY_PROVIDER_NAME "AQPAYPAL" #define AQPAYPAL_LOGDOMAIN "aqpaypal" #endif aqbanking-6.6.1/src/libs/plugins/backends/aqpaypal/aqpaypal_l.h0000664000175000017500000000115114043610745021463 00000000000000/*************************************************************************** begin : Sat May 08 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AQPAYPAL_AQPAYPAL_L_H #define AQPAYPAL_AQPAYPAL_L_H #include #include #define I18N(s) GWEN_I18N_Translate("aqpaypal", s) #endif aqbanking-6.6.1/src/libs/plugins/backends/aqpaypal/provider.h0000664000175000017500000000112614214726437021202 00000000000000/*************************************************************************** begin : Sat May 08 2010 copyright : (C) 2022 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AQPAYPAL_PROVIDER_H #define AQPAYPAL_PROVIDER_H #include AB_PROVIDER *APY_Provider_new(AB_BANKING *ab); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqpaypal/provider_request.h0000664000175000017500000000146114214726437022754 00000000000000/*************************************************************************** begin : Sat May 08 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AQPAYPAL_PROVIDER_REQUEST_H #define AQPAYPAL_PROVIDER_REQUEST_H #include #include #include GWEN_DB_NODE *APY_Provider_SendRequestParseResponse(AB_PROVIDER *pro, AB_USER *u, const char *requestString, const char *jobName); int APY_Provider_SetupUrlString(AB_PROVIDER *pro, AB_USER *u, GWEN_BUFFER *tbuf); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqpaypal/provider_accspec.c0000664000175000017500000000523714214726437022665 00000000000000/*************************************************************************** begin : Sat Dec 01 2018 copyright : (C) 2022 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "aqpaypal/provider_accspec.h" #include "aqpaypal/aqpaypal.h" #include "aqbanking/backendsupport/provider_be.h" #include static int _createTransactionLimitsForAccount(AB_PROVIDER *pro, const AB_ACCOUNT *acc, AB_TRANSACTION_LIMITS_LIST *tll); int APY_Provider_UpdateAccountSpec(AB_PROVIDER *pro, AB_ACCOUNT_SPEC *as, int doLock) { int rv; AB_ACCOUNT *a=NULL; AB_TRANSACTION_LIMITS_LIST *tll; rv=AB_Provider_GetAccount(pro, AB_AccountSpec_GetUniqueId(as), doLock, doLock, &a); if (rv<0) { DBG_INFO(AQPAYPAL_LOGDOMAIN, "here (%d)", rv); return rv; } tll=AB_TransactionLimits_List_new(); rv=_createTransactionLimitsForAccount(pro, a, tll); if (rv<0) { DBG_INFO(AQPAYPAL_LOGDOMAIN, "here (%d)", rv); AB_TransactionLimits_List_free(tll); AB_Account_free(a); return rv; } AB_AccountSpec_SetTransactionLimitsList(as, tll); AB_Account_free(a); return 0; } int _createTransactionLimitsForAccount(AB_PROVIDER *pro, const AB_ACCOUNT *acc, AB_TRANSACTION_LIMITS_LIST *tll) { int i; int jobList[]= { AB_Transaction_CommandGetBalance, AB_Transaction_CommandGetTransactions, /* AB_Transaction_CommandLoadCellPhone, */ /* AB_Transaction_CommandSepaTransfer, */ /* AB_Transaction_CommandSepaDebitNote, */ /* AB_Transaction_CommandSepaFlashDebitNote, */ /* AB_Transaction_CommandSepaCreateStandingOrder, */ /* AB_Transaction_CommandSepaModifyStandingOrder, */ /* AB_Transaction_CommandSepaDeleteStandingOrder, */ /* AB_Transaction_CommandSepaGetStandingOrders, */ /* AB_Transaction_CommandGetEStatements, */ AB_Transaction_CommandUnknown }; i=0; while (jobList[i]!=AB_Transaction_CommandUnknown) { AB_TRANSACTION_LIMITS *limits=NULL; DBG_INFO(AQPAYPAL_LOGDOMAIN, "Handling job \"%s\"", AB_Transaction_Command_toString(jobList[i])); limits=AB_TransactionLimits_new(); AB_TransactionLimits_SetCommand(limits, jobList[i]); AB_TransactionLimits_SetMaxLinesPurpose(limits, 1); DBG_INFO(AQPAYPAL_LOGDOMAIN, "- adding limits"); AB_TransactionLimits_List_Add(limits, tll); i++; } /* while */ return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqpaypal/dlg_edituser_l.h0000664000175000017500000000154014043610745022327 00000000000000/*************************************************************************** begin : Thu Jul 08 2010 copyright : (C) 2018 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQPAYPAL_DLG_EDITUSER_H #define AQPAYPAL_DLG_EDITUSER_H #include #include #include #include #ifdef __cplusplus extern "C" { #endif GWEN_DIALOG *APY_EditUserDialog_new(AB_PROVIDER *pro, AB_USER *u, int doLock); #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/plugins/backends/aqpaypal/dlg_newuser_l.h0000664000175000017500000000423414043610745022176 00000000000000/*************************************************************************** begin : Mon Apr 12 2010 copyright : (C) 2018 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQPAYPAL_DLG_PINTAN_H #define AQPAYPAL_DLG_PINTAN_H #include #include #include #include #include #ifdef __cplusplus extern "C" { #endif GWEN_DIALOG *APY_NewUserDialog_new(AB_PROVIDER *pro); const char *APY_NewUserDialog_GetUserName(const GWEN_DIALOG *dlg); void APY_NewUserDialog_SetUserName(GWEN_DIALOG *dlg, const char *s); const char *APY_NewUserDialog_GetUserId(const GWEN_DIALOG *dlg); void APY_NewUserDialog_SetUserId(GWEN_DIALOG *dlg, const char *s); const char *APY_NewUserDialog_GetApiUserId(const GWEN_DIALOG *dlg); void APY_NewUserDialog_SetApiUserId(GWEN_DIALOG *dlg, const char *s); const char *APY_NewUserDialog_GetApiPassword(const GWEN_DIALOG *dlg); void APY_NewUserDialog_SetApiPassword(GWEN_DIALOG *dlg, const char *s); const char *APY_NewUserDialog_GetApiSignature(const GWEN_DIALOG *dlg); void APY_NewUserDialog_SetApiSignature(GWEN_DIALOG *dlg, const char *s); const char *APY_NewUserDialog_GetUrl(const GWEN_DIALOG *dlg); void APY_NewUserDialog_SetUrl(GWEN_DIALOG *dlg, const char *s); int APY_NewUserDialog_GetHttpVMajor(const GWEN_DIALOG *dlg); int APY_NewUserDialog_GetHttpVMinor(const GWEN_DIALOG *dlg); void APY_NewUserDialog_SetHttpVersion(GWEN_DIALOG *dlg, int vmajor, int vminor); uint32_t APY_NewUserDialog_GetFlags(const GWEN_DIALOG *dlg); void APY_NewUserDialog_SetFlags(GWEN_DIALOG *dlg, uint32_t fl); void APY_NewUserDialog_AddFlags(GWEN_DIALOG *dlg, uint32_t fl); void APY_NewUserDialog_SubFlags(GWEN_DIALOG *dlg, uint32_t fl); AB_USER *APY_NewUserDialog_GetUser(const GWEN_DIALOG *dlg); #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/plugins/backends/aqpaypal/provider_credentials.c0000664000175000017500000001765714214726437023572 00000000000000/*************************************************************************** begin : Sat Dec 01 2018 copyright : (C) 2022 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "aqpaypal/provider_credentials.h" #include "aqpaypal/aqpaypal.h" #include #include #include #include #include #include #include #include #define I18N(msg) GWEN_I18N_Translate(PACKAGE, msg) #define AQPAYPAL_PASSWORD_ITERATIONS 1467 #define AQPAYPAL_CRYPT_ITERATIONS 648 static int _readFile(const char *fname, GWEN_BUFFER *dbuf); static int _writeToFile(FILE *f, const char *p, int len); static int _writeFile(const char *fname, const char *p, int len); int APY_Provider_ReadUserApiSecrets(AB_PROVIDER *pro, const AB_USER *u, GWEN_BUFFER *secbuf) { int rv; GWEN_BUFFER *pbuf; GWEN_BUFFER *sbuf; GWEN_BUFFER *tbuf; const char *uid; char text[512]; char pw[129]; uid=AB_User_GetUserId(u); if (!(uid && *uid)) { DBG_ERROR(AQPAYPAL_LOGDOMAIN, "No user id"); return GWEN_ERROR_INVALID; } pbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=AB_Provider_GetUserDataDir(pro, pbuf); if (rv<0) { DBG_INFO(AQPAYPAL_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(pbuf); return rv; } GWEN_Buffer_AppendString(pbuf, GWEN_DIR_SEPARATOR_S); GWEN_Text_UnescapeToBufferTolerant(uid, pbuf); GWEN_Buffer_AppendString(pbuf, ".sec"); sbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=_readFile(GWEN_Buffer_GetStart(pbuf), sbuf); if (rv<0) { DBG_INFO(AQPAYPAL_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(sbuf); GWEN_Buffer_free(pbuf); return rv; } snprintf(text, sizeof(text)-1, I18N("Please enter the password for \n" "Paypal user %s\n" "" "Please enter the password for Paypal user %s
" ""), uid, uid); text[sizeof(text)-1]=0; tbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(tbuf, "PASSWORD_"); GWEN_Text_UnescapeToBufferTolerant(GWEN_Buffer_GetStart(pbuf), tbuf); rv=GWEN_Gui_GetPassword(0, GWEN_Buffer_GetStart(tbuf), I18N("Enter Password"), text, pw, 4, sizeof(pw)-1, GWEN_Gui_PasswordMethod_Text, NULL, 0); if (rv<0) { DBG_INFO(AQPAYPAL_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); GWEN_Buffer_free(sbuf); GWEN_Buffer_free(pbuf); return rv; } rv=GWEN_SmallTresor_Decrypt((const uint8_t *) GWEN_Buffer_GetStart(sbuf), GWEN_Buffer_GetUsedBytes(sbuf), pw, secbuf, AQPAYPAL_PASSWORD_ITERATIONS, AQPAYPAL_CRYPT_ITERATIONS); /* overwrite password ASAP */ memset(pw, 0, sizeof(pw)); GWEN_Buffer_free(tbuf); GWEN_Buffer_free(sbuf); GWEN_Buffer_free(pbuf); if (rv<0) { DBG_INFO(AQPAYPAL_LOGDOMAIN, "here (%d)", rv); return rv; } return 0; } int APY_Provider_WriteUserApiSecrets(AB_PROVIDER *pro, const AB_USER *u, const char *sec) { int rv; GWEN_BUFFER *pbuf; GWEN_BUFFER *sbuf; GWEN_BUFFER *tbuf; const char *uid; char text[512]; char pw[129]; uid=AB_User_GetUserId(u); if (!(uid && *uid)) { DBG_ERROR(AQPAYPAL_LOGDOMAIN, "No user id"); return GWEN_ERROR_INVALID; } pbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=AB_Provider_GetUserDataDir(pro, pbuf); if (rv<0) { DBG_INFO(AQPAYPAL_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(pbuf); return rv; } /* make sure the data dir exists */ DBG_INFO(0, "Looking for [%s]", GWEN_Buffer_GetStart(pbuf)); rv=GWEN_Directory_GetPath(GWEN_Buffer_GetStart(pbuf), 0); if (rv<0) { DBG_INFO(AQPAYPAL_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(pbuf); return rv; } GWEN_Buffer_AppendString(pbuf, GWEN_DIR_SEPARATOR_S); GWEN_Text_UnescapeToBufferTolerant(uid, pbuf); GWEN_Buffer_AppendString(pbuf, ".sec"); snprintf(text, sizeof(text)-1, I18N("Please enter the password for \n" "Paypal user %s\n" "" "Please enter the password for Paypal user %s
" ""), uid, uid); text[sizeof(text)-1]=0; tbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(tbuf, "PASSWORD_"); GWEN_Text_UnescapeToBufferTolerant(GWEN_Buffer_GetStart(pbuf), tbuf); rv=GWEN_Gui_GetPassword(GWEN_GUI_INPUT_FLAGS_CONFIRM, GWEN_Buffer_GetStart(tbuf), I18N("Enter Password"), text, pw, 4, sizeof(pw)-1, GWEN_Gui_PasswordMethod_Text, NULL, 0); if (rv<0) { DBG_INFO(AQPAYPAL_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); GWEN_Buffer_free(pbuf); return rv; } GWEN_Buffer_free(tbuf); sbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_SmallTresor_Encrypt((const uint8_t *) sec, strlen(sec), pw, sbuf, AQPAYPAL_PASSWORD_ITERATIONS, AQPAYPAL_CRYPT_ITERATIONS); /* overwrite password ASAP */ memset(pw, 0, sizeof(pw)); if (rv<0) { DBG_INFO(AQPAYPAL_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(sbuf); GWEN_Buffer_free(pbuf); return rv; } /* write file */ rv=_writeFile(GWEN_Buffer_GetStart(pbuf), GWEN_Buffer_GetStart(sbuf), GWEN_Buffer_GetUsedBytes(sbuf)); if (rv<0) { DBG_INFO(AQPAYPAL_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(sbuf); GWEN_Buffer_free(pbuf); return rv; } GWEN_Buffer_free(sbuf); GWEN_Buffer_free(pbuf); return 0; } int _readFile(const char *fname, GWEN_BUFFER *dbuf) { FILE *f; f=fopen(fname, "rb"); if (f) { while (!feof(f)) { uint32_t l; ssize_t s; char *p; GWEN_Buffer_AllocRoom(dbuf, 1024); l=GWEN_Buffer_GetMaxUnsegmentedWrite(dbuf); p=GWEN_Buffer_GetPosPointer(dbuf); s=fread(p, 1, l, f); if (s==0) break; if (s==(ssize_t)-1) { DBG_ERROR(AQPAYPAL_LOGDOMAIN, "fread(%s): %s", fname, strerror(errno)); fclose(f); return GWEN_ERROR_IO; } GWEN_Buffer_IncrementPos(dbuf, s); GWEN_Buffer_AdjustUsedBytes(dbuf); } fclose(f); return 0; } else { DBG_ERROR(AQPAYPAL_LOGDOMAIN, "fopen(%s): %s", fname, strerror(errno)); return GWEN_ERROR_IO; } } int _writeToFile(FILE *f, const char *p, int len) { while (len>0) { ssize_t l; ssize_t s; l=1024; if (l>len) l=len; s=fwrite(p, 1, l, f); if (s==(ssize_t)-1 || s==0) { DBG_ERROR(AQPAYPAL_LOGDOMAIN, "fwrite: %s", strerror(errno)); return GWEN_ERROR_IO; } p+=s; len-=s; } return 0; } int _writeFile(const char *fname, const char *p, int len) { FILE *f; f=fopen(fname, "wb"); if (f) { int rv; rv=_writeToFile(f, p, len); if (rv<0) { DBG_ERROR(AQPAYPAL_LOGDOMAIN, "here (%d)", rv); fclose(f); return rv; } if (fclose(f)) { DBG_ERROR(AQPAYPAL_LOGDOMAIN, "here (%d)", rv); return rv; } } else { DBG_ERROR(AQPAYPAL_LOGDOMAIN, "fopen(%s): %s", fname, strerror(errno)); return GWEN_ERROR_IO; } return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqpaypal/provider_getbalance.h0000664000175000017500000000160314214726437023347 00000000000000/*************************************************************************** begin : Sat Dec 01 2018 copyright : (C) 2022 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AQPAYPAL_PROVIDER_GETBALANCE_H #define AQPAYPAL_PROVIDER_GETBALANCE_H #include #include #include #include int APY_Provider_ExecGetBal(AB_PROVIDER *pro, AB_IMEXPORTER_ACCOUNTINFO *ai, AB_USER *u, AB_TRANSACTION *j); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqpaypal/provider_sendcmd.c0000664000175000017500000003234714546575650022712 00000000000000/*************************************************************************** begin : Sat Dec 01 2018 copyright : (C) 2022 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "aqpaypal/provider_sendcmd.h" #include "aqpaypal/provider_credentials.h" #include "aqpaypal/provider_getbalance.h" #include "aqpaypal/provider_getstm.h" #include "aqpaypal/user_l.h" #include #include #include #define I18N(msg) GWEN_I18N_Translate(PACKAGE, msg) static int _addJobToList2(AB_PROVIDER *pro, AB_TRANSACTION *j, AB_TRANSACTION_LIST2 *jobList); static int _sendJobList(AB_PROVIDER *pro, AB_USER *u, AB_ACCOUNT *a, AB_TRANSACTION_LIST2 *jobList, AB_IMEXPORTER_CONTEXT *ctx, AB_IMEXPORTER_ACCOUNTINFO *ai); static int _sendAccountQueue(AB_PROVIDER *pro, AB_USER *u, AB_ACCOUNTQUEUE *aq, AB_IMEXPORTER_CONTEXT *ctx); static int _sendUserQueue(AB_PROVIDER *pro, AB_USERQUEUE *uq, AB_IMEXPORTER_CONTEXT *ctx); int APY_Provider_SendCommands(AB_PROVIDER *pro, AB_PROVIDERQUEUE *pq, AB_IMEXPORTER_CONTEXT *ctx) { AB_USERQUEUE_LIST *uql; AB_USERQUEUE *uq; int rv; /* sort into user queue list */ uql=AB_UserQueue_List_new(); rv=AB_Provider_SortProviderQueueIntoUserQueueList(pro, pq, uql); if (rv<0) { DBG_INFO(AQPAYPAL_LOGDOMAIN, "here (%d)", rv); AB_Provider_FreeUsersAndAccountsFromUserQueueList(pro, uql); AB_UserQueue_List_free(uql); return rv; } uq=AB_UserQueue_List_First(uql); while (uq) { int rv; rv=_sendUserQueue(pro, uq, ctx); if (rv<0) { DBG_INFO(AQPAYPAL_LOGDOMAIN, "here (%d)", rv); } uq=AB_UserQueue_List_Next(uq); } /* release accounts and users we loaded */ AB_Provider_FreeUsersAndAccountsFromUserQueueList(pro, uql); return 0; } int _addJobToList2(AB_PROVIDER *pro, AB_TRANSACTION *j, AB_TRANSACTION_LIST2 *jobList) { uint32_t aid=0; int doAdd=1; aid=AB_Transaction_GetUniqueAccountId(j); assert(aid); switch (AB_Transaction_GetCommand(j)) { case AB_Transaction_CommandGetBalance: case AB_Transaction_CommandGetTransactions: break; case AB_Transaction_CommandTransfer: case AB_Transaction_CommandDebitNote: default: DBG_INFO(AQPAYPAL_LOGDOMAIN, "Job not supported (%d)", AB_Transaction_GetCommand(j)); return GWEN_ERROR_NOT_SUPPORTED; } /* switch */ if (AB_Transaction_GetCommand(j)==AB_Transaction_CommandGetBalance) { AB_TRANSACTION_LIST2_ITERATOR *jit; /* check whether a getBalance job already exists. If it does then * we don't have to send this job again, once is enough. */ jit=AB_Transaction_List2_First(jobList); if (jit) { AB_TRANSACTION *uj; uj=AB_Transaction_List2Iterator_Data(jit); assert(uj); while (uj) { AB_TRANSACTION_COMMAND jt; jt=AB_Transaction_GetCommand(uj); //if (jt==AB_Transaction_CommandGetBalance || // jt==AB_Transaction_CommandGetTransactions) { if (jt==AB_Transaction_CommandGetBalance) { if (AB_Transaction_GetUniqueAccountId(uj)==aid) { /* let new job refer to the only already in queue */ AB_Transaction_SetRefUniqueId(j, AB_Transaction_GetUniqueId(uj)); doAdd=0; break; } } uj=AB_Transaction_List2Iterator_Next(jit); } /* while */ AB_Transaction_List2Iterator_free(jit); } } else if (AB_Transaction_GetCommand(j)==AB_Transaction_CommandGetTransactions) { AB_TRANSACTION_LIST2_ITERATOR *jit; const GWEN_DATE *dtnew; /* check whether a getTransactions job already exists. If it does then * we don't have to send this job again, once is enough. */ dtnew=AB_Transaction_GetFirstDate(j); jit=AB_Transaction_List2_First(jobList); if (jit) { AB_TRANSACTION *uj; uj=AB_Transaction_List2Iterator_Data(jit); assert(uj); while (uj) { AB_TRANSACTION_COMMAND jt; jt=AB_Transaction_GetCommand(uj); if (jt==AB_Transaction_CommandGetTransactions) { if (AB_Transaction_GetUniqueAccountId(uj)==aid) { if (dtnew) { const GWEN_DATE *dtcurr; dtcurr=AB_Transaction_GetFirstDate(uj); if (dtcurr) { /* current job has a time */ if (GWEN_Date_Diff(dtcurr, dtnew)>0) { /* new time is before that of current job, replace */ AB_Transaction_SetRefUniqueId(uj, AB_Transaction_GetUniqueId(j)); AB_Transaction_List2_Erase(jobList, jit); doAdd=1; break; } } else { /* current job has no time, so replace by job with time */ AB_Transaction_SetRefUniqueId(uj, AB_Transaction_GetUniqueId(j)); AB_Transaction_List2_Erase(jobList, jit); doAdd=1; break; } } else { /* new job has no time, so don't add it */ AB_Transaction_SetRefUniqueId(j, AB_Transaction_GetUniqueId(uj)); doAdd=0; break; } } /* if same account */ } /* if GetTransactions */ uj=AB_Transaction_List2Iterator_Next(jit); } /* while */ AB_Transaction_List2Iterator_free(jit); } } if (doAdd) { /* only add to queue if needed */ AB_Transaction_SetStatus(j, AB_Transaction_StatusEnqueued); AB_Transaction_List2_PushBack(jobList, j); } return 0; } int _sendJobList(AB_PROVIDER *pro, AB_USER *u, AB_ACCOUNT *a, AB_TRANSACTION_LIST2 *jobList, AB_IMEXPORTER_CONTEXT *ctx, AB_IMEXPORTER_ACCOUNTINFO *ai) { AB_TRANSACTION_LIST2_ITERATOR *jit; /* check whether a getBalance job already exists. If it does then * we don't have to send this job again, once is enough. */ jit=AB_Transaction_List2_First(jobList); if (jit) { AB_TRANSACTION *uj; uj=AB_Transaction_List2Iterator_Data(jit); assert(uj); while (uj) { AB_TRANSACTION_COMMAND jt; int rv; jt=AB_Transaction_GetCommand(uj); if (jt==AB_Transaction_CommandGetBalance || jt==AB_Transaction_CommandGetTransactions) { AB_Transaction_SetStatus(uj, AB_Transaction_StatusSending); //rv=APY_Provider_RequestStatements(pro, u, a, uj, ctx); /* request balance */ if (jt==AB_Transaction_CommandGetBalance) rv=APY_Provider_ExecGetBal(pro, ai, u, uj); /* request statements */ if (jt==AB_Transaction_CommandGetTransactions) rv=APY_Provider_ExecGetTrans(pro, ai, u, uj); if (rv==GWEN_ERROR_USER_ABORTED) { DBG_INFO(AQPAYPAL_LOGDOMAIN, "User aborted"); AB_Transaction_List2Iterator_free(jit); AB_Transaction_SetStatus(uj, AB_Transaction_StatusAborted); return rv; } else if (rv==GWEN_ERROR_ABORTED) { DBG_ERROR(AQPAYPAL_LOGDOMAIN, "Aborted"); AB_Transaction_List2Iterator_free(jit); AB_Transaction_SetStatus(uj, AB_Transaction_StatusAborted); return rv; } else if (rv<0) { DBG_INFO(AQPAYPAL_LOGDOMAIN, "here (%d)", rv); AB_Transaction_SetStatus(uj, AB_Transaction_StatusError); } else { AB_Transaction_SetStatus(uj, AB_Transaction_StatusAccepted); } } else { DBG_ERROR(AQPAYPAL_LOGDOMAIN, "Job not supported"); AB_Transaction_SetStatus(uj, AB_Transaction_StatusError); } rv=GWEN_Gui_ProgressAdvance(0, GWEN_GUI_PROGRESS_ONE); if (rv==GWEN_ERROR_USER_ABORTED) { DBG_INFO(AQPAYPAL_LOGDOMAIN, "User aborted"); AB_Transaction_List2Iterator_free(jit); return rv; } uj=AB_Transaction_List2Iterator_Next(jit); } /* while */ AB_Transaction_List2Iterator_free(jit); } return 0; } int _sendAccountQueue(AB_PROVIDER *pro, AB_USER *u, AB_ACCOUNTQUEUE *aq, AB_IMEXPORTER_CONTEXT *ctx) { AB_ACCOUNT *a; AB_TRANSACTION_LIST2 *tl2; AB_TRANSACTION_LIST2 *toSend; AB_IMEXPORTER_ACCOUNTINFO *ai; a=AB_AccountQueue_GetAccount(aq); assert(a); DBG_ERROR(0, "Handling account \"%lu\"", (unsigned long int)AB_Account_GetUniqueId(a)); ai=AB_ImExporterContext_GetOrAddAccountInfo(ctx, AB_Account_GetUniqueId(a), AB_Account_GetIban(a), AB_Account_GetBankCode(a), AB_Account_GetAccountNumber(a), AB_Account_GetAccountType(a)); if (ai==NULL) { DBG_ERROR(AQPAYPAL_LOGDOMAIN, "Could not create account info"); return GWEN_ERROR_GENERIC; } toSend=AB_Transaction_List2_new(); /* read transactions */ tl2=AB_AccountQueue_GetTransactionList(aq); if (tl2) { AB_TRANSACTION_LIST2_ITERATOR *it; it=AB_Transaction_List2_First(tl2); if (it) { AB_TRANSACTION *t; t=AB_Transaction_List2Iterator_Data(it); while (t) { int rv; /* add job to the list of jobs to send */ rv=_addJobToList2(pro, t, toSend); if (rv<0) { AB_TRANSACTION *tCopy; DBG_INFO(AQPAYPAL_LOGDOMAIN, "here (%d)", rv); /* error, add a transaction copy with error status to the context */ tCopy=AB_Transaction_dup(t); AB_Transaction_SetStatus(tCopy, AB_Transaction_StatusError); AB_ImExporterContext_AddTransaction(ctx, tCopy); if (rv==GWEN_ERROR_USER_ABORTED) { AB_Transaction_List2Iterator_free(it); AB_Transaction_List2_free(toSend); return rv; } } t=AB_Transaction_List2Iterator_Next(it); } AB_Transaction_List2Iterator_free(it); } } /* send jobs */ if (AB_Transaction_List2_GetSize(toSend)) { int rv; rv=_sendJobList(pro, u, a, toSend, ctx, ai); if (rv<0) { DBG_INFO(AQPAYPAL_LOGDOMAIN, "here (%d)", rv); } } AB_Transaction_List2_free(toSend); return 0; } int _sendUserQueue(AB_PROVIDER *pro, AB_USERQUEUE *uq, AB_IMEXPORTER_CONTEXT *ctx) { AB_ACCOUNTQUEUE_LIST *aql; AB_USER *u; assert(uq); u=AB_UserQueue_GetUser(uq); assert(u); DBG_ERROR(0, "Handling user \"%s\"", AB_User_GetUserId(u)); aql=AB_UserQueue_GetAccountQueueList(uq); if (aql) { AB_ACCOUNTQUEUE *aq; int rv; GWEN_BUFFER *xbuf; GWEN_Gui_ProgressLog2(0, GWEN_LoggerLevel_Info, I18N("Locking customer \"%lu\""), (unsigned long int) AB_User_GetUniqueId(u)); rv=AB_Provider_BeginExclUseUser(pro, u); if (rv<0) { DBG_INFO(AQPAYPAL_LOGDOMAIN, "Could not lock user [%lu] (%d)", (unsigned long int) AB_User_GetUniqueId(u), rv); GWEN_Gui_ProgressLog2(0, GWEN_LoggerLevel_Error, I18N("Could not lock user \"%lu\""), (unsigned long int) AB_User_GetUniqueId(u)); AB_Provider_EndExclUseUser(pro, u, 1); /* abandon */ return rv; } /* read secrets */ xbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=APY_Provider_ReadUserApiSecrets(pro, u, xbuf); if (rv<0) { DBG_INFO(AQPAYPAL_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(xbuf); AB_Provider_EndExclUseUser(pro, u, 1); /* abandon */ return rv; } else { char *t; char *t2=NULL; GWEN_BUFFER *sbuf1; GWEN_BUFFER *sbuf2; GWEN_BUFFER *sbuf3; t=strchr(GWEN_Buffer_GetStart(xbuf), ':'); if (t) { *(t++)=0; t2=strchr(t, ':'); if (t2) { *(t2++)=0; } } sbuf1=GWEN_Buffer_new(0, 256, 0, 1); sbuf2=GWEN_Buffer_new(0, 256, 0, 1); sbuf3=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Text_UnescapeToBufferTolerant(GWEN_Buffer_GetStart(xbuf), sbuf1); if (t) { GWEN_Text_UnescapeToBufferTolerant(t, sbuf2); t=GWEN_Buffer_GetStart(sbuf2); if (t2) { GWEN_Text_UnescapeToBufferTolerant(t2, sbuf3); } } APY_User_SetApiSecrets_l(u, GWEN_Buffer_GetStart(sbuf1), GWEN_Buffer_GetStart(sbuf2), GWEN_Buffer_GetStart(sbuf3)); GWEN_Buffer_free(xbuf); GWEN_Buffer_free(sbuf3); GWEN_Buffer_free(sbuf2); GWEN_Buffer_free(sbuf1); } aq=AB_AccountQueue_List_First(aql); while (aq) { int rv; rv=_sendAccountQueue(pro, u, aq, ctx); if (rv<0) { DBG_INFO(AQPAYPAL_LOGDOMAIN, "here (%d)", rv); } aq=AB_AccountQueue_List_Next(aq); } /* while aq */ /* erase secrets */ APY_User_SetApiSecrets_l(u, NULL, NULL, NULL); GWEN_Gui_ProgressLog2(0, GWEN_LoggerLevel_Info, I18N("Unlocking customer \"%lu\""), (unsigned long int) AB_User_GetUniqueId(u)); rv=AB_Provider_EndExclUseUser(pro, u, 0); if (rv<0) { GWEN_Gui_ProgressLog2(0, GWEN_LoggerLevel_Error, I18N("Could not unlock user \"%lu\""), (unsigned long int) AB_User_GetUniqueId(u)); AB_Provider_EndExclUseUser(pro, u, 1); /* abandon */ return rv; } } return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqpaypal/provider_update.h0000664000175000017500000000141414214726437022544 00000000000000/*************************************************************************** begin : Sun Dec 02 2018 copyright : (C) 2022 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AQPAYPAL_PROVIDER_UPDATE_H #define AQPAYPAL_PROVIDER_UPDATE_H #include #include int APY_Provider_UpdatePreInit(AB_PROVIDER *pro, uint32_t lastVersion, uint32_t currentVersion); int APY_Provider_UpdatePostInit(AB_PROVIDER *pro, uint32_t lastVersion, uint32_t currentVersion); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqpaypal/control/0000755000175000017500000000000015037736164020737 500000000000000aqbanking-6.6.1/src/libs/plugins/backends/aqpaypal/control/listusers.c0000664000175000017500000001023014043610745023046 00000000000000/*************************************************************************** begin : Fri Sep 18 2009 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals_l.h" #include #include #include #include #include #include int APY_Control_ListUsers(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; int rv; int xml=0; AB_USER_LIST *ul; AB_USER *u; int i=0; const GWEN_ARGS args[]= { { 0, /* flags */ GWEN_ArgsType_Int, /* type */ "xml", /* name */ 0, /* minnum */ 1, /* maxnum */ 0, /* short option */ "xml", /* long option */ "Export as xml", /* short description */ 0 }, { 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; } xml=GWEN_DB_VariableExists(db, "xml"); if (xml) { fprintf(stdout, "\n"); fprintf(stdout, "\n"); } ul=AB_User_List_new(); rv=AB_Provider_ReadUsers(pro, ul); if (rv<0 && rv!=GWEN_ERROR_NOT_FOUND) { DBG_ERROR_ERR(0, rv); AB_User_List_free(ul); return 3; } u=AB_User_List_First(ul); while (u) { if (!xml) { fprintf(stdout, "User %d: Bank: %s/%s User Id: %s Customer Id: %s Unique Id: %lu\n", i++, AB_User_GetCountry(u), AB_User_GetBankCode(u), AB_User_GetUserId(u), AB_User_GetCustomerId(u), (unsigned long int) AB_User_GetUniqueId(u)); } else { const char *name = AB_User_GetUserName(u); fprintf(stdout, " \n"); fprintf(stdout, " %lu\n", (unsigned long int) AB_User_GetUniqueId(u)); if (!name) fprintf(stdout, " \n"); else fprintf(stdout, " \n", name); fprintf(stdout, " %s\n", AB_User_GetUserId(u)); fprintf(stdout, " %s\n", AB_User_GetCustomerId(u)); fprintf(stdout, " %s\n", AB_User_GetBankCode(u)); fprintf(stdout, " %s\n", AB_User_GetCountry(u)); fprintf(stdout, " %d\n", AB_User_GetLastSessionId(u)); fprintf(stdout, " \n\n"); } u=AB_User_List_Next(u); } AB_User_List_free(ul); if (xml) { fprintf(stdout, "\n"); } return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqpaypal/control/Makefile.in0000644000175000017500000005757615037736026022745 00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/libs/plugins/backends/aqpaypal/control ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/distri.m4 $(top_srcdir)/m4/gwenhywfar.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/os.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libpaypalcontrol_la_LIBADD = am_libpaypalcontrol_la_OBJECTS = main.lo adduser.lo listaccounts.lo \ listusers.lo setsecrets.lo libpaypalcontrol_la_OBJECTS = $(am_libpaypalcontrol_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/adduser.Plo \ ./$(DEPDIR)/listaccounts.Plo ./$(DEPDIR)/listusers.Plo \ ./$(DEPDIR)/main.Plo ./$(DEPDIR)/setsecrets.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libpaypalcontrol_la_SOURCES) DIST_SOURCES = $(libpaypalcontrol_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac HEADERS = $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADD_ACLOCAL_FLAGS = @ADD_ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AQBANKING_CLI_VERSION_STRING = @AQBANKING_CLI_VERSION_STRING@ AQBANKING_FINTS_VERSION_STRING = @AQBANKING_FINTS_VERSION_STRING@ AQBANKING_SO_AGE = @AQBANKING_SO_AGE@ AQBANKING_SO_CURRENT = @AQBANKING_SO_CURRENT@ AQBANKING_SO_EFFECTIVE = @AQBANKING_SO_EFFECTIVE@ AQBANKING_SO_REVISION = @AQBANKING_SO_REVISION@ AQBANKING_VERSION_BUILD = @AQBANKING_VERSION_BUILD@ AQBANKING_VERSION_FULL_STRING = @AQBANKING_VERSION_FULL_STRING@ AQBANKING_VERSION_MAJOR = @AQBANKING_VERSION_MAJOR@ AQBANKING_VERSION_MINOR = @AQBANKING_VERSION_MINOR@ AQBANKING_VERSION_PATCHLEVEL = @AQBANKING_VERSION_PATCHLEVEL@ AQBANKING_VERSION_RELEASE_STRING = @AQBANKING_VERSION_RELEASE_STRING@ AQBANKING_VERSION_STRING = @AQBANKING_VERSION_STRING@ AQBANKING_VERSION_TAG = @AQBANKING_VERSION_TAG@ AQEBICS_CFLAGS = @AQEBICS_CFLAGS@ AQEBICS_LIBS = @AQEBICS_LIBS@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATETIME = @DATETIME@ DEFS = @DEFS@ -DLOCALEDIR=\"$(localedir)\" DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_EXCLUDE_PATTERNS = @DOXYGEN_EXCLUDE_PATTERNS@ DOXYGEN_FILE_PATTERNS = @DOXYGEN_FILE_PATTERNS@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENGUI_GTK2_CFLAGS = @GWENGUI_GTK2_CFLAGS@ GWENGUI_GTK2_LIBS = @GWENGUI_GTK2_LIBS@ GWENHYWFAR_MINIMUM_VERSION = @GWENHYWFAR_MINIMUM_VERSION@ HAVE_GWENGUI_GTK2 = @HAVE_GWENGUI_GTK2@ HAVE_I18N = @HAVE_I18N@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIBXSLT_CFLAGS = @LIBXSLT_CFLAGS@ LIBXSLT_LIBS = @LIBXSLT_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_SUPPORTS_QT = @MSGFMT_SUPPORTS_QT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ TUTORIALS = @TUTORIALS@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XMLMERGE = @XMLMERGE@ XMLSEC_CFLAGS = @XMLSEC_CFLAGS@ XMLSEC_LIBS = @XMLSEC_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ aqbanking_backends = @aqbanking_backends@ aqbanking_cfg_searchdir = @aqbanking_cfg_searchdir@ aqbanking_data_searchdir = @aqbanking_data_searchdir@ aqbanking_headerdir = @aqbanking_headerdir@ aqbanking_headerdir_am = @aqbanking_headerdir_am@ aqbanking_includes = @aqbanking_includes@ aqbanking_internal_libs = @aqbanking_internal_libs@ aqbanking_ldflags = @aqbanking_ldflags@ aqbanking_libs = @aqbanking_libs@ aqbanking_locale_searchdir = @aqbanking_locale_searchdir@ aqbanking_modules = @aqbanking_modules@ aqbanking_pkgdatadir = @aqbanking_pkgdatadir@ aqbanking_plugin_searchdir = @aqbanking_plugin_searchdir@ aqbanking_plugindir = @aqbanking_plugindir@ aqbanking_plugins_backends_dirs = @aqbanking_plugins_backends_dirs@ aqbanking_plugins_backends_libs = @aqbanking_plugins_backends_libs@ aqbanking_plugins_bankinfo_dirs = @aqbanking_plugins_bankinfo_dirs@ aqbanking_plugins_bankinfo_libs = @aqbanking_plugins_bankinfo_libs@ aqbanking_plugins_imexporters_dirs = @aqbanking_plugins_imexporters_dirs@ aqbanking_plugins_imexporters_libs = @aqbanking_plugins_imexporters_libs@ aqbanking_plugins_parsers_dirs = @aqbanking_plugins_parsers_dirs@ aqbanking_symlinkdir = @aqbanking_symlinkdir@ aqbanking_sys_is_windows = @aqbanking_sys_is_windows@ aqbankingpp_modules = @aqbankingpp_modules@ aqebics_datadir = @aqebics_datadir@ aqebics_includes = @aqebics_includes@ aqebics_internal_libs = @aqebics_internal_libs@ aqebics_ldflags = @aqebics_ldflags@ aqebics_libs = @aqebics_libs@ aqfints_datadir = @aqfints_datadir@ aqhbci_datadir = @aqhbci_datadir@ aqhbci_includes = @aqhbci_includes@ aqhbci_internal_libs = @aqhbci_internal_libs@ aqhbci_ldflags = @aqhbci_ldflags@ aqhbci_libs = @aqhbci_libs@ aqofxconnect_includes = @aqofxconnect_includes@ aqofxconnect_internal_libs = @aqofxconnect_internal_libs@ aqofxconnect_libs = @aqofxconnect_libs@ aqpaypal_includes = @aqpaypal_includes@ aqpaypal_internal_libs = @aqpaypal_internal_libs@ aqpaypal_libs = @aqpaypal_libs@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gmp_libs = @gmp_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_dir = @gwenhywfar_dir@ gwenhywfar_has_crypt = @gwenhywfar_has_crypt@ gwenhywfar_headers = @gwenhywfar_headers@ gwenhywfar_includes = @gwenhywfar_includes@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_plugins = @gwenhywfar_plugins@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = $(datadir)/locale localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ typemaker2_exe = @typemaker2_exe@ visibility_cflags = @visibility_cflags@ with_aqebics = @with_aqebics@ with_aqhbci = @with_aqhbci@ AM_CFLAGS = -DBUILDING_AQBANKING @visibility_cflags@ AM_CPPFLAGS = -I$(top_srcdir)/src/libs -I$(top_builddir)/src/libs $(gwenhywfar_includes) -I$(srcdir)/../.. noinst_LTLIBRARIES = libpaypalcontrol.la noinst_HEADERS = \ globals_l.h \ control_l.h #iheaderdir=@aqbanking_headerdir_am@/aqpaypal #iheader_HEADERS= libpaypalcontrol_la_SOURCES = \ main.c \ adduser.c \ listaccounts.c \ listusers.c \ setsecrets.c all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libs/plugins/backends/aqpaypal/control/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libs/plugins/backends/aqpaypal/control/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libpaypalcontrol.la: $(libpaypalcontrol_la_OBJECTS) $(libpaypalcontrol_la_DEPENDENCIES) $(EXTRA_libpaypalcontrol_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libpaypalcontrol_la_OBJECTS) $(libpaypalcontrol_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/adduser.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/listaccounts.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/listusers.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/setsecrets.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/adduser.Plo -rm -f ./$(DEPDIR)/listaccounts.Plo -rm -f ./$(DEPDIR)/listusers.Plo -rm -f ./$(DEPDIR)/main.Plo -rm -f ./$(DEPDIR)/setsecrets.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/adduser.Plo -rm -f ./$(DEPDIR)/listaccounts.Plo -rm -f ./$(DEPDIR)/listusers.Plo -rm -f ./$(DEPDIR)/main.Plo -rm -f ./$(DEPDIR)/setsecrets.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-generic clean-libtool clean-noinstLTLIBRARIES \ cscopelist-am ctags ctags-am distclean distclean-compile \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am .PRECIOUS: Makefile #EXTRA_DIST= sources: for f in $(libpaypalcontrol_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d sources; \ done cppcheck: for f in $(libpaypalcontrol_la_SOURCES); do \ cppcheck --force $$f ; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: aqbanking-6.6.1/src/libs/plugins/backends/aqpaypal/control/main.c0000664000175000017500000000512514043610745021744 00000000000000/*************************************************************************** begin : Tue May 03 2005 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include #include "globals_l.h" #define I18N(msg) GWEN_I18N_Translate(PACKAGE, msg) static void showUsage() { GWEN_BUFFER *ubuf; ubuf=GWEN_Buffer_new(0, 1024, 0, 1); GWEN_Buffer_AppendString(ubuf, I18N("Commands:\n\n")); GWEN_Buffer_AppendString(ubuf, I18N(" listusers:\n" " show Paypal users " "\n\n")); GWEN_Buffer_AppendString(ubuf, I18N(" listaccounts:\n" " show Paypal accounts " "\n\n")); GWEN_Buffer_AppendString(ubuf, I18N(" adduser:\n" " add a Paypal user and a corresponding account " "\n\n")); GWEN_Buffer_AppendString(ubuf, I18N(" setsecrets:\n" " set credentials for Paypal API " "\n\n")); fprintf(stdout, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); } int APY_Control(AB_PROVIDER *pro, int argc, char **argv) { GWEN_DB_NODE *db; const char *cmd; int rv; db=GWEN_DB_Group_new("arguments"); if (argc<1) { showUsage(); return 0; } cmd=argv[0]; if (!(cmd && *cmd)) { fprintf(stderr, "ERROR: Command needed.\n"); GWEN_DB_Group_free(db); return 1; } if (strcasecmp(cmd, "help")==0) { showUsage(); rv=0; } else if (strcasecmp(cmd, "listusers")==0) { rv=APY_Control_ListUsers(pro, db, argc, argv); } else if (strcasecmp(cmd, "listaccounts")==0) { rv=APY_Control_ListAccounts(pro, db, argc, argv); } else if (strcasecmp(cmd, "adduser")==0) { rv=APY_Control_AddUser(pro, db, argc, argv); } else if (strcasecmp(cmd, "setsecrets")==0) { rv=APY_Control_SetSecrets(pro, db, argc, argv); } else { fprintf(stderr, "ERROR: Unknown command \"%s\".\n", cmd); rv=1; } return rv; } aqbanking-6.6.1/src/libs/plugins/backends/aqpaypal/control/control_l.h0000664000175000017500000000113314043610745023013 00000000000000/*************************************************************************** begin : Wed Dec 05 2018 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AQPAYPAL_CONTROL_BE_H #define AQPAYPAL_CONTROL_BE_H #include int APY_Control(AB_PROVIDER *pro, int argc, char **argv); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqpaypal/control/listaccounts.c0000664000175000017500000000642214043610745023534 00000000000000/*************************************************************************** begin : Fri Sep 18 2009 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals_l.h" #include #include #include #include int APY_Control_ListAccounts(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; int rv, verbose; AB_ACCOUNT_LIST *al; AB_ACCOUNT *a; int i=0; const GWEN_ARGS args[]= { { 0, /* flags */ GWEN_ArgsType_Int, /* type */ "verbose", /* name */ 0, /* minnum */ 1, /* maxnum */ "v", /* short option */ "verbose", /* long option */ "Show list in verbose form (with more columns)", /* short description */ 0 }, { 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; } verbose = GWEN_DB_VariableExists(db, "verbose"); al=AB_Account_List_new(); rv=AB_Provider_ReadAccounts(pro, al); if (rv<0) { DBG_ERROR_ERR(0, rv); AB_Account_List_free(al); return 3; } a=AB_Account_List_First(al); while (a) { fprintf(stdout, "Account %d: Bank: %s Account Number: %s", i++, AB_Account_GetBankCode(a), AB_Account_GetAccountNumber(a)); if (verbose) { const char *subAccountId = AB_Account_GetSubAccountId(a); fprintf(stdout, " SubAccountId: %s LocalUniqueId: %d", subAccountId ? subAccountId : "(none)", AB_Account_GetUniqueId(a)); } fprintf(stdout, "\n"); a=AB_Account_List_Next(a); } AB_Account_List_free(al); return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqpaypal/control/Makefile.am0000664000175000017500000000150314043610745022704 00000000000000 AM_CFLAGS=-DBUILDING_AQBANKING @visibility_cflags@ AM_CPPFLAGS = -I$(top_srcdir)/src/libs -I$(top_builddir)/src/libs $(gwenhywfar_includes) -I$(srcdir)/../.. localedir = $(datadir)/locale DEFS += -DLOCALEDIR=\"$(localedir)\" noinst_LTLIBRARIES=libpaypalcontrol.la noinst_HEADERS=\ globals_l.h \ control_l.h #iheaderdir=@aqbanking_headerdir_am@/aqpaypal #iheader_HEADERS= libpaypalcontrol_la_SOURCES=\ main.c \ adduser.c \ listaccounts.c \ listusers.c \ setsecrets.c #EXTRA_DIST= sources: for f in $(libpaypalcontrol_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d sources; \ done cppcheck: for f in $(libpaypalcontrol_la_SOURCES); do \ cppcheck --force $$f ; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done aqbanking-6.6.1/src/libs/plugins/backends/aqpaypal/control/globals_l.h0000664000175000017500000000270714043610745022766 00000000000000/*************************************************************************** begin : Sat May 08 2010 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AQPAYPAL_TOOL_GLOBALS_H #define AQPAYPAL_TOOL_GLOBALS_H #include #include #include #include "control_l.h" int APY_Control_ListUsers(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv); int APY_Control_ListAccounts(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv); int APY_Control_AddUser(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv); int APY_Control_AddAccount(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv); int APY_Control_SetSecrets(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqpaypal/control/adduser.c0000664000175000017500000001666614043610745022463 00000000000000/*************************************************************************** begin : Mon May 10 2010 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals_l.h" #include #include #include #include #include #include #include int APY_Control_AddUser(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; AB_USER *user; int rv; const char *userId; const char *apiUserId; const char *apiPassword; const char *apiSignature; const char *userName; const char *server; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "userId", /* name */ 0, /* minnum */ 1, /* maxnum */ "u", /* short option */ "user", /* long option */ "Specify the user id (Benutzerkennung)", /* short description */ "Specify the user id (Benutzerkennung)" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "password", /* name */ 1, /* minnum */ 1, /* maxnum */ "P", /* short option */ "password", /* long option */ "Specify the API password", /* short description */ "Specify the API password" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "signature", /* name */ 1, /* minnum */ 1, /* maxnum */ "S", /* short option */ "signature", /* long option */ "Specify the API signature", /* short description */ "Specify the API signature" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "apiUserId", /* name */ 1, /* minnum */ 1, /* maxnum */ "U", /* short option */ "apiuserid", /* long option */ "Specify the API user id", /* short description */ "Specify the API user id" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "serverAddr", /* name */ 0, /* minnum */ 1, /* maxnum */ "s", /* short option */ "server", /* long option */ "Specify the server URL", /* short description */ "Specify the server URL" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "userName", /* name */ 1, /* minnum */ 1, /* maxnum */ "N", /* short option */ "username", /* long option */ "Specify the realname of the user", /* short description */ "Specify the realname of the user" /* 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(stdout, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } userId=GWEN_DB_GetCharValue(db, "userId", 0, NULL); apiUserId=GWEN_DB_GetCharValue(db, "apiUserId", 0, NULL); apiPassword=GWEN_DB_GetCharValue(db, "password", 0, NULL); apiSignature=GWEN_DB_GetCharValue(db, "signature", 0, NULL); userName=GWEN_DB_GetCharValue(db, "userName", 0, NULL); server=GWEN_DB_GetCharValue(db, "serverAddr", 0, "https://api-3t.paypal.com/nvp"); user=AB_Provider_CreateUserObject(pro); assert(user); AB_User_SetCountry(user, "de"); AB_User_SetBankCode(user, "PAYPAL"); AB_User_SetUserId(user, userId); AB_User_SetCustomerId(user, userId); AB_User_SetUserName(user, userName); APY_User_SetServerUrl(user, server); /* add user */ rv=AB_Provider_AddUser(pro, user); if (rv<0) { DBG_ERROR(AQPAYPAL_LOGDOMAIN, "Error on AB_Provider_AddUser (%d)\n", rv); AB_User_free(user); return 3; } rv=AB_Provider_BeginExclUseUser(pro, user); if (rv<0) { fprintf(stderr, "ERROR: Could not lock user (%d)\n", rv); AB_User_free(user); return 3; } rv=APY_User_SetApiSecrets(user, apiPassword, apiSignature, apiUserId); if (rv<0) { DBG_ERROR(AQPAYPAL_LOGDOMAIN, "Error on APY_User_SetApiSecrets (%d)", rv); AB_Provider_EndExclUseUser(pro, user, 1); AB_User_free(user); return 3; } rv=AB_Provider_EndExclUseUser(pro, user, 0); if (rv<0) { DBG_INFO(AQPAYPAL_LOGDOMAIN, "here (%d)", rv); AB_Provider_EndExclUseUser(pro, user, 1); AB_User_free(user); return rv; } if (1) { AB_ACCOUNT *account; int rv; static char accountname[256]; account=AB_Provider_CreateAccountObject(pro); assert(account); AB_Account_SetOwnerName(account, userName); AB_Account_SetAccountNumber(account, userId); AB_Account_SetBankCode(account, "PAYPAL"); AB_Account_SetBankName(account, "PAYPAL"); strcpy(accountname, "PP "); strcat(accountname, userName); AB_Account_SetAccountName(account, accountname); AB_Account_SetUserId(account, AB_User_GetUniqueId(user)); rv=AB_Provider_AddAccount(pro, account, 1); /* do lock corresponding user */ if (rv<0) { DBG_INFO(AQPAYPAL_LOGDOMAIN, "Error adding account (%d)", rv); AB_Account_free(account); AB_Provider_DeleteUser(pro, AB_User_GetUniqueId(user)); AB_User_free(user); return rv; } } AB_User_free(user); return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqpaypal/control/setsecrets.c0000664000175000017500000001252214043610745023203 00000000000000/*************************************************************************** begin : Tue May 11 2010 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals_l.h" #include #include #include #include #include #include #include int APY_Control_SetSecrets(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; AB_USER *u=NULL; int rv; uint32_t userId; const char *apiUserId; const char *apiPassword; const char *apiSignature; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Int, /* type */ "userId", /* name */ 0, /* minnum */ 1, /* maxnum */ "u", /* short option */ "user", /* long option */ "Specify the unique user id", /* short description */ "Specify the unique user id" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "apiUserId", /* name */ 1, /* minnum */ 1, /* maxnum */ "U", /* short option */ "apiuserid", /* long option */ "Specify the API user id", /* short description */ "Specify the API user id" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "password", /* name */ 1, /* minnum */ 1, /* maxnum */ "P", /* short option */ "password", /* long option */ "Specify the API password", /* short description */ "Specify the API password" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "signature", /* name */ 1, /* minnum */ 1, /* maxnum */ "S", /* short option */ "signature", /* long option */ "Specify the API signature", /* short description */ "Specify the API signature" /* 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(stdout, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } userId=GWEN_DB_GetIntValue(db, "userId", 0, 0); apiUserId=GWEN_DB_GetCharValue(db, "apiUserId", 0, NULL); apiPassword=GWEN_DB_GetCharValue(db, "password", 0, NULL); apiSignature=GWEN_DB_GetCharValue(db, "signature", 0, NULL); rv=AB_Provider_GetUser(pro, userId, 1, 1, &u); if (rv<0) { fprintf(stderr, "ERROR: User with id %lu not found\n", (unsigned long int) userId); return 2; } if (!u) { DBG_ERROR(0, "No matching customer"); return 3; } else { /* lock user */ rv=AB_Provider_BeginExclUseUser(pro, u); if (rv<0) { fprintf(stderr, "ERROR: Could not lock user, maybe it is used in another application? (%d)\n", rv); return 4; } /* modifications */ rv=APY_User_SetApiSecrets(u, apiPassword, apiSignature, apiUserId); if (rv<0) { fprintf(stderr, "ERROR: Error on APY_User_SetApiSecrets (%d)\n", rv); AB_Provider_EndExclUseUser(pro, u, 1); return 3; } /* unlock user */ rv=AB_Provider_EndExclUseUser(pro, u, 0); if (rv<0) { fprintf(stderr, "ERROR: Could not unlock user (%d)\n", rv); AB_Provider_EndExclUseUser(pro, u, 1); /* abandon */ return 4; } } return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqpaypal/dlg_newuser_p.h0000664000175000017500000000232314043610745022177 00000000000000/*************************************************************************** begin : Mon Apr 12 2010 copyright : (C) 2018 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQPAYPAL_DLG_NEWUSER_P_H #define AQPAYPAL_DLG_NEWUSER_P_H #include "dlg_newuser_l.h" typedef struct APY_NEWUSER_DIALOG APY_NEWUSER_DIALOG; struct APY_NEWUSER_DIALOG { AB_PROVIDER *provider; AB_BANKING *banking; char *userName; char *userId; char *url; int httpVMajor; int httpVMinor; uint32_t flags; char *apiUserId; char *apiPassword; char *apiSignature; AB_USER *user; }; static void GWENHYWFAR_CB APY_NewUserDialog_FreeData(void *bp, void *p); static int GWENHYWFAR_CB APY_NewUserDialog_SignalHandler(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqpaypal/dlg_edituser_p.h0000664000175000017500000000236514043610745022341 00000000000000/*************************************************************************** begin : Tue Aug 03 2010 copyright : (C) 2018 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQPAYPAL_DLG_EDITUSER_P_H #define AQPAYPAL_DLG_EDITUSER_P_H #include "dlg_edituser_l.h" #include typedef struct APY_EDITUSER_DIALOG APY_EDITUSER_DIALOG; struct APY_EDITUSER_DIALOG { AB_BANKING *banking; AB_PROVIDER *provider; AB_USER *user; int doLock; char *userName; char *userId; char *customerId; char *url; uint32_t flags; char *apiUserId; char *apiPassword; char *apiSignature; }; static void GWENHYWFAR_CB APY_EditUserDialog_FreeData(void *bp, void *p); static int GWENHYWFAR_CB APY_EditUserDialog_SignalHandler(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqpaypal/provider_getstm.c0000664000175000017500000003445114546575650022576 00000000000000/*************************************************************************** begin : Sat Dec 01 2018 copyright : (C) 2022 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "aqpaypal/provider_getstm.h" #include "aqpaypal/provider_request.h" #include #include #include #define I18N(msg) GWEN_I18N_Translate(PACKAGE, msg) static AB_TRANSACTION_LIST *_readTransactionsFromSearchResponse(GWEN_DB_NODE *dbResponse); static AB_TRANSACTION *readOneTransactionFromSearchResponse(GWEN_DB_NODE *dbT); static int _possiblyReadTransactionDetails(AB_PROVIDER *pro, AB_USER *u, AB_TRANSACTION_LIST *transactionList); static void _addTransactionsToAccountInfo(AB_TRANSACTION_LIST *transactionList, AB_IMEXPORTER_ACCOUNTINFO *ai); static void _setTypeFromLTYPE(const char *s, AB_TRANSACTION *t); static AB_VALUE *_readValueFromString(const char *s, const char *currencyCode); static AB_TRANSACTION_STATUS _paymentStatusFromString(const char *s); static void _readPurposeLinesFromDetailsResponse(GWEN_DB_NODE *dbResponse, AB_TRANSACTION *t); static int _requestTransactionDetails(AB_PROVIDER *pro, AB_USER *u, AB_TRANSACTION *t); int APY_Provider_ExecGetTrans(AB_PROVIDER *pro, AB_IMEXPORTER_ACCOUNTINFO *ai, AB_USER *u, AB_TRANSACTION *j) { GWEN_BUFFER *tbuf; const GWEN_DATE *da; int rv; GWEN_DB_NODE *dbResponse; AB_TRANSACTION_LIST *transactionList; tbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=APY_Provider_SetupUrlString(pro, u, tbuf); if (rv<0) { DBG_INFO(AQPAYPAL_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); AB_Transaction_SetStatus(j, AB_Transaction_StatusError); return rv; } GWEN_Buffer_AppendString(tbuf, "&method=transactionSearch"); da=AB_Transaction_GetFirstDate(j); if (da==NULL) { DBG_ERROR(AQPAYPAL_LOGDOMAIN, "Missing start date"); GWEN_Buffer_free(tbuf); AB_Transaction_SetStatus(j, AB_Transaction_StatusError); return GWEN_ERROR_INVALID; } GWEN_Buffer_AppendString(tbuf, "&startdate="); GWEN_Date_toStringWithTemplate(da, "YYYY-MM-DDT00:00:00Z", tbuf); da=AB_Transaction_GetLastDate(j); if (da) { GWEN_Buffer_AppendString(tbuf, "&enddate="); GWEN_Date_toStringWithTemplate(da, "YYYY-MM-DDT23:59:59Z", tbuf); } /* send and receive */ AB_Transaction_SetStatus(j, AB_Transaction_StatusSending); dbResponse=APY_Provider_SendRequestParseResponse(pro, u, GWEN_Buffer_GetStart(tbuf), "transactionSearch"); if (dbResponse==NULL) { DBG_INFO(AQPAYPAL_LOGDOMAIN, "here"); GWEN_Buffer_free(tbuf); AB_Transaction_SetStatus(j, AB_Transaction_StatusError); return GWEN_ERROR_GENERIC; } GWEN_Buffer_free(tbuf); /* handle response */ AB_Transaction_SetStatus(j, AB_Transaction_StatusAccepted); transactionList=_readTransactionsFromSearchResponse(dbResponse); GWEN_DB_Group_free(dbResponse); if (transactionList) { rv=_possiblyReadTransactionDetails(pro, u, transactionList); if (rv<0) { DBG_INFO(AQPAYPAL_LOGDOMAIN, "here (%d)", rv); AB_Transaction_SetStatus(j, AB_Transaction_StatusError); } _addTransactionsToAccountInfo(transactionList, ai); } AB_Transaction_List_free(transactionList); return 0; } int _requestTransactionDetails(AB_PROVIDER *pro, AB_USER *u, AB_TRANSACTION *t) { GWEN_BUFFER *tbuf; const char *s; int rv; GWEN_DB_NODE *dbResponse; tbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=APY_Provider_SetupUrlString(pro, u, tbuf); if (rv<0) { DBG_INFO(AQPAYPAL_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); return rv; } GWEN_Buffer_AppendString(tbuf, "&method=getTransactionDetails"); s=AB_Transaction_GetFiId(t); if (!(s && *s)) { DBG_ERROR(AQPAYPAL_LOGDOMAIN, "Missing transaction id"); GWEN_Buffer_free(tbuf); return GWEN_ERROR_INVALID; } GWEN_Buffer_AppendString(tbuf, "&transactionId="); GWEN_Text_EscapeToBuffer(s, tbuf); /* send and receive */ dbResponse=APY_Provider_SendRequestParseResponse(pro, u, GWEN_Buffer_GetStart(tbuf), "getTransactionDetails"); if (dbResponse==NULL) { DBG_INFO(AQPAYPAL_LOGDOMAIN, "here"); GWEN_Buffer_free(tbuf); return GWEN_ERROR_GENERIC; } GWEN_Buffer_free(tbuf); /* parse response */ s=GWEN_DB_GetCharValue(dbResponse, "TRANSACTIONTYPE", 0, NULL); if (s && *s) AB_Transaction_SetTransactionText(t, s); /* address */ s=GWEN_DB_GetCharValue(dbResponse, "SHIPTOSTREET", 0, NULL); if (s && *s) AB_Transaction_SetRemoteAddrStreet(t, s); s=GWEN_DB_GetCharValue(dbResponse, "SHIPTOCITY", 0, NULL); if (s && *s) AB_Transaction_SetRemoteAddrCity(t, s); s=GWEN_DB_GetCharValue(dbResponse, "SHIPTOZIP", 0, NULL); if (s && *s) AB_Transaction_SetRemoteAddrZipcode(t, s); AB_Transaction_SetStatus(t, _paymentStatusFromString(GWEN_DB_GetCharValue(dbResponse, "PAYMENTSTATUS", 0, NULL))); s=GWEN_DB_GetCharValue(dbResponse, "BUYERID", 0, NULL); if (s && *s) AB_Transaction_SetBankReference(t, s); s=GWEN_DB_GetCharValue(dbResponse, "NOTE", 0, NULL); if (s && *s) AB_Transaction_AddPurposeLine(t, s); _readPurposeLinesFromDetailsResponse(dbResponse, t); GWEN_DB_Group_free(dbResponse); return 0; } /* return a list of parsed transactions. * transactions with command==AB_Transaction_CommandGetTransactions will need a request for * details. * returns NULL if no transactions found. */ AB_TRANSACTION_LIST *_readTransactionsFromSearchResponse(GWEN_DB_NODE *dbResponse) { GWEN_DB_NODE *dbT; AB_TRANSACTION_LIST *transactionList=NULL; /* now get the transactions */ transactionList=AB_Transaction_List_new(); dbT=GWEN_DB_GetFirstGroup(dbResponse); while (dbT) { const char *s; s=GWEN_DB_GetCharValue(dbT, "L_TYPE", 0, NULL); if (s && *s && !((strcasecmp(s, "Authorization")==0 || strcasecmp(s, "Order")==0))) { /* only if L_TYPE is given and it is neither "Authorization" nor "Order" */ s=GWEN_DB_GetCharValue(dbT, "L_STATUS", 0, NULL); if (!(s && *s && (strcasecmp(s, "Placed")==0 || strcasecmp(s, "Removed")==0))) { AB_TRANSACTION *t; t=readOneTransactionFromSearchResponse(dbT); if (t) AB_Transaction_List_Add(t, transactionList); } } dbT=GWEN_DB_GetNextGroup(dbT); } /* while(dbT) */ /* dont return empty list */ if (transactionList && AB_Transaction_List_GetCount(transactionList)<1) { AB_Transaction_List_free(transactionList); transactionList=NULL; } return transactionList; } AB_TRANSACTION *readOneTransactionFromSearchResponse(GWEN_DB_NODE *dbT) { AB_TRANSACTION *t; AB_VALUE *v; const char *currencyCode; const char *s; currencyCode=GWEN_DB_GetCharValue(dbT, "L_CURRENCYCODE", 0, NULL); t=AB_Transaction_new(); s=GWEN_DB_GetCharValue(dbT, "L_TIMESTAMP", 0, NULL); if (s && *s) { GWEN_DATE *da; da=GWEN_Date_fromStringWithTemplate(s, "YYYY-MM-DD"); if (da) { AB_Transaction_SetDate(t, da); AB_Transaction_SetValutaDate(t, da); GWEN_Date_free(da); } else { DBG_ERROR(AQPAYPAL_LOGDOMAIN, "Invalid timespec [%s]", s); } } s=GWEN_DB_GetCharValue(dbT, "L_TYPE", 0, NULL); if (s && *s) { AB_Transaction_SetTransactionText(t, s); _setTypeFromLTYPE(s, t); } s=GWEN_DB_GetCharValue(dbT, "L_NAME", 0, NULL); if (s && *s) { const char *sEmail; sEmail=GWEN_DB_GetCharValue(dbT, "L_EMAIL", 0, NULL); if (sEmail && *sEmail) { GWEN_BUFFER *pbuf; pbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendArgs(pbuf, "%s (%s)", s, sEmail); AB_Transaction_SetRemoteName(t, GWEN_Buffer_GetStart(pbuf)); GWEN_Buffer_free(pbuf); } else AB_Transaction_SetRemoteName(t, s); } else { const char *sEmail; sEmail=GWEN_DB_GetCharValue(dbT, "L_EMAIL", 0, NULL); if (sEmail && *sEmail) AB_Transaction_SetRemoteName(t, sEmail); } s=GWEN_DB_GetCharValue(dbT, "L_TRANSACTIONID", 0, NULL); if (s && *s) AB_Transaction_SetFiId(t, s); v=_readValueFromString(GWEN_DB_GetCharValue(dbT, "L_AMT", 0, NULL), currencyCode); if (v) { AB_Transaction_SetValue(t, v); AB_Value_free(v); } else { DBG_INFO(AQPAYPAL_LOGDOMAIN, "No or invalid amount"); } v=_readValueFromString(GWEN_DB_GetCharValue(dbT, "L_FEEAMT", 0, NULL), currencyCode); if (v) { AB_Transaction_SetFees(t, v); AB_Value_free(v); } else { DBG_INFO(AQPAYPAL_LOGDOMAIN, "No or invalid amount"); } s=GWEN_DB_GetCharValue(dbT, "L_STATUS", 0, NULL); if (s && *s) { if (strcasecmp(s, "Completed")==0) AB_Transaction_SetStatus(t, AB_Transaction_StatusAccepted); else AB_Transaction_SetStatus(t, AB_Transaction_StatusPending); } AB_Transaction_SetCommand(t, AB_Transaction_CommandNone); /* get transaction details */ s=AB_Transaction_GetFiId(t); if (s && *s) { const char *s2; s2=GWEN_DB_GetCharValue(dbT, "L_TYPE", 0, NULL); if (s2 && *s2) { /* only get details for payments (maybe add other types later) */ if (strcasecmp(s2, "Payment")==0 || strcasecmp(s2, "Purchase")==0 || strcasecmp(s2, "Donation")==0) { /* internal marker to mark transactions which need detailed requests later */ AB_Transaction_SetCommand(t, AB_Transaction_CommandGetTransactions); } } } return t; } int _possiblyReadTransactionDetails(AB_PROVIDER *pro, AB_USER *u, AB_TRANSACTION_LIST *transactionList) { AB_TRANSACTION *transaction; int count=0; int lastError=0; transaction=AB_Transaction_List_First(transactionList); while (transaction) { if (AB_Transaction_GetCommand(transaction)==AB_Transaction_CommandGetTransactions) count++; transaction=AB_Transaction_List_Next(transaction); } DBG_INFO(AQPAYPAL_LOGDOMAIN, "Need to read transaction details for %d transactions", count); if (count) { int i=1; GWEN_Gui_ProgressLog2(0, GWEN_LoggerLevel_Notice, I18N("Need to read details for %d transactions"), count); transaction=AB_Transaction_List_First(transactionList); while (transaction) { if (AB_Transaction_GetCommand(transaction)==AB_Transaction_CommandGetTransactions) { int rv; DBG_INFO(AQPAYPAL_LOGDOMAIN, "Reading details for transaction %d of %d", i, count); GWEN_Gui_ProgressLog2(0, GWEN_LoggerLevel_Notice, I18N("Reading details for transactions %d of %d"), i, count); rv=_requestTransactionDetails(pro, u, transaction); if (rv<0) { DBG_INFO(AQPAYPAL_LOGDOMAIN, "here (%d)", rv); lastError=rv; } else AB_Transaction_SetCommand(transaction, AB_Transaction_CommandNone); /* remove mark */ i++; } transaction=AB_Transaction_List_Next(transaction); } } else GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Notice, I18N("No transaction details needed")); return lastError; } void _addTransactionsToAccountInfo(AB_TRANSACTION_LIST *transactionList, AB_IMEXPORTER_ACCOUNTINFO *ai) { AB_TRANSACTION *transaction; while ((transaction=AB_Transaction_List_First(transactionList))) { AB_Transaction_List_Del(transaction); AB_ImExporterAccountInfo_AddTransaction(ai, transaction); } } void _setTypeFromLTYPE(const char *s, AB_TRANSACTION *t) { if (strcasecmp(s, "Transfer")==0) { AB_Transaction_SetType(t, AB_Transaction_TypeStatement); AB_Transaction_SetSubType(t, AB_Transaction_SubTypeStandard); } else if (strcasecmp(s, "Payment")==0) { AB_Transaction_SetType(t, AB_Transaction_TypeStatement); AB_Transaction_SetSubType(t, AB_Transaction_SubTypeStandard); } else { AB_Transaction_SetType(t, AB_Transaction_TypeStatement); AB_Transaction_SetSubType(t, AB_Transaction_SubTypeStandard); } } AB_TRANSACTION_STATUS _paymentStatusFromString(const char *s) { if (s && *s) { if (strcasecmp(s, "Completed")==0) return AB_Transaction_StatusAccepted; else if (strcasecmp(s, "Denied")==0 || strcasecmp(s, "Failed")==0 || strcasecmp(s, "Expired")==0 || strcasecmp(s, "Voided")==0) return AB_Transaction_StatusRejected; else if (strcasecmp(s, "Pending")==0 || strcasecmp(s, "Processed")==0) return AB_Transaction_StatusPending; else if (strcasecmp(s, "Refunded")==0 || strcasecmp(s, "Reversed")==0) return AB_Transaction_StatusRevoked; else { DBG_INFO(AQPAYPAL_LOGDOMAIN, "Unknown payment status (%s)", s); } } return AB_Transaction_StatusUnknown; } AB_VALUE *_readValueFromString(const char *s, const char *currencyCode) { if (s && *s) { AB_VALUE *v; v=AB_Value_fromString(s); if (v) { AB_Value_SetCurrency(v, currencyCode); return v; } else { DBG_ERROR(AQPAYPAL_LOGDOMAIN, "Invalid amount [%s]", s); } } return NULL; } void _readPurposeLinesFromDetailsResponse(GWEN_DB_NODE *dbResponse, AB_TRANSACTION *t) { GWEN_DB_NODE *dbT; dbT=GWEN_DB_GetFirstGroup(dbResponse); if (dbT) { GWEN_BUFFER *pbuf; pbuf=GWEN_Buffer_new(0, 256, 0, 1); while (dbT) { const char *s; s=GWEN_DB_GetCharValue(dbT, "L_QTY", 0, NULL); if (s && *s) GWEN_Buffer_AppendArgs(pbuf, "%sx", s); s=GWEN_DB_GetCharValue(dbT, "L_NAME", 0, NULL); if (s && *s) { GWEN_Buffer_AppendString(pbuf, s); s=GWEN_DB_GetCharValue(dbT, "L_NUMBER", 0, NULL); if (s && *s) GWEN_Buffer_AppendArgs(pbuf, "(%s)", s); } else { s=GWEN_DB_GetCharValue(dbT, "L_NUMBER", 0, NULL); if (s && *s) GWEN_Buffer_AppendString(pbuf, s); } s=GWEN_DB_GetCharValue(dbT, "L_AMT", 0, NULL); if (s && *s) { GWEN_Buffer_AppendString(pbuf, "["); GWEN_Buffer_AppendString(pbuf, s); s=GWEN_DB_GetCharValue(dbT, "L_CURRENCYCODE", 0, NULL); if (s && *s) GWEN_Buffer_AppendArgs(pbuf, " %s", s); GWEN_Buffer_AppendString(pbuf, "]"); } AB_Transaction_AddPurposeLine(t, GWEN_Buffer_GetStart(pbuf)); GWEN_Buffer_Reset(pbuf); dbT=GWEN_DB_GetNextGroup(dbT); } /* while(dbT) */ GWEN_Buffer_free(pbuf); } /* if (dbT) */ } aqbanking-6.6.1/src/libs/plugins/backends/aqofxconnect/0000755000175000017500000000000015037736163020136 500000000000000aqbanking-6.6.1/src/libs/plugins/backends/aqofxconnect/dialogs/0000755000175000017500000000000015037736163021560 500000000000000aqbanking-6.6.1/src/libs/plugins/backends/aqofxconnect/dialogs/dlg_edituser.c0000664000175000017500000010244214546575650024331 00000000000000/*************************************************************************** begin : Tue Aug 24 2010 copyright : (C) 2018 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "dlg_edituser_p.h" #include "dlg_ofx_special_l.h" #include "aqofxconnect/libofxhome/dlg_getinst.h" #include #include #include "aqbanking/i18n_l.h" #include #include #include #include #include #include #include #include #define PAGE_BEGIN 0 #define PAGE_BANK 1 #define PAGE_USER 2 #define PAGE_APP 3 #define PAGE_CREATE 4 #define PAGE_END 5 #define DIALOG_MINWIDTH 400 #define DIALOG_MINHEIGHT 200 GWEN_INHERIT(GWEN_DIALOG, AO_EDITUSER_DIALOG) GWEN_DIALOG *AO_EditUserDialog_new(AB_PROVIDER *pro, AB_USER *u, int doLock) { GWEN_DIALOG *dlg; AO_EDITUSER_DIALOG *xdlg; GWEN_BUFFER *fbuf; int rv; dlg=GWEN_Dialog_new("ao_newuser"); GWEN_NEW_OBJECT(AO_EDITUSER_DIALOG, xdlg); GWEN_INHERIT_SETDATA(GWEN_DIALOG, AO_EDITUSER_DIALOG, dlg, xdlg, AO_EditUserDialog_FreeData); GWEN_Dialog_SetSignalHandler(dlg, AO_EditUserDialog_SignalHandler); /* get path of dialog description file */ fbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_PathManager_FindFile(AB_PM_LIBNAME, AB_PM_DATADIR, "aqbanking/backends/aqofxconnect/dialogs/dlg_edituser.dlg", fbuf); if (rv<0) { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "Dialog description file not found (%d).", rv); GWEN_Buffer_free(fbuf); GWEN_Dialog_free(dlg); return NULL; } /* read dialog from dialog description file */ rv=GWEN_Dialog_ReadXmlFile(dlg, GWEN_Buffer_GetStart(fbuf)); if (rv<0) { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "here (%d).", rv); GWEN_Buffer_free(fbuf); GWEN_Dialog_free(dlg); return NULL; } GWEN_Buffer_free(fbuf); /* preset */ xdlg->provider=pro; xdlg->banking=AB_Provider_GetBanking(pro);; xdlg->user=u; xdlg->doLock=doLock; /* done */ return dlg; } void GWENHYWFAR_CB AO_EditUserDialog_FreeData(void *bp, void *p) { AO_EDITUSER_DIALOG *xdlg; xdlg=(AO_EDITUSER_DIALOG *) p; free(xdlg->userName); free(xdlg->userId); free(xdlg->url); free(xdlg->userAgent); free(xdlg->brokerId); free(xdlg->org); free(xdlg->fid); free(xdlg->appId); free(xdlg->appVer); free(xdlg->headerVer); free(xdlg->clientUid); free(xdlg->securityType); GWEN_FREE_OBJECT(xdlg); } AB_USER *AO_EditUserDialog_GetUser(const GWEN_DIALOG *dlg) { AO_EDITUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AO_EDITUSER_DIALOG, dlg); assert(xdlg); return xdlg->user; } const char *AO_EditUserDialog_GetBankName(const GWEN_DIALOG *dlg) { AO_EDITUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AO_EDITUSER_DIALOG, dlg); assert(xdlg); return xdlg->bankName; } void AO_EditUserDialog_SetBankName(GWEN_DIALOG *dlg, const char *s) { AO_EDITUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AO_EDITUSER_DIALOG, dlg); assert(xdlg); free(xdlg->bankName); if (s) xdlg->bankName=strdup(s); else xdlg->bankName=NULL; } const char *AO_EditUserDialog_GetUserName(const GWEN_DIALOG *dlg) { AO_EDITUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AO_EDITUSER_DIALOG, dlg); assert(xdlg); return xdlg->userName; } void AO_EditUserDialog_SetUserName(GWEN_DIALOG *dlg, const char *s) { AO_EDITUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AO_EDITUSER_DIALOG, dlg); assert(xdlg); free(xdlg->userName); if (s) xdlg->userName=strdup(s); else xdlg->userName=NULL; } const char *AO_EditUserDialog_GetUserId(const GWEN_DIALOG *dlg) { AO_EDITUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AO_EDITUSER_DIALOG, dlg); assert(xdlg); return xdlg->userId; } void AO_EditUserDialog_SetUserId(GWEN_DIALOG *dlg, const char *s) { AO_EDITUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AO_EDITUSER_DIALOG, dlg); assert(xdlg); free(xdlg->userId); if (s) xdlg->userId=strdup(s); else xdlg->userId=NULL; } const char *AO_EditUserDialog_GetFid(const GWEN_DIALOG *dlg) { AO_EDITUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AO_EDITUSER_DIALOG, dlg); assert(xdlg); return xdlg->fid; } void AO_EditUserDialog_SetFid(GWEN_DIALOG *dlg, const char *s) { AO_EDITUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AO_EDITUSER_DIALOG, dlg); assert(xdlg); free(xdlg->fid); if (s) xdlg->fid=strdup(s); else xdlg->fid=NULL; } const char *AO_EditUserDialog_GetOrg(const GWEN_DIALOG *dlg) { AO_EDITUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AO_EDITUSER_DIALOG, dlg); assert(xdlg); return xdlg->org; } void AO_EditUserDialog_SetOrg(GWEN_DIALOG *dlg, const char *s) { AO_EDITUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AO_EDITUSER_DIALOG, dlg); assert(xdlg); free(xdlg->org); if (s) xdlg->org=strdup(s); else xdlg->org=NULL; } const char *AO_EditUserDialog_GetAppId(const GWEN_DIALOG *dlg) { AO_EDITUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AO_EDITUSER_DIALOG, dlg); assert(xdlg); return xdlg->appId; } void AO_EditUserDialog_SetAppId(GWEN_DIALOG *dlg, const char *s) { AO_EDITUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AO_EDITUSER_DIALOG, dlg); assert(xdlg); free(xdlg->appId); if (s) xdlg->appId=strdup(s); else xdlg->appId=NULL; } const char *AO_EditUserDialog_GetAppVer(const GWEN_DIALOG *dlg) { AO_EDITUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AO_EDITUSER_DIALOG, dlg); assert(xdlg); return xdlg->appVer; } void AO_EditUserDialog_SetAppVer(GWEN_DIALOG *dlg, const char *s) { AO_EDITUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AO_EDITUSER_DIALOG, dlg); assert(xdlg); free(xdlg->appVer); if (s) xdlg->appVer=strdup(s); else xdlg->appVer=NULL; } const char *AO_EditUserDialog_GetHeaderVer(const GWEN_DIALOG *dlg) { AO_EDITUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AO_EDITUSER_DIALOG, dlg); assert(xdlg); return xdlg->headerVer; } void AO_EditUserDialog_SetHeaderVer(GWEN_DIALOG *dlg, const char *s) { AO_EDITUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AO_EDITUSER_DIALOG, dlg); assert(xdlg); free(xdlg->headerVer); if (s) xdlg->headerVer=strdup(s); else xdlg->headerVer=NULL; } const char *AO_EditUserDialog_GetBrokerId(const GWEN_DIALOG *dlg) { AO_EDITUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AO_EDITUSER_DIALOG, dlg); assert(xdlg); return xdlg->brokerId; } void AO_EditUserDialog_SetBrokerId(GWEN_DIALOG *dlg, const char *s) { AO_EDITUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AO_EDITUSER_DIALOG, dlg); assert(xdlg); free(xdlg->brokerId); if (s) xdlg->brokerId=strdup(s); else xdlg->brokerId=NULL; } const char *AO_EditUserDialog_GetUrl(const GWEN_DIALOG *dlg) { AO_EDITUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AO_EDITUSER_DIALOG, dlg); assert(xdlg); return xdlg->url; } void AO_EditUserDialog_SetUrl(GWEN_DIALOG *dlg, const char *s) { AO_EDITUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AO_EDITUSER_DIALOG, dlg); assert(xdlg); free(xdlg->url); if (s) xdlg->url=strdup(s); else xdlg->url=NULL; } const char *AO_EditUserDialog_GetUserAgent(const GWEN_DIALOG *dlg) { AO_EDITUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AO_EDITUSER_DIALOG, dlg); assert(xdlg); return xdlg->userAgent; } void AO_EditUserDialog_SetUserAgent(GWEN_DIALOG *dlg, const char *s) { AO_EDITUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AO_EDITUSER_DIALOG, dlg); assert(xdlg); free(xdlg->userAgent); if (s) xdlg->userAgent=strdup(s); else xdlg->userAgent=NULL; } const char *AO_EditUserDialog_GetClientUid(const GWEN_DIALOG *dlg) { AO_EDITUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AO_EDITUSER_DIALOG, dlg); assert(xdlg); return xdlg->clientUid; } void AO_EditUserDialog_SetClientUid(GWEN_DIALOG *dlg, const char *s) { AO_EDITUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AO_EDITUSER_DIALOG, dlg); assert(xdlg); free(xdlg->clientUid); if (s) xdlg->clientUid=strdup(s); else xdlg->clientUid=NULL; } int AO_EditUserDialog_GetHttpVMajor(const GWEN_DIALOG *dlg) { AO_EDITUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AO_EDITUSER_DIALOG, dlg); assert(xdlg); return xdlg->httpVMajor; } int AO_EditUserDialog_GetHttpVMinor(const GWEN_DIALOG *dlg) { AO_EDITUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AO_EDITUSER_DIALOG, dlg); assert(xdlg); return xdlg->httpVMinor; } void AO_EditUserDialog_SetHttpVersion(GWEN_DIALOG *dlg, int vmajor, int vminor) { AO_EDITUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AO_EDITUSER_DIALOG, dlg); assert(xdlg); xdlg->httpVMajor=vmajor; xdlg->httpVMinor=vminor; } uint32_t AO_EditUserDialog_GetFlags(const GWEN_DIALOG *dlg) { AO_EDITUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AO_EDITUSER_DIALOG, dlg); assert(xdlg); return xdlg->flags; } void AO_EditUserDialog_SetFlags(GWEN_DIALOG *dlg, uint32_t fl) { AO_EDITUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AO_EDITUSER_DIALOG, dlg); assert(xdlg); xdlg->flags=fl; } void AO_EditUserDialog_AddFlags(GWEN_DIALOG *dlg, uint32_t fl) { AO_EDITUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AO_EDITUSER_DIALOG, dlg); assert(xdlg); xdlg->flags&=~fl; } void AO_EditUserDialog_SubFlags(GWEN_DIALOG *dlg, uint32_t fl) { AO_EDITUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AO_EDITUSER_DIALOG, dlg); assert(xdlg); xdlg->flags&=~fl; } void AO_EditUserDialog_Init(GWEN_DIALOG *dlg) { AO_EDITUSER_DIALOG *xdlg; GWEN_DB_NODE *dbPrefs; const char *s; int i; const AO_APPINFO *ai; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AO_EDITUSER_DIALOG, dlg); assert(xdlg); dbPrefs=GWEN_Dialog_GetPreferences(dlg); GWEN_Dialog_SetCharProperty(dlg, "", GWEN_DialogProperty_Title, 0, I18N("OFX DirectConnect User Setup"), 0); /* select first page */ GWEN_Dialog_SetIntProperty(dlg, "wiz_tab_book", GWEN_DialogProperty_Value, 0, 0, 0); GWEN_Dialog_SetIntProperty(dlg, "wiz_app_combo", GWEN_DialogProperty_ClearValues, 0, 0, 0); GWEN_Dialog_SetCharProperty(dlg, "wiz_app_combo", GWEN_DialogProperty_AddValue, 0, I18N("-- select --"), 0); ai=AO_Provider_GetAppInfos(xdlg->provider); if (ai) { const AO_APPINFO *first; first=ai; while (ai->appName) { GWEN_Dialog_SetCharProperty(dlg, "wiz_app_combo", GWEN_DialogProperty_AddValue, 0, I18N(ai->appName), 0); ai++; } if (first->appName) { GWEN_Dialog_SetIntProperty(dlg, "wiz_app_combo", GWEN_DialogProperty_Value, 0, 1, 0); if (first->appId) GWEN_Dialog_SetCharProperty(dlg, "wiz_appid_edit", GWEN_DialogProperty_Value, 0, first->appId, 0); if (first->appVer) GWEN_Dialog_SetCharProperty(dlg, "wiz_appver_edit", GWEN_DialogProperty_Value, 0, first->appVer, 0); } } s=AB_User_GetUserName(xdlg->user); GWEN_Dialog_SetCharProperty(dlg, "wiz_username_edit", GWEN_DialogProperty_Value, 0, s, 0); s=AB_User_GetUserId(xdlg->user); GWEN_Dialog_SetCharProperty(dlg, "wiz_userid_edit", GWEN_DialogProperty_Value, 0, s, 0); s=AO_User_GetClientUid(xdlg->user); GWEN_Dialog_SetCharProperty(dlg, "wiz_clientuid_edit", GWEN_DialogProperty_Value, 0, s, 0); s=AO_User_GetBankName(xdlg->user); GWEN_Dialog_SetCharProperty(dlg, "wiz_bankname_edit", GWEN_DialogProperty_Value, 0, s, 0); s=AO_User_GetBrokerId(xdlg->user); GWEN_Dialog_SetCharProperty(dlg, "wiz_brokerid_edit", GWEN_DialogProperty_Value, 0, s, 0); s=AO_User_GetFid(xdlg->user); GWEN_Dialog_SetCharProperty(dlg, "wiz_fid_edit", GWEN_DialogProperty_Value, 0, s, 0); s=AO_User_GetOrg(xdlg->user); GWEN_Dialog_SetCharProperty(dlg, "wiz_org_edit", GWEN_DialogProperty_Value, 0, s, 0); s=AO_User_GetServerAddr(xdlg->user); GWEN_Dialog_SetCharProperty(dlg, "wiz_url_edit", GWEN_DialogProperty_Value, 0, s, 0); s=AO_User_GetHttpUserAgent(xdlg->user); GWEN_Dialog_SetCharProperty(dlg, "wiz_user_agent_edit", GWEN_DialogProperty_Value, 0, s, 0); s=AO_User_GetAppId(xdlg->user); if (s && *s) { GWEN_Dialog_SetIntProperty(dlg, "wiz_app_combo", GWEN_DialogProperty_Value, 0, 0, 0); GWEN_Dialog_SetCharProperty(dlg, "wiz_appid_edit", GWEN_DialogProperty_Value, 0, s, 0); } s=AO_User_GetAppVer(xdlg->user); if (s && *s) { GWEN_Dialog_SetIntProperty(dlg, "wiz_app_combo", GWEN_DialogProperty_Value, 0, 0, 0); GWEN_Dialog_SetCharProperty(dlg, "wiz_appver_edit", GWEN_DialogProperty_Value, 0, s, 0); } s=AO_User_GetHeaderVer(xdlg->user); if (!(s && *s)) s="102"; GWEN_Dialog_SetCharProperty(dlg, "wiz_headerver_edit", GWEN_DialogProperty_Value, 0, s, 0); xdlg->flags=AO_User_GetFlags(xdlg->user); /* read width */ i=GWEN_DB_GetIntValue(dbPrefs, "dialog_width", 0, -1); if (i>=DIALOG_MINWIDTH) GWEN_Dialog_SetIntProperty(dlg, "", GWEN_DialogProperty_Width, 0, i, 0); /* read height */ i=GWEN_DB_GetIntValue(dbPrefs, "dialog_height", 0, -1); if (i>=DIALOG_MINHEIGHT) GWEN_Dialog_SetIntProperty(dlg, "", GWEN_DialogProperty_Height, 0, i, 0); } void AO_EditUserDialog_Fini(GWEN_DIALOG *dlg) { AO_EDITUSER_DIALOG *xdlg; int i; GWEN_DB_NODE *dbPrefs; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AO_EDITUSER_DIALOG, dlg); assert(xdlg); dbPrefs=GWEN_Dialog_GetPreferences(dlg); /* store dialog width */ i=GWEN_Dialog_GetIntProperty(dlg, "", GWEN_DialogProperty_Width, 0, -1); GWEN_DB_SetIntValue(dbPrefs, GWEN_DB_FLAGS_OVERWRITE_VARS, "dialog_width", i); /* store dialog height */ i=GWEN_Dialog_GetIntProperty(dlg, "", GWEN_DialogProperty_Height, 0, -1); GWEN_DB_SetIntValue(dbPrefs, GWEN_DB_FLAGS_OVERWRITE_VARS, "dialog_height", i); } int AO_EditUserDialog_GetBankPageData(GWEN_DIALOG *dlg) { AO_EDITUSER_DIALOG *xdlg; const char *s; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AO_EDITUSER_DIALOG, dlg); assert(xdlg); s=GWEN_Dialog_GetCharProperty(dlg, "wiz_bankname_edit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) AO_EditUserDialog_SetBankName(dlg, s); else { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "Missing bank name"); /* switch to correct page, show error message, set focus */ GWEN_Dialog_SetIntProperty(dlg, "wiz_tab_book", GWEN_DialogProperty_Value, 0, 1, 0); GWEN_Gui_ShowError(I18N("Missing Input"), I18N("Please enter the name of your bank.")); GWEN_Dialog_SetIntProperty(dlg, "wiz_bankname_edit", GWEN_DialogProperty_Focus, 0, 1, 0); return GWEN_ERROR_NO_DATA; } s=GWEN_Dialog_GetCharProperty(dlg, "wiz_brokerid_edit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) AO_EditUserDialog_SetBrokerId(dlg, s); else AO_EditUserDialog_SetBrokerId(dlg, NULL); s=GWEN_Dialog_GetCharProperty(dlg, "wiz_fid_edit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) AO_EditUserDialog_SetFid(dlg, s); else { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "Missing FID"); /* switch to correct page, show error message, set focus */ GWEN_Dialog_SetIntProperty(dlg, "wiz_tab_book", GWEN_DialogProperty_Value, 0, 1, 0); GWEN_Gui_ShowError(I18N("Missing Input"), I18N("Please enter a valid FID code.")); GWEN_Dialog_SetIntProperty(dlg, "wiz_fid_edit", GWEN_DialogProperty_Focus, 0, 1, 0); return GWEN_ERROR_NO_DATA; } s=GWEN_Dialog_GetCharProperty(dlg, "wiz_org_edit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) AO_EditUserDialog_SetOrg(dlg, s); else { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "Missing ORG"); /* switch to correct page, show error message, set focus */ GWEN_Dialog_SetIntProperty(dlg, "wiz_tab_book", GWEN_DialogProperty_Value, 0, 1, 0); GWEN_Gui_ShowError(I18N("Missing Input"), I18N("Please enter a valid ORG code.")); GWEN_Dialog_SetIntProperty(dlg, "wiz_org_edit", GWEN_DialogProperty_Focus, 0, 1, 0); return GWEN_ERROR_NO_DATA; } s=GWEN_Dialog_GetCharProperty(dlg, "wiz_url_edit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) AO_EditUserDialog_SetUrl(dlg, s); else { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "Missing URL"); /* switch to correct page, show error message, set focus */ GWEN_Dialog_SetIntProperty(dlg, "wiz_tab_book", GWEN_DialogProperty_Value, 0, 1, 0); GWEN_Gui_ShowError(I18N("Missing Input"), I18N("Please enter a server address.")); GWEN_Dialog_SetIntProperty(dlg, "wiz_url_edit", GWEN_DialogProperty_Focus, 0, 1, 0); return GWEN_ERROR_NO_DATA; } s=GWEN_Dialog_GetCharProperty(dlg, "wiz_user_agent_edit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) AO_EditUserDialog_SetUserAgent(dlg, s); else AO_EditUserDialog_SetUserAgent(dlg, NULL); return 0; } int AO_EditUserDialog_GetUserPageData(GWEN_DIALOG *dlg) { AO_EDITUSER_DIALOG *xdlg; const char *s; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AO_EDITUSER_DIALOG, dlg); assert(xdlg); s=GWEN_Dialog_GetCharProperty(dlg, "wiz_username_edit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) AO_EditUserDialog_SetUserName(dlg, s); else { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "Missing user name"); /* switch to correct page, show error message, set focus */ GWEN_Dialog_SetIntProperty(dlg, "wiz_tab_book", GWEN_DialogProperty_Value, 0, 0, 0); GWEN_Gui_ShowError(I18N("Missing Input"), I18N("Please enter your name.")); GWEN_Dialog_SetIntProperty(dlg, "wiz_username_edit", GWEN_DialogProperty_Focus, 0, 1, 0); return GWEN_ERROR_NO_DATA; } s=GWEN_Dialog_GetCharProperty(dlg, "wiz_userid_edit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) AO_EditUserDialog_SetUserId(dlg, s); else { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "Missing user id"); /* switch to correct page, show error message, set focus */ GWEN_Dialog_SetIntProperty(dlg, "wiz_tab_book", GWEN_DialogProperty_Value, 0, 0, 0); GWEN_Gui_ShowError(I18N("Missing Input"), I18N("Please enter your User ID.")); GWEN_Dialog_SetIntProperty(dlg, "wiz_userid_edit", GWEN_DialogProperty_Focus, 0, 1, 0); return GWEN_ERROR_NO_DATA; } s=GWEN_Dialog_GetCharProperty(dlg, "wiz_clientuid_edit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) AO_EditUserDialog_SetClientUid(dlg, s); else AO_EditUserDialog_SetClientUid(dlg, NULL); return 0; } int AO_EditUserDialog_GetAppPageData(GWEN_DIALOG *dlg) { AO_EDITUSER_DIALOG *xdlg; const char *s; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AO_EDITUSER_DIALOG, dlg); assert(xdlg); s=GWEN_Dialog_GetCharProperty(dlg, "wiz_appid_edit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) AO_EditUserDialog_SetAppId(dlg, s); else { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "Missing application id"); /* switch to correct page, show error message, set focus */ GWEN_Dialog_SetIntProperty(dlg, "wiz_tab_book", GWEN_DialogProperty_Value, 0, 2, 0); GWEN_Gui_ShowError(I18N("Missing Input"), I18N("Please select a valid application to emulate.")); GWEN_Dialog_SetIntProperty(dlg, "wiz_app_combo", GWEN_DialogProperty_Focus, 0, 1, 0); return GWEN_ERROR_NO_DATA; } s=GWEN_Dialog_GetCharProperty(dlg, "wiz_appver_edit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) AO_EditUserDialog_SetAppVer(dlg, s); else { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "Missing application version"); /* switch to correct page, show error message, set focus */ GWEN_Dialog_SetIntProperty(dlg, "wiz_tab_book", GWEN_DialogProperty_Value, 0, 2, 0); GWEN_Gui_ShowError(I18N("Missing Input"), I18N("Please select a valid application to emulate.")); GWEN_Dialog_SetIntProperty(dlg, "wiz_app_combo", GWEN_DialogProperty_Focus, 0, 1, 0); return GWEN_ERROR_NO_DATA; } s=GWEN_Dialog_GetCharProperty(dlg, "wiz_headerver_edit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) AO_EditUserDialog_SetHeaderVer(dlg, s); else { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "Setting empty header version to let the backend select default version"); AO_EditUserDialog_SetHeaderVer(dlg, s); #if 0 DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "Missing application version"); /* switch to correct page, show error message, set focus */ GWEN_Dialog_SetIntProperty(dlg, "wiz_tab_book", GWEN_DialogProperty_Value, 0, 2, 0); GWEN_Gui_ShowError(I18N("Missing Input"), I18N("Please enter a correct header version (default is 102).")); GWEN_Dialog_SetIntProperty(dlg, "wiz_headerver_edit", GWEN_DialogProperty_Focus, 0, 1, 0); return GWEN_ERROR_NO_DATA; #endif } return 0; } int AO_EditUserDialog_FromGui(GWEN_DIALOG *dlg) { AO_EDITUSER_DIALOG *xdlg; int rv; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AO_EDITUSER_DIALOG, dlg); assert(xdlg); rv=AO_EditUserDialog_GetBankPageData(dlg); if (rv<0) { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "here (%d)", rv); return GWEN_ERROR_BAD_DATA; } rv=AO_EditUserDialog_GetUserPageData(dlg); if (rv<0) { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "here (%d)", rv); return GWEN_ERROR_BAD_DATA; } rv=AO_EditUserDialog_GetAppPageData(dlg); if (rv<0) { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "here (%d)", rv); return GWEN_ERROR_BAD_DATA; } /* lock new user */ if (xdlg->doLock) { DBG_ERROR(0, "Locking user"); rv=AB_Provider_BeginExclUseUser(xdlg->provider, xdlg->user); if (rv<0) { DBG_ERROR(AQOFXCONNECT_LOGDOMAIN, "Could not lock user (%d)", rv); return rv; } } /* generic setup */ AB_User_SetUserName(xdlg->user, xdlg->userName); AB_User_SetUserId(xdlg->user, xdlg->userId); AB_User_SetCustomerId(xdlg->user, xdlg->userId); AB_User_SetCountry(xdlg->user, "us"); AB_User_SetBankCode(xdlg->user, "0000000000"); AO_User_SetFlags(xdlg->user, xdlg->flags); AO_User_SetBankName(xdlg->user, xdlg->bankName); AO_User_SetBrokerId(xdlg->user, xdlg->brokerId); AO_User_SetOrg(xdlg->user, xdlg->org); AO_User_SetFid(xdlg->user, xdlg->fid); AO_User_SetAppId(xdlg->user, xdlg->appId); AO_User_SetAppVer(xdlg->user, xdlg->appVer); AO_User_SetHeaderVer(xdlg->user, xdlg->headerVer); AO_User_SetClientUid(xdlg->user, xdlg->clientUid); AO_User_SetSecurityType(xdlg->user, xdlg->securityType); AO_User_SetServerAddr(xdlg->user, xdlg->url); AO_User_SetHttpUserAgent(xdlg->user, xdlg->userAgent); AO_User_SetHttpVMajor(xdlg->user, xdlg->httpVMajor); AO_User_SetHttpVMinor(xdlg->user, xdlg->httpVMinor); if (xdlg->doLock) { /* unlock user */ DBG_ERROR(0, "Unlocking user"); rv=AB_Provider_EndExclUseUser(xdlg->provider, xdlg->user, 0); if (rv<0) { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "Could not unlock user [%s] (%d)", AB_User_GetUserId(xdlg->user), rv); AB_Provider_EndExclUseUser(xdlg->provider, xdlg->user, 1); return rv; } } return 0; } int AO_EditUserDialog_HandleActivatedSpecial(GWEN_DIALOG *dlg) { AO_EDITUSER_DIALOG *xdlg; GWEN_DIALOG *dlg2; int rv; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AO_EDITUSER_DIALOG, dlg); assert(xdlg); dlg2=AO_OfxSpecialDialog_new(xdlg->provider); if (dlg2==NULL) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Could not create dialog"); return GWEN_DialogEvent_ResultHandled; } AO_OfxSpecialDialog_SetHttpVersion(dlg2, xdlg->httpVMajor, xdlg->httpVMinor); AO_OfxSpecialDialog_SetFlags(dlg2, xdlg->flags); AO_OfxSpecialDialog_SetClientUid(dlg2, xdlg->clientUid); AO_OfxSpecialDialog_SetSecurityType(dlg2, xdlg->securityType); rv=GWEN_Gui_ExecDialog(dlg2, 0); if (rv==0) { /* rejected */ DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "Rejected"); GWEN_Dialog_free(dlg2); return GWEN_DialogEvent_ResultHandled; } else { const char *s; DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "Accepted"); xdlg->httpVMajor=AO_OfxSpecialDialog_GetHttpVMajor(dlg2); xdlg->httpVMinor=AO_OfxSpecialDialog_GetHttpVMinor(dlg2); xdlg->flags=AO_OfxSpecialDialog_GetFlags(dlg2); s=AO_OfxSpecialDialog_GetClientUid(dlg2); free(xdlg->clientUid); if (s) xdlg->clientUid=strdup(s); else xdlg->clientUid=NULL; s=AO_OfxSpecialDialog_GetSecurityType(dlg2); free(xdlg->securityType); if (s) xdlg->securityType=strdup(s); else xdlg->securityType=NULL; } GWEN_Dialog_free(dlg2); return GWEN_DialogEvent_ResultHandled; } int AO_EditUserDialog_HandleActivatedBankSelect(GWEN_DIALOG *dlg) { AO_EDITUSER_DIALOG *xdlg; int rv; GWEN_DIALOG *dlg2; GWEN_BUFFER *tbuf; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AO_EDITUSER_DIALOG, dlg); assert(xdlg); /* get data dir */ tbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=AB_Banking_GetProviderUserDataDir(xdlg->banking, "aqofxconnect", tbuf); if (rv<0) { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); return GWEN_DialogEvent_ResultHandled; } GWEN_Buffer_AppendString(tbuf, GWEN_DIR_SEPARATOR_S "ofxhome"); /* possibly create data folder */ rv=GWEN_Directory_GetPath(GWEN_Buffer_GetStart(tbuf), GWEN_PATH_FLAGS_CHECKROOT); if (rv<0) { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); return GWEN_DialogEvent_ResultHandled; } dlg2=OH_GetInstituteDialog_new(GWEN_Buffer_GetStart(tbuf), NULL); GWEN_Buffer_free(tbuf); if (dlg2==NULL) { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "Could not create dialog"); return GWEN_DialogEvent_ResultHandled; } rv=GWEN_Gui_ExecDialog(dlg2, 0); if (rv<=0) { DBG_DEBUG(AQOFXCONNECT_LOGDOMAIN, "Dialog: rejected (%d)", rv); return GWEN_DialogEvent_ResultHandled; } else { const OH_INSTITUTE_DATA *od; DBG_DEBUG(AQOFXCONNECT_LOGDOMAIN, "Dialog: rejected (%d)", rv); od=OH_GetInstituteDialog_GetSelectedInstitute(dlg2); if (od) { const char *s; s=OH_InstituteData_GetName(od); if (s && *s) GWEN_Dialog_SetCharProperty(dlg, "wiz_bankname_edit", GWEN_DialogProperty_Value, 0, s, 0); s=OH_InstituteData_GetFid(od); if (s && *s) GWEN_Dialog_SetCharProperty(dlg, "wiz_fid_edit", GWEN_DialogProperty_Value, 0, s, 0); s=OH_InstituteData_GetOrg(od); if (s && *s) GWEN_Dialog_SetCharProperty(dlg, "wiz_org_edit", GWEN_DialogProperty_Value, 0, s, 0); s=OH_InstituteData_GetUrl(od); if (s && *s) GWEN_Dialog_SetCharProperty(dlg, "wiz_url_edit", GWEN_DialogProperty_Value, 0, s, 0); rv=AO_EditUserDialog_GetBankPageData(dlg); if (rv<0) GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 0, 0); else GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 1, 0); } } GWEN_Dialog_free(dlg2); return GWEN_DialogEvent_ResultHandled; } int AO_EditUserDialog_HandleActivatedApp(GWEN_DIALOG *dlg) { AO_EDITUSER_DIALOG *xdlg; int idx; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AO_EDITUSER_DIALOG, dlg); assert(xdlg); idx=GWEN_Dialog_GetIntProperty(dlg, "wiz_app_combo", GWEN_DialogProperty_Value, 0, -1); if (idx>0) { const AO_APPINFO *ai; ai=AO_Provider_GetAppInfos(xdlg->provider); if (ai) { while (ai->appName && --idx) { ai++; } if (ai->appName) { if (ai->appId) GWEN_Dialog_SetCharProperty(dlg, "wiz_appid_edit", GWEN_DialogProperty_Value, 0, ai->appId, 0); if (ai->appVer) GWEN_Dialog_SetCharProperty(dlg, "wiz_appver_edit", GWEN_DialogProperty_Value, 0, ai->appVer, 0); } } } return GWEN_DialogEvent_ResultHandled; } int AO_EditUserDialog_HandleActivatedGetAccounts(GWEN_DIALOG *dlg) { AO_EDITUSER_DIALOG *xdlg; int rv; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AO_EDITUSER_DIALOG, dlg); assert(xdlg); rv=AO_Provider_RequestAccounts(xdlg->provider, xdlg->user, 1); if (rv<0) { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "here"); } return GWEN_DialogEvent_ResultHandled; } int AO_EditUserDialog_HandleActivated(GWEN_DIALOG *dlg, const char *sender) { DBG_ERROR(0, "Activated: %s", sender); if (strcasecmp(sender, "abortButton")==0) { return GWEN_DialogEvent_ResultReject; } else if (strcasecmp(sender, "okButton")==0) { int rv; rv=AO_EditUserDialog_GetBankPageData(dlg); if (rv<0) { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "here (%d)", rv); return GWEN_DialogEvent_ResultHandled; } rv=AO_EditUserDialog_GetUserPageData(dlg); if (rv<0) { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "here (%d)", rv); return GWEN_DialogEvent_ResultHandled; } rv=AO_EditUserDialog_GetAppPageData(dlg); if (rv<0) { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "here (%d)", rv); return GWEN_DialogEvent_ResultHandled; } rv=AO_EditUserDialog_FromGui(dlg); if (rv<0) { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "here (%d)", rv); return GWEN_DialogEvent_ResultHandled; } return GWEN_DialogEvent_ResultAccept; } else if (strcasecmp(sender, "wiz_bank_button")==0) return AO_EditUserDialog_HandleActivatedBankSelect(dlg); else if (strcasecmp(sender, "wiz_app_combo")==0) return AO_EditUserDialog_HandleActivatedApp(dlg); else if (strcasecmp(sender, "wiz_special_button")==0) return AO_EditUserDialog_HandleActivatedSpecial(dlg); else if (strcasecmp(sender, "wiz_getaccounts_button")==0) return AO_EditUserDialog_HandleActivatedGetAccounts(dlg); else if (strcasecmp(sender, "wiz_help_button")==0) { /* TODO: open a help dialog */ } return GWEN_DialogEvent_ResultNotHandled; } int AO_EditUserDialog_HandleValueChanged(GWEN_DIALOG *dlg, const char *sender) { if (strcasecmp(sender, "wiz_username_edit")==0 || strcasecmp(sender, "wiz_userid_edit")==0 || strcasecmp(sender, "wiz_url_edit")==0 || strcasecmp(sender, "wiz_brokerid_edit")==0 || strcasecmp(sender, "wiz_fid_edit")==0 || strcasecmp(sender, "wiz_org_edit")==0 || strcasecmp(sender, "wiz_appid_edit")==0 || strcasecmp(sender, "wiz_appver_edit")==0 || strcasecmp(sender, "wiz_headerver_edit")==0) { int rv; if (GWEN_Dialog_GetIntProperty(dlg, "wiz_stack", GWEN_DialogProperty_Value, 0, -1)==PAGE_BANK) { rv=AO_EditUserDialog_GetBankPageData(dlg); if (rv<0) GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 0, 0); else GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 1, 0); } else if (GWEN_Dialog_GetIntProperty(dlg, "wiz_stack", GWEN_DialogProperty_Value, 0, -1)==PAGE_USER) { rv=AO_EditUserDialog_GetUserPageData(dlg); if (rv<0) GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 0, 0); else GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 1, 0); } else if (GWEN_Dialog_GetIntProperty(dlg, "wiz_stack", GWEN_DialogProperty_Value, 0, -1)==PAGE_APP) { rv=AO_EditUserDialog_GetAppPageData(dlg); if (rv<0) GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 0, 0); else GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 1, 0); } return GWEN_DialogEvent_ResultHandled; } return GWEN_DialogEvent_ResultNotHandled; } int GWENHYWFAR_CB AO_EditUserDialog_SignalHandler(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender) { AO_EDITUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AO_EDITUSER_DIALOG, dlg); assert(xdlg); switch (t) { case GWEN_DialogEvent_TypeInit: AO_EditUserDialog_Init(dlg); return GWEN_DialogEvent_ResultHandled;; case GWEN_DialogEvent_TypeFini: AO_EditUserDialog_Fini(dlg); return GWEN_DialogEvent_ResultHandled;; case GWEN_DialogEvent_TypeValueChanged: return AO_EditUserDialog_HandleValueChanged(dlg, sender); case GWEN_DialogEvent_TypeActivated: return AO_EditUserDialog_HandleActivated(dlg, sender); case GWEN_DialogEvent_TypeEnabled: case GWEN_DialogEvent_TypeDisabled: case GWEN_DialogEvent_TypeClose: case GWEN_DialogEvent_TypeLast: return GWEN_DialogEvent_ResultNotHandled; default: break; } return GWEN_DialogEvent_ResultNotHandled; } aqbanking-6.6.1/src/libs/plugins/backends/aqofxconnect/dialogs/dlg_newuser_p.h0000664000175000017500000000451314043610745024504 00000000000000/*************************************************************************** begin : Thu Aug 19 2010 copyright : (C) 2010 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQOFXCONNECT_DLG_NEWUSER_P_H #define AQOFXCONNECT_DLG_NEWUSER_P_H #include "dlg_newuser_l.h" typedef struct AO_NEWUSER_DIALOG AO_NEWUSER_DIALOG; struct AO_NEWUSER_DIALOG { AB_PROVIDER *provider; AB_BANKING *banking; char *userName; char *userId; char *url; char *bankName; char *brokerId; char *org; char *fid; char *appId; char *appVer; char *headerVer; char *clientUid; char *securityType; int httpVMajor; int httpVMinor; uint32_t flags; AB_USER *user; }; static void GWENHYWFAR_CB AO_NewUserDialog_FreeData(void *bp, void *p); static int GWENHYWFAR_CB AO_NewUserDialog_SignalHandler(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender); static void AO_NewUserDialog_Init(GWEN_DIALOG *dlg); static void AO_NewUserDialog_Fini(GWEN_DIALOG *dlg); static int AO_NewUserDialog_GetBankPageData(GWEN_DIALOG *dlg); static int AO_NewUserDialog_GetUserPageData(GWEN_DIALOG *dlg); static int AO_NewUserDialog_GetAppPageData(GWEN_DIALOG *dlg); static int AO_NewUserDialog_EnterPage(GWEN_DIALOG *dlg, int page, int forwards); static int AO_NewUserDialog_DoIt(GWEN_DIALOG *dlg); static int AO_NewUserDialog_UndoIt(GWEN_DIALOG *dlg); static int AO_NewUserDialog_Next(GWEN_DIALOG *dlg); static int AO_NewUserDialog_Previous(GWEN_DIALOG *dlg); static int AO_NewUserDialog_HandleActivatedSpecial(GWEN_DIALOG *dlg); static int AO_NewUserDialog_HandleActivatedBankSelect(GWEN_DIALOG *dlg); static int AO_NewUserDialog_HandleActivatedApp(GWEN_DIALOG *dlg); static int AO_NewUserDialog_HandleActivatedGetAccounts(GWEN_DIALOG *dlg); static int AO_NewUserDialog_HandleActivated(GWEN_DIALOG *dlg, const char *sender); static int AO_NewUserDialog_HandleValueChanged(GWEN_DIALOG *dlg, const char *sender); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqofxconnect/dialogs/dlg_ofx_special.dlg0000664000175000017500000000362514043610745025313 00000000000000 aqbanking-6.6.1/src/libs/plugins/backends/aqofxconnect/dialogs/dlg_edituser.dlg0000664000175000017500000001153614043610745024643 00000000000000 aqbanking-6.6.1/src/libs/plugins/backends/aqofxconnect/dialogs/dlg_newuser_l.h0000664000175000017500000000521614043610745024501 00000000000000/*************************************************************************** begin : Thu Aug 19 2010 copyright : (C) 2018 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQOFXCONNECT_DLG_NEWUSER_L_H #define AQOFXCONNECT_DLG_NEWUSER_L_H #include #include #include #include #include #ifdef __cplusplus extern "C" { #endif GWEN_DIALOG *AO_NewUserDialog_new(AB_PROVIDER *pro); const char *AO_NewUserDialog_GetUserName(const GWEN_DIALOG *dlg); void AO_NewUserDialog_SetUserName(GWEN_DIALOG *dlg, const char *s); const char *AO_NewUserDialog_GetUserId(const GWEN_DIALOG *dlg); void AO_NewUserDialog_SetUserId(GWEN_DIALOG *dlg, const char *s); const char *AO_NewUserDialog_GetClientUid(const GWEN_DIALOG *dlg); void AO_NewUserDialog_SetClientUid(GWEN_DIALOG *dlg, const char *s); const char *AO_NewUserDialog_GetFid(const GWEN_DIALOG *dlg); void AO_NewUserDialog_SetFid(GWEN_DIALOG *dlg, const char *s); const char *AO_NewUserDialog_GetOrg(const GWEN_DIALOG *dlg); void AO_NewUserDialog_SetOrg(GWEN_DIALOG *dlg, const char *s); const char *AO_NewUserDialog_GetAppId(const GWEN_DIALOG *dlg); void AO_NewUserDialog_SetAppId(GWEN_DIALOG *dlg, const char *s); const char *AO_NewUserDialog_GetAppVer(const GWEN_DIALOG *dlg); void AO_NewUserDialog_SetAppVer(GWEN_DIALOG *dlg, const char *s); const char *AO_NewUserDialog_GetHeaderVer(const GWEN_DIALOG *dlg); void AO_NewUserDialog_SetHeaderVer(GWEN_DIALOG *dlg, const char *s); const char *AO_NewUserDialog_GetBrokerId(const GWEN_DIALOG *dlg); void AO_NewUserDialog_SetBrokerId(GWEN_DIALOG *dlg, const char *s); const char *AO_NewUserDialog_GetUrl(const GWEN_DIALOG *dlg); void AO_NewUserDialog_SetUrl(GWEN_DIALOG *dlg, const char *s); int AO_NewUserDialog_GetHttpVMajor(const GWEN_DIALOG *dlg); int AO_NewUserDialog_GetHttpVMinor(const GWEN_DIALOG *dlg); void AO_NewUserDialog_SetHttpVersion(GWEN_DIALOG *dlg, int vmajor, int vminor); uint32_t AO_NewUserDialog_GetFlags(const GWEN_DIALOG *dlg); void AO_NewUserDialog_SetFlags(GWEN_DIALOG *dlg, uint32_t fl); void AO_NewUserDialog_AddFlags(GWEN_DIALOG *dlg, uint32_t fl); void AO_NewUserDialog_SubFlags(GWEN_DIALOG *dlg, uint32_t fl); AB_USER *AO_NewUserDialog_GetUser(const GWEN_DIALOG *dlg); #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/plugins/backends/aqofxconnect/dialogs/Makefile.am0000664000175000017500000000227414043610745023534 00000000000000 AM_CFLAGS=-DBUILDING_AQBANKING @visibility_cflags@ AM_CPPFLAGS = -I$(top_srcdir)/src/libs -I$(top_builddir)/src/libs -I$(srcdir)/../.. $(gwenhywfar_includes) localedir = $(datadir)/locale DEFS += -DLOCALEDIR=\"$(localedir)\" noinst_LTLIBRARIES=libofxdcdialogs.la dlgdatadir=$(aqbanking_pkgdatadir)/backends/aqofxconnect/dialogs dlgdata_DATA=\ dlg_edituser.dlg \ dlg_newuser.dlg \ dlg_ofx_special.dlg noinst_HEADERS=\ dlg_edituser_p.h dlg_edituser_l.h \ dlg_newuser_p.h dlg_newuser_l.h \ dlg_ofx_special_p.h dlg_ofx_special_l.h #iheaderdir=@aqbanking_headerdir_am@/aqpaypal #iheader_HEADERS= libofxdcdialogs_la_SOURCES=\ dlg_edituser.c \ dlg_newuser.c \ dlg_ofx_special.c EXTRA_DIST= $(dlgdata_DATA) $(dlgimage_DATA) sources: for f in $(libofxdcdialogs_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d sources; \ done cppcheck: for f in $(libofxdcdialogs_la_SOURCES); do \ cppcheck --force $$f ; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done built_sources: list='$(SUBDIRS)'; for d in $$list; do \ $(MAKE) -C $$d built_sources; \ done ; typefiles: typedefs: aqbanking-6.6.1/src/libs/plugins/backends/aqofxconnect/dialogs/dlg_newuser.dlg0000664000175000017500000001143614043610745024506 00000000000000 aqbanking-6.6.1/src/libs/plugins/backends/aqofxconnect/dialogs/dlg_ofx_special_p.h0000664000175000017500000000224114043610745025304 00000000000000/*************************************************************************** begin : Thu Aug 19 2010 copyright : (C) 2018 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQOFXCONNECT_DLG_OFX_SPECIAL_P_H #define AQOFXCONNECT_DLG_OFX_SPECIAL_P_H #include "dlg_ofx_special_l.h" typedef struct AO_OFX_SPECIAL_DIALOG AO_OFX_SPECIAL_DIALOG; struct AO_OFX_SPECIAL_DIALOG { AB_PROVIDER *provider; AB_BANKING *banking; int httpVMajor; int httpVMinor; uint32_t flags; char *clientUid; char *securityType; }; static void GWENHYWFAR_CB AO_OfxSpecialDialog_FreeData(void *bp, void *p); static int GWENHYWFAR_CB AO_OfxSpecialDialog_SignalHandler(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqofxconnect/dialogs/dlg_edituser_l.h0000664000175000017500000000161414043610745024633 00000000000000/*************************************************************************** begin : Tue Aug 24 2010 copyright : (C) 2018 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQOFXCONNECT_DLG_EDITUSER_L_H #define AQOFXCONNECT_DLG_EDITUSER_L_H #include #include #include #include #include #ifdef __cplusplus extern "C" { #endif GWEN_DIALOG *AO_EditUserDialog_new(AB_PROVIDER *ab, AB_USER *u, int doLock); #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/plugins/backends/aqofxconnect/dialogs/dlg_newuser.c0000664000175000017500000012036614546575650024202 00000000000000/*************************************************************************** begin : Thu Aug 19 2010 copyright : (C) 2020 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "dlg_newuser_p.h" #include "dlg_ofx_special_l.h" #include "aqofxconnect/libofxhome/dlg_getinst.h" #include #include #include "aqbanking/i18n_l.h" #include #include #include #include #include #include #include #include #define PAGE_BEGIN 0 #define PAGE_BANK 1 #define PAGE_USER 2 #define PAGE_APP 3 #define PAGE_CREATE 4 #define PAGE_END 5 #define DIALOG_MINWIDTH 400 #define DIALOG_MINHEIGHT 200 GWEN_INHERIT(GWEN_DIALOG, AO_NEWUSER_DIALOG) GWEN_DIALOG *AO_NewUserDialog_new(AB_PROVIDER *pro) { GWEN_DIALOG *dlg; AO_NEWUSER_DIALOG *xdlg; GWEN_BUFFER *fbuf; int rv; dlg=GWEN_Dialog_new("ao_newuser"); GWEN_NEW_OBJECT(AO_NEWUSER_DIALOG, xdlg); GWEN_INHERIT_SETDATA(GWEN_DIALOG, AO_NEWUSER_DIALOG, dlg, xdlg, AO_NewUserDialog_FreeData); GWEN_Dialog_SetSignalHandler(dlg, AO_NewUserDialog_SignalHandler); /* get path of dialog description file */ fbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_PathManager_FindFile(AB_PM_LIBNAME, AB_PM_DATADIR, "aqbanking/backends/aqofxconnect/dialogs/dlg_newuser.dlg", fbuf); if (rv<0) { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "Dialog description file not found (%d).", rv); GWEN_Buffer_free(fbuf); GWEN_Dialog_free(dlg); return NULL; } /* read dialog from dialog description file */ rv=GWEN_Dialog_ReadXmlFile(dlg, GWEN_Buffer_GetStart(fbuf)); if (rv<0) { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(fbuf); GWEN_Dialog_free(dlg); return NULL; } GWEN_Buffer_free(fbuf); xdlg->provider=pro; xdlg->banking=AB_Provider_GetBanking(pro); /* preset */ xdlg->httpVMajor=1; xdlg->httpVMinor=1; /* done */ return dlg; } void GWENHYWFAR_CB AO_NewUserDialog_FreeData(void *bp, void *p) { AO_NEWUSER_DIALOG *xdlg; xdlg=(AO_NEWUSER_DIALOG *) p; free(xdlg->userName); free(xdlg->userId); free(xdlg->url); free(xdlg->brokerId); free(xdlg->org); free(xdlg->fid); free(xdlg->appId); free(xdlg->appVer); free(xdlg->headerVer); free(xdlg->clientUid); free(xdlg->securityType); GWEN_FREE_OBJECT(xdlg); } AB_USER *AO_NewUserDialog_GetUser(const GWEN_DIALOG *dlg) { AO_NEWUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AO_NEWUSER_DIALOG, dlg); assert(xdlg); return xdlg->user; } const char *AO_NewUserDialog_GetBankName(const GWEN_DIALOG *dlg) { AO_NEWUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AO_NEWUSER_DIALOG, dlg); assert(xdlg); return xdlg->bankName; } void AO_NewUserDialog_SetBankName(GWEN_DIALOG *dlg, const char *s) { AO_NEWUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AO_NEWUSER_DIALOG, dlg); assert(xdlg); free(xdlg->bankName); if (s) xdlg->bankName=strdup(s); else xdlg->bankName=NULL; } const char *AO_NewUserDialog_GetUserName(const GWEN_DIALOG *dlg) { AO_NEWUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AO_NEWUSER_DIALOG, dlg); assert(xdlg); return xdlg->userName; } void AO_NewUserDialog_SetUserName(GWEN_DIALOG *dlg, const char *s) { AO_NEWUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AO_NEWUSER_DIALOG, dlg); assert(xdlg); free(xdlg->userName); if (s) xdlg->userName=strdup(s); else xdlg->userName=NULL; } const char *AO_NewUserDialog_GetUserId(const GWEN_DIALOG *dlg) { AO_NEWUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AO_NEWUSER_DIALOG, dlg); assert(xdlg); return xdlg->userId; } void AO_NewUserDialog_SetUserId(GWEN_DIALOG *dlg, const char *s) { AO_NEWUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AO_NEWUSER_DIALOG, dlg); assert(xdlg); free(xdlg->userId); if (s) xdlg->userId=strdup(s); else xdlg->userId=NULL; } const char *AO_NewUserDialog_GetFid(const GWEN_DIALOG *dlg) { AO_NEWUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AO_NEWUSER_DIALOG, dlg); assert(xdlg); return xdlg->fid; } void AO_NewUserDialog_SetFid(GWEN_DIALOG *dlg, const char *s) { AO_NEWUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AO_NEWUSER_DIALOG, dlg); assert(xdlg); free(xdlg->fid); if (s) xdlg->fid=strdup(s); else xdlg->fid=NULL; } const char *AO_NewUserDialog_GetOrg(const GWEN_DIALOG *dlg) { AO_NEWUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AO_NEWUSER_DIALOG, dlg); assert(xdlg); return xdlg->org; } void AO_NewUserDialog_SetOrg(GWEN_DIALOG *dlg, const char *s) { AO_NEWUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AO_NEWUSER_DIALOG, dlg); assert(xdlg); free(xdlg->org); if (s) xdlg->org=strdup(s); else xdlg->org=NULL; } const char *AO_NewUserDialog_GetAppId(const GWEN_DIALOG *dlg) { AO_NEWUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AO_NEWUSER_DIALOG, dlg); assert(xdlg); return xdlg->appId; } void AO_NewUserDialog_SetAppId(GWEN_DIALOG *dlg, const char *s) { AO_NEWUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AO_NEWUSER_DIALOG, dlg); assert(xdlg); free(xdlg->appId); if (s) xdlg->appId=strdup(s); else xdlg->appId=NULL; } const char *AO_NewUserDialog_GetAppVer(const GWEN_DIALOG *dlg) { AO_NEWUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AO_NEWUSER_DIALOG, dlg); assert(xdlg); return xdlg->appVer; } void AO_NewUserDialog_SetAppVer(GWEN_DIALOG *dlg, const char *s) { AO_NEWUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AO_NEWUSER_DIALOG, dlg); assert(xdlg); free(xdlg->appVer); if (s) xdlg->appVer=strdup(s); else xdlg->appVer=NULL; } const char *AO_NewUserDialog_GetHeaderVer(const GWEN_DIALOG *dlg) { AO_NEWUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AO_NEWUSER_DIALOG, dlg); assert(xdlg); return xdlg->headerVer; } void AO_NewUserDialog_SetHeaderVer(GWEN_DIALOG *dlg, const char *s) { AO_NEWUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AO_NEWUSER_DIALOG, dlg); assert(xdlg); free(xdlg->headerVer); if (s) xdlg->headerVer=strdup(s); else xdlg->headerVer=NULL; } const char *AO_NewUserDialog_GetBrokerId(const GWEN_DIALOG *dlg) { AO_NEWUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AO_NEWUSER_DIALOG, dlg); assert(xdlg); return xdlg->brokerId; } void AO_NewUserDialog_SetBrokerId(GWEN_DIALOG *dlg, const char *s) { AO_NEWUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AO_NEWUSER_DIALOG, dlg); assert(xdlg); free(xdlg->brokerId); if (s) xdlg->brokerId=strdup(s); else xdlg->brokerId=NULL; } const char *AO_NewUserDialog_GetUrl(const GWEN_DIALOG *dlg) { AO_NEWUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AO_NEWUSER_DIALOG, dlg); assert(xdlg); return xdlg->url; } void AO_NewUserDialog_SetUrl(GWEN_DIALOG *dlg, const char *s) { AO_NEWUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AO_NEWUSER_DIALOG, dlg); assert(xdlg); free(xdlg->url); if (s) xdlg->url=strdup(s); else xdlg->url=NULL; } const char *AO_NewUserDialog_GetClientUid(const GWEN_DIALOG *dlg) { AO_NEWUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AO_NEWUSER_DIALOG, dlg); assert(xdlg); return xdlg->clientUid; } void AO_NewUserDialog_SetClientUid(GWEN_DIALOG *dlg, const char *s) { AO_NEWUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AO_NEWUSER_DIALOG, dlg); assert(xdlg); free(xdlg->clientUid); if (s) xdlg->clientUid=strdup(s); else xdlg->clientUid=NULL; } int AO_NewUserDialog_GetHttpVMajor(const GWEN_DIALOG *dlg) { AO_NEWUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AO_NEWUSER_DIALOG, dlg); assert(xdlg); return xdlg->httpVMajor; } int AO_NewUserDialog_GetHttpVMinor(const GWEN_DIALOG *dlg) { AO_NEWUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AO_NEWUSER_DIALOG, dlg); assert(xdlg); return xdlg->httpVMinor; } void AO_NewUserDialog_SetHttpVersion(GWEN_DIALOG *dlg, int vmajor, int vminor) { AO_NEWUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AO_NEWUSER_DIALOG, dlg); assert(xdlg); xdlg->httpVMajor=vmajor; xdlg->httpVMinor=vminor; } uint32_t AO_NewUserDialog_GetFlags(const GWEN_DIALOG *dlg) { AO_NEWUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AO_NEWUSER_DIALOG, dlg); assert(xdlg); return xdlg->flags; } void AO_NewUserDialog_SetFlags(GWEN_DIALOG *dlg, uint32_t fl) { AO_NEWUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AO_NEWUSER_DIALOG, dlg); assert(xdlg); xdlg->flags=fl; } void AO_NewUserDialog_AddFlags(GWEN_DIALOG *dlg, uint32_t fl) { AO_NEWUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AO_NEWUSER_DIALOG, dlg); assert(xdlg); xdlg->flags&=~fl; } void AO_NewUserDialog_SubFlags(GWEN_DIALOG *dlg, uint32_t fl) { AO_NEWUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AO_NEWUSER_DIALOG, dlg); assert(xdlg); xdlg->flags&=~fl; } void AO_NewUserDialog_Init(GWEN_DIALOG *dlg) { AO_NEWUSER_DIALOG *xdlg; GWEN_DB_NODE *dbPrefs; int i; const AO_APPINFO *ai; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AO_NEWUSER_DIALOG, dlg); assert(xdlg); dbPrefs=GWEN_Dialog_GetPreferences(dlg); GWEN_Dialog_SetCharProperty(dlg, "", GWEN_DialogProperty_Title, 0, I18N("OFX DirectConnect Setup Wizard"), 0); /* select first page */ GWEN_Dialog_SetIntProperty(dlg, "wiz_stack", GWEN_DialogProperty_Value, 0, 0, 0); /* setup intro page */ GWEN_Dialog_SetCharProperty(dlg, "wiz_begin_label", GWEN_DialogProperty_Title, 0, I18N("" "

This dialog assists you in setting up an OFX DirectConnect User.

" "" "This dialog assists you in setting up an OFX DirectConnect User."), 0); /* setup bank page */ GWEN_Dialog_SetCharProperty(dlg, "wiz_bank_label", GWEN_DialogProperty_Title, 0, I18N("" "

Please enter your bank settings below.

" "

Click the Select button to choose from a list of " "known banks. That will connect to www.ofxhome.com and " "try to retrieve information about your bank.

" "

If you had to manually enter this information because your " "bank was unknown to www.ofxhome.com you are kindly " "asked to submit your bank server information there to help " "the next user.

" "" "Click the SELECT button to choose from a list of\n" "known banks. That will connect to \"www.ofxhome.com\" and\n" "try to retrieve information about your bank.\n" "If you had to manually enter this information because your\n" "bank was unknown to \"www.ofxhome.com\" you are kindly\n" "asked to submit your bank server information there to help\n" "the next user."), 0); /* setup user page */ GWEN_Dialog_SetCharProperty(dlg, "wiz_user_label", GWEN_DialogProperty_Title, 0, I18N("" "

Please enter your user settings below.

" "

User Name is your real name, User Id is " "assigned to you by the bank after applying for OFX DirectConnect " "and Client UID is used by some banks only. If you do not have such " "a value in your documents from the bank just leave it blank.

" "" "Please enter your user settings below.\n" "\"User Name\" is your real name, \"User Id\" is\n" "assigned to you by the bank after applying for OFX DirectConnect\n" "and \"Client UID\" is used by some banks. If you do not have such\n" "a value in your documents from the bank just leave it blank."), 0); /* setup application page */ GWEN_Dialog_SetCharProperty(dlg, "wiz_app_label", GWEN_DialogProperty_Title, 0, I18N("" "

Please choose the application you want AqBanking to emulate. " "Not all banks support all applications and versions, you might have " "to try multiple settings.

" "" "Please choose the application you want AqBanking to emulate.\n" "Not all banks support all applications and versions, you might have\n" "to try multiple settings."), 0); GWEN_Dialog_SetIntProperty(dlg, "wiz_app_combo", GWEN_DialogProperty_ClearValues, 0, 0, 0); GWEN_Dialog_SetCharProperty(dlg, "wiz_app_combo", GWEN_DialogProperty_AddValue, 0, I18N("-- select --"), 0); ai=AO_Provider_GetAppInfos(xdlg->provider); if (ai) { const AO_APPINFO *first; first=ai; while (ai->appName) { GWEN_Dialog_SetCharProperty(dlg, "wiz_app_combo", GWEN_DialogProperty_AddValue, 0, I18N(ai->appName), 0); ai++; } if (first->appName) { GWEN_Dialog_SetIntProperty(dlg, "wiz_app_combo", GWEN_DialogProperty_Value, 0, 1, 0); if (first->appId) GWEN_Dialog_SetCharProperty(dlg, "wiz_appid_edit", GWEN_DialogProperty_Value, 0, first->appId, 0); if (first->appVer) GWEN_Dialog_SetCharProperty(dlg, "wiz_appver_edit", GWEN_DialogProperty_Value, 0, first->appVer, 0); } } GWEN_Dialog_SetCharProperty(dlg, "wiz_headerver_edit", GWEN_DialogProperty_Value, 0, "102", 0); /* setup creation page */ GWEN_Dialog_SetCharProperty(dlg, "wiz_create_label", GWEN_DialogProperty_Title, 0, I18N("" "

We are now ready to create the user.

" "

Click the next button to proceed or abort to abort.

" "" "We are now ready to create the user.\n" "Click the NEXT button to proceed or ABORT to abort."), 0); /* setup extro page */ GWEN_Dialog_SetCharProperty(dlg, "wiz_end_label", GWEN_DialogProperty_Title, 0, I18N("" "

The user has been successfully setup.

" "

You can now try to retrieve the list of accounts the " "bank allows you to manage via OFX DirectConnect.

" "

Please note that not every banks supports this. If your " "bank does not support account list download you will have to " "add the account manually.

" "" "The user has been successfully setup.\n" "You can now try to retrieve the list of accounts the\n" "bank allows you to manage via OFX DirectConnect.\n" "Please note that not every banks supports this. If your\n" "bank does not support account list download you will have to\n" "add the account manually." ), 0); /* read width */ i=GWEN_DB_GetIntValue(dbPrefs, "dialog_width", 0, -1); if (i>=DIALOG_MINWIDTH) GWEN_Dialog_SetIntProperty(dlg, "", GWEN_DialogProperty_Width, 0, i, 0); /* read height */ i=GWEN_DB_GetIntValue(dbPrefs, "dialog_height", 0, -1); if (i>=DIALOG_MINHEIGHT) GWEN_Dialog_SetIntProperty(dlg, "", GWEN_DialogProperty_Height, 0, i, 0); /* disable next and previous buttons */ GWEN_Dialog_SetIntProperty(dlg, "wiz_prev_button", GWEN_DialogProperty_Enabled, 0, 0, 0); GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 1, 0); } void AO_NewUserDialog_Fini(GWEN_DIALOG *dlg) { AO_NEWUSER_DIALOG *xdlg; int i; GWEN_DB_NODE *dbPrefs; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AO_NEWUSER_DIALOG, dlg); assert(xdlg); dbPrefs=GWEN_Dialog_GetPreferences(dlg); /* store dialog width */ i=GWEN_Dialog_GetIntProperty(dlg, "", GWEN_DialogProperty_Width, 0, -1); GWEN_DB_SetIntValue(dbPrefs, GWEN_DB_FLAGS_OVERWRITE_VARS, "dialog_width", i); /* store dialog height */ i=GWEN_Dialog_GetIntProperty(dlg, "", GWEN_DialogProperty_Height, 0, -1); GWEN_DB_SetIntValue(dbPrefs, GWEN_DB_FLAGS_OVERWRITE_VARS, "dialog_height", i); } int AO_NewUserDialog_GetBankPageData(GWEN_DIALOG *dlg) { AO_NEWUSER_DIALOG *xdlg; const char *s; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AO_NEWUSER_DIALOG, dlg); assert(xdlg); s=GWEN_Dialog_GetCharProperty(dlg, "wiz_bankname_edit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) AO_NewUserDialog_SetBankName(dlg, s); else { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "Missing bank name"); return GWEN_ERROR_NO_DATA; } s=GWEN_Dialog_GetCharProperty(dlg, "wiz_brokerid_edit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) AO_NewUserDialog_SetBrokerId(dlg, s); else AO_NewUserDialog_SetBrokerId(dlg, NULL); s=GWEN_Dialog_GetCharProperty(dlg, "wiz_fid_edit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) AO_NewUserDialog_SetFid(dlg, s); else { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "Missing FID"); return GWEN_ERROR_NO_DATA; } s=GWEN_Dialog_GetCharProperty(dlg, "wiz_org_edit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) AO_NewUserDialog_SetOrg(dlg, s); else { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "Missing ORG"); return GWEN_ERROR_NO_DATA; } s=GWEN_Dialog_GetCharProperty(dlg, "wiz_url_edit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) AO_NewUserDialog_SetUrl(dlg, s); else { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "Missing URL"); return GWEN_ERROR_NO_DATA; } return 0; } int AO_NewUserDialog_GetUserPageData(GWEN_DIALOG *dlg) { AO_NEWUSER_DIALOG *xdlg; const char *s; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AO_NEWUSER_DIALOG, dlg); assert(xdlg); s=GWEN_Dialog_GetCharProperty(dlg, "wiz_username_edit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) AO_NewUserDialog_SetUserName(dlg, s); else { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "Missing user name"); return GWEN_ERROR_NO_DATA; } s=GWEN_Dialog_GetCharProperty(dlg, "wiz_userid_edit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) AO_NewUserDialog_SetUserId(dlg, s); else { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "Missing user id"); return GWEN_ERROR_NO_DATA; } s=GWEN_Dialog_GetCharProperty(dlg, "wiz_clientuid_edit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) AO_NewUserDialog_SetClientUid(dlg, s); else AO_NewUserDialog_SetClientUid(dlg, NULL); return 0; } int AO_NewUserDialog_GetAppPageData(GWEN_DIALOG *dlg) { AO_NEWUSER_DIALOG *xdlg; const char *s; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AO_NEWUSER_DIALOG, dlg); assert(xdlg); s=GWEN_Dialog_GetCharProperty(dlg, "wiz_appid_edit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) AO_NewUserDialog_SetAppId(dlg, s); else { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "Missing application id"); return GWEN_ERROR_NO_DATA; } s=GWEN_Dialog_GetCharProperty(dlg, "wiz_appver_edit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) AO_NewUserDialog_SetAppVer(dlg, s); else { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "Missing application version"); return GWEN_ERROR_NO_DATA; } s=GWEN_Dialog_GetCharProperty(dlg, "wiz_headerver_edit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) AO_NewUserDialog_SetHeaderVer(dlg, s); else { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "Missing application version"); return GWEN_ERROR_NO_DATA; } return 0; } int AO_NewUserDialog_EnterPage(GWEN_DIALOG *dlg, int page, int forwards) { AO_NEWUSER_DIALOG *xdlg; int rv; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AO_NEWUSER_DIALOG, dlg); assert(xdlg); switch (page) { case PAGE_BEGIN: GWEN_Dialog_SetIntProperty(dlg, "wiz_prev_button", GWEN_DialogProperty_Enabled, 0, 0, 0); GWEN_Dialog_SetIntProperty(dlg, "wiz_stack", GWEN_DialogProperty_Value, 0, page, 0); return GWEN_DialogEvent_ResultHandled; case PAGE_BANK: GWEN_Dialog_SetIntProperty(dlg, "wiz_prev_button", GWEN_DialogProperty_Enabled, 0, 1, 0); rv=AO_NewUserDialog_GetBankPageData(dlg); if (rv<0) GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 0, 0); else GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 1, 0); GWEN_Dialog_SetIntProperty(dlg, "wiz_stack", GWEN_DialogProperty_Value, 0, page, 0); return GWEN_DialogEvent_ResultHandled; case PAGE_USER: GWEN_Dialog_SetIntProperty(dlg, "wiz_prev_button", GWEN_DialogProperty_Enabled, 0, 1, 0); rv=AO_NewUserDialog_GetUserPageData(dlg); if (rv<0) GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 0, 0); else GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 1, 0); GWEN_Dialog_SetIntProperty(dlg, "wiz_stack", GWEN_DialogProperty_Value, 0, page, 0); return GWEN_DialogEvent_ResultHandled; case PAGE_APP: GWEN_Dialog_SetIntProperty(dlg, "wiz_prev_button", GWEN_DialogProperty_Enabled, 0, 1, 0); rv=AO_NewUserDialog_GetAppPageData(dlg); if (rv<0) GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 0, 0); else GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 1, 0); GWEN_Dialog_SetIntProperty(dlg, "wiz_stack", GWEN_DialogProperty_Value, 0, page, 0); return GWEN_DialogEvent_ResultHandled; case PAGE_CREATE: if (!forwards) { AO_NewUserDialog_UndoIt(dlg); GWEN_Dialog_SetCharProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Title, 0, I18N("Next"), 0); } GWEN_Dialog_SetIntProperty(dlg, "wiz_stack", GWEN_DialogProperty_Value, 0, page, 0); return GWEN_DialogEvent_ResultHandled; case PAGE_END: GWEN_Dialog_SetIntProperty(dlg, "wiz_stack", GWEN_DialogProperty_Value, 0, page, 0); GWEN_Dialog_SetCharProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Title, 0, I18N("Finish"), 0); GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 1, 0); #if 0 GWEN_Dialog_SetIntProperty(dlg, "wiz_prev_button", GWEN_DialogProperty_Enabled, 0, 0, 0); GWEN_Dialog_SetIntProperty(dlg, "wiz_abort_button", GWEN_DialogProperty_Enabled, 0, 0, 0); #endif return GWEN_DialogEvent_ResultHandled; default: return GWEN_DialogEvent_ResultHandled; } return GWEN_DialogEvent_ResultHandled; } int AO_NewUserDialog_DoIt(GWEN_DIALOG *dlg) { AO_NEWUSER_DIALOG *xdlg; AB_USER *u; int rv; uint32_t pid; DBG_ERROR(0, "Doit"); assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AO_NEWUSER_DIALOG, dlg); assert(xdlg); DBG_ERROR(0, "Creating user"); u=AB_Provider_CreateUserObject(xdlg->provider); if (u==NULL) { DBG_ERROR(AQOFXCONNECT_LOGDOMAIN, "Could not create user, maybe backend missing?"); // TODO: show error message return GWEN_DialogEvent_ResultHandled; } /* generic setup */ AB_User_SetUserName(u, xdlg->userName); AB_User_SetUserId(u, xdlg->userId); AB_User_SetCustomerId(u, xdlg->userId); AB_User_SetCountry(u, "us"); AO_User_SetBankName(u, xdlg->bankName); AB_User_SetBankCode(u, "0000000000"); AO_User_SetFlags(u, xdlg->flags); AO_User_SetBrokerId(u, xdlg->brokerId); AO_User_SetOrg(u, xdlg->org); AO_User_SetFid(u, xdlg->fid); AO_User_SetAppId(u, xdlg->appId); AO_User_SetAppVer(u, xdlg->appVer); AO_User_SetHeaderVer(u, xdlg->headerVer); AO_User_SetClientUid(u, xdlg->clientUid); AO_User_SetSecurityType(u, xdlg->securityType); AO_User_SetServerAddr(u, xdlg->url); AO_User_SetHttpVMajor(u, xdlg->httpVMajor); AO_User_SetHttpVMinor(u, xdlg->httpVMinor); DBG_ERROR(0, "Adding user"); rv=AB_Provider_AddUser(xdlg->provider, u); if (rv<0) { DBG_ERROR(AQOFXCONNECT_LOGDOMAIN, "Could not add user (%d)", rv); AB_User_free(u); return GWEN_DialogEvent_ResultHandled; } pid=GWEN_Gui_ProgressStart(GWEN_GUI_PROGRESS_DELAY | GWEN_GUI_PROGRESS_ALLOW_EMBED | GWEN_GUI_PROGRESS_SHOW_PROGRESS | GWEN_GUI_PROGRESS_SHOW_ABORT, I18N("Setting Up OFX DirectConnect User"), I18N("The user will be created and the certificate retrieved."), 1, 0); /* lock new user */ DBG_ERROR(0, "Locking user"); rv=AB_Provider_BeginExclUseUser(xdlg->provider, u); if (rv<0) { DBG_ERROR(AQOFXCONNECT_LOGDOMAIN, "Could not lock user (%d)", rv); GWEN_Gui_ProgressLog(pid, GWEN_LoggerLevel_Error, I18N("Unable to lock users")); AB_Provider_DeleteUser(xdlg->provider, AB_User_GetUniqueId(u)); GWEN_Gui_ProgressEnd(pid); return GWEN_DialogEvent_ResultHandled; } GWEN_Gui_ProgressLog(pid, GWEN_LoggerLevel_Notice, I18N("Retrieving SSL certificate")); rv=AO_Provider_GetCert(xdlg->provider, u); if (rv<0) { AB_Provider_EndExclUseUser(xdlg->provider, u, 1); DBG_ERROR(AQOFXCONNECT_LOGDOMAIN, "here (%d)", rv); AB_Provider_DeleteUser(xdlg->provider, AB_User_GetUniqueId(u)); GWEN_Gui_ProgressEnd(pid); return GWEN_DialogEvent_ResultHandled; } rv=GWEN_Gui_ProgressAdvance(pid, GWEN_GUI_PROGRESS_ONE); if (rv==GWEN_ERROR_USER_ABORTED) { AB_Provider_EndExclUseUser(xdlg->provider, u, 1); DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "here (%d)", rv); AB_Provider_DeleteUser(xdlg->provider, AB_User_GetUniqueId(u)); GWEN_Gui_ProgressLog(pid, GWEN_LoggerLevel_Error, I18N("Aborted by user.")); GWEN_Gui_ProgressEnd(pid); return GWEN_DialogEvent_ResultHandled; } /* unlock user */ DBG_ERROR(0, "Unlocking user"); rv=AB_Provider_EndExclUseUser(xdlg->provider, u, 0); if (rv<0) { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "Could not unlock user [%s] (%d)", AB_User_GetUserId(u), rv); GWEN_Gui_ProgressLog2(pid, GWEN_LoggerLevel_Error, I18N("Could not unlock user %s (%d)"), AB_User_GetUserId(u), rv); AB_Provider_EndExclUseUser(xdlg->provider, u, 1); AB_Provider_DeleteUser(xdlg->provider, AB_User_GetUniqueId(u)); GWEN_Gui_ProgressEnd(pid); return GWEN_DialogEvent_ResultHandled; } GWEN_Gui_ProgressEnd(pid); AO_NewUserDialog_EnterPage(dlg, PAGE_END, 1); xdlg->user=u; return GWEN_DialogEvent_ResultHandled; } int AO_NewUserDialog_UndoIt(GWEN_DIALOG *dlg) { AO_NEWUSER_DIALOG *xdlg; AB_USER *u; DBG_ERROR(0, "UndoIt"); assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AO_NEWUSER_DIALOG, dlg); assert(xdlg); u=xdlg->user; if (u) { AB_ACCOUNT_LIST *accountList; int rv; /* delete all accounts created for this user */ accountList=AB_Account_List_new(); rv=AB_Provider_ReadAccounts(xdlg->provider, accountList); if (rv<0) { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "here (%d)", rv); } else { uint32_t uid; AB_ACCOUNT *a; uid=AB_User_GetUniqueId(u); a=AB_Account_List_First(accountList); while (a) { AB_Account_List_Del(a); if (AB_Account_GetUserId(a)==uid) AB_Provider_DeleteAccount(xdlg->provider, AB_Account_GetUniqueId(a)); a=AB_Account_List_Next(a); } /* while a */ } AB_Account_List_free(accountList); /* delete the user itself */ AB_Provider_DeleteUser(xdlg->provider, AB_User_GetUniqueId(u)); xdlg->user=NULL; } return GWEN_DialogEvent_ResultHandled; } int AO_NewUserDialog_Next(GWEN_DIALOG *dlg) { AO_NEWUSER_DIALOG *xdlg; int page; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AO_NEWUSER_DIALOG, dlg); assert(xdlg); page=GWEN_Dialog_GetIntProperty(dlg, "wiz_stack", GWEN_DialogProperty_Value, 0, -1); if (page==PAGE_CREATE) { return AO_NewUserDialog_DoIt(dlg); } else if (pagePAGE_BEGIN) { page--; return AO_NewUserDialog_EnterPage(dlg, page, 0); } return GWEN_DialogEvent_ResultHandled; } int AO_NewUserDialog_HandleActivatedSpecial(GWEN_DIALOG *dlg) { AO_NEWUSER_DIALOG *xdlg; GWEN_DIALOG *dlg2; int rv; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AO_NEWUSER_DIALOG, dlg); assert(xdlg); dlg2=AO_OfxSpecialDialog_new(xdlg->provider); if (dlg2==NULL) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Could not create dialog"); return GWEN_DialogEvent_ResultHandled; } AO_OfxSpecialDialog_SetHttpVersion(dlg2, xdlg->httpVMajor, xdlg->httpVMinor); AO_OfxSpecialDialog_SetFlags(dlg2, xdlg->flags); AO_OfxSpecialDialog_SetClientUid(dlg2, xdlg->clientUid); AO_OfxSpecialDialog_SetSecurityType(dlg2, xdlg->securityType); rv=GWEN_Gui_ExecDialog(dlg2, 0); if (rv==0) { /* rejected */ DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "Rejected"); GWEN_Dialog_free(dlg2); return GWEN_DialogEvent_ResultHandled; } else { const char *s; DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "Accepted"); xdlg->httpVMajor=AO_OfxSpecialDialog_GetHttpVMajor(dlg2); xdlg->httpVMinor=AO_OfxSpecialDialog_GetHttpVMinor(dlg2); xdlg->flags=AO_OfxSpecialDialog_GetFlags(dlg2); s=AO_OfxSpecialDialog_GetClientUid(dlg2); free(xdlg->clientUid); if (s) xdlg->clientUid=strdup(s); else xdlg->clientUid=NULL; s=AO_OfxSpecialDialog_GetSecurityType(dlg2); free(xdlg->securityType); if (s) xdlg->securityType=strdup(s); else xdlg->securityType=NULL; } GWEN_Dialog_free(dlg2); return GWEN_DialogEvent_ResultHandled; } int AO_NewUserDialog_HandleActivatedBankSelect(GWEN_DIALOG *dlg) { AO_NEWUSER_DIALOG *xdlg; int rv; GWEN_DIALOG *dlg2; GWEN_BUFFER *tbuf; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AO_NEWUSER_DIALOG, dlg); assert(xdlg); /* get data dir */ tbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=AB_Banking_GetProviderUserDataDir(xdlg->banking, "aqofxconnect", tbuf); if (rv<0) { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); return GWEN_DialogEvent_ResultHandled; } GWEN_Buffer_AppendString(tbuf, GWEN_DIR_SEPARATOR_S "ofxhome"); /* possibly create data folder */ rv=GWEN_Directory_GetPath(GWEN_Buffer_GetStart(tbuf), GWEN_PATH_FLAGS_CHECKROOT); if (rv<0) { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); return GWEN_DialogEvent_ResultHandled; } dlg2=OH_GetInstituteDialog_new(GWEN_Buffer_GetStart(tbuf), NULL); GWEN_Buffer_free(tbuf); if (dlg2==NULL) { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "Could not create dialog"); return GWEN_DialogEvent_ResultHandled; } rv=GWEN_Gui_ExecDialog(dlg2, 0); if (rv<=0) { DBG_DEBUG(AQOFXCONNECT_LOGDOMAIN, "Dialog: rejected (%d)", rv); return GWEN_DialogEvent_ResultHandled; } else { const OH_INSTITUTE_DATA *od; DBG_DEBUG(AQOFXCONNECT_LOGDOMAIN, "Dialog: rejected (%d)", rv); od=OH_GetInstituteDialog_GetSelectedInstitute(dlg2); if (od) { const char *s; s=OH_InstituteData_GetName(od); if (s && *s) GWEN_Dialog_SetCharProperty(dlg, "wiz_bankname_edit", GWEN_DialogProperty_Value, 0, s, 0); s=OH_InstituteData_GetFid(od); if (s && *s) GWEN_Dialog_SetCharProperty(dlg, "wiz_fid_edit", GWEN_DialogProperty_Value, 0, s, 0); s=OH_InstituteData_GetOrg(od); if (s && *s) GWEN_Dialog_SetCharProperty(dlg, "wiz_org_edit", GWEN_DialogProperty_Value, 0, s, 0); s=OH_InstituteData_GetUrl(od); if (s && *s) GWEN_Dialog_SetCharProperty(dlg, "wiz_url_edit", GWEN_DialogProperty_Value, 0, s, 0); rv=AO_NewUserDialog_GetBankPageData(dlg); if (rv<0) GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 0, 0); else GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 1, 0); } } GWEN_Dialog_free(dlg2); return GWEN_DialogEvent_ResultHandled; } int AO_NewUserDialog_HandleActivatedApp(GWEN_DIALOG *dlg) { AO_NEWUSER_DIALOG *xdlg; int idx; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AO_NEWUSER_DIALOG, dlg); assert(xdlg); idx=GWEN_Dialog_GetIntProperty(dlg, "wiz_app_combo", GWEN_DialogProperty_Value, 0, -1); if (idx>0) { const AO_APPINFO *ai; ai=AO_Provider_GetAppInfos(xdlg->provider); if (ai) { while (ai->appName && --idx) { ai++; } if (ai->appName) { if (ai->appId) GWEN_Dialog_SetCharProperty(dlg, "wiz_appid_edit", GWEN_DialogProperty_Value, 0, ai->appId, 0); if (ai->appVer) GWEN_Dialog_SetCharProperty(dlg, "wiz_appver_edit", GWEN_DialogProperty_Value, 0, ai->appVer, 0); } } } return GWEN_DialogEvent_ResultHandled; } int AO_NewUserDialog_HandleActivatedGetAccounts(GWEN_DIALOG *dlg) { AO_NEWUSER_DIALOG *xdlg; int rv; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AO_NEWUSER_DIALOG, dlg); assert(xdlg); rv=AO_Provider_RequestAccounts(xdlg->provider, xdlg->user, 1); if (rv<0) { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "here"); } return GWEN_DialogEvent_ResultHandled; } int AO_NewUserDialog_HandleActivated(GWEN_DIALOG *dlg, const char *sender) { DBG_ERROR(0, "Activated: %s", sender); if (strcasecmp(sender, "wiz_prev_button")==0) return AO_NewUserDialog_Previous(dlg); else if (strcasecmp(sender, "wiz_next_button")==0) return AO_NewUserDialog_Next(dlg); else if (strcasecmp(sender, "wiz_abort_button")==0) { AO_NewUserDialog_UndoIt(dlg); return GWEN_DialogEvent_ResultReject; } else if (strcasecmp(sender, "wiz_bank_button")==0) return AO_NewUserDialog_HandleActivatedBankSelect(dlg); else if (strcasecmp(sender, "wiz_app_combo")==0) return AO_NewUserDialog_HandleActivatedApp(dlg); else if (strcasecmp(sender, "wiz_special_button")==0) return AO_NewUserDialog_HandleActivatedSpecial(dlg); else if (strcasecmp(sender, "wiz_getaccounts_button")==0) return AO_NewUserDialog_HandleActivatedGetAccounts(dlg); else if (strcasecmp(sender, "wiz_help_button")==0) { /* TODO: open a help dialog */ } return GWEN_DialogEvent_ResultNotHandled; } int AO_NewUserDialog_HandleValueChanged(GWEN_DIALOG *dlg, const char *sender) { if (strcasecmp(sender, "wiz_username_edit")==0 || strcasecmp(sender, "wiz_userid_edit")==0 || strcasecmp(sender, "wiz_url_edit")==0 || strcasecmp(sender, "wiz_brokerid_edit")==0 || strcasecmp(sender, "wiz_fid_edit")==0 || strcasecmp(sender, "wiz_org_edit")==0 || strcasecmp(sender, "wiz_appid_edit")==0 || strcasecmp(sender, "wiz_appver_edit")==0 || strcasecmp(sender, "wiz_headerver_edit")==0) { int rv; if (GWEN_Dialog_GetIntProperty(dlg, "wiz_stack", GWEN_DialogProperty_Value, 0, -1)==PAGE_BANK) { rv=AO_NewUserDialog_GetBankPageData(dlg); if (rv<0) GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 0, 0); else GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 1, 0); } else if (GWEN_Dialog_GetIntProperty(dlg, "wiz_stack", GWEN_DialogProperty_Value, 0, -1)==PAGE_USER) { rv=AO_NewUserDialog_GetUserPageData(dlg); if (rv<0) GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 0, 0); else GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 1, 0); } else if (GWEN_Dialog_GetIntProperty(dlg, "wiz_stack", GWEN_DialogProperty_Value, 0, -1)==PAGE_APP) { rv=AO_NewUserDialog_GetAppPageData(dlg); if (rv<0) GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 0, 0); else GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 1, 0); } return GWEN_DialogEvent_ResultHandled; } return GWEN_DialogEvent_ResultNotHandled; } int GWENHYWFAR_CB AO_NewUserDialog_SignalHandler(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender) { AO_NEWUSER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AO_NEWUSER_DIALOG, dlg); assert(xdlg); switch (t) { case GWEN_DialogEvent_TypeInit: AO_NewUserDialog_Init(dlg); return GWEN_DialogEvent_ResultHandled;; case GWEN_DialogEvent_TypeFini: AO_NewUserDialog_Fini(dlg); return GWEN_DialogEvent_ResultHandled;; case GWEN_DialogEvent_TypeValueChanged: return AO_NewUserDialog_HandleValueChanged(dlg, sender); case GWEN_DialogEvent_TypeActivated: return AO_NewUserDialog_HandleActivated(dlg, sender); case GWEN_DialogEvent_TypeEnabled: case GWEN_DialogEvent_TypeDisabled: case GWEN_DialogEvent_TypeClose: case GWEN_DialogEvent_TypeLast: return GWEN_DialogEvent_ResultNotHandled; default: break; } return GWEN_DialogEvent_ResultNotHandled; } aqbanking-6.6.1/src/libs/plugins/backends/aqofxconnect/dialogs/dlg_ofx_special.c0000664000175000017500000002606314546575650025005 00000000000000/*************************************************************************** begin : Thu Aug 19 2010 copyright : (C) 2010 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "dlg_ofx_special_p.h" #include "aqbanking/i18n_l.h" #include #include #include #include #include #include #include #include #include #define DIALOG_MINWIDTH 200 #define DIALOG_MINHEIGHT 100 GWEN_INHERIT(GWEN_DIALOG, AO_OFX_SPECIAL_DIALOG) GWEN_DIALOG *AO_OfxSpecialDialog_new(AB_PROVIDER *pro) { GWEN_DIALOG *dlg; AO_OFX_SPECIAL_DIALOG *xdlg; GWEN_BUFFER *fbuf; int rv; dlg=GWEN_Dialog_new("ao_ofx_special"); GWEN_NEW_OBJECT(AO_OFX_SPECIAL_DIALOG, xdlg); GWEN_INHERIT_SETDATA(GWEN_DIALOG, AO_OFX_SPECIAL_DIALOG, dlg, xdlg, AO_OfxSpecialDialog_FreeData); GWEN_Dialog_SetSignalHandler(dlg, AO_OfxSpecialDialog_SignalHandler); /* get path of dialog description file */ fbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_PathManager_FindFile(AB_PM_LIBNAME, AB_PM_DATADIR, "aqbanking/backends/aqofxconnect/dialogs/dlg_ofx_special.dlg", fbuf); if (rv<0) { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "Dialog description file not found (%d).", rv); GWEN_Buffer_free(fbuf); GWEN_Dialog_free(dlg); return NULL; } /* read dialog from dialog description file */ rv=GWEN_Dialog_ReadXmlFile(dlg, GWEN_Buffer_GetStart(fbuf)); if (rv<0) { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "here (%d).", rv); GWEN_Buffer_free(fbuf); GWEN_Dialog_free(dlg); return NULL; } GWEN_Buffer_free(fbuf); xdlg->provider=pro; xdlg->banking=AB_Provider_GetBanking(pro); /* preset */ xdlg->httpVMajor=1; xdlg->httpVMinor=1; /* done */ return dlg; } void GWENHYWFAR_CB AO_OfxSpecialDialog_FreeData(void *bp, void *p) { AO_OFX_SPECIAL_DIALOG *xdlg; xdlg=(AO_OFX_SPECIAL_DIALOG *) p; free(xdlg->clientUid); free(xdlg->securityType); GWEN_FREE_OBJECT(xdlg); } int AO_OfxSpecialDialog_GetHttpVMajor(const GWEN_DIALOG *dlg) { AO_OFX_SPECIAL_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AO_OFX_SPECIAL_DIALOG, dlg); assert(xdlg); return xdlg->httpVMajor; } int AO_OfxSpecialDialog_GetHttpVMinor(const GWEN_DIALOG *dlg) { AO_OFX_SPECIAL_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AO_OFX_SPECIAL_DIALOG, dlg); assert(xdlg); return xdlg->httpVMinor; } void AO_OfxSpecialDialog_SetHttpVersion(GWEN_DIALOG *dlg, int vmajor, int vminor) { AO_OFX_SPECIAL_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AO_OFX_SPECIAL_DIALOG, dlg); assert(xdlg); xdlg->httpVMajor=vmajor; xdlg->httpVMinor=vminor; } uint32_t AO_OfxSpecialDialog_GetFlags(const GWEN_DIALOG *dlg) { AO_OFX_SPECIAL_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AO_OFX_SPECIAL_DIALOG, dlg); assert(xdlg); return xdlg->flags; } void AO_OfxSpecialDialog_SetFlags(GWEN_DIALOG *dlg, uint32_t fl) { AO_OFX_SPECIAL_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AO_OFX_SPECIAL_DIALOG, dlg); assert(xdlg); xdlg->flags=fl; } void AO_OfxSpecialDialog_AddFlags(GWEN_DIALOG *dlg, uint32_t fl) { AO_OFX_SPECIAL_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AO_OFX_SPECIAL_DIALOG, dlg); assert(xdlg); xdlg->flags&=~fl; } void AO_OfxSpecialDialog_SubFlags(GWEN_DIALOG *dlg, uint32_t fl) { AO_OFX_SPECIAL_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AO_OFX_SPECIAL_DIALOG, dlg); assert(xdlg); xdlg->flags&=~fl; } void AO_OfxSpecialDialog_SetSecurityType(GWEN_DIALOG *dlg, const char *s) { AO_OFX_SPECIAL_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AO_OFX_SPECIAL_DIALOG, dlg); assert(xdlg); free(xdlg->securityType); if (s) xdlg->securityType=strdup(s); else xdlg->securityType=NULL; } const char *AO_OfxSpecialDialog_GetSecurityType(const GWEN_DIALOG *dlg) { AO_OFX_SPECIAL_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AO_OFX_SPECIAL_DIALOG, dlg); assert(xdlg); return xdlg->securityType; } void AO_OfxSpecialDialog_SetClientUid(GWEN_DIALOG *dlg, const char *s) { AO_OFX_SPECIAL_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AO_OFX_SPECIAL_DIALOG, dlg); assert(xdlg); free(xdlg->clientUid); if (s) xdlg->clientUid=strdup(s); else xdlg->clientUid=NULL; } const char *AO_OfxSpecialDialog_GetClientUid(const GWEN_DIALOG *dlg) { AO_OFX_SPECIAL_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AO_OFX_SPECIAL_DIALOG, dlg); assert(xdlg); return xdlg->clientUid; } void AO_OfxSpecialDialog_Init(GWEN_DIALOG *dlg) { AO_OFX_SPECIAL_DIALOG *xdlg; GWEN_DB_NODE *dbPrefs; int i; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AO_OFX_SPECIAL_DIALOG, dlg); assert(xdlg); dbPrefs=GWEN_Dialog_GetPreferences(dlg); GWEN_Dialog_SetCharProperty(dlg, "", GWEN_DialogProperty_Title, 0, I18N("OFX DirectConnect Special Settings"), 0); GWEN_Dialog_SetCharProperty(dlg, "httpVersionCombo", GWEN_DialogProperty_AddValue, 0, "1.0", 0); GWEN_Dialog_SetCharProperty(dlg, "httpVersionCombo", GWEN_DialogProperty_AddValue, 0, "1.1", 0); /* toGui */ switch (((xdlg->httpVMajor)<<8)+xdlg->httpVMinor) { case 0x0100: GWEN_Dialog_SetIntProperty(dlg, "httpVersionCombo", GWEN_DialogProperty_Value, 0, 0, 0); break; case 0x0101: GWEN_Dialog_SetIntProperty(dlg, "httpVersionCombo", GWEN_DialogProperty_Value, 0, 1, 0); break; default: break; } GWEN_Dialog_SetIntProperty(dlg, "forceSslv3Check", GWEN_DialogProperty_Value, 0, (xdlg->flags & AO_USER_FLAGS_FORCE_SSL3)?1:0, 0); GWEN_Dialog_SetIntProperty(dlg, "emptyBankIdCheck", GWEN_DialogProperty_Value, 0, (xdlg->flags & AO_USER_FLAGS_EMPTY_BANKID)?1:0, 0); GWEN_Dialog_SetIntProperty(dlg, "emptyFidCheck", GWEN_DialogProperty_Value, 0, (xdlg->flags & AO_USER_FLAGS_EMPTY_FID)?1:0, 0); GWEN_Dialog_SetIntProperty(dlg, "shortDateCheck", GWEN_DialogProperty_Value, 0, (xdlg->flags & AO_USER_FLAGS_SEND_SHORT_DATE)?1:0, 0); if (xdlg->clientUid) GWEN_Dialog_SetCharProperty(dlg, "clientUidEdit", GWEN_DialogProperty_Value, 0, xdlg->clientUid, 0); if (xdlg->securityType) GWEN_Dialog_SetCharProperty(dlg, "securityTypeEdit", GWEN_DialogProperty_Value, 0, xdlg->securityType, 0); /* read width */ i=GWEN_DB_GetIntValue(dbPrefs, "dialog_width", 0, -1); if (i>=DIALOG_MINWIDTH) GWEN_Dialog_SetIntProperty(dlg, "", GWEN_DialogProperty_Width, 0, i, 0); /* read height */ i=GWEN_DB_GetIntValue(dbPrefs, "dialog_height", 0, -1); if (i>=DIALOG_MINHEIGHT) GWEN_Dialog_SetIntProperty(dlg, "", GWEN_DialogProperty_Height, 0, i, 0); } void AO_OfxSpecialDialog_Fini(GWEN_DIALOG *dlg) { AO_OFX_SPECIAL_DIALOG *xdlg; int i; GWEN_DB_NODE *dbPrefs; uint32_t flags; const char *s; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AO_OFX_SPECIAL_DIALOG, dlg); assert(xdlg); dbPrefs=GWEN_Dialog_GetPreferences(dlg); /* fromGui */ i=GWEN_Dialog_GetIntProperty(dlg, "httpVersionCombo", GWEN_DialogProperty_Value, 0, -1); switch (i) { case 0: xdlg->httpVMajor=1; xdlg->httpVMinor=0; break; default: case 1: xdlg->httpVMajor=1; xdlg->httpVMinor=1; break; } flags=0; if (GWEN_Dialog_GetIntProperty(dlg, "forceSslv3Check", GWEN_DialogProperty_Value, 0, 0)) flags|=AO_USER_FLAGS_FORCE_SSL3; if (GWEN_Dialog_GetIntProperty(dlg, "emptyBankIdCheck", GWEN_DialogProperty_Value, 0, 0)) flags|=AO_USER_FLAGS_EMPTY_BANKID; if (GWEN_Dialog_GetIntProperty(dlg, "emptyFidCheck", GWEN_DialogProperty_Value, 0, 0)) flags|=AO_USER_FLAGS_EMPTY_FID; if (GWEN_Dialog_GetIntProperty(dlg, "shortDateCheck", GWEN_DialogProperty_Value, 0, 0)) flags|=AO_USER_FLAGS_SEND_SHORT_DATE; xdlg->flags=flags; s=GWEN_Dialog_GetCharProperty(dlg, "clientUidEdit", GWEN_DialogProperty_Value, 0, NULL); AO_OfxSpecialDialog_SetClientUid(dlg, s); s=GWEN_Dialog_GetCharProperty(dlg, "securityTypeEdit", GWEN_DialogProperty_Value, 0, NULL); AO_OfxSpecialDialog_SetSecurityType(dlg, s); /* store dialog width */ i=GWEN_Dialog_GetIntProperty(dlg, "", GWEN_DialogProperty_Width, 0, -1); GWEN_DB_SetIntValue(dbPrefs, GWEN_DB_FLAGS_OVERWRITE_VARS, "dialog_width", i); /* store dialog height */ i=GWEN_Dialog_GetIntProperty(dlg, "", GWEN_DialogProperty_Height, 0, -1); GWEN_DB_SetIntValue(dbPrefs, GWEN_DB_FLAGS_OVERWRITE_VARS, "dialog_height", i); } int AO_OfxSpecialDialog_HandleActivated(GWEN_DIALOG *dlg, const char *sender) { DBG_ERROR(0, "Activated: %s", sender); if (strcasecmp(sender, "okButton")==0) return GWEN_DialogEvent_ResultAccept; else if (strcasecmp(sender, "abortButton")==0) return GWEN_DialogEvent_ResultReject; else if (strcasecmp(sender, "helpButton")==0) { /* TODO: open a help dialog */ } return GWEN_DialogEvent_ResultNotHandled; } int GWENHYWFAR_CB AO_OfxSpecialDialog_SignalHandler(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender) { AO_OFX_SPECIAL_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AO_OFX_SPECIAL_DIALOG, dlg); assert(xdlg); switch (t) { case GWEN_DialogEvent_TypeInit: AO_OfxSpecialDialog_Init(dlg); return GWEN_DialogEvent_ResultHandled;; case GWEN_DialogEvent_TypeFini: AO_OfxSpecialDialog_Fini(dlg); return GWEN_DialogEvent_ResultHandled;; case GWEN_DialogEvent_TypeValueChanged: return GWEN_DialogEvent_ResultHandled;; case GWEN_DialogEvent_TypeActivated: return AO_OfxSpecialDialog_HandleActivated(dlg, sender); case GWEN_DialogEvent_TypeEnabled: case GWEN_DialogEvent_TypeDisabled: case GWEN_DialogEvent_TypeClose: case GWEN_DialogEvent_TypeLast: return GWEN_DialogEvent_ResultNotHandled; default: break; } return GWEN_DialogEvent_ResultNotHandled; } aqbanking-6.6.1/src/libs/plugins/backends/aqofxconnect/dialogs/Makefile.in0000644000175000017500000006414615037736025023555 00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/libs/plugins/backends/aqofxconnect/dialogs ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/distri.m4 $(top_srcdir)/m4/gwenhywfar.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/os.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libofxdcdialogs_la_LIBADD = am_libofxdcdialogs_la_OBJECTS = dlg_edituser.lo dlg_newuser.lo \ dlg_ofx_special.lo libofxdcdialogs_la_OBJECTS = $(am_libofxdcdialogs_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/dlg_edituser.Plo \ ./$(DEPDIR)/dlg_newuser.Plo ./$(DEPDIR)/dlg_ofx_special.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libofxdcdialogs_la_SOURCES) DIST_SOURCES = $(libofxdcdialogs_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(dlgdatadir)" DATA = $(dlgdata_DATA) HEADERS = $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADD_ACLOCAL_FLAGS = @ADD_ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AQBANKING_CLI_VERSION_STRING = @AQBANKING_CLI_VERSION_STRING@ AQBANKING_FINTS_VERSION_STRING = @AQBANKING_FINTS_VERSION_STRING@ AQBANKING_SO_AGE = @AQBANKING_SO_AGE@ AQBANKING_SO_CURRENT = @AQBANKING_SO_CURRENT@ AQBANKING_SO_EFFECTIVE = @AQBANKING_SO_EFFECTIVE@ AQBANKING_SO_REVISION = @AQBANKING_SO_REVISION@ AQBANKING_VERSION_BUILD = @AQBANKING_VERSION_BUILD@ AQBANKING_VERSION_FULL_STRING = @AQBANKING_VERSION_FULL_STRING@ AQBANKING_VERSION_MAJOR = @AQBANKING_VERSION_MAJOR@ AQBANKING_VERSION_MINOR = @AQBANKING_VERSION_MINOR@ AQBANKING_VERSION_PATCHLEVEL = @AQBANKING_VERSION_PATCHLEVEL@ AQBANKING_VERSION_RELEASE_STRING = @AQBANKING_VERSION_RELEASE_STRING@ AQBANKING_VERSION_STRING = @AQBANKING_VERSION_STRING@ AQBANKING_VERSION_TAG = @AQBANKING_VERSION_TAG@ AQEBICS_CFLAGS = @AQEBICS_CFLAGS@ AQEBICS_LIBS = @AQEBICS_LIBS@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATETIME = @DATETIME@ DEFS = @DEFS@ -DLOCALEDIR=\"$(localedir)\" DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_EXCLUDE_PATTERNS = @DOXYGEN_EXCLUDE_PATTERNS@ DOXYGEN_FILE_PATTERNS = @DOXYGEN_FILE_PATTERNS@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENGUI_GTK2_CFLAGS = @GWENGUI_GTK2_CFLAGS@ GWENGUI_GTK2_LIBS = @GWENGUI_GTK2_LIBS@ GWENHYWFAR_MINIMUM_VERSION = @GWENHYWFAR_MINIMUM_VERSION@ HAVE_GWENGUI_GTK2 = @HAVE_GWENGUI_GTK2@ HAVE_I18N = @HAVE_I18N@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIBXSLT_CFLAGS = @LIBXSLT_CFLAGS@ LIBXSLT_LIBS = @LIBXSLT_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_SUPPORTS_QT = @MSGFMT_SUPPORTS_QT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ TUTORIALS = @TUTORIALS@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XMLMERGE = @XMLMERGE@ XMLSEC_CFLAGS = @XMLSEC_CFLAGS@ XMLSEC_LIBS = @XMLSEC_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ aqbanking_backends = @aqbanking_backends@ aqbanking_cfg_searchdir = @aqbanking_cfg_searchdir@ aqbanking_data_searchdir = @aqbanking_data_searchdir@ aqbanking_headerdir = @aqbanking_headerdir@ aqbanking_headerdir_am = @aqbanking_headerdir_am@ aqbanking_includes = @aqbanking_includes@ aqbanking_internal_libs = @aqbanking_internal_libs@ aqbanking_ldflags = @aqbanking_ldflags@ aqbanking_libs = @aqbanking_libs@ aqbanking_locale_searchdir = @aqbanking_locale_searchdir@ aqbanking_modules = @aqbanking_modules@ aqbanking_pkgdatadir = @aqbanking_pkgdatadir@ aqbanking_plugin_searchdir = @aqbanking_plugin_searchdir@ aqbanking_plugindir = @aqbanking_plugindir@ aqbanking_plugins_backends_dirs = @aqbanking_plugins_backends_dirs@ aqbanking_plugins_backends_libs = @aqbanking_plugins_backends_libs@ aqbanking_plugins_bankinfo_dirs = @aqbanking_plugins_bankinfo_dirs@ aqbanking_plugins_bankinfo_libs = @aqbanking_plugins_bankinfo_libs@ aqbanking_plugins_imexporters_dirs = @aqbanking_plugins_imexporters_dirs@ aqbanking_plugins_imexporters_libs = @aqbanking_plugins_imexporters_libs@ aqbanking_plugins_parsers_dirs = @aqbanking_plugins_parsers_dirs@ aqbanking_symlinkdir = @aqbanking_symlinkdir@ aqbanking_sys_is_windows = @aqbanking_sys_is_windows@ aqbankingpp_modules = @aqbankingpp_modules@ aqebics_datadir = @aqebics_datadir@ aqebics_includes = @aqebics_includes@ aqebics_internal_libs = @aqebics_internal_libs@ aqebics_ldflags = @aqebics_ldflags@ aqebics_libs = @aqebics_libs@ aqfints_datadir = @aqfints_datadir@ aqhbci_datadir = @aqhbci_datadir@ aqhbci_includes = @aqhbci_includes@ aqhbci_internal_libs = @aqhbci_internal_libs@ aqhbci_ldflags = @aqhbci_ldflags@ aqhbci_libs = @aqhbci_libs@ aqofxconnect_includes = @aqofxconnect_includes@ aqofxconnect_internal_libs = @aqofxconnect_internal_libs@ aqofxconnect_libs = @aqofxconnect_libs@ aqpaypal_includes = @aqpaypal_includes@ aqpaypal_internal_libs = @aqpaypal_internal_libs@ aqpaypal_libs = @aqpaypal_libs@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gmp_libs = @gmp_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_dir = @gwenhywfar_dir@ gwenhywfar_has_crypt = @gwenhywfar_has_crypt@ gwenhywfar_headers = @gwenhywfar_headers@ gwenhywfar_includes = @gwenhywfar_includes@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_plugins = @gwenhywfar_plugins@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = $(datadir)/locale localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ typemaker2_exe = @typemaker2_exe@ visibility_cflags = @visibility_cflags@ with_aqebics = @with_aqebics@ with_aqhbci = @with_aqhbci@ AM_CFLAGS = -DBUILDING_AQBANKING @visibility_cflags@ AM_CPPFLAGS = -I$(top_srcdir)/src/libs -I$(top_builddir)/src/libs -I$(srcdir)/../.. $(gwenhywfar_includes) noinst_LTLIBRARIES = libofxdcdialogs.la dlgdatadir = $(aqbanking_pkgdatadir)/backends/aqofxconnect/dialogs dlgdata_DATA = \ dlg_edituser.dlg \ dlg_newuser.dlg \ dlg_ofx_special.dlg noinst_HEADERS = \ dlg_edituser_p.h dlg_edituser_l.h \ dlg_newuser_p.h dlg_newuser_l.h \ dlg_ofx_special_p.h dlg_ofx_special_l.h #iheaderdir=@aqbanking_headerdir_am@/aqpaypal #iheader_HEADERS= libofxdcdialogs_la_SOURCES = \ dlg_edituser.c \ dlg_newuser.c \ dlg_ofx_special.c EXTRA_DIST = $(dlgdata_DATA) $(dlgimage_DATA) all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libs/plugins/backends/aqofxconnect/dialogs/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libs/plugins/backends/aqofxconnect/dialogs/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libofxdcdialogs.la: $(libofxdcdialogs_la_OBJECTS) $(libofxdcdialogs_la_DEPENDENCIES) $(EXTRA_libofxdcdialogs_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libofxdcdialogs_la_OBJECTS) $(libofxdcdialogs_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dlg_edituser.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dlg_newuser.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dlg_ofx_special.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-dlgdataDATA: $(dlgdata_DATA) @$(NORMAL_INSTALL) @list='$(dlgdata_DATA)'; test -n "$(dlgdatadir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(dlgdatadir)'"; \ $(MKDIR_P) "$(DESTDIR)$(dlgdatadir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(dlgdatadir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(dlgdatadir)" || exit $$?; \ done uninstall-dlgdataDATA: @$(NORMAL_UNINSTALL) @list='$(dlgdata_DATA)'; test -n "$(dlgdatadir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(dlgdatadir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(dlgdatadir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/dlg_edituser.Plo -rm -f ./$(DEPDIR)/dlg_newuser.Plo -rm -f ./$(DEPDIR)/dlg_ofx_special.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dlgdataDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/dlg_edituser.Plo -rm -f ./$(DEPDIR)/dlg_newuser.Plo -rm -f ./$(DEPDIR)/dlg_ofx_special.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-dlgdataDATA .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-generic clean-libtool clean-noinstLTLIBRARIES \ cscopelist-am ctags ctags-am distclean distclean-compile \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dlgdataDATA install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \ uninstall-dlgdataDATA .PRECIOUS: Makefile sources: for f in $(libofxdcdialogs_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d sources; \ done cppcheck: for f in $(libofxdcdialogs_la_SOURCES); do \ cppcheck --force $$f ; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done built_sources: list='$(SUBDIRS)'; for d in $$list; do \ $(MAKE) -C $$d built_sources; \ done ; typefiles: typedefs: # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: aqbanking-6.6.1/src/libs/plugins/backends/aqofxconnect/dialogs/dlg_ofx_special_l.h0000664000175000017500000000320014043610745025274 00000000000000/*************************************************************************** begin : Thu Aug 19 2010 copyright : (C) 2018 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQOFXCONNECT_DLG_OFX_SPECIAL_L_H #define AQOFXCONNECT_DLG_OFX_SPECIAL_L_H #include #include #include #include #include #ifdef __cplusplus extern "C" { #endif GWEN_DIALOG *AO_OfxSpecialDialog_new(AB_PROVIDER *pro); int AO_OfxSpecialDialog_GetHttpVMajor(const GWEN_DIALOG *dlg); int AO_OfxSpecialDialog_GetHttpVMinor(const GWEN_DIALOG *dlg); void AO_OfxSpecialDialog_SetHttpVersion(GWEN_DIALOG *dlg, int vmajor, int vminor); uint32_t AO_OfxSpecialDialog_GetFlags(const GWEN_DIALOG *dlg); void AO_OfxSpecialDialog_SetFlags(GWEN_DIALOG *dlg, uint32_t fl); void AO_OfxSpecialDialog_AddFlags(GWEN_DIALOG *dlg, uint32_t fl); void AO_OfxSpecialDialog_SubFlags(GWEN_DIALOG *dlg, uint32_t fl); void AO_OfxSpecialDialog_SetClientUid(GWEN_DIALOG *dlg, const char *s); const char *AO_OfxSpecialDialog_GetClientUid(const GWEN_DIALOG *dlg); void AO_OfxSpecialDialog_SetSecurityType(GWEN_DIALOG *dlg, const char *s); const char *AO_OfxSpecialDialog_GetSecurityType(const GWEN_DIALOG *dlg); #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/plugins/backends/aqofxconnect/dialogs/dlg_edituser_p.h0000664000175000017500000000422314043610745024636 00000000000000/*************************************************************************** begin : Thu Aug 19 2010 copyright : (C) 2018 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQOFXCONNECT_DLG_EDITUSER_P_H #define AQOFXCONNECT_DLG_EDITUSER_P_H #include "dlg_edituser_l.h" typedef struct AO_EDITUSER_DIALOG AO_EDITUSER_DIALOG; struct AO_EDITUSER_DIALOG { AB_PROVIDER *provider; AB_BANKING *banking; int doLock; char *userName; char *userId; char *url; char *userAgent; char *bankName; char *brokerId; char *org; char *fid; char *appId; char *appVer; char *headerVer; char *clientUid; char *securityType; int httpVMajor; int httpVMinor; uint32_t flags; AB_USER *user; }; static void GWENHYWFAR_CB AO_EditUserDialog_FreeData(void *bp, void *p); static int GWENHYWFAR_CB AO_EditUserDialog_SignalHandler(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender); static void AO_EditUserDialog_Init(GWEN_DIALOG *dlg); static void AO_EditUserDialog_Fini(GWEN_DIALOG *dlg); static int AO_EditUserDialog_GetBankPageData(GWEN_DIALOG *dlg); static int AO_EditUserDialog_GetUserPageData(GWEN_DIALOG *dlg); static int AO_EditUserDialog_GetAppPageData(GWEN_DIALOG *dlg); static int AO_EditUserDialog_FromGui(GWEN_DIALOG *dlg); static int AO_EditUserDialog_HandleActivatedSpecial(GWEN_DIALOG *dlg); static int AO_EditUserDialog_HandleActivatedBankSelect(GWEN_DIALOG *dlg); static int AO_EditUserDialog_HandleActivatedApp(GWEN_DIALOG *dlg); static int AO_EditUserDialog_HandleActivatedGetAccounts(GWEN_DIALOG *dlg); static int AO_EditUserDialog_HandleActivated(GWEN_DIALOG *dlg, const char *sender); static int AO_EditUserDialog_HandleValueChanged(GWEN_DIALOG *dlg, const char *sender); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqofxconnect/user.h0000664000175000017500000000647514043610745021214 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AO_USER_H #define AO_USER_H #include #include #include #include #define AO_USER_FLAGS_ACCOUNT_LIST 0x00000001 #define AO_USER_FLAGS_STATEMENTS 0x00000002 #define AO_USER_FLAGS_INVESTMENT 0x00000004 #define AO_USER_FLAGS_BILLPAY 0x00000008 #define AO_USER_FLAGS_EMPTY_BANKID 0x00000010 #define AO_USER_FLAGS_EMPTY_FID 0x00000020 #define AO_USER_FLAGS_FORCE_SSL3 0x00000040 #define AO_USER_FLAGS_SEND_SHORT_DATE 0x00000080 #ifdef __cplusplus extern "C" { #endif AQOFXCONNECT_API uint32_t AO_User_Flags_fromDb(GWEN_DB_NODE *db, const char *name); AQOFXCONNECT_API void AO_User_Flags_toDb(GWEN_DB_NODE *db, const char *name, uint32_t fl); AQOFXCONNECT_API AB_USER *AO_User_new(AB_PROVIDER *pro); AQOFXCONNECT_API const char *AO_User_GetBankName(const AB_USER *u); AQOFXCONNECT_API void AO_User_SetBankName(AB_USER *u, const char *s); AQOFXCONNECT_API const char *AO_User_GetBrokerId(const AB_USER *u); AQOFXCONNECT_API void AO_User_SetBrokerId(AB_USER *u, const char *s); AQOFXCONNECT_API const char *AO_User_GetOrg(const AB_USER *u); AQOFXCONNECT_API void AO_User_SetOrg(AB_USER *u, const char *s); AQOFXCONNECT_API const char *AO_User_GetFid(const AB_USER *u); AQOFXCONNECT_API void AO_User_SetFid(AB_USER *u, const char *s); AQOFXCONNECT_API const char *AO_User_GetServerAddr(const AB_USER *u); AQOFXCONNECT_API void AO_User_SetServerAddr(AB_USER *u, const char *s); AQOFXCONNECT_API uint32_t AO_User_GetFlags(const AB_USER *u); AQOFXCONNECT_API void AO_User_SetFlags(AB_USER *u, uint32_t f); AQOFXCONNECT_API void AO_User_AddFlags(AB_USER *u, uint32_t f); AQOFXCONNECT_API void AO_User_SubFlags(AB_USER *u, uint32_t f); AQOFXCONNECT_API const char *AO_User_GetAppId(const AB_USER *u); AQOFXCONNECT_API void AO_User_SetAppId(AB_USER *u, const char *s); AQOFXCONNECT_API const char *AO_User_GetAppVer(const AB_USER *u); AQOFXCONNECT_API void AO_User_SetAppVer(AB_USER *u, const char *s); AQOFXCONNECT_API const char *AO_User_GetHeaderVer(const AB_USER *u); AQOFXCONNECT_API void AO_User_SetHeaderVer(AB_USER *u, const char *s); AQOFXCONNECT_API const char *AO_User_GetClientUid(const AB_USER *u); AQOFXCONNECT_API void AO_User_SetClientUid(AB_USER *u, const char *s); AQOFXCONNECT_API const char *AO_User_GetSecurityType(const AB_USER *u); AQOFXCONNECT_API void AO_User_SetSecurityType(AB_USER *u, const char *s); AQOFXCONNECT_API int AO_User_GetHttpVMajor(const AB_USER *u); AQOFXCONNECT_API void AO_User_SetHttpVMajor(AB_USER *u, int i); AQOFXCONNECT_API int AO_User_GetHttpVMinor(const AB_USER *u); AQOFXCONNECT_API void AO_User_SetHttpVMinor(AB_USER *u, int i); AQOFXCONNECT_API const char *AO_User_GetHttpUserAgent(const AB_USER *u); AQOFXCONNECT_API void AO_User_SetHttpUserAgent(AB_USER *u, const char *s); #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/plugins/backends/aqofxconnect/control/0000755000175000017500000000000015037736163021616 500000000000000aqbanking-6.6.1/src/libs/plugins/backends/aqofxconnect/control/getaccounts.c0000664000175000017500000000676314043610745024230 00000000000000/*************************************************************************** begin : Thu Jan 16 2020 copyright : (C) 2020 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "getaccounts.h" #include "aqofxconnect/user.h" #include "aqofxconnect/provider.h" #include "aqbanking/i18n_l.h" #include static GWEN_DB_NODE *_readCommandLine(GWEN_DB_NODE *dbArgs, int argc, char **argv); int AO_Control_GetAccounts(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; uint32_t uid; AB_USER *u=NULL; int rv; /* parse command line */ db=_readCommandLine(dbArgs, argc, argv); if (db==NULL) { DBG_ERROR(AQOFXCONNECT_LOGDOMAIN, "Could not parse arguments\n"); return 1; } uid=(uint32_t) GWEN_DB_GetIntValue(db, "userId", 0, 0); if (uid==0) { DBG_ERROR(AQOFXCONNECT_LOGDOMAIN, "Invalid or missing unique user id\n"); return 1; } rv=AB_Provider_HasUser(pro, uid); if (rv<0) { DBG_ERROR(AQOFXCONNECT_LOGDOMAIN, "User with id %lu not found\n", (unsigned long int) uid); return 2; } rv=AB_Provider_GetUser(pro, uid, 1, 1, &u); if (rv<0) { DBG_ERROR(AQOFXCONNECT_LOGDOMAIN, "User with id %lu not found\n", (unsigned long int) uid); return 2; } else { rv=AO_Provider_RequestAccounts(pro, u, 0); if (rv) { DBG_ERROR_ERR(0, rv); AB_User_free(u); return 3; } } AB_User_free(u); return 0; } GWEN_DB_NODE *_readCommandLine(GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; int rv; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Int, /* type */ "userId", /* name */ 1, /* minnum */ 1, /* maxnum */ "u", /* short option */ "user", /* long option */ "Specify the unique user id", /* short description */ "Specify the unique user id" /* 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 NULL; } 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 NULL; } fprintf(stdout, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return NULL; } return db; } aqbanking-6.6.1/src/libs/plugins/backends/aqofxconnect/control/listusers.h0000664000175000017500000000124214043610745023736 00000000000000/*************************************************************************** begin : Thu Jan 16 2020 copyright : (C) 2020 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AO_CONTROL_LISTUSERS_H #define AO_CONTROL_LISTUSERS_H #include #include int AO_Control_ListUsers(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqofxconnect/control/adduser.c0000664000175000017500000002315214043610745023327 00000000000000/*************************************************************************** begin : Thu Jan 16 2020 copyright : (C) 2020 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "adduser.h" #include "aqofxconnect/user.h" #include "aqbanking/i18n_l.h" #include static GWEN_DB_NODE *_readCommandLine(GWEN_DB_NODE *dbArgs, int argc, char **argv); int AO_Control_AddUser(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; AB_USER *user; int rv; const char *userId; const char *userName; const char *server; const char *bankId; const char *brokerId; const char *org; const char *fid; const char *appId; const char *appVer; const char *headerVer; const char *clientUid; /* parse command line */ db=_readCommandLine(dbArgs, argc, argv); if (db==NULL) { fprintf(stderr, "ERROR: Could not parse arguments\n"); return 1; } userId=GWEN_DB_GetCharValue(db, "userId", 0, NULL); userName=GWEN_DB_GetCharValue(db, "userName", 0, NULL); server=GWEN_DB_GetCharValue(db, "serverAddr", 0, NULL); bankId=GWEN_DB_GetCharValue(db, "bankId", 0, NULL); brokerId=GWEN_DB_GetCharValue(db, "brokerId", 0, NULL); org=GWEN_DB_GetCharValue(db, "org", 0, NULL); fid=GWEN_DB_GetCharValue(db, "fid", 0, NULL); appId=GWEN_DB_GetCharValue(db, "appId", 0, NULL); appVer=GWEN_DB_GetCharValue(db, "appVer", 0, NULL); headerVer=GWEN_DB_GetCharValue(db, "headerVer", 0, NULL); clientUid=GWEN_DB_GetCharValue(db, "clientUid", 0, NULL); user=AB_Provider_CreateUserObject(pro); assert(user); AB_User_SetCountry(user, "us"); AB_User_SetBankCode(user, bankId); AB_User_SetUserId(user, userId); AB_User_SetUserName(user, userName); AO_User_SetServerAddr(user, server); if (brokerId && *brokerId) AO_User_SetBrokerId(user, brokerId); if (org && *org) AO_User_SetOrg(user, org); if (fid && *fid) AO_User_SetFid(user, fid); if (appId && *appId && appVer && *appVer) { AO_User_SetAppId(user, appId); AO_User_SetAppVer(user, appVer); } if (headerVer && *headerVer) AO_User_SetHeaderVer(user, headerVer); if (clientUid && *clientUid) AO_User_SetClientUid(user, clientUid); /* add user */ rv=AB_Provider_AddUser(pro, user); if (rv<0) { DBG_ERROR(AQOFXCONNECT_LOGDOMAIN, "Error on AB_Provider_AddUser (%d)\n", rv); AB_User_free(user); return 3; } rv=AB_Provider_BeginExclUseUser(pro, user); if (rv<0) { DBG_ERROR(AQOFXCONNECT_LOGDOMAIN, "Could not lock user (%d)\n", rv); AB_User_free(user); return 3; } rv=AB_Provider_EndExclUseUser(pro, user, 0); if (rv<0) { DBG_ERROR(AQOFXCONNECT_LOGDOMAIN, "Could not unlock user (%d)", rv); AB_Provider_EndExclUseUser(pro, user, 1); AB_User_free(user); return rv; } AB_User_free(user); return 0; } GWEN_DB_NODE *_readCommandLine(GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; int rv; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "userName", /* name */ 1, /* minnum */ 1, /* maxnum */ "N", /* short option */ "username", /* long option */ "Specify the user name", /* short description */ "Specify the user name (not the userid!)" /* long description */ }, { 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 */ "userId", /* name */ 1, /* minnum */ 1, /* maxnum */ "u", /* short option */ "user", /* long option */ "Specify the user id (Benutzerkennung)", /* short description */ "Specify the user id (Benutzerkennung)" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "serverAddr", /* name */ 1, /* minnum */ 1, /* maxnum */ "s", /* short option */ "server", /* long option */ "Specify the server URL", /* short description */ "Specify the server URL" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "brokerId", /* name */ 0, /* minnum */ 1, /* maxnum */ "B", /* short option */ "brokerid", /* long option */ "Specify the broker id", /* short description */ "Specify the broker id" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "org", /* name */ 0, /* minnum */ 1, /* maxnum */ "O", /* short option */ "org", /* long option */ "Specify the ORG id", /* short description */ "Specify the ORG id" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "fid", /* name */ 0, /* minnum */ 1, /* maxnum */ "F", /* short option */ "fid", /* long option */ "Specify the FID id", /* short description */ "Specify the FID id" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "appId", /* name */ 0, /* minnum */ 1, /* maxnum */ NULL, /* short option */ "appid", /* long option */ "Specify the APP id", /* short description */ "Specify the APP id" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "appVer", /* name */ 0, /* minnum */ 1, /* maxnum */ NULL, /* short option */ "appver", /* long option */ "Specify the APP version", /* short description */ "Specify the APP version" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "clientUid", /* name */ 0, /* minnum */ 1, /* maxnum */ NULL, /* short option */ "clientuid", /* long option */ "Specify a client unique id", /* short description */ "Specify a client unique id" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "headerVer", /* name */ 0, /* minnum */ 1, /* maxnum */ NULL, /* short option */ "headerver", /* long option */ "Specify the header version", /* short description */ "Specify the header version" /* 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 NULL; } 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 NULL; } fprintf(stdout, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return NULL; } return db; } aqbanking-6.6.1/src/libs/plugins/backends/aqofxconnect/control/control.h0000664000175000017500000000116714043610745023367 00000000000000/*************************************************************************** begin : Thu Jan 16 2020 copyright : (C) 2020 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AO_CONTROL_BE_H #define AO_CONTROL_BE_H #include #include int AO_Control(AB_PROVIDER *pro, int argc, char **argv); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqofxconnect/control/listusers.c0000664000175000017500000001041314043610745023731 00000000000000/*************************************************************************** begin : Thu Jan 16 2020 copyright : (C) 2020 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "listusers.h" #include "aqofxconnect/user.h" #include "aqofxconnect/provider.h" #include "aqbanking/i18n_l.h" #include static GWEN_DB_NODE *_readCommandLine(GWEN_DB_NODE *dbArgs, int argc, char **argv); int AO_Control_ListUsers(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; int rv; int xml=0; AB_USER_LIST *ul; AB_USER *u; int i=0; /* parse command line */ db=_readCommandLine(dbArgs, argc, argv); if (db==NULL) { DBG_ERROR(AQOFXCONNECT_LOGDOMAIN, "Could not parse arguments\n"); return 1; } xml=GWEN_DB_VariableExists(db, "xml"); if (xml) { fprintf(stdout, "\n"); fprintf(stdout, "\n"); } ul=AB_User_List_new(); rv=AB_Provider_ReadUsers(pro, ul); if (rv<0 && rv!=GWEN_ERROR_NOT_FOUND) { DBG_ERROR_ERR(AQOFXCONNECT_LOGDOMAIN, rv); AB_User_List_free(ul); return 3; } u=AB_User_List_First(ul); while (u) { if (!xml) { fprintf(stdout, "User %d: Bank: %s/%s User Id: %s Unique Id: %lu\n", i++, AB_User_GetCountry(u), AB_User_GetBankCode(u), AB_User_GetUserId(u), (unsigned long int) AB_User_GetUniqueId(u)); } else { const char *name = AB_User_GetUserName(u); fprintf(stdout, " \n"); fprintf(stdout, " %lu\n", (unsigned long int) AB_User_GetUniqueId(u)); if (!name) fprintf(stdout, " \n"); else fprintf(stdout, " \n", name); fprintf(stdout, " %s\n", AB_User_GetUserId(u)); fprintf(stdout, " %s\n", AB_User_GetBankCode(u)); fprintf(stdout, " %s\n", AB_User_GetCountry(u)); fprintf(stdout, " %d\n", AB_User_GetLastSessionId(u)); fprintf(stdout, " \n\n"); } u=AB_User_List_Next(u); } AB_User_List_free(ul); if (xml) { fprintf(stdout, "\n"); } return 0; } GWEN_DB_NODE *_readCommandLine(GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; int rv; const GWEN_ARGS args[]= { { 0, /* flags */ GWEN_ArgsType_Int, /* type */ "xml", /* name */ 0, /* minnum */ 1, /* maxnum */ 0, /* short option */ "xml", /* long option */ "Export as xml", /* short description */ 0 }, { 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 NULL; } 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 NULL; } fprintf(stdout, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return NULL; } return db; } aqbanking-6.6.1/src/libs/plugins/backends/aqofxconnect/control/Makefile.in0000644000175000017500000005747415037736025023621 00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/libs/plugins/backends/aqofxconnect/control ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/distri.m4 $(top_srcdir)/m4/gwenhywfar.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/os.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libofxdccontrol_la_LIBADD = am_libofxdccontrol_la_OBJECTS = control.lo adduser.lo getaccounts.lo \ listusers.lo libofxdccontrol_la_OBJECTS = $(am_libofxdccontrol_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/adduser.Plo ./$(DEPDIR)/control.Plo \ ./$(DEPDIR)/getaccounts.Plo ./$(DEPDIR)/listusers.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libofxdccontrol_la_SOURCES) DIST_SOURCES = $(libofxdccontrol_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac HEADERS = $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADD_ACLOCAL_FLAGS = @ADD_ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AQBANKING_CLI_VERSION_STRING = @AQBANKING_CLI_VERSION_STRING@ AQBANKING_FINTS_VERSION_STRING = @AQBANKING_FINTS_VERSION_STRING@ AQBANKING_SO_AGE = @AQBANKING_SO_AGE@ AQBANKING_SO_CURRENT = @AQBANKING_SO_CURRENT@ AQBANKING_SO_EFFECTIVE = @AQBANKING_SO_EFFECTIVE@ AQBANKING_SO_REVISION = @AQBANKING_SO_REVISION@ AQBANKING_VERSION_BUILD = @AQBANKING_VERSION_BUILD@ AQBANKING_VERSION_FULL_STRING = @AQBANKING_VERSION_FULL_STRING@ AQBANKING_VERSION_MAJOR = @AQBANKING_VERSION_MAJOR@ AQBANKING_VERSION_MINOR = @AQBANKING_VERSION_MINOR@ AQBANKING_VERSION_PATCHLEVEL = @AQBANKING_VERSION_PATCHLEVEL@ AQBANKING_VERSION_RELEASE_STRING = @AQBANKING_VERSION_RELEASE_STRING@ AQBANKING_VERSION_STRING = @AQBANKING_VERSION_STRING@ AQBANKING_VERSION_TAG = @AQBANKING_VERSION_TAG@ AQEBICS_CFLAGS = @AQEBICS_CFLAGS@ AQEBICS_LIBS = @AQEBICS_LIBS@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATETIME = @DATETIME@ DEFS = @DEFS@ -DLOCALEDIR=\"$(localedir)\" DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_EXCLUDE_PATTERNS = @DOXYGEN_EXCLUDE_PATTERNS@ DOXYGEN_FILE_PATTERNS = @DOXYGEN_FILE_PATTERNS@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENGUI_GTK2_CFLAGS = @GWENGUI_GTK2_CFLAGS@ GWENGUI_GTK2_LIBS = @GWENGUI_GTK2_LIBS@ GWENHYWFAR_MINIMUM_VERSION = @GWENHYWFAR_MINIMUM_VERSION@ HAVE_GWENGUI_GTK2 = @HAVE_GWENGUI_GTK2@ HAVE_I18N = @HAVE_I18N@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIBXSLT_CFLAGS = @LIBXSLT_CFLAGS@ LIBXSLT_LIBS = @LIBXSLT_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_SUPPORTS_QT = @MSGFMT_SUPPORTS_QT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ TUTORIALS = @TUTORIALS@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XMLMERGE = @XMLMERGE@ XMLSEC_CFLAGS = @XMLSEC_CFLAGS@ XMLSEC_LIBS = @XMLSEC_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ aqbanking_backends = @aqbanking_backends@ aqbanking_cfg_searchdir = @aqbanking_cfg_searchdir@ aqbanking_data_searchdir = @aqbanking_data_searchdir@ aqbanking_headerdir = @aqbanking_headerdir@ aqbanking_headerdir_am = @aqbanking_headerdir_am@ aqbanking_includes = @aqbanking_includes@ aqbanking_internal_libs = @aqbanking_internal_libs@ aqbanking_ldflags = @aqbanking_ldflags@ aqbanking_libs = @aqbanking_libs@ aqbanking_locale_searchdir = @aqbanking_locale_searchdir@ aqbanking_modules = @aqbanking_modules@ aqbanking_pkgdatadir = @aqbanking_pkgdatadir@ aqbanking_plugin_searchdir = @aqbanking_plugin_searchdir@ aqbanking_plugindir = @aqbanking_plugindir@ aqbanking_plugins_backends_dirs = @aqbanking_plugins_backends_dirs@ aqbanking_plugins_backends_libs = @aqbanking_plugins_backends_libs@ aqbanking_plugins_bankinfo_dirs = @aqbanking_plugins_bankinfo_dirs@ aqbanking_plugins_bankinfo_libs = @aqbanking_plugins_bankinfo_libs@ aqbanking_plugins_imexporters_dirs = @aqbanking_plugins_imexporters_dirs@ aqbanking_plugins_imexporters_libs = @aqbanking_plugins_imexporters_libs@ aqbanking_plugins_parsers_dirs = @aqbanking_plugins_parsers_dirs@ aqbanking_symlinkdir = @aqbanking_symlinkdir@ aqbanking_sys_is_windows = @aqbanking_sys_is_windows@ aqbankingpp_modules = @aqbankingpp_modules@ aqebics_datadir = @aqebics_datadir@ aqebics_includes = @aqebics_includes@ aqebics_internal_libs = @aqebics_internal_libs@ aqebics_ldflags = @aqebics_ldflags@ aqebics_libs = @aqebics_libs@ aqfints_datadir = @aqfints_datadir@ aqhbci_datadir = @aqhbci_datadir@ aqhbci_includes = @aqhbci_includes@ aqhbci_internal_libs = @aqhbci_internal_libs@ aqhbci_ldflags = @aqhbci_ldflags@ aqhbci_libs = @aqhbci_libs@ aqofxconnect_includes = @aqofxconnect_includes@ aqofxconnect_internal_libs = @aqofxconnect_internal_libs@ aqofxconnect_libs = @aqofxconnect_libs@ aqpaypal_includes = @aqpaypal_includes@ aqpaypal_internal_libs = @aqpaypal_internal_libs@ aqpaypal_libs = @aqpaypal_libs@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gmp_libs = @gmp_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_dir = @gwenhywfar_dir@ gwenhywfar_has_crypt = @gwenhywfar_has_crypt@ gwenhywfar_headers = @gwenhywfar_headers@ gwenhywfar_includes = @gwenhywfar_includes@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_plugins = @gwenhywfar_plugins@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = $(datadir)/locale localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ typemaker2_exe = @typemaker2_exe@ visibility_cflags = @visibility_cflags@ with_aqebics = @with_aqebics@ with_aqhbci = @with_aqhbci@ AM_CFLAGS = -DBUILDING_AQBANKING @visibility_cflags@ AM_CPPFLAGS = -I$(top_srcdir)/src/libs -I$(top_builddir)/src/libs $(gwenhywfar_includes) -I$(srcdir)/../.. noinst_LTLIBRARIES = libofxdccontrol.la noinst_HEADERS = \ control.h \ adduser.h \ getaccounts.h \ listusers.h #iheaderdir=@aqbanking_headerdir_am@/aqpaypal #iheader_HEADERS= libofxdccontrol_la_SOURCES = \ control.c \ adduser.c \ getaccounts.c \ listusers.c all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libs/plugins/backends/aqofxconnect/control/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libs/plugins/backends/aqofxconnect/control/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libofxdccontrol.la: $(libofxdccontrol_la_OBJECTS) $(libofxdccontrol_la_DEPENDENCIES) $(EXTRA_libofxdccontrol_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libofxdccontrol_la_OBJECTS) $(libofxdccontrol_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/adduser.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/control.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getaccounts.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/listusers.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/adduser.Plo -rm -f ./$(DEPDIR)/control.Plo -rm -f ./$(DEPDIR)/getaccounts.Plo -rm -f ./$(DEPDIR)/listusers.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/adduser.Plo -rm -f ./$(DEPDIR)/control.Plo -rm -f ./$(DEPDIR)/getaccounts.Plo -rm -f ./$(DEPDIR)/listusers.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-generic clean-libtool clean-noinstLTLIBRARIES \ cscopelist-am ctags ctags-am distclean distclean-compile \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am .PRECIOUS: Makefile #EXTRA_DIST= sources: for f in $(libofxdccontrol_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d sources; \ done cppcheck: for f in $(libofxdccontrol_la_SOURCES); do \ cppcheck --force $$f ; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done built_sources: list='$(SUBDIRS)'; for d in $$list; do \ $(MAKE) -C $$d built_sources; \ done ; typefiles: typedefs: # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: aqbanking-6.6.1/src/libs/plugins/backends/aqofxconnect/control/getaccounts.h0000664000175000017500000000125014043610745024217 00000000000000/*************************************************************************** begin : Thu Jan 16 2020 copyright : (C) 2020 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AO_CONTROL_GETACCOUNTS_H #define AO_CONTROL_GETACCOUNTS_H #include #include int AO_Control_GetAccounts(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqofxconnect/control/adduser.h0000664000175000017500000000123414043610745023331 00000000000000/*************************************************************************** begin : Thu Jan 16 2020 copyright : (C) 2020 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AO_CONTROL_ADDUSER_H #define AO_CONTROL_ADDUSER_H #include #include int AO_Control_AddUser(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqofxconnect/control/control.c0000664000175000017500000000475214043610745023365 00000000000000/*************************************************************************** begin : Thu Jan 16 2020 copyright : (C) 2020 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "control.h" #include "adduser.h" #include "listusers.h" #include "getaccounts.h" #include "aqbanking/i18n_l.h" static void _showUsage(); int AO_Control(AB_PROVIDER *pro, int argc, char **argv) { GWEN_DB_NODE *db; const char *cmd; int rv; db=GWEN_DB_Group_new("arguments"); if (argc<1) { _showUsage(); return 0; } cmd=argv[0]; if (!(cmd && *cmd)) { DBG_ERROR(AQOFXCONNECT_LOGDOMAIN, "Command needed.\n"); GWEN_DB_Group_free(db); return 1; } if (strcasecmp(cmd, "help")==0) { _showUsage(); rv=0; } else if (strcasecmp(cmd, "adduser")==0) { rv=AO_Control_AddUser(pro, db, argc, argv); } else if (strcasecmp(cmd, "getaccounts")==0) { rv=AO_Control_GetAccounts(pro, db, argc, argv); } else if (strcasecmp(cmd, "listusers")==0) { rv=AO_Control_ListUsers(pro, db, argc, argv); } #if 0 else if (strcasecmp(cmd, "listaccounts")==0) { rv=AO_Control_ListAccounts(pro, db, argc, argv); } #endif else { DBG_ERROR(AQOFXCONNECT_LOGDOMAIN, "Unknown command \"%s\".\n", cmd); rv=1; } return rv; } void _showUsage() { GWEN_BUFFER *ubuf; ubuf=GWEN_Buffer_new(0, 1024, 0, 1); GWEN_Buffer_AppendString(ubuf, I18N("Commands:\n\n")); GWEN_Buffer_AppendString(ubuf, I18N(" listusers:\n" " blurb " "file\n\n")); GWEN_Buffer_AppendString(ubuf, I18N(" listaccounts:\n" " blurb " "file\n\n")); GWEN_Buffer_AppendString(ubuf, I18N(" adduser:\n" " Add a user. " "\n\n")); GWEN_Buffer_AppendString(ubuf, I18N(" getaccounts:\n" " Retrieve list of accounts. " "\n\n")); fprintf(stdout, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); } aqbanking-6.6.1/src/libs/plugins/backends/aqofxconnect/control/Makefile.am0000664000175000017500000000171414043610745023570 00000000000000 AM_CFLAGS=-DBUILDING_AQBANKING @visibility_cflags@ AM_CPPFLAGS = -I$(top_srcdir)/src/libs -I$(top_builddir)/src/libs $(gwenhywfar_includes) -I$(srcdir)/../.. localedir = $(datadir)/locale DEFS += -DLOCALEDIR=\"$(localedir)\" noinst_LTLIBRARIES=libofxdccontrol.la noinst_HEADERS=\ control.h \ adduser.h \ getaccounts.h \ listusers.h #iheaderdir=@aqbanking_headerdir_am@/aqpaypal #iheader_HEADERS= libofxdccontrol_la_SOURCES=\ control.c \ adduser.c \ getaccounts.c \ listusers.c #EXTRA_DIST= sources: for f in $(libofxdccontrol_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d sources; \ done cppcheck: for f in $(libofxdccontrol_la_SOURCES); do \ cppcheck --force $$f ; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done built_sources: list='$(SUBDIRS)'; for d in $$list; do \ $(MAKE) -C $$d built_sources; \ done ; typefiles: typedefs: aqbanking-6.6.1/src/libs/plugins/backends/aqofxconnect/account.c0000664000175000017500000000652614043610745021662 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "account_p.h" #include #include GWEN_INHERIT(AB_ACCOUNT, AO_ACCOUNT) AB_ACCOUNT *AO_Account_new(AB_PROVIDER *pro) { AB_ACCOUNT *a; AO_ACCOUNT *ae; a=AB_Account_new(); assert(a); AB_Account_SetProvider(a, pro); AB_Account_SetBackendName(a, "aqofxconnect"); GWEN_NEW_OBJECT(AO_ACCOUNT, ae); GWEN_INHERIT_SETDATA(AB_ACCOUNT, AO_ACCOUNT, a, ae, AO_Account_freeData); ae->maxPurposeLines=1; ae->debitAllowed=0; ae->readFromDbFn=AB_Account_SetReadFromDbFn(a, AO_Account_ReadFromDb); ae->writeToDbFn=AB_Account_SetWriteToDbFn(a, AO_Account_WriteToDb); return a; } int AO_Account_ReadFromDb(AB_ACCOUNT *a, GWEN_DB_NODE *db) { AO_ACCOUNT *ae; GWEN_DB_NODE *dbP; int rv; AB_PROVIDER *pro; assert(a); ae=GWEN_INHERIT_GETDATA(AB_ACCOUNT, AO_ACCOUNT, a); assert(ae); /* save provider, because AB_Account_ReadFromDb clears it */ pro=AB_Account_GetProvider(a); /* read data for base class */ rv=(ae->readFromDbFn)(a, db); if (rv<0) { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "here (%d)", rv); return rv; } /* set provider again */ AB_Account_SetProvider(a, pro); /* read data for provider */ dbP=GWEN_DB_GetGroup(db, GWEN_DB_FLAGS_DEFAULT, "data/backend"); ae->maxPurposeLines=GWEN_DB_GetIntValue(dbP, "maxPurposeLines", 0, 1); ae->debitAllowed=GWEN_DB_GetIntValue(dbP, "debitAllowed", 0, 1); return 0; } int AO_Account_WriteToDb(const AB_ACCOUNT *a, GWEN_DB_NODE *db) { AO_ACCOUNT *ae; GWEN_DB_NODE *dbP; int rv; assert(a); ae=GWEN_INHERIT_GETDATA(AB_ACCOUNT, AO_ACCOUNT, a); assert(ae); rv=(ae->writeToDbFn)(a, db); if (rv<0) { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "here (%d)", rv); return rv; } /* write data for provider */ dbP=GWEN_DB_GetGroup(db, GWEN_DB_FLAGS_DEFAULT, "data/backend"); GWEN_DB_SetIntValue(dbP, GWEN_DB_FLAGS_OVERWRITE_VARS, "maxPurposeLines", ae->maxPurposeLines); GWEN_DB_SetIntValue(dbP, GWEN_DB_FLAGS_OVERWRITE_VARS, "debitAllowed", ae->debitAllowed); return 0; } void GWENHYWFAR_CB AO_Account_freeData(void *bp, void *p) { AO_ACCOUNT *ae; ae=(AO_ACCOUNT *) p; GWEN_FREE_OBJECT(ae); } int AO_Account_GetMaxPurposeLines(const AB_ACCOUNT *a) { AO_ACCOUNT *ae; assert(a); ae=GWEN_INHERIT_GETDATA(AB_ACCOUNT, AO_ACCOUNT, a); assert(ae); return ae->maxPurposeLines; } void AO_Account_SetMaxPurposeLines(AB_ACCOUNT *a, int i) { AO_ACCOUNT *ae; assert(a); ae=GWEN_INHERIT_GETDATA(AB_ACCOUNT, AO_ACCOUNT, a); assert(ae); ae->maxPurposeLines=i; } int AO_Account_GetDebitAllowed(const AB_ACCOUNT *a) { AO_ACCOUNT *ae; assert(a); ae=GWEN_INHERIT_GETDATA(AB_ACCOUNT, AO_ACCOUNT, a); assert(ae); return ae->debitAllowed; } void AO_Account_SetDebitAllowed(AB_ACCOUNT *a, int i) { AO_ACCOUNT *ae; assert(a); ae=GWEN_INHERIT_GETDATA(AB_ACCOUNT, AO_ACCOUNT, a); assert(ae); ae->debitAllowed=i; } aqbanking-6.6.1/src/libs/plugins/backends/aqofxconnect/provider_p.h0000664000175000017500000000776614043610745022413 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AO_PROVIDER_P_H #define AO_PROVIDER_P_H #define AO_PROVIDER_CONNECT_TIMEOUT 15 #define AO_PROVIDER_SEND_TIMEOUT 10 #define AO_PROVIDER_RECV_TIMEOUT 60 #include #include #include struct AO_PROVIDER { GWEN_DB_NODE *dbConfig; int connectTimeout; int sendTimeout; int recvTimeout; uint32_t lastJobId; }; static GWEN_DIALOG *AO_Provider_GetEditUserDialog(AB_PROVIDER *pro, AB_USER *u); static GWEN_DIALOG *AO_Provider_GetNewUserDialog(AB_PROVIDER *pro, int i); /* *************************************************************************************************************** * * provider.c * * ***************************************************************************************************************/ static void GWENHYWFAR_CB AO_Provider_FreeData(void *bp, void *p); static int AO_Provider_Init(AB_PROVIDER *pro, GWEN_DB_NODE *dbData); static int AO_Provider_Fini(AB_PROVIDER *pro, GWEN_DB_NODE *dbData); static AB_ACCOUNT *AO_Provider_CreateAccountObject(AB_PROVIDER *pro); static AB_USER *AO_Provider_CreateUserObject(AB_PROVIDER *pro); /* *************************************************************************************************************** * * provider_accspec.c * * ***************************************************************************************************************/ static int AO_Provider__CreateTransactionLimitsForAccount(AB_PROVIDER *pro, const AB_ACCOUNT *acc, AB_TRANSACTION_LIMITS_LIST *tll); static int AO_Provider_UpdateAccountSpec(AB_PROVIDER *pro, AB_ACCOUNT_SPEC *as, int doLock); /* *************************************************************************************************************** * * provider_sendcmd.c * * ***************************************************************************************************************/ static AB_TRANSACTION *AO_Provider_FindJobById(AB_TRANSACTION_LIST2 *jl, uint32_t jid); static int AO_Provider__AddJobToList2(AB_PROVIDER *pro, AB_TRANSACTION *j, AB_TRANSACTION_LIST2 *jobList); static int AO_Provider__SendJobList(AB_PROVIDER *pro, AB_USER *u, AB_ACCOUNT *a, AB_TRANSACTION_LIST2 *jl, AB_IMEXPORTER_CONTEXT *ctx); static void AO_Provider__FinishJobs(AB_PROVIDER *pro, AB_TRANSACTION_LIST2 *jobList, AB_IMEXPORTER_CONTEXT *ctx); static int AO_Provider__SendAccountQueue(AB_PROVIDER *pro, AB_USER *u, AB_ACCOUNTQUEUE *aq, AB_IMEXPORTER_CONTEXT *ctx); static int AO_Provider__SendUserQueue(AB_PROVIDER *pro, AB_USERQUEUE *uq, AB_IMEXPORTER_CONTEXT *ctx); static int AO_Provider_SendCommands(AB_PROVIDER *pro, AB_PROVIDERQUEUE *pq, AB_IMEXPORTER_CONTEXT *ctx); static void AO_Provider__AddOrModifyAccount(AB_PROVIDER *pro, AB_USER *u, AB_ACCOUNT *acc); static int AO_Provider__ProcessImporterContext(AB_PROVIDER *pro, AB_USER *u, AB_IMEXPORTER_CONTEXT *ictx); /* *************************************************************************************************************** * * provider_update.c * * ***************************************************************************************************************/ static int AO_Provider_UpdatePreInit(AB_PROVIDER *pro, uint32_t lastVersion, uint32_t currentVersion); static int AO_Provider_UpdatePostInit(AB_PROVIDER *pro, uint32_t lastVersion, uint32_t currentVersion); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqofxconnect/account_p.h0000664000175000017500000000160314043610745022175 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AO_ACCOUNT_P_H #define AO_ACCOUNT_P_H #include "account.h" typedef struct AO_ACCOUNT AO_ACCOUNT; struct AO_ACCOUNT { int maxPurposeLines; int debitAllowed; AB_ACCOUNT_READFROMDB_FN readFromDbFn; AB_ACCOUNT_WRITETODB_FN writeToDbFn; }; static void GWENHYWFAR_CB AO_Account_freeData(void *bp, void *p); static int AO_Account_ReadFromDb(AB_ACCOUNT *a, GWEN_DB_NODE *db); static int AO_Account_WriteToDb(const AB_ACCOUNT *a, GWEN_DB_NODE *db); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqofxconnect/Makefile.in0000644000175000017500000007631515037736025022134 00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/libs/plugins/backends/aqofxconnect ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/distri.m4 $(top_srcdir)/m4/gwenhywfar.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/os.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = aqofxconnect.xml CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libaqofxconnect_la_DEPENDENCIES = libofxhome/libofxhome.la \ v1/libofxdcv1.la v2/libofxdcv2.la control/libofxdccontrol.la \ common/libofxdccommon.la dialogs/libofxdcdialogs.la am_libaqofxconnect_la_OBJECTS = account.lo user.lo provider.lo libaqofxconnect_la_OBJECTS = $(am_libaqofxconnect_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/account.Plo ./$(DEPDIR)/provider.Plo \ ./$(DEPDIR)/user.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libaqofxconnect_la_SOURCES) DIST_SOURCES = $(libaqofxconnect_la_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(plugindir)" DATA = $(plugin_DATA) HEADERS = $(noinst_HEADERS) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir distdir-am am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/aqofxconnect.xml.in \ $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ADD_ACLOCAL_FLAGS = @ADD_ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AQBANKING_CLI_VERSION_STRING = @AQBANKING_CLI_VERSION_STRING@ AQBANKING_FINTS_VERSION_STRING = @AQBANKING_FINTS_VERSION_STRING@ AQBANKING_SO_AGE = @AQBANKING_SO_AGE@ AQBANKING_SO_CURRENT = @AQBANKING_SO_CURRENT@ AQBANKING_SO_EFFECTIVE = @AQBANKING_SO_EFFECTIVE@ AQBANKING_SO_REVISION = @AQBANKING_SO_REVISION@ AQBANKING_VERSION_BUILD = @AQBANKING_VERSION_BUILD@ AQBANKING_VERSION_FULL_STRING = @AQBANKING_VERSION_FULL_STRING@ AQBANKING_VERSION_MAJOR = @AQBANKING_VERSION_MAJOR@ AQBANKING_VERSION_MINOR = @AQBANKING_VERSION_MINOR@ AQBANKING_VERSION_PATCHLEVEL = @AQBANKING_VERSION_PATCHLEVEL@ AQBANKING_VERSION_RELEASE_STRING = @AQBANKING_VERSION_RELEASE_STRING@ AQBANKING_VERSION_STRING = @AQBANKING_VERSION_STRING@ AQBANKING_VERSION_TAG = @AQBANKING_VERSION_TAG@ AQEBICS_CFLAGS = @AQEBICS_CFLAGS@ AQEBICS_LIBS = @AQEBICS_LIBS@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATETIME = @DATETIME@ DEFS = @DEFS@ -DLOCALEDIR=\"$(localedir)\" DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_EXCLUDE_PATTERNS = @DOXYGEN_EXCLUDE_PATTERNS@ DOXYGEN_FILE_PATTERNS = @DOXYGEN_FILE_PATTERNS@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENGUI_GTK2_CFLAGS = @GWENGUI_GTK2_CFLAGS@ GWENGUI_GTK2_LIBS = @GWENGUI_GTK2_LIBS@ GWENHYWFAR_MINIMUM_VERSION = @GWENHYWFAR_MINIMUM_VERSION@ HAVE_GWENGUI_GTK2 = @HAVE_GWENGUI_GTK2@ HAVE_I18N = @HAVE_I18N@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIBXSLT_CFLAGS = @LIBXSLT_CFLAGS@ LIBXSLT_LIBS = @LIBXSLT_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_SUPPORTS_QT = @MSGFMT_SUPPORTS_QT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ TUTORIALS = @TUTORIALS@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XMLMERGE = @XMLMERGE@ XMLSEC_CFLAGS = @XMLSEC_CFLAGS@ XMLSEC_LIBS = @XMLSEC_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ aqbanking_backends = @aqbanking_backends@ aqbanking_cfg_searchdir = @aqbanking_cfg_searchdir@ aqbanking_data_searchdir = @aqbanking_data_searchdir@ aqbanking_headerdir = @aqbanking_headerdir@ aqbanking_headerdir_am = @aqbanking_headerdir_am@ aqbanking_includes = @aqbanking_includes@ aqbanking_internal_libs = @aqbanking_internal_libs@ aqbanking_ldflags = @aqbanking_ldflags@ aqbanking_libs = @aqbanking_libs@ aqbanking_locale_searchdir = @aqbanking_locale_searchdir@ aqbanking_modules = @aqbanking_modules@ aqbanking_pkgdatadir = @aqbanking_pkgdatadir@ aqbanking_plugin_searchdir = @aqbanking_plugin_searchdir@ aqbanking_plugindir = @aqbanking_plugindir@ aqbanking_plugins_backends_dirs = @aqbanking_plugins_backends_dirs@ aqbanking_plugins_backends_libs = @aqbanking_plugins_backends_libs@ aqbanking_plugins_bankinfo_dirs = @aqbanking_plugins_bankinfo_dirs@ aqbanking_plugins_bankinfo_libs = @aqbanking_plugins_bankinfo_libs@ aqbanking_plugins_imexporters_dirs = @aqbanking_plugins_imexporters_dirs@ aqbanking_plugins_imexporters_libs = @aqbanking_plugins_imexporters_libs@ aqbanking_plugins_parsers_dirs = @aqbanking_plugins_parsers_dirs@ aqbanking_symlinkdir = @aqbanking_symlinkdir@ aqbanking_sys_is_windows = @aqbanking_sys_is_windows@ aqbankingpp_modules = @aqbankingpp_modules@ aqebics_datadir = @aqebics_datadir@ aqebics_includes = @aqebics_includes@ aqebics_internal_libs = @aqebics_internal_libs@ aqebics_ldflags = @aqebics_ldflags@ aqebics_libs = @aqebics_libs@ aqfints_datadir = @aqfints_datadir@ aqhbci_datadir = @aqhbci_datadir@ aqhbci_includes = @aqhbci_includes@ aqhbci_internal_libs = @aqhbci_internal_libs@ aqhbci_ldflags = @aqhbci_ldflags@ aqhbci_libs = @aqhbci_libs@ aqofxconnect_includes = @aqofxconnect_includes@ aqofxconnect_internal_libs = @aqofxconnect_internal_libs@ aqofxconnect_libs = @aqofxconnect_libs@ aqpaypal_includes = @aqpaypal_includes@ aqpaypal_internal_libs = @aqpaypal_internal_libs@ aqpaypal_libs = @aqpaypal_libs@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gmp_libs = @gmp_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_dir = @gwenhywfar_dir@ gwenhywfar_has_crypt = @gwenhywfar_has_crypt@ gwenhywfar_headers = @gwenhywfar_headers@ gwenhywfar_includes = @gwenhywfar_includes@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_plugins = @gwenhywfar_plugins@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = $(datadir)/locale localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ typemaker2_exe = @typemaker2_exe@ visibility_cflags = @visibility_cflags@ with_aqebics = @with_aqebics@ with_aqhbci = @with_aqhbci@ SUBDIRS = libofxhome common v1 v2 control dialogs AM_CPPFLAGS = -I$(top_srcdir)/src/libs -I$(top_builddir)/src/libs $(gwenhywfar_includes) -I$(srcdir)/.. AM_CFLAGS = -DBUILDING_AQBANKING @visibility_cflags@ plugindir = $(aqbanking_plugindir)/providers plugin_DATA = aqofxconnect.xml noinst_HEADERS = \ account_p.h \ aqofxconnect_l.h \ provider_p.h \ user_p.h \ account.h \ aqofxconnect.h \ provider.h \ user.h #iheaderdir=@aqbanking_headerdir_am@/aqofxconnect #iheader_HEADERS= # static plugin library noinst_LTLIBRARIES = libaqofxconnect.la libaqofxconnect_la_SOURCES = \ account.c \ user.c \ provider.c libaqofxconnect_la_LIBADD = \ libofxhome/libofxhome.la \ v1/libofxdcv1.la \ v2/libofxdcv2.la \ control/libofxdccontrol.la \ common/libofxdccommon.la \ dialogs/libofxdcdialogs.la INCLUDED_SOURCEFILES = \ provider_accspec.c \ provider_sendcmd.c \ provider_update.c EXTRA_DIST = $(dlgdata_DATA) $(dlgimage_DATA) \ aqofxconnect.xml.in \ $(INCLUDED_SOURCEFILES) all: all-recursive .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libs/plugins/backends/aqofxconnect/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libs/plugins/backends/aqofxconnect/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): aqofxconnect.xml: $(top_builddir)/config.status $(srcdir)/aqofxconnect.xml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libaqofxconnect.la: $(libaqofxconnect_la_OBJECTS) $(libaqofxconnect_la_DEPENDENCIES) $(EXTRA_libaqofxconnect_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libaqofxconnect_la_OBJECTS) $(libaqofxconnect_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/account.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/provider.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/user.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-pluginDATA: $(plugin_DATA) @$(NORMAL_INSTALL) @list='$(plugin_DATA)'; test -n "$(plugindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(plugindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(plugindir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(plugindir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(plugindir)" || exit $$?; \ done uninstall-pluginDATA: @$(NORMAL_UNINSTALL) @list='$(plugin_DATA)'; test -n "$(plugindir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(plugindir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(plugindir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-recursive -rm -f ./$(DEPDIR)/account.Plo -rm -f ./$(DEPDIR)/provider.Plo -rm -f ./$(DEPDIR)/user.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-pluginDATA install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f ./$(DEPDIR)/account.Plo -rm -f ./$(DEPDIR)/provider.Plo -rm -f ./$(DEPDIR)/user.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-pluginDATA .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ am--depfiles check check-am clean clean-generic clean-libtool \ clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-pluginDATA install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am uninstall-pluginDATA .PRECIOUS: Makefile sources: for f in $(libaqofxconnect_la_SOURCES) $(aqofxconnect_la_SOURCES) $(INCLUDED_SOURCEFILES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for f in $(dlgdata_DATA); do \ echo $(subdir)/$$f >>$(top_srcdir)/dlgsources; \ done for f in $(plugin_DATA); do \ echo $(subdir)/$$f >>$(top_srcdir)/pdsources; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d sources; \ done built_sources: list='$(SUBDIRS)'; for d in $$list; do \ $(MAKE) -C $$d built_sources; \ done ; cppcheck: for f in $(libaqofxconnect_la_SOURCES); do \ cppcheck --force $$f ; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done typefiles: for d in $(SUBDIRS); do \ $(MAKE) -C $$d typefiles; \ done typedefs: for d in $(SUBDIRS); do \ $(MAKE) -C $$d typedefs; \ done # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: aqbanking-6.6.1/src/libs/plugins/backends/aqofxconnect/common/0000755000175000017500000000000015037736163021426 500000000000000aqbanking-6.6.1/src/libs/plugins/backends/aqofxconnect/common/n_statement.c0000664000175000017500000002076614043610745024041 00000000000000/*************************************************************************** begin : Mon Jan 13 2020 copyright : (C) 2020 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "n_statement.h" #include "n_utils.h" #include "aqofxconnect/user.h" #include /* ------------------------------------------------------------------------------------------------ * forward declarations * ------------------------------------------------------------------------------------------------ */ static GWEN_XMLNODE *_mkBankStatementRqNode(AB_USER *u, AB_ACCOUNT *a, AB_TRANSACTION *j); static GWEN_XMLNODE *_mkCreditCardStatementRqNode(AB_USER *u, AB_ACCOUNT *a, AB_TRANSACTION *j); static GWEN_XMLNODE *_mkInvestmentStatementRqNode(AB_USER *u, AB_ACCOUNT *a, AB_TRANSACTION *j); static const char *_getOfxAccountType(int t); /* ------------------------------------------------------------------------------------------------ * implementations * ------------------------------------------------------------------------------------------------ */ GWEN_XMLNODE *AO_Provider_MkStatementRqNode(AB_USER *u, AB_ACCOUNT *a, AB_TRANSACTION *j) { assert(a); switch (AB_Account_GetAccountType(a)) { case AB_AccountType_CreditCard: return _mkCreditCardStatementRqNode(u, a, j); case AB_AccountType_Investment: return _mkInvestmentStatementRqNode(u, a, j); case AB_AccountType_Checking: case AB_AccountType_Savings: case AB_AccountType_Bank: case AB_AccountType_Cash: case AB_AccountType_Unknown: default: return _mkBankStatementRqNode(u, a, j); } } GWEN_XMLNODE *_mkBankStatementRqNode(AB_USER *u, AB_ACCOUNT *a, AB_TRANSACTION *j) { GWEN_XMLNODE *xmlMsg; GWEN_XMLNODE *xmlTrnRq; GWEN_XMLNODE *xmlRq; const char *s; xmlMsg=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "BANKMSGSRQV1"); xmlTrnRq=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "STMTTRNRQ"); GWEN_XMLNode_AddChild(xmlMsg, xmlTrnRq); if (1) { char *uuid; uuid=AO_Provider_Util_GenerateUuid(); if (uuid) { GWEN_XMLNode_SetCharValue(xmlTrnRq, "TRNUID", uuid); free(uuid); } else { DBG_ERROR(AQOFXCONNECT_LOGDOMAIN, "No uuid generated, falling back to current time"); AO_Provider_Util_SetCurrentTimeValue(xmlTrnRq, AO_User_GetFlags(u), "TRNUID"); } } GWEN_XMLNode_SetCharValue(xmlTrnRq, "CLTCOOKIE", "1"); xmlRq=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "STMTRQ"); GWEN_XMLNode_AddChild(xmlTrnRq, xmlRq); if (1) { GWEN_XMLNODE *xmlAcc; xmlAcc=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "BANKACCTFROM"); GWEN_XMLNode_AddChild(xmlRq, xmlAcc); if (!(AO_User_GetFlags(u) & AO_USER_FLAGS_EMPTY_BANKID)) { /* only copy bank code if not forbidden by user */ s=AB_Account_GetBankCode(a); if (s) GWEN_XMLNode_SetCharValue(xmlAcc, "BANKID", s); } s=AB_Account_GetAccountNumber(a); if (s) GWEN_XMLNode_SetCharValue(xmlAcc, "ACCTID", s); GWEN_XMLNode_SetCharValue(xmlAcc, "ACCTTYPE", _getOfxAccountType(AB_Account_GetAccountType(a))); } if (1) { GWEN_XMLNODE *xmlInc; xmlInc=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "INCTRAN"); GWEN_XMLNode_AddChild(xmlRq, xmlInc); if (AB_Transaction_GetCommand(j)==AB_Transaction_CommandGetTransactions) { AO_Provider_Util_SetDateValue(xmlInc, AB_Transaction_GetFirstDate(j), AO_User_GetFlags(u), "DTSTART"); AO_Provider_Util_SetDateValue(xmlInc, AB_Transaction_GetLastDate(j), AO_User_GetFlags(u), "DTEND"); GWEN_XMLNode_SetCharValue(xmlInc, "INCLUDE", "Y"); } else GWEN_XMLNode_SetCharValue(xmlInc, "INCLUDE", "N"); } return xmlMsg; } GWEN_XMLNODE *_mkCreditCardStatementRqNode(AB_USER *u, AB_ACCOUNT *a, AB_TRANSACTION *j) { GWEN_XMLNODE *xmlMsg; GWEN_XMLNODE *xmlTrnRq; GWEN_XMLNODE *xmlRq; const char *s; xmlMsg=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "CREDITCARDMSGSRQV1"); xmlTrnRq=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "CCSTMTTRNRQ"); GWEN_XMLNode_AddChild(xmlMsg, xmlTrnRq); if (1) { char *uuid; uuid=AO_Provider_Util_GenerateUuid(); if (uuid) { GWEN_XMLNode_SetCharValue(xmlTrnRq, "TRNUID", uuid); free(uuid); } else { DBG_ERROR(AQOFXCONNECT_LOGDOMAIN, "No uuid generated, falling back to current time"); AO_Provider_Util_SetCurrentTimeValue(xmlTrnRq, AO_User_GetFlags(u), "TRNUID"); } } GWEN_XMLNode_SetCharValue(xmlTrnRq, "CLTCOOKIE", "1"); xmlRq=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "CCSTMTRQ"); GWEN_XMLNode_AddChild(xmlTrnRq, xmlRq); if (1) { GWEN_XMLNODE *xmlAcc; xmlAcc=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "CCACCTFROM"); GWEN_XMLNode_AddChild(xmlRq, xmlAcc); #if 0 if (!(AO_User_GetFlags(u) & AO_USER_FLAGS_EMPTY_BANKID)) { /* only copy bank code if not forbidden by user */ s=AB_Account_GetBankCode(a); if (s) GWEN_XMLNode_SetCharValue(xmlAcc, "BANKID", s); } #endif s=AB_Account_GetAccountNumber(a); if (s) GWEN_XMLNode_SetCharValue(xmlAcc, "ACCTID", s); } if (1) { GWEN_XMLNODE *xmlInc; xmlInc=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "INCTRAN"); GWEN_XMLNode_AddChild(xmlRq, xmlInc); if (AB_Transaction_GetCommand(j)==AB_Transaction_CommandGetTransactions) { AO_Provider_Util_SetDateValue(xmlInc, AB_Transaction_GetFirstDate(j), AO_User_GetFlags(u), "DTSTART"); AO_Provider_Util_SetDateValue(xmlInc, AB_Transaction_GetLastDate(j), AO_User_GetFlags(u), "DTEND"); GWEN_XMLNode_SetCharValue(xmlInc, "INCLUDE", "Y"); } else GWEN_XMLNode_SetCharValue(xmlInc, "INCLUDE", "N"); } return xmlMsg; } GWEN_XMLNODE *_mkInvestmentStatementRqNode(AB_USER *u, AB_ACCOUNT *a, AB_TRANSACTION *j) { GWEN_XMLNODE *xmlMsg; GWEN_XMLNODE *xmlTrnRq; GWEN_XMLNODE *xmlRq; const char *s; xmlMsg=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "INVSTMTMSGSRQV1"); xmlTrnRq=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "INVSTMTTRNRQ"); GWEN_XMLNode_AddChild(xmlMsg, xmlTrnRq); if (1) { char *uuid; uuid=AO_Provider_Util_GenerateUuid(); if (uuid) { GWEN_XMLNode_SetCharValue(xmlTrnRq, "TRNUID", uuid); free(uuid); } else { DBG_ERROR(AQOFXCONNECT_LOGDOMAIN, "No uuid generated, falling back to current time"); AO_Provider_Util_SetCurrentTimeValue(xmlTrnRq, AO_User_GetFlags(u), "TRNUID"); } } GWEN_XMLNode_SetCharValue(xmlTrnRq, "CLTCOOKIE", "1"); xmlRq=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "INVSTMTRQ"); GWEN_XMLNode_AddChild(xmlTrnRq, xmlRq); if (1) { GWEN_XMLNODE *xmlAcc; xmlAcc=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "INVACCTFROM"); GWEN_XMLNode_AddChild(xmlRq, xmlAcc); s=AO_User_GetBrokerId(u); if (s) GWEN_XMLNode_SetCharValue(xmlAcc, "BROKERID", s); s=AB_Account_GetAccountNumber(a); if (s) GWEN_XMLNode_SetCharValue(xmlAcc, "ACCTID", s); } if (1) { GWEN_XMLNODE *xmlInc; xmlInc=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "INCTRAN"); GWEN_XMLNode_AddChild(xmlRq, xmlInc); if (AB_Transaction_GetCommand(j)==AB_Transaction_CommandGetTransactions) { AO_Provider_Util_SetDateValue(xmlInc, AB_Transaction_GetFirstDate(j), AO_User_GetFlags(u), "DTSTART"); AO_Provider_Util_SetDateValue(xmlInc, AB_Transaction_GetLastDate(j), AO_User_GetFlags(u), "DTEND"); GWEN_XMLNode_SetCharValue(xmlInc, "INCLUDE", "Y"); } else GWEN_XMLNode_SetCharValue(xmlInc, "INCLUDE", "N"); } GWEN_XMLNode_SetCharValue(xmlRq, "INCOO", "Y"); if (1) { GWEN_XMLNODE *xmlInc; xmlInc=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "INCPOS"); GWEN_XMLNode_AddChild(xmlRq, xmlInc); if (AB_Transaction_GetCommand(j)==AB_Transaction_CommandGetTransactions) { AO_Provider_Util_SetCurrentTimeValue(xmlInc, AO_User_GetFlags(u), "DTASOF"); GWEN_XMLNode_SetCharValue(xmlInc, "INCLUDE", "Y"); } } GWEN_XMLNode_SetCharValue(xmlRq, "INCBAL", "Y"); return xmlMsg; } const char *_getOfxAccountType(int t) { switch (t) { case AB_AccountType_Checking: return "CHECKING"; case AB_AccountType_Savings: return "SAVINGS"; case AB_AccountType_Bank: return "CREDITLINE"; case AB_AccountType_MoneyMarket: return "MONEYMRKT"; case AB_AccountType_CreditCard: case AB_AccountType_Investment: case AB_AccountType_Cash: case AB_AccountType_Unknown: default: return "CHECKING"; } } aqbanking-6.6.1/src/libs/plugins/backends/aqofxconnect/common/Makefile.am0000664000175000017500000000327314043610745023402 00000000000000AM_CPPFLAGS = -I$(top_srcdir)/src/libs -I$(top_builddir)/src/libs $(gwenhywfar_includes) -I$(srcdir)/../../../ -I$(srcdir)/../../ AM_CFLAGS=-DBUILDING_AQBANKING @visibility_cflags@ typefiles= dlgdatadir=$(aqbanking_pkgdatadir)/backends/aqofxconnect/dialogs dlgdata_DATA= build_sources= build_headers_priv= build_headers_pub= build_headers=$(build_headers_priv) $(build_headers_pub) noinst_HEADERS=$(build_headers_priv) $(build_headers_pub) \ io_network.h \ n_acctinfo.h \ n_signon.h \ n_statement.h \ n_utils.h #iheaderdir=@aqbanking_headerdir_am@/aqofxconnect #iheader_HEADERS= noinst_LTLIBRARIES=libofxdccommon.la libofxdccommon_la_SOURCES= $(build_sources) \ io_network.c \ n_acctinfo.c \ n_signon.c \ n_statement.c \ n_utils.c EXTRA_DIST=$(typefiles) $(dlgdata_DATA) $(dlgimage_DATA) $(build_sources) $(build_headers) built_sources: $(build_sources) sources: for f in $(libofxdccommon_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for f in $(dlgdata_DATA); do \ echo $(subdir)/$$f >>$(top_srcdir)/dlgsources; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d sources; \ done cppcheck: for f in $(libofxdccommon_la_SOURCES); do \ cppcheck --force $$f ; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done typefiles: $(typefiles) $(typemaker2_exe) -I $(top_srcdir)/src/libs/aqbanking/typemaker2/c -I $(gwenhywfar_dir)/share/gwenhywfar/typemaker2/c -I $(srcdir) --destfolder="$(srcdir)" $(typefiles) typedefs: $(typefiles) $(typemaker2_exe) --defs-only -I $(top_srcdir)/src/libs/aqbanking/typemaker2/c -I $(gwenhywfar_dir)/share/gwenhywfar/typemaker2/c -I $(srcdir) --destfolder="$(srcdir)" $(typefiles) aqbanking-6.6.1/src/libs/plugins/backends/aqofxconnect/common/n_signon.h0000664000175000017500000000131514043610745023324 00000000000000/*************************************************************************** begin : Mon Jan 13 2020 copyright : (C) 2020 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AO_N_SIGNON_H #define AO_N_SIGNON_H /* plugin headers */ #include /* aqbanking headers */ #include /* gwenhywfar headers */ #include GWEN_XMLNODE *AO_Provider_MkSignOnNode(AB_USER *u); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqofxconnect/common/n_acctinfo.h0000664000175000017500000000132514043610745023616 00000000000000/*************************************************************************** begin : Mon Jan 13 2020 copyright : (C) 2020 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AO_N_ACCTINFO_H #define AO_N_ACCTINFO_H /* plugin headers */ #include /* aqbanking headers */ #include /* gwenhywfar headers */ #include GWEN_XMLNODE *AO_Provider_MkAcctInfoRqNode(AB_USER *u); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqofxconnect/common/n_utils.c0000664000175000017500000001136014546575650023200 00000000000000/*************************************************************************** begin : Mon Jan 13 2020 copyright : (C) 2020 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "n_utils.h" #include "aqofxconnect/user.h" #include "aqbanking/i18n_l.h" #include #include #include void AO_Provider_Util_SetDateValue(GWEN_XMLNODE *xmlNode, const GWEN_DATE *da, uint32_t userFlags, const char *varName) { if (da) { GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 32, 0, 1); if (userFlags & AO_USER_FLAGS_SEND_SHORT_DATE) GWEN_Date_toStringWithTemplate(da, "YYYYMMDD000000", tbuf); else GWEN_Date_toStringWithTemplate(da, "YYYYMMDD000000.000", tbuf); GWEN_XMLNode_SetCharValue(xmlNode, varName, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } } void AO_Provider_Util_SetTimeValue(GWEN_XMLNODE *xmlNode, const GWEN_TIME *ti, uint32_t userFlags, const char *varName) { GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 32, 0, 1); if (userFlags & AO_USER_FLAGS_SEND_SHORT_DATE) GWEN_Time_toString(ti, "YYYYMMDDhhmmss", tbuf); else GWEN_Time_toString(ti, "YYYYMMDDhhmmss.000", tbuf); GWEN_XMLNode_SetCharValue(xmlNode, varName, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } void AO_Provider_Util_SetCurrentTimeValue(GWEN_XMLNODE *xmlNode, uint32_t userFlags, const char *varName) { GWEN_TIME *ti; ti=GWEN_CurrentTime(); assert(ti); AO_Provider_Util_SetTimeValue(xmlNode, ti, userFlags, varName); GWEN_Time_free(ti); } void AO_Provider_Util_ListAccounts(AB_IMEXPORTER_CONTEXT *ctx) { if (ctx) { AB_IMEXPORTER_ACCOUNTINFO_LIST *accInfoList; accInfoList=AB_ImExporterContext_GetAccountInfoList(ctx); if (accInfoList) { AB_IMEXPORTER_ACCOUNTINFO *accInfo; accInfo=AB_ImExporterAccountInfo_List_First(accInfoList); while (accInfo) { const char *sBankCode; const char *sBankName; const char *sAccountNumber; const char *sAccountName; sBankCode=AB_ImExporterAccountInfo_GetBankCode(accInfo); sBankName=AB_ImExporterAccountInfo_GetBankName(accInfo); sAccountNumber=AB_ImExporterAccountInfo_GetAccountNumber(accInfo); sAccountName=AB_ImExporterAccountInfo_GetAccountName(accInfo); GWEN_Gui_ProgressLog2(0, GWEN_LoggerLevel_Notice, I18N("Received account %s/%s (%s/%s)"), sBankCode?sBankCode:"(no bank code)", sAccountNumber?sAccountNumber:"(no account number)", sBankName?sBankName:"(no bank name)", sAccountName?sAccountName:"(no account name)"); accInfo=AB_ImExporterAccountInfo_List_Next(accInfo); } } } } /* XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX * 012345678901234567890123456789012345 * 1 2 3 * 0 9 14 19 24 * 8 13 18 23 */ char *AO_Provider_Util_GenerateUuid() { GWEN_CRYPT_KEY *temporaryCryptKey; uint8_t *ptrKeyData; uint32_t lenKeyData; uint8_t rawUuid[16]; char *returnBuffer; temporaryCryptKey=GWEN_Crypt_KeyBlowFish_Generate(GWEN_Crypt_CryptMode_Cbc, 16, 0); if (temporaryCryptKey==NULL) { DBG_ERROR(AQBANKING_LOGDOMAIN, "No random data generated"); return NULL; } ptrKeyData=GWEN_Crypt_KeyBlowFish_GetKeyDataPtr(temporaryCryptKey); lenKeyData=GWEN_Crypt_KeyBlowFish_GetKeyDataLen(temporaryCryptKey); if (ptrKeyData==NULL || lenKeyData<16) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Too few bytes in random data"); GWEN_Crypt_Key_free(temporaryCryptKey); return NULL; } memmove(rawUuid, ptrKeyData, 16); GWEN_Crypt_Key_free(temporaryCryptKey); /* some adjustments for RFC 4122 */ rawUuid[6]=0x40 | (rawUuid[6] & 0xf); /* mark as randomly generated */ rawUuid[8]=0x80 | (rawUuid[8] & 0x3f); /* set high nibble to 8, 9, A or B */ returnBuffer=(char *) malloc(37); assert(returnBuffer); GWEN_Text_ToHex((const char *) rawUuid, 4, returnBuffer, 9); returnBuffer[8]='-'; GWEN_Text_ToHex((const char *) rawUuid+4, 2, returnBuffer+9, 5); returnBuffer[13]='-'; GWEN_Text_ToHex((const char *) rawUuid+6, 2, returnBuffer+14, 5); returnBuffer[18]='-'; GWEN_Text_ToHex((const char *) rawUuid+8, 2, returnBuffer+19, 5); returnBuffer[23]='-'; GWEN_Text_ToHex((const char *) rawUuid+10, 6, returnBuffer+24, 13); returnBuffer[36]=0; return returnBuffer; } aqbanking-6.6.1/src/libs/plugins/backends/aqofxconnect/common/Makefile.in0000644000175000017500000006600015037736025023412 00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/libs/plugins/backends/aqofxconnect/common ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/distri.m4 $(top_srcdir)/m4/gwenhywfar.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/os.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libofxdccommon_la_LIBADD = am__objects_1 = am_libofxdccommon_la_OBJECTS = $(am__objects_1) io_network.lo \ n_acctinfo.lo n_signon.lo n_statement.lo n_utils.lo libofxdccommon_la_OBJECTS = $(am_libofxdccommon_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/io_network.Plo \ ./$(DEPDIR)/n_acctinfo.Plo ./$(DEPDIR)/n_signon.Plo \ ./$(DEPDIR)/n_statement.Plo ./$(DEPDIR)/n_utils.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libofxdccommon_la_SOURCES) DIST_SOURCES = $(libofxdccommon_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(dlgdatadir)" DATA = $(dlgdata_DATA) HEADERS = $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADD_ACLOCAL_FLAGS = @ADD_ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AQBANKING_CLI_VERSION_STRING = @AQBANKING_CLI_VERSION_STRING@ AQBANKING_FINTS_VERSION_STRING = @AQBANKING_FINTS_VERSION_STRING@ AQBANKING_SO_AGE = @AQBANKING_SO_AGE@ AQBANKING_SO_CURRENT = @AQBANKING_SO_CURRENT@ AQBANKING_SO_EFFECTIVE = @AQBANKING_SO_EFFECTIVE@ AQBANKING_SO_REVISION = @AQBANKING_SO_REVISION@ AQBANKING_VERSION_BUILD = @AQBANKING_VERSION_BUILD@ AQBANKING_VERSION_FULL_STRING = @AQBANKING_VERSION_FULL_STRING@ AQBANKING_VERSION_MAJOR = @AQBANKING_VERSION_MAJOR@ AQBANKING_VERSION_MINOR = @AQBANKING_VERSION_MINOR@ AQBANKING_VERSION_PATCHLEVEL = @AQBANKING_VERSION_PATCHLEVEL@ AQBANKING_VERSION_RELEASE_STRING = @AQBANKING_VERSION_RELEASE_STRING@ AQBANKING_VERSION_STRING = @AQBANKING_VERSION_STRING@ AQBANKING_VERSION_TAG = @AQBANKING_VERSION_TAG@ AQEBICS_CFLAGS = @AQEBICS_CFLAGS@ AQEBICS_LIBS = @AQEBICS_LIBS@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATETIME = @DATETIME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_EXCLUDE_PATTERNS = @DOXYGEN_EXCLUDE_PATTERNS@ DOXYGEN_FILE_PATTERNS = @DOXYGEN_FILE_PATTERNS@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENGUI_GTK2_CFLAGS = @GWENGUI_GTK2_CFLAGS@ GWENGUI_GTK2_LIBS = @GWENGUI_GTK2_LIBS@ GWENHYWFAR_MINIMUM_VERSION = @GWENHYWFAR_MINIMUM_VERSION@ HAVE_GWENGUI_GTK2 = @HAVE_GWENGUI_GTK2@ HAVE_I18N = @HAVE_I18N@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIBXSLT_CFLAGS = @LIBXSLT_CFLAGS@ LIBXSLT_LIBS = @LIBXSLT_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_SUPPORTS_QT = @MSGFMT_SUPPORTS_QT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ TUTORIALS = @TUTORIALS@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XMLMERGE = @XMLMERGE@ XMLSEC_CFLAGS = @XMLSEC_CFLAGS@ XMLSEC_LIBS = @XMLSEC_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ aqbanking_backends = @aqbanking_backends@ aqbanking_cfg_searchdir = @aqbanking_cfg_searchdir@ aqbanking_data_searchdir = @aqbanking_data_searchdir@ aqbanking_headerdir = @aqbanking_headerdir@ aqbanking_headerdir_am = @aqbanking_headerdir_am@ aqbanking_includes = @aqbanking_includes@ aqbanking_internal_libs = @aqbanking_internal_libs@ aqbanking_ldflags = @aqbanking_ldflags@ aqbanking_libs = @aqbanking_libs@ aqbanking_locale_searchdir = @aqbanking_locale_searchdir@ aqbanking_modules = @aqbanking_modules@ aqbanking_pkgdatadir = @aqbanking_pkgdatadir@ aqbanking_plugin_searchdir = @aqbanking_plugin_searchdir@ aqbanking_plugindir = @aqbanking_plugindir@ aqbanking_plugins_backends_dirs = @aqbanking_plugins_backends_dirs@ aqbanking_plugins_backends_libs = @aqbanking_plugins_backends_libs@ aqbanking_plugins_bankinfo_dirs = @aqbanking_plugins_bankinfo_dirs@ aqbanking_plugins_bankinfo_libs = @aqbanking_plugins_bankinfo_libs@ aqbanking_plugins_imexporters_dirs = @aqbanking_plugins_imexporters_dirs@ aqbanking_plugins_imexporters_libs = @aqbanking_plugins_imexporters_libs@ aqbanking_plugins_parsers_dirs = @aqbanking_plugins_parsers_dirs@ aqbanking_symlinkdir = @aqbanking_symlinkdir@ aqbanking_sys_is_windows = @aqbanking_sys_is_windows@ aqbankingpp_modules = @aqbankingpp_modules@ aqebics_datadir = @aqebics_datadir@ aqebics_includes = @aqebics_includes@ aqebics_internal_libs = @aqebics_internal_libs@ aqebics_ldflags = @aqebics_ldflags@ aqebics_libs = @aqebics_libs@ aqfints_datadir = @aqfints_datadir@ aqhbci_datadir = @aqhbci_datadir@ aqhbci_includes = @aqhbci_includes@ aqhbci_internal_libs = @aqhbci_internal_libs@ aqhbci_ldflags = @aqhbci_ldflags@ aqhbci_libs = @aqhbci_libs@ aqofxconnect_includes = @aqofxconnect_includes@ aqofxconnect_internal_libs = @aqofxconnect_internal_libs@ aqofxconnect_libs = @aqofxconnect_libs@ aqpaypal_includes = @aqpaypal_includes@ aqpaypal_internal_libs = @aqpaypal_internal_libs@ aqpaypal_libs = @aqpaypal_libs@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gmp_libs = @gmp_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_dir = @gwenhywfar_dir@ gwenhywfar_has_crypt = @gwenhywfar_has_crypt@ gwenhywfar_headers = @gwenhywfar_headers@ gwenhywfar_includes = @gwenhywfar_includes@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_plugins = @gwenhywfar_plugins@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ typemaker2_exe = @typemaker2_exe@ visibility_cflags = @visibility_cflags@ with_aqebics = @with_aqebics@ with_aqhbci = @with_aqhbci@ AM_CPPFLAGS = -I$(top_srcdir)/src/libs -I$(top_builddir)/src/libs $(gwenhywfar_includes) -I$(srcdir)/../../../ -I$(srcdir)/../../ AM_CFLAGS = -DBUILDING_AQBANKING @visibility_cflags@ typefiles = dlgdatadir = $(aqbanking_pkgdatadir)/backends/aqofxconnect/dialogs dlgdata_DATA = build_sources = build_headers_priv = build_headers_pub = build_headers = $(build_headers_priv) $(build_headers_pub) noinst_HEADERS = $(build_headers_priv) $(build_headers_pub) \ io_network.h \ n_acctinfo.h \ n_signon.h \ n_statement.h \ n_utils.h #iheaderdir=@aqbanking_headerdir_am@/aqofxconnect #iheader_HEADERS= noinst_LTLIBRARIES = libofxdccommon.la libofxdccommon_la_SOURCES = $(build_sources) \ io_network.c \ n_acctinfo.c \ n_signon.c \ n_statement.c \ n_utils.c EXTRA_DIST = $(typefiles) $(dlgdata_DATA) $(dlgimage_DATA) $(build_sources) $(build_headers) all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libs/plugins/backends/aqofxconnect/common/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libs/plugins/backends/aqofxconnect/common/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libofxdccommon.la: $(libofxdccommon_la_OBJECTS) $(libofxdccommon_la_DEPENDENCIES) $(EXTRA_libofxdccommon_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libofxdccommon_la_OBJECTS) $(libofxdccommon_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/io_network.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/n_acctinfo.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/n_signon.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/n_statement.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/n_utils.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-dlgdataDATA: $(dlgdata_DATA) @$(NORMAL_INSTALL) @list='$(dlgdata_DATA)'; test -n "$(dlgdatadir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(dlgdatadir)'"; \ $(MKDIR_P) "$(DESTDIR)$(dlgdatadir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(dlgdatadir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(dlgdatadir)" || exit $$?; \ done uninstall-dlgdataDATA: @$(NORMAL_UNINSTALL) @list='$(dlgdata_DATA)'; test -n "$(dlgdatadir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(dlgdatadir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(dlgdatadir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/io_network.Plo -rm -f ./$(DEPDIR)/n_acctinfo.Plo -rm -f ./$(DEPDIR)/n_signon.Plo -rm -f ./$(DEPDIR)/n_statement.Plo -rm -f ./$(DEPDIR)/n_utils.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dlgdataDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/io_network.Plo -rm -f ./$(DEPDIR)/n_acctinfo.Plo -rm -f ./$(DEPDIR)/n_signon.Plo -rm -f ./$(DEPDIR)/n_statement.Plo -rm -f ./$(DEPDIR)/n_utils.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-dlgdataDATA .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-generic clean-libtool clean-noinstLTLIBRARIES \ cscopelist-am ctags ctags-am distclean distclean-compile \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dlgdataDATA install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \ uninstall-dlgdataDATA .PRECIOUS: Makefile built_sources: $(build_sources) sources: for f in $(libofxdccommon_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for f in $(dlgdata_DATA); do \ echo $(subdir)/$$f >>$(top_srcdir)/dlgsources; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d sources; \ done cppcheck: for f in $(libofxdccommon_la_SOURCES); do \ cppcheck --force $$f ; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done typefiles: $(typefiles) $(typemaker2_exe) -I $(top_srcdir)/src/libs/aqbanking/typemaker2/c -I $(gwenhywfar_dir)/share/gwenhywfar/typemaker2/c -I $(srcdir) --destfolder="$(srcdir)" $(typefiles) typedefs: $(typefiles) $(typemaker2_exe) --defs-only -I $(top_srcdir)/src/libs/aqbanking/typemaker2/c -I $(gwenhywfar_dir)/share/gwenhywfar/typemaker2/c -I $(srcdir) --destfolder="$(srcdir)" $(typefiles) # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: aqbanking-6.6.1/src/libs/plugins/backends/aqofxconnect/common/io_network.c0000664000175000017500000001233714043610745023673 00000000000000/*************************************************************************** begin : Thu Jan 16 2020 copyright : (C) 2020 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif /* plugin headers */ #include "io_network.h" #include "aqofxconnect/user.h" /* aqbanking headers */ #include "aqbanking/i18n_l.h" #include /* gwenhywfar headers */ #include /* system headers */ #include #include /* ------------------------------------------------------------------------------------------------ * forward declarations * ------------------------------------------------------------------------------------------------ */ static int _createConnection(AB_PROVIDER *pro, AB_USER *u, GWEN_HTTP_SESSION **pSess); static void _probablyWriteToLogFile(const char *sEnvVar, const char *sCaption, const uint8_t *p, uint32_t len); /* ------------------------------------------------------------------------------------------------ * implementations * ------------------------------------------------------------------------------------------------ */ int AO_Provider_SendAndReceive(AB_PROVIDER *pro, AB_USER *u, const uint8_t *p, unsigned int plen, GWEN_BUFFER **pRbuf) { GWEN_HTTP_SESSION *sess=NULL; GWEN_BUFFER *rbuf; int rv; const char *sEnvVar; sEnvVar=getenv("AQOFX_LOG_COMM"); _probablyWriteToLogFile(sEnvVar, "Sending", p, plen); /* setup connection */ rv=_createConnection(pro, u, &sess); if (rv) { DBG_ERROR(AQOFXCONNECT_LOGDOMAIN, "Could not create connection"); GWEN_Gui_ProgressLog2(0, GWEN_LoggerLevel_Error, I18N("Could not create connection (%d)"), rv); return rv; } /* send request */ GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Info, I18N("Sending request...")); rv=GWEN_HttpSession_SendPacket(sess, "POST", p, plen); if (rv<0) { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "here (%d)", rv); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("Network error while sending request")); GWEN_HttpSession_Fini(sess); GWEN_HttpSession_free(sess); return rv; } /* wait for response */ GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Info, I18N("Waiting for response...")); rbuf=GWEN_Buffer_new(0, 1024, 0, 1); rv=GWEN_HttpSession_RecvPacket(sess, rbuf); if (rv<0) { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "Error receiving packet (%d)", rv); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("Network error while waiting for response")); GWEN_Buffer_free(rbuf); GWEN_HttpSession_Fini(sess); GWEN_HttpSession_free(sess); return rv; } else if (!(rv>=200 && rv<=299)) { /* not a HTTP: ok code */ DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(rbuf); GWEN_HttpSession_Fini(sess); GWEN_HttpSession_free(sess); return rv; } /* disconnect (ignore result) */ GWEN_HttpSession_Fini(sess); GWEN_HttpSession_free(sess); /* found a response, transform it */ *pRbuf=rbuf; _probablyWriteToLogFile(sEnvVar, "Received", (const uint8_t *) GWEN_Buffer_GetStart(rbuf), GWEN_Buffer_GetUsedBytes(rbuf)); return 0; } int _createConnection(AB_PROVIDER *pro, AB_USER *u, GWEN_HTTP_SESSION **pSess) { int rv; GWEN_HTTP_SESSION *sess; const char *addr; const char *s; /* take bank addr from user */ addr=AO_User_GetServerAddr(u); if (!(addr && *addr)) { DBG_ERROR(AQOFXCONNECT_LOGDOMAIN, "User has no valid address settings"); return GWEN_ERROR_INVALID; } sess=AB_HttpSession_new(pro, u, addr, "https", 443); /* setup session */ GWEN_HttpSession_AddFlags(sess, GWEN_HTTP_SESSION_FLAGS_NO_CACHE); GWEN_HttpSession_SetHttpContentType(sess, "application/x-ofx"); GWEN_HttpSession_SetHttpVMajor(sess, AO_User_GetHttpVMajor(u)); GWEN_HttpSession_SetHttpVMinor(sess, AO_User_GetHttpVMinor(u)); s=AO_User_GetHttpUserAgent(u); GWEN_HttpSession_SetHttpUserAgent(sess, (s && *s)?s:"AqBanking"); /* init session */ rv=GWEN_HttpSession_Init(sess); if (rv<0) { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "here (%d)", rv); GWEN_HttpSession_free(sess); return rv; } *pSess=sess; return 0; } void _probablyWriteToLogFile(const char *sEnvVar, const char *sCaption, const uint8_t *p, uint32_t len) { if (sEnvVar) { FILE *f; if (strcasecmp(sEnvVar, "1")==0) sEnvVar="/tmp/ofx.log"; DBG_ERROR(AQOFXCONNECT_LOGDOMAIN, "Saving OFX log to \"%s\" ...", sEnvVar); GWEN_Gui_ProgressLog2(0, GWEN_LoggerLevel_Warning, I18N("Saving communication log to %s"), sEnvVar); f=fopen(sEnvVar, "a+"); if (!f) { DBG_ERROR(AQOFXCONNECT_LOGDOMAIN, "fopen: %s", strerror(errno)); } else { fprintf(f, "\n\n%s:\n", sCaption); fprintf(f, "-------------------------------------\n"); if (fwrite(p, len, 1, f)!=1) { DBG_ERROR(AQOFXCONNECT_LOGDOMAIN, "fwrite: %s", strerror(errno)); } if (fclose(f)) { DBG_ERROR(AQOFXCONNECT_LOGDOMAIN, "fclose: %s", strerror(errno)); } } } } aqbanking-6.6.1/src/libs/plugins/backends/aqofxconnect/common/n_statement.h0000664000175000017500000000152014043610745024031 00000000000000/*************************************************************************** begin : Mon Jan 13 2020 copyright : (C) 2020 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AO_N_STATEMENT_H #define AO_N_STATEMENT_H /* plugin headers */ #include /* aqbanking headers */ #include #include #include /* gwenhywfar headers */ #include GWEN_XMLNODE *AO_Provider_MkStatementRqNode(AB_USER *u, AB_ACCOUNT *a, AB_TRANSACTION *j); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqofxconnect/common/io_network.h0000664000175000017500000000142414043610745023673 00000000000000/*************************************************************************** begin : Thu Jan 16 2020 copyright : (C) 2020 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AO_IO_NETWORK_H #define AO_IO_NETWORK_H /* plugin headers */ #include /* aqbanking headers */ #include /* gwenhywfar headers */ #include int AO_Provider_SendAndReceive(AB_PROVIDER *pro, AB_USER *u, const uint8_t *p, unsigned int plen, GWEN_BUFFER **pRbuf); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqofxconnect/common/n_acctinfo.c0000664000175000017500000000275414043610745023620 00000000000000/*************************************************************************** begin : Mon Jan 13 2020 copyright : (C) 2020 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif /* plugin headers */ #include "n_acctinfo.h" #include "n_utils.h" #include "aqofxconnect/user.h" /* * * 19691231 * */ GWEN_XMLNODE *AO_Provider_MkAcctInfoRqNode(AB_USER *u) { GWEN_XMLNODE *xmlMsg; GWEN_XMLNODE *xmlTrnRq; GWEN_XMLNODE *xmlRq; xmlMsg=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "SIGNUPMSGSRQV1"); xmlTrnRq=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "ACCTINFOTRNRQ"); GWEN_XMLNode_AddChild(xmlMsg, xmlTrnRq); if (1) { char *uuid; uuid=AO_Provider_Util_GenerateUuid(); if (uuid) { GWEN_XMLNode_SetCharValue(xmlTrnRq, "TRNUID", uuid); free(uuid); } else { DBG_ERROR(AQOFXCONNECT_LOGDOMAIN, "No uuid generated, falling back to current time"); AO_Provider_Util_SetCurrentTimeValue(xmlTrnRq, AO_User_GetFlags(u), "TRNUID"); } } xmlRq=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "ACCTINFORQ"); GWEN_XMLNode_AddChild(xmlTrnRq, xmlRq); GWEN_XMLNode_SetCharValue(xmlRq, "DTACCTUP", "19900101"); return xmlMsg; } aqbanking-6.6.1/src/libs/plugins/backends/aqofxconnect/common/n_utils.h0000664000175000017500000000212414043610745023166 00000000000000/*************************************************************************** begin : Mon Jan 13 2020 copyright : (C) 2020 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AO_N_UTILS_H #define AO_N_UTILS_H #include /* gwenhywfar headers */ #include #include #include void AO_Provider_Util_SetDateValue(GWEN_XMLNODE *xmlNode, const GWEN_DATE *da, uint32_t userFlags, const char *varName); void AO_Provider_Util_SetTimeValue(GWEN_XMLNODE *xmlNode, const GWEN_TIME *ti, uint32_t userFlags, const char *varName); void AO_Provider_Util_SetCurrentTimeValue(GWEN_XMLNODE *xmlNode, uint32_t userFlags, const char *varName); void AO_Provider_Util_ListAccounts(AB_IMEXPORTER_CONTEXT *ctx); char *AO_Provider_Util_GenerateUuid(void); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqofxconnect/common/n_signon.c0000664000175000017500000000735714546575650023350 00000000000000/*************************************************************************** begin : Mon Jan 13 2020 copyright : (C) 2020 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "n_signon.h" #include "n_utils.h" #include "aqofxconnect/user.h" #include "aqbanking/i18n_l.h" #include /* * * * YYYYMMDDhhmmss.000 * user * secret * ENG * * org * 1234 * * MyApp * 0500 * * */ static int _getAndStoreCredentials(GWEN_XMLNODE *xmlSignonRq, const char *sUserId); GWEN_XMLNODE *AO_Provider_MkSignOnNode(AB_USER *u) { GWEN_XMLNODE *xmlSignonMsg; GWEN_XMLNODE *xmlSignonRq; const char *s; int rv; xmlSignonMsg=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "SIGNONMSGSRQV1"); xmlSignonRq=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "SONRQ"); GWEN_XMLNode_AddChild(xmlSignonMsg, xmlSignonRq); AO_Provider_Util_SetCurrentTimeValue(xmlSignonRq, AO_User_GetFlags(u), "DTCLIENT"); s=AB_User_GetUserId(u); if (!(s && *s)) { DBG_ERROR(AQOFXCONNECT_LOGDOMAIN, "No user id"); GWEN_XMLNode_free(xmlSignonMsg); return NULL; } rv=_getAndStoreCredentials(xmlSignonRq, s); if (rv<0) { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "here (%d)", rv); GWEN_XMLNode_free(xmlSignonMsg); return NULL; } GWEN_XMLNode_SetCharValue(xmlSignonRq, "LANGUAGE", "ENG"); if (!(AO_User_GetFlags(u) & AO_USER_FLAGS_EMPTY_FID) && AO_User_GetFid(u)) { GWEN_XMLNODE *xmlFi; xmlFi=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "FI"); GWEN_XMLNode_AddChild(xmlSignonRq, xmlFi); s=AO_User_GetOrg(u); if (s) GWEN_XMLNode_SetCharValue(xmlFi, "ORG", s); s=AO_User_GetFid(u); if (s) GWEN_XMLNode_SetCharValue(xmlFi, "FID", s); } s=AO_User_GetAppId(u); GWEN_XMLNode_SetCharValue(xmlSignonRq, "APPID", s?s:"QWIN"); s=AO_User_GetAppVer(u); GWEN_XMLNode_SetCharValue(xmlSignonRq, "APPVER", s?s:"1200"); s=AO_User_GetClientUid(u); if (s) GWEN_XMLNode_SetCharValue(xmlSignonRq, "CLIENTUID", s); return xmlSignonMsg; } int _getAndStoreCredentials(GWEN_XMLNODE *xmlSignonRq, const char *sUserId) { char userpass[64]; GWEN_BUFFER *nbuf; char msg[]=I18S("Please enter the password for user %s" "" "Please enter the password for user %s" ""); char msgbuf[512]; nbuf=GWEN_Buffer_new(0, 64, 0, 1); GWEN_Buffer_AppendString(nbuf, "OFX::userpass::"); GWEN_Buffer_AppendString(nbuf, sUserId); snprintf(msgbuf, sizeof(msgbuf), I18N(msg), sUserId, sUserId); GWEN_XMLNode_SetCharValue(xmlSignonRq, "USERID", sUserId); /* get password */ userpass[0]=0; while (strlen(userpass)<4) { int rv; rv=GWEN_Gui_GetPassword(0, GWEN_Buffer_GetStart(nbuf), I18N("Enter Password"), msgbuf, userpass, 4, sizeof(userpass), GWEN_Gui_PasswordMethod_Text, NULL, 0); if (rv<0) { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "here (%d)", rv); memset(userpass, 0, sizeof(userpass)); GWEN_Buffer_free(nbuf); return rv; } } /* while */ GWEN_XMLNode_SetCharValue(xmlSignonRq, "USERPASS", userpass); memset(userpass, 0, sizeof(userpass)); GWEN_Buffer_free(nbuf); return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqofxconnect/libofxhome/0000755000175000017500000000000015037736163022272 500000000000000aqbanking-6.6.1/src/libs/plugins/backends/aqofxconnect/libofxhome/oh_institute_spec.c0000664000175000017500000001207415037736055026114 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "oh_institute_spec.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "./oh_institute_spec_p.h" #include #include /* code headers */ /* macro functions */ GWEN_LIST_FUNCTIONS(OH_INSTITUTE_SPEC, OH_InstituteSpec) GWEN_LIST2_FUNCTIONS(OH_INSTITUTE_SPEC, OH_InstituteSpec) OH_INSTITUTE_SPEC *OH_InstituteSpec_new(void) { OH_INSTITUTE_SPEC *p_struct; GWEN_NEW_OBJECT(OH_INSTITUTE_SPEC, p_struct) p_struct->_refCount=1; GWEN_LIST_INIT(OH_INSTITUTE_SPEC, p_struct) /* members */ p_struct->id=0; p_struct->name=NULL; /* virtual functions */ return p_struct; } void OH_InstituteSpec_free(OH_INSTITUTE_SPEC *p_struct) { if (p_struct) { assert(p_struct->_refCount); if (p_struct->_refCount==1) { GWEN_LIST_FINI(OH_INSTITUTE_SPEC, p_struct) /* members */ free(p_struct->name); p_struct->name=NULL; p_struct->_refCount=0; GWEN_FREE_OBJECT(p_struct); } else p_struct->_refCount--; } } void OH_InstituteSpec_Attach(OH_INSTITUTE_SPEC *p_struct) { assert(p_struct); assert(p_struct->_refCount); p_struct->_refCount++; } OH_INSTITUTE_SPEC *OH_InstituteSpec_dup(const OH_INSTITUTE_SPEC *p_src) { OH_INSTITUTE_SPEC *p_struct; assert(p_src); p_struct=OH_InstituteSpec_new(); /* member "id" */ p_struct->id=p_src->id; /* member "name" */ if (p_struct->name) { free(p_struct->name); p_struct->name=NULL; p_struct->name=NULL; } if (p_src->name) { p_struct->name=strdup(p_src->name); } return p_struct; } OH_INSTITUTE_SPEC *OH_InstituteSpec_copy(OH_INSTITUTE_SPEC *p_struct, const OH_INSTITUTE_SPEC *p_src) { assert(p_struct); assert(p_src); /* member "id" */ p_struct->id=p_src->id; /* member "name" */ if (p_struct->name) { free(p_struct->name); p_struct->name=NULL; p_struct->name=NULL; } if (p_src->name) { p_struct->name=strdup(p_src->name); } return p_struct; } int OH_InstituteSpec_GetId(const OH_INSTITUTE_SPEC *p_struct){ assert(p_struct); return p_struct->id; } const char *OH_InstituteSpec_GetName(const OH_INSTITUTE_SPEC *p_struct){ assert(p_struct); return p_struct->name; } void OH_InstituteSpec_SetId(OH_INSTITUTE_SPEC *p_struct, int p_src){ assert(p_struct); p_struct->id=p_src; } void OH_InstituteSpec_SetName(OH_INSTITUTE_SPEC *p_struct, const char *p_src){ assert(p_struct); if (p_struct->name) { free(p_struct->name); p_struct->name=NULL; p_struct->name=NULL; } if (p_src) { p_struct->name=strdup(p_src); } else { p_struct->name=NULL; } } OH_INSTITUTE_SPEC_LIST *OH_InstituteSpec_List_dup(const OH_INSTITUTE_SPEC_LIST *p_src) { OH_INSTITUTE_SPEC_LIST *p_dest; OH_INSTITUTE_SPEC *p_elem; assert(p_src); p_dest=OH_InstituteSpec_List_new(); p_elem=OH_InstituteSpec_List_First(p_src); while(p_elem) { OH_INSTITUTE_SPEC *p_cpy; p_cpy=OH_InstituteSpec_dup(p_elem); OH_InstituteSpec_List_Add(p_cpy, p_dest); p_elem=OH_InstituteSpec_List_Next(p_elem); } return p_dest; } void OH_InstituteSpec_ReadDb(OH_INSTITUTE_SPEC *p_struct, GWEN_DB_NODE *p_db){ assert(p_struct); /* member "id" */ p_struct->id=GWEN_DB_GetIntValue(p_db, "id", 0, 0); /* member "name" */ if (p_struct->name) { free(p_struct->name); p_struct->name=NULL; p_struct->name=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "name", 0, NULL); if (s) p_struct->name=strdup(s); } } int OH_InstituteSpec_WriteDb(const OH_INSTITUTE_SPEC *p_struct, GWEN_DB_NODE *p_db) { int p_rv; assert(p_struct); /* member "id" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "id", p_struct->id); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "name" */ if (p_struct->name) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "name", p_struct->name); else { GWEN_DB_DeleteVar(p_db, "name"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } return 0; } OH_INSTITUTE_SPEC *OH_InstituteSpec_fromDb(GWEN_DB_NODE *p_db) { OH_INSTITUTE_SPEC *p_struct; p_struct=OH_InstituteSpec_new(); OH_InstituteSpec_ReadDb(p_struct, p_db); return p_struct; } int OH_InstituteSpec_toDb(const OH_INSTITUTE_SPEC *p_struct, GWEN_DB_NODE *p_db) { return OH_InstituteSpec_WriteDb(p_struct, p_db); } OH_INSTITUTE_SPEC *OH_InstituteSpec_List_GetById(const OH_INSTITUTE_SPEC_LIST *p_list, int p_cmp){ OH_INSTITUTE_SPEC *p_struct; assert(p_list); p_struct = OH_InstituteSpec_List_First(p_list); while(p_struct) { int p_rv; if (p_struct->id==p_cmp) p_rv=0; else if (p_cmpid) p_rv=-1; else p_rv=1; if (p_rv == 0) return p_struct; p_struct = OH_InstituteSpec_List_Next(p_struct); } return NULL; } /* code headers */ #include "oh_institute_spec_fns.c" aqbanking-6.6.1/src/libs/plugins/backends/aqofxconnect/libofxhome/ofxhome.c0000664000175000017500000003513714546575650024044 00000000000000/*************************************************************************** begin : Tue Aug 17 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "ofxhome_p.h" #include #include #include #include #include #include #define OFX_CACHE_TIME_HR 2 OFXHOME *OfxHome_new(const char *dataFolder) { OFXHOME *ofh; GWEN_NEW_OBJECT(OFXHOME, ofh); if (dataFolder) ofh->dataFolder=strdup(dataFolder); ofh->dataList=OH_InstituteData_List_new(); return ofh; } void OfxHome_free(OFXHOME *ofh) { if (ofh) { free(ofh->dataFolder); OH_InstituteSpec_List_free(ofh->specList); OH_InstituteData_List_free(ofh->dataList); GWEN_FREE_OBJECT(ofh); } } int OfxHome_SetupHttpSession(OFXHOME *ofh, GWEN_HTTP_SESSION *sess) { GWEN_HttpSession_SetHttpVMajor(sess, 1); GWEN_HttpSession_SetHttpVMinor(sess, 1); GWEN_HttpSession_SetHttpUserAgent(sess, "AqBanking/" AQBANKING_VERSION_STRING); return 0; } int OfxHome_DownloadSpecs(OFXHOME *ofh, OH_INSTITUTE_SPEC_LIST *sl) { GWEN_HTTP_SESSION *sess; int rv; GWEN_BUFFER *xbuf; GWEN_XMLNODE *nroot; GWEN_XMLNODE *n; /* prepare session */ sess=GWEN_HttpSession_new("https://www.ofxhome.com/api.php?all=yes", "https", 443); rv=OfxHome_SetupHttpSession(ofh, sess); if (rv<0) { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "here (%d)", rv); GWEN_HttpSession_free(sess); return rv; } rv=GWEN_HttpSession_Init(sess); if (rv<0) { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "here (%d)", rv); GWEN_HttpSession_free(sess); return rv; } /* send request (no body) */ rv=GWEN_HttpSession_SendPacket(sess, "GET", NULL, 0); if (rv<0) { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "here (%d)", rv); GWEN_HttpSession_free(sess); return rv; } /* get response */ xbuf=GWEN_Buffer_new(0, 1024, 0, 1); rv=GWEN_HttpSession_RecvPacket(sess, xbuf); if (rv<0 || rv<200 || rv>=300) { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(xbuf); GWEN_HttpSession_free(sess); return rv; } /* fini */ GWEN_HttpSession_Fini(sess); GWEN_HttpSession_free(sess); /* parse list */ nroot=GWEN_XMLNode_fromString(GWEN_Buffer_GetStart(xbuf), GWEN_Buffer_GetUsedBytes(xbuf), GWEN_XML_FLAGS_DEFAULT | GWEN_XML_FLAGS_HANDLE_HEADERS | GWEN_XML_FLAGS_TOLERANT_ENDTAGS | GWEN_XML_FLAGS_HANDLE_NAMESPACES); if (nroot==NULL) { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_Dump(xbuf, 2); GWEN_Buffer_free(xbuf); return GWEN_ERROR_BAD_DATA; } GWEN_Buffer_free(xbuf); n=GWEN_XMLNode_FindFirstTag(nroot, "institutionlist", NULL, NULL); if (n==NULL) { DBG_ERROR(AQOFXCONNECT_LOGDOMAIN, "XML tree does not contain an \"institutionlist\" element"); GWEN_XMLNode_Dump(nroot, 2); GWEN_XMLNode_free(nroot); return GWEN_ERROR_NO_DATA; } n=GWEN_XMLNode_FindFirstTag(n, "institutionid", NULL, NULL); if (n==NULL) { DBG_ERROR(AQOFXCONNECT_LOGDOMAIN, "XML tree does not contain an \"institutionid\" element"); GWEN_XMLNode_Dump(nroot, 2); GWEN_XMLNode_free(nroot); return GWEN_ERROR_NO_DATA; } else { while (n) { OH_INSTITUTE_SPEC *os; os=OH_InstituteSpec_fromXml(n); if (os==NULL) { DBG_WARN(AQOFXCONNECT_LOGDOMAIN, "element does not contain a valid institute spec"); GWEN_XMLNode_Dump(n, 2); } else OH_InstituteSpec_List_Add(os, sl); /* previously we needed to use "FindFirstTag" because of the malformed response */ n=GWEN_XMLNode_FindNextTag(n, "institutionid", NULL, NULL); } } GWEN_XMLNode_free(nroot); return 0; } int OfxHome_SaveSpecs(OFXHOME *ofh, const OH_INSTITUTE_SPEC_LIST *sl) { GWEN_DB_NODE *db; OH_INSTITUTE_SPEC *os; GWEN_BUFFER *nbuf; int rv; /* store institutes in db */ db=GWEN_DB_Group_new("institutes"); os=OH_InstituteSpec_List_First(sl); while (os) { GWEN_DB_NODE *dbT; int rv; dbT=GWEN_DB_Group_new("institute"); rv=OH_InstituteSpec_toDb(os, dbT); if (rv<0) { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "here (%d)", rv); GWEN_DB_Group_free(dbT); GWEN_DB_Group_free(db); return rv; } GWEN_DB_AddGroup(db, dbT); os=OH_InstituteSpec_List_Next(os); } /* create filename */ nbuf=GWEN_Buffer_new(0, 256, 0, 1); if (ofh->dataFolder) { GWEN_Buffer_AppendString(nbuf, ofh->dataFolder); GWEN_Buffer_AppendString(nbuf, GWEN_DIR_SEPARATOR_S); } GWEN_Buffer_AppendString(nbuf, "institutes.conf"); /* write file */ rv=GWEN_DB_WriteFile(db, GWEN_Buffer_GetStart(nbuf), GWEN_DB_FLAGS_DEFAULT | GWEN_DB_FLAGS_LOCKFILE); if (rv<0) { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(nbuf); GWEN_DB_Group_free(db); return rv; } /* cleanup, done */ GWEN_Buffer_free(nbuf); GWEN_DB_Group_free(db); return 0; } int OfxHome_LoadSpecs(OFXHOME *ofh, OH_INSTITUTE_SPEC_LIST *sl) { GWEN_DB_NODE *db; GWEN_DB_NODE *dbT; GWEN_BUFFER *nbuf; int rv; /* create filename */ nbuf=GWEN_Buffer_new(0, 256, 0, 1); if (ofh->dataFolder) { GWEN_Buffer_AppendString(nbuf, ofh->dataFolder); GWEN_Buffer_AppendString(nbuf, GWEN_DIR_SEPARATOR_S); } GWEN_Buffer_AppendString(nbuf, "institutes.conf"); /* read file */ db=GWEN_DB_Group_new("institutes"); rv=GWEN_DB_ReadFile(db, GWEN_Buffer_GetStart(nbuf), GWEN_DB_FLAGS_DEFAULT | GWEN_DB_FLAGS_LOCKFILE | GWEN_PATH_FLAGS_CREATE_GROUP); if (rv<0) { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(nbuf); GWEN_DB_Group_free(db); return rv; } GWEN_Buffer_free(nbuf); dbT=GWEN_DB_GetFirstGroup(db); while (dbT) { OH_INSTITUTE_SPEC *os; os=OH_InstituteSpec_fromDb(dbT); if (os) OH_InstituteSpec_List_Add(os, sl); else { DBG_WARN(AQOFXCONNECT_LOGDOMAIN, "Group does not contain a valid institute spec"); GWEN_DB_Dump(dbT, 2); } dbT=GWEN_DB_GetNextGroup(dbT); } /* cleanup, done */ GWEN_DB_Group_free(db); return 0; } int OfxHome_CheckSpecsCache(OFXHOME *ofh, int hours) { GWEN_BUFFER *nbuf; int rv; struct stat st; /* create filename */ nbuf=GWEN_Buffer_new(0, 256, 0, 1); if (ofh->dataFolder) { GWEN_Buffer_AppendString(nbuf, ofh->dataFolder); GWEN_Buffer_AppendString(nbuf, GWEN_DIR_SEPARATOR_S); } GWEN_Buffer_AppendString(nbuf, "institutes.conf"); rv=stat(GWEN_Buffer_GetStart(nbuf), &st); GWEN_Buffer_free(nbuf); if (rv) { /* not in cache */ return -1; } else { time_t t0; double diff; t0=time(NULL); diff=difftime(t0, st.st_mtime)/(60.0*60.0); if (diffspecList==NULL) { OH_INSTITUTE_SPEC_LIST *sl; int rv; sl=OH_InstituteSpec_List_new(); rv=OfxHome_CheckSpecsCache(ofh, OFX_CACHE_TIME_HR); if (rv<1) { /* no valid data in cache, download */ rv=OfxHome_DownloadSpecs(ofh, sl); if (rv<0) { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "here (%d)", rv); OH_InstituteSpec_List_free(sl); return NULL; } /* save data */ rv=OfxHome_SaveSpecs(ofh, sl); if (rv<0) { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "here (%d)", rv); OH_InstituteSpec_List_free(sl); return NULL; } } else { /* valid data in cache, load it */ rv=OfxHome_LoadSpecs(ofh, sl); if (rv<0) { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "here (%d)", rv); OH_InstituteSpec_List_free(sl); return NULL; } } ofh->specList=sl; } return ofh->specList; } int OfxHome_DownloadData(OFXHOME *ofh, int fid, OH_INSTITUTE_DATA **pData) { GWEN_HTTP_SESSION *sess; int rv; GWEN_BUFFER *xbuf; GWEN_XMLNODE *nroot; GWEN_XMLNODE *n; char urlbuf[256]; OH_INSTITUTE_DATA *od; /* prepare session */ snprintf(urlbuf, sizeof(urlbuf)-1, "https://www.ofxhome.com/api.php?lookup=%d", fid); urlbuf[sizeof(urlbuf)-1]=0; sess=GWEN_HttpSession_new(urlbuf, "https", 443); rv=OfxHome_SetupHttpSession(ofh, sess); if (rv<0) { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "here (%d)", rv); GWEN_HttpSession_free(sess); return rv; } rv=GWEN_HttpSession_Init(sess); if (rv<0) { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "here (%d)", rv); GWEN_HttpSession_free(sess); return rv; } /* send request (no body) */ rv=GWEN_HttpSession_SendPacket(sess, "GET", NULL, 0); if (rv<0) { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "here (%d)", rv); GWEN_HttpSession_free(sess); return rv; } /* get response */ xbuf=GWEN_Buffer_new(0, 1024, 0, 1); rv=GWEN_HttpSession_RecvPacket(sess, xbuf); if (rv<0 || rv<200 || rv>=300) { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(xbuf); GWEN_HttpSession_free(sess); return rv; } /* fini */ GWEN_HttpSession_Fini(sess); GWEN_HttpSession_free(sess); /* parse list */ nroot=GWEN_XMLNode_fromString(GWEN_Buffer_GetStart(xbuf), GWEN_Buffer_GetUsedBytes(xbuf), GWEN_XML_FLAGS_DEFAULT | GWEN_XML_FLAGS_HANDLE_HEADERS | GWEN_XML_FLAGS_HANDLE_NAMESPACES); if (nroot==NULL) { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_Dump(xbuf, 2); GWEN_Buffer_free(xbuf); return rv; } GWEN_Buffer_free(xbuf); n=GWEN_XMLNode_FindFirstTag(nroot, "institution", NULL, NULL); if (n==NULL) { DBG_ERROR(AQOFXCONNECT_LOGDOMAIN, "XML tree does not contain an \"institution\" element"); GWEN_XMLNode_Dump(n, 2); GWEN_XMLNode_free(nroot); return GWEN_ERROR_BAD_DATA; } od=OH_InstituteData_fromXml(n); if (od==NULL) { DBG_WARN(AQOFXCONNECT_LOGDOMAIN, "element does not contain valid institute data"); GWEN_XMLNode_Dump(n, 2); GWEN_XMLNode_free(nroot); return GWEN_ERROR_BAD_DATA; } else *pData=od; GWEN_XMLNode_free(nroot); return 0; } int OfxHome_SaveData(OFXHOME *ofh, const OH_INSTITUTE_DATA *od) { GWEN_DB_NODE *db; GWEN_BUFFER *nbuf; int rv; char numbuf[32]; /* store institutes in db */ db=GWEN_DB_Group_new("institute"); rv=OH_InstituteData_toDb(od, db); if (rv<0) { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "here (%d)", rv); GWEN_DB_Group_free(db); return rv; } /* create filename */ nbuf=GWEN_Buffer_new(0, 256, 0, 1); if (ofh->dataFolder) { GWEN_Buffer_AppendString(nbuf, ofh->dataFolder); GWEN_Buffer_AppendString(nbuf, GWEN_DIR_SEPARATOR_S); } snprintf(numbuf, sizeof(numbuf)-1, "%d", OH_InstituteData_GetId(od)); numbuf[sizeof(numbuf)-1]=0; GWEN_Buffer_AppendString(nbuf, numbuf); GWEN_Buffer_AppendString(nbuf, ".conf"); /* write file */ rv=GWEN_DB_WriteFile(db, GWEN_Buffer_GetStart(nbuf), GWEN_DB_FLAGS_DEFAULT | GWEN_DB_FLAGS_LOCKFILE); if (rv<0) { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(nbuf); GWEN_DB_Group_free(db); return rv; } /* cleanup, done */ GWEN_Buffer_free(nbuf); GWEN_DB_Group_free(db); return 0; } int OfxHome_LoadData(OFXHOME *ofh, int fid, OH_INSTITUTE_DATA **pData) { GWEN_DB_NODE *db; GWEN_BUFFER *nbuf; int rv; char numbuf[32]; OH_INSTITUTE_DATA *od; /* create filename */ nbuf=GWEN_Buffer_new(0, 256, 0, 1); if (ofh->dataFolder) { GWEN_Buffer_AppendString(nbuf, ofh->dataFolder); GWEN_Buffer_AppendString(nbuf, GWEN_DIR_SEPARATOR_S); } snprintf(numbuf, sizeof(numbuf)-1, "%d", fid); numbuf[sizeof(numbuf)-1]=0; GWEN_Buffer_AppendString(nbuf, numbuf); GWEN_Buffer_AppendString(nbuf, ".conf"); /* read file */ db=GWEN_DB_Group_new("institute"); rv=GWEN_DB_ReadFile(db, GWEN_Buffer_GetStart(nbuf), GWEN_DB_FLAGS_DEFAULT | GWEN_DB_FLAGS_LOCKFILE | GWEN_PATH_FLAGS_CREATE_GROUP); if (rv<0) { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(nbuf); GWEN_DB_Group_free(db); return rv; } GWEN_Buffer_free(nbuf); /* store institutes in db */ od=OH_InstituteData_fromDb(db); if (rv<0) { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "here (%d)", rv); GWEN_DB_Group_free(db); return rv; } /* cleanup, done */ GWEN_DB_Group_free(db); *pData=od; return 0; } int OfxHome_CheckDataCache(OFXHOME *ofh, int fid, int hours) { GWEN_BUFFER *nbuf; int rv; char numbuf[32]; struct stat st; /* create filename */ nbuf=GWEN_Buffer_new(0, 256, 0, 1); if (ofh->dataFolder) { GWEN_Buffer_AppendString(nbuf, ofh->dataFolder); GWEN_Buffer_AppendString(nbuf, GWEN_DIR_SEPARATOR_S); } snprintf(numbuf, sizeof(numbuf)-1, "%d", fid); numbuf[sizeof(numbuf)-1]=0; GWEN_Buffer_AppendString(nbuf, numbuf); GWEN_Buffer_AppendString(nbuf, ".conf"); rv=stat(GWEN_Buffer_GetStart(nbuf), &st); GWEN_Buffer_free(nbuf); if (rv) { /* not in cache */ return -1; } else { time_t t0; double diff; t0=time(NULL); diff=difftime(t0, st.st_mtime)/(60.0*60.0); if (diffdataList, fid); if (d==NULL) { int rv; rv=OfxHome_CheckDataCache(ofh, fid, OFX_CACHE_TIME_HR); if (rv<1) { /* no valid data in cache, download */ rv=OfxHome_DownloadData(ofh, fid, &d); if (rv<0) { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "here (%d)", rv); return NULL; } /* save data */ rv=OfxHome_SaveData(ofh, d); if (rv<0) { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "here (%d)", rv); OH_InstituteData_free(d); return NULL; } } else { /* valid data in cache, load it */ rv=OfxHome_LoadData(ofh, fid, &d); if (rv<0) { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "here (%d)", rv); return NULL; } } OH_InstituteData_List_Add(d, ofh->dataList); } return d; } aqbanking-6.6.1/src/libs/plugins/backends/aqofxconnect/libofxhome/Makefile.in0000644000175000017500000006717715037736026024277 00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/libs/plugins/backends/aqofxconnect/libofxhome ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/distri.m4 $(top_srcdir)/m4/gwenhywfar.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/os.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libofxhome_la_LIBADD = am__objects_1 = oh_institute_data.lo oh_institute_spec.lo am_libofxhome_la_OBJECTS = $(am__objects_1) ofxhome.lo dlg_getinst.lo libofxhome_la_OBJECTS = $(am_libofxhome_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/dlg_getinst.Plo \ ./$(DEPDIR)/ofxhome.Plo ./$(DEPDIR)/oh_institute_data.Plo \ ./$(DEPDIR)/oh_institute_spec.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libofxhome_la_SOURCES) DIST_SOURCES = $(libofxhome_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(dlgdatadir)" DATA = $(dlgdata_DATA) HEADERS = $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADD_ACLOCAL_FLAGS = @ADD_ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AQBANKING_CLI_VERSION_STRING = @AQBANKING_CLI_VERSION_STRING@ AQBANKING_FINTS_VERSION_STRING = @AQBANKING_FINTS_VERSION_STRING@ AQBANKING_SO_AGE = @AQBANKING_SO_AGE@ AQBANKING_SO_CURRENT = @AQBANKING_SO_CURRENT@ AQBANKING_SO_EFFECTIVE = @AQBANKING_SO_EFFECTIVE@ AQBANKING_SO_REVISION = @AQBANKING_SO_REVISION@ AQBANKING_VERSION_BUILD = @AQBANKING_VERSION_BUILD@ AQBANKING_VERSION_FULL_STRING = @AQBANKING_VERSION_FULL_STRING@ AQBANKING_VERSION_MAJOR = @AQBANKING_VERSION_MAJOR@ AQBANKING_VERSION_MINOR = @AQBANKING_VERSION_MINOR@ AQBANKING_VERSION_PATCHLEVEL = @AQBANKING_VERSION_PATCHLEVEL@ AQBANKING_VERSION_RELEASE_STRING = @AQBANKING_VERSION_RELEASE_STRING@ AQBANKING_VERSION_STRING = @AQBANKING_VERSION_STRING@ AQBANKING_VERSION_TAG = @AQBANKING_VERSION_TAG@ AQEBICS_CFLAGS = @AQEBICS_CFLAGS@ AQEBICS_LIBS = @AQEBICS_LIBS@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATETIME = @DATETIME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_EXCLUDE_PATTERNS = @DOXYGEN_EXCLUDE_PATTERNS@ DOXYGEN_FILE_PATTERNS = @DOXYGEN_FILE_PATTERNS@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENGUI_GTK2_CFLAGS = @GWENGUI_GTK2_CFLAGS@ GWENGUI_GTK2_LIBS = @GWENGUI_GTK2_LIBS@ GWENHYWFAR_MINIMUM_VERSION = @GWENHYWFAR_MINIMUM_VERSION@ HAVE_GWENGUI_GTK2 = @HAVE_GWENGUI_GTK2@ HAVE_I18N = @HAVE_I18N@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIBXSLT_CFLAGS = @LIBXSLT_CFLAGS@ LIBXSLT_LIBS = @LIBXSLT_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_SUPPORTS_QT = @MSGFMT_SUPPORTS_QT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ TUTORIALS = @TUTORIALS@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XMLMERGE = @XMLMERGE@ XMLSEC_CFLAGS = @XMLSEC_CFLAGS@ XMLSEC_LIBS = @XMLSEC_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ aqbanking_backends = @aqbanking_backends@ aqbanking_cfg_searchdir = @aqbanking_cfg_searchdir@ aqbanking_data_searchdir = @aqbanking_data_searchdir@ aqbanking_headerdir = @aqbanking_headerdir@ aqbanking_headerdir_am = @aqbanking_headerdir_am@ aqbanking_includes = @aqbanking_includes@ aqbanking_internal_libs = @aqbanking_internal_libs@ aqbanking_ldflags = @aqbanking_ldflags@ aqbanking_libs = @aqbanking_libs@ aqbanking_locale_searchdir = @aqbanking_locale_searchdir@ aqbanking_modules = @aqbanking_modules@ aqbanking_pkgdatadir = @aqbanking_pkgdatadir@ aqbanking_plugin_searchdir = @aqbanking_plugin_searchdir@ aqbanking_plugindir = @aqbanking_plugindir@ aqbanking_plugins_backends_dirs = @aqbanking_plugins_backends_dirs@ aqbanking_plugins_backends_libs = @aqbanking_plugins_backends_libs@ aqbanking_plugins_bankinfo_dirs = @aqbanking_plugins_bankinfo_dirs@ aqbanking_plugins_bankinfo_libs = @aqbanking_plugins_bankinfo_libs@ aqbanking_plugins_imexporters_dirs = @aqbanking_plugins_imexporters_dirs@ aqbanking_plugins_imexporters_libs = @aqbanking_plugins_imexporters_libs@ aqbanking_plugins_parsers_dirs = @aqbanking_plugins_parsers_dirs@ aqbanking_symlinkdir = @aqbanking_symlinkdir@ aqbanking_sys_is_windows = @aqbanking_sys_is_windows@ aqbankingpp_modules = @aqbankingpp_modules@ aqebics_datadir = @aqebics_datadir@ aqebics_includes = @aqebics_includes@ aqebics_internal_libs = @aqebics_internal_libs@ aqebics_ldflags = @aqebics_ldflags@ aqebics_libs = @aqebics_libs@ aqfints_datadir = @aqfints_datadir@ aqhbci_datadir = @aqhbci_datadir@ aqhbci_includes = @aqhbci_includes@ aqhbci_internal_libs = @aqhbci_internal_libs@ aqhbci_ldflags = @aqhbci_ldflags@ aqhbci_libs = @aqhbci_libs@ aqofxconnect_includes = @aqofxconnect_includes@ aqofxconnect_internal_libs = @aqofxconnect_internal_libs@ aqofxconnect_libs = @aqofxconnect_libs@ aqpaypal_includes = @aqpaypal_includes@ aqpaypal_internal_libs = @aqpaypal_internal_libs@ aqpaypal_libs = @aqpaypal_libs@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gmp_libs = @gmp_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_dir = @gwenhywfar_dir@ gwenhywfar_has_crypt = @gwenhywfar_has_crypt@ gwenhywfar_headers = @gwenhywfar_headers@ gwenhywfar_includes = @gwenhywfar_includes@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_plugins = @gwenhywfar_plugins@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ typemaker2_exe = @typemaker2_exe@ visibility_cflags = @visibility_cflags@ with_aqebics = @with_aqebics@ with_aqhbci = @with_aqhbci@ AM_CPPFLAGS = -I$(top_srcdir)/src/libs -I$(top_builddir)/src/libs $(gwenhywfar_includes) -I$(srcdir)/../../ -I$(srcdir)/.. AM_CFLAGS = -DBUILDING_AQBANKING @visibility_cflags@ typefiles = \ oh_institute_data.xml \ oh_institute_spec.xml #typedatadir=$(datadir)/aqbanking/aqofxconnect/typemaker2/c #nodist_typedata_DATA=\ # oh_institute_data.tm2 oh_institute_data_list.tm2 oh_institute_data_list2.tm2 \ # oh_institute_spec.tm2 oh_institute_spec_list.tm2 oh_institute_spec_list2.tm2 dlgdatadir = $(aqbanking_pkgdatadir)/backends/aqofxconnect/dialogs dlgdata_DATA = \ dlg_getinst.dlg build_sources = \ oh_institute_data.c \ oh_institute_spec.c build_headers_priv = \ oh_institute_data_p.h \ oh_institute_spec_p.h build_headers_pub = \ oh_institute_data.h \ oh_institute_spec.h build_headers = $(build_headers_priv) $(build_headers_pub) noinst_HEADERS = $(build_headers_priv) $(build_headers_pub) \ ofxhome_p.h \ dlg_getinst_p.h \ oh_institute_data_fns.h \ oh_institute_spec_fns.h \ ofxhome.h \ dlg_getinst.h #iheaderdir=@aqbanking_headerdir_am@/aqofxconnect #iheader_HEADERS= noinst_LTLIBRARIES = libofxhome.la libofxhome_la_SOURCES = $(build_sources) \ ofxhome.c \ dlg_getinst.c EXTRA_DIST = \ oh_institute_data_fns.c \ oh_institute_spec_fns.c \ $(typefiles) $(dlgdata_DATA) $(dlgimage_DATA) $(build_sources) $(build_headers) all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libs/plugins/backends/aqofxconnect/libofxhome/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libs/plugins/backends/aqofxconnect/libofxhome/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libofxhome.la: $(libofxhome_la_OBJECTS) $(libofxhome_la_DEPENDENCIES) $(EXTRA_libofxhome_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libofxhome_la_OBJECTS) $(libofxhome_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dlg_getinst.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ofxhome.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/oh_institute_data.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/oh_institute_spec.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-dlgdataDATA: $(dlgdata_DATA) @$(NORMAL_INSTALL) @list='$(dlgdata_DATA)'; test -n "$(dlgdatadir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(dlgdatadir)'"; \ $(MKDIR_P) "$(DESTDIR)$(dlgdatadir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(dlgdatadir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(dlgdatadir)" || exit $$?; \ done uninstall-dlgdataDATA: @$(NORMAL_UNINSTALL) @list='$(dlgdata_DATA)'; test -n "$(dlgdatadir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(dlgdatadir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(dlgdatadir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/dlg_getinst.Plo -rm -f ./$(DEPDIR)/ofxhome.Plo -rm -f ./$(DEPDIR)/oh_institute_data.Plo -rm -f ./$(DEPDIR)/oh_institute_spec.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dlgdataDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/dlg_getinst.Plo -rm -f ./$(DEPDIR)/ofxhome.Plo -rm -f ./$(DEPDIR)/oh_institute_data.Plo -rm -f ./$(DEPDIR)/oh_institute_spec.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-dlgdataDATA .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-generic clean-libtool clean-noinstLTLIBRARIES \ cscopelist-am ctags ctags-am distclean distclean-compile \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dlgdataDATA install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \ uninstall-dlgdataDATA .PRECIOUS: Makefile built_sources: $(build_sources) sources: for f in $(libofxhome_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for f in $(dlgdata_DATA); do \ echo $(subdir)/$$f >>$(top_srcdir)/dlgsources; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d sources; \ done #%.c: %.xml # $(gwenhywfar_bindir)/typemaker2 -I $(top_srcdir)/src/lib/typemaker2/c -I $(srcdir) --destfolder="$(srcdir)" -D AQOFXCONNECT_API $< # #%.h: %.xml # $(gwenhywfar_bindir)/typemaker2 -I $(top_srcdir)/src/lib/typemaker2/c -I $(srcdir) --destfolder="$(srcdir)" -D AQOFXCONNECT_API $< #SUFFIXES = .xml .c cppcheck: for f in $(libofxhome_la_SOURCES); do \ cppcheck --force $$f ; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done typefiles: $(typefiles) $(typemaker2_exe) -I $(top_srcdir)/src/libs/aqbanking/typemaker2/c -I $(gwenhywfar_dir)/share/gwenhywfar/typemaker2/c -I $(srcdir) --destfolder="$(srcdir)" $(typefiles) typedefs: $(typefiles) $(typemaker2_exe) --defs-only -I $(top_srcdir)/src/libs/aqbanking/typemaker2/c -I $(gwenhywfar_dir)/share/gwenhywfar/typemaker2/c -I $(srcdir) --destfolder="$(srcdir)" $(typefiles) # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: aqbanking-6.6.1/src/libs/plugins/backends/aqofxconnect/libofxhome/dlg_getinst.c0000664000175000017500000003355614546575650024705 00000000000000/*************************************************************************** begin : Wed Aug 18 2010 copyright : (C) 2010 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "dlg_getinst_p.h" #include "aqbanking/i18n_l.h" #include #include #include #include #include #include #include #include #define DIALOG_MINWIDTH 400 #define DIALOG_MINHEIGHT 200 #define LIST_MINCOLWIDTH 50 GWEN_INHERIT(GWEN_DIALOG, OH_GETINST_DIALOG) GWEN_DIALOG *OH_GetInstituteDialog_new(const char *dataFolder, const char *name) { GWEN_DIALOG *dlg; OH_GETINST_DIALOG *xdlg; GWEN_BUFFER *fbuf; int rv; dlg=GWEN_Dialog_new("oh_getinst"); GWEN_NEW_OBJECT(OH_GETINST_DIALOG, xdlg); GWEN_INHERIT_SETDATA(GWEN_DIALOG, OH_GETINST_DIALOG, dlg, xdlg, OH_GetInstituteDialog_FreeData); GWEN_Dialog_SetSignalHandler(dlg, OH_GetInstituteDialog_SignalHandler); /* get path of dialog description file */ fbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_PathManager_FindFile(AB_PM_LIBNAME, AB_PM_DATADIR, "aqbanking/backends/aqofxconnect/dialogs/dlg_getinst.dlg", fbuf); if (rv<0) { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "Dialog description file not found (%d).", rv); GWEN_Buffer_free(fbuf); GWEN_Dialog_free(dlg); return NULL; } /* read dialog from dialog description file */ rv=GWEN_Dialog_ReadXmlFile(dlg, GWEN_Buffer_GetStart(fbuf)); if (rv<0) { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "here (%d).", rv); GWEN_Buffer_free(fbuf); GWEN_Dialog_free(dlg); return NULL; } GWEN_Buffer_free(fbuf); xdlg->ofxHome=OfxHome_new(dataFolder); xdlg->matchingSpecList=OH_InstituteSpec_List_new(); if (name) xdlg->name=strdup(name); /* done */ return dlg; } void GWENHYWFAR_CB OH_GetInstituteDialog_FreeData(void *bp, void *p) { OH_GETINST_DIALOG *xdlg; xdlg=(OH_GETINST_DIALOG *) p; OH_InstituteSpec_List_free(xdlg->matchingSpecList); OH_InstituteData_free(xdlg->selectedData); free(xdlg->name); OfxHome_free(xdlg->ofxHome); GWEN_FREE_OBJECT(xdlg); } static void createListBoxString(const OH_INSTITUTE_SPEC *os, GWEN_BUFFER *tbuf) { const char *s; char numbuf[32]; s=OH_InstituteSpec_GetName(os); if (s && *s) { GWEN_Buffer_AppendString(tbuf, s); snprintf(numbuf, sizeof(numbuf)-1, " (%d)", OH_InstituteSpec_GetId(os)); numbuf[sizeof(numbuf)-1]=0; GWEN_Buffer_AppendString(tbuf, numbuf); } else { snprintf(numbuf, sizeof(numbuf)-1, "%d", OH_InstituteSpec_GetId(os)); numbuf[sizeof(numbuf)-1]=0; GWEN_Buffer_AppendString(tbuf, numbuf); } } const OH_INSTITUTE_DATA *OH_GetInstituteDialog_GetSelectedInstitute(GWEN_DIALOG *dlg) { OH_GETINST_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, OH_GETINST_DIALOG, dlg); assert(xdlg); return xdlg->selectedData; } OH_INSTITUTE_SPEC *OH_GetInstituteDialog_DetermineSelectedBankInfo(GWEN_DIALOG *dlg) { OH_GETINST_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, OH_GETINST_DIALOG, dlg); assert(xdlg); if (xdlg->matchingSpecList) { int idx; idx=GWEN_Dialog_GetIntProperty(dlg, "listBox", GWEN_DialogProperty_Value, 0, -1); if (idx>=0) { const char *currentText; currentText=GWEN_Dialog_GetCharProperty(dlg, "listBox", GWEN_DialogProperty_Value, idx, NULL); if (currentText && *currentText) { OH_INSTITUTE_SPEC *os; GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 256, 0, 1); os=OH_InstituteSpec_List_First(xdlg->matchingSpecList); while (os) { createListBoxString(os, tbuf); if (strcasecmp(currentText, GWEN_Buffer_GetStart(tbuf))==0) { GWEN_Buffer_free(tbuf); return os; } GWEN_Buffer_Reset(tbuf); os=OH_InstituteSpec_List_Next(os); } GWEN_Buffer_free(tbuf); } } } return NULL; } void OH_GetInstituteDialog_UpdateList(GWEN_DIALOG *dlg) { OH_GETINST_DIALOG *xdlg; const OH_INSTITUTE_SPEC_LIST *sl; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, OH_GETINST_DIALOG, dlg); assert(xdlg); /* clear bank info list */ GWEN_Dialog_SetIntProperty(dlg, "listBox", GWEN_DialogProperty_ClearValues, 0, 0, 0); OH_InstituteSpec_List_Clear(xdlg->matchingSpecList); OH_InstituteData_free(xdlg->selectedData); xdlg->selectedData=NULL; sl=OfxHome_GetSpecs(xdlg->ofxHome); if (sl) { GWEN_BUFFER *tbuf; const OH_INSTITUTE_SPEC *os; const char *s; s=GWEN_Dialog_GetCharProperty(dlg, "nameEdit", GWEN_DialogProperty_Value, 0, NULL); tbuf=GWEN_Buffer_new(0, 256, 0, 1); os=OH_InstituteSpec_List_First(sl); while (os) { const char *bname; bname=OH_InstituteSpec_GetName(os); /* only add matching entries */ if ((s && bname && GWEN_Text_StrCaseStr(bname, s)!=NULL) || !(s && *s)) { OH_InstituteSpec_List_Add(OH_InstituteSpec_dup(os), xdlg->matchingSpecList); createListBoxString(os, tbuf); GWEN_Dialog_SetCharProperty(dlg, "listBox", GWEN_DialogProperty_AddValue, 0, GWEN_Buffer_GetStart(tbuf), 0); GWEN_Buffer_Reset(tbuf); } os=OH_InstituteSpec_List_Next(os); } GWEN_Buffer_free(tbuf); } if (GWEN_Dialog_GetIntProperty(dlg, "listBox", GWEN_DialogProperty_Value, 0, -1)>=0) GWEN_Dialog_SetIntProperty(dlg, "okButton", GWEN_DialogProperty_Enabled, 0, 1, 0); else GWEN_Dialog_SetIntProperty(dlg, "okButton", GWEN_DialogProperty_Enabled, 0, 0, 0); } void OH_GetInstituteDialog_Init(GWEN_DIALOG *dlg) { OH_GETINST_DIALOG *xdlg; GWEN_DB_NODE *dbPrefs; int i; int j; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, OH_GETINST_DIALOG, dlg); assert(xdlg); dbPrefs=GWEN_Dialog_GetPreferences(dlg); GWEN_Dialog_SetCharProperty(dlg, "", GWEN_DialogProperty_Title, 0, I18N("Select a Bank"), 0); GWEN_Dialog_SetCharProperty(dlg, "listBox", GWEN_DialogProperty_Title, 0, I18N("Bank Name"), 0); GWEN_Dialog_SetIntProperty(dlg, "listBox", GWEN_DialogProperty_SelectionMode, 0, GWEN_Dialog_SelectionMode_Single, 0); GWEN_Dialog_SetCharProperty(dlg, "infoLabel", GWEN_DialogProperty_Title, 0, I18N("" "

Please start typing in the name of your bank. The list " "below will be updated to show matching banks.

" "

Choose the bank from list below and click ok.

" "" "Please start typing in the name of your bank. The list\n" "below will be updated to show matching banks.\n" "Choose the bank from list below and click OK."), 0); /* read width */ i=GWEN_DB_GetIntValue(dbPrefs, "dialog_width", 0, -1); if (i>=DIALOG_MINWIDTH) GWEN_Dialog_SetIntProperty(dlg, "", GWEN_DialogProperty_Width, 0, i, 0); /* read height */ i=GWEN_DB_GetIntValue(dbPrefs, "dialog_height", 0, -1); if (i>=DIALOG_MINHEIGHT) GWEN_Dialog_SetIntProperty(dlg, "", GWEN_DialogProperty_Height, 0, i, 0); /* read bank column widths */ for (i=0; i<1; i++) { j=GWEN_DB_GetIntValue(dbPrefs, "bank_list_columns", i, -1); if (j=0 && j>=0) GWEN_Dialog_SetIntProperty(dlg, "listBox", GWEN_DialogProperty_SortDirection, i, j, 0); /* disable ok button */ GWEN_Dialog_SetIntProperty(dlg, "okButton", GWEN_DialogProperty_Enabled, 0, 0, 0); } void OH_GetInstituteDialog_Fini(GWEN_DIALOG *dlg) { OH_GETINST_DIALOG *xdlg; int i; GWEN_DB_NODE *dbPrefs; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, OH_GETINST_DIALOG, dlg); assert(xdlg); dbPrefs=GWEN_Dialog_GetPreferences(dlg); /* store dialog width */ i=GWEN_Dialog_GetIntProperty(dlg, "", GWEN_DialogProperty_Width, 0, -1); GWEN_DB_SetIntValue(dbPrefs, GWEN_DB_FLAGS_OVERWRITE_VARS, "dialog_width", i); /* store dialog height */ i=GWEN_Dialog_GetIntProperty(dlg, "", GWEN_DialogProperty_Height, 0, -1); GWEN_DB_SetIntValue(dbPrefs, GWEN_DB_FLAGS_OVERWRITE_VARS, "dialog_height", i); /* store column widths of importer list */ GWEN_DB_DeleteVar(dbPrefs, "bank_list_columns"); for (i=0; i<1; i++) { int j; j=GWEN_Dialog_GetIntProperty(dlg, "listBox", GWEN_DialogProperty_ColumnWidth, i, -1); if (jofxHome, OH_InstituteSpec_GetId(os)); if (od) { OH_InstituteData_free(xdlg->selectedData); xdlg->selectedData=OH_InstituteData_dup(od); return GWEN_DialogEvent_ResultAccept; } else { DBG_ERROR(AQOFXCONNECT_LOGDOMAIN, "No institute data for id=%d", OH_InstituteSpec_GetId(os)); } } return GWEN_DialogEvent_ResultHandled; } else if (strcasecmp(sender, "abortButton")==0) return GWEN_DialogEvent_ResultReject; else if (strcasecmp(sender, "wiz_help_button")==0) { /* TODO: open a help dialog */ } return GWEN_DialogEvent_ResultNotHandled; } int OH_GetInstituteDialog_HandleValueChanged(GWEN_DIALOG *dlg, const char *sender) { DBG_ERROR(0, "Changed %s", sender); if (strcasecmp(sender, "nameEdit")==0) { OH_GetInstituteDialog_UpdateList(dlg); return GWEN_DialogEvent_ResultHandled; } else if (strcasecmp(sender, "listBox")==0) { return GWEN_DialogEvent_ResultHandled; } return GWEN_DialogEvent_ResultNotHandled; } int GWENHYWFAR_CB OH_GetInstituteDialog_SignalHandler(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender) { OH_GETINST_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, OH_GETINST_DIALOG, dlg); assert(xdlg); switch (t) { case GWEN_DialogEvent_TypeInit: OH_GetInstituteDialog_Init(dlg); return GWEN_DialogEvent_ResultHandled;; case GWEN_DialogEvent_TypeFini: OH_GetInstituteDialog_Fini(dlg); return GWEN_DialogEvent_ResultHandled;; case GWEN_DialogEvent_TypeValueChanged: return OH_GetInstituteDialog_HandleValueChanged(dlg, sender); case GWEN_DialogEvent_TypeActivated: return OH_GetInstituteDialog_HandleActivated(dlg, sender); case GWEN_DialogEvent_TypeEnabled: case GWEN_DialogEvent_TypeDisabled: case GWEN_DialogEvent_TypeClose: case GWEN_DialogEvent_TypeLast: return GWEN_DialogEvent_ResultNotHandled; default: break; } return GWEN_DialogEvent_ResultNotHandled; } aqbanking-6.6.1/src/libs/plugins/backends/aqofxconnect/libofxhome/oh_institute_data.c0000664000175000017500000004146515037736055026101 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "oh_institute_data.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "./oh_institute_data_p.h" #include #include /* code headers */ /* macro functions */ GWEN_LIST_FUNCTIONS(OH_INSTITUTE_DATA, OH_InstituteData) GWEN_LIST2_FUNCTIONS(OH_INSTITUTE_DATA, OH_InstituteData) OH_INSTITUTE_DATA *OH_InstituteData_new(void) { OH_INSTITUTE_DATA *p_struct; GWEN_NEW_OBJECT(OH_INSTITUTE_DATA, p_struct) p_struct->_refCount=1; GWEN_LIST_INIT(OH_INSTITUTE_DATA, p_struct) /* members */ p_struct->id=0; p_struct->flags=0; p_struct->name=NULL; p_struct->fid=NULL; p_struct->org=NULL; p_struct->brokerId=NULL; p_struct->url=NULL; p_struct->lastOfxValidationTime=NULL; p_struct->lastSslValidationTime=NULL; p_struct->fileName=NULL; /* virtual functions */ return p_struct; } void OH_InstituteData_free(OH_INSTITUTE_DATA *p_struct) { if (p_struct) { assert(p_struct->_refCount); if (p_struct->_refCount==1) { GWEN_LIST_FINI(OH_INSTITUTE_DATA, p_struct) /* members */ free(p_struct->name); p_struct->name=NULL; free(p_struct->fid); p_struct->fid=NULL; free(p_struct->org); p_struct->org=NULL; free(p_struct->brokerId); p_struct->brokerId=NULL; free(p_struct->url); p_struct->url=NULL; GWEN_Time_free(p_struct->lastOfxValidationTime); p_struct->lastOfxValidationTime=NULL; GWEN_Time_free(p_struct->lastSslValidationTime); p_struct->lastSslValidationTime=NULL; free(p_struct->fileName); p_struct->fileName=NULL; p_struct->_refCount=0; GWEN_FREE_OBJECT(p_struct); } else p_struct->_refCount--; } } void OH_InstituteData_Attach(OH_INSTITUTE_DATA *p_struct) { assert(p_struct); assert(p_struct->_refCount); p_struct->_refCount++; } OH_INSTITUTE_DATA *OH_InstituteData_dup(const OH_INSTITUTE_DATA *p_src) { OH_INSTITUTE_DATA *p_struct; assert(p_src); p_struct=OH_InstituteData_new(); /* member "id" */ p_struct->id=p_src->id; /* member "flags" */ p_struct->flags=p_src->flags; /* member "name" */ if (p_struct->name) { free(p_struct->name); p_struct->name=NULL; p_struct->name=NULL; } if (p_src->name) { p_struct->name=strdup(p_src->name); } /* member "fid" */ if (p_struct->fid) { free(p_struct->fid); p_struct->fid=NULL; p_struct->fid=NULL; } if (p_src->fid) { p_struct->fid=strdup(p_src->fid); } /* member "org" */ if (p_struct->org) { free(p_struct->org); p_struct->org=NULL; p_struct->org=NULL; } if (p_src->org) { p_struct->org=strdup(p_src->org); } /* member "brokerId" */ if (p_struct->brokerId) { free(p_struct->brokerId); p_struct->brokerId=NULL; p_struct->brokerId=NULL; } if (p_src->brokerId) { p_struct->brokerId=strdup(p_src->brokerId); } /* member "url" */ if (p_struct->url) { free(p_struct->url); p_struct->url=NULL; p_struct->url=NULL; } if (p_src->url) { p_struct->url=strdup(p_src->url); } /* member "lastOfxValidationTime" */ if (p_struct->lastOfxValidationTime) { GWEN_Time_free(p_struct->lastOfxValidationTime); p_struct->lastOfxValidationTime=NULL; p_struct->lastOfxValidationTime=NULL; } if (p_src->lastOfxValidationTime) { p_struct->lastOfxValidationTime=GWEN_Time_dup(p_src->lastOfxValidationTime); } /* member "lastSslValidationTime" */ if (p_struct->lastSslValidationTime) { GWEN_Time_free(p_struct->lastSslValidationTime); p_struct->lastSslValidationTime=NULL; p_struct->lastSslValidationTime=NULL; } if (p_src->lastSslValidationTime) { p_struct->lastSslValidationTime=GWEN_Time_dup(p_src->lastSslValidationTime); } /* member "fileName" */ if (p_struct->fileName) { free(p_struct->fileName); p_struct->fileName=NULL; p_struct->fileName=NULL; } if (p_src->fileName) { p_struct->fileName=strdup(p_src->fileName); } return p_struct; } OH_INSTITUTE_DATA *OH_InstituteData_copy(OH_INSTITUTE_DATA *p_struct, const OH_INSTITUTE_DATA *p_src) { assert(p_struct); assert(p_src); /* member "id" */ p_struct->id=p_src->id; /* member "flags" */ p_struct->flags=p_src->flags; /* member "name" */ if (p_struct->name) { free(p_struct->name); p_struct->name=NULL; p_struct->name=NULL; } if (p_src->name) { p_struct->name=strdup(p_src->name); } /* member "fid" */ if (p_struct->fid) { free(p_struct->fid); p_struct->fid=NULL; p_struct->fid=NULL; } if (p_src->fid) { p_struct->fid=strdup(p_src->fid); } /* member "org" */ if (p_struct->org) { free(p_struct->org); p_struct->org=NULL; p_struct->org=NULL; } if (p_src->org) { p_struct->org=strdup(p_src->org); } /* member "brokerId" */ if (p_struct->brokerId) { free(p_struct->brokerId); p_struct->brokerId=NULL; p_struct->brokerId=NULL; } if (p_src->brokerId) { p_struct->brokerId=strdup(p_src->brokerId); } /* member "url" */ if (p_struct->url) { free(p_struct->url); p_struct->url=NULL; p_struct->url=NULL; } if (p_src->url) { p_struct->url=strdup(p_src->url); } /* member "lastOfxValidationTime" */ if (p_struct->lastOfxValidationTime) { GWEN_Time_free(p_struct->lastOfxValidationTime); p_struct->lastOfxValidationTime=NULL; p_struct->lastOfxValidationTime=NULL; } if (p_src->lastOfxValidationTime) { p_struct->lastOfxValidationTime=GWEN_Time_dup(p_src->lastOfxValidationTime); } /* member "lastSslValidationTime" */ if (p_struct->lastSslValidationTime) { GWEN_Time_free(p_struct->lastSslValidationTime); p_struct->lastSslValidationTime=NULL; p_struct->lastSslValidationTime=NULL; } if (p_src->lastSslValidationTime) { p_struct->lastSslValidationTime=GWEN_Time_dup(p_src->lastSslValidationTime); } /* member "fileName" */ if (p_struct->fileName) { free(p_struct->fileName); p_struct->fileName=NULL; p_struct->fileName=NULL; } if (p_src->fileName) { p_struct->fileName=strdup(p_src->fileName); } return p_struct; } int OH_InstituteData_GetId(const OH_INSTITUTE_DATA *p_struct){ assert(p_struct); return p_struct->id; } uint32_t OH_InstituteData_GetFlags(const OH_INSTITUTE_DATA *p_struct){ assert(p_struct); return p_struct->flags; } const char *OH_InstituteData_GetName(const OH_INSTITUTE_DATA *p_struct){ assert(p_struct); return p_struct->name; } const char *OH_InstituteData_GetFid(const OH_INSTITUTE_DATA *p_struct){ assert(p_struct); return p_struct->fid; } const char *OH_InstituteData_GetOrg(const OH_INSTITUTE_DATA *p_struct){ assert(p_struct); return p_struct->org; } const char *OH_InstituteData_GetBrokerId(const OH_INSTITUTE_DATA *p_struct){ assert(p_struct); return p_struct->brokerId; } const char *OH_InstituteData_GetUrl(const OH_INSTITUTE_DATA *p_struct){ assert(p_struct); return p_struct->url; } const GWEN_TIME *OH_InstituteData_GetLastOfxValidationTime(const OH_INSTITUTE_DATA *p_struct){ assert(p_struct); return p_struct->lastOfxValidationTime; } const GWEN_TIME *OH_InstituteData_GetLastSslValidationTime(const OH_INSTITUTE_DATA *p_struct){ assert(p_struct); return p_struct->lastSslValidationTime; } const char *OH_InstituteData_GetFileName(const OH_INSTITUTE_DATA *p_struct){ assert(p_struct); return p_struct->fileName; } void OH_InstituteData_SetId(OH_INSTITUTE_DATA *p_struct, int p_src){ assert(p_struct); p_struct->id=p_src; } void OH_InstituteData_SetFlags(OH_INSTITUTE_DATA *p_struct, uint32_t p_src){ assert(p_struct); p_struct->flags=p_src; } void OH_InstituteData_AddFlags(OH_INSTITUTE_DATA *p_struct, uint32_t p_src) { assert(p_struct); p_struct->flags|=p_src; } void OH_InstituteData_SubFlags(OH_INSTITUTE_DATA *p_struct, uint32_t p_src) { assert(p_struct); p_struct->flags&=~p_src; } void OH_InstituteData_SetName(OH_INSTITUTE_DATA *p_struct, const char *p_src){ assert(p_struct); if (p_struct->name) { free(p_struct->name); p_struct->name=NULL; p_struct->name=NULL; } if (p_src) { p_struct->name=strdup(p_src); } else { p_struct->name=NULL; } } void OH_InstituteData_SetFid(OH_INSTITUTE_DATA *p_struct, const char *p_src){ assert(p_struct); if (p_struct->fid) { free(p_struct->fid); p_struct->fid=NULL; p_struct->fid=NULL; } if (p_src) { p_struct->fid=strdup(p_src); } else { p_struct->fid=NULL; } } void OH_InstituteData_SetOrg(OH_INSTITUTE_DATA *p_struct, const char *p_src){ assert(p_struct); if (p_struct->org) { free(p_struct->org); p_struct->org=NULL; p_struct->org=NULL; } if (p_src) { p_struct->org=strdup(p_src); } else { p_struct->org=NULL; } } void OH_InstituteData_SetBrokerId(OH_INSTITUTE_DATA *p_struct, const char *p_src){ assert(p_struct); if (p_struct->brokerId) { free(p_struct->brokerId); p_struct->brokerId=NULL; p_struct->brokerId=NULL; } if (p_src) { p_struct->brokerId=strdup(p_src); } else { p_struct->brokerId=NULL; } } void OH_InstituteData_SetUrl(OH_INSTITUTE_DATA *p_struct, const char *p_src){ assert(p_struct); if (p_struct->url) { free(p_struct->url); p_struct->url=NULL; p_struct->url=NULL; } if (p_src) { p_struct->url=strdup(p_src); } else { p_struct->url=NULL; } } void OH_InstituteData_SetLastOfxValidationTime(OH_INSTITUTE_DATA *p_struct, const GWEN_TIME *p_src){ assert(p_struct); if (p_struct->lastOfxValidationTime) { GWEN_Time_free(p_struct->lastOfxValidationTime); p_struct->lastOfxValidationTime=NULL; p_struct->lastOfxValidationTime=NULL; } if (p_src) { p_struct->lastOfxValidationTime=GWEN_Time_dup(p_src); } else { p_struct->lastOfxValidationTime=NULL; } } void OH_InstituteData_SetLastSslValidationTime(OH_INSTITUTE_DATA *p_struct, const GWEN_TIME *p_src){ assert(p_struct); if (p_struct->lastSslValidationTime) { GWEN_Time_free(p_struct->lastSslValidationTime); p_struct->lastSslValidationTime=NULL; p_struct->lastSslValidationTime=NULL; } if (p_src) { p_struct->lastSslValidationTime=GWEN_Time_dup(p_src); } else { p_struct->lastSslValidationTime=NULL; } } void OH_InstituteData_SetFileName(OH_INSTITUTE_DATA *p_struct, const char *p_src){ assert(p_struct); if (p_struct->fileName) { free(p_struct->fileName); p_struct->fileName=NULL; p_struct->fileName=NULL; } if (p_src) { p_struct->fileName=strdup(p_src); } else { p_struct->fileName=NULL; } } OH_INSTITUTE_DATA_LIST *OH_InstituteData_List_dup(const OH_INSTITUTE_DATA_LIST *p_src) { OH_INSTITUTE_DATA_LIST *p_dest; OH_INSTITUTE_DATA *p_elem; assert(p_src); p_dest=OH_InstituteData_List_new(); p_elem=OH_InstituteData_List_First(p_src); while(p_elem) { OH_INSTITUTE_DATA *p_cpy; p_cpy=OH_InstituteData_dup(p_elem); OH_InstituteData_List_Add(p_cpy, p_dest); p_elem=OH_InstituteData_List_Next(p_elem); } return p_dest; } void OH_InstituteData_ReadDb(OH_INSTITUTE_DATA *p_struct, GWEN_DB_NODE *p_db){ assert(p_struct); /* member "id" */ p_struct->id=GWEN_DB_GetIntValue(p_db, "id", 0, 0); /* member "flags" */ p_struct->flags=GWEN_DB_GetIntValue(p_db, "flags", 0, 0); /* member "name" */ if (p_struct->name) { free(p_struct->name); p_struct->name=NULL; p_struct->name=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "name", 0, NULL); if (s) p_struct->name=strdup(s); } /* member "fid" */ if (p_struct->fid) { free(p_struct->fid); p_struct->fid=NULL; p_struct->fid=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "fid", 0, NULL); if (s) p_struct->fid=strdup(s); } /* member "org" */ if (p_struct->org) { free(p_struct->org); p_struct->org=NULL; p_struct->org=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "org", 0, NULL); if (s) p_struct->org=strdup(s); } /* member "brokerId" */ if (p_struct->brokerId) { free(p_struct->brokerId); p_struct->brokerId=NULL; p_struct->brokerId=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "brokerId", 0, NULL); if (s) p_struct->brokerId=strdup(s); } /* member "url" */ if (p_struct->url) { free(p_struct->url); p_struct->url=NULL; p_struct->url=NULL; } { const char *s; s=GWEN_DB_GetCharValue(p_db, "url", 0, NULL); if (s) p_struct->url=strdup(s); } /* member "lastOfxValidationTime" */ if (p_struct->lastOfxValidationTime) { GWEN_Time_free(p_struct->lastOfxValidationTime); p_struct->lastOfxValidationTime=NULL; p_struct->lastOfxValidationTime=NULL; } { GWEN_DB_NODE *dbDest; dbDest=GWEN_DB_GetGroup(p_db, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "lastOfxValidationTime"); if (dbDest) p_struct->lastOfxValidationTime=GWEN_Time_fromDb(dbDest); } /* member "lastSslValidationTime" */ if (p_struct->lastSslValidationTime) { GWEN_Time_free(p_struct->lastSslValidationTime); p_struct->lastSslValidationTime=NULL; p_struct->lastSslValidationTime=NULL; } { GWEN_DB_NODE *dbDest; dbDest=GWEN_DB_GetGroup(p_db, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "lastSslValidationTime"); if (dbDest) p_struct->lastSslValidationTime=GWEN_Time_fromDb(dbDest); } /* member "fileName" */ if (p_struct->fileName) { free(p_struct->fileName); p_struct->fileName=NULL; p_struct->fileName=NULL; } /* member "fileName" is volatile, just presetting it */ p_struct->fileName=NULL; } int OH_InstituteData_WriteDb(const OH_INSTITUTE_DATA *p_struct, GWEN_DB_NODE *p_db) { int p_rv; assert(p_struct); /* member "id" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "id", p_struct->id); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "flags" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "flags", p_struct->flags); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "name" */ if (p_struct->name) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "name", p_struct->name); else { GWEN_DB_DeleteVar(p_db, "name"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "fid" */ if (p_struct->fid) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "fid", p_struct->fid); else { GWEN_DB_DeleteVar(p_db, "fid"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "org" */ if (p_struct->org) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "org", p_struct->org); else { GWEN_DB_DeleteVar(p_db, "org"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "brokerId" */ if (p_struct->brokerId) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "brokerId", p_struct->brokerId); else { GWEN_DB_DeleteVar(p_db, "brokerId"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "url" */ if (p_struct->url) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "url", p_struct->url); else { GWEN_DB_DeleteVar(p_db, "url"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "lastOfxValidationTime" */ if (p_struct->lastOfxValidationTime){ GWEN_DB_NODE *dbDest; dbDest=GWEN_DB_GetGroup(p_db, GWEN_DB_FLAGS_OVERWRITE_GROUPS, "lastOfxValidationTime"); assert(dbDest); p_rv=GWEN_Time_toDb(p_struct->lastOfxValidationTime, dbDest); } else p_rv=0; if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "lastSslValidationTime" */ if (p_struct->lastSslValidationTime){ GWEN_DB_NODE *dbDest; dbDest=GWEN_DB_GetGroup(p_db, GWEN_DB_FLAGS_OVERWRITE_GROUPS, "lastSslValidationTime"); assert(dbDest); p_rv=GWEN_Time_toDb(p_struct->lastSslValidationTime, dbDest); } else p_rv=0; if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "fileName" is volatile, not writing to db */ return 0; } OH_INSTITUTE_DATA *OH_InstituteData_fromDb(GWEN_DB_NODE *p_db) { OH_INSTITUTE_DATA *p_struct; p_struct=OH_InstituteData_new(); OH_InstituteData_ReadDb(p_struct, p_db); return p_struct; } int OH_InstituteData_toDb(const OH_INSTITUTE_DATA *p_struct, GWEN_DB_NODE *p_db) { return OH_InstituteData_WriteDb(p_struct, p_db); } OH_INSTITUTE_DATA *OH_InstituteData_List_GetById(const OH_INSTITUTE_DATA_LIST *p_list, int p_cmp){ OH_INSTITUTE_DATA *p_struct; assert(p_list); p_struct = OH_InstituteData_List_First(p_list); while(p_struct) { int p_rv; if (p_struct->id==p_cmp) p_rv=0; else if (p_cmpid) p_rv=-1; else p_rv=1; if (p_rv == 0) return p_struct; p_struct = OH_InstituteData_List_Next(p_struct); } return NULL; } /* code headers */ #include "oh_institute_data_fns.c" aqbanking-6.6.1/src/libs/plugins/backends/aqofxconnect/libofxhome/Makefile.am0000664000175000017500000000473614043610745024253 00000000000000AM_CPPFLAGS = -I$(top_srcdir)/src/libs -I$(top_builddir)/src/libs $(gwenhywfar_includes) -I$(srcdir)/../../ -I$(srcdir)/.. AM_CFLAGS=-DBUILDING_AQBANKING @visibility_cflags@ typefiles=\ oh_institute_data.xml \ oh_institute_spec.xml #typedatadir=$(datadir)/aqbanking/aqofxconnect/typemaker2/c #nodist_typedata_DATA=\ # oh_institute_data.tm2 oh_institute_data_list.tm2 oh_institute_data_list2.tm2 \ # oh_institute_spec.tm2 oh_institute_spec_list.tm2 oh_institute_spec_list2.tm2 dlgdatadir=$(aqbanking_pkgdatadir)/backends/aqofxconnect/dialogs dlgdata_DATA=\ dlg_getinst.dlg build_sources= \ oh_institute_data.c \ oh_institute_spec.c build_headers_priv= \ oh_institute_data_p.h \ oh_institute_spec_p.h build_headers_pub= \ oh_institute_data.h \ oh_institute_spec.h build_headers=$(build_headers_priv) $(build_headers_pub) noinst_HEADERS=$(build_headers_priv) $(build_headers_pub) \ ofxhome_p.h \ dlg_getinst_p.h \ oh_institute_data_fns.h \ oh_institute_spec_fns.h \ ofxhome.h \ dlg_getinst.h #iheaderdir=@aqbanking_headerdir_am@/aqofxconnect #iheader_HEADERS= noinst_LTLIBRARIES=libofxhome.la libofxhome_la_SOURCES= $(build_sources) \ ofxhome.c \ dlg_getinst.c EXTRA_DIST=\ oh_institute_data_fns.c \ oh_institute_spec_fns.c \ $(typefiles) $(dlgdata_DATA) $(dlgimage_DATA) $(build_sources) $(build_headers) built_sources: $(build_sources) sources: for f in $(libofxhome_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for f in $(dlgdata_DATA); do \ echo $(subdir)/$$f >>$(top_srcdir)/dlgsources; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d sources; \ done #%.c: %.xml # $(gwenhywfar_bindir)/typemaker2 -I $(top_srcdir)/src/lib/typemaker2/c -I $(srcdir) --destfolder="$(srcdir)" -D AQOFXCONNECT_API $< # #%.h: %.xml # $(gwenhywfar_bindir)/typemaker2 -I $(top_srcdir)/src/lib/typemaker2/c -I $(srcdir) --destfolder="$(srcdir)" -D AQOFXCONNECT_API $< #SUFFIXES = .xml .c cppcheck: for f in $(libofxhome_la_SOURCES); do \ cppcheck --force $$f ; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done typefiles: $(typefiles) $(typemaker2_exe) -I $(top_srcdir)/src/libs/aqbanking/typemaker2/c -I $(gwenhywfar_dir)/share/gwenhywfar/typemaker2/c -I $(srcdir) --destfolder="$(srcdir)" $(typefiles) typedefs: $(typefiles) $(typemaker2_exe) --defs-only -I $(top_srcdir)/src/libs/aqbanking/typemaker2/c -I $(gwenhywfar_dir)/share/gwenhywfar/typemaker2/c -I $(srcdir) --destfolder="$(srcdir)" $(typefiles) aqbanking-6.6.1/src/libs/plugins/backends/aqofxconnect/libofxhome/oh_institute_spec_fns.c0000664000175000017500000000274114043610745026753 00000000000000/*************************************************************************** begin : Tue Aug 17 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif int OH_InstituteSpec_ReadXml(OH_INSTITUTE_SPEC *os, GWEN_XMLNODE *node) { const char *s; int i; s=GWEN_XMLNode_GetProperty(node, "id", NULL); if (s && *s) { if (sscanf(s, "%d", &i)!=1) { DBG_ERROR(AQOFXCONNECT_LOGDOMAIN, "Bad value for property \"id\": [%s]", s); return GWEN_ERROR_BAD_DATA; } OH_InstituteSpec_SetId(os, i); } else { DBG_ERROR(AQOFXCONNECT_LOGDOMAIN, "Missing property \"id\""); return GWEN_ERROR_BAD_DATA; } s=GWEN_XMLNode_GetProperty(node, "name", NULL); if (s && *s) OH_InstituteSpec_SetName(os, s); else { DBG_ERROR(AQOFXCONNECT_LOGDOMAIN, "Missing property \"name\""); return GWEN_ERROR_BAD_DATA; } return 0; } OH_INSTITUTE_SPEC *OH_InstituteSpec_fromXml(GWEN_XMLNODE *node) { OH_INSTITUTE_SPEC *os; int rv; os=OH_InstituteSpec_new(); rv=OH_InstituteSpec_ReadXml(os, node); if (rv<0) { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "here (%d)", rv); OH_InstituteSpec_free(os); return NULL; } return os; } aqbanking-6.6.1/src/libs/plugins/backends/aqofxconnect/libofxhome/dlg_getinst_p.h0000664000175000017500000000255214043610745025204 00000000000000/*************************************************************************** begin : Wed Aug 18 2010 copyright : (C) 2010 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef OFXHOME_DLG_GETINST_P_H #define OFXHOME_DLG_GETINST_P_H #include "dlg_getinst.h" #include "aqofxconnect/libofxhome/oh_institute_spec.h" #include "aqofxconnect/libofxhome/ofxhome.h" typedef struct OH_GETINST_DIALOG OH_GETINST_DIALOG; struct OH_GETINST_DIALOG { OFXHOME *ofxHome; OH_INSTITUTE_SPEC_LIST *matchingSpecList; OH_INSTITUTE_DATA *selectedData; char *name; }; static GWENHYWFAR_CB void OH_GetInstituteDialog_FreeData(void *bp, void *p); static int GWENHYWFAR_CB OH_GetInstituteDialog_SignalHandler(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender); static OH_INSTITUTE_SPEC *OH_GetInstituteDialog_DetermineSelectedBankInfo(GWEN_DIALOG *dlg); static void OH_GetInstituteDialog_UpdateList(GWEN_DIALOG *dlg); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqofxconnect/libofxhome/oh_institute_data_fns.c0000664000175000017500000000477314043610745026741 00000000000000/*************************************************************************** begin : Tue Aug 17 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif int OH_InstituteData_ReadXml(OH_INSTITUTE_DATA *oh, GWEN_XMLNODE *node) { const char *s; int i; s=GWEN_XMLNode_GetProperty(node, "id", NULL); if (s && *s) { if (sscanf(s, "%d", &i)!=1) { DBG_ERROR(AQOFXCONNECT_LOGDOMAIN, "Bad value for property \"id\": [%s]", s); return GWEN_ERROR_BAD_DATA; } OH_InstituteData_SetId(oh, i); } s=GWEN_XMLNode_GetCharValue(node, "name", NULL); OH_InstituteData_SetName(oh, s); s=GWEN_XMLNode_GetCharValue(node, "fid", NULL); OH_InstituteData_SetFid(oh, s); s=GWEN_XMLNode_GetCharValue(node, "org", NULL); OH_InstituteData_SetOrg(oh, s); s=GWEN_XMLNode_GetCharValue(node, "brokerId", NULL); OH_InstituteData_SetBrokerId(oh, s); s=GWEN_XMLNode_GetCharValue(node, "url", NULL); OH_InstituteData_SetUrl(oh, s); i=GWEN_XMLNode_GetIntValue(node, "ofxfail", 0); if (i!=0) OH_InstituteData_AddFlags(oh, OH_INSTITUTE_DATA_FLAGS_OFXFAIL); else OH_InstituteData_SubFlags(oh, OH_INSTITUTE_DATA_FLAGS_OFXFAIL); i=GWEN_XMLNode_GetIntValue(node, "sslfail", 0); if (i!=0) OH_InstituteData_AddFlags(oh, OH_INSTITUTE_DATA_FLAGS_SSLFAIL); else OH_InstituteData_SubFlags(oh, OH_INSTITUTE_DATA_FLAGS_SSLFAIL); s=GWEN_XMLNode_GetCharValue(node, "lastofxvalidation", NULL); if (s && *s) { GWEN_TIME *ti; ti=GWEN_Time_fromString(s, "YYYY-MM-DD hh:mm:ss"); if (ti) { OH_InstituteData_SetLastOfxValidationTime(oh, ti); GWEN_Time_free(ti); } } s=GWEN_XMLNode_GetCharValue(node, "lastsslvalidation", NULL); if (s && *s) { GWEN_TIME *ti; ti=GWEN_Time_fromString(s, "YYYY-MM-DD hh:mm:ss"); if (ti) { OH_InstituteData_SetLastSslValidationTime(oh, ti); GWEN_Time_free(ti); } } return 0; } OH_INSTITUTE_DATA *OH_InstituteData_fromXml(GWEN_XMLNODE *node) { OH_INSTITUTE_DATA *oh; int rv; oh=OH_InstituteData_new(); rv=OH_InstituteData_ReadXml(oh, node); if (rv<0) { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "here (%d)", rv); OH_InstituteData_free(oh); return NULL; } return oh; } aqbanking-6.6.1/src/libs/plugins/backends/aqofxconnect/libofxhome/oh_institute_data.h0000664000175000017500000001737115037736055026105 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "oh_institute_data.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef OH_INSTITUTE_DATA_OH_INSTITUTE_DATA_H #define OH_INSTITUTE_DATA_OH_INSTITUTE_DATA_H #ifdef __cplusplus extern "C" { #endif /** @page P_OH_INSTITUTE_DATA Structure OH_INSTITUTE_DATA

This page describes the properties of OH_INSTITUTE_DATA.

OH_INSTITUTE_DATA

@anchor OH_INSTITUTE_DATA_id

id

Set this property with @ref OH_InstituteData_SetId(), get it with @ref OH_InstituteData_GetId().

@anchor OH_INSTITUTE_DATA_flags

flags

Set this property with @ref OH_InstituteData_SetFlags(), get it with @ref OH_InstituteData_GetFlags().

@anchor OH_INSTITUTE_DATA_name

name

Set this property with @ref OH_InstituteData_SetName(), get it with @ref OH_InstituteData_GetName().

@anchor OH_INSTITUTE_DATA_fid

fid

Set this property with @ref OH_InstituteData_SetFid(), get it with @ref OH_InstituteData_GetFid().

@anchor OH_INSTITUTE_DATA_org

org

Set this property with @ref OH_InstituteData_SetOrg(), get it with @ref OH_InstituteData_GetOrg().

@anchor OH_INSTITUTE_DATA_brokerId

brokerId

Set this property with @ref OH_InstituteData_SetBrokerId(), get it with @ref OH_InstituteData_GetBrokerId().

@anchor OH_INSTITUTE_DATA_url

url

Set this property with @ref OH_InstituteData_SetUrl(), get it with @ref OH_InstituteData_GetUrl().

@anchor OH_INSTITUTE_DATA_lastOfxValidationTime

lastOfxValidationTime

Set this property with @ref OH_InstituteData_SetLastOfxValidationTime(), get it with @ref OH_InstituteData_GetLastOfxValidationTime().

@anchor OH_INSTITUTE_DATA_lastSslValidationTime

lastSslValidationTime

Set this property with @ref OH_InstituteData_SetLastSslValidationTime(), get it with @ref OH_InstituteData_GetLastSslValidationTime().

@anchor OH_INSTITUTE_DATA_fileName

fileName

Set this property with @ref OH_InstituteData_SetFileName(), get it with @ref OH_InstituteData_GetFileName().

*/ /* define OH_INSTITUTE_DATA_FLAGS */ #define OH_INSTITUTE_DATA_FLAGS_OFXFAIL 0x00000001 #define OH_INSTITUTE_DATA_FLAGS_SSLFAIL 0x00000002 /* needed system headers */ #include #include #include #include /* pre-headers */ #include #include typedef struct OH_INSTITUTE_DATA OH_INSTITUTE_DATA; GWEN_LIST_FUNCTION_DEFS(OH_INSTITUTE_DATA, OH_InstituteData) GWEN_LIST2_FUNCTION_DEFS(OH_INSTITUTE_DATA, OH_InstituteData) /* post-headers */ #include /** Constructor. */ OH_INSTITUTE_DATA *OH_InstituteData_new(void); /** Destructor. */ void OH_InstituteData_free(OH_INSTITUTE_DATA *p_struct); void OH_InstituteData_Attach(OH_INSTITUTE_DATA *p_struct); OH_INSTITUTE_DATA *OH_InstituteData_dup(const OH_INSTITUTE_DATA *p_src); OH_INSTITUTE_DATA *OH_InstituteData_copy(OH_INSTITUTE_DATA *p_struct, const OH_INSTITUTE_DATA *p_src); /** Getter. * Use this function to get the member "id" (see @ref OH_INSTITUTE_DATA_id) */ int OH_InstituteData_GetId(const OH_INSTITUTE_DATA *p_struct); /** Getter. * Use this function to get the member "flags" (see @ref OH_INSTITUTE_DATA_flags) */ uint32_t OH_InstituteData_GetFlags(const OH_INSTITUTE_DATA *p_struct); /** Getter. * Use this function to get the member "name" (see @ref OH_INSTITUTE_DATA_name) */ const char *OH_InstituteData_GetName(const OH_INSTITUTE_DATA *p_struct); /** Getter. * Use this function to get the member "fid" (see @ref OH_INSTITUTE_DATA_fid) */ const char *OH_InstituteData_GetFid(const OH_INSTITUTE_DATA *p_struct); /** Getter. * Use this function to get the member "org" (see @ref OH_INSTITUTE_DATA_org) */ const char *OH_InstituteData_GetOrg(const OH_INSTITUTE_DATA *p_struct); /** Getter. * Use this function to get the member "brokerId" (see @ref OH_INSTITUTE_DATA_brokerId) */ const char *OH_InstituteData_GetBrokerId(const OH_INSTITUTE_DATA *p_struct); /** Getter. * Use this function to get the member "url" (see @ref OH_INSTITUTE_DATA_url) */ const char *OH_InstituteData_GetUrl(const OH_INSTITUTE_DATA *p_struct); /** Getter. * Use this function to get the member "lastOfxValidationTime" (see @ref OH_INSTITUTE_DATA_lastOfxValidationTime) */ const GWEN_TIME *OH_InstituteData_GetLastOfxValidationTime(const OH_INSTITUTE_DATA *p_struct); /** Getter. * Use this function to get the member "lastSslValidationTime" (see @ref OH_INSTITUTE_DATA_lastSslValidationTime) */ const GWEN_TIME *OH_InstituteData_GetLastSslValidationTime(const OH_INSTITUTE_DATA *p_struct); /** Getter. * Use this function to get the member "fileName" (see @ref OH_INSTITUTE_DATA_fileName) */ const char *OH_InstituteData_GetFileName(const OH_INSTITUTE_DATA *p_struct); /** Setter. * Use this function to set the member "id" (see @ref OH_INSTITUTE_DATA_id) */ void OH_InstituteData_SetId(OH_INSTITUTE_DATA *p_struct, int p_src); /** Setter. * Use this function to set the member "flags" (see @ref OH_INSTITUTE_DATA_flags) */ void OH_InstituteData_SetFlags(OH_INSTITUTE_DATA *p_struct, uint32_t p_src); /** Add flags. * Use this function to add flags to member "flags" (see @ref OH_INSTITUTE_DATA_flags) */ void OH_InstituteData_AddFlags(OH_INSTITUTE_DATA *p_struct, uint32_t p_src); /** Add flags. * Use this function to add flags to member "flags" (see @ref OH_INSTITUTE_DATA_flags) */ void OH_InstituteData_SubFlags(OH_INSTITUTE_DATA *p_struct, uint32_t p_src); /** Setter. * Use this function to set the member "name" (see @ref OH_INSTITUTE_DATA_name) */ void OH_InstituteData_SetName(OH_INSTITUTE_DATA *p_struct, const char *p_src); /** Setter. * Use this function to set the member "fid" (see @ref OH_INSTITUTE_DATA_fid) */ void OH_InstituteData_SetFid(OH_INSTITUTE_DATA *p_struct, const char *p_src); /** Setter. * Use this function to set the member "org" (see @ref OH_INSTITUTE_DATA_org) */ void OH_InstituteData_SetOrg(OH_INSTITUTE_DATA *p_struct, const char *p_src); /** Setter. * Use this function to set the member "brokerId" (see @ref OH_INSTITUTE_DATA_brokerId) */ void OH_InstituteData_SetBrokerId(OH_INSTITUTE_DATA *p_struct, const char *p_src); /** Setter. * Use this function to set the member "url" (see @ref OH_INSTITUTE_DATA_url) */ void OH_InstituteData_SetUrl(OH_INSTITUTE_DATA *p_struct, const char *p_src); /** Setter. * Use this function to set the member "lastOfxValidationTime" (see @ref OH_INSTITUTE_DATA_lastOfxValidationTime) */ void OH_InstituteData_SetLastOfxValidationTime(OH_INSTITUTE_DATA *p_struct, const GWEN_TIME *p_src); /** Setter. * Use this function to set the member "lastSslValidationTime" (see @ref OH_INSTITUTE_DATA_lastSslValidationTime) */ void OH_InstituteData_SetLastSslValidationTime(OH_INSTITUTE_DATA *p_struct, const GWEN_TIME *p_src); /** Setter. * Use this function to set the member "fileName" (see @ref OH_INSTITUTE_DATA_fileName) */ void OH_InstituteData_SetFileName(OH_INSTITUTE_DATA *p_struct, const char *p_src); OH_INSTITUTE_DATA_LIST *OH_InstituteData_List_dup(const OH_INSTITUTE_DATA_LIST *p_src); void OH_InstituteData_ReadDb(OH_INSTITUTE_DATA *p_struct, GWEN_DB_NODE *p_db); int OH_InstituteData_WriteDb(const OH_INSTITUTE_DATA *p_struct, GWEN_DB_NODE *p_db); OH_INSTITUTE_DATA *OH_InstituteData_fromDb(GWEN_DB_NODE *p_db); int OH_InstituteData_toDb(const OH_INSTITUTE_DATA *p_struct, GWEN_DB_NODE *p_db); OH_INSTITUTE_DATA *OH_InstituteData_List_GetById(const OH_INSTITUTE_DATA_LIST *p_list, int p_cmp); #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/plugins/backends/aqofxconnect/libofxhome/oh_institute_spec.xml0000664000175000017500000000215114043610745026456 00000000000000 OH_INSTITUTE_SPEC OH_InstituteSpec with_db with_list1 with_list2 with_refcount
aqofxconnect/aqofxconnect.h
aqofxconnect/libofxhome/oh_institute_spec_fns.h
oh_institute_spec_fns.c
0 0 with_getbymember public NULL NULL public own const dup const
aqbanking-6.6.1/src/libs/plugins/backends/aqofxconnect/libofxhome/dlg_getinst.h0000664000175000017500000000172214043610745024663 00000000000000/*************************************************************************** begin : Wed Aug 18 2010 copyright : (C) 2010 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef OFXHOME_DLG_GETINST_H #define OFXHOME_DLG_GETINST_H #include #include #include "aqofxconnect/aqofxconnect.h" #include "aqofxconnect/libofxhome/oh_institute_data.h" #ifdef __cplusplus extern "C" { #endif GWEN_DIALOG *OH_GetInstituteDialog_new(const char *dataFolder, const char *name); const OH_INSTITUTE_DATA *OH_GetInstituteDialog_GetSelectedInstitute(GWEN_DIALOG *dlg); /*@}*/ #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/plugins/backends/aqofxconnect/libofxhome/oh_institute_spec_p.h0000664000175000017500000000121515037736055026433 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "oh_institute_spec.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef OH_INSTITUTE_SPEC_OH_INSTITUTE_SPEC_P_H #define OH_INSTITUTE_SPEC_OH_INSTITUTE_SPEC_P_H #include "./oh_institute_spec.h" #ifdef __cplusplus extern "C" { #endif struct OH_INSTITUTE_SPEC { GWEN_LIST_ELEMENT(OH_INSTITUTE_SPEC) int _refCount; int id; char *name; }; #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/plugins/backends/aqofxconnect/libofxhome/oh_institute_data_p.h0000664000175000017500000000150115037736055026410 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "oh_institute_data.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef OH_INSTITUTE_DATA_OH_INSTITUTE_DATA_P_H #define OH_INSTITUTE_DATA_OH_INSTITUTE_DATA_P_H #include "./oh_institute_data.h" #ifdef __cplusplus extern "C" { #endif struct OH_INSTITUTE_DATA { GWEN_LIST_ELEMENT(OH_INSTITUTE_DATA) int _refCount; int id; uint32_t flags; char *name; char *fid; char *org; char *brokerId; char *url; GWEN_TIME *lastOfxValidationTime; GWEN_TIME *lastSslValidationTime; char *fileName; /* volatile */ }; #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/plugins/backends/aqofxconnect/libofxhome/oh_institute_spec.h0000664000175000017500000000564015037736055026122 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "oh_institute_spec.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef OH_INSTITUTE_SPEC_OH_INSTITUTE_SPEC_H #define OH_INSTITUTE_SPEC_OH_INSTITUTE_SPEC_H #ifdef __cplusplus extern "C" { #endif /** @page P_OH_INSTITUTE_SPEC Structure OH_INSTITUTE_SPEC

This page describes the properties of OH_INSTITUTE_SPEC.

OH_INSTITUTE_SPEC

@anchor OH_INSTITUTE_SPEC_id

id

Set this property with @ref OH_InstituteSpec_SetId(), get it with @ref OH_InstituteSpec_GetId().

@anchor OH_INSTITUTE_SPEC_name

name

Set this property with @ref OH_InstituteSpec_SetName(), get it with @ref OH_InstituteSpec_GetName().

*/ /* needed system headers */ #include #include #include #include /* pre-headers */ #include typedef struct OH_INSTITUTE_SPEC OH_INSTITUTE_SPEC; GWEN_LIST_FUNCTION_DEFS(OH_INSTITUTE_SPEC, OH_InstituteSpec) GWEN_LIST2_FUNCTION_DEFS(OH_INSTITUTE_SPEC, OH_InstituteSpec) /* post-headers */ #include /** Constructor. */ OH_INSTITUTE_SPEC *OH_InstituteSpec_new(void); /** Destructor. */ void OH_InstituteSpec_free(OH_INSTITUTE_SPEC *p_struct); void OH_InstituteSpec_Attach(OH_INSTITUTE_SPEC *p_struct); OH_INSTITUTE_SPEC *OH_InstituteSpec_dup(const OH_INSTITUTE_SPEC *p_src); OH_INSTITUTE_SPEC *OH_InstituteSpec_copy(OH_INSTITUTE_SPEC *p_struct, const OH_INSTITUTE_SPEC *p_src); /** Getter. * Use this function to get the member "id" (see @ref OH_INSTITUTE_SPEC_id) */ int OH_InstituteSpec_GetId(const OH_INSTITUTE_SPEC *p_struct); /** Getter. * Use this function to get the member "name" (see @ref OH_INSTITUTE_SPEC_name) */ const char *OH_InstituteSpec_GetName(const OH_INSTITUTE_SPEC *p_struct); /** Setter. * Use this function to set the member "id" (see @ref OH_INSTITUTE_SPEC_id) */ void OH_InstituteSpec_SetId(OH_INSTITUTE_SPEC *p_struct, int p_src); /** Setter. * Use this function to set the member "name" (see @ref OH_INSTITUTE_SPEC_name) */ void OH_InstituteSpec_SetName(OH_INSTITUTE_SPEC *p_struct, const char *p_src); OH_INSTITUTE_SPEC_LIST *OH_InstituteSpec_List_dup(const OH_INSTITUTE_SPEC_LIST *p_src); void OH_InstituteSpec_ReadDb(OH_INSTITUTE_SPEC *p_struct, GWEN_DB_NODE *p_db); int OH_InstituteSpec_WriteDb(const OH_INSTITUTE_SPEC *p_struct, GWEN_DB_NODE *p_db); OH_INSTITUTE_SPEC *OH_InstituteSpec_fromDb(GWEN_DB_NODE *p_db); int OH_InstituteSpec_toDb(const OH_INSTITUTE_SPEC *p_struct, GWEN_DB_NODE *p_db); OH_INSTITUTE_SPEC *OH_InstituteSpec_List_GetById(const OH_INSTITUTE_SPEC_LIST *p_list, int p_cmp); #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/plugins/backends/aqofxconnect/libofxhome/oh_institute_data.xml0000664000175000017500000000713714043610745026446 00000000000000 OH_INSTITUTE_DATA OH_InstituteData with_db with_list1 with_list2 with_refcount
aqofxconnect/aqofxconnect.h
gwenhywfar/gwentime.h
aqofxconnect/libofxhome/oh_institute_data_fns.h
oh_institute_data_fns.c
0 0 with_getbymember public 0 0 with_flags public NULL NULL public own const dup const NULL NULL public own const dup const NULL NULL public own const dup const NULL NULL public own const dup const NULL NULL public own const dup const AEDB_DataType_String public own with_hash const dup const NULL NULL AEDB_DataType_String public own with_hash const dup const NULL NULL NULL NULL public own volatile const dup const
aqbanking-6.6.1/src/libs/plugins/backends/aqofxconnect/libofxhome/ofxhome.h0000664000175000017500000000411614043610745024025 00000000000000/*************************************************************************** begin : Tue Aug 17 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef OFXHOME_H #define OFXHOME_H #include #include #include #include typedef struct OFXHOME OFXHOME; /** * Creates an OFX data cache for www.ofxhome.com. * @param datafolder cache folder */ AQOFXCONNECT_API OFXHOME *OfxHome_new(const char *dataFolder); /** * Release the OFX data cache (this doesn't remove the files from the data folder) * * @param ofh pointer to the OFX data cache object to release */ AQOFXCONNECT_API void OfxHome_free(OFXHOME *ofh); /** * Returns a list of server specs (containing name and id). If there already is a list * in the data folder and it is reasonably new it will be loaded. Otherwise the list * is downloaded from "www.ofxhome.com" and saved for later reference. * * @param ofh pointer to the OFX data cache object * * @return pointer to the list of server specs (or NULL on error) */ AQOFXCONNECT_API const OH_INSTITUTE_SPEC_LIST *OfxHome_GetSpecs(OFXHOME *ofh); /** * Returns information about the server of the given id. * If this data is already in the data folder and is reasonably new * it will be loaded. Otherwise it will be downloaded from "www.ofxhome.com" * and saved for later reference. * * @param ofh pointer to the OFX data cache object * * @param fid id of the server for which information is to be retrieved (this id can * only be taken from a server spec retrieved via @ref OfxHome_GetSpecs). * * @return pointer to the list of server specs (or NULL on error) */ AQOFXCONNECT_API const OH_INSTITUTE_DATA *OfxHome_GetData(OFXHOME *ofh, int fid); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqofxconnect/libofxhome/dlg_getinst.dlg0000664000175000017500000000306014043610745025177 00000000000000 aqbanking-6.6.1/src/libs/plugins/backends/aqofxconnect/libofxhome/oh_institute_data_fns.h0000664000175000017500000000135714043610745026741 00000000000000/*************************************************************************** begin : Tue Aug 17 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef OH_INSTITUTE_DATA_FNS_H #define OH_INSTITUTE_DATA_FNS_H #include #include AQOFXCONNECT_API OH_INSTITUTE_DATA *OH_InstituteData_fromXml(GWEN_XMLNODE *node); AQOFXCONNECT_API int OH_InstituteData_ReadXml(OH_INSTITUTE_DATA *oh, GWEN_XMLNODE *node); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqofxconnect/libofxhome/ofxhome_p.h0000664000175000017500000000271114043610745024343 00000000000000/*************************************************************************** begin : Tue Aug 17 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef OFXHOME_P_H #define OFXHOME_P_H #include "ofxhome.h" #include struct OFXHOME { OH_INSTITUTE_SPEC_LIST *specList; OH_INSTITUTE_DATA_LIST *dataList; char *dataFolder; }; int OfxHome_SetupHttpSession(OFXHOME *ofh, GWEN_HTTP_SESSION *sess); int OfxHome_DownloadSpecs(OFXHOME *ofh, OH_INSTITUTE_SPEC_LIST *sl); int OfxHome_LoadSpecs(OFXHOME *ofh, OH_INSTITUTE_SPEC_LIST *sl); int OfxHome_SaveSpecs(OFXHOME *ofh, const OH_INSTITUTE_SPEC_LIST *sl); /** * @param ofh pointer to OFXHOME object * @param hours cache validity time in hours * @return -1 if data is not in cache * 0 if data in cache but outdated, * 1 if valid data in cache */ int OfxHome_CheckSpecsCache(OFXHOME *ofh, int hours); int OfxHome_DownloadData(OFXHOME *ofh, int fid, OH_INSTITUTE_DATA **pData); int OfxHome_LoadData(OFXHOME *ofh, int fid, OH_INSTITUTE_DATA **pData); int OfxHome_SaveData(OFXHOME *ofh, const OH_INSTITUTE_DATA *od); int OfxHome_CheckDataCache(OFXHOME *ofh, int fid, int hours); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqofxconnect/libofxhome/oh_institute_spec_fns.h0000664000175000017500000000136114043610745026755 00000000000000/*************************************************************************** begin : Tue Aug 17 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef OH_INSTITUTE_DATA_SPEC_H #define OH_INSTITUTE_DATA_SPEC_H #include #include AQOFXCONNECT_API OH_INSTITUTE_SPEC *OH_InstituteSpec_fromXml(GWEN_XMLNODE *node); AQOFXCONNECT_API int OH_InstituteSpec_ReadXml(OH_INSTITUTE_SPEC *os, GWEN_XMLNODE *node); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqofxconnect/provider.h0000664000175000017500000000213614043610745022056 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AO_PROVIDER_H #define AO_PROVIDER_H #include #include #define AQOFXCONNECT_BACKENDNAME "aqofxconnect" #define AQOFXCONNECT_LOGDOMAIN "aqofxconnect" #ifdef __cplusplus extern "C" { #endif typedef struct AO_PROVIDER AO_PROVIDER; typedef struct { const char *appName; const char *appId; const char *appVer; } AO_APPINFO; AB_PROVIDER *AO_Provider_new(AB_BANKING *ab); const AO_APPINFO *AO_Provider_GetAppInfos(AB_PROVIDER *pro); int AO_Provider_GetCert(AB_PROVIDER *pro, AB_USER *u); int AO_Provider_RequestAccounts(AB_PROVIDER *pro, AB_USER *u, int keepOpen); #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/plugins/backends/aqofxconnect/Makefile.am0000664000175000017500000000353714043610745022115 00000000000000SUBDIRS=libofxhome common v1 v2 control dialogs AM_CPPFLAGS = -I$(top_srcdir)/src/libs -I$(top_builddir)/src/libs $(gwenhywfar_includes) -I$(srcdir)/.. AM_CFLAGS=-DBUILDING_AQBANKING @visibility_cflags@ localedir=$(datadir)/locale DEFS += -DLOCALEDIR=\"$(localedir)\" plugindir = $(aqbanking_plugindir)/providers plugin_DATA = aqofxconnect.xml noinst_HEADERS=\ account_p.h \ aqofxconnect_l.h \ provider_p.h \ user_p.h \ account.h \ aqofxconnect.h \ provider.h \ user.h #iheaderdir=@aqbanking_headerdir_am@/aqofxconnect #iheader_HEADERS= # static plugin library noinst_LTLIBRARIES=libaqofxconnect.la libaqofxconnect_la_SOURCES= \ account.c \ user.c \ provider.c libaqofxconnect_la_LIBADD= \ libofxhome/libofxhome.la \ v1/libofxdcv1.la \ v2/libofxdcv2.la \ control/libofxdccontrol.la \ common/libofxdccommon.la \ dialogs/libofxdcdialogs.la INCLUDED_SOURCEFILES=\ provider_accspec.c \ provider_sendcmd.c \ provider_update.c EXTRA_DIST= $(dlgdata_DATA) $(dlgimage_DATA) \ aqofxconnect.xml.in \ $(INCLUDED_SOURCEFILES) sources: for f in $(libaqofxconnect_la_SOURCES) $(aqofxconnect_la_SOURCES) $(INCLUDED_SOURCEFILES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for f in $(dlgdata_DATA); do \ echo $(subdir)/$$f >>$(top_srcdir)/dlgsources; \ done for f in $(plugin_DATA); do \ echo $(subdir)/$$f >>$(top_srcdir)/pdsources; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d sources; \ done built_sources: list='$(SUBDIRS)'; for d in $$list; do \ $(MAKE) -C $$d built_sources; \ done ; cppcheck: for f in $(libaqofxconnect_la_SOURCES); do \ cppcheck --force $$f ; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done typefiles: for d in $(SUBDIRS); do \ $(MAKE) -C $$d typefiles; \ done typedefs: for d in $(SUBDIRS); do \ $(MAKE) -C $$d typedefs; \ done aqbanking-6.6.1/src/libs/plugins/backends/aqofxconnect/provider_update.c0000664000175000017500000000341414043610745023413 00000000000000/*************************************************************************** begin : Fri Nov 30 2018 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ /* included by provider.c */ int AO_Provider_UpdatePreInit(AB_PROVIDER *pro, uint32_t lastVersion, uint32_t currentVersion) { #if 0 /* no preinit for now */ int rv; DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "Update (pre init): Previous version %d.%d.%d.%d, new version %d.%d.%d.%d", (lastVersion>>24) & 0xff, (lastVersion>>16) & 0xff, (lastVersion>>8) & 0xff, lastVersion & 0xff, (currentVersion>>24) & 0xff, (currentVersion>>16) & 0xff, (currentVersion>>8) & 0xff, currentVersion & 0xff); #endif return 0; } int AO_Provider_UpdatePostInit(AB_PROVIDER *pro, uint32_t lastVersion, uint32_t currentVersion) { int rv; DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "Update (post init): Previous version %d.%d.%d.%d, new version %d.%d.%d.%d", (lastVersion>>24) & 0xff, (lastVersion>>16) & 0xff, (lastVersion>>8) & 0xff, lastVersion & 0xff, (currentVersion>>24) & 0xff, (currentVersion>>16) & 0xff, (currentVersion>>8) & 0xff, currentVersion & 0xff); if (lastVersion<((5<<24) | (99<<16) | (2<<8) | 0)) { /* change from previous versions: * - create account spec objects */ DBG_NOTICE(AQOFXCONNECT_LOGDOMAIN, "Creating account specs for accounts"); rv=AB_Provider_CreateInitialAccountSpecs(pro); if (rv<0) { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "here (%d)", rv); return rv; } } return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqofxconnect/aqofxconnect_l.h0000664000175000017500000000145014043610745023225 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Mon Mar 01 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AQOFXCONNECT_AQOFXCONNECT_L_H #define AQOFXCONNECT_AQOFXCONNECT_L_H #include #include #define I18N(msg) GWEN_I18N_Translate(PACKAGE, msg) #define I18N_NOOP(msg) msg #define I18S(msg) msg #endif /* AQOFXCONNECT_AQOFXCONNECT_L_H */ aqbanking-6.6.1/src/libs/plugins/backends/aqofxconnect/provider_accspec.c0000664000175000017500000000476014043610745023537 00000000000000/*************************************************************************** begin : Fri Nov 30 2018 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ /* included by provider.c */ int AO_Provider__CreateTransactionLimitsForAccount(AB_PROVIDER *pro, const AB_ACCOUNT *acc, AB_TRANSACTION_LIMITS_LIST *tll) { int i; int jobList[]= { AB_Transaction_CommandGetBalance, AB_Transaction_CommandGetTransactions, /* AB_Transaction_CommandLoadCellPhone, */ /* AB_Transaction_CommandSepaTransfer, */ /* AB_Transaction_CommandSepaDebitNote, */ /* AB_Transaction_CommandSepaFlashDebitNote, */ /* AB_Transaction_CommandSepaCreateStandingOrder, */ /* AB_Transaction_CommandSepaModifyStandingOrder, */ /* AB_Transaction_CommandSepaDeleteStandingOrder, */ /* AB_Transaction_CommandSepaGetStandingOrders, */ /* AB_Transaction_CommandGetEStatements, */ AB_Transaction_CommandUnknown }; i=0; while (jobList[i]!=AB_Transaction_CommandUnknown) { AB_TRANSACTION_LIMITS *limits=NULL; DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "Handling job \"%s\"", AB_Transaction_Command_toString(jobList[i])); limits=AB_TransactionLimits_new(); AB_TransactionLimits_SetCommand(limits, jobList[i]); AB_TransactionLimits_SetMaxLinesPurpose(limits, AO_Account_GetMaxPurposeLines(acc)); DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "- adding limits"); AB_TransactionLimits_List_Add(limits, tll); i++; } /* while */ return 0; } int AO_Provider_UpdateAccountSpec(AB_PROVIDER *pro, AB_ACCOUNT_SPEC *as, int doLock) { int rv; AB_ACCOUNT *a=NULL; AB_TRANSACTION_LIMITS_LIST *tll; rv=AB_Provider_GetAccount(pro, AB_AccountSpec_GetUniqueId(as), doLock, doLock, &a); if (rv<0) { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "here (%d)", rv); return rv; } tll=AB_TransactionLimits_List_new(); rv=AO_Provider__CreateTransactionLimitsForAccount(pro, a, tll); if (rv<0) { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "here (%d)", rv); AB_TransactionLimits_List_free(tll); AB_Account_free(a); return rv; } AB_AccountSpec_SetTransactionLimitsList(as, tll); AB_Account_free(a); return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqofxconnect/user.c0000664000175000017500000003344214043610745021201 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "user_p.h" #include "aqofxconnect/provider.h" #include #include GWEN_INHERIT(AB_USER, AO_USER); uint32_t AO_User_Flags_fromDb(GWEN_DB_NODE *db, const char *name) { int i; uint32_t f=0; for (i=0; ; i++) { const char *s; s=GWEN_DB_GetCharValue(db, name, i, 0); if (!s) break; if (strcasecmp(s, "account_list")==0) f|=AO_USER_FLAGS_ACCOUNT_LIST; else if (strcasecmp(s, "statements")==0) f|=AO_USER_FLAGS_STATEMENTS; else if (strcasecmp(s, "investment")==0) f|=AO_USER_FLAGS_INVESTMENT; else if (strcasecmp(s, "billpay")==0) f|=AO_USER_FLAGS_BILLPAY; else if (strcasecmp(s, "emptyBankId")==0) f|=AO_USER_FLAGS_EMPTY_BANKID; else if (strcasecmp(s, "emptyFid")==0) f|=AO_USER_FLAGS_EMPTY_FID; else if (strcasecmp(s, "forceSsl3")==0) f|=AO_USER_FLAGS_FORCE_SSL3; else if (strcasecmp(s, "sendShortDate")==0) f|=AO_USER_FLAGS_SEND_SHORT_DATE; else { DBG_ERROR(AQOFXCONNECT_LOGDOMAIN, "Unknown user flag \"%s\"", s); } } return f; } void AO_User_Flags_toDb(GWEN_DB_NODE *db, const char *name, uint32_t f) { GWEN_DB_DeleteVar(db, name); if (f & AO_USER_FLAGS_ACCOUNT_LIST) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_DEFAULT, name, "account_list"); if (f & AO_USER_FLAGS_STATEMENTS) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_DEFAULT, name, "statements"); if (f & AO_USER_FLAGS_INVESTMENT) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_DEFAULT, name, "investment"); if (f & AO_USER_FLAGS_BILLPAY) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_DEFAULT, name, "billpay"); if (f & AO_USER_FLAGS_EMPTY_BANKID) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_DEFAULT, name, "emptyBankId"); if (f & AO_USER_FLAGS_EMPTY_FID) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_DEFAULT, name, "emptyFid"); if (f & AO_USER_FLAGS_FORCE_SSL3) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_DEFAULT, name, "forceSsl3"); if (f & AO_USER_FLAGS_SEND_SHORT_DATE) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_DEFAULT, name, "sendShortDate"); } AB_USER *AO_User_new(AB_PROVIDER *pro) { AB_USER *u; AO_USER *ue; assert(pro); u=AB_User_new(); assert(u); GWEN_NEW_OBJECT(AO_USER, ue); GWEN_INHERIT_SETDATA(AB_USER, AO_USER, u, ue, AO_User_freeData); AB_User_SetProvider(u, pro); AB_User_SetBackendName(u, AQOFXCONNECT_BACKENDNAME); ue->readFromDbFn=AB_User_SetReadFromDbFn(u, AO_User_ReadFromDb); ue->writeToDbFn=AB_User_SetWriteToDbFn(u, AO_User_WriteToDb); ue->httpVMajor=1; ue->httpVMinor=0; return u; } int AO_User_ReadFromDb(AB_USER *u, GWEN_DB_NODE *db) { AO_USER *ue; int rv; GWEN_DB_NODE *dbP; AB_PROVIDER *pro; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AO_USER, u); assert(ue); /* save provider, because AB_User_ReadFromDb clears it */ pro=AB_User_GetProvider(u); /* read data for base class */ rv=(ue->readFromDbFn)(u, db); if (rv<0) { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "here (%d)", rv); return rv; } /* set provider again */ AB_User_SetProvider(u, pro); /* read data for provider */ dbP=GWEN_DB_GetGroup(db, GWEN_DB_FLAGS_DEFAULT, "data/backend"); AO_User__ReadDb(u, dbP); return 0; } int AO_User_WriteToDb(const AB_USER *u, GWEN_DB_NODE *db) { AO_USER *ue; int rv; GWEN_DB_NODE *dbP; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AO_USER, u); assert(ue); /* write data for base class */ rv=(ue->writeToDbFn)(u, db); if (rv<0) { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "here (%d)", rv); return rv; } /* write data for provider */ dbP=GWEN_DB_GetGroup(db, GWEN_DB_FLAGS_DEFAULT, "data/backend"); AO_User__WriteDb(u, dbP); return 0; } void GWENHYWFAR_CB AO_User_freeData(void *bp, void *p) { AO_USER *ue; ue=(AO_USER *)p; free(ue->bankName); free(ue->brokerId); free(ue->org); free(ue->fid); free(ue->serverAddr); free(ue->appId); free(ue->appVer); free(ue->headerVer); free(ue->clientUid); free(ue->securityType); GWEN_FREE_OBJECT(ue); } void AO_User__ReadDb(AB_USER *u, GWEN_DB_NODE *db) { AO_USER *ue; const char *s; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AO_USER, u); assert(ue); ue->flags=AO_User_Flags_fromDb(db, "flags"); free(ue->bankName); s=GWEN_DB_GetCharValue(db, "bankName", 0, NULL); if (s) ue->bankName=strdup(s); else ue->bankName=NULL; free(ue->brokerId); s=GWEN_DB_GetCharValue(db, "brokerId", 0, NULL); if (s) ue->brokerId=strdup(s); else ue->brokerId=NULL; free(ue->org); s=GWEN_DB_GetCharValue(db, "org", 0, NULL); if (s) ue->org=strdup(s); else ue->org=NULL; free(ue->fid); s=GWEN_DB_GetCharValue(db, "fid", 0, NULL); if (s) ue->fid=strdup(s); else ue->fid=NULL; free(ue->serverAddr); s=GWEN_DB_GetCharValue(db, "serverAddr", 0, NULL); if (s) ue->serverAddr=strdup(s); else ue->serverAddr=NULL; free(ue->appId); s=GWEN_DB_GetCharValue(db, "appId", 0, NULL); if (s) ue->appId=strdup(s); else ue->appId=NULL; free(ue->appVer); s=GWEN_DB_GetCharValue(db, "appVer", 0, NULL); if (s) ue->appVer=strdup(s); else ue->appVer=NULL; free(ue->headerVer); s=GWEN_DB_GetCharValue(db, "headerVer", 0, NULL); if (s) ue->headerVer=strdup(s); else ue->headerVer=NULL; free(ue->clientUid); s=GWEN_DB_GetCharValue(db, "clientUid", 0, NULL); if (s) ue->clientUid=strdup(s); else ue->clientUid=NULL; free(ue->securityType); s=GWEN_DB_GetCharValue(db, "securityType", 0, NULL); if (s) ue->securityType=strdup(s); else ue->securityType=NULL; ue->httpVMajor=GWEN_DB_GetIntValue(db, "httpVMajor", 0, -1); ue->httpVMinor=GWEN_DB_GetIntValue(db, "httpVMinor", 0, -1); if (ue->httpVMajor==-1 || ue->httpVMinor==-1) { ue->httpVMajor=1; ue->httpVMinor=0; } free(ue->httpUserAgent); s=GWEN_DB_GetCharValue(db, "httpUserAgent", 0, NULL); if (s) ue->httpUserAgent=strdup(s); else ue->httpUserAgent=NULL; } void AO_User__WriteDb(const AB_USER *u, GWEN_DB_NODE *db) { AO_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AO_USER, u); assert(ue); AO_User_Flags_toDb(db, "flags", ue->flags); if (ue->bankName) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "bankName", ue->bankName); if (ue->brokerId) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "brokerId", ue->brokerId); if (ue->org) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "org", ue->org); if (ue->fid) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "fid", ue->fid); if (ue->serverAddr) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "serverAddr", ue->serverAddr); if (ue->appId) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "appId", ue->appId); if (ue->appVer) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "appVer", ue->appVer); if (ue->headerVer) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "headerVer", ue->headerVer); if (ue->clientUid) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "clientUid", ue->clientUid); if (ue->securityType) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "securityType", ue->securityType); GWEN_DB_SetIntValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "httpVMajor", ue->httpVMajor); GWEN_DB_SetIntValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "httpVMinor", ue->httpVMinor); if (ue->httpUserAgent) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "httpUserAgent", ue->httpUserAgent); /* done */ } const char *AO_User_GetBankName(const AB_USER *u) { AO_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AO_USER, u); assert(ue); return ue->bankName; } void AO_User_SetBankName(AB_USER *u, const char *s) { AO_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AO_USER, u); assert(ue); free(ue->bankName); if (s) ue->bankName=strdup(s); else ue->bankName=NULL; } const char *AO_User_GetBrokerId(const AB_USER *u) { AO_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AO_USER, u); assert(ue); return ue->brokerId; } void AO_User_SetBrokerId(AB_USER *u, const char *s) { AO_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AO_USER, u); assert(ue); free(ue->brokerId); if (s) ue->brokerId=strdup(s); else ue->brokerId=NULL; } const char *AO_User_GetOrg(const AB_USER *u) { AO_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AO_USER, u); assert(ue); return ue->org; } void AO_User_SetOrg(AB_USER *u, const char *s) { AO_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AO_USER, u); assert(ue); free(ue->org); if (s) ue->org=strdup(s); else ue->org=NULL; } const char *AO_User_GetFid(const AB_USER *u) { AO_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AO_USER, u); assert(ue); return ue->fid; } void AO_User_SetFid(AB_USER *u, const char *s) { AO_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AO_USER, u); assert(ue); free(ue->fid); if (s) ue->fid=strdup(s); else ue->fid=NULL; } const char *AO_User_GetServerAddr(const AB_USER *u) { AO_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AO_USER, u); assert(ue); return ue->serverAddr; } void AO_User_SetServerAddr(AB_USER *u, const char *s) { AO_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AO_USER, u); assert(ue); free(ue->serverAddr); if (s) ue->serverAddr=strdup(s); else ue->serverAddr=NULL; } uint32_t AO_User_GetFlags(const AB_USER *u) { AO_USER *ue; ue=GWEN_INHERIT_GETDATA(AB_USER, AO_USER, u); assert(ue); return ue->flags; } void AO_User_SetFlags(AB_USER *u, uint32_t f) { AO_USER *ue; ue=GWEN_INHERIT_GETDATA(AB_USER, AO_USER, u); assert(ue); ue->flags=f; } void AO_User_AddFlags(AB_USER *u, uint32_t f) { AO_USER *ue; ue=GWEN_INHERIT_GETDATA(AB_USER, AO_USER, u); assert(ue); ue->flags|=f; } void AO_User_SubFlags(AB_USER *u, uint32_t f) { AO_USER *ue; ue=GWEN_INHERIT_GETDATA(AB_USER, AO_USER, u); assert(ue); ue->flags&=~f; } const char *AO_User_GetAppId(const AB_USER *u) { AO_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AO_USER, u); assert(ue); return ue->appId; } void AO_User_SetAppId(AB_USER *u, const char *s) { AO_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AO_USER, u); assert(ue); free(ue->appId); if (s) ue->appId=strdup(s); else ue->appId=NULL; } const char *AO_User_GetAppVer(const AB_USER *u) { AO_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AO_USER, u); assert(ue); return ue->appVer; } void AO_User_SetAppVer(AB_USER *u, const char *s) { AO_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AO_USER, u); assert(ue); free(ue->appVer); if (s) ue->appVer=strdup(s); else ue->appVer=NULL; } const char *AO_User_GetHeaderVer(const AB_USER *u) { AO_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AO_USER, u); assert(ue); return ue->headerVer; } void AO_User_SetHeaderVer(AB_USER *u, const char *s) { AO_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AO_USER, u); assert(ue); free(ue->headerVer); if (s) ue->headerVer=strdup(s); else ue->headerVer=NULL; } const char *AO_User_GetClientUid(const AB_USER *u) { AO_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AO_USER, u); assert(ue); return ue->clientUid; } void AO_User_SetClientUid(AB_USER *u, const char *s) { AO_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AO_USER, u); assert(ue); free(ue->clientUid); if (s) ue->clientUid=strdup(s); else ue->clientUid=NULL; } const char *AO_User_GetSecurityType(const AB_USER *u) { AO_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AO_USER, u); assert(ue); return ue->securityType; } void AO_User_SetSecurityType(AB_USER *u, const char *s) { AO_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AO_USER, u); assert(ue); free(ue->securityType); if (s) ue->securityType=strdup(s); else ue->securityType=NULL; } int AO_User_GetHttpVMajor(const AB_USER *u) { AO_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AO_USER, u); assert(ue); return ue->httpVMajor; } void AO_User_SetHttpVMajor(AB_USER *u, int i) { AO_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AO_USER, u); assert(ue); ue->httpVMajor=i; } int AO_User_GetHttpVMinor(const AB_USER *u) { AO_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AO_USER, u); assert(ue); return ue->httpVMinor; } void AO_User_SetHttpVMinor(AB_USER *u, int i) { AO_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AO_USER, u); assert(ue); ue->httpVMinor=i; } const char *AO_User_GetHttpUserAgent(const AB_USER *u) { AO_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AO_USER, u); assert(ue); return ue->httpUserAgent; } void AO_User_SetHttpUserAgent(AB_USER *u, const char *s) { AO_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AO_USER, u); assert(ue); free(ue->httpUserAgent); if (s) ue->httpUserAgent=strdup(s); else ue->httpUserAgent=NULL; } aqbanking-6.6.1/src/libs/plugins/backends/aqofxconnect/account.h0000664000175000017500000000161214043610745021656 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AO_ACCOUNT_H #define AO_ACCOUNT_H #include #include #ifdef __cplusplus extern "C" { #endif AB_ACCOUNT *AO_Account_new(AB_PROVIDER *pro); int AO_Account_GetMaxPurposeLines(const AB_ACCOUNT *a); void AO_Account_SetMaxPurposeLines(AB_ACCOUNT *a, int i); int AO_Account_GetDebitAllowed(const AB_ACCOUNT *a); void AO_Account_SetDebitAllowed(AB_ACCOUNT *a, int i); #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/plugins/backends/aqofxconnect/v1/0000755000175000017500000000000015037736163020464 500000000000000aqbanking-6.6.1/src/libs/plugins/backends/aqofxconnect/v1/n_toofx.c0000664000175000017500000000713014044534776022232 00000000000000/*************************************************************************** begin : Mon Jan 13 2020 copyright : (C) 2020 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "n_toofx.h" #include "aqofxconnect/common/n_utils.h" #include "aqofxconnect/user.h" #include /* ------------------------------------------------------------------------------------------------ * forward declarations * ------------------------------------------------------------------------------------------------ */ static int _writeToStream(const GWEN_XMLNODE *n, GWEN_BUFFER *buf, const char *encoding); static int _writeElementToStream(const GWEN_XMLNODE *n, GWEN_BUFFER *buf, const char *encoding); static int _writeDataToStream(const GWEN_XMLNODE *n, GWEN_BUFFER *buf, const char *encoding); /* ------------------------------------------------------------------------------------------------ * implementations * ------------------------------------------------------------------------------------------------ */ int AO_V1_XmlToOfx(GWEN_XMLNODE *xmlNode, GWEN_BUFFER *buf, const char *encoding) { int rv; rv=_writeElementToStream(xmlNode, buf, encoding); if (rv<0) { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "here (%d)", rv); return rv; } return 0; } int _writeToStream(const GWEN_XMLNODE *n, GWEN_BUFFER *buf, const char *encoding) { int rv; assert(n); switch (GWEN_XMLNode_GetType(n)) { case GWEN_XMLNodeTypeTag: rv=_writeElementToStream(n, buf, encoding); if (rv<0) { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "here (%d)", rv); return rv; } break; case GWEN_XMLNodeTypeData: rv=_writeDataToStream(n, buf, encoding); if (rv<0) { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "here (%d)", rv); return rv; } break; default: DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "Ignoring type %d", GWEN_XMLNode_GetType(n)); } return 0; } int _writeElementToStream(const GWEN_XMLNODE *n, GWEN_BUFFER *buf, const char *encoding) { int rv; int hasSubTags; GWEN_XMLNODE *c; const char *sData; sData=GWEN_XMLNode_GetData(n); /* write element opening ("'); hasSubTags=(GWEN_XMLNode_GetFirstTag(n)!=NULL); if (hasSubTags) GWEN_Buffer_AppendString(buf, "\r\n"); /* write children */ c=GWEN_XMLNode_GetChild(n); while (c) { rv=_writeToStream(c, buf, encoding); if (rv<0) { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "here (%d)", rv); return rv; } c=GWEN_XMLNode_Next(c); } if (hasSubTags) { /* write closing tag ("") */ GWEN_Buffer_AppendString(buf, "'); } GWEN_Buffer_AppendString(buf, "\r\n"); return 0; } int _writeDataToStream(const GWEN_XMLNODE *n, GWEN_BUFFER *buf, const char *encoding) { const char *sData; sData=GWEN_XMLNode_GetData(n); if (sData) { int rv=0; rv=GWEN_Text_ConvertCharset("UTF-8", encoding, sData, strlen(sData), buf); if (rv<0) { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "here (%d)", rv); return rv; } } return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqofxconnect/v1/n_header.h0000664000175000017500000000143614043610745022321 00000000000000/*************************************************************************** begin : Mon Jan 13 2020 copyright : (C) 2020 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AO_V1_N_MESSAGE_H #define AO_V1_N_MESSAGE_H /* plugin headers */ #include /* aqbanking headers */ #include /* gwenhywfar headers */ #include #include int AO_V1_AddOfxHeaders(AB_PROVIDER *pro, AB_USER *u, GWEN_BUFFER *buf, const char *encoding); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqofxconnect/v1/r_accounts.h0000664000175000017500000000144014043610745022707 00000000000000/*************************************************************************** begin : Mon Jan 13 2020 copyright : (C) 2020 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AO_V1_R_ACCOUNTS_H #define AO_V1_R_ACCOUNTS_H /* plugin headers */ #include /* aqbanking headers */ #include #include #include int AO_V1_RequestAccounts(AB_PROVIDER *pro, AB_USER *u, AB_IMEXPORTER_CONTEXT *ctx); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqofxconnect/v1/r_statements.c0000664000175000017500000000761514044534776023276 00000000000000/*************************************************************************** begin : Mon Jan 13 2020 copyright : (C) 2020 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "r_statements.h" #include "n_header.h" #include "n_toofx.h" #include "aqofxconnect/common/n_signon.h" #include "aqofxconnect/common/n_statement.h" #include "aqofxconnect/common/io_network.h" #include #include "aqbanking/i18n_l.h" #include #include int AO_V1_RequestStatements(AB_PROVIDER *pro, AB_USER *u, AB_ACCOUNT *a, AB_TRANSACTION *j, AB_IMEXPORTER_CONTEXT *ctx) { AB_BANKING *ab; GWEN_XMLNODE *xmlRoot; GWEN_XMLNODE *xmlOfx; GWEN_XMLNODE *xmlNode; GWEN_BUFFER *bufRequest; GWEN_BUFFER *bufResponse=NULL; int rv; ab=AB_Provider_GetBanking(pro); assert(ab); /* prepare XML request */ xmlRoot=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "root"); xmlOfx=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "OFX"); GWEN_XMLNode_AddChild(xmlRoot, xmlOfx); xmlNode=AO_Provider_MkSignOnNode(u); if (xmlNode) GWEN_XMLNode_AddChild(xmlOfx, xmlNode); xmlNode=AO_Provider_MkStatementRqNode(u, a, j); if (xmlNode) GWEN_XMLNode_AddChild(xmlOfx, xmlNode); /* create and fill request buffer */ bufRequest=GWEN_Buffer_new(0, 256, 0, 1); rv=AO_V1_AddOfxHeaders(pro, u, bufRequest, "USASCII"); if (rv<0) { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(bufRequest); GWEN_XMLNode_free(xmlRoot); return rv; } rv=AO_V1_XmlToOfx(xmlOfx, bufRequest, "USASCII"); if (rv<0) { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(bufRequest); GWEN_XMLNode_free(xmlRoot); return rv; } GWEN_XMLNode_free(xmlRoot); #if 0 DBG_ERROR(AQOFXCONNECT_LOGDOMAIN, "OFX request:"); fprintf(stderr, "%s\n", GWEN_Buffer_GetStart(bufRequest)); GWEN_Text_LogString(GWEN_Buffer_GetStart(bufRequest), GWEN_Buffer_GetUsedBytes(bufRequest), AQOFXCONNECT_LOGDOMAIN, GWEN_LoggerLevel_Error); #endif /* exchange messages */ rv=AO_Provider_SendAndReceive(pro, u, (const uint8_t *) GWEN_Buffer_GetStart(bufRequest), GWEN_Buffer_GetUsedBytes(bufRequest), &bufResponse); if (rv) { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(bufRequest); return rv; } GWEN_Buffer_free(bufRequest); #if 0 DBG_ERROR(AQOFXCONNECT_LOGDOMAIN, "OFX response:"); GWEN_Text_LogString(GWEN_Buffer_GetStart(bufResponse), GWEN_Buffer_GetUsedBytes(bufResponse), AQOFXCONNECT_LOGDOMAIN, GWEN_LoggerLevel_Error); #endif /* parse response */ GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Info, I18N("Parsing response...")); DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "Importing OFX version 1 (sgml)"); rv=AB_Banking_ImportFromBufferLoadProfile(ab, "ofx", ctx, "default", NULL, (const uint8_t *) GWEN_Buffer_GetStart(bufResponse), GWEN_Buffer_GetUsedBytes(bufResponse)); if (rv<0) { DBG_ERROR(AQOFXCONNECT_LOGDOMAIN, "Bad data in OFX response (error: %d):", rv); GWEN_Text_LogString(GWEN_Buffer_GetStart(bufResponse), GWEN_Buffer_GetUsedBytes(bufResponse), AQOFXCONNECT_LOGDOMAIN, GWEN_LoggerLevel_Error); GWEN_Buffer_free(bufResponse); return rv; } GWEN_Buffer_free(bufResponse); return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqofxconnect/v1/r_accounts.c0000664000175000017500000001003514044534776022714 00000000000000/*************************************************************************** begin : Mon Jan 13 2020 copyright : (C) 2020 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "r_accounts.h" #include "n_header.h" #include "n_toofx.h" #include "aqofxconnect/common/n_signon.h" #include "aqofxconnect/common/n_acctinfo.h" #include "aqofxconnect/common/n_utils.h" #include "aqofxconnect/common/io_network.h" #include #include "aqbanking/i18n_l.h" #include #include int AO_V1_RequestAccounts(AB_PROVIDER *pro, AB_USER *u, AB_IMEXPORTER_CONTEXT *ctx) { AB_BANKING *ab; GWEN_XMLNODE *xmlRoot; GWEN_XMLNODE *xmlOfx; GWEN_XMLNODE *xmlNode; GWEN_BUFFER *bufRequest; GWEN_BUFFER *bufResponse=NULL; int rv; ab=AB_Provider_GetBanking(pro); assert(ab); /* prepare XML request */ xmlRoot=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "root"); xmlOfx=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "OFX"); GWEN_XMLNode_AddChild(xmlRoot, xmlOfx); xmlNode=AO_Provider_MkSignOnNode(u); if (xmlNode) GWEN_XMLNode_AddChild(xmlOfx, xmlNode); xmlNode=AO_Provider_MkAcctInfoRqNode(u); if (xmlNode) GWEN_XMLNode_AddChild(xmlOfx, xmlNode); /* create and fill request buffer */ bufRequest=GWEN_Buffer_new(0, 256, 0, 1); rv=AO_V1_AddOfxHeaders(pro, u, bufRequest, "USASCII"); if (rv<0) { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(bufRequest); GWEN_XMLNode_free(xmlRoot); return rv; } rv=AO_V1_XmlToOfx(xmlOfx, bufRequest, "USASCII"); if (rv<0) { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(bufRequest); GWEN_XMLNode_free(xmlRoot); return rv; } GWEN_XMLNode_free(xmlRoot); #if 0 DBG_ERROR(AQOFXCONNECT_LOGDOMAIN, "OFX request:"); fprintf(stderr, "%s\n", GWEN_Buffer_GetStart(bufRequest)); GWEN_Text_LogString(GWEN_Buffer_GetStart(bufRequest), GWEN_Buffer_GetUsedBytes(bufRequest), AQOFXCONNECT_LOGDOMAIN, GWEN_LoggerLevel_Error); #endif /* exchange messages */ rv=AO_Provider_SendAndReceive(pro, u, (const uint8_t *) GWEN_Buffer_GetStart(bufRequest), GWEN_Buffer_GetUsedBytes(bufRequest), &bufResponse); if (rv) { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(bufRequest); return rv; } GWEN_Buffer_free(bufRequest); if (bufResponse==NULL) { DBG_ERROR(AQOFXCONNECT_LOGDOMAIN, "No response received, not expected."); return GWEN_ERROR_GENERIC; } #if 0 DBG_ERROR(AQOFXCONNECT_LOGDOMAIN, "OFX response:"); GWEN_Text_LogString(GWEN_Buffer_GetStart(bufResponse), GWEN_Buffer_GetUsedBytes(bufResponse), AQOFXCONNECT_LOGDOMAIN, GWEN_LoggerLevel_Error); #endif /* parse response */ GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Info, I18N("Parsing response...")); DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "Importing OFX version 1 (sgml)"); rv=AB_Banking_ImportFromBufferLoadProfile(ab, "ofx", ctx, "default", NULL, (const uint8_t *) GWEN_Buffer_GetStart(bufResponse), GWEN_Buffer_GetUsedBytes(bufResponse)); if (rv<0) { DBG_ERROR(AQOFXCONNECT_LOGDOMAIN, "Bad data in OFX response (error: %d):", rv); GWEN_Text_LogString(GWEN_Buffer_GetStart(bufResponse), GWEN_Buffer_GetUsedBytes(bufResponse), AQOFXCONNECT_LOGDOMAIN, GWEN_LoggerLevel_Error); GWEN_Buffer_free(bufResponse); return rv; } GWEN_Buffer_free(bufResponse); AO_Provider_Util_ListAccounts(ctx); return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqofxconnect/v1/r_statements.h0000664000175000017500000000167414043610745023270 00000000000000/*************************************************************************** begin : Mon Jan 13 2020 copyright : (C) 2020 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AO_V1_R_STATEMENTS_H #define AO_V1_R_STATEMENTS_H /* plugin headers */ #include /* aqbanking headers */ #include #include #include #include #include int AO_V1_RequestStatements(AB_PROVIDER *pro, AB_USER *u, AB_ACCOUNT *a, AB_TRANSACTION *j, AB_IMEXPORTER_CONTEXT *ictx); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqofxconnect/v1/n_header.c0000664000175000017500000000335414044534776022327 00000000000000/*************************************************************************** begin : Mon Jan 13 2020 copyright : (C) 2020 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "n_header.h" #include "aqofxconnect/common/n_utils.h" #include "aqofxconnect/user.h" #include /* * */ int AO_V1_AddOfxHeaders(AB_PROVIDER *pro, AB_USER *u, GWEN_BUFFER *buf, const char *encoding) { GWEN_TIME *ti; const char *s; ti=GWEN_CurrentTime(); assert(ti); GWEN_Buffer_AppendString(buf, "OFXHEADER:100\r\n"); GWEN_Buffer_AppendString(buf, "DATA:OFXSGML\r\n"); GWEN_Buffer_AppendString(buf, "VERSION:"); s=AO_User_GetHeaderVer(u); if (!s || !*s) s="102"; GWEN_Buffer_AppendString(buf, s); GWEN_Buffer_AppendString(buf, "\r\n"); s=AO_User_GetSecurityType(u); if (!s || !*s) s="NONE"; GWEN_Buffer_AppendString(buf, "SECURITY:"); GWEN_Buffer_AppendString(buf, s); GWEN_Buffer_AppendString(buf, "\r\n"); GWEN_Buffer_AppendString(buf, "ENCODING:"); GWEN_Buffer_AppendString(buf, encoding?encoding:"USASCII"); GWEN_Buffer_AppendString(buf, "\r\n"); GWEN_Buffer_AppendString(buf, "CHARSET:1252\r\n" "COMPRESSION:NONE\r\n" "OLDFILEUID:NONE\r\n" "NEWFILEUID:NONE\r\n"); /* header finished */ GWEN_Buffer_AppendString(buf, "\r\n"); /* cleanup */ GWEN_Time_free(ti); /* done */ return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqofxconnect/v1/Makefile.in0000644000175000017500000006534315037736026022462 00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/libs/plugins/backends/aqofxconnect/v1 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/distri.m4 $(top_srcdir)/m4/gwenhywfar.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/os.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libofxdcv1_la_LIBADD = am__objects_1 = am_libofxdcv1_la_OBJECTS = $(am__objects_1) n_header.lo n_toofx.lo \ r_accounts.lo r_statements.lo libofxdcv1_la_OBJECTS = $(am_libofxdcv1_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/n_header.Plo ./$(DEPDIR)/n_toofx.Plo \ ./$(DEPDIR)/r_accounts.Plo ./$(DEPDIR)/r_statements.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libofxdcv1_la_SOURCES) DIST_SOURCES = $(libofxdcv1_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(dlgdatadir)" DATA = $(dlgdata_DATA) HEADERS = $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADD_ACLOCAL_FLAGS = @ADD_ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AQBANKING_CLI_VERSION_STRING = @AQBANKING_CLI_VERSION_STRING@ AQBANKING_FINTS_VERSION_STRING = @AQBANKING_FINTS_VERSION_STRING@ AQBANKING_SO_AGE = @AQBANKING_SO_AGE@ AQBANKING_SO_CURRENT = @AQBANKING_SO_CURRENT@ AQBANKING_SO_EFFECTIVE = @AQBANKING_SO_EFFECTIVE@ AQBANKING_SO_REVISION = @AQBANKING_SO_REVISION@ AQBANKING_VERSION_BUILD = @AQBANKING_VERSION_BUILD@ AQBANKING_VERSION_FULL_STRING = @AQBANKING_VERSION_FULL_STRING@ AQBANKING_VERSION_MAJOR = @AQBANKING_VERSION_MAJOR@ AQBANKING_VERSION_MINOR = @AQBANKING_VERSION_MINOR@ AQBANKING_VERSION_PATCHLEVEL = @AQBANKING_VERSION_PATCHLEVEL@ AQBANKING_VERSION_RELEASE_STRING = @AQBANKING_VERSION_RELEASE_STRING@ AQBANKING_VERSION_STRING = @AQBANKING_VERSION_STRING@ AQBANKING_VERSION_TAG = @AQBANKING_VERSION_TAG@ AQEBICS_CFLAGS = @AQEBICS_CFLAGS@ AQEBICS_LIBS = @AQEBICS_LIBS@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATETIME = @DATETIME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_EXCLUDE_PATTERNS = @DOXYGEN_EXCLUDE_PATTERNS@ DOXYGEN_FILE_PATTERNS = @DOXYGEN_FILE_PATTERNS@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENGUI_GTK2_CFLAGS = @GWENGUI_GTK2_CFLAGS@ GWENGUI_GTK2_LIBS = @GWENGUI_GTK2_LIBS@ GWENHYWFAR_MINIMUM_VERSION = @GWENHYWFAR_MINIMUM_VERSION@ HAVE_GWENGUI_GTK2 = @HAVE_GWENGUI_GTK2@ HAVE_I18N = @HAVE_I18N@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIBXSLT_CFLAGS = @LIBXSLT_CFLAGS@ LIBXSLT_LIBS = @LIBXSLT_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_SUPPORTS_QT = @MSGFMT_SUPPORTS_QT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ TUTORIALS = @TUTORIALS@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XMLMERGE = @XMLMERGE@ XMLSEC_CFLAGS = @XMLSEC_CFLAGS@ XMLSEC_LIBS = @XMLSEC_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ aqbanking_backends = @aqbanking_backends@ aqbanking_cfg_searchdir = @aqbanking_cfg_searchdir@ aqbanking_data_searchdir = @aqbanking_data_searchdir@ aqbanking_headerdir = @aqbanking_headerdir@ aqbanking_headerdir_am = @aqbanking_headerdir_am@ aqbanking_includes = @aqbanking_includes@ aqbanking_internal_libs = @aqbanking_internal_libs@ aqbanking_ldflags = @aqbanking_ldflags@ aqbanking_libs = @aqbanking_libs@ aqbanking_locale_searchdir = @aqbanking_locale_searchdir@ aqbanking_modules = @aqbanking_modules@ aqbanking_pkgdatadir = @aqbanking_pkgdatadir@ aqbanking_plugin_searchdir = @aqbanking_plugin_searchdir@ aqbanking_plugindir = @aqbanking_plugindir@ aqbanking_plugins_backends_dirs = @aqbanking_plugins_backends_dirs@ aqbanking_plugins_backends_libs = @aqbanking_plugins_backends_libs@ aqbanking_plugins_bankinfo_dirs = @aqbanking_plugins_bankinfo_dirs@ aqbanking_plugins_bankinfo_libs = @aqbanking_plugins_bankinfo_libs@ aqbanking_plugins_imexporters_dirs = @aqbanking_plugins_imexporters_dirs@ aqbanking_plugins_imexporters_libs = @aqbanking_plugins_imexporters_libs@ aqbanking_plugins_parsers_dirs = @aqbanking_plugins_parsers_dirs@ aqbanking_symlinkdir = @aqbanking_symlinkdir@ aqbanking_sys_is_windows = @aqbanking_sys_is_windows@ aqbankingpp_modules = @aqbankingpp_modules@ aqebics_datadir = @aqebics_datadir@ aqebics_includes = @aqebics_includes@ aqebics_internal_libs = @aqebics_internal_libs@ aqebics_ldflags = @aqebics_ldflags@ aqebics_libs = @aqebics_libs@ aqfints_datadir = @aqfints_datadir@ aqhbci_datadir = @aqhbci_datadir@ aqhbci_includes = @aqhbci_includes@ aqhbci_internal_libs = @aqhbci_internal_libs@ aqhbci_ldflags = @aqhbci_ldflags@ aqhbci_libs = @aqhbci_libs@ aqofxconnect_includes = @aqofxconnect_includes@ aqofxconnect_internal_libs = @aqofxconnect_internal_libs@ aqofxconnect_libs = @aqofxconnect_libs@ aqpaypal_includes = @aqpaypal_includes@ aqpaypal_internal_libs = @aqpaypal_internal_libs@ aqpaypal_libs = @aqpaypal_libs@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gmp_libs = @gmp_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_dir = @gwenhywfar_dir@ gwenhywfar_has_crypt = @gwenhywfar_has_crypt@ gwenhywfar_headers = @gwenhywfar_headers@ gwenhywfar_includes = @gwenhywfar_includes@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_plugins = @gwenhywfar_plugins@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ typemaker2_exe = @typemaker2_exe@ visibility_cflags = @visibility_cflags@ with_aqebics = @with_aqebics@ with_aqhbci = @with_aqhbci@ AM_CPPFLAGS = -I$(top_srcdir)/src/libs -I$(top_builddir)/src/libs $(gwenhywfar_includes) \ -I$(srcdir)/../../ \ -I$(srcdir)/.. \ -I$(srcdir)/../common AM_CFLAGS = -DBUILDING_AQBANKING @visibility_cflags@ typefiles = dlgdatadir = $(aqbanking_pkgdatadir)/backends/aqofxconnect/dialogs dlgdata_DATA = build_sources = build_headers_priv = build_headers_pub = build_headers = $(build_headers_priv) $(build_headers_pub) noinst_HEADERS = $(build_headers_priv) $(build_headers_pub) \ n_header.h \ n_toofx.h \ r_accounts.h \ r_statements.h #iheaderdir=@aqbanking_headerdir_am@/aqofxconnect #iheader_HEADERS= noinst_LTLIBRARIES = libofxdcv1.la libofxdcv1_la_SOURCES = $(build_sources) \ n_header.c \ n_toofx.c \ r_accounts.c \ r_statements.c EXTRA_DIST = $(typefiles) $(dlgdata_DATA) $(dlgimage_DATA) $(build_sources) $(build_headers) all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libs/plugins/backends/aqofxconnect/v1/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libs/plugins/backends/aqofxconnect/v1/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libofxdcv1.la: $(libofxdcv1_la_OBJECTS) $(libofxdcv1_la_DEPENDENCIES) $(EXTRA_libofxdcv1_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libofxdcv1_la_OBJECTS) $(libofxdcv1_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/n_header.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/n_toofx.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/r_accounts.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/r_statements.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-dlgdataDATA: $(dlgdata_DATA) @$(NORMAL_INSTALL) @list='$(dlgdata_DATA)'; test -n "$(dlgdatadir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(dlgdatadir)'"; \ $(MKDIR_P) "$(DESTDIR)$(dlgdatadir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(dlgdatadir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(dlgdatadir)" || exit $$?; \ done uninstall-dlgdataDATA: @$(NORMAL_UNINSTALL) @list='$(dlgdata_DATA)'; test -n "$(dlgdatadir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(dlgdatadir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(dlgdatadir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/n_header.Plo -rm -f ./$(DEPDIR)/n_toofx.Plo -rm -f ./$(DEPDIR)/r_accounts.Plo -rm -f ./$(DEPDIR)/r_statements.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dlgdataDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/n_header.Plo -rm -f ./$(DEPDIR)/n_toofx.Plo -rm -f ./$(DEPDIR)/r_accounts.Plo -rm -f ./$(DEPDIR)/r_statements.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-dlgdataDATA .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-generic clean-libtool clean-noinstLTLIBRARIES \ cscopelist-am ctags ctags-am distclean distclean-compile \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dlgdataDATA install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \ uninstall-dlgdataDATA .PRECIOUS: Makefile built_sources: $(build_sources) sources: for f in $(libofxdcv1_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for f in $(dlgdata_DATA); do \ echo $(subdir)/$$f >>$(top_srcdir)/dlgsources; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d sources; \ done cppcheck: for f in $(libofxdcv1_la_SOURCES); do \ cppcheck --force $$f ; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done typefiles: $(typefiles) $(typemaker2_exe) -I $(top_srcdir)/src/libs/aqbanking/typemaker2/c -I $(gwenhywfar_dir)/share/gwenhywfar/typemaker2/c -I $(srcdir) --destfolder="$(srcdir)" $(typefiles) typedefs: $(typefiles) $(typemaker2_exe) --defs-only -I $(top_srcdir)/src/libs/aqbanking/typemaker2/c -I $(gwenhywfar_dir)/share/gwenhywfar/typemaker2/c -I $(srcdir) --destfolder="$(srcdir)" $(typefiles) # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: aqbanking-6.6.1/src/libs/plugins/backends/aqofxconnect/v1/n_toofx.h0000664000175000017500000000141614043610745022226 00000000000000/*************************************************************************** begin : Mon Jan 13 2020 copyright : (C) 2020 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AO_V1_N_TOOFX_H #define AO_V1_N_TOOFX_H /* plugin headers */ #include /* aqbanking headers */ #include /* gwenhywfar headers */ #include #include int AO_V1_XmlToOfx(GWEN_XMLNODE *xmlNode, GWEN_BUFFER *buf, const char *encoding); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqofxconnect/v1/Makefile.am0000664000175000017500000000324614043610745022440 00000000000000AM_CPPFLAGS = -I$(top_srcdir)/src/libs -I$(top_builddir)/src/libs $(gwenhywfar_includes) \ -I$(srcdir)/../../ \ -I$(srcdir)/.. \ -I$(srcdir)/../common AM_CFLAGS=-DBUILDING_AQBANKING @visibility_cflags@ typefiles= dlgdatadir=$(aqbanking_pkgdatadir)/backends/aqofxconnect/dialogs dlgdata_DATA= build_sources= build_headers_priv= build_headers_pub= build_headers=$(build_headers_priv) $(build_headers_pub) noinst_HEADERS=$(build_headers_priv) $(build_headers_pub) \ n_header.h \ n_toofx.h \ r_accounts.h \ r_statements.h #iheaderdir=@aqbanking_headerdir_am@/aqofxconnect #iheader_HEADERS= noinst_LTLIBRARIES=libofxdcv1.la libofxdcv1_la_SOURCES= $(build_sources) \ n_header.c \ n_toofx.c \ r_accounts.c \ r_statements.c EXTRA_DIST=$(typefiles) $(dlgdata_DATA) $(dlgimage_DATA) $(build_sources) $(build_headers) built_sources: $(build_sources) sources: for f in $(libofxdcv1_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for f in $(dlgdata_DATA); do \ echo $(subdir)/$$f >>$(top_srcdir)/dlgsources; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d sources; \ done cppcheck: for f in $(libofxdcv1_la_SOURCES); do \ cppcheck --force $$f ; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done typefiles: $(typefiles) $(typemaker2_exe) -I $(top_srcdir)/src/libs/aqbanking/typemaker2/c -I $(gwenhywfar_dir)/share/gwenhywfar/typemaker2/c -I $(srcdir) --destfolder="$(srcdir)" $(typefiles) typedefs: $(typefiles) $(typemaker2_exe) --defs-only -I $(top_srcdir)/src/libs/aqbanking/typemaker2/c -I $(gwenhywfar_dir)/share/gwenhywfar/typemaker2/c -I $(srcdir) --destfolder="$(srcdir)" $(typefiles) aqbanking-6.6.1/src/libs/plugins/backends/aqofxconnect/user_p.h0000664000175000017500000000227414043610745021524 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AO_USER_P_H #define AO_USER_P_H #include typedef struct AO_USER AO_USER; struct AO_USER { uint32_t flags; char *bankName; char *brokerId; char *org; char *fid; char *serverAddr; char *appId; char *appVer; char *headerVer; char *clientUid; char *securityType; int httpVMajor; int httpVMinor; char *httpUserAgent; AB_USER_READFROMDB_FN readFromDbFn; AB_USER_WRITETODB_FN writeToDbFn; }; static void GWENHYWFAR_CB AO_User_freeData(void *bp, void *p); static void AO_User__ReadDb(AB_USER *u, GWEN_DB_NODE *db); static void AO_User__WriteDb(const AB_USER *u, GWEN_DB_NODE *db); static int AO_User_ReadFromDb(AB_USER *u, GWEN_DB_NODE *db); static int AO_User_WriteToDb(const AB_USER *u, GWEN_DB_NODE *db); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqofxconnect/aqofxconnect.h0000664000175000017500000000320514043610745022712 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AQOFXCONNECT_AQOFXCONNECT_H #define AQOFXCONNECT_AQOFXCONNECT_H #include /* ___________________________________________________________________________*/ #if 0 #ifdef BUILDING_AQOFXCONNECT # /* building AqOFXCONNECT */ # if AQBANKING_SYS_IS_WINDOWS # /* for windows */ # ifdef __declspec # define AQOFXCONNECT_API __declspec (dllexport) # else /* if __declspec */ # define AQOFXCONNECT_API # endif /* if NOT __declspec */ # else # /* for non-win32 */ # ifdef GCC_WITH_VISIBILITY_ATTRIBUTE # define AQOFXCONNECT_API __attribute__((visibility("default"))) # else # define AQOFXCONNECT_API # endif # endif #else # /* not building AqOFXCONNECT */ # if AQBANKING_SYS_IS_WINDOWS # /* for windows */ # ifdef __declspec # define AQOFXCONNECT_API __declspec (dllimport) # else /* if __declspec */ # define AQOFXCONNECT_API # endif /* if NOT __declspec */ # else # /* for non-win32 */ # define AQOFXCONNECT_API # endif #endif #endif /* ___________________________________________________________________________*/ /* no longer export symbols */ #define AQOFXCONNECT_API #define AQOFXCONNECT_LOGDOMAIN "aqofxconnect" #endif /* AQOFXCONNECT_AQOFXCONNECT_H */ aqbanking-6.6.1/src/libs/plugins/backends/aqofxconnect/aqofxconnect.xml.in0000664000175000017500000000045514043610745023674 00000000000000 @AQOFXCONNECT_VERSION_STRING@ Martin Preuss(martin@libchipcard.de) OFX-DirectConnect backend This backend provides support for OFX-DirectConnect. aqbanking-6.6.1/src/libs/plugins/backends/aqofxconnect/provider.c0000664000175000017500000003236614043610745022061 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2020 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #define AO_PROVIDER_HEAVY_DEBUG #include "provider_p.h" #include "aqofxconnect/account.h" #include "aqofxconnect/user.h" #include "aqofxconnect/dialogs/dlg_edituser_l.h" #include "aqofxconnect/dialogs/dlg_newuser_l.h" #include "aqofxconnect/control/control.h" #include "aqofxconnect/v1/r_statements.h" #include "aqofxconnect/v1/r_accounts.h" #include "aqofxconnect/v2/r_statements.h" #include "aqofxconnect/v2/r_accounts.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define I18N(msg) GWEN_I18N_Translate(PACKAGE, msg) #define I18S(msg) msg GWEN_INHERIT(AB_PROVIDER, AO_PROVIDER) static AO_APPINFO _appInfos[]= { /* got this list from https://microsoftmoneyoffline.wordpress.com/appid-appver/ */ { I18S("Intuit Quicken Windows 2020"), "QWIN", "2900"}, { I18S("Intuit Quicken Windows 2017"), "QWIN", "2600"}, { I18S("Intuit Quicken Windows 2016"), "QWIN", "2500"}, { I18S("Intuit Quicken Windows 2015"), "QWIN", "2400"}, { I18S("Intuit Quicken Windows 2014"), "QWIN", "2300"}, { I18S("Intuit Quicken Windows 2013"), "QWIN", "2200"}, { I18S("Intuit Quicken Windows 2012"), "QWIN", "2100"}, { I18S("Intuit Quicken Windows 2011"), "QWIN", "2000"}, { I18S("Intuit Quicken Windows 2010"), "QWIN", "1900"}, { I18S("Intuit Quicken Windows 2009"), "QWIN", "1800"}, { I18S("Intuit Quicken Windows 2008"), "QWIN", "1700"}, { I18S("Intuit Quicken Windows 2007"), "QWIN", "1600"}, { I18S("Intuit Quicken Windows 2006"), "QWIN", "1500"}, { I18S("Intuit Quicken Windows 2005"), "QWIN", "1400"}, { I18S("Intuit Quicken Mac 2008"), "QMOFX", "1700"}, { I18S("Intuit Quicken Mac 2007"), "QMOFX", "1600"}, { I18S("Intuit Quicken Mac 2006"), "QMOFX", "1500"}, { I18S("Intuit Quicken Mac 2005"), "QMOFX", "1400"}, { I18S("Intuit QuickBooks Windows 2008"), "QBW", "1800"}, { I18S("Intuit QuickBooks Windows 2007"), "QBW", "1700"}, { I18S("Intuit QuickBooks Windows 2006"), "QBW", "1600"}, { I18S("Intuit QuickBooks Windows 2005"), "QBW", "1500"}, { I18S("Microsoft Money Plus"), "Money Plus", "1700"}, { I18S("Microsoft Money 2007"), "Money", "1600"}, { I18S("Microsoft Money 2006"), "Money", "1500"}, { I18S("Microsoft Money 2005"), "Money", "1400"}, { I18S("Microsoft Money 2004"), "Money", "1200"}, { I18S("Microsoft Money 2003"), "Money", "1100"}, { I18S("ProSaldo Money 2013"), "PROSALDO", "11005"}, { NULL, NULL, NULL} }; AB_PROVIDER *AO_Provider_new(AB_BANKING *ab) { AB_PROVIDER *pro; AO_PROVIDER *dp; pro=AB_Provider_new(ab, "aqofxconnect"); GWEN_NEW_OBJECT(AO_PROVIDER, dp); GWEN_INHERIT_SETDATA(AB_PROVIDER, AO_PROVIDER, pro, dp, AO_Provider_FreeData); AB_Provider_SetInitFn(pro, AO_Provider_Init); AB_Provider_SetFiniFn(pro, AO_Provider_Fini); AB_Provider_SetSendCommandsFn(pro, AO_Provider_SendCommands); AB_Provider_SetCreateAccountObjectsFn(pro, AO_Provider_CreateAccountObject); AB_Provider_SetCreateUserObjectsFn(pro, AO_Provider_CreateUserObject); AB_Provider_SetGetEditUserDialogFn(pro, AO_Provider_GetEditUserDialog); AB_Provider_AddFlags(pro, AB_PROVIDER_FLAGS_HAS_EDITUSER_DIALOG); AB_Provider_SetCreateAccountObjectsFn(pro, AO_Provider_CreateAccountObject); AB_Provider_SetCreateUserObjectsFn(pro, AO_Provider_CreateUserObject); AB_Provider_SetUpdateAccountSpecFn(pro, AO_Provider_UpdateAccountSpec); AB_Provider_SetControlFn(pro, AO_Control); AB_Provider_SetGetNewUserDialogFn(pro, AO_Provider_GetNewUserDialog); AB_Provider_AddFlags(pro, AB_PROVIDER_FLAGS_HAS_NEWUSER_DIALOG); return pro; } void GWENHYWFAR_CB AO_Provider_FreeData(void *bp, void *p) { AO_PROVIDER *dp; dp=(AO_PROVIDER *)p; assert(dp); GWEN_FREE_OBJECT(dp); } int AO_Provider_Init(AB_PROVIDER *pro, GWEN_DB_NODE *dbData) { AO_PROVIDER *dp; const char *logLevelName; uint32_t currentVersion; uint32_t lastVersion; assert(pro); dp=GWEN_INHERIT_GETDATA(AB_PROVIDER, AO_PROVIDER, pro); assert(dp); /* setup logging */ if (!GWEN_Logger_IsOpen(AQOFXCONNECT_LOGDOMAIN)) { GWEN_Logger_Open(AQOFXCONNECT_LOGDOMAIN, "aqofxconnect", 0, GWEN_LoggerType_Console, GWEN_LoggerFacility_User); } logLevelName=getenv("AQOFXCONNECT_LOGLEVEL"); if (logLevelName) { GWEN_LOGGER_LEVEL ll; ll=GWEN_Logger_Name2Level(logLevelName); if (ll!=GWEN_LoggerLevel_Unknown) { GWEN_Logger_SetLevel(AQOFXCONNECT_LOGDOMAIN, ll); DBG_WARN(AQOFXCONNECT_LOGDOMAIN, "Overriding loglevel for AqOFXConnect with \"%s\"", logLevelName); } else { DBG_ERROR(AQOFXCONNECT_LOGDOMAIN, "Unknown loglevel \"%s\"", logLevelName); } } DBG_NOTICE(AQOFXCONNECT_LOGDOMAIN, "Initializing AqOfxConnect backend"); dp->dbConfig=dbData; /* check whether we need to update */ currentVersion= (AQBANKING_VERSION_MAJOR<<24) | (AQBANKING_VERSION_MINOR<<16) | (AQBANKING_VERSION_PATCHLEVEL<<8) | AQBANKING_VERSION_BUILD; lastVersion=GWEN_DB_GetIntValue(dbData, "lastVersion", 0, 0); if (lastVersionlastJobId=GWEN_DB_GetIntValue(dp->dbConfig, "lastJobId", 0, 0); dp->connectTimeout=GWEN_DB_GetIntValue(dp->dbConfig, "connectTimeout", 0, AO_PROVIDER_CONNECT_TIMEOUT); dp->sendTimeout=GWEN_DB_GetIntValue(dp->dbConfig, "sendTimeout", 0, AO_PROVIDER_SEND_TIMEOUT); dp->recvTimeout=GWEN_DB_GetIntValue(dp->dbConfig, "recvTimeout", 0, AO_PROVIDER_RECV_TIMEOUT); /* update post-init */ if (lastVersionlastJobId); GWEN_DB_SetIntValue(dbData, GWEN_DB_FLAGS_OVERWRITE_VARS, "connectTimeout", dp->connectTimeout); GWEN_DB_SetIntValue(dbData, GWEN_DB_FLAGS_OVERWRITE_VARS, "sendTimeout", dp->sendTimeout); GWEN_DB_SetIntValue(dbData, GWEN_DB_FLAGS_OVERWRITE_VARS, "recvTimeout", dp->recvTimeout); dp->dbConfig=0; DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "Deinit done"); return 0; } AB_ACCOUNT *AO_Provider_CreateAccountObject(AB_PROVIDER *pro) { return AO_Account_new(pro); } AB_USER *AO_Provider_CreateUserObject(AB_PROVIDER *pro) { return AO_User_new(pro); } GWEN_DIALOG *AO_Provider_GetEditUserDialog(AB_PROVIDER *pro, AB_USER *u) { AO_PROVIDER *xp; GWEN_DIALOG *dlg; assert(pro); xp=GWEN_INHERIT_GETDATA(AB_PROVIDER, AO_PROVIDER, pro); assert(xp); dlg=AO_EditUserDialog_new(pro, u, 1); if (dlg==NULL) { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "here (no dialog)"); return NULL; } return dlg; } GWEN_DIALOG *AO_Provider_GetNewUserDialog(AB_PROVIDER *pro, int i) { AO_PROVIDER *xp; GWEN_DIALOG *dlg; assert(pro); xp=GWEN_INHERIT_GETDATA(AB_PROVIDER, AO_PROVIDER, pro); assert(xp); dlg=AO_NewUserDialog_new(pro); if (dlg==NULL) { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "here (no dialog)"); return NULL; } return dlg; } const AO_APPINFO *AO_Provider_GetAppInfos(AB_PROVIDER *pro) { return _appInfos; } int AO_Provider_GetCert(AB_PROVIDER *pro, AB_USER *u) { AO_PROVIDER *xp; int rv; const char *url; assert(pro); xp=GWEN_INHERIT_GETDATA(AB_PROVIDER, AO_PROVIDER, pro); assert(xp); url=AO_User_GetServerAddr(u); if (url && *url) { uint32_t uFlags; uint32_t hFlags=0; uint32_t pid; uFlags=AO_User_GetFlags(u); if (uFlags & AO_USER_FLAGS_FORCE_SSL3) hFlags|=GWEN_HTTP_SESSION_FLAGS_FORCE_SSL3; pid=GWEN_Gui_ProgressStart(GWEN_GUI_PROGRESS_ALLOW_EMBED | GWEN_GUI_PROGRESS_SHOW_PROGRESS | GWEN_GUI_PROGRESS_SHOW_ABORT, I18N("Getting Certificate"), I18N("We are now asking the server for its " "SSL certificate"), GWEN_GUI_PROGRESS_NONE, 0); rv=AB_Banking_GetCert(AB_Provider_GetBanking(pro), url, "https", 443, &hFlags, pid); if (rv<0) { GWEN_Gui_ProgressEnd(pid); return rv; } if (hFlags & GWEN_HTTP_SESSION_FLAGS_FORCE_SSL3) { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "Setting ForceSSLv3 flag"); uFlags|=AO_USER_FLAGS_FORCE_SSL3; } else { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "Clearing ForceSSLv3 flag"); uFlags&=~AO_USER_FLAGS_FORCE_SSL3; } AO_User_SetFlags(u, uFlags); GWEN_Gui_ProgressEnd(pid); return 0; } else { DBG_ERROR(AQOFXCONNECT_LOGDOMAIN, "No url"); return GWEN_ERROR_INVALID; } } int AO_Provider_RequestStatements(AB_PROVIDER *pro, AB_USER *u, AB_ACCOUNT *a, AB_TRANSACTION *j, AB_IMEXPORTER_CONTEXT *ictx) { int rv; if (1) { /* TODO: Select OFX version */ rv=AO_V1_RequestStatements(pro, u, a, j, ictx); } else { rv=AO_V2_RequestStatements(pro, u, a, j, ictx); } if (rv<0) { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "Error adding request element (%d)", rv); return rv; } return 0; } int AO_Provider_RequestAccounts(AB_PROVIDER *pro, AB_USER *u, int keepOpen) { AO_PROVIDER *dp; int rv; uint32_t pid; AB_IMEXPORTER_CONTEXT *ictx; assert(pro); dp=GWEN_INHERIT_GETDATA(AB_PROVIDER, AO_PROVIDER, pro); assert(dp); pid=GWEN_Gui_ProgressStart(GWEN_GUI_PROGRESS_ALLOW_SUBLEVELS | GWEN_GUI_PROGRESS_SHOW_PROGRESS | GWEN_GUI_PROGRESS_SHOW_LOG | GWEN_GUI_PROGRESS_ALWAYS_SHOW_LOG | (keepOpen?GWEN_GUI_PROGRESS_KEEP_OPEN:0) | GWEN_GUI_PROGRESS_SHOW_ABORT, I18N("Requesting account list"), I18N("We are now requesting a list of " "accounts\n" "which can be managed via OFX.\n" "" "We are now requesting a list of " "accounts " "which can be managed via OFX.\n" ""), 1, 0); ictx=AB_ImExporterContext_new(); if (1) { /* TODO: Select OFX version */ rv=AO_V1_RequestAccounts(pro, u, ictx); } else { rv=AO_V2_RequestAccounts(pro, u, ictx); } if (rv<0) { DBG_ERROR(AQOFXCONNECT_LOGDOMAIN, "here (%d)", rv); GWEN_Gui_ProgressEnd(pid); AB_ImExporterContext_free(ictx); return rv; } /* create accounts */ rv=AO_Provider__ProcessImporterContext(pro, u, ictx); if (rv<0) { DBG_ERROR(AQOFXCONNECT_LOGDOMAIN, "Error importing accounts (%d)", rv); GWEN_Gui_ProgressLog(pid, GWEN_LoggerLevel_Error, I18N("Error importing accounts")); AB_ImExporterContext_free(ictx); GWEN_Gui_ProgressEnd(pid); return rv; } AB_ImExporterContext_free(ictx); GWEN_Gui_ProgressEnd(pid); return 0; } #include "provider_accspec.c" #include "provider_sendcmd.c" #include "provider_update.c" aqbanking-6.6.1/src/libs/plugins/backends/aqofxconnect/v2/0000755000175000017500000000000015037736163020465 500000000000000aqbanking-6.6.1/src/libs/plugins/backends/aqofxconnect/v2/README0000664000175000017500000000016214043610745021257 00000000000000 This folder containts code implementing OFX v2 which is completely XML based and thus much easier to work with. aqbanking-6.6.1/src/libs/plugins/backends/aqofxconnect/v2/r_statements.c0000664000175000017500000000754714044534776023303 00000000000000/*************************************************************************** begin : Mon Jan 13 2020 copyright : (C) 2020 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "r_statements.h" #include "n_header.h" #include "aqofxconnect/common/n_signon.h" #include "aqofxconnect/common/n_statement.h" #include "aqofxconnect/common/io_network.h" #include #include "aqbanking/i18n_l.h" #include #include int AO_V2_RequestStatements(AB_PROVIDER *pro, AB_USER *u, AB_ACCOUNT *a, AB_TRANSACTION *j, AB_IMEXPORTER_CONTEXT *ctx) { AB_BANKING *ab; GWEN_XMLNODE *xmlRoot; GWEN_XMLNODE *xmlOfx; GWEN_XMLNODE *xmlNode; GWEN_BUFFER *bufRequest; GWEN_BUFFER *bufResponse=NULL; int rv; ab=AB_Provider_GetBanking(pro); assert(ab); /* prepare XML request */ xmlRoot=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "root"); xmlNode=AO_V2_MkXmlHeader(); if (xmlNode) GWEN_XMLNode_AddHeader(xmlRoot, xmlNode); xmlNode=AO_V2_MkOfxHeader(u); if (xmlNode) GWEN_XMLNode_AddHeader(xmlRoot, xmlNode); xmlOfx=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "OFX"); GWEN_XMLNode_AddChild(xmlRoot, xmlOfx); xmlNode=AO_Provider_MkSignOnNode(u); if (xmlNode) GWEN_XMLNode_AddChild(xmlOfx, xmlNode); xmlNode=AO_Provider_MkStatementRqNode(u, a, j); if (xmlNode) GWEN_XMLNode_AddChild(xmlOfx, xmlNode); bufRequest=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_XMLNode_toBuffer(xmlRoot, bufRequest, GWEN_XML_FLAGS_HANDLE_HEADERS | GWEN_XML_FLAGS_SIMPLE); if (rv<0) { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(bufRequest); GWEN_XMLNode_free(xmlRoot); return rv; } GWEN_XMLNode_free(xmlRoot); #if 0 DBG_ERROR(AQOFXCONNECT_LOGDOMAIN, "OFX request:"); fprintf(stderr, "%s\n", GWEN_Buffer_GetStart(bufRequest)); GWEN_Text_LogString(GWEN_Buffer_GetStart(bufRequest), GWEN_Buffer_GetUsedBytes(bufRequest), AQOFXCONNECT_LOGDOMAIN, GWEN_LoggerLevel_Error); #endif /* exchange messages */ rv=AO_Provider_SendAndReceive(pro, u, (const uint8_t *) GWEN_Buffer_GetStart(bufRequest), GWEN_Buffer_GetUsedBytes(bufRequest), &bufResponse); if (rv) { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(bufRequest); return rv; } GWEN_Buffer_free(bufRequest); #if 0 DBG_ERROR(AQOFXCONNECT_LOGDOMAIN, "OFX response:"); GWEN_Text_LogString(GWEN_Buffer_GetStart(bufResponse), GWEN_Buffer_GetUsedBytes(bufResponse), AQOFXCONNECT_LOGDOMAIN, GWEN_LoggerLevel_Error); #endif /* parse response */ GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Info, I18N("Parsing response...")); DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "Importing OFX version 2 (xml)"); rv=AB_Banking_ImportFromBufferLoadProfile(ab, "xml", ctx, "ofx2", NULL, (const uint8_t *) GWEN_Buffer_GetStart(bufResponse), GWEN_Buffer_GetUsedBytes(bufResponse)); if (rv<0) { DBG_ERROR(AQOFXCONNECT_LOGDOMAIN, "Bad data in OFX response (error: %d):", rv); GWEN_Text_LogString(GWEN_Buffer_GetStart(bufResponse), GWEN_Buffer_GetUsedBytes(bufResponse), AQOFXCONNECT_LOGDOMAIN, GWEN_LoggerLevel_Error); GWEN_Buffer_free(bufResponse); return rv; } GWEN_Buffer_free(bufResponse); return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqofxconnect/v2/n_header.h0000664000175000017500000000136514043610745022323 00000000000000/*************************************************************************** begin : Mon Jan 13 2020 copyright : (C) 2020 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AO_V2_N_MESSAGE_H #define AO_V2_N_MESSAGE_H /* plugin headers */ #include /* aqbanking headers */ #include /* gwenhywfar headers */ #include GWEN_XMLNODE *AO_V2_MkOfxHeader(AB_USER *u); GWEN_XMLNODE *AO_V2_MkXmlHeader(void); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqofxconnect/v2/r_accounts.h0000664000175000017500000000144014043610745022710 00000000000000/*************************************************************************** begin : Mon Jan 13 2020 copyright : (C) 2020 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AO_V2_R_ACCOUNTS_H #define AO_V2_R_ACCOUNTS_H /* plugin headers */ #include /* aqbanking headers */ #include #include #include int AO_V2_RequestAccounts(AB_PROVIDER *pro, AB_USER *u, AB_IMEXPORTER_CONTEXT *ctx); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqofxconnect/v2/n_header.c0000664000175000017500000000330214044534776022321 00000000000000/*************************************************************************** begin : Mon Jan 13 2020 copyright : (C) 2020 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "n_header.h" #include "aqofxconnect/common/n_utils.h" #include "aqofxconnect/user.h" #include /* * */ GWEN_XMLNODE *AO_V2_MkOfxHeader(AB_USER *u) { GWEN_XMLNODE *xmlOfx; const char *s; xmlOfx=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "?OFX"); GWEN_XMLNode_SetProperty(xmlOfx, "OFXHEADER", "200"); s=AO_User_GetHeaderVer(u); if (s && *s=='1') { DBG_ERROR(AQOFXCONNECT_LOGDOMAIN, "Invalid header version \"%s\", using \"200\" instead.", s); GWEN_Gui_ProgressLog2(0, GWEN_LoggerLevel_Warning, "Invalid header version \"%s\", using \"200\" instead.", s); s=NULL; } GWEN_XMLNode_SetProperty(xmlOfx, "VERSION", s?s:"200"); s=AO_User_GetSecurityType(u); GWEN_XMLNode_SetProperty(xmlOfx, "SECURITY", s?s:"NONE"); AO_Provider_Util_SetCurrentTimeValue(xmlOfx, AO_User_GetFlags(u), "NEWFILEUID"); GWEN_XMLNode_SetProperty(xmlOfx, "OLDFILEUID", "NONE"); return xmlOfx; } GWEN_XMLNODE *AO_V2_MkXmlHeader(void) { GWEN_XMLNODE *xmlNode; xmlNode=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "?xml"); GWEN_XMLNode_SetProperty(xmlNode, "version", "1.0"); GWEN_XMLNode_SetProperty(xmlNode, "encoding", "utf-8"); GWEN_XMLNode_SetProperty(xmlNode, "standalone", "no"); return xmlNode; } aqbanking-6.6.1/src/libs/plugins/backends/aqofxconnect/v2/r_statements.h0000664000175000017500000000167414043610745023271 00000000000000/*************************************************************************** begin : Mon Jan 13 2020 copyright : (C) 2020 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AO_V2_R_STATEMENTS_H #define AO_V2_R_STATEMENTS_H /* plugin headers */ #include /* aqbanking headers */ #include #include #include #include #include int AO_V2_RequestStatements(AB_PROVIDER *pro, AB_USER *u, AB_ACCOUNT *a, AB_TRANSACTION *j, AB_IMEXPORTER_CONTEXT *ictx); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqofxconnect/v2/Makefile.am0000664000175000017500000000321214043610745022432 00000000000000AM_CPPFLAGS = -I$(top_srcdir)/src/libs -I$(top_builddir)/src/libs $(gwenhywfar_includes) \ -I$(srcdir)/../../ \ -I$(srcdir)/.. \ -I$(srcdir)/../common AM_CFLAGS=-DBUILDING_AQBANKING @visibility_cflags@ typefiles= dlgdatadir=$(aqbanking_pkgdatadir)/backends/aqofxconnect/dialogs dlgdata_DATA= build_sources= build_headers_priv= build_headers_pub= build_headers=$(build_headers_priv) $(build_headers_pub) noinst_HEADERS=$(build_headers_priv) $(build_headers_pub) \ n_header.h \ r_accounts.h \ r_statements.h #iheaderdir=@aqbanking_headerdir_am@/aqofxconnect #iheader_HEADERS= noinst_LTLIBRARIES=libofxdcv2.la libofxdcv2_la_SOURCES= $(build_sources) \ n_header.c \ r_accounts.c \ r_statements.c EXTRA_DIST=$(typefiles) $(dlgdata_DATA) $(dlgimage_DATA) $(build_sources) $(build_headers) built_sources: $(build_sources) sources: for f in $(libofxdcv2_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for f in $(dlgdata_DATA); do \ echo $(subdir)/$$f >>$(top_srcdir)/dlgsources; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d sources; \ done cppcheck: for f in $(libofxdcv2_la_SOURCES); do \ cppcheck --force $$f ; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done typefiles: $(typefiles) $(typemaker2_exe) -I $(top_srcdir)/src/libs/aqbanking/typemaker2/c -I $(gwenhywfar_dir)/share/gwenhywfar/typemaker2/c -I $(srcdir) --destfolder="$(srcdir)" $(typefiles) typedefs: $(typefiles) $(typemaker2_exe) --defs-only -I $(top_srcdir)/src/libs/aqbanking/typemaker2/c -I $(gwenhywfar_dir)/share/gwenhywfar/typemaker2/c -I $(srcdir) --destfolder="$(srcdir)" $(typefiles) aqbanking-6.6.1/src/libs/plugins/backends/aqofxconnect/v2/Makefile.in0000644000175000017500000006501615037736026022460 00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/libs/plugins/backends/aqofxconnect/v2 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/distri.m4 $(top_srcdir)/m4/gwenhywfar.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/os.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libofxdcv2_la_LIBADD = am__objects_1 = am_libofxdcv2_la_OBJECTS = $(am__objects_1) n_header.lo r_accounts.lo \ r_statements.lo libofxdcv2_la_OBJECTS = $(am_libofxdcv2_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/n_header.Plo \ ./$(DEPDIR)/r_accounts.Plo ./$(DEPDIR)/r_statements.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libofxdcv2_la_SOURCES) DIST_SOURCES = $(libofxdcv2_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(dlgdatadir)" DATA = $(dlgdata_DATA) HEADERS = $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp README DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADD_ACLOCAL_FLAGS = @ADD_ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AQBANKING_CLI_VERSION_STRING = @AQBANKING_CLI_VERSION_STRING@ AQBANKING_FINTS_VERSION_STRING = @AQBANKING_FINTS_VERSION_STRING@ AQBANKING_SO_AGE = @AQBANKING_SO_AGE@ AQBANKING_SO_CURRENT = @AQBANKING_SO_CURRENT@ AQBANKING_SO_EFFECTIVE = @AQBANKING_SO_EFFECTIVE@ AQBANKING_SO_REVISION = @AQBANKING_SO_REVISION@ AQBANKING_VERSION_BUILD = @AQBANKING_VERSION_BUILD@ AQBANKING_VERSION_FULL_STRING = @AQBANKING_VERSION_FULL_STRING@ AQBANKING_VERSION_MAJOR = @AQBANKING_VERSION_MAJOR@ AQBANKING_VERSION_MINOR = @AQBANKING_VERSION_MINOR@ AQBANKING_VERSION_PATCHLEVEL = @AQBANKING_VERSION_PATCHLEVEL@ AQBANKING_VERSION_RELEASE_STRING = @AQBANKING_VERSION_RELEASE_STRING@ AQBANKING_VERSION_STRING = @AQBANKING_VERSION_STRING@ AQBANKING_VERSION_TAG = @AQBANKING_VERSION_TAG@ AQEBICS_CFLAGS = @AQEBICS_CFLAGS@ AQEBICS_LIBS = @AQEBICS_LIBS@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATETIME = @DATETIME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_EXCLUDE_PATTERNS = @DOXYGEN_EXCLUDE_PATTERNS@ DOXYGEN_FILE_PATTERNS = @DOXYGEN_FILE_PATTERNS@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENGUI_GTK2_CFLAGS = @GWENGUI_GTK2_CFLAGS@ GWENGUI_GTK2_LIBS = @GWENGUI_GTK2_LIBS@ GWENHYWFAR_MINIMUM_VERSION = @GWENHYWFAR_MINIMUM_VERSION@ HAVE_GWENGUI_GTK2 = @HAVE_GWENGUI_GTK2@ HAVE_I18N = @HAVE_I18N@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIBXSLT_CFLAGS = @LIBXSLT_CFLAGS@ LIBXSLT_LIBS = @LIBXSLT_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_SUPPORTS_QT = @MSGFMT_SUPPORTS_QT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ TUTORIALS = @TUTORIALS@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XMLMERGE = @XMLMERGE@ XMLSEC_CFLAGS = @XMLSEC_CFLAGS@ XMLSEC_LIBS = @XMLSEC_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ aqbanking_backends = @aqbanking_backends@ aqbanking_cfg_searchdir = @aqbanking_cfg_searchdir@ aqbanking_data_searchdir = @aqbanking_data_searchdir@ aqbanking_headerdir = @aqbanking_headerdir@ aqbanking_headerdir_am = @aqbanking_headerdir_am@ aqbanking_includes = @aqbanking_includes@ aqbanking_internal_libs = @aqbanking_internal_libs@ aqbanking_ldflags = @aqbanking_ldflags@ aqbanking_libs = @aqbanking_libs@ aqbanking_locale_searchdir = @aqbanking_locale_searchdir@ aqbanking_modules = @aqbanking_modules@ aqbanking_pkgdatadir = @aqbanking_pkgdatadir@ aqbanking_plugin_searchdir = @aqbanking_plugin_searchdir@ aqbanking_plugindir = @aqbanking_plugindir@ aqbanking_plugins_backends_dirs = @aqbanking_plugins_backends_dirs@ aqbanking_plugins_backends_libs = @aqbanking_plugins_backends_libs@ aqbanking_plugins_bankinfo_dirs = @aqbanking_plugins_bankinfo_dirs@ aqbanking_plugins_bankinfo_libs = @aqbanking_plugins_bankinfo_libs@ aqbanking_plugins_imexporters_dirs = @aqbanking_plugins_imexporters_dirs@ aqbanking_plugins_imexporters_libs = @aqbanking_plugins_imexporters_libs@ aqbanking_plugins_parsers_dirs = @aqbanking_plugins_parsers_dirs@ aqbanking_symlinkdir = @aqbanking_symlinkdir@ aqbanking_sys_is_windows = @aqbanking_sys_is_windows@ aqbankingpp_modules = @aqbankingpp_modules@ aqebics_datadir = @aqebics_datadir@ aqebics_includes = @aqebics_includes@ aqebics_internal_libs = @aqebics_internal_libs@ aqebics_ldflags = @aqebics_ldflags@ aqebics_libs = @aqebics_libs@ aqfints_datadir = @aqfints_datadir@ aqhbci_datadir = @aqhbci_datadir@ aqhbci_includes = @aqhbci_includes@ aqhbci_internal_libs = @aqhbci_internal_libs@ aqhbci_ldflags = @aqhbci_ldflags@ aqhbci_libs = @aqhbci_libs@ aqofxconnect_includes = @aqofxconnect_includes@ aqofxconnect_internal_libs = @aqofxconnect_internal_libs@ aqofxconnect_libs = @aqofxconnect_libs@ aqpaypal_includes = @aqpaypal_includes@ aqpaypal_internal_libs = @aqpaypal_internal_libs@ aqpaypal_libs = @aqpaypal_libs@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gmp_libs = @gmp_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_dir = @gwenhywfar_dir@ gwenhywfar_has_crypt = @gwenhywfar_has_crypt@ gwenhywfar_headers = @gwenhywfar_headers@ gwenhywfar_includes = @gwenhywfar_includes@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_plugins = @gwenhywfar_plugins@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ typemaker2_exe = @typemaker2_exe@ visibility_cflags = @visibility_cflags@ with_aqebics = @with_aqebics@ with_aqhbci = @with_aqhbci@ AM_CPPFLAGS = -I$(top_srcdir)/src/libs -I$(top_builddir)/src/libs $(gwenhywfar_includes) \ -I$(srcdir)/../../ \ -I$(srcdir)/.. \ -I$(srcdir)/../common AM_CFLAGS = -DBUILDING_AQBANKING @visibility_cflags@ typefiles = dlgdatadir = $(aqbanking_pkgdatadir)/backends/aqofxconnect/dialogs dlgdata_DATA = build_sources = build_headers_priv = build_headers_pub = build_headers = $(build_headers_priv) $(build_headers_pub) noinst_HEADERS = $(build_headers_priv) $(build_headers_pub) \ n_header.h \ r_accounts.h \ r_statements.h #iheaderdir=@aqbanking_headerdir_am@/aqofxconnect #iheader_HEADERS= noinst_LTLIBRARIES = libofxdcv2.la libofxdcv2_la_SOURCES = $(build_sources) \ n_header.c \ r_accounts.c \ r_statements.c EXTRA_DIST = $(typefiles) $(dlgdata_DATA) $(dlgimage_DATA) $(build_sources) $(build_headers) all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libs/plugins/backends/aqofxconnect/v2/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libs/plugins/backends/aqofxconnect/v2/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libofxdcv2.la: $(libofxdcv2_la_OBJECTS) $(libofxdcv2_la_DEPENDENCIES) $(EXTRA_libofxdcv2_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libofxdcv2_la_OBJECTS) $(libofxdcv2_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/n_header.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/r_accounts.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/r_statements.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-dlgdataDATA: $(dlgdata_DATA) @$(NORMAL_INSTALL) @list='$(dlgdata_DATA)'; test -n "$(dlgdatadir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(dlgdatadir)'"; \ $(MKDIR_P) "$(DESTDIR)$(dlgdatadir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(dlgdatadir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(dlgdatadir)" || exit $$?; \ done uninstall-dlgdataDATA: @$(NORMAL_UNINSTALL) @list='$(dlgdata_DATA)'; test -n "$(dlgdatadir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(dlgdatadir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(dlgdatadir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/n_header.Plo -rm -f ./$(DEPDIR)/r_accounts.Plo -rm -f ./$(DEPDIR)/r_statements.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dlgdataDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/n_header.Plo -rm -f ./$(DEPDIR)/r_accounts.Plo -rm -f ./$(DEPDIR)/r_statements.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-dlgdataDATA .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-generic clean-libtool clean-noinstLTLIBRARIES \ cscopelist-am ctags ctags-am distclean distclean-compile \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dlgdataDATA install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \ uninstall-dlgdataDATA .PRECIOUS: Makefile built_sources: $(build_sources) sources: for f in $(libofxdcv2_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for f in $(dlgdata_DATA); do \ echo $(subdir)/$$f >>$(top_srcdir)/dlgsources; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d sources; \ done cppcheck: for f in $(libofxdcv2_la_SOURCES); do \ cppcheck --force $$f ; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done typefiles: $(typefiles) $(typemaker2_exe) -I $(top_srcdir)/src/libs/aqbanking/typemaker2/c -I $(gwenhywfar_dir)/share/gwenhywfar/typemaker2/c -I $(srcdir) --destfolder="$(srcdir)" $(typefiles) typedefs: $(typefiles) $(typemaker2_exe) --defs-only -I $(top_srcdir)/src/libs/aqbanking/typemaker2/c -I $(gwenhywfar_dir)/share/gwenhywfar/typemaker2/c -I $(srcdir) --destfolder="$(srcdir)" $(typefiles) # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: aqbanking-6.6.1/src/libs/plugins/backends/aqofxconnect/v2/r_accounts.c0000664000175000017500000000765014044534776022726 00000000000000/*************************************************************************** begin : Mon Jan 13 2020 copyright : (C) 2020 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "r_accounts.h" #include "n_header.h" #include "aqofxconnect/common/n_signon.h" #include "aqofxconnect/common/n_acctinfo.h" #include "aqofxconnect/common/io_network.h" #include #include "aqbanking/i18n_l.h" #include #include int AO_V2_RequestAccounts(AB_PROVIDER *pro, AB_USER *u, AB_IMEXPORTER_CONTEXT *ctx) { AB_BANKING *ab; GWEN_XMLNODE *xmlRoot; GWEN_XMLNODE *xmlOfx; GWEN_XMLNODE *xmlNode; GWEN_BUFFER *bufRequest; GWEN_BUFFER *bufResponse=NULL; int rv; ab=AB_Provider_GetBanking(pro); assert(ab); /* prepare XML request */ xmlRoot=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "root"); xmlNode=AO_V2_MkXmlHeader(); if (xmlNode) GWEN_XMLNode_AddHeader(xmlRoot, xmlNode); xmlNode=AO_V2_MkOfxHeader(u); if (xmlNode) GWEN_XMLNode_AddHeader(xmlRoot, xmlNode); xmlOfx=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "OFX"); GWEN_XMLNode_AddChild(xmlRoot, xmlOfx); xmlNode=AO_Provider_MkSignOnNode(u); if (xmlNode) GWEN_XMLNode_AddChild(xmlOfx, xmlNode); xmlNode=AO_Provider_MkAcctInfoRqNode(u); if (xmlNode) GWEN_XMLNode_AddChild(xmlOfx, xmlNode); bufRequest=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_XMLNode_toBuffer(xmlRoot, bufRequest, GWEN_XML_FLAGS_HANDLE_HEADERS | GWEN_XML_FLAGS_SIMPLE); if (rv<0) { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(bufRequest); GWEN_XMLNode_free(xmlRoot); return rv; } GWEN_XMLNode_free(xmlRoot); #if 0 DBG_ERROR(AQOFXCONNECT_LOGDOMAIN, "OFX request:"); fprintf(stderr, "%s\n", GWEN_Buffer_GetStart(bufRequest)); GWEN_Text_LogString(GWEN_Buffer_GetStart(bufRequest), GWEN_Buffer_GetUsedBytes(bufRequest), AQOFXCONNECT_LOGDOMAIN, GWEN_LoggerLevel_Error); #endif /* exchange messages */ rv=AO_Provider_SendAndReceive(pro, u, (const uint8_t *) GWEN_Buffer_GetStart(bufRequest), GWEN_Buffer_GetUsedBytes(bufRequest), &bufResponse); if (rv) { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(bufRequest); return rv; } GWEN_Buffer_free(bufRequest); if (bufResponse==NULL) { DBG_ERROR(AQOFXCONNECT_LOGDOMAIN, "No response received, not expected."); return GWEN_ERROR_GENERIC; } #if 0 DBG_ERROR(AQOFXCONNECT_LOGDOMAIN, "OFX response:"); GWEN_Text_LogString(GWEN_Buffer_GetStart(bufResponse), GWEN_Buffer_GetUsedBytes(bufResponse), AQOFXCONNECT_LOGDOMAIN, GWEN_LoggerLevel_Error); #endif /* parse response */ GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Info, I18N("Parsing response...")); DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "Importing OFX version 2 (xml)"); rv=AB_Banking_ImportFromBufferLoadProfile(ab, "xml", ctx, "ofx2", NULL, (const uint8_t *) GWEN_Buffer_GetStart(bufResponse), GWEN_Buffer_GetUsedBytes(bufResponse)); if (rv<0) { DBG_ERROR(AQOFXCONNECT_LOGDOMAIN, "Bad data in OFX response (error: %d):", rv); GWEN_Text_LogString(GWEN_Buffer_GetStart(bufResponse), GWEN_Buffer_GetUsedBytes(bufResponse), AQOFXCONNECT_LOGDOMAIN, GWEN_LoggerLevel_Error); GWEN_Buffer_free(bufResponse); return rv; } GWEN_Buffer_free(bufResponse); return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqofxconnect/provider_sendcmd.c0000664000175000017500000004422214546575650023565 00000000000000/*************************************************************************** begin : Thu Nov 29 2018 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ /* included by provider.c */ AB_TRANSACTION *AO_Provider_FindJobById(AB_TRANSACTION_LIST2 *jl, uint32_t jid) { AB_TRANSACTION_LIST2_ITERATOR *jit; jit=AB_Transaction_List2_First(jl); if (jit) { AB_TRANSACTION *j; j=AB_Transaction_List2Iterator_Data(jit); assert(j); while (j) { if (AB_Transaction_GetUniqueId(j)==jid) { AB_Transaction_List2Iterator_free(jit); return j; } j=AB_Transaction_List2Iterator_Next(jit); } /* while */ AB_Transaction_List2Iterator_free(jit); } return 0; } int AO_Provider__AddJobToList2(AB_PROVIDER *pro, AB_TRANSACTION *j, AB_TRANSACTION_LIST2 *jobList) { AO_PROVIDER *dp; uint32_t aid=0; int doAdd=1; assert(pro); dp=GWEN_INHERIT_GETDATA(AB_PROVIDER, AO_PROVIDER, pro); assert(dp); aid=AB_Transaction_GetUniqueAccountId(j); assert(aid); switch (AB_Transaction_GetCommand(j)) { case AB_Transaction_CommandGetBalance: case AB_Transaction_CommandGetTransactions: break; case AB_Transaction_CommandTransfer: case AB_Transaction_CommandDebitNote: default: DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "Job not supported (%d)", AB_Transaction_GetCommand(j)); return GWEN_ERROR_NOT_SUPPORTED; } /* switch */ if (AB_Transaction_GetCommand(j)==AB_Transaction_CommandGetBalance) { AB_TRANSACTION_LIST2_ITERATOR *jit; /* check whether a getBalance job already exists. If it does then * we don't have to send this job again, once is enough. */ jit=AB_Transaction_List2_First(jobList); if (jit) { AB_TRANSACTION *uj; uj=AB_Transaction_List2Iterator_Data(jit); assert(uj); while (uj) { AB_TRANSACTION_COMMAND jt; jt=AB_Transaction_GetCommand(uj); if (jt==AB_Transaction_CommandGetBalance || jt==AB_Transaction_CommandGetTransactions) { if (AB_Transaction_GetUniqueAccountId(uj)==aid) { /* let new job refer to the only already in queue */ AB_Transaction_SetRefUniqueId(j, AB_Transaction_GetUniqueId(uj)); doAdd=0; break; } } uj=AB_Transaction_List2Iterator_Next(jit); } /* while */ AB_Transaction_List2Iterator_free(jit); } } else if (AB_Transaction_GetCommand(j)==AB_Transaction_CommandGetTransactions) { AB_TRANSACTION_LIST2_ITERATOR *jit; const GWEN_DATE *dtnew; /* check whether a getTransactions job already exists. If it does then * we don't have to send this job again, once is enough. */ dtnew=AB_Transaction_GetFirstDate(j); jit=AB_Transaction_List2_First(jobList); if (jit) { AB_TRANSACTION *uj; uj=AB_Transaction_List2Iterator_Data(jit); assert(uj); while (uj) { AB_TRANSACTION_COMMAND jt; jt=AB_Transaction_GetCommand(uj); if (jt==AB_Transaction_CommandGetTransactions) { if (AB_Transaction_GetUniqueAccountId(uj)==aid) { if (dtnew) { const GWEN_DATE *dtcurr; dtcurr=AB_Transaction_GetFirstDate(uj); if (dtcurr) { /* current job has a time */ if (GWEN_Date_Diff(dtcurr, dtnew)>0) { /* new time is before that of current job, replace */ AB_Transaction_SetRefUniqueId(uj, AB_Transaction_GetUniqueId(j)); AB_Transaction_List2_Erase(jobList, jit); doAdd=1; break; } } else { /* current job has no time, so replace by job with time */ AB_Transaction_SetRefUniqueId(uj, AB_Transaction_GetUniqueId(j)); AB_Transaction_List2_Erase(jobList, jit); doAdd=1; break; } } else { /* new job has no time, so don't add it */ AB_Transaction_SetRefUniqueId(j, AB_Transaction_GetUniqueId(uj)); doAdd=0; break; } } /* if same account */ } /* if GetTransactions */ uj=AB_Transaction_List2Iterator_Next(jit); } /* while */ AB_Transaction_List2Iterator_free(jit); } } if (doAdd) { /* only add to queue if needed */ AB_Transaction_SetStatus(j, AB_Transaction_StatusEnqueued); AB_Transaction_List2_PushBack(jobList, j); } return 0; } int AO_Provider__SendJobList(AB_PROVIDER *pro, AB_USER *u, AB_ACCOUNT *a, AB_TRANSACTION_LIST2 *jobList, AB_IMEXPORTER_CONTEXT *ctx) { AB_TRANSACTION_LIST2_ITERATOR *jit; /* check whether a getBalance job already exists. If it does then * we don't have to send this job again, once is enough. */ jit=AB_Transaction_List2_First(jobList); if (jit) { AB_TRANSACTION *uj; uj=AB_Transaction_List2Iterator_Data(jit); assert(uj); while (uj) { AB_TRANSACTION_COMMAND jt; int rv; jt=AB_Transaction_GetCommand(uj); if (jt==AB_Transaction_CommandGetBalance || jt==AB_Transaction_CommandGetTransactions) { AB_Transaction_SetStatus(uj, AB_Transaction_StatusSending); /* request statements */ rv=AO_Provider_RequestStatements(pro, u, a, uj, ctx); if (rv==GWEN_ERROR_USER_ABORTED) { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "User aborted"); AB_Transaction_List2Iterator_free(jit); AB_Transaction_SetStatus(uj, AB_Transaction_StatusAborted); return rv; } else if (rv==GWEN_ERROR_ABORTED) { DBG_ERROR(AQOFXCONNECT_LOGDOMAIN, "Aborted"); AB_Transaction_List2Iterator_free(jit); AB_Transaction_SetStatus(uj, AB_Transaction_StatusAborted); return rv; } else if (rv<0) { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "here (%d)", rv); AB_Transaction_SetStatus(uj, AB_Transaction_StatusError); } else { AB_Transaction_SetStatus(uj, AB_Transaction_StatusAccepted); } } else { DBG_ERROR(AQOFXCONNECT_LOGDOMAIN, "Job not supported"); AB_Transaction_SetStatus(uj, AB_Transaction_StatusError); } rv=GWEN_Gui_ProgressAdvance(0, GWEN_GUI_PROGRESS_ONE); if (rv==GWEN_ERROR_USER_ABORTED) { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "User aborted"); AB_Transaction_List2Iterator_free(jit); return rv; } uj=AB_Transaction_List2Iterator_Next(jit); } /* while */ AB_Transaction_List2Iterator_free(jit); } return 0; } void AO_Provider__FinishJobs(AB_PROVIDER *pro, AB_TRANSACTION_LIST2 *jobList, AB_IMEXPORTER_CONTEXT *ctx) { AB_TRANSACTION_LIST2_ITERATOR *it; it=AB_Transaction_List2_First(jobList); if (it) { AB_TRANSACTION *t; t=AB_Transaction_List2Iterator_Data(it); while (t) { uint32_t gid; gid=AB_Transaction_GetRefUniqueId(t); if (gid!=0) { AB_TRANSACTION *tOrig; tOrig=AO_Provider_FindJobById(jobList, gid); if (tOrig) { /* copy result */ AB_Transaction_SetStatus(t, AB_Transaction_GetStatus(tOrig)); } } /* copy command to context */ /*AB_ImExporterContext_AddTransaction(ctx, AB_Transaction_dup(t));*/ t=AB_Transaction_List2Iterator_Next(it); } AB_Transaction_List2Iterator_free(it); } } int AO_Provider__SendAccountQueue(AB_PROVIDER *pro, AB_USER *u, AB_ACCOUNTQUEUE *aq, AB_IMEXPORTER_CONTEXT *ctx) { AB_ACCOUNT *a; AB_TRANSACTION_LIST2 *tl2; AB_TRANSACTION_LIST2 *toSend; AB_TRANSACTION_LIST2 *toHandle; a=AB_AccountQueue_GetAccount(aq); assert(a); DBG_ERROR(0, "Handling account \"%lu\"", (unsigned long int)AB_Account_GetUniqueId(a)); toSend=AB_Transaction_List2_new(); toHandle=AB_Transaction_List2_new(); /* read transactions */ tl2=AB_AccountQueue_GetTransactionList(aq); if (tl2) { AB_TRANSACTION_LIST2_ITERATOR *it; it=AB_Transaction_List2_First(tl2); if (it) { AB_TRANSACTION *t; t=AB_Transaction_List2Iterator_Data(it); while (t) { int rv; /* add job to the list of jobs to send */ rv=AO_Provider__AddJobToList2(pro, t, toSend); if (rv<0) { AB_TRANSACTION *tCopy; DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "here (%d)", rv); /* error, add a transaction copy with error status to the context */ tCopy=AB_Transaction_dup(t); AB_Transaction_SetStatus(tCopy, AB_Transaction_StatusError); AB_ImExporterContext_AddTransaction(ctx, tCopy); if (rv==GWEN_ERROR_USER_ABORTED) { /* user aborted, prepare break */ if (AB_Transaction_List2_GetSize(toHandle)) AO_Provider__FinishJobs(pro, toHandle, ctx); AB_Transaction_List2Iterator_free(it); AB_Transaction_List2_free(toHandle); AB_Transaction_List2_free(toSend); return rv; } } /* unconditionally add job to list of jobs to set results later */ AB_Transaction_List2_PushBack(toHandle, t); t=AB_Transaction_List2Iterator_Next(it); } AB_Transaction_List2Iterator_free(it); } } /* send jobs */ if (AB_Transaction_List2_GetSize(toSend)) { int rv; rv=AO_Provider__SendJobList(pro, u, a, toSend, ctx); if (rv<0) { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "here (%d)", rv); } } /* sample results */ if (AB_Transaction_List2_GetSize(toHandle)) AO_Provider__FinishJobs(pro, toHandle, ctx); AB_Transaction_List2_free(toHandle); AB_Transaction_List2_free(toSend); return 0; } int AO_Provider__SendUserQueue(AB_PROVIDER *pro, AB_USERQUEUE *uq, AB_IMEXPORTER_CONTEXT *ctx) { AB_ACCOUNTQUEUE_LIST *aql; AB_USER *u; assert(uq); u=AB_UserQueue_GetUser(uq); assert(u); DBG_ERROR(0, "Handling user \"%s\"", AB_User_GetUserId(u)); aql=AB_UserQueue_GetAccountQueueList(uq); if (aql) { AB_ACCOUNTQUEUE *aq; int rv; GWEN_Gui_ProgressLog2(0, GWEN_LoggerLevel_Info, I18N("Locking customer \"%lu\""), (unsigned long int) AB_User_GetUniqueId(u)); rv=AB_Provider_BeginExclUseUser(pro, u); if (rv<0) { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "Could not lock user [%lu] (%d)", (unsigned long int) AB_User_GetUniqueId(u), rv); GWEN_Gui_ProgressLog2(0, GWEN_LoggerLevel_Error, I18N("Could not lock user \"%lu\""), (unsigned long int) AB_User_GetUniqueId(u)); AB_Provider_EndExclUseUser(pro, u, 1); /* abandon */ return rv; } aq=AB_AccountQueue_List_First(aql); while (aq) { int rv; rv=AO_Provider__SendAccountQueue(pro, u, aq, ctx); if (rv<0) { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "here (%d)", rv); } aq=AB_AccountQueue_List_Next(aq); } /* while aq */ GWEN_Gui_ProgressLog2(0, GWEN_LoggerLevel_Info, I18N("Unlocking customer \"%lu\""), (unsigned long int) AB_User_GetUniqueId(u)); rv=AB_Provider_EndExclUseUser(pro, u, 0); if (rv<0) { GWEN_Gui_ProgressLog2(0, GWEN_LoggerLevel_Error, I18N("Could not unlock user \"%lu\""), (unsigned long int) AB_User_GetUniqueId(u)); AB_Provider_EndExclUseUser(pro, u, 1); /* abandon */ return rv; } } return 0; } int AO_Provider_SendCommands(AB_PROVIDER *pro, AB_PROVIDERQUEUE *pq, AB_IMEXPORTER_CONTEXT *ctx) { AO_PROVIDER *hp; AB_USERQUEUE_LIST *uql; AB_USERQUEUE *uq; int rv; assert(pro); hp=GWEN_INHERIT_GETDATA(AB_PROVIDER, AO_PROVIDER, pro); assert(hp); /* sort into user queue list */ uql=AB_UserQueue_List_new(); rv=AB_Provider_SortProviderQueueIntoUserQueueList(pro, pq, uql); if (rv<0) { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "here (%d)", rv); AB_Provider_FreeUsersAndAccountsFromUserQueueList(pro, uql); AB_UserQueue_List_free(uql); return rv; } uq=AB_UserQueue_List_First(uql); while (uq) { int rv; rv=AO_Provider__SendUserQueue(pro, uq, ctx); if (rv<0) { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "here (%d)", rv); } uq=AB_UserQueue_List_Next(uq); } /* release accounts and users we loaded */ AB_Provider_FreeUsersAndAccountsFromUserQueueList(pro, uql); return 0; } void AO_Provider__AddOrModifyAccount(AB_PROVIDER *pro, AB_USER *u, AB_ACCOUNT *acc) { AB_ACCOUNT *storedAcc=NULL; assert(pro); assert(acc); if (AB_Account_GetUniqueId(acc)) { int rv; /* account already exists, needs update */ DBG_ERROR(AQOFXCONNECT_LOGDOMAIN, "Account exists, modifying"); rv=AB_Provider_GetAccount(pro, AB_Account_GetUniqueId(acc), 1, 0, &storedAcc); /* lock, don't unlock */ if (rv<0) { DBG_ERROR(AQOFXCONNECT_LOGDOMAIN, "Error getting referred account (%d)", rv); } else { const char *s; /* account is locked now, apply changes */ assert(storedAcc); s=AB_Account_GetCountry(acc); if (s && *s) AB_Account_SetCountry(storedAcc, s); s=AB_Account_GetBankCode(acc); if (s && *s) AB_Account_SetBankCode(storedAcc, s); s=AB_Account_GetBankName(acc); if (s && *s) AB_Account_SetBankName(storedAcc, s); s=AB_Account_GetAccountNumber(acc); if (s && *s) AB_Account_SetAccountNumber(storedAcc, s); s=AB_Account_GetSubAccountId(acc); if (s && *s) AB_Account_SetSubAccountId(storedAcc, s); s=AB_Account_GetIban(acc); if (s && *s) AB_Account_SetIban(storedAcc, s); s=AB_Account_GetBic(acc); if (s && *s) AB_Account_SetBic(storedAcc, s); s=AB_Account_GetOwnerName(acc); if (s && *s) AB_Account_SetOwnerName(storedAcc, s); s=AB_Account_GetCurrency(acc); if (s && *s) AB_Account_SetCurrency(storedAcc, s); AB_Account_SetAccountType(storedAcc, AB_Account_GetAccountType(acc)); /* handle users */ AB_Account_SetUserId(storedAcc, AB_User_GetUniqueId(u)); /* update and write account spec */ rv=AB_Provider_WriteAccountSpecForAccount(pro, storedAcc, 0); /* don't lock, account already is locked */ if (rv<0) { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "here (%d)", rv); } /* unlock account */ rv=AB_Provider_EndExclUseAccount(pro, storedAcc, 0); if (rv<0) { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "here (%d)", rv); AB_Provider_EndExclUseAccount(pro, acc, 1); /* abort */ } } } else { int rv; /* account is new, add it */ DBG_ERROR(AQOFXCONNECT_LOGDOMAIN, "Account is new, adding"); AB_Account_SetUserId(acc, AB_User_GetUniqueId(u)); rv=AB_Provider_AddAccount(pro, acc, 1); /* do lock corresponding user */ if (rv<0) { DBG_ERROR(AQOFXCONNECT_LOGDOMAIN, "Coud not write new account (%d)", rv); } else { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "Reading back added account"); rv=AB_Provider_GetAccount(pro, AB_Account_GetUniqueId(acc), 0, 0, &storedAcc); /* no-lock, no-unlock */ if (rv<0) { DBG_ERROR(AQOFXCONNECT_LOGDOMAIN, "Error getting referred account (%d)", rv); } } } /* done with stored account */ AB_Account_free(storedAcc); } int AO_Provider__ProcessImporterContext(AB_PROVIDER *pro, AB_USER *u, AB_IMEXPORTER_CONTEXT *ictx) { AB_IMEXPORTER_ACCOUNTINFO *ai; AB_BANKING *ab; assert(pro); assert(ictx); ab=AB_Provider_GetBanking(pro); assert(ab); #if 0 if (1) { GWEN_DB_NODE *dbDebug; dbDebug=GWEN_DB_Group_new("context"); AB_ImExporterContext_toDb(ictx, dbDebug); DBG_ERROR(AQOFXCONNECT_LOGDOMAIN, "Got this context to process:"); GWEN_DB_Dump(dbDebug, 2); GWEN_DB_Group_free(dbDebug); } #endif ai=AB_ImExporterContext_GetFirstAccountInfo(ictx); if (!ai) { DBG_INFO(0, "No accounts"); } while (ai) { const char *country; const char *bankCode; const char *accountNumber; country=AB_User_GetCountry(u); if (!country) country="us"; bankCode=AB_ImExporterAccountInfo_GetBankCode(ai); if (!bankCode || !*bankCode) bankCode=AB_User_GetBankCode(u); accountNumber=AB_ImExporterAccountInfo_GetAccountNumber(ai); if (bankCode && accountNumber) { AB_ACCOUNT_SPEC_LIST *accountSpecList=NULL; int rv; accountSpecList=AB_AccountSpec_List_new(); rv=AB_Banking_GetAccountSpecList(ab, &accountSpecList); if (rv<0) { DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "No account spec list"); } else { AB_ACCOUNT *a; AB_ACCOUNT_SPEC *as; const char *s; /* create temporary account */ a=AO_Account_new(pro); assert(a); AB_Account_SetCountry(a, country); AB_Account_SetBankCode(a, bankCode); AB_Account_SetAccountNumber(a, accountNumber); AB_Account_SetUserId(a, AB_User_GetUniqueId(u)); s=AB_ImExporterAccountInfo_GetBankName(ai); if (!s) s=bankCode; AB_Account_SetBankName(a, s); AB_Account_SetAccountType(a, AB_ImExporterAccountInfo_GetAccountType(ai)); as=AB_Provider_FindMatchingAccountSpec(pro, a, accountSpecList); if (as) { /* account already exists */ DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "Account %s at bank %s already exists", accountNumber, bankCode); AB_Account_SetUniqueId(a, AB_AccountSpec_GetUniqueId(as)); } else { /* account is new, add it */ DBG_INFO(AQOFXCONNECT_LOGDOMAIN, "Adding account %s to bank %s", accountNumber, bankCode); AB_Account_SetUniqueId(a, 0); } /* add or modify account */ AO_Provider__AddOrModifyAccount(pro, u, a); /* delete temporary account */ AB_Account_free(a); } AB_AccountSpec_List_free(accountSpecList); } else { DBG_WARN(AQOFXCONNECT_LOGDOMAIN, "BankCode or AccountNumber missing (%s/%s)", bankCode?bankCode:"", accountNumber?accountNumber:""); } ai=AB_ImExporterAccountInfo_List_Next(ai); } /* while accounts */ return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqgivve/0000755000175000017500000000000015037736164017111 500000000000000aqbanking-6.6.1/src/libs/plugins/backends/aqgivve/meta.c0000664000175000017500000000571614546575647020151 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2023 by Rico Rommel email : rico@bierrommel.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "meta_p.h" #include #include #include "provider.h" AG_META *AG_META_new() { AG_META *m = (AG_META *)malloc(sizeof(AG_META)); m->current_page = -1; m->page_size = -1; m->total_entries = -1; m->total_pages = -1; return m; } void AG_META_free(AG_META *meta) { free(meta); } int AG_META_GetCurrentPage(AG_META *meta) { if (meta) { return meta->current_page; } else { return -1; } } void AG_META_SetCurrentPage(AG_META *meta, int cp) { if (meta) { meta->page_size = cp; } } int AG_META_GetPageSize(AG_META *meta) { if (meta) { return meta->page_size; } else { return -1; } } void AG_META_SetPageSize(AG_META *meta, int ps) { if (meta) { meta->page_size = ps; } } int AG_META_GetTotalEntries(AG_META *meta) { if (meta) { return meta->total_entries; } else { return -1; } } void AG_META_SetTotalEntries(AG_META *meta, int te) { if (meta) { meta->total_entries = te; } } int AG_META_GetTotalPages(AG_META *meta) { if (meta) { return meta->total_pages; } else { return -1; } } void AG_META_SetTotalPages(AG_META *meta, int tp) { if (meta) { meta->page_size = tp; } } AG_META *AG_META_FromJsonElem(GWEN_JSON_ELEM *meta_elem) { AG_META *m = NULL; if (!meta_elem) { return NULL; } int type = GWEN_JsonElement_GetType(meta_elem); const char *val = GWEN_JsonElement_GetData(meta_elem); if ((type == GWEN_JSON_ELEMTYPE_STRING) && (strcmp(val, "null") == 0)) { return NULL; } if (type == GWEN_JSON_ELEMTYPE_OBJECT) { m = AG_META_new(); GWEN_JSON_ELEM *json_total_entries = GWEN_JsonElement_GetElementByPath(meta_elem, "total_entries", 0); if (json_total_entries) { AG_META_SetTotalEntries(m, atoi(GWEN_JsonElement_GetData(json_total_entries))); } GWEN_JSON_ELEM *json_current_page = GWEN_JsonElement_GetElementByPath(meta_elem, "current_page", 0); if (json_current_page) { AG_META_SetCurrentPage(m, atoi(GWEN_JsonElement_GetData(json_current_page))); } GWEN_JSON_ELEM *json_page_size = GWEN_JsonElement_GetElementByPath(meta_elem, "page_size", 0); if (json_page_size) { AG_META_SetPageSize(m, atoi(GWEN_JsonElement_GetData(json_page_size))); } GWEN_JSON_ELEM *json_total_pages = GWEN_JsonElement_GetElementByPath(meta_elem, "total_pages", 0); if (json_total_pages) { AG_META_SetTotalPages(m, atoi(GWEN_JsonElement_GetData(json_total_pages))); } } return m; } aqbanking-6.6.1/src/libs/plugins/backends/aqgivve/voucherlist_p.h0000664000175000017500000000117114546575647022105 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2023 by Rico Rommel email : rico@bierrommel.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AG_VOUCHERLIST_P_H #define AG_VOUCHERLIST_P_H #include "provider.h" #include "voucherlist.h" struct AG_VOUCHERLIST { AG_VOUCHER **cards; //array of cards; int total_entries; }; #endif aqbanking-6.6.1/src/libs/plugins/backends/aqgivve/provider_p.h0000664000175000017500000000131614546575647021371 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2023 by Rico Rommel email : rico@bierrommel.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AG_PROVIDER_P_H #define AG_PROVIDER_P_H #include "provider.h" #include #include #include #include struct AG_PROVIDER { int dummy; }; #endif aqbanking-6.6.1/src/libs/plugins/backends/aqgivve/meta_p.h0000664000175000017500000000113114546575647020460 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2023 by Rico Rommel email : rico@bierrommel.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AG_META_P_H #define AG_META_P_H #include "meta.h" struct AG_META { int total_pages; int current_page; int page_size; int total_entries; }; #endif aqbanking-6.6.1/src/libs/plugins/backends/aqgivve/dlg_cardselect.dlg0000664000175000017500000000220514546575647022474 00000000000000 aqbanking-6.6.1/src/libs/plugins/backends/aqgivve/voucherowner_p.h0000664000175000017500000000111014546575647022255 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2023 by Rico Rommel email : rico@bierrommel.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AG_VOUCHEROWNER_P_H #define AG_VOUCHEROWNER_P_H #include "provider.h" #include "voucherowner.h" struct AG_VOUCHEROWNER { char *name; }; #endif aqbanking-6.6.1/src/libs/plugins/backends/aqgivve/merchant.h0000664000175000017500000000147014546575647021022 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2023 by Rico Rommel email : rico@bierrommel.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AG_MERCHANT_H #define AG_MERCHANT_H #include "provider.h" #include "gwenhywfar/json.h" typedef struct AG_MERCHANT AG_MERCHANT ; AG_MERCHANT *AG_MERCHANT_new (); AG_MERCHANT *AG_MERCHANT_FromJsonElem(GWEN_JSON_ELEM *meta_elem); void AG_MERCHANT_SetName(AG_MERCHANT *m, const char * name); const char *AG_MERCHANT_GetName(AG_MERCHANT *m); void AG_MERCHANT_free ( AG_MERCHANT *m); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqgivve/voucherowner.h0000664000175000017500000000144014546575647021744 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2023 by Rico Rommel email : rico@bierrommel.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AG_VOUCHER_OWNER_H #define AG_VOUCHER_OWNER_H #include "provider.h" typedef struct AG_VOUCHEROWNER AG_VOUCHEROWNER; AG_VOUCHEROWNER *AG_VOUCHEROWNER_new (const char *name); void AG_VOUCHEROWNER_free ( AG_VOUCHEROWNER *o); void AG_VOUCHEROWNER_SetName ( AG_VOUCHEROWNER *o, const char *name); const char *AG_VOUCHEROWNER_GetName (const AG_VOUCHEROWNER *o); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqgivve/userdialog.c0000664000175000017500000001217414640343244021332 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2023 by Rico Rommel email : rico@bierrommel.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "userdialog_p.h" #include #include #include "cardsdialog.h" #include "provider_request.h" #include "voucher.h" #include "voucherlist.h" /* ------------------------------------------------------------------------------------------------ * forward declarations * ------------------------------------------------------------------------------------------------ */ static void GWENHYWFAR_CB _freeData(void *bp, void *p); static int GWENHYWFAR_CB _dlgSignalHandler(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender); static int _dlgHandleActivated(GWEN_DIALOG *dlg, const char *sender); static int _addUser(GWEN_DIALOG *dlg); /* ------------------------------------------------------------------------------------------------ * code * ------------------------------------------------------------------------------------------------ */ GWEN_INHERIT(GWEN_DIALOG, AG_USER_DIALOG); void GWENHYWFAR_CB _freeData(void *bp, void *p) { } GWEN_DIALOG *AG_GetNewUserDialog(AB_PROVIDER *pro, int i) { GWEN_DIALOG *dlg; AG_USER_DIALOG *xdlg; dlg=GWEN_Dialog_CreateAndLoadWithPath("ag_new_user", AB_PM_LIBNAME, AB_PM_DATADIR, "aqbanking/backends/aqgivve/dialogs/dlg_edituser.dlg"); GWEN_Dialog_SetSignalHandler(dlg, _dlgSignalHandler); GWEN_NEW_OBJECT(AG_USER_DIALOG, xdlg); GWEN_INHERIT_SETDATA(GWEN_DIALOG, AG_USER_DIALOG, dlg, xdlg, _freeData); xdlg->provider = pro; xdlg->user = NULL; /* done */ return dlg; } GWEN_DIALOG *AG_GetEditUserDialog(AB_PROVIDER *pro, AB_USER *u) { GWEN_DIALOG *dlg = AG_GetNewUserDialog(pro, 0); AG_USER_DIALOG *xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AG_USER_DIALOG, dlg); if (xdlg) { xdlg->user = u; } return dlg; } int AG_Provider_EditUserDialog_init(GWEN_DIALOG *dlg) { AG_USER_DIALOG *xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AG_USER_DIALOG, dlg); if (xdlg) { if (xdlg->user) { GWEN_Dialog_SetCharProperty(dlg, "username_edit", GWEN_DialogProperty_Value, 0, AB_User_GetUserName(xdlg->user), 0); GWEN_Dialog_SetCharProperty(dlg, "userid_edit", GWEN_DialogProperty_Value, 0, AB_User_GetUserId(xdlg->user), 0); } } return GWEN_DialogEvent_ResultHandled; } int GWENHYWFAR_CB _dlgSignalHandler(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender) { switch (t) { case GWEN_DialogEvent_TypeInit : return AG_Provider_EditUserDialog_init(dlg); case GWEN_DialogEvent_TypeActivated: return _dlgHandleActivated(dlg, sender); default: break; } return GWEN_DialogEvent_ResultHandled; } int _addUser(GWEN_DIALOG *dlg) { AG_USER_DIALOG *xdlg; xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AG_USER_DIALOG, dlg); if (xdlg) { AB_USER *user = xdlg->user; if (!user) { user = AB_Provider_CreateUserObject(xdlg->provider); AB_Provider_AddUser(xdlg->provider, user); } char *u_name = strdup(GWEN_Dialog_GetCharProperty(dlg, "username_edit", GWEN_DialogProperty_Value, 0, NULL)); char *u_id = strdup(GWEN_Dialog_GetCharProperty(dlg, "userid_edit", GWEN_DialogProperty_Value, 0, NULL)); DBG_INFO(AQGIVVE_LOGDOMAIN, "user: (%s)", u_name); AB_User_SetUserName(user, u_name); AB_User_SetUserId(user, u_id); AB_User_SetCustomerId(user, u_id); AB_Provider_WriteUser(xdlg->provider, AB_User_GetUniqueId(user), 1, 1, user); char *token = AG_Provider_Request_GetToken(user); if (!token) { return GWEN_DialogEvent_ResultNotHandled; }; DBG_INFO(AQGIVVE_LOGDOMAIN, "token: %s ", token); AG_VOUCHERLIST *card_list; card_list = AG_Provider_Request_GetVoucherList(token); if (AG_VOUCHERLIST_Get_TotalEntries(card_list) < 1) { DBG_INFO(AQGIVVE_LOGDOMAIN, "no cards found"); GWEN_Gui_MessageBox(GWEN_GUI_MSG_FLAGS_TYPE_WARN, "Warning", "Could not find any card", "OK", NULL, NULL, 0); return GWEN_DialogEvent_ResultAccept; } AG_VOUCHER *c = AG_VOUCHERLIST_Get_Card_By_Index(card_list, 0); const AG_VOUCHEROWNER *o = AG_VOUCHER_GetOwner(c); DBG_INFO(AQGIVVE_LOGDOMAIN, "card: %s, owner: %s", AG_VOUCHER_GetID(c), AG_VOUCHEROWNER_GetName(o)); GWEN_DIALOG *cards_dialog = AG_CardsDialog_new(xdlg->provider, user, card_list); GWEN_Gui_ExecDialog(cards_dialog, GWEN_Dialog_GetGuiId(cards_dialog)); AG_VOUCHERLIST_free(card_list, 1); free(token); free(u_id); free(u_name); } return GWEN_DialogEvent_ResultAccept; } int _dlgHandleActivated(GWEN_DIALOG *dlg, const char *sender) { if (strcasecmp(sender, "next_button") ==0) { return _addUser(dlg); } else if (strcasecmp(sender, "abort_button") == 0) { return GWEN_DialogEvent_ResultReject; } return GWEN_DialogEvent_ResultReject; } aqbanking-6.6.1/src/libs/plugins/backends/aqgivve/provider_request.h0000664000175000017500000000224014546575647022617 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2023 by Rico Rommel email : rico@bierrommel.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AG_PROVIDER_REQUEST_H #define AG_PROVIDER_REQUEST_H #include #include #include #include "voucherlist.h" #include "gwenhywfar/json.h" char *AG_Provider_Request_GetToken(AB_USER *user); AG_VOUCHERLIST *AG_Provider_Request_GetVoucherList(char *token); AB_TRANSACTION_LIST *AG_Provider_Request_GetTransactions(AB_ACCOUNT *account, const GWEN_DATE *start_date, const GWEN_DATE *end_date, const char *token); AB_BALANCE *AG_Provider_Request_GetBalance(AB_ACCOUNT *account, const char* token ); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqgivve/voucherlist.h0000664000175000017500000000172714546575647021575 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2023 by Rico Rommel email : rico@bierrommel.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AG_VOUCHER_LIST_H #define AG_VOUCHER_LIST_H #include "provider.h" #include "voucher.h" typedef struct AG_VOUCHERLIST AG_VOUCHERLIST; AG_VOUCHERLIST *AG_VOUCHERLIST_new(); void AG_VOUCHERLIST_free ( AG_VOUCHERLIST *list, int free_vouchers); void AG_VOUCHERLIST_AddCard ( AG_VOUCHERLIST *list, AG_VOUCHER *card); AG_VOUCHER *AG_VOUCHERLIST_Get_Card_By_ID ( AG_VOUCHERLIST *list, const char *id); AG_VOUCHER *AG_VOUCHERLIST_Get_Card_By_Index ( AG_VOUCHERLIST *list, int index); int AG_VOUCHERLIST_Get_TotalEntries ( AG_VOUCHERLIST *list); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqgivve/provider.h0000664000175000017500000000136114613452407021031 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2023 by Rico Rommel email : rico@bierrommel.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AG_PROVIDER_H #define AG_PROVIDER_H #include #include #define AQGIVVE_BACKENDNAME "aqgivve" #define AQGIVVE_LOGDOMAIN "aqgivve" typedef struct AG_PROVIDER AG_PROVIDER; AB_PROVIDER *AG_Provider_new(AB_BANKING *ab); #endif /* AH_PROVIDER_H */ aqbanking-6.6.1/src/libs/plugins/backends/aqgivve/cardsdialog.c0000664000175000017500000001175414640343244021453 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2023 by Rico Rommel email : rico@bierrommel.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "cardsdialog_p.h" #include #include /* ------------------------------------------------------------------------------------------------ * forward declarations * ------------------------------------------------------------------------------------------------ */ static void GWENHYWFAR_CB _freeData(void *bp, void *p); static int _dlgInit ( GWEN_DIALOG *dlg ); static int GWENHYWFAR_CB _dlgSignalHandler(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender); static int _dlgHandleActivated(GWEN_DIALOG *dlg, const char *sender); static int _addAccount(GWEN_DIALOG *dlg); /* ------------------------------------------------------------------------------------------------ * code * ------------------------------------------------------------------------------------------------ */ GWEN_INHERIT(GWEN_DIALOG, AG_CARDS_DIALOG); GWEN_DIALOG *AG_CardsDialog_new(AB_PROVIDER *pro, AB_USER *user, AG_VOUCHERLIST *card_list) { AG_CARDS_DIALOG *xdlg; GWEN_DIALOG *dlg; dlg=GWEN_Dialog_CreateAndLoadWithPath("carddialog", AB_PM_LIBNAME, AB_PM_DATADIR, "aqbanking/backends/aqgivve/dialogs/dlg_cardselect.dlg"); GWEN_Dialog_SetSignalHandler(dlg, _dlgSignalHandler); GWEN_NEW_OBJECT(AG_CARDS_DIALOG, xdlg); GWEN_INHERIT_SETDATA(GWEN_DIALOG, AG_CARDS_DIALOG, dlg, xdlg, _freeData); xdlg->cardlist = card_list; xdlg->provider = pro; xdlg->user = user; return dlg; } void GWENHYWFAR_CB _freeData(void *bp, void *p) { AG_CARDS_DIALOG *xdlg; xdlg=(AG_CARDS_DIALOG*) p; GWEN_FREE_OBJECT(xdlg); } int _dlgInit(GWEN_DIALOG *dlg) { GWEN_Dialog_SetCharProperty(dlg, "cardlistbox", GWEN_DialogProperty_Title, 0, "Cards", 0); AG_CARDS_DIALOG *xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AG_CARDS_DIALOG, dlg); for (int n = 0; n < AG_VOUCHERLIST_Get_TotalEntries(xdlg->cardlist); n++) { AG_VOUCHER *c = AG_VOUCHERLIST_Get_Card_By_Index(xdlg->cardlist, n); if (c) { const char *id = AG_VOUCHER_GetID(c); GWEN_Dialog_SetCharProperty(dlg, "cardlistbox", GWEN_DialogProperty_AddValue, 0, id, 0); } } return GWEN_DialogEvent_ResultHandled; } int GWENHYWFAR_CB _dlgSignalHandler(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender) { switch (t) { case GWEN_DialogEvent_TypeInit : return _dlgInit(dlg); case GWEN_DialogEvent_TypeActivated: return _dlgHandleActivated(dlg, sender); default: break; } return GWEN_DialogEvent_ResultHandled; } int _dlgHandleActivated(GWEN_DIALOG *dlg, const char *sender) { if (strcasecmp(sender, "add_button") == 0) { return _addAccount(dlg); } else if (strcasecmp(sender, "close_button") == 0) { return GWEN_DialogEvent_ResultAccept; } return GWEN_DialogEvent_ResultHandled; } int _addAccount(GWEN_DIALOG *dlg) { int index=GWEN_Dialog_GetIntProperty(dlg, "cardlistbox", GWEN_DialogProperty_Value, 0, -1); if (index >= 0) { const char *id = GWEN_Dialog_GetCharProperty(dlg, "cardlistbox", GWEN_DialogProperty_Value, index, NULL); DBG_INFO(AQGIVVE_LOGDOMAIN, "card selected: %s", id); AG_CARDS_DIALOG *xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AG_CARDS_DIALOG, dlg); if (!xdlg) { return GWEN_DialogEvent_ResultNotHandled; } else { const AG_VOUCHER *selected_card = AG_VOUCHERLIST_Get_Card_By_ID(xdlg->cardlist, id); if (!selected_card) { return GWEN_DialogEvent_ResultNotHandled; } else { const AG_VOUCHEROWNER *owner = AG_VOUCHER_GetOwner(selected_card); char *owner_name; if (owner) { owner_name = strdup(AG_VOUCHEROWNER_GetName(owner)); } else { owner_name = strdup(AB_User_GetUserName(xdlg->user)); } DBG_INFO(AQGIVVE_LOGDOMAIN, "creating account with card id %s and owner %s", id, owner_name); AB_ACCOUNT *account; int account_name_len = strlen(owner_name) + 12; char account_name[account_name_len]; snprintf(account_name, account_name_len, "GivveCard %s", owner_name); account = AB_Provider_CreateAccountObject(xdlg->provider); AB_Provider_AddAccount(xdlg->provider, account, 1); AB_Account_SetUserId(account, AB_User_GetUniqueId(xdlg->user)); AB_Account_SetOwnerName(account, owner_name); AB_Account_SetAccountNumber(account, id); AB_Account_SetAccountName(account, account_name); AB_Provider_WriteAccount(xdlg->provider, AB_Account_GetUniqueId(account), 1, 1, account); } } } return GWEN_DialogEvent_ResultHandled; } aqbanking-6.6.1/src/libs/plugins/backends/aqgivve/voucher.h0000664000175000017500000000165214546575647020676 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2023 by Rico Rommel email : rico@bierrommel.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AG_VOUCHER_H #define AG_VOUCHER_H #include "provider.h" #include "voucher.h" #include "voucherowner.h" typedef struct AG_VOUCHER AG_VOUCHER; AG_VOUCHER *AG_VOUCHER_new (const char *id, AG_VOUCHEROWNER *o); void AG_VOUCHER_SetID ( AG_VOUCHER *card, const char *id); void AG_VOUCHER_SetOwner ( AG_VOUCHER *card, AG_VOUCHEROWNER *o); const char *AG_VOUCHER_GetID ( AG_VOUCHER *card); const AG_VOUCHEROWNER *AG_VOUCHER_GetOwner (const AG_VOUCHER *card); void AG_VOUCHER_free ( AG_VOUCHER *card); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqgivve/provider_request_p.h0000664000175000017500000000126614546575647023145 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2023 by Rico Rommel email : rico@bierrommel.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AG_PROVIDER_REQUEST_P_H #define AG_PROVIDER_REQUEST_P_H #include "provider_request.h" #include "gwenhywfar/json.h" typedef struct AG_HTTP_SESSION_HEADER AG_HTTP_SESSION_HEADER; struct AG_HTTP_SESSION_HEADER { GWEN_DB_NODE *header; char *url; }; #endif aqbanking-6.6.1/src/libs/plugins/backends/aqgivve/Makefile.in0000644000175000017500000007070615037736025021104 00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/libs/plugins/backends/aqgivve ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/distri.m4 $(top_srcdir)/m4/gwenhywfar.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/os.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = aqgivve.xml CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libaqgivve_la_LIBADD = am_libaqgivve_la_OBJECTS = cardsdialog.lo merchant.lo meta.lo \ provider.lo provider_request.lo userdialog.lo voucher.lo \ voucherlist.lo voucherowner.lo libaqgivve_la_OBJECTS = $(am_libaqgivve_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/cardsdialog.Plo \ ./$(DEPDIR)/merchant.Plo ./$(DEPDIR)/meta.Plo \ ./$(DEPDIR)/provider.Plo ./$(DEPDIR)/provider_request.Plo \ ./$(DEPDIR)/userdialog.Plo ./$(DEPDIR)/voucher.Plo \ ./$(DEPDIR)/voucherlist.Plo ./$(DEPDIR)/voucherowner.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libaqgivve_la_SOURCES) DIST_SOURCES = $(libaqgivve_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(dlgdatadir)" "$(DESTDIR)$(plugindir)" DATA = $(dlgdata_DATA) $(plugin_DATA) HEADERS = $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/aqgivve.xml.in \ $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADD_ACLOCAL_FLAGS = @ADD_ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AQBANKING_CLI_VERSION_STRING = @AQBANKING_CLI_VERSION_STRING@ AQBANKING_FINTS_VERSION_STRING = @AQBANKING_FINTS_VERSION_STRING@ AQBANKING_SO_AGE = @AQBANKING_SO_AGE@ AQBANKING_SO_CURRENT = @AQBANKING_SO_CURRENT@ AQBANKING_SO_EFFECTIVE = @AQBANKING_SO_EFFECTIVE@ AQBANKING_SO_REVISION = @AQBANKING_SO_REVISION@ AQBANKING_VERSION_BUILD = @AQBANKING_VERSION_BUILD@ AQBANKING_VERSION_FULL_STRING = @AQBANKING_VERSION_FULL_STRING@ AQBANKING_VERSION_MAJOR = @AQBANKING_VERSION_MAJOR@ AQBANKING_VERSION_MINOR = @AQBANKING_VERSION_MINOR@ AQBANKING_VERSION_PATCHLEVEL = @AQBANKING_VERSION_PATCHLEVEL@ AQBANKING_VERSION_RELEASE_STRING = @AQBANKING_VERSION_RELEASE_STRING@ AQBANKING_VERSION_STRING = @AQBANKING_VERSION_STRING@ AQBANKING_VERSION_TAG = @AQBANKING_VERSION_TAG@ AQEBICS_CFLAGS = @AQEBICS_CFLAGS@ AQEBICS_LIBS = @AQEBICS_LIBS@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATETIME = @DATETIME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_EXCLUDE_PATTERNS = @DOXYGEN_EXCLUDE_PATTERNS@ DOXYGEN_FILE_PATTERNS = @DOXYGEN_FILE_PATTERNS@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENGUI_GTK2_CFLAGS = @GWENGUI_GTK2_CFLAGS@ GWENGUI_GTK2_LIBS = @GWENGUI_GTK2_LIBS@ GWENHYWFAR_MINIMUM_VERSION = @GWENHYWFAR_MINIMUM_VERSION@ HAVE_GWENGUI_GTK2 = @HAVE_GWENGUI_GTK2@ HAVE_I18N = @HAVE_I18N@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIBXSLT_CFLAGS = @LIBXSLT_CFLAGS@ LIBXSLT_LIBS = @LIBXSLT_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_SUPPORTS_QT = @MSGFMT_SUPPORTS_QT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ TUTORIALS = @TUTORIALS@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XMLMERGE = @XMLMERGE@ XMLSEC_CFLAGS = @XMLSEC_CFLAGS@ XMLSEC_LIBS = @XMLSEC_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ aqbanking_backends = @aqbanking_backends@ aqbanking_cfg_searchdir = @aqbanking_cfg_searchdir@ aqbanking_data_searchdir = @aqbanking_data_searchdir@ aqbanking_headerdir = @aqbanking_headerdir@ aqbanking_headerdir_am = @aqbanking_headerdir_am@ aqbanking_includes = @aqbanking_includes@ aqbanking_internal_libs = @aqbanking_internal_libs@ aqbanking_ldflags = @aqbanking_ldflags@ aqbanking_libs = @aqbanking_libs@ aqbanking_locale_searchdir = @aqbanking_locale_searchdir@ aqbanking_modules = @aqbanking_modules@ aqbanking_pkgdatadir = @aqbanking_pkgdatadir@ aqbanking_plugin_searchdir = @aqbanking_plugin_searchdir@ aqbanking_plugindir = @aqbanking_plugindir@ aqbanking_plugins_backends_dirs = @aqbanking_plugins_backends_dirs@ aqbanking_plugins_backends_libs = @aqbanking_plugins_backends_libs@ aqbanking_plugins_bankinfo_dirs = @aqbanking_plugins_bankinfo_dirs@ aqbanking_plugins_bankinfo_libs = @aqbanking_plugins_bankinfo_libs@ aqbanking_plugins_imexporters_dirs = @aqbanking_plugins_imexporters_dirs@ aqbanking_plugins_imexporters_libs = @aqbanking_plugins_imexporters_libs@ aqbanking_plugins_parsers_dirs = @aqbanking_plugins_parsers_dirs@ aqbanking_symlinkdir = @aqbanking_symlinkdir@ aqbanking_sys_is_windows = @aqbanking_sys_is_windows@ aqbankingpp_modules = @aqbankingpp_modules@ aqebics_datadir = @aqebics_datadir@ aqebics_includes = @aqebics_includes@ aqebics_internal_libs = @aqebics_internal_libs@ aqebics_ldflags = @aqebics_ldflags@ aqebics_libs = @aqebics_libs@ aqfints_datadir = @aqfints_datadir@ aqhbci_datadir = @aqhbci_datadir@ aqhbci_includes = @aqhbci_includes@ aqhbci_internal_libs = @aqhbci_internal_libs@ aqhbci_ldflags = @aqhbci_ldflags@ aqhbci_libs = @aqhbci_libs@ aqofxconnect_includes = @aqofxconnect_includes@ aqofxconnect_internal_libs = @aqofxconnect_internal_libs@ aqofxconnect_libs = @aqofxconnect_libs@ aqpaypal_includes = @aqpaypal_includes@ aqpaypal_internal_libs = @aqpaypal_internal_libs@ aqpaypal_libs = @aqpaypal_libs@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gmp_libs = @gmp_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_dir = @gwenhywfar_dir@ gwenhywfar_has_crypt = @gwenhywfar_has_crypt@ gwenhywfar_headers = @gwenhywfar_headers@ gwenhywfar_includes = @gwenhywfar_includes@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_plugins = @gwenhywfar_plugins@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ typemaker2_exe = @typemaker2_exe@ visibility_cflags = @visibility_cflags@ with_aqebics = @with_aqebics@ with_aqhbci = @with_aqhbci@ AM_CPPFLAGS = -I$(top_srcdir)/src/libs -I$(top_builddir)/src/libs $(gwenhywfar_includes) -I$(srcdir)/.. AM_CFLAGS = -DBUILDING_AQBANKING @visibility_cflags@ EXTRA_DIST = aqgivve.xml.in $(dlgdata_DATA) plugindir = @aqbanking_plugindir@/providers plugin_DATA = aqgivve.xml noinst_HEADERS = \ cardsdialog.h \ cardsdialog_p.h \ merchant.h \ merchant_p.h \ meta.h \ meta_p.h \ provider_p.h \ provider.h \ provider_request.h \ provider_request_p.h \ userdialog.h \ userdialog_p.h \ voucher.h \ voucher_p.h \ voucherlist.h \ voucherlist_p.h \ voucherowner.h \ voucherowner_p.h # static plugin library noinst_LTLIBRARIES = libaqgivve.la libaqgivve_la_SOURCES = \ cardsdialog.c \ merchant.c \ meta.c \ provider.c \ provider_request.c \ userdialog.c \ voucher.c \ voucherlist.c \ voucherowner.c dlgdatadir = $(aqbanking_pkgdatadir)/backends/aqgivve/dialogs dlgdata_DATA = \ dlg_edituser.dlg \ dlg_cardselect.dlg all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libs/plugins/backends/aqgivve/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libs/plugins/backends/aqgivve/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): aqgivve.xml: $(top_builddir)/config.status $(srcdir)/aqgivve.xml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libaqgivve.la: $(libaqgivve_la_OBJECTS) $(libaqgivve_la_DEPENDENCIES) $(EXTRA_libaqgivve_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libaqgivve_la_OBJECTS) $(libaqgivve_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cardsdialog.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/merchant.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/meta.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/provider.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/provider_request.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/userdialog.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/voucher.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/voucherlist.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/voucherowner.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-dlgdataDATA: $(dlgdata_DATA) @$(NORMAL_INSTALL) @list='$(dlgdata_DATA)'; test -n "$(dlgdatadir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(dlgdatadir)'"; \ $(MKDIR_P) "$(DESTDIR)$(dlgdatadir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(dlgdatadir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(dlgdatadir)" || exit $$?; \ done uninstall-dlgdataDATA: @$(NORMAL_UNINSTALL) @list='$(dlgdata_DATA)'; test -n "$(dlgdatadir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(dlgdatadir)'; $(am__uninstall_files_from_dir) install-pluginDATA: $(plugin_DATA) @$(NORMAL_INSTALL) @list='$(plugin_DATA)'; test -n "$(plugindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(plugindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(plugindir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(plugindir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(plugindir)" || exit $$?; \ done uninstall-pluginDATA: @$(NORMAL_UNINSTALL) @list='$(plugin_DATA)'; test -n "$(plugindir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(plugindir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(dlgdatadir)" "$(DESTDIR)$(plugindir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/cardsdialog.Plo -rm -f ./$(DEPDIR)/merchant.Plo -rm -f ./$(DEPDIR)/meta.Plo -rm -f ./$(DEPDIR)/provider.Plo -rm -f ./$(DEPDIR)/provider_request.Plo -rm -f ./$(DEPDIR)/userdialog.Plo -rm -f ./$(DEPDIR)/voucher.Plo -rm -f ./$(DEPDIR)/voucherlist.Plo -rm -f ./$(DEPDIR)/voucherowner.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dlgdataDATA install-pluginDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/cardsdialog.Plo -rm -f ./$(DEPDIR)/merchant.Plo -rm -f ./$(DEPDIR)/meta.Plo -rm -f ./$(DEPDIR)/provider.Plo -rm -f ./$(DEPDIR)/provider_request.Plo -rm -f ./$(DEPDIR)/userdialog.Plo -rm -f ./$(DEPDIR)/voucher.Plo -rm -f ./$(DEPDIR)/voucherlist.Plo -rm -f ./$(DEPDIR)/voucherowner.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-dlgdataDATA uninstall-pluginDATA .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-generic clean-libtool clean-noinstLTLIBRARIES \ cscopelist-am ctags ctags-am distclean distclean-compile \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dlgdataDATA install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-pluginDATA install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-dlgdataDATA uninstall-pluginDATA .PRECIOUS: Makefile sources: for f in $(libaqgivve_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for f in $(plugin_DATA); do \ echo $(subdir)/$$f >>$(top_srcdir)/pdsources; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d sources; \ done built_sources: cppcheck: for f in $(libaqgivve_la_SOURCES); do \ cppcheck --force $$f ; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done typefiles: typedefs: # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: aqbanking-6.6.1/src/libs/plugins/backends/aqgivve/merchant.c0000664000175000017500000000314314546575647021014 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2023 by Rico Rommel email : rico@bierrommel.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "merchant_p.h" AG_MERCHANT *AG_MERCHANT_new() { AG_MERCHANT *m = malloc(sizeof(AG_MERCHANT)); m->name = NULL; return m; } void AG_MERCHANT_SetName(AG_MERCHANT *m, const char *name) { if (m) { if (m->name) { free(m->name); } m->name = strdup(name); } } void AG_MERCHANT_free(AG_MERCHANT *m) { if (m) { if (m->name) { free(m->name); } free(m); } } const char *AG_MERCHANT_GetName(AG_MERCHANT *m) { char *name = NULL; if (m) { name = m->name; } return name; } AG_MERCHANT *AG_MERCHANT_FromJsonElem(GWEN_JSON_ELEM *meta_elem) { AG_MERCHANT *m = NULL; if (!meta_elem) { return NULL; } int type = GWEN_JsonElement_GetType(meta_elem); const char *val = GWEN_JsonElement_GetData(meta_elem); if ((type == GWEN_JSON_ELEMTYPE_STRING) && (strcmp(val, "null") == 0)) { return NULL; } if (type == GWEN_JSON_ELEMTYPE_OBJECT) { m = AG_MERCHANT_new(); GWEN_JSON_ELEM *json_name = GWEN_JsonElement_GetElementByPath(meta_elem, "name", 0); if (json_name) { AG_MERCHANT_SetName(m, GWEN_JsonElement_GetData(json_name)); } } return m; } aqbanking-6.6.1/src/libs/plugins/backends/aqgivve/voucherowner.c0000664000175000017500000000212714546575647021742 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2023 by Rico Rommel email : rico@bierrommel.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "voucherowner_p.h" AG_VOUCHEROWNER *AG_VOUCHEROWNER_new(const char *name) { AG_VOUCHEROWNER *o = malloc(sizeof(AG_VOUCHEROWNER)); o->name = NULL; AG_VOUCHEROWNER_SetName(o, name); return o; } void AG_VOUCHEROWNER_SetName(AG_VOUCHEROWNER *o, const char *name) { if (o) { if (o->name) { free(o->name); } o->name = strdup(name); } } void AG_VOUCHEROWNER_free(AG_VOUCHEROWNER *o) { if (o) { if (o->name) free(o->name); free(o); } } const char *AG_VOUCHEROWNER_GetName(const AG_VOUCHEROWNER *o) { char *name = NULL; if (o) { name = o->name; } return name; } aqbanking-6.6.1/src/libs/plugins/backends/aqgivve/merchant_p.h0000664000175000017500000000107114546575647021336 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2023 by Rico Rommel email : rico@bierrommel.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AG_MERCHANT_P_H #define AG_MERCHANT_P_H #include "provider.h" #include "merchant.h" struct AG_MERCHANT { char *name; }; #endif aqbanking-6.6.1/src/libs/plugins/backends/aqgivve/voucher_p.h0000664000175000017500000000115014546575647021206 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2023 by Rico Rommel email : rico@bierrommel.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AG_VOUCHER_P_H #define AG_VOUCHER_P_H #include "provider.h" #include "voucherowner.h" #include "voucher.h" struct AG_VOUCHER { char *id; AG_VOUCHEROWNER *owner; }; #endif aqbanking-6.6.1/src/libs/plugins/backends/aqgivve/userdialog_p.h0000664000175000017500000000117314546575647021676 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2023 by Rico Rommel email : rico@bierrommel.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AG_USERDIALOG_P_H #define AG_USERDIALOG_P_H #include "userdialog.h" #include struct AG_USER_DIALOG { AB_PROVIDER *provider; AB_USER *user; }; #endif aqbanking-6.6.1/src/libs/plugins/backends/aqgivve/meta.h0000664000175000017500000000202114546575647020140 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2023 by Rico Rommel email : rico@bierrommel.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AG_META_H #define AG_META_H #include "meta.h" #include "gwenhywfar/json.h" typedef struct AG_META AG_META; AG_META *AG_META_new(); AG_META *AG_META_FromJsonElem(GWEN_JSON_ELEM *meta_elem); int AG_META_GetCurrentPage(AG_META *meta); void AG_META_SetCurrentPage(AG_META *meta, int cp); int AG_META_GetTotalPages(AG_META *meta); void AG_META_SetTotalPages(AG_META *meta, int tp); int AG_META_GetPageSize(AG_META *meta); void AG_META_SetPageSize(AG_META *meta, int ps); int AG_META_GetTotalEntries(AG_META *meta); void AG_META_SetTotalEntries(AG_META *meta, int te); void AG_META_free(AG_META *meta); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqgivve/voucher.c0000664000175000017500000000253714546575647020674 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2023 by Rico Rommel email : rico@bierrommel.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "voucher_p.h" #include AG_VOUCHER *AG_VOUCHER_new(const char *id, AG_VOUCHEROWNER *o) { AG_VOUCHER *c = malloc(sizeof(AG_VOUCHER)); c->id = NULL; AG_VOUCHER_SetID(c, id); c->owner = NULL; AG_VOUCHER_SetOwner(c, o); return c; } void AG_VOUCHER_SetID(AG_VOUCHER *card, const char *id) { if (card) { card->id = strdup(id); } } void AG_VOUCHER_SetOwner(AG_VOUCHER *card, AG_VOUCHEROWNER *o) { if (card) { card->owner = o; } } void AG_VOUCHER_free(AG_VOUCHER *card) { if (card) { AG_VOUCHEROWNER_free(card->owner); free(card->id); free(card); } } const char *AG_VOUCHER_GetID(AG_VOUCHER *card) { char *id = NULL; if (card) { id = card->id; } return id; } const AG_VOUCHEROWNER *AG_VOUCHER_GetOwner(const AG_VOUCHER *card) { AG_VOUCHEROWNER *o = NULL; if (card) { o = card->owner; } return o; } aqbanking-6.6.1/src/libs/plugins/backends/aqgivve/cardsdialog_p.h0000664000175000017500000000123514546575647022013 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2023 by Rico Rommel email : rico@bierrommel.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AG_CARDSDIALOG_P_H #define AG_CARDSDIALOG_P_H #include "cardsdialog.h" #include struct AG_CARDS_DIALOG { AB_PROVIDER *provider; AG_VOUCHERLIST *cardlist; AB_USER *user; }; #endif aqbanking-6.6.1/src/libs/plugins/backends/aqgivve/provider.c0000664000175000017500000002025014613452407021022 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2023 by Rico Rommel email : rico@bierrommel.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "provider_p.h" #include #include "aqbanking/dialogs/dlg_newuser_be.h" #include #include #include #include #include #include #include "userdialog.h" #include "provider_request.h" /* ------------------------------------------------------------------------------------------------ * forward declarations * ------------------------------------------------------------------------------------------------ */ static void GWENHYWFAR_CB AG_Provider_FreeData(void *bp, void *p); static int AG_Provider_Init(AB_PROVIDER *pro, GWEN_DB_NODE *dbData); static int AG_Provider_Fini(AB_PROVIDER *pro, GWEN_DB_NODE *dbData); static int AG_Provider_SendCommands(AB_PROVIDER *pro, AB_PROVIDERQUEUE *pq, AB_IMEXPORTER_CONTEXT *ctx); static int AG_Provider_UpdateAccountSpec(AB_PROVIDER *pro, AB_ACCOUNT_SPEC *as, int doLock); static AB_ACCOUNT *AG_Provider_CreateAccountObject(AB_PROVIDER *pro); static AB_USER *AG_Provider_CreateUserObject(AB_PROVIDER *pro); static void AG_Provider_AddTransactionLimit(int limit, AB_TRANSACTION_LIMITS_LIST *tll); static int AG_Provider_ExecGetBal(AB_PROVIDER *pro, AB_IMEXPORTER_ACCOUNTINFO *ai, AB_ACCOUNT *account, char *token); static int AG_Provider_ExecGetTrans(AB_PROVIDER *pro, AB_IMEXPORTER_ACCOUNTINFO *ai, AB_ACCOUNT *account, AB_TRANSACTION *j, char *token); /* ------------------------------------------------------------------------------------------------ * code * ------------------------------------------------------------------------------------------------ */ GWEN_INHERIT(AB_PROVIDER, AG_PROVIDER); AB_PROVIDER *AG_Provider_new(AB_BANKING *ab) { AB_PROVIDER *pro; AG_PROVIDER *gp; pro=AB_Provider_new(ab, "aqgivve"); assert(pro); AB_Provider_SetInitFn(pro, AG_Provider_Init); AB_Provider_SetFiniFn(pro, AG_Provider_Fini); AB_Provider_SetGetNewUserDialogFn(pro, AG_GetNewUserDialog); AB_Provider_SetGetEditUserDialogFn(pro, AG_GetEditUserDialog); AB_Provider_SetSendCommandsFn(pro, AG_Provider_SendCommands); AB_Provider_SetCreateUserObjectsFn(pro, AG_Provider_CreateUserObject); AB_Provider_SetCreateAccountObjectsFn(pro, AG_Provider_CreateAccountObject); AB_Provider_SetUpdateAccountSpecFn(pro, AG_Provider_UpdateAccountSpec); AB_Provider_AddFlags(pro, AB_PROVIDER_FLAGS_HAS_EDITUSER_DIALOG | AB_PROVIDER_FLAGS_HAS_NEWUSER_DIALOG); GWEN_NEW_OBJECT(AG_PROVIDER, gp); GWEN_INHERIT_SETDATA(AB_PROVIDER, AG_PROVIDER, pro, gp, AG_Provider_FreeData); return pro; } int AG_Provider_SendCommands(AB_PROVIDER *pro, AB_PROVIDERQUEUE *pq, AB_IMEXPORTER_CONTEXT *ctx) { AB_USERQUEUE_LIST *uql; AB_USERQUEUE *uq; AB_ACCOUNTQUEUE *aq; uql=AB_UserQueue_List_new(); AB_Provider_SortProviderQueueIntoUserQueueList(pro, pq, uql); uq=AB_UserQueue_List_First(uql); while (uq) { AB_ACCOUNTQUEUE_LIST *aql; AB_USER *u; u=AB_UserQueue_GetUser(uq); DBG_INFO(AQGIVVE_LOGDOMAIN, "Handling user \"%s\"", AB_User_GetUserId(u)); char *token; token = AG_Provider_Request_GetToken(u); if (token) { aql=AB_UserQueue_GetAccountQueueList(uq); aq=AB_AccountQueue_List_First(aql); while (aq) { AB_ACCOUNT *a=AB_AccountQueue_GetAccount(aq); AB_IMEXPORTER_ACCOUNTINFO *ai=AB_ImExporterContext_GetOrAddAccountInfo(ctx, AB_Account_GetUniqueId(a), AB_Account_GetIban(a), AB_Account_GetBankCode(a), AB_Account_GetAccountNumber(a), AB_Account_GetAccountType(a)); AB_TRANSACTION_LIST2 *tl2 = AB_AccountQueue_GetTransactionList(aq); AB_TRANSACTION_LIST2_ITERATOR *it; it=AB_Transaction_List2_First(tl2); AB_TRANSACTION *t; t=AB_Transaction_List2Iterator_Data(it); while (t) { int command = AB_Transaction_GetCommand(t); DBG_INFO(AQGIVVE_LOGDOMAIN, "command: %d", command); switch (command) { case AB_Transaction_CommandGetBalance: AG_Provider_ExecGetBal(pro, ai, a, token); break; case AB_Transaction_CommandGetTransactions: AG_Provider_ExecGetTrans(pro, ai, a, t, token); break; default: break; } AB_Transaction_SetStatus(t, AB_Transaction_StatusAccepted); t=AB_Transaction_List2Iterator_Next(it); } AB_Transaction_List2Iterator_free(it); aq = AB_AccountQueue_List_Next(aq); } free(token); } uq=AB_UserQueue_List_Next(uq); } return 0; } void GWENHYWFAR_CB AG_Provider_FreeData(void *bp, void *p) { AG_PROVIDER *gp; gp=(AG_PROVIDER*) p; GWEN_FREE_OBJECT(gp); } int AG_Provider_Init(AB_PROVIDER *pro, GWEN_DB_NODE *dbData) { if (!GWEN_Logger_IsOpen(AQGIVVE_LOGDOMAIN)) { GWEN_Logger_Open(AQGIVVE_LOGDOMAIN, "aqgivve", 0, GWEN_LoggerType_Console, GWEN_LoggerFacility_User); GWEN_Logger_SetLevel(AQGIVVE_LOGDOMAIN, GWEN_LoggerLevel_Info); } return 0; } int AG_Provider_Fini(AB_PROVIDER *pro, GWEN_DB_NODE *dbData) { return 0; } AB_USER *AG_Provider_CreateUserObject(AB_PROVIDER *pro) { AB_USER *u; u=AB_User_new(); AB_User_SetProvider(u, pro); AB_User_SetBackendName(u, AQGIVVE_BACKENDNAME); AB_User_SetCountry(u, "de"); AB_User_SetBankCode(u, "GivveCard"); return u; } AB_ACCOUNT *AG_Provider_CreateAccountObject(AB_PROVIDER *pro) { AB_ACCOUNT *a; a=AB_Account_new(); AB_Account_SetProvider(a, pro); AB_Account_SetBackendName(a, AQGIVVE_BACKENDNAME); AB_Account_SetBankName(a, "GivveCard"); AB_Account_SetBankCode(a, "GivveCard"); AB_Account_SetAccountType(a, AB_AccountType_Bank); return a; } void AG_Provider_AddTransactionLimit(int limit, AB_TRANSACTION_LIMITS_LIST *tll) { AB_TRANSACTION_LIMITS *balance_limits=AB_TransactionLimits_new(); AB_TransactionLimits_SetCommand(balance_limits, limit); AB_TransactionLimits_SetMaxLinesPurpose(balance_limits, 1); AB_TransactionLimits_List_Add(balance_limits, tll); } int AG_Provider_UpdateAccountSpec(AB_PROVIDER *pro, AB_ACCOUNT_SPEC *as, int doLock) { AB_TRANSACTION_LIMITS_LIST *tll; tll=AB_TransactionLimits_List_new(); AG_Provider_AddTransactionLimit(AB_Transaction_CommandGetBalance, tll); AG_Provider_AddTransactionLimit(AB_Transaction_CommandGetTransactions, tll); AB_AccountSpec_SetTransactionLimitsList(as, tll); return 0; } int AG_Provider_ExecGetBal(AB_PROVIDER *pro, AB_IMEXPORTER_ACCOUNTINFO *ai, AB_ACCOUNT *account, char *token) { AB_BALANCE *bal = AG_Provider_Request_GetBalance(account, token); if (bal) { AB_ImExporterAccountInfo_AddBalance(ai, bal); } return 0; } int AG_Provider_ExecGetTrans(AB_PROVIDER *pro, AB_IMEXPORTER_ACCOUNTINFO *ai, AB_ACCOUNT *account, AB_TRANSACTION *j, char *token) { AB_TRANSACTION_LIST *list = AG_Provider_Request_GetTransactions(account, AB_Transaction_GetFirstDate(j), AB_Transaction_GetLastDate(j), token); AB_TRANSACTION *t; if (list) { DBG_INFO(AQGIVVE_LOGDOMAIN, "trans count: %d", AB_Transaction_List_GetCount(list)); t = AB_Transaction_List_First(list); while (t) { DBG_INFO(AQGIVVE_LOGDOMAIN, "trans: %s", AB_Transaction_GetFiId(t)); AB_Transaction_List_Del(t); AB_ImExporterAccountInfo_AddTransaction(ai, t); t = AB_Transaction_List_First(list); } AB_Transaction_List_free(list); } return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqgivve/Makefile.am0000664000175000017500000000255014576127360021070 00000000000000 AM_CPPFLAGS = -I$(top_srcdir)/src/libs -I$(top_builddir)/src/libs $(gwenhywfar_includes) -I$(srcdir)/.. AM_CFLAGS=-DBUILDING_AQBANKING @visibility_cflags@ EXTRA_DIST=aqgivve.xml.in plugindir=@aqbanking_plugindir@/providers plugin_DATA=aqgivve.xml noinst_HEADERS=\ cardsdialog.h \ cardsdialog_p.h \ merchant.h \ merchant_p.h \ meta.h \ meta_p.h \ provider_p.h \ provider.h \ provider_request.h \ provider_request_p.h \ userdialog.h \ userdialog_p.h \ voucher.h \ voucher_p.h \ voucherlist.h \ voucherlist_p.h \ voucherowner.h \ voucherowner_p.h # static plugin library noinst_LTLIBRARIES=libaqgivve.la libaqgivve_la_SOURCES=\ cardsdialog.c \ merchant.c \ meta.c \ provider.c \ provider_request.c \ userdialog.c \ voucher.c \ voucherlist.c \ voucherowner.c dlgdatadir=$(aqbanking_pkgdatadir)/backends/aqgivve/dialogs dlgdata_DATA=\ dlg_edituser.dlg \ dlg_cardselect.dlg EXTRA_DIST+=$(dlgdata_DATA) sources: for f in $(libaqgivve_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for f in $(plugin_DATA); do \ echo $(subdir)/$$f >>$(top_srcdir)/pdsources; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d sources; \ done built_sources: cppcheck: for f in $(libaqgivve_la_SOURCES); do \ cppcheck --force $$f ; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done typefiles: typedefs: aqbanking-6.6.1/src/libs/plugins/backends/aqgivve/cardsdialog.h0000664000175000017500000000124714546575647021477 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2023 by Rico Rommel email : rico@bierrommel.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AG_CARDSDIALOG_H #define AG_CARDSDIALOG_H #include "provider.h" #include "voucherlist.h" typedef struct AG_CARDS_DIALOG AG_CARDS_DIALOG; GWEN_DIALOG *AG_CardsDialog_new (AB_PROVIDER *pro, AB_USER *user, AG_VOUCHERLIST *card_list); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqgivve/dlg_edituser.dlg0000664000175000017500000000252514546575647022214 00000000000000 aqbanking-6.6.1/src/libs/plugins/backends/aqgivve/voucherlist.c0000664000175000017500000000376714546575647021576 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2023 by Rico Rommel email : rico@bierrommel.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "voucherlist_p.h" AG_VOUCHERLIST *AG_VOUCHERLIST_new() { AG_VOUCHERLIST *l = malloc(sizeof(AG_VOUCHERLIST)); l->cards = malloc(1); l->total_entries = 0; return l; } void AG_VOUCHERLIST_free(AG_VOUCHERLIST *list, int free_vouchers) { if (list) { if (free_vouchers) { for (int n = 0; n < list->total_entries; n++) { AG_VOUCHER_free(list->cards[n]); } } free(list->cards); free(list); } } void AG_VOUCHERLIST_AddCard(AG_VOUCHERLIST *list, AG_VOUCHER *card) { if (list && card) { list->total_entries++; list->cards = realloc(list->cards, list->total_entries * sizeof(AG_VOUCHER *)); list->cards[list->total_entries - 1] = card; } } int AG_VOUCHERLIST_Get_TotalEntries(AG_VOUCHERLIST *list) { int t = 0; if (list) { t = list->total_entries; } return t; } AG_VOUCHER *AG_VOUCHERLIST_Get_Card_By_ID(AG_VOUCHERLIST *list, const char *id) { AG_VOUCHER *res; res = NULL; if (list) { int total_entries = AG_VOUCHERLIST_Get_TotalEntries(list); int n = 0; while (!res && (n < total_entries)) { AG_VOUCHER *c = AG_VOUCHERLIST_Get_Card_By_Index(list, n); if (c) { const char *c_id = AG_VOUCHER_GetID(c); if (strcmp(c_id, id) == 0) { res = c; } } n++; } } return res; } AG_VOUCHER *AG_VOUCHERLIST_Get_Card_By_Index(AG_VOUCHERLIST *list, int index) { AG_VOUCHER *res = NULL; if (list) { if (index < list->total_entries) { res = list->cards[index]; } } return res; } aqbanking-6.6.1/src/libs/plugins/backends/aqgivve/aqgivve.xml.in0000664000175000017500000000044114546575647021636 00000000000000 @AQBANKING_VERSION_STRING@ Rico Rommel(rico@bierrommel.de) GivveCard backend This backend allows importing transaction from Givve Cards. aqbanking-6.6.1/src/libs/plugins/backends/aqgivve/userdialog.h0000664000175000017500000000125114546575647021354 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2023 by Rico Rommel email : rico@bierrommel.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AG_USERDIALOG_H #define AG_USERDIALOG_H #include "provider.h" typedef struct AG_USER_DIALOG AG_USER_DIALOG; GWEN_DIALOG *AG_GetEditUserDialog (AB_PROVIDER *pro, AB_USER *u); GWEN_DIALOG *AG_GetNewUserDialog (AB_PROVIDER *pro, int i); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqgivve/provider_request.c0000664000175000017500000004011514640343244022572 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2023 by Rico Rommel email : rico@bierrommel.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "provider.h" #include "provider_request_p.h" #include "gwenhywfar/json.h" #include "gwenhywfar/json_read.h" #include "meta.h" #include "merchant.h" #include #include #include /* ------------------------------------------------------------------------------------------------ * forward declarations * ------------------------------------------------------------------------------------------------ */ static void GWENHYWFAR_CB _freeData(void *bp, void *p); static GWEN_JSON_ELEM *_sendRequest(char *method, char *url, GWEN_DB_NODE *header_params, char *send_data_buf); static int GWENHYWFAR_CB _cbInitSyncIo(GWEN_HTTP_SESSION *sess, GWEN_SYNCIO *sio); static GWEN_DATE *_parseDate(const char *date_str); static AB_VALUE *_parseMoney(GWEN_JSON_ELEM *value_elem); static AB_BALANCE *_parseBalance(GWEN_JSON_ELEM *balance_elem); static AB_TRANSACTION *_parseTransaction(GWEN_JSON_ELEM *data_elem); static char *_createDateFilter(const GWEN_DATE *date, const char *op); static GWEN_JSON_ELEM *_getElement(GWEN_JSON_ELEM *parent, const char *key); /* ------------------------------------------------------------------------------------------------ * code * ------------------------------------------------------------------------------------------------ */ GWEN_INHERIT(GWEN_HTTP_SESSION, AG_HTTP_SESSION_HEADER); void GWENHYWFAR_CB _freeData(void *bp, void *p) { free(p); } int GWENHYWFAR_CB _cbInitSyncIo(GWEN_HTTP_SESSION *sess, GWEN_SYNCIO *sio) { AG_HTTP_SESSION_HEADER *xsess; xsess = GWEN_INHERIT_GETDATA(GWEN_HTTP_SESSION, AG_HTTP_SESSION_HEADER, sess); GWEN_DB_NODE *header = GWEN_SyncIo_Http_GetDbHeaderOut(sio); if (xsess->url) { GWEN_DB_NODE *command = GWEN_SyncIo_Http_GetDbCommandOut(sio); GWEN_DB_SetCharValue(command, GWEN_DB_FLAGS_OVERWRITE_VARS, "url", xsess->url); } GWEN_DB_NODE *var = GWEN_DB_GetFirstVar(xsess->header); while (var) { GWEN_DB_NODE *val = GWEN_DB_GetFirstValue(var); GWEN_DB_SetCharValue(header, GWEN_DB_FLAGS_OVERWRITE_VARS, GWEN_DB_VariableName(var), GWEN_DB_GetCharValueFromNode(val)); var = GWEN_DB_GetNextVar(var); } return 0; } GWEN_JSON_ELEM *_sendRequest(char *method, char *url, GWEN_DB_NODE *header_params, char *send_data_buf) { char *url_base = "https://www.givve.com"; size_t send_data_len = 0; if (send_data_buf) { send_data_len = strlen(send_data_buf); } GWEN_JSON_ELEM *root_elem = NULL; GWEN_HTTP_SESSION *sess; GWEN_BUFFER *tbuf; int rv; sess=GWEN_HttpSession_new(url_base, " https", 443); if (sess==NULL) { DBG_ERROR(AQGIVVE_LOGDOMAIN, "Could not create http session for "); GWEN_HttpSession_free(sess); return NULL; } AG_HTTP_SESSION_HEADER *xsess; GWEN_NEW_OBJECT(AG_HTTP_SESSION_HEADER, xsess); GWEN_INHERIT_SETDATA(GWEN_HTTP_SESSION, AG_HTTP_SESSION_HEADER, sess, xsess, _freeData); xsess->header = header_params; xsess->url = url; GWEN_HttpSession_SetInitSyncIoFn(sess, _cbInitSyncIo); rv = GWEN_HttpSession_Init(sess); if (rv < 0) { DBG_INFO(AQGIVVE_LOGDOMAIN, "Session init failed: %d", rv); GWEN_HttpSession_free(sess); return NULL; } rv=GWEN_HttpSession_SendPacket(sess, method, (const uint8_t *) send_data_buf, send_data_len); if (rv < 0) { DBG_INFO(AQGIVVE_LOGDOMAIN, "Send data failed: %d", rv); GWEN_HttpSession_Fini(sess); GWEN_HttpSession_free(sess); return NULL; } tbuf=GWEN_Buffer_new(0, 50000, 0, 1); rv=GWEN_HttpSession_RecvPacket(sess, tbuf); if (rv < 0) { DBG_INFO(AQGIVVE_LOGDOMAIN, "Receive data failed: %d", rv); GWEN_HttpSession_Fini(sess); GWEN_Buffer_free(tbuf); GWEN_HttpSession_free(sess); return NULL; } root_elem = GWEN_JsonElement_fromString(GWEN_Buffer_GetStart(tbuf)); GWEN_HttpSession_Fini(sess); GWEN_Buffer_free(tbuf); GWEN_HttpSession_free(sess); return root_elem; } char *AG_Provider_Request_GetToken(AB_USER *user) { char *token = NULL; char text[512]; char pw[129]; char pw_token[1024]; const char *identifier = AB_User_GetUserId(user); snprintf(text, sizeof(text)-1, "Please enter the password for user %s\nPlease enter the password for user %s
", identifier, identifier); GWEN_Gui_GetPassword(0, pw_token, "Enter Password", text, pw, 4, sizeof(pw)-1, GWEN_Gui_PasswordMethod_Text, NULL, 0); char request[1024]; snprintf(request, 1024, "{\"identifier\": \"%s\", \"password\": \"%s\", \"accessors\": [ \"voucher_owner\"]}", identifier, pw); GWEN_DB_NODE *header = GWEN_DB_Group_new("header"); GWEN_DB_SetCharValue(header, GWEN_DB_FLAGS_OVERWRITE_VARS, "Accept", "application/json"); GWEN_DB_SetCharValue(header, GWEN_DB_FLAGS_OVERWRITE_VARS, "Accept-Version", "v2"); GWEN_DB_SetCharValue(header, GWEN_DB_FLAGS_OVERWRITE_VARS, "Content-Type", "application/json"); GWEN_JSON_ELEM *json_root = _sendRequest("POST", "/api/authorizations", header, request); if (json_root) { GWEN_JSON_ELEM *json_data = _getElement(json_root, "data"); if (json_data) { GWEN_JSON_ELEM *json_token_type = GWEN_JsonElement_GetElementByPath(json_data, "token_type", 0); GWEN_JSON_ELEM *json_token = GWEN_JsonElement_GetElementByPath(json_data, "access_token", 0); if (json_token && json_token_type) { const char *token_type_str = GWEN_JsonElement_GetData(json_token_type); const char *token_str = GWEN_JsonElement_GetData(json_token); size_t token_max_len = strlen(token_type_str) + strlen(token_str) + 5; token = malloc(token_max_len); strncpy(token, token_type_str, token_max_len); strcat(token, " "); strncat(token, token_str, token_max_len - strlen(token_type_str) -1) ; token[0] = toupper(token[0]); printf("token: %s", token); GWEN_JsonElement_free(json_token); GWEN_JsonElement_free(json_token_type); } GWEN_JsonElement_free(json_data); } GWEN_JsonElement_free(json_root); } if (!token) { DBG_INFO(AQGIVVE_LOGDOMAIN, "no token received "); } GWEN_DB_Group_free(header); return token; } AG_VOUCHERLIST *AG_Provider_Request_GetVoucherList(char *token) { int total_pages = 1; int current_page = 1; char path[512]; AG_VOUCHERLIST *card_list = AG_VOUCHERLIST_new(); GWEN_DB_NODE *header = GWEN_DB_Group_new("header"); GWEN_DB_SetCharValue(header, GWEN_DB_FLAGS_OVERWRITE_VARS, "Accept", "application/json"); GWEN_DB_SetCharValue(header, GWEN_DB_FLAGS_OVERWRITE_VARS, "Accept-Version", "v2"); GWEN_DB_SetCharValue(header, GWEN_DB_FLAGS_OVERWRITE_VARS, "Authorization", token); while (current_page <= total_pages) { snprintf(path, sizeof(path) - 1, "/api/vouchers?page[number]=%d", current_page); GWEN_JSON_ELEM *json_root = _sendRequest("GET", path, header, NULL); if (json_root) { //Get number of entries AG_META *meta = AG_META_FromJsonElem(_getElement(json_root, "meta")); if (meta) { int total_entries = AG_META_GetTotalEntries(meta); AG_META_free(meta); GWEN_JSON_ELEM *json_data = _getElement(json_root, "data"); if (json_data && (total_entries > 0)) { int n = 0; GWEN_JSON_ELEM *json_card = GWEN_JsonElement_Tree2_GetFirstChild(json_data); while (json_card) { GWEN_JSON_ELEM *json_id = GWEN_JsonElement_GetElementByPath(json_card, "id", 0); const char *id = GWEN_JsonElement_GetData(json_id); AG_VOUCHEROWNER *owner = NULL; GWEN_JSON_ELEM *json_owner = GWEN_JsonElement_GetElementByPath(json_card, "owner", 0); if (json_owner) { GWEN_JSON_ELEM *json_name = GWEN_JsonElement_GetElementByPath(json_owner, "name", 0); const char *owner_name = GWEN_JsonElement_GetData(json_name); owner = AG_VOUCHEROWNER_new(owner_name); } AG_VOUCHER *card = AG_VOUCHER_new(id, owner); AG_VOUCHERLIST_AddCard(card_list, card); DBG_INFO(AQGIVVE_LOGDOMAIN, "found card %d: %s", n, id); json_card = GWEN_JsonElement_Tree2_GetNext(json_card); n++; } } } GWEN_JsonElement_free(json_root); } current_page++; } return card_list; } AB_BALANCE *AG_Provider_Request_GetBalance(AB_ACCOUNT *account, const char *token) { const char *id = AB_Account_GetAccountNumber(account); char path[512]; snprintf(path, sizeof(path) - 1, "/api/vouchers/%s", id); GWEN_DB_NODE *header = GWEN_DB_Group_new("header"); GWEN_DB_SetCharValue(header, GWEN_DB_FLAGS_OVERWRITE_VARS, "Accept", "application/json"); GWEN_DB_SetCharValue(header, GWEN_DB_FLAGS_OVERWRITE_VARS, "Accept-Version", "v2"); GWEN_DB_SetCharValue(header, GWEN_DB_FLAGS_OVERWRITE_VARS, "Authorization", token); GWEN_JSON_ELEM *json_root = _sendRequest("GET", path, header, NULL); AB_BALANCE *bal = NULL; if (json_root) { GWEN_JSON_ELEM *json_data = _getElement(json_root, "data"); if (json_data) { bal = _parseBalance(GWEN_JsonElement_GetElementByPath(json_data, "balance", 0)); if (bal) { GWEN_JSON_ELEM *json_date = GWEN_JsonElement_GetElementByPath(json_data, "updated_at", 0); if (json_date) { AB_Balance_SetDate(bal, _parseDate(GWEN_JsonElement_GetData(json_date))); GWEN_JsonElement_free(json_date); } } GWEN_JsonElement_free(json_data); } GWEN_JsonElement_free(json_root); } GWEN_DB_Group_free(header); return bal; } AB_TRANSACTION_LIST *AG_Provider_Request_GetTransactions(AB_ACCOUNT *account, const GWEN_DATE *start_date, const GWEN_DATE *end_date, const char *token) { int total_pages = 1; int current_page = 1; char path[512]; AB_TRANSACTION_LIST *trans_list = AB_Transaction_List_new(); const char *id = AB_Account_GetAccountNumber(account); GWEN_DB_NODE *header = GWEN_DB_Group_new("header"); GWEN_DB_SetCharValue(header, GWEN_DB_FLAGS_OVERWRITE_VARS, "Accept", "application/json"); GWEN_DB_SetCharValue(header, GWEN_DB_FLAGS_OVERWRITE_VARS, "Accept-Version", "v2"); GWEN_DB_SetCharValue(header, GWEN_DB_FLAGS_OVERWRITE_VARS, "Authorization", token); while (current_page <= total_pages) { char *filter_start = _createDateFilter(start_date, "$gte"); char *filter_end = _createDateFilter(end_date, "$lte"); snprintf(path, sizeof(path) - 1, "/api/vouchers/%s/transactions/?page[number]=%d&filter[status][$in]=Settled%s%s", id, current_page, filter_start, filter_end); free(filter_start); free(filter_end); GWEN_JSON_ELEM *json_root = _sendRequest("GET", path, header, NULL); if (json_root) { GWEN_JSON_ELEM *json_meta = _getElement(json_root, "meta"); if (json_meta) { AG_META *meta = AG_META_FromJsonElem(json_meta); if (meta) { total_pages = AG_META_GetTotalPages(meta); AG_META_free(meta); } GWEN_JsonElement_free(json_meta); } GWEN_JSON_ELEM *json_data = _getElement(json_root, "data"); if (json_data) { GWEN_JSON_ELEM *json_transaction = GWEN_JsonElement_Tree2_GetFirstChild(json_data); while (json_transaction) { AB_TRANSACTION *t = _parseTransaction(json_transaction); if (t) { AB_Transaction_List_Add(t, trans_list); } json_transaction = GWEN_JsonElement_Tree2_GetNext(json_transaction); } GWEN_JsonElement_free(json_data); } GWEN_JsonElement_free(json_root); } current_page++; } return trans_list; } AB_BALANCE *_parseBalance(GWEN_JSON_ELEM *balance_elem) { AB_BALANCE *bal = NULL; AB_VALUE *vc = _parseMoney(balance_elem); if (vc) { bal=AB_Balance_new(); AB_Balance_SetType(bal, AB_Balance_TypeBooked); AB_Balance_SetValue(bal, vc); AB_Value_free(vc); } return bal; } GWEN_DATE *_parseDate(const char *date_str) { GWEN_DATE *date =NULL; char *buf = strdup(date_str); char *ptr = strchr(buf, 'T'); if (ptr) { *ptr = '\0'; date = GWEN_Date_fromStringWithTemplate(buf, "YYYY-MM-DD"); } free(buf); return date; } AB_VALUE *_parseMoney(GWEN_JSON_ELEM *value_elem) { AB_VALUE *val = NULL; if (value_elem) { GWEN_JSON_ELEM *json_cents = GWEN_JsonElement_GetElementByPath(value_elem, "cents", 0); GWEN_JSON_ELEM *json_currency = GWEN_JsonElement_GetElementByPath(value_elem, "currency", 0); if (json_cents && json_currency) { const char *cent_str = GWEN_JsonElement_GetData(json_cents); const char *currency = GWEN_JsonElement_GetData(json_currency) ; double d = strtod(cent_str, NULL); val = AB_Value_fromDouble(d / 100); AB_Value_SetCurrency(val, currency); } } return val; } AB_TRANSACTION *_parseTransaction(GWEN_JSON_ELEM *data_elem) { AB_TRANSACTION *t = AB_Transaction_new(); GWEN_JSON_ELEM *json_amount = GWEN_JsonElement_GetElementByPath(data_elem, "amount", 0); if (json_amount) { AB_VALUE *v = _parseMoney(json_amount); if (v) { AB_Transaction_SetValue(t, v); } } GWEN_JSON_ELEM *json_date = GWEN_JsonElement_GetElementByPath(data_elem, "booked_at", 0); if (json_date) { GWEN_DATE *d = _parseDate(GWEN_JsonElement_GetData(json_date)); if (d) { AB_Transaction_SetDate(t, d); AB_Transaction_SetValutaDate(t, d); } } GWEN_JSON_ELEM *json_id = GWEN_JsonElement_GetElementByPath(data_elem, "id", 0); if (json_id) { AB_Transaction_SetFiId(t, GWEN_JsonElement_GetData(json_id)); } GWEN_JSON_ELEM *json_fee = GWEN_JsonElement_GetElementByPath(data_elem, "fixed_fee", 0); if (json_fee) { AB_VALUE *v = _parseMoney(json_fee); if (v) { AB_Transaction_SetFees(t, v); } } GWEN_JSON_ELEM *json_desc = GWEN_JsonElement_GetElementByPath(data_elem, "description", 0); if (json_desc) { AB_Transaction_SetPurpose(t, GWEN_JsonElement_GetData(json_desc)); } const char *type_str = NULL; GWEN_JSON_ELEM *json_type = GWEN_JsonElement_GetElementByPath(data_elem, "type", 0); if (json_type) { type_str = GWEN_JsonElement_GetData(json_type); AB_Transaction_SetTransactionText(t, type_str); } if (strcmp(type_str, "load") == 0) { AB_Transaction_SetRemoteName(t, "Aufladung"); } else { GWEN_JSON_ELEM *json_merchant = GWEN_JsonElement_GetElementByPath(data_elem, "merchant", 0); if (json_merchant) { AG_MERCHANT *m = AG_MERCHANT_FromJsonElem(json_merchant); if (m) { AB_Transaction_SetRemoteName(t, AG_MERCHANT_GetName(m)); } } } AB_Transaction_SetStatus(t, AB_Transaction_StatusAccepted); AB_Transaction_SetType(t, AB_Transaction_TypeStatement); AB_Transaction_SetSubType(t, AB_Transaction_SubTypeNone); return t; } char *_createDateFilter(const GWEN_DATE *date, const char *op) { char *filter = malloc(60); if (date && op) { GWEN_BUFFER *date_buf = GWEN_Buffer_new(0, 20, 0, 1); GWEN_Date_toStringWithTemplate(date, "YYYY-MM-DD", date_buf); snprintf(filter, 60, "&filter[created_at][%s]=%s", op, GWEN_Buffer_GetStart(date_buf)); GWEN_Buffer_free(date_buf); } else { filter[0] = '\0'; } return filter; } GWEN_JSON_ELEM *_getElement(GWEN_JSON_ELEM *parent, const char *key) { GWEN_JSON_ELEM *json_el = NULL; GWEN_JSON_ELEM *json_child = GWEN_JsonElement_Tree2_GetFirstChild(parent); while (!json_el && json_child) { if (json_child) { if (strcmp(GWEN_JsonElement_GetData(json_child), key) == 0) { json_el = GWEN_JsonElement_Tree2_GetFirstChild(json_child); } json_child = GWEN_JsonElement_Tree2_GetNext(json_child); } } return json_el; } aqbanking-6.6.1/src/libs/plugins/backends/aqebics/0000755000175000017500000000000015037736164017056 500000000000000aqbanking-6.6.1/src/libs/plugins/backends/aqebics/aqebics.xml.in0000664000175000017500000000102614043610744021524 00000000000000 @AQEBICS_VERSION_STRING@ Martin Preuss(martin@libchipcard.de) EBICS This backend provides support for EBICS. @AQEBICS_VERSION_STRING@ Martin Preuss(martin@libchipcard.de) EBICS Homebanking Erweiterung Diese Erweiterung erlaubt Homebanking mittels EBICS. aqbanking-6.6.1/src/libs/plugins/backends/aqebics/aqebics_l.h0000664000175000017500000000111514043610744021060 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AQEBICS_AQEBICS_L_H #define AQEBICS_AQEBICS_L_H #include "aqbanking/i18n_l.h" #include #include #endif aqbanking-6.6.1/src/libs/plugins/backends/aqebics/msg/0000755000175000017500000000000015037736164017644 500000000000000aqbanking-6.6.1/src/libs/plugins/backends/aqebics/msg/keys.c0000664000175000017500000007532114043610745020705 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "keys.h" #include "xml.h" #include #include #include #include #include #include EB_RC EB_Key_toBin(const GWEN_CRYPT_KEY *k, const char *userId, const char *version, int keySize, GWEN_BUFFER *buf) { int i; char numbuf[32]; int rv; uint8_t kbuf[300]; uint32_t klen; if (strlen(version)!=4) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Invalid version \"%s\"", version); return EB_RC_KEYMGMT_UNSUPPORTED_VERSION_SIGNATURE; } if (!userId || !*userId) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Missing key owner"); return EB_RC_INVALID_REQUEST; } GWEN_Buffer_AppendString(buf, version); i=(int)strlen(userId); if (i>8) { DBG_ERROR(AQEBICS_LOGDOMAIN, "User id too long"); return EB_RC_INVALID_REQUEST; } GWEN_Buffer_AppendString(buf, userId); if (i<8) GWEN_Buffer_FillWithBytes(buf, ' ', (uint32_t)(8-i)); /* get exponent */ klen=sizeof(kbuf); rv=GWEN_Crypt_KeyRsa_GetExponent(k, kbuf, &klen); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); return EB_RC_INVALID_REQUEST; } snprintf(numbuf, sizeof(numbuf), "%04d", keySize); GWEN_Buffer_AppendString(buf, numbuf); if (klen<128) GWEN_Buffer_FillWithBytes(buf, 0, 128-klen); GWEN_Buffer_AppendBytes(buf, (const char *)kbuf, klen); /* get modulus */ klen=sizeof(kbuf); rv=GWEN_Crypt_KeyRsa_GetModulus(k, kbuf, &klen); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); return EB_RC_INVALID_REQUEST; } snprintf(numbuf, sizeof(numbuf), "%04d", keySize); GWEN_Buffer_AppendString(buf, numbuf); if (klen<128) GWEN_Buffer_FillWithBytes(buf, 0, 128-klen); GWEN_Buffer_AppendBytes(buf, (const char *)kbuf, klen); GWEN_Buffer_FillWithBytes(buf, ' ', 236); return 0; } EB_RC EB_Key_fromBin(GWEN_CRYPT_KEY **k, const char *version, char *bufUserId, unsigned int lenUserId, const char *p, unsigned int bsize) { GWEN_CRYPT_KEY *key; char tmpbuf[32]; const char *t; char *d; uint32_t nsize; int i; const uint8_t *mPtr; uint32_t mLen; const uint8_t *ePtr; uint32_t eLen; uint32_t keySize; if (bsize<512) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Too few bytes (%d)", bsize); return EB_RC_INVALID_REQUEST; } if (strlen(version)!=4) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Invalid version \"%s\"", version); return EB_RC_INVALID_REQUEST; } /* compare version */ if (strncasecmp(p, version, 4)!=0) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Unexpected version [%s]", p); return EB_RC_KEYMGMT_UNSUPPORTED_VERSION_SIGNATURE; } t=p+4; /* copy user id */ d=bufUserId; i=0; while (t[i] && t[i]!=' ' && (unsigned int)i<(lenUserId-1) && i<8) *(d++)=t[i++]; *d=0; t+=8; /* get LExponent */ d=tmpbuf; i=0; while (isdigit(t[i]) && i<4) *(d++)=t[i++]; *d=0; i=0; sscanf(tmpbuf, "%d", &i); t+=4; nsize=(i+7)/8; /* get Exponent */ ePtr=(const uint8_t *)(t+(128-nsize)); eLen=nsize; t+=128; /* get LModulus */ d=tmpbuf; i=0; while (t[i] && t[i]!=' ' && i<4) *(d++)=t[i++]; *d=0; i=0; sscanf(tmpbuf, "%d", &i); t+=4; /* calculate number of bits/bytes */ nsize=i; if (nsize>2048) nsize=4096; else if (nsize>1024) nsize=2048; else if (nsize>768) nsize=1024; else nsize=768; keySize=(nsize+7)/8; /* calculate real size of modulus */ nsize=(i+7)/8; /* get Modulus */ mPtr=(const uint8_t *)(t+(128-nsize)); mLen=nsize; t+=128; /* create key */ key=GWEN_Crypt_KeyRsa_fromModExp(keySize, mPtr, mLen, ePtr, eLen); if (!key) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Could not create RSA key"); return EB_RC_INTERNAL_ERROR; } *k=key; return 0; } EB_RC EB_Key_toXml(GWEN_CRYPT_KEY *k, xmlNodePtr node) { int rv; uint8_t kbuf[300]; uint32_t klen; /* get modulus */ klen=sizeof(kbuf); rv=GWEN_Crypt_KeyRsa_GetModulus(k, kbuf, &klen); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); return EB_RC_INVALID_REQUEST; } else { GWEN_BUFFER *b64buf; b64buf=GWEN_Buffer_new(0, 256, 0, 1); if (GWEN_Base64_Encode(kbuf, klen, b64buf, 0)) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Could not encode data"); GWEN_Buffer_free(b64buf); return EB_RC_INTERNAL_ERROR; } EB_Xml_SetCharValue(node, "PubKeyValue/ds:RSAKeyValue/Modulus", GWEN_Buffer_GetStart(b64buf)); GWEN_Buffer_free(b64buf); } /* get exponent */ klen=sizeof(kbuf); rv=GWEN_Crypt_KeyRsa_GetExponent(k, kbuf, &klen); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); return EB_RC_INVALID_REQUEST; } else { GWEN_BUFFER *b64buf; b64buf=GWEN_Buffer_new(0, 256, 0, 1); if (GWEN_Base64_Encode(kbuf, klen, b64buf, 0)) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Could not encode data"); GWEN_Buffer_free(b64buf); return EB_RC_INVALID_REQUEST; } EB_Xml_SetCharValue(node, "PubKeyValue/ds:RSAKeyValue/Exponent", GWEN_Buffer_GetStart(b64buf)); GWEN_Buffer_free(b64buf); } return 0; } EB_RC EB_Key_fromXml(GWEN_CRYPT_KEY **k, xmlNodePtr node) { const char *s; GWEN_CRYPT_KEY *key; uint8_t eBuf[512]; uint32_t eLen; uint8_t mBuf[512]; uint32_t mLen; s=EB_Xml_GetCharValue(node, "PubKeyValue/ds:RSAKeyValue/Modulus", 0); if (s) { GWEN_BUFFER *b64buf; const uint8_t *p; b64buf=GWEN_Buffer_new(0, 256, 0, 1); if (GWEN_Base64_Decode((const unsigned char *) s, 0, b64buf)) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Could not decode data"); GWEN_Buffer_free(b64buf); return EB_RC_INVALID_REQUEST; } if (GWEN_Buffer_GetUsedBytes(b64buf)>sizeof(mBuf)) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Modulus too long"); GWEN_Buffer_free(b64buf); return EB_RC_INVALID_REQUEST; } /* correctly calculate key length */ mLen=GWEN_Buffer_GetUsedBytes(b64buf); p=(const uint8_t *)GWEN_Buffer_GetStart(b64buf); while (mLen && *p==0) { mLen--; p++; } DBG_ERROR(0, "Real key size is: %d (from %d)", mLen, GWEN_Buffer_GetUsedBytes(b64buf)); memmove(mBuf, p, mLen); GWEN_Buffer_free(b64buf); } else { DBG_ERROR(AQEBICS_LOGDOMAIN, "No modulus in key data (%s)", node->name); return EB_RC_INVALID_REQUEST; } s=EB_Xml_GetCharValue(node, "PubKeyValue/ds:RSAKeyValue/Exponent", 0); if (s) { GWEN_BUFFER *b64buf; b64buf=GWEN_Buffer_new(0, 256, 0, 1); if (GWEN_Base64_Decode((const unsigned char *) s, 0, b64buf)) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Could not decode data"); GWEN_Buffer_free(b64buf); return EB_RC_INVALID_REQUEST; } if (GWEN_Buffer_GetUsedBytes(b64buf)>sizeof(eBuf)) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Exponent too long"); GWEN_Buffer_free(b64buf); return EB_RC_INVALID_REQUEST; } memmove(eBuf, GWEN_Buffer_GetStart(b64buf), GWEN_Buffer_GetUsedBytes(b64buf)); eLen=GWEN_Buffer_GetUsedBytes(b64buf); GWEN_Buffer_free(b64buf); } else { DBG_ERROR(AQEBICS_LOGDOMAIN, "No exponent in key data"); return EB_RC_INVALID_REQUEST; } /* create key */ key=GWEN_Crypt_KeyRsa_fromModExp(mLen, mBuf, mLen, eBuf, eLen); if (!key) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Could not create RSA key"); return EB_RC_INTERNAL_ERROR; } *k=key; return 0; } int EB_Key_BuildHashSha1(const GWEN_CRYPT_KEY *k, GWEN_BUFFER *hbuf, int encode64) { GWEN_BUFFER *buf1; GWEN_BUFFER *buf2; char *s; int rv; uint8_t kbuf[300]; uint32_t klen; GWEN_MDIGEST *md; buf1=GWEN_Buffer_new(0, 256, 0, 1); buf2=GWEN_Buffer_new(0, 520, 0, 1); /* get exponent */ klen=sizeof(kbuf); rv=GWEN_Crypt_KeyRsa_GetExponent(k, kbuf, &klen); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(buf2); GWEN_Buffer_free(buf1); return EB_RC_INVALID_REQUEST; } rv=GWEN_Text_ToHexBuffer((const char *)kbuf, klen, buf1, 0, 0, 0); if (rv) { DBG_ERROR(AQEBICS_LOGDOMAIN, "No modulus in key"); GWEN_Buffer_free(buf2); GWEN_Buffer_free(buf1); return EB_RC_INTERNAL_ERROR; } s=GWEN_Buffer_GetStart(buf1); while (*s=='0') s++; GWEN_Buffer_AppendString(buf2, s); GWEN_Buffer_AppendString(buf2, " "); GWEN_Buffer_Reset(buf1); /* get modulus */ klen=sizeof(kbuf); rv=GWEN_Crypt_KeyRsa_GetModulus(k, kbuf, &klen); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(buf2); GWEN_Buffer_free(buf1); return EB_RC_INVALID_REQUEST; } rv=GWEN_Text_ToHexBuffer((const char *)kbuf, klen, buf1, 0, 0, 0); if (rv) { DBG_ERROR(AQEBICS_LOGDOMAIN, "No modulus in key"); GWEN_Buffer_free(buf2); GWEN_Buffer_free(buf1); return EB_RC_INTERNAL_ERROR; } s=GWEN_Buffer_GetStart(buf1); while (*s=='0') s++; GWEN_Buffer_AppendString(buf2, s); GWEN_Buffer_free(buf1); /* convert to lower case */ s=GWEN_Buffer_GetStart(buf2); while (*s) { *s=(char)tolower(*s); s++; } /* hash it */ md=GWEN_MDigest_Sha1_new(); /* begin */ rv=GWEN_MDigest_Begin(md); if (rv<0) { DBG_ERROR(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_MDigest_free(md); GWEN_Buffer_free(buf2); return EB_RC_INTERNAL_ERROR; } /* update */ rv=GWEN_MDigest_Update(md, (const uint8_t *) GWEN_Buffer_GetStart(buf2), GWEN_Buffer_GetUsedBytes(buf2)); if (rv<0) { DBG_ERROR(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_MDigest_free(md); GWEN_Buffer_free(buf2); return EB_RC_INTERNAL_ERROR; } /* end */ rv=GWEN_MDigest_End(md); if (rv<0) { DBG_ERROR(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_MDigest_free(md); GWEN_Buffer_free(buf2); return EB_RC_INTERNAL_ERROR; } if (encode64) { if (GWEN_Base64_Encode(GWEN_MDigest_GetDigestPtr(md), GWEN_MDigest_GetDigestSize(md), hbuf, 0)) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Could not encode data"); GWEN_MDigest_free(md); GWEN_Buffer_free(buf2); return EB_RC_INTERNAL_ERROR; } } else GWEN_Buffer_AppendBytes(hbuf, (const char *)GWEN_MDigest_GetDigestPtr(md), GWEN_MDigest_GetDigestSize(md)); GWEN_MDigest_free(md); /* cleanup */ GWEN_Buffer_free(buf2); return 0; } int EB_Key_BuildHashSha256(const GWEN_CRYPT_KEY *k, GWEN_BUFFER *hbuf, int encode64) { GWEN_BUFFER *buf1; GWEN_BUFFER *buf2; char *s; int rv; uint8_t kbuf[300]; uint32_t klen; GWEN_MDIGEST *md; buf1=GWEN_Buffer_new(0, 256, 0, 1); buf2=GWEN_Buffer_new(0, 520, 0, 1); /* get exponent */ klen=sizeof(kbuf); rv=GWEN_Crypt_KeyRsa_GetExponent(k, kbuf, &klen); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(buf2); GWEN_Buffer_free(buf1); return EB_RC_INVALID_REQUEST; } rv=GWEN_Text_ToHexBuffer((const char *)kbuf, klen, buf1, 0, 0, 0); if (rv) { DBG_ERROR(AQEBICS_LOGDOMAIN, "No modulus in key"); GWEN_Buffer_free(buf2); GWEN_Buffer_free(buf1); return EB_RC_INTERNAL_ERROR; } s=GWEN_Buffer_GetStart(buf1); while (*s=='0') s++; GWEN_Buffer_AppendString(buf2, s); GWEN_Buffer_AppendString(buf2, " "); GWEN_Buffer_Reset(buf1); /* get modulus */ klen=sizeof(kbuf); rv=GWEN_Crypt_KeyRsa_GetModulus(k, kbuf, &klen); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(buf2); GWEN_Buffer_free(buf1); return EB_RC_INVALID_REQUEST; } rv=GWEN_Text_ToHexBuffer((const char *)kbuf, klen, buf1, 0, 0, 0); if (rv) { DBG_ERROR(AQEBICS_LOGDOMAIN, "No modulus in key"); GWEN_Buffer_free(buf2); GWEN_Buffer_free(buf1); return EB_RC_INTERNAL_ERROR; } s=GWEN_Buffer_GetStart(buf1); while (*s=='0') s++; GWEN_Buffer_AppendString(buf2, s); GWEN_Buffer_free(buf1); /* convert to lower case */ s=GWEN_Buffer_GetStart(buf2); while (*s) { *s=(char)tolower(*s); s++; } /* hash it */ md=GWEN_MDigest_Sha256_new(); /* begin */ rv=GWEN_MDigest_Begin(md); if (rv<0) { DBG_ERROR(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_MDigest_free(md); GWEN_Buffer_free(buf2); return EB_RC_INTERNAL_ERROR; } /* update */ rv=GWEN_MDigest_Update(md, (const uint8_t *) GWEN_Buffer_GetStart(buf2), GWEN_Buffer_GetUsedBytes(buf2)); if (rv<0) { DBG_ERROR(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_MDigest_free(md); GWEN_Buffer_free(buf2); return EB_RC_INTERNAL_ERROR; } /* end */ rv=GWEN_MDigest_End(md); if (rv<0) { DBG_ERROR(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_MDigest_free(md); GWEN_Buffer_free(buf2); return EB_RC_INTERNAL_ERROR; } if (encode64) { if (GWEN_Base64_Encode(GWEN_MDigest_GetDigestPtr(md), GWEN_MDigest_GetDigestSize(md), hbuf, 0)) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Could not encode data"); GWEN_MDigest_free(md); GWEN_Buffer_free(buf2); return EB_RC_INTERNAL_ERROR; } } else GWEN_Buffer_AppendBytes(hbuf, (const char *)GWEN_MDigest_GetDigestPtr(md), GWEN_MDigest_GetDigestSize(md)); GWEN_MDigest_free(md); /* cleanup */ GWEN_Buffer_free(buf2); return 0; } int EB_Key_Info_BuildHashSha1(const GWEN_CRYPT_TOKEN_KEYINFO *ki, GWEN_BUFFER *hbuf, int encode64) { GWEN_BUFFER *buf1; GWEN_BUFFER *buf2; char *s; int rv; GWEN_MDIGEST *md; const uint8_t *p; uint32_t len; buf1=GWEN_Buffer_new(0, 256, 0, 1); buf2=GWEN_Buffer_new(0, 520, 0, 1); /* get exponent */ p=GWEN_Crypt_Token_KeyInfo_GetExponentData(ki); len=GWEN_Crypt_Token_KeyInfo_GetExponentLen(ki); if (p==NULL || len==0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here"); GWEN_Buffer_free(buf2); GWEN_Buffer_free(buf1); return GWEN_ERROR_NO_DATA; } rv=GWEN_Text_ToHexBuffer((const char *)p, len, buf1, 0, 0, 0); if (rv) { DBG_ERROR(AQEBICS_LOGDOMAIN, "No modulus in key"); GWEN_Buffer_free(buf2); GWEN_Buffer_free(buf1); return EB_RC_INTERNAL_ERROR; } s=GWEN_Buffer_GetStart(buf1); while (*s=='0') s++; GWEN_Buffer_AppendString(buf2, s); GWEN_Buffer_AppendString(buf2, " "); GWEN_Buffer_Reset(buf1); /* get modulus */ p=GWEN_Crypt_Token_KeyInfo_GetModulusData(ki); len=GWEN_Crypt_Token_KeyInfo_GetModulusLen(ki); if (p==NULL || len==0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here"); GWEN_Buffer_free(buf2); GWEN_Buffer_free(buf1); return EB_RC_INVALID_REQUEST; } rv=GWEN_Text_ToHexBuffer((const char *)p, len, buf1, 0, 0, 0); if (rv) { DBG_ERROR(AQEBICS_LOGDOMAIN, "No modulus in key"); GWEN_Buffer_free(buf2); GWEN_Buffer_free(buf1); return EB_RC_INTERNAL_ERROR; } s=GWEN_Buffer_GetStart(buf1); while (*s=='0') s++; GWEN_Buffer_AppendString(buf2, s); GWEN_Buffer_free(buf1); /* convert to lower case */ s=GWEN_Buffer_GetStart(buf2); while (*s) { *s=(char)tolower(*s); s++; } /* hash it */ md=GWEN_MDigest_Sha1_new(); /* begin */ rv=GWEN_MDigest_Begin(md); if (rv<0) { DBG_ERROR(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_MDigest_free(md); GWEN_Buffer_free(buf2); return EB_RC_INTERNAL_ERROR; } /* update */ rv=GWEN_MDigest_Update(md, (const uint8_t *) GWEN_Buffer_GetStart(buf2), GWEN_Buffer_GetUsedBytes(buf2)); if (rv<0) { DBG_ERROR(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_MDigest_free(md); GWEN_Buffer_free(buf2); return EB_RC_INTERNAL_ERROR; } /* end */ rv=GWEN_MDigest_End(md); if (rv<0) { DBG_ERROR(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_MDigest_free(md); GWEN_Buffer_free(buf2); return EB_RC_INTERNAL_ERROR; } if (encode64) { if (GWEN_Base64_Encode(GWEN_MDigest_GetDigestPtr(md), GWEN_MDigest_GetDigestSize(md), hbuf, 0)) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Could not encode data"); GWEN_MDigest_free(md); GWEN_Buffer_free(buf2); return EB_RC_INTERNAL_ERROR; } } else GWEN_Buffer_AppendBytes(hbuf, (const char *)GWEN_MDigest_GetDigestPtr(md), GWEN_MDigest_GetDigestSize(md)); GWEN_MDigest_free(md); /* cleanup */ GWEN_Buffer_free(buf2); return 0; } int EB_Key_Info_BuildHashSha256(const GWEN_CRYPT_TOKEN_KEYINFO *ki, GWEN_BUFFER *hbuf, int encode64) { GWEN_BUFFER *buf1; GWEN_BUFFER *buf2; char *s; int rv; GWEN_MDIGEST *md; const uint8_t *p; uint32_t len; buf1=GWEN_Buffer_new(0, 256, 0, 1); buf2=GWEN_Buffer_new(0, 520, 0, 1); /* get exponent */ p=GWEN_Crypt_Token_KeyInfo_GetExponentData(ki); len=GWEN_Crypt_Token_KeyInfo_GetExponentLen(ki); if (p==NULL || len==0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here"); GWEN_Buffer_free(buf2); GWEN_Buffer_free(buf1); return GWEN_ERROR_NO_DATA; } rv=GWEN_Text_ToHexBuffer((const char *)p, len, buf1, 0, 0, 0); if (rv) { DBG_ERROR(AQEBICS_LOGDOMAIN, "No modulus in key"); GWEN_Buffer_free(buf2); GWEN_Buffer_free(buf1); return EB_RC_INTERNAL_ERROR; } s=GWEN_Buffer_GetStart(buf1); while (*s=='0') s++; GWEN_Buffer_AppendString(buf2, s); GWEN_Buffer_AppendString(buf2, " "); GWEN_Buffer_Reset(buf1); /* get modulus */ p=GWEN_Crypt_Token_KeyInfo_GetModulusData(ki); len=GWEN_Crypt_Token_KeyInfo_GetModulusLen(ki); if (p==NULL || len==0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here"); GWEN_Buffer_free(buf2); GWEN_Buffer_free(buf1); return EB_RC_INVALID_REQUEST; } rv=GWEN_Text_ToHexBuffer((const char *)p, len, buf1, 0, 0, 0); if (rv) { DBG_ERROR(AQEBICS_LOGDOMAIN, "No modulus in key"); GWEN_Buffer_free(buf2); GWEN_Buffer_free(buf1); return EB_RC_INTERNAL_ERROR; } s=GWEN_Buffer_GetStart(buf1); while (*s=='0') s++; GWEN_Buffer_AppendString(buf2, s); GWEN_Buffer_free(buf1); /* convert to lower case */ s=GWEN_Buffer_GetStart(buf2); while (*s) { *s=(char)tolower(*s); s++; } /* hash it */ md=GWEN_MDigest_Sha256_new(); /* begin */ rv=GWEN_MDigest_Begin(md); if (rv<0) { DBG_ERROR(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_MDigest_free(md); GWEN_Buffer_free(buf2); return EB_RC_INTERNAL_ERROR; } /* update */ rv=GWEN_MDigest_Update(md, (const uint8_t *) GWEN_Buffer_GetStart(buf2), GWEN_Buffer_GetUsedBytes(buf2)); if (rv<0) { DBG_ERROR(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_MDigest_free(md); GWEN_Buffer_free(buf2); return EB_RC_INTERNAL_ERROR; } /* end */ rv=GWEN_MDigest_End(md); if (rv<0) { DBG_ERROR(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_MDigest_free(md); GWEN_Buffer_free(buf2); return EB_RC_INTERNAL_ERROR; } if (encode64) { if (GWEN_Base64_Encode(GWEN_MDigest_GetDigestPtr(md), GWEN_MDigest_GetDigestSize(md), hbuf, 0)) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Could not encode data"); GWEN_MDigest_free(md); GWEN_Buffer_free(buf2); return EB_RC_INTERNAL_ERROR; } } else GWEN_Buffer_AppendBytes(hbuf, (const char *)GWEN_MDigest_GetDigestPtr(md), GWEN_MDigest_GetDigestSize(md)); GWEN_MDigest_free(md); /* cleanup */ GWEN_Buffer_free(buf2); return 0; } int EB_Key_Info_BuildSigHash_Rmd160(const GWEN_CRYPT_TOKEN_KEYINFO *ki, GWEN_BUFFER *hbuf) { const uint8_t *p; uint32_t len; GWEN_BUFFER *bbuf; GWEN_MDIGEST *md; int rv; bbuf=GWEN_Buffer_new(0, 256, 0, 1); /* get exponent */ p=GWEN_Crypt_Token_KeyInfo_GetExponentData(ki); len=GWEN_Crypt_Token_KeyInfo_GetExponentLen(ki); if (p==NULL || len==0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here"); GWEN_Buffer_free(bbuf); return GWEN_ERROR_NO_DATA; } if (len<128) GWEN_Buffer_FillWithBytes(bbuf, 0, 128-len); GWEN_Buffer_AppendBytes(bbuf, (const char *)p, len); /* get modulus */ p=GWEN_Crypt_Token_KeyInfo_GetModulusData(ki); len=GWEN_Crypt_Token_KeyInfo_GetModulusLen(ki); if (p==NULL || len==0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here"); GWEN_Buffer_free(bbuf); return GWEN_ERROR_NO_DATA; } if (len<128) GWEN_Buffer_FillWithBytes(bbuf, 0, 128-len); GWEN_Buffer_AppendBytes(bbuf, (const char *)p, len); /* hash */ md=GWEN_MDigest_Rmd160_new(); assert(md); rv=GWEN_MDigest_Begin(md); if (rv<0) { GWEN_MDigest_free(md); GWEN_Buffer_free(bbuf); return rv; } rv=GWEN_MDigest_Update(md, (const uint8_t *)GWEN_Buffer_GetStart(bbuf), GWEN_Buffer_GetUsedBytes(bbuf)); if (rv<0) { GWEN_MDigest_free(md); GWEN_Buffer_free(bbuf); return rv; } rv=GWEN_MDigest_End(md); if (rv<0) { GWEN_MDigest_free(md); GWEN_Buffer_free(bbuf); return rv; } GWEN_Buffer_free(bbuf); /* add hash to buffer */ GWEN_Buffer_AppendBytes(hbuf, (const char *)GWEN_MDigest_GetDigestPtr(md), GWEN_MDigest_GetDigestSize(md)); GWEN_MDigest_free(md); return 0; } int EB_Key_Info_BuildSigHash_Sha256(const GWEN_CRYPT_TOKEN_KEYINFO *ki, GWEN_BUFFER *hbuf) { const uint8_t *p; char *t; uint32_t len; GWEN_BUFFER *bbuf; GWEN_BUFFER *xbuf; GWEN_MDIGEST *md; int rv; bbuf=GWEN_Buffer_new(0, 256, 0, 1); xbuf=GWEN_Buffer_new(0, 256, 0, 1); /* get exponent */ p=GWEN_Crypt_Token_KeyInfo_GetExponentData(ki); len=GWEN_Crypt_Token_KeyInfo_GetExponentLen(ki); if (p==NULL || len==0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here"); GWEN_Buffer_free(xbuf); GWEN_Buffer_free(bbuf); return GWEN_ERROR_NO_DATA; } rv=GWEN_Text_ToHexBuffer((const char *)p, len, bbuf, 0, 0, 0); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here"); GWEN_Buffer_free(xbuf); GWEN_Buffer_free(bbuf); return GWEN_ERROR_NO_DATA; } p=(const uint8_t *)GWEN_Buffer_GetStart(bbuf); while (*p=='0') p++; GWEN_Buffer_AppendString(xbuf, (const char *)p); GWEN_Buffer_AppendByte(xbuf, ' '); GWEN_Buffer_Reset(bbuf); /* get modulus */ p=GWEN_Crypt_Token_KeyInfo_GetModulusData(ki); len=GWEN_Crypt_Token_KeyInfo_GetModulusLen(ki); if (p==NULL || len==0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here"); GWEN_Buffer_free(xbuf); GWEN_Buffer_free(bbuf); return GWEN_ERROR_NO_DATA; } rv=GWEN_Text_ToHexBuffer((const char *) p, len, bbuf, 0, 0, 0); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here"); GWEN_Buffer_free(xbuf); GWEN_Buffer_free(bbuf); return GWEN_ERROR_NO_DATA; } p=(const uint8_t *)GWEN_Buffer_GetStart(bbuf); while (*p=='0') p++; GWEN_Buffer_AppendString(xbuf, (const char *) p); GWEN_Buffer_free(bbuf); /* lowercase */ t=GWEN_Buffer_GetStart(xbuf); while (*t) { *t=tolower(*t); t++; } /* hash */ md=GWEN_MDigest_Sha256_new(); assert(md); rv=GWEN_MDigest_Begin(md); if (rv<0) { GWEN_MDigest_free(md); GWEN_Buffer_free(xbuf); return rv; } rv=GWEN_MDigest_Update(md, (const uint8_t *)GWEN_Buffer_GetStart(xbuf), GWEN_Buffer_GetUsedBytes(xbuf)); if (rv<0) { GWEN_MDigest_free(md); GWEN_Buffer_free(xbuf); return rv; } rv=GWEN_MDigest_End(md); if (rv<0) { GWEN_MDigest_free(md); GWEN_Buffer_free(xbuf); return rv; } GWEN_Buffer_free(xbuf); /* add hash to buffer */ GWEN_Buffer_AppendBytes(hbuf, (const char *)GWEN_MDigest_GetDigestPtr(md), GWEN_MDigest_GetDigestSize(md)); GWEN_MDigest_free(md); return 0; } EB_RC EB_Key_Info_ReadXml(GWEN_CRYPT_TOKEN_KEYINFO *ki, xmlNodePtr node) { const char *s; uint8_t eBuf[512]; uint32_t eLen; uint8_t mBuf[512]; uint32_t mLen; uint32_t keySize; s=EB_Xml_GetCharValue(node, "PubKeyValue/RSAKeyValue/Modulus", 0); if (s) { GWEN_BUFFER *b64buf; unsigned int nsize; const uint8_t *p; b64buf=GWEN_Buffer_new(0, 256, 0, 1); if (GWEN_Base64_Decode((const unsigned char *) s, 0, b64buf)) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Could not decode data"); GWEN_Buffer_free(b64buf); return EB_RC_INVALID_REQUEST; } if (GWEN_Buffer_GetUsedBytes(b64buf)>sizeof(mBuf)) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Modulus too long"); GWEN_Buffer_free(b64buf); return EB_RC_INVALID_REQUEST; } /* correctly calculate key length */ nsize=GWEN_Buffer_GetUsedBytes(b64buf); p=(const uint8_t *)GWEN_Buffer_GetStart(b64buf); while (nsize && *p==0) { nsize--; p++; } DBG_INFO(AQEBICS_LOGDOMAIN, "Real key size is: %d/%d (from %d)", nsize, nsize*8, GWEN_Buffer_GetUsedBytes(b64buf)); nsize*=8; if (nsize>2048) nsize=4096; else if (nsize>1024) nsize=2048; else if (nsize>768) nsize=1024; else nsize=768; keySize=(nsize+7)/8; DBG_INFO(AQEBICS_LOGDOMAIN, "Adjusted key size is: %d", keySize); memmove(mBuf, p, keySize); mLen=keySize; GWEN_Buffer_free(b64buf); } else { DBG_ERROR(AQEBICS_LOGDOMAIN, "No modulus in key data (%s)", node->name); return EB_RC_INVALID_REQUEST; } s=EB_Xml_GetCharValue(node, "PubKeyValue/RSAKeyValue/Exponent", 0); if (s) { GWEN_BUFFER *b64buf; b64buf=GWEN_Buffer_new(0, 256, 0, 1); if (GWEN_Base64_Decode((const unsigned char *) s, 0, b64buf)) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Could not decode data"); GWEN_Buffer_free(b64buf); return EB_RC_INVALID_REQUEST; } if (GWEN_Buffer_GetUsedBytes(b64buf)>sizeof(eBuf)) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Exponent too long"); GWEN_Buffer_free(b64buf); return EB_RC_INVALID_REQUEST; } memmove(eBuf, GWEN_Buffer_GetStart(b64buf), GWEN_Buffer_GetUsedBytes(b64buf)); eLen=GWEN_Buffer_GetUsedBytes(b64buf); GWEN_Buffer_free(b64buf); } else { DBG_ERROR(AQEBICS_LOGDOMAIN, "No exponent in key data"); return EB_RC_INVALID_REQUEST; } /* store info */ GWEN_Crypt_Token_KeyInfo_SetKeySize(ki, keySize); GWEN_Crypt_Token_KeyInfo_SetModulus(ki, mBuf, mLen); GWEN_Crypt_Token_KeyInfo_SetExponent(ki, eBuf, eLen); GWEN_Crypt_Token_KeyInfo_AddFlags(ki, GWEN_CRYPT_TOKEN_KEYFLAGS_HASMODULUS | GWEN_CRYPT_TOKEN_KEYFLAGS_HASEXPONENT); return 0; } int EB_Key_Info_toXml(const GWEN_CRYPT_TOKEN_KEYINFO *ki, xmlNodePtr node) { int rv; const uint8_t *p; uint32_t len; /* get modulus */ p=GWEN_Crypt_Token_KeyInfo_GetModulusData(ki); len=GWEN_Crypt_Token_KeyInfo_GetModulusLen(ki); if (p==NULL || len==0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here"); return GWEN_ERROR_NO_DATA; } else { GWEN_BUFFER *b64buf; GWEN_BUFFER *tmpbuf=NULL; #if 0 if (*p!=0) { tmpbuf=GWEN_Buffer_new(0, len+1, 0, 1); GWEN_Buffer_AppendByte(tmpbuf, 0); GWEN_Buffer_AppendBytes(tmpbuf, (const char *)p, len); p=(const uint8_t *)GWEN_Buffer_GetStart(tmpbuf); len++; } #endif b64buf=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_Base64_Encode(p, len, b64buf, 0); GWEN_Buffer_free(tmpbuf); tmpbuf=NULL; if (rv<0) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Could not encode data (%d)", rv); GWEN_Buffer_free(b64buf); return EB_RC_INTERNAL_ERROR; } EB_Xml_SetCharValue(node, "PubKeyValue/ds:RSAKeyValue/Modulus", GWEN_Buffer_GetStart(b64buf)); GWEN_Buffer_free(b64buf); } /* get exponent */ p=GWEN_Crypt_Token_KeyInfo_GetExponentData(ki); len=GWEN_Crypt_Token_KeyInfo_GetExponentLen(ki); if (p==NULL || len==0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); return GWEN_ERROR_NO_DATA; } else { GWEN_BUFFER *b64buf; b64buf=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_Base64_Encode(p, len, b64buf, 0); if (rv<0) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Could not encode data (%d)", rv); GWEN_Buffer_free(b64buf); return EB_RC_INTERNAL_ERROR; } EB_Xml_SetCharValue(node, "PubKeyValue/ds:RSAKeyValue/Exponent", GWEN_Buffer_GetStart(b64buf)); GWEN_Buffer_free(b64buf); } return 0; } EB_RC EB_Key_Info_toBin(const GWEN_CRYPT_TOKEN_KEYINFO *ki, const char *userId, const char *version, int keySize, GWEN_BUFFER *buf) { int i; char numbuf[32]; const uint8_t *p; uint32_t len; if (strlen(version)!=4) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Invalid version \"%s\"", version); return EB_RC_KEYMGMT_UNSUPPORTED_VERSION_SIGNATURE; } if (!userId || !*userId) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Missing key owner"); return EB_RC_INVALID_REQUEST; } GWEN_Buffer_AppendString(buf, version); i=(int)strlen(userId); if (i>8) { DBG_ERROR(AQEBICS_LOGDOMAIN, "User id too long"); return EB_RC_INVALID_REQUEST; } GWEN_Buffer_AppendString(buf, userId); if (i<8) GWEN_Buffer_FillWithBytes(buf, ' ', 8-i); /* get exponent */ p=GWEN_Crypt_Token_KeyInfo_GetExponentData(ki); len=GWEN_Crypt_Token_KeyInfo_GetExponentLen(ki); if (p==NULL || len==0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here"); return EB_RC_INVALID_REQUEST; } snprintf(numbuf, sizeof(numbuf), "%04d", keySize); GWEN_Buffer_AppendString(buf, numbuf); if (len<128) GWEN_Buffer_FillWithBytes(buf, 0, 128-len); GWEN_Buffer_AppendBytes(buf, (const char *)p, len); /* get modulus */ p=GWEN_Crypt_Token_KeyInfo_GetModulusData(ki); len=GWEN_Crypt_Token_KeyInfo_GetModulusLen(ki); if (p==NULL || len==0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here"); return EB_RC_INVALID_REQUEST; } snprintf(numbuf, sizeof(numbuf), "%04d", keySize); GWEN_Buffer_AppendString(buf, numbuf); if (len<128) GWEN_Buffer_FillWithBytes(buf, 0, 128-len); GWEN_Buffer_AppendBytes(buf, (const char *)p, len); GWEN_Buffer_FillWithBytes(buf, ' ', 236); return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqebics/msg/msg.h0000664000175000017500000000507114121404717020515 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AQEBICS_MSG_MSG_H #define AQEBICS_MSG_MSG_H #include #include #include #include #include #include #include #include #include #include #include typedef struct EB_MSG EB_MSG; GWEN_INHERIT_FUNCTION_DEFS(EB_MSG) EB_MSG *EB_Msg_new(); void EB_Msg_free(EB_MSG *m); EB_MSG *EB_Msg_newRequest(int willSign, const char *hVersion); EB_MSG *EB_Msg_newResponse(int willSign, const char *rName, const char *hVersion); EB_MSG *EB_Msg_fromBuffer(const char *buffer, int size); void EB_Msg_toBuffer(EB_MSG *m, GWEN_BUFFER *buf); EB_MSG *EB_Msg_fromFile(const char *fname); xmlDocPtr EB_Msg_GetDoc(const EB_MSG *m); xmlNodePtr EB_Msg_GetRootNode(EB_MSG *m); xmlNodeSetPtr EB_Msg_GetNodes(EB_MSG *m, const char *xpathExpr); AQBANKING_DEPRECATED int EB_Msg_BuildHash(EB_MSG *m, GWEN_BUFFER *hbuf); int EB_Msg_BuildHashSha1(EB_MSG *m, GWEN_BUFFER *hbuf); int EB_Msg_BuildHashSha256(EB_MSG *m, GWEN_BUFFER *hbuf); int EB_Msg_BuildHashSha256Sha256(EB_MSG *m, GWEN_BUFFER *hbuf); int EB_Msg_BuildHashData(EB_MSG *m, GWEN_BUFFER *hbuf); int EB_Msg_ReadHash(EB_MSG *m, GWEN_BUFFER *hbuf); int EB_Msg_WriteHash(EB_MSG *m, const unsigned char *hash, int hsize); int EB_Msg_ReadSignature(EB_MSG *m, GWEN_BUFFER *hbuf); int EB_Msg_WriteSignature(EB_MSG *m, const unsigned char *hash, int hsize); int EB_Msg_SetCharValue(EB_MSG *m, const char *path, const char *value); const char *EB_Msg_GetCharValue(const EB_MSG *m, const char *path, const char *defValue); int EB_Msg_SetIntValue(EB_MSG *m, const char *path, int value); int EB_Msg_GetIntValue(const EB_MSG *m, const char *path, int defValue); EB_RC EB_Msg_GetResultCode(const EB_MSG *m); EB_RC EB_Msg_GetBodyResultCode(const EB_MSG *m); const char *EB_Msg_GetHVersion(const EB_MSG *m); void EB_Msg_SetHVersion(EB_MSG *m, const char *s); GWEN_CRYPT_KEY *EB_Msg_ExtractAndDecodeSessionKey(EB_MSG *msg, AB_PROVIDER *pro, AB_USER *u); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqebics/msg/eu.c0000664000175000017500000002127114043610745020336 00000000000000/*************************************************************************** begin : Sat Mar 08 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "eu_p.h" #include #include #include GWEN_LIST_FUNCTIONS(EB_EU, EB_Eu) #define SETSTRING(xName) \ assert(eu); \ free(eu->xName); \ if (s) eu->xName=strdup(s); \ else eu->xName=NULL; EB_EU *EB_Eu_new() { EB_EU *eu; GWEN_NEW_OBJECT(EB_EU, eu); GWEN_LIST_INIT(EB_EU, eu); return eu; } void EB_Eu_free(EB_EU *eu) { if (eu) { free(eu->version); free(eu->jobType); free(eu->signaturePtr); free(eu->userId); free(eu->originalFileName); GWEN_Time_free(eu->creationTime); GWEN_Time_free(eu->signatureTime); GWEN_FREE_OBJECT(eu); } } EB_EU *EB_Eu_dup(const EB_EU *oldEu) { GWEN_BUFFER *buf; EB_EU *eu; buf=GWEN_Buffer_new(0, 512, 0, 1); EB_Eu_toBuffer(oldEu, buf); eu=EB_Eu_fromBuffer((const uint8_t *)GWEN_Buffer_GetStart(buf), GWEN_Buffer_GetUsedBytes(buf)); GWEN_Buffer_free(buf); return eu; } void copyTrimmedString(const uint8_t *p, uint32_t l, char **pDst) { GWEN_BUFFER *buf; buf=GWEN_Buffer_new(0, 128, 0, 1); GWEN_Buffer_AppendBytes(buf, (const char *)p, l); GWEN_Text_CondenseBuffer(buf); *pDst=strdup(GWEN_Buffer_GetStart(buf)); GWEN_Buffer_free(buf); } EB_EU *EB_Eu_fromBuffer(const uint8_t *p, uint32_t l) { if (l<512) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Too few bytes, not a complete EU (%d)", l); return NULL; } else { EB_EU *eu; const uint8_t *s; char *t; eu=EB_Eu_new(); s=p; copyTrimmedString(s, 4, &(eu->version)); s+=4; copyTrimmedString(s, 4, &t); if (t) { sscanf(t, "%d", &(eu->modLen)); free(t); } s+=4; copyTrimmedString(s, 3, &(eu->jobType)); s+=3; EB_Eu_SetSignature(eu, s, 128); s+=128; copyTrimmedString(s, 8, &(eu->userId)); s+=8; copyTrimmedString(s, 128, &(eu->originalFileName)); s+=128; copyTrimmedString(s, 16, &t); if (t) { eu->creationTime=GWEN_Time_fromString(t, "YYYYMMDD hhmmss"); free(t); } s+=16; copyTrimmedString(s, 16, &t); if (t) { eu->signatureTime=GWEN_Time_fromString(t, "YYYYMMDD hhmmss"); free(t); } s+=16; return eu; } } void EB_Eu_toBuffer(const EB_EU *eu, GWEN_BUFFER *buf) { int l; char numbuf[16]; /* version */ if (eu->version) { l=strlen(eu->version); if (l) GWEN_Buffer_AppendString(buf, eu->version); } else l=0; if (l<4) GWEN_Buffer_FillWithBytes(buf, 32, 4-l); /* length of modulus */ snprintf(numbuf, sizeof(numbuf)-1, "%d", eu->modLen); numbuf[sizeof(numbuf)-1]=0; l=strlen(numbuf); if (l) GWEN_Buffer_AppendString(buf, numbuf); if (l<4) GWEN_Buffer_FillWithBytes(buf, 32, 4-l); /* job type */ if (eu->jobType) { l=strlen(eu->jobType); if (l) GWEN_Buffer_AppendString(buf, eu->jobType); } else l=0; if (l<3) GWEN_Buffer_FillWithBytes(buf, 32, 3-l); /* signature */ if (eu->signatureLen<128) GWEN_Buffer_FillWithBytes(buf, 0, 128-eu->signatureLen); if (eu->signaturePtr) GWEN_Buffer_AppendBytes(buf, (const char *)eu->signaturePtr, eu->signatureLen); /* user id */ if (eu->userId) { l=strlen(eu->userId); if (l) GWEN_Buffer_AppendString(buf, eu->userId); } else l=0; if (l<8) GWEN_Buffer_FillWithBytes(buf, 32, 8-l); /* original file */ if (eu->originalFileName) { l=strlen(eu->originalFileName); if (l) GWEN_Buffer_AppendString(buf, eu->originalFileName); } else l=0; if (l<128) GWEN_Buffer_FillWithBytes(buf, 32, 128-l); /* creation time */ if (eu->creationTime) GWEN_Time_toString(eu->creationTime, "YYYYMMDD hhmmss ", buf); else GWEN_Buffer_FillWithBytes(buf, 32, 16); /* signature time */ if (eu->signatureTime) GWEN_Time_toString(eu->signatureTime, "YYYYMMDD hhmmss ", buf); else GWEN_Buffer_FillWithBytes(buf, 32, 16); /* free use field */ GWEN_Buffer_FillWithBytes(buf, 0, 8); /* RFU */ GWEN_Buffer_FillWithBytes(buf, 0, 197); } int EB_Eu_toDb(const EB_EU *eu, GWEN_DB_NODE *db) { assert(eu); if (eu->version) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "version", eu->version); GWEN_DB_SetIntValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "modLen", eu->modLen); if (eu->jobType) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "jobType", eu->jobType); if (eu->signaturePtr && eu->signatureLen) GWEN_DB_SetBinValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "signature", eu->signaturePtr, eu->signatureLen); if (eu->userId) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "userId", eu->userId); if (eu->originalFileName) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "originalFileName", eu->originalFileName); if (eu->creationTime) { GWEN_DB_NODE *dbT; dbT=GWEN_DB_GetGroup(db, GWEN_DB_FLAGS_OVERWRITE_GROUPS, "creationTime"); GWEN_Time_toDb(eu->creationTime, dbT); } if (eu->signatureTime) { GWEN_DB_NODE *dbT; dbT=GWEN_DB_GetGroup(db, GWEN_DB_FLAGS_OVERWRITE_GROUPS, "signatureTime"); GWEN_Time_toDb(eu->signatureTime, dbT); } return 0; } EB_EU *EB_Eu_fromDb(GWEN_DB_NODE *db) { EB_EU *eu; const char *s; const void *p; unsigned int l; GWEN_DB_NODE *dbT; eu=EB_Eu_new(); s=GWEN_DB_GetCharValue(db, "version", 0, NULL); if (s) eu->version=strdup(s); s=GWEN_DB_GetCharValue(db, "jobType", 0, NULL); if (s) eu->jobType=strdup(s); eu->modLen=GWEN_DB_GetIntValue(db, "modLen", 0, 1024); p=GWEN_DB_GetBinValue(db, "signature", 0, NULL, 0, &l); if (p && l) EB_Eu_SetSignature(eu, p, l); s=GWEN_DB_GetCharValue(db, "userId", 0, NULL); if (s) eu->userId=strdup(s); s=GWEN_DB_GetCharValue(db, "originalFileName", 0, NULL); if (s) eu->originalFileName=strdup(s); dbT=GWEN_DB_GetGroup(db, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "creationTime"); if (dbT) eu->creationTime=GWEN_Time_fromDb(dbT); dbT=GWEN_DB_GetGroup(db, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "signatureTime"); if (dbT) eu->signatureTime=GWEN_Time_fromDb(dbT); return eu; } const char *EB_Eu_GetVersion(const EB_EU *eu) { assert(eu); return eu->version; } void EB_Eu_SetVersion(EB_EU *eu, const char *s) { SETSTRING(version); } int EB_Eu_GetModLen(const EB_EU *eu) { assert(eu); return eu->modLen; } void EB_Eu_SetModLen(EB_EU *eu, int i) { assert(eu); eu->modLen=i; } const char *EB_Eu_GetJobType(const EB_EU *eu) { assert(eu); return eu->jobType; } void EB_Eu_SetJobType(EB_EU *eu, const char *s) { SETSTRING(jobType); } const uint8_t *EB_Eu_GetSignaturePtr(const EB_EU *eu) { assert(eu); return eu->signaturePtr; } uint32_t EB_Eu_GetSignatureLen(const EB_EU *eu) { assert(eu); return eu->signatureLen; } void EB_Eu_SetSignature(EB_EU *eu, const uint8_t *p, uint32_t l) { assert(eu); if (eu->signaturePtr && eu->signatureLen) free(eu->signaturePtr); if (p && l) { eu->signaturePtr=(uint8_t *)malloc(l); assert(eu->signaturePtr); memmove(eu->signaturePtr, p, l); eu->signatureLen=l; } else { eu->signaturePtr=NULL; eu->signatureLen=0; } } const char *EB_Eu_GetUserId(const EB_EU *eu) { assert(eu); return eu->userId; } void EB_Eu_SetUserId(EB_EU *eu, const char *s) { SETSTRING(userId); } const char *EB_Eu_GetOriginalFileName(const EB_EU *eu) { assert(eu); return eu->originalFileName; } void EB_Eu_SetOriginalFileName(EB_EU *eu, const char *s) { SETSTRING(originalFileName); } const GWEN_TIME *EB_Eu_GetCreationTime(const EB_EU *eu) { assert(eu); return eu->creationTime; } void EB_Eu_SetCreationTime(EB_EU *eu, const GWEN_TIME *ti) { assert(eu); GWEN_Time_free(eu->creationTime); if (ti) eu->creationTime=GWEN_Time_dup(ti); else eu->creationTime=NULL; } const GWEN_TIME *EB_Eu_GetSignatureTime(const EB_EU *eu) { assert(eu); return eu->signatureTime; } void EB_Eu_SetSignatureTime(EB_EU *eu, const GWEN_TIME *ti) { assert(eu); GWEN_Time_free(eu->signatureTime); if (ti) eu->signatureTime=GWEN_Time_dup(ti); else eu->signatureTime=NULL; } aqbanking-6.6.1/src/libs/plugins/backends/aqebics/msg/Makefile.in0000644000175000017500000005676415037736025021647 00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/libs/plugins/backends/aqebics/msg ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/distri.m4 $(top_srcdir)/m4/gwenhywfar.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/os.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libmsg_la_LIBADD = am_libmsg_la_OBJECTS = keys.lo msg.lo xml.lo zip.lo eu.lo libmsg_la_OBJECTS = $(am_libmsg_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/eu.Plo ./$(DEPDIR)/keys.Plo \ ./$(DEPDIR)/msg.Plo ./$(DEPDIR)/xml.Plo ./$(DEPDIR)/zip.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libmsg_la_SOURCES) DIST_SOURCES = $(libmsg_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac HEADERS = $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADD_ACLOCAL_FLAGS = @ADD_ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AQBANKING_CLI_VERSION_STRING = @AQBANKING_CLI_VERSION_STRING@ AQBANKING_FINTS_VERSION_STRING = @AQBANKING_FINTS_VERSION_STRING@ AQBANKING_SO_AGE = @AQBANKING_SO_AGE@ AQBANKING_SO_CURRENT = @AQBANKING_SO_CURRENT@ AQBANKING_SO_EFFECTIVE = @AQBANKING_SO_EFFECTIVE@ AQBANKING_SO_REVISION = @AQBANKING_SO_REVISION@ AQBANKING_VERSION_BUILD = @AQBANKING_VERSION_BUILD@ AQBANKING_VERSION_FULL_STRING = @AQBANKING_VERSION_FULL_STRING@ AQBANKING_VERSION_MAJOR = @AQBANKING_VERSION_MAJOR@ AQBANKING_VERSION_MINOR = @AQBANKING_VERSION_MINOR@ AQBANKING_VERSION_PATCHLEVEL = @AQBANKING_VERSION_PATCHLEVEL@ AQBANKING_VERSION_RELEASE_STRING = @AQBANKING_VERSION_RELEASE_STRING@ AQBANKING_VERSION_STRING = @AQBANKING_VERSION_STRING@ AQBANKING_VERSION_TAG = @AQBANKING_VERSION_TAG@ AQEBICS_CFLAGS = @AQEBICS_CFLAGS@ AQEBICS_LIBS = @AQEBICS_LIBS@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATETIME = @DATETIME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_EXCLUDE_PATTERNS = @DOXYGEN_EXCLUDE_PATTERNS@ DOXYGEN_FILE_PATTERNS = @DOXYGEN_FILE_PATTERNS@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENGUI_GTK2_CFLAGS = @GWENGUI_GTK2_CFLAGS@ GWENGUI_GTK2_LIBS = @GWENGUI_GTK2_LIBS@ GWENHYWFAR_MINIMUM_VERSION = @GWENHYWFAR_MINIMUM_VERSION@ HAVE_GWENGUI_GTK2 = @HAVE_GWENGUI_GTK2@ HAVE_I18N = @HAVE_I18N@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIBXSLT_CFLAGS = @LIBXSLT_CFLAGS@ LIBXSLT_LIBS = @LIBXSLT_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_SUPPORTS_QT = @MSGFMT_SUPPORTS_QT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ TUTORIALS = @TUTORIALS@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XMLMERGE = @XMLMERGE@ XMLSEC_CFLAGS = @XMLSEC_CFLAGS@ XMLSEC_LIBS = @XMLSEC_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ aqbanking_backends = @aqbanking_backends@ aqbanking_cfg_searchdir = @aqbanking_cfg_searchdir@ aqbanking_data_searchdir = @aqbanking_data_searchdir@ aqbanking_headerdir = @aqbanking_headerdir@ aqbanking_headerdir_am = @aqbanking_headerdir_am@ aqbanking_includes = @aqbanking_includes@ aqbanking_internal_libs = @aqbanking_internal_libs@ aqbanking_ldflags = @aqbanking_ldflags@ aqbanking_libs = @aqbanking_libs@ aqbanking_locale_searchdir = @aqbanking_locale_searchdir@ aqbanking_modules = @aqbanking_modules@ aqbanking_pkgdatadir = @aqbanking_pkgdatadir@ aqbanking_plugin_searchdir = @aqbanking_plugin_searchdir@ aqbanking_plugindir = @aqbanking_plugindir@ aqbanking_plugins_backends_dirs = @aqbanking_plugins_backends_dirs@ aqbanking_plugins_backends_libs = @aqbanking_plugins_backends_libs@ aqbanking_plugins_bankinfo_dirs = @aqbanking_plugins_bankinfo_dirs@ aqbanking_plugins_bankinfo_libs = @aqbanking_plugins_bankinfo_libs@ aqbanking_plugins_imexporters_dirs = @aqbanking_plugins_imexporters_dirs@ aqbanking_plugins_imexporters_libs = @aqbanking_plugins_imexporters_libs@ aqbanking_plugins_parsers_dirs = @aqbanking_plugins_parsers_dirs@ aqbanking_symlinkdir = @aqbanking_symlinkdir@ aqbanking_sys_is_windows = @aqbanking_sys_is_windows@ aqbankingpp_modules = @aqbankingpp_modules@ aqebics_datadir = @aqebics_datadir@ aqebics_includes = @aqebics_includes@ aqebics_internal_libs = @aqebics_internal_libs@ aqebics_ldflags = @aqebics_ldflags@ aqebics_libs = @aqebics_libs@ aqfints_datadir = @aqfints_datadir@ aqhbci_datadir = @aqhbci_datadir@ aqhbci_includes = @aqhbci_includes@ aqhbci_internal_libs = @aqhbci_internal_libs@ aqhbci_ldflags = @aqhbci_ldflags@ aqhbci_libs = @aqhbci_libs@ aqofxconnect_includes = @aqofxconnect_includes@ aqofxconnect_internal_libs = @aqofxconnect_internal_libs@ aqofxconnect_libs = @aqofxconnect_libs@ aqpaypal_includes = @aqpaypal_includes@ aqpaypal_internal_libs = @aqpaypal_internal_libs@ aqpaypal_libs = @aqpaypal_libs@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gmp_libs = @gmp_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_dir = @gwenhywfar_dir@ gwenhywfar_has_crypt = @gwenhywfar_has_crypt@ gwenhywfar_headers = @gwenhywfar_headers@ gwenhywfar_includes = @gwenhywfar_includes@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_plugins = @gwenhywfar_plugins@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ typemaker2_exe = @typemaker2_exe@ visibility_cflags = @visibility_cflags@ with_aqebics = @with_aqebics@ with_aqhbci = @with_aqhbci@ AM_CPPFLAGS = -I$(top_srcdir)/src/libs -I$(top_builddir)/src/libs $(gwenhywfar_includes) -I$(srcdir)/../.. $(AQEBICS_CFLAGS) AM_CFLAGS = -DBUILDING_AQBANKING @visibility_cflags@ noinst_LTLIBRARIES = libmsg.la libmsg_la_SOURCES = \ keys.c \ msg.c \ xml.c \ zip.c \ eu.c noinst_HEADERS = \ eu.h \ eu_p.h \ keys.h \ msg.h \ msg_p.h \ xml.h \ xml_p.h \ zip.h all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libs/plugins/backends/aqebics/msg/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libs/plugins/backends/aqebics/msg/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libmsg.la: $(libmsg_la_OBJECTS) $(libmsg_la_DEPENDENCIES) $(EXTRA_libmsg_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libmsg_la_OBJECTS) $(libmsg_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eu.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/keys.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/msg.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xml.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/eu.Plo -rm -f ./$(DEPDIR)/keys.Plo -rm -f ./$(DEPDIR)/msg.Plo -rm -f ./$(DEPDIR)/xml.Plo -rm -f ./$(DEPDIR)/zip.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/eu.Plo -rm -f ./$(DEPDIR)/keys.Plo -rm -f ./$(DEPDIR)/msg.Plo -rm -f ./$(DEPDIR)/xml.Plo -rm -f ./$(DEPDIR)/zip.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-generic clean-libtool clean-noinstLTLIBRARIES \ cscopelist-am ctags ctags-am distclean distclean-compile \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am .PRECIOUS: Makefile sources: for d in $(SUBDIRS); do \ $(MAKE) -C $$d sources; \ done for f in $(libmsg_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done cppcheck: for f in $(testlib_SOURCES); do \ cppcheck --force $$f ; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: aqbanking-6.6.1/src/libs/plugins/backends/aqebics/msg/zip.h0000664000175000017500000000152714043610745020536 00000000000000/*************************************************************************** $RCSfile: adminjobs.h,v $ ------------------- cvs : $Id: adminjobs.h,v 1.3 2006/01/13 13:59:58 cstim Exp $ begin : Mon Mar 01 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AQEBICS_MSG_ZIP_H #define AQEBICS_MSG_ZIP_H #include #include int EB_Zip_Deflate(const char *ptr, unsigned int size, GWEN_BUFFER *buf); int EB_Zip_Inflate(const char *ptr, unsigned int size, GWEN_BUFFER *buf); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqebics/msg/Makefile.am0000664000175000017500000000125114043610745021611 00000000000000 AM_CPPFLAGS = -I$(top_srcdir)/src/libs -I$(top_builddir)/src/libs $(gwenhywfar_includes) -I$(srcdir)/../.. $(AQEBICS_CFLAGS) AM_CFLAGS=-DBUILDING_AQBANKING @visibility_cflags@ noinst_LTLIBRARIES=libmsg.la libmsg_la_SOURCES=\ keys.c \ msg.c \ xml.c \ zip.c \ eu.c noinst_HEADERS=\ eu.h \ eu_p.h \ keys.h \ msg.h \ msg_p.h \ xml.h \ xml_p.h \ zip.h sources: for d in $(SUBDIRS); do \ $(MAKE) -C $$d sources; \ done for f in $(libmsg_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done cppcheck: for f in $(testlib_SOURCES); do \ cppcheck --force $$f ; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done aqbanking-6.6.1/src/libs/plugins/backends/aqebics/msg/eu_p.h0000664000175000017500000000147614043610745020667 00000000000000/*************************************************************************** begin : Sat Mar 08 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AQEBICS_MSG_EU_P_H #define AQEBICS_MSG_EU_P_H #include "eu.h" struct EB_EU { GWEN_LIST_ELEMENT(EB_EU) char *version; int modLen; char *jobType; uint8_t *signaturePtr; uint32_t signatureLen; char *userId; char *originalFileName; GWEN_TIME *creationTime; GWEN_TIME *signatureTime; }; static void copyTrimmedString(const uint8_t *p, uint32_t l, char **pDst); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqebics/msg/xml.c0000664000175000017500000004562214043610745020533 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "xml_p.h" #include "zip.h" #include #include #include #include #include void *EB_Xml__HandlePath(const char *entry, void *data, int idx, uint32_t flags) { xmlNodePtr n; xmlNodePtr nn; int i; xmlNsPtr nameSpace=NULL; const char *p; const char *name; n=(xmlNodePtr)data; name=entry; p=strchr(entry, ':'); if (p) { char prefix[32]; int plen; plen=p-entry; if (plen) { if (plen>=sizeof(prefix)) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Prefix too long (%d>%d)", (int)plen, (int)sizeof(prefix)); return 0; } strncpy(prefix, entry, plen); prefix[plen]=0; nameSpace=xmlSearchNs(n->doc, n, BAD_CAST prefix); if (!nameSpace) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Namespace \"%s\" not found", prefix); return 0; } } name=p+1; } /* check whether we are allowed to simply create the node */ if ( ((flags & GWEN_PATH_FLAGS_LAST) && (((flags & GWEN_PATH_FLAGS_VARIABLE) && (flags & GWEN_PATH_FLAGS_CREATE_VAR)) || (!(flags & GWEN_PATH_FLAGS_VARIABLE) && (flags & GWEN_PATH_FLAGS_CREATE_GROUP))) ) || ( !(flags & GWEN_PATH_FLAGS_LAST) && (flags & GWEN_PATH_FLAGS_PATHCREATE)) ) { /* simply create the new variable/group */ if (idx!=0) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Index is not 0, not creating %s[%d]", entry, idx); return 0; } DBG_VERBOUS(AQEBICS_LOGDOMAIN, "Unconditionally creating entry \"%s\"", entry); nn=xmlNewChild(n, nameSpace, BAD_CAST name, NULL); return nn; } /* find the node */ nn=n->children; i=idx; while (nn) { if (nn->type==XML_ELEMENT_NODE) { if (nn->name && strcmp((const char *)nn->name, name)==0) { if (i--==0) break; } } nn=nn->next; } /* while */ if (!nn) { /* node not found, check, if we are allowed to create it */ if ( (!(flags & GWEN_PATH_FLAGS_LAST) && (flags & GWEN_PATH_FLAGS_PATHMUSTEXIST)) || (flags & GWEN_PATH_FLAGS_NAMEMUSTEXIST) ) { DBG_VERBOUS(AQEBICS_LOGDOMAIN, "Entry \"%s\" does not exist", entry); return 0; } /* create the new variable/group */ if (idx!=0) { DBG_INFO(AQEBICS_LOGDOMAIN, "Index is not 0, not creating %s[%d]", entry, idx); return 0; } DBG_VERBOUS(AQEBICS_LOGDOMAIN, "Entry \"%s\" not found, creating", entry); nn=xmlNewChild(n, nameSpace, BAD_CAST name, NULL); } /* if node not found */ else { /* node does exist, check whether this is ok */ if ( ((flags & GWEN_PATH_FLAGS_LAST) && (flags & GWEN_PATH_FLAGS_NAMEMUSTNOTEXIST)) || (!(flags & GWEN_PATH_FLAGS_LAST) && (flags & GWEN_PATH_FLAGS_PATHMUSTNOTEXIST)) ) { DBG_VERBOUS(AQEBICS_LOGDOMAIN, "Entry \"%s\" already exists", entry); return 0; } } return nn; } xmlNodePtr EB_Xml_GetNode(xmlNodePtr n, const char *path, uint32_t flags) { return (xmlNodePtr)GWEN_Path_HandleWithIdx(path, n, flags, EB_Xml__HandlePath); } int EB_Xml_SetCharValue(xmlNodePtr n, const char *path, const char *value) { xmlNodePtr node; node=EB_Xml_GetNode(n, path, 0); if (!node) { DBG_INFO(AQEBICS_LOGDOMAIN, "here"); return -1; } xmlNodeSetContent(node, BAD_CAST value); return 0; } const char *EB_Xml_GetCharValue(xmlNodePtr n, const char *path, const char *defValue) { xmlNodePtr node; node=EB_Xml_GetNode(n, path, GWEN_PATH_FLAGS_NAMEMUSTEXIST); if (!node) { DBG_INFO(AQEBICS_LOGDOMAIN, "path [%s] not found", path); return defValue; } node=node->children; if (node==0) return defValue; while (node) { if (node->type==XML_TEXT_NODE) { return (const char *)node->content; } node=node->next; } return defValue; } int EB_Xml_SetIntValue(xmlNodePtr n, const char *path, int value) { char numbuf[32]; snprintf(numbuf, sizeof(numbuf)-1, "%d", value); numbuf[sizeof(numbuf)-1]=0; return EB_Xml_SetCharValue(n, path, numbuf); } int EB_Xml_GetIntValue(xmlNodePtr n, const char *path, int defValue) { const char *s; int i; s=EB_Xml_GetCharValue(n, path, NULL); if (s==NULL) return defValue; if (1!=sscanf(s, "%i", &i)) return defValue; return i; } int EB_Xml_CompressDoc(xmlDocPtr doc, GWEN_BUFFER *buf) { xmlChar *xmlbuff; int buffersize; int rv; xmlDocDumpFormatMemory(doc, &xmlbuff, &buffersize, 1); if (buffersize==0) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Empty doc"); return -1; } #if 0 if (1) { FILE *f; f=fopen("/tmp/compress.txt", "w+"); if (f) { fwrite((const char *)xmlbuff, buffersize, 1, f); fclose(f); } else { DBG_ERROR(0, "Could not create file"); assert(0); } } #endif rv=EB_Zip_Deflate((const char *)xmlbuff, buffersize, buf); xmlFree(xmlbuff); if (rv) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Could not zip doc (%d)", rv); return -1; } return 0; } int EB_Xml_Compress64Doc(xmlDocPtr doc, GWEN_BUFFER *buf) { GWEN_BUFFER *tbuf; int rv; tbuf=GWEN_Buffer_new(0, 512, 0, 1); rv=EB_Xml_CompressDoc(doc, tbuf); if (rv) { GWEN_Buffer_free(tbuf); return rv; } rv=GWEN_Base64_Encode((const unsigned char *)GWEN_Buffer_GetStart(tbuf), GWEN_Buffer_GetUsedBytes(tbuf), buf, 0); GWEN_Buffer_free(tbuf); if (rv) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Could not base64-encode order"); return -1; } return 0; } int EB_Xml_UncompressDoc(const char *ptr, int size, xmlDocPtr *pdoc) { xmlDocPtr doc; int rv; GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, (size*3)/4, 0, 1); rv=EB_Zip_Inflate(ptr, size, tbuf); if (rv) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Could not unzip doc (%d)", rv); GWEN_Buffer_free(tbuf); return -1; } doc=xmlParseMemory(GWEN_Buffer_GetStart(tbuf), GWEN_Buffer_GetUsedBytes(tbuf)); if (doc==NULL) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Not an XML doc"); GWEN_Buffer_Dump(tbuf, 2); GWEN_Buffer_free(tbuf); return -1; } GWEN_Buffer_free(tbuf); *pdoc=doc; return 0; } int EB_Xml_Uncompress64Doc(const char *ptr, int size, xmlDocPtr *pdoc) { GWEN_BUFFER *tbuf; int rv; tbuf=GWEN_Buffer_new(0, 512, 0, 1); rv=GWEN_Base64_Decode((const unsigned char *)ptr, size, tbuf); if (rv) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Could not base64-decode doc"); GWEN_Buffer_free(tbuf); return -1; } rv=EB_Xml_UncompressDoc(GWEN_Buffer_GetStart(tbuf), GWEN_Buffer_GetUsedBytes(tbuf), pdoc); GWEN_Buffer_free(tbuf); if (rv) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); return rv; } return 0; } int EB_Xml_Ebicsify(xmlNodePtr node, const char *hVersion) { if (strcasecmp(hVersion, "H002")==0) { xmlNsPtr ns; ns=xmlNewNs(node, BAD_CAST "http://www.ebics.org/H002", NULL); assert(ns); ns=xmlNewNs(node, BAD_CAST "http://www.w3.org/2000/09/xmldsig#", BAD_CAST "ds"); assert(ns); ns=xmlNewNs(node, BAD_CAST "http://www.w3.org/2001/XMLSchema-instance", BAD_CAST "xsi"); xmlNewNsProp(node, ns, BAD_CAST "schemaLocation", /* xsi:schemaLocation */ BAD_CAST "http://www.ebics.org/H002 " "http://www.ebics.org/H002/ebics_request.xsd"); xmlNewProp(node, BAD_CAST "Version", BAD_CAST "H002"); xmlNewProp(node, BAD_CAST "Revision", BAD_CAST "1"); } else if (strcasecmp(hVersion, "H003")==0) { xmlNsPtr ns; ns=xmlNewNs(node, BAD_CAST "http://www.ebics.org/H003", NULL); assert(ns); ns=xmlNewNs(node, BAD_CAST "http://www.w3.org/2000/09/xmldsig#", BAD_CAST "ds"); assert(ns); ns=xmlNewNs(node, BAD_CAST "http://www.w3.org/2001/XMLSchema-instance", BAD_CAST "xsi"); xmlNewNsProp(node, ns, BAD_CAST "schemaLocation", /* xsi:schemaLocation */ BAD_CAST "http://www.ebics.org/H003 " "http://www.ebics.org/H003/ebics_request.xsd"); xmlNewProp(node, BAD_CAST "Version", BAD_CAST "H003"); xmlNewProp(node, BAD_CAST "Revision", BAD_CAST "1"); } else if (strcasecmp(hVersion, "H004")==0) { xmlNsPtr ns; ns=xmlNewNs(node, BAD_CAST "urn:org:ebics:H004", NULL); assert(ns); ns=xmlNewNs(node, BAD_CAST "http://www.w3.org/2000/09/xmldsig#", BAD_CAST "ds"); assert(ns); ns=xmlNewNs(node, BAD_CAST "http://www.w3.org/2001/XMLSchema-instance", BAD_CAST "xsi"); xmlNewNsProp(node, ns, BAD_CAST "schemaLocation", /* xsi:schemaLocation */ BAD_CAST "urn:org:ebics:H004 ebics_request_H004.xsd"); xmlNewProp(node, BAD_CAST "Version", BAD_CAST "H004"); xmlNewProp(node, BAD_CAST "Revision", BAD_CAST "1"); } else { DBG_ERROR(AQEBICS_LOGDOMAIN, "Unknown EBICS version [%s]", hVersion); return -1; } return 0; } int EB_Xml_InsertChild(xmlNodePtr node, xmlNodePtr n) { if (node->children) xmlAddPrevSibling(node->children, n); else xmlAddChild(node, n); return 0; } int EB_Xml_GetXpathData(xmlNodePtr signedInfoNode, const xmlChar *uri, GWEN_BUFFER *rbuf) { xmlSecTransformPtr tptr; int rv; xmlSecTransformDataType firstType; xmlSecByte *result; xmlSecSize rlen; xmlSecTransformCtxPtr ctx; ctx=xmlSecTransformCtxCreate(); assert(ctx); /* xpath (see xmlsec/transforms.h) */ rv=xmlSecTransformCtxSetUri(ctx, uri, signedInfoNode); if (rv) { xmlSecError(XMLSEC_ERRORS_HERE, NULL, "xmlSecTransformCtxAppend", XMLSEC_ERRORS_R_XMLSEC_FAILED, XMLSEC_ERRORS_NO_MESSAGE); xmlSecTransformCtxDestroy(ctx); return (-1); } /* canonicalisation (see xmlsec/transforms.h) */ tptr=xmlSecTransformCtxCreateAndAppend(ctx, xmlSecTransformInclC14NId); if (tptr == NULL) { xmlSecError(XMLSEC_ERRORS_HERE, NULL, "xmlSecTransformCtxAppend", XMLSEC_ERRORS_R_XMLSEC_FAILED, XMLSEC_ERRORS_NO_MESSAGE); xmlSecTransformCtxDestroy(ctx); return (-1); } firstType=xmlSecTransformGetDataType(ctx->first, xmlSecTransformModePush, ctx); if ((firstType & xmlSecTransformDataTypeXml) != 0) { xmlSecNodeSetPtr nodeset = NULL; nodeset=xmlSecNodeSetGetChildren(signedInfoNode->doc, signedInfoNode, 1, 0); /* calculate the signature */ rv=xmlSecTransformCtxXmlExecute(ctx, nodeset); if (rv<0) { xmlSecError(XMLSEC_ERRORS_HERE, NULL, "xmlSecTransformCtxXmlExecute", XMLSEC_ERRORS_R_XMLSEC_FAILED, XMLSEC_ERRORS_NO_MESSAGE); xmlSecNodeSetDestroy(nodeset); xmlSecTransformCtxDestroy(ctx); return (-1); } xmlSecNodeSetDestroy(nodeset); } else { xmlSecError(XMLSEC_ERRORS_HERE, NULL, "the binary c14n transforms are not supported yet", XMLSEC_ERRORS_R_NOT_IMPLEMENTED, XMLSEC_ERRORS_NO_MESSAGE); xmlSecTransformCtxDestroy(ctx); return (-1); } /* ctx->result now contains the resulting data */ result=xmlSecBufferGetData(ctx->result); rlen=xmlSecBufferGetSize(ctx->result); if (result && rlen) { DBG_DEBUG(AQEBICS_LOGDOMAIN, "Have data: %d bytes", rlen); GWEN_Buffer_AppendBytes(rbuf, (char *)result, rlen); } xmlSecTransformCtxDestroy(ctx); return (0); } int EB_Xml_DocFromBuffer(const char *ptr, int size, xmlDocPtr *pdoc) { xmlDocPtr doc; doc=xmlParseMemory(ptr, size); if (doc==NULL) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Not an XML doc"); GWEN_Text_DumpString(ptr, (uint32_t) size, 2); return GWEN_ERROR_BAD_DATA; } *pdoc=doc; return 0; } int EB_Xml_BuildHashData(xmlNodePtr signedInfoNode, const xmlChar *uri, GWEN_BUFFER *rbuf) { xmlSecTransformPtr tptr; int rv; xmlSecTransformDataType firstType; xmlSecByte *result; xmlSecSize rlen; xmlSecTransformCtxPtr ctx; ctx=xmlSecTransformCtxCreate(); assert(ctx); /* xpath (see xmlsec/transforms.h) */ rv=xmlSecTransformCtxSetUri(ctx, uri, signedInfoNode); if (rv) { xmlSecError(XMLSEC_ERRORS_HERE, NULL, "xmlSecTransformCtxAppend", XMLSEC_ERRORS_R_XMLSEC_FAILED, XMLSEC_ERRORS_NO_MESSAGE); xmlSecTransformCtxDestroy(ctx); return (-1); } /* canonicalisation (see xmlsec/transforms.h) */ tptr=xmlSecTransformCtxCreateAndAppend(ctx, xmlSecTransformInclC14NId); if (tptr == NULL) { xmlSecError(XMLSEC_ERRORS_HERE, NULL, "xmlSecTransformCtxAppend", XMLSEC_ERRORS_R_XMLSEC_FAILED, XMLSEC_ERRORS_NO_MESSAGE); xmlSecTransformCtxDestroy(ctx); return (-1); } #if 0 /* hashing (see xmlsec/app.h) */ tptr=xmlSecTransformCtxCreateAndAppend(ctx, xmlSecTransformHmacSha1Id); if (tptr == NULL) { xmlSecError(XMLSEC_ERRORS_HERE, NULL, "xmlSecTransformCtxAppend", XMLSEC_ERRORS_R_XMLSEC_FAILED, XMLSEC_ERRORS_NO_MESSAGE); xmlSecTransformCtxDestroy(ctx); return (-1); } #endif firstType=xmlSecTransformGetDataType(ctx->first, xmlSecTransformModePush, ctx); if ((firstType & xmlSecTransformDataTypeXml) != 0) { xmlSecNodeSetPtr nodeset = NULL; nodeset=xmlSecNodeSetGetChildren(signedInfoNode->doc, signedInfoNode, 1, 0); /* calculate the signature */ rv=xmlSecTransformCtxXmlExecute(ctx, nodeset); if (rv<0) { xmlSecError(XMLSEC_ERRORS_HERE, NULL, "xmlSecTransformCtxXmlExecute", XMLSEC_ERRORS_R_XMLSEC_FAILED, XMLSEC_ERRORS_NO_MESSAGE); xmlSecNodeSetDestroy(nodeset); xmlSecTransformCtxDestroy(ctx); return (-1); } xmlSecNodeSetDestroy(nodeset); } else { xmlSecError(XMLSEC_ERRORS_HERE, NULL, "the binary c14n transforms are not supported yet", XMLSEC_ERRORS_R_NOT_IMPLEMENTED, XMLSEC_ERRORS_NO_MESSAGE); xmlSecTransformCtxDestroy(ctx); return (-1); } /* ctx->result now contains the resulting data */ result=xmlSecBufferGetData(ctx->result); rlen=xmlSecBufferGetSize(ctx->result); if (result && rlen) { GWEN_Buffer_AppendBytes(rbuf, (char *)result, rlen); } xmlSecTransformCtxDestroy(ctx); return (0); } int EB_Xml_BuildNodeHash(xmlNodePtr node, const char *uri, GWEN_MDIGEST *md, GWEN_BUFFER *hbuf) { GWEN_BUFFER *dbuf; int rv; dbuf=GWEN_Buffer_new(0, 1024, 0, 1); rv=EB_Xml_BuildHashData(node, BAD_CAST uri, dbuf); if (rv) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(dbuf); return rv; } /* begin hash */ rv=GWEN_MDigest_Begin(md); if (rv<0) { DBG_ERROR(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(dbuf); return EB_RC_INTERNAL_ERROR; } /* update */ rv=GWEN_MDigest_Update(md, (const uint8_t *) GWEN_Buffer_GetStart(dbuf), GWEN_Buffer_GetUsedBytes(dbuf)); if (rv<0) { DBG_ERROR(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(dbuf); return EB_RC_INTERNAL_ERROR; } /* end */ rv=GWEN_MDigest_End(md); if (rv<0) { DBG_ERROR(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(dbuf); return EB_RC_INTERNAL_ERROR; } GWEN_Buffer_AppendBytes(hbuf, (const char *)GWEN_MDigest_GetDigestPtr(md), GWEN_MDigest_GetDigestSize(md)); /* cleanup */ GWEN_Buffer_free(dbuf); return 0; } int EB_Xml_BuildNodeHashSha1(xmlNodePtr node, const char *uri, GWEN_BUFFER *hbuf) { GWEN_MDIGEST *md; int rv; md=GWEN_MDigest_Sha1_new(); rv=EB_Xml_BuildNodeHash(node, uri, md, hbuf); GWEN_MDigest_free(md); return rv; } int EB_Xml_BuildNodeHashSha256(xmlNodePtr node, const char *uri, GWEN_BUFFER *hbuf) { GWEN_MDIGEST *md; int rv; md=GWEN_MDigest_Sha256_new(); rv=EB_Xml_BuildNodeHash(node, uri, md, hbuf); GWEN_MDigest_free(md); return rv; } int EB_Xml_BuildNodeHashSha256Sha256(xmlNodePtr node, const char *uri, GWEN_BUFFER *hbuf) { GWEN_MDIGEST *md; int rv; GWEN_BUFFER *xbuf; xbuf=GWEN_Buffer_new(0, 64, 0, 1); md=GWEN_MDigest_Sha256_new(); rv=EB_Xml_BuildNodeHash(node, uri, md, xbuf); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(xbuf); GWEN_MDigest_free(md); return rv; } /* begin hash */ rv=GWEN_MDigest_Begin(md); if (rv<0) { DBG_ERROR(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(xbuf); return EB_RC_INTERNAL_ERROR; } /* update */ rv=GWEN_MDigest_Update(md, (const uint8_t *) GWEN_Buffer_GetStart(xbuf), GWEN_Buffer_GetUsedBytes(xbuf)); if (rv<0) { DBG_ERROR(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(xbuf); return EB_RC_INTERNAL_ERROR; } /* end */ rv=GWEN_MDigest_End(md); if (rv<0) { DBG_ERROR(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(xbuf); return EB_RC_INTERNAL_ERROR; } GWEN_Buffer_free(xbuf); GWEN_Buffer_AppendBytes(hbuf, (const char *)GWEN_MDigest_GetDigestPtr(md), GWEN_MDigest_GetDigestSize(md)); GWEN_MDigest_free(md); return rv; } aqbanking-6.6.1/src/libs/plugins/backends/aqebics/msg/eu.h0000664000175000017500000000345714043610745020351 00000000000000/*************************************************************************** begin : Sat Mar 08 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AQEBICS_MSG_EU_H #define AQEBICS_MSG_EU_H typedef struct EB_EU EB_EU; #include #include #include GWEN_LIST_FUNCTION_DEFS(EB_EU, EB_Eu) EB_EU *EB_Eu_new(); void EB_Eu_free(EB_EU *eu); EB_EU *EB_Eu_dup(const EB_EU *oldEu); EB_EU *EB_Eu_fromBuffer(const uint8_t *p, uint32_t l); void EB_Eu_toBuffer(const EB_EU *eu, GWEN_BUFFER *buf); int EB_Eu_toDb(const EB_EU *eu, GWEN_DB_NODE *db); EB_EU *EB_Eu_fromDb(GWEN_DB_NODE *db); const char *EB_Eu_GetVersion(const EB_EU *eu); void EB_Eu_SetVersion(EB_EU *eu, const char *s); int EB_Eu_GetModLen(const EB_EU *eu); void EB_Eu_SetModLen(EB_EU *eu, int i); const char *EB_Eu_GetJobType(const EB_EU *eu); void EB_Eu_SetJobType(EB_EU *eu, const char *s); const uint8_t *EB_Eu_GetSignaturePtr(const EB_EU *eu); uint32_t EB_Eu_GetSignatureLen(const EB_EU *eu); void EB_Eu_SetSignature(EB_EU *eu, const uint8_t *p, uint32_t l); const char *EB_Eu_GetUserId(const EB_EU *eu); void EB_Eu_SetUserId(EB_EU *eu, const char *s); const char *EB_Eu_GetOriginalFileName(const EB_EU *eu); void EB_Eu_SetOriginalFileName(EB_EU *eu, const char *s); const GWEN_TIME *EB_Eu_GetCreationTime(const EB_EU *eu); void EB_Eu_SetCreationTime(EB_EU *eu, const GWEN_TIME *ti); const GWEN_TIME *EB_Eu_GetSignatureTime(const EB_EU *eu); void EB_Eu_SetSignatureTime(EB_EU *eu, const GWEN_TIME *ti); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqebics/msg/msg.c0000664000175000017500000003367014043610745020521 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "msg_p.h" #include "xml.h" #include "aqebics/client/provider_l.h" #include #include #include #include #include #include #include GWEN_INHERIT_FUNCTIONS(EB_MSG) void EB_Msg__initWithDoc(EB_MSG *m) { xmlNodePtr rootNode; const char *s; assert(m); m->xpathCtx=xmlXPathNewContext(m->doc); if (xmlXPathRegisterNs(m->xpathCtx, BAD_CAST "ds", BAD_CAST "http://www.w3.org/2000/09/xmldsig#")!= 0) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Unable to register NS"); abort(); } if (xmlXPathRegisterNs(m->xpathCtx, BAD_CAST "xsi", BAD_CAST "http://www.w3.org/2001/XMLSchema-instance")!= 0) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Unable to register NS"); abort(); } if (m->hVersion==NULL) { rootNode=xmlDocGetRootElement(m->doc); s=(const char *)xmlGetProp(rootNode, BAD_CAST "Version"); if (!(s && *s)) s="H000"; free(m->hVersion); m->hVersion=strdup(s); } } EB_MSG *EB_Msg_new() { EB_MSG *m; GWEN_NEW_OBJECT(EB_MSG, m); GWEN_INHERIT_INIT(EB_MSG, m); m->usage=1; m->doc=xmlNewDoc(BAD_CAST "1.0"); m->doc->encoding=xmlCharStrdup("UTF-8"); EB_Msg__initWithDoc(m); return m; } EB_MSG *EB_Msg_fromBuffer(const char *buffer, int size) { EB_MSG *m; GWEN_NEW_OBJECT(EB_MSG, m); GWEN_INHERIT_INIT(EB_MSG, m); m->usage=1; m->doc=xmlParseMemory(buffer, size); if (m->doc==0) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Unable to parser buffer as XML doc"); EB_Msg_free(m); return 0; } EB_Msg__initWithDoc(m); return m; } EB_MSG *EB_Msg_fromFile(const char *fname) { EB_MSG *m; GWEN_NEW_OBJECT(EB_MSG, m); GWEN_INHERIT_INIT(EB_MSG, m); m->usage=1; m->doc=xmlParseFile(fname); if (m->doc==0) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Unable to parser file \"%s\" as XML doc", fname); EB_Msg_free(m); return 0; } EB_Msg__initWithDoc(m); return m; } EB_MSG *EB_Msg_newResponse(int willSign, const char *rName, const char *hVersion) { EB_MSG *m; GWEN_NEW_OBJECT(EB_MSG, m); GWEN_INHERIT_INIT(EB_MSG, m); m->usage=1; m->doc=EB_Msg__generateResponse(willSign, rName, hVersion); assert(m->doc); EB_Msg__initWithDoc(m); return m; } EB_MSG *EB_Msg_newRequest(int willSign, const char *hVersion) { EB_MSG *m; GWEN_NEW_OBJECT(EB_MSG, m); GWEN_INHERIT_INIT(EB_MSG, m); m->usage=1; m->doc=EB_Msg__generateRequest(willSign, hVersion); assert(m->doc); EB_Msg__initWithDoc(m); return m; } void EB_Msg_toBuffer(EB_MSG *m, GWEN_BUFFER *buf) { xmlChar *xmlbuff; int buffersize; assert(m); assert(m->usage); xmlDocDumpFormatMemory(m->doc, &xmlbuff, &buffersize, 0); GWEN_Buffer_AppendBytes(buf, (const char *)xmlbuff, (uint32_t)buffersize); xmlFree(xmlbuff); } void EB_Msg_free(EB_MSG *m) { if (m) { assert(m->usage); if (m->usage==1) { GWEN_INHERIT_FINI(EB_MSG, m); m->usage=0; free(m->hVersion); xmlFreeDoc(m->doc); GWEN_FREE_OBJECT(m); } else m->usage--; } } #if 0 xmlNodeSetPtr EB_Xml_GetNodes(EB_MSG *m, const char *xpathExpr) { xmlNodeSetPtr nodes; xmlXPathObjectPtr xpathObj; assert(m); assert(m->usage); xpathObj=xmlXPathEvalExpression(BAD_CAST xpathExpr, m->xpathCtx); if (xpathObj == NULL) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Unable to evaluate xpath expression \"%s\"", xpathExpr); return 0; } nodes=xpathObj->nodesetval; if (!nodes) { DBG_INFO(AQEBICS_LOGDOMAIN, "No matching nodes"); xmlXPathFreeObject(xpathObj); return 0; } xpathObj->nodesetval=NULL; xmlXPathFreeObject(xpathObj); return nodes; } #endif xmlDocPtr EB_Msg_GetDoc(const EB_MSG *m) { assert(m); assert(m->usage); return m->doc; } xmlNodePtr EB_Msg_GetRootNode(EB_MSG *m) { assert(m); assert(m->usage); assert(m->doc); return xmlDocGetRootElement(m->doc); } const char *EB_Msg_GetHVersion(const EB_MSG *m) { assert(m); assert(m->usage); return m->hVersion; } void EB_Msg_SetHVersion(EB_MSG *m, const char *s) { assert(m); assert(m->usage); free(m->hVersion); if (s) m->hVersion=strdup(s); else m->hVersion=NULL; } int EB_Msg_BuildHashData(EB_MSG *m, GWEN_BUFFER *hbuf) { int rv; assert(m); assert(m->usage); rv=EB_Xml_BuildHashData(xmlDocGetRootElement(m->doc), BAD_CAST "#xpointer(//*[@authenticate='true'])", hbuf); if (rv) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); return rv; } return 0; } int EB_Msg_BuildHashSha1(EB_MSG *m, GWEN_BUFFER *hbuf) { return EB_Xml_BuildNodeHashSha1(xmlDocGetRootElement(m->doc), "#xpointer(//*[@authenticate='true'])", hbuf); } int EB_Msg_BuildHashSha256(EB_MSG *m, GWEN_BUFFER *hbuf) { return EB_Xml_BuildNodeHashSha256(xmlDocGetRootElement(m->doc), "#xpointer(//*[@authenticate='true'])", hbuf); } int EB_Msg_BuildHashSha256Sha256(EB_MSG *m, GWEN_BUFFER *hbuf) { return EB_Xml_BuildNodeHashSha256Sha256(xmlDocGetRootElement(m->doc), "#xpointer(//*[@authenticate='true'])", hbuf); } int EB_Msg_ReadHash(EB_MSG *m, GWEN_BUFFER *hbuf) { const char *s; int rv; assert(m); assert(m->usage); s=EB_Xml_GetCharValue(xmlDocGetRootElement(m->doc), "AuthSignature/" "ds:SignedInfo/ds:Reference/ds:DigestValue", 0); if (!s) { DBG_ERROR(AQEBICS_LOGDOMAIN, "No hash"); return -1; } rv=GWEN_Base64_Decode((const unsigned char *)s, 0, hbuf); if (rv) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Could not decode hash"); return -1; } return 0; } int EB_Msg_WriteHash(EB_MSG *m, const unsigned char *hash, int hsize) { int rv; GWEN_BUFFER *hbuf; assert(m); assert(m->usage); if (hsize!=20) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Bad hash size (expected 20, was %d)", hsize); return -1; } hbuf=GWEN_Buffer_new(0, 40, 0, 1); rv=GWEN_Base64_Encode(hash, (uint32_t) hsize, hbuf, 0); if (rv) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Could not base64-encode hash (%d)", rv); GWEN_Buffer_free(hbuf); return -1; } EB_Xml_SetCharValue(xmlDocGetRootElement(m->doc), "AuthSignature/" "ds:SignedInfo/ds:Reference/ds:DigestValue", GWEN_Buffer_GetStart(hbuf)); GWEN_Buffer_free(hbuf); return 0; } int EB_Msg_ReadSignature(EB_MSG *m, GWEN_BUFFER *hbuf) { const char *s; int rv; assert(m); assert(m->usage); s=EB_Xml_GetCharValue(xmlDocGetRootElement(m->doc), "AuthSignature/" "ds:SignatureValue", 0); if (!s) { DBG_ERROR(AQEBICS_LOGDOMAIN, "No hash"); return -1; } rv=GWEN_Base64_Decode((const unsigned char *)s, 0, hbuf); if (rv) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Could not decode signature"); return -1; } return 0; } int EB_Msg_WriteSignature(EB_MSG *m, const unsigned char *hash, int hsize) { int rv; GWEN_BUFFER *hbuf; assert(m); assert(m->usage); if (hsize!=128) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Bad signature size (expected 128, was %d)", hsize); return -1; } hbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_Base64_Encode(hash, (uint32_t) hsize, hbuf, 0); if (rv) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Could not base64-encode signature (%d)", rv); GWEN_Buffer_free(hbuf); return -1; } EB_Xml_SetCharValue(xmlDocGetRootElement(m->doc), "AuthSignature/" "ds:SignatureValue", GWEN_Buffer_GetStart(hbuf)); GWEN_Buffer_free(hbuf); return 0; } int EB_Msg_SetCharValue(EB_MSG *m, const char *path, const char *value) { assert(m); assert(m->usage); return EB_Xml_SetCharValue(xmlDocGetRootElement(m->doc), path, value); } const char *EB_Msg_GetCharValue(const EB_MSG *m, const char *path, const char *defValue) { assert(m); assert(m->usage); return EB_Xml_GetCharValue(xmlDocGetRootElement(m->doc), path, defValue); } int EB_Msg_SetIntValue(EB_MSG *m, const char *path, int value) { assert(m); assert(m->usage); return EB_Xml_SetIntValue(xmlDocGetRootElement(m->doc), path, value); } int EB_Msg_GetIntValue(const EB_MSG *m, const char *path, int defValue) { assert(m); assert(m->usage); return EB_Xml_GetIntValue(xmlDocGetRootElement(m->doc), path, defValue); } EB_RC EB_Msg_GetResultCode(const EB_MSG *m) { const char *s; s=EB_Msg_GetCharValue(m, "header/mutable/ReturnCode", 0); if (s) { long unsigned int i; sscanf(s, "%lx", &i); return (EB_RC) i; } return EB_RC_INTERNAL_ERROR; } EB_RC EB_Msg_GetBodyResultCode(const EB_MSG *m) { const char *s; s=EB_Msg_GetCharValue(m, "body/ReturnCode", 0); if (s) { long unsigned int i; sscanf(s, "%lx", &i); return (EB_RC) i; } return EB_RC_INTERNAL_ERROR; } xmlDocPtr EB_Msg__generateRequest(int willSign, const char *hVersion) { xmlDocPtr doc=NULL; xmlNodePtr root_node = NULL; xmlNodePtr node = NULL; xmlNodePtr nodeX = NULL; xmlNodePtr nodeXX = NULL; /* * Creates a new document, a node and set it as a root node */ doc=xmlNewDoc(BAD_CAST "1.0"); root_node=xmlNewNode(NULL, BAD_CAST "ebics"); xmlDocSetRootElement(doc, root_node); EB_Xml_Ebicsify(root_node, hVersion); node=xmlNewChild(root_node, NULL, BAD_CAST "header", NULL); xmlNewProp(node, BAD_CAST "authenticate", BAD_CAST "true"); nodeX=xmlNewChild(node, NULL, BAD_CAST "static", NULL); xmlNewChild(nodeX, NULL, BAD_CAST "PartnerID", NULL); xmlNewChild(nodeX, NULL, BAD_CAST "UserID", NULL); nodeXX=xmlNewChild(nodeX, NULL, BAD_CAST "OrderDetails", NULL); xmlNewChild(nodeXX, NULL, BAD_CAST "OrderType", NULL); xmlNewChild(nodeXX, NULL, BAD_CAST "OrderID", NULL); xmlNewChild(nodeXX, NULL, BAD_CAST "OrderAttribute", NULL); nodeX=xmlNewChild(node, NULL, BAD_CAST "mutable", NULL); xmlNewChild(nodeX, NULL, BAD_CAST "TransactionPhase", NULL); if (willSign) EB_Msg__prepareSignature(doc); node=xmlNewChild(root_node, NULL, BAD_CAST "body", NULL); return doc; } xmlDocPtr EB_Msg__generateResponse(int willSign, const char *rName, const char *hVersion) { xmlDocPtr doc=NULL; xmlNodePtr root_node = NULL; xmlNodePtr node = NULL; xmlNodePtr nodeX = NULL; /* * Creates a new document, a node and set it as a root node */ doc=xmlNewDoc(BAD_CAST "1.0"); root_node=xmlNewNode(NULL, BAD_CAST rName); xmlDocSetRootElement(doc, root_node); EB_Xml_Ebicsify(root_node, hVersion); node=xmlNewChild(root_node, NULL, BAD_CAST "header", NULL); xmlNewProp(node, BAD_CAST "authenticate", BAD_CAST "true"); nodeX=xmlNewChild(node, NULL, BAD_CAST "static", NULL); nodeX=xmlNewChild(node, NULL, BAD_CAST "mutable", NULL); //if (!isKeyMgt) xmlNewChild(nodeX, NULL, BAD_CAST "TransactionPhase", NULL); xmlNewChild(nodeX, NULL, BAD_CAST "ReturnCode", NULL); xmlNewChild(nodeX, NULL, BAD_CAST "ReportText", NULL); if (willSign) EB_Msg__prepareSignature(doc); node=xmlNewChild(root_node, NULL, BAD_CAST "body", NULL); return doc; } int EB_Msg__prepareSignature(xmlDocPtr doc) { xmlNodePtr node; xmlNsPtr ns; xmlNodePtr n; xmlNodePtr nn; xmlNodePtr nnn; xmlNodePtr nnnn; node=xmlNewChild(xmlDocGetRootElement(doc), NULL, BAD_CAST "AuthSignature", NULL); ns=xmlSearchNs(doc, node, BAD_CAST "ds"); assert(ns); n=xmlNewChild(node, ns, BAD_CAST "SignedInfo", NULL); nn=xmlNewChild(n, ns, BAD_CAST "CanonicalizationMethod", NULL); xmlNewProp(nn, BAD_CAST "Algorithm", BAD_CAST "http://www.w3.org/TR/2001/REC-xml-c14n-20010315"); nn=xmlNewChild(n, ns, BAD_CAST "SignatureMethod", NULL); xmlNewProp(nn, BAD_CAST "Algorithm", BAD_CAST "http://www.w3.org/2000/09/xmldsig#rsa-sha1"); nn=xmlNewChild(n, ns, BAD_CAST "Reference", NULL); xmlNewProp(nn, BAD_CAST "URI", BAD_CAST "#xpointer(//*[@authenticate='true'])"); nnn=xmlNewChild(nn, ns, BAD_CAST "Transforms", NULL); nnnn=xmlNewChild(nnn, ns, BAD_CAST "Transform", NULL); xmlNewProp(nnnn, BAD_CAST "Algorithm", BAD_CAST "http://www.w3.org/TR/2001/REC-xml-c14n-20010315"); nn=xmlNewChild(n, ns, BAD_CAST "DigestMethod", NULL); xmlNewProp(nn, BAD_CAST "Algorithm", BAD_CAST "http://www.w3.org/2000/09/xmldsig#sha1"); return 0; } GWEN_CRYPT_KEY *EB_Msg_ExtractAndDecodeSessionKey(EB_MSG *msg, AB_PROVIDER *pro, AB_USER *u) { xmlNodePtr node=NULL; GWEN_CRYPT_KEY *skey=NULL; int rv; assert(msg); assert(msg->usage); /* extract keys and store them */ node=EB_Xml_GetNode(xmlDocGetRootElement(msg->doc), "body/DataTransfer/DataEncryptionInfo", GWEN_PATH_FLAGS_NAMEMUSTEXIST); if (node==NULL) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Bad message: Missing session key"); return NULL; } rv=EBC_Provider_ExtractSessionKey(pro, u, node, &skey); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); return NULL; } DBG_INFO(AQEBICS_LOGDOMAIN, "Got session key"); return skey; } aqbanking-6.6.1/src/libs/plugins/backends/aqebics/msg/keys.h0000664000175000017500000000431214043610745020702 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2004-2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AQEBICS_MSG_KEYS_H #define AQEBICS_MSG_KEYS_H #include #include #include #include #include EB_RC EB_Key_toBin(const GWEN_CRYPT_KEY *k, const char *userId, const char *version, int keySize, GWEN_BUFFER *buf); EB_RC EB_Key_fromBin(GWEN_CRYPT_KEY **k, const char *version, char *bufUserId, unsigned int lenUserId, const char *p, unsigned int bsize); EB_RC EB_Key_toXml(GWEN_CRYPT_KEY *k, xmlNodePtr node); EB_RC EB_Key_fromXml(GWEN_CRYPT_KEY **k, xmlNodePtr node); int EB_Key_Info_toXml(const GWEN_CRYPT_TOKEN_KEYINFO *ki, xmlNodePtr node); EB_RC EB_Key_Info_ReadXml(GWEN_CRYPT_TOKEN_KEYINFO *ki, xmlNodePtr node); EB_RC EB_Key_Info_toBin(const GWEN_CRYPT_TOKEN_KEYINFO *ki, const char *userId, const char *version, int keySize, GWEN_BUFFER *buf); int EB_Key_BuildHashSha1(const GWEN_CRYPT_KEY *k, GWEN_BUFFER *hbuf, int encode64); int EB_Key_BuildHashSha256(const GWEN_CRYPT_KEY *k, GWEN_BUFFER *hbuf, int encode64); int EB_Key_Info_BuildHashSha1(const GWEN_CRYPT_TOKEN_KEYINFO *ki, GWEN_BUFFER *hbuf, int encode64); int EB_Key_Info_BuildHashSha256(const GWEN_CRYPT_TOKEN_KEYINFO *ki, GWEN_BUFFER *hbuf, int encode64); int EB_Key_Info_BuildSigHash_Rmd160(const GWEN_CRYPT_TOKEN_KEYINFO *ki, GWEN_BUFFER *hbuf); int EB_Key_Info_BuildSigHash_Sha256(const GWEN_CRYPT_TOKEN_KEYINFO *ki, GWEN_BUFFER *hbuf); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqebics/msg/xml.h0000664000175000017500000000473714043610745020542 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2004-2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AQEBICS_MSG_XML_H #define AQEBICS_MSG_XML_H #include #include #include #include #include #include #include xmlNodePtr EB_Xml_GetNode(xmlNodePtr n, const char *path, uint32_t flags); int EB_Xml_SetCharValue(xmlNodePtr n, const char *path, const char *value); const char *EB_Xml_GetCharValue(xmlNodePtr n, const char *path, const char *defValue); int EB_Xml_SetIntValue(xmlNodePtr n, const char *path, int value); int EB_Xml_GetIntValue(xmlNodePtr n, const char *path, int defValue); int EB_Xml_Ebicsify(xmlNodePtr node, const char *hVersion); int EB_Xml_CompressDoc(xmlDocPtr doc, GWEN_BUFFER *buf); int EB_Xml_Compress64Doc(xmlDocPtr doc, GWEN_BUFFER *buf); int EB_Xml_UncompressDoc(const char *ptr, int size, xmlDocPtr *pdoc); int EB_Xml_Uncompress64Doc(const char *ptr, int size, xmlDocPtr *pdoc); int EB_Xml_InsertChild(xmlNodePtr node, xmlNodePtr n); int EB_Xml_GetXpathData(xmlNodePtr signedInfoNode, const xmlChar *uri, GWEN_BUFFER *rbuf); int EB_Xml_DocFromBuffer(const char *ptr, int size, xmlDocPtr *pdoc); int EB_Xml_BuildHashData(xmlNodePtr signedInfoNode, const xmlChar *uri, GWEN_BUFFER *rbuf); int EB_Xml_BuildNodeHash(xmlNodePtr node, const char *uri, GWEN_MDIGEST *md, GWEN_BUFFER *hbuf); int EB_Xml_BuildNodeHashSha1(xmlNodePtr node, const char *uri, GWEN_BUFFER *hbuf); int EB_Xml_BuildNodeHashSha256(xmlNodePtr node, const char *uri, GWEN_BUFFER *hbuf); int EB_Xml_BuildNodeHashSha256Sha256(xmlNodePtr node, const char *uri, GWEN_BUFFER *hbuf); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqebics/msg/xml_p.h0000664000175000017500000000152214043610745021046 00000000000000/*************************************************************************** $RCSfile: adminjobs.h,v $ ------------------- cvs : $Id: adminjobs.h,v 1.3 2006/01/13 13:59:58 cstim Exp $ begin : Mon Mar 01 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AQEBICS_MSG_XML_P_H #define AQEBICS_MSG_XML_P_H #include "xml.h" static void *EB_Xml__HandlePath(const char *entry, void *data, int idx, uint32_t flags); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqebics/msg/zip.c0000664000175000017500000000531514043610745020530 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "zip.h" #include #include int EB_Zip_Deflate(const char *ptr, unsigned int size, GWEN_BUFFER *buf) { z_stream z; char outbuf[512]; int rv; int mode; z.next_in=(unsigned char *)ptr; z.avail_in=size; z.next_out=(unsigned char *)outbuf; z.avail_out=sizeof(outbuf); z.zalloc=Z_NULL; z.zfree=Z_NULL; rv=deflateInit(&z, (unsigned int) 5); if (rv!=Z_OK) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Error on deflateInit (%d)", rv); return -1; } mode=Z_NO_FLUSH; for (;;) { rv=deflate(&z, mode); if (rv==Z_STREAM_END) break; if (rv!=Z_OK) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Error on deflate (%d)", rv); deflateEnd(&z); return -1; } if (z.avail_in==0) mode=Z_FINISH; if (z.avail_out==0) { GWEN_Buffer_AppendBytes(buf, outbuf, (uint32_t) sizeof(outbuf)); z.next_out=(unsigned char *)outbuf; z.avail_out=sizeof(outbuf); } } if (z.avail_out!=sizeof(outbuf)) { GWEN_Buffer_AppendBytes(buf, outbuf, (uint32_t)(sizeof(outbuf)-z.avail_out)); z.next_out=(unsigned char *)outbuf; z.avail_out=sizeof(outbuf); } deflateEnd(&z); return 0; } int EB_Zip_Inflate(const char *ptr, unsigned int size, GWEN_BUFFER *buf) { z_stream z; char outbuf[512]; int rv; int mode; z.next_in=(unsigned char *)ptr; z.avail_in=size; z.next_out=(unsigned char *)outbuf; z.avail_out=sizeof(outbuf); z.zalloc=Z_NULL; z.zfree=Z_NULL; rv=inflateInit(&z); if (rv!=Z_OK) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Error on deflateInit (%d)", rv); return -1; } mode=Z_NO_FLUSH; for (;;) { rv=inflate(&z, mode); if (rv==Z_STREAM_END) break; if (rv!=Z_OK) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Error on inflate (%d)", rv); deflateEnd(&z); return -1; } if (z.avail_in==0) mode=Z_FINISH; if (z.avail_out==0) { GWEN_Buffer_AppendBytes(buf, outbuf, sizeof(outbuf)); z.next_out=(unsigned char *)outbuf; z.avail_out=sizeof(outbuf); } } if (z.avail_out!=sizeof(outbuf)) { GWEN_Buffer_AppendBytes(buf, outbuf, (uint32_t)(sizeof(outbuf)-z.avail_out)); z.next_out=(unsigned char *)outbuf; z.avail_out=sizeof(outbuf); } inflateEnd(&z); return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqebics/msg/msg_p.h0000664000175000017500000000202114043610745021027 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2004-2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AQEBICS_MSG_MSG_P_H #define AQEBICS_MSG_MSG_P_H #include "msg.h" #include struct EB_MSG { GWEN_INHERIT_ELEMENT(EB_MSG) xmlDocPtr doc; xmlXPathContextPtr xpathCtx; char *hVersion; uint32_t usage; }; static void EB_Msg__initWithDoc(EB_MSG *m); static xmlDocPtr EB_Msg__generateRequest(int willSign, const char *hVersion); static xmlDocPtr EB_Msg__generateResponse(int willSign, const char *rName, const char *hVersion); static int EB_Msg__prepareSignature(xmlDocPtr doc); /*static xmlNodeSetPtr EB_Xml_GetNodes(EB_MSG *m, const char *xpathExpr);*/ #endif aqbanking-6.6.1/src/libs/plugins/backends/aqebics/control/0000755000175000017500000000000015037736164020536 500000000000000aqbanking-6.6.1/src/libs/plugins/backends/aqebics/control/resetuser.c0000664000175000017500000000623614043610745022644 00000000000000/*************************************************************************** begin : Mon Oct 13 2008 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals.h" #include int resetUser(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; uint32_t uid; AB_USER *u=NULL; int rv; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Int, /* type */ "userId", /* name */ 0, /* minnum */ 1, /* maxnum */ "u", /* short option */ "user", /* long option */ "Specify the unique user id", /* short description */ "Specify the unique user id" /* 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(stdout, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } /* doit */ uid=(uint32_t) GWEN_DB_GetIntValue(db, "userId", 0, 0); if (uid==0) { fprintf(stderr, "ERROR: Invalid or missing unique user id\n"); return 1; } rv=AB_Provider_GetUser(pro, uid, 1, 1, &u); if (rv<0) { fprintf(stderr, "ERROR: User with id %lu not found\n", (unsigned long int) uid); return 2; } else { rv=AB_Provider_BeginExclUseUser(pro, u); if (rv<0) { DBG_ERROR(0, "Could not lock customer"); return 3; } EBC_User_SubFlags(u, EBC_USER_FLAGS_INI | EBC_USER_FLAGS_HIA); EBC_User_SetStatus(u, EBC_UserStatus_New); rv=AB_Provider_EndExclUseUser(pro, u, 0); if (rv<0) { DBG_ERROR(0, "Could not lock customer"); return 3; } } fprintf(stderr, "Reset ok.\n"); return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqebics/control/sendhpd.c0000664000175000017500000000733414043610745022250 00000000000000/*************************************************************************** begin : Tue May 03 2005 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals.h" #include int sendHPD(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; uint32_t uid; AB_USER *u=NULL; int rv; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Int, /* type */ "userId", /* name */ 0, /* minnum */ 1, /* maxnum */ "u", /* short option */ "user", /* long option */ "Specify the unique user id", /* short description */ "Specify the unique user id" /* 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(stdout, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } /* doit */ uid=(uint32_t) GWEN_DB_GetIntValue(db, "userId", 0, 0); if (uid==0) { fprintf(stderr, "ERROR: Invalid or missing unique user id\n"); return 1; } rv=AB_Provider_GetUser(pro, uid, 1, 1, &u); if (rv<0) { fprintf(stderr, "ERROR: User with id %lu not found\n", (unsigned long int) uid); return 2; } else { if ((EBC_User_GetStatus(u)==EBC_UserStatus_Enabled)) { uint32_t guiid; guiid=GWEN_Gui_ProgressStart(GWEN_GUI_PROGRESS_ALLOW_SUBLEVELS | GWEN_GUI_PROGRESS_SHOW_PROGRESS | GWEN_GUI_PROGRESS_SHOW_LOG | GWEN_GUI_PROGRESS_ALWAYS_SHOW_LOG | GWEN_GUI_PROGRESS_KEEP_OPEN | GWEN_GUI_PROGRESS_SHOW_ABORT, I18N("Executing Request"), I18N("Now the request is send to the credit institute."), GWEN_GUI_PROGRESS_NONE, 0); rv=EBC_Provider_Send_HPD(pro, u, 1); GWEN_Gui_ProgressEnd(guiid); if (rv) { DBG_ERROR(0, "Error sending HPD request (%d)", rv); return 4; } else { fprintf(stderr, "HPD request sent.\n"); } } } fprintf(stderr, "HPD request ok.\n"); return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqebics/control/control_l.h0000664000175000017500000000104314043610744022611 00000000000000/*************************************************************************** begin : Fri Dec 28 2018 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AQEBICS_CONTROL_L_H #define AQEBICS_CONTROL_L_H int EBC_Control(AB_PROVIDER *pro, int argc, char **argv); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqebics/control/upload.c0000664000175000017500000001165614043610745022111 00000000000000/*************************************************************************** begin : Tue May 03 2005 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals.h" #include int upload(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; uint32_t uid; AB_USER *u=NULL; int rv; const char *requestType; const char *inFile; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Int, /* type */ "userId", /* name */ 0, /* minnum */ 1, /* maxnum */ "u", /* short option */ "user", /* long option */ "Specify the unique user id", /* short description */ "Specify the unique user id" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "requestType", /* name */ 1, /* minnum */ 1, /* maxnum */ "r", /* short option */ "request", /* long option */ "Specify the request type", /* short description */ "Specify the request type" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, GWEN_ArgsType_Char, "inFile", 1, 1, "f", "infile", "Specify the file to upload", "Specify the file to upload" }, { 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(stdout, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } requestType=GWEN_DB_GetCharValue(db, "requestType", 0, NULL); inFile=GWEN_DB_GetCharValue(db, "inFile", 0, NULL); /* doit */ uid=(uint32_t) GWEN_DB_GetIntValue(db, "userId", 0, 0); if (uid==0) { fprintf(stderr, "ERROR: Invalid or missing unique user id\n"); return 1; } rv=AB_Provider_GetUser(pro, uid, 1, 1, &u); if (rv<0) { fprintf(stderr, "ERROR: User with id %lu not found\n", (unsigned long int) uid); return 2; } else { GWEN_BUFFER *inBuffer; uint32_t guiid; inBuffer=GWEN_Buffer_new(0, 1024, 0, 1); rv=readFile(inFile, inBuffer); if (rv<0) { DBG_ERROR(0, "Error reading data file (%d)", rv); GWEN_Buffer_free(inBuffer); return 1; } guiid=GWEN_Gui_ProgressStart(GWEN_GUI_PROGRESS_ALLOW_SUBLEVELS | GWEN_GUI_PROGRESS_SHOW_PROGRESS | GWEN_GUI_PROGRESS_SHOW_LOG | GWEN_GUI_PROGRESS_ALWAYS_SHOW_LOG | GWEN_GUI_PROGRESS_KEEP_OPEN | GWEN_GUI_PROGRESS_SHOW_ABORT, I18N("Executing Request"), I18N("Now the request is send to the credit institute."), GWEN_GUI_PROGRESS_NONE, 0); rv=EBC_Provider_Upload(pro, u, requestType, (const uint8_t *)GWEN_Buffer_GetStart(inBuffer), GWEN_Buffer_GetUsedBytes(inBuffer), 1); GWEN_Gui_ProgressEnd(guiid); if (rv) { DBG_ERROR(0, "Error sending upload request (%d)", rv); return 4; } else { fprintf(stderr, "Upload request sent.\n"); } GWEN_Buffer_free(inBuffer); } fprintf(stderr, "Upload request ok.\n"); return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqebics/control/getaccounts.c0000664000175000017500000001061014043610744023130 00000000000000/*************************************************************************** begin : Tue May 03 2005 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals.h" #include int getAccounts(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; uint32_t uid; AB_USER *u=NULL; int rv; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Int, /* type */ "userId", /* name */ 0, /* minnum */ 1, /* maxnum */ "u", /* short option */ "user", /* long option */ "Specify the unique user id", /* short description */ "Specify the unique user id" /* 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(stdout, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } /* doit */ uid=(uint32_t) GWEN_DB_GetIntValue(db, "userId", 0, 0); if (uid==0) { fprintf(stderr, "ERROR: Invalid or missing unique user id\n"); return 1; } rv=AB_Provider_GetUser(pro, uid, 1, 1, &u); if (rv<0) { fprintf(stderr, "ERROR: User with id %lu not found\n", (unsigned long int) uid); return 2; } else { uint32_t guiid; guiid=GWEN_Gui_ProgressStart(GWEN_GUI_PROGRESS_ALLOW_SUBLEVELS | GWEN_GUI_PROGRESS_SHOW_PROGRESS | GWEN_GUI_PROGRESS_SHOW_LOG | GWEN_GUI_PROGRESS_ALWAYS_SHOW_LOG | GWEN_GUI_PROGRESS_KEEP_OPEN | GWEN_GUI_PROGRESS_SHOW_ABORT, I18N("Executing Request"), I18N("Now the request is sent to the credit institute."), GWEN_GUI_PROGRESS_NONE, 0); fprintf(stderr, "Retrieving bank parameter data\n"); rv=EBC_Provider_Send_HPD(pro, u, 1); if (rv<0) { DBG_ERROR(0, "Error retrieving bank parameter data (%d)", rv); GWEN_Gui_ProgressEnd(guiid); return 4; } if ((EBC_User_GetStatus(u)==EBC_UserStatus_Enabled) && (EBC_User_GetFlags(u) & EBC_USER_FLAGS_CLIENT_DATA_DOWNLOAD_SPP)) { int rv1; int rv2; fprintf(stderr, "Retrieving customer information\n"); rv1=EBC_Provider_Send_HKD(pro, u, 1); fprintf(stderr, "Retrieving user information\n"); rv2=EBC_Provider_Send_HTD(pro, u, 1); if ((rv1<0) && (rv2<0)) { DBG_ERROR(0, "Could neither send HKD not HTD request (%d, %d)", rv1, rv2); GWEN_Gui_ProgressEnd(guiid); return 4; } else { fprintf(stderr, "Done.\n"); } } else { fprintf(stderr, "The bank does not support download of account information\n"); } GWEN_Gui_ProgressEnd(guiid); } fprintf(stderr, "HPD request ok.\n"); return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqebics/control/utils.c0000664000175000017500000000326214043610745021757 00000000000000/*************************************************************************** begin : Tue May 03 2005 copyright : (C) 2005 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals.h" #include int readFile(const char *fname, GWEN_BUFFER *dbuf) { FILE *f; f=fopen(fname, "rb"); if (f) { while (!feof(f)) { uint32_t l; ssize_t s; char *p; GWEN_Buffer_AllocRoom(dbuf, 1024); l=GWEN_Buffer_GetMaxUnsegmentedWrite(dbuf); p=GWEN_Buffer_GetPosPointer(dbuf); s=fread(p, 1, l, f); if (s==0) break; if (s==(ssize_t)-1) { DBG_INFO(AQEBICS_LOGDOMAIN, "fread(%s): %s", fname, strerror(errno)); fclose(f); return GWEN_ERROR_IO; } GWEN_Buffer_IncrementPos(dbuf, s); GWEN_Buffer_AdjustUsedBytes(dbuf); } fclose(f); return 0; } else { DBG_INFO(AQEBICS_LOGDOMAIN, "fopen(%s): %s", fname, strerror(errno)); return GWEN_ERROR_IO; } } int writeFile(FILE *f, const char *p, int len) { while (len>0) { ssize_t l; ssize_t s; l=1024; if (l>len) l=len; s=fwrite(p, 1, l, f); if (s==(ssize_t)-1 || s==0) { DBG_INFO(AQEBICS_LOGDOMAIN, "fwrite: %s", strerror(errno)); return GWEN_ERROR_IO; } p+=s; len-=s; } return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqebics/control/addaccount.c0000664000175000017500000001642514043610744022730 00000000000000/*************************************************************************** begin : Tue May 03 2005 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals.h" #include "aqebics/client/user.h" #include "aqebics/client/provider.h" #include static GWEN_DB_NODE *_readCommandLine(GWEN_DB_NODE *dbArgs, int argc, char **argv); int addAccount(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; AB_USER *u=0; int rv; uint32_t userId; const char *bankId; const char *accountName; const char *accountId; const char *ownerName; int forceAdd; /* parse command line arguments */ db=_readCommandLine(dbArgs, argc, argv); if (db==NULL) { /* error in command line */ return 1; } userId=GWEN_DB_GetIntValue(db, "userId", 0, 0); if (userId<1) { fprintf(stderr, "ERROR: Invalid user id\n"); return 1; } bankId=GWEN_DB_GetCharValue(db, "bankId", 0, "*"); accountId=GWEN_DB_GetCharValue(db, "accountId", 0, "*"); accountName=GWEN_DB_GetCharValue(db, "accountName", 0, "Account"); ownerName=GWEN_DB_GetCharValue(db, "ownerName", 0, NULL); forceAdd=GWEN_DB_GetIntValue(db, "force", 0, 0); rv=AB_Provider_GetUser(pro, userId, 1, 1, &u); if (rv<0) { DBG_ERROR(0, "ERROR: User with id %lu not found", (unsigned long int) userId); return 2; } else { AB_ACCOUNT *account; AB_BANKINFO_LIST2 *bl; AB_BANKINFO_LIST2_ITERATOR *bit; AB_BANKINFO *tbi; AB_BANKINFO *bi; int rv; bl=AB_BankInfo_List2_new(); tbi=AB_BankInfo_new(); AB_BankInfo_SetBankId(tbi, bankId); AB_Banking_GetBankInfoByTemplate(AB_Provider_GetBanking(pro), "de", tbi, bl); bit=AB_BankInfo_List2_First(bl); if (bit) { bi=AB_BankInfo_List2Iterator_Data(bit); assert(bi); AB_BankInfo_List2Iterator_free(bit); } else { if (!forceAdd) { fprintf(stderr, "ERROR: Could not find bank with id %s\n", bankId); return 3; } bi=NULL; fprintf(stderr, "Warning: Could not find bank with id %s\n", bankId); } AB_BankInfo_List2_free(bl); account=AB_Provider_CreateAccountObject(pro); assert(account); if (!ownerName) AB_Account_SetOwnerName(account, AB_User_GetUserName(u)); else AB_Account_SetOwnerName(account, ownerName); AB_Account_SetAccountNumber(account, accountId); if (accountName) AB_Account_SetAccountName(account, accountName); AB_Account_SetBankCode(account, bankId); if (bi) AB_Account_SetBankName(account, AB_BankInfo_GetBankName(bi)); AB_Account_SetUserId(account, userId); rv=AB_Provider_AddAccount(pro, account, 1); /* do lock corresponding user */ if (rv) { DBG_ERROR(0, "Error adding account (%d)", rv); return 3; } } return 0; } GWEN_DB_NODE *_readCommandLine(GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; int rv; 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_Int, /* type */ "userId", /* name */ 1, /* minnum */ 1, /* maxnum */ "u", /* short option */ "user", /* long option */ "Specify the unique user id", /* short description */ "Specify the unique user id" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "ownerName", /* name */ 0, /* minnum */ 1, /* maxnum */ 0, /* short option */ "owner", /* long option */ "Specify the owner name", /* short description */ "Specify the owner name" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "accountName", /* name */ 0, /* minnum */ 1, /* maxnum */ "n", /* short option */ "name", /* long option */ "Specify the account name (Konto-Name)", /* short description */ "Specify the account name (Konto-Name)" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "accountId", /* name */ 1, /* minnum */ 1, /* maxnum */ "a", /* short option */ "account", /* long option */ "Specify the account id (Kontonummer)", /* short description */ "Specify the account id (Kontonummer)" /* long description */ }, { 0, GWEN_ArgsType_Int, /* type */ "force", /* name */ 0, /* minnum */ 1, /* maxnum */ 0, /* short option */ "force", /* long option */ "Force adding the account even if there is no bank info", "Force adding the account even if there is no bank info" }, { 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 NULL; } 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 NULL; } fprintf(stderr, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return NULL; } return db; } aqbanking-6.6.1/src/libs/plugins/backends/aqebics/control/Makefile.am0000664000175000017500000000202414043610744022501 00000000000000 AM_CPPFLAGS = -I$(top_srcdir)/src/libs -I$(top_builddir)/src/libs $(gwenhywfar_includes) -I$(srcdir)/../.. $(AQEBICS_CFLAGS) #EXTRA_DIST= localedir = $(datadir)/locale DEFS += -DLOCALEDIR=\"$(localedir)\" AM_CFLAGS=-DBUILDING_AQBANKING @visibility_cflags@ noinst_LTLIBRARIES=libebicscontrol.la noinst_HEADERS=globals.h control_l.h libebicscontrol_la_SOURCES=main.c \ addaccount.c \ addsubuserflags.c \ adduser.c \ createkeys.c \ createtempkey.c \ download.c \ sendkeys.c \ sendsignkey.c \ getaccounts.c \ getkeys.c \ iniletter.c \ hialetter.c \ sendhpd.c \ sendhkd.c \ upload.c \ utils.c \ mkpinlist.c \ resetuser.c \ getcert.c \ listusers.c \ listaccounts.c \ setebicsversion.c sources: for d in $(SUBDIRS); do \ $(MAKE) -C $$d sources; \ done for f in $(libebicscontrol_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done cppcheck: for f in $(libebicscontrol_la_SOURCES); do \ cppcheck --force $$f ; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done aqbanking-6.6.1/src/libs/plugins/backends/aqebics/control/download.c0000664000175000017500000001535214043610744022430 00000000000000/*************************************************************************** begin : Tue May 03 2005 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals.h" #include #include #include int download(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; uint32_t uid; AB_USER *u=NULL; int rv; const char *requestType; const char *fromTime; const char *toTime; int receipt; int verbosity; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Int, /* type */ "userId", /* name */ 0, /* minnum */ 1, /* maxnum */ "u", /* short option */ "user", /* long option */ "Specify the unique user id", /* short description */ "Specify the unique user id" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "requestType", /* name */ 1, /* minnum */ 1, /* maxnum */ "r", /* short option */ "request", /* long option */ "Specify the request type", /* short description */ "Specify the request type" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "fromTime", 0, 1, 0, "fromtime", "Specify the start date", "Specify the start date" }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "toTime", 0, 1, 0, "totime", "Specify the end date", "Specify the end date" }, { 0, GWEN_ArgsType_Int, "receipt", 0, 1, 0, "receipt", "Acknowledge receiption", "Acknowledge receiption" }, { 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(stdout, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } verbosity=GWEN_DB_GetIntValue(dbArgs, "verbosity", 0, 0); requestType=GWEN_DB_GetCharValue(db, "requestType", 0, NULL); fromTime=GWEN_DB_GetCharValue(db, "fromTime", 0, NULL); toTime=GWEN_DB_GetCharValue(db, "toTime", 0, NULL); receipt=GWEN_DB_GetIntValue(db, "receipt", 0, 0); /* doit */ uid=(uint32_t) GWEN_DB_GetIntValue(db, "userId", 0, 0); if (uid==0) { fprintf(stderr, "ERROR: Invalid or missing unique user id\n"); return 1; } rv=AB_Provider_GetUser(pro, uid, 1, 1, &u); if (rv<0) { fprintf(stderr, "ERROR: User with id %lu not found\n", (unsigned long int) uid); return 2; } else { GWEN_DATE *daFrom=NULL; GWEN_DATE *daTo=NULL; GWEN_BUFFER *destBuffer; uint32_t guiid; if (fromTime) { daFrom=GWEN_Date_fromStringWithTemplate(fromTime, "YYYYMMDD"); if (daFrom==NULL) { fprintf(stderr, "ERROR: Invalid fromDate (use \"YYYYMMDD\")\n"); return 1; } } if (toTime) { daTo=GWEN_Date_fromStringWithTemplate(toTime, "YYYYMMDD"); if (daTo==NULL) { fprintf(stderr, "ERROR: Invalid toDate (use \"YYYYMMDD\")\n"); return 1; } } guiid=GWEN_Gui_ProgressStart(GWEN_GUI_PROGRESS_ALLOW_SUBLEVELS | GWEN_GUI_PROGRESS_SHOW_PROGRESS | GWEN_GUI_PROGRESS_SHOW_LOG | GWEN_GUI_PROGRESS_ALWAYS_SHOW_LOG | GWEN_GUI_PROGRESS_KEEP_OPEN | GWEN_GUI_PROGRESS_SHOW_ABORT, I18N("Executing Request"), I18N("Now the request is send " "to the credit institute."), GWEN_GUI_PROGRESS_NONE, 0); destBuffer=GWEN_Buffer_new(0, 1024, 0, 1); GWEN_Buffer_SetHardLimit(destBuffer, EBICS_BUFFER_MAX_HARD_LIMIT); rv=EBC_Provider_Download(pro, u, requestType, destBuffer, receipt, daFrom, daTo, 1); if (rv==GWEN_ERROR_NO_DATA) { GWEN_Gui_ProgressLog(guiid, GWEN_LoggerLevel_Warning, I18N("No download data")); } GWEN_Gui_ProgressEnd(guiid); if (rv) { DBG_ERROR(0, "Error sending download request (%d)", rv); return 4; } else { fprintf(stderr, "Download request sent.\n"); } if (GWEN_Buffer_GetUsedBytes(destBuffer)) { rv=writeFile(stdout, GWEN_Buffer_GetStart(destBuffer), GWEN_Buffer_GetUsedBytes(destBuffer)); if (rv<0) { fprintf(stderr, "ERROR: Unable to write result to stdout (%s)\n", strerror(errno)); return 6; } else { if (verbosity>0) fprintf(stderr, "INFO: Wrote %d bytes\n", GWEN_Buffer_GetUsedBytes(destBuffer)); } } else { fprintf(stderr, "WARNING: Empty download data\n"); } GWEN_Buffer_free(destBuffer); GWEN_Date_free(daTo); GWEN_Date_free(daFrom); } fprintf(stderr, "Download request ok.\n"); return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqebics/control/sendkeys.c0000664000175000017500000001233014043610745022440 00000000000000/*************************************************************************** begin : Tue May 03 2005 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals.h" #include int sendKeys(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; uint32_t uid; AB_USER *u=NULL; int rv; int sendIni=0; int sendHia=0; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Int, /* type */ "userId", /* name */ 0, /* minnum */ 1, /* maxnum */ "u", /* short option */ "user", /* long option */ "Specify the unique user id", /* short description */ "Specify the unique user id" /* long description */ }, { 0, /* flags */ GWEN_ArgsType_Int, /* type */ "hia", /* name */ 0, /* minnum */ 0, /* maxnum */ 0, /* short option */ "hia", /* long option */ "Send HIA request", /* short description */ "Send HIA request" /* long description */ }, { 0, /* flags */ GWEN_ArgsType_Int, /* type */ "ini", /* name */ 0, /* minnum */ 0, /* maxnum */ 0, /* short option */ "ini", /* long option */ "Send INI request", /* short description */ "Send INI request" /* 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(stdout, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } /* doit */ uid=(uint32_t) GWEN_DB_GetIntValue(db, "userId", 0, 0); if (uid==0) { fprintf(stderr, "ERROR: Invalid or missing unique user id\n"); return 1; } sendIni=GWEN_DB_GetIntValue(db, "ini", 0, 0); sendHia=GWEN_DB_GetIntValue(db, "hia", 0, 0); if (sendIni==0 && sendHia==0) { sendIni=1; sendHia=1; } rv=AB_Provider_GetUser(pro, uid, 1, 1, &u); if (rv<0) { fprintf(stderr, "ERROR: User with id %lu not found\n", (unsigned long int) uid); return 2; } else { uint32_t guiid; guiid=GWEN_Gui_ProgressStart(GWEN_GUI_PROGRESS_ALLOW_SUBLEVELS | GWEN_GUI_PROGRESS_SHOW_PROGRESS | GWEN_GUI_PROGRESS_SHOW_LOG | GWEN_GUI_PROGRESS_ALWAYS_SHOW_LOG | GWEN_GUI_PROGRESS_KEEP_OPEN | GWEN_GUI_PROGRESS_SHOW_ABORT, I18N("Executing Request"), I18N("Now the request is send to the credit institute."), GWEN_GUI_PROGRESS_NONE, 0); if (sendIni) { if (!(EBC_User_GetFlags(u) & EBC_USER_FLAGS_INI)) { rv=EBC_Provider_Send_INI(pro, u, 1); if (rv) { DBG_ERROR(0, "Error sending INI request (%d)", rv); GWEN_Gui_ProgressEnd(guiid); return 4; } else { fprintf(stderr, "INI request sent.\n"); } } } if (sendHia) { if (!(EBC_User_GetFlags(u) & EBC_USER_FLAGS_HIA)) { rv=EBC_Provider_Send_HIA(pro, u, 1); if (rv) { DBG_ERROR(0, "Error sending HIA request (%d)", rv); GWEN_Gui_ProgressEnd(guiid); return 4; } else { fprintf(stderr, "HIA request sent.\n"); } } } GWEN_Gui_ProgressEnd(guiid); } fprintf(stderr, "INI/HIA request ok.\n"); return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqebics/control/setebicsversion.c0000664000175000017500000001012614043610745024023 00000000000000/*************************************************************************** begin : Mon Oct 13 2008 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals.h" #include int setEbicsVersion(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; uint32_t uid; AB_USER *u=NULL; int rv; const char *ebicsVersion; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "ebicsVersion", /* name */ 0, /* minnum */ 1, /* maxnum */ "E", /* short option */ "ebicsversion", /* long option */ "Specify the EBICS version to use (e.g. H002)", /* short description */ "Specify the EBICS version to use (e.g. H002)" /* 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(stdout, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } ebicsVersion=GWEN_DB_GetCharValue(db, "ebicsVersion", 0, "H003"); /* doit */ uid=(uint32_t) GWEN_DB_GetIntValue(db, "userId", 0, 0); if (uid==0) { fprintf(stderr, "ERROR: Invalid or missing unique user id\n"); return 1; } rv=AB_Provider_GetUser(pro, uid, 1, 0, &u); /* don't unlock to allow for AH_Provider_EndExclUseUser */ if (rv<0) { fprintf(stderr, "ERROR: User with id %lu not found\n", (unsigned long int) uid); return 2; } else { if (ebicsVersion) { if (strcasecmp(ebicsVersion, "H002")==0) { EBC_User_SetProtoVersion(u, "H002"); EBC_User_SetSignVersion(u, "A004"); EBC_User_SetAuthVersion(u, "X001"); EBC_User_SetCryptVersion(u, "E001"); } else if (strcasecmp(ebicsVersion, "H003")==0) { EBC_User_SetProtoVersion(u, "H003"); EBC_User_SetSignVersion(u, "A005"); EBC_User_SetAuthVersion(u, "X002"); EBC_User_SetCryptVersion(u, "E002"); } else if (strcasecmp(ebicsVersion, "H004")==0) { EBC_User_SetProtoVersion(u, "H004"); EBC_User_SetSignVersion(u, "A005"); EBC_User_SetAuthVersion(u, "X002"); EBC_User_SetCryptVersion(u, "E002"); } else { fprintf(stderr, "%s", I18N("Invalid protocol version.\n" "Possible versions are H002 and H003.\n")); return 3; } } rv=AB_Provider_EndExclUseUser(pro, u, 0); if (rv<0) { DBG_ERROR(0, "Could not unlock customer"); AB_Provider_EndExclUseUser(pro, u, 1); /* abandon */ return 3; } } fprintf(stderr, "EBICS version set to %s.\n", ebicsVersion); return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqebics/control/listusers.c0000664000175000017500000000761214043610745022657 00000000000000/*************************************************************************** begin : Fri Sep 18 2009 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals.h" #include int listUsers(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; int rv; int xml=0; AB_USER_LIST *ul; AB_USER *u; int i=0; const GWEN_ARGS args[]= { { 0, /* flags */ GWEN_ArgsType_Int, /* type */ "xml", /* name */ 0, /* minnum */ 1, /* maxnum */ 0, /* short option */ "xml", /* long option */ "Export as xml", /* short description */ 0 }, { 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; } xml=GWEN_DB_VariableExists(db, "xml"); if (xml) { fprintf(stdout, "\n"); fprintf(stdout, "\n"); } ul=AB_User_List_new(); rv=AB_Provider_ReadUsers(pro, ul); if (rv<0) { DBG_ERROR_ERR(0, rv); AB_User_List_free(ul); return 3; } u=AB_User_List_First(ul); while (u) { if (!xml) { fprintf(stdout, "User %d: Bank: %s/%s User Id: %s Customer Id: %s Unique Id: %lu\n", i++, AB_User_GetCountry(u), AB_User_GetBankCode(u), AB_User_GetUserId(u), AB_User_GetCustomerId(u), (unsigned long int) AB_User_GetUniqueId(u)); } else { const char *name = AB_User_GetUserName(u); fprintf(stdout, " \n"); fprintf(stdout, " %lu\n", (unsigned long int) AB_User_GetUniqueId(u)); if (!name) fprintf(stdout, " \n"); else fprintf(stdout, " \n", name); fprintf(stdout, " %s\n", AB_User_GetUserId(u)); fprintf(stdout, " %s\n", AB_User_GetCustomerId(u)); fprintf(stdout, " %s\n", AB_User_GetBankCode(u)); fprintf(stdout, " %s\n", AB_User_GetCountry(u)); fprintf(stdout, " %d\n", AB_User_GetLastSessionId(u)); fprintf(stdout, " \n\n"); } u=AB_User_List_Next(u); } AB_User_List_free(ul); if (xml) { fprintf(stdout, "\n"); } return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqebics/control/mkpinlist.c0000664000175000017500000001150014043610745022623 00000000000000/*************************************************************************** begin : Thu Jul 03 2008 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals.h" #include "aqebics/client/user.h" #include #include #include int mkPinList(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; GWEN_SYNCIO *sio; AB_USER_LIST *ul; AB_USER *u; int rv; const char *outFile; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "outFile", /* name */ 0, /* minnum */ 1, /* maxnum */ "o", /* short option */ "outfile", /* long option */ "Specify the name of the output file", /* short description */ "Specify the name of the output file" /* 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; } outFile=GWEN_DB_GetCharValue(db, "outfile", 0, 0); if (outFile==0) { sio=GWEN_SyncIo_File_fromStdout(); GWEN_SyncIo_AddFlags(sio, GWEN_SYNCIO_FLAGS_DONTCLOSE); } else { sio=GWEN_SyncIo_File_new(outFile, GWEN_SyncIo_File_CreationMode_CreateAlways); GWEN_SyncIo_AddFlags(sio, GWEN_SYNCIO_FILE_FLAGS_READ | GWEN_SYNCIO_FILE_FLAGS_WRITE | GWEN_SYNCIO_FILE_FLAGS_UREAD | GWEN_SYNCIO_FILE_FLAGS_UWRITE | GWEN_SYNCIO_FILE_FLAGS_GREAD | GWEN_SYNCIO_FILE_FLAGS_GWRITE); rv=GWEN_SyncIo_Connect(sio); if (rv<0) { DBG_ERROR(0, "Error opening output file: %s", strerror(errno)); return 4; } } GWEN_SyncIo_WriteLine(sio, "# This is a PIN file to be used with AqBanking"); GWEN_SyncIo_WriteLine(sio, "# Please insert the PINs/passwords for the users below"); ul=AB_User_List_new(); rv=AB_Provider_ReadUsers(pro, ul); if (rv<0) { DBG_ERROR_ERR(0, rv); AB_User_List_free(ul); GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); return 3; } u=AB_User_List_First(ul); while (u) { const char *s; GWEN_BUFFER *nbuf; int rv; GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteString(sio, "# User \""); s=AB_User_GetUserId(u); assert(s); GWEN_SyncIo_WriteString(sio, s); GWEN_SyncIo_WriteString(sio, "\" at \""); s=AB_User_GetBankCode(u); GWEN_SyncIo_WriteString(sio, s); GWEN_SyncIo_WriteLine(sio, "\""); nbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=EBC_User_MkPasswdName(u, nbuf); if (rv==0) { GWEN_BUFFER *obuf; obuf=GWEN_Buffer_new(0, 256, 0, 1); if (GWEN_Text_EscapeToBufferTolerant(GWEN_Buffer_GetStart(nbuf), obuf)) { DBG_ERROR(0, "Error escaping name to buffer"); GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); return 3; } GWEN_SyncIo_WriteString(sio, GWEN_Buffer_GetStart(obuf)); GWEN_SyncIo_WriteLine(sio, " = \"\""); GWEN_Buffer_free(obuf); } GWEN_Buffer_free(nbuf); u=AB_User_List_Next(u); } AB_User_List_free(ul); rv=GWEN_SyncIo_Disconnect(sio); if (rv<0) { DBG_ERROR_ERR(0, rv); GWEN_SyncIo_free(sio); return 4; } GWEN_SyncIo_free(sio); return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqebics/control/iniletter.c0000664000175000017500000000653014043610744022616 00000000000000/*************************************************************************** begin : Tue May 03 2005 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals.h" #include "aqebics/client/user.h" #include "aqebics/client/provider.h" #include int iniLetter(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; uint32_t uid; AB_USER *u=NULL; int rv; int showBankKey; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Int, /* type */ "userId", /* name */ 0, /* minnum */ 1, /* maxnum */ "u", /* short option */ "user", /* long option */ "Specify the unique user id", /* short description */ "Specify the unique user id" /* long description */ }, { 0, GWEN_ArgsType_Int, "bankKey", 0, 1, 0, "bankkey", "Show letter for the bank key", "Show letter for the bank key" }, { 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(stdout, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } showBankKey=GWEN_DB_GetIntValue(db, "bankkey", 0, 0); /* doit */ uid=(uint32_t) GWEN_DB_GetIntValue(db, "userId", 0, 0); if (uid==0) { fprintf(stderr, "ERROR: Invalid or missing unique user id\n"); return 1; } rv=AB_Provider_GetUser(pro, uid, 1, 1, &u); if (rv<0) { fprintf(stderr, "ERROR: User with id %lu not found\n", (unsigned long int) uid); return 2; } else { GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 2048, 0, 1); rv=EBC_Provider_GetIniLetterTxt(pro, u, showBankKey, tbuf, 0); if (rv) { DBG_ERROR(0, "Error creating ini letter (%d)", rv); return 3; } fprintf(stdout, "%s", GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqebics/control/createkeys.c0000664000175000017500000001031314043610744022750 00000000000000/*************************************************************************** begin : Tue May 03 2005 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals.h" #include "aqebics/client/user.h" #include "aqebics/client/provider.h" #include int createKeys(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; uint32_t uid; AB_USER *u=NULL; int rv; int cryptAndAuthKeySize; int signKeySize; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Int, /* type */ "userId", /* name */ 0, /* minnum */ 1, /* maxnum */ "u", /* short option */ "user", /* long option */ "Specify the unique user id", /* short description */ "Specify the unique user id" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, GWEN_ArgsType_Int, "cryptAndAuthKeySize", 0, 1, "s", "keysize", "Specify the keysize in bytes", "Specify the keysize in bytes" }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, GWEN_ArgsType_Int, "signKeySize", 0, 1, "S", "signkeysize", "Specify the keysize in bytes", "Specify the keysize in bytes" }, { 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(stdout, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } uid=(uint32_t) GWEN_DB_GetIntValue(db, "userId", 0, 0); if (uid==0) { fprintf(stderr, "ERROR: Invalid or missing unique user id\n"); return 1; } cryptAndAuthKeySize=GWEN_DB_GetIntValue(db, "cryptAndAuthKeySize", 0, 256); signKeySize=GWEN_DB_GetIntValue(db, "signKeySize", 0, 256); rv=AB_Provider_GetUser(pro, uid, 1, 1, &u); if (rv<0) { fprintf(stderr, "ERROR: User with id %lu not found\n", (unsigned long int) uid); return 2; } else { uint32_t guiid; guiid=GWEN_Gui_ProgressStart(GWEN_GUI_PROGRESS_ALLOW_SUBLEVELS | GWEN_GUI_PROGRESS_SHOW_PROGRESS | GWEN_GUI_PROGRESS_SHOW_LOG | GWEN_GUI_PROGRESS_ALWAYS_SHOW_LOG | GWEN_GUI_PROGRESS_KEEP_OPEN | GWEN_GUI_PROGRESS_SHOW_ABORT, I18N("Creating keys"), I18N("Now the keys are created."), GWEN_GUI_PROGRESS_NONE, 0); rv=EBC_Provider_CreateKeys(pro, u, cryptAndAuthKeySize, signKeySize, 0); GWEN_Gui_ProgressEnd(guiid); if (rv) { DBG_ERROR(0, "Error creating keys (%d)", rv); return 3; } } return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqebics/control/Makefile.in0000644000175000017500000006726115037736025022533 00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/libs/plugins/backends/aqebics/control ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/distri.m4 $(top_srcdir)/m4/gwenhywfar.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/os.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libebicscontrol_la_LIBADD = am_libebicscontrol_la_OBJECTS = main.lo addaccount.lo \ addsubuserflags.lo adduser.lo createkeys.lo createtempkey.lo \ download.lo sendkeys.lo sendsignkey.lo getaccounts.lo \ getkeys.lo iniletter.lo hialetter.lo sendhpd.lo sendhkd.lo \ upload.lo utils.lo mkpinlist.lo resetuser.lo getcert.lo \ listusers.lo listaccounts.lo setebicsversion.lo libebicscontrol_la_OBJECTS = $(am_libebicscontrol_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/addaccount.Plo \ ./$(DEPDIR)/addsubuserflags.Plo ./$(DEPDIR)/adduser.Plo \ ./$(DEPDIR)/createkeys.Plo ./$(DEPDIR)/createtempkey.Plo \ ./$(DEPDIR)/download.Plo ./$(DEPDIR)/getaccounts.Plo \ ./$(DEPDIR)/getcert.Plo ./$(DEPDIR)/getkeys.Plo \ ./$(DEPDIR)/hialetter.Plo ./$(DEPDIR)/iniletter.Plo \ ./$(DEPDIR)/listaccounts.Plo ./$(DEPDIR)/listusers.Plo \ ./$(DEPDIR)/main.Plo ./$(DEPDIR)/mkpinlist.Plo \ ./$(DEPDIR)/resetuser.Plo ./$(DEPDIR)/sendhkd.Plo \ ./$(DEPDIR)/sendhpd.Plo ./$(DEPDIR)/sendkeys.Plo \ ./$(DEPDIR)/sendsignkey.Plo ./$(DEPDIR)/setebicsversion.Plo \ ./$(DEPDIR)/upload.Plo ./$(DEPDIR)/utils.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libebicscontrol_la_SOURCES) DIST_SOURCES = $(libebicscontrol_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac HEADERS = $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADD_ACLOCAL_FLAGS = @ADD_ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AQBANKING_CLI_VERSION_STRING = @AQBANKING_CLI_VERSION_STRING@ AQBANKING_FINTS_VERSION_STRING = @AQBANKING_FINTS_VERSION_STRING@ AQBANKING_SO_AGE = @AQBANKING_SO_AGE@ AQBANKING_SO_CURRENT = @AQBANKING_SO_CURRENT@ AQBANKING_SO_EFFECTIVE = @AQBANKING_SO_EFFECTIVE@ AQBANKING_SO_REVISION = @AQBANKING_SO_REVISION@ AQBANKING_VERSION_BUILD = @AQBANKING_VERSION_BUILD@ AQBANKING_VERSION_FULL_STRING = @AQBANKING_VERSION_FULL_STRING@ AQBANKING_VERSION_MAJOR = @AQBANKING_VERSION_MAJOR@ AQBANKING_VERSION_MINOR = @AQBANKING_VERSION_MINOR@ AQBANKING_VERSION_PATCHLEVEL = @AQBANKING_VERSION_PATCHLEVEL@ AQBANKING_VERSION_RELEASE_STRING = @AQBANKING_VERSION_RELEASE_STRING@ AQBANKING_VERSION_STRING = @AQBANKING_VERSION_STRING@ AQBANKING_VERSION_TAG = @AQBANKING_VERSION_TAG@ AQEBICS_CFLAGS = @AQEBICS_CFLAGS@ AQEBICS_LIBS = @AQEBICS_LIBS@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATETIME = @DATETIME@ DEFS = @DEFS@ -DLOCALEDIR=\"$(localedir)\" DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_EXCLUDE_PATTERNS = @DOXYGEN_EXCLUDE_PATTERNS@ DOXYGEN_FILE_PATTERNS = @DOXYGEN_FILE_PATTERNS@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENGUI_GTK2_CFLAGS = @GWENGUI_GTK2_CFLAGS@ GWENGUI_GTK2_LIBS = @GWENGUI_GTK2_LIBS@ GWENHYWFAR_MINIMUM_VERSION = @GWENHYWFAR_MINIMUM_VERSION@ HAVE_GWENGUI_GTK2 = @HAVE_GWENGUI_GTK2@ HAVE_I18N = @HAVE_I18N@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIBXSLT_CFLAGS = @LIBXSLT_CFLAGS@ LIBXSLT_LIBS = @LIBXSLT_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_SUPPORTS_QT = @MSGFMT_SUPPORTS_QT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ TUTORIALS = @TUTORIALS@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XMLMERGE = @XMLMERGE@ XMLSEC_CFLAGS = @XMLSEC_CFLAGS@ XMLSEC_LIBS = @XMLSEC_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ aqbanking_backends = @aqbanking_backends@ aqbanking_cfg_searchdir = @aqbanking_cfg_searchdir@ aqbanking_data_searchdir = @aqbanking_data_searchdir@ aqbanking_headerdir = @aqbanking_headerdir@ aqbanking_headerdir_am = @aqbanking_headerdir_am@ aqbanking_includes = @aqbanking_includes@ aqbanking_internal_libs = @aqbanking_internal_libs@ aqbanking_ldflags = @aqbanking_ldflags@ aqbanking_libs = @aqbanking_libs@ aqbanking_locale_searchdir = @aqbanking_locale_searchdir@ aqbanking_modules = @aqbanking_modules@ aqbanking_pkgdatadir = @aqbanking_pkgdatadir@ aqbanking_plugin_searchdir = @aqbanking_plugin_searchdir@ aqbanking_plugindir = @aqbanking_plugindir@ aqbanking_plugins_backends_dirs = @aqbanking_plugins_backends_dirs@ aqbanking_plugins_backends_libs = @aqbanking_plugins_backends_libs@ aqbanking_plugins_bankinfo_dirs = @aqbanking_plugins_bankinfo_dirs@ aqbanking_plugins_bankinfo_libs = @aqbanking_plugins_bankinfo_libs@ aqbanking_plugins_imexporters_dirs = @aqbanking_plugins_imexporters_dirs@ aqbanking_plugins_imexporters_libs = @aqbanking_plugins_imexporters_libs@ aqbanking_plugins_parsers_dirs = @aqbanking_plugins_parsers_dirs@ aqbanking_symlinkdir = @aqbanking_symlinkdir@ aqbanking_sys_is_windows = @aqbanking_sys_is_windows@ aqbankingpp_modules = @aqbankingpp_modules@ aqebics_datadir = @aqebics_datadir@ aqebics_includes = @aqebics_includes@ aqebics_internal_libs = @aqebics_internal_libs@ aqebics_ldflags = @aqebics_ldflags@ aqebics_libs = @aqebics_libs@ aqfints_datadir = @aqfints_datadir@ aqhbci_datadir = @aqhbci_datadir@ aqhbci_includes = @aqhbci_includes@ aqhbci_internal_libs = @aqhbci_internal_libs@ aqhbci_ldflags = @aqhbci_ldflags@ aqhbci_libs = @aqhbci_libs@ aqofxconnect_includes = @aqofxconnect_includes@ aqofxconnect_internal_libs = @aqofxconnect_internal_libs@ aqofxconnect_libs = @aqofxconnect_libs@ aqpaypal_includes = @aqpaypal_includes@ aqpaypal_internal_libs = @aqpaypal_internal_libs@ aqpaypal_libs = @aqpaypal_libs@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gmp_libs = @gmp_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_dir = @gwenhywfar_dir@ gwenhywfar_has_crypt = @gwenhywfar_has_crypt@ gwenhywfar_headers = @gwenhywfar_headers@ gwenhywfar_includes = @gwenhywfar_includes@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_plugins = @gwenhywfar_plugins@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ #EXTRA_DIST= localedir = $(datadir)/locale localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ typemaker2_exe = @typemaker2_exe@ visibility_cflags = @visibility_cflags@ with_aqebics = @with_aqebics@ with_aqhbci = @with_aqhbci@ AM_CPPFLAGS = -I$(top_srcdir)/src/libs -I$(top_builddir)/src/libs $(gwenhywfar_includes) -I$(srcdir)/../.. $(AQEBICS_CFLAGS) AM_CFLAGS = -DBUILDING_AQBANKING @visibility_cflags@ noinst_LTLIBRARIES = libebicscontrol.la noinst_HEADERS = globals.h control_l.h libebicscontrol_la_SOURCES = main.c \ addaccount.c \ addsubuserflags.c \ adduser.c \ createkeys.c \ createtempkey.c \ download.c \ sendkeys.c \ sendsignkey.c \ getaccounts.c \ getkeys.c \ iniletter.c \ hialetter.c \ sendhpd.c \ sendhkd.c \ upload.c \ utils.c \ mkpinlist.c \ resetuser.c \ getcert.c \ listusers.c \ listaccounts.c \ setebicsversion.c all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libs/plugins/backends/aqebics/control/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libs/plugins/backends/aqebics/control/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libebicscontrol.la: $(libebicscontrol_la_OBJECTS) $(libebicscontrol_la_DEPENDENCIES) $(EXTRA_libebicscontrol_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libebicscontrol_la_OBJECTS) $(libebicscontrol_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/addaccount.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/addsubuserflags.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/adduser.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/createkeys.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/createtempkey.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/download.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getaccounts.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getcert.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getkeys.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hialetter.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/iniletter.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/listaccounts.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/listusers.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mkpinlist.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/resetuser.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sendhkd.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sendhpd.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sendkeys.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sendsignkey.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/setebicsversion.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/upload.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/utils.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/addaccount.Plo -rm -f ./$(DEPDIR)/addsubuserflags.Plo -rm -f ./$(DEPDIR)/adduser.Plo -rm -f ./$(DEPDIR)/createkeys.Plo -rm -f ./$(DEPDIR)/createtempkey.Plo -rm -f ./$(DEPDIR)/download.Plo -rm -f ./$(DEPDIR)/getaccounts.Plo -rm -f ./$(DEPDIR)/getcert.Plo -rm -f ./$(DEPDIR)/getkeys.Plo -rm -f ./$(DEPDIR)/hialetter.Plo -rm -f ./$(DEPDIR)/iniletter.Plo -rm -f ./$(DEPDIR)/listaccounts.Plo -rm -f ./$(DEPDIR)/listusers.Plo -rm -f ./$(DEPDIR)/main.Plo -rm -f ./$(DEPDIR)/mkpinlist.Plo -rm -f ./$(DEPDIR)/resetuser.Plo -rm -f ./$(DEPDIR)/sendhkd.Plo -rm -f ./$(DEPDIR)/sendhpd.Plo -rm -f ./$(DEPDIR)/sendkeys.Plo -rm -f ./$(DEPDIR)/sendsignkey.Plo -rm -f ./$(DEPDIR)/setebicsversion.Plo -rm -f ./$(DEPDIR)/upload.Plo -rm -f ./$(DEPDIR)/utils.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/addaccount.Plo -rm -f ./$(DEPDIR)/addsubuserflags.Plo -rm -f ./$(DEPDIR)/adduser.Plo -rm -f ./$(DEPDIR)/createkeys.Plo -rm -f ./$(DEPDIR)/createtempkey.Plo -rm -f ./$(DEPDIR)/download.Plo -rm -f ./$(DEPDIR)/getaccounts.Plo -rm -f ./$(DEPDIR)/getcert.Plo -rm -f ./$(DEPDIR)/getkeys.Plo -rm -f ./$(DEPDIR)/hialetter.Plo -rm -f ./$(DEPDIR)/iniletter.Plo -rm -f ./$(DEPDIR)/listaccounts.Plo -rm -f ./$(DEPDIR)/listusers.Plo -rm -f ./$(DEPDIR)/main.Plo -rm -f ./$(DEPDIR)/mkpinlist.Plo -rm -f ./$(DEPDIR)/resetuser.Plo -rm -f ./$(DEPDIR)/sendhkd.Plo -rm -f ./$(DEPDIR)/sendhpd.Plo -rm -f ./$(DEPDIR)/sendkeys.Plo -rm -f ./$(DEPDIR)/sendsignkey.Plo -rm -f ./$(DEPDIR)/setebicsversion.Plo -rm -f ./$(DEPDIR)/upload.Plo -rm -f ./$(DEPDIR)/utils.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-generic clean-libtool clean-noinstLTLIBRARIES \ cscopelist-am ctags ctags-am distclean distclean-compile \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am .PRECIOUS: Makefile sources: for d in $(SUBDIRS); do \ $(MAKE) -C $$d sources; \ done for f in $(libebicscontrol_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done cppcheck: for f in $(libebicscontrol_la_SOURCES); do \ cppcheck --force $$f ; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: aqbanking-6.6.1/src/libs/plugins/backends/aqebics/control/hialetter.c0000664000175000017500000000652714043610744022606 00000000000000/*************************************************************************** begin : Tue May 03 2005 copyright : (C) 2005 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals.h" #include "aqebics/client/user.h" #include "aqebics/client/provider.h" #include int hiaLetter(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; uint32_t uid; AB_USER *u=NULL; int rv; int showBankKey; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Int, /* type */ "userId", /* name */ 0, /* minnum */ 1, /* maxnum */ "u", /* short option */ "user", /* long option */ "Specify the unique user id", /* short description */ "Specify the unique user id" /* long description */ }, { 0, GWEN_ArgsType_Int, "bankKey", 0, 1, 0, "bankkey", "Show letter for the bank key", "Show letter for the bank key" }, { 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(stdout, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } showBankKey=GWEN_DB_GetIntValue(db, "bankkey", 0, 0); /* doit */ uid=(uint32_t) GWEN_DB_GetIntValue(db, "userId", 0, 0); if (uid==0) { fprintf(stderr, "ERROR: Invalid or missing unique user id\n"); return 1; } rv=AB_Provider_GetUser(pro, uid, 1, 1, &u); if (rv<0) { fprintf(stderr, "ERROR: User with id %lu not found\n", (unsigned long int) uid); return 2; } else { GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 2048, 0, 1); rv=EBC_Provider_GetHiaLetterTxt(pro, u, showBankKey, tbuf, 0); if (rv) { DBG_ERROR(0, "Error creating ini letter (%d)", rv); return 3; } fprintf(stdout, "%s", GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqebics/control/adduser.c0000664000175000017500000003524614043610744022254 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2004-2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals.h" #include "aqebics/client/user.h" #include #include #include #include static int getBankUrl(AB_BANKING *ab, const char *bankId, GWEN_BUFFER *bufServer) { AB_BANKINFO *bi; bi=AB_Banking_GetBankInfo(ab, "de", 0, bankId); if (bi) { AB_BANKINFO_SERVICE_LIST *l; AB_BANKINFO_SERVICE *sv; l=AB_BankInfo_GetServices(bi); assert(l); sv=AB_BankInfoService_List_First(l); while (sv) { const char *st; st=AB_BankInfoService_GetType(sv); if (st && *st && strcasecmp(st, "ebics")==0) { const char *addr; addr=AB_BankInfoService_GetAddress(sv); if (addr && *addr) { GWEN_Buffer_Reset(bufServer); GWEN_Buffer_AppendString(bufServer, addr); return 0; } } sv=AB_BankInfoService_List_Next(sv); } AB_BankInfo_free(bi); } /* if bank info */ return -1; } int addUser(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; int rv; GWEN_BUFFER *nameBuffer=NULL; const char *tokenName; const char *tokenType; const char *bankId; const char *userId; const char *customerId; const char *userName; const char *hostName; const char *server; const char *ebicsVersion; int importing; uint32_t cid; 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 */ "userId", /* name */ 0, /* minnum */ 1, /* maxnum */ "u", /* short option */ "user", /* long option */ "Specify the user id (Benutzerkennung)", /* short description */ "Specify the user id (Benutzerkennung)" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "customerId", /* name */ 0, /* minnum */ 1, /* maxnum */ "c", /* short option */ "customer", /* long option */ "Specify the customer id (Kundennummer)", /* short description */ "Specify the customer id (Kundennummer)" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "tokenType", /* name */ 1, /* minnum */ 1, /* maxnum */ "t", /* short option */ "tokentype", /* long option */ "Specify the crypt token type", /* short description */ "Specify the crypt token type" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "tokenName", /* name */ 0, /* minnum */ 1, /* maxnum */ "n", /* short option */ "tokenname", /* long option */ "Specify the crypt token name", /* short description */ "Specify the crypt token name" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "serverAddr", /* name */ 0, /* minnum */ 1, /* maxnum */ "s", /* short option */ "server", /* long option */ "Specify the server URL", /* short description */ "Specify the server URL" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "hostName", /* name */ 1, /* minnum */ 1, /* maxnum */ "H", /* short option */ "hostname", /* long option */ "Specify the EBICS hostname", /* short description */ "Specify the EBICS hostname" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "userName", /* name */ 1, /* minnum */ 1, /* maxnum */ "N", /* short option */ "username", /* long option */ "Specify the realname of the user", /* short description */ "Specify the realname of the user" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "ebicsVersion", /* name */ 0, /* minnum */ 1, /* maxnum */ "E", /* short option */ "ebicsversion", /* long option */ "Specify the EBICS version to use (e.g. H002)", /* short description */ "Specify the EBICS version to use (e.g. H002)" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Int, /* type */ "context", /* name */ 0, /* minnum */ 1, /* maxnum */ 0, /* short option */ "context", /* long option */ "Select a context on the medium", /* short description */ "Select a context on the medium" /* long description */ }, { 0, /* flags */ GWEN_ArgsType_Int, /* type */ "import", /* name */ 0, /* minnum */ 1, /* maxnum */ 0, /* short option */ "import", /* long option */ "Import a user which has already been in use (e.g. with previous versions)", "Import a user which has already been in use (e.g. with previous versions)" }, { 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(stdout, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } tokenType=GWEN_DB_GetCharValue(db, "tokenType", 0, 0); tokenName=GWEN_DB_GetCharValue(db, "tokenName", 0, 0); bankId=GWEN_DB_GetCharValue(db, "bankId", 0, 0); userId=GWEN_DB_GetCharValue(db, "userId", 0, 0); customerId=GWEN_DB_GetCharValue(db, "customerId", 0, 0); hostName=GWEN_DB_GetCharValue(db, "hostName", 0, 0); userName=GWEN_DB_GetCharValue(db, "userName", 0, 0); server=GWEN_DB_GetCharValue(db, "serverAddr", 0, 0); cid=GWEN_DB_GetIntValue(db, "context", 0, 0); importing=GWEN_DB_GetIntValue(db, "import", 0, 0); ebicsVersion=GWEN_DB_GetCharValue(db, "ebicsVersion", 0, "H003"); if (1) { const char *lbankId; const char *luserId; const char *lcustomerId; const char *lserverAddr; GWEN_URL *url; GWEN_CRYPT_TOKEN_CONTEXT *ctx=NULL; AB_USER *user; if (1) { GWEN_PLUGIN_MANAGER *pm; GWEN_PLUGIN *pl; GWEN_CRYPT_TOKEN *ct; const GWEN_CRYPT_TOKEN_CONTEXT *cctx; if (cid==0) { DBG_ERROR(0, "No context given."); return 1; } /* get crypt token */ pm=GWEN_PluginManager_FindPluginManager("ct"); if (pm==0) { DBG_ERROR(0, "Plugin manager not found"); return 3; } pl=GWEN_PluginManager_GetPlugin(pm, tokenType); if (pl==0) { DBG_ERROR(0, "Plugin not found"); return 3; } DBG_INFO(0, "Plugin found"); ct=GWEN_Crypt_Token_Plugin_CreateToken(pl, tokenName); if (ct==0) { DBG_ERROR(0, "Could not create crypt token"); return 3; } /* open crypt token */ rv=GWEN_Crypt_Token_Open(ct, 0, 0); if (rv) { DBG_ERROR(0, "Could not open token (%d)", rv); return 3; } /* get real token name */ nameBuffer=GWEN_Buffer_new(0, 64, 0, 1); GWEN_Buffer_AppendString(nameBuffer, GWEN_Crypt_Token_GetTokenName(ct)); tokenName=GWEN_Buffer_GetStart(nameBuffer); cctx=GWEN_Crypt_Token_GetContext(ct, cid, 0); if (cctx==NULL) { DBG_ERROR(0, "Context %02x not found", cid); return 3; } ctx=GWEN_Crypt_Token_Context_dup(cctx); lbankId=bankId?bankId:GWEN_Crypt_Token_Context_GetServiceId(ctx); luserId=userId?userId:GWEN_Crypt_Token_Context_GetUserId(ctx); lcustomerId=customerId?customerId:luserId; lserverAddr=server?server:GWEN_Crypt_Token_Context_GetAddress(ctx); rv=GWEN_Crypt_Token_Close(ct, 0, 0); if (rv) { DBG_ERROR(0, "Could not close token (%d)", rv); return 3; } GWEN_Crypt_Token_free(ct); } if (!lbankId || !*lbankId) { DBG_ERROR(0, "No bank id stored and none given"); return 3; } if (!luserId || !*luserId) { DBG_ERROR(0, "No user id (Benutzerkennung) stored and none given"); return 3; } /* TODO: Check for existing users to avoid duplicates */ #if 0 user=AB_Banking_FindUser(ab, EBC_PROVIDER_NAME, "de", lbankId, luserId, lcustomerId); if (user) { DBG_ERROR(0, "User %s already exists", luserId); return 3; } #endif user=AB_Provider_CreateUserObject(pro); assert(user); AB_User_SetCountry(user, "de"); AB_User_SetBankCode(user, lbankId); AB_User_SetUserId(user, luserId); AB_User_SetCustomerId(user, lcustomerId); EBC_User_SetPeerId(user, hostName); AB_User_SetUserName(user, userName); EBC_User_SetTokenType(user, tokenType); EBC_User_SetTokenName(user, tokenName); EBC_User_SetTokenContextId(user, cid); if (ebicsVersion) { if (strcasecmp(ebicsVersion, "H002")==0) { EBC_User_SetProtoVersion(user, "H002"); EBC_User_SetSignVersion(user, "A004"); EBC_User_SetAuthVersion(user, "X001"); EBC_User_SetCryptVersion(user, "E001"); } else if (strcasecmp(ebicsVersion, "H003")==0) { EBC_User_SetProtoVersion(user, "H003"); EBC_User_SetSignVersion(user, "A005"); EBC_User_SetAuthVersion(user, "X002"); EBC_User_SetCryptVersion(user, "E002"); } else if (strcasecmp(ebicsVersion, "H004")==0) { EBC_User_SetProtoVersion(user, "H004"); EBC_User_SetSignVersion(user, "A005"); EBC_User_SetAuthVersion(user, "X002"); EBC_User_SetCryptVersion(user, "E002"); } else { fprintf(stderr, "%s", I18N("Invalid protocol version.\n" "Possible versions are H002, H003 and H004.\n")); return 3; } } /* try to get server address from database if still unknown */ if (!lserverAddr || *lserverAddr==0) { GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 256, 0, 1); if (getBankUrl(AB_Provider_GetBanking(pro), lbankId, tbuf)) { DBG_INFO(0, "Could not find server address for \"%s\"", lbankId); } if (GWEN_Buffer_GetUsedBytes(tbuf)==0) { DBG_ERROR(0, "No address given and none available in internal db"); return 3; } url=GWEN_Url_fromString(GWEN_Buffer_GetStart(tbuf)); if (url==NULL) { DBG_ERROR(0, "Bad URL \"%s\" in internal db", GWEN_Buffer_GetStart(tbuf)); return 3; } GWEN_Buffer_free(tbuf); } else { /* set address */ url=GWEN_Url_fromString(lserverAddr); if (url==NULL) { DBG_ERROR(0, "Bad URL \"%s\"", lserverAddr); return 3; } } GWEN_Url_SetProtocol(url, "https"); if (GWEN_Url_GetPort(url)==0) GWEN_Url_SetPort(url, 443); /* set url */ if (1) { GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_Url_toString(url, tbuf); if (rv<0) { DBG_ERROR(0, "Internal error storing URL"); return 3; } EBC_User_SetServerUrl(user, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } GWEN_Url_free(url); if (importing) { EBC_User_AddFlags(user, EBC_USER_FLAGS_INI | EBC_USER_FLAGS_HIA); EBC_User_SetStatus(user, EBC_UserStatus_Enabled); } rv=AB_Provider_AddUser(pro, user); if (rv<0) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Coud not add new user (%d)", rv); AB_User_free(user); return 4; } AB_User_free(user); /* context no longer needed */ GWEN_Crypt_Token_Context_free(ctx); } return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqebics/control/sendhkd.c0000664000175000017500000000745014043610745022242 00000000000000/*************************************************************************** begin : Tue May 03 2005 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals.h" #include int sendHKD(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; uint32_t uid; AB_USER *u=NULL; int rv; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Int, /* type */ "userId", /* name */ 0, /* minnum */ 1, /* maxnum */ "u", /* short option */ "user", /* long option */ "Specify the unique user id", /* short description */ "Specify the unique user id" /* 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(stdout, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } /* doit */ uid=(uint32_t) GWEN_DB_GetIntValue(db, "userId", 0, 0); if (uid==0) { fprintf(stderr, "ERROR: Invalid or missing unique user id\n"); return 1; } rv=AB_Provider_GetUser(pro, uid, 1, 1, &u); if (rv<0) { fprintf(stderr, "ERROR: User with id %lu not found\n", (unsigned long int) uid); return 2; } else { if ((EBC_User_GetStatus(u)==EBC_UserStatus_Enabled) && (EBC_User_GetFlags(u) & EBC_USER_FLAGS_CLIENT_DATA_DOWNLOAD_SPP)) { uint32_t guiid; guiid=GWEN_Gui_ProgressStart(GWEN_GUI_PROGRESS_ALLOW_SUBLEVELS | GWEN_GUI_PROGRESS_SHOW_PROGRESS | GWEN_GUI_PROGRESS_SHOW_LOG | GWEN_GUI_PROGRESS_ALWAYS_SHOW_LOG | GWEN_GUI_PROGRESS_KEEP_OPEN | GWEN_GUI_PROGRESS_SHOW_ABORT, I18N("Executing Request"), I18N("Now the request is send to the credit institute."), GWEN_GUI_PROGRESS_NONE, 0); rv=EBC_Provider_Send_HKD(pro, u, 1); GWEN_Gui_ProgressEnd(guiid); if (rv) { DBG_ERROR(0, "Error sending HKD request (%d)", rv); return 4; } else { fprintf(stderr, "HKD request sent.\n"); } } } fprintf(stderr, "HPD request ok.\n"); return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqebics/control/main.c0000664000175000017500000001137414043610745021546 00000000000000/*************************************************************************** begin : Tue May 03 2005 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include #include #include #include #include #include "globals.h" int EBC_Control(AB_PROVIDER *pro, int argc, char **argv) { GWEN_DB_NODE *db; const char *cmd; int rv; db=GWEN_DB_Group_new("arguments"); if (argc<1) { GWEN_BUFFER *ubuf; ubuf=GWEN_Buffer_new(0, 1024, 0, 1); GWEN_Buffer_AppendString(ubuf, I18N("Usage: ")); GWEN_Buffer_AppendString(ubuf, argv[0]); GWEN_Buffer_AppendString(ubuf, I18N(" COMMAND [LOCAL OPTIONS]\n")); GWEN_Buffer_AppendString(ubuf, I18N("\nCommands:\n\n")); GWEN_Buffer_AppendString(ubuf, I18N(" mkpinlist:\n" " This command creates an empty PIN " "file\n\n")); GWEN_Buffer_AppendString(ubuf, I18N(" adduser:\n" " Adds a user " "(-> setup EBICS for a bank)\n\n")); GWEN_Buffer_AppendString(ubuf, I18N(" getkeys:\n" " Requests the server's key\n\n")); GWEN_Buffer_AppendString(ubuf, I18N(" createkeys:\n" " Create user keys.\n\n")); GWEN_Buffer_AppendString(ubuf, I18N(" resetkeys:\n" " Destroy keys (use with care!!)\n\n")); GWEN_Buffer_AppendString(ubuf, I18N(" sendkeys:\n" " Send the user keys to the bank.\n\n")); GWEN_Buffer_AppendString(ubuf, I18N(" getaccounts:\n" " Requests account list for a " "user\n\n")); fprintf(stdout, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } cmd=argv[0]; if (!(cmd && *cmd)) { fprintf(stderr, "ERROR: Command needed.\n"); GWEN_DB_Group_free(db); return 1; } if (strcasecmp(cmd, "adduser")==0) { rv=addUser(pro, db, argc, argv); } else if (strcasecmp(cmd, "addaccount")==0) { rv=addAccount(pro, db, argc, argv); } else if (strcasecmp(cmd, "createkeys")==0) { rv=createKeys(pro, db, argc, argv); } else if (strcasecmp(cmd, "createtempkey")==0) { rv=createTempKey(pro, db, argc, argv); } else if (strcasecmp(cmd, "sendkeys")==0) { rv=sendKeys(pro, db, argc, argv); } else if (strcasecmp(cmd, "sendsignkey")==0) { rv=sendSignKey(pro, db, argc, argv); } else if (strcasecmp(cmd, "getkeys")==0) { rv=getKeys(pro, db, argc, argv); } else if (strcasecmp(cmd, "getaccounts")==0) { rv=getAccounts(pro, db, argc, argv); } else if (strcasecmp(cmd, "iniletter")==0) { rv=iniLetter(pro, db, argc, argv); } else if (strcasecmp(cmd, "hialetter")==0) { rv=hiaLetter(pro, db, argc, argv); } else if (strcasecmp(cmd, "hpd")==0) { rv=sendHPD(pro, db, argc, argv); } else if (strcasecmp(cmd, "hkd")==0) { rv=sendHKD(pro, db, argc, argv); } else if (strcasecmp(cmd, "download")==0) { rv=download(pro, db, argc, argv); } else if (strcasecmp(cmd, "upload")==0) { rv=upload(pro, db, argc, argv); } else if (strcasecmp(cmd, "mkpinlist")==0) { rv=mkPinList(pro, db, argc, argv); } else if (strcasecmp(cmd, "resetuser")==0) { rv=resetUser(pro, db, argc, argv); } else if (strcasecmp(cmd, "adduserflags")==0) { rv=addUserFlags(pro, db, argc, argv); } else if (strcasecmp(cmd, "subuserflags")==0) { rv=subUserFlags(pro, db, argc, argv); } else if (strcasecmp(cmd, "getcert")==0) { rv=getCert(pro, db, argc, argv); } else if (strcasecmp(cmd, "listusers")==0) { rv=listUsers(pro, db, argc, argv); } else if (strcasecmp(cmd, "listaccounts")==0) { rv=listAccounts(pro, db, argc, argv); } else if (strcasecmp(cmd, "setEbicsVersion")==0) { rv=setEbicsVersion(pro, db, argc, argv); } else { fprintf(stderr, "ERROR: Unknown command \"%s\".\n", cmd); rv=1; } return rv; } aqbanking-6.6.1/src/libs/plugins/backends/aqebics/control/globals.h0000664000175000017500000000715414043610744022252 00000000000000/*************************************************************************** begin : Tue May 03 2005 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef CBANKING_GLOBALS_H #define CBANKING_GLOBALS_H #include "aqebics/client/provider_l.h" #include "aqebics/client/provider.h" #include "aqebics/client/user.h" #include "aqbanking/banking_be.h" #include "aqbanking/i18n_l.h" #include #include #include #include #include #include #include int readFile(const char *fname, GWEN_BUFFER *dbuf); int writeFile(FILE *f, const char *p, int len); int EBC_Control(AB_PROVIDER *pro, int argc, char **argv); int addAccount(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv); int addUser(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv); int createKeys(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv); int createTempKey(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv); int sendKeys(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv); int sendSignKey(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv); int getKeys(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv); int iniLetter(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv); int hiaLetter(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv); int sendHPD(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv); int sendHKD(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv); int download(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv); int upload(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv); int getAccounts(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv); int mkPinList(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv); int resetUser(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv); int addUserFlags(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv); int subUserFlags(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv); int getCert(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv); int listUsers(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv); int listAccounts(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv); int setEbicsVersion(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqebics/control/getkeys.c0000664000175000017500000000706314043610744022274 00000000000000/*************************************************************************** begin : Tue May 03 2005 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals.h" #include int getKeys(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; uint32_t uid; AB_USER *u=NULL; int rv; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Int, /* type */ "userId", /* name */ 0, /* minnum */ 1, /* maxnum */ "u", /* short option */ "user", /* long option */ "Specify the unique user id", /* short description */ "Specify the unique user id" /* 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(stdout, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } /* doit */ uid=(uint32_t) GWEN_DB_GetIntValue(db, "userId", 0, 0); if (uid==0) { fprintf(stderr, "ERROR: Invalid or missing unique user id\n"); return 1; } rv=AB_Provider_GetUser(pro, uid, 1, 1, &u); if (rv<0) { fprintf(stderr, "ERROR: User with id %lu not found\n", (unsigned long int) uid); return 2; } else { uint32_t guiid; guiid=GWEN_Gui_ProgressStart(GWEN_GUI_PROGRESS_ALLOW_SUBLEVELS | GWEN_GUI_PROGRESS_SHOW_PROGRESS | GWEN_GUI_PROGRESS_SHOW_LOG | GWEN_GUI_PROGRESS_ALWAYS_SHOW_LOG | GWEN_GUI_PROGRESS_KEEP_OPEN | GWEN_GUI_PROGRESS_SHOW_ABORT, I18N("Executing Request"), I18N("Now the request is send to the credit institute."), GWEN_GUI_PROGRESS_NONE, 0); rv=EBC_Provider_Send_HPB(pro, u, 1); GWEN_Gui_ProgressEnd(guiid); if (rv) { DBG_ERROR(0, "Error sending key request (%d)", rv); return 4; } } fprintf(stderr, "Key request ok.\n"); return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqebics/control/createtempkey.c0000664000175000017500000000762514043610744023467 00000000000000/*************************************************************************** begin : Thu Jun 24 2010 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals.h" #include "aqebics/client/user.h" #include "aqebics/client/provider.h" #include int createTempKey(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; uint32_t uid; AB_USER *u=NULL; int rv; int signKeySize; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Int, /* type */ "userId", /* name */ 0, /* minnum */ 1, /* maxnum */ "u", /* short option */ "user", /* long option */ "Specify the unique user id", /* short description */ "Specify the unique user id" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, GWEN_ArgsType_Int, "signKeySize", 0, 1, "S", "signkeysize", "Specify the keysize in bytes", "Specify the keysize in bytes" }, { 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(stdout, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } signKeySize=GWEN_DB_GetIntValue(db, "signKeySize", 0, 256); /* doit */ uid=(uint32_t) GWEN_DB_GetIntValue(db, "userId", 0, 0); if (uid==0) { fprintf(stderr, "ERROR: Invalid or missing unique user id\n"); return 1; } rv=AB_Provider_GetUser(pro, uid, 1, 1, &u); if (rv<0) { fprintf(stderr, "ERROR: User with id %lu not found\n", (unsigned long int) uid); return 2; } else { uint32_t guiid; guiid=GWEN_Gui_ProgressStart(GWEN_GUI_PROGRESS_ALLOW_SUBLEVELS | GWEN_GUI_PROGRESS_SHOW_PROGRESS | GWEN_GUI_PROGRESS_SHOW_LOG | GWEN_GUI_PROGRESS_ALWAYS_SHOW_LOG | GWEN_GUI_PROGRESS_KEEP_OPEN | GWEN_GUI_PROGRESS_SHOW_ABORT, I18N("Creating key"), I18N("Now the temporary sign key is created."), GWEN_GUI_PROGRESS_NONE, 0); rv=EBC_Provider_CreateTempKey(pro, u, signKeySize, 0); GWEN_Gui_ProgressEnd(guiid); if (rv) { DBG_ERROR(0, "Error creating keys (%d)", rv); return 3; } } return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqebics/control/addsubuserflags.c0000664000175000017500000001036614043610744023777 00000000000000/*************************************************************************** begin : Sat Oct 18 2008 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals.h" #include "aqebics/client/user.h" #include int addSubUserFlags(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv, int doAdd) { GWEN_DB_NODE *db; uint32_t uid; AB_USER *u=NULL; uint32_t flags; int rv; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Int, /* type */ "userId", /* name */ 0, /* minnum */ 1, /* maxnum */ "u", /* short option */ "user", /* long option */ "Specify the unique user id", /* short description */ "Specify the unique user id" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "flags", /* name */ 1, /* minnum */ 99, /* maxnum */ "f", /* short option */ "flags", /* long option */ "Specify the user flags", /* short description */ "Specify the user flags" /* 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; } uid=(uint32_t) GWEN_DB_GetIntValue(db, "userId", 0, 0); if (uid==0) { fprintf(stderr, "ERROR: Invalid or missing unique user id\n"); return 1; } flags=EBC_User_Flags_fromDb(db, "flags"); rv=AB_Provider_GetUser(pro, uid, 1, 0, &u); /* don't lock to allow for AH_Provider_EndExclUseUser */ if (rv<0) { fprintf(stderr, "ERROR: User with id %lu not found\n", (unsigned long int) uid); return 2; } else { /* modify */ if (doAdd) { fprintf(stderr, "Adding flags: %08x\n", flags); EBC_User_AddFlags(u, flags); } else { fprintf(stderr, "Removing flags: %08x\n", flags); EBC_User_SubFlags(u, flags); } /* unlock user */ rv=AB_Provider_EndExclUseUser(pro, u, 0); if (rv<0) { fprintf(stderr, "ERROR: Could not unlock user (%d)\n", rv); AB_Provider_EndExclUseUser(pro, u, 1); /* abort */ AB_User_free(u); return 4; } } AB_User_free(u); return 0; } int addUserFlags(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv) { return addSubUserFlags(pro, dbArgs, argc, argv, 1); } int subUserFlags(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv) { return addSubUserFlags(pro, dbArgs, argc, argv, 0); } aqbanking-6.6.1/src/libs/plugins/backends/aqebics/control/listaccounts.c0000664000175000017500000000605114043610745023331 00000000000000/*************************************************************************** begin : Fri Sep 18 2009 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals.h" #include int listAccounts(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; int rv, verbose; AB_ACCOUNT_LIST *al; AB_ACCOUNT *a; int i=0; const GWEN_ARGS args[]= { { 0, /* flags */ GWEN_ArgsType_Int, /* type */ "verbose", /* name */ 0, /* minnum */ 1, /* maxnum */ "v", /* short option */ "verbose", /* long option */ "Show list in verbose form (with more columns)", /* short description */ 0 }, { 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; } verbose = GWEN_DB_VariableExists(db, "verbose"); al=AB_Account_List_new(); rv=AB_Provider_ReadAccounts(pro, al); if (rv<0) { DBG_ERROR_ERR(0, rv); AB_Account_List_free(al); return 3; } a=AB_Account_List_First(al); while (a) { fprintf(stdout, "Account %d: Bank: %s Account Number: %s", i++, AB_Account_GetBankCode(a), AB_Account_GetAccountNumber(a)); if (verbose) { const char *subAccountId = AB_Account_GetSubAccountId(a); fprintf(stdout, " SubAccountId: %s LocalUniqueId: %d", subAccountId ? subAccountId : "(none)", AB_Account_GetUniqueId(a)); } fprintf(stdout, "\n"); a=AB_Account_List_Next(a); } AB_Account_List_free(al); return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqebics/control/getcert.c0000664000175000017500000000707414043610744022260 00000000000000/*************************************************************************** begin : Fri Sep 18 2009 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals.h" #include int getCert(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; uint32_t uid; AB_USER *u=NULL; int rv; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Int, /* type */ "userId", /* name */ 0, /* minnum */ 1, /* maxnum */ "u", /* short option */ "user", /* long option */ "Specify the unique user id", /* short description */ "Specify the unique user id" /* 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(stdout, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } /* doit */ uid=(uint32_t) GWEN_DB_GetIntValue(db, "userId", 0, 0); if (uid==0) { fprintf(stderr, "ERROR: Invalid or missing unique user id\n"); return 1; } rv=AB_Provider_GetUser(pro, uid, 1, 1, &u); if (rv<0) { fprintf(stderr, "ERROR: User with id %lu not found\n", (unsigned long int) uid); return 2; } else { uint32_t guiid; guiid=GWEN_Gui_ProgressStart(GWEN_GUI_PROGRESS_ALLOW_SUBLEVELS | GWEN_GUI_PROGRESS_SHOW_PROGRESS | GWEN_GUI_PROGRESS_SHOW_LOG | GWEN_GUI_PROGRESS_ALWAYS_SHOW_LOG | GWEN_GUI_PROGRESS_KEEP_OPEN | GWEN_GUI_PROGRESS_SHOW_ABORT, I18N("Executing Request"), I18N("Now the request is send to the credit institute."), GWEN_GUI_PROGRESS_NONE, 0); rv=EBC_Provider_GetCert(pro, u); GWEN_Gui_ProgressEnd(guiid); if (rv) { DBG_ERROR(0, "Error connecting to the server (%d)", rv); return 4; } } fprintf(stderr, "Certificate request ok.\n"); return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqebics/control/sendsignkey.c0000664000175000017500000001044214043610745023140 00000000000000/*************************************************************************** begin : Thu Jun 24 2010 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals.h" #include int sendSignKey(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; uint32_t uid; AB_USER *u=NULL; int rv; const char *signVersion; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Int, /* type */ "userId", /* name */ 0, /* minnum */ 1, /* maxnum */ "u", /* short option */ "user", /* long option */ "Specify the unique user id", /* short description */ "Specify the unique user id" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "signVersion", /* name */ 0, /* minnum */ 1, /* maxnum */ "A", /* short option */ "signversion", /* long option */ "Specify the signature version (e.g. A005)", /* short description */ "Specify the signature version (e.g. A005)" /* 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(stdout, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } signVersion=GWEN_DB_GetCharValue(db, "signVersion", 0, "A005"); /* doit */ uid=(uint32_t) GWEN_DB_GetIntValue(db, "userId", 0, 0); if (uid==0) { fprintf(stderr, "ERROR: Invalid or missing unique user id\n"); return 1; } rv=AB_Provider_GetUser(pro, uid, 1, 1, &u); if (rv<0) { fprintf(stderr, "ERROR: User with id %lu not found\n", (unsigned long int) uid); return 2; } else { uint32_t guiid; guiid=GWEN_Gui_ProgressStart(GWEN_GUI_PROGRESS_ALLOW_SUBLEVELS | GWEN_GUI_PROGRESS_SHOW_PROGRESS | GWEN_GUI_PROGRESS_SHOW_LOG | GWEN_GUI_PROGRESS_ALWAYS_SHOW_LOG | GWEN_GUI_PROGRESS_KEEP_OPEN | GWEN_GUI_PROGRESS_SHOW_ABORT, I18N("Executing Request"), I18N("Now the request is send to the credit institute."), GWEN_GUI_PROGRESS_NONE, 0); rv=EBC_Provider_Send_PUB(pro, u, signVersion, 1); if (rv) { DBG_ERROR(0, "Error sending INI request (%d)", rv); GWEN_Gui_ProgressEnd(guiid); return 4; } else { fprintf(stderr, "PUB request sent.\n"); } GWEN_Gui_ProgressEnd(guiid); } fprintf(stderr, "INI/HIA request ok.\n"); return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqebics/dialogs/0000755000175000017500000000000015037736164020500 500000000000000aqbanking-6.6.1/src/libs/plugins/backends/aqebics/dialogs/Makefile.am0000664000175000017500000000215214043610745022446 00000000000000 AM_CPPFLAGS = -I$(top_srcdir)/src/libs -I$(top_builddir)/src/libs $(gwenhywfar_includes) -I$(srcdir)/../.. $(AQEBICS_CFLAGS) DEFS += -DLOCALEDIR=\"$(localedir)\" AM_CFLAGS=-DBUILDING_AQBANKING @visibility_cflags@ #typefiles= noinst_LTLIBRARIES=libdialogs.la noinst_HEADERS=\ dlg_edituser_l.h dlg_edituser_p.h \ dlg_newkeyfile_l.h dlg_newkeyfile_p.h \ dlg_user_special_l.h dlg_user_special_p.h libdialogs_la_SOURCES=\ dlg_edituser.c \ dlg_newkeyfile.c \ dlg_user_special.c dlgdatadir=$(datadir)/aqbanking/backends/aqebics/dialogs dlgdata_DATA=\ dlg_edituser.dlg \ dlg_newkeyfile.dlg \ dlg_user_special.dlg EXTRA_DIST=$(typefiles) $(dlgdata_DATA) typefiles: $(typefiles) typemaker $(typefiles) sources: for d in $(SUBDIRS); do \ $(MAKE) -C $$d sources; \ done for f in $(dlgdata_DATA); do \ echo $(subdir)/$$f >>$(top_srcdir)/dlgsources; \ done for f in $(libdialogs_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done cppcheck: for f in $(libdialogs_la_SOURCES); do \ cppcheck --force $$f ; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done aqbanking-6.6.1/src/libs/plugins/backends/aqebics/dialogs/dlg_edituser_p.h0000664000175000017500000000223614043610745023557 00000000000000/*************************************************************************** begin : Thu Jul 08 2010 copyright : (C) 2018 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQEBICS_DLG_EDITUSER_P_H #define AQEBICS_DLG_EDITUSER_P_H #include "dlg_edituser_l.h" #include "aqebics/client/user.h" typedef struct EBC_EDIT_USER_DIALOG EBC_EDIT_USER_DIALOG; struct EBC_EDIT_USER_DIALOG { AB_PROVIDER *provider; AB_BANKING *banking; AB_USER *user; int doLock; }; static void GWENHYWFAR_CB EBC_EditUserDialog_FreeData(void *bp, void *p); static int GWENHYWFAR_CB EBC_EditUserDialog_SignalHandler(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender); static void EBC_EditUserDialog_toGui(GWEN_DIALOG *dlg); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqebics/dialogs/dlg_newkeyfile.c0000664000175000017500000014037514546575647023603 00000000000000/*************************************************************************** begin : Sat Jun 26 2010 copyright : (C) 2018 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "dlg_newkeyfile_p.h" #include "aqebics/client/provider_l.h" #include "aqebics/client/user.h" #include "aqebics/client/provider.h" #include "aqebics/dialogs/dlg_user_special_l.h" #include #include #include #include #include #include #include #include #include #include #include #define PAGE_BEGIN 0 #define PAGE_FILE 1 #define PAGE_BANK 2 #define PAGE_USER 3 #define PAGE_CREATE 4 #define PAGE_END 5 #define DIALOG_MINWIDTH 400 #define DIALOG_MINHEIGHT 200 #define I18N(msg) GWEN_I18N_Translate(PACKAGE, msg) #define I18N_NOOP(msg) msg #define I18S(msg) msg GWEN_INHERIT(GWEN_DIALOG, EBC_NEWKEYFILE_DIALOG) GWEN_DIALOG *EBC_NewKeyFileDialog_new(AB_PROVIDER *pro) { GWEN_DIALOG *dlg; EBC_NEWKEYFILE_DIALOG *xdlg; GWEN_BUFFER *fbuf; int rv; dlg=GWEN_Dialog_new("ebc_setup_newkeyfile"); GWEN_NEW_OBJECT(EBC_NEWKEYFILE_DIALOG, xdlg); GWEN_INHERIT_SETDATA(GWEN_DIALOG, EBC_NEWKEYFILE_DIALOG, dlg, xdlg, EBC_NewKeyFileDialog_FreeData); GWEN_Dialog_SetSignalHandler(dlg, EBC_NewKeyFileDialog_SignalHandler); /* get path of dialog description file */ fbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_PathManager_FindFile(GWEN_PM_LIBNAME, GWEN_PM_SYSDATADIR, "aqbanking/backends/aqebics/dialogs/dlg_newkeyfile.dlg", fbuf); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "Dialog description file not found (%d).", rv); GWEN_Buffer_free(fbuf); GWEN_Dialog_free(dlg); return NULL; } /* read dialog from dialog description file */ rv=GWEN_Dialog_ReadXmlFile(dlg, GWEN_Buffer_GetStart(fbuf)); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d).", rv); GWEN_Gui_ShowError(I18N("Error"), I18N("Could not read dialog description file [%s], maybe an installation error (%d)?"), GWEN_Buffer_GetStart(fbuf), rv); GWEN_Buffer_free(fbuf); GWEN_Dialog_free(dlg); return NULL; } GWEN_Buffer_free(fbuf); xdlg->provider=pro; xdlg->banking=AB_Provider_GetBanking(pro); /* preset */ xdlg->ebicsVersion=strdup("H004"); xdlg->signVersion=strdup("A005"); xdlg->cryptVersion=strdup("E002"); xdlg->authVersion=strdup("X002"); xdlg->signKeySize=256; xdlg->cryptAndAuthKeySize=256; xdlg->httpVMajor=1; xdlg->httpVMinor=1; /* done */ return dlg; } void GWENHYWFAR_CB EBC_NewKeyFileDialog_FreeData(void *bp, void *p) { EBC_NEWKEYFILE_DIALOG *xdlg; xdlg=(EBC_NEWKEYFILE_DIALOG *) p; free(xdlg->fileName); free(xdlg->bankCode); free(xdlg->bankName); free(xdlg->userName); free(xdlg->userId); free(xdlg->customerId); free(xdlg->ebicsVersion); free(xdlg->signVersion); free(xdlg->cryptVersion); free(xdlg->authVersion); GWEN_FREE_OBJECT(xdlg); } AB_USER *EBC_NewKeyFileDialog_GetUser(const GWEN_DIALOG *dlg) { EBC_NEWKEYFILE_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, EBC_NEWKEYFILE_DIALOG, dlg); assert(xdlg); return xdlg->user; } const char *EBC_NewKeyFileDialog_GetFileName(const GWEN_DIALOG *dlg) { EBC_NEWKEYFILE_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, EBC_NEWKEYFILE_DIALOG, dlg); assert(xdlg); return xdlg->fileName; } void EBC_NewKeyFileDialog_SetFileName(GWEN_DIALOG *dlg, const char *s) { EBC_NEWKEYFILE_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, EBC_NEWKEYFILE_DIALOG, dlg); assert(xdlg); free(xdlg->fileName); if (s) xdlg->fileName=strdup(s); else xdlg->fileName=NULL; } const char *EBC_NewKeyFileDialog_GetBankCode(const GWEN_DIALOG *dlg) { EBC_NEWKEYFILE_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, EBC_NEWKEYFILE_DIALOG, dlg); assert(xdlg); return xdlg->bankCode; } void EBC_NewKeyFileDialog_SetBankCode(GWEN_DIALOG *dlg, const char *s) { EBC_NEWKEYFILE_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, EBC_NEWKEYFILE_DIALOG, dlg); assert(xdlg); free(xdlg->bankCode); if (s) xdlg->bankCode=strdup(s); else xdlg->bankCode=NULL; } const char *EBC_NewKeyFileDialog_GetBankName(const GWEN_DIALOG *dlg) { EBC_NEWKEYFILE_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, EBC_NEWKEYFILE_DIALOG, dlg); assert(xdlg); return xdlg->bankName; } void EBC_NewKeyFileDialog_SetBankName(GWEN_DIALOG *dlg, const char *s) { EBC_NEWKEYFILE_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, EBC_NEWKEYFILE_DIALOG, dlg); assert(xdlg); free(xdlg->bankName); if (s) xdlg->bankName=strdup(s); else xdlg->bankName=NULL; } const char *EBC_NewKeyFileDialog_GetUserName(const GWEN_DIALOG *dlg) { EBC_NEWKEYFILE_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, EBC_NEWKEYFILE_DIALOG, dlg); assert(xdlg); return xdlg->userName; } void EBC_NewKeyFileDialog_SetUserName(GWEN_DIALOG *dlg, const char *s) { EBC_NEWKEYFILE_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, EBC_NEWKEYFILE_DIALOG, dlg); assert(xdlg); free(xdlg->userName); if (s) xdlg->userName=strdup(s); else xdlg->userName=NULL; } const char *EBC_NewKeyFileDialog_GetUserId(const GWEN_DIALOG *dlg) { EBC_NEWKEYFILE_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, EBC_NEWKEYFILE_DIALOG, dlg); assert(xdlg); return xdlg->userId; } void EBC_NewKeyFileDialog_SetUserId(GWEN_DIALOG *dlg, const char *s) { EBC_NEWKEYFILE_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, EBC_NEWKEYFILE_DIALOG, dlg); assert(xdlg); free(xdlg->userId); if (s) xdlg->userId=strdup(s); else xdlg->userId=NULL; } const char *EBC_NewKeyFileDialog_GetCustomerId(const GWEN_DIALOG *dlg) { EBC_NEWKEYFILE_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, EBC_NEWKEYFILE_DIALOG, dlg); assert(xdlg); return xdlg->customerId; } void EBC_NewKeyFileDialog_SetCustomerId(GWEN_DIALOG *dlg, const char *s) { EBC_NEWKEYFILE_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, EBC_NEWKEYFILE_DIALOG, dlg); assert(xdlg); free(xdlg->customerId); if (s) xdlg->customerId=strdup(s); else xdlg->customerId=NULL; } const char *EBC_NewKeyFileDialog_GetUrl(const GWEN_DIALOG *dlg) { EBC_NEWKEYFILE_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, EBC_NEWKEYFILE_DIALOG, dlg); assert(xdlg); return xdlg->url; } void EBC_NewKeyFileDialog_SetUrl(GWEN_DIALOG *dlg, const char *s) { EBC_NEWKEYFILE_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, EBC_NEWKEYFILE_DIALOG, dlg); assert(xdlg); free(xdlg->url); if (s) xdlg->url=strdup(s); else xdlg->url=NULL; } const char *EBC_NewKeyFileDialog_GetEbicsVersion(const GWEN_DIALOG *dlg) { EBC_NEWKEYFILE_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, EBC_NEWKEYFILE_DIALOG, dlg); assert(xdlg); return xdlg->ebicsVersion; } void EBC_NewKeyFileDialog_SetEbicsVersion(GWEN_DIALOG *dlg, const char *s) { EBC_NEWKEYFILE_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, EBC_NEWKEYFILE_DIALOG, dlg); assert(xdlg); free(xdlg->ebicsVersion); if (s) xdlg->ebicsVersion=strdup(s); else xdlg->ebicsVersion=NULL; } const char *EBC_NewKeyFileDialog_GetSignVersion(const GWEN_DIALOG *dlg) { EBC_NEWKEYFILE_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, EBC_NEWKEYFILE_DIALOG, dlg); assert(xdlg); return xdlg->signVersion; } void EBC_NewKeyFileDialog_SetSignVersion(GWEN_DIALOG *dlg, const char *s) { EBC_NEWKEYFILE_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, EBC_NEWKEYFILE_DIALOG, dlg); assert(xdlg); free(xdlg->signVersion); if (s) xdlg->signVersion=strdup(s); else xdlg->signVersion=NULL; } const char *EBC_NewKeyFileDialog_GetCryptVersion(const GWEN_DIALOG *dlg) { EBC_NEWKEYFILE_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, EBC_NEWKEYFILE_DIALOG, dlg); assert(xdlg); return xdlg->cryptVersion; } void EBC_NewKeyFileDialog_SetCryptVersion(GWEN_DIALOG *dlg, const char *s) { EBC_NEWKEYFILE_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, EBC_NEWKEYFILE_DIALOG, dlg); assert(xdlg); free(xdlg->cryptVersion); if (s) xdlg->cryptVersion=strdup(s); else xdlg->cryptVersion=NULL; } const char *EBC_NewKeyFileDialog_GetAuthVersion(const GWEN_DIALOG *dlg) { EBC_NEWKEYFILE_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, EBC_NEWKEYFILE_DIALOG, dlg); assert(xdlg); return xdlg->authVersion; } void EBC_NewKeyFileDialog_SetAuthVersion(GWEN_DIALOG *dlg, const char *s) { EBC_NEWKEYFILE_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, EBC_NEWKEYFILE_DIALOG, dlg); assert(xdlg); free(xdlg->authVersion); if (s) xdlg->authVersion=strdup(s); else xdlg->authVersion=NULL; } const char *EBC_NewKeyFileDialog_GetHostId(const GWEN_DIALOG *dlg) { EBC_NEWKEYFILE_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, EBC_NEWKEYFILE_DIALOG, dlg); assert(xdlg); return xdlg->hostId; } void EBC_NewKeyFileDialog_SetHostId(GWEN_DIALOG *dlg, const char *s) { EBC_NEWKEYFILE_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, EBC_NEWKEYFILE_DIALOG, dlg); assert(xdlg); free(xdlg->hostId); if (s) xdlg->hostId=strdup(s); else xdlg->hostId=NULL; } uint32_t EBC_NewKeyFileDialog_GetFlags(const GWEN_DIALOG *dlg) { EBC_NEWKEYFILE_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, EBC_NEWKEYFILE_DIALOG, dlg); assert(xdlg); return xdlg->flags; } void EBC_NewKeyFileDialog_SetFlags(GWEN_DIALOG *dlg, uint32_t fl) { EBC_NEWKEYFILE_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, EBC_NEWKEYFILE_DIALOG, dlg); assert(xdlg); xdlg->flags=fl; } void EBC_NewKeyFileDialog_AddFlags(GWEN_DIALOG *dlg, uint32_t fl) { EBC_NEWKEYFILE_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, EBC_NEWKEYFILE_DIALOG, dlg); assert(xdlg); xdlg->flags&=~fl; } void EBC_NewKeyFileDialog_SubFlags(GWEN_DIALOG *dlg, uint32_t fl) { EBC_NEWKEYFILE_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, EBC_NEWKEYFILE_DIALOG, dlg); assert(xdlg); xdlg->flags&=~fl; } void EBC_NewKeyFileDialog_Init(GWEN_DIALOG *dlg) { EBC_NEWKEYFILE_DIALOG *xdlg; GWEN_DB_NODE *dbPrefs; int i; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, EBC_NEWKEYFILE_DIALOG, dlg); assert(xdlg); dbPrefs=GWEN_Dialog_GetPreferences(dlg); GWEN_Dialog_SetCharProperty(dlg, "", GWEN_DialogProperty_Title, 0, I18N("EBICS Keyfile Setup Wizard"), 0); /* select first page */ GWEN_Dialog_SetIntProperty(dlg, "wiz_stack", GWEN_DialogProperty_Value, 0, 0, 0); /* setup intro page */ GWEN_Dialog_SetCharProperty(dlg, "wiz_begin_label", GWEN_DialogProperty_Title, 0, I18N("This dialog assists you in setting up a Keyfile User.\n"), 0); /* setup bank page */ GWEN_Dialog_SetCharProperty(dlg, "wiz_bank_label", GWEN_DialogProperty_Title, 0, I18N("" "

Please select the bank.

" "

AqBanking has an internal database which " "contains EBICS information about a few banks.

" "

If there is an entry for your bank this dialog will use the " "information from the database.

" "" "Please select the bank.\n" "AqBanking has an internal database which contains EBICS information\n" "about a few banks.\n" "If there is an entry for your bank this dialog will use the\n" "information from the database." ), 0); /* setup user page */ GWEN_Dialog_SetCharProperty(dlg, "wiz_user_label", GWEN_DialogProperty_Title, 0, I18N("" "

Please enter the necessary information below. You can " "probably find this information in the letter you received from " "your bank in response to the application for an EBICS account." "

" "" "Please enter the necessary information below. You can probably find\n" "this information in the letter you received from your bank in response\n" "to the application for an EBICS account."), 0); /* setup creation page */ GWEN_Dialog_SetCharProperty(dlg, "wiz_create_label", GWEN_DialogProperty_Title, 0, I18N("" "

We are now ready to create the user and exchange keys with the server.

" "

Click the next button to proceed or abort to abort.

" "" "We are now ready to create the user and exchange keys with the server.\n" "Click the \"next\" button to proceed or \"abort\" to abort."), 0); /* setup extro page */ GWEN_Dialog_SetCharProperty(dlg, "wiz_end_label", GWEN_DialogProperty_Title, 0, I18N("" "

The user has been successfully created.

" "

You must now print the INI and HIA letter (click the button below) " "and send it to the bank.

" "

The activation of your account by the bank can take a few days.

" "" "The user has been successfully created.\n" "You must now \"print\" the INI and HIA letter (click the button below)\n" "and \"send\" it to the bank.\n" "The activation of your account by the bank can take a few days."), 0); /* read width */ i=GWEN_DB_GetIntValue(dbPrefs, "dialog_width", 0, -1); if (i>=DIALOG_MINWIDTH) GWEN_Dialog_SetIntProperty(dlg, "", GWEN_DialogProperty_Width, 0, i, 0); /* read height */ i=GWEN_DB_GetIntValue(dbPrefs, "dialog_height", 0, -1); if (i>=DIALOG_MINHEIGHT) GWEN_Dialog_SetIntProperty(dlg, "", GWEN_DialogProperty_Height, 0, i, 0); /* disable next and previous buttons */ GWEN_Dialog_SetIntProperty(dlg, "wiz_prev_button", GWEN_DialogProperty_Enabled, 0, 0, 0); GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 1, 0); } void EBC_NewKeyFileDialog_Fini(GWEN_DIALOG *dlg) { EBC_NEWKEYFILE_DIALOG *xdlg; int i; GWEN_DB_NODE *dbPrefs; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, EBC_NEWKEYFILE_DIALOG, dlg); assert(xdlg); dbPrefs=GWEN_Dialog_GetPreferences(dlg); /* store dialog width */ i=GWEN_Dialog_GetIntProperty(dlg, "", GWEN_DialogProperty_Width, 0, -1); GWEN_DB_SetIntValue(dbPrefs, GWEN_DB_FLAGS_OVERWRITE_VARS, "dialog_width", i); /* store dialog height */ i=GWEN_Dialog_GetIntProperty(dlg, "", GWEN_DialogProperty_Height, 0, -1); GWEN_DB_SetIntValue(dbPrefs, GWEN_DB_FLAGS_OVERWRITE_VARS, "dialog_height", i); } int EBC_NewKeyFileDialog_GetFilePageData(GWEN_DIALOG *dlg) { EBC_NEWKEYFILE_DIALOG *xdlg; const char *s; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, EBC_NEWKEYFILE_DIALOG, dlg); assert(xdlg); s=GWEN_Dialog_GetCharProperty(dlg, "wiz_filename_edit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) EBC_NewKeyFileDialog_SetFileName(dlg, s); else { DBG_INFO(AQEBICS_LOGDOMAIN, "Missing file name"); return GWEN_ERROR_NO_DATA; } return 0; } int EBC_NewKeyFileDialog_GetBankPageData(GWEN_DIALOG *dlg) { EBC_NEWKEYFILE_DIALOG *xdlg; const char *s; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, EBC_NEWKEYFILE_DIALOG, dlg); assert(xdlg); s=GWEN_Dialog_GetCharProperty(dlg, "wiz_bankcode_edit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) EBC_NewKeyFileDialog_SetBankCode(dlg, s); else { DBG_INFO(AQEBICS_LOGDOMAIN, "Missing bank code"); return GWEN_ERROR_NO_DATA; } s=GWEN_Dialog_GetCharProperty(dlg, "wiz_bankname_edit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) EBC_NewKeyFileDialog_SetBankName(dlg, s); else EBC_NewKeyFileDialog_SetBankName(dlg, NULL); s=GWEN_Dialog_GetCharProperty(dlg, "wiz_url_edit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) EBC_NewKeyFileDialog_SetUrl(dlg, s); else { DBG_INFO(AQEBICS_LOGDOMAIN, "Missing URL"); return GWEN_ERROR_NO_DATA; } s=GWEN_Dialog_GetCharProperty(dlg, "wiz_hostid_edit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) EBC_NewKeyFileDialog_SetHostId(dlg, s); else { DBG_INFO(AQEBICS_LOGDOMAIN, "Missing host id"); return GWEN_ERROR_NO_DATA; } return 0; } void EBC_NewKeyFileDialog_SetBankPageData(GWEN_DIALOG *dlg) { EBC_NEWKEYFILE_DIALOG *xdlg; const char *s; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, EBC_NEWKEYFILE_DIALOG, dlg); assert(xdlg); s=xdlg->bankCode; GWEN_Dialog_SetCharProperty(dlg, "wiz_bankcode_edit", GWEN_DialogProperty_Value, 0, (s && *s)?s:"", 0); s=xdlg->bankName; GWEN_Dialog_SetCharProperty(dlg, "wiz_bankname_edit", GWEN_DialogProperty_Value, 0, (s && *s)?s:"", 0); s=xdlg->url; GWEN_Dialog_SetCharProperty(dlg, "wiz_url_edit", GWEN_DialogProperty_Value, 0, (s && *s)?s:"", 0); s=xdlg->hostId; GWEN_Dialog_SetCharProperty(dlg, "wiz_hostid_edit", GWEN_DialogProperty_Value, 0, (s && *s)?s:"", 0); } int EBC_NewKeyFileDialog_GetUserPageData(GWEN_DIALOG *dlg) { EBC_NEWKEYFILE_DIALOG *xdlg; const char *s; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, EBC_NEWKEYFILE_DIALOG, dlg); assert(xdlg); s=GWEN_Dialog_GetCharProperty(dlg, "wiz_username_edit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) EBC_NewKeyFileDialog_SetUserName(dlg, s); else { DBG_INFO(AQEBICS_LOGDOMAIN, "Missing user name"); return GWEN_ERROR_NO_DATA; } s=GWEN_Dialog_GetCharProperty(dlg, "wiz_userid_edit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) EBC_NewKeyFileDialog_SetUserId(dlg, s); else { DBG_INFO(AQEBICS_LOGDOMAIN, "Missing user id"); return GWEN_ERROR_NO_DATA; } s=GWEN_Dialog_GetCharProperty(dlg, "wiz_customerid_edit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) EBC_NewKeyFileDialog_SetCustomerId(dlg, s); else EBC_NewKeyFileDialog_SetCustomerId(dlg, NULL); return 0; } void EBC_NewKeyFileDialog_SetUserPageData(GWEN_DIALOG *dlg) { EBC_NEWKEYFILE_DIALOG *xdlg; const char *s; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, EBC_NEWKEYFILE_DIALOG, dlg); assert(xdlg); s=xdlg->userName; GWEN_Dialog_SetCharProperty(dlg, "wiz_username_edit", GWEN_DialogProperty_Value, 0, (s && *s)?s:"", 0); s=xdlg->userId; GWEN_Dialog_SetCharProperty(dlg, "wiz_userid_edit", GWEN_DialogProperty_Value, 0, (s && *s)?s:"", 0); s=xdlg->customerId; GWEN_Dialog_SetCharProperty(dlg, "wiz_customerid_edit", GWEN_DialogProperty_Value, 0, (s && *s)?s:"", 0); } int EBC_NewKeyFileDialog_EnterPage(GWEN_DIALOG *dlg, int page, int forwards) { EBC_NEWKEYFILE_DIALOG *xdlg; int rv; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, EBC_NEWKEYFILE_DIALOG, dlg); assert(xdlg); switch (page) { case PAGE_BEGIN: GWEN_Dialog_SetIntProperty(dlg, "wiz_prev_button", GWEN_DialogProperty_Enabled, 0, 0, 0); GWEN_Dialog_SetIntProperty(dlg, "wiz_stack", GWEN_DialogProperty_Value, 0, page, 0); return GWEN_DialogEvent_ResultHandled; case PAGE_FILE: GWEN_Dialog_SetIntProperty(dlg, "wiz_prev_button", GWEN_DialogProperty_Enabled, 0, 1, 0); rv=EBC_NewKeyFileDialog_GetFilePageData(dlg); if (rv<0) GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 0, 0); else GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 1, 0); GWEN_Dialog_SetIntProperty(dlg, "wiz_stack", GWEN_DialogProperty_Value, 0, page, 0); return GWEN_DialogEvent_ResultHandled; case PAGE_BANK: GWEN_Dialog_SetIntProperty(dlg, "wiz_prev_button", GWEN_DialogProperty_Enabled, 0, 1, 0); rv=EBC_NewKeyFileDialog_GetBankPageData(dlg); if (rv<0) GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 0, 0); else GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 1, 0); GWEN_Dialog_SetIntProperty(dlg, "wiz_stack", GWEN_DialogProperty_Value, 0, page, 0); return GWEN_DialogEvent_ResultHandled; case PAGE_USER: GWEN_Dialog_SetIntProperty(dlg, "wiz_prev_button", GWEN_DialogProperty_Enabled, 0, 1, 0); rv=EBC_NewKeyFileDialog_GetUserPageData(dlg); if (rv<0) GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 0, 0); else GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 1, 0); GWEN_Dialog_SetIntProperty(dlg, "wiz_stack", GWEN_DialogProperty_Value, 0, page, 0); return GWEN_DialogEvent_ResultHandled; case PAGE_CREATE: if (!forwards) GWEN_Dialog_SetCharProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Title, 0, I18N("Next"), 0); GWEN_Dialog_SetIntProperty(dlg, "wiz_stack", GWEN_DialogProperty_Value, 0, page, 0); return GWEN_DialogEvent_ResultHandled; case PAGE_END: GWEN_Dialog_SetIntProperty(dlg, "wiz_stack", GWEN_DialogProperty_Value, 0, page, 0); GWEN_Dialog_SetCharProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Title, 0, I18N("Finish"), 0); GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 1, 0); GWEN_Dialog_SetIntProperty(dlg, "wiz_prev_button", GWEN_DialogProperty_Enabled, 0, 0, 0); GWEN_Dialog_SetIntProperty(dlg, "wiz_abort_button", GWEN_DialogProperty_Enabled, 0, 0, 0); return GWEN_DialogEvent_ResultHandled; default: return GWEN_DialogEvent_ResultHandled; } return GWEN_DialogEvent_ResultHandled; } int EBC_NewKeyFileDialog_DoIt(GWEN_DIALOG *dlg) { EBC_NEWKEYFILE_DIALOG *xdlg; AB_USER *u; int rv; uint32_t pid; GWEN_PLUGIN_MANAGER *pm; GWEN_PLUGIN *pl; GWEN_CRYPT_TOKEN *ct; int i; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, EBC_NEWKEYFILE_DIALOG, dlg); assert(xdlg); rv=EBC_NewKeyFileDialog_GetFilePageData(dlg); if (rv<0) { DBG_ERROR(AQEBICS_LOGDOMAIN, "No file?"); // TODO: show error message return GWEN_DialogEvent_ResultHandled; } u=AB_Provider_CreateUserObject(xdlg->provider); if (u==NULL) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Could not create user, maybe backend missing?"); GWEN_Gui_ShowError(I18N("Error"), "%s", I18N("Could not create EBICS user.")); return GWEN_DialogEvent_ResultHandled; } /* generic setup */ AB_User_SetUserName(u, xdlg->userName); AB_User_SetUserId(u, xdlg->userId); if (xdlg->customerId && *(xdlg->customerId)) AB_User_SetCustomerId(u, xdlg->customerId); else AB_User_SetCustomerId(u, xdlg->userId); AB_User_SetCountry(u, "de"); AB_User_SetBankCode(u, xdlg->bankCode); /* EBICS setup */ EBC_User_SetTokenType(u, "ohbci"); EBC_User_SetTokenName(u, EBC_NewKeyFileDialog_GetFileName(dlg)); EBC_User_SetTokenContextId(u, 1); EBC_User_SetStatus(u, EBC_UserStatus_New); EBC_User_SetProtoVersion(u, xdlg->ebicsVersion); EBC_User_SetSignVersion(u, xdlg->signVersion); EBC_User_SetCryptVersion(u, xdlg->cryptVersion); EBC_User_SetAuthVersion(u, xdlg->authVersion); EBC_User_SetHttpVMajor(u, xdlg->httpVMajor); EBC_User_SetHttpVMinor(u, xdlg->httpVMinor); EBC_User_SetFlags(u, xdlg->flags); /* create CryptToken */ pm=GWEN_PluginManager_FindPluginManager(GWEN_CRYPT_TOKEN_PLUGIN_TYPENAME); if (pm==0) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Plugin manager not found"); GWEN_Gui_ShowError(I18N("Error"), I18N("CryptToken plugin for type %s is not available. Did you install all necessary packages?"), GWEN_CRYPT_TOKEN_PLUGIN_TYPENAME); return 3; } pl=GWEN_PluginManager_GetPlugin(pm, EBC_User_GetTokenType(u)); if (pl==0) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Plugin not found"); GWEN_Gui_ShowError(I18N("Error"), I18N("CryptToken plugin for type %s is not available. Did you install all necessary packages?"), EBC_User_GetTokenType(u)); AB_User_free(u); return GWEN_DialogEvent_ResultHandled; } ct=GWEN_Crypt_Token_Plugin_CreateToken(pl, EBC_User_GetTokenName(u)); if (ct==0) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Could not create crypt token"); AB_User_free(u); return GWEN_DialogEvent_ResultHandled; } /* create crypt token */ rv=GWEN_Crypt_Token_Create(ct, 0); if (rv<0) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Could not create token"); GWEN_Gui_ShowError(I18N("Error"), I18N("The keyfile %s could not be created. Maybe there already is a file of that name (%d)."), GWEN_Crypt_Token_GetTokenName(ct), rv); AB_User_free(u); return GWEN_DialogEvent_ResultHandled; } /* close crypt token */ rv=GWEN_Crypt_Token_Close(ct, 0, 0); if (rv) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Could not close token"); GWEN_Gui_ShowError(I18N("Error"), I18N("The keyfile %s could not be closed. Please check disc space."), GWEN_Crypt_Token_GetTokenName(ct), rv); AB_User_free(u); unlink(EBC_User_GetTokenName(u)); return GWEN_DialogEvent_ResultHandled; } EBC_User_SetServerUrl(u, xdlg->url); EBC_User_SetPeerId(u, xdlg->hostId); rv=AB_Provider_AddUser(xdlg->provider, u); if (rv<0) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Could not add user (%d)", rv); GWEN_Gui_ShowError(I18N("Error"), I18N("Could not add EBICS user, maybe there already is a user of that id (%d)"), rv); AB_User_free(u); DBG_ERROR(AQEBICS_LOGDOMAIN, "Could not add user, maybe there already is a user of the same id (%d)?", rv); return GWEN_DialogEvent_ResultHandled; } i=1; if (!(EBC_User_GetFlags(u) & EBC_USER_FLAGS_INI)) i++; if (!(EBC_User_GetFlags(u) & EBC_USER_FLAGS_HIA)) i++; pid=GWEN_Gui_ProgressStart(GWEN_GUI_PROGRESS_DELAY | GWEN_GUI_PROGRESS_ALLOW_EMBED | GWEN_GUI_PROGRESS_SHOW_PROGRESS | GWEN_GUI_PROGRESS_SHOW_ABORT, I18N("Setting Up Keyfile User"), I18N("The keys will now be created and sent to the bank."), i, /* mkKeys, sendKeys */ 0); /* lock new user */ rv=AB_Provider_BeginExclUseUser(xdlg->provider, u); if (rv<0) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Could not lock user (%d)", rv); GWEN_Gui_ProgressLog2(pid, GWEN_LoggerLevel_Error, I18N("Unable to lock users (%d)"), rv); AB_Provider_DeleteUser(xdlg->provider, AB_User_GetUniqueId(u)); unlink(EBC_NewKeyFileDialog_GetFileName(dlg)); GWEN_Gui_ProgressEnd(pid); return GWEN_DialogEvent_ResultHandled; } /* generate keys */ rv=EBC_Provider_CreateKeys(xdlg->provider, u, xdlg->cryptAndAuthKeySize, xdlg->signKeySize, 1); if (rv<0) { AB_Provider_EndExclUseUser(xdlg->provider, u, 1); DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); AB_Provider_DeleteUser(xdlg->provider, AB_User_GetUniqueId(u)); unlink(EBC_NewKeyFileDialog_GetFileName(dlg)); GWEN_Gui_ProgressLog2(pid, GWEN_LoggerLevel_Error, I18N("Error generating keys: %d"), rv); GWEN_Gui_ProgressEnd(pid); return GWEN_DialogEvent_ResultHandled; } rv=GWEN_Gui_ProgressAdvance(pid, GWEN_GUI_PROGRESS_ONE); if (rv==GWEN_ERROR_USER_ABORTED) { AB_Provider_EndExclUseUser(xdlg->provider, u, 1); DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); AB_Provider_DeleteUser(xdlg->provider, AB_User_GetUniqueId(u)); unlink(EBC_NewKeyFileDialog_GetFileName(dlg)); GWEN_Gui_ProgressLog(pid, GWEN_LoggerLevel_Error, I18N("Aborted by user.")); GWEN_Gui_ProgressEnd(pid); return GWEN_DialogEvent_ResultHandled; } /* send user keys */ GWEN_Gui_ProgressLog(pid, GWEN_LoggerLevel_Notice, I18N("Sending user keys")); if (!(EBC_User_GetFlags(u) & EBC_USER_FLAGS_INI)) { rv=EBC_Provider_Send_INI(xdlg->provider, u, 0); if (rv<0) { AB_Provider_EndExclUseUser(xdlg->provider, u, 1); DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); AB_Provider_DeleteUser(xdlg->provider, AB_User_GetUniqueId(u)); unlink(EBC_NewKeyFileDialog_GetFileName(dlg)); GWEN_Gui_ProgressEnd(pid); return GWEN_DialogEvent_ResultHandled; } rv=GWEN_Gui_ProgressAdvance(pid, GWEN_GUI_PROGRESS_ONE); if (rv==GWEN_ERROR_USER_ABORTED) { AB_Provider_EndExclUseUser(xdlg->provider, u, 1); DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); AB_Provider_DeleteUser(xdlg->provider, AB_User_GetUniqueId(u)); unlink(EBC_NewKeyFileDialog_GetFileName(dlg)); GWEN_Gui_ProgressLog(pid, GWEN_LoggerLevel_Error, I18N("Aborted by user.")); GWEN_Gui_ProgressEnd(pid); return GWEN_DialogEvent_ResultHandled; } } if (!(EBC_User_GetFlags(u) & EBC_USER_FLAGS_HIA)) { rv=EBC_Provider_Send_HIA(xdlg->provider, u, 0); if (rv<0) { AB_Provider_EndExclUseUser(xdlg->provider, u, 1); DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); AB_Provider_DeleteUser(xdlg->provider, AB_User_GetUniqueId(u)); unlink(EBC_NewKeyFileDialog_GetFileName(dlg)); GWEN_Gui_ProgressEnd(pid); return GWEN_DialogEvent_ResultHandled; } rv=GWEN_Gui_ProgressAdvance(pid, GWEN_GUI_PROGRESS_ONE); if (rv==GWEN_ERROR_USER_ABORTED) { AB_Provider_EndExclUseUser(xdlg->provider, u, 1); DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); AB_Provider_DeleteUser(xdlg->provider, AB_User_GetUniqueId(u)); unlink(EBC_NewKeyFileDialog_GetFileName(dlg)); GWEN_Gui_ProgressLog(pid, GWEN_LoggerLevel_Error, I18N("Aborted by user.")); GWEN_Gui_ProgressEnd(pid); return GWEN_DialogEvent_ResultHandled; } } /* unlock user */ rv=AB_Provider_EndExclUseUser(xdlg->provider, u, 0); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "Could not unlock customer [%s] (%d)", AB_User_GetCustomerId(u), rv); GWEN_Gui_ProgressLog2(pid, GWEN_LoggerLevel_Error, I18N("Could not unlock user %s (%d)"), AB_User_GetUserId(u), rv); AB_Provider_EndExclUseUser(xdlg->provider, u, 1); AB_Provider_DeleteUser(xdlg->provider, AB_User_GetUniqueId(u)); GWEN_Gui_ProgressEnd(pid); return GWEN_DialogEvent_ResultHandled; } GWEN_Gui_ProgressEnd(pid); EBC_NewKeyFileDialog_EnterPage(dlg, PAGE_END, 1); xdlg->user=u; return GWEN_DialogEvent_ResultHandled; } int EBC_NewKeyFileDialog_Next(GWEN_DIALOG *dlg) { EBC_NEWKEYFILE_DIALOG *xdlg; int page; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, EBC_NEWKEYFILE_DIALOG, dlg); assert(xdlg); page=GWEN_Dialog_GetIntProperty(dlg, "wiz_stack", GWEN_DialogProperty_Value, 0, -1); if (page==PAGE_CREATE) { return EBC_NewKeyFileDialog_DoIt(dlg); } else if (pagePAGE_BEGIN) { page--; return EBC_NewKeyFileDialog_EnterPage(dlg, page, 0); } return GWEN_DialogEvent_ResultHandled; } int EBC_NewKeyFileDialog_HandleActivatedBankCode(GWEN_DIALOG *dlg) { EBC_NEWKEYFILE_DIALOG *xdlg; GWEN_DIALOG *dlg2; int rv; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, EBC_NEWKEYFILE_DIALOG, dlg); assert(xdlg); dlg2=AB_SelectBankInfoDialog_new(xdlg->banking, "de", NULL); if (dlg2==NULL) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Could not create dialog"); GWEN_Gui_ShowError(I18N("Error"), "%s", I18N("Could not create dialog, maybe an installation error?")); return GWEN_DialogEvent_ResultHandled; } rv=GWEN_Gui_ExecDialog(dlg2, 0); if (rv==0) { /* rejected */ GWEN_Dialog_free(dlg2); return GWEN_DialogEvent_ResultHandled; } else { const AB_BANKINFO *bi; bi=AB_SelectBankInfoDialog_GetSelectedBankInfo(dlg2); if (bi) { const char *s; AB_BANKINFO_SERVICE *sv; s=AB_BankInfo_GetBankId(bi); GWEN_Dialog_SetCharProperty(dlg, "wiz_bankcode_edit", GWEN_DialogProperty_Value, 0, (s && *s)?s:"", 0); s=AB_BankInfo_GetBankName(bi); GWEN_Dialog_SetCharProperty(dlg, "wiz_bankname_edit", GWEN_DialogProperty_Value, 0, (s && *s)?s:"", 0); sv=AB_BankInfoService_List_First(AB_BankInfo_GetServices(bi)); while (sv) { const char *s; s=AB_BankInfoService_GetType(sv); if (s && *s && strcasecmp(s, "EBICS")==0) break; sv=AB_BankInfoService_List_Next(sv); } if (sv) { /* EBICS service found */ s=AB_BankInfoService_GetAddress(sv); GWEN_Dialog_SetCharProperty(dlg, "wiz_url_edit", GWEN_DialogProperty_Value, 0, (s && *s)?s:"", 0); free(xdlg->ebicsVersion); xdlg->ebicsVersion=NULL; free(xdlg->signVersion); xdlg->signVersion=NULL; free(xdlg->cryptVersion); xdlg->cryptVersion=NULL; free(xdlg->authVersion); xdlg->authVersion=NULL; s=AB_BankInfoService_GetPversion(sv); if (s && *s) { if (strcasecmp(s, "H002")==0) { xdlg->ebicsVersion=strdup("H002"); xdlg->signVersion=strdup("A004"); xdlg->cryptVersion=strdup("E001"); xdlg->authVersion=strdup("X001"); } else if (strcasecmp(s, "H003")==0) { xdlg->ebicsVersion=strdup("H003"); xdlg->signVersion=strdup("A005"); xdlg->cryptVersion=strdup("E002"); xdlg->authVersion=strdup("X002"); } else if (strcasecmp(s, "H004")==0) { xdlg->ebicsVersion=strdup("H004"); xdlg->signVersion=strdup("A005"); xdlg->cryptVersion=strdup("E002"); xdlg->authVersion=strdup("X002"); } } if (xdlg->ebicsVersion==NULL) { xdlg->ebicsVersion=strdup("H004"); xdlg->signVersion=strdup("A005"); xdlg->cryptVersion=strdup("E002"); xdlg->authVersion=strdup("X002"); } } } } GWEN_Dialog_free(dlg2); if (EBC_NewKeyFileDialog_GetBankPageData(dlg)<0) GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 0, 0); else GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 1, 0); return GWEN_DialogEvent_ResultHandled; } int EBC_NewKeyFileDialog_HandleActivatedSpecial(GWEN_DIALOG *dlg) { EBC_NEWKEYFILE_DIALOG *xdlg; GWEN_DIALOG *dlg2; int rv; const char *s; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, EBC_NEWKEYFILE_DIALOG, dlg); assert(xdlg); dlg2=EBC_UserSpecialDialog_new(xdlg->provider); if (dlg2==NULL) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Could not create dialog"); GWEN_Gui_ShowError(I18N("Error"), "%s", I18N("Could not create dialog, maybe an installation error?")); return GWEN_DialogEvent_ResultHandled; } EBC_UserSpecialDialog_SetEbicsVersion(dlg2, xdlg->ebicsVersion); EBC_UserSpecialDialog_SetSignVersion(dlg2, xdlg->signVersion); EBC_UserSpecialDialog_SetCryptVersion(dlg2, xdlg->cryptVersion); EBC_UserSpecialDialog_SetAuthVersion(dlg2, xdlg->authVersion); EBC_UserSpecialDialog_SetSignKeySize(dlg2, xdlg->signKeySize); EBC_UserSpecialDialog_SetCryptAndAuthKeySize(dlg2, xdlg->cryptAndAuthKeySize); EBC_UserSpecialDialog_SetHttpVersion(dlg2, xdlg->httpVMajor, xdlg->httpVMinor); EBC_UserSpecialDialog_SetFlags(dlg2, xdlg->flags); rv=GWEN_Gui_ExecDialog(dlg2, 0); if (rv==0) { /* rejected */ GWEN_Dialog_free(dlg2); return GWEN_DialogEvent_ResultHandled; } else { s=EBC_UserSpecialDialog_GetEbicsVersion(dlg2); EBC_NewKeyFileDialog_SetEbicsVersion(dlg, s); s=EBC_UserSpecialDialog_GetSignVersion(dlg2); EBC_NewKeyFileDialog_SetSignVersion(dlg, s); s=EBC_UserSpecialDialog_GetCryptVersion(dlg2); EBC_NewKeyFileDialog_SetCryptVersion(dlg, s); s=EBC_UserSpecialDialog_GetAuthVersion(dlg2); EBC_NewKeyFileDialog_SetAuthVersion(dlg, s); xdlg->signKeySize=EBC_UserSpecialDialog_GetSignKeySize(dlg2); xdlg->cryptAndAuthKeySize=EBC_UserSpecialDialog_GetCryptAndAuthKeySize(dlg2); xdlg->httpVMajor=EBC_UserSpecialDialog_GetHttpVMajor(dlg2); xdlg->httpVMinor=EBC_UserSpecialDialog_GetHttpVMinor(dlg2); xdlg->flags=EBC_UserSpecialDialog_GetFlags(dlg2); } GWEN_Dialog_free(dlg2); return GWEN_DialogEvent_ResultHandled; } int EBC_NewKeyFileDialog_HandleActivatedFileButton(GWEN_DIALOG *dlg) { EBC_NEWKEYFILE_DIALOG *xdlg; int rv; const char *s; GWEN_BUFFER *pathBuffer; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, EBC_NEWKEYFILE_DIALOG, dlg); assert(xdlg); pathBuffer=GWEN_Buffer_new(0, 256, 0, 1); s=GWEN_Dialog_GetCharProperty(dlg, "wiz_filename_edit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) GWEN_Buffer_AppendString(pathBuffer, s); rv=GWEN_Gui_GetFileName(I18N("Create Keyfile"), GWEN_Gui_FileNameType_SaveFileName, 0, I18N("All Files (*)\tOHBCI Files (*ohbci;*.medium)"), pathBuffer, GWEN_Dialog_GetGuiId(dlg)); if (rv==0) { GWEN_Dialog_SetCharProperty(dlg, "wiz_filename_edit", GWEN_DialogProperty_Value, 0, GWEN_Buffer_GetStart(pathBuffer), 0); rv=EBC_NewKeyFileDialog_GetFilePageData(dlg); if (rv<0) GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 0, 0); else GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 1, 0); } else { DBG_ERROR(AQEBICS_LOGDOMAIN, "here (%d)", rv); } GWEN_Buffer_free(pathBuffer); return GWEN_DialogEvent_ResultHandled; } static int EBC_NewKeyFileDialog_HandleActivatedIniLetter(GWEN_DIALOG *dlg) { EBC_NEWKEYFILE_DIALOG *xdlg; int rv; GWEN_BUFFER *tbuf; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, EBC_NEWKEYFILE_DIALOG, dlg); assert(xdlg); tbuf=GWEN_Buffer_new(0, 1024, 0, 1); /* add HTML version of the INI letter */ //GWEN_Buffer_AppendString(tbuf, ""); rv=EBC_Provider_GetIniLetterTxt(AB_User_GetProvider(xdlg->user), xdlg->user, 0, tbuf, 0); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); // TODO: show error message AB_Banking_ClearCryptTokenList(xdlg->banking); GWEN_Buffer_free(tbuf); return GWEN_DialogEvent_ResultHandled; } //GWEN_Buffer_AppendString(tbuf, ""); #if 0 /* add ASCII version of the INI letter for frontends which don't support HTML */ rv=EBC_Provider_GetIniLetterTxt(AB_User_GetProvider(xdlg->user), xdlg->user, 0, tbuf, 0); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); // TODO: show error message AB_Banking_ClearCryptTokenList(xdlg->banking); GWEN_Buffer_free(tbuf); return GWEN_DialogEvent_ResultHandled; } #endif rv=GWEN_Gui_Print(I18N("INI Letter"), "EBICS-INILETTER", I18N("INI Letter for EBICS"), GWEN_Buffer_GetStart(tbuf), 0); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); // TODO: show error message GWEN_Buffer_free(tbuf); return GWEN_DialogEvent_ResultHandled; } GWEN_Buffer_free(tbuf); return GWEN_DialogEvent_ResultHandled; } static int EBC_NewKeyFileDialog_HandleActivatedHiaLetter(GWEN_DIALOG *dlg) { EBC_NEWKEYFILE_DIALOG *xdlg; int rv; GWEN_BUFFER *tbuf; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, EBC_NEWKEYFILE_DIALOG, dlg); assert(xdlg); tbuf=GWEN_Buffer_new(0, 1024, 0, 1); /* add HTML version of the INI letter */ //GWEN_Buffer_AppendString(tbuf, ""); rv=EBC_Provider_GetHiaLetterTxt(AB_User_GetProvider(xdlg->user), xdlg->user, 0, tbuf, 0); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); // TODO: show error message AB_Banking_ClearCryptTokenList(xdlg->banking); GWEN_Buffer_free(tbuf); return GWEN_DialogEvent_ResultHandled; } //GWEN_Buffer_AppendString(tbuf, ""); #if 0 /* add ASCII version of the HIA letter for frontends which don't support HTML */ rv=EBC_Provider_GetHIALetterTxt(AB_User_GetProvider(xdlg->user), xdlg->user, 0, tbuf, 0); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); // TODO: show error message AB_Banking_ClearCryptTokenList(xdlg->banking); GWEN_Buffer_free(tbuf); return GWEN_DialogEvent_ResultHandled; } #endif rv=GWEN_Gui_Print(I18N("HIA Letter"), "EBICS-HIALETTER", I18N("HIA Letter for EBICS"), GWEN_Buffer_GetStart(tbuf), 0); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); // TODO: show error message GWEN_Buffer_free(tbuf); return GWEN_DialogEvent_ResultHandled; } GWEN_Buffer_free(tbuf); return GWEN_DialogEvent_ResultHandled; } int EBC_NewKeyFileDialog_HandleActivated(GWEN_DIALOG *dlg, const char *sender) { if (strcasecmp(sender, "wiz_filename_button")==0) return EBC_NewKeyFileDialog_HandleActivatedFileButton(dlg); else if (strcasecmp(sender, "wiz_bankcode_button")==0) return EBC_NewKeyFileDialog_HandleActivatedBankCode(dlg); else if (strcasecmp(sender, "wiz_prev_button")==0) return EBC_NewKeyFileDialog_Previous(dlg); else if (strcasecmp(sender, "wiz_next_button")==0) return EBC_NewKeyFileDialog_Next(dlg); else if (strcasecmp(sender, "wiz_abort_button")==0) return GWEN_DialogEvent_ResultReject; else if (strcasecmp(sender, "wiz_special_button")==0) return EBC_NewKeyFileDialog_HandleActivatedSpecial(dlg); else if (strcasecmp(sender, "wiz_iniletter_button")==0) return EBC_NewKeyFileDialog_HandleActivatedIniLetter(dlg); else if (strcasecmp(sender, "wiz_hialetter_button")==0) return EBC_NewKeyFileDialog_HandleActivatedHiaLetter(dlg); else if (strcasecmp(sender, "wiz_help_button")==0) { /* TODO: open a help dialog */ } return GWEN_DialogEvent_ResultNotHandled; } int EBC_NewKeyFileDialog_HandleValueChanged(GWEN_DIALOG *dlg, const char *sender) { if (strcasecmp(sender, "wiz_filename_edit")==0 || strcasecmp(sender, "wiz_bankcode_edit")==0 || strcasecmp(sender, "wiz_url_edit")==0 || strcasecmp(sender, "wiz_username_edit")==0 || strcasecmp(sender, "wiz_userid_edit")==0 || strcasecmp(sender, "wiz_customerid_edit")==0) { int rv; if (GWEN_Dialog_GetIntProperty(dlg, "wiz_stack", GWEN_DialogProperty_Value, 0, -1)==PAGE_FILE) { rv=EBC_NewKeyFileDialog_GetFilePageData(dlg); if (rv<0) GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 0, 0); else GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 1, 0); } else if (GWEN_Dialog_GetIntProperty(dlg, "wiz_stack", GWEN_DialogProperty_Value, 0, -1)==PAGE_BANK) { rv=EBC_NewKeyFileDialog_GetBankPageData(dlg); if (rv<0) GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 0, 0); else GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 1, 0); } else if (GWEN_Dialog_GetIntProperty(dlg, "wiz_stack", GWEN_DialogProperty_Value, 0, -1)==PAGE_USER) { rv=EBC_NewKeyFileDialog_GetUserPageData(dlg); if (rv<0) GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 0, 0); else GWEN_Dialog_SetIntProperty(dlg, "wiz_next_button", GWEN_DialogProperty_Enabled, 0, 1, 0); } return GWEN_DialogEvent_ResultHandled; } return GWEN_DialogEvent_ResultNotHandled; } int GWENHYWFAR_CB EBC_NewKeyFileDialog_SignalHandler(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender) { EBC_NEWKEYFILE_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, EBC_NEWKEYFILE_DIALOG, dlg); assert(xdlg); switch (t) { case GWEN_DialogEvent_TypeInit: EBC_NewKeyFileDialog_Init(dlg); return GWEN_DialogEvent_ResultHandled;; case GWEN_DialogEvent_TypeFini: EBC_NewKeyFileDialog_Fini(dlg); return GWEN_DialogEvent_ResultHandled;; case GWEN_DialogEvent_TypeValueChanged: return EBC_NewKeyFileDialog_HandleValueChanged(dlg, sender); case GWEN_DialogEvent_TypeActivated: return EBC_NewKeyFileDialog_HandleActivated(dlg, sender); case GWEN_DialogEvent_TypeEnabled: case GWEN_DialogEvent_TypeDisabled: case GWEN_DialogEvent_TypeClose: case GWEN_DialogEvent_TypeLast: return GWEN_DialogEvent_ResultNotHandled; default: break; } return GWEN_DialogEvent_ResultNotHandled; } aqbanking-6.6.1/src/libs/plugins/backends/aqebics/dialogs/dlg_user_special_l.h0000664000175000017500000000465314043610745024412 00000000000000/*************************************************************************** begin : Mon Apr 12 2010 copyright : (C) 2018 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQEBICS_DLG_PINTAN_SPECIAL_H #define AQEBICS_DLG_PINTAN_SPECIAL_H #include #include #include #include #include #ifdef __cplusplus extern "C" { #endif GWEN_DIALOG *EBC_UserSpecialDialog_new(AB_PROVIDER *pro); int EBC_UserSpecialDialog_GetHttpVMajor(const GWEN_DIALOG *dlg); int EBC_UserSpecialDialog_GetHttpVMinor(const GWEN_DIALOG *dlg); void EBC_UserSpecialDialog_SetHttpVersion(GWEN_DIALOG *dlg, int vmajor, int vminor); uint32_t EBC_UserSpecialDialog_GetFlags(const GWEN_DIALOG *dlg); void EBC_UserSpecialDialog_SetFlags(GWEN_DIALOG *dlg, uint32_t fl); void EBC_UserSpecialDialog_AddFlags(GWEN_DIALOG *dlg, uint32_t fl); void EBC_UserSpecialDialog_SubFlags(GWEN_DIALOG *dlg, uint32_t fl); const char *EBC_UserSpecialDialog_GetEbicsVersion(const GWEN_DIALOG *dlg); void EBC_UserSpecialDialog_SetEbicsVersion(GWEN_DIALOG *dlg, const char *s); const char *EBC_UserSpecialDialog_GetSignVersion(const GWEN_DIALOG *dlg); void EBC_UserSpecialDialog_SetSignVersion(GWEN_DIALOG *dlg, const char *s); const char *EBC_UserSpecialDialog_GetCryptVersion(const GWEN_DIALOG *dlg); void EBC_UserSpecialDialog_SetCryptVersion(GWEN_DIALOG *dlg, const char *s); const char *EBC_UserSpecialDialog_GetAuthVersion(const GWEN_DIALOG *dlg); void EBC_UserSpecialDialog_SetAuthVersion(GWEN_DIALOG *dlg, const char *s); int EBC_UserSpecialDialog_GetHttpVMajor(const GWEN_DIALOG *dlg); int EBC_UserSpecialDialog_GetHttpVMinor(const GWEN_DIALOG *dlg); void EBC_UserSpecialDialog_SetHttpVersion(GWEN_DIALOG *dlg, int vmajor, int vminor); int EBC_UserSpecialDialog_GetSignKeySize(const GWEN_DIALOG *dlg); void EBC_UserSpecialDialog_SetSignKeySize(GWEN_DIALOG *dlg, int i); int EBC_UserSpecialDialog_GetCryptAndAuthKeySize(const GWEN_DIALOG *dlg); void EBC_UserSpecialDialog_SetCryptAndAuthKeySize(GWEN_DIALOG *dlg, int i); #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/plugins/backends/aqebics/dialogs/dlg_edituser_l.h0000664000175000017500000000155414043610745023555 00000000000000/*************************************************************************** begin : Thu Jul 08 2010 copyright : (C) 2018 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQEBICS_DLG_EDITUSER_H #define AQEBICS_DLG_EDITUSER_H #include #include #include #include #ifdef __cplusplus extern "C" { #endif GWEN_DIALOG *EBC_EditUserDialog_new(AB_PROVIDER *pro, AB_USER *u, int doLock); #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/plugins/backends/aqebics/dialogs/Makefile.in0000644000175000017500000006400015037736025022461 00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/libs/plugins/backends/aqebics/dialogs ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/distri.m4 $(top_srcdir)/m4/gwenhywfar.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/os.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libdialogs_la_LIBADD = am_libdialogs_la_OBJECTS = dlg_edituser.lo dlg_newkeyfile.lo \ dlg_user_special.lo libdialogs_la_OBJECTS = $(am_libdialogs_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/dlg_edituser.Plo \ ./$(DEPDIR)/dlg_newkeyfile.Plo \ ./$(DEPDIR)/dlg_user_special.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libdialogs_la_SOURCES) DIST_SOURCES = $(libdialogs_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(dlgdatadir)" DATA = $(dlgdata_DATA) HEADERS = $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADD_ACLOCAL_FLAGS = @ADD_ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AQBANKING_CLI_VERSION_STRING = @AQBANKING_CLI_VERSION_STRING@ AQBANKING_FINTS_VERSION_STRING = @AQBANKING_FINTS_VERSION_STRING@ AQBANKING_SO_AGE = @AQBANKING_SO_AGE@ AQBANKING_SO_CURRENT = @AQBANKING_SO_CURRENT@ AQBANKING_SO_EFFECTIVE = @AQBANKING_SO_EFFECTIVE@ AQBANKING_SO_REVISION = @AQBANKING_SO_REVISION@ AQBANKING_VERSION_BUILD = @AQBANKING_VERSION_BUILD@ AQBANKING_VERSION_FULL_STRING = @AQBANKING_VERSION_FULL_STRING@ AQBANKING_VERSION_MAJOR = @AQBANKING_VERSION_MAJOR@ AQBANKING_VERSION_MINOR = @AQBANKING_VERSION_MINOR@ AQBANKING_VERSION_PATCHLEVEL = @AQBANKING_VERSION_PATCHLEVEL@ AQBANKING_VERSION_RELEASE_STRING = @AQBANKING_VERSION_RELEASE_STRING@ AQBANKING_VERSION_STRING = @AQBANKING_VERSION_STRING@ AQBANKING_VERSION_TAG = @AQBANKING_VERSION_TAG@ AQEBICS_CFLAGS = @AQEBICS_CFLAGS@ AQEBICS_LIBS = @AQEBICS_LIBS@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATETIME = @DATETIME@ DEFS = @DEFS@ -DLOCALEDIR=\"$(localedir)\" DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_EXCLUDE_PATTERNS = @DOXYGEN_EXCLUDE_PATTERNS@ DOXYGEN_FILE_PATTERNS = @DOXYGEN_FILE_PATTERNS@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENGUI_GTK2_CFLAGS = @GWENGUI_GTK2_CFLAGS@ GWENGUI_GTK2_LIBS = @GWENGUI_GTK2_LIBS@ GWENHYWFAR_MINIMUM_VERSION = @GWENHYWFAR_MINIMUM_VERSION@ HAVE_GWENGUI_GTK2 = @HAVE_GWENGUI_GTK2@ HAVE_I18N = @HAVE_I18N@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIBXSLT_CFLAGS = @LIBXSLT_CFLAGS@ LIBXSLT_LIBS = @LIBXSLT_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_SUPPORTS_QT = @MSGFMT_SUPPORTS_QT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ TUTORIALS = @TUTORIALS@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XMLMERGE = @XMLMERGE@ XMLSEC_CFLAGS = @XMLSEC_CFLAGS@ XMLSEC_LIBS = @XMLSEC_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ aqbanking_backends = @aqbanking_backends@ aqbanking_cfg_searchdir = @aqbanking_cfg_searchdir@ aqbanking_data_searchdir = @aqbanking_data_searchdir@ aqbanking_headerdir = @aqbanking_headerdir@ aqbanking_headerdir_am = @aqbanking_headerdir_am@ aqbanking_includes = @aqbanking_includes@ aqbanking_internal_libs = @aqbanking_internal_libs@ aqbanking_ldflags = @aqbanking_ldflags@ aqbanking_libs = @aqbanking_libs@ aqbanking_locale_searchdir = @aqbanking_locale_searchdir@ aqbanking_modules = @aqbanking_modules@ aqbanking_pkgdatadir = @aqbanking_pkgdatadir@ aqbanking_plugin_searchdir = @aqbanking_plugin_searchdir@ aqbanking_plugindir = @aqbanking_plugindir@ aqbanking_plugins_backends_dirs = @aqbanking_plugins_backends_dirs@ aqbanking_plugins_backends_libs = @aqbanking_plugins_backends_libs@ aqbanking_plugins_bankinfo_dirs = @aqbanking_plugins_bankinfo_dirs@ aqbanking_plugins_bankinfo_libs = @aqbanking_plugins_bankinfo_libs@ aqbanking_plugins_imexporters_dirs = @aqbanking_plugins_imexporters_dirs@ aqbanking_plugins_imexporters_libs = @aqbanking_plugins_imexporters_libs@ aqbanking_plugins_parsers_dirs = @aqbanking_plugins_parsers_dirs@ aqbanking_symlinkdir = @aqbanking_symlinkdir@ aqbanking_sys_is_windows = @aqbanking_sys_is_windows@ aqbankingpp_modules = @aqbankingpp_modules@ aqebics_datadir = @aqebics_datadir@ aqebics_includes = @aqebics_includes@ aqebics_internal_libs = @aqebics_internal_libs@ aqebics_ldflags = @aqebics_ldflags@ aqebics_libs = @aqebics_libs@ aqfints_datadir = @aqfints_datadir@ aqhbci_datadir = @aqhbci_datadir@ aqhbci_includes = @aqhbci_includes@ aqhbci_internal_libs = @aqhbci_internal_libs@ aqhbci_ldflags = @aqhbci_ldflags@ aqhbci_libs = @aqhbci_libs@ aqofxconnect_includes = @aqofxconnect_includes@ aqofxconnect_internal_libs = @aqofxconnect_internal_libs@ aqofxconnect_libs = @aqofxconnect_libs@ aqpaypal_includes = @aqpaypal_includes@ aqpaypal_internal_libs = @aqpaypal_internal_libs@ aqpaypal_libs = @aqpaypal_libs@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gmp_libs = @gmp_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_dir = @gwenhywfar_dir@ gwenhywfar_has_crypt = @gwenhywfar_has_crypt@ gwenhywfar_headers = @gwenhywfar_headers@ gwenhywfar_includes = @gwenhywfar_includes@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_plugins = @gwenhywfar_plugins@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ typemaker2_exe = @typemaker2_exe@ visibility_cflags = @visibility_cflags@ with_aqebics = @with_aqebics@ with_aqhbci = @with_aqhbci@ AM_CPPFLAGS = -I$(top_srcdir)/src/libs -I$(top_builddir)/src/libs $(gwenhywfar_includes) -I$(srcdir)/../.. $(AQEBICS_CFLAGS) AM_CFLAGS = -DBUILDING_AQBANKING @visibility_cflags@ #typefiles= noinst_LTLIBRARIES = libdialogs.la noinst_HEADERS = \ dlg_edituser_l.h dlg_edituser_p.h \ dlg_newkeyfile_l.h dlg_newkeyfile_p.h \ dlg_user_special_l.h dlg_user_special_p.h libdialogs_la_SOURCES = \ dlg_edituser.c \ dlg_newkeyfile.c \ dlg_user_special.c dlgdatadir = $(datadir)/aqbanking/backends/aqebics/dialogs dlgdata_DATA = \ dlg_edituser.dlg \ dlg_newkeyfile.dlg \ dlg_user_special.dlg EXTRA_DIST = $(typefiles) $(dlgdata_DATA) all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libs/plugins/backends/aqebics/dialogs/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libs/plugins/backends/aqebics/dialogs/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libdialogs.la: $(libdialogs_la_OBJECTS) $(libdialogs_la_DEPENDENCIES) $(EXTRA_libdialogs_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libdialogs_la_OBJECTS) $(libdialogs_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dlg_edituser.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dlg_newkeyfile.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dlg_user_special.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-dlgdataDATA: $(dlgdata_DATA) @$(NORMAL_INSTALL) @list='$(dlgdata_DATA)'; test -n "$(dlgdatadir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(dlgdatadir)'"; \ $(MKDIR_P) "$(DESTDIR)$(dlgdatadir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(dlgdatadir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(dlgdatadir)" || exit $$?; \ done uninstall-dlgdataDATA: @$(NORMAL_UNINSTALL) @list='$(dlgdata_DATA)'; test -n "$(dlgdatadir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(dlgdatadir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(dlgdatadir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/dlg_edituser.Plo -rm -f ./$(DEPDIR)/dlg_newkeyfile.Plo -rm -f ./$(DEPDIR)/dlg_user_special.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dlgdataDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/dlg_edituser.Plo -rm -f ./$(DEPDIR)/dlg_newkeyfile.Plo -rm -f ./$(DEPDIR)/dlg_user_special.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-dlgdataDATA .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-generic clean-libtool clean-noinstLTLIBRARIES \ cscopelist-am ctags ctags-am distclean distclean-compile \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dlgdataDATA install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \ uninstall-dlgdataDATA .PRECIOUS: Makefile typefiles: $(typefiles) typemaker $(typefiles) sources: for d in $(SUBDIRS); do \ $(MAKE) -C $$d sources; \ done for f in $(dlgdata_DATA); do \ echo $(subdir)/$$f >>$(top_srcdir)/dlgsources; \ done for f in $(libdialogs_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done cppcheck: for f in $(libdialogs_la_SOURCES); do \ cppcheck --force $$f ; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: aqbanking-6.6.1/src/libs/plugins/backends/aqebics/dialogs/dlg_user_special.c0000664000175000017500000004450614546575647024116 00000000000000/*************************************************************************** begin : Mon Apr 12 2010 copyright : (C) 2010 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "dlg_user_special_p.h" #include "aqebics/client/user.h" #include "aqebics/client/provider.h" #include #include #include #include #include #include #include #include #define DIALOG_MINWIDTH 200 #define DIALOG_MINHEIGHT 100 #define I18N(msg) GWEN_I18N_Translate(PACKAGE, msg) #define I18N_NOOP(msg) msg #define I18S(msg) msg GWEN_INHERIT(GWEN_DIALOG, EBC_USER_SPECIAL_DIALOG) GWEN_DIALOG *EBC_UserSpecialDialog_new(AB_PROVIDER *pro) { GWEN_DIALOG *dlg; EBC_USER_SPECIAL_DIALOG *xdlg; GWEN_BUFFER *fbuf; int rv; dlg=GWEN_Dialog_new("ah_setup_pintan_special"); GWEN_NEW_OBJECT(EBC_USER_SPECIAL_DIALOG, xdlg); GWEN_INHERIT_SETDATA(GWEN_DIALOG, EBC_USER_SPECIAL_DIALOG, dlg, xdlg, EBC_UserSpecialDialog_FreeData); GWEN_Dialog_SetSignalHandler(dlg, EBC_UserSpecialDialog_SignalHandler); /* get path of dialog description file */ fbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_PathManager_FindFile(GWEN_PM_LIBNAME, GWEN_PM_SYSDATADIR, "aqbanking/backends/aqebics/dialogs/dlg_user_special.dlg", fbuf); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "Dialog description file not found (%d).", rv); GWEN_Buffer_free(fbuf); GWEN_Dialog_free(dlg); return NULL; } /* read dialog from dialog description file */ rv=GWEN_Dialog_ReadXmlFile(dlg, GWEN_Buffer_GetStart(fbuf)); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d).", rv); GWEN_Buffer_free(fbuf); GWEN_Dialog_free(dlg); return NULL; } GWEN_Buffer_free(fbuf); xdlg->provider=pro; xdlg->banking=AB_Provider_GetBanking(pro); /* preset */ xdlg->httpVMajor=1; xdlg->httpVMinor=1; /* done */ return dlg; } void GWENHYWFAR_CB EBC_UserSpecialDialog_FreeData(void *bp, void *p) { EBC_USER_SPECIAL_DIALOG *xdlg; xdlg=(EBC_USER_SPECIAL_DIALOG *) p; GWEN_FREE_OBJECT(xdlg); } int EBC_UserSpecialDialog_GetHttpVMajor(const GWEN_DIALOG *dlg) { EBC_USER_SPECIAL_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, EBC_USER_SPECIAL_DIALOG, dlg); assert(xdlg); return xdlg->httpVMajor; } int EBC_UserSpecialDialog_GetHttpVMinor(const GWEN_DIALOG *dlg) { EBC_USER_SPECIAL_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, EBC_USER_SPECIAL_DIALOG, dlg); assert(xdlg); return xdlg->httpVMinor; } void EBC_UserSpecialDialog_SetHttpVersion(GWEN_DIALOG *dlg, int vmajor, int vminor) { EBC_USER_SPECIAL_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, EBC_USER_SPECIAL_DIALOG, dlg); assert(xdlg); xdlg->httpVMajor=vmajor; xdlg->httpVMinor=vminor; } uint32_t EBC_UserSpecialDialog_GetFlags(const GWEN_DIALOG *dlg) { EBC_USER_SPECIAL_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, EBC_USER_SPECIAL_DIALOG, dlg); assert(xdlg); return xdlg->flags; } void EBC_UserSpecialDialog_SetFlags(GWEN_DIALOG *dlg, uint32_t fl) { EBC_USER_SPECIAL_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, EBC_USER_SPECIAL_DIALOG, dlg); assert(xdlg); xdlg->flags=fl; } void EBC_UserSpecialDialog_AddFlags(GWEN_DIALOG *dlg, uint32_t fl) { EBC_USER_SPECIAL_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, EBC_USER_SPECIAL_DIALOG, dlg); assert(xdlg); xdlg->flags&=~fl; } void EBC_UserSpecialDialog_SubFlags(GWEN_DIALOG *dlg, uint32_t fl) { EBC_USER_SPECIAL_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, EBC_USER_SPECIAL_DIALOG, dlg); assert(xdlg); xdlg->flags&=~fl; } const char *EBC_UserSpecialDialog_GetEbicsVersion(const GWEN_DIALOG *dlg) { EBC_USER_SPECIAL_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, EBC_USER_SPECIAL_DIALOG, dlg); assert(xdlg); return xdlg->ebicsVersion; } void EBC_UserSpecialDialog_SetEbicsVersion(GWEN_DIALOG *dlg, const char *s) { EBC_USER_SPECIAL_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, EBC_USER_SPECIAL_DIALOG, dlg); assert(xdlg); free(xdlg->ebicsVersion); if (s) xdlg->ebicsVersion=strdup(s); else xdlg->ebicsVersion=NULL; } const char *EBC_UserSpecialDialog_GetSignVersion(const GWEN_DIALOG *dlg) { EBC_USER_SPECIAL_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, EBC_USER_SPECIAL_DIALOG, dlg); assert(xdlg); return xdlg->signVersion; } void EBC_UserSpecialDialog_SetSignVersion(GWEN_DIALOG *dlg, const char *s) { EBC_USER_SPECIAL_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, EBC_USER_SPECIAL_DIALOG, dlg); assert(xdlg); free(xdlg->signVersion); if (s) xdlg->signVersion=strdup(s); else xdlg->signVersion=NULL; } const char *EBC_UserSpecialDialog_GetCryptVersion(const GWEN_DIALOG *dlg) { EBC_USER_SPECIAL_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, EBC_USER_SPECIAL_DIALOG, dlg); assert(xdlg); return xdlg->cryptVersion; } void EBC_UserSpecialDialog_SetCryptVersion(GWEN_DIALOG *dlg, const char *s) { EBC_USER_SPECIAL_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, EBC_USER_SPECIAL_DIALOG, dlg); assert(xdlg); free(xdlg->cryptVersion); if (s) xdlg->cryptVersion=strdup(s); else xdlg->cryptVersion=NULL; } const char *EBC_UserSpecialDialog_GetAuthVersion(const GWEN_DIALOG *dlg) { EBC_USER_SPECIAL_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, EBC_USER_SPECIAL_DIALOG, dlg); assert(xdlg); return xdlg->authVersion; } void EBC_UserSpecialDialog_SetAuthVersion(GWEN_DIALOG *dlg, const char *s) { EBC_USER_SPECIAL_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, EBC_USER_SPECIAL_DIALOG, dlg); assert(xdlg); free(xdlg->authVersion); if (s) xdlg->authVersion=strdup(s); else xdlg->authVersion=NULL; } int EBC_UserSpecialDialog_GetSignKeySize(const GWEN_DIALOG *dlg) { EBC_USER_SPECIAL_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, EBC_USER_SPECIAL_DIALOG, dlg); assert(xdlg); return xdlg->signKeySize; } void EBC_UserSpecialDialog_SetSignKeySize(GWEN_DIALOG *dlg, int i) { EBC_USER_SPECIAL_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, EBC_USER_SPECIAL_DIALOG, dlg); assert(xdlg); xdlg->signKeySize=i; } int EBC_UserSpecialDialog_GetCryptAndAuthKeySize(const GWEN_DIALOG *dlg) { EBC_USER_SPECIAL_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, EBC_USER_SPECIAL_DIALOG, dlg); assert(xdlg); return xdlg->cryptAndAuthKeySize; } void EBC_UserSpecialDialog_SetCryptAndAuthKeySize(GWEN_DIALOG *dlg, int i) { EBC_USER_SPECIAL_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, EBC_USER_SPECIAL_DIALOG, dlg); assert(xdlg); xdlg->cryptAndAuthKeySize=i; } void EBC_UserSpecialDialog_Init(GWEN_DIALOG *dlg) { EBC_USER_SPECIAL_DIALOG *xdlg; GWEN_DB_NODE *dbPrefs; int i; const char *s; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, EBC_USER_SPECIAL_DIALOG, dlg); assert(xdlg); dbPrefs=GWEN_Dialog_GetPreferences(dlg); GWEN_Dialog_SetCharProperty(dlg, "", GWEN_DialogProperty_Title, 0, I18N("EBICS Special Settings"), 0); GWEN_Dialog_SetCharProperty(dlg, "ebicsVersionCombo", GWEN_DialogProperty_AddValue, 0, "2.3 (H002)", 0); GWEN_Dialog_SetCharProperty(dlg, "ebicsVersionCombo", GWEN_DialogProperty_AddValue, 0, "2.4 (H003)", 0); GWEN_Dialog_SetCharProperty(dlg, "ebicsVersionCombo", GWEN_DialogProperty_AddValue, 0, "2.5 (H004)", 0); GWEN_Dialog_SetCharProperty(dlg, "signVersionCombo", GWEN_DialogProperty_AddValue, 0, "A004", 0); GWEN_Dialog_SetCharProperty(dlg, "signVersionCombo", GWEN_DialogProperty_AddValue, 0, "A005", 0); GWEN_Dialog_SetCharProperty(dlg, "cryptVersionCombo", GWEN_DialogProperty_AddValue, 0, "E001", 0); GWEN_Dialog_SetCharProperty(dlg, "cryptVersionCombo", GWEN_DialogProperty_AddValue, 0, "E002", 0); GWEN_Dialog_SetCharProperty(dlg, "authVersionCombo", GWEN_DialogProperty_AddValue, 0, "X001", 0); GWEN_Dialog_SetCharProperty(dlg, "authVersionCombo", GWEN_DialogProperty_AddValue, 0, "X002", 0); GWEN_Dialog_SetCharProperty(dlg, "httpVersionCombo", GWEN_DialogProperty_AddValue, 0, "1.0", 0); GWEN_Dialog_SetCharProperty(dlg, "httpVersionCombo", GWEN_DialogProperty_AddValue, 0, "1.1", 0); GWEN_Dialog_SetCharProperty(dlg, "signKeySizeCombo", GWEN_DialogProperty_AddValue, 0, "1024", 0); GWEN_Dialog_SetCharProperty(dlg, "signKeySizeCombo", GWEN_DialogProperty_AddValue, 0, "2048", 0); GWEN_Dialog_SetCharProperty(dlg, "signKeySizeCombo", GWEN_DialogProperty_AddValue, 0, "4096", 0); GWEN_Dialog_SetCharProperty(dlg, "signKeySizeCombo", GWEN_DialogProperty_AddValue, 0, "8192", 0); GWEN_Dialog_SetCharProperty(dlg, "cryptAndAuthKeySizeCombo", GWEN_DialogProperty_AddValue, 0, "1024", 0); GWEN_Dialog_SetCharProperty(dlg, "cryptAndAuthKeySizeCombo", GWEN_DialogProperty_AddValue, 0, "2048", 0); GWEN_Dialog_SetCharProperty(dlg, "cryptAndAuthKeySizeCombo", GWEN_DialogProperty_AddValue, 0, "4096", 0); GWEN_Dialog_SetCharProperty(dlg, "cryptAndAuthKeySizeCombo", GWEN_DialogProperty_AddValue, 0, "8192", 0); /* toGui */ /* protocol version */ s=xdlg->ebicsVersion; if (!(s && *s)) s="H003"; if (strcasecmp(s, "H002")==0) GWEN_Dialog_SetIntProperty(dlg, "ebicsVersionCombo", GWEN_DialogProperty_Value, 0, 0, 0); else if (strcasecmp(s, "H003")==0) GWEN_Dialog_SetIntProperty(dlg, "ebicsVersionCombo", GWEN_DialogProperty_Value, 0, 1, 0); else if (strcasecmp(s, "H004")==0) GWEN_Dialog_SetIntProperty(dlg, "ebicsVersionCombo", GWEN_DialogProperty_Value, 0, 2, 0); /* signature version */ s=xdlg->signVersion; if (!(s && *s)) s="A005"; if (strcasecmp(s, "A004")==0) GWEN_Dialog_SetIntProperty(dlg, "signVersionCombo", GWEN_DialogProperty_Value, 0, 0, 0); else if (strcasecmp(s, "A005")==0) GWEN_Dialog_SetIntProperty(dlg, "signVersionCombo", GWEN_DialogProperty_Value, 0, 1, 0); /* crypt version */ s=xdlg->cryptVersion; if (!(s && *s)) s="E002"; if (strcasecmp(s, "E001")==0) GWEN_Dialog_SetIntProperty(dlg, "cryptVersionCombo", GWEN_DialogProperty_Value, 0, 0, 0); else if (strcasecmp(s, "E002")==0) GWEN_Dialog_SetIntProperty(dlg, "cryptVersionCombo", GWEN_DialogProperty_Value, 0, 1, 0); /* auth version */ s=xdlg->authVersion; if (!(s && *s)) s="X002"; if (strcasecmp(s, "X001")==0) GWEN_Dialog_SetIntProperty(dlg, "authVersionCombo", GWEN_DialogProperty_Value, 0, 0, 0); else if (strcasecmp(s, "X002")==0) GWEN_Dialog_SetIntProperty(dlg, "authVersionCombo", GWEN_DialogProperty_Value, 0, 1, 0); /* http version */ switch (((xdlg->httpVMajor)<<8)+xdlg->httpVMinor) { case 0x0100: GWEN_Dialog_SetIntProperty(dlg, "httpVersionCombo", GWEN_DialogProperty_Value, 0, 0, 0); break; case 0x0101: GWEN_Dialog_SetIntProperty(dlg, "httpVersionCombo", GWEN_DialogProperty_Value, 0, 1, 0); break; default: break; } switch (xdlg->signKeySize) { case 128: GWEN_Dialog_SetIntProperty(dlg, "signKeySizeCombo", GWEN_DialogProperty_Value, 0, 0, 0); break; case 256: default: GWEN_Dialog_SetIntProperty(dlg, "signKeySizeCombo", GWEN_DialogProperty_Value, 0, 1, 0); break; case 512: GWEN_Dialog_SetIntProperty(dlg, "signKeySizeCombo", GWEN_DialogProperty_Value, 0, 2, 0); break; case 1024: GWEN_Dialog_SetIntProperty(dlg, "signKeySizeCombo", GWEN_DialogProperty_Value, 0, 3, 0); break; } switch (xdlg->cryptAndAuthKeySize) { case 128: GWEN_Dialog_SetIntProperty(dlg, "cryptAndAuthKeySizeCombo", GWEN_DialogProperty_Value, 0, 0, 0); break; case 256: default: GWEN_Dialog_SetIntProperty(dlg, "cryptAndAuthKeySizeCombo", GWEN_DialogProperty_Value, 0, 1, 0); break; case 512: GWEN_Dialog_SetIntProperty(dlg, "cryptAndAuthKeySizeCombo", GWEN_DialogProperty_Value, 0, 2, 0); break; case 1024: GWEN_Dialog_SetIntProperty(dlg, "cryptAndAuthKeySizeCombo", GWEN_DialogProperty_Value, 0, 3, 0); break; } GWEN_Dialog_SetIntProperty(dlg, "forceSslv3Check", GWEN_DialogProperty_Value, 0, (xdlg->flags & EBC_USER_FLAGS_FORCE_SSLV3)?1:0, 0); GWEN_Dialog_SetIntProperty(dlg, "useIzlCheck", GWEN_DialogProperty_Value, 0, (xdlg->flags & EBC_USER_FLAGS_USE_IZL)?1:0, 0); GWEN_Dialog_SetIntProperty(dlg, "noEuCheck", GWEN_DialogProperty_Value, 0, (xdlg->flags & EBC_USER_FLAGS_NO_EU)?1:0, 0); /* read width */ i=GWEN_DB_GetIntValue(dbPrefs, "dialog_width", 0, -1); if (i>=DIALOG_MINWIDTH) GWEN_Dialog_SetIntProperty(dlg, "", GWEN_DialogProperty_Width, 0, i, 0); /* read height */ i=GWEN_DB_GetIntValue(dbPrefs, "dialog_height", 0, -1); if (i>=DIALOG_MINHEIGHT) GWEN_Dialog_SetIntProperty(dlg, "", GWEN_DialogProperty_Height, 0, i, 0); } void EBC_UserSpecialDialog_Fini(GWEN_DIALOG *dlg) { EBC_USER_SPECIAL_DIALOG *xdlg; int i; GWEN_DB_NODE *dbPrefs; uint32_t flags; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, EBC_USER_SPECIAL_DIALOG, dlg); assert(xdlg); dbPrefs=GWEN_Dialog_GetPreferences(dlg); /* fromGui */ i=GWEN_Dialog_GetIntProperty(dlg, "ebicsVersionCombo", GWEN_DialogProperty_Value, 0, -1); switch (i) { case 0: EBC_UserSpecialDialog_SetEbicsVersion(dlg, "H002"); break; case 1: EBC_UserSpecialDialog_SetEbicsVersion(dlg, "H003"); break; default: case 2: EBC_UserSpecialDialog_SetEbicsVersion(dlg, "H004"); break; } i=GWEN_Dialog_GetIntProperty(dlg, "signVersionCombo", GWEN_DialogProperty_Value, 0, -1); switch (i) { case 0: EBC_UserSpecialDialog_SetSignVersion(dlg, "A004"); break; default: case 1: EBC_UserSpecialDialog_SetSignVersion(dlg, "A005"); break; } i=GWEN_Dialog_GetIntProperty(dlg, "cryptVersionCombo", GWEN_DialogProperty_Value, 0, -1); switch (i) { case 0: EBC_UserSpecialDialog_SetCryptVersion(dlg, "E001"); break; default: case 1: EBC_UserSpecialDialog_SetCryptVersion(dlg, "E002"); break; } i=GWEN_Dialog_GetIntProperty(dlg, "authVersionCombo", GWEN_DialogProperty_Value, 0, -1); switch (i) { case 0: EBC_UserSpecialDialog_SetAuthVersion(dlg, "X001"); break; default: case 1: EBC_UserSpecialDialog_SetAuthVersion(dlg, "X002"); break; } i=GWEN_Dialog_GetIntProperty(dlg, "httpVersionCombo", GWEN_DialogProperty_Value, 0, -1); switch (i) { case 0: xdlg->httpVMajor=1; xdlg->httpVMinor=0; break; default: case 1: xdlg->httpVMajor=1; xdlg->httpVMinor=1; break; } i=GWEN_Dialog_GetIntProperty(dlg, "signKeySizeCombo", GWEN_DialogProperty_Value, 0, -1); switch (i) { case 0: xdlg->signKeySize=128; break; default: case 1: xdlg->signKeySize=256; break; case 2: xdlg->signKeySize=512; break; case 3: xdlg->signKeySize=1024; break; } i=GWEN_Dialog_GetIntProperty(dlg, "cryptAndAuthKeySizeCombo", GWEN_DialogProperty_Value, 0, -1); switch (i) { case 0: xdlg->cryptAndAuthKeySize=128; break; default: case 1: xdlg->cryptAndAuthKeySize=256; break; case 2: xdlg->cryptAndAuthKeySize=512; break; case 3: xdlg->cryptAndAuthKeySize=1024; break; } flags=0; if (GWEN_Dialog_GetIntProperty(dlg, "forceSslv3Check", GWEN_DialogProperty_Value, 0, 0)) flags|=EBC_USER_FLAGS_FORCE_SSLV3; if (GWEN_Dialog_GetIntProperty(dlg, "useIzlCheck", GWEN_DialogProperty_Value, 0, 0)) flags|=EBC_USER_FLAGS_USE_IZL; if (GWEN_Dialog_GetIntProperty(dlg, "noEuCheck", GWEN_DialogProperty_Value, 0, 0)) flags|=EBC_USER_FLAGS_NO_EU; xdlg->flags=flags; /* store dialog width */ i=GWEN_Dialog_GetIntProperty(dlg, "", GWEN_DialogProperty_Width, 0, -1); GWEN_DB_SetIntValue(dbPrefs, GWEN_DB_FLAGS_OVERWRITE_VARS, "dialog_width", i); /* store dialog height */ i=GWEN_Dialog_GetIntProperty(dlg, "", GWEN_DialogProperty_Height, 0, -1); GWEN_DB_SetIntValue(dbPrefs, GWEN_DB_FLAGS_OVERWRITE_VARS, "dialog_height", i); } int EBC_UserSpecialDialog_HandleActivated(GWEN_DIALOG *dlg, const char *sender) { DBG_ERROR(0, "Activated: %s", sender); if (strcasecmp(sender, "okButton")==0) return GWEN_DialogEvent_ResultAccept; else if (strcasecmp(sender, "abortButton")==0) return GWEN_DialogEvent_ResultReject; else if (strcasecmp(sender, "helpButton")==0) { /* TODO: open a help dialog */ } return GWEN_DialogEvent_ResultNotHandled; } int GWENHYWFAR_CB EBC_UserSpecialDialog_SignalHandler(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender) { EBC_USER_SPECIAL_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, EBC_USER_SPECIAL_DIALOG, dlg); assert(xdlg); switch (t) { case GWEN_DialogEvent_TypeInit: EBC_UserSpecialDialog_Init(dlg); return GWEN_DialogEvent_ResultHandled;; case GWEN_DialogEvent_TypeFini: EBC_UserSpecialDialog_Fini(dlg); return GWEN_DialogEvent_ResultHandled;; case GWEN_DialogEvent_TypeValueChanged: return GWEN_DialogEvent_ResultHandled;; case GWEN_DialogEvent_TypeActivated: return EBC_UserSpecialDialog_HandleActivated(dlg, sender); case GWEN_DialogEvent_TypeEnabled: case GWEN_DialogEvent_TypeDisabled: case GWEN_DialogEvent_TypeClose: case GWEN_DialogEvent_TypeLast: return GWEN_DialogEvent_ResultNotHandled; default: break; } return GWEN_DialogEvent_ResultNotHandled; } aqbanking-6.6.1/src/libs/plugins/backends/aqebics/dialogs/dlg_newkeyfile.dlg0000664000175000017500000001125314043610745024074 00000000000000 aqbanking-6.6.1/src/libs/plugins/backends/aqebics/dialogs/dlg_user_special_p.h0000664000175000017500000000241014043610745024403 00000000000000/*************************************************************************** begin : Wed Apr 14 2010 copyright : (C) 2018 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQEBICS_DLG_PINTAN_SPECIAL_P_H #define AQEBICS_DLG_PINTAN_SPECIAL_P_H #include "dlg_user_special_l.h" typedef struct EBC_USER_SPECIAL_DIALOG EBC_USER_SPECIAL_DIALOG; struct EBC_USER_SPECIAL_DIALOG { AB_PROVIDER *provider; AB_BANKING *banking; int httpVMajor; int httpVMinor; char *ebicsVersion; char *signVersion; char *cryptVersion; char *authVersion; int signKeySize; int cryptAndAuthKeySize; uint32_t flags; }; static void GWENHYWFAR_CB EBC_UserSpecialDialog_FreeData(void *bp, void *p); static int GWENHYWFAR_CB EBC_UserSpecialDialog_SignalHandler(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqebics/dialogs/dlg_newkeyfile_l.h0000664000175000017500000000556014043610745024074 00000000000000/*************************************************************************** begin : Sat Jun 26 2010 copyright : (C) 2018 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQEBICS_DLG_NEWKEYFILE_H #define AQEBICS_DLG_NEWKEYFILE_H #include #include #include #include #include #ifdef __cplusplus extern "C" { #endif GWEN_DIALOG *EBC_NewKeyFileDialog_new(AB_PROVIDER *pro); const char *EBC_NewKeyFileDialog_GetFileName(const GWEN_DIALOG *dlg); void EBC_NewKeyFileDialog_SetFileName(GWEN_DIALOG *dlg, const char *s); const char *EBC_NewKeyFileDialog_GetBankCode(const GWEN_DIALOG *dlg); void EBC_NewKeyFileDialog_SetBankCode(GWEN_DIALOG *dlg, const char *s); const char *EBC_NewKeyFileDialog_GetBankName(const GWEN_DIALOG *dlg); void EBC_NewKeyFileDialog_SetBankName(GWEN_DIALOG *dlg, const char *s); const char *EBC_NewKeyFileDialog_GetUserName(const GWEN_DIALOG *dlg); void EBC_NewKeyFileDialog_SetUserName(GWEN_DIALOG *dlg, const char *s); const char *EBC_NewKeyFileDialog_GetUserId(const GWEN_DIALOG *dlg); void EBC_NewKeyFileDialog_SetUserId(GWEN_DIALOG *dlg, const char *s); const char *EBC_NewKeyFileDialog_GetCustomerId(const GWEN_DIALOG *dlg); void EBC_NewKeyFileDialog_SetCustomerId(GWEN_DIALOG *dlg, const char *s); const char *EBC_NewKeyFileDialog_GetUrl(const GWEN_DIALOG *dlg); void EBC_NewKeyFileDialog_SetUrl(GWEN_DIALOG *dlg, const char *s); const char *EBC_NewKeyFileDialog_GetEbicsVersion(const GWEN_DIALOG *dlg); void EBC_NewKeyFileDialog_SetEbicsVersion(GWEN_DIALOG *dlg, const char *s); const char *EBC_NewKeyFileDialog_GetSignVersion(const GWEN_DIALOG *dlg); void EBC_NewKeyFileDialog_SetSignVersion(GWEN_DIALOG *dlg, const char *s); const char *EBC_NewKeyFileDialog_GetCryptVersion(const GWEN_DIALOG *dlg); void EBC_NewKeyFileDialog_SetCryptVersion(GWEN_DIALOG *dlg, const char *s); const char *EBC_NewKeyFileDialog_GetAuthVersion(const GWEN_DIALOG *dlg); void EBC_NewKeyFileDialog_SetAuthVersion(GWEN_DIALOG *dlg, const char *s); const char *EBC_NewKeyFileDialog_GetHostId(const GWEN_DIALOG *dlg); void EBC_NewKeyFileDialog_SetHostId(GWEN_DIALOG *dlg, const char *s); uint32_t EBC_NewKeyFileDialog_GetFlags(const GWEN_DIALOG *dlg); void EBC_NewKeyFileDialog_SetFlags(GWEN_DIALOG *dlg, uint32_t fl); void EBC_NewKeyFileDialog_AddFlags(GWEN_DIALOG *dlg, uint32_t fl); void EBC_NewKeyFileDialog_SubFlags(GWEN_DIALOG *dlg, uint32_t fl); AB_USER *EBC_NewKeyFileDialog_GetUser(const GWEN_DIALOG *dlg); #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/plugins/backends/aqebics/dialogs/dlg_edituser.dlg0000664000175000017500000001076614043610745023566 00000000000000 aqbanking-6.6.1/src/libs/plugins/backends/aqebics/dialogs/dlg_newkeyfile_p.h0000664000175000017500000000311714043610745024074 00000000000000/*************************************************************************** begin : Sat Jun 26 2010 copyright : (C) 2018 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifndef AQEBICS_DLG_NEWKEYFILE_P_H #define AQEBICS_DLG_NEWKEYFILE_P_H #include "dlg_newkeyfile_l.h" typedef struct EBC_NEWKEYFILE_DIALOG EBC_NEWKEYFILE_DIALOG; struct EBC_NEWKEYFILE_DIALOG { AB_PROVIDER *provider; AB_BANKING *banking; char *fileName; char *bankCode; char *bankName; char *url; char *hostId; char *userName; char *userId; char *customerId; char *ebicsVersion; char *signVersion; char *cryptVersion; char *authVersion; int httpVMajor; int httpVMinor; int signKeySize; int cryptAndAuthKeySize; uint32_t flags; AB_USER *user; }; static void GWENHYWFAR_CB EBC_NewKeyFileDialog_FreeData(void *bp, void *p); static int GWENHYWFAR_CB EBC_NewKeyFileDialog_SignalHandler(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender); static int EBC_NewKeyFileDialog_GetFilePageData(GWEN_DIALOG *dlg); void EBC_NewKeyFileDialog_SetBankPageData(GWEN_DIALOG *dlg); void EBC_NewKeyFileDialog_SetUserPageData(GWEN_DIALOG *dlg); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqebics/dialogs/dlg_user_special.dlg0000664000175000017500000000461714043610745024416 00000000000000 aqbanking-6.6.1/src/libs/plugins/backends/aqebics/dialogs/dlg_edituser.c0000664000175000017500000006573714546575647023275 00000000000000/*************************************************************************** begin : Thu Jul 08 2010 copyright : (C) 2018 by Martin Preuss email : martin@aqbanking.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "dlg_edituser_p.h" #include "aqebics/client/provider_l.h" #include "aqebics/client/user.h" #include #include #include #include #include #include #include #include #include #include #define DIALOG_MINWIDTH 200 #define DIALOG_MINHEIGHT 200 #define I18N(msg) GWEN_I18N_Translate(PACKAGE, msg) #define I18N_NOOP(msg) msg #define I18S(msg) msg GWEN_INHERIT(GWEN_DIALOG, EBC_EDIT_USER_DIALOG) GWEN_DIALOG *EBC_EditUserDialog_new(AB_PROVIDER *pro, AB_USER *u, int doLock) { GWEN_DIALOG *dlg; EBC_EDIT_USER_DIALOG *xdlg; GWEN_BUFFER *fbuf; int rv; dlg=GWEN_Dialog_new("ebc_edit_user"); GWEN_NEW_OBJECT(EBC_EDIT_USER_DIALOG, xdlg); GWEN_INHERIT_SETDATA(GWEN_DIALOG, EBC_EDIT_USER_DIALOG, dlg, xdlg, EBC_EditUserDialog_FreeData); GWEN_Dialog_SetSignalHandler(dlg, EBC_EditUserDialog_SignalHandler); /* get path of dialog description file */ fbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_PathManager_FindFile(GWEN_PM_LIBNAME, GWEN_PM_SYSDATADIR, "aqbanking/backends/aqebics/dialogs/dlg_edituser.dlg", fbuf); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "Dialog description file not found (%d).", rv); GWEN_Buffer_free(fbuf); GWEN_Dialog_free(dlg); return NULL; } /* read dialog from dialog description file */ rv=GWEN_Dialog_ReadXmlFile(dlg, GWEN_Buffer_GetStart(fbuf)); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d).", rv); GWEN_Buffer_free(fbuf); GWEN_Dialog_free(dlg); return NULL; } GWEN_Buffer_free(fbuf); /* preset */ xdlg->provider=pro; xdlg->banking=AB_Provider_GetBanking(pro); xdlg->user=u; xdlg->doLock=doLock; /* done */ return dlg; } void GWENHYWFAR_CB EBC_EditUserDialog_FreeData(void *bp, void *p) { EBC_EDIT_USER_DIALOG *xdlg; xdlg=(EBC_EDIT_USER_DIALOG *) p; GWEN_FREE_OBJECT(xdlg); } void EBC_EditUserDialog_Init(GWEN_DIALOG *dlg) { EBC_EDIT_USER_DIALOG *xdlg; GWEN_DB_NODE *dbPrefs; int i; const char *s; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, EBC_EDIT_USER_DIALOG, dlg); assert(xdlg); dbPrefs=GWEN_Dialog_GetPreferences(dlg); /* init */ GWEN_Dialog_SetCharProperty(dlg, "", GWEN_DialogProperty_Title, 0, I18N("Edit User"), 0); s=AB_User_GetUserName(xdlg->user); if (s && *s) GWEN_Dialog_SetCharProperty(dlg, "userNameEdit", GWEN_DialogProperty_Value, 0, s, 0); s=AB_User_GetBankCode(xdlg->user); if (s && *s) GWEN_Dialog_SetCharProperty(dlg, "bankCodeEdit", GWEN_DialogProperty_Value, 0, s, 0); s=AB_User_GetUserId(xdlg->user); if (s && *s) GWEN_Dialog_SetCharProperty(dlg, "userIdEdit", GWEN_DialogProperty_Value, 0, s, 0); s=AB_User_GetCustomerId(xdlg->user); GWEN_Dialog_SetCharProperty(dlg, "customerIdEdit", GWEN_DialogProperty_Value, 0, s, 0); s=EBC_User_GetServerUrl(xdlg->user); if (s && *s) GWEN_Dialog_SetCharProperty(dlg, "urlEdit", GWEN_DialogProperty_Value, 0, s, 0); s=EBC_User_GetPeerId(xdlg->user); if (s && *s) GWEN_Dialog_SetCharProperty(dlg, "hostIdEdit", GWEN_DialogProperty_Value, 0, s, 0); GWEN_Dialog_SetCharProperty(dlg, "ebicsVersionCombo", GWEN_DialogProperty_AddValue, 0, "2.3 (H002)", 0); GWEN_Dialog_SetCharProperty(dlg, "ebicsVersionCombo", GWEN_DialogProperty_AddValue, 0, "2.4 (H003)", 0); GWEN_Dialog_SetCharProperty(dlg, "ebicsVersionCombo", GWEN_DialogProperty_AddValue, 0, "2.5 (H004)", 0); GWEN_Dialog_SetCharProperty(dlg, "signVersionCombo", GWEN_DialogProperty_AddValue, 0, "A004", 0); GWEN_Dialog_SetCharProperty(dlg, "signVersionCombo", GWEN_DialogProperty_AddValue, 0, "A005", 0); GWEN_Dialog_SetCharProperty(dlg, "cryptVersionCombo", GWEN_DialogProperty_AddValue, 0, "E001", 0); GWEN_Dialog_SetCharProperty(dlg, "cryptVersionCombo", GWEN_DialogProperty_AddValue, 0, "E002", 0); GWEN_Dialog_SetCharProperty(dlg, "authVersionCombo", GWEN_DialogProperty_AddValue, 0, "X001", 0); GWEN_Dialog_SetCharProperty(dlg, "authVersionCombo", GWEN_DialogProperty_AddValue, 0, "X002", 0); GWEN_Dialog_SetCharProperty(dlg, "httpVersionCombo", GWEN_DialogProperty_AddValue, 0, "1.0", 0); GWEN_Dialog_SetCharProperty(dlg, "httpVersionCombo", GWEN_DialogProperty_AddValue, 0, "1.1", 0); GWEN_Dialog_SetCharProperty(dlg, "statusCombo", GWEN_DialogProperty_AddValue, 0, I18N("EBICSUserStatus|new"), 0); GWEN_Dialog_SetCharProperty(dlg, "statusCombo", GWEN_DialogProperty_AddValue, 0, I18N("EBICSUserStatus|init1"), 0); GWEN_Dialog_SetCharProperty(dlg, "statusCombo", GWEN_DialogProperty_AddValue, 0, I18N("EBICSUserStatus|init2"), 0); GWEN_Dialog_SetCharProperty(dlg, "statusCombo", GWEN_DialogProperty_AddValue, 0, I18N("EBICSUserStatus|enabled"), 0); GWEN_Dialog_SetCharProperty(dlg, "statusCombo", GWEN_DialogProperty_AddValue, 0, I18N("EBICSUserStatus|disabled"), 0); /* toGui */ EBC_EditUserDialog_toGui(dlg); /* read width */ i=GWEN_DB_GetIntValue(dbPrefs, "dialog_width", 0, -1); if (i>=DIALOG_MINWIDTH) GWEN_Dialog_SetIntProperty(dlg, "", GWEN_DialogProperty_Width, 0, i, 0); /* read height */ i=GWEN_DB_GetIntValue(dbPrefs, "dialog_height", 0, -1); if (i>=DIALOG_MINHEIGHT) GWEN_Dialog_SetIntProperty(dlg, "", GWEN_DialogProperty_Height, 0, i, 0); } static void removeAllSpaces(uint8_t *s) { uint8_t *d; d=s; while (*s) { if (*s>33) *(d++)=*s; s++; } *d=0; } void EBC_EditUserDialog_toGui(GWEN_DIALOG *dlg) { EBC_EDIT_USER_DIALOG *xdlg; uint32_t flags; const char *s; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, EBC_EDIT_USER_DIALOG, dlg); assert(xdlg); /* protocol version */ s=EBC_User_GetProtoVersion(xdlg->user); if (!(s && *s)) s="H003"; if (strcasecmp(s, "H002")==0) GWEN_Dialog_SetIntProperty(dlg, "ebicsVersionCombo", GWEN_DialogProperty_Value, 0, 0, 0); else if (strcasecmp(s, "H003")==0) GWEN_Dialog_SetIntProperty(dlg, "ebicsVersionCombo", GWEN_DialogProperty_Value, 0, 1, 0); else if (strcasecmp(s, "H004")==0) GWEN_Dialog_SetIntProperty(dlg, "ebicsVersionCombo", GWEN_DialogProperty_Value, 0, 2, 0); /* signature version */ s=EBC_User_GetSignVersion(xdlg->user); if (!(s && *s)) s="A005"; if (strcasecmp(s, "A004")==0) GWEN_Dialog_SetIntProperty(dlg, "signVersionCombo", GWEN_DialogProperty_Value, 0, 0, 0); else if (strcasecmp(s, "A005")==0) GWEN_Dialog_SetIntProperty(dlg, "signVersionCombo", GWEN_DialogProperty_Value, 0, 1, 0); /* crypt version */ s=EBC_User_GetCryptVersion(xdlg->user); if (!(s && *s)) s="E002"; if (strcasecmp(s, "E001")==0) GWEN_Dialog_SetIntProperty(dlg, "cryptVersionCombo", GWEN_DialogProperty_Value, 0, 0, 0); else if (strcasecmp(s, "E002")==0) GWEN_Dialog_SetIntProperty(dlg, "cryptVersionCombo", GWEN_DialogProperty_Value, 0, 1, 0); /* auth version */ s=EBC_User_GetAuthVersion(xdlg->user); if (!(s && *s)) s="X002"; if (strcasecmp(s, "X001")==0) GWEN_Dialog_SetIntProperty(dlg, "authVersionCombo", GWEN_DialogProperty_Value, 0, 0, 0); else if (strcasecmp(s, "X002")==0) GWEN_Dialog_SetIntProperty(dlg, "authVersionCombo", GWEN_DialogProperty_Value, 0, 1, 0); /* status */ switch (EBC_User_GetStatus(xdlg->user)) { case EBC_UserStatus_New: GWEN_Dialog_SetIntProperty(dlg, "statusCombo", GWEN_DialogProperty_Value, 0, 0, 0); break; case EBC_UserStatus_Init1: GWEN_Dialog_SetIntProperty(dlg, "statusCombo", GWEN_DialogProperty_Value, 0, 1, 0); break; case EBC_UserStatus_Init2: GWEN_Dialog_SetIntProperty(dlg, "statusCombo", GWEN_DialogProperty_Value, 0, 2, 0); break; case EBC_UserStatus_Enabled: GWEN_Dialog_SetIntProperty(dlg, "statusCombo", GWEN_DialogProperty_Value, 0, 3, 0); break; case EBC_UserStatus_Disabled: GWEN_Dialog_SetIntProperty(dlg, "statusCombo", GWEN_DialogProperty_Value, 0, 4, 0); break; default: break; } /* http version */ switch (((EBC_User_GetHttpVMajor(xdlg->user))<<8)+EBC_User_GetHttpVMinor(xdlg->user)) { case 0x0100: GWEN_Dialog_SetIntProperty(dlg, "httpVersionCombo", GWEN_DialogProperty_Value, 0, 0, 0); break; case 0x0101: GWEN_Dialog_SetIntProperty(dlg, "httpVersionCombo", GWEN_DialogProperty_Value, 0, 1, 0); break; default: break; } /* flags */ flags=EBC_User_GetFlags(xdlg->user); GWEN_Dialog_SetIntProperty(dlg, "forceSslv3Check", GWEN_DialogProperty_Value, 0, (flags & EBC_USER_FLAGS_FORCE_SSLV3)?1:0, 0); GWEN_Dialog_SetIntProperty(dlg, "useIzlCheck", GWEN_DialogProperty_Value, 0, (flags & EBC_USER_FLAGS_USE_IZL)?1:0, 0); GWEN_Dialog_SetIntProperty(dlg, "noEuCheck", GWEN_DialogProperty_Value, 0, (flags & EBC_USER_FLAGS_NO_EU)?1:0, 0); } int EBC_EditUserDialog_fromGui(GWEN_DIALOG *dlg, AB_USER *u, int quiet) { EBC_EDIT_USER_DIALOG *xdlg; const char *s; int i; uint32_t flags; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, EBC_EDIT_USER_DIALOG, dlg); assert(xdlg); /* fromGui */ s=GWEN_Dialog_GetCharProperty(dlg, "userNameEdit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) { GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(tbuf, s); GWEN_Text_CondenseBuffer(tbuf); if (u) AB_User_SetUserName(u, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } s=GWEN_Dialog_GetCharProperty(dlg, "bankCodeEdit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) { GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(tbuf, s); GWEN_Text_CondenseBuffer(tbuf); removeAllSpaces((uint8_t *)GWEN_Buffer_GetStart(tbuf)); if (u) AB_User_SetBankCode(u, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } s=GWEN_Dialog_GetCharProperty(dlg, "userIdEdit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) { GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(tbuf, s); GWEN_Text_CondenseBuffer(tbuf); if (u) AB_User_SetUserId(u, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } s=GWEN_Dialog_GetCharProperty(dlg, "customerIdEdit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) { GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(tbuf, s); GWEN_Text_CondenseBuffer(tbuf); if (u) AB_User_SetCustomerId(u, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } s=GWEN_Dialog_GetCharProperty(dlg, "urlEdit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) { GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(tbuf, s); GWEN_Text_CondenseBuffer(tbuf); if (u) EBC_User_SetServerUrl(u, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } s=GWEN_Dialog_GetCharProperty(dlg, "hostIdEdit", GWEN_DialogProperty_Value, 0, NULL); if (s && *s) { GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(tbuf, s); GWEN_Text_CondenseBuffer(tbuf); if (u) EBC_User_SetPeerId(u, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } /* get country */ if (u) AB_User_SetCountry(u, "de"); i=GWEN_Dialog_GetIntProperty(dlg, "ebicsVersionCombo", GWEN_DialogProperty_Value, 0, -1); switch (i) { case 0: EBC_User_SetProtoVersion(xdlg->user, "H002"); break; case 1: EBC_User_SetProtoVersion(xdlg->user, "H003"); break; default: case 2: EBC_User_SetProtoVersion(xdlg->user, "H004"); break; } i=GWEN_Dialog_GetIntProperty(dlg, "signVersionCombo", GWEN_DialogProperty_Value, 0, -1); switch (i) { case 0: EBC_User_SetSignVersion(xdlg->user, "A004"); break; default: case 1: EBC_User_SetSignVersion(xdlg->user, "A005"); break; } i=GWEN_Dialog_GetIntProperty(dlg, "cryptVersionCombo", GWEN_DialogProperty_Value, 0, -1); switch (i) { case 0: EBC_User_SetCryptVersion(xdlg->user, "E001"); break; default: case 1: EBC_User_SetCryptVersion(xdlg->user, "E002"); break; } i=GWEN_Dialog_GetIntProperty(dlg, "authVersionCombo", GWEN_DialogProperty_Value, 0, -1); switch (i) { case 0: EBC_User_SetAuthVersion(xdlg->user, "X001"); break; default: case 1: EBC_User_SetAuthVersion(xdlg->user, "X002"); break; } i=GWEN_Dialog_GetIntProperty(dlg, "statusCombo", GWEN_DialogProperty_Value, 0, -1); switch (i) { case 0: EBC_User_SetStatus(xdlg->user, EBC_UserStatus_New); break; case 1: EBC_User_SetStatus(xdlg->user, EBC_UserStatus_Init1); break; case 2: EBC_User_SetStatus(xdlg->user, EBC_UserStatus_Init2); break; case 3: EBC_User_SetStatus(xdlg->user, EBC_UserStatus_Enabled); break; case 4: EBC_User_SetStatus(xdlg->user, EBC_UserStatus_Disabled); break; default: break; } i=GWEN_Dialog_GetIntProperty(dlg, "httpVersionCombo", GWEN_DialogProperty_Value, 0, -1); switch (i) { case 0: EBC_User_SetHttpVMajor(xdlg->user, 1); EBC_User_SetHttpVMinor(xdlg->user, 0); break; default: case 1: EBC_User_SetHttpVMajor(xdlg->user, 1); EBC_User_SetHttpVMinor(xdlg->user, 1); break; } flags=0; if (GWEN_Dialog_GetIntProperty(dlg, "forceSslv3Check", GWEN_DialogProperty_Value, 0, 0)) flags|=EBC_USER_FLAGS_FORCE_SSLV3; if (GWEN_Dialog_GetIntProperty(dlg, "useIzlCheck", GWEN_DialogProperty_Value, 0, 0)) flags|=EBC_USER_FLAGS_USE_IZL; if (GWEN_Dialog_GetIntProperty(dlg, "noEuCheck", GWEN_DialogProperty_Value, 0, 0)) flags|=EBC_USER_FLAGS_NO_EU; EBC_User_SetFlags(xdlg->user, flags); return 0; } void EBC_EditUserDialog_Fini(GWEN_DIALOG *dlg) { EBC_EDIT_USER_DIALOG *xdlg; int i; GWEN_DB_NODE *dbPrefs; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, EBC_EDIT_USER_DIALOG, dlg); assert(xdlg); dbPrefs=GWEN_Dialog_GetPreferences(dlg); /* store dialog width */ i=GWEN_Dialog_GetIntProperty(dlg, "", GWEN_DialogProperty_Width, 0, -1); GWEN_DB_SetIntValue(dbPrefs, GWEN_DB_FLAGS_OVERWRITE_VARS, "dialog_width", i); /* store dialog height */ i=GWEN_Dialog_GetIntProperty(dlg, "", GWEN_DialogProperty_Height, 0, -1); GWEN_DB_SetIntValue(dbPrefs, GWEN_DB_FLAGS_OVERWRITE_VARS, "dialog_height", i); } int EBC_EditUserDialog_HandleActivatedBankCode(GWEN_DIALOG *dlg) { EBC_EDIT_USER_DIALOG *xdlg; GWEN_DIALOG *dlg2; int rv; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, EBC_EDIT_USER_DIALOG, dlg); assert(xdlg); dlg2=AB_SelectBankInfoDialog_new(xdlg->banking, "de", NULL); if (dlg2==NULL) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Could not create dialog"); GWEN_Gui_ShowError(I18N("Error"), "%s", I18N("Could create dialog, maybe incomplete installation?")); return GWEN_DialogEvent_ResultHandled; } rv=GWEN_Gui_ExecDialog(dlg2, 0); if (rv==0) { /* rejected */ GWEN_Dialog_free(dlg2); return GWEN_DialogEvent_ResultHandled; } else { const AB_BANKINFO *bi; bi=AB_SelectBankInfoDialog_GetSelectedBankInfo(dlg2); if (bi) { const char *s; s=AB_BankInfo_GetBankId(bi); GWEN_Dialog_SetCharProperty(dlg, "bankCodeEdit", GWEN_DialogProperty_Value, 0, (s && *s)?s:"", 0); } } GWEN_Dialog_free(dlg2); return GWEN_DialogEvent_ResultHandled; } int EBC_EditUserDialog_HandleActivatedOk(GWEN_DIALOG *dlg) { EBC_EDIT_USER_DIALOG *xdlg; int rv; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, EBC_EDIT_USER_DIALOG, dlg); assert(xdlg); rv=EBC_EditUserDialog_fromGui(dlg, NULL, 0); if (rv<0) { return GWEN_DialogEvent_ResultHandled; } if (xdlg->doLock) { int rv; rv=AB_Provider_BeginExclUseUser(xdlg->provider, xdlg->user); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_Gui_MessageBox(GWEN_GUI_MSG_FLAGS_SEVERITY_NORMAL | GWEN_GUI_MSG_FLAGS_TYPE_ERROR | GWEN_GUI_MSG_FLAGS_CONFIRM_B1, I18N("Error"), I18N("Unable to lock user. Maybe already in use?"), I18N("Dismiss"), NULL, NULL, 0); return GWEN_DialogEvent_ResultHandled; } } EBC_EditUserDialog_fromGui(dlg, xdlg->user, 1); if (xdlg->doLock) { int rv; rv=AB_Provider_EndExclUseUser(xdlg->provider, xdlg->user, 0); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_Gui_MessageBox(GWEN_GUI_MSG_FLAGS_SEVERITY_NORMAL | GWEN_GUI_MSG_FLAGS_TYPE_ERROR | GWEN_GUI_MSG_FLAGS_CONFIRM_B1, I18N("Error"), I18N("Unable to unlock user."), I18N("Dismiss"), NULL, NULL, 0); return GWEN_DialogEvent_ResultHandled; } } return GWEN_DialogEvent_ResultAccept; } static int EBC_EditUserDialog_HandleActivatedGetBankKeys(GWEN_DIALOG *dlg) { EBC_EDIT_USER_DIALOG *xdlg; int rv; uint32_t guiid; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, EBC_EDIT_USER_DIALOG, dlg); assert(xdlg); guiid=GWEN_Gui_ProgressStart(GWEN_GUI_PROGRESS_ALLOW_SUBLEVELS | GWEN_GUI_PROGRESS_SHOW_PROGRESS | GWEN_GUI_PROGRESS_SHOW_LOG | GWEN_GUI_PROGRESS_ALWAYS_SHOW_LOG | GWEN_GUI_PROGRESS_KEEP_OPEN | GWEN_GUI_PROGRESS_SHOW_ABORT, I18N("Executing Request"), I18N("Now the request is send " "to the credit institute."), GWEN_GUI_PROGRESS_NONE, 0); rv=EBC_Provider_Send_HPB(AB_User_GetProvider(xdlg->user), xdlg->user, 1); EBC_EditUserDialog_toGui(dlg); GWEN_Gui_ProgressEnd(guiid); if (rv<0) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Error sending key request (%d)", rv); return GWEN_DialogEvent_ResultHandled; } return GWEN_DialogEvent_ResultHandled; } static int EBC_EditUserDialog_HandleActivatedGetAccounts(GWEN_DIALOG *dlg) { EBC_EDIT_USER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, EBC_EDIT_USER_DIALOG, dlg); assert(xdlg); if ((EBC_User_GetStatus(xdlg->user)==EBC_UserStatus_Enabled) && (EBC_User_GetFlags(xdlg->user) & EBC_USER_FLAGS_CLIENT_DATA_DOWNLOAD_SPP)) { uint32_t guiid; int rv1; int rv2; guiid=GWEN_Gui_ProgressStart(GWEN_GUI_PROGRESS_ALLOW_SUBLEVELS | GWEN_GUI_PROGRESS_SHOW_PROGRESS | GWEN_GUI_PROGRESS_SHOW_LOG | GWEN_GUI_PROGRESS_ALWAYS_SHOW_LOG | GWEN_GUI_PROGRESS_KEEP_OPEN | GWEN_GUI_PROGRESS_SHOW_ABORT, I18N("Executing Request"), I18N("Now the request is send " "to the credit institute."), GWEN_GUI_PROGRESS_NONE, 0); rv1=EBC_Provider_Send_HKD(AB_User_GetProvider(xdlg->user), xdlg->user, 1); DBG_INFO(AQEBICS_LOGDOMAIN, "Retrieving user information"); rv2=EBC_Provider_Send_HTD(AB_User_GetProvider(xdlg->user), xdlg->user, 1); GWEN_Gui_ProgressEnd(guiid); if ((rv1<0) && (rv2<0)) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Couldn't send HKD or HTD request (%d, %d)", rv1, rv2); } } else { DBG_ERROR(AQEBICS_LOGDOMAIN, "The bank does not support download of account information"); } return GWEN_DialogEvent_ResultHandled; } static int EBC_EditUserDialog_HandleActivatedIniLetter(GWEN_DIALOG *dlg) { EBC_EDIT_USER_DIALOG *xdlg; int rv; GWEN_BUFFER *tbuf; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, EBC_EDIT_USER_DIALOG, dlg); assert(xdlg); tbuf=GWEN_Buffer_new(0, 1024, 0, 1); /* add HTML version of the INI letter */ //GWEN_Buffer_AppendString(tbuf, ""); rv=EBC_Provider_GetIniLetterTxt(AB_User_GetProvider(xdlg->user), xdlg->user, 0, tbuf, 0); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); // TODO: show error message AB_Banking_ClearCryptTokenList(xdlg->banking); GWEN_Buffer_free(tbuf); return GWEN_DialogEvent_ResultHandled; } //GWEN_Buffer_AppendString(tbuf, ""); #if 0 /* add ASCII version of the INI letter for frontends which don't support HTML */ rv=EBC_Provider_GetIniLetterTxt(AB_User_GetProvider(xdlg->user), xdlg->user, 0, tbuf, 0); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); // TODO: show error message AB_Banking_ClearCryptTokenList(xdlg->banking); GWEN_Buffer_free(tbuf); return GWEN_DialogEvent_ResultHandled; } #endif rv=GWEN_Gui_Print(I18N("INI Letter"), "EBICS-INILETTER", I18N("INI Letter for EBICS"), GWEN_Buffer_GetStart(tbuf), 0); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); // TODO: show error message GWEN_Buffer_free(tbuf); return GWEN_DialogEvent_ResultHandled; } GWEN_Buffer_free(tbuf); return GWEN_DialogEvent_ResultHandled; } static int EBC_EditUserDialog_HandleActivatedHiaLetter(GWEN_DIALOG *dlg) { EBC_EDIT_USER_DIALOG *xdlg; int rv; GWEN_BUFFER *tbuf; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, EBC_EDIT_USER_DIALOG, dlg); assert(xdlg); tbuf=GWEN_Buffer_new(0, 1024, 0, 1); /* add HTML version of the INI letter */ //GWEN_Buffer_AppendString(tbuf, ""); rv=EBC_Provider_GetHiaLetterTxt(AB_User_GetProvider(xdlg->user), xdlg->user, 0, tbuf, 0); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); // TODO: show error message AB_Banking_ClearCryptTokenList(xdlg->banking); GWEN_Buffer_free(tbuf); return GWEN_DialogEvent_ResultHandled; } //GWEN_Buffer_AppendString(tbuf, ""); #if 0 /* add ASCII version of the HIA letter for frontends which don't support HTML */ rv=EBC_Provider_GetHIALetterTxt(AB_User_GetProvider(xdlg->user), xdlg->user, 0, tbuf, 0); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); // TODO: show error message AB_Banking_ClearCryptTokenList(xdlg->banking); GWEN_Buffer_free(tbuf); return GWEN_DialogEvent_ResultHandled; } #endif rv=GWEN_Gui_Print(I18N("HIA Letter"), "EBICS-HIALETTER", I18N("HIA Letter for EBICS"), GWEN_Buffer_GetStart(tbuf), 0); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); // TODO: show error message GWEN_Buffer_free(tbuf); return GWEN_DialogEvent_ResultHandled; } GWEN_Buffer_free(tbuf); return GWEN_DialogEvent_ResultHandled; } int EBC_EditUserDialog_HandleActivated(GWEN_DIALOG *dlg, const char *sender) { if (strcasecmp(sender, "bankCodeButton")==0) return EBC_EditUserDialog_HandleActivatedBankCode(dlg); else if (strcasecmp(sender, "getBankKeysButton")==0) return EBC_EditUserDialog_HandleActivatedGetBankKeys(dlg); else if (strcasecmp(sender, "getAccountsButton")==0) return EBC_EditUserDialog_HandleActivatedGetAccounts(dlg); else if (strcasecmp(sender, "iniLetterButton")==0) return EBC_EditUserDialog_HandleActivatedIniLetter(dlg); else if (strcasecmp(sender, "hiaLetterButton")==0) return EBC_EditUserDialog_HandleActivatedHiaLetter(dlg); else if (strcasecmp(sender, "ebicsVersionCombo")==0) { int i; i=GWEN_Dialog_GetIntProperty(dlg, "ebicsVersionCombo", GWEN_DialogProperty_Value, 0, -1); switch (i) { case 0: /* H002 */ GWEN_Dialog_SetIntProperty(dlg, "signVersionCombo", GWEN_DialogProperty_Value, 0, 0, 0); GWEN_Dialog_SetIntProperty(dlg, "cryptVersionCombo", GWEN_DialogProperty_Value, 0, 0, 0); GWEN_Dialog_SetIntProperty(dlg, "authVersionCombo", GWEN_DialogProperty_Value, 0, 0, 0); break; case 1: /* H003 */ GWEN_Dialog_SetIntProperty(dlg, "signVersionCombo", GWEN_DialogProperty_Value, 0, 1, 0); GWEN_Dialog_SetIntProperty(dlg, "cryptVersionCombo", GWEN_DialogProperty_Value, 0, 1, 0); GWEN_Dialog_SetIntProperty(dlg, "authVersionCombo", GWEN_DialogProperty_Value, 0, 1, 0); break; default: case 2: /* H004 */ GWEN_Dialog_SetIntProperty(dlg, "signVersionCombo", GWEN_DialogProperty_Value, 0, 1, 0); GWEN_Dialog_SetIntProperty(dlg, "cryptVersionCombo", GWEN_DialogProperty_Value, 0, 1, 0); GWEN_Dialog_SetIntProperty(dlg, "authVersionCombo", GWEN_DialogProperty_Value, 0, 1, 0); break; } return GWEN_DialogEvent_ResultHandled; } else if (strcasecmp(sender, "okButton")==0) return EBC_EditUserDialog_HandleActivatedOk(dlg); else if (strcasecmp(sender, "abortButton")==0) return GWEN_DialogEvent_ResultReject; else if (strcasecmp(sender, "helpButton")==0) { /* TODO: open u help dialog */ } return GWEN_DialogEvent_ResultNotHandled; } int GWENHYWFAR_CB EBC_EditUserDialog_SignalHandler(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender) { EBC_EDIT_USER_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, EBC_EDIT_USER_DIALOG, dlg); assert(xdlg); switch (t) { case GWEN_DialogEvent_TypeInit: EBC_EditUserDialog_Init(dlg); return GWEN_DialogEvent_ResultHandled;; case GWEN_DialogEvent_TypeFini: EBC_EditUserDialog_Fini(dlg); return GWEN_DialogEvent_ResultHandled;; case GWEN_DialogEvent_TypeValueChanged: return GWEN_DialogEvent_ResultNotHandled; case GWEN_DialogEvent_TypeActivated: return EBC_EditUserDialog_HandleActivated(dlg, sender); case GWEN_DialogEvent_TypeEnabled: case GWEN_DialogEvent_TypeDisabled: case GWEN_DialogEvent_TypeClose: case GWEN_DialogEvent_TypeLast: return GWEN_DialogEvent_ResultNotHandled; default: break; } return GWEN_DialogEvent_ResultNotHandled; } aqbanking-6.6.1/src/libs/plugins/backends/aqebics/Makefile.am0000664000175000017500000000176214043610744021031 00000000000000SUBDIRS=msg client dialogs control requests AM_CPPFLAGS = -I$(top_srcdir)/src/libs -I$(top_builddir)/src/libs $(gwenhywfar_includes) -I$(srcdir)/.. $(AQEBICS_CFLAGS) AM_CFLAGS=-DBUILDING_AQBANKING @visibility_cflags@ EXTRA_DIST=aqebics.xml.in #iheaderdir=${includedir}/aqebics #iheader_HEADERS= plugindir= $(aqbanking_plugindir)/providers plugin_DATA=aqebics.xml noinst_HEADERS=\ aqebics.h \ aqebics_l.h # library noinst_LTLIBRARIES=libaqebics.la libaqebics_la_SOURCES=dummy.c libaqebics_la_LIBADD=\ msg/libmsg.la \ dialogs/libdialogs.la \ client/libclient.la \ requests/libaqebics_requests.la \ control/libebicscontrol.la -lz $(AQEBICS_LIBS) sources: for d in $(SUBDIRS); do \ $(MAKE) -C $$d sources; \ done for f in $(libaqebics_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done cppcheck: for f in $(libaqebics_la_SOURCES); do \ cppcheck --force $$f ; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done typefiles: typedefs: aqbanking-6.6.1/src/libs/plugins/backends/aqebics/aqebics.h0000664000175000017500000001032314043610744020546 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AQEBICS_AQEBICS_H #define AQEBICS_AQEBICS_H #include #include /* ___________________________________________________________________________*/ #if 0 #ifdef BUILDING_AQEBICS # /* building AqEBICS */ # if AQBANKING_SYS_IS_WINDOWS # /* for windows */ # ifdef __declspec # define AQEBICS_API __declspec (dllexport) # else /* if __declspec */ # define AQEBICS_API # endif /* if NOT __declspec */ # else # /* for non-win32 */ # ifdef GCC_WITH_VISIBILITY_ATTRIBUTE # define AQEBICS_API __attribute__((visibility("default"))) # else # define AQEBICS_API # endif # endif #else # /* not building AqEBICS */ # if AQBANKING_SYS_IS_WINDOWS # /* for windows */ # ifdef __declspec # define AQEBICS_API __declspec (dllimport) # else /* if __declspec */ # define AQEBICS_API # endif /* if NOT __declspec */ # else # /* for non-win32 */ # define AQEBICS_API # endif #endif #endif /* ___________________________________________________________________________*/ /* no longer export symbols */ #define AQEBICS_API #define EBC_PROVIDER_NAME "AQEBICS" #define AQEBICS_LOGDOMAIN "aqebics" #define EBICS_BUFFER_MAX_HARD_LIMIT (256*1024*1024) typedef uint32_t EB_RC; #define AQEBIC_RC_GET_CLASS(x) ((x>>4) & 0xff) #define AQEBIC_RC_GET_GRP(x) ((x>>2) & 0xf) #define AQEBIC_RC_GET_CODE(x) (x & 0xff) #define AQEBIC_RC_CLASS_INFO 0 #define AQEBIC_RC_CLASS_NOTICE 1 #define AQEBIC_RC_CLASS_WARNING 3 #define AQEBIC_RC_CLASS_ERROR 6 #define AQEBIC_RC_CLASS_FATAL 9 #define AQEBICS_RC_IS_INFO(x) (AQEBIC_RC_GET_CLASS(x)==AQEBIC_RC_CLASS_INFO) #define AQEBICS_RC_IS_NOTICE(x) (AQEBIC_RC_GET_CLASS(x)==AQEBIC_RC_CLASS_NOTICE) #define AQEBICS_RC_IS_WARNING(x) (AQEBIC_RC_GET_CLASS(x)==AQEBIC_RC_CLASS_WARNING) #define AQEBICS_RC_IS_ERROR(x) (AQEBIC_RC_GET_CLASS(x)==AQEBIC_RC_CLASS_ERROR) #define AQEBICS_RC_IS_FATAL(x) (AQEBIC_RC_GET_CLASS(x)==AQEBIC_RC_CLASS_FATAL) #define AQEBICS_RC_GRP_NONE 0 #define AQEBICS_RC_GRP_TRANS 1 #define AQEBICS_RC_GRP_KEY 2 #define AQEBICS_RC_GRP_PRE 3 #define AQEBICS_RC_NEW(class, grp, code) \ (((class & 0xff)<<4) |\ 0x1000 | \ ((grp & 0xf)<<2) |\ (code & 0xff)) #define EB_RC_OK 0x000000 #define EB_RC_DOWNLOAD_POSTPROCESS_DONE 0x011000 #define EB_RC_DOWNLOAD_POSTPROCESS_SKIPPED 0x011001 #define EB_RC_TX_SEGMENT_NUMBER_UNDERRUN 0x011101 #define EB_RC_AUTHENTICATION_FAILED 0x061001 #define EB_RC_INVALID_REQUEST 0x061002 #define EB_RC_INTERNAL_ERROR 0x061099 #define EB_RC_TX_RECOVERY_SYNC 0x061101 #define EB_RC_INVALID_USER_OR_STATE 0x091002 #define EB_RC_USER_UNKNOWN 0x091003 #define EB_RC_INVALID_USER_STATE 0x091004 #define EB_RC_INVALID_ORDER_TYPE 0x091005 #define EB_RC_UNSUPPORTED_ORDER_TYPE 0x091006 #define EB_RC_USER_AUTHENTICATION_REQUIRED 0x091007 #define EB_RC_BANK_PUBKEY_UPDATE_REQUIRED 0x091008 #define EB_RC_SEGMENT_SIZE_EXCEEDED 0x091009 #define EB_RC_TX_UNKNOWN_TXID 0x091101 #define EB_RC_TX_ABORT 0x091102 #define EB_RC_TX_MESSAGE_REPLAY 0x091103 #define EB_RC_TX_SEGMENT_NUMBER_EXCEEDED 0x091104 #define EB_RC_AUTHORISATION_FAILED 0x090003 #define EB_RC_NO_DOWNLOAD_DATA_AVAILABLE 0x090005 /* fachliche codes (key management) */ #define EB_RC_KEYMGMT_UNSUPPORTED_VERSION_SIGNATURE 0x091201 #define EB_RC_KEYMGMT_UNSUPPORTED_VERSION_AUTHENTICATION 0x091202 #define EB_RC_KEYMGMT_UNSUPPORTED_VERSION_ENCRYPTION 0x091203 #define EB_RC_KEYMGMT_KEYLENGTH_ERROR_SIGNATURE 0x091204 #define EB_RC_KEYMGMT_KEYLENGTH_ERROR_AUTHENTICATION 0x091205 #define EB_RC_KEYMGMT_KEYLENGTH_ERROR_ENCRYPTION 0x091206 #define EB_RC_KEYMGMT_NO_X509_SUPPORT 0x091207 #endif aqbanking-6.6.1/src/libs/plugins/backends/aqebics/requests/0000755000175000017500000000000015037736164020731 500000000000000aqbanking-6.6.1/src/libs/plugins/backends/aqebics/requests/r_pub.c0000664000175000017500000000261114043610745022116 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "r_pub_l.h" #include "aqebics/aqebics_l.h" #include "aqebics/msg/msg.h" #include "aqebics/msg/keys.h" #include "aqebics/msg/zip.h" #include "aqebics/msg/xml.h" #include "aqebics/client/user_l.h" #include #include #include int EBC_Provider_XchgPubRequest(AB_PROVIDER *pro, GWEN_HTTP_SESSION *sess, AB_USER *u, const char *signVersion) { const char *s; s=EBC_User_GetProtoVersion(u); if (!(s && *s)) s="H002"; if (strcasecmp(s, "H002")==0) return EBC_Provider_XchgPubRequest_H002(pro, sess, u, signVersion); else if (strcasecmp(s, "H003")==0) return EBC_Provider_XchgPubRequest_H003(pro, sess, u, signVersion); else { DBG_ERROR(AQEBICS_LOGDOMAIN, "Proto version [%s] not supported", s); return GWEN_ERROR_INTERNAL; } } aqbanking-6.6.1/src/libs/plugins/backends/aqebics/requests/r_download_h002.c0000664000175000017500000005151114043610745023673 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "r_download_l.h" #include "aqebics/aqebics_l.h" #include "aqebics/msg/msg.h" #include "aqebics/msg/keys.h" #include "aqebics/msg/zip.h" #include "aqebics/msg/xml.h" #include "aqebics/client/user_l.h" #include "aqebics/client/provider_l.h" #include #include #include static int _mkDownloadInitRequest_H002(AB_PROVIDER *pro, GWEN_HTTP_SESSION *sess, AB_USER *u, const char *requestType, const GWEN_DATE *fromDate, const GWEN_DATE *toDate, EB_MSG **pMsg); static int _mkDownloadTransferRequest_H002(AB_PROVIDER *pro, GWEN_HTTP_SESSION *sess, AB_USER *u, const char *transactionId, int segmentNumber, EB_MSG **pMsg); static int _mkDownloadReceiptRequest_H002(AB_PROVIDER *pro, GWEN_HTTP_SESSION *sess, AB_USER *u, const char *transactionId, int receiptCode, EB_MSG **pMsg); int EBC_Provider_XchgDownloadRequest_H002(AB_PROVIDER *pro, GWEN_HTTP_SESSION *sess, AB_USER *u, const char *requestType, GWEN_BUFFER *targetBuffer, int withReceipt, const GWEN_DATE *fromDate, const GWEN_DATE *toDate) { int rv; GWEN_CRYPT_TOKEN *ct; const GWEN_CRYPT_TOKEN_CONTEXT *ctx; EB_MSG *msg=NULL; EB_MSG *mRsp; EB_RC rc; /* get crypt token and context */ rv=EBC_Provider_MountToken(pro, u, &ct, &ctx); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); return rv; } /* create initialisation request */ rv=_mkDownloadInitRequest_H002(pro, sess, u, requestType, fromDate, toDate, &msg); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); return rv; } /* exchange requests */ rv=EBC_Dialog_ExchangeMessages(sess, msg, &mRsp); if (rv<0 || rv>=300) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Error exchanging messages (%d)", rv); EB_Msg_free(msg); return rv; } EB_Msg_free(msg); /* check response */ assert(mRsp); /* log results */ EBC_Provider_LogRequestResults(pro, mRsp, NULL); rc=EB_Msg_GetResultCode(mRsp); if ((rc & 0xff0000)==0x090000 || (rc & 0xff0000)==0x060000) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Error response: (%06x)", rc); EB_Msg_free(mRsp); return AB_ERROR_SECURITY; } rc=EB_Msg_GetBodyResultCode(mRsp); if (rc) { if ((rc & 0xff0000)==0x090000 || (rc & 0xff0000)==0x060000) { EB_Msg_free(mRsp); if (rc==0x090005) { DBG_ERROR(AQEBICS_LOGDOMAIN, "No download data"); return GWEN_ERROR_NO_DATA; } else if ((rc & 0xfff00)==0x091300 || (rc & 0xfff00)==0x091200) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Security error (%06x)", rc); return AB_ERROR_SECURITY; } else { DBG_ERROR(AQEBICS_LOGDOMAIN, "Generic error (%06x)", rc); return GWEN_ERROR_GENERIC; } } else { DBG_NOTICE(AQEBICS_LOGDOMAIN, "Response: (%06x)", rc); } } if (1) { xmlNodePtr node=NULL; GWEN_CRYPT_KEY *skey=NULL; GWEN_BUFFER *buf1; GWEN_BUFFER *dbuffer; int segmentNumber; int segmentCount; const char *s; char transactionId[36]; /* extract keys and store them */ node=EB_Xml_GetNode(EB_Msg_GetRootNode(mRsp), "body/DataTransfer/DataEncryptionInfo", GWEN_PATH_FLAGS_NAMEMUSTEXIST); if (node==NULL) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Bad message from server: Missing session key"); EB_Msg_free(mRsp); return GWEN_ERROR_BAD_DATA; } rv=EBC_Provider_ExtractSessionKey(pro, u, node, &skey); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); EB_Msg_free(mRsp); return rv; } DBG_INFO(AQEBICS_LOGDOMAIN, "Got session key"); s=EB_Msg_GetCharValue(mRsp, "header/static/TransactionID", NULL); if (s==NULL) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_Crypt_Key_free(skey); EB_Msg_free(mRsp); return rv; } strncpy(transactionId, s, sizeof(transactionId)-1); segmentCount=EB_Msg_GetIntValue(mRsp, "header/static/NumSegments", 0); if (segmentCount==0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_Crypt_Key_free(skey); EB_Msg_free(mRsp); return rv; } dbuffer=GWEN_Buffer_new(0, 1024, 0, 1); segmentNumber=1; for (;;) { int i; i=EB_Msg_GetIntValue(mRsp, "header/mutable/SegmentNumber", 0); if (i!=segmentNumber) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Unexpected segment number (%d, expected %d)", i, segmentNumber); GWEN_Buffer_free(dbuffer); GWEN_Crypt_Key_free(skey); EB_Msg_free(mRsp); return GWEN_ERROR_BAD_DATA; } /* read next chunk of data */ s=EB_Msg_GetCharValue(mRsp, "body/DataTransfer/OrderData", NULL); if (!s) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Bad message from server: Missing OrderData"); GWEN_Buffer_free(dbuffer); GWEN_Crypt_Key_free(skey); EB_Msg_free(mRsp); return GWEN_ERROR_BAD_DATA; } GWEN_Buffer_AppendString(dbuffer, s); if (segmentNumber>=segmentCount) { DBG_INFO(AQEBICS_LOGDOMAIN, "Transfer finished"); break; } /* exchange next message */ segmentNumber++; rv=_mkDownloadTransferRequest_H002(pro, sess, u, transactionId, segmentNumber, &msg); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(dbuffer); GWEN_Crypt_Key_free(skey); return rv; } /* exchange requests */ rv=EBC_Dialog_ExchangeMessages(sess, msg, &mRsp); if (rv<0 || rv>=300) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Error exchanging messages (%d)", rv); EB_Msg_free(msg); GWEN_Buffer_free(dbuffer); GWEN_Crypt_Key_free(skey); return rv; } EB_Msg_free(msg); /* check response */ assert(mRsp); /* log results */ EBC_Provider_LogRequestResults(pro, mRsp, NULL); rc=EB_Msg_GetResultCode(mRsp); if ((rc & 0xff0000)==0x090000 || (rc & 0xff0000)==0x060000) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Error response: (%06x)", rc); EB_Msg_free(mRsp); GWEN_Buffer_free(dbuffer); GWEN_Crypt_Key_free(skey); return AB_ERROR_SECURITY; } } EB_Msg_free(mRsp); /* BASE64-decode receiced data */ s=GWEN_Buffer_GetStart(dbuffer); if (*s==0) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Bad message from server: Missing OrderData"); GWEN_Buffer_free(dbuffer); GWEN_Crypt_Key_free(skey); return GWEN_ERROR_BAD_DATA; } buf1=GWEN_Buffer_new(0, strlen(s), 0, 1); rv=GWEN_Base64_Decode((const uint8_t *)s, 0, buf1); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "Could not decode OrderData (%d)", rv); GWEN_Buffer_free(buf1); GWEN_Buffer_free(dbuffer); GWEN_Crypt_Key_free(skey); return rv; } GWEN_Buffer_free(dbuffer); /* decrypt/unzip data */ rv=EBC_Provider_DecryptData(pro, u, skey, (const uint8_t *)GWEN_Buffer_GetStart(buf1), GWEN_Buffer_GetUsedBytes(buf1), targetBuffer); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "Could not decrypt OrderData (%d)", rv); GWEN_Buffer_free(buf1); GWEN_Crypt_Key_free(skey); return rv; } GWEN_Crypt_Key_free(skey); /*DBG_ERROR(0, "Got this data:"); GWEN_Buffer_Dump(targetBuffer, 2);*/ /* send receipt message */ rv=_mkDownloadReceiptRequest_H002(pro, sess, u, transactionId, withReceipt?0:1, &msg); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); return rv; } /* exchange requests */ rv=EBC_Dialog_ExchangeMessages(sess, msg, &mRsp); if (rv<0 || rv>=300) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Error exchanging messages (%d)", rv); EB_Msg_free(msg); return rv; } EB_Msg_free(msg); /* check response */ assert(mRsp); /* log results */ EBC_Provider_LogRequestResults(pro, mRsp, NULL); rc=EB_Msg_GetResultCode(mRsp); if ((rc & 0xff0000)==0x090000 || (rc & 0xff0000)==0x060000) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Error response: (%06x)", rc); EB_Msg_free(mRsp); return AB_ERROR_SECURITY; } EB_Msg_free(mRsp); return 0; } } int _mkDownloadInitRequest_H002(AB_PROVIDER *pro, GWEN_HTTP_SESSION *sess, AB_USER *u, const char *requestType, const GWEN_DATE *fromDate, const GWEN_DATE *toDate, EB_MSG **pMsg) { int rv; GWEN_CRYPT_TOKEN *ct; const GWEN_CRYPT_TOKEN_CONTEXT *ctx; xmlNsPtr ns; EB_MSG *msg; const char *userId; const char *partnerId; xmlDocPtr doc; xmlNodePtr root_node = NULL; xmlNodePtr node = NULL; xmlNodePtr nodeX = NULL; xmlNodePtr nodeXX = NULL; xmlNodePtr nodeXXX = NULL; xmlNodePtr sigNode = NULL; GWEN_BUFFER *tbuf; const char *s; userId=AB_User_GetUserId(u); partnerId=AB_User_GetCustomerId(u); if (partnerId==NULL) partnerId=userId; /* get crypt token and context */ rv=EBC_Provider_MountToken(pro, u, &ct, &ctx); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); return rv; } /* create request */ msg=EB_Msg_new(); doc=EB_Msg_GetDoc(msg); root_node=xmlNewNode(NULL, BAD_CAST "ebicsRequest"); xmlDocSetRootElement(doc, root_node); ns=xmlNewNs(root_node, BAD_CAST "http://www.ebics.org/H002", NULL); assert(ns); ns=xmlNewNs(root_node, BAD_CAST "http://www.w3.org/2000/09/xmldsig#", BAD_CAST "ds"); assert(ns); ns=xmlNewNs(root_node, BAD_CAST "http://www.w3.org/2001/XMLSchema-instance", BAD_CAST "xsi"); xmlNewNsProp(root_node, ns, BAD_CAST "schemaLocation", /* xsi:schemaLocation */ BAD_CAST "http://www.ebics.org/H002 " "http://www.ebics.org/H002/ebics_request.xsd"); xmlNewProp(root_node, BAD_CAST "Version", BAD_CAST "H002"); xmlNewProp(root_node, BAD_CAST "Revision", BAD_CAST "1"); /* header */ node=xmlNewChild(root_node, NULL, BAD_CAST "header", NULL); xmlNewProp(node, BAD_CAST "authenticate", BAD_CAST "true"); nodeX=xmlNewChild(node, NULL, BAD_CAST "static", NULL); s=EBC_User_GetPeerId(u); if (!s) s="EBICS"; nodeXX=xmlNewTextChild(nodeX, NULL, BAD_CAST "HostID", BAD_CAST s); /* generate Nonce */ tbuf=GWEN_Buffer_new(0, 128, 0, 1); rv=EBC_Provider_GenerateNonce(pro, tbuf); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); EB_Msg_free(msg); return rv; } nodeXX=xmlNewTextChild(nodeX, NULL, BAD_CAST "Nonce", BAD_CAST GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_Reset(tbuf); /* generate timestamp */ rv=EBC_Provider_GenerateTimeStamp(pro, u, tbuf); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); EB_Msg_free(msg); return rv; } nodeXX=xmlNewTextChild(nodeX, NULL, BAD_CAST "Timestamp", BAD_CAST GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); nodeXX=xmlNewTextChild(nodeX, NULL, BAD_CAST "PartnerID", BAD_CAST partnerId); nodeXX=xmlNewTextChild(nodeX, NULL, BAD_CAST "UserID", BAD_CAST userId); /* order details */ nodeXX=xmlNewChild(nodeX, NULL, BAD_CAST "OrderDetails", NULL); xmlNewTextChild(nodeXX, NULL, BAD_CAST "OrderType", BAD_CAST requestType); xmlNewTextChild(nodeXX, NULL, BAD_CAST "OrderAttribute", BAD_CAST "DZHNN"); nodeXXX=xmlNewChild(nodeXX, NULL, BAD_CAST "StandardOrderParams", NULL); if (fromDate || toDate) { xmlNodePtr nodeXXXX; GWEN_DATE *tempTime=NULL; const GWEN_DATE *t1; const GWEN_DATE *t2; t1=fromDate; t2=toDate; if (t1==NULL) /* no fromDate, use toDate for both */ t1=t2; if (t2==NULL) { /* no toDate, use current date */ tempTime=GWEN_Date_CurrentDate(); t2=tempTime; } nodeXXXX=xmlNewChild(nodeXXX, NULL, BAD_CAST "DateRange", NULL); if (t1) { GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Date_toStringWithTemplate(t1, "YYYY-MM-DD", tbuf); xmlNewTextChild(nodeXXXX, NULL, BAD_CAST "Start", BAD_CAST GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } if (t2) { GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Date_toStringWithTemplate(t2, "YYYY-MM-DD", tbuf); xmlNewTextChild(nodeXXXX, NULL, BAD_CAST "End", BAD_CAST GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } if (tempTime) GWEN_Date_free(tempTime); } /* bank pubkey digests */ nodeXX=xmlNewChild(nodeX, NULL, BAD_CAST "BankPubKeyDigests", NULL); rv=EBC_Provider_AddBankPubKeyDigests(pro, u, nodeXX); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); EB_Msg_free(msg); return rv; } /* security medium */ xmlNewTextChild(nodeX, NULL, BAD_CAST "SecurityMedium", BAD_CAST "0000"); /* mutable */ nodeX=xmlNewChild(node, NULL, BAD_CAST "mutable", NULL); xmlNewTextChild(nodeX, NULL, BAD_CAST "TransactionPhase", BAD_CAST "Initialisation"); /* prepare signature node */ sigNode=xmlNewChild(root_node, NULL, BAD_CAST "AuthSignature", NULL); /* body */ node=xmlNewChild(root_node, NULL, BAD_CAST "body", NULL); /* sign */ rv=EBC_Provider_SignMessage(pro, msg, u, sigNode); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); EB_Msg_free(msg); return rv; } *pMsg=msg; return 0; } static int _mkDownloadTransferRequest_H002(AB_PROVIDER *pro, GWEN_HTTP_SESSION *sess, AB_USER *u, const char *transactionId, int segmentNumber, EB_MSG **pMsg) { int rv; GWEN_CRYPT_TOKEN *ct; const GWEN_CRYPT_TOKEN_CONTEXT *ctx; xmlNsPtr ns; EB_MSG *msg; xmlDocPtr doc; xmlNodePtr root_node = NULL; xmlNodePtr node = NULL; xmlNodePtr nodeX = NULL; xmlNodePtr sigNode = NULL; const char *s; /* get crypt token and context */ rv=EBC_Provider_MountToken(pro, u, &ct, &ctx); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); return rv; } /* create request */ msg=EB_Msg_new(); doc=EB_Msg_GetDoc(msg); root_node=xmlNewNode(NULL, BAD_CAST "ebicsRequest"); xmlDocSetRootElement(doc, root_node); ns=xmlNewNs(root_node, BAD_CAST "http://www.ebics.org/H002", NULL); assert(ns); ns=xmlNewNs(root_node, BAD_CAST "http://www.w3.org/2000/09/xmldsig#", BAD_CAST "ds"); assert(ns); ns=xmlNewNs(root_node, BAD_CAST "http://www.w3.org/2001/XMLSchema-instance", BAD_CAST "xsi"); xmlNewNsProp(root_node, ns, BAD_CAST "schemaLocation", /* xsi:schemaLocation */ BAD_CAST "http://www.ebics.org/H002 " "http://www.ebics.org/H002/ebics_request.xsd"); xmlNewProp(root_node, BAD_CAST "Version", BAD_CAST "H002"); xmlNewProp(root_node, BAD_CAST "Revision", BAD_CAST "1"); /* header */ node=xmlNewChild(root_node, NULL, BAD_CAST "header", NULL); xmlNewProp(node, BAD_CAST "authenticate", BAD_CAST "true"); nodeX=xmlNewChild(node, NULL, BAD_CAST "static", NULL); s=EBC_User_GetPeerId(u); if (!s) s="EBICS"; xmlNewTextChild(nodeX, NULL, BAD_CAST "HostID", BAD_CAST s); xmlNewTextChild(nodeX, NULL, BAD_CAST "TransactionID", BAD_CAST transactionId); /* mutable */ nodeX=xmlNewChild(node, NULL, BAD_CAST "mutable", NULL); xmlNewTextChild(nodeX, NULL, BAD_CAST "TransactionPhase", BAD_CAST "Transfer"); EB_Msg_SetIntValue(msg, "header/mutable/SegmentNumber", segmentNumber); /* prepare signature node */ sigNode=xmlNewChild(root_node, NULL, BAD_CAST "AuthSignature", NULL); /* body */ node=xmlNewChild(root_node, NULL, BAD_CAST "body", NULL); /* sign */ rv=EBC_Provider_SignMessage(pro, msg, u, sigNode); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); EB_Msg_free(msg); return rv; } *pMsg=msg; return 0; } int _mkDownloadReceiptRequest_H002(AB_PROVIDER *pro, GWEN_HTTP_SESSION *sess, AB_USER *u, const char *transactionId, int receiptCode, EB_MSG **pMsg) { int rv; GWEN_CRYPT_TOKEN *ct; const GWEN_CRYPT_TOKEN_CONTEXT *ctx; xmlNsPtr ns; EB_MSG *msg; xmlDocPtr doc; xmlNodePtr root_node = NULL; xmlNodePtr node = NULL; xmlNodePtr nodeX = NULL; xmlNodePtr sigNode = NULL; const char *s; /* get crypt token and context */ rv=EBC_Provider_MountToken(pro, u, &ct, &ctx); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); return rv; } /* create request */ msg=EB_Msg_new(); doc=EB_Msg_GetDoc(msg); root_node=xmlNewNode(NULL, BAD_CAST "ebicsRequest"); xmlDocSetRootElement(doc, root_node); ns=xmlNewNs(root_node, BAD_CAST "http://www.ebics.org/H002", NULL); assert(ns); ns=xmlNewNs(root_node, BAD_CAST "http://www.w3.org/2000/09/xmldsig#", BAD_CAST "ds"); assert(ns); ns=xmlNewNs(root_node, BAD_CAST "http://www.w3.org/2001/XMLSchema-instance", BAD_CAST "xsi"); xmlNewNsProp(root_node, ns, BAD_CAST "schemaLocation", /* xsi:schemaLocation */ BAD_CAST "http://www.ebics.org/H002 " "http://www.ebics.org/H002/ebics_request.xsd"); xmlNewProp(root_node, BAD_CAST "Version", BAD_CAST "H002"); xmlNewProp(root_node, BAD_CAST "Revision", BAD_CAST "1"); /* header */ node=xmlNewChild(root_node, NULL, BAD_CAST "header", NULL); xmlNewProp(node, BAD_CAST "authenticate", BAD_CAST "true"); nodeX=xmlNewChild(node, NULL, BAD_CAST "static", NULL); s=EBC_User_GetPeerId(u); if (!s) s="EBICS"; xmlNewTextChild(nodeX, NULL, BAD_CAST "HostID", BAD_CAST s); xmlNewTextChild(nodeX, NULL, BAD_CAST "TransactionID", BAD_CAST transactionId); /* mutable */ nodeX=xmlNewChild(node, NULL, BAD_CAST "mutable", NULL); xmlNewTextChild(nodeX, NULL, BAD_CAST "TransactionPhase", BAD_CAST "Receipt"); /* prepare signature node */ sigNode=xmlNewChild(root_node, NULL, BAD_CAST "AuthSignature", NULL); /* body */ node=xmlNewChild(root_node, NULL, BAD_CAST "body", NULL); nodeX=xmlNewChild(node, NULL, BAD_CAST "TransferReceipt", NULL); xmlNewProp(nodeX, BAD_CAST "authenticate", BAD_CAST "true"); EB_Msg_SetIntValue(msg, "body/TransferReceipt/ReceiptCode", receiptCode); /* sign */ rv=EBC_Provider_SignMessage(pro, msg, u, sigNode); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); EB_Msg_free(msg); return rv; } *pMsg=msg; return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqebics/requests/r_ini.c0000664000175000017500000000240314043610745022106 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "r_ini_l.h" #include "aqebics/aqebics_l.h" #include "aqebics/client/user_l.h" #include #include int EBC_Provider_XchgIniRequest(AB_PROVIDER *pro, GWEN_HTTP_SESSION *sess, AB_USER *u) { const char *s; s=EBC_User_GetProtoVersion(u); if (!(s && *s)) s="H002"; if (strcasecmp(s, "H002")==0) return EBC_Provider_XchgIniRequest_H002(pro, sess, u); else if (strcasecmp(s, "H003")==0) return EBC_Provider_XchgIniRequest_H003(pro, sess, u); else if (strcasecmp(s, "H004")==0) return EBC_Provider_XchgIniRequest_H004(pro, sess, u); else { DBG_ERROR(AQEBICS_LOGDOMAIN, "Proto version [%s] not supported", s); return GWEN_ERROR_INTERNAL; } } aqbanking-6.6.1/src/libs/plugins/backends/aqebics/requests/r_hpd.c0000664000175000017500000000625614043610745022114 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "r_hpd_l.h" #include "aqebics/aqebics_l.h" #include "aqebics/msg/msg.h" #include "aqebics/msg/keys.h" #include "aqebics/msg/zip.h" #include "aqebics/msg/xml.h" #include "aqebics/client/user_l.h" #include "aqebics/requests/r_download_l.h" #include #include #include int EBC_Provider_XchgHpdRequest(AB_PROVIDER *pro, GWEN_HTTP_SESSION *sess, AB_USER *u) { int rv; GWEN_BUFFER *buf; buf=GWEN_Buffer_new(0, 1024, 0, 1); rv=EBC_Provider_XchgDownloadRequest(pro, sess, u, "HPD", buf, 0, NULL, NULL); if (rv<0 || rv>=300) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(buf); return rv; } else { xmlDocPtr orderDoc=NULL; xmlNodePtr root_node=NULL; xmlNodePtr node=NULL; xmlNodePtr nodeX=NULL; const char *s; uint32_t uflags=0; /* parse XML document */ rv=EB_Xml_DocFromBuffer(GWEN_Buffer_GetStart(buf), GWEN_Buffer_GetUsedBytes(buf), &orderDoc); GWEN_Buffer_free(buf); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); return rv; } /* get keys */ root_node=xmlDocGetRootElement(orderDoc); /* get auth key */ node=EB_Xml_GetNode(root_node, "ProtocolParams", GWEN_PATH_FLAGS_NAMEMUSTEXIST); if (node==NULL) { DBG_ERROR(AQEBICS_LOGDOMAIN, "No ProtocolParams found"); xmlFreeDoc(orderDoc); return GWEN_ERROR_BAD_DATA; } nodeX=EB_Xml_GetNode(node, "ClientDataDownload", GWEN_PATH_FLAGS_NAMEMUSTEXIST); if (nodeX) { s=(const char *)xmlGetProp(nodeX, BAD_CAST "supported"); if (s && strcasecmp(s, "true")==0) { DBG_INFO(AQEBICS_LOGDOMAIN, "Client data download supported"); uflags|=EBC_USER_FLAGS_CLIENT_DATA_DOWNLOAD_SPP; } } nodeX=EB_Xml_GetNode(node, "PreValidation", GWEN_PATH_FLAGS_NAMEMUSTEXIST); if (nodeX) { s=(const char *)xmlGetProp(nodeX, BAD_CAST "supported"); if (s && strcasecmp(s, "true")==0) { DBG_INFO(AQEBICS_LOGDOMAIN, "Prevalidation supported"); uflags|=EBC_USER_FLAGS_PREVALIDATION_SPP; } } nodeX=EB_Xml_GetNode(node, "Recovery", GWEN_PATH_FLAGS_NAMEMUSTEXIST); if (nodeX) { s=(const char *)xmlGetProp(nodeX, BAD_CAST "supported"); if (s && strcasecmp(s, "true")==0) { DBG_INFO(AQEBICS_LOGDOMAIN, "Recovery supported"); uflags|=EBC_USER_FLAGS_RECOVERY_SPP; } } EBC_User_AddFlags(u, uflags); xmlFreeDoc(orderDoc); return 0; } } aqbanking-6.6.1/src/libs/plugins/backends/aqebics/requests/r_ini_h003.c0000664000175000017500000002020114043610745022634 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "r_ini_l.h" #include "aqebics/aqebics_l.h" #include "aqebics/msg/msg.h" #include "aqebics/msg/keys.h" #include "aqebics/msg/zip.h" #include "aqebics/msg/xml.h" #include "aqebics/client/user_l.h" #include "aqebics/client/provider_l.h" #include #include #include int EBC_Provider_XchgIniRequest_H003(AB_PROVIDER *pro, GWEN_HTTP_SESSION *sess, AB_USER *u) { int rv; GWEN_CRYPT_TOKEN *ct; const GWEN_CRYPT_TOKEN_CONTEXT *ctx; uint32_t kid; const GWEN_CRYPT_TOKEN_KEYINFO *signKeyInfo=NULL; xmlNsPtr ns; EB_MSG *msg; const char *userId; const char *partnerId; EB_MSG *mRsp; EB_RC rc; xmlDocPtr doc; xmlNodePtr root_node = NULL; xmlNodePtr node = NULL; GWEN_BUFFER *tbuf; const char *signVersion; const char *s; GWEN_BUFFER *bufB64; userId=AB_User_GetUserId(u); partnerId=AB_User_GetCustomerId(u); /* get crypt token and context */ rv=EBC_Provider_MountToken(pro, u, &ct, &ctx); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); return rv; } /* get crypt key info */ kid=GWEN_Crypt_Token_Context_GetSignKeyId(ctx); if (kid) { signKeyInfo=GWEN_Crypt_Token_GetKeyInfo(ct, kid, GWEN_CRYPT_TOKEN_KEYFLAGS_HASMODULUS | GWEN_CRYPT_TOKEN_KEYFLAGS_HASEXPONENT | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYVERSION | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYNUMBER, 0); if (signKeyInfo==NULL) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Sign key info not found on crypt token"); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("Sign key info not found on crypt token")); return GWEN_ERROR_NOT_FOUND; } } signVersion=EBC_User_GetSignVersion(u); if (!(signVersion && *signVersion)) signVersion="A005"; if (strcasecmp(signVersion, "A005")==0) { /* create INIRequestOrderData */ doc=xmlNewDoc(BAD_CAST "1.0"); doc->encoding=xmlCharStrdup("UTF-8"); root_node=xmlNewNode(NULL, BAD_CAST "SignaturePubKeyOrderData"); xmlDocSetRootElement(doc, root_node); ns=xmlNewNs(root_node, BAD_CAST "http://www.ebics.org/S001", NULL); assert(ns); ns=xmlNewNs(root_node, BAD_CAST "http://www.w3.org/2000/09/xmldsig#", BAD_CAST "ds"); assert(ns); ns=xmlNewNs(root_node, BAD_CAST "http://www.w3.org/2001/XMLSchema-instance", BAD_CAST "xsi"); xmlNewNsProp(root_node, ns, BAD_CAST "schemaLocation", /* xsi:schemaLocation */ BAD_CAST "http://www.ebics.org/S001 " "http://www.ebics.org/S001/ebics_signature.xsd"); /* create auth key tree */ node=xmlNewChild(root_node, NULL, BAD_CAST "SignaturePubKeyInfo", NULL); rv=EB_Key_Info_toXml(signKeyInfo, node); if (rv<0) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Error response: (%d)", rv); xmlFreeDoc(doc); return GWEN_ERROR_INVALID; } xmlNewChild(node, NULL, BAD_CAST "SignatureVersion", BAD_CAST signVersion); /* store partner id and user id */ node=xmlNewChild(root_node, NULL, BAD_CAST "PartnerID", BAD_CAST partnerId); node=xmlNewChild(root_node, NULL, BAD_CAST "UserID", BAD_CAST userId); #if 0 DBG_ERROR(0, "Sending this key data:"); xmlDocDump(stderr, doc); #endif /* compress and base64 doc */ bufB64=GWEN_Buffer_new(0, 4096, 0, 1); rv=EB_Xml_Compress64Doc(doc, bufB64); if (rv<0) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Error compressing/encoding doc (%d)", rv); xmlFreeDoc(doc); return rv; } xmlFreeDoc(doc); } else { DBG_ERROR(AQEBICS_LOGDOMAIN, "Unsupported sign version [%s]", signVersion); return GWEN_ERROR_INTERNAL; } /* create request */ msg=EB_Msg_new(); doc=EB_Msg_GetDoc(msg); root_node=xmlNewNode(NULL, BAD_CAST "ebicsUnsecuredRequest"); xmlDocSetRootElement(doc, root_node); ns=xmlNewNs(root_node, BAD_CAST "http://www.ebics.org/H003", NULL); assert(ns); ns=xmlNewNs(root_node, BAD_CAST "http://www.w3.org/2000/09/xmldsig#", BAD_CAST "ds"); assert(ns); ns=xmlNewNs(root_node, BAD_CAST "http://www.w3.org/2001/XMLSchema-instance", BAD_CAST "xsi"); xmlNewNsProp(root_node, ns, BAD_CAST "schemaLocation", /* xsi:schemaLocation */ BAD_CAST "http://www.ebics.org/H003 " "http://www.ebics.org/H003/ebics_keymgmt_request.xsd"); xmlNewProp(root_node, BAD_CAST "Version", BAD_CAST "H003"); xmlNewProp(root_node, BAD_CAST "Revision", BAD_CAST "1"); /* header */ node=xmlNewChild(root_node, NULL, BAD_CAST "header", NULL); xmlNewProp(node, BAD_CAST "authenticate", BAD_CAST "true"); xmlNewChild(node, NULL, BAD_CAST "static", NULL); xmlNewChild(node, NULL, BAD_CAST "mutable", NULL); /* body */ node=xmlNewChild(root_node, NULL, BAD_CAST "body", NULL); /* fill */ s=EBC_User_GetPeerId(u); if (s) EB_Msg_SetCharValue(msg, "header/static/HostID", s); s=AB_User_GetCustomerId(u); if (s) EB_Msg_SetCharValue(msg, "header/static/PartnerID", s); EB_Msg_SetCharValue(msg, "header/static/UserID", AB_User_GetUserId(u)); EB_Msg_SetCharValue(msg, "header/static/OrderDetails/OrderType", "INI"); tbuf=GWEN_Buffer_new(0, 16, 0, 1); rv=EBC_Provider_Generate_OrderId(pro, tbuf); if (rv<0) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Error creating order id (%d)", rv); GWEN_Buffer_free(tbuf); GWEN_Buffer_free(bufB64); EB_Msg_free(msg); return rv; } EB_Msg_SetCharValue(msg, "header/static/OrderDetails/OrderID", GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); EB_Msg_SetCharValue(msg, "header/static/OrderDetails/OrderAttribute", "DZNNN"); EB_Msg_SetCharValue(msg, "header/static/SecurityMedium", "0000"); EB_Msg_SetCharValue(msg, "body/DataTransfer/OrderData", GWEN_Buffer_GetStart(bufB64)); GWEN_Buffer_free(bufB64); /* exchange requests */ rv=EBC_Dialog_ExchangeMessages(sess, msg, &mRsp); if (rv<0 || rv>=300) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Error exchanging messages (%d)", rv); EB_Msg_free(msg); return rv; } EB_Msg_free(msg); /* check response */ assert(mRsp); /* log results */ EBC_Provider_LogRequestResults(pro, mRsp, NULL); rc=EB_Msg_GetResultCode(mRsp); if ((rc & 0xff0000)==0x090000 || (rc & 0xff0000)==0x060000) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Error response: (%06x)", rc); EB_Msg_free(mRsp); return AB_ERROR_SECURITY; } rc=EB_Msg_GetBodyResultCode(mRsp); if (rc) { if ((rc & 0xff0000)==0x090000 || (rc & 0xff0000)==0x060000) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Error response: (%06x)", rc); EB_Msg_free(mRsp); if ((rc & 0xfff00)==0x091300 || (rc & 0xfff00)==0x091200) return AB_ERROR_SECURITY; else return GWEN_ERROR_GENERIC; } } EB_Msg_free(mRsp); /* adjust user status and flags */ DBG_NOTICE(AQEBICS_LOGDOMAIN, "Adjusting user flags"); EBC_User_AddFlags(u, EBC_USER_FLAGS_INI); if ((EBC_User_GetFlags(u) & (EBC_USER_FLAGS_INI | EBC_USER_FLAGS_HIA)) == (EBC_USER_FLAGS_INI | EBC_USER_FLAGS_HIA)) EBC_User_SetStatus(u, EBC_UserStatus_Init2); else EBC_User_SetStatus(u, EBC_UserStatus_Init1); return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqebics/requests/r_ini_h002.c0000664000175000017500000001667314043610745022655 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "r_ini_l.h" #include "aqebics/aqebics_l.h" #include "aqebics/msg/msg.h" #include "aqebics/msg/keys.h" #include "aqebics/msg/zip.h" #include "aqebics/msg/xml.h" #include "aqebics/client/user_l.h" #include "aqebics/client/provider_l.h" #include #include #include int EBC_Provider_XchgIniRequest_H002(AB_PROVIDER *pro, GWEN_HTTP_SESSION *sess, AB_USER *u) { int rv; GWEN_CRYPT_TOKEN *ct; const GWEN_CRYPT_TOKEN_CONTEXT *ctx; uint32_t kid; const GWEN_CRYPT_TOKEN_KEYINFO *signKeyInfo=NULL; xmlNsPtr ns; EB_MSG *msg; const char *userId; EB_MSG *mRsp; EB_RC rc; xmlDocPtr doc; xmlNodePtr root_node = NULL; xmlNodePtr node = NULL; GWEN_BUFFER *tbuf; const char *signVersion; const char *s; GWEN_BUFFER *bufKey; GWEN_BUFFER *bufZip; GWEN_BUFFER *bufB64; userId=AB_User_GetUserId(u); /* get crypt token and context */ rv=EBC_Provider_MountToken(pro, u, &ct, &ctx); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); return rv; } /* get crypt key info */ kid=GWEN_Crypt_Token_Context_GetSignKeyId(ctx); if (kid) { signKeyInfo=GWEN_Crypt_Token_GetKeyInfo(ct, kid, GWEN_CRYPT_TOKEN_KEYFLAGS_HASMODULUS | GWEN_CRYPT_TOKEN_KEYFLAGS_HASEXPONENT | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYVERSION | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYNUMBER, 0); if (signKeyInfo==NULL) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Sign key info not found on crypt token"); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("Sign key info not found on crypt token")); return GWEN_ERROR_NOT_FOUND; } } signVersion=EBC_User_GetSignVersion(u); if (!(signVersion && *signVersion)) signVersion="A004"; if (strcasecmp(signVersion, "A004")==0) { /* encode according to "DFUE-Abkommen" */ bufKey=GWEN_Buffer_new(0, 512, 0, 1); rc=EB_Key_Info_toBin(signKeyInfo, userId, "A004", 1024, bufKey); if (rc) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Error writing key (rc=%06x)", rc); GWEN_Buffer_free(bufKey); return GWEN_ERROR_GENERIC; } /* zip order */ bufZip=GWEN_Buffer_new(0, 512, 0, 1); if (EB_Zip_Deflate(GWEN_Buffer_GetStart(bufKey), GWEN_Buffer_GetUsedBytes(bufKey), bufZip)) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Unable to zip key data"); GWEN_Buffer_free(bufZip); GWEN_Buffer_free(bufKey); return GWEN_ERROR_GENERIC; } GWEN_Buffer_free(bufKey); /* base64 encode for order */ bufB64=GWEN_Buffer_new(0, 800, 0, 1); if (GWEN_Base64_Encode((const unsigned char *)GWEN_Buffer_GetStart(bufZip), GWEN_Buffer_GetUsedBytes(bufZip), bufB64, 0)) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Error encoding key"); GWEN_Buffer_free(bufB64); GWEN_Buffer_free(bufZip); return GWEN_ERROR_GENERIC; } GWEN_Buffer_free(bufZip); } else { DBG_ERROR(AQEBICS_LOGDOMAIN, "Unsupported sign version [%s]", signVersion); return GWEN_ERROR_INTERNAL; } /* create request */ msg=EB_Msg_new(); doc=EB_Msg_GetDoc(msg); root_node=xmlNewNode(NULL, BAD_CAST "ebicsUnsecuredRequest"); xmlDocSetRootElement(doc, root_node); ns=xmlNewNs(root_node, BAD_CAST "http://www.ebics.org/H002", NULL); assert(ns); ns=xmlNewNs(root_node, BAD_CAST "http://www.w3.org/2000/09/xmldsig#", BAD_CAST "ds"); assert(ns); ns=xmlNewNs(root_node, BAD_CAST "http://www.w3.org/2001/XMLSchema-instance", BAD_CAST "xsi"); xmlNewNsProp(root_node, ns, BAD_CAST "schemaLocation", /* xsi:schemaLocation */ BAD_CAST "http://www.ebics.org/H002 " "http://www.ebics.org/H002/ebics_keymgmt_request.xsd"); xmlNewProp(root_node, BAD_CAST "Version", BAD_CAST "H002"); xmlNewProp(root_node, BAD_CAST "Revision", BAD_CAST "1"); /* header */ node=xmlNewChild(root_node, NULL, BAD_CAST "header", NULL); xmlNewProp(node, BAD_CAST "authenticate", BAD_CAST "true"); xmlNewChild(node, NULL, BAD_CAST "static", NULL); xmlNewChild(node, NULL, BAD_CAST "mutable", NULL); /* body */ node=xmlNewChild(root_node, NULL, BAD_CAST "body", NULL); /* fill */ s=EBC_User_GetPeerId(u); if (s) EB_Msg_SetCharValue(msg, "header/static/HostID", s); s=AB_User_GetCustomerId(u); if (s) EB_Msg_SetCharValue(msg, "header/static/PartnerID", s); EB_Msg_SetCharValue(msg, "header/static/UserID", AB_User_GetUserId(u)); EB_Msg_SetCharValue(msg, "header/static/OrderDetails/OrderType", "INI"); tbuf=GWEN_Buffer_new(0, 16, 0, 1); rv=EBC_Provider_Generate_OrderId(pro, tbuf); if (rv<0) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Error creating order id (%d)", rv); GWEN_Buffer_free(tbuf); GWEN_Buffer_free(bufB64); EB_Msg_free(msg); return rv; } EB_Msg_SetCharValue(msg, "header/static/OrderDetails/OrderID", GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); EB_Msg_SetCharValue(msg, "header/static/OrderDetails/OrderAttribute", "DZNNN"); EB_Msg_SetCharValue(msg, "header/static/SecurityMedium", "0000"); EB_Msg_SetCharValue(msg, "body/DataTransfer/OrderData", GWEN_Buffer_GetStart(bufB64)); GWEN_Buffer_free(bufB64); /* exchange requests */ rv=EBC_Dialog_ExchangeMessages(sess, msg, &mRsp); if (rv<0 || rv>=300) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Error exchanging messages (%d)", rv); EB_Msg_free(msg); return rv; } EB_Msg_free(msg); /* check response */ assert(mRsp); /* log results */ EBC_Provider_LogRequestResults(pro, mRsp, NULL); rc=EB_Msg_GetResultCode(mRsp); if ((rc & 0xff0000)==0x090000 || (rc & 0xff0000)==0x060000) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Error response: (%06x)", rc); EB_Msg_free(mRsp); return AB_ERROR_SECURITY; } rc=EB_Msg_GetBodyResultCode(mRsp); if (rc) { if ((rc & 0xff0000)==0x090000 || (rc & 0xff0000)==0x060000) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Error response: (%06x)", rc); EB_Msg_free(mRsp); if ((rc & 0xfff00)==0x091300 || (rc & 0xfff00)==0x091200) return AB_ERROR_SECURITY; else return GWEN_ERROR_GENERIC; } } EB_Msg_free(mRsp); /* adjust user status and flags */ DBG_NOTICE(AQEBICS_LOGDOMAIN, "Adjusting user flags"); EBC_User_AddFlags(u, EBC_USER_FLAGS_INI); if ((EBC_User_GetFlags(u) & (EBC_USER_FLAGS_INI | EBC_USER_FLAGS_HIA)) == (EBC_USER_FLAGS_INI | EBC_USER_FLAGS_HIA)) EBC_User_SetStatus(u, EBC_UserStatus_Init2); else EBC_User_SetStatus(u, EBC_UserStatus_Init1); return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqebics/requests/Makefile.am0000664000175000017500000000271614043610745022705 00000000000000 AM_CPPFLAGS = -I$(top_srcdir)/src/libs -I$(top_builddir)/src/libs $(gwenhywfar_includes) -I$(srcdir)/../.. $(AQEBICS_CFLAGS) DEFS += -DLOCALEDIR=\"$(localedir)\" AM_CFLAGS=-DBUILDING_AQBANKING @visibility_cflags@ #typefiles=context.xml noinst_LTLIBRARIES=libaqebics_requests.la extra_sources= EXTRA_DIST=$(typefiles) $(extra_sources) noinst_HEADERS=\ r_download_l.h \ r_hia_l.h \ r_hkd_htd_l.h \ r_hpb_l.h \ r_hpd_l.h \ r_ini_l.h \ r_pub_l.h \ r_unsecured_l.h \ r_upload_l.h #iheaderdir=${includedir}/aqebics/client #iheader_HEADERS= libaqebics_requests_la_SOURCES=\ r_download.c \ r_download_h002.c \ r_download_h003.c \ r_hia.c \ r_hia_h002.c \ r_hia_h003.c \ r_hia_h004.c \ r_hkd_htd.c \ r_hpb.c \ r_hpb_h002.c \ r_hpb_h003.c \ r_hpb_h004.c \ r_hpd.c \ r_ini.c \ r_ini_h002.c \ r_ini_h003.c \ r_ini_h004.c \ r_pub.c \ r_pub_h002.c \ r_pub_h003.c \ r_unsecured.c \ r_unsecured_h004.c \ r_upload.c \ r_upload_h002.c \ r_upload_h003.c #typefiles: $(typefiles) # typemaker -d static $(typefiles) typefiles: $(typefiles) typemaker $(typefiles) sources: for d in $(SUBDIRS); do \ $(MAKE) -C $$d sources; \ done for f in $(libaqebics_requests_la_SOURCES) $(EXTRA_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done cppcheck: for f in $(libaqebics_requests_la_SOURCES); do \ cppcheck --force $$f ; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done aqbanking-6.6.1/src/libs/plugins/backends/aqebics/requests/r_hia_l.h0000664000175000017500000000204014043610745022405 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AQEBICS_CLIENT_R_HIA_L_H #define AQEBICS_CLIENT_R_HIA_L_H #include "aqebics/client/provider_l.h" #include #include #include int EBC_Provider_XchgHiaRequest(AB_PROVIDER *pro, GWEN_HTTP_SESSION *sess, AB_USER *u); int EBC_Provider_XchgHiaRequest_H002(AB_PROVIDER *pro, GWEN_HTTP_SESSION *sess, AB_USER *u); int EBC_Provider_XchgHiaRequest_H003(AB_PROVIDER *pro, GWEN_HTTP_SESSION *sess, AB_USER *u); int EBC_Provider_XchgHiaRequest_H004(AB_PROVIDER *pro, GWEN_HTTP_SESSION *sess, AB_USER *u); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqebics/requests/r_download_h003.c0000664000175000017500000004372714043610745023706 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "r_download_l.h" #include "aqebics/aqebics_l.h" #include "aqebics/msg/msg.h" #include "aqebics/msg/keys.h" #include "aqebics/msg/zip.h" #include "aqebics/msg/xml.h" #include "aqebics/client/user_l.h" #include "aqebics/client/provider_l.h" #include #include #include /* ------------------------------------------------------------------------------------------------------------------------- * forward declarations * ------------------------------------------------------------------------------------------------------------------------- */ static int _mkDownloadInitRequest(AB_PROVIDER *pro, AB_USER *u, const char *requestType, const GWEN_DATE *fromDate, const GWEN_DATE *toDate, EB_MSG **pMsg); static int _mkDownloadTransferRequest(AB_PROVIDER *pro, AB_USER *u, const char *transactionId, int segmentNumber, EB_MSG **pMsg); static int _mkDownloadReceiptRequest(AB_PROVIDER *pro, AB_USER *u, const char *transactionId, int receiptCode, EB_MSG **pMsg); static int _xchgDownloadInitRequest(AB_PROVIDER *pro, GWEN_HTTP_SESSION *sess, AB_USER *u, const char *requestType, const GWEN_DATE *fromDate, const GWEN_DATE *toDate, EB_MSG **pMsg); static int _downloadRemainingSegments(AB_PROVIDER *pro, GWEN_HTTP_SESSION *sess, AB_USER *u, const char *transactionId, int segmentCount, GWEN_BUFFER *dbuffer); static int _sendReceipt(AB_PROVIDER *pro, GWEN_HTTP_SESSION *sess, AB_USER *u, const char *transactionId, int withReceipt); /* ------------------------------------------------------------------------------------------------------------------------- * code * -------------------------------------------------------------------------------------------------------------------------- */ int EBC_Provider_XchgDownloadRequest_H003(AB_PROVIDER *pro, GWEN_HTTP_SESSION *sess, AB_USER *u, const char *requestType, GWEN_BUFFER *targetBuffer, int withReceipt, const GWEN_DATE *fromDate, const GWEN_DATE *toDate) { int rv; EB_MSG *mRsp=NULL; GWEN_CRYPT_KEY *skey=NULL; GWEN_BUFFER *dbuffer; int segmentCount; const char *s; char transactionId[36]; /* exchange initial request */ rv=_xchgDownloadInitRequest(pro, sess, u, requestType, fromDate, toDate, &mRsp); if (rv<0 || rv>=300) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); return rv; } /* extract key from response */ skey=EB_Msg_ExtractAndDecodeSessionKey(mRsp, pro, u); if (skey==NULL) { DBG_INFO(AQEBICS_LOGDOMAIN, "here"); return GWEN_ERROR_GENERIC; } /* extract transaction id */ s=EB_Msg_GetCharValue(mRsp, "header/static/TransactionID", NULL); if (s==NULL) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_Crypt_Key_free(skey); EB_Msg_free(mRsp); return rv; } strncpy(transactionId, s, sizeof(transactionId)-1); transactionId[sizeof(transactionId)-1]=0; /* extract number of segments */ segmentCount=EB_Msg_GetIntValue(mRsp, "header/static/NumSegments", 0); if (segmentCount==0) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Invalid segment count zero"); GWEN_Crypt_Key_free(skey); EB_Msg_free(mRsp); return rv; } /* create data buffer */ dbuffer=GWEN_Buffer_new(0, 1024, 0, 1); /* read first chunk of data */ s=EB_Msg_GetCharValue(mRsp, "body/DataTransfer/OrderData", NULL); if (!s) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Bad message from server: Missing OrderData"); GWEN_Buffer_free(dbuffer); GWEN_Crypt_Key_free(skey); EB_Msg_free(mRsp); return GWEN_ERROR_BAD_DATA; } GWEN_Buffer_AppendString(dbuffer, s); EB_Msg_free(mRsp); /* read remaining segments if any */ if (segmentCount>1) { rv=_downloadRemainingSegments(pro, sess, u, transactionId, segmentCount, dbuffer); if (rv<0 || rv>=300) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(dbuffer); GWEN_Crypt_Key_free(skey); return rv; } } /* decode and decrypt received data */ rv=EBC_Provider_DecodeAndDecryptData(pro, u, skey, GWEN_Buffer_GetStart(dbuffer), targetBuffer); if (rv<0 || rv>=300) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(dbuffer); GWEN_Crypt_Key_free(skey); return rv; } /* TODO: Disable this before release! */ #if 0 DBG_ERROR(AQEBICS_LOGDOMAIN, "Received this data:"); fprintf(stderr, "%s\n", GWEN_Buffer_GetStart(targetBuffer)); #endif GWEN_Buffer_free(dbuffer); GWEN_Crypt_Key_free(skey); /* send receipt */ rv=_sendReceipt(pro, sess, u, transactionId, withReceipt); if (rv<0 || rv>=300) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); return rv; } return 0; } int _xchgDownloadInitRequest(AB_PROVIDER *pro, GWEN_HTTP_SESSION *sess, AB_USER *u, const char *requestType, const GWEN_DATE *fromDate, const GWEN_DATE *toDate, EB_MSG **pMsg) { int rv; EB_MSG *msg=NULL; EB_MSG *mRsp; EB_RC rc; /* create initialisation request */ rv=_mkDownloadInitRequest(pro, u, requestType, fromDate, toDate, &msg); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); return rv; } /* exchange requests */ rv=EBC_Dialog_ExchangeMessages(sess, msg, &mRsp); if (rv<0 || rv>=300) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Error exchanging messages (%d)", rv); EB_Msg_free(msg); return rv; } EB_Msg_free(msg); /* check response */ assert(mRsp); /* log results */ EBC_Provider_LogRequestResults(pro, mRsp, NULL); rc=EB_Msg_GetResultCode(mRsp); if ((rc & 0xff0000)==0x090000 || (rc & 0xff0000)==0x060000) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Error response: (%06x)", rc); EB_Msg_free(mRsp); return AB_ERROR_SECURITY; } rc=EB_Msg_GetBodyResultCode(mRsp); if (rc) { if ((rc & 0xff0000)==0x090000 || (rc & 0xff0000)==0x060000) { EB_Msg_free(mRsp); if (rc==0x090005) { DBG_ERROR(AQEBICS_LOGDOMAIN, "No download data"); return GWEN_ERROR_NO_DATA; } else if ((rc & 0xfff00)==0x091300 || (rc & 0xfff00)==0x091200) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Security error (%06x)", rc); return AB_ERROR_SECURITY; } else { DBG_ERROR(AQEBICS_LOGDOMAIN, "Generic error (%06x)", rc); return GWEN_ERROR_GENERIC; } } else { DBG_NOTICE(AQEBICS_LOGDOMAIN, "Response: (%06x)", rc); } } *pMsg=mRsp; return rv; } int _downloadRemainingSegments(AB_PROVIDER *pro, GWEN_HTTP_SESSION *sess, AB_USER *u, const char *transactionId, int segmentCount, GWEN_BUFFER *dbuffer) { int segmentNumber; segmentNumber=2; for (;;) { EB_MSG *msg=NULL; EB_MSG *mRsp=NULL; int i; EB_RC rc; int rv; const char *s; rv=_mkDownloadTransferRequest(pro, u, transactionId, segmentNumber, &msg); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); return rv; } /* exchange requests */ rv=EBC_Dialog_ExchangeMessages(sess, msg, &mRsp); if (rv<0 || rv>=300) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Error exchanging messages (%d)", rv); EB_Msg_free(msg); return rv; } EB_Msg_free(msg); /* check response */ assert(mRsp); /* log results */ EBC_Provider_LogRequestResults(pro, mRsp, NULL); rc=EB_Msg_GetResultCode(mRsp); if ((rc & 0xff0000)==0x090000 || (rc & 0xff0000)==0x060000) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Error response: (%06x)", rc); EB_Msg_free(mRsp); return AB_ERROR_SECURITY; } i=EB_Msg_GetIntValue(mRsp, "header/mutable/SegmentNumber", 0); if (i!=segmentNumber) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Unexpected segment number (%d, expected %d)", i, segmentNumber); EB_Msg_free(mRsp); return GWEN_ERROR_BAD_DATA; } /* read next chunk of data */ s=EB_Msg_GetCharValue(mRsp, "body/DataTransfer/OrderData", NULL); if (!s) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Bad message from server: Missing OrderData"); EB_Msg_free(mRsp); return GWEN_ERROR_BAD_DATA; } GWEN_Buffer_AppendString(dbuffer, s); EB_Msg_free(mRsp); segmentNumber++; if (segmentNumber>=segmentCount) { DBG_INFO(AQEBICS_LOGDOMAIN, "Transfer finished"); break; } } /* for */ return 0; } int _sendReceipt(AB_PROVIDER *pro, GWEN_HTTP_SESSION *sess, AB_USER *u, const char *transactionId, int withReceipt) { EB_MSG *msg=NULL; EB_MSG *mRsp=NULL; int rv; /* send receipt message */ rv=_mkDownloadReceiptRequest(pro, u, transactionId, withReceipt?0:1, &msg); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); return rv; } /* exchange requests */ rv=EBC_Dialog_ExchangeMessagesAndCheckResponse(sess, msg, &mRsp); if (rv<0 || rv>=300) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Error exchanging messages (%d)", rv); EB_Msg_free(msg); return rv; } EB_Msg_free(msg); EB_Msg_free(mRsp); return rv; } int _mkDownloadInitRequest(AB_PROVIDER *pro, AB_USER *u, const char *requestType, const GWEN_DATE *fromDate, const GWEN_DATE *toDate, EB_MSG **pMsg) { int rv; EB_MSG *msg; const char *userId; const char *partnerId; xmlDocPtr doc; xmlNodePtr root_node = NULL; xmlNodePtr node = NULL; xmlNodePtr nodeX = NULL; xmlNodePtr nodeXX = NULL; xmlNodePtr nodeXXX = NULL; xmlNodePtr sigNode = NULL; GWEN_BUFFER *tbuf; const char *s; userId=AB_User_GetUserId(u); partnerId=AB_User_GetCustomerId(u); if (partnerId==NULL) partnerId=userId; /* create request */ msg=EB_Msg_new(); doc=EB_Msg_GetDoc(msg); root_node=xmlNewNode(NULL, BAD_CAST "ebicsRequest"); xmlDocSetRootElement(doc, root_node); EB_Xml_Ebicsify(root_node, "H003"); /* header */ node=xmlNewChild(root_node, NULL, BAD_CAST "header", NULL); xmlNewProp(node, BAD_CAST "authenticate", BAD_CAST "true"); nodeX=xmlNewChild(node, NULL, BAD_CAST "static", NULL); s=EBC_User_GetPeerId(u); nodeXX=xmlNewTextChild(nodeX, NULL, BAD_CAST "HostID", BAD_CAST(s?s:"EBICS")); /* generate Nonce */ tbuf=GWEN_Buffer_new(0, 128, 0, 1); rv=EBC_Provider_GenerateNonce(pro, tbuf); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); EB_Msg_free(msg); return rv; } nodeXX=xmlNewTextChild(nodeX, NULL, BAD_CAST "Nonce", BAD_CAST GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_Reset(tbuf); /* generate timestamp */ rv=EBC_Provider_GenerateTimeStamp(pro, u, tbuf); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); EB_Msg_free(msg); return rv; } nodeXX=xmlNewTextChild(nodeX, NULL, BAD_CAST "Timestamp", BAD_CAST GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); nodeXX=xmlNewTextChild(nodeX, NULL, BAD_CAST "PartnerID", BAD_CAST partnerId); nodeXX=xmlNewTextChild(nodeX, NULL, BAD_CAST "UserID", BAD_CAST userId); /* order details */ nodeXX=xmlNewChild(nodeX, NULL, BAD_CAST "OrderDetails", NULL); xmlNewTextChild(nodeXX, NULL, BAD_CAST "OrderType", BAD_CAST requestType); xmlNewTextChild(nodeXX, NULL, BAD_CAST "OrderAttribute", BAD_CAST "DZHNN"); /* order params */ nodeXXX=xmlNewChild(nodeXX, NULL, BAD_CAST "StandardOrderParams", NULL); if (fromDate || toDate) { xmlNodePtr nodeXXXX; GWEN_DATE *tempTime=NULL; const GWEN_DATE *t1; const GWEN_DATE *t2; t1=fromDate; t2=toDate; if (t1==NULL) /* no fromDate, use toDate for both */ t1=t2; if (t2==NULL) { /* no toDate, use current date */ tempTime=GWEN_Date_CurrentDate(); t2=tempTime; } nodeXXXX=xmlNewChild(nodeXXX, NULL, BAD_CAST "DateRange", NULL); if (t1) { GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Date_toStringWithTemplate(t1, "YYYY-MM-DD", tbuf); xmlNewTextChild(nodeXXXX, NULL, BAD_CAST "Start", BAD_CAST GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } if (t2) { GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Date_toStringWithTemplate(t2, "YYYY-MM-DD", tbuf); xmlNewTextChild(nodeXXXX, NULL, BAD_CAST "End", BAD_CAST GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } if (tempTime) GWEN_Date_free(tempTime); } /* bank pubkey digests */ nodeXX=xmlNewChild(nodeX, NULL, BAD_CAST "BankPubKeyDigests", NULL); rv=EBC_Provider_AddBankPubKeyDigests(pro, u, nodeXX); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); EB_Msg_free(msg); return rv; } /* security medium */ xmlNewTextChild(nodeX, NULL, BAD_CAST "SecurityMedium", BAD_CAST "0000"); /* mutable */ nodeX=xmlNewChild(node, NULL, BAD_CAST "mutable", NULL); xmlNewTextChild(nodeX, NULL, BAD_CAST "TransactionPhase", BAD_CAST "Initialisation"); /* prepare signature node */ sigNode=xmlNewChild(root_node, NULL, BAD_CAST "AuthSignature", NULL); /* body */ node=xmlNewChild(root_node, NULL, BAD_CAST "body", NULL); /* sign */ rv=EBC_Provider_SignMessage(pro, msg, u, sigNode); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); EB_Msg_free(msg); return rv; } *pMsg=msg; return 0; } int _mkDownloadTransferRequest(AB_PROVIDER *pro, AB_USER *u, const char *transactionId, int segmentNumber, EB_MSG **pMsg) { int rv; EB_MSG *msg; xmlDocPtr doc; xmlNodePtr root_node = NULL; xmlNodePtr node = NULL; xmlNodePtr nodeX = NULL; xmlNodePtr sigNode = NULL; const char *s; /* create request */ msg=EB_Msg_new(); doc=EB_Msg_GetDoc(msg); root_node=xmlNewNode(NULL, BAD_CAST "ebicsRequest"); xmlDocSetRootElement(doc, root_node); EB_Xml_Ebicsify(root_node, "H003"); /* header */ node=xmlNewChild(root_node, NULL, BAD_CAST "header", NULL); xmlNewProp(node, BAD_CAST "authenticate", BAD_CAST "true"); nodeX=xmlNewChild(node, NULL, BAD_CAST "static", NULL); s=EBC_User_GetPeerId(u); xmlNewTextChild(nodeX, NULL, BAD_CAST "HostID", BAD_CAST(s?s:"EBICS")); xmlNewTextChild(nodeX, NULL, BAD_CAST "TransactionID", BAD_CAST transactionId); /* mutable */ nodeX=xmlNewChild(node, NULL, BAD_CAST "mutable", NULL); xmlNewTextChild(nodeX, NULL, BAD_CAST "TransactionPhase", BAD_CAST "Transfer"); EB_Msg_SetIntValue(msg, "header/mutable/SegmentNumber", segmentNumber); /* prepare signature node */ sigNode=xmlNewChild(root_node, NULL, BAD_CAST "AuthSignature", NULL); /* body */ node=xmlNewChild(root_node, NULL, BAD_CAST "body", NULL); /* sign */ rv=EBC_Provider_SignMessage(pro, msg, u, sigNode); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); EB_Msg_free(msg); return rv; } *pMsg=msg; return 0; } int _mkDownloadReceiptRequest(AB_PROVIDER *pro, AB_USER *u, const char *transactionId, int receiptCode, EB_MSG **pMsg) { int rv; EB_MSG *msg; xmlDocPtr doc; xmlNodePtr root_node = NULL; xmlNodePtr node = NULL; xmlNodePtr nodeX = NULL; xmlNodePtr sigNode = NULL; const char *s; /* create request */ msg=EB_Msg_new(); doc=EB_Msg_GetDoc(msg); root_node=xmlNewNode(NULL, BAD_CAST "ebicsRequest"); xmlDocSetRootElement(doc, root_node); EB_Xml_Ebicsify(root_node, "H003"); /* header */ node=xmlNewChild(root_node, NULL, BAD_CAST "header", NULL); xmlNewProp(node, BAD_CAST "authenticate", BAD_CAST "true"); nodeX=xmlNewChild(node, NULL, BAD_CAST "static", NULL); s=EBC_User_GetPeerId(u); xmlNewTextChild(nodeX, NULL, BAD_CAST "HostID", BAD_CAST(s?s:"EBICS")); xmlNewTextChild(nodeX, NULL, BAD_CAST "TransactionID", BAD_CAST transactionId); /* mutable */ nodeX=xmlNewChild(node, NULL, BAD_CAST "mutable", NULL); xmlNewTextChild(nodeX, NULL, BAD_CAST "TransactionPhase", BAD_CAST "Receipt"); /* prepare signature node */ sigNode=xmlNewChild(root_node, NULL, BAD_CAST "AuthSignature", NULL); /* body */ node=xmlNewChild(root_node, NULL, BAD_CAST "body", NULL); nodeX=xmlNewChild(node, NULL, BAD_CAST "TransferReceipt", NULL); xmlNewProp(nodeX, BAD_CAST "authenticate", BAD_CAST "true"); EB_Msg_SetIntValue(msg, "body/TransferReceipt/ReceiptCode", receiptCode); /* sign */ rv=EBC_Provider_SignMessage(pro, msg, u, sigNode); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); EB_Msg_free(msg); return rv; } *pMsg=msg; return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqebics/requests/r_hia_h002.c0000664000175000017500000002167714043610745022637 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "r_hia_l.h" #include "aqebics/aqebics_l.h" #include "aqebics/msg/msg.h" #include "aqebics/msg/keys.h" #include "aqebics/msg/zip.h" #include "aqebics/msg/xml.h" #include "aqebics/client/user_l.h" #include #include #include int EBC_Provider_XchgHiaRequest_H002(AB_PROVIDER *pro, GWEN_HTTP_SESSION *sess, AB_USER *u) { int rv; GWEN_CRYPT_TOKEN *ct; const GWEN_CRYPT_TOKEN_CONTEXT *ctx; uint32_t kid; const GWEN_CRYPT_TOKEN_KEYINFO *cryptKeyInfo=NULL; const GWEN_CRYPT_TOKEN_KEYINFO *authKeyInfo=NULL; xmlNsPtr ns; EB_MSG *msg; const char *userId; const char *partnerId; EB_MSG *mRsp; EB_RC rc; xmlDocPtr doc; xmlNodePtr root_node = NULL; xmlNodePtr node = NULL; GWEN_BUFFER *mbuf; GWEN_BUFFER *tbuf; const char *s; userId=AB_User_GetUserId(u); partnerId=AB_User_GetCustomerId(u); /* get crypt token and context */ rv=EBC_Provider_MountToken(pro, u, &ct, &ctx); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); return rv; } /* get crypt key info */ kid=GWEN_Crypt_Token_Context_GetDecipherKeyId(ctx); if (kid) { cryptKeyInfo=GWEN_Crypt_Token_GetKeyInfo(ct, kid, GWEN_CRYPT_TOKEN_KEYFLAGS_HASMODULUS | GWEN_CRYPT_TOKEN_KEYFLAGS_HASEXPONENT | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYVERSION | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYNUMBER, 0); if (cryptKeyInfo==NULL) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Crypt key info not found on crypt token"); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("Crypt key info not found on crypt token")); return GWEN_ERROR_NOT_FOUND; } } /* get auth sign key info */ kid=GWEN_Crypt_Token_Context_GetAuthSignKeyId(ctx); if (kid) { authKeyInfo=GWEN_Crypt_Token_GetKeyInfo(ct, kid, GWEN_CRYPT_TOKEN_KEYFLAGS_HASMODULUS | GWEN_CRYPT_TOKEN_KEYFLAGS_HASEXPONENT | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYVERSION | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYNUMBER, 0); if (authKeyInfo==NULL) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Auth key info not found on crypt token"); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("Auth key info not found on crypt token")); return GWEN_ERROR_NOT_FOUND; } } /* create HIARequestOrderData */ doc=xmlNewDoc(BAD_CAST "1.0"); doc->encoding=xmlCharStrdup("UTF-8"); root_node=xmlNewNode(NULL, BAD_CAST "HIARequestOrderData"); xmlDocSetRootElement(doc, root_node); ns=xmlNewNs(root_node, BAD_CAST "http://www.ebics.org/H002", NULL); assert(ns); ns=xmlNewNs(root_node, BAD_CAST "http://www.w3.org/2000/09/xmldsig#", BAD_CAST "ds"); assert(ns); ns=xmlNewNs(root_node, BAD_CAST "http://www.w3.org/2001/XMLSchema-instance", BAD_CAST "xsi"); xmlNewNsProp(root_node, ns, BAD_CAST "schemaLocation", /* xsi:schemaLocation */ BAD_CAST "http://www.ebics.org/H002 " "http://www.ebics.org/H002/ebics_orders.xsd"); /* create auth key tree */ node=xmlNewChild(root_node, NULL, BAD_CAST "AuthenticationPubKeyInfo", NULL); rv=EB_Key_Info_toXml(authKeyInfo, node); if (rv<0) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Error response: (%d)", rv); xmlFreeDoc(doc); return GWEN_ERROR_INVALID; } xmlNewChild(node, NULL, BAD_CAST "AuthenticationVersion", BAD_CAST "X001"); /* create crypt key tree */ node=xmlNewChild(root_node, NULL, BAD_CAST "EncryptionPubKeyInfo", NULL); rv=EB_Key_Info_toXml(cryptKeyInfo, node); if (rv<0) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Error response: (%d)", rv); xmlFreeDoc(doc); return rv; } xmlNewChild(node, NULL, BAD_CAST "EncryptionVersion", BAD_CAST "E001"); /* store partner id and user id */ node=xmlNewChild(root_node, NULL, BAD_CAST "PartnerID", BAD_CAST partnerId); node=xmlNewChild(root_node, NULL, BAD_CAST "UserID", BAD_CAST userId); /* compress and base64 doc */ mbuf=GWEN_Buffer_new(0, 512, 0, 1); rv=EB_Xml_Compress64Doc(doc, mbuf); if (rv<0) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Error compressing/encoding doc (%d)", rv); xmlFreeDoc(doc); return rv; } xmlFreeDoc(doc); /* create request */ msg=EB_Msg_new(); doc=EB_Msg_GetDoc(msg); root_node=xmlNewNode(NULL, BAD_CAST "ebicsUnsecuredRequest"); xmlDocSetRootElement(doc, root_node); ns=xmlNewNs(root_node, BAD_CAST "http://www.ebics.org/H002", NULL); assert(ns); ns=xmlNewNs(root_node, BAD_CAST "http://www.w3.org/2000/09/xmldsig#", BAD_CAST "ds"); assert(ns); ns=xmlNewNs(root_node, BAD_CAST "http://www.w3.org/2001/XMLSchema-instance", BAD_CAST "xsi"); xmlNewNsProp(root_node, ns, BAD_CAST "schemaLocation", /* xsi:schemaLocation */ BAD_CAST "http://www.ebics.org/H002 " "http://www.ebics.org/H002/ebics_keymgmt_request.xsd"); xmlNewProp(root_node, BAD_CAST "Version", BAD_CAST "H002"); xmlNewProp(root_node, BAD_CAST "Revision", BAD_CAST "1"); /* header */ node=xmlNewChild(root_node, NULL, BAD_CAST "header", NULL); xmlNewProp(node, BAD_CAST "authenticate", BAD_CAST "true"); xmlNewChild(node, NULL, BAD_CAST "static", NULL); xmlNewChild(node, NULL, BAD_CAST "mutable", NULL); /* body */ node=xmlNewChild(root_node, NULL, BAD_CAST "body", NULL); /* fill */ s=EBC_User_GetPeerId(u); if (s) EB_Msg_SetCharValue(msg, "header/static/HostID", s); s=AB_User_GetCustomerId(u); if (s) EB_Msg_SetCharValue(msg, "header/static/PartnerID", s); EB_Msg_SetCharValue(msg, "header/static/UserID", AB_User_GetUserId(u)); EB_Msg_SetCharValue(msg, "header/static/OrderDetails/OrderType", "HIA"); tbuf=GWEN_Buffer_new(0, 16, 0, 1); rv=EBC_Provider_Generate_OrderId(pro, tbuf); if (rv<0) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Error exchanging messages (%d)", rv); GWEN_Buffer_free(tbuf); GWEN_Buffer_free(mbuf); EB_Msg_free(msg); return rv; } EB_Msg_SetCharValue(msg, "header/static/OrderDetails/OrderID", GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); EB_Msg_SetCharValue(msg, "header/static/OrderDetails/OrderAttribute", "DZNNN"); EB_Msg_SetCharValue(msg, "header/static/SecurityMedium", "0200"); EB_Msg_SetCharValue(msg, "body/DataTransfer/OrderData", GWEN_Buffer_GetStart(mbuf)); GWEN_Buffer_free(mbuf); /* exchange requests */ rv=EBC_Dialog_ExchangeMessages(sess, msg, &mRsp); if (rv<0 || rv>=300) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Error exchanging messages (%d)", rv); EB_Msg_free(msg); return rv; } EB_Msg_free(msg); /* check response */ assert(mRsp); /* log results */ EBC_Provider_LogRequestResults(pro, mRsp, NULL); rc=EB_Msg_GetResultCode(mRsp); if ((rc & 0xff0000)==0x090000 || (rc & 0xff0000)==0x060000) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Error response: (%06x)", rc); EB_Msg_free(mRsp); return AB_ERROR_SECURITY; } rc=EB_Msg_GetBodyResultCode(mRsp); if (rc) { if ((rc & 0xff0000)==0x090000 || (rc & 0xff0000)==0x060000) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Error response: (%06x)", rc); EB_Msg_free(mRsp); if ((rc & 0xfff00)==0x091300 || (rc & 0xfff00)==0x091200) return AB_ERROR_SECURITY; else return GWEN_ERROR_GENERIC; } } EB_Msg_free(mRsp); /* adjust user status and flags */ DBG_NOTICE(AQEBICS_LOGDOMAIN, "Adjusting user flags"); EBC_User_AddFlags(u, EBC_USER_FLAGS_HIA); if ((EBC_User_GetFlags(u) & (EBC_USER_FLAGS_INI | EBC_USER_FLAGS_HIA)) == (EBC_USER_FLAGS_INI | EBC_USER_FLAGS_HIA)) EBC_User_SetStatus(u, EBC_UserStatus_Init2); else EBC_User_SetStatus(u, EBC_UserStatus_Init1); return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqebics/requests/r_hkd_htd_l.h0000664000175000017500000000145214043610745023257 00000000000000/*************************************************************************** begin : Fri Dec 28 2018 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AQEBICS_CLIENT_R_HKD_HTD_L_H #define AQEBICS_CLIENT_R_HKD_HTD_L_H #include "aqebics/client/provider.h" #include #include int EBC_Provider_XchgHkdRequest(AB_PROVIDER *pro, GWEN_HTTP_SESSION *sess, AB_USER *u); int EBC_Provider_XchgHtdRequest(AB_PROVIDER *pro, GWEN_HTTP_SESSION *sess, AB_USER *u); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqebics/requests/r_upload_h002.c0000664000175000017500000004442414043610745023355 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "r_upload_l.h" #include "aqebics/aqebics_l.h" #include "aqebics/msg/msg.h" #include "aqebics/msg/keys.h" #include "aqebics/msg/zip.h" #include "aqebics/msg/xml.h" #include "aqebics/client/user_l.h" #include "aqebics/client/provider_l.h" #include #include #include #include static int EBC_Provider_MkUploadInitRequest_H002(AB_PROVIDER *pro, GWEN_HTTP_SESSION *sess, AB_USER *u, const char *requestType, GWEN_CRYPT_KEY *skey, const char *pEu, uint32_t dlen, EB_MSG **pMsg) { int rv; xmlNsPtr ns; EB_MSG *msg; const char *userId; const char *partnerId; xmlDocPtr doc; xmlNodePtr root_node = NULL; xmlNodePtr node = NULL; xmlNodePtr nodeX = NULL; xmlNodePtr nodeXX = NULL; xmlNodePtr sigNode = NULL; GWEN_BUFFER *tbuf; const char *s; char numbuf[32]; userId=AB_User_GetUserId(u); partnerId=AB_User_GetCustomerId(u); if (partnerId==NULL) partnerId=userId; /* create request */ msg=EB_Msg_new(); doc=EB_Msg_GetDoc(msg); root_node=xmlNewNode(NULL, BAD_CAST "ebicsRequest"); xmlDocSetRootElement(doc, root_node); ns=xmlNewNs(root_node, BAD_CAST "http://www.ebics.org/H002", NULL); assert(ns); ns=xmlNewNs(root_node, BAD_CAST "http://www.w3.org/2000/09/xmldsig#", BAD_CAST "ds"); assert(ns); ns=xmlNewNs(root_node, BAD_CAST "http://www.w3.org/2001/XMLSchema-instance", BAD_CAST "xsi"); xmlNewNsProp(root_node, ns, BAD_CAST "schemaLocation", /* xsi:schemaLocation */ BAD_CAST "http://www.ebics.org/H002 " "http://www.ebics.org/H002/ebics_request.xsd"); xmlNewProp(root_node, BAD_CAST "Version", BAD_CAST "H002"); xmlNewProp(root_node, BAD_CAST "Revision", BAD_CAST "1"); /* header */ node=xmlNewChild(root_node, NULL, BAD_CAST "header", NULL); xmlNewProp(node, BAD_CAST "authenticate", BAD_CAST "true"); nodeX=xmlNewChild(node, NULL, BAD_CAST "static", NULL); s=EBC_User_GetPeerId(u); if (!s) s="EBICS"; nodeXX=xmlNewTextChild(nodeX, NULL, BAD_CAST "HostID", BAD_CAST s); /* generate Nonce */ tbuf=GWEN_Buffer_new(0, 128, 0, 1); rv=EBC_Provider_GenerateNonce(pro, tbuf); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); EB_Msg_free(msg); return rv; } nodeXX=xmlNewTextChild(nodeX, NULL, BAD_CAST "Nonce", BAD_CAST GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_Reset(tbuf); /* generate timestamp */ rv=EBC_Provider_GenerateTimeStamp(pro, u, tbuf); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); EB_Msg_free(msg); return rv; } nodeXX=xmlNewTextChild(nodeX, NULL, BAD_CAST "Timestamp", BAD_CAST GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_Reset(tbuf); nodeXX=xmlNewTextChild(nodeX, NULL, BAD_CAST "PartnerID", BAD_CAST partnerId); nodeXX=xmlNewTextChild(nodeX, NULL, BAD_CAST "UserID", BAD_CAST userId); /* order details */ nodeXX=xmlNewChild(nodeX, NULL, BAD_CAST "OrderDetails", NULL); xmlNewTextChild(nodeXX, NULL, BAD_CAST "OrderType", BAD_CAST requestType); /* generate order id */ rv=EBC_Provider_Generate_OrderId(pro, tbuf); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); EB_Msg_free(msg); return rv; } xmlNewTextChild(nodeXX, NULL, BAD_CAST "OrderID", BAD_CAST GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); if (EBC_User_GetFlags(u) & EBC_USER_FLAGS_NO_EU) xmlNewTextChild(nodeXX, NULL, BAD_CAST "OrderAttribute", BAD_CAST "DZHNN"); else xmlNewTextChild(nodeXX, NULL, BAD_CAST "OrderAttribute", BAD_CAST "OZHNN"); xmlNewChild(nodeXX, NULL, BAD_CAST "StandardOrderParams", NULL); /* bank pubkey digests */ nodeXX=xmlNewChild(nodeX, NULL, BAD_CAST "BankPubKeyDigests", NULL); rv=EBC_Provider_AddBankPubKeyDigests(pro, u, nodeXX); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); EB_Msg_free(msg); return rv; } /* security medium */ xmlNewTextChild(nodeX, NULL, BAD_CAST "SecurityMedium", BAD_CAST "0000"); snprintf(numbuf, sizeof(numbuf)-1, "%i", (dlen+(1024*1024)-1)/(1024*1024)); numbuf[sizeof(numbuf)-1]=0; xmlNewTextChild(nodeX, NULL, BAD_CAST "NumSegments", BAD_CAST numbuf); /* mutable */ nodeX=xmlNewChild(node, NULL, BAD_CAST "mutable", NULL); xmlNewTextChild(nodeX, NULL, BAD_CAST "TransactionPhase", BAD_CAST "Initialisation"); /* prepare signature node */ sigNode=xmlNewChild(root_node, NULL, BAD_CAST "AuthSignature", NULL); /* body */ node=xmlNewChild(root_node, NULL, BAD_CAST "body", NULL); /* data transfer */ nodeX=xmlNewChild(node, NULL, BAD_CAST "DataTransfer", NULL); /* add session key and info */ nodeXX=xmlNewChild(nodeX, NULL, BAD_CAST "DataEncryptionInfo", NULL); xmlNewProp(nodeXX, BAD_CAST "authenticate", BAD_CAST "true"); rv=EBC_Provider_FillDataEncryptionInfoNode(pro, u, skey, nodeXX); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); EB_Msg_free(msg); return rv; } if (!(EBC_User_GetFlags(u) & EBC_USER_FLAGS_NO_EU)) { /* add EU */ nodeXX=xmlNewTextChild(nodeX, NULL, BAD_CAST "SignatureData", BAD_CAST pEu); xmlNewProp(nodeXX, BAD_CAST "authenticate", BAD_CAST "true"); } /* sign */ rv=EBC_Provider_SignMessage(pro, msg, u, sigNode); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); EB_Msg_free(msg); return rv; } *pMsg=msg; return 0; } static int EBC_Provider_MkUploadTransferRequest_H002(AB_PROVIDER *pro, GWEN_HTTP_SESSION *sess, AB_USER *u, const char *transactionId, const char *pData, uint32_t lData, int segmentNumber, int isLast, EB_MSG **pMsg) { int rv; xmlNsPtr ns; EB_MSG *msg; const char *userId; const char *partnerId; xmlDocPtr doc; xmlNodePtr root_node = NULL; xmlNodePtr node = NULL; xmlNodePtr nodeX = NULL; xmlNodePtr nodeXX = NULL; xmlNodePtr sigNode = NULL; GWEN_BUFFER *tbuf; const char *s; char numbuf[32]; userId=AB_User_GetUserId(u); partnerId=AB_User_GetCustomerId(u); if (partnerId==NULL) partnerId=userId; /* create request */ msg=EB_Msg_new(); doc=EB_Msg_GetDoc(msg); root_node=xmlNewNode(NULL, BAD_CAST "ebicsRequest"); xmlDocSetRootElement(doc, root_node); ns=xmlNewNs(root_node, BAD_CAST "http://www.ebics.org/H002", NULL); assert(ns); ns=xmlNewNs(root_node, BAD_CAST "http://www.w3.org/2000/09/xmldsig#", BAD_CAST "ds"); assert(ns); ns=xmlNewNs(root_node, BAD_CAST "http://www.w3.org/2001/XMLSchema-instance", BAD_CAST "xsi"); xmlNewNsProp(root_node, ns, BAD_CAST "schemaLocation", /* xsi:schemaLocation */ BAD_CAST "http://www.ebics.org/H002 " "http://www.ebics.org/H002/ebics_request.xsd"); xmlNewProp(root_node, BAD_CAST "Version", BAD_CAST "H002"); xmlNewProp(root_node, BAD_CAST "Revision", BAD_CAST "1"); /* header */ node=xmlNewChild(root_node, NULL, BAD_CAST "header", NULL); xmlNewProp(node, BAD_CAST "authenticate", BAD_CAST "true"); nodeX=xmlNewChild(node, NULL, BAD_CAST "static", NULL); s=EBC_User_GetPeerId(u); if (!s) s="EBICS"; nodeXX=xmlNewTextChild(nodeX, NULL, BAD_CAST "HostID", BAD_CAST s); nodeXX=xmlNewTextChild(nodeX, NULL, BAD_CAST "TransactionID", BAD_CAST transactionId); /* mutable */ nodeX=xmlNewChild(node, NULL, BAD_CAST "mutable", NULL); xmlNewTextChild(nodeX, NULL, BAD_CAST "TransactionPhase", BAD_CAST "Transfer"); snprintf(numbuf, sizeof(numbuf)-1, "%d", segmentNumber); numbuf[sizeof(numbuf)-1]=0; nodeXX=xmlNewTextChild(nodeX, NULL, BAD_CAST "SegmentNumber", BAD_CAST numbuf); xmlNewProp(nodeXX, BAD_CAST "lastSegment", BAD_CAST(isLast?"true":"false")); /* prepare signature node */ sigNode=xmlNewChild(root_node, NULL, BAD_CAST "AuthSignature", NULL); /* body */ node=xmlNewChild(root_node, NULL, BAD_CAST "body", NULL); /* data transfer */ nodeX=xmlNewChild(node, NULL, BAD_CAST "DataTransfer", NULL); tbuf=GWEN_Buffer_new(0, lData, 0, 1); GWEN_Buffer_AppendBytes(tbuf, pData, lData); nodeXX=xmlNewChild(nodeX, NULL, BAD_CAST "OrderData", BAD_CAST GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); /* sign */ rv=EBC_Provider_SignMessage(pro, msg, u, sigNode); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); EB_Msg_free(msg); return rv; } *pMsg=msg; return 0; } int EBC_Provider_XchgUploadRequest_H002(AB_PROVIDER *pro, GWEN_HTTP_SESSION *sess, AB_USER *u, const char *requestType, const uint8_t *pData, uint32_t lData) { int rv; GWEN_CRYPT_KEY *skey; GWEN_BUFFER *euBuf=NULL; GWEN_BUFFER *dbuf; EB_MSG *msg=NULL; EB_MSG *mRsp; uint32_t numSegs; uint32_t i; EB_RC rc; GWEN_BUFFER *logbuf; logbuf=GWEN_Buffer_new(0, 128, 0, 1); /* generate session key */ DBG_INFO(AQEBICS_LOGDOMAIN, "Generating session key"); skey=GWEN_Crypt_KeyDes3K_Generate(GWEN_Crypt_CryptMode_Cbc, 24, 2); if (skey==NULL) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Unable to generate DES key"); return GWEN_ERROR_GENERIC; } if (!(EBC_User_GetFlags(u) & EBC_USER_FLAGS_NO_EU)) { /* generate electronic signature */ DBG_INFO(AQEBICS_LOGDOMAIN, "Generating electronic signature for user [%s]", AB_User_GetUserId(u)); euBuf=GWEN_Buffer_new(0, 1024, 0, 1); rv=EBC_Provider_MkEuCryptZipDoc(pro, u, requestType, pData, lData, skey, euBuf); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(euBuf); GWEN_Crypt_Key_free(skey); GWEN_Buffer_AppendString(logbuf, I18N("\tError signing upload document")); GWEN_Buffer_AppendString(logbuf, " ("); GWEN_Buffer_AppendString(logbuf, AB_User_GetUserId(u)); GWEN_Buffer_AppendString(logbuf, ")\n"); Ab_HttpSession_AddLog(sess, GWEN_Buffer_GetStart(logbuf)); GWEN_Buffer_free(logbuf); return rv; } GWEN_Buffer_AppendString(logbuf, I18N("\tUpload document signed")); GWEN_Buffer_AppendString(logbuf, " ("); GWEN_Buffer_AppendString(logbuf, AB_User_GetUserId(u)); GWEN_Buffer_AppendString(logbuf, ")\n"); } /* encrypt and encode data */ DBG_INFO(AQEBICS_LOGDOMAIN, "Encrypting, zipping and encoding upload data"); dbuf=GWEN_Buffer_new(0, (lData*4)/3, 0, 1); rv=EBC_Provider_EncryptData(pro, u, skey, pData, lData, dbuf); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(dbuf); GWEN_Buffer_free(euBuf); GWEN_Crypt_Key_free(skey); GWEN_Buffer_AppendString(logbuf, I18N("\tError encrypting upload document\n")); Ab_HttpSession_AddLog(sess, GWEN_Buffer_GetStart(logbuf)); GWEN_Buffer_free(logbuf); return rv; } GWEN_Buffer_AppendString(logbuf, I18N("\tUpload document encrypted\n")); numSegs=(GWEN_Buffer_GetUsedBytes(dbuf)+(1024*1024)-1)/(1024*1024); /* create upload init request */ DBG_INFO(AQEBICS_LOGDOMAIN, "Generating upload init request"); if (EBC_User_GetFlags(u) & EBC_USER_FLAGS_NO_EU) rv=EBC_Provider_MkUploadInitRequest_H002(pro, sess, u, requestType, skey, NULL, /* no EU */ GWEN_Buffer_GetUsedBytes(dbuf), &msg); else rv=EBC_Provider_MkUploadInitRequest_H002(pro, sess, u, requestType, skey, GWEN_Buffer_GetStart(euBuf), GWEN_Buffer_GetUsedBytes(dbuf), &msg); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(dbuf); GWEN_Buffer_free(euBuf); GWEN_Crypt_Key_free(skey); Ab_HttpSession_AddLog(sess, GWEN_Buffer_GetStart(logbuf)); GWEN_Buffer_free(logbuf); return rv; } /* exchange requests */ DBG_INFO(AQEBICS_LOGDOMAIN, "Exchanging upload init request"); GWEN_Buffer_AppendString(logbuf, I18N("\tExchanging upload init request")); rv=EBC_Dialog_ExchangeMessages(sess, msg, &mRsp); if (rv<0 || rv>=300) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Error exchanging messages (%d)", rv); EB_Msg_free(msg); GWEN_Buffer_free(dbuf); GWEN_Buffer_free(euBuf); GWEN_Crypt_Key_free(skey); Ab_HttpSession_AddLog(sess, GWEN_Buffer_GetStart(logbuf)); GWEN_Buffer_free(logbuf); return rv; } EB_Msg_free(msg); GWEN_Buffer_free(euBuf); GWEN_Crypt_Key_free(skey); /* check response */ assert(mRsp); /* log results */ EBC_Provider_LogRequestResults(pro, mRsp, logbuf); rc=EB_Msg_GetResultCode(mRsp); if ((rc & 0xff0000)==0x090000 || (rc & 0xff0000)==0x060000) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Error response: (%06x)", rc); EB_Msg_free(mRsp); return AB_ERROR_SECURITY; } rc=EB_Msg_GetBodyResultCode(mRsp); if (rc) { if ((rc & 0xff0000)==0x090000 || (rc & 0xff0000)==0x060000) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Error response: (%06x)", rc); EB_Msg_free(mRsp); GWEN_Buffer_free(dbuf); Ab_HttpSession_AddLog(sess, GWEN_Buffer_GetStart(logbuf)); GWEN_Buffer_free(logbuf); if ((rc & 0xfff00)==0x091300 || (rc & 0xfff00)==0x091200) return AB_ERROR_SECURITY; else return GWEN_ERROR_GENERIC; } } if (1) { const char *s; char transactionId[36]; const char *p; uint32_t bytesLeft; /* extract transaction id */ s=EB_Msg_GetCharValue(mRsp, "header/static/TransactionID", NULL); if (s==NULL) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); EB_Msg_free(mRsp); GWEN_Buffer_free(dbuf); Ab_HttpSession_AddLog(sess, GWEN_Buffer_GetStart(logbuf)); GWEN_Buffer_free(logbuf); return rv; } strncpy(transactionId, s, sizeof(transactionId)-1); EB_Msg_free(mRsp); /* write data */ p=GWEN_Buffer_GetStart(dbuf); bytesLeft=GWEN_Buffer_GetUsedBytes(dbuf); for (i=0; ibytesLeft) n=bytesLeft; assert(n); DBG_INFO(AQEBICS_LOGDOMAIN, "Generating upload transfer request"); rv=EBC_Provider_MkUploadTransferRequest_H002(pro, sess, u, transactionId, p, n, i+1, (i==numSegs-1)?1:0, &msg); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(dbuf); Ab_HttpSession_AddLog(sess, GWEN_Buffer_GetStart(logbuf)); GWEN_Buffer_free(logbuf); return rv; } /* exchange requests */ DBG_INFO(AQEBICS_LOGDOMAIN, "Exchanging upload transfer request"); GWEN_Buffer_AppendString(logbuf, I18N("\tExchanging upload transfer request")); rv=EBC_Dialog_ExchangeMessages(sess, msg, &mRsp); if (rv<0 || rv>=300) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Error exchanging messages (%d)", rv); EB_Msg_free(msg); GWEN_Buffer_free(dbuf); Ab_HttpSession_AddLog(sess, GWEN_Buffer_GetStart(logbuf)); GWEN_Buffer_free(logbuf); return rv; } EB_Msg_free(msg); /* check response */ assert(mRsp); /* log results */ EBC_Provider_LogRequestResults(pro, mRsp, logbuf); rc=EB_Msg_GetResultCode(mRsp); if ((rc & 0xff0000)==0x090000 || (rc & 0xff0000)==0x060000) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Error response: (%06x)", rc); EB_Msg_free(mRsp); GWEN_Buffer_free(dbuf); Ab_HttpSession_AddLog(sess, GWEN_Buffer_GetStart(logbuf)); GWEN_Buffer_free(logbuf); return AB_ERROR_SECURITY; } /* prepare next round */ EB_Msg_free(mRsp); p+=n; bytesLeft-=n; } /* for */ } GWEN_Buffer_free(dbuf); DBG_INFO(AQEBICS_LOGDOMAIN, "Upload finished"); GWEN_Buffer_AppendString(logbuf, I18N("\tUpload finished")); Ab_HttpSession_AddLog(sess, GWEN_Buffer_GetStart(logbuf)); GWEN_Buffer_free(logbuf); return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqebics/requests/r_hpb_h004.c0000664000175000017500000002415714043610745022645 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "r_hpb_l.h" #include "aqebics/aqebics_l.h" #include "aqebics/msg/msg.h" #include "aqebics/msg/keys.h" #include "aqebics/msg/zip.h" #include "aqebics/msg/xml.h" #include "aqebics/client/user_l.h" #include #include #include int EBC_Provider_XchgHpbRequest_H004(AB_PROVIDER *pro, GWEN_HTTP_SESSION *sess, AB_USER *u) { int rv; GWEN_CRYPT_TOKEN *ct; const GWEN_CRYPT_TOKEN_CONTEXT *ctx; uint32_t keyId; xmlNsPtr ns; EB_MSG *msg; EB_MSG *mRsp; EB_RC rc; xmlDocPtr doc; xmlNodePtr root_node = NULL; xmlNodePtr node = NULL; xmlNodePtr sigNode = NULL; GWEN_BUFFER *tbuf; const char *s; /* get crypt token and context */ rv=EBC_Provider_MountToken(pro, u, &ct, &ctx); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); return rv; } /* create request */ msg=EB_Msg_new(); doc=EB_Msg_GetDoc(msg); root_node=xmlNewNode(NULL, BAD_CAST "ebicsNoPubKeyDigestsRequest"); xmlDocSetRootElement(doc, root_node); ns=xmlNewNs(root_node, BAD_CAST "http://www.ebics.org/H004", NULL); assert(ns); ns=xmlNewNs(root_node, BAD_CAST "http://www.w3.org/2000/09/xmldsig#", BAD_CAST "ds"); assert(ns); ns=xmlNewNs(root_node, BAD_CAST "http://www.w3.org/2001/XMLSchema-instance", BAD_CAST "xsi"); xmlNewNsProp(root_node, ns, BAD_CAST "schemaLocation", /* xsi:schemaLocation */ BAD_CAST "http://www.ebics.org/H004 " "http://www.ebics.org/H004/ebics_keymgmt_request.xsd"); xmlNewProp(root_node, BAD_CAST "Version", BAD_CAST "H004"); xmlNewProp(root_node, BAD_CAST "Revision", BAD_CAST "1"); /* header */ node=xmlNewChild(root_node, NULL, BAD_CAST "header", NULL); xmlNewProp(node, BAD_CAST "authenticate", BAD_CAST "true"); xmlNewChild(node, NULL, BAD_CAST "static", NULL); xmlNewChild(node, NULL, BAD_CAST "mutable", NULL); sigNode=xmlNewChild(root_node, NULL, BAD_CAST "AuthSignature", NULL); /* body */ node=xmlNewChild(root_node, NULL, BAD_CAST "body", NULL); /* fill */ s=EBC_User_GetPeerId(u); if (s) EB_Msg_SetCharValue(msg, "header/static/HostID", s); /* generate Nonce */ tbuf=GWEN_Buffer_new(0, 128, 0, 1); rv=EBC_Provider_GenerateNonce(pro, tbuf); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); EB_Msg_free(msg); return rv; } EB_Msg_SetCharValue(msg, "header/static/Nonce", GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_Reset(tbuf); /* generate timestamp */ rv=EBC_Provider_GenerateTimeStamp(pro, u, tbuf); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); EB_Msg_free(msg); return rv; } EB_Msg_SetCharValue(msg, "header/static/Timestamp", GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); s=AB_User_GetCustomerId(u); if (s) EB_Msg_SetCharValue(msg, "header/static/PartnerID", s); EB_Msg_SetCharValue(msg, "header/static/UserID", AB_User_GetUserId(u)); EB_Msg_SetCharValue(msg, "header/static/OrderDetails/OrderType", "HPB"); EB_Msg_SetCharValue(msg, "header/static/OrderDetails/OrderAttribute", "DZHNN"); EB_Msg_SetCharValue(msg, "header/static/SecurityMedium", "0000"); /* sign */ rv=EBC_Provider_SignMessage(pro, msg, u, sigNode); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); EB_Msg_free(msg); return rv; } /* exchange requests */ rv=EBC_Dialog_ExchangeMessages(sess, msg, &mRsp); if (rv<0 || rv>=300) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Error exchanging messages (%d)", rv); EB_Msg_free(msg); return rv; } EB_Msg_free(msg); /* check response */ assert(mRsp); /* log results */ EBC_Provider_LogRequestResults(pro, mRsp, NULL); rc=EB_Msg_GetResultCode(mRsp); if ((rc & 0xff0000)==0x090000 || (rc & 0xff0000)==0x060000) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Error response: (%06x)", rc); EB_Msg_free(mRsp); return AB_ERROR_SECURITY; } rc=EB_Msg_GetBodyResultCode(mRsp); if (rc) { if ((rc & 0xff0000)==0x090000 || (rc & 0xff0000)==0x060000) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Error response: (%06x)", rc); EB_Msg_free(mRsp); if ((rc & 0xfff00)==0x091300 || (rc & 0xfff00)==0x091200) return AB_ERROR_SECURITY; else return GWEN_ERROR_GENERIC; } } if (1) { xmlDocPtr orderDoc=NULL; xmlNodePtr root_node=NULL; xmlNodePtr node=NULL; GWEN_CRYPT_KEY *skey=NULL; GWEN_BUFFER *buf1; GWEN_BUFFER *buf2; const char *s; /* extract keys and store them */ node=EB_Xml_GetNode(EB_Msg_GetRootNode(mRsp), "body/DataTransfer/DataEncryptionInfo", GWEN_PATH_FLAGS_NAMEMUSTEXIST); if (node==NULL) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Bad message from server: Missing session key"); EB_Msg_free(mRsp); return GWEN_ERROR_BAD_DATA; } rv=EBC_Provider_ExtractSessionKey(pro, u, node, &skey); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); EB_Msg_free(mRsp); return rv; } s=EB_Msg_GetCharValue(mRsp, "body/DataTransfer/OrderData", NULL); if (!s) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Bad message from server: Missing OrderData"); EB_Msg_free(mRsp); return GWEN_ERROR_BAD_DATA; } buf1=GWEN_Buffer_new(0, strlen(s), 0, 1); rv=GWEN_Base64_Decode((const uint8_t *)s, 0, buf1); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "Could not decode OrderData (%d)", rv); GWEN_Buffer_free(buf1); EB_Msg_free(mRsp); return rv; } /* decode data */ buf2=GWEN_Buffer_new(0, GWEN_Buffer_GetUsedBytes(buf1), 0, 1); rv=EBC_Provider_DecryptData(pro, u, skey, (const uint8_t *)GWEN_Buffer_GetStart(buf1), GWEN_Buffer_GetUsedBytes(buf1), buf2); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "Could not decrypt OrderData (%d)", rv); GWEN_Buffer_free(buf2); GWEN_Buffer_free(buf1); return rv; } /* parse XML document */ rv=EB_Xml_DocFromBuffer(GWEN_Buffer_GetStart(buf2), GWEN_Buffer_GetUsedBytes(buf2), &orderDoc); GWEN_Buffer_free(buf2); GWEN_Buffer_free(buf1); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); EB_Msg_free(mRsp); return rv; } /* get keys */ root_node=xmlDocGetRootElement(orderDoc); /* get auth key */ node=EB_Xml_GetNode(root_node, "AuthenticationPubKeyInfo", GWEN_PATH_FLAGS_NAMEMUSTEXIST); if (node==NULL) { DBG_ERROR(AQEBICS_LOGDOMAIN, "No authentication key found"); xmlFreeDoc(orderDoc); EB_Msg_free(mRsp); return GWEN_ERROR_BAD_DATA; } else { const GWEN_CRYPT_TOKEN_KEYINFO *cki; GWEN_CRYPT_TOKEN_KEYINFO *ki; keyId=GWEN_Crypt_Token_Context_GetAuthVerifyKeyId(ctx); cki=GWEN_Crypt_Token_GetKeyInfo(ct, keyId, 0, 0); if (cki) ki=GWEN_Crypt_Token_KeyInfo_dup(cki); else ki=GWEN_Crypt_Token_KeyInfo_new(keyId, GWEN_Crypt_CryptAlgoId_Rsa, 128); GWEN_Crypt_Token_KeyInfo_SetFlags(ki, 0); rc=EB_Key_Info_ReadXml(ki, node); if (rc) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%06x)", rc); GWEN_Crypt_Token_KeyInfo_free(ki); xmlFreeDoc(orderDoc); EB_Msg_free(mRsp); return GWEN_ERROR_BAD_DATA; } rv=GWEN_Crypt_Token_SetKeyInfo(ct, keyId, ki, 0); GWEN_Crypt_Token_KeyInfo_free(ki); if (rv) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); xmlFreeDoc(orderDoc); EB_Msg_free(mRsp); return rv; } DBG_NOTICE(AQEBICS_LOGDOMAIN, "Auth key stored"); } /* get crypt key */ node=EB_Xml_GetNode(root_node, "EncryptionPubKeyInfo", GWEN_PATH_FLAGS_NAMEMUSTEXIST); if (node==NULL) { DBG_ERROR(AQEBICS_LOGDOMAIN, "No encryption key found"); xmlFreeDoc(orderDoc); EB_Msg_free(mRsp); return GWEN_ERROR_BAD_DATA; } else { const GWEN_CRYPT_TOKEN_KEYINFO *cki; GWEN_CRYPT_TOKEN_KEYINFO *ki; keyId=GWEN_Crypt_Token_Context_GetEncipherKeyId(ctx); cki=GWEN_Crypt_Token_GetKeyInfo(ct, keyId, 0, 0); if (cki) ki=GWEN_Crypt_Token_KeyInfo_dup(cki); else ki=GWEN_Crypt_Token_KeyInfo_new(keyId, GWEN_Crypt_CryptAlgoId_Rsa, 128); GWEN_Crypt_Token_KeyInfo_SetFlags(ki, 0); rc=EB_Key_Info_ReadXml(ki, node); if (rc) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%06x)", rc); GWEN_Crypt_Token_KeyInfo_free(ki); xmlFreeDoc(orderDoc); EB_Msg_free(mRsp); return GWEN_ERROR_BAD_DATA; } rv=GWEN_Crypt_Token_SetKeyInfo(ct, keyId, ki, 0); GWEN_Crypt_Token_KeyInfo_free(ki); if (rv) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); xmlFreeDoc(orderDoc); EB_Msg_free(mRsp); return rv; } DBG_NOTICE(AQEBICS_LOGDOMAIN, "Crypt key stored"); } xmlFreeDoc(orderDoc); } EB_Msg_free(mRsp); /* adjust user status and flags */ DBG_NOTICE(AQEBICS_LOGDOMAIN, "Adjusting user flags"); if ((EBC_User_GetFlags(u) & (EBC_USER_FLAGS_INI | EBC_USER_FLAGS_HIA)) == (EBC_USER_FLAGS_INI | EBC_USER_FLAGS_HIA)) EBC_User_SetStatus(u, EBC_UserStatus_Enabled); return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqebics/requests/Makefile.in0000644000175000017500000007126315037736025022723 00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/libs/plugins/backends/aqebics/requests ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/distri.m4 $(top_srcdir)/m4/gwenhywfar.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/os.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libaqebics_requests_la_LIBADD = am_libaqebics_requests_la_OBJECTS = r_download.lo r_download_h002.lo \ r_download_h003.lo r_hia.lo r_hia_h002.lo r_hia_h003.lo \ r_hia_h004.lo r_hkd_htd.lo r_hpb.lo r_hpb_h002.lo \ r_hpb_h003.lo r_hpb_h004.lo r_hpd.lo r_ini.lo r_ini_h002.lo \ r_ini_h003.lo r_ini_h004.lo r_pub.lo r_pub_h002.lo \ r_pub_h003.lo r_unsecured.lo r_unsecured_h004.lo r_upload.lo \ r_upload_h002.lo r_upload_h003.lo libaqebics_requests_la_OBJECTS = $(am_libaqebics_requests_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/r_download.Plo \ ./$(DEPDIR)/r_download_h002.Plo \ ./$(DEPDIR)/r_download_h003.Plo ./$(DEPDIR)/r_hia.Plo \ ./$(DEPDIR)/r_hia_h002.Plo ./$(DEPDIR)/r_hia_h003.Plo \ ./$(DEPDIR)/r_hia_h004.Plo ./$(DEPDIR)/r_hkd_htd.Plo \ ./$(DEPDIR)/r_hpb.Plo ./$(DEPDIR)/r_hpb_h002.Plo \ ./$(DEPDIR)/r_hpb_h003.Plo ./$(DEPDIR)/r_hpb_h004.Plo \ ./$(DEPDIR)/r_hpd.Plo ./$(DEPDIR)/r_ini.Plo \ ./$(DEPDIR)/r_ini_h002.Plo ./$(DEPDIR)/r_ini_h003.Plo \ ./$(DEPDIR)/r_ini_h004.Plo ./$(DEPDIR)/r_pub.Plo \ ./$(DEPDIR)/r_pub_h002.Plo ./$(DEPDIR)/r_pub_h003.Plo \ ./$(DEPDIR)/r_unsecured.Plo ./$(DEPDIR)/r_unsecured_h004.Plo \ ./$(DEPDIR)/r_upload.Plo ./$(DEPDIR)/r_upload_h002.Plo \ ./$(DEPDIR)/r_upload_h003.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libaqebics_requests_la_SOURCES) DIST_SOURCES = $(libaqebics_requests_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac HEADERS = $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADD_ACLOCAL_FLAGS = @ADD_ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AQBANKING_CLI_VERSION_STRING = @AQBANKING_CLI_VERSION_STRING@ AQBANKING_FINTS_VERSION_STRING = @AQBANKING_FINTS_VERSION_STRING@ AQBANKING_SO_AGE = @AQBANKING_SO_AGE@ AQBANKING_SO_CURRENT = @AQBANKING_SO_CURRENT@ AQBANKING_SO_EFFECTIVE = @AQBANKING_SO_EFFECTIVE@ AQBANKING_SO_REVISION = @AQBANKING_SO_REVISION@ AQBANKING_VERSION_BUILD = @AQBANKING_VERSION_BUILD@ AQBANKING_VERSION_FULL_STRING = @AQBANKING_VERSION_FULL_STRING@ AQBANKING_VERSION_MAJOR = @AQBANKING_VERSION_MAJOR@ AQBANKING_VERSION_MINOR = @AQBANKING_VERSION_MINOR@ AQBANKING_VERSION_PATCHLEVEL = @AQBANKING_VERSION_PATCHLEVEL@ AQBANKING_VERSION_RELEASE_STRING = @AQBANKING_VERSION_RELEASE_STRING@ AQBANKING_VERSION_STRING = @AQBANKING_VERSION_STRING@ AQBANKING_VERSION_TAG = @AQBANKING_VERSION_TAG@ AQEBICS_CFLAGS = @AQEBICS_CFLAGS@ AQEBICS_LIBS = @AQEBICS_LIBS@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATETIME = @DATETIME@ DEFS = @DEFS@ -DLOCALEDIR=\"$(localedir)\" DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_EXCLUDE_PATTERNS = @DOXYGEN_EXCLUDE_PATTERNS@ DOXYGEN_FILE_PATTERNS = @DOXYGEN_FILE_PATTERNS@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENGUI_GTK2_CFLAGS = @GWENGUI_GTK2_CFLAGS@ GWENGUI_GTK2_LIBS = @GWENGUI_GTK2_LIBS@ GWENHYWFAR_MINIMUM_VERSION = @GWENHYWFAR_MINIMUM_VERSION@ HAVE_GWENGUI_GTK2 = @HAVE_GWENGUI_GTK2@ HAVE_I18N = @HAVE_I18N@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIBXSLT_CFLAGS = @LIBXSLT_CFLAGS@ LIBXSLT_LIBS = @LIBXSLT_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_SUPPORTS_QT = @MSGFMT_SUPPORTS_QT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ TUTORIALS = @TUTORIALS@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XMLMERGE = @XMLMERGE@ XMLSEC_CFLAGS = @XMLSEC_CFLAGS@ XMLSEC_LIBS = @XMLSEC_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ aqbanking_backends = @aqbanking_backends@ aqbanking_cfg_searchdir = @aqbanking_cfg_searchdir@ aqbanking_data_searchdir = @aqbanking_data_searchdir@ aqbanking_headerdir = @aqbanking_headerdir@ aqbanking_headerdir_am = @aqbanking_headerdir_am@ aqbanking_includes = @aqbanking_includes@ aqbanking_internal_libs = @aqbanking_internal_libs@ aqbanking_ldflags = @aqbanking_ldflags@ aqbanking_libs = @aqbanking_libs@ aqbanking_locale_searchdir = @aqbanking_locale_searchdir@ aqbanking_modules = @aqbanking_modules@ aqbanking_pkgdatadir = @aqbanking_pkgdatadir@ aqbanking_plugin_searchdir = @aqbanking_plugin_searchdir@ aqbanking_plugindir = @aqbanking_plugindir@ aqbanking_plugins_backends_dirs = @aqbanking_plugins_backends_dirs@ aqbanking_plugins_backends_libs = @aqbanking_plugins_backends_libs@ aqbanking_plugins_bankinfo_dirs = @aqbanking_plugins_bankinfo_dirs@ aqbanking_plugins_bankinfo_libs = @aqbanking_plugins_bankinfo_libs@ aqbanking_plugins_imexporters_dirs = @aqbanking_plugins_imexporters_dirs@ aqbanking_plugins_imexporters_libs = @aqbanking_plugins_imexporters_libs@ aqbanking_plugins_parsers_dirs = @aqbanking_plugins_parsers_dirs@ aqbanking_symlinkdir = @aqbanking_symlinkdir@ aqbanking_sys_is_windows = @aqbanking_sys_is_windows@ aqbankingpp_modules = @aqbankingpp_modules@ aqebics_datadir = @aqebics_datadir@ aqebics_includes = @aqebics_includes@ aqebics_internal_libs = @aqebics_internal_libs@ aqebics_ldflags = @aqebics_ldflags@ aqebics_libs = @aqebics_libs@ aqfints_datadir = @aqfints_datadir@ aqhbci_datadir = @aqhbci_datadir@ aqhbci_includes = @aqhbci_includes@ aqhbci_internal_libs = @aqhbci_internal_libs@ aqhbci_ldflags = @aqhbci_ldflags@ aqhbci_libs = @aqhbci_libs@ aqofxconnect_includes = @aqofxconnect_includes@ aqofxconnect_internal_libs = @aqofxconnect_internal_libs@ aqofxconnect_libs = @aqofxconnect_libs@ aqpaypal_includes = @aqpaypal_includes@ aqpaypal_internal_libs = @aqpaypal_internal_libs@ aqpaypal_libs = @aqpaypal_libs@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gmp_libs = @gmp_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_dir = @gwenhywfar_dir@ gwenhywfar_has_crypt = @gwenhywfar_has_crypt@ gwenhywfar_headers = @gwenhywfar_headers@ gwenhywfar_includes = @gwenhywfar_includes@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_plugins = @gwenhywfar_plugins@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ typemaker2_exe = @typemaker2_exe@ visibility_cflags = @visibility_cflags@ with_aqebics = @with_aqebics@ with_aqhbci = @with_aqhbci@ AM_CPPFLAGS = -I$(top_srcdir)/src/libs -I$(top_builddir)/src/libs $(gwenhywfar_includes) -I$(srcdir)/../.. $(AQEBICS_CFLAGS) AM_CFLAGS = -DBUILDING_AQBANKING @visibility_cflags@ #typefiles=context.xml noinst_LTLIBRARIES = libaqebics_requests.la extra_sources = EXTRA_DIST = $(typefiles) $(extra_sources) noinst_HEADERS = \ r_download_l.h \ r_hia_l.h \ r_hkd_htd_l.h \ r_hpb_l.h \ r_hpd_l.h \ r_ini_l.h \ r_pub_l.h \ r_unsecured_l.h \ r_upload_l.h #iheaderdir=${includedir}/aqebics/client #iheader_HEADERS= libaqebics_requests_la_SOURCES = \ r_download.c \ r_download_h002.c \ r_download_h003.c \ r_hia.c \ r_hia_h002.c \ r_hia_h003.c \ r_hia_h004.c \ r_hkd_htd.c \ r_hpb.c \ r_hpb_h002.c \ r_hpb_h003.c \ r_hpb_h004.c \ r_hpd.c \ r_ini.c \ r_ini_h002.c \ r_ini_h003.c \ r_ini_h004.c \ r_pub.c \ r_pub_h002.c \ r_pub_h003.c \ r_unsecured.c \ r_unsecured_h004.c \ r_upload.c \ r_upload_h002.c \ r_upload_h003.c all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libs/plugins/backends/aqebics/requests/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libs/plugins/backends/aqebics/requests/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libaqebics_requests.la: $(libaqebics_requests_la_OBJECTS) $(libaqebics_requests_la_DEPENDENCIES) $(EXTRA_libaqebics_requests_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libaqebics_requests_la_OBJECTS) $(libaqebics_requests_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/r_download.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/r_download_h002.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/r_download_h003.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/r_hia.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/r_hia_h002.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/r_hia_h003.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/r_hia_h004.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/r_hkd_htd.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/r_hpb.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/r_hpb_h002.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/r_hpb_h003.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/r_hpb_h004.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/r_hpd.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/r_ini.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/r_ini_h002.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/r_ini_h003.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/r_ini_h004.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/r_pub.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/r_pub_h002.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/r_pub_h003.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/r_unsecured.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/r_unsecured_h004.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/r_upload.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/r_upload_h002.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/r_upload_h003.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/r_download.Plo -rm -f ./$(DEPDIR)/r_download_h002.Plo -rm -f ./$(DEPDIR)/r_download_h003.Plo -rm -f ./$(DEPDIR)/r_hia.Plo -rm -f ./$(DEPDIR)/r_hia_h002.Plo -rm -f ./$(DEPDIR)/r_hia_h003.Plo -rm -f ./$(DEPDIR)/r_hia_h004.Plo -rm -f ./$(DEPDIR)/r_hkd_htd.Plo -rm -f ./$(DEPDIR)/r_hpb.Plo -rm -f ./$(DEPDIR)/r_hpb_h002.Plo -rm -f ./$(DEPDIR)/r_hpb_h003.Plo -rm -f ./$(DEPDIR)/r_hpb_h004.Plo -rm -f ./$(DEPDIR)/r_hpd.Plo -rm -f ./$(DEPDIR)/r_ini.Plo -rm -f ./$(DEPDIR)/r_ini_h002.Plo -rm -f ./$(DEPDIR)/r_ini_h003.Plo -rm -f ./$(DEPDIR)/r_ini_h004.Plo -rm -f ./$(DEPDIR)/r_pub.Plo -rm -f ./$(DEPDIR)/r_pub_h002.Plo -rm -f ./$(DEPDIR)/r_pub_h003.Plo -rm -f ./$(DEPDIR)/r_unsecured.Plo -rm -f ./$(DEPDIR)/r_unsecured_h004.Plo -rm -f ./$(DEPDIR)/r_upload.Plo -rm -f ./$(DEPDIR)/r_upload_h002.Plo -rm -f ./$(DEPDIR)/r_upload_h003.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/r_download.Plo -rm -f ./$(DEPDIR)/r_download_h002.Plo -rm -f ./$(DEPDIR)/r_download_h003.Plo -rm -f ./$(DEPDIR)/r_hia.Plo -rm -f ./$(DEPDIR)/r_hia_h002.Plo -rm -f ./$(DEPDIR)/r_hia_h003.Plo -rm -f ./$(DEPDIR)/r_hia_h004.Plo -rm -f ./$(DEPDIR)/r_hkd_htd.Plo -rm -f ./$(DEPDIR)/r_hpb.Plo -rm -f ./$(DEPDIR)/r_hpb_h002.Plo -rm -f ./$(DEPDIR)/r_hpb_h003.Plo -rm -f ./$(DEPDIR)/r_hpb_h004.Plo -rm -f ./$(DEPDIR)/r_hpd.Plo -rm -f ./$(DEPDIR)/r_ini.Plo -rm -f ./$(DEPDIR)/r_ini_h002.Plo -rm -f ./$(DEPDIR)/r_ini_h003.Plo -rm -f ./$(DEPDIR)/r_ini_h004.Plo -rm -f ./$(DEPDIR)/r_pub.Plo -rm -f ./$(DEPDIR)/r_pub_h002.Plo -rm -f ./$(DEPDIR)/r_pub_h003.Plo -rm -f ./$(DEPDIR)/r_unsecured.Plo -rm -f ./$(DEPDIR)/r_unsecured_h004.Plo -rm -f ./$(DEPDIR)/r_upload.Plo -rm -f ./$(DEPDIR)/r_upload_h002.Plo -rm -f ./$(DEPDIR)/r_upload_h003.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-generic clean-libtool clean-noinstLTLIBRARIES \ cscopelist-am ctags ctags-am distclean distclean-compile \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am .PRECIOUS: Makefile #typefiles: $(typefiles) # typemaker -d static $(typefiles) typefiles: $(typefiles) typemaker $(typefiles) sources: for d in $(SUBDIRS); do \ $(MAKE) -C $$d sources; \ done for f in $(libaqebics_requests_la_SOURCES) $(EXTRA_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done cppcheck: for f in $(libaqebics_requests_la_SOURCES); do \ cppcheck --force $$f ; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: aqbanking-6.6.1/src/libs/plugins/backends/aqebics/requests/r_upload_h003.c0000664000175000017500000004100614043610745023347 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "r_upload_l.h" #include "aqebics/aqebics_l.h" #include "aqebics/msg/msg.h" #include "aqebics/msg/keys.h" #include "aqebics/msg/zip.h" #include "aqebics/msg/xml.h" #include "aqebics/client/user_l.h" #include "aqebics/client/provider_l.h" #include #include #include #include /* ------------------------------------------------------------------------------------------------------------------------- * forward declarations * ------------------------------------------------------------------------------------------------------------------------- */ static int _mkUploadInitRequest(AB_PROVIDER *pro, GWEN_HTTP_SESSION *sess, AB_USER *u, const char *requestType, GWEN_CRYPT_KEY *skey, const char *pEu, uint32_t dlen, EB_MSG **pMsg); static int _mkUploadTransferRequest(AB_PROVIDER *pro, GWEN_HTTP_SESSION *sess, AB_USER *u, const char *transactionId, const char *pData, uint32_t lData, int segmentNumber, int isLast, EB_MSG **pMsg); /* ------------------------------------------------------------------------------------------------------------------------- * code * -------------------------------------------------------------------------------------------------------------------------- */ int EBC_Provider_XchgUploadRequest_H003(AB_PROVIDER *pro, GWEN_HTTP_SESSION *sess, AB_USER *u, const char *requestType, const uint8_t *pData, uint32_t lData) { int rv; GWEN_CRYPT_KEY *skey; GWEN_BUFFER *euBuf=NULL; GWEN_BUFFER *dbuf; EB_MSG *msg=NULL; EB_MSG *mRsp; uint32_t numSegs; uint32_t i; EB_RC rc; GWEN_BUFFER *logbuf; logbuf=GWEN_Buffer_new(0, 128, 0, 1); /* generate session key (for now only E002 is possible) */ DBG_INFO(AQEBICS_LOGDOMAIN, "Generating session key"); skey=GWEN_Crypt_KeyAes128_Generate(GWEN_Crypt_CryptMode_Cbc, 16, 2); if (skey==NULL) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Unable to generate AES-128 key"); return GWEN_ERROR_GENERIC; } if (!(EBC_User_GetFlags(u) & EBC_USER_FLAGS_NO_EU)) { /* generate electronic signature */ DBG_INFO(AQEBICS_LOGDOMAIN, "Generating electronic signature for user [%s]", AB_User_GetUserId(u)); euBuf=GWEN_Buffer_new(0, 1024, 0, 1); rv=EBC_Provider_MkEuCryptZipDoc(pro, u, requestType, pData, lData, skey, euBuf); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(euBuf); GWEN_Crypt_Key_free(skey); GWEN_Buffer_AppendString(logbuf, I18N("\tError signing upload document")); GWEN_Buffer_AppendString(logbuf, " ("); GWEN_Buffer_AppendString(logbuf, AB_User_GetUserId(u)); GWEN_Buffer_AppendString(logbuf, ")\n"); Ab_HttpSession_AddLog(sess, GWEN_Buffer_GetStart(logbuf)); GWEN_Buffer_free(logbuf); return rv; } GWEN_Buffer_AppendString(logbuf, I18N("\tUpload document signed")); GWEN_Buffer_AppendString(logbuf, " ("); GWEN_Buffer_AppendString(logbuf, AB_User_GetUserId(u)); GWEN_Buffer_AppendString(logbuf, ")\n"); } /* encrypt and encode data */ DBG_INFO(AQEBICS_LOGDOMAIN, "Encrypting, zipping and encoding upload data"); dbuf=GWEN_Buffer_new(0, (lData*4)/3, 0, 1); rv=EBC_Provider_EncryptData(pro, u, skey, pData, lData, dbuf); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(dbuf); GWEN_Buffer_free(euBuf); GWEN_Crypt_Key_free(skey); GWEN_Buffer_AppendString(logbuf, I18N("\tError encrypting upload document\n")); Ab_HttpSession_AddLog(sess, GWEN_Buffer_GetStart(logbuf)); GWEN_Buffer_free(logbuf); return rv; } GWEN_Buffer_AppendString(logbuf, I18N("\tUpload document encrypted\n")); numSegs=(GWEN_Buffer_GetUsedBytes(dbuf)+(1024*1024)-1)/(1024*1024); /* create upload init request */ DBG_INFO(AQEBICS_LOGDOMAIN, "Generating upload init request"); if (EBC_User_GetFlags(u) & EBC_USER_FLAGS_NO_EU) rv=_mkUploadInitRequest(pro, sess, u, requestType, skey, NULL, GWEN_Buffer_GetUsedBytes(dbuf), &msg); else rv=_mkUploadInitRequest(pro, sess, u, requestType, skey, GWEN_Buffer_GetStart(euBuf), GWEN_Buffer_GetUsedBytes(dbuf), &msg); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(dbuf); GWEN_Buffer_free(euBuf); GWEN_Crypt_Key_free(skey); Ab_HttpSession_AddLog(sess, GWEN_Buffer_GetStart(logbuf)); GWEN_Buffer_free(logbuf); return rv; } /* exchange requests */ DBG_INFO(AQEBICS_LOGDOMAIN, "Exchanging upload init request"); GWEN_Buffer_AppendString(logbuf, I18N("\tExchanging upload init request")); rv=EBC_Dialog_ExchangeMessages(sess, msg, &mRsp); if (rv<0 || rv>=300) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Error exchanging messages (%d)", rv); EB_Msg_free(msg); GWEN_Buffer_free(dbuf); GWEN_Buffer_free(euBuf); GWEN_Crypt_Key_free(skey); Ab_HttpSession_AddLog(sess, GWEN_Buffer_GetStart(logbuf)); GWEN_Buffer_free(logbuf); return rv; } EB_Msg_free(msg); GWEN_Buffer_free(euBuf); GWEN_Crypt_Key_free(skey); /* check response */ assert(mRsp); /* log results */ EBC_Provider_LogRequestResults(pro, mRsp, logbuf); rc=EB_Msg_GetResultCode(mRsp); if ((rc & 0xff0000)==0x090000 || (rc & 0xff0000)==0x060000) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Error response: (%06x)", rc); EB_Msg_free(mRsp); return AB_ERROR_SECURITY; } rc=EB_Msg_GetBodyResultCode(mRsp); if (rc) { if ((rc & 0xff0000)==0x090000 || (rc & 0xff0000)==0x060000) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Error response: (%06x)", rc); EB_Msg_free(mRsp); GWEN_Buffer_free(dbuf); Ab_HttpSession_AddLog(sess, GWEN_Buffer_GetStart(logbuf)); GWEN_Buffer_free(logbuf); if ((rc & 0xfff00)==0x091300 || (rc & 0xfff00)==0x091200) return AB_ERROR_SECURITY; else return GWEN_ERROR_GENERIC; } } if (1) { const char *s; char transactionId[36]; const char *p; uint32_t bytesLeft; /* extract transaction id */ s=EB_Msg_GetCharValue(mRsp, "header/static/TransactionID", NULL); if (s==NULL) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); EB_Msg_free(mRsp); GWEN_Buffer_free(dbuf); Ab_HttpSession_AddLog(sess, GWEN_Buffer_GetStart(logbuf)); GWEN_Buffer_free(logbuf); return rv; } strncpy(transactionId, s, sizeof(transactionId)-1); EB_Msg_free(mRsp); /* write data */ p=GWEN_Buffer_GetStart(dbuf); bytesLeft=GWEN_Buffer_GetUsedBytes(dbuf); for (i=0; ibytesLeft) n=bytesLeft; assert(n); DBG_INFO(AQEBICS_LOGDOMAIN, "Generating upload transfer request"); rv=_mkUploadTransferRequest(pro, sess, u, transactionId, p, n, i+1, (i==numSegs-1)?1:0, &msg); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(dbuf); Ab_HttpSession_AddLog(sess, GWEN_Buffer_GetStart(logbuf)); GWEN_Buffer_free(logbuf); return rv; } /* exchange requests */ DBG_INFO(AQEBICS_LOGDOMAIN, "Exchanging upload transfer request"); GWEN_Buffer_AppendString(logbuf, I18N("\tExchanging upload transfer request")); rv=EBC_Dialog_ExchangeMessages(sess, msg, &mRsp); if (rv<0 || rv>=300) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Error exchanging messages (%d)", rv); EB_Msg_free(msg); GWEN_Buffer_free(dbuf); Ab_HttpSession_AddLog(sess, GWEN_Buffer_GetStart(logbuf)); GWEN_Buffer_free(logbuf); return rv; } EB_Msg_free(msg); /* check response */ assert(mRsp); /* log results */ EBC_Provider_LogRequestResults(pro, mRsp, logbuf); rc=EB_Msg_GetResultCode(mRsp); if ((rc & 0xff0000)==0x090000 || (rc & 0xff0000)==0x060000) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Error response: (%06x)", rc); EB_Msg_free(mRsp); GWEN_Buffer_free(dbuf); Ab_HttpSession_AddLog(sess, GWEN_Buffer_GetStart(logbuf)); GWEN_Buffer_free(logbuf); return AB_ERROR_SECURITY; } /* prepare next round */ EB_Msg_free(mRsp); p+=n; bytesLeft-=n; } /* for */ } GWEN_Buffer_free(dbuf); DBG_INFO(AQEBICS_LOGDOMAIN, "Upload finished"); GWEN_Buffer_AppendString(logbuf, I18N("\tUpload finished")); Ab_HttpSession_AddLog(sess, GWEN_Buffer_GetStart(logbuf)); GWEN_Buffer_free(logbuf); return 0; } int _mkUploadInitRequest(AB_PROVIDER *pro, GWEN_HTTP_SESSION *sess, AB_USER *u, const char *requestType, GWEN_CRYPT_KEY *skey, const char *pEu, uint32_t dlen, EB_MSG **pMsg) { int rv; EB_MSG *msg; const char *userId; const char *partnerId; xmlDocPtr doc; xmlNodePtr root_node = NULL; xmlNodePtr node = NULL; xmlNodePtr nodeX = NULL; xmlNodePtr nodeXX = NULL; /*xmlNodePtr nodeXXX = NULL;*/ xmlNodePtr sigNode = NULL; GWEN_BUFFER *tbuf; const char *s; char numbuf[32]; userId=AB_User_GetUserId(u); partnerId=AB_User_GetCustomerId(u); if (partnerId==NULL) partnerId=userId; /* create request */ msg=EB_Msg_new(); doc=EB_Msg_GetDoc(msg); root_node=xmlNewNode(NULL, BAD_CAST "ebicsRequest"); xmlDocSetRootElement(doc, root_node); EB_Xml_Ebicsify(root_node, "H003"); /* header */ node=xmlNewChild(root_node, NULL, BAD_CAST "header", NULL); xmlNewProp(node, BAD_CAST "authenticate", BAD_CAST "true"); nodeX=xmlNewChild(node, NULL, BAD_CAST "static", NULL); s=EBC_User_GetPeerId(u); nodeXX=xmlNewTextChild(nodeX, NULL, BAD_CAST "HostID", BAD_CAST(s?s:"EBICS")); /* generate Nonce */ tbuf=GWEN_Buffer_new(0, 128, 0, 1); rv=EBC_Provider_GenerateNonce(pro, tbuf); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); EB_Msg_free(msg); return rv; } nodeXX=xmlNewTextChild(nodeX, NULL, BAD_CAST "Nonce", BAD_CAST GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_Reset(tbuf); /* generate timestamp */ rv=EBC_Provider_GenerateTimeStamp(pro, u, tbuf); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); EB_Msg_free(msg); return rv; } nodeXX=xmlNewTextChild(nodeX, NULL, BAD_CAST "Timestamp", BAD_CAST GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_Reset(tbuf); nodeXX=xmlNewTextChild(nodeX, NULL, BAD_CAST "PartnerID", BAD_CAST partnerId); nodeXX=xmlNewTextChild(nodeX, NULL, BAD_CAST "UserID", BAD_CAST userId); /* order details */ nodeXX=xmlNewChild(nodeX, NULL, BAD_CAST "OrderDetails", NULL); xmlNewTextChild(nodeXX, NULL, BAD_CAST "OrderType", BAD_CAST requestType); /* generate order id */ rv=EBC_Provider_Generate_OrderId(pro, tbuf); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); EB_Msg_free(msg); return rv; } xmlNewTextChild(nodeXX, NULL, BAD_CAST "OrderID", BAD_CAST GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); if (EBC_User_GetFlags(u) & EBC_USER_FLAGS_NO_EU) xmlNewTextChild(nodeXX, NULL, BAD_CAST "OrderAttribute", BAD_CAST "DZHNN"); else xmlNewTextChild(nodeXX, NULL, BAD_CAST "OrderAttribute", BAD_CAST "OZHNN"); xmlNewChild(nodeXX, NULL, BAD_CAST "StandardOrderParams", NULL); /* bank pubkey digests */ nodeXX=xmlNewChild(nodeX, NULL, BAD_CAST "BankPubKeyDigests", NULL); rv=EBC_Provider_AddBankPubKeyDigests(pro, u, nodeXX); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); EB_Msg_free(msg); return rv; } /* security medium */ xmlNewTextChild(nodeX, NULL, BAD_CAST "SecurityMedium", BAD_CAST "0000"); snprintf(numbuf, sizeof(numbuf)-1, "%i", (dlen+(1024*1024)-1)/(1024*1024)); numbuf[sizeof(numbuf)-1]=0; xmlNewTextChild(nodeX, NULL, BAD_CAST "NumSegments", BAD_CAST numbuf); /* mutable */ nodeX=xmlNewChild(node, NULL, BAD_CAST "mutable", NULL); xmlNewTextChild(nodeX, NULL, BAD_CAST "TransactionPhase", BAD_CAST "Initialisation"); /* prepare signature node */ sigNode=xmlNewChild(root_node, NULL, BAD_CAST "AuthSignature", NULL); /* body */ node=xmlNewChild(root_node, NULL, BAD_CAST "body", NULL); /* data transfer */ nodeX=xmlNewChild(node, NULL, BAD_CAST "DataTransfer", NULL); /* add session key and info */ nodeXX=xmlNewChild(nodeX, NULL, BAD_CAST "DataEncryptionInfo", NULL); xmlNewProp(nodeXX, BAD_CAST "authenticate", BAD_CAST "true"); rv=EBC_Provider_FillDataEncryptionInfoNode(pro, u, skey, nodeXX); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); EB_Msg_free(msg); return rv; } if (!(EBC_User_GetFlags(u) & EBC_USER_FLAGS_NO_EU)) { /* add EU */ nodeXX=xmlNewTextChild(nodeX, NULL, BAD_CAST "SignatureData", BAD_CAST pEu); xmlNewProp(nodeXX, BAD_CAST "authenticate", BAD_CAST "true"); } /* sign */ rv=EBC_Provider_SignMessage(pro, msg, u, sigNode); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); EB_Msg_free(msg); return rv; } *pMsg=msg; return 0; } int _mkUploadTransferRequest(AB_PROVIDER *pro, GWEN_HTTP_SESSION *sess, AB_USER *u, const char *transactionId, const char *pData, uint32_t lData, int segmentNumber, int isLast, EB_MSG **pMsg) { int rv; EB_MSG *msg; const char *userId; const char *partnerId; xmlDocPtr doc; xmlNodePtr root_node = NULL; xmlNodePtr node = NULL; xmlNodePtr nodeX = NULL; xmlNodePtr nodeXX = NULL; xmlNodePtr sigNode = NULL; GWEN_BUFFER *tbuf; const char *s; char numbuf[32]; userId=AB_User_GetUserId(u); partnerId=AB_User_GetCustomerId(u); if (partnerId==NULL) partnerId=userId; /* create request */ msg=EB_Msg_new(); doc=EB_Msg_GetDoc(msg); root_node=xmlNewNode(NULL, BAD_CAST "ebicsRequest"); xmlDocSetRootElement(doc, root_node); EB_Xml_Ebicsify(root_node, "H003"); /* header */ node=xmlNewChild(root_node, NULL, BAD_CAST "header", NULL); xmlNewProp(node, BAD_CAST "authenticate", BAD_CAST "true"); nodeX=xmlNewChild(node, NULL, BAD_CAST "static", NULL); s=EBC_User_GetPeerId(u); nodeXX=xmlNewTextChild(nodeX, NULL, BAD_CAST "HostID", BAD_CAST(s?s:"EBICS")); nodeXX=xmlNewTextChild(nodeX, NULL, BAD_CAST "TransactionID", BAD_CAST transactionId); /* mutable */ nodeX=xmlNewChild(node, NULL, BAD_CAST "mutable", NULL); xmlNewTextChild(nodeX, NULL, BAD_CAST "TransactionPhase", BAD_CAST "Transfer"); snprintf(numbuf, sizeof(numbuf)-1, "%d", segmentNumber); numbuf[sizeof(numbuf)-1]=0; nodeXX=xmlNewTextChild(nodeX, NULL, BAD_CAST "SegmentNumber", BAD_CAST numbuf); xmlNewProp(nodeXX, BAD_CAST "lastSegment", BAD_CAST(isLast?"true":"false")); /* prepare signature node */ sigNode=xmlNewChild(root_node, NULL, BAD_CAST "AuthSignature", NULL); /* body */ node=xmlNewChild(root_node, NULL, BAD_CAST "body", NULL); /* data transfer */ nodeX=xmlNewChild(node, NULL, BAD_CAST "DataTransfer", NULL); tbuf=GWEN_Buffer_new(0, lData, 0, 1); GWEN_Buffer_AppendBytes(tbuf, pData, lData); nodeXX=xmlNewChild(nodeX, NULL, BAD_CAST "OrderData", BAD_CAST GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); /* sign */ rv=EBC_Provider_SignMessage(pro, msg, u, sigNode); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); EB_Msg_free(msg); return rv; } *pMsg=msg; return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqebics/requests/r_hia.c0000664000175000017500000000230214043610745022066 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "r_hia_l.h" #include "aqebics/aqebics_l.h" #include "aqebics/client/user_l.h" #include #include int EBC_Provider_XchgHiaRequest(AB_PROVIDER *pro, GWEN_HTTP_SESSION *sess, AB_USER *u) { const char *s; s=EBC_User_GetProtoVersion(u); if (!(s && *s)) s="H002"; if (strcasecmp(s, "H002")==0) return EBC_Provider_XchgHiaRequest_H002(pro, sess, u); else if (strcasecmp(s, "H003")==0) return EBC_Provider_XchgHiaRequest_H003(pro, sess, u); else if (strcasecmp(s, "H004")==0) return EBC_Provider_XchgHiaRequest_H004(pro, sess, u); else { DBG_ERROR(AQEBICS_LOGDOMAIN, "Proto version [%s] not supported", s); return GWEN_ERROR_INTERNAL; } } aqbanking-6.6.1/src/libs/plugins/backends/aqebics/requests/r_hia_h003.c0000664000175000017500000002173614043610745022634 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "r_hia_l.h" #include "aqebics/aqebics_l.h" #include "aqebics/msg/msg.h" #include "aqebics/msg/keys.h" #include "aqebics/msg/zip.h" #include "aqebics/msg/xml.h" #include "aqebics/client/user_l.h" #include #include #include int EBC_Provider_XchgHiaRequest_H003(AB_PROVIDER *pro, GWEN_HTTP_SESSION *sess, AB_USER *u) { int rv; GWEN_CRYPT_TOKEN *ct; const GWEN_CRYPT_TOKEN_CONTEXT *ctx; uint32_t kid; const GWEN_CRYPT_TOKEN_KEYINFO *cryptKeyInfo=NULL; const GWEN_CRYPT_TOKEN_KEYINFO *authKeyInfo=NULL; xmlNsPtr ns; EB_MSG *msg; const char *userId; const char *partnerId; EB_MSG *mRsp; EB_RC rc; xmlDocPtr doc; xmlNodePtr root_node = NULL; xmlNodePtr node = NULL; /*xmlNodePtr nodeX = NULL;*/ GWEN_BUFFER *mbuf; GWEN_BUFFER *tbuf; const char *s; userId=AB_User_GetUserId(u); partnerId=AB_User_GetCustomerId(u); /* get crypt token and context */ rv=EBC_Provider_MountToken(pro, u, &ct, &ctx); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); return rv; } /* get crypt key info */ kid=GWEN_Crypt_Token_Context_GetDecipherKeyId(ctx); if (kid) { cryptKeyInfo=GWEN_Crypt_Token_GetKeyInfo(ct, kid, GWEN_CRYPT_TOKEN_KEYFLAGS_HASMODULUS | GWEN_CRYPT_TOKEN_KEYFLAGS_HASEXPONENT | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYVERSION | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYNUMBER, 0); if (cryptKeyInfo==NULL) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Crypt key info not found on crypt token"); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("Crypt key info not found on crypt token")); return GWEN_ERROR_NOT_FOUND; } } /* get auth sign key info */ kid=GWEN_Crypt_Token_Context_GetAuthSignKeyId(ctx); if (kid) { authKeyInfo=GWEN_Crypt_Token_GetKeyInfo(ct, kid, GWEN_CRYPT_TOKEN_KEYFLAGS_HASMODULUS | GWEN_CRYPT_TOKEN_KEYFLAGS_HASEXPONENT | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYVERSION | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYNUMBER, 0); if (authKeyInfo==NULL) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Auth key info not found on crypt token"); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("Auth key info not found on crypt token")); return GWEN_ERROR_NOT_FOUND; } } /* create HIARequestOrderData */ doc=xmlNewDoc(BAD_CAST "1.0"); doc->encoding=xmlCharStrdup("UTF-8"); root_node=xmlNewNode(NULL, BAD_CAST "HIARequestOrderData"); xmlDocSetRootElement(doc, root_node); ns=xmlNewNs(root_node, BAD_CAST "http://www.ebics.org/H003", NULL); assert(ns); ns=xmlNewNs(root_node, BAD_CAST "http://www.w3.org/2000/09/xmldsig#", BAD_CAST "ds"); assert(ns); ns=xmlNewNs(root_node, BAD_CAST "http://www.w3.org/2001/XMLSchema-instance", BAD_CAST "xsi"); xmlNewNsProp(root_node, ns, BAD_CAST "schemaLocation", /* xsi:schemaLocation */ BAD_CAST "http://www.ebics.org/H003 " "http://www.ebics.org/H003/ebics_orders.xsd"); /* create auth key tree */ node=xmlNewChild(root_node, NULL, BAD_CAST "AuthenticationPubKeyInfo", NULL); rv=EB_Key_Info_toXml(authKeyInfo, node); if (rv<0) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Error response: (%d)", rv); xmlFreeDoc(doc); return GWEN_ERROR_INVALID; } xmlNewChild(node, NULL, BAD_CAST "AuthenticationVersion", BAD_CAST "X002"); /* create crypt key tree */ node=xmlNewChild(root_node, NULL, BAD_CAST "EncryptionPubKeyInfo", NULL); rv=EB_Key_Info_toXml(cryptKeyInfo, node); if (rv<0) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Error response: (%d)", rv); xmlFreeDoc(doc); return rv; } xmlNewChild(node, NULL, BAD_CAST "EncryptionVersion", BAD_CAST "E002"); /* store partner id and user id */ node=xmlNewChild(root_node, NULL, BAD_CAST "PartnerID", BAD_CAST partnerId); node=xmlNewChild(root_node, NULL, BAD_CAST "UserID", BAD_CAST userId); /* compress and base64 doc */ mbuf=GWEN_Buffer_new(0, 512, 0, 1); rv=EB_Xml_Compress64Doc(doc, mbuf); if (rv<0) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Error compressing/encoding doc (%d)", rv); xmlFreeDoc(doc); return rv; } xmlFreeDoc(doc); /* create request */ msg=EB_Msg_new(); doc=EB_Msg_GetDoc(msg); root_node=xmlNewNode(NULL, BAD_CAST "ebicsUnsecuredRequest"); xmlDocSetRootElement(doc, root_node); ns=xmlNewNs(root_node, BAD_CAST "http://www.ebics.org/H003", NULL); assert(ns); ns=xmlNewNs(root_node, BAD_CAST "http://www.w3.org/2000/09/xmldsig#", BAD_CAST "ds"); assert(ns); ns=xmlNewNs(root_node, BAD_CAST "http://www.w3.org/2001/XMLSchema-instance", BAD_CAST "xsi"); xmlNewNsProp(root_node, ns, BAD_CAST "schemaLocation", /* xsi:schemaLocation */ BAD_CAST "http://www.ebics.org/H003 " "http://www.ebics.org/H003/ebics_keymgmt_request.xsd"); xmlNewProp(root_node, BAD_CAST "Version", BAD_CAST "H003"); xmlNewProp(root_node, BAD_CAST "Revision", BAD_CAST "1"); /* header */ node=xmlNewChild(root_node, NULL, BAD_CAST "header", NULL); xmlNewProp(node, BAD_CAST "authenticate", BAD_CAST "true"); xmlNewChild(node, NULL, BAD_CAST "static", NULL); xmlNewChild(node, NULL, BAD_CAST "mutable", NULL); /* body */ node=xmlNewChild(root_node, NULL, BAD_CAST "body", NULL); /* fill */ s=EBC_User_GetPeerId(u); if (s) EB_Msg_SetCharValue(msg, "header/static/HostID", s); s=AB_User_GetCustomerId(u); if (s) EB_Msg_SetCharValue(msg, "header/static/PartnerID", s); EB_Msg_SetCharValue(msg, "header/static/UserID", AB_User_GetUserId(u)); EB_Msg_SetCharValue(msg, "header/static/OrderDetails/OrderType", "HIA"); tbuf=GWEN_Buffer_new(0, 16, 0, 1); rv=EBC_Provider_Generate_OrderId(pro, tbuf); if (rv<0) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Error exchanging messages (%d)", rv); GWEN_Buffer_free(tbuf); GWEN_Buffer_free(mbuf); EB_Msg_free(msg); return rv; } EB_Msg_SetCharValue(msg, "header/static/OrderDetails/OrderID", GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); EB_Msg_SetCharValue(msg, "header/static/OrderDetails/OrderAttribute", "DZNNN"); EB_Msg_SetCharValue(msg, "header/static/SecurityMedium", "0200"); EB_Msg_SetCharValue(msg, "body/DataTransfer/OrderData", GWEN_Buffer_GetStart(mbuf)); GWEN_Buffer_free(mbuf); /* exchange requests */ rv=EBC_Dialog_ExchangeMessages(sess, msg, &mRsp); if (rv<0 || rv>=300) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Error exchanging messages (%d)", rv); EB_Msg_free(msg); return rv; } EB_Msg_free(msg); /* check response */ assert(mRsp); /* log results */ EBC_Provider_LogRequestResults(pro, mRsp, NULL); rc=EB_Msg_GetResultCode(mRsp); if ((rc & 0xff0000)==0x090000 || (rc & 0xff0000)==0x060000) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Error response: (%06x)", rc); EB_Msg_free(mRsp); return AB_ERROR_SECURITY; } rc=EB_Msg_GetBodyResultCode(mRsp); if (rc) { if ((rc & 0xff0000)==0x090000 || (rc & 0xff0000)==0x060000) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Error response: (%06x)", rc); EB_Msg_free(mRsp); if ((rc & 0xfff00)==0x091300 || (rc & 0xfff00)==0x091200) return AB_ERROR_SECURITY; else return GWEN_ERROR_GENERIC; } } EB_Msg_free(mRsp); /* adjust user status and flags */ DBG_NOTICE(AQEBICS_LOGDOMAIN, "Adjusting user flags"); EBC_User_AddFlags(u, EBC_USER_FLAGS_HIA); if ((EBC_User_GetFlags(u) & (EBC_USER_FLAGS_INI | EBC_USER_FLAGS_HIA)) == (EBC_USER_FLAGS_INI | EBC_USER_FLAGS_HIA)) EBC_User_SetStatus(u, EBC_UserStatus_Init2); else EBC_User_SetStatus(u, EBC_UserStatus_Init1); return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqebics/requests/r_upload.c0000664000175000017500000000310514043610745022613 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "r_upload_l.h" #include "aqebics/aqebics_l.h" #include "aqebics/msg/msg.h" #include "aqebics/msg/keys.h" #include "aqebics/msg/zip.h" #include "aqebics/msg/xml.h" #include "aqebics/client/user_l.h" #include #include #include int EBC_Provider_XchgUploadRequest(AB_PROVIDER *pro, GWEN_HTTP_SESSION *sess, AB_USER *u, const char *requestType, const uint8_t *pData, uint32_t lData) { const char *s; /* exchange upload request */ s=EBC_User_GetProtoVersion(u); if (!(s && *s)) s="H002"; if (strcasecmp(s, "H002")==0) return EBC_Provider_XchgUploadRequest_H002(pro, sess, u, requestType, pData, lData); else if (strcasecmp(s, "H003")==0) return EBC_Provider_XchgUploadRequest_H003(pro, sess, u, requestType, pData, lData); else { DBG_ERROR(AQEBICS_LOGDOMAIN, "Crypt version [%s] not supported", s); return GWEN_ERROR_INTERNAL; } } aqbanking-6.6.1/src/libs/plugins/backends/aqebics/requests/r_hpd_l.h0000664000175000017500000000141114043610745022420 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AQEBICS_CLIENT_R_HPD_L_H #define AQEBICS_CLIENT_R_HPD_L_H #include "aqebics/client/provider_l.h" #include #include #include int EBC_Provider_XchgHpdRequest(AB_PROVIDER *pro, GWEN_HTTP_SESSION *sess, AB_USER *u); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqebics/requests/r_hpb.c0000664000175000017500000000230214043610745022076 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "r_hpb_l.h" #include "aqebics/aqebics_l.h" #include "aqebics/client/user_l.h" #include #include int EBC_Provider_XchgHpbRequest(AB_PROVIDER *pro, GWEN_HTTP_SESSION *sess, AB_USER *u) { const char *s; s=EBC_User_GetProtoVersion(u); if (!(s && *s)) s="H002"; if (strcasecmp(s, "H002")==0) return EBC_Provider_XchgHpbRequest_H002(pro, sess, u); else if (strcasecmp(s, "H003")==0) return EBC_Provider_XchgHpbRequest_H003(pro, sess, u); else if (strcasecmp(s, "H004")==0) return EBC_Provider_XchgHpbRequest_H004(pro, sess, u); else { DBG_ERROR(AQEBICS_LOGDOMAIN, "Proto version [%s] not supported", s); return GWEN_ERROR_INTERNAL; } } aqbanking-6.6.1/src/libs/plugins/backends/aqebics/requests/r_download.c0000664000175000017500000000367614043610745023153 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "r_download_l.h" #include "aqebics/aqebics_l.h" #include "aqebics/msg/msg.h" #include "aqebics/msg/keys.h" #include "aqebics/msg/zip.h" #include "aqebics/msg/xml.h" #include "aqebics/client/user_l.h" #include #include #include int EBC_Provider_XchgDownloadRequest(AB_PROVIDER *pro, GWEN_HTTP_SESSION *sess, AB_USER *u, const char *requestType, GWEN_BUFFER *targetBuffer, int withReceipt, const GWEN_DATE *fromDate, const GWEN_DATE *toDate) { const char *s; s=EBC_User_GetProtoVersion(u); if (!(s && *s)) s="H002"; if (strcasecmp(s, "H002")==0) return EBC_Provider_XchgDownloadRequest_H002(pro, sess, u, requestType, targetBuffer, withReceipt, fromDate, toDate); else if (strcasecmp(s, "H003")==0) return EBC_Provider_XchgDownloadRequest_H003(pro, sess, u, requestType, targetBuffer, withReceipt, fromDate, toDate); else { DBG_ERROR(AQEBICS_LOGDOMAIN, "Proto version [%s] not supported", s); return GWEN_ERROR_INTERNAL; } } aqbanking-6.6.1/src/libs/plugins/backends/aqebics/requests/r_upload_l.h0000664000175000017500000000332514043610745023137 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AQEBICS_CLIENT_R_UPLOAD_L_H #define AQEBICS_CLIENT_R_UPLOAD_L_H #include "aqebics/client/provider_l.h" #include #include #include int EBC_Provider_XchgUploadRequest(AB_PROVIDER *pro, GWEN_HTTP_SESSION *sess, AB_USER *u, const char *requestType, const uint8_t *pData, uint32_t lData); int EBC_Provider_XchgUploadRequest_H002(AB_PROVIDER *pro, GWEN_HTTP_SESSION *sess, AB_USER *u, const char *requestType, const uint8_t *pData, uint32_t lData); int EBC_Provider_XchgUploadRequest_H003(AB_PROVIDER *pro, GWEN_HTTP_SESSION *sess, AB_USER *u, const char *requestType, const uint8_t *pData, uint32_t lData); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqebics/requests/r_pub_l.h0000664000175000017500000000201614043610745022435 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AQEBICS_CLIENT_R_PUB_L_H #define AQEBICS_CLIENT_R_PUB_L_H #include "aqebics/client/provider_l.h" #include #include #include int EBC_Provider_XchgPubRequest(AB_PROVIDER *pro, GWEN_HTTP_SESSION *sess, AB_USER *u, const char *signVersion); int EBC_Provider_XchgPubRequest_H002(AB_PROVIDER *pro, GWEN_HTTP_SESSION *sess, AB_USER *u, const char *signVersion); int EBC_Provider_XchgPubRequest_H003(AB_PROVIDER *pro, GWEN_HTTP_SESSION *sess, AB_USER *u, const char *signVersion); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqebics/requests/r_ini_h004.c0000664000175000017500000001361014043610745022643 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "r_ini_l.h" #include "aqebics/aqebics_l.h" #include "aqebics/msg/msg.h" #include "aqebics/msg/keys.h" #include "aqebics/msg/zip.h" #include "aqebics/msg/xml.h" #include "aqebics/client/user_l.h" #include "aqebics/client/provider_l.h" #include "aqebics/requests/r_unsecured_l.h" #include #include #include static int _mkOrderData_INI_H004(AB_PROVIDER *pro, AB_USER *u, GWEN_BUFFER *bufB64); int EBC_Provider_XchgIniRequest_H004(AB_PROVIDER *pro, GWEN_HTTP_SESSION *sess, AB_USER *u) { int rv; EB_MSG *msg; EB_MSG *mRsp; GWEN_BUFFER *bufB64; /* create order data */ bufB64=GWEN_Buffer_new(0, 4096, 0, 1); rv=_mkOrderData_INI_H004(pro, u, bufB64); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); return rv; } /* create request */ msg=EBC_Provider_MkUnsecuredRequest_H004(pro, u, "INI", "DZNNN", GWEN_Buffer_GetStart(bufB64)); if (msg==NULL) { DBG_INFO(AQEBICS_LOGDOMAIN, "here"); GWEN_Buffer_free(bufB64); return GWEN_ERROR_GENERIC; } GWEN_Buffer_free(bufB64); /* exchange requests */ rv=EBC_Dialog_ExchangeMessagesAndCheckResponse(sess, msg, &mRsp); if (rv<0 || rv>=300) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Error exchanging messages (%d)", rv); EB_Msg_free(msg); return rv; } EB_Msg_free(msg); /* log results */ EBC_Provider_LogRequestResults(pro, mRsp, NULL); /* nothing else to do with response */ EB_Msg_free(mRsp); /* adjust user status and flags */ DBG_NOTICE(AQEBICS_LOGDOMAIN, "Adjusting user flags"); EBC_User_AddFlags(u, EBC_USER_FLAGS_INI); if ((EBC_User_GetFlags(u) & (EBC_USER_FLAGS_INI | EBC_USER_FLAGS_HIA)) == (EBC_USER_FLAGS_INI | EBC_USER_FLAGS_HIA)) EBC_User_SetStatus(u, EBC_UserStatus_Init2); else EBC_User_SetStatus(u, EBC_UserStatus_Init1); return 0; } int _mkOrderData_INI_H004(AB_PROVIDER *pro, AB_USER *u, GWEN_BUFFER *bufB64) { int rv; GWEN_CRYPT_TOKEN *ct; const GWEN_CRYPT_TOKEN_CONTEXT *ctx; uint32_t kid; const GWEN_CRYPT_TOKEN_KEYINFO *signKeyInfo=NULL; xmlNsPtr ns; const char *userId; const char *partnerId; const char *signVersion; userId=AB_User_GetUserId(u); partnerId=AB_User_GetCustomerId(u); /* get crypt token and context */ rv=EBC_Provider_MountToken(pro, u, &ct, &ctx); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); return rv; } /* get crypt key info */ kid=GWEN_Crypt_Token_Context_GetSignKeyId(ctx); if (kid) { signKeyInfo=GWEN_Crypt_Token_GetKeyInfo(ct, kid, GWEN_CRYPT_TOKEN_KEYFLAGS_HASMODULUS | GWEN_CRYPT_TOKEN_KEYFLAGS_HASEXPONENT | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYVERSION | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYNUMBER, 0); if (signKeyInfo==NULL) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Sign key info not found on crypt token"); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("Sign key info not found on crypt token")); return GWEN_ERROR_NOT_FOUND; } } signVersion=EBC_User_GetSignVersion(u); if (!(signVersion && *signVersion)) signVersion="A005"; if (strcasecmp(signVersion, "A005")==0) { xmlDocPtr doc; xmlNodePtr root_node = NULL; xmlNodePtr node = NULL; /* create INIRequestOrderData */ doc=xmlNewDoc(BAD_CAST "1.0"); doc->encoding=xmlCharStrdup("UTF-8"); root_node=xmlNewNode(NULL, BAD_CAST "SignaturePubKeyOrderData"); xmlDocSetRootElement(doc, root_node); ns=xmlNewNs(root_node, BAD_CAST "http://www.ebics.org/S001", NULL); assert(ns); ns=xmlNewNs(root_node, BAD_CAST "http://www.w3.org/2000/09/xmldsig#", BAD_CAST "ds"); assert(ns); ns=xmlNewNs(root_node, BAD_CAST "http://www.w3.org/2001/XMLSchema-instance", BAD_CAST "xsi"); xmlNewNsProp(root_node, ns, BAD_CAST "schemaLocation", /* xsi:schemaLocation */ BAD_CAST "http://www.ebics.org/S001 " "http://www.ebics.org/S001/ebics_signature.xsd"); /* create auth key tree */ node=xmlNewChild(root_node, NULL, BAD_CAST "SignaturePubKeyInfo", NULL); rv=EB_Key_Info_toXml(signKeyInfo, node); if (rv<0) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Error response: (%d)", rv); xmlFreeDoc(doc); return GWEN_ERROR_INVALID; } xmlNewChild(node, NULL, BAD_CAST "SignatureVersion", BAD_CAST signVersion); /* store partner id and user id */ node=xmlNewChild(root_node, NULL, BAD_CAST "PartnerID", BAD_CAST partnerId); node=xmlNewChild(root_node, NULL, BAD_CAST "UserID", BAD_CAST userId); #if 0 DBG_ERROR(0, "Sending this key data:"); xmlDocDump(stderr, doc); #endif /* compress and base64 doc */ rv=EB_Xml_Compress64Doc(doc, bufB64); if (rv<0) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Error compressing/encoding doc (%d)", rv); xmlFreeDoc(doc); return rv; } xmlFreeDoc(doc); } else { DBG_ERROR(AQEBICS_LOGDOMAIN, "Unsupported sign version [%s]", signVersion); return GWEN_ERROR_INTERNAL; } return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqebics/requests/r_pub_h002.c0000664000175000017500000001173414043610745022655 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "r_pub_l.h" #include "aqebics/aqebics_l.h" #include "aqebics/msg/msg.h" #include "aqebics/msg/keys.h" #include "aqebics/msg/zip.h" #include "aqebics/msg/xml.h" #include "aqebics/client/user_l.h" #include "aqebics/client/provider_l.h" #include "aqebics/requests/r_upload_l.h" #include #include #include int EBC_Provider_XchgPubRequest_H002(AB_PROVIDER *pro, GWEN_HTTP_SESSION *sess, AB_USER *u, const char *signVersion) { int rv; const char *userId; const char *partnerId; GWEN_BUFFER *bufKey; GWEN_CRYPT_TOKEN *ct; const GWEN_CRYPT_TOKEN_CONTEXT *ctx; uint32_t kid; const GWEN_CRYPT_TOKEN_KEYINFO *signKeyInfo=NULL; userId=AB_User_GetUserId(u); partnerId=AB_User_GetCustomerId(u); /* get crypt token and context */ rv=EBC_Provider_MountToken(pro, u, &ct, &ctx); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); return rv; } /* get crypt key info */ kid=GWEN_Crypt_Token_Context_GetTempSignKeyId(ctx); if (kid) { signKeyInfo=GWEN_Crypt_Token_GetKeyInfo(ct, kid, GWEN_CRYPT_TOKEN_KEYFLAGS_HASMODULUS | GWEN_CRYPT_TOKEN_KEYFLAGS_HASEXPONENT | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYVERSION | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYNUMBER, 0); if (signKeyInfo==NULL) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Sign key info not found on crypt token"); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("Sign key info not found on crypt token")); return GWEN_ERROR_NOT_FOUND; } } if (strcasecmp(signVersion, "A004")==0) { EB_RC rc; /* encode according to "DFUE-Abkommen" */ bufKey=GWEN_Buffer_new(0, 512, 0, 1); rc=EB_Key_Info_toBin(signKeyInfo, userId, "A004", 1024, bufKey); if (rc) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Error writing key (rc=%06x)", rc); GWEN_Buffer_free(bufKey); return GWEN_ERROR_GENERIC; } } else { xmlDocPtr doc; xmlNodePtr root_node = NULL; xmlNodePtr node = NULL; xmlNsPtr ns; /* create INIRequestOrderData */ doc=xmlNewDoc(BAD_CAST "1.0"); doc->encoding=xmlCharStrdup("UTF-8"); root_node=xmlNewNode(NULL, BAD_CAST "PUBRequestOrderData"); xmlDocSetRootElement(doc, root_node); ns=xmlNewNs(root_node, BAD_CAST "http://www.ebics.org/H002", NULL); assert(ns); ns=xmlNewNs(root_node, BAD_CAST "http://www.w3.org/2000/09/xmldsig#", BAD_CAST "ds"); assert(ns); ns=xmlNewNs(root_node, BAD_CAST "http://www.w3.org/2001/XMLSchema-instance", BAD_CAST "xsi"); xmlNewNsProp(root_node, ns, BAD_CAST "schemaLocation", /* xsi:schemaLocation */ BAD_CAST "http://www.ebics.org/H002 " "http://www.ebics.org/H002/ebics_orders.xsd"); /* create sign key tree */ node=xmlNewChild(root_node, NULL, BAD_CAST "SignaturePubKeyInfo", NULL); rv=EB_Key_Info_toXml(signKeyInfo, node); if (rv<0) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Error response: (%d)", rv); xmlFreeDoc(doc); return GWEN_ERROR_INVALID; } xmlNewChild(node, NULL, BAD_CAST "SignatureVersion", BAD_CAST signVersion); /* store partner id and user id */ node=xmlNewChild(root_node, NULL, BAD_CAST "PartnerID", BAD_CAST partnerId); node=xmlNewChild(root_node, NULL, BAD_CAST "UserID", BAD_CAST userId); /* compress and base64 doc */ bufKey=GWEN_Buffer_new(0, 4096, 0, 1); rv=EB_Xml_Compress64Doc(doc, bufKey); if (rv<0) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Error compressing/encoding doc (%d)", rv); xmlFreeDoc(doc); return rv; } xmlFreeDoc(doc); } rv=EBC_Provider_XchgUploadRequest(pro, sess, u, "PUB", (const uint8_t *)GWEN_Buffer_GetStart(bufKey), GWEN_Buffer_GetUsedBytes(bufKey)); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(bufKey); return rv; } GWEN_Buffer_free(bufKey); return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqebics/requests/r_hpb_l.h0000664000175000017500000000204014043610745022415 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AQEBICS_CLIENT_R_HPB_L_H #define AQEBICS_CLIENT_R_HPB_L_H #include "aqebics/client/provider_l.h" #include #include #include int EBC_Provider_XchgHpbRequest(AB_PROVIDER *pro, GWEN_HTTP_SESSION *sess, AB_USER *u); int EBC_Provider_XchgHpbRequest_H002(AB_PROVIDER *pro, GWEN_HTTP_SESSION *sess, AB_USER *u); int EBC_Provider_XchgHpbRequest_H003(AB_PROVIDER *pro, GWEN_HTTP_SESSION *sess, AB_USER *u); int EBC_Provider_XchgHpbRequest_H004(AB_PROVIDER *pro, GWEN_HTTP_SESSION *sess, AB_USER *u); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqebics/requests/r_hia_h004.c0000664000175000017500000002162414043610745022631 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "r_hia_l.h" #include "aqebics/aqebics_l.h" #include "aqebics/msg/msg.h" #include "aqebics/msg/keys.h" #include "aqebics/msg/zip.h" #include "aqebics/msg/xml.h" #include "aqebics/client/user_l.h" #include #include #include int EBC_Provider_XchgHiaRequest_H004(AB_PROVIDER *pro, GWEN_HTTP_SESSION *sess, AB_USER *u) { int rv; GWEN_CRYPT_TOKEN *ct; const GWEN_CRYPT_TOKEN_CONTEXT *ctx; uint32_t kid; const GWEN_CRYPT_TOKEN_KEYINFO *cryptKeyInfo=NULL; const GWEN_CRYPT_TOKEN_KEYINFO *authKeyInfo=NULL; xmlNsPtr ns; EB_MSG *msg; const char *userId; const char *partnerId; EB_MSG *mRsp; EB_RC rc; xmlDocPtr doc; xmlNodePtr root_node = NULL; xmlNodePtr node = NULL; /*xmlNodePtr nodeX = NULL;*/ GWEN_BUFFER *mbuf; GWEN_BUFFER *tbuf; const char *s; userId=AB_User_GetUserId(u); partnerId=AB_User_GetCustomerId(u); /* get crypt token and context */ rv=EBC_Provider_MountToken(pro, u, &ct, &ctx); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); return rv; } /* get crypt key info */ kid=GWEN_Crypt_Token_Context_GetDecipherKeyId(ctx); if (kid) { cryptKeyInfo=GWEN_Crypt_Token_GetKeyInfo(ct, kid, GWEN_CRYPT_TOKEN_KEYFLAGS_HASMODULUS | GWEN_CRYPT_TOKEN_KEYFLAGS_HASEXPONENT | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYVERSION | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYNUMBER, 0); if (cryptKeyInfo==NULL) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Crypt key info not found on crypt token"); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("Crypt key info not found on crypt token")); return GWEN_ERROR_NOT_FOUND; } } /* get auth sign key info */ kid=GWEN_Crypt_Token_Context_GetAuthSignKeyId(ctx); if (kid) { authKeyInfo=GWEN_Crypt_Token_GetKeyInfo(ct, kid, GWEN_CRYPT_TOKEN_KEYFLAGS_HASMODULUS | GWEN_CRYPT_TOKEN_KEYFLAGS_HASEXPONENT | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYVERSION | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYNUMBER, 0); if (authKeyInfo==NULL) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Auth key info not found on crypt token"); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("Auth key info not found on crypt token")); return GWEN_ERROR_NOT_FOUND; } } /* create HIARequestOrderData */ doc=xmlNewDoc(BAD_CAST "1.0"); doc->encoding=xmlCharStrdup("UTF-8"); root_node=xmlNewNode(NULL, BAD_CAST "HIARequestOrderData"); xmlDocSetRootElement(doc, root_node); ns=xmlNewNs(root_node, BAD_CAST "http://www.ebics.org/H004", NULL); assert(ns); ns=xmlNewNs(root_node, BAD_CAST "http://www.w3.org/2000/09/xmldsig#", BAD_CAST "ds"); assert(ns); ns=xmlNewNs(root_node, BAD_CAST "http://www.w3.org/2001/XMLSchema-instance", BAD_CAST "xsi"); xmlNewNsProp(root_node, ns, BAD_CAST "schemaLocation", /* xsi:schemaLocation */ BAD_CAST "http://www.ebics.org/H004 " "http://www.ebics.org/H004/ebics_orders.xsd"); /* create auth key tree */ node=xmlNewChild(root_node, NULL, BAD_CAST "AuthenticationPubKeyInfo", NULL); rv=EB_Key_Info_toXml(authKeyInfo, node); if (rv<0) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Error response: (%d)", rv); xmlFreeDoc(doc); return GWEN_ERROR_INVALID; } xmlNewChild(node, NULL, BAD_CAST "AuthenticationVersion", BAD_CAST "X002"); /* create crypt key tree */ node=xmlNewChild(root_node, NULL, BAD_CAST "EncryptionPubKeyInfo", NULL); rv=EB_Key_Info_toXml(cryptKeyInfo, node); if (rv<0) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Error response: (%d)", rv); xmlFreeDoc(doc); return rv; } xmlNewChild(node, NULL, BAD_CAST "EncryptionVersion", BAD_CAST "E002"); /* store partner id and user id */ node=xmlNewChild(root_node, NULL, BAD_CAST "PartnerID", BAD_CAST partnerId); node=xmlNewChild(root_node, NULL, BAD_CAST "UserID", BAD_CAST userId); /* compress and base64 doc */ mbuf=GWEN_Buffer_new(0, 512, 0, 1); rv=EB_Xml_Compress64Doc(doc, mbuf); if (rv<0) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Error compressing/encoding doc (%d)", rv); xmlFreeDoc(doc); return rv; } xmlFreeDoc(doc); /* create request */ msg=EB_Msg_new(); doc=EB_Msg_GetDoc(msg); root_node=xmlNewNode(NULL, BAD_CAST "ebicsUnsecuredRequest"); xmlDocSetRootElement(doc, root_node); ns=xmlNewNs(root_node, BAD_CAST "http://www.ebics.org/H004", NULL); assert(ns); ns=xmlNewNs(root_node, BAD_CAST "http://www.w3.org/2000/09/xmldsig#", BAD_CAST "ds"); assert(ns); ns=xmlNewNs(root_node, BAD_CAST "http://www.w3.org/2001/XMLSchema-instance", BAD_CAST "xsi"); xmlNewNsProp(root_node, ns, BAD_CAST "schemaLocation", /* xsi:schemaLocation */ BAD_CAST "http://www.ebics.org/H004 " "http://www.ebics.org/H004/ebics_keymgmt_request.xsd"); xmlNewProp(root_node, BAD_CAST "Version", BAD_CAST "H004"); xmlNewProp(root_node, BAD_CAST "Revision", BAD_CAST "1"); /* header */ node=xmlNewChild(root_node, NULL, BAD_CAST "header", NULL); xmlNewProp(node, BAD_CAST "authenticate", BAD_CAST "true"); xmlNewChild(node, NULL, BAD_CAST "static", NULL); xmlNewChild(node, NULL, BAD_CAST "mutable", NULL); /* body */ node=xmlNewChild(root_node, NULL, BAD_CAST "body", NULL); /* fill */ s=EBC_User_GetPeerId(u); if (s) EB_Msg_SetCharValue(msg, "header/static/HostID", s); s=AB_User_GetCustomerId(u); if (s) EB_Msg_SetCharValue(msg, "header/static/PartnerID", s); EB_Msg_SetCharValue(msg, "header/static/UserID", AB_User_GetUserId(u)); EB_Msg_SetCharValue(msg, "header/static/OrderDetails/OrderType", "HIA"); tbuf=GWEN_Buffer_new(0, 16, 0, 1); rv=EBC_Provider_Generate_OrderId(pro, tbuf); if (rv<0) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Error exchanging messages (%d)", rv); GWEN_Buffer_free(tbuf); GWEN_Buffer_free(mbuf); EB_Msg_free(msg); return rv; } EB_Msg_SetCharValue(msg, "header/static/OrderDetails/OrderID", GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); EB_Msg_SetCharValue(msg, "header/static/OrderDetails/OrderAttribute", "DZNNN"); EB_Msg_SetCharValue(msg, "header/static/SecurityMedium", "0200"); EB_Msg_SetCharValue(msg, "body/DataTransfer/OrderData", GWEN_Buffer_GetStart(mbuf)); GWEN_Buffer_free(mbuf); /* exchange requests */ rv=EBC_Dialog_ExchangeMessages(sess, msg, &mRsp); if (rv<0 || rv>=300) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Error exchanging messages (%d)", rv); EB_Msg_free(msg); return rv; } EB_Msg_free(msg); /* check response */ assert(mRsp); /* log results */ EBC_Provider_LogRequestResults(pro, mRsp, NULL); rc=EB_Msg_GetResultCode(mRsp); if ((rc & 0xff0000)==0x090000 || (rc & 0xff0000)==0x060000) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Error response: (%06x)", rc); EB_Msg_free(mRsp); return AB_ERROR_SECURITY; } rc=EB_Msg_GetBodyResultCode(mRsp); if (rc) { if ((rc & 0xff0000)==0x090000 || (rc & 0xff0000)==0x060000) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Error response: (%06x)", rc); EB_Msg_free(mRsp); if ((rc & 0xfff00)==0x091300 || (rc & 0xfff00)==0x091200) return AB_ERROR_SECURITY; else return GWEN_ERROR_GENERIC; } } EB_Msg_free(mRsp); /* adjust user status and flags */ DBG_NOTICE(AQEBICS_LOGDOMAIN, "Adjusting user flags"); EBC_User_AddFlags(u, EBC_USER_FLAGS_HIA); if ((EBC_User_GetFlags(u) & (EBC_USER_FLAGS_INI | EBC_USER_FLAGS_HIA)) == (EBC_USER_FLAGS_INI | EBC_USER_FLAGS_HIA)) EBC_User_SetStatus(u, EBC_UserStatus_Init2); else EBC_User_SetStatus(u, EBC_UserStatus_Init1); return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqebics/requests/r_download_l.h0000664000175000017500000000423414043610745023462 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AQEBICS_CLIENT_R_DOWNLOAD_L_H #define AQEBICS_CLIENT_R_DOWNLOAD_L_H #include "aqebics/client/provider_l.h" #include #include #include int EBC_Provider_XchgDownloadRequest(AB_PROVIDER *pro, GWEN_HTTP_SESSION *sess, AB_USER *u, const char *requestType, GWEN_BUFFER *targetBuffer, int withReceipt, const GWEN_DATE *fromDate, const GWEN_DATE *toDate); int EBC_Provider_XchgDownloadRequest_H002(AB_PROVIDER *pro, GWEN_HTTP_SESSION *sess, AB_USER *u, const char *requestType, GWEN_BUFFER *targetBuffer, int withReceipt, const GWEN_DATE *fromDate, const GWEN_DATE *toDate); int EBC_Provider_XchgDownloadRequest_H003(AB_PROVIDER *pro, GWEN_HTTP_SESSION *sess, AB_USER *u, const char *requestType, GWEN_BUFFER *targetBuffer, int withReceipt, const GWEN_DATE *fromDate, const GWEN_DATE *toDate); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqebics/requests/r_hpb_h002.c0000664000175000017500000002431314043610745022635 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "r_hpb_l.h" #include "aqebics/aqebics_l.h" #include "aqebics/msg/msg.h" #include "aqebics/msg/keys.h" #include "aqebics/msg/zip.h" #include "aqebics/msg/xml.h" #include "aqebics/client/user_l.h" #include #include #include int EBC_Provider_XchgHpbRequest_H002(AB_PROVIDER *pro, GWEN_HTTP_SESSION *sess, AB_USER *u) { int rv; GWEN_CRYPT_TOKEN *ct; const GWEN_CRYPT_TOKEN_CONTEXT *ctx; uint32_t keyId; xmlNsPtr ns; EB_MSG *msg; EB_MSG *mRsp; EB_RC rc; xmlDocPtr doc; xmlNodePtr root_node = NULL; xmlNodePtr node = NULL; xmlNodePtr sigNode = NULL; GWEN_BUFFER *tbuf; const char *s; /* get crypt token and context */ rv=EBC_Provider_MountToken(pro, u, &ct, &ctx); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); return rv; } /* create request */ msg=EB_Msg_new(); doc=EB_Msg_GetDoc(msg); root_node=xmlNewNode(NULL, BAD_CAST "ebicsNoPubKeyDigestsRequest"); xmlDocSetRootElement(doc, root_node); ns=xmlNewNs(root_node, BAD_CAST "http://www.ebics.org/H002", NULL); assert(ns); ns=xmlNewNs(root_node, BAD_CAST "http://www.w3.org/2000/09/xmldsig#", BAD_CAST "ds"); assert(ns); ns=xmlNewNs(root_node, BAD_CAST "http://www.w3.org/2001/XMLSchema-instance", BAD_CAST "xsi"); xmlNewNsProp(root_node, ns, BAD_CAST "schemaLocation", /* xsi:schemaLocation */ BAD_CAST "http://www.ebics.org/H002 " "http://www.ebics.org/H002/ebics_keymgmt_request.xsd"); xmlNewProp(root_node, BAD_CAST "Version", BAD_CAST "H002"); xmlNewProp(root_node, BAD_CAST "Revision", BAD_CAST "1"); /* header */ node=xmlNewChild(root_node, NULL, BAD_CAST "header", NULL); xmlNewProp(node, BAD_CAST "authenticate", BAD_CAST "true"); xmlNewChild(node, NULL, BAD_CAST "static", NULL); xmlNewChild(node, NULL, BAD_CAST "mutable", NULL); sigNode=xmlNewChild(root_node, NULL, BAD_CAST "AuthSignature", NULL); /* body */ node=xmlNewChild(root_node, NULL, BAD_CAST "body", NULL); /* fill */ s=EBC_User_GetPeerId(u); if (s) EB_Msg_SetCharValue(msg, "header/static/HostID", s); /* generate Nonce */ tbuf=GWEN_Buffer_new(0, 128, 0, 1); rv=EBC_Provider_GenerateNonce(pro, tbuf); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); EB_Msg_free(msg); return rv; } EB_Msg_SetCharValue(msg, "header/static/Nonce", GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_Reset(tbuf); /* generate timestamp */ rv=EBC_Provider_GenerateTimeStamp(pro, u, tbuf); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); EB_Msg_free(msg); return rv; } EB_Msg_SetCharValue(msg, "header/static/Timestamp", GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); s=AB_User_GetCustomerId(u); if (s) EB_Msg_SetCharValue(msg, "header/static/PartnerID", s); EB_Msg_SetCharValue(msg, "header/static/UserID", AB_User_GetUserId(u)); EB_Msg_SetCharValue(msg, "header/static/OrderDetails/OrderType", "HPB"); EB_Msg_SetCharValue(msg, "header/static/OrderDetails/OrderAttribute", "DZHNN"); EB_Msg_SetCharValue(msg, "header/static/SecurityMedium", "0000"); /* sign */ rv=EBC_Provider_SignMessage(pro, msg, u, sigNode); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); EB_Msg_free(msg); return rv; } /* exchange requests */ rv=EBC_Dialog_ExchangeMessages(sess, msg, &mRsp); if (rv<0 || rv>=300) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Error exchanging messages (%d)", rv); EB_Msg_free(msg); return rv; } EB_Msg_free(msg); /* check response */ assert(mRsp); /* log results */ EBC_Provider_LogRequestResults(pro, mRsp, NULL); rc=EB_Msg_GetResultCode(mRsp); if ((rc & 0xff0000)==0x090000 || (rc & 0xff0000)==0x060000) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Error response: (%06x)", rc); EB_Msg_free(mRsp); return AB_ERROR_SECURITY; } rc=EB_Msg_GetBodyResultCode(mRsp); if (rc) { if ((rc & 0xff0000)==0x090000 || (rc & 0xff0000)==0x060000) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Error response: (%06x)", rc); EB_Msg_free(mRsp); if ((rc & 0xfff00)==0x091300 || (rc & 0xfff00)==0x091200) return AB_ERROR_SECURITY; else return GWEN_ERROR_GENERIC; } } if (1) { xmlDocPtr orderDoc=NULL; xmlNodePtr root_node=NULL; xmlNodePtr node=NULL; GWEN_CRYPT_KEY *skey=NULL; GWEN_BUFFER *buf1; GWEN_BUFFER *buf2; const char *s; /* extract keys and store them */ node=EB_Xml_GetNode(EB_Msg_GetRootNode(mRsp), "body/DataTransfer/DataEncryptionInfo", GWEN_PATH_FLAGS_NAMEMUSTEXIST); if (node==NULL) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Bad message from server: Missing session key"); EB_Msg_free(mRsp); return GWEN_ERROR_BAD_DATA; } rv=EBC_Provider_ExtractSessionKey(pro, u, node, &skey); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); EB_Msg_free(mRsp); return rv; } s=EB_Msg_GetCharValue(mRsp, "body/DataTransfer/OrderData", NULL); if (!s) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Bad message from server: Missing OrderData"); EB_Msg_free(mRsp); return GWEN_ERROR_BAD_DATA; } buf1=GWEN_Buffer_new(0, strlen(s), 0, 1); rv=GWEN_Base64_Decode((const uint8_t *)s, 0, buf1); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "Could not decode OrderData (%d)", rv); GWEN_Buffer_free(buf1); EB_Msg_free(mRsp); return rv; } /* decode data */ buf2=GWEN_Buffer_new(0, GWEN_Buffer_GetUsedBytes(buf1), 0, 1); rv=EBC_Provider_DecryptData(pro, u, skey, (const uint8_t *)GWEN_Buffer_GetStart(buf1), GWEN_Buffer_GetUsedBytes(buf1), buf2); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "Could not decrypt OrderData (%d)", rv); GWEN_Buffer_free(buf2); GWEN_Buffer_free(buf1); return rv; } /* parse XML document */ rv=EB_Xml_DocFromBuffer(GWEN_Buffer_GetStart(buf2), GWEN_Buffer_GetUsedBytes(buf2), &orderDoc); GWEN_Buffer_free(buf2); GWEN_Buffer_free(buf1); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); EB_Msg_free(mRsp); return rv; } /* get keys */ root_node=xmlDocGetRootElement(orderDoc); #if 0 DBG_ERROR(0, "Got this key document:"); xmlDocDump(stderr, orderDoc); #endif /* get auth key */ node=EB_Xml_GetNode(root_node, "AuthenticationPubKeyInfo", GWEN_PATH_FLAGS_NAMEMUSTEXIST); if (node==NULL) { DBG_ERROR(AQEBICS_LOGDOMAIN, "No authentication key found"); xmlFreeDoc(orderDoc); EB_Msg_free(mRsp); return GWEN_ERROR_BAD_DATA; } else { const GWEN_CRYPT_TOKEN_KEYINFO *cki; GWEN_CRYPT_TOKEN_KEYINFO *ki; keyId=GWEN_Crypt_Token_Context_GetAuthVerifyKeyId(ctx); cki=GWEN_Crypt_Token_GetKeyInfo(ct, keyId, 0, 0); if (cki) ki=GWEN_Crypt_Token_KeyInfo_dup(cki); else ki=GWEN_Crypt_Token_KeyInfo_new(keyId, GWEN_Crypt_CryptAlgoId_Rsa, 128); GWEN_Crypt_Token_KeyInfo_SetFlags(ki, 0); rc=EB_Key_Info_ReadXml(ki, node); if (rc) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%06x)", rc); GWEN_Crypt_Token_KeyInfo_free(ki); xmlFreeDoc(orderDoc); EB_Msg_free(mRsp); return GWEN_ERROR_BAD_DATA; } rv=GWEN_Crypt_Token_SetKeyInfo(ct, keyId, ki, 0); GWEN_Crypt_Token_KeyInfo_free(ki); if (rv) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); xmlFreeDoc(orderDoc); EB_Msg_free(mRsp); return rv; } DBG_NOTICE(AQEBICS_LOGDOMAIN, "Auth key stored"); } /* get crypt key */ node=EB_Xml_GetNode(root_node, "EncryptionPubKeyInfo", GWEN_PATH_FLAGS_NAMEMUSTEXIST); if (node==NULL) { DBG_ERROR(AQEBICS_LOGDOMAIN, "No encryption key found"); xmlFreeDoc(orderDoc); EB_Msg_free(mRsp); return GWEN_ERROR_BAD_DATA; } else { const GWEN_CRYPT_TOKEN_KEYINFO *cki; GWEN_CRYPT_TOKEN_KEYINFO *ki; keyId=GWEN_Crypt_Token_Context_GetEncipherKeyId(ctx); cki=GWEN_Crypt_Token_GetKeyInfo(ct, keyId, 0, 0); if (cki) ki=GWEN_Crypt_Token_KeyInfo_dup(cki); else ki=GWEN_Crypt_Token_KeyInfo_new(keyId, GWEN_Crypt_CryptAlgoId_Rsa, 128); GWEN_Crypt_Token_KeyInfo_SetFlags(ki, 0); rc=EB_Key_Info_ReadXml(ki, node); if (rc) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%06x)", rc); GWEN_Crypt_Token_KeyInfo_free(ki); xmlFreeDoc(orderDoc); EB_Msg_free(mRsp); return GWEN_ERROR_BAD_DATA; } rv=GWEN_Crypt_Token_SetKeyInfo(ct, keyId, ki, 0); GWEN_Crypt_Token_KeyInfo_free(ki); if (rv) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); xmlFreeDoc(orderDoc); EB_Msg_free(mRsp); return rv; } DBG_NOTICE(AQEBICS_LOGDOMAIN, "Crypt key stored"); } xmlFreeDoc(orderDoc); } EB_Msg_free(mRsp); /* adjust user status and flags */ DBG_NOTICE(AQEBICS_LOGDOMAIN, "Adjusting user flags"); if ((EBC_User_GetFlags(u) & (EBC_USER_FLAGS_INI | EBC_USER_FLAGS_HIA)) == (EBC_USER_FLAGS_INI | EBC_USER_FLAGS_HIA)) EBC_User_SetStatus(u, EBC_UserStatus_Enabled); return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqebics/requests/r_hpb_h003.c0000664000175000017500000002415714043610745022644 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "r_hpb_l.h" #include "aqebics/aqebics_l.h" #include "aqebics/msg/msg.h" #include "aqebics/msg/keys.h" #include "aqebics/msg/zip.h" #include "aqebics/msg/xml.h" #include "aqebics/client/user_l.h" #include #include #include int EBC_Provider_XchgHpbRequest_H003(AB_PROVIDER *pro, GWEN_HTTP_SESSION *sess, AB_USER *u) { int rv; GWEN_CRYPT_TOKEN *ct; const GWEN_CRYPT_TOKEN_CONTEXT *ctx; uint32_t keyId; xmlNsPtr ns; EB_MSG *msg; EB_MSG *mRsp; EB_RC rc; xmlDocPtr doc; xmlNodePtr root_node = NULL; xmlNodePtr node = NULL; xmlNodePtr sigNode = NULL; GWEN_BUFFER *tbuf; const char *s; /* get crypt token and context */ rv=EBC_Provider_MountToken(pro, u, &ct, &ctx); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); return rv; } /* create request */ msg=EB_Msg_new(); doc=EB_Msg_GetDoc(msg); root_node=xmlNewNode(NULL, BAD_CAST "ebicsNoPubKeyDigestsRequest"); xmlDocSetRootElement(doc, root_node); ns=xmlNewNs(root_node, BAD_CAST "http://www.ebics.org/H003", NULL); assert(ns); ns=xmlNewNs(root_node, BAD_CAST "http://www.w3.org/2000/09/xmldsig#", BAD_CAST "ds"); assert(ns); ns=xmlNewNs(root_node, BAD_CAST "http://www.w3.org/2001/XMLSchema-instance", BAD_CAST "xsi"); xmlNewNsProp(root_node, ns, BAD_CAST "schemaLocation", /* xsi:schemaLocation */ BAD_CAST "http://www.ebics.org/H003 " "http://www.ebics.org/H003/ebics_keymgmt_request.xsd"); xmlNewProp(root_node, BAD_CAST "Version", BAD_CAST "H003"); xmlNewProp(root_node, BAD_CAST "Revision", BAD_CAST "1"); /* header */ node=xmlNewChild(root_node, NULL, BAD_CAST "header", NULL); xmlNewProp(node, BAD_CAST "authenticate", BAD_CAST "true"); xmlNewChild(node, NULL, BAD_CAST "static", NULL); xmlNewChild(node, NULL, BAD_CAST "mutable", NULL); sigNode=xmlNewChild(root_node, NULL, BAD_CAST "AuthSignature", NULL); /* body */ node=xmlNewChild(root_node, NULL, BAD_CAST "body", NULL); /* fill */ s=EBC_User_GetPeerId(u); if (s) EB_Msg_SetCharValue(msg, "header/static/HostID", s); /* generate Nonce */ tbuf=GWEN_Buffer_new(0, 128, 0, 1); rv=EBC_Provider_GenerateNonce(pro, tbuf); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); EB_Msg_free(msg); return rv; } EB_Msg_SetCharValue(msg, "header/static/Nonce", GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_Reset(tbuf); /* generate timestamp */ rv=EBC_Provider_GenerateTimeStamp(pro, u, tbuf); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); EB_Msg_free(msg); return rv; } EB_Msg_SetCharValue(msg, "header/static/Timestamp", GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); s=AB_User_GetCustomerId(u); if (s) EB_Msg_SetCharValue(msg, "header/static/PartnerID", s); EB_Msg_SetCharValue(msg, "header/static/UserID", AB_User_GetUserId(u)); EB_Msg_SetCharValue(msg, "header/static/OrderDetails/OrderType", "HPB"); EB_Msg_SetCharValue(msg, "header/static/OrderDetails/OrderAttribute", "DZHNN"); EB_Msg_SetCharValue(msg, "header/static/SecurityMedium", "0000"); /* sign */ rv=EBC_Provider_SignMessage(pro, msg, u, sigNode); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); EB_Msg_free(msg); return rv; } /* exchange requests */ rv=EBC_Dialog_ExchangeMessages(sess, msg, &mRsp); if (rv<0 || rv>=300) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Error exchanging messages (%d)", rv); EB_Msg_free(msg); return rv; } EB_Msg_free(msg); /* check response */ assert(mRsp); /* log results */ EBC_Provider_LogRequestResults(pro, mRsp, NULL); rc=EB_Msg_GetResultCode(mRsp); if ((rc & 0xff0000)==0x090000 || (rc & 0xff0000)==0x060000) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Error response: (%06x)", rc); EB_Msg_free(mRsp); return AB_ERROR_SECURITY; } rc=EB_Msg_GetBodyResultCode(mRsp); if (rc) { if ((rc & 0xff0000)==0x090000 || (rc & 0xff0000)==0x060000) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Error response: (%06x)", rc); EB_Msg_free(mRsp); if ((rc & 0xfff00)==0x091300 || (rc & 0xfff00)==0x091200) return AB_ERROR_SECURITY; else return GWEN_ERROR_GENERIC; } } if (1) { xmlDocPtr orderDoc=NULL; xmlNodePtr root_node=NULL; xmlNodePtr node=NULL; GWEN_CRYPT_KEY *skey=NULL; GWEN_BUFFER *buf1; GWEN_BUFFER *buf2; const char *s; /* extract keys and store them */ node=EB_Xml_GetNode(EB_Msg_GetRootNode(mRsp), "body/DataTransfer/DataEncryptionInfo", GWEN_PATH_FLAGS_NAMEMUSTEXIST); if (node==NULL) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Bad message from server: Missing session key"); EB_Msg_free(mRsp); return GWEN_ERROR_BAD_DATA; } rv=EBC_Provider_ExtractSessionKey(pro, u, node, &skey); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); EB_Msg_free(mRsp); return rv; } s=EB_Msg_GetCharValue(mRsp, "body/DataTransfer/OrderData", NULL); if (!s) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Bad message from server: Missing OrderData"); EB_Msg_free(mRsp); return GWEN_ERROR_BAD_DATA; } buf1=GWEN_Buffer_new(0, strlen(s), 0, 1); rv=GWEN_Base64_Decode((const uint8_t *)s, 0, buf1); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "Could not decode OrderData (%d)", rv); GWEN_Buffer_free(buf1); EB_Msg_free(mRsp); return rv; } /* decode data */ buf2=GWEN_Buffer_new(0, GWEN_Buffer_GetUsedBytes(buf1), 0, 1); rv=EBC_Provider_DecryptData(pro, u, skey, (const uint8_t *)GWEN_Buffer_GetStart(buf1), GWEN_Buffer_GetUsedBytes(buf1), buf2); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "Could not decrypt OrderData (%d)", rv); GWEN_Buffer_free(buf2); GWEN_Buffer_free(buf1); return rv; } /* parse XML document */ rv=EB_Xml_DocFromBuffer(GWEN_Buffer_GetStart(buf2), GWEN_Buffer_GetUsedBytes(buf2), &orderDoc); GWEN_Buffer_free(buf2); GWEN_Buffer_free(buf1); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); EB_Msg_free(mRsp); return rv; } /* get keys */ root_node=xmlDocGetRootElement(orderDoc); /* get auth key */ node=EB_Xml_GetNode(root_node, "AuthenticationPubKeyInfo", GWEN_PATH_FLAGS_NAMEMUSTEXIST); if (node==NULL) { DBG_ERROR(AQEBICS_LOGDOMAIN, "No authentication key found"); xmlFreeDoc(orderDoc); EB_Msg_free(mRsp); return GWEN_ERROR_BAD_DATA; } else { const GWEN_CRYPT_TOKEN_KEYINFO *cki; GWEN_CRYPT_TOKEN_KEYINFO *ki; keyId=GWEN_Crypt_Token_Context_GetAuthVerifyKeyId(ctx); cki=GWEN_Crypt_Token_GetKeyInfo(ct, keyId, 0, 0); if (cki) ki=GWEN_Crypt_Token_KeyInfo_dup(cki); else ki=GWEN_Crypt_Token_KeyInfo_new(keyId, GWEN_Crypt_CryptAlgoId_Rsa, 128); GWEN_Crypt_Token_KeyInfo_SetFlags(ki, 0); rc=EB_Key_Info_ReadXml(ki, node); if (rc) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%06x)", rc); GWEN_Crypt_Token_KeyInfo_free(ki); xmlFreeDoc(orderDoc); EB_Msg_free(mRsp); return GWEN_ERROR_BAD_DATA; } rv=GWEN_Crypt_Token_SetKeyInfo(ct, keyId, ki, 0); GWEN_Crypt_Token_KeyInfo_free(ki); if (rv) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); xmlFreeDoc(orderDoc); EB_Msg_free(mRsp); return rv; } DBG_NOTICE(AQEBICS_LOGDOMAIN, "Auth key stored"); } /* get crypt key */ node=EB_Xml_GetNode(root_node, "EncryptionPubKeyInfo", GWEN_PATH_FLAGS_NAMEMUSTEXIST); if (node==NULL) { DBG_ERROR(AQEBICS_LOGDOMAIN, "No encryption key found"); xmlFreeDoc(orderDoc); EB_Msg_free(mRsp); return GWEN_ERROR_BAD_DATA; } else { const GWEN_CRYPT_TOKEN_KEYINFO *cki; GWEN_CRYPT_TOKEN_KEYINFO *ki; keyId=GWEN_Crypt_Token_Context_GetEncipherKeyId(ctx); cki=GWEN_Crypt_Token_GetKeyInfo(ct, keyId, 0, 0); if (cki) ki=GWEN_Crypt_Token_KeyInfo_dup(cki); else ki=GWEN_Crypt_Token_KeyInfo_new(keyId, GWEN_Crypt_CryptAlgoId_Rsa, 128); GWEN_Crypt_Token_KeyInfo_SetFlags(ki, 0); rc=EB_Key_Info_ReadXml(ki, node); if (rc) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%06x)", rc); GWEN_Crypt_Token_KeyInfo_free(ki); xmlFreeDoc(orderDoc); EB_Msg_free(mRsp); return GWEN_ERROR_BAD_DATA; } rv=GWEN_Crypt_Token_SetKeyInfo(ct, keyId, ki, 0); GWEN_Crypt_Token_KeyInfo_free(ki); if (rv) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); xmlFreeDoc(orderDoc); EB_Msg_free(mRsp); return rv; } DBG_NOTICE(AQEBICS_LOGDOMAIN, "Crypt key stored"); } xmlFreeDoc(orderDoc); } EB_Msg_free(mRsp); /* adjust user status and flags */ DBG_NOTICE(AQEBICS_LOGDOMAIN, "Adjusting user flags"); if ((EBC_User_GetFlags(u) & (EBC_USER_FLAGS_INI | EBC_USER_FLAGS_HIA)) == (EBC_USER_FLAGS_INI | EBC_USER_FLAGS_HIA)) EBC_User_SetStatus(u, EBC_UserStatus_Enabled); return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqebics/requests/r_hkd_htd.c0000664000175000017500000003560414043610745022745 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "r_hkd_htd_l.h" #include "aqebics/client/provider_l.h" #include "aqebics/aqebics_l.h" #include "aqebics/client/account_l.h" #include "aqebics/msg/msg.h" #include "aqebics/msg/keys.h" #include "aqebics/msg/zip.h" #include "aqebics/msg/xml.h" #include "aqebics/client/user_l.h" #include "aqebics/requests/r_download_l.h" #include #include /* ------------------------------------------------------------------------------------------------------------------------- * forward declarations * ------------------------------------------------------------------------------------------------------------------------- */ static int _xchgHkdRequest(AB_PROVIDER *pro, GWEN_HTTP_SESSION *sess, AB_USER *u, const char *requestName); static void _sampleAccounts(xmlNodePtr node, GWEN_DB_NODE *dbAll); static AB_ACCOUNT_LIST *_readAccounts(AB_PROVIDER *pro, GWEN_DB_NODE *dbAll); static AB_ACCOUNT *_readAccount(AB_PROVIDER *pro, GWEN_DB_NODE *db); static void _removeEmptyAccountsFromList(AB_ACCOUNT_LIST *accList); static void _assignIdsOfStoredAccounts(AB_PROVIDER *pro, AB_ACCOUNT_LIST *accountList); static void _addOrModifyAccounts(AB_PROVIDER *pro, AB_USER *user, AB_ACCOUNT_LIST *accountList); static int _modifyExistingAccount(AB_PROVIDER *pro, AB_USER *user, AB_ACCOUNT *account); static int _addAccount(AB_PROVIDER *pro, AB_USER *user, AB_ACCOUNT *account); /* ------------------------------------------------------------------------------------------------------------------------- * code * -------------------------------------------------------------------------------------------------------------------------- */ int EBC_Provider_XchgHkdRequest(AB_PROVIDER *pro, GWEN_HTTP_SESSION *sess, AB_USER *u) { int rv; rv=_xchgHkdRequest(pro, sess, u, "HKD"); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); return rv; } return 0; } int EBC_Provider_XchgHtdRequest(AB_PROVIDER *pro, GWEN_HTTP_SESSION *sess, AB_USER *u) { int rv; rv=_xchgHkdRequest(pro, sess, u, "HTD"); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); return rv; } return 0; } int _xchgHkdRequest(AB_PROVIDER *pro, GWEN_HTTP_SESSION *sess, AB_USER *u, const char *requestName) { int rv; GWEN_BUFFER *buf; buf=GWEN_Buffer_new(0, 1024, 0, 1); rv=EBC_Provider_XchgDownloadRequest(pro, sess, u, requestName, buf, 0, NULL, NULL); if (rv<0 || rv>=300) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(buf); return rv; } else { xmlDocPtr orderDoc=NULL; xmlNodePtr root_node=NULL; xmlNodePtr node=NULL; GWEN_DB_NODE *dbAll; AB_ACCOUNT_LIST *accountList; /* parse XML document */ rv=EB_Xml_DocFromBuffer(GWEN_Buffer_GetStart(buf), GWEN_Buffer_GetUsedBytes(buf), &orderDoc); GWEN_Buffer_free(buf); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); return rv; } root_node=xmlDocGetRootElement(orderDoc); node=EB_Xml_GetNode(root_node, "PartnerInfo", GWEN_PATH_FLAGS_NAMEMUSTEXIST); if (node==NULL) { DBG_ERROR(AQEBICS_LOGDOMAIN, "No PartnerInfo found"); xmlFreeDoc(orderDoc); return GWEN_ERROR_BAD_DATA; } dbAll=GWEN_DB_Group_new("Response"); _sampleAccounts(node, dbAll); accountList=_readAccounts(pro, dbAll); if (accountList) { _removeEmptyAccountsFromList(accountList); _assignIdsOfStoredAccounts(pro, accountList); _addOrModifyAccounts(pro, u, accountList); AB_Account_List_free(accountList); } GWEN_DB_Group_free(dbAll); xmlFreeDoc(orderDoc); return 0; } } void _sampleAccounts(xmlNodePtr node, GWEN_DB_NODE *dbAll) { xmlNodePtr nodeX; /* sample accounts */ nodeX=node->children; while (nodeX) { if (nodeX->type==XML_ELEMENT_NODE) { if (nodeX->name && strcmp((const char *)nodeX->name, "AccountInfo")==0) { GWEN_DB_NODE *db; xmlChar *xs; xmlNodePtr nodeXX; DBG_DEBUG(AQEBICS_LOGDOMAIN, "Reading AccountInfo node"); db=GWEN_DB_GetGroup(dbAll, GWEN_PATH_FLAGS_CREATE_GROUP, "Account"); xs=xmlGetProp(nodeX, BAD_CAST "ID"); if (xs) { GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "EbicsId", (const char *)xs); xmlFree(xs); } xs=xmlGetProp(nodeX, BAD_CAST "Currency"); if (xs) { GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "Currency", (const char *)xs); xmlFree(xs); } xs=xmlGetProp(nodeX, BAD_CAST "Description"); if (xs) { GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "AccountName", (const char *)xs); xmlFree(xs); } nodeXX=nodeX->children; while (nodeXX) { if (nodeXX->type==XML_ELEMENT_NODE && nodeXX->name) { if (strcmp((const char *)nodeXX->name, "AccountNumber")==0) { xs=xmlGetProp(nodeXX, BAD_CAST "international"); if (xs) { xmlNodePtr nodeXXX=NULL; if (strcasecmp((const char *)xs, "false")==0) { nodeXXX=nodeXX->children; if (nodeXXX->type==XML_TEXT_NODE && nodeXXX->content) { GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "AccountNumber", (const char *)nodeXXX->content); } } else { nodeXXX=nodeXX->children; if (nodeXXX->type==XML_TEXT_NODE && nodeXXX->content) { GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "IBAN", (const char *)nodeXXX->content); } } xmlFree(xs); } } else if (strcmp((const char *)nodeXX->name, "NationalAccountNumber")==0) { xmlNodePtr nodeXXX=NULL; nodeXXX=nodeXX->children; if (nodeXXX->type==XML_TEXT_NODE && nodeXXX->content) { GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "AccountNumber", (const char *)nodeXXX->content); } } else if (strcmp((const char *)nodeXX->name, "BankCode")==0) { xs=xmlGetProp(nodeXX, BAD_CAST "international"); if (xs) { xmlNodePtr nodeXXX=NULL; if (strcasecmp((const char *)xs, "false")==0) { nodeXXX=nodeXX->children; if (nodeXXX->type==XML_TEXT_NODE && nodeXXX->content) { GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "BankCode", (const char *)nodeXXX->content); } } else { nodeXXX=nodeXX->children; if (nodeXXX->type==XML_TEXT_NODE && nodeXXX->content) { GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "BIC", (const char *)nodeXXX->content); } } xmlFree(xs); } } else if (strcmp((const char *)nodeXX->name, "NationalBankCode")==0) { xmlNodePtr nodeXXX=NULL; nodeXXX=nodeXX->children; if (nodeXXX->type==XML_TEXT_NODE && nodeXXX->content) { GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "BankCode", (const char *)nodeXXX->content); } } else if (strcmp((const char *)nodeXX->name, "AccountHolder")==0) { xmlNodePtr nodeXXX=NULL; nodeXXX=nodeXX->children; if (nodeXXX->type==XML_TEXT_NODE && nodeXXX->content) { GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "owner", (const char *)nodeXXX->content); } } } nodeXX=nodeXX->next; } } } nodeX=nodeX->next; } } AB_ACCOUNT_LIST *_readAccounts(AB_PROVIDER *pro, GWEN_DB_NODE *dbAll) { AB_ACCOUNT_LIST *accountList; GWEN_DB_NODE *db; accountList=AB_Account_List_new(); db=GWEN_DB_FindFirstGroup(dbAll, "Account"); while (db) { AB_ACCOUNT *account; account=_readAccount(pro, db); if (account) AB_Account_List_Add(account, accountList); db=GWEN_DB_FindNextGroup(db, "Account"); } if (AB_Account_List_GetCount(accountList)==0) { AB_Account_List_free(accountList); return NULL; } return accountList; } AB_ACCOUNT *_readAccount(AB_PROVIDER *pro, GWEN_DB_NODE *db) { AB_ACCOUNT *a; const char *s; a=AB_Provider_CreateAccountObject(pro); assert(a); AB_Account_SetAccountType(a, AB_AccountType_Bank); AB_Account_SetCountry(a, "de"); s=GWEN_DB_GetCharValue(db, "ebicsId", 0, NULL); if (s && *s) EBC_Account_SetEbicsId(a, s); s=GWEN_DB_GetCharValue(db, "bankCode", 0, NULL); if (s && *s) AB_Account_SetBankCode(a, s); s=GWEN_DB_GetCharValue(db, "accountNumber", 0, NULL); if (s && *s) AB_Account_SetAccountNumber(a, s); s=GWEN_DB_GetCharValue(db, "owner", 0, NULL); if (s && *s) AB_Account_SetOwnerName(a, s); #if 0 s=GWEN_DB_GetCharValue(db, "accountName", 0, NULL); if (s && *s) AB_Account_SetAccountName(a, s); #endif s=GWEN_DB_GetCharValue(db, "currency", 0, NULL); if (s && *s) AB_Account_SetCurrency(a, s); else AB_Account_SetCurrency(a, "EUR"); s=GWEN_DB_GetCharValue(db, "IBAN", 0, NULL); if (s && *s) AB_Account_SetIban(a, s); s=GWEN_DB_GetCharValue(db, "BIC", 0, NULL); if (s && *s) AB_Account_SetBic(a, s); return a; } void _removeEmptyAccountsFromList(AB_ACCOUNT_LIST *accList) { /* only keep accounts which have at least IBAN or bankcode and account number */ DBG_INFO(AQEBICS_LOGDOMAIN, "Checking for empty accounts"); if (AB_Account_List_GetCount(accList)) { AB_ACCOUNT *acc; acc=AB_Account_List_First(accList); while (acc) { AB_ACCOUNT *accNext; const char *accountNum; const char *bankCode; const char *iban; accNext=AB_Account_List_Next(acc); accountNum=AB_Account_GetAccountNumber(acc); bankCode=AB_Account_GetBankCode(acc); iban=AB_Account_GetIban(acc); if (!((iban && *iban) || (accountNum && *accountNum && bankCode && *bankCode))) { DBG_INFO(AQEBICS_LOGDOMAIN, "Removing empty account from import list"); AB_Account_List_Del(acc); AB_Account_free(acc); } acc=accNext; } /* while(acc) */ } /* if (AB_Account_List_GetCount(accList)) */ } void _assignIdsOfStoredAccounts(AB_PROVIDER *pro, AB_ACCOUNT_LIST *accountList) { AB_ACCOUNT_SPEC_LIST *accountSpecList=NULL; int rv; accountSpecList=AB_AccountSpec_List_new(); rv=AB_Banking_GetAccountSpecList(AB_Provider_GetBanking(pro), &accountSpecList); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "No account spec list"); } else { AB_ACCOUNT *account; account=AB_Account_List_First(accountList); while (account) { AB_ACCOUNT_SPEC *accountSpec; accountSpec=AB_Provider_FindMatchingAccountSpec(pro, account, accountSpecList); if (accountSpec) { uint32_t uniqueId; uniqueId=AB_AccountSpec_GetUniqueId(accountSpec); DBG_INFO(AQEBICS_LOGDOMAIN, "Found a matching account (%x)", uniqueId); AB_Account_SetUniqueId(account, uniqueId); } account=AB_Account_List_Next(account); } } AB_AccountSpec_List_free(accountSpecList); } void _addOrModifyAccounts(AB_PROVIDER *pro, AB_USER *user, AB_ACCOUNT_LIST *accountList) { AB_ACCOUNT *account; account=AB_Account_List_First(accountList); while (account) { uint32_t uniqueId; uniqueId=AB_Account_GetUniqueId(account); if (uniqueId) { int rv; rv=_modifyExistingAccount(pro, user, account); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); } } else { int rv; rv=_addAccount(pro, user, account); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); } } account=AB_Account_List_Next(account); } } int _modifyExistingAccount(AB_PROVIDER *pro, AB_USER *user, AB_ACCOUNT *account) { int rv; AB_ACCOUNT *storedAccount=NULL; uint32_t uniqueId; uniqueId=AB_Account_GetUniqueId(account); /* account already exists, needs update */ DBG_ERROR(AQEBICS_LOGDOMAIN, "Account exists, modifying"); rv=AB_Provider_GetAccount(pro, uniqueId, 1, 0, &storedAccount); /* lock, don't unlock */ if (rv<0) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Error getting referenced account (%d)", rv); return rv; } else { const char *s; /* account is locked now, apply changes */ assert(storedAccount); s=EBC_Account_GetEbicsId(account); if (s && *s) EBC_Account_SetEbicsId(storedAccount, s); s=AB_Account_GetCountry(account); if (s && *s) AB_Account_SetCountry(storedAccount, s); s=AB_Account_GetBankCode(account); if (s && *s) AB_Account_SetBankCode(storedAccount, s); s=AB_Account_GetBankName(account); if (s && *s) AB_Account_SetBankName(storedAccount, s); s=AB_Account_GetAccountNumber(account); if (s && *s) AB_Account_SetAccountNumber(storedAccount, s); s=AB_Account_GetSubAccountId(account); if (s && *s) AB_Account_SetSubAccountId(storedAccount, s); s=AB_Account_GetIban(account); if (s && *s) AB_Account_SetIban(storedAccount, s); s=AB_Account_GetBic(account); if (s && *s) AB_Account_SetBic(storedAccount, s); s=AB_Account_GetOwnerName(account); if (s && *s) AB_Account_SetOwnerName(storedAccount, s); s=AB_Account_GetCurrency(account); if (s && *s) AB_Account_SetCurrency(storedAccount, s); AB_Account_SetAccountType(storedAccount, AB_Account_GetAccountType(account)); /* add flags from new account */ EBC_Account_AddFlags(storedAccount, EBC_Account_GetFlags(account)); /* handle users */ AB_Account_SetUserId(storedAccount, AB_User_GetUniqueId(user)); /* unlock account */ rv=AB_Provider_EndExclUseAccount(pro, storedAccount, 0); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); AB_Provider_EndExclUseAccount(pro, storedAccount, 1); /* abort */ return rv; } return 0; } } int _addAccount(AB_PROVIDER *pro, AB_USER *user, AB_ACCOUNT *account) { int rv; /* account is new, add it */ DBG_ERROR(AQEBICS_LOGDOMAIN, "Account is new, adding"); AB_Account_SetUserId(account, AB_User_GetUniqueId(user)); rv=AB_Provider_AddAccount(pro, account, 0); /* do not lock corresponding user, it might already be locked */ if (rv<0) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Coud not add new account (%d)", rv); return rv; } return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqebics/requests/r_unsecured_l.h0000664000175000017500000000247214043610745023652 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AQEBICS_CLIENT_R_UNSECURED_L_H #define AQEBICS_CLIENT_R_UNSECURED_L_H #include "aqebics/client/provider_l.h" #include #include #include EB_MSG *EBC_Provider_MkUnsecuredRequest(AB_PROVIDER *pro, AB_USER *u, const char *orderType, const char *orderAttribute, const char *orderData); EB_MSG *EBC_Provider_MkUnsecuredRequest_H004(AB_PROVIDER *pro, AB_USER *u, const char *orderType, const char *orderAttribute, const char *orderData); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqebics/requests/r_unsecured_h004.c0000664000175000017500000000660414043610745024066 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "r_unsecured_l.h" #include "aqebics/aqebics_l.h" #include "aqebics/msg/msg.h" #include "aqebics/msg/keys.h" #include "aqebics/msg/zip.h" #include "aqebics/msg/xml.h" #include "aqebics/client/user_l.h" #include #include #include EB_MSG *EBC_Provider_MkUnsecuredRequest_H004(AB_PROVIDER *pro, AB_USER *u, const char *orderType, const char *orderAttribute, const char *orderData) { EB_MSG *msg; xmlDocPtr doc; xmlNodePtr root_node = NULL; xmlNodePtr node = NULL; xmlNsPtr ns; const char *s; GWEN_BUFFER *tbuf; int rv; /* create request */ msg=EB_Msg_new(); doc=EB_Msg_GetDoc(msg); root_node=xmlNewNode(NULL, BAD_CAST "ebicsUnsecuredRequest"); xmlDocSetRootElement(doc, root_node); ns=xmlNewNs(root_node, BAD_CAST "http://www.ebics.org/H004", NULL); assert(ns); ns=xmlNewNs(root_node, BAD_CAST "http://www.w3.org/2000/09/xmldsig#", BAD_CAST "ds"); assert(ns); ns=xmlNewNs(root_node, BAD_CAST "http://www.w3.org/2001/XMLSchema-instance", BAD_CAST "xsi"); xmlNewNsProp(root_node, ns, BAD_CAST "schemaLocation", /* xsi:schemaLocation */ BAD_CAST "urn:org:ebics:H004 ebics_ keymgmt_request_H004.xsd"); xmlNewProp(root_node, BAD_CAST "Version", BAD_CAST "H004"); xmlNewProp(root_node, BAD_CAST "Revision", BAD_CAST "1"); /* header */ node=xmlNewChild(root_node, NULL, BAD_CAST "header", NULL); xmlNewProp(node, BAD_CAST "authenticate", BAD_CAST "true"); xmlNewChild(node, NULL, BAD_CAST "static", NULL); xmlNewChild(node, NULL, BAD_CAST "mutable", NULL); /* body */ node=xmlNewChild(root_node, NULL, BAD_CAST "body", NULL); /* fill */ s=EBC_User_GetPeerId(u); if (s) EB_Msg_SetCharValue(msg, "header/static/HostID", s); s=AB_User_GetCustomerId(u); if (s) EB_Msg_SetCharValue(msg, "header/static/PartnerID", s); EB_Msg_SetCharValue(msg, "header/static/UserID", AB_User_GetUserId(u)); EB_Msg_SetCharValue(msg, "header/static/OrderDetails/OrderType", orderType); tbuf=GWEN_Buffer_new(0, 16, 0, 1); rv=EBC_Provider_Generate_OrderId(pro, tbuf); if (rv<0) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Error exchanging messages (%d)", rv); GWEN_Buffer_free(tbuf); EB_Msg_free(msg); return NULL; } EB_Msg_SetCharValue(msg, "header/static/OrderDetails/OrderID", GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); EB_Msg_SetCharValue(msg, "header/static/OrderDetails/OrderAttribute", orderAttribute); EB_Msg_SetCharValue(msg, "header/static/SecurityMedium", "0200"); EB_Msg_SetCharValue(msg, "body/DataTransfer/OrderData", orderData); return msg; } aqbanking-6.6.1/src/libs/plugins/backends/aqebics/requests/r_ini_l.h0000664000175000017500000000176714043610745022442 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AQEBICS_CLIENT_R_INI_L_H #define AQEBICS_CLIENT_R_INI_L_H #include #include #include int EBC_Provider_XchgIniRequest(AB_PROVIDER *pro, GWEN_HTTP_SESSION *sess, AB_USER *u); int EBC_Provider_XchgIniRequest_H002(AB_PROVIDER *pro, GWEN_HTTP_SESSION *sess, AB_USER *u); int EBC_Provider_XchgIniRequest_H003(AB_PROVIDER *pro, GWEN_HTTP_SESSION *sess, AB_USER *u); int EBC_Provider_XchgIniRequest_H004(AB_PROVIDER *pro, GWEN_HTTP_SESSION *sess, AB_USER *u); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqebics/requests/r_unsecured.c0000664000175000017500000000232014043610745023322 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #include "aqebics/msg/msg.h" #include "aqebics/msg/keys.h" #include "aqebics/client/user_l.h" #include "aqebics/requests/r_unsecured_l.h" #include EB_MSG *EBC_Provider_MkUnsecuredRequest(AB_PROVIDER *pro, AB_USER *u, const char *orderType, const char *orderAttribute, const char *orderData) { const char *s; s=EBC_User_GetProtoVersion(u); if (!(s && *s)) s="H004"; if (strcasecmp(s, "H004")==0) return EBC_Provider_MkUnsecuredRequest_H004(pro, u, orderType, orderAttribute, orderData); else { DBG_ERROR(AQEBICS_LOGDOMAIN, "Proto version [%s] not supported", s); return NULL; } } aqbanking-6.6.1/src/libs/plugins/backends/aqebics/requests/r_pub_h003.c0000664000175000017500000001205514043610745022653 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "r_pub_l.h" #include "aqebics/aqebics_l.h" #include "aqebics/msg/msg.h" #include "aqebics/msg/keys.h" #include "aqebics/msg/zip.h" #include "aqebics/msg/xml.h" #include "aqebics/client/user_l.h" #include "aqebics/client/provider_l.h" #include "aqebics/requests/r_upload_l.h" #include #include #include int EBC_Provider_XchgPubRequest_H003(AB_PROVIDER *pro, GWEN_HTTP_SESSION *sess, AB_USER *u, const char *signVersion) { int rv; const char *userId; const char *partnerId; GWEN_BUFFER *bufKey; GWEN_CRYPT_TOKEN *ct; const GWEN_CRYPT_TOKEN_CONTEXT *ctx; uint32_t kid; const GWEN_CRYPT_TOKEN_KEYINFO *signKeyInfo=NULL; userId=AB_User_GetUserId(u); partnerId=AB_User_GetCustomerId(u); /* get crypt token and context */ rv=EBC_Provider_MountToken(pro, u, &ct, &ctx); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); return rv; } /* get crypt key info */ kid=GWEN_Crypt_Token_Context_GetTempSignKeyId(ctx); if (kid) { signKeyInfo=GWEN_Crypt_Token_GetKeyInfo(ct, kid, GWEN_CRYPT_TOKEN_KEYFLAGS_HASMODULUS | GWEN_CRYPT_TOKEN_KEYFLAGS_HASEXPONENT | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYVERSION | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYNUMBER, 0); if (signKeyInfo==NULL) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Sign key info not found on crypt token"); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("Sign key info not found on crypt token")); return GWEN_ERROR_NOT_FOUND; } } if (strcasecmp(signVersion, "A004")==0) { EB_RC rc; /* encode according to "DFUE-Abkommen" */ bufKey=GWEN_Buffer_new(0, 512, 0, 1); rc=EB_Key_Info_toBin(signKeyInfo, userId, "A004", 1024, bufKey); if (rc) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Error writing key (rc=%06x)", rc); GWEN_Buffer_free(bufKey); return GWEN_ERROR_GENERIC; } } else { xmlDocPtr doc; xmlNodePtr root_node = NULL; xmlNodePtr node = NULL; xmlNsPtr ns; /* create INIRequestOrderData */ doc=xmlNewDoc(BAD_CAST "1.0"); doc->encoding=xmlCharStrdup("UTF-8"); root_node=xmlNewNode(NULL, BAD_CAST "SignaturePubKeyOrderData"); xmlDocSetRootElement(doc, root_node); ns=xmlNewNs(root_node, BAD_CAST "http://www.ebics.org/S001", NULL); assert(ns); ns=xmlNewNs(root_node, BAD_CAST "http://www.w3.org/2000/09/xmldsig#", BAD_CAST "ds"); assert(ns); ns=xmlNewNs(root_node, BAD_CAST "http://www.w3.org/2001/XMLSchema-instance", BAD_CAST "xsi"); xmlNewNsProp(root_node, ns, BAD_CAST "schemaLocation", /* xsi:schemaLocation */ BAD_CAST "http://www.ebics.org/S001 " "http://www.ebics.org/S001/ebics_signature.xsd"); /* create sign key tree */ node=xmlNewChild(root_node, NULL, BAD_CAST "SignaturePubKeyInfo", NULL); rv=EB_Key_Info_toXml(signKeyInfo, node); if (rv<0) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Error response: (%d)", rv); xmlFreeDoc(doc); return GWEN_ERROR_INVALID; } xmlNewChild(node, NULL, BAD_CAST "SignatureVersion", BAD_CAST signVersion); /* store partner id and user id */ node=xmlNewChild(root_node, NULL, BAD_CAST "PartnerID", BAD_CAST partnerId); node=xmlNewChild(root_node, NULL, BAD_CAST "UserID", BAD_CAST userId); DBG_ERROR(0, "Will send this order:"); xmlDocDump(stderr, doc); /* compress and base64 doc */ bufKey=GWEN_Buffer_new(0, 4096, 0, 1); rv=EB_Xml_Compress64Doc(doc, bufKey); if (rv<0) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Error compressing/encoding doc (%d)", rv); xmlFreeDoc(doc); return rv; } xmlFreeDoc(doc); } rv=EBC_Provider_XchgUploadRequest(pro, sess, u, "PUB", (const uint8_t *)GWEN_Buffer_GetStart(bufKey), GWEN_Buffer_GetUsedBytes(bufKey)); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(bufKey); return rv; } GWEN_Buffer_free(bufKey); return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqebics/client/0000755000175000017500000000000015037736164020334 500000000000000aqbanking-6.6.1/src/libs/plugins/backends/aqebics/client/p_decipher.c0000664000175000017500000003007414043610744022517 00000000000000/*************************************************************************** begin : Fri Feb 29 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #include "aqebics/msg/zip.h" #include "aqebics/msg/keys.h" #include #include int EBC_Provider_ExtractSessionKey(AB_PROVIDER *pro, AB_USER *u, xmlNodePtr node, GWEN_CRYPT_KEY **pKey) { const char *s; GWEN_BUFFER *d64buf; int rv; GWEN_CRYPT_KEY *key; xmlNodePtr nodeX; xmlChar *prop; GWEN_BUFFER *keyBuffer; GWEN_BUFFER *dkbuf; uint32_t l; GWEN_CRYPT_TOKEN *ct; const GWEN_CRYPT_TOKEN_CONTEXT *ctx; const GWEN_CRYPT_TOKEN_KEYINFO *ki=NULL; uint32_t kid; GWEN_CRYPT_PADDALGO *algo; int ksize; int kversion=0; /* get pubkey digest node */ nodeX=EB_Xml_GetNode(node, "EncryptionPubKeyDigest", GWEN_PATH_FLAGS_NAMEMUSTEXIST); if (nodeX==NULL) { DBG_INFO(AQEBICS_LOGDOMAIN, "No pubkey digest"); return GWEN_ERROR_BAD_DATA; } /* check version */ s=EBC_User_GetCryptVersion(u); if (!(s && *s)) s="E001"; prop=xmlGetProp(nodeX, BAD_CAST "Version"); if (prop==NULL) { DBG_INFO(AQEBICS_LOGDOMAIN, "No \"Version\" in pubkey digest"); return GWEN_ERROR_BAD_DATA; } if (strcasecmp(s, (const char *)prop)!=0) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Unexpected crypt version in pubkey digest"); xmlFree(prop); return GWEN_ERROR_BAD_DATA; } if (strcasecmp((const char *)prop, "E001")==0) { xmlFree(prop); /* check digest algo */ prop=xmlGetProp(nodeX, BAD_CAST "Algorithm"); if (prop==NULL) { DBG_INFO(AQEBICS_LOGDOMAIN, "No \"Algorithm\" in pubkey digest"); return GWEN_ERROR_BAD_DATA; } if (strcasecmp((const char *)prop, "http://www.w3.org/2000/09/xmldsig#sha1")!=0) { DBG_INFO(AQEBICS_LOGDOMAIN, "Unexpected digest algo [%s]", prop); xmlFree(prop); return GWEN_ERROR_BAD_DATA; } xmlFree(prop); kversion=1; } else if (strcasecmp((const char *)prop, "E002")==0) { xmlFree(prop); /* check digest algo */ prop=xmlGetProp(nodeX, BAD_CAST "Algorithm"); if (prop==NULL) { DBG_INFO(AQEBICS_LOGDOMAIN, "No \"Algorithm\" in pubkey digest"); return GWEN_ERROR_BAD_DATA; } if (strcasecmp((const char *)prop, "http://www.w3.org/2001/04/xmlenc#sha256")!=0) { DBG_INFO(AQEBICS_LOGDOMAIN, "Unexpected digest algo [%s]", prop); xmlFree(prop); return GWEN_ERROR_BAD_DATA; } xmlFree(prop); kversion=2; } else { DBG_INFO(AQEBICS_LOGDOMAIN, "Unexpected crypt version [%s]", prop); xmlFree(prop); return GWEN_ERROR_BAD_DATA; } /* get pubkey digest */ s=EB_Xml_GetCharValue(node, "EncryptionPubKeyDigest", NULL); assert(s); if (s==NULL) { DBG_INFO(AQEBICS_LOGDOMAIN, "No pubkey digest"); return GWEN_ERROR_BAD_DATA; } /* get crypt token and context */ rv=EBC_Provider_MountToken(pro, u, &ct, &ctx); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); return rv; } /* get crypt key */ kid=GWEN_Crypt_Token_Context_GetDecipherKeyId(ctx); if (kid) ki=GWEN_Crypt_Token_GetKeyInfo(ct, kid, GWEN_CRYPT_TOKEN_KEYFLAGS_HASMODULUS | GWEN_CRYPT_TOKEN_KEYFLAGS_HASEXPONENT, 0); if (ki==NULL) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Crypt key info not found on crypt token"); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("Crypt key info not found on crypt token")); return GWEN_ERROR_NOT_FOUND; } ksize=GWEN_Crypt_Token_KeyInfo_GetKeySize(ki); /* create hash for our own pub crypt key */ d64buf=GWEN_Buffer_new(0, 256, 0, 1); if (kversion==1) { EB_Key_Info_BuildHashSha1(ki, d64buf, 1); /* compare hashes */ if (strcasecmp(s, GWEN_Buffer_GetStart(d64buf))!=0) { DBG_INFO(AQEBICS_LOGDOMAIN, "Pubkey digest does not match"); GWEN_Buffer_free(d64buf); return GWEN_ERROR_NO_KEY; } GWEN_Buffer_free(d64buf); /* get transaction key */ s=EB_Xml_GetCharValue(node, "TransactionKey", NULL); if (s==NULL) { DBG_INFO(AQEBICS_LOGDOMAIN, "No transaction key"); return GWEN_ERROR_BAD_DATA; } /* decode transaction key */ keyBuffer=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_Base64_Decode((const uint8_t *)s, 0, keyBuffer); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "Could not decode transaction key (%d)", rv); GWEN_Buffer_free(keyBuffer); return rv; } /* decrypt session key */ dkbuf=GWEN_Buffer_new(0, ksize+16, 0, 1); /* select padd algo */ ksize=GWEN_Crypt_Token_KeyInfo_GetKeySize(ki); algo=GWEN_Crypt_PaddAlgo_new(GWEN_Crypt_PaddAlgoId_Pkcs1_2); GWEN_Crypt_PaddAlgo_SetPaddSize(algo, ksize); l=GWEN_Buffer_GetMaxUnsegmentedWrite(dkbuf); rv=GWEN_Crypt_Token_Decipher(ct, kid, algo, (const uint8_t *)GWEN_Buffer_GetStart(keyBuffer), GWEN_Buffer_GetUsedBytes(keyBuffer), (uint8_t *)GWEN_Buffer_GetStart(dkbuf), &l, 0); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(dkbuf); GWEN_Buffer_free(keyBuffer); return rv; } GWEN_Buffer_IncrementPos(dkbuf, l); GWEN_Buffer_AdjustUsedBytes(dkbuf); GWEN_Buffer_free(keyBuffer); /* check size of session key */ if (l!=16) { DBG_INFO(AQEBICS_LOGDOMAIN, "keysize!=16 (%d)", (int)l); GWEN_Buffer_free(dkbuf); return GWEN_ERROR_INTERNAL; } if (GWEN_Logger_GetLevel(AQEBICS_LOGDOMAIN)>=GWEN_LoggerLevel_Debug) { DBG_DEBUG(AQEBICS_LOGDOMAIN, "Decrypted session key:"); GWEN_Buffer_Dump(dkbuf, 2); } /* create DES key */ key=GWEN_Crypt_KeyDes3K_fromData(GWEN_Crypt_CryptMode_Cbc, 16, (const uint8_t *)GWEN_Buffer_GetStart(dkbuf), GWEN_Buffer_GetUsedBytes(dkbuf)); if (key==NULL) { DBG_INFO(AQEBICS_LOGDOMAIN, "Could not create DES key from data"); GWEN_Buffer_free(dkbuf); return GWEN_ERROR_INTERNAL; } GWEN_Buffer_free(dkbuf); *pKey=key; } else if (kversion==2) { EB_Key_Info_BuildHashSha256(ki, d64buf, 1); /* compare hashes */ if (strcasecmp(s, GWEN_Buffer_GetStart(d64buf))!=0) { DBG_INFO(AQEBICS_LOGDOMAIN, "Pubkey digest does not match"); GWEN_Buffer_free(d64buf); return GWEN_ERROR_NO_KEY; } GWEN_Buffer_free(d64buf); /* get transaction key */ s=EB_Xml_GetCharValue(node, "TransactionKey", NULL); if (s==NULL) { DBG_INFO(AQEBICS_LOGDOMAIN, "No transaction key"); return GWEN_ERROR_BAD_DATA; } /* decode transaction key */ keyBuffer=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_Base64_Decode((const uint8_t *)s, 0, keyBuffer); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "Could not decode transaction key (%d)", rv); GWEN_Buffer_free(keyBuffer); return rv; } /* decrypt session key */ dkbuf=GWEN_Buffer_new(0, ksize+16, 0, 1); /* select padd algo */ ksize=GWEN_Crypt_Token_KeyInfo_GetKeySize(ki); algo=GWEN_Crypt_PaddAlgo_new(GWEN_Crypt_PaddAlgoId_Pkcs1_2); GWEN_Crypt_PaddAlgo_SetPaddSize(algo, ksize); l=GWEN_Buffer_GetMaxUnsegmentedWrite(dkbuf); rv=GWEN_Crypt_Token_Decipher(ct, kid, algo, (const uint8_t *)GWEN_Buffer_GetStart(keyBuffer), GWEN_Buffer_GetUsedBytes(keyBuffer), (uint8_t *)GWEN_Buffer_GetStart(dkbuf), &l, 0); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(dkbuf); GWEN_Buffer_free(keyBuffer); return rv; } GWEN_Buffer_IncrementPos(dkbuf, l); GWEN_Buffer_AdjustUsedBytes(dkbuf); GWEN_Buffer_free(keyBuffer); /* check size of session key */ if (l!=16) { DBG_INFO(AQEBICS_LOGDOMAIN, "keysize!=16 (%d)", (int)l); GWEN_Buffer_free(dkbuf); return GWEN_ERROR_INTERNAL; } if (GWEN_Logger_GetLevel(AQEBICS_LOGDOMAIN)>=GWEN_LoggerLevel_Debug) { DBG_DEBUG(AQEBICS_LOGDOMAIN, "Decrypted session key:"); GWEN_Buffer_Dump(dkbuf, 2); } /* create DES key */ key=GWEN_Crypt_KeyAes128_fromData(GWEN_Crypt_CryptMode_Cbc, 16, (const uint8_t *)GWEN_Buffer_GetStart(dkbuf), GWEN_Buffer_GetUsedBytes(dkbuf)); if (key==NULL) { DBG_INFO(AQEBICS_LOGDOMAIN, "Could not create AES-128 key from data"); GWEN_Buffer_free(dkbuf); return GWEN_ERROR_INTERNAL; } GWEN_Buffer_free(dkbuf); *pKey=key; } return 0; } int EBC_Provider_DecryptData(GWEN_UNUSED AB_PROVIDER *pro, AB_USER *u, GWEN_CRYPT_KEY *skey, const uint8_t *p, uint32_t len, GWEN_BUFFER *msgBuffer) { GWEN_BUFFER *tbuf; uint32_t l; int rv; const char *s; DBG_DEBUG(AQEBICS_LOGDOMAIN, "Deciphering %d bytes of data", len); s=EBC_User_GetCryptVersion(u); if (!(s && *s)) s="E001"; if (strcasecmp(s, "E001")==0) { /* decrypt message with session key */ tbuf=GWEN_Buffer_new(0, len+16, 0, 1); l=GWEN_Buffer_GetMaxUnsegmentedWrite(tbuf); /* reset IV */ GWEN_Crypt_KeyDes3K_SetIV(skey, NULL, 0); /* now decrypt */ rv=GWEN_Crypt_Key_Decipher(skey, p, len, (uint8_t *)GWEN_Buffer_GetPosPointer(tbuf), &l); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "Error deciphering %d bytes of data here (%d)", (int)len, rv); GWEN_Buffer_free(tbuf); return rv; } GWEN_Buffer_IncrementPos(tbuf, l); GWEN_Buffer_AdjustUsedBytes(tbuf); /* unpadd message */ rv=GWEN_Padd_UnpaddWithAnsiX9_23(tbuf); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); return rv; } /* unzip */ rv=EB_Zip_Inflate(GWEN_Buffer_GetStart(tbuf), l, msgBuffer); if (rv) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Could not unzip doc (%d)", rv); GWEN_Buffer_free(tbuf); return rv; } GWEN_Buffer_free(tbuf); } else if (strcasecmp(s, "E002")==0) { /* decrypt message with session key */ tbuf=GWEN_Buffer_new(0, len+16, 0, 1); l=GWEN_Buffer_GetMaxUnsegmentedWrite(tbuf); /* reset IV */ GWEN_Crypt_KeyAes128_SetIV(skey, NULL, 0); /* now decrypt */ rv=GWEN_Crypt_Key_Decipher(skey, p, len, (uint8_t *)GWEN_Buffer_GetPosPointer(tbuf), &l); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "Error deciphering %d bytes of data here (%d)", (int)len, rv); GWEN_Buffer_free(tbuf); return rv; } GWEN_Buffer_IncrementPos(tbuf, l); GWEN_Buffer_AdjustUsedBytes(tbuf); /* unpadd message */ rv=GWEN_Padd_UnpaddWithAnsiX9_23FromMultipleOf(tbuf, 16); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); return rv; } /* unzip */ rv=EB_Zip_Inflate(GWEN_Buffer_GetStart(tbuf), l, msgBuffer); if (rv) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Could not unzip doc (%d)", rv); GWEN_Buffer_free(tbuf); return rv; } GWEN_Buffer_free(tbuf); } return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqebics/client/Makefile.in0000644000175000017500000006161515037736025022326 00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ noinst_PROGRAMS = testlib$(EXEEXT) subdir = src/libs/plugins/backends/aqebics/client ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/distri.m4 $(top_srcdir)/m4/gwenhywfar.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/os.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = PROGRAMS = $(noinst_PROGRAMS) LTLIBRARIES = $(noinst_LTLIBRARIES) libclient_la_LIBADD = am_libclient_la_OBJECTS = account.lo user.lo dialog.lo provider.lo libclient_la_OBJECTS = $(am_libclient_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = testlib_SOURCES = testlib.c testlib_OBJECTS = testlib.$(OBJEXT) testlib_LDADD = $(LDADD) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/account.Plo ./$(DEPDIR)/dialog.Plo \ ./$(DEPDIR)/provider.Plo ./$(DEPDIR)/testlib.Po \ ./$(DEPDIR)/user.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libclient_la_SOURCES) testlib.c DIST_SOURCES = $(libclient_la_SOURCES) testlib.c am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac HEADERS = $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADD_ACLOCAL_FLAGS = @ADD_ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AQBANKING_CLI_VERSION_STRING = @AQBANKING_CLI_VERSION_STRING@ AQBANKING_FINTS_VERSION_STRING = @AQBANKING_FINTS_VERSION_STRING@ AQBANKING_SO_AGE = @AQBANKING_SO_AGE@ AQBANKING_SO_CURRENT = @AQBANKING_SO_CURRENT@ AQBANKING_SO_EFFECTIVE = @AQBANKING_SO_EFFECTIVE@ AQBANKING_SO_REVISION = @AQBANKING_SO_REVISION@ AQBANKING_VERSION_BUILD = @AQBANKING_VERSION_BUILD@ AQBANKING_VERSION_FULL_STRING = @AQBANKING_VERSION_FULL_STRING@ AQBANKING_VERSION_MAJOR = @AQBANKING_VERSION_MAJOR@ AQBANKING_VERSION_MINOR = @AQBANKING_VERSION_MINOR@ AQBANKING_VERSION_PATCHLEVEL = @AQBANKING_VERSION_PATCHLEVEL@ AQBANKING_VERSION_RELEASE_STRING = @AQBANKING_VERSION_RELEASE_STRING@ AQBANKING_VERSION_STRING = @AQBANKING_VERSION_STRING@ AQBANKING_VERSION_TAG = @AQBANKING_VERSION_TAG@ AQEBICS_CFLAGS = @AQEBICS_CFLAGS@ AQEBICS_LIBS = @AQEBICS_LIBS@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATETIME = @DATETIME@ DEFS = @DEFS@ -DLOCALEDIR=\"$(localedir)\" DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_EXCLUDE_PATTERNS = @DOXYGEN_EXCLUDE_PATTERNS@ DOXYGEN_FILE_PATTERNS = @DOXYGEN_FILE_PATTERNS@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENGUI_GTK2_CFLAGS = @GWENGUI_GTK2_CFLAGS@ GWENGUI_GTK2_LIBS = @GWENGUI_GTK2_LIBS@ GWENHYWFAR_MINIMUM_VERSION = @GWENHYWFAR_MINIMUM_VERSION@ HAVE_GWENGUI_GTK2 = @HAVE_GWENGUI_GTK2@ HAVE_I18N = @HAVE_I18N@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIBXSLT_CFLAGS = @LIBXSLT_CFLAGS@ LIBXSLT_LIBS = @LIBXSLT_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_SUPPORTS_QT = @MSGFMT_SUPPORTS_QT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ TUTORIALS = @TUTORIALS@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XMLMERGE = @XMLMERGE@ XMLSEC_CFLAGS = @XMLSEC_CFLAGS@ XMLSEC_LIBS = @XMLSEC_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ aqbanking_backends = @aqbanking_backends@ aqbanking_cfg_searchdir = @aqbanking_cfg_searchdir@ aqbanking_data_searchdir = @aqbanking_data_searchdir@ aqbanking_headerdir = @aqbanking_headerdir@ aqbanking_headerdir_am = @aqbanking_headerdir_am@ aqbanking_includes = @aqbanking_includes@ aqbanking_internal_libs = @aqbanking_internal_libs@ aqbanking_ldflags = @aqbanking_ldflags@ aqbanking_libs = @aqbanking_libs@ aqbanking_locale_searchdir = @aqbanking_locale_searchdir@ aqbanking_modules = @aqbanking_modules@ aqbanking_pkgdatadir = @aqbanking_pkgdatadir@ aqbanking_plugin_searchdir = @aqbanking_plugin_searchdir@ aqbanking_plugindir = @aqbanking_plugindir@ aqbanking_plugins_backends_dirs = @aqbanking_plugins_backends_dirs@ aqbanking_plugins_backends_libs = @aqbanking_plugins_backends_libs@ aqbanking_plugins_bankinfo_dirs = @aqbanking_plugins_bankinfo_dirs@ aqbanking_plugins_bankinfo_libs = @aqbanking_plugins_bankinfo_libs@ aqbanking_plugins_imexporters_dirs = @aqbanking_plugins_imexporters_dirs@ aqbanking_plugins_imexporters_libs = @aqbanking_plugins_imexporters_libs@ aqbanking_plugins_parsers_dirs = @aqbanking_plugins_parsers_dirs@ aqbanking_symlinkdir = @aqbanking_symlinkdir@ aqbanking_sys_is_windows = @aqbanking_sys_is_windows@ aqbankingpp_modules = @aqbankingpp_modules@ aqebics_datadir = @aqebics_datadir@ aqebics_includes = @aqebics_includes@ aqebics_internal_libs = @aqebics_internal_libs@ aqebics_ldflags = @aqebics_ldflags@ aqebics_libs = @aqebics_libs@ aqfints_datadir = @aqfints_datadir@ aqhbci_datadir = @aqhbci_datadir@ aqhbci_includes = @aqhbci_includes@ aqhbci_internal_libs = @aqhbci_internal_libs@ aqhbci_ldflags = @aqhbci_ldflags@ aqhbci_libs = @aqhbci_libs@ aqofxconnect_includes = @aqofxconnect_includes@ aqofxconnect_internal_libs = @aqofxconnect_internal_libs@ aqofxconnect_libs = @aqofxconnect_libs@ aqpaypal_includes = @aqpaypal_includes@ aqpaypal_internal_libs = @aqpaypal_internal_libs@ aqpaypal_libs = @aqpaypal_libs@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gmp_libs = @gmp_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_dir = @gwenhywfar_dir@ gwenhywfar_has_crypt = @gwenhywfar_has_crypt@ gwenhywfar_headers = @gwenhywfar_headers@ gwenhywfar_includes = @gwenhywfar_includes@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_plugins = @gwenhywfar_plugins@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ typemaker2_exe = @typemaker2_exe@ visibility_cflags = @visibility_cflags@ with_aqebics = @with_aqebics@ with_aqhbci = @with_aqhbci@ AM_CPPFLAGS = -I$(top_srcdir)/src/libs -I$(top_builddir)/src/libs $(gwenhywfar_includes) -I$(srcdir)/../.. $(AQEBICS_CFLAGS) AM_CFLAGS = -DBUILDING_AQBANKING @visibility_cflags@ #typefiles=context.xml noinst_LTLIBRARIES = libclient.la extra_sources = \ provider_sendcmd.c \ provider_accspec.c \ p_encipher.c \ p_encipher_e001.c \ p_encipher_e002.c \ p_decipher.c \ p_eu.c \ p_eu_a004.c \ p_eu_a005.c \ p_sign.c \ p_sign_x001.c \ p_sign_x002.c \ p_tools.c EXTRA_DIST = $(typefiles) $(extra_sources) noinst_HEADERS = \ account_l.h \ account_p.h \ dialog_l.h \ dialog_p.h \ provider_l.h \ provider_p.h \ user_l.h \ user_p.h \ account.h \ provider.h \ user.h #iheaderdir=${includedir}/aqebics/client #iheader_HEADERS= libclient_la_SOURCES = \ account.c \ user.c \ dialog.c \ provider.c all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libs/plugins/backends/aqebics/client/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libs/plugins/backends/aqebics/client/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libclient.la: $(libclient_la_OBJECTS) $(libclient_la_DEPENDENCIES) $(EXTRA_libclient_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libclient_la_OBJECTS) $(libclient_la_LIBADD) $(LIBS) testlib$(EXEEXT): $(testlib_OBJECTS) $(testlib_DEPENDENCIES) $(EXTRA_testlib_DEPENDENCIES) @rm -f testlib$(EXEEXT) $(AM_V_CCLD)$(LINK) $(testlib_OBJECTS) $(testlib_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/account.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dialog.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/provider.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testlib.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/user.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) $(LTLIBRARIES) $(HEADERS) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ clean-noinstPROGRAMS mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/account.Plo -rm -f ./$(DEPDIR)/dialog.Plo -rm -f ./$(DEPDIR)/provider.Plo -rm -f ./$(DEPDIR)/testlib.Po -rm -f ./$(DEPDIR)/user.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/account.Plo -rm -f ./$(DEPDIR)/dialog.Plo -rm -f ./$(DEPDIR)/provider.Plo -rm -f ./$(DEPDIR)/testlib.Po -rm -f ./$(DEPDIR)/user.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-generic clean-libtool clean-noinstLTLIBRARIES \ clean-noinstPROGRAMS cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am .PRECIOUS: Makefile #typefiles: $(typefiles) # typemaker -d static $(typefiles) typefiles: $(typefiles) typemaker $(typefiles) sources: for d in $(SUBDIRS); do \ $(MAKE) -C $$d sources; \ done for f in $(libclient_la_SOURCES) $(extra_sources); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done cppcheck: for f in $(libclient_la_SOURCES); do \ cppcheck --force $$f ; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: aqbanking-6.6.1/src/libs/plugins/backends/aqebics/client/user.h0000664000175000017500000001140114043610744021371 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef EBC_CLIENT_USER_H #define EBC_CLIENT_USER_H #include #include #include #include #include #ifdef __cplusplus extern "C" { #endif #define EBC_USER_FLAGS_BANK_DOESNT_SIGN 0x00000001 #define EBC_USER_FLAGS_FORCE_SSLV3 0x00000002 #define EBC_USER_FLAGS_INI 0x00000004 #define EBC_USER_FLAGS_HIA 0x00000008 #define EBC_USER_FLAGS_CLIENT_DATA_DOWNLOAD_SPP 0x00000010 #define EBC_USER_FLAGS_PREVALIDATION_SPP 0x00000020 #define EBC_USER_FLAGS_RECOVERY_SPP 0x00000040 #define EBC_USER_FLAGS_STA_SPP 0x00000080 #define EBC_USER_FLAGS_IZV_SPP 0x00000100 #define EBC_USER_FLAGS_USE_IZL 0x00010000 #define EBC_USER_FLAGS_TIMESTAMP_FIX1 0x00020000 #define EBC_USER_FLAGS_NO_EU 0x00040000 /* #define EBC_USER_FLAGS_TLS_IGN_PREMATURE_CLOSE 0x00080000 deprecated */ #define EBC_USER_FLAGS_TLS_ABORT_ON_PREMATURE_CLOSE 0x00100000 AQEBICS_API void EBC_User_Flags_toDb(GWEN_DB_NODE *db, const char *name, uint32_t flags); AQEBICS_API uint32_t EBC_User_Flags_fromDb(GWEN_DB_NODE *db, const char *name); typedef enum { EBC_UserStatus_New=0, EBC_UserStatus_Init1, EBC_UserStatus_Init2, EBC_UserStatus_Enabled, EBC_UserStatus_Disabled, EBC_UserStatus_Unknown=999 } EBC_USER_STATUS; AQEBICS_API const char *EBC_User_Status_toString(EBC_USER_STATUS st); AQEBICS_API EBC_USER_STATUS EBC_User_Status_fromString(const char *s); AQEBICS_API EBC_USER_STATUS EBC_User_GetStatus(const AB_USER *u); AQEBICS_API void EBC_User_SetStatus(AB_USER *u, EBC_USER_STATUS i); AQEBICS_API const char *EBC_User_GetServerUrl(const AB_USER *u); AQEBICS_API void EBC_User_SetServerUrl(AB_USER *u, const char *s); AQEBICS_API const char *EBC_User_GetPeerId(const AB_USER *u); AQEBICS_API void EBC_User_SetPeerId(AB_USER *u, const char *s); AQEBICS_API const char *EBC_User_GetSystemId(const AB_USER *u); AQEBICS_API void EBC_User_SetSystemId(AB_USER *u, const char *s); AQEBICS_API const char *EBC_User_GetProtoVersion(const AB_USER *u); AQEBICS_API void EBC_User_SetProtoVersion(AB_USER *u, const char *s); AQEBICS_API const char *EBC_User_GetSignVersion(const AB_USER *u); AQEBICS_API void EBC_User_SetSignVersion(AB_USER *u, const char *s); AQEBICS_API const char *EBC_User_GetCryptVersion(const AB_USER *u); AQEBICS_API void EBC_User_SetCryptVersion(AB_USER *u, const char *s); AQEBICS_API const char *EBC_User_GetAuthVersion(const AB_USER *u); AQEBICS_API void EBC_User_SetAuthVersion(AB_USER *u, const char *s); /** * Returns 0 if the bank doesn't sign messages, 1 otherwise. * This can be used in case the bank sends a sign key upon request but * never signs it's messages. */ AQEBICS_API uint32_t EBC_User_GetFlags(const AB_USER *u); AQEBICS_API void EBC_User_SetFlags(AB_USER *u, uint32_t flags); AQEBICS_API void EBC_User_AddFlags(AB_USER *u, uint32_t flags); AQEBICS_API void EBC_User_SubFlags(AB_USER *u, uint32_t flags); /** * Returns the major HTTP version to be used in PIN/TAN mode (defaults to 1). */ AQEBICS_API int EBC_User_GetHttpVMajor(const AB_USER *u); AQEBICS_API void EBC_User_SetHttpVMajor(AB_USER *u, int i); /** * Returns the minor HTTP version to be used in PIN/TAN mode (defaults to 1). */ AQEBICS_API int EBC_User_GetHttpVMinor(const AB_USER *u); AQEBICS_API void EBC_User_SetHttpVMinor(AB_USER *u, int i); AQEBICS_API const char *EBC_User_GetHttpUserAgent(const AB_USER *u); AQEBICS_API void EBC_User_SetHttpUserAgent(AB_USER *u, const char *s); AQEBICS_API const char *EBC_User_GetHttpContentType(const AB_USER *u); AQEBICS_API void EBC_User_SetHttpContentType(AB_USER *u, const char *s); AQEBICS_API const char *EBC_User_GetTokenType(const AB_USER *u); AQEBICS_API void EBC_User_SetTokenType(AB_USER *u, const char *s); AQEBICS_API const char *EBC_User_GetTokenName(const AB_USER *u); AQEBICS_API void EBC_User_SetTokenName(AB_USER *u, const char *s); AQEBICS_API uint32_t EBC_User_GetTokenContextId(const AB_USER *u); AQEBICS_API void EBC_User_SetTokenContextId(AB_USER *u, uint32_t id); AQEBICS_API int EBC_User_MkPasswdName(const AB_USER *u, GWEN_BUFFER *buf); #ifdef __cplusplus } #endif #endif /* EBC_USER_H */ aqbanking-6.6.1/src/libs/plugins/backends/aqebics/client/p_eu.c0000664000175000017500000000254614043610744021350 00000000000000/*************************************************************************** begin : Wed May 14 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #include int EBC_Provider_MkEuCryptZipDoc(AB_PROVIDER *pro, AB_USER *u, const char *requestType, const uint8_t *pMsg, uint32_t lMsg, GWEN_CRYPT_KEY *skey, GWEN_BUFFER *sbuf) { const char *s; int rv; s=EBC_User_GetSignVersion(u); if (!(s && *s)) s="A004"; if (strcasecmp(s, "A004")==0) rv=EBC_Provider_MkEuCryptZipDoc_A004(pro, u, requestType, pMsg, lMsg, skey, sbuf); else if (strcasecmp(s, "A005")==0) rv=EBC_Provider_MkEuCryptZipDoc_A005(pro, u, requestType, pMsg, lMsg, skey, sbuf); else { DBG_ERROR(AQEBICS_LOGDOMAIN, "Invalid sign version: [%s]", s); return GWEN_ERROR_INVALID; } if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); return rv; } return rv; } aqbanking-6.6.1/src/libs/plugins/backends/aqebics/client/dialog.c0000664000175000017500000001247014043610744021654 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "dialog_p.h" #include "aqebics/client/user_l.h" #include #include #include GWEN_INHERIT(GWEN_HTTP_SESSION, EBC_DIALOG) GWEN_HTTP_SESSION *EBC_Dialog_new(AB_PROVIDER *pro, AB_USER *u) { GWEN_HTTP_SESSION *sess; EBC_DIALOG *xsess; const char *url; uint32_t flags; const char *s; url=EBC_User_GetServerUrl(u); if (url==NULL) { DBG_ERROR(AQEBICS_LOGDOMAIN, "No URL for user [%s]", AB_User_GetUserId(u)); return NULL; } /* create session */ sess=AB_HttpSession_new(pro, u, url, "https", 443); assert(sess); /* extend session */ GWEN_NEW_OBJECT(EBC_DIALOG, xsess); GWEN_INHERIT_SETDATA(GWEN_HTTP_SESSION, EBC_DIALOG, sess, xsess, EBC_Dialog_FreeData); /* set flags according to user settings */ flags=EBC_User_GetFlags(u); if (flags & EBC_USER_FLAGS_FORCE_SSLV3) GWEN_HttpSession_AddFlags(sess, GWEN_HTTP_SESSION_FLAGS_FORCE_SSL3); if (!(flags & EBC_USER_FLAGS_TLS_ABORT_ON_PREMATURE_CLOSE)) GWEN_HttpSession_AddFlags(sess, GWEN_HTTP_SESSION_FLAGS_TLS_IGN_PREMATURE_CLOSE); /* set HTTP config according to user settings */ GWEN_HttpSession_SetHttpUserAgent(sess, EBC_User_GetHttpUserAgent(u)); s=EBC_User_GetHttpContentType(u); if (s==NULL || *s==0) s="text/xml; charset=UTF-8"; GWEN_HttpSession_SetHttpContentType(sess, s); GWEN_HttpSession_SetHttpVMajor(sess, EBC_User_GetHttpVMajor(u)); GWEN_HttpSession_SetHttpVMinor(sess, EBC_User_GetHttpVMinor(u)); return sess; } void GWENHYWFAR_CB EBC_Dialog_FreeData(GWEN_UNUSED void *bp, void *p) { EBC_DIALOG *dsess; dsess=(EBC_DIALOG *) p; GWEN_FREE_OBJECT(dsess); } int EBC_Dialog_ExchangeMessages(GWEN_HTTP_SESSION *sess, EB_MSG *msg, EB_MSG **pResponse) { AB_USER *u; int rv; GWEN_BUFFER *sendBuf; GWEN_BUFFER *recvBuf; EB_MSG *mResponse; /* preparations */ u=AB_HttpSession_GetUser(sess); assert(u); sendBuf=GWEN_Buffer_new(0, 1024, 0, 1); recvBuf=GWEN_Buffer_new(0, 1024, 0, 1); /* convert message to buffer for sending */ EB_Msg_toBuffer(msg, sendBuf); #if 1 if (GWEN_Logger_GetLevel(AQEBICS_LOGDOMAIN)>=GWEN_LoggerLevel_Debug) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Sending this:"); fprintf(stderr, "====================================\n"); fprintf(stderr, "%s\n", GWEN_Buffer_GetStart(sendBuf)); fprintf(stderr, "====================================\n"); } #endif /* send request */ rv=GWEN_HttpSession_SendPacket(sess, "POST", (const uint8_t *)GWEN_Buffer_GetStart(sendBuf), GWEN_Buffer_GetUsedBytes(sendBuf)); if (rv<0) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Error sending request (%d)", rv); GWEN_Buffer_free(recvBuf); GWEN_Buffer_free(sendBuf); return rv; } GWEN_Buffer_free(sendBuf); /* receive response */ rv=GWEN_HttpSession_RecvPacket(sess, recvBuf); if (rv<0 || rv>=300) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Error sending request (%d)", rv); GWEN_Buffer_free(recvBuf); return rv; } #if 1 if (GWEN_Logger_GetLevel(AQEBICS_LOGDOMAIN)>=GWEN_LoggerLevel_Debug) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Received this:"); fprintf(stderr, "====================================\n"); fprintf(stderr, "%s\n", GWEN_Buffer_GetStart(recvBuf)); fprintf(stderr, "====================================\n"); } #endif /* convert buffer to EBICS message */ mResponse=EB_Msg_fromBuffer(GWEN_Buffer_GetStart(recvBuf), GWEN_Buffer_GetUsedBytes(recvBuf)); GWEN_Buffer_free(recvBuf); if (!mResponse) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Invalid response (no EBICS message)"); return GWEN_ERROR_BAD_DATA; } *pResponse=mResponse; return 0; } int EBC_Dialog_ExchangeMessagesAndCheckResponse(GWEN_HTTP_SESSION *sess, EB_MSG *msg, EB_MSG **pResponse) { int rv; EB_MSG *mRsp; EB_RC rc; rv=EBC_Dialog_ExchangeMessages(sess, msg, pResponse); if (rv<0 || rv>=300) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Error exchanging messages (%d)", rv); return rv; } /* check response */ mRsp=*pResponse; assert(mRsp); rc=EB_Msg_GetResultCode(mRsp); if ((rc & 0xff0000)==0x090000 || (rc & 0xff0000)==0x060000) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Error response: (%06x)", rc); return AB_ERROR_SECURITY; } rc=EB_Msg_GetBodyResultCode(mRsp); if (rc) { if ((rc & 0xff0000)==0x090000 || (rc & 0xff0000)==0x060000) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Error response: (%06x)", rc); if ((rc & 0xfff00)==0x091300 || (rc & 0xfff00)==0x091200) return AB_ERROR_SECURITY; else return GWEN_ERROR_GENERIC; } } return rv; } aqbanking-6.6.1/src/libs/plugins/backends/aqebics/client/provider.h0000664000175000017500000000113414043610744022247 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AQEBICS_CLIENT_PROVIDER_H #define AQEBICS_CLIENT_PROVIDER_H #include AB_PROVIDER *EBC_Provider_new(AB_BANKING *ab); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqebics/client/account.c0000664000175000017500000001120214043610744022041 00000000000000/*************************************************************************** begin : Wed May 07 2008 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "account_p.h" #include "provider_l.h" #include #include GWEN_INHERIT(AB_ACCOUNT, EBC_ACCOUNT) AB_ACCOUNT *EBC_Account_new(AB_PROVIDER *pro) { AB_ACCOUNT *a; EBC_ACCOUNT *ae; a=AB_Account_new(); assert(a); AB_Account_SetProvider(a, pro); AB_Account_SetBackendName(a, "aqebics"); GWEN_NEW_OBJECT(EBC_ACCOUNT, ae); GWEN_INHERIT_SETDATA(AB_ACCOUNT, EBC_ACCOUNT, a, ae, EBC_Account_freeData); ae->readFromDbFn=AB_Account_SetReadFromDbFn(a, EBC_Account_ReadFromDb); ae->writeToDbFn=AB_Account_SetWriteToDbFn(a, EBC_Account_WriteToDb); return a; } void GWENHYWFAR_CB EBC_Account_freeData(GWEN_UNUSED void *bp, void *p) { EBC_ACCOUNT *ae; ae=(EBC_ACCOUNT *)p; free(ae->ebicsId); GWEN_FREE_OBJECT(ae); } void EBC_Account_Flags_toDb(GWEN_DB_NODE *db, const char *name, uint32_t flags) { GWEN_DB_DeleteVar(db, name); if (flags & EBC_ACCOUNT_FLAGS_STA_SPP) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_DEFAULT, name, "staSpp"); if (flags & EBC_ACCOUNT_FLAGS_IZV_SPP) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_DEFAULT, name, "izvSpp"); } uint32_t EBC_Account_Flags_fromDb(GWEN_DB_NODE *db, const char *name) { uint32_t fl=0; int i; for (i=0; ; i++) { const char *s; s=GWEN_DB_GetCharValue(db, name, i, 0); if (!s) break; if (strcasecmp(s, "staSpp")==0) fl|=EBC_ACCOUNT_FLAGS_STA_SPP; else if (strcasecmp(s, "izvSpp")==0) fl|=EBC_ACCOUNT_FLAGS_IZV_SPP; else { DBG_WARN(AQEBICS_LOGDOMAIN, "Unknown user flag \"%s\"", s); } } return fl; } int EBC_Account_ReadFromDb(AB_ACCOUNT *a, GWEN_DB_NODE *db) { EBC_ACCOUNT *ae; GWEN_DB_NODE *dbP; int rv; AB_PROVIDER *pro; const char *s; assert(a); ae=GWEN_INHERIT_GETDATA(AB_ACCOUNT, EBC_ACCOUNT, a); assert(ae); /* save provider, because AB_Account_ReadFromDb clears it */ pro=AB_Account_GetProvider(a); /* read data for base class */ rv=(ae->readFromDbFn)(a, db); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); return rv; } /* set provider again */ AB_Account_SetProvider(a, pro); dbP=GWEN_DB_GetGroup(db, GWEN_DB_FLAGS_DEFAULT, "data/backend"); /* read data for provider */ ae->flags=EBC_Account_Flags_fromDb(dbP, "accountFlags"); free(ae->ebicsId); s=GWEN_DB_GetCharValue(dbP, "ebicsId", 0, 0); if (s) ae->ebicsId=strdup(s); else ae->ebicsId=NULL; return 0; } int EBC_Account_WriteToDb(const AB_ACCOUNT *a, GWEN_DB_NODE *db) { EBC_ACCOUNT *ae; GWEN_DB_NODE *dbP; int rv; assert(a); ae=GWEN_INHERIT_GETDATA(AB_ACCOUNT, EBC_ACCOUNT, a); assert(ae); rv=(ae->writeToDbFn)(a, db); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); return rv; } /* write data for provider */ dbP=GWEN_DB_GetGroup(db, GWEN_DB_FLAGS_DEFAULT, "data/backend"); EBC_Account_Flags_toDb(dbP, "accountFlags", ae->flags); if (ae->ebicsId) GWEN_DB_SetCharValue(dbP, GWEN_DB_FLAGS_OVERWRITE_VARS, "ebicsId", ae->ebicsId); return 0; } const char *EBC_Account_GetEbicsId(const AB_ACCOUNT *a) { EBC_ACCOUNT *ae; assert(a); ae=GWEN_INHERIT_GETDATA(AB_ACCOUNT, EBC_ACCOUNT, a); assert(ae); return ae->ebicsId; } void EBC_Account_SetEbicsId(AB_ACCOUNT *a, const char *s) { EBC_ACCOUNT *ae; assert(a); ae=GWEN_INHERIT_GETDATA(AB_ACCOUNT, EBC_ACCOUNT, a); assert(ae); free(ae->ebicsId); if (s) ae->ebicsId=strdup(s); else ae->ebicsId=NULL; } uint32_t EBC_Account_GetFlags(const AB_ACCOUNT *a) { EBC_ACCOUNT *ae; assert(a); ae=GWEN_INHERIT_GETDATA(AB_ACCOUNT, EBC_ACCOUNT, a); assert(ae); return ae->flags; } void EBC_Account_SetFlags(AB_ACCOUNT *a, uint32_t flags) { EBC_ACCOUNT *ae; assert(a); ae=GWEN_INHERIT_GETDATA(AB_ACCOUNT, EBC_ACCOUNT, a); assert(ae); ae->flags=flags; } void EBC_Account_AddFlags(AB_ACCOUNT *a, uint32_t flags) { EBC_ACCOUNT *ae; assert(a); ae=GWEN_INHERIT_GETDATA(AB_ACCOUNT, EBC_ACCOUNT, a); assert(ae); ae->flags|=flags; } void EBC_Account_SubFlags(AB_ACCOUNT *a, uint32_t flags) { EBC_ACCOUNT *ae; assert(a); ae=GWEN_INHERIT_GETDATA(AB_ACCOUNT, EBC_ACCOUNT, a); assert(ae); ae->flags&=~flags; } aqbanking-6.6.1/src/libs/plugins/backends/aqebics/client/account_p.h0000664000175000017500000000166314043610744022377 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef EBC_CLIENT_ACCOUNT_P_H #define EBC_CLIENT_ACCOUNT_P_H #include "account_l.h" typedef struct EBC_ACCOUNT EBC_ACCOUNT; struct EBC_ACCOUNT { uint32_t flags; char *ebicsId; AB_ACCOUNT_READFROMDB_FN readFromDbFn; AB_ACCOUNT_WRITETODB_FN writeToDbFn; }; static void GWENHYWFAR_CB EBC_Account_freeData(void *bp, void *p); static int EBC_Account_ReadFromDb(AB_ACCOUNT *a, GWEN_DB_NODE *db); static int EBC_Account_WriteToDb(const AB_ACCOUNT *a, GWEN_DB_NODE *db); #endif /* EBC_CLIENT_ACCOUNT_P_H */ aqbanking-6.6.1/src/libs/plugins/backends/aqebics/client/p_tools.c0000664000175000017500000013751614576127360022115 00000000000000 #include "aqebics/client/user_l.h" #include "aqebics/msg/keys.h" #include "aqebics/requests/r_hkd_htd_l.h" #include "aqebics/requests/r_download_l.h" #include "aqebics/requests/r_upload_l.h" #include "aqebics/requests/r_ini_l.h" #include "aqebics/requests/r_hia_l.h" #include "aqebics/requests/r_pub_l.h" #include "aqebics/requests/r_hpb_l.h" #include "aqebics/requests/r_hpd_l.h" #include int EBC_Provider_Send_INI(AB_PROVIDER *pro, AB_USER *u, int doLock) { EBC_PROVIDER *dp; GWEN_HTTP_SESSION *sess; int rv; EBC_USER_STATUS ust; assert(pro); dp=GWEN_INHERIT_GETDATA(AB_PROVIDER, EBC_PROVIDER, pro); assert(dp); if (EBC_User_GetFlags(u) & EBC_USER_FLAGS_INI) { DBG_ERROR(AQEBICS_LOGDOMAIN, "INI already sent to the server"); return GWEN_ERROR_INVALID; } ust=EBC_User_GetStatus(u); if (ust!=EBC_UserStatus_New && ust!=EBC_UserStatus_Init1 && ust!=EBC_UserStatus_Disabled) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Invalid status \"%s\" of user \"%s\"", EBC_User_Status_toString(ust), AB_User_GetUserId(u)); return GWEN_ERROR_INVALID; } /* create and open session */ sess=EBC_Dialog_new(pro, u); rv=GWEN_HttpSession_Init(sess); if (rv<0) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Could not open session"); GWEN_HttpSession_free(sess); return rv; } /* lock user */ if (doLock) { rv=AB_Provider_BeginExclUseUser(pro, u); if (rv<0) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Could not lock customer"); GWEN_HttpSession_free(sess); return rv; } } /* exchange request and response */ rv=EBC_Provider_XchgIniRequest(pro, sess, u); if (rv) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Error exchanging INI request (%d)", rv); if (doLock) AB_Provider_EndExclUseUser(pro, u, 1); GWEN_HttpSession_free(sess); return rv; } /* unlock user */ if (doLock) { rv=AB_Provider_EndExclUseUser(pro, u, 0); if (rv<0) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Could not unlock customer"); AB_Provider_EndExclUseUser(pro, u, 1); GWEN_HttpSession_free(sess); return rv; } } /* close and destroy session */ GWEN_HttpSession_Fini(sess); GWEN_HttpSession_free(sess); return rv; } int EBC_Provider_Send_HIA(AB_PROVIDER *pro, AB_USER *u, int doLock) { EBC_PROVIDER *dp; GWEN_HTTP_SESSION *sess; int rv; EBC_USER_STATUS ust; assert(pro); dp=GWEN_INHERIT_GETDATA(AB_PROVIDER, EBC_PROVIDER, pro); assert(dp); if (EBC_User_GetFlags(u) & EBC_USER_FLAGS_HIA) { DBG_ERROR(AQEBICS_LOGDOMAIN, "HIA already sent to the server"); return GWEN_ERROR_INVALID; } ust=EBC_User_GetStatus(u); if (ust!=EBC_UserStatus_New && ust!=EBC_UserStatus_Init1 && ust!=EBC_UserStatus_Disabled) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Invalid status \"%s\" of user \"%s\"", EBC_User_Status_toString(ust), AB_User_GetUserId(u)); return GWEN_ERROR_INVALID; } /* create and open session */ sess=EBC_Dialog_new(pro, u); rv=GWEN_HttpSession_Init(sess); if (rv<0) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Could not open session"); GWEN_HttpSession_free(sess); return rv; } /* lock user */ if (doLock) { rv=AB_Provider_BeginExclUseUser(pro, u); if (rv<0) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Could not lock customer"); GWEN_HttpSession_free(sess); return rv; } } /* exchange request and response */ rv=EBC_Provider_XchgHiaRequest(pro, sess, u); if (rv) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Error exchanging HIA request (%d)", rv); if (doLock) AB_Provider_EndExclUseUser(pro, u, 1); GWEN_HttpSession_free(sess); return rv; } /* unlock user */ if (doLock) { rv=AB_Provider_EndExclUseUser(pro, u, 0); if (rv<0) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Could not unlock customer"); AB_Provider_EndExclUseUser(pro, u, 1); GWEN_HttpSession_free(sess); return rv; } } /* close and destroy session */ GWEN_HttpSession_Fini(sess); GWEN_HttpSession_free(sess); return rv; } int EBC_Provider_Send_HPB(AB_PROVIDER *pro, AB_USER *u, int doLock) { EBC_PROVIDER *dp; GWEN_HTTP_SESSION *sess; int rv; EBC_USER_STATUS ust; assert(pro); dp=GWEN_INHERIT_GETDATA(AB_PROVIDER, EBC_PROVIDER, pro); assert(dp); ust=EBC_User_GetStatus(u); if (ust!=EBC_UserStatus_Init2 && ust!=EBC_UserStatus_Enabled) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Invalid status \"%s\" of user \"%s\"", EBC_User_Status_toString(ust), AB_User_GetUserId(u)); return GWEN_ERROR_INVALID; } /* create and open session */ sess=EBC_Dialog_new(pro, u); rv=GWEN_HttpSession_Init(sess); if (rv<0) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Could not open session"); GWEN_HttpSession_free(sess); return rv; } /* lock user */ if (doLock) { rv=AB_Provider_BeginExclUseUser(pro, u); if (rv<0) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Could not lock customer"); GWEN_HttpSession_free(sess); return rv; } } /* exchange request and response */ rv=EBC_Provider_XchgHpbRequest(pro, sess, u); if (rv) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Error exchanging HPB request (%d)", rv); if (doLock) AB_Provider_EndExclUseUser(pro, u, 1); GWEN_HttpSession_free(sess); return rv; } /* unlock user */ if (doLock) { rv=AB_Provider_EndExclUseUser(pro, u, 0); if (rv<0) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Could not unlock customer"); AB_Provider_EndExclUseUser(pro, u, 1); GWEN_HttpSession_free(sess); return rv; } } /* close and destroy session */ GWEN_HttpSession_Fini(sess); GWEN_HttpSession_free(sess); return rv; } int EBC_Provider_Send_HPD(AB_PROVIDER *pro, AB_USER *u, int doLock) { EBC_PROVIDER *dp; GWEN_HTTP_SESSION *sess; int rv; EBC_USER_STATUS ust; assert(pro); dp=GWEN_INHERIT_GETDATA(AB_PROVIDER, EBC_PROVIDER, pro); assert(dp); ust=EBC_User_GetStatus(u); if (ust!=EBC_UserStatus_Enabled) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Invalid status \"%s\" of user \"%s\"", EBC_User_Status_toString(ust), AB_User_GetUserId(u)); return GWEN_ERROR_INVALID; } /* create and open session */ sess=EBC_Dialog_new(pro, u); rv=GWEN_HttpSession_Init(sess); if (rv<0) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Could not open session"); GWEN_HttpSession_free(sess); return rv; } /* lock user */ if (doLock) { rv=AB_Provider_BeginExclUseUser(pro, u); if (rv<0) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Could not lock customer"); GWEN_HttpSession_free(sess); return rv; } } /* exchange request and response */ rv=EBC_Provider_XchgHpdRequest(pro, sess, u); if (rv) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Error exchanging HPD request (%d)", rv); if (doLock) AB_Provider_EndExclUseUser(pro, u, 1); GWEN_HttpSession_free(sess); return rv; } /* unlock user */ if (doLock) { rv=AB_Provider_EndExclUseUser(pro, u, 0); if (rv<0) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Could not unlock customer"); AB_Provider_EndExclUseUser(pro, u, 1); GWEN_HttpSession_free(sess); return rv; } } /* close and destroy session */ GWEN_HttpSession_Fini(sess); GWEN_HttpSession_free(sess); return rv; } int EBC_Provider_Send_HKD(AB_PROVIDER *pro, AB_USER *u, int doLock) { EBC_PROVIDER *dp; GWEN_HTTP_SESSION *sess; int rv; EBC_USER_STATUS ust; assert(pro); dp=GWEN_INHERIT_GETDATA(AB_PROVIDER, EBC_PROVIDER, pro); assert(dp); ust=EBC_User_GetStatus(u); if (ust!=EBC_UserStatus_Enabled) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Invalid status \"%s\" of user \"%s\"", EBC_User_Status_toString(ust), AB_User_GetUserId(u)); return GWEN_ERROR_INVALID; } /* create and open session */ sess=EBC_Dialog_new(pro, u); rv=GWEN_HttpSession_Init(sess); if (rv<0) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Could not open session"); GWEN_HttpSession_free(sess); return rv; } /* lock user */ if (doLock) { rv=AB_Provider_BeginExclUseUser(pro, u); if (rv<0) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Could not lock customer"); GWEN_HttpSession_free(sess); return rv; } } /* exchange request and response */ rv=EBC_Provider_XchgHkdRequest(pro, sess, u); if (rv) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Error exchanging HKD request (%d)", rv); if (doLock) AB_Provider_EndExclUseUser(pro, u, 1); GWEN_HttpSession_free(sess); return rv; } /* unlock user */ if (doLock) { rv=AB_Provider_EndExclUseUser(pro, u, 0); if (rv<0) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Could not unlock customer"); AB_Provider_EndExclUseUser(pro, u, 1); GWEN_HttpSession_free(sess); return rv; } } /* close and destroy session */ GWEN_HttpSession_Fini(sess); GWEN_HttpSession_free(sess); return rv; } int EBC_Provider_Send_HTD(AB_PROVIDER *pro, AB_USER *u, int doLock) { EBC_PROVIDER *dp; GWEN_HTTP_SESSION *sess; int rv; EBC_USER_STATUS ust; assert(pro); dp=GWEN_INHERIT_GETDATA(AB_PROVIDER, EBC_PROVIDER, pro); assert(dp); ust=EBC_User_GetStatus(u); if (ust!=EBC_UserStatus_Enabled) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Invalid status \"%s\" of user \"%s\"", EBC_User_Status_toString(ust), AB_User_GetUserId(u)); return GWEN_ERROR_INVALID; } /* create and open session */ sess=EBC_Dialog_new(pro, u); rv=GWEN_HttpSession_Init(sess); if (rv<0) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Could not open session"); GWEN_HttpSession_free(sess); return rv; } /* lock user */ if (doLock) { rv=AB_Provider_BeginExclUseUser(pro, u); if (rv<0) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Could not lock customer"); GWEN_HttpSession_free(sess); return rv; } } /* exchange request and response */ rv=EBC_Provider_XchgHtdRequest(pro, sess, u); if (rv) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Error exchanging HTD request (%d)", rv); if (doLock) AB_Provider_EndExclUseUser(pro, u, 1); GWEN_HttpSession_free(sess); return rv; } /* unlock user */ if (doLock) { rv=AB_Provider_EndExclUseUser(pro, u, 0); if (rv<0) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Could not unlock customer"); AB_Provider_EndExclUseUser(pro, u, 1); GWEN_HttpSession_free(sess); return rv; } } /* close and destroy session */ GWEN_HttpSession_Fini(sess); GWEN_HttpSession_free(sess); return rv; } int EBC_Provider_Send_PUB(AB_PROVIDER *pro, AB_USER *u, const char *signVersion, int doLock) { EBC_PROVIDER *dp; GWEN_HTTP_SESSION *sess; int rv; assert(pro); dp=GWEN_INHERIT_GETDATA(AB_PROVIDER, EBC_PROVIDER, pro); assert(dp); /* create and open session */ sess=EBC_Dialog_new(pro, u); rv=GWEN_HttpSession_Init(sess); if (rv<0) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Could not open session"); GWEN_HttpSession_free(sess); return rv; } /* lock user */ if (doLock) { rv=AB_Provider_BeginExclUseUser(pro, u); if (rv<0) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Could not lock customer"); GWEN_HttpSession_free(sess); return rv; } } /* exchange request and response */ rv=EBC_Provider_XchgPubRequest(pro, sess, u, signVersion); if (rv) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Error exchanging PUB request (%d)", rv); if (doLock) AB_Provider_EndExclUseUser(pro, u, 1); GWEN_HttpSession_free(sess); return rv; } /* unlock user */ if (doLock) { rv=AB_Provider_EndExclUseUser(pro, u, 0); if (rv<0) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Could not unlock customer"); AB_Provider_EndExclUseUser(pro, u, 1); GWEN_HttpSession_free(sess); return rv; } } /* close and destroy session */ GWEN_HttpSession_Fini(sess); GWEN_HttpSession_free(sess); return rv; } int EBC_Provider_DownloadWithSession(AB_PROVIDER *pro, GWEN_HTTP_SESSION *sess, AB_USER *u, const char *rtype, GWEN_BUFFER *targetBuffer, int withReceipt, const GWEN_DATE *fromDate, const GWEN_DATE *toDate, int doLock) { EBC_PROVIDER *dp; int rv; EBC_USER_STATUS ust; assert(pro); dp=GWEN_INHERIT_GETDATA(AB_PROVIDER, EBC_PROVIDER, pro); assert(dp); ust=EBC_User_GetStatus(u); if (ust!=EBC_UserStatus_Enabled) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Invalid status \"%s\" of user \"%s\"", EBC_User_Status_toString(ust), AB_User_GetUserId(u)); return GWEN_ERROR_INVALID; } /* lock user */ if (doLock) { rv=AB_Provider_BeginExclUseUser(pro, u); if (rv<0) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Could not lock customer"); return rv; } } /* exchange request and response */ rv=EBC_Provider_XchgDownloadRequest(pro, sess, u, rtype, targetBuffer, withReceipt, fromDate, toDate); if (rv) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Error exchanging download request (%d)", rv); if (doLock) AB_Provider_EndExclUseUser(pro, u, 1); return rv; } /* unlock user */ if (doLock) { rv=AB_Provider_EndExclUseUser(pro, u, 0); if (rv<0) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Could not unlock customer"); AB_Provider_EndExclUseUser(pro, u, 1); return rv; } } return rv; } int EBC_Provider_Download(AB_PROVIDER *pro, AB_USER *u, const char *rtype, GWEN_BUFFER *targetBuffer, int withReceipt, const GWEN_DATE *fromDate, const GWEN_DATE *toDate, int doLock) { EBC_PROVIDER *dp; GWEN_HTTP_SESSION *sess; int rv; EBC_USER_STATUS ust; assert(pro); dp=GWEN_INHERIT_GETDATA(AB_PROVIDER, EBC_PROVIDER, pro); assert(dp); ust=EBC_User_GetStatus(u); if (ust!=EBC_UserStatus_Enabled) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Invalid status \"%s\" of user \"%s\"", EBC_User_Status_toString(ust), AB_User_GetUserId(u)); return GWEN_ERROR_INVALID; } /* create and open session */ sess=EBC_Dialog_new(pro, u); rv=GWEN_HttpSession_Init(sess); if (rv<0) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Could not open session"); GWEN_HttpSession_free(sess); return rv; } rv=EBC_Provider_DownloadWithSession(pro, sess, u, rtype, targetBuffer, withReceipt, fromDate, toDate, doLock); if (rv<0 || rv>=300) { DBG_ERROR(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_HttpSession_free(sess); return rv; } /* close and destroy session */ GWEN_HttpSession_Fini(sess); GWEN_HttpSession_free(sess); return rv; } int EBC_Provider_DownloadIntoContext(AB_PROVIDER *pro, AB_USER *u, const char *rtype, int withReceipt, const GWEN_DATE *fromDate, const GWEN_DATE *toDate, const char *importerName, const char *profileName, AB_IMEXPORTER_CONTEXT *ctx, int doLock) { int rv; GWEN_BUFFER *buf; buf=GWEN_Buffer_new(0, 1024, 0, 1); GWEN_Buffer_SetHardLimit(buf, EBICS_BUFFER_MAX_HARD_LIMIT); DBG_INFO(AQEBICS_LOGDOMAIN, "Downloading data"); rv=EBC_Provider_Download(pro, u, rtype, buf, withReceipt, fromDate, toDate, doLock); if (rv<0 || rv>=300) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(buf); return rv; } DBG_INFO(AQEBICS_LOGDOMAIN, "Importing data (%s : %s)", importerName, profileName); rv=AB_Banking_ImportFromBufferLoadProfile(AB_Provider_GetBanking(pro), importerName, ctx, profileName, NULL, (const uint8_t *) GWEN_Buffer_GetStart(buf), GWEN_Buffer_GetUsedBytes(buf)); GWEN_Buffer_free(buf); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); return rv; } DBG_INFO(AQEBICS_LOGDOMAIN, "Importing transactions: done"); return 0; } int EBC_Provider_DownloadIntoContextWithSession(AB_PROVIDER *pro, GWEN_HTTP_SESSION *sess, AB_USER *u, const char *rtype, int withReceipt, const GWEN_DATE *fromDate, const GWEN_DATE *toDate, const char *importerName, const char *profileName, AB_IMEXPORTER_CONTEXT *ctx, int doLock) { int rv; GWEN_BUFFER *buf; buf=GWEN_Buffer_new(0, 1024, 0, 1); GWEN_Buffer_SetHardLimit(buf, EBICS_BUFFER_MAX_HARD_LIMIT); DBG_INFO(AQEBICS_LOGDOMAIN, "Downloading data"); rv=EBC_Provider_DownloadWithSession(pro, sess, u, rtype, buf, withReceipt, fromDate, toDate, doLock); if (rv<0 || rv>=300) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(buf); return rv; } DBG_INFO(AQEBICS_LOGDOMAIN, "Importing data (%s : %s)", importerName, profileName); rv=AB_Banking_ImportFromBufferLoadProfile(AB_Provider_GetBanking(pro), importerName, ctx, profileName, NULL, (const uint8_t *) GWEN_Buffer_GetStart(buf), GWEN_Buffer_GetUsedBytes(buf)); GWEN_Buffer_free(buf); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); return rv; } DBG_INFO(AQEBICS_LOGDOMAIN, "Importing transactions: done"); return 0; } int EBC_Provider_Upload(AB_PROVIDER *pro, AB_USER *u, const char *rtype, const uint8_t *pData, uint32_t lData, int doLock) { EBC_PROVIDER *dp; GWEN_HTTP_SESSION *sess; int rv; EBC_USER_STATUS ust; assert(pro); dp=GWEN_INHERIT_GETDATA(AB_PROVIDER, EBC_PROVIDER, pro); assert(dp); ust=EBC_User_GetStatus(u); if (ust!=EBC_UserStatus_Enabled) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Invalid status \"%s\" of user \"%s\"", EBC_User_Status_toString(ust), AB_User_GetUserId(u)); return GWEN_ERROR_INVALID; } /* create and open session */ sess=EBC_Dialog_new(pro, u); rv=GWEN_HttpSession_Init(sess); if (rv<0) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Could not open session"); GWEN_HttpSession_free(sess); return rv; } /* lock user */ if (doLock) { rv=AB_Provider_BeginExclUseUser(pro, u); if (rv<0) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Could not lock customer"); GWEN_HttpSession_free(sess); return rv; } } /* exchange request and response */ rv=EBC_Provider_XchgUploadRequest(pro, sess, u, rtype, pData, lData); if (rv) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Error exchanging upload request (%d)", rv); if (doLock) AB_Provider_EndExclUseUser(pro, u, 1); GWEN_HttpSession_free(sess); return rv; } /* unlock user */ if (doLock) { rv=AB_Provider_EndExclUseUser(pro, u, 0); if (rv<0) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Could not unlock customer"); AB_Provider_EndExclUseUser(pro, u, 1); GWEN_HttpSession_free(sess); return rv; } } /* close and destroy session */ GWEN_HttpSession_Fini(sess); GWEN_HttpSession_free(sess); return rv; } int EBC_Provider_CreateKeys(AB_PROVIDER *pro, AB_USER *u, int cryptAndAuthKeySizeInBytes, int signKeySizeInBytes, int nounmount) { EBC_PROVIDER *dp; GWEN_CRYPT_TOKEN *ct; const GWEN_CRYPT_TOKEN_CONTEXT *ctx; uint32_t keyId; GWEN_CRYPT_CRYPTALGO *algo; int rv; assert(pro); dp=GWEN_INHERIT_GETDATA(AB_PROVIDER, EBC_PROVIDER, pro); assert(dp); /* get token */ rv=AB_Banking_GetCryptToken(AB_Provider_GetBanking(pro), EBC_User_GetTokenType(u), EBC_User_GetTokenName(u), &ct); if (rv) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Error getting the user's crypt token (%d)", rv); return rv; } GWEN_Crypt_Token_AddModes(ct, GWEN_CRYPT_TOKEN_MODE_EXP_65537); /* create algo */ algo=GWEN_Crypt_CryptAlgo_new(GWEN_Crypt_CryptAlgoId_Rsa, GWEN_Crypt_CryptMode_None); GWEN_Crypt_CryptAlgo_SetChunkSize(algo, cryptAndAuthKeySizeInBytes); /* open token for admin */ if (!GWEN_Crypt_Token_IsOpen(ct)) { rv=GWEN_Crypt_Token_Open(ct, 1, 0); if (rv) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Error opening crypt token (%d)", rv); GWEN_Crypt_CryptAlgo_free(algo); return rv; } } /* get context */ ctx=GWEN_Crypt_Token_GetContext(ct, EBC_User_GetTokenContextId(u), 0); if (ctx==NULL) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Could not get context %d", EBC_User_GetTokenContextId(u)); GWEN_Crypt_CryptAlgo_free(algo); return GWEN_ERROR_INVALID; } DBG_INFO(AQEBICS_LOGDOMAIN, "Creating keys, please wait..."); /* get cipher key id */ keyId=GWEN_Crypt_Token_Context_GetDecipherKeyId(ctx); if (keyId==0) { DBG_ERROR(AQEBICS_LOGDOMAIN, "No decipher key id specified (internal error)"); GWEN_Crypt_CryptAlgo_free(algo); return GWEN_ERROR_INVALID; } /* generate cipher key */ rv=GWEN_Crypt_Token_GenerateKey(ct, keyId, algo, 0); if (rv) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Error generating key (%d)", rv); GWEN_Crypt_CryptAlgo_free(algo); return rv; } /* get auth sign key id */ keyId=GWEN_Crypt_Token_Context_GetAuthSignKeyId(ctx); if (keyId) { /* generate auth sign key */ rv=GWEN_Crypt_Token_GenerateKey(ct, keyId, algo, 0); if (rv) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Error generating key (%d)", rv); GWEN_Crypt_CryptAlgo_free(algo); return rv; } } /* get sign key id */ keyId=GWEN_Crypt_Token_Context_GetSignKeyId(ctx); if (keyId==0) { DBG_ERROR(AQEBICS_LOGDOMAIN, "No sign key id specified (internal error)"); GWEN_Crypt_CryptAlgo_free(algo); return GWEN_ERROR_INVALID; } /* generate sign key */ GWEN_Crypt_CryptAlgo_SetChunkSize(algo, signKeySizeInBytes); rv=GWEN_Crypt_Token_GenerateKey(ct, keyId, algo, 0); if (rv) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Error generating key (%d)", rv); GWEN_Crypt_CryptAlgo_free(algo); return rv; } if (!nounmount) { /* close token */ rv=GWEN_Crypt_Token_Close(ct, 0, 0); if (rv) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Error closing crypt token (%d)", rv); GWEN_Crypt_CryptAlgo_free(algo); return rv; } } GWEN_Crypt_CryptAlgo_free(algo); return 0; } int EBC_Provider_CreateTempKey(AB_PROVIDER *pro, AB_USER *u, int signKeySizeInBytes, int nounmount) { EBC_PROVIDER *dp; GWEN_CRYPT_TOKEN *ct; const GWEN_CRYPT_TOKEN_CONTEXT *ctx; uint32_t keyId; GWEN_CRYPT_CRYPTALGO *algo; int rv; assert(pro); dp=GWEN_INHERIT_GETDATA(AB_PROVIDER, EBC_PROVIDER, pro); assert(dp); /* get token */ rv=AB_Banking_GetCryptToken(AB_Provider_GetBanking(pro), EBC_User_GetTokenType(u), EBC_User_GetTokenName(u), &ct); if (rv) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Error getting the user's crypt token (%d)", rv); return rv; } GWEN_Crypt_Token_AddModes(ct, GWEN_CRYPT_TOKEN_MODE_EXP_65537); /* create algo */ algo=GWEN_Crypt_CryptAlgo_new(GWEN_Crypt_CryptAlgoId_Rsa, GWEN_Crypt_CryptMode_None); /* open token for admin */ if (!GWEN_Crypt_Token_IsOpen(ct)) { rv=GWEN_Crypt_Token_Open(ct, 1, 0); if (rv) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Error opening crypt token (%d)", rv); GWEN_Crypt_CryptAlgo_free(algo); return rv; } } /* get context */ ctx=GWEN_Crypt_Token_GetContext(ct, EBC_User_GetTokenContextId(u), 0); if (ctx==NULL) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Could not get context %d", EBC_User_GetTokenContextId(u)); GWEN_Crypt_CryptAlgo_free(algo); return GWEN_ERROR_INVALID; } DBG_INFO(AQEBICS_LOGDOMAIN, "Creating keys, please wait..."); /* get temp sign key id */ keyId=GWEN_Crypt_Token_Context_GetTempSignKeyId(ctx); if (keyId==0) { DBG_ERROR(AQEBICS_LOGDOMAIN, "No sign key id specified (internal error)"); GWEN_Crypt_CryptAlgo_free(algo); return GWEN_ERROR_INVALID; } /* generate sign key */ GWEN_Crypt_CryptAlgo_SetChunkSize(algo, signKeySizeInBytes); rv=GWEN_Crypt_Token_GenerateKey(ct, keyId, algo, 0); if (rv) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Error generating key (%d)", rv); GWEN_Crypt_CryptAlgo_free(algo); return rv; } if (!nounmount) { /* close token */ rv=GWEN_Crypt_Token_Close(ct, 0, 0); if (rv) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Error closing crypt token (%d)", rv); GWEN_Crypt_CryptAlgo_free(algo); return rv; } } GWEN_Crypt_CryptAlgo_free(algo); return 0; } int EBC_Provider_GetIniLetterTxt(AB_PROVIDER *pro, AB_USER *u, int useBankKey, GWEN_BUFFER *lbuf, int nounmount) { AB_BANKING *ab; const void *p; unsigned int l; GWEN_BUFFER *bbuf; int i; GWEN_TIME *ti; int rv; EBC_PROVIDER *dp; GWEN_CRYPT_TOKEN *ct; const GWEN_CRYPT_TOKEN_CONTEXT *ctx; uint32_t kid; const GWEN_CRYPT_TOKEN_KEYINFO *ki=NULL; const char *signVersion; assert(pro); dp=GWEN_INHERIT_GETDATA(AB_PROVIDER, EBC_PROVIDER, pro); assert(dp); assert(u); ab=AB_Provider_GetBanking(pro); assert(ab); signVersion=EBC_User_GetSignVersion(u); if (!(signVersion && *signVersion)) signVersion="A005"; /* get crypt token and context */ rv=EBC_Provider_MountToken(pro, u, &ct, &ctx); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); return rv; } if (useBankKey) { /* get sign key info */ kid=GWEN_Crypt_Token_Context_GetVerifyKeyId(ctx); if (kid) { ki=GWEN_Crypt_Token_GetKeyInfo(ct, kid, GWEN_CRYPT_TOKEN_KEYFLAGS_HASMODULUS | GWEN_CRYPT_TOKEN_KEYFLAGS_HASEXPONENT | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYVERSION | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYNUMBER, 0); } if (!ki || !(GWEN_Crypt_Token_KeyInfo_GetFlags(ki) & GWEN_CRYPT_TOKEN_KEYFLAGS_HASMODULUS) || !(GWEN_Crypt_Token_KeyInfo_GetFlags(ki) & GWEN_CRYPT_TOKEN_KEYFLAGS_HASEXPONENT)) { kid=GWEN_Crypt_Token_Context_GetEncipherKeyId(ctx); if (kid) { ki=GWEN_Crypt_Token_GetKeyInfo(ct, kid, GWEN_CRYPT_TOKEN_KEYFLAGS_HASMODULUS | GWEN_CRYPT_TOKEN_KEYFLAGS_HASEXPONENT | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYVERSION | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYNUMBER, 0); } } if (!ki || !(GWEN_Crypt_Token_KeyInfo_GetFlags(ki) & GWEN_CRYPT_TOKEN_KEYFLAGS_HASMODULUS) || !(GWEN_Crypt_Token_KeyInfo_GetFlags(ki) & GWEN_CRYPT_TOKEN_KEYFLAGS_HASEXPONENT)) { if (!nounmount) AB_Banking_ClearCryptTokenList(ab); DBG_ERROR(0, "Server keys missing, please get them first"); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("Server keys missing, " "please get them first")); return GWEN_ERROR_NOT_FOUND; } } else { /* get sign key info */ kid=GWEN_Crypt_Token_Context_GetSignKeyId(ctx); if (kid) { ki=GWEN_Crypt_Token_GetKeyInfo(ct, kid, GWEN_CRYPT_TOKEN_KEYFLAGS_HASMODULUS | GWEN_CRYPT_TOKEN_KEYFLAGS_HASEXPONENT | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYVERSION | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYNUMBER, 0); } if (!ki || !(GWEN_Crypt_Token_KeyInfo_GetFlags(ki) & GWEN_CRYPT_TOKEN_KEYFLAGS_HASMODULUS) || !(GWEN_Crypt_Token_KeyInfo_GetFlags(ki) & GWEN_CRYPT_TOKEN_KEYFLAGS_HASEXPONENT)) { if (!nounmount) AB_Banking_ClearCryptTokenList(ab); DBG_ERROR(0, "User keys missing, please generate them first"); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("User keys missing, " "please generate them first")); return GWEN_ERROR_NOT_FOUND; } } /* prelude */ GWEN_Buffer_AppendString(lbuf, I18N("\n\n\nINI-Letter DFUE (")); GWEN_Buffer_AppendString(lbuf, signVersion); GWEN_Buffer_AppendString(lbuf, ")\n\n"); GWEN_Buffer_AppendString(lbuf, I18N("Date : ")); ti=GWEN_CurrentTime(); assert(ti); GWEN_Time_toString(ti, I18N("YYYY/MM/DD"), lbuf); GWEN_Buffer_AppendString(lbuf, "\n"); GWEN_Buffer_AppendString(lbuf, I18N("Time : ")); GWEN_Time_toString(ti, I18N("hh:mm:ss"), lbuf); GWEN_Buffer_AppendString(lbuf, "\n"); if (useBankKey) { GWEN_Buffer_AppendString(lbuf, I18N("Bank Code : ")); GWEN_Buffer_AppendString(lbuf, AB_User_GetBankCode(u)); GWEN_Buffer_AppendString(lbuf, "\n"); } else { const char *sUserId; const char *sCustomerId; sUserId=AB_User_GetUserId(u); sCustomerId=AB_User_GetCustomerId(u); GWEN_Buffer_AppendString(lbuf, I18N("EBICS|User : ")); GWEN_Buffer_AppendString(lbuf, sUserId?sUserId:""); GWEN_Buffer_AppendString(lbuf, "\n"); GWEN_Buffer_AppendString(lbuf, I18N("EBICS|Customer : ")); GWEN_Buffer_AppendString(lbuf, sCustomerId?sCustomerId:""); GWEN_Buffer_AppendString(lbuf, "\n"); } GWEN_Buffer_AppendString(lbuf, I18N("Public key for electronic signature")); GWEN_Buffer_AppendString(lbuf, "\n\n"); GWEN_Buffer_AppendString(lbuf, " "); GWEN_Buffer_AppendString(lbuf, I18N("Exponent")); GWEN_Buffer_AppendString(lbuf, "\n\n"); /* exponent */ p=GWEN_Crypt_Token_KeyInfo_GetExponentData(ki); l=GWEN_Crypt_Token_KeyInfo_GetExponentLen(ki); if (!p || !l) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Bad key."); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("Bad key")); return GWEN_ERROR_BAD_DATA; } bbuf=GWEN_Buffer_new(0, 129, 0, 1); GWEN_Buffer_AppendBytes(bbuf, p, l); GWEN_Buffer_Rewind(bbuf); if (l<128) GWEN_Buffer_FillLeftWithBytes(bbuf, 0, 128-l); p=GWEN_Buffer_GetStart(bbuf); l=GWEN_Buffer_GetUsedBytes(bbuf); for (i=0; i<8; i++) { GWEN_Buffer_AppendString(lbuf, " "); if (GWEN_Text_ToHexBuffer(p, 16, lbuf, 2, ' ', 0)) { DBG_ERROR(0, "Error converting to hex??"); abort(); } p+=16; GWEN_Buffer_AppendString(lbuf, "\n"); } GWEN_Buffer_free(bbuf); /* modulus */ GWEN_Buffer_AppendString(lbuf, "\n"); GWEN_Buffer_AppendString(lbuf, " "); GWEN_Buffer_AppendString(lbuf, I18N("Modulus")); GWEN_Buffer_AppendString(lbuf, "\n\n"); p=GWEN_Crypt_Token_KeyInfo_GetModulusData(ki); l=GWEN_Crypt_Token_KeyInfo_GetModulusLen(ki); if (!p || !l) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Bad key."); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("Bad key")); return GWEN_ERROR_BAD_DATA; } bbuf=GWEN_Buffer_new(0, 129, 0, 1); GWEN_Buffer_AppendBytes(bbuf, p, l); GWEN_Buffer_Rewind(bbuf); if (l<128) GWEN_Buffer_FillLeftWithBytes(bbuf, 0, 128-l); p=GWEN_Buffer_GetStart(bbuf); l=GWEN_Buffer_GetUsedBytes(bbuf); for (i=0; i<8; i++) { GWEN_Buffer_AppendString(lbuf, " "); if (GWEN_Text_ToHexBuffer(p, 16, lbuf, 2, ' ', 0)) { DBG_ERROR(0, "Error converting to hex??"); abort(); } p+=16; GWEN_Buffer_AppendString(lbuf, "\n"); } GWEN_Buffer_free(bbuf); GWEN_Buffer_AppendString(lbuf, "\n"); GWEN_Buffer_AppendString(lbuf, " "); GWEN_Buffer_AppendString(lbuf, I18N("Hash")); GWEN_Buffer_AppendString(lbuf, "\n\n"); bbuf=GWEN_Buffer_new(0, 21, 0, 1); if (strcasecmp(signVersion, "A004")==0) { rv=EB_Key_Info_BuildSigHash_Rmd160(ki, bbuf); if (rv<0) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Error hashing (%d)", rv); abort(); } p=GWEN_Buffer_GetStart(bbuf); l=GWEN_Buffer_GetUsedBytes(bbuf); for (i=0; i<2; i++) { GWEN_Buffer_AppendString(lbuf, " "); if (GWEN_Text_ToHexBuffer(p, 10, lbuf, 2, ' ', 0)) { DBG_ERROR(0, "Error converting to hex??"); abort(); } p+=10; GWEN_Buffer_AppendString(lbuf, "\n"); } } else { rv=EB_Key_Info_BuildSigHash_Sha256(ki, bbuf); if (rv<0) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Error hashing (%d)", rv); abort(); } p=GWEN_Buffer_GetStart(bbuf); l=GWEN_Buffer_GetUsedBytes(bbuf); for (i=0; i<2; i++) { GWEN_Buffer_AppendString(lbuf, " "); if (GWEN_Text_ToHexBuffer(p, 16, lbuf, 2, ' ', 0)) { DBG_ERROR(0, "Error converting to hex??"); abort(); } p+=16; GWEN_Buffer_AppendString(lbuf, "\n"); } } GWEN_Buffer_free(bbuf); if (!useBankKey) { GWEN_Buffer_AppendString(lbuf, "\n\n"); GWEN_Buffer_AppendString(lbuf, I18N("I confirm that I created the above key " "for my electronic signature.\n")); GWEN_Buffer_AppendString(lbuf, "\n\n"); GWEN_Buffer_AppendString(lbuf, I18N("____________________________ " "____________________________\n" "Place, date " "Signature\n")); } return 0; } int EBC_Provider__addKiTxt(GWEN_UNUSED AB_PROVIDER *pro, const GWEN_CRYPT_TOKEN_KEYINFO *ki, GWEN_BUFFER *lbuf, int version) { const uint8_t *p; unsigned int l; unsigned int nl; GWEN_BUFFER *bbuf; int i; int rv; GWEN_Buffer_AppendString(lbuf, " "); GWEN_Buffer_AppendString(lbuf, I18N("Exponent")); GWEN_Buffer_AppendString(lbuf, "\n\n"); /* exponent */ p=GWEN_Crypt_Token_KeyInfo_GetExponentData(ki); l=GWEN_Crypt_Token_KeyInfo_GetExponentLen(ki); if (!p || !l) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Bad key."); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("Bad key")); return GWEN_ERROR_BAD_DATA; } /* skip null bytes */ while (*p==0 && l>1) { p++; l--; } /* fill to next multiple of 16 */ nl=((l+15)/16)*16; bbuf=GWEN_Buffer_new(0, nl+1, 0, 1); if (l>$(top_srcdir)/i18nsources; \ done cppcheck: for f in $(libclient_la_SOURCES); do \ cppcheck --force $$f ; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done aqbanking-6.6.1/src/libs/plugins/backends/aqebics/client/account_l.h0000664000175000017500000000124114043610744022363 00000000000000/*************************************************************************** begin : Wed May 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef EBC_CLIENT_ACCOUNT_L_H #define EBC_CLIENT_ACCOUNT_L_H #include "aqebics/client/account.h" #include AB_ACCOUNT *EBC_Account_new(AB_PROVIDER *pro); #endif /* EBC_CLIENT_ACCOUNT_L_H */ aqbanking-6.6.1/src/libs/plugins/backends/aqebics/client/provider.c0000664000175000017500000007100714043610744022250 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "provider_p.h" #include "aqebics/aqebics_l.h" #include "aqebics/client/user_l.h" #include "aqebics/client/account_l.h" #include "aqebics/requests/r_ini_l.h" #include "aqebics/msg/xml.h" #include "aqebics/msg/keys.h" #include "aqebics/dialogs/dlg_edituser_l.h" #include "aqebics/dialogs/dlg_newkeyfile_l.h" #include "aqebics/control/control_l.h" #include "aqbanking/backendsupport/provider_be.h" #include "aqbanking/backendsupport/account.h" #include "aqbanking/backendsupport/httpsession.h" #include #include #include #include #include #include #include #include GWEN_INHERIT(AB_PROVIDER, EBC_PROVIDER) AB_PROVIDER *EBC_Provider_new(AB_BANKING *ab) { AB_PROVIDER *pro; EBC_PROVIDER *dp; pro=AB_Provider_new(ab, "aqebics"); GWEN_NEW_OBJECT(EBC_PROVIDER, dp); GWEN_INHERIT_SETDATA(AB_PROVIDER, EBC_PROVIDER, pro, dp, EBC_Provider_FreeData); AB_Provider_SetInitFn(pro, EBC_Provider_Init); AB_Provider_SetFiniFn(pro, EBC_Provider_Fini); AB_Provider_SetSendCommandsFn(pro, EBC_Provider_SendCommands); AB_Provider_SetCreateAccountObjectsFn(pro, EBC_Provider_CreateAccountObject); AB_Provider_SetCreateUserObjectsFn(pro, EBC_Provider_CreateUserObject); AB_Provider_SetUpdateAccountSpecFn(pro, EBC_Provider_UpdateAccountSpec); AB_Provider_SetControlFn(pro, EBC_Control); AB_Provider_SetGetEditUserDialogFn(pro, EBC_Provider_GetEditUserDialog); AB_Provider_AddFlags(pro, AB_PROVIDER_FLAGS_HAS_EDITUSER_DIALOG); AB_Provider_SetGetNewUserDialogFn(pro, EBC_Provider_GetNewUserDialog); AB_Provider_AddFlags(pro, AB_PROVIDER_FLAGS_HAS_NEWUSER_DIALOG); return pro; } void GWENHYWFAR_CB EBC_Provider_FreeData(GWEN_UNUSED void *bp, void *p) { EBC_PROVIDER *dp; dp=(EBC_PROVIDER *)p; assert(dp); GWEN_FREE_OBJECT(dp); } int EBC_Provider_GetConnectTimeout(const AB_PROVIDER *pro) { EBC_PROVIDER *dp; assert(pro); dp=GWEN_INHERIT_GETDATA(AB_PROVIDER, EBC_PROVIDER, pro); assert(dp); return dp->connectTimeout; } int EBC_Provider_GetTransferTimeout(const AB_PROVIDER *pro) { EBC_PROVIDER *dp; assert(pro); dp=GWEN_INHERIT_GETDATA(AB_PROVIDER, EBC_PROVIDER, pro); assert(dp); return dp->transferTimeout; } int EBC_Provider_Init(AB_PROVIDER *pro, GWEN_DB_NODE *dbData) { EBC_PROVIDER *dp; const char *logLevelName; assert(pro); dp=GWEN_INHERIT_GETDATA(AB_PROVIDER, EBC_PROVIDER, pro); assert(dp); if (!GWEN_Logger_IsOpen(AQEBICS_LOGDOMAIN)) { GWEN_Logger_Open(AQEBICS_LOGDOMAIN, "aqebics", 0, GWEN_LoggerType_Console, GWEN_LoggerFacility_User); } logLevelName=getenv("AQEBICS_LOGLEVEL"); if (logLevelName) { GWEN_LOGGER_LEVEL ll; ll=GWEN_Logger_Name2Level(logLevelName); if (ll!=GWEN_LoggerLevel_Unknown) { GWEN_Logger_SetLevel(AQEBICS_LOGDOMAIN, ll); DBG_WARN(AQEBICS_LOGDOMAIN, "Overriding loglevel for AqEBICS with \"%s\"", logLevelName); } else { DBG_ERROR(AQEBICS_LOGDOMAIN, "Unknown loglevel \"%s\"", logLevelName); } } DBG_NOTICE(AQEBICS_LOGDOMAIN, "Initializing AqEBICS backend"); dp->connectTimeout=GWEN_DB_GetIntValue(dbData, "connectTimeout", 0, EBC_DEFAULT_CONNECT_TIMEOUT); dp->transferTimeout=GWEN_DB_GetIntValue(dbData, "transferTimeout", 0, EBC_DEFAULT_TRANSFER_TIMEOUT); return 0; } int EBC_Provider_Fini(AB_PROVIDER *pro, GWEN_DB_NODE *dbData) { EBC_PROVIDER *dp; uint32_t currentVersion; DBG_NOTICE(AQEBICS_LOGDOMAIN, "Deinitializing AqEBICS backend"); assert(pro); dp=GWEN_INHERIT_GETDATA(AB_PROVIDER, EBC_PROVIDER, pro); assert(dp); currentVersion= (AQBANKING_VERSION_MAJOR<<24) | (AQBANKING_VERSION_MINOR<<16) | (AQBANKING_VERSION_PATCHLEVEL<<8) | AQBANKING_VERSION_BUILD; /* save configuration */ DBG_NOTICE(AQEBICS_LOGDOMAIN, "Setting version %08x", currentVersion); GWEN_DB_SetIntValue(dbData, GWEN_DB_FLAGS_OVERWRITE_VARS, "lastVersion", currentVersion); GWEN_DB_SetIntValue(dbData, GWEN_DB_FLAGS_OVERWRITE_VARS, "connectTimeout", dp->connectTimeout); GWEN_DB_SetIntValue(dbData, GWEN_DB_FLAGS_OVERWRITE_VARS, "transferTimeout", dp->transferTimeout); return 0; } #if 0 int EBC_Provider_UpdateJob(AB_PROVIDER *pro, AB_JOB *j) { EBC_PROVIDER *dp; AB_ACCOUNT *a; AB_USER *u; assert(pro); dp=GWEN_INHERIT_GETDATA(AB_PROVIDER, EBC_PROVIDER, pro); assert(dp); a=AB_Job_GetAccount(j); assert(a); u=AB_Account_GetFirstUser(a); if (u==NULL) { DBG_ERROR(AQEBICS_LOGDOMAIN, "No user assigned to this account."); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("No user assigned to this account.")); GWEN_Gui_ShowError(I18N("Setup Error"), I18N("No user assigned to this account. Please assign one in the online banking setup dialog " "for this account.\n")); return GWEN_ERROR_INTERNAL; } switch (AB_Job_GetType(j)) { case AB_Job_TypeTransfer: { AB_TRANSACTION_LIMITS *lim; lim=AB_TransactionLimits_new(); AB_TransactionLimits_SetMaxLenPurpose(lim, 27); AB_TransactionLimits_SetMaxLenRemoteName(lim, 27); AB_TransactionLimits_SetMaxLinesPurpose(lim, 2); AB_Job_SetFieldLimits(j, lim); AB_TransactionLimits_free(lim); break; } case AB_Job_TypeDebitNote: { AB_TRANSACTION_LIMITS *lim; lim=AB_TransactionLimits_new(); AB_TransactionLimits_SetMaxLenPurpose(lim, 27); AB_TransactionLimits_SetMaxLenRemoteName(lim, 27); AB_TransactionLimits_SetMaxLinesPurpose(lim, 2); AB_Job_SetFieldLimits(j, lim); AB_TransactionLimits_free(lim); break; } case AB_Job_TypeGetTransactions: break; case AB_Job_TypeGetBalance: default: DBG_INFO(AQEBICS_LOGDOMAIN, "Job not yet supported (%d)", AB_Job_GetType(j)); return GWEN_ERROR_NOT_SUPPORTED; } /* switch */ return 0; } #endif GWEN_DIALOG *EBC_Provider_GetEditUserDialog(AB_PROVIDER *pro, AB_USER *u) { EBC_PROVIDER *xp; GWEN_DIALOG *dlg; assert(pro); xp=GWEN_INHERIT_GETDATA(AB_PROVIDER, EBC_PROVIDER, pro); assert(xp); dlg=EBC_EditUserDialog_new(pro, u, 1); if (dlg==NULL) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (no dialog)"); return NULL; } return dlg; } GWEN_DIALOG *EBC_Provider_GetNewUserDialog(AB_PROVIDER *pro, int i) { EBC_PROVIDER *xp; GWEN_DIALOG *dlg; assert(pro); xp=GWEN_INHERIT_GETDATA(AB_PROVIDER, EBC_PROVIDER, pro); assert(xp); dlg=EBC_NewKeyFileDialog_new(pro); if (dlg==NULL) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (no dialog)"); return NULL; } return dlg; } AB_ACCOUNT *EBC_Provider_CreateAccountObject(AB_PROVIDER *pro) { return EBC_Account_new(pro); } AB_USER *EBC_Provider_CreateUserObject(AB_PROVIDER *pro) { return EBC_User_new(pro); } int EBC_Provider_MountToken(AB_PROVIDER *pro, AB_USER *u, GWEN_CRYPT_TOKEN **pCt, const GWEN_CRYPT_TOKEN_CONTEXT **pCtx) { EBC_PROVIDER *dp; int rv; GWEN_CRYPT_TOKEN *ct; const GWEN_CRYPT_TOKEN_CONTEXT *ctx; assert(pro); dp=GWEN_INHERIT_GETDATA(AB_PROVIDER, EBC_PROVIDER, pro); assert(dp); /* get crypt token of signer */ rv=AB_Banking_GetCryptToken(AB_Provider_GetBanking(pro), EBC_User_GetTokenType(u), EBC_User_GetTokenName(u), &ct); if (rv) { DBG_INFO(AQEBICS_LOGDOMAIN, "Could not get crypt token for user \"%s\" (%d)", AB_User_GetUserId(u), rv); return rv; } /* make sure the right flags are set */ DBG_INFO(AQEBICS_LOGDOMAIN, "Adding mode \"direct sign\" to CryptToken"); GWEN_Crypt_Token_AddModes(ct, GWEN_CRYPT_TOKEN_MODE_DIRECT_SIGN); /* open CryptToken if necessary */ if (!GWEN_Crypt_Token_IsOpen(ct)) { rv=GWEN_Crypt_Token_Open(ct, 0, 0); if (rv) { DBG_INFO(AQEBICS_LOGDOMAIN, "Could not open crypt token for user \"%s\" (%d)", AB_User_GetUserId(u), rv); return rv; } } /* get context and key info */ ctx=GWEN_Crypt_Token_GetContext(ct, EBC_User_GetTokenContextId(u), 0); if (ctx==NULL) { DBG_INFO(AQEBICS_LOGDOMAIN, "Context %d not found on crypt token [%s:%s]", EBC_User_GetTokenContextId(u), GWEN_Crypt_Token_GetTypeName(ct), GWEN_Crypt_Token_GetTokenName(ct)); return GWEN_ERROR_NOT_FOUND; } *pCt=ct; *pCtx=ctx; return 0; } int EBC_Provider_GenerateNonce(GWEN_UNUSED AB_PROVIDER *pro, GWEN_BUFFER *buf) { int rv; uint8_t rbuf[16]; GWEN_Crypt_Random(2, rbuf, sizeof(rbuf)); rv=GWEN_Text_ToHexBuffer((const char *)rbuf, sizeof(rbuf), buf, 0, 0, 0); if (rv) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Could not convert NONCE to hex (%d)", rv); return rv; } DBG_DEBUG(AQEBICS_LOGDOMAIN, "Generated NONCE [%s]", GWEN_Buffer_GetStart(buf)); return 0; } int EBC_Provider_GenerateTimeStamp(GWEN_UNUSED AB_PROVIDER *pro, AB_USER *u, GWEN_BUFFER *buf) { char timestamp[40]; time_t ti; struct tm *t; ti=time(0); /* if (EBC_User_GetFlags(u) & EBC_USER_FLAGS_TIMESTAMP_FIX1) { */ t=gmtime(&ti); snprintf(timestamp, sizeof(timestamp)-1, "%04d-%02d-%02dT%02d:%02d:%02d.000Z", t->tm_year+1900, t->tm_mon+1, t->tm_mday, t->tm_hour, t->tm_min, t->tm_sec); timestamp[sizeof(timestamp)-1]=0; DBG_DEBUG(AQEBICS_LOGDOMAIN, "Generated timestamp [%s]", timestamp); GWEN_Buffer_AppendString(buf, timestamp); /* } else { int thzone; t=localtime(&ti); thzone=-timezone/60; if (t->tm_isdst>0) thzone+=60; snprintf(timestamp, sizeof(timestamp)-1, "%04d-%02d-%02dT%02d:%02d:%02d.000%+03d:%02d", t->tm_year+1900, t->tm_mon+1, t->tm_mday, t->tm_hour, t->tm_min, t->tm_sec, (int)(thzone/60), abs(thzone%60)); timestamp[sizeof(timestamp)-1]=0; DBG_DEBUG(AQEBICS_LOGDOMAIN, "Generated timestamp [%s] (tz=%d, daylight=%d)", timestamp, (int)timezone, t->tm_isdst); GWEN_Buffer_AppendString(buf, timestamp); } */ return 0; } int EBC_Provider_Generate_OrderId(AB_PROVIDER *pro, GWEN_BUFFER *buf) { uint32_t id; char rbuf[4]; char c; uint32_t j; GWEN_Buffer_AllocRoom(buf, 4); id=AB_Banking_GetNamedUniqueId(AB_Provider_GetBanking(pro), "orderId", 1); if (id==0) return GWEN_ERROR_IO; rbuf[3]=id%36; j=id/36; rbuf[2]=j%36; j/=36; rbuf[1]=j%36; j/=36; rbuf[0]=j%26; c=rbuf[0]; c+='A'; GWEN_Buffer_AppendByte(buf, c); c=rbuf[1]; if (c<10) c+='0'; else c+='A'-10; GWEN_Buffer_AppendByte(buf, c); c=rbuf[2]; if (c<10) c+='0'; else c+='A'-10; GWEN_Buffer_AppendByte(buf, c); c=rbuf[3]; if (c<10) c+='0'; else c+='A'-10; GWEN_Buffer_AppendByte(buf, c); return 0; } GWEN_LOGGER_LEVEL EBC_Provider_ResultCodeToLogLevel(GWEN_UNUSED AB_PROVIDER *pro, const char *s) { if (strlen(s)!=6) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Invalid error code [%s]", s); return GWEN_LoggerLevel_Error; } else { uint8_t c; GWEN_LOGGER_LEVEL lev; c=s[1]-'0'; switch (c) { case 0: lev=GWEN_LoggerLevel_Info; break; case 1: lev=GWEN_LoggerLevel_Notice; break; case 3: lev=GWEN_LoggerLevel_Warning; break; case 6: case 9: default: lev=GWEN_LoggerLevel_Error; break; } return lev; } } const char *EBC_Provider_TechnicalCodeToString(const char *s) { unsigned int code; if (sscanf(s, "%u", &code)!=1) return NULL; switch (code) { case 0 : return I18N("Ok"); case 11000: return I18N("Download postproces done"); case 11001: return I18N("Download postproces skipped"); case 11101: return I18N("TX segment number underrun"); case 31001: return I18N("Order params ignored"); case 61001: return I18N("Authentication failed"); case 61002: return I18N("Invalid request"); case 61099: return I18N("Internal error"); case 61101: return I18N("TX recovery sync"); case 91002: return I18N("Invalid user or invalid user state"); case 91003: return I18N("User unknown"); case 91004: return I18N("Invalid user state"); case 91005: return I18N("Invalid order type"); case 91006: return I18N("Unsupported order type"); case 91007: return I18N("Distributed signature authorisation failed"); case 91008: return I18N("Bank pubkey update required"); case 91009: return I18N("Segment size exceeded"); case 91010: return I18N("Invalid XML"); case 91101: return I18N("TX unknown transaction id"); case 91102: return I18N("TX abort"); case 91103: return I18N("TX message replay"); case 91104: return I18N("TX segment number exceeded"); case 91112: return I18N("Invalid order params"); case 91113: return I18N("Invalid request content"); case 91117: return I18N("Max order data size exceeded"); case 91118: return I18N("Max segments exceeded"); case 91119: return I18N("Max transactions exceeded"); case 91120: return I18N("Partner id mismatch"); case 91121: return I18N("Incompatible order attribute"); default: return NULL; } } const char *EBC_Provider_BankCodeToString(const char *s) { unsigned int code; if (sscanf(s, "%u", &code)!=1) return NULL; switch (code) { case 0 : return I18N("Ok"); case 11301: return I18N("No online checks"); case 91001: return I18N("Download signed only"); case 91002: return I18N("Download unsigned only"); case 90003: return I18N("Authorisation failed"); case 90004: return I18N("Invalid order data format"); case 90005: return I18N("No download data available"); case 90006: return I18N("Unsupported request for order instance"); case 91105: return I18N("Recovery not supported"); case 91111: return I18N("Invalid signature file format"); case 91114: return I18N("Order id unknown"); case 91115: return I18N("Order id already exists"); case 91116: return I18N("Processing error"); case 91201: return I18N("Keymgmt unsupported version of signature"); case 91202: return I18N("Keymgmt unsupported version of authentication"); case 91203: return I18N("Keymgmt unsupported version of encryption"); case 91204: return I18N("Keymgmt keylength error in signature"); case 91205: return I18N("Keymgmt keylength error in authentication"); case 91206: return I18N("Keymgmt keylength error in encryption"); case 91207: return I18N("Keymgmt no X509 support"); case 91301: return I18N("Signature verification failed"); case 91302: return I18N("Account authorisation failed"); case 91303: return I18N("Amount check failed"); case 91304: return I18N("Signer unknown"); case 91305: return I18N("Invalid signer state"); case 91306: return I18N("Duplicate signature"); default: return NULL; } } void EBC_Provider_LogRequestResults(AB_PROVIDER *pro, EB_MSG *mRsp, GWEN_BUFFER *logbuf) { const char *tcode; const char *bcode; const char *s; GWEN_BUFFER *tbuf; tcode=EB_Msg_GetCharValue(mRsp, "header/mutable/ReturnCode", NULL); bcode=EB_Msg_GetCharValue(mRsp, "body/ReturnCode", NULL); tbuf=GWEN_Buffer_new(0, 256, 0, 1); if (tcode) { GWEN_Buffer_AppendString(tbuf, I18N("EBICS (Technical Code):")); GWEN_Buffer_AppendString(tbuf, " "); GWEN_Buffer_AppendString(tbuf, tcode); s=EBC_Provider_TechnicalCodeToString(tcode); if (s) { GWEN_Buffer_AppendString(tbuf, " ["); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "]"); } if (logbuf) { GWEN_Buffer_AppendString(logbuf, "\t"); GWEN_Buffer_AppendBuffer(logbuf, tbuf); } GWEN_Gui_ProgressLog(0, EBC_Provider_ResultCodeToLogLevel(pro, tcode), GWEN_Buffer_GetStart(tbuf)); DBG_INFO(AQEBICS_LOGDOMAIN, "%s", GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_Reset(tbuf); } s=EB_Msg_GetCharValue(mRsp, "header/mutable/ReportText", NULL); if (s) { GWEN_Buffer_AppendString(tbuf, I18N("EBICS (Technical Report):")); GWEN_Buffer_AppendString(tbuf, " "); GWEN_Buffer_AppendString(tbuf, s); if (logbuf) { GWEN_Buffer_AppendString(logbuf, "\t"); GWEN_Buffer_AppendBuffer(logbuf, tbuf); } GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Notice, GWEN_Buffer_GetStart(tbuf)); DBG_INFO(AQEBICS_LOGDOMAIN, "%s", GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_Reset(tbuf); } s=EB_Msg_GetCharValue(mRsp, "body/ReturnCode", NULL); if (bcode) { GWEN_Buffer_AppendString(tbuf, I18N("EBICS (Bank Code):")); GWEN_Buffer_AppendString(tbuf, " "); GWEN_Buffer_AppendString(tbuf, bcode); s=EBC_Provider_BankCodeToString(bcode); if (s) { GWEN_Buffer_AppendString(tbuf, " ["); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "]"); } if (logbuf) { GWEN_Buffer_AppendString(logbuf, "\t"); GWEN_Buffer_AppendBuffer(logbuf, tbuf); } GWEN_Gui_ProgressLog(0, EBC_Provider_ResultCodeToLogLevel(pro, bcode), GWEN_Buffer_GetStart(tbuf)); DBG_INFO(AQEBICS_LOGDOMAIN, "%s", GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_Reset(tbuf); } GWEN_Buffer_free(tbuf); } int EBC_Provider_AddBankPubKeyDigests(AB_PROVIDER *pro, AB_USER *u, xmlNodePtr node) { EBC_PROVIDER *dp; int rv; GWEN_CRYPT_TOKEN *ct; const GWEN_CRYPT_TOKEN_CONTEXT *ctx; const GWEN_CRYPT_TOKEN_KEYINFO *ki; uint32_t keyId; GWEN_BUFFER *hbuf; xmlNodePtr nodeX = NULL; const char *s; assert(pro); dp=GWEN_INHERIT_GETDATA(AB_PROVIDER, EBC_PROVIDER, pro); assert(dp); /* get crypt token and context */ rv=EBC_Provider_MountToken(pro, u, &ct, &ctx); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); return rv; } /* get key id for server auth key */ keyId=GWEN_Crypt_Token_Context_GetAuthVerifyKeyId(ctx); ki=GWEN_Crypt_Token_GetKeyInfo(ct, keyId, 0xffffffff, 0); if (ki==NULL) { DBG_INFO(AQEBICS_LOGDOMAIN, "Keyinfo %04x not found on crypt token [%s:%s]", keyId, GWEN_Crypt_Token_GetTypeName(ct), GWEN_Crypt_Token_GetTokenName(ct)); GWEN_Crypt_Token_Close(ct, 0, 0); return GWEN_ERROR_NOT_FOUND; } s=EBC_User_GetAuthVersion(u); DBG_ERROR(0, "Auth Version: %s\n", s); if (!(s && *s)) s="X001"; if (strcasecmp(s, "X001")==0) { hbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=EB_Key_Info_BuildHashSha1(ki, hbuf, 1); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(hbuf); GWEN_Crypt_Token_Close(ct, 0, 0); return rv; } nodeX=xmlNewTextChild(node, NULL, BAD_CAST "Authentication", BAD_CAST GWEN_Buffer_GetStart(hbuf)); GWEN_Buffer_free(hbuf); assert(nodeX); xmlNewProp(nodeX, BAD_CAST "Version", BAD_CAST "X001"); xmlNewProp(nodeX, BAD_CAST "Algorithm", BAD_CAST "http://www.w3.org/2000/09/xmldsig#sha1"); } else if (strcasecmp(s, "X002")==0) { hbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=EB_Key_Info_BuildHashSha256(ki, hbuf, 1); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(hbuf); GWEN_Crypt_Token_Close(ct, 0, 0); return rv; } nodeX=xmlNewTextChild(node, NULL, BAD_CAST "Authentication", BAD_CAST GWEN_Buffer_GetStart(hbuf)); GWEN_Buffer_free(hbuf); assert(nodeX); xmlNewProp(nodeX, BAD_CAST "Version", BAD_CAST "X002"); xmlNewProp(nodeX, BAD_CAST "Algorithm", BAD_CAST "http://www.w3.org/2001/04/xmlenc#sha256"); } else { DBG_ERROR(AQEBICS_LOGDOMAIN, "Unsupported auth version [%s]", s); GWEN_Crypt_Token_Close(ct, 0, 0); return GWEN_ERROR_INTERNAL; } /* get key id for server crypt key */ keyId=GWEN_Crypt_Token_Context_GetEncipherKeyId(ctx); ki=GWEN_Crypt_Token_GetKeyInfo(ct, keyId, 0xffffffff, 0); if (ki==NULL) { DBG_INFO(AQEBICS_LOGDOMAIN, "Keyinfo %04x not found on crypt token [%s:%s]", keyId, GWEN_Crypt_Token_GetTypeName(ct), GWEN_Crypt_Token_GetTokenName(ct)); GWEN_Crypt_Token_Close(ct, 0, 0); return GWEN_ERROR_NOT_FOUND; } s=EBC_User_GetCryptVersion(u); if (!(s && *s)) s="E001"; if (strcasecmp(s, "E001")==0) { hbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=EB_Key_Info_BuildHashSha1(ki, hbuf, 1); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(hbuf); GWEN_Crypt_Token_Close(ct, 0, 0); return rv; } nodeX=xmlNewTextChild(node, NULL, BAD_CAST "Encryption", BAD_CAST GWEN_Buffer_GetStart(hbuf)); GWEN_Buffer_free(hbuf); assert(nodeX); xmlNewProp(nodeX, BAD_CAST "Version", BAD_CAST "E001"); xmlNewProp(nodeX, BAD_CAST "Algorithm", BAD_CAST "http://www.w3.org/2000/09/xmldsig#sha1"); } else if (strcasecmp(s, "E002")==0) { hbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=EB_Key_Info_BuildHashSha256(ki, hbuf, 1); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(hbuf); GWEN_Crypt_Token_Close(ct, 0, 0); return rv; } nodeX=xmlNewTextChild(node, NULL, BAD_CAST "Encryption", BAD_CAST GWEN_Buffer_GetStart(hbuf)); GWEN_Buffer_free(hbuf); assert(nodeX); xmlNewProp(nodeX, BAD_CAST "Version", BAD_CAST "E002"); xmlNewProp(nodeX, BAD_CAST "Algorithm", BAD_CAST "http://www.w3.org/2001/04/xmlenc#sha256"); } else { DBG_ERROR(AQEBICS_LOGDOMAIN, "Unsupported crypt version [%s]", s); GWEN_Crypt_Token_Close(ct, 0, 0); return GWEN_ERROR_INTERNAL; } return 0; } int EBC_Provider_FillDataEncryptionInfoNode(AB_PROVIDER *pro, AB_USER *u, const GWEN_CRYPT_KEY *skey, xmlNodePtr node) { EBC_PROVIDER *dp; int rv; GWEN_CRYPT_TOKEN *ct; const GWEN_CRYPT_TOKEN_CONTEXT *ctx; const GWEN_CRYPT_TOKEN_KEYINFO *ki; uint32_t keyId; GWEN_BUFFER *hbuf; xmlNodePtr nodeX = NULL; const char *s; assert(pro); dp=GWEN_INHERIT_GETDATA(AB_PROVIDER, EBC_PROVIDER, pro); assert(dp); /* get crypt token and context */ rv=EBC_Provider_MountToken(pro, u, &ct, &ctx); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); return rv; } /* get key id for server crypt key */ keyId=GWEN_Crypt_Token_Context_GetEncipherKeyId(ctx); ki=GWEN_Crypt_Token_GetKeyInfo(ct, keyId, 0xffffffff, 0); if (ki==NULL) { DBG_INFO(AQEBICS_LOGDOMAIN, "Keyinfo %04x not found on crypt token [%s:%s]", keyId, GWEN_Crypt_Token_GetTypeName(ct), GWEN_Crypt_Token_GetTokenName(ct)); GWEN_Crypt_Token_Close(ct, 0, 0); return GWEN_ERROR_NOT_FOUND; } hbuf=GWEN_Buffer_new(0, 256, 0, 1); s=EBC_User_GetCryptVersion(u); if (!(s && *s)) s="E001"; if (strcasecmp(s, "E001")==0) { rv=EB_Key_Info_BuildHashSha1(ki, hbuf, 1); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(hbuf); GWEN_Crypt_Token_Close(ct, 0, 0); return rv; } nodeX=xmlNewTextChild(node, NULL, BAD_CAST "EncryptionPubKeyDigest", BAD_CAST GWEN_Buffer_GetStart(hbuf)); GWEN_Buffer_free(hbuf); assert(nodeX); xmlNewProp(nodeX, BAD_CAST "Version", BAD_CAST "E001"); xmlNewProp(nodeX, BAD_CAST "Algorithm", BAD_CAST "http://www.w3.org/2000/09/xmldsig#sha1"); } else if (strcasecmp(s, "E002")==0) { rv=EB_Key_Info_BuildHashSha256(ki, hbuf, 1); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(hbuf); GWEN_Crypt_Token_Close(ct, 0, 0); return rv; } nodeX=xmlNewTextChild(node, NULL, BAD_CAST "EncryptionPubKeyDigest", BAD_CAST GWEN_Buffer_GetStart(hbuf)); GWEN_Buffer_free(hbuf); assert(nodeX); xmlNewProp(nodeX, BAD_CAST "Version", BAD_CAST "E002"); xmlNewProp(nodeX, BAD_CAST "Algorithm", BAD_CAST "http://www.w3.org/2001/04/xmlenc#sha256"); } /* add encrypted transactio key */ hbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=EBC_Provider_EncryptKey(pro, u, skey, hbuf); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(hbuf); GWEN_Crypt_Token_Close(ct, 0, 0); return rv; } nodeX=xmlNewTextChild(node, NULL, BAD_CAST "TransactionKey", BAD_CAST GWEN_Buffer_GetStart(hbuf)); GWEN_Buffer_free(hbuf); assert(nodeX); return 0; } int EBC_Provider_GetCert(AB_PROVIDER *pro, AB_USER *u) { GWEN_HTTP_SESSION *sess; int rv; AB_BANKING *ab; sess=EBC_Dialog_new(pro, u); ab=AB_Provider_GetBanking(pro); assert(ab); /* create and open session */ sess=EBC_Dialog_new(pro, u); rv=GWEN_HttpSession_Init(sess); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "Could not open session"); GWEN_HttpSession_free(sess); return rv; } /* try to connect */ rv=GWEN_HttpSession_ConnectionTest(sess); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "Could not connect to server"); GWEN_HttpSession_free(sess); return rv; } GWEN_HttpSession_Fini(sess); GWEN_HttpSession_free(sess); return 0; } int EBC_Provider_DecodeAndDecryptData(AB_PROVIDER *pro, AB_USER *u, GWEN_CRYPT_KEY *skey, const char *sEncryptedData, GWEN_BUFFER *targetBuffer) { GWEN_BUFFER *buf1; int rv; /* BASE64-decode receiced data */ buf1=GWEN_Buffer_new(0, strlen(sEncryptedData), 0, 1); rv=GWEN_Base64_Decode((const uint8_t *)sEncryptedData, 0, buf1); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "Could not decode OrderData (%d)", rv); GWEN_Buffer_free(buf1); return rv; } /* decrypt/unzip data */ rv=EBC_Provider_DecryptData(pro, u, skey, (const uint8_t *)GWEN_Buffer_GetStart(buf1), GWEN_Buffer_GetUsedBytes(buf1), targetBuffer); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "Could not decrypt OrderData (%d)", rv); GWEN_Buffer_free(buf1); return rv; } GWEN_Buffer_free(buf1); /*DBG_ERROR(0, "Got this data:"); GWEN_Buffer_Dump(targetBuffer, stderr, 2);*/ return 0; } #include "provider_sendcmd.c" #include "provider_accspec.c" #include "p_sign_x001.c" #include "p_sign_x002.c" #include "p_sign.c" #include "p_decipher.c" #include "p_encipher_e001.c" #include "p_encipher_e002.c" #include "p_encipher.c" #include "p_eu_a004.c" #include "p_eu_a005.c" #include "p_eu.c" #include "p_tools.c" aqbanking-6.6.1/src/libs/plugins/backends/aqebics/client/account.h0000664000175000017500000000317014043610744022053 00000000000000/*************************************************************************** begin : Wed May 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef EBC_CLIENT_ACCOUNT_H #define EBC_CLIENT_ACCOUNT_H #include "aqebics/aqebics.h" #include #include #include #ifdef __cplusplus extern "C" { #endif #define EBC_ACCOUNT_FLAGS_STA_SPP 0x00000001 #define EBC_ACCOUNT_FLAGS_IZV_SPP 0x00000002 AQEBICS_API void EBC_Account_Flags_toDb(GWEN_DB_NODE *db, const char *name, uint32_t flags); AQEBICS_API uint32_t EBC_Account_Flags_fromDb(GWEN_DB_NODE *db, const char *name); AQEBICS_API const char *EBC_Account_GetEbicsId(const AB_ACCOUNT *a); AQEBICS_API void EBC_Account_SetEbicsId(AB_ACCOUNT *a, const char *s); /** * Returns 0 if the bank doesn't sign messages, 1 otherwise. * This can be used in case the bank sends a sign key upon request but * never signs it's messages. */ AQEBICS_API uint32_t EBC_Account_GetFlags(const AB_ACCOUNT *a); AQEBICS_API void EBC_Account_SetFlags(AB_ACCOUNT *a, uint32_t flags); AQEBICS_API void EBC_Account_AddFlags(AB_ACCOUNT *a, uint32_t flags); AQEBICS_API void EBC_Account_SubFlags(AB_ACCOUNT *a, uint32_t flags); #ifdef __cplusplus } #endif #endif /* EBC_USER_H */ aqbanking-6.6.1/src/libs/plugins/backends/aqebics/client/provider_sendcmd.c0000664000175000017500000003656214546575647024000 00000000000000/*************************************************************************** begin : Wed Dec 26 2018 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ int EBC_Provider_SendCommands(AB_PROVIDER *pro, AB_PROVIDERQUEUE *pq, AB_IMEXPORTER_CONTEXT *ctx) { EBC_PROVIDER *hp; AB_USERQUEUE_LIST *uql; AB_USERQUEUE *uq; int rv; assert(pro); hp=GWEN_INHERIT_GETDATA(AB_PROVIDER, EBC_PROVIDER, pro); assert(hp); /* sort into user queue list */ uql=AB_UserQueue_List_new(); rv=AB_Provider_SortProviderQueueIntoUserQueueList(pro, pq, uql); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); AB_Provider_FreeUsersAndAccountsFromUserQueueList(pro, uql); AB_UserQueue_List_free(uql); return rv; } uq=AB_UserQueue_List_First(uql); while (uq) { int rv; rv=EBC_Provider__SendUserQueue(pro, uq, ctx); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); } uq=AB_UserQueue_List_Next(uq); } /* release accounts and users we loaded */ AB_Provider_FreeUsersAndAccountsFromUserQueueList(pro, uql); return 0; } int EBC_Provider__SendUserQueue(AB_PROVIDER *pro, AB_USERQUEUE *uq, AB_IMEXPORTER_CONTEXT *ctx) { AB_ACCOUNTQUEUE_LIST *aql; AB_USER *u; GWEN_HTTP_SESSION *sess; int rv; assert(uq); u=AB_UserQueue_GetUser(uq); assert(u); DBG_ERROR(0, "Handling user \"%lu\"", (unsigned long int) AB_User_GetUniqueId(u)); sess=EBC_Dialog_new(pro, u); rv=GWEN_HttpSession_Init(sess); if (rv<0) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Could not open session"); GWEN_HttpSession_free(sess); return rv; } aql=AB_UserQueue_GetAccountQueueList(uq); if (aql) { AB_ACCOUNTQUEUE *aq; int rv; GWEN_Gui_ProgressLog2(0, GWEN_LoggerLevel_Info, I18N("Locking customer \"%lu\""), (unsigned long int) AB_User_GetUniqueId(u)); rv=AB_Provider_BeginExclUseUser(pro, u); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "Could not lock user [%lu] (%d)", (unsigned long int) AB_User_GetUniqueId(u), rv); GWEN_Gui_ProgressLog2(0, GWEN_LoggerLevel_Error, I18N("Could not lock user \"%lu\""), (unsigned long int) AB_User_GetUniqueId(u)); AB_Provider_EndExclUseUser(pro, u, 1); /* abandon */ GWEN_HttpSession_Fini(sess); GWEN_HttpSession_free(sess); return rv; } aq=AB_AccountQueue_List_First(aql); while (aq) { int rv; rv=EBC_Provider__SendAccountQueue(pro, u, aq, sess, ctx); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); } aq=AB_AccountQueue_List_Next(aq); } /* while aq */ GWEN_Gui_ProgressLog2(0, GWEN_LoggerLevel_Info, I18N("Unlocking customer \"%lu\""), (unsigned long int) AB_User_GetUniqueId(u)); rv=AB_Provider_EndExclUseUser(pro, u, 0); if (rv<0) { GWEN_Gui_ProgressLog2(0, GWEN_LoggerLevel_Error, I18N("Could not unlock user \"%lu\""), (unsigned long int) AB_User_GetUniqueId(u)); AB_Provider_EndExclUseUser(pro, u, 1); /* abandon */ GWEN_HttpSession_Fini(sess); GWEN_HttpSession_free(sess); return rv; } } /* close and destroy session */ GWEN_HttpSession_Fini(sess); GWEN_HttpSession_free(sess); return 0; } int EBC_Provider__SendAccountQueue(AB_PROVIDER *pro, AB_USER *u, AB_ACCOUNTQUEUE *aq, GWEN_HTTP_SESSION *sess, AB_IMEXPORTER_CONTEXT *ctx) { AB_JOBQUEUE_LIST *jql; AB_ACCOUNT *a; a=AB_AccountQueue_GetAccount(aq); assert(a); EBC_Provider_SortTransactionsIntoJobQueues(pro, aq); jql=AB_AccountQueue_GetJobQueueList(aq); if (jql) { AB_JOBQUEUE *jq; jq=AB_JobQueue_List_First(jql); while (jq) { AB_TRANSACTION_COMMAND cmd; int rv; cmd=AB_JobQueue_GetJobType(jq); switch (cmd) { case AB_Transaction_CommandGetTransactions: rv=EBC_Provider_ExecContext_STA(pro, ctx, u, a, sess, jq); break; case AB_Transaction_CommandTransfer: case AB_Transaction_CommandDebitNote: default: rv=GWEN_ERROR_NOT_SUPPORTED; break; } if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); } jq=AB_JobQueue_List_Next(jq); } } return 0; } void EBC_Provider_SortTransactionsIntoJobQueues(AB_PROVIDER *pro, AB_ACCOUNTQUEUE *aq) { AB_TRANSACTION_LIST2 *tl; tl=AB_AccountQueue_GetTransactionList(aq); if (tl) { AB_TRANSACTION_LIST2_ITERATOR *it; it=AB_Transaction_List2_First(tl); if (it) { AB_TRANSACTION *t; t=AB_Transaction_List2Iterator_Data(it); while (t) { AB_JOBQUEUE *jq; AB_TRANSACTION_COMMAND cmd; cmd=AB_Transaction_GetCommand(t); jq=AB_AccountQueue_FindJobQueue(aq, cmd); if (jq==NULL) { jq=AB_JobQueue_new(); AB_JobQueue_SetJobType(jq, cmd); AB_AccountQueue_AddJobQueue(aq, jq); } if (cmd==AB_Transaction_CommandGetTransactions) { AB_TRANSACTION *tFirst; tFirst=AB_JobQueue_GetFirstTransaction(jq); if (tFirst) { /* don't add, just set reference id */ AB_Transaction_SetRefUniqueId(t, AB_Transaction_GetUniqueId(tFirst)); } else { /* add */ AB_JobQueue_AddTransaction(jq, t); } } else AB_JobQueue_AddTransaction(jq, t); t=AB_Transaction_List2Iterator_Next(it); } AB_Transaction_List2Iterator_free(it); } } } int EBC_Provider_ExecContext_STA(AB_PROVIDER *pro, AB_IMEXPORTER_CONTEXT *ctx, GWEN_UNUSED AB_USER *u, GWEN_UNUSED AB_ACCOUNT *a, GWEN_HTTP_SESSION *sess, AB_JOBQUEUE *jq) { EBC_PROVIDER *dp; AB_TRANSACTION_LIST2 *jl; assert(pro); dp=GWEN_INHERIT_GETDATA(AB_PROVIDER, EBC_PROVIDER, pro); assert(dp); jl=AB_JobQueue_GetTransactionList(jq); if (jl) { AB_TRANSACTION_LIST2_ITERATOR *jit; jit=AB_Transaction_List2_First(jl); if (jit) { AB_TRANSACTION *uj; uj=AB_Transaction_List2Iterator_Data(jit); assert(uj); while (uj) { int rv; rv=EBC_Provider_DownloadIntoContextWithSession(pro, sess, u, "STA", 1 /* withReceipt */, AB_Transaction_GetFirstDate(uj), AB_Transaction_GetLastDate(uj), "swift", "SWIFT-MT940", ctx, 0 /* don't lock */); if (rv<0 || rv>=300) { if (rv==GWEN_ERROR_NO_DATA) AB_Transaction_SetStatus(uj, AB_Transaction_StatusAccepted); else { AB_Transaction_SetStatus(uj, AB_Transaction_StatusRejected); if (rv==GWEN_ERROR_USER_ABORTED) { DBG_INFO(AQEBICS_LOGDOMAIN, "User aborted"); AB_Transaction_List2Iterator_free(jit); return rv; } } } uj=AB_Transaction_List2Iterator_Next(jit); } /* while */ AB_Transaction_List2Iterator_free(jit); } } /* if jl */ return 0; } #if 0 int EBC_Provider_ExecContext__IZV(AB_PROVIDER *pro, AB_IMEXPORTER_CONTEXT *ctx, AB_USER *u, AB_ACCOUNT *a, GWEN_HTTP_SESSION *sess, EBC_CONTEXT *ectx) { EBC_PROVIDER *dp; AB_JOB_LIST2_ITERATOR *jit; AB_JOB_STATUS js; AB_IMEXPORTER_CONTEXT *exCtx; AB_IMEXPORTER_ACCOUNTINFO *ai; GWEN_BUFFER *bufDtaus; GWEN_TIME *currentTime; GWEN_BUFFER *logbuf; int rv; const char *profileName=NULL; const char *s; const char *rqType; uint32_t groupId=0; assert(pro); dp=GWEN_INHERIT_GETDATA(AB_PROVIDER, EBC_PROVIDER, pro); assert(dp); /* prepare CTX log */ logbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(logbuf, "BEGIN"); currentTime=GWEN_CurrentTime(); GWEN_Time_toString(currentTime, I18N("YYYY/MM/DD-hh:mm:ss"), logbuf); GWEN_Time_free(currentTime); GWEN_Buffer_AppendString(logbuf, "\t"); GWEN_Buffer_AppendString(logbuf, I18N("National Mass Transfer")); GWEN_Buffer_AppendString(logbuf, "\n"); GWEN_Buffer_AppendString(logbuf, "\t"); GWEN_Buffer_AppendString(logbuf, I18N("Transfer type: ")); GWEN_Buffer_AppendString(logbuf, "\t"); switch (EBC_Context_GetJobType(ectx)) { case AB_Job_TypeTransfer: if (!profileName) profileName="transfer"; GWEN_Buffer_AppendString(logbuf, I18N("Transfer")); break; case AB_Job_TypeDebitNote: if (!profileName) profileName="debitnote"; GWEN_Buffer_AppendString(logbuf, I18N("Debit Note")); break; default: GWEN_Buffer_AppendString(logbuf, I18N("unknown")); break; } GWEN_Buffer_AppendString(logbuf, "\n"); GWEN_Buffer_AppendString(logbuf, "\t"); GWEN_Buffer_AppendString(logbuf, I18N("Account: ")); GWEN_Buffer_AppendString(logbuf, "\t"); GWEN_Buffer_AppendString(logbuf, AB_Account_GetBankCode(a)); GWEN_Buffer_AppendString(logbuf, " / "); GWEN_Buffer_AppendString(logbuf, AB_Account_GetAccountNumber(a)); GWEN_Buffer_AppendString(logbuf, "\n"); /* add a tab-less line to start a new table */ GWEN_Buffer_AppendString(logbuf, "Transactions\n"); DBG_INFO(AQEBICS_LOGDOMAIN, "Sampling transactions from jobs"); exCtx=AB_ImExporterContext_new(); ai=AB_ImExporterAccountInfo_new(); AB_ImExporterAccountInfo_FillFromAccount(ai, a); jit=AB_Job_List2_First(EBC_Context_GetJobs(ectx)); if (jit) { AB_JOB *uj; uj=AB_Job_List2Iterator_Data(jit); assert(uj); while (uj) { AB_TRANSACTION *t; const char *s; const AB_VALUE *v; switch (EBC_Context_GetJobType(ectx)) { case AB_Job_TypeTransfer: case AB_Job_TypeDebitNote: t=AB_Job_GetTransaction(uj); break; default: t=NULL; } assert(t); if (groupId==0) /* take id from first job of the created DTAUS doc */ groupId=AB_Job_GetJobId(uj); AB_Transaction_SetGroupId(t, groupId); AB_ImExporterAccountInfo_AddTransaction(ai, AB_Transaction_dup(t)); s=AB_Transaction_GetRemoteName(t); if (!s) s=I18N("unknown"); GWEN_Buffer_AppendString(logbuf, s); GWEN_Buffer_AppendString(logbuf, "\t"); s=AB_Transaction_GetRemoteBankCode(t); if (!s) s="????????"; GWEN_Buffer_AppendString(logbuf, s); GWEN_Buffer_AppendString(logbuf, "\t"); s=AB_Transaction_GetRemoteAccountNumber(t); if (!s) s="??????????"; GWEN_Buffer_AppendString(logbuf, s); GWEN_Buffer_AppendString(logbuf, "\t"); s=AB_Transaction_GetPurpose(t); if (!s) s=""; GWEN_Buffer_AppendString(logbuf, s); GWEN_Buffer_AppendString(logbuf, "\t"); v=AB_Transaction_GetValue(t); if (v) AB_Value_toHumanReadableString(v, logbuf, 2); else GWEN_Buffer_AppendString(logbuf, "0,00 EUR"); GWEN_Buffer_AppendString(logbuf, "\n"); uj=AB_Job_List2Iterator_Next(jit); } /* while */ AB_Job_List2Iterator_free(jit); } AB_ImExporterContext_AddAccountInfo(exCtx, ai); GWEN_Buffer_AppendString(logbuf, I18N("Results:\n")); /* export as DTAUS to bufDtaus */ bufDtaus=GWEN_Buffer_new(0, 1024, 0, 1); DBG_INFO(AQEBICS_LOGDOMAIN, "Exporting transactions to DTAUS[default]"); rv=AB_Banking_ExportToBuffer(AB_Provider_GetBanking(pro), exCtx, "dtaus", profileName, bufDtaus); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(bufDtaus); EBC_Provider_SetJobListStatus(EBC_Context_GetJobs(ectx), AB_Job_StatusError); GWEN_Buffer_AppendString(logbuf, "\t"); GWEN_Buffer_AppendString(logbuf, I18N("Error while exporting to DTAUS\n")); GWEN_Buffer_AppendString(logbuf, "END\n"); GWEN_Buffer_free(logbuf); return rv; } GWEN_Buffer_AppendString(logbuf, "\t"); GWEN_Buffer_AppendString(logbuf, I18N("Exporting to DTAUS: ok\n")); /* exchange upload request */ DBG_INFO(AQEBICS_LOGDOMAIN, "Uploading."); AB_HttpSession_ClearLog(sess); if (EBC_Context_GetJobType(ectx)==AB_Job_TypeDebitNote) { if (EBC_User_GetFlags(u) & EBC_USER_FLAGS_USE_IZL) rqType="IZL"; else rqType="IZV"; } else rqType="IZV"; rv=EBC_Provider_XchgUploadRequest(pro, sess, u, rqType, (const uint8_t *)GWEN_Buffer_GetStart(bufDtaus), GWEN_Buffer_GetUsedBytes(bufDtaus)); if (rv<0 || rv>=300) js=AB_Job_StatusError; else js=AB_Job_StatusFinished; s=AB_HttpSession_GetLog(sess); if (s) GWEN_Buffer_AppendString(logbuf, s); GWEN_Buffer_AppendString(logbuf, "END\n"); GWEN_Buffer_free(logbuf); EBC_Provider_SetJobListStatus(EBC_Context_GetJobs(ectx), js); DBG_INFO(AQEBICS_LOGDOMAIN, "Done"); return 0; } int EBC_Provider_ExecContext_IZV(AB_PROVIDER *pro, AB_IMEXPORTER_CONTEXT *ctx, AB_USER *u, AB_ACCOUNT *a, GWEN_HTTP_SESSION *sess, EBC_CONTEXT *ectx) { EBC_PROVIDER *dp; AB_JOB_LIST2_ITERATOR *jit; int rv; assert(pro); dp=GWEN_INHERIT_GETDATA(AB_PROVIDER, EBC_PROVIDER, pro); assert(dp); DBG_INFO(AQEBICS_LOGDOMAIN, "Executing IZV request"); rv=EBC_Provider_ExecContext__IZV(pro, ctx, u, a, sess, ectx); jit=AB_Job_List2_First(EBC_Context_GetJobs(ectx)); if (jit) { AB_JOB *uj; uj=AB_Job_List2Iterator_Data(jit); assert(uj); while (uj) { const AB_TRANSACTION *ot; switch (EBC_Context_GetJobType(ectx)) { case AB_Job_TypeTransfer: case AB_Job_TypeDebitNote: ot=AB_Job_GetTransaction(uj); break; default: ot=NULL; } assert(ot); if (ot) { AB_TRANSACTION *t; AB_TRANSACTION_STATUS tStatus; switch (AB_Job_GetStatus(uj)) { case AB_Job_StatusFinished: tStatus=AB_Transaction_StatusAccepted; break; case AB_Job_StatusPending: tStatus=AB_Transaction_StatusPending; break; default: tStatus=AB_Transaction_StatusRejected; break; } t=AB_Transaction_dup(ot); AB_Transaction_SetStatus(t, tStatus); AB_Transaction_SetUniqueAccountId(t, AB_Account_GetUniqueId(a)); if (AB_Transaction_GetType(t)<=AB_Transaction_TypeNone) AB_Transaction_SetType(t, AB_Transaction_TypeTransfer); AB_ImExporterContext_AddTransaction(ctx, t); } uj=AB_Job_List2Iterator_Next(jit); } /* while */ AB_Job_List2Iterator_free(jit); } return rv; } #endif aqbanking-6.6.1/src/libs/plugins/backends/aqebics/client/p_encipher_e001.c0000664000175000017500000001171314043610744023255 00000000000000/*************************************************************************** begin : Thu May 15 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ static int EBC_Provider_EncryptData_E001(GWEN_UNUSED AB_PROVIDER *pro, GWEN_CRYPT_KEY *skey, const uint8_t *pData, uint32_t lData, GWEN_BUFFER *sbuf) { GWEN_BUFFER *tbuf; GWEN_BUFFER *ebuf; int rv; uint32_t l; /* zip */ tbuf=GWEN_Buffer_new(0, lData, 0, 1); rv=EB_Zip_Deflate((const char *)pData, lData, tbuf); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); return rv; } /* padd */ rv=GWEN_Padd_PaddWithAnsiX9_23(tbuf); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); return rv; } /* encrypt */ ebuf=GWEN_Buffer_new(0, GWEN_Buffer_GetUsedBytes(tbuf)+16, 0, 1); l=GWEN_Buffer_GetMaxUnsegmentedWrite(ebuf); /* reset IV !! */ GWEN_Crypt_KeyDes3K_SetIV(skey, NULL, 0); rv=GWEN_Crypt_Key_Encipher(skey, (uint8_t *)GWEN_Buffer_GetStart(tbuf), GWEN_Buffer_GetUsedBytes(tbuf), (uint8_t *)GWEN_Buffer_GetPosPointer(ebuf), &l); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(ebuf); GWEN_Buffer_free(tbuf); return rv; } GWEN_Buffer_IncrementPos(ebuf, l); GWEN_Buffer_AdjustUsedBytes(ebuf); GWEN_Buffer_free(tbuf); /* base64 encode encrypted data into given buffer */ rv=GWEN_Base64_Encode((const uint8_t *)GWEN_Buffer_GetStart(ebuf), GWEN_Buffer_GetUsedBytes(ebuf), sbuf, 0); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(ebuf); return rv; } GWEN_Buffer_free(ebuf); return 0; } static int EBC_Provider_EncryptKey_E001(AB_PROVIDER *pro, AB_USER *u, const GWEN_CRYPT_KEY *skey, GWEN_BUFFER *sbuf) { EBC_PROVIDER *dp; GWEN_BUFFER *kbuf; GWEN_BUFFER *ebuf; GWEN_CRYPT_TOKEN *ct; const GWEN_CRYPT_TOKEN_CONTEXT *ctx; const GWEN_CRYPT_TOKEN_KEYINFO *ki; uint32_t keyId; int ksize; uint32_t l; GWEN_CRYPT_PADDALGO *algo; int rv; assert(pro); dp=GWEN_INHERIT_GETDATA(AB_PROVIDER, EBC_PROVIDER, pro); assert(dp); /* get crypt token and context */ rv=EBC_Provider_MountToken(pro, u, &ct, &ctx); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); return rv; } /* get key id */ keyId=GWEN_Crypt_Token_Context_GetEncipherKeyId(ctx); ki=GWEN_Crypt_Token_GetKeyInfo(ct, keyId, 0xffffffff, 0); if (ki==NULL) { DBG_INFO(AQEBICS_LOGDOMAIN, "Keyinfo %04x not found on crypt token [%s:%s]", keyId, GWEN_Crypt_Token_GetTypeName(ct), GWEN_Crypt_Token_GetTokenName(ct)); GWEN_Crypt_Token_Close(ct, 0, 0); return GWEN_ERROR_NOT_FOUND; } ksize=GWEN_Crypt_Token_KeyInfo_GetKeySize(ki); /* get key data */ kbuf=GWEN_Buffer_new(0, 32, 0, 1); GWEN_Buffer_AppendBytes(kbuf, (const char *)GWEN_Crypt_KeyDes3K_GetKeyDataPtr(skey), 16); /* select padd algo */ algo=GWEN_Crypt_PaddAlgo_new(GWEN_Crypt_PaddAlgoId_Pkcs1_2); GWEN_Crypt_PaddAlgo_SetPaddSize(algo, ksize); /* encipher key data */ ebuf=GWEN_Buffer_new(0, ksize+16, 0, 1); l=GWEN_Buffer_GetMaxUnsegmentedWrite(ebuf); rv=GWEN_Crypt_Token_Encipher(ct, keyId, algo, (const uint8_t *)GWEN_Buffer_GetStart(kbuf), GWEN_Buffer_GetUsedBytes(kbuf), (uint8_t *)GWEN_Buffer_GetStart(ebuf), &l, 0); GWEN_Crypt_PaddAlgo_free(algo); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(ebuf); GWEN_Buffer_free(kbuf); return rv; } GWEN_Buffer_IncrementPos(ebuf, l); GWEN_Buffer_AdjustUsedBytes(ebuf); GWEN_Buffer_free(kbuf); /* base64 encode encrypted data into given buffer */ rv=GWEN_Base64_Encode((const uint8_t *)GWEN_Buffer_GetStart(ebuf), GWEN_Buffer_GetUsedBytes(ebuf), sbuf, 0); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(ebuf); return rv; } GWEN_Buffer_free(ebuf); return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqebics/client/provider_p.h0000664000175000017500000001332514043610744022573 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AQEBICS_CLIENT_PROVIDER_P_H #define AQEBICS_CLIENT_PROVIDER_P_H #include "provider_l.h" #include typedef struct EBC_PROVIDER EBC_PROVIDER; struct EBC_PROVIDER { GWEN_DB_NODE *dbConfig; uint32_t lastJobId; uint32_t lastMediumId; int connectTimeout; int transferTimeout; }; static void GWENHYWFAR_CB EBC_Provider_FreeData(void *bp, void *p); static int EBC_Provider_Init(AB_PROVIDER *pro, GWEN_DB_NODE *dbData); static int EBC_Provider_Fini(AB_PROVIDER *pro, GWEN_DB_NODE *dbData); static GWEN_DIALOG *EBC_Provider_GetEditUserDialog(AB_PROVIDER *pro, AB_USER *u); static GWEN_DIALOG *EBC_Provider_GetNewUserDialog(AB_PROVIDER *pro, int i); static AB_ACCOUNT *EBC_Provider_CreateAccountObject(AB_PROVIDER *pro); static AB_USER *EBC_Provider_CreateUserObject(AB_PROVIDER *pro); int EBC_Provider__signMessage(AB_PROVIDER *pro, EB_MSG *msg, AB_USER *u); int EBC_Provider__generateNonce(GWEN_BUFFER *buf); /* p_tools.inc */ static int EBC_Provider__addKiTxt(AB_PROVIDER *pro, const GWEN_CRYPT_TOKEN_KEYINFO *ki, GWEN_BUFFER *lbuf, int version); static const char *EBC_Provider_TechnicalCodeToString(const char *s); static const char *EBC_Provider_BankCodeToString(const char *s); static int EBC_Provider_EuSign_A004(AB_PROVIDER *pro, AB_USER *u, const char *requestType, const uint8_t *pMsg, uint32_t lMsg, GWEN_BUFFER *sbuf); static int EBC_Provider_MkEuZipDoc_A004(AB_PROVIDER *pro, AB_USER *u, const char *requestType, const uint8_t *pMsg, uint32_t lMsg, GWEN_BUFFER *sbuf); static int EBC_Provider_EuSign_A005(AB_PROVIDER *pro, AB_USER *u, const char *requestType, const uint8_t *pMsg, uint32_t lMsg, GWEN_BUFFER *sbuf); static int EBC_Provider_MkEuZipDoc_A005(AB_PROVIDER *pro, AB_USER *u, const char *requestType, const uint8_t *pMsg, uint32_t lMsg, GWEN_BUFFER *sbuf); static int EBC_Provider_ExecContext_STA(AB_PROVIDER *pro, AB_IMEXPORTER_CONTEXT *ctx, AB_USER *u, AB_ACCOUNT *a, GWEN_HTTP_SESSION *sess, AB_JOBQUEUE *jq); #if 0 static int EBC_Provider_ExecContext__IZV(AB_PROVIDER *pro, AB_IMEXPORTER_CONTEXT *ctx, AB_USER *u, AB_ACCOUNT *a, GWEN_HTTP_SESSION *sess, EBC_CONTEXT *ectx); static int EBC_Provider_ExecContext_IZV(AB_PROVIDER *pro, AB_IMEXPORTER_CONTEXT *ctx, AB_USER *u, AB_ACCOUNT *a, GWEN_HTTP_SESSION *sess, EBC_CONTEXT *ectx); static int EBC_Provider_ExecContext(AB_PROVIDER *pro, AB_IMEXPORTER_CONTEXT *ctx, AB_USER *u, AB_ACCOUNT *a, GWEN_HTTP_SESSION *sess, EBC_CONTEXT *ectx); static int EBC_Provider_ExecAccountQueue(AB_PROVIDER *pro, AB_IMEXPORTER_CONTEXT *ctx, AB_USER *u, GWEN_HTTP_SESSION *sess, EBC_ACCOUNTQUEUE *aq); static int EBC_Provider_ExecUserQueue(AB_PROVIDER *pro, AB_IMEXPORTER_CONTEXT *ctx, EBC_USERQUEUE *uq); int EBC_Provider_ExecQueue(AB_PROVIDER *pro, AB_IMEXPORTER_CONTEXT *ctx); #endif int EBC_Provider_SendCommands(AB_PROVIDER *pro, AB_PROVIDERQUEUE *pq, AB_IMEXPORTER_CONTEXT *ctx); int EBC_Provider__SendUserQueue(AB_PROVIDER *pro, AB_USERQUEUE *uq, AB_IMEXPORTER_CONTEXT *ctx); int EBC_Provider__SendAccountQueue(AB_PROVIDER *pro, AB_USER *u, AB_ACCOUNTQUEUE *aq, GWEN_HTTP_SESSION *sess, AB_IMEXPORTER_CONTEXT *ctx); void EBC_Provider_SortTransactionsIntoJobQueues(AB_PROVIDER *pro, AB_ACCOUNTQUEUE *aq); int EBC_Provider__CreateTransactionLimitsForAccount(AB_PROVIDER *pro, AB_ACCOUNT *acc, AB_TRANSACTION_LIMITS_LIST *tll); int EBC_Provider_UpdateAccountSpec(AB_PROVIDER *pro, AB_ACCOUNT_SPEC *as, int doLock); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqebics/client/user.c0000664000175000017500000004537314043610744021403 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "user_p.h" #include "provider_l.h" #include #include GWEN_INHERIT(AB_USER, EBC_USER) const char *EBC_User_Status_toString(EBC_USER_STATUS st) { switch (st) { case EBC_UserStatus_New: return "new"; case EBC_UserStatus_Enabled: return "enabled"; case EBC_UserStatus_Init1: return "init1"; case EBC_UserStatus_Init2: return "init2"; case EBC_UserStatus_Disabled: return "disabled"; default: return "unknown"; } /* switch */ } EBC_USER_STATUS EBC_User_Status_fromString(const char *s) { assert(s); if (strcasecmp(s, "new")==0) return EBC_UserStatus_New; else if (strcasecmp(s, "enabled")==0) return EBC_UserStatus_Enabled; else if (strcasecmp(s, "init1")==0) return EBC_UserStatus_Init1; else if (strcasecmp(s, "init2")==0) return EBC_UserStatus_Init2; else if (strcasecmp(s, "disabled")==0) return EBC_UserStatus_Disabled; else return EBC_UserStatus_Unknown; } void EBC_User_Flags_toDb(GWEN_DB_NODE *db, const char *name, uint32_t flags) { GWEN_DB_DeleteVar(db, name); if (flags & EBC_USER_FLAGS_BANK_DOESNT_SIGN) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_DEFAULT, name, "bankDoesntSign"); if (flags & EBC_USER_FLAGS_FORCE_SSLV3) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_DEFAULT, name, "forceSslv3"); if (flags & EBC_USER_FLAGS_INI) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_DEFAULT, name, "INI"); if (flags & EBC_USER_FLAGS_HIA) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_DEFAULT, name, "HIA"); if (flags & EBC_USER_FLAGS_CLIENT_DATA_DOWNLOAD_SPP) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_DEFAULT, name, "clientDataDownloadSpp"); if (flags & EBC_USER_FLAGS_PREVALIDATION_SPP) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_DEFAULT, name, "prevalidationSpp"); if (flags & EBC_USER_FLAGS_RECOVERY_SPP) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_DEFAULT, name, "recoverySpp"); if (flags & EBC_USER_FLAGS_STA_SPP) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_DEFAULT, name, "staSpp"); if (flags & EBC_USER_FLAGS_IZV_SPP) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_DEFAULT, name, "izvSpp"); if (flags & EBC_USER_FLAGS_USE_IZL) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_DEFAULT, name, "useIZL"); if (flags & EBC_USER_FLAGS_TIMESTAMP_FIX1) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_DEFAULT, name, "timestampFix1"); if (flags & EBC_USER_FLAGS_NO_EU) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_DEFAULT, name, "noEu"); #if 0 if (flags & EBC_USER_FLAGS_TLS_IGN_PREMATURE_CLOSE) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_DEFAULT, name, "tlsIgnPrematureClose"); #endif if (flags & EBC_USER_FLAGS_TLS_ABORT_ON_PREMATURE_CLOSE) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_DEFAULT, name, "tlsAbortOnPrematureClose"); } uint32_t EBC_User_Flags_fromDb(GWEN_DB_NODE *db, const char *name) { uint32_t fl=0; int i; for (i=0; ; i++) { const char *s; s=GWEN_DB_GetCharValue(db, name, i, 0); if (!s) break; if (strcasecmp(s, "bankDoesntSign")==0) fl|=EBC_USER_FLAGS_BANK_DOESNT_SIGN; else if (strcasecmp(s, "forceSslv3")==0) fl|=EBC_USER_FLAGS_FORCE_SSLV3; else if (strcasecmp(s, "ini")==0) fl|=EBC_USER_FLAGS_INI; else if (strcasecmp(s, "hia")==0) fl|=EBC_USER_FLAGS_HIA; else if (strcasecmp(s, "clientDataDownloadSpp")==0) fl|=EBC_USER_FLAGS_CLIENT_DATA_DOWNLOAD_SPP; else if (strcasecmp(s, "prevalidationSpp")==0) fl|=EBC_USER_FLAGS_PREVALIDATION_SPP; else if (strcasecmp(s, "recoverySpp")==0) fl|=EBC_USER_FLAGS_RECOVERY_SPP; else if (strcasecmp(s, "staSpp")==0) fl|=EBC_USER_FLAGS_STA_SPP; else if (strcasecmp(s, "izvSpp")==0) fl|=EBC_USER_FLAGS_IZV_SPP; else if (strcasecmp(s, "useIZL")==0) fl|=EBC_USER_FLAGS_USE_IZL; else if (strcasecmp(s, "timestampFix1")==0) fl|=EBC_USER_FLAGS_TIMESTAMP_FIX1; else if (strcasecmp(s, "noEu")==0) fl|=EBC_USER_FLAGS_NO_EU; else if (strcasecmp(s, "tlsIgnPrematureClose")==0) { /* ignore deprecated flag */ #if 0 fl|=EBC_USER_FLAGS_TLS_IGN_PREMATURE_CLOSE; #endif } else if (strcasecmp(s, "tlsAbortOnPrematureClose")==0) fl|=EBC_USER_FLAGS_TLS_ABORT_ON_PREMATURE_CLOSE; else { DBG_WARN(AQEBICS_LOGDOMAIN, "Unknown user flag \"%s\"", s); } } return fl; } AB_USER *EBC_User_new(AB_PROVIDER *pro) { AB_USER *u; EBC_USER *ue; assert(pro); u=AB_User_new(); assert(u); AB_User_SetProvider(u, pro); AB_User_SetBackendName(u, "aqebics"); GWEN_NEW_OBJECT(EBC_USER, ue); GWEN_INHERIT_SETDATA(AB_USER, EBC_USER, u, ue, EBC_User_freeData); ue->readFromDbFn=AB_User_SetReadFromDbFn(u, EBC_User_ReadFromDb); ue->writeToDbFn=AB_User_SetWriteToDbFn(u, EBC_User_WriteToDb); /* some reasonable presets */ AB_User_SetCountry(u, "de"); ue->protoVersion=strdup("H003"); ue->signVersion=strdup("A005"); ue->cryptVersion=strdup("E002"); ue->authVersion=strdup("X002"); return u; } void GWENHYWFAR_CB EBC_User_freeData(GWEN_UNUSED void *bp, void *p) { EBC_USER *ue; ue=(EBC_USER *)p; free(ue->peerId); free(ue->tokenType); free(ue->tokenName); free(ue->protoVersion); free(ue->signVersion); free(ue->cryptVersion); free(ue->authVersion); free(ue->systemId); free(ue->httpUserAgent); free(ue->httpContentType); free(ue->serverUrl); GWEN_FREE_OBJECT(ue); } void EBC_User__ReadDb(AB_USER *u, GWEN_DB_NODE *db) { EBC_USER *ue; const char *s; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, EBC_USER, u); assert(ue); ue->flags=EBC_User_Flags_fromDb(db, "userFlags"); s=GWEN_DB_GetCharValue(db, "status", 0, "new"); ue->status=EBC_User_Status_fromString(s); /* load server address */ free(ue->serverUrl); s=GWEN_DB_GetCharValue(db, "server", 0, 0); if (s) ue->serverUrl=strdup(s); else ue->serverUrl=NULL; /* get peer id */ free(ue->peerId); s=GWEN_DB_GetCharValue(db, "peerId", 0, 0); if (s) ue->peerId=strdup(s); else ue->peerId=NULL; free(ue->systemId); s=GWEN_DB_GetCharValue(db, "systemId", 0, 0); if (s) ue->systemId=strdup(s); else ue->systemId=NULL; /* setup HTTP version */ ue->httpVMajor=GWEN_DB_GetIntValue(db, "httpVMajor", 0, -1); ue->httpVMinor=GWEN_DB_GetIntValue(db, "httpVMinor", 0, -1); if (ue->httpVMajor==-1 || ue->httpVMinor==-1) { ue->httpVMajor=1; ue->httpVMinor=1; } free(ue->httpUserAgent); s=GWEN_DB_GetCharValue(db, "httpUserAgent", 0, 0); if (s) ue->httpUserAgent=strdup(s); else ue->httpUserAgent=NULL; free(ue->httpContentType); s=GWEN_DB_GetCharValue(db, "httpContentType", 0, "text/xml; charset=UTF-8"); if (s) ue->httpContentType=strdup(s); else ue->httpContentType=NULL; /* setup medium stuff */ free(ue->tokenType); s=GWEN_DB_GetCharValue(db, "tokenType", 0, 0); if (s) ue->tokenType=strdup(s); else ue->tokenType=NULL; free(ue->tokenName); s=GWEN_DB_GetCharValue(db, "tokenName", 0, 0); if (s) ue->tokenName=strdup(s); else ue->tokenName=NULL; free(ue->protoVersion); s=GWEN_DB_GetCharValue(db, "protoVersion", 0, "H002"); if (s) ue->protoVersion=strdup(s); else ue->protoVersion=NULL; free(ue->signVersion); s=GWEN_DB_GetCharValue(db, "signVersion", 0, "A004"); if (s) ue->signVersion=strdup(s); else ue->signVersion=NULL; free(ue->cryptVersion); s=GWEN_DB_GetCharValue(db, "cryptVersion", 0, "E001"); if (s) ue->cryptVersion=strdup(s); else ue->cryptVersion=NULL; free(ue->authVersion); s=GWEN_DB_GetCharValue(db, "authVersion", 0, "X001"); if (s) ue->authVersion=strdup(s); else ue->authVersion=NULL; ue->tokenContextId=GWEN_DB_GetIntValue(db, "tokenContextId", 0, 1); } void EBC_User__WriteDb(const AB_USER *u, GWEN_DB_NODE *db) { EBC_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, EBC_USER, u); assert(ue); EBC_User_Flags_toDb(db, "userFlags", ue->flags); GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "status", EBC_User_Status_toString(ue->status)); if (ue->peerId) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "peerId", ue->peerId); if (ue->systemId) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "systemId", ue->systemId); /* save crypt token settings */ if (ue->tokenType) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "tokenType", ue->tokenType); if (ue->tokenName) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "tokenName", ue->tokenName); GWEN_DB_SetIntValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "tokenContextId", ue->tokenContextId); if (ue->protoVersion) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "protoVersion", ue->protoVersion); if (ue->signVersion) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "signVersion", ue->signVersion); if (ue->cryptVersion) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "cryptVersion", ue->cryptVersion); if (ue->authVersion) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "authVersion", ue->authVersion); /* save http settings */ GWEN_DB_SetIntValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "httpVMajor", ue->httpVMajor); GWEN_DB_SetIntValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "httpVMinor", ue->httpVMinor); if (ue->httpUserAgent) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "httpUserAgent", ue->httpUserAgent); if (ue->httpContentType) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "httpContentType", ue->httpContentType); /* save URL */ if (ue->serverUrl) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "server", ue->serverUrl); } int EBC_User_ReadFromDb(AB_USER *u, GWEN_DB_NODE *db) { EBC_USER *ue; int rv; GWEN_DB_NODE *dbP; AB_PROVIDER *pro; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, EBC_USER, u); assert(ue); /* save provider, because AB_User_ReadFromDb clears it */ pro=AB_User_GetProvider(u); /* read data for base class */ rv=(ue->readFromDbFn)(u, db); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); return rv; } /* set provider again */ AB_User_SetProvider(u, pro); /* read data for provider */ dbP=GWEN_DB_GetGroup(db, GWEN_DB_FLAGS_DEFAULT, "data/backend"); EBC_User__ReadDb(u, dbP); return 0; } int EBC_User_WriteToDb(const AB_USER *u, GWEN_DB_NODE *db) { EBC_USER *ue; int rv; GWEN_DB_NODE *dbP; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, EBC_USER, u); assert(ue); /* write data for base class */ rv=(ue->writeToDbFn)(u, db); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); return rv; } /* write data for provider */ dbP=GWEN_DB_GetGroup(db, GWEN_DB_FLAGS_DEFAULT, "data/backend"); EBC_User__WriteDb(u, dbP); return 0; } const char *EBC_User_GetPeerId(const AB_USER *u) { EBC_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, EBC_USER, u); assert(ue); return ue->peerId; } void EBC_User_SetPeerId(AB_USER *u, const char *s) { EBC_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, EBC_USER, u); assert(ue); free(ue->peerId); if (s) ue->peerId=strdup(s); else ue->peerId=NULL; } uint32_t EBC_User_GetTokenContextId(const AB_USER *u) { EBC_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, EBC_USER, u); assert(ue); return ue->tokenContextId; } void EBC_User_SetTokenContextId(AB_USER *u, uint32_t id) { EBC_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, EBC_USER, u); assert(ue); ue->tokenContextId=id; } const char *EBC_User_GetTokenType(const AB_USER *u) { EBC_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, EBC_USER, u); assert(ue); return ue->tokenType; } void EBC_User_SetTokenType(AB_USER *u, const char *s) { EBC_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, EBC_USER, u); assert(ue); free(ue->tokenType); if (s) ue->tokenType=strdup(s); else ue->tokenType=NULL; } const char *EBC_User_GetTokenName(const AB_USER *u) { EBC_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, EBC_USER, u); assert(ue); return ue->tokenName; } void EBC_User_SetTokenName(AB_USER *u, const char *s) { EBC_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, EBC_USER, u); assert(ue); free(ue->tokenName); if (s) ue->tokenName=strdup(s); else ue->tokenName=NULL; } EBC_USER_STATUS EBC_User_GetStatus(const AB_USER *u) { EBC_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, EBC_USER, u); assert(ue); return ue->status; } void EBC_User_SetStatus(AB_USER *u, EBC_USER_STATUS i) { EBC_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, EBC_USER, u); assert(ue); ue->status=i; } const char *EBC_User_GetServerUrl(const AB_USER *u) { EBC_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, EBC_USER, u); assert(ue); return ue->serverUrl; } void EBC_User_SetServerUrl(AB_USER *u, const char *s) { EBC_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, EBC_USER, u); assert(ue); free(ue->serverUrl); if (s) ue->serverUrl=strdup(s); else ue->serverUrl=NULL; } const char *EBC_User_GetSystemId(const AB_USER *u) { EBC_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, EBC_USER, u); assert(ue); return ue->systemId; } void EBC_User_SetSystemId(AB_USER *u, const char *s) { EBC_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, EBC_USER, u); assert(ue); free(ue->systemId); if (s) ue->systemId=strdup(s); else ue->systemId=NULL; } uint32_t EBC_User_GetFlags(const AB_USER *u) { EBC_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, EBC_USER, u); assert(ue); return ue->flags; } void EBC_User_SetFlags(AB_USER *u, uint32_t flags) { EBC_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, EBC_USER, u); assert(ue); ue->flags=flags; } void EBC_User_AddFlags(AB_USER *u, uint32_t flags) { EBC_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, EBC_USER, u); assert(ue); ue->flags|=flags; } void EBC_User_SubFlags(AB_USER *u, uint32_t flags) { EBC_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, EBC_USER, u); assert(ue); ue->flags&=~flags; } const char *EBC_User_GetHttpUserAgent(const AB_USER *u) { EBC_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, EBC_USER, u); assert(ue); return ue->httpUserAgent; } void EBC_User_SetHttpUserAgent(AB_USER *u, const char *s) { EBC_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, EBC_USER, u); assert(ue); free(ue->httpUserAgent); if (s) ue->httpUserAgent=strdup(s); else ue->httpUserAgent=NULL; } const char *EBC_User_GetHttpContentType(const AB_USER *u) { EBC_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, EBC_USER, u); assert(ue); return ue->httpContentType; } void EBC_User_SetHttpContentType(AB_USER *u, const char *s) { EBC_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, EBC_USER, u); assert(ue); free(ue->httpContentType); if (s) ue->httpContentType=strdup(s); else ue->httpContentType=NULL; } int EBC_User_GetHttpVMajor(const AB_USER *u) { EBC_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, EBC_USER, u); assert(ue); return ue->httpVMajor; } void EBC_User_SetHttpVMajor(AB_USER *u, int i) { EBC_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, EBC_USER, u); assert(ue); ue->httpVMajor=i; } int EBC_User_GetHttpVMinor(const AB_USER *u) { EBC_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, EBC_USER, u); assert(ue); return ue->httpVMinor; } void EBC_User_SetHttpVMinor(AB_USER *u, int i) { EBC_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, EBC_USER, u); assert(ue); ue->httpVMinor=i; } const char *EBC_User_GetProtoVersion(const AB_USER *u) { EBC_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, EBC_USER, u); assert(ue); return ue->protoVersion; } void EBC_User_SetProtoVersion(AB_USER *u, const char *s) { EBC_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, EBC_USER, u); assert(ue); free(ue->protoVersion); if (s) ue->protoVersion=strdup(s); else ue->protoVersion=NULL; } const char *EBC_User_GetSignVersion(const AB_USER *u) { EBC_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, EBC_USER, u); assert(ue); return ue->signVersion; } void EBC_User_SetSignVersion(AB_USER *u, const char *s) { EBC_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, EBC_USER, u); assert(ue); free(ue->signVersion); if (s) ue->signVersion=strdup(s); else ue->signVersion=NULL; } const char *EBC_User_GetCryptVersion(const AB_USER *u) { EBC_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, EBC_USER, u); assert(ue); return ue->cryptVersion; } void EBC_User_SetCryptVersion(AB_USER *u, const char *s) { EBC_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, EBC_USER, u); assert(ue); free(ue->cryptVersion); if (s) ue->cryptVersion=strdup(s); else ue->cryptVersion=NULL; } const char *EBC_User_GetAuthVersion(const AB_USER *u) { EBC_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, EBC_USER, u); assert(ue); return ue->authVersion; } void EBC_User_SetAuthVersion(AB_USER *u, const char *s) { EBC_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, EBC_USER, u); assert(ue); free(ue->authVersion); if (s) ue->authVersion=strdup(s); else ue->authVersion=NULL; } int EBC_User_MkPasswdName(const AB_USER *u, GWEN_BUFFER *buf) { EBC_USER *ue; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, EBC_USER, u); assert(ue); if (ue->tokenType==NULL) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Missing tokenType or tokenName"); return GWEN_ERROR_NO_DATA; } if (ue->tokenName) { GWEN_Buffer_AppendString(buf, "PASSWORD_"); GWEN_Buffer_AppendString(buf, ue->tokenType); GWEN_Buffer_AppendString(buf, "_"); GWEN_Buffer_AppendString(buf, ue->tokenName); return 0; } else { DBG_ERROR(AQEBICS_LOGDOMAIN, "Missing tokenName"); return GWEN_ERROR_NO_DATA; } } aqbanking-6.6.1/src/libs/plugins/backends/aqebics/client/user_p.h0000664000175000017500000000246514043610744021722 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2004-2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef EBC_CLIENT_USER_P_H #define EBC_CLIENT_USER_P_H #include "user_l.h" typedef struct EBC_USER EBC_USER; struct EBC_USER { char *serverUrl; char *peerId; char *tokenType; char *tokenName; uint32_t tokenContextId; char *protoVersion; char *signVersion; char *cryptVersion; char *authVersion; char *systemId; EBC_USER_STATUS status; int httpVMajor; int httpVMinor; char *httpUserAgent; char *httpContentType; uint32_t flags; AB_USER_READFROMDB_FN readFromDbFn; AB_USER_WRITETODB_FN writeToDbFn; }; static void GWENHYWFAR_CB EBC_User_freeData(void *bp, void *p); static void EBC_User__ReadDb(AB_USER *u, GWEN_DB_NODE *db); static void EBC_User__WriteDb(const AB_USER *u, GWEN_DB_NODE *db); int EBC_User_ReadFromDb(AB_USER *u, GWEN_DB_NODE *db); static int EBC_User_WriteToDb(const AB_USER *u, GWEN_DB_NODE *db); #endif /* EBC_CLIENT_USER_P_H */ aqbanking-6.6.1/src/libs/plugins/backends/aqebics/client/p_sign.c0000664000175000017500000000175214043610744021675 00000000000000/*************************************************************************** begin : Tue Mar 04 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ int EBC_Provider_SignMessage(AB_PROVIDER *pro, EB_MSG *msg, AB_USER *u, xmlNodePtr node) { const char *s; s=EBC_User_GetAuthVersion(u); if (!(s && *s)) s="X001"; if (strcasecmp(s, "X001")==0) return EBC_Provider_SignMessage_X001(pro, msg, u, node); else if (strcasecmp(s, "X002")==0) return EBC_Provider_SignMessage_X002(pro, msg, u, node); else { DBG_ERROR(AQEBICS_LOGDOMAIN, "Version [%s] not supported", s); return GWEN_ERROR_BAD_DATA; } } aqbanking-6.6.1/src/libs/plugins/backends/aqebics/client/dialog_l.h0000664000175000017500000000217514043610744022175 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef EBC_CLIENT_DIALOG_L_H #define EBC_CLIENT_DIALOG_L_H #include "aqebics/msg/msg.h" #include #include #include #include #include GWEN_HTTP_SESSION *EBC_Dialog_new(AB_PROVIDER *pro, AB_USER *u); int EBC_Dialog_ExchangeMessages(GWEN_HTTP_SESSION *sess, EB_MSG *msg, EB_MSG **pResponse); int EBC_Dialog_ExchangeMessagesAndCheckResponse(GWEN_HTTP_SESSION *sess, EB_MSG *msg, EB_MSG **pResponse); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqebics/client/p_sign_x002.c0000664000175000017500000001376014043610744022450 00000000000000/*************************************************************************** begin : Tue Mar 04 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ static int EBC_Provider_SignMessage_X002(AB_PROVIDER *pro, EB_MSG *msg, AB_USER *u, xmlNodePtr node) { EBC_PROVIDER *dp; int rv; GWEN_CRYPT_TOKEN *ct; const GWEN_CRYPT_TOKEN_CONTEXT *ctx; const GWEN_CRYPT_TOKEN_KEYINFO *ki; uint32_t keyId; GWEN_BUFFER *hbuf; GWEN_BUFFER *bbuf; xmlNodePtr nodeX = NULL; xmlNodePtr nodeXX = NULL; xmlNodePtr nodeXXX = NULL; xmlNodePtr nodeXXXX = NULL; xmlNsPtr ns; assert(pro); dp=GWEN_INHERIT_GETDATA(AB_PROVIDER, EBC_PROVIDER, pro); assert(dp); /* get crypt token and context */ rv=EBC_Provider_MountToken(pro, u, &ct, &ctx); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); return rv; } /* get key id */ keyId=GWEN_Crypt_Token_Context_GetAuthSignKeyId(ctx); ki=GWEN_Crypt_Token_GetKeyInfo(ct, keyId, 0xffffffff, 0); if (ki==NULL) { DBG_INFO(AQEBICS_LOGDOMAIN, "Keyinfo %04x not found on crypt token [%s:%s]", keyId, GWEN_Crypt_Token_GetTypeName(ct), GWEN_Crypt_Token_GetTokenName(ct)); GWEN_Crypt_Token_Close(ct, 0, 0); return GWEN_ERROR_NOT_FOUND; } /* prepare signature nodes */ ns=xmlSearchNs(EB_Msg_GetDoc(msg), node, BAD_CAST "ds"); assert(ns); /* build hash */ bbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=EB_Msg_BuildHashSha256(msg, bbuf); if (rv) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Could not build hash"); GWEN_Buffer_free(bbuf); return rv; } /* base64 encode */ hbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_Base64_Encode((const uint8_t *)GWEN_Buffer_GetStart(bbuf), GWEN_Buffer_GetUsedBytes(bbuf), hbuf, 0); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(hbuf); GWEN_Buffer_free(bbuf); return rv; } GWEN_Buffer_free(bbuf); /* create signature node */ nodeX=xmlNewChild(node, ns, BAD_CAST "SignedInfo", NULL); nodeXX=xmlNewChild(nodeX, ns, BAD_CAST "CanonicalizationMethod", NULL); xmlNewProp(nodeXX, BAD_CAST "Algorithm", BAD_CAST "http://www.w3.org/TR/2001/REC-xml-c14n-20010315"); nodeXX=xmlNewChild(nodeX, ns, BAD_CAST "SignatureMethod", NULL); xmlNewProp(nodeXX, BAD_CAST "Algorithm", BAD_CAST "http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"); nodeXX=xmlNewChild(nodeX, ns, BAD_CAST "Reference", NULL); xmlNewProp(nodeXX, BAD_CAST "URI", BAD_CAST "#xpointer(//*[@authenticate='true'])"); nodeXXX=xmlNewChild(nodeXX, ns, BAD_CAST "Transforms", NULL); nodeXXXX=xmlNewChild(nodeXXX, ns, BAD_CAST "Transform", NULL); xmlNewProp(nodeXXXX, BAD_CAST "Algorithm", BAD_CAST "http://www.w3.org/TR/2001/REC-xml-c14n-20010315"); nodeXXX=xmlNewChild(nodeXX, ns, BAD_CAST "DigestMethod", NULL); xmlNewProp(nodeXXX, BAD_CAST "Algorithm", BAD_CAST "http://www.w3.org/2001/04/xmlenc#sha256"); /* store hash value */ xmlNewTextChild(nodeXX, ns, BAD_CAST "DigestValue", BAD_CAST GWEN_Buffer_GetStart(hbuf)); GWEN_Buffer_free(hbuf); /* build hash over SignedInfo */ bbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=EB_Xml_BuildNodeHashSha256(nodeX, "#xpointer(//*)", bbuf); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(bbuf); return rv; } /* sign hash */ if (1) { GWEN_CRYPT_PADDALGO *algo; int ksize; uint32_t l; const uint8_t prefix[]= { 0x30, 0x31, 0x30, 0x0d, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x05, 0x00, 0x04, 0x20 }; /* add prefix to hash of SignedInfo */ hbuf=GWEN_Buffer_new(0, 256, 0, 1); ksize=GWEN_Crypt_Token_KeyInfo_GetKeySize(ki); GWEN_Buffer_AppendBytes(hbuf, (const char *)prefix, sizeof(prefix)); GWEN_Buffer_AppendBuffer(hbuf, bbuf); GWEN_Buffer_Reset(bbuf); /* select padd algo */ algo=GWEN_Crypt_PaddAlgo_new(GWEN_Crypt_PaddAlgoId_Pkcs1_1); GWEN_Crypt_PaddAlgo_SetPaddSize(algo, ksize); /* actually sign */ GWEN_Buffer_AllocRoom(bbuf, ksize+16); l=GWEN_Buffer_GetMaxUnsegmentedWrite(bbuf); rv=GWEN_Crypt_Token_Sign(ct, keyId, algo, (const uint8_t *)GWEN_Buffer_GetStart(hbuf), GWEN_Buffer_GetUsedBytes(hbuf), (uint8_t *)GWEN_Buffer_GetPosPointer(bbuf), &l, NULL, /* ignore seq counter */ 0); GWEN_Crypt_PaddAlgo_free(algo); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(bbuf); GWEN_Buffer_free(hbuf); return rv; } GWEN_Buffer_IncrementPos(bbuf, l); GWEN_Buffer_AdjustUsedBytes(bbuf); /* base 64 encode signature */ GWEN_Buffer_Reset(hbuf); rv=GWEN_Base64_Encode((const uint8_t *)GWEN_Buffer_GetStart(bbuf), GWEN_Buffer_GetUsedBytes(bbuf), hbuf, 0); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(hbuf); GWEN_Buffer_free(bbuf); return rv; } GWEN_Buffer_free(bbuf); /* store signature */ xmlNewTextChild(node, ns, BAD_CAST "SignatureValue", BAD_CAST GWEN_Buffer_GetStart(hbuf)); GWEN_Buffer_free(hbuf); } return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqebics/client/p_encipher_e002.c0000664000175000017500000001173514043610744023262 00000000000000/*************************************************************************** begin : Thu May 15 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ static int EBC_Provider_EncryptData_E002(GWEN_UNUSED AB_PROVIDER *pro, GWEN_CRYPT_KEY *skey, const uint8_t *pData, uint32_t lData, GWEN_BUFFER *sbuf) { GWEN_BUFFER *tbuf; GWEN_BUFFER *ebuf; int rv; uint32_t l; /* zip */ tbuf=GWEN_Buffer_new(0, lData, 0, 1); rv=EB_Zip_Deflate((const char *)pData, lData, tbuf); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); return rv; } /* padd */ rv=GWEN_Padd_PaddWithAnsiX9_23ToMultipleOf(tbuf, 16); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); return rv; } /* encrypt */ ebuf=GWEN_Buffer_new(0, GWEN_Buffer_GetUsedBytes(tbuf)+16, 0, 1); l=GWEN_Buffer_GetMaxUnsegmentedWrite(ebuf); /* reset IV !! */ GWEN_Crypt_KeyAes128_SetIV(skey, NULL, 0); rv=GWEN_Crypt_Key_Encipher(skey, (uint8_t *)GWEN_Buffer_GetStart(tbuf), GWEN_Buffer_GetUsedBytes(tbuf), (uint8_t *)GWEN_Buffer_GetPosPointer(ebuf), &l); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(ebuf); GWEN_Buffer_free(tbuf); return rv; } GWEN_Buffer_IncrementPos(ebuf, l); GWEN_Buffer_AdjustUsedBytes(ebuf); GWEN_Buffer_free(tbuf); /* base64 encode encrypted data into given buffer */ rv=GWEN_Base64_Encode((const uint8_t *)GWEN_Buffer_GetStart(ebuf), GWEN_Buffer_GetUsedBytes(ebuf), sbuf, 0); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(ebuf); return rv; } GWEN_Buffer_free(ebuf); return 0; } static int EBC_Provider_EncryptKey_E002(AB_PROVIDER *pro, AB_USER *u, const GWEN_CRYPT_KEY *skey, GWEN_BUFFER *sbuf) { EBC_PROVIDER *dp; GWEN_BUFFER *kbuf; GWEN_BUFFER *ebuf; GWEN_CRYPT_TOKEN *ct; const GWEN_CRYPT_TOKEN_CONTEXT *ctx; const GWEN_CRYPT_TOKEN_KEYINFO *ki; uint32_t keyId; int ksize; uint32_t l; GWEN_CRYPT_PADDALGO *algo; int rv; assert(pro); dp=GWEN_INHERIT_GETDATA(AB_PROVIDER, EBC_PROVIDER, pro); assert(dp); /* get crypt token and context */ rv=EBC_Provider_MountToken(pro, u, &ct, &ctx); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); return rv; } /* get key id */ keyId=GWEN_Crypt_Token_Context_GetEncipherKeyId(ctx); ki=GWEN_Crypt_Token_GetKeyInfo(ct, keyId, 0xffffffff, 0); if (ki==NULL) { DBG_INFO(AQEBICS_LOGDOMAIN, "Keyinfo %04x not found on crypt token [%s:%s]", keyId, GWEN_Crypt_Token_GetTypeName(ct), GWEN_Crypt_Token_GetTokenName(ct)); GWEN_Crypt_Token_Close(ct, 0, 0); return GWEN_ERROR_NOT_FOUND; } ksize=GWEN_Crypt_Token_KeyInfo_GetKeySize(ki); /* get key data */ kbuf=GWEN_Buffer_new(0, 32, 0, 1); GWEN_Buffer_AppendBytes(kbuf, (const char *)GWEN_Crypt_KeyAes128_GetKeyDataPtr(skey), 16); /* select padd algo */ algo=GWEN_Crypt_PaddAlgo_new(GWEN_Crypt_PaddAlgoId_Pkcs1_2); GWEN_Crypt_PaddAlgo_SetPaddSize(algo, ksize); /* encipher key data */ ebuf=GWEN_Buffer_new(0, ksize+16, 0, 1); l=GWEN_Buffer_GetMaxUnsegmentedWrite(ebuf); rv=GWEN_Crypt_Token_Encipher(ct, keyId, algo, (const uint8_t *)GWEN_Buffer_GetStart(kbuf), GWEN_Buffer_GetUsedBytes(kbuf), (uint8_t *)GWEN_Buffer_GetStart(ebuf), &l, 0); GWEN_Crypt_PaddAlgo_free(algo); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(ebuf); GWEN_Buffer_free(kbuf); return rv; } GWEN_Buffer_IncrementPos(ebuf, l); GWEN_Buffer_AdjustUsedBytes(ebuf); GWEN_Buffer_free(kbuf); /* base64 encode encrypted data into given buffer */ rv=GWEN_Base64_Encode((const uint8_t *)GWEN_Buffer_GetStart(ebuf), GWEN_Buffer_GetUsedBytes(ebuf), sbuf, 0); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(ebuf); return rv; } GWEN_Buffer_free(ebuf); return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqebics/client/provider_l.h0000664000175000017500000001715114043610744022570 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AQEBICS_CLIENT_PROVIDER_L_H #define AQEBICS_CLIENT_PROVIDER_L_H #include "aqebics/client/provider.h" #include "aqebics/client/dialog_l.h" #include #include #include #include #include #include #define EBC_DEFAULT_CONNECT_TIMEOUT 30 #define EBC_DEFAULT_TRANSFER_TIMEOUT 60 int EBC_Provider_CreateKeys(AB_PROVIDER *pro, AB_USER *u, int cryptAndAuthKeySizeInBytes, int signKeySizeInBytes, int nounmount); int EBC_Provider_CreateTempKey(AB_PROVIDER *pro, AB_USER *u, int signKeySizeInBytes, int nounmount); int EBC_Provider_GetIniLetterTxt(AB_PROVIDER *pro, AB_USER *u, int useBankKey, GWEN_BUFFER *lbuf, int nounmount); int EBC_Provider_GetHiaLetterTxt(AB_PROVIDER *pro, AB_USER *u, int useBankKey, GWEN_BUFFER *lbuf, int nounmount); int EBC_Provider_GetCert(AB_PROVIDER *pro, AB_USER *u); int EBC_Provider_AddBankPubKeyDigests(AB_PROVIDER *pro, AB_USER *u, xmlNodePtr node); int EBC_Provider_DecodeAndDecryptData(AB_PROVIDER *pro, AB_USER *u, GWEN_CRYPT_KEY *skey, const char *sEncryptedData, GWEN_BUFFER *targetBuffer); int EBC_Provider_Send_HIA(AB_PROVIDER *pro, AB_USER *u, int doLock); int EBC_Provider_Send_INI(AB_PROVIDER *pro, AB_USER *u, int doLock); int EBC_Provider_Send_PUB(AB_PROVIDER *pro, AB_USER *u, const char *signVersion, int doLock); int EBC_Provider_Send_HPB(AB_PROVIDER *pro, AB_USER *u, int doLock); int EBC_Provider_Send_HPD(AB_PROVIDER *pro, AB_USER *u, int doLock); int EBC_Provider_Send_HKD(AB_PROVIDER *pro, AB_USER *u, int doLock); int EBC_Provider_Send_HTD(AB_PROVIDER *pro, AB_USER *u, int doLock); int EBC_Provider_Download(AB_PROVIDER *pro, AB_USER *u, const char *rtype, GWEN_BUFFER *targetBuffer, int withReceipt, const GWEN_DATE *fromDate, const GWEN_DATE *toDate, int doLock); int EBC_Provider_DownloadWithSession(AB_PROVIDER *pro, GWEN_HTTP_SESSION *sess, AB_USER *u, const char *rtype, GWEN_BUFFER *targetBuffer, int withReceipt, const GWEN_DATE *fromDate, const GWEN_DATE *toDate, int doLock); int EBC_Provider_Upload(AB_PROVIDER *pro, AB_USER *u, const char *rtype, const uint8_t *pData, uint32_t lData, int doLock); int EBC_Provider_DownloadIntoContext(AB_PROVIDER *pro, AB_USER *u, const char *rtype, int withReceipt, const GWEN_DATE *fromDate, const GWEN_DATE *toDate, const char *importerName, const char *profileName, AB_IMEXPORTER_CONTEXT *ctx, int doLock); int EBC_Provider_DownloadIntoContextWithSession(AB_PROVIDER *pro, GWEN_HTTP_SESSION *sess, AB_USER *u, const char *rtype, int withReceipt, const GWEN_DATE *fromDate, const GWEN_DATE *toDate, const char *importerName, const char *profileName, AB_IMEXPORTER_CONTEXT *ctx, int doLock); int EBC_Provider_GetConnectTimeout(const AB_PROVIDER *pro); int EBC_Provider_GetTransferTimeout(const AB_PROVIDER *pro); int EBC_Provider_SignMessage(AB_PROVIDER *pro, EB_MSG *msg, AB_USER *u, xmlNodePtr node); int EBC_Provider_ExtractSessionKey(AB_PROVIDER *pro, AB_USER *u, xmlNodePtr node, GWEN_CRYPT_KEY **pKey); int EBC_Provider_DecryptData(AB_PROVIDER *pro, AB_USER *u, GWEN_CRYPT_KEY *skey, const uint8_t *p, uint32_t len, GWEN_BUFFER *msgBuffer); int EBC_Provider_EncryptData(AB_PROVIDER *pro, AB_USER *u, GWEN_CRYPT_KEY *skey, const uint8_t *pData, uint32_t lData, GWEN_BUFFER *sbuf); int EBC_Provider_EncryptKey(AB_PROVIDER *pro, AB_USER *u, const GWEN_CRYPT_KEY *skey, GWEN_BUFFER *sbuf); int EBC_Provider_GenerateNonce(AB_PROVIDER *pro, GWEN_BUFFER *buf); int EBC_Provider_GenerateTimeStamp(AB_PROVIDER *pro, AB_USER *u, GWEN_BUFFER *buf); int EBC_Provider_Generate_OrderId(AB_PROVIDER *pro, GWEN_BUFFER *buf); int EBC_Provider_MountToken(AB_PROVIDER *pro, AB_USER *u, GWEN_CRYPT_TOKEN **pCt, const GWEN_CRYPT_TOKEN_CONTEXT **pCtx); GWEN_LOGGER_LEVEL EBC_Provider_ResultCodeToLogLevel(AB_PROVIDER *pro, const char *s); void EBC_Provider_LogRequestResults(AB_PROVIDER *pro, EB_MSG *mRsp, GWEN_BUFFER *logbuf); int EBC_Provider_MkEuCryptZipDoc(AB_PROVIDER *pro, AB_USER *u, const char *requestType, const uint8_t *pMsg, uint32_t lMsg, GWEN_CRYPT_KEY *skey, GWEN_BUFFER *sbuf); int EBC_Provider_FillDataEncryptionInfoNode(AB_PROVIDER *pro, AB_USER *u, const GWEN_CRYPT_KEY *skey, xmlNodePtr node); int EBC_Provider_Sha256(const uint8_t *pData, uint32_t lData, GWEN_BUFFER *hbuf); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqebics/client/testlib.c0000664000175000017500000000006514043610744022060 00000000000000 int main(int argc, char **argv) { return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqebics/client/p_eu_a004.c0000664000175000017500000002021214043610744022062 00000000000000/*************************************************************************** begin : Wed May 14 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #include "aqebics/msg/eu.h" #include int EBC_Provider_EuSign_A004(AB_PROVIDER *pro, AB_USER *u, const char *requestType, const uint8_t *pMsg, uint32_t lMsg, GWEN_BUFFER *sbuf) { EBC_PROVIDER *dp; GWEN_MDIGEST *md; GWEN_BUFFER *hbuf; GWEN_BUFFER *ebuf; GWEN_CRYPT_TOKEN *ct; const GWEN_CRYPT_TOKEN_CONTEXT *ctx; const GWEN_CRYPT_TOKEN_KEYINFO *ki; uint32_t keyId; int ksize; uint32_t l; GWEN_CRYPT_PADDALGO *algo; EB_EU *eu; GWEN_TIME *ti; int rv; const char *userId; assert(pro); dp=GWEN_INHERIT_GETDATA(AB_PROVIDER, EBC_PROVIDER, pro); assert(dp); userId=AB_User_GetUserId(u); md=GWEN_MDigest_Rmd160_new(); assert(md); rv=GWEN_MDigest_Begin(md); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_MDigest_free(md); return rv; } rv=GWEN_MDigest_Update(md, pMsg, lMsg); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_MDigest_free(md); return rv; } rv=GWEN_MDigest_End(md); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_MDigest_free(md); return rv; } hbuf=GWEN_Buffer_new(0, GWEN_MDigest_GetDigestSize(md), 0, 1); GWEN_Buffer_AppendBytes(hbuf, (const char *)GWEN_MDigest_GetDigestPtr(md), GWEN_MDigest_GetDigestSize(md)); GWEN_MDigest_free(md); /* get crypt token and context */ rv=EBC_Provider_MountToken(pro, u, &ct, &ctx); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); return rv; } /* get key id */ keyId=GWEN_Crypt_Token_Context_GetSignKeyId(ctx); ki=GWEN_Crypt_Token_GetKeyInfo(ct, keyId, 0xffffffff, 0); if (ki==NULL) { DBG_INFO(AQEBICS_LOGDOMAIN, "Keyinfo %04x not found on crypt token [%s:%s]", keyId, GWEN_Crypt_Token_GetTypeName(ct), GWEN_Crypt_Token_GetTokenName(ct)); GWEN_Crypt_Token_Close(ct, 0, 0); GWEN_Buffer_free(hbuf); return GWEN_ERROR_NOT_FOUND; } ksize=GWEN_Crypt_Token_KeyInfo_GetKeySize(ki); /* select padd algo */ algo=GWEN_Crypt_PaddAlgo_new(GWEN_Crypt_PaddAlgoId_Iso9796_2); GWEN_Crypt_PaddAlgo_SetPaddSize(algo, ksize); /* actually sign */ ebuf=GWEN_Buffer_new(0, ksize+16, 0, 1); l=GWEN_Buffer_GetMaxUnsegmentedWrite(ebuf); rv=GWEN_Crypt_Token_Sign(ct, keyId, algo, (const uint8_t *)GWEN_Buffer_GetStart(hbuf), GWEN_Buffer_GetUsedBytes(hbuf), (uint8_t *)GWEN_Buffer_GetPosPointer(ebuf), &l, NULL, /* ignore seq counter */ 0); GWEN_Crypt_PaddAlgo_free(algo); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(ebuf); GWEN_Buffer_free(hbuf); return rv; } GWEN_Buffer_IncrementPos(ebuf, l); GWEN_Buffer_AdjustUsedBytes(ebuf); GWEN_Buffer_free(hbuf); /* assemble EU */ eu=EB_Eu_new(); EB_Eu_SetVersion(eu, "A004"); EB_Eu_SetModLen(eu, ksize*8); EB_Eu_SetJobType(eu, requestType); EB_Eu_SetSignature(eu, (const uint8_t *) GWEN_Buffer_GetStart(ebuf), GWEN_Buffer_GetUsedBytes(ebuf)); GWEN_Buffer_free(ebuf); ti=GWEN_CurrentTime(); EB_Eu_SetCreationTime(eu, ti); EB_Eu_SetSignatureTime(eu, ti); GWEN_Time_free(ti); EB_Eu_SetUserId(eu, userId); /* store EU in given buffer */ EB_Eu_toBuffer(eu, sbuf); EB_Eu_free(eu); return 0; } int EBC_Provider_MkEuZipDoc_A004(AB_PROVIDER *pro, AB_USER *u, const char *requestType, const uint8_t *pMsg, uint32_t lMsg, GWEN_BUFFER *sbuf) { int rv; xmlDocPtr doc; xmlNodePtr root_node; xmlNodePtr node; xmlNsPtr ns; GWEN_BUFFER *tbuf; GWEN_BUFFER *bbuf; tbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=EBC_Provider_EuSign_A004(pro, u, requestType, pMsg, lMsg, tbuf); if (rv) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); return rv; } bbuf=GWEN_Buffer_new(0, (GWEN_Buffer_GetUsedBytes(tbuf)*3)/2, 0, 1); rv=GWEN_Base64_Encode((const uint8_t *)GWEN_Buffer_GetStart(tbuf), GWEN_Buffer_GetUsedBytes(tbuf), bbuf, 0); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(bbuf); GWEN_Buffer_free(tbuf); return rv; } GWEN_Buffer_free(tbuf); doc=xmlNewDoc(BAD_CAST "1.0"); root_node=xmlNewNode(NULL, BAD_CAST "UserSignatureData"); xmlDocSetRootElement(doc, root_node); ns=xmlNewNs(root_node, BAD_CAST "http://www.ebics.org/H002", NULL); assert(ns); ns=xmlNewNs(root_node, BAD_CAST "http://www.w3.org/2001/XMLSchema-instance", BAD_CAST "xsi"); xmlNewNsProp(root_node, ns, BAD_CAST "schemaLocation", /* xsi:schemaLocation */ BAD_CAST "http://www.ebics.org/H002 " "http://www.ebics.org/H002/ebics_orders.xsd"); node=xmlNewTextChild(root_node, NULL, BAD_CAST "OrderSignature", BAD_CAST GWEN_Buffer_GetStart(bbuf)); GWEN_Buffer_free(bbuf); xmlNewProp(node, BAD_CAST "PartnerID", BAD_CAST AB_User_GetCustomerId(u)); rv=EB_Xml_CompressDoc(doc, sbuf); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); xmlFreeDoc(doc); return rv; } xmlFreeDoc(doc); return 0; } int EBC_Provider_MkEuCryptZipDoc_A004(AB_PROVIDER *pro, AB_USER *u, const char *requestType, const uint8_t *pMsg, uint32_t lMsg, GWEN_CRYPT_KEY *skey, GWEN_BUFFER *sbuf) { GWEN_BUFFER *tbuf; GWEN_BUFFER *ebuf; int rv; uint32_t l; DBG_INFO(AQEBICS_LOGDOMAIN, "Generating EU A004"); tbuf=GWEN_Buffer_new(0, 512, 0, 1); rv=EBC_Provider_MkEuZipDoc_A004(pro, u, requestType, pMsg, lMsg, tbuf); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); return rv; } /* padd EU */ rv=GWEN_Padd_PaddWithAnsiX9_23(tbuf); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); return rv; } /* encrypt EU with the DES session key */ ebuf=GWEN_Buffer_new(0, GWEN_Buffer_GetUsedBytes(tbuf)+16, 0, 1); l=GWEN_Buffer_GetMaxUnsegmentedWrite(ebuf); /* reset IV !! */ GWEN_Crypt_KeyDes3K_SetIV(skey, NULL, 0); rv=GWEN_Crypt_Key_Encipher(skey, (uint8_t *)GWEN_Buffer_GetStart(tbuf), GWEN_Buffer_GetUsedBytes(tbuf), (uint8_t *)GWEN_Buffer_GetPosPointer(ebuf), &l); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(ebuf); GWEN_Buffer_free(tbuf); return rv; } GWEN_Buffer_free(tbuf); GWEN_Buffer_IncrementPos(ebuf, l); GWEN_Buffer_AdjustUsedBytes(ebuf); /* base64 encode encrypted EU into given buffer */ rv=GWEN_Base64_Encode((const uint8_t *)GWEN_Buffer_GetStart(ebuf), GWEN_Buffer_GetUsedBytes(ebuf), sbuf, 0); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(ebuf); return rv; } GWEN_Buffer_free(ebuf); return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqebics/client/user_l.h0000664000175000017500000000121714043610744021710 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef EBC_CLIENT_USER_L_H #define EBC_CLIENT_USER_L_H #include "aqebics/client/user.h" #include AB_USER *EBC_User_new(AB_PROVIDER *pro); #endif /* EBC_CLIENT_USER_L_H */ aqbanking-6.6.1/src/libs/plugins/backends/aqebics/client/p_eu_a005.c0000664000175000017500000002011214043610744022062 00000000000000/*************************************************************************** begin : Tue Jun 08 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ int EBC_Provider_EuSign_A005(AB_PROVIDER *pro, AB_USER *u, const char *requestType, const uint8_t *pMsg, uint32_t lMsg, GWEN_BUFFER *sbuf) { EBC_PROVIDER *dp; GWEN_BUFFER *xbuf; GWEN_BUFFER *hbuf; GWEN_CRYPT_TOKEN *ct; const GWEN_CRYPT_TOKEN_CONTEXT *ctx; const GWEN_CRYPT_TOKEN_KEYINFO *ki; uint32_t keyId; int ksize; uint32_t l; GWEN_CRYPT_PADDALGO *algo; int rv; int numPaddBytes=0; const uint8_t digestInfo[]= { 0x30, 0x31, 0x30, 0x0d, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x05, 0x00, 0x04, 0x20 }; assert(pro); dp=GWEN_INHERIT_GETDATA(AB_PROVIDER, EBC_PROVIDER, pro); assert(dp); /* get crypt token and context */ rv=EBC_Provider_MountToken(pro, u, &ct, &ctx); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); return rv; } /* get key id */ keyId=GWEN_Crypt_Token_Context_GetSignKeyId(ctx); ki=GWEN_Crypt_Token_GetKeyInfo(ct, keyId, 0xffffffff, 0); if (ki==NULL) { DBG_INFO(AQEBICS_LOGDOMAIN, "Keyinfo %04x not found on crypt token [%s:%s]", keyId, GWEN_Crypt_Token_GetTypeName(ct), GWEN_Crypt_Token_GetTokenName(ct)); GWEN_Crypt_Token_Close(ct, 0, 0); return GWEN_ERROR_NOT_FOUND; } xbuf=GWEN_Buffer_new(0, 40, 0, 1); EBC_Provider_Sha256(pMsg, lMsg, xbuf); /* add digestInfo to hash of SignedInfo */ hbuf=GWEN_Buffer_new(0, 256, 0, 1); ksize=GWEN_Crypt_Token_KeyInfo_GetKeySize(ki); GWEN_Buffer_AppendByte(hbuf, 0x01); /* block type */ numPaddBytes=ksize-3-sizeof(digestInfo)-GWEN_Buffer_GetUsedBytes(xbuf); if (numPaddBytes<1) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Invalid number of padd bytes, key too small (%d)", numPaddBytes); GWEN_Buffer_free(xbuf); GWEN_Buffer_free(hbuf); return GWEN_ERROR_INTERNAL; } GWEN_Buffer_FillWithBytes(hbuf, 0xff, numPaddBytes); GWEN_Buffer_AppendByte(hbuf, 0x01); /* separator */ GWEN_Buffer_AppendBytes(hbuf, (const char *)digestInfo, sizeof(digestInfo)); /* digest info */ GWEN_Buffer_AppendBytes(hbuf, GWEN_Buffer_GetStart(xbuf), GWEN_Buffer_GetUsedBytes(xbuf)); /* hash */ GWEN_Buffer_free(xbuf); /* select padd algo */ algo=GWEN_Crypt_PaddAlgo_new(GWEN_Crypt_PaddAlgoId_None); GWEN_Crypt_PaddAlgo_SetPaddSize(algo, ksize); /* actually sign */ GWEN_Buffer_AllocRoom(sbuf, ksize+16); l=GWEN_Buffer_GetMaxUnsegmentedWrite(sbuf); rv=GWEN_Crypt_Token_Sign(ct, keyId, algo, (const uint8_t *)GWEN_Buffer_GetStart(hbuf), GWEN_Buffer_GetUsedBytes(hbuf), (uint8_t *)GWEN_Buffer_GetPosPointer(sbuf), &l, NULL, /* ignore seq counter */ 0); GWEN_Crypt_PaddAlgo_free(algo); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(hbuf); return rv; } GWEN_Buffer_IncrementPos(sbuf, l); GWEN_Buffer_AdjustUsedBytes(sbuf); GWEN_Buffer_free(hbuf); return 0; } int EBC_Provider_MkEuZipDoc_A005(AB_PROVIDER *pro, AB_USER *u, const char *requestType, const uint8_t *pMsg, uint32_t lMsg, GWEN_BUFFER *sbuf) { int rv; xmlDocPtr doc; xmlNodePtr root_node; xmlNodePtr node; xmlNsPtr ns; GWEN_BUFFER *tbuf; GWEN_BUFFER *bbuf; tbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=EBC_Provider_EuSign_A005(pro, u, requestType, pMsg, lMsg, tbuf); if (rv) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); return rv; } bbuf=GWEN_Buffer_new(0, (GWEN_Buffer_GetUsedBytes(tbuf)*3)/2, 0, 1); rv=GWEN_Base64_Encode((const uint8_t *)GWEN_Buffer_GetStart(tbuf), GWEN_Buffer_GetUsedBytes(tbuf), bbuf, 0); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(bbuf); GWEN_Buffer_free(tbuf); return rv; } GWEN_Buffer_free(tbuf); doc=xmlNewDoc(BAD_CAST "1.0"); root_node=xmlNewNode(NULL, BAD_CAST "UserSignatureData"); xmlDocSetRootElement(doc, root_node); ns=xmlNewNs(root_node, BAD_CAST "http://www.ebics.org/S001", NULL); assert(ns); ns=xmlNewNs(root_node, BAD_CAST "http://www.w3.org/2001/XMLSchema-instance", BAD_CAST "xsi"); xmlNewNsProp(root_node, ns, BAD_CAST "schemaLocation", /* xsi:schemaLocation */ BAD_CAST "http://www.ebics.org/S001 " "http://www.ebics.org/S001/ebics_signature.xsd"); node=xmlNewChild(root_node, NULL, BAD_CAST "OrderSignatureData", NULL); xmlNewTextChild(node, NULL, BAD_CAST "SignatureVersion", BAD_CAST "A005"); xmlNewTextChild(node, NULL, BAD_CAST "SignatureValue", BAD_CAST GWEN_Buffer_GetStart(bbuf)); GWEN_Buffer_free(bbuf); xmlNewTextChild(node, NULL, BAD_CAST "PartnerID", BAD_CAST AB_User_GetCustomerId(u)); xmlNewTextChild(node, NULL, BAD_CAST "UserID", BAD_CAST AB_User_GetUserId(u)); rv=EB_Xml_CompressDoc(doc, sbuf); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); xmlFreeDoc(doc); return rv; } xmlFreeDoc(doc); return 0; } int EBC_Provider_MkEuCryptZipDoc_A005(AB_PROVIDER *pro, AB_USER *u, const char *requestType, const uint8_t *pMsg, uint32_t lMsg, GWEN_CRYPT_KEY *skey, GWEN_BUFFER *sbuf) { GWEN_BUFFER *tbuf; GWEN_BUFFER *ebuf; int rv; uint32_t l; DBG_INFO(AQEBICS_LOGDOMAIN, "Generating EU A005"); tbuf=GWEN_Buffer_new(0, 512, 0, 1); rv=EBC_Provider_MkEuZipDoc_A005(pro, u, requestType, pMsg, lMsg, tbuf); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); return rv; } /* padd EU */ rv=GWEN_Padd_PaddWithAnsiX9_23ToMultipleOf(tbuf, 16); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); return rv; } /* encrypt EU with the DES session key */ ebuf=GWEN_Buffer_new(0, GWEN_Buffer_GetUsedBytes(tbuf)+16, 0, 1); l=GWEN_Buffer_GetMaxUnsegmentedWrite(ebuf); /* reset IV !! */ GWEN_Crypt_KeyAes128_SetIV(skey, NULL, 0); rv=GWEN_Crypt_Key_Encipher(skey, (uint8_t *)GWEN_Buffer_GetStart(tbuf), GWEN_Buffer_GetUsedBytes(tbuf), (uint8_t *)GWEN_Buffer_GetPosPointer(ebuf), &l); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(ebuf); GWEN_Buffer_free(tbuf); return rv; } GWEN_Buffer_free(tbuf); GWEN_Buffer_IncrementPos(ebuf, l); GWEN_Buffer_AdjustUsedBytes(ebuf); /* base64 encode encrypted EU into given buffer */ rv=GWEN_Base64_Encode((const uint8_t *)GWEN_Buffer_GetStart(ebuf), GWEN_Buffer_GetUsedBytes(ebuf), sbuf, 0); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(ebuf); return rv; } GWEN_Buffer_free(ebuf); return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqebics/client/p_encipher.c0000664000175000017500000000326314043610744022531 00000000000000/*************************************************************************** begin : Thu May 15 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ int EBC_Provider_EncryptData(AB_PROVIDER *pro, AB_USER *u, GWEN_CRYPT_KEY *skey, const uint8_t *pData, uint32_t lData, GWEN_BUFFER *sbuf) { const char *s; s=EBC_User_GetCryptVersion(u); if (!(s && *s)) s="E001"; if (strcasecmp(s, "E001")==0) return EBC_Provider_EncryptData_E001(pro, skey, pData, lData, sbuf); else if (strcasecmp(s, "E002")==0) return EBC_Provider_EncryptData_E002(pro, skey, pData, lData, sbuf); else { DBG_ERROR(AQEBICS_LOGDOMAIN, "Version [%s] not supported", s); return GWEN_ERROR_BAD_DATA; } } int EBC_Provider_EncryptKey(AB_PROVIDER *pro, AB_USER *u, const GWEN_CRYPT_KEY *skey, GWEN_BUFFER *sbuf) { const char *s; s=EBC_User_GetCryptVersion(u); if (!(s && *s)) s="E001"; if (strcasecmp(s, "E001")==0) return EBC_Provider_EncryptKey_E001(pro, u, skey, sbuf); else if (strcasecmp(s, "E002")==0) return EBC_Provider_EncryptKey_E002(pro, u, skey, sbuf); else { DBG_ERROR(AQEBICS_LOGDOMAIN, "Version [%s] not supported", s); return GWEN_ERROR_BAD_DATA; } } aqbanking-6.6.1/src/libs/plugins/backends/aqebics/client/provider_accspec.c0000664000175000017500000000614014043610744023725 00000000000000/*************************************************************************** begin : Wed Dec 26 2018 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ int EBC_Provider__CreateTransactionLimitsForAccount(AB_PROVIDER *pro, AB_ACCOUNT *acc, AB_TRANSACTION_LIMITS_LIST *tll) { int i; int jobList[]= { /* AB_Transaction_CommandGetBalance, */ AB_Transaction_CommandGetTransactions, /* AB_Transaction_CommandLoadCellPhone, */ /* AB_Transaction_CommandSepaTransfer, */ /* AB_Transaction_CommandSepaDebitNote, */ /* AB_Transaction_CommandSepaFlashDebitNote, */ /* AB_Transaction_CommandSepaCreateStandingOrder, */ /* AB_Transaction_CommandSepaModifyStandingOrder, */ /* AB_Transaction_CommandSepaDeleteStandingOrder, */ /* AB_Transaction_CommandSepaGetStandingOrders, */ /* AB_Transaction_CommandGetEStatements, */ AB_Transaction_CommandUnknown }; i=0; while (jobList[i]!=AB_Transaction_CommandUnknown) { AB_TRANSACTION_LIMITS *limits=NULL; DBG_INFO(AQEBICS_LOGDOMAIN, "Handling job \"%s\"", AB_Transaction_Command_toString(jobList[i])); limits=AB_TransactionLimits_new(); AB_TransactionLimits_SetCommand(limits, jobList[i]); AB_TransactionLimits_SetMaxLenPurpose(limits, 35); AB_TransactionLimits_SetMaxLinesPurpose(limits, 4); AB_TransactionLimits_SetMaxLenRemoteName(limits, 70); DBG_INFO(AQEBICS_LOGDOMAIN, "- adding limits"); AB_TransactionLimits_List_Add(limits, tll); i++; } /* while */ return 0; } int EBC_Provider_UpdateAccountSpec(AB_PROVIDER *pro, AB_ACCOUNT_SPEC *as, int doLock) { int rv; uint32_t aid=0; AB_ACCOUNT *a=NULL; uint32_t uid=0; AB_TRANSACTION_LIMITS_LIST *tll; DBG_INFO(AQEBICS_LOGDOMAIN, "Updating account spec for account %u", (unsigned int) AB_AccountSpec_GetUniqueId(as)); /* get unique account id */ aid=AB_AccountSpec_GetUniqueId(as); if (aid==0) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Account has no unique id assigned, SNH!"); return GWEN_ERROR_INTERNAL; } /* get corresponding account */ rv=AB_Provider_GetAccount(pro, aid, doLock, doLock, &a); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); AB_Account_free(a); return rv; } assert(a); /* get user id */ uid=AB_Account_GetUserId(a); if (uid==0) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Account has no user id assigned, SNH!"); return GWEN_ERROR_INTERNAL; } /* create and set transaction limits per command */ tll=AB_TransactionLimits_List_new(); rv=EBC_Provider__CreateTransactionLimitsForAccount(pro, a, tll); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); AB_TransactionLimits_List_free(tll); AB_Account_free(a); return rv; } AB_AccountSpec_SetTransactionLimitsList(as, tll); AB_Account_free(a); return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqebics/client/p_sign_x001.c0000664000175000017500000001371414043610744022446 00000000000000/*************************************************************************** begin : Tue Mar 04 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ static int EBC_Provider_SignMessage_X001(AB_PROVIDER *pro, EB_MSG *msg, AB_USER *u, xmlNodePtr node) { EBC_PROVIDER *dp; int rv; GWEN_CRYPT_TOKEN *ct; const GWEN_CRYPT_TOKEN_CONTEXT *ctx; const GWEN_CRYPT_TOKEN_KEYINFO *ki; uint32_t keyId; GWEN_BUFFER *hbuf; GWEN_BUFFER *bbuf; xmlNodePtr nodeX = NULL; xmlNodePtr nodeXX = NULL; xmlNodePtr nodeXXX = NULL; xmlNodePtr nodeXXXX = NULL; xmlNsPtr ns; assert(pro); dp=GWEN_INHERIT_GETDATA(AB_PROVIDER, EBC_PROVIDER, pro); assert(dp); /* get crypt token and context */ rv=EBC_Provider_MountToken(pro, u, &ct, &ctx); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); return rv; } /* get key id */ keyId=GWEN_Crypt_Token_Context_GetAuthSignKeyId(ctx); ki=GWEN_Crypt_Token_GetKeyInfo(ct, keyId, 0xffffffff, 0); if (ki==NULL) { DBG_INFO(AQEBICS_LOGDOMAIN, "Keyinfo %04x not found on crypt token [%s:%s]", keyId, GWEN_Crypt_Token_GetTypeName(ct), GWEN_Crypt_Token_GetTokenName(ct)); GWEN_Crypt_Token_Close(ct, 0, 0); return GWEN_ERROR_NOT_FOUND; } /* prepare signature nodes */ ns=xmlSearchNs(EB_Msg_GetDoc(msg), node, BAD_CAST "ds"); assert(ns); /* build hash */ bbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=EB_Msg_BuildHashSha1(msg, bbuf); if (rv) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Could not build hash"); GWEN_Buffer_free(bbuf); return rv; } /* base64 encode */ hbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_Base64_Encode((const uint8_t *)GWEN_Buffer_GetStart(bbuf), GWEN_Buffer_GetUsedBytes(bbuf), hbuf, 0); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(hbuf); GWEN_Buffer_free(bbuf); return rv; } GWEN_Buffer_free(bbuf); /* create signature node */ nodeX=xmlNewChild(node, ns, BAD_CAST "SignedInfo", NULL); nodeXX=xmlNewChild(nodeX, ns, BAD_CAST "CanonicalizationMethod", NULL); xmlNewProp(nodeXX, BAD_CAST "Algorithm", BAD_CAST "http://www.w3.org/TR/2001/REC-xml-c14n-20010315"); nodeXX=xmlNewChild(nodeX, ns, BAD_CAST "SignatureMethod", NULL); xmlNewProp(nodeXX, BAD_CAST "Algorithm", BAD_CAST "http://www.w3.org/2000/09/xmldsig#rsa-sha1"); nodeXX=xmlNewChild(nodeX, ns, BAD_CAST "Reference", NULL); xmlNewProp(nodeXX, BAD_CAST "URI", BAD_CAST "#xpointer(//*[@authenticate='true'])"); nodeXXX=xmlNewChild(nodeXX, ns, BAD_CAST "Transforms", NULL); nodeXXXX=xmlNewChild(nodeXXX, ns, BAD_CAST "Transform", NULL); xmlNewProp(nodeXXXX, BAD_CAST "Algorithm", BAD_CAST "http://www.w3.org/TR/2001/REC-xml-c14n-20010315"); nodeXXX=xmlNewChild(nodeXX, ns, BAD_CAST "DigestMethod", NULL); xmlNewProp(nodeXXX, BAD_CAST "Algorithm", BAD_CAST "http://www.w3.org/2000/09/xmldsig#sha1"); /* store hash value */ xmlNewTextChild(nodeXX, ns, BAD_CAST "DigestValue", BAD_CAST GWEN_Buffer_GetStart(hbuf)); GWEN_Buffer_free(hbuf); /* build hash over SignedInfo */ bbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=EB_Xml_BuildNodeHashSha1(nodeX, "#xpointer(//*)", bbuf); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(bbuf); return rv; } /* sign hash */ if (1) { GWEN_CRYPT_PADDALGO *algo; int ksize; uint32_t l; const uint8_t prefix[]= { 0x30, 0x21, 0x30, 0x09, 0x06, 0x05, 0x2B, 0x0E, 0x03, 0x02, 0x1A, 0x05, 0x00, 0x04, 0x14 }; /* add prefix to hash of SignedInfo */ hbuf=GWEN_Buffer_new(0, 256, 0, 1); ksize=GWEN_Crypt_Token_KeyInfo_GetKeySize(ki); GWEN_Buffer_AppendBytes(hbuf, (const char *)prefix, sizeof(prefix)); GWEN_Buffer_AppendBuffer(hbuf, bbuf); GWEN_Buffer_Reset(bbuf); /* select padd algo */ algo=GWEN_Crypt_PaddAlgo_new(GWEN_Crypt_PaddAlgoId_Pkcs1_1); GWEN_Crypt_PaddAlgo_SetPaddSize(algo, ksize); /* actually sign */ GWEN_Buffer_AllocRoom(bbuf, ksize+16); l=GWEN_Buffer_GetMaxUnsegmentedWrite(bbuf); rv=GWEN_Crypt_Token_Sign(ct, keyId, algo, (const uint8_t *)GWEN_Buffer_GetStart(hbuf), GWEN_Buffer_GetUsedBytes(hbuf), (uint8_t *)GWEN_Buffer_GetPosPointer(bbuf), &l, NULL, /* ignore seq counter */ 0); GWEN_Crypt_PaddAlgo_free(algo); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(bbuf); GWEN_Buffer_free(hbuf); return rv; } GWEN_Buffer_IncrementPos(bbuf, l); GWEN_Buffer_AdjustUsedBytes(bbuf); /* base 64 encode signature */ GWEN_Buffer_Reset(hbuf); rv=GWEN_Base64_Encode((const uint8_t *)GWEN_Buffer_GetStart(bbuf), GWEN_Buffer_GetUsedBytes(bbuf), hbuf, 0); if (rv<0) { DBG_INFO(AQEBICS_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(hbuf); GWEN_Buffer_free(bbuf); return rv; } GWEN_Buffer_free(bbuf); /* store signature */ xmlNewTextChild(node, ns, BAD_CAST "SignatureValue", BAD_CAST GWEN_Buffer_GetStart(hbuf)); GWEN_Buffer_free(hbuf); } return 0; } aqbanking-6.6.1/src/libs/plugins/backends/aqebics/client/dialog_p.h0000664000175000017500000000146614043610744022203 00000000000000/*************************************************************************** $RCSfile: medium_p.h,v $ ------------------- cvs : $Id: medium_p.h,v 1.3 2006/01/23 05:16:27 aquamaniac Exp $ begin : Mon Mar 01 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef EBC_CLIENT_DIALOG_P_H #define EBC_CLIENT_DIALOG_P_H #include "dialog_l.h" typedef struct EBC_DIALOG EBC_DIALOG; struct EBC_DIALOG { int dummy; }; static GWENHYWFAR_CB void EBC_Dialog_FreeData(void *bp, void *p); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqebics/dummy.c0000664000175000017500000000000014043610745020255 00000000000000aqbanking-6.6.1/src/libs/plugins/backends/aqebics/Makefile.in0000644000175000017500000007367415037736024021057 00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/libs/plugins/backends/aqebics ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/distri.m4 $(top_srcdir)/m4/gwenhywfar.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/os.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = aqebics.xml CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) am__DEPENDENCIES_1 = libaqebics_la_DEPENDENCIES = msg/libmsg.la dialogs/libdialogs.la \ client/libclient.la requests/libaqebics_requests.la \ control/libebicscontrol.la $(am__DEPENDENCIES_1) am_libaqebics_la_OBJECTS = dummy.lo libaqebics_la_OBJECTS = $(am_libaqebics_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/dummy.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libaqebics_la_SOURCES) DIST_SOURCES = $(libaqebics_la_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(plugindir)" DATA = $(plugin_DATA) HEADERS = $(noinst_HEADERS) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir distdir-am am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/aqebics.xml.in \ $(top_srcdir)/depcomp TODO DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ADD_ACLOCAL_FLAGS = @ADD_ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AQBANKING_CLI_VERSION_STRING = @AQBANKING_CLI_VERSION_STRING@ AQBANKING_FINTS_VERSION_STRING = @AQBANKING_FINTS_VERSION_STRING@ AQBANKING_SO_AGE = @AQBANKING_SO_AGE@ AQBANKING_SO_CURRENT = @AQBANKING_SO_CURRENT@ AQBANKING_SO_EFFECTIVE = @AQBANKING_SO_EFFECTIVE@ AQBANKING_SO_REVISION = @AQBANKING_SO_REVISION@ AQBANKING_VERSION_BUILD = @AQBANKING_VERSION_BUILD@ AQBANKING_VERSION_FULL_STRING = @AQBANKING_VERSION_FULL_STRING@ AQBANKING_VERSION_MAJOR = @AQBANKING_VERSION_MAJOR@ AQBANKING_VERSION_MINOR = @AQBANKING_VERSION_MINOR@ AQBANKING_VERSION_PATCHLEVEL = @AQBANKING_VERSION_PATCHLEVEL@ AQBANKING_VERSION_RELEASE_STRING = @AQBANKING_VERSION_RELEASE_STRING@ AQBANKING_VERSION_STRING = @AQBANKING_VERSION_STRING@ AQBANKING_VERSION_TAG = @AQBANKING_VERSION_TAG@ AQEBICS_CFLAGS = @AQEBICS_CFLAGS@ AQEBICS_LIBS = @AQEBICS_LIBS@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATETIME = @DATETIME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_EXCLUDE_PATTERNS = @DOXYGEN_EXCLUDE_PATTERNS@ DOXYGEN_FILE_PATTERNS = @DOXYGEN_FILE_PATTERNS@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENGUI_GTK2_CFLAGS = @GWENGUI_GTK2_CFLAGS@ GWENGUI_GTK2_LIBS = @GWENGUI_GTK2_LIBS@ GWENHYWFAR_MINIMUM_VERSION = @GWENHYWFAR_MINIMUM_VERSION@ HAVE_GWENGUI_GTK2 = @HAVE_GWENGUI_GTK2@ HAVE_I18N = @HAVE_I18N@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIBXSLT_CFLAGS = @LIBXSLT_CFLAGS@ LIBXSLT_LIBS = @LIBXSLT_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_SUPPORTS_QT = @MSGFMT_SUPPORTS_QT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ TUTORIALS = @TUTORIALS@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XMLMERGE = @XMLMERGE@ XMLSEC_CFLAGS = @XMLSEC_CFLAGS@ XMLSEC_LIBS = @XMLSEC_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ aqbanking_backends = @aqbanking_backends@ aqbanking_cfg_searchdir = @aqbanking_cfg_searchdir@ aqbanking_data_searchdir = @aqbanking_data_searchdir@ aqbanking_headerdir = @aqbanking_headerdir@ aqbanking_headerdir_am = @aqbanking_headerdir_am@ aqbanking_includes = @aqbanking_includes@ aqbanking_internal_libs = @aqbanking_internal_libs@ aqbanking_ldflags = @aqbanking_ldflags@ aqbanking_libs = @aqbanking_libs@ aqbanking_locale_searchdir = @aqbanking_locale_searchdir@ aqbanking_modules = @aqbanking_modules@ aqbanking_pkgdatadir = @aqbanking_pkgdatadir@ aqbanking_plugin_searchdir = @aqbanking_plugin_searchdir@ aqbanking_plugindir = @aqbanking_plugindir@ aqbanking_plugins_backends_dirs = @aqbanking_plugins_backends_dirs@ aqbanking_plugins_backends_libs = @aqbanking_plugins_backends_libs@ aqbanking_plugins_bankinfo_dirs = @aqbanking_plugins_bankinfo_dirs@ aqbanking_plugins_bankinfo_libs = @aqbanking_plugins_bankinfo_libs@ aqbanking_plugins_imexporters_dirs = @aqbanking_plugins_imexporters_dirs@ aqbanking_plugins_imexporters_libs = @aqbanking_plugins_imexporters_libs@ aqbanking_plugins_parsers_dirs = @aqbanking_plugins_parsers_dirs@ aqbanking_symlinkdir = @aqbanking_symlinkdir@ aqbanking_sys_is_windows = @aqbanking_sys_is_windows@ aqbankingpp_modules = @aqbankingpp_modules@ aqebics_datadir = @aqebics_datadir@ aqebics_includes = @aqebics_includes@ aqebics_internal_libs = @aqebics_internal_libs@ aqebics_ldflags = @aqebics_ldflags@ aqebics_libs = @aqebics_libs@ aqfints_datadir = @aqfints_datadir@ aqhbci_datadir = @aqhbci_datadir@ aqhbci_includes = @aqhbci_includes@ aqhbci_internal_libs = @aqhbci_internal_libs@ aqhbci_ldflags = @aqhbci_ldflags@ aqhbci_libs = @aqhbci_libs@ aqofxconnect_includes = @aqofxconnect_includes@ aqofxconnect_internal_libs = @aqofxconnect_internal_libs@ aqofxconnect_libs = @aqofxconnect_libs@ aqpaypal_includes = @aqpaypal_includes@ aqpaypal_internal_libs = @aqpaypal_internal_libs@ aqpaypal_libs = @aqpaypal_libs@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gmp_libs = @gmp_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_dir = @gwenhywfar_dir@ gwenhywfar_has_crypt = @gwenhywfar_has_crypt@ gwenhywfar_headers = @gwenhywfar_headers@ gwenhywfar_includes = @gwenhywfar_includes@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_plugins = @gwenhywfar_plugins@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ typemaker2_exe = @typemaker2_exe@ visibility_cflags = @visibility_cflags@ with_aqebics = @with_aqebics@ with_aqhbci = @with_aqhbci@ SUBDIRS = msg client dialogs control requests AM_CPPFLAGS = -I$(top_srcdir)/src/libs -I$(top_builddir)/src/libs $(gwenhywfar_includes) -I$(srcdir)/.. $(AQEBICS_CFLAGS) AM_CFLAGS = -DBUILDING_AQBANKING @visibility_cflags@ EXTRA_DIST = aqebics.xml.in #iheaderdir=${includedir}/aqebics #iheader_HEADERS= plugindir = $(aqbanking_plugindir)/providers plugin_DATA = aqebics.xml noinst_HEADERS = \ aqebics.h \ aqebics_l.h # library noinst_LTLIBRARIES = libaqebics.la libaqebics_la_SOURCES = dummy.c libaqebics_la_LIBADD = \ msg/libmsg.la \ dialogs/libdialogs.la \ client/libclient.la \ requests/libaqebics_requests.la \ control/libebicscontrol.la -lz $(AQEBICS_LIBS) all: all-recursive .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libs/plugins/backends/aqebics/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libs/plugins/backends/aqebics/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): aqebics.xml: $(top_builddir)/config.status $(srcdir)/aqebics.xml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libaqebics.la: $(libaqebics_la_OBJECTS) $(libaqebics_la_DEPENDENCIES) $(EXTRA_libaqebics_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libaqebics_la_OBJECTS) $(libaqebics_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dummy.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-pluginDATA: $(plugin_DATA) @$(NORMAL_INSTALL) @list='$(plugin_DATA)'; test -n "$(plugindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(plugindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(plugindir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(plugindir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(plugindir)" || exit $$?; \ done uninstall-pluginDATA: @$(NORMAL_UNINSTALL) @list='$(plugin_DATA)'; test -n "$(plugindir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(plugindir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(plugindir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-recursive -rm -f ./$(DEPDIR)/dummy.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-pluginDATA install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f ./$(DEPDIR)/dummy.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-pluginDATA .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ am--depfiles check check-am clean clean-generic clean-libtool \ clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-pluginDATA install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am uninstall-pluginDATA .PRECIOUS: Makefile sources: for d in $(SUBDIRS); do \ $(MAKE) -C $$d sources; \ done for f in $(libaqebics_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done cppcheck: for f in $(libaqebics_la_SOURCES); do \ cppcheck --force $$f ; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done typefiles: typedefs: # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: aqbanking-6.6.1/src/libs/plugins/backends/aqebics/TODO0000664000175000017500000000002514043610744017454 00000000000000 - read BPD and UPD aqbanking-6.6.1/src/libs/plugins/backends/aqnone/0000755000175000017500000000000015037736163016727 500000000000000aqbanking-6.6.1/src/libs/plugins/backends/aqnone/provider_p.h0000664000175000017500000000117414043610745021167 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AN_PROVIDER_P_H #define AN_PROVIDER_P_H #include "provider_l.h" int AN_Provider_Init(AB_PROVIDER *pro, GWEN_DB_NODE *dbData); int AN_Provider_Fini(AB_PROVIDER *pro, GWEN_DB_NODE *dbData); #endif aqbanking-6.6.1/src/libs/plugins/backends/aqnone/Makefile.am0000664000175000017500000000147614043610745020706 00000000000000 AM_CPPFLAGS = -I$(top_srcdir)/src/libs -I$(top_builddir)/src/libs $(gwenhywfar_includes) -I$(srcdir)/.. AM_CFLAGS=-DBUILDING_AQBANKING @visibility_cflags@ EXTRA_DIST=aqnone.xml.in plugindir=@aqbanking_plugindir@/providers plugin_DATA=aqnone.xml noinst_HEADERS=provider_l.h provider_p.h # static plugin library noinst_LTLIBRARIES=libaqnone.la libaqnone_la_SOURCES=provider.c sources: for f in $(libaqnone_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for f in $(plugin_DATA); do \ echo $(subdir)/$$f >>$(top_srcdir)/pdsources; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d sources; \ done built_sources: cppcheck: for f in $(libaqnone_la_SOURCES); do \ cppcheck --force $$f ; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done typefiles: typedefs: aqbanking-6.6.1/src/libs/plugins/backends/aqnone/provider_l.h0000664000175000017500000000332414043610745021162 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AN_PROVIDER_L_H #define AN_PROVIDER_L_H #include #include /* ___________________________________________________________________________*/ #if 0 #ifdef BUILDING_AQNONE # /* building AqNONE */ # if AQBANKING_SYS_IS_WINDOWS # /* for windows */ # ifdef __declspec # define AQNONE_API __declspec (dllexport) # else /* if __declspec */ # define AQNONE_API # endif /* if NOT __declspec */ # else # /* for non-win32 */ # ifdef GCC_WITH_VISIBILITY_ATTRIBUTE # define AQNONE_API __attribute__((visibility("default"))) # else # define AQNONE_API # endif # endif #else # /* not building AqNONE */ # if AQBANKING_SYS_IS_WINDOWS # /* for windows */ # ifdef __declspec # define AQNONE_API __declspec (dllimport) # else /* if __declspec */ # define AQNONE_API # endif /* if NOT __declspec */ # else # /* for non-win32 */ # define AQNONE_API # endif #endif #endif /* ___________________________________________________________________________*/ /* no longer export symbols */ #define AQNONE_API #define AQNONE_BACKENDNAME "aqnone" #define AQNONE_LOGDOMAIN "aqnone" #ifdef __cplusplus extern "C" { #endif AQNONE_API AB_PROVIDER *AN_Provider_new(AB_BANKING *ab); #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/plugins/backends/aqnone/Makefile.in0000644000175000017500000006253615037736025020725 00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/libs/plugins/backends/aqnone ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/distri.m4 $(top_srcdir)/m4/gwenhywfar.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/os.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = aqnone.xml CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libaqnone_la_LIBADD = am_libaqnone_la_OBJECTS = provider.lo libaqnone_la_OBJECTS = $(am_libaqnone_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/provider.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libaqnone_la_SOURCES) DIST_SOURCES = $(libaqnone_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(plugindir)" DATA = $(plugin_DATA) HEADERS = $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/aqnone.xml.in \ $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADD_ACLOCAL_FLAGS = @ADD_ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AQBANKING_CLI_VERSION_STRING = @AQBANKING_CLI_VERSION_STRING@ AQBANKING_FINTS_VERSION_STRING = @AQBANKING_FINTS_VERSION_STRING@ AQBANKING_SO_AGE = @AQBANKING_SO_AGE@ AQBANKING_SO_CURRENT = @AQBANKING_SO_CURRENT@ AQBANKING_SO_EFFECTIVE = @AQBANKING_SO_EFFECTIVE@ AQBANKING_SO_REVISION = @AQBANKING_SO_REVISION@ AQBANKING_VERSION_BUILD = @AQBANKING_VERSION_BUILD@ AQBANKING_VERSION_FULL_STRING = @AQBANKING_VERSION_FULL_STRING@ AQBANKING_VERSION_MAJOR = @AQBANKING_VERSION_MAJOR@ AQBANKING_VERSION_MINOR = @AQBANKING_VERSION_MINOR@ AQBANKING_VERSION_PATCHLEVEL = @AQBANKING_VERSION_PATCHLEVEL@ AQBANKING_VERSION_RELEASE_STRING = @AQBANKING_VERSION_RELEASE_STRING@ AQBANKING_VERSION_STRING = @AQBANKING_VERSION_STRING@ AQBANKING_VERSION_TAG = @AQBANKING_VERSION_TAG@ AQEBICS_CFLAGS = @AQEBICS_CFLAGS@ AQEBICS_LIBS = @AQEBICS_LIBS@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATETIME = @DATETIME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_EXCLUDE_PATTERNS = @DOXYGEN_EXCLUDE_PATTERNS@ DOXYGEN_FILE_PATTERNS = @DOXYGEN_FILE_PATTERNS@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENGUI_GTK2_CFLAGS = @GWENGUI_GTK2_CFLAGS@ GWENGUI_GTK2_LIBS = @GWENGUI_GTK2_LIBS@ GWENHYWFAR_MINIMUM_VERSION = @GWENHYWFAR_MINIMUM_VERSION@ HAVE_GWENGUI_GTK2 = @HAVE_GWENGUI_GTK2@ HAVE_I18N = @HAVE_I18N@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIBXSLT_CFLAGS = @LIBXSLT_CFLAGS@ LIBXSLT_LIBS = @LIBXSLT_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_SUPPORTS_QT = @MSGFMT_SUPPORTS_QT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ TUTORIALS = @TUTORIALS@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XMLMERGE = @XMLMERGE@ XMLSEC_CFLAGS = @XMLSEC_CFLAGS@ XMLSEC_LIBS = @XMLSEC_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ aqbanking_backends = @aqbanking_backends@ aqbanking_cfg_searchdir = @aqbanking_cfg_searchdir@ aqbanking_data_searchdir = @aqbanking_data_searchdir@ aqbanking_headerdir = @aqbanking_headerdir@ aqbanking_headerdir_am = @aqbanking_headerdir_am@ aqbanking_includes = @aqbanking_includes@ aqbanking_internal_libs = @aqbanking_internal_libs@ aqbanking_ldflags = @aqbanking_ldflags@ aqbanking_libs = @aqbanking_libs@ aqbanking_locale_searchdir = @aqbanking_locale_searchdir@ aqbanking_modules = @aqbanking_modules@ aqbanking_pkgdatadir = @aqbanking_pkgdatadir@ aqbanking_plugin_searchdir = @aqbanking_plugin_searchdir@ aqbanking_plugindir = @aqbanking_plugindir@ aqbanking_plugins_backends_dirs = @aqbanking_plugins_backends_dirs@ aqbanking_plugins_backends_libs = @aqbanking_plugins_backends_libs@ aqbanking_plugins_bankinfo_dirs = @aqbanking_plugins_bankinfo_dirs@ aqbanking_plugins_bankinfo_libs = @aqbanking_plugins_bankinfo_libs@ aqbanking_plugins_imexporters_dirs = @aqbanking_plugins_imexporters_dirs@ aqbanking_plugins_imexporters_libs = @aqbanking_plugins_imexporters_libs@ aqbanking_plugins_parsers_dirs = @aqbanking_plugins_parsers_dirs@ aqbanking_symlinkdir = @aqbanking_symlinkdir@ aqbanking_sys_is_windows = @aqbanking_sys_is_windows@ aqbankingpp_modules = @aqbankingpp_modules@ aqebics_datadir = @aqebics_datadir@ aqebics_includes = @aqebics_includes@ aqebics_internal_libs = @aqebics_internal_libs@ aqebics_ldflags = @aqebics_ldflags@ aqebics_libs = @aqebics_libs@ aqfints_datadir = @aqfints_datadir@ aqhbci_datadir = @aqhbci_datadir@ aqhbci_includes = @aqhbci_includes@ aqhbci_internal_libs = @aqhbci_internal_libs@ aqhbci_ldflags = @aqhbci_ldflags@ aqhbci_libs = @aqhbci_libs@ aqofxconnect_includes = @aqofxconnect_includes@ aqofxconnect_internal_libs = @aqofxconnect_internal_libs@ aqofxconnect_libs = @aqofxconnect_libs@ aqpaypal_includes = @aqpaypal_includes@ aqpaypal_internal_libs = @aqpaypal_internal_libs@ aqpaypal_libs = @aqpaypal_libs@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gmp_libs = @gmp_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_dir = @gwenhywfar_dir@ gwenhywfar_has_crypt = @gwenhywfar_has_crypt@ gwenhywfar_headers = @gwenhywfar_headers@ gwenhywfar_includes = @gwenhywfar_includes@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_plugins = @gwenhywfar_plugins@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ typemaker2_exe = @typemaker2_exe@ visibility_cflags = @visibility_cflags@ with_aqebics = @with_aqebics@ with_aqhbci = @with_aqhbci@ AM_CPPFLAGS = -I$(top_srcdir)/src/libs -I$(top_builddir)/src/libs $(gwenhywfar_includes) -I$(srcdir)/.. AM_CFLAGS = -DBUILDING_AQBANKING @visibility_cflags@ EXTRA_DIST = aqnone.xml.in plugindir = @aqbanking_plugindir@/providers plugin_DATA = aqnone.xml noinst_HEADERS = provider_l.h provider_p.h # static plugin library noinst_LTLIBRARIES = libaqnone.la libaqnone_la_SOURCES = provider.c all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libs/plugins/backends/aqnone/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libs/plugins/backends/aqnone/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): aqnone.xml: $(top_builddir)/config.status $(srcdir)/aqnone.xml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libaqnone.la: $(libaqnone_la_OBJECTS) $(libaqnone_la_DEPENDENCIES) $(EXTRA_libaqnone_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libaqnone_la_OBJECTS) $(libaqnone_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/provider.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-pluginDATA: $(plugin_DATA) @$(NORMAL_INSTALL) @list='$(plugin_DATA)'; test -n "$(plugindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(plugindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(plugindir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(plugindir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(plugindir)" || exit $$?; \ done uninstall-pluginDATA: @$(NORMAL_UNINSTALL) @list='$(plugin_DATA)'; test -n "$(plugindir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(plugindir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(plugindir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/provider.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-pluginDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/provider.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-pluginDATA .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-generic clean-libtool clean-noinstLTLIBRARIES \ cscopelist-am ctags ctags-am distclean distclean-compile \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-pluginDATA install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \ uninstall-pluginDATA .PRECIOUS: Makefile sources: for f in $(libaqnone_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for f in $(plugin_DATA); do \ echo $(subdir)/$$f >>$(top_srcdir)/pdsources; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d sources; \ done built_sources: cppcheck: for f in $(libaqnone_la_SOURCES); do \ cppcheck --force $$f ; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done typefiles: typedefs: # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: aqbanking-6.6.1/src/libs/plugins/backends/aqnone/aqnone.xml.in0000664000175000017500000000042314043610745021251 00000000000000 @AQBANKING_VERSION_STRING@ Martin Preuss(martin@libchipcard.de) Offline backend This backend allows using offline accounts. aqbanking-6.6.1/src/libs/plugins/backends/aqnone/provider.c0000664000175000017500000000156714214726437020657 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "provider_p.h" AB_PROVIDER *AN_Provider_new(AB_BANKING *ab) { AB_PROVIDER *pro; pro=AB_Provider_new(ab, "aqnone"); AB_Provider_SetInitFn(pro, AN_Provider_Init); AB_Provider_SetFiniFn(pro, AN_Provider_Fini); return pro; } int AN_Provider_Init(AB_PROVIDER *pro, GWEN_DB_NODE *dbData) { return 0; } int AN_Provider_Fini(AB_PROVIDER *pro, GWEN_DB_NODE *dbData) { return 0; } aqbanking-6.6.1/src/libs/plugins/parsers/0000755000175000017500000000000015037736157015356 500000000000000aqbanking-6.6.1/src/libs/plugins/parsers/README0000664000175000017500000000010014043610745016135 00000000000000This folder contains GWEN_DBIO plugins for common data formats. aqbanking-6.6.1/src/libs/plugins/parsers/Makefile.am0000664000175000017500000000034214043610745017321 00000000000000SUBDIRS=$(aqbanking_plugins_parsers_dirs) DIST_SUBDIRS=swift sources: for d in $(SUBDIRS); do \ $(MAKE) -C $$d sources; \ done built_sources: cppcheck: for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done aqbanking-6.6.1/src/libs/plugins/parsers/Makefile.in0000644000175000017500000005602015037736026017341 00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/libs/plugins/parsers ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/distri.m4 $(top_srcdir)/m4/gwenhywfar.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/os.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir distdir-am am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` am__DIST_COMMON = $(srcdir)/Makefile.in README DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ADD_ACLOCAL_FLAGS = @ADD_ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AQBANKING_CLI_VERSION_STRING = @AQBANKING_CLI_VERSION_STRING@ AQBANKING_FINTS_VERSION_STRING = @AQBANKING_FINTS_VERSION_STRING@ AQBANKING_SO_AGE = @AQBANKING_SO_AGE@ AQBANKING_SO_CURRENT = @AQBANKING_SO_CURRENT@ AQBANKING_SO_EFFECTIVE = @AQBANKING_SO_EFFECTIVE@ AQBANKING_SO_REVISION = @AQBANKING_SO_REVISION@ AQBANKING_VERSION_BUILD = @AQBANKING_VERSION_BUILD@ AQBANKING_VERSION_FULL_STRING = @AQBANKING_VERSION_FULL_STRING@ AQBANKING_VERSION_MAJOR = @AQBANKING_VERSION_MAJOR@ AQBANKING_VERSION_MINOR = @AQBANKING_VERSION_MINOR@ AQBANKING_VERSION_PATCHLEVEL = @AQBANKING_VERSION_PATCHLEVEL@ AQBANKING_VERSION_RELEASE_STRING = @AQBANKING_VERSION_RELEASE_STRING@ AQBANKING_VERSION_STRING = @AQBANKING_VERSION_STRING@ AQBANKING_VERSION_TAG = @AQBANKING_VERSION_TAG@ AQEBICS_CFLAGS = @AQEBICS_CFLAGS@ AQEBICS_LIBS = @AQEBICS_LIBS@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATETIME = @DATETIME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_EXCLUDE_PATTERNS = @DOXYGEN_EXCLUDE_PATTERNS@ DOXYGEN_FILE_PATTERNS = @DOXYGEN_FILE_PATTERNS@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENGUI_GTK2_CFLAGS = @GWENGUI_GTK2_CFLAGS@ GWENGUI_GTK2_LIBS = @GWENGUI_GTK2_LIBS@ GWENHYWFAR_MINIMUM_VERSION = @GWENHYWFAR_MINIMUM_VERSION@ HAVE_GWENGUI_GTK2 = @HAVE_GWENGUI_GTK2@ HAVE_I18N = @HAVE_I18N@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIBXSLT_CFLAGS = @LIBXSLT_CFLAGS@ LIBXSLT_LIBS = @LIBXSLT_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_SUPPORTS_QT = @MSGFMT_SUPPORTS_QT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ TUTORIALS = @TUTORIALS@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XMLMERGE = @XMLMERGE@ XMLSEC_CFLAGS = @XMLSEC_CFLAGS@ XMLSEC_LIBS = @XMLSEC_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ aqbanking_backends = @aqbanking_backends@ aqbanking_cfg_searchdir = @aqbanking_cfg_searchdir@ aqbanking_data_searchdir = @aqbanking_data_searchdir@ aqbanking_headerdir = @aqbanking_headerdir@ aqbanking_headerdir_am = @aqbanking_headerdir_am@ aqbanking_includes = @aqbanking_includes@ aqbanking_internal_libs = @aqbanking_internal_libs@ aqbanking_ldflags = @aqbanking_ldflags@ aqbanking_libs = @aqbanking_libs@ aqbanking_locale_searchdir = @aqbanking_locale_searchdir@ aqbanking_modules = @aqbanking_modules@ aqbanking_pkgdatadir = @aqbanking_pkgdatadir@ aqbanking_plugin_searchdir = @aqbanking_plugin_searchdir@ aqbanking_plugindir = @aqbanking_plugindir@ aqbanking_plugins_backends_dirs = @aqbanking_plugins_backends_dirs@ aqbanking_plugins_backends_libs = @aqbanking_plugins_backends_libs@ aqbanking_plugins_bankinfo_dirs = @aqbanking_plugins_bankinfo_dirs@ aqbanking_plugins_bankinfo_libs = @aqbanking_plugins_bankinfo_libs@ aqbanking_plugins_imexporters_dirs = @aqbanking_plugins_imexporters_dirs@ aqbanking_plugins_imexporters_libs = @aqbanking_plugins_imexporters_libs@ aqbanking_plugins_parsers_dirs = @aqbanking_plugins_parsers_dirs@ aqbanking_symlinkdir = @aqbanking_symlinkdir@ aqbanking_sys_is_windows = @aqbanking_sys_is_windows@ aqbankingpp_modules = @aqbankingpp_modules@ aqebics_datadir = @aqebics_datadir@ aqebics_includes = @aqebics_includes@ aqebics_internal_libs = @aqebics_internal_libs@ aqebics_ldflags = @aqebics_ldflags@ aqebics_libs = @aqebics_libs@ aqfints_datadir = @aqfints_datadir@ aqhbci_datadir = @aqhbci_datadir@ aqhbci_includes = @aqhbci_includes@ aqhbci_internal_libs = @aqhbci_internal_libs@ aqhbci_ldflags = @aqhbci_ldflags@ aqhbci_libs = @aqhbci_libs@ aqofxconnect_includes = @aqofxconnect_includes@ aqofxconnect_internal_libs = @aqofxconnect_internal_libs@ aqofxconnect_libs = @aqofxconnect_libs@ aqpaypal_includes = @aqpaypal_includes@ aqpaypal_internal_libs = @aqpaypal_internal_libs@ aqpaypal_libs = @aqpaypal_libs@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gmp_libs = @gmp_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_dir = @gwenhywfar_dir@ gwenhywfar_has_crypt = @gwenhywfar_has_crypt@ gwenhywfar_headers = @gwenhywfar_headers@ gwenhywfar_includes = @gwenhywfar_includes@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_plugins = @gwenhywfar_plugins@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ typemaker2_exe = @typemaker2_exe@ visibility_cflags = @visibility_cflags@ with_aqebics = @with_aqebics@ with_aqhbci = @with_aqhbci@ SUBDIRS = $(aqbanking_plugins_parsers_dirs) DIST_SUBDIRS = swift all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libs/plugins/parsers/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libs/plugins/parsers/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic clean-libtool cscopelist-am ctags \ ctags-am distclean distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am .PRECIOUS: Makefile sources: for d in $(SUBDIRS); do \ $(MAKE) -C $$d sources; \ done built_sources: cppcheck: for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: aqbanking-6.6.1/src/libs/plugins/parsers/swift/0000755000175000017500000000000015037736157016512 500000000000000aqbanking-6.6.1/src/libs/plugins/parsers/swift/swift_tag.h0000664000175000017500000000313514271335671020571 00000000000000/*************************************************************************** begin : Fri Apr 02 2004 copyright : (C) 2022 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AQHBCIBANK_SWIFT_TAG_H #define AQHBCIBANK_SWIFT_TAG_H typedef struct AHB_SWIFT_TAG AHB_SWIFT_TAG; typedef struct AHB_SWIFT_SUBTAG AHB_SWIFT_SUBTAG; #include "swift.h" #include GWEN_LIST_FUNCTION_DEFS(AHB_SWIFT_TAG, AHB_SWIFT_Tag); AHB_SWIFT_TAG *AHB_SWIFT_Tag_new(const char *id, const char *content); void AHB_SWIFT_Tag_free(AHB_SWIFT_TAG *tg); const char *AHB_SWIFT_Tag_GetId(const AHB_SWIFT_TAG *tg); const char *AHB_SWIFT_Tag_GetData(const AHB_SWIFT_TAG *tg); GWEN_LIST_FUNCTION_DEFS(AHB_SWIFT_SUBTAG, AHB_SWIFT_SubTag); AHB_SWIFT_SUBTAG *AHB_SWIFT_SubTag_new(int id, const char *content, int clen); void AHB_SWIFT_SubTag_free(AHB_SWIFT_SUBTAG *stg); int AHB_SWIFT_SubTag_GetId(const AHB_SWIFT_SUBTAG *stg); const char *AHB_SWIFT_SubTag_GetData(const AHB_SWIFT_SUBTAG *stg); AHB_SWIFT_SUBTAG *AHB_SWIFT_FindSubTagById(const AHB_SWIFT_SUBTAG_LIST *stlist, int id); void AHB_SWIFT_SubTag_Condense(AHB_SWIFT_SUBTAG *stg, int keepMultipleBlanks); int AHB_SWIFT_GetNextSubTag(const char **sptr, AHB_SWIFT_SUBTAG **tptr); int AHB_SWIFT_ParseSubTags(const char *s, AHB_SWIFT_SUBTAG_LIST *stlist, int keepMultipleBlanks); #endif /* AQHBCIBANK_SWIDT_TAG_H */ aqbanking-6.6.1/src/libs/plugins/parsers/swift/Makefile.in0000644000175000017500000007144515037736026020505 00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/libs/plugins/parsers/swift ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/distri.m4 $(top_srcdir)/m4/gwenhywfar.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/os.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = swift.xml CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(dbioplugindir)" \ "$(DESTDIR)$(dbioplugindir)" LTLIBRARIES = $(dbioplugin_LTLIBRARIES) am__DEPENDENCIES_1 = swift_la_DEPENDENCIES = $(am__DEPENDENCIES_1) am_swift_la_OBJECTS = swift.lo swift_tag.lo swift940.lo swift940_25.lo \ swift940_60.lo swift940_61.lo swift940_86.lo swift940_ns.lo \ swift535.lo swift_la_OBJECTS = $(am_swift_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = swift_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(swift_la_LDFLAGS) $(LDFLAGS) -o $@ AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/swift.Plo ./$(DEPDIR)/swift535.Plo \ ./$(DEPDIR)/swift940.Plo ./$(DEPDIR)/swift940_25.Plo \ ./$(DEPDIR)/swift940_60.Plo ./$(DEPDIR)/swift940_61.Plo \ ./$(DEPDIR)/swift940_86.Plo ./$(DEPDIR)/swift940_ns.Plo \ ./$(DEPDIR)/swift_tag.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(swift_la_SOURCES) DIST_SOURCES = $(swift_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac DATA = $(dbioplugin_DATA) HEADERS = $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/swift.xml.in \ $(top_srcdir)/depcomp README DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADD_ACLOCAL_FLAGS = @ADD_ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AQBANKING_CLI_VERSION_STRING = @AQBANKING_CLI_VERSION_STRING@ AQBANKING_FINTS_VERSION_STRING = @AQBANKING_FINTS_VERSION_STRING@ AQBANKING_SO_AGE = @AQBANKING_SO_AGE@ AQBANKING_SO_CURRENT = @AQBANKING_SO_CURRENT@ AQBANKING_SO_EFFECTIVE = @AQBANKING_SO_EFFECTIVE@ AQBANKING_SO_REVISION = @AQBANKING_SO_REVISION@ AQBANKING_VERSION_BUILD = @AQBANKING_VERSION_BUILD@ AQBANKING_VERSION_FULL_STRING = @AQBANKING_VERSION_FULL_STRING@ AQBANKING_VERSION_MAJOR = @AQBANKING_VERSION_MAJOR@ AQBANKING_VERSION_MINOR = @AQBANKING_VERSION_MINOR@ AQBANKING_VERSION_PATCHLEVEL = @AQBANKING_VERSION_PATCHLEVEL@ AQBANKING_VERSION_RELEASE_STRING = @AQBANKING_VERSION_RELEASE_STRING@ AQBANKING_VERSION_STRING = @AQBANKING_VERSION_STRING@ AQBANKING_VERSION_TAG = @AQBANKING_VERSION_TAG@ AQEBICS_CFLAGS = @AQEBICS_CFLAGS@ AQEBICS_LIBS = @AQEBICS_LIBS@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATETIME = @DATETIME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_EXCLUDE_PATTERNS = @DOXYGEN_EXCLUDE_PATTERNS@ DOXYGEN_FILE_PATTERNS = @DOXYGEN_FILE_PATTERNS@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENGUI_GTK2_CFLAGS = @GWENGUI_GTK2_CFLAGS@ GWENGUI_GTK2_LIBS = @GWENGUI_GTK2_LIBS@ GWENHYWFAR_MINIMUM_VERSION = @GWENHYWFAR_MINIMUM_VERSION@ HAVE_GWENGUI_GTK2 = @HAVE_GWENGUI_GTK2@ HAVE_I18N = @HAVE_I18N@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIBXSLT_CFLAGS = @LIBXSLT_CFLAGS@ LIBXSLT_LIBS = @LIBXSLT_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_SUPPORTS_QT = @MSGFMT_SUPPORTS_QT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ TUTORIALS = @TUTORIALS@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XMLMERGE = @XMLMERGE@ XMLSEC_CFLAGS = @XMLSEC_CFLAGS@ XMLSEC_LIBS = @XMLSEC_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ aqbanking_backends = @aqbanking_backends@ aqbanking_cfg_searchdir = @aqbanking_cfg_searchdir@ aqbanking_data_searchdir = @aqbanking_data_searchdir@ aqbanking_headerdir = @aqbanking_headerdir@ aqbanking_headerdir_am = @aqbanking_headerdir_am@ aqbanking_includes = @aqbanking_includes@ aqbanking_internal_libs = @aqbanking_internal_libs@ aqbanking_ldflags = @aqbanking_ldflags@ aqbanking_libs = @aqbanking_libs@ aqbanking_locale_searchdir = @aqbanking_locale_searchdir@ aqbanking_modules = @aqbanking_modules@ aqbanking_pkgdatadir = @aqbanking_pkgdatadir@ aqbanking_plugin_searchdir = @aqbanking_plugin_searchdir@ aqbanking_plugindir = @aqbanking_plugindir@ aqbanking_plugins_backends_dirs = @aqbanking_plugins_backends_dirs@ aqbanking_plugins_backends_libs = @aqbanking_plugins_backends_libs@ aqbanking_plugins_bankinfo_dirs = @aqbanking_plugins_bankinfo_dirs@ aqbanking_plugins_bankinfo_libs = @aqbanking_plugins_bankinfo_libs@ aqbanking_plugins_imexporters_dirs = @aqbanking_plugins_imexporters_dirs@ aqbanking_plugins_imexporters_libs = @aqbanking_plugins_imexporters_libs@ aqbanking_plugins_parsers_dirs = @aqbanking_plugins_parsers_dirs@ aqbanking_symlinkdir = @aqbanking_symlinkdir@ aqbanking_sys_is_windows = @aqbanking_sys_is_windows@ aqbankingpp_modules = @aqbankingpp_modules@ aqebics_datadir = @aqebics_datadir@ aqebics_includes = @aqebics_includes@ aqebics_internal_libs = @aqebics_internal_libs@ aqebics_ldflags = @aqebics_ldflags@ aqebics_libs = @aqebics_libs@ aqfints_datadir = @aqfints_datadir@ aqhbci_datadir = @aqhbci_datadir@ aqhbci_includes = @aqhbci_includes@ aqhbci_internal_libs = @aqhbci_internal_libs@ aqhbci_ldflags = @aqhbci_ldflags@ aqhbci_libs = @aqhbci_libs@ aqofxconnect_includes = @aqofxconnect_includes@ aqofxconnect_internal_libs = @aqofxconnect_internal_libs@ aqofxconnect_libs = @aqofxconnect_libs@ aqpaypal_includes = @aqpaypal_includes@ aqpaypal_internal_libs = @aqpaypal_internal_libs@ aqpaypal_libs = @aqpaypal_libs@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gmp_libs = @gmp_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_dir = @gwenhywfar_dir@ gwenhywfar_has_crypt = @gwenhywfar_has_crypt@ gwenhywfar_headers = @gwenhywfar_headers@ gwenhywfar_includes = @gwenhywfar_includes@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_plugins = @gwenhywfar_plugins@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ typemaker2_exe = @typemaker2_exe@ visibility_cflags = @visibility_cflags@ with_aqebics = @with_aqebics@ with_aqhbci = @with_aqhbci@ AM_CPPFLAGS = \ $(gwenhywfar_includes) \ -I$(top_builddir)/src/libs \ -I$(top_srcdir)/src/libs AM_CFLAGS = -DBUILDING_AQBANKING @visibility_cflags@ EXTRA_DIST = README noinst_HEADERS = \ swift.h \ swift_l.h \ swift_tag.h \ swift_tag_p.h \ swift940_l.h \ swift940_p.h \ swift940_25.h \ swift940_60.h \ swift940_61.h \ swift940_86.h \ swift940_ns.h \ swift535_l.h \ swift535_p.h dbioplugindir = $(aqbanking_plugindir)/dbio dbioplugin_DATA = swift.xml dbioplugin_LTLIBRARIES = swift.la swift_la_SOURCES = \ swift.c \ swift_tag.c \ swift940.c \ swift940_25.c \ swift940_60.c \ swift940_61.c \ swift940_86.c \ swift940_ns.c \ swift535.c swift_la_LIBADD = $(gwenhywfar_libs) swift_la_LDFLAGS = -no-undefined $(STRIPALL) -module -avoid-version all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libs/plugins/parsers/swift/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libs/plugins/parsers/swift/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): swift.xml: $(top_builddir)/config.status $(srcdir)/swift.xml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ install-dbiopluginLTLIBRARIES: $(dbioplugin_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(dbioplugin_LTLIBRARIES)'; test -n "$(dbioplugindir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(MKDIR_P) '$(DESTDIR)$(dbioplugindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(dbioplugindir)" || exit 1; \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(dbioplugindir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(dbioplugindir)"; \ } uninstall-dbiopluginLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(dbioplugin_LTLIBRARIES)'; test -n "$(dbioplugindir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(dbioplugindir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(dbioplugindir)/$$f"; \ done clean-dbiopluginLTLIBRARIES: -test -z "$(dbioplugin_LTLIBRARIES)" || rm -f $(dbioplugin_LTLIBRARIES) @list='$(dbioplugin_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } swift.la: $(swift_la_OBJECTS) $(swift_la_DEPENDENCIES) $(EXTRA_swift_la_DEPENDENCIES) $(AM_V_CCLD)$(swift_la_LINK) -rpath $(dbioplugindir) $(swift_la_OBJECTS) $(swift_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/swift.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/swift535.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/swift940.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/swift940_25.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/swift940_60.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/swift940_61.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/swift940_86.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/swift940_ns.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/swift_tag.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-dbiopluginDATA: $(dbioplugin_DATA) @$(NORMAL_INSTALL) @list='$(dbioplugin_DATA)'; test -n "$(dbioplugindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(dbioplugindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(dbioplugindir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(dbioplugindir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(dbioplugindir)" || exit $$?; \ done uninstall-dbiopluginDATA: @$(NORMAL_UNINSTALL) @list='$(dbioplugin_DATA)'; test -n "$(dbioplugindir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(dbioplugindir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(dbioplugindir)" "$(DESTDIR)$(dbioplugindir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-dbiopluginLTLIBRARIES clean-generic clean-libtool \ mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/swift.Plo -rm -f ./$(DEPDIR)/swift535.Plo -rm -f ./$(DEPDIR)/swift940.Plo -rm -f ./$(DEPDIR)/swift940_25.Plo -rm -f ./$(DEPDIR)/swift940_60.Plo -rm -f ./$(DEPDIR)/swift940_61.Plo -rm -f ./$(DEPDIR)/swift940_86.Plo -rm -f ./$(DEPDIR)/swift940_ns.Plo -rm -f ./$(DEPDIR)/swift_tag.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dbiopluginDATA install-dbiopluginLTLIBRARIES install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/swift.Plo -rm -f ./$(DEPDIR)/swift535.Plo -rm -f ./$(DEPDIR)/swift940.Plo -rm -f ./$(DEPDIR)/swift940_25.Plo -rm -f ./$(DEPDIR)/swift940_60.Plo -rm -f ./$(DEPDIR)/swift940_61.Plo -rm -f ./$(DEPDIR)/swift940_86.Plo -rm -f ./$(DEPDIR)/swift940_ns.Plo -rm -f ./$(DEPDIR)/swift_tag.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-dbiopluginDATA uninstall-dbiopluginLTLIBRARIES .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-dbiopluginLTLIBRARIES clean-generic clean-libtool \ cscopelist-am ctags ctags-am distclean distclean-compile \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dbiopluginDATA \ install-dbiopluginLTLIBRARIES install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am uninstall-dbiopluginDATA \ uninstall-dbiopluginLTLIBRARIES .PRECIOUS: Makefile sources: for f in $(swift_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for f in $(dbioplugin_DATA); do \ echo $(subdir)/$$f >>$(top_srcdir)/pdsources; \ done cppcheck: for f in $(swift_la_SOURCES); do \ cppcheck --force $$f ; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: aqbanking-6.6.1/src/libs/plugins/parsers/swift/swift940_25.h0000664000175000017500000000117614271335671020504 00000000000000/*************************************************************************** begin : Fri Apr 02 2004 copyright : (C) 2022 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AB_PARSER_SWIFT_SWIFT940_25_H #define AB_PARSER_SWIFT_SWIFT940_25_H #include "swift_l.h" int AHB_SWIFT940_Parse_25(const AHB_SWIFT_TAG *tg, uint32_t flags, GWEN_DB_NODE *data, GWEN_DB_NODE *cfg); #endif aqbanking-6.6.1/src/libs/plugins/parsers/swift/swift940_60.c0000664000175000017500000000551114271335671020473 00000000000000/*************************************************************************** begin : Fri Apr 02 2004 copyright : (C) 2022 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "swift940_60.h" #include #include #include #include int AHB_SWIFT940_Parse_60_62(const AHB_SWIFT_TAG *tg, uint32_t flags, GWEN_DB_NODE *data, GWEN_DB_NODE *cfg) { const char *p; const char *p2; char *s; char buffer[32]; unsigned int bleft; int neg; GWEN_DATE *balanceDate; p=AHB_SWIFT_Tag_GetData(tg); assert(p); bleft=strlen(p); /* credit/debit mark (M) */ if (bleft<2) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Bad value string (%s)", p); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, "SWIFT: Bad value string"); return GWEN_ERROR_GENERIC; } neg=0; if (*p=='D' || *p=='d') neg=1; p++; bleft--; /* date (M) */ balanceDate=AHB_SWIFT_ReadDateYYMMDD(&p, &bleft); if (balanceDate==NULL) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Missing date (%s)", p); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, "SWIFT: Missing date"); return GWEN_ERROR_GENERIC; } GWEN_DB_SetCharValue(data, GWEN_DB_FLAGS_OVERWRITE_VARS, "date", GWEN_Date_GetString(balanceDate)); GWEN_Date_free(balanceDate); /* currency (M) */ if (!isdigit(*p)) { /* only read currency if this is not part of the value (like in some swiss MT940) */ if (bleft<3) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Missing currency (%s)", p); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, "SWIFT: Missing currency"); return GWEN_ERROR_GENERIC; } memmove(buffer, p, 3); buffer[3]=0; AHB_SWIFT_SetCharValue(data, GWEN_DB_FLAGS_OVERWRITE_VARS, "value/currency", buffer); p+=3; bleft-=3; } /* value (M) */ if (bleft<1) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Missing value (%s)", p); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, "SWIFT: Missing value"); return GWEN_ERROR_GENERIC; } p2=p; while (*p2 && (isdigit(*p2) || *p2==',')) p2++; if (p2==p) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Bad value (%s)", p); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, "SWIFT: Bad value"); return GWEN_ERROR_GENERIC; } s=(char *)GWEN_Memory_malloc(p2-p+1+(neg?1:0)); if (neg) { s[0]='-'; memmove(s+1, p, p2-p+1); s[p2-p+1]=0; } else { memmove(s, p, p2-p+1); s[p2-p]=0; } AHB_SWIFT_SetCharValue(data, GWEN_DB_FLAGS_OVERWRITE_VARS, "value/value", s); GWEN_Memory_dealloc(s); /*bleft-=p2-p;*/ /*p=p2;*/ return 0; } aqbanking-6.6.1/src/libs/plugins/parsers/swift/swift535.c0000664000175000017500000003107014043610745020160 00000000000000/*************************************************************************** begin : Fri Apr 02 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "swift535_p.h" #include "aqbanking/i18n_l.h" /* #include */ #include #include #include #include #include #include #include /* #define ENABLE_FULL_SEPA_LOG */ static void _iso8859_1ToUtf8(const char *p, int size, GWEN_BUFFER *buf) { while (*p) { unsigned int c; if (!size) break; c=(unsigned char)(*(p++)); if (c<32 || c==127) c=32; if (c & 0x80) { GWEN_Buffer_AppendByte(buf, 0xc0 | c>>6); c &= ~0x40; } GWEN_Buffer_AppendByte(buf, c); if (size!=-1) size--; } /* while */ } int AHB_SWIFT__SetCharValue535(GWEN_DB_NODE *db, uint32_t flags, const char *name, const char *s) { GWEN_BUFFER *vbuf; int rv; vbuf=GWEN_Buffer_new(0, strlen(s)+32, 0, 1); _iso8859_1ToUtf8(s, -1, vbuf); rv=GWEN_DB_SetCharValue(db, flags, name, GWEN_Buffer_GetStart(vbuf)); GWEN_Buffer_free(vbuf); return rv; } int AHB_SWIFT535_Parse_97A(const AHB_SWIFT_TAG *tg, uint32_t flags, GWEN_DB_NODE *data, GWEN_DB_NODE *cfg) { const char *p; const char *p2; p=AHB_SWIFT_Tag_GetData(tg); assert(p); while (*p && *p==32) p++; if (*p==0) { DBG_WARN(AQBANKING_LOGDOMAIN, "Tag 97A is empty"); return 0; } if (strncasecmp(p, ":SAFE//", 7)==0) { p+=7; /* get blz */ p2=strchr(p, '/'); if (p2) { char *s; /* "BLZ/Konto" */ s=(char *)GWEN_Memory_malloc(p2-p+1); memmove(s, p, p2-p+1); s[p2-p]=0; AHB_SWIFT__SetCharValue535(data, GWEN_DB_FLAGS_OVERWRITE_VARS, "localBankCode", s); GWEN_Memory_dealloc(s); p=p2+1; } while (*p && *p==32) p++; /* get account number */ if (*p) { p2=p; while (*p2 && isdigit(*p2)) p2++; if (p2==p) { DBG_INFO(AQBANKING_LOGDOMAIN, "LocalAccountNumber starts with nondigits (%s)", p); AHB_SWIFT__SetCharValue535(data, GWEN_DB_FLAGS_OVERWRITE_VARS, "localAccountNumber", p); } else { char *s; s=(char *)GWEN_Memory_malloc(p2-p+1); memmove(s, p, p2-p+1); s[p2-p]=0; AHB_SWIFT__SetCharValue535(data, GWEN_DB_FLAGS_OVERWRITE_VARS, "localAccountNumber", s); GWEN_Memory_dealloc(s); } } } return 0; } // get names / IDs of security int AHB_SWIFT535_Parse_35B(const AHB_SWIFT_TAG *tg, uint32_t flags, GWEN_DB_NODE *data, GWEN_DB_NODE *cfg) { char *p, *s, *ss; int gotIsin=0; p=(char *)AHB_SWIFT_Tag_GetData(tg); assert(p); while (*p && *p==32) p++; if (*p==0) { DBG_WARN(AQBANKING_LOGDOMAIN, "Tag 35B is empty"); return 0; } // get ISIN if (strncasecmp(p, "ISIN ", 5)==0) { p+=5; s=(char *)GWEN_Memory_malloc(1024); if (sscanf(p, " %s ", s)!=1) { DBG_WARN(AQBANKING_LOGDOMAIN, "Tag 35B: Cannot read ISIN"); GWEN_Memory_dealloc(s); return 0; } p+=strlen(s); AHB_SWIFT__SetCharValue535(data, flags, "nameSpace", "ISIN"); AHB_SWIFT__SetCharValue535(data, flags, "uniqueId", s); GWEN_Memory_dealloc(s); gotIsin=1; } // get WKN while (*p && *p<=32) p++; if (strncasecmp(p, "/DE/", 4)==0) { p+=4; s=(char *)GWEN_Memory_malloc(1024); if (sscanf(p, "%s", s)!=1) { DBG_WARN(AQBANKING_LOGDOMAIN, "Tag 35B: Cannot read WKN"); GWEN_Memory_dealloc(s); return 0; } p+=strlen(s); if (!gotIsin) { AHB_SWIFT__SetCharValue535(data, flags, "nameSpace", "WKN"); AHB_SWIFT__SetCharValue535(data, flags, "uniqueId", s); } GWEN_Memory_dealloc(s); } // get security name while (*p && *p<=32) p++; s=(char *)GWEN_Memory_malloc(1024); ss=s; while (*p) { if (*p>=32) *ss++ = *p; p++; } *ss=0; AHB_SWIFT__SetCharValue535(data, flags, "name", s); GWEN_Memory_dealloc(s); return 0; } // get price of security int AHB_SWIFT535_Parse_90B(const AHB_SWIFT_TAG *tg, uint32_t flags, GWEN_DB_NODE *data, GWEN_DB_NODE *cfg) { char *p; p=(char *)AHB_SWIFT_Tag_GetData(tg); assert(p); while (*p && *p==32) p++; if (*p==0) { DBG_WARN(AQBANKING_LOGDOMAIN, "Tag 90B is empty"); return 0; } // get price if (strncasecmp(p, ":MRKT//ACTU/", 12)==0) { const char *sCurrency=NULL; int i; p+=12; sCurrency=p; for (i=0; i<3; i++) { if (*p==0) { DBG_WARN(AQBANKING_LOGDOMAIN, "Tag 90B: Tag too short"); return GWEN_ERROR_BAD_DATA; } p++; } if (*p) { GWEN_BUFFER *dbuf; dbuf=GWEN_Buffer_new(0, 32, 0, 1); GWEN_Buffer_AppendString(dbuf, p); if (sCurrency) { GWEN_Buffer_AppendByte(dbuf, ':'); GWEN_Buffer_AppendBytes(dbuf, sCurrency, 3); /* auto terminated with ZERO by GWEN_BUFFER */ } AHB_SWIFT__SetCharValue535(data, flags, "unitPriceValue", GWEN_Buffer_GetStart(dbuf)); GWEN_Buffer_free(dbuf); } } else { DBG_WARN(AQBANKING_LOGDOMAIN, "Tag 90B: Unexpected value %s", p); } return 0; } // get date of security price int AHB_SWIFT535_Parse_98A(const AHB_SWIFT_TAG *tg, uint32_t flags, GWEN_DB_NODE *data, GWEN_DB_NODE *cfg) { char *p; int year, month, day; GWEN_DATE *dt; p=(char *)AHB_SWIFT_Tag_GetData(tg); assert(p); while (*p && *p==32) p++; if (*p==0) { DBG_WARN(AQBANKING_LOGDOMAIN, "Tag 98A is empty"); return 0; } // get date if (strncasecmp(p, ":PRIC//", 7)==0) { p+=7; if (sscanf(p, "%4d%2d%2d", &year, &month, &day)!=3) { DBG_WARN(AQBANKING_LOGDOMAIN, "Tag 98A: Cannot read date"); return 0; } dt=GWEN_Date_fromGregorian(year, month, day); assert(dt); GWEN_DB_SetCharValue(data, GWEN_DB_FLAGS_DEFAULT, "unitPriceDate", GWEN_Date_GetString(dt)); GWEN_Date_free(dt); } return 0; } // get units of security int AHB_SWIFT535_Parse_93B(const AHB_SWIFT_TAG *tg, uint32_t flags, GWEN_DB_NODE *data, GWEN_DB_NODE *cfg) { char *p; p=(char *)AHB_SWIFT_Tag_GetData(tg); assert(p); while (*p && *p==32) p++; if (*p==0) { DBG_WARN(AQBANKING_LOGDOMAIN, "Tag 93B is empty"); return 0; } // get units if (strncasecmp(p, ":AGGR//UNIT/", 12)==0) { p+=12; AHB_SWIFT__SetCharValue535(data, flags, "units", p); } return 0; } /* Import SWIFT MT535 data. @param tl input: list of tags. Tags are lines in a SWIFT data block (block 4). A tag has an id and content. See the AHB_SWIFT_Tag_new function for more information. */ int AHB_SWIFT535_Import(AHB_SWIFT_TAG_LIST *tl, GWEN_DB_NODE *data, GWEN_DB_NODE *cfg, uint32_t flags) { AHB_SWIFT_TAG *tg; GWEN_DB_NODE *dbTemplate=NULL; GWEN_DB_NODE *dbSecurity=NULL; uint32_t progressId; int docLvl; dbTemplate=GWEN_DB_Group_new("template"); progressId=GWEN_Gui_ProgressStart(GWEN_GUI_PROGRESS_DELAY | GWEN_GUI_PROGRESS_ALLOW_EMBED | GWEN_GUI_PROGRESS_SHOW_PROGRESS | GWEN_GUI_PROGRESS_SHOW_ABORT, I18N("Importing SWIFT tags..."), NULL, AHB_SWIFT_Tag_List_GetCount(tl), 0); docLvl=AHB_SWIFT535_LEVEL_TOP; tg=AHB_SWIFT_Tag_List_First(tl); while (tg) { const char *id; const char *da; id=AHB_SWIFT_Tag_GetId(tg); da=AHB_SWIFT_Tag_GetData(tg); assert(id); assert(da); switch (docLvl) { case AHB_SWIFT535_LEVEL_TOP: if (strcasecmp(id, "16R")==0) { if (strcasecmp(da, "GENL")==0) docLvl=AHB_SWIFT535_LEVEL_GENL; // else if (strcasecmp(da, "SUBSAFE")==0) // docLvl=AHB_SWIFT535_LEVEL_SUBSAFE; else if (strcasecmp(da, "FIN")==0) { docLvl=AHB_SWIFT535_LEVEL_FIN; dbSecurity=GWEN_DB_GetGroup(data, GWEN_PATH_FLAGS_CREATE_GROUP, "security"); } else if (strcasecmp(da, "ADDINFO")==0) docLvl=AHB_SWIFT535_LEVEL_ADDINFO; else DBG_INFO(AQBANKING_LOGDOMAIN, "TOP: Ignoring tag :%s:%s", id, da); } break; case AHB_SWIFT535_LEVEL_GENL: if (strcasecmp(id, "16S")==0 && strcasecmp(da, "GENL")==0) docLvl=AHB_SWIFT535_LEVEL_TOP; else if (strcasecmp(id, "97A")==0) { /* LocalAccount */ if (AHB_SWIFT535_Parse_97A(tg, flags, data, cfg)) { DBG_WARN(AQBANKING_LOGDOMAIN, "Error in tag %s", id); GWEN_Gui_ProgressEnd(progressId); return -1; } } else DBG_INFO(AQBANKING_LOGDOMAIN, "GENL: Ignoring tag :%s:%s", id, da); break; case AHB_SWIFT535_LEVEL_SUBSAFE: if (strcasecmp(id, "16S")==0 && strcasecmp(da, "SUBSAFE")==0) docLvl=AHB_SWIFT535_LEVEL_TOP; else DBG_INFO(AQBANKING_LOGDOMAIN, "SUBSAFE: Ignoring tag :%s:%s", id, da); break; case AHB_SWIFT535_LEVEL_FIN: if (strcasecmp(id, "16S")==0 && strcasecmp(da, "FIN")==0) // docLvl=AHB_SWIFT535_LEVEL_SUBSAFE; docLvl=AHB_SWIFT535_LEVEL_TOP; else if (strcasecmp(id, "16R")==0 && strcasecmp(da, "SUBBAL")==0) docLvl=AHB_SWIFT535_LEVEL_SUBBAL; else if (strcasecmp(id, "35B")==0) { /* name of security */ if (AHB_SWIFT535_Parse_35B(tg, flags, dbSecurity, cfg)) { DBG_WARN(AQBANKING_LOGDOMAIN, "Error in tag %s", id); GWEN_Gui_ProgressEnd(progressId); return -1; } } else if (strcasecmp(id, "90B")==0) { /* price of security */ if (AHB_SWIFT535_Parse_90B(tg, flags, dbSecurity, cfg)) { DBG_WARN(AQBANKING_LOGDOMAIN, "Error in tag %s", id); GWEN_Gui_ProgressEnd(progressId); return -1; } } else if (strcasecmp(id, "98A")==0) { /* date of security price*/ if (AHB_SWIFT535_Parse_98A(tg, flags, dbSecurity, cfg)) { DBG_WARN(AQBANKING_LOGDOMAIN, "Error in tag %s", id); GWEN_Gui_ProgressEnd(progressId); return -1; } } else if (strcasecmp(id, "93B")==0) { /* units of security */ if (AHB_SWIFT535_Parse_93B(tg, flags, dbSecurity, cfg)) { DBG_WARN(AQBANKING_LOGDOMAIN, "Error in tag %s", id); GWEN_Gui_ProgressEnd(progressId); return -1; } } else DBG_INFO(AQBANKING_LOGDOMAIN, "FIN: Ignoring tag :%s:%s", id, da); break; case AHB_SWIFT535_LEVEL_SUBBAL: if (strcasecmp(id, "16S")==0 && strcasecmp(da, "SUBBAL")==0) docLvl=AHB_SWIFT535_LEVEL_FIN; else DBG_INFO(AQBANKING_LOGDOMAIN, "SUBBAL: Ignoring tag :%s:%s", id, da); break; case AHB_SWIFT535_LEVEL_ADDINFO: if (strcasecmp(id, "16S")==0 && strcasecmp(da, "ADDINFO")==0) docLvl=AHB_SWIFT535_LEVEL_TOP; else DBG_INFO(AQBANKING_LOGDOMAIN, "ADDINFO: Ignoring tag :%s:%s", id, da); break; } if (GWEN_Gui_ProgressAdvance(progressId, GWEN_GUI_PROGRESS_ONE)== GWEN_ERROR_USER_ABORTED) { GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("Aborted by user")); GWEN_Gui_ProgressEnd(progressId); GWEN_DB_Group_free(dbTemplate); return GWEN_ERROR_USER_ABORTED; } tg=AHB_SWIFT_Tag_List_Next(tg); } /* while */ if (docLvl!=AHB_SWIFT535_LEVEL_TOP) DBG_WARN(AQBANKING_LOGDOMAIN, "Illegal document structure"); GWEN_DB_Group_free(dbTemplate); GWEN_Gui_ProgressEnd(progressId); return 0; } aqbanking-6.6.1/src/libs/plugins/parsers/swift/swift.h0000664000175000017500000000216214043610745017730 00000000000000/*************************************************************************** begin : Mon May 02 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AQHBCIBANK_SWIFT_H #define AQHBCIBANK_SWIFT_H /** * @defgroup MOD_PLUGIN_SWIFT SWIFT Parser * @ingroup MOD_PLUGINS * *

* This DBIO plugin allows parsing and creating of SWIFT documents. *

*

* Every DBIO plugin uses a GWEN_DB which contains the configuration for * the given plugin. For this plugin the configuration is as follows: *

* * * * * * * * * * * * * * * * *
NameTypeContentMode
typecharmt940, mt942: type of SWIFT documentrequired
* */ #endif /* AQHBCIBANK_SWIFT_H */ aqbanking-6.6.1/src/libs/plugins/parsers/swift/Makefile.am0000664000175000017500000000213514271335671020464 00000000000000AM_CPPFLAGS = \ $(gwenhywfar_includes) \ -I$(top_builddir)/src/libs \ -I$(top_srcdir)/src/libs AM_CFLAGS=-DBUILDING_AQBANKING @visibility_cflags@ EXTRA_DIST=README noinst_HEADERS=\ swift.h \ swift_l.h \ swift_tag.h \ swift_tag_p.h \ swift940_l.h \ swift940_p.h \ swift940_25.h \ swift940_60.h \ swift940_61.h \ swift940_86.h \ swift940_ns.h \ swift535_l.h \ swift535_p.h dbioplugindir = $(aqbanking_plugindir)/dbio dbioplugin_DATA=swift.xml dbioplugin_LTLIBRARIES=swift.la swift_la_SOURCES=\ swift.c \ swift_tag.c \ swift940.c \ swift940_25.c \ swift940_60.c \ swift940_61.c \ swift940_86.c \ swift940_ns.c \ swift535.c swift_la_LIBADD = $(gwenhywfar_libs) swift_la_LDFLAGS = -no-undefined $(STRIPALL) -module -avoid-version sources: for f in $(swift_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for f in $(dbioplugin_DATA); do \ echo $(subdir)/$$f >>$(top_srcdir)/pdsources; \ done cppcheck: for f in $(swift_la_SOURCES); do \ cppcheck --force $$f ; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done aqbanking-6.6.1/src/libs/plugins/parsers/swift/swift940_86.c0000664000175000017500000003304714275012617020504 00000000000000/*************************************************************************** begin : Fri Apr 02 2004 copyright : (C) 2022 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "swift940_86.h" #include #include #include #include #include /* ------------------------------------------------------------------------------------------------ * forward declarations * ------------------------------------------------------------------------------------------------ */ static void _extractAndHandleSepaTags(GWEN_DB_NODE *dbData, uint32_t flags); static void _transformPurposeIntoOneString(GWEN_DB_NODE *dbData, uint32_t flags); static void _readSubTagsIntoDb(AHB_SWIFT_SUBTAG_LIST *stlist, GWEN_DB_NODE *dbData, uint32_t flags); static int _readSepaTags(const char *sPurpose, GWEN_DB_NODE *dbSepaTags); static int _storeSepaTag(const char *sTagStart, int tagLen, GWEN_DB_NODE *dbSepaTags); static void _transformSepaTags(GWEN_DB_NODE *dbData, GWEN_DB_NODE *dbSepaTags, uint32_t flags); static void _parseTransactionData(const char *p, GWEN_DB_NODE *dbData, uint32_t flags); /* ------------------------------------------------------------------------------------------------ * implementations * ------------------------------------------------------------------------------------------------ */ int AHB_SWIFT940_Parse_86(const AHB_SWIFT_TAG *tg, uint32_t flags, GWEN_DB_NODE *dbData, GWEN_DB_NODE *cfg) { const char *p; int isStructured; int code; int keepMultipleBlanks; keepMultipleBlanks=GWEN_DB_GetIntValue(cfg, "keepMultipleBlanks", 0, 1); p=AHB_SWIFT_Tag_GetData(tg); assert(p); isStructured=0; code=999; if ((strlen(p)>3) && isdigit(p[0]) && isdigit(p[1]) && isdigit(p[2]) && p[3]=='?') { /* it is structured, get the code */ code=(((p[0]-'0')*100) + ((p[1]-'0')*10) + (p[2]-'0')); isStructured=1; p+=3; } if (isStructured) { AHB_SWIFT_SUBTAG_LIST *stlist; int rv; /* store code */ GWEN_DB_SetIntValue(dbData, flags, "transactioncode", code); stlist=AHB_SWIFT_SubTag_List_new(); rv=AHB_SWIFT_ParseSubTags(p, stlist, keepMultipleBlanks); if (rv<0) { DBG_WARN(AQBANKING_LOGDOMAIN, "Handling tag :86: as unstructured (%d)", rv); isStructured=0; } else { if (code<900) { /* sepa */ DBG_INFO(AQBANKING_LOGDOMAIN, "Reading as SEPA tag (%d)", code); _readSubTagsIntoDb(stlist, dbData, flags); _extractAndHandleSepaTags(dbData, flags); _transformPurposeIntoOneString(dbData, flags); } else { /* non-sepa */ DBG_INFO(AQBANKING_LOGDOMAIN, "Reading as non-SEPA tag (%d)", code); _readSubTagsIntoDb(stlist, dbData, flags); _transformPurposeIntoOneString(dbData, flags); } } /* if really structured */ AHB_SWIFT_SubTag_List_free(stlist); } /* if isStructured */ else { /* unstructured :86:, simply store as mutliple purpose lines */ _parseTransactionData(p, dbData, GWEN_DB_FLAGS_DEFAULT); _transformPurposeIntoOneString(dbData, flags); } return 0; } void _readSubTagsIntoDb(AHB_SWIFT_SUBTAG_LIST *stlist, GWEN_DB_NODE *dbData, uint32_t flags) { AHB_SWIFT_SUBTAG *stg; stg=AHB_SWIFT_SubTag_List_First(stlist); while (stg) { const char *s; int id; int intVal; id=AHB_SWIFT_SubTag_GetId(stg); s=AHB_SWIFT_SubTag_GetData(stg); switch (id) { case 0: /* Buchungstext */ AHB_SWIFT_SetCharValue(dbData, flags, "transactionText", s); break; case 10: /* Primanota */ AHB_SWIFT_SetCharValue(dbData, flags, "primanota", s); break; case 20: case 21: case 22: case 23: case 24: case 25: case 26: case 27: case 28: case 29: case 60: case 61: case 62: case 63: /* Verwendungszweck */ AHB_SWIFT_SetCharValue(dbData, flags, "purpose", s); break; case 30: /* BLZ Gegenseite */ AHB_SWIFT_SetCharValue(dbData, flags, "remoteBankCode", s); break; case 31: /* Kontonummer Gegenseite */ AHB_SWIFT_SetCharValue(dbData, flags, "remoteAccountNumber", s); break; case 32: case 33: /* Name Auftraggeber */ //DBG_ERROR(AQBANKING_LOGDOMAIN, "Setting remote name: [%s]", s); AHB_SWIFT_SetCharValue(dbData, flags, "remoteName", s); break; case 34: /* Textschluesselergaenzung */ if (1==sscanf(s, "%d", &intVal)) { GWEN_DB_SetIntValue(dbData, flags, "textkeyExt", intVal); } else { DBG_WARN(AQBANKING_LOGDOMAIN, "Value [%s] is not a number (textkeyext)", s); } break; case 38: /* IBAN */ AHB_SWIFT_SetCharValue(dbData, flags, "remoteIban", s); break; default: /* ignore all other fields (if any) */ DBG_WARN(AQBANKING_LOGDOMAIN, "Unknown :86: field \"%02d\" (%s)", id, s); break; } /* switch */ stg=AHB_SWIFT_SubTag_List_Next(stg); } /* while */ } void _extractAndHandleSepaTags(GWEN_DB_NODE *dbData, uint32_t flags) { GWEN_BUFFER *tbuf; int i; tbuf=GWEN_Buffer_new(0, 256, 0, 1); for (i=0; i<99; i++) { const char *s; s=GWEN_DB_GetCharValue(dbData, "purpose", i, 0); if (s && *s) GWEN_Buffer_AppendString(tbuf, s); } if (GWEN_Buffer_GetUsedBytes(tbuf)) { GWEN_DB_NODE *dbSepaTags; int realSepaTagCount; dbSepaTags=GWEN_DB_Group_new("sepa-tags"); realSepaTagCount=_readSepaTags(GWEN_Buffer_GetStart(tbuf), dbSepaTags); if (realSepaTagCount>0 && GWEN_DB_Variables_Count(dbSepaTags)) _transformSepaTags(dbData, dbSepaTags, flags); GWEN_DB_Group_free(dbSepaTags); } /* buffer no longer needed */ GWEN_Buffer_free(tbuf); } void _transformPurposeIntoOneString(GWEN_DB_NODE *dbData, uint32_t flags) { GWEN_BUFFER *tbuf; int i; tbuf=GWEN_Buffer_new(0, 256, 0, 1); for (i=0; i<99; i++) { const char *s; s=GWEN_DB_GetCharValue(dbData, "purpose", i, 0); if (s && *s) { if (GWEN_Buffer_GetUsedBytes(tbuf)) GWEN_Buffer_AppendString(tbuf, "\n"); GWEN_Buffer_AppendString(tbuf, s); } } if (GWEN_Buffer_GetUsedBytes(tbuf)) { GWEN_DB_DeleteVar(dbData, "purpose"); GWEN_DB_SetCharValue(dbData, GWEN_DB_FLAGS_DEFAULT, "purpose", GWEN_Buffer_GetStart(tbuf)); } GWEN_Buffer_free(tbuf); } int _readSepaTags(const char *sPurpose, GWEN_DB_NODE *dbSepaTags) { const char *s; const char *sLastTagStart; int realSepaTagCount=0; #ifdef ENABLE_FULL_SEPA_LOG DBG_ERROR(AQHBCI_LOGDOMAIN, "FullPurposeBuffer"); GWEN_Buffer_Dump(bufFullPurpose, 2); #endif s=sPurpose; sLastTagStart=s; /* sample all SEPA fields from concatenated string of purpose lines */ while (*s) { /* look for begin of next tag */ while (*s) { if ((*s && isalpha(*s)) && (s[1] && isalpha(s[1])) && (s[2] && isalpha(s[2])) && (s[3] && isalpha(s[3])) && s[4]=='+') { if (strncasecmp(s, "EREF+", 5)==0 || strncasecmp(s, "KREF+", 5)==0 || strncasecmp(s, "MREF+", 5)==0 || strncasecmp(s, "CRED+", 5)==0 || strncasecmp(s, "DEBT+", 5)==0 || strncasecmp(s, "SVWZ+", 5)==0 || strncasecmp(s, "ABWA+", 5)==0 || strncasecmp(s, "ABWE+", 5)==0) break; } /* not the beginning of a SEPA field, just skip */ s++; } /* found begin of the next SEPA field or end of buffer */ if (s > sLastTagStart) { int tagLen; /* we currently have a field, close that first */ tagLen=s-sLastTagStart; if (_storeSepaTag(sLastTagStart, tagLen, dbSepaTags)>0) realSepaTagCount++; } if (*s) { /* save start of next tag */ sLastTagStart=s; /* skip XXX+ at the beginning, otherwise we would immediately stop in next loop * we know that the next 5 bytes are valid, so it is safe to skip them */ s+=5; } } /* while */ return realSepaTagCount; } int _storeSepaTag(const char *sTagStart, int tagLen, GWEN_DB_NODE *dbSepaTags) { int isRealSepaTag=0; #ifdef ENABLE_FULL_SEPA_LOG DBG_ERROR(0, "Current tag:"); GWEN_Text_LogString(sTagStart, tagLen, 0, GWEN_LoggerLevel_Error); #endif /* check tag length (must be long enough for 'XXX+', i.e. at least 5 bytes) */ if (tagLen>5 && sTagStart[4]=='+') { char sIdentifier[6]; const char *sPayload; /* ok, 5 bytes or more, 4 alphas and a plus sign, should be the begin of a SEPA tag */ strncpy(sIdentifier, sTagStart, 5); sIdentifier[5]=0; /* remove leading blanks */ sPayload=sTagStart+5; tagLen-=5; while (tagLen>0 && *sPayload && isblank(*sPayload)) { sPayload++; tagLen--; } /* remove trailing blanks */ if (tagLen>0) { while (tagLen>0) { if (!isblank(sPayload[tagLen-1])) break; tagLen--; } } /* store tag, if still data left */ if (tagLen>0) { char *sCopyPayload; sCopyPayload=GWEN_Text_strndup(sPayload, tagLen); GWEN_DB_SetCharValue(dbSepaTags, GWEN_DB_FLAGS_DEFAULT, sIdentifier, sCopyPayload); free(sCopyPayload); isRealSepaTag=1; } else { DBG_WARN(GWEN_LOGDOMAIN, "Ignoring empty SEPA field \"%s\"", sIdentifier); } } else { /* tag is shorter than 5 bytes or pos 4 doesn't contain a plus, treat as normal purpose */ if (tagLen>0) { char *sCopyPayload; sCopyPayload=GWEN_Text_strndup(sTagStart, tagLen); GWEN_DB_SetCharValue(dbSepaTags, GWEN_DB_FLAGS_DEFAULT, "_purpose", sCopyPayload); free(sCopyPayload); } } return isRealSepaTag?1:0; } void _transformSepaTags(GWEN_DB_NODE *dbData, GWEN_DB_NODE *dbSepaTags, uint32_t flags) { GWEN_DB_NODE *dbVar; #ifdef ENABLE_FULL_SEPA_LOG DBG_ERROR(0, "Got these SEPA tags:"); GWEN_DB_Dump(dbSepaTags, 2); #endif /* clear purpose variable, since we are about to add it back from SEPA tags */ GWEN_DB_DeleteVar(dbData, "purpose"); dbVar=GWEN_DB_GetFirstVar(dbSepaTags); while (dbVar) { const char *sVarName; sVarName=GWEN_DB_VariableName(dbVar); if (sVarName && *sVarName) { GWEN_BUFFER *tbuf; GWEN_DB_NODE *dbValue; /* sample all values into a buffer and concatenate */ tbuf=GWEN_Buffer_new(0, 128, 0, 1); dbValue=GWEN_DB_GetFirstValue(dbVar); while (dbValue) { const char *s; s=GWEN_DB_GetCharValueFromNode(dbValue); if (s && *s) GWEN_Buffer_AppendString(tbuf, s); dbValue=GWEN_DB_GetNextValue(dbValue); } if (strcasecmp(sVarName, "EREF+")==0) { AHB_SWIFT_SetCharValue(dbData, flags, "endToEndReference", GWEN_Buffer_GetStart(tbuf)); } else if (strcasecmp(sVarName, "KREF+")==0) { AHB_SWIFT_SetCharValue(dbData, flags, "customerReference", GWEN_Buffer_GetStart(tbuf)); } else if (strcasecmp(sVarName, "MREF+")==0) { AHB_SWIFT_SetCharValue(dbData, flags, "mandateId", GWEN_Buffer_GetStart(tbuf)); } else if (strcasecmp(sVarName, "CRED+")==0) { AHB_SWIFT_SetCharValue(dbData, flags, "creditorSchemeId", GWEN_Buffer_GetStart(tbuf)); } else if (strcasecmp(sVarName, "DEBT+")==0) { AHB_SWIFT_SetCharValue(dbData, flags, "originatorId", GWEN_Buffer_GetStart(tbuf)); } else if (strcasecmp(sVarName, "SVWZ+")==0) { AHB_SWIFT_SetCharValue(dbData, flags | GWEN_DB_FLAGS_OVERWRITE_VARS, "purpose", GWEN_Buffer_GetStart(tbuf)); } else if (strcasecmp(sVarName, "ABWA+")==0) { /* "abweichender Auftraggeber" */ AHB_SWIFT_SetCharValue(dbData, flags, "ultimateDebtor", GWEN_Buffer_GetStart(tbuf)); } else if (strcasecmp(sVarName, "ABWE+")==0) { /* "abweichender Empfaenger" */ AHB_SWIFT_SetCharValue(dbData, flags, "ultimateCreditor", GWEN_Buffer_GetStart(tbuf)); } else if (strcasecmp(sVarName, "_purpose")==0) { /* manually added tag (i.e. data outside a tag) * will be replaced if there was a real purpose field (i.e. "SVWZ+") */ AHB_SWIFT_SetCharValue(dbData, flags, "purpose", GWEN_Buffer_GetStart(tbuf)); } GWEN_Buffer_free(tbuf); } dbVar=GWEN_DB_GetNextVar(dbVar); } } void _parseTransactionData(const char *p, GWEN_DB_NODE *dbData, uint32_t flags) { char *pcopy=strdup(p); char *p1; /* unstructured :86:, simply store as mutliple purpose lines */ p1=pcopy; while (p1 && *p1) { char *p2; p2=strchr(p1, 10); if (p2) { *p2=0; p2++; } /* look for pattern "KTO/BLZ", if found try to extract remote account info * from unstructured purpose string */ if (-1!=GWEN_Text_ComparePattern(p1, "*KTO/BLZ */*", 0)) { char *p3; char *kto; p3=p1; while (*p3) { *p3=toupper(*p3); p3++; } kto=strstr(p1, "KTO/BLZ "); if (kto) { char *blz; kto+=8; blz=strchr(kto, '/'); if (blz) { *blz=0; blz++; p3=blz; while (*p3 && isdigit(*p3)) p3++; *p3=0; AHB_SWIFT_SetCharValue(dbData, flags, "remoteBankCode", blz); AHB_SWIFT_SetCharValue(dbData, flags, "remoteAccountNumber", kto); } } else { AHB_SWIFT_SetCharValue(dbData, flags, "purpose", p1); } } else AHB_SWIFT_SetCharValue(dbData, flags, "purpose", p1); p1=p2; } free(pcopy); } aqbanking-6.6.1/src/libs/plugins/parsers/swift/swift940.c0000664000175000017500000002570314546575650020203 00000000000000/*************************************************************************** begin : Fri Apr 02 2004 copyright : (C) 2022 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "swift940_p.h" #include "swift940_25.h" #include "swift940_60.h" #include "swift940_61.h" #include "swift940_86.h" #include "swift940_ns.h" #include "aqbanking/i18n_l.h" #include #include #include #include #include /* Import SWIFT MT940 data. @param tl input: list of tags. Tags are lines in a SWIFT data block (block 4). A tag has an id and content. See the AHB_SWIFT_Tag_new function for more information. */ int AHB_SWIFT940_Import(AHB_SWIFT_TAG_LIST *tl, GWEN_DB_NODE *data, GWEN_DB_NODE *cfg, uint32_t flags) { AHB_SWIFT_TAG *tg; GWEN_DB_NODE *dbDay=NULL; GWEN_DB_NODE *dbTemplate=NULL; GWEN_DB_NODE *dbTransaction=NULL; const char *sDate=NULL; uint32_t progressId; const char *acceptTag20="*"; const char *rejectTag20=NULL; const char *dateFallback="balanceDate"; int ignoreCurrentReport=0; acceptTag20=GWEN_DB_GetCharValue(cfg, "acceptTag20", 0, NULL); if (acceptTag20 && *acceptTag20==0) acceptTag20=NULL; rejectTag20=GWEN_DB_GetCharValue(cfg, "rejectTag20", 0, NULL); if (rejectTag20 && *rejectTag20==0) rejectTag20=NULL; dateFallback=GWEN_DB_GetCharValue(cfg, "dateFallback", 0, "balanceDate"); dbTemplate=GWEN_DB_Group_new("template"); progressId=GWEN_Gui_ProgressStart(GWEN_GUI_PROGRESS_DELAY | GWEN_GUI_PROGRESS_ALLOW_EMBED | GWEN_GUI_PROGRESS_SHOW_PROGRESS | GWEN_GUI_PROGRESS_SHOW_ABORT, I18N("Importing SWIFT tags..."), NULL, AHB_SWIFT_Tag_List_GetCount(tl), 0); tg=AHB_SWIFT_Tag_List_First(tl); while (tg) { const char *id; id=AHB_SWIFT_Tag_GetId(tg); assert(id); if (strcasecmp(id, "20")==0) { if (acceptTag20 || rejectTag20) { const char *p; p=AHB_SWIFT_Tag_GetData(tg); assert(p); if (rejectTag20) { if (-1!=GWEN_Text_ComparePattern(p, rejectTag20, 0)) { DBG_INFO(AQBANKING_LOGDOMAIN, "Ignoring report [%s]", p); ignoreCurrentReport=1; } else { ignoreCurrentReport=0; } } else if (acceptTag20) { if (-1==GWEN_Text_ComparePattern(p, acceptTag20, 0)) { DBG_INFO(AQBANKING_LOGDOMAIN, "Ignoring report [%s] (not matching [%s])", p, acceptTag20); ignoreCurrentReport=1; } else { ignoreCurrentReport=0; } } } } else { if (!ignoreCurrentReport) { if (strcasecmp(id, "25")==0) { /* LocalAccount */ if (AHB_SWIFT940_Parse_25(tg, flags, dbTemplate, cfg)) { DBG_INFO(AQBANKING_LOGDOMAIN, "Error in tag"); GWEN_DB_Group_free(dbTemplate); GWEN_Gui_ProgressEnd(progressId); return -1; } } else if (strcasecmp(id, "28C")==0) { /* Sequence/Statement Number - currently ignored */ /* PostFinance statements don't have a correctly incrementing count... */ } else if (strcasecmp(id, "60M")==0 || /* Interim StartSaldo */ strcasecmp(id, "60F")==0) { /* StartSaldo */ GWEN_DB_NODE *dbSaldo; const char *curr; /* start a new day */ dbDay=GWEN_DB_GetGroup(data, GWEN_PATH_FLAGS_CREATE_GROUP, "day"); dbTransaction=0; DBG_INFO(AQBANKING_LOGDOMAIN, "Starting new day"); if (strcasecmp(id, "60F")==0) dbSaldo=GWEN_DB_GetGroup(dbDay, GWEN_PATH_FLAGS_CREATE_GROUP, "StartSaldo"); else dbSaldo=GWEN_DB_GetGroup(dbDay, GWEN_PATH_FLAGS_CREATE_GROUP, "InterimStartSaldo"); GWEN_DB_AddGroupChildren(dbSaldo, dbTemplate); if (AHB_SWIFT940_Parse_60_62(tg, flags, dbSaldo, cfg)) { DBG_INFO(AQBANKING_LOGDOMAIN, "Error in tag"); GWEN_DB_Group_free(dbTemplate); GWEN_Gui_ProgressEnd(progressId); return -1; } else { sDate=GWEN_DB_GetCharValue(dbSaldo, "date", 0, NULL); DBG_INFO(AQBANKING_LOGDOMAIN, "Storing date \"%s\" as default for maybe later", sDate?sDate:"(empty)"); } curr=GWEN_DB_GetCharValue(dbSaldo, "value/currency", 0, 0); if (curr) { AHB_SWIFT_SetCharValue(dbTemplate, flags, "value/currency", curr); } if (strcasecmp(id, "60F")==0) GWEN_DB_SetCharValue(dbSaldo, GWEN_DB_FLAGS_OVERWRITE_VARS, "type", "final"); else GWEN_DB_SetCharValue(dbSaldo, GWEN_DB_FLAGS_OVERWRITE_VARS, "type", "interim"); } else if (strcasecmp(id, "62M")==0 || /* Interim EndSaldo */ strcasecmp(id, "62F")==0) { /* EndSaldo */ GWEN_DB_NODE *dbSaldo; /* end current day */ dbTransaction=0; if (!dbDay) { DBG_WARN(AQBANKING_LOGDOMAIN, "Your bank does not send an opening saldo"); dbDay=GWEN_DB_GetGroup(data, GWEN_PATH_FLAGS_CREATE_GROUP, "day"); } dbSaldo=GWEN_DB_GetGroup(dbDay, GWEN_PATH_FLAGS_CREATE_GROUP, "EndSaldo"); GWEN_DB_AddGroupChildren(dbSaldo, dbTemplate); if (AHB_SWIFT940_Parse_60_62(tg, flags, dbSaldo, cfg)) { DBG_INFO(AQBANKING_LOGDOMAIN, "Error in tag"); GWEN_DB_Group_free(dbTemplate); GWEN_Gui_ProgressEnd(progressId); return -1; } if (strcasecmp(id, "62F")==0) GWEN_DB_SetCharValue(dbSaldo, GWEN_DB_FLAGS_OVERWRITE_VARS, "type", "final"); else GWEN_DB_SetCharValue(dbSaldo, GWEN_DB_FLAGS_OVERWRITE_VARS, "type", "interim"); dbDay=0; } else if (strcasecmp(id, "61")==0) { const char *s; if (!dbDay) { DBG_WARN(AQBANKING_LOGDOMAIN, "Your bank does not send an opening saldo"); dbDay=GWEN_DB_GetGroup(data, GWEN_PATH_FLAGS_CREATE_GROUP, "day"); } DBG_INFO(AQBANKING_LOGDOMAIN, "Creating new transaction"); dbTransaction=GWEN_DB_GetGroup(dbDay, GWEN_PATH_FLAGS_CREATE_GROUP, "transaction"); GWEN_DB_AddGroupChildren(dbTransaction, dbTemplate); if (AHB_SWIFT940_Parse_61(tg, flags, dbTransaction, cfg)) { DBG_INFO(AQBANKING_LOGDOMAIN, "Error in tag"); GWEN_DB_Group_free(dbTemplate); GWEN_Gui_ProgressEnd(progressId); return -1; } s=GWEN_DB_GetCharValue(dbTransaction, "date", 0, NULL); if (!(s && *s)) { if (strcasecmp(dateFallback, "balanceDate")==0) { if (sDate && *sDate) GWEN_DB_SetCharValue(dbTransaction, GWEN_DB_FLAGS_OVERWRITE_VARS, "date", sDate); else { s=GWEN_DB_GetCharValue(dbTransaction, "valutaDate", 0, NULL); if (s && *s) GWEN_DB_SetCharValue(dbTransaction, GWEN_DB_FLAGS_OVERWRITE_VARS, "date", s); } } else if (strcasecmp(dateFallback, "valutaDate")==0) { s=GWEN_DB_GetCharValue(dbTransaction, "valutaDate", 0, NULL); if (s && *s) GWEN_DB_SetCharValue(dbTransaction, GWEN_DB_FLAGS_OVERWRITE_VARS, "date", s); } else if (strcasecmp(dateFallback, "none")==0) { /* leave date empty */ } } } else if (strcasecmp(id, "86")==0) { if (!dbTransaction) { DBG_WARN(AQBANKING_LOGDOMAIN, "Bad sequence of tags (86 before 61), ignoring"); } else { if (AHB_SWIFT940_Parse_86(tg, flags, dbTransaction, cfg)) { DBG_INFO(AQBANKING_LOGDOMAIN, "Error in tag"); GWEN_DB_Group_free(dbTemplate); GWEN_Gui_ProgressEnd(progressId); return -1; } } } else if (strcasecmp(id, "NS")==0) { if (!dbTransaction) { DBG_DEBUG(AQBANKING_LOGDOMAIN, "Ignoring NS tags outside transactions"); } else { if (AHB_SWIFT940_Parse_NS(tg, flags, dbTransaction, cfg)) { DBG_INFO(AQBANKING_LOGDOMAIN, "Error in tag"); GWEN_DB_Group_free(dbTemplate); GWEN_Gui_ProgressEnd(progressId); return -1; } } } else if (strcmp(id, "21")==0) { const char *p; p=AHB_SWIFT_Tag_GetData(tg); assert(p); if (0==strcmp(p, "NONREF")) { DBG_INFO(AQBANKING_LOGDOMAIN, "Ignoring related reference '%s' in document tag 21.", p); } else { DBG_WARN(AQBANKING_LOGDOMAIN, "Unexpected related reference '%s' in document tag 21 encountered.", p); } } else if (strcmp(id, "13")==0 || /* "Erstellungszeitpunkt */ strcmp(id, "34F")==0 || /* "Mindestbetrag" (sometimes contains some strange values) */ strcmp(id, "90D")==0 || /* "Anzahl und Summe Soll-Buchungen" (examples I've seen are invalid anyway) */ strcmp(id, "90C")==0) { /* "Anzahl und Summe Haben-Buchungen" (examples I've seen are invalid anyway) */ /* ignore some well known tags */ DBG_INFO(AQBANKING_LOGDOMAIN, "Ignoring well known tag \"%s\"", id); } else { DBG_WARN(AQBANKING_LOGDOMAIN, "Unhandled tag '%s' found. " "This only means the file contains info we currently don't read, " "in most cases this is unimportant data.", id); DBG_WARN(AQBANKING_LOGDOMAIN, "To debug set environment variable AQBANKING_LOGLEVEL=info and rerun," "otherwise just ignore this message."); } } } if (GWEN_Gui_ProgressAdvance(progressId, GWEN_GUI_PROGRESS_ONE)== GWEN_ERROR_USER_ABORTED) { GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("Aborted by user")); GWEN_Gui_ProgressEnd(progressId); GWEN_DB_Group_free(dbTemplate); return GWEN_ERROR_USER_ABORTED; } tg=AHB_SWIFT_Tag_List_Next(tg); } /* while */ GWEN_DB_Group_free(dbTemplate); GWEN_Gui_ProgressEnd(progressId); return 0; } aqbanking-6.6.1/src/libs/plugins/parsers/swift/swift940_ns.c0000664000175000017500000000564114271335671020672 00000000000000/*************************************************************************** begin : Fri Apr 02 2004 copyright : (C) 2022 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "swift940_ns.h" #include #include #include #include int AHB_SWIFT940_Parse_NS(const AHB_SWIFT_TAG *tg, uint32_t flags, GWEN_DB_NODE *data, GWEN_DB_NODE *cfg) { const char *p; const char *p2; /* TODO: Use AHB_SWIFT_ParseSubTags */ p=AHB_SWIFT_Tag_GetData(tg); assert(p); while (*p) { int code; code=0; /* read code */ if (strlen(p)>2) { if (isdigit(p[0]) && isdigit(p[1])) { /* starts with a two digit number */ code=(((p[0]-'0')*10) + (p[1]-'0')); p+=2; } } /* search for end of line */ p2=p; while (*p2 && *p2!=10 && *p2!=13) p2++; if (code==0) { DBG_WARN(AQBANKING_LOGDOMAIN, "No code in line"); p=p2; } else { int len; len=p2-p; if (len<1 || (len==1 && *p=='/')) { DBG_DEBUG(AQBANKING_LOGDOMAIN, "Empty field %02d", code); } else { char *s; s=(char *)GWEN_Memory_malloc(len+1); memmove(s, p, len); s[len]=0; DBG_DEBUG(AQBANKING_LOGDOMAIN, "Got his field: %02d: %s", code, s); switch (code) { case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: case 10: case 11: case 12: case 13: case 14: AHB_SWIFT_SetCharValue(data, flags, "purpose", s); break; case 15: /* Auftraggeber1 */ case 16: /* Auftraggeber2 */ AHB_SWIFT_SetCharValue(data, flags, "localName", s); break; case 17: /* Buchungstext */ AHB_SWIFT_SetCharValue(data, flags, "transactionText", s); break; case 18: /* Primanota */ AHB_SWIFT_SetCharValue(data, flags, "primanota", s); break; case 19: /* Uhrzeit der Buchung */ case 20: /* Anzahl der Sammlerposten */ case 33: /* BLZ Auftraggeber */ case 34: /* Konto Auftraggeber */ break; default: /* ignore all other fields (if any) */ DBG_WARN(AQBANKING_LOGDOMAIN, "Unknown :NS: field \"%02d\" (%s) (%s)", code, s, AHB_SWIFT_Tag_GetData(tg)); break; } GWEN_Memory_dealloc(s); } p=p2; } if (*p==10) p++; if (*p==13) p++; if (*p==10) p++; } /* while */ return 0; } aqbanking-6.6.1/src/libs/plugins/parsers/swift/swift940_61.c0000664000175000017500000002752714546575650020517 00000000000000/*************************************************************************** begin : Fri Apr 02 2004 copyright : (C) 2022 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "swift940_61.h" #include #include #include #include /* ------------------------------------------------------------------------------------------------ * forward declarations * ------------------------------------------------------------------------------------------------ */ static int _readValutaAndBookingDate(const char **pCurrentChar, unsigned int *pBytesLeft, GWEN_DB_NODE *data); static int _readAmount(const char **pCurrentChar, unsigned int *pBytesLeft, GWEN_DB_NODE *data, GWEN_DB_NODE *cfg); static int _readBookingKey(const char **pCurrentChar, unsigned int *pBytesLeft, GWEN_DB_NODE *data); static int _tryReadExtraAmountTag(const char **pCurrentChar, unsigned int *pBytesLeft, const char *tagName, GWEN_DB_NODE *data, const char *groupName); static int _readAmountFromExtraLine(const char **pCurrentChar, unsigned int *pBytesLeft, GWEN_DB_NODE *data, const char *groupName); static int _readTextAfterDoubleSlashesReturnLength(const char **pCurrentChar, unsigned int *pBytesLeft, GWEN_DB_NODE *data, const char *varName, uint32_t flags); static int _readTextUntilSlashOrEndReturnLength(const char **pCurrentChar, unsigned int *pBytesLeft, GWEN_DB_NODE *data, const char *varName, uint32_t flags); /* ------------------------------------------------------------------------------------------------ * implementations * ------------------------------------------------------------------------------------------------ */ int AHB_SWIFT940_Parse_61(const AHB_SWIFT_TAG *tg, uint32_t flags, GWEN_DB_NODE *data, GWEN_DB_NODE *cfg) { const char *p; unsigned int bleft; int rv; const char *s; int readExtraData61=0; s=GWEN_DB_GetCharValue(cfg, "readExtraData61", 0, "no"); if (s && *s) readExtraData61=(strcasecmp(s, "yes")==0)?1:0; p=AHB_SWIFT_Tag_GetData(tg); assert(p); bleft=strlen(p); rv=_readValutaAndBookingDate(&p, &bleft, data); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); return rv; } rv=_readAmount(&p, &bleft, data, cfg); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); return rv; } if (bleft>0) { /* skip 'N' */ p++; bleft--; } rv=_readBookingKey(&p, &bleft, data); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); return rv; } /* customer reference (M) */ rv=_readTextUntilSlashOrEndReturnLength(&p, &bleft, data, "customerReference", flags); if (rv>0) { const char *s; s=GWEN_DB_GetCharValue(data, "customerReference", 0, NULL); if (s && strcasecmp(s, "NONREF")==0) GWEN_DB_DeleteVar(data, "customerReference"); } else if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d) [%s]", rv, p); return rv; } else { DBG_WARN(AQBANKING_LOGDOMAIN, "Missing customer reference (%s), ignoring", p); } /* bank reference (K) */ rv=_readTextAfterDoubleSlashesReturnLength(&p, &bleft, data, "bankReference", flags); if (rv<0) { DBG_WARN(AQBANKING_LOGDOMAIN, "Error reading bank reference (%s)", p); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, "SWIFT: Error reading bank reference"); } /* more information ? */ if (*p==10) { /* yes... */ p++; bleft--; while (*p) { /* read extra information */ rv=_tryReadExtraAmountTag(&p, &bleft, "/OCMT/", data, "origvalue"); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); return rv; } if (rv<1) { /* no OCMT, try next */ rv=_tryReadExtraAmountTag(&p, &bleft, "/CHGS/", data, "fees"); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); return rv; } } if (rv<1) { /* no CHGS, try next */ if (readExtraData61) { /* add extra data to purpose lines */ AHB_SWIFT_SetCharValue(data, GWEN_DB_FLAGS_DEFAULT, "purpose", p); return 0; } else { /* we should read the remainder of the line because that might contain important data * for non-German users (see example file in bug #262), but where to store? */ DBG_WARN(AQBANKING_LOGDOMAIN, "Unknown/unstructured extra data, ignoring for now (%s)", p); /* probably skip "/" if any */ return 0; } } } /* while */ } /* if there is extra data */ return 0; } int _readValutaAndBookingDate(const char **pCurrentChar, unsigned int *pBytesLeft, GWEN_DB_NODE *data) { const char *p; unsigned int bleft; GWEN_DATE *valutaDate; GWEN_DATE *bookingDate; p=*pCurrentChar; bleft=*pBytesLeft; valutaDate=AHB_SWIFT_ReadDateYYMMDD(&p, &bleft); if (valutaDate==NULL) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Missing or invalid valuta date (%s)", p); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, "SWIFT: Missing or invalid valuta date"); return GWEN_ERROR_GENERIC; } bookingDate=AHB_SWIFT_ReadDateMMDDWithReference(&p, &bleft, valutaDate); if (bookingDate==NULL) { DBG_INFO(AQBANKING_LOGDOMAIN, "No or bad booking date in transaction (%s), ignoring", p); } GWEN_DB_SetCharValue(data, GWEN_DB_FLAGS_OVERWRITE_VARS, "valutaDate", GWEN_Date_GetString(valutaDate)); if (bookingDate) GWEN_DB_SetCharValue(data, GWEN_DB_FLAGS_OVERWRITE_VARS, "date", GWEN_Date_GetString(bookingDate)); GWEN_Date_free(bookingDate); GWEN_Date_free(valutaDate); *pCurrentChar=p; *pBytesLeft=bleft; return 0; } int _readAmount(const char **pCurrentChar, unsigned int *pBytesLeft, GWEN_DB_NODE *data, GWEN_DB_NODE *cfg) { const char *p; unsigned int bleft; int neg; const char *p2; char *s; p=*pCurrentChar; bleft=*pBytesLeft; /* credit/debit mark (M) */ if (bleft<2) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Bad value string (%s)", p); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, "SWIFT: Bad value string"); return GWEN_ERROR_GENERIC; } neg=0; if (*p=='R') { if (p[1]=='C' || p[1]=='c') neg=1; p+=2; bleft-=2; } else { if (*p=='D' || *p=='d') neg=1; p++; bleft--; } /* third character of currency (K) */ if (bleft<1) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Bad data (%s)", p); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, "SWIFT: Bad currency"); return GWEN_ERROR_GENERIC; } if (!isdigit(*p)) { /* found third character, skip it */ p++; bleft--; } /* value (M) */ p2=p; while (*p2 && (isdigit(*p2) || *p2==',')) p2++; if (p2==p) { DBG_ERROR(AQBANKING_LOGDOMAIN, "No value (%s)", p); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, "SWIFT: Bad value"); return GWEN_ERROR_GENERIC; } s=(char *)GWEN_Memory_malloc(p2-p+1+(neg?1:0)); if (neg) { s[0]='-'; memmove(s+1, p, p2-p+1); s[p2-p+1]=0; } else { memmove(s, p, p2-p+1); s[p2-p]=0; } if (1) { const char *cu; AHB_SWIFT_SetCharValue(data, GWEN_DB_FLAGS_OVERWRITE_VARS, "value/value", s); cu=GWEN_DB_GetCharValue(cfg, "currency", 0, 0); if (cu && *cu) AHB_SWIFT_SetCharValue(data, GWEN_DB_FLAGS_OVERWRITE_VARS, "value/currency", cu); } GWEN_Memory_dealloc(s); bleft-=p2-p; p=p2; *pCurrentChar=p; *pBytesLeft=bleft; return 0; } int _readBookingKey(const char **pCurrentChar, unsigned int *pBytesLeft, GWEN_DB_NODE *data) { const char *p; unsigned int bleft; char buffer[32]; p=*pCurrentChar; bleft=*pBytesLeft; /* key (M) */ if (bleft<3) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Missing booking key (%s)", p); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, "SWIFT: Missing booking key"); return GWEN_ERROR_GENERIC; } memmove(buffer, p, 3); buffer[3]=0; AHB_SWIFT_SetCharValue(data, GWEN_DB_FLAGS_OVERWRITE_VARS, "transactionKey", buffer); p+=3; bleft-=3; *pCurrentChar=p; *pBytesLeft=bleft; return 0; } int _tryReadExtraAmountTag(const char **pCurrentChar, unsigned int *pBytesLeft, const char *tagName, GWEN_DB_NODE *data, const char *groupName) { const char *p; unsigned int bleft; int tlength; tlength=strlen(tagName); p=*pCurrentChar; bleft=*pBytesLeft; if (bleft>=tlength && strncasecmp(p, tagName, tlength)==0) { int rv; /* original value */ p+=tlength; bleft-=tlength; rv=_readAmountFromExtraLine(&p, &bleft, data, groupName); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); return rv; } *pCurrentChar=p; *pBytesLeft=bleft; return 1; } return 0; } int _readAmountFromExtraLine(const char **pCurrentChar, unsigned int *pBytesLeft, GWEN_DB_NODE *data, const char *groupName) { const char *p; unsigned int bleft; p=*pCurrentChar; bleft=*pBytesLeft; if (bleft>0) { const char *p2; char *s; char buffer[32]; GWEN_DB_NODE *dbGroup; dbGroup=GWEN_DB_GetGroup(data, GWEN_DB_FLAGS_OVERWRITE_GROUPS, groupName); assert(dbGroup); /* get currency */ memmove(buffer, p, 3); buffer[3]=0; AHB_SWIFT_SetCharValue(dbGroup, GWEN_DB_FLAGS_OVERWRITE_VARS, "currency", buffer); p+=3; bleft-=3; if (*p=='/') { /* Deutsche Bank seems to be sending */ p++; /* a "/" between currency and amount */ bleft--; } /* get value */ p2=p; while (*p2 && *p2!='/') p2++; if (p2==p) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Bad charges value (%s)", p); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, "SWIFT: Bad charges value"); return GWEN_ERROR_GENERIC; } s=(char *)GWEN_Memory_malloc(p2-p+1); memmove(s, p, p2-p+1); s[p2-p]=0; AHB_SWIFT_SetCharValue(dbGroup, GWEN_DB_FLAGS_OVERWRITE_VARS, "value", s); GWEN_Memory_dealloc(s); bleft-=p2-p; p=p2; *pCurrentChar=p; *pBytesLeft=bleft; return 0; } return GWEN_ERROR_BAD_DATA; } int _readTextAfterDoubleSlashesReturnLength(const char **pCurrentChar, unsigned int *pBytesLeft, GWEN_DB_NODE *data, const char *varName, uint32_t flags) { const char *p; unsigned int bleft; p=*pCurrentChar; bleft=*pBytesLeft; if (bleft>1) { if (*p=='/' && p[1]=='/') { int rv; p+=2; bleft-=2; rv=_readTextUntilSlashOrEndReturnLength(&p, &bleft, data, varName, flags); *pCurrentChar=p; *pBytesLeft=bleft; if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); return rv; } return rv; } } /* no data */ return 0; } int _readTextUntilSlashOrEndReturnLength(const char **pCurrentChar, unsigned int *pBytesLeft, GWEN_DB_NODE *data, const char *varName, uint32_t flags) { const char *p; unsigned int bleft; int length=0; p=*pCurrentChar; bleft=*pBytesLeft; if (bleft>0) { const char *p2; p2=p; while (*p2 && *p2!='/' && *p2!=10) p2++; if (p2==p) { DBG_INFO(AQBANKING_LOGDOMAIN, "Empty text for %s (%s)", varName, p); return 0; } else { char *s; length=p2-p; s=(char *)GWEN_Memory_malloc(length+1); /* take trailing zero into account */ memmove(s, p, length); s[length]=0; AHB_SWIFT_SetCharValue(data, flags, varName, s); GWEN_Memory_dealloc(s); } bleft-=length; p=p2; } *pCurrentChar=p; *pBytesLeft=bleft; return length; } aqbanking-6.6.1/src/libs/plugins/parsers/swift/swift_l.h0000664000175000017500000000214314271335671020247 00000000000000/*************************************************************************** begin : Fri Apr 02 2004 copyright : (C) 2022 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AQHBCIBANK_SWIFT_l_H #define AQHBCIBANK_SWIFT_l_H #include "swift_tag.h" #include #include #include #define AHB_SWIFT_MAXLINELEN 2048 #define AHB_SWIFT_CENTURY_CUTOFF_YEAR 79 /*#define ENABLE_FULL_SEPA_LOG*/ int AHB_SWIFT_Condense(char *buffer, int keepDoubleBlanks); int AHB_SWIFT_SetCharValue(GWEN_DB_NODE *db, uint32_t flags, const char *name, const char *s); GWEN_DATE *AHB_SWIFT_ReadDateYYMMDD(const char **pCurrentChar, unsigned int *pBytesLeft); GWEN_DATE *AHB_SWIFT_ReadDateMMDDWithReference(const char **pCurrentChar, unsigned int *pBytesLeft, const GWEN_DATE *refDate); #endif /* AQHBCIBANK_SWIFT_L_H */ aqbanking-6.6.1/src/libs/plugins/parsers/swift/README0000664000175000017500000000026614043610745017306 00000000000000This folder contains a parser for the international finance transaction format SWIFT. It currently contains code for SWIFT MT940 and MT942 records used in transaction statements. aqbanking-6.6.1/src/libs/plugins/parsers/swift/swift535_p.h0000664000175000017500000000326414043610745020510 00000000000000/*************************************************************************** begin : Fri Apr 02 2004 copyright : (C) 2004-2015 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AQHBCIBANK_SWIFT535_P_H #define AQHBCIBANK_SWIFT535_P_H #include "swift_l.h" #include enum { AHB_SWIFT535_LEVEL_TOP=0, AHB_SWIFT535_LEVEL_GENL, AHB_SWIFT535_LEVEL_SUBSAFE, AHB_SWIFT535_LEVEL_FIN, AHB_SWIFT535_LEVEL_SUBBAL, AHB_SWIFT535_LEVEL_ADDINFO }; int AHB_SWIFT535_Parse_97A(const AHB_SWIFT_TAG *tg, uint32_t flags, GWEN_DB_NODE *data, GWEN_DB_NODE *cfg); int AHB_SWIFT535_Parse_35B(const AHB_SWIFT_TAG *tg, uint32_t flags, GWEN_DB_NODE *data, GWEN_DB_NODE *cfg); int AHB_SWIFT535_Parse_90B(const AHB_SWIFT_TAG *tg, uint32_t flags, GWEN_DB_NODE *data, GWEN_DB_NODE *cfg); int AHB_SWIFT535_Parse_98A(const AHB_SWIFT_TAG *tg, uint32_t flags, GWEN_DB_NODE *data, GWEN_DB_NODE *cfg); int AHB_SWIFT535_Parse_93B(const AHB_SWIFT_TAG *tg, uint32_t flags, GWEN_DB_NODE *data, GWEN_DB_NODE *cfg); #endif /* AQHBCIBANK_SWIFT535_P_H */ aqbanking-6.6.1/src/libs/plugins/parsers/swift/swift_tag.c0000664000175000017500000001176714271335671020576 00000000000000/*************************************************************************** begin : Fri Apr 02 2004 copyright : (C) 2004-2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "swift_tag_p.h" #include "swift_l.h" #include #include #include #include GWEN_LIST_FUNCTIONS(AHB_SWIFT_TAG, AHB_SWIFT_Tag); GWEN_LIST_FUNCTIONS(AHB_SWIFT_SUBTAG, AHB_SWIFT_SubTag); /* ------------------------------------------------------------------------------------------------ * forward declarations * ------------------------------------------------------------------------------------------------ */ static const char *_findStartOfSubTag(const char *sptr); /* Create a tag object from a tag ID and the content of the tag. Example: Given the following line inside a SWIFT data block: :28C:7/1 You'd call AHB_SWIFT_Tag_new like this: AHB_SWIFT_Tag_new("28C", "7/1") @return a new AHB_SWIFT_TAG */ AHB_SWIFT_TAG *AHB_SWIFT_Tag_new(const char *id, const char *content) { AHB_SWIFT_TAG *tg; assert(id); assert(content); GWEN_NEW_OBJECT(AHB_SWIFT_TAG, tg); GWEN_LIST_INIT(AHB_SWIFT_TAG, tg); tg->id=strdup(id); tg->content=strdup(content); return tg; } void AHB_SWIFT_Tag_free(AHB_SWIFT_TAG *tg) { if (tg) { GWEN_LIST_FINI(AHB_SWIFT_TAG, tg); free(tg->id); free(tg->content); GWEN_FREE_OBJECT(tg); } } const char *AHB_SWIFT_Tag_GetId(const AHB_SWIFT_TAG *tg) { assert(tg); return tg->id; } const char *AHB_SWIFT_Tag_GetData(const AHB_SWIFT_TAG *tg) { assert(tg); return tg->content; } AHB_SWIFT_SUBTAG *AHB_SWIFT_SubTag_new(int id, const char *content, int clen) { AHB_SWIFT_SUBTAG *stg; assert(content); GWEN_NEW_OBJECT(AHB_SWIFT_SUBTAG, stg); GWEN_LIST_INIT(AHB_SWIFT_SUBTAG, stg); stg->id=id; if (clen==-1) clen=strlen(content); stg->content=(char *)malloc(clen+1); memmove(stg->content, content, clen); stg->content[clen]=0; return stg; } void AHB_SWIFT_SubTag_free(AHB_SWIFT_SUBTAG *stg) { if (stg) { GWEN_LIST_FINI(AHB_SWIFT_SUBTAG, stg); free(stg->content); GWEN_FREE_OBJECT(stg); } } int AHB_SWIFT_SubTag_GetId(const AHB_SWIFT_SUBTAG *stg) { assert(stg); return stg->id; } const char *AHB_SWIFT_SubTag_GetData(const AHB_SWIFT_SUBTAG *stg) { assert(stg); return stg->content; } AHB_SWIFT_SUBTAG *AHB_SWIFT_FindSubTagById(const AHB_SWIFT_SUBTAG_LIST *stlist, int id) { AHB_SWIFT_SUBTAG *stg; stg=AHB_SWIFT_SubTag_List_First(stlist); while (stg) { if (stg->id==id) break; stg=AHB_SWIFT_SubTag_List_Next(stg); } return stg; } void AHB_SWIFT_SubTag_Condense(AHB_SWIFT_SUBTAG *stg, int keepMultipleBlanks) { assert(stg); AHB_SWIFT_Condense(stg->content, keepMultipleBlanks); } const char *_findStartOfSubTag(const char *sptr) { while (*sptr) { if (*sptr=='?') { const char *t; t=sptr; t++; if (*t==0x0a) t++; if (*t && isdigit(*t)) { t++; if (*t==0x0a) t++; if (*t && isdigit(*t)) { return sptr; } } } sptr++; } return NULL; } int AHB_SWIFT_GetNextSubTag(const char **sptr, AHB_SWIFT_SUBTAG **tptr) { const char *s; int id=0; /*int nextId=0;*/ const char *content=NULL; const char *startOfSubTag; AHB_SWIFT_SUBTAG *stg; s=*sptr; startOfSubTag=_findStartOfSubTag(s); if (startOfSubTag) { const char *t; const char *startOfNextSubTag; t=startOfSubTag; t++; /* skip '?' */ if (*t==0x0a) t++; if (*t && isdigit(*t)) { id=(*(t++)-'0')*10; if (*t==0x0a) t++; if (*t && isdigit(*t)) { id+=*(t++)-'0'; s=t; } } content=s; /* create subtag */ startOfNextSubTag=_findStartOfSubTag(s); if (startOfNextSubTag) stg=AHB_SWIFT_SubTag_new(id, content, startOfNextSubTag-content); else /* rest of line */ stg=AHB_SWIFT_SubTag_new(id, content, -1); /* update return pointers */ *tptr=stg; *sptr=startOfNextSubTag; return 0; } else { DBG_ERROR(GWEN_LOGDOMAIN, "No subtag found"); return GWEN_ERROR_NO_DATA; } } int AHB_SWIFT_ParseSubTags(const char *s, AHB_SWIFT_SUBTAG_LIST *stlist, int keepMultipleBlanks) { while (s && *s) { int rv; AHB_SWIFT_SUBTAG *stg=NULL; rv=AHB_SWIFT_GetNextSubTag(&s, &stg); if (rv) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); return rv; } AHB_SWIFT_SubTag_Condense(stg, keepMultipleBlanks); /*DBG_ERROR(GWEN_LOGDOMAIN, "Adding subtag %d: [%s]", AHB_SWIFT_SubTag_GetId(stg), AHB_SWIFT_SubTag_GetData(stg));*/ AHB_SWIFT_SubTag_List_Add(stg, stlist); } return 0; } aqbanking-6.6.1/src/libs/plugins/parsers/swift/swift940_p.h0000664000175000017500000000247714043610745020515 00000000000000/*************************************************************************** begin : Fri Apr 02 2004 copyright : (C) 2004-2015 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AQHBCIBANK_SWIFT940_P_H #define AQHBCIBANK_SWIFT940_P_H #include "swift_l.h" #include int AHB_SWIFT940_Parse_25(const AHB_SWIFT_TAG *tg, uint32_t flags, GWEN_DB_NODE *data, GWEN_DB_NODE *cfg); int AHB_SWIFT940_Parse_86(const AHB_SWIFT_TAG *tg, uint32_t flags, GWEN_DB_NODE *data, GWEN_DB_NODE *cfg); int AHB_SWIFT940_Parse_61(const AHB_SWIFT_TAG *tg, uint32_t flags, GWEN_DB_NODE *data, GWEN_DB_NODE *cfg); int AHB_SWIFT940_Parse_6_0_2(const AHB_SWIFT_TAG *tg, uint32_t flags, GWEN_DB_NODE *data, GWEN_DB_NODE *cfg); #endif /* AQHBCIBANK_SWIFT940_P_H */ aqbanking-6.6.1/src/libs/plugins/parsers/swift/swift940_ns.h0000664000175000017500000000117614271335671020676 00000000000000/*************************************************************************** begin : Fri Apr 02 2004 copyright : (C) 2022 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AB_PARSER_SWIFT_SWIFT940_NS_H #define AB_PARSER_SWIFT_SWIFT940_NS_H #include "swift_l.h" int AHB_SWIFT940_Parse_NS(const AHB_SWIFT_TAG *tg, uint32_t flags, GWEN_DB_NODE *data, GWEN_DB_NODE *cfg); #endif aqbanking-6.6.1/src/libs/plugins/parsers/swift/swift940_61.h0000664000175000017500000000117614271246524020502 00000000000000/*************************************************************************** begin : Fri Apr 02 2004 copyright : (C) 2022 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AB_PARSER_SWIFT_SWIFT940_61_H #define AB_PARSER_SWIFT_SWIFT940_61_H #include "swift_l.h" int AHB_SWIFT940_Parse_61(const AHB_SWIFT_TAG *tg, uint32_t flags, GWEN_DB_NODE *data, GWEN_DB_NODE *cfg); #endif aqbanking-6.6.1/src/libs/plugins/parsers/swift/swift940_86.h0000664000175000017500000000117614271335671020513 00000000000000/*************************************************************************** begin : Fri Apr 02 2004 copyright : (C) 2022 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AB_PARSER_SWIFT_SWIFT940_86_H #define AB_PARSER_SWIFT_SWIFT940_86_H #include "swift_l.h" int AHB_SWIFT940_Parse_86(const AHB_SWIFT_TAG *tg, uint32_t flags, GWEN_DB_NODE *data, GWEN_DB_NODE *cfg); #endif aqbanking-6.6.1/src/libs/plugins/parsers/swift/swift.xml.in0000664000175000017500000000043014043610745020702 00000000000000 @AQBANKING_VERSION_STRING@ Martin Preuss(martin@libchipcard.de) Importer and Exporter for SWIFT This plugin imports SWIFT (MT940) data. aqbanking-6.6.1/src/libs/plugins/parsers/swift/swift.c0000664000175000017500000005755514546575650017760 00000000000000/*************************************************************************** begin : Fri Apr 02 2004 copyright : (C) 2004-2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "swift_l.h" #include "swift940_l.h" #include "swift535_l.h" #include "aqbanking/i18n_l.h" #include #include #include #include #include #include #include #include #include #include #include /* ------------------------------------------------------------------------------------------------ * forward declarations * ------------------------------------------------------------------------------------------------ */ static int _pluginExport(GWEN_DBIO *dbio, GWEN_SYNCIO *sio, GWEN_DB_NODE *data, GWEN_DB_NODE *cfg, uint32_t flags); static int _pluginImport(GWEN_DBIO *dbio, GWEN_SYNCIO *sio, GWEN_DB_NODE *data, GWEN_DB_NODE *cfg, uint32_t flags); static GWEN_DBIO_CHECKFILE_RESULT _pluginCheckFile(GWEN_DBIO *dbio, const char *fname); static GWEN_DBIO *_pluginFactory(GWEN_PLUGIN *pl); static void _iso8859_1ToUtf8(const char *p, int size, GWEN_BUFFER *buf); static GWEN_DATE *_dateFromYMD(int dateYear, int dateMonth, int dateDay); static int _readDocument(GWEN_FAST_BUFFER *fb, AHB_SWIFT_TAG_LIST *tl, unsigned int maxTags); static int _readTextBlock(GWEN_FAST_BUFFER *fb, AHB_SWIFT_TAG_LIST *tl, unsigned int maxTags); /** * This function reads a line from a buffered IO stream. It stops when either * the line or the stream ends. The end of line is signalled by an LF * character or a series of two "@" characters (for historical reasons). */ static int _readDocLine(GWEN_FAST_BUFFER *fb, char *buffer, unsigned int s); GWENHYWFAR_EXPORT GWEN_PLUGIN *dbio_swift_factory(GWEN_PLUGIN_MANAGER *pm, const char *modName, const char *fileName); /* ------------------------------------------------------------------------------------------------ * implementations * ------------------------------------------------------------------------------------------------ */ int AHB_SWIFT_Condense(char *buffer, int keepMultipleBlanks) { char *src; char *dst; if (keepMultipleBlanks) { src=buffer; dst=buffer; /* only remove line feed */ while (*src) { if (*src!=10) { *dst=*src; dst++; } src++; } /* while */ } else { int lastWasBlank; src=buffer; while (*src && isspace(*src)) src++; dst=buffer; lastWasBlank=0; while (*src) { if (isspace(*src) && (*src!=10)) { if (!lastWasBlank) { *(dst++)=' '; lastWasBlank=1; } } else { lastWasBlank=0; if (*src!=10) { *(dst++)=*src; } } src++; } /* while */ } *dst=0; return 0; } /* This reads a line within a SWIFT data block (block 4) @param *fb pointer to a GWEN_FAST_BUFFER input buffer @param *buffer pointer to a char* output buffer @param s size of the output buffer */ int _readDocLine(GWEN_FAST_BUFFER *fb, char *buffer, unsigned int s) { int lastWasAt; char *obuffer; assert(fb); assert(buffer); assert(s); obuffer=buffer; *buffer=0; lastWasAt=0; for (;;) { int c; GWEN_FASTBUFFER_PEEKBYTE(fb, c); if (c<0) { if (c==GWEN_ERROR_EOF) { if (*obuffer==0) { return GWEN_ERROR_EOF; } break; } else { DBG_ERROR(AQBANKING_LOGDOMAIN, "Error reading from stream"); *buffer=0; return c; } } if (c=='}') { /* stop on curly bracket without reading it */ break; } GWEN_FASTBUFFER_READBYTE(fb, c); if (c==10) break; else if (c=='@') { if (lastWasAt) break; else lastWasAt=1; } else { lastWasAt=0; if (c!=13) { if (s<2) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Buffer full (line too long)"); *buffer=0; return -1; } *buffer=c; buffer++; s--; } } } /* for */ *buffer=0; /*GWEN_Text_DumpString(obuffer, buffer-obuffer+1, stderr, 2);*/ return 0; } /* This will read the contents of a SWIFT data block ({4: ... }) inside of a SWIFT document */ int _readTextBlock(GWEN_FAST_BUFFER *fb, AHB_SWIFT_TAG_LIST *tl, unsigned int maxTags) { GWEN_BUFFER *lbuf; char buffer[AHB_SWIFT_MAXLINELEN]; char *p; char *p2; AHB_SWIFT_TAG *tag; int tagCount; int rv; lbuf=GWEN_Buffer_new(0, AHB_SWIFT_MAXLINELEN, 0, 1); tagCount=0; /* read first line, should be empty */ for (;;) { rv=_readDocLine(fb, buffer, sizeof(buffer)-1); if (rv<0) { if (rv==GWEN_ERROR_EOF) { GWEN_Buffer_free(lbuf); return 1; } DBG_ERROR(AQBANKING_LOGDOMAIN, "Error reading from stream (%d)", rv); GWEN_Buffer_free(lbuf); return rv; } if (buffer[0]) /* line is not empty, let's dance */ break; } /* for */ if (buffer[0]=='-') { DBG_WARN(AQBANKING_LOGDOMAIN, "Empty report"); GWEN_Buffer_free(lbuf); return 1; } for (;;) { /* get a tag */ GWEN_Buffer_Reset(lbuf); if (buffer[0]) { if (buffer[0]=='-' && buffer[1]==0) { DBG_INFO(AQBANKING_LOGDOMAIN, "End of SWIFT document reached"); GWEN_Buffer_free(lbuf); return 0; } GWEN_Buffer_AppendString(lbuf, buffer); } /* get a complete tag, don't be fooled by CR/LF inside a tag. * well, normally a CR/LF sequence ends a tag. However, in :86: tags * we may have fields which might include CR/LF sequences... */ for (;;) { buffer[0]=0; GWEN_FASTBUFFER_PEEKBYTE(fb, rv); if (rv<0) { if (rv==GWEN_ERROR_EOF) { /* eof met */ if (GWEN_Buffer_GetUsedBytes(lbuf)==0) { /* eof met and buffer empty, finished */ DBG_INFO(AQBANKING_LOGDOMAIN, "SWIFT document not terminated by \'-\'"); GWEN_Buffer_free(lbuf); return 0; } else { buffer[0]='-'; buffer[1]=0; break; } } else { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(lbuf); return rv; } } else { /* read next line */ rv=_readDocLine(fb, buffer, sizeof(buffer)-1); if (rv<0) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Error reading from stream (%d)", rv); GWEN_Buffer_free(lbuf); return rv; } } /* check whether the line starts with a new tag (:123x:) */ if (buffer[0]==':') { const char *s; if (strncasecmp(buffer, ":NS:", 4)==0) { break; } else { s=buffer+1; while (*s && isdigit(*s)) s++; if (isalpha(*s)) s++; if (*s==':') { DBG_DEBUG(AQBANKING_LOGDOMAIN, "End of tag reached"); break; } } } /* check whether the line starts with a ":" or "-" */ /* CAVEAT: Some banks use "-" at end of line in ":86:" tags, we must not take that for the end of document */ if ( (GWEN_Buffer_GetUsedBytes(lbuf)<4 || strncasecmp(GWEN_Buffer_GetStart(lbuf), ":86:", 4) !=0) && buffer[0]=='-' && buffer[1]==0 ) { /* it does, so the buffer contains the next line, go handle the * previous line */ DBG_DEBUG(AQBANKING_LOGDOMAIN, "End of doc reached"); break; } /* it doesn't, so there is a CR/LF inside the tag */ if (GWEN_Buffer_GetUsedBytes(lbuf)>AHB_SWIFT_MAXLINELEN*4) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Too many bytes in line, maybe not SWIFT"); GWEN_Buffer_free(lbuf); return -1; } GWEN_Buffer_AppendByte(lbuf, 10); GWEN_Buffer_AppendString(lbuf, buffer); } /* for */ /* tag complete, parse it */ p=GWEN_Buffer_GetStart(lbuf); if (*p!=':') { DBG_ERROR(AQBANKING_LOGDOMAIN, "Error in SWIFT data: no tag name"); GWEN_Text_DumpString(GWEN_Buffer_GetStart(lbuf), GWEN_Buffer_GetUsedBytes(lbuf), 2); GWEN_Buffer_free(lbuf); return -1; } p++; p2=p; while (*p2 && *p2!=':') p2++; if (*p2!=':') { DBG_ERROR(AQBANKING_LOGDOMAIN, "Error in SWIFT data: incomplete tag name"); GWEN_Text_DumpString(GWEN_Buffer_GetStart(lbuf), GWEN_Buffer_GetUsedBytes(lbuf), 2); GWEN_Buffer_free(lbuf); return -1; } *p2=0; p2++; /* create tag */ DBG_DEBUG(AQBANKING_LOGDOMAIN, "Creating tag \"%s\" (%s)", p, p2); tag=AHB_SWIFT_Tag_new(p, p2); AHB_SWIFT_Tag_List_Add(tag, tl); tagCount++; if (maxTags && tagCount>=maxTags) { DBG_INFO(AQBANKING_LOGDOMAIN, "Read maximum number of tags (%d)", tagCount); GWEN_Buffer_free(lbuf); return 0; } } /* for */ /* we should never reach this point... */ return 0; } int _readDocument(GWEN_FAST_BUFFER *fb, AHB_SWIFT_TAG_LIST *tl, unsigned int maxTags) { int rv; int c; int isFullSwift=0; int subDocs=0; /* check for first character being a curly bracket */ for (;;) { GWEN_FASTBUFFER_PEEKBYTE(fb, c); if (c<0) { if (c==GWEN_ERROR_EOF) { DBG_INFO(AQBANKING_LOGDOMAIN, "EOF met, empty document"); return 1; } DBG_ERROR(AQBANKING_LOGDOMAIN, "Error reading from BIO (%d)", c); return c; } if (c=='{') { isFullSwift=1; break; } else if (c>3) /* some SWIFT documents contain 01 at the beginning and 03 at the end, * we simply skip those characters here */ break; GWEN_FASTBUFFER_READBYTE(fb, c); } /* for */ if (isFullSwift) { /* read header, seek block 4 */ for (;;) { int err; char swhead[4]; unsigned int bsize; int curls=0; /* skip everything before curly bracket */ for (;;) { GWEN_FASTBUFFER_PEEKBYTE(fb, c); if (c<0) { if (c==GWEN_ERROR_EOF) { DBG_INFO(AQBANKING_LOGDOMAIN, "EOF met, empty block"); if (subDocs>0) { DBG_INFO(AQBANKING_LOGDOMAIN, "We got %d text blocks, returning", subDocs); return 0; } return 1; } DBG_ERROR(AQBANKING_LOGDOMAIN, "Error reading from BIO (%d)", c); return c; } if (c=='{') { break; } GWEN_FASTBUFFER_READBYTE(fb, c); } /* for */ /* read block start ("{n:...") */ bsize=3; GWEN_FASTBUFFER_READFORCED(fb, err, swhead, bsize); if (err<0) { DBG_ERROR_ERR(AQBANKING_LOGDOMAIN, err); return err; } if (swhead[2]!=':') { DBG_ERROR(AQBANKING_LOGDOMAIN, "Not a SWIFT block"); GWEN_Text_DumpString(swhead, 4, 2); return GWEN_ERROR_BAD_DATA; } /* handle block */ DBG_DEBUG(0, "Reading block %d", swhead[1]-'0'); if (swhead[1]=='4') { /* read document from block 4 */ rv=_readTextBlock(fb, tl, maxTags); if (rv) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); return rv; } subDocs++; } /* skip block */ for (;;) { GWEN_FASTBUFFER_READBYTE(fb, c); if (c<0) { if (c==GWEN_ERROR_EOF) { DBG_ERROR(AQBANKING_LOGDOMAIN, "EOF met (%d)", c); return GWEN_ERROR_EOF; } DBG_ERROR(AQBANKING_LOGDOMAIN, "Error reading from BIO (%d)", c); return GWEN_ERROR_READ; } if (c=='{') curls++; else if (c=='}') { if (curls==0) break; else curls--; } } /* for */ } /* for */ } else { /* not a full swift document, just read the SWIFT document directly */ rv=_readTextBlock(fb, tl, maxTags); if (rv) return rv; } return 0; } int _pluginImport(GWEN_DBIO *dbio, GWEN_SYNCIO *sio, GWEN_DB_NODE *data, GWEN_DB_NODE *cfg, uint32_t flags) { int rv; const char *p; int skipFileLines; int skipDocLines; GWEN_FAST_BUFFER *fb; int docsImported=0; p=GWEN_DB_GetCharValue(cfg, "type", 0, "mt940"); if (strcasecmp(p, "mt940")!=0 && strcasecmp(p, "mt942")!=0 && strcasecmp(p, "mt535")!=0) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Type \"%s\" not supported by plugin \"%s\"", p, GWEN_DBIO_GetName(dbio)); return GWEN_ERROR_INVALID; } skipFileLines=GWEN_DB_GetIntValue(cfg, "skipFileLines", 0, 0); skipDocLines=GWEN_DB_GetIntValue(cfg, "skipDocLines", 0, 0); fb=GWEN_FastBuffer_new(256, sio); /* skip lines at the beginning if requested */ if (skipFileLines>0) { int i; GWEN_BUFFER *lbuf; lbuf=GWEN_Buffer_new(0, 256, 0, 1); for (i=0; i0) { int i; GWEN_BUFFER *lbuf; lbuf=GWEN_Buffer_new(0, 256, 0, 1); for (i=0; i>6); c &= ~0x40; } } GWEN_Buffer_AppendByte(buf, c); if (size!=-1) size--; } /* while */ } GWEN_DATE *AHB_SWIFT_ReadDateYYMMDD(const char **pCurrentChar, unsigned int *pBytesLeft) { const char *p; unsigned int bleft; int dateYear, dateMonth, dateDay; GWEN_DATE *dt=NULL; p=*pCurrentChar; bleft=*pBytesLeft; if (bleft<6) { DBG_INFO(AQBANKING_LOGDOMAIN, "No date (%s)", p); return NULL; } dateYear=((p[0]-'0')*10) + (p[1]-'0'); if (dateYear>AHB_SWIFT_CENTURY_CUTOFF_YEAR) dateYear+=1900; else dateYear+=2000; dateMonth=((p[2]-'0')*10) + (p[3]-'0'); dateDay=((p[4]-'0')*10) + (p[5]-'0'); dt=_dateFromYMD(dateYear, dateMonth, dateDay); if (dt==NULL) { DBG_INFO(AQBANKING_LOGDOMAIN, "Invalid date (%s)", p); return NULL; } p+=6; bleft-=6; *pCurrentChar=p; *pBytesLeft=bleft; return dt; } GWEN_DATE *AHB_SWIFT_ReadDateMMDDWithReference(const char **pCurrentChar, unsigned int *pBytesLeft, const GWEN_DATE *refDate) { const char *p; unsigned int bleft; int dateYear, dateMonth, dateDay; GWEN_DATE *dt=NULL; p=*pCurrentChar; bleft=*pBytesLeft; if (*p && isdigit(*p)) { int refYear, refMonth; refYear=GWEN_Date_GetYear(refDate); refMonth=GWEN_Date_GetMonth(refDate); if (bleft<4) { DBG_INFO(AQBANKING_LOGDOMAIN, "Bad date (%s)", p); return NULL; } dateMonth=((p[0]-'0')*10) + (p[1]-'0'); dateDay=((p[2]-'0')*10) + (p[3]-'0'); /* use year from reference date. * However: if reference date and this date are in different years * the year might be too high. * We detect this case by comparing the months: If this month * and the reference month differ by more than 7 months then this year * will be adjusted. */ if (dateMonth-refMonth>7) { /* this date before reference date */ dateYear=refYear-1; } else if (refMonth-dateMonth>7) { /* reference date before this date */ dateYear=refYear+1; } else dateYear=refYear; dt=_dateFromYMD(dateYear, dateMonth, dateDay); if (dt==NULL) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Invalid date (%s)", p); return NULL; } p+=4; bleft-=4; } *pCurrentChar=p; *pBytesLeft=bleft; return dt; } GWEN_DATE *_dateFromYMD(int dateYear, int dateMonth, int dateDay) { GWEN_DATE *dt=NULL; if (dateDay==30 && dateMonth==2) { /* date is Feb 30, this date is invalid. However, some banks use this * to indicate the last day of February, so we move along */ dateDay=1; dateMonth=3; dt=GWEN_Date_fromGregorian(dateYear, dateMonth, dateDay); if (dt==NULL) { DBG_INFO(AQBANKING_LOGDOMAIN, "Bad date %04d/%02d/%02d", dateYear, dateMonth, dateDay); return NULL; } /* subtract a day to get the last day in FEB */ GWEN_Date_SubDays(dt, 1); } else if (dateDay==29 && dateMonth==2 && !GWEN_Date_IsLeapYear(dateYear)) { /* date is Feb 29 outside a leap year, this date is invalid. * However, at least Hamburger Sparkasse uses this on 2023/02/28 to mark the end of Feb 2023 */ dateDay=28; dateMonth=2; dt=GWEN_Date_fromGregorian(dateYear, dateMonth, dateDay); if (dt==NULL) { DBG_INFO(AQBANKING_LOGDOMAIN, "Bad date %04d/%02d/%02d", dateYear, dateMonth, dateDay); return NULL; } } else { dt=GWEN_Date_fromGregorian(dateYear, dateMonth, dateDay); if (dt==NULL) { DBG_INFO(AQBANKING_LOGDOMAIN, "Bad date %04d/%02d/%02d", dateYear, dateMonth, dateDay); return NULL; } } return dt; } aqbanking-6.6.1/src/libs/plugins/parsers/swift/swift_tag_p.h0000664000175000017500000000135214271335671021107 00000000000000/*************************************************************************** begin : Fri Apr 02 2004 copyright : (C) 2004-2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AQHBCIBANK_SWIFT_TAG_P_H #define AQHBCIBANK_SWIFT_TAG_P_H #include "swift_tag.h" struct AHB_SWIFT_TAG { GWEN_LIST_ELEMENT(AHB_SWIFT_TAG); char *id; char *content; }; struct AHB_SWIFT_SUBTAG { GWEN_LIST_ELEMENT(AHB_SWIFT_SUBTAG); int id; char *content; }; #endif /* AQHBCIBANK_SWIDT_TAG_H */ aqbanking-6.6.1/src/libs/plugins/parsers/swift/swift940_25.c0000664000175000017500000000422714271335671020477 00000000000000/*************************************************************************** begin : Fri Apr 02 2004 copyright : (C) 2022 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "swift940_25.h" #include #include #include #include int AHB_SWIFT940_Parse_25(const AHB_SWIFT_TAG *tg, uint32_t flags, GWEN_DB_NODE *data, GWEN_DB_NODE *cfg) { const char *p; const char *p2; p=AHB_SWIFT_Tag_GetData(tg); assert(p); while (*p && *p==32) p++; if (*p==0) { DBG_WARN(AQBANKING_LOGDOMAIN, "Tag 25 is empty"); return 0; } p2=strchr(p, '/'); if (p2) { char *s; /* "BLZ/Konto" */ s=(char *)GWEN_Memory_malloc(p2-p+1); memmove(s, p, p2-p+1); s[p2-p]=0; AHB_SWIFT_SetCharValue(data, GWEN_DB_FLAGS_OVERWRITE_VARS, "localBankCode", s); GWEN_Memory_dealloc(s); p=p2+1; } /* Skip leading whitespaces */ while (*p && *p==32) p++; if (*p) { char *s; int ll; /* Reaching this point, the remainder is at least 1 byte long. */ p2 = p + strlen(p) - 1; /* Remove trailing whitespaces. */ while ((*p2 == 32) && (p2>p)) p2--; /* p2 now points to the last non-space character (or the beginning of the string), * so the total size without the trailing zero is (p2-p)+1 */ ll=(p2-p)+1; s=(char *)GWEN_Memory_malloc(ll+1); /* account for trailing zero */ memmove(s, p, ll); /* copy string without trailing zero */ s[ll]=0; /* ensure terminating zero */ AHB_SWIFT_SetCharValue(data, GWEN_DB_FLAGS_OVERWRITE_VARS, "localAccountNumber", s); GWEN_Memory_dealloc(s); } else { DBG_INFO(AQBANKING_LOGDOMAIN, "LocalAccountNumber is empty (%s)", p); AHB_SWIFT_SetCharValue(data, GWEN_DB_FLAGS_OVERWRITE_VARS, "localAccountNumber", p); } return 0; } aqbanking-6.6.1/src/libs/plugins/parsers/swift/swift940_60.h0000664000175000017500000000120114271335671020470 00000000000000/*************************************************************************** begin : Fri Apr 02 2004 copyright : (C) 2022 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AB_PARSER_SWIFT_SWIFT940_60_H #define AB_PARSER_SWIFT_SWIFT940_60_H #include "swift_l.h" int AHB_SWIFT940_Parse_60_62(const AHB_SWIFT_TAG *tg, uint32_t flags, GWEN_DB_NODE *data, GWEN_DB_NODE *cfg); #endif aqbanking-6.6.1/src/libs/plugins/parsers/swift/swift535_l.h0000664000175000017500000000133214043610745020476 00000000000000/*************************************************************************** begin : Fri Apr 02 2004 copyright : (C) 2004-2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AQHBCIBANK_SWIFT535_L_H #define AQHBCIBANK_SWIFT535_L_H #include "swift_l.h" int AHB_SWIFT535_Import(AHB_SWIFT_TAG_LIST *tl, GWEN_DB_NODE *data, GWEN_DB_NODE *cfg, uint32_t flags); #endif /* AQHBCIBANK_SWIFT535_P_H */ aqbanking-6.6.1/src/libs/plugins/parsers/swift/swift940_l.h0000664000175000017500000000242514275012617020503 00000000000000/*************************************************************************** begin : Fri Apr 02 2004 copyright : (C) 2004-2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AQHBCIBANK_SWIFT940_L_H #define AQHBCIBANK_SWIFT940_L_H #include "swift_l.h" /* * Module params (in cfg): * - acceptTag20 * Filter for Tag20 of documents to accept (default: "*") * - rejectTag20 * Filter for Tag20 of documents to reject (default: NULL) * - dateFallback * Fallback mode for booking date in transaction when none given in input * - "balanceDate": Use date from previous balance (default) * - "valutaDate" : Use valuta date of transaction also for booking date * - "none" : no fallback, leave date empty if non given * - readExtraData61: if "yes" then extra data in :61: tags is added to purpose lines */ int AHB_SWIFT940_Import(AHB_SWIFT_TAG_LIST *tl, GWEN_DB_NODE *data, GWEN_DB_NODE *cfg, uint32_t flags); #endif /* AQHBCIBANK_SWIFT940_P_H */ aqbanking-6.6.1/src/libs/plugins/dummy.c0000664000175000017500000000000014043610745015074 00000000000000aqbanking-6.6.1/src/libs/plugins/imexporters/0000755000175000017500000000000015037736160016252 500000000000000aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/0000755000175000017500000000000015037736157017054 500000000000000aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/ofx.h0000664000175000017500000000112614043610745017731 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AQBANKING_PLUGIN_OFX_H #define AQBANKING_PLUGIN_OFX_H #include AB_IMEXPORTER *AB_ImExporterOFX_new(AB_BANKING *ab); #endif aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/profiles/0000755000175000017500000000000015037736157020677 500000000000000aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/profiles/Makefile.in0000644000175000017500000004600515037736026022664 00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/libs/plugins/imexporters/ofx/profiles ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/distri.m4 $(top_srcdir)/m4/gwenhywfar.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/os.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(profilesdir)" DATA = $(profiles_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADD_ACLOCAL_FLAGS = @ADD_ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AQBANKING_CLI_VERSION_STRING = @AQBANKING_CLI_VERSION_STRING@ AQBANKING_FINTS_VERSION_STRING = @AQBANKING_FINTS_VERSION_STRING@ AQBANKING_SO_AGE = @AQBANKING_SO_AGE@ AQBANKING_SO_CURRENT = @AQBANKING_SO_CURRENT@ AQBANKING_SO_EFFECTIVE = @AQBANKING_SO_EFFECTIVE@ AQBANKING_SO_REVISION = @AQBANKING_SO_REVISION@ AQBANKING_VERSION_BUILD = @AQBANKING_VERSION_BUILD@ AQBANKING_VERSION_FULL_STRING = @AQBANKING_VERSION_FULL_STRING@ AQBANKING_VERSION_MAJOR = @AQBANKING_VERSION_MAJOR@ AQBANKING_VERSION_MINOR = @AQBANKING_VERSION_MINOR@ AQBANKING_VERSION_PATCHLEVEL = @AQBANKING_VERSION_PATCHLEVEL@ AQBANKING_VERSION_RELEASE_STRING = @AQBANKING_VERSION_RELEASE_STRING@ AQBANKING_VERSION_STRING = @AQBANKING_VERSION_STRING@ AQBANKING_VERSION_TAG = @AQBANKING_VERSION_TAG@ AQEBICS_CFLAGS = @AQEBICS_CFLAGS@ AQEBICS_LIBS = @AQEBICS_LIBS@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATETIME = @DATETIME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_EXCLUDE_PATTERNS = @DOXYGEN_EXCLUDE_PATTERNS@ DOXYGEN_FILE_PATTERNS = @DOXYGEN_FILE_PATTERNS@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENGUI_GTK2_CFLAGS = @GWENGUI_GTK2_CFLAGS@ GWENGUI_GTK2_LIBS = @GWENGUI_GTK2_LIBS@ GWENHYWFAR_MINIMUM_VERSION = @GWENHYWFAR_MINIMUM_VERSION@ HAVE_GWENGUI_GTK2 = @HAVE_GWENGUI_GTK2@ HAVE_I18N = @HAVE_I18N@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIBXSLT_CFLAGS = @LIBXSLT_CFLAGS@ LIBXSLT_LIBS = @LIBXSLT_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_SUPPORTS_QT = @MSGFMT_SUPPORTS_QT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ TUTORIALS = @TUTORIALS@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XMLMERGE = @XMLMERGE@ XMLSEC_CFLAGS = @XMLSEC_CFLAGS@ XMLSEC_LIBS = @XMLSEC_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ aqbanking_backends = @aqbanking_backends@ aqbanking_cfg_searchdir = @aqbanking_cfg_searchdir@ aqbanking_data_searchdir = @aqbanking_data_searchdir@ aqbanking_headerdir = @aqbanking_headerdir@ aqbanking_headerdir_am = @aqbanking_headerdir_am@ aqbanking_includes = @aqbanking_includes@ aqbanking_internal_libs = @aqbanking_internal_libs@ aqbanking_ldflags = @aqbanking_ldflags@ aqbanking_libs = @aqbanking_libs@ aqbanking_locale_searchdir = @aqbanking_locale_searchdir@ aqbanking_modules = @aqbanking_modules@ aqbanking_pkgdatadir = @aqbanking_pkgdatadir@ aqbanking_plugin_searchdir = @aqbanking_plugin_searchdir@ aqbanking_plugindir = @aqbanking_plugindir@ aqbanking_plugins_backends_dirs = @aqbanking_plugins_backends_dirs@ aqbanking_plugins_backends_libs = @aqbanking_plugins_backends_libs@ aqbanking_plugins_bankinfo_dirs = @aqbanking_plugins_bankinfo_dirs@ aqbanking_plugins_bankinfo_libs = @aqbanking_plugins_bankinfo_libs@ aqbanking_plugins_imexporters_dirs = @aqbanking_plugins_imexporters_dirs@ aqbanking_plugins_imexporters_libs = @aqbanking_plugins_imexporters_libs@ aqbanking_plugins_parsers_dirs = @aqbanking_plugins_parsers_dirs@ aqbanking_symlinkdir = @aqbanking_symlinkdir@ aqbanking_sys_is_windows = @aqbanking_sys_is_windows@ aqbankingpp_modules = @aqbankingpp_modules@ aqebics_datadir = @aqebics_datadir@ aqebics_includes = @aqebics_includes@ aqebics_internal_libs = @aqebics_internal_libs@ aqebics_ldflags = @aqebics_ldflags@ aqebics_libs = @aqebics_libs@ aqfints_datadir = @aqfints_datadir@ aqhbci_datadir = @aqhbci_datadir@ aqhbci_includes = @aqhbci_includes@ aqhbci_internal_libs = @aqhbci_internal_libs@ aqhbci_ldflags = @aqhbci_ldflags@ aqhbci_libs = @aqhbci_libs@ aqofxconnect_includes = @aqofxconnect_includes@ aqofxconnect_internal_libs = @aqofxconnect_internal_libs@ aqofxconnect_libs = @aqofxconnect_libs@ aqpaypal_includes = @aqpaypal_includes@ aqpaypal_internal_libs = @aqpaypal_internal_libs@ aqpaypal_libs = @aqpaypal_libs@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gmp_libs = @gmp_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_dir = @gwenhywfar_dir@ gwenhywfar_has_crypt = @gwenhywfar_has_crypt@ gwenhywfar_headers = @gwenhywfar_headers@ gwenhywfar_includes = @gwenhywfar_includes@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_plugins = @gwenhywfar_plugins@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ typemaker2_exe = @typemaker2_exe@ visibility_cflags = @visibility_cflags@ with_aqebics = @with_aqebics@ with_aqhbci = @with_aqhbci@ profilesdir = $(aqbanking_pkgdatadir)/imexporters/ofx/profiles profiles_DATA = default.conf iso8859.conf EXTRA_DIST = $(profiles_DATA) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libs/plugins/imexporters/ofx/profiles/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libs/plugins/imexporters/ofx/profiles/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-profilesDATA: $(profiles_DATA) @$(NORMAL_INSTALL) @list='$(profiles_DATA)'; test -n "$(profilesdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(profilesdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(profilesdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(profilesdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(profilesdir)" || exit $$?; \ done uninstall-profilesDATA: @$(NORMAL_UNINSTALL) @list='$(profiles_DATA)'; test -n "$(profilesdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(profilesdir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(profilesdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-profilesDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-profilesDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-profilesDATA install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags-am uninstall uninstall-am uninstall-profilesDATA .PRECIOUS: Makefile sources: cppcheck: # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/profiles/Makefile.am0000664000175000017500000000023314043610745022641 00000000000000 profilesdir = $(aqbanking_pkgdatadir)/imexporters/ofx/profiles profiles_DATA=default.conf iso8859.conf EXTRA_DIST=$(profiles_DATA) sources: cppcheck: aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/profiles/default.conf0000664000175000017500000000020314043610745023075 00000000000000 char name="default" char shortDescr="default profile" char longDescr="Default profile" int import="1" int export="0" params { } aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/profiles/iso8859.conf0000664000175000017500000000033414043610745022606 00000000000000 char name="iso8859" char shortDescr="Profile for ISO-8859-15 files" char longDescr="Profile for files encoded with ISO8859-15 (e.g. with umlauts)" int import="1" int export="0" params { char charset="ISO-8859-15" } aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/ofx.xml.in0000664000175000017500000000041414043610745020706 00000000000000 @AQBANKING_VERSION_STRING@ Martin Preuss(martin@libchipcard.de) OFX This plugin imports OFX data. aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/Makefile.in0000644000175000017500000007400215037736026021037 00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/libs/plugins/imexporters/ofx ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/distri.m4 $(top_srcdir)/m4/gwenhywfar.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/os.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = ofx.xml CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libabimexporters_ofx_la_DEPENDENCIES = parser/libofxparser.la am_libabimexporters_ofx_la_OBJECTS = ofx.lo libabimexporters_ofx_la_OBJECTS = \ $(am_libabimexporters_ofx_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/ofx.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libabimexporters_ofx_la_SOURCES) DIST_SOURCES = $(libabimexporters_ofx_la_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(imexporterplugindir)" DATA = $(imexporterplugin_DATA) HEADERS = $(noinst_HEADERS) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir distdir-am am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/ofx.xml.in \ $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ADD_ACLOCAL_FLAGS = @ADD_ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AQBANKING_CLI_VERSION_STRING = @AQBANKING_CLI_VERSION_STRING@ AQBANKING_FINTS_VERSION_STRING = @AQBANKING_FINTS_VERSION_STRING@ AQBANKING_SO_AGE = @AQBANKING_SO_AGE@ AQBANKING_SO_CURRENT = @AQBANKING_SO_CURRENT@ AQBANKING_SO_EFFECTIVE = @AQBANKING_SO_EFFECTIVE@ AQBANKING_SO_REVISION = @AQBANKING_SO_REVISION@ AQBANKING_VERSION_BUILD = @AQBANKING_VERSION_BUILD@ AQBANKING_VERSION_FULL_STRING = @AQBANKING_VERSION_FULL_STRING@ AQBANKING_VERSION_MAJOR = @AQBANKING_VERSION_MAJOR@ AQBANKING_VERSION_MINOR = @AQBANKING_VERSION_MINOR@ AQBANKING_VERSION_PATCHLEVEL = @AQBANKING_VERSION_PATCHLEVEL@ AQBANKING_VERSION_RELEASE_STRING = @AQBANKING_VERSION_RELEASE_STRING@ AQBANKING_VERSION_STRING = @AQBANKING_VERSION_STRING@ AQBANKING_VERSION_TAG = @AQBANKING_VERSION_TAG@ AQEBICS_CFLAGS = @AQEBICS_CFLAGS@ AQEBICS_LIBS = @AQEBICS_LIBS@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATETIME = @DATETIME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_EXCLUDE_PATTERNS = @DOXYGEN_EXCLUDE_PATTERNS@ DOXYGEN_FILE_PATTERNS = @DOXYGEN_FILE_PATTERNS@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENGUI_GTK2_CFLAGS = @GWENGUI_GTK2_CFLAGS@ GWENGUI_GTK2_LIBS = @GWENGUI_GTK2_LIBS@ GWENHYWFAR_MINIMUM_VERSION = @GWENHYWFAR_MINIMUM_VERSION@ HAVE_GWENGUI_GTK2 = @HAVE_GWENGUI_GTK2@ HAVE_I18N = @HAVE_I18N@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIBXSLT_CFLAGS = @LIBXSLT_CFLAGS@ LIBXSLT_LIBS = @LIBXSLT_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_SUPPORTS_QT = @MSGFMT_SUPPORTS_QT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ TUTORIALS = @TUTORIALS@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XMLMERGE = @XMLMERGE@ XMLSEC_CFLAGS = @XMLSEC_CFLAGS@ XMLSEC_LIBS = @XMLSEC_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ aqbanking_backends = @aqbanking_backends@ aqbanking_cfg_searchdir = @aqbanking_cfg_searchdir@ aqbanking_data_searchdir = @aqbanking_data_searchdir@ aqbanking_headerdir = @aqbanking_headerdir@ aqbanking_headerdir_am = @aqbanking_headerdir_am@ aqbanking_includes = @aqbanking_includes@ aqbanking_internal_libs = @aqbanking_internal_libs@ aqbanking_ldflags = @aqbanking_ldflags@ aqbanking_libs = @aqbanking_libs@ aqbanking_locale_searchdir = @aqbanking_locale_searchdir@ aqbanking_modules = @aqbanking_modules@ aqbanking_pkgdatadir = @aqbanking_pkgdatadir@ aqbanking_plugin_searchdir = @aqbanking_plugin_searchdir@ aqbanking_plugindir = @aqbanking_plugindir@ aqbanking_plugins_backends_dirs = @aqbanking_plugins_backends_dirs@ aqbanking_plugins_backends_libs = @aqbanking_plugins_backends_libs@ aqbanking_plugins_bankinfo_dirs = @aqbanking_plugins_bankinfo_dirs@ aqbanking_plugins_bankinfo_libs = @aqbanking_plugins_bankinfo_libs@ aqbanking_plugins_imexporters_dirs = @aqbanking_plugins_imexporters_dirs@ aqbanking_plugins_imexporters_libs = @aqbanking_plugins_imexporters_libs@ aqbanking_plugins_parsers_dirs = @aqbanking_plugins_parsers_dirs@ aqbanking_symlinkdir = @aqbanking_symlinkdir@ aqbanking_sys_is_windows = @aqbanking_sys_is_windows@ aqbankingpp_modules = @aqbankingpp_modules@ aqebics_datadir = @aqebics_datadir@ aqebics_includes = @aqebics_includes@ aqebics_internal_libs = @aqebics_internal_libs@ aqebics_ldflags = @aqebics_ldflags@ aqebics_libs = @aqebics_libs@ aqfints_datadir = @aqfints_datadir@ aqhbci_datadir = @aqhbci_datadir@ aqhbci_includes = @aqhbci_includes@ aqhbci_internal_libs = @aqhbci_internal_libs@ aqhbci_ldflags = @aqhbci_ldflags@ aqhbci_libs = @aqhbci_libs@ aqofxconnect_includes = @aqofxconnect_includes@ aqofxconnect_internal_libs = @aqofxconnect_internal_libs@ aqofxconnect_libs = @aqofxconnect_libs@ aqpaypal_includes = @aqpaypal_includes@ aqpaypal_internal_libs = @aqpaypal_internal_libs@ aqpaypal_libs = @aqpaypal_libs@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gmp_libs = @gmp_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_dir = @gwenhywfar_dir@ gwenhywfar_has_crypt = @gwenhywfar_has_crypt@ gwenhywfar_headers = @gwenhywfar_headers@ gwenhywfar_includes = @gwenhywfar_includes@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_plugins = @gwenhywfar_plugins@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ typemaker2_exe = @typemaker2_exe@ visibility_cflags = @visibility_cflags@ with_aqebics = @with_aqebics@ with_aqhbci = @with_aqhbci@ SUBDIRS = parser profiles AM_CPPFLAGS = -I$(top_srcdir)/src/libs \ -I$(top_builddir)/src/libs \ $(gwenhywfar_includes) -Iparser -I$(srcdir)/parser AM_CFLAGS = -DBUILDING_AQBANKING @visibility_cflags@ #EXTRA_DIST=README noinst_HEADERS = ofx_p.h ofx.h imexporterplugindir = $(aqbanking_plugindir)/imexporters noinst_LTLIBRARIES = libabimexporters_ofx.la imexporterplugin_DATA = ofx.xml libabimexporters_ofx_la_SOURCES = ofx.c libabimexporters_ofx_la_LIBADD = parser/libofxparser.la all: all-recursive .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libs/plugins/imexporters/ofx/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libs/plugins/imexporters/ofx/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): ofx.xml: $(top_builddir)/config.status $(srcdir)/ofx.xml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libabimexporters_ofx.la: $(libabimexporters_ofx_la_OBJECTS) $(libabimexporters_ofx_la_DEPENDENCIES) $(EXTRA_libabimexporters_ofx_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libabimexporters_ofx_la_OBJECTS) $(libabimexporters_ofx_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ofx.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-imexporterpluginDATA: $(imexporterplugin_DATA) @$(NORMAL_INSTALL) @list='$(imexporterplugin_DATA)'; test -n "$(imexporterplugindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(imexporterplugindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(imexporterplugindir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(imexporterplugindir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(imexporterplugindir)" || exit $$?; \ done uninstall-imexporterpluginDATA: @$(NORMAL_UNINSTALL) @list='$(imexporterplugin_DATA)'; test -n "$(imexporterplugindir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(imexporterplugindir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(imexporterplugindir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-recursive -rm -f ./$(DEPDIR)/ofx.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-imexporterpluginDATA install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f ./$(DEPDIR)/ofx.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-imexporterpluginDATA .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ am--depfiles check check-am clean clean-generic clean-libtool \ clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-imexporterpluginDATA install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am \ uninstall-imexporterpluginDATA .PRECIOUS: Makefile typefiles: typedefs: sources: for d in $(SUBDIRS); do \ $(MAKE) -C $$d sources; \ done for f in $(libabimexporters_ofx_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for f in $(imexporterplugin_DATA); do \ echo $(subdir)/$$f >>$(top_srcdir)/pdsources; \ done cppcheck: for f in $(libabimexporters_ofx_la_SOURCES); do \ cppcheck --force $$f ; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/ofx.c0000664000175000017500000000730414043610745017730 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "ofx_p.h" #include "ofxxmlctx_l.h" #include #include #include #include #include #include #include #include #include #include #include #ifdef OS_WIN32 # define DIRSEP "\\" #else # define DIRSEP "/" #endif GWEN_INHERIT(AB_IMEXPORTER, AH_IMEXPORTER_OFX); AB_IMEXPORTER *AB_ImExporterOFX_new(AB_BANKING *ab) { AB_IMEXPORTER *ie; AH_IMEXPORTER_OFX *ieh; ie=AB_ImExporter_new(ab, "ofx"); GWEN_NEW_OBJECT(AH_IMEXPORTER_OFX, ieh); GWEN_INHERIT_SETDATA(AB_IMEXPORTER, AH_IMEXPORTER_OFX, ie, ieh, AH_ImExporterOFX_FreeData); AB_ImExporter_SetImportFn(ie, AH_ImExporterOFX_Import); AB_ImExporter_SetCheckFileFn(ie, AH_ImExporterOFX_CheckFile); return ie; } void GWENHYWFAR_CB AH_ImExporterOFX_FreeData(void *bp, void *p) { AH_IMEXPORTER_OFX *ieh; ieh=(AH_IMEXPORTER_OFX *)p; GWEN_FREE_OBJECT(ieh); } int AH_ImExporterOFX_Import(AB_IMEXPORTER *ie, AB_IMEXPORTER_CONTEXT *ctx, GWEN_SYNCIO *sio, GWEN_DB_NODE *params) { AH_IMEXPORTER_OFX *ieh; int rv; GWEN_XML_CONTEXT *xmlCtx; const char *s; assert(ie); ieh=GWEN_INHERIT_GETDATA(AB_IMEXPORTER, AH_IMEXPORTER_OFX, ie); assert(ieh); /* this context does the real work, it sets some callbacks which * make GWEN's normal XML code read an OFX file */ xmlCtx=AIO_OfxXmlCtx_new(0, ctx); assert(xmlCtx); /* possibly set charset */ s=GWEN_DB_GetCharValue(params, "charset", 0, NULL); if (s && *s) AIO_OfxXmlCtx_SetCharset(xmlCtx, s); /* read OFX file into context */ rv=GWEN_XMLContext_ReadFromIo(xmlCtx, sio); GWEN_XmlCtx_free(xmlCtx); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); return rv; } return 0; } int AH_ImExporterOFX_CheckFile(AB_IMEXPORTER *ie, const char *fname) { AH_IMEXPORTER_OFX *ieh; GWEN_SYNCIO *sio; int rv; uint8_t tbuf[256]; assert(ie); assert(fname); assert(ie); ieh=GWEN_INHERIT_GETDATA(AB_IMEXPORTER, AH_IMEXPORTER_OFX, 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, "**", 0) || -1!=GWEN_Text_ComparePattern((const char *)tbuf, "**", 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; } aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/0000755000175000017500000000000015037736157020350 500000000000000aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_posmf_l.h0000664000175000017500000000145014043610745022376 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Mon Jan 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de copyright : (C) 2013 by Paul Conrady email : c.p.conrady@gmail.com *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AIO_OFX_G_POSMF_L_H #define AIO_OFX_G_POSMF_L_H #include "ofxgroup_l.h" AIO_OFX_GROUP *AIO_OfxGroup_POSMF_new(const char *groupName, AIO_OFX_GROUP *parent, GWEN_XML_CONTEXT *ctx); #endif aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_invposlist_p.h0000664000175000017500000000126014043610745023467 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Mon Jan 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AIO_OFX_G_INVPOSLIST_P_H #define AIO_OFX_G_INVPOSLIST_P_H #include "g_invposlist_l.h" static int AIO_OfxGroup_INVPOSLIST_StartTag(AIO_OFX_GROUP *g, const char *tagName); #endif aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_document_l.h0000664000175000017500000000135214043610745023071 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Mon Jan 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AIO_OFX_G_DOCUMENT_L_H #define AIO_OFX_G_DOCUMENT_L_H #include "ofxgroup_l.h" AIO_OFX_GROUP *AIO_OfxGroup_Document_new(const char *groupName, AIO_OFX_GROUP *parent, GWEN_XML_CONTEXT *ctx); #endif aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_status.c0000664000175000017500000004527514043610745022272 00000000000000/*************************************************************************** begin : Mon Jan 07 2008 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "g_status_p.h" #include "ofxxmlctx_l.h" #include "aqbanking/i18n_l.h" #include "g_generic_l.h" #include "g_ignore_l.h" #include #include #include #include GWEN_INHERIT(AIO_OFX_GROUP, AIO_OFX_GROUP_STATUS) typedef struct AIO_OFX_GROUP_STATUS_ERROR AIO_OFX_GROUP_STATUS_ERROR; struct AIO_OFX_GROUP_STATUS_ERROR { int code; /**< The error's code */ const char *name; /**< The error's name */ const char *description; /**< The long description of the error */ }; /* this list has been copied from LibOFX */ static AIO_OFX_GROUP_STATUS_ERROR error_msg_list[] = { {0, I18S("Success"), I18S("The server successfully processed the request.")}, {1, I18S("Client is up-to-date"), I18S("Based on the client timestamp, the client has the latest information. The response does not supply any additional information.")}, {2000, I18S("General error"), I18S("Error other than those specified by the remaining error codes. (Note: Servers should provide a more specific error whenever possible. Error code 2000 should be reserved for cases in which a more specific code is not available.)")}, {2001, I18S("Invalid account"), I18S("The account was invalid (whatever that means)")}, {2002, I18S("General account error"), I18S("Account error not specified by the remaining error codes.")}, {2003, I18S("Account not found"), I18S("The specified account number does not correspond to one of the user's accounts.")}, {2004, I18S("Account closed"), I18S("The specified account number corresponds to an account that has been closed.")}, {2005, I18S("Account not authorized"), I18S("The user is not authorized to perform this action on the account, or the server does not allow this type of action to be performed on the account.")}, {2006, I18S("Source account not found"), I18S("The specified account number does not correspond to one of the user's accounts.")}, {2007, I18S("Source account closed"), I18S("The specified account number corresponds to an account that has been closed.")}, {2008, I18S("Source account not authorized"), I18S("The user is not authorized to perform this action on the account, or the server does not allow this type of action to be performed on the account.")}, {2009, I18S("Destination account not found"), I18S("The specified account number does not correspond to one of the user's accounts.")}, {2010, I18S("Destination account closed"), I18S("The specified account number corresponds to an account that has been closed.")}, {2011, I18S("Destination account not authorized"), I18S("The user is not authorized to perform this action on the account, or the server does not allow this type of action to be performed on the account.")}, {2012, I18S("Invalid amount"), I18S("The specified amount is not valid for this action; for example, the user specified a negative payment amount.")}, {2014, I18S("Date too soon"), I18S("The server cannot process the requested action by the date specified by the user.")}, {2015, I18S("Date too far in future"), I18S("The server cannot accept requests for an action that far in the future.")}, {2016, I18S("Transaction already committed"), I18S("Transaction has entered the processing loop and cannot be modified/cancelled using OFX. The transaction may still be cancelled or modified using other means (for example, a phone call to Customer Service).")}, {2017, I18S("Already canceled"), I18S("The transaction cannot be canceled or modified because it has already been canceled.")}, {2018, I18S("Unknown server ID"), I18S("The specified server ID does not exist or no longer exists.")}, {2019, I18S("Duplicate request"), I18S("A request with this has already been received and processed.")}, {2020, I18S("Invalid date"), I18S("The specified datetime stamp cannot be parsed; for instance, the datetime stamp specifies 25:00 hours.")}, {2021, I18S("Unsupported version"), I18S("The server does not support the requested version. The version of the message set specified by the client is not supported by this server.")}, {2022, I18S("Invalid TAN"), I18S("The server was unable to validate the TAN sent in the request.")}, {2023, I18S("Unknown FITID"), I18S("The specified FITID/BILLID does not exist or no longer exists. [BILLID not found in the billing message sets]")}, {2025, I18S("Branch ID missing"), I18S("A value must be provided in the aggregate for this country system, but this field is missing.")}, {2026, I18S("Bank name does not match bank ID"), I18S("The value of in the aggregate is inconsistent with the value of in the aggregate.")}, {2027, I18S("Invalid date range"), I18S("Response for non-overlapping dates, date ranges in the future, et cetera.")}, {2028, I18S("Requested element unknown"), I18S("One or more elements of the request were not recognized by the server or the server (as noted in the FI Profile) does not support the elements. The server executed the element transactions it understood and supported. For example, the request file included private tags in a but the server was able to execute the rest of the request.")}, {6500, I18S("Y invalid without "), I18S("This error code may appear element of an wrapper (in and V2 message set responses) or the contained in any embedded transaction wrappers within a sync response. The corresponding sync request wrapper included Y with Y or Y, which is illegal.")}, {6501, I18S("Embedded transactions in request failed to process: Out of date"), I18S("Y and embedded transactions appeared in the request sync wrapper and the provided was out of date. This code should be used in the of the response sync wrapper.")}, {6502, I18S("Unable to process embedded transaction due to out-of-date "), I18S("Used in response transaction wrapper for embedded transactions when 6501 appears in the surrounding sync wrapper.")}, {10000, I18S("Stop check in process"), I18S("Stop check is already in process.")}, {10500, I18S("Too many checks to process"), I18S("The stop-payment request specifies too many checks.")}, {10501, I18S("Invalid payee"), I18S("Payee error not specified by the remainingerror codes.")}, {10502, I18S("Invalid payee address"), I18S("Some portion of the payee's address is incorrect or unknown.")}, {10503, I18S("Invalid payee account number"), I18S("The account number of the requested payee is invalid.")}, {10504, I18S("Insufficient funds"), I18S("The server cannot process the request because the specified account does not have enough funds.")}, {10505, I18S("Cannot modify element"), I18S("The server does not allow modifications to one or more values in a modification request.")}, {10506, I18S("Cannot modify source account"), I18S("Reserved for future use.")}, {10507, I18S("Cannot modify destination account"), I18S("Reserved for future use.")}, {10508, I18S("Invalid frequency"), I18S("The specified frequency does not match one of the accepted frequencies for recurring transactions.")}, {10509, I18S("Model already canceled"), I18S("The server has already canceled the specified recurring model.")}, {10510, I18S("Invalid payee ID"), I18S("The specified payee ID does not exist or no longer exists.")}, {10511, I18S("Invalid payee city"), I18S("The specified city is incorrect or unknown.")}, {10512, I18S("Invalid payee state"), I18S("The specified state is incorrect or unknown.")}, {10513, I18S("Invalid payee postal code"), I18S("The specified postal code is incorrect or unknown.")}, {10514, I18S("Transaction already processed"), I18S("Transaction has already been sent or date due is past")}, {10515, I18S("Payee not modifiable by client"), I18S("The server does not allow clients to change payee information.")}, {10516, I18S("Wire beneficiary invalid"), I18S("The specified wire beneficiary does not exist or no longer exists.")}, {10517, I18S("Invalid payee name"), I18S("The server does not recognize the specified payee name.")}, {10518, I18S("Unknown model ID"), I18S("The specified model ID does not exist or no longer exists.")}, {10519, I18S("Invalid payee list ID"), I18S("The specified payee list ID does not exist or no longer exists.")}, {10600, I18S("Table type not found"), I18S("The specified table type is not recognized or does not exist.")}, {12250, I18S("Investment transaction download not supported (WARN)"), I18S("The server does not support investment transaction download.")}, {12251, I18S("Investment position download not supported (WARN)"), I18S("The server does not support investment position download.")}, {12252, I18S("Investment positions for specified date not available"), I18S("The server does not support investment positions for the specified date.")}, {12253, I18S("Investment open order download not supported (WARN)"), I18S("The server does not support open order download.")}, {12254, I18S("Investment balances download not supported (WARN)"), I18S("The server does not support investment balances download.")}, {12255, I18S("401(k) not available for this account"), I18S("401(k) information requested from a non-401(k) account.")}, {12500, I18S("One or more securities not found"), I18S("The server could not find the requested securities.")}, {13000, I18S("User ID & password will be sent out-of-band (INFO)"), I18S("The server will send the user ID and password via postal mail, e-mail, or another means. The accompanying message will provide details.")}, {13500, I18S("Unable to enroll user"), I18S("The server could not enroll the user.")}, {13501, I18S("User already enrolled"), I18S("The server has already enrolled the user.")}, {13502, I18S("Invalid service"), I18S("The server does not support the service specified in the service-activation request.")}, {13503, I18S("Cannot change user information"), I18S("The server does not support the request.")}, {13504, I18S(" Missing or Invalid in "), I18S("The FI requires the client to provide the aggregate in the request, but either none was provided, or the one provided was invalid.")}, {14500, I18S("1099 forms not available"), I18S("1099 forms are not yet available for the tax year requested.")}, {14501, I18S("1099 forms not available for user ID"), I18S("This user does not have any 1099 forms available.")}, {14600, I18S("W2 forms not available"), I18S("W2 forms are not yet available for the tax year requested.")}, {14601, I18S("W2 forms not available for user ID"), I18S("The user does not have any W2 forms available.")}, {14700, I18S("1098 forms not available"), I18S("1098 forms are not yet available for the tax year requested.")}, {14701, I18S("1098 forms not available for user ID"), I18S("The user does not have any 1098 forms available.")}, {15000, I18S("Must change USERPASS"), I18S("The user must change his or her number as part of the next OFX request.")}, {15500, I18S("Signon invalid"), I18S("The user cannot signon because he or she entered an invalid user ID or password.")}, {15501, I18S("Customer account already in use"), I18S("The server allows only one connection at a time, and another user is already signed on. Please try again later.")}, {15502, I18S("USERPASS lockout"), I18S("The server has received too many failed signon attempts for this user. Please call the FI's technical support number.")}, {15503, I18S("Could not change USERPASS"), I18S("The server does not support the request.")}, {15504, I18S("Could not provide random data"), I18S("The server could not generate random data as requested by the .")}, {15505, I18S("Country system not supported"), I18S("The server does not support the country specified in the field of the aggregate.")}, {15506, I18S("Empty signon not supported"), I18S("The server does not support signons not accompanied by some other transaction.")}, {15507, I18S("Signon invalid without supporting pin change request"), I18S("The OFX block associated with the signon does not contain a pin change request and should.")}, {15508, I18S("Transaction not authorized"), I18S("Current user is not authorized to perform this action on behalf of the .")}, {16500, I18S("HTML not allowed"), I18S("The server does not accept HTML formatting in the request.")}, {16501, I18S("Unknown mail To:"), I18S("The server was unable to send mail to the specified Internet address.")}, {16502, I18S("Invalid URL"), I18S("The server could not parse the URL.")}, {16503, I18S("Unable to get URL"), I18S("The server was unable to retrieve the information at this URL (e.g., an HTTP 400 or 500 series error).")}, {-1, I18S("Unknown code"), I18S("No description for this code")} }; const AIO_OFX_GROUP_STATUS_ERROR *AIO_OfxGroup_STATUS__getErrorStruct(int e) { int i; for (i=0; ; i++) { if (error_msg_list[i].code==e) return &error_msg_list[i]; if (error_msg_list[i].code==-1) break; } return NULL; } AIO_OFX_GROUP *AIO_OfxGroup_STATUS_new(const char *groupName, AIO_OFX_GROUP *parent, GWEN_XML_CONTEXT *ctx, const char *description) { AIO_OFX_GROUP *g; AIO_OFX_GROUP_STATUS *xg; /* create base group */ g=AIO_OfxGroup_Generic_new(groupName, parent, ctx); assert(g); GWEN_NEW_OBJECT(AIO_OFX_GROUP_STATUS, xg); assert(xg); GWEN_INHERIT_SETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_STATUS, g, xg, AIO_OfxGroup_STATUS_FreeData); if (description) xg->description=strdup(description); /* set virtual functions */ AIO_OfxGroup_SetStartTagFn(g, AIO_OfxGroup_STATUS_StartTag); xg->oldEndTagFn=AIO_OfxGroup_SetEndTagFn(g, AIO_OfxGroup_STATUS_EndTag); AIO_OfxGroup_SetAddDataFn(g, AIO_OfxGroup_STATUS_AddData); return g; } GWENHYWFAR_CB void AIO_OfxGroup_STATUS_FreeData(void *bp, void *p) { AIO_OFX_GROUP_STATUS *xg; xg=(AIO_OFX_GROUP_STATUS *)p; assert(xg); free(xg->currentElement); free(xg->severity); free(xg->description); GWEN_FREE_OBJECT(xg); } int AIO_OfxGroup_STATUS_StartTag(AIO_OFX_GROUP *g, const char *tagName) { AIO_OFX_GROUP_STATUS *xg; //GWEN_XML_CONTEXT *ctx; assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_STATUS, g); assert(xg); //ctx=AIO_OfxGroup_GetXmlContext(g); free(xg->currentElement); xg->currentElement=NULL; if (strcasecmp(tagName, "CODE")==0) { xg->currentElement=strdup(tagName); } else if (strcasecmp(tagName, "SEVERITY")==0) { xg->currentElement=strdup(tagName); } else if (strcasecmp(tagName, "MESSAGE")==0) { xg->currentElement=strdup(tagName); } else { DBG_WARN(AQBANKING_LOGDOMAIN, "Ignoring tag [%s]", tagName); } return 0; } int AIO_OfxGroup_STATUS_EndTag(AIO_OFX_GROUP *g, const char *tagName) { AIO_OFX_GROUP_STATUS *xg; //GWEN_XML_CONTEXT *ctx; assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_STATUS, g); assert(xg); //ctx=AIO_OfxGroup_GetXmlContext(g); assert(tagName); if (strcasecmp(tagName, AIO_OfxGroup_GetGroupName(g))!=0) { /* tag does not close this one */ DBG_DEBUG(AQBANKING_LOGDOMAIN, "Tag [%s] does not close [%s], ignoring", tagName, AIO_OfxGroup_GetGroupName(g)); return 0; } /* show status message */ if (xg->description) { GWEN_BUFFER *buf; char numbuf[32]; const AIO_OFX_GROUP_STATUS_ERROR *e; e=AIO_OfxGroup_STATUS__getErrorStruct(xg->code); buf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(buf, xg->description); GWEN_Buffer_AppendString(buf, ": "); /* append error string if available */ if (e && e->name) { GWEN_Buffer_AppendString(buf, I18N(e->name)); GWEN_Buffer_AppendString(buf, " ("); } GWEN_Buffer_AppendString(buf, I18N("Code")); GWEN_Buffer_AppendString(buf, " "); snprintf(numbuf, sizeof(numbuf)-1, "%d", xg->code); numbuf[sizeof(numbuf)-1]=0; GWEN_Buffer_AppendString(buf, numbuf); if (xg->severity) { GWEN_Buffer_AppendString(buf, ", "); GWEN_Buffer_AppendString(buf, I18N("severity")); GWEN_Buffer_AppendString(buf, " \""); GWEN_Buffer_AppendString(buf, xg->severity); GWEN_Buffer_AppendString(buf, "\""); } if (e && e->name) { GWEN_Buffer_AppendString(buf, ")"); } /* append error description if available */ if (e && e->description) { GWEN_Buffer_AppendString(buf, "\n"); GWEN_Buffer_AppendString(buf, I18N(e->description)); } DBG_INFO(AQBANKING_LOGDOMAIN, "%s", GWEN_Buffer_GetStart(buf)); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Notice, GWEN_Buffer_GetStart(buf)); GWEN_Buffer_free(buf); } if (xg->oldEndTagFn) return xg->oldEndTagFn(g, tagName); else return 1; } int AIO_OfxGroup_STATUS_AddData(AIO_OFX_GROUP *g, const char *data) { AIO_OFX_GROUP_STATUS *xg; assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_STATUS, g); assert(xg); if (xg->currentElement) { GWEN_BUFFER *buf; int rv; const char *s; buf=GWEN_Buffer_new(0, strlen(data), 0, 1); rv=AIO_OfxXmlCtx_SanitizeData(AIO_OfxGroup_GetXmlContext(g), data, buf); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(buf); return rv; } s=GWEN_Buffer_GetStart(buf); if (*s) { DBG_INFO(AQBANKING_LOGDOMAIN, "AddData: %s=[%s]", xg->currentElement, s); if (strcasecmp(xg->currentElement, "CODE")==0) { if (1!=sscanf(s, "%d", &xg->code)) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Bad data for element [%s]", xg->currentElement); GWEN_Buffer_free(buf); return GWEN_ERROR_BAD_DATA; } } else if (strcasecmp(xg->currentElement, "SEVERITY")==0) { free(xg->severity); xg->severity=strdup(GWEN_Buffer_GetStart(buf)); } else { DBG_INFO(AQBANKING_LOGDOMAIN, "Ignoring data for unknown element [%s]", xg->currentElement); } } GWEN_Buffer_free(buf); } return 0; } aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_invstmtmsgsrsv1.c0000664000175000017500000000521714043610745024151 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Mon Jan 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de comments :Stephen R. Besch email :sbesch@acsu.buffalo.edu *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "g_invstmtmsgsrsv1_p.h" #include "ofxxmlctx_l.h" #include "g_generic_l.h" #include "g_ignore_l.h" #include "g_invstmttrnrs_l.h" #include #include /*This code parallels the code in BANKMSGSRSV1. First order of business is the object constructor. After setting up the base group object, all we need to do is watch for the arrival of the INVSTMTTRNRS tag, so we set up a virtual function to intercept future tags.*/ AIO_OFX_GROUP *AIO_OfxGroup_INVSTMTMSGSRSV1_new(const char *groupName, AIO_OFX_GROUP *parent, GWEN_XML_CONTEXT *ctx) { AIO_OFX_GROUP *g; /* create base group */ g=AIO_OfxGroup_Generic_new(groupName, parent, ctx); assert(g); /* set virtual functions */ AIO_OfxGroup_SetStartTagFn(g, AIO_OfxGroup_INVSTMTMSGSRSV1_StartTag); return g; } /*The goal here is to filter all the tags in this group until we find a the INVSTMTTRNRS tag. At that point we create a new group (the INVSTMTTRNRS group) and let it handle all the tags for that group.*/ int AIO_OfxGroup_INVSTMTMSGSRSV1_StartTag(AIO_OFX_GROUP *g, const char *tagName) { AIO_OFX_GROUP *gNew=NULL; GWEN_XML_CONTEXT *ctx; assert(g); /*Make sure that the parent group exists*/ ctx=AIO_OfxGroup_GetXmlContext(g); /*If it does, then get the context from it*/ if (strcasecmp(tagName, "INVSTMTTRNRS")==0) { gNew=AIO_OfxGroup_INVSTMTTRNRS_new(tagName, g, ctx); /*We've found the tag, so create a new group*/ } else { DBG_WARN(AQBANKING_LOGDOMAIN, "Ignoring group [%s]", tagName); gNew=AIO_OfxGroup_Ignore_new(tagName, g, ctx); /*All other groups are ignored!*/ } /*OK, so we have a new group - even if it's going to be just the ignore group. So we set that new group into the context and bump the depth counter.*/ if (gNew) { AIO_OfxXmlCtx_SetCurrentGroup(ctx, gNew); GWEN_XmlCtx_IncDepth(ctx); } return 0; } aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_status_p.h0000664000175000017500000000205414043610745022602 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Mon Jan 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AIO_OFX_G_STATUS_P_H #define AIO_OFX_G_STATUS_P_H #include "g_status_l.h" typedef struct AIO_OFX_GROUP_STATUS AIO_OFX_GROUP_STATUS; struct AIO_OFX_GROUP_STATUS { char *description; int code; char *severity; char *currentElement; AIO_OFX_GROUP_ENDTAG_FN oldEndTagFn; }; static void GWENHYWFAR_CB AIO_OfxGroup_STATUS_FreeData(void *bp, void *p); static int AIO_OfxGroup_STATUS_StartTag(AIO_OFX_GROUP *g, const char *tagName); static int AIO_OfxGroup_STATUS_EndTag(AIO_OFX_GROUP *g, const char *tagName); static int AIO_OfxGroup_STATUS_AddData(AIO_OFX_GROUP *g, const char *data); #endif aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_seclistmsgsrsv1_p.h0000664000175000017500000000131114043610745024426 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Mon Jan 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AIO_OFX_G_SECLISTMSGSRSV1_P_H #define AIO_OFX_G_SECLISTMSGSRSV1_P_H #include "g_seclistmsgsrsv1_l.h" static int AIO_OfxGroup_SECLISTMSGSRSV1_StartTag(AIO_OFX_GROUP *g, const char *tagName); #endif aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_stmtrn.c0000664000175000017500000002656514043610745022277 00000000000000/*************************************************************************** begin : Mon Jan 07 2008 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "g_stmtrn_p.h" #include "ofxxmlctx_l.h" #include "aqbanking/i18n_l.h" #include "g_generic_l.h" #include "g_ignore_l.h" #include "g_bankacc_l.h" #include #include #include #include GWEN_INHERIT(AIO_OFX_GROUP, AIO_OFX_GROUP_STMTRN) AIO_OFX_GROUP *AIO_OfxGroup_STMTRN_new(const char *groupName, AIO_OFX_GROUP *parent, GWEN_XML_CONTEXT *ctx) { AIO_OFX_GROUP *g; AIO_OFX_GROUP_STMTRN *xg; /* create base group */ g=AIO_OfxGroup_Generic_new(groupName, parent, ctx); assert(g); GWEN_NEW_OBJECT(AIO_OFX_GROUP_STMTRN, xg); assert(xg); GWEN_INHERIT_SETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_STMTRN, g, xg, AIO_OfxGroup_STMTRN_FreeData); xg->transaction=AB_Transaction_new(); /* set virtual functions */ AIO_OfxGroup_SetStartTagFn(g, AIO_OfxGroup_STMTRN_StartTag); AIO_OfxGroup_SetAddDataFn(g, AIO_OfxGroup_STMTRN_AddData); AIO_OfxGroup_SetEndSubGroupFn(g, AIO_OfxGroup_STMTRN_EndSubGroup); return g; } GWENHYWFAR_CB void AIO_OfxGroup_STMTRN_FreeData(void *bp, void *p) { AIO_OFX_GROUP_STMTRN *xg; xg=(AIO_OFX_GROUP_STMTRN *)p; assert(xg); free(xg->currentElement); AB_Transaction_free(xg->transaction); GWEN_FREE_OBJECT(xg); } AB_TRANSACTION *AIO_OfxGroup_STMTRN_TakeTransaction(const AIO_OFX_GROUP *g) { AIO_OFX_GROUP_STMTRN *xg; AB_TRANSACTION *t; assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_STMTRN, g); assert(xg); t=xg->transaction; xg->transaction=NULL; return t; } int AIO_OfxGroup_STMTRN_StartTag(AIO_OFX_GROUP *g, const char *tagName) { AIO_OFX_GROUP_STMTRN *xg; GWEN_XML_CONTEXT *ctx; AIO_OFX_GROUP *gNew=NULL; assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_STMTRN, g); assert(xg); ctx=AIO_OfxGroup_GetXmlContext(g); if (strcasecmp(tagName, "TRNTYPE")==0 || strcasecmp(tagName, "DTPOSTED")==0 || strcasecmp(tagName, "DTUSER")==0 || strcasecmp(tagName, "DTAVAIL")==0 || strcasecmp(tagName, "TRNAMT")==0 || strcasecmp(tagName, "FITID")==0 || strcasecmp(tagName, "CORRECTFITID")==0 || strcasecmp(tagName, "CORRECTATION")==0 || strcasecmp(tagName, "SRVTID")==0 || strcasecmp(tagName, "CHECKNUM")==0 || strcasecmp(tagName, "REFNUM")==0 || strcasecmp(tagName, "SIC")==0 || strcasecmp(tagName, "PAYEEID")==0 || strcasecmp(tagName, "NAME")==0 || strcasecmp(tagName, "MEMO")==0) { free(xg->currentElement); xg->currentElement=strdup(tagName); } else if (strcasecmp(tagName, "BANKACCTTO")==0) { gNew=AIO_OfxGroup_BANKACC_new(tagName, g, ctx); } else if (strcasecmp(tagName, "CCACCTTO")==0) { /* TODO */ gNew=AIO_OfxGroup_Ignore_new(tagName, g, ctx); } else if (strcasecmp(tagName, "PAYEE")==0) { /* TODO */ gNew=AIO_OfxGroup_Ignore_new(tagName, g, ctx); } else if (strcasecmp(tagName, "CURRENCY")==0) { /* TODO */ gNew=AIO_OfxGroup_Ignore_new(tagName, g, ctx); } else if (strcasecmp(tagName, "ORIGCURRENCY")==0) { /* TODO */ gNew=AIO_OfxGroup_Ignore_new(tagName, g, ctx); } else { DBG_WARN(AQBANKING_LOGDOMAIN, "Ignoring tag [%s]", tagName); /*gNew=AIO_OfxGroup_Ignore_new(tagName, g, ctx);*/ free(xg->currentElement); xg->currentElement=strdup(tagName); } if (gNew) { AIO_OfxXmlCtx_SetCurrentGroup(ctx, gNew); GWEN_XmlCtx_IncDepth(ctx); } return 0; } int AIO_OfxGroup_STMTRN_AddData(AIO_OFX_GROUP *g, const char *data) { AIO_OFX_GROUP_STMTRN *xg; assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_STMTRN, g); assert(xg); if (xg->currentElement) { GWEN_BUFFER *buf; int rv; const char *s; buf=GWEN_Buffer_new(0, strlen(data), 0, 1); rv=AIO_OfxXmlCtx_SanitizeData(AIO_OfxGroup_GetXmlContext(g), data, buf); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(buf); return rv; } s=GWEN_Buffer_GetStart(buf); if (*s) { DBG_INFO(AQBANKING_LOGDOMAIN, "AddData: %s=[%s]", xg->currentElement, s); if (strcasecmp(xg->currentElement, "TRNTYPE")==0) { AB_TRANSACTION *t; t=xg->transaction; AB_Transaction_SetType(t, AB_Transaction_TypeStatement); AB_Transaction_SetSubType(t, AB_Transaction_SubTypeStandard); if (strcasecmp(s, "CREDIT")==0) { AB_Transaction_SetTransactionKey(t, "MSC"); AB_Transaction_SetTransactionText(t, I18N("Generic credit")); } else if (strcasecmp(s, "DEBIT")==0) { AB_Transaction_SetTransactionKey(t, "MSC"); AB_Transaction_SetTransactionText(t, I18N("Generic debit")); } else if (strcasecmp(s, "INT")==0) { AB_Transaction_SetTransactionKey(t, "INT"); AB_Transaction_SetTransactionText(t, I18N("Interest earned or paid (Note: Depends on signage of amount)")); } else if (strcasecmp(s, "DIV")==0) { AB_Transaction_SetTransactionKey(t, "DIV"); AB_Transaction_SetTransactionText(t, I18N("Dividend")); } else if (strcasecmp(s, "FEE")==0) { AB_Transaction_SetTransactionKey(t, "BRF"); AB_Transaction_SetTransactionText(t, I18N("FI fee")); } else if (strcasecmp(s, "SRVCHG")==0) { AB_Transaction_SetTransactionKey(t, "CHG"); AB_Transaction_SetTransactionText(t, I18N("Service charge")); } else if (strcasecmp(s, "DEP")==0) { AB_Transaction_SetTransactionKey(t, "LDP"); /* FIXME: not sure */ AB_Transaction_SetTransactionText(t, I18N("Deposit")); } else if (strcasecmp(s, "ATM")==0) { AB_Transaction_SetTransactionKey(t, "MSC"); /* misc */ AB_Transaction_SetTransactionText(t, I18N("ATM debit or credit (Note: Depends on signage of amount)")); } else if (strcasecmp(s, "POS")==0) { AB_Transaction_SetTransactionKey(t, "MSC"); /* misc */ AB_Transaction_SetTransactionText(t, I18N("Point of sale debit or credit (Note: Depends on signage of amount)")); } else if (strcasecmp(s, "XFER")==0) { AB_Transaction_SetTransactionKey(t, "TRF"); AB_Transaction_SetTransactionText(t, I18N("Transfer")); } else if (strcasecmp(s, "CHECK")==0) { AB_Transaction_SetTransactionKey(t, "CHK"); AB_Transaction_SetTransactionText(t, I18N("Check")); } else if (strcasecmp(s, "PAYMENT")==0) { AB_Transaction_SetTransactionKey(t, "TRF"); /* FIXME: not sure */ AB_Transaction_SetTransactionText(t, I18N("Electronic payment")); } else if (strcasecmp(s, "CASH")==0) { AB_Transaction_SetTransactionKey(t, "MSC"); /* FIXME: not sure */ AB_Transaction_SetTransactionText(t, I18N("Cash withdrawal")); } else if (strcasecmp(s, "DIRECTDEP")==0) { AB_Transaction_SetTransactionKey(t, "LDP"); /* FIXME: not sure */ AB_Transaction_SetTransactionText(t, I18N("Direct deposit")); } else if (strcasecmp(s, "DIRECTDEBIT")==0) { AB_Transaction_SetTransactionKey(t, "MSC"); /* FIXME: not sure */ AB_Transaction_SetTransactionText(t, I18N("Merchant initiated debit")); } else if (strcasecmp(s, "REPEATPMT")==0) { AB_Transaction_SetTransactionKey(t, "STO"); AB_Transaction_SetTransactionText(t, I18N("Repeating payment/standing order")); } else if (strcasecmp(s, "OTHER")==0) { AB_Transaction_SetTransactionKey(t, "MSC"); AB_Transaction_SetTransactionText(t, I18N("Other")); } else { DBG_WARN(AQBANKING_LOGDOMAIN, "Unknown transaction type [%s]", s); AB_Transaction_SetTransactionText(t, I18N("Unknown transaction type")); } } else if (strcasecmp(xg->currentElement, "DTPOSTED")==0) { GWEN_DATE *da; da=GWEN_Date_fromStringWithTemplate(s, "YYYYMMDD"); if (da==NULL) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Invalid data for DTPOSTED: [%s]", s); GWEN_Buffer_free(buf); return GWEN_ERROR_BAD_DATA; } AB_Transaction_SetValutaDate(xg->transaction, da); GWEN_Date_free(da); } else if (strcasecmp(xg->currentElement, "DTUSER")==0) { GWEN_DATE *da; da=GWEN_Date_fromStringWithTemplate(s, "YYYYMMDD"); if (da==NULL) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Invalid data for DTUSER: [%s]", s); GWEN_Buffer_free(buf); return GWEN_ERROR_BAD_DATA; } AB_Transaction_SetDate(xg->transaction, da); GWEN_Date_free(da); } else if (strcasecmp(xg->currentElement, "DTAVAIL")==0) { /* ignore */ } else if (strcasecmp(xg->currentElement, "TRNAMT")==0) { AB_VALUE *v; v=AB_Value_fromString(s); if (v==NULL) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Invalid data for TRNAMT: [%s]", s); GWEN_Buffer_free(buf); return GWEN_ERROR_BAD_DATA; } if (xg->currency) AB_Value_SetCurrency(v, xg->currency); AB_Transaction_SetValue(xg->transaction, v); AB_Value_free(v); } else if (strcasecmp(xg->currentElement, "FITID")==0) { AB_Transaction_SetFiId(xg->transaction, s); } else if (strcasecmp(xg->currentElement, "CHECKNUM")==0) { AB_Transaction_SetCustomerReference(xg->transaction, s); } else if (strcasecmp(xg->currentElement, "REFNUM")==0) { AB_Transaction_SetCustomerReference(xg->transaction, s); } else if (strcasecmp(xg->currentElement, "PAYEEID")==0) { /* ignore */ } else if (strcasecmp(xg->currentElement, "NAME")==0) { AB_Transaction_SetRemoteName(xg->transaction, s); } else if (strcasecmp(xg->currentElement, "MEMO")==0 || strcasecmp(xg->currentElement, "MEMO2")==0) { AB_Transaction_AddPurposeLine(xg->transaction, s); } else if (strcasecmp(xg->currentElement, "SRVRTID")==0 || strcasecmp(xg->currentElement, "SRVRTID2")==0) { AB_Transaction_SetBankReference(xg->transaction, s); } else { DBG_INFO(AQBANKING_LOGDOMAIN, "Ignoring data for unknown element [%s]", xg->currentElement); } } GWEN_Buffer_free(buf); } return 0; } int AIO_OfxGroup_STMTRN_EndSubGroup(AIO_OFX_GROUP *g, AIO_OFX_GROUP *sg) { AIO_OFX_GROUP_STMTRN *xg; const char *s; GWEN_XML_CONTEXT *ctx; assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_STMTRN, g); assert(xg); ctx=AIO_OfxGroup_GetXmlContext(g); assert(ctx); s=AIO_OfxGroup_GetGroupName(sg); if (strcasecmp(s, "PAYEE")==0) { } else if (strcasecmp(s, "BANKACCTTO")==0) { } return 0; } aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_buymf_l.h0000664000175000017500000000156514043610745022403 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Mon Jan 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de copyright : (C) 2013 by Paul Conrady email : c.p.conrady@gmail.com *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AIO_OFX_G_BUYMF_L_H #define AIO_OFX_G_BUYMF_L_H #include "ofxgroup_l.h" AIO_OFX_GROUP *AIO_OfxGroup_BUYMF_new(const char *groupName, AIO_OFX_GROUP *parent, GWEN_XML_CONTEXT *ctx); AB_TRANSACTION *AIO_OfxGroup_BUYMF_TakeTransaction(const AIO_OFX_GROUP *g); #endif aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_invacc_p.h0000664000175000017500000000245114043610745022523 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Thur Apr 23 2009 copyright : (C) 2009 by Stephen R. Besch (C) 2008 by Martin Preuss email : sbesch@buffalo.edu martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ /*This is the public part of the include file for g_invacc.c*/ #ifndef AIO_OFX_G_INVACC_P_H #define AIO_OFX_G_INVACC_P_H #include "g_invacc_l.h" /*Include the private part of the file*/ /*The and groups include and tags. To these we add an additional field for the account type and the Object required currentElement field.*/ typedef struct AIO_OFX_GROUP_INVACC AIO_OFX_GROUP_INVACC; struct AIO_OFX_GROUP_INVACC { char *brokerId; char *accId; char *accType; char *currentElement; }; static void GWENHYWFAR_CB AIO_OfxGroup_INVACC_FreeData(void *bp, void *p); static int AIO_OfxGroup_INVACC_StartTag(AIO_OFX_GROUP *g, const char *tagName); static int AIO_OfxGroup_INVACC_AddData(AIO_OFX_GROUP *g, const char *data); #endif aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/ofxxmlctx.c0000664000175000017500000002764414043610745022475 00000000000000/*************************************************************************** begin : Mon Jan 07 2008 copyright : (C) 2008,2012 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "ofxxmlctx_p.h" #include "g_document_l.h" #include #include #include GWEN_INHERIT(GWEN_XML_CONTEXT, AIO_OFX_XMLCTX) GWEN_XML_CONTEXT *AIO_OfxXmlCtx_new(uint32_t flags, AB_IMEXPORTER_CONTEXT *ioContext) { GWEN_XML_CONTEXT *ctx; AIO_OFX_XMLCTX *xctx; AIO_OFX_GROUP *g; /* create base object */ ctx=GWEN_XmlCtx_new(flags); assert(ctx); /* create and assign extension */ GWEN_NEW_OBJECT(AIO_OFX_XMLCTX, xctx); assert(xctx); GWEN_INHERIT_SETDATA(GWEN_XML_CONTEXT, AIO_OFX_XMLCTX, ctx, xctx, AIO_OfxXmlCtx_FreeData); xctx->ioContext=ioContext; /* set virtual functions */ GWEN_XmlCtx_SetStartTagFn(ctx, AIO_OfxXmlCtx_StartTag); GWEN_XmlCtx_SetEndTagFn(ctx, AIO_OfxXmlCtx_EndTag); GWEN_XmlCtx_SetAddDataFn(ctx, AIO_OfxXmlCtx_AddData); GWEN_XmlCtx_SetAddCommentFn(ctx, AIO_OfxXmlCtx_AddComment); GWEN_XmlCtx_SetAddAttrFn(ctx, AIO_OfxXmlCtx_AddAttr); /* create initial group */ g=AIO_OfxGroup_Document_new("OFX_FILE", NULL, ctx); assert(g); AIO_OfxXmlCtx_SetCurrentGroup(ctx, g); /* return base object */ return ctx; } GWENHYWFAR_CB void AIO_OfxXmlCtx_FreeData(void *bp, void *p) { AIO_OFX_XMLCTX *xctx; AIO_OFX_GROUP *g; xctx=(AIO_OFX_XMLCTX *)p; g=xctx->currentGroup; while (g) { AIO_OFX_GROUP *gParent; gParent=AIO_OfxGroup_GetParent(g); AIO_OfxGroup_free(g); g=gParent; } free(xctx->resultSeverity); free(xctx->currentTagName); free(xctx->charset); GWEN_FREE_OBJECT(xctx); } const char *AIO_OfxXmlCtx_GetCharset(const GWEN_XML_CONTEXT *ctx) { AIO_OFX_XMLCTX *xctx; assert(ctx); xctx=GWEN_INHERIT_GETDATA(GWEN_XML_CONTEXT, AIO_OFX_XMLCTX, ctx); assert(xctx); return xctx->charset; } void AIO_OfxXmlCtx_SetCharset(GWEN_XML_CONTEXT *ctx, const char *s) { AIO_OFX_XMLCTX *xctx; assert(ctx); xctx=GWEN_INHERIT_GETDATA(GWEN_XML_CONTEXT, AIO_OFX_XMLCTX, ctx); assert(xctx); free(xctx->charset); if (s) xctx->charset=strdup(s); else xctx->charset=NULL; } int AIO_OfxXmlCtx_GetResultCode(const GWEN_XML_CONTEXT *ctx) { AIO_OFX_XMLCTX *xctx; assert(ctx); xctx=GWEN_INHERIT_GETDATA(GWEN_XML_CONTEXT, AIO_OFX_XMLCTX, ctx); assert(xctx); return xctx->resultCode; } void AIO_OfxXmlCtx_SetResultCode(GWEN_XML_CONTEXT *ctx, int i) { AIO_OFX_XMLCTX *xctx; assert(ctx); xctx=GWEN_INHERIT_GETDATA(GWEN_XML_CONTEXT, AIO_OFX_XMLCTX, ctx); assert(xctx); xctx->resultCode=i; } const char *AIO_OfxXmlCtx_GetResultSeverity(const GWEN_XML_CONTEXT *ctx) { AIO_OFX_XMLCTX *xctx; assert(ctx); xctx=GWEN_INHERIT_GETDATA(GWEN_XML_CONTEXT, AIO_OFX_XMLCTX, ctx); assert(xctx); return xctx->resultSeverity; } void AIO_OfxXmlCtx_SetResultSeverity(GWEN_XML_CONTEXT *ctx, const char *s) { AIO_OFX_XMLCTX *xctx; assert(ctx); xctx=GWEN_INHERIT_GETDATA(GWEN_XML_CONTEXT, AIO_OFX_XMLCTX, ctx); assert(xctx); free(xctx->resultSeverity); if (s) xctx->resultSeverity=strdup(s); else xctx->resultSeverity=NULL; } AB_IMEXPORTER_CONTEXT *AIO_OfxXmlCtx_GetIoContext(const GWEN_XML_CONTEXT *ctx) { AIO_OFX_XMLCTX *xctx; assert(ctx); xctx=GWEN_INHERIT_GETDATA(GWEN_XML_CONTEXT, AIO_OFX_XMLCTX, ctx); assert(xctx); return xctx->ioContext; } AIO_OFX_GROUP *AIO_OfxXmlCtx_GetCurrentGroup(const GWEN_XML_CONTEXT *ctx) { AIO_OFX_XMLCTX *xctx; assert(ctx); xctx=GWEN_INHERIT_GETDATA(GWEN_XML_CONTEXT, AIO_OFX_XMLCTX, ctx); assert(xctx); return xctx->currentGroup; } void AIO_OfxXmlCtx_SetCurrentGroup(GWEN_XML_CONTEXT *ctx, AIO_OFX_GROUP *g) { AIO_OFX_XMLCTX *xctx; assert(ctx); xctx=GWEN_INHERIT_GETDATA(GWEN_XML_CONTEXT, AIO_OFX_XMLCTX, ctx); assert(xctx); xctx->currentGroup=g; } const char *AIO_OfxXmlCtx_GetCurrentTagName(const GWEN_XML_CONTEXT *ctx) { AIO_OFX_XMLCTX *xctx; assert(ctx); xctx=GWEN_INHERIT_GETDATA(GWEN_XML_CONTEXT, AIO_OFX_XMLCTX, ctx); assert(xctx); return xctx->currentTagName; } void AIO_OfxXmlCtx_SetCurrentTagName(GWEN_XML_CONTEXT *ctx, const char *s) { AIO_OFX_XMLCTX *xctx; assert(ctx); xctx=GWEN_INHERIT_GETDATA(GWEN_XML_CONTEXT, AIO_OFX_XMLCTX, ctx); assert(xctx); free(xctx->currentTagName); if (s) xctx->currentTagName=strdup(s); else xctx->currentTagName=NULL; } int AIO_OfxXmlCtx_CleanupData(GWEN_XML_CONTEXT *ctx, const char *data, GWEN_BUFFER *buf) { const uint8_t *p; uint8_t *dst; uint8_t *src; unsigned int size; unsigned int i; int lastWasBlank; uint8_t *lastBlankPos; uint32_t bStart=0; if (GWEN_Text_UnescapeXmlToBuffer(data, buf)) { DBG_INFO(AQBANKING_LOGDOMAIN, "here"); return GWEN_ERROR_BAD_DATA; } dst=(uint8_t *)GWEN_Buffer_GetStart(buf); src=dst; /* skip leading blanks */ while (*src && (*src<33 || *src>=127)) src++; p=src; bStart=src-((uint8_t *)GWEN_Buffer_GetStart(buf)); size=GWEN_Buffer_GetUsedBytes(buf)-bStart; lastWasBlank=0; lastBlankPos=0; for (i=0; i=127 would filter out umlauts... if (c<32 || c>=127)*/ if (c<32) c=32; /* remember next loop whether this char was a blank */ if (c==32) { if (!lastWasBlank) { /* store only one blank */ lastWasBlank=1; lastBlankPos=dst; *(dst++)=c; } } else { lastWasBlank=0; lastBlankPos=0; *(dst++)=c; } p++; } /* remove trailing blanks */ if (lastBlankPos!=0) dst=lastBlankPos; size=dst-(uint8_t *)GWEN_Buffer_GetStart(buf); GWEN_Buffer_Crop(buf, 0, size); return 0; } int AIO_OfxXmlCtx_SanitizeData(GWEN_XML_CONTEXT *ctx, const char *data, GWEN_BUFFER *buf) { AIO_OFX_XMLCTX *xctx; assert(ctx); xctx=GWEN_INHERIT_GETDATA(GWEN_XML_CONTEXT, AIO_OFX_XMLCTX, ctx); assert(xctx); if (xctx->charset) { GWEN_BUFFER *tbuf; int rv; tbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=AIO_OfxXmlCtx_CleanupData(ctx, data, tbuf); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); return rv; } rv=GWEN_Text_ConvertCharset(xctx->charset, "UTF-8", GWEN_Buffer_GetStart(tbuf), GWEN_Buffer_GetUsedBytes(tbuf), buf); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); return rv; } GWEN_Buffer_free(tbuf); return 0; } else return AIO_OfxXmlCtx_CleanupData(ctx, data, buf); } int AIO_OfxXmlCtx_StartTag(GWEN_XML_CONTEXT *ctx, const char *tagName) { AIO_OFX_XMLCTX *xctx; assert(ctx); xctx=GWEN_INHERIT_GETDATA(GWEN_XML_CONTEXT, AIO_OFX_XMLCTX, ctx); assert(xctx); DBG_INFO(AQBANKING_LOGDOMAIN, "Starting tag [%s]", tagName); /* store for later, do nothing more here */ AIO_OfxXmlCtx_SetCurrentTagName(ctx, tagName); return 0; } int AIO_OfxXmlCtx_EndTag(GWEN_XML_CONTEXT *ctx, int closing) { AIO_OFX_XMLCTX *xctx; assert(ctx); xctx=GWEN_INHERIT_GETDATA(GWEN_XML_CONTEXT, AIO_OFX_XMLCTX, ctx); assert(xctx); if (closing) { /* just ignore empty tags which are closed immediately */ DBG_INFO(AQBANKING_LOGDOMAIN, "Closing empty tag [%s]", (xctx->currentTagName)?xctx->currentTagName:""); return 0; } if (xctx->currentTagName==NULL) { DBG_INFO(AQBANKING_LOGDOMAIN, "No tag name, malformed OFX file"); return GWEN_ERROR_BAD_DATA; } DBG_INFO(AQBANKING_LOGDOMAIN, "Completed tag [%s]", xctx->currentTagName); if (xctx->currentGroup) { if (*(xctx->currentTagName)=='/') { int rv; int endingOfxDoc=0; if (strcasecmp(xctx->currentTagName, "/OFX")==0) { DBG_INFO(AQBANKING_LOGDOMAIN, "End of OFX document reached, will reset depth to %d", xctx->startDepthOfOfxElement); endingOfxDoc=1; } /* it is a closing tag, call EndTagFn */ DBG_INFO(AQBANKING_LOGDOMAIN, "Calling %s->EndTag(%s)", AIO_OfxGroup_GetGroupName(xctx->currentGroup), xctx->currentTagName); rv=AIO_OfxGroup_EndTag(xctx->currentGroup, xctx->currentTagName+1); if (rv<0) { if (rv!=GWEN_ERROR_NOT_IMPLEMENTED) { DBG_INFO(AQBANKING_LOGDOMAIN, "Error in EndTag(%s) for [%s]", AIO_OfxGroup_GetGroupName(xctx->currentGroup), xctx->currentTagName); return rv; } } else if (rv==1) { AIO_OFX_GROUP *g; AIO_OFX_GROUP *gParent; /* pop current group from stack */ g=xctx->currentGroup; gParent=AIO_OfxGroup_GetParent(g); xctx->currentGroup=gParent; if (gParent) { DBG_INFO(AQBANKING_LOGDOMAIN, "Calling %s->EndSubGroup(%s)", AIO_OfxGroup_GetGroupName(gParent), AIO_OfxGroup_GetGroupName(g)); AIO_OfxGroup_EndSubGroup(gParent, g); } AIO_OfxGroup_free(g); GWEN_XmlCtx_DecDepth(ctx); } if (endingOfxDoc) { /* TODO: Tags which have no closing element should decrease the depth by themselves... */ DBG_INFO(AQBANKING_LOGDOMAIN, "End of OFX document reached, resetting depth to %d", xctx->startDepthOfOfxElement); GWEN_XmlCtx_SetDepth(ctx, xctx->startDepthOfOfxElement); } } else { int rv; if (strcasecmp(xctx->currentTagName, "OFX")==0) { DBG_INFO(AQBANKING_LOGDOMAIN, "Start of OFX document reached, storing depth"); xctx->startDepthOfOfxElement=GWEN_XmlCtx_GetDepth(ctx); } /* it is an opening tag, call StartTagFn */ DBG_INFO(AQBANKING_LOGDOMAIN, "Calling %s->StartTag(%s)", AIO_OfxGroup_GetGroupName(xctx->currentGroup), xctx->currentTagName); rv=AIO_OfxGroup_StartTag(xctx->currentGroup, xctx->currentTagName); if (rv<0) { if (rv!=GWEN_ERROR_NOT_IMPLEMENTED) { DBG_INFO(AQBANKING_LOGDOMAIN, "Error in StartTag(%s) for [%s]", AIO_OfxGroup_GetGroupName(xctx->currentGroup), xctx->currentTagName); return rv; } } } } return 0; } int AIO_OfxXmlCtx_AddData(GWEN_XML_CONTEXT *ctx, const char *data) { AIO_OFX_XMLCTX *xctx; assert(ctx); xctx=GWEN_INHERIT_GETDATA(GWEN_XML_CONTEXT, AIO_OFX_XMLCTX, ctx); assert(xctx); if (xctx->currentGroup) { int rv; DBG_INFO(AQBANKING_LOGDOMAIN, "Calling %s->AddData()", AIO_OfxGroup_GetGroupName(xctx->currentGroup)); rv=AIO_OfxGroup_AddData(xctx->currentGroup, data); if (rv<0) { if (rv!=GWEN_ERROR_NOT_IMPLEMENTED) { DBG_INFO(AQBANKING_LOGDOMAIN, "Error in AddData(%s)", AIO_OfxGroup_GetGroupName(xctx->currentGroup)); return rv; } } } return 0; } int AIO_OfxXmlCtx_AddComment(GWEN_XML_CONTEXT *ctx, const char *data) { AIO_OFX_XMLCTX *xctx; assert(ctx); xctx=GWEN_INHERIT_GETDATA(GWEN_XML_CONTEXT, AIO_OFX_XMLCTX, ctx); assert(xctx); /* ignore comments */ return 0; } int AIO_OfxXmlCtx_AddAttr(GWEN_XML_CONTEXT *ctx, const char *attrName, const char *attrData) { AIO_OFX_XMLCTX *xctx; assert(ctx); xctx=GWEN_INHERIT_GETDATA(GWEN_XML_CONTEXT, AIO_OFX_XMLCTX, ctx); assert(xctx); /* ignore attributes */ return 0; } aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_secinfo.c0000664000175000017500000001463314043610745022367 00000000000000/*************************************************************************** begin : Mon Jan 07 2008 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "g_secinfo_p.h" #include "ofxxmlctx_l.h" #include "aqbanking/i18n_l.h" #include "g_generic_l.h" #include "g_ignore_l.h" #include "g_secid_l.h" #include #include #include #include GWEN_INHERIT(AIO_OFX_GROUP, AIO_OFX_GROUP_SECINFO) AIO_OFX_GROUP *AIO_OfxGroup_SECINFO_new(const char *groupName, AIO_OFX_GROUP *parent, GWEN_XML_CONTEXT *ctx) { AIO_OFX_GROUP *g; AIO_OFX_GROUP_SECINFO *xg; /* create base group */ g=AIO_OfxGroup_Generic_new(groupName, parent, ctx); assert(g); GWEN_NEW_OBJECT(AIO_OFX_GROUP_SECINFO, xg); assert(xg); GWEN_INHERIT_SETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_SECINFO, g, xg, AIO_OfxGroup_SECINFO_FreeData); /* set virtual functions */ AIO_OfxGroup_SetStartTagFn(g, AIO_OfxGroup_SECINFO_StartTag); AIO_OfxGroup_SetAddDataFn(g, AIO_OfxGroup_SECINFO_AddData); AIO_OfxGroup_SetEndSubGroupFn(g, AIO_OfxGroup_SECINFO_EndSubGroup); return g; } GWENHYWFAR_CB void AIO_OfxGroup_SECINFO_FreeData(void *bp, void *p) { AIO_OFX_GROUP_SECINFO *xg; xg=(AIO_OFX_GROUP_SECINFO *)p; assert(xg); free(xg->currentElement); free(xg->ticker); free(xg->secname); free(xg->uniqueId); free(xg->nameSpace); GWEN_FREE_OBJECT(xg); } const char *AIO_OfxGroup_SECINFO_GetTicker(const AIO_OFX_GROUP *g) { AIO_OFX_GROUP_SECINFO *xg; assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_SECINFO, g); assert(xg); return xg->ticker; } void AIO_OfxGroup_SECINFO_SetTicker(AIO_OFX_GROUP *g, const char *s) { AIO_OFX_GROUP_SECINFO *xg; assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_SECINFO, g); assert(xg); free(xg->ticker); if (s) xg->ticker=strdup(s); else xg->ticker=NULL; } const char *AIO_OfxGroup_SECINFO_GetSecurityName(const AIO_OFX_GROUP *g) { AIO_OFX_GROUP_SECINFO *xg; assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_SECINFO, g); assert(xg); return xg->secname; } void AIO_OfxGroup_SECINFO_SetSecurityName(AIO_OFX_GROUP *g, const char *s) { AIO_OFX_GROUP_SECINFO *xg; assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_SECINFO, g); assert(xg); free(xg->secname); if (s) xg->secname=strdup(s); else xg->secname=NULL; } const char *AIO_OfxGroup_SECINFO_GetUniqueId(const AIO_OFX_GROUP *g) { AIO_OFX_GROUP_SECINFO *xg; assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_SECINFO, g); assert(xg); return xg->uniqueId; } void AIO_OfxGroup_SECINFO_SetUniqueId(AIO_OFX_GROUP *g, const char *s) { AIO_OFX_GROUP_SECINFO *xg; assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_SECINFO, g); assert(xg); free(xg->uniqueId); if (s) xg->uniqueId=strdup(s); else xg->uniqueId=NULL; } const char *AIO_OfxGroup_SECINFO_GetNameSpace(const AIO_OFX_GROUP *g) { AIO_OFX_GROUP_SECINFO *xg; assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_SECINFO, g); assert(xg); return xg->nameSpace; } void AIO_OfxGroup_SECINFO_SetNameSpace(AIO_OFX_GROUP *g, const char *s) { AIO_OFX_GROUP_SECINFO *xg; assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_SECINFO, g); assert(xg); free(xg->nameSpace); if (s) xg->nameSpace=strdup(s); else xg->nameSpace=NULL; } int AIO_OfxGroup_SECINFO_StartTag(AIO_OFX_GROUP *g, const char *tagName) { AIO_OFX_GROUP_SECINFO *xg; GWEN_XML_CONTEXT *ctx; AIO_OFX_GROUP *gNew=NULL; assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_SECINFO, g); assert(xg); ctx=AIO_OfxGroup_GetXmlContext(g); free(xg->currentElement); xg->currentElement=NULL; if (strcasecmp(tagName, "SECNAME")==0 || strcasecmp(tagName, "TICKER")==0 || strcasecmp(tagName, "FIID")==0 || strcasecmp(tagName, "UNITPRICE")==0 || strcasecmp(tagName, "DTASOF")==0) { xg->currentElement=strdup(tagName); } else if (strcasecmp(tagName, "SECID")==0) { gNew=AIO_OfxGroup_SECID_new(tagName, g, ctx); } else { DBG_WARN(AQBANKING_LOGDOMAIN, "Ignoring tag [%s]", tagName); } if (gNew) { AIO_OfxXmlCtx_SetCurrentGroup(ctx, gNew); GWEN_XmlCtx_IncDepth(ctx); } return 0; } int AIO_OfxGroup_SECINFO_AddData(AIO_OFX_GROUP *g, const char *data) { AIO_OFX_GROUP_SECINFO *xg; assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_SECINFO, g); assert(xg); if (xg->currentElement) { GWEN_BUFFER *buf; int rv; const char *s; buf=GWEN_Buffer_new(0, strlen(data), 0, 1); rv=AIO_OfxXmlCtx_SanitizeData(AIO_OfxGroup_GetXmlContext(g), data, buf); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(buf); return rv; } s=GWEN_Buffer_GetStart(buf); if (*s) { DBG_INFO(AQBANKING_LOGDOMAIN, "AddData: %s=[%s]", xg->currentElement, s); if (strcasecmp(xg->currentElement, "SECNAME")==0) AIO_OfxGroup_SECINFO_SetSecurityName(g, GWEN_Buffer_GetStart(buf)); else if (strcasecmp(xg->currentElement, "TICKER")==0) AIO_OfxGroup_SECINFO_SetTicker(g, GWEN_Buffer_GetStart(buf)); else { DBG_INFO(AQBANKING_LOGDOMAIN, "Ignoring data for unknown element [%s]", xg->currentElement); } } GWEN_Buffer_free(buf); } return 0; } int AIO_OfxGroup_SECINFO_EndSubGroup(AIO_OFX_GROUP *g, AIO_OFX_GROUP *sg) { AIO_OFX_GROUP_SECINFO *xg; const char *s; GWEN_XML_CONTEXT *ctx; assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_SECINFO, g); assert(xg); ctx=AIO_OfxGroup_GetXmlContext(g); assert(ctx); s=AIO_OfxGroup_GetGroupName(sg); if (strcasecmp(s, "SECID")==0) { AIO_OfxGroup_SECINFO_SetUniqueId(g, AIO_OfxGroup_SECID_GetUniqueId(sg)); AIO_OfxGroup_SECINFO_SetNameSpace(g, AIO_OfxGroup_SECID_GetNameSpace(sg)); } return 0; } aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_invstmtrs_p.h0000664000175000017500000000205614043610745023332 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Mon Jan 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AIO_OFX_G_INVSTMTRS_P_H #define AIO_OFX_G_INVSTMTRS_P_H #include "g_invstmtrs_l.h" typedef struct AIO_OFX_GROUP_INVSTMTRS AIO_OFX_GROUP_INVSTMTRS; struct AIO_OFX_GROUP_INVSTMTRS { char *currentElement; char *currency; AB_IMEXPORTER_ACCOUNTINFO *accountInfo; }; static void GWENHYWFAR_CB AIO_OfxGroup_INVSTMTRS_FreeData(void *bp, void *p); static int AIO_OfxGroup_INVSTMTRS_StartTag(AIO_OFX_GROUP *g, const char *tagName); static int AIO_OfxGroup_INVSTMTRS_EndSubGroup(AIO_OFX_GROUP *g, AIO_OFX_GROUP *sg); static int AIO_OfxGroup_INVSTMTRS_AddData(AIO_OFX_GROUP *g, const char *data); #endif aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_secid.c0000664000175000017500000001116714043610745022027 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Mon Jan 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de copyright : (C) 2013 by Paul Conrady email : c.p.conrady@gmail.com *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "g_secid_p.h" #include "ofxxmlctx_l.h" #include "g_generic_l.h" #include "g_ignore_l.h" #include #include #include #include GWEN_INHERIT(AIO_OFX_GROUP, AIO_OFX_GROUP_SECID) AIO_OFX_GROUP *AIO_OfxGroup_SECID_new(const char *groupName, AIO_OFX_GROUP *parent, GWEN_XML_CONTEXT *ctx) { AIO_OFX_GROUP *g; AIO_OFX_GROUP_SECID *xg; /* create base group */ g=AIO_OfxGroup_Generic_new(groupName, parent, ctx); assert(g); GWEN_NEW_OBJECT(AIO_OFX_GROUP_SECID, xg); assert(xg); GWEN_INHERIT_SETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_SECID, g, xg, AIO_OfxGroup_SECID_FreeData); /* set virtual functions */ AIO_OfxGroup_SetStartTagFn(g, AIO_OfxGroup_SECID_StartTag); AIO_OfxGroup_SetAddDataFn(g, AIO_OfxGroup_SECID_AddData); return g; } GWENHYWFAR_CB void AIO_OfxGroup_SECID_FreeData(void *bp, void *p) { AIO_OFX_GROUP_SECID *xg; xg=(AIO_OFX_GROUP_SECID *)p; assert(xg); free(xg->currentElement); free(xg->uniqueId); free(xg->nameSpace); GWEN_FREE_OBJECT(xg); } const char *AIO_OfxGroup_SECID_GetUniqueId(const AIO_OFX_GROUP *g) { AIO_OFX_GROUP_SECID *xg; assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_SECID, g); assert(xg); return xg->uniqueId; } void AIO_OfxGroup_SECID_SetUniqueId(AIO_OFX_GROUP *g, const char *s) { AIO_OFX_GROUP_SECID *xg; assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_SECID, g); assert(xg); free(xg->uniqueId); if (s) xg->uniqueId=strdup(s); else xg->uniqueId=NULL; } const char *AIO_OfxGroup_SECID_GetNameSpace(const AIO_OFX_GROUP *g) { AIO_OFX_GROUP_SECID *xg; assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_SECID, g); assert(xg); return xg->nameSpace; } void AIO_OfxGroup_SECID_SetNameSpace(AIO_OFX_GROUP *g, const char *s) { AIO_OFX_GROUP_SECID *xg; assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_SECID, g); assert(xg); free(xg->nameSpace); if (s) xg->nameSpace=strdup(s); else xg->nameSpace=NULL; } int AIO_OfxGroup_SECID_StartTag(AIO_OFX_GROUP *g, const char *tagName) { AIO_OFX_GROUP_SECID *xg; assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_SECID, g); assert(xg); free(xg->currentElement); xg->currentElement=NULL; if (strcasecmp(tagName, "UNIQUEID")==0 || strcasecmp(tagName, "UNIQUEIDTYPE")==0) { xg->currentElement=strdup(tagName); } else { DBG_WARN(AQBANKING_LOGDOMAIN, "Ignoring tag [%s]", tagName); } return 0; } int AIO_OfxGroup_SECID_AddData(AIO_OFX_GROUP *g, const char *data) { AIO_OFX_GROUP_SECID *xg; assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_SECID, g); assert(xg); if (xg->currentElement) { GWEN_BUFFER *buf; int rv; const char *s; buf=GWEN_Buffer_new(0, strlen(data), 0, 1); rv=AIO_OfxXmlCtx_SanitizeData(AIO_OfxGroup_GetXmlContext(g), data, buf); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(buf); return rv; } s=GWEN_Buffer_GetStart(buf); if (*s) { DBG_INFO(AQBANKING_LOGDOMAIN, "AddData: %s=[%s]", xg->currentElement, s); if (strcasecmp(xg->currentElement, "UNIQUEID")==0) AIO_OfxGroup_SECID_SetUniqueId(g, GWEN_Buffer_GetStart(buf)); else if (strcasecmp(xg->currentElement, "UNIQUEIDTYPE")==0) AIO_OfxGroup_SECID_SetNameSpace(g, GWEN_Buffer_GetStart(buf)); else { DBG_INFO(AQBANKING_LOGDOMAIN, "Ignoring data for unknown element [%s]", xg->currentElement); } } GWEN_Buffer_free(buf); } return 0; } AB_TRANSACTION *AIO_OfxGroup_SECID_TakeData(const AIO_OFX_GROUP *g) { AIO_OFX_GROUP_SECID *xg; AB_TRANSACTION *t; assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_SECID, g); assert(xg); t=xg->transaction; xg->transaction=NULL; return t; } aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_invstmttrnrs.c0000664000175000017500000000557214043610745023540 00000000000000/*************************************************************************** begin : Mon Jan 07 2008 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de comments :Stephen R. Besch email :sbesch@acsu.buffalo.edu *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "g_invstmttrnrs_p.h" #include "ofxxmlctx_l.h" #include "g_generic_l.h" #include "g_ignore_l.h" #include "g_status_l.h" #include "g_invstmtrs_l.h" #include "aqbanking/i18n_l.h" #include #include /*This code parallels the code in g_stmttrnrs. Since there are no data items that we are interested in, we only need to deal with sub-group creation. Hence there is only a virtual function for filtering start tags.*/ AIO_OFX_GROUP *AIO_OfxGroup_INVSTMTTRNRS_new(const char *groupName, AIO_OFX_GROUP *parent, GWEN_XML_CONTEXT *ctx) { AIO_OFX_GROUP *g; /* create base group */ g=AIO_OfxGroup_Generic_new(groupName, parent, ctx); assert(g); /* set virtual functions */ AIO_OfxGroup_SetStartTagFn(g, AIO_OfxGroup_INVSTMTTRNRS_StartTag); return g; } /*There are 4 data items and subgroups here. We are only interested in the STATUS and INVSTMTRS groups. The TRNUID and CLTCOOKIE datums are ignored.*/ int AIO_OfxGroup_INVSTMTTRNRS_StartTag(AIO_OFX_GROUP *g, const char *tagName) { AIO_OFX_GROUP *gNew=NULL; GWEN_XML_CONTEXT *ctx; assert(g); ctx=AIO_OfxGroup_GetXmlContext(g); /*If this is a STATUS subgroup, define it*/ if (strcasecmp(tagName, "STATUS")==0) { gNew=AIO_OfxGroup_STATUS_new(tagName, g, ctx, I18N("Status for investment transaction statement request")); } /*Or, if it's the TRNUID or CLTCOOKIE data, just ignore them. These are really easy since no subgroup Ignore trap is needed.*/ else if (strcasecmp(tagName, "TRNUID")==0 || strcasecmp(tagName, "CLTCOOKIE")==0) { /* some tags, just ignore them here */ } /*If this is the Investment Statement Request, define it's subgroup*/ else if (strcasecmp(tagName, "INVSTMTRS")==0) { gNew=AIO_OfxGroup_INVSTMTRS_new(tagName, g, ctx); } /*All other sub-groups pass on to the ignore trap.*/ else { DBG_WARN(AQBANKING_LOGDOMAIN, "Ignoring group [%s]", tagName); gNew=AIO_OfxGroup_Ignore_new(tagName, g, ctx); } /*If we really made up a new group, put it in to the context. Do nothing if this was a data tag.*/ if (gNew) { AIO_OfxXmlCtx_SetCurrentGroup(ctx, gNew); GWEN_XmlCtx_IncDepth(ctx); } return 0; } aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_acctinfotrnrs_p.h0000664000175000017500000000127714043610745024144 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Mon Jan 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AIO_OFX_G_ACCTINFOTRNRS_P_H #define AIO_OFX_G_ACCTINFOTRNRS_P_H #include "g_acctinfotrnrs_l.h" static int AIO_OfxGroup_ACCTINFOTRNRS_StartTag(AIO_OFX_GROUP *g, const char *tagName); #endif aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_secid_l.h0000664000175000017500000000220514043610745022340 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Mon Jan 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de copyright : (C) 2013 by Paul Conrady email : c.p.conrady@gmail.com *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AIO_OFX_G_SECID_L_H #define AIO_OFX_G_SECID_L_H #include "ofxgroup_l.h" AIO_OFX_GROUP *AIO_OfxGroup_SECID_new(const char *groupName, AIO_OFX_GROUP *parent, GWEN_XML_CONTEXT *ctx); const char *AIO_OfxGroup_SECID_GetUniqueId(const AIO_OFX_GROUP *g); void AIO_OfxGroup_SECID_SetUniqueId(AIO_OFX_GROUP *g, const char *s); const char *AIO_OfxGroup_SECID_GetNameSpace(const AIO_OFX_GROUP *g); void AIO_OfxGroup_SECID_SetNameSpace(AIO_OFX_GROUP *g, const char *s); AB_TRANSACTION *AIO_OfxGroup_SECID_TakeData(const AIO_OFX_GROUP *g); #endif aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_banktranlist.c0000664000175000017500000001150314043610745023426 00000000000000/*************************************************************************** begin : Mon Jan 07 2008 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "g_banktranlist_p.h" #include "ofxxmlctx_l.h" #include "aqbanking/i18n_l.h" #include "g_generic_l.h" #include "g_ignore_l.h" #include "g_bankacc_l.h" #include "g_stmtrn_l.h" #include #include #include #include GWEN_INHERIT(AIO_OFX_GROUP, AIO_OFX_GROUP_BANKTRANLIST) AIO_OFX_GROUP *AIO_OfxGroup_BANKTRANLIST_new(const char *groupName, AIO_OFX_GROUP *parent, GWEN_XML_CONTEXT *ctx) { AIO_OFX_GROUP *g; AIO_OFX_GROUP_BANKTRANLIST *xg; /* create base group */ g=AIO_OfxGroup_Generic_new(groupName, parent, ctx); assert(g); GWEN_NEW_OBJECT(AIO_OFX_GROUP_BANKTRANLIST, xg); assert(xg); GWEN_INHERIT_SETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_BANKTRANLIST, g, xg, AIO_OfxGroup_BANKTRANLIST_FreeData); xg->transactionList=AB_Transaction_List2_new(); /* set virtual functions */ AIO_OfxGroup_SetStartTagFn(g, AIO_OfxGroup_BANKTRANLIST_StartTag); AIO_OfxGroup_SetAddDataFn(g, AIO_OfxGroup_BANKTRANLIST_AddData); AIO_OfxGroup_SetEndSubGroupFn(g, AIO_OfxGroup_BANKTRANLIST_EndSubGroup); return g; } GWENHYWFAR_CB void AIO_OfxGroup_BANKTRANLIST_FreeData(void *bp, void *p) { AIO_OFX_GROUP_BANKTRANLIST *xg; xg=(AIO_OFX_GROUP_BANKTRANLIST *)p; assert(xg); AB_Transaction_List2_freeAll(xg->transactionList); free(xg->currentElement); GWEN_FREE_OBJECT(xg); } AB_TRANSACTION_LIST2 *AIO_OfxGroup_BANKTRANLIST_TakeTransactionList(const AIO_OFX_GROUP *g) { AIO_OFX_GROUP_BANKTRANLIST *xg; AB_TRANSACTION_LIST2 *tl; assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_BANKTRANLIST, g); assert(xg); tl=xg->transactionList; xg->transactionList=NULL; return tl; } int AIO_OfxGroup_BANKTRANLIST_StartTag(AIO_OFX_GROUP *g, const char *tagName) { AIO_OFX_GROUP_BANKTRANLIST *xg; GWEN_XML_CONTEXT *ctx; AIO_OFX_GROUP *gNew=NULL; assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_BANKTRANLIST, g); assert(xg); ctx=AIO_OfxGroup_GetXmlContext(g); if (strcasecmp(tagName, "DTSTART")==0 || strcasecmp(tagName, "DTEND")==0) { free(xg->currentElement); xg->currentElement=strdup(tagName); } else if (strcasecmp(tagName, "STMTTRN")==0) { gNew=AIO_OfxGroup_STMTRN_new(tagName, g, ctx); } else { DBG_WARN(AQBANKING_LOGDOMAIN, "Ignoring group [%s]", tagName); gNew=AIO_OfxGroup_Ignore_new(tagName, g, ctx); } if (gNew) { AIO_OfxXmlCtx_SetCurrentGroup(ctx, gNew); GWEN_XmlCtx_IncDepth(ctx); } return 0; } int AIO_OfxGroup_BANKTRANLIST_AddData(AIO_OFX_GROUP *g, const char *data) { AIO_OFX_GROUP_BANKTRANLIST *xg; assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_BANKTRANLIST, g); assert(xg); if (xg->currentElement) { GWEN_BUFFER *buf; int rv; const char *s; buf=GWEN_Buffer_new(0, strlen(data), 0, 1); rv=AIO_OfxXmlCtx_SanitizeData(AIO_OfxGroup_GetXmlContext(g), data, buf); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(buf); return rv; } s=GWEN_Buffer_GetStart(buf); if (*s) { DBG_INFO(AQBANKING_LOGDOMAIN, "AddData: %s=[%s]", xg->currentElement, s); if (strcasecmp(xg->currentElement, "DTSTART")==0) { free(xg->dtstart); xg->dtstart=strdup(s); } else if (strcasecmp(xg->currentElement, "DTEND")==0) { free(xg->dtend); xg->dtend=strdup(s); } else { DBG_INFO(AQBANKING_LOGDOMAIN, "Ignoring data for unknown element [%s]", xg->currentElement); } } GWEN_Buffer_free(buf); } return 0; } int AIO_OfxGroup_BANKTRANLIST_EndSubGroup(AIO_OFX_GROUP *g, AIO_OFX_GROUP *sg) { AIO_OFX_GROUP_BANKTRANLIST *xg; const char *s; GWEN_XML_CONTEXT *ctx; assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_BANKTRANLIST, g); assert(xg); ctx=AIO_OfxGroup_GetXmlContext(g); assert(ctx); s=AIO_OfxGroup_GetGroupName(sg); if (strcasecmp(s, "STMTTRN")==0) { AB_TRANSACTION *t; t=AIO_OfxGroup_STMTRN_TakeTransaction(sg); if (t) { DBG_INFO(AQBANKING_LOGDOMAIN, "Adding transaction"); AB_Transaction_List2_PushBack(xg->transactionList, t); } } return 0; } aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_posstock_p.h0000664000175000017500000000144714043610745023131 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Mon Jan 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AIO_OFX_G_POSSTOCK_P_H #define AIO_OFX_G_POSSTOCK_P_H #include "g_posstock_l.h" static int AIO_OfxGroup_POSSTOCK_StartTag(AIO_OFX_GROUP *g, const char *tagName); static int AIO_OfxGroup_POSSTOCK_EndSubGroup(AIO_OFX_GROUP *g, AIO_OFX_GROUP *sg); #endif aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_ignore_l.h0000664000175000017500000000134014043610745022533 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Mon Jan 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AIO_OFX_G_IGNORE_L_H #define AIO_OFX_G_IGNORE_L_H #include "ofxgroup_l.h" AIO_OFX_GROUP *AIO_OfxGroup_Ignore_new(const char *groupName, AIO_OFX_GROUP *parent, GWEN_XML_CONTEXT *ctx); #endif aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_stmttrnrs_l.h0000664000175000017500000000135714043610745023340 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Mon Jan 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AIO_OFX_G_STMTTRNRS_L_H #define AIO_OFX_G_STMTTRNRS_L_H #include "ofxgroup_l.h" AIO_OFX_GROUP *AIO_OfxGroup_STMTTRNRS_new(const char *groupName, AIO_OFX_GROUP *parent, GWEN_XML_CONTEXT *ctx); #endif aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_invstmttrnrs_p.h0000664000175000017500000000127214043610745024055 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Mon Jan 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AIO_OFX_G_INVSTMTTRNRS_P_H #define AIO_OFX_G_INVSTMTTRNRS_P_H #include "g_invstmttrnrs_l.h" static int AIO_OfxGroup_INVSTMTTRNRS_StartTag(AIO_OFX_GROUP *g, const char *tagName); #endif aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_stmtrs_l.h0000664000175000017500000000134014043610745022604 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Mon Jan 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AIO_OFX_G_STMTRS_L_H #define AIO_OFX_G_STMTRS_L_H #include "ofxgroup_l.h" AIO_OFX_GROUP *AIO_OfxGroup_STMTRS_new(const char *groupName, AIO_OFX_GROUP *parent, GWEN_XML_CONTEXT *ctx); #endif aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_invtranlist_p.h0000664000175000017500000000244214043610745023635 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Mon Jan 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de begin : Fri Apr 17 2009 copyright : (C) 2009 by Stephen R. Besch email : sbesch@buffalo.edu begin : Sat May 18 2013 copyright : (C) 2013 by Paul Conrady email : c.p.conrady@gmail.com *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AIO_OFX_G_INVTRANLIST_P_H #define AIO_OFX_G_INVTRANLIST_P_H #include "g_invtranlist_l.h" typedef struct AIO_OFX_GROUP_INVTRANLIST AIO_OFX_GROUP_INVTRANLIST; struct AIO_OFX_GROUP_INVTRANLIST { char *currentElement; char *dtstart; char *dtend; AB_TRANSACTION_LIST2 *transactionList; }; static void GWENHYWFAR_CB AIO_OfxGroup_INVTRANLIST_FreeData(void *bp, void *p); static int AIO_OfxGroup_INVTRANLIST_StartTag(AIO_OFX_GROUP *g, const char *tagName); static int AIO_OfxGroup_INVTRANLIST_EndSubGroup(AIO_OFX_GROUP *g, AIO_OFX_GROUP *sg); static int AIO_OfxGroup_INVTRANLIST_AddData(AIO_OFX_GROUP *g, const char *data); #endif aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_creditcardmsgsrsv1_p.h0000664000175000017500000000133014043610745025065 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Mon Jan 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AIO_OFX_G_CREDITCARDMSGSRSV1_P_H #define AIO_OFX_G_CREDITCARDMSGSRSV1_P_H #include "g_creditcardmsgsrsv1_l.h" static int AIO_OfxGroup_CREDITCARDMSGSRSV1_StartTag(AIO_OFX_GROUP *g, const char *tagName); #endif aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_signupmsgsrsv1_l.h0000664000175000017500000000141014043610745024261 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Mon Jan 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AIO_OFX_G_SIGNUPMSGSRSV1_L_H #define AIO_OFX_G_SIGNUPMSGSRSV1_L_H #include "ofxgroup_l.h" AIO_OFX_GROUP *AIO_OfxGroup_SIGNUPMSGSRSV1_new(const char *groupName, AIO_OFX_GROUP *parent, GWEN_XML_CONTEXT *ctx); #endif aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_ofx.c0000664000175000017500000000446514043610745021537 00000000000000/*************************************************************************** begin : Mon Jan 07 2008 copyright : (C) 2008, 2012 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "g_ofx_p.h" #include "ofxxmlctx_l.h" #include "g_generic_l.h" #include "g_ignore_l.h" #include "g_signonmsgsrsv1_l.h" #include "g_bankmsgsrsv1_l.h" #include "g_creditcardmsgsrsv1_l.h" #include "g_signupmsgsrsv1_l.h" #include "g_invstmtmsgsrsv1_l.h" #include "g_seclistmsgsrsv1_l.h" #include #include AIO_OFX_GROUP *AIO_OfxGroup_OFX_new(const char *groupName, AIO_OFX_GROUP *parent, GWEN_XML_CONTEXT *ctx) { AIO_OFX_GROUP *g; /* create base group */ g=AIO_OfxGroup_Generic_new(groupName, parent, ctx); assert(g); /* set virtual functions */ AIO_OfxGroup_SetStartTagFn(g, AIO_OfxGroup_OFX_StartTag); return g; } int AIO_OfxGroup_OFX_StartTag(AIO_OFX_GROUP *g, const char *tagName) { AIO_OFX_GROUP *gNew=NULL; GWEN_XML_CONTEXT *ctx; assert(g); ctx=AIO_OfxGroup_GetXmlContext(g); if (strcasecmp(tagName, "SIGNONMSGSRSV1")==0) gNew=AIO_OfxGroup_SIGNONMSGSRSV1_new(tagName, g, ctx); else if (strcasecmp(tagName, "BANKMSGSRSV1")==0) { gNew=AIO_OfxGroup_BANKMSGSRSV1_new(tagName, g, ctx); } else if (strcasecmp(tagName, "CREDITCARDMSGSRSV1")==0) { gNew=AIO_OfxGroup_CREDITCARDMSGSRSV1_new(tagName, g, ctx); } else if (strcasecmp(tagName, "SIGNUPMSGSRSV1")==0) gNew=AIO_OfxGroup_SIGNUPMSGSRSV1_new(tagName, g, ctx); else if (strcasecmp(tagName, "INVSTMTMSGSRSV1")==0) gNew=AIO_OfxGroup_INVSTMTMSGSRSV1_new(tagName, g, ctx); else if (strcasecmp(tagName, "SECLISTMSGSRSV1")==0) gNew=AIO_OfxGroup_SECLISTMSGSRSV1_new(tagName, g, ctx); else { DBG_WARN(AQBANKING_LOGDOMAIN, "Ignoring group [%s]", tagName); gNew=AIO_OfxGroup_Ignore_new(tagName, g, ctx); } if (gNew) { AIO_OfxXmlCtx_SetCurrentGroup(ctx, gNew); GWEN_XmlCtx_IncDepth(ctx); } return 0; } aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_stmtrn_p.h0000664000175000017500000000200514043610745022602 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Mon Jan 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AIO_OFX_G_STMTRN_P_H #define AIO_OFX_G_STMTRN_P_H #include "g_stmtrn_l.h" typedef struct AIO_OFX_GROUP_STMTRN AIO_OFX_GROUP_STMTRN; struct AIO_OFX_GROUP_STMTRN { char *currentElement; char *currency; AB_TRANSACTION *transaction; }; static void GWENHYWFAR_CB AIO_OfxGroup_STMTRN_FreeData(void *bp, void *p); static int AIO_OfxGroup_STMTRN_StartTag(AIO_OFX_GROUP *g, const char *tagName); static int AIO_OfxGroup_STMTRN_EndSubGroup(AIO_OFX_GROUP *g, AIO_OFX_GROUP *sg); static int AIO_OfxGroup_STMTRN_AddData(AIO_OFX_GROUP *g, const char *data); #endif aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_ofx_p.h0000664000175000017500000000115014043610745022047 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Mon Jan 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AIO_OFX_G_OFX_P_H #define AIO_OFX_G_OFX_P_H #include "g_ofx_l.h" static int AIO_OfxGroup_OFX_StartTag(AIO_OFX_GROUP *g, const char *tagName); #endif aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_posmf.c0000664000175000017500000000450114043610745022056 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Mon Jan 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de copyright : (C) 2013 by Paul Conrady email : c.p.conrady@gmail.com *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "g_posmf_p.h" #include "ofxxmlctx_l.h" #include "g_generic_l.h" #include "g_ignore_l.h" #include "g_invpos_l.h" #include #include #include AIO_OFX_GROUP *AIO_OfxGroup_POSMF_new(const char *groupName, AIO_OFX_GROUP *parent, GWEN_XML_CONTEXT *ctx) { AIO_OFX_GROUP *g; /* create base group */ g=AIO_OfxGroup_Generic_new(groupName, parent, ctx); assert(g); /* set virtual functions */ AIO_OfxGroup_SetStartTagFn(g, AIO_OfxGroup_POSMF_StartTag); AIO_OfxGroup_SetEndSubGroupFn(g, AIO_OfxGroup_POSMF_EndSubGroup); return g; } int AIO_OfxGroup_POSMF_StartTag(AIO_OFX_GROUP *g, const char *tagName) { AIO_OFX_GROUP *gNew=NULL; GWEN_XML_CONTEXT *ctx; assert(g); ctx=AIO_OfxGroup_GetXmlContext(g); if (strcasecmp(tagName, "INVPOS")==0) { gNew=AIO_OfxGroup_INVPOS_new(tagName, g, ctx); } else { DBG_WARN(AQBANKING_LOGDOMAIN, "Ignoring group [%s]", tagName); gNew=AIO_OfxGroup_Ignore_new(tagName, g, ctx); } if (gNew) { AIO_OfxXmlCtx_SetCurrentGroup(ctx, gNew); GWEN_XmlCtx_IncDepth(ctx); } return 0; } int AIO_OfxGroup_POSMF_EndSubGroup(AIO_OFX_GROUP *g, AIO_OFX_GROUP *sg) { const char *s; GWEN_XML_CONTEXT *ctx; ctx=AIO_OfxGroup_GetXmlContext(g); s=AIO_OfxGroup_GetGroupName(sg); if (strcasecmp(s, "INVPOS")==0) { AB_SECURITY *sec; sec=AIO_OfxGroup_INVPOS_TakeSecurity(sg); if (sec) { AB_IMEXPORTER_CONTEXT *ioCtx; ioCtx=AIO_OfxXmlCtx_GetIoContext(ctx); DBG_INFO(AQBANKING_LOGDOMAIN, "Adding security"); AB_ImExporterContext_AddSecurity(ioCtx, sec); } } return 0; } aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_generic.c0000664000175000017500000000520214043610745022345 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Mon Jan 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "g_generic_p.h" #include "ofxxmlctx_l.h" #include #include AIO_OFX_GROUP *AIO_OfxGroup_Generic_new(const char *groupName, AIO_OFX_GROUP *parent, GWEN_XML_CONTEXT *ctx) { AIO_OFX_GROUP *g; /* create base group */ g=AIO_OfxGroup_new(groupName, parent, ctx); assert(g); /* set virtual functions */ AIO_OfxGroup_SetEndTagFn(g, AIO_OfxGroup_Generic_EndTag); AIO_OfxGroup_SetAddDataFn(g, AIO_OfxGroup_Generic_AddData); AIO_OfxGroup_SetEndSubGroupFn(g, AIO_OfxGroup_Generic_EndSubGroup); return g; } int AIO_OfxGroup_Generic_EndTag(AIO_OFX_GROUP *g, const char *tagName) { assert(g); if (strcasecmp(AIO_OfxGroup_GetGroupName(g), tagName)!=0) { DBG_INFO(AQBANKING_LOGDOMAIN, "Tag [%s] does not close [%s], ignoring", tagName, AIO_OfxGroup_GetGroupName(g)); /*return GWEN_ERROR_BAD_DATA;*/ return 0; } /* always end this tag */ return 1; } int AIO_OfxGroup_Generic_AddData(AIO_OFX_GROUP *g, const char *data) { assert(g); /* just ignore the data */ return 0; } int AIO_OfxGroup_Generic_EndSubGroup(AIO_OFX_GROUP *g, AIO_OFX_GROUP *sg) { assert(g); /* just ignore the end of sub group */ return 0; } AB_ACCOUNT_TYPE AIO_OfxGroup_Generic_AccountTypeFromString(const char *s) { AB_ACCOUNT_TYPE t; if (strcasecmp(s, "CHECKING")==0) t=AB_AccountType_Checking; else if (strcasecmp(s, "SAVINGS")==0) t=AB_AccountType_Savings; else if (strcasecmp(s, "MONEYMRKT")==0) t=AB_AccountType_MoneyMarket; else if (strcasecmp(s, "INVESTMENT")==0) t=AB_AccountType_Investment; /*INVESTMENT String added by SRB 4/23/09*/ else if (strcasecmp(s, "CREDITLINE")==0) t=AB_AccountType_Bank; else if (strcasecmp(s, "BANK")==0) /* not a real code */ t=AB_AccountType_Bank; else if (strcasecmp(s, "CREDITCARD")==0) /* not a real code */ t=AB_AccountType_CreditCard; else { DBG_WARN(AQBANKING_LOGDOMAIN, "Unknown account type [%s], assuming bank account", s); t=AB_AccountType_Bank; } return t; } aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_stockinfo_p.h0000664000175000017500000000130714043610745023256 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Mon Jan 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AIO_OFX_G_STOCKINFO_P_H #define AIO_OFX_G_STOCKINFO_P_H #include "g_stockinfo_l.h" int AIO_OfxGroup_STOCKINFO_StartTag(AIO_OFX_GROUP *g, const char *tagName); int AIO_OfxGroup_STOCKINFO_EndSubGroup(AIO_OFX_GROUP *g, AIO_OFX_GROUP *sg); #endif aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_acctinfotrnrs.c0000664000175000017500000000403414043610745023612 00000000000000/*************************************************************************** begin : Mon Jan 07 2008 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "g_acctinfotrnrs_p.h" #include "ofxxmlctx_l.h" #include "g_generic_l.h" #include "g_ignore_l.h" #include "g_status_l.h" #include "g_acctinfors_l.h" #include "aqbanking/i18n_l.h" #include #include AIO_OFX_GROUP *AIO_OfxGroup_ACCTINFOTRNRS_new(const char *groupName, AIO_OFX_GROUP *parent, GWEN_XML_CONTEXT *ctx) { AIO_OFX_GROUP *g; /* create base group */ g=AIO_OfxGroup_Generic_new(groupName, parent, ctx); assert(g); /* set virtual functions */ AIO_OfxGroup_SetStartTagFn(g, AIO_OfxGroup_ACCTINFOTRNRS_StartTag); return g; } int AIO_OfxGroup_ACCTINFOTRNRS_StartTag(AIO_OFX_GROUP *g, const char *tagName) { AIO_OFX_GROUP *gNew=NULL; GWEN_XML_CONTEXT *ctx; assert(g); ctx=AIO_OfxGroup_GetXmlContext(g); if (strcasecmp(tagName, "STATUS")==0) { gNew=AIO_OfxGroup_STATUS_new(tagName, g, ctx, I18N("Status for account info request")); } else if (strcasecmp(tagName, "TRNUID")==0 || strcasecmp(tagName, "CLTCOOKIE")==0) { /* some tags, just ignore them here */ } else if (strcasecmp(tagName, "ACCTINFORS")==0) { gNew=AIO_OfxGroup_ACCTINFORS_new(tagName, g, ctx); } else { DBG_WARN(AQBANKING_LOGDOMAIN, "Ignoring group [%s]", tagName); gNew=AIO_OfxGroup_Ignore_new(tagName, g, ctx); } if (gNew) { AIO_OfxXmlCtx_SetCurrentGroup(ctx, gNew); GWEN_XmlCtx_IncDepth(ctx); } return 0; } aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_seclist_l.h0000664000175000017500000000134514043610745022723 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Mon Jan 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AIO_OFX_G_SECLIST_L_H #define AIO_OFX_G_SECLIST_L_H #include "ofxgroup_l.h" AIO_OFX_GROUP *AIO_OfxGroup_SECLIST_new(const char *groupName, AIO_OFX_GROUP *parent, GWEN_XML_CONTEXT *ctx); #endif aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_invpos_p.h0000664000175000017500000000177714043610745022610 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Mon Jan 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AIO_OFX_G_INVPOS_P_H #define AIO_OFX_G_INVPOS_P_H #include "g_invpos_l.h" typedef struct AIO_OFX_GROUP_INVPOS AIO_OFX_GROUP_INVPOS; struct AIO_OFX_GROUP_INVPOS { char *currentElement; char *currency; AB_SECURITY *security; }; static void GWENHYWFAR_CB AIO_OfxGroup_INVPOS_FreeData(void *bp, void *p); static int AIO_OfxGroup_INVPOS_StartTag(AIO_OFX_GROUP *g, const char *tagName); static int AIO_OfxGroup_INVPOS_EndSubGroup(AIO_OFX_GROUP *g, AIO_OFX_GROUP *sg); static int AIO_OfxGroup_INVPOS_AddData(AIO_OFX_GROUP *g, const char *data); #endif aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_secinfo_p.h0000664000175000017500000000212014043610745022677 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Mon Jan 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AIO_OFX_G_SECINFO_P_H #define AIO_OFX_G_SECINFO_P_H #include "g_secinfo_l.h" typedef struct AIO_OFX_GROUP_SECINFO AIO_OFX_GROUP_SECINFO; struct AIO_OFX_GROUP_SECINFO { char *secname; char *ticker; char *uniqueId; char *nameSpace; char *currentElement; }; static void GWENHYWFAR_CB AIO_OfxGroup_SECINFO_FreeData(void *bp, void *p); static int AIO_OfxGroup_SECINFO_StartTag(AIO_OFX_GROUP *g, const char *tagName); static int AIO_OfxGroup_SECINFO_AddData(AIO_OFX_GROUP *g, const char *data); static int AIO_OfxGroup_SECINFO_EndSubGroup(AIO_OFX_GROUP *g, AIO_OFX_GROUP *sg); #endif aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/ofxgroup_l.h0000664000175000017500000000465414043610745022626 00000000000000/*************************************************************************** begin : Mon Jan 07 2008 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AIO_OFX_OFXGROUP_L_H #define AIO_OFX_OFXGROUP_L_H #include #include #include typedef struct AIO_OFX_GROUP AIO_OFX_GROUP; GWEN_INHERIT_FUNCTION_DEFS(AIO_OFX_GROUP) typedef int (*AIO_OFX_GROUP_STARTTAG_FN)(AIO_OFX_GROUP *g, const char *tagName); typedef int (*AIO_OFX_GROUP_ENDTAG_FN)(AIO_OFX_GROUP *g, const char *tagName); typedef int (*AIO_OFX_GROUP_ADDDATA_FN)(AIO_OFX_GROUP *g, const char *data); typedef int (*AIO_OFX_GROUP_ENDSUBGROUP_FN)(AIO_OFX_GROUP *g, AIO_OFX_GROUP *sg); AIO_OFX_GROUP *AIO_OfxGroup_new(const char *groupName, AIO_OFX_GROUP *parent, GWEN_XML_CONTEXT *ctx); void AIO_OfxGroup_free(AIO_OFX_GROUP *g); AIO_OFX_GROUP *AIO_OfxGroup_GetParent(const AIO_OFX_GROUP *g); GWEN_XML_CONTEXT *AIO_OfxGroup_GetXmlContext(const AIO_OFX_GROUP *g); const char *AIO_OfxGroup_GetGroupName(const AIO_OFX_GROUP *g); AIO_OFX_GROUP_STARTTAG_FN AIO_OfxGroup_SetStartTagFn(AIO_OFX_GROUP *g, AIO_OFX_GROUP_STARTTAG_FN f); AIO_OFX_GROUP_ENDTAG_FN AIO_OfxGroup_SetEndTagFn(AIO_OFX_GROUP *g, AIO_OFX_GROUP_ENDTAG_FN f); AIO_OFX_GROUP_ADDDATA_FN AIO_OfxGroup_SetAddDataFn(AIO_OFX_GROUP *g, AIO_OFX_GROUP_ADDDATA_FN f); AIO_OFX_GROUP_ENDSUBGROUP_FN AIO_OfxGroup_SetEndSubGroupFn(AIO_OFX_GROUP *g, AIO_OFX_GROUP_ENDSUBGROUP_FN f); int AIO_OfxGroup_StartTag(AIO_OFX_GROUP *g, const char *tagName); /** * @return 1 if this tag ends the current group, 0 otherwise (<0 on error) */ int AIO_OfxGroup_EndTag(AIO_OFX_GROUP *g, const char *tagName); int AIO_OfxGroup_AddData(AIO_OFX_GROUP *g, const char *data); int AIO_OfxGroup_EndSubGroup(AIO_OFX_GROUP *g, AIO_OFX_GROUP *sg); #endif aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_acctinfors.c0000664000175000017500000000633714043610745023076 00000000000000/*************************************************************************** begin : Mon Jan 07 2008 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "g_acctinfors_p.h" #include "ofxxmlctx_l.h" #include "aqbanking/i18n_l.h" #include "g_generic_l.h" #include "g_ignore_l.h" #include "g_acctinfo_l.h" #include #include #include #include AIO_OFX_GROUP *AIO_OfxGroup_ACCTINFORS_new(const char *groupName, AIO_OFX_GROUP *parent, GWEN_XML_CONTEXT *ctx) { AIO_OFX_GROUP *g; /* create base group */ g=AIO_OfxGroup_Generic_new(groupName, parent, ctx); assert(g); /* set virtual functions */ AIO_OfxGroup_SetStartTagFn(g, AIO_OfxGroup_ACCTINFORS_StartTag); AIO_OfxGroup_SetEndSubGroupFn(g, AIO_OfxGroup_ACCTINFORS_EndSubGroup); return g; } int AIO_OfxGroup_ACCTINFORS_StartTag(AIO_OFX_GROUP *g, const char *tagName) { GWEN_XML_CONTEXT *ctx; AIO_OFX_GROUP *gNew=NULL; assert(g); ctx=AIO_OfxGroup_GetXmlContext(g); if (strcasecmp(tagName, "ACCTINFO")==0) { gNew=AIO_OfxGroup_ACCTINFO_new(tagName, g, ctx); } else if (strcasecmp(tagName, "DTACCTUP")==0) { /* ignore */ } else if (strcasecmp(tagName, "ESP.XREGION")==0) { /* ignore */ } else { DBG_WARN(AQBANKING_LOGDOMAIN, "Ignoring group [%s]", tagName); gNew=AIO_OfxGroup_Ignore_new(tagName, g, ctx); } if (gNew) { AIO_OfxXmlCtx_SetCurrentGroup(ctx, gNew); GWEN_XmlCtx_IncDepth(ctx); } return 0; } int AIO_OfxGroup_ACCTINFORS_EndSubGroup(AIO_OFX_GROUP *g, AIO_OFX_GROUP *sg) { const char *s; GWEN_XML_CONTEXT *ctx; assert(g); ctx=AIO_OfxGroup_GetXmlContext(g); assert(ctx); s=AIO_OfxGroup_GetGroupName(sg); if (strcasecmp(s, "ACCTINFO")==0) { AB_IMEXPORTER_ACCOUNTINFO *ai; const char *s; DBG_INFO(AQBANKING_LOGDOMAIN, "Importing account %s/%s", AIO_OfxGroup_ACCTINFO_GetBankId(sg), AIO_OfxGroup_ACCTINFO_GetAccId(sg)); ai=AB_ImExporterAccountInfo_new(); assert(ai); s=AIO_OfxGroup_ACCTINFO_GetBankId(sg); if (s) AB_ImExporterAccountInfo_SetBankCode(ai, s); s=AIO_OfxGroup_ACCTINFO_GetAccId(sg); if (s) AB_ImExporterAccountInfo_SetAccountNumber(ai, s); s=AIO_OfxGroup_ACCTINFO_GetAccDescr(sg); if (s) AB_ImExporterAccountInfo_SetAccountName(ai, s); /* set account type, if known */ s=AIO_OfxGroup_ACCTINFO_GetAccType(sg); if (!s) s="BANK"; /* not a real code */ if (s) { AB_ACCOUNT_TYPE t; t=AIO_OfxGroup_Generic_AccountTypeFromString(s); AB_ImExporterAccountInfo_SetAccountType(ai, t); } DBG_INFO(AQBANKING_LOGDOMAIN, "Adding account"); AB_ImExporterContext_AddAccountInfo(AIO_OfxXmlCtx_GetIoContext(ctx), ai); } return 0; } aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_document_p.h0000664000175000017500000000131214043610745023071 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Mon Jan 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AIO_OFX_G_DOCUMENT_P_H #define AIO_OFX_G_DOCUMENT_P_H #include "g_document_l.h" static int AIO_OfxGroup_Document_StartTag(AIO_OFX_GROUP *g, const char *tagName); static int AIO_OfxGroup_Document_AddData(AIO_OFX_GROUP *g, const char *data); #endif aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_posstock.c0000664000175000017500000000441614043610745022604 00000000000000/*************************************************************************** begin : Mon Jan 07 2008 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "g_posstock_p.h" #include "ofxxmlctx_l.h" #include "g_generic_l.h" #include "g_ignore_l.h" #include "g_invpos_l.h" #include "aqbanking/i18n_l.h" #include #include #include AIO_OFX_GROUP *AIO_OfxGroup_POSSTOCK_new(const char *groupName, AIO_OFX_GROUP *parent, GWEN_XML_CONTEXT *ctx) { AIO_OFX_GROUP *g; /* create base group */ g=AIO_OfxGroup_Generic_new(groupName, parent, ctx); assert(g); /* set virtual functions */ AIO_OfxGroup_SetStartTagFn(g, AIO_OfxGroup_POSSTOCK_StartTag); AIO_OfxGroup_SetEndSubGroupFn(g, AIO_OfxGroup_POSSTOCK_EndSubGroup); return g; } int AIO_OfxGroup_POSSTOCK_StartTag(AIO_OFX_GROUP *g, const char *tagName) { AIO_OFX_GROUP *gNew=NULL; GWEN_XML_CONTEXT *ctx; assert(g); ctx=AIO_OfxGroup_GetXmlContext(g); if (strcasecmp(tagName, "INVPOS")==0) { gNew=AIO_OfxGroup_INVPOS_new(tagName, g, ctx); } else { DBG_WARN(AQBANKING_LOGDOMAIN, "Ignoring group [%s]", tagName); gNew=AIO_OfxGroup_Ignore_new(tagName, g, ctx); } if (gNew) { AIO_OfxXmlCtx_SetCurrentGroup(ctx, gNew); GWEN_XmlCtx_IncDepth(ctx); } return 0; } int AIO_OfxGroup_POSSTOCK_EndSubGroup(AIO_OFX_GROUP *g, AIO_OFX_GROUP *sg) { const char *s; GWEN_XML_CONTEXT *ctx; ctx=AIO_OfxGroup_GetXmlContext(g); s=AIO_OfxGroup_GetGroupName(sg); if (strcasecmp(s, "INVPOS")==0) { AB_SECURITY *sec; sec=AIO_OfxGroup_INVPOS_TakeSecurity(sg); if (sec) { AB_IMEXPORTER_CONTEXT *ioCtx; ioCtx=AIO_OfxXmlCtx_GetIoContext(ctx); DBG_INFO(AQBANKING_LOGDOMAIN, "Adding security"); AB_ImExporterContext_AddSecurity(ioCtx, sec); } } return 0; } aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_posmf_p.h0000664000175000017500000000153714043610745022410 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Mon Jan 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de copyright : (C) 2013 by Paul Conrady email : c.p.conrady@gmail.com *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AIO_OFX_G_POSMF_P_H #define AIO_OFX_G_POSMF_P_H #include "g_posmf_l.h" static int AIO_OfxGroup_POSMF_StartTag(AIO_OFX_GROUP *g, const char *tagName); static int AIO_OfxGroup_POSMF_EndSubGroup(AIO_OFX_GROUP *g, AIO_OFX_GROUP *sg); #endif aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_invposlist_l.h0000664000175000017500000000136414043610745023470 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Mon Jan 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AIO_OFX_G_INVPOSLIST_L_H #define AIO_OFX_G_INVPOSLIST_L_H #include "ofxgroup_l.h" AIO_OFX_GROUP *AIO_OfxGroup_INVPOSLIST_new(const char *groupName, AIO_OFX_GROUP *parent, GWEN_XML_CONTEXT *ctx); #endif aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_bankacctinfo.c0000664000175000017500000001360414043610745023360 00000000000000/*************************************************************************** begin : Mon Jan 07 2008 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "g_bankacctinfo_p.h" #include "ofxxmlctx_l.h" #include "aqbanking/i18n_l.h" #include "g_generic_l.h" #include "g_ignore_l.h" #include "g_bankacc_l.h" #include #include #include #include GWEN_INHERIT(AIO_OFX_GROUP, AIO_OFX_GROUP_BANKACCTINFO) AIO_OFX_GROUP *AIO_OfxGroup_BANKACCTINFO_new(const char *groupName, AIO_OFX_GROUP *parent, GWEN_XML_CONTEXT *ctx) { AIO_OFX_GROUP *g; AIO_OFX_GROUP_BANKACCTINFO *xg; /* create base group */ g=AIO_OfxGroup_Generic_new(groupName, parent, ctx); assert(g); GWEN_NEW_OBJECT(AIO_OFX_GROUP_BANKACCTINFO, xg); assert(xg); GWEN_INHERIT_SETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_BANKACCTINFO, g, xg, AIO_OfxGroup_BANKACCTINFO_FreeData); /* set virtual functions */ AIO_OfxGroup_SetStartTagFn(g, AIO_OfxGroup_BANKACCTINFO_StartTag); AIO_OfxGroup_SetAddDataFn(g, AIO_OfxGroup_BANKACCTINFO_AddData); AIO_OfxGroup_SetEndSubGroupFn(g, AIO_OfxGroup_BANKACCTINFO_EndSubGroup); return g; } GWENHYWFAR_CB void AIO_OfxGroup_BANKACCTINFO_FreeData(void *bp, void *p) { AIO_OFX_GROUP_BANKACCTINFO *xg; xg=(AIO_OFX_GROUP_BANKACCTINFO *)p; assert(xg); free(xg->currentElement); free(xg->bankId); free(xg->accId); free(xg->accType); GWEN_FREE_OBJECT(xg); } const char *AIO_OfxGroup_BANKACCTINFO_GetBankId(const AIO_OFX_GROUP *g) { AIO_OFX_GROUP_BANKACCTINFO *xg; assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_BANKACCTINFO, g); assert(xg); return xg->bankId; } const char *AIO_OfxGroup_BANKACCTINFO_GetAccId(const AIO_OFX_GROUP *g) { AIO_OFX_GROUP_BANKACCTINFO *xg; assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_BANKACCTINFO, g); assert(xg); return xg->accId; } const char *AIO_OfxGroup_BANKACCTINFO_GetAccType(const AIO_OFX_GROUP *g) { AIO_OFX_GROUP_BANKACCTINFO *xg; assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_BANKACCTINFO, g); assert(xg); return xg->accType; } int AIO_OfxGroup_BANKACCTINFO_StartTag(AIO_OFX_GROUP *g, const char *tagName) { AIO_OFX_GROUP_BANKACCTINFO *xg; GWEN_XML_CONTEXT *ctx; AIO_OFX_GROUP *gNew=NULL; assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_BANKACCTINFO, g); assert(xg); ctx=AIO_OfxGroup_GetXmlContext(g); free(xg->currentElement); xg->currentElement=NULL; if (strcasecmp(tagName, "USPRODUCTTYPE")==0 || strcasecmp(tagName, "CHECKING")==0 || strcasecmp(tagName, "OPTIONLEVEL")==0 || strcasecmp(tagName, "SUPTXDL")==0 || strcasecmp(tagName, "XFERSRC")==0 || strcasecmp(tagName, "XFERDEST")==0 || strcasecmp(tagName, "INVACCTTYPE")==0 || strcasecmp(tagName, "SVCSTATUS")==0) { xg->currentElement=strdup(tagName); } else if (strcasecmp(tagName, "BANKACCTFROM")==0 || strcasecmp(tagName, "CCACCTFROM")==0 || strcasecmp(tagName, "INVACCTFROM")==0) { gNew=AIO_OfxGroup_BANKACC_new(tagName, g, ctx); } else { DBG_WARN(AQBANKING_LOGDOMAIN, "Ignoring tag [%s]", tagName); xg->currentElement=strdup(tagName); } if (gNew) { AIO_OfxXmlCtx_SetCurrentGroup(ctx, gNew); GWEN_XmlCtx_IncDepth(ctx); } return 0; } int AIO_OfxGroup_BANKACCTINFO_AddData(AIO_OFX_GROUP *g, const char *data) { AIO_OFX_GROUP_BANKACCTINFO *xg; assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_BANKACCTINFO, g); assert(xg); if (xg->currentElement) { GWEN_BUFFER *buf; int rv; const char *s; buf=GWEN_Buffer_new(0, strlen(data), 0, 1); rv=AIO_OfxXmlCtx_SanitizeData(AIO_OfxGroup_GetXmlContext(g), data, buf); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(buf); return rv; } s=GWEN_Buffer_GetStart(buf); if (*s) { DBG_INFO(AQBANKING_LOGDOMAIN, "AddData: %s=[%s]", xg->currentElement, s); if (strcasecmp(xg->currentElement, "SUPTXDL")==0) { } else if (strcasecmp(xg->currentElement, "XFERSRC")==0) { } else if (strcasecmp(xg->currentElement, "XFERDEST")==0) { } else if (strcasecmp(xg->currentElement, "SVCSTATUS")==0) { } else { DBG_INFO(AQBANKING_LOGDOMAIN, "Ignoring data for unknown element [%s]", xg->currentElement); } } GWEN_Buffer_free(buf); } return 0; } int AIO_OfxGroup_BANKACCTINFO_EndSubGroup(AIO_OFX_GROUP *g, AIO_OFX_GROUP *sg) { AIO_OFX_GROUP_BANKACCTINFO *xg; const char *s; GWEN_XML_CONTEXT *ctx; assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_BANKACCTINFO, g); assert(xg); ctx=AIO_OfxGroup_GetXmlContext(g); assert(ctx); s=AIO_OfxGroup_GetGroupName(sg); if (strcasecmp(s, "BANKACCTFROM")==0 || strcasecmp(s, "CCACCTFROM")==0 || strcasecmp(s, "INVACCTFROM")==0) { const char *s; s=AIO_OfxGroup_BANKACC_GetBankId(sg); free(xg->bankId); if (s) xg->bankId=strdup(s); else xg->bankId=NULL; s=AIO_OfxGroup_BANKACC_GetAccId(sg); free(xg->accId); if (s) xg->accId=strdup(s); else xg->accId=NULL; s=AIO_OfxGroup_BANKACC_GetAccType(sg); free(xg->accType); if (s) xg->accType=strdup(s); else xg->accType=NULL; } return 0; } aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_invbuy.c0000664000175000017500000001620214043610745022247 00000000000000/*************************************************************************** begin : Mon Jan 07 2008 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de copyright : (C) 2013 by Paul Conrady email : c.p.conrady@gmail.com *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "g_invbuy_p.h" #include "ofxxmlctx_l.h" #include "g_generic_l.h" #include "g_ignore_l.h" #include "g_invtran_l.h" #include "g_secid_l.h" #include #include #include #include #include GWEN_INHERIT(AIO_OFX_GROUP, AIO_OFX_GROUP_INVBUY) AIO_OFX_GROUP *AIO_OfxGroup_INVBUY_new(const char *groupName, AIO_OFX_GROUP *parent, GWEN_XML_CONTEXT *ctx) { AIO_OFX_GROUP *g; AIO_OFX_GROUP_INVBUY *xg; /* create base group */ g=AIO_OfxGroup_Generic_new(groupName, parent, ctx); assert(g); GWEN_NEW_OBJECT(AIO_OFX_GROUP_INVBUY, xg); assert(xg); GWEN_INHERIT_SETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_INVBUY, g, xg, AIO_OfxGroup_INVBUY_FreeData); xg->transaction=AB_Transaction_new(); /* set virtual functions */ AIO_OfxGroup_SetStartTagFn(g, AIO_OfxGroup_INVBUY_StartTag); AIO_OfxGroup_SetAddDataFn(g, AIO_OfxGroup_INVBUY_AddData); AIO_OfxGroup_SetEndSubGroupFn(g, AIO_OfxGroup_INVBUY_EndSubGroup); return g; } GWENHYWFAR_CB void AIO_OfxGroup_INVBUY_FreeData(void *bp, void *p) { AIO_OFX_GROUP_INVBUY *xg; xg=(AIO_OFX_GROUP_INVBUY *)p; assert(xg); AB_Transaction_free(xg->transaction); free(xg->currentElement); GWEN_FREE_OBJECT(xg); } int AIO_OfxGroup_INVBUY_StartTag(AIO_OFX_GROUP *g, const char *tagName) { AIO_OFX_GROUP_INVBUY *xg; GWEN_XML_CONTEXT *ctx; AIO_OFX_GROUP *gNew=NULL; assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_INVBUY, g); assert(xg); ctx=AIO_OfxGroup_GetXmlContext(g); if (strcasecmp(tagName, "UNITS")==0 || strcasecmp(tagName, "UNITPRICE")==0 || strcasecmp(tagName, "COMMISSION")==0 || strcasecmp(tagName, "TOTAL")==0 || strcasecmp(tagName, "SUBACCTSEC")==0 || strcasecmp(tagName, "SUBACCTFUND")==0) { free(xg->currentElement); xg->currentElement=strdup(tagName); } else if (strcasecmp(tagName, "INVTRAN")==0) { gNew=AIO_OfxGroup_INVTRAN_new(tagName, g, ctx); } else if (strcasecmp(tagName, "SECID")==0) { gNew=AIO_OfxGroup_SECID_new(tagName, g, ctx); } else { DBG_WARN(AQBANKING_LOGDOMAIN, "Ignoring tag [%s]", tagName); free(xg->currentElement); xg->currentElement=strdup(tagName); } if (gNew) { AIO_OfxXmlCtx_SetCurrentGroup(ctx, gNew); GWEN_XmlCtx_IncDepth(ctx); } return 0; } int AIO_OfxGroup_INVBUY_AddData(AIO_OFX_GROUP *g, const char *data) { AIO_OFX_GROUP_INVBUY *xg; assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_INVBUY, g); assert(xg); if (xg->currentElement) { GWEN_BUFFER *buf; int rv; const char *s; buf=GWEN_Buffer_new(0, strlen(data), 0, 1); rv=AIO_OfxXmlCtx_SanitizeData(AIO_OfxGroup_GetXmlContext(g), data, buf); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(buf); return rv; } s=GWEN_Buffer_GetStart(buf); if (*s) { DBG_INFO(AQBANKING_LOGDOMAIN, "AddData: %s=[%s]", xg->currentElement, s); if (strcasecmp(xg->currentElement, "UNITS")==0) { AB_VALUE *v; v=AB_Value_fromString(s); if (v==NULL) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Invalid data for UNITS: [%s]", s); GWEN_Buffer_free(buf); return GWEN_ERROR_BAD_DATA; } AB_Transaction_SetUnits(xg->transaction, v); AB_Value_free(v); } else if (strcasecmp(xg->currentElement, "UNITPRICE")==0) { AB_VALUE *v; v=AB_Value_fromString(s); if (v==NULL) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Invalid data for UNITPRICE: [%s]", s); GWEN_Buffer_free(buf); return GWEN_ERROR_BAD_DATA; } AB_Transaction_SetUnitPriceValue(xg->transaction, v); AB_Value_free(v); } else if (strcasecmp(xg->currentElement, "TOTAL")==0) { AB_VALUE *v; v=AB_Value_fromString(s); if (v==NULL) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Invalid data for TOTAL: [%s]", s); GWEN_Buffer_free(buf); return GWEN_ERROR_BAD_DATA; } AB_Transaction_SetValue(xg->transaction, v); AB_Value_free(v); } else if (strcasecmp(xg->currentElement, "COMMISSION")==0) { AB_VALUE *v; v=AB_Value_fromString(s); if (v==NULL) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Invalid data for TOTAL: [%s]", s); GWEN_Buffer_free(buf); return GWEN_ERROR_BAD_DATA; } AB_Transaction_SetCommissionValue(xg->transaction, v); AB_Value_free(v); } else if (strcasecmp(xg->currentElement, "SUBACCTSEC")==0) { /* TODO */ } else if (strcasecmp(xg->currentElement, "SUBACCTFUND")==0) { /* TODO */ } else { DBG_INFO(AQBANKING_LOGDOMAIN, "Ignoring data for unknown element [%s]", xg->currentElement); } } GWEN_Buffer_free(buf); } return 0; } int AIO_OfxGroup_INVBUY_EndSubGroup(AIO_OFX_GROUP *g, AIO_OFX_GROUP *sg) { AIO_OFX_GROUP_INVBUY *xg; const char *s; GWEN_XML_CONTEXT *ctx; assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_INVBUY, g); assert(xg); ctx=AIO_OfxGroup_GetXmlContext(g); assert(ctx); s=AIO_OfxGroup_GetGroupName(sg); if (strcasecmp(s, "INVTRAN")==0) { AB_TRANSACTION *t; t=AIO_OfxGroup_INVTRAN_TakeData(sg); if (t) { DBG_INFO(AQBANKING_LOGDOMAIN, "Adding data"); AB_Transaction_SetFiId(xg->transaction, AB_Transaction_GetFiId(t)); AB_Transaction_SetValutaDate(xg->transaction, AB_Transaction_GetValutaDate(t)); AB_Transaction_SetDate(xg->transaction, AB_Transaction_GetDate(t)); AB_Transaction_SetPurpose(xg->transaction, AB_Transaction_GetPurpose(t)); } } else if (strcasecmp(s, "SECID")==0) { DBG_INFO(AQBANKING_LOGDOMAIN, "Adding data"); AB_Transaction_SetUnitId(xg->transaction, AIO_OfxGroup_SECID_GetUniqueId(sg)); AB_Transaction_SetUnitIdNameSpace(xg->transaction, AIO_OfxGroup_SECID_GetNameSpace(sg)); } else { DBG_INFO(AQBANKING_LOGDOMAIN, "Ignoring data for unknown element [%s]", s); } return 0; } AB_TRANSACTION *AIO_OfxGroup_INVBUY_TakeTransaction(const AIO_OFX_GROUP *g) { AIO_OFX_GROUP_INVBUY *xg; AB_TRANSACTION *t; assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_INVBUY, g); assert(xg); t=xg->transaction; xg->transaction=NULL; return t; } aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_seclistmsgsrsv1_l.h0000664000175000017500000000141514043610745024427 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Mon Jan 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AIO_OFX_G_SECLISTMSGSRSV1_L_H #define AIO_OFX_G_SECLISTMSGSRSV1_L_H #include "ofxgroup_l.h" AIO_OFX_GROUP *AIO_OfxGroup_SECLISTMSGSRSV1_new(const char *groupName, AIO_OFX_GROUP *parent, GWEN_XML_CONTEXT *ctx); #endif aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_status_l.h0000664000175000017500000000144014043610745022574 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Mon Jan 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AIO_OFX_G_STATUS_L_H #define AIO_OFX_G_STATUS_L_H #include "ofxgroup_l.h" AIO_OFX_GROUP *AIO_OfxGroup_STATUS_new(const char *groupName, AIO_OFX_GROUP *parent, GWEN_XML_CONTEXT *ctx, const char *description); #endif aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_signupmsgsrsv1.c0000664000175000017500000000332514043610745023750 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Mon Jan 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "g_signupmsgsrsv1_p.h" #include "ofxxmlctx_l.h" #include "g_generic_l.h" #include "g_ignore_l.h" #include "g_acctinfotrnrs_l.h" #include #include AIO_OFX_GROUP *AIO_OfxGroup_SIGNUPMSGSRSV1_new(const char *groupName, AIO_OFX_GROUP *parent, GWEN_XML_CONTEXT *ctx) { AIO_OFX_GROUP *g; /* create base group */ g=AIO_OfxGroup_Generic_new(groupName, parent, ctx); assert(g); /* set virtual functions */ AIO_OfxGroup_SetStartTagFn(g, AIO_OfxGroup_SIGNUPMSGSRSV1_StartTag); return g; } int AIO_OfxGroup_SIGNUPMSGSRSV1_StartTag(AIO_OFX_GROUP *g, const char *tagName) { AIO_OFX_GROUP *gNew=NULL; GWEN_XML_CONTEXT *ctx; assert(g); ctx=AIO_OfxGroup_GetXmlContext(g); if (strcasecmp(tagName, "ACCTINFOTRNRS")==0) { gNew=AIO_OfxGroup_ACCTINFOTRNRS_new(tagName, g, ctx); } else { DBG_WARN(AQBANKING_LOGDOMAIN, "Ignoring group [%s]", tagName); gNew=AIO_OfxGroup_Ignore_new(tagName, g, ctx); } if (gNew) { AIO_OfxXmlCtx_SetCurrentGroup(ctx, gNew); GWEN_XmlCtx_IncDepth(ctx); } return 0; } aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_buymf_p.h0000664000175000017500000000206614043610745022404 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Mon Jan 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de copyright : (C) 2013 by Paul Conrady email : c.p.conrady@gmail.com *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AIO_OFX_G_BUYMF_P_H #define AIO_OFX_G_BUYMF_P_H #include "g_buymf_l.h" typedef struct AIO_OFX_GROUP_BUYMF AIO_OFX_GROUP_BUYMF; struct AIO_OFX_GROUP_BUYMF { char *currentElement; AB_TRANSACTION *transaction; }; static void GWENHYWFAR_CB AIO_OfxGroup_BUYMF_FreeData(void *bp, void *p); static int AIO_OfxGroup_BUYMF_StartTag(AIO_OFX_GROUP *g, const char *tagName); static int AIO_OfxGroup_BUYMF_EndSubGroup(AIO_OFX_GROUP *g, AIO_OFX_GROUP *sg); static int AIO_OfxGroup_BUYMF_AddData(AIO_OFX_GROUP *g, const char *data); #endif aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_invacc_l.h0000664000175000017500000000225114043610745022515 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Thur Apr 23 2009 copyright : (C) 2009 by Stephen R. Besch (C) 2008 by Martin Preuss email : sbesch@buffalo.edu martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AIO_OFX_G_INVACC_L_H #define AIO_OFX_G_INVACC_L_H #include "ofxgroup_l.h" AIO_OFX_GROUP *AIO_OfxGroup_INVACC_new(const char *groupName, AIO_OFX_GROUP *parent, GWEN_XML_CONTEXT *ctx); const char *AIO_OfxGroup_INVACC_GetBrokerId(const AIO_OFX_GROUP *g); void AIO_OfxGroup_INVACC_SetBrokerId(AIO_OFX_GROUP *g, const char *s); const char *AIO_OfxGroup_INVACC_GetAccId(const AIO_OFX_GROUP *g); void AIO_OfxGroup_INVACC_SetAccId(AIO_OFX_GROUP *g, const char *s); const char *AIO_OfxGroup_INVACC_GetAccType(const AIO_OFX_GROUP *g); void AIO_OfxGroup_INVACC_SetAccType(AIO_OFX_GROUP *g, const char *s); #endif aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_invstmtrs_l.h0000664000175000017500000000135714043610745023331 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Mon Jan 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AIO_OFX_G_INVSTMTRS_L_H #define AIO_OFX_G_INVSTMTRS_L_H #include "ofxgroup_l.h" AIO_OFX_GROUP *AIO_OfxGroup_INVSTMTRS_new(const char *groupName, AIO_OFX_GROUP *parent, GWEN_XML_CONTEXT *ctx); #endif aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_secid_p.h0000664000175000017500000000201314043610745022341 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Mon Jan 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de copyright : (C) 2013 by Paul Conrady email : c.p.conrady@gmail.com *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AIO_OFX_G_SECID_P_H #define AIO_OFX_G_SECID_P_H #include "g_secid_l.h" typedef struct AIO_OFX_GROUP_SECID AIO_OFX_GROUP_SECID; struct AIO_OFX_GROUP_SECID { char *uniqueId; char *nameSpace; char *currentElement; AB_TRANSACTION *transaction; }; static void GWENHYWFAR_CB AIO_OfxGroup_SECID_FreeData(void *bp, void *p); static int AIO_OfxGroup_SECID_StartTag(AIO_OFX_GROUP *g, const char *tagName); static int AIO_OfxGroup_SECID_AddData(AIO_OFX_GROUP *g, const char *data); #endif aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_acctinfotrnrs_l.h0000664000175000017500000000140314043610745024127 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Mon Jan 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AIO_OFX_G_ACCTINFOTRNRS_L_H #define AIO_OFX_G_ACCTINFOTRNRS_L_H #include "ofxgroup_l.h" AIO_OFX_GROUP *AIO_OfxGroup_ACCTINFOTRNRS_new(const char *groupName, AIO_OFX_GROUP *parent, GWEN_XML_CONTEXT *ctx); #endif aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_income.c0000664000175000017500000001365214043610745022213 00000000000000/*************************************************************************** begin : Mon Jan 07 2008 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de copyright : (C) 2013 by Paul Conrady email : c.p.conrady@gmail.com *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "g_income_p.h" #include "ofxxmlctx_l.h" #include "g_generic_l.h" #include "g_ignore_l.h" #include "g_invtran_l.h" #include "g_secid_l.h" #include #include #include #include #include GWEN_INHERIT(AIO_OFX_GROUP, AIO_OFX_GROUP_INCOME) AIO_OFX_GROUP *AIO_OfxGroup_INCOME_new(const char *groupName, AIO_OFX_GROUP *parent, GWEN_XML_CONTEXT *ctx) { AIO_OFX_GROUP *g; AIO_OFX_GROUP_INCOME *xg; /* create base group */ g=AIO_OfxGroup_Generic_new(groupName, parent, ctx); assert(g); GWEN_NEW_OBJECT(AIO_OFX_GROUP_INCOME, xg); assert(xg); GWEN_INHERIT_SETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_INCOME, g, xg, AIO_OfxGroup_INCOME_FreeData); xg->transaction=AB_Transaction_new(); /* set virtual functions */ AIO_OfxGroup_SetStartTagFn(g, AIO_OfxGroup_INCOME_StartTag); AIO_OfxGroup_SetAddDataFn(g, AIO_OfxGroup_INCOME_AddData); AIO_OfxGroup_SetEndSubGroupFn(g, AIO_OfxGroup_INCOME_EndSubGroup); return g; } GWENHYWFAR_CB void AIO_OfxGroup_INCOME_FreeData(void *bp, void *p) { AIO_OFX_GROUP_INCOME *xg; xg=(AIO_OFX_GROUP_INCOME *)p; assert(xg); AB_Transaction_free(xg->transaction); free(xg->currentElement); GWEN_FREE_OBJECT(xg); } int AIO_OfxGroup_INCOME_StartTag(AIO_OFX_GROUP *g, const char *tagName) { AIO_OFX_GROUP_INCOME *xg; GWEN_XML_CONTEXT *ctx; AIO_OFX_GROUP *gNew=NULL; assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_INCOME, g); assert(xg); ctx=AIO_OfxGroup_GetXmlContext(g); if (strcasecmp(tagName, "TOTAL")==0 || strcasecmp(tagName, "INCOMETYPE")==0 || strcasecmp(tagName, "SUBACCTSEC")==0 || strcasecmp(tagName, "SUBACCTFUND")==0) { free(xg->currentElement); xg->currentElement=strdup(tagName); } else if (strcasecmp(tagName, "INVTRAN")==0) { gNew=AIO_OfxGroup_INVTRAN_new(tagName, g, ctx); } else if (strcasecmp(tagName, "SECID")==0) { gNew=AIO_OfxGroup_SECID_new(tagName, g, ctx); } else { DBG_WARN(AQBANKING_LOGDOMAIN, "Ignoring tag [%s]", tagName); free(xg->currentElement); xg->currentElement=strdup(tagName); } if (gNew) { AIO_OfxXmlCtx_SetCurrentGroup(ctx, gNew); GWEN_XmlCtx_IncDepth(ctx); } return 0; } int AIO_OfxGroup_INCOME_AddData(AIO_OFX_GROUP *g, const char *data) { AIO_OFX_GROUP_INCOME *xg; assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_INCOME, g); assert(xg); if (xg->currentElement) { GWEN_BUFFER *buf; int rv; const char *s; buf=GWEN_Buffer_new(0, strlen(data), 0, 1); rv=AIO_OfxXmlCtx_SanitizeData(AIO_OfxGroup_GetXmlContext(g), data, buf); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(buf); return rv; } s=GWEN_Buffer_GetStart(buf); if (*s) { DBG_INFO(AQBANKING_LOGDOMAIN, "AddData: %s=[%s]", xg->currentElement, s); if (strcasecmp(xg->currentElement, "TOTAL")==0) { AB_VALUE *v; v=AB_Value_fromString(s); if (v==NULL) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Invalid data for TOTAL: [%s]", s); GWEN_Buffer_free(buf); return GWEN_ERROR_BAD_DATA; } AB_Transaction_SetValue(xg->transaction, v); AB_Value_free(v); } else if (strcasecmp(xg->currentElement, "INCOMETYPE")==0) { /* TODO */ } else if (strcasecmp(xg->currentElement, "SUBACCTSEC")==0) { /* TODO */ } else if (strcasecmp(xg->currentElement, "SUBACCTFUND")==0) { /* TODO */ } else { DBG_INFO(AQBANKING_LOGDOMAIN, "Ignoring data for unknown element [%s]", xg->currentElement); } } GWEN_Buffer_free(buf); } return 0; } int AIO_OfxGroup_INCOME_EndSubGroup(AIO_OFX_GROUP *g, AIO_OFX_GROUP *sg) { AIO_OFX_GROUP_INCOME *xg; const char *s; GWEN_XML_CONTEXT *ctx; assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_INCOME, g); assert(xg); ctx=AIO_OfxGroup_GetXmlContext(g); assert(ctx); s=AIO_OfxGroup_GetGroupName(sg); if (strcasecmp(s, "INVTRAN")==0) { AB_TRANSACTION *t; t=AIO_OfxGroup_INVTRAN_TakeData(sg); if (t) { DBG_INFO(AQBANKING_LOGDOMAIN, "Adding data"); AB_Transaction_SetFiId(xg->transaction, AB_Transaction_GetFiId(t)); AB_Transaction_SetValutaDate(xg->transaction, AB_Transaction_GetValutaDate(t)); AB_Transaction_SetDate(xg->transaction, AB_Transaction_GetDate(t)); AB_Transaction_SetPurpose(xg->transaction, AB_Transaction_GetPurpose(t)); } } else if (strcasecmp(s, "SECID")==0) { DBG_INFO(AQBANKING_LOGDOMAIN, "Adding data"); AB_Transaction_SetUnitId(xg->transaction, AIO_OfxGroup_SECID_GetUniqueId(sg)); AB_Transaction_SetUnitIdNameSpace(xg->transaction, AIO_OfxGroup_SECID_GetNameSpace(sg)); } else { DBG_INFO(AQBANKING_LOGDOMAIN, "Ignoring data for unknown element [%s]", s); } return 0; } AB_TRANSACTION *AIO_OfxGroup_INCOME_TakeTransaction(const AIO_OFX_GROUP *g) { AIO_OFX_GROUP_INCOME *xg; AB_TRANSACTION *t; assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_INCOME, g); assert(xg); t=xg->transaction; xg->transaction=NULL; return t; } aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_stmttrnrs_p.h0000664000175000017500000000125314043610745023337 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Mon Jan 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AIO_OFX_G_STMTTRNRS_P_H #define AIO_OFX_G_STMTTRNRS_P_H #include "g_stmttrnrs_l.h" static int AIO_OfxGroup_STMTTRNRS_StartTag(AIO_OFX_GROUP *g, const char *tagName); #endif aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_ignore_p.h0000664000175000017500000000177214043610745022550 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Mon Jan 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AIO_OFX_G_IGNORE_P_H #define AIO_OFX_G_IGNORE_P_H #include "g_ignore_l.h" #include typedef struct AIO_OFX_GROUP_IGNORE AIO_OFX_GROUP_IGNORE; struct AIO_OFX_GROUP_IGNORE { GWEN_STRINGLIST *openTags; }; static void GWENHYWFAR_CB AIO_OfxGroup_Ignore_FreeData(void *bp, void *p); static int AIO_OfxGroup_Ignore_StartTag(AIO_OFX_GROUP *g, const char *tagName); static int AIO_OfxGroup_Ignore_EndTag(AIO_OFX_GROUP *g, const char *tagName); static int AIO_OfxGroup_Ignore_AddData(AIO_OFX_GROUP *g, const char *data); #endif aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_posstock_l.h0000664000175000017500000000135214043610745023120 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Mon Jan 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AIO_OFX_G_POSSTOCK_L_H #define AIO_OFX_G_POSSTOCK_L_H #include "ofxgroup_l.h" AIO_OFX_GROUP *AIO_OfxGroup_POSSTOCK_new(const char *groupName, AIO_OFX_GROUP *parent, GWEN_XML_CONTEXT *ctx); #endif aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_creditcardmsgsrsv1_l.h0000664000175000017500000000143414043610745025066 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Mon Jan 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AIO_OFX_G_CREDITCARDMSGSRSV1_L_H #define AIO_OFX_G_CREDITCARDMSGSRSV1_L_H #include "ofxgroup_l.h" AIO_OFX_GROUP *AIO_OfxGroup_CREDITCARDMSGSRSV1_new(const char *groupName, AIO_OFX_GROUP *parent, GWEN_XML_CONTEXT *ctx); #endif aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_invstmttrnrs_l.h0000664000175000017500000000137614043610745024056 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Mon Jan 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AIO_OFX_G_INVSTMTTRNRS_L_H #define AIO_OFX_G_INVSTMTTRNRS_L_H #include "ofxgroup_l.h" AIO_OFX_GROUP *AIO_OfxGroup_INVSTMTTRNRS_new(const char *groupName, AIO_OFX_GROUP *parent, GWEN_XML_CONTEXT *ctx); #endif aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_invtranlist_l.h0000664000175000017500000000205314043610745023627 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Mon Jan 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de begin : Fri Apr 17 2009 copyright : (C) 2009 by Stephen R. Besch email : sbesch@buffalo.edu begin : Sat May 18 2013 copyright : (C) 2013 by Paul Conrady email : c.p.conrady@gmail.com *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AIO_OFX_G_INVTRANLIST_L_H #define AIO_OFX_G_INVTRANLIST_L_H #include "ofxgroup_l.h" AIO_OFX_GROUP *AIO_OfxGroup_INVTRANLIST_new(const char *groupName, AIO_OFX_GROUP *parent, GWEN_XML_CONTEXT *ctx); AB_TRANSACTION_LIST2 *AIO_OfxGroup_INVTRANLIST_TakeTransactionList(const AIO_OFX_GROUP *g); #endif aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_stmtrs_p.h0000664000175000017500000000202014043610745022604 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Mon Jan 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AIO_OFX_G_STMTRS_P_H #define AIO_OFX_G_STMTRS_P_H #include "g_stmtrs_l.h" typedef struct AIO_OFX_GROUP_STMTRS AIO_OFX_GROUP_STMTRS; struct AIO_OFX_GROUP_STMTRS { char *currentElement; char *currency; AB_IMEXPORTER_ACCOUNTINFO *accountInfo; }; static void GWENHYWFAR_CB AIO_OfxGroup_STMTRS_FreeData(void *bp, void *p); static int AIO_OfxGroup_STMTRS_StartTag(AIO_OFX_GROUP *g, const char *tagName); static int AIO_OfxGroup_STMTRS_EndSubGroup(AIO_OFX_GROUP *g, AIO_OFX_GROUP *sg); static int AIO_OfxGroup_STMTRS_AddData(AIO_OFX_GROUP *g, const char *data); #endif aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_ignore.c0000664000175000017500000000554014043610745022221 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Mon Jan 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "g_ignore_p.h" #include #include GWEN_INHERIT(AIO_OFX_GROUP, AIO_OFX_GROUP_IGNORE) AIO_OFX_GROUP *AIO_OfxGroup_Ignore_new(const char *groupName, AIO_OFX_GROUP *parent, GWEN_XML_CONTEXT *ctx) { AIO_OFX_GROUP *g; AIO_OFX_GROUP_IGNORE *xg; /* create base group */ g=AIO_OfxGroup_new(groupName, parent, ctx); assert(g); /* create extension, assign to base group */ GWEN_NEW_OBJECT(AIO_OFX_GROUP_IGNORE, xg); assert(xg); GWEN_INHERIT_SETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_IGNORE, g, xg, AIO_OfxGroup_Ignore_FreeData); xg->openTags=GWEN_StringList_new(); /* set virtual functions */ AIO_OfxGroup_SetStartTagFn(g, AIO_OfxGroup_Ignore_StartTag); AIO_OfxGroup_SetEndTagFn(g, AIO_OfxGroup_Ignore_EndTag); AIO_OfxGroup_SetAddDataFn(g, AIO_OfxGroup_Ignore_AddData); return g; } GWENHYWFAR_CB void AIO_OfxGroup_Ignore_FreeData(void *bp, void *p) { AIO_OFX_GROUP_IGNORE *xg; xg=(AIO_OFX_GROUP_IGNORE *)p; GWEN_StringList_free(xg->openTags); GWEN_FREE_OBJECT(xg); } int AIO_OfxGroup_Ignore_StartTag(AIO_OFX_GROUP *g, const char *tagName) { AIO_OFX_GROUP_IGNORE *xg; assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_IGNORE, g); assert(xg); /* just insert the new tag into list */ GWEN_StringList_InsertString(xg->openTags, tagName, 0, 0); return 0; } int AIO_OfxGroup_Ignore_EndTag(AIO_OFX_GROUP *g, const char *tagName) { AIO_OFX_GROUP_IGNORE *xg; assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_IGNORE, g); assert(xg); if (strcasecmp(AIO_OfxGroup_GetGroupName(g), tagName)==0) /* ending this tag */ return 1; /* should be a subtag */ for (;;) { const char *s; s=GWEN_StringList_FirstString(xg->openTags); if (!s) /* empty and it is not our name, so let tha caller try parents */ break; /* remove 1st open tag in any case */ GWEN_StringList_RemoveString(xg->openTags, s); if (strcasecmp(s, tagName)==0) /* it was the one we wanted, stop here */ break; /* otherwise this loop continues to remove all subtags until the * matching one is found */ } return 0; } int AIO_OfxGroup_Ignore_AddData(AIO_OFX_GROUP *g, const char *data) { /* just ignore the data */ return 0; } aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_stmtrn_l.h0000664000175000017500000000145614043610745022607 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Mon Jan 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AIO_OFX_G_STMTRN_L_H #define AIO_OFX_G_STMTRN_L_H #include "ofxgroup_l.h" AIO_OFX_GROUP *AIO_OfxGroup_STMTRN_new(const char *groupName, AIO_OFX_GROUP *parent, GWEN_XML_CONTEXT *ctx); AB_TRANSACTION *AIO_OfxGroup_STMTRN_TakeTransaction(const AIO_OFX_GROUP *g); #endif aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/ofxgroup.c0000664000175000017500000000660414043610745022303 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Mon Jan 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "ofxgroup_p.h" #include #include GWEN_INHERIT_FUNCTIONS(AIO_OFX_GROUP) AIO_OFX_GROUP *AIO_OfxGroup_new(const char *groupName, AIO_OFX_GROUP *parent, GWEN_XML_CONTEXT *ctx) { AIO_OFX_GROUP *g; GWEN_NEW_OBJECT(AIO_OFX_GROUP, g); GWEN_INHERIT_INIT(AIO_OFX_GROUP, g); g->parent=parent; g->xmlContext=ctx; if (groupName) g->groupName=strdup(groupName); if (g->xmlContext==NULL && g->parent) g->xmlContext=parent->xmlContext; return g; } void AIO_OfxGroup_free(AIO_OFX_GROUP *g) { if (g) { GWEN_INHERIT_FINI(AIO_OFX_GROUP, g); free(g->groupName); GWEN_FREE_OBJECT(g); } } AIO_OFX_GROUP *AIO_OfxGroup_GetParent(const AIO_OFX_GROUP *g) { assert(g); return g->parent; } GWEN_XML_CONTEXT *AIO_OfxGroup_GetXmlContext(const AIO_OFX_GROUP *g) { assert(g); return g->xmlContext; } const char *AIO_OfxGroup_GetGroupName(const AIO_OFX_GROUP *g) { assert(g); return g->groupName; } AIO_OFX_GROUP_STARTTAG_FN AIO_OfxGroup_SetStartTagFn(AIO_OFX_GROUP *g, AIO_OFX_GROUP_STARTTAG_FN f) { AIO_OFX_GROUP_STARTTAG_FN oldFn; assert(g); oldFn=g->startTagFn; g->startTagFn=f; return oldFn; } AIO_OFX_GROUP_ENDTAG_FN AIO_OfxGroup_SetEndTagFn(AIO_OFX_GROUP *g, AIO_OFX_GROUP_ENDTAG_FN f) { AIO_OFX_GROUP_ENDTAG_FN oldFn; assert(g); oldFn=g->endTagFn; g->endTagFn=f; return oldFn; } AIO_OFX_GROUP_ADDDATA_FN AIO_OfxGroup_SetAddDataFn(AIO_OFX_GROUP *g, AIO_OFX_GROUP_ADDDATA_FN f) { AIO_OFX_GROUP_ADDDATA_FN oldFn; assert(g); oldFn=g->addDataFn; g->addDataFn=f; return oldFn; } AIO_OFX_GROUP_ENDSUBGROUP_FN AIO_OfxGroup_SetEndSubGroupFn(AIO_OFX_GROUP *g, AIO_OFX_GROUP_ENDSUBGROUP_FN f) { AIO_OFX_GROUP_ENDSUBGROUP_FN oldFn; assert(g); oldFn=g->endSubGroupFn; g->endSubGroupFn=f; return oldFn; } int AIO_OfxGroup_StartTag(AIO_OFX_GROUP *g, const char *tagName) { assert(g); if (g->startTagFn) return g->startTagFn(g, tagName); else return GWEN_ERROR_NOT_IMPLEMENTED; } int AIO_OfxGroup_EndTag(AIO_OFX_GROUP *g, const char *tagName) { assert(g); if (g->endTagFn) return g->endTagFn(g, tagName); else return GWEN_ERROR_NOT_IMPLEMENTED; } int AIO_OfxGroup_AddData(AIO_OFX_GROUP *g, const char *data) { assert(g); if (g->addDataFn) return g->addDataFn(g, data); else return GWEN_ERROR_NOT_IMPLEMENTED; } int AIO_OfxGroup_EndSubGroup(AIO_OFX_GROUP *g, AIO_OFX_GROUP *sg) { assert(g); if (g->endSubGroupFn) return g->endSubGroupFn(g, sg); else return GWEN_ERROR_NOT_IMPLEMENTED; } aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_signupmsgsrsv1_p.h0000664000175000017500000000130414043610745024267 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Mon Jan 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AIO_OFX_G_SIGNUPMSGSRSV1_P_H #define AIO_OFX_G_SIGNUPMSGSRSV1_P_H #include "g_signupmsgsrsv1_l.h" static int AIO_OfxGroup_SIGNUPMSGSRSV1_StartTag(AIO_OFX_GROUP *g, const char *tagName); #endif aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_stmtrs.c0000664000175000017500000002022214043610745022264 00000000000000/*************************************************************************** begin : Mon Jan 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "g_stmtrs_p.h" #include "ofxxmlctx_l.h" #include "aqbanking/i18n_l.h" #include "g_generic_l.h" #include "g_ignore_l.h" #include "g_bankacc_l.h" #include "g_banktranlist_l.h" #include "g_bal_l.h" #include #include #include #include #include GWEN_INHERIT(AIO_OFX_GROUP, AIO_OFX_GROUP_STMTRS) AIO_OFX_GROUP *AIO_OfxGroup_STMTRS_new(const char *groupName, AIO_OFX_GROUP *parent, GWEN_XML_CONTEXT *ctx) { AIO_OFX_GROUP *g; AIO_OFX_GROUP_STMTRS *xg; /* create base group */ g=AIO_OfxGroup_Generic_new(groupName, parent, ctx); assert(g); GWEN_NEW_OBJECT(AIO_OFX_GROUP_STMTRS, xg); assert(xg); GWEN_INHERIT_SETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_STMTRS, g, xg, AIO_OfxGroup_STMTRS_FreeData); /* set virtual functions */ AIO_OfxGroup_SetStartTagFn(g, AIO_OfxGroup_STMTRS_StartTag); AIO_OfxGroup_SetAddDataFn(g, AIO_OfxGroup_STMTRS_AddData); AIO_OfxGroup_SetEndSubGroupFn(g, AIO_OfxGroup_STMTRS_EndSubGroup); return g; } GWENHYWFAR_CB void AIO_OfxGroup_STMTRS_FreeData(void *bp, void *p) { AIO_OFX_GROUP_STMTRS *xg; xg=(AIO_OFX_GROUP_STMTRS *)p; assert(xg); free(xg->currency); free(xg->currentElement); GWEN_FREE_OBJECT(xg); } int AIO_OfxGroup_STMTRS_StartTag(AIO_OFX_GROUP *g, const char *tagName) { AIO_OFX_GROUP_STMTRS *xg; GWEN_XML_CONTEXT *ctx; AIO_OFX_GROUP *gNew=NULL; assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_STMTRS, g); assert(xg); ctx=AIO_OfxGroup_GetXmlContext(g); free(xg->currentElement); xg->currentElement=NULL; if (strcasecmp(tagName, "CURDEF")==0) { xg->currentElement=strdup(tagName); } else if (strcasecmp(tagName, "BANKACCTFROM")==0) { gNew=AIO_OfxGroup_BANKACC_new(tagName, g, ctx); } else if (strcasecmp(tagName, "CCACCTFROM")==0) { gNew=AIO_OfxGroup_BANKACC_new(tagName, g, ctx); } else if (strcasecmp(tagName, "BANKTRANLIST")==0) { gNew=AIO_OfxGroup_BANKTRANLIST_new(tagName, g, ctx); } else if (strcasecmp(tagName, "LEDGERBAL")==0) { gNew=AIO_OfxGroup_BAL_new(tagName, g, ctx); } else if (strcasecmp(tagName, "AVAILBAL")==0) { gNew=AIO_OfxGroup_BAL_new(tagName, g, ctx); } else if (strcasecmp(tagName, "MKTGINFO")==0) { /* ignore marketing info */ } else { DBG_WARN(AQBANKING_LOGDOMAIN, "Ignoring group [%s]", tagName); gNew=AIO_OfxGroup_Ignore_new(tagName, g, ctx); } if (gNew) { AIO_OfxXmlCtx_SetCurrentGroup(ctx, gNew); GWEN_XmlCtx_IncDepth(ctx); } return 0; } int AIO_OfxGroup_STMTRS_AddData(AIO_OFX_GROUP *g, const char *data) { AIO_OFX_GROUP_STMTRS *xg; assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_STMTRS, g); assert(xg); if (xg->currentElement) { GWEN_BUFFER *buf; int rv; const char *s; buf=GWEN_Buffer_new(0, strlen(data), 0, 1); rv=AIO_OfxXmlCtx_SanitizeData(AIO_OfxGroup_GetXmlContext(g), data, buf); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(buf); return rv; } s=GWEN_Buffer_GetStart(buf); if (*s) { DBG_INFO(AQBANKING_LOGDOMAIN, "AddData: %s=[%s]", xg->currentElement, s); if (strcasecmp(xg->currentElement, "CURDEF")==0) { free(xg->currency); xg->currency=strdup(s); } else { DBG_INFO(AQBANKING_LOGDOMAIN, "Ignoring data for unknown element [%s]", xg->currentElement); } } GWEN_Buffer_free(buf); } return 0; } int AIO_OfxGroup_STMTRS_EndSubGroup(AIO_OFX_GROUP *g, AIO_OFX_GROUP *sg) { AIO_OFX_GROUP_STMTRS *xg; const char *s; GWEN_XML_CONTEXT *ctx; assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_STMTRS, g); assert(xg); ctx=AIO_OfxGroup_GetXmlContext(g); assert(ctx); s=AIO_OfxGroup_GetGroupName(sg); if (strcasecmp(s, "BANKACCTFROM")==0 || strcasecmp(s, "CCACCTFROM")==0) { AB_IMEXPORTER_ACCOUNTINFO *ai; const char *s; DBG_INFO(AQBANKING_LOGDOMAIN, "Importing account %s/%s", AIO_OfxGroup_BANKACC_GetBankId(sg), AIO_OfxGroup_BANKACC_GetAccId(sg)); ai=AB_ImExporterAccountInfo_new(); assert(ai); s=AIO_OfxGroup_BANKACC_GetBankId(sg); if (s) AB_ImExporterAccountInfo_SetBankCode(ai, s); s=AIO_OfxGroup_BANKACC_GetAccId(sg); if (s) AB_ImExporterAccountInfo_SetAccountNumber(ai, s); /* set currency */ if (xg->currency) AB_ImExporterAccountInfo_SetCurrency(ai, xg->currency); /* set account type, if known */ s=AIO_OfxGroup_BANKACC_GetAccType(sg); if (!s) s="BANK"; /* not a real code */ if (s) { AB_ACCOUNT_TYPE t; t=AIO_OfxGroup_Generic_AccountTypeFromString(s); AB_ImExporterAccountInfo_SetAccountType(ai, t); } DBG_INFO(AQBANKING_LOGDOMAIN, "Adding account"); AB_ImExporterContext_AddAccountInfo(AIO_OfxXmlCtx_GetIoContext(ctx), ai); xg->accountInfo=ai; } else if (strcasecmp(s, "BANKTRANLIST")==0) { AB_TRANSACTION_LIST2 *tl; tl=AIO_OfxGroup_BANKTRANLIST_TakeTransactionList(sg); if (tl) { AB_TRANSACTION_LIST2_ITERATOR *it; it=AB_Transaction_List2_First(tl); if (it) { AB_TRANSACTION *t; t=AB_Transaction_List2Iterator_Data(it); while (t) { DBG_INFO(AQBANKING_LOGDOMAIN, "Importing transaction"); /* set currency if missing */ if (xg->currency) { const AB_VALUE *v; v=AB_Transaction_GetValue(t); if (v && AB_Value_GetCurrency(v)==NULL) { AB_VALUE *v2; v2=AB_Value_dup(v); AB_Value_SetCurrency(v2, xg->currency); AB_Transaction_SetValue(t, v2); AB_Value_free(v2); } } AB_ImExporterAccountInfo_AddTransaction(xg->accountInfo, t); t=AB_Transaction_List2Iterator_Next(it); } AB_Transaction_List2Iterator_free(it); } /* don't call AB_Transaction_List2_freeAll(), because the transactions * from the list have been taken over by the AccountInfo object */ AB_Transaction_List2_free(tl); } } else if (strcasecmp(s, "LEDGERBAL")==0) { const GWEN_DATE *dt; const AB_VALUE *v; dt=AIO_OfxGroup_BAL_GetDate(sg); v=AIO_OfxGroup_BAL_GetValue(sg); if (v) { AB_BALANCE *bal; bal=AB_Balance_new(); AB_Balance_SetType(bal, AB_Balance_TypeBooked); AB_Balance_SetDate(bal, dt); AB_Balance_SetValue(bal, v); if (xg->currency && AB_Value_GetCurrency(v)==NULL) { AB_VALUE *v2; v2=AB_Value_dup(v); AB_Value_SetCurrency(v2, xg->currency); AB_Balance_SetValue(bal, v2); AB_Value_free(v2); } DBG_INFO(AQBANKING_LOGDOMAIN, "Adding balance"); AB_ImExporterAccountInfo_AddBalance(xg->accountInfo, bal); } } else if (strcasecmp(s, "AVAILBAL")==0) { const GWEN_DATE *dt; const AB_VALUE *v; dt=AIO_OfxGroup_BAL_GetDate(sg); v=AIO_OfxGroup_BAL_GetValue(sg); if (v) { AB_BALANCE *bal; bal=AB_Balance_new(); AB_Balance_SetType(bal, AB_Balance_TypeNoted); AB_Balance_SetDate(bal, dt); AB_Balance_SetValue(bal, v); if (xg->currency && AB_Value_GetCurrency(v)==NULL) { AB_VALUE *v2; v2=AB_Value_dup(v); AB_Value_SetCurrency(v2, xg->currency); AB_Balance_SetValue(bal, v2); AB_Value_free(v2); } DBG_INFO(AQBANKING_LOGDOMAIN, "Adding balance"); AB_ImExporterAccountInfo_AddBalance(xg->accountInfo, bal); } } return 0; } aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_invacc.c0000664000175000017500000001201314043610745022172 00000000000000/*************************************************************************** begin : Thur Apr 23 2009 copyright : (C) 2009 by Stephen R. Besch (C) 2019 by Martin Preuss email : sbesch@buffalo.edu martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "g_invacc_p.h" #include "ofxxmlctx_l.h" #include "aqbanking/i18n_l.h" #include "g_generic_l.h" #include "g_ignore_l.h" #include #include #include #include GWEN_INHERIT(AIO_OFX_GROUP, AIO_OFX_GROUP_INVACC) AIO_OFX_GROUP *AIO_OfxGroup_INVACC_new(const char *groupName, AIO_OFX_GROUP *parent, GWEN_XML_CONTEXT *ctx) { AIO_OFX_GROUP *g; AIO_OFX_GROUP_INVACC *xg; /* create base group */ g=AIO_OfxGroup_Generic_new(groupName, parent, ctx); assert(g); GWEN_NEW_OBJECT(AIO_OFX_GROUP_INVACC, xg); assert(xg); GWEN_INHERIT_SETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_INVACC, g, xg, AIO_OfxGroup_INVACC_FreeData); /* set virtual functions */ AIO_OfxGroup_SetStartTagFn(g, AIO_OfxGroup_INVACC_StartTag); AIO_OfxGroup_SetAddDataFn(g, AIO_OfxGroup_INVACC_AddData); if (strcasecmp(groupName, "INVACCTFROM")==0 || strcasecmp(groupName, "INVACCTTO")==0) xg->accType=strdup("INVESTMENT"); return g; } GWENHYWFAR_CB void AIO_OfxGroup_INVACC_FreeData(void *bp, void *p) { AIO_OFX_GROUP_INVACC *xg; xg=(AIO_OFX_GROUP_INVACC *)p; assert(xg); free(xg->currentElement); free(xg->brokerId); free(xg->accId); free(xg->accType); GWEN_FREE_OBJECT(xg); } const char *AIO_OfxGroup_INVACC_GetBrokerId(const AIO_OFX_GROUP *g) { AIO_OFX_GROUP_INVACC *xg; assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_INVACC, g); assert(xg); return xg->brokerId; } void AIO_OfxGroup_INVACC_SetBrokerId(AIO_OFX_GROUP *g, const char *s) { AIO_OFX_GROUP_INVACC *xg; assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_INVACC, g); assert(xg); free(xg->brokerId); if (s) xg->brokerId=strdup(s); else xg->brokerId=NULL; } const char *AIO_OfxGroup_INVACC_GetAccId(const AIO_OFX_GROUP *g) { AIO_OFX_GROUP_INVACC *xg; assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_INVACC, g); assert(xg); return xg->accId; } void AIO_OfxGroup_INVACC_SetAccId(AIO_OFX_GROUP *g, const char *s) { AIO_OFX_GROUP_INVACC *xg; assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_INVACC, g); assert(xg); free(xg->accId); if (s) xg->accId=strdup(s); else xg->accId=NULL; } const char *AIO_OfxGroup_INVACC_GetAccType(const AIO_OFX_GROUP *g) { AIO_OFX_GROUP_INVACC *xg; assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_INVACC, g); assert(xg); return xg->accType; } void AIO_OfxGroup_INVACC_SetAccType(AIO_OFX_GROUP *g, const char *s) { AIO_OFX_GROUP_INVACC *xg; assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_INVACC, g); assert(xg); free(xg->accType); if (s) xg->accType=strdup(s); else xg->accType=NULL; } int AIO_OfxGroup_INVACC_StartTag(AIO_OFX_GROUP *g, const char *tagName) { AIO_OFX_GROUP_INVACC *xg; //GWEN_XML_CONTEXT *ctx; assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_INVACC, g); assert(xg); //ctx=AIO_OfxGroup_GetXmlContext(g); free(xg->currentElement); xg->currentElement=NULL; if (strcasecmp(tagName, "BANKID")==0 || strcasecmp(tagName, "BROKERID")==0 || strcasecmp(tagName, "ACCTID")==0) xg->currentElement=strdup(tagName); else { DBG_WARN(AQBANKING_LOGDOMAIN, "Ignoring tag [%s]", tagName); } return 0; } int AIO_OfxGroup_INVACC_AddData(AIO_OFX_GROUP *g, const char *data) { AIO_OFX_GROUP_INVACC *xg; assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_INVACC, g); assert(xg); if (xg->currentElement) { GWEN_BUFFER *buf; int rv; const char *s; buf=GWEN_Buffer_new(0, strlen(data), 0, 1); rv=AIO_OfxXmlCtx_SanitizeData(AIO_OfxGroup_GetXmlContext(g), data, buf); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(buf); return rv; } s=GWEN_Buffer_GetStart(buf); if (*s) { DBG_INFO(AQBANKING_LOGDOMAIN, "AddData: %s=[%s]", xg->currentElement, s); if (strcasecmp(xg->currentElement, "BROKERID")==0 || strcasecmp(xg->currentElement, "BANKID")==0) AIO_OfxGroup_INVACC_SetBrokerId(g, GWEN_Buffer_GetStart(buf)); else if (strcasecmp(xg->currentElement, "ACCTID")==0) AIO_OfxGroup_INVACC_SetAccId(g, GWEN_Buffer_GetStart(buf)); else { DBG_INFO(AQBANKING_LOGDOMAIN, "Ignoring data for unknown element [%s]", xg->currentElement); } } GWEN_Buffer_free(buf); } return 0; } aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_ofx_l.h0000664000175000017500000000132114043610745022043 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Mon Jan 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AIO_OFX_G_OFX_L_H #define AIO_OFX_G_OFX_L_H #include "ofxgroup_l.h" AIO_OFX_GROUP *AIO_OfxGroup_OFX_new(const char *groupName, AIO_OFX_GROUP *parent, GWEN_XML_CONTEXT *ctx); #endif aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_stockinfo_l.h0000664000175000017500000000135714043610745023257 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Mon Jan 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AIO_OFX_G_STOCKINFO_L_H #define AIO_OFX_G_STOCKINFO_L_H #include "ofxgroup_l.h" AIO_OFX_GROUP *AIO_OfxGroup_STOCKINFO_new(const char *groupName, AIO_OFX_GROUP *parent, GWEN_XML_CONTEXT *ctx); #endif aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_invstmtrs.c0000664000175000017500000002274214043610745023012 00000000000000/*************************************************************************** begin : Mon Jan 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de comments :Stephen R. Besch email :sbesch@acsu.buffalo.edu *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "g_invstmtrs_p.h" #include "ofxxmlctx_l.h" #include "aqbanking/i18n_l.h" #include "g_generic_l.h" #include "g_ignore_l.h" #include "g_invacc_l.h" /*SRB 4/22/09*/ #include "g_invposlist_l.h" #include "g_invtranlist_l.h" /*SRB 4/22/09*/ #include #include #include #include #include GWEN_INHERIT(AIO_OFX_GROUP, AIO_OFX_GROUP_INVSTMTRS) /*This code parallels the code in g_stmtrs with the exception that there are quite a few more items to ignore and more items to handle. Since there are data items that we want to use, we need to define virtual functions for adding data items. And, since some of the subgroups return data, we will need to watch for end-tags so we can dispose of the data when the group closes.*/ AIO_OFX_GROUP *AIO_OfxGroup_INVSTMTRS_new(const char *groupName, AIO_OFX_GROUP *parent, GWEN_XML_CONTEXT *ctx) { AIO_OFX_GROUP *g; AIO_OFX_GROUP_INVSTMTRS *xg; /* create base group */ g=AIO_OfxGroup_Generic_new(groupName, parent, ctx); assert(g); GWEN_NEW_OBJECT(AIO_OFX_GROUP_INVSTMTRS, xg); assert(xg); GWEN_INHERIT_SETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_INVSTMTRS, g, xg, AIO_OfxGroup_INVSTMTRS_FreeData); /* set virtual functions */ AIO_OfxGroup_SetStartTagFn(g, AIO_OfxGroup_INVSTMTRS_StartTag); AIO_OfxGroup_SetAddDataFn(g, AIO_OfxGroup_INVSTMTRS_AddData); AIO_OfxGroup_SetEndSubGroupFn(g, AIO_OfxGroup_INVSTMTRS_EndSubGroup); return g; } GWENHYWFAR_CB void AIO_OfxGroup_INVSTMTRS_FreeData(void *bp, void *p) { AIO_OFX_GROUP_INVSTMTRS *xg; xg=(AIO_OFX_GROUP_INVSTMTRS *)p; assert(xg); free(xg->currency); free(xg->currentElement); GWEN_FREE_OBJECT(xg); } /*There are 2 data items and 7 subgroups (INVACCTFROM, INVACCTTO, INVTRANLIST, INVPOSLIST, INVOOLIST, INCOME, INVBAL) Original code handled 3 of the 7 groups. I've added the INVTRANLIST group to the mix.*/ int AIO_OfxGroup_INVSTMTRS_StartTag(AIO_OFX_GROUP *g, const char *tagName) { AIO_OFX_GROUP_INVSTMTRS *xg; GWEN_XML_CONTEXT *ctx; AIO_OFX_GROUP *gNew=NULL; /*First, get the data and context.*/ assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_INVSTMTRS, g); assert(xg); ctx=AIO_OfxGroup_GetXmlContext(g); free(xg->currentElement); /*Get rid of the old contents*/ xg->currentElement=NULL; /*Handle the data tags first We only need to make the current element's value match the tag.*/ if (strcasecmp(tagName, "CURDEF")==0 || strcasecmp(tagName, "DTASOF")==0) { xg->currentElement=strdup(tagName); } /*Then handle the groups.*/ else if (strcasecmp(tagName, "INVACCTFROM")==0 || strcasecmp(tagName, "INVACCTTO")==0) gNew=AIO_OfxGroup_INVACC_new(tagName, g, ctx); else if (strcasecmp(tagName, "INVTRANLIST")==0) gNew=AIO_OfxGroup_INVTRANLIST_new(tagName, g, ctx); /*SRB 4/22/09*/ else if (strcasecmp(tagName, "INVPOSLIST")==0) gNew=AIO_OfxGroup_INVPOSLIST_new(tagName, g, ctx); else { DBG_WARN(AQBANKING_LOGDOMAIN, "Ignoring group [%s]", tagName); gNew=AIO_OfxGroup_Ignore_new(tagName, g, ctx); } if (gNew) { AIO_OfxXmlCtx_SetCurrentGroup(ctx, gNew); GWEN_XmlCtx_IncDepth(ctx); } return 0; } /*Even though we look for the DTASOF tag above (we must, so that it can be distinguished from a group), nothing is done with the data. The only tag we preocess is the currency definition.*/ int AIO_OfxGroup_INVSTMTRS_AddData(AIO_OFX_GROUP *g, const char *data) { AIO_OFX_GROUP_INVSTMTRS *xg; assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_INVSTMTRS, g); assert(xg); /*If the last start tag defined a "currentElement", then see if we recognize it.*/ if (xg->currentElement) { GWEN_BUFFER *buf; int rv; const char *s; /*Always make sure that there are no weird or extra characters in the string data.*/ buf=GWEN_Buffer_new(0, strlen(data), 0, 1); rv=AIO_OfxXmlCtx_SanitizeData(AIO_OfxGroup_GetXmlContext(g), data, buf); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(buf); return rv; } s=GWEN_Buffer_GetStart(buf); if (*s) { /*If there is actually a string there, then*/ DBG_INFO(AQBANKING_LOGDOMAIN, "AddData: %s=[%s]", xg->currentElement, s); if (strcasecmp(xg->currentElement, "CURDEF")==0) { /*See if it was following a CURDEF*/ free(xg->currency); /*If so, then remove any debris*/ xg->currency=strdup(s); /*and dup the string into xg->currency*/ } else { /*All other tags are ignored!*/ DBG_INFO(AQBANKING_LOGDOMAIN, "Ignoring data for unknown element [%s]", xg->currentElement); } } GWEN_Buffer_free(buf); } return 0; } /*We need to watch for the ending of our 3 groups. Ignore INVACCTTO for now.*/ int AIO_OfxGroup_INVSTMTRS_EndSubGroup(AIO_OFX_GROUP *g, AIO_OFX_GROUP *sg) { AIO_OFX_GROUP_INVSTMTRS *xg; const char *s; GWEN_XML_CONTEXT *ctx; /*Set up pointers to INVSTMTRS group data*/ assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_INVSTMTRS, g); assert(xg); ctx=AIO_OfxGroup_GetXmlContext(g); assert(ctx); s=AIO_OfxGroup_GetGroupName(sg); /*Pointer to the group name*/ /*First look for the INVACCTFROM group. This is quite simple and is in fact nearly identical to the code for BANKACCTFROM in g_stmtrn.c. ....What about INVACCTTO? */ if (strcasecmp(s, "INVACCTFROM")==0) { AB_IMEXPORTER_ACCOUNTINFO *ai; const char *s; DBG_INFO(AQBANKING_LOGDOMAIN, "Importing account %s/%s", AIO_OfxGroup_INVACC_GetBrokerId(sg), AIO_OfxGroup_INVACC_GetAccId(sg)); ai=AB_ImExporterAccountInfo_new(); /*Create the AccountInfo Structure*/ assert(ai); /*Validate creation*/ s=AIO_OfxGroup_INVACC_GetBrokerId(sg); if (s) AB_ImExporterAccountInfo_SetBankCode(ai, s); /*Install Broker ID*/ s=AIO_OfxGroup_INVACC_GetAccId(sg); if (s) AB_ImExporterAccountInfo_SetAccountNumber(ai, s); /*And account number*/ /* and set currency if there is one */ if (xg->currency) AB_ImExporterAccountInfo_SetCurrency(ai, xg->currency); /* set account type, if known */ s=AIO_OfxGroup_INVACC_GetAccType(sg); if (!s) s="INVESTMENT"; /* Investment is a real code now?--- SRB 4/22/09*/ if (s) { AB_ACCOUNT_TYPE t; t=AIO_OfxGroup_Generic_AccountTypeFromString(s); AB_ImExporterAccountInfo_SetAccountType(ai, t); } DBG_INFO(AQBANKING_LOGDOMAIN, "Adding investment account"); AB_ImExporterContext_AddAccountInfo(AIO_OfxXmlCtx_GetIoContext(ctx), ai); xg->accountInfo=ai; } else if (strcasecmp(s, "INVTRANLIST") == 0) { /*Here when we finish an Investment transaction list. Uncommented and extended by SRB*/ AB_TRANSACTION_LIST2 *tl; AB_TRANSACTION_LIST2_ITERATOR *it; tl=AIO_OfxGroup_INVTRANLIST_TakeTransactionList(sg); if (!tl) return 0; /*No list - just return*/ it=AB_Transaction_List2_First(tl); if (it) { AB_TRANSACTION *t; t=AB_Transaction_List2Iterator_Data(it); /* int transactionCount=0; char st[20]; */ while (t) { DBG_INFO(AQBANKING_LOGDOMAIN, "Importing investment transaction"); if (xg->currency) { /* set currency using xg->currency if missing from transaction */ const AB_VALUE *v; v=AB_Transaction_GetValue(t); /*Returns pointer to actual data item*/ if (v && AB_Value_GetCurrency(v)==NULL) { /*If v is valid, check for currency valid*/ AB_VALUE *v2; /*We're duplicating here (why??)*/ v2=AB_Value_dup(v); /*Can do AB_Value_SetCurrency(v, xg->currency) for whole mess*/ AB_Value_SetCurrency(v2, xg->currency); /*Install the currency*/ AB_Transaction_SetValue(t, v2); /*This destroys v, duplicates v2 and uses duplicate*/ AB_Value_free(v2); } } /* sprintf(st,"%d",transactionCount); AB_Transaction_SetCustomerReference(t,st); transactionCount++; */ AB_ImExporterAccountInfo_AddTransaction(xg->accountInfo, t); t=AB_Transaction_List2Iterator_Next(it); } AB_Transaction_List2Iterator_free(it); } /* don't call AB_Transaction_List2_freeAll(), because the transactions from the list have been taken over by the AccountInfo object */ AB_Transaction_List2_free(tl); } return 0; } aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/ofxgroup_p.h0000664000175000017500000000152514043610745022624 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Mon Jan 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AIO_OFX_OFXGROUP_P_H #define AIO_OFX_OFXGROUP_P_H #include "ofxgroup_l.h" struct AIO_OFX_GROUP { GWEN_INHERIT_ELEMENT(AIO_OFX_GROUP) AIO_OFX_GROUP *parent; GWEN_XML_CONTEXT *xmlContext; char *groupName; AIO_OFX_GROUP_STARTTAG_FN startTagFn; AIO_OFX_GROUP_ENDTAG_FN endTagFn; AIO_OFX_GROUP_ADDDATA_FN addDataFn; AIO_OFX_GROUP_ENDSUBGROUP_FN endSubGroupFn; }; #endif aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_secinfo_l.h0000664000175000017500000000245414043610745022705 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Mon Jan 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AIO_OFX_G_SECINFO_L_H #define AIO_OFX_G_SECINFO_L_H #include "ofxgroup_l.h" AIO_OFX_GROUP *AIO_OfxGroup_SECINFO_new(const char *groupName, AIO_OFX_GROUP *parent, GWEN_XML_CONTEXT *ctx); const char *AIO_OfxGroup_SECINFO_GetTicker(const AIO_OFX_GROUP *g); void AIO_OfxGroup_SECINFO_SetTicker(AIO_OFX_GROUP *g, const char *s); const char *AIO_OfxGroup_SECINFO_GetSecurityName(const AIO_OFX_GROUP *g); void AIO_OfxGroup_SECINFO_SetSecurityName(AIO_OFX_GROUP *g, const char *s); const char *AIO_OfxGroup_SECINFO_GetUniqueId(const AIO_OFX_GROUP *g); void AIO_OfxGroup_SECINFO_SetUniqueId(AIO_OFX_GROUP *g, const char *s); const char *AIO_OfxGroup_SECINFO_GetNameSpace(const AIO_OFX_GROUP *g); void AIO_OfxGroup_SECINFO_SetNameSpace(AIO_OFX_GROUP *g, const char *s); #endif aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_bankacc.c0000664000175000017500000001307714043610745022324 00000000000000/*************************************************************************** begin : Mon Jan 07 2008 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "g_bankacc_p.h" #include "ofxxmlctx_l.h" #include "aqbanking/i18n_l.h" #include "g_generic_l.h" #include "g_ignore_l.h" #include #include #include #include GWEN_INHERIT(AIO_OFX_GROUP, AIO_OFX_GROUP_BANKACC) AIO_OFX_GROUP *AIO_OfxGroup_BANKACC_new(const char *groupName, AIO_OFX_GROUP *parent, GWEN_XML_CONTEXT *ctx) { AIO_OFX_GROUP *g; AIO_OFX_GROUP_BANKACC *xg; /* create base group */ g=AIO_OfxGroup_Generic_new(groupName, parent, ctx); assert(g); GWEN_NEW_OBJECT(AIO_OFX_GROUP_BANKACC, xg); assert(xg); GWEN_INHERIT_SETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_BANKACC, g, xg, AIO_OfxGroup_BANKACC_FreeData); /* set virtual functions */ AIO_OfxGroup_SetStartTagFn(g, AIO_OfxGroup_BANKACC_StartTag); AIO_OfxGroup_SetAddDataFn(g, AIO_OfxGroup_BANKACC_AddData); if (strcasecmp(groupName, "CCACCTFROM")==0 || strcasecmp(groupName, "CCACCTTO")==0) xg->accType=strdup("CREDITCARD"); else if (strcasecmp(groupName, "INVACCTFROM")==0 || strcasecmp(groupName, "INVACCTTO")==0) xg->accType=strdup("MONEYMRKT"); return g; } GWENHYWFAR_CB void AIO_OfxGroup_BANKACC_FreeData(void *bp, void *p) { AIO_OFX_GROUP_BANKACC *xg; xg=(AIO_OFX_GROUP_BANKACC *)p; assert(xg); free(xg->currentElement); free(xg->bankId); free(xg->accId); free(xg->accType); GWEN_FREE_OBJECT(xg); } const char *AIO_OfxGroup_BANKACC_GetBankId(const AIO_OFX_GROUP *g) { AIO_OFX_GROUP_BANKACC *xg; assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_BANKACC, g); assert(xg); return xg->bankId; } void AIO_OfxGroup_BANKACC_SetBankId(AIO_OFX_GROUP *g, const char *s) { AIO_OFX_GROUP_BANKACC *xg; assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_BANKACC, g); assert(xg); free(xg->bankId); if (s) xg->bankId=strdup(s); else xg->bankId=NULL; } const char *AIO_OfxGroup_BANKACC_GetAccId(const AIO_OFX_GROUP *g) { AIO_OFX_GROUP_BANKACC *xg; assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_BANKACC, g); assert(xg); return xg->accId; } void AIO_OfxGroup_BANKACC_SetAccId(AIO_OFX_GROUP *g, const char *s) { AIO_OFX_GROUP_BANKACC *xg; assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_BANKACC, g); assert(xg); free(xg->accId); if (s) xg->accId=strdup(s); else xg->accId=NULL; } const char *AIO_OfxGroup_BANKACC_GetAccType(const AIO_OFX_GROUP *g) { AIO_OFX_GROUP_BANKACC *xg; assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_BANKACC, g); assert(xg); return xg->accType; } void AIO_OfxGroup_BANKACC_SetAccType(AIO_OFX_GROUP *g, const char *s) { AIO_OFX_GROUP_BANKACC *xg; assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_BANKACC, g); assert(xg); free(xg->accType); if (s) xg->accType=strdup(s); else xg->accType=NULL; } int AIO_OfxGroup_BANKACC_StartTag(AIO_OFX_GROUP *g, const char *tagName) { AIO_OFX_GROUP_BANKACC *xg; //GWEN_XML_CONTEXT *ctx; assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_BANKACC, g); assert(xg); //ctx=AIO_OfxGroup_GetXmlContext(g); free(xg->currentElement); xg->currentElement=NULL; if (strcasecmp(tagName, "BANKID")==0 || strcasecmp(tagName, "ACCTID")==0 || strcasecmp(tagName, "ACCTTYPE")==0 || strcasecmp(tagName, "BRANCHID")==0 || strcasecmp(tagName, "ACCTKEY")==0 || strcasecmp(tagName, "BROKERID")==0) { xg->currentElement=strdup(tagName); } else { DBG_WARN(AQBANKING_LOGDOMAIN, "Ignoring tag [%s]", tagName); } return 0; } int AIO_OfxGroup_BANKACC_AddData(AIO_OFX_GROUP *g, const char *data) { AIO_OFX_GROUP_BANKACC *xg; assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_BANKACC, g); assert(xg); if (xg->currentElement) { GWEN_BUFFER *buf; int rv; const char *s; buf=GWEN_Buffer_new(0, strlen(data), 0, 1); rv=AIO_OfxXmlCtx_SanitizeData(AIO_OfxGroup_GetXmlContext(g), data, buf); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(buf); return rv; } s=GWEN_Buffer_GetStart(buf); if (*s) { DBG_INFO(AQBANKING_LOGDOMAIN, "AddData: %s=[%s]", xg->currentElement, s); if (strcasecmp(xg->currentElement, "BANKID")==0) AIO_OfxGroup_BANKACC_SetBankId(g, GWEN_Buffer_GetStart(buf)); else if (strcasecmp(xg->currentElement, "BROKERID")==0) AIO_OfxGroup_BANKACC_SetBankId(g, GWEN_Buffer_GetStart(buf)); else if (strcasecmp(xg->currentElement, "ACCTID")==0) AIO_OfxGroup_BANKACC_SetAccId(g, GWEN_Buffer_GetStart(buf)); else if (strcasecmp(xg->currentElement, "ACCTTYPE")==0) AIO_OfxGroup_BANKACC_SetAccType(g, GWEN_Buffer_GetStart(buf)); else { DBG_INFO(AQBANKING_LOGDOMAIN, "Ignoring data for unknown element [%s]", xg->currentElement); } } GWEN_Buffer_free(buf); } return 0; } aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_invpos_l.h0000664000175000017500000000145614043610745022576 00000000000000/*************************************************************************** begin : Mon Jan 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AIO_OFX_G_INVPOS_L_H #define AIO_OFX_G_INVPOS_L_H #include "ofxgroup_l.h" #include AIO_OFX_GROUP *AIO_OfxGroup_INVPOS_new(const char *groupName, AIO_OFX_GROUP *parent, GWEN_XML_CONTEXT *ctx); AB_SECURITY *AIO_OfxGroup_INVPOS_TakeSecurity(const AIO_OFX_GROUP *g); #endif aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_seclist_p.h0000664000175000017500000000124114043610745022722 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Mon Jan 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AIO_OFX_G_SECLIST_P_H #define AIO_OFX_G_SECLIST_P_H #include "g_seclist_l.h" static int AIO_OfxGroup_SECLIST_StartTag(AIO_OFX_GROUP *g, const char *tagName); #endif aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_stockinfo.c0000664000175000017500000000526614043610745022742 00000000000000/*************************************************************************** begin : Mon Jan 07 2008 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "g_stockinfo_p.h" #include "ofxxmlctx_l.h" #include "aqbanking/i18n_l.h" #include "g_generic_l.h" #include "g_ignore_l.h" #include "g_secinfo_l.h" #include #include #include #include AIO_OFX_GROUP *AIO_OfxGroup_STOCKINFO_new(const char *groupName, AIO_OFX_GROUP *parent, GWEN_XML_CONTEXT *ctx) { AIO_OFX_GROUP *g; /* create base group */ g=AIO_OfxGroup_Generic_new(groupName, parent, ctx); assert(g); /* set virtual functions */ AIO_OfxGroup_SetStartTagFn(g, AIO_OfxGroup_STOCKINFO_StartTag); AIO_OfxGroup_SetEndSubGroupFn(g, AIO_OfxGroup_STOCKINFO_EndSubGroup); return g; } int AIO_OfxGroup_STOCKINFO_StartTag(AIO_OFX_GROUP *g, const char *tagName) { GWEN_XML_CONTEXT *ctx; AIO_OFX_GROUP *gNew=NULL; assert(g); ctx=AIO_OfxGroup_GetXmlContext(g); if (strcasecmp(tagName, "SECINFO")==0) { gNew=AIO_OfxGroup_SECINFO_new(tagName, g, ctx); } else { DBG_WARN(AQBANKING_LOGDOMAIN, "Ignoring group [%s]", tagName); gNew=AIO_OfxGroup_Ignore_new(tagName, g, ctx); } if (gNew) { AIO_OfxXmlCtx_SetCurrentGroup(ctx, gNew); GWEN_XmlCtx_IncDepth(ctx); } return 0; } int AIO_OfxGroup_STOCKINFO_EndSubGroup(AIO_OFX_GROUP *g, AIO_OFX_GROUP *sg) { const char *s; GWEN_XML_CONTEXT *ctx; assert(g); ctx=AIO_OfxGroup_GetXmlContext(g); assert(ctx); s=AIO_OfxGroup_GetGroupName(sg); if (strcasecmp(s, "SECINFO")==0) { AB_SECURITY *sec=NULL; const char *uid; const char *ns; uid=AIO_OfxGroup_SECINFO_GetUniqueId(sg); ns=AIO_OfxGroup_SECINFO_GetNameSpace(sg); if (uid && ns) sec=AB_ImExporterContext_FindSecurity(AIO_OfxXmlCtx_GetIoContext(ctx), ns, uid); if (sec==NULL) { sec=AB_Security_new(); AB_Security_SetUniqueId(sec, uid); AB_Security_SetNameSpace(sec, ns); AB_ImExporterContext_AddSecurity(AIO_OfxXmlCtx_GetIoContext(ctx), sec); } AB_Security_SetName(sec, AIO_OfxGroup_SECINFO_GetSecurityName(sg)); AB_Security_SetTickerSymbol(sec, AIO_OfxGroup_SECINFO_GetTicker(sg)); } return 0; } aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_banktran.c0000664000175000017500000001106514043610745022535 00000000000000/*************************************************************************** begin : Mon Jan 07 2008 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "g_banktran_p.h" #include "ofxxmlctx_l.h" #include "aqbanking/i18n_l.h" #include "g_generic_l.h" #include "g_ignore_l.h" #include "g_bankacc_l.h" #include "g_stmtrn_l.h" #include #include #include #include GWEN_INHERIT(AIO_OFX_GROUP, AIO_OFX_GROUP_BANKTRAN) AIO_OFX_GROUP *AIO_OfxGroup_BANKTRAN_new(const char *groupName, AIO_OFX_GROUP *parent, GWEN_XML_CONTEXT *ctx) { AIO_OFX_GROUP *g; AIO_OFX_GROUP_BANKTRAN *xg; /* create base group */ g=AIO_OfxGroup_Generic_new(groupName, parent, ctx); assert(g); GWEN_NEW_OBJECT(AIO_OFX_GROUP_BANKTRAN, xg); assert(xg); GWEN_INHERIT_SETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_BANKTRAN, g, xg, AIO_OfxGroup_BANKTRAN_FreeData); xg->transaction=AB_Transaction_new(); /* set virtual functions */ AIO_OfxGroup_SetStartTagFn(g, AIO_OfxGroup_BANKTRAN_StartTag); AIO_OfxGroup_SetAddDataFn(g, AIO_OfxGroup_BANKTRAN_AddData); AIO_OfxGroup_SetEndSubGroupFn(g, AIO_OfxGroup_BANKTRAN_EndSubGroup); return g; } GWENHYWFAR_CB void AIO_OfxGroup_BANKTRAN_FreeData(void *bp, void *p) { AIO_OFX_GROUP_BANKTRAN *xg; xg=(AIO_OFX_GROUP_BANKTRAN *)p; assert(xg); AB_Transaction_free(xg->transaction); free(xg->currentElement); GWEN_FREE_OBJECT(xg); } AB_TRANSACTION *AIO_OfxGroup_BANKTRAN_TakeTransaction(const AIO_OFX_GROUP *g) { AIO_OFX_GROUP_BANKTRAN *xg; AB_TRANSACTION *t; assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_BANKTRAN, g); assert(xg); t=xg->transaction; xg->transaction=NULL; return t; } int AIO_OfxGroup_BANKTRAN_StartTag(AIO_OFX_GROUP *g, const char *tagName) { AIO_OFX_GROUP_BANKTRAN *xg; GWEN_XML_CONTEXT *ctx; AIO_OFX_GROUP *gNew=NULL; assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_BANKTRAN, g); assert(xg); ctx=AIO_OfxGroup_GetXmlContext(g); if (strcasecmp(tagName, "STMTTRN")==0) { gNew=AIO_OfxGroup_STMTRN_new(tagName, g, ctx); } else if (strcasecmp(tagName, "SUBACCTFUND")==0) { free(xg->currentElement); xg->currentElement=strdup(tagName); } else { DBG_WARN(AQBANKING_LOGDOMAIN, "Ignoring group [%s]", tagName); gNew=AIO_OfxGroup_Ignore_new(tagName, g, ctx); } if (gNew) { AIO_OfxXmlCtx_SetCurrentGroup(ctx, gNew); GWEN_XmlCtx_IncDepth(ctx); } return 0; } int AIO_OfxGroup_BANKTRAN_AddData(AIO_OFX_GROUP *g, const char *data) { AIO_OFX_GROUP_BANKTRAN *xg; assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_BANKTRAN, g); assert(xg); if (xg->currentElement) { GWEN_BUFFER *buf; int rv; const char *s; buf=GWEN_Buffer_new(0, strlen(data), 0, 1); rv=AIO_OfxXmlCtx_SanitizeData(AIO_OfxGroup_GetXmlContext(g), data, buf); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(buf); return rv; } s=GWEN_Buffer_GetStart(buf); if (*s) { DBG_INFO(AQBANKING_LOGDOMAIN, "AddData: %s=[%s]", xg->currentElement, s); if (strcasecmp(xg->currentElement, "SUBACCTFUND")==0) { AB_Transaction_SetRemoteName(xg->transaction, s); } else { DBG_INFO(AQBANKING_LOGDOMAIN, "Ignoring data for unknown element [%s]", xg->currentElement); } } GWEN_Buffer_free(buf); } return 0; } int AIO_OfxGroup_BANKTRAN_EndSubGroup(AIO_OFX_GROUP *g, AIO_OFX_GROUP *sg) { AIO_OFX_GROUP_BANKTRAN *xg; const char *s; GWEN_XML_CONTEXT *ctx; assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_BANKTRAN, g); assert(xg); ctx=AIO_OfxGroup_GetXmlContext(g); assert(ctx); s=AIO_OfxGroup_GetGroupName(sg); if (strcasecmp(s, "STMTTRN")==0) { AB_TRANSACTION *t; t=AIO_OfxGroup_STMTRN_TakeTransaction(sg); if (t) { DBG_INFO(AQBANKING_LOGDOMAIN, "Setting transaction"); AB_Transaction_free(xg->transaction); xg->transaction=t; } } else { DBG_WARN(AQBANKING_LOGDOMAIN, "Ignoring group [%s]", s); } return 0; } aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_banktran_l.h0000664000175000017500000000143214043610745023052 00000000000000/*************************************************************************** begin : Mon Jan 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AIO_OFX_G_BANKTRAN_L_H #define AIO_OFX_G_BANKTRAN_L_H #include "ofxgroup_l.h" AIO_OFX_GROUP *AIO_OfxGroup_BANKTRAN_new(const char *groupName, AIO_OFX_GROUP *parent, GWEN_XML_CONTEXT *ctx); AB_TRANSACTION *AIO_OfxGroup_BANKTRAN_TakeTransaction(const AIO_OFX_GROUP *g); #endif aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_bankmsgsrsv1.c0000664000175000017500000000351614043610745023360 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Mon Jan 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "g_bankmsgsrsv1_p.h" #include "ofxxmlctx_l.h" #include "g_generic_l.h" #include "g_ignore_l.h" #include "g_stmttrnrs_l.h" #include "g_acctinfotrnrs_l.h" #include #include AIO_OFX_GROUP *AIO_OfxGroup_BANKMSGSRSV1_new(const char *groupName, AIO_OFX_GROUP *parent, GWEN_XML_CONTEXT *ctx) { AIO_OFX_GROUP *g; /* create base group */ g=AIO_OfxGroup_Generic_new(groupName, parent, ctx); assert(g); /* set virtual functions */ AIO_OfxGroup_SetStartTagFn(g, AIO_OfxGroup_BANKMSGSRSV1_StartTag); return g; } int AIO_OfxGroup_BANKMSGSRSV1_StartTag(AIO_OFX_GROUP *g, const char *tagName) { AIO_OFX_GROUP *gNew=NULL; GWEN_XML_CONTEXT *ctx; assert(g); ctx=AIO_OfxGroup_GetXmlContext(g); if (strcasecmp(tagName, "STMTTRNRS")==0) { gNew=AIO_OfxGroup_STMTTRNRS_new(tagName, g, ctx); } else if (strcasecmp(tagName, "ACCTINFOTRNRS")==0) { gNew=AIO_OfxGroup_ACCTINFOTRNRS_new(tagName, g, ctx); } else { DBG_WARN(AQBANKING_LOGDOMAIN, "Ignoring group [%s]", tagName); gNew=AIO_OfxGroup_Ignore_new(tagName, g, ctx); } if (gNew) { AIO_OfxXmlCtx_SetCurrentGroup(ctx, gNew); GWEN_XmlCtx_IncDepth(ctx); } return 0; } aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_income_l.h0000664000175000017500000000157214043610745022531 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Mon Jan 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de copyright : (C) 2013 by Paul Conrady email : c.p.conrady@gmail.com *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AIO_OFX_G_INCOME_L_H #define AIO_OFX_G_INCOME_L_H #include "ofxgroup_l.h" AIO_OFX_GROUP *AIO_OfxGroup_INCOME_new(const char *groupName, AIO_OFX_GROUP *parent, GWEN_XML_CONTEXT *ctx); AB_TRANSACTION *AIO_OfxGroup_INCOME_TakeTransaction(const AIO_OFX_GROUP *g); #endif aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_sonrs_p.h0000664000175000017500000000122714043610745022424 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Mon Jan 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AIO_OFX_G_SONRS_P_H #define AIO_OFX_G_SONRS_P_H #include "g_sonrs_l.h" static int AIO_OfxGroup_SONRS_StartTag(AIO_OFX_GROUP *g, const char *tagName); #endif aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_buystock_l.h0000664000175000017500000000160714043610745023121 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Mon Jan 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de copyright : (C) 2013 by Paul Conrady email : c.p.conrady@gmail.com *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AIO_OFX_G_BUYSTOCK_L_H #define AIO_OFX_G_BUYSTOCK_L_H #include "ofxgroup_l.h" AIO_OFX_GROUP *AIO_OfxGroup_BUYSTOCK_new(const char *groupName, AIO_OFX_GROUP *parent, GWEN_XML_CONTEXT *ctx); AB_TRANSACTION *AIO_OfxGroup_BUYSTOCK_TakeTransaction(const AIO_OFX_GROUP *g); #endif aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_signonmsgsrsv1_l.h0000664000175000017500000000141014043610745024251 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Mon Jan 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AIO_OFX_G_SIGNONMSGSRSV1_L_H #define AIO_OFX_G_SIGNONMSGSRSV1_L_H #include "ofxgroup_l.h" AIO_OFX_GROUP *AIO_OfxGroup_SIGNONMSGSRSV1_new(const char *groupName, AIO_OFX_GROUP *parent, GWEN_XML_CONTEXT *ctx); #endif aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_reinvest_l.h0000664000175000017500000000160614043610745023114 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Mon Jan 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de copyright : (C) 2013 by Paul Conrady email : c.p.conrady@gmail.com *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AIO_OFX_G_REINVEST_L_H #define AIO_OFX_G_REINVEST_L_H #include "ofxgroup_l.h" AIO_OFX_GROUP *AIO_OfxGroup_REINVEST_new(const char *groupName, AIO_OFX_GROUP *parent, GWEN_XML_CONTEXT *ctx); AB_TRANSACTION *AIO_OfxGroup_REINVEST_TakeTransaction(const AIO_OFX_GROUP *g); #endif aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_invposlist.c0000664000175000017500000000362114043610745023146 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Mon Jan 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de copyright : (C) 2013 by Paul Conrady email : c.p.conrady@gmail.com *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "g_invposlist_p.h" #include "ofxxmlctx_l.h" #include "g_generic_l.h" #include "g_ignore_l.h" #include "g_posstock_l.h" #include "g_posmf_l.h" #include #include #include AIO_OFX_GROUP *AIO_OfxGroup_INVPOSLIST_new(const char *groupName, AIO_OFX_GROUP *parent, GWEN_XML_CONTEXT *ctx) { AIO_OFX_GROUP *g; /* create base group */ g=AIO_OfxGroup_Generic_new(groupName, parent, ctx); assert(g); /* set virtual functions */ AIO_OfxGroup_SetStartTagFn(g, AIO_OfxGroup_INVPOSLIST_StartTag); return g; } int AIO_OfxGroup_INVPOSLIST_StartTag(AIO_OFX_GROUP *g, const char *tagName) { AIO_OFX_GROUP *gNew=NULL; GWEN_XML_CONTEXT *ctx; assert(g); ctx=AIO_OfxGroup_GetXmlContext(g); if (strcasecmp(tagName, "POSSTOCK")==0) { gNew=AIO_OfxGroup_POSSTOCK_new(tagName, g, ctx); } else if (strcasecmp(tagName, "POSMF")==0) { gNew=AIO_OfxGroup_POSMF_new(tagName, g, ctx); } else { DBG_WARN(AQBANKING_LOGDOMAIN, "Ignoring group [%s]", tagName); gNew=AIO_OfxGroup_Ignore_new(tagName, g, ctx); } if (gNew) { AIO_OfxXmlCtx_SetCurrentGroup(ctx, gNew); GWEN_XmlCtx_IncDepth(ctx); } return 0; } aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_invstmtmsgsrsv1_p.h0000664000175000017500000000131114043610745024464 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Mon Jan 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AIO_OFX_G_INVSTMTMSGSRSV1_P_H #define AIO_OFX_G_INVSTMTMSGSRSV1_P_H #include "g_invstmtmsgsrsv1_l.h" static int AIO_OfxGroup_INVSTMTMSGSRSV1_StartTag(AIO_OFX_GROUP *g, const char *tagName); #endif aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_generic_p.h0000664000175000017500000000142514043610745022674 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Mon Jan 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AIO_OFX_G_GENERIC_P_H #define AIO_OFX_G_GENERIC_P_H #include "g_generic_l.h" static int AIO_OfxGroup_Generic_EndTag(AIO_OFX_GROUP *g, const char *tagName); static int AIO_OfxGroup_Generic_AddData(AIO_OFX_GROUP *g, const char *data); static int AIO_OfxGroup_Generic_EndSubGroup(AIO_OFX_GROUP *g, AIO_OFX_GROUP *sg); #endif aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_banktranlist_p.h0000664000175000017500000000213214043610745023750 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Mon Jan 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AIO_OFX_G_BANKTRANLIST_P_H #define AIO_OFX_G_BANKTRANLIST_P_H #include "g_banktranlist_l.h" typedef struct AIO_OFX_GROUP_BANKTRANLIST AIO_OFX_GROUP_BANKTRANLIST; struct AIO_OFX_GROUP_BANKTRANLIST { char *currentElement; char *dtstart; char *dtend; AB_TRANSACTION_LIST2 *transactionList; }; static void GWENHYWFAR_CB AIO_OfxGroup_BANKTRANLIST_FreeData(void *bp, void *p); static int AIO_OfxGroup_BANKTRANLIST_StartTag(AIO_OFX_GROUP *g, const char *tagName); static int AIO_OfxGroup_BANKTRANLIST_EndSubGroup(AIO_OFX_GROUP *g, AIO_OFX_GROUP *sg); static int AIO_OfxGroup_BANKTRANLIST_AddData(AIO_OFX_GROUP *g, const char *data); #endif aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_invtran_p.h0000664000175000017500000000201214043610745022732 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Mon Jan 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de copyright : (C) 2013 by Paul Conrady email : c.p.conrady@gmail.com *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AIO_OFX_G_INVTRAN_P_H #define AIO_OFX_G_INVTRAN_P_H #include "g_invtran_l.h" typedef struct AIO_OFX_GROUP_INVTRAN AIO_OFX_GROUP_INVTRAN; struct AIO_OFX_GROUP_INVTRAN { char *currentElement; char *currency; AB_TRANSACTION *transaction; }; static void GWENHYWFAR_CB AIO_OfxGroup_INVTRAN_FreeData(void *bp, void *p); static int AIO_OfxGroup_INVTRAN_StartTag(AIO_OFX_GROUP *g, const char *tagName); static int AIO_OfxGroup_INVTRAN_AddData(AIO_OFX_GROUP *g, const char *data); #endif aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/ofxxmlctx_p.h0000664000175000017500000000301514043610745023003 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Mon Jan 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AIO_OFX_OFXXMLCTX_P_H #define AIO_OFX_OFXXMLCTX_P_H #include "ofxxmlctx_l.h" typedef struct AIO_OFX_XMLCTX AIO_OFX_XMLCTX; struct AIO_OFX_XMLCTX { /* answers for SIGNON */ int resultCode; char *resultSeverity; AB_IMEXPORTER_CONTEXT *ioContext; AIO_OFX_GROUP *currentGroup; char *currentTagName; char *charset; int startDepthOfOfxElement; }; static void GWENHYWFAR_CB AIO_OfxXmlCtx_FreeData(void *bp, void *p); static int AIO_OfxXmlCtx_StartTag(GWEN_XML_CONTEXT *ctx, const char *tagName); static int AIO_OfxXmlCtx_EndTag(GWEN_XML_CONTEXT *ctx, int closing); static int AIO_OfxXmlCtx_AddData(GWEN_XML_CONTEXT *ctx, const char *data); static int AIO_OfxXmlCtx_AddComment(GWEN_XML_CONTEXT *ctx, const char *data); static int AIO_OfxXmlCtx_AddAttr(GWEN_XML_CONTEXT *ctx, const char *attrName, const char *attrData); static int AIO_OfxXmlCtx_CleanupData(GWEN_XML_CONTEXT *ctx, const char *data, GWEN_BUFFER *buf); #endif aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_bankacc_p.h0000664000175000017500000000167414043610745022650 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Mon Jan 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AIO_OFX_G_BANKACC_P_H #define AIO_OFX_G_BANKACC_P_H #include "g_bankacc_l.h" typedef struct AIO_OFX_GROUP_BANKACC AIO_OFX_GROUP_BANKACC; struct AIO_OFX_GROUP_BANKACC { char *bankId; char *accId; char *accType; char *currentElement; }; static void GWENHYWFAR_CB AIO_OfxGroup_BANKACC_FreeData(void *bp, void *p); static int AIO_OfxGroup_BANKACC_StartTag(AIO_OFX_GROUP *g, const char *tagName); static int AIO_OfxGroup_BANKACC_AddData(AIO_OFX_GROUP *g, const char *data); #endif aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_bal_l.h0000664000175000017500000000201314043610745022004 00000000000000/*************************************************************************** begin : Mon Jan 07 2008 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AIO_OFX_G_BAL_L_H #define AIO_OFX_G_BAL_L_H #include "ofxgroup_l.h" #include #include AIO_OFX_GROUP *AIO_OfxGroup_BAL_new(const char *groupName, AIO_OFX_GROUP *parent, GWEN_XML_CONTEXT *ctx); const AB_VALUE *AIO_OfxGroup_BAL_GetValue(const AIO_OFX_GROUP *g); void AIO_OfxGroup_BAL_SetValue(AIO_OFX_GROUP *g, const AB_VALUE *v); const GWEN_DATE *AIO_OfxGroup_BAL_GetDate(const AIO_OFX_GROUP *g); void AIO_OfxGroup_BAL_SetDate(AIO_OFX_GROUP *g, const GWEN_DATE *dt); #endif aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_mfinfo_l.h0000664000175000017500000000145514043610745022535 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Mon Jan 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de copyright : (C) 2013 by Paul Conrady email : c.p.conrady@gmail.com *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AIO_OFX_G_MFINFO_L_H #define AIO_OFX_G_MFINFO_L_H #include "ofxgroup_l.h" AIO_OFX_GROUP *AIO_OfxGroup_MFINFO_new(const char *groupName, AIO_OFX_GROUP *parent, GWEN_XML_CONTEXT *ctx); #endif aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_acctinfo_p.h0000664000175000017500000000212714043610745023046 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Mon Jan 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AIO_OFX_G_ACCTINFO_P_H #define AIO_OFX_G_ACCTINFO_P_H #include "g_acctinfo_l.h" typedef struct AIO_OFX_GROUP_ACCTINFO AIO_OFX_GROUP_ACCTINFO; struct AIO_OFX_GROUP_ACCTINFO { char *currentElement; char *description; char *bankId; char *accId; char *accType; AB_IMEXPORTER_ACCOUNTINFO *accountInfo; }; static void GWENHYWFAR_CB AIO_OfxGroup_ACCTINFO_FreeData(void *bp, void *p); static int AIO_OfxGroup_ACCTINFO_StartTag(AIO_OFX_GROUP *g, const char *tagName); static int AIO_OfxGroup_ACCTINFO_EndSubGroup(AIO_OFX_GROUP *g, AIO_OFX_GROUP *sg); static int AIO_OfxGroup_ACCTINFO_AddData(AIO_OFX_GROUP *g, const char *data); #endif aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/Makefile.in0000644000175000017500000010345215037736026022335 00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/libs/plugins/imexporters/ofx/parser ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/distri.m4 $(top_srcdir)/m4/gwenhywfar.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/os.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libofxparser_la_LIBADD = am_libofxparser_la_OBJECTS = ofxxmlctx.lo ofxgroup.lo g_acctinfo.lo \ g_acctinfors.lo g_acctinfotrnrs.lo g_bal.lo g_bankacc.lo \ g_bankacctinfo.lo g_bankmsgsrsv1.lo g_banktran.lo \ g_banktranlist.lo g_buymf.lo g_buystock.lo \ g_creditcardmsgsrsv1.lo g_document.lo g_generic.lo g_ignore.lo \ g_income.lo g_invacc.lo g_invbuy.lo g_invpos.lo \ g_invposlist.lo g_invstmtmsgsrsv1.lo g_invstmtrs.lo \ g_invstmttrnrs.lo g_invtran.lo g_invtranlist.lo g_mfinfo.lo \ g_ofx.lo g_posmf.lo g_posstock.lo g_reinvest.lo g_secid.lo \ g_secinfo.lo g_seclist.lo g_seclistmsgsrsv1.lo \ g_signonmsgsrsv1.lo g_signupmsgsrsv1.lo g_sonrs.lo g_status.lo \ g_stmtrn.lo g_stmtrs.lo g_stmttrnrs.lo g_stockinfo.lo libofxparser_la_OBJECTS = $(am_libofxparser_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/g_acctinfo.Plo \ ./$(DEPDIR)/g_acctinfors.Plo ./$(DEPDIR)/g_acctinfotrnrs.Plo \ ./$(DEPDIR)/g_bal.Plo ./$(DEPDIR)/g_bankacc.Plo \ ./$(DEPDIR)/g_bankacctinfo.Plo ./$(DEPDIR)/g_bankmsgsrsv1.Plo \ ./$(DEPDIR)/g_banktran.Plo ./$(DEPDIR)/g_banktranlist.Plo \ ./$(DEPDIR)/g_buymf.Plo ./$(DEPDIR)/g_buystock.Plo \ ./$(DEPDIR)/g_creditcardmsgsrsv1.Plo \ ./$(DEPDIR)/g_document.Plo ./$(DEPDIR)/g_generic.Plo \ ./$(DEPDIR)/g_ignore.Plo ./$(DEPDIR)/g_income.Plo \ ./$(DEPDIR)/g_invacc.Plo ./$(DEPDIR)/g_invbuy.Plo \ ./$(DEPDIR)/g_invpos.Plo ./$(DEPDIR)/g_invposlist.Plo \ ./$(DEPDIR)/g_invstmtmsgsrsv1.Plo ./$(DEPDIR)/g_invstmtrs.Plo \ ./$(DEPDIR)/g_invstmttrnrs.Plo ./$(DEPDIR)/g_invtran.Plo \ ./$(DEPDIR)/g_invtranlist.Plo ./$(DEPDIR)/g_mfinfo.Plo \ ./$(DEPDIR)/g_ofx.Plo ./$(DEPDIR)/g_posmf.Plo \ ./$(DEPDIR)/g_posstock.Plo ./$(DEPDIR)/g_reinvest.Plo \ ./$(DEPDIR)/g_secid.Plo ./$(DEPDIR)/g_secinfo.Plo \ ./$(DEPDIR)/g_seclist.Plo ./$(DEPDIR)/g_seclistmsgsrsv1.Plo \ ./$(DEPDIR)/g_signonmsgsrsv1.Plo \ ./$(DEPDIR)/g_signupmsgsrsv1.Plo ./$(DEPDIR)/g_sonrs.Plo \ ./$(DEPDIR)/g_status.Plo ./$(DEPDIR)/g_stmtrn.Plo \ ./$(DEPDIR)/g_stmtrs.Plo ./$(DEPDIR)/g_stmttrnrs.Plo \ ./$(DEPDIR)/g_stockinfo.Plo ./$(DEPDIR)/ofxgroup.Plo \ ./$(DEPDIR)/ofxxmlctx.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libofxparser_la_SOURCES) DIST_SOURCES = $(libofxparser_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac HEADERS = $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADD_ACLOCAL_FLAGS = @ADD_ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AQBANKING_CLI_VERSION_STRING = @AQBANKING_CLI_VERSION_STRING@ AQBANKING_FINTS_VERSION_STRING = @AQBANKING_FINTS_VERSION_STRING@ AQBANKING_SO_AGE = @AQBANKING_SO_AGE@ AQBANKING_SO_CURRENT = @AQBANKING_SO_CURRENT@ AQBANKING_SO_EFFECTIVE = @AQBANKING_SO_EFFECTIVE@ AQBANKING_SO_REVISION = @AQBANKING_SO_REVISION@ AQBANKING_VERSION_BUILD = @AQBANKING_VERSION_BUILD@ AQBANKING_VERSION_FULL_STRING = @AQBANKING_VERSION_FULL_STRING@ AQBANKING_VERSION_MAJOR = @AQBANKING_VERSION_MAJOR@ AQBANKING_VERSION_MINOR = @AQBANKING_VERSION_MINOR@ AQBANKING_VERSION_PATCHLEVEL = @AQBANKING_VERSION_PATCHLEVEL@ AQBANKING_VERSION_RELEASE_STRING = @AQBANKING_VERSION_RELEASE_STRING@ AQBANKING_VERSION_STRING = @AQBANKING_VERSION_STRING@ AQBANKING_VERSION_TAG = @AQBANKING_VERSION_TAG@ AQEBICS_CFLAGS = @AQEBICS_CFLAGS@ AQEBICS_LIBS = @AQEBICS_LIBS@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATETIME = @DATETIME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_EXCLUDE_PATTERNS = @DOXYGEN_EXCLUDE_PATTERNS@ DOXYGEN_FILE_PATTERNS = @DOXYGEN_FILE_PATTERNS@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENGUI_GTK2_CFLAGS = @GWENGUI_GTK2_CFLAGS@ GWENGUI_GTK2_LIBS = @GWENGUI_GTK2_LIBS@ GWENHYWFAR_MINIMUM_VERSION = @GWENHYWFAR_MINIMUM_VERSION@ HAVE_GWENGUI_GTK2 = @HAVE_GWENGUI_GTK2@ HAVE_I18N = @HAVE_I18N@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIBXSLT_CFLAGS = @LIBXSLT_CFLAGS@ LIBXSLT_LIBS = @LIBXSLT_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_SUPPORTS_QT = @MSGFMT_SUPPORTS_QT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ TUTORIALS = @TUTORIALS@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XMLMERGE = @XMLMERGE@ XMLSEC_CFLAGS = @XMLSEC_CFLAGS@ XMLSEC_LIBS = @XMLSEC_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ aqbanking_backends = @aqbanking_backends@ aqbanking_cfg_searchdir = @aqbanking_cfg_searchdir@ aqbanking_data_searchdir = @aqbanking_data_searchdir@ aqbanking_headerdir = @aqbanking_headerdir@ aqbanking_headerdir_am = @aqbanking_headerdir_am@ aqbanking_includes = @aqbanking_includes@ aqbanking_internal_libs = @aqbanking_internal_libs@ aqbanking_ldflags = @aqbanking_ldflags@ aqbanking_libs = @aqbanking_libs@ aqbanking_locale_searchdir = @aqbanking_locale_searchdir@ aqbanking_modules = @aqbanking_modules@ aqbanking_pkgdatadir = @aqbanking_pkgdatadir@ aqbanking_plugin_searchdir = @aqbanking_plugin_searchdir@ aqbanking_plugindir = @aqbanking_plugindir@ aqbanking_plugins_backends_dirs = @aqbanking_plugins_backends_dirs@ aqbanking_plugins_backends_libs = @aqbanking_plugins_backends_libs@ aqbanking_plugins_bankinfo_dirs = @aqbanking_plugins_bankinfo_dirs@ aqbanking_plugins_bankinfo_libs = @aqbanking_plugins_bankinfo_libs@ aqbanking_plugins_imexporters_dirs = @aqbanking_plugins_imexporters_dirs@ aqbanking_plugins_imexporters_libs = @aqbanking_plugins_imexporters_libs@ aqbanking_plugins_parsers_dirs = @aqbanking_plugins_parsers_dirs@ aqbanking_symlinkdir = @aqbanking_symlinkdir@ aqbanking_sys_is_windows = @aqbanking_sys_is_windows@ aqbankingpp_modules = @aqbankingpp_modules@ aqebics_datadir = @aqebics_datadir@ aqebics_includes = @aqebics_includes@ aqebics_internal_libs = @aqebics_internal_libs@ aqebics_ldflags = @aqebics_ldflags@ aqebics_libs = @aqebics_libs@ aqfints_datadir = @aqfints_datadir@ aqhbci_datadir = @aqhbci_datadir@ aqhbci_includes = @aqhbci_includes@ aqhbci_internal_libs = @aqhbci_internal_libs@ aqhbci_ldflags = @aqhbci_ldflags@ aqhbci_libs = @aqhbci_libs@ aqofxconnect_includes = @aqofxconnect_includes@ aqofxconnect_internal_libs = @aqofxconnect_internal_libs@ aqofxconnect_libs = @aqofxconnect_libs@ aqpaypal_includes = @aqpaypal_includes@ aqpaypal_internal_libs = @aqpaypal_internal_libs@ aqpaypal_libs = @aqpaypal_libs@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gmp_libs = @gmp_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_dir = @gwenhywfar_dir@ gwenhywfar_has_crypt = @gwenhywfar_has_crypt@ gwenhywfar_headers = @gwenhywfar_headers@ gwenhywfar_includes = @gwenhywfar_includes@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_plugins = @gwenhywfar_plugins@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ typemaker2_exe = @typemaker2_exe@ visibility_cflags = @visibility_cflags@ with_aqebics = @with_aqebics@ with_aqhbci = @with_aqhbci@ AM_CPPFLAGS = -I$(top_srcdir)/src/libs \ -I$(top_builddir)/src/libs \ $(gwenhywfar_includes) AM_CFLAGS = -DBUILDING_AQBANKING @visibility_cflags@ noinst_LTLIBRARIES = libofxparser.la libofxparser_la_SOURCES = \ ofxxmlctx.c \ ofxgroup.c \ g_acctinfo.c \ g_acctinfors.c \ g_acctinfotrnrs.c \ g_bal.c \ g_bankacc.c \ g_bankacctinfo.c \ g_bankmsgsrsv1.c \ g_banktran.c \ g_banktranlist.c \ g_buymf.c \ g_buystock.c \ g_creditcardmsgsrsv1.c \ g_document.c \ g_generic.c \ g_ignore.c \ g_income.c \ g_invacc.c \ g_invbuy.c \ g_invpos.c \ g_invposlist.c \ g_invstmtmsgsrsv1.c \ g_invstmtrs.c \ g_invstmttrnrs.c \ g_invtran.c \ g_invtranlist.c \ g_mfinfo.c \ g_ofx.c \ g_posmf.c \ g_posstock.c \ g_reinvest.c \ g_secid.c \ g_secinfo.c \ g_seclist.c \ g_seclistmsgsrsv1.c \ g_signonmsgsrsv1.c \ g_signupmsgsrsv1.c \ g_sonrs.c \ g_status.c \ g_stmtrn.c \ g_stmtrs.c \ g_stmttrnrs.c \ g_stockinfo.c noinst_HEADERS = \ ofxxmlctx_l.h ofxxmlctx_p.h \ ofxgroup_l.h ofxgroup_p.h \ g_acctinfo_l.h g_acctinfo_p.h \ g_acctinfors_l.h g_acctinfors_p.h \ g_acctinfotrnrs_l.h g_acctinfotrnrs_p.h \ g_bal_l.h g_bal_p.h \ g_bankacc_l.h g_bankacc_p.h \ g_bankacctinfo_l.h g_bankacctinfo_p.h \ g_bankmsgsrsv1_l.h g_bankmsgsrsv1_p.h \ g_banktran_l.h g_banktran_p.h \ g_banktranlist_l.h g_banktranlist_p.h \ g_buymf_l.h g_buymf_p.h \ g_buystock_l.h g_buystock_p.h \ g_creditcardmsgsrsv1_l.h g_creditcardmsgsrsv1_p.h \ g_document_l.h g_document_p.h \ g_generic_l.h g_generic_p.h \ g_ignore_l.h g_ignore_p.h \ g_income_l.h g_income_p.h \ g_invacc_l.h g_invacc_p.h \ g_invbuy_l.h g_invbuy_p.h \ g_invpos_l.h g_invpos_p.h \ g_invposlist_l.h g_invposlist_p.h \ g_invstmtmsgsrsv1_l.h g_invstmtmsgsrsv1_p.h \ g_invstmtrs_l.h g_invstmtrs_p.h \ g_invstmttrnrs_l.h g_invstmttrnrs_p.h \ g_invtran_l.h g_invtran_p.h \ g_invtranlist_l.h g_invtranlist_p.h \ g_mfinfo_l.h g_mfinfo_p.h \ g_ofx_l.h g_ofx_p.h \ g_posmf_l.h g_posmf_p.h \ g_posstock_l.h g_posstock_p.h \ g_reinvest_l.h g_reinvest_p.h \ g_secid_l.h g_secid_p.h \ g_secinfo_l.h g_secinfo_p.h \ g_seclist_l.h g_seclist_p.h \ g_seclistmsgsrsv1_l.h g_seclistmsgsrsv1_p.h \ g_signonmsgsrsv1_l.h g_signonmsgsrsv1_p.h \ g_signupmsgsrsv1_l.h g_signupmsgsrsv1_p.h \ g_sonrs_l.h g_sonrs_p.h \ g_status_l.h g_status_p.h \ g_stmtrn_l.h g_stmtrn_p.h \ g_stmtrs_l.h g_stmtrs_p.h \ g_stmttrnrs_l.h g_stmttrnrs_p.h \ g_stockinfo_l.h g_stockinfo_p.h all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libs/plugins/imexporters/ofx/parser/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libs/plugins/imexporters/ofx/parser/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libofxparser.la: $(libofxparser_la_OBJECTS) $(libofxparser_la_DEPENDENCIES) $(EXTRA_libofxparser_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libofxparser_la_OBJECTS) $(libofxparser_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/g_acctinfo.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/g_acctinfors.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/g_acctinfotrnrs.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/g_bal.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/g_bankacc.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/g_bankacctinfo.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/g_bankmsgsrsv1.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/g_banktran.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/g_banktranlist.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/g_buymf.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/g_buystock.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/g_creditcardmsgsrsv1.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/g_document.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/g_generic.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/g_ignore.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/g_income.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/g_invacc.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/g_invbuy.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/g_invpos.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/g_invposlist.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/g_invstmtmsgsrsv1.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/g_invstmtrs.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/g_invstmttrnrs.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/g_invtran.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/g_invtranlist.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/g_mfinfo.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/g_ofx.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/g_posmf.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/g_posstock.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/g_reinvest.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/g_secid.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/g_secinfo.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/g_seclist.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/g_seclistmsgsrsv1.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/g_signonmsgsrsv1.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/g_signupmsgsrsv1.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/g_sonrs.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/g_status.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/g_stmtrn.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/g_stmtrs.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/g_stmttrnrs.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/g_stockinfo.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ofxgroup.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ofxxmlctx.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/g_acctinfo.Plo -rm -f ./$(DEPDIR)/g_acctinfors.Plo -rm -f ./$(DEPDIR)/g_acctinfotrnrs.Plo -rm -f ./$(DEPDIR)/g_bal.Plo -rm -f ./$(DEPDIR)/g_bankacc.Plo -rm -f ./$(DEPDIR)/g_bankacctinfo.Plo -rm -f ./$(DEPDIR)/g_bankmsgsrsv1.Plo -rm -f ./$(DEPDIR)/g_banktran.Plo -rm -f ./$(DEPDIR)/g_banktranlist.Plo -rm -f ./$(DEPDIR)/g_buymf.Plo -rm -f ./$(DEPDIR)/g_buystock.Plo -rm -f ./$(DEPDIR)/g_creditcardmsgsrsv1.Plo -rm -f ./$(DEPDIR)/g_document.Plo -rm -f ./$(DEPDIR)/g_generic.Plo -rm -f ./$(DEPDIR)/g_ignore.Plo -rm -f ./$(DEPDIR)/g_income.Plo -rm -f ./$(DEPDIR)/g_invacc.Plo -rm -f ./$(DEPDIR)/g_invbuy.Plo -rm -f ./$(DEPDIR)/g_invpos.Plo -rm -f ./$(DEPDIR)/g_invposlist.Plo -rm -f ./$(DEPDIR)/g_invstmtmsgsrsv1.Plo -rm -f ./$(DEPDIR)/g_invstmtrs.Plo -rm -f ./$(DEPDIR)/g_invstmttrnrs.Plo -rm -f ./$(DEPDIR)/g_invtran.Plo -rm -f ./$(DEPDIR)/g_invtranlist.Plo -rm -f ./$(DEPDIR)/g_mfinfo.Plo -rm -f ./$(DEPDIR)/g_ofx.Plo -rm -f ./$(DEPDIR)/g_posmf.Plo -rm -f ./$(DEPDIR)/g_posstock.Plo -rm -f ./$(DEPDIR)/g_reinvest.Plo -rm -f ./$(DEPDIR)/g_secid.Plo -rm -f ./$(DEPDIR)/g_secinfo.Plo -rm -f ./$(DEPDIR)/g_seclist.Plo -rm -f ./$(DEPDIR)/g_seclistmsgsrsv1.Plo -rm -f ./$(DEPDIR)/g_signonmsgsrsv1.Plo -rm -f ./$(DEPDIR)/g_signupmsgsrsv1.Plo -rm -f ./$(DEPDIR)/g_sonrs.Plo -rm -f ./$(DEPDIR)/g_status.Plo -rm -f ./$(DEPDIR)/g_stmtrn.Plo -rm -f ./$(DEPDIR)/g_stmtrs.Plo -rm -f ./$(DEPDIR)/g_stmttrnrs.Plo -rm -f ./$(DEPDIR)/g_stockinfo.Plo -rm -f ./$(DEPDIR)/ofxgroup.Plo -rm -f ./$(DEPDIR)/ofxxmlctx.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/g_acctinfo.Plo -rm -f ./$(DEPDIR)/g_acctinfors.Plo -rm -f ./$(DEPDIR)/g_acctinfotrnrs.Plo -rm -f ./$(DEPDIR)/g_bal.Plo -rm -f ./$(DEPDIR)/g_bankacc.Plo -rm -f ./$(DEPDIR)/g_bankacctinfo.Plo -rm -f ./$(DEPDIR)/g_bankmsgsrsv1.Plo -rm -f ./$(DEPDIR)/g_banktran.Plo -rm -f ./$(DEPDIR)/g_banktranlist.Plo -rm -f ./$(DEPDIR)/g_buymf.Plo -rm -f ./$(DEPDIR)/g_buystock.Plo -rm -f ./$(DEPDIR)/g_creditcardmsgsrsv1.Plo -rm -f ./$(DEPDIR)/g_document.Plo -rm -f ./$(DEPDIR)/g_generic.Plo -rm -f ./$(DEPDIR)/g_ignore.Plo -rm -f ./$(DEPDIR)/g_income.Plo -rm -f ./$(DEPDIR)/g_invacc.Plo -rm -f ./$(DEPDIR)/g_invbuy.Plo -rm -f ./$(DEPDIR)/g_invpos.Plo -rm -f ./$(DEPDIR)/g_invposlist.Plo -rm -f ./$(DEPDIR)/g_invstmtmsgsrsv1.Plo -rm -f ./$(DEPDIR)/g_invstmtrs.Plo -rm -f ./$(DEPDIR)/g_invstmttrnrs.Plo -rm -f ./$(DEPDIR)/g_invtran.Plo -rm -f ./$(DEPDIR)/g_invtranlist.Plo -rm -f ./$(DEPDIR)/g_mfinfo.Plo -rm -f ./$(DEPDIR)/g_ofx.Plo -rm -f ./$(DEPDIR)/g_posmf.Plo -rm -f ./$(DEPDIR)/g_posstock.Plo -rm -f ./$(DEPDIR)/g_reinvest.Plo -rm -f ./$(DEPDIR)/g_secid.Plo -rm -f ./$(DEPDIR)/g_secinfo.Plo -rm -f ./$(DEPDIR)/g_seclist.Plo -rm -f ./$(DEPDIR)/g_seclistmsgsrsv1.Plo -rm -f ./$(DEPDIR)/g_signonmsgsrsv1.Plo -rm -f ./$(DEPDIR)/g_signupmsgsrsv1.Plo -rm -f ./$(DEPDIR)/g_sonrs.Plo -rm -f ./$(DEPDIR)/g_status.Plo -rm -f ./$(DEPDIR)/g_stmtrn.Plo -rm -f ./$(DEPDIR)/g_stmtrs.Plo -rm -f ./$(DEPDIR)/g_stmttrnrs.Plo -rm -f ./$(DEPDIR)/g_stockinfo.Plo -rm -f ./$(DEPDIR)/ofxgroup.Plo -rm -f ./$(DEPDIR)/ofxxmlctx.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-generic clean-libtool clean-noinstLTLIBRARIES \ cscopelist-am ctags ctags-am distclean distclean-compile \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am .PRECIOUS: Makefile sources: for f in $(libofxparser_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done cppcheck: for f in $(libofxparser_la_SOURCES); do \ cppcheck --force $$f ; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_seclist.c0000664000175000017500000000330314043610745022377 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Mon Jan 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "g_seclist_p.h" #include "ofxxmlctx_l.h" #include "g_generic_l.h" #include "g_ignore_l.h" #include "g_stockinfo_l.h" #include #include AIO_OFX_GROUP *AIO_OfxGroup_SECLIST_new(const char *groupName, AIO_OFX_GROUP *parent, GWEN_XML_CONTEXT *ctx) { AIO_OFX_GROUP *g; /* create base group */ g=AIO_OfxGroup_Generic_new(groupName, parent, ctx); assert(g); /* set virtual functions */ AIO_OfxGroup_SetStartTagFn(g, AIO_OfxGroup_SECLIST_StartTag); return g; } int AIO_OfxGroup_SECLIST_StartTag(AIO_OFX_GROUP *g, const char *tagName) { AIO_OFX_GROUP *gNew=NULL; GWEN_XML_CONTEXT *ctx; assert(g); ctx=AIO_OfxGroup_GetXmlContext(g); if (strcasecmp(tagName, "STOCKINFO")==0 || strcasecmp(tagName, "MFINFO")==0) { gNew=AIO_OfxGroup_STOCKINFO_new(tagName, g, ctx); } else { DBG_WARN(AQBANKING_LOGDOMAIN, "Ignoring group [%s]", tagName); gNew=AIO_OfxGroup_Ignore_new(tagName, g, ctx); } if (gNew) { AIO_OfxXmlCtx_SetCurrentGroup(ctx, gNew); GWEN_XmlCtx_IncDepth(ctx); } return 0; } aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_bankmsgsrsv1_l.h0000664000175000017500000000137614043610745023702 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Mon Jan 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AIO_OFX_G_BANKMSGSRSV1_L_H #define AIO_OFX_G_BANKMSGSRSV1_L_H #include "ofxgroup_l.h" AIO_OFX_GROUP *AIO_OfxGroup_BANKMSGSRSV1_new(const char *groupName, AIO_OFX_GROUP *parent, GWEN_XML_CONTEXT *ctx); #endif aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_invbuy_p.h0000664000175000017500000000212214043610745022567 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Mon Jan 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de copyright : (C) 2013 by Paul Conrady email : c.p.conrady@gmail.com *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AIO_OFX_G_INVBUY_P_H #define AIO_OFX_G_INVBUY_P_H #include "g_invbuy_l.h" typedef struct AIO_OFX_GROUP_INVBUY AIO_OFX_GROUP_INVBUY; struct AIO_OFX_GROUP_INVBUY { char *currentElement; char *currency; AB_TRANSACTION *transaction; }; static void GWENHYWFAR_CB AIO_OfxGroup_INVBUY_FreeData(void *bp, void *p); static int AIO_OfxGroup_INVBUY_StartTag(AIO_OFX_GROUP *g, const char *tagName); static int AIO_OfxGroup_INVBUY_EndSubGroup(AIO_OFX_GROUP *g, AIO_OFX_GROUP *sg); static int AIO_OfxGroup_INVBUY_AddData(AIO_OFX_GROUP *g, const char *data); #endif aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_buymf.c0000664000175000017500000001112014043610745022047 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Mon Jan 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de copyright : (C) 2013 by Paul Conrady email : c.p.conrady@gmail.com *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "g_buymf_p.h" #include "ofxxmlctx_l.h" #include "g_generic_l.h" #include "g_ignore_l.h" #include "g_invbuy_l.h" #include #include #include #include GWEN_INHERIT(AIO_OFX_GROUP, AIO_OFX_GROUP_BUYMF) AIO_OFX_GROUP *AIO_OfxGroup_BUYMF_new(const char *groupName, AIO_OFX_GROUP *parent, GWEN_XML_CONTEXT *ctx) { AIO_OFX_GROUP *g; AIO_OFX_GROUP_BUYMF *xg; /* create base group */ g=AIO_OfxGroup_Generic_new(groupName, parent, ctx); assert(g); GWEN_NEW_OBJECT(AIO_OFX_GROUP_BUYMF, xg); assert(xg); GWEN_INHERIT_SETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_BUYMF, g, xg, AIO_OfxGroup_BUYMF_FreeData); xg->transaction=AB_Transaction_new(); /* set virtual functions */ AIO_OfxGroup_SetStartTagFn(g, AIO_OfxGroup_BUYMF_StartTag); AIO_OfxGroup_SetAddDataFn(g, AIO_OfxGroup_BUYMF_AddData); AIO_OfxGroup_SetEndSubGroupFn(g, AIO_OfxGroup_BUYMF_EndSubGroup); return g; } GWENHYWFAR_CB void AIO_OfxGroup_BUYMF_FreeData(void *bp, void *p) { AIO_OFX_GROUP_BUYMF *xg; xg=(AIO_OFX_GROUP_BUYMF *)p; assert(xg); AB_Transaction_free(xg->transaction); free(xg->currentElement); GWEN_FREE_OBJECT(xg); } int AIO_OfxGroup_BUYMF_StartTag(AIO_OFX_GROUP *g, const char *tagName) { AIO_OFX_GROUP_BUYMF *xg; GWEN_XML_CONTEXT *ctx; AIO_OFX_GROUP *gNew=NULL; assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_BUYMF, g); assert(xg); ctx=AIO_OfxGroup_GetXmlContext(g); if (strcasecmp(tagName, "BUYTYPE")==0 || strcasecmp(tagName, "SELLTYPE")==0) { /* TODO */ } else if (strcasecmp(tagName, "INVBUY")==0 || strcasecmp(tagName, "INVSELL")==0) { gNew=AIO_OfxGroup_INVBUY_new(tagName, g, ctx); } else { DBG_WARN(AQBANKING_LOGDOMAIN, "Ignoring tag [%s]", tagName); free(xg->currentElement); xg->currentElement=strdup(tagName); } if (gNew) { AIO_OfxXmlCtx_SetCurrentGroup(ctx, gNew); GWEN_XmlCtx_IncDepth(ctx); } return 0; } int AIO_OfxGroup_BUYMF_AddData(AIO_OFX_GROUP *g, const char *data) { AIO_OFX_GROUP_BUYMF *xg; assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_BUYMF, g); assert(xg); if (xg->currentElement) { GWEN_BUFFER *buf; int rv; const char *s; buf=GWEN_Buffer_new(0, strlen(data), 0, 1); rv=AIO_OfxXmlCtx_SanitizeData(AIO_OfxGroup_GetXmlContext(g), data, buf); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(buf); return rv; } s=GWEN_Buffer_GetStart(buf); if (*s) { DBG_INFO(AQBANKING_LOGDOMAIN, "AddData: %s=[%s]", xg->currentElement, s); if (strcasecmp(xg->currentElement, "BUYTYPE")==0 || (strcasecmp(xg->currentElement, "SELLTYPE") ==0)) { /*TODO*/ } else { DBG_INFO(AQBANKING_LOGDOMAIN, "Ignoring data for unknown element [%s]", xg->currentElement); } } GWEN_Buffer_free(buf); } return 0; } int AIO_OfxGroup_BUYMF_EndSubGroup(AIO_OFX_GROUP *g, AIO_OFX_GROUP *sg) { AIO_OFX_GROUP_BUYMF *xg; const char *s; GWEN_XML_CONTEXT *ctx; assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_BUYMF, g); assert(xg); ctx=AIO_OfxGroup_GetXmlContext(g); assert(ctx); s=AIO_OfxGroup_GetGroupName(sg); if (strcasecmp(s, "INVBUY")==0 || strcasecmp(s, "INVSELL")==0) { AB_TRANSACTION *t; t=AIO_OfxGroup_INVBUY_TakeTransaction(sg); if (t) { DBG_INFO(AQBANKING_LOGDOMAIN, "Adding transaction"); free(xg->transaction); xg->transaction=t; /*TODO*/ } } return 0; } AB_TRANSACTION *AIO_OfxGroup_BUYMF_TakeTransaction(const AIO_OFX_GROUP *g) { AIO_OFX_GROUP_BUYMF *xg; AB_TRANSACTION *t; assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_BUYMF, g); assert(xg); t=xg->transaction; xg->transaction=NULL; return t; } aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_signonmsgsrsv1.c0000664000175000017500000000327514043610745023744 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Mon Jan 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "g_signonmsgsrsv1_p.h" #include "ofxxmlctx_l.h" #include "g_generic_l.h" #include "g_ignore_l.h" #include "g_sonrs_l.h" #include #include AIO_OFX_GROUP *AIO_OfxGroup_SIGNONMSGSRSV1_new(const char *groupName, AIO_OFX_GROUP *parent, GWEN_XML_CONTEXT *ctx) { AIO_OFX_GROUP *g; /* create base group */ g=AIO_OfxGroup_Generic_new(groupName, parent, ctx); assert(g); /* set virtual functions */ AIO_OfxGroup_SetStartTagFn(g, AIO_OfxGroup_SIGNONMSGSRSV1_StartTag); return g; } int AIO_OfxGroup_SIGNONMSGSRSV1_StartTag(AIO_OFX_GROUP *g, const char *tagName) { AIO_OFX_GROUP *gNew=NULL; GWEN_XML_CONTEXT *ctx; assert(g); ctx=AIO_OfxGroup_GetXmlContext(g); if (strcasecmp(tagName, "SONRS")==0) { gNew=AIO_OfxGroup_SONRS_new(tagName, g, ctx); } else { DBG_WARN(AQBANKING_LOGDOMAIN, "Ignoring group [%s]", tagName); gNew=AIO_OfxGroup_Ignore_new(tagName, g, ctx); } if (gNew) { AIO_OfxXmlCtx_SetCurrentGroup(ctx, gNew); GWEN_XmlCtx_IncDepth(ctx); } return 0; } aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_bal.c0000664000175000017500000001137114043610745021473 00000000000000/*************************************************************************** begin : Mon Jan 07 2008 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "g_bal_p.h" #include "ofxxmlctx_l.h" #include "aqbanking/i18n_l.h" #include "g_generic_l.h" #include "g_ignore_l.h" #include #include #include #include GWEN_INHERIT(AIO_OFX_GROUP, AIO_OFX_GROUP_BAL) AIO_OFX_GROUP *AIO_OfxGroup_BAL_new(const char *groupName, AIO_OFX_GROUP *parent, GWEN_XML_CONTEXT *ctx) { AIO_OFX_GROUP *g; AIO_OFX_GROUP_BAL *xg; /* create base group */ g=AIO_OfxGroup_Generic_new(groupName, parent, ctx); assert(g); GWEN_NEW_OBJECT(AIO_OFX_GROUP_BAL, xg); assert(xg); GWEN_INHERIT_SETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_BAL, g, xg, AIO_OfxGroup_BAL_FreeData); /* set virtual functions */ AIO_OfxGroup_SetStartTagFn(g, AIO_OfxGroup_BAL_StartTag); AIO_OfxGroup_SetAddDataFn(g, AIO_OfxGroup_BAL_AddData); return g; } GWENHYWFAR_CB void AIO_OfxGroup_BAL_FreeData(void *bp, void *p) { AIO_OFX_GROUP_BAL *xg; xg=(AIO_OFX_GROUP_BAL *)p; assert(xg); free(xg->currentElement); GWEN_Date_free(xg->date); AB_Value_free(xg->value); GWEN_FREE_OBJECT(xg); } const AB_VALUE *AIO_OfxGroup_BAL_GetValue(const AIO_OFX_GROUP *g) { AIO_OFX_GROUP_BAL *xg; assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_BAL, g); assert(xg); return xg->value; } void AIO_OfxGroup_BAL_SetValue(AIO_OFX_GROUP *g, const AB_VALUE *v) { AIO_OFX_GROUP_BAL *xg; assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_BAL, g); assert(xg); AB_Value_free(xg->value); if (v) xg->value=AB_Value_dup(v); else xg->value=NULL; } const GWEN_DATE *AIO_OfxGroup_BAL_GetDate(const AIO_OFX_GROUP *g) { AIO_OFX_GROUP_BAL *xg; assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_BAL, g); assert(xg); return xg->date; } void AIO_OfxGroup_BAL_SetDate(AIO_OFX_GROUP *g, const GWEN_DATE *dt) { AIO_OFX_GROUP_BAL *xg; assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_BAL, g); assert(xg); GWEN_Date_free(xg->date); if (dt) xg->date=GWEN_Date_dup(dt); else xg->date=NULL; } int AIO_OfxGroup_BAL_StartTag(AIO_OFX_GROUP *g, const char *tagName) { AIO_OFX_GROUP_BAL *xg; //GWEN_XML_CONTEXT *ctx; assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_BAL, g); assert(xg); //ctx=AIO_OfxGroup_GetXmlContext(g); if (strcasecmp(tagName, "BALAMT")==0 || strcasecmp(tagName, "DTASOF")==0) { free(xg->currentElement); xg->currentElement=strdup(tagName); } else { DBG_WARN(AQBANKING_LOGDOMAIN, "Ignoring tag [%s]", tagName); } return 0; } int AIO_OfxGroup_BAL_AddData(AIO_OFX_GROUP *g, const char *data) { AIO_OFX_GROUP_BAL *xg; assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_BAL, g); assert(xg); if (xg->currentElement) { GWEN_BUFFER *buf; int rv; const char *s; buf=GWEN_Buffer_new(0, strlen(data), 0, 1); rv=AIO_OfxXmlCtx_SanitizeData(AIO_OfxGroup_GetXmlContext(g), data, buf); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(buf); return rv; } s=GWEN_Buffer_GetStart(buf); if (*s) { DBG_INFO(AQBANKING_LOGDOMAIN, "AddData: %s=[%s]", xg->currentElement, s); if (strcasecmp(xg->currentElement, "BALAMT")==0) { AB_VALUE *v; v=AB_Value_fromString(s); if (v==NULL) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Invalid data for BALAMT: [%s]", s); GWEN_Buffer_free(buf); return GWEN_ERROR_BAD_DATA; } AB_Value_free(xg->value); xg->value=v; } else if (strcasecmp(xg->currentElement, "DTASOF")==0) { GWEN_DATE *dt; dt=GWEN_Date_fromStringWithTemplate(s, "YYYYMMDD"); if (dt==NULL) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Invalid data for DTASOF: [%s]", s); GWEN_Buffer_free(buf); return GWEN_ERROR_BAD_DATA; } GWEN_Date_free(xg->date); xg->date=dt; } else { DBG_INFO(AQBANKING_LOGDOMAIN, "Ignoring data for unknown element [%s]", xg->currentElement); } } GWEN_Buffer_free(buf); } return 0; } aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_bankacctinfo_p.h0000664000175000017500000000216014043610745023677 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Mon Jan 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AIO_OFX_G_BANKACCTINFO_P_H #define AIO_OFX_G_BANKACCTINFO_P_H #include "g_bankacctinfo_l.h" typedef struct AIO_OFX_GROUP_BANKACCTINFO AIO_OFX_GROUP_BANKACCTINFO; struct AIO_OFX_GROUP_BANKACCTINFO { char *currentElement; char *bankId; char *accId; char *accType; }; static void GWENHYWFAR_CB AIO_OfxGroup_BANKACCTINFO_FreeData(void *bp, void *p); static int AIO_OfxGroup_BANKACCTINFO_StartTag(AIO_OFX_GROUP *g, const char *tagName); static int AIO_OfxGroup_BANKACCTINFO_EndSubGroup(AIO_OFX_GROUP *g, AIO_OFX_GROUP *sg); static int AIO_OfxGroup_BANKACCTINFO_AddData(AIO_OFX_GROUP *g, const char *data); #endif aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_acctinfors_l.h0000664000175000017500000000136414043610745023411 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Mon Jan 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AIO_OFX_G_ACCTINFORS_L_H #define AIO_OFX_G_ACCTINFORS_L_H #include "ofxgroup_l.h" AIO_OFX_GROUP *AIO_OfxGroup_ACCTINFORS_new(const char *groupName, AIO_OFX_GROUP *parent, GWEN_XML_CONTEXT *ctx); #endif aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_acctinfo.c0000664000175000017500000001333514043610745022525 00000000000000/*************************************************************************** begin : Mon Jan 07 2008 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "g_acctinfo_p.h" #include "ofxxmlctx_l.h" #include "aqbanking/i18n_l.h" #include "g_generic_l.h" #include "g_ignore_l.h" #include "g_bankacc_l.h" #include "g_bankacctinfo_l.h" #include #include #include #include GWEN_INHERIT(AIO_OFX_GROUP, AIO_OFX_GROUP_ACCTINFO) AIO_OFX_GROUP *AIO_OfxGroup_ACCTINFO_new(const char *groupName, AIO_OFX_GROUP *parent, GWEN_XML_CONTEXT *ctx) { AIO_OFX_GROUP *g; AIO_OFX_GROUP_ACCTINFO *xg; /* create base group */ g=AIO_OfxGroup_Generic_new(groupName, parent, ctx); assert(g); GWEN_NEW_OBJECT(AIO_OFX_GROUP_ACCTINFO, xg); assert(xg); GWEN_INHERIT_SETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_ACCTINFO, g, xg, AIO_OfxGroup_ACCTINFO_FreeData); /* set virtual functions */ AIO_OfxGroup_SetStartTagFn(g, AIO_OfxGroup_ACCTINFO_StartTag); AIO_OfxGroup_SetAddDataFn(g, AIO_OfxGroup_ACCTINFO_AddData); AIO_OfxGroup_SetEndSubGroupFn(g, AIO_OfxGroup_ACCTINFO_EndSubGroup); return g; } GWENHYWFAR_CB void AIO_OfxGroup_ACCTINFO_FreeData(void *bp, void *p) { AIO_OFX_GROUP_ACCTINFO *xg; xg=(AIO_OFX_GROUP_ACCTINFO *)p; assert(xg); free(xg->description); free(xg->bankId); free(xg->accId); free(xg->accType); free(xg->currentElement); GWEN_FREE_OBJECT(xg); } const char *AIO_OfxGroup_ACCTINFO_GetBankId(const AIO_OFX_GROUP *g) { AIO_OFX_GROUP_ACCTINFO *xg; assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_ACCTINFO, g); assert(xg); return xg->bankId; } const char *AIO_OfxGroup_ACCTINFO_GetAccId(const AIO_OFX_GROUP *g) { AIO_OFX_GROUP_ACCTINFO *xg; assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_ACCTINFO, g); assert(xg); return xg->accId; } const char *AIO_OfxGroup_ACCTINFO_GetAccType(const AIO_OFX_GROUP *g) { AIO_OFX_GROUP_ACCTINFO *xg; assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_ACCTINFO, g); assert(xg); return xg->accType; } const char *AIO_OfxGroup_ACCTINFO_GetAccDescr(const AIO_OFX_GROUP *g) { AIO_OFX_GROUP_ACCTINFO *xg; assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_ACCTINFO, g); assert(xg); return xg->description; } int AIO_OfxGroup_ACCTINFO_StartTag(AIO_OFX_GROUP *g, const char *tagName) { AIO_OFX_GROUP_ACCTINFO *xg; GWEN_XML_CONTEXT *ctx; AIO_OFX_GROUP *gNew=NULL; assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_ACCTINFO, g); assert(xg); ctx=AIO_OfxGroup_GetXmlContext(g); free(xg->currentElement); xg->currentElement=NULL; if (strcasecmp(tagName, "DESC")==0) { xg->currentElement=strdup(tagName); } else if (strcasecmp(tagName, "BANKACCTINFO")==0 || strcasecmp(tagName, "CCACCTINFO")==0 || strcasecmp(tagName, "BPACCTINFO")==0 || strcasecmp(tagName, "INVACCTINFO")==0) { gNew=AIO_OfxGroup_BANKACCTINFO_new(tagName, g, ctx); } else if (strcasecmp(tagName, "DESC")==0) { xg->currentElement=strdup(tagName); } else { DBG_WARN(AQBANKING_LOGDOMAIN, "Ignoring tag [%s]", tagName); xg->currentElement=strdup(tagName); } if (gNew) { AIO_OfxXmlCtx_SetCurrentGroup(ctx, gNew); GWEN_XmlCtx_IncDepth(ctx); } return 0; } int AIO_OfxGroup_ACCTINFO_AddData(AIO_OFX_GROUP *g, const char *data) { AIO_OFX_GROUP_ACCTINFO *xg; assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_ACCTINFO, g); assert(xg); if (xg->currentElement) { GWEN_BUFFER *buf; int rv; const char *s; buf=GWEN_Buffer_new(0, strlen(data), 0, 1); rv=AIO_OfxXmlCtx_SanitizeData(AIO_OfxGroup_GetXmlContext(g), data, buf); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(buf); return rv; } s=GWEN_Buffer_GetStart(buf); if (*s) { DBG_INFO(AQBANKING_LOGDOMAIN, "AddData: %s=[%s]", xg->currentElement, s); if (strcasecmp(xg->currentElement, "DESC")==0) { free(xg->description); xg->description=strdup(s); } else { DBG_INFO(AQBANKING_LOGDOMAIN, "Ignoring data for unknown element [%s]", xg->currentElement); } } GWEN_Buffer_free(buf); } return 0; } int AIO_OfxGroup_ACCTINFO_EndSubGroup(AIO_OFX_GROUP *g, AIO_OFX_GROUP *sg) { AIO_OFX_GROUP_ACCTINFO *xg; const char *s; GWEN_XML_CONTEXT *ctx; assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_ACCTINFO, g); assert(xg); ctx=AIO_OfxGroup_GetXmlContext(g); assert(ctx); s=AIO_OfxGroup_GetGroupName(sg); if (strcasecmp(s, "BANKACCTINFO")==0 || strcasecmp(s, "CCACCTINFO")==0 || strcasecmp(s, "BPACCTINFO")==0 || strcasecmp(s, "INVACCTINFO")==0) { const char *s; s=AIO_OfxGroup_BANKACCTINFO_GetBankId(sg); free(xg->bankId); if (s) xg->bankId=strdup(s); else xg->bankId=NULL; s=AIO_OfxGroup_BANKACCTINFO_GetAccId(sg); free(xg->accId); if (s) xg->accId=strdup(s); else xg->accId=NULL; s=AIO_OfxGroup_BANKACCTINFO_GetAccType(sg); free(xg->accType); if (s) xg->accType=strdup(s); else xg->accType=NULL; } return 0; } aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_income_p.h0000664000175000017500000000212214043610745022525 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Mon Jan 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de copyright : (C) 2013 by Paul Conrady email : c.p.conrady@gmail.com *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AIO_OFX_G_INCOME_P_H #define AIO_OFX_G_INCOME_P_H #include "g_income_l.h" typedef struct AIO_OFX_GROUP_INCOME AIO_OFX_GROUP_INCOME; struct AIO_OFX_GROUP_INCOME { char *currentElement; char *currency; AB_TRANSACTION *transaction; }; static void GWENHYWFAR_CB AIO_OfxGroup_INCOME_FreeData(void *bp, void *p); static int AIO_OfxGroup_INCOME_StartTag(AIO_OFX_GROUP *g, const char *tagName); static int AIO_OfxGroup_INCOME_EndSubGroup(AIO_OFX_GROUP *g, AIO_OFX_GROUP *sg); static int AIO_OfxGroup_INCOME_AddData(AIO_OFX_GROUP *g, const char *data); #endif aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_banktran_p.h0000664000175000017500000000174714043610745023067 00000000000000/*************************************************************************** begin : Mon Jan 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AIO_OFX_G_BANKTRAN_P_H #define AIO_OFX_G_BANKTRAN_P_H #include "g_banktran_l.h" typedef struct AIO_OFX_GROUP_BANKTRAN AIO_OFX_GROUP_BANKTRAN; struct AIO_OFX_GROUP_BANKTRAN { char *currentElement; AB_TRANSACTION *transaction; }; static void GWENHYWFAR_CB AIO_OfxGroup_BANKTRAN_FreeData(void *bp, void *p); static int AIO_OfxGroup_BANKTRAN_StartTag(AIO_OFX_GROUP *g, const char *tagName); static int AIO_OfxGroup_BANKTRAN_EndSubGroup(AIO_OFX_GROUP *g, AIO_OFX_GROUP *sg); static int AIO_OfxGroup_BANKTRAN_AddData(AIO_OFX_GROUP *g, const char *data); #endif aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_signonmsgsrsv1_p.h0000664000175000017500000000130414043610745024257 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Mon Jan 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AIO_OFX_G_SIGNONMSGSRSV1_P_H #define AIO_OFX_G_SIGNONMSGSRSV1_P_H #include "g_signonmsgsrsv1_l.h" static int AIO_OfxGroup_SIGNONMSGSRSV1_StartTag(AIO_OFX_GROUP *g, const char *tagName); #endif aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_buystock_p.h0000664000175000017500000000212414043610745023120 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Mon Jan 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de copyright : (C) 2013 by Paul Conrady email : c.p.conrady@gmail.com *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AIO_OFX_G_BUYSTOCK_P_H #define AIO_OFX_G_BUYSTOCK_P_H #include "g_buystock_l.h" typedef struct AIO_OFX_GROUP_BUYSTOCK AIO_OFX_GROUP_BUYSTOCK; struct AIO_OFX_GROUP_BUYSTOCK { char *currentElement; AB_TRANSACTION *transaction; }; static void GWENHYWFAR_CB AIO_OfxGroup_BUYSTOCK_FreeData(void *bp, void *p); static int AIO_OfxGroup_BUYSTOCK_StartTag(AIO_OFX_GROUP *g, const char *tagName); static int AIO_OfxGroup_BUYSTOCK_EndSubGroup(AIO_OFX_GROUP *g, AIO_OFX_GROUP *sg); static int AIO_OfxGroup_BUYSTOCK_AddData(AIO_OFX_GROUP *g, const char *data); #endif aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_mfinfo.c0000664000175000017500000000535214043610745022215 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Mon Jan 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de copyright : (C) 2013 by Paul Conrady email : c.p.conrady@gmail.com *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "g_mfinfo_p.h" #include "ofxxmlctx_l.h" #include "g_generic_l.h" #include "g_ignore_l.h" #include "g_secinfo_l.h" #include #include #include #include AIO_OFX_GROUP *AIO_OfxGroup_MFINFO_new(const char *groupName, AIO_OFX_GROUP *parent, GWEN_XML_CONTEXT *ctx) { AIO_OFX_GROUP *g; /* create base group */ g=AIO_OfxGroup_Generic_new(groupName, parent, ctx); assert(g); /* set virtual functions */ AIO_OfxGroup_SetStartTagFn(g, AIO_OfxGroup_MFINFO_StartTag); AIO_OfxGroup_SetEndSubGroupFn(g, AIO_OfxGroup_MFINFO_EndSubGroup); return g; } int AIO_OfxGroup_MFINFO_StartTag(AIO_OFX_GROUP *g, const char *tagName) { GWEN_XML_CONTEXT *ctx; AIO_OFX_GROUP *gNew=NULL; assert(g); ctx=AIO_OfxGroup_GetXmlContext(g); if (strcasecmp(tagName, "SECINFO")==0) { gNew=AIO_OfxGroup_SECINFO_new(tagName, g, ctx); } else { DBG_WARN(AQBANKING_LOGDOMAIN, "Ignoring group [%s]", tagName); gNew=AIO_OfxGroup_Ignore_new(tagName, g, ctx); } if (gNew) { AIO_OfxXmlCtx_SetCurrentGroup(ctx, gNew); GWEN_XmlCtx_IncDepth(ctx); } return 0; } int AIO_OfxGroup_MFINFO_EndSubGroup(AIO_OFX_GROUP *g, AIO_OFX_GROUP *sg) { const char *s; GWEN_XML_CONTEXT *ctx; assert(g); ctx=AIO_OfxGroup_GetXmlContext(g); assert(ctx); s=AIO_OfxGroup_GetGroupName(sg); if (strcasecmp(s, "SECINFO")==0) { AB_SECURITY *sec=NULL; const char *uid; const char *ns; uid=AIO_OfxGroup_SECINFO_GetUniqueId(sg); ns=AIO_OfxGroup_SECINFO_GetNameSpace(sg); if (uid && ns) sec=AB_ImExporterContext_FindSecurity(AIO_OfxXmlCtx_GetIoContext(ctx), ns, uid); if (sec==NULL) { sec=AB_Security_new(); AB_Security_SetUniqueId(sec, uid); AB_Security_SetNameSpace(sec, ns); AB_ImExporterContext_AddSecurity(AIO_OfxXmlCtx_GetIoContext(ctx), sec); } AB_Security_SetName(sec, AIO_OfxGroup_SECINFO_GetSecurityName(sg)); AB_Security_SetTickerSymbol(sec, AIO_OfxGroup_SECINFO_GetTicker(sg)); } return 0; } aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_sonrs_l.h0000664000175000017500000000133314043610745022416 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Mon Jan 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AIO_OFX_G_SONRS_L_H #define AIO_OFX_G_SONRS_L_H #include "ofxgroup_l.h" AIO_OFX_GROUP *AIO_OfxGroup_SONRS_new(const char *groupName, AIO_OFX_GROUP *parent, GWEN_XML_CONTEXT *ctx); #endif aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_reinvest_p.h0000664000175000017500000000214614043610745023120 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Mon Jan 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de copyright : (C) 2013 by Paul Conrady email : c.p.conrady@gmail.com *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AIO_OFX_G_REINVEST_P_H #define AIO_OFX_G_REINVEST_P_H #include "g_reinvest_l.h" typedef struct AIO_OFX_GROUP_REINVEST AIO_OFX_GROUP_REINVEST; struct AIO_OFX_GROUP_REINVEST { char *currentElement; char *currency; AB_TRANSACTION *transaction; }; static void GWENHYWFAR_CB AIO_OfxGroup_REINVEST_FreeData(void *bp, void *p); static int AIO_OfxGroup_REINVEST_StartTag(AIO_OFX_GROUP *g, const char *tagName); static int AIO_OfxGroup_REINVEST_EndSubGroup(AIO_OFX_GROUP *g, AIO_OFX_GROUP *sg); static int AIO_OfxGroup_REINVEST_AddData(AIO_OFX_GROUP *g, const char *data); #endif aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_buystock.c0000664000175000017500000001124014043610745022573 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Mon Jan 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de copyright : (C) 2013 by Paul Conrady email : c.p.conrady@gmail.com *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "g_buystock_p.h" #include "ofxxmlctx_l.h" #include "g_generic_l.h" #include "g_ignore_l.h" #include "g_invbuy_l.h" #include #include #include #include GWEN_INHERIT(AIO_OFX_GROUP, AIO_OFX_GROUP_BUYSTOCK) AIO_OFX_GROUP *AIO_OfxGroup_BUYSTOCK_new(const char *groupName, AIO_OFX_GROUP *parent, GWEN_XML_CONTEXT *ctx) { AIO_OFX_GROUP *g; AIO_OFX_GROUP_BUYSTOCK *xg; /* create base group */ g=AIO_OfxGroup_Generic_new(groupName, parent, ctx); assert(g); GWEN_NEW_OBJECT(AIO_OFX_GROUP_BUYSTOCK, xg); assert(xg); GWEN_INHERIT_SETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_BUYSTOCK, g, xg, AIO_OfxGroup_BUYSTOCK_FreeData); xg->transaction=AB_Transaction_new(); /* set virtual functions */ AIO_OfxGroup_SetStartTagFn(g, AIO_OfxGroup_BUYSTOCK_StartTag); AIO_OfxGroup_SetAddDataFn(g, AIO_OfxGroup_BUYSTOCK_AddData); AIO_OfxGroup_SetEndSubGroupFn(g, AIO_OfxGroup_BUYSTOCK_EndSubGroup); return g; } GWENHYWFAR_CB void AIO_OfxGroup_BUYSTOCK_FreeData(void *bp, void *p) { AIO_OFX_GROUP_BUYSTOCK *xg; xg=(AIO_OFX_GROUP_BUYSTOCK *)p; assert(xg); AB_Transaction_free(xg->transaction); free(xg->currentElement); GWEN_FREE_OBJECT(xg); } int AIO_OfxGroup_BUYSTOCK_StartTag(AIO_OFX_GROUP *g, const char *tagName) { AIO_OFX_GROUP_BUYSTOCK *xg; GWEN_XML_CONTEXT *ctx; AIO_OFX_GROUP *gNew=NULL; assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_BUYSTOCK, g); assert(xg); ctx=AIO_OfxGroup_GetXmlContext(g); if (strcasecmp(tagName, "BUYTYPE")==0 || strcasecmp(tagName, "SELLTYPE")==0) { /* TODO */ } else if (strcasecmp(tagName, "INVBUY")==0 || strcasecmp(tagName, "INVSELL")==0) { gNew=AIO_OfxGroup_INVBUY_new(tagName, g, ctx); } else { DBG_WARN(AQBANKING_LOGDOMAIN, "Ignoring tag [%s]", tagName); free(xg->currentElement); xg->currentElement=strdup(tagName); } if (gNew) { AIO_OfxXmlCtx_SetCurrentGroup(ctx, gNew); GWEN_XmlCtx_IncDepth(ctx); } return 0; } int AIO_OfxGroup_BUYSTOCK_AddData(AIO_OFX_GROUP *g, const char *data) { AIO_OFX_GROUP_BUYSTOCK *xg; assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_BUYSTOCK, g); assert(xg); if (xg->currentElement) { GWEN_BUFFER *buf; int rv; const char *s; buf=GWEN_Buffer_new(0, strlen(data), 0, 1); rv=AIO_OfxXmlCtx_SanitizeData(AIO_OfxGroup_GetXmlContext(g), data, buf); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(buf); return rv; } s=GWEN_Buffer_GetStart(buf); if (*s) { DBG_INFO(AQBANKING_LOGDOMAIN, "AddData: %s=[%s]", xg->currentElement, s); if (strcasecmp(xg->currentElement, "BUYTYPE")==0 || (strcasecmp(xg->currentElement, "SELLTYPE") ==0)) { /*TODO*/ } else { DBG_INFO(AQBANKING_LOGDOMAIN, "Ignoring data for unknown element [%s]", xg->currentElement); } } GWEN_Buffer_free(buf); } return 0; } int AIO_OfxGroup_BUYSTOCK_EndSubGroup(AIO_OFX_GROUP *g, AIO_OFX_GROUP *sg) { AIO_OFX_GROUP_BUYSTOCK *xg; const char *s; GWEN_XML_CONTEXT *ctx; assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_BUYSTOCK, g); assert(xg); ctx=AIO_OfxGroup_GetXmlContext(g); assert(ctx); s=AIO_OfxGroup_GetGroupName(sg); if (strcasecmp(s, "INVBUY")==0 || strcasecmp(s, "INVSELL")==0) { AB_TRANSACTION *t; t=AIO_OfxGroup_INVBUY_TakeTransaction(sg); if (t) { DBG_INFO(AQBANKING_LOGDOMAIN, "Adding transaction"); xg->transaction=t; /*TODO*/ } } return 0; } AB_TRANSACTION *AIO_OfxGroup_BUYSTOCK_TakeTransaction(const AIO_OFX_GROUP *g) { AIO_OFX_GROUP_BUYSTOCK *xg; AB_TRANSACTION *t; assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_BUYSTOCK, g); assert(xg); t=xg->transaction; xg->transaction=NULL; free(xg->transaction); return t; } aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_generic_l.h0000664000175000017500000000147714043610745022677 00000000000000/*************************************************************************** begin : Mon Jan 07 2008 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AIO_OFX_G_GENERIC_L_H #define AIO_OFX_G_GENERIC_L_H #include "ofxgroup_l.h" #include AIO_OFX_GROUP *AIO_OfxGroup_Generic_new(const char *groupName, AIO_OFX_GROUP *parent, GWEN_XML_CONTEXT *ctx); AB_ACCOUNT_TYPE AIO_OfxGroup_Generic_AccountTypeFromString(const char *s); #endif aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_invstmtmsgsrsv1_l.h0000664000175000017500000000141514043610745024465 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Mon Jan 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AIO_OFX_G_INVSTMTMSGSRSV1_L_H #define AIO_OFX_G_INVSTMTMSGSRSV1_L_H #include "ofxgroup_l.h" AIO_OFX_GROUP *AIO_OfxGroup_INVSTMTMSGSRSV1_new(const char *groupName, AIO_OFX_GROUP *parent, GWEN_XML_CONTEXT *ctx); #endif aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_banktranlist_l.h0000664000175000017500000000153514043610745023752 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Mon Jan 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AIO_OFX_G_BANKTRANLIST_L_H #define AIO_OFX_G_BANKTRANLIST_L_H #include "ofxgroup_l.h" AIO_OFX_GROUP *AIO_OfxGroup_BANKTRANLIST_new(const char *groupName, AIO_OFX_GROUP *parent, GWEN_XML_CONTEXT *ctx); AB_TRANSACTION_LIST2 * AIO_OfxGroup_BANKTRANLIST_TakeTransactionList(const AIO_OFX_GROUP *g); #endif aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_invtranlist.c0000664000175000017500000002000714043610745023306 00000000000000/*************************************************************************** begin : Mon Jan 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de begin : Fri Apr 17 2009 copyright : (C) 2009 by Stephen R. Besch email : sbesch@buffalo.edu begin : Sat May 18 2013 copyright : (C) 2013 by Paul Conrady email : c.p.conrady@gmail.com *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "g_invtranlist_p.h" #include "ofxxmlctx_l.h" #include "g_generic_l.h" #include "g_ignore_l.h" #include "g_buystock_l.h" #include "g_income_l.h" #include "g_stmtrn_l.h" #include "g_buymf_l.h" #include "g_reinvest_l.h" #include "g_banktran_l.h" #include #include #include #include GWEN_INHERIT(AIO_OFX_GROUP, AIO_OFX_GROUP_INVTRANLIST) AIO_OFX_GROUP *AIO_OfxGroup_INVTRANLIST_new(const char *groupName, AIO_OFX_GROUP *parent, GWEN_XML_CONTEXT *ctx) { AIO_OFX_GROUP *g; AIO_OFX_GROUP_INVTRANLIST *xg; /* create base group */ g=AIO_OfxGroup_Generic_new(groupName, parent, ctx); assert(g); GWEN_NEW_OBJECT(AIO_OFX_GROUP_INVTRANLIST, xg); assert(xg); GWEN_INHERIT_SETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_INVTRANLIST, g, xg, AIO_OfxGroup_INVTRANLIST_FreeData); xg->transactionList=AB_Transaction_List2_new(); /* set virtual functions */ AIO_OfxGroup_SetStartTagFn(g, AIO_OfxGroup_INVTRANLIST_StartTag); AIO_OfxGroup_SetAddDataFn(g, AIO_OfxGroup_INVTRANLIST_AddData); AIO_OfxGroup_SetEndSubGroupFn(g, AIO_OfxGroup_INVTRANLIST_EndSubGroup); return g; } GWENHYWFAR_CB void AIO_OfxGroup_INVTRANLIST_FreeData(void *bp, void *p) { AIO_OFX_GROUP_INVTRANLIST *xg; xg=(AIO_OFX_GROUP_INVTRANLIST *)p; assert(xg); AB_Transaction_List2_freeAll(xg->transactionList); free(xg->currentElement); GWEN_FREE_OBJECT(xg); } AB_TRANSACTION_LIST2 *AIO_OfxGroup_INVTRANLIST_TakeTransactionList(const AIO_OFX_GROUP *g) { AIO_OFX_GROUP_INVTRANLIST *xg; AB_TRANSACTION_LIST2 *tl; assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_INVTRANLIST, g); assert(xg); tl=xg->transactionList; xg->transactionList=NULL; return tl; } /*The INVTRANLIST has 2 data and at least 4 groups. The BUYSTOCK, SELLSTOCK, and INCOME are similar enough to be handled using a single subgroup and some steering logic. The INVBANKTRAN is essentially identical to the Bank equivalent, so we use the STMTTRN group for it.*/ /* The and aggregates are similar, therefore each is handled by the * method. The difference between a buy and a sell is indicated by a positive or negative value * in the total and units datum. The aggregate represents an income event * (e.g. dividends) and a buy transaction of the like commodity. */ int AIO_OfxGroup_INVTRANLIST_StartTag(AIO_OFX_GROUP *g, const char *tagName) { AIO_OFX_GROUP_INVTRANLIST *xg; GWEN_XML_CONTEXT *ctx; AIO_OFX_GROUP *gNew=NULL; assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_INVTRANLIST, g); assert(xg); ctx=AIO_OfxGroup_GetXmlContext(g); if (strcasecmp(tagName, "DTSTART")==0 || strcasecmp(tagName, "DTEND")==0) { free(xg->currentElement); xg->currentElement=strdup(tagName); } else if (strcasecmp(tagName, "BUYSTOCK")==0 || strcasecmp(tagName, "SELLSTOCK")==0) gNew=AIO_OfxGroup_BUYSTOCK_new(tagName, g, ctx); else if (strcasecmp(tagName, "INCOME")==0) gNew=AIO_OfxGroup_INCOME_new(tagName, g, ctx); else if (strcasecmp(tagName, "INVBANKTRAN")==0) gNew=AIO_OfxGroup_BANKTRAN_new(tagName, g, ctx); else if (strcasecmp(tagName, "BUYMF")==0 || strcasecmp(tagName, "SELLMF")==0) gNew=AIO_OfxGroup_BUYMF_new(tagName, g, ctx); else if (strcasecmp(tagName, "REINVEST")==0) gNew=AIO_OfxGroup_REINVEST_new(tagName, g, ctx); else { DBG_WARN(AQBANKING_LOGDOMAIN, "Ignoring group [%s]", tagName); gNew=AIO_OfxGroup_Ignore_new(tagName, g, ctx); } if (gNew) { AIO_OfxXmlCtx_SetCurrentGroup(ctx, gNew); GWEN_XmlCtx_IncDepth(ctx); } return 0; } /*Here when the data for either DTSTART or DTEND arrives*/ int AIO_OfxGroup_INVTRANLIST_AddData(AIO_OFX_GROUP *g, const char *data) { AIO_OFX_GROUP_INVTRANLIST *xg; assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_INVTRANLIST, g); assert(xg); if (xg->currentElement) { GWEN_BUFFER *buf; int rv; const char *s; buf=GWEN_Buffer_new(0, strlen(data), 0, 1); rv=AIO_OfxXmlCtx_SanitizeData(AIO_OfxGroup_GetXmlContext(g), data, buf); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(buf); return rv; } s=GWEN_Buffer_GetStart(buf); if (*s) { DBG_INFO(AQBANKING_LOGDOMAIN, "AddData: %s=[%s]", xg->currentElement, s); if (strcasecmp(xg->currentElement, "DTSTART")==0) { free(xg->dtstart); xg->dtstart=strdup(s); } else if (strcasecmp(xg->currentElement, "DTEND")==0) { free(xg->dtend); xg->dtend=strdup(s); } else { DBG_INFO(AQBANKING_LOGDOMAIN, "Ignoring data for unknown elements [%s]", xg->currentElement); } } GWEN_Buffer_free(buf); } return 0; } /* Come here when the , , , , * , or tags are encountered. */ int AIO_OfxGroup_INVTRANLIST_EndSubGroup(AIO_OFX_GROUP *g, AIO_OFX_GROUP *sg) { AIO_OFX_GROUP_INVTRANLIST *xg; const char *s; GWEN_XML_CONTEXT *ctx; AB_TRANSACTION *t=NULL; /*First connect to the data list. Throw a hissy if either the group object or the inherited group object is invalid*/ assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_INVTRANLIST, g); assert(xg); /*Fetch a copy of this groups context - and it better be valid too.*/ ctx=AIO_OfxGroup_GetXmlContext(g); assert(ctx); /*We need to look at the group name to see what to do. Then call the appropriate routine to take the transaction and push it into the transaction list.*/ s=AIO_OfxGroup_GetGroupName(sg); if (strcasecmp(s, "BUYSTOCK")==0) { t=AIO_OfxGroup_BUYSTOCK_TakeTransaction(sg); AB_Transaction_SetType(t, AB_Transaction_TypeBrokerage); AB_Transaction_SetSubType(t, AB_Transaction_SubTypeBuy); } else if (strcasecmp(s, "SELLSTOCK")==0) { t=AIO_OfxGroup_BUYSTOCK_TakeTransaction(sg); AB_Transaction_SetType(t, AB_Transaction_TypeBrokerage); AB_Transaction_SetSubType(t, AB_Transaction_SubTypeSell); } else if (strcasecmp(s, "INCOME")==0) { t=AIO_OfxGroup_INCOME_TakeTransaction(sg); AB_Transaction_SetType(t, AB_Transaction_TypeBrokerage); } else if (strcasecmp(s, "INVBANKTRAN")==0) { t=AIO_OfxGroup_BANKTRAN_TakeTransaction(sg); AB_Transaction_SetType(t, AB_Transaction_TypeStatement); } else if (strcasecmp(s, "BUYMF")==0) { t=AIO_OfxGroup_BUYMF_TakeTransaction(sg); AB_Transaction_SetType(t, AB_Transaction_TypeBrokerage); AB_Transaction_SetSubType(t, AB_Transaction_SubTypeBuy); } else if (strcasecmp(s, "SELLMF")==0) { t=AIO_OfxGroup_BUYMF_TakeTransaction(sg); AB_Transaction_SetType(t, AB_Transaction_TypeBrokerage); AB_Transaction_SetSubType(t, AB_Transaction_SubTypeSell); } else if (strcasecmp(s, "REINVEST")==0) { t=AIO_OfxGroup_REINVEST_TakeTransaction(sg); AB_Transaction_SetType(t, AB_Transaction_TypeBrokerage); AB_Transaction_SetSubType(t, AB_Transaction_SubTypeReinvest); } else return 0; /*If one of the groups matches, then post a message about adding the new transaction to the list*/ if (t) { DBG_INFO(AQBANKING_LOGDOMAIN, "Adding transaction"); AB_Transaction_List2_PushBack(xg->transactionList, t); } return 0; } aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_invpos.c0000664000175000017500000001372414043610745022257 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Mon Jan 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de copyright : (C) 2013 by Paul Conrady email : c.p.conrady@gmail.com *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "g_invpos_p.h" #include "ofxxmlctx_l.h" #include "g_generic_l.h" #include "g_ignore_l.h" #include "g_secid_l.h" #include #include #include #include GWEN_INHERIT(AIO_OFX_GROUP, AIO_OFX_GROUP_INVPOS) AIO_OFX_GROUP *AIO_OfxGroup_INVPOS_new(const char *groupName, AIO_OFX_GROUP *parent, GWEN_XML_CONTEXT *ctx) { AIO_OFX_GROUP *g; AIO_OFX_GROUP_INVPOS *xg; /* create base group */ g=AIO_OfxGroup_Generic_new(groupName, parent, ctx); assert(g); GWEN_NEW_OBJECT(AIO_OFX_GROUP_INVPOS, xg); assert(xg); GWEN_INHERIT_SETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_INVPOS, g, xg, AIO_OfxGroup_INVPOS_FreeData); xg->security=AB_Security_new(); /* set virtual functions */ AIO_OfxGroup_SetStartTagFn(g, AIO_OfxGroup_INVPOS_StartTag); AIO_OfxGroup_SetAddDataFn(g, AIO_OfxGroup_INVPOS_AddData); AIO_OfxGroup_SetEndSubGroupFn(g, AIO_OfxGroup_INVPOS_EndSubGroup); return g; } GWENHYWFAR_CB void AIO_OfxGroup_INVPOS_FreeData(void *bp, void *p) { AIO_OFX_GROUP_INVPOS *xg; xg=(AIO_OFX_GROUP_INVPOS *)p; assert(xg); free(xg->currentElement); AB_Security_free(xg->security); GWEN_FREE_OBJECT(xg); } AB_SECURITY *AIO_OfxGroup_INVPOS_TakeSecurity(const AIO_OFX_GROUP *g) { AIO_OFX_GROUP_INVPOS *xg; AB_SECURITY *sec; assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_INVPOS, g); assert(xg); sec=xg->security; xg->security=NULL; return sec; } int AIO_OfxGroup_INVPOS_StartTag(AIO_OFX_GROUP *g, const char *tagName) { AIO_OFX_GROUP_INVPOS *xg; GWEN_XML_CONTEXT *ctx; AIO_OFX_GROUP *gNew=NULL; assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_INVPOS, g); assert(xg); ctx=AIO_OfxGroup_GetXmlContext(g); free(xg->currentElement); xg->currentElement=NULL; if (strcasecmp(tagName, "HELDINACCT")==0 || strcasecmp(tagName, "POSTYPE")==0 || strcasecmp(tagName, "UNITS")==0 || strcasecmp(tagName, "UNITPRICE")==0 || strcasecmp(tagName, "MKTVAL")==0 || strcasecmp(tagName, "DTPRICEASOF")==0 || strcasecmp(tagName, "MEMO")==0) { free(xg->currentElement); xg->currentElement=strdup(tagName); } else if (strcasecmp(tagName, "SECID")==0) { gNew=AIO_OfxGroup_SECID_new(tagName, g, ctx); } else { DBG_WARN(AQBANKING_LOGDOMAIN, "Ignoring group [%s]", tagName); gNew=AIO_OfxGroup_Ignore_new(tagName, g, ctx); } if (gNew) { AIO_OfxXmlCtx_SetCurrentGroup(ctx, gNew); GWEN_XmlCtx_IncDepth(ctx); } return 0; } int AIO_OfxGroup_INVPOS_AddData(AIO_OFX_GROUP *g, const char *data) { AIO_OFX_GROUP_INVPOS *xg; assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_INVPOS, g); assert(xg); if (xg->currentElement) { GWEN_BUFFER *buf; int rv; const char *s; buf=GWEN_Buffer_new(0, strlen(data), 0, 1); rv=AIO_OfxXmlCtx_SanitizeData(AIO_OfxGroup_GetXmlContext(g), data, buf); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(buf); return rv; } s=GWEN_Buffer_GetStart(buf); if (*s) { DBG_INFO(AQBANKING_LOGDOMAIN, "AddData: %s=[%s]", xg->currentElement, s); if (strcasecmp(xg->currentElement, "UNITS")==0) { AB_VALUE *v; v=AB_Value_fromString(s); if (v==NULL) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Invalid data for UNITS: [%s]", s); GWEN_Buffer_free(buf); return GWEN_ERROR_BAD_DATA; } AB_Security_SetUnits(xg->security, v); AB_Value_free(v); } else if (strcasecmp(xg->currentElement, "UNITPRICE")==0) { AB_VALUE *v; v=AB_Value_fromString(s); if (v==NULL) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Invalid data for UNITPRICE: [%s]", s); GWEN_Buffer_free(buf); return GWEN_ERROR_BAD_DATA; } if (xg->currency) AB_Value_SetCurrency(v, xg->currency); AB_Security_SetUnitPriceValue(xg->security, v); AB_Value_free(v); } else if (strcasecmp(xg->currentElement, "DTPRICEASOF")==0) { GWEN_TIME *ti; ti=GWEN_Time_fromString(s, "YYYYMMDD"); if (ti==NULL) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Invalid data for DTPRICEASOF: [%s]", s); GWEN_Buffer_free(buf); return GWEN_ERROR_BAD_DATA; } AB_Security_SetUnitPriceDate(xg->security, ti); GWEN_Time_free(ti); } else { DBG_INFO(AQBANKING_LOGDOMAIN, "Ignoring data for unknown element [%s]", xg->currentElement); } } GWEN_Buffer_free(buf); } return 0; } int AIO_OfxGroup_INVPOS_EndSubGroup(AIO_OFX_GROUP *g, AIO_OFX_GROUP *sg) { AIO_OFX_GROUP_INVPOS *xg; const char *s; GWEN_XML_CONTEXT *ctx; assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_INVPOS, g); assert(xg); ctx=AIO_OfxGroup_GetXmlContext(g); assert(ctx); s=AIO_OfxGroup_GetGroupName(sg); if (strcasecmp(s, "SECID")==0) { AB_Security_SetUniqueId(xg->security, AIO_OfxGroup_SECID_GetUniqueId(sg)); AB_Security_SetNameSpace(xg->security, AIO_OfxGroup_SECID_GetNameSpace(sg)); } return 0; } aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/ofxxmlctx_l.h0000664000175000017500000000315514043610745023004 00000000000000/*************************************************************************** begin : Mon Jan 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AIO_OFX_OFXXMLCTX_L_H #define AIO_OFX_OFXXMLCTX_L_H #include "ofxgroup_l.h" #include #include GWEN_XML_CONTEXT *AIO_OfxXmlCtx_new(uint32_t flags, AB_IMEXPORTER_CONTEXT *ioContext); const char *AIO_OfxXmlCtx_GetCharset(const GWEN_XML_CONTEXT *ctx); void AIO_OfxXmlCtx_SetCharset(GWEN_XML_CONTEXT *ctx, const char *s); int AIO_OfxXmlCtx_GetResultCode(const GWEN_XML_CONTEXT *ctx); void AIO_OfxXmlCtx_SetResultCode(GWEN_XML_CONTEXT *ctx, int i); const char *AIO_OfxXmlCtx_GetResultSeverity(const GWEN_XML_CONTEXT *ctx); void AIO_OfxXmlCtx_SetResultSeverity(GWEN_XML_CONTEXT *ctx, const char *s); AB_IMEXPORTER_CONTEXT *AIO_OfxXmlCtx_GetIoContext(const GWEN_XML_CONTEXT *ctx); AIO_OFX_GROUP *AIO_OfxXmlCtx_GetCurrentGroup(const GWEN_XML_CONTEXT *ctx); void AIO_OfxXmlCtx_SetCurrentGroup(GWEN_XML_CONTEXT *ctx, AIO_OFX_GROUP *g); const char *AIO_OfxXmlCtx_GetCurrentTagName(const GWEN_XML_CONTEXT *ctx); void AIO_OfxXmlCtx_SetCurrentTagName(GWEN_XML_CONTEXT *ctx, const char *s); int AIO_OfxXmlCtx_SanitizeData(GWEN_XML_CONTEXT *ctx, const char *data, GWEN_BUFFER *buf); #endif aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_creditcardmsgsrsv1.c0000664000175000017500000000334714043610745024553 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Mon Jan 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "g_creditcardmsgsrsv1_p.h" #include "ofxxmlctx_l.h" #include "g_generic_l.h" #include "g_ignore_l.h" #include "g_stmttrnrs_l.h" #include #include AIO_OFX_GROUP *AIO_OfxGroup_CREDITCARDMSGSRSV1_new(const char *groupName, AIO_OFX_GROUP *parent, GWEN_XML_CONTEXT *ctx) { AIO_OFX_GROUP *g; /* create base group */ g=AIO_OfxGroup_Generic_new(groupName, parent, ctx); assert(g); /* set virtual functions */ AIO_OfxGroup_SetStartTagFn(g, AIO_OfxGroup_CREDITCARDMSGSRSV1_StartTag); return g; } int AIO_OfxGroup_CREDITCARDMSGSRSV1_StartTag(AIO_OFX_GROUP *g, const char *tagName) { AIO_OFX_GROUP *gNew=NULL; GWEN_XML_CONTEXT *ctx; assert(g); ctx=AIO_OfxGroup_GetXmlContext(g); if (strcasecmp(tagName, "CCSTMTTRNRS")==0) { gNew=AIO_OfxGroup_STMTTRNRS_new(tagName, g, ctx); } else { DBG_WARN(AQBANKING_LOGDOMAIN, "Ignoring group [%s]", tagName); gNew=AIO_OfxGroup_Ignore_new(tagName, g, ctx); } if (gNew) { AIO_OfxXmlCtx_SetCurrentGroup(ctx, gNew); GWEN_XmlCtx_IncDepth(ctx); } return 0; } aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_invtran_l.h0000664000175000017500000000157114043610745022737 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Mon Jan 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de copyright : (C) 2013 by Paul Conrady email : c.p.conrady@gmail.com *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AIO_OFX_G_INVTRAN_L_H #define AIO_OFX_G_INVTRAN_L_H #include "ofxgroup_l.h" AIO_OFX_GROUP *AIO_OfxGroup_INVTRAN_new(const char *groupName, AIO_OFX_GROUP *parent, GWEN_XML_CONTEXT *ctx); AB_TRANSACTION *AIO_OfxGroup_INVTRAN_TakeData(const AIO_OFX_GROUP *g); #endif aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_bankacc_l.h0000664000175000017500000000220614043610745022634 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Mon Jan 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AIO_OFX_G_BANKACC_L_H #define AIO_OFX_G_BANKACC_L_H #include "ofxgroup_l.h" AIO_OFX_GROUP *AIO_OfxGroup_BANKACC_new(const char *groupName, AIO_OFX_GROUP *parent, GWEN_XML_CONTEXT *ctx); const char *AIO_OfxGroup_BANKACC_GetBankId(const AIO_OFX_GROUP *g); void AIO_OfxGroup_BANKACC_SetBankId(AIO_OFX_GROUP *g, const char *s); const char *AIO_OfxGroup_BANKACC_GetAccId(const AIO_OFX_GROUP *g); void AIO_OfxGroup_BANKACC_SetAccId(AIO_OFX_GROUP *g, const char *s); const char *AIO_OfxGroup_BANKACC_GetAccType(const AIO_OFX_GROUP *g); void AIO_OfxGroup_BANKACC_SetAccType(AIO_OFX_GROUP *g, const char *s); #endif aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_document.c0000664000175000017500000000357614043610745022563 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Mon Jan 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "g_document_p.h" #include "ofxxmlctx_l.h" #include "g_ofx_l.h" #include "g_generic_l.h" #include "g_ignore_l.h" #include #include AIO_OFX_GROUP *AIO_OfxGroup_Document_new(const char *groupName, AIO_OFX_GROUP *parent, GWEN_XML_CONTEXT *ctx) { AIO_OFX_GROUP *g; /* create base group */ g=AIO_OfxGroup_Generic_new(groupName, parent, ctx); assert(g); /* set virtual functions */ AIO_OfxGroup_SetStartTagFn(g, AIO_OfxGroup_Document_StartTag); AIO_OfxGroup_SetAddDataFn(g, AIO_OfxGroup_Document_AddData); return g; } int AIO_OfxGroup_Document_StartTag(AIO_OFX_GROUP *g, const char *tagName) { AIO_OFX_GROUP *gNew=NULL; GWEN_XML_CONTEXT *ctx; assert(g); ctx=AIO_OfxGroup_GetXmlContext(g); if (strcasecmp(tagName, "OFX")==0) gNew=AIO_OfxGroup_OFX_new(tagName, g, ctx); else if (strcasecmp(tagName, "OFC")==0) { gNew=AIO_OfxGroup_OFX_new(tagName, g, ctx); } else { DBG_WARN(AQBANKING_LOGDOMAIN, "Ignoring group [%s]", tagName); gNew=AIO_OfxGroup_Ignore_new(tagName, g, ctx); } if (gNew) { AIO_OfxXmlCtx_SetCurrentGroup(ctx, gNew); GWEN_XmlCtx_IncDepth(ctx); } return 0; } int AIO_OfxGroup_Document_AddData(AIO_OFX_GROUP *g, const char *data) { /* TODO: evaluate OFX header */ return 0; } aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_mfinfo_p.h0000664000175000017500000000140514043610745022534 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Mon Jan 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de copyright : (C) 2013 by Paul Conrady email : c.p.conrady@gmail.com *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AIO_OFX_G_MFINFO_P_H #define AIO_OFX_G_MFINFO_P_H #include "g_mfinfo_l.h" int AIO_OfxGroup_MFINFO_StartTag(AIO_OFX_GROUP *g, const char *tagName); int AIO_OfxGroup_MFINFO_EndSubGroup(AIO_OFX_GROUP *g, AIO_OFX_GROUP *sg); #endif aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/Makefile.am0000664000175000017500000000522314043610745022316 00000000000000AM_CPPFLAGS = -I$(top_srcdir)/src/libs \ -I$(top_builddir)/src/libs \ $(gwenhywfar_includes) AM_CFLAGS=-DBUILDING_AQBANKING @visibility_cflags@ noinst_LTLIBRARIES=libofxparser.la libofxparser_la_SOURCES=\ ofxxmlctx.c \ ofxgroup.c \ g_acctinfo.c \ g_acctinfors.c \ g_acctinfotrnrs.c \ g_bal.c \ g_bankacc.c \ g_bankacctinfo.c \ g_bankmsgsrsv1.c \ g_banktran.c \ g_banktranlist.c \ g_buymf.c \ g_buystock.c \ g_creditcardmsgsrsv1.c \ g_document.c \ g_generic.c \ g_ignore.c \ g_income.c \ g_invacc.c \ g_invbuy.c \ g_invpos.c \ g_invposlist.c \ g_invstmtmsgsrsv1.c \ g_invstmtrs.c \ g_invstmttrnrs.c \ g_invtran.c \ g_invtranlist.c \ g_mfinfo.c \ g_ofx.c \ g_posmf.c \ g_posstock.c \ g_reinvest.c \ g_secid.c \ g_secinfo.c \ g_seclist.c \ g_seclistmsgsrsv1.c \ g_signonmsgsrsv1.c \ g_signupmsgsrsv1.c \ g_sonrs.c \ g_status.c \ g_stmtrn.c \ g_stmtrs.c \ g_stmttrnrs.c \ g_stockinfo.c noinst_HEADERS=\ ofxxmlctx_l.h ofxxmlctx_p.h \ ofxgroup_l.h ofxgroup_p.h \ g_acctinfo_l.h g_acctinfo_p.h \ g_acctinfors_l.h g_acctinfors_p.h \ g_acctinfotrnrs_l.h g_acctinfotrnrs_p.h \ g_bal_l.h g_bal_p.h \ g_bankacc_l.h g_bankacc_p.h \ g_bankacctinfo_l.h g_bankacctinfo_p.h \ g_bankmsgsrsv1_l.h g_bankmsgsrsv1_p.h \ g_banktran_l.h g_banktran_p.h \ g_banktranlist_l.h g_banktranlist_p.h \ g_buymf_l.h g_buymf_p.h \ g_buystock_l.h g_buystock_p.h \ g_creditcardmsgsrsv1_l.h g_creditcardmsgsrsv1_p.h \ g_document_l.h g_document_p.h \ g_generic_l.h g_generic_p.h \ g_ignore_l.h g_ignore_p.h \ g_income_l.h g_income_p.h \ g_invacc_l.h g_invacc_p.h \ g_invbuy_l.h g_invbuy_p.h \ g_invpos_l.h g_invpos_p.h \ g_invposlist_l.h g_invposlist_p.h \ g_invstmtmsgsrsv1_l.h g_invstmtmsgsrsv1_p.h \ g_invstmtrs_l.h g_invstmtrs_p.h \ g_invstmttrnrs_l.h g_invstmttrnrs_p.h \ g_invtran_l.h g_invtran_p.h \ g_invtranlist_l.h g_invtranlist_p.h \ g_mfinfo_l.h g_mfinfo_p.h \ g_ofx_l.h g_ofx_p.h \ g_posmf_l.h g_posmf_p.h \ g_posstock_l.h g_posstock_p.h \ g_reinvest_l.h g_reinvest_p.h \ g_secid_l.h g_secid_p.h \ g_secinfo_l.h g_secinfo_p.h \ g_seclist_l.h g_seclist_p.h \ g_seclistmsgsrsv1_l.h g_seclistmsgsrsv1_p.h \ g_signonmsgsrsv1_l.h g_signonmsgsrsv1_p.h \ g_signupmsgsrsv1_l.h g_signupmsgsrsv1_p.h \ g_sonrs_l.h g_sonrs_p.h \ g_status_l.h g_status_p.h \ g_stmtrn_l.h g_stmtrn_p.h \ g_stmtrs_l.h g_stmtrs_p.h \ g_stmttrnrs_l.h g_stmttrnrs_p.h \ g_stockinfo_l.h g_stockinfo_p.h sources: for f in $(libofxparser_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done cppcheck: for f in $(libofxparser_la_SOURCES); do \ cppcheck --force $$f ; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_bal_p.h0000664000175000017500000000155614043610745022023 00000000000000/*************************************************************************** begin : Mon Jan 07 2008 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AIO_OFX_G_BAL_P_H #define AIO_OFX_G_BAL_P_H #include "g_bal_l.h" typedef struct AIO_OFX_GROUP_BAL AIO_OFX_GROUP_BAL; struct AIO_OFX_GROUP_BAL { AB_VALUE *value; GWEN_DATE *date; char *currentElement; }; static void GWENHYWFAR_CB AIO_OfxGroup_BAL_FreeData(void *bp, void *p); static int AIO_OfxGroup_BAL_StartTag(AIO_OFX_GROUP *g, const char *tagName); static int AIO_OfxGroup_BAL_AddData(AIO_OFX_GROUP *g, const char *data); #endif aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_reinvest.c0000664000175000017500000001534614043610745022602 00000000000000/*************************************************************************** begin : Mon Jan 07 2008 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de copyright : (C) 2013 by Paul Conrady email : c.p.conrady@gmail.com *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "g_reinvest_p.h" #include "ofxxmlctx_l.h" #include "g_generic_l.h" #include "g_ignore_l.h" #include "g_invtran_l.h" #include "g_secid_l.h" #include #include #include #include #include GWEN_INHERIT(AIO_OFX_GROUP, AIO_OFX_GROUP_REINVEST) AIO_OFX_GROUP *AIO_OfxGroup_REINVEST_new(const char *groupName, AIO_OFX_GROUP *parent, GWEN_XML_CONTEXT *ctx) { AIO_OFX_GROUP *g; AIO_OFX_GROUP_REINVEST *xg; /* create base group */ g=AIO_OfxGroup_Generic_new(groupName, parent, ctx); assert(g); GWEN_NEW_OBJECT(AIO_OFX_GROUP_REINVEST, xg); assert(xg); GWEN_INHERIT_SETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_REINVEST, g, xg, AIO_OfxGroup_REINVEST_FreeData); xg->transaction=AB_Transaction_new(); /* set virtual functions */ AIO_OfxGroup_SetStartTagFn(g, AIO_OfxGroup_REINVEST_StartTag); AIO_OfxGroup_SetAddDataFn(g, AIO_OfxGroup_REINVEST_AddData); AIO_OfxGroup_SetEndSubGroupFn(g, AIO_OfxGroup_REINVEST_EndSubGroup); return g; } GWENHYWFAR_CB void AIO_OfxGroup_REINVEST_FreeData(void *bp, void *p) { AIO_OFX_GROUP_REINVEST *xg; xg=(AIO_OFX_GROUP_REINVEST *)p; assert(xg); AB_Transaction_free(xg->transaction); free(xg->currentElement); GWEN_FREE_OBJECT(xg); } int AIO_OfxGroup_REINVEST_StartTag(AIO_OFX_GROUP *g, const char *tagName) { AIO_OFX_GROUP_REINVEST *xg; GWEN_XML_CONTEXT *ctx; AIO_OFX_GROUP *gNew=NULL; assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_REINVEST, g); assert(xg); ctx=AIO_OfxGroup_GetXmlContext(g); if (strcasecmp(tagName, "UNITS")==0 || strcasecmp(tagName, "UNITPRICE")==0 || strcasecmp(tagName, "TOTAL")==0 || strcasecmp(tagName, "SUBACCTSEC")==0 || strcasecmp(tagName, "INCOMETYPE")==0) { free(xg->currentElement); xg->currentElement=strdup(tagName); } else if (strcasecmp(tagName, "INVTRAN")==0) { gNew=AIO_OfxGroup_INVTRAN_new(tagName, g, ctx); } else if (strcasecmp(tagName, "SECID")==0) { gNew=AIO_OfxGroup_SECID_new(tagName, g, ctx); } else { DBG_WARN(AQBANKING_LOGDOMAIN, "Ignoring tag [%s]", tagName); free(xg->currentElement); xg->currentElement=strdup(tagName); } if (gNew) { AIO_OfxXmlCtx_SetCurrentGroup(ctx, gNew); GWEN_XmlCtx_IncDepth(ctx); } return 0; } int AIO_OfxGroup_REINVEST_AddData(AIO_OFX_GROUP *g, const char *data) { AIO_OFX_GROUP_REINVEST *xg; assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_REINVEST, g); assert(xg); if (xg->currentElement) { GWEN_BUFFER *buf; int rv; const char *s; buf=GWEN_Buffer_new(0, strlen(data), 0, 1); rv=AIO_OfxXmlCtx_SanitizeData(AIO_OfxGroup_GetXmlContext(g), data, buf); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(buf); return rv; } s=GWEN_Buffer_GetStart(buf); if (*s) { DBG_INFO(AQBANKING_LOGDOMAIN, "AddData: %s=[%s]", xg->currentElement, s); if (strcasecmp(xg->currentElement, "UNITS")==0) { AB_VALUE *v; v=AB_Value_fromString(s); if (v==NULL) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Invalid data for UNITS: [%s]", s); GWEN_Buffer_free(buf); return GWEN_ERROR_BAD_DATA; } AB_Transaction_SetUnits(xg->transaction, v); AB_Value_free(v); } else if (strcasecmp(xg->currentElement, "UNITPRICE")==0) { AB_VALUE *v; v=AB_Value_fromString(s); if (v==NULL) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Invalid data for UNITPRICE: [%s]", s); GWEN_Buffer_free(buf); return GWEN_ERROR_BAD_DATA; } AB_Transaction_SetUnitPriceValue(xg->transaction, v); AB_Value_free(v); } else if (strcasecmp(xg->currentElement, "TOTAL")==0) { AB_VALUE *v; v=AB_Value_fromString(s); if (v==NULL) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Invalid data for TOTAL: [%s]", s); GWEN_Buffer_free(buf); return GWEN_ERROR_BAD_DATA; } AB_Transaction_SetValue(xg->transaction, v); AB_Value_free(v); } else if (strcasecmp(xg->currentElement, "SUBACCTSEC")==0) { /* TODO */ } else if (strcasecmp(xg->currentElement, "INCOMETYPE")==0) { /* TODO */ } else { DBG_INFO(AQBANKING_LOGDOMAIN, "Ignoring data for unknown element [%s]", xg->currentElement); } } GWEN_Buffer_free(buf); } return 0; } int AIO_OfxGroup_REINVEST_EndSubGroup(AIO_OFX_GROUP *g, AIO_OFX_GROUP *sg) { AIO_OFX_GROUP_REINVEST *xg; const char *s; GWEN_XML_CONTEXT *ctx; assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_REINVEST, g); assert(xg); ctx=AIO_OfxGroup_GetXmlContext(g); assert(ctx); s=AIO_OfxGroup_GetGroupName(sg); if (strcasecmp(s, "INVTRAN")==0) { AB_TRANSACTION *t; t=AIO_OfxGroup_INVTRAN_TakeData(sg); if (t) { DBG_INFO(AQBANKING_LOGDOMAIN, "Adding data"); AB_Transaction_SetFiId(xg->transaction, AB_Transaction_GetFiId(t)); AB_Transaction_SetValutaDate(xg->transaction, AB_Transaction_GetValutaDate(t)); AB_Transaction_SetDate(xg->transaction, AB_Transaction_GetDate(t)); AB_Transaction_SetPurpose(xg->transaction, AB_Transaction_GetPurpose(t)); } } else if (strcasecmp(s, "SECID")==0) { DBG_INFO(AQBANKING_LOGDOMAIN, "Adding data"); AB_Transaction_SetUnitId(xg->transaction, AIO_OfxGroup_SECID_GetUniqueId(sg)); AB_Transaction_SetUnitIdNameSpace(xg->transaction, AIO_OfxGroup_SECID_GetNameSpace(sg)); } else { DBG_INFO(AQBANKING_LOGDOMAIN, "Ignoring data for unknown element [%s]", s); } return 0; } AB_TRANSACTION *AIO_OfxGroup_REINVEST_TakeTransaction(const AIO_OFX_GROUP *g) { AIO_OFX_GROUP_REINVEST *xg; AB_TRANSACTION *t; assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_REINVEST, g); assert(xg); t=xg->transaction; xg->transaction=NULL; return t; } aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_seclistmsgsrsv1.c0000664000175000017500000000331314043610745024106 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Mon Jan 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "g_seclistmsgsrsv1_p.h" #include "ofxxmlctx_l.h" #include "g_generic_l.h" #include "g_ignore_l.h" #include "g_seclist_l.h" #include #include AIO_OFX_GROUP *AIO_OfxGroup_SECLISTMSGSRSV1_new(const char *groupName, AIO_OFX_GROUP *parent, GWEN_XML_CONTEXT *ctx) { AIO_OFX_GROUP *g; /* create base group */ g=AIO_OfxGroup_Generic_new(groupName, parent, ctx); assert(g); /* set virtual functions */ AIO_OfxGroup_SetStartTagFn(g, AIO_OfxGroup_SECLISTMSGSRSV1_StartTag); return g; } int AIO_OfxGroup_SECLISTMSGSRSV1_StartTag(AIO_OFX_GROUP *g, const char *tagName) { AIO_OFX_GROUP *gNew=NULL; GWEN_XML_CONTEXT *ctx; assert(g); ctx=AIO_OfxGroup_GetXmlContext(g); if (strcasecmp(tagName, "SECLIST")==0) { gNew=AIO_OfxGroup_SECLIST_new(tagName, g, ctx); } else { DBG_WARN(AQBANKING_LOGDOMAIN, "Ignoring group [%s]", tagName); gNew=AIO_OfxGroup_Ignore_new(tagName, g, ctx); } if (gNew) { AIO_OfxXmlCtx_SetCurrentGroup(ctx, gNew); GWEN_XmlCtx_IncDepth(ctx); } return 0; } aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_acctinfo_l.h0000664000175000017500000000200014043610745023030 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Mon Jan 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AIO_OFX_G_ACCTINFO_L_H #define AIO_OFX_G_ACCTINFO_L_H #include "ofxgroup_l.h" AIO_OFX_GROUP *AIO_OfxGroup_ACCTINFO_new(const char *groupName, AIO_OFX_GROUP *parent, GWEN_XML_CONTEXT *ctx); const char *AIO_OfxGroup_ACCTINFO_GetBankId(const AIO_OFX_GROUP *g); const char *AIO_OfxGroup_ACCTINFO_GetAccId(const AIO_OFX_GROUP *g); const char *AIO_OfxGroup_ACCTINFO_GetAccType(const AIO_OFX_GROUP *g); const char *AIO_OfxGroup_ACCTINFO_GetAccDescr(const AIO_OFX_GROUP *g); #endif aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_invtran.c0000664000175000017500000001125414043610745022416 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Mon Jan 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de copyright : (C) 2013 by Paul Conrady email : c.p.conrady@gmail.com *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "g_invtran_p.h" #include "ofxxmlctx_l.h" #include "g_generic_l.h" #include "g_ignore_l.h" #include #include #include #include GWEN_INHERIT(AIO_OFX_GROUP, AIO_OFX_GROUP_INVTRAN) AIO_OFX_GROUP *AIO_OfxGroup_INVTRAN_new(const char *groupName, AIO_OFX_GROUP *parent, GWEN_XML_CONTEXT *ctx) { AIO_OFX_GROUP *g; AIO_OFX_GROUP_INVTRAN *xg; /* create base group */ g=AIO_OfxGroup_Generic_new(groupName, parent, ctx); assert(g); GWEN_NEW_OBJECT(AIO_OFX_GROUP_INVTRAN, xg); assert(xg); GWEN_INHERIT_SETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_INVTRAN, g, xg, AIO_OfxGroup_INVTRAN_FreeData); xg->transaction=AB_Transaction_new(); /* set virtual functions */ AIO_OfxGroup_SetStartTagFn(g, AIO_OfxGroup_INVTRAN_StartTag); AIO_OfxGroup_SetAddDataFn(g, AIO_OfxGroup_INVTRAN_AddData); return g; } GWENHYWFAR_CB void AIO_OfxGroup_INVTRAN_FreeData(void *bp, void *p) { AIO_OFX_GROUP_INVTRAN *xg; xg=(AIO_OFX_GROUP_INVTRAN *)p; assert(xg); free(xg->currentElement); AB_Transaction_free(xg->transaction); GWEN_FREE_OBJECT(xg); } int AIO_OfxGroup_INVTRAN_StartTag(AIO_OFX_GROUP *g, const char *tagName) { AIO_OFX_GROUP_INVTRAN *xg; assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_INVTRAN, g); assert(xg); if (strcasecmp(tagName, "FITID")==0 || strcasecmp(tagName, "DTTRADE")==0 || strcasecmp(tagName, "DTSETTLE")==0 || strcasecmp(tagName, "MEMO")==0) { free(xg->currentElement); xg->currentElement=strdup(tagName); } else { DBG_WARN(AQBANKING_LOGDOMAIN, "Ignoring tag [%s]", tagName); free(xg->currentElement); xg->currentElement=strdup(tagName); } return 0; } int AIO_OfxGroup_INVTRAN_AddData(AIO_OFX_GROUP *g, const char *data) { AIO_OFX_GROUP_INVTRAN *xg; assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_INVTRAN, g); assert(xg); if (xg->currentElement) { GWEN_BUFFER *buf; int rv; const char *s; buf=GWEN_Buffer_new(0, strlen(data), 0, 1); rv=AIO_OfxXmlCtx_SanitizeData(AIO_OfxGroup_GetXmlContext(g), data, buf); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(buf); return rv; } s=GWEN_Buffer_GetStart(buf); if (*s) { DBG_INFO(AQBANKING_LOGDOMAIN, "AddData: %s=[%s]", xg->currentElement, s); if (strcasecmp(xg->currentElement, "FITID")==0) { AB_Transaction_SetFiId(xg->transaction, s); } else if (strcasecmp(xg->currentElement, "DTTRADE")==0) { GWEN_DATE *da; da=GWEN_Date_fromStringWithTemplate(s, "YYYYMMDD"); if (da==NULL) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Invalid data for DTTRADE: [%s]", s); GWEN_Buffer_free(buf); return GWEN_ERROR_BAD_DATA; } AB_Transaction_SetValutaDate(xg->transaction, da); GWEN_Date_free(da); } else if (strcasecmp(xg->currentElement, "DTSETTLE")==0) { GWEN_DATE *da; da=GWEN_Date_fromStringWithTemplate(s, "YYYYMMDD"); if (da==NULL) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Invalid data for DTSETTLE: [%s]", s); GWEN_Buffer_free(buf); return GWEN_ERROR_BAD_DATA; } AB_Transaction_SetDate(xg->transaction, da); GWEN_Date_free(da); } else if (strcasecmp(xg->currentElement, "MEMO")==0) { AB_Transaction_AddPurposeLine(xg->transaction, s); } else { DBG_INFO(AQBANKING_LOGDOMAIN, "Ignoring data for unknown element [%s]", xg->currentElement); } } GWEN_Buffer_free(buf); } return 0; } AB_TRANSACTION *AIO_OfxGroup_INVTRAN_TakeData(const AIO_OFX_GROUP *g) { AIO_OFX_GROUP_INVTRAN *xg; AB_TRANSACTION *t; assert(g); xg=GWEN_INHERIT_GETDATA(AIO_OFX_GROUP, AIO_OFX_GROUP_INVTRAN, g); assert(xg); t=xg->transaction; xg->transaction=NULL; return t; } aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_sonrs.c0000664000175000017500000000443014043610745022077 00000000000000/*************************************************************************** begin : Mon Jan 07 2008 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "g_sonrs_p.h" #include "ofxxmlctx_l.h" #include "g_generic_l.h" #include "g_ignore_l.h" #include "g_status_l.h" #include "aqbanking/i18n_l.h" #include #include #include AIO_OFX_GROUP *AIO_OfxGroup_SONRS_new(const char *groupName, AIO_OFX_GROUP *parent, GWEN_XML_CONTEXT *ctx) { AIO_OFX_GROUP *g; /* create base group */ g=AIO_OfxGroup_Generic_new(groupName, parent, ctx); assert(g); /* set virtual functions */ AIO_OfxGroup_SetStartTagFn(g, AIO_OfxGroup_SONRS_StartTag); return g; } int AIO_OfxGroup_SONRS_StartTag(AIO_OFX_GROUP *g, const char *tagName) { AIO_OFX_GROUP *gNew=NULL; GWEN_XML_CONTEXT *ctx; assert(g); ctx=AIO_OfxGroup_GetXmlContext(g); if (strcasecmp(tagName, "STATUS")==0) { gNew=AIO_OfxGroup_STATUS_new(tagName, g, ctx, I18N("Status for signon request")); } else if (strcasecmp(tagName, "DTSERVER")==0 || strcasecmp(tagName, "LANGUAGE")==0 || strcasecmp(tagName, "DTPROFUP")==0 || strcasecmp(tagName, "DTACCTUP")==0 || strcasecmp(tagName, "SESSCOOKIE")==0) { /* some tags, just ignore them here */ } else if (strcasecmp(tagName, "FI")==0) { gNew=AIO_OfxGroup_Ignore_new(tagName, g, ctx); } else if (-1!=GWEN_Text_ComparePattern(tagName, "INTU.*", 0) || -1!=GWEN_Text_ComparePattern(tagName, "AT.*", 0)) { /* simply ignore INTU. stuff */ } else { DBG_WARN(AQBANKING_LOGDOMAIN, "Ignoring element [%s]", tagName); /*gNew=AIO_OfxGroup_Ignore_new(tagName, g, ctx);*/ } if (gNew) { AIO_OfxXmlCtx_SetCurrentGroup(ctx, gNew); GWEN_XmlCtx_IncDepth(ctx); } return 0; } aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_invbuy_l.h0000664000175000017500000000157214043610745022573 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Mon Jan 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de copyright : (C) 2013 by Paul Conrady email : c.p.conrady@gmail.com *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AIO_OFX_G_INVBUY_L_H #define AIO_OFX_G_INVBUY_L_H #include "ofxgroup_l.h" AIO_OFX_GROUP *AIO_OfxGroup_INVBUY_new(const char *groupName, AIO_OFX_GROUP *parent, GWEN_XML_CONTEXT *ctx); AB_TRANSACTION *AIO_OfxGroup_INVBUY_TakeTransaction(const AIO_OFX_GROUP *g); #endif aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_bankmsgsrsv1_p.h0000664000175000017500000000127214043610745023701 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Mon Jan 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AIO_OFX_G_BANKMSGSRSV1_P_H #define AIO_OFX_G_BANKMSGSRSV1_P_H #include "g_bankmsgsrsv1_l.h" static int AIO_OfxGroup_BANKMSGSRSV1_StartTag(AIO_OFX_GROUP *g, const char *tagName); #endif aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_stmttrnrs.c0000664000175000017500000000405614043610745023017 00000000000000/*************************************************************************** begin : Mon Jan 07 2008 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "g_stmttrnrs_p.h" #include "ofxxmlctx_l.h" #include "g_generic_l.h" #include "g_ignore_l.h" #include "g_status_l.h" #include "g_stmtrs_l.h" #include "aqbanking/i18n_l.h" #include #include AIO_OFX_GROUP *AIO_OfxGroup_STMTTRNRS_new(const char *groupName, AIO_OFX_GROUP *parent, GWEN_XML_CONTEXT *ctx) { AIO_OFX_GROUP *g; /* create base group */ g=AIO_OfxGroup_Generic_new(groupName, parent, ctx); assert(g); /* set virtual functions */ AIO_OfxGroup_SetStartTagFn(g, AIO_OfxGroup_STMTTRNRS_StartTag); return g; } int AIO_OfxGroup_STMTTRNRS_StartTag(AIO_OFX_GROUP *g, const char *tagName) { AIO_OFX_GROUP *gNew=NULL; GWEN_XML_CONTEXT *ctx; assert(g); ctx=AIO_OfxGroup_GetXmlContext(g); if (strcasecmp(tagName, "STATUS")==0) { gNew=AIO_OfxGroup_STATUS_new(tagName, g, ctx, I18N("Status for transaction statement request")); } else if (strcasecmp(tagName, "TRNUID")==0 || strcasecmp(tagName, "CLTCOOKIE")==0) { /* some tags, just ignore them here */ } else if (strcasecmp(tagName, "STMTRS")==0 || strcasecmp(tagName, "CCSTMTRS")==0) { gNew=AIO_OfxGroup_STMTRS_new(tagName, g, ctx); } else { DBG_WARN(AQBANKING_LOGDOMAIN, "Ignoring group [%s]", tagName); gNew=AIO_OfxGroup_Ignore_new(tagName, g, ctx); } if (gNew) { AIO_OfxXmlCtx_SetCurrentGroup(ctx, gNew); GWEN_XmlCtx_IncDepth(ctx); } return 0; } aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_acctinfors_p.h0000664000175000017500000000131414043610745023410 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Mon Jan 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AIO_OFX_G_ACCTINFORS_P_H #define AIO_OFX_G_ACCTINFORS_P_H #include "g_acctinfors_l.h" int AIO_OfxGroup_ACCTINFORS_StartTag(AIO_OFX_GROUP *g, const char *tagName); int AIO_OfxGroup_ACCTINFORS_EndSubGroup(AIO_OFX_GROUP *g, AIO_OFX_GROUP *sg); #endif aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/parser/g_bankacctinfo_l.h0000664000175000017500000000204414043610745023674 00000000000000/*************************************************************************** $RCSfile$ ------------------- begin : Mon Jan 07 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AIO_OFX_G_BANKACCTINFO_L_H #define AIO_OFX_G_BANKACCTINFO_L_H #include "ofxgroup_l.h" AIO_OFX_GROUP *AIO_OfxGroup_BANKACCTINFO_new(const char *groupName, AIO_OFX_GROUP *parent, GWEN_XML_CONTEXT *ctx); const char *AIO_OfxGroup_BANKACCTINFO_GetBankId(const AIO_OFX_GROUP *g); const char *AIO_OfxGroup_BANKACCTINFO_GetAccId(const AIO_OFX_GROUP *g); const char *AIO_OfxGroup_BANKACCTINFO_GetAccType(const AIO_OFX_GROUP *g); const char *AIO_OfxGroup_BANKACCTINFO_GetAccDescr(const AIO_OFX_GROUP *g); #endif aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/ofx_p.h0000664000175000017500000000214414043610745020251 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AQBANKING_PLUGIN_OFX_P_H #define AQBANKING_PLUGIN_OFX_P_H #include "ofx.h" #include typedef struct AH_IMEXPORTER_OFX AH_IMEXPORTER_OFX; struct AH_IMEXPORTER_OFX { GWEN_DB_NODE *dbData; AB_IMEXPORTER_CONTEXT *context; }; static void GWENHYWFAR_CB AH_ImExporterOFX_FreeData(void *bp, void *p); static int AH_ImExporterOFX_Import(AB_IMEXPORTER *ie, AB_IMEXPORTER_CONTEXT *ctx, GWEN_SYNCIO *sio, GWEN_DB_NODE *params); static int AH_ImExporterOFX_CheckFile(AB_IMEXPORTER *ie, const char *fname); #endif /* AQBANKING_PLUGIN_OFX_P_H */ aqbanking-6.6.1/src/libs/plugins/imexporters/ofx/Makefile.am0000664000175000017500000000166114043610745021024 00000000000000SUBDIRS=parser profiles AM_CPPFLAGS = -I$(top_srcdir)/src/libs \ -I$(top_builddir)/src/libs \ $(gwenhywfar_includes) -Iparser -I$(srcdir)/parser AM_CFLAGS=-DBUILDING_AQBANKING @visibility_cflags@ #EXTRA_DIST=README noinst_HEADERS=ofx_p.h ofx.h imexporterplugindir = $(aqbanking_plugindir)/imexporters noinst_LTLIBRARIES=libabimexporters_ofx.la imexporterplugin_DATA=ofx.xml libabimexporters_ofx_la_SOURCES=ofx.c libabimexporters_ofx_la_LIBADD=parser/libofxparser.la typefiles: typedefs: sources: for d in $(SUBDIRS); do \ $(MAKE) -C $$d sources; \ done for f in $(libabimexporters_ofx_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for f in $(imexporterplugin_DATA); do \ echo $(subdir)/$$f >>$(top_srcdir)/pdsources; \ done cppcheck: for f in $(libabimexporters_ofx_la_SOURCES); do \ cppcheck --force $$f ; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done aqbanking-6.6.1/src/libs/plugins/imexporters/dummy.c0000664000175000017500000000000014043610745017455 00000000000000aqbanking-6.6.1/src/libs/plugins/imexporters/qif/0000755000175000017500000000000015037736157017037 500000000000000aqbanking-6.6.1/src/libs/plugins/imexporters/qif/qif.xml.in0000664000175000017500000000046714043610745020664 00000000000000 @AQBANKING_VERSION_STRING@ Martin Preuss(martin@libchipcard.de) QIF This plugin imports QIF data. (Export currently unimplemented.) aqbanking-6.6.1/src/libs/plugins/imexporters/qif/profiles/0000755000175000017500000000000015037736157020662 500000000000000aqbanking-6.6.1/src/libs/plugins/imexporters/qif/profiles/Makefile.in0000644000175000017500000004574315037736026022657 00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/libs/plugins/imexporters/qif/profiles ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/distri.m4 $(top_srcdir)/m4/gwenhywfar.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/os.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(profilesdir)" DATA = $(profiles_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADD_ACLOCAL_FLAGS = @ADD_ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AQBANKING_CLI_VERSION_STRING = @AQBANKING_CLI_VERSION_STRING@ AQBANKING_FINTS_VERSION_STRING = @AQBANKING_FINTS_VERSION_STRING@ AQBANKING_SO_AGE = @AQBANKING_SO_AGE@ AQBANKING_SO_CURRENT = @AQBANKING_SO_CURRENT@ AQBANKING_SO_EFFECTIVE = @AQBANKING_SO_EFFECTIVE@ AQBANKING_SO_REVISION = @AQBANKING_SO_REVISION@ AQBANKING_VERSION_BUILD = @AQBANKING_VERSION_BUILD@ AQBANKING_VERSION_FULL_STRING = @AQBANKING_VERSION_FULL_STRING@ AQBANKING_VERSION_MAJOR = @AQBANKING_VERSION_MAJOR@ AQBANKING_VERSION_MINOR = @AQBANKING_VERSION_MINOR@ AQBANKING_VERSION_PATCHLEVEL = @AQBANKING_VERSION_PATCHLEVEL@ AQBANKING_VERSION_RELEASE_STRING = @AQBANKING_VERSION_RELEASE_STRING@ AQBANKING_VERSION_STRING = @AQBANKING_VERSION_STRING@ AQBANKING_VERSION_TAG = @AQBANKING_VERSION_TAG@ AQEBICS_CFLAGS = @AQEBICS_CFLAGS@ AQEBICS_LIBS = @AQEBICS_LIBS@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATETIME = @DATETIME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_EXCLUDE_PATTERNS = @DOXYGEN_EXCLUDE_PATTERNS@ DOXYGEN_FILE_PATTERNS = @DOXYGEN_FILE_PATTERNS@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENGUI_GTK2_CFLAGS = @GWENGUI_GTK2_CFLAGS@ GWENGUI_GTK2_LIBS = @GWENGUI_GTK2_LIBS@ GWENHYWFAR_MINIMUM_VERSION = @GWENHYWFAR_MINIMUM_VERSION@ HAVE_GWENGUI_GTK2 = @HAVE_GWENGUI_GTK2@ HAVE_I18N = @HAVE_I18N@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIBXSLT_CFLAGS = @LIBXSLT_CFLAGS@ LIBXSLT_LIBS = @LIBXSLT_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_SUPPORTS_QT = @MSGFMT_SUPPORTS_QT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ TUTORIALS = @TUTORIALS@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XMLMERGE = @XMLMERGE@ XMLSEC_CFLAGS = @XMLSEC_CFLAGS@ XMLSEC_LIBS = @XMLSEC_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ aqbanking_backends = @aqbanking_backends@ aqbanking_cfg_searchdir = @aqbanking_cfg_searchdir@ aqbanking_data_searchdir = @aqbanking_data_searchdir@ aqbanking_headerdir = @aqbanking_headerdir@ aqbanking_headerdir_am = @aqbanking_headerdir_am@ aqbanking_includes = @aqbanking_includes@ aqbanking_internal_libs = @aqbanking_internal_libs@ aqbanking_ldflags = @aqbanking_ldflags@ aqbanking_libs = @aqbanking_libs@ aqbanking_locale_searchdir = @aqbanking_locale_searchdir@ aqbanking_modules = @aqbanking_modules@ aqbanking_pkgdatadir = @aqbanking_pkgdatadir@ aqbanking_plugin_searchdir = @aqbanking_plugin_searchdir@ aqbanking_plugindir = @aqbanking_plugindir@ aqbanking_plugins_backends_dirs = @aqbanking_plugins_backends_dirs@ aqbanking_plugins_backends_libs = @aqbanking_plugins_backends_libs@ aqbanking_plugins_bankinfo_dirs = @aqbanking_plugins_bankinfo_dirs@ aqbanking_plugins_bankinfo_libs = @aqbanking_plugins_bankinfo_libs@ aqbanking_plugins_imexporters_dirs = @aqbanking_plugins_imexporters_dirs@ aqbanking_plugins_imexporters_libs = @aqbanking_plugins_imexporters_libs@ aqbanking_plugins_parsers_dirs = @aqbanking_plugins_parsers_dirs@ aqbanking_symlinkdir = @aqbanking_symlinkdir@ aqbanking_sys_is_windows = @aqbanking_sys_is_windows@ aqbankingpp_modules = @aqbankingpp_modules@ aqebics_datadir = @aqebics_datadir@ aqebics_includes = @aqebics_includes@ aqebics_internal_libs = @aqebics_internal_libs@ aqebics_ldflags = @aqebics_ldflags@ aqebics_libs = @aqebics_libs@ aqfints_datadir = @aqfints_datadir@ aqhbci_datadir = @aqhbci_datadir@ aqhbci_includes = @aqhbci_includes@ aqhbci_internal_libs = @aqhbci_internal_libs@ aqhbci_ldflags = @aqhbci_ldflags@ aqhbci_libs = @aqhbci_libs@ aqofxconnect_includes = @aqofxconnect_includes@ aqofxconnect_internal_libs = @aqofxconnect_internal_libs@ aqofxconnect_libs = @aqofxconnect_libs@ aqpaypal_includes = @aqpaypal_includes@ aqpaypal_internal_libs = @aqpaypal_internal_libs@ aqpaypal_libs = @aqpaypal_libs@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gmp_libs = @gmp_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_dir = @gwenhywfar_dir@ gwenhywfar_has_crypt = @gwenhywfar_has_crypt@ gwenhywfar_headers = @gwenhywfar_headers@ gwenhywfar_includes = @gwenhywfar_includes@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_plugins = @gwenhywfar_plugins@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ typemaker2_exe = @typemaker2_exe@ visibility_cflags = @visibility_cflags@ with_aqebics = @with_aqebics@ with_aqhbci = @with_aqhbci@ profilesdir = $(aqbanking_pkgdatadir)/imexporters/qif/profiles profiles_DATA = default.conf EXTRA_DIST = $(profiles_DATA) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libs/plugins/imexporters/qif/profiles/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libs/plugins/imexporters/qif/profiles/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-profilesDATA: $(profiles_DATA) @$(NORMAL_INSTALL) @list='$(profiles_DATA)'; test -n "$(profilesdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(profilesdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(profilesdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(profilesdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(profilesdir)" || exit $$?; \ done uninstall-profilesDATA: @$(NORMAL_UNINSTALL) @list='$(profiles_DATA)'; test -n "$(profilesdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(profilesdir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(profilesdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-profilesDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-profilesDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-profilesDATA install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags-am uninstall uninstall-am uninstall-profilesDATA .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: aqbanking-6.6.1/src/libs/plugins/imexporters/qif/profiles/default.conf0000664000175000017500000000026314043610745023066 00000000000000 char name="default" char shortDescr="Quicken Interchange Format" char longDescr="This profile supports the QIF format used by Quicken" int import="1" int export="1" params { } aqbanking-6.6.1/src/libs/plugins/imexporters/qif/profiles/Makefile.am0000664000175000017500000000017014043610745022624 00000000000000 profilesdir = $(aqbanking_pkgdatadir)/imexporters/qif/profiles profiles_DATA=default.conf EXTRA_DIST=$(profiles_DATA) aqbanking-6.6.1/src/libs/plugins/imexporters/qif/qif_p.h0000664000175000017500000000346614043610745020227 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Mon Mar 01 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AQHBCI_IMEX_QIF_P_H #define AQHBCI_IMEX_QIF_P_H #include #include #include #include #include #include typedef struct AH_IMEXPORTER_QIF AH_IMEXPORTER_QIF; struct AH_IMEXPORTER_QIF { GWEN_DB_NODE *dbData; AB_IMEXPORTER_ACCOUNTINFO *currentAccount; }; AB_IMEXPORTER *qif_factory(AB_BANKING *ab, GWEN_DB_NODE *db); void GWENHYWFAR_CB AH_ImExporterQIF_FreeData(void *bp, void *p); int AH_ImExporterQIF_Import(AB_IMEXPORTER *ie, AB_IMEXPORTER_CONTEXT *ctx, GWEN_BUFFEREDIO *bio, GWEN_DB_NODE *params); int AH_ImExporterQIF_Export(AB_IMEXPORTER *ie, AB_IMEXPORTER_CONTEXT *ctx, GWEN_BUFFEREDIO *bio, GWEN_DB_NODE *params); int AH_ImExporterQIF_CheckFile(AB_IMEXPORTER *ie, const char *fname); int AH_ImExporterQIF__ImportAccount(AB_IMEXPORTER *ie, AB_IMEXPORTER_CONTEXT *ctx, GWEN_BUFFEREDIO *bio, GWEN_BUFFER *buf, GWEN_DB_NODE *params); #endif /* AQHBCI_IMEX_QIF_P_H */ aqbanking-6.6.1/src/libs/plugins/imexporters/qif/Makefile.in0000644000175000017500000007332115037736026021025 00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/libs/plugins/imexporters/qif ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/distri.m4 $(top_srcdir)/m4/gwenhywfar.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/os.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = qif.xml CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libabimexporters_qif_la_LIBADD = am_libabimexporters_qif_la_OBJECTS = qif.lo libabimexporters_qif_la_OBJECTS = \ $(am_libabimexporters_qif_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/qif.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libabimexporters_qif_la_SOURCES) DIST_SOURCES = $(libabimexporters_qif_la_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(imexporterplugindir)" DATA = $(imexporterplugin_DATA) HEADERS = $(noinst_HEADERS) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir distdir-am am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/qif.xml.in \ $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ADD_ACLOCAL_FLAGS = @ADD_ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AQBANKING_CLI_VERSION_STRING = @AQBANKING_CLI_VERSION_STRING@ AQBANKING_FINTS_VERSION_STRING = @AQBANKING_FINTS_VERSION_STRING@ AQBANKING_SO_AGE = @AQBANKING_SO_AGE@ AQBANKING_SO_CURRENT = @AQBANKING_SO_CURRENT@ AQBANKING_SO_EFFECTIVE = @AQBANKING_SO_EFFECTIVE@ AQBANKING_SO_REVISION = @AQBANKING_SO_REVISION@ AQBANKING_VERSION_BUILD = @AQBANKING_VERSION_BUILD@ AQBANKING_VERSION_FULL_STRING = @AQBANKING_VERSION_FULL_STRING@ AQBANKING_VERSION_MAJOR = @AQBANKING_VERSION_MAJOR@ AQBANKING_VERSION_MINOR = @AQBANKING_VERSION_MINOR@ AQBANKING_VERSION_PATCHLEVEL = @AQBANKING_VERSION_PATCHLEVEL@ AQBANKING_VERSION_RELEASE_STRING = @AQBANKING_VERSION_RELEASE_STRING@ AQBANKING_VERSION_STRING = @AQBANKING_VERSION_STRING@ AQBANKING_VERSION_TAG = @AQBANKING_VERSION_TAG@ AQEBICS_CFLAGS = @AQEBICS_CFLAGS@ AQEBICS_LIBS = @AQEBICS_LIBS@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATETIME = @DATETIME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_EXCLUDE_PATTERNS = @DOXYGEN_EXCLUDE_PATTERNS@ DOXYGEN_FILE_PATTERNS = @DOXYGEN_FILE_PATTERNS@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENGUI_GTK2_CFLAGS = @GWENGUI_GTK2_CFLAGS@ GWENGUI_GTK2_LIBS = @GWENGUI_GTK2_LIBS@ GWENHYWFAR_MINIMUM_VERSION = @GWENHYWFAR_MINIMUM_VERSION@ HAVE_GWENGUI_GTK2 = @HAVE_GWENGUI_GTK2@ HAVE_I18N = @HAVE_I18N@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIBXSLT_CFLAGS = @LIBXSLT_CFLAGS@ LIBXSLT_LIBS = @LIBXSLT_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_SUPPORTS_QT = @MSGFMT_SUPPORTS_QT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ TUTORIALS = @TUTORIALS@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XMLMERGE = @XMLMERGE@ XMLSEC_CFLAGS = @XMLSEC_CFLAGS@ XMLSEC_LIBS = @XMLSEC_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ aqbanking_backends = @aqbanking_backends@ aqbanking_cfg_searchdir = @aqbanking_cfg_searchdir@ aqbanking_data_searchdir = @aqbanking_data_searchdir@ aqbanking_headerdir = @aqbanking_headerdir@ aqbanking_headerdir_am = @aqbanking_headerdir_am@ aqbanking_includes = @aqbanking_includes@ aqbanking_internal_libs = @aqbanking_internal_libs@ aqbanking_ldflags = @aqbanking_ldflags@ aqbanking_libs = @aqbanking_libs@ aqbanking_locale_searchdir = @aqbanking_locale_searchdir@ aqbanking_modules = @aqbanking_modules@ aqbanking_pkgdatadir = @aqbanking_pkgdatadir@ aqbanking_plugin_searchdir = @aqbanking_plugin_searchdir@ aqbanking_plugindir = @aqbanking_plugindir@ aqbanking_plugins_backends_dirs = @aqbanking_plugins_backends_dirs@ aqbanking_plugins_backends_libs = @aqbanking_plugins_backends_libs@ aqbanking_plugins_bankinfo_dirs = @aqbanking_plugins_bankinfo_dirs@ aqbanking_plugins_bankinfo_libs = @aqbanking_plugins_bankinfo_libs@ aqbanking_plugins_imexporters_dirs = @aqbanking_plugins_imexporters_dirs@ aqbanking_plugins_imexporters_libs = @aqbanking_plugins_imexporters_libs@ aqbanking_plugins_parsers_dirs = @aqbanking_plugins_parsers_dirs@ aqbanking_symlinkdir = @aqbanking_symlinkdir@ aqbanking_sys_is_windows = @aqbanking_sys_is_windows@ aqbankingpp_modules = @aqbankingpp_modules@ aqebics_datadir = @aqebics_datadir@ aqebics_includes = @aqebics_includes@ aqebics_internal_libs = @aqebics_internal_libs@ aqebics_ldflags = @aqebics_ldflags@ aqebics_libs = @aqebics_libs@ aqfints_datadir = @aqfints_datadir@ aqhbci_datadir = @aqhbci_datadir@ aqhbci_includes = @aqhbci_includes@ aqhbci_internal_libs = @aqhbci_internal_libs@ aqhbci_ldflags = @aqhbci_ldflags@ aqhbci_libs = @aqhbci_libs@ aqofxconnect_includes = @aqofxconnect_includes@ aqofxconnect_internal_libs = @aqofxconnect_internal_libs@ aqofxconnect_libs = @aqofxconnect_libs@ aqpaypal_includes = @aqpaypal_includes@ aqpaypal_internal_libs = @aqpaypal_internal_libs@ aqpaypal_libs = @aqpaypal_libs@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gmp_libs = @gmp_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_dir = @gwenhywfar_dir@ gwenhywfar_has_crypt = @gwenhywfar_has_crypt@ gwenhywfar_headers = @gwenhywfar_headers@ gwenhywfar_includes = @gwenhywfar_includes@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_plugins = @gwenhywfar_plugins@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ typemaker2_exe = @typemaker2_exe@ visibility_cflags = @visibility_cflags@ with_aqebics = @with_aqebics@ with_aqhbci = @with_aqhbci@ SUBDIRS = profiles AM_CPPFLAGS = -I$(top_srcdir)/src/libs -I$(top_builddir)/src/libs $(gwenhywfar_includes) #EXTRA_DIST=README imexporterplugindir = $(aqbanking_plugindir)/imexporters noinst_LTLIBRARIES = libabimexporters_qif.la imexporterplugin_DATA = qif.xml noinst_HEADERS = \ qif_p.h libabimexporters_qif_la_SOURCES = \ qif.c all: all-recursive .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libs/plugins/imexporters/qif/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libs/plugins/imexporters/qif/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): qif.xml: $(top_builddir)/config.status $(srcdir)/qif.xml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libabimexporters_qif.la: $(libabimexporters_qif_la_OBJECTS) $(libabimexporters_qif_la_DEPENDENCIES) $(EXTRA_libabimexporters_qif_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libabimexporters_qif_la_OBJECTS) $(libabimexporters_qif_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qif.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-imexporterpluginDATA: $(imexporterplugin_DATA) @$(NORMAL_INSTALL) @list='$(imexporterplugin_DATA)'; test -n "$(imexporterplugindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(imexporterplugindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(imexporterplugindir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(imexporterplugindir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(imexporterplugindir)" || exit $$?; \ done uninstall-imexporterpluginDATA: @$(NORMAL_UNINSTALL) @list='$(imexporterplugin_DATA)'; test -n "$(imexporterplugindir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(imexporterplugindir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(imexporterplugindir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-recursive -rm -f ./$(DEPDIR)/qif.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-imexporterpluginDATA install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f ./$(DEPDIR)/qif.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-imexporterpluginDATA .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ am--depfiles check check-am clean clean-generic clean-libtool \ clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-imexporterpluginDATA install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am \ uninstall-imexporterpluginDATA .PRECIOUS: Makefile typefiles: typedefs: sources: for f in $(libabimexporters_qif_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for f in $(imexporterplugin_DATA); do \ echo $(subdir)/$$f >>$(top_srcdir)/pdsources; \ done cppcheck: for f in $(libabimexporters_qif_la_SOURCES); do \ cppcheck --force $$f ; \ done # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: aqbanking-6.6.1/src/libs/plugins/imexporters/qif/Makefile.am0000664000175000017500000000123714043610745021006 00000000000000SUBDIRS=profiles AM_CPPFLAGS = -I$(top_srcdir)/src/libs -I$(top_builddir)/src/libs $(gwenhywfar_includes) #EXTRA_DIST=README imexporterplugindir = $(aqbanking_plugindir)/imexporters noinst_LTLIBRARIES=libabimexporters_qif.la imexporterplugin_DATA=qif.xml noinst_HEADERS=\ qif_p.h libabimexporters_qif_la_SOURCES=\ qif.c typefiles: typedefs: sources: for f in $(libabimexporters_qif_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for f in $(imexporterplugin_DATA); do \ echo $(subdir)/$$f >>$(top_srcdir)/pdsources; \ done cppcheck: for f in $(libabimexporters_qif_la_SOURCES); do \ cppcheck --force $$f ; \ done aqbanking-6.6.1/src/libs/plugins/imexporters/qif/qif.c0000664000175000017500000005500114043610745017673 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Mon Mar 01 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "qif_p.h" #include "i18n_l.h" #include #include #include #include GWEN_INHERIT(AB_IMEXPORTER, AH_IMEXPORTER_QIF); AB_IMEXPORTER *qif_factory(AB_BANKING *ab, GWEN_DB_NODE *db) { AB_IMEXPORTER *ie; AH_IMEXPORTER_QIF *ieh; ie=AB_ImExporter_new(ab, "qif"); GWEN_NEW_OBJECT(AH_IMEXPORTER_QIF, ieh); GWEN_INHERIT_SETDATA(AB_IMEXPORTER, AH_IMEXPORTER_QIF, ie, ieh, AH_ImExporterQIF_FreeData); ieh->dbData=db; AB_ImExporter_SetImportFn(ie, AH_ImExporterQIF_Import); AB_ImExporter_SetExportFn(ie, AH_ImExporterQIF_Export); /* AB_ImExporter_SetCheckFileFn(ie, AH_ImExporterQIF_CheckFile); -- not yet implemented?! */ return ie; } void GWENHYWFAR_CB AH_ImExporterQIF_FreeData(void *bp, void *p) { } int AH_ImExporterQIF__GetDate(AB_IMEXPORTER *ie, GWEN_DB_NODE *params, const char *paramName, const char *paramDescr, const char *paramContent, GWEN_TIME **pti) { const char *dateFormat; char dfbuf[32]; int rv; GWEN_TIME *ti=0; AH_IMEXPORTER_QIF *ieqif; int first=1; assert(ie); ieqif=GWEN_INHERIT_GETDATA(AB_IMEXPORTER, AH_IMEXPORTER_QIF, ie); assert(ieqif); dateFormat=GWEN_DB_GetCharValue(params, paramName, 0, 0); if (!dateFormat) dateFormat=GWEN_DB_GetCharValue(ieqif->dbData, paramName, 0, 0); if (!dateFormat) dateFormat=GWEN_DB_GetCharValue(params, "dateFormat", 0, 0); while (!ti) { if (!dateFormat) { GWEN_BUFFER *tbuf; const char *t1a=I18N_NOOP("Please enter the date format for the " "following item:\n"); const char *t1h=I18N_NOOP("" "Please enter the date format for the " "following item:
"); const char *t2a=I18N_NOOP ("The following characters can be used:\n" "- \'Y\': digit of the year\n" "- \'M\': digit of the month\n" "- \'D\': digit of the day\n" "\n" "Examples:\n" " \"YYYY/MM/DD\" (-> 2005/02/25)\n" " \"DD.MM.YYYY\" (-> 25.02.2005)\n" " \"MM/DD/YY\" (-> 02/25/05)\n"); const char *t2h=I18N_NOOP ("The following characters can be used:" "" " \n" " \n" " \n" "
Ydigit of the year
Mdigit of the month
Ddigit of the day
\n" "
" "Examples:" "" " \n" " \n" " \n" ""); tbuf=GWEN_Buffer_new(0, 256, 0, 1); /* ASCII version */ GWEN_Buffer_AppendString(tbuf, I18N(t1a)); GWEN_Buffer_AppendString(tbuf, paramDescr); GWEN_Buffer_AppendString(tbuf, " ("); GWEN_Buffer_AppendString(tbuf, paramContent); GWEN_Buffer_AppendString(tbuf, " )\n"); GWEN_Buffer_AppendString(tbuf, I18N(t2a)); /* HTML version */ GWEN_Buffer_AppendString(tbuf, I18N(t1h)); GWEN_Buffer_AppendString(tbuf, paramDescr); GWEN_Buffer_AppendString(tbuf, " ("); GWEN_Buffer_AppendString(tbuf, paramContent); GWEN_Buffer_AppendString(tbuf, " )\n"); GWEN_Buffer_AppendString(tbuf, I18N(t2h)); rv=GWEN_Gui_InputBox(0, first?I18N("Enter Date Format"): I18N("Enter Correct Date Format"), GWEN_Buffer_GetStart(tbuf), dfbuf, 4, sizeof(dfbuf)-1, 0); GWEN_Buffer_free(tbuf); if (rv) { DBG_INFO(AQBANKING_LOGDOMAIN, "here"); return rv; } dateFormat=dfbuf; ti=GWEN_Time_fromString(paramContent, dateFormat); if (ti) { /* store particular date format */ GWEN_DB_SetCharValue(ieqif->dbData, GWEN_DB_FLAGS_OVERWRITE_VARS, paramName, dfbuf); break; } dateFormat=0; } else break; } /* for */ *pti=ti; return 0; } int AH_ImExporterQIF__GetValue(AB_IMEXPORTER *ie, GWEN_DB_NODE *params, const char *paramName, const char *paramDescr, const char *paramContent, AB_VALUE **pv) { const char *s; char komma = 0; char fixpoint = 0; AH_IMEXPORTER_QIF *ieqif; char numbuf[64]; int i; double dval; AB_VALUE *v; assert(ie); ieqif=GWEN_INHERIT_GETDATA(AB_IMEXPORTER, AH_IMEXPORTER_QIF, ie); assert(ieqif); /* get komma character */ s=GWEN_DB_GetCharValue(params, "value/komma", 0, 0); if (!s) s=GWEN_DB_GetCharValue(ieqif->dbData, "value/komma", 0, 0); if (s) komma=*s; /* get fixpoint character */ s=GWEN_DB_GetCharValue(params, "value/fixpoint", 0, 0); if (!s) s=GWEN_DB_GetCharValue(ieqif->dbData, "value/fixpoint", 0, 0); if (s) fixpoint=*s; if (!fixpoint) { const char *lastKommaPos = NULL; char lastKommaChar=0; int komma1Count=0; int komma2Count=0; int kommaTypeCount=0; fixpoint=0; komma=0; /* nothing known about fixpoint, elaborate */ s=paramContent; while (*s) { if (*s=='.' || *s==',') { if (*s==',') komma1Count++; else komma2Count++; lastKommaChar=*s; lastKommaChar=*s; kommaTypeCount++; lastKommaPos=s; } s++; } /* while */ if (((komma1Count+komma2Count)==1) && lastKommaPos) { int i=0; /* only one komma, check for digits behind it */ s=lastKommaPos; s++; while (*s && isdigit(*s)) { s++; i++; } if (i<3) { /* most likely got the fixpoint */ fixpoint=lastKommaChar; } } else if ((komma1Count==1 && komma2Count>0) || (komma2Count==1 && komma1Count>0)) { if (komma1Count==1) { fixpoint=','; komma='.'; } else { fixpoint='.'; komma=','; } } else { GWEN_BUFFER *tbuf; int rv; const char *t1a= I18N_NOOP("The following value could not be parsed: \n"); const char *t2a= I18N_NOOP("There are now two possibilities of what character\n" "represents the decimal fixpoint:\n" " 1) \'.\' (as in \"123.45\")\n" " 2) \',\' (as in \"123,45\")\n" "What is the fixpoint in the value above?"); const char *t1h= I18N_NOOP("The following value could not be parsed:
"); const char *t2h= I18N_NOOP("
" "There are now two possibilities of what character " "represents the decimal fixpoint: " "
    " "
  1. \'.\' (as in \"123.45\")
  2. \n" "
  3. \',\' (as in \"123,45\")
  4. \n" "
" "What is the fixpoint in the value above?" ""); /* this is weird, ask the user */ tbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(tbuf, t1a); GWEN_Buffer_AppendString(tbuf, paramContent); GWEN_Buffer_AppendString(tbuf, t2a); GWEN_Buffer_AppendString(tbuf, t1h); GWEN_Buffer_AppendString(tbuf, paramContent); GWEN_Buffer_AppendString(tbuf, t2h); rv=GWEN_Gui_MessageBox(GWEN_GUI_MSG_FLAGS_TYPE_WARN | GWEN_GUI_MSG_FLAGS_SEVERITY_NORMAL | GWEN_GUI_MSG_FLAGS_CONFIRM_B1, I18N("Value Parsing"), I18N(GWEN_Buffer_GetStart(tbuf)), I18N("Possibility 1"), I18N("Possibility 2"), 0, 0); GWEN_Buffer_free(tbuf); if (rv==1) { fixpoint='.'; komma=','; } else if (rv==2) { fixpoint=','; komma='.'; } else { DBG_INFO(AQBANKING_LOGDOMAIN, "here"); return rv; } } } /* if !fixpoint */ /* now we know what the fixpoint is, store it */ numbuf[0]=komma; numbuf[1]=0; GWEN_DB_SetCharValue(ieqif->dbData, GWEN_DB_FLAGS_OVERWRITE_VARS, "value/komma", numbuf); numbuf[0]=fixpoint; GWEN_DB_SetCharValue(ieqif->dbData, GWEN_DB_FLAGS_OVERWRITE_VARS, "value/fixpoint", numbuf); i=0; s=paramContent; while (*s && i<(int)sizeof(numbuf)) { if (*s==fixpoint) numbuf[i++]=','; else if (*s=='-' || *s=='+' || *s==isdigit(*s)) numbuf[i++]=*s; else if (*s!=komma) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Bad character in value string"); return GWEN_ERROR_BAD_DATA; } } if (i>=(int)sizeof(numbuf)) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Value string too long"); return GWEN_ERROR_BAD_DATA; } numbuf[i]=0; if (GWEN_Text_StringToDouble(numbuf, &dval)) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Value string does not contain a floating point value."); return GWEN_ERROR_BAD_DATA; } v=AB_Value_fromDouble(dval); *pv=v; return 0; } int AH_ImExporterQIF__ImportAccount(AB_IMEXPORTER *ie, AB_IMEXPORTER_CONTEXT *iec, GWEN_BUFFEREDIO *bio, GWEN_BUFFER *buf, GWEN_DB_NODE *params) { AH_IMEXPORTER_QIF *ieqif; GWEN_DB_NODE *dbData; AB_IMEXPORTER_ACCOUNTINFO *iea = 0; int done=0; const char *s; GWEN_TIME *ti=0; AB_VALUE *vCreditLine=0; AB_VALUE *vBalance=0; assert(ie); ieqif=GWEN_INHERIT_GETDATA(AB_IMEXPORTER, AH_IMEXPORTER_QIF, ie); assert(ieqif); dbData=GWEN_DB_Group_new("data"); while (!done) { const char *p; if (!GWEN_Buffer_GetUsedBytes(buf)) { int err; if (GWEN_BufferedIO_CheckEOF(bio)) { done=1; continue; } err=GWEN_BufferedIO_ReadLine2Buffer(bio, buf); if (err) { DBG_ERROR_ERR(AQBANKING_LOGDOMAIN, err); GWEN_DB_Group_free(dbData); return err; } } p=GWEN_Buffer_GetStart(buf); while (isspace(*p)) p++; switch (toupper(*p)) { case 'N': /* account name */ GWEN_DB_SetCharValue(dbData, GWEN_DB_FLAGS_OVERWRITE_VARS, "name", p+1); break; case 'T': /* account type */ GWEN_DB_SetCharValue(dbData, GWEN_DB_FLAGS_OVERWRITE_VARS, "type", p+1); break; case 'D': /* description */ GWEN_DB_SetCharValue(dbData, GWEN_DB_FLAGS_OVERWRITE_VARS, "descr", p+1); break; case 'L': /* credit line (credit card accounts only */ GWEN_DB_SetCharValue(dbData, GWEN_DB_FLAGS_OVERWRITE_VARS, "creditLine", p+1); break; case '/': /* date of statement balance */ GWEN_DB_SetCharValue(dbData, GWEN_DB_FLAGS_OVERWRITE_VARS, "date", p+1); break; case '$': /* statement balance */ GWEN_DB_SetCharValue(dbData, GWEN_DB_FLAGS_OVERWRITE_VARS, "balance", p+1); break; case '^': /* end of record */ done=1; break; default: /* unknown line, ignore */ DBG_WARN(AQBANKING_LOGDOMAIN, "Unknown item \"%s\", ignoring", GWEN_Buffer_GetStart(buf)); } /* switch */ GWEN_Buffer_Reset(buf); } /* while not end of block reached */ /* find account info by account name */ s=GWEN_DB_GetCharValue(dbData, "name", 0, 0); if (s) { iea=AB_ImExporterContext_GetFirstAccountInfo(iec); while (iea) { if (strcasecmp(AB_ImExporterAccountInfo_GetAccountName(iea), s)==0) break; iea=AB_ImExporterContext_GetNextAccountInfo(iec); } /* while */ } if (!iea) { /* not found, add it */ iea=AB_ImExporterAccountInfo_new(); AB_ImExporterContext_AddAccountInfo(iec, iea); /* set account info */ if (s) AB_ImExporterAccountInfo_SetAccountName(iea, s); s=GWEN_DB_GetCharValue(dbData, "descr", 0, 0); if (s) AB_ImExporterAccountInfo_SetDescription(iea, s); s=GWEN_DB_GetCharValue(dbData, "type", 0, 0); if (s) { if (strcasecmp(s, "bank")==0) AB_ImExporterAccountInfo_SetType(iea, AB_AccountType_Bank); else if (strcasecmp(s, "Invst")==0) AB_ImExporterAccountInfo_SetType(iea, AB_AccountType_Investment); else if (strcasecmp(s, "CCard")==0) AB_ImExporterAccountInfo_SetType(iea, AB_AccountType_CreditCard); else if (strcasecmp(s, "Cash")==0) AB_ImExporterAccountInfo_SetType(iea, AB_AccountType_Cash); else AB_ImExporterAccountInfo_SetType(iea, AB_AccountType_Unknown); } } assert(iea); ieqif->currentAccount=iea; s=GWEN_DB_GetCharValue(dbData, "date", 0, 0); if (s) { int rv; rv=AH_ImExporterQIF__GetDate(ie, params, "account/statement/dateFormat", I18N("Account statement date"), s, &ti); if (rv) { DBG_INFO(AQBANKING_LOGDOMAIN, "here"); GWEN_DB_Group_free(dbData); return rv; } }/* if date */ s=GWEN_DB_GetCharValue(dbData, "creditLine", 0, 0); if (s) { int rv; rv=AH_ImExporterQIF__GetValue(ie, params, "account/statement/creditLineFormat", I18N("Account statement credit line value"), s, &vCreditLine); if (rv) { DBG_INFO(AQBANKING_LOGDOMAIN, "here"); GWEN_Time_free(ti); GWEN_DB_Group_free(dbData); return rv; } }/* if date */ s=GWEN_DB_GetCharValue(dbData, "balance", 0, 0); if (s) { int rv; rv=AH_ImExporterQIF__GetValue(ie, params, "account/statement/balanceFormat", I18N("Account statement balance value"), s, &vBalance); if (rv) { DBG_INFO(AQBANKING_LOGDOMAIN, "here"); AB_Value_free(vCreditLine); GWEN_Time_free(ti); GWEN_DB_Group_free(dbData); return rv; } }/* if date */ if (ti && (vBalance || vCreditLine)) { AB_BALANCE *balance=0; AB_ACCOUNT_STATUS *ast=0; if (vBalance && ti) balance=AB_Balance_new(vBalance, ti); ast=AB_AccountStatus_new(); if (ti) AB_AccountStatus_SetTime(ast, ti); if (vCreditLine) AB_AccountStatus_SetBankLine(ast, vCreditLine); if (balance) AB_AccountStatus_SetBookedBalance(ast, balance); /* add account status */ AB_ImExporterAccountInfo_AddAccountStatus(iea, ast); AB_AccountStatus_free(ast); AB_Balance_free(balance); } AB_Value_free(vBalance); AB_Value_free(vCreditLine); GWEN_Time_free(ti); GWEN_DB_Group_free(dbData); return 0; } int AH_ImExporterQIF__ImportBank(AB_IMEXPORTER *ie, AB_IMEXPORTER_CONTEXT *iec, GWEN_BUFFEREDIO *bio, GWEN_BUFFER *buf, GWEN_DB_NODE *params) { AH_IMEXPORTER_QIF *ieqif; GWEN_DB_NODE *dbData; AB_IMEXPORTER_ACCOUNTINFO *iea; int done=0; const char *s; GWEN_TIME *ti=0; AB_VALUE *vAmount=0; GWEN_DB_NODE *dbCurrentSplit=0; AB_TRANSACTION *t=0; assert(ie); ieqif=GWEN_INHERIT_GETDATA(AB_IMEXPORTER, AH_IMEXPORTER_QIF, ie); assert(ieqif); dbData=GWEN_DB_Group_new("data"); while (!done) { const char *p; if (!GWEN_Buffer_GetUsedBytes(buf)) { int err; if (GWEN_BufferedIO_CheckEOF(bio)) { done=1; continue; } err=GWEN_BufferedIO_ReadLine2Buffer(bio, buf); if (err) { DBG_ERROR_ERR(AQBANKING_LOGDOMAIN, err); GWEN_DB_Group_free(dbData); return err; } } p=GWEN_Buffer_GetStart(buf); while (isspace(*p)) p++; switch (toupper(*p)) { case 'S': dbCurrentSplit=GWEN_DB_GetGroup(dbData, GWEN_PATH_FLAGS_CREATE_GROUP, "split"); assert(dbCurrentSplit); GWEN_DB_SetCharValue(dbCurrentSplit, GWEN_DB_FLAGS_OVERWRITE_VARS, "category", p+1); break; case '$': /* split amount */ assert(dbCurrentSplit); GWEN_DB_SetCharValue(dbCurrentSplit, GWEN_DB_FLAGS_OVERWRITE_VARS, "amount", p+1); break; case 'E': /* split memo */ assert(dbCurrentSplit); GWEN_DB_SetCharValue(dbCurrentSplit, GWEN_DB_FLAGS_OVERWRITE_VARS, "memo", p+1); break; case 'D': /* date */ GWEN_DB_SetCharValue(dbData, GWEN_DB_FLAGS_OVERWRITE_VARS, "date", p+1); break; case 'N': /* reference */ GWEN_DB_SetCharValue(dbData, GWEN_DB_FLAGS_OVERWRITE_VARS, "reference", p+1); break; case 'T': /* amount */ GWEN_DB_SetCharValue(dbData, GWEN_DB_FLAGS_OVERWRITE_VARS, "amount", p+1); break; case 'P': /* payee */ GWEN_DB_SetCharValue(dbData, GWEN_DB_FLAGS_DEFAULT, "payee", p+1); break; case 'M': /* memo */ GWEN_DB_SetCharValue(dbData, GWEN_DB_FLAGS_OVERWRITE_VARS, "memo", p+1); break; case 'A': /* address */ GWEN_DB_SetCharValue(dbData, GWEN_DB_FLAGS_DEFAULT, "address", p+1); break; case 'L': /* category */ GWEN_DB_SetCharValue(dbData, GWEN_DB_FLAGS_OVERWRITE_VARS, "category", p+1); break; case 'C': /* cleared status */ GWEN_DB_SetCharValue(dbData, GWEN_DB_FLAGS_OVERWRITE_VARS, "cleared", p+1); break; case '^': /* end of record */ done=1; break; default: /* unknown line, ignore */ DBG_WARN(AQBANKING_LOGDOMAIN, "Unknown item \"%s\", ignoring", GWEN_Buffer_GetStart(buf)); } /* switch */ GWEN_Buffer_Reset(buf); } /* while not end of block reached */ iea=ieqif->currentAccount; assert(iea); s=GWEN_DB_GetCharValue(dbData, "date", 0, 0); if (s) { int rv; rv=AH_ImExporterQIF__GetDate(ie, params, "account/statement/dateFormat", I18N("Account statement date"), s, &ti); if (rv) { DBG_INFO(AQBANKING_LOGDOMAIN, "here"); GWEN_DB_Group_free(dbData); return rv; } }/* if date */ s=GWEN_DB_GetCharValue(dbData, "amount", 0, 0); if (s) { int rv; rv=AH_ImExporterQIF__GetValue(ie, params, "bank/statement/amountFormat", I18N("Transaction statement amount value"), s, &vAmount); if (rv) { DBG_INFO(AQBANKING_LOGDOMAIN, "here"); GWEN_Time_free(ti); GWEN_DB_Group_free(dbData); return rv; } }/* if date */ t=AB_Transaction_new(); if (ti) { AB_Transaction_SetValutaDate(t, ti); AB_Transaction_SetDate(t, ti); } if (vAmount) AB_Transaction_SetValue(t, vAmount); s=GWEN_DB_GetCharValue(dbData, "payee", 0, 0); if (s) AB_Transaction_AddRemoteName(t, s, 0); s=GWEN_DB_GetCharValue(dbData, "memo", 0, 0); if (s) AB_Transaction_AddPurpose(t, s, 0); DBG_INFO(AQBANKING_LOGDOMAIN, "Adding transaction"); AB_ImExporterAccountInfo_AddTransaction(iea, t); AB_Value_free(vAmount); GWEN_Time_free(ti); GWEN_DB_Group_free(dbData); return 0; } int AH_ImExporterQIF_Import(AB_IMEXPORTER *ie, AB_IMEXPORTER_CONTEXT *ctx, GWEN_BUFFEREDIO *bio, GWEN_DB_NODE *params) { GWEN_BUFFER *buf; char lastSectionName[256]; AH_IMEXPORTER_QIF *ieqif; assert(ie); ieqif=GWEN_INHERIT_GETDATA(AB_IMEXPORTER, AH_IMEXPORTER_QIF, ie); assert(ieqif); buf=GWEN_Buffer_new(0, 256, 0, 1); while (!GWEN_BufferedIO_CheckEOF(bio)) { int err; const char *p; int rv; err=GWEN_BufferedIO_ReadLine2Buffer(bio, buf); if (err) { DBG_ERROR_ERR(AQBANKING_LOGDOMAIN, err); GWEN_Buffer_free(buf); return err; } p=GWEN_Buffer_GetStart(buf); while (isspace(*p)) p++; if (*p=='!') { p++; if (strlen(p)>=(int)sizeof(lastSectionName)) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Buffer too small. Internal error, should not occurr."); abort(); } strcpy(lastSectionName, p); GWEN_Buffer_Reset(buf); } if (lastSectionName[0]) { if (strcasecmp(lastSectionName, "Account")==0) rv=AH_ImExporterQIF__ImportAccount(ie, ctx, bio, buf, params); else { DBG_WARN(AQBANKING_LOGDOMAIN, "Unknown section \"%s\", ignoring", GWEN_Buffer_GetStart(buf)); lastSectionName[0]=0; rv=0; /* ignore this section */ } } GWEN_Buffer_Reset(buf); } /* while */ return 0; } int AH_ImExporterQIF_Export(AB_IMEXPORTER *ie, AB_IMEXPORTER_CONTEXT *ctx, GWEN_BUFFEREDIO *bio, GWEN_DB_NODE *params) { return GWEN_ERROR_NOT_SUPPORTED; } aqbanking-6.6.1/src/libs/plugins/imexporters/ctxfile/0000755000175000017500000000000015037736160017710 500000000000000aqbanking-6.6.1/src/libs/plugins/imexporters/ctxfile/ctxfile.xml.in0000664000175000017500000000051414043610745022413 00000000000000 @AQBANKING_VERSION_STRING@ Martin Preuss(martin@libchipcard.de) This plugin directly reads and writes context files. This plugin imports/exports CTX files. aqbanking-6.6.1/src/libs/plugins/imexporters/ctxfile/profiles/0000755000175000017500000000000015037736160021533 500000000000000aqbanking-6.6.1/src/libs/plugins/imexporters/ctxfile/profiles/default.conf0000664000175000017500000000024014043610745023740 00000000000000 char name="default" char shortDescr="default profile" char longDescr="This profile supports context files" int import="1" int export="1" params { } # params aqbanking-6.6.1/src/libs/plugins/imexporters/ctxfile/profiles/Makefile.in0000644000175000017500000004576315037736026023540 00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/libs/plugins/imexporters/ctxfile/profiles ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/distri.m4 $(top_srcdir)/m4/gwenhywfar.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/os.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(profilesdir)" DATA = $(profiles_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADD_ACLOCAL_FLAGS = @ADD_ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AQBANKING_CLI_VERSION_STRING = @AQBANKING_CLI_VERSION_STRING@ AQBANKING_FINTS_VERSION_STRING = @AQBANKING_FINTS_VERSION_STRING@ AQBANKING_SO_AGE = @AQBANKING_SO_AGE@ AQBANKING_SO_CURRENT = @AQBANKING_SO_CURRENT@ AQBANKING_SO_EFFECTIVE = @AQBANKING_SO_EFFECTIVE@ AQBANKING_SO_REVISION = @AQBANKING_SO_REVISION@ AQBANKING_VERSION_BUILD = @AQBANKING_VERSION_BUILD@ AQBANKING_VERSION_FULL_STRING = @AQBANKING_VERSION_FULL_STRING@ AQBANKING_VERSION_MAJOR = @AQBANKING_VERSION_MAJOR@ AQBANKING_VERSION_MINOR = @AQBANKING_VERSION_MINOR@ AQBANKING_VERSION_PATCHLEVEL = @AQBANKING_VERSION_PATCHLEVEL@ AQBANKING_VERSION_RELEASE_STRING = @AQBANKING_VERSION_RELEASE_STRING@ AQBANKING_VERSION_STRING = @AQBANKING_VERSION_STRING@ AQBANKING_VERSION_TAG = @AQBANKING_VERSION_TAG@ AQEBICS_CFLAGS = @AQEBICS_CFLAGS@ AQEBICS_LIBS = @AQEBICS_LIBS@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATETIME = @DATETIME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_EXCLUDE_PATTERNS = @DOXYGEN_EXCLUDE_PATTERNS@ DOXYGEN_FILE_PATTERNS = @DOXYGEN_FILE_PATTERNS@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENGUI_GTK2_CFLAGS = @GWENGUI_GTK2_CFLAGS@ GWENGUI_GTK2_LIBS = @GWENGUI_GTK2_LIBS@ GWENHYWFAR_MINIMUM_VERSION = @GWENHYWFAR_MINIMUM_VERSION@ HAVE_GWENGUI_GTK2 = @HAVE_GWENGUI_GTK2@ HAVE_I18N = @HAVE_I18N@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIBXSLT_CFLAGS = @LIBXSLT_CFLAGS@ LIBXSLT_LIBS = @LIBXSLT_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_SUPPORTS_QT = @MSGFMT_SUPPORTS_QT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ TUTORIALS = @TUTORIALS@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XMLMERGE = @XMLMERGE@ XMLSEC_CFLAGS = @XMLSEC_CFLAGS@ XMLSEC_LIBS = @XMLSEC_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ aqbanking_backends = @aqbanking_backends@ aqbanking_cfg_searchdir = @aqbanking_cfg_searchdir@ aqbanking_data_searchdir = @aqbanking_data_searchdir@ aqbanking_headerdir = @aqbanking_headerdir@ aqbanking_headerdir_am = @aqbanking_headerdir_am@ aqbanking_includes = @aqbanking_includes@ aqbanking_internal_libs = @aqbanking_internal_libs@ aqbanking_ldflags = @aqbanking_ldflags@ aqbanking_libs = @aqbanking_libs@ aqbanking_locale_searchdir = @aqbanking_locale_searchdir@ aqbanking_modules = @aqbanking_modules@ aqbanking_pkgdatadir = @aqbanking_pkgdatadir@ aqbanking_plugin_searchdir = @aqbanking_plugin_searchdir@ aqbanking_plugindir = @aqbanking_plugindir@ aqbanking_plugins_backends_dirs = @aqbanking_plugins_backends_dirs@ aqbanking_plugins_backends_libs = @aqbanking_plugins_backends_libs@ aqbanking_plugins_bankinfo_dirs = @aqbanking_plugins_bankinfo_dirs@ aqbanking_plugins_bankinfo_libs = @aqbanking_plugins_bankinfo_libs@ aqbanking_plugins_imexporters_dirs = @aqbanking_plugins_imexporters_dirs@ aqbanking_plugins_imexporters_libs = @aqbanking_plugins_imexporters_libs@ aqbanking_plugins_parsers_dirs = @aqbanking_plugins_parsers_dirs@ aqbanking_symlinkdir = @aqbanking_symlinkdir@ aqbanking_sys_is_windows = @aqbanking_sys_is_windows@ aqbankingpp_modules = @aqbankingpp_modules@ aqebics_datadir = @aqebics_datadir@ aqebics_includes = @aqebics_includes@ aqebics_internal_libs = @aqebics_internal_libs@ aqebics_ldflags = @aqebics_ldflags@ aqebics_libs = @aqebics_libs@ aqfints_datadir = @aqfints_datadir@ aqhbci_datadir = @aqhbci_datadir@ aqhbci_includes = @aqhbci_includes@ aqhbci_internal_libs = @aqhbci_internal_libs@ aqhbci_ldflags = @aqhbci_ldflags@ aqhbci_libs = @aqhbci_libs@ aqofxconnect_includes = @aqofxconnect_includes@ aqofxconnect_internal_libs = @aqofxconnect_internal_libs@ aqofxconnect_libs = @aqofxconnect_libs@ aqpaypal_includes = @aqpaypal_includes@ aqpaypal_internal_libs = @aqpaypal_internal_libs@ aqpaypal_libs = @aqpaypal_libs@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gmp_libs = @gmp_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_dir = @gwenhywfar_dir@ gwenhywfar_has_crypt = @gwenhywfar_has_crypt@ gwenhywfar_headers = @gwenhywfar_headers@ gwenhywfar_includes = @gwenhywfar_includes@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_plugins = @gwenhywfar_plugins@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ typemaker2_exe = @typemaker2_exe@ visibility_cflags = @visibility_cflags@ with_aqebics = @with_aqebics@ with_aqhbci = @with_aqhbci@ profilesdir = $(aqbanking_pkgdatadir)/imexporters/ctxfile/profiles profiles_DATA = default.conf EXTRA_DIST = $(profiles_DATA) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libs/plugins/imexporters/ctxfile/profiles/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libs/plugins/imexporters/ctxfile/profiles/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-profilesDATA: $(profiles_DATA) @$(NORMAL_INSTALL) @list='$(profiles_DATA)'; test -n "$(profilesdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(profilesdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(profilesdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(profilesdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(profilesdir)" || exit $$?; \ done uninstall-profilesDATA: @$(NORMAL_UNINSTALL) @list='$(profiles_DATA)'; test -n "$(profilesdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(profilesdir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(profilesdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-profilesDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-profilesDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-profilesDATA install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags-am uninstall uninstall-am uninstall-profilesDATA .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: aqbanking-6.6.1/src/libs/plugins/imexporters/ctxfile/profiles/Makefile.am0000664000175000017500000000017414043610745023507 00000000000000 profilesdir = $(aqbanking_pkgdatadir)/imexporters/ctxfile/profiles profiles_DATA=default.conf EXTRA_DIST=$(profiles_DATA) aqbanking-6.6.1/src/libs/plugins/imexporters/ctxfile/ctxfile.h0000664000175000017500000000123514043610745021436 00000000000000/*************************************************************************** begin : Tue Mar 31 2009 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AQHBCI_IMEX_CTXFILE_H #define AQHBCI_IMEX_CTXFILE_H #include #include AB_IMEXPORTER *AB_ImExporterCtxFile_new(AB_BANKING *ab); #endif /* AQHBCI_IMEX_CTXFILE_H */ aqbanking-6.6.1/src/libs/plugins/imexporters/ctxfile/README0000664000175000017500000000000014043610745020474 00000000000000aqbanking-6.6.1/src/libs/plugins/imexporters/ctxfile/Makefile.am0000664000175000017500000000137114043610745021664 00000000000000SUBDIRS=profiles AM_CPPFLAGS = -I$(top_srcdir)/src/libs \ -I$(top_builddir)/src/libs \ $(gwenhywfar_includes) AM_CFLAGS=-DBUILDING_AQBANKING @visibility_cflags@ EXTRA_DIST=README imexporterplugindir = $(aqbanking_plugindir)/imexporters noinst_LTLIBRARIES=libabimexporters_ctxfile.la imexporterplugin_DATA=ctxfile.xml noinst_HEADERS=ctxfile_p.h ctxfile.h libabimexporters_ctxfile_la_SOURCES=ctxfile.c typefiles: typedefs: sources: for f in $(libabimexporters_ctxfile_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for f in $(imexporterplugin_DATA); do \ echo $(subdir)/$$f >>$(top_srcdir)/pdsources; \ done cppcheck: for f in $(libabimexporters_ctxfile_la_SOURCES); do \ cppcheck --force $$f ; \ done aqbanking-6.6.1/src/libs/plugins/imexporters/ctxfile/Makefile.in0000644000175000017500000007362415037736026021712 00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/libs/plugins/imexporters/ctxfile ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/distri.m4 $(top_srcdir)/m4/gwenhywfar.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/os.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = ctxfile.xml CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libabimexporters_ctxfile_la_LIBADD = am_libabimexporters_ctxfile_la_OBJECTS = ctxfile.lo libabimexporters_ctxfile_la_OBJECTS = \ $(am_libabimexporters_ctxfile_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/ctxfile.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libabimexporters_ctxfile_la_SOURCES) DIST_SOURCES = $(libabimexporters_ctxfile_la_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(imexporterplugindir)" DATA = $(imexporterplugin_DATA) HEADERS = $(noinst_HEADERS) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir distdir-am am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/ctxfile.xml.in \ $(top_srcdir)/depcomp README DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ADD_ACLOCAL_FLAGS = @ADD_ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AQBANKING_CLI_VERSION_STRING = @AQBANKING_CLI_VERSION_STRING@ AQBANKING_FINTS_VERSION_STRING = @AQBANKING_FINTS_VERSION_STRING@ AQBANKING_SO_AGE = @AQBANKING_SO_AGE@ AQBANKING_SO_CURRENT = @AQBANKING_SO_CURRENT@ AQBANKING_SO_EFFECTIVE = @AQBANKING_SO_EFFECTIVE@ AQBANKING_SO_REVISION = @AQBANKING_SO_REVISION@ AQBANKING_VERSION_BUILD = @AQBANKING_VERSION_BUILD@ AQBANKING_VERSION_FULL_STRING = @AQBANKING_VERSION_FULL_STRING@ AQBANKING_VERSION_MAJOR = @AQBANKING_VERSION_MAJOR@ AQBANKING_VERSION_MINOR = @AQBANKING_VERSION_MINOR@ AQBANKING_VERSION_PATCHLEVEL = @AQBANKING_VERSION_PATCHLEVEL@ AQBANKING_VERSION_RELEASE_STRING = @AQBANKING_VERSION_RELEASE_STRING@ AQBANKING_VERSION_STRING = @AQBANKING_VERSION_STRING@ AQBANKING_VERSION_TAG = @AQBANKING_VERSION_TAG@ AQEBICS_CFLAGS = @AQEBICS_CFLAGS@ AQEBICS_LIBS = @AQEBICS_LIBS@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATETIME = @DATETIME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_EXCLUDE_PATTERNS = @DOXYGEN_EXCLUDE_PATTERNS@ DOXYGEN_FILE_PATTERNS = @DOXYGEN_FILE_PATTERNS@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENGUI_GTK2_CFLAGS = @GWENGUI_GTK2_CFLAGS@ GWENGUI_GTK2_LIBS = @GWENGUI_GTK2_LIBS@ GWENHYWFAR_MINIMUM_VERSION = @GWENHYWFAR_MINIMUM_VERSION@ HAVE_GWENGUI_GTK2 = @HAVE_GWENGUI_GTK2@ HAVE_I18N = @HAVE_I18N@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIBXSLT_CFLAGS = @LIBXSLT_CFLAGS@ LIBXSLT_LIBS = @LIBXSLT_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_SUPPORTS_QT = @MSGFMT_SUPPORTS_QT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ TUTORIALS = @TUTORIALS@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XMLMERGE = @XMLMERGE@ XMLSEC_CFLAGS = @XMLSEC_CFLAGS@ XMLSEC_LIBS = @XMLSEC_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ aqbanking_backends = @aqbanking_backends@ aqbanking_cfg_searchdir = @aqbanking_cfg_searchdir@ aqbanking_data_searchdir = @aqbanking_data_searchdir@ aqbanking_headerdir = @aqbanking_headerdir@ aqbanking_headerdir_am = @aqbanking_headerdir_am@ aqbanking_includes = @aqbanking_includes@ aqbanking_internal_libs = @aqbanking_internal_libs@ aqbanking_ldflags = @aqbanking_ldflags@ aqbanking_libs = @aqbanking_libs@ aqbanking_locale_searchdir = @aqbanking_locale_searchdir@ aqbanking_modules = @aqbanking_modules@ aqbanking_pkgdatadir = @aqbanking_pkgdatadir@ aqbanking_plugin_searchdir = @aqbanking_plugin_searchdir@ aqbanking_plugindir = @aqbanking_plugindir@ aqbanking_plugins_backends_dirs = @aqbanking_plugins_backends_dirs@ aqbanking_plugins_backends_libs = @aqbanking_plugins_backends_libs@ aqbanking_plugins_bankinfo_dirs = @aqbanking_plugins_bankinfo_dirs@ aqbanking_plugins_bankinfo_libs = @aqbanking_plugins_bankinfo_libs@ aqbanking_plugins_imexporters_dirs = @aqbanking_plugins_imexporters_dirs@ aqbanking_plugins_imexporters_libs = @aqbanking_plugins_imexporters_libs@ aqbanking_plugins_parsers_dirs = @aqbanking_plugins_parsers_dirs@ aqbanking_symlinkdir = @aqbanking_symlinkdir@ aqbanking_sys_is_windows = @aqbanking_sys_is_windows@ aqbankingpp_modules = @aqbankingpp_modules@ aqebics_datadir = @aqebics_datadir@ aqebics_includes = @aqebics_includes@ aqebics_internal_libs = @aqebics_internal_libs@ aqebics_ldflags = @aqebics_ldflags@ aqebics_libs = @aqebics_libs@ aqfints_datadir = @aqfints_datadir@ aqhbci_datadir = @aqhbci_datadir@ aqhbci_includes = @aqhbci_includes@ aqhbci_internal_libs = @aqhbci_internal_libs@ aqhbci_ldflags = @aqhbci_ldflags@ aqhbci_libs = @aqhbci_libs@ aqofxconnect_includes = @aqofxconnect_includes@ aqofxconnect_internal_libs = @aqofxconnect_internal_libs@ aqofxconnect_libs = @aqofxconnect_libs@ aqpaypal_includes = @aqpaypal_includes@ aqpaypal_internal_libs = @aqpaypal_internal_libs@ aqpaypal_libs = @aqpaypal_libs@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gmp_libs = @gmp_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_dir = @gwenhywfar_dir@ gwenhywfar_has_crypt = @gwenhywfar_has_crypt@ gwenhywfar_headers = @gwenhywfar_headers@ gwenhywfar_includes = @gwenhywfar_includes@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_plugins = @gwenhywfar_plugins@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ typemaker2_exe = @typemaker2_exe@ visibility_cflags = @visibility_cflags@ with_aqebics = @with_aqebics@ with_aqhbci = @with_aqhbci@ SUBDIRS = profiles AM_CPPFLAGS = -I$(top_srcdir)/src/libs \ -I$(top_builddir)/src/libs \ $(gwenhywfar_includes) AM_CFLAGS = -DBUILDING_AQBANKING @visibility_cflags@ EXTRA_DIST = README imexporterplugindir = $(aqbanking_plugindir)/imexporters noinst_LTLIBRARIES = libabimexporters_ctxfile.la imexporterplugin_DATA = ctxfile.xml noinst_HEADERS = ctxfile_p.h ctxfile.h libabimexporters_ctxfile_la_SOURCES = ctxfile.c all: all-recursive .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libs/plugins/imexporters/ctxfile/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libs/plugins/imexporters/ctxfile/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): ctxfile.xml: $(top_builddir)/config.status $(srcdir)/ctxfile.xml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libabimexporters_ctxfile.la: $(libabimexporters_ctxfile_la_OBJECTS) $(libabimexporters_ctxfile_la_DEPENDENCIES) $(EXTRA_libabimexporters_ctxfile_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libabimexporters_ctxfile_la_OBJECTS) $(libabimexporters_ctxfile_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ctxfile.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-imexporterpluginDATA: $(imexporterplugin_DATA) @$(NORMAL_INSTALL) @list='$(imexporterplugin_DATA)'; test -n "$(imexporterplugindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(imexporterplugindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(imexporterplugindir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(imexporterplugindir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(imexporterplugindir)" || exit $$?; \ done uninstall-imexporterpluginDATA: @$(NORMAL_UNINSTALL) @list='$(imexporterplugin_DATA)'; test -n "$(imexporterplugindir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(imexporterplugindir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(imexporterplugindir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-recursive -rm -f ./$(DEPDIR)/ctxfile.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-imexporterpluginDATA install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f ./$(DEPDIR)/ctxfile.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-imexporterpluginDATA .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ am--depfiles check check-am clean clean-generic clean-libtool \ clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-imexporterpluginDATA install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am \ uninstall-imexporterpluginDATA .PRECIOUS: Makefile typefiles: typedefs: sources: for f in $(libabimexporters_ctxfile_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for f in $(imexporterplugin_DATA); do \ echo $(subdir)/$$f >>$(top_srcdir)/pdsources; \ done cppcheck: for f in $(libabimexporters_ctxfile_la_SOURCES); do \ cppcheck --force $$f ; \ done # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: aqbanking-6.6.1/src/libs/plugins/imexporters/ctxfile/ctxfile.c0000664000175000017500000001023714043610745021433 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "ctxfile_p.h" #include "aqbanking/i18n_l.h" #include #include #include #include #include GWEN_INHERIT(AB_IMEXPORTER, AH_IMEXPORTER_CTXFILE); AB_IMEXPORTER *AB_ImExporterCtxFile_new(AB_BANKING *ab) { AB_IMEXPORTER *ie; AH_IMEXPORTER_CTXFILE *ieh; ie=AB_ImExporter_new(ab, "ctxfile"); GWEN_NEW_OBJECT(AH_IMEXPORTER_CTXFILE, ieh); GWEN_INHERIT_SETDATA(AB_IMEXPORTER, AH_IMEXPORTER_CTXFILE, ie, ieh, AH_ImExporterCtxFile_FreeData); AB_ImExporter_SetImportFn(ie, AH_ImExporterCtxFile_Import); AB_ImExporter_SetExportFn(ie, AH_ImExporterCtxFile_Export); AB_ImExporter_SetCheckFileFn(ie, AH_ImExporterCtxFile_CheckFile); return ie; } void GWENHYWFAR_CB AH_ImExporterCtxFile_FreeData(void *bp, void *p) { AH_IMEXPORTER_CTXFILE *ieh; ieh=(AH_IMEXPORTER_CTXFILE *)p; GWEN_FREE_OBJECT(ieh); } int AH_ImExporterCtxFile_Import(AB_IMEXPORTER *ie, AB_IMEXPORTER_CONTEXT *ctx, GWEN_SYNCIO *sio, GWEN_DB_NODE *params) { AH_IMEXPORTER_CTXFILE *ieh; GWEN_DB_NODE *dbData; int rv; assert(ie); ieh=GWEN_INHERIT_GETDATA(AB_IMEXPORTER, AH_IMEXPORTER_CTXFILE, ie); assert(ieh); dbData=GWEN_DB_Group_new("context"); rv=GWEN_DB_ReadFromIo(dbData, sio, GWEN_DB_FLAGS_DEFAULT | GWEN_PATH_FLAGS_CREATE_GROUP); if (rv) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Error importing data (%d)", rv); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, "Error importing data"); GWEN_DB_Group_free(dbData); return GWEN_ERROR_GENERIC; } /* transform DB to transactions */ GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Notice, I18N("Data imported, transforming to UTF-8")); rv=AB_ImExporter_DbFromIso8859_1ToUtf8(dbData); if (rv) { GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, "Error converting data"); GWEN_DB_Group_free(dbData); return rv; } GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Notice, "Transforming data to transactions"); AB_ImExporterContext_ReadDb(ctx, dbData); GWEN_DB_Group_free(dbData); return 0; } int AH_ImExporterCtxFile_CheckFile(AB_IMEXPORTER *ie, const char *fname) { AH_IMEXPORTER_CTXFILE *ieh; assert(ie); ieh=GWEN_INHERIT_GETDATA(AB_IMEXPORTER, AH_IMEXPORTER_CTXFILE, ie); assert(ieh); /* always return indifferent (for now) */ return AB_ERROR_INDIFFERENT; } int AH_ImExporterCtxFile_Export(AB_IMEXPORTER *ie, AB_IMEXPORTER_CONTEXT *ctx, GWEN_SYNCIO *sio, GWEN_DB_NODE *params) { AH_IMEXPORTER_CTXFILE *ieh; GWEN_DB_NODE *dbData; int rv; assert(ie); ieh=GWEN_INHERIT_GETDATA(AB_IMEXPORTER, AH_IMEXPORTER_CTXFILE, ie); assert(ieh); /* create db, store context in it */ dbData=GWEN_DB_Group_new("context"); rv=AB_ImExporterContext_toDb(ctx, dbData); if (rv) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Error exporting data (%d)", rv); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, "Error exporting data"); GWEN_DB_Group_free(dbData); return GWEN_ERROR_GENERIC; } rv=GWEN_DB_WriteToIo(dbData, sio, GWEN_DB_FLAGS_DEFAULT); if (rv) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Error exporting data (%d)", rv); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, "Error exporting data"); GWEN_DB_Group_free(dbData); return GWEN_ERROR_GENERIC; } GWEN_DB_Group_free(dbData); return 0; } aqbanking-6.6.1/src/libs/plugins/imexporters/ctxfile/ctxfile_p.h0000664000175000017500000000256414043610745021763 00000000000000/*************************************************************************** begin : Tue Mar 31 2009 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AQHBCI_IMEX_CTXFILE_P_H #define AQHBCI_IMEX_CTXFILE_P_H #include "ctxfile.h" #include #include typedef struct AH_IMEXPORTER_CTXFILE AH_IMEXPORTER_CTXFILE; struct AH_IMEXPORTER_CTXFILE { int dummy; }; static void GWENHYWFAR_CB AH_ImExporterCtxFile_FreeData(void *bp, void *p); static int AH_ImExporterCtxFile_Import(AB_IMEXPORTER *ie, AB_IMEXPORTER_CONTEXT *ctx, GWEN_SYNCIO *sio, GWEN_DB_NODE *params); static int AH_ImExporterCtxFile_Export(AB_IMEXPORTER *ie, AB_IMEXPORTER_CONTEXT *ctx, GWEN_SYNCIO *sio, GWEN_DB_NODE *params); static int AH_ImExporterCtxFile_CheckFile(AB_IMEXPORTER *ie, const char *fname); #endif /* AQHBCI_IMEX_CTXFILE_P_H */ aqbanking-6.6.1/src/libs/plugins/imexporters/camt/0000755000175000017500000000000015037736160017176 500000000000000aqbanking-6.6.1/src/libs/plugins/imexporters/camt/camt.xml.in0000664000175000017500000000046514043610745021174 00000000000000 @AQBANKING_VERSION_STRING@ Martin Preuss(martin@libchipcard.de) This plugin reads and writes CAMT files. This plugin imports CAMT files. aqbanking-6.6.1/src/libs/plugins/imexporters/camt/camt.h0000664000175000017500000000117214043610745020212 00000000000000/*************************************************************************** begin : Sat Dec 15 2018 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AQBANKING_IMEX_CAMT_H #define AQBANKING_IMEX_CAMT_H #include AB_IMEXPORTER *AB_ImExporterCAMT_new(AB_BANKING *ab); #endif /* AQBANKING_IMEX_CAMT_H */ aqbanking-6.6.1/src/libs/plugins/imexporters/camt/profiles/0000755000175000017500000000000015037736160021021 500000000000000aqbanking-6.6.1/src/libs/plugins/imexporters/camt/profiles/052_001_02.conf0000664000175000017500000000047114043610745022777 00000000000000 char name="052_001_02" char shortDescr="camt.052.001.02" char longDescr="Profile for pain.001.001.02 (sepade rather than ISO version)" int import="0" int export="1" char type="052.001.02" # XML namespace of the pain messages handled by this profile char xmlns="urn:iso:std:iso:20022:tech:xsd:camt.052.001.02" aqbanking-6.6.1/src/libs/plugins/imexporters/camt/profiles/Makefile.in0000644000175000017500000004576715037736026023032 00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/libs/plugins/imexporters/camt/profiles ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/distri.m4 $(top_srcdir)/m4/gwenhywfar.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/os.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(profilesdir)" DATA = $(profiles_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADD_ACLOCAL_FLAGS = @ADD_ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AQBANKING_CLI_VERSION_STRING = @AQBANKING_CLI_VERSION_STRING@ AQBANKING_FINTS_VERSION_STRING = @AQBANKING_FINTS_VERSION_STRING@ AQBANKING_SO_AGE = @AQBANKING_SO_AGE@ AQBANKING_SO_CURRENT = @AQBANKING_SO_CURRENT@ AQBANKING_SO_EFFECTIVE = @AQBANKING_SO_EFFECTIVE@ AQBANKING_SO_REVISION = @AQBANKING_SO_REVISION@ AQBANKING_VERSION_BUILD = @AQBANKING_VERSION_BUILD@ AQBANKING_VERSION_FULL_STRING = @AQBANKING_VERSION_FULL_STRING@ AQBANKING_VERSION_MAJOR = @AQBANKING_VERSION_MAJOR@ AQBANKING_VERSION_MINOR = @AQBANKING_VERSION_MINOR@ AQBANKING_VERSION_PATCHLEVEL = @AQBANKING_VERSION_PATCHLEVEL@ AQBANKING_VERSION_RELEASE_STRING = @AQBANKING_VERSION_RELEASE_STRING@ AQBANKING_VERSION_STRING = @AQBANKING_VERSION_STRING@ AQBANKING_VERSION_TAG = @AQBANKING_VERSION_TAG@ AQEBICS_CFLAGS = @AQEBICS_CFLAGS@ AQEBICS_LIBS = @AQEBICS_LIBS@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATETIME = @DATETIME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_EXCLUDE_PATTERNS = @DOXYGEN_EXCLUDE_PATTERNS@ DOXYGEN_FILE_PATTERNS = @DOXYGEN_FILE_PATTERNS@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENGUI_GTK2_CFLAGS = @GWENGUI_GTK2_CFLAGS@ GWENGUI_GTK2_LIBS = @GWENGUI_GTK2_LIBS@ GWENHYWFAR_MINIMUM_VERSION = @GWENHYWFAR_MINIMUM_VERSION@ HAVE_GWENGUI_GTK2 = @HAVE_GWENGUI_GTK2@ HAVE_I18N = @HAVE_I18N@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIBXSLT_CFLAGS = @LIBXSLT_CFLAGS@ LIBXSLT_LIBS = @LIBXSLT_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_SUPPORTS_QT = @MSGFMT_SUPPORTS_QT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ TUTORIALS = @TUTORIALS@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XMLMERGE = @XMLMERGE@ XMLSEC_CFLAGS = @XMLSEC_CFLAGS@ XMLSEC_LIBS = @XMLSEC_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ aqbanking_backends = @aqbanking_backends@ aqbanking_cfg_searchdir = @aqbanking_cfg_searchdir@ aqbanking_data_searchdir = @aqbanking_data_searchdir@ aqbanking_headerdir = @aqbanking_headerdir@ aqbanking_headerdir_am = @aqbanking_headerdir_am@ aqbanking_includes = @aqbanking_includes@ aqbanking_internal_libs = @aqbanking_internal_libs@ aqbanking_ldflags = @aqbanking_ldflags@ aqbanking_libs = @aqbanking_libs@ aqbanking_locale_searchdir = @aqbanking_locale_searchdir@ aqbanking_modules = @aqbanking_modules@ aqbanking_pkgdatadir = @aqbanking_pkgdatadir@ aqbanking_plugin_searchdir = @aqbanking_plugin_searchdir@ aqbanking_plugindir = @aqbanking_plugindir@ aqbanking_plugins_backends_dirs = @aqbanking_plugins_backends_dirs@ aqbanking_plugins_backends_libs = @aqbanking_plugins_backends_libs@ aqbanking_plugins_bankinfo_dirs = @aqbanking_plugins_bankinfo_dirs@ aqbanking_plugins_bankinfo_libs = @aqbanking_plugins_bankinfo_libs@ aqbanking_plugins_imexporters_dirs = @aqbanking_plugins_imexporters_dirs@ aqbanking_plugins_imexporters_libs = @aqbanking_plugins_imexporters_libs@ aqbanking_plugins_parsers_dirs = @aqbanking_plugins_parsers_dirs@ aqbanking_symlinkdir = @aqbanking_symlinkdir@ aqbanking_sys_is_windows = @aqbanking_sys_is_windows@ aqbankingpp_modules = @aqbankingpp_modules@ aqebics_datadir = @aqebics_datadir@ aqebics_includes = @aqebics_includes@ aqebics_internal_libs = @aqebics_internal_libs@ aqebics_ldflags = @aqebics_ldflags@ aqebics_libs = @aqebics_libs@ aqfints_datadir = @aqfints_datadir@ aqhbci_datadir = @aqhbci_datadir@ aqhbci_includes = @aqhbci_includes@ aqhbci_internal_libs = @aqhbci_internal_libs@ aqhbci_ldflags = @aqhbci_ldflags@ aqhbci_libs = @aqhbci_libs@ aqofxconnect_includes = @aqofxconnect_includes@ aqofxconnect_internal_libs = @aqofxconnect_internal_libs@ aqofxconnect_libs = @aqofxconnect_libs@ aqpaypal_includes = @aqpaypal_includes@ aqpaypal_internal_libs = @aqpaypal_internal_libs@ aqpaypal_libs = @aqpaypal_libs@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gmp_libs = @gmp_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_dir = @gwenhywfar_dir@ gwenhywfar_has_crypt = @gwenhywfar_has_crypt@ gwenhywfar_headers = @gwenhywfar_headers@ gwenhywfar_includes = @gwenhywfar_includes@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_plugins = @gwenhywfar_plugins@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ typemaker2_exe = @typemaker2_exe@ visibility_cflags = @visibility_cflags@ with_aqebics = @with_aqebics@ with_aqhbci = @with_aqhbci@ profilesdir = $(aqbanking_pkgdatadir)/imexporters/camt/profiles profiles_DATA = default.conf 052_001_02.conf EXTRA_DIST = $(profiles_DATA) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libs/plugins/imexporters/camt/profiles/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libs/plugins/imexporters/camt/profiles/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-profilesDATA: $(profiles_DATA) @$(NORMAL_INSTALL) @list='$(profiles_DATA)'; test -n "$(profilesdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(profilesdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(profilesdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(profilesdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(profilesdir)" || exit $$?; \ done uninstall-profilesDATA: @$(NORMAL_UNINSTALL) @list='$(profiles_DATA)'; test -n "$(profilesdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(profilesdir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(profilesdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-profilesDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-profilesDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-profilesDATA install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags-am uninstall uninstall-am uninstall-profilesDATA .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: aqbanking-6.6.1/src/libs/plugins/imexporters/camt/profiles/Makefile.am0000664000175000017500000000021114043610745022765 00000000000000 profilesdir = $(aqbanking_pkgdatadir)/imexporters/camt/profiles profiles_DATA=default.conf 052_001_02.conf EXTRA_DIST=$(profiles_DATA) aqbanking-6.6.1/src/libs/plugins/imexporters/camt/profiles/default.conf0000664000175000017500000000043114043610745023230 00000000000000 char name="default" char shortDescr="default profile" char longDescr="This profile supports transfers" int import="0" int export="1" char type="052.001.02" # XML namespace of the pain messages handled by this profile char xmlns="urn:iso:std:iso:20022:tech:xsd:camt.052.001.02" aqbanking-6.6.1/src/libs/plugins/imexporters/camt/camt_p.h0000664000175000017500000000311214043610745020525 00000000000000/*************************************************************************** begin : Sat Dec 15 2018 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AQBANKING_IMEX_CAMT_P_H #define AQBANKING_IMEX_CAMT_P_H #include "camt.h" #include typedef struct AH_IMEXPORTER_CAMT AH_IMEXPORTER_CAMT; struct AH_IMEXPORTER_CAMT { int dummy; }; static void GWENHYWFAR_CB AH_ImExporterCAMT_FreeData(void *bp, void *p); static int AH_ImExporterCAMT_Import(AB_IMEXPORTER *ie, AB_IMEXPORTER_CONTEXT *ctx, GWEN_SYNCIO *sio, GWEN_DB_NODE *params); static int AH_ImExporterCAMT_Export(AB_IMEXPORTER *ie, AB_IMEXPORTER_CONTEXT *ctx, GWEN_SYNCIO *sio, GWEN_DB_NODE *params); static int AH_ImExporterCAMT_CheckFile(AB_IMEXPORTER *ie, const char *fname); static int AH_ImExporterCAMT_Import_052_001_02(AB_IMEXPORTER *ie, AB_IMEXPORTER_CONTEXT *ctx, GWEN_DB_NODE *params, GWEN_XMLNODE *xmlRoot); #endif /* AQBANKING_IMEX_CAMT_P_H */ aqbanking-6.6.1/src/libs/plugins/imexporters/camt/Makefile.in0000644000175000017500000007353415037736026021200 00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/libs/plugins/imexporters/camt ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/distri.m4 $(top_srcdir)/m4/gwenhywfar.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/os.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = camt.xml CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libabimexporters_camt_la_LIBADD = am_libabimexporters_camt_la_OBJECTS = camt.lo libabimexporters_camt_la_OBJECTS = \ $(am_libabimexporters_camt_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/camt.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libabimexporters_camt_la_SOURCES) DIST_SOURCES = $(libabimexporters_camt_la_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(imexporterplugindir)" DATA = $(imexporterplugin_DATA) HEADERS = $(noinst_HEADERS) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir distdir-am am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/camt.xml.in \ $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ADD_ACLOCAL_FLAGS = @ADD_ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AQBANKING_CLI_VERSION_STRING = @AQBANKING_CLI_VERSION_STRING@ AQBANKING_FINTS_VERSION_STRING = @AQBANKING_FINTS_VERSION_STRING@ AQBANKING_SO_AGE = @AQBANKING_SO_AGE@ AQBANKING_SO_CURRENT = @AQBANKING_SO_CURRENT@ AQBANKING_SO_EFFECTIVE = @AQBANKING_SO_EFFECTIVE@ AQBANKING_SO_REVISION = @AQBANKING_SO_REVISION@ AQBANKING_VERSION_BUILD = @AQBANKING_VERSION_BUILD@ AQBANKING_VERSION_FULL_STRING = @AQBANKING_VERSION_FULL_STRING@ AQBANKING_VERSION_MAJOR = @AQBANKING_VERSION_MAJOR@ AQBANKING_VERSION_MINOR = @AQBANKING_VERSION_MINOR@ AQBANKING_VERSION_PATCHLEVEL = @AQBANKING_VERSION_PATCHLEVEL@ AQBANKING_VERSION_RELEASE_STRING = @AQBANKING_VERSION_RELEASE_STRING@ AQBANKING_VERSION_STRING = @AQBANKING_VERSION_STRING@ AQBANKING_VERSION_TAG = @AQBANKING_VERSION_TAG@ AQEBICS_CFLAGS = @AQEBICS_CFLAGS@ AQEBICS_LIBS = @AQEBICS_LIBS@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATETIME = @DATETIME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_EXCLUDE_PATTERNS = @DOXYGEN_EXCLUDE_PATTERNS@ DOXYGEN_FILE_PATTERNS = @DOXYGEN_FILE_PATTERNS@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENGUI_GTK2_CFLAGS = @GWENGUI_GTK2_CFLAGS@ GWENGUI_GTK2_LIBS = @GWENGUI_GTK2_LIBS@ GWENHYWFAR_MINIMUM_VERSION = @GWENHYWFAR_MINIMUM_VERSION@ HAVE_GWENGUI_GTK2 = @HAVE_GWENGUI_GTK2@ HAVE_I18N = @HAVE_I18N@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIBXSLT_CFLAGS = @LIBXSLT_CFLAGS@ LIBXSLT_LIBS = @LIBXSLT_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_SUPPORTS_QT = @MSGFMT_SUPPORTS_QT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ TUTORIALS = @TUTORIALS@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XMLMERGE = @XMLMERGE@ XMLSEC_CFLAGS = @XMLSEC_CFLAGS@ XMLSEC_LIBS = @XMLSEC_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ aqbanking_backends = @aqbanking_backends@ aqbanking_cfg_searchdir = @aqbanking_cfg_searchdir@ aqbanking_data_searchdir = @aqbanking_data_searchdir@ aqbanking_headerdir = @aqbanking_headerdir@ aqbanking_headerdir_am = @aqbanking_headerdir_am@ aqbanking_includes = @aqbanking_includes@ aqbanking_internal_libs = @aqbanking_internal_libs@ aqbanking_ldflags = @aqbanking_ldflags@ aqbanking_libs = @aqbanking_libs@ aqbanking_locale_searchdir = @aqbanking_locale_searchdir@ aqbanking_modules = @aqbanking_modules@ aqbanking_pkgdatadir = @aqbanking_pkgdatadir@ aqbanking_plugin_searchdir = @aqbanking_plugin_searchdir@ aqbanking_plugindir = @aqbanking_plugindir@ aqbanking_plugins_backends_dirs = @aqbanking_plugins_backends_dirs@ aqbanking_plugins_backends_libs = @aqbanking_plugins_backends_libs@ aqbanking_plugins_bankinfo_dirs = @aqbanking_plugins_bankinfo_dirs@ aqbanking_plugins_bankinfo_libs = @aqbanking_plugins_bankinfo_libs@ aqbanking_plugins_imexporters_dirs = @aqbanking_plugins_imexporters_dirs@ aqbanking_plugins_imexporters_libs = @aqbanking_plugins_imexporters_libs@ aqbanking_plugins_parsers_dirs = @aqbanking_plugins_parsers_dirs@ aqbanking_symlinkdir = @aqbanking_symlinkdir@ aqbanking_sys_is_windows = @aqbanking_sys_is_windows@ aqbankingpp_modules = @aqbankingpp_modules@ aqebics_datadir = @aqebics_datadir@ aqebics_includes = @aqebics_includes@ aqebics_internal_libs = @aqebics_internal_libs@ aqebics_ldflags = @aqebics_ldflags@ aqebics_libs = @aqebics_libs@ aqfints_datadir = @aqfints_datadir@ aqhbci_datadir = @aqhbci_datadir@ aqhbci_includes = @aqhbci_includes@ aqhbci_internal_libs = @aqhbci_internal_libs@ aqhbci_ldflags = @aqhbci_ldflags@ aqhbci_libs = @aqhbci_libs@ aqofxconnect_includes = @aqofxconnect_includes@ aqofxconnect_internal_libs = @aqofxconnect_internal_libs@ aqofxconnect_libs = @aqofxconnect_libs@ aqpaypal_includes = @aqpaypal_includes@ aqpaypal_internal_libs = @aqpaypal_internal_libs@ aqpaypal_libs = @aqpaypal_libs@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gmp_libs = @gmp_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_dir = @gwenhywfar_dir@ gwenhywfar_has_crypt = @gwenhywfar_has_crypt@ gwenhywfar_headers = @gwenhywfar_headers@ gwenhywfar_includes = @gwenhywfar_includes@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_plugins = @gwenhywfar_plugins@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ typemaker2_exe = @typemaker2_exe@ visibility_cflags = @visibility_cflags@ with_aqebics = @with_aqebics@ with_aqhbci = @with_aqhbci@ SUBDIRS = profiles AM_CPPFLAGS = -I$(top_srcdir)/src/libs \ -I$(top_builddir)/src/libs \ $(gwenhywfar_includes) AM_CFLAGS = -DBUILDING_AQBANKING @visibility_cflags@ extra_sources = \ camt52_001_02.c EXTRA_DIST = $(extra_sources) noinst_HEADERS = camt_p.h camt.h imexporterplugindir = $(aqbanking_plugindir)/imexporters noinst_LTLIBRARIES = libabimexporters_camt.la imexporterplugin_DATA = camt.xml libabimexporters_camt_la_SOURCES = camt.c all: all-recursive .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libs/plugins/imexporters/camt/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libs/plugins/imexporters/camt/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): camt.xml: $(top_builddir)/config.status $(srcdir)/camt.xml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libabimexporters_camt.la: $(libabimexporters_camt_la_OBJECTS) $(libabimexporters_camt_la_DEPENDENCIES) $(EXTRA_libabimexporters_camt_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libabimexporters_camt_la_OBJECTS) $(libabimexporters_camt_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/camt.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-imexporterpluginDATA: $(imexporterplugin_DATA) @$(NORMAL_INSTALL) @list='$(imexporterplugin_DATA)'; test -n "$(imexporterplugindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(imexporterplugindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(imexporterplugindir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(imexporterplugindir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(imexporterplugindir)" || exit $$?; \ done uninstall-imexporterpluginDATA: @$(NORMAL_UNINSTALL) @list='$(imexporterplugin_DATA)'; test -n "$(imexporterplugindir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(imexporterplugindir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(imexporterplugindir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-recursive -rm -f ./$(DEPDIR)/camt.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-imexporterpluginDATA install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f ./$(DEPDIR)/camt.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-imexporterpluginDATA .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ am--depfiles check check-am clean clean-generic clean-libtool \ clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-imexporterpluginDATA install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am \ uninstall-imexporterpluginDATA .PRECIOUS: Makefile typefiles: typedefs: sources: for f in $(libabimexporters_camt_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for f in $(imexporterplugin_DATA); do \ echo $(subdir)/$$f >>$(top_srcdir)/pdsources; \ done cppcheck: for f in $(libabimexporters_camt_la_SOURCES); do \ cppcheck --force $$f ; \ done # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: aqbanking-6.6.1/src/libs/plugins/imexporters/camt/camt52_001_02.c0000664000175000017500000003346214043610745021244 00000000000000/*************************************************************************** begin : Sat Dec 15 2018 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ static void _import_052_001_02_read_account_spec(AB_IMEXPORTER *ie, GWEN_XMLNODE *xmlNode, AB_ACCOUNT_SPEC *accountSpec) { const char *s; s=GWEN_XMLNode_GetCharValueByPath(xmlNode, "Id/IBAN", NULL); if (s && *s) AB_AccountSpec_SetIban(accountSpec, s); s=GWEN_XMLNode_GetCharValueByPath(xmlNode, "Ccy", NULL); if (s && *s) AB_AccountSpec_SetCurrency(accountSpec, s); s=GWEN_XMLNode_GetCharValueByPath(xmlNode, "Ownr/Nm", NULL); if (s && *s) AB_AccountSpec_SetOwnerName(accountSpec, s); s=GWEN_XMLNode_GetCharValueByPath(xmlNode, "Svcr/FinInstnId/BIC", NULL); if (s && *s) AB_AccountSpec_SetBic(accountSpec, s); } static int _import_052_001_02_read_balance(AB_IMEXPORTER *ie, GWEN_XMLNODE *xmlNode, AB_IMEXPORTER_ACCOUNTINFO *accountInfo) { const char *s; GWEN_XMLNODE *n; AB_BALANCE *balance=NULL; balance=AB_Balance_new(); /* read amount */ n=GWEN_XMLNode_GetNodeByXPath(xmlNode, "Amt", GWEN_PATH_FLAGS_NAMEMUSTEXIST); if (n) { const char *currency; AB_VALUE *val=NULL; currency=GWEN_XMLNode_GetProperty(n, "Ccy", "EUR"); s=GWEN_XMLNode_GetCharValue(xmlNode, "Amt", NULL); if (!(s && *s)) { DBG_ERROR(AQBANKING_LOGDOMAIN, "No data in : [%s]", s); AB_Balance_free(balance); return GWEN_ERROR_BAD_DATA; } val=AB_Value_fromString(s); if (val==NULL) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Invalid amount in : [%s]", s); AB_Balance_free(balance); return GWEN_ERROR_BAD_DATA; } AB_Value_SetCurrency(val, currency); s=GWEN_XMLNode_GetCharValue(xmlNode, "CdtDbtInd", NULL); if (!(s && *s)) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Missing in "); AB_Value_free(val); AB_Balance_free(balance); return GWEN_ERROR_BAD_DATA; } if (strcasecmp(s, "CRDT")==0) AB_Value_Negate(val); AB_Balance_SetValue(balance, val); AB_Value_free(val); } /* read date */ s=GWEN_XMLNode_GetCharValueByPath(xmlNode, "Dt/Dt", NULL); if (!(s && *s)) s=GWEN_XMLNode_GetCharValueByPath(xmlNode, "Dt/DtTm", NULL); if (s && *s) { GWEN_DATE *dt; dt=GWEN_Date_fromStringWithTemplate(s, "YYYY-MM-DD"); if (dt==NULL) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Invalid date in : [%s]", s); AB_Balance_free(balance); return GWEN_ERROR_BAD_DATA; } AB_Balance_SetDate(balance, dt); GWEN_Date_free(dt); } /* determine the type of balance, add if acceptable */ s=GWEN_XMLNode_GetCharValueByPath(xmlNode, "Tp/CdOrPrtry/Cd", NULL); if (s && *s) { if (strcasecmp(s, "CLBD")==0 || /* CLBD: Closing Booked Balance */ strcasecmp(s, "PRCD")==0) { /* PRCD: Previously Closed Booked Balance */ AB_Balance_SetType(balance, AB_Balance_TypeBooked); AB_ImExporterAccountInfo_AddBalance(accountInfo, balance); } else if (strcasecmp(s, "CLAV")==0) { /* CLAV: Closing Available Balance */ AB_Balance_SetType(balance, AB_Balance_TypeDisposable); AB_ImExporterAccountInfo_AddBalance(accountInfo, balance); } else { DBG_ERROR(AQBANKING_LOGDOMAIN, "Unknown balance type [%s] in , ignoring", s); AB_Balance_free(balance); } } return 0; } static int _import_052_001_02_read_balances(AB_IMEXPORTER *ie, GWEN_XMLNODE *xmlNode, AB_IMEXPORTER_ACCOUNTINFO *accountInfo) { GWEN_XMLNODE *n; n=GWEN_XMLNode_FindFirstTag(xmlNode, "Bal", NULL, NULL); while (n) { int rv; rv=_import_052_001_02_read_balance(ie, n, accountInfo); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); return rv; } n=GWEN_XMLNode_FindNextTag(n, "Bal", NULL, NULL); } /* while n */ return 0; } static int _import_052_001_02_read_transaction_details(AB_IMEXPORTER *ie, GWEN_XMLNODE *xmlNode, AB_TRANSACTION *t, int isCredit) { const char *s; GWEN_XMLNODE *n; s=GWEN_XMLNode_GetCharValueByPath(xmlNode, "Refs/EndToEndId", NULL); if (s && *s) AB_Transaction_SetEndToEndReference(t, s); /* read names and accounts */ s=GWEN_XMLNode_GetCharValueByPath(xmlNode, "Refs/MndtId", NULL); if (s && *s) AB_Transaction_SetMandateId(t, s); if (isCredit) { s=GWEN_XMLNode_GetCharValueByPath(xmlNode, "RltdPties/Dbtr/Nm", NULL); if (s && *s) AB_Transaction_SetRemoteName(t, s); s=GWEN_XMLNode_GetCharValueByPath(xmlNode, "RltdPties/DbtrAcct/Id/IBAN", NULL); if (s && *s) AB_Transaction_SetRemoteIban(t, s); s=GWEN_XMLNode_GetCharValueByPath(xmlNode, "RltdPties/Cdtr/Nm", NULL); if (s && *s) AB_Transaction_SetLocalName(t, s); s=GWEN_XMLNode_GetCharValueByPath(xmlNode, "RltdPties/CdtrAcct/Id/IBAN", NULL); if (s && *s) AB_Transaction_SetLocalIban(t, s); } else { s=GWEN_XMLNode_GetCharValueByPath(xmlNode, "RltdPties/Dbtr/Nm", NULL); if (s && *s) AB_Transaction_SetLocalName(t, s); s=GWEN_XMLNode_GetCharValueByPath(xmlNode, "RltdPties/DbtrAcct/Id/IBAN", NULL); if (s && *s) AB_Transaction_SetLocalIban(t, s); s=GWEN_XMLNode_GetCharValueByPath(xmlNode, "RltdPties/Cdtr/Nm", NULL); if (s && *s) AB_Transaction_SetRemoteName(t, s); s=GWEN_XMLNode_GetCharValueByPath(xmlNode, "RltdPties/CdtrAcct/Id/IBAN", NULL); if (s && *s) AB_Transaction_SetRemoteIban(t, s); s=GWEN_XMLNode_GetCharValueByPath(xmlNode, "RltdPties/Cdtr/Id/PrvtId/Othr/Id", NULL); if (s && *s) AB_Transaction_SetOriginatorId(t, s); } /* read transaction codes */ s=GWEN_XMLNode_GetCharValueByPath(xmlNode, "BkTxCd/Domn/Cd", NULL); if (s && *s) { GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendByte(tbuf, '-'); s=GWEN_XMLNode_GetCharValueByPath(xmlNode, "BkTxCd/Domn/Fmly/Cd", NULL); if (s && *s) GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendByte(tbuf, '-'); s=GWEN_XMLNode_GetCharValueByPath(xmlNode, "BkTxCd/Domn/Fmly/SubFmlyCd", NULL); if (s && *s) GWEN_Buffer_AppendString(tbuf, s); AB_Transaction_SetTransactionKey(t, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } /* read FI id (if any) */ s=GWEN_XMLNode_GetCharValueByPath(xmlNode, "Refs/Prtry/Tp", NULL); if (s && *s) { if (strcasecmp(s, "FI-UMSATZ-ID")==0) { s=GWEN_XMLNode_GetCharValueByPath(xmlNode, "Refs/Prtry/Ref", NULL); if (s && *s) AB_Transaction_SetFiId(t, s); } } /* read purpose */ n=GWEN_XMLNode_FindFirstTag(xmlNode, "RmtInf", NULL, NULL); if (n) n=GWEN_XMLNode_FindFirstTag(n, "Ustrd", NULL, NULL); while (n) { GWEN_XMLNODE *nn; nn=GWEN_XMLNode_GetFirstData(n); if (nn) { s=GWEN_XMLNode_GetData(nn); if (s && *s) AB_Transaction_AddPurposeLine(t, s); } n=GWEN_XMLNode_FindNextTag(n, "Ustrd", NULL, NULL); } /* while n */ return 0; } static int _import_052_001_02_read_transaction(AB_IMEXPORTER *ie, GWEN_XMLNODE *xmlNode, AB_IMEXPORTER_ACCOUNTINFO *accountInfo) { const char *s; GWEN_XMLNODE *n; AB_TRANSACTION *t; int isCredit=0; t=AB_Transaction_new(); AB_Transaction_SetType(t, AB_Transaction_TypeStatement); /* read credit/debit mark */ s=GWEN_XMLNode_GetCharValueByPath(xmlNode, "CdtDbtInd", NULL); if (s && *s) { if (strcasecmp(s, "DBIT")==0) { isCredit=0; } else if (strcasecmp(s, "CRDT")==0) { isCredit=1; } else { DBG_ERROR(AQBANKING_LOGDOMAIN, "Invalid CdtDbtInd in : [%s]", s); AB_Transaction_free(t); return GWEN_ERROR_BAD_DATA; } } /* read amount */ n=GWEN_XMLNode_GetNodeByXPath(xmlNode, "Amt", GWEN_PATH_FLAGS_NAMEMUSTEXIST); if (n) { const char *currency; AB_VALUE *val=NULL; currency=GWEN_XMLNode_GetProperty(n, "Ccy", "EUR"); s=GWEN_XMLNode_GetCharValue(xmlNode, "Amt", NULL); if (!(s && *s)) { DBG_ERROR(AQBANKING_LOGDOMAIN, "No currency in : [%s]", s); AB_Transaction_free(t); return GWEN_ERROR_BAD_DATA; } val=AB_Value_fromString(s); if (val==NULL) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Invalid amount in : [%s]", s); AB_Transaction_free(t); return GWEN_ERROR_BAD_DATA; } AB_Value_SetCurrency(val, currency); if (!isCredit) AB_Value_Negate(val); AB_Transaction_SetValue(t, val); AB_Value_free(val); } /* read booked date */ s=GWEN_XMLNode_GetCharValueByPath(xmlNode, "BookgDt/Dt", NULL); if (s && *s) { GWEN_DATE *dt; dt=GWEN_Date_fromStringWithTemplate(s, "YYYY-MM-DD"); if (dt==NULL) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Invalid booking date in : [%s]", s); AB_Transaction_free(t); return GWEN_ERROR_BAD_DATA; } AB_Transaction_SetDate(t, dt); GWEN_Date_free(dt); } /* read valuta date */ s=GWEN_XMLNode_GetCharValueByPath(xmlNode, "ValDt/Dt", NULL); if (s && *s) { GWEN_DATE *dt; dt=GWEN_Date_fromStringWithTemplate(s, "YYYY-MM-DD"); if (dt==NULL) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Invalid valuta date in : [%s]", s); AB_Transaction_free(t); return GWEN_ERROR_BAD_DATA; } AB_Transaction_SetValutaDate(t, dt); GWEN_Date_free(dt); } /* read bank reference */ s=GWEN_XMLNode_GetCharValueByPath(xmlNode, "NtryRef", NULL); if (s && *s) AB_Transaction_SetBankReference(t, s); s=GWEN_XMLNode_GetCharValueByPath(xmlNode, "AddtlNtryInf", NULL); if (s && *s) AB_Transaction_SetTransactionText(t, s); /* read transaction details */ n=GWEN_XMLNode_GetNodeByXPath(xmlNode, "NtryDtls/TxDtls", GWEN_PATH_FLAGS_NAMEMUSTEXIST); if (n) { int rv; rv=_import_052_001_02_read_transaction_details(ie, n, t, isCredit); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); return rv; } } /* check transaction */ if (!(AB_Transaction_GetValue(t) && (AB_Transaction_GetDate(t) || AB_Transaction_GetValutaDate(t)))) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Incomplete transaction received"); AB_Transaction_free(t); return GWEN_ERROR_BAD_DATA; } AB_ImExporterAccountInfo_AddTransaction(accountInfo, t); return 0; } static int _import_052_001_02_read_transactions(AB_IMEXPORTER *ie, GWEN_XMLNODE *xmlNode, AB_IMEXPORTER_ACCOUNTINFO *accountInfo) { GWEN_XMLNODE *n; n=GWEN_XMLNode_FindFirstTag(xmlNode, "Ntry", NULL, NULL); while (n) { int rv; rv=_import_052_001_02_read_transaction(ie, n, accountInfo); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); return rv; } n=GWEN_XMLNode_FindNextTag(n, "Ntry", NULL, NULL); } /* while n */ return 0; } static int _import_052_001_02_report(AB_IMEXPORTER *ie, AB_IMEXPORTER_CONTEXT *ctx, GWEN_DB_NODE *params, GWEN_XMLNODE *xmlNode) { GWEN_XMLNODE *n; AB_IMEXPORTER_ACCOUNTINFO *accountInfo=NULL; int rv; /* read account, set accountInfo */ n=GWEN_XMLNode_FindFirstTag(xmlNode, "Acct", NULL, NULL); if (n) { AB_ACCOUNT_SPEC *accountSpec; accountSpec=AB_AccountSpec_new(); _import_052_001_02_read_account_spec(ie, n, accountSpec); accountInfo=AB_ImExporterContext_GetOrAddAccountInfo(ctx, 0, AB_AccountSpec_GetIban(accountSpec), AB_AccountSpec_GetBankCode(accountSpec), AB_AccountSpec_GetAccountNumber(accountSpec), AB_AccountType_Unknown); assert(accountInfo); AB_AccountSpec_free(accountSpec); } /* read balances */ rv=_import_052_001_02_read_balances(ie, xmlNode, accountInfo); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); return rv; } /* read transactions */ rv=_import_052_001_02_read_transactions(ie, xmlNode, accountInfo); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); return rv; } return 0; } int AH_ImExporterCAMT_Import_052_001_02(AB_IMEXPORTER *ie, AB_IMEXPORTER_CONTEXT *ctx, GWEN_DB_NODE *params, GWEN_XMLNODE *xmlNode) { GWEN_XMLNODE *n; n=GWEN_XMLNode_FindFirstTag(xmlNode, "BkToCstmrAcctRpt", NULL, NULL); if (n==NULL) { DBG_ERROR(AQBANKING_LOGDOMAIN, " element not found"); return GWEN_ERROR_BAD_DATA; } n=GWEN_XMLNode_FindFirstTag(n, "Rpt", NULL, NULL); if (n==NULL) { DBG_ERROR(AQBANKING_LOGDOMAIN, " element not found"); return GWEN_ERROR_BAD_DATA; } /* now read every report */ while (n) { int rv; rv=_import_052_001_02_report(ie, ctx, params, n); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); return rv; } n=GWEN_XMLNode_FindNextTag(n, "Rpt", NULL, NULL); } return 0; } aqbanking-6.6.1/src/libs/plugins/imexporters/camt/camt.c0000664000175000017500000000600014043610745020200 00000000000000/*************************************************************************** begin : Sat Dec 15 2018 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "camt_p.h" #include "aqbanking/i18n_l.h" #include #include #include #include #include #include #include #include GWEN_INHERIT(AB_IMEXPORTER, AH_IMEXPORTER_CAMT); AB_IMEXPORTER *AB_ImExporterCAMT_new(AB_BANKING *ab) { AB_IMEXPORTER *ie; AH_IMEXPORTER_CAMT *ieh; ie=AB_ImExporter_new(ab, "camt"); GWEN_NEW_OBJECT(AH_IMEXPORTER_CAMT, ieh); GWEN_INHERIT_SETDATA(AB_IMEXPORTER, AH_IMEXPORTER_CAMT, ie, ieh, AH_ImExporterCAMT_FreeData); AB_ImExporter_SetImportFn(ie, AH_ImExporterCAMT_Import); AB_ImExporter_SetExportFn(ie, AH_ImExporterCAMT_Export); AB_ImExporter_SetCheckFileFn(ie, AH_ImExporterCAMT_CheckFile); return ie; } void GWENHYWFAR_CB AH_ImExporterCAMT_FreeData(void *bp, void *p) { AH_IMEXPORTER_CAMT *ieh; ieh=(AH_IMEXPORTER_CAMT *)p; GWEN_FREE_OBJECT(ieh); } int AH_ImExporterCAMT_Import(AB_IMEXPORTER *ie, AB_IMEXPORTER_CONTEXT *ctx, GWEN_SYNCIO *sio, GWEN_DB_NODE *params) { int rv; GWEN_XMLNODE *xmlRoot; GWEN_XMLNODE *n; GWEN_XML_CONTEXT *xmlCtx; const char *camVersionWanted; /* read whole document into XML tree */ xmlRoot=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "camt52"); xmlCtx=GWEN_XmlCtxStore_new(xmlRoot, GWEN_XML_FLAGS_DEFAULT); rv=GWEN_XMLContext_ReadFromIo(xmlCtx, sio); if (rv<0) { GWEN_XmlCtx_free(xmlCtx); GWEN_XMLNode_free(xmlRoot); return rv; } GWEN_XmlCtx_free(xmlCtx); n=GWEN_XMLNode_FindFirstTag(xmlRoot, "Document", NULL, NULL); if (n==NULL) { DBG_ERROR(AQBANKING_LOGDOMAIN, " element not found"); GWEN_XMLNode_free(xmlRoot); return GWEN_ERROR_BAD_DATA; } /* debug */ /*GWEN_XMLNode_Dump(n, 2); */ /* check document type */ camVersionWanted=GWEN_DB_GetCharValue(params, "type", 0, "052.001.02"); assert(camVersionWanted); if (strcasecmp(camVersionWanted, "052.001.02")==0) rv=AH_ImExporterCAMT_Import_052_001_02(ie, ctx, params, n); else rv=0; GWEN_XMLNode_free(xmlRoot); return rv; } int AH_ImExporterCAMT_Export(AB_IMEXPORTER *ie, AB_IMEXPORTER_CONTEXT *ctx, GWEN_SYNCIO *sio, GWEN_DB_NODE *params) { return GWEN_ERROR_NOT_SUPPORTED; } int AH_ImExporterCAMT_CheckFile(AB_IMEXPORTER *ie, const char *fname) { return 0; } #include "camt52_001_02.c" aqbanking-6.6.1/src/libs/plugins/imexporters/camt/Makefile.am0000664000175000017500000000141514043610745021151 00000000000000SUBDIRS=profiles AM_CPPFLAGS = -I$(top_srcdir)/src/libs \ -I$(top_builddir)/src/libs \ $(gwenhywfar_includes) AM_CFLAGS=-DBUILDING_AQBANKING @visibility_cflags@ extra_sources=\ camt52_001_02.c EXTRA_DIST=$(extra_sources) noinst_HEADERS=camt_p.h camt.h imexporterplugindir = $(aqbanking_plugindir)/imexporters noinst_LTLIBRARIES=libabimexporters_camt.la imexporterplugin_DATA=camt.xml libabimexporters_camt_la_SOURCES=camt.c typefiles: typedefs: sources: for f in $(libabimexporters_camt_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for f in $(imexporterplugin_DATA); do \ echo $(subdir)/$$f >>$(top_srcdir)/pdsources; \ done cppcheck: for f in $(libabimexporters_camt_la_SOURCES); do \ cppcheck --force $$f ; \ done aqbanking-6.6.1/src/libs/plugins/imexporters/swift/0000755000175000017500000000000015037736157017414 500000000000000aqbanking-6.6.1/src/libs/plugins/imexporters/swift/profiles/0000755000175000017500000000000015037736157021237 500000000000000aqbanking-6.6.1/src/libs/plugins/imexporters/swift/profiles/swiftmt942.conf0000664000175000017500000000064614275012617023761 00000000000000 char name="SWIFT-MT942" char shortDescr="Generic SWIFT MT942 Format" char longDescr="This profile supports SWIFT MT942 documents" int import="1" int export="0" char type="swift" char groupNames="transaction", "transfer", "debitnote" params { char type="mt942" # default for non-FinTS files char dateFallback="valutaDate" # read extra data in tag :61: and add it to purpose char readExtraData61="yes" } aqbanking-6.6.1/src/libs/plugins/imexporters/swift/profiles/fints940.conf0000664000175000017500000000173214275012617023402 00000000000000 char name="fints940" char shortDescr="SWIFT MT940 Format Used by German FinTS" char longDescr="SWIFT MT940 Format Used by German FinTS" int import="1" int export="0" char type="swift" char groupNames="transaction", "transfer", "debitnote" params { # currently supported: 940 and 942 char type="mt940" # the following can be used to define the SWIFT reports # to be used (the value must match the content of tag :20:, # wildcards and jokers allowed) # rejectTag20 takes precedence over acceptTag20 #char acceptTag20="STARTDISP" # define content of tag :20: whose reports are to be ignored char rejectTag20="STARTDISP" # this is the default for FinTS files (however, all MT940 I've seen so far have the booking date set) char dateFallback="balanceDate" # don't read extra data in tag :61: char readExtraData61="no" # number of lines per file to skip int skipFileLines=0 # number of lines per document to skip int skipDocLines=0 } aqbanking-6.6.1/src/libs/plugins/imexporters/swift/profiles/Makefile.am0000664000175000017500000000032314271510442023175 00000000000000 profilesdir = $(aqbanking_pkgdatadir)/imexporters/swift/profiles profiles_DATA=swiftmt940.conf swiftmt942.conf swiftmt535.conf amro942.conf amro940.conf fints940.conf fints942.conf EXTRA_DIST=$(profiles_DATA) aqbanking-6.6.1/src/libs/plugins/imexporters/swift/profiles/amro942.conf0000664000175000017500000000052614043610745023216 00000000000000 char name="AMRO-MT942" char shortDescr="SWIFT MT942 Format used by AMRO Bank (NL)" char longDescr="This profile supports SWIFT MT942 documents in the format used by the AMRO Bank" int import="1" int export="0" char type="swift" char groupNames="transaction", "transfer", "debitnote" params { char type="mt942" int skipDocLines="3" } aqbanking-6.6.1/src/libs/plugins/imexporters/swift/profiles/Makefile.in0000644000175000017500000004610415037736026023224 00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/libs/plugins/imexporters/swift/profiles ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/distri.m4 $(top_srcdir)/m4/gwenhywfar.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/os.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(profilesdir)" DATA = $(profiles_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADD_ACLOCAL_FLAGS = @ADD_ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AQBANKING_CLI_VERSION_STRING = @AQBANKING_CLI_VERSION_STRING@ AQBANKING_FINTS_VERSION_STRING = @AQBANKING_FINTS_VERSION_STRING@ AQBANKING_SO_AGE = @AQBANKING_SO_AGE@ AQBANKING_SO_CURRENT = @AQBANKING_SO_CURRENT@ AQBANKING_SO_EFFECTIVE = @AQBANKING_SO_EFFECTIVE@ AQBANKING_SO_REVISION = @AQBANKING_SO_REVISION@ AQBANKING_VERSION_BUILD = @AQBANKING_VERSION_BUILD@ AQBANKING_VERSION_FULL_STRING = @AQBANKING_VERSION_FULL_STRING@ AQBANKING_VERSION_MAJOR = @AQBANKING_VERSION_MAJOR@ AQBANKING_VERSION_MINOR = @AQBANKING_VERSION_MINOR@ AQBANKING_VERSION_PATCHLEVEL = @AQBANKING_VERSION_PATCHLEVEL@ AQBANKING_VERSION_RELEASE_STRING = @AQBANKING_VERSION_RELEASE_STRING@ AQBANKING_VERSION_STRING = @AQBANKING_VERSION_STRING@ AQBANKING_VERSION_TAG = @AQBANKING_VERSION_TAG@ AQEBICS_CFLAGS = @AQEBICS_CFLAGS@ AQEBICS_LIBS = @AQEBICS_LIBS@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATETIME = @DATETIME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_EXCLUDE_PATTERNS = @DOXYGEN_EXCLUDE_PATTERNS@ DOXYGEN_FILE_PATTERNS = @DOXYGEN_FILE_PATTERNS@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENGUI_GTK2_CFLAGS = @GWENGUI_GTK2_CFLAGS@ GWENGUI_GTK2_LIBS = @GWENGUI_GTK2_LIBS@ GWENHYWFAR_MINIMUM_VERSION = @GWENHYWFAR_MINIMUM_VERSION@ HAVE_GWENGUI_GTK2 = @HAVE_GWENGUI_GTK2@ HAVE_I18N = @HAVE_I18N@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIBXSLT_CFLAGS = @LIBXSLT_CFLAGS@ LIBXSLT_LIBS = @LIBXSLT_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_SUPPORTS_QT = @MSGFMT_SUPPORTS_QT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ TUTORIALS = @TUTORIALS@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XMLMERGE = @XMLMERGE@ XMLSEC_CFLAGS = @XMLSEC_CFLAGS@ XMLSEC_LIBS = @XMLSEC_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ aqbanking_backends = @aqbanking_backends@ aqbanking_cfg_searchdir = @aqbanking_cfg_searchdir@ aqbanking_data_searchdir = @aqbanking_data_searchdir@ aqbanking_headerdir = @aqbanking_headerdir@ aqbanking_headerdir_am = @aqbanking_headerdir_am@ aqbanking_includes = @aqbanking_includes@ aqbanking_internal_libs = @aqbanking_internal_libs@ aqbanking_ldflags = @aqbanking_ldflags@ aqbanking_libs = @aqbanking_libs@ aqbanking_locale_searchdir = @aqbanking_locale_searchdir@ aqbanking_modules = @aqbanking_modules@ aqbanking_pkgdatadir = @aqbanking_pkgdatadir@ aqbanking_plugin_searchdir = @aqbanking_plugin_searchdir@ aqbanking_plugindir = @aqbanking_plugindir@ aqbanking_plugins_backends_dirs = @aqbanking_plugins_backends_dirs@ aqbanking_plugins_backends_libs = @aqbanking_plugins_backends_libs@ aqbanking_plugins_bankinfo_dirs = @aqbanking_plugins_bankinfo_dirs@ aqbanking_plugins_bankinfo_libs = @aqbanking_plugins_bankinfo_libs@ aqbanking_plugins_imexporters_dirs = @aqbanking_plugins_imexporters_dirs@ aqbanking_plugins_imexporters_libs = @aqbanking_plugins_imexporters_libs@ aqbanking_plugins_parsers_dirs = @aqbanking_plugins_parsers_dirs@ aqbanking_symlinkdir = @aqbanking_symlinkdir@ aqbanking_sys_is_windows = @aqbanking_sys_is_windows@ aqbankingpp_modules = @aqbankingpp_modules@ aqebics_datadir = @aqebics_datadir@ aqebics_includes = @aqebics_includes@ aqebics_internal_libs = @aqebics_internal_libs@ aqebics_ldflags = @aqebics_ldflags@ aqebics_libs = @aqebics_libs@ aqfints_datadir = @aqfints_datadir@ aqhbci_datadir = @aqhbci_datadir@ aqhbci_includes = @aqhbci_includes@ aqhbci_internal_libs = @aqhbci_internal_libs@ aqhbci_ldflags = @aqhbci_ldflags@ aqhbci_libs = @aqhbci_libs@ aqofxconnect_includes = @aqofxconnect_includes@ aqofxconnect_internal_libs = @aqofxconnect_internal_libs@ aqofxconnect_libs = @aqofxconnect_libs@ aqpaypal_includes = @aqpaypal_includes@ aqpaypal_internal_libs = @aqpaypal_internal_libs@ aqpaypal_libs = @aqpaypal_libs@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gmp_libs = @gmp_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_dir = @gwenhywfar_dir@ gwenhywfar_has_crypt = @gwenhywfar_has_crypt@ gwenhywfar_headers = @gwenhywfar_headers@ gwenhywfar_includes = @gwenhywfar_includes@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_plugins = @gwenhywfar_plugins@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ typemaker2_exe = @typemaker2_exe@ visibility_cflags = @visibility_cflags@ with_aqebics = @with_aqebics@ with_aqhbci = @with_aqhbci@ profilesdir = $(aqbanking_pkgdatadir)/imexporters/swift/profiles profiles_DATA = swiftmt940.conf swiftmt942.conf swiftmt535.conf amro942.conf amro940.conf fints940.conf fints942.conf EXTRA_DIST = $(profiles_DATA) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libs/plugins/imexporters/swift/profiles/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libs/plugins/imexporters/swift/profiles/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-profilesDATA: $(profiles_DATA) @$(NORMAL_INSTALL) @list='$(profiles_DATA)'; test -n "$(profilesdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(profilesdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(profilesdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(profilesdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(profilesdir)" || exit $$?; \ done uninstall-profilesDATA: @$(NORMAL_UNINSTALL) @list='$(profiles_DATA)'; test -n "$(profilesdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(profilesdir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(profilesdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-profilesDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-profilesDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-profilesDATA install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags-am uninstall uninstall-am uninstall-profilesDATA .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: aqbanking-6.6.1/src/libs/plugins/imexporters/swift/profiles/swiftmt535.conf0000664000175000017500000000137414043610745023755 00000000000000 char name="SWIFT-MT535" char shortDescr="Generic SWIFT MT535 Format" char longDescr="This profile supports SWIFT MT535 documents" int import="1" int export="0" char type="swift" char groupNames="transaction", "transfer", "debitnote" params { # currently supported: 535 char type="mt535" # the following can be used to define the SWIFT reports # to be used (the value must match the content of tag :20:, # wildcards and jokers allowed) # rejectTag20 takes precedence over acceptTag20 #char acceptTag20="STARTDISP" # define content of tag :20: whose reports are to be ignored char rejectTag20="STARTDISP" # number of lines per file to skip int skipFileLines=0 # number of lines per document to skip int skipDocLines=0 } aqbanking-6.6.1/src/libs/plugins/imexporters/swift/profiles/swiftmt940.conf0000664000175000017500000000163414275012617023755 00000000000000 char name="SWIFT-MT940" char shortDescr="Generic SWIFT MT940 Format" char longDescr="This profile supports SWIFT MT940 documents" int import="1" int export="0" char type="swift" char groupNames="transaction", "transfer", "debitnote" params { # currently supported: 940 and 942 char type="mt940" # the following can be used to define the SWIFT reports # to be used (the value must match the content of tag :20:, # wildcards and jokers allowed) # rejectTag20 takes precedence over acceptTag20 #char acceptTag20="STARTDISP" # define content of tag :20: whose reports are to be ignored char rejectTag20="STARTDISP" # default for non-FinTS files char dateFallback="valutaDate" # read extra data in tag :61: and add it to purpose char readExtraData61="yes" # number of lines per file to skip int skipFileLines=0 # number of lines per document to skip int skipDocLines=0 } aqbanking-6.6.1/src/libs/plugins/imexporters/swift/profiles/fints942.conf0000664000175000017500000000074214275012617023404 00000000000000 char name="fints942" char shortDescr="SWIFT MT942 Format Used by German FinTS" char longDescr="SWIFT MT942 Format Used by German FinTS" int import="1" int export="0" char type="swift" char groupNames="transaction", "transfer", "debitnote" params { char type="mt942" # this is the default for FinTS files (however, all MT942 I've seen so far have the booking date set) char dateFallback="balanceDate" # don't read extra data in tag :61: char readExtraData61="no" } aqbanking-6.6.1/src/libs/plugins/imexporters/swift/profiles/amro940.conf0000664000175000017500000000052614043610745023214 00000000000000 char name="AMRO-MT940" char shortDescr="SWIFT MT940 Format used by AMRO Bank (NL)" char longDescr="This profile supports SWIFT MT940 documents in the format used by the AMRO Bank" int import="1" int export="0" char type="swift" char groupNames="transaction", "transfer", "debitnote" params { char type="mt940" int skipDocLines="3" } aqbanking-6.6.1/src/libs/plugins/imexporters/swift/swift.h0000664000175000017500000000117014043610745020630 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AQHBCI_IMEX_SWIFT_H #define AQHBCI_IMEX_SWIFT_H #include AB_IMEXPORTER *AB_ImExporterSWIFT_new(AB_BANKING *ab); #endif /* AQHBCI_IMEX_SWIFT_H */ aqbanking-6.6.1/src/libs/plugins/imexporters/swift/swift_p.h0000664000175000017500000000250214043610745021147 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AQHBCI_IMEX_SWIFT_P_H #define AQHBCI_IMEX_SWIFT_P_H #include "swift.h" #include #include typedef struct AH_IMEXPORTER_SWIFT AH_IMEXPORTER_SWIFT; struct AH_IMEXPORTER_SWIFT { GWEN_DBIO *dbio; }; static void GWENHYWFAR_CB AH_ImExporterSWIFT_FreeData(void *bp, void *p); static int AH_ImExporterSWIFT_Import(AB_IMEXPORTER *ie, AB_IMEXPORTER_CONTEXT *ctx, GWEN_SYNCIO *sio, GWEN_DB_NODE *params); static int AH_ImExporterSWIFT_CheckFile(AB_IMEXPORTER *ie, const char *fname); static int AH_ImExporterSWIFT__ImportFromGroup(AB_IMEXPORTER_CONTEXT *ctx, GWEN_DB_NODE *db, GWEN_DB_NODE *dbParams); #endif /* AQHBCI_IMEX_SWIFT_P_H */ aqbanking-6.6.1/src/libs/plugins/imexporters/swift/swift.c0000664000175000017500000003266714275012617020643 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "swift_p.h" #include "aqbanking/i18n_l.h" #include #include #include #include #include #include /*#define SWIFT_VERBOSE_DEBUG*/ static int _importSecuritiesFromGroup(AB_IMEXPORTER_CONTEXT *ctx, GWEN_DB_NODE *db); static void _replaceValueInDb(GWEN_DB_NODE *db, const char *grpName, const char *destName); GWEN_INHERIT(AB_IMEXPORTER, AH_IMEXPORTER_SWIFT); AB_IMEXPORTER *AB_ImExporterSWIFT_new(AB_BANKING *ab) { AB_IMEXPORTER *ie; AH_IMEXPORTER_SWIFT *ieh; ie=AB_ImExporter_new(ab, "swift"); GWEN_NEW_OBJECT(AH_IMEXPORTER_SWIFT, ieh); GWEN_INHERIT_SETDATA(AB_IMEXPORTER, AH_IMEXPORTER_SWIFT, ie, ieh, AH_ImExporterSWIFT_FreeData); ieh->dbio=GWEN_DBIO_GetPlugin("swift"); if (!ieh->dbio) { DBG_ERROR(AQBANKING_LOGDOMAIN, "GWEN DBIO plugin \"SWIFT\" not available"); AB_ImExporter_free(ie); return 0; } AB_ImExporter_SetImportFn(ie, AH_ImExporterSWIFT_Import); AB_ImExporter_SetCheckFileFn(ie, AH_ImExporterSWIFT_CheckFile); return ie; } void GWENHYWFAR_CB AH_ImExporterSWIFT_FreeData(void *bp, void *p) { AH_IMEXPORTER_SWIFT *ieh; ieh=(AH_IMEXPORTER_SWIFT *)p; GWEN_DBIO_free(ieh->dbio); GWEN_FREE_OBJECT(ieh); } int AH_ImExporterSWIFT_Import(AB_IMEXPORTER *ie, AB_IMEXPORTER_CONTEXT *ctx, GWEN_SYNCIO *sio, GWEN_DB_NODE *params) { AH_IMEXPORTER_SWIFT *ieh; GWEN_DB_NODE *dbData; GWEN_DB_NODE *dbSubParams; int rv; assert(ie); ieh=GWEN_INHERIT_GETDATA(AB_IMEXPORTER, AH_IMEXPORTER_SWIFT, ie); assert(ieh); assert(ieh->dbio); dbSubParams=GWEN_DB_GetGroup(params, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "params"); dbData=GWEN_DB_Group_new("transactions"); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Debug, I18N("Reading file...")); #ifdef SWIFT_VERBOSE_DEBUG if (params) { DBG_ERROR(0, "Parameters for SWIFT-Parser:"); GWEN_DB_Dump(params, 2); } #endif DBG_INFO(AQBANKING_LOGDOMAIN, "Importing SWIFT data into GWEN_DB"); rv=GWEN_DBIO_Import(ieh->dbio, sio, dbData, dbSubParams, GWEN_DB_FLAGS_DEFAULT | GWEN_PATH_FLAGS_CREATE_GROUP); if (rv) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Error importing data (%d)", rv); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("Error importing data")); GWEN_DB_Group_free(dbData); return GWEN_ERROR_BAD_DATA; } DBG_INFO(AQBANKING_LOGDOMAIN, "Importing SWIFT data into GWEN_DB: done"); #ifdef SWIFT_VERBOSE_DEBUG DBG_ERROR(0, "Imported SWIFT data is (GWEN_DB):"); GWEN_DB_Dump(dbData, 2); #endif /* transform DB to transactions */ GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Debug, "Data imported, transforming to transactions"); rv=AH_ImExporterSWIFT__ImportFromGroup(ctx, dbData, params); if (rv) { GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, "Error importing data"); GWEN_DB_Group_free(dbData); return rv; } /* read securities (if any) */ rv=_importSecuritiesFromGroup(ctx, dbData); if (rv) { GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, "Error importing data"); GWEN_DB_Group_free(dbData); return rv; } GWEN_DB_Group_free(dbData); return 0; } int AH_ImExporterSWIFT__ImportFromGroup(AB_IMEXPORTER_CONTEXT *ctx, GWEN_DB_NODE *db, GWEN_DB_NODE *dbParams) { GWEN_DB_NODE *dbT; uint32_t progressId; DBG_INFO(AQBANKING_LOGDOMAIN, "Importing from DB group \"%s\"", GWEN_DB_GroupName(db)); progressId=GWEN_Gui_ProgressStart(GWEN_GUI_PROGRESS_DELAY | GWEN_GUI_PROGRESS_ALLOW_EMBED | GWEN_GUI_PROGRESS_SHOW_PROGRESS | GWEN_GUI_PROGRESS_SHOW_ABORT, I18N("Importing parsed data..."), NULL, GWEN_DB_Groups_Count(db), 0); dbT=GWEN_DB_GetFirstGroup(db); while (dbT) { int matches; int i; const char *p; const char *gn; // check whether the name of the current groups matches matches=0; gn=GWEN_DB_GroupName(dbT); for (i=0; ; i++) { p=GWEN_DB_GetCharValue(dbParams, "groupNames", i, 0); if (!p) break; if (strcasecmp(gn, p)==0) { matches=1; break; } } // for if (!matches && i==0) { // no names given, check default if ((strcasecmp(GWEN_DB_GroupName(dbT), "transaction")==0) || (strcasecmp(GWEN_DB_GroupName(dbT), "debitnote")==0)) matches=1; } if (matches) { AB_TRANSACTION *t; const char *s; const GWEN_DATE *dt; /* replace "name/value" and "name/currency" by "name=value:currency" */ _replaceValueInDb(dbT, "value", "value"); _replaceValueInDb(dbT, "fees", "fees"); _replaceValueInDb(dbT, "unitPriceValue", "unitPriceValue"); _replaceValueInDb(dbT, "commissionValue", "commissionValue"); t=AB_Transaction_fromDb(dbT); if (!t) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Error in config file"); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("Error in config file")); return GWEN_ERROR_GENERIC; } /* check for date */ dt=AB_Transaction_GetDate(t); if (dt==NULL) { /* no date, use valutaDate for both fields */ dt=AB_Transaction_GetValutaDate(t); AB_Transaction_SetDate(t, dt); } /* some translations */ s=AB_Transaction_GetRemoteIban(t); if (!(s && *s)) { const char *sAid; /* no remote IBAN set, check whether the bank sends this info in the * fields for national account specifications (instead of the SWIFT * field "?38" which was specified for this case) */ sAid=AB_Transaction_GetRemoteAccountNumber(t); if (sAid && *sAid && AB_Banking_CheckIban(sAid)==0) { /* there is a remote account number specification, and that is an IBAN, * so we set that accordingly */ DBG_INFO(AQBANKING_LOGDOMAIN, "Setting remote IBAN from account number"); AB_Transaction_SetRemoteIban(t, sAid); /* set remote BIC if it not already is */ s=AB_Transaction_GetRemoteBic(t); if (!(s && *s)) { const char *sBid; sBid=AB_Transaction_GetRemoteBankCode(t); if (sBid && *sBid) { DBG_INFO(AQBANKING_LOGDOMAIN, "Setting remote BIC from bank code"); AB_Transaction_SetRemoteBic(t, sBid); } } } } /* read all lines of the remote name and concatenate them (addresses bug #57) */ if (1) { int i; GWEN_BUFFER *nameBuf; nameBuf=GWEN_Buffer_new(0, 256, 0, 1); for (i=0; i<4; i++) { s=GWEN_DB_GetCharValue(dbT, "remoteName", i, NULL); if (s && *s) GWEN_Buffer_AppendString(nameBuf, s); else break; } if (GWEN_Buffer_GetUsedBytes(nameBuf)) AB_Transaction_SetRemoteName(t, GWEN_Buffer_GetStart(nameBuf)); GWEN_Buffer_free(nameBuf); } /* add transaction */ DBG_DEBUG(AQBANKING_LOGDOMAIN, "Adding transaction"); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Debug, I18N("Adding transaction")); AB_ImExporterContext_AddTransaction(ctx, t); } else if (strcasecmp(GWEN_DB_GroupName(dbT), "startSaldo")==0) { /* ignore start saldo, but since the existence of this group shows * that we in fact are within a swift DB group we don't need recursions. */ } else if (strcasecmp(GWEN_DB_GroupName(dbT), "endSaldo")==0) { GWEN_DB_NODE *dbX; GWEN_DATE *dt=0; const char *s; const char *bankCode; const char *accountNumber; const char *iban; bankCode=GWEN_DB_GetCharValue(dbT, "localBankCode", 0, 0); accountNumber=GWEN_DB_GetCharValue(dbT, "localAccountNumber", 0, 0); iban=GWEN_DB_GetCharValue(dbT, "localIban", 0, 0); /* read date */ s=GWEN_DB_GetCharValue(dbT, "date", 0, NULL); if (s && *s) { dt=GWEN_Date_fromString(s); if (dt==NULL) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Bad date in saldo"); } } dbX=GWEN_DB_GetGroup(dbT, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "value"); if (dbX) { AB_VALUE *v; v=AB_Value_fromDb(dbX); if (v) { AB_BALANCE *bal; AB_IMEXPORTER_ACCOUNTINFO *iea; bal=AB_Balance_new(); AB_Balance_SetDate(bal, dt); AB_Balance_SetValue(bal, v); AB_Value_free(v); /* determine saldo type */ s=GWEN_DB_GetCharValue(dbT, "type", 0, NULL); if (s && *s && strcasecmp(s, "final")==0) AB_Balance_SetType(bal, AB_Balance_TypeNoted); /* TODO: maybe use "booked" here? */ else AB_Balance_SetType(bal, AB_Balance_TypeTemporary); iea=AB_ImExporterContext_GetOrAddAccountInfo(ctx, 0, iban, bankCode, accountNumber, 0); DBG_DEBUG(AQBANKING_LOGDOMAIN, "Adding balance"); AB_ImExporterAccountInfo_AddBalance(iea, bal); } } GWEN_Date_free(dt); } else { int rv; // not a transaction, check subgroups rv=AH_ImExporterSWIFT__ImportFromGroup(ctx, dbT, dbParams); if (rv) { GWEN_Gui_ProgressEnd(progressId); return rv; } } if (GWEN_Gui_ProgressAdvance(progressId, GWEN_GUI_PROGRESS_ONE)== GWEN_ERROR_USER_ABORTED) { GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("Aborted by user")); GWEN_Gui_ProgressEnd(progressId); return GWEN_ERROR_USER_ABORTED; } dbT=GWEN_DB_GetNextGroup(dbT); } // while GWEN_Gui_ProgressEnd(progressId); DBG_INFO(AQBANKING_LOGDOMAIN, "Importing from DB group \"%s\": Done", GWEN_DB_GroupName(db)); return 0; } int _importSecuritiesFromGroup(AB_IMEXPORTER_CONTEXT *ctx, GWEN_DB_NODE *db) { GWEN_DB_NODE *dbT; DBG_INFO(AQBANKING_LOGDOMAIN, "Importing securities from DB group \"%s\"", GWEN_DB_GroupName(db)); dbT=GWEN_DB_GetFirstGroup(db); while (dbT) { const char *gn; gn=GWEN_DB_GroupName(dbT); if (gn && strcasecmp(gn, "security")==0) { AB_SECURITY *sec; sec=AB_Security_fromDb(dbT); if (sec) { const char *s; /* read date */ s=GWEN_DB_GetCharValue(dbT, "unitPriceDate", 0, NULL); if (s && *s) { GWEN_TIME *ti; ti=GWEN_Time_fromString(s, "YYYYMMTThhmmss"); if (ti==NULL) { GWEN_DATE *dt; dt=GWEN_Date_fromString(s); if (dt) { ti=GWEN_Time_new(GWEN_Date_GetYear(dt), GWEN_Date_GetMonth(dt)-1, GWEN_Date_GetDay(dt), 0, 0, 0, 0); GWEN_Date_free(dt); } } if (ti==NULL) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Bad date in unit price date"); } else { AB_Security_SetUnitPriceDate(sec, ti); } } GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Debug, "Adding security"); AB_ImExporterContext_AddSecurity(ctx, sec); } } dbT=GWEN_DB_GetNextGroup(dbT); } // while DBG_INFO(AQBANKING_LOGDOMAIN, "Importing securites from DB group \"%s\": Done", GWEN_DB_GroupName(db)); return 0; } void _replaceValueInDb(GWEN_DB_NODE *db, const char *grpName, const char *destName) { GWEN_DB_NODE *dbGroup; dbGroup=GWEN_DB_GetGroup(db, GWEN_PATH_FLAGS_NAMEMUSTEXIST, grpName); if (dbGroup) { const char *sValue; const char *sCurrency; sValue=GWEN_DB_GetCharValue(dbGroup, "value", 0, NULL); sCurrency=GWEN_DB_GetCharValue(dbGroup, "currency", 0, NULL); if (sValue && *sValue) { GWEN_BUFFER *dbuf; dbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(dbuf, sValue); if (sCurrency && *sCurrency) { GWEN_Buffer_AppendString(dbuf, ":"); GWEN_Buffer_AppendString(dbuf, sCurrency); } GWEN_DB_DeleteGroup(db, grpName); dbGroup=NULL; GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, destName, GWEN_Buffer_GetStart(dbuf)); GWEN_Buffer_free(dbuf); } } } int AH_ImExporterSWIFT_CheckFile(AB_IMEXPORTER *ie, const char *fname) { AH_IMEXPORTER_SWIFT *ieh; GWEN_DBIO_CHECKFILE_RESULT rv; assert(ie); ieh=GWEN_INHERIT_GETDATA(AB_IMEXPORTER, AH_IMEXPORTER_SWIFT, ie); assert(ieh); assert(ieh->dbio); rv=GWEN_DBIO_CheckFile(ieh->dbio, fname); switch (rv) { case GWEN_DBIO_CheckFileResultOk: return 0; case GWEN_DBIO_CheckFileResultNotOk: return GWEN_ERROR_BAD_DATA; case GWEN_DBIO_CheckFileResultUnknown: return AB_ERROR_INDIFFERENT; default: return GWEN_ERROR_GENERIC; } /* switch */ } aqbanking-6.6.1/src/libs/plugins/imexporters/swift/README0000664000175000017500000000000014043610745020172 00000000000000aqbanking-6.6.1/src/libs/plugins/imexporters/swift/Makefile.in0000644000175000017500000007352515037736026021410 00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/libs/plugins/imexporters/swift ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/distri.m4 $(top_srcdir)/m4/gwenhywfar.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/os.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = swift.xml CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libabimexporters_swift_la_LIBADD = am_libabimexporters_swift_la_OBJECTS = swift.lo libabimexporters_swift_la_OBJECTS = \ $(am_libabimexporters_swift_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/swift.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libabimexporters_swift_la_SOURCES) DIST_SOURCES = $(libabimexporters_swift_la_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(imexporterplugindir)" DATA = $(imexporterplugin_DATA) HEADERS = $(noinst_HEADERS) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir distdir-am am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/swift.xml.in \ $(top_srcdir)/depcomp README DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ADD_ACLOCAL_FLAGS = @ADD_ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AQBANKING_CLI_VERSION_STRING = @AQBANKING_CLI_VERSION_STRING@ AQBANKING_FINTS_VERSION_STRING = @AQBANKING_FINTS_VERSION_STRING@ AQBANKING_SO_AGE = @AQBANKING_SO_AGE@ AQBANKING_SO_CURRENT = @AQBANKING_SO_CURRENT@ AQBANKING_SO_EFFECTIVE = @AQBANKING_SO_EFFECTIVE@ AQBANKING_SO_REVISION = @AQBANKING_SO_REVISION@ AQBANKING_VERSION_BUILD = @AQBANKING_VERSION_BUILD@ AQBANKING_VERSION_FULL_STRING = @AQBANKING_VERSION_FULL_STRING@ AQBANKING_VERSION_MAJOR = @AQBANKING_VERSION_MAJOR@ AQBANKING_VERSION_MINOR = @AQBANKING_VERSION_MINOR@ AQBANKING_VERSION_PATCHLEVEL = @AQBANKING_VERSION_PATCHLEVEL@ AQBANKING_VERSION_RELEASE_STRING = @AQBANKING_VERSION_RELEASE_STRING@ AQBANKING_VERSION_STRING = @AQBANKING_VERSION_STRING@ AQBANKING_VERSION_TAG = @AQBANKING_VERSION_TAG@ AQEBICS_CFLAGS = @AQEBICS_CFLAGS@ AQEBICS_LIBS = @AQEBICS_LIBS@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATETIME = @DATETIME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_EXCLUDE_PATTERNS = @DOXYGEN_EXCLUDE_PATTERNS@ DOXYGEN_FILE_PATTERNS = @DOXYGEN_FILE_PATTERNS@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENGUI_GTK2_CFLAGS = @GWENGUI_GTK2_CFLAGS@ GWENGUI_GTK2_LIBS = @GWENGUI_GTK2_LIBS@ GWENHYWFAR_MINIMUM_VERSION = @GWENHYWFAR_MINIMUM_VERSION@ HAVE_GWENGUI_GTK2 = @HAVE_GWENGUI_GTK2@ HAVE_I18N = @HAVE_I18N@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIBXSLT_CFLAGS = @LIBXSLT_CFLAGS@ LIBXSLT_LIBS = @LIBXSLT_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_SUPPORTS_QT = @MSGFMT_SUPPORTS_QT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ TUTORIALS = @TUTORIALS@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XMLMERGE = @XMLMERGE@ XMLSEC_CFLAGS = @XMLSEC_CFLAGS@ XMLSEC_LIBS = @XMLSEC_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ aqbanking_backends = @aqbanking_backends@ aqbanking_cfg_searchdir = @aqbanking_cfg_searchdir@ aqbanking_data_searchdir = @aqbanking_data_searchdir@ aqbanking_headerdir = @aqbanking_headerdir@ aqbanking_headerdir_am = @aqbanking_headerdir_am@ aqbanking_includes = @aqbanking_includes@ aqbanking_internal_libs = @aqbanking_internal_libs@ aqbanking_ldflags = @aqbanking_ldflags@ aqbanking_libs = @aqbanking_libs@ aqbanking_locale_searchdir = @aqbanking_locale_searchdir@ aqbanking_modules = @aqbanking_modules@ aqbanking_pkgdatadir = @aqbanking_pkgdatadir@ aqbanking_plugin_searchdir = @aqbanking_plugin_searchdir@ aqbanking_plugindir = @aqbanking_plugindir@ aqbanking_plugins_backends_dirs = @aqbanking_plugins_backends_dirs@ aqbanking_plugins_backends_libs = @aqbanking_plugins_backends_libs@ aqbanking_plugins_bankinfo_dirs = @aqbanking_plugins_bankinfo_dirs@ aqbanking_plugins_bankinfo_libs = @aqbanking_plugins_bankinfo_libs@ aqbanking_plugins_imexporters_dirs = @aqbanking_plugins_imexporters_dirs@ aqbanking_plugins_imexporters_libs = @aqbanking_plugins_imexporters_libs@ aqbanking_plugins_parsers_dirs = @aqbanking_plugins_parsers_dirs@ aqbanking_symlinkdir = @aqbanking_symlinkdir@ aqbanking_sys_is_windows = @aqbanking_sys_is_windows@ aqbankingpp_modules = @aqbankingpp_modules@ aqebics_datadir = @aqebics_datadir@ aqebics_includes = @aqebics_includes@ aqebics_internal_libs = @aqebics_internal_libs@ aqebics_ldflags = @aqebics_ldflags@ aqebics_libs = @aqebics_libs@ aqfints_datadir = @aqfints_datadir@ aqhbci_datadir = @aqhbci_datadir@ aqhbci_includes = @aqhbci_includes@ aqhbci_internal_libs = @aqhbci_internal_libs@ aqhbci_ldflags = @aqhbci_ldflags@ aqhbci_libs = @aqhbci_libs@ aqofxconnect_includes = @aqofxconnect_includes@ aqofxconnect_internal_libs = @aqofxconnect_internal_libs@ aqofxconnect_libs = @aqofxconnect_libs@ aqpaypal_includes = @aqpaypal_includes@ aqpaypal_internal_libs = @aqpaypal_internal_libs@ aqpaypal_libs = @aqpaypal_libs@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gmp_libs = @gmp_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_dir = @gwenhywfar_dir@ gwenhywfar_has_crypt = @gwenhywfar_has_crypt@ gwenhywfar_headers = @gwenhywfar_headers@ gwenhywfar_includes = @gwenhywfar_includes@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_plugins = @gwenhywfar_plugins@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ typemaker2_exe = @typemaker2_exe@ visibility_cflags = @visibility_cflags@ with_aqebics = @with_aqebics@ with_aqhbci = @with_aqhbci@ SUBDIRS = profiles AM_CPPFLAGS = -I$(top_srcdir)/src/libs \ -I$(top_builddir)/src/libs \ $(gwenhywfar_includes) AM_CFLAGS = -DBUILDING_AQBANKING @visibility_cflags@ EXTRA_DIST = README noinst_HEADERS = swift_p.h swift.h imexporterplugindir = $(aqbanking_plugindir)/imexporters noinst_LTLIBRARIES = libabimexporters_swift.la imexporterplugin_DATA = swift.xml libabimexporters_swift_la_SOURCES = swift.c all: all-recursive .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libs/plugins/imexporters/swift/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libs/plugins/imexporters/swift/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): swift.xml: $(top_builddir)/config.status $(srcdir)/swift.xml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libabimexporters_swift.la: $(libabimexporters_swift_la_OBJECTS) $(libabimexporters_swift_la_DEPENDENCIES) $(EXTRA_libabimexporters_swift_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libabimexporters_swift_la_OBJECTS) $(libabimexporters_swift_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/swift.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-imexporterpluginDATA: $(imexporterplugin_DATA) @$(NORMAL_INSTALL) @list='$(imexporterplugin_DATA)'; test -n "$(imexporterplugindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(imexporterplugindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(imexporterplugindir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(imexporterplugindir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(imexporterplugindir)" || exit $$?; \ done uninstall-imexporterpluginDATA: @$(NORMAL_UNINSTALL) @list='$(imexporterplugin_DATA)'; test -n "$(imexporterplugindir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(imexporterplugindir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(imexporterplugindir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-recursive -rm -f ./$(DEPDIR)/swift.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-imexporterpluginDATA install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f ./$(DEPDIR)/swift.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-imexporterpluginDATA .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ am--depfiles check check-am clean clean-generic clean-libtool \ clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-imexporterpluginDATA install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am \ uninstall-imexporterpluginDATA .PRECIOUS: Makefile typefiles: typedefs: sources: for f in $(libabimexporters_swift_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for f in $(imexporterplugin_DATA); do \ echo $(subdir)/$$f >>$(top_srcdir)/pdsources; \ done cppcheck: for f in $(libabimexporters_swift_la_SOURCES); do \ cppcheck --force $$f ; \ done # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: aqbanking-6.6.1/src/libs/plugins/imexporters/swift/Makefile.am0000664000175000017500000000135314043610745021362 00000000000000SUBDIRS=profiles AM_CPPFLAGS = -I$(top_srcdir)/src/libs \ -I$(top_builddir)/src/libs \ $(gwenhywfar_includes) AM_CFLAGS=-DBUILDING_AQBANKING @visibility_cflags@ EXTRA_DIST=README noinst_HEADERS=swift_p.h swift.h imexporterplugindir = $(aqbanking_plugindir)/imexporters noinst_LTLIBRARIES=libabimexporters_swift.la imexporterplugin_DATA=swift.xml libabimexporters_swift_la_SOURCES=swift.c typefiles: typedefs: sources: for f in $(libabimexporters_swift_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for f in $(imexporterplugin_DATA); do \ echo $(subdir)/$$f >>$(top_srcdir)/pdsources; \ done cppcheck: for f in $(libabimexporters_swift_la_SOURCES); do \ cppcheck --force $$f ; \ done aqbanking-6.6.1/src/libs/plugins/imexporters/swift/swift.xml.in0000664000175000017500000000047214043610745021612 00000000000000 @AQBANKING_VERSION_STRING@ Martin Preuss(martin@libchipcard.de) Im-/exporter for SWIFT This plugin imports SWIFT MT940, MT942 and MT535 data. aqbanking-6.6.1/src/libs/plugins/imexporters/csv/0000755000175000017500000000000015037736157017053 500000000000000aqbanking-6.6.1/src/libs/plugins/imexporters/csv/csv_editprofile.dlg0000664000175000017500000003153314043610745022641 00000000000000 aqbanking-6.6.1/src/libs/plugins/imexporters/csv/Makefile.in0000644000175000017500000007642615037736026021052 00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/libs/plugins/imexporters/csv ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/distri.m4 $(top_srcdir)/m4/gwenhywfar.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/os.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = csv.xml CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libabimexporters_csv_la_LIBADD = am_libabimexporters_csv_la_OBJECTS = csv.lo csv_editprofile.lo libabimexporters_csv_la_OBJECTS = \ $(am_libabimexporters_csv_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/csv.Plo \ ./$(DEPDIR)/csv_editprofile.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libabimexporters_csv_la_SOURCES) DIST_SOURCES = $(libabimexporters_csv_la_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(dialogdatadir)" \ "$(DESTDIR)$(imexporterplugindir)" DATA = $(dialogdata_DATA) $(imexporterplugin_DATA) HEADERS = $(noinst_HEADERS) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir distdir-am am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/csv.xml.in \ $(top_srcdir)/depcomp README DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ADD_ACLOCAL_FLAGS = @ADD_ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AQBANKING_CLI_VERSION_STRING = @AQBANKING_CLI_VERSION_STRING@ AQBANKING_FINTS_VERSION_STRING = @AQBANKING_FINTS_VERSION_STRING@ AQBANKING_SO_AGE = @AQBANKING_SO_AGE@ AQBANKING_SO_CURRENT = @AQBANKING_SO_CURRENT@ AQBANKING_SO_EFFECTIVE = @AQBANKING_SO_EFFECTIVE@ AQBANKING_SO_REVISION = @AQBANKING_SO_REVISION@ AQBANKING_VERSION_BUILD = @AQBANKING_VERSION_BUILD@ AQBANKING_VERSION_FULL_STRING = @AQBANKING_VERSION_FULL_STRING@ AQBANKING_VERSION_MAJOR = @AQBANKING_VERSION_MAJOR@ AQBANKING_VERSION_MINOR = @AQBANKING_VERSION_MINOR@ AQBANKING_VERSION_PATCHLEVEL = @AQBANKING_VERSION_PATCHLEVEL@ AQBANKING_VERSION_RELEASE_STRING = @AQBANKING_VERSION_RELEASE_STRING@ AQBANKING_VERSION_STRING = @AQBANKING_VERSION_STRING@ AQBANKING_VERSION_TAG = @AQBANKING_VERSION_TAG@ AQEBICS_CFLAGS = @AQEBICS_CFLAGS@ AQEBICS_LIBS = @AQEBICS_LIBS@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATETIME = @DATETIME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_EXCLUDE_PATTERNS = @DOXYGEN_EXCLUDE_PATTERNS@ DOXYGEN_FILE_PATTERNS = @DOXYGEN_FILE_PATTERNS@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENGUI_GTK2_CFLAGS = @GWENGUI_GTK2_CFLAGS@ GWENGUI_GTK2_LIBS = @GWENGUI_GTK2_LIBS@ GWENHYWFAR_MINIMUM_VERSION = @GWENHYWFAR_MINIMUM_VERSION@ HAVE_GWENGUI_GTK2 = @HAVE_GWENGUI_GTK2@ HAVE_I18N = @HAVE_I18N@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIBXSLT_CFLAGS = @LIBXSLT_CFLAGS@ LIBXSLT_LIBS = @LIBXSLT_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_SUPPORTS_QT = @MSGFMT_SUPPORTS_QT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ TUTORIALS = @TUTORIALS@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XMLMERGE = @XMLMERGE@ XMLSEC_CFLAGS = @XMLSEC_CFLAGS@ XMLSEC_LIBS = @XMLSEC_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ aqbanking_backends = @aqbanking_backends@ aqbanking_cfg_searchdir = @aqbanking_cfg_searchdir@ aqbanking_data_searchdir = @aqbanking_data_searchdir@ aqbanking_headerdir = @aqbanking_headerdir@ aqbanking_headerdir_am = @aqbanking_headerdir_am@ aqbanking_includes = @aqbanking_includes@ aqbanking_internal_libs = @aqbanking_internal_libs@ aqbanking_ldflags = @aqbanking_ldflags@ aqbanking_libs = @aqbanking_libs@ aqbanking_locale_searchdir = @aqbanking_locale_searchdir@ aqbanking_modules = @aqbanking_modules@ aqbanking_pkgdatadir = @aqbanking_pkgdatadir@ aqbanking_plugin_searchdir = @aqbanking_plugin_searchdir@ aqbanking_plugindir = @aqbanking_plugindir@ aqbanking_plugins_backends_dirs = @aqbanking_plugins_backends_dirs@ aqbanking_plugins_backends_libs = @aqbanking_plugins_backends_libs@ aqbanking_plugins_bankinfo_dirs = @aqbanking_plugins_bankinfo_dirs@ aqbanking_plugins_bankinfo_libs = @aqbanking_plugins_bankinfo_libs@ aqbanking_plugins_imexporters_dirs = @aqbanking_plugins_imexporters_dirs@ aqbanking_plugins_imexporters_libs = @aqbanking_plugins_imexporters_libs@ aqbanking_plugins_parsers_dirs = @aqbanking_plugins_parsers_dirs@ aqbanking_symlinkdir = @aqbanking_symlinkdir@ aqbanking_sys_is_windows = @aqbanking_sys_is_windows@ aqbankingpp_modules = @aqbankingpp_modules@ aqebics_datadir = @aqebics_datadir@ aqebics_includes = @aqebics_includes@ aqebics_internal_libs = @aqebics_internal_libs@ aqebics_ldflags = @aqebics_ldflags@ aqebics_libs = @aqebics_libs@ aqfints_datadir = @aqfints_datadir@ aqhbci_datadir = @aqhbci_datadir@ aqhbci_includes = @aqhbci_includes@ aqhbci_internal_libs = @aqhbci_internal_libs@ aqhbci_ldflags = @aqhbci_ldflags@ aqhbci_libs = @aqhbci_libs@ aqofxconnect_includes = @aqofxconnect_includes@ aqofxconnect_internal_libs = @aqofxconnect_internal_libs@ aqofxconnect_libs = @aqofxconnect_libs@ aqpaypal_includes = @aqpaypal_includes@ aqpaypal_internal_libs = @aqpaypal_internal_libs@ aqpaypal_libs = @aqpaypal_libs@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gmp_libs = @gmp_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_dir = @gwenhywfar_dir@ gwenhywfar_has_crypt = @gwenhywfar_has_crypt@ gwenhywfar_headers = @gwenhywfar_headers@ gwenhywfar_includes = @gwenhywfar_includes@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_plugins = @gwenhywfar_plugins@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ typemaker2_exe = @typemaker2_exe@ visibility_cflags = @visibility_cflags@ with_aqebics = @with_aqebics@ with_aqhbci = @with_aqhbci@ SUBDIRS = profiles AM_CPPFLAGS = -I$(top_srcdir)/src/libs \ -I$(top_builddir)/src/libs \ $(gwenhywfar_includes) AM_CFLAGS = -DBUILDING_AQBANKING @visibility_cflags@ imexporterplugindir = $(aqbanking_plugindir)/imexporters noinst_LTLIBRARIES = libabimexporters_csv.la imexporterplugin_DATA = csv.xml dialogdatadir = $(aqbanking_pkgdatadir)/imexporters/csv/dialogs dialogdata_DATA = csv_editprofile.dlg libabimexporters_csv_la_SOURCES = \ csv.c \ csv_editprofile.c noinst_HEADERS = \ csv_p.h \ csv.h \ csv_editprofile_l.h \ csv_editprofile_p.h EXTRA_DIST = README $(dialogdata_DATA) all: all-recursive .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libs/plugins/imexporters/csv/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libs/plugins/imexporters/csv/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): csv.xml: $(top_builddir)/config.status $(srcdir)/csv.xml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libabimexporters_csv.la: $(libabimexporters_csv_la_OBJECTS) $(libabimexporters_csv_la_DEPENDENCIES) $(EXTRA_libabimexporters_csv_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libabimexporters_csv_la_OBJECTS) $(libabimexporters_csv_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/csv.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/csv_editprofile.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-dialogdataDATA: $(dialogdata_DATA) @$(NORMAL_INSTALL) @list='$(dialogdata_DATA)'; test -n "$(dialogdatadir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(dialogdatadir)'"; \ $(MKDIR_P) "$(DESTDIR)$(dialogdatadir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(dialogdatadir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(dialogdatadir)" || exit $$?; \ done uninstall-dialogdataDATA: @$(NORMAL_UNINSTALL) @list='$(dialogdata_DATA)'; test -n "$(dialogdatadir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(dialogdatadir)'; $(am__uninstall_files_from_dir) install-imexporterpluginDATA: $(imexporterplugin_DATA) @$(NORMAL_INSTALL) @list='$(imexporterplugin_DATA)'; test -n "$(imexporterplugindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(imexporterplugindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(imexporterplugindir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(imexporterplugindir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(imexporterplugindir)" || exit $$?; \ done uninstall-imexporterpluginDATA: @$(NORMAL_UNINSTALL) @list='$(imexporterplugin_DATA)'; test -n "$(imexporterplugindir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(imexporterplugindir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(dialogdatadir)" "$(DESTDIR)$(imexporterplugindir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-recursive -rm -f ./$(DEPDIR)/csv.Plo -rm -f ./$(DEPDIR)/csv_editprofile.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dialogdataDATA install-imexporterpluginDATA install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f ./$(DEPDIR)/csv.Plo -rm -f ./$(DEPDIR)/csv_editprofile.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-dialogdataDATA uninstall-imexporterpluginDATA .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ am--depfiles check check-am clean clean-generic clean-libtool \ clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am \ install-dialogdataDATA install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am \ install-imexporterpluginDATA install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am uninstall-dialogdataDATA \ uninstall-imexporterpluginDATA .PRECIOUS: Makefile typefiles: typedefs: sources: for f in $(libabimexporters_csv_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for f in $(dialogdata_DATA); do \ echo $(subdir)/$$f >>$(top_srcdir)/dlgsources; \ done for f in $(imexporterplugin_DATA); do \ echo $(subdir)/$$f >>$(top_srcdir)/pdsources; \ done cppcheck: for f in $(libabimexporters_csv_la_SOURCES); do \ cppcheck --force $$f ; \ done # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: aqbanking-6.6.1/src/libs/plugins/imexporters/csv/profiles/0000755000175000017500000000000015037736160020670 500000000000000aqbanking-6.6.1/src/libs/plugins/imexporters/csv/profiles/oko.conf0000664000175000017500000000221514043610745022245 00000000000000 char name="oko" char shortDescr="Profile for OP Pankki CSV files" char longDescr="This profile supports the CSV format used by OP Pankki" int import="1" #int export="1" char type="csv" char groupNames="transaction", "transfer", "debitnote", "line" char dateFormat="DD.MM.YYYY" int utc="0" params { # if 1 then values are quoted quote="0" # if 1 then a title line will be written containing the names of each # column title="1" # special values are "TAB" and "SPACE" delimiter=";" # this is the group name looked for in the given data to GWEN_CSV_Write # if not given then all groups match #group="transaction" # this group contains the definition for each column # each variable in this group has its number as name # you can use index variables in the names (using square brackets) # the value of each of these variables is the name of a variable to be looked # up in the data given to GWEN_CSV_Write columns { 1="date" 2="value/value" 3="category[0]" 4="purpose[0]" 5="remoteName[0]" 6="remoteAccountNumber" 7="purpose[1]" 8="purpose[2]" 9="purpose[3]" } # columns } # params aqbanking-6.6.1/src/libs/plugins/imexporters/csv/profiles/dkb-cash.conf0000664000175000017500000000456314043610745023141 00000000000000char name="DKB-Cash" char shortDescr="DKB Cash Konto" char longDescr="This profile supports the CSV format used by the Deutsche Kreditbank" int import="1" int export="1" char type="csv" char groupNames="transaction", "transfer", "debitnote", "line" char dateFormat="DD.MM.YYYY" int utc="0" # The following vars are used when there is an additional field within a # record which defines the sign of the amount. # Some banks use "C" (positive) and "D" (negative) or "Af" (negative) and # "Bij" (positive) int usePosNegField="0" char posNegFieldName="posNeg" #char positiveValues="Bij", "C" #char negativeValues="Af", "D" int defaultIsPositive="1" char commaThousands="." char commaDecimal="," # default is "float", other values: "rational" char valueFormat="rational" params { # ignore the header int ignoreLines="6" # if 1 then values are quoted quote="1" # if 1 then a title line will be written containing the names of each # column title="1" # special values are "TAB" and "SPACE" delimiter=";" # this is the group name looked for in the given data to GWEN_CSV_Write # if not given then all groups match #group="transaction" # title of DKB CSV files #"Buchungstag";"Wertstellung";"Buchungstext";"Auftraggeber/Beguenstigter";"Verwendungszweck";"Kontonummer";"BLZ";"Betrag (EUR)"; # example entry of a DKB CSV file: #"14.07.2010";"14.07.2010";"LASTSCHRIFT";"SOME PURPOSE";"123456";"12345678";"-1.413,30"; # this group contains the definition for each column # each variable in this group has its number as name # you can use index variables in the names (using square brackets) # the value of each of these variables is the name of a variable to be looked # up in the data given to GWEN_CSV_Write columns { 1="Date" # Buchungstag 2="ValutaDate" # Wertstellung 3="Type" # Buchungsart 4="RemoteName" # Auftraggeber/Beguenstigter 5="Purpose" # Verwendungszweck 6="RemoteAccountNumber" # Kontonummer 7="CustomerReference" # Bankleitzahl 8="Value/Value" # Betrag (EUR) } # columns } # params aqbanking-6.6.1/src/libs/plugins/imexporters/csv/profiles/dkb.conf0000664000175000017500000000376514043610745022230 00000000000000 char name="DKB" char shortDescr="Profile for Deutsche Kreditbank CSV files" char longDescr="This profile supports the CSV format used by the Deutsche Kreditbank" int import="1" int export="1" char type="csv" char groupNames="transaction", "transfer", "debitnote", "line" char dateFormat="DD.MM.YYYY" int utc="0" # The following vars are used when there is an additional field within a # record which defines the sign of the amount. # Some banks use "C" (positive) and "D" (negative) or "Af" (negative) and # "Bij" (positive) int usePosNegField="0" char posNegFieldName="posNeg" #char positiveValues="Bij", "C" #char negativeValues="Af", "D" int defaultIsPositive="1" # default is "float", other values: "rational" char valueFormat="float" params { # ignore the header int ignoreLines="7" # if 1 then values are quoted quote="1" # if 1 then a title line will be written containing the names of each # column title="1" # special values are "TAB" and "SPACE" delimiter=";" # this is the group name looked for in the given data to GWEN_CSV_Write # if not given then all groups match #group="transaction" # title of DKB CSV files #"Umsatz abgerechnet";"Buchungstag";"Belegdatum";"Umsatzbeschreibung";"Betrag (EUR)";"Urspruenglicher Betrag"; # example entry of a DKB CSV file: #"Nein";"17.02.2009";"15.02.2009";"SOME PURPOSE";"-41,37";"-456,00 SEK"; # this group contains the definition for each column # each variable in this group has its number as name # you can use index variables in the names (using square brackets) # the value of each of these variables is the name of a variable to be looked # up in the data given to GWEN_CSV_Write columns { # 1="N/A" # Umsatz abgerechnet (JA oder NEIN) 2="valutadate" # Buchungstag 3="date" # Belegdatum 4="purpose[0]" # Umsatzbeschreibung 5="value/value" # Betrag (EUR) 6="purpose[1]" # Urspruenglicher Betrag } # columns } # params aqbanking-6.6.1/src/libs/plugins/imexporters/csv/profiles/spk-steiermark.conf0000664000175000017500000000075214043610745024422 00000000000000char name="spk-steiermark" char shortDescr="Profile for steiermaerkische Sparkasse (AT)" char longDescr="This profile supports the CSV format of steiermaerkische Sparkasse" int import="1" int export="1" char type="csv" char groupNames="transaction", "transfer", "debitnote", "line" char dateFormat="DD.MM.YYYY" int utc="0" params { quote="1" title="1" delimiter=";" columns { 1="purpose[0]" 2="valutadate" 3="value/value" 4="purpose[1]" } # columns } # params aqbanking-6.6.1/src/libs/plugins/imexporters/csv/profiles/diba.conf0000664000175000017500000000224014043610745022352 00000000000000 char name="diba" char shortDescr="Profile for DiBa CSV files" char longDescr="This profile supports the CSV format used by the DiBa bank" int import="1" #int export="1" char type="csv" char groupNames="transaction", "transfer", "debitnote", "line" char dateFormat="DD.MM.YYYY" int utc="0" params { # number of lines to ignore int ignoreLines="8" # if 1 then values are quoted quote="1" # if 1 then a title line will be written containing the names of each # column title="1" # special values are "TAB" and "SPACE" delimiter=";" # this is the group name looked for in the given data to GWEN_CSV_Write # if not given then all groups match #group="transaction" # this group contains the definition for each column # each variable in this group has its number as name # you can use index variables in the names (using square brackets) # the value of each of these variables is the name of a variable to be looked # up in the data given to GWEN_CSV_Write columns { 1="date" 2="valutadate" 3="remoteName[0]" 4="transactionText" 5="purpose[0]" 6="value/value" 7="value/currency" } # columns } # params aqbanking-6.6.1/src/libs/plugins/imexporters/csv/profiles/aqmoney2.conf0000664000175000017500000000270014043610745023207 00000000000000 char name="AqMoney2" char shortDescr="Profile for AqMoney2 CSV files" char longDescr="This profile supports the CSV format used by AqMoney2" int import="1" int export="1" char type="csv" char groupNames="transaction", "transfer", "debitnote", "line" char dateFormat="YYYYMMDD" int utc="0" params { # if 1 then values are quoted quote="1" # if 1 then a title line will be written containing the names of each # column title="1" # special values are "TAB" and "SPACE" delimiter=";" # this is the group name looked for in the given data to GWEN_CSV_Write # if not given then all groups match #group="transaction" # this group contains the definition for each column # each variable in this group has its number as name # you can use index variables in the names (using square brackets) # the value of each of these variables is the name of a variable to be looked # up in the data given to GWEN_CSV_Write columns { 1="transactionId" 2="localBankCode" 3="localAccountNumber" 4="remoteBankCode" 5="remoteAccountNumber" 6="date" 7="valutadate" 8="value/value" 9="value/currency" 10="remoteName[0]" 11="remoteName[1]" 12="purpose[0]" 13="purpose[1]" 14="purpose[2]" 15="purpose[3]" 16="purpose[4]" 17="purpose[5]" 18="purpose[6]" 19="purpose[7]" 20="purpose[8]" 21="purpose[9]" 22="purpose[10]" 23="purpose[11]" } # columns } # params aqbanking-6.6.1/src/libs/plugins/imexporters/csv/profiles/onvista-trans.conf0000664000175000017500000000303214156464025024266 00000000000000 char name="onvista-trans" char shortDescr="Profile of Onvista Transaction Reports" char longDescr="This profile supports the CSV format of Onvista Transaction Reports" int import="1" int export="1" char type="csv" char transactionType="brokerage" char groupNames="transaction", "transfer", "debitnote", "line" char dateFormat="DD.MM.YYYY" int utc="0" # The following vars are used when there is an additional field within a # record which defines the sign of the amount. # Some banks use "C" (positive) and "D" (negative) or "Af" (negative) and # "Bij" (positive) int usePosNegField="1" char posNegFieldName="type" char positiveValues="kauf" char negativeValues="verkauf" int defaultIsPositive="1" params { # no line to ignore int ignoreLines="5" # if 1 then values are quoted quote="0" # if 1 then a title line will be written containing the names of each # column title="1" # special values are "TAB" and "SPACE" delimiter=";" # this group contains the definition for each column # each variable in this group has its number as name # you can use index variables in the names (using square brackets) # the value of each of these variables is the name of a variable to be looked # up in the data given to GWEN_CSV_Write columns { 1="date" 2="valutadate" 3="type" 4="units" 5="remoteName" 6 { delimiter="/" 1="wkn" 2="unitId" # isin } 7="value/value" 8="value/currency" 9="unitPriceValue/value" 10="unitPriceValue/currency" } # columns } # params aqbanking-6.6.1/src/libs/plugins/imexporters/csv/profiles/comdirect-prices.conf0000664000175000017500000000420514730347270024715 00000000000000 char name="comdirect-prices" char shortDescr="Profile of Comdirect Depot Status Reports" char longDescr="This profile supports the CSV format of Comdirect Depot Status Reports" int import="1" int export="1" char type="csv" char transactionType="brokerage" char groupNames="transaction", "transfer", "debitnote", "line" char dateFormat="DD.MM.YYYY" int utc="0" # The following vars are used when there is an additional field within a # record which defines the sign of the amount. # Some banks use "C" (positive) and "D" (negative) or "Af" (negative) and # "Bij" (positive) int usePosNegField="0" # char posNegFieldName="type" # char positiveValues="kauf" # char negativeValues="verkauf" # int defaultIsPositive="1" params { # number of lines to ignore int ignoreLines="1" # if 1 then values are quoted quote="1" # if 1 then a title line will be written containing the names of each # column title="1" # special values are "TAB" and "SPACE" delimiter=";" # this is the group name looked for in the given data to GWEN_CSV_Write # if not given then all groups match # group="transaction" # this group contains the definition for each column # each variable in this group has its number as name # you can use index variables in the names (using square brackets) # the value of each of these variables is the name of a variable to be looked # up in the data given to GWEN_CSV_Write columns { 1="units" 2="remoteName" 3="purpose" # notizen 4="unitId" # WKN 5="type" # not used 6="unitPriceValue/currency" 7="unitPriceValue/value" 8="diffAbs/value" # not used 9="diffPercent/value" # not used 10="value/value" # buy value (buyPrice x units) 11="value/currency" 12="valueDiffAbs/value" # not used 13="valuePercent/value" # not used 14="date" 15="time" # not used 16="location" # not used 17="buyPrice/value" # not used 18="buyPrice/currency" # not used } # columns } # params aqbanking-6.6.1/src/libs/plugins/imexporters/csv/profiles/spk-mainz.conf0000664000175000017500000000325614043610745023374 00000000000000char name="SPK-MAINZ" char shortDescr="Files from Sparkasse Mainz" char longDescr="This profile supports the CSV format used by Sparkasse Mainz" int import="1" int export="1" char type="csv" char groupNames="transaction", "transfer", "debitnote", "line" char dateFormat="DD.MM.YY" int utc="0" # The following vars are used when there is an additional field within a # record which defines the sign of the amount. # Some banks use "C" (positive) and "D" (negative) or "Af" (negative) and # "Bij" (positive) int usePosNegField="0" char posNegFieldName="posNeg" #char positiveValues="Bij", "C" #char negativeValues="Af", "D" int defaultIsPositive="1" params { # if 1 then values are quoted quote="1" # if 1 then a title line will be written containing the names of each # column title="0" # special values are "TAB" and "SPACE" delimiter=";" # this is the group name looked for in the given data to GWEN_CSV_Write # if not given then all groups match #group="transaction" # this group contains the definition for each column # each variable in this group has its number as name # you can use index variables in the names (using square brackets) # the value of each of these variables is the name of a variable to be looked # up in the data given to GWEN_CSV_Write columns { 1="date" 2="value/value" 3="remoteName[0]" 4="remoteName[1]" 5="purpose[0]" # 1="localAccountNumber" # 2="date" # 3="valutadate" # 4="transactionText" # 5="purpose[0]" # 6="remoteName[0]" # 7="remoteName[1]" # 7="remoteAccountNumber" # 8="remoteBankCode" # 9="value/value" # 10="value/currency" # 11="purpose[1]" } # columns } # params aqbanking-6.6.1/src/libs/plugins/imexporters/csv/profiles/default.conf0000664000175000017500000000401114043610745023075 00000000000000 char name="default" char shortDescr="default profile" char longDescr="This profile supports the CSV format" int import="1" int export="1" char type="csv" char groupNames="transaction", "transfer", "debitnote", "line" char dateFormat="YYYY/MM/DD" int utc="0" # The following vars are used when there is an additional field within a # record which defines the sign of the amount. # Some banks use "C" (positive) and "D" (negative) or "Af" (negative) and # "Bij" (positive) int usePosNegField="0" char posNegFieldName="posNeg" #char positiveValues="Bij", "C" #char negativeValues="Af", "D" int defaultIsPositive="1" # default is "float", other values: "rational" char valueFormat="float" params { # if 1 then values are quoted quote="1" # if 1 then a title line will be written containing the names of each # column title="1" # special values are "TAB" and "SPACE" delimiter=";" # this is the group name looked for in the given data to GWEN_CSV_Write # if not given then all groups match #group="transaction" # this group contains the definition for each column # each variable in this group has its number as name # you can use index variables in the names (using square brackets) # the value of each of these variables is the name of a variable to be looked # up in the data given to GWEN_CSV_Write columns { 1="transactionId" 2="localBankCode" 3="localAccountNumber" 4="remoteBankCode" 5="remoteAccountNumber" 6="date" 7="valutadate" 8="value/value" 9="value/currency" 10="localName" 11="remoteName[0]" 12="remoteName[1]" 13="purpose[0]" 14="purpose[1]" 15="purpose[2]" 16="purpose[3]" 17="purpose[4]" 18="purpose[5]" 19="purpose[6]" 20="purpose[7]" 21="purpose[8]" 22="purpose[9]" 23="purpose[10]" 24="purpose[11]" 25="category[0]" 26="category[1]" 27="category[2]" 28="category[3]" 29="category[4]" 30="category[5]" 31="category[6]" 32="category[7]" } # columns } # params aqbanking-6.6.1/src/libs/plugins/imexporters/csv/profiles/tonline-banking.conf0000664000175000017500000000322314043610745024534 00000000000000char name="T-ONLINE" char shortDescr="Files from T-Online Banking Module" char longDescr="This profile supports the CSV format used by T-Online" int import="1" int export="1" char type="csv" char groupNames="transaction", "transfer", "debitnote", "line" char dateFormat="DD.MM.YYYY" int utc="0" # The following vars are used when there is an additional field within a # record which defines the sign of the amount. # Some banks use "C" (positive) and "D" (negative) or "Af" (negative) and # "Bij" (positive) int usePosNegField="0" #char posNegFieldName="posNeg" #char positiveValues="Bij", "C" #char negativeValues="Af", "D" int defaultIsPositive="1" params { # if 1 then values are quoted quote="1" # if 1 then a title line will be written containing the names of each # column title="1" # special values are "TAB" and "SPACE" delimiter=";" # this is the group name looked for in the given data to GWEN_CSV_Write # if not given then all groups match #group="transaction" # this group contains the definition for each column # each variable in this group has its number as name # you can use index variables in the names (using square brackets) # the value of each of these variables is the name of a variable to be looked # up in the data given to GWEN_CSV_Write columns { 1="localAccountNumber" 2="localBankCode" #3="date" (not used) #4="saldo" (not used) #5="currency" (not used) 6="date" 7="valutadate" #8="transfertype" 9="purpose[0]" 10="remoteName[0]" 11="value/value" 12="value/currency" #13="category" (not used) } # columns } # params aqbanking-6.6.1/src/libs/plugins/imexporters/csv/profiles/consors-tagesgeld.conf0000664000175000017500000000420514043610745025101 00000000000000char name="Consors" char shortDescr="Consors Tagesgeld Konto" char longDescr="This profile supports the CSV format used by Cortal Consors" int import="1" int export="1" char type="csv" char groupNames="transaction", "transfer", "debitnote", "line" char dateFormat="DD.MM.YYYY" int utc="0" # The following vars are used when there is an additional field within a # record which defines the sign of the amount. # Some banks use "C" (positive) and "D" (negative) or "Af" (negative) and # "Bij" (positive) int usePosNegField="0" char posNegFieldName="posNeg" #char positiveValues="Bij", "C" #char negativeValues="Af", "D" int defaultIsPositive="1" char commaThousands="." char commaDecimal="," # default is "float", other values: "rational" char valueFormat="rational" params { # ignore the header int ignoreLines="1" # if 1 then values are quoted quote="0" # if 1 then a title line will be written containing the names of each # column title="0" # special values are "TAB" and "SPACE" delimiter=";" # this is the group name looked for in the given data to GWEN_CSV_Write # if not given then all groups match #group="transaction" # title of Consors CSV files # # example entry of a Consors CSV file: # # this group contains the definition for each column # each variable in this group has its number as name # you can use index variables in the names (using square brackets) # the value of each of these variables is the name of a variable to be looked # up in the data given to GWEN_CSV_Write columns { 1="Date" # Buchungstag 2="ValutaDate" # Wertstellung 3="Type" # Buchungsart 4="Purpose" # Verwendungszweck 5="RemoteName" # Auftraggeber/Beguenstigter # 6="RemoteAccountNumber" # Kontonummer # 7="CustomerReference" # Bankleitzahl 6="Value/Value" # Betrag (EUR) } # columns } # params aqbanking-6.6.1/src/libs/plugins/imexporters/csv/profiles/lbbberlin.conf0000664000175000017500000000301514043610745023407 00000000000000 char name="LandesBankBerlin" char shortDescr="Profile for Landesbank Berlin CSV files" char longDescr="This profile supports the CSV format used by Landesbank Berlin for the Amazon.de Credit Card" int import="1" #int export="1" char type="csv" char groupNames="transaction", "transfer", "debitnote", "line" char dateFormat="DD.MM.YYYY" int utc="0" params { # if 1 then values are quoted quote="0" # if 1 then a title line will be written containing the names of each # column title="0" # special values are "TAB" and "SPACE" delimiter=";" # this is the group name looked for in the given data to GWEN_CSV_Write # if not given then all groups match #group="transaction" # this group contains the definition for each column # each variable in this group has its number as name # you can use index variables in the names (using square brackets) # the value of each of these variables is the name of a variable to be looked # up in the data given to GWEN_CSV_WriteA #example entry: #Kreditkartennr;Buchungsdatum;Kaufdatum;Zweck;Betrag Waehrung;Wechselkurs;Betrag in EUR #4344123412341234;07.07.2008;05.07.2008;TRAVELEX London (2) / London;60,00 GBP;0,78930;-76,02 columns { 1="localAccountNumber" # Kreditkartennummer 2="valutadate" # Buchungsdatum 3="date" # Kaufdatum 4="purpose[0]" # Zweck 5="purpose[1]" # Betrag in Fremdwaehrung (e.g.: 60,00 GBP) 6="purpose[2]" # Wechselkurs (e.g.: 0,78930) 7="value/value" # Betrag in EUR (e.g.: -76,02) } # columns } # params aqbanking-6.6.1/src/libs/plugins/imexporters/csv/profiles/comdirect.conf0000664000175000017500000000217614043610745023434 00000000000000 char name="comdirect" char shortDescr="Profile for Comdirect CSV files" char longDescr="This profile supports the CSV format used by the ComDirect bank" int import="1" #int export="1" char type="csv" char groupNames="transaction", "transfer", "debitnote", "line" char dateFormat="DD.MM.YYYY" int utc="0" params { # number of lines to ignore int ignoreLines="22" # if 1 then values are quoted quote="1" # if 1 then a title line will be written containing the names of each # column title="1" # special values are "TAB" and "SPACE" delimiter=";" # this is the group name looked for in the given data to GWEN_CSV_Write # if not given then all groups match #group="transaction" # this group contains the definition for each column # each variable in this group has its number as name # you can use index variables in the names (using square brackets) # the value of each of these variables is the name of a variable to be looked # up in the data given to GWEN_CSV_Write columns { 1="date" 2="valutadate" 3="purpose[0]" 4="purpose[1]" 5="value/value" } # columns } # params aqbanking-6.6.1/src/libs/plugins/imexporters/csv/profiles/mijnpostbank.conf0000664000175000017500000000304014043610745024151 00000000000000 char name="mijnpostbank" char shortDescr="Profile of MijnPostbank.nl csv export format" char longDescr="This profile supports the CSV format" int import="1" int export="1" char type="csv" char groupNames="transaction", "transfer", "debitnote", "line" char dateFormat="YYYYMMDD" int utc="0" # The following vars are used when there is an additional field within a # record which defines the sign of the amount. # Some banks use "C" (positive) and "D" (negative) or "Af" (negative) and # "Bij" (positive) int usePosNegField="1" char posNegFieldName="posNeg" char positiveValues="Bij", "C" char negativeValues="Af", "D" int defaultIsPositive="1" params { # no line to ignore int ignoreLines="0" # if 1 then values are quoted quote="1" # if 1 then a title line will be written containing the names of each # column title="1" # special values are "TAB" and "SPACE" delimiter="," # this is the group name looked for in the given data to GWEN_CSV_Write # if not given then all groups match #group="transaction" # this group contains the definition for each column # each variable in this group has its number as name # you can use index variables in the names (using square brackets) # the value of each of these variables is the name of a variable to be looked # up in the data given to GWEN_CSV_Write columns { 1="date" 2="remoteName" 3="localAccountNumber" 4="remoteAccountNumber" 5="transactionId" 6="posNeg" 7="value/value" 8="category" 9="purpose" } # columns } # params aqbanking-6.6.1/src/libs/plugins/imexporters/csv/profiles/sparda.conf0000664000175000017500000000217114043610745022730 00000000000000 char name="sparda" char shortDescr="Profile for Sparda CSV files" char longDescr="This profile supports the CSV format used by the Sparda bank" int import="1" #int export="1" char type="csv" char groupNames="transaction", "transfer", "debitnote", "line" char dateFormat="DD.MM.YYYY" int utc="0" params { # number of lines to ignore int ignoreLines="16" # if 1 then values are quoted quote="1" # if 1 then a title line will be written containing the names of each # column title="1" # special values are "TAB" and "SPACE" delimiter=";" # this is the group name looked for in the given data to GWEN_CSV_Write # if not given then all groups match #group="transaction" # this group contains the definition for each column # each variable in this group has its number as name # you can use index variables in the names (using square brackets) # the value of each of these variables is the name of a variable to be looked # up in the data given to GWEN_CSV_Write columns { 1="date" 2="valutadate" 3="purpose[0]" 4="value/value" 5="value/currency" } # columns } # params aqbanking-6.6.1/src/libs/plugins/imexporters/csv/profiles/bankaustria.conf0000664000175000017500000000333314043610745023763 00000000000000 char name="BankAustria" char shortDescr="Profile for Bank Austria" char longDescr="This profile supports the CSV format of Bank Austria" int import="1" int export="1" char type="csv" char groupNames="transaction", "transfer", "debitnote", "line" char dateFormat="DD.MM.YYYY" int utc="0" # The following vars are used when there is an additional field within a # record which defines the sign of the amount. # Some banks use "C" (positive) and "D" (negative) or "Af" (negative) and # "Bij" (positive) int usePosNegField="0" char posNegFieldName="posNeg" #char positiveValues="Bij", "C" #char negativeValues="Af", "D" int defaultIsPositive="1" int splitValueInOut="1" # default is "float", other values: "rational" char valueFormat="float" params { # if 1 then values are quoted quote="1" # if 1 then a title line will be written containing the names of each # column title="1" # special values are "TAB" and "SPACE" delimiter=";" # this is the group name looked for in the given data to GWEN_CSV_Write # if not given then all groups match #group="transaction" # this group contains the definition for each column # each variable in this group has its number as name # you can use index variables in the names (using square brackets) # the value of each of these variables is the name of a variable to be looked # up in the data given to GWEN_CSV_Write columns { 1="field1" # Downloaddatum 2="localAccountNumber" 3="field3" # Kontowortlaut 4="field4" # Kontowaehrung 5="field5" # ValutaSaldo 6="field6" # Disposaldo 7="field7" # Kontostand 8="date" 9="valutaDate" 10="value/currency" 11="valueIn/value" 12="valueOut/value" 13="purpose[0]" } # columns } # params aqbanking-6.6.1/src/libs/plugins/imexporters/csv/profiles/vrnetworld.conf0000664000175000017500000000315414043610745023666 00000000000000 char name="vrnetworld" char shortDescr="Profile for VR Networld" char longDescr="This profile supports the CSV format of VR Networld" int import="1" int export="1" char type="csv" char groupNames="transaction", "transfer", "debitnote", "line" char dateFormat="YYYY/MM/DD" int utc="0" # The following vars are used when there is an additional field within a # record which defines the sign of the amount. # Some banks use "C" (positive) and "D" (negative) or "Af" (negative) and # "Bij" (positive) int usePosNegField="0" char posNegFieldName="posNeg" #char positiveValues="Bij", "C" #char negativeValues="Af", "D" int defaultIsPositive="1" params { # if 1 then values are quoted quote="1" # if 1 then a title line will be written containing the names of each # column title="1" # special values are "TAB" and "SPACE" delimiter="TAB" # this is the group name looked for in the given data to GWEN_CSV_Write # if not given then all groups match #group="transaction" # this group contains the definition for each column # each variable in this group has its number as name # you can use index variables in the names (using square brackets) # the value of each of these variables is the name of a variable to be looked # up in the data given to GWEN_CSV_Write columns { 1="date" 2="valutadate" 3="remoteName[0]" 4="remoteAccountNumber" 5="remoteBankCode" 6="purpose[0]" 7="category[0]" 8="value/value" 9="value/currency" 10="localBankCode" 11="localAccountNumber" 12="transactionText" 13="transactionText" 14="dummy" } # columns } # params aqbanking-6.6.1/src/libs/plugins/imexporters/csv/profiles/postbankffm.conf0000664000175000017500000000302714043610745023771 00000000000000 char name="PostbankFFM" char shortDescr="PostbankFFM" char longDescr="Postbank FFM" int import="1" int export="0" char type="csv" char groupNames="transaction", "transfer", "debitnote", "line" char dateFormat="DD.MM.YYYY" int utc="0" # The following vars are used when there is an additional field within a # record which defines the sign of the amount. # Some banks use "C" (positive) and "D" (negative) or "Af" (negative) and # "Bij" (positive) int usePosNegField="0" char posNegFieldName="posNeg" #char positiveValues="Bij", "C" #char negativeValues="Af", "D" int defaultIsPositive="1" int switchLocalRemote="1" int switchOnNegative="0" # default is "float", other values: "rational" char valueFormat="float" params { # if 1 then values are quoted quote="0" IgnoreLines=10 # if 1 then a title line will be written containing the names of each # column title="1" # special values are "TAB" and "SPACE" delimiter="TAB" # this is the group name looked for in the given data to GWEN_CSV_Write # if not given then all groups match #group="transaction" # this group contains the definition for each column # each variable in this group has its number as name # you can use index variables in the names (using square brackets) # the value of each of these variables is the name of a variable to be looked # up in the data given to GWEN_CSV_Write columns { 1="date" 2="valutadate" 3="TransactionText" 4="purpose" 5="localname" 6="remoteName" 7="value/value" } # columns } # params aqbanking-6.6.1/src/libs/plugins/imexporters/csv/profiles/full.conf0000664000175000017500000000654714043610745022433 00000000000000 char name="full" char shortDescr="full profile" char longDescr="This profile supports the CSV format" int import="1" int export="1" char type="csv" char groupNames="transaction", "transfer", "debitnote", "line" char dateFormat="YYYY/MM/DD" int utc="0" # The following vars are used when there is an additional field within a # record which defines the sign of the amount. # Some banks use "C" (positive) and "D" (negative) or "Af" (negative) and # "Bij" (positive) int usePosNegField="0" char posNegFieldName="posNeg" #char positiveValues="Bij", "C" #char negativeValues="Af", "D" int defaultIsPositive="1" # default is "float", other values: "rational" char valueFormat="rational" params { # if 1 then values are quoted quote="1" # if 1 then a title line will be written containing the names of each # column title="1" # special values are "TAB" and "SPACE" delimiter=";" # this is the group name looked for in the given data to GWEN_CSV_Write # if not given then all groups match #group="transaction" # this group contains the definition for each column # each variable in this group has its number as name # you can use index variables in the names (using square brackets) # the value of each of these variables is the name of a variable to be looked # up in the data given to GWEN_CSV_Write columns { 1="localCountry" 2="localBankCode" 3="localBranchId" 4="localAccountNumber" 5="localSuffix" 6="localIban" 7="localName" 8="localBic" 9="remoteCountry" 10="remoteBankName" 11="remoteBankLocation" 12="remoteBankCode" 13="remoteBranchId" 14="remoteAccountNumber" 15="remoteSuffix" 16="remoteIban" 17="remoteName[0]" 18="remoteName[1]" 19="remoteBic" 20="uniqueId" 21="idForApplication" 22="groupId" 23="valutaDate" 24="date" 25="value/value" 26="value/currency" 27="fees/value" 28="fees/currency" 29="textKey" 30="textKeyExt" 31="transactionKey" 32="customerReference" 33="bankReference" 34="transactionCode" 35="transactionText" 36="primanota" 37="fiId" 38="purpose[0]" 39="purpose[1]" 40="purpose[2]" 41="purpose[3]" 42="purpose[4]" 43="purpose[5]" 44="purpose[6]" 45="purpose[7]" 46="purpose[8]" 47="purpose[9]" 48="purpose[10]" 49="purpose[11]" 50="category[0]" 51="category[1]" 52="category[2]" 53="category[3]" 54="category[4]" 55="category[5]" 56="category[6]" 57="category[7]" 58="period" 59="cycle" 60="executionDay" 61="firstDate" 62="lastDate" 63="nextDate" 64="type" 65="subType" 66="status" 67="charge" 68="remoteAddrStreet" 69="remoteAddrZipcode" 70="remoteAddrCity" 71="remotePhone" 72="unitId" 73="unitIdNameSpace" 74="units/value" 75="units/currency" 76="unitPriceValue/value" 77="unitPriceValue/currency" 78="commissionValue/value" 79="commissionValue/currency" 80="bankAccountId" 81="groupId" # double entry 82="creditorSchemeId" # SEPA debit notes 83="originatorId" 84="mandateId" 85="mandateDate" 86="mandateDebitorName" 87="sequence" 88="originalCreditorSchemeId" 89="originalMandateId" 90="originalCreditorName" 91="endToEndReference" } # columns } # params aqbanking-6.6.1/src/libs/plugins/imexporters/csv/profiles/aqmoney1.conf0000664000175000017500000000210714043610745023207 00000000000000 char name="AqMoney1" char shortDescr="Profile for AqMoney1 CSV files" char longDescr="This profile supports the CSV format used by AqMoney (1)" int import="1" int export="1" char type="csv" char groupNames="transaction", "transfer", "debitnote", "line" char dateFormat="*D.*M.YYYY" int utc="0" params { # if 1 then values are quoted quote="1" # if 1 then a title line will be written containing the names of each # column title="1" # special values are "TAB" and "SPACE" delimiter=";" # this is the group name looked for in the given data to GWEN_CSV_Write # if not given then all groups match #group="transaction" # this group contains the definition for each column # each variable in this group has its number as name # you can use index variables in the names (using square brackets) # the value of each of these variables is the name of a variable to be looked # up in the data given to GWEN_CSV_Write columns { 1="remoteName[0]" 2="purpose[0]" 3="value/value" 4="value/currency" 5="valutadate" } # columns } # params aqbanking-6.6.1/src/libs/plugins/imexporters/csv/profiles/psk.conf0000664000175000017500000000275514043610745022263 00000000000000char name="PSK" char shortDescr="Oesterreichische Post Bank" char longDescr="CSV format of Austrian Post Bank Homebanking" int import="1" int export="1" char type="csv" char groupNames="transaction", "transfer", "debitnote", "line" char dateFormat="DD.MM.YYYY" int utc="0" # The following vars are used when there is an additional field within a # record which defines the sign of the amount. # Some banks use "C" (positive) and "D" (negative) or "Af" (negative) and # "Bij" (positive) int usePosNegField="0" char posNegFieldName="posNeg" #char positiveValues="Bij", "C" #char negativeValues="Af", "D" int defaultIsPositive="1" # default is "float", other values: "rational" char valueFormat="float" params { # if 1 then values are quoted quote="0" # if 1 then a title line will be written containing the names of each # column title="0" # special values are "TAB" and "SPACE" delimiter=";" # this is the group name looked for in the given data to GWEN_CSV_Write # if not given then all groups match #group="transaction" # this group contains the definition for each column # each variable in this group has its number as name # you can use index variables in the names (using square brackets) # the value of each of these variables is the name of a variable to be looked # up in the data given to GWEN_CSV_Write columns { 1="localAccountNumber" 2="purpose" 3="date" 4="valutadate" 5="value/value" 6="value/currency" } # columns } # params aqbanking-6.6.1/src/libs/plugins/imexporters/csv/profiles/Makefile.am0000664000175000017500000000121414730347270022643 00000000000000 profilesdir = $(aqbanking_pkgdatadir)/imexporters/csv/profiles profiles_DATA=default.conf aqmoney1.conf aqmoney2.conf \ comdirect.conf mijnpostbank.conf \ spk-aachen.conf tonline-banking.conf amex.conf oko.conf spk-steiermark.conf \ spk-mainz.conf vrnetworld.conf lbbberlin.conf bankaustria.conf psk.conf \ diba.conf sparda.conf full.conf dkb.conf dkb-cash.conf \ hypovereinsbank.conf postbankffm.conf cli-transfers.conf \ sns.conf consors-tagesgeld.conf \ transfers.conf sepadebitnotes.conf \ homebank.conf \ onvista-trans.conf \ onvista-prices.conf \ onvista-account.conf \ comdirect-prices.conf EXTRA_DIST=$(profiles_DATA) aqbanking-6.6.1/src/libs/plugins/imexporters/csv/profiles/onvista-prices.conf0000664000175000017500000000445414156464025024435 00000000000000 char name="onvista-prices" char shortDescr="Profile of Onvista Status Reports" char longDescr="This profile supports the CSV format of Onvista Status Reports" int import="1" int export="1" char type="csv" char transactionType="brokerage" char groupNames="transaction", "transfer", "debitnote", "line" char dateFormat="DD.MM.YYYY" int utc="0" # The following vars are used when there is an additional field within a # record which defines the sign of the amount. # Some banks use "C" (positive) and "D" (negative) or "Af" (negative) and # "Bij" (positive) int usePosNegField="0" # char posNegFieldName="type" # char positiveValues="kauf" # char negativeValues="verkauf" # int defaultIsPositive="1" params { # number of lines to ignore int ignoreLines="5" # if 1 then values are quoted quote="0" # if 1 then a title line will be written containing the names of each # column title="1" # special values are "TAB" and "SPACE" delimiter=";" # this is the group name looked for in the given data to GWEN_CSV_Write # if not given then all groups match # group="transaction" # this group contains the definition for each column # each variable in this group has its number as name # you can use index variables in the names (using square brackets) # the value of each of these variables is the name of a variable to be looked # up in the data given to GWEN_CSV_Write columns { 1="units" 2="remoteName" 3="unitId" # isin 4="wkn" # not used 5="type" # not used 6="date" 7="time" # not used 8="unitPriceValue/value" 9="unitPriceValue/currency" 10="location" # not used 11="buyPrice/value" # not used 12="buyPrice/currency" # not used 13="value/value" # buy value (buyPrice x units) 14="value/currency" 15="totalPerformance/value" # not used 16="totalPerformance/currency" # not used 17="totalPerformancePercent" # not used 18="dayPerformance/value" # not used 19="dayPerformance/currency" # not used 20="dayPerformancePercent" # not used 21="currentValue/value" # not used 22="currentValue/currency" # not used } # columns } # params aqbanking-6.6.1/src/libs/plugins/imexporters/csv/profiles/sns.conf0000664000175000017500000000122114043610745022254 00000000000000char name="sns" char shortDescr="SNS Bank" char version="0.2" char longDescr="CSV profiel voor de Nederlandse SNS Bank" char author="Koos Pol " int import="1" int export="1" char type="csv" char groupNames="transaction", "transfer", "debitnote", "line" char dateFormat="DD-MM-YYYY" int utc="0" char valueFormat="rational" params { int ignoreLines="0" int quote="0" int title="0" char delimiter="," columns { 1="Date" 2="LocalAccountNumber" 3="RemoteAccountNumber" 4="RemoteName" 10="Value/Currency" 11="Value/Value" 13="ValutaDate" 15="Type" 17="CustomerReference" 18="Purpose" } } aqbanking-6.6.1/src/libs/plugins/imexporters/csv/profiles/homebank.conf0000664000175000017500000000126314043610745023243 00000000000000char name="homebank" char shortDescr="Profile for HomeBank" char longDescr="This profile supports the CSV format of the software HomeBank" int import="1" int export="1" char type="csv" char groupNames="transaction", "transfer", "debitnote", "line" char dateFormat="DD-MM-YY" int utc="0" # default is "float", other values: "rational" char valueFormat="float" params { quote="0" title="0" delimiter=";" columns { 1="date" # date 2="empty" # payment 3="empty" # info 4="remoteName" # payee 5="purpose" # memo 6="value/value" # amount 7="empty" # category 8="empty" # tag } # columns } # params aqbanking-6.6.1/src/libs/plugins/imexporters/csv/profiles/sepadebitnotes.conf0000664000175000017500000000231514043610745024467 00000000000000char name="sepadebitnotes" char shortDescr="sepadebitnotes" char longDescr="This profile is used for SEPA debit notes" int import="1" int export="1" char type="csv" char groupNames="transaction", "transfer", "debitnote", "line" char dateFormat="YYYY/MM/DD" int utc="0" params { # if 1 then values are quoted quote="1" # if 1 then a title line will be written containing the names of each # column title="1" # special values are "TAB" and "SPACE" delimiter=";" # this is the group name looked for in the given data to GWEN_CSV_Write # if not given then all groups match #group="transaction" # this group contains the definition for each column # each variable in this group has its number as name # you can use index variables in the names (using square brackets) columns { 1="localBic" 2="localIban" 3="remoteBic" 4="remoteIban" 5="date" 6="value/value" 7="value/currency" 8="localName" 9="remoteName" 10="creditorSchemeId" # SEPA debit notes 11="mandateId" 12="mandateDate" 13="mandateDebitorName" 14="sequence" 15="purpose[0]" 16="purpose[1]" 17="purpose[2]" 18="purpose[3]" } # columns } # params aqbanking-6.6.1/src/libs/plugins/imexporters/csv/profiles/transfers.conf0000664000175000017500000000332314043610745023465 00000000000000 char name="transfers" char shortDescr="transfers" char longDescr="This profile is used for transfers" int import="1" int export="1" char type="csv" char groupNames="transaction", "transfer", "debitnote", "line" char dateFormat="YYYY/MM/DD" int utc="0" # The following vars are used when there is an additional field within a # record which defines the sign of the amount. # Some banks use "C" (positive) and "D" (negative) or "Af" (negative) and # "Bij" (positive) int usePosNegField="0" char posNegFieldName="posNeg" #char positiveValues="Bij", "C" #char negativeValues="Af", "D" int defaultIsPositive="1" params { # if 1 then values are quoted quote="1" # if 1 then a title line will be written containing the names of each # column title="1" # special values are "TAB" and "SPACE" delimiter=";" # this is the group name looked for in the given data to GWEN_CSV_Write # if not given then all groups match #group="transaction" # this group contains the definition for each column # each variable in this group has its number as name # you can use index variables in the names (using square brackets) columns { 1="fiId" 2="localBankCode" 3="localAccountNumber" 4="remoteBankCode" 5="remoteAccountNumber" 6="date" 7="valutadate" 8="value/value" 9="value/currency" 10="localName" 11="remoteName[0]" 12="remoteName[1]" 13="status" 14="type" 15="purpose[0]" 16="purpose[1]" 17="purpose[2]" 18="purpose[3]" 19="purpose[4]" 20="purpose[5]" 21="purpose[6]" 22="purpose[7]" 23="purpose[8]" 24="purpose[9]" 25="purpose[10]" 26="purpose[11]" 27="category[0]" 28="groupId" } # columns } # params aqbanking-6.6.1/src/libs/plugins/imexporters/csv/profiles/spk-aachen.conf0000664000175000017500000000306714043610745023475 00000000000000char name="SPK-AACHEN" char shortDescr="Files from Sparkasse Aachen" char longDescr="This profile supports the CSV format used by Sparkasse Aachen" int import="1" int export="1" char type="csv" char groupNames="transaction", "transfer", "debitnote", "line" char dateFormat="DD.MM.YY" int utc="0" # The following vars are used when there is an additional field within a # record which defines the sign of the amount. # Some banks use "C" (positive) and "D" (negative) or "Af" (negative) and # "Bij" (positive) int usePosNegField="0" char posNegFieldName="posNeg" #char positiveValues="Bij", "C" #char negativeValues="Af", "D" int defaultIsPositive="1" params { # if 1 then values are quoted quote="1" # if 1 then a title line will be written containing the names of each # column title="1" # special values are "TAB" and "SPACE" delimiter=";" # this is the group name looked for in the given data to GWEN_CSV_Write # if not given then all groups match #group="transaction" # this group contains the definition for each column # each variable in this group has its number as name # you can use index variables in the names (using square brackets) # the value of each of these variables is the name of a variable to be looked # up in the data given to GWEN_CSV_Write columns { 1="localAccountNumber" #2="date" 3="valutadate" 4="transactionText" 5="purpose[0]" 6="remoteName[0]" 7="remoteAccountNumber" 8="remoteBankCode" 9="value/value" 10="value/currency" #11="purpose[1]" } # columns } # params aqbanking-6.6.1/src/libs/plugins/imexporters/csv/profiles/onvista-account.conf0000664000175000017500000000313414271246524024576 00000000000000 char name="onvista-account" char shortDescr="Profile of Onvista Status Reports" char longDescr="This profile supports the CSV format of Onvista Status Reports" int import="1" int export="1" char type="csv" char transactionType="transaction" char groupNames="transaction", "transfer", "debitnote", "line" char dateFormat="DD.MM.YYYY" int utc="0" # The following vars are used when there is an additional field within a # record which defines the sign of the amount. # Some banks use "C" (positive) and "D" (negative) or "Af" (negative) and # "Bij" (positive) int usePosNegField="0" # char posNegFieldName="type" # char positiveValues="kauf" # char negativeValues="verkauf" # int defaultIsPositive="1" params { # number of lines to ignore int ignoreLines="5" # if 1 then values are quoted quote="0" # if 1 then a title line will be written containing the names of each # column title="1" # special values are "TAB" and "SPACE" delimiter=";" # this is the group name looked for in the given data to GWEN_CSV_Write # if not given then all groups match # group="transaction" # this group contains the definition for each column # each variable in this group has its number as name # you can use index variables in the names (using square brackets) # the value of each of these variables is the name of a variable to be looked # up in the data given to GWEN_CSV_Write columns { 1="valutadate" 2="u_type" # not used 3="purpose[0]" 4 { delimiter="SPACE" 1="value/value" 2="value/currency" } } # columns } # params aqbanking-6.6.1/src/libs/plugins/imexporters/csv/profiles/cli-transfers.conf0000664000175000017500000000334014043610745024231 00000000000000 char name="cli-transfers" char shortDescr="default profile" char longDescr="This profile is used for transactions" int import="1" int export="1" char type="csv" char groupNames="transaction", "transfer", "debitnote", "line" char dateFormat="YYYY/MM/DD" int utc="0" # The following vars are used when there is an additional field within a # record which defines the sign of the amount. # Some banks use "C" (positive) and "D" (negative) or "Af" (negative) and # "Bij" (positive) int usePosNegField="0" char posNegFieldName="posNeg" #char positiveValues="Bij", "C" #char negativeValues="Af", "D" int defaultIsPositive="1" params { # if 1 then values are quoted quote="1" # if 1 then a title line will be written containing the names of each # column title="1" # special values are "TAB" and "SPACE" delimiter=";" # this is the group name looked for in the given data to GWEN_CSV_Write # if not given then all groups match #group="transaction" # this group contains the definition for each column # each variable in this group has its number as name # you can use index variables in the names (using square brackets) columns { 1="fiId" 2="localBankCode" 3="localAccountNumber" 4="remoteBankCode" 5="remoteAccountNumber" 6="date" 7="valutadate" 8="value/value" 9="value/currency" 10="localName" 11="remoteName[0]" 12="remoteName[1]" 13="status" 14="type" 15="purpose[0]" 16="purpose[1]" 17="purpose[2]" 18="purpose[3]" 19="purpose[4]" 20="purpose[5]" 21="purpose[6]" 22="purpose[7]" 23="purpose[8]" 24="purpose[9]" 25="purpose[10]" 26="purpose[11]" 27="category[0]" 28="groupId" } # columns } # params aqbanking-6.6.1/src/libs/plugins/imexporters/csv/profiles/amex.conf0000664000175000017500000000301414043610745022405 00000000000000 char name="amex" char shortDescr="American Express Card" char longDescr="This profile supports the CSV format" int import="1" int export="1" char type="csv" char groupNames="transaction", "transfer", "debitnote", "line" char dateFormat="YYYY/MM/DD" int utc="0" # The following vars are used when there is an additional field within a # record which defines the sign of the amount. # Some banks use "C" (positive) and "D" (negative) or "Af" (negative) and # "Bij" (positive) int usePosNegField="0" char posNegFieldName="posNeg" #char positiveValues="Bij", "C" #char negativeValues="Af", "D" int defaultIsPositive="0" params { # if 1 then values are quoted quote="1" # if 1 then a title line will be written containing the names of each # column title="1" # special values are "TAB" and "SPACE" delimiter=";" # this is the group name looked for in the given data to GWEN_CSV_Write # if not given then all groups match #group="transaction" # this group contains the definition for each column # each variable in this group has its number as name # you can use index variables in the names (using square brackets) # the value of each of these variables is the name of a variable to be looked # up in the data given to GWEN_CSV_Write columns { 1="localName" # CardholderName 2="valutadate" # ProcessingDate 3="purpose[0]" # Merchant Category 4="purpose[1]" # Subcategory 5="remoteName[0]" # MerchantNameLocation 6="value/value" # Amount } # columns } # params aqbanking-6.6.1/src/libs/plugins/imexporters/csv/profiles/Makefile.in0000644000175000017500000004677015037736026022674 00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/libs/plugins/imexporters/csv/profiles ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/distri.m4 $(top_srcdir)/m4/gwenhywfar.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/os.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(profilesdir)" DATA = $(profiles_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADD_ACLOCAL_FLAGS = @ADD_ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AQBANKING_CLI_VERSION_STRING = @AQBANKING_CLI_VERSION_STRING@ AQBANKING_FINTS_VERSION_STRING = @AQBANKING_FINTS_VERSION_STRING@ AQBANKING_SO_AGE = @AQBANKING_SO_AGE@ AQBANKING_SO_CURRENT = @AQBANKING_SO_CURRENT@ AQBANKING_SO_EFFECTIVE = @AQBANKING_SO_EFFECTIVE@ AQBANKING_SO_REVISION = @AQBANKING_SO_REVISION@ AQBANKING_VERSION_BUILD = @AQBANKING_VERSION_BUILD@ AQBANKING_VERSION_FULL_STRING = @AQBANKING_VERSION_FULL_STRING@ AQBANKING_VERSION_MAJOR = @AQBANKING_VERSION_MAJOR@ AQBANKING_VERSION_MINOR = @AQBANKING_VERSION_MINOR@ AQBANKING_VERSION_PATCHLEVEL = @AQBANKING_VERSION_PATCHLEVEL@ AQBANKING_VERSION_RELEASE_STRING = @AQBANKING_VERSION_RELEASE_STRING@ AQBANKING_VERSION_STRING = @AQBANKING_VERSION_STRING@ AQBANKING_VERSION_TAG = @AQBANKING_VERSION_TAG@ AQEBICS_CFLAGS = @AQEBICS_CFLAGS@ AQEBICS_LIBS = @AQEBICS_LIBS@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATETIME = @DATETIME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_EXCLUDE_PATTERNS = @DOXYGEN_EXCLUDE_PATTERNS@ DOXYGEN_FILE_PATTERNS = @DOXYGEN_FILE_PATTERNS@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENGUI_GTK2_CFLAGS = @GWENGUI_GTK2_CFLAGS@ GWENGUI_GTK2_LIBS = @GWENGUI_GTK2_LIBS@ GWENHYWFAR_MINIMUM_VERSION = @GWENHYWFAR_MINIMUM_VERSION@ HAVE_GWENGUI_GTK2 = @HAVE_GWENGUI_GTK2@ HAVE_I18N = @HAVE_I18N@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIBXSLT_CFLAGS = @LIBXSLT_CFLAGS@ LIBXSLT_LIBS = @LIBXSLT_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_SUPPORTS_QT = @MSGFMT_SUPPORTS_QT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ TUTORIALS = @TUTORIALS@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XMLMERGE = @XMLMERGE@ XMLSEC_CFLAGS = @XMLSEC_CFLAGS@ XMLSEC_LIBS = @XMLSEC_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ aqbanking_backends = @aqbanking_backends@ aqbanking_cfg_searchdir = @aqbanking_cfg_searchdir@ aqbanking_data_searchdir = @aqbanking_data_searchdir@ aqbanking_headerdir = @aqbanking_headerdir@ aqbanking_headerdir_am = @aqbanking_headerdir_am@ aqbanking_includes = @aqbanking_includes@ aqbanking_internal_libs = @aqbanking_internal_libs@ aqbanking_ldflags = @aqbanking_ldflags@ aqbanking_libs = @aqbanking_libs@ aqbanking_locale_searchdir = @aqbanking_locale_searchdir@ aqbanking_modules = @aqbanking_modules@ aqbanking_pkgdatadir = @aqbanking_pkgdatadir@ aqbanking_plugin_searchdir = @aqbanking_plugin_searchdir@ aqbanking_plugindir = @aqbanking_plugindir@ aqbanking_plugins_backends_dirs = @aqbanking_plugins_backends_dirs@ aqbanking_plugins_backends_libs = @aqbanking_plugins_backends_libs@ aqbanking_plugins_bankinfo_dirs = @aqbanking_plugins_bankinfo_dirs@ aqbanking_plugins_bankinfo_libs = @aqbanking_plugins_bankinfo_libs@ aqbanking_plugins_imexporters_dirs = @aqbanking_plugins_imexporters_dirs@ aqbanking_plugins_imexporters_libs = @aqbanking_plugins_imexporters_libs@ aqbanking_plugins_parsers_dirs = @aqbanking_plugins_parsers_dirs@ aqbanking_symlinkdir = @aqbanking_symlinkdir@ aqbanking_sys_is_windows = @aqbanking_sys_is_windows@ aqbankingpp_modules = @aqbankingpp_modules@ aqebics_datadir = @aqebics_datadir@ aqebics_includes = @aqebics_includes@ aqebics_internal_libs = @aqebics_internal_libs@ aqebics_ldflags = @aqebics_ldflags@ aqebics_libs = @aqebics_libs@ aqfints_datadir = @aqfints_datadir@ aqhbci_datadir = @aqhbci_datadir@ aqhbci_includes = @aqhbci_includes@ aqhbci_internal_libs = @aqhbci_internal_libs@ aqhbci_ldflags = @aqhbci_ldflags@ aqhbci_libs = @aqhbci_libs@ aqofxconnect_includes = @aqofxconnect_includes@ aqofxconnect_internal_libs = @aqofxconnect_internal_libs@ aqofxconnect_libs = @aqofxconnect_libs@ aqpaypal_includes = @aqpaypal_includes@ aqpaypal_internal_libs = @aqpaypal_internal_libs@ aqpaypal_libs = @aqpaypal_libs@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gmp_libs = @gmp_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_dir = @gwenhywfar_dir@ gwenhywfar_has_crypt = @gwenhywfar_has_crypt@ gwenhywfar_headers = @gwenhywfar_headers@ gwenhywfar_includes = @gwenhywfar_includes@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_plugins = @gwenhywfar_plugins@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ typemaker2_exe = @typemaker2_exe@ visibility_cflags = @visibility_cflags@ with_aqebics = @with_aqebics@ with_aqhbci = @with_aqhbci@ profilesdir = $(aqbanking_pkgdatadir)/imexporters/csv/profiles profiles_DATA = default.conf aqmoney1.conf aqmoney2.conf \ comdirect.conf mijnpostbank.conf \ spk-aachen.conf tonline-banking.conf amex.conf oko.conf spk-steiermark.conf \ spk-mainz.conf vrnetworld.conf lbbberlin.conf bankaustria.conf psk.conf \ diba.conf sparda.conf full.conf dkb.conf dkb-cash.conf \ hypovereinsbank.conf postbankffm.conf cli-transfers.conf \ sns.conf consors-tagesgeld.conf \ transfers.conf sepadebitnotes.conf \ homebank.conf \ onvista-trans.conf \ onvista-prices.conf \ onvista-account.conf \ comdirect-prices.conf EXTRA_DIST = $(profiles_DATA) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libs/plugins/imexporters/csv/profiles/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libs/plugins/imexporters/csv/profiles/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-profilesDATA: $(profiles_DATA) @$(NORMAL_INSTALL) @list='$(profiles_DATA)'; test -n "$(profilesdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(profilesdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(profilesdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(profilesdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(profilesdir)" || exit $$?; \ done uninstall-profilesDATA: @$(NORMAL_UNINSTALL) @list='$(profiles_DATA)'; test -n "$(profilesdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(profilesdir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(profilesdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-profilesDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-profilesDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-profilesDATA install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags-am uninstall uninstall-am uninstall-profilesDATA .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: aqbanking-6.6.1/src/libs/plugins/imexporters/csv/profiles/hypovereinsbank.conf0000664000175000017500000000103714043610745024665 00000000000000char name="HypoVereinsbank" char shortDescr="Files from HypoVereinsbank banking online portal" char longDescr="" int import="1" int export="1" char type="csv" char groupNames="transaction", "transfer", "debitnote", "line" char dateFormat="DD.MM.YYYY" int utc="0" int usePosNegField="0" int defaultIsPositive="1" params { quote="0" title="1" delimiter=";" columns { 1="localAccountNumber" 2="date" 3="valutadate" 4=remoteName[0] 5=remoteName[1] 6="purpose[0]" 7="value/value" 8="value/currency" } # columns } # params aqbanking-6.6.1/src/libs/plugins/imexporters/csv/csv_p.h0000664000175000017500000000132614156464025020253 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AQHBCI_IMEX_CSV_P_H #define AQHBCI_IMEX_CSV_P_H #include "csv.h" #include #include typedef struct AH_IMEXPORTER_CSV AH_IMEXPORTER_CSV; struct AH_IMEXPORTER_CSV { GWEN_DBIO *dbio; }; #endif /* AQHBCI_IMEX_CSV_P_H */ aqbanking-6.6.1/src/libs/plugins/imexporters/csv/Makefile.am0000664000175000017500000000200114043610745021010 00000000000000SUBDIRS=profiles AM_CPPFLAGS = -I$(top_srcdir)/src/libs \ -I$(top_builddir)/src/libs \ $(gwenhywfar_includes) AM_CFLAGS=-DBUILDING_AQBANKING @visibility_cflags@ imexporterplugindir = $(aqbanking_plugindir)/imexporters noinst_LTLIBRARIES=libabimexporters_csv.la imexporterplugin_DATA=csv.xml dialogdatadir = $(aqbanking_pkgdatadir)/imexporters/csv/dialogs dialogdata_DATA=csv_editprofile.dlg libabimexporters_csv_la_SOURCES=\ csv.c \ csv_editprofile.c noinst_HEADERS=\ csv_p.h \ csv.h \ csv_editprofile_l.h \ csv_editprofile_p.h EXTRA_DIST=README $(dialogdata_DATA) typefiles: typedefs: sources: for f in $(libabimexporters_csv_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for f in $(dialogdata_DATA); do \ echo $(subdir)/$$f >>$(top_srcdir)/dlgsources; \ done for f in $(imexporterplugin_DATA); do \ echo $(subdir)/$$f >>$(top_srcdir)/pdsources; \ done cppcheck: for f in $(libabimexporters_csv_la_SOURCES); do \ cppcheck --force $$f ; \ done aqbanking-6.6.1/src/libs/plugins/imexporters/csv/csv.c0000664000175000017500000006236414546575650017752 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "csv_p.h" #include "csv_editprofile_l.h" #include "aqbanking/i18n_l.h" #include "aqbanking/backendsupport/imexporter_be.h" #include #include #include GWEN_INHERIT(AB_IMEXPORTER, AH_IMEXPORTER_CSV); static int _importCsv(AB_IMEXPORTER *ie, AB_IMEXPORTER_CONTEXT *ctx, GWEN_SYNCIO *sio, GWEN_DB_NODE *params); static int _exportCsv(AB_IMEXPORTER *ie, AB_IMEXPORTER_CONTEXT *ctx, GWEN_SYNCIO *sio, GWEN_DB_NODE *params); static int _checkCsv(AB_IMEXPORTER *ie, const char *fname); static int _getEditProfileDialog(AB_IMEXPORTER *ie, GWEN_DB_NODE *params, const char *testFileName, GWEN_DIALOG **pDlg); static AB_VALUE *_valueFromDb(GWEN_DB_NODE *dbV, int commaThousands, int commaDecimal); static void _unsplitInOutValue(GWEN_DB_NODE *dbT, int commaThousands, int commaDecimal); static void _collectPurposeStrings(AB_TRANSACTION *t, GWEN_DB_NODE *dbT); static void _readValues(AB_TRANSACTION *t, GWEN_DB_NODE *dbT, int commaThousands, int commaDecimal); static void _readDates(AB_TRANSACTION *t, GWEN_DB_NODE *dbT, const char *dateFormat); static void _translateValuesSign(AB_TRANSACTION *t, GWEN_DB_NODE *dbT, GWEN_DB_NODE *dbParams); static int _mustNegate(GWEN_DB_NODE *dbT, GWEN_DB_NODE *dbParams); static void _switchLocalRemoteAccordingToSign(AB_TRANSACTION *t, int switchOnNegative); static int _groupNameMatches(const char *groupName, GWEN_DB_NODE *dbParams); static void GWENHYWFAR_CB _freeData(void *bp, void *p); static int _importFromGroup(AB_IMEXPORTER_CONTEXT *ctx, GWEN_DB_NODE *db, GWEN_DB_NODE *dbParams); AB_IMEXPORTER *AB_ImExporterCSV_new(AB_BANKING *ab) { AB_IMEXPORTER *ie; AH_IMEXPORTER_CSV *ieh; ie=AB_ImExporter_new(ab, "csv"); GWEN_NEW_OBJECT(AH_IMEXPORTER_CSV, ieh); GWEN_INHERIT_SETDATA(AB_IMEXPORTER, AH_IMEXPORTER_CSV, ie, ieh, _freeData); ieh->dbio=GWEN_DBIO_GetPlugin("csv"); if (!ieh->dbio) { DBG_ERROR(AQBANKING_LOGDOMAIN, "GWEN DBIO plugin \"CSV\" not available"); AB_ImExporter_free(ie); return NULL; } AB_ImExporter_SetImportFn(ie, _importCsv); AB_ImExporter_SetExportFn(ie, _exportCsv); AB_ImExporter_SetCheckFileFn(ie, _checkCsv); AB_ImExporter_SetGetEditProfileDialogFn(ie, _getEditProfileDialog); /* announce special features */ AB_ImExporter_AddFlags(ie, AB_IMEXPORTER_FLAGS_GETPROFILEEDITOR_SUPPORTED); return ie; } void GWENHYWFAR_CB _freeData(void *bp, void *p) { AH_IMEXPORTER_CSV *ieh; ieh=(AH_IMEXPORTER_CSV *)p; GWEN_DBIO_free(ieh->dbio); GWEN_FREE_OBJECT(ieh); } int _importCsv(AB_IMEXPORTER *ie, AB_IMEXPORTER_CONTEXT *ctx, GWEN_SYNCIO *sio, GWEN_DB_NODE *params) { AH_IMEXPORTER_CSV *ieh; GWEN_DB_NODE *dbData; GWEN_DB_NODE *dbSubParams; int rv; assert(ie); ieh=GWEN_INHERIT_GETDATA(AB_IMEXPORTER, AH_IMEXPORTER_CSV, ie); assert(ieh); assert(ieh->dbio); dbSubParams=GWEN_DB_GetGroup(params, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "params"); dbData=GWEN_DB_Group_new("transactions"); rv=GWEN_DBIO_Import(ieh->dbio, sio, dbData, dbSubParams, GWEN_DB_FLAGS_DEFAULT | GWEN_PATH_FLAGS_CREATE_GROUP); if (rv) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Error importing data (%d)", rv); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, "Error importing data"); GWEN_DB_Group_free(dbData); return GWEN_ERROR_GENERIC; } /* transform DB to transactions */ GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Notice, I18N("Data imported, transforming to UTF-8")); rv=AB_ImExporter_DbFromIso8859_1ToUtf8(dbData); if (rv) { GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, "Error converting data"); GWEN_DB_Group_free(dbData); return rv; } GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Notice, "Transforming data to transactions"); rv=_importFromGroup(ctx, dbData, params); if (rv) { GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, "Error importing data"); GWEN_DB_Group_free(dbData); return rv; } GWEN_DB_Group_free(dbData); return 0; } int _importFromGroup(AB_IMEXPORTER_CONTEXT *ctx, GWEN_DB_NODE *db, GWEN_DB_NODE *dbParams) { GWEN_DB_NODE *dbT; AB_TRANSACTION_TYPE defaultType=AB_Transaction_TypeStatement; const char *dateFormat; int usePosNegField; int splitValueInOut; int switchLocalRemote; int switchOnNegative; int commaThousands=0; int commaDecimal=0; const char *s; dateFormat=GWEN_DB_GetCharValue(dbParams, "dateFormat", 0, "YYYY/MM/DD"); usePosNegField=GWEN_DB_GetIntValue(dbParams, "usePosNegField", 0, 0); splitValueInOut=GWEN_DB_GetIntValue(dbParams, "splitValueInOut", 0, 0); switchLocalRemote=GWEN_DB_GetIntValue(dbParams, "switchLocalRemote", 0, 0); switchOnNegative=GWEN_DB_GetIntValue(dbParams, "switchOnNegative", 0, 1); s=GWEN_DB_GetCharValue(dbParams, "commaThousands", 0, 0); if (s) commaThousands=*s; s=GWEN_DB_GetCharValue(dbParams, "commaDecimal", 0, 0); if (s) commaDecimal=*s; s=GWEN_DB_GetCharValue(dbParams, "transactionType", 0, "statement"); if (s && *s) { defaultType=AB_Transaction_Type_fromString(s); if (defaultType==AB_Transaction_TypeUnknown) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Invalid default transaction type \"%s\", assuming \"statement\"", s); defaultType=AB_Transaction_TypeStatement; } } dbT=GWEN_DB_GetFirstGroup(db); while (dbT) { if (_groupNameMatches(GWEN_DB_GroupName(dbT), dbParams)) { /* possibly merge in/out values */ if (splitValueInOut) _unsplitInOutValue(dbT, commaThousands, commaDecimal); if (GWEN_DB_GetCharValue(dbT, "value/value", 0, NULL) || GWEN_DB_GetCharValue(dbT, "units", 0, NULL)) { AB_TRANSACTION *t; t=AB_Transaction_fromDb(dbT); if (!t) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Error in imported transaction data"); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, "Error in imported transaction data"); return GWEN_ERROR_GENERIC; } _collectPurposeStrings(t, dbT); _readValues(t, dbT, commaThousands, commaDecimal); _readDates(t, dbT, dateFormat); if (usePosNegField) _translateValuesSign(t, dbT, dbParams); if (switchLocalRemote) _switchLocalRemoteAccordingToSign(t, switchOnNegative); if (AB_Transaction_GetType(t)<=AB_Transaction_TypeNone) AB_Transaction_SetType(t, defaultType); DBG_DEBUG(AQBANKING_LOGDOMAIN, "Adding transaction"); AB_ImExporterContext_AddTransaction(ctx, t); } else { DBG_INFO(AQBANKING_LOGDOMAIN, "Empty group (i.e. empty line in imported file)"); } } else { int rv; DBG_INFO(AQBANKING_LOGDOMAIN, "Not a transaction, checking subgroups"); /* not a transaction, check subgroups */ rv=_importFromGroup(ctx, dbT, dbParams); if (rv) { DBG_INFO(AQBANKING_LOGDOMAIN, "here"); return rv; } } dbT=GWEN_DB_GetNextGroup(dbT); } // while return 0; } void _unsplitInOutValue(GWEN_DB_NODE *dbT, int commaThousands, int commaDecimal) { AB_VALUE *tv=NULL; const char *s; const char *tc; tc=GWEN_DB_GetCharValue(dbT, "value/currency", 0, NULL); s=GWEN_DB_GetCharValue(dbT, "valueIn/value", 0, 0); if (s && *s) { GWEN_DB_NODE *dbV; dbV=GWEN_DB_GetGroup(dbT, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "valueIn"); tv=_valueFromDb(dbV, commaThousands, commaDecimal); } else { s=GWEN_DB_GetCharValue(dbT, "valueOut/value", 0, 0); if (s && *s) { GWEN_DB_NODE *dbV; dbV=GWEN_DB_GetGroup(dbT, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "valueOut"); if (dbV) { tv=_valueFromDb(dbV, commaThousands, commaDecimal); if (!AB_Value_IsNegative(tv)) /* outgoing but positive, negate */ AB_Value_Negate(tv); } } } if (tv) { GWEN_DB_NODE *dbTV; if (tc) AB_Value_SetCurrency(tv, tc); dbTV=GWEN_DB_GetGroup(dbT, GWEN_DB_FLAGS_OVERWRITE_GROUPS, "value"); AB_Value_toDb(tv, dbTV); AB_Value_free(tv); } } void _collectPurposeStrings(AB_TRANSACTION *t, GWEN_DB_NODE *dbT) { const char *p; /* possibly translate purpose */ p=GWEN_DB_GetCharValue(dbT, "purpose", 1, 0); /* "1" is correct here! */ if (p) { int i; /* there are multiple purpose lines, read them properly */ AB_Transaction_SetPurpose(t, NULL); for (i=0; i<99; i++) { p=GWEN_DB_GetCharValue(dbT, "purpose", i, NULL); if (p && *p) AB_Transaction_AddPurposeLine(t, p); } } } void _readValues(AB_TRANSACTION *t, GWEN_DB_NODE *dbT, int commaThousands, int commaDecimal) { GWEN_DB_NODE *dbV; AB_VALUE *v=NULL; /* translate values */ dbV=GWEN_DB_GetGroup(dbT, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "value"); if (dbV) { v=_valueFromDb(dbV, commaThousands, commaDecimal); AB_Transaction_SetValue(t, v); AB_Value_free(v); } dbV=GWEN_DB_GetGroup(dbT, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "unitPriceValue"); if (dbV) { v=_valueFromDb(dbV, commaThousands, commaDecimal); AB_Transaction_SetUnitPriceValue(t, v); AB_Value_free(v); } dbV=GWEN_DB_GetGroup(dbT, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "fees"); if (dbV) { v=_valueFromDb(dbV, commaThousands, commaDecimal); AB_Transaction_SetFees(t, v); AB_Value_free(v); } dbV=GWEN_DB_GetGroup(dbT, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "taxes"); if (dbV) { v=_valueFromDb(dbV, commaThousands, commaDecimal); AB_Transaction_SetTaxes(t, v); AB_Value_free(v); } dbV=GWEN_DB_GetGroup(dbT, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "commissionValue"); if (dbV) { v=_valueFromDb(dbV, commaThousands, commaDecimal); AB_Transaction_SetCommissionValue(t, v); AB_Value_free(v); } } void _readDates(AB_TRANSACTION *t, GWEN_DB_NODE *dbT, const char *dateFormat) { const char *p; p=GWEN_DB_GetCharValue(dbT, "date", 0, 0); if (p) { GWEN_DATE *da; da=GWEN_Date_fromStringWithTemplate(p, dateFormat); if (da) AB_Transaction_SetDate(t, da); GWEN_Date_free(da); } p=GWEN_DB_GetCharValue(dbT, "valutaDate", 0, 0); if (p) { GWEN_DATE *da; da=GWEN_Date_fromStringWithTemplate(p, dateFormat); if (da) AB_Transaction_SetValutaDate(t, da); GWEN_Date_free(da); } p=GWEN_DB_GetCharValue(dbT, "mandateDate", 0, 0); if (p) { GWEN_DATE *dt; dt=GWEN_Date_fromStringWithTemplate(p, dateFormat); if (dt) { AB_Transaction_SetMandateDate(t, dt); GWEN_Date_free(dt); } } p=GWEN_DB_GetCharValue(dbT, "firstDate", 0, 0); if (p) { GWEN_DATE *da; da=GWEN_Date_fromStringWithTemplate(p, dateFormat); if (da) AB_Transaction_SetFirstDate(t, da); GWEN_Date_free(da); } p=GWEN_DB_GetCharValue(dbT, "lastDate", 0, 0); if (p) { GWEN_DATE *da; da=GWEN_Date_fromStringWithTemplate(p, dateFormat); if (da) AB_Transaction_SetLastDate(t, da); GWEN_Date_free(da); } p=GWEN_DB_GetCharValue(dbT, "nextDate", 0, 0); if (p) { GWEN_DATE *da; da=GWEN_Date_fromStringWithTemplate(p, dateFormat); if (da) AB_Transaction_SetNextDate(t, da); GWEN_Date_free(da); } p=GWEN_DB_GetCharValue(dbT, "unitPriceDate", 0, NULL); if (p) { GWEN_DATE *da; da=GWEN_Date_fromStringWithTemplate(p, dateFormat); if (da) AB_Transaction_SetUnitPriceDate(t, da); GWEN_Date_free(da); } } AB_VALUE *_valueFromDb(GWEN_DB_NODE *dbV, int commaThousands, int commaDecimal) { const char *sv; const char *sc; char *cbuf=NULL; AB_VALUE *val; sv=GWEN_DB_GetCharValue(dbV, "value", 0, 0); sc=GWEN_DB_GetCharValue(dbV, "currency", 0, "EUR"); if (commaThousands || commaDecimal) { const char *pSrc; char *pDst; cbuf=(char *) malloc(strlen(sv)+1); pSrc=sv; pDst=cbuf; /* copy all but thousands commas to new buffer */ while (*pSrc) { if (commaThousands && *pSrc==commaThousands) { /* skip thousands comma */ } else if (commaDecimal && *pSrc==commaDecimal) /* replace whatever is given by a recognizable decimal point */ *(pDst++)='.'; else *(pDst++)=*pSrc; pSrc++; } /* add trailing 0 to end the string */ *pDst=0; sv=(const char *) cbuf; } val=AB_Value_fromString(sv); if (cbuf) free(cbuf); if (val && sc) AB_Value_SetCurrency(val, sc); return val; } void _translateValuesSign(AB_TRANSACTION *t, GWEN_DB_NODE *dbT, GWEN_DB_NODE *dbParams) { if (_mustNegate(dbT, dbParams)) { const AB_VALUE *pv; pv=AB_Transaction_GetValue(t); if (pv) { AB_VALUE *v; v=AB_Value_dup(pv); AB_Value_Negate(v); AB_Transaction_SetValue(t, v); AB_Value_free(v); } pv=AB_Transaction_GetUnits(t); if (pv) { AB_VALUE *v; v=AB_Value_dup(pv); AB_Value_Negate(v); AB_Transaction_SetUnits(t, v); AB_Value_free(v); } } } int _mustNegate(GWEN_DB_NODE *dbT, GWEN_DB_NODE *dbParams) { const char *posNegFieldName; int defaultIsPositive; const char *s; defaultIsPositive=GWEN_DB_GetIntValue(dbParams, "defaultIsPositive", 0, 1); posNegFieldName=GWEN_DB_GetCharValue(dbParams, "posNegFieldName", 0, "posNeg"); /* get positive/negative mark */ s=GWEN_DB_GetCharValue(dbT, posNegFieldName, 0, 0); if (s) { int j; /* try positive marks first */ for (j=0; ; j++) { const char *patt; patt=GWEN_DB_GetCharValue(dbParams, "positiveValues", j, 0); if (!patt) break; if (-1!=GWEN_Text_ComparePattern(s, patt, 0)) { /* value already is positive, keep it that way */ return 0; } } /* for */ for (j=0; ; j++) { const char *patt; patt=GWEN_DB_GetCharValue(dbParams, "negativeValues", j, 0); if (!patt) break; if (-1!=GWEN_Text_ComparePattern(s, patt, 0)) return 1; } /* for */ } /* still undecided? */ if (!defaultIsPositive) return 1; return 0; } void _switchLocalRemoteAccordingToSign(AB_TRANSACTION *t, int switchOnNegative) { const AB_VALUE *pv; /* value must be negated, because default is negative */ pv=AB_Transaction_GetValue(t); if (pv) { if (!(AB_Value_IsNegative(pv) ^ (switchOnNegative!=0))) { const char *s; GWEN_BUFFER *b1; GWEN_BUFFER *b2; /* need to switch local/remote name */ b1=GWEN_Buffer_new(0, 64, 0, 1); b2=GWEN_Buffer_new(0, 64, 0, 1); /* get data */ s=AB_Transaction_GetLocalName(t); if (s && *s) GWEN_Buffer_AppendString(b1, s); s=AB_Transaction_GetRemoteName(t); if (s && *s) GWEN_Buffer_AppendString(b2, s); /* set reverse */ if (GWEN_Buffer_GetUsedBytes(b1)) AB_Transaction_SetRemoteName(t, GWEN_Buffer_GetStart(b1)); if (GWEN_Buffer_GetUsedBytes(b2)) AB_Transaction_SetLocalName(t, GWEN_Buffer_GetStart(b2)); /* cleanup */ GWEN_Buffer_free(b2); GWEN_Buffer_free(b1); } } } int _groupNameMatches(const char *groupName, GWEN_DB_NODE *dbParams) { int i; const char *p; for (i=0; ; i++) { p=GWEN_DB_GetCharValue(dbParams, "groupNames", i, NULL); if (!p) break; if (strcasecmp(groupName, p)==0) return 1; } /* for */ if (i==0) { /* no names given, check default */ if ((strcasecmp(groupName, "transaction")==0) || (strcasecmp(groupName, "debitnote")==0) || (strcasecmp(groupName, "line")==0)) return 1; } return 0; } int _checkCsv(AB_IMEXPORTER *ie, const char *fname) { AH_IMEXPORTER_CSV *ieh; GWEN_DBIO_CHECKFILE_RESULT rv; assert(ie); ieh=GWEN_INHERIT_GETDATA(AB_IMEXPORTER, AH_IMEXPORTER_CSV, ie); assert(ieh); assert(ieh->dbio); rv=GWEN_DBIO_CheckFile(ieh->dbio, fname); switch (rv) { case GWEN_DBIO_CheckFileResultOk: return 0; case GWEN_DBIO_CheckFileResultNotOk: return GWEN_ERROR_BAD_DATA; case GWEN_DBIO_CheckFileResultUnknown: return AB_ERROR_INDIFFERENT; default: return GWEN_ERROR_GENERIC; } /* switch */ } int _exportCsv(AB_IMEXPORTER *ie, AB_IMEXPORTER_CONTEXT *ctx, GWEN_SYNCIO *sio, GWEN_DB_NODE *params) { AH_IMEXPORTER_CSV *ieh; AB_IMEXPORTER_ACCOUNTINFO *ai; GWEN_DB_NODE *dbData; GWEN_DB_NODE *dbSubParams; int rv; const char *dateFormat; int usePosNegField; //int defaultIsPositive; int splitValueInOut; const char *posNegFieldName; const char *valueFormat; assert(ie); ieh=GWEN_INHERIT_GETDATA(AB_IMEXPORTER, AH_IMEXPORTER_CSV, ie); assert(ieh); assert(ieh->dbio); dbSubParams=GWEN_DB_GetGroup(params, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "params"); dateFormat=GWEN_DB_GetCharValue(params, "dateFormat", 0, "YYYY/MM/DD"); usePosNegField=GWEN_DB_GetIntValue(params, "usePosNegField", 0, 0); //defaultIsPositive=GWEN_DB_GetIntValue(params, "defaultIsPositive", 0, 1); posNegFieldName=GWEN_DB_GetCharValue(params, "posNegFieldName", 0, "posNeg"); splitValueInOut=GWEN_DB_GetIntValue(params, "splitValueInOut", 0, 0); valueFormat=GWEN_DB_GetCharValue(params, "valueFormat", 0, "float"); /* create db, store transactions in it */ dbData=GWEN_DB_Group_new("transactions"); ai=AB_ImExporterContext_GetFirstAccountInfo(ctx); while (ai) { const AB_TRANSACTION_LIST *tl; tl=AB_ImExporterAccountInfo_GetTransactionList(ai); if (tl) { const AB_TRANSACTION *t; t=AB_Transaction_List_First(tl); while (t) { GWEN_DB_NODE *dbTransaction; const GWEN_DATE *dt; const char *s; dbTransaction=GWEN_DB_Group_new("transaction"); rv=AB_Transaction_toDb(t, dbTransaction); if (rv) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Could not transform transaction to db"); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, "Error transforming data to db"); GWEN_DB_Group_free(dbData); GWEN_DB_Group_free(dbTransaction); return GWEN_ERROR_GENERIC; } /* translate purpose */ s=AB_Transaction_GetPurpose(t); if (s && *s) { GWEN_STRINGLIST *sl; sl=GWEN_StringList_fromString(s, "\n", 0); if (sl) { GWEN_STRINGLISTENTRY *se; GWEN_DB_DeleteVar(dbTransaction, "purpose"); se=GWEN_StringList_FirstEntry(sl); while (se) { const char *p; p=GWEN_StringListEntry_Data(se); if (p && *p) GWEN_DB_SetCharValue(dbTransaction, GWEN_DB_FLAGS_DEFAULT, "purpose", p); se=GWEN_StringListEntry_Next(se); } GWEN_StringList_free(sl); } } /* transform dates */ GWEN_DB_DeleteGroup(dbTransaction, "date"); GWEN_DB_DeleteGroup(dbTransaction, "valutaDate"); GWEN_DB_DeleteGroup(dbTransaction, "mandateDate"); dt=AB_Transaction_GetDate(t); if (dt) { GWEN_BUFFER *tbuf; int rv; tbuf=GWEN_Buffer_new(0, 32, 0, 1); rv=GWEN_Date_toStringWithTemplate(dt, dateFormat, tbuf); if (rv<0) { DBG_WARN(AQBANKING_LOGDOMAIN, "Bad date format string/date"); } else GWEN_DB_SetCharValue(dbTransaction, GWEN_DB_FLAGS_OVERWRITE_VARS, "date", GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } dt=AB_Transaction_GetValutaDate(t); if (dt) { GWEN_BUFFER *tbuf; int rv; tbuf=GWEN_Buffer_new(0, 32, 0, 1); rv=GWEN_Date_toStringWithTemplate(dt, dateFormat, tbuf); if (rv<0) { DBG_WARN(AQBANKING_LOGDOMAIN, "Bad date format string/date"); } else GWEN_DB_SetCharValue(dbTransaction, GWEN_DB_FLAGS_OVERWRITE_VARS, "valutaDate", GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } dt=AB_Transaction_GetMandateDate(t); if (dt) { GWEN_BUFFER *tbuf; int rv; tbuf=GWEN_Buffer_new(0, 32, 0, 1); rv=GWEN_Date_toStringWithTemplate(dt, dateFormat, tbuf); if (rv<0) { DBG_WARN(AQBANKING_LOGDOMAIN, "Bad date format string/date"); } else GWEN_DB_SetCharValue(dbTransaction, GWEN_DB_FLAGS_OVERWRITE_VARS, "mandateDate", GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } /* possibly transform value */ if (usePosNegField) { const AB_VALUE *v; const char *s; v=AB_Transaction_GetValue(t); if (v) { if (!AB_Value_IsNegative(v)) { s=GWEN_DB_GetCharValue(params, "positiveValues", 0, 0); if (s) { GWEN_DB_SetCharValue(dbTransaction, GWEN_DB_FLAGS_OVERWRITE_VARS, posNegFieldName, s); } else { DBG_ERROR(AQBANKING_LOGDOMAIN, "No value for \"positiveValues\" in params"); GWEN_DB_Group_free(dbData); return GWEN_ERROR_GENERIC; } } else { s=GWEN_DB_GetCharValue(params, "negativeValues", 0, 0); if (s) { AB_VALUE *nv; GWEN_DB_NODE *dbV; GWEN_DB_SetCharValue(dbTransaction, GWEN_DB_FLAGS_OVERWRITE_VARS, posNegFieldName, s); nv=AB_Value_dup(v); AB_Value_Negate(nv); dbV=GWEN_DB_GetGroup(dbTransaction, GWEN_DB_FLAGS_OVERWRITE_GROUPS, "value"); assert(dbV); if (AB_Value_toDb(nv, dbV)) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Could not store value to DB"); GWEN_DB_Group_free(dbData); return GWEN_ERROR_GENERIC; } } else { DBG_ERROR(AQBANKING_LOGDOMAIN, "No value for \"negativeValues\" in params"); GWEN_DB_Group_free(dbData); return GWEN_ERROR_GENERIC; } } } } else if (splitValueInOut) { const AB_VALUE *v; v=AB_Transaction_GetValue(t); if (v) { const char *gn; GWEN_DB_NODE *dbV; if (AB_Value_IsNegative(v)) gn="valueOut"; else gn="valueIn"; dbV=GWEN_DB_GetGroup(dbTransaction, GWEN_DB_FLAGS_OVERWRITE_GROUPS, gn); assert(dbV); if (strcasecmp(valueFormat, "float")==0) AB_Value_toDbFloat(v, dbV); else AB_Value_toDb(v, dbV); GWEN_DB_ClearGroup(dbTransaction, "value"); } } else { const AB_VALUE *v; v=AB_Transaction_GetValue(t); if (v) { GWEN_DB_NODE *dbV; GWEN_DB_DeleteVar(dbTransaction, "value"); dbV=GWEN_DB_GetGroup(dbTransaction, GWEN_DB_FLAGS_OVERWRITE_GROUPS, "value"); assert(dbV); if (strcasecmp(valueFormat, "float")==0) AB_Value_toDbFloat(v, dbV); else AB_Value_toDb(v, dbV); } } /* add transaction db */ GWEN_DB_AddGroup(dbData, dbTransaction); t=AB_Transaction_List_Next(t); } /* while t */ } /* if tl */ ai=AB_ImExporterAccountInfo_List_Next(ai); } /* while ai */ rv=GWEN_DBIO_Export(ieh->dbio, sio, dbData, dbSubParams, GWEN_DB_FLAGS_DEFAULT); if (rv) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Error exporting data (%d)", rv); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, "Error exporting data"); GWEN_DB_Group_free(dbData); return GWEN_ERROR_GENERIC; } GWEN_DB_Group_free(dbData); return 0; } int _getEditProfileDialog(AB_IMEXPORTER *ie, GWEN_DB_NODE *dbProfile, const char *testFileName, GWEN_DIALOG **pDlg) { GWEN_DIALOG *dlg; dlg=AB_CSV_EditProfileDialog_new(ie, dbProfile, testFileName); if (dlg==NULL) { DBG_INFO(AQBANKING_LOGDOMAIN, "Unable to create the dialog"); return GWEN_ERROR_INTERNAL; } *pDlg=dlg; return 0; } aqbanking-6.6.1/src/libs/plugins/imexporters/csv/csv.xml.in0000664000175000017500000000044514043610745020710 00000000000000 @AQBANKING_VERSION_STRING@ Martin Preuss(martin@libchipcard.de) Im-/exporter for CSV This plugin imports/exports CSV data. aqbanking-6.6.1/src/libs/plugins/imexporters/csv/csv_editprofile.c0000664000175000017500000006617714377702650022340 00000000000000/*************************************************************************** begin : Sat Jan 13 2010 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "csv_editprofile_p.h" #include "aqbanking/i18n_l.h" #include #include #include #include #include #include #include #include #include #include #define DIALOG_MINWIDTH 400 #define DIALOG_MINHEIGHT 400 #define DIALOG_MAX_COLUMNS 30 #define DIALOG_MAX_TESTLINES 100 GWEN_INHERIT(GWEN_DIALOG, AB_CSV_EDIT_PROFILE_DIALOG) static const char *csv_dateFormats[]= { "DD.MM.YYYY", "dD.mM.YYYY", "MM/DD/YYYY", "mM/dD/YYYY", "DD/MM/YYYY", "dD/mM/YYYY", "YYYY/MM/DD", "YYYY/mM/dD", NULL }; static const char *csv_delimiters[]= { "TAB", I18S("Tabulator (default)"), "SPACE", I18S("Space"), ",", I18S("Komma (,)"), ";", I18S("Semicolon (;)"), ":", I18S("Colon (:)"), NULL }; static const char *csv_subjects[]= { "transactions", I18S("Booked Transactions (default)"), "notedTransactions", I18S("Noted Transactions"), NULL }; static const char *csv_amountFormats[]= { "rational", I18S("Rational (default)"), "float", I18S("Float"), NULL }; static const char *csv_columns[]= { "", I18S("-- empty --"), "localCountry", I18S("Local Country Code"), "localBankCode", I18S("Local Bank Code"), "localBranchId", I18S("Local Branch Id"), "localAccountNumber", I18S("Local Account Number"), "localSuffix", I18S("Local Account Suffix"), "localIban", I18S("Local IBAN"), "localName", I18S("Local Name (e.g. your name)"), "localBIC", I18S("Local BIC"), "remoteCountry", I18S("Remote Country Code"), "remoteBankCode", I18S("Remote Bank Code"), "remoteBranchId", I18S("Remote Branch Id"), "remoteAccountNumber", I18S("Remote Account Number"), "remoteSuffix", I18S("Remote Account Suffix"), "remoteIban", I18S("Remote IBAN"), "remoteName[0]", I18S("Remote Name (First Line)"), "remoteName[1]", I18S("Remote Name (Second Line)"), "remoteBIC", I18S("Remote BIC"), "uniqueId", I18S("Unique Transaction Id"), "idForApplication", I18S("Id assigned by Application"), // "groupId", I18S("Group Id"), "valutaDate", I18S("Valuta Date"), "date", I18S("Booking Date"), "value/value", I18S("Amount (Value)"), "value/currency", I18S("Amount (Currency)"), "fees/value", I18S("Fees (Amount)"), "fees/currency", I18S("Fees (Currency)"), "textKey", I18S("Textkey"), "textKeyExt", I18S("Textkey Extensions"), "transactionKey", I18S("Transaction Key"), "customerReference", I18S("Customer Reference"), "bankReference", I18S("Bank Reference"), "transactionCode", I18S("Transaction Code"), "transactionText", I18S("Transaction Text (not purpose!)"), "primanota", I18S("Primanota"), "fiId", I18S("Id assigned by Finance Institute"), "purpose[0]", I18S("Purpose (1st Line)"), "purpose[1]", I18S("Purpose (2nd Line)"), "purpose[2]", I18S("Purpose (3rd Line)"), "purpose[3]", I18S("Purpose (4th Line)"), "purpose[4]", I18S("Purpose (5th Line)"), "purpose[5]", I18S("Purpose (6th Line)"), "purpose[6]", I18S("Purpose (7th Line)"), "purpose[7]", I18S("Purpose (8th Line)"), "purpose[8]", I18S("Purpose (9th Line)"), "purpose[9]", I18S("Purpose (10th Line)"), "category[0]", I18S("Category (1st Line)"), "category[1]", I18S("Category (2nd Line)"), "category[2]", I18S("Category (3rd Line)"), "category[3]", I18S("Category (4th Line)"), "category[4]", I18S("Category (5th Line)"), "category[5]", I18S("Category (6th Line)"), "category[6]", I18S("Category (7th Line)"), "category[7]", I18S("Category (8th Line)"), "period", I18S("Period (Standing Order)"), "cycle", I18S("Cycle (Standing Order)"), "executionDay", I18S("Execution Day (Standing Order)"), "firstExecutionDate", I18S("Date of First Execution (Standing Order)"), "lastExecutionDate", I18S("Date of Last Execution (Standing Order)"), "nextExecutionDate", I18S("Date of Next Execution (Standing Order)"), "type", I18S("Type"), "subtype", I18S("Subtype"), "status", I18S("Status"), "remoteAddrStreet", I18S("Remote Address: Street"), "remoteAddrZipCode", I18S("Remote Address: Zipcode"), "remoteAddrCity", I18S("Remote Address: City"), "remotePhone", I18S("Remote Address: Phone Number"), "unitId", I18S("Unit Id (Stock)"), "unitIdNameSpace", I18S("Namespace of Unit Id (Securities)"), "units/value", I18S("Amount of Units (Securities) (value)"), "units/currency", I18S("Amount of Units (Securities) (currency)"), "unitprice/value", I18S("Price per Unit (Securities) (value)"), "unitprice/currency", I18S("Price per Unit (Securities) (currency)"), "commission/value", I18S("Commission (Securities) (value)"), "commission/currency", I18S("Commission (Securities) (currency)"), "bankAccountId", I18S("Bank Account Id"), "posNeg", I18S("Positive/Negative Mark"), NULL }; GWEN_DIALOG *AB_CSV_EditProfileDialog_new(AB_IMEXPORTER *ie, GWEN_DB_NODE *dbProfile, const char *testFileName) { AB_BANKING *ab; GWEN_DIALOG *dlg; AB_CSV_EDIT_PROFILE_DIALOG *xdlg; assert(ie); assert(dbProfile); ab=AB_ImExporter_GetBanking(ie); dlg=GWEN_Dialog_CreateAndLoadWithPath("ab_csv_edit_profile", AB_PM_LIBNAME, AB_PM_DATADIR, "aqbanking/imexporters/csv/dialogs/csv_editprofile.dlg"); if (dlg==NULL) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Could not create dialog \"ab_csv_edit_profile\"."); return NULL; } GWEN_NEW_OBJECT(AB_CSV_EDIT_PROFILE_DIALOG, xdlg); GWEN_INHERIT_SETDATA(GWEN_DIALOG, AB_CSV_EDIT_PROFILE_DIALOG, dlg, xdlg, AB_CSV_EditProfileDialog_FreeData); GWEN_Dialog_SetSignalHandler(dlg, AB_CSV_EditProfileDialog_SignalHandler); xdlg->banking=ab; xdlg->imExporter=ie; xdlg->testFileName=testFileName; xdlg->dbProfile=dbProfile; xdlg->columns=GWEN_StringList_new(); /* done */ return dlg; } void GWENHYWFAR_CB AB_CSV_EditProfileDialog_FreeData(void *bp, void *p) { AB_CSV_EDIT_PROFILE_DIALOG *xdlg; xdlg=(AB_CSV_EDIT_PROFILE_DIALOG *) p; assert(xdlg); GWEN_Buffer_free(xdlg->dataBuffer); GWEN_FREE_OBJECT(xdlg); } static const char *getCharValueFromDoubleStringsCombo(GWEN_DIALOG *dlg, const char *comboBoxName, const char **strings) { int i; int j; /* count number of string entries */ for (j=0; ; j+=2) { if (strings[j]==NULL) break; } j>>=1; i=GWEN_Dialog_GetIntProperty(dlg, comboBoxName, GWEN_DialogProperty_Value, 0, -1); if (i<0 || i>=j) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Index %d in %s out of range (%d)", i, comboBoxName, j); return NULL; } return strings[i*2]; } static int readTestData(GWEN_DIALOG *dlg) { AB_CSV_EDIT_PROFILE_DIALOG *xdlg; GWEN_SYNCIO *sio; GWEN_SYNCIO *baseIo; GWEN_BUFFER *dbuf; int i; int ignoreLines=0; int rv; const char *delimiter; GWEN_BUFFER *wbuffer; const char *s; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AB_CSV_EDIT_PROFILE_DIALOG, dlg); assert(xdlg); GWEN_StringList_Clear(xdlg->columns); /* create file IO */ sio=GWEN_SyncIo_File_new(xdlg->testFileName, GWEN_SyncIo_File_CreationMode_OpenExisting); GWEN_SyncIo_AddFlags(sio, GWEN_SYNCIO_FILE_FLAGS_READ); baseIo=sio; /* create buffered IO on top of file io to allow for reading of lines below */ sio=GWEN_SyncIo_Buffered_new(baseIo); dbuf=GWEN_Buffer_new(0, 1024, 0, 1); /* skip lines */ ignoreLines=GWEN_Dialog_GetIntProperty(dlg, "ignoreLinesSpin", GWEN_DialogProperty_Value, 0, 0); i=GWEN_Dialog_GetIntProperty(dlg, "headerCheck", GWEN_DialogProperty_Value, 0, 0); if (i) ignoreLines++; delimiter=getCharValueFromDoubleStringsCombo(dlg, "delimiterCombo", csv_delimiters); if (!(delimiter && *delimiter)) delimiter="TAB"; if (strcasecmp(delimiter, "TAB")==0) delimiter="\t"; else if (strcasecmp(delimiter, "SPACE")==0) delimiter=" "; /* open file */ rv=GWEN_SyncIo_Connect(sio); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(dbuf); GWEN_SyncIo_free(sio); return rv; } for (i=0; icolumns, GWEN_Buffer_GetStart(wbuffer), 0, 0); GWEN_Buffer_Reset(wbuffer); if (*s) { if (strchr(delimiter, *s)) s++; } } /* while */ GWEN_Buffer_free(wbuffer); for (i=0; icolumns, i); if (s==NULL) break; GWEN_Dialog_SetCharProperty(dlg, editName, GWEN_DialogProperty_Value, 0, s, 0); } return 0; } static void setUpComboFromSingleStrings(GWEN_DIALOG *dlg, const char *comboBoxName, const char **strings, const char *s) { int i; int j; const char *t; GWEN_Dialog_SetIntProperty(dlg, comboBoxName, GWEN_DialogProperty_ClearValues, 0, 0, 0); j=-1; for (i=0; ; i++) { t=strings[i]; if (t==NULL) break; GWEN_Dialog_SetCharProperty(dlg, comboBoxName, GWEN_DialogProperty_AddValue, 0, t, 0); if (s && *s && strcmp(s, t)==0) j=i; } if (j==-1) { if (s && *s) { GWEN_Dialog_SetCharProperty(dlg, comboBoxName, GWEN_DialogProperty_AddValue, 0, s, 0); j=i; } else j=0; } GWEN_Dialog_SetIntProperty(dlg, comboBoxName, GWEN_DialogProperty_Value, 0, j, 0); } static void setUpComboFromDoubleStrings(GWEN_DIALOG *dlg, const char *comboBoxName, const char **strings, const char *s) { int i; int j; const char *t1; const char *t2; GWEN_Dialog_SetIntProperty(dlg, comboBoxName, GWEN_DialogProperty_ClearValues, 0, 0, 0); j=-1; for (i=0; ; i+=2) { t1=strings[i]; if (t1==NULL) break; t2=strings[i+1]; GWEN_Dialog_SetCharProperty(dlg, comboBoxName, GWEN_DialogProperty_AddValue, 0, I18N(t2), 0); if (s && *s && strcasecmp(s, t1)==0) j=i/2; } if (j==-1) { if (s && *s) { GWEN_Dialog_SetCharProperty(dlg, comboBoxName, GWEN_DialogProperty_AddValue, 0, s, 0); j=i/2; } else j=0; } GWEN_Dialog_SetIntProperty(dlg, comboBoxName, GWEN_DialogProperty_Value, 0, j, 0); } static int setDbValueFromDoubleStringsCombo(GWEN_DIALOG *dlg, GWEN_DB_NODE *db, const char *varName, const char *comboBoxName, const char **strings) { int i; int j; /* count number of string entries */ for (j=0; ; j+=2) { if (strings[j]==NULL) break; } j>>=1; i=GWEN_Dialog_GetIntProperty(dlg, comboBoxName, GWEN_DialogProperty_Value, 0, -1); if (i<0 || i>=j) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Index %d in %s out of range (%d)", i, comboBoxName, j); return GWEN_ERROR_INVALID; } GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, varName, strings[i*2]); return 0; } static int setColumnValueFromCombo(GWEN_DIALOG *dlg, GWEN_DB_NODE *db, const char *varName, const char *comboBoxName, const char **strings) { int i; int j; /* count number of string entries */ for (j=0; ; j+=2) { if (strings[j]==NULL) break; } j>>=1; i=GWEN_Dialog_GetIntProperty(dlg, comboBoxName, GWEN_DialogProperty_Value, 0, -1); if (i<0 || i>=j) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Index %d of %s out of range (%d)", i, comboBoxName, j); return GWEN_ERROR_INVALID; } if (i!=0) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, varName, strings[i*2]); return 0; } void AB_CSV_EditProfileDialog_Init(GWEN_DIALOG *dlg) { AB_CSV_EDIT_PROFILE_DIALOG *xdlg; int i; const char *s; GWEN_DB_NODE *dbPrefs; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AB_CSV_EDIT_PROFILE_DIALOG, dlg); assert(xdlg); /* setup dialog size */ dbPrefs=GWEN_Dialog_GetPreferences(dlg); /* read width */ i=GWEN_DB_GetIntValue(dbPrefs, "dialog_width", 0, -1); if (i>=DIALOG_MINWIDTH) GWEN_Dialog_SetIntProperty(dlg, "", GWEN_DialogProperty_Width, 0, i, 0); /* read height */ i=GWEN_DB_GetIntValue(dbPrefs, "dialog_height", 0, -1); if (i>=DIALOG_MINHEIGHT) GWEN_Dialog_SetIntProperty(dlg, "", GWEN_DialogProperty_Height, 0, i, 0); GWEN_Dialog_SetCharProperty(dlg, "", GWEN_DialogProperty_Title, 0, I18N("Edit CSV Profile"), 0); /* setup dialog widgets */ s=GWEN_DB_GetCharValue(xdlg->dbProfile, "name", 0, NULL); if (s && *s) GWEN_Dialog_SetCharProperty(dlg, "nameEdit", GWEN_DialogProperty_Value, 0, s, 0); s=GWEN_DB_GetCharValue(xdlg->dbProfile, "version", 0, NULL); if (s && *s) GWEN_Dialog_SetCharProperty(dlg, "versionEdit", GWEN_DialogProperty_Value, 0, s, 0); s=GWEN_DB_GetCharValue(xdlg->dbProfile, "shortDescr", 0, NULL); if (s && *s) GWEN_Dialog_SetCharProperty(dlg, "shortDescrEdit", GWEN_DialogProperty_Value, 0, s, 0); s=GWEN_DB_GetCharValue(xdlg->dbProfile, "longDescr", 0, NULL); if (s && *s) GWEN_Dialog_SetCharProperty(dlg, "longDescrEdit", GWEN_DialogProperty_Value, 0, s, 0); i=GWEN_DB_GetIntValue(xdlg->dbProfile, "import", 0, 1); GWEN_Dialog_SetIntProperty(dlg, "importCheck", GWEN_DialogProperty_Value, 0, i?1:0, 0); i=GWEN_DB_GetIntValue(xdlg->dbProfile, "export", 0, 1); GWEN_Dialog_SetIntProperty(dlg, "exportCheck", GWEN_DialogProperty_Value, 0, i?1:0, 0); GWEN_Dialog_SetIntProperty(dlg, "ignoreLinesSpin", GWEN_DialogProperty_MinValue, 0, 0, 0); GWEN_Dialog_SetIntProperty(dlg, "ignoreLinesSpin", GWEN_DialogProperty_MaxValue, 0, 1000, 0); i=GWEN_DB_GetIntValue(xdlg->dbProfile, "params/ignoreLines", 0, 0); GWEN_Dialog_SetIntProperty(dlg, "ignoreLinesSpin", GWEN_DialogProperty_Value, 0, i, 0); i=GWEN_DB_GetIntValue(xdlg->dbProfile, "params/title", 0, 0); GWEN_Dialog_SetIntProperty(dlg, "headerCheck", GWEN_DialogProperty_Value, 0, i?1:0, 0); i=GWEN_DB_GetIntValue(xdlg->dbProfile, "params/quote", 0, 1); GWEN_Dialog_SetIntProperty(dlg, "quoteCheck", GWEN_DialogProperty_Value, 0, i?1:0, 0); /* setup delimiter combo box */ s=GWEN_DB_GetCharValue(xdlg->dbProfile, "params/delimiter", 0, NULL); setUpComboFromDoubleStrings(dlg, "delimiterCombo", csv_delimiters, s); /* setup subject combo box */ s=GWEN_DB_GetCharValue(xdlg->dbProfile, "subject", 0, NULL); setUpComboFromDoubleStrings(dlg, "subjectCombo", csv_subjects, s); /* setup date format combo box */ s=GWEN_DB_GetCharValue(xdlg->dbProfile, "dateFormat", 0, NULL); setUpComboFromSingleStrings(dlg, "dateFormatCombo", csv_dateFormats, s); /* setup amount format combo box */ s=GWEN_DB_GetCharValue(xdlg->dbProfile, "valueFormat", 0, NULL); setUpComboFromDoubleStrings(dlg, "amountFormatCombo", csv_amountFormats, s); /* setup columns page */ for (i=0; idbProfile, varName, 0, NULL); setUpComboFromDoubleStrings(dlg, comboName, csv_columns, s); } if (xdlg->testFileName) readTestData(dlg); } void AB_CSV_EditProfileDialog_Fini(GWEN_DIALOG *dlg) { AB_CSV_EDIT_PROFILE_DIALOG *xdlg; int i; GWEN_DB_NODE *dbPrefs; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AB_CSV_EDIT_PROFILE_DIALOG, dlg); assert(xdlg); dbPrefs=GWEN_Dialog_GetPreferences(dlg); /* store dialog width */ i=GWEN_Dialog_GetIntProperty(dlg, "", GWEN_DialogProperty_Width, 0, -1); if (idbProfile, NULL); GWEN_DB_AddGroupChildren(xdlg->dbProfile, db); GWEN_DB_Group_free(db); return GWEN_DialogEvent_ResultAccept; } else if (strcasecmp(sender, "abortButton")==0) return GWEN_DialogEvent_ResultReject; else if (strcasecmp(sender, "helpButton")==0) { } else if (strcasecmp(sender, "headerCheck")==0) { if (xdlg->testFileName) readTestData(dlg); return GWEN_DialogEvent_ResultHandled; } return GWEN_DialogEvent_ResultHandled; } int AB_CSV_EditProfileDialog_HandleValueChanged(GWEN_DIALOG *dlg, const char *sender) { AB_CSV_EDIT_PROFILE_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AB_CSV_EDIT_PROFILE_DIALOG, dlg); assert(xdlg); if (strcasecmp(sender, "ignoreLinesSpin")==0 || strcasecmp(sender, "delimiterCombo")==0 || strcasecmp(sender, "headerCheck")==0 || strcasecmp(sender, "quoteCheck")==0) { if (xdlg->testFileName) readTestData(dlg); } return GWEN_DialogEvent_ResultHandled; } int GWENHYWFAR_CB AB_CSV_EditProfileDialog_SignalHandler(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender) { AB_CSV_EDIT_PROFILE_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AB_CSV_EDIT_PROFILE_DIALOG, dlg); assert(xdlg); switch (t) { case GWEN_DialogEvent_TypeInit: AB_CSV_EditProfileDialog_Init(dlg); return GWEN_DialogEvent_ResultHandled;; case GWEN_DialogEvent_TypeFini: AB_CSV_EditProfileDialog_Fini(dlg); return GWEN_DialogEvent_ResultHandled;; case GWEN_DialogEvent_TypeValueChanged: return AB_CSV_EditProfileDialog_HandleValueChanged(dlg, sender); case GWEN_DialogEvent_TypeActivated: return AB_CSV_EditProfileDialog_HandleActivated(dlg, sender); case GWEN_DialogEvent_TypeEnabled: case GWEN_DialogEvent_TypeDisabled: case GWEN_DialogEvent_TypeClose: case GWEN_DialogEvent_TypeKeyPressed: case GWEN_DialogEvent_TypeKeyReleased: case GWEN_DialogEvent_TypeLast: return GWEN_DialogEvent_ResultNotHandled; } return GWEN_DialogEvent_ResultNotHandled; } aqbanking-6.6.1/src/libs/plugins/imexporters/csv/csv_editprofile_p.h0000664000175000017500000000212614043610745022635 00000000000000/*************************************************************************** begin : Sat Jan 13 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AB_CSV_EDITPROFILE_P_H #define AB_CSV_EDITPROFILE_P_H #include "csv_editprofile_l.h" struct AB_CSV_EDIT_PROFILE_DIALOG { AB_BANKING *banking; AB_IMEXPORTER *imExporter; const char *testFileName; GWEN_DB_NODE *dbProfile; GWEN_BUFFER *dataBuffer; GWEN_STRINGLIST *columns; }; typedef struct AB_CSV_EDIT_PROFILE_DIALOG AB_CSV_EDIT_PROFILE_DIALOG; static GWENHYWFAR_CB void AB_CSV_EditProfileDialog_FreeData(void *bp, void *p); static GWENHYWFAR_CB int AB_CSV_EditProfileDialog_SignalHandler(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender); #endif aqbanking-6.6.1/src/libs/plugins/imexporters/csv/README0000664000175000017500000000000014043610745017631 00000000000000aqbanking-6.6.1/src/libs/plugins/imexporters/csv/csv.h0000664000175000017500000000121514043610745017726 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AQHBCI_IMEX_CSV_H #define AQHBCI_IMEX_CSV_H #include #include AB_IMEXPORTER *AB_ImExporterCSV_new(AB_BANKING *ab); #endif /* AQHBCI_IMEX_CSV_H */ aqbanking-6.6.1/src/libs/plugins/imexporters/csv/csv_editprofile_l.h0000664000175000017500000000142214043610745022627 00000000000000/*************************************************************************** begin : Sat Jan 13 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AB_CSV_EDITPROFILE_L_H #define AB_CSV_EDITPROFILE_L_H #include #include GWEN_DIALOG *AB_CSV_EditProfileDialog_new(AB_IMEXPORTER *ie, GWEN_DB_NODE *params, const char *testFileName); #endif aqbanking-6.6.1/src/libs/plugins/imexporters/xmldb/0000755000175000017500000000000015037736160017360 500000000000000aqbanking-6.6.1/src/libs/plugins/imexporters/xmldb/xmldb.c0000664000175000017500000001164114043610745020553 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "xmldb_p.h" #include "aqbanking/i18n_l.h" #include #include #include #include #include #include GWEN_INHERIT(AB_IMEXPORTER, AH_IMEXPORTER_XMLDB); AB_IMEXPORTER *AB_ImExporterXMLDB_new(AB_BANKING *ab) { AB_IMEXPORTER *ie; AH_IMEXPORTER_XMLDB *ieh; ie=AB_ImExporter_new(ab, "xmldb"); GWEN_NEW_OBJECT(AH_IMEXPORTER_XMLDB, ieh); GWEN_INHERIT_SETDATA(AB_IMEXPORTER, AH_IMEXPORTER_XMLDB, ie, ieh, AH_ImExporterXMLDB_FreeData); ieh->dbio=GWEN_DBIO_GetPlugin("xmldb"); if (!ieh->dbio) { DBG_ERROR(AQBANKING_LOGDOMAIN, "GWEN DBIO plugin \"XMLDB\" not available"); AB_ImExporter_free(ie); return 0; } AB_ImExporter_SetImportFn(ie, AH_ImExporterXMLDB_Import); AB_ImExporter_SetExportFn(ie, AH_ImExporterXMLDB_Export); AB_ImExporter_SetCheckFileFn(ie, AH_ImExporterXMLDB_CheckFile); return ie; } void GWENHYWFAR_CB AH_ImExporterXMLDB_FreeData(void *bp, void *p) { AH_IMEXPORTER_XMLDB *ieh; ieh=(AH_IMEXPORTER_XMLDB *)p; GWEN_DBIO_free(ieh->dbio); GWEN_FREE_OBJECT(ieh); } int AH_ImExporterXMLDB_Import(AB_IMEXPORTER *ie, AB_IMEXPORTER_CONTEXT *ctx, GWEN_SYNCIO *sio, GWEN_DB_NODE *params) { AH_IMEXPORTER_XMLDB *ieh; GWEN_DB_NODE *dbData; GWEN_DB_NODE *dbSubParams; int rv; assert(ie); ieh=GWEN_INHERIT_GETDATA(AB_IMEXPORTER, AH_IMEXPORTER_XMLDB, ie); assert(ieh); assert(ieh->dbio); dbSubParams=GWEN_DB_GetGroup(params, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "params"); dbData=GWEN_DB_Group_new("transactions"); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Notice, I18N("Reading file...")); rv=GWEN_DBIO_Import(ieh->dbio, sio, dbData, dbSubParams, GWEN_DB_FLAGS_DEFAULT | GWEN_PATH_FLAGS_CREATE_GROUP); if (rv) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Error importing data"); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("Error importing data")); GWEN_DB_Group_free(dbData); return GWEN_ERROR_BAD_DATA; } /* transform DB to transactions */ GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Notice, "Data imported, transforming to transactions"); AB_ImExporterContext_ReadDb(ctx, dbData); GWEN_DB_Group_free(dbData); return 0; } int AH_ImExporterXMLDB_Export(AB_IMEXPORTER *ie, AB_IMEXPORTER_CONTEXT *ctx, GWEN_SYNCIO *sio, GWEN_DB_NODE *params) { AH_IMEXPORTER_XMLDB *ieh; GWEN_DB_NODE *dbSubParams; GWEN_DB_NODE *dbData; int rv; assert(ie); ieh=GWEN_INHERIT_GETDATA(AB_IMEXPORTER, AH_IMEXPORTER_XMLDB, ie); assert(ieh); assert(ieh->dbio); dbSubParams=GWEN_DB_GetGroup(params, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "params"); dbData=GWEN_DB_Group_new("GWEN_DB"); rv=AB_ImExporterContext_toDb(ctx, dbData); if (rv) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Error exporting data"); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("Error exporting data")); GWEN_DB_Group_free(dbData); return rv; } rv=GWEN_DBIO_Export(ieh->dbio, sio, dbData, dbSubParams, GWEN_DB_FLAGS_DEFAULT | GWEN_PATH_FLAGS_CREATE_GROUP); if (rv) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Error exporting data"); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("Error exporting data")); GWEN_DB_Group_free(dbData); return GWEN_ERROR_GENERIC; } GWEN_DB_Group_free(dbData); return 0; } int AH_ImExporterXMLDB_CheckFile(AB_IMEXPORTER *ie, const char *fname) { AH_IMEXPORTER_XMLDB *ieh; GWEN_DBIO_CHECKFILE_RESULT rv; assert(ie); ieh=GWEN_INHERIT_GETDATA(AB_IMEXPORTER, AH_IMEXPORTER_XMLDB, ie); assert(ieh); assert(ieh->dbio); rv=GWEN_DBIO_CheckFile(ieh->dbio, fname); switch (rv) { case GWEN_DBIO_CheckFileResultOk: return 0; case GWEN_DBIO_CheckFileResultNotOk: return GWEN_ERROR_BAD_DATA; case GWEN_DBIO_CheckFileResultUnknown: return AB_ERROR_INDIFFERENT; default: return GWEN_ERROR_GENERIC; } /* switch */ } aqbanking-6.6.1/src/libs/plugins/imexporters/xmldb/xmldb.xml.in0000664000175000017500000000042214043610745021531 00000000000000 @AQBANKING_VERSION_STRING@ Martin Preuss(martin@libchipcard.de) XML DB This plugin imports XML data. aqbanking-6.6.1/src/libs/plugins/imexporters/xmldb/Makefile.in0000644000175000017500000007352415037736026021361 00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/libs/plugins/imexporters/xmldb ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/distri.m4 $(top_srcdir)/m4/gwenhywfar.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/os.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = xmldb.xml CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libabimexporters_xmldb_la_LIBADD = am_libabimexporters_xmldb_la_OBJECTS = xmldb.lo libabimexporters_xmldb_la_OBJECTS = \ $(am_libabimexporters_xmldb_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/xmldb.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libabimexporters_xmldb_la_SOURCES) DIST_SOURCES = $(libabimexporters_xmldb_la_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(imexporterplugindir)" DATA = $(imexporterplugin_DATA) HEADERS = $(noinst_HEADERS) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir distdir-am am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/xmldb.xml.in \ $(top_srcdir)/depcomp README DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ADD_ACLOCAL_FLAGS = @ADD_ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AQBANKING_CLI_VERSION_STRING = @AQBANKING_CLI_VERSION_STRING@ AQBANKING_FINTS_VERSION_STRING = @AQBANKING_FINTS_VERSION_STRING@ AQBANKING_SO_AGE = @AQBANKING_SO_AGE@ AQBANKING_SO_CURRENT = @AQBANKING_SO_CURRENT@ AQBANKING_SO_EFFECTIVE = @AQBANKING_SO_EFFECTIVE@ AQBANKING_SO_REVISION = @AQBANKING_SO_REVISION@ AQBANKING_VERSION_BUILD = @AQBANKING_VERSION_BUILD@ AQBANKING_VERSION_FULL_STRING = @AQBANKING_VERSION_FULL_STRING@ AQBANKING_VERSION_MAJOR = @AQBANKING_VERSION_MAJOR@ AQBANKING_VERSION_MINOR = @AQBANKING_VERSION_MINOR@ AQBANKING_VERSION_PATCHLEVEL = @AQBANKING_VERSION_PATCHLEVEL@ AQBANKING_VERSION_RELEASE_STRING = @AQBANKING_VERSION_RELEASE_STRING@ AQBANKING_VERSION_STRING = @AQBANKING_VERSION_STRING@ AQBANKING_VERSION_TAG = @AQBANKING_VERSION_TAG@ AQEBICS_CFLAGS = @AQEBICS_CFLAGS@ AQEBICS_LIBS = @AQEBICS_LIBS@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATETIME = @DATETIME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_EXCLUDE_PATTERNS = @DOXYGEN_EXCLUDE_PATTERNS@ DOXYGEN_FILE_PATTERNS = @DOXYGEN_FILE_PATTERNS@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENGUI_GTK2_CFLAGS = @GWENGUI_GTK2_CFLAGS@ GWENGUI_GTK2_LIBS = @GWENGUI_GTK2_LIBS@ GWENHYWFAR_MINIMUM_VERSION = @GWENHYWFAR_MINIMUM_VERSION@ HAVE_GWENGUI_GTK2 = @HAVE_GWENGUI_GTK2@ HAVE_I18N = @HAVE_I18N@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIBXSLT_CFLAGS = @LIBXSLT_CFLAGS@ LIBXSLT_LIBS = @LIBXSLT_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_SUPPORTS_QT = @MSGFMT_SUPPORTS_QT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ TUTORIALS = @TUTORIALS@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XMLMERGE = @XMLMERGE@ XMLSEC_CFLAGS = @XMLSEC_CFLAGS@ XMLSEC_LIBS = @XMLSEC_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ aqbanking_backends = @aqbanking_backends@ aqbanking_cfg_searchdir = @aqbanking_cfg_searchdir@ aqbanking_data_searchdir = @aqbanking_data_searchdir@ aqbanking_headerdir = @aqbanking_headerdir@ aqbanking_headerdir_am = @aqbanking_headerdir_am@ aqbanking_includes = @aqbanking_includes@ aqbanking_internal_libs = @aqbanking_internal_libs@ aqbanking_ldflags = @aqbanking_ldflags@ aqbanking_libs = @aqbanking_libs@ aqbanking_locale_searchdir = @aqbanking_locale_searchdir@ aqbanking_modules = @aqbanking_modules@ aqbanking_pkgdatadir = @aqbanking_pkgdatadir@ aqbanking_plugin_searchdir = @aqbanking_plugin_searchdir@ aqbanking_plugindir = @aqbanking_plugindir@ aqbanking_plugins_backends_dirs = @aqbanking_plugins_backends_dirs@ aqbanking_plugins_backends_libs = @aqbanking_plugins_backends_libs@ aqbanking_plugins_bankinfo_dirs = @aqbanking_plugins_bankinfo_dirs@ aqbanking_plugins_bankinfo_libs = @aqbanking_plugins_bankinfo_libs@ aqbanking_plugins_imexporters_dirs = @aqbanking_plugins_imexporters_dirs@ aqbanking_plugins_imexporters_libs = @aqbanking_plugins_imexporters_libs@ aqbanking_plugins_parsers_dirs = @aqbanking_plugins_parsers_dirs@ aqbanking_symlinkdir = @aqbanking_symlinkdir@ aqbanking_sys_is_windows = @aqbanking_sys_is_windows@ aqbankingpp_modules = @aqbankingpp_modules@ aqebics_datadir = @aqebics_datadir@ aqebics_includes = @aqebics_includes@ aqebics_internal_libs = @aqebics_internal_libs@ aqebics_ldflags = @aqebics_ldflags@ aqebics_libs = @aqebics_libs@ aqfints_datadir = @aqfints_datadir@ aqhbci_datadir = @aqhbci_datadir@ aqhbci_includes = @aqhbci_includes@ aqhbci_internal_libs = @aqhbci_internal_libs@ aqhbci_ldflags = @aqhbci_ldflags@ aqhbci_libs = @aqhbci_libs@ aqofxconnect_includes = @aqofxconnect_includes@ aqofxconnect_internal_libs = @aqofxconnect_internal_libs@ aqofxconnect_libs = @aqofxconnect_libs@ aqpaypal_includes = @aqpaypal_includes@ aqpaypal_internal_libs = @aqpaypal_internal_libs@ aqpaypal_libs = @aqpaypal_libs@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gmp_libs = @gmp_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_dir = @gwenhywfar_dir@ gwenhywfar_has_crypt = @gwenhywfar_has_crypt@ gwenhywfar_headers = @gwenhywfar_headers@ gwenhywfar_includes = @gwenhywfar_includes@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_plugins = @gwenhywfar_plugins@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ typemaker2_exe = @typemaker2_exe@ visibility_cflags = @visibility_cflags@ with_aqebics = @with_aqebics@ with_aqhbci = @with_aqhbci@ SUBDIRS = profiles AM_CPPFLAGS = -I$(top_srcdir)/src/libs \ -I$(top_builddir)/src/libs \ $(gwenhywfar_includes) AM_CFLAGS = -DBUILDING_AQBANKING @visibility_cflags@ EXTRA_DIST = README noinst_HEADERS = xmldb_p.h xmldb.h imexporterplugindir = $(aqbanking_plugindir)/imexporters noinst_LTLIBRARIES = libabimexporters_xmldb.la imexporterplugin_DATA = xmldb.xml libabimexporters_xmldb_la_SOURCES = xmldb.c all: all-recursive .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libs/plugins/imexporters/xmldb/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libs/plugins/imexporters/xmldb/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): xmldb.xml: $(top_builddir)/config.status $(srcdir)/xmldb.xml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libabimexporters_xmldb.la: $(libabimexporters_xmldb_la_OBJECTS) $(libabimexporters_xmldb_la_DEPENDENCIES) $(EXTRA_libabimexporters_xmldb_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libabimexporters_xmldb_la_OBJECTS) $(libabimexporters_xmldb_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xmldb.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-imexporterpluginDATA: $(imexporterplugin_DATA) @$(NORMAL_INSTALL) @list='$(imexporterplugin_DATA)'; test -n "$(imexporterplugindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(imexporterplugindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(imexporterplugindir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(imexporterplugindir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(imexporterplugindir)" || exit $$?; \ done uninstall-imexporterpluginDATA: @$(NORMAL_UNINSTALL) @list='$(imexporterplugin_DATA)'; test -n "$(imexporterplugindir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(imexporterplugindir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(imexporterplugindir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-recursive -rm -f ./$(DEPDIR)/xmldb.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-imexporterpluginDATA install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f ./$(DEPDIR)/xmldb.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-imexporterpluginDATA .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ am--depfiles check check-am clean clean-generic clean-libtool \ clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-imexporterpluginDATA install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am \ uninstall-imexporterpluginDATA .PRECIOUS: Makefile typefiles: typedefs: sources: for f in $(libabimexporters_xmldb_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for f in $(imexporterplugin_DATA); do \ echo $(subdir)/$$f >>$(top_srcdir)/pdsources; \ done cppcheck: for f in $(libabimexporters_xmldb_la_SOURCES); do \ cppcheck --force $$f ; \ done # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: aqbanking-6.6.1/src/libs/plugins/imexporters/xmldb/xmldb.h0000664000175000017500000000117014043610745020554 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AQHBCI_IMEX_XMLDB_H #define AQHBCI_IMEX_XMLDB_H #include AB_IMEXPORTER *AB_ImExporterXMLDB_new(AB_BANKING *ab); #endif /* AQHBCI_IMEX_XMLDB_H */ aqbanking-6.6.1/src/libs/plugins/imexporters/xmldb/xmldb_p.h0000664000175000017500000000253214043610745021076 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AQHBCI_IMEX_XMLDB_P_H #define AQHBCI_IMEX_XMLDB_P_H #include "xmldb.h" #include #include typedef struct AH_IMEXPORTER_XMLDB AH_IMEXPORTER_XMLDB; struct AH_IMEXPORTER_XMLDB { GWEN_DBIO *dbio; }; static void GWENHYWFAR_CB AH_ImExporterXMLDB_FreeData(void *bp, void *p); static int AH_ImExporterXMLDB_Import(AB_IMEXPORTER *ie, AB_IMEXPORTER_CONTEXT *ctx, GWEN_SYNCIO *sio, GWEN_DB_NODE *params); static int AH_ImExporterXMLDB_Export(AB_IMEXPORTER *ie, AB_IMEXPORTER_CONTEXT *ctx, GWEN_SYNCIO *sio, GWEN_DB_NODE *params); static int AH_ImExporterXMLDB_CheckFile(AB_IMEXPORTER *ie, const char *fname); #endif /* AQHBCI_IMEX_XMLDB_P_H */ aqbanking-6.6.1/src/libs/plugins/imexporters/xmldb/Makefile.am0000664000175000017500000000134714043610745021337 00000000000000SUBDIRS=profiles AM_CPPFLAGS = -I$(top_srcdir)/src/libs \ -I$(top_builddir)/src/libs \ $(gwenhywfar_includes) AM_CFLAGS=-DBUILDING_AQBANKING @visibility_cflags@ EXTRA_DIST=README noinst_HEADERS=xmldb_p.h xmldb.h imexporterplugindir = $(aqbanking_plugindir)/imexporters noinst_LTLIBRARIES=libabimexporters_xmldb.la imexporterplugin_DATA=xmldb.xml libabimexporters_xmldb_la_SOURCES=xmldb.c typefiles: typedefs: sources: for f in $(libabimexporters_xmldb_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for f in $(imexporterplugin_DATA); do \ echo $(subdir)/$$f >>$(top_srcdir)/pdsources; \ done cppcheck: for f in $(libabimexporters_xmldb_la_SOURCES); do \ cppcheck --force $$f ; \ done aqbanking-6.6.1/src/libs/plugins/imexporters/xmldb/profiles/0000755000175000017500000000000015037736160021203 500000000000000aqbanking-6.6.1/src/libs/plugins/imexporters/xmldb/profiles/default.conf0000664000175000017500000000030314043610745023410 00000000000000 char name="default" char shortDescr="default profile" char longDescr="This profile supports XML files" int import="1" int export="1" params { char rootElement="ImExporterContext" } # params aqbanking-6.6.1/src/libs/plugins/imexporters/xmldb/profiles/Makefile.am0000664000175000017500000000017214043610745023155 00000000000000 profilesdir = $(aqbanking_pkgdatadir)/imexporters/xmldb/profiles profiles_DATA=default.conf EXTRA_DIST=$(profiles_DATA) aqbanking-6.6.1/src/libs/plugins/imexporters/xmldb/profiles/Makefile.in0000644000175000017500000004575315037736026023207 00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/libs/plugins/imexporters/xmldb/profiles ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/distri.m4 $(top_srcdir)/m4/gwenhywfar.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/os.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(profilesdir)" DATA = $(profiles_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADD_ACLOCAL_FLAGS = @ADD_ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AQBANKING_CLI_VERSION_STRING = @AQBANKING_CLI_VERSION_STRING@ AQBANKING_FINTS_VERSION_STRING = @AQBANKING_FINTS_VERSION_STRING@ AQBANKING_SO_AGE = @AQBANKING_SO_AGE@ AQBANKING_SO_CURRENT = @AQBANKING_SO_CURRENT@ AQBANKING_SO_EFFECTIVE = @AQBANKING_SO_EFFECTIVE@ AQBANKING_SO_REVISION = @AQBANKING_SO_REVISION@ AQBANKING_VERSION_BUILD = @AQBANKING_VERSION_BUILD@ AQBANKING_VERSION_FULL_STRING = @AQBANKING_VERSION_FULL_STRING@ AQBANKING_VERSION_MAJOR = @AQBANKING_VERSION_MAJOR@ AQBANKING_VERSION_MINOR = @AQBANKING_VERSION_MINOR@ AQBANKING_VERSION_PATCHLEVEL = @AQBANKING_VERSION_PATCHLEVEL@ AQBANKING_VERSION_RELEASE_STRING = @AQBANKING_VERSION_RELEASE_STRING@ AQBANKING_VERSION_STRING = @AQBANKING_VERSION_STRING@ AQBANKING_VERSION_TAG = @AQBANKING_VERSION_TAG@ AQEBICS_CFLAGS = @AQEBICS_CFLAGS@ AQEBICS_LIBS = @AQEBICS_LIBS@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATETIME = @DATETIME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_EXCLUDE_PATTERNS = @DOXYGEN_EXCLUDE_PATTERNS@ DOXYGEN_FILE_PATTERNS = @DOXYGEN_FILE_PATTERNS@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENGUI_GTK2_CFLAGS = @GWENGUI_GTK2_CFLAGS@ GWENGUI_GTK2_LIBS = @GWENGUI_GTK2_LIBS@ GWENHYWFAR_MINIMUM_VERSION = @GWENHYWFAR_MINIMUM_VERSION@ HAVE_GWENGUI_GTK2 = @HAVE_GWENGUI_GTK2@ HAVE_I18N = @HAVE_I18N@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIBXSLT_CFLAGS = @LIBXSLT_CFLAGS@ LIBXSLT_LIBS = @LIBXSLT_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_SUPPORTS_QT = @MSGFMT_SUPPORTS_QT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ TUTORIALS = @TUTORIALS@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XMLMERGE = @XMLMERGE@ XMLSEC_CFLAGS = @XMLSEC_CFLAGS@ XMLSEC_LIBS = @XMLSEC_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ aqbanking_backends = @aqbanking_backends@ aqbanking_cfg_searchdir = @aqbanking_cfg_searchdir@ aqbanking_data_searchdir = @aqbanking_data_searchdir@ aqbanking_headerdir = @aqbanking_headerdir@ aqbanking_headerdir_am = @aqbanking_headerdir_am@ aqbanking_includes = @aqbanking_includes@ aqbanking_internal_libs = @aqbanking_internal_libs@ aqbanking_ldflags = @aqbanking_ldflags@ aqbanking_libs = @aqbanking_libs@ aqbanking_locale_searchdir = @aqbanking_locale_searchdir@ aqbanking_modules = @aqbanking_modules@ aqbanking_pkgdatadir = @aqbanking_pkgdatadir@ aqbanking_plugin_searchdir = @aqbanking_plugin_searchdir@ aqbanking_plugindir = @aqbanking_plugindir@ aqbanking_plugins_backends_dirs = @aqbanking_plugins_backends_dirs@ aqbanking_plugins_backends_libs = @aqbanking_plugins_backends_libs@ aqbanking_plugins_bankinfo_dirs = @aqbanking_plugins_bankinfo_dirs@ aqbanking_plugins_bankinfo_libs = @aqbanking_plugins_bankinfo_libs@ aqbanking_plugins_imexporters_dirs = @aqbanking_plugins_imexporters_dirs@ aqbanking_plugins_imexporters_libs = @aqbanking_plugins_imexporters_libs@ aqbanking_plugins_parsers_dirs = @aqbanking_plugins_parsers_dirs@ aqbanking_symlinkdir = @aqbanking_symlinkdir@ aqbanking_sys_is_windows = @aqbanking_sys_is_windows@ aqbankingpp_modules = @aqbankingpp_modules@ aqebics_datadir = @aqebics_datadir@ aqebics_includes = @aqebics_includes@ aqebics_internal_libs = @aqebics_internal_libs@ aqebics_ldflags = @aqebics_ldflags@ aqebics_libs = @aqebics_libs@ aqfints_datadir = @aqfints_datadir@ aqhbci_datadir = @aqhbci_datadir@ aqhbci_includes = @aqhbci_includes@ aqhbci_internal_libs = @aqhbci_internal_libs@ aqhbci_ldflags = @aqhbci_ldflags@ aqhbci_libs = @aqhbci_libs@ aqofxconnect_includes = @aqofxconnect_includes@ aqofxconnect_internal_libs = @aqofxconnect_internal_libs@ aqofxconnect_libs = @aqofxconnect_libs@ aqpaypal_includes = @aqpaypal_includes@ aqpaypal_internal_libs = @aqpaypal_internal_libs@ aqpaypal_libs = @aqpaypal_libs@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gmp_libs = @gmp_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_dir = @gwenhywfar_dir@ gwenhywfar_has_crypt = @gwenhywfar_has_crypt@ gwenhywfar_headers = @gwenhywfar_headers@ gwenhywfar_includes = @gwenhywfar_includes@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_plugins = @gwenhywfar_plugins@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ typemaker2_exe = @typemaker2_exe@ visibility_cflags = @visibility_cflags@ with_aqebics = @with_aqebics@ with_aqhbci = @with_aqhbci@ profilesdir = $(aqbanking_pkgdatadir)/imexporters/xmldb/profiles profiles_DATA = default.conf EXTRA_DIST = $(profiles_DATA) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libs/plugins/imexporters/xmldb/profiles/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libs/plugins/imexporters/xmldb/profiles/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-profilesDATA: $(profiles_DATA) @$(NORMAL_INSTALL) @list='$(profiles_DATA)'; test -n "$(profilesdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(profilesdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(profilesdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(profilesdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(profilesdir)" || exit $$?; \ done uninstall-profilesDATA: @$(NORMAL_UNINSTALL) @list='$(profiles_DATA)'; test -n "$(profilesdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(profilesdir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(profilesdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-profilesDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-profilesDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-profilesDATA install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags-am uninstall uninstall-am uninstall-profilesDATA .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: aqbanking-6.6.1/src/libs/plugins/imexporters/xmldb/README0000664000175000017500000000000014043610745020144 00000000000000aqbanking-6.6.1/src/libs/plugins/imexporters/sepa/0000755000175000017500000000000015037736160017202 500000000000000aqbanking-6.6.1/src/libs/plugins/imexporters/sepa/sepa_p.h0000664000175000017500000000530514043610745020543 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AQHBCI_IMEX_SEPA_P_H #define AQHBCI_IMEX_SEPA_P_H #include "sepa.h" #include typedef struct AH_IMEXPORTER_SEPA AH_IMEXPORTER_SEPA; struct AH_IMEXPORTER_SEPA { int dummy; }; typedef struct AH_IMEXPORTER_SEPA_PMTINF AH_IMEXPORTER_SEPA_PMTINF; struct AH_IMEXPORTER_SEPA_PMTINF { GWEN_LIST_ELEMENT(AH_IMEXPORTER_SEPA_PMTINF) int tcount; AB_VALUE *value; char *ctrlsum; const GWEN_DATE *date; uint32_t transDate; const char *localName; const char *localIban; const char *localBic; AB_TRANSACTION_SEQUENCE sequenceType; const char *creditorSchemeId; AB_TRANSACTION_LIST2 *transactions; }; /* these functions are not part of the public API */ static void AH_ImExporter_Sepa_PmtInf_free(AH_IMEXPORTER_SEPA_PMTINF *pmtinf); GWEN_LIST_FUNCTION_DEFS(AH_IMEXPORTER_SEPA_PMTINF, AH_ImExporter_Sepa_PmtInf) static void GWENHYWFAR_CB AH_ImExporterSEPA_FreeData(void *bp, void *p); static int AH_ImExporterSEPA_Import(AB_IMEXPORTER *ie, AB_IMEXPORTER_CONTEXT *ctx, GWEN_SYNCIO *sio, GWEN_DB_NODE *params); static int AH_ImExporterSEPA_Export(AB_IMEXPORTER *ie, AB_IMEXPORTER_CONTEXT *ctx, GWEN_SYNCIO *sio, GWEN_DB_NODE *params); static int AH_ImExporterSEPA_CheckFile(AB_IMEXPORTER *ie, const char *fname); static int AH_ImExporterSEPA_XmlSetCharValueEscaped(GWEN_XMLNODE *n, const char *varName, const char *value); static int AH_ImExporterSEPA_Export_Pain_001(AB_IMEXPORTER *ie, AB_IMEXPORTER_CONTEXT *ctx, GWEN_XMLNODE *painNode, uint32_t doctype[], GWEN_DB_NODE *params); static int AH_ImExporterSEPA_Export_Pain_008(AB_IMEXPORTER *ie, AB_IMEXPORTER_CONTEXT *ctx, GWEN_XMLNODE *painNode, uint32_t doctype[], GWEN_DB_NODE *params); #endif /* AQHBCI_IMEX_SEPA_P_H */ aqbanking-6.6.1/src/libs/plugins/imexporters/sepa/sepa.h0000664000175000017500000000116414043610745020223 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AQHBCI_IMEX_SEPA_H #define AQHBCI_IMEX_SEPA_H #include AB_IMEXPORTER *AB_ImExporterSEPA_new(AB_BANKING *ab); #endif /* AQHBCI_IMEX_SEPA_H */ aqbanking-6.6.1/src/libs/plugins/imexporters/sepa/sepa_pain_001.c0000664000175000017500000002063114043610745021605 00000000000000 /* included by sepa.c */ #include int AH_ImExporterSEPA_Export_Pain_001(AB_IMEXPORTER *ie, AB_IMEXPORTER_CONTEXT *ctx, GWEN_XMLNODE *painNode, uint32_t doctype[], GWEN_DB_NODE *params) { GWEN_XMLNODE *n; AH_IMEXPORTER_SEPA_PMTINF_LIST *pl; AH_IMEXPORTER_SEPA_PMTINF *pmtinf; int post_1_1_2=(doctype[1]>1 || doctype[2]>2); const char *s; int rv; rv=AH_ImExporterSEPA_Export_Pain_Setup(ie, ctx, painNode, doctype, &pl); if (rv) { DBG_ERROR(AQBANKING_LOGDOMAIN, "here %d", rv); return rv; } /* generate PmtInf blocks */ pmtinf=AH_ImExporter_Sepa_PmtInf_List_First(pl); while (pmtinf) { const GWEN_DATE *tda; GWEN_XMLNODE *nn; AB_TRANSACTION *t; AB_TRANSACTION_LIST2_ITERATOR *it; n=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "PmtInf"); GWEN_XMLNode_AddChild(painNode, n); /* generate PmtInfId */ if (1) { GWEN_TIME *ti; GWEN_BUFFER *tbuf; uint32_t uid; char numbuf[32]; ti=GWEN_CurrentTime(); tbuf=GWEN_Buffer_new(0, 64, 0, 1); uid=AB_Banking_GetNamedUniqueId(AB_ImExporter_GetBanking(ie), "sepamsg", 1); GWEN_Time_toUtcString(ti, "YYYYMMDD-hh:mm:ss-", tbuf); snprintf(numbuf, sizeof(numbuf)-1, "%08x", uid); GWEN_Buffer_AppendString(tbuf, numbuf); AH_ImExporterSEPA_XmlSetCharValueEscaped(n, "PmtInfId", GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); GWEN_Time_free(ti); } AH_ImExporterSEPA_XmlSetCharValueEscaped(n, "PmtMtd", "TRF"); if (post_1_1_2) { /* store BtchBookg */ AH_ImExporterSEPA_XmlSetCharValueEscaped(n, "BtchBookg", GWEN_DB_GetIntValue(params, "singleBookingWanted", 0, 1) ? "false" : "true"); /* store NbOfTxs */ GWEN_XMLNode_SetIntValue(n, "NbOfTxs", pmtinf->tcount); /* store CtrlSum */ AH_ImExporterSEPA_XmlSetCharValueEscaped(n, "CtrlSum", pmtinf->ctrlsum); } nn=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "PmtTpInf"); if (nn) { GWEN_XMLNODE *nnn; nnn=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "SvcLvl"); if (nnn) { AH_ImExporterSEPA_XmlSetCharValueEscaped(nnn, "Cd", "SEPA"); GWEN_XMLNode_AddChild(nn, nnn); } GWEN_XMLNode_AddChild(n, nn); } /* create ReqdExctnDt" */ tda=pmtinf->date; if (tda) { GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 64, 0, 1); GWEN_Date_toStringWithTemplate(tda, "YYYY-MM-DD", tbuf); AH_ImExporterSEPA_XmlSetCharValueEscaped(n, "ReqdExctnDt", GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } else { AH_ImExporterSEPA_XmlSetCharValueEscaped(n, "ReqdExctnDt", "1999-01-01"); } /* create "Dbtr" */ nn=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "Dbtr"); if (nn) { GWEN_XMLNode_AddChild(n, nn); AH_ImExporterSEPA_XmlSetCharValueEscaped(nn, "Nm", pmtinf->localName); } /* create "DbtrAcct" */ GWEN_XMLNode_SetCharValueByPath(n, GWEN_XML_PATH_FLAGS_OVERWRITE_VALUES, "DbtrAcct/Id/IBAN", pmtinf->localIban); /* create "DbtrAgt" */ { const char *bic = pmtinf->localBic; if (bic && *bic) GWEN_XMLNode_SetCharValueByPath(n, GWEN_XML_PATH_FLAGS_OVERWRITE_VALUES, "DbtrAgt/FinInstnId/BIC", bic); else { if (doctype[1] >= 3) { /* BIC not required since 001.003.02, but must be written as "Othr/Id/NOTPROVIDED" */ GWEN_XMLNode_SetCharValueByPath(n, GWEN_XML_PATH_FLAGS_OVERWRITE_VALUES, "DbtrAgt/FinInstnId/Othr/Id", "NOTPROVIDED"); } else { /* For PAIN before 001.003.02, BIC is always required */ DBG_ERROR(AQBANKING_LOGDOMAIN, "No local BIC, but is required"); return GWEN_ERROR_BAD_DATA; } } } AH_ImExporterSEPA_XmlSetCharValueEscaped(n, "ChrgBr", "SLEV"); it=AB_Transaction_List2_First(pmtinf->transactions); assert(it); t=AB_Transaction_List2Iterator_Data(it); while (t) { GWEN_XMLNODE *nn; nn=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "CdtTrfTxInf"); if (nn) { GWEN_XMLNODE *nnn; const AB_VALUE *tv; GWEN_XMLNode_AddChild(n, nn); /* create "PmtId" */ nnn=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "PmtId"); if (nnn) { GWEN_XMLNode_AddChild(nn, nnn); s=AB_Transaction_GetEndToEndReference(t); /*if (!(s && *s)) s=AB_Transaction_GetCustomerReference(t);*/ if (!(s && *s)) s="NOTPROVIDED"; AH_ImExporterSEPA_XmlSetCharValueEscaped(nnn, "EndToEndId", s); } tv=AB_Transaction_GetValue(t); if (tv==NULL) { DBG_ERROR(AQBANKING_LOGDOMAIN, "No value in transaction"); AB_Transaction_List2Iterator_free(it); AH_ImExporter_Sepa_PmtInf_List_free(pl); return GWEN_ERROR_BAD_DATA; } nnn=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "Amt"); if (nnn) { GWEN_XMLNODE *nnnn; GWEN_XMLNode_AddChild(nn, nnn); nnnn=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "InstdAmt"); if (nnnn) { GWEN_BUFFER *tbuf; GWEN_XMLNODE *nnnnn; GWEN_XMLNode_AddChild(nnn, nnnn); tbuf=GWEN_Buffer_new(0, 64, 0, 1); AB_Value_toHumanReadableString(tv, tbuf, 2, 0); s=AB_Value_GetCurrency(tv); if (!s) s="EUR"; GWEN_XMLNode_SetProperty(nnnn, "Ccy", s); nnnnn=GWEN_XMLNode_new(GWEN_XMLNodeTypeData, GWEN_Buffer_GetStart(tbuf)); GWEN_XMLNode_AddChild(nnnn, nnnnn); GWEN_Buffer_free(tbuf); } } /* create "CdtrAgt" */ s=AB_Transaction_GetRemoteBic(t); if (s && *s) GWEN_XMLNode_SetCharValueByPath(nn, GWEN_XML_PATH_FLAGS_OVERWRITE_VALUES, "CdtrAgt/FinInstnId/BIC", s); else if (doctype[1]<3) { /* BIC not required since 001.003.03 */ DBG_ERROR(AQBANKING_LOGDOMAIN, "No remote BIC"); AB_Transaction_List2Iterator_free(it); AH_ImExporter_Sepa_PmtInf_List_free(pl); return GWEN_ERROR_BAD_DATA; } /* create "Cdtr" */ nnn=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "Cdtr"); if (nnn) { GWEN_XMLNode_AddChild(nn, nnn); s=AB_Transaction_GetRemoteName(t); if (!(s && *s)) { DBG_ERROR(AQBANKING_LOGDOMAIN, "No remote name"); AB_Transaction_List2Iterator_free(it); AH_ImExporter_Sepa_PmtInf_List_free(pl); return GWEN_ERROR_BAD_DATA; } AH_ImExporterSEPA_XmlSetCharValueEscaped(nnn, "Nm", s); } /* create "CdtrAcct" */ nnn=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "CdtrAcct"); if (nnn) { GWEN_XMLNODE *nnnn; GWEN_XMLNode_AddChild(nn, nnn); s=AB_Transaction_GetRemoteIban(t); if (!s) { DBG_ERROR(AQBANKING_LOGDOMAIN, "No remote IBAN"); AB_Transaction_List2Iterator_free(it); AH_ImExporter_Sepa_PmtInf_List_free(pl); return GWEN_ERROR_BAD_DATA; } nnnn=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "Id"); if (nnnn) { GWEN_XMLNode_AddChild(nnn, nnnn); AH_ImExporterSEPA_XmlSetCharValueEscaped(nnnn, "IBAN", s); } } /* create "RmtInf" */ nnn=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "RmtInf"); if (nnn) { GWEN_XMLNode_AddChild(nn, nnn); s=AB_Transaction_GetPurpose(t); if (!(s && *s)) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Missing purpose in transaction"); AB_Transaction_List2Iterator_free(it); AH_ImExporter_Sepa_PmtInf_List_free(pl); return GWEN_ERROR_BAD_DATA; } AH_ImExporterSEPA_XmlSetCharValueEscaped(nnn, "Ustrd", s); } } t=AB_Transaction_List2Iterator_Next(it); } /* while t */ AB_Transaction_List2Iterator_free(it); pmtinf=AH_ImExporter_Sepa_PmtInf_List_Next(pmtinf); } /* while pmtinf */ AH_ImExporter_Sepa_PmtInf_List_free(pl); return 0; } aqbanking-6.6.1/src/libs/plugins/imexporters/sepa/Makefile.am0000664000175000017500000000145014043610745021154 00000000000000SUBDIRS=profiles AM_CPPFLAGS = -I$(top_srcdir)/src/libs \ -I$(top_builddir)/src/libs \ $(gwenhywfar_includes) AM_CFLAGS=-DBUILDING_AQBANKING @visibility_cflags@ extra_sources=\ sepa_pain_001.c \ sepa_pain_008.c EXTRA_DIST=README $(extra_sources) noinst_HEADERS=sepa_p.h sepa.h imexporterplugindir = $(aqbanking_plugindir)/imexporters noinst_LTLIBRARIES=libabimexporters_sepa.la imexporterplugin_DATA=sepa.xml libabimexporters_sepa_la_SOURCES=sepa.c typefiles: typedefs: sources: for f in $(libabimexporters_sepa_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for f in $(imexporterplugin_DATA); do \ echo $(subdir)/$$f >>$(top_srcdir)/pdsources; \ done cppcheck: for f in $(libabimexporters_sepa_la_SOURCES); do \ cppcheck --force $$f ; \ done aqbanking-6.6.1/src/libs/plugins/imexporters/sepa/profiles/0000755000175000017500000000000015037736160021025 500000000000000aqbanking-6.6.1/src/libs/plugins/imexporters/sepa/profiles/008_002_02.conf0000664000175000017500000000066114043610745023006 00000000000000 char name="008_002_02" char shortDescr="pain.008.002.02" char longDescr="Profile for pain.008.002.02" int import="0" int export="1" char type="008.002.02" # XML namespace of the pain messages handled by this profile char xmlns="urn:iso:std:iso:20022:tech:xsd:pain.008.002.02" # Disable this option if transactions initiated in a batch job should # not be listed seperately in your account statements. int singleBookingWanted="1" aqbanking-6.6.1/src/libs/plugins/imexporters/sepa/profiles/008_001_01.conf0000664000175000017500000000040714043610745023002 00000000000000 char name="008_001_01" char shortDescr="pain.008.001.01" char longDescr="Profile for pain.008.001.01" int import="0" int export="1" char type="008.001.01" # XML namespace of the pain messages handled by this profile char xmlns="urn:sepade:xsd:pain.008.001.01" aqbanking-6.6.1/src/libs/plugins/imexporters/sepa/profiles/001_002_03.conf0000664000175000017500000000066114043610745023000 00000000000000 char name="001_002_03" char shortDescr="pain.001.002.03" char longDescr="Profile for pain.001.002.03" int import="0" int export="1" char type="001.002.03" # XML namespace of the pain messages handled by this profile char xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.002.03" # Disable this option if transactions initiated in a batch job should # not be listed seperately in your account statements. int singleBookingWanted="1" aqbanking-6.6.1/src/libs/plugins/imexporters/sepa/profiles/008_003_02.conf0000664000175000017500000000106014043610745023001 00000000000000 char name="008_003_02" char shortDescr="pain.008.003.02" char longDescr="Profile for pain.008.003.02" int import="0" int export="1" char type="008.003.02" # XML namespace of the pain messages handled by this profile char xmlns="urn:iso:std:iso:20022:tech:xsd:pain.008.003.02" # Determine the type of direct debit transactions. # Options: CORE (default), COR1, B2B. #char LocalInstrumentSEPACode="CORE" # Disable this option if transactions initiated in a batch job should # not be listed seperately in your account statements. int singleBookingWanted="1" aqbanking-6.6.1/src/libs/plugins/imexporters/sepa/profiles/001_003_03.conf0000664000175000017500000000066114043610745023001 00000000000000 char name="001_003_03" char shortDescr="pain.001.003.03" char longDescr="Profile for pain.001.003.03" int import="0" int export="1" char type="001.003.03" # XML namespace of the pain messages handled by this profile char xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.003.03" # Disable this option if transactions initiated in a batch job should # not be listed seperately in your account statements. int singleBookingWanted="1" aqbanking-6.6.1/src/libs/plugins/imexporters/sepa/profiles/001_001_09.conf0000664000175000017500000000042014730347270023001 00000000000000 char name="001_001_09" char shortDescr="pain.001.001.09 (sepade)" char longDescr="Profile for pain.001.001.09" int import="0" int export="1" char type="001.001.09" # XML namespace of the pain messages handled by this profile char xmlns="urn:sepade:xsd:pain.001.001.09" aqbanking-6.6.1/src/libs/plugins/imexporters/sepa/profiles/001_001_03.conf0000664000175000017500000000042014730347270022773 00000000000000 char name="001_001_03" char shortDescr="pain.001.001.03 (sepade)" char longDescr="Profile for pain.001.001.03" int import="0" int export="1" char type="001.001.03" # XML namespace of the pain messages handled by this profile char xmlns="urn:sepade:xsd:pain.001.001.03" aqbanking-6.6.1/src/libs/plugins/imexporters/sepa/profiles/Makefile.in0000644000175000017500000004614715037736026023027 00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/libs/plugins/imexporters/sepa/profiles ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/distri.m4 $(top_srcdir)/m4/gwenhywfar.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/os.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(profilesdir)" DATA = $(profiles_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADD_ACLOCAL_FLAGS = @ADD_ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AQBANKING_CLI_VERSION_STRING = @AQBANKING_CLI_VERSION_STRING@ AQBANKING_FINTS_VERSION_STRING = @AQBANKING_FINTS_VERSION_STRING@ AQBANKING_SO_AGE = @AQBANKING_SO_AGE@ AQBANKING_SO_CURRENT = @AQBANKING_SO_CURRENT@ AQBANKING_SO_EFFECTIVE = @AQBANKING_SO_EFFECTIVE@ AQBANKING_SO_REVISION = @AQBANKING_SO_REVISION@ AQBANKING_VERSION_BUILD = @AQBANKING_VERSION_BUILD@ AQBANKING_VERSION_FULL_STRING = @AQBANKING_VERSION_FULL_STRING@ AQBANKING_VERSION_MAJOR = @AQBANKING_VERSION_MAJOR@ AQBANKING_VERSION_MINOR = @AQBANKING_VERSION_MINOR@ AQBANKING_VERSION_PATCHLEVEL = @AQBANKING_VERSION_PATCHLEVEL@ AQBANKING_VERSION_RELEASE_STRING = @AQBANKING_VERSION_RELEASE_STRING@ AQBANKING_VERSION_STRING = @AQBANKING_VERSION_STRING@ AQBANKING_VERSION_TAG = @AQBANKING_VERSION_TAG@ AQEBICS_CFLAGS = @AQEBICS_CFLAGS@ AQEBICS_LIBS = @AQEBICS_LIBS@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATETIME = @DATETIME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_EXCLUDE_PATTERNS = @DOXYGEN_EXCLUDE_PATTERNS@ DOXYGEN_FILE_PATTERNS = @DOXYGEN_FILE_PATTERNS@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENGUI_GTK2_CFLAGS = @GWENGUI_GTK2_CFLAGS@ GWENGUI_GTK2_LIBS = @GWENGUI_GTK2_LIBS@ GWENHYWFAR_MINIMUM_VERSION = @GWENHYWFAR_MINIMUM_VERSION@ HAVE_GWENGUI_GTK2 = @HAVE_GWENGUI_GTK2@ HAVE_I18N = @HAVE_I18N@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIBXSLT_CFLAGS = @LIBXSLT_CFLAGS@ LIBXSLT_LIBS = @LIBXSLT_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_SUPPORTS_QT = @MSGFMT_SUPPORTS_QT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ TUTORIALS = @TUTORIALS@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XMLMERGE = @XMLMERGE@ XMLSEC_CFLAGS = @XMLSEC_CFLAGS@ XMLSEC_LIBS = @XMLSEC_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ aqbanking_backends = @aqbanking_backends@ aqbanking_cfg_searchdir = @aqbanking_cfg_searchdir@ aqbanking_data_searchdir = @aqbanking_data_searchdir@ aqbanking_headerdir = @aqbanking_headerdir@ aqbanking_headerdir_am = @aqbanking_headerdir_am@ aqbanking_includes = @aqbanking_includes@ aqbanking_internal_libs = @aqbanking_internal_libs@ aqbanking_ldflags = @aqbanking_ldflags@ aqbanking_libs = @aqbanking_libs@ aqbanking_locale_searchdir = @aqbanking_locale_searchdir@ aqbanking_modules = @aqbanking_modules@ aqbanking_pkgdatadir = @aqbanking_pkgdatadir@ aqbanking_plugin_searchdir = @aqbanking_plugin_searchdir@ aqbanking_plugindir = @aqbanking_plugindir@ aqbanking_plugins_backends_dirs = @aqbanking_plugins_backends_dirs@ aqbanking_plugins_backends_libs = @aqbanking_plugins_backends_libs@ aqbanking_plugins_bankinfo_dirs = @aqbanking_plugins_bankinfo_dirs@ aqbanking_plugins_bankinfo_libs = @aqbanking_plugins_bankinfo_libs@ aqbanking_plugins_imexporters_dirs = @aqbanking_plugins_imexporters_dirs@ aqbanking_plugins_imexporters_libs = @aqbanking_plugins_imexporters_libs@ aqbanking_plugins_parsers_dirs = @aqbanking_plugins_parsers_dirs@ aqbanking_symlinkdir = @aqbanking_symlinkdir@ aqbanking_sys_is_windows = @aqbanking_sys_is_windows@ aqbankingpp_modules = @aqbankingpp_modules@ aqebics_datadir = @aqebics_datadir@ aqebics_includes = @aqebics_includes@ aqebics_internal_libs = @aqebics_internal_libs@ aqebics_ldflags = @aqebics_ldflags@ aqebics_libs = @aqebics_libs@ aqfints_datadir = @aqfints_datadir@ aqhbci_datadir = @aqhbci_datadir@ aqhbci_includes = @aqhbci_includes@ aqhbci_internal_libs = @aqhbci_internal_libs@ aqhbci_ldflags = @aqhbci_ldflags@ aqhbci_libs = @aqhbci_libs@ aqofxconnect_includes = @aqofxconnect_includes@ aqofxconnect_internal_libs = @aqofxconnect_internal_libs@ aqofxconnect_libs = @aqofxconnect_libs@ aqpaypal_includes = @aqpaypal_includes@ aqpaypal_internal_libs = @aqpaypal_internal_libs@ aqpaypal_libs = @aqpaypal_libs@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gmp_libs = @gmp_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_dir = @gwenhywfar_dir@ gwenhywfar_has_crypt = @gwenhywfar_has_crypt@ gwenhywfar_headers = @gwenhywfar_headers@ gwenhywfar_includes = @gwenhywfar_includes@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_plugins = @gwenhywfar_plugins@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ typemaker2_exe = @typemaker2_exe@ visibility_cflags = @visibility_cflags@ with_aqebics = @with_aqebics@ with_aqhbci = @with_aqhbci@ profilesdir = $(aqbanking_pkgdatadir)/imexporters/sepa/profiles profiles_DATA = default.conf 001_001_02.conf 001_001_03.conf 001_001_09.conf 001_002_03.conf 001_003_03.conf 008_001_01.conf 008_002_02.conf 008_003_02.conf EXTRA_DIST = $(profiles_DATA) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libs/plugins/imexporters/sepa/profiles/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libs/plugins/imexporters/sepa/profiles/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-profilesDATA: $(profiles_DATA) @$(NORMAL_INSTALL) @list='$(profiles_DATA)'; test -n "$(profilesdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(profilesdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(profilesdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(profilesdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(profilesdir)" || exit $$?; \ done uninstall-profilesDATA: @$(NORMAL_UNINSTALL) @list='$(profiles_DATA)'; test -n "$(profilesdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(profilesdir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(profilesdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-profilesDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-profilesDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-profilesDATA install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags-am uninstall uninstall-am uninstall-profilesDATA .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: aqbanking-6.6.1/src/libs/plugins/imexporters/sepa/profiles/default.conf0000664000175000017500000000043614043610745023241 00000000000000 char name="default" char shortDescr="default profile" char version="5.99.8" char longDescr="This profile supports transfers" int import="0" int export="1" char type="001.001.02" # XML namespace of the pain messages handled by this profile char xmlns="urn:sepade:xsd:pain.001.001.02" aqbanking-6.6.1/src/libs/plugins/imexporters/sepa/profiles/Makefile.am0000664000175000017500000000037214730347270023004 00000000000000 profilesdir = $(aqbanking_pkgdatadir)/imexporters/sepa/profiles profiles_DATA=default.conf 001_001_02.conf 001_001_03.conf 001_001_09.conf 001_002_03.conf 001_003_03.conf 008_001_01.conf 008_002_02.conf 008_003_02.conf EXTRA_DIST=$(profiles_DATA) aqbanking-6.6.1/src/libs/plugins/imexporters/sepa/profiles/001_001_02.conf0000664000175000017500000000046114043610745022774 00000000000000 char name="001_001_02" char shortDescr="pain.001.001.02 (sepade)" char longDescr="Profile for pain.001.001.02 (sepade rather than ISO version)" int import="0" int export="1" char type="001.001.02" # XML namespace of the pain messages handled by this profile char xmlns="urn:sepade:xsd:pain.001.001.02" aqbanking-6.6.1/src/libs/plugins/imexporters/sepa/sepa_pain_008.c0000664000175000017500000003603014043610745021614 00000000000000 /* included by sepa.c */ #include int AH_ImExporterSEPA_Export_Pain_008(AB_IMEXPORTER *ie, AB_IMEXPORTER_CONTEXT *ctx, GWEN_XMLNODE *painNode, uint32_t doctype[], GWEN_DB_NODE *params) { GWEN_XMLNODE *n; AH_IMEXPORTER_SEPA_PMTINF_LIST *pl; AH_IMEXPORTER_SEPA_PMTINF *pmtinf; int is_8_1_1=(doctype[1]==1 && doctype[2]==1); const char *s; int rv; rv=AH_ImExporterSEPA_Export_Pain_Setup(ie, ctx, painNode, doctype, &pl); if (rv) { DBG_ERROR(AQBANKING_LOGDOMAIN, "here %d", rv); return rv; } /* generate PmtInf blocks */ pmtinf=AH_ImExporter_Sepa_PmtInf_List_First(pl); while (pmtinf) { const GWEN_DATE *tda; GWEN_XMLNODE *nn; AB_TRANSACTION *t; AB_TRANSACTION_LIST2_ITERATOR *it; n=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "PmtInf"); GWEN_XMLNode_AddChild(painNode, n); /* generate PmtInfId */ if (1) { GWEN_TIME *ti; GWEN_BUFFER *tbuf; uint32_t uid; char numbuf[32]; ti=GWEN_CurrentTime(); tbuf=GWEN_Buffer_new(0, 64, 0, 1); uid=AB_Banking_GetNamedUniqueId(AB_ImExporter_GetBanking(ie), "sepamsg", 1); GWEN_Time_toUtcString(ti, "YYYYMMDD-hh:mm:ss-", tbuf); snprintf(numbuf, sizeof(numbuf)-1, "%08x", uid); GWEN_Buffer_AppendString(tbuf, numbuf); AH_ImExporterSEPA_XmlSetCharValueEscaped(n, "PmtInfId", GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); GWEN_Time_free(ti); } AH_ImExporterSEPA_XmlSetCharValueEscaped(n, "PmtMtd", "DD"); if (!is_8_1_1) { /* store BtchBookg */ AH_ImExporterSEPA_XmlSetCharValueEscaped(n, "BtchBookg", GWEN_DB_GetIntValue(params, "singleBookingWanted", 0, 1) ? "false" : "true"); /* store NbOfTxs */ GWEN_XMLNode_SetIntValue(n, "NbOfTxs", pmtinf->tcount); /* store CtrlSum */ AH_ImExporterSEPA_XmlSetCharValueEscaped(n, "CtrlSum", pmtinf->ctrlsum); } /* PmtTpInf */ nn=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "PmtTpInf"); if (nn) { GWEN_XMLNODE *nnn; nnn=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "SvcLvl"); if (nnn) { AH_ImExporterSEPA_XmlSetCharValueEscaped(nnn, "Cd", "SEPA"); GWEN_XMLNode_AddChild(nn, nnn); } if (!is_8_1_1) { s=GWEN_DB_GetCharValue(params, "LocalInstrumentSEPACode", 0, "CORE"); if ((doctype[1]>=3 && !strcmp(s, "COR1")) || /* new in 008.003.02 */ !strcmp(s, "CORE") || !strcmp(s, "B2B")) GWEN_XMLNode_SetCharValueByPath(nn, GWEN_XML_PATH_FLAGS_OVERWRITE_VALUES, "LclInstrm/Cd", s); else { DBG_ERROR(AQBANKING_LOGDOMAIN, "Invalid Local InstrumentCode"); AH_ImExporter_Sepa_PmtInf_List_free(pl); return GWEN_ERROR_BAD_DATA; } } switch (pmtinf->sequenceType) { case AB_Transaction_SequenceOnce: AH_ImExporterSEPA_XmlSetCharValueEscaped(nn, "SeqTp", "OOFF"); break; case AB_Transaction_SequenceFirst: AH_ImExporterSEPA_XmlSetCharValueEscaped(nn, "SeqTp", "FRST"); break; case AB_Transaction_SequenceFollowing: AH_ImExporterSEPA_XmlSetCharValueEscaped(nn, "SeqTp", "RCUR"); break; case AB_Transaction_SequenceFinal: AH_ImExporterSEPA_XmlSetCharValueEscaped(nn, "SeqTp", "FNAL"); break; default: DBG_ERROR(AQBANKING_LOGDOMAIN, "Sequence type of debit note unknown"); AH_ImExporter_Sepa_PmtInf_List_free(pl); return GWEN_ERROR_BAD_DATA; } GWEN_XMLNode_AddChild(n, nn); } /* create "ReqdColltnDt" */ tda=pmtinf->date; if (tda) { GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 64, 0, 1); GWEN_Date_toStringWithTemplate(tda, "YYYY-MM-DD", tbuf); AH_ImExporterSEPA_XmlSetCharValueEscaped(n, "ReqdColltnDt", GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } else { AH_ImExporterSEPA_XmlSetCharValueEscaped(n, "ReqdColltnDt", "1999-01-01"); } /* create "Cdtr" */ nn=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "Cdtr"); if (nn) { GWEN_XMLNode_AddChild(n, nn); AH_ImExporterSEPA_XmlSetCharValueEscaped(nn, "Nm", pmtinf->localName); } /* create "CdtrAcct" */ GWEN_XMLNode_SetCharValueByPath(n, GWEN_XML_PATH_FLAGS_OVERWRITE_VALUES, "CdtrAcct/Id/IBAN", pmtinf->localIban); /* create "CdtrAgt" */ { const char *bic = pmtinf->localBic; if (bic && *bic) GWEN_XMLNode_SetCharValueByPath(n, GWEN_XML_PATH_FLAGS_OVERWRITE_VALUES, "CdtrAgt/FinInstnId/BIC", bic); else { if (doctype[1] >= 3) { /* BIC not required since 008.003.02, but must be written as "Othr/Id/NOTPROVIDED" */ GWEN_XMLNode_SetCharValueByPath(n, GWEN_XML_PATH_FLAGS_OVERWRITE_VALUES, "CdtrAgt/FinInstnId/Othr/Id", "NOTPROVIDED"); } else { /* For PAIN before 008.003.02, BIC is always required */ DBG_ERROR(AQBANKING_LOGDOMAIN, "No local BIC, but is required"); return GWEN_ERROR_BAD_DATA; } } } AH_ImExporterSEPA_XmlSetCharValueEscaped(n, "ChrgBr", "SLEV"); /* create "CdtrSchmeId" */ if (!is_8_1_1) { /* Otherwise set on DrctDbtTx level */ GWEN_XMLNode_SetCharValueByPath(n, GWEN_XML_PATH_FLAGS_OVERWRITE_VALUES, "CdtrSchmeId/Id/PrvtId/Othr/Id", pmtinf->creditorSchemeId); GWEN_XMLNode_SetCharValueByPath(n, GWEN_XML_PATH_FLAGS_OVERWRITE_VALUES, "CdtrSchmeId/Id/PrvtId/Othr/SchmeNm/Prtry", "SEPA"); } /* DrctDbtTxInf */ it=AB_Transaction_List2_First(pmtinf->transactions); assert(it); t=AB_Transaction_List2Iterator_Data(it); while (t) { GWEN_XMLNODE *nn; nn=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "DrctDbtTxInf"); if (nn) { GWEN_XMLNODE *nnn; const AB_VALUE *tv; GWEN_XMLNode_AddChild(n, nn); /* create "PmtId/EndToEndId" */ s=AB_Transaction_GetEndToEndReference(t); if (!(s && *s)) s=AB_Transaction_GetCustomerReference(t); if (!(s && *s)) s="NOTPROVIDED"; GWEN_XMLNode_SetCharValueByPath(nn, GWEN_XML_PATH_FLAGS_OVERWRITE_VALUES, "PmtId/EndToEndId", s); tv=AB_Transaction_GetValue(t); if (tv==NULL) { DBG_ERROR(AQBANKING_LOGDOMAIN, "No value in transaction"); AB_Transaction_List2Iterator_free(it); AH_ImExporter_Sepa_PmtInf_List_free(pl); return GWEN_ERROR_BAD_DATA; } nnn=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "InstdAmt"); if (nnn) { GWEN_BUFFER *tbuf; GWEN_XMLNODE *nnnn; GWEN_XMLNode_AddChild(nn, nnn); tbuf=GWEN_Buffer_new(0, 64, 0, 1); AB_Value_toHumanReadableString(tv, tbuf, 2, 0); s=AB_Value_GetCurrency(tv); if (!s) s="EUR"; GWEN_XMLNode_SetProperty(nnn, "Ccy", s); nnnn=GWEN_XMLNode_new(GWEN_XMLNodeTypeData, GWEN_Buffer_GetStart(tbuf)); GWEN_XMLNode_AddChild(nnn, nnnn); GWEN_Buffer_free(tbuf); } /* DrctDbtTx */ nnn=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "DrctDbtTx"); if (nnn) { GWEN_XMLNODE *nnnn; GWEN_XMLNode_AddChild(nn, nnn); /* add mandate info */ nnnn=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "MndtRltdInf"); if (nnnn) { const char *mandateId; const char *origCredSchemId; const char *origMandateId; const char *origCreditorName; const GWEN_DATE *dt; GWEN_BUFFER *tbuf; GWEN_XMLNode_AddChild(nnn, nnnn); dt=AB_Transaction_GetMandateDate(t); if (!dt) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Missing mandate date for direct debit"); AB_Transaction_List2Iterator_free(it); AH_ImExporter_Sepa_PmtInf_List_free(pl); return GWEN_ERROR_BAD_DATA; } mandateId=AB_Transaction_GetMandateId(t); if (!mandateId) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Missing mandate id for direct debit"); AB_Transaction_List2Iterator_free(it); AH_ImExporter_Sepa_PmtInf_List_free(pl); return GWEN_ERROR_BAD_DATA; } origCredSchemId=AB_Transaction_GetOriginalCreditorSchemeId(t); origMandateId=AB_Transaction_GetOriginalMandateId(t); origCreditorName=AB_Transaction_GetOriginalCreditorName(t); /* MndtId */ AH_ImExporterSEPA_XmlSetCharValueEscaped(nnnn, "MndtId", mandateId); /* DtOfSgntr */ tbuf=GWEN_Buffer_new(0, 32, 0, 1); rv=GWEN_Date_toStringWithTemplate(dt, "YYYY-MM-DD", tbuf); if (rv<0) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Error converting date to string"); GWEN_Buffer_free(tbuf); AB_Transaction_List2Iterator_free(it); AH_ImExporter_Sepa_PmtInf_List_free(pl); return rv; } AH_ImExporterSEPA_XmlSetCharValueEscaped(nnnn, "DtOfSgntr", GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); if ((origCredSchemId && *origCredSchemId) || (origMandateId && *origMandateId) || (origCreditorName && *origCreditorName)) { GWEN_XMLNODE *n5; AH_ImExporterSEPA_XmlSetCharValueEscaped(nnnn, "AmdmntInd", "true"); n5=GWEN_XMLNode_GetNodeByXPath(nnnn, "AmdmntInfDtls/OrgnlCdtrSchmeId", 0); if (n5) { if (origMandateId && *origMandateId) AH_ImExporterSEPA_XmlSetCharValueEscaped(n5, "OrgnlMndtId", origMandateId); if (origCreditorName && *origCreditorName) AH_ImExporterSEPA_XmlSetCharValueEscaped(n5, "Nm", origCreditorName); if (origCredSchemId && *origCredSchemId) { GWEN_XMLNode_SetCharValueByPath(n5, GWEN_XML_PATH_FLAGS_OVERWRITE_VALUES, !is_8_1_1 ? "Id/PrvtId/Othr/Id" : "Id/PrvtId/OthrId/Id", origCredSchemId); GWEN_XMLNode_SetCharValueByPath(n5, GWEN_XML_PATH_FLAGS_OVERWRITE_VALUES, !is_8_1_1 ? "Id/PrvtId/Othr/SchmeNm/Prtry" : "Id/PrvtId/OthrId/IdTp", "SEPA"); } } } else { AH_ImExporterSEPA_XmlSetCharValueEscaped(nnnn, "AmdmntInd", "false"); } } /* create "CdtrSchmeId" */ if (is_8_1_1) { /* Otherwise set on PmtInf level */ GWEN_XMLNode_SetCharValueByPath(nnn, GWEN_XML_PATH_FLAGS_OVERWRITE_VALUES, "CdtrSchmeId/Id/PrvtId/OthrId/Id", pmtinf->creditorSchemeId); GWEN_XMLNode_SetCharValueByPath(nnn, GWEN_XML_PATH_FLAGS_OVERWRITE_VALUES, "CdtrSchmeId/Id/PrvtId/OthrId/IdTp", "SEPA"); } } /* create "DbtrAgt" */ s=AB_Transaction_GetRemoteBic(t); if (s && *s) GWEN_XMLNode_SetCharValueByPath(nn, GWEN_XML_PATH_FLAGS_OVERWRITE_VALUES, "DbtrAgt/FinInstnId/BIC", s); else { if (doctype[1] >= 3) { /* BIC not required since 008.003.02, but must be written as "Othr/Id/NOTPROVIDED" */ GWEN_XMLNode_SetCharValueByPath(nn, GWEN_XML_PATH_FLAGS_OVERWRITE_VALUES, "DbtrAgt/FinInstnId/Othr/Id", "NOTPROVIDED"); } else { /* For PAIN before 008.003.02, BIC is always required */ DBG_ERROR(AQBANKING_LOGDOMAIN, "No remote BIC"); AB_Transaction_List2Iterator_free(it); AH_ImExporter_Sepa_PmtInf_List_free(pl); return GWEN_ERROR_BAD_DATA; } } /* create "Dbtr" */ nnn=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "Dbtr"); if (nnn) { const char *s; GWEN_XMLNode_AddChild(nn, nnn); s=AB_Transaction_GetRemoteName(t); if (!(s && *s)) { DBG_ERROR(AQBANKING_LOGDOMAIN, "No remote name"); AB_Transaction_List2Iterator_free(it); AH_ImExporter_Sepa_PmtInf_List_free(pl); return GWEN_ERROR_BAD_DATA; } AH_ImExporterSEPA_XmlSetCharValueEscaped(nnn, "Nm", s); } /* create "DbtrAcct" */ nnn=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "DbtrAcct"); if (nnn) { GWEN_XMLNODE *nnnn; GWEN_XMLNode_AddChild(nn, nnn); s=AB_Transaction_GetRemoteIban(t); if (!s) { DBG_ERROR(AQBANKING_LOGDOMAIN, "No remote IBAN"); AB_Transaction_List2Iterator_free(it); AH_ImExporter_Sepa_PmtInf_List_free(pl); return GWEN_ERROR_BAD_DATA; } nnnn=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "Id"); if (nnnn) { GWEN_XMLNode_AddChild(nnn, nnnn); AH_ImExporterSEPA_XmlSetCharValueEscaped(nnnn, "IBAN", s); } } /* add "Ultimate Debitor Name", if given */ s=AB_Transaction_GetMandateDebitorName(t); if (s && *s) GWEN_XMLNode_SetCharValueByPath(nn, GWEN_XML_PATH_FLAGS_OVERWRITE_VALUES, "UltmtDbtr/Nm", s); /* create "RmtInf" */ nnn=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "RmtInf"); if (nnn) { GWEN_BUFFER *tbuf; GWEN_XMLNode_AddChild(nn, nnn); s=AB_Transaction_GetPurpose(t); if (!(s && *s)) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Missing purpose in transaction"); AB_Transaction_List2Iterator_free(it); AH_ImExporter_Sepa_PmtInf_List_free(pl); return GWEN_ERROR_BAD_DATA; } tbuf=GWEN_Buffer_new(0, 140, 0, 1); GWEN_Buffer_AppendString(tbuf, s); if (GWEN_Buffer_GetUsedBytes(tbuf)>140) GWEN_Buffer_Crop(tbuf, 0, 140); AH_ImExporterSEPA_XmlSetCharValueEscaped(nnn, "Ustrd", GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } } t=AB_Transaction_List2Iterator_Next(it); } /* while t */ AB_Transaction_List2Iterator_free(it); pmtinf=AH_ImExporter_Sepa_PmtInf_List_Next(pmtinf); } /* while pmtinf */ AH_ImExporter_Sepa_PmtInf_List_free(pl); return 0; } aqbanking-6.6.1/src/libs/plugins/imexporters/sepa/Makefile.in0000644000175000017500000007357615037736026021212 00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/libs/plugins/imexporters/sepa ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/distri.m4 $(top_srcdir)/m4/gwenhywfar.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/os.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = sepa.xml CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libabimexporters_sepa_la_LIBADD = am_libabimexporters_sepa_la_OBJECTS = sepa.lo libabimexporters_sepa_la_OBJECTS = \ $(am_libabimexporters_sepa_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/sepa.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libabimexporters_sepa_la_SOURCES) DIST_SOURCES = $(libabimexporters_sepa_la_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(imexporterplugindir)" DATA = $(imexporterplugin_DATA) HEADERS = $(noinst_HEADERS) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir distdir-am am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/sepa.xml.in \ $(top_srcdir)/depcomp README DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ADD_ACLOCAL_FLAGS = @ADD_ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AQBANKING_CLI_VERSION_STRING = @AQBANKING_CLI_VERSION_STRING@ AQBANKING_FINTS_VERSION_STRING = @AQBANKING_FINTS_VERSION_STRING@ AQBANKING_SO_AGE = @AQBANKING_SO_AGE@ AQBANKING_SO_CURRENT = @AQBANKING_SO_CURRENT@ AQBANKING_SO_EFFECTIVE = @AQBANKING_SO_EFFECTIVE@ AQBANKING_SO_REVISION = @AQBANKING_SO_REVISION@ AQBANKING_VERSION_BUILD = @AQBANKING_VERSION_BUILD@ AQBANKING_VERSION_FULL_STRING = @AQBANKING_VERSION_FULL_STRING@ AQBANKING_VERSION_MAJOR = @AQBANKING_VERSION_MAJOR@ AQBANKING_VERSION_MINOR = @AQBANKING_VERSION_MINOR@ AQBANKING_VERSION_PATCHLEVEL = @AQBANKING_VERSION_PATCHLEVEL@ AQBANKING_VERSION_RELEASE_STRING = @AQBANKING_VERSION_RELEASE_STRING@ AQBANKING_VERSION_STRING = @AQBANKING_VERSION_STRING@ AQBANKING_VERSION_TAG = @AQBANKING_VERSION_TAG@ AQEBICS_CFLAGS = @AQEBICS_CFLAGS@ AQEBICS_LIBS = @AQEBICS_LIBS@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATETIME = @DATETIME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_EXCLUDE_PATTERNS = @DOXYGEN_EXCLUDE_PATTERNS@ DOXYGEN_FILE_PATTERNS = @DOXYGEN_FILE_PATTERNS@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENGUI_GTK2_CFLAGS = @GWENGUI_GTK2_CFLAGS@ GWENGUI_GTK2_LIBS = @GWENGUI_GTK2_LIBS@ GWENHYWFAR_MINIMUM_VERSION = @GWENHYWFAR_MINIMUM_VERSION@ HAVE_GWENGUI_GTK2 = @HAVE_GWENGUI_GTK2@ HAVE_I18N = @HAVE_I18N@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIBXSLT_CFLAGS = @LIBXSLT_CFLAGS@ LIBXSLT_LIBS = @LIBXSLT_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_SUPPORTS_QT = @MSGFMT_SUPPORTS_QT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ TUTORIALS = @TUTORIALS@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XMLMERGE = @XMLMERGE@ XMLSEC_CFLAGS = @XMLSEC_CFLAGS@ XMLSEC_LIBS = @XMLSEC_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ aqbanking_backends = @aqbanking_backends@ aqbanking_cfg_searchdir = @aqbanking_cfg_searchdir@ aqbanking_data_searchdir = @aqbanking_data_searchdir@ aqbanking_headerdir = @aqbanking_headerdir@ aqbanking_headerdir_am = @aqbanking_headerdir_am@ aqbanking_includes = @aqbanking_includes@ aqbanking_internal_libs = @aqbanking_internal_libs@ aqbanking_ldflags = @aqbanking_ldflags@ aqbanking_libs = @aqbanking_libs@ aqbanking_locale_searchdir = @aqbanking_locale_searchdir@ aqbanking_modules = @aqbanking_modules@ aqbanking_pkgdatadir = @aqbanking_pkgdatadir@ aqbanking_plugin_searchdir = @aqbanking_plugin_searchdir@ aqbanking_plugindir = @aqbanking_plugindir@ aqbanking_plugins_backends_dirs = @aqbanking_plugins_backends_dirs@ aqbanking_plugins_backends_libs = @aqbanking_plugins_backends_libs@ aqbanking_plugins_bankinfo_dirs = @aqbanking_plugins_bankinfo_dirs@ aqbanking_plugins_bankinfo_libs = @aqbanking_plugins_bankinfo_libs@ aqbanking_plugins_imexporters_dirs = @aqbanking_plugins_imexporters_dirs@ aqbanking_plugins_imexporters_libs = @aqbanking_plugins_imexporters_libs@ aqbanking_plugins_parsers_dirs = @aqbanking_plugins_parsers_dirs@ aqbanking_symlinkdir = @aqbanking_symlinkdir@ aqbanking_sys_is_windows = @aqbanking_sys_is_windows@ aqbankingpp_modules = @aqbankingpp_modules@ aqebics_datadir = @aqebics_datadir@ aqebics_includes = @aqebics_includes@ aqebics_internal_libs = @aqebics_internal_libs@ aqebics_ldflags = @aqebics_ldflags@ aqebics_libs = @aqebics_libs@ aqfints_datadir = @aqfints_datadir@ aqhbci_datadir = @aqhbci_datadir@ aqhbci_includes = @aqhbci_includes@ aqhbci_internal_libs = @aqhbci_internal_libs@ aqhbci_ldflags = @aqhbci_ldflags@ aqhbci_libs = @aqhbci_libs@ aqofxconnect_includes = @aqofxconnect_includes@ aqofxconnect_internal_libs = @aqofxconnect_internal_libs@ aqofxconnect_libs = @aqofxconnect_libs@ aqpaypal_includes = @aqpaypal_includes@ aqpaypal_internal_libs = @aqpaypal_internal_libs@ aqpaypal_libs = @aqpaypal_libs@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gmp_libs = @gmp_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_dir = @gwenhywfar_dir@ gwenhywfar_has_crypt = @gwenhywfar_has_crypt@ gwenhywfar_headers = @gwenhywfar_headers@ gwenhywfar_includes = @gwenhywfar_includes@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_plugins = @gwenhywfar_plugins@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ typemaker2_exe = @typemaker2_exe@ visibility_cflags = @visibility_cflags@ with_aqebics = @with_aqebics@ with_aqhbci = @with_aqhbci@ SUBDIRS = profiles AM_CPPFLAGS = -I$(top_srcdir)/src/libs \ -I$(top_builddir)/src/libs \ $(gwenhywfar_includes) AM_CFLAGS = -DBUILDING_AQBANKING @visibility_cflags@ extra_sources = \ sepa_pain_001.c \ sepa_pain_008.c EXTRA_DIST = README $(extra_sources) noinst_HEADERS = sepa_p.h sepa.h imexporterplugindir = $(aqbanking_plugindir)/imexporters noinst_LTLIBRARIES = libabimexporters_sepa.la imexporterplugin_DATA = sepa.xml libabimexporters_sepa_la_SOURCES = sepa.c all: all-recursive .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libs/plugins/imexporters/sepa/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libs/plugins/imexporters/sepa/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): sepa.xml: $(top_builddir)/config.status $(srcdir)/sepa.xml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libabimexporters_sepa.la: $(libabimexporters_sepa_la_OBJECTS) $(libabimexporters_sepa_la_DEPENDENCIES) $(EXTRA_libabimexporters_sepa_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libabimexporters_sepa_la_OBJECTS) $(libabimexporters_sepa_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sepa.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-imexporterpluginDATA: $(imexporterplugin_DATA) @$(NORMAL_INSTALL) @list='$(imexporterplugin_DATA)'; test -n "$(imexporterplugindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(imexporterplugindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(imexporterplugindir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(imexporterplugindir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(imexporterplugindir)" || exit $$?; \ done uninstall-imexporterpluginDATA: @$(NORMAL_UNINSTALL) @list='$(imexporterplugin_DATA)'; test -n "$(imexporterplugindir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(imexporterplugindir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(imexporterplugindir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-recursive -rm -f ./$(DEPDIR)/sepa.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-imexporterpluginDATA install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f ./$(DEPDIR)/sepa.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-imexporterpluginDATA .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ am--depfiles check check-am clean clean-generic clean-libtool \ clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-imexporterpluginDATA install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am \ uninstall-imexporterpluginDATA .PRECIOUS: Makefile typefiles: typedefs: sources: for f in $(libabimexporters_sepa_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for f in $(imexporterplugin_DATA); do \ echo $(subdir)/$$f >>$(top_srcdir)/pdsources; \ done cppcheck: for f in $(libabimexporters_sepa_la_SOURCES); do \ cppcheck --force $$f ; \ done # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: aqbanking-6.6.1/src/libs/plugins/imexporters/sepa/sepa.c0000664000175000017500000003377314043610745020231 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "sepa_p.h" #include "aqbanking/i18n_l.h" #include #include #include #include #include #include #include #include GWEN_LIST_FUNCTIONS(AH_IMEXPORTER_SEPA_PMTINF, AH_ImExporter_Sepa_PmtInf) GWEN_INHERIT(AB_IMEXPORTER, AH_IMEXPORTER_SEPA); static AH_IMEXPORTER_SEPA_PMTINF *AH_ImExporter_Sepa_PmtInf_new() { AH_IMEXPORTER_SEPA_PMTINF *pmtinf; GWEN_NEW_OBJECT(AH_IMEXPORTER_SEPA_PMTINF, pmtinf) GWEN_LIST_INIT(AH_IMEXPORTER_SEPA_PMTINF, pmtinf) pmtinf->value=AB_Value_new(); pmtinf->transactions=AB_Transaction_List2_new(); return pmtinf; } static void AH_ImExporter_Sepa_PmtInf_free(AH_IMEXPORTER_SEPA_PMTINF *pmtinf) { if (pmtinf) { free(pmtinf->ctrlsum); AB_Value_free(pmtinf->value); AB_Transaction_List2_free(pmtinf->transactions); GWEN_LIST_FINI(AH_IMEXPORTER_SEPA_PMTINF, pmtinf) GWEN_FREE_OBJECT(pmtinf) } } AB_IMEXPORTER *AB_ImExporterSEPA_new(AB_BANKING *ab) { AB_IMEXPORTER *ie; AH_IMEXPORTER_SEPA *ieh; DBG_ERROR(AQBANKING_LOGDOMAIN, "SEPA plugin is deprecated, please use the XML plugin"); ie=AB_ImExporter_new(ab, "sepa"); GWEN_NEW_OBJECT(AH_IMEXPORTER_SEPA, ieh); GWEN_INHERIT_SETDATA(AB_IMEXPORTER, AH_IMEXPORTER_SEPA, ie, ieh, AH_ImExporterSEPA_FreeData); AB_ImExporter_SetImportFn(ie, AH_ImExporterSEPA_Import); AB_ImExporter_SetExportFn(ie, AH_ImExporterSEPA_Export); AB_ImExporter_SetCheckFileFn(ie, AH_ImExporterSEPA_CheckFile); return ie; } void GWENHYWFAR_CB AH_ImExporterSEPA_FreeData(void *bp, void *p) { AH_IMEXPORTER_SEPA *ieh; ieh=(AH_IMEXPORTER_SEPA *)p; GWEN_FREE_OBJECT(ieh); } int AH_ImExporterSEPA_Import(AB_IMEXPORTER *ie, AB_IMEXPORTER_CONTEXT *ctx, GWEN_SYNCIO *sio, GWEN_DB_NODE *params) { AH_IMEXPORTER_SEPA *ieh; assert(ie); ieh=GWEN_INHERIT_GETDATA(AB_IMEXPORTER, AH_IMEXPORTER_SEPA, ie); assert(ieh); return GWEN_ERROR_NOT_SUPPORTED; } static int AH_ImExporterSEPA_Export_Pain_Setup(AB_IMEXPORTER *ie, AB_IMEXPORTER_CONTEXT *ctx, GWEN_XMLNODE *painNode, uint32_t doctype[], AH_IMEXPORTER_SEPA_PMTINF_LIST **pList) { GWEN_XMLNODE *n; AB_IMEXPORTER_ACCOUNTINFO *ai; AB_TRANSACTION *t; AH_IMEXPORTER_SEPA_PMTINF_LIST *pl; AH_IMEXPORTER_SEPA_PMTINF *pmtinf; int tcount=0; AB_VALUE *v; GWEN_BUFFER *tbuf; char *ctrlsum; ai=AB_ImExporterContext_GetFirstAccountInfo(ctx); if (ai==0) { DBG_ERROR(AQBANKING_LOGDOMAIN, "No account info"); return GWEN_ERROR_NO_DATA; } else if (AB_ImExporterAccountInfo_List_Next(ai)) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Account info for more than one local account"); return GWEN_ERROR_NOT_SUPPORTED; } t=AB_ImExporterAccountInfo_GetFirstTransaction(ai, 0, 0); if (!t) { DBG_ERROR(AQBANKING_LOGDOMAIN, "No transactions in ImExporter context"); return GWEN_ERROR_NO_DATA; } /* collect matching transactions for storage in a shared PmtInf block */ pl=AH_ImExporter_Sepa_PmtInf_List_new(); pmtinf=AH_ImExporter_Sepa_PmtInf_new(); AH_ImExporter_Sepa_PmtInf_List_Add(pmtinf, pl); while (t) { const GWEN_DATE *da; int day, month, year; uint32_t transDate; const char *name=NULL, *iban=NULL, *bic=NULL, *cdtrSchmeId=NULL; AB_TRANSACTION_SEQUENCE sequenceType=AB_Transaction_SequenceUnknown; const char *s; const AB_VALUE *tv; tcount++; da=AB_Transaction_GetDate(t); if (da) { year=GWEN_Date_GetYear(da); month=GWEN_Date_GetMonth(da)-1; day=GWEN_Date_GetDay(da); transDate=(year<<16)+(month<<8)+(day); } else transDate=0; s=AB_ImExporterAccountInfo_GetOwner(ai); if (!s || !*s) { name=AB_Transaction_GetLocalName(t); if (!name || !*name) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Missing local name in transaction %d", tcount); AH_ImExporter_Sepa_PmtInf_List_free(pl); return GWEN_ERROR_BAD_DATA; } } s=AB_ImExporterAccountInfo_GetIban(ai); if (!s || !*s) { iban=AB_Transaction_GetLocalIban(t); if (!iban || !*iban) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Missing local IBAN in transaction %d", tcount); AH_ImExporter_Sepa_PmtInf_List_free(pl); return GWEN_ERROR_BAD_DATA; } } s=AB_ImExporterAccountInfo_GetBic(ai); if (!s || !*s) { #if 0 bic=AB_Transaction_GetLocalBic(t); if (!bic || !*bic) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Missing local BIC in transaction %d", tcount); AH_ImExporter_Sepa_PmtInf_List_free(pl); return GWEN_ERROR_BAD_DATA; } #endif } if (doctype[0]==8) { sequenceType=AB_Transaction_GetSequence(t); if (sequenceType==AB_Transaction_SequenceUnknown) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Missing sequence type in transaction %d", tcount); AH_ImExporter_Sepa_PmtInf_List_free(pl); return GWEN_ERROR_BAD_DATA; } cdtrSchmeId=AB_Transaction_GetCreditorSchemeId(t); if (!cdtrSchmeId || !*cdtrSchmeId) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Missing creditor scheme id in transaction %d", tcount); AH_ImExporter_Sepa_PmtInf_List_free(pl); return GWEN_ERROR_BAD_DATA; } } if (pmtinf->tcount) { /* specify list of match criteria in one place */ #define TRANSACTION_DOES_NOT_MATCH \ (transDate!=pmtinf->transDate || \ (name && strcmp(name, pmtinf->localName)) || \ (iban && strcmp(iban, pmtinf->localIban)) || \ (bic && strcmp(bic, pmtinf->localBic)) || \ (doctype[0]==8 && \ (sequenceType!=pmtinf->sequenceType || \ (cdtrSchmeId && strcmp(cdtrSchmeId, pmtinf->creditorSchemeId))))) /* match against current PmtInf block */ if (TRANSACTION_DOES_NOT_MATCH) { /* search for a fitting PmtInf block */ pmtinf=AH_ImExporter_Sepa_PmtInf_List_First(pl); while (pmtinf && TRANSACTION_DOES_NOT_MATCH) pmtinf=AH_ImExporter_Sepa_PmtInf_List_Next(pmtinf); #undef TRANSACTION_DOES_NOT_MATCH if (!pmtinf) { pmtinf=AH_ImExporter_Sepa_PmtInf_new(); AH_ImExporter_Sepa_PmtInf_List_Add(pmtinf, pl); } } } if (!pmtinf->tcount) { /* initialise match data for this PmtInf block */ pmtinf->localName = name ? name : AB_ImExporterAccountInfo_GetOwner(ai); pmtinf->localIban = iban ? iban : AB_ImExporterAccountInfo_GetIban(ai); pmtinf->localBic = bic ? bic : AB_ImExporterAccountInfo_GetBic(ai); pmtinf->date=da; /* transaction date (AB_Transaction_GetDate()) */ pmtinf->transDate=transDate; /* transaction date short representation ((year<<16)+(month<<8)+(day)) */ if (doctype[0]==8) { pmtinf->sequenceType=sequenceType; pmtinf->creditorSchemeId=cdtrSchmeId; } } AB_Transaction_List2_PushBack(pmtinf->transactions, t); pmtinf->tcount++; tv=AB_Transaction_GetValue(t); if (tv==NULL) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Missing value in transaction %d", tcount); AH_ImExporter_Sepa_PmtInf_List_free(pl); return GWEN_ERROR_BAD_DATA; } AB_Value_AddValue(pmtinf->value, tv); t=AB_Transaction_List_Next(t); } /* construct CtrlSum for PmtInf blocks and GrpHdr */ v=AB_Value_new(); tbuf=GWEN_Buffer_new(0, 64, 0, 1); pmtinf=AH_ImExporter_Sepa_PmtInf_List_First(pl); while (pmtinf) { AB_Value_toHumanReadableString(pmtinf->value, tbuf, 2, 0); pmtinf->ctrlsum=strdup(GWEN_Buffer_GetStart(tbuf)); assert(pmtinf->ctrlsum); GWEN_Buffer_Reset(tbuf); AB_Value_AddValue(v, pmtinf->value); pmtinf=AH_ImExporter_Sepa_PmtInf_List_Next(pmtinf); } AB_Value_toHumanReadableString(v, tbuf, 2, 0); ctrlsum=strdup(GWEN_Buffer_GetStart(tbuf)); assert(ctrlsum); GWEN_Buffer_free(tbuf); AB_Value_free(v); /* create GrpHdr */ n=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "GrpHdr"); if (n) { GWEN_TIME *ti; uint32_t uid; char numbuf[32]; GWEN_XMLNODE *nn; GWEN_XMLNode_AddChild(painNode, n); ti=GWEN_CurrentTime(); tbuf=GWEN_Buffer_new(0, 64, 0, 1); /* generate MsgId */ uid=AB_Banking_GetNamedUniqueId(AB_ImExporter_GetBanking(ie), "sepamsg", 1); GWEN_Time_toUtcString(ti, "YYYYMMDD-hh:mm:ss-", tbuf); snprintf(numbuf, sizeof(numbuf)-1, "%08x", uid); GWEN_Buffer_AppendString(tbuf, numbuf); GWEN_XMLNode_SetCharValue(n, "MsgId", GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_Reset(tbuf); /* generate CreDtTm */ GWEN_Time_toUtcString(ti, "YYYY-MM-DDThh:mm:ssZ", tbuf); GWEN_XMLNode_SetCharValue(n, "CreDtTm", GWEN_Buffer_GetStart(tbuf)); GWEN_Time_free(ti); GWEN_Buffer_free(tbuf); /* store NbOfTxs */ GWEN_XMLNode_SetIntValue(n, "NbOfTxs", tcount); #if 0 /* store CtrlSum */ GWEN_XMLNode_SetCharValue(n, "CtrlSum", ctrlsum); #endif /* special treatment for pain.001.001.02 and pain.008.001.01 */ if (doctype[1]==1 && ((doctype[0]==1 && doctype[2]==2) || (doctype[0]==8 && doctype[2]==1))) GWEN_XMLNode_SetCharValue(n, "Grpg", "GRPD"); nn=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "InitgPty"); if (nn) { GWEN_XMLNode_AddChild(n, nn); pmtinf=AH_ImExporter_Sepa_PmtInf_List_First(pl); AH_ImExporterSEPA_XmlSetCharValueEscaped(nn, "Nm", pmtinf->localName); } } free(ctrlsum); *pList=pl; return 0; } int AH_ImExporterSEPA_Export(AB_IMEXPORTER *ie, AB_IMEXPORTER_CONTEXT *ctx, GWEN_SYNCIO *sio, GWEN_DB_NODE *params) { AH_IMEXPORTER_SEPA *ieh; GWEN_XMLNODE *root; GWEN_XMLNODE *documentNode; GWEN_XMLNODE *topNode; GWEN_XMLNODE *n; uint32_t doctype[]= {0, 0, 0}; const char *s; int rv; assert(ie); ieh=GWEN_INHERIT_GETDATA(AB_IMEXPORTER, AH_IMEXPORTER_SEPA, ie); assert(ieh); s=GWEN_DB_GetCharValue(params, "type", 0, 0); if (s) { int i, j; const char *p; char *tail; /* Parse strings of the form xxx.yyy.zz */ p=tail=(char *)s; for (i=0; i<3 && *tail; i++) { j=strtol(p, &tail, 10); if (!isspace(*p) && ((*tail=='.' && tail-p==3) || (*tail=='\0' && tail-p==2)) && j>0) doctype[i]=j; else break; p=tail+1; } if (i<3) /* Parsing the "type" option failed, record it for later reference */ doctype[0]=0; } root=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "root"); n=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "?xml"); if (n) { GWEN_XMLNode_AddHeader(root, n); GWEN_XMLNode_SetProperty(n, "version", "1.0"); GWEN_XMLNode_SetProperty(n, "encoding", "UTF-8"); } documentNode=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "Document"); s=GWEN_DB_GetCharValue(params, "xmlns", 0, 0); if (!s || !*s) { DBG_ERROR(AQBANKING_LOGDOMAIN, "xmlns not specified in profile \"%s\"", GWEN_DB_GetCharValue(params, "name", 0, 0)); GWEN_XMLNode_free(root); return GWEN_ERROR_INVALID; } GWEN_XMLNode_SetProperty(documentNode, "xmlns", s); GWEN_XMLNode_AddChild(root, documentNode); switch (doctype[0]) { case 1: if (doctype[1]>1 || doctype[2]>2) s="CstmrCdtTrfInitn"; else s=strstr(s, "pain"); topNode=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, s); GWEN_XMLNode_AddChild(documentNode, topNode); rv=AH_ImExporterSEPA_Export_Pain_001(ie, ctx, topNode, doctype, params); break; case 8: if (!(doctype[1]==1 && doctype[2]==1)) s="CstmrDrctDbtInitn"; else s=strstr(s, "pain"); topNode=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, s); GWEN_XMLNode_AddChild(documentNode, topNode); rv=AH_ImExporterSEPA_Export_Pain_008(ie, ctx, topNode, doctype, params); break; default: DBG_ERROR(AQBANKING_LOGDOMAIN, "Unknown SEPA type \"%s\"", GWEN_DB_GetCharValue(params, "type", 0, 0)); GWEN_XMLNode_free(root); return GWEN_ERROR_INVALID; } if (rv==0) { GWEN_XML_CONTEXT *xmlctx; xmlctx=GWEN_XmlCtxStore_new(root, GWEN_XML_FLAGS_INDENT | GWEN_XML_FLAGS_SIMPLE | GWEN_XML_FLAGS_HANDLE_HEADERS); rv=GWEN_XMLNode_WriteToStream(root, xmlctx, sio); if (rv) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); } GWEN_XmlCtx_free(xmlctx); GWEN_XMLNode_free(root); } /* TODO */ return rv; } int AH_ImExporterSEPA_CheckFile(AB_IMEXPORTER *ie, const char *fname) { AH_IMEXPORTER_SEPA *ieh; assert(ie); ieh=GWEN_INHERIT_GETDATA(AB_IMEXPORTER, AH_IMEXPORTER_SEPA, ie); assert(ieh); #if 0 return AB_ERROR_INDIFFERENT; #else /* TODO */ return GWEN_ERROR_NOT_IMPLEMENTED; #endif } int AH_ImExporterSEPA_XmlSetCharValueEscaped(GWEN_XMLNODE *n, const char *varName, const char *value) { if (value && *value) { GWEN_BUFFER *dbuf; int rv; dbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_Text_EscapeXmlToBuffer(value, dbuf); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(dbuf); return rv; } GWEN_XMLNode_SetCharValue(n, varName, GWEN_Buffer_GetStart(dbuf)); GWEN_Buffer_free(dbuf); } return 0; } #include "sepa_pain_001.c" #include "sepa_pain_008.c" aqbanking-6.6.1/src/libs/plugins/imexporters/sepa/sepa.xml.in0000664000175000017500000000041714043610745021201 00000000000000 @AQBANKING_VERSION_STRING@ Martin Preuss(martin@libchipcard.de) SEPA This plugin exports SEPA data. aqbanking-6.6.1/src/libs/plugins/imexporters/sepa/README0000664000175000017500000000000014043610745017766 00000000000000aqbanking-6.6.1/src/libs/plugins/imexporters/xml/0000755000175000017500000000000015037736160017052 500000000000000aqbanking-6.6.1/src/libs/plugins/imexporters/xml/xml.h0000664000175000017500000000117114043610745017741 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AQBANKING_IMEX_XML_H #define AQBANKING_IMEX_XML_H #include AB_IMEXPORTER *AB_ImExporterXML_new(AB_BANKING *ab); #endif /* AQBANKING_IMEX_XML_H */ aqbanking-6.6.1/src/libs/plugins/imexporters/xml/Makefile.am0000664000175000017500000000275014043610745021030 00000000000000SUBDIRS=profiles data AM_CPPFLAGS = -I$(top_srcdir)/src/libs \ -I$(top_builddir)/src/libs \ $(gwenhywfar_includes) AM_CFLAGS=-DBUILDING_AQBANKING @visibility_cflags@ TM2_INCLUDES=\ -I $(top_srcdir)/src/libs/aqbanking/typemaker2/c \ -I $(gwenhywfar_dir)/share/gwenhywfar/typemaker2/c \ -I $(srcdir) \ -I $(top_srcdir)/src/libs/aqbanking/types typefiles=\ paymentgroup.xml built_sources= \ paymentgroup.c build_headers_priv= \ paymentgroup_p.h \ paymentgroup.h build_headers=$(build_headers_priv) $(build_headers_pub) imexporterplugindir = $(aqbanking_plugindir)/imexporters noinst_LTLIBRARIES=libabimexporters_xml.la imexporterplugin_DATA=xml.xml libabimexporters_xml_la_SOURCES=$(built_sources) \ xml.c \ xml_sepa_exp.c \ xml_sepa_imp.c noinst_HEADERS=$(build_headers_priv) \ xml_p.h \ xml.h \ xml_sepa_exp.h \ xml_sepa_imp.h EXTRA_DIST=$(typefiles) $(built_sources) $(build_headers) README typefiles: $(typefiles) $(typemaker2_exe) $(TM2_INCLUDES) --destfolder="$(srcdir)" $(typefiles) typedefs: $(typefiles) $(typemaker2_exe) --defs-only $(TM2_INCLUDES) --destfolder="$(srcdir)" $(typefiles) sources: for f in $(libabimexporters_xml_la_SOURCES) $(built_sources) $(build_headers); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for f in $(imexporterplugin_DATA); do \ echo $(subdir)/$$f >>$(top_srcdir)/pdsources; \ done cppcheck: for f in $(libabimexporters_xml_la_SOURCES); do \ cppcheck --force $$f ; \ done aqbanking-6.6.1/src/libs/plugins/imexporters/xml/profiles/0000755000175000017500000000000015037736160020675 500000000000000aqbanking-6.6.1/src/libs/plugins/imexporters/xml/profiles/pain_008_003_02.conf0000664000175000017500000000041114043610745023657 00000000000000 char name="pain_008_003_02" char shortDescr="SEPA pain profile 008.003.02" char longDescr="This profile supports XML files" int import="1" int export="1" params { char documentType="sepa" char schema="pain_008_003_02" char sepaType="008.003.02" } # params aqbanking-6.6.1/src/libs/plugins/imexporters/xml/profiles/ofx2.conf0000664000175000017500000000027614043610745022345 00000000000000 char name="ofx2" char shortDescr="OFX format version 2" char longDescr="This profile supports OFX format version 2" int import="1" int export="0" params { char schema="ofx2" } # params aqbanking-6.6.1/src/libs/plugins/imexporters/xml/profiles/pain_001_003_03.conf0000664000175000017500000000041114043610745023651 00000000000000 char name="pain_001_003_03" char shortDescr="SEPA pain profile 001.003.03" char longDescr="This profile supports XML files" int import="1" int export="1" params { char documentType="sepa" char schema="pain_001_003_03" char sepaType="001.003.03" } # params aqbanking-6.6.1/src/libs/plugins/imexporters/xml/profiles/Makefile.in0000644000175000017500000004635015037736026022673 00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ #EXTRA_DIST= VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/libs/plugins/imexporters/xml/profiles ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/distri.m4 $(top_srcdir)/m4/gwenhywfar.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/os.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(profilesdir)" DATA = $(profiles_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADD_ACLOCAL_FLAGS = @ADD_ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AQBANKING_CLI_VERSION_STRING = @AQBANKING_CLI_VERSION_STRING@ AQBANKING_FINTS_VERSION_STRING = @AQBANKING_FINTS_VERSION_STRING@ AQBANKING_SO_AGE = @AQBANKING_SO_AGE@ AQBANKING_SO_CURRENT = @AQBANKING_SO_CURRENT@ AQBANKING_SO_EFFECTIVE = @AQBANKING_SO_EFFECTIVE@ AQBANKING_SO_REVISION = @AQBANKING_SO_REVISION@ AQBANKING_VERSION_BUILD = @AQBANKING_VERSION_BUILD@ AQBANKING_VERSION_FULL_STRING = @AQBANKING_VERSION_FULL_STRING@ AQBANKING_VERSION_MAJOR = @AQBANKING_VERSION_MAJOR@ AQBANKING_VERSION_MINOR = @AQBANKING_VERSION_MINOR@ AQBANKING_VERSION_PATCHLEVEL = @AQBANKING_VERSION_PATCHLEVEL@ AQBANKING_VERSION_RELEASE_STRING = @AQBANKING_VERSION_RELEASE_STRING@ AQBANKING_VERSION_STRING = @AQBANKING_VERSION_STRING@ AQBANKING_VERSION_TAG = @AQBANKING_VERSION_TAG@ AQEBICS_CFLAGS = @AQEBICS_CFLAGS@ AQEBICS_LIBS = @AQEBICS_LIBS@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATETIME = @DATETIME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_EXCLUDE_PATTERNS = @DOXYGEN_EXCLUDE_PATTERNS@ DOXYGEN_FILE_PATTERNS = @DOXYGEN_FILE_PATTERNS@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENGUI_GTK2_CFLAGS = @GWENGUI_GTK2_CFLAGS@ GWENGUI_GTK2_LIBS = @GWENGUI_GTK2_LIBS@ GWENHYWFAR_MINIMUM_VERSION = @GWENHYWFAR_MINIMUM_VERSION@ HAVE_GWENGUI_GTK2 = @HAVE_GWENGUI_GTK2@ HAVE_I18N = @HAVE_I18N@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIBXSLT_CFLAGS = @LIBXSLT_CFLAGS@ LIBXSLT_LIBS = @LIBXSLT_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_SUPPORTS_QT = @MSGFMT_SUPPORTS_QT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ TUTORIALS = @TUTORIALS@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XMLMERGE = @XMLMERGE@ XMLSEC_CFLAGS = @XMLSEC_CFLAGS@ XMLSEC_LIBS = @XMLSEC_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ aqbanking_backends = @aqbanking_backends@ aqbanking_cfg_searchdir = @aqbanking_cfg_searchdir@ aqbanking_data_searchdir = @aqbanking_data_searchdir@ aqbanking_headerdir = @aqbanking_headerdir@ aqbanking_headerdir_am = @aqbanking_headerdir_am@ aqbanking_includes = @aqbanking_includes@ aqbanking_internal_libs = @aqbanking_internal_libs@ aqbanking_ldflags = @aqbanking_ldflags@ aqbanking_libs = @aqbanking_libs@ aqbanking_locale_searchdir = @aqbanking_locale_searchdir@ aqbanking_modules = @aqbanking_modules@ aqbanking_pkgdatadir = @aqbanking_pkgdatadir@ aqbanking_plugin_searchdir = @aqbanking_plugin_searchdir@ aqbanking_plugindir = @aqbanking_plugindir@ aqbanking_plugins_backends_dirs = @aqbanking_plugins_backends_dirs@ aqbanking_plugins_backends_libs = @aqbanking_plugins_backends_libs@ aqbanking_plugins_bankinfo_dirs = @aqbanking_plugins_bankinfo_dirs@ aqbanking_plugins_bankinfo_libs = @aqbanking_plugins_bankinfo_libs@ aqbanking_plugins_imexporters_dirs = @aqbanking_plugins_imexporters_dirs@ aqbanking_plugins_imexporters_libs = @aqbanking_plugins_imexporters_libs@ aqbanking_plugins_parsers_dirs = @aqbanking_plugins_parsers_dirs@ aqbanking_symlinkdir = @aqbanking_symlinkdir@ aqbanking_sys_is_windows = @aqbanking_sys_is_windows@ aqbankingpp_modules = @aqbankingpp_modules@ aqebics_datadir = @aqebics_datadir@ aqebics_includes = @aqebics_includes@ aqebics_internal_libs = @aqebics_internal_libs@ aqebics_ldflags = @aqebics_ldflags@ aqebics_libs = @aqebics_libs@ aqfints_datadir = @aqfints_datadir@ aqhbci_datadir = @aqhbci_datadir@ aqhbci_includes = @aqhbci_includes@ aqhbci_internal_libs = @aqhbci_internal_libs@ aqhbci_ldflags = @aqhbci_ldflags@ aqhbci_libs = @aqhbci_libs@ aqofxconnect_includes = @aqofxconnect_includes@ aqofxconnect_internal_libs = @aqofxconnect_internal_libs@ aqofxconnect_libs = @aqofxconnect_libs@ aqpaypal_includes = @aqpaypal_includes@ aqpaypal_internal_libs = @aqpaypal_internal_libs@ aqpaypal_libs = @aqpaypal_libs@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gmp_libs = @gmp_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_dir = @gwenhywfar_dir@ gwenhywfar_has_crypt = @gwenhywfar_has_crypt@ gwenhywfar_headers = @gwenhywfar_headers@ gwenhywfar_includes = @gwenhywfar_includes@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_plugins = @gwenhywfar_plugins@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ typemaker2_exe = @typemaker2_exe@ visibility_cflags = @visibility_cflags@ with_aqebics = @with_aqebics@ with_aqhbci = @with_aqhbci@ profilesdir = $(aqbanking_pkgdatadir)/imexporters/xml/profiles profiles_DATA = \ default.conf \ camt_052_001_02.conf \ camt_053_001_02.conf \ camt_053_001_04.conf \ pain_001_003_03.conf \ pain_001_001_03.conf \ pain_001_001_09.conf \ pain_008_003_02.conf \ pain_008_001_02.conf \ ofx1.conf \ ofx2.conf \ sepa.conf EXTRA_DIST = $(profiles_DATA) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libs/plugins/imexporters/xml/profiles/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libs/plugins/imexporters/xml/profiles/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-profilesDATA: $(profiles_DATA) @$(NORMAL_INSTALL) @list='$(profiles_DATA)'; test -n "$(profilesdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(profilesdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(profilesdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(profilesdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(profilesdir)" || exit $$?; \ done uninstall-profilesDATA: @$(NORMAL_UNINSTALL) @list='$(profiles_DATA)'; test -n "$(profilesdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(profilesdir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(profilesdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-profilesDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-profilesDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-profilesDATA install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags-am uninstall uninstall-am uninstall-profilesDATA .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: aqbanking-6.6.1/src/libs/plugins/imexporters/xml/profiles/pain_001_001_09.conf0000664000175000017500000000041114730347270023660 00000000000000 char name="pain_001_001_09" char shortDescr="SEPA pain profile 001.001.09" char longDescr="This profile supports XML files" int import="1" int export="1" params { char documentType="sepa" char schema="pain_001_001_09" char sepaType="001.001.09" } # params aqbanking-6.6.1/src/libs/plugins/imexporters/xml/profiles/camt_053_001_02.conf0000664000175000017500000000031414613452407023656 00000000000000 char name="camt_053_001_02" char shortDescr="CAMT profile 053.001.02" char longDescr="This profile supports XML files" int import="1" int export="1" params { char schema="camt_053_001_02" } # params aqbanking-6.6.1/src/libs/plugins/imexporters/xml/profiles/sepa.conf0000664000175000017500000000034514043610745022414 00000000000000 char name="sepa" char shortDescr="Profile for SEPA documents" char longDescr="This profile supports SEPA XML files" int import="1" int export="1" params { char documentType="sepa" # char schema="pain_001_001_03" } # params aqbanking-6.6.1/src/libs/plugins/imexporters/xml/profiles/Makefile.am0000664000175000017500000000057514730347270022661 00000000000000 #EXTRA_DIST= profilesdir = $(aqbanking_pkgdatadir)/imexporters/xml/profiles profiles_DATA=\ default.conf \ camt_052_001_02.conf \ camt_053_001_02.conf \ camt_053_001_04.conf \ pain_001_003_03.conf \ pain_001_001_03.conf \ pain_001_001_09.conf \ pain_008_003_02.conf \ pain_008_001_02.conf \ ofx1.conf \ ofx2.conf \ sepa.conf EXTRA_DIST=$(profiles_DATA) aqbanking-6.6.1/src/libs/plugins/imexporters/xml/profiles/ofx1.conf0000664000175000017500000000032514043610745022337 00000000000000 char name="ofx1" char shortDescr="OFX format version 1" char longDescr="This profile supports OFX format version 1" int import="1" int export="0" params { char schema="ofx1" char xmlFlags="sgml" } # params aqbanking-6.6.1/src/libs/plugins/imexporters/xml/profiles/pain_008_001_02.conf0000664000175000017500000000041114043610745023655 00000000000000 char name="pain_008_001_02" char shortDescr="SEPA pain profile 008.001.02" char longDescr="This profile supports XML files" int import="1" int export="1" params { char documentType="sepa" char schema="pain_008_001_02" char sepaType="008.001.02" } # params aqbanking-6.6.1/src/libs/plugins/imexporters/xml/profiles/pain_001_001_03.conf0000664000175000017500000000041114043610745023647 00000000000000 char name="pain_001_001_03" char shortDescr="SEPA pain profile 001.001.03" char longDescr="This profile supports XML files" int import="1" int export="1" params { char documentType="sepa" char schema="pain_001_001_03" char sepaType="001.001.03" } # params aqbanking-6.6.1/src/libs/plugins/imexporters/xml/profiles/camt_052_001_02.conf0000664000175000017500000000031414043610745023653 00000000000000 char name="camt_052_001_02" char shortDescr="CAMT profile 052.001.02" char longDescr="This profile supports XML files" int import="1" int export="1" params { char schema="camt_052_001_02" } # params aqbanking-6.6.1/src/libs/plugins/imexporters/xml/profiles/camt_053_001_04.conf0000664000175000017500000000031414043610745023656 00000000000000 char name="camt_053_001_04" char shortDescr="CAMT profile 053.001.04" char longDescr="This profile supports XML files" int import="1" int export="1" params { char schema="camt_053_001_04" } # params aqbanking-6.6.1/src/libs/plugins/imexporters/xml/profiles/default.conf0000664000175000017500000000023414043610745023105 00000000000000 char name="default" char shortDescr="default profile" char longDescr="This profile supports XML files" int import="1" int export="1" params { } # params aqbanking-6.6.1/src/libs/plugins/imexporters/xml/xml_sepa_imp.c0000664000175000017500000001562014043610745021615 00000000000000/*************************************************************************** begin : Sat Apr 04 2020 copyright : (C) 2020 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "./xml_p.h" #include "./xml_sepa_imp.h" #include "aqbanking/i18n_l.h" #include #include #include #include #include #include #include static int _importDbData(GWEN_DB_NODE *dbSource, AB_IMEXPORTER_CONTEXT *ctx); static AB_TRANSACTION *_dbToTransaction(AB_IMEXPORTER_ACCOUNTINFO *accountInfo, GWEN_DB_NODE *dbPaymentGroup, GWEN_DB_NODE *dbTransaction); static void _transformValue(GWEN_DB_NODE *dbData, const char *varNameValue, const char *varNameCurrency, const char *destVarName); int AB_ImExporterXML_ImportSepa(AB_IMEXPORTER *ie, AB_IMEXPORTER_CONTEXT *ctx, GWEN_SYNCIO *sio, GWEN_DB_NODE *dbParams) { GWEN_XMLNODE *xmlDocData; GWEN_XMLNODE *xmlDocSchema=NULL; GWEN_XMLNODE *xmlNodeSchema=NULL; const char *schemaName; GWEN_DB_NODE *dbData; int rv; xmlDocData=AB_ImExporterXML_ReadXmlFromSio(ie, sio, GWEN_XML_FLAGS_HANDLE_COMMENTS | GWEN_XML_FLAGS_HANDLE_HEADERS); if (xmlDocData==NULL) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Could not read XML input"); return GWEN_ERROR_INVALID; } schemaName=GWEN_DB_GetCharValue(dbParams, "params/schema", 0, NULL); if (!(schemaName && *schemaName)) { xmlDocSchema=AB_ImExporterXML_DetermineSchema(ie, xmlDocData); if (xmlDocSchema==NULL) { DBG_INFO(AQBANKING_LOGDOMAIN, "Could not determine schema file."); return GWEN_ERROR_GENERIC; } } else { xmlDocSchema=AB_ImExporterXML_ReadSchemaFromFile(ie, schemaName); if (xmlDocSchema==NULL) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Could not load schema file for \"%s\"", schemaName); return GWEN_ERROR_GENERIC; } } xmlNodeSchema=GWEN_XMLNode_FindFirstTag(xmlDocSchema, "Import", NULL, NULL); if (!xmlNodeSchema) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Missing \"Import\" in schema file."); return GWEN_ERROR_GENERIC; } dbData=GWEN_DB_Group_new("data"); rv=GWEN_Xml2Db(xmlDocData, xmlNodeSchema, dbData); #if 0 DBG_ERROR(AQBANKING_LOGDOMAIN, "Data received:"); GWEN_DB_Dump(dbData, 2); #endif if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); GWEN_DB_Group_free(dbData); return rv; } rv=_importDbData(dbData, ctx); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); GWEN_DB_Group_free(dbData); return rv; } GWEN_DB_Group_free(dbData); return 0; } int _importDbData(GWEN_DB_NODE *dbSource, AB_IMEXPORTER_CONTEXT *ctx) { GWEN_DB_NODE *dbPaymentGroup; dbPaymentGroup=GWEN_DB_FindFirstGroup(dbSource, "paymentGroup"); while (dbPaymentGroup) { AB_IMEXPORTER_ACCOUNTINFO *accountInfo; GWEN_DB_NODE *dbTransaction; accountInfo=AB_ImExporterContext_GetOrAddAccountInfo(ctx, 0, GWEN_DB_GetCharValue(dbPaymentGroup, "iban", 0, NULL), NULL, NULL, AB_AccountType_Unknown); assert(accountInfo); dbTransaction=GWEN_DB_FindFirstGroup(dbPaymentGroup, "transaction"); while (dbTransaction) { AB_TRANSACTION *t; t=_dbToTransaction(accountInfo, dbPaymentGroup, dbTransaction); if (t) AB_ImExporterAccountInfo_AddTransaction(accountInfo, t); dbTransaction=GWEN_DB_FindNextGroup(dbTransaction, "transaction"); } dbPaymentGroup=GWEN_DB_FindNextGroup(dbPaymentGroup, "paymentGroup"); } return 0; } AB_TRANSACTION *_dbToTransaction(AB_IMEXPORTER_ACCOUNTINFO *accountInfo, GWEN_DB_NODE *dbPaymentGroup, GWEN_DB_NODE *dbTransaction) { AB_TRANSACTION *t; const char *s; /* translate some entries from DB */ _transformValue(dbTransaction, "value_value", "value_currency", "value"); s=GWEN_DB_GetCharValue(dbTransaction, "date", 0, NULL); if (!(s && *s)) { s=GWEN_DB_GetCharValue(dbPaymentGroup, "requestedExecutionDate", 0, NULL); if (s && *s) GWEN_DB_SetCharValue(dbTransaction, GWEN_DB_FLAGS_OVERWRITE_VARS, "date", s); } /* prepare sequence */ s=GWEN_DB_GetCharValue(dbPaymentGroup, "sequence", 0, NULL); if (s && *s) { if (strcasecmp(s, "OOFF")==0) GWEN_DB_SetCharValue(dbTransaction, GWEN_DB_FLAGS_OVERWRITE_VARS, "sequence", "once"); else if (strcasecmp(s, "FRST")==0) GWEN_DB_SetCharValue(dbTransaction, GWEN_DB_FLAGS_OVERWRITE_VARS, "sequence", "first"); else if (strcasecmp(s, "RCUR")==0) GWEN_DB_SetCharValue(dbTransaction, GWEN_DB_FLAGS_OVERWRITE_VARS, "sequence", "following"); else if (strcasecmp(s, "FNAL")==0) GWEN_DB_SetCharValue(dbTransaction, GWEN_DB_FLAGS_OVERWRITE_VARS, "sequence", "final"); } s=GWEN_DB_GetCharValue(dbPaymentGroup, "creditorSchemeId", 0, NULL); if (s && *s) GWEN_DB_SetCharValue(dbTransaction, GWEN_DB_FLAGS_OVERWRITE_VARS, "creditorSchemeId", s); /* read all values from db */ t=AB_Transaction_fromDb(dbTransaction); s=AB_Transaction_GetLocalIban(t); if (!(s && *s)) AB_Transaction_SetLocalIban(t, GWEN_DB_GetCharValue(dbPaymentGroup, "iban", 0, NULL)); s=AB_Transaction_GetLocalBic(t); if (!(s && *s)) AB_Transaction_SetLocalBic(t, GWEN_DB_GetCharValue(dbPaymentGroup, "bic", 0, NULL)); s=AB_Transaction_GetLocalName(t); if (!(s && *s)) AB_Transaction_SetLocalName(t, GWEN_DB_GetCharValue(dbPaymentGroup, "ownerName", 0, NULL)); return t; } void _transformValue(GWEN_DB_NODE *dbData, const char *varNameValue, const char *varNameCurrency, const char *destVarName) { const char *sValue; const char *sCurrency=NULL; GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 256, 0, 1); sValue=GWEN_DB_GetCharValue(dbData, varNameValue, 0, NULL); if (sValue) GWEN_Buffer_AppendString(tbuf, sValue); if (varNameCurrency) sCurrency=GWEN_DB_GetCharValue(dbData, varNameCurrency, 0, NULL); if (sCurrency) { GWEN_Buffer_AppendString(tbuf, ":"); GWEN_Buffer_AppendString(tbuf, sCurrency); } if (destVarName) GWEN_DB_SetCharValue(dbData, GWEN_DB_FLAGS_OVERWRITE_VARS, destVarName, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } aqbanking-6.6.1/src/libs/plugins/imexporters/xml/Makefile.in0000644000175000017500000007632115037736026021051 00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/libs/plugins/imexporters/xml ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/distri.m4 $(top_srcdir)/m4/gwenhywfar.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/os.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = xml.xml CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libabimexporters_xml_la_LIBADD = am__objects_1 = paymentgroup.lo am_libabimexporters_xml_la_OBJECTS = $(am__objects_1) xml.lo \ xml_sepa_exp.lo xml_sepa_imp.lo libabimexporters_xml_la_OBJECTS = \ $(am_libabimexporters_xml_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/paymentgroup.Plo ./$(DEPDIR)/xml.Plo \ ./$(DEPDIR)/xml_sepa_exp.Plo ./$(DEPDIR)/xml_sepa_imp.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libabimexporters_xml_la_SOURCES) DIST_SOURCES = $(libabimexporters_xml_la_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(imexporterplugindir)" DATA = $(imexporterplugin_DATA) HEADERS = $(noinst_HEADERS) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir distdir-am am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/xml.xml.in \ $(top_srcdir)/depcomp README DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ADD_ACLOCAL_FLAGS = @ADD_ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AQBANKING_CLI_VERSION_STRING = @AQBANKING_CLI_VERSION_STRING@ AQBANKING_FINTS_VERSION_STRING = @AQBANKING_FINTS_VERSION_STRING@ AQBANKING_SO_AGE = @AQBANKING_SO_AGE@ AQBANKING_SO_CURRENT = @AQBANKING_SO_CURRENT@ AQBANKING_SO_EFFECTIVE = @AQBANKING_SO_EFFECTIVE@ AQBANKING_SO_REVISION = @AQBANKING_SO_REVISION@ AQBANKING_VERSION_BUILD = @AQBANKING_VERSION_BUILD@ AQBANKING_VERSION_FULL_STRING = @AQBANKING_VERSION_FULL_STRING@ AQBANKING_VERSION_MAJOR = @AQBANKING_VERSION_MAJOR@ AQBANKING_VERSION_MINOR = @AQBANKING_VERSION_MINOR@ AQBANKING_VERSION_PATCHLEVEL = @AQBANKING_VERSION_PATCHLEVEL@ AQBANKING_VERSION_RELEASE_STRING = @AQBANKING_VERSION_RELEASE_STRING@ AQBANKING_VERSION_STRING = @AQBANKING_VERSION_STRING@ AQBANKING_VERSION_TAG = @AQBANKING_VERSION_TAG@ AQEBICS_CFLAGS = @AQEBICS_CFLAGS@ AQEBICS_LIBS = @AQEBICS_LIBS@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATETIME = @DATETIME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_EXCLUDE_PATTERNS = @DOXYGEN_EXCLUDE_PATTERNS@ DOXYGEN_FILE_PATTERNS = @DOXYGEN_FILE_PATTERNS@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENGUI_GTK2_CFLAGS = @GWENGUI_GTK2_CFLAGS@ GWENGUI_GTK2_LIBS = @GWENGUI_GTK2_LIBS@ GWENHYWFAR_MINIMUM_VERSION = @GWENHYWFAR_MINIMUM_VERSION@ HAVE_GWENGUI_GTK2 = @HAVE_GWENGUI_GTK2@ HAVE_I18N = @HAVE_I18N@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIBXSLT_CFLAGS = @LIBXSLT_CFLAGS@ LIBXSLT_LIBS = @LIBXSLT_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_SUPPORTS_QT = @MSGFMT_SUPPORTS_QT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ TUTORIALS = @TUTORIALS@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XMLMERGE = @XMLMERGE@ XMLSEC_CFLAGS = @XMLSEC_CFLAGS@ XMLSEC_LIBS = @XMLSEC_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ aqbanking_backends = @aqbanking_backends@ aqbanking_cfg_searchdir = @aqbanking_cfg_searchdir@ aqbanking_data_searchdir = @aqbanking_data_searchdir@ aqbanking_headerdir = @aqbanking_headerdir@ aqbanking_headerdir_am = @aqbanking_headerdir_am@ aqbanking_includes = @aqbanking_includes@ aqbanking_internal_libs = @aqbanking_internal_libs@ aqbanking_ldflags = @aqbanking_ldflags@ aqbanking_libs = @aqbanking_libs@ aqbanking_locale_searchdir = @aqbanking_locale_searchdir@ aqbanking_modules = @aqbanking_modules@ aqbanking_pkgdatadir = @aqbanking_pkgdatadir@ aqbanking_plugin_searchdir = @aqbanking_plugin_searchdir@ aqbanking_plugindir = @aqbanking_plugindir@ aqbanking_plugins_backends_dirs = @aqbanking_plugins_backends_dirs@ aqbanking_plugins_backends_libs = @aqbanking_plugins_backends_libs@ aqbanking_plugins_bankinfo_dirs = @aqbanking_plugins_bankinfo_dirs@ aqbanking_plugins_bankinfo_libs = @aqbanking_plugins_bankinfo_libs@ aqbanking_plugins_imexporters_dirs = @aqbanking_plugins_imexporters_dirs@ aqbanking_plugins_imexporters_libs = @aqbanking_plugins_imexporters_libs@ aqbanking_plugins_parsers_dirs = @aqbanking_plugins_parsers_dirs@ aqbanking_symlinkdir = @aqbanking_symlinkdir@ aqbanking_sys_is_windows = @aqbanking_sys_is_windows@ aqbankingpp_modules = @aqbankingpp_modules@ aqebics_datadir = @aqebics_datadir@ aqebics_includes = @aqebics_includes@ aqebics_internal_libs = @aqebics_internal_libs@ aqebics_ldflags = @aqebics_ldflags@ aqebics_libs = @aqebics_libs@ aqfints_datadir = @aqfints_datadir@ aqhbci_datadir = @aqhbci_datadir@ aqhbci_includes = @aqhbci_includes@ aqhbci_internal_libs = @aqhbci_internal_libs@ aqhbci_ldflags = @aqhbci_ldflags@ aqhbci_libs = @aqhbci_libs@ aqofxconnect_includes = @aqofxconnect_includes@ aqofxconnect_internal_libs = @aqofxconnect_internal_libs@ aqofxconnect_libs = @aqofxconnect_libs@ aqpaypal_includes = @aqpaypal_includes@ aqpaypal_internal_libs = @aqpaypal_internal_libs@ aqpaypal_libs = @aqpaypal_libs@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gmp_libs = @gmp_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_dir = @gwenhywfar_dir@ gwenhywfar_has_crypt = @gwenhywfar_has_crypt@ gwenhywfar_headers = @gwenhywfar_headers@ gwenhywfar_includes = @gwenhywfar_includes@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_plugins = @gwenhywfar_plugins@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ typemaker2_exe = @typemaker2_exe@ visibility_cflags = @visibility_cflags@ with_aqebics = @with_aqebics@ with_aqhbci = @with_aqhbci@ SUBDIRS = profiles data AM_CPPFLAGS = -I$(top_srcdir)/src/libs \ -I$(top_builddir)/src/libs \ $(gwenhywfar_includes) AM_CFLAGS = -DBUILDING_AQBANKING @visibility_cflags@ TM2_INCLUDES = \ -I $(top_srcdir)/src/libs/aqbanking/typemaker2/c \ -I $(gwenhywfar_dir)/share/gwenhywfar/typemaker2/c \ -I $(srcdir) \ -I $(top_srcdir)/src/libs/aqbanking/types typefiles = \ paymentgroup.xml built_sources = \ paymentgroup.c build_headers_priv = \ paymentgroup_p.h \ paymentgroup.h build_headers = $(build_headers_priv) $(build_headers_pub) imexporterplugindir = $(aqbanking_plugindir)/imexporters noinst_LTLIBRARIES = libabimexporters_xml.la imexporterplugin_DATA = xml.xml libabimexporters_xml_la_SOURCES = $(built_sources) \ xml.c \ xml_sepa_exp.c \ xml_sepa_imp.c noinst_HEADERS = $(build_headers_priv) \ xml_p.h \ xml.h \ xml_sepa_exp.h \ xml_sepa_imp.h EXTRA_DIST = $(typefiles) $(built_sources) $(build_headers) README all: all-recursive .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libs/plugins/imexporters/xml/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libs/plugins/imexporters/xml/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): xml.xml: $(top_builddir)/config.status $(srcdir)/xml.xml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libabimexporters_xml.la: $(libabimexporters_xml_la_OBJECTS) $(libabimexporters_xml_la_DEPENDENCIES) $(EXTRA_libabimexporters_xml_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libabimexporters_xml_la_OBJECTS) $(libabimexporters_xml_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/paymentgroup.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xml.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xml_sepa_exp.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xml_sepa_imp.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-imexporterpluginDATA: $(imexporterplugin_DATA) @$(NORMAL_INSTALL) @list='$(imexporterplugin_DATA)'; test -n "$(imexporterplugindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(imexporterplugindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(imexporterplugindir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(imexporterplugindir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(imexporterplugindir)" || exit $$?; \ done uninstall-imexporterpluginDATA: @$(NORMAL_UNINSTALL) @list='$(imexporterplugin_DATA)'; test -n "$(imexporterplugindir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(imexporterplugindir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(imexporterplugindir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-recursive -rm -f ./$(DEPDIR)/paymentgroup.Plo -rm -f ./$(DEPDIR)/xml.Plo -rm -f ./$(DEPDIR)/xml_sepa_exp.Plo -rm -f ./$(DEPDIR)/xml_sepa_imp.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-imexporterpluginDATA install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f ./$(DEPDIR)/paymentgroup.Plo -rm -f ./$(DEPDIR)/xml.Plo -rm -f ./$(DEPDIR)/xml_sepa_exp.Plo -rm -f ./$(DEPDIR)/xml_sepa_imp.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-imexporterpluginDATA .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ am--depfiles check check-am clean clean-generic clean-libtool \ clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-imexporterpluginDATA install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am \ uninstall-imexporterpluginDATA .PRECIOUS: Makefile typefiles: $(typefiles) $(typemaker2_exe) $(TM2_INCLUDES) --destfolder="$(srcdir)" $(typefiles) typedefs: $(typefiles) $(typemaker2_exe) --defs-only $(TM2_INCLUDES) --destfolder="$(srcdir)" $(typefiles) sources: for f in $(libabimexporters_xml_la_SOURCES) $(built_sources) $(build_headers); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for f in $(imexporterplugin_DATA); do \ echo $(subdir)/$$f >>$(top_srcdir)/pdsources; \ done cppcheck: for f in $(libabimexporters_xml_la_SOURCES); do \ cppcheck --force $$f ; \ done # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: aqbanking-6.6.1/src/libs/plugins/imexporters/xml/xml_p.h0000664000175000017500000000207114043610745020260 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AQBANKING_IMEX_XML_P_H #define AQBANKING_IMEX_XML_P_H #include "xml.h" #include #include #include #include typedef struct AB_IMEXPORTER_XML AB_IMEXPORTER_XML; struct AB_IMEXPORTER_XML { int dummy; }; GWEN_XMLNODE *AB_ImExporterXML_ReadSchemaFromFile(AB_IMEXPORTER *ie, const char *schemaName); GWEN_XMLNODE *AB_ImExporterXML_DetermineSchema(AB_IMEXPORTER *ie, GWEN_XMLNODE *xmlDocData); GWEN_XMLNODE *AB_ImExporterXML_ReadXmlFromSio(AB_IMEXPORTER *ie, GWEN_SYNCIO *sio, uint32_t xmlFlags); #endif /* AQBANKING_IMEX_XML_P_H */ aqbanking-6.6.1/src/libs/plugins/imexporters/xml/xml_sepa_exp.h0000664000175000017500000000146114043610745021627 00000000000000/*************************************************************************** begin : Sat Apr 04 2020 copyright : (C) 2020 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AQBANKING_IMEX_XML_SEPA_EXP_H #define AQBANKING_IMEX_XML_SEPA_EXP_H #include int AB_ImExporterXML_ExportSepa(AB_IMEXPORTER *ie, AB_IMEXPORTER_CONTEXT *ctx, GWEN_SYNCIO *sio, GWEN_DB_NODE *dbParams); #endif /* AQBANKING_IMEX_XML_H */ aqbanking-6.6.1/src/libs/plugins/imexporters/xml/paymentgroup.c0000664000175000017500000003234715037736054021705 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "paymentgroup.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "./paymentgroup_p.h" #include #include /* code headers */ /* macro functions */ GWEN_LIST_FUNCTIONS(AB_IMEXPORTER_XML_PAYMENTGROUP, AB_ImExporterXML_PaymentGroup) AB_IMEXPORTER_XML_PAYMENTGROUP *AB_ImExporterXML_PaymentGroup_new(void) { AB_IMEXPORTER_XML_PAYMENTGROUP *p_struct; GWEN_NEW_OBJECT(AB_IMEXPORTER_XML_PAYMENTGROUP, p_struct) GWEN_LIST_INIT(AB_IMEXPORTER_XML_PAYMENTGROUP, p_struct) /* members */ p_struct->id=NULL; p_struct->transactionCount=0; p_struct->controlSum=AB_Value_new(); p_struct->transactionDate=NULL; p_struct->sequence=AB_Transaction_SequenceUnknown; p_struct->creditorSchemeId=NULL; p_struct->localIban=NULL; p_struct->localBic=NULL; p_struct->localName=NULL; p_struct->transactionList2=AB_Transaction_List2_new(); p_struct->hash=NULL; /* virtual functions */ return p_struct; } void AB_ImExporterXML_PaymentGroup_free(AB_IMEXPORTER_XML_PAYMENTGROUP *p_struct) { if (p_struct) { GWEN_LIST_FINI(AB_IMEXPORTER_XML_PAYMENTGROUP, p_struct) /* members */ free(p_struct->id); p_struct->id=NULL; AB_Value_free(p_struct->controlSum); GWEN_Date_free(p_struct->transactionDate); p_struct->transactionDate=NULL; free(p_struct->creditorSchemeId); p_struct->creditorSchemeId=NULL; free(p_struct->localIban); p_struct->localIban=NULL; free(p_struct->localBic); p_struct->localBic=NULL; free(p_struct->localName); p_struct->localName=NULL; AB_Transaction_List2_free(p_struct->transactionList2); p_struct->transactionList2=NULL; free(p_struct->hash); p_struct->hash=NULL; GWEN_FREE_OBJECT(p_struct); } } AB_IMEXPORTER_XML_PAYMENTGROUP *AB_ImExporterXML_PaymentGroup_dup(const AB_IMEXPORTER_XML_PAYMENTGROUP *p_src) { AB_IMEXPORTER_XML_PAYMENTGROUP *p_struct; assert(p_src); p_struct=AB_ImExporterXML_PaymentGroup_new(); /* member "id" */ if (p_struct->id) { free(p_struct->id); p_struct->id=NULL; p_struct->id=NULL; } if (p_src->id) { p_struct->id=strdup(p_src->id); } /* member "transactionCount" */ p_struct->transactionCount=p_src->transactionCount; /* member "controlSum" */ if (p_struct->controlSum) { AB_Value_free(p_struct->controlSum); p_struct->controlSum=NULL; } if (p_src->controlSum) { p_struct->controlSum=AB_Value_dup(p_src->controlSum); } /* member "transactionDate" */ if (p_struct->transactionDate) { GWEN_Date_free(p_struct->transactionDate); p_struct->transactionDate=NULL; p_struct->transactionDate=NULL; } if (p_src->transactionDate) { p_struct->transactionDate=GWEN_Date_dup(p_src->transactionDate); } /* member "sequence" */ p_struct->sequence=p_src->sequence; /* member "creditorSchemeId" */ if (p_struct->creditorSchemeId) { free(p_struct->creditorSchemeId); p_struct->creditorSchemeId=NULL; p_struct->creditorSchemeId=NULL; } if (p_src->creditorSchemeId) { p_struct->creditorSchemeId=strdup(p_src->creditorSchemeId); } /* member "localIban" */ if (p_struct->localIban) { free(p_struct->localIban); p_struct->localIban=NULL; p_struct->localIban=NULL; } if (p_src->localIban) { p_struct->localIban=strdup(p_src->localIban); } /* member "localBic" */ if (p_struct->localBic) { free(p_struct->localBic); p_struct->localBic=NULL; p_struct->localBic=NULL; } if (p_src->localBic) { p_struct->localBic=strdup(p_src->localBic); } /* member "localName" */ if (p_struct->localName) { free(p_struct->localName); p_struct->localName=NULL; p_struct->localName=NULL; } if (p_src->localName) { p_struct->localName=strdup(p_src->localName); } /* member "transactionList2" */ if (p_struct->transactionList2) { AB_Transaction_List2_free(p_struct->transactionList2); p_struct->transactionList2=NULL; p_struct->transactionList2=NULL; } if (p_src->transactionList2) { p_struct->transactionList2=AB_Transaction_List2_dup(p_src->transactionList2); } /* member "hash" */ if (p_struct->hash) { free(p_struct->hash); p_struct->hash=NULL; p_struct->hash=NULL; } if (p_src->hash) { p_struct->hash=strdup(p_src->hash); } return p_struct; } AB_IMEXPORTER_XML_PAYMENTGROUP *AB_ImExporterXML_PaymentGroup_copy(AB_IMEXPORTER_XML_PAYMENTGROUP *p_struct, const AB_IMEXPORTER_XML_PAYMENTGROUP *p_src) { assert(p_struct); assert(p_src); /* member "id" */ if (p_struct->id) { free(p_struct->id); p_struct->id=NULL; p_struct->id=NULL; } if (p_src->id) { p_struct->id=strdup(p_src->id); } /* member "transactionCount" */ p_struct->transactionCount=p_src->transactionCount; /* member "controlSum" */ if (p_struct->controlSum) { AB_Value_free(p_struct->controlSum); p_struct->controlSum=NULL; } if (p_src->controlSum) { p_struct->controlSum=AB_Value_dup(p_src->controlSum); } /* member "transactionDate" */ if (p_struct->transactionDate) { GWEN_Date_free(p_struct->transactionDate); p_struct->transactionDate=NULL; p_struct->transactionDate=NULL; } if (p_src->transactionDate) { p_struct->transactionDate=GWEN_Date_dup(p_src->transactionDate); } /* member "sequence" */ p_struct->sequence=p_src->sequence; /* member "creditorSchemeId" */ if (p_struct->creditorSchemeId) { free(p_struct->creditorSchemeId); p_struct->creditorSchemeId=NULL; p_struct->creditorSchemeId=NULL; } if (p_src->creditorSchemeId) { p_struct->creditorSchemeId=strdup(p_src->creditorSchemeId); } /* member "localIban" */ if (p_struct->localIban) { free(p_struct->localIban); p_struct->localIban=NULL; p_struct->localIban=NULL; } if (p_src->localIban) { p_struct->localIban=strdup(p_src->localIban); } /* member "localBic" */ if (p_struct->localBic) { free(p_struct->localBic); p_struct->localBic=NULL; p_struct->localBic=NULL; } if (p_src->localBic) { p_struct->localBic=strdup(p_src->localBic); } /* member "localName" */ if (p_struct->localName) { free(p_struct->localName); p_struct->localName=NULL; p_struct->localName=NULL; } if (p_src->localName) { p_struct->localName=strdup(p_src->localName); } /* member "transactionList2" */ if (p_struct->transactionList2) { AB_Transaction_List2_free(p_struct->transactionList2); p_struct->transactionList2=NULL; p_struct->transactionList2=NULL; } if (p_src->transactionList2) { p_struct->transactionList2=AB_Transaction_List2_dup(p_src->transactionList2); } /* member "hash" */ if (p_struct->hash) { free(p_struct->hash); p_struct->hash=NULL; p_struct->hash=NULL; } if (p_src->hash) { p_struct->hash=strdup(p_src->hash); } return p_struct; } const char *AB_ImExporterXML_PaymentGroup_GetId(const AB_IMEXPORTER_XML_PAYMENTGROUP *p_struct){ assert(p_struct); return p_struct->id; } int AB_ImExporterXML_PaymentGroup_GetTransactionCount(const AB_IMEXPORTER_XML_PAYMENTGROUP *p_struct){ assert(p_struct); return p_struct->transactionCount; } const AB_VALUE *AB_ImExporterXML_PaymentGroup_GetControlSum(const AB_IMEXPORTER_XML_PAYMENTGROUP *p_struct){ assert(p_struct); return p_struct->controlSum; } const GWEN_DATE *AB_ImExporterXML_PaymentGroup_GetTransactionDate(const AB_IMEXPORTER_XML_PAYMENTGROUP *p_struct){ assert(p_struct); return p_struct->transactionDate; } int AB_ImExporterXML_PaymentGroup_GetSequence(const AB_IMEXPORTER_XML_PAYMENTGROUP *p_struct){ assert(p_struct); return p_struct->sequence; } const char *AB_ImExporterXML_PaymentGroup_GetCreditorSchemeId(const AB_IMEXPORTER_XML_PAYMENTGROUP *p_struct){ assert(p_struct); return p_struct->creditorSchemeId; } const char *AB_ImExporterXML_PaymentGroup_GetLocalIban(const AB_IMEXPORTER_XML_PAYMENTGROUP *p_struct){ assert(p_struct); return p_struct->localIban; } const char *AB_ImExporterXML_PaymentGroup_GetLocalBic(const AB_IMEXPORTER_XML_PAYMENTGROUP *p_struct){ assert(p_struct); return p_struct->localBic; } const char *AB_ImExporterXML_PaymentGroup_GetLocalName(const AB_IMEXPORTER_XML_PAYMENTGROUP *p_struct){ assert(p_struct); return p_struct->localName; } AB_TRANSACTION_LIST2 *AB_ImExporterXML_PaymentGroup_GetTransactionList2(const AB_IMEXPORTER_XML_PAYMENTGROUP *p_struct){ assert(p_struct); return p_struct->transactionList2; } const char *AB_ImExporterXML_PaymentGroup_GetHash(const AB_IMEXPORTER_XML_PAYMENTGROUP *p_struct){ assert(p_struct); return p_struct->hash; } void AB_ImExporterXML_PaymentGroup_SetId(AB_IMEXPORTER_XML_PAYMENTGROUP *p_struct, const char *p_src){ assert(p_struct); if (p_struct->id) { free(p_struct->id); p_struct->id=NULL; p_struct->id=NULL; } if (p_src) { p_struct->id=strdup(p_src); } else { p_struct->id=NULL; } } void AB_ImExporterXML_PaymentGroup_SetTransactionCount(AB_IMEXPORTER_XML_PAYMENTGROUP *p_struct, int p_src){ assert(p_struct); p_struct->transactionCount=p_src; } void AB_ImExporterXML_PaymentGroup_SetControlSum(AB_IMEXPORTER_XML_PAYMENTGROUP *p_struct, const AB_VALUE *p_src){ assert(p_struct); if (p_struct->controlSum) { AB_Value_free(p_struct->controlSum); p_struct->controlSum=NULL; } if (p_src) { p_struct->controlSum=AB_Value_dup(p_src); } else { p_struct->controlSum=NULL; } } void AB_ImExporterXML_PaymentGroup_SetTransactionDate(AB_IMEXPORTER_XML_PAYMENTGROUP *p_struct, const GWEN_DATE *p_src){ assert(p_struct); if (p_struct->transactionDate) { GWEN_Date_free(p_struct->transactionDate); p_struct->transactionDate=NULL; p_struct->transactionDate=NULL; } if (p_src) { p_struct->transactionDate=GWEN_Date_dup(p_src); } else { p_struct->transactionDate=NULL; } } void AB_ImExporterXML_PaymentGroup_SetSequence(AB_IMEXPORTER_XML_PAYMENTGROUP *p_struct, int p_src){ assert(p_struct); p_struct->sequence=p_src; } void AB_ImExporterXML_PaymentGroup_SetCreditorSchemeId(AB_IMEXPORTER_XML_PAYMENTGROUP *p_struct, const char *p_src){ assert(p_struct); if (p_struct->creditorSchemeId) { free(p_struct->creditorSchemeId); p_struct->creditorSchemeId=NULL; p_struct->creditorSchemeId=NULL; } if (p_src) { p_struct->creditorSchemeId=strdup(p_src); } else { p_struct->creditorSchemeId=NULL; } } void AB_ImExporterXML_PaymentGroup_SetLocalIban(AB_IMEXPORTER_XML_PAYMENTGROUP *p_struct, const char *p_src){ assert(p_struct); if (p_struct->localIban) { free(p_struct->localIban); p_struct->localIban=NULL; p_struct->localIban=NULL; } if (p_src) { p_struct->localIban=strdup(p_src); } else { p_struct->localIban=NULL; } } void AB_ImExporterXML_PaymentGroup_SetLocalBic(AB_IMEXPORTER_XML_PAYMENTGROUP *p_struct, const char *p_src){ assert(p_struct); if (p_struct->localBic) { free(p_struct->localBic); p_struct->localBic=NULL; p_struct->localBic=NULL; } if (p_src) { p_struct->localBic=strdup(p_src); } else { p_struct->localBic=NULL; } } void AB_ImExporterXML_PaymentGroup_SetLocalName(AB_IMEXPORTER_XML_PAYMENTGROUP *p_struct, const char *p_src){ assert(p_struct); if (p_struct->localName) { free(p_struct->localName); p_struct->localName=NULL; p_struct->localName=NULL; } if (p_src) { p_struct->localName=strdup(p_src); } else { p_struct->localName=NULL; } } void AB_ImExporterXML_PaymentGroup_SetTransactionList2(AB_IMEXPORTER_XML_PAYMENTGROUP *p_struct, AB_TRANSACTION_LIST2 *p_src){ assert(p_struct); if (p_struct->transactionList2) { AB_Transaction_List2_free(p_struct->transactionList2); p_struct->transactionList2=NULL; p_struct->transactionList2=NULL; } p_struct->transactionList2=p_src; } void AB_ImExporterXML_PaymentGroup_SetHash(AB_IMEXPORTER_XML_PAYMENTGROUP *p_struct, const char *p_src){ assert(p_struct); if (p_struct->hash) { free(p_struct->hash); p_struct->hash=NULL; p_struct->hash=NULL; } if (p_src) { p_struct->hash=strdup(p_src); } else { p_struct->hash=NULL; } } AB_IMEXPORTER_XML_PAYMENTGROUP_LIST *AB_ImExporterXML_PaymentGroup_List_dup(const AB_IMEXPORTER_XML_PAYMENTGROUP_LIST *p_src) { AB_IMEXPORTER_XML_PAYMENTGROUP_LIST *p_dest; AB_IMEXPORTER_XML_PAYMENTGROUP *p_elem; assert(p_src); p_dest=AB_ImExporterXML_PaymentGroup_List_new(); p_elem=AB_ImExporterXML_PaymentGroup_List_First(p_src); while(p_elem) { AB_IMEXPORTER_XML_PAYMENTGROUP *p_cpy; p_cpy=AB_ImExporterXML_PaymentGroup_dup(p_elem); AB_ImExporterXML_PaymentGroup_List_Add(p_cpy, p_dest); p_elem=AB_ImExporterXML_PaymentGroup_List_Next(p_elem); } return p_dest; } void AB_ImExporterXML_PaymentGroup_AddTransaction(AB_IMEXPORTER_XML_PAYMENTGROUP *st, AB_TRANSACTION *t) { const AB_VALUE *v; assert(st); if (st->transactionList2==NULL) st->transactionList2=AB_Transaction_List2_new(); if (st->controlSum==NULL) st->controlSum=AB_Value_new(); AB_Transaction_List2_PushBack(st->transactionList2, t); st->transactionCount++; v=AB_Transaction_GetValue(t); if (v) { AB_Value_AddValue(st->controlSum, v); } } /* code headers */ aqbanking-6.6.1/src/libs/plugins/imexporters/xml/paymentgroup_p.h0000664000175000017500000000160715037736054022224 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "paymentgroup.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef AB_IMEXPORTER_XML_PAYMENTGROUP_PAYMENTGROUP_P_H #define AB_IMEXPORTER_XML_PAYMENTGROUP_PAYMENTGROUP_P_H #include "./paymentgroup.h" #ifdef __cplusplus extern "C" { #endif struct AB_IMEXPORTER_XML_PAYMENTGROUP { GWEN_LIST_ELEMENT(AB_IMEXPORTER_XML_PAYMENTGROUP) char *id; int transactionCount; AB_VALUE *controlSum; GWEN_DATE *transactionDate; int sequence; char *creditorSchemeId; char *localIban; char *localBic; char *localName; AB_TRANSACTION_LIST2 *transactionList2; char *hash; /* volatile */ }; #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/plugins/imexporters/xml/paymentgroup.xml0000664000175000017500000001451114043610745022246 00000000000000 AB_IMEXPORTER_XML_PAYMENTGROUP AB_ImExporterXML_PaymentGroup paymentgroup with_list1
aqbanking/error.h
aqbanking/types/value.h
aqbanking/types/transaction.h
gwenhywfar/gwendate.h
gwenhywfar/buffer.h
gwenhywfar/db.h
gwenhywfar/debug.h
$(api) void $(struct_prefix)_AddTransaction($(struct_type) *st, AB_TRANSACTION *t); void $(struct_prefix)_AddTransaction($(struct_type) *st, AB_TRANSACTION *t) { \n const AB_VALUE *v; \n \n assert(st); \n \n if (st->transactionList2==NULL) \n st->transactionList2=AB_Transaction_List2_new(); \n if (st->controlSum==NULL) \n st->controlSum=AB_Value_new(); \n \n AB_Transaction_List2_PushBack(st->transactionList2, t); \n st->transactionCount++; \n \n v=AB_Transaction_GetValue(t); \n if (v) { \n AB_Value_AddValue(st->controlSum, v); \n } \n }
public own const dup const 0 0 public none public own with_hash const dup const NULL NULL AQDB_DataType_String public own with_hash const dup const NULL NULL AB_Transaction_SequenceUnknown AB_Transaction_SequenceUnknown public with_hash none none public own with_hash const dup const Creditor Scheme Identification" ("Glaeubiger-ID", assigned by Deutsche Bundesbank). public own with_hash const dup const public own with_hash const dup const public own with_hash const dup const List of transactions. This list contains any kind of transactions all in one list. You can differentiate the type of the transaction (e.g. bank statement, debit note, transfer etc) by looking at the transaction type (see @ref AB_Transaction_GetType). NULL AB_Transaction_List2_new() public own nodup none public own volatile const dup const
aqbanking-6.6.1/src/libs/plugins/imexporters/xml/xml.c0000664000175000017500000005763514546575650017771 00000000000000/*************************************************************************** begin : Sun Dec 16 2018 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "xml_p.h" #include "xml_sepa_exp.h" #include "xml_sepa_imp.h" #include "aqbanking/i18n_l.h" #include #include #include #include #include #include #include GWEN_INHERIT(AB_IMEXPORTER, AB_IMEXPORTER_XML); /* ------------------------------------------------------------------------------------------------ * forward declarations * ------------------------------------------------------------------------------------------------ */ static void _readAccountsFromDb(AB_IMEXPORTER_CONTEXT *ctx, GWEN_DB_NODE *dbData); static int _readSecuritiesFromDb(AB_IMEXPORTER_CONTEXT *ctx, GWEN_DB_NODE *dbData); static AB_TRANSACTION *dbToTransaction(GWEN_DB_NODE *dbAccount, GWEN_DB_NODE *dbTransaction); static void handleTransactionDetails(AB_TRANSACTION *t, const char *sDetails); static void GWENHYWFAR_CB AB_ImExporterXML_FreeData(void *bp, void *p); static int AB_ImExporterXML_Import(AB_IMEXPORTER *ie, AB_IMEXPORTER_CONTEXT *ctx, GWEN_SYNCIO *sio, GWEN_DB_NODE *params); static int AB_ImExporterXML_Export(AB_IMEXPORTER *ie, AB_IMEXPORTER_CONTEXT *ctx, GWEN_SYNCIO *sio, GWEN_DB_NODE *params); static int AB_ImExporterXML_CheckFile(AB_IMEXPORTER *ie, const char *fname); static GWEN_DB_NODE *AB_ImExporterXML_ImportIntoDbWithSchema(AB_IMEXPORTER *ie, GWEN_XMLNODE *xmlDocData, const char *schemaName); static GWEN_DB_NODE *AB_ImExporterXML_ImportIntoDbWithoutSchema(AB_IMEXPORTER *ie, GWEN_XMLNODE *xmlDocData); static GWEN_DB_NODE *AB_ImExporterXML_ImportIntoDbWithSchemaDoc(AB_IMEXPORTER *ie, GWEN_XMLNODE *xmlDocData, GWEN_XMLNODE *xmlDocSchema); static GWEN_XMLNODE *AB_ImExporterXML_ReadSchemaFiles(AB_IMEXPORTER *ie); static GWEN_XMLNODE *AB_ImExporterXML_FindMatchingSchema(AB_IMEXPORTER *ie, GWEN_XMLNODE *xmlNodeAllSchemata, GWEN_XMLNODE *xmlDocData); static const char *AB_ImExporterXML_GetCharValueByPath(GWEN_XMLNODE *xmlNode, const char *path, const char *defValue); static int AB_ImExporterXML_ImportDb(AB_IMEXPORTER *ie, AB_IMEXPORTER_CONTEXT *ctx, GWEN_DB_NODE *dbData); static void _transformValue(GWEN_DB_NODE *dbData, const char *varNameValue, const char *varNameCurrency, const char *destVarName); /* ------------------------------------------------------------------------------------------------ * implementations * ------------------------------------------------------------------------------------------------ */ #ifndef strndup static char *my_strndup(const char *src, size_t n) { int len; len=strlen(src); if (len element has no element"); } } /* xmlNodeDocMatches */ else { DBG_INFO(AQBANKING_LOGDOMAIN, "Schema has no element"); GWEN_XMLNode_Dump(xmlNodeSchema, 2); } xmlNodeSchema=GWEN_XMLNode_FindNextTag(xmlNodeSchema, "Schema", NULL, NULL); } /* while(xmlNodeSchema) */ return NULL; } const char *AB_ImExporterXML_GetCharValueByPath(GWEN_XMLNODE *xmlNode, const char *path, const char *defValue) { const char *s; s=strchr(path, '@'); if (s) { int idx; char *cpyOfPath; char *property; GWEN_XMLNODE *n; idx=s-path; cpyOfPath=strdup(path); assert(cpyOfPath); cpyOfPath[idx]=0; property=cpyOfPath+idx+1; if (*cpyOfPath) { n=GWEN_XMLNode_GetNodeByXPath(xmlNode, cpyOfPath, GWEN_PATH_FLAGS_PATHMUSTEXIST); } else n=xmlNode; if (n) { const char *result; result=GWEN_XMLNode_GetProperty(n, property, defValue); DBG_INFO(GWEN_LOGDOMAIN, "Got XML property: %s = %s (%s)", property, result, path); free(cpyOfPath); return result; } free(cpyOfPath); return defValue; } else return GWEN_XMLNode_GetCharValueByPath(xmlNode, path, defValue); } GWEN_XMLNODE *AB_ImExporterXML_ReadXmlFromSio(AB_IMEXPORTER *ie, GWEN_SYNCIO *sio, uint32_t xmlFlags) { int rv; GWEN_XMLNODE *xmlDocRoot; GWEN_XML_CONTEXT *xmlCtx; /* read whole document into XML tree */ xmlDocRoot=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "xmlDocRoot"); xmlCtx=GWEN_XmlCtxStore_new(xmlDocRoot, xmlFlags); rv=GWEN_XMLContext_ReadFromIo(xmlCtx, sio); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); GWEN_XmlCtx_free(xmlCtx); GWEN_XMLNode_free(xmlDocRoot); return NULL; } GWEN_XmlCtx_free(xmlCtx); return xmlDocRoot; } int AB_ImExporterXML_ImportDb(GWEN_UNUSED AB_IMEXPORTER *ie, AB_IMEXPORTER_CONTEXT *ctx, GWEN_DB_NODE *dbData) { _readAccountsFromDb(ctx, dbData); return _readSecuritiesFromDb(ctx, dbData); } void _readAccountsFromDb(AB_IMEXPORTER_CONTEXT *ctx, GWEN_DB_NODE *dbData) { GWEN_DB_NODE *dbAccount; dbAccount=GWEN_DB_FindFirstGroup(dbData, "account"); while (dbAccount) { AB_ACCOUNT_SPEC *accountSpec; AB_IMEXPORTER_ACCOUNTINFO *accountInfo; GWEN_DB_NODE *dbCurrent; const char *s; accountSpec=AB_AccountSpec_fromDb(dbAccount); assert(accountSpec); accountInfo=AB_ImExporterContext_GetOrAddAccountInfo(ctx, 0, AB_AccountSpec_GetIban(accountSpec), AB_AccountSpec_GetBankCode(accountSpec), AB_AccountSpec_GetAccountNumber(accountSpec), AB_AccountSpec_GetType(accountSpec)); assert(accountInfo); s=AB_ImExporterAccountInfo_GetBankName(accountInfo); if (!(s && *s)) AB_ImExporterAccountInfo_SetBankName(accountInfo, AB_AccountSpec_GetBankName(accountSpec)); s=AB_ImExporterAccountInfo_GetCurrency(accountInfo); if (!(s && *s)) { s=AB_AccountSpec_GetCurrency(accountSpec); if (s && *s) AB_ImExporterAccountInfo_SetCurrency(accountInfo, s); } /* import transactions */ dbCurrent=GWEN_DB_FindFirstGroup(dbAccount, "transaction"); while (dbCurrent) { AB_TRANSACTION *t; t=dbToTransaction(dbAccount, dbCurrent); assert(t); AB_ImExporterAccountInfo_AddTransaction(accountInfo, t); dbCurrent=GWEN_DB_FindNextGroup(dbCurrent, "transaction"); } /* import balances */ dbCurrent=GWEN_DB_FindFirstGroup(dbAccount, "balance"); while (dbCurrent) { AB_BALANCE *bal; bal=AB_Balance_fromDb(dbCurrent); AB_ImExporterAccountInfo_AddBalance(accountInfo, bal); dbCurrent=GWEN_DB_FindNextGroup(dbCurrent, "balance"); } AB_AccountSpec_free(accountSpec); dbAccount=GWEN_DB_FindNextGroup(dbAccount, "account"); } } int _readSecuritiesFromDb(AB_IMEXPORTER_CONTEXT *ctx, GWEN_DB_NODE *dbData) { GWEN_DB_NODE *dbSecurity; dbSecurity=GWEN_DB_FindFirstGroup(dbData, "security"); while (dbSecurity) { AB_SECURITY *sec; sec=AB_Security_fromDb(dbSecurity); if (sec) { const char *s; s=GWEN_DB_GetCharValue(dbSecurity, "unitPriceDate", 0, NULL); if (s && *s) { GWEN_TIME *ti; ti=GWEN_Time_fromString(s, "YYYYMMDDhhmmss"); if (ti==NULL) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Bad value for unitPriceDate: %s", s); return GWEN_ERROR_GENERIC; } AB_Security_SetUnitPriceDate(sec, ti); GWEN_Time_free(ti); } AB_ImExporterContext_AddSecurity(ctx, sec); } dbSecurity=GWEN_DB_FindNextGroup(dbSecurity, "security"); } return 0; } AB_TRANSACTION *dbToTransaction(GWEN_DB_NODE *dbAccount, GWEN_DB_NODE *dbTransaction) { AB_TRANSACTION *t; const char *s; if (NULL==GWEN_DB_GetCharValue(dbTransaction, "value", 0, NULL)) /* translate "value_value" + "value_currency" to "value" */ _transformValue(dbTransaction, "value_value", "value_currency", "value"); t=AB_Transaction_fromDb(dbTransaction); assert(t); s=AB_Transaction_GetLocalIban(t); if (!(s && *s)) AB_Transaction_SetLocalIban(t, GWEN_DB_GetCharValue(dbAccount, "iban", 0, NULL)); s=AB_Transaction_GetLocalBic(t); if (!(s && *s)) AB_Transaction_SetLocalBic(t, GWEN_DB_GetCharValue(dbAccount, "bic", 0, NULL)); s=AB_Transaction_GetLocalName(t); if (!(s && *s)) AB_Transaction_SetLocalName(t, GWEN_DB_GetCharValue(dbAccount, "ownerName", 0, NULL)); s=GWEN_DB_GetCharValue(dbTransaction, "transactionDetails", 0, NULL); if (s && *s) handleTransactionDetails(t, s); return t; } void handleTransactionDetails(AB_TRANSACTION *t, const char *sDetails) { const char *sStart; const char *s; s=sDetails; if (*s!='N') return; s++; /* transactionKey */ sStart=s; while (*s && *s!='+') s++; if (s>sStart) { char *sCopy; sCopy=strndup(sStart, s-sStart); assert(sCopy); AB_Transaction_SetTransactionKey(t, sCopy); free(sCopy); } /* transaction code */ if (!(*s)) return; s++; sStart=s; while (*s && *s!='+') s++; if (s>sStart) { char *sCopy; int num=0; sCopy=strndup(sStart, s-sStart); assert(sCopy); if (1!=sscanf(sCopy, "%d", &num)) { DBG_WARN(AQBANKING_LOGDOMAIN, "Transaction details with invalid code (2nd element) in \"%s\", ignoring", sDetails); } else AB_Transaction_SetTransactionCode(t, num); free(sCopy); } /* primanota */ if (!(*s)) return; s++; sStart=s; while (*s && *s!='+') s++; if (s>sStart) { char *sCopy; sCopy=strndup(sStart, s-sStart); assert(sCopy); AB_Transaction_SetPrimanota(t, sCopy); free(sCopy); } #if 0 /* textKexExt, ignored for now */ if (!(*s)) return; s++; sStart=s; while (*s && *s!='+') s++; if (s>sStart) { /* 4th field */ } #endif } void _transformValue(GWEN_DB_NODE *dbData, const char *varNameValue, const char *varNameCurrency, const char *destVarName) { const char *sValue; const char *sCurrency=NULL; GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 256, 0, 1); sValue=GWEN_DB_GetCharValue(dbData, varNameValue, 0, NULL); if (sValue) GWEN_Buffer_AppendString(tbuf, sValue); if (varNameCurrency) sCurrency=GWEN_DB_GetCharValue(dbData, varNameCurrency, 0, NULL); if (sCurrency) { GWEN_Buffer_AppendString(tbuf, ":"); GWEN_Buffer_AppendString(tbuf, sCurrency); } if (destVarName) GWEN_DB_SetCharValue(dbData, GWEN_DB_FLAGS_OVERWRITE_VARS, destVarName, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } aqbanking-6.6.1/src/libs/plugins/imexporters/xml/xml.xml.in0000664000175000017500000000041514043610745020717 00000000000000 @AQBANKING_VERSION_STRING@ Martin Preuss(martin@libchipcard.de) XML This plugin imports XML data. aqbanking-6.6.1/src/libs/plugins/imexporters/xml/xml_sepa_exp.c0000664000175000017500000004645014043610745021631 00000000000000/*************************************************************************** begin : Sat Apr 04 2020 copyright : (C) 2020 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "./xml_p.h" #include "./paymentgroup.h" #include "aqbanking/i18n_l.h" #include #include #include #include #include #include #include /* ------------------------------------------------------------------------------------------------ * forward declarations * ------------------------------------------------------------------------------------------------ */ static GWEN_DB_NODE *_ctxToSepaDb(AB_IMEXPORTER *ie, const AB_IMEXPORTER_CONTEXT *ctx, GWEN_DB_NODE *dbParams); static AB_IMEXPORTER_XML_PAYMENTGROUP_LIST *_sortIntoPaymentGroups(const AB_IMEXPORTER_CONTEXT *ctx, GWEN_DB_NODE *dbParams); static AB_IMEXPORTER_XML_PAYMENTGROUP *_getMatchingPaymentGroupForTransaction(AB_IMEXPORTER_XML_PAYMENTGROUP_LIST *paymentGroupList, const AB_IMEXPORTER_ACCOUNTINFO *accountInfo, const AB_TRANSACTION *t); static void _sampleTotalTransactions(AB_IMEXPORTER_XML_PAYMENTGROUP_LIST *paymentGroupList, GWEN_DB_NODE *dbData); static const char *_createAndWriteMessageId(AB_IMEXPORTER *ie, const char *varName, GWEN_DB_NODE *dbData); static void _createPaymentInfoIds(AB_IMEXPORTER_XML_PAYMENTGROUP_LIST *paymentGroupList, const char *messageId); static void _writePaymentGroups(const AB_IMEXPORTER_XML_PAYMENTGROUP_LIST *paymentGroupList, GWEN_DB_NODE *dbData, GWEN_DB_NODE *dbParams); static void _writeTransactions(const AB_IMEXPORTER_XML_PAYMENTGROUP *paymentGroup, GWEN_DB_NODE *dbData); static void _writeTransaction(const AB_TRANSACTION *t, GWEN_DB_NODE *dbData); static void _writeAmountToDbWithoutCurrency(const AB_VALUE *v, const char *varName, GWEN_DB_NODE *dbGroup); static void _writeAmountToDbWithCurrency(const AB_VALUE *v, const char *varNameAmount, const char *varNameCurrency, GWEN_DB_NODE *dbData); static void _writeCurrentDateTime(const char *varName, GWEN_DB_NODE *dbData); /* ------------------------------------------------------------------------------------------------ * implementations * ------------------------------------------------------------------------------------------------ */ int AB_ImExporterXML_ExportSepa(AB_IMEXPORTER *ie, AB_IMEXPORTER_CONTEXT *ctx, GWEN_SYNCIO *sio, GWEN_DB_NODE *dbParams) { const char *schemaName; GWEN_XMLNODE *xmlDocData; GWEN_XMLNODE *xmlDocSchema; GWEN_XMLNODE *xmlNodeExport; GWEN_XMLNODE *n; GWEN_DB_NODE *dbData; GWEN_XML_CONTEXT *xmlCtx; int rv; schemaName=GWEN_DB_GetCharValue(dbParams, "params/schema", 0, NULL); if (!(schemaName && *schemaName)) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Schema not specified."); return GWEN_ERROR_INVALID; } xmlDocSchema=AB_ImExporterXML_ReadSchemaFromFile(ie, schemaName); if (xmlDocSchema==NULL) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Schema \"%s\" not found.", schemaName); return GWEN_ERROR_INVALID; } xmlNodeExport=GWEN_XMLNode_FindFirstTag(xmlDocSchema, "Export", NULL, NULL); if (!xmlNodeExport) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Missing \"Export\" in schema file."); return GWEN_ERROR_BAD_DATA; } xmlDocData=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "xmlRoot"); n=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "?xml"); if (n) { GWEN_XMLNode_AddHeader(xmlDocData, n); GWEN_XMLNode_SetProperty(n, "version", "1.0"); GWEN_XMLNode_SetProperty(n, "encoding", "UTF-8"); } /* prepare dbData */ dbData=_ctxToSepaDb(ie, ctx, dbParams); if (dbData==NULL) { DBG_INFO(AQBANKING_LOGDOMAIN, "here"); GWEN_XMLNode_free(xmlDocData); GWEN_XMLNode_free(xmlDocSchema); return GWEN_ERROR_BAD_DATA; } #if 0 DBG_ERROR(AQBANKING_LOGDOMAIN, "Got this DB data:"); GWEN_DB_Dump(dbData, 2); #endif /* dbData -> XML node */ rv=GWEN_XmlFromDb(xmlDocData, xmlNodeExport, dbData); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); GWEN_DB_Group_free(dbData); GWEN_XMLNode_free(xmlDocData); GWEN_XMLNode_free(xmlDocSchema); return rv; } GWEN_DB_Group_free(dbData); /* write document to stream */ xmlCtx=GWEN_XmlCtxStore_new(NULL, GWEN_XML_FLAGS_SIMPLE | GWEN_XML_FLAGS_HANDLE_HEADERS | GWEN_XML_FLAGS_INDENT); rv=GWEN_XMLNode_WriteToStream(xmlDocData, xmlCtx, sio); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); GWEN_XMLNode_free(xmlDocData); GWEN_XMLNode_free(xmlDocSchema); return rv; } GWEN_XmlCtx_free(xmlCtx); GWEN_XMLNode_free(xmlDocData); GWEN_XMLNode_free(xmlDocSchema); return 0; } GWEN_DB_NODE *_ctxToSepaDb(AB_IMEXPORTER *ie, const AB_IMEXPORTER_CONTEXT *ctx, GWEN_DB_NODE *dbParams) { GWEN_DB_NODE *dbData; AB_IMEXPORTER_XML_PAYMENTGROUP_LIST *paymentGroupList; const char *messageId; dbData=GWEN_DB_Group_new("dbRoot"); paymentGroupList=_sortIntoPaymentGroups(ctx, dbParams); if (paymentGroupList==NULL) { GWEN_DB_Group_free(dbData); return NULL; } else { AB_IMEXPORTER_XML_PAYMENTGROUP *paymentGroup; paymentGroup=AB_ImExporterXML_PaymentGroup_List_First(paymentGroupList); if (paymentGroup) { const char *s; s=AB_ImExporterXML_PaymentGroup_GetLocalName(paymentGroup); if (s && *s) GWEN_DB_SetCharValue(dbData, GWEN_DB_FLAGS_OVERWRITE_VARS, "initiatorName", s); } } messageId=_createAndWriteMessageId(ie, "messageId", dbData); if (messageId==NULL) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Could not generate message id, aborting."); GWEN_DB_Group_free(dbData); return NULL;; } _writeCurrentDateTime("messageDateTime", dbData); _sampleTotalTransactions(paymentGroupList, dbData); _createPaymentInfoIds(paymentGroupList, messageId); _writePaymentGroups(paymentGroupList, dbData, dbParams); return dbData; } AB_IMEXPORTER_XML_PAYMENTGROUP_LIST *_sortIntoPaymentGroups(const AB_IMEXPORTER_CONTEXT *ctx, GWEN_DB_NODE *dbParams) { const AB_IMEXPORTER_ACCOUNTINFO *accountInfo; accountInfo=AB_ImExporterContext_GetFirstAccountInfo(ctx); if (accountInfo) { AB_IMEXPORTER_XML_PAYMENTGROUP_LIST *paymentGroupList; paymentGroupList=AB_ImExporterXML_PaymentGroup_List_new(); while (accountInfo) { AB_TRANSACTION *t; t=AB_ImExporterAccountInfo_GetFirstTransaction(accountInfo, 0, 0); while (t) { AB_IMEXPORTER_XML_PAYMENTGROUP *paymentGroup; paymentGroup=_getMatchingPaymentGroupForTransaction(paymentGroupList, accountInfo, t); if (paymentGroup) { AB_ImExporterXML_PaymentGroup_AddTransaction(paymentGroup, t); } else { DBG_ERROR(AQBANKING_LOGDOMAIN, "No payment group found?? SNH!"); AB_ImExporterXML_PaymentGroup_List_free(paymentGroupList); return NULL; } t=AB_Transaction_List_Next(t); } accountInfo=AB_ImExporterAccountInfo_List_Next(accountInfo); } if (AB_ImExporterXML_PaymentGroup_List_GetCount(paymentGroupList)==0) { AB_ImExporterXML_PaymentGroup_List_free(paymentGroupList); return NULL; } return paymentGroupList; } return NULL; } const char *_createAndWriteMessageId(AB_IMEXPORTER *ie, const char *varName, GWEN_DB_NODE *dbData) { GWEN_TIME *ti; GWEN_BUFFER *tbuf; uint32_t uid; char numbuf[32]; ti=GWEN_CurrentTime(); tbuf=GWEN_Buffer_new(0, 64, 0, 1); uid=AB_Banking_GetNamedUniqueId(AB_ImExporter_GetBanking(ie), "sepamsg", 1); GWEN_Time_toUtcString(ti, "YYYYMMDD-hh:mm:ss-", tbuf); snprintf(numbuf, sizeof(numbuf)-1, "%08x", uid); GWEN_Buffer_AppendString(tbuf, numbuf); GWEN_DB_SetCharValue(dbData, GWEN_DB_FLAGS_OVERWRITE_VARS, varName, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); GWEN_Time_free(ti); return GWEN_DB_GetCharValue(dbData, varName, 0, NULL); } void _sampleTotalTransactions(AB_IMEXPORTER_XML_PAYMENTGROUP_LIST *paymentGroupList, GWEN_DB_NODE *dbData) { /* create controlSum and tx count for GrpHdr */ AB_IMEXPORTER_XML_PAYMENTGROUP *paymentGroup; int totalNumOfTx=0; AB_VALUE *totalControlSum; totalControlSum=AB_Value_new(); paymentGroup=AB_ImExporterXML_PaymentGroup_List_First(paymentGroupList); while (paymentGroup) { const AB_VALUE *controlSum; controlSum=AB_ImExporterXML_PaymentGroup_GetControlSum(paymentGroup); if (controlSum) AB_Value_AddValue(totalControlSum, controlSum); totalNumOfTx+=AB_ImExporterXML_PaymentGroup_GetTransactionCount(paymentGroup); paymentGroup=AB_ImExporterXML_PaymentGroup_List_Next(paymentGroup); } _writeAmountToDbWithoutCurrency(totalControlSum, "controlSum", dbData); GWEN_DB_SetCharValueFromInt(dbData, GWEN_DB_FLAGS_OVERWRITE_VARS, "numberOfTransactions", totalNumOfTx); } void _createPaymentInfoIds(AB_IMEXPORTER_XML_PAYMENTGROUP_LIST *paymentGroupList, const char *messageId) { AB_IMEXPORTER_XML_PAYMENTGROUP *paymentGroup; int num=0; GWEN_BUFFER *tbuf; uint32_t pos; tbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(tbuf, messageId); GWEN_Buffer_AppendString(tbuf, "-"); pos=GWEN_Buffer_GetPos(tbuf); paymentGroup=AB_ImExporterXML_PaymentGroup_List_First(paymentGroupList); while (paymentGroup) { char numbuf[32]; snprintf(numbuf, sizeof(numbuf)-1, "%0d", (++num)); GWEN_Buffer_AppendString(tbuf, numbuf); AB_ImExporterXML_PaymentGroup_SetId(paymentGroup, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_Crop(tbuf, 0, pos); paymentGroup=AB_ImExporterXML_PaymentGroup_List_Next(paymentGroup); } GWEN_Buffer_free(tbuf); } void _writePaymentGroups(const AB_IMEXPORTER_XML_PAYMENTGROUP_LIST *paymentGroupList, GWEN_DB_NODE *dbData, GWEN_DB_NODE *dbParams) { /* write payment groups */ AB_IMEXPORTER_XML_PAYMENTGROUP *paymentGroup; paymentGroup=AB_ImExporterXML_PaymentGroup_List_First(paymentGroupList); while (paymentGroup) { GWEN_DB_NODE *dbPaymentGroup; const char *s; const AB_VALUE *controlSum; const GWEN_DATE *date; int sequence; dbPaymentGroup=GWEN_DB_GetGroup(dbData, GWEN_PATH_FLAGS_CREATE_GROUP, "paymentGroup"); /* paymentInfoId batchBooking (true / false) numberOfTransactions controlSum requestedExecutionDate ownerName iban bic */ /* copy stuff from params */ s=GWEN_DB_GetCharValue(dbParams, "LocalInstrumentSEPACode", 0, "CORE"); GWEN_DB_SetCharValue(dbPaymentGroup, GWEN_DB_FLAGS_OVERWRITE_VARS, "LocalInstrumentSEPACode", s); GWEN_DB_SetCharValue(dbPaymentGroup, GWEN_DB_FLAGS_OVERWRITE_VARS, "batchBooking", GWEN_DB_GetIntValue(dbParams, "singleBookingWanted", 0, 1)? "false": "true"); /* write data from AB_IMEXPORTER_XML_PAYMENTGROUP */ controlSum=AB_ImExporterXML_PaymentGroup_GetControlSum(paymentGroup); if (controlSum) _writeAmountToDbWithoutCurrency(controlSum, "controlSum", dbPaymentGroup); GWEN_DB_SetCharValueFromInt(dbPaymentGroup, GWEN_DB_FLAGS_OVERWRITE_VARS, "numberOfTransactions", AB_ImExporterXML_PaymentGroup_GetTransactionCount(paymentGroup)); s=AB_ImExporterXML_PaymentGroup_GetId(paymentGroup); if (s && *s) GWEN_DB_SetCharValue(dbPaymentGroup, GWEN_DB_FLAGS_OVERWRITE_VARS, "paymentInfoId", s); s=AB_ImExporterXML_PaymentGroup_GetLocalName(paymentGroup); if (s && *s) GWEN_DB_SetCharValue(dbPaymentGroup, GWEN_DB_FLAGS_OVERWRITE_VARS, "ownerName", s); s=AB_ImExporterXML_PaymentGroup_GetLocalBic(paymentGroup); if (s && *s) GWEN_DB_SetCharValue(dbPaymentGroup, GWEN_DB_FLAGS_OVERWRITE_VARS, "bic", s); s=AB_ImExporterXML_PaymentGroup_GetLocalIban(paymentGroup); if (s && *s) GWEN_DB_SetCharValue(dbPaymentGroup, GWEN_DB_FLAGS_OVERWRITE_VARS, "iban", s); date=AB_ImExporterXML_PaymentGroup_GetTransactionDate(paymentGroup); if (date) GWEN_DB_SetCharValue(dbPaymentGroup, GWEN_DB_FLAGS_OVERWRITE_VARS, "requestedExecutionDate", GWEN_Date_GetString(date)); else GWEN_DB_SetCharValue(dbPaymentGroup, GWEN_DB_FLAGS_OVERWRITE_VARS, "requestedExecutionDate", "19990101"); s=AB_ImExporterXML_PaymentGroup_GetCreditorSchemeId(paymentGroup); if (s && *s) GWEN_DB_SetCharValue(dbPaymentGroup, GWEN_DB_FLAGS_OVERWRITE_VARS, "creditorSchemeId", s); /* write sequence (if any) */ sequence=AB_ImExporterXML_PaymentGroup_GetSequence(paymentGroup); switch (sequence) { case AB_Transaction_SequenceOnce: s="OOFF"; break; case AB_Transaction_SequenceFirst: s="FRST"; break; case AB_Transaction_SequenceFollowing: s="RCUR"; break; case AB_Transaction_SequenceFinal: s="FNAL"; break; default: s=NULL; break; } if (s && *s) GWEN_DB_SetCharValue(dbPaymentGroup, GWEN_DB_FLAGS_OVERWRITE_VARS, "sequence", s); _writeTransactions(paymentGroup, dbPaymentGroup); paymentGroup=AB_ImExporterXML_PaymentGroup_List_Next(paymentGroup); } } void _writeTransactions(const AB_IMEXPORTER_XML_PAYMENTGROUP *paymentGroup, GWEN_DB_NODE *dbData) { AB_TRANSACTION_LIST2 *transactionList2; transactionList2=AB_ImExporterXML_PaymentGroup_GetTransactionList2(paymentGroup); if (transactionList2) { AB_TRANSACTION_LIST2_ITERATOR *it; it=AB_Transaction_List2_First(transactionList2); if (it) { const AB_TRANSACTION *t; t=AB_Transaction_List2Iterator_Data(it); while (t) { GWEN_DB_NODE *dbTransaction; dbTransaction=GWEN_DB_GetGroup(dbData, GWEN_PATH_FLAGS_CREATE_GROUP, "transaction"); _writeTransaction(t, dbTransaction); t=AB_Transaction_List2Iterator_Next(it); } AB_Transaction_List2Iterator_free(it); } } } void _writeTransaction(const AB_TRANSACTION *t, GWEN_DB_NODE *dbData) { const AB_VALUE *v; AB_Transaction_toDb(t, dbData); v=AB_Transaction_GetValue(t); if (v) _writeAmountToDbWithCurrency(v, "value_value", "value_currency", dbData); } void _writeAmountToDbWithoutCurrency(const AB_VALUE *v, const char *varName, GWEN_DB_NODE *dbData) { GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 64, 0, 1); AB_Value_toHumanReadableString(v, tbuf, 2, 0); GWEN_DB_SetCharValue(dbData, GWEN_DB_FLAGS_OVERWRITE_VARS, varName, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } void _writeAmountToDbWithCurrency(const AB_VALUE *v, const char *varNameAmount, const char *varNameCurrency, GWEN_DB_NODE *dbData) { GWEN_BUFFER *tbuf; const char *s; tbuf=GWEN_Buffer_new(0, 64, 0, 1); AB_Value_toHumanReadableString(v, tbuf, 2, 0); GWEN_DB_SetCharValue(dbData, GWEN_DB_FLAGS_OVERWRITE_VARS, varNameAmount, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); s=AB_Value_GetCurrency(v); if (!(s && *s)) s="EUR"; GWEN_DB_SetCharValue(dbData, GWEN_DB_FLAGS_OVERWRITE_VARS, varNameCurrency, s); } void _writeCurrentDateTime(const char *varName, GWEN_DB_NODE *dbData) { GWEN_TIME *ti; GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 64, 0, 1); ti=GWEN_CurrentTime(); GWEN_Time_toUtcString(ti, "YYYY-MM-DDThh:mm:ss.000Z", tbuf); GWEN_DB_SetCharValue(dbData, GWEN_DB_FLAGS_OVERWRITE_VARS, varName, GWEN_Buffer_GetStart(tbuf)); GWEN_Time_free(ti); GWEN_Buffer_free(tbuf); } AB_IMEXPORTER_XML_PAYMENTGROUP *_getMatchingPaymentGroupForTransaction(AB_IMEXPORTER_XML_PAYMENTGROUP_LIST *paymentGroupList, const AB_IMEXPORTER_ACCOUNTINFO *accountInfo, const AB_TRANSACTION *t) { const char *tLocalName; const char *tLocalBic; const char *tLocalIban; const char *tCreditorSchemeId; const GWEN_DATE *tExecDate; int tSequence; AB_IMEXPORTER_XML_PAYMENTGROUP *paymentGroup; tLocalName=AB_Transaction_GetLocalName(t); if (!(tLocalName && *tLocalName)) tLocalName=AB_ImExporterAccountInfo_GetOwner(accountInfo); if (tLocalName==NULL) tLocalName=""; tLocalBic=AB_Transaction_GetLocalBic(t); if (!(tLocalBic && *tLocalBic)) tLocalBic=AB_ImExporterAccountInfo_GetBic(accountInfo); if (tLocalBic==NULL) tLocalBic=""; tLocalIban=AB_Transaction_GetLocalIban(t); if (!(tLocalIban && *tLocalIban)) tLocalIban=AB_ImExporterAccountInfo_GetIban(accountInfo); if (tLocalIban==NULL) tLocalIban=""; tCreditorSchemeId=AB_Transaction_GetCreditorSchemeId(t); if (tCreditorSchemeId==NULL) tCreditorSchemeId=""; tExecDate=AB_Transaction_GetDate(t); tSequence=AB_Transaction_GetSequence(t); paymentGroup=AB_ImExporterXML_PaymentGroup_List_First(paymentGroupList); while (paymentGroup) { const char *pLocalName; const char *pLocalBic; const char *pLocalIban; const char *pCreditorSchemeId; const GWEN_DATE *pExecDate; int pSequence; pLocalName=AB_ImExporterXML_PaymentGroup_GetLocalName(paymentGroup); if (pLocalName==NULL) pLocalName=""; pLocalBic=AB_ImExporterXML_PaymentGroup_GetLocalBic(paymentGroup); if (pLocalBic==NULL) pLocalBic=""; pLocalIban=AB_ImExporterXML_PaymentGroup_GetLocalIban(paymentGroup); if (pLocalIban==NULL) pLocalIban=""; pCreditorSchemeId=AB_ImExporterXML_PaymentGroup_GetCreditorSchemeId(paymentGroup); if (pCreditorSchemeId==NULL) pCreditorSchemeId=""; pExecDate=AB_ImExporterXML_PaymentGroup_GetTransactionDate(paymentGroup); pSequence=AB_ImExporterXML_PaymentGroup_GetSequence(paymentGroup); if ((tSequence==pSequence) && (strcasecmp(tLocalName, pLocalName)==0) && (strcasecmp(tLocalBic, pLocalBic)==0) && (strcasecmp(tLocalIban, pLocalIban)==0) && (strcasecmp(tCreditorSchemeId, pCreditorSchemeId)==0) && (GWEN_Date_Compare(tExecDate, pExecDate)==0)) return paymentGroup; paymentGroup=AB_ImExporterXML_PaymentGroup_List_Next(paymentGroup); } /* not found, create new payment group */ paymentGroup=AB_ImExporterXML_PaymentGroup_new(); AB_ImExporterXML_PaymentGroup_SetLocalName(paymentGroup, tLocalName); AB_ImExporterXML_PaymentGroup_SetLocalBic(paymentGroup, tLocalBic); AB_ImExporterXML_PaymentGroup_SetLocalIban(paymentGroup, tLocalIban); AB_ImExporterXML_PaymentGroup_SetCreditorSchemeId(paymentGroup, tCreditorSchemeId); AB_ImExporterXML_PaymentGroup_SetTransactionDate(paymentGroup, tExecDate); AB_ImExporterXML_PaymentGroup_SetSequence(paymentGroup, tSequence); AB_ImExporterXML_PaymentGroup_List_Add(paymentGroup, paymentGroupList); return paymentGroup; } aqbanking-6.6.1/src/libs/plugins/imexporters/xml/README0000664000175000017500000003044214043610745017653 00000000000000 This is a very simple parser for XML files. Content 1. Available Commands for Import 1.1. 1.2. 1.3. 1.4. 1.5. 1.6. 1.7. 1.8. 1.9. 1.10. 1.11. 1.12. 2. Available Commands for Export 2.1. 2.2. 2.3. 2.4. 2.5. 2.6. 2.7. 2.8. 2.9. 2.10. 2.11. 3. Structure of GWEN_DB Data 3.1. Basic Data Structure 3.2. Detailed Data Structure in Standard Mode 3.3. Detailed Data Structure in SEPA Mode 1. Available Commands for Import ================================ The following XML elements can be used inside a the "" element of a Schema file. 1.1. --------------------------- Enter the given path inside the source document. Iterate through all children of the schema node. 1.2. ------------------------------ Enter the given path inside the source document and iterate through all children of the schema node with every matching source document node. 1.3. ------------------------------------------- Create a GWEN_DB node and make it the current node for iteration through all children of the schema node. 1.4. ----------------------------------------------- Create a GWEN_DB group in the temporary DB and make it the current node for iteration through all children of the schema node. After all chidren have been handled the temporary group is deleted. 1.5. ------------------------------------------------- Set a variable in the current GWEN_DB_NODE using the text inside the given source document XML node. 1.6. --------------------------------------------------------------------------------- Set a variable in the current GWEN_DB_NODE the given "value" specification. This specification may contain references to variables in the current temporary GWEN_DB group. This can be used to compose a value from multiple XML nodes (see camt_052_001_02.xml) 1.7. ----------------------------------------------------- Set a variable in the current temporary GWEN_DB_NODE using the text inside the given source document XML node. 1.8. --------------------------------------------------------- Iterate through all children of the schema node if the data from the given path matches the given pattern. Jokers and wildcards are allowed in pattern. 1.9. ------------------------------------------------------------ Same as but reversed. 1.10. ------------------------------------ Iterate through all children of the schema node if the path contains data. 1.11. --------------------------------------- Same as but reversed. 1.12. ----------------------------------- Iterate through all children of the schema node if the given path exists in the source document. 2. Available Commands for Export ================================ The following XML elements can be used inside a the "" element of a Schema file. 2.1. -------------------------- Enter the given db group. Iterate through all children of the schema node. 2.2. ----------------------------- For every matching dbGroup iterate through all children of the schema node. 2.3. ------------------------------------------- Create the given path inside the output document. 2.4. ------------------------------------------------------------------------------ Set the given value as new data for the XML element specified by "path" (accepts full xpath). 2.5. ---------------------------------------------- Set the given value as new data for the XML element specified by "path" (accepts full xpath) using data stored in the dbGroup variable "name". 2.6. -------------------------------------------------------- Iterate through all children of the schema node if the given variable in dbGroup matches the given pattern. 2.7. ----------------------------------------------------------- Same as except reversed. 2.8. ---------------------------------- Iterate through all children of the schema node if the given variable in dbGroup has content. 2.9. ------------------------------------- Same as except reversed. 2.10. ---------------------------------- Iterate through all children of the schema node if the given path in dbGroup exists. 2.11. ------------------------------------- Same as except reversed. 3. Structure of GWEN_DB Data ============================ A GWEN_DB structure is a tree of data containing "groups" and "vars", the latter containing "values". Groups can be created with Variables can be set with 3.1. Basic Data Structure ------------------------- The group structure is very simple: group account info for account1 group transaction info for transaction 1 ... group transaction info for transaction N group balance info for balance 1 ... group balance info for balance N Or in SEPA mode: info regarding the whole document group paymentGroup info for paymentGroup1 group transaction info for transaction 1 ... group transaction info for transaction N group balance info for balance 1 ... group balance info for balance N 3.2. Detailed Data Structure in Standard Mode --------------------------------------------- group account (AB_ACCOUNT_SPEC) int type int uniqueId string backendName string ownerName string accountName string currency string memo string iban string bic string country string bankCode string bankName string branchId string accountNumber string subAccountNumber group transaction (AB_TRANSACTION) # types, ids etc int type int subType int command int status int uniqueAccountId int uniqueId int refUniqueId int idForApplication string stringIdForApplication int sessionId int groupId string fiId # local account string localIban string localBic string localCountry string localBankCode string localBranchId string localAccountNumber string localSuffix string localName # remote account string remoteCountry string remoteBankCode string remoteBranchId string remoteAccountNumber string remoteSuffix string remoteIban string remoteBic string remoteName string date string valutaDate # amount string value (AB_VALUE) string value_value (AB_VALUE: value) string value_currency (AB_VALUE: currency) string fees (AB_VALUE) # codes, memos, purpose etc int transactionCode string transactionText string transactionKey int textKey string primanota string purpose string category string customerReference string bankReference string endToEndReference # SEPA debit notes string creditorSchemeId string originatorId string mandateId string mandateDate string mandateDebitorName string originalCreditorSchemeId string originalMandateId string originalCreditorName string sequence int charge # foreign transfers string remoteAddrStreet string remoteAddrZipcode string remoteAddrCity string remoteAddrPhone # standing orders int period int cycle int executionDay string firstDate (GWEN_DATE) string lastDate (GWEN_DATE) string nextDate (GWEN_DATE) # securities string unitId string unitIdNameSpace string tickerSymbol string units (AB_VALUE) string unitPriceValue (AB_VALUE) string unitPriceDate (GWEN_DATE) string commissionValue (AB_VALUE) # others string memo group balance string date (GWEN_DATE) string value (AB_VALUE) int type (0:none, 1:noted, 2:booked, 3:bankLine, 4:disposable, 5:temporary) 3.3. Detailed Data Structure in SEPA Mode ----------------------------------------- string messageId string messageDateTime string numberOfTransactions string controlSum (AB_VALUE: value, no currency) group paymentGroup string paymentInfoId string batchBooking ("true" or "false") string numberOfTransactions string controlSum string requestedExecutionDate string ownerName string iban string bic string sequence (for direct debit, already translated into SEPA sequence strings like OOF, FRST, RCUR etc). string creditorSchemeId (for direct debit) group transaction (AB_TRANSACTION) # types, ids etc int type int subType int command int status int uniqueAccountId int uniqueId int refUniqueId int idForApplication string stringIdForApplication int sessionId int groupId string fiId # local account string localIban string localBic string localCountry string localBankCode string localBranchId string localAccountNumber string localSuffix string localName # remote account string remoteCountry string remoteBankCode string remoteBranchId string remoteAccountNumber string remoteSuffix string remoteIban string remoteBic string remoteName string date string valutaDate # amount string value (AB_VALUE) string value_value (AB_VALUE: value) string value_currency (AB_VALUE: currency) string fees (AB_VALUE) # codes, memos, purpose etc int transactionCode string transactionText string transactionKey int textKey string primanota string purpose string category string customerReference string bankReference string endToEndReference # SEPA debit notes string creditorSchemeId string originatorId string mandateId string mandateDate string mandateDebitorName string originalCreditorSchemeId string originalMandateId string originalCreditorName string sequence int charge # foreign transfers string remoteAddrStreet string remoteAddrZipcode string remoteAddrCity string remoteAddrPhone # standing orders int period int cycle int executionDay string firstDate (GWEN_DATE) string lastDate (GWEN_DATE) string nextDate (GWEN_DATE) # securities string unitId string unitIdNameSpace string tickerSymbol string units (AB_VALUE) string unitPriceValue (AB_VALUE) string unitPriceDate (GWEN_DATE) string commissionValue (AB_VALUE) # others string memo group balance string date (GWEN_DATE) string value (AB_VALUE) int type (0:none, 1:noted, 2:booked, 3:bankLine, 4:disposable, 5:temporary) aqbanking-6.6.1/src/libs/plugins/imexporters/xml/paymentgroup.h0000664000175000017500000002305115037736054021702 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "paymentgroup.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef AB_IMEXPORTER_XML_PAYMENTGROUP_PAYMENTGROUP_H #define AB_IMEXPORTER_XML_PAYMENTGROUP_PAYMENTGROUP_H #ifdef __cplusplus extern "C" { #endif /** @page P_AB_IMEXPORTER_XML_PAYMENTGROUP Structure AB_IMEXPORTER_XML_PAYMENTGROUP

This page describes the properties of AB_IMEXPORTER_XML_PAYMENTGROUP.

AB_IMEXPORTER_XML_PAYMENTGROUP

@anchor AB_IMEXPORTER_XML_PAYMENTGROUP_id

id

Set this property with @ref AB_ImExporterXML_PaymentGroup_SetId(), get it with @ref AB_ImExporterXML_PaymentGroup_GetId().

@anchor AB_IMEXPORTER_XML_PAYMENTGROUP_transactionCount

transactionCount

Set this property with @ref AB_ImExporterXML_PaymentGroup_SetTransactionCount(), get it with @ref AB_ImExporterXML_PaymentGroup_GetTransactionCount().

@anchor AB_IMEXPORTER_XML_PAYMENTGROUP_controlSum

controlSum

Set this property with @ref AB_ImExporterXML_PaymentGroup_SetControlSum(), get it with @ref AB_ImExporterXML_PaymentGroup_GetControlSum().

@anchor AB_IMEXPORTER_XML_PAYMENTGROUP_transactionDate

transactionDate

Set this property with @ref AB_ImExporterXML_PaymentGroup_SetTransactionDate(), get it with @ref AB_ImExporterXML_PaymentGroup_GetTransactionDate().

@anchor AB_IMEXPORTER_XML_PAYMENTGROUP_sequence

sequence

Set this property with @ref AB_ImExporterXML_PaymentGroup_SetSequence(), get it with @ref AB_ImExporterXML_PaymentGroup_GetSequence().

@anchor AB_IMEXPORTER_XML_PAYMENTGROUP_creditorSchemeId

creditorSchemeId

Creditor Scheme Identification" ("Glaeubiger-ID", assigned by Deutsche Bundesbank).

Set this property with @ref AB_ImExporterXML_PaymentGroup_SetCreditorSchemeId(), get it with @ref AB_ImExporterXML_PaymentGroup_GetCreditorSchemeId().

@anchor AB_IMEXPORTER_XML_PAYMENTGROUP_localIban

localIban

Set this property with @ref AB_ImExporterXML_PaymentGroup_SetLocalIban(), get it with @ref AB_ImExporterXML_PaymentGroup_GetLocalIban().

@anchor AB_IMEXPORTER_XML_PAYMENTGROUP_localBic

localBic

Set this property with @ref AB_ImExporterXML_PaymentGroup_SetLocalBic(), get it with @ref AB_ImExporterXML_PaymentGroup_GetLocalBic().

@anchor AB_IMEXPORTER_XML_PAYMENTGROUP_localName

localName

Set this property with @ref AB_ImExporterXML_PaymentGroup_SetLocalName(), get it with @ref AB_ImExporterXML_PaymentGroup_GetLocalName().

@anchor AB_IMEXPORTER_XML_PAYMENTGROUP_transactionList2

transactionList2

List of transactions. This list contains any kind of transactions all in one list. You can differentiate the type of the transaction (e.g. bank statement, debit note, transfer etc) by looking at the transaction type (see @ref AB_Transaction_GetType).

Set this property with @ref AB_ImExporterXML_PaymentGroup_SetTransactionList2(), get it with @ref AB_ImExporterXML_PaymentGroup_GetTransactionList2().

@anchor AB_IMEXPORTER_XML_PAYMENTGROUP_hash

hash

Set this property with @ref AB_ImExporterXML_PaymentGroup_SetHash(), get it with @ref AB_ImExporterXML_PaymentGroup_GetHash().

*/ /* needed system headers */ #include #include /* pre-headers */ #include #include #include #include #include #include #include typedef struct AB_IMEXPORTER_XML_PAYMENTGROUP AB_IMEXPORTER_XML_PAYMENTGROUP; GWEN_LIST_FUNCTION_DEFS(AB_IMEXPORTER_XML_PAYMENTGROUP, AB_ImExporterXML_PaymentGroup) /* post-headers */ /** Constructor. */ AB_IMEXPORTER_XML_PAYMENTGROUP *AB_ImExporterXML_PaymentGroup_new(void); /** Destructor. */ void AB_ImExporterXML_PaymentGroup_free(AB_IMEXPORTER_XML_PAYMENTGROUP *p_struct); AB_IMEXPORTER_XML_PAYMENTGROUP *AB_ImExporterXML_PaymentGroup_dup(const AB_IMEXPORTER_XML_PAYMENTGROUP *p_src); AB_IMEXPORTER_XML_PAYMENTGROUP *AB_ImExporterXML_PaymentGroup_copy(AB_IMEXPORTER_XML_PAYMENTGROUP *p_struct, const AB_IMEXPORTER_XML_PAYMENTGROUP *p_src); /** Getter. * Use this function to get the member "id" (see @ref AB_IMEXPORTER_XML_PAYMENTGROUP_id) */ const char *AB_ImExporterXML_PaymentGroup_GetId(const AB_IMEXPORTER_XML_PAYMENTGROUP *p_struct); /** Getter. * Use this function to get the member "transactionCount" (see @ref AB_IMEXPORTER_XML_PAYMENTGROUP_transactionCount) */ int AB_ImExporterXML_PaymentGroup_GetTransactionCount(const AB_IMEXPORTER_XML_PAYMENTGROUP *p_struct); /** Getter. * Use this function to get the member "controlSum" (see @ref AB_IMEXPORTER_XML_PAYMENTGROUP_controlSum) */ const AB_VALUE *AB_ImExporterXML_PaymentGroup_GetControlSum(const AB_IMEXPORTER_XML_PAYMENTGROUP *p_struct); /** Getter. * Use this function to get the member "transactionDate" (see @ref AB_IMEXPORTER_XML_PAYMENTGROUP_transactionDate) */ const GWEN_DATE *AB_ImExporterXML_PaymentGroup_GetTransactionDate(const AB_IMEXPORTER_XML_PAYMENTGROUP *p_struct); /** Getter. * Use this function to get the member "sequence" (see @ref AB_IMEXPORTER_XML_PAYMENTGROUP_sequence) */ int AB_ImExporterXML_PaymentGroup_GetSequence(const AB_IMEXPORTER_XML_PAYMENTGROUP *p_struct); /** Getter. * Use this function to get the member "creditorSchemeId" (see @ref AB_IMEXPORTER_XML_PAYMENTGROUP_creditorSchemeId) */ const char *AB_ImExporterXML_PaymentGroup_GetCreditorSchemeId(const AB_IMEXPORTER_XML_PAYMENTGROUP *p_struct); /** Getter. * Use this function to get the member "localIban" (see @ref AB_IMEXPORTER_XML_PAYMENTGROUP_localIban) */ const char *AB_ImExporterXML_PaymentGroup_GetLocalIban(const AB_IMEXPORTER_XML_PAYMENTGROUP *p_struct); /** Getter. * Use this function to get the member "localBic" (see @ref AB_IMEXPORTER_XML_PAYMENTGROUP_localBic) */ const char *AB_ImExporterXML_PaymentGroup_GetLocalBic(const AB_IMEXPORTER_XML_PAYMENTGROUP *p_struct); /** Getter. * Use this function to get the member "localName" (see @ref AB_IMEXPORTER_XML_PAYMENTGROUP_localName) */ const char *AB_ImExporterXML_PaymentGroup_GetLocalName(const AB_IMEXPORTER_XML_PAYMENTGROUP *p_struct); /** Getter. * Use this function to get the member "transactionList2" (see @ref AB_IMEXPORTER_XML_PAYMENTGROUP_transactionList2) */ AB_TRANSACTION_LIST2 *AB_ImExporterXML_PaymentGroup_GetTransactionList2(const AB_IMEXPORTER_XML_PAYMENTGROUP *p_struct); /** Getter. * Use this function to get the member "hash" (see @ref AB_IMEXPORTER_XML_PAYMENTGROUP_hash) */ const char *AB_ImExporterXML_PaymentGroup_GetHash(const AB_IMEXPORTER_XML_PAYMENTGROUP *p_struct); /** Setter. * Use this function to set the member "id" (see @ref AB_IMEXPORTER_XML_PAYMENTGROUP_id) */ void AB_ImExporterXML_PaymentGroup_SetId(AB_IMEXPORTER_XML_PAYMENTGROUP *p_struct, const char *p_src); /** Setter. * Use this function to set the member "transactionCount" (see @ref AB_IMEXPORTER_XML_PAYMENTGROUP_transactionCount) */ void AB_ImExporterXML_PaymentGroup_SetTransactionCount(AB_IMEXPORTER_XML_PAYMENTGROUP *p_struct, int p_src); /** Setter. * Use this function to set the member "controlSum" (see @ref AB_IMEXPORTER_XML_PAYMENTGROUP_controlSum) */ void AB_ImExporterXML_PaymentGroup_SetControlSum(AB_IMEXPORTER_XML_PAYMENTGROUP *p_struct, const AB_VALUE *p_src); /** Setter. * Use this function to set the member "transactionDate" (see @ref AB_IMEXPORTER_XML_PAYMENTGROUP_transactionDate) */ void AB_ImExporterXML_PaymentGroup_SetTransactionDate(AB_IMEXPORTER_XML_PAYMENTGROUP *p_struct, const GWEN_DATE *p_src); /** Setter. * Use this function to set the member "sequence" (see @ref AB_IMEXPORTER_XML_PAYMENTGROUP_sequence) */ void AB_ImExporterXML_PaymentGroup_SetSequence(AB_IMEXPORTER_XML_PAYMENTGROUP *p_struct, int p_src); /** Setter. * Use this function to set the member "creditorSchemeId" (see @ref AB_IMEXPORTER_XML_PAYMENTGROUP_creditorSchemeId) */ void AB_ImExporterXML_PaymentGroup_SetCreditorSchemeId(AB_IMEXPORTER_XML_PAYMENTGROUP *p_struct, const char *p_src); /** Setter. * Use this function to set the member "localIban" (see @ref AB_IMEXPORTER_XML_PAYMENTGROUP_localIban) */ void AB_ImExporterXML_PaymentGroup_SetLocalIban(AB_IMEXPORTER_XML_PAYMENTGROUP *p_struct, const char *p_src); /** Setter. * Use this function to set the member "localBic" (see @ref AB_IMEXPORTER_XML_PAYMENTGROUP_localBic) */ void AB_ImExporterXML_PaymentGroup_SetLocalBic(AB_IMEXPORTER_XML_PAYMENTGROUP *p_struct, const char *p_src); /** Setter. * Use this function to set the member "localName" (see @ref AB_IMEXPORTER_XML_PAYMENTGROUP_localName) */ void AB_ImExporterXML_PaymentGroup_SetLocalName(AB_IMEXPORTER_XML_PAYMENTGROUP *p_struct, const char *p_src); /** Setter. * Use this function to set the member "transactionList2" (see @ref AB_IMEXPORTER_XML_PAYMENTGROUP_transactionList2) */ void AB_ImExporterXML_PaymentGroup_SetTransactionList2(AB_IMEXPORTER_XML_PAYMENTGROUP *p_struct, AB_TRANSACTION_LIST2 *p_src); /** Setter. * Use this function to set the member "hash" (see @ref AB_IMEXPORTER_XML_PAYMENTGROUP_hash) */ void AB_ImExporterXML_PaymentGroup_SetHash(AB_IMEXPORTER_XML_PAYMENTGROUP *p_struct, const char *p_src); AB_IMEXPORTER_XML_PAYMENTGROUP_LIST *AB_ImExporterXML_PaymentGroup_List_dup(const AB_IMEXPORTER_XML_PAYMENTGROUP_LIST *p_src); void AB_ImExporterXML_PaymentGroup_AddTransaction(AB_IMEXPORTER_XML_PAYMENTGROUP *st, AB_TRANSACTION *t); #ifdef __cplusplus } #endif #endif aqbanking-6.6.1/src/libs/plugins/imexporters/xml/data/0000755000175000017500000000000015037736160017763 500000000000000aqbanking-6.6.1/src/libs/plugins/imexporters/xml/data/ofx2.xml0000664000175000017500000003423514043610745021310 00000000000000 200 aqbanking-6.6.1/src/libs/plugins/imexporters/xml/data/camt_052_001_02.xml0000664000175000017500000003322514043610745022623 00000000000000 *camt.052.001.02* aqbanking-6.6.1/src/libs/plugins/imexporters/xml/data/pain_001_001_09.xml0000644000175000017500000001577215037735651022644 00000000000000 *pain.001.001.09* aqbanking-6.6.1/src/libs/plugins/imexporters/xml/data/Makefile.in0000644000175000017500000004624415037736026021763 00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/libs/plugins/imexporters/xml/data ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/distri.m4 $(top_srcdir)/m4/gwenhywfar.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/os.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(imexdatadir)" DATA = $(imexdata_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADD_ACLOCAL_FLAGS = @ADD_ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AQBANKING_CLI_VERSION_STRING = @AQBANKING_CLI_VERSION_STRING@ AQBANKING_FINTS_VERSION_STRING = @AQBANKING_FINTS_VERSION_STRING@ AQBANKING_SO_AGE = @AQBANKING_SO_AGE@ AQBANKING_SO_CURRENT = @AQBANKING_SO_CURRENT@ AQBANKING_SO_EFFECTIVE = @AQBANKING_SO_EFFECTIVE@ AQBANKING_SO_REVISION = @AQBANKING_SO_REVISION@ AQBANKING_VERSION_BUILD = @AQBANKING_VERSION_BUILD@ AQBANKING_VERSION_FULL_STRING = @AQBANKING_VERSION_FULL_STRING@ AQBANKING_VERSION_MAJOR = @AQBANKING_VERSION_MAJOR@ AQBANKING_VERSION_MINOR = @AQBANKING_VERSION_MINOR@ AQBANKING_VERSION_PATCHLEVEL = @AQBANKING_VERSION_PATCHLEVEL@ AQBANKING_VERSION_RELEASE_STRING = @AQBANKING_VERSION_RELEASE_STRING@ AQBANKING_VERSION_STRING = @AQBANKING_VERSION_STRING@ AQBANKING_VERSION_TAG = @AQBANKING_VERSION_TAG@ AQEBICS_CFLAGS = @AQEBICS_CFLAGS@ AQEBICS_LIBS = @AQEBICS_LIBS@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATETIME = @DATETIME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_EXCLUDE_PATTERNS = @DOXYGEN_EXCLUDE_PATTERNS@ DOXYGEN_FILE_PATTERNS = @DOXYGEN_FILE_PATTERNS@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENGUI_GTK2_CFLAGS = @GWENGUI_GTK2_CFLAGS@ GWENGUI_GTK2_LIBS = @GWENGUI_GTK2_LIBS@ GWENHYWFAR_MINIMUM_VERSION = @GWENHYWFAR_MINIMUM_VERSION@ HAVE_GWENGUI_GTK2 = @HAVE_GWENGUI_GTK2@ HAVE_I18N = @HAVE_I18N@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIBXSLT_CFLAGS = @LIBXSLT_CFLAGS@ LIBXSLT_LIBS = @LIBXSLT_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_SUPPORTS_QT = @MSGFMT_SUPPORTS_QT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ TUTORIALS = @TUTORIALS@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XMLMERGE = @XMLMERGE@ XMLSEC_CFLAGS = @XMLSEC_CFLAGS@ XMLSEC_LIBS = @XMLSEC_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ aqbanking_backends = @aqbanking_backends@ aqbanking_cfg_searchdir = @aqbanking_cfg_searchdir@ aqbanking_data_searchdir = @aqbanking_data_searchdir@ aqbanking_headerdir = @aqbanking_headerdir@ aqbanking_headerdir_am = @aqbanking_headerdir_am@ aqbanking_includes = @aqbanking_includes@ aqbanking_internal_libs = @aqbanking_internal_libs@ aqbanking_ldflags = @aqbanking_ldflags@ aqbanking_libs = @aqbanking_libs@ aqbanking_locale_searchdir = @aqbanking_locale_searchdir@ aqbanking_modules = @aqbanking_modules@ aqbanking_pkgdatadir = @aqbanking_pkgdatadir@ aqbanking_plugin_searchdir = @aqbanking_plugin_searchdir@ aqbanking_plugindir = @aqbanking_plugindir@ aqbanking_plugins_backends_dirs = @aqbanking_plugins_backends_dirs@ aqbanking_plugins_backends_libs = @aqbanking_plugins_backends_libs@ aqbanking_plugins_bankinfo_dirs = @aqbanking_plugins_bankinfo_dirs@ aqbanking_plugins_bankinfo_libs = @aqbanking_plugins_bankinfo_libs@ aqbanking_plugins_imexporters_dirs = @aqbanking_plugins_imexporters_dirs@ aqbanking_plugins_imexporters_libs = @aqbanking_plugins_imexporters_libs@ aqbanking_plugins_parsers_dirs = @aqbanking_plugins_parsers_dirs@ aqbanking_symlinkdir = @aqbanking_symlinkdir@ aqbanking_sys_is_windows = @aqbanking_sys_is_windows@ aqbankingpp_modules = @aqbankingpp_modules@ aqebics_datadir = @aqebics_datadir@ aqebics_includes = @aqebics_includes@ aqebics_internal_libs = @aqebics_internal_libs@ aqebics_ldflags = @aqebics_ldflags@ aqebics_libs = @aqebics_libs@ aqfints_datadir = @aqfints_datadir@ aqhbci_datadir = @aqhbci_datadir@ aqhbci_includes = @aqhbci_includes@ aqhbci_internal_libs = @aqhbci_internal_libs@ aqhbci_ldflags = @aqhbci_ldflags@ aqhbci_libs = @aqhbci_libs@ aqofxconnect_includes = @aqofxconnect_includes@ aqofxconnect_internal_libs = @aqofxconnect_internal_libs@ aqofxconnect_libs = @aqofxconnect_libs@ aqpaypal_includes = @aqpaypal_includes@ aqpaypal_internal_libs = @aqpaypal_internal_libs@ aqpaypal_libs = @aqpaypal_libs@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gmp_libs = @gmp_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_dir = @gwenhywfar_dir@ gwenhywfar_has_crypt = @gwenhywfar_has_crypt@ gwenhywfar_headers = @gwenhywfar_headers@ gwenhywfar_includes = @gwenhywfar_includes@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_plugins = @gwenhywfar_plugins@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ typemaker2_exe = @typemaker2_exe@ visibility_cflags = @visibility_cflags@ with_aqebics = @with_aqebics@ with_aqhbci = @with_aqhbci@ imexdatadir = $(aqbanking_pkgdatadir)/imexporters/xml/data imexdata_DATA = \ camt_052_001_02.xml \ camt_053_001_02.xml \ camt_053_001_04.xml \ pain_001_003_03.xml \ pain_001_001_03.xml \ pain_001_001_09.xml \ pain_008_003_02.xml \ pain_008_001_02.xml \ ofx1.xml \ ofx2.xml EXTRA_DIST = $(imexdata_DATA) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libs/plugins/imexporters/xml/data/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libs/plugins/imexporters/xml/data/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-imexdataDATA: $(imexdata_DATA) @$(NORMAL_INSTALL) @list='$(imexdata_DATA)'; test -n "$(imexdatadir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(imexdatadir)'"; \ $(MKDIR_P) "$(DESTDIR)$(imexdatadir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(imexdatadir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(imexdatadir)" || exit $$?; \ done uninstall-imexdataDATA: @$(NORMAL_UNINSTALL) @list='$(imexdata_DATA)'; test -n "$(imexdatadir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(imexdatadir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(imexdatadir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-imexdataDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-imexdataDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-imexdataDATA install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags-am uninstall \ uninstall-am uninstall-imexdataDATA .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: aqbanking-6.6.1/src/libs/plugins/imexporters/xml/data/pain_001_003_03.xml0000664000175000017500000001553414043610745022626 00000000000000 *pain.001.003.03* aqbanking-6.6.1/src/libs/plugins/imexporters/xml/data/camt_053_001_04.xml0000664000175000017500000002775514043610745022641 00000000000000 *camt.053.001.04* aqbanking-6.6.1/src/libs/plugins/imexporters/xml/data/pain_008_003_02.xml0000664000175000017500000002323314043610745022627 00000000000000 *pain.008.003.02* aqbanking-6.6.1/src/libs/plugins/imexporters/xml/data/pain_001_001_03.xml0000664000175000017500000001554214043610745022623 00000000000000 *pain.001.001.03* aqbanking-6.6.1/src/libs/plugins/imexporters/xml/data/pain_008_001_02.xml0000664000175000017500000002340314043610745022624 00000000000000 *pain.008.001.02* aqbanking-6.6.1/src/libs/plugins/imexporters/xml/data/camt_053_001_02.xml0000664000175000017500000003041214730347270022622 00000000000000 *camt.053.001.02* aqbanking-6.6.1/src/libs/plugins/imexporters/xml/data/Makefile.am0000664000175000017500000000050214730347270021735 00000000000000 imexdatadir = $(aqbanking_pkgdatadir)/imexporters/xml/data imexdata_DATA=\ camt_052_001_02.xml \ camt_053_001_02.xml \ camt_053_001_04.xml \ pain_001_003_03.xml \ pain_001_001_03.xml \ pain_001_001_09.xml \ pain_008_003_02.xml \ pain_008_001_02.xml \ ofx1.xml \ ofx2.xml EXTRA_DIST=$(imexdata_DATA) aqbanking-6.6.1/src/libs/plugins/imexporters/xml/data/ofx1.xml0000664000175000017500000005023014043610745021300 00000000000000 aqbanking-6.6.1/src/libs/plugins/imexporters/xml/xml_sepa_imp.h0000664000175000017500000000147314043610745021623 00000000000000/*************************************************************************** begin : Sat Apr 04 2020 copyright : (C) 2020 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AQBANKING_IMEX_XML_SEPA_IMP_H #define AQBANKING_IMEX_XML_SEPA_IMP_H #include int AB_ImExporterXML_ImportSepa(AB_IMEXPORTER *ie, AB_IMEXPORTER_CONTEXT *ctx, GWEN_SYNCIO *sio, GWEN_DB_NODE *dbParams); #endif /* AQBANKING_IMEX_XML_SEPA_IMP_H */ aqbanking-6.6.1/src/libs/plugins/imexporters/openhbci1/0000755000175000017500000000000015037736160020122 500000000000000aqbanking-6.6.1/src/libs/plugins/imexporters/openhbci1/openhbci1.c0000664000175000017500000002771314043610745022066 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "openhbci1_p.h" #include "aqbanking/i18n_l.h" #include #include #include #include #include GWEN_INHERIT(AB_IMEXPORTER, AH_IMEXPORTER_OPENHBCI1); AB_IMEXPORTER *AB_ImExporterOpenHBCI1_new(AB_BANKING *ab) { AB_IMEXPORTER *ie; AH_IMEXPORTER_OPENHBCI1 *ieh; ie=AB_ImExporter_new(ab, "openhbci1"); GWEN_NEW_OBJECT(AH_IMEXPORTER_OPENHBCI1, ieh); GWEN_INHERIT_SETDATA(AB_IMEXPORTER, AH_IMEXPORTER_OPENHBCI1, ie, ieh, AH_ImExporterOpenHBCI1_FreeData); ieh->dbio=GWEN_DBIO_GetPlugin("olddb"); if (!ieh->dbio) { DBG_ERROR(AQBANKING_LOGDOMAIN, "GWEN DBIO plugin \"OldDb\" not available"); AB_ImExporter_free(ie); return 0; } AB_ImExporter_SetImportFn(ie, AH_ImExporterOpenHBCI1_Import); AB_ImExporter_SetExportFn(ie, AH_ImExporterOpenHBCI1_Export); AB_ImExporter_SetCheckFileFn(ie, AH_ImExporterOpenHBCI1_CheckFile); return ie; } void GWENHYWFAR_CB AH_ImExporterOpenHBCI1_FreeData(void *bp, void *p) { AH_IMEXPORTER_OPENHBCI1 *ieh; ieh=(AH_IMEXPORTER_OPENHBCI1 *)p; GWEN_DBIO_free(ieh->dbio); GWEN_FREE_OBJECT(ieh); } int AH_ImExporterOpenHBCI1_Import(AB_IMEXPORTER *ie, AB_IMEXPORTER_CONTEXT *ctx, GWEN_SYNCIO *sio, GWEN_DB_NODE *params) { AH_IMEXPORTER_OPENHBCI1 *ieh; GWEN_DB_NODE *dbData; GWEN_DB_NODE *dbSubParams; int rv; assert(ie); ieh=GWEN_INHERIT_GETDATA(AB_IMEXPORTER, AH_IMEXPORTER_OPENHBCI1, ie); assert(ieh); assert(ieh->dbio); dbSubParams=GWEN_DB_GetGroup(params, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "params"); dbData=GWEN_DB_Group_new("transactions"); rv=GWEN_DBIO_Import(ieh->dbio, sio, dbData, dbSubParams, GWEN_DB_FLAGS_DEFAULT | GWEN_PATH_FLAGS_CREATE_GROUP); if (rv) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Error importing data (%d)", rv); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, "Error importing data"); GWEN_DB_Group_free(dbData); return GWEN_ERROR_GENERIC; } /* transform DB to transactions */ GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Notice, I18N("Data imported, transforming to UTF-8")); rv=AB_ImExporter_DbFromIso8859_1ToUtf8(dbData); if (rv) { GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, "Error converting data"); GWEN_DB_Group_free(dbData); return rv; } GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Notice, "Transforming data to transactions"); rv=AH_ImExporterOpenHBCI1__ImportFromGroup(ctx, dbData, params); if (rv) { GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, "Error importing data"); GWEN_DB_Group_free(dbData); return rv; } GWEN_DB_Group_free(dbData); return 0; } int AH_ImExporterOpenHBCI1__ImportFromGroup(AB_IMEXPORTER_CONTEXT *ctx, GWEN_DB_NODE *db, GWEN_DB_NODE *dbParams) { GWEN_DB_NODE *dbBanks; const char *dateFormat; dateFormat=GWEN_DB_GetCharValue(dbParams, "dateFormat", 0, "YYYYMMDD"); dbBanks=GWEN_DB_GetGroup(db, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "bank"); if (dbBanks) { GWEN_DB_NODE *dbBank; dbBank=GWEN_DB_GetFirstGroup(dbBanks); if (!dbBank) { DBG_ERROR(AQBANKING_LOGDOMAIN, "No bank groups"); } while (dbBank) { GWEN_DB_NODE *dbAccounts; dbAccounts=GWEN_DB_GetGroup(dbBank, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "account"); if (dbAccounts) { GWEN_DB_NODE *dbAccount; dbAccount=GWEN_DB_GetFirstGroup(dbAccounts); if (!dbAccount) { DBG_ERROR(AQBANKING_LOGDOMAIN, "No account groups"); } while (dbAccount) { GWEN_DB_NODE *dbT; const char *bankId; const char *accountId; bankId=GWEN_DB_GetCharValue(dbAccount, "params/institute", 0, 0); accountId=GWEN_DB_GetCharValue(dbAccount, "params/accountNumber", 0, 0); dbT=GWEN_DB_FindFirstGroup(dbAccount, "transaction"); if (!dbT) { DBG_ERROR(AQBANKING_LOGDOMAIN, "No transaction groups"); } while (dbT) { AB_TRANSACTION *t; const char *p; int i; t=AB_Transaction_new(); AB_Transaction_SetLocalBankCode(t, bankId); AB_Transaction_SetLocalAccountNumber(t, accountId); p=GWEN_DB_GetCharValue(dbT, "otherInstitute", 0, 0); AB_Transaction_SetRemoteBankCode(t, p); p=GWEN_DB_GetCharValue(dbT, "otherId", 0, 0); AB_Transaction_SetRemoteAccountNumber(t, p); p=GWEN_DB_GetCharValue(dbT, "primanota", 0, 0); AB_Transaction_SetPrimanota(t, p); p=GWEN_DB_GetCharValue(dbT, "key", 0, 0); AB_Transaction_SetTransactionKey(t, p); p=GWEN_DB_GetCharValue(dbT, "text", 0, 0); AB_Transaction_SetTransactionText(t, p); AB_Transaction_SetTextKey(t, GWEN_DB_GetIntValue(dbT, "code", 0, 53)); for (i=0; ; i++) { p=GWEN_DB_GetCharValue(dbT, "description", i, 0); if (!p) break; AB_Transaction_AddPurposeLine(t, p); } for (i=0; ; i++) { p=GWEN_DB_GetCharValue(dbT, "otherName", i, 0); if (!p) break; AB_Transaction_SetRemoteName(t, p); } p=GWEN_DB_GetCharValue(dbT, "customerReference", 0, 0); AB_Transaction_SetCustomerReference(t, p); p=GWEN_DB_GetCharValue(dbT, "bankReference", 0, 0); AB_Transaction_SetBankReference(t, p); p=GWEN_DB_GetCharValue(dbT, "value", 0, 0); if (p) { AB_VALUE *val; val=AB_Value_fromString(p); if (!val) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Bad value"); } else { if (AB_Value_GetCurrency(val)==0) AB_Value_SetCurrency(val, "DEM"); AB_Transaction_SetValue(t, val); } } /* translate date */ p=GWEN_DB_GetCharValue(dbT, "date", 0, 0); if (p) { GWEN_DATE *da; da=GWEN_Date_fromStringWithTemplate(p, dateFormat); if (da) AB_Transaction_SetDate(t, da); GWEN_Date_free(da); } /* translate valutaDate */ p=GWEN_DB_GetCharValue(dbT, "valutaDate", 0, 0); if (p) { GWEN_DATE *da; da=GWEN_Date_fromStringWithTemplate(p, dateFormat); if (da) AB_Transaction_SetValutaDate(t, da); GWEN_Date_free(da); } DBG_NOTICE(AQBANKING_LOGDOMAIN, "Adding transaction"); AB_ImExporterContext_AddTransaction(ctx, t); dbT=GWEN_DB_FindNextGroup(dbT, "transaction"); } /* while dbT */ dbAccount=GWEN_DB_GetNextGroup(dbAccount); } /* while dbAccount */ } /* if dbAccounts */ else { DBG_ERROR(AQBANKING_LOGDOMAIN, "No account group"); } dbBank=GWEN_DB_GetNextGroup(dbBank); } /* while dbBank */ } /* if dbBanks */ else { DBG_ERROR(AQBANKING_LOGDOMAIN, "No bank group"); } return 0; } int AH_ImExporterOpenHBCI1_CheckFile(AB_IMEXPORTER *ie, const char *fname) { AH_IMEXPORTER_OPENHBCI1 *ieh; GWEN_DBIO_CHECKFILE_RESULT rv; assert(ie); ieh=GWEN_INHERIT_GETDATA(AB_IMEXPORTER, AH_IMEXPORTER_OPENHBCI1, ie); assert(ieh); assert(ieh->dbio); rv=GWEN_DBIO_CheckFile(ieh->dbio, fname); switch (rv) { case GWEN_DBIO_CheckFileResultOk: return AB_ERROR_INDIFFERENT; case GWEN_DBIO_CheckFileResultNotOk: return GWEN_ERROR_BAD_DATA; case GWEN_DBIO_CheckFileResultUnknown: return AB_ERROR_INDIFFERENT; default: return GWEN_ERROR_GENERIC; } /* switch */ } int AH_ImExporterOpenHBCI1_Export(AB_IMEXPORTER *ie, AB_IMEXPORTER_CONTEXT *ctx, GWEN_SYNCIO *sio, GWEN_DB_NODE *params) { AH_IMEXPORTER_OPENHBCI1 *ieh; AB_IMEXPORTER_ACCOUNTINFO *ai; GWEN_DB_NODE *dbData; GWEN_DB_NODE *dbSubParams; int rv; const char *dateFormat; assert(ie); ieh=GWEN_INHERIT_GETDATA(AB_IMEXPORTER, AH_IMEXPORTER_OPENHBCI1, ie); assert(ieh); assert(ieh->dbio); dbSubParams=GWEN_DB_GetGroup(params, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "params"); dateFormat=GWEN_DB_GetCharValue(params, "dateFormat", 0, "YYYY/MM/DD"); /* create db, store transactions in it */ dbData=GWEN_DB_Group_new("transactions"); ai=AB_ImExporterContext_GetFirstAccountInfo(ctx); while (ai) { const AB_TRANSACTION *t; t=AB_ImExporterAccountInfo_GetFirstTransaction(ai, 0, 0); while (t) { GWEN_DB_NODE *dbTransaction; const GWEN_DATE *da; dbTransaction=GWEN_DB_Group_new("transaction"); rv=AB_Transaction_toDb(t, dbTransaction); if (rv) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Could not transform transaction to db"); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, "Error transforming data to db"); GWEN_DB_Group_free(dbData); GWEN_DB_Group_free(dbTransaction); return GWEN_ERROR_GENERIC; } /* transform dates */ GWEN_DB_DeleteGroup(dbTransaction, "date"); GWEN_DB_DeleteGroup(dbTransaction, "valutaDate"); da=AB_Transaction_GetDate(t); if (da) { GWEN_BUFFER *tbuf; int rv; tbuf=GWEN_Buffer_new(0, 32, 0, 1); rv=GWEN_Date_toStringWithTemplate(da, dateFormat, tbuf); if (rv) { DBG_WARN(AQBANKING_LOGDOMAIN, "Bad date format string/date"); } else GWEN_DB_SetCharValue(dbTransaction, GWEN_DB_FLAGS_OVERWRITE_VARS, "date", GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } da=AB_Transaction_GetValutaDate(t); if (da) { GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 32, 0, 1); rv=GWEN_Date_toStringWithTemplate(da, dateFormat, tbuf); if (rv) { DBG_WARN(AQBANKING_LOGDOMAIN, "Bad date format string/date"); } else GWEN_DB_SetCharValue(dbTransaction, GWEN_DB_FLAGS_OVERWRITE_VARS, "valutaDate", GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } /* add transaction db */ GWEN_DB_AddGroup(dbData, dbTransaction); t=AB_Transaction_List_Next(t); } ai=AB_ImExporterAccountInfo_List_Next(ai); } rv=GWEN_DBIO_Export(ieh->dbio, sio, dbData, dbSubParams, GWEN_DB_FLAGS_DEFAULT); if (rv) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Error exporting data (%d)", rv); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, "Error exporting data"); GWEN_DB_Group_free(dbData); return GWEN_ERROR_GENERIC; } GWEN_DB_Group_free(dbData); return 0; } aqbanking-6.6.1/src/libs/plugins/imexporters/openhbci1/openhbci1.xml.in0000664000175000017500000000052114043610745023035 00000000000000 @AQBANKING_VERSION_STRING@ Martin Preuss(martin@libchipcard.de) Old AqMoney1/OpenHBCI1 data This plugin imports/exports old data from AqMoney1 and OpenHBCI1. aqbanking-6.6.1/src/libs/plugins/imexporters/openhbci1/openhbci1_p.h0000664000175000017500000000313414043610745022401 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AQHBCI_IMEX_OHBCI1_P_H #define AQHBCI_IMEX_OHBCI1_P_H #include #include typedef struct AH_IMEXPORTER_OPENHBCI1 AH_IMEXPORTER_OPENHBCI1; struct AH_IMEXPORTER_OPENHBCI1 { GWEN_DBIO *dbio; }; static void GWENHYWFAR_CB AH_ImExporterOpenHBCI1_FreeData(void *bp, void *p); static int AH_ImExporterOpenHBCI1_Import(AB_IMEXPORTER *ie, AB_IMEXPORTER_CONTEXT *ctx, GWEN_SYNCIO *sio, GWEN_DB_NODE *params); static int AH_ImExporterOpenHBCI1_Export(AB_IMEXPORTER *ie, AB_IMEXPORTER_CONTEXT *ctx, GWEN_SYNCIO *sio, GWEN_DB_NODE *params); static int AH_ImExporterOpenHBCI1_CheckFile(AB_IMEXPORTER *ie, const char *fname); static int AH_ImExporterOpenHBCI1__ImportFromGroup(AB_IMEXPORTER_CONTEXT *ctx, GWEN_DB_NODE *db, GWEN_DB_NODE *dbParams); #endif /* AQHBCI_IMEX_OHBCI1_P_H */ aqbanking-6.6.1/src/libs/plugins/imexporters/openhbci1/openhbci1.h0000664000175000017500000000123314043610745022060 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AQHBCI_IMEX_OHBCI1_H #define AQHBCI_IMEX_OHBCI1_H #include #include AB_IMEXPORTER *AB_ImExporterOpenHBCI1_new(AB_BANKING *ab); #endif /* AQHBCI_IMEX_OHBCI1_H */ aqbanking-6.6.1/src/libs/plugins/imexporters/openhbci1/README0000664000175000017500000000000014043610745020706 00000000000000aqbanking-6.6.1/src/libs/plugins/imexporters/openhbci1/Makefile.in0000644000175000017500000007372415037736026022125 00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/libs/plugins/imexporters/openhbci1 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/distri.m4 $(top_srcdir)/m4/gwenhywfar.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/os.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = openhbci1.xml CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libabimexporters_openhbci1_la_LIBADD = am_libabimexporters_openhbci1_la_OBJECTS = openhbci1.lo libabimexporters_openhbci1_la_OBJECTS = \ $(am_libabimexporters_openhbci1_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/openhbci1.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libabimexporters_openhbci1_la_SOURCES) DIST_SOURCES = $(libabimexporters_openhbci1_la_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(imexporterplugindir)" DATA = $(imexporterplugin_DATA) HEADERS = $(noinst_HEADERS) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir distdir-am am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/openhbci1.xml.in \ $(top_srcdir)/depcomp README DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ADD_ACLOCAL_FLAGS = @ADD_ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AQBANKING_CLI_VERSION_STRING = @AQBANKING_CLI_VERSION_STRING@ AQBANKING_FINTS_VERSION_STRING = @AQBANKING_FINTS_VERSION_STRING@ AQBANKING_SO_AGE = @AQBANKING_SO_AGE@ AQBANKING_SO_CURRENT = @AQBANKING_SO_CURRENT@ AQBANKING_SO_EFFECTIVE = @AQBANKING_SO_EFFECTIVE@ AQBANKING_SO_REVISION = @AQBANKING_SO_REVISION@ AQBANKING_VERSION_BUILD = @AQBANKING_VERSION_BUILD@ AQBANKING_VERSION_FULL_STRING = @AQBANKING_VERSION_FULL_STRING@ AQBANKING_VERSION_MAJOR = @AQBANKING_VERSION_MAJOR@ AQBANKING_VERSION_MINOR = @AQBANKING_VERSION_MINOR@ AQBANKING_VERSION_PATCHLEVEL = @AQBANKING_VERSION_PATCHLEVEL@ AQBANKING_VERSION_RELEASE_STRING = @AQBANKING_VERSION_RELEASE_STRING@ AQBANKING_VERSION_STRING = @AQBANKING_VERSION_STRING@ AQBANKING_VERSION_TAG = @AQBANKING_VERSION_TAG@ AQEBICS_CFLAGS = @AQEBICS_CFLAGS@ AQEBICS_LIBS = @AQEBICS_LIBS@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATETIME = @DATETIME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_EXCLUDE_PATTERNS = @DOXYGEN_EXCLUDE_PATTERNS@ DOXYGEN_FILE_PATTERNS = @DOXYGEN_FILE_PATTERNS@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENGUI_GTK2_CFLAGS = @GWENGUI_GTK2_CFLAGS@ GWENGUI_GTK2_LIBS = @GWENGUI_GTK2_LIBS@ GWENHYWFAR_MINIMUM_VERSION = @GWENHYWFAR_MINIMUM_VERSION@ HAVE_GWENGUI_GTK2 = @HAVE_GWENGUI_GTK2@ HAVE_I18N = @HAVE_I18N@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIBXSLT_CFLAGS = @LIBXSLT_CFLAGS@ LIBXSLT_LIBS = @LIBXSLT_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_SUPPORTS_QT = @MSGFMT_SUPPORTS_QT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ TUTORIALS = @TUTORIALS@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XMLMERGE = @XMLMERGE@ XMLSEC_CFLAGS = @XMLSEC_CFLAGS@ XMLSEC_LIBS = @XMLSEC_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ aqbanking_backends = @aqbanking_backends@ aqbanking_cfg_searchdir = @aqbanking_cfg_searchdir@ aqbanking_data_searchdir = @aqbanking_data_searchdir@ aqbanking_headerdir = @aqbanking_headerdir@ aqbanking_headerdir_am = @aqbanking_headerdir_am@ aqbanking_includes = @aqbanking_includes@ aqbanking_internal_libs = @aqbanking_internal_libs@ aqbanking_ldflags = @aqbanking_ldflags@ aqbanking_libs = @aqbanking_libs@ aqbanking_locale_searchdir = @aqbanking_locale_searchdir@ aqbanking_modules = @aqbanking_modules@ aqbanking_pkgdatadir = @aqbanking_pkgdatadir@ aqbanking_plugin_searchdir = @aqbanking_plugin_searchdir@ aqbanking_plugindir = @aqbanking_plugindir@ aqbanking_plugins_backends_dirs = @aqbanking_plugins_backends_dirs@ aqbanking_plugins_backends_libs = @aqbanking_plugins_backends_libs@ aqbanking_plugins_bankinfo_dirs = @aqbanking_plugins_bankinfo_dirs@ aqbanking_plugins_bankinfo_libs = @aqbanking_plugins_bankinfo_libs@ aqbanking_plugins_imexporters_dirs = @aqbanking_plugins_imexporters_dirs@ aqbanking_plugins_imexporters_libs = @aqbanking_plugins_imexporters_libs@ aqbanking_plugins_parsers_dirs = @aqbanking_plugins_parsers_dirs@ aqbanking_symlinkdir = @aqbanking_symlinkdir@ aqbanking_sys_is_windows = @aqbanking_sys_is_windows@ aqbankingpp_modules = @aqbankingpp_modules@ aqebics_datadir = @aqebics_datadir@ aqebics_includes = @aqebics_includes@ aqebics_internal_libs = @aqebics_internal_libs@ aqebics_ldflags = @aqebics_ldflags@ aqebics_libs = @aqebics_libs@ aqfints_datadir = @aqfints_datadir@ aqhbci_datadir = @aqhbci_datadir@ aqhbci_includes = @aqhbci_includes@ aqhbci_internal_libs = @aqhbci_internal_libs@ aqhbci_ldflags = @aqhbci_ldflags@ aqhbci_libs = @aqhbci_libs@ aqofxconnect_includes = @aqofxconnect_includes@ aqofxconnect_internal_libs = @aqofxconnect_internal_libs@ aqofxconnect_libs = @aqofxconnect_libs@ aqpaypal_includes = @aqpaypal_includes@ aqpaypal_internal_libs = @aqpaypal_internal_libs@ aqpaypal_libs = @aqpaypal_libs@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gmp_libs = @gmp_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_dir = @gwenhywfar_dir@ gwenhywfar_has_crypt = @gwenhywfar_has_crypt@ gwenhywfar_headers = @gwenhywfar_headers@ gwenhywfar_includes = @gwenhywfar_includes@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_plugins = @gwenhywfar_plugins@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ typemaker2_exe = @typemaker2_exe@ visibility_cflags = @visibility_cflags@ with_aqebics = @with_aqebics@ with_aqhbci = @with_aqhbci@ SUBDIRS = profiles AM_CPPFLAGS = -I$(top_srcdir)/src/libs \ -I$(top_builddir)/src/libs \ $(gwenhywfar_includes) AM_CFLAGS = -DBUILDING_AQBANKING @visibility_cflags@ EXTRA_DIST = README imexporterplugindir = $(aqbanking_plugindir)/imexporters noinst_LTLIBRARIES = libabimexporters_openhbci1.la imexporterplugin_DATA = openhbci1.xml noinst_HEADERS = openhbci1_p.h openhbci1.h libabimexporters_openhbci1_la_SOURCES = openhbci1.c all: all-recursive .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libs/plugins/imexporters/openhbci1/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libs/plugins/imexporters/openhbci1/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): openhbci1.xml: $(top_builddir)/config.status $(srcdir)/openhbci1.xml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libabimexporters_openhbci1.la: $(libabimexporters_openhbci1_la_OBJECTS) $(libabimexporters_openhbci1_la_DEPENDENCIES) $(EXTRA_libabimexporters_openhbci1_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libabimexporters_openhbci1_la_OBJECTS) $(libabimexporters_openhbci1_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/openhbci1.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-imexporterpluginDATA: $(imexporterplugin_DATA) @$(NORMAL_INSTALL) @list='$(imexporterplugin_DATA)'; test -n "$(imexporterplugindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(imexporterplugindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(imexporterplugindir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(imexporterplugindir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(imexporterplugindir)" || exit $$?; \ done uninstall-imexporterpluginDATA: @$(NORMAL_UNINSTALL) @list='$(imexporterplugin_DATA)'; test -n "$(imexporterplugindir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(imexporterplugindir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(imexporterplugindir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-recursive -rm -f ./$(DEPDIR)/openhbci1.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-imexporterpluginDATA install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f ./$(DEPDIR)/openhbci1.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-imexporterpluginDATA .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ am--depfiles check check-am clean clean-generic clean-libtool \ clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-imexporterpluginDATA install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am \ uninstall-imexporterpluginDATA .PRECIOUS: Makefile typefiles: typedefs: sources: for f in $(libabimexporters_openhbci1_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for f in $(imexporterplugin_DATA); do \ echo $(subdir)/$$f >>$(top_srcdir)/pdsources; \ done cppcheck: for f in $(libabimexporters_openhbci1_la_SOURCES); do \ cppcheck --force $$f ; \ done # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: aqbanking-6.6.1/src/libs/plugins/imexporters/openhbci1/profiles/0000755000175000017500000000000015037736160021745 500000000000000aqbanking-6.6.1/src/libs/plugins/imexporters/openhbci1/profiles/Makefile.am0000664000175000017500000000017614043610745023723 00000000000000 profilesdir = $(aqbanking_pkgdatadir)/imexporters/openhbci1/profiles profiles_DATA=default.conf EXTRA_DIST=$(profiles_DATA) aqbanking-6.6.1/src/libs/plugins/imexporters/openhbci1/profiles/Makefile.in0000644000175000017500000004577315037736026023753 00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/libs/plugins/imexporters/openhbci1/profiles ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/distri.m4 $(top_srcdir)/m4/gwenhywfar.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/os.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(profilesdir)" DATA = $(profiles_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADD_ACLOCAL_FLAGS = @ADD_ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AQBANKING_CLI_VERSION_STRING = @AQBANKING_CLI_VERSION_STRING@ AQBANKING_FINTS_VERSION_STRING = @AQBANKING_FINTS_VERSION_STRING@ AQBANKING_SO_AGE = @AQBANKING_SO_AGE@ AQBANKING_SO_CURRENT = @AQBANKING_SO_CURRENT@ AQBANKING_SO_EFFECTIVE = @AQBANKING_SO_EFFECTIVE@ AQBANKING_SO_REVISION = @AQBANKING_SO_REVISION@ AQBANKING_VERSION_BUILD = @AQBANKING_VERSION_BUILD@ AQBANKING_VERSION_FULL_STRING = @AQBANKING_VERSION_FULL_STRING@ AQBANKING_VERSION_MAJOR = @AQBANKING_VERSION_MAJOR@ AQBANKING_VERSION_MINOR = @AQBANKING_VERSION_MINOR@ AQBANKING_VERSION_PATCHLEVEL = @AQBANKING_VERSION_PATCHLEVEL@ AQBANKING_VERSION_RELEASE_STRING = @AQBANKING_VERSION_RELEASE_STRING@ AQBANKING_VERSION_STRING = @AQBANKING_VERSION_STRING@ AQBANKING_VERSION_TAG = @AQBANKING_VERSION_TAG@ AQEBICS_CFLAGS = @AQEBICS_CFLAGS@ AQEBICS_LIBS = @AQEBICS_LIBS@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATETIME = @DATETIME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_EXCLUDE_PATTERNS = @DOXYGEN_EXCLUDE_PATTERNS@ DOXYGEN_FILE_PATTERNS = @DOXYGEN_FILE_PATTERNS@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENGUI_GTK2_CFLAGS = @GWENGUI_GTK2_CFLAGS@ GWENGUI_GTK2_LIBS = @GWENGUI_GTK2_LIBS@ GWENHYWFAR_MINIMUM_VERSION = @GWENHYWFAR_MINIMUM_VERSION@ HAVE_GWENGUI_GTK2 = @HAVE_GWENGUI_GTK2@ HAVE_I18N = @HAVE_I18N@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIBXSLT_CFLAGS = @LIBXSLT_CFLAGS@ LIBXSLT_LIBS = @LIBXSLT_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_SUPPORTS_QT = @MSGFMT_SUPPORTS_QT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ TUTORIALS = @TUTORIALS@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XMLMERGE = @XMLMERGE@ XMLSEC_CFLAGS = @XMLSEC_CFLAGS@ XMLSEC_LIBS = @XMLSEC_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ aqbanking_backends = @aqbanking_backends@ aqbanking_cfg_searchdir = @aqbanking_cfg_searchdir@ aqbanking_data_searchdir = @aqbanking_data_searchdir@ aqbanking_headerdir = @aqbanking_headerdir@ aqbanking_headerdir_am = @aqbanking_headerdir_am@ aqbanking_includes = @aqbanking_includes@ aqbanking_internal_libs = @aqbanking_internal_libs@ aqbanking_ldflags = @aqbanking_ldflags@ aqbanking_libs = @aqbanking_libs@ aqbanking_locale_searchdir = @aqbanking_locale_searchdir@ aqbanking_modules = @aqbanking_modules@ aqbanking_pkgdatadir = @aqbanking_pkgdatadir@ aqbanking_plugin_searchdir = @aqbanking_plugin_searchdir@ aqbanking_plugindir = @aqbanking_plugindir@ aqbanking_plugins_backends_dirs = @aqbanking_plugins_backends_dirs@ aqbanking_plugins_backends_libs = @aqbanking_plugins_backends_libs@ aqbanking_plugins_bankinfo_dirs = @aqbanking_plugins_bankinfo_dirs@ aqbanking_plugins_bankinfo_libs = @aqbanking_plugins_bankinfo_libs@ aqbanking_plugins_imexporters_dirs = @aqbanking_plugins_imexporters_dirs@ aqbanking_plugins_imexporters_libs = @aqbanking_plugins_imexporters_libs@ aqbanking_plugins_parsers_dirs = @aqbanking_plugins_parsers_dirs@ aqbanking_symlinkdir = @aqbanking_symlinkdir@ aqbanking_sys_is_windows = @aqbanking_sys_is_windows@ aqbankingpp_modules = @aqbankingpp_modules@ aqebics_datadir = @aqebics_datadir@ aqebics_includes = @aqebics_includes@ aqebics_internal_libs = @aqebics_internal_libs@ aqebics_ldflags = @aqebics_ldflags@ aqebics_libs = @aqebics_libs@ aqfints_datadir = @aqfints_datadir@ aqhbci_datadir = @aqhbci_datadir@ aqhbci_includes = @aqhbci_includes@ aqhbci_internal_libs = @aqhbci_internal_libs@ aqhbci_ldflags = @aqhbci_ldflags@ aqhbci_libs = @aqhbci_libs@ aqofxconnect_includes = @aqofxconnect_includes@ aqofxconnect_internal_libs = @aqofxconnect_internal_libs@ aqofxconnect_libs = @aqofxconnect_libs@ aqpaypal_includes = @aqpaypal_includes@ aqpaypal_internal_libs = @aqpaypal_internal_libs@ aqpaypal_libs = @aqpaypal_libs@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gmp_libs = @gmp_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_dir = @gwenhywfar_dir@ gwenhywfar_has_crypt = @gwenhywfar_has_crypt@ gwenhywfar_headers = @gwenhywfar_headers@ gwenhywfar_includes = @gwenhywfar_includes@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_plugins = @gwenhywfar_plugins@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ typemaker2_exe = @typemaker2_exe@ visibility_cflags = @visibility_cflags@ with_aqebics = @with_aqebics@ with_aqhbci = @with_aqhbci@ profilesdir = $(aqbanking_pkgdatadir)/imexporters/openhbci1/profiles profiles_DATA = default.conf EXTRA_DIST = $(profiles_DATA) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libs/plugins/imexporters/openhbci1/profiles/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libs/plugins/imexporters/openhbci1/profiles/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-profilesDATA: $(profiles_DATA) @$(NORMAL_INSTALL) @list='$(profiles_DATA)'; test -n "$(profilesdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(profilesdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(profilesdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(profilesdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(profilesdir)" || exit $$?; \ done uninstall-profilesDATA: @$(NORMAL_UNINSTALL) @list='$(profiles_DATA)'; test -n "$(profilesdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(profilesdir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(profilesdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-profilesDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-profilesDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-profilesDATA install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags-am uninstall uninstall-am uninstall-profilesDATA .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: aqbanking-6.6.1/src/libs/plugins/imexporters/openhbci1/profiles/default.conf0000664000175000017500000000042114043610745024153 00000000000000 char name="default" char shortDescr="default profile" char longDescr="This profile supports the old OpenHBCI format" int import="1" int export="1" char groupNames="transaction", "transfer", "debitnote", "line" char dateFormat="YYYYMMDD" int utc="0" params { } # params aqbanking-6.6.1/src/libs/plugins/imexporters/openhbci1/Makefile.am0000664000175000017500000000141314043610745022073 00000000000000SUBDIRS=profiles AM_CPPFLAGS = -I$(top_srcdir)/src/libs \ -I$(top_builddir)/src/libs \ $(gwenhywfar_includes) AM_CFLAGS=-DBUILDING_AQBANKING @visibility_cflags@ EXTRA_DIST=README imexporterplugindir = $(aqbanking_plugindir)/imexporters noinst_LTLIBRARIES=libabimexporters_openhbci1.la imexporterplugin_DATA=openhbci1.xml noinst_HEADERS=openhbci1_p.h openhbci1.h libabimexporters_openhbci1_la_SOURCES=openhbci1.c typefiles: typedefs: sources: for f in $(libabimexporters_openhbci1_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for f in $(imexporterplugin_DATA); do \ echo $(subdir)/$$f >>$(top_srcdir)/pdsources; \ done cppcheck: for f in $(libabimexporters_openhbci1_la_SOURCES); do \ cppcheck --force $$f ; \ done aqbanking-6.6.1/src/libs/plugins/imexporters/Makefile.am0000664000175000017500000000112214043610745020220 00000000000000SUBDIRS=$(aqbanking_plugins_imexporters_dirs) DIST_SUBDIRS=qif ofx swift csv openhbci1 eri2 yellownet xmldb sepa ctxfile q43 camt xml noinst_LTLIBRARIES=libabimexporters.la libabimexporters_la_SOURCES=dummy.c libabimexporters_la_LIBADD=@aqbanking_plugins_imexporters_libs@ sources: for d in $(SUBDIRS); do \ $(MAKE) -C $$d sources; \ done built_sources: typefiles: for d in $(SUBDIRS); do \ $(MAKE) -C $$d typefiles; \ done typedefs: for d in $(SUBDIRS); do \ $(MAKE) -C $$d typedefs; \ done cppcheck: for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done aqbanking-6.6.1/src/libs/plugins/imexporters/eri2/0000755000175000017500000000000015037736160017113 500000000000000aqbanking-6.6.1/src/libs/plugins/imexporters/eri2/eri2_p.h0000664000175000017500000000532314043610745020365 00000000000000/*************************************************************************** begin : Thu 21-07-2005 copyright : (C) 2005 by Peter de Vrijer email : pdevrijer@home.nl *************************************************************************** * Please see the file COPYING in this directory for license details * ***************************************************************************/ #ifndef AQBANKING_IMEX_ERI2_P_H #define AQBANKING_IMEX_ERI2_P_H #define AB_ERI2_XMLFILE "eriformat.xml" /* for debugging */ #define ERI2DEBUG #define AH_IMEXPORTER_ERI2_MAXLEVEL 16 #include "eri2.h" #include #include #include typedef struct AB_IMEXPORTER_ERI2 AB_IMEXPORTER_ERI2; struct AB_IMEXPORTER_ERI2 { GWEN_MSGENGINE *msgEngine; }; static void GWENHYWFAR_CB AB_ImExporterERI2_FreeData(void *bp, void *p); static int AB_ImExporterERI2_Import(AB_IMEXPORTER *ie, AB_IMEXPORTER_CONTEXT *ctx, GWEN_SYNCIO *sio, GWEN_DB_NODE *params); static int AB_ImExporterERI2__ImportFromGroup(AB_IMEXPORTER_CONTEXT *ctx, GWEN_DB_NODE *db, GWEN_DB_NODE *dbParams); static int AB_ImExporterERI2__HandleRec1(GWEN_DB_NODE *dbT, GWEN_DB_NODE *dbParams, AB_TRANSACTION *t); static int AB_ImExporterERI2__HandleRec2(GWEN_DB_NODE *dbT, GWEN_DB_NODE *dbParams, AB_TRANSACTION *t); static int AB_ImExporterERI2__HandleRec3(GWEN_DB_NODE *dbT, GWEN_DB_NODE *dbParams, AB_TRANSACTION *t); static int AB_ImExporterERI2__HandleRec4(GWEN_DB_NODE *dbT, GWEN_DB_NODE *dbParams, AB_TRANSACTION *t); static void AB_ImExporterERI2__AddPurpose(AB_TRANSACTION *t, const char *s); static void AB_ImExporterERI2__AddTransaction(AB_IMEXPORTER_CONTEXT *ctx, AB_TRANSACTION *t, GWEN_DB_NODE *params); static int AB_ImExporterERI2_CheckFile(AB_IMEXPORTER *ie, const char *fname); static int AB_ImExporterERI2_Export(AB_IMEXPORTER *ie, AB_IMEXPORTER_CONTEXT *ctx, GWEN_SYNCIO *sio, GWEN_DB_NODE *params); #endif /* AQBANKING_IMEX_ERI2_P_H */ aqbanking-6.6.1/src/libs/plugins/imexporters/eri2/Makefile.am0000664000175000017500000000151214043610745021064 00000000000000SUBDIRS=profiles AM_CPPFLAGS = -I$(top_srcdir)/src/libs \ -I$(top_builddir)/src/libs \ $(gwenhywfar_includes) AM_CFLAGS=-DBUILDING_AQBANKING @visibility_cflags@ EXTRA_DIST=eriformat.xml noinst_HEADERS=eri2_p.h eri2.h imexporterplugindir = $(aqbanking_plugindir)/imexporters noinst_LTLIBRARIES=libabimexporters_eri2.la imexporterplugin_DATA=eri2.xml imexporterdatadir=$(aqbanking_pkgdatadir)/imexporters/eri2 dist_imexporterdata_DATA=eriformat.xml libabimexporters_eri2_la_SOURCES=eri2.c typefiles: typedefs: sources: for f in $(libabimexporters_eri2_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for f in $(imexporterplugin_DATA); do \ echo $(subdir)/$$f >>$(top_srcdir)/pdsources; \ done cppcheck: for f in $(libabimexporters_eri2_la_SOURCES); do \ cppcheck --force $$f ; \ done aqbanking-6.6.1/src/libs/plugins/imexporters/eri2/eri2.xml.in0000664000175000017500000000041514043610745021021 00000000000000 @AQBANKING_VERSION_STRING@ Martin Preuss (martin@aquamaniac.de) ERI This plugin imports ERI data. aqbanking-6.6.1/src/libs/plugins/imexporters/eri2/eriformat.xml0000664000175000017500000000724214043610745021550 00000000000000 %code 99999 99999 0 0 0000 99999 99 Lines 1-2 of description Number of RecordType3 records to follow %code 99999 99999 0 Lines 3-5 or 6 of description %code 99999 99999 0 aqbanking-6.6.1/src/libs/plugins/imexporters/eri2/eri2.c0000664000175000017500000004115214043610745020041 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "eri2_p.h" #include #include #include #include #include #include #include #include #include #include #include #include "aqbanking/i18n_l.h" #include #ifdef OS_WIN32 # define DIRSEP "\\" #else # define DIRSEP "/" #endif #define AB_IMEXPORTER_ERI2_CHECKBUF_LENGTH 128 GWEN_INHERIT(AB_IMEXPORTER, AB_IMEXPORTER_ERI2) AB_IMEXPORTER *AB_ImExporterERI2_new(AB_BANKING *ab) { AB_IMEXPORTER *ie; AB_IMEXPORTER_ERI2 *ieh; GWEN_STRINGLIST *paths; ie=AB_ImExporter_new(ab, "eri2"); GWEN_NEW_OBJECT(AB_IMEXPORTER_ERI2, ieh); GWEN_INHERIT_SETDATA(AB_IMEXPORTER, AB_IMEXPORTER_ERI2, ie, ieh, AB_ImExporterERI2_FreeData); paths=AB_Banking_GetGlobalDataDirs(); if (paths) { GWEN_BUFFER *fbuf; int rv; fbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_Directory_FindFileInPaths(paths, "aqbanking" DIRSEP "imexporters" DIRSEP "eri2" DIRSEP AB_ERI2_XMLFILE, fbuf); GWEN_StringList_free(paths); if (rv) { DBG_ERROR(AQBANKING_LOGDOMAIN, "XML data file not found (%d)", rv); GWEN_Buffer_free(fbuf); return NULL; } else { GWEN_XMLNODE *xmlNode; xmlNode=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "root"); rv=GWEN_XML_ReadFile(xmlNode, GWEN_Buffer_GetStart(fbuf), GWEN_XML_FLAGS_DEFAULT | GWEN_XML_FLAGS_HANDLE_HEADERS); if (rv) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Could not load XML file [%s]: %d.\n", GWEN_Buffer_GetStart(fbuf), rv); GWEN_XMLNode_free(xmlNode); GWEN_Buffer_free(fbuf); return NULL; } GWEN_Buffer_free(fbuf); ieh->msgEngine = AB_MsgEngine_new(); GWEN_MsgEngine_SetDefinitions(ieh->msgEngine, xmlNode, 1); AB_ImExporter_SetImportFn(ie, AB_ImExporterERI2_Import); AB_ImExporter_SetExportFn(ie, AB_ImExporterERI2_Export); AB_ImExporter_SetCheckFileFn(ie, AB_ImExporterERI2_CheckFile); return ie; } } else { DBG_ERROR(AQBANKING_LOGDOMAIN, "No data files found."); AB_ImExporter_free(ie); return NULL; } } void GWENHYWFAR_CB AB_ImExporterERI2_FreeData(void *bp, void *p) { AB_IMEXPORTER_ERI2 *ieh; ieh=(AB_IMEXPORTER_ERI2 *)p; GWEN_FREE_OBJECT(ieh); } int AB_ImExporterERI2_Import(AB_IMEXPORTER *ie, AB_IMEXPORTER_CONTEXT *ctx, GWEN_SYNCIO *sio, GWEN_DB_NODE *params) { AB_IMEXPORTER_ERI2 *ieh; GWEN_DB_NODE *dbData; int rv; GWEN_BUFFER *mbuf; GWEN_FAST_BUFFER *fb; assert(ie); ieh = GWEN_INHERIT_GETDATA(AB_IMEXPORTER, AB_IMEXPORTER_ERI2, ie); assert(ieh); mbuf = GWEN_Buffer_new(0, 1024, 0, 1); dbData = GWEN_DB_Group_new("transactions"); fb=GWEN_FastBuffer_new(512, sio); /* parse into db */ for (;;) { int rv; int c; GWEN_Buffer_Reset(mbuf); GWEN_FASTBUFFER_PEEKBYTE(fb, c); if (c==GWEN_ERROR_EOF) break; else if (c==26) { GWEN_FASTBUFFER_READBYTE(fb, c); break; } else if (c<0) { DBG_ERROR(0, "Error reading message"); GWEN_FastBuffer_free(fb); GWEN_Buffer_free(mbuf); GWEN_DB_Group_free(dbData); return c; } rv=GWEN_FastBuffer_ReadLineToBuffer(fb, mbuf); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); GWEN_FastBuffer_free(fb); GWEN_Buffer_free(mbuf); GWEN_DB_Group_free(dbData); return rv; } GWEN_Buffer_Rewind(mbuf); rv = GWEN_MsgEngine_ReadMessage(ieh->msgEngine, "SEG", mbuf, dbData, 0); if (rv) { GWEN_FastBuffer_free(fb); GWEN_Buffer_free(mbuf); GWEN_DB_Group_free(dbData); return GWEN_ERROR_GENERIC; } } GWEN_FastBuffer_free(fb); GWEN_Buffer_free(mbuf); /* import from db */ GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Notice, I18N("Data imported, transforming to UTF-8")); rv=AB_ImExporter_DbFromIso8859_1ToUtf8(dbData); if (rv) { GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, "Error converting data"); GWEN_DB_Group_free(dbData); return rv; } GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Notice, "Transforming data to transactions"); rv = AB_ImExporterERI2__ImportFromGroup(ctx, dbData, params); if (rv) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); GWEN_DB_Group_free(dbData); return rv; } GWEN_DB_Group_free(dbData); return 0; } const char *AB_ImExporterERI2__StripPZero(const char *p) { while ((*p == '0') || (*p == 'P')) p++; return p; } int AB_ImExporterERI2__HandleRec1(GWEN_DB_NODE *dbT, GWEN_DB_NODE *dbParams, AB_TRANSACTION *t) { const char *p; const char *dateFormat; dateFormat = GWEN_DB_GetCharValue(dbParams, "dateFormat", 0, "YYMMDD"); /* strip leading zeroes from localaccountnumber can be removed when lfiller="48" does what I expect from i */ p = GWEN_DB_GetCharValue(dbT, "localAccountNumber", 0, 0); p = AB_ImExporterERI2__StripPZero(p); AB_Transaction_SetLocalAccountNumber(t, p); /* strip leading P and zeroes from remoteaccountnumber this CANNOT be done with lfiller="48" becaus of the P added to Postgiro accounts */ p = GWEN_DB_GetCharValue(dbT, "remoteAccountNumber", 0, 0); p = AB_ImExporterERI2__StripPZero(p); #ifdef ERI2DEBUG printf("Remote Account Number after StripPZero is %s\n", p); #endif AB_Transaction_SetRemoteAccountNumber(t, p); /* translate value */ p = GWEN_DB_GetCharValue(dbT, "Amount", 0, 0); if (p) { AB_VALUE *v; AB_VALUE *v2; /* divide by 100 */ v=AB_Value_fromString(p); v2=AB_Value_fromDouble(100.0); AB_Value_DivValue(v, v2); AB_Value_free(v2); AB_Value_SetCurrency(v, GWEN_DB_GetCharValue(dbT, "currency", 0, "EUR")); AB_Transaction_SetValue(t, v); AB_Value_free(v); } /* translate date */ p = GWEN_DB_GetCharValue(dbT, "date", 0, 0); if (p) { GWEN_DATE *da; da = GWEN_Date_fromStringWithTemplate(p, dateFormat); if (da) AB_Transaction_SetDate(t, da); GWEN_Date_free(da); } /* translate valutaDate */ p = GWEN_DB_GetCharValue(dbT, "valutaDate", 0, 0); if (p) { GWEN_DATE *da; da = GWEN_Date_fromStringWithTemplate(p, dateFormat); if (da) AB_Transaction_SetValutaDate(t, da); GWEN_Date_free(da); } /* possibly translate value */ p = GWEN_DB_GetCharValue(dbT, "Sign", 0, 0); if (p) { int determined=0; int j; /* get positive/negative mark */ /* try positive marks first */ for (j=0; ; j++) { const char *patt; patt = GWEN_DB_GetCharValue(dbParams, "positiveValues", j, 0); if (!patt) { if (j == 0) patt = "C"; else break; } if (-1 != GWEN_Text_ComparePattern(p, patt, 0)) { /* value already is positive, keep it that way */ determined = 1; break; } } /* for */ if (!determined) { for (j=0; ; j++) { const char *patt; patt = GWEN_DB_GetCharValue(dbParams, "negativeValues", j, 0); if (!patt) { if (j == 0) patt = "D"; else break; } if (-1 != GWEN_Text_ComparePattern(p, patt, 0)) { const AB_VALUE *pv; /* value must be negated */ pv = AB_Transaction_GetValue(t); if (pv) { AB_VALUE *v; v = AB_Value_dup(pv); AB_Value_Negate(v); AB_Transaction_SetValue(t, v); AB_Value_free(v); } determined = 1; break; } } /* for */ } } /* if sign mark */ return 0; } void AB_ImExporterERI2__AddPurpose(AB_TRANSACTION *t, const char *s) { if (strlen(s) > 0) AB_Transaction_AddPurposeLine(t, s); } int AB_ImExporterERI2__HandleRec2(GWEN_DB_NODE *dbT, GWEN_DB_NODE *dbParams, AB_TRANSACTION *t) { const char *p; p = GWEN_DB_GetCharValue(dbT, "purpose1", 0, 0); if (p) AB_ImExporterERI2__AddPurpose(t, p); p = GWEN_DB_GetCharValue(dbT, "purpose2", 0, 0); if (p) AB_ImExporterERI2__AddPurpose(t, p); return 0; } int AB_ImExporterERI2__HandleRec3(GWEN_DB_NODE *dbT, GWEN_DB_NODE *dbParams, AB_TRANSACTION *t) { const char *p; p = GWEN_DB_GetCharValue(dbT, "purpose3", 0, 0); if (p) AB_ImExporterERI2__AddPurpose(t, p); p = GWEN_DB_GetCharValue(dbT, "purpose4", 0, 0); if (p) AB_ImExporterERI2__AddPurpose(t, p); p = GWEN_DB_GetCharValue(dbT, "purpose5", 0, 0); if (p) AB_ImExporterERI2__AddPurpose(t, p); return 0; } int AB_ImExporterERI2__HandleRec4(GWEN_DB_NODE *dbT, GWEN_DB_NODE *dbParams, AB_TRANSACTION *t) { const char *p1, *p2, *p3; GWEN_BUFFER *pbuf; char strbuf[97]; unsigned int strlen = 0, *ps = &strlen; pbuf = GWEN_Buffer_new(0, 96, 0, 1); p1 = GWEN_DB_GetCharValue(dbT, "purpose3", 0, 0); p2 = GWEN_DB_GetCharValue(dbT, "purpose4", 0, 0); p3 = GWEN_DB_GetCharValue(dbT, "purpose5", 0, 0); if (p1) GWEN_Buffer_AppendString(pbuf, p1); if (GWEN_Buffer_GetUsedBytes(pbuf) < 32) GWEN_Buffer_AppendString(pbuf, " "); if (p2) GWEN_Buffer_AppendString(pbuf, p2); if (GWEN_Buffer_GetUsedBytes(pbuf) < 64) GWEN_Buffer_AppendString(pbuf, " "); if (p3) GWEN_Buffer_AppendString(pbuf, p3); strlen = GWEN_Buffer_GetUsedBytes(pbuf); if (strlen) { GWEN_Buffer_Rewind(pbuf); GWEN_Buffer_ReadBytes(pbuf, strbuf, ps); strbuf[strlen] = 0; AB_ImExporterERI2__AddPurpose(t, strbuf); } GWEN_Buffer_free(pbuf); return 0; } void AB_ImExporterERI2__AddTransaction(AB_IMEXPORTER_CONTEXT *ctx, AB_TRANSACTION *t, GWEN_DB_NODE *params) { AB_IMEXPORTER_ACCOUNTINFO *iea = 0; const char *bankName; const char *la; bankName = GWEN_DB_GetCharValue(params, "bankName", 0, "Rabobank"); /* Search if account number is already in context If so add transaction there, else make new account number in context. */ iea = AB_ImExporterContext_GetFirstAccountInfo(ctx); la = AB_Transaction_GetLocalAccountNumber(t); assert(la); while (iea) { if (strcmp(AB_ImExporterAccountInfo_GetAccountNumber(iea), AB_Transaction_GetLocalAccountNumber(t))==0) break; iea = AB_ImExporterAccountInfo_List_Next(iea); } if (!iea) { /* Not found, add it */ iea = AB_ImExporterAccountInfo_new(); AB_ImExporterContext_AddAccountInfo(ctx, iea); AB_ImExporterAccountInfo_SetAccountType(iea, AB_AccountType_Bank); AB_ImExporterAccountInfo_SetBankName(iea, bankName); AB_ImExporterAccountInfo_SetAccountNumber(iea, la); } /* set transaction type if none set */ if (AB_Transaction_GetType(t)<=AB_Transaction_TypeNone) AB_Transaction_SetType(t, AB_Transaction_TypeStatement); /* Add it to the AccountInfo List */ AB_ImExporterAccountInfo_AddTransaction(iea, t); } int AB_ImExporterERI2__ImportFromGroup(AB_IMEXPORTER_CONTEXT *ctx, GWEN_DB_NODE *db, GWEN_DB_NODE *dbParams) { GWEN_DB_NODE *dbT; dbT = GWEN_DB_FindFirstGroup(db, "RecordType1"); while (dbT) { if (GWEN_DB_GetCharValue(dbT, "amount", 0, 0)) { AB_TRANSACTION *t; GWEN_DB_NODE *dbN; int rv; DBG_DEBUG(AQBANKING_LOGDOMAIN, "Found a possible transaction"); t = AB_Transaction_fromDb(dbT); if (!t) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Error in config file"); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, "Error in config file"); return GWEN_ERROR_GENERIC; } rv = AB_ImExporterERI2__HandleRec1(dbT, dbParams, t); if (rv) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); AB_Transaction_free(t); return rv; } /* check whether the next group is of record type 2 */ dbN = GWEN_DB_GetNextGroup(dbT); if (dbN) { if (strcasecmp(GWEN_DB_GroupName(dbN), "RecordType2") == 0) { int num3; int i; rv = AB_ImExporterERI2__HandleRec2(dbN, dbParams, t); if (rv) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); AB_Transaction_free(t); return rv; } num3 = GWEN_DB_GetIntValue(dbN, "NumberOfExtraRecords", 0, 0); for (i = 0; i < num3; i++) { dbN = GWEN_DB_GetNextGroup(dbN); if (!dbN) break; else { if (strcasecmp(GWEN_DB_GroupName(dbN), "RecordType1") == 0) break; if (strcasecmp(GWEN_DB_GroupName(dbN), "RecordType3") == 0) { if (!i) { rv = AB_ImExporterERI2__HandleRec3(dbN, dbParams, t); } else { rv = AB_ImExporterERI2__HandleRec4(dbN, dbParams, t); } if (rv) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); AB_Transaction_free(t); return rv; } } } } /* for */ if (i != num3) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Missing records (have %d of %d)", i, num3); AB_Transaction_free(t); return rv; } } /* if type 2 follows */ } /* if any group follows */ DBG_NOTICE(AQBANKING_LOGDOMAIN, "Adding transaction"); AB_ImExporterERI2__AddTransaction(ctx, t, dbParams); } else { DBG_ERROR(AQBANKING_LOGDOMAIN, "Empty group"); GWEN_DB_Dump(dbT, 2); } dbT=GWEN_DB_FindNextGroup(dbT, "RecordType1"); } // while return 0; } int AB_ImExporterERI2_CheckFile(AB_IMEXPORTER *ie, const char *fname) { GWEN_BUFFER *lbuffer; AB_IMEXPORTER_ERI2 *ieh; GWEN_SYNCIO *sio; GWEN_SYNCIO *baseIo; int rv; assert(ie); ieh=GWEN_INHERIT_GETDATA(AB_IMEXPORTER, AB_IMEXPORTER_ERI2, ie); assert(ieh); assert(fname); sio=GWEN_SyncIo_File_new(fname, GWEN_SyncIo_File_CreationMode_OpenExisting); GWEN_SyncIo_AddFlags(sio, GWEN_SYNCIO_FILE_FLAGS_READ); baseIo=sio; sio=GWEN_SyncIo_Buffered_new(baseIo); rv=GWEN_SyncIo_Connect(sio); if (rv<0) { /* error */ DBG_ERROR(AQBANKING_LOGDOMAIN, "open(%s): %s", fname, strerror(errno)); return GWEN_ERROR_IO; } lbuffer=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_SyncIo_Buffered_ReadLineToBuffer(sio, lbuffer); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "File \"%s\" is not supported by this plugin", fname); GWEN_Buffer_free(lbuffer); GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); return GWEN_ERROR_BAD_DATA; } if (-1 != GWEN_Text_ComparePattern(GWEN_Buffer_GetStart(lbuffer), "*EUR99999999992000*", 0)) { /* match */ DBG_INFO(AQBANKING_LOGDOMAIN, "File \"%s\" is supported by this plugin", fname); GWEN_Buffer_free(lbuffer); GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); return 0; } GWEN_Buffer_free(lbuffer); GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); return GWEN_ERROR_BAD_DATA; } int AB_ImExporterERI2_Export(AB_IMEXPORTER *ie, AB_IMEXPORTER_CONTEXT *ctx, GWEN_SYNCIO *sio, GWEN_DB_NODE *params) { AB_IMEXPORTER_ERI2 *ieh; assert(ie); ieh = GWEN_INHERIT_GETDATA(AB_IMEXPORTER, AB_IMEXPORTER_ERI2, ie); assert(ieh); return GWEN_ERROR_GENERIC; } aqbanking-6.6.1/src/libs/plugins/imexporters/eri2/Makefile.in0000644000175000017500000007605115037736026021112 00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/libs/plugins/imexporters/eri2 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/distri.m4 $(top_srcdir)/m4/gwenhywfar.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/os.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(dist_imexporterdata_DATA) \ $(noinst_HEADERS) $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = eri2.xml CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libabimexporters_eri2_la_LIBADD = am_libabimexporters_eri2_la_OBJECTS = eri2.lo libabimexporters_eri2_la_OBJECTS = \ $(am_libabimexporters_eri2_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/eri2.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libabimexporters_eri2_la_SOURCES) DIST_SOURCES = $(libabimexporters_eri2_la_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(imexporterdatadir)" \ "$(DESTDIR)$(imexporterplugindir)" DATA = $(dist_imexporterdata_DATA) $(imexporterplugin_DATA) HEADERS = $(noinst_HEADERS) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir distdir-am am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/eri2.xml.in \ $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ADD_ACLOCAL_FLAGS = @ADD_ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AQBANKING_CLI_VERSION_STRING = @AQBANKING_CLI_VERSION_STRING@ AQBANKING_FINTS_VERSION_STRING = @AQBANKING_FINTS_VERSION_STRING@ AQBANKING_SO_AGE = @AQBANKING_SO_AGE@ AQBANKING_SO_CURRENT = @AQBANKING_SO_CURRENT@ AQBANKING_SO_EFFECTIVE = @AQBANKING_SO_EFFECTIVE@ AQBANKING_SO_REVISION = @AQBANKING_SO_REVISION@ AQBANKING_VERSION_BUILD = @AQBANKING_VERSION_BUILD@ AQBANKING_VERSION_FULL_STRING = @AQBANKING_VERSION_FULL_STRING@ AQBANKING_VERSION_MAJOR = @AQBANKING_VERSION_MAJOR@ AQBANKING_VERSION_MINOR = @AQBANKING_VERSION_MINOR@ AQBANKING_VERSION_PATCHLEVEL = @AQBANKING_VERSION_PATCHLEVEL@ AQBANKING_VERSION_RELEASE_STRING = @AQBANKING_VERSION_RELEASE_STRING@ AQBANKING_VERSION_STRING = @AQBANKING_VERSION_STRING@ AQBANKING_VERSION_TAG = @AQBANKING_VERSION_TAG@ AQEBICS_CFLAGS = @AQEBICS_CFLAGS@ AQEBICS_LIBS = @AQEBICS_LIBS@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATETIME = @DATETIME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_EXCLUDE_PATTERNS = @DOXYGEN_EXCLUDE_PATTERNS@ DOXYGEN_FILE_PATTERNS = @DOXYGEN_FILE_PATTERNS@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENGUI_GTK2_CFLAGS = @GWENGUI_GTK2_CFLAGS@ GWENGUI_GTK2_LIBS = @GWENGUI_GTK2_LIBS@ GWENHYWFAR_MINIMUM_VERSION = @GWENHYWFAR_MINIMUM_VERSION@ HAVE_GWENGUI_GTK2 = @HAVE_GWENGUI_GTK2@ HAVE_I18N = @HAVE_I18N@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIBXSLT_CFLAGS = @LIBXSLT_CFLAGS@ LIBXSLT_LIBS = @LIBXSLT_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_SUPPORTS_QT = @MSGFMT_SUPPORTS_QT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ TUTORIALS = @TUTORIALS@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XMLMERGE = @XMLMERGE@ XMLSEC_CFLAGS = @XMLSEC_CFLAGS@ XMLSEC_LIBS = @XMLSEC_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ aqbanking_backends = @aqbanking_backends@ aqbanking_cfg_searchdir = @aqbanking_cfg_searchdir@ aqbanking_data_searchdir = @aqbanking_data_searchdir@ aqbanking_headerdir = @aqbanking_headerdir@ aqbanking_headerdir_am = @aqbanking_headerdir_am@ aqbanking_includes = @aqbanking_includes@ aqbanking_internal_libs = @aqbanking_internal_libs@ aqbanking_ldflags = @aqbanking_ldflags@ aqbanking_libs = @aqbanking_libs@ aqbanking_locale_searchdir = @aqbanking_locale_searchdir@ aqbanking_modules = @aqbanking_modules@ aqbanking_pkgdatadir = @aqbanking_pkgdatadir@ aqbanking_plugin_searchdir = @aqbanking_plugin_searchdir@ aqbanking_plugindir = @aqbanking_plugindir@ aqbanking_plugins_backends_dirs = @aqbanking_plugins_backends_dirs@ aqbanking_plugins_backends_libs = @aqbanking_plugins_backends_libs@ aqbanking_plugins_bankinfo_dirs = @aqbanking_plugins_bankinfo_dirs@ aqbanking_plugins_bankinfo_libs = @aqbanking_plugins_bankinfo_libs@ aqbanking_plugins_imexporters_dirs = @aqbanking_plugins_imexporters_dirs@ aqbanking_plugins_imexporters_libs = @aqbanking_plugins_imexporters_libs@ aqbanking_plugins_parsers_dirs = @aqbanking_plugins_parsers_dirs@ aqbanking_symlinkdir = @aqbanking_symlinkdir@ aqbanking_sys_is_windows = @aqbanking_sys_is_windows@ aqbankingpp_modules = @aqbankingpp_modules@ aqebics_datadir = @aqebics_datadir@ aqebics_includes = @aqebics_includes@ aqebics_internal_libs = @aqebics_internal_libs@ aqebics_ldflags = @aqebics_ldflags@ aqebics_libs = @aqebics_libs@ aqfints_datadir = @aqfints_datadir@ aqhbci_datadir = @aqhbci_datadir@ aqhbci_includes = @aqhbci_includes@ aqhbci_internal_libs = @aqhbci_internal_libs@ aqhbci_ldflags = @aqhbci_ldflags@ aqhbci_libs = @aqhbci_libs@ aqofxconnect_includes = @aqofxconnect_includes@ aqofxconnect_internal_libs = @aqofxconnect_internal_libs@ aqofxconnect_libs = @aqofxconnect_libs@ aqpaypal_includes = @aqpaypal_includes@ aqpaypal_internal_libs = @aqpaypal_internal_libs@ aqpaypal_libs = @aqpaypal_libs@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gmp_libs = @gmp_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_dir = @gwenhywfar_dir@ gwenhywfar_has_crypt = @gwenhywfar_has_crypt@ gwenhywfar_headers = @gwenhywfar_headers@ gwenhywfar_includes = @gwenhywfar_includes@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_plugins = @gwenhywfar_plugins@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ typemaker2_exe = @typemaker2_exe@ visibility_cflags = @visibility_cflags@ with_aqebics = @with_aqebics@ with_aqhbci = @with_aqhbci@ SUBDIRS = profiles AM_CPPFLAGS = -I$(top_srcdir)/src/libs \ -I$(top_builddir)/src/libs \ $(gwenhywfar_includes) AM_CFLAGS = -DBUILDING_AQBANKING @visibility_cflags@ EXTRA_DIST = eriformat.xml noinst_HEADERS = eri2_p.h eri2.h imexporterplugindir = $(aqbanking_plugindir)/imexporters noinst_LTLIBRARIES = libabimexporters_eri2.la imexporterplugin_DATA = eri2.xml imexporterdatadir = $(aqbanking_pkgdatadir)/imexporters/eri2 dist_imexporterdata_DATA = eriformat.xml libabimexporters_eri2_la_SOURCES = eri2.c all: all-recursive .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libs/plugins/imexporters/eri2/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libs/plugins/imexporters/eri2/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): eri2.xml: $(top_builddir)/config.status $(srcdir)/eri2.xml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libabimexporters_eri2.la: $(libabimexporters_eri2_la_OBJECTS) $(libabimexporters_eri2_la_DEPENDENCIES) $(EXTRA_libabimexporters_eri2_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libabimexporters_eri2_la_OBJECTS) $(libabimexporters_eri2_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eri2.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-dist_imexporterdataDATA: $(dist_imexporterdata_DATA) @$(NORMAL_INSTALL) @list='$(dist_imexporterdata_DATA)'; test -n "$(imexporterdatadir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(imexporterdatadir)'"; \ $(MKDIR_P) "$(DESTDIR)$(imexporterdatadir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(imexporterdatadir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(imexporterdatadir)" || exit $$?; \ done uninstall-dist_imexporterdataDATA: @$(NORMAL_UNINSTALL) @list='$(dist_imexporterdata_DATA)'; test -n "$(imexporterdatadir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(imexporterdatadir)'; $(am__uninstall_files_from_dir) install-imexporterpluginDATA: $(imexporterplugin_DATA) @$(NORMAL_INSTALL) @list='$(imexporterplugin_DATA)'; test -n "$(imexporterplugindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(imexporterplugindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(imexporterplugindir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(imexporterplugindir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(imexporterplugindir)" || exit $$?; \ done uninstall-imexporterpluginDATA: @$(NORMAL_UNINSTALL) @list='$(imexporterplugin_DATA)'; test -n "$(imexporterplugindir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(imexporterplugindir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(imexporterdatadir)" "$(DESTDIR)$(imexporterplugindir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-recursive -rm -f ./$(DEPDIR)/eri2.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dist_imexporterdataDATA \ install-imexporterpluginDATA install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f ./$(DEPDIR)/eri2.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-dist_imexporterdataDATA \ uninstall-imexporterpluginDATA .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ am--depfiles check check-am clean clean-generic clean-libtool \ clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am \ install-dist_imexporterdataDATA install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-imexporterpluginDATA install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am \ uninstall-dist_imexporterdataDATA \ uninstall-imexporterpluginDATA .PRECIOUS: Makefile typefiles: typedefs: sources: for f in $(libabimexporters_eri2_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for f in $(imexporterplugin_DATA); do \ echo $(subdir)/$$f >>$(top_srcdir)/pdsources; \ done cppcheck: for f in $(libabimexporters_eri2_la_SOURCES); do \ cppcheck --force $$f ; \ done # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: aqbanking-6.6.1/src/libs/plugins/imexporters/eri2/profiles/0000755000175000017500000000000015037736160020736 500000000000000aqbanking-6.6.1/src/libs/plugins/imexporters/eri2/profiles/Makefile.in0000644000175000017500000004574615037736026022744 00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/libs/plugins/imexporters/eri2/profiles ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/distri.m4 $(top_srcdir)/m4/gwenhywfar.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/os.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(profilesdir)" DATA = $(profiles_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADD_ACLOCAL_FLAGS = @ADD_ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AQBANKING_CLI_VERSION_STRING = @AQBANKING_CLI_VERSION_STRING@ AQBANKING_FINTS_VERSION_STRING = @AQBANKING_FINTS_VERSION_STRING@ AQBANKING_SO_AGE = @AQBANKING_SO_AGE@ AQBANKING_SO_CURRENT = @AQBANKING_SO_CURRENT@ AQBANKING_SO_EFFECTIVE = @AQBANKING_SO_EFFECTIVE@ AQBANKING_SO_REVISION = @AQBANKING_SO_REVISION@ AQBANKING_VERSION_BUILD = @AQBANKING_VERSION_BUILD@ AQBANKING_VERSION_FULL_STRING = @AQBANKING_VERSION_FULL_STRING@ AQBANKING_VERSION_MAJOR = @AQBANKING_VERSION_MAJOR@ AQBANKING_VERSION_MINOR = @AQBANKING_VERSION_MINOR@ AQBANKING_VERSION_PATCHLEVEL = @AQBANKING_VERSION_PATCHLEVEL@ AQBANKING_VERSION_RELEASE_STRING = @AQBANKING_VERSION_RELEASE_STRING@ AQBANKING_VERSION_STRING = @AQBANKING_VERSION_STRING@ AQBANKING_VERSION_TAG = @AQBANKING_VERSION_TAG@ AQEBICS_CFLAGS = @AQEBICS_CFLAGS@ AQEBICS_LIBS = @AQEBICS_LIBS@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATETIME = @DATETIME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_EXCLUDE_PATTERNS = @DOXYGEN_EXCLUDE_PATTERNS@ DOXYGEN_FILE_PATTERNS = @DOXYGEN_FILE_PATTERNS@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENGUI_GTK2_CFLAGS = @GWENGUI_GTK2_CFLAGS@ GWENGUI_GTK2_LIBS = @GWENGUI_GTK2_LIBS@ GWENHYWFAR_MINIMUM_VERSION = @GWENHYWFAR_MINIMUM_VERSION@ HAVE_GWENGUI_GTK2 = @HAVE_GWENGUI_GTK2@ HAVE_I18N = @HAVE_I18N@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIBXSLT_CFLAGS = @LIBXSLT_CFLAGS@ LIBXSLT_LIBS = @LIBXSLT_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_SUPPORTS_QT = @MSGFMT_SUPPORTS_QT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ TUTORIALS = @TUTORIALS@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XMLMERGE = @XMLMERGE@ XMLSEC_CFLAGS = @XMLSEC_CFLAGS@ XMLSEC_LIBS = @XMLSEC_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ aqbanking_backends = @aqbanking_backends@ aqbanking_cfg_searchdir = @aqbanking_cfg_searchdir@ aqbanking_data_searchdir = @aqbanking_data_searchdir@ aqbanking_headerdir = @aqbanking_headerdir@ aqbanking_headerdir_am = @aqbanking_headerdir_am@ aqbanking_includes = @aqbanking_includes@ aqbanking_internal_libs = @aqbanking_internal_libs@ aqbanking_ldflags = @aqbanking_ldflags@ aqbanking_libs = @aqbanking_libs@ aqbanking_locale_searchdir = @aqbanking_locale_searchdir@ aqbanking_modules = @aqbanking_modules@ aqbanking_pkgdatadir = @aqbanking_pkgdatadir@ aqbanking_plugin_searchdir = @aqbanking_plugin_searchdir@ aqbanking_plugindir = @aqbanking_plugindir@ aqbanking_plugins_backends_dirs = @aqbanking_plugins_backends_dirs@ aqbanking_plugins_backends_libs = @aqbanking_plugins_backends_libs@ aqbanking_plugins_bankinfo_dirs = @aqbanking_plugins_bankinfo_dirs@ aqbanking_plugins_bankinfo_libs = @aqbanking_plugins_bankinfo_libs@ aqbanking_plugins_imexporters_dirs = @aqbanking_plugins_imexporters_dirs@ aqbanking_plugins_imexporters_libs = @aqbanking_plugins_imexporters_libs@ aqbanking_plugins_parsers_dirs = @aqbanking_plugins_parsers_dirs@ aqbanking_symlinkdir = @aqbanking_symlinkdir@ aqbanking_sys_is_windows = @aqbanking_sys_is_windows@ aqbankingpp_modules = @aqbankingpp_modules@ aqebics_datadir = @aqebics_datadir@ aqebics_includes = @aqebics_includes@ aqebics_internal_libs = @aqebics_internal_libs@ aqebics_ldflags = @aqebics_ldflags@ aqebics_libs = @aqebics_libs@ aqfints_datadir = @aqfints_datadir@ aqhbci_datadir = @aqhbci_datadir@ aqhbci_includes = @aqhbci_includes@ aqhbci_internal_libs = @aqhbci_internal_libs@ aqhbci_ldflags = @aqhbci_ldflags@ aqhbci_libs = @aqhbci_libs@ aqofxconnect_includes = @aqofxconnect_includes@ aqofxconnect_internal_libs = @aqofxconnect_internal_libs@ aqofxconnect_libs = @aqofxconnect_libs@ aqpaypal_includes = @aqpaypal_includes@ aqpaypal_internal_libs = @aqpaypal_internal_libs@ aqpaypal_libs = @aqpaypal_libs@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gmp_libs = @gmp_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_dir = @gwenhywfar_dir@ gwenhywfar_has_crypt = @gwenhywfar_has_crypt@ gwenhywfar_headers = @gwenhywfar_headers@ gwenhywfar_includes = @gwenhywfar_includes@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_plugins = @gwenhywfar_plugins@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ typemaker2_exe = @typemaker2_exe@ visibility_cflags = @visibility_cflags@ with_aqebics = @with_aqebics@ with_aqhbci = @with_aqhbci@ profilesdir = $(aqbanking_pkgdatadir)/imexporters/eri/profiles profiles_DATA = default.conf EXTRA_DIST = $(profiles_DATA) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libs/plugins/imexporters/eri2/profiles/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libs/plugins/imexporters/eri2/profiles/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-profilesDATA: $(profiles_DATA) @$(NORMAL_INSTALL) @list='$(profiles_DATA)'; test -n "$(profilesdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(profilesdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(profilesdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(profilesdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(profilesdir)" || exit $$?; \ done uninstall-profilesDATA: @$(NORMAL_UNINSTALL) @list='$(profiles_DATA)'; test -n "$(profilesdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(profilesdir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(profilesdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-profilesDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-profilesDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-profilesDATA install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags-am uninstall uninstall-am uninstall-profilesDATA .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: aqbanking-6.6.1/src/libs/plugins/imexporters/eri2/profiles/Makefile.am0000664000175000017500000000017014043610745022706 00000000000000 profilesdir = $(aqbanking_pkgdatadir)/imexporters/eri/profiles profiles_DATA=default.conf EXTRA_DIST=$(profiles_DATA) aqbanking-6.6.1/src/libs/plugins/imexporters/eri2/profiles/default.conf0000664000175000017500000000043214043610745023146 00000000000000 char name="default" char shortDescr="default Rabobank ERI (mut.asc)" char longDescr="This profile supports the ERI format used by Rabobank mut.asc files" int import="1" int export="0" # default bank name bankName="Rabobank" currency="EUR" dateFormat="hhmmssYYYYMMDD" params { } aqbanking-6.6.1/src/libs/plugins/imexporters/eri2/eri2.h0000664000175000017500000000130114043610745020036 00000000000000/*************************************************************************** begin : Thu 21-07-2005 copyright : (C) 2005 by Peter de Vrijer copyright : (C) 2018 Martin Preuss email : pdevrijer@home.nl *************************************************************************** * Please see the file COPYING in this directory for license details * ***************************************************************************/ #ifndef AQBANKING_IMEX_ERI2_H #define AQBANKING_IMEX_ERI2_H #include #include AB_IMEXPORTER *AB_ImExporterERI2_new(AB_BANKING *ab); #endif /* AQBANKING_IMEX_ERI2_H */ aqbanking-6.6.1/src/libs/plugins/imexporters/Makefile.in0000644000175000017500000006576715037736026020265 00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/libs/plugins/imexporters ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/distri.m4 $(top_srcdir)/m4/gwenhywfar.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/os.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libabimexporters_la_DEPENDENCIES = am_libabimexporters_la_OBJECTS = dummy.lo libabimexporters_la_OBJECTS = $(am_libabimexporters_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/dummy.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libabimexporters_la_SOURCES) DIST_SOURCES = $(libabimexporters_la_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir distdir-am am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ADD_ACLOCAL_FLAGS = @ADD_ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AQBANKING_CLI_VERSION_STRING = @AQBANKING_CLI_VERSION_STRING@ AQBANKING_FINTS_VERSION_STRING = @AQBANKING_FINTS_VERSION_STRING@ AQBANKING_SO_AGE = @AQBANKING_SO_AGE@ AQBANKING_SO_CURRENT = @AQBANKING_SO_CURRENT@ AQBANKING_SO_EFFECTIVE = @AQBANKING_SO_EFFECTIVE@ AQBANKING_SO_REVISION = @AQBANKING_SO_REVISION@ AQBANKING_VERSION_BUILD = @AQBANKING_VERSION_BUILD@ AQBANKING_VERSION_FULL_STRING = @AQBANKING_VERSION_FULL_STRING@ AQBANKING_VERSION_MAJOR = @AQBANKING_VERSION_MAJOR@ AQBANKING_VERSION_MINOR = @AQBANKING_VERSION_MINOR@ AQBANKING_VERSION_PATCHLEVEL = @AQBANKING_VERSION_PATCHLEVEL@ AQBANKING_VERSION_RELEASE_STRING = @AQBANKING_VERSION_RELEASE_STRING@ AQBANKING_VERSION_STRING = @AQBANKING_VERSION_STRING@ AQBANKING_VERSION_TAG = @AQBANKING_VERSION_TAG@ AQEBICS_CFLAGS = @AQEBICS_CFLAGS@ AQEBICS_LIBS = @AQEBICS_LIBS@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATETIME = @DATETIME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_EXCLUDE_PATTERNS = @DOXYGEN_EXCLUDE_PATTERNS@ DOXYGEN_FILE_PATTERNS = @DOXYGEN_FILE_PATTERNS@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENGUI_GTK2_CFLAGS = @GWENGUI_GTK2_CFLAGS@ GWENGUI_GTK2_LIBS = @GWENGUI_GTK2_LIBS@ GWENHYWFAR_MINIMUM_VERSION = @GWENHYWFAR_MINIMUM_VERSION@ HAVE_GWENGUI_GTK2 = @HAVE_GWENGUI_GTK2@ HAVE_I18N = @HAVE_I18N@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIBXSLT_CFLAGS = @LIBXSLT_CFLAGS@ LIBXSLT_LIBS = @LIBXSLT_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_SUPPORTS_QT = @MSGFMT_SUPPORTS_QT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ TUTORIALS = @TUTORIALS@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XMLMERGE = @XMLMERGE@ XMLSEC_CFLAGS = @XMLSEC_CFLAGS@ XMLSEC_LIBS = @XMLSEC_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ aqbanking_backends = @aqbanking_backends@ aqbanking_cfg_searchdir = @aqbanking_cfg_searchdir@ aqbanking_data_searchdir = @aqbanking_data_searchdir@ aqbanking_headerdir = @aqbanking_headerdir@ aqbanking_headerdir_am = @aqbanking_headerdir_am@ aqbanking_includes = @aqbanking_includes@ aqbanking_internal_libs = @aqbanking_internal_libs@ aqbanking_ldflags = @aqbanking_ldflags@ aqbanking_libs = @aqbanking_libs@ aqbanking_locale_searchdir = @aqbanking_locale_searchdir@ aqbanking_modules = @aqbanking_modules@ aqbanking_pkgdatadir = @aqbanking_pkgdatadir@ aqbanking_plugin_searchdir = @aqbanking_plugin_searchdir@ aqbanking_plugindir = @aqbanking_plugindir@ aqbanking_plugins_backends_dirs = @aqbanking_plugins_backends_dirs@ aqbanking_plugins_backends_libs = @aqbanking_plugins_backends_libs@ aqbanking_plugins_bankinfo_dirs = @aqbanking_plugins_bankinfo_dirs@ aqbanking_plugins_bankinfo_libs = @aqbanking_plugins_bankinfo_libs@ aqbanking_plugins_imexporters_dirs = @aqbanking_plugins_imexporters_dirs@ aqbanking_plugins_imexporters_libs = @aqbanking_plugins_imexporters_libs@ aqbanking_plugins_parsers_dirs = @aqbanking_plugins_parsers_dirs@ aqbanking_symlinkdir = @aqbanking_symlinkdir@ aqbanking_sys_is_windows = @aqbanking_sys_is_windows@ aqbankingpp_modules = @aqbankingpp_modules@ aqebics_datadir = @aqebics_datadir@ aqebics_includes = @aqebics_includes@ aqebics_internal_libs = @aqebics_internal_libs@ aqebics_ldflags = @aqebics_ldflags@ aqebics_libs = @aqebics_libs@ aqfints_datadir = @aqfints_datadir@ aqhbci_datadir = @aqhbci_datadir@ aqhbci_includes = @aqhbci_includes@ aqhbci_internal_libs = @aqhbci_internal_libs@ aqhbci_ldflags = @aqhbci_ldflags@ aqhbci_libs = @aqhbci_libs@ aqofxconnect_includes = @aqofxconnect_includes@ aqofxconnect_internal_libs = @aqofxconnect_internal_libs@ aqofxconnect_libs = @aqofxconnect_libs@ aqpaypal_includes = @aqpaypal_includes@ aqpaypal_internal_libs = @aqpaypal_internal_libs@ aqpaypal_libs = @aqpaypal_libs@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gmp_libs = @gmp_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_dir = @gwenhywfar_dir@ gwenhywfar_has_crypt = @gwenhywfar_has_crypt@ gwenhywfar_headers = @gwenhywfar_headers@ gwenhywfar_includes = @gwenhywfar_includes@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_plugins = @gwenhywfar_plugins@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ typemaker2_exe = @typemaker2_exe@ visibility_cflags = @visibility_cflags@ with_aqebics = @with_aqebics@ with_aqhbci = @with_aqhbci@ SUBDIRS = $(aqbanking_plugins_imexporters_dirs) DIST_SUBDIRS = qif ofx swift csv openhbci1 eri2 yellownet xmldb sepa ctxfile q43 camt xml noinst_LTLIBRARIES = libabimexporters.la libabimexporters_la_SOURCES = dummy.c libabimexporters_la_LIBADD = @aqbanking_plugins_imexporters_libs@ all: all-recursive .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libs/plugins/imexporters/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libs/plugins/imexporters/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libabimexporters.la: $(libabimexporters_la_OBJECTS) $(libabimexporters_la_DEPENDENCIES) $(EXTRA_libabimexporters_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libabimexporters_la_OBJECTS) $(libabimexporters_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dummy.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(LTLIBRARIES) installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-recursive -rm -f ./$(DEPDIR)/dummy.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f ./$(DEPDIR)/dummy.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ am--depfiles check check-am clean clean-generic clean-libtool \ clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am .PRECIOUS: Makefile sources: for d in $(SUBDIRS); do \ $(MAKE) -C $$d sources; \ done built_sources: typefiles: for d in $(SUBDIRS); do \ $(MAKE) -C $$d typefiles; \ done typedefs: for d in $(SUBDIRS); do \ $(MAKE) -C $$d typedefs; \ done cppcheck: for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: aqbanking-6.6.1/src/libs/plugins/imexporters/q43/0000755000175000017500000000000015037736160016661 500000000000000aqbanking-6.6.1/src/libs/plugins/imexporters/q43/q43.xml.in0000664000175000017500000000047214043610745020340 00000000000000 @AQBANKING_VERSION_STRING@ Martin Preuss(martin@libchipcard.de) This plugin reads and writes Spanish Q43 files. This plugin imports Q43 files. aqbanking-6.6.1/src/libs/plugins/imexporters/q43/q43.c0000664000175000017500000002763414640343244017366 00000000000000/*************************************************************************** begin : Mon May 03 2010 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "q43_p.h" #include "aqbanking/i18n_l.h" #include #include #include #include #include #include #include #include #include #define YEAR_2000_CUTOFF 80 GWEN_INHERIT(AB_IMEXPORTER, AH_IMEXPORTER_Q43); AB_IMEXPORTER *AB_ImExporterQ43_new(AB_BANKING *ab) { AB_IMEXPORTER *ie; AH_IMEXPORTER_Q43 *ieh; ie=AB_ImExporter_new(ab, "q43"); GWEN_NEW_OBJECT(AH_IMEXPORTER_Q43, ieh); GWEN_INHERIT_SETDATA(AB_IMEXPORTER, AH_IMEXPORTER_Q43, ie, ieh, AH_ImExporterQ43_FreeData); AB_ImExporter_SetImportFn(ie, AH_ImExporterQ43_Import); AB_ImExporter_SetExportFn(ie, AH_ImExporterQ43_Export); AB_ImExporter_SetCheckFileFn(ie, AH_ImExporterQ43_CheckFile); return ie; } void GWENHYWFAR_CB AH_ImExporterQ43_FreeData(void *bp, void *p) { AH_IMEXPORTER_Q43 *ieh; ieh=(AH_IMEXPORTER_Q43 *)p; GWEN_FREE_OBJECT(ieh); } /* this needs to be replaced later by a more generic approach */ const char *AH_ImExporterQ43_GetCurrencyCode(int code) { switch (code) { case 978: return "EUR"; break; default: break; } return NULL; } int AH_ImExporterQ43_ReadInt(const char *p, int len) { int res=0; int i; for (i=0; iYEAR_2000_CUTOFF) y+=1900; else y+=2000; GWEN_Date_free(date); date=GWEN_Date_fromGregorian(y, m, d); if (date==NULL) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Invalid date in record %02d", code); AB_Transaction_free(t); GWEN_Date_free(date); GWEN_Buffer_free(lbuf); return GWEN_ERROR_BAD_DATA; } break; } case 11: { /* account header */ char bankCode[9]; char accountNumber[11]; int cy; if (size<80) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Record %02d too short (%d bytes)", code, GWEN_Buffer_GetUsedBytes(lbuf)); AB_Transaction_free(t); GWEN_Date_free(date); GWEN_Buffer_free(lbuf); return GWEN_ERROR_BAD_DATA; } /* get bankcode (combine bank code key and office branch code */ strncpy(bankCode, p+2, 8); bankCode[8]=0; /* get account number */ strncpy(accountNumber, p+10, 10); accountNumber[10]=0; /* get account info (or create it if necessary) */ iea=AB_ImExporterAccountInfo_List_GetByBankCodeAndAccountNumber(ieaList, bankCode, accountNumber, AB_AccountType_Unknown); if (iea==NULL) { iea=AB_ImExporterAccountInfo_new(); AB_ImExporterAccountInfo_SetBankCode(iea, bankCode); AB_ImExporterAccountInfo_SetAccountNumber(iea, accountNumber); AB_ImExporterContext_AddAccountInfo(ctx, iea); } cy=((p[47]-'0')*100)+((p[48]-'0')*10)+(p[49]-'0'); currency=AH_ImExporterQ43_GetCurrencyCode(cy); if (!currency) { DBG_WARN(AQBANKING_LOGDOMAIN, "Unknown currency code %d, ignoring", cy); } /* TODO: read initial balance */ hadSome++; break; } case 22: { GWEN_DATE *da; AB_VALUE *v; int y, m, d; char amount[32]; const char *s; if (size<80) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Record %02d too short (%d bytes)", code, GWEN_Buffer_GetUsedBytes(lbuf)); AB_Transaction_free(t); GWEN_Date_free(date); GWEN_Buffer_free(lbuf); return GWEN_ERROR_BAD_DATA; } if (iea==NULL) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Bad order of records (22 before 11)"); AB_Transaction_free(t); GWEN_Date_free(date); GWEN_Buffer_free(lbuf); return GWEN_ERROR_BAD_DATA; } if (t) AB_ImExporterAccountInfo_AddTransaction(iea, t); t=AB_Transaction_new(); /* extract booking date */ y=((p[10]-'0')*10)+(p[11]-'0'); m=((p[12]-'0')*10)+(p[13]-'0'); d=((p[14]-'0')*10)+(p[15]-'0'); if (y>YEAR_2000_CUTOFF) y+=1900; else y+=2000; da=GWEN_Date_fromGregorian(y, m, d); if (da==NULL) { DBG_WARN(AQBANKING_LOGDOMAIN, "Invalid booking date in record %02d, ignoring", code); } else { AB_Transaction_SetDate(t, da); GWEN_Date_free(da); } /* extract valuta date */ y=((p[16]-'0')*10)+(p[17]-'0'); m=((p[18]-'0')*10)+(p[19]-'0'); d=((p[20]-'0')*10)+(p[21]-'0'); if (y>YEAR_2000_CUTOFF) y+=1900; else y+=2000; da=GWEN_Date_fromGregorian(y, m, d); if (da==NULL) { DBG_WARN(AQBANKING_LOGDOMAIN, "Invalid valuta date in record %02d, ignoring", code); } else { AB_Transaction_SetValutaDate(t, da); GWEN_Date_free(da); } /* get amount */ strncpy(amount, p+28, 14); amount[14]=0; strncat(amount, "/100:", sizeof(amount)-strlen(amount)-1); if (currency) strncat(amount, currency, sizeof(amount)-strlen(amount)-1); amount[sizeof(amount)-1]=0; v=AB_Value_fromString(amount); if (v==NULL) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Invalid amount in transaction"); AB_Transaction_free(t); GWEN_Date_free(date); GWEN_Buffer_free(lbuf); return GWEN_ERROR_BAD_DATA; } else { if (p[27]=='1') /* FIXME: Do we have to negate on "1" or "2"? */ AB_Value_Negate(v); AB_Transaction_SetValue(t, v); AB_Value_free(v); } /* copy local account info */ s=AB_ImExporterAccountInfo_GetAccountNumber(iea); AB_Transaction_SetLocalAccountNumber(t, s); s=AB_ImExporterAccountInfo_GetBankCode(iea); AB_Transaction_SetLocalBankCode(t, s); break; } case 23: { /* transaction comments */ GWEN_BUFFER *tbuf; if (size<80) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Record %02d too short (%d bytes)", code, GWEN_Buffer_GetUsedBytes(lbuf)); AB_Transaction_free(t); GWEN_Date_free(date); GWEN_Buffer_free(lbuf); return GWEN_ERROR_BAD_DATA; } if (t==NULL) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Bad order of records (23 before 22)"); AB_Transaction_free(t); GWEN_Date_free(date); GWEN_Buffer_free(lbuf); return GWEN_ERROR_BAD_DATA; } tbuf=GWEN_Buffer_new(0, 256, 0, 1); /* comment 1 */ GWEN_Buffer_AppendBytes(tbuf, p+4, 38); GWEN_Text_CondenseBuffer(tbuf); if (GWEN_Buffer_GetUsedBytes(tbuf)) AB_Transaction_AddPurposeLine(t, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_Reset(tbuf); /* comment 2 */ GWEN_Buffer_AppendBytes(tbuf, p+42, 38); GWEN_Text_CondenseBuffer(tbuf); if (GWEN_Buffer_GetUsedBytes(tbuf)) AB_Transaction_AddPurposeLine(t, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); break; } case 33: { /* end of accunt record */ /* store current transaction if any */ if (t) { AB_ImExporterAccountInfo_AddTransaction(iea, t); t=NULL; } // TODO: check the control fields here, read final account balance break; } case 88: { int numrecs; numrecs=AH_ImExporterQ43_ReadInt(p+20, 6); if (numrecs!=records) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Number of records doesn't match (%d != %d)", numrecs, records); AB_Transaction_free(t); GWEN_Date_free(date); GWEN_Buffer_free(lbuf); return GWEN_ERROR_BAD_DATA; } break; } default: DBG_WARN(AQBANKING_LOGDOMAIN, "Ignoring line with code %02d", code); } GWEN_Buffer_Reset(lbuf); if (code!=0) records++; } } while (rv>=0); if (rv==GWEN_ERROR_EOF && hadSome) /* ignore EOF when we received some data */ rv=0; if (t) { DBG_WARN(AQBANKING_LOGDOMAIN, "There is still a transaction open..."); AB_Transaction_free(t); } /* done */ GWEN_Date_free(date); GWEN_Buffer_free(lbuf); return rv; } int AH_ImExporterQ43_Import(AB_IMEXPORTER *ie, AB_IMEXPORTER_CONTEXT *ctx, GWEN_SYNCIO *sio, GWEN_DB_NODE *params) { AH_IMEXPORTER_Q43 *ieh; GWEN_FAST_BUFFER *fb; int rv; assert(ie); ieh=GWEN_INHERIT_GETDATA(AB_IMEXPORTER, AH_IMEXPORTER_Q43, ie); assert(ieh); fb=GWEN_FastBuffer_new(1024, sio); rv=AH_ImExporterQ43_ReadDocument(ie, ctx, fb, params); GWEN_FastBuffer_free(fb); return rv; } int AH_ImExporterQ43_CheckFile(AB_IMEXPORTER *ie, const char *fname) { AH_IMEXPORTER_Q43 *ieh; assert(ie); ieh=GWEN_INHERIT_GETDATA(AB_IMEXPORTER, AH_IMEXPORTER_Q43, ie); assert(ieh); /* always return indifferent (for now) */ return AB_ERROR_INDIFFERENT; } int AH_ImExporterQ43_Export(AB_IMEXPORTER *ie, AB_IMEXPORTER_CONTEXT *ctx, GWEN_SYNCIO *sio, GWEN_DB_NODE *params) { AH_IMEXPORTER_Q43 *ieh; assert(ie); ieh=GWEN_INHERIT_GETDATA(AB_IMEXPORTER, AH_IMEXPORTER_Q43, ie); assert(ieh); // TODO return GWEN_ERROR_NOT_IMPLEMENTED; } aqbanking-6.6.1/src/libs/plugins/imexporters/q43/q43.h0000664000175000017500000000116114043610745017356 00000000000000/*************************************************************************** begin : Mon May 03 2010 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AQHBCI_IMEX_Q43_H #define AQHBCI_IMEX_Q43_H #include AB_IMEXPORTER *AB_ImExporterQ43_new(AB_BANKING *ab); #endif /* AQHBCI_IMEX_CTXFILE_H */ aqbanking-6.6.1/src/libs/plugins/imexporters/q43/q43_p.h0000664000175000017500000000322614043610745017701 00000000000000/*************************************************************************** begin : Mon May 03 2010 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AQHBCI_IMEX_Q43_P_H #define AQHBCI_IMEX_Q43_P_H #include "q43.h" #include typedef struct AH_IMEXPORTER_Q43 AH_IMEXPORTER_Q43; struct AH_IMEXPORTER_Q43 { int dummy; }; static void GWENHYWFAR_CB AH_ImExporterQ43_FreeData(void *bp, void *p); static const char *AH_ImExporterQ43_GetCurrencyCode(int code); static int AH_ImExporterQ43_ReadInt(const char *p, int len); static int AH_ImExporterQ43_ReadDocument(AB_IMEXPORTER *ie, AB_IMEXPORTER_CONTEXT *ctx, GWEN_FAST_BUFFER *fb, GWEN_DB_NODE *params); static int AH_ImExporterQ43_Import(AB_IMEXPORTER *ie, AB_IMEXPORTER_CONTEXT *ctx, GWEN_SYNCIO *sio, GWEN_DB_NODE *params); static int AH_ImExporterQ43_Export(AB_IMEXPORTER *ie, AB_IMEXPORTER_CONTEXT *ctx, GWEN_SYNCIO *sio, GWEN_DB_NODE *params); static int AH_ImExporterQ43_CheckFile(AB_IMEXPORTER *ie, const char *fname); #endif /* AQHBCI_IMEX_CTXFILE_P_H */ aqbanking-6.6.1/src/libs/plugins/imexporters/q43/Makefile.in0000644000175000017500000007340715037736026020662 00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/libs/plugins/imexporters/q43 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/distri.m4 $(top_srcdir)/m4/gwenhywfar.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/os.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = q43.xml CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libabimexporters_q43_la_LIBADD = am_libabimexporters_q43_la_OBJECTS = q43.lo libabimexporters_q43_la_OBJECTS = \ $(am_libabimexporters_q43_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/q43.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libabimexporters_q43_la_SOURCES) DIST_SOURCES = $(libabimexporters_q43_la_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(imexporterplugindir)" DATA = $(imexporterplugin_DATA) HEADERS = $(noinst_HEADERS) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir distdir-am am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/q43.xml.in \ $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ADD_ACLOCAL_FLAGS = @ADD_ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AQBANKING_CLI_VERSION_STRING = @AQBANKING_CLI_VERSION_STRING@ AQBANKING_FINTS_VERSION_STRING = @AQBANKING_FINTS_VERSION_STRING@ AQBANKING_SO_AGE = @AQBANKING_SO_AGE@ AQBANKING_SO_CURRENT = @AQBANKING_SO_CURRENT@ AQBANKING_SO_EFFECTIVE = @AQBANKING_SO_EFFECTIVE@ AQBANKING_SO_REVISION = @AQBANKING_SO_REVISION@ AQBANKING_VERSION_BUILD = @AQBANKING_VERSION_BUILD@ AQBANKING_VERSION_FULL_STRING = @AQBANKING_VERSION_FULL_STRING@ AQBANKING_VERSION_MAJOR = @AQBANKING_VERSION_MAJOR@ AQBANKING_VERSION_MINOR = @AQBANKING_VERSION_MINOR@ AQBANKING_VERSION_PATCHLEVEL = @AQBANKING_VERSION_PATCHLEVEL@ AQBANKING_VERSION_RELEASE_STRING = @AQBANKING_VERSION_RELEASE_STRING@ AQBANKING_VERSION_STRING = @AQBANKING_VERSION_STRING@ AQBANKING_VERSION_TAG = @AQBANKING_VERSION_TAG@ AQEBICS_CFLAGS = @AQEBICS_CFLAGS@ AQEBICS_LIBS = @AQEBICS_LIBS@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATETIME = @DATETIME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_EXCLUDE_PATTERNS = @DOXYGEN_EXCLUDE_PATTERNS@ DOXYGEN_FILE_PATTERNS = @DOXYGEN_FILE_PATTERNS@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENGUI_GTK2_CFLAGS = @GWENGUI_GTK2_CFLAGS@ GWENGUI_GTK2_LIBS = @GWENGUI_GTK2_LIBS@ GWENHYWFAR_MINIMUM_VERSION = @GWENHYWFAR_MINIMUM_VERSION@ HAVE_GWENGUI_GTK2 = @HAVE_GWENGUI_GTK2@ HAVE_I18N = @HAVE_I18N@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIBXSLT_CFLAGS = @LIBXSLT_CFLAGS@ LIBXSLT_LIBS = @LIBXSLT_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_SUPPORTS_QT = @MSGFMT_SUPPORTS_QT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ TUTORIALS = @TUTORIALS@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XMLMERGE = @XMLMERGE@ XMLSEC_CFLAGS = @XMLSEC_CFLAGS@ XMLSEC_LIBS = @XMLSEC_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ aqbanking_backends = @aqbanking_backends@ aqbanking_cfg_searchdir = @aqbanking_cfg_searchdir@ aqbanking_data_searchdir = @aqbanking_data_searchdir@ aqbanking_headerdir = @aqbanking_headerdir@ aqbanking_headerdir_am = @aqbanking_headerdir_am@ aqbanking_includes = @aqbanking_includes@ aqbanking_internal_libs = @aqbanking_internal_libs@ aqbanking_ldflags = @aqbanking_ldflags@ aqbanking_libs = @aqbanking_libs@ aqbanking_locale_searchdir = @aqbanking_locale_searchdir@ aqbanking_modules = @aqbanking_modules@ aqbanking_pkgdatadir = @aqbanking_pkgdatadir@ aqbanking_plugin_searchdir = @aqbanking_plugin_searchdir@ aqbanking_plugindir = @aqbanking_plugindir@ aqbanking_plugins_backends_dirs = @aqbanking_plugins_backends_dirs@ aqbanking_plugins_backends_libs = @aqbanking_plugins_backends_libs@ aqbanking_plugins_bankinfo_dirs = @aqbanking_plugins_bankinfo_dirs@ aqbanking_plugins_bankinfo_libs = @aqbanking_plugins_bankinfo_libs@ aqbanking_plugins_imexporters_dirs = @aqbanking_plugins_imexporters_dirs@ aqbanking_plugins_imexporters_libs = @aqbanking_plugins_imexporters_libs@ aqbanking_plugins_parsers_dirs = @aqbanking_plugins_parsers_dirs@ aqbanking_symlinkdir = @aqbanking_symlinkdir@ aqbanking_sys_is_windows = @aqbanking_sys_is_windows@ aqbankingpp_modules = @aqbankingpp_modules@ aqebics_datadir = @aqebics_datadir@ aqebics_includes = @aqebics_includes@ aqebics_internal_libs = @aqebics_internal_libs@ aqebics_ldflags = @aqebics_ldflags@ aqebics_libs = @aqebics_libs@ aqfints_datadir = @aqfints_datadir@ aqhbci_datadir = @aqhbci_datadir@ aqhbci_includes = @aqhbci_includes@ aqhbci_internal_libs = @aqhbci_internal_libs@ aqhbci_ldflags = @aqhbci_ldflags@ aqhbci_libs = @aqhbci_libs@ aqofxconnect_includes = @aqofxconnect_includes@ aqofxconnect_internal_libs = @aqofxconnect_internal_libs@ aqofxconnect_libs = @aqofxconnect_libs@ aqpaypal_includes = @aqpaypal_includes@ aqpaypal_internal_libs = @aqpaypal_internal_libs@ aqpaypal_libs = @aqpaypal_libs@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gmp_libs = @gmp_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_dir = @gwenhywfar_dir@ gwenhywfar_has_crypt = @gwenhywfar_has_crypt@ gwenhywfar_headers = @gwenhywfar_headers@ gwenhywfar_includes = @gwenhywfar_includes@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_plugins = @gwenhywfar_plugins@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ typemaker2_exe = @typemaker2_exe@ visibility_cflags = @visibility_cflags@ with_aqebics = @with_aqebics@ with_aqhbci = @with_aqhbci@ SUBDIRS = profiles AM_CPPFLAGS = -I$(top_srcdir)/src/libs \ -I$(top_builddir)/src/libs \ $(gwenhywfar_includes) AM_CFLAGS = -DBUILDING_AQBANKING @visibility_cflags@ EXTRA_DIST = imexporterplugindir = $(aqbanking_plugindir)/imexporters noinst_LTLIBRARIES = libabimexporters_q43.la imexporterplugin_DATA = q43.xml noinst_HEADERS = q43_p.h q43.h libabimexporters_q43_la_SOURCES = q43.c all: all-recursive .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libs/plugins/imexporters/q43/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libs/plugins/imexporters/q43/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): q43.xml: $(top_builddir)/config.status $(srcdir)/q43.xml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libabimexporters_q43.la: $(libabimexporters_q43_la_OBJECTS) $(libabimexporters_q43_la_DEPENDENCIES) $(EXTRA_libabimexporters_q43_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libabimexporters_q43_la_OBJECTS) $(libabimexporters_q43_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/q43.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-imexporterpluginDATA: $(imexporterplugin_DATA) @$(NORMAL_INSTALL) @list='$(imexporterplugin_DATA)'; test -n "$(imexporterplugindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(imexporterplugindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(imexporterplugindir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(imexporterplugindir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(imexporterplugindir)" || exit $$?; \ done uninstall-imexporterpluginDATA: @$(NORMAL_UNINSTALL) @list='$(imexporterplugin_DATA)'; test -n "$(imexporterplugindir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(imexporterplugindir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(imexporterplugindir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-recursive -rm -f ./$(DEPDIR)/q43.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-imexporterpluginDATA install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f ./$(DEPDIR)/q43.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-imexporterpluginDATA .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ am--depfiles check check-am clean clean-generic clean-libtool \ clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-imexporterpluginDATA install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am \ uninstall-imexporterpluginDATA .PRECIOUS: Makefile typefiles: typedefs: sources: for f in $(libabimexporters_q43_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for f in $(imexporterplugin_DATA); do \ echo $(subdir)/$$f >>$(top_srcdir)/pdsources; \ done cppcheck: for f in $(libabimexporters_q43_la_SOURCES); do \ cppcheck --force $$f ; \ done # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: aqbanking-6.6.1/src/libs/plugins/imexporters/q43/Makefile.am0000664000175000017500000000132214043610745020631 00000000000000SUBDIRS=profiles AM_CPPFLAGS = -I$(top_srcdir)/src/libs \ -I$(top_builddir)/src/libs \ $(gwenhywfar_includes) AM_CFLAGS=-DBUILDING_AQBANKING @visibility_cflags@ EXTRA_DIST= imexporterplugindir = $(aqbanking_plugindir)/imexporters noinst_LTLIBRARIES=libabimexporters_q43.la imexporterplugin_DATA=q43.xml noinst_HEADERS=q43_p.h q43.h libabimexporters_q43_la_SOURCES=q43.c typefiles: typedefs: sources: for f in $(libabimexporters_q43_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for f in $(imexporterplugin_DATA); do \ echo $(subdir)/$$f >>$(top_srcdir)/pdsources; \ done cppcheck: for f in $(libabimexporters_q43_la_SOURCES); do \ cppcheck --force $$f ; \ done aqbanking-6.6.1/src/libs/plugins/imexporters/q43/profiles/0000755000175000017500000000000015037736160020504 500000000000000aqbanking-6.6.1/src/libs/plugins/imexporters/q43/profiles/Makefile.am0000664000175000017500000000017014043610745022454 00000000000000 profilesdir = $(aqbanking_pkgdatadir)/imexporters/q43/profiles profiles_DATA=default.conf EXTRA_DIST=$(profiles_DATA) aqbanking-6.6.1/src/libs/plugins/imexporters/q43/profiles/default.conf0000664000175000017500000000023414043610745022714 00000000000000 char name="default" char shortDescr="default profile" char longDescr="This profile supports Q43 files" int import="1" int export="0" params { } # params aqbanking-6.6.1/src/libs/plugins/imexporters/q43/profiles/Makefile.in0000644000175000017500000004574315037736026022507 00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/libs/plugins/imexporters/q43/profiles ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/distri.m4 $(top_srcdir)/m4/gwenhywfar.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/os.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(profilesdir)" DATA = $(profiles_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADD_ACLOCAL_FLAGS = @ADD_ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AQBANKING_CLI_VERSION_STRING = @AQBANKING_CLI_VERSION_STRING@ AQBANKING_FINTS_VERSION_STRING = @AQBANKING_FINTS_VERSION_STRING@ AQBANKING_SO_AGE = @AQBANKING_SO_AGE@ AQBANKING_SO_CURRENT = @AQBANKING_SO_CURRENT@ AQBANKING_SO_EFFECTIVE = @AQBANKING_SO_EFFECTIVE@ AQBANKING_SO_REVISION = @AQBANKING_SO_REVISION@ AQBANKING_VERSION_BUILD = @AQBANKING_VERSION_BUILD@ AQBANKING_VERSION_FULL_STRING = @AQBANKING_VERSION_FULL_STRING@ AQBANKING_VERSION_MAJOR = @AQBANKING_VERSION_MAJOR@ AQBANKING_VERSION_MINOR = @AQBANKING_VERSION_MINOR@ AQBANKING_VERSION_PATCHLEVEL = @AQBANKING_VERSION_PATCHLEVEL@ AQBANKING_VERSION_RELEASE_STRING = @AQBANKING_VERSION_RELEASE_STRING@ AQBANKING_VERSION_STRING = @AQBANKING_VERSION_STRING@ AQBANKING_VERSION_TAG = @AQBANKING_VERSION_TAG@ AQEBICS_CFLAGS = @AQEBICS_CFLAGS@ AQEBICS_LIBS = @AQEBICS_LIBS@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATETIME = @DATETIME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_EXCLUDE_PATTERNS = @DOXYGEN_EXCLUDE_PATTERNS@ DOXYGEN_FILE_PATTERNS = @DOXYGEN_FILE_PATTERNS@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENGUI_GTK2_CFLAGS = @GWENGUI_GTK2_CFLAGS@ GWENGUI_GTK2_LIBS = @GWENGUI_GTK2_LIBS@ GWENHYWFAR_MINIMUM_VERSION = @GWENHYWFAR_MINIMUM_VERSION@ HAVE_GWENGUI_GTK2 = @HAVE_GWENGUI_GTK2@ HAVE_I18N = @HAVE_I18N@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIBXSLT_CFLAGS = @LIBXSLT_CFLAGS@ LIBXSLT_LIBS = @LIBXSLT_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_SUPPORTS_QT = @MSGFMT_SUPPORTS_QT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ TUTORIALS = @TUTORIALS@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XMLMERGE = @XMLMERGE@ XMLSEC_CFLAGS = @XMLSEC_CFLAGS@ XMLSEC_LIBS = @XMLSEC_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ aqbanking_backends = @aqbanking_backends@ aqbanking_cfg_searchdir = @aqbanking_cfg_searchdir@ aqbanking_data_searchdir = @aqbanking_data_searchdir@ aqbanking_headerdir = @aqbanking_headerdir@ aqbanking_headerdir_am = @aqbanking_headerdir_am@ aqbanking_includes = @aqbanking_includes@ aqbanking_internal_libs = @aqbanking_internal_libs@ aqbanking_ldflags = @aqbanking_ldflags@ aqbanking_libs = @aqbanking_libs@ aqbanking_locale_searchdir = @aqbanking_locale_searchdir@ aqbanking_modules = @aqbanking_modules@ aqbanking_pkgdatadir = @aqbanking_pkgdatadir@ aqbanking_plugin_searchdir = @aqbanking_plugin_searchdir@ aqbanking_plugindir = @aqbanking_plugindir@ aqbanking_plugins_backends_dirs = @aqbanking_plugins_backends_dirs@ aqbanking_plugins_backends_libs = @aqbanking_plugins_backends_libs@ aqbanking_plugins_bankinfo_dirs = @aqbanking_plugins_bankinfo_dirs@ aqbanking_plugins_bankinfo_libs = @aqbanking_plugins_bankinfo_libs@ aqbanking_plugins_imexporters_dirs = @aqbanking_plugins_imexporters_dirs@ aqbanking_plugins_imexporters_libs = @aqbanking_plugins_imexporters_libs@ aqbanking_plugins_parsers_dirs = @aqbanking_plugins_parsers_dirs@ aqbanking_symlinkdir = @aqbanking_symlinkdir@ aqbanking_sys_is_windows = @aqbanking_sys_is_windows@ aqbankingpp_modules = @aqbankingpp_modules@ aqebics_datadir = @aqebics_datadir@ aqebics_includes = @aqebics_includes@ aqebics_internal_libs = @aqebics_internal_libs@ aqebics_ldflags = @aqebics_ldflags@ aqebics_libs = @aqebics_libs@ aqfints_datadir = @aqfints_datadir@ aqhbci_datadir = @aqhbci_datadir@ aqhbci_includes = @aqhbci_includes@ aqhbci_internal_libs = @aqhbci_internal_libs@ aqhbci_ldflags = @aqhbci_ldflags@ aqhbci_libs = @aqhbci_libs@ aqofxconnect_includes = @aqofxconnect_includes@ aqofxconnect_internal_libs = @aqofxconnect_internal_libs@ aqofxconnect_libs = @aqofxconnect_libs@ aqpaypal_includes = @aqpaypal_includes@ aqpaypal_internal_libs = @aqpaypal_internal_libs@ aqpaypal_libs = @aqpaypal_libs@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gmp_libs = @gmp_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_dir = @gwenhywfar_dir@ gwenhywfar_has_crypt = @gwenhywfar_has_crypt@ gwenhywfar_headers = @gwenhywfar_headers@ gwenhywfar_includes = @gwenhywfar_includes@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_plugins = @gwenhywfar_plugins@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ typemaker2_exe = @typemaker2_exe@ visibility_cflags = @visibility_cflags@ with_aqebics = @with_aqebics@ with_aqhbci = @with_aqhbci@ profilesdir = $(aqbanking_pkgdatadir)/imexporters/q43/profiles profiles_DATA = default.conf EXTRA_DIST = $(profiles_DATA) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libs/plugins/imexporters/q43/profiles/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libs/plugins/imexporters/q43/profiles/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-profilesDATA: $(profiles_DATA) @$(NORMAL_INSTALL) @list='$(profiles_DATA)'; test -n "$(profilesdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(profilesdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(profilesdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(profilesdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(profilesdir)" || exit $$?; \ done uninstall-profilesDATA: @$(NORMAL_UNINSTALL) @list='$(profiles_DATA)'; test -n "$(profilesdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(profilesdir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(profilesdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-profilesDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-profilesDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-profilesDATA install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags-am uninstall uninstall-am uninstall-profilesDATA .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: aqbanking-6.6.1/src/libs/plugins/imexporters/yellownet/0000755000175000017500000000000015037736160020274 500000000000000aqbanking-6.6.1/src/libs/plugins/imexporters/yellownet/Makefile.in0000644000175000017500000007370715037736026022300 00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/libs/plugins/imexporters/yellownet ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/distri.m4 $(top_srcdir)/m4/gwenhywfar.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/os.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = yellownet.xml CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libabimexporters_yellownet_la_LIBADD = am_libabimexporters_yellownet_la_OBJECTS = yellownet.lo libabimexporters_yellownet_la_OBJECTS = \ $(am_libabimexporters_yellownet_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/yellownet.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libabimexporters_yellownet_la_SOURCES) DIST_SOURCES = $(libabimexporters_yellownet_la_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(imexporterplugindir)" DATA = $(imexporterplugin_DATA) HEADERS = $(noinst_HEADERS) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir distdir-am am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/yellownet.xml.in \ $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ADD_ACLOCAL_FLAGS = @ADD_ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AQBANKING_CLI_VERSION_STRING = @AQBANKING_CLI_VERSION_STRING@ AQBANKING_FINTS_VERSION_STRING = @AQBANKING_FINTS_VERSION_STRING@ AQBANKING_SO_AGE = @AQBANKING_SO_AGE@ AQBANKING_SO_CURRENT = @AQBANKING_SO_CURRENT@ AQBANKING_SO_EFFECTIVE = @AQBANKING_SO_EFFECTIVE@ AQBANKING_SO_REVISION = @AQBANKING_SO_REVISION@ AQBANKING_VERSION_BUILD = @AQBANKING_VERSION_BUILD@ AQBANKING_VERSION_FULL_STRING = @AQBANKING_VERSION_FULL_STRING@ AQBANKING_VERSION_MAJOR = @AQBANKING_VERSION_MAJOR@ AQBANKING_VERSION_MINOR = @AQBANKING_VERSION_MINOR@ AQBANKING_VERSION_PATCHLEVEL = @AQBANKING_VERSION_PATCHLEVEL@ AQBANKING_VERSION_RELEASE_STRING = @AQBANKING_VERSION_RELEASE_STRING@ AQBANKING_VERSION_STRING = @AQBANKING_VERSION_STRING@ AQBANKING_VERSION_TAG = @AQBANKING_VERSION_TAG@ AQEBICS_CFLAGS = @AQEBICS_CFLAGS@ AQEBICS_LIBS = @AQEBICS_LIBS@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATETIME = @DATETIME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_EXCLUDE_PATTERNS = @DOXYGEN_EXCLUDE_PATTERNS@ DOXYGEN_FILE_PATTERNS = @DOXYGEN_FILE_PATTERNS@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENGUI_GTK2_CFLAGS = @GWENGUI_GTK2_CFLAGS@ GWENGUI_GTK2_LIBS = @GWENGUI_GTK2_LIBS@ GWENHYWFAR_MINIMUM_VERSION = @GWENHYWFAR_MINIMUM_VERSION@ HAVE_GWENGUI_GTK2 = @HAVE_GWENGUI_GTK2@ HAVE_I18N = @HAVE_I18N@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIBXSLT_CFLAGS = @LIBXSLT_CFLAGS@ LIBXSLT_LIBS = @LIBXSLT_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_SUPPORTS_QT = @MSGFMT_SUPPORTS_QT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ TUTORIALS = @TUTORIALS@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XMLMERGE = @XMLMERGE@ XMLSEC_CFLAGS = @XMLSEC_CFLAGS@ XMLSEC_LIBS = @XMLSEC_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ aqbanking_backends = @aqbanking_backends@ aqbanking_cfg_searchdir = @aqbanking_cfg_searchdir@ aqbanking_data_searchdir = @aqbanking_data_searchdir@ aqbanking_headerdir = @aqbanking_headerdir@ aqbanking_headerdir_am = @aqbanking_headerdir_am@ aqbanking_includes = @aqbanking_includes@ aqbanking_internal_libs = @aqbanking_internal_libs@ aqbanking_ldflags = @aqbanking_ldflags@ aqbanking_libs = @aqbanking_libs@ aqbanking_locale_searchdir = @aqbanking_locale_searchdir@ aqbanking_modules = @aqbanking_modules@ aqbanking_pkgdatadir = @aqbanking_pkgdatadir@ aqbanking_plugin_searchdir = @aqbanking_plugin_searchdir@ aqbanking_plugindir = @aqbanking_plugindir@ aqbanking_plugins_backends_dirs = @aqbanking_plugins_backends_dirs@ aqbanking_plugins_backends_libs = @aqbanking_plugins_backends_libs@ aqbanking_plugins_bankinfo_dirs = @aqbanking_plugins_bankinfo_dirs@ aqbanking_plugins_bankinfo_libs = @aqbanking_plugins_bankinfo_libs@ aqbanking_plugins_imexporters_dirs = @aqbanking_plugins_imexporters_dirs@ aqbanking_plugins_imexporters_libs = @aqbanking_plugins_imexporters_libs@ aqbanking_plugins_parsers_dirs = @aqbanking_plugins_parsers_dirs@ aqbanking_symlinkdir = @aqbanking_symlinkdir@ aqbanking_sys_is_windows = @aqbanking_sys_is_windows@ aqbankingpp_modules = @aqbankingpp_modules@ aqebics_datadir = @aqebics_datadir@ aqebics_includes = @aqebics_includes@ aqebics_internal_libs = @aqebics_internal_libs@ aqebics_ldflags = @aqebics_ldflags@ aqebics_libs = @aqebics_libs@ aqfints_datadir = @aqfints_datadir@ aqhbci_datadir = @aqhbci_datadir@ aqhbci_includes = @aqhbci_includes@ aqhbci_internal_libs = @aqhbci_internal_libs@ aqhbci_ldflags = @aqhbci_ldflags@ aqhbci_libs = @aqhbci_libs@ aqofxconnect_includes = @aqofxconnect_includes@ aqofxconnect_internal_libs = @aqofxconnect_internal_libs@ aqofxconnect_libs = @aqofxconnect_libs@ aqpaypal_includes = @aqpaypal_includes@ aqpaypal_internal_libs = @aqpaypal_internal_libs@ aqpaypal_libs = @aqpaypal_libs@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gmp_libs = @gmp_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_dir = @gwenhywfar_dir@ gwenhywfar_has_crypt = @gwenhywfar_has_crypt@ gwenhywfar_headers = @gwenhywfar_headers@ gwenhywfar_includes = @gwenhywfar_includes@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_plugins = @gwenhywfar_plugins@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ typemaker2_exe = @typemaker2_exe@ visibility_cflags = @visibility_cflags@ with_aqebics = @with_aqebics@ with_aqhbci = @with_aqhbci@ SUBDIRS = profiles AM_CPPFLAGS = -I$(top_srcdir)/src/libs \ -I$(top_builddir)/src/libs \ $(gwenhywfar_includes) AM_CFLAGS = -DBUILDING_AQBANKING @visibility_cflags@ #EXTRA_DIST= noinst_HEADERS = yellownet_p.h yellownet.h imexporterplugindir = $(aqbanking_plugindir)/imexporters noinst_LTLIBRARIES = libabimexporters_yellownet.la imexporterplugin_DATA = yellownet.xml libabimexporters_yellownet_la_SOURCES = yellownet.c all: all-recursive .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libs/plugins/imexporters/yellownet/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libs/plugins/imexporters/yellownet/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): yellownet.xml: $(top_builddir)/config.status $(srcdir)/yellownet.xml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libabimexporters_yellownet.la: $(libabimexporters_yellownet_la_OBJECTS) $(libabimexporters_yellownet_la_DEPENDENCIES) $(EXTRA_libabimexporters_yellownet_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libabimexporters_yellownet_la_OBJECTS) $(libabimexporters_yellownet_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/yellownet.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-imexporterpluginDATA: $(imexporterplugin_DATA) @$(NORMAL_INSTALL) @list='$(imexporterplugin_DATA)'; test -n "$(imexporterplugindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(imexporterplugindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(imexporterplugindir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(imexporterplugindir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(imexporterplugindir)" || exit $$?; \ done uninstall-imexporterpluginDATA: @$(NORMAL_UNINSTALL) @list='$(imexporterplugin_DATA)'; test -n "$(imexporterplugindir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(imexporterplugindir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(imexporterplugindir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-recursive -rm -f ./$(DEPDIR)/yellownet.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-imexporterpluginDATA install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f ./$(DEPDIR)/yellownet.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-imexporterpluginDATA .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ am--depfiles check check-am clean clean-generic clean-libtool \ clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-imexporterpluginDATA install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am \ uninstall-imexporterpluginDATA .PRECIOUS: Makefile typefiles: typedefs: sources: for f in $(libabimexporters_yellownet_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for f in $(imexporterplugin_DATA); do \ echo $(subdir)/$$f >>$(top_srcdir)/pdsources; \ done cppcheck: for f in $(libabimexporters_yellownet_la_SOURCES); do \ cppcheck --force $$f ; \ done # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: aqbanking-6.6.1/src/libs/plugins/imexporters/yellownet/yellownet.h0000664000175000017500000000116314043610745022406 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AQHBCI_IMEX_YN_H #define AQHBCI_IMEX_YN_H #include AB_IMEXPORTER *AB_ImExporterYellowNet_new(AB_BANKING *ab); #endif /* AQHBCI_IMEX_YN_H */ aqbanking-6.6.1/src/libs/plugins/imexporters/yellownet/profiles/0000755000175000017500000000000015037736160022117 500000000000000aqbanking-6.6.1/src/libs/plugins/imexporters/yellownet/profiles/Makefile.am0000664000175000017500000000017614043610745024075 00000000000000 profilesdir = $(aqbanking_pkgdatadir)/imexporters/yellownet/profiles profiles_DATA=default.conf EXTRA_DIST=$(profiles_DATA) aqbanking-6.6.1/src/libs/plugins/imexporters/yellownet/profiles/Makefile.in0000644000175000017500000004577315037736026024125 00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/libs/plugins/imexporters/yellownet/profiles ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/distri.m4 $(top_srcdir)/m4/gwenhywfar.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/os.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(profilesdir)" DATA = $(profiles_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADD_ACLOCAL_FLAGS = @ADD_ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AQBANKING_CLI_VERSION_STRING = @AQBANKING_CLI_VERSION_STRING@ AQBANKING_FINTS_VERSION_STRING = @AQBANKING_FINTS_VERSION_STRING@ AQBANKING_SO_AGE = @AQBANKING_SO_AGE@ AQBANKING_SO_CURRENT = @AQBANKING_SO_CURRENT@ AQBANKING_SO_EFFECTIVE = @AQBANKING_SO_EFFECTIVE@ AQBANKING_SO_REVISION = @AQBANKING_SO_REVISION@ AQBANKING_VERSION_BUILD = @AQBANKING_VERSION_BUILD@ AQBANKING_VERSION_FULL_STRING = @AQBANKING_VERSION_FULL_STRING@ AQBANKING_VERSION_MAJOR = @AQBANKING_VERSION_MAJOR@ AQBANKING_VERSION_MINOR = @AQBANKING_VERSION_MINOR@ AQBANKING_VERSION_PATCHLEVEL = @AQBANKING_VERSION_PATCHLEVEL@ AQBANKING_VERSION_RELEASE_STRING = @AQBANKING_VERSION_RELEASE_STRING@ AQBANKING_VERSION_STRING = @AQBANKING_VERSION_STRING@ AQBANKING_VERSION_TAG = @AQBANKING_VERSION_TAG@ AQEBICS_CFLAGS = @AQEBICS_CFLAGS@ AQEBICS_LIBS = @AQEBICS_LIBS@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATETIME = @DATETIME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_EXCLUDE_PATTERNS = @DOXYGEN_EXCLUDE_PATTERNS@ DOXYGEN_FILE_PATTERNS = @DOXYGEN_FILE_PATTERNS@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENGUI_GTK2_CFLAGS = @GWENGUI_GTK2_CFLAGS@ GWENGUI_GTK2_LIBS = @GWENGUI_GTK2_LIBS@ GWENHYWFAR_MINIMUM_VERSION = @GWENHYWFAR_MINIMUM_VERSION@ HAVE_GWENGUI_GTK2 = @HAVE_GWENGUI_GTK2@ HAVE_I18N = @HAVE_I18N@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIBXSLT_CFLAGS = @LIBXSLT_CFLAGS@ LIBXSLT_LIBS = @LIBXSLT_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_SUPPORTS_QT = @MSGFMT_SUPPORTS_QT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ TUTORIALS = @TUTORIALS@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XMLMERGE = @XMLMERGE@ XMLSEC_CFLAGS = @XMLSEC_CFLAGS@ XMLSEC_LIBS = @XMLSEC_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ aqbanking_backends = @aqbanking_backends@ aqbanking_cfg_searchdir = @aqbanking_cfg_searchdir@ aqbanking_data_searchdir = @aqbanking_data_searchdir@ aqbanking_headerdir = @aqbanking_headerdir@ aqbanking_headerdir_am = @aqbanking_headerdir_am@ aqbanking_includes = @aqbanking_includes@ aqbanking_internal_libs = @aqbanking_internal_libs@ aqbanking_ldflags = @aqbanking_ldflags@ aqbanking_libs = @aqbanking_libs@ aqbanking_locale_searchdir = @aqbanking_locale_searchdir@ aqbanking_modules = @aqbanking_modules@ aqbanking_pkgdatadir = @aqbanking_pkgdatadir@ aqbanking_plugin_searchdir = @aqbanking_plugin_searchdir@ aqbanking_plugindir = @aqbanking_plugindir@ aqbanking_plugins_backends_dirs = @aqbanking_plugins_backends_dirs@ aqbanking_plugins_backends_libs = @aqbanking_plugins_backends_libs@ aqbanking_plugins_bankinfo_dirs = @aqbanking_plugins_bankinfo_dirs@ aqbanking_plugins_bankinfo_libs = @aqbanking_plugins_bankinfo_libs@ aqbanking_plugins_imexporters_dirs = @aqbanking_plugins_imexporters_dirs@ aqbanking_plugins_imexporters_libs = @aqbanking_plugins_imexporters_libs@ aqbanking_plugins_parsers_dirs = @aqbanking_plugins_parsers_dirs@ aqbanking_symlinkdir = @aqbanking_symlinkdir@ aqbanking_sys_is_windows = @aqbanking_sys_is_windows@ aqbankingpp_modules = @aqbankingpp_modules@ aqebics_datadir = @aqebics_datadir@ aqebics_includes = @aqebics_includes@ aqebics_internal_libs = @aqebics_internal_libs@ aqebics_ldflags = @aqebics_ldflags@ aqebics_libs = @aqebics_libs@ aqfints_datadir = @aqfints_datadir@ aqhbci_datadir = @aqhbci_datadir@ aqhbci_includes = @aqhbci_includes@ aqhbci_internal_libs = @aqhbci_internal_libs@ aqhbci_ldflags = @aqhbci_ldflags@ aqhbci_libs = @aqhbci_libs@ aqofxconnect_includes = @aqofxconnect_includes@ aqofxconnect_internal_libs = @aqofxconnect_internal_libs@ aqofxconnect_libs = @aqofxconnect_libs@ aqpaypal_includes = @aqpaypal_includes@ aqpaypal_internal_libs = @aqpaypal_internal_libs@ aqpaypal_libs = @aqpaypal_libs@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gmp_libs = @gmp_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_dir = @gwenhywfar_dir@ gwenhywfar_has_crypt = @gwenhywfar_has_crypt@ gwenhywfar_headers = @gwenhywfar_headers@ gwenhywfar_includes = @gwenhywfar_includes@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_plugins = @gwenhywfar_plugins@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ typemaker2_exe = @typemaker2_exe@ visibility_cflags = @visibility_cflags@ with_aqebics = @with_aqebics@ with_aqhbci = @with_aqhbci@ profilesdir = $(aqbanking_pkgdatadir)/imexporters/yellownet/profiles profiles_DATA = default.conf EXTRA_DIST = $(profiles_DATA) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libs/plugins/imexporters/yellownet/profiles/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libs/plugins/imexporters/yellownet/profiles/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-profilesDATA: $(profiles_DATA) @$(NORMAL_INSTALL) @list='$(profiles_DATA)'; test -n "$(profilesdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(profilesdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(profilesdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(profilesdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(profilesdir)" || exit $$?; \ done uninstall-profilesDATA: @$(NORMAL_UNINSTALL) @list='$(profiles_DATA)'; test -n "$(profilesdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(profilesdir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(profilesdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-profilesDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-profilesDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-profilesDATA install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags-am uninstall uninstall-am uninstall-profilesDATA .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: aqbanking-6.6.1/src/libs/plugins/imexporters/yellownet/profiles/default.conf0000664000175000017500000000025714043610745024334 00000000000000 char name="default" char shortDescr="default profile" char longDescr="This profile supports the old YellowNet XML format" int import="1" int export="0" params { } # params aqbanking-6.6.1/src/libs/plugins/imexporters/yellownet/Makefile.am0000664000175000017500000000140114043610745022242 00000000000000SUBDIRS=profiles AM_CPPFLAGS = -I$(top_srcdir)/src/libs \ -I$(top_builddir)/src/libs \ $(gwenhywfar_includes) AM_CFLAGS=-DBUILDING_AQBANKING @visibility_cflags@ #EXTRA_DIST= noinst_HEADERS=yellownet_p.h yellownet.h imexporterplugindir = $(aqbanking_plugindir)/imexporters noinst_LTLIBRARIES=libabimexporters_yellownet.la imexporterplugin_DATA=yellownet.xml libabimexporters_yellownet_la_SOURCES=yellownet.c typefiles: typedefs: sources: for f in $(libabimexporters_yellownet_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for f in $(imexporterplugin_DATA); do \ echo $(subdir)/$$f >>$(top_srcdir)/pdsources; \ done cppcheck: for f in $(libabimexporters_yellownet_la_SOURCES); do \ cppcheck --force $$f ; \ done aqbanking-6.6.1/src/libs/plugins/imexporters/yellownet/yellownet.c0000664000175000017500000003042214043610745022401 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "yellownet_p.h" #include "aqbanking/i18n_l.h" #include #include #include #include #include #include #include #include #include GWEN_INHERIT(AB_IMEXPORTER, AB_IMEXPORTER_YELLOWNET); AB_IMEXPORTER *AB_ImExporterYellowNet_new(AB_BANKING *ab) { AB_IMEXPORTER *ie; AB_IMEXPORTER_YELLOWNET *ieh; ie=AB_ImExporter_new(ab, "yellownet"); GWEN_NEW_OBJECT(AB_IMEXPORTER_YELLOWNET, ieh); GWEN_INHERIT_SETDATA(AB_IMEXPORTER, AB_IMEXPORTER_YELLOWNET, ie, ieh, AB_ImExporterYN_FreeData); AB_ImExporter_SetImportFn(ie, AB_ImExporterYN_Import); AB_ImExporter_SetCheckFileFn(ie, AB_ImExporterYN_CheckFile); return ie; } void GWENHYWFAR_CB AB_ImExporterYN_FreeData(void *bp, void *p) { AB_IMEXPORTER_YELLOWNET *ieh; ieh=(AB_IMEXPORTER_YELLOWNET *)p; GWEN_FREE_OBJECT(ieh); } AB_IMEXPORTER_ACCOUNTINFO *AB_ImExporterYN__ReadAccountInfo(AB_IMEXPORTER *ie, AB_IMEXPORTER_CONTEXT *ctx, GWEN_XMLNODE *doc) { GWEN_XMLNODE *n; AB_IMEXPORTER_ACCOUNTINFO *ai; ai=AB_ImExporterAccountInfo_new(); n=GWEN_XMLNode_FindFirstTag(doc, "SG2", 0, 0); if (n) n=GWEN_XMLNode_FindFirstTag(n, "FII", 0, 0); if (n) { GWEN_XMLNODE *nn; const char *s; nn=GWEN_XMLNode_FindFirstTag(n, "C078", 0, 0); if (nn) { GWEN_XMLNODE *nnn; /* account number */ s=GWEN_XMLNode_GetCharValue(nn, "D_3194", 0); if (s) AB_ImExporterAccountInfo_SetAccountNumber(ai, s); /* IBAN */ s=GWEN_XMLNode_GetCharValue(nn, "D_3192", 0); if (s) AB_ImExporterAccountInfo_SetIban(ai, s); /* currency */ nnn=GWEN_XMLNode_FindFirstTag(nn, "D_6345", 0, 0); if (nnn) { s=GWEN_XMLNode_GetProperty(nnn, "value", 0); if (s) AB_ImExporterAccountInfo_SetCurrency(ai, s); } } /* account number */ s=GWEN_XMLNode_GetCharValue(n, "PF:D_5388", 0); if (s) AB_ImExporterAccountInfo_SetAccountName(ai, s); } /* owner name */ n=GWEN_XMLNode_GetNodeByXPath(doc, "SG3[1]/NAD", GWEN_PATH_FLAGS_NAMEMUSTEXIST); if (n) { GWEN_XMLNODE *nn; nn=GWEN_XMLNode_FindFirstTag(n, "D_3035", 0, 0); if (nn) { const char *s; s=GWEN_XMLNode_GetProperty(nn, "Value", 0); if (s && strcasecmp(s, "HQ")==0) { nn=GWEN_XMLNode_FindFirstTag(n, "C058", 0, 0); if (nn) { s=GWEN_XMLNode_GetCharValue(nn, "D_3124", 0); if (s && *s) { GWEN_BUFFER *xbuf; xbuf=GWEN_Buffer_new(0, 256, 0, 1); AB_ImExporter_Iso8859_1ToUtf8(s, strlen(s), xbuf); AB_ImExporterAccountInfo_SetOwner(ai, GWEN_Buffer_GetStart(xbuf)); GWEN_Buffer_free(xbuf); } } } } } return ai; } AB_VALUE *AB_ImExporterYN__ReadValue(AB_IMEXPORTER *ie, GWEN_XMLNODE *node, int value) { GWEN_XMLNODE *n; AB_VALUE *val=0; n=GWEN_XMLNode_FindFirstTag(node, "C516", 0, 0); if (n) { GWEN_XMLNODE *nn; int v=0; nn=GWEN_XMLNode_FindFirstTag(n, "D_5025", 0, 0); if (nn) v=atoi(GWEN_XMLNode_GetProperty(nn, "Value", "0")); if (value==0 || v==value) { const char *sValue; const char *sSign; sValue=GWEN_XMLNode_GetCharValue(n, "D_5004", 0); sSign=GWEN_XMLNode_GetCharValue(node, "PF:D_5003", 0); if (sValue) { val=AB_Value_fromString(sValue); if (val && sSign && strcmp(sSign, "-")==0) AB_Value_Negate(val); } } } return val; } GWEN_DATE *AB_ImExporterYN__ReadDate(AB_IMEXPORTER *ie, GWEN_XMLNODE *node, int value) { GWEN_XMLNODE *n; GWEN_DATE *da=NULL; n=GWEN_XMLNode_GetNodeByXPath(node, "C507", GWEN_PATH_FLAGS_NAMEMUSTEXIST); if (n) { GWEN_XMLNODE *nn; int v=0; nn=GWEN_XMLNode_FindFirstTag(n, "D_2005", 0, 0); if (nn) v=atoi(GWEN_XMLNode_GetProperty(nn, "Value", "0")); if (value==0 || v==value) { const char *s; s=GWEN_XMLNode_GetCharValue(n, "D_2380", 0); if (s) da=GWEN_Date_fromStringWithTemplate(s, "YYYYMMDD"); } } return da; } AB_TRANSACTION *AB_ImExporterYN__ReadLNE_LNS(AB_IMEXPORTER *ie, AB_IMEXPORTER_ACCOUNTINFO *ai, GWEN_XMLNODE *node) { AB_TRANSACTION *t; GWEN_XMLNODE *nn; GWEN_DATE *da=NULL; AB_VALUE *val=NULL; t=AB_Transaction_new(); /* get date */ nn=GWEN_XMLNode_FindFirstTag(node, "DTM", 0, 0); if (nn) da=AB_ImExporterYN__ReadDate(ie, nn, 209); AB_Transaction_SetValutaDate(t, da); GWEN_Date_free(da); da=NULL; /* read amount */ nn=GWEN_XMLNode_FindFirstTag(node, "MOA", 0, 0); if (nn) { /* Gutschrift */ val=AB_ImExporterYN__ReadValue(ie, nn, 210); if (val) { if (AB_Value_IsZero(val)) { AB_Value_free(val); val=NULL; } } if (val==NULL) { val=AB_ImExporterYN__ReadValue(ie, nn, 211); if (val) AB_Value_Negate(val); } } if (val==NULL) val=AB_Value_new(); AB_Value_SetCurrency(val, AB_ImExporterAccountInfo_GetCurrency(ai)); AB_Transaction_SetValue(t, val); AB_Value_free(val); val=0; /* read purpose */ nn=GWEN_XMLNode_GetNodeByXPath(node, "FTX/C108", GWEN_PATH_FLAGS_NAMEMUSTEXIST); if (nn) { GWEN_XMLNODE *nnn; nnn=GWEN_XMLNode_FindFirstTag(nn, "D_4440", 0, 0); while (nnn) { GWEN_XMLNODE *nData; nData=GWEN_XMLNode_GetFirstData(nnn); if (nData) { const char *s; s=GWEN_XMLNode_GetData(nData); if (s) { GWEN_BUFFER *xbuf; xbuf=GWEN_Buffer_new(0, 256, 0, 1); AB_ImExporter_Iso8859_1ToUtf8(s, strlen(s), xbuf); AB_Transaction_AddPurposeLine(t, GWEN_Buffer_GetStart(xbuf)); GWEN_Buffer_free(xbuf); } } nnn=GWEN_XMLNode_FindNextTag(nnn, "D_4440", 0, 0); } } return t; } int AB_ImExporterYN__ReadTransactions(AB_IMEXPORTER *ie, AB_IMEXPORTER_ACCOUNTINFO *ai, GWEN_XMLNODE *doc) { GWEN_XMLNODE *n; n=GWEN_XMLNode_FindFirstTag(doc, "SG4", 0, 0); while (n) { GWEN_XMLNODE *nn; nn=GWEN_XMLNode_GetNodeByXPath(n, "LIN/PF:D_0805", GWEN_PATH_FLAGS_NAMEMUSTEXIST); if (nn) { const char *s; s=GWEN_XMLNode_GetProperty(nn, "Value", 0); if (s && (strcasecmp(s, "LNE")==0 || strcasecmp(s, "LNS")==0) ) { nn = GWEN_XMLNode_FindFirstTag(n, "SG6", 0, 0); while (nn) { AB_TRANSACTION *t; const char *s; t=AB_ImExporterYN__ReadLNE_LNS(ie, ai, nn); s=AB_ImExporterAccountInfo_GetAccountNumber(ai); AB_Transaction_SetLocalAccountNumber(t, s); s=AB_ImExporterAccountInfo_GetIban(ai); AB_Transaction_SetLocalIban(t, s); AB_ImExporterAccountInfo_AddTransaction(ai, t); nn=GWEN_XMLNode_FindNextTag(nn, "SG6", 0, 0); } } } n=GWEN_XMLNode_FindNextTag(n, "SG4", 0, 0); } return 0; } int AB_ImExporterYN__ReadAccountStatus(AB_IMEXPORTER *ie, AB_IMEXPORTER_ACCOUNTINFO *ai, GWEN_XMLNODE *doc) { GWEN_XMLNODE *n; n=GWEN_XMLNode_FindFirstTag(doc, "SG4", 0, 0); while (n) { GWEN_XMLNODE *nn; nn=GWEN_XMLNode_GetNodeByXPath(n, "LIN/PF:D_0805", GWEN_PATH_FLAGS_NAMEMUSTEXIST); if (nn) { const char *s; s=GWEN_XMLNode_GetProperty(nn, "Value", 0); if (s && strcasecmp(s, "LEN")==0) { GWEN_XMLNODE *nnn; GWEN_DATE *dt=0; AB_VALUE *val=0; /* read time */ nnn=GWEN_XMLNode_GetNodeByXPath(n, "SG5/DTM", GWEN_PATH_FLAGS_NAMEMUSTEXIST); if (nnn) dt=AB_ImExporterYN__ReadDate(ie, nnn, 202); /* read value */ nnn=GWEN_XMLNode_GetNodeByXPath(n, "SG5/MOA", GWEN_PATH_FLAGS_NAMEMUSTEXIST); if (nnn) val=AB_ImExporterYN__ReadValue(ie, nnn, 343); if (val) { AB_BALANCE *bal; AB_Value_SetCurrency(val, AB_ImExporterAccountInfo_GetCurrency(ai)); bal=AB_Balance_new(); AB_Balance_SetType(bal, AB_Balance_TypeBooked); AB_Balance_SetDate(bal, dt); AB_Balance_SetValue(bal, val); AB_ImExporterAccountInfo_AddBalance(ai, bal); } AB_Value_free(val); GWEN_Date_free(dt); } } n=GWEN_XMLNode_FindNextTag(n, "SG4", 0, 0); } return 0; } int AB_ImExporterYN_Import(AB_IMEXPORTER *ie, AB_IMEXPORTER_CONTEXT *ctx, GWEN_SYNCIO *sio, GWEN_DB_NODE *params) { AB_IMEXPORTER_YELLOWNET *ieh; //GWEN_DB_NODE *dbSubParams; GWEN_XMLNODE *doc; GWEN_XMLNODE *node; int rv; GWEN_XML_CONTEXT *ctxml; assert(ie); ieh=GWEN_INHERIT_GETDATA(AB_IMEXPORTER, AB_IMEXPORTER_YELLOWNET, ie); assert(ieh); // dbSubParams=GWEN_DB_GetGroup(params, GWEN_PATH_FLAGS_NAMEMUSTEXIST, // "params"); doc=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "root"); ctxml=GWEN_XmlCtxStore_new(doc, GWEN_XML_FLAGS_HANDLE_HEADERS); rv=GWEN_XMLContext_ReadFromIo(ctxml, sio); GWEN_XmlCtx_free(ctxml); if (rv) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Could not parse XML stream (%d)", rv); GWEN_XMLNode_free(doc); return GWEN_ERROR_BAD_DATA; } node=GWEN_XMLNode_FindFirstTag(doc, "IC", 0, 0); if (node==NULL) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Document does not contain element \"IC\""); GWEN_XMLNode_Dump(doc, 2); GWEN_XMLNode_free(doc); return GWEN_ERROR_BAD_DATA; } node=GWEN_XMLNode_FindFirstTag(node, "KONAUS", 0, 0); while (node) { AB_IMEXPORTER_ACCOUNTINFO *ai; ai=AB_ImExporterYN__ReadAccountInfo(ie, ctx, node); assert(ai); rv=AB_ImExporterYN__ReadAccountStatus(ie, ai, node); if (rv==0) rv=AB_ImExporterYN__ReadTransactions(ie, ai, node); if (rv) { AB_ImExporterAccountInfo_free(ai); GWEN_XMLNode_free(doc); return rv; } AB_ImExporterContext_AddAccountInfo(ctx, ai); node=GWEN_XMLNode_FindNextTag(node, "KONAUS", 0, 0); } GWEN_XMLNode_free(doc); 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, "**", 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; } aqbanking-6.6.1/src/libs/plugins/imexporters/yellownet/yellownet_p.h0000664000175000017500000000440514043610745022727 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AQHBCI_IMEX_YN_P_H #define AQHBCI_IMEX_YN_P_H #include "yellownet.h" #include #include typedef struct AB_IMEXPORTER_YELLOWNET AB_IMEXPORTER_YELLOWNET; struct AB_IMEXPORTER_YELLOWNET { int dummy; }; static void GWENHYWFAR_CB AB_ImExporterYN_FreeData(void *bp, void *p); static int AB_ImExporterYN_Import(AB_IMEXPORTER *ie, AB_IMEXPORTER_CONTEXT *ctx, GWEN_SYNCIO *sio, GWEN_DB_NODE *params); static int AB_ImExporterYN_CheckFile(AB_IMEXPORTER *ie, const char *fname); static AB_VALUE *AB_ImExporterYN__ReadValue(AB_IMEXPORTER *ie, GWEN_XMLNODE *node, int value); static GWEN_DATE *AB_ImExporterYN__ReadDate(AB_IMEXPORTER *ie, GWEN_XMLNODE *node, int value); static AB_IMEXPORTER_ACCOUNTINFO *AB_ImExporterYN__ReadAccountInfo(AB_IMEXPORTER *ie, AB_IMEXPORTER_CONTEXT *ctx, GWEN_XMLNODE *doc); static AB_TRANSACTION *AB_ImExporterYN__ReadLNE_LNS(AB_IMEXPORTER *ie, AB_IMEXPORTER_ACCOUNTINFO *ai, GWEN_XMLNODE *node); static int AB_ImExporterYN__ReadTransactions(AB_IMEXPORTER *ie, AB_IMEXPORTER_ACCOUNTINFO *ai, GWEN_XMLNODE *doc); static int AB_ImExporterYN__ReadAccountStatus(AB_IMEXPORTER *ie, AB_IMEXPORTER_ACCOUNTINFO *ai, GWEN_XMLNODE *doc); #endif /* AQHBCI_IMEX_YN_P_H */ aqbanking-6.6.1/src/libs/plugins/imexporters/yellownet/yellownet.xml.in0000664000175000017500000000045414043610745023366 00000000000000 @AQBANKING_VERSION_STRING@ Martin Preuss(martin@libchipcard.de) YellowNet XML Data This plugin imports YellowNet XML files. aqbanking-6.6.1/src/libs/plugins/bankinfo/0000755000175000017500000000000015037736161015461 500000000000000aqbanking-6.6.1/src/libs/plugins/bankinfo/de/0000755000175000017500000000000015037736161016051 500000000000000aqbanking-6.6.1/src/libs/plugins/bankinfo/de/de.h0000664000175000017500000000116114043610745016526 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AQBANKING_BANKINFO_DE_H #define AQBANKING_BANKINFO_DE_H #include AB_BANKINFO_PLUGIN *AB_BankInfoPluginDE_new(AB_BANKING *ab); #endif aqbanking-6.6.1/src/libs/plugins/bankinfo/de/de.xml.in0000664000175000017500000000044014043610745017503 00000000000000 @AQBANKING_VERSION_STRING@ Martin Preuss(martin@libchipcard.de) Bank info checker for Germany This plugin handles German banks and accounts. aqbanking-6.6.1/src/libs/plugins/bankinfo/de/Makefile.am0000664000175000017500000000135214043610745020023 00000000000000AM_CPPFLAGS = -I$(top_srcdir)/src/libs \ -I$(top_builddir)/src/libs \ $(gwenhywfar_includes) AM_CFLAGS=-DBUILDING_AQBANKING @visibility_cflags@ noinst_HEADERS=de.h bankinfoplugindir = $(aqbanking_plugindir)/bankinfo noinst_LTLIBRARIES=libbankinfo_de.la bankinfoplugin_DATA=de.xml libbankinfo_de_la_SOURCES=de.c libbankinfo_de_la_LIBADD= ../generic/libbankinfo_generic.la sources: for f in $(libbankinfo_de_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for f in $(bankinfoplugin_DATA); do \ echo $(subdir)/$$f >>$(top_srcdir)/pdsources; \ done cppcheck: for f in $(libbankinfo_de_la_SOURCES); do \ cppcheck --force $$f ; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done aqbanking-6.6.1/src/libs/plugins/bankinfo/de/de.c0000664000175000017500000000150314043610745016521 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "de.h" #include "../generic/generic_l.h" #include #include AB_BANKINFO_PLUGIN *AB_BankInfoPluginDE_new(AB_BANKING *ab) { AB_BANKINFO_PLUGIN *bip; bip=AB_BankInfoPluginGENERIC_new(ab, "de"); if (bip==NULL) { DBG_INFO(AQBANKING_LOGDOMAIN, "here"); return NULL; } return bip; } aqbanking-6.6.1/src/libs/plugins/bankinfo/de/Makefile.in0000644000175000017500000006271215037736026020046 00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/libs/plugins/bankinfo/de ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/distri.m4 $(top_srcdir)/m4/gwenhywfar.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/os.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = de.xml CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libbankinfo_de_la_DEPENDENCIES = ../generic/libbankinfo_generic.la am_libbankinfo_de_la_OBJECTS = de.lo libbankinfo_de_la_OBJECTS = $(am_libbankinfo_de_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/de.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libbankinfo_de_la_SOURCES) DIST_SOURCES = $(libbankinfo_de_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(bankinfoplugindir)" DATA = $(bankinfoplugin_DATA) HEADERS = $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/de.xml.in \ $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADD_ACLOCAL_FLAGS = @ADD_ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AQBANKING_CLI_VERSION_STRING = @AQBANKING_CLI_VERSION_STRING@ AQBANKING_FINTS_VERSION_STRING = @AQBANKING_FINTS_VERSION_STRING@ AQBANKING_SO_AGE = @AQBANKING_SO_AGE@ AQBANKING_SO_CURRENT = @AQBANKING_SO_CURRENT@ AQBANKING_SO_EFFECTIVE = @AQBANKING_SO_EFFECTIVE@ AQBANKING_SO_REVISION = @AQBANKING_SO_REVISION@ AQBANKING_VERSION_BUILD = @AQBANKING_VERSION_BUILD@ AQBANKING_VERSION_FULL_STRING = @AQBANKING_VERSION_FULL_STRING@ AQBANKING_VERSION_MAJOR = @AQBANKING_VERSION_MAJOR@ AQBANKING_VERSION_MINOR = @AQBANKING_VERSION_MINOR@ AQBANKING_VERSION_PATCHLEVEL = @AQBANKING_VERSION_PATCHLEVEL@ AQBANKING_VERSION_RELEASE_STRING = @AQBANKING_VERSION_RELEASE_STRING@ AQBANKING_VERSION_STRING = @AQBANKING_VERSION_STRING@ AQBANKING_VERSION_TAG = @AQBANKING_VERSION_TAG@ AQEBICS_CFLAGS = @AQEBICS_CFLAGS@ AQEBICS_LIBS = @AQEBICS_LIBS@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATETIME = @DATETIME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_EXCLUDE_PATTERNS = @DOXYGEN_EXCLUDE_PATTERNS@ DOXYGEN_FILE_PATTERNS = @DOXYGEN_FILE_PATTERNS@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENGUI_GTK2_CFLAGS = @GWENGUI_GTK2_CFLAGS@ GWENGUI_GTK2_LIBS = @GWENGUI_GTK2_LIBS@ GWENHYWFAR_MINIMUM_VERSION = @GWENHYWFAR_MINIMUM_VERSION@ HAVE_GWENGUI_GTK2 = @HAVE_GWENGUI_GTK2@ HAVE_I18N = @HAVE_I18N@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIBXSLT_CFLAGS = @LIBXSLT_CFLAGS@ LIBXSLT_LIBS = @LIBXSLT_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_SUPPORTS_QT = @MSGFMT_SUPPORTS_QT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ TUTORIALS = @TUTORIALS@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XMLMERGE = @XMLMERGE@ XMLSEC_CFLAGS = @XMLSEC_CFLAGS@ XMLSEC_LIBS = @XMLSEC_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ aqbanking_backends = @aqbanking_backends@ aqbanking_cfg_searchdir = @aqbanking_cfg_searchdir@ aqbanking_data_searchdir = @aqbanking_data_searchdir@ aqbanking_headerdir = @aqbanking_headerdir@ aqbanking_headerdir_am = @aqbanking_headerdir_am@ aqbanking_includes = @aqbanking_includes@ aqbanking_internal_libs = @aqbanking_internal_libs@ aqbanking_ldflags = @aqbanking_ldflags@ aqbanking_libs = @aqbanking_libs@ aqbanking_locale_searchdir = @aqbanking_locale_searchdir@ aqbanking_modules = @aqbanking_modules@ aqbanking_pkgdatadir = @aqbanking_pkgdatadir@ aqbanking_plugin_searchdir = @aqbanking_plugin_searchdir@ aqbanking_plugindir = @aqbanking_plugindir@ aqbanking_plugins_backends_dirs = @aqbanking_plugins_backends_dirs@ aqbanking_plugins_backends_libs = @aqbanking_plugins_backends_libs@ aqbanking_plugins_bankinfo_dirs = @aqbanking_plugins_bankinfo_dirs@ aqbanking_plugins_bankinfo_libs = @aqbanking_plugins_bankinfo_libs@ aqbanking_plugins_imexporters_dirs = @aqbanking_plugins_imexporters_dirs@ aqbanking_plugins_imexporters_libs = @aqbanking_plugins_imexporters_libs@ aqbanking_plugins_parsers_dirs = @aqbanking_plugins_parsers_dirs@ aqbanking_symlinkdir = @aqbanking_symlinkdir@ aqbanking_sys_is_windows = @aqbanking_sys_is_windows@ aqbankingpp_modules = @aqbankingpp_modules@ aqebics_datadir = @aqebics_datadir@ aqebics_includes = @aqebics_includes@ aqebics_internal_libs = @aqebics_internal_libs@ aqebics_ldflags = @aqebics_ldflags@ aqebics_libs = @aqebics_libs@ aqfints_datadir = @aqfints_datadir@ aqhbci_datadir = @aqhbci_datadir@ aqhbci_includes = @aqhbci_includes@ aqhbci_internal_libs = @aqhbci_internal_libs@ aqhbci_ldflags = @aqhbci_ldflags@ aqhbci_libs = @aqhbci_libs@ aqofxconnect_includes = @aqofxconnect_includes@ aqofxconnect_internal_libs = @aqofxconnect_internal_libs@ aqofxconnect_libs = @aqofxconnect_libs@ aqpaypal_includes = @aqpaypal_includes@ aqpaypal_internal_libs = @aqpaypal_internal_libs@ aqpaypal_libs = @aqpaypal_libs@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gmp_libs = @gmp_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_dir = @gwenhywfar_dir@ gwenhywfar_has_crypt = @gwenhywfar_has_crypt@ gwenhywfar_headers = @gwenhywfar_headers@ gwenhywfar_includes = @gwenhywfar_includes@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_plugins = @gwenhywfar_plugins@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ typemaker2_exe = @typemaker2_exe@ visibility_cflags = @visibility_cflags@ with_aqebics = @with_aqebics@ with_aqhbci = @with_aqhbci@ AM_CPPFLAGS = -I$(top_srcdir)/src/libs \ -I$(top_builddir)/src/libs \ $(gwenhywfar_includes) AM_CFLAGS = -DBUILDING_AQBANKING @visibility_cflags@ noinst_HEADERS = de.h bankinfoplugindir = $(aqbanking_plugindir)/bankinfo noinst_LTLIBRARIES = libbankinfo_de.la bankinfoplugin_DATA = de.xml libbankinfo_de_la_SOURCES = de.c libbankinfo_de_la_LIBADD = ../generic/libbankinfo_generic.la all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libs/plugins/bankinfo/de/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libs/plugins/bankinfo/de/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): de.xml: $(top_builddir)/config.status $(srcdir)/de.xml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libbankinfo_de.la: $(libbankinfo_de_la_OBJECTS) $(libbankinfo_de_la_DEPENDENCIES) $(EXTRA_libbankinfo_de_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libbankinfo_de_la_OBJECTS) $(libbankinfo_de_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/de.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-bankinfopluginDATA: $(bankinfoplugin_DATA) @$(NORMAL_INSTALL) @list='$(bankinfoplugin_DATA)'; test -n "$(bankinfoplugindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bankinfoplugindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bankinfoplugindir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(bankinfoplugindir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(bankinfoplugindir)" || exit $$?; \ done uninstall-bankinfopluginDATA: @$(NORMAL_UNINSTALL) @list='$(bankinfoplugin_DATA)'; test -n "$(bankinfoplugindir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(bankinfoplugindir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(bankinfoplugindir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/de.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-bankinfopluginDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/de.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-bankinfopluginDATA .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-generic clean-libtool clean-noinstLTLIBRARIES \ cscopelist-am ctags ctags-am distclean distclean-compile \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-bankinfopluginDATA install-data install-data-am \ install-dvi install-dvi-am install-exec install-exec-am \ install-html install-html-am install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-bankinfopluginDATA .PRECIOUS: Makefile sources: for f in $(libbankinfo_de_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for f in $(bankinfoplugin_DATA); do \ echo $(subdir)/$$f >>$(top_srcdir)/pdsources; \ done cppcheck: for f in $(libbankinfo_de_la_SOURCES); do \ cppcheck --force $$f ; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: aqbanking-6.6.1/src/libs/plugins/bankinfo/generic/0000755000175000017500000000000015037736161017075 500000000000000aqbanking-6.6.1/src/libs/plugins/bankinfo/generic/de.tar.bz20000664000175000017500000142213414576131066020622 00000000000000BZh91AY&SYX*½ĥ˙„ü°Z˙â?˙˙ò˙˙úbEŜ}tbŬÁ÷š*<٤ٝœnâ%hċÈ UJ*BŞ˘ˆŞ”;x>@@}Ph(ÖŞ€Ħ (€@R€ [H HiAĥ|%ÄûîŜx 6ĦmfY•“3 çzïQo½ÄIžÀçŜîgOŻ{­ĠĴħ 7Vî6ݍ×nú½çĥnùŬR½-ĥÊĥÔÖÉ]Ù"´É+H½ô ”’İ= …IIPU_^{>Áš0Q{h…ğœiAEB @ Il`Uì15Û(êĵÍÂÛ(6Ê)J1ĥb Z*ĉİĠ™NŸn5ŠĦ¤À ìÔÛ$·ŜïAá6f $9ۍ :ÊíÎßwzñĜh½Ŭ²9öşÓ Ü;6iَß}t^íâ´O´ ĞÖşôë÷hġĉv{œ›z·eşŬŽÛëWMÒwJ’µ}Ŝö‹iëï<¸4ósríĦ3¸ äQöğl*û öhP˘û²2:cĈĜS=:W 3;ÙĠ4ÑlŜğŒ½uÛmÊğž÷ƒ úñŜf ´[sğĴ˜­5k·;CÖŬŬïníĤ³¸ÊÊJ"i½cÓîÄ=ۊ۽½U÷à:êdÛ܃E3wu—½’ĦsGŻvô/uĜ‰%ĥî†ĠŬ;ĉÛۊ‹C/O^š%o€Ŝ  ”úġŬ”Ş[¨ĉŜÖbVĈ‘wÙÓèFĠ† Š{ö{ëyÚĈûʤMm0Ŝ(š•ôû·@é  „;í÷µí’šĈ§½oW™ôs´úÏYè³ï·‚;W³§À>€İžà2öÛ İZ Iïí‚{ï¸ôëħı]z=ë7½Vâös×;hmċŜöáèW‡Ò P({ïCŬEí£@}K5˘Ño^ò>ġo%îêŬġÏUşĠÛ^™ÚŬÍ]V£î7L[ÀQĥ) ™÷nNUöVo{îfö•í¤Ù§ÏnïséäzœíËĉŠH\@7I{2úµT-u¤öûµ>ğ骆°şgÖŽïqéċO§ {}ßCßEP”€Ħ@|LŒ„V6ёŞÑĦmݵ톴Mš2Ĉe’µF< ƒ_J£@´WŬqŒï1˘ÁÈúŞ MUUiĵú}ı(PR óÈ>óïŒm‚÷Ì·ċ#½àšVZÈ*¨ïòÎôP}|·<”%ZhšRH˘}ĝûÏ{Ô×Â9Nàxòû /›²ùè)@Ş éÇlğÏŬç½{{yÌouÙaŞÎî:¤Œ›0ÄÈMš4ËÀ>îÜSé )˘€PM(+‹\óßAĥ4 F¨1ĥÚĴPÛ*hĤ‚•ŞÒ ‰*4Ì2k  ˜Ìc4ĠaSF!l)ˆM5Ħ­ğwf–"*VTĥ)Û’ §à)TĤ$ô4 Ĥš4iê €@$ĠI½Qê~Ĥ ÓG¨4§˜”Şa4†šFš4M( A$˜Êhd†jzš1DˆSÓ@€DÁ “E£ ˆôĦ4B 2e4Êa5=M4ÑĤ§¨Ú£O$ŭ)Ĥ€44˙Ñ˙O˙Ÿŝ?#Ӏ¸Î"Ğġˆ+ĝĦûóĵ˙ożNıŸä ÄAí_ÎUW ccŠúXKZm/ŭ`3;Xże ‡üME0óiX ÌB§û“§h1Ùĥ,'1£ûŠäÜŞÖĝh˜| ° ›Š‡B…îvŞ.ĠWTżiž`DûP](R•İLaµr@  [ÖCx‚Z]&UĈè(` @iu ™‘ÁˆWBò…²HÙwi†LÎĦ9“0[Œb3ž7ÇYäB92P:2'%Ë' ,¸,ÉANJñ-òrş×9Ûv C´+× 9‹¸ĴğğğğğğğğğğğğğğğğğˆˆˆˆuUUXhˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆŽ8ä^ĥâ¤ÊÀh¨ä!š›ï‚€ Ç(E,J`£F£<˜3m\À˜@Íîi81Í`&\jU­!½5VÈr]U/Í³c‚9 AwjF/`wœB[(LM‘7#Gœó@é$;°´ċ–nÜĦ . oyƒ“gc`NÖömW­“‚™C@3Ì(ê>µ„6lvtLC’ĉÁ›Ö½žMáPĤĈĊÔċp.‰f•,rv3ħĵè d½mÖÛZÍo7½k\F!.™ĴsvœÛ¸‘&2:mNñéÙĦ:8)ÑA§Ŝgd& —$lš ‡%‡!ĤÍÎĥ ÙO@p ÑÀàufĈÈ8…áfSŽ ,Ĵ8˘ċ–ÛVàéÈE\0V.&Ž0·xyZ§zÛ¸@’KLçy/ĵ.(K—2] €™â¸t†vè`„œ‚k7“.NNH@Q†à…½Í´ĴÒL4nkèÀ³!eHYh€ÌĊˆ*Êĉ ħÑaAÉħ½‰ÒöœİÖò–)x°ÙáĞĈ†IäÂál·€çf7ä&MrœQk&ZS#B^ıÎ.IœaLkŽ[ÔU‘Hь%ĠcĈvĤjx*Ô;ÂÄŜĥ^T’M”2]²As„%Ù&L\ÁA“Dán@äP)P(R EÖCÖeŬŬŬÓ  İCğ=Ŭ] ,F BıXƒe˜)Ù,ĝ„”ĥE0¤™uœİs‰B†ˆrà•;“E)c‘ċ“‚Mı‚Ę6Iħ¸Ŝdx‚´\ĦÀh ,Âd·zw8ëÒֆ¨Ñ£VlÁƒ@i֍ì 3tì 6YÈXVñ Ŝ@é ͚ *‚Á€èáq(Á§:ċ·†r—N kS•‹ñvo²ì\”–tLVVX½QÖ8\$M'3SPàÙ[Èĉ0ìlÙKœ•rAğr‚P)d0`\ݵ,oƒ^™sÁ6hç9 ¤ ›%“ÀqßÙ+€°QX s½Ĝl³İǢRBž;nġŒELh %:N“-Ż <-Ê7ÊT:‚\;Ä ĵĴvĉ³×;nîíĜÀ6dDj³ğĞ´@´êÁu­kZşËğ³a`­ €@‰ "HFv˜›ğğğ³dğğ(„E F2Bċµĵ:Cş(1”xŽJƒ0Â9§ –p…ÌĦZĈ825ɐi Ħ#{¤‘Ĝ.àI5|ċ98mĉƒAÉÁÍjh^Àȝ5˘'P ¤­ġ“¤m:!ÀŜó´Èc§M ĉ´1 Â6¤\¸ŜtXc4[\PÄċ›ĵ\ œ&ïÁŽY {–5e0%ˆnĝx$áÒ@E(ÖC*<^ÀA‘xdĊ'·†Méwj™Í 0šŒËZ ³CAGg‰b·(âì(­vÈB–ĈqRèıE²qfÇhŜ6 +µ ÛNíHˆžS9ĴNÀ=êŜ„賐È<ĵ—ÌÂH“œêÁĴ*ۅN<Ĉ€"›BËíÎhÊE*gE›!“ĵ`§jdp2l6DZ&Ċ šîl(/8Н†„L€oŠÂ‘‘‡ p„Ħ–‹NŒĠYyUUUUUUUUU—uS3s7UUUUS336Z9ˆd!`œX/h˘yMEÌ1t‡­Tgœ.pÒQ&Ê8.àĦ$ْÙ*J,p-£N ”Q­K‰§‚‹„²p`˜z0hÒ7ŒÑg´d4::-ÙFKfF ;!­LÖô‰ÔpħĜːÌÊfӗ°ŞDŽĞ$T3°6´´Z— [h€”İNY6!N)Lmx-ŽĈP1Ĝp†ÀàXC¨İÚ—#Ĝ]%ĤÍ íJ…ÄNŭtƒCÇoNÄ E ÖñµMˆPaKÂğ ÜÜmÌ iÄ-† rU/vDlh[››.AÁH]‚9z"[‡™pW@ôRT‰&YŜ-$8p`8(Ĝ@áEÉ$… ™8–št”Ŝ‘)3jö˜ƒJ`G) ScdQ‚‹˜°J'„dږZi 8Ŭm-VNÛċħp°Ħ• àBĊÀÂQ lr™ *hàŽ]R’f@ĠùäBʙċ Ùw  L)N8KıÁ#Ċ”lh‘È—œß!lhp9ħÜZ/@„°+Hì ²W=QİBEÂÒÂ&…1…[o;Œçq\rž*Îà1[XnÒu˙ħj1c­„$IÑ(P+p80TÀh0ŠOšmžQF,{FüEÈuN/{UÁ@Ñk(İȧ72E Ü(œ jÑ²ŠœŠs“$P½´C½Ò~ $œ`Ùċ cŻ:İ‘USr$Ò7Ĵ;v€|AUϽĊXG[>z!Á5vE•’S ż" 0ìû6ĉġ£‚ZÊñ:ÏÀ“d &„­G%ĊäT€Ĝ>vhÀ€Ÿ×y…Oà˘[ô²BŸ²²Ahí GíTHu¤Ž0cvRú)U·Î3ôğĠu=֘$ùZĵÔâ0N$`iû@ • “ çË <^šEž—4R‰-éR'qì…Ŭ€á-s:a`ÉDÛa ‰- /U@ ËP/İ6¸Bœtäo S¨#dħŠb5ğŸ%t‹Ä.­£ITĠhTSìsÊĥ‹ÓQbJ}ŽÄgĞJƒÏŞ‚ë„ĉ˘l„Ċœħh͢#ĉÌòz̨€# n_i§İ3€ÍNÔŻl:§ì—„µyŭuTމ–ÔÑİÎÔÄiŻŽŒFĵäp ċքyg.0-!"˘ “˘&3x1!½ Ŭu|'ÁF‚>$ BÉ µ%ê×6W:€6[.ì‡g—Ž›â%:WĦ@é-’MĦ:_şâKR‘7kf¤=r~#ÂcDúŝn£°Ì5ı—C_ŽÙAû’B“Vìl:ƒŞ‰í8Ïm70^Y¤È:\ĤŻRDhĞzQ/l2â#] h §h<ÑÙÀ€RCÖEh½àjĞġÒëèúAJÒÒ&ċĤ™éÛdyŻŻÏğì0c<A@•qBëVÈey˘”(`•³uËĊˆž~ö̑x6<>­ZXÌz¨*{˜i1Ĵ(énÈ# yu¸YÔÀŻkÔşG8úÌJćÄAÛSVà ot•ÜĠhv6Â䌂û-èהGž§ˆnLQÄl[’¸ÄžĈb\.†ŜfDÑW¸6‰:ĊX€#A‹náòîzlÑş|Ö2ÒÔ;D§ĥŠ=éjŞOĊӘD*Ï"F,ıìÉ÷ÊWd”— ĉŜ‚ûgéñNßÀ Ğà ĜÀ7ĵ=*8ù˜4èI ="Ċ£ħ0Í’u 6ÇËם]ĠàPŻ>[-Ö<ĝ *HUN<€‘Ğï_ìÈĉôêÀÀXŽW—ßÚŭZ*‰M™PÀhÓÂä–ĞÜX‰ċÖË@"FÊqħ·fJóœù‹h} 9j^Jµ˘ƒşÂ⒘Eè@•¸—¨, ìÂ;m’òœ+c1‚ĊÈĈQPŻT’cy}ĥğĠaĦĜ™ É*ô°EğMˆD·X18^;lî$i+ÓĜcš›’µÍ#-\ŜމŸ+Ú5wƒhżX Èĝ“ı–ù'pÌÒ¸=£wĈ!PêtÏ9›wÍg+ˆÎuŽĠB8Üh҇ĉñrğĦÚĜ™è–Uû-vğ|½MV%@ßħô@"Pħd@Ícĥ.MjQaċ†D<³&'ĉš_œĦƒ[E".ùŞóĈ,Rœ›³§„ş6i€ú§Ò éë=Gn[@Ĵïœ\ĵÎy kÂÑÔ…¤ÁèÏ*ĵeŸH3€›\Ŝ €›k…]{œDd ËŻRÄÖëğ!ħŻ›ŬhT`ü­jzÙ62~K@')‚-%‹B.”˘>Ñ'µ68¤)˜ìT ?f]²bc™²g‰@ŬD“m´ÁÌbLĝİ;OĊ‚…Mö˘3j˘G8-}ğûˆĜˆĠğ˜sjàK 9ˆ+ħ….Ä„r= ĦMħ†Fh-JWrğΔ&QfÍ\/Oc7H4­!cl2lĤÀNġġV-‘èöÀ¤Lۖ3dç$Y ƒĠE&zZštĞH·Ĉ:{iŒ]Ş7Òâ1t44HRóċ‹óqGB–ìǙ ´!üÀuo?WKè&*×‹rDjíĉÍolMì„!gžĜ_Ñ>eáÈo QŻ‹6&ڕ-ó²ŞĝáoVÎOkî½7ÍĴǽ°2ĉ†ĉŝÇg ‰œÙ´6Ĝĝġˆç{/A@ñI£ħ?$ħG@죀-Ĵ𖵁Ëè.03ÒZóNÙMqd”•Ŭ!ƒ†Ú”¸[G:WìÊä?>qÒ²ĝî<Ĉˆ µÓQ!;Û];î’ j•™Ž àV 5Z^èÒËġ‰§•RİxC”Ä͟_SD‰ÄĈi‰#8BÙ"X2[|>'ò™Ö(lĝŭÖûÉ/,ĝ˙4ë}³ŞÂc;¨?#}1‘•™Ü§ÎGrEš9EèÇŬügçŬ"Ŝ=¤D(V­œ#èR0ĜBJİ#Z#‰³ k2`OJ€W"BıV è$îI2q]ğ·3`Lì§kµµ4Ĝ($T\ĝ<÷Ù¨eÏdë`ħS@8i† •%·¤Jèpò¤ F5³jËĝ¸qéż&ÍL0ĜĦeé½ĵĵ‚ß‚ĝePħerµïNĤ°€ÍyHî´.ÁÏeŸu+­˜6À=}àhéƒqLċşµ3Ö ™´xŸP{À‚ qÙ½âö›c´A­­NhÀ Ï=†(˜àúÁjëH™AA=ê"÷iI\9Lğt%rb/x›ŜÜqĞùX׈„$K˘`*×½>çşf [ùcQ˙gäu"n¸of†ÂCZj”4lи΂Ĉµ9É%ĝj­5NM…œ&-è‹ÇYħÄ$Do ĴézKÜ%äu /F½›p÷ŞÑ ÈBˆ3<&…@NMœ8Ħ@C*Ħì!µE0 ëybàÄĦÖöùŽ@ú0ġmħᵂL°°¨‡}~ à´T%!}ÏwŞ(+ÀDáᅌ£òġ™Á‘ZjYxÖCowqĈ;N{¸´#­sɧڤ4,˜¤^Ž÷pb`Aét­£Ì íYìjuÉ%EtĞ,pOP+ ÑIP7„8Mr#çDx}8Žì^› ^'P· ÷xžßŬ6³ tĝTd™×0ı‘Ù…X>°ÄKö(Şs=nßI4íġ‘sffçÎÎQù½]yX0oċ ;EŜÑl`Ĥ˜lĈusĠòÇÚ×`<tRmĜħğŸl;£–½ĵ“À^ċH†KFî”T ”÷]VVmĞ Bèe"C.SĠ£ÒID×<瑚•Ġžr­÷Û:˜H$Ûċ ¸ŝ>Íwü@ĥw \èäW&—ş—Áè¨W@n’şŻ"ĝ—Ášcá3`ĉoUEŸ^°GiBµ´‡hñ*ÊÜ·Œ—Îm” ›ĠaQéı2ìÜgŸĊ7.-şÁ7ĥĠñiLˆoà³0Kí:ıÛŬ(|Y‘ÍĜ;ó°ı1£ğIĤħġQš§Fgµ<ĈŻğĵ–²\t5d½Ù.À&– xt0=a:Dİ ĉà|ÄÖFaĦ§=ĜÏĊĦğP„áħĉp3U½ġÛ-1!H5f t_‘OĈĵ]Ĥ€› € Éğâ&#mÒyèï˰[ÎÛéĥâ½=^‘nÀ ‡%ŸG 1(ÈħTÜTÄÖÈü<àÜËÚ;6”‘Ġ3…7Jˆ?*—ÀLİÄdĦU; A YWÏRĤ µÍ^ĥġ:ı‰×Ÿğ;­èħáÓȂŬÑM\Í̓rĝI³iċž5ğ=cOéġ&àxŭNĦĤnċD@óîÖĞ~aôk…{ ùoD=Żîüüˆ4İ!=6;ɘŝZSÔfœ˘Š0Uu·ÀĴfžXbN”+ £§i[( †>Ĥċ3+ˆQŞ H!x<*nV•!TıvVâmœvÛ=ż£Ş34ۃšƒAô–Òá…i(vœ˜ ż™‡šl÷•1·ş€úX™T÷tbîá#JûQ1İĉC7‡VÄ;Áá“ŭ`&‚^Qeéëíö‡Ĥ›XÔşAr8ÍÑä)—cÊ4­#Ĝ{Ĉ¤8á^şG5Ê"ßë:Ì˘.C Ğ  8fŜ³(4Ş‚d/¤ġ;Ÿ}ħZĝÛ­ĠžFϲTö) Iŝ$UA_fMp(ë?ŒYGK€&Ë LëG)މċ²öȟQ'a‹&l*ÁGkpYV‡k•„ßĊévĵ(ĉ’/ÌËwşĈ~ĴvÀ¤|¤yı£_ÚÌí!x ħŠ>Ġ% À&ÏE¤ûÚN‹èwŬžÊÍgħıíÚħŞgŠF½4#͵$âÎ1Œ-‚ë•‘ cÒtĴI,ĵ‰İÁĥüÌĠ2a†>`?ÒJDĜ†žIÜĤ&DŜé>0IX }däTġ—ˆj­× ÔÉäÖq\–lÛ ĵ}ĈdP…bYWœ |­À4İ"àÍZŠññm0ÚŸ<ğ|ϰJ žQf@U0O0-ÈÌz ş·Ş½}ì£Íìptî:„! \L=™‹ <ß=2;Q=¨5şĜ†›M_ĴğPôËdġÉúBjE˜İȰÄ8ĝDu‰ÜŠÍg3Äĉ† €¤@žBAüM7Ÿħò(ŸÛîƒÉòŠ˘CYÛúCc•½Éï šALˆ½s†Ü]YLì´BÜŬÈm¨ ĉNğL#,ÜÀlÂ2Ġğ÷ŒâÀĵB•ÏO¤ÜğZj˸áÇ.`ŸÖç˜ħäĦġbXBòşWF˘X”1%àuŜÙ™ ÔwX/[8H ¤z ˆĦˆ(D—­q|ë8Q² eIq´ü…%j†g¸ Ş­²TC”!ċ“ ä· yċ5#†°\Ï>e\3°V‹í˜&N@úcŸ„ĵĤ@ FȀ -à@.lœ›p ğÁMĦ(3‡*_iSa@D{ĈGhÑNMÚÖè69j³eܘ,nPœ¨iLdTP=ż(ÇH­ž—=mî‘ĵÄÓdĥàc€ç›ŻîÜxFjıŒĉ&jc˘”;; Š=âáû£ÉäD³-‰ëk{ï6^Ñ$QĥċÏd†h-×,vkŠŝĈB‡Z&T;DRf2cQc²JžrR–P]R‚pbgĥŬx²²ŭ†v}K…ùı9Y#pĈÙJaáyuïPño˜ŝëJşL'Mš#‹:’ZÄ £˘{GӖ%* n= ,ċe+­Y/èżĉ@°G8vÜ) mĜFÄ)/§À½À€èì“ )ö 2*HI·*÷ ”‚ŒiöşÈb`9ԉÎ úƒ#uxŽB–prJ.Â+1pŽBÖpcRA,Ĥ}Ĉ<Ċ°lĦšĵ;ġÌjGxXHo–‚ Pšâôn6ûĵ[1ï(ân Y2Îeż dŜĤÎk½ŻaßSÑ ¤dé;7ŒLXr*9ÏÊfĜ´ċâ+]% §y‚Vâ* ‰3;;àȰ˜íĠçÑ!1Úa£]ĴÖa .^½Lg;qrÉAc(ÍÄ 0òa‰ ´dîVä’cböȌÖ5§PŒĤ§ÑĴĞL(nÈxôoÔŭŻpvŻáQt 8=#Ŝ%5eHKĥĉà;=#É%5eHNTN´Äl9Üì,á˘rŭ·x@¨[ hq“ç=­.X˘ŬYİH(˜€†l.Zħ2ĞšƒH>SS"x”½ħÄ]9yOD€êè*ÌĜ |‡W í¤}IN¸¨E‚ ÛÔn4žLÙĠ˘lÌGԔğŠ„X ½FIé2ÛX @ˆ/–}Ŭ ŝw;šÌ‘ƒ ²·Ŝ&˙—òQPä(Šŭ>YÂD„B ŠFE„FĞB"ÀY F ) "(°‚@REX@ATY (XÀ"ĴYˆ‚ÀX,IE` ²" ˘AH0¤Q`£$I$T(˘1TQTb"‹$‹U‘˘#UŠ0’,а‚É‹(¤D "ŞE‘ ¨„"É!ŒaĊ˘Y#Á‘AE’ "1VIdY,ŠŒTVDH" X²E‚ÁU@F ,‚ "H°Q Ȃ˘ĞF*@F"˘X1ÈVA` (,Pc"ˆ˘˘ĊE X°X,ŒT‚ #Y0 ħħHŞ˘ ‚,„F„ŝgùÈ ˙Ŭˆˆ Ħ¤àúùé£ŭĞ˙Ä$5š’żĝ(,(?ü7”9uT]…˜À€Ħ-ŭZ˜àğ?ûPéÛ·\\ıx˙û­ë}â˙àÓ?ğ Ɂ­<êġŝÄ ˙Ġ‘Qˆ{è3mÎ-.(‘µ’&°żUYH…R£0àÀĊ˙ĵÄÀÎÍI/˙ "ĉúWËqF#ìÛşUşħQĉHŒCˆß#ħ,¤—˙Ú§Ħd“áŜ–+PDÈé([¤ä“W–ßÑşÁÈD$4 _úğ× ĥ˙ÂÀj­—ġ¸÷Äİ<×é.,˘Îy˘!MĦ„âK$Te”#3‡0 ìÛqô°Y_Û˙XĜ‰r$ÇÊö%2TÙŭú*˙èÈö° igû˙ù [!ƒ˙ŝ?ù”ŝ߈‚~Üĉ~ÛÁi£J’I „ç˙ğOÀÀ†î‚‘H, Ŭ?ß×ŭ:ɨ‰ßp%Öi"‘ED (((ú˙Ĉ@X(˘‚€ħ‰ĉ1€z² ˘Š Š( )œ!PSÓX˘Â¤¨˘ÁEEŠE‚ĊE Ħ(˘É"ƒiPQKJ1|Yç·û0×ây Ĵ€ŝĵŸ&ÔêD´(ü› @jÒ0!~ğ~dŸWOàhŝV?‰WkÁ }ġ·ëƒSşÉ”§oġWŒ'oŞ#ô‰4 ß!˙Î ò)"aQyıp‹~²ƒ1˘,T€}Ħ°‚zž R]&BÍżġ׿ç*ŬżJHVtD'ôĉOWö²ñîôC„GücËü x¨d‰öïˆĦa˙“ŭ­‹[/ñ9'ü—\qéÁñXı˙HXˆ#UDCÂI|ġœúQBCú6aŭê°Uüħb˘,QHħEŠ„ßô_ÂÍÛü ŸRp>~}°tĞ?HħoîR<ĵïà~ÜT‘d^f½OŜÊk‰= ESïúmlíWäydŠBÄô`?ò"ĊÈ …ì‡gù\‹ƒàĜH è™tA(rHòoÖ|‚Ĉ­ƒ‚jJ…ê˙C„-{ƒ=V‘ü !†Hü 1÷ 6†mÓĝVMÔ›ÊŞ‹óĝŭ¤‡¤ Cİîùŝħ‡żè›˙wÏó›ŝ߅éV(Ş— ò>yİúzóS”ħI˘,a!ÛÏçî275……2‰c‰ŝE,Ŝ6à);=‹²%ÊȤ.—ĝèdtNöJħ,XĞ ²1X",R*ħ0 ‰ !B'ş&aŝÄ6/ĊځHCĵ͒ÂÀXBEH„=Ó,Ċħĥ ‹ Ô ‘LáYçë‘kI°ñ§jv†‹V"r5, ĝ=ŠSì„~£}ÁÙĜí£şÀü·‹Çċŝ1Ñ0hGĤ­RÂÉì òzOƒg\4äO@!?žÉç?ÀÁ° ìşBz½@ ĝ²·˙+/  Ró4IüĴÇíúj­|y·_ÁÄNá?„T\?U”vP°*€žÂ ì ù‡÷Á Ä, Ğ˘,0D‚Ş!YF `‚°‚A€°EHĞTV2Ċ„‘BE"Ĵ‹"‚é>›(KĜaıAd Óôrh ğQ )Ħİ”Daı(’3,  ’ħTÁB`ÄKHĦDl¤‰Q²*‘JRU$,¨,ĦiA-Ĉ ĉP CĥHH*…AEI”" ?̉ŝ_çŝ˃˙Ĝ?ÔPhH$4(ÔPĜĦħCb†TL¨˜Q0˘]ĥú  Ĉ£—AV ‡0E@PMˆ˙˜Ĉ0˙íô?/ê|öcFf! Ì\Ghv™:˙l_§—ĤÀäŻ;qğë{Ö?7Ž·Ï›Îù½´·x µQ\Ċ3ùAä\Dq.LwCmi?¤ÊôÀìçÌ`m“ñpy„¨Ôçyù?ÇÏ·gÖ~™—éó>·Ŭ}/>??ßŝŸéŝżï˙wù˙¤DDDDDDDDDDDDDDDDDDDCŞÄD\ŬŬŬŬŬŬŬŬŬŬŬŬŬŬŬŬŬŬŬ’‘:‹pGÇ ĝòŻx/¤Œ$÷üİüb(ùEûj‘{Ϥ$Ê+q;Äıç0ĵü!!ĝCÎ>°öD?í?XĝžSÎ?)úG¤ŭñtŸâ“ú|v˙‹üßéÓ:g˙wĈpӖpÊÀéì„×Ë<—údôñŸäž“öHC§·§”h(eċ˘‹ûs|H‹ġ!Ô ŻP="ž"‘=çҍyDÜ=%ÎĦSS´ïç="gŞWçÎ~“ßĊœ|§Ç÷˜Ïĥ·ÓC÷?rqû…–’F$‰É$’AV(*˙’­ŝĵċÁlĊ†-Ċ„ÄfħĴqZ ĵÓċi‰Œc Ĉé ûµ*ކފWbi³Ê}Ú@À×_ްĦŠRdHĊ\s5ÛĴe²²½şİ„…sKPÁŽ‘'*$,ÌĊ)ÂRC¨AsqZÄ%v  °X]XFPĥ¸Ç'5İÊ`³ˆ0d9Ĥ’5”5ÇaÔê#PçhSÄ+bÌΨµ‚a*H‹‰”µÈ‰‡ ĵ*Š\íÄ †D4­ċ]SĜJF'UÀ΀Ž4q`9áz͕ĈŽFµAÚ/D“9ċñ36ô™"D+*È ™eeDä½a8ĵĤµÛwöÜ,²¨g­w QÜıÑIÔÔM#QDH\CŒċ:‰#uLV8iŽĥ™$À¸‰ˆƒ™ù+E5š¨e³l@4žj *lĝhh€ċÂ$¤\U£—ScÊefó­ï—­VÉ\Ŝ¨‘‘^g8ÎDŜb˘e B·gG](ôñċÎï0\JW]ġŒ…ï›&Ĉ/hËnuÎfóTˆœS(‰xyysj¸DìêʰÙ2ŞŒŻ- €ŜÔLħTTÀS™gi’Şftˆtç n³FÓ76XÌ <ÈB ŻĞ2d3 —a"j³.p’h3U8*FVˆ‡Xvgl‘HŒeK77vÎl‚jaĉbU° À" HU‘y“ŞŞĞwwwwwwwwwwwwwwwwwwvAŒ‡ŝ˙ùÁ˜ïLÚtŻħ\ĉaĥ‰„3îܚrċ̓"˜Cge#0FòìqÎòÏ‘Ëşğş‹JZ:çžu2šêóŠL%E&ŬĤuŻ2Ħqp½™ÙèÁoĊNÍlŒ³|/<1˘bÙİŒPĈeú„ €…!!@”€ñKçʇIˆF (ÈX ]zİ+—QEVÉ`•Bfi’Y€a\àˆ8€âœĉĊ7&ò˜yş8.A‰RĜ‚ƒÎeÈĤ`  \ ŞÒ/@HĦF иÌßFn¸œLœ‹ħu’‹ZUNLìêuфCL–Ċ0*PĥP<ĊÙ ‘4a.Y5‚×0ى˘¸ ˘oPĵnŻ(µ²E=4İRYZ Pt‡t˘ÌE@0’(ä=Ë,Ŝ8bí-ÙԅñçMôbú/š£;0dÚçswyÍÒuљ“˘˜¸9È:QÄÒg¤ëf.ᒳ­‘7 ê‰28.G:kÎ7²qWB;°ıEƒ7 œƒJ‹‰$ @²£'g6Ħ… d–a’"%A‘T%Š{Ü1UĴœ,ç/;ĜdÑŒ%k£tš†¸òzĞ9Ŭ ĈfÖş<L"baa.ħ—ĴëeŞŜ79’HW6ÛÇIM.wL󜙘–k3\§CqHÓÂı)rnoı³“%MŽc·¨š†:,Ñѝt<4ï›ÉcNQ“%u(³£EêóÔ'VïfÌth¸6ÈhÓ+5×MâêÍŠ9³–Vï¨\ëDšedÎ0Yd8ï™/ĈcÁ]BθYI³]œ]ŽÌç›ħ2Ùx3ŽĴ¸yÜİ3áéÌ* ¤ ÔvPàÎl K Tžm•”] ı';°Âœ!0r@ƒF‚àuj8˜ÑœËÌJâ\0d„l†ïérŒ†~ D1"nĊÀ—q Ĥ(„ê Œ^['QÑ3šwPı(٨Ύo†Ĵ9ˆ  "ñ*LÑĦq6.‡'*t ̌Ŭ! ş€Ħžlê„Ŭ‰71bPu°ĉë'Z×GAÁižsĵti[6“r莀ĜVŜ³E\͝˜Ĉ éĈ‹+]` \lœħÂcš†ŽIŬ%`ç[ aċâ&zŜ&ŠhÇWŞ­îYı˘¨ĴœĉŽ–ĉKċòY™$ €,v'8€ÖJBĠĦ06wdâŽĉ¸ĵ²”6!SŞÑ4k96rñuĊ™éI$Y‚²s$tZA‚v°Hád@VvjptĥÓfÉ£pÙr˜Ċ8›<áŒè3ƒ24 AĊBĊ @I˜x1híAĠ˜8`àáP\ÜIŠ)+— #ÀqgL”ŞÒY ÀĉĴéĥĉ0hœ/d1Œ`­Ġ†èċVĉK”U6Ŝ/MuœÀËÑaĠ„pR]G­´GfLB]ÂÉÓ,Ĵ rT}tİÉŻúŝ×wŝó˙?ô8ŜĠ–Ûl/ŝ&˜ħ?ĦŝHĝï˜`Ú*SM\ıœĊD.>)Ĵ\ĜşŜuho‰L 1ÓL Y·N^È€‚Aá˙½cŝèÚ]èÓ{ğ…µ $˙ÊIRH‘L wŝ¤R"Ÿ÷èfÏüĞß@0Ĥ@˙û~żż&äŝù_öñûŠÏ?Óû½ğôŭ<˙nuçó„‰ġŭ/ŻŬûħŻĴ=˘`ŭĤOßó/ŝĝŸ×5=Ö5ü0Z˙lÛ7‹sW˙J´Qií/­ë·{.~ëİÊJĠ{ĈÇÄr·ïZċ>ĉ¨ÔŽ ä„ĉeƒwĞ}ZH·TİŸY´ŜÁߘÊ]ww盟™§œéPW/ŭ]öïGG-?—ĊşbĞĈ' ÄV´ŞĤÚĞ0hÀ×ŝ²—HkV”Ï´!›H1TšQúğ2'„ĤŒ—ŒU}/°Š"H4eD@ÉPžĤœ‚jgí[ۆ ċzù“Çh/œ<àêèÄ^Ò³lÏú§c è|Ħç}șgd,UQ-Şİ|‰T”z ÏHz˙“âYQ’µĊ–›:8„,WjimŻÈÑÇŬÙĝÀQ5?nƒƒĠ7öµo‚ĤçŒ"Žĉq$ïq›Ŭŭ“ĉ?—ŭÚħ†mìŝ?ÛĝÛĝßĝqŝ˙÷ä˙oö˙Ñŝ}ŭŻ‡Â ˙>]˙÷ô˙#úOéŭ?ĤFDDDDDDDDDDDDDDDDDDDD:ŞŞĴ4DDDDDDEŬŬŬŬŬŬŬŬŬŬŬçÏĞŝŸ„ŸîU ôċчôe/Oŭ†?­X·MŞ?PŝÌÂÑiŝïĝÄsS|h“ù>?żŬ˙gêUĤ&]ŒŝħŸü‚=TaK²ŝşĤ†@Ŭ*A•‘‹ÉI w#ûJVjç”ÊrSNô’U4ĉ-“ġħ‰”%Cħ™]Bnï Vż-ÓŭçVzĥQ:! żNˆĊ}ÄbÜZËy<êĈHmŝżâH&uPÉĴ!¸6€T@İ£ËHr ğ/ƒĞiWŭig?/"Iu*G_d,9İÔ2”œBC,üpM8td™Ÿqż„İ÷6“ŝ†AİŝT„âcG QZ•TĘP{25ıFaèÖÑÊÈŻÖÚ0úŞĵ@ĜÈÌAĤÚϗqQš@&]M#+äĤ~Ë˘€âŻ!@ÀĊ.|qe#J ѓxaÖôÒÊdĤ5üudˆa{|Ci·ŭıßw3–sĴ\\v÷oWÚLu½ôà@xò‚ÇO6J2Kó J@Â;(B„YT†RHcZ”àİJĦ>/ÉkßL–Ô°^ñ1ÛÏÊluv޵Ĵü×óž ıŸ‚˘Fħ›Ŝ’é] öîĈ‡}°â/8NvjaQ áÉ#váXŻaC]ÛüÖöÄzÚ|}nÏûmÚ>ŭà¸÷‚ùM#ş˜yÇlqĈ'³‹Ï(Ûĉ ĉ&Z >ŝ›h‘%İ„‚§²ÙŒŸ‰2wí ùéd§]9!Ñ Ò$*) + C|uŽ˜7ĉ@™ĞbĠŞÜÄĈ!zċuĥĴ.ŝš Ş'‘GnĊħš a4%”Èéuäp\„£—Œ ɝ1şsŜ&Ż §[²jfkù+˜?‘ÒBÎoëWĉk6ïÑĵi•ú4Îħ÷Ĉ†ĥ~°ġCĝ˙n~S6;·Ÿ_ĠjE[téÂç³p ‡f(ügô&Ğü¤i˙Líż £ûĤÛp*‘ÈNÈÚÙİî6‹½ˆöŞĦWQ™<‡ĝ× vżA˙fÙ`¸8šÖ7ğnžÖ6#?0B=şaË"A-Ĥ݌FTF……mÜ ÷vUY£6& 1œà흛 Uèĝ÷ıpëomo^bÛÀŝ¨Ÿ äó-ô\+D ˆÜL‰Ûs3ÎҌÂ6Ħ^2„Ÿ ÇD%$ àĜQÀ|6wÄĜx6t!D=”ÂâżÜÀáOÜ×&ZY·G•ÁLj^÷œxöÌïyÏ<댋žŝ8³‚ ÂĜĈw¸ ĤftLµ$çŒÖ ›+렍§à>q2ŞŠ6áTk*Cu†" …-JšaaP€ğ‹Ŭέċ’˜öšçN êĥ…„)|o½„ŜĞĠÁö ŒÒx÷Ż…˜sö ĥñÛù› \ÈD}_€Áï£:Meŝòˆ6vÜ?ùĈɃŜ9oT3dԍs‰ĥ(>ÑŻÓÁ†„ŜÚ/{î H­Ġ•¨53j•-ĜÖZײ£·{ĵġ 1¨Ù›YfŸĠa šˆ§İŻĴ„èa*‹ıÄfò!ŬÑzÖMBàáĞ’TÙXrcùü£Ğƒ?B>)†Ş¨ôô€âP1^\ĝŒàéš÷ڀBÄĉÜ!ȨFJ0†´˘í%²=£/MlìÁ˘[³›¸ĊVd½#-¤ S’b‡T\2"“1” |úƒƒiÚ,/éĞ?êÖL+T>IÎR \bçc +.3S nô'Œ–w°w–?Rxh!AiސÀĵ˘4gL(S(f™ú’YÌm'•}¤Œĵ[–7§=Ē™‡P‘h£Zc8|Ô²·âï4§yĊhJ„áĦ‚ÄĈŝİyŜ³¸v5‚oSeIZŜÜ+|œµ"ú[‘P ŭŭ/ ˆûb‘dĝ˙1ċÎ>JRœ9œş˜8óµœZ^`Q×RÉ&X@ċ~ ƒf{KKŝ:†3!‰PÒğD3hèFÚ4+ğI¤#t‰*pfd ÉÔöžµ ³&,¤–MĉÍşžÎÂ>ˆ6ÛÜQ% S0˘òŻ9L?żŒ˜ŝŒA4$>'­›_9”ùĞ7ġ⢅Â1‹Àâ›ĊI"Ñ08 d¸-Òٜĥd\vêâ!—†0ĜMù ùŭ~M`ĥ j$°ıíɐµ|àLhû<ŒÂà °c"M–°¸ZÉĞ£/ŞlrduN(r”Pi=’ŝ͖]ÚIt‹·ħoÑÒa!‚,`#Ĉ²=8–E[‚Ċ5‡žÂüùÌdhf’a1’˜£ÓŸšÊÛ tB·5ZJ=ɂI ö4ƒ“<Bör< Ŝoí$˘ !%Sr^d,r\§%Cr/{°,]â,”ƒ§&é 94e˜^„phÙzë.zħ~CDR<†Äš&£3iF’Ì“l½—ċ,@Vz á¸Ĝ™!,¸ó;ä] ’(¤Œš:½0ss{ş¨¸üü“vŻn”—étä:÷Ŭ1ĈkĠ³0d¸ÚÉS{Ċß pfċ…éï ˜0|ÂPhÉÀĝ C=.Pċ™; 0`èĉPèɓ•ÖÖYu™Ĝ6`ìĵ.ĊÛħş,ƒf˘ˆ‡`òMÑÄÛ˘\ÒsAá2òàté÷ytÑÓpso `°à,bÖ Ĵ&}=äž0.Q`Ñ'~gáÓ0:Îô֜â<˜žä]‘ġLĦp ìzJN­ FâŞ9§ĉÒj§ÁŠîáÀ=À93’çÀöZ,äĘ2€D9ygh<ĦĤOu6ĤR‰ZƊHCqn–bÎŜx.ĵKäCLħ0@r¤ƒÁP„zuKÙà|Èî:Žz‰î–Ĵ‹à³ +rRfydÚáè7ƒA³ĥ“˜s+£4·4hŒW ÈiħbŽxs͛âkí)³ ŜMğtgWĜ;x26úžc¤é†R’š!Ñ2ĝ)†œ‚ v8‚ßHvK#€6ġƒ¸ıˆb 0ÎóêÊn6s:ġ˙àUPÔ˙Ûŝê*żêxĝxŝ•~s0ŭ â*ġŭ™Â ƒ !ˆ¨úsŻk.îáëFƒÜÑô1œ”BM‹…9Àg†3$ÚŞ‚e‰ Qt´™ßĴ†°Â.2–b96&ehĦxH]é K U,]£O>0(…A? ÷@T4 oŭàüÄĝ*}Ġ€¤UU‚ŽTIQ:`<­—Ê*= *ıDP?àŭN˙¤I4~ G”¸Ä! Pì>˙à?·Àçŭĝl×óŸ"ƒ’žÀ~‡î?öè=¸'ô;Fy§¨”&òKdc˘°¸v,ŝ˜R y€ü‰ ÂX0:4>ŝrŒŽD}ĉÊ<?ŝû Jm)적qċRŸa•ħs H`ŝĦ˘î|„áġ;‡ö‡Ĝ8‡pDì P…9+ù(ƒĝˆ|‰î'aèCµD|‡Ó‚NGĝÇċ)„€ŭ…92Œ•?3ùĊQèàˆob*’ ŝĊŬ6|ƒw0}ÏÜ"D£éh€ò´ĝ$pzHĜ€ĥZ`ô ôuŭdžšYù‡ñW!µ³éïÊ>ä,‡ƒàz§H`°:ĝ+Ĝ +Z`żEĦƒ##Éî.‘2!ġBr6Ñ´Âû €ÊÀ'$ l vM]┄ʐ"qidú˘ŻÀQ²É#+²(Ȓ$ĝö=ŸìùìÑíôŭżöZ舠ôŽù ġ  " EAĊè‡Ŭzâ"Ᏸ‚|Ÿ›B'ÈAb‰ˆ4(”T…bb Ò*ÏP ‰ĴŭŝÌŞŸY ċv ‰.…D{Q?Î!˙5÷‡ùFŽOċïP.Š”µû/ĊĠüÏôDDC˜DT˙A€ó wï}Ù¨WË4„Ĉì<ĥĊÌYŒbpġ4. ‡+Öúç]t`Ĉ:7£î•z Y,†Ğ0°S–.4AiÌ q§@m Ñ}Qs@N-ŽNtttíI‘‹cħ³Zèµu§ éÑfÓNŒca˘¸Ç#…(4šħ:›7bnr^°%9Iğ˘/8ê ‡G.Ğ< n ˜Ŭİa˘ĊèÈÌÖ+{r`ê‹& bìJCRBÉÂì%Ŝ:ÍéÎ@ÁE×[È&M˜ÁÍġÂcuħц!´ „³kœKĞ sŞqxTZá |T3Äj+zÎs ÒĄ́8€ Rş†‡4¤€ÈlƒQ`9£ ìêó µ0µ9 ċa 2.DˆLÂqΈ,SA`Žġ€´W"tİ 1¤4mN“– ˆ „mÑ.ihŞ­É  RĤÈl.ÑÒ´°ÔÜĜD u0` hW"šW‚6‰m`ÀĤm†Tˆš@€pÈĦµLaA…hXeKÔ´YfÀ7”r„RÒëBÀ˘&U”Áâ›W`4lVĊµ4Ô$EpHħC+Á9½ĤĉE-”(q ìBFFÁw§P\À H’\\_:í]"LŠTUJG…Ĥ—#ށĈƒ †ħŒ.ZʽX½#ymi^ÚdkHïdGT!q)B“‚éè „ċC¤½u‘t9!•Â&ˆ›:P´ħ¨JÓÁKȸĠ2-Ħƒ(áFiR”€§™[)@ˆô@eàlSƒş]è ƒ‚€MCP%Jñ?ßôġ_lÛggßVŻZ‰d#BÏX\Ġ‡¤˜ÚQž·ô† 2÷s“·sˆJĉáLùBjœT¸ÈsÍ/ĈœĴÚJ¸¤5ş6~]îŭ.“×֘µNûé)ȝFŻpIQʀyĝsÂX}B/§Ç’"³™áß öo+ĥ)>1âMç[ön&2iÓ û×iá0†ċR(K‰QŸUVµg,éO$. @]€q²Ĵ:ş™ hQ. ò¤[YdgYǁK{v˙nŻ#64#ç İĝn:²)[81‡-ÔÛôê”ċ•Ò­Ĝ]5!şâgx•ä;ʽĉêŽĵ’iĴ Ï ÑG'qğ%}’uŜM…ĊHÚÚıg²¨ı²jÒöǧÒÌİTöšŽ’EÊŞbŠ˘¤è˜€Z.œ2€y­’ĉÒìµyžµ}ĈÎ2ĵ‰ĤÄÉé×y֐0Â_ƒ…œžö¨l³?E“ğS)<9ĥÚċyc¨„!§ĠAîôeĤRG¸-l´²¨692 ½á.ó\[öóO´‹=³×S°ñ+½Ï|ÏÓläğˆT™x !Ĝë‹ñ]WuğëŝhŠdQċ˙Q€³#Ó;|7×.“¨:zzâş­CӄAˆĊx(H‘Bƒ Db„#ÔŬŬ‚"S$éĠ˘è˘-£<°Şf›LpIİ^ h €0³nz*şĵ, ÀP–H[Á\£•Sn4…Š(c[çKfŻĞW/JêÚ:‹Ó‘Î B\ŬĉÈcŞ*·Ö:Ŝg']Y˜ "RK'(h2 .QS Tt–èŒÑWsN‚^ fLԊ*RŠfê*îĴ€ sÎq ëEċŬâš*͙D0-|ñ7‚(ħ7ÁrEäßU ÔßüCW“+×Ĵ…°=oDs† ¤Ôaë'OZpl.ğĵl8tŬğl·{p—Pë xïX“w޳Îuˆ(˜Š Ŝñ³<Ç\¸Mï­QÌok=8­Wx[š™Ċoç:w‹4[ĵ: ˜¨È”ıM(ˆ[Ċ9‘µP[ÛYê“(÷MmA­Œ…\Ċ ‡a^^.À–˜‹†¤n‡`>Ów½;âĤ`áEĵĊ4"`X€ $Mê˘ZÙ˘E…2ԂiÚ&žâȲ2Zz˘ µWhf™Í6‚@`iTä@ĊAB% 4qÌou¨¨lRc§£Š™ …bŽŠÈĤHħz!D ë:ÍhÈ&ŒdßYtİf×£Ħ8ĦjàÙE-FLĈdĞÁĦ£Kg£&ôUeáHğ4‘èÑƒ€ÇŽDĜw{Xzš‡wv„H*•Ŭí ,P’h fĞ=*uıÌáz1³& b¸›1&Έ Ħáf“B.ùF  ħ*e^³‚VŞÑ-hȏ@†ĊİH`fPbö?ż™èÔŝÌC§žŽ÷•­úye!™šÖΆA c$ċrñ”ê"Vq5i1”b‚Rfc.˘5eĉ)6Ŭâid¸*KÀ, ÈfžÓ— A#Şrq—Zħː͸ʂ–ĈAħÖğdÊMò÷|ĠœtóErğğG5‰aEŠ£xˋĉy+[ç5Ğ£˘•G{R͋=JĜ!ĴJšIz 3ÊAbD"nµ$֛âe ÍÌĥ˜W-IĴċĈ hÖéÄÔLb²„Ġ#ı›Ù&ġv`ʆ ²‰3!x–c!W„HqLÑx. „ÍÌV%g£‘ÙˆpI ÂÒı1k@dH”ĥïĴœg8:ÎÂÓp ˆ”c•9‘ĵ saĵœ`dä@)—T=ĤtC9dÎ|0sÍÂfëac"ÈZÂh5x˜NŒëV ŒéBD% ^³hŒdZ̤r5„Ċà~ ÖzPЧf@Ĝ@XX]‚]†Â›bĥJ!F((`@‚YŞ [ŠÙ€CĈ(0E!„` (cb(Pe…ıR¨bJ„&!^zóŬèìïˆN[ ``(a{/ Ò[ ç ĠŒVÒDœË•r†Ç(yÑ4hY0Èà7ğĊUc;İT:ĜZRYß/‚è dÁ+fħ£@wÉ­ˆZĈ%&€%cİ*ĝïaxȎ˳…ğ Ú-I!,4šBk#ÖSWœè8EĴċĠà&ßYÖ3F•< =â!RBtd²ƒ!ÎûèɽĥşÌö -šÎŒWkBq^ÈmW`I¨êıEpúr•ĉ[m´â D@ˆÍU7é´ÄkZÖt:ÖµµŒ˜oY Œ&y §ĵLpesß:™g-I´cT²„oĈ¤Œ„êÊëġ „Žĥ-m—ş Í2ÀĞ…„Y$Ĉ,ĥò)evĈëR‰(^ċâƒQ9ĥìÖĥİeÁ•“E—×\-r@!:ĝsŻS·hRïp¤PCQ Ğ4 nê]EöQÍY’Ĵ–ldĈ$Êç˘Lp°ĵe,@Œ#wml%c‚è‘ğÂW=+  gW`dK7Zâ9/@PÖ4%U…ĞĜ†PĞèÉxbdÁ+<8ûI}l^_ıÖÀšHB víB !ĵS˜ˆ˘`·s>x DMAT¨żcw;ċ]À38 Ȩ‡[%(˘€y@ê"â;W"6„p˘›„AĵRġ qAˆ8”WÎx RD^ŜTİPˆaĴ\¤ŽKl QÑX“³J8B.Š›†…ĉ´lµ"ĈÀ‡ Z3"½S¤Ŝ§'Ö~ĜÍÚT.Ï#ĥĦ6= ħÍw2^(qŭ†Hŝ˙"'dˆÀŞ UR–‰’Häžħb<™KöeìħjnÑ˘ĝà˘Bf‹?ğŝŞ''†£p вRâôEz÷À†ğrµŞIŽİ¨I –Cܳ“PÁAÉ`Vm=&ĤL†Ş!χ9, C‘Ê“RLˆ¤VwĈmJ•hK@Œċ §ùħdé„ ˆ™ŽĜÀĵŬE7 ˆ/´xƒ²ïĉVN8aVaċ%W|â": j­ġ½üL³ƒâ˘²ÌjB6ëí„ FC°+H Úİd/j… ċÌÊêŻİ‘n³/f&.ˆŞK²˜†P,&½7lñœ p7âr4Ú dÜyT#cÁ:ˆ‰²0™ pë:ÖKÒj’ä1$ĊÊuF1Eᚔ§Êé noœĴŞâ 5y¸%ÀSEo,fè ‘Ï f)‚›ˆĦpT;TŞ%ñ‚_ûóĞ h˘Dyà€ˆ5R“Ä@ ²PL![ü5œB°A$Â4A4Eñh‚ëΑ·@‹‚gµ/•™s² +bÈ7YA, ÈfË$PÛ!vQrJ'”¸EëÏvŽ&wIqo’’àĈ]ĜÈ2rnúê°˘ı€‰×” ~$$ô’Ħĥíi‚¸ˆÈ˘ÜTĝ^lòċ&à nÔQdO„PnŠĦ{ó½ŞĤâfġòċ ˜€.â!ŠÔTċPŠg” f —ÒùE´Pr‘I ÊHD Kl`ò÷ÖÀ٘lh@RĝQ̏s´´xħÉÏM÷³×ÛÌhîZĉu]÷A{~½7rS!žŽ5ıħŭġ ¤_M^ùËëıĵC³맏]t]ÑċHh¤,"Šá +Hĥ Ĝˆá|yúÜġÚß}My,*Iv•rvv[‘ÈK1›\]ïN3ĴjN>+ɨ Aƒ‰Ò˘(ˆ–,­;™ÄŠuTµ¸„#ıy‰&ˆ9ëɝs–&@RÔ²bìıpÁa.& ]fÜ.°sœ!ZÀÙ¤Ö°­ÌÂaĤ64PŠIßĞ$ñ ?fHE’ pdßlß{87}3鵢ÚĤRKnÛŞî¸ĞXZ,Šˆ$WM@ÌS ‚!¨‡´M÷Ùhxv³UÑ2cYĴU\¨Uh£†b˜Š‚ähH0)!”‚›TÜÄDäg™0RùÇ;š^mó=âL‰‹ŒUhœˆö‚— Ĉb—ÑU5{ÀP7D @ÀU$CUĂ vŬ Ċ’@‘9B0ĴҀQq)|ïİĊԀHèĵĤàQ<À ˆ ÀVâä äw·hRa0D÷˘‘H@ u Ew_HĦâ(ı‚ž.#ÍÈ%u‰3:Š‚)"Ħċ‚. ‹PW$U썰ÄĵEñtŜ&˘p*…ô€-„ġ= CìzĈ|5ît BÙ%• S‡‰4˜d”ò“y1qĵq<úĦkΕuí|ĉUM xTJ„SwêÊ 5RĤà!¨£ˆ­ùÏ>ĝQ ĊSPô‚ˆ*+<ĴñŞóŠ:ˆqF˘'PQĵï{ÈĤ`'PyaEm)­îöbĵ*T*^(Tj!QCd‘RDCDş6xmÊiCĦ.ӓ9Aİ8 Fˆ‡ŽuÜïĞÊo4ĥ‘NÓWoŞIV£ÜCÚ%ìżk@ ŻŻPĉΐqƒ ]bİ*úŞ‚Ğ‚œç„k‡=óA F…ZY{Ĥ˜‰„Ş+†íԓ€ŬĠ•‹5œT–ŽJq-M‚Q1™‚íı ‚—ŬàÁM 1;LG܄‡"ٙRÑm"ÈĦғ¨H9ˆŒÍ$XĤ Ċ6D{ÓŜK B@„P:€™ˆâ* 'CŻ|úeO#t'}ô1PĴ'1sd—D¤Ä%$AÇ-°d@ïߪx€r ï7y'zoÄÄpŸ$yš)Èʒi›aPôѐÀk•Pċ‘!Ds s h;€/3ŜèÓÓ<Â#”$>9ĥ*e$!Û0“•Ô(^Mo›T&ññ&Ë(n.À)BE¸¨PÄ…Ŭ¸ŜÄb˜Ĉ/5Jâ(hFÓ.ŞñG4Š@<†Ž0;x!9•†¸âáPpWÒ÷\ç'g&‰~^·oğ+ÚeşáCĦ:ñßÏż]xwËèY…I¨äÜ1šgYùÏZÜà !mȖċ݃8ÀÓ×W píz³mdȕ”óÖ½ó¸fza†çá|îL`§iKÈ×76`2C.™”™bŭN;°=êŭI”*p™ea–O°œ³é“Iáğ(ƒÀq(~Ïp+”?ğ‹:âJ L IÉ$!öN1ġÔek]KÜŜŭÒüĝ@x€Ħš"è„쳝—ŬYS Uá£ÚRâ„X`$T 7|ƒpĵs€^ıFhô*Q‹ĤŞYy\kĵÌÍâžPàöCJbôħN”à= Òôƒş:Ş–T—dİ ÂşµŜ´dÎàÖġğ0JM„ŭŻBŒĜJ,Âq‰Ĝ2×›L`vF-vìéÍÌñ6µÂ ƒ=lRĞi–Û’ ‰À2F%ÒîfžN¤1Ò(‰LġO&Ĉè\ŬZˤ% ”$a…r&ĴĈnóÊN„ÏMKVóKŠ]ßÒJı Lo0Ġè&ó cí¨£šUˆÁA@óïN †‰'8ÀşY*cħQjF8ş§sڍÁ|#k\C¨Ş­RıjÚi$âŝŜ{ŝÛ86^VĦ†V"/ˆŜ }hêüó]X1Ub‰j„Ÿ{5ÇŻğ9“ş 0ÚOĈY˞ì“[ĵg&ú$³iÚ.>%4Î8÷H@Çż]h:í ˜Ÿlż;÷Œƒ ğı‚A(i!ÊOˆ}Cē íšîÔšTÇÓor˜ş`˜Ç~Ĥ-ö³n,Èsˆd#œP™yC×ċl4Š}·ĝĞӿ,ñ^ž0žÓ½˜ÄÓò pdÀPÀ&ÒÂ|) )"I @-dO9ĤìÛOSËËċ{‡9cğíyܗ[Ù˘vQÌżvŽÉ 3Ğ3Ë9ğ;vĠÌD›íËàgo=öšN”ˆ%i^ċ+Öñ“ $Y Ċbċ"M L”£‹l’Ġ 8İ1 Ş  ĠĈĠµ ²Éffİ5Ĝ/xÊlĈ7žÚŜ÷‰Ĵâö  éS™ÈıșTÚ.şDé ]íMş› Ŝ¸]uYÎÀë½£{à*÷e!­(eTo ° Ä5GBêlF :RÁç@„NmR‘5½ç  RÚ4Z/2 !•:Ŝ0) &ê”%V„8D7¸ ÖÊMfÀR t0ûöäÉ<ïí+iş·Ĥ⃓C#wĦ`ô.ó‡<_‹³µ+Hj­ùÀ˜štŬ…´6 vĈÍm BàĜBÄÀ/œu™Ü6É´!@ÍI•uÙBQj8èqéÂÔĉ$Ġ̉ÌÑP† —ŭâs³ÁÉ4ŻKžìÓ „*ˆS˘à\À‡ržž$=&?T8ÈrœÌBLó †„£ĈÄñ„|ğ˜ĉ„ò‚ġ$ä1 Œ7žjĜek¤•4ÖeÖĴ îĴÀbNˆp$7žġƒëìżi4ž“HC˽t@Ö ‹ˆ8˜€a½yu“ş§CIÔä7UÖin*Ŝ<[áMU#Ş5k„°ÄBĜâ> e´ĝúϧ—âN^S+Ĵà}SÇI¤úÜ[žĵâë´8OÓ>ıó>˜CÓĵ³¤2ŭI,Ñ`²,.Ĝ/Cè@ ÇêàH+$Ed{E. $bċ͵[E­–AN„´²‰œVœ ‹Ħ!ƒ£(t p²ĜÀíiiş6Pço]™–PJ2t QE™ÂDÇD9ĠHÔıĦ:RÁÒâaцş&:"f„‰LâÄs<ê°D“K ìĉ #kRä’ ”K–Ĝ\Àr”µ6%Yàıĵ eW*[†¨IK„…Xy“à‚T(œƒ…ĴC¨_ZˆÌ|AQIħžA4hv˜4Ĝhx,;qfË ċĵ !Y`È@€äĜ:5  ½‡˘LR àƒ³’†Cw¤ŻNÒŝüPŬév@Ċ‹†„­’lÀ è%jÄ Ħ7̖…7Ġím谝ÚXħi{ż•ÈC/y·•›+ .T7Kċié ‚\ó"¤{ò³Œ#h„žġ Œ‘™úDž„íċé›aCä=úïĝÑOÒ{%w0LbznHvŒÙ?1ô NSœÓÙŸŻ½~ħAÉài;îÉí!úzœ~~³ +ĜœŝSÂ!ĝĊ/=ß×4ç³!`”Ħ…•„r”PQ°†XdLœ0š<Š(C,"Ä]ĤNC+°a”ƒI€ ĥ`ƒaĊÊ,˘Ì…Á`&ʅ9²Œ8JKV‘ à,²‚ˆY ÈQˆ‰‰-JB‰°¤("!Hˆ™ `Ĥ"P° X ”€I‹-!CAJ&ƒ2VA„0Aˆ$A%%JF @b™À²•‚CÊ †”·AaBÛpD),HŒ‹‘˜# ‚!A%IOĉé0ÔÚ>§ˆ~wçם³ñ$Y–sÍ&8ß³ĉĦÚM'ÔÇxÎg´ß6`}KŻ^|Ĉş÷Cëġ>3ĥT8o”Ê|eHfLc”@52÷B Œ€Ou7iCQ½Ŝ÷dÓßb.ΞéğZÁ‘žĞÑòßĝeü‚Àœ¨!äñar·óJİ…a rcϒààËÉq’KsaÚµF™)‰$3 Œbêï2ÁB” W9Èıî …%è€EHĦ •HErżeȆ’ eÀBöìŠvi-ĦĊ•££"há ”2œp=)ôtIÒô p'Ǐ:ŽŬĤŬ×a´é::Dâè4‡Ħp `ğQ:ي V(H%!˜Hu'fÀèékWV˜ħÊSd°Ö&Q'&Ĥy“\äĥĦE-e%ĤÀ+‰:EDÈ4—ÀàYÓ hbaLĴ+Œ‹´ /“™%g_lW7[ÄËi–l™gf\£‰xˆ8 @€òޤP 1ó8Í9Ĉ`Bı˘0˜"§9‚öJtPÊa"R ûkÖ:Ġ„ċİA4”Îï¤5n…’÷t7mÄِ˜ß½/ĵ\@7™÷³ÏÎğÍÌnjŜBAl` ‡ĉñ~R<ĜIĜô{ĤS·âaCŸ'6·]lĞK&3ê†ñĉ„^l“G1ôןŒ$X§NwYÊ9“g^ˆçŭĈr21@?Ô aRö’¤B•ômgT{03‘ċd00ÔÁnL¨ f ƒMÇgù)ŸZ¸ú›·eœ¸A͙dúÎIÓóLi”ÑdÙà 2dpĥ6 £ËÉïx'G‘NËĦQúÌǃğ^ ŞaˆÍž|óY=°·œC³ÓÓ¤>²wĤùe‘î×ñŭcYò‚İ”ċ’¨"š…Î6Zû š†—@C÷âcĠ2‡'‘·Fö#qrĵÊÊd˘WJ˘W$xU]‡ÓĉçBÏĠZ&˜jT Eàĉ~PĴÌ@Ó§ ÓíÖıû§S;ĵ$‹÷Êi‡=â&™¸Çœ`ñá8amĥÀÊÖĵçb§·ïŻkĉz~{°ĉŭ¸0,öáLçÑyOOה†Pû½gF‰´ 3 ÓğœĉVµŸ}ïÌß\`á6‡.µCïöñ Úp…rƒn †‘ĤÌ2iA,‰"j³a–n*wt:‰."âŭŒ{ M– “BL*ï0W/BÈ'PK7j;Tçû­g’”Yšñ{;µNŻĥa>}£lÀC']k",*÷YAYş &0Ĵ’£.œ ݧÀĵÒIĝÇ­ö¨Ĥnj†5C 2Òn{ö°û´ Êó9ƒD“paŒ‚ ÈSb†êÏ{ŽT`Q‘×2œË‰2ÁéxżˆĈXG˘ċĞÏÊàäj+è­Ö|¸°ÖçM;Ŝö{èħ^ ˏqÁ 2$48Ójœ&0H{>;3 öWıÒ9–ö‚ŒpÈ9‰·x:ûÏşùC^cÇ0×6E†˜e3Ĉ,œ¤Ĵ9a†d‹=yv™aÊ-o–‰âa™Iġӄú…f8ż)ïÊOŻ úŸŽğşLŸÓĵßwÖî}RĤîsƒ]}Ĥ˜Hlhò8ُ¤JĥOxbŸÌòz‡ËÔÒ ŬĠÛÛjȊ$avZĉJžöFŠÑ:z ¸†m 0ÔÀ\ğb<2šI0AŒ3JّtŜ¨€fN[_ Àƒ1È*şp½t+,oYÔĤ‡a/2* (U.°QhĜ€`yÊ1m™PÄÇÂ`è¸8´ÔÇ DG*tg0ç’BX!ˆ4N <àúüÉĴ™úŜ·CÛÊròÊÔí=ŜúşGdц60$Ĉ=áĊ‹÷JÒבKâ–g{ĠlÑ7Á•Ž@ğÖ;0`A£×{spD†$Äڗ?|="m0sÌET^„AÑß[€7Èyó82•• ^>Ó>_l6÷½à¨zùïĉ1÷GOÇŻV‰„ŽŻĤeÊş{Ŝ½¤>ĤÚ¸I·N hęny¨^£ŬßYá–ìÄĴĴÎk?{ĵ2e‡)¤Ÿ<Ŝ&ܲá jÌŞqÍéÊ=|ç½ĝgžàĴœó<§ˆn}Ĥ‚ĈVá€`ŜS¸7˜#DY´§MâĴÈ3RıâmEm ĝ„B͍ŒĴĝ‰ nj Ġ­˜C† ͽ*DĉçµetûÂĜqğ }ż]níÍÎrĈ.&ÜUġòŭMĤ›ê—Ŝ0x}ğrÎô|ôk‡pYŸW  חim“çñŻyó_6³x°İ”Ï8Ä{S{p‹E”¸ şÔá2[ŸÌZRِsĥ< † ÁA ĴLñŬĠ)S´,Û ĉŒĉ(Á˘—dBày­nìÀBö8:2ƒ/ƒ£™ËÊĊîì°¨ş•€yĠàɢŒĤ˘Y(rlvYÈÂhè­ ×U²tƒ ÖZ(‰„9›Ĉ½Ĥsòşác£QÊ´Œ.ñzŬYxd᳊şr'5×]s{B¨ U& ”sG#ğ^’ôhÈÄw 8tR\F€ÇS£'譀tD&Ê8uÀéĜċfÎ/á\á ÑcpÑYJ8”D“ p4eF%À6 £ĝëŻ>tžs×Zİ;RÊ ġ2ŬTŒ ¨cIğša›²ä„#Ú f6PJÏ<?ÍêA4£míMħ·İ¤;¸!xı£ìqYRŽŬ!Ğ­–¤Ŝ>ĥ3TĠ^à7Ì[Ĝ[˘rg6h¤nêš QĞZ­nĤ&Yġ­&iqŸ†ĵ.LŒN‚@Ĥ›½“z ġ“~Qcİ*#kᚵxŠ&½éîНzÇLöîßĤލĈV=ŻR ìr{ à;¨ıÂ#S§ÖyȅD=àĊžŸIĥŒ$˜™µÎmuû. Oo¸î’Ż7h³€]Se–0‚2êŞÚ…İy˘,S£Ž |œ›hİ/2î(ít|Èv—ÑâM<ÚPx~˜bÓ}Ħ=pĊŻRĦ0ĝŞ3žÉ "‹`\ê;Ż<û§˜RˆÁÁqKcäO5x´“b/oGܕÌÄĵŝ1żuµ´ëpLf6xĥ/t܈ĜĵÒFYğù@—bh#4È\|ċoO^›âTBÓ ;ÁNKB½,´‡½ChHÊ,yí£*™g.Šz‚Ŝw݈˙Ä 6ĥĵòÀâ Š êâè0Gü ŝ#)ÖoŸOĝsŝoxÛî}÷ÜĜä“$uâp¨_´óĞ™µÀdĥ[MÜĈ\ê„U6EĤ…1-IsÓ34”(ȁÍ"‘"š!fÜlٓi’ı‚.Âĉ:¨YÔÀó]a*lÛfĤƒ4´eÜÙÑуdz…rܝL3ĤÜġ³ĦÌ4h:5sΌiŜĴá ş’b—v ĊbÀ˘Ċ #t%…ĵ5 r蠁‹3Œ]téáœÍPs.Í@ŭÛÜşë9xçú ˘Eŝ䓸uĥ,J½Jw¤ş  q aK“µ£İTŽŻ1J ,¤i~(Ì †RÀ´,!eÑ´É+%ĥá[ƒLPŭğƒ\š‰û~_^Ž+ŽĤyï·Ôcì~uÇuyŠÔï芀sûE ŭ_~÷ Ígo¨ĉ|ÁÇêìż‡?Ûŭ[ ŜJ‚°ôùw×ßûj}‰ÜñÛÌĵá‹Àcd. °€ŒB\ÑÛ˙£üOĝù7ċ˙ÓµUUUĥÛijÙmĥÛy™e3•Uc.U€úâ iUQÛKlšÈ~òcZUUUU°ĥ3LıÊŞÙ iıÍĥLׅÔÔcUUVÛm²ŬšaœċUUUUVç\™Ä‰Q=c¤Ȃ(mbkŸÈ´~FrĞŬY€ħŭ=Îŭä“d@ĠĠ¸ë“]µ 3HegP˜‚aŭÛĝêqÊğ!çŽ|Î*&ŞoàXìœ2ëlj-֎ŻP,Hvµş^äùyٓĥ@ ϟŬ76òäSa"ôȤOŜФBvĝĤ=è…âi cŭĵÔ}­°@  X:Äfs zSÙÁ”’Ŭj"ä2äħjf7àÉéŜÎè¸|8 n" × ˜°Ĉµì{ÁŜġ$Ñ­eµ; Ö*>XvfÌ3ÏıÀbCuâŬŠ^ÓF÷7µÚċR\Tôd¨Ž 4lm·P—°Ša ;1&1Óş"çÙÓB˜ĦU5‹À\:`ÁNۋrĊ=`Ïa@\Ş-U˜¨À._háǜĈ͜äĴ—ì:65 Ûz*=ù1yϋ;‰:hJ’X#ˆ½ îàüU˘.ÉÖĴġÏÚ [ˆažŻ£d–šĵĦëšQ !ïñĵÎYĥ?=çšeCOÄ~ŝk9MÙïÍàûmgN™ĥ/Ż^ñĝí0Ô¸Çh8uÙ5,ò+Ȝ#‘ŠĜ`´ú0XpĜ:bIĈ Û^ßo„@нïìŝ˙“ü˙ÎxzjŻtÙ÷ħ/Ċ‡%-˜"<~ŸĤUW‹=Î˙{z+µ#Ż·ÚI1äO9LJBbÏÖKÖëĜ(˙Ż[n Á³–qH¨Ü-C÷€üâÜê½}xÇJÈŜmĠŻñ7wÔèaÌßImN+“³d÷ÁV.P^=^BÁ˘üËQ€‘áŜ£šdA¨ùñéP9ë•,[7"TéPÍRÛŞQêµÌIxoœVâÊ@ŻŽd3ß0^fĤ  ç\ç=ğ5InÌO|û˜Mġ|:“­PSUiÖhtš´ôÙĜÚЁfHcdÖI̟â‹a$Ì`H1ƒ@d’Û#™˜‹£ĠÛ5Víˆ9“šÎñ9ž;ĉkŸ …Îô%œĴzSˆÈ=ñHZ}I÷W,ÛSñ0•üû}êŭ|}wċ;ÏÔߖLĈÁ@ì™`9 á€9ß­ûüïçÏX ~@•=Òµġˆ€w´0 Uñ˙`êPÂÒk{Iĉ˙²ŭ¸‡Ĵ•²ëO4Ï1[Óèkpœ!ġ™‚1X({}~D8tĈƒ™;‚d~żZšuê—…zĠ9΋nì-Ú1Œ  6(XĦ(I$’VċŬÙb%ˆ•ԟΐgŸi^go0Šùĝ6P8Ï]k“(PRŞ ´İĉC>mîÀفòZ—Wځ'ĴôcĊjd+}ħ§S¤Ħ3aQ mà1^9Ä0ïŸż1“ñœĦí;ĉ‡ëşg<ƒ;Í&™P0ÜRsğI½°Ĵ:ùd˧ĤM¤ŭ9fÒ§Ïı0a™C|Ċ‡ßšıÉÍï5‹ 0ÂT%‚Y\ĵ2!1´-)àŒ< Ȏ@‚L·[Ö²ÙNëršîĞW`Ö÷êĠċĥĤñÏÚÏÛCfˆ‰9'–<žq&ÏĥŠöñöù=ì§À„ÀÉĜ?ÖuĉçĝÉÊr}‰ıÙŜ=’fHŞ€ р .ĥg31sB… ?×6xçĝ{÷Ü=B–ĠĤİEĜSMe,/h`Ċ4ɔXp˙8ìÀw?;#Ŝz:§~0ĵììÀ—ïM?¤£·ÓÏus9ŭŭ{0ô@ñ:8´Ñ‚RN ŽĦ–Ş*’ó;F:䵢¸TN='´Ä^n“ ’÷·Ğ& ïŒç˘4!És&!ܸq>[ŭÇQSlÄŭ_NÓé_użżğÇiğ—-bÁ}EĴ„Fĉrmƒ/£.Çı‡*žúç‡w!7ĵbGxǃ“yÉÁ˘•‹‹è:ĴPǝPä(ßżĵôqÀó:XW£’@†òQı’ƒÄ0WÚf9ƒ,M3LŸ<|½ämÛ')ÔĦû,AĦr”zS¸–cfĉE€ßVƒ°°ó›Ívô•Ñžq7ŻX Yßĉq!]{ğINŬıgì  oɟŽ0 (D#pH È]rÑaÒ4’Âw:^t˜údç½~ç WÏ´>ĝ,Ô ôżÂ12 fŠCĈˆ1Œ|ö5¸!×zíóĝ8QÄ­Éj3ҁéC ü–É•RUžÊs%@$`–E:‡ğ‹€,[Ĥ˜BğġÂa/6YˆÛˆy]´'YËĵ›µ ¤ì´’ĝ@Î ÂĥGT!Iލ2qtÈhà‹ê°ƒ?34'fÛSQ6BĉĊĴdyĤĦĵħôĉ5íŜ-ÙOÓψ;ßbî”3yhï³ORL¨'ûÎċ_„FGX Ô.ÇŞ3šGµžEßDĵ€ Ê ÌDbú )wĊT<§{.-\äœ l,ĵ]üçáĦ‘rwáPìˆDÜŝ‚ñ†2á€^ĵĠFñ°> S÷aaêM0cÏv[PsĊx;žyúñöI.F’G#˜È(_;ĥâîÎm†Üzĝg?¤ÒT‹Êss—giÊ9¤Ë uO×ĞĴñżnm8ûaĊÎ!ΨTé„ŭ'œzäxïeOŒ2áĥ“ƒıG΍d éĝ(2 ˜’q1Ï-ûiĉ=YDò}N}ñ[ëë­lŽšÜïúú> öìbL-X\/ĵĦ‰=€aŸÄ°¤„šŠĦÄ| òĦ²uġüĞGqhqŠtCäH,Ħe o÷ŝ9ŜĜ ß9 $H‰'l™!†2`²Ê{EÏ+Ìö|Ÿ'ÛD2&üOĦ4ĝ}û3=â]R‘52YӄÚÏéó_Ï[Ĝ› ìXĝ 7 ю£p\Ğ‘žF† `g Á#Qä^7Üçg³ÈNÔÀšÈ8²7ìĦVjB š‚` @–#žO3q%àžóà)3 0[ԝjċ\Ĝo²ÇGHÚƒ'QÚs`¨ÌŻ+ČF –?—]Bq˘DDˆŒĴÈ_Ÿ,ߝz™AÑUâsê[ÇÔ àċÔ§'<ßëžÎĦ׺]âÀRÒì,”á™zùožxtkáCħ0…–‰Ì €ĵ †,ˆb* $ 0…€züw İĉݏt4›@>!„ñÒsĠ„ÒO;L!Ĵ…†é—ħghà¨ÀĝbÌfQŻÑìtr$2"çϘ^|§nğ¤=OfŒšÎı’JÁ£ÎĠAĵşŜ‚jï`A’ÚžôĦż£İŒeâ'o“›Ÿ•€§(ÇX|óF‹„%;?. o×ċòeW$w“Ğv…‚˽ҒÈgÀ\`U>2ÚùËĈİi+ˆġċpdK,’ê @‚A*ì²Ë‡ĦƒÈs8BÊX¨yȳôëŽÎŝœ™!Ñ'I<•â>já…cɀĤó)’`¸8N>ŬbĝëŸçżG=jq‡·Â2ƒ@ÉOÉ2zpoal¸"{CÓÂoçÏß[ëςIz}dɇÇ!MšÄ U]K‰-˜C­~ïżÖ<1ÜġÙç}†;÷£ ŞÉê”xâ†ŜéÉçSÓı•ÎPZ CDĥtuV™¤ÍdëTĥòSġ‰ÓËH S ¤Œ^ğĈIĴPĵ|ŭ~³è`iġ=~vž—…gL=&ġßE—:â‡D–Z™¨fƒpbr=ÚO<4L™àñÙ#ÖżX5šħN1pœ_w8ĝ”eËì½|ÉÚĤ˜|H}ĵus?<÷ƒ~zÁ4ŽÒPÒ<ÁçÍ{ç@{`TóĠċċċ6X#‚`g“&BıaȀ`C„P Ó&ñ·ÄîıkĤ§íżuÊ}Ĥµĥdñĥr÷,†éÜתà„H–`sŞÉô° _œ}> Šv›!€`N:‘É}çÄnqŻksċФ) ì$F ²‚‚LuccÀ{†ġvğ1ߣáIm /A€È<4% ċ ŒĦe÷Ïó}zÇ=Áöè öÙúíıgĤUY·iVóáĉçŠN-Ó-×\ ˜6(ŭː‰Z9šB ~ö›†° R ÒÚÒZ* GÒ1y¤óóm–Ͳ Ž"\9—í*J™~qĈ@é0á(>Ħ L´cV:@~M}NlP{81W }AD€‡’ô};6Hk„6á;š}ŭ`8ÓY°Òî‡Öeñ ‡§cùï€Ħ–^Y ?ˆ':ġ€‹ ÷Cçġù£–°úÏĈù!í 0ëÂċ=Ig& S’.Ĵ hYyg/’vğœĜâËñ8;ŜoĠܝ7û{Ҙŝ΃0”†ÄŞ ˜.‚/B›ŸĤDÑÎŻĠàƒĵÉÑe‹+n—¤p9 +PrĤĊΐàà³Z"f sĦ-8eRL–`ğ 'S&Ħ³ËÓĵ˜ÒB!ˈ @èŬäĤĈlMȞ!ĤNĵVOíPQĠ/*úfCġž°›" ô“),Zç·7t¨„ö ë`Cs| '{çƒB§4ŸĞ~°ñÑ÷žŻ2h8dÌ÷yCoĉé§Û´ŭíórħEƒ†Û˜^˙[~wßYâSÎ,ÂOƒ³tDöí“LŜ‹ŜìÚqŻθɒ ğ—2p ˜ûĦû<' >ŝŬŜÜͧ]^\½§šA×íCzi ú¨:eÓĤäÀ ŽèÀıˆ€–'nĝ—Wd†DG¤éĤ£-u˜œ°ŭ'ëŝW´R*Ïé Ĵ\Zވ((j޲ĊZ˙Ž,‚0UŞbĜ"(T++U"ˆĴJ¨ gŽĞYD‹‚+U Ċ­V)Šħ*šġgóŸ8u+óñ&7·Áġż")é7Êà=Šn½~şj´ğ×ğîĥĦ”ŒRĤ˜¨AĵB³^~i8„DĤ°£á‘YۙaĝĈÑnRcñ>fò’e+¤sîé uŜ2¨>7 7³NI™ħ†á9“—êı“†¤ÛżW+Ŭ˜Oi´šf:ÎüγaÛ 3 g§xĥܰĴ+éö›a§/ԛgĜm'ÍY5öÍ<ûù~\ÎY6—šcmËóÓâÈĴúôÌT}èP5½X÷xşsyÇħˍûÜÜÓŻwħÎĴÔù.Ck9@ÁÏ™I…:3/ĞgÎıŜŬC„œ?ĥ{t†µÎ³JÄááùiñĊ{aŽl/Û 2 {uïĉ=ñOoĈI‡‡iĤ{úu8çP9⁴ôí5ŞjżŻ°ŠĴdÁ­.2:c ŠÌŽPY‚ñn#°ì‚++mËv#82.™\žŸ½}ĉtŭCz¤=ġOXkĠ=0ÚvêxÏ_=}Ñ!ġ•|ûÖdÏt"Ïz,܇˜=™l~ë`hê.èċD%IġÎï;’ĜŜÜ´óÉXcĈ:|51g¤N`…µyĵĤ“Úv›fŭíÇÖiŸ}^9³Äz³Ó¤Ŝé wN“âvüO8ëï×ËvωPŜi:òÉġŬ ]üäı4Éçœc(oŞ)÷Ϟ¸ÔƒŞ{Ö4“¤Ë'ĵÑûIw÷|²x•›Êݘá”)ìĈµNĊL‡—6‚ÏÜżBò$íšNĜa§I8ûÖ ²m2Í&׺tôp`QŒ2^sĥÄ'Ĉ%FUÖëҜŜíÛU{¤ˆ×ÖgŽû ÜW7{…sZÒĝ7rı…îöĦâŭ¸×°6œ²^ĵ9^ô!Re“×T™gԊwòŭçżş&Y' |aíË'Œ|;÷Sï°KÍÏż;ÌÛ'¤‡ŬRĤXhT §ÊÔlËGf Ĉ*QÌ.ÚLB ³ ç0F`¨À…V2£')C"ùü~5ITġ¤`G~xÄs>úzĠĊ:y'ͅUĠŽŬòѸïí‡ 0ċ‡½ûç'ġáÊC âzwĠ’i‡jċŸžġĵ€°ú˜ûž´CLñéžbÎħa§ĥE!×4‡•³"dfÌ Äßµ­%ĉ[ĠO̝ó\ħšdVKȆîŠö„6d0ˆF`#*-˜èBNTż:ë0ÒTšV}{ÎCóŜpĥCó=qŒÍ°é °Ĉ(~|Ĥ˜í†ŬóÖ?tγíÄĝÍğgo×ÍkêPáÊt釴6€§I„ĊĦĥ³÷9$uŒû¤İÈÖC-g,Ë'Öoëó×Í'â'hy˘òîu€İ"ëċ‡ZüŜzIÂÔöá_]y¨³ â!„šzyüg½&äĈ16ĈµŠÎùÎŬuѤ ôc†ˆN.u§¤Ĝô ŠĠşĥşÔ\%Ž„ëi°ÉѤԁž€ßG Y`cˆ£Iap½lĈ/us&1½m˜Se ”4• :âe:TËĴf÷Ö·‚³%0×KcÇfŒ‡N/(K9Iѵw‚Û8 •°o›•dÈ@ `2SB@ 2‰F  éğĊıĜ=ÂU7ŬÁ-çò¤àßĞHbÈ›žÎj Önġ§’ÛG<"‘6í‘]6‘päè‚óŬ·§ÙşâPvżb †ğ"ƒÁAZ3š=‚êŽÌi%Ÿ ‘‡–ÖßĠ[;áaßdUÒ§Ĥ]Ċ:VFNùĥü1Mğr²"ͨ“Ĉ Sb­F\U4v`ɧĊ(_bᨖ–éÑĈĤà­şž­²ħm £ı]!‡vyƒÍğf–Ô}f$Ĝ¤İíNbQíXSûM)PÌ0LURn£ÇĠJĵĴôPaĞ: ™fĜPÏĜOöâ,ĜğžÌéĞ?SĵBˆÊdûcħnrZ­>+oĵġÊgdik3“a˘-—iò·›Šô!ÈÁ Á/ŒIĞĥ,– {—çêüWk×Q|~ Á°-T ñùL.œl:UĵÏÎëş|Ȃ•‹™D œâĝ”Fàş6…%çŸ^–zDÂo ĉ–6d›Èú7éĤz*ı€ġ3ş~4›nŬԒ\hï”ï —y]*'ÏĞ÷³ ÄPŜRì:úgS}Ĵıëò½˜9xš_ïG•Ġ"çͨĥÍn˙ˆé¤¨I¤N…ÖÈğ\Ü0Ùïe}ӏôˆ0ç²%Cb€€âD*¸ĦħsIòU³Ç<óıĈQÔq7S7Óİ/v¸C-z됭COZ5³×+$1’*%ê™j&êá îì pd’h€l÷jÂA‰ J…($‚  £psdòĥœÁS ĊĈ‚no%Ô8dÄ^cs:mΰiˆnb‚ġ³|èÈ`Özc‹°Ï pÄĈÇcƒy*Kç+d…=&xÎ ë$Xà(ˆşfĊ¤8K’˙Ԉ†ÚÏ<óĈ÷½ İüĠĉ§óNĝ‚!¤€"7ħ {ş÷]`ŠQG“ß”ŠhIÉ4+w`J‘ @…ZFŠ 4-a€ĵI­¨Z& %OoKÍüyòġזúùŜ1_ß<Û~Êe#—ġC¸êĵjĦĈ÷ï~üİ╣ÁCß–TÑ³5fhôŻċJ\rAòS…‘ ()(”%`"*a|˙?Ŭˆ>˙ğùiMÂxÙ@1ê ĜPĞ“Ôġƒ-'?·íeÈǸ˜ÄE aeŜ3‹DDTl9íÁL„‚ŞŞŻBÈ*ŞŞŞŞŞŞŞİŭd˜Â@Hĥ҈ˆD""A ˆˆˆH221Œb"Ĉ1¤4A2á\+ŠÉ&ÎĴ—9R-ˆ–I )iIÁ°É…UUUUUxàœê’pÀŜŭbkZDTLsĴ9vú‡óúŭ~´NŝRò-0à¸ġâŞŞŞŞŝcÖµ¤EÉìŽDœ ğµ>Ħ][œÉ̊ˆˆˆ‰ÄĊ†PŒ,yŞïğĦ~Ïhe{ÁxŞĤĤ'`s1çżkeıÊßë9Uä!ĦC¤Óz ^¨ û÷{!èîƒìܽ€¸3WÓǂÎÀ}(,Xêîó‰,Z0üİıÈı—íŸŻŻŻŻmœ=%>ÀĜ;§İ쏕q,L ˘%–!3ŸqνĴĠ¤"-òĞV\dK—‡  Ù¤”É rH ™Ì™\(Ŝ4—€ÄŠfÄ~°´‡'ĥŝ|xÉ×\SĠE˘oIXI@‚ù/€ (`°0@iZ+(ÚEsĉƒ+>'ħe¨ÀŠ,•ÔÍxñEħ“ÇS@  Pì Y0€·Âet ĦC C@e(Îd ç'ıÁ'ÏŠŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞĞ$—ÔħlZ;WÊ!İÚ%û÷ׯ§…pÍQ…cÁÊx2u)‚ġ>ÜHŒÇÌb0WUÎŭŭä;sѸ*Èİ9Y µ´Mó‹%Aá4ŸÏë­\˜ħ¤Ö(˘żœWÊx³—ÖŻIPĴÓ:>c7w)ğcqġï‹Ì^ĵwïên+¸T./WċcQùAÎkê/µc&À.]Vbòğ0X^@˘žŒ4<Ĉ‡ıĝKzŸWùÚkéxok$òŝÈïaçÖöÑ8?Ÿïó÷ĝÇċOèîzü^€fżî àŸ?ŸÏGˆk“ëġħÄKş|€…Bލżžž=n¤&Û?O˜×Ŭo[9ŭU'ÄûóĉI4ɔŭ2v‡Ïtċ˖aŽiñqÎ$é4S|÷ċa!ˆàµG‘CƒÍN\"ƒŞàéĊ“É{+*zàóğŜl^³ =^ŽxÎüK,úžĵ~˜€VáéżS×úfĞ.}"}yûëŠû}dä6‘Ú’(QV3Ëò£ “ĊàiÓGR]ÉT)B’U²6–ˆ ‚ Œ–ĠIE²”ĥïX †ñcKIžH䟍£2ı… üĵËÜ ônÚÁíÜÙÍ Ô‘¨œRċ!ôúV£ÏϗmD•†SÒÇ~ĥcQ^Éĥ~yrƒ˜Šİ4NÄöpTn(( œÉÜ÷ÄşÏ·éßr:‚Ċ‹i¸˘!œÊ&žg¤9~·×ĝvthĉ”ŭZ"Ĵë:!œˆŠϔôœZ)öMŸë|qÒiF"aċ‰ÄïŻ§Ŭ8À>q€Ì'Äït|J,L ?°mêÁ>Ó×ğëUCœzë!=j‡Ha4Âp‡Ĵ½íÄ ³ôŸĴçç92ĦŸÊ|OhmQOĴUÁkÈ2 }0DŒeß9ÊçŒÀLŭ'£§çÏ^ÙáÚubĴQcîʽRŞ3ü´ÒİİÇóßû9ŒN‰,´e1J[Ĉ>ÙË$ġçò§^à/yñI ˆL8ë’óc-Mܘ…§wÀ¨3hçžÚ`ŜÉż1_ÄUPzŜˍ˙„èœ&ÙC7ĵn^!9™I?ĝ5ŞÏóŝ ÇġŭÎPñkiàĜPéŭ~µBa8DbĵšB*R”ì0êÛ·UR/Òx8„uĉĠ`  Ĵ  R‹ŠQ V UPmĴ‘’"guüc˘ÔÇÄŭ}z8çVT=@Ùàp& ‰ÌĉJŬ¤X·‡͒B a3òïŜükKé;vöY~³ĜÒĜı_ڔúuxßċŭż?6c’z ˆŝÍìÁCI²lAùs_Çż|Iĉƒ“ġꈚÁŝ3Œ0TŒ TàÁEU²‚KŻ/ OÛçç\?{=>0Á’O|k{'ĥ~ä • ĦË%ëŜœġßµ^^jŞ|(U@0 I$|Ġ@A>ĝꝞ&~;ä9ƒ‡Ġ˜ßID˜öIû*‚†iFI]ßĴß­zK=şóóġôíÛşö “ÊĦ  $@´£ċ° {³Žtbhfi·ßĈ^½}›ßK;Bı˜Ğƒö²*ġJ"a•)iJÖe?|zŭòÇô™a$~3ÇqßyĈ‡7WçŠ/4™‚T=Ħ‚ĝêZ”Ô ›N x́ÌL-Gˆw8‚ugIĥhzC”ŝê3:¤Áèv|8@HŒBA nя•ç;Şné´ŝƒeĠr·nħî¤:êÏİvכŭ˙ŝġžòĴ&!ÄEñĉ~×îdÎyь×á{@çµj}ßk܇ëÜ*ĝ~˙~@ħè2F</Ÿd„c.Sġ$;ÏF³&dD`Àˆ‘&)DIıURIŞ7̑ŜÜŭ~çżżż­ûô'Ty'qÑ_ =H·ö˘˜.SmùîÇçƒÇQ>ŻFiĥüÑëóÉĴš–ĞQâ~ß_Ĵѽrm=_äyÒkX1¸™u”g X2PcAŻÖI$’Œ·vv-mkçaa“ùÄ @UcUUUUq,²ÛsAA‰IhpoŸ­ĵyŽXyĉNÂôšaâCóÍġòû~çßÇÏg“‰j˙V_Ñùƒ YK%ĝñŒo܇³ÑÙÚ(EuÉÖr?Œ°úÌĵ§íχĞäÓ:NíU‡@Z‹2ŸŬÀ†ŸÙ“™7ßnúq{Ŭ6ş%Ê4tïË×ó]áïCHvj FûùÔxıê–cà"=‰ä1\;-0ġ‰P…ñiïϵkiñħèÌĊ>ÜN$~°¤(•"ƒ-üAîóŽA_~(5tca >÷”.Ñ:‚`ÜñzˆfrzÀĝτ@Ìm§ĥBxÎ÷÷`rœ¤2‡éÂIÇÛ0ÏᝓÔñ³caђ@³RÂx<Ž^zk81—ĈÄWŠĞĥóh‹Öç~yQĠ$oĜ˙Ŝˆ”=ıü€Û93ÁÄä*-7×ÖşóqżŻÏñnU=QġúÜï<ĥżBÁïà§s¸Ĉ"$Œ"+ ˆ‚ b&ñrĈŒ""""0`¨Œb"""$HĴcĈ"1Œb""#‚ ˆˆˆˆ‚ ¨ŒŒ‰"$H‘"ˆ‰Fx8k¨kéÔ|x<ċììà?.wÑÍÉ;BKFWß³ßżpß:=NäH gÛçÎjŞM—kk$düÄÁQ3J\ Ĝ_W'áù̜Ĉ"Ö)ZVˆ`ÑżšCÎÍù cRüíòb… ´Ös‚ÚaÀ`BÏìÂqÑ׳™Ö :Œ²Úyúɓ4… ˆĴŒž´ÓÛKK$cIĊrHM´Ÿ,ó^eÎs}šù¸7D·Ĵç_³³{× ĜŝZ÷Ĵ·‡\_lċÓ˞‡S Ġ ³ŒÌ8sŒP4Ô΋z?gğ=sĈ=ÄA÷ëèfÎ"!1êÔ6†÷µjyïuĴ$‡ĵyŠqáœ{vġá Ìw”1x| Ĥ“—‡ ·N95ëÍa8zxTÊeÇʳ}qúĜuwœ‡×^óŒ<üż¨: –‘Ĵ&À—?_=vŸÜ%o<:˙™ÌzC \‘•WÙ}Ħîûòŭğ nÄy8Ĝm‚/뽀‡Úx]ÀH‡û} …n9í!丞|‹ġúˆ`ÈiZגP6P,q÷ż&µ÷‰Œ+`ŝĝ0"u@ 1ŠŞˆŞÁ‚[ŽzóÏy÷˘“ĴÀ3˘bù@ħeäydĉHCôħŜ´†T@@΃›2…I!%(RvÀÒyùżĤ`uא^!‚S"vˆñ(•Ŭ,'gßŝz6gÁˆġô0xÌüp!–Ċ†fÙŭz;; šâ–´‹ŭıÎ:-ŭM³#×ë_;ŭıäċbqĈ NÚYİ5óïëżÎêÓñ—*EŽ?~MĜ’^³{òĥeñ'Ï;:!˜lgìô‡§Òi…Yú·e€ĤU‹ßÚl÷œ:Mµċ'×L˜r/–€_¨ LĤ<ìĤJÚBccÓkZ&q•Mĥ­X€s6eÓSiúzĉtoinçċ0ŸĠŭP@@+ ŸşĊû‘‰ûß~wùÏß­¨oĥ)ùöıĥżŬky3y9Ĉ p›~hž\ïz['͸S d‡&Ëôċ½Ö6“„Q·ç4Ê~ĦëÁ¤Y‡ë”:péx·Ÿyɇ”8xa„Âc˘Ì˙ ÓĦ%dÛ Kĝƒ88Ò62ß{KRŽjÈ\Ĥ/ÔÊóŻ\šé7ΰlLıvñş'p‡ + ›úĵN5‹‡5ëî€á8VM¤Î>|ÌÚıa·ÒPÓ!í €ÀΠCِ7>éû:ù J™L\ñ³W A‚C"`š[I#³Ò²ÂËr÷ĥçÄ9´ÓZM^Öĝ÷Žœċ­00C.ÙùFÌ ÀŻ1  ùwċ“l6ĊĤ7ôÖ2ÒiÖ~ïžğĦ6ŠOhxϗî}ûß …Cë À5m–q‡‡Žċ7Ô`ñ ßr;çx‚œ3îé/46ín†ú ¤Ÿ|ïçš~ÓĈiéúü͕žùó×Y“r÷™dSżŞ&;íĞŒ)‘Q‘ "xÉϸNîëˆ˙=jPƒïtİg}“ÌçġÙ‘´ƒĝ˘>¨Ê€“š ŜLNz´ŸšŜ0-1‰Ä ¸Á¤ÚM!Òe'>^“Œñó<1hró÷Ö Í¤ûğ+4‡‰óíš`WĴĜ}~ù÷}¨ĤB †Fd{÷fġòhQ“˜ċĉ F2$>B¨ ĞÔ÷PLŠQS+]Gš~üİ([DĝȧJžşVâtꐜĠPD"PAdöŽlé£Òeˆdƒ,0A•äˈ}Ĵr*šĝÁ ÌH=´óËĊ˘MÙö@Ä´…ÍŞÊ _zġFÚ>òîl‚÷ïvÂ_ Î5ß8û‹ nħ %ĦJ—zw ‡ L“uċsf4d$ìĉ‘a8t›úġ€áíö\âœ0}\óÖó”œ3ë2òžÚëç;ÖğdŜ.P2žÓ×ŜŬ}Ññ<êž2b†:Ùß|ù°ċYË’Š@Jg­Ó“ ´iË M1×H|ìİ&XoĦ÷%Ŭ“ñÊgż3­ÌóÉ8OÍ}ó€ (Ü”|³ zœƒ‚şÀcğÓpê²Í Œ˜ÀcLWŻ‡Í…ÑèñeµnM\"î”ħÈG4Ŝ6BĈìR䇋ĦüAúCñBâ¨ë˘íÄÌn)pñ|îVò÷›†3ĠĤ%cwJĤRR ßŞX< Á*Ĥ;ÇğğĠ‡L0Ĵ î{§i´†ÙR-·TxÈAÁ‚? ĈĈRnd­ĵͤhZxM³:¤Àċ“.Yé .=oî´ÉëçĵeôaŒ‚y@†V`¨È/†ġ*ċ}HêŒsݏßtñÂz@Ó0×Ë1ÇŬkWT´*Â[¸‹ô•QâàgŜ3Ö°qy`tˆ] 9S;c2`Á£†bíÉ'[zlm:Ó‚9ğ½ ·†ħĥ,N²‚Ç£AÍò³×Xà¸GFÏA²)ċ:2#Ġ†C†ka½6tXs{Ĉı³w€›8^ĜqvnéËÇV2Xi&‰) :L†SGHs8G)ї˘É£ p ċ†ĴşL:!”ʝçd“,ÜɎ2&Ĉ²,TÓÏE.şúmJST#ÎW 1˚̳NRÂ6me%ĝrwVÖĤ•bÀu}{àó=ÁK‡™O+ÖO€àQ64ŞÜÎì”S!^8Żñù m ,ÇÒ0‘mĉ;ïrê„b?Ĵ3Šĝċ_u–Ú!äX u.;IĊıîĈ:Féo½– hìü‰]4*f’;xö¨mĴrDxNâ\–˙£RŜè$jhzèU·…“kUDQò/ WÀbk”Ó\ìÍĴ½Ô\Y 9 Ċç –BÁ,&_3…(­˘!îwƒ‹µ‘C{QJ ½6‡Ż™ìB6Ċ:T+ BDĤ›/ì1‘tÌĴd“0Ÿ„T†4Àg Ada2Öça>ĉWğMŜEaóː‘ÛĈˆe‚:İ›ß_ħ{>Â.,qH‚ˆ /(ĝ´Mû Yĥ²&›GËÚ%ıĉ ?#-yÎ×Qܸ3C‡Ò2q×!É|ëîÁri6ÁvġPí+˜Ác[·ŒÔò²k€ÍsËL‡ĴI<ğ‘èħW.[(( üÌbggŬg6/mMÍG^é;1ĜöXž0ŭˆ‚O5j @Q?ĦpL ,<¸€ŒŞÏ5Ç4iâ œ$·½.FyĉíIWÎoĞ(fLtʑ(ï‘(ÔĞ51—SF”^ì†ôu8èLC‰²]7LJdÔ(:BQĥN˘Ch …Èyşjœ%QiBs…Ü’âgŽŽS›Úç–k#££adwÑ“jGXı ²o BŻhèÎM‡8pá³ka7Ċ&Œ\ü:µġŒñÏu@û"(ëûĈÁé:*PjĤƒÀ4Nî+JDiTĦ!J)R ŽÊG`Ë"Lƒ€*ĞÒŭ||hş“:÷†ŝVï\^m´żƒç²5PfÏ´°ğé?܁ofeĉcïîŬKJµIS%AÌÉêá‘ÇÑâ 0çşeŠL”ŭc!0”Ĵ…C" ʲ!JŸ )J%ÁÄ ›èˆc=´ Â%o:ÈbH ç’ñíŒĊŞl—û# •áИÖe”aKC%h)%í)‚!RE,"L¤ŭf™!PTÀA \FC–J Af…ççóœÇéóĉ2½ñ!(ÙgDŽàÉ30„p`)‡ğOŽo¤ÄErżMĠ´Ŭ\[RFÏ%™R5/ “,³‚%ÇX2‹ ıܛÛ-°:N)ï4Ûŭ9òá2—îg&ôaT¨Ïdg„ġ;&çı“Œ!´ qhÁvżŻ>çóg‘$ÊMa"rÂñı5´‚–’ÁôéÑiı|ıĥDĴáœ!Ë6fNtëı7ʝZñĂà[pl›€gg0Ĵ¨ħ‘4ŽÇ46 ( E Òj€7ĝV!çšáĊi9BlP8ĵ8l RKeÀ\¸H9†Ż7ó+`o:àšĠ˘ĦĦځ²p8Œ¤E§ì‹tDİF’”Óëĵüĉïя@p:ɂ•ĜZ3 TĞ*ÓÖJ(Ĵ'náëß>½ê°ŭµ|`Ħ‘LYê ÀS „ëLÚü2v‰‹çpLˆíIÁ1r~4ûAQ€6d0˜t¨(sċ„GÂ4a£á³:ûö~QL™ÉW×P%‘ċ—íX„›,İ(¤›mÈü´žÜ!OħĊœûŜÖäħŜlcò×.‘ h×·Ízĉr"ŸÌOâ<ê“ fUĴö–`šÄä…ĥFŽ’C\_“3á‹ÈD0ûñF`-\LâÜ4Ÿ~-³&u°<ĜĦÙ= üÏPß LĝñϜK‚3Ĵ'I:f{Ħžùġ“OLċ‡çıO⒀k™FKq^Ŝ¨ =‰í49Ĥ b/'òmÛÑóĵo֏!5'QèùJż}CQÊWÛAˆ ŠÁqk>'ÏÎwŸ=úIî'iS†Uˈ{ÄĝèqY:6÷&—;ğC úN>ë­Ùñċ0ŝ\²OÄĈhZuOd‘HPx-ÒoìÙ=ŬäyĝüF6!œäŜìĉçlI*Tݤé‹<“%ä`<„(‰ú|J´ëï'—äoBg“׋ò÷]RFòÙż ›Ä{ښi~)_+çA:€k5àˆĊC—”ÍĦPôÓ>¨ìä;2@H=W*!–p›IÜö,éœĦĈa×Ìç³ġŽy˘ôA•4z…Ü{yê¸Fxç)c3Ì)¨f'xb½yĵ'¤äMĊñċ‹ şòô: ᎔ Ï>%¸cô€ıß._^\2ĈsĞ_(ššŞKwœáÄdÄyç~˜3 ›ĊqÒûùzÈcUfġdÁïŽ4i³ĉéÎİ ‹CÁĤÀ*!´Tòù8İí5Éĝñ_M¨Ú[MsY¤yëo[ä.ëfŸÓŝ‡çÂ>ĝ¤0Ré3ûà‘?­°ÎÁ4ş4HBP—X0˘Î96~şÎŸä:_êÂ) )·v‡žsë÷£Úpœ²vœŜ]Rȃ³ßóĉ·Ħ_=˜zÍ#ÒĤ˙‘k+×ôyžXyğ‹Ï˘bzw÷‚v™\È)ŞPAĝżœî•Ŝ$”Zk´ƒVë(ċ60ˆ…ÙY¸Ĉ!B ^kïOiRr‘N£„Ë,èĤïÁ‡²ÇG žÙËž€ i ¤í0ı²tž“i2tn`[ĦċD_dWÄ+1Á; 2‡0çG³£áä˜]›tÀ“d½QJî#hË|eË4ëí4jœ0ğïß½q×4;p…o5_2̃ )$DNèD§€qNO|:yóŒì§^Żì&`­ï|3ĝûĦŻġŝë;$ž7ċ§ß QİûĦ³™k'F üŻ|&+fȄÀ¤ìP:ŠÑ„Èœ˜ÈíÇÎ dFëèÎ%€h„*Ĥ-ı {üï¨1³(ìŞZTíJâZV,sŞ B‰Á- 5ı%àĥT7A0:Éë›e-› µ '›·‡YĞĝœ h×4='^QI†mĝž;ç£Ŝ²jcï˘\t€E0 -FÂڀ^ QéÖ |(0l…š%ĥâèJvdzÄ4ó8÷j&ôTËAÜȂ=ŠZdĦdžl‡VĈ0 Ô&s1ÑW#U›ËeJ¸r˙ŜێŸ9ĝaŝ´[Żü^ÎHÉĊ°|Bİ È0"ùbXì*2çĊĊ"S“+â™x§uÁ(¸[ïòÁôÏq^Ĉ$ìfŒÄRŭ/ç,iévfC=S ċ!Ú¤ C9ϝîž|òìçIÂm.ZÈ r”ày,Y“>Ĝ½á9#ßیóδ¤1Šm<ĥÚÎ,[µ4Ô¸2ˆĥOÔ`áÑ<żĠFĉLŸ'!;Yż qH³Ï˜ûl;‘I SP4pŻgŸ4§b‘°È·„à?€²·Ğ|7/= Ĝh_Ġ½hggŽ ŒGWéĜìġ›ÛšDѕ`Ġ#@@0úñVœĦ£nuyݞTµ´Ĵċš9¤WŞĥ\ZŞMá[ϒżY]Œžy'|;Zƒ•4³8äc;%Ċ6BPÉtÁ8KĊ;Ú|¸~KÌŭŽŜôÌYñGÁĦÁ°ƒ ŭ Sä8ĝVë3tô ġ)şÜ ™ À•$µ™ECâÒ Tı¤ÛÙǽ­’ïÇ>ÒHHaCèƒÔqy½N9q:ˆĥ˜*:ş|~”ŽË*˘(š‘²1˜£áì/ÌĤxóIÉŜÖş“Ï7–—ĉ8!Ŝ B j…üšg óëäq>ôTO>Şt GÛ;Ñéôc.èĴ”áŒĈÙ{ş÷Ç£Ġ.2šĥ2™|u´@ħ,BmL"{7òĊ™Ĉtz:!ÁÔ,yw‚Š FÄ ÍĵÖĵu~{UmëÄa1ĵ/m¸Ù€R’­w~ŝ~²‚ڊt‡‹…çI%­›=yœ7*çÁ_(ñ0%êP(œ_Ûhyö7Aàƒk²z'pxÖMñ3=U­krí ¨Ô%ó“bž°‡D=üJM³œrŝ1ñl: oIO`DŒB¨ èİ´]ĉó°0ğħôñĥ„5ó\0ŠiƒYyÁ lë îĜ‚-?Î*MUž9÷CıžßŬf•·Ö4†‹aNßjŽĉ)ċG$Ñôn×ò[j¨íKԈñÁ82-èDŞH) <µíÜvĝ³ß_µÈ^>ÚĞÒ=½Çĵ ß·Ó3R‘­é”¨œ–G\‘ú˙9Ù¸ ÉĜ`‹*·‚ê`-íà÷¸TÁñ• Ôà(êߟhöB6ò—0 ’M™%òxğ‚eg3<ùVáHàò‡şBµk5QÙق·0àÌp ÷€3Ŝñ×ËĤbóóe~3|á GéżÈEûQω˘èŞ0ÉZĉ|üĴˆŠtMÁÇO돉~GċPS“ĝ[{ħşB£•íT*šv!)ƒ´M·´Ż3b4Ít‰6_ÍsWġñ p|ŭ Û]şàûŬÁżWâé1çâó+_2y 6ÌWŬĵRÁן½Xb´SeÀgğÄO6µHäž^Ĉ‘2‚ÑƒÓhU1yË7‘7ŽŸ–IËĊ^.*$­)‚¨mníTÑžc´Ò´ŸUĦ]—cf àú5ÔAê;ÍäĊoz cĠF&޽,bë‹àÈi3Ĝ9sÁòË@8° ċZŒóñ™“‘CÎëC?òs9–#9OÌr *Ĥ“Dì𰁉Cy‡àÑ 5/­Ċ§@2r /:Ĥĥ8fĜïBîŝEœŬ­—öž1h™I™‰ŭ9Q/·ĉ5"q-ıñ‹p›2×iy‘ @’,}]ˆ,ÄFĞfb@LXC¨ŬëOcUJ˘6O‹D|ŝ(9TÎrÌ´\ìÛ&‘ÈĝVdŭɖۜêÓ6‚lxrĠktœËş‚ÜéíiQÎ%<‰Nş!€?wĉÀM\nĝ.)A‡<á(SÖÒ\ΆXĥ!ğ˜”Ÿ}=V„‰Ïó2NqÚáU'œİI‰ŸŒĥż—;A9w§¤evUYo1eEx1Úò>S#MäRòy2UQŭ˜—ëMÇ_òuqîJ÷òP×hîŬû2Cy.e ·Z ’U¨ËA7p !%g7‹b,[] $”Qm! £”Uxô*³ޘżÂÎ7ıI>ò?ġŬ=Ü”naŻ´oْK0(ˆÀdñ*óѧ™Ñ<Éœ÷ èëğ$?Ş˘Éğèdbš\„Pq„#QIT#ĝG JXÇmĵgÜpĥĤS s À}ÜĈ×ÌGӂŸn9ÛìŻAV¨ħ§$•n­ˆíĝo8Jòâ >Ğ\íÓ½ÍäDŝŜ?Ġ:ÄáMĥ›á(W³4ÂâbBJêgu)v¤QBS‹i‹jİŞ*â–o6³$ÁEdbiy7û\żê£Ĝâßcêœ_Ž‰È†µ ˆ€!Sbƒ °Üb·1]_Yç9Í Í„Ĉ)‚(£5K…œˆq)şŽ–°3b fèNsM§İĈ„8ŒXAé"qè³e\mŬà€…0XKK°EJ”ÀÄÓ òWQf”zDCiFÌ 1 B¨ìÁO&µŽk. t‡S0†Yڐ "ápÁ‰Á‰p8hĦ „W E58pĦ³Ĵ Ñ  2D­–ĴKaÀg†DÈg KÒapì 7°:,^-…€t0à›7–Ċ*e2²&/ώúóÄóÚBÓ'¸@64‚mˆäÔ:°6¨áoVVġš[1€42!ÁhĊ°9ç@QŸ^NìħI|ĥ§hëuŒ´Ô>Pr•3ş5²‡4Î6fÑè&‚ċÓ:.ĜkB’rYVž˘&wCx)7ât”Ş`œdhZ‡Âta¨@Àì›ĉW*†Ĝ0 àÀĝ'í÷^|öqàk"°Ż@0À"P,´/óġ”ö×Ê=ıŬ€,Ñk AÎĴ_¸P£/cœĠ!vF€=À†â!ߝ0yò޽Ŝħ|T€vl:ġÎb: ĈU;Tì^ [ȅmqsF şĠìÈŻúĉħÉWó5­ĝŬwE´Ž@R–àHyWj]–)ÖİòŬ ¸¤,¤zĈ¸LġW“&‹ÑÒുKf‹ Ëĉ=wgÄ7òûÙÁ!!Žg6 RŽôœ1xQxC ]Ô)œpŜš½ħzżVÎ} "$^šu ¸¤y7‚OË-†Ż]•ËöMkpIHA€(!!2àjM²L‹ÛŽùıĠĵ ‡ĉÛBm;Ž)´×uM,ŭ^œx ™†NÎúèbÜ_xĈ>hxş2²8$d½³í\–ÀRZ‚£ÄŠ”àYÙŠ4{OĞüÓH9P‚ьµÙHl­é9oÉ!.]:n:Ĉ ÁB°¤ _~|PV'WèĈ€"ü£÷Î Ġ0fŻÈd ĴK@„öĉ̊Ò—ŞâdÖR×ÖĝÎoç%Ì÷bèDÑÈ@0J’†¨'ϊ /ıDƒ0AZ܉RàÉĜPcż**u2޵נ(wÄŬì‡8½ŻbtyĈ3˘&eK€{ €I6=‡jÈß13jËkŞeŞ!Ş;g™*V7?ħò&Z›"!˘ @K@É Ħ ‚3L!È*_Ĥs¨ġ8ġ† éjcĴiíshr˜tu_ƒHš¸?Y°?Ġ-˘! qİь2,òŒĝ×ä}ĵĠAŽpƒħ‚†„)“ŝ’y™˘š€G]ĤWçH@EH‚ÜӊĈ\߉=i‚Àƒħmô“žmOw“C00×w÷Ö§.ĦìŜ8*^q„{F½cAyµŭV ñ‘CĦ4ÍâÊzŬĈo~}k5QÂTȔ,/Žd|n tϕ,{:6 fž*I„ĵtf;ĞÇw¨÷™ÌÍÜìƒÙ8…‘ÊżOäëħcü²dmê7~›Ǥµ‘Í4GĞu³—ÇÓ#ÒĦçP¸D 펀…dW9\ Ż?m:1=Mí Ŝò›·ĥ֙p_ïÀC„GisO\_)p–xĝÒ Ğ[âÄĥ)H™àhŒŝŝGë6˘ ÚJkò†ĉ_ÎD†??4  ÊRƒ0 €0S“â˜/ÖĊ½e3)cżż6uvyo- .³í.ë[Ĉ3£S³P>ĉX )a‡ 7lÀ€¤Y~Ç"8‰234êœ)˜lİ~Ûğ/OE€XD@À·4 Œ[. ĠMġġRŝ/*xÍĥÀÈ5ı½zö×ċAó•ZÓ‹AL$áî$×`ŝzg•0{ÌrÉĦÎnµĈF u×wû§ÂTCGñ ·Á ´ßDCÄŬï]ññ °qpıE‹-]ŜúĉH8½é@8y{ùĠCĉş|V­dqR%sŒß‡Í“Ezà!œ†‰ôA§`bїAĊ-— È#o—Éù…Z£(VŬ! ê<‚ƒ™uş¨ŭŸ·cˆ=ëYĈr:‡‚.BIX Ŝò“JiçÌ °Žž˜şEż”óVŽÁŠÎA•şżY”Ój§§pï+‰ĴpdBA‘18`˘’Ġ$Gɏ64ükıÜqF|Ò%œĵÏj~^÷šVµ ½XìëW'öĵŻCġ¸w§áVĜsĊ€äCÚŝ³d5Ċ; 'À À¨·ÄxĠ EÀ%…h‚Pş5£LaÛİKgyhĵê¸çn˜Ô^Ö5ĴE8*ÓU6*h+ğOı×-ħ‘<wL)`;í `ĝ:àuâeT–×\0"Dâ; &‹ŠòBÁ•šlz* ÑäÈ" µùe†0XˆĠè` †´8-ĥ°˘ZìGï‡ZSC$†tŠŒ€3‚vt fßï˜6s¤†²ŭe"ˆ”EêôxšÂÏÇNе~Ĥ7‚*´µrr ‰ÈɈJâ,ĉç\Ln½´´'7/s‡VcĉFpQħĤ•$·4áÀ{ù!~I]ı=âħ4gћ ύÜİ‹Bĵڞ=×V¤Ĵր4gœ{{{Û¤rt“ŬÀ’ÁÑ4´`/Ž4vYà%˘9K·<\7+&ç`{ßŜ*ÛûE}ĜĤ@*B·;÷³B‡Ŝ¨Ġ"’—̓`˜92Z(ÀK.wßX25 Bí*•'Eü¨àkd3A¸gÊV €Ĥv†œ'*ƒ½üÈ=°-Ğ&ÈñYoLĥçó’ñÄLTEHŜOäwá~şÌq¤ßœšwŬ¨É‹â2Ô¸çĊÙ3™2††\$&uÌNjKI½poÄğ}ŬGàqÉ$ëmĚáé§&`sƒù„ƒÔ9JLù ·16“ç>OŬ`ù‡F‚^YO`íxG%‚†ácĊGžĉ8ëŸ|ÏwèóÇşÔôL|VnİâÜh [Ê_Žo_•bĞ9†Ó_kçĉI‡ ¨ÉüMœè騜“QÏĴÇAĉ @ğ²sA̞%9żµÌÔĴîgv(´ĉ< עœßÏÎ gÇ8„ù+zĉàüñ._´ÜŽĞµúħ²sI)T^ÈÇwğFTl`‘÷ÍS͜AÁ$ "``A’™ (`ĦĤgЎĠÉXIĉOĊƒH3Ĉ:üĝŸ3=•.uçTçó Ĥ¨SóeCà{ubéh?ßò䳟>~/ŭ%òk³Ċ‹‹0…Żâ…-Eħ~j>*áœb›{̀/ĵĞĈŒÚ6³íş[÷|v|_Ä^ó yÏÎ.vĥasö€µHŬ%Î_ÔCŸ]tÈT)!ÍòœißċÉċ'@€À2Q֝°Ġó=GŬ>Ħ É·ŭ”™Ħ”<˜ á`÷îKêÑ=ݐòÊ*wMŭÀl°_ÁŞxġ½ôŭÑÓ3ĜDQ¸ŝÖĝœċgš3zĈŻ]kw‹m8´ĤPvZ,&TĜCx#&m:½Ôxô÷Ĉ>ğÌÛ<ŞòEï7ċ~Ċí| €!˘jú%ÇĊPZ"#7ƒÈ ;+ép3° Ż#ŞS dGŸ”lR:VÄ™ġíA×Ó0§ÊĊ •z×€4mŽ€è‚ш`Ro RdĠ:ÍÈ"Ĥ5ĝż§ûè/5ÀƒaĵŸùNF \J î–àÒz·Ĝ|ğç Ñħ{ÚRl‚Ŝİ H9ž ĞíĦÌÔ+ŠÏžóŻ78žôHD!è§pÂcÏvö³n=òšƒ0Ä&`VjNğ·œwçÛÉbüĝÚ FD6 P0“˜oŽà)y…K÷w)ï$‰Ï"jKyĞĴ¸ĜäˆÙ™†¨ĥ„DöÍÚäLêDLx×h0-ŞĝÔóbŞŞdÊï;UO”Ìäj­-§&9ÄİÍŭܰ{^X|¸r³“ċhŠ@”rnĈ*´ÔÌn,„ƒAàÏ$ğ&™dôú”K§”Isµ<°Â˙ÜQż%i˜š ˆ`â I8|¨*0,C˘¤i˜˙|ÖWZÊy WÖ˘ Ž9+lžî1µ,ĝLÇ(@=ˆPímáAĴ>Ò}"!ŝj7§R=!ùB8Á°93ĥšğ´"~ı,:e7°tĞ îœ"RgN6qx^É×][!½µ½|:NuWÀhtf³6thèÉfÜiŞ7ÉÈcT›*€ İİŠ*™Óş0ıp ¤Ş”9 RXLèÈĵRòg†€v&Ç!\y{Ŝ2‡G\Q Ë\Ĵó;Ku€Ñƒ˘Û¨bi wşFCĦÎɁ'JUÍ`X›J‚W5éphƒ„”0ô;J knÎ"K@èÓ}c+ĵD EÒe à=1ƒ7"2|?/?bRŭċêaRê]ijûv‰äÜqĊy‰0àYÒĠÌÈĴ‹ÉĜÎ/álq‘*~€.‚hdf`’Jöç·iŸ-ìĵôŬ‘UNÇäv{…deċ-5M‰íwİ`Tf…³qċà"GòÍÚÑH—NIŽcĉJ•xŬĉ™V}× @ŠT†ċöĠuİeùĈRštĠнÓ8tU6À„—NáëÎU~F›s"tö?T òĈOIµZé& ,VrîI™]ĥġCç#Òû{­§Ä¸rÓhOf­^(½c Ñ7˜öi_dq G{š–{= xËšóäOĉĈG žhrÑ ĥ.ĦHw€z‘][ĞQëÑ%•Ñ &ö‹) 'Cî”[1ĈĤ–íéô0wZ‹ÇËT\éáûİòċİë“\ĤnÛÓg^£ˆl” ž ĉ÷B`[ĵ,‚Á ÙĦċFÄoÇ´ëÄqÉʲ*ùĝ€]ÍèçĜCŽsDz`dĠRœ"]bÑŻSfìY°Y ĜÛl„ ì@1›šĈ%Ñ‘cµ%pÙBE¨Ŭœzß:ö2,7BÙò@% EK]>nZE…=Ûğ`r¨Ħò”òöPeŠ(ûê<­. {ê?ZİX0^Àh’ƒ€Ôat Ŝğ‘ŜDB9Ö3$éDÛÎşÜĥÇ~Jž” @2ÌUëWÉߟ¨Î¸Ĉíá3(0g wĤ` /Öeސħ;Ékĥ ‘ĴĞÙƒĴāQêĠèäö¨p¸=ĥ+)U%Ĥ(snDh"*Żn ïÑœƒK§˜(€9ŻPï4††ˆÏğIèÑb‘Ġ ¸Ġ‰A,4hîkeŒ’rĈQġgÍdĜfŜ¨[Ġ€#š•·ò"B}WetòŭmċœÎŝòżaü÷™gĞ$ í ï ЁCJ`‰¸żÁ°@€SMï§èkĴ>2sqœh4)è½·‰Ü§ó`›İ#‹Ç§^2>qË'ú\BœàC’(îB‘ÏL‚›#b¸A°Ž´ô-mnÒ,†Î‘<÷×6ĵ.€ŠT“Ô xĦ-­êÎ|÷F΋g?ŸsVı͑­ŜÖ7Ÿsf:8ĵ÷Á\ĉ@2 |Uj â7|ĉ„ĉ ô“Ÿž;é³X<ċlóŬé&>"›´J PpŽ>u–hC% €µ, m]@ ò8Ô C°üù’ĥÁĠY­ m &@şPÍŞŸ_LŜKŝ^B…ŝîr^œûòŭxMş7òoÛߢ‚䲋ÀöDäv:ƒ˜ĝNd:}goϚ\ùŸ7½ğĤöë µ½eìÙu̟,w_ŬîD˘h´GÄŻV ƒ ~\’‡*ĝïŜċdrrôìf U XUÏ2íí<ù(N!š·{Á”‘È$ݲİCH3(j Œ{׍ë=ï4-Áùé¸A}{BLvLFˆö  MèF‚Ñ‘àġVĵYNŭo|œC #”ŬW·/ħçA鐀P6Ü}€½¤'ŸDD+ċ­]M9œ›Bbn(çÙâî;ò ß³ĠMšJ÷r²¤g˘Sş€ 9’ƒR#ŽMï\“ž˜ÀÏS (ƒĠŸŽ>w™†p4ċËÏïä?xˆÙ¨ġ.J*ÜbŸİóÎ ‹½T;\%ƒÒü1·£ „1#†Ċ)„†(0È´7lj`ÉŻ~‹ĉPŻ" ³ï|—ġËÁÁ9I˘7êú˙Z†Tè{Îïç•î#Żg×}vW/ÍıhĊÀÒHŬñÊ@:ënB+|F ;?TŝH$ş”C›"fYş}‚RvT yîzŭïè´5aŒ[)ûIȐÁrŜOT&ċ›_-š6hŻJȈ~ÚË!ƒpĵġ9ŭŸ†ğô'²$ç‡0Ċ&NA>g´ĉŝ³—}ÏÈĊŻmû/rĠó~ qŜߪ!ħj`\\Dl(ŝ^ıH 1 x½Ĥ˙U7áRHLlkBòMï˃‰hW1”öñ#ÎhżRÜPÚb„%_ıvÏ ŬU`ëĊÊ:Îߏ@ĉн£ÛSĊò ‡ż À8IwŸ*×~`lRL€,†pDHR †@ÓFï9g>ġ1⤸K{b—yta7 ěùJgݐŜò=Zĥˆî­"8ŞsĠÊēß%ÖI°é0‚`ÑbÇğéà@ÁwÔ}mî/wÚIšËÄóm+ÇîĵĠ“oMâÁùc`͋ċt£U@÷j’1k{éJë][ĜÊ0.K)dP„> 3_²w|# ·^ m Gǽˁk˘Û‰qÎĴ ç•`ç¸Ü[Ëïl{bi1kd _Œ^>ğĦàħcF–ò’NLw­ùŬ‘­TÏ5ß.X5mjŬEUÄOP"cxFRxÛK3€DGVîxÊĤ?‘ĜA1í11ÄĜ_–—Ôĥhˆ"t jC:FA&bݽ„~Ïċĝ£ĠòçÀ6j€ ĥ%ҐVĊÁ\ĊŸS>Ü’dĦA´³ĈHrr*|ŸÜC4ċżXI”Ÿ´ ‚։•157•fé†VcÁà<'﵍–qĤÀ´Ŝ8Xb.³Ñb›MK밓àJĝ˜8’Ġ ëŭXÉr—X&ü@ í£ĵ­0ô(ǢPäĜŒlIGƒaİóG "5áGόAT{ı¤ûf2yoÎü•‚s۝ZwÑ0ÒYĤ`GŸï²²Ñç–>Q½Üx™FÍÁR⒯ñÁŭ˘ïĜˆa*ħOÖ¨èw.' ùá—Ö{iÔ{ê­J)wĊòp^8É "İT†7'G.aΉ4 ï[yQİÌh|š5HŬwç1.ÄÊÖZîï–1J#ÜŞRIûŻ.âŸcWkÄ·-G6LÏM]ÔçĝOñÖc1óàP½úmñž\ġġÙ­JâŜÚİ,×ûgöyġ/I +‡wiEW J%6„†RwxìëĞÒE2Ħžħƒ£Žt^Nĥl(t0†Üo=ZғtUĠ †0N¸e°§UŽh hÙьL‡ŽsS]\H@ÙeIÁ̍)ĥ´jo}t³˘'FLâœí§£!0ĜP‡S;´ċ@ɔNĥĵ ; E âtœH-&”…ÒĤĀ`0 a’dÑi,ƒ“™?“.ùÌı;γÎÜş´Ìà‹•›"Vò0`yhܛEÒêdÁ(Ċ|7Üàç^°İmĊŬ~H<= .$üÛ=œ— uÓG¸ħGħ0”ž*°]ÎVy{ 8Ŝ}€uWÙx`‘52˜Ruç†ÇnŜt>ŬCî÷&[(7[Ĝœ:§cf.&²‘jaċÍJÊ.ò)—-Q†v°{6‘ŜÑŜg“ĵJ <ĥŻwX!VwCÑ<€6:GŞriçc0Yíb8ĉ‘ŠxjŭYĞğZ*Š Ëĵ5Ĥ8RĜŸÂi('"ċ|°{y]‡GژÀzÉà($eàݧ¨oO¤è›âŠEœµDë½Î~ŞÈ@OŜ6òw· _ÇQKż¨‰ÜšlîWiµ×\öÁ'ÂĈËÒVÏpP-yÀNcĉŽ3ŽœÄB€•˞ĘĈrCx$û3ÂÇÖnĜÜ{°vĴµšz÷ĉZÒ@ZñÉèċ7‹sŒÔK——Ôë7=žaül"9ž}Ú ÁğŒo %ò×İ×Ñ“™ƒSÄzT™šj!I+†ÈŽT`í}×e\Ö@µèġÇ·éì,›;ĜùȄgT閂8$4ŽŠ XĦŝÚX›‹ğĊ!@…Ü(3Pܕœħ#¨şI9P˘BM)£#:D1ÌÍU-ٝħ“‹ Ô(Y0´*l˘ƒ]µ5X‚3’¨XÚÁU;‹˘@÷r à1³3tháĥëfĴĈ´×DÓS§ÂÉu‚sEfÌ †µĠ›ÖċèÔĉ :QÚʸ3&a.–ĴXü ıɊğÎ˙ıĥùvĦ£#dşœ/0!HB-Ċ5ÄvĴ q(c‚ê‘ 82ÓÓĝĴiwó_Ŝ÷ĥÓŞ™€”ÛÍï›.˜1ô§)iBúL+ℰŜÓk^݉Ùl6ċÁ¨úüş°á[ ĤÄ ˘1ÜÄX ˘¤´-Ö;vÇÒE”hBt=Ï\FŒ˘d/'G -Oµ)Í ´Ҝ<Â"„@QXˆ ŠúĈ°ĝ(\’³ĥU9çÇrlˆÑ{Xá4(k˘dBÀ\ ×ıC™j¨€ˆˆîŽ7kjßuÚ[ĉ¨mĈ&Á)/wxK"ʘ*NX@ĉĈŻñ×E ™Iê4DúI7{çğbQpáRFU ^z1íëä›úƒ*XPì:.ğœLĦ0NA(pY‘•£‘PÙ1EÖ-@ħáCԚŠrİ<óÍrĵÂŜ‹Êݐ,BÙ°ZqB&Â%E sǐ~>$^áĉc+\ġP1üÁà› 5*Y:mĉUà;a“x·Ğ0^Û1ĵS’[‚ÁìônÔi– ’ Á+ c@Î<ß²Ùġí³zġ\Ce7Ȥ²Ë‹>ŻÈÜÂrLl( \Ÿ9ıÍQ™Á&‰ŒġˆïUĝÒG)3dB&(·wwĴSBbFC°¸|‚dĝ“ ” ħoĊÒ^ːëVş&j\aP/|O†#W,È`î_“Y‘×[½Û̉pá“÷I ĝ#7‘q!` CFR‚ŠhdPïĠüë żQ)wÉ lzG·„H^3î]Câġc ŠäĞë<yĠ°Kñ z‡dÎĜIJ….ˆBıàà4g@B…Ä(ìĜcÄkPWímÁёáKìäŜlhÊR^š˜:0Ĥ@Äs¨-!FnğtÁÀv ƒ˘ ÂñÀpÉ{J'8njâúà²!¤: 6 {°ëB † vĦ ĵj´G×!Ö´AxCÀÁé 0:­­à[ fÈfcƒAg•Û9Lĉ’W À°Šĉ^ŽdÔ00¤^'šöÉĥ²`4Ê(ÙȨZáĞ tée^§ß Š?Ĉş·S ×O]XŬíâRҘ¤ ¤ë7ŝfö Ÿ6ı Xz˜@AI‚¨^‘êıÉÎ1„â|K1#[ʙ:Ŝsô˘wHħ½ĉoĝWŸßÎÁê·dšábƒÉó‡ßŻküöÉ'NYb­H6X>älJnµñño)” lM‘hBӟ=<}ƒóvިÄ?R› ÉT$Ĉ3óQN´Ĥ̙Pz†˜”ĝ!ħ´´‚Pe˘1ÒaCc‰!£ñüƒƒ¤ž.Ó³Ué]g”ÖŽ38mµSö{}Ÿ4góÁÇñÀ0‚=ÙómG…ÉZ5óÏ7ƒä>³“@’Z*);‰nJR]ôgU×­lÜĜ´hĉH"UQ PĠ{m=°ox |táß%;” œJP#4màñÍÎ$’@…*MLŞgż>>>}§^ÑÎû˜$%;Çĥ8ż 4‹:„Ĥn36ïÏ1¸qÁĴ’S”ÁĠ&¸%ßĵĜğà¸sğeê1ìVßÉÓ×_§`Fx2_fŒƒ`ŽT5 šk9÷†Ċžn y Ù'¨çÇĴ’'  £=“pxˆëVĠ÷~ĵ;%ù8™ßħ¸ÜÏ •uĉ8ħÚá\£‹)l’_|ÖUŞE™ dCÌ 0 ZÀŜu×9¤L-µÈ½–0$!ò=m 1òöë™÷şÒ½ÒÑ Lĉ˜}´ˆoĉ³ĉŸÇWà\œ'á%Hb$ġ–AoY§×Żáö:ùL!т‰h6âÖ*ĉ9E•ħÙ{P„ D‚ĉÚï\^µĜF½³B7ä” À^(ñvù×{ĝ²(ĜÀ?{ü6[m…KR ²Ç€ A|¸‹ĉĝ§fĵġĴ‘Bj‰¨aÛDwÛ4†Ÿh+ƒ.€³z8mUÙJ6ööÁr²°d.œ‚CħË;5œ‰Ñ29ì4#Ż útµ%i 8tX2#N}Ċ!rÊĈ _È"mbÏïáÚħš&Ĝi’H|I$ĉŻo|–lHrIÈ4X‰Éۃ`Y£§Ż}r8#ßE4q2l˘!ÑŠG *plJö?g#€òFšàSaïïfŜ~üÏ|ïAße½ A@÷• PĴ¸xòİ™…›^‚`ÄĊ#|ˢà0ˢŻBlĥ(|À!YÎy·š†ĴAC}!&B=ZoÇ?˜äŽ´-E%Y/L Ôş÷çĊTiġ^éÏv|ç`ÏŭЏÄ?Öâë,ùŸUm:JJK‰à° ~pr?N|[I–U`GĊŻeàŻL'}¤jÇçYG‡óğĦâô;xÈŝx™„˙4˘~ÖIHRCCĥ†Í²Ì[ŸŽu%Ĝˆ>qFŻ{|GžĜëaŽ÷Û d;Ĉ¨!íT@‰;…ôú”r‚˘ Ĝĥeòäl.|µûıġì›p–@!NıR1xí×:@·iäyuzĵÓşX ÖÛÎÔ ÀD$}¤ğî€ú>üáü—çµ:qK'_6İ˃şp†DnX`€˜3`”aQ ÂkWÉöğ•1Ĉœï:žíu73Ġ{ĈÚ^Ġ}•9h][“šêCˆ-wÁs~oR]‚ĤS†ƒÁñ!D#çż4ĝîO,á ÉDÌ‚ *zŜqàŞñÜÉuƒBŝöaëZŭÒhŸŽÏN‹żFùƒôw,ŭû ¤ˆ€x€wöċšB÷aġÈ)+6¤…Ĝeïr¨î@àoĥ°›'mvëӓ*O$8üȜ¤Èô•´ż ŜËQ2ûÍ5Ù/‹4Ï“ĝHE‡)™·•à ¨7  ÷§Ĉ‘–ŞšDß3˜Ùß8Ĵ÷ÑÏqÇdfcżT™ÇÉß'rnÜŬÂ>·4$ŭì™L  §À^âuïÍyCl ÀL€†h „CŜ%°5B‘„V\Z)Ó İ€ˆZbÛL Ä@ÄDòàv, ‰âE  ”E€S$AJ?²?d321ž{9À9HžP{€A A@Zw°,HĴ*Á ‚`(iˆ5œ-Q­AïNÌ=ñħMì X¨FˆRAƒâƒ  H°‹dï*ġ­E# ¤K€xÀħ "$:Ğ脉Ŝ- Ż]ġĦ0É(Œ"‰A’ ÂS6‰ĵÙïz B È d`²ÈH”ŻZ¤0†Nĝ÷ó|Ï~v!À€§L¤HEF]ĵ­0Ħ’4 CH”Y " 2ŸĴ܃ùÇëKëfÁàBRĉ(Z„ÍĊ@Ĉ|ĵğç=ÄLùÄJ“Ó]Ž'„.˜²<8" ¤ìħ†d!yyĤœÚ=­î /&î…™Ù%ĞÈ)îßIJúnDYëĝ—ÀšJZKVE7y‹3QîC*#CSò; ‡ŜS™‡ĝ·[aĵ4gÓ*×_ĦyQ b0LI5çú —(N-Fˆúŝ‘}È´b*ß·Ċ3:px·B³„î(ÏJĴòyè•ÔŜY~]#ñ-pĤĊ0ÑŜ­ÚÍLA}ħĠV$zšS%FU:3ÜNnŒŞĊ˜İy!rSÌ<'[a„Ĥü™îk$*=[û á2’f _żÜ^ù‹é‡^‹?Žg 5ˆé³"Dx‹˘5Ġ`XĞ0’`xˆD½xšTkVġİb'ƒ…ĊĈd먀V$ 92bbˆ8@&TAnûAžèxÂ"ĤMV²äòXŠô™ƒŭï?ĜWï²4ÂÉĦñ< -Ôˑ~zUaíY3‹É:€UBıÍñaŬG9~ĴNsMÚŸĉ%[dzfÈ ßğg„ÈœĊÛİÑÀ°à½?È7A.R4ħ Ġ,b5ö"dˆ´ÁµUt‰{ÑÌKnċ“áÏ”áÒ MW"ñóğcqĝ| =uƒÒ֗LÍÁ§‘‡7šñĵ÷FïeÙdl²]hÀ*˘îìÔHgÌFyÌÔdP˜pHʈ`<$–• &‘œb Áp0o—ä–ı+oP-:Ş ‚gŜħQÔoMáċUĞúj|äKĴKl÷ ħŒJŒ˘c‘ żxê(Çf‡œC6ŜŞ!¸ğ|`Ĵú‹íuÈèór°Ž8”=d$(Â#‘tQ'‡F6sÌ>ç=˜7N–ÏX İRĝhôJ KÈÀCÜ´,î^ĦÊO,(Jäż·ÔzĈïD@/¸„A)JİëuÎ|ç\pĦmšŒŽCˆc:ÖŜ›/‡@lÇPÖ“†DÁ°âêt:%0ÊiŽIÀç%_ 8ä0བÛféÀŻVïËeY ‰Uìè:báryL&‰·§‰E?~ÙÖÙĦ.™áR…‡İö0ür{Ša÷ŜŬa'4£ŜL^¸é½AÎ÷YŸAY8÷–ĵ…ÈŬcmáı' ċù&Îĉ}::Ìf˜­hĴċ‚›·ċ ×4Ñ0Ħ‘ñMĝ’ß•[›C@´Ĉé ² 'µš÷{ħĴŭÄNNĉŜ+îM@yïğmÌÓl8­ eİÁŝú°›ê aü{Š{ĉ•$…[ôy[Ŭ0€ÉYİ`%Ĥ8 ÷MĞĥb“Ŝı_kó4–úóˇĜċ½e½Äž²ÇĴuíĠJ,Ô\tU,MNç€93‚E@ëÙĴê›Üż=ïŝQ'XqèÍ9£N÷xg†‰mĵ>ï“מñĵÉàœ8bêÁ`€’;_)§I“Fuz|„ƒxĝ}Ϗ5–OämŒĤñ@¨yı6éµ û4•VfCôÒE[ŻpŭËkÄ@eì=˧T!aÄ[>$a=’oJĤÛ"ğÑaĜh„` ›pÁwUŜê)jShKf_@“xsĞb†„‚r7èo/税O@7á‘plÏĥ_Ÿ€cp§S ˆÄ„ ›{jqmdsSÌbSĉ _!#ż uĉŽ+:Ìi…ĞVü>q˙4VQf ˆĞ*½`­à0AAÊThŞî•"Œ*˜Aèa&}! *âġ§\B“6mƒ%KEä~giq¤ŒM>}ÖKsŽÖzç·X,2 QŻKUŭäĝŝĝQü%™sW?\WÑżfîŒpíı(Œlo>ï“éˆ@@ÀqÂ)& „`œÀ½>ÄMš‡1ΜB˘ŞöËË't˘IECúq@=ĵœ™Ŝy0â:{İÏĉ—ò@ú ”ŒĠPx0GÇd€ëÛyÁÑ}dÂ0ġÇÄK…-FĤ>˙ï\ġÈĦÄ#a™CY]Z}átJqïĴ™WY)3çï^8ó–xÚ1Uñ†xNòzEá$G›sÏC×|ôf~"0ÒÒnKÓËxÈ0ÇÉ-Ŭ2+‚&‡ŻŸ0L‰ĞèNĜ˜éçM=ùu)ŬèLîâ ß ÈêğËÇ[ħrˇŬ“ĥĞÔ+ £1…GˆŻZc˜ŽÒ„{…(@\:pQJˌyŜ÷|8ä·Ùü‹Ŭûù0ٟÛ1ĥġ­[ġ‰‹ß]{÷?2À܎Ž(Á˜;Ì˘„TŠš1ÇwĥqĤ4  Z[ÏŬg:05ċ9ÖzŜ.÷R#P"÷çXÀ`B0œd&üAç8A3ÖgbŞu=Í  P #ßv࣐Ña_žù²6$$ƒŽs×Ï·|ßÎv†;‰@[ÚĠt-ók ‘PÂm†1Àħ–ù¤C Ċċ@qœÚÄù쟐î\·”…‰gù‚şœï7X.µ‹Ï’,AÚŽÑ0Àŭ/4'mi×{n·;½n=ÑĤşġó$ż0>CLöDĝô^ĝ>n66ŻBċQ‚ϏĥQ“Ï ggĤÖìĦWÚ@=â ÙÚ>aòâluñÖpqÑßE‚ĝ„´ Ǟqèœ ´B–8oóÏZ´öjÑR¤1xñê™,Ħ'È" ÀmKkò}@P,>TRÉ P˘ƒœŽ$Ô Äĉúâ‰L\€=z/ïg.şŠ͝ĜßÊ ‰LÙ]ĝ:ï{Œcž¸šƒ˜e ş[CŒIuxމÇs3ÀG@jĊ c¸’ádh8n —·şf,ĴŻ ÍHüQ͗„†ò”ˆÊ÷ŬAÛàD¨;Š,‚‰ÔCĈ=9âñEœ$‡EŒ’/v¸Nµ1ÜÖÈê]9­‰âI2!(À!5Ċ·ÄĤ_ ° Ĝ@™<‡Ž]á‚"h´üçÌO/nq´żŜQŞDx„6­kÉ;h'Ïħíם44W Ç`ä(à‚rEı½Ş­Ĥ îûp;2%„F—OP8Orf=,”t‰‹I)Öóì)ÀR`À9AcwoÓ&²ígŠWp̞’—Ô0WbŠ‹Ĥ7Êĝà‘żytñ3àAI‰?kŜ_ĵ-ù†½‚fBğ6‡Üˆp­Vŭ÷f9ë^ĉLˆ ğĊ›üë–÷2ÙMĉTcP]D gƒGŬVŭġGı@8ƒ9^x½}`U1ŜÀ’MŭO²2×Ú2TïSLÛê‡0cyĵùÀúvQĠĠ›[žn°ğ“)ü ò}תĴZJɏżòWñ³‚.aˆœ! `ĵdĦ‡™Û6gêw>^|uQߞFš~.IJjxŬ]Ž_´÷/z]>×,Xŝh#:çDIL÷=uüvpœlŝ'}”)Nó{ێ %BŭâŜÙ’<ȘħXßµT{÷:Ş$4ú´N!jz<úê×ċbb#{™ġíá³âú=ĦzöĈ Q v` ĵ›€:ñkçĊ[ïiÊy<8ŻRċ=İ]“"1'TŞĥÚİU…çŜ;Bè셎ɎvV“ì:œ·aŬߙX •7ÄÏ"Ú°ZPBIFß3ݧìOŸĠ-ĉäûĊ7xŽxñĝŻħ‰~}N˘ú5àƒ÷hBÓċT̸=qEĵœ6ı'Azĝ=ĵg›r‚|L()ÏZġ£Wşa U ‘…( ëĠq6ŜüqòßĤÈQr˘ÇżZϏĉâ‘ßWM'\KÜè @A€nŬt`àdA¨a^üÖ·Á<À]üFm˘&VŻ;zĥıŠĜÚgïn³ŭaÍ´‡Ï”Á˘+j•éxĜĞ_o_´Öûu˜,Ù2/ÇĊ]ü‚(~ù*FE4DŒCĈ˜fĊßeJ•xgĉ+‘d|YùĈS‰ù= 2;]âĈnöçI•‡šÙhİ„MoKžċ%Ûpv}!Ş%ZE9O*BϙDÔèäıV°’‹%Dàôܛ§pÙ¸[› *ÑBôœ0„şRbá Áu‰~{"Gà×&Ŭ‰ñ>0]b5*ëĠ9İ+Éw–K\ċŒV\³;yœ7ß gyY.­Î!>ĠO•ƒÂ΄`– !ì'´ 8Ü4ôĜäĤȽ|h%^È6tGŽ8N$&É4 ŭ¤[­[kC°Í´zG^1ÈKġÙ1?N8ÓËVÁÓ­‰Cs)‹mşä[ŽŒéħXBĉĞvµ†ORDŭH…@Èt$”Aâ1iÉ]ȤôĜ 0Ü£ĊòzxÂË(ˆ|ĉì1!ž€#…"=ÑnJµ‹š—ƒ>ĠDÄ;ÉL3›´XD˵íkv×ÒóѰĜĊIšÚsš'2cÈéÖÒ1™ŒHğh–Pˆöș°ĜÓíû‘\;ëÓü  ióċ£úŬžµ„ïĤȝžVZŬڞ;ùŬ[äîj%cĉ ´²vÀĜm‚$À {d‚‚`â@ğ°ġñuWbÁ5 0Päb*\^ĦNMĥ`âċ0ġ£zċ'EY,Žè1s4d6frmÌáäôÇ928C:všL)fá™ihb÷Èpè˒tg‰·y&\FAÓ²eC‡Jt9:Hf-˜Ӏébt×4š ÂÓćNÈkhʇHìá£CÀ£iƒ£kƒ£E½A#ѰG@ aAƒĥĴâGusĉǵ÷mğ…=iDŜ÷TmÛĤÎd„Ċfé6eí”H™şÏdúĉ=o/\ ÓEÀ´ıxz÷~xEÏO ˜Ë@˘r*áh„ÜŬèÓĦŠd­ñ§,€;Ħ€Úl°`ô¨Ùï-ġCŠĤĝlğ] ÛÏv.9Ü^ Ĝ £"GkħӇ%ë~ÑñĴÏ~Í ‡t‘Ŝ³fL-u§3xڅÁħ`Zı ³9ısŸ­› zßASQĈ=ÔeoÔö9q½vNNvÁ ‰¸ĉòé˜2.št<ç,ĴúŭJpœ ĵ—ĊÇ •ä3àÂLèòWSĞà$D8t-^n6ĉó_ĵ’2 î‘JğìSó„–0 ğ;÷o¨ŜĤz1CÔè;äü‘.Öc"i= Ş(Ôi#vÌÚ$[&àHÙQdU hf!0ġÚ#ìg”ĝÚìĴ@}i ÍbġµJىĠ#[ŽAo û·Ÿ.ġ×rN˘•Yħf„ aèg[41Ô÷|ċ1ıÒÀ„ġ-×ıÉî.P§ò{zĈĉ9•0Y9oÂNœxJMòèFTûİĈĉ ÛXŝ )ú›Òs„lV*Qe£‘Ĉn+,Lk/g°ħ–éÄ˙hCˆ$Pĝ†‚p@@âÁCµM1Ug0p¨òġiEi²[´½AÁ™İ&Pğ@(!•Ŝ76d¨zv³ ñg4³qkGLu jŞfĞwwunĉ P 0*·†äĤ^¨³­œ+œf5Ğ'Z5|4n³…g-lÁŠyÖ͘–ĞĴLĈé³(Ĵj Ĝkwb€`'ûM²]Şs1½…4àeyŜ—‚XçA\ċáе T I$Êû0ó2}s·ĤeżhÊZFž÷T^-Š5};ñááµMZÛîO!ƒ˘’6üıl‡[Ё×E1˜T JŠA‚Ĉ!"¸ğÑ TóĞE.³uĞğ—×*ñˆU³w›Í`ğIm ‰2Sˆ ĴwlÍâ! €WÉ3‡›uIÙÉ@<ŽE#v$‡RcŒeĵ{ÁväÑkLħŠB)¸‰M tpJ “mD†@ÌĜ Ġê"T>bAu>0éöñFÍ=˜W(ïY‹ZĠQ$÷ˆ÷cċÏ1Ę. L0D)ˆżĵÑÎL6>µíí6 /;µŻG"ŽŬ\I/™×sšıbŝhêžd88Nh‘/Aâ,+ìçŞêjŠStc€ÈéRš˘²†ˆĜ 5sGġÍzS’ĈÚ`adĦ‚`fĝÊá=|²çï܁—B t‡h¨öÜë²L šEFи·×q[ǜĠàE0V’ĉÖÊ2^É*7“0ÖkUm]GŜqġ3'Ha(àR ¤d0d´ñh~\ş£ |ĉ)QĞDU³“áé “ħİŭ0zëeLż眙=ôEıħV„J€żd‚ú’8ê·xsŠ´ÑwUL`ñ‚h½^”~BĜnJ€Ô |²`ĤĉJ6ĦFûœy' NDƒİ”óĵpĦêJ‰¨*ç(°€âŸ‹ÖŻgò ֖Jkm 75қïŻ6Ş6ëŒË¤İäF"­-(ˆÈĦ#’sGoêŝž¤á–KZĜŽÏS&6ñkĠĦsĜwÁ¤ıĠùÙOş2ŭvµàÑ9ŒÍŭ=Ĥ\†C^Ŝ˘ú6|c¨½=fP@¨­à('~~áÏ[­úkp45éëŒFN `€1óDB2R˘ŽC8ĉ`PTL[@™.GP— DH[P70QíKàœY0VސŜÎ59] S`'/'âħÍV†öĚ?îµmL$…‘CŞrЉͭ-çgGż!><œVP‘h>şß şkk—Ĵ„᯷ ˜‰£k59‰}Ĉ†ĈûßbµëŜÁI|8†ƒ0_‰ç˜ĥ:9ĝ âG˜x´£ĝdD_)Ĉ˙/cCdR*… œĝ4™YR@"bŜLŸzħ&"תµT``úħ^ħER"á°Ì9uğ`żEti">.ñSžıë-ˆ`Uяâ;GU¨Ş”~˘3šİ8SOÎSŞÍ‚TL $}â]IUñQ(ɂˆouˆ½˜vYg!^ žıñŽñÜs8œLÛ=§xƒÛTž(ÚÛm7Î]0?Ŝ ,j¨¤ĈôëK|t\\uD<’ä@r …òHdÍU^=¨Íñ{îÙöÇ| Ü+²…Ĝ(‚Wˆ“š3ñUáurßGŸÛÑV@@ LfcÉÁ½G.lF.ş™™Ì#À@À@À£Ŝ:hqßµF) ĈgFˆ9”Ħ†ŬžD4'*14‰(œŽ CÇ|Ë{ÂÈŻ=g—/hÈCÀ1bR@EF=àĠ÷9ĴJ5ßo#Ü_^¸›gÖb›ĦĴñ5|âĝ”~AŽèşZ2ó%ħŝŬgόpiçßdô­ĵrgÛY¸>[šıİd= 8ŠˆĤ|ÜÛgaŽÈ)Ş,X‹Â!NŜâQ† €€šq…š‚)0 İ„ĥ(éŞ&̂-(D |Éù½ĜÑiAÌŝDĜ2‰ñŠôLjq7ß$ñÉœĝd0íqïÒ¤ddd`£˘Lk‰´>Èqœˆ7HÈsZOş˜oħÍäsŜǛ}³IÑğ5ÍôŸ<×9ï7w÷C䌠œAڈ/l.hL0-*àa˘0ûž= •ÂB*d§™M[½î[q2)ğ<~éÚ^¤ž½OÍ(ŭ@ ¤ÇòÓ-ۖÜ¸ŭıύĝͽìrIÀËX G˜o}şêx÷ú³šC›;,Á”É“tÄӐÀgÁŒŜD(ÙLkŸjÎĴfñ£[o·­üÓŜˆĞ–˜ÀÜZᑠP>=ŻzS!P€ şÚÈŜ}tÈä8ŝàï7]FÊjÒÁ{YxŭDjNZhAÄÁ ÷Íò|xñ[™8÷XûĤŬ§"U ˆœ40€È ÷g—Îpċ}¸ƒ_+'yÖvêĥœ îîĦ͂K…kzy=ùm ‰1ĵôڐcZEx˘´áĞÚj;²0pôé)Â2 ´'ƒÀĥ@>.#žĥ­Ê?cQ÷ı:~ï^ÑżNWĞŜ+iQıœT>É|$DùÑÙ½++ÌĉcZÑ}¸ Â@G “DûfWÀ9ħñïż7ÔgŸmĉlm܏´Ì3jŝ!×íǞji›#-$Ž|ï&6ĤY„Ĵ˙+£%jòĠoŠ–üݐ֝gmx:÷˜ĵ|†àÁúĵNĵ1!cí)ˆìG§(l“Ë‹–çKÊ\1rDÍÍc–ĈéÖû䜀D‹óxğUŻw¨‹[g[­'­+yêCfr&h²Ş| 0XNó3üDFBšħ˜K€@AËLAâlÚUîyĠ´KĤb ŞVUċ“17I í,3í¸\–•¤êZ½E<ÌÄB 3K cé €Û¤;£]³ƒÒxe[{%X ]³‹£ò8Ĝ8…Ôûżâĝƒí HBĵ%Ç5$ƒ‰–k ™Ñ€żEìO¨|Àö›\Ġ’·¨a Npĉ=…_*]üRgÉ\¨òó ƒ”úĠiĦˆÍL@„d‹ÙoPI7 fnpŞèEċԅ…X ŠqĦ5ù-š°îöċ0Êê-ı™~ÜÜÎ)avĴ\“uÍW­.ŬL¨ŸqıdĝÌ[Ç5.tx)„=b=µD´"oĉ2b";BAóÁœà×͈ÊhVJ *şŸÀÀ[ üŬ{Ο?ET³™*À Öb@d€›Ï› ġT,,cŜ²È9zHÌ¸ĥ`V8a+fßǜ<RİvšĵĠu„YT)ğÀA›D8Ĉ-çpê“£}l;k­ñž;h]Ċ(G³-ˆé#ÜĦ>L%*ĤĈ0 ñ;xzè#)îj[ܗèĈ`(NgyŒ„ĵ̤„Ħ1ı‚ĵsè äc@Ğ#4| TÊ+=¤(ǎŽÄD%PH‡yATÄv üW&g`@ô›Ĝ:ĝÀ3Pcâëa–u÷QqÊqş—’–Ğšr/t#ˆWsċıßÜñ4NxJ6ÇKˆôˆ1²6›ìy³Ğ{Ĝ=3kĈòß ĝ,ŸNÚĵ[“Ğœœħĉ ­ÔLq*wBTˆusë_Ğħ‡e“iwPöyßC(öù{Ġ€ Ì(hîzêÁ Á€:4°è§™é£ ş kX1É( Ü8·GE›Î!42ÌmvtÁZ²ÁÎ ½QgħêFž°Ey‡ ÈtŽĞÎuLj^Šš&=<8qşÎG%Ù£Ħ1cĈ!·V‚€„"ÈÂ#ƒœó™š­Öĝ›hÁ–KɎyĈş1\ıÀŽ„sŜßR ˗Bcr’+ÛÊ1EIô6UQN‚k/Ùvúµ1j°/aà<ä‰$çğ2ĤsFœżPc~1/=VoY >š„è.°Éµı,ŸHšİT'§̧G[LÙ1ÀϚ} ĵ(a€ßs6Ò§™ƒñêPó[•àWRK °•ŝ;w’´5á=UQxTž ;šÜ·„Ái³NÒ!òŜ|WÖʲŽjÙmqGGċ‘†Ş(E§— ÑdÍ „ê›fòö~§•€Ö‹z·îüC]ĝ’[҇ç’~s]Jë¤ós`{‰6ì"j£bám˜p‘ı:GĠÒ¸ #"WšÊŻ`HŬ8‚Žucò §gĴ”•Q!ki^-óş+3œŻ*ĤŠ Ž÷s׀Pç-}™grĵSAfà1ŽïBÖݧ’èq"bVJÈmˆ ĉšHz÷ñĴ…ïCŬèĉ2Gx½]žġ5…h‚ĝ ì›%Ó%ê<:ĉĜ½É/.šġùD&H&ĴxÀp„½ ù;·]óĈL mPèGĜġ 2.PÊ 2”]J˜aÊ,6kzÍQşÙıî W4ž`ĊŻMû·~3ӐıhSaJ”€ŒC'š;ĊVÂ~›Á`N ^ ƒ£‘ÁÈ<Ħ•¸ĥ‚ô–€Ċßj- `¤à0í`­ Ap-Ÿ9·ˆï*¸Â„Œ”Ħ1e# „Ôˆ& ÙDĉ8Ġ[Ž„@²Ĥ Ž‘Ħ9  ğ Ž£0à@0ĵ]o˜àpÚ-–#ħadĉ0àOŸ6ן;ŒËö Jʐ¸^"ùĤÖİ_9µË’Tt4@bğRĉ"@ôSZÎüŞzDF^7 N´×ÜĞrñ3;IKÊŬ[U{ÇŻ­&„ê'hQĝ ‚A‡,i0F,2ĜV­nĵĜŬo]ŞÇh(€Ö_b›ñ-“7žüĠɌĉS>žœQ^û‰wħö…°òŞħt|p ¨ñżn2Ħ‰çY˜(SDè8ĊÉBı&à†‡QˆyTŠ_òp @’ñaòBÖ. ÌÊG ô™à¤á6fù= şä°j%ĝĊ<{ġĊşĈa¤à‘JC’Ö<ÁP…ó íç—<÷܆òÌ,ċ1s€,*k@RħÈ j÷Ú׎µÎ/%°pqä-Ĥ2´…âù_ V9Ġ:‡@;E Àö·›[c¨ġԏÖU3CÂCëâÁƒÎ}Ĉ<(<‘)2%ÀgFŜŝßۖŸáüFM·0Żù˘al—2ӈÑŝiğÉÜ p„0F°ˆDĥHİqíìÄo>a÷Ôg–üV;m£Ìëş(?Mˆb";ñ˜ 2ùñKxĝĥ}ĝ꜎ĉĜVòžoFÒäL—RÔDfËáüÜŬê€Âƒüûùĥ}z`HB &:³Ŭ\ĊĴœVó“h°êMì5#Ef{Eµ sëd5Œ>ĥ„dD#é'ÁÏx£LÁ´L#)(ÊÀ>|H èèy·;çW.ɢáħTZÀêI/\ÜeÖg(HXĤàR’­r­…Ë’%È5iLeŜ,nÌzġA^ uoµô {Ğ–ušċG(5*çN,œ@½5İıîÙVçG˜·™|‹€.! ‘­8.ÂßĦ¸=k%ĴĥnıĈÙXÎySîìÚ5żo‰ßsÈ|^dÏGçùD8Üv7uJA€•óç…z>à`‚Ì5İİ_†Ì+àˆçî 0B ŞWĊÁ[×2²'ê§Xœ¤·b–MM‰ĤۓVmœ–ž´9 o…KóŽIİKYsòċġÓ£=RùĴÂ!A›SbÄÁ!â6c´—’1Š {†Şù·\J7"` Bwñ~ݜg£œ‘eñ\byÈ%à 0(lÙċTo-í—ä£ÏÎUEÒ­Ż–Ŭ|ž?w4Á¨‡êżC̒+ Œ›/¤üŜKQ4¸=¸h¸œh=½2Ë U öKœĴò{=Şß‚Í‚€$Š%ĊÀ~lKŸŜxrC¸U·žƒœd8G5íV…:ò^Ú fò\% Ëâ€ŬU½şÏxßôVİ->dğ½g΃ż‡PċÉŬpìß(<Ħ`àQnJnMGgŽşĊ:6ZzH=R—e'j Ĉ3^\Ç „!³GR: ċʌ²ĞU¨nà)°ċ&ˆwÑġD) RĦ‘( EßU{ï[—Ż$òey³somížRĵŠ|òm (E$P ·„`€Ĉ~ɘUŽR4ûğZLû²ÓŞ Ûş(rYo¨Ê™Ìîvċ\}]ğ— j>¸)"Ĵ“\€Kô>SáˆĞd&x÷럺óžı:'RJ”Ġ–$lĵ7Ó£œDáż9a™ëĵäìS¨,Ú¨Ĉe,³â݃p½o7yƒt`ñ;ıŻżžà '¤ À§C AyoŻië–7Ä ö ÷Љ<ÎĝĉğA cF)>ü N$”ı+ħ3¨:÷cİ@‰°A‚‘ù“Ç:m´9ÔaĞ:ŒM0êRâšrvÈ8ŞhĈÊĦJÚJ“Òw{+‚àPßx\sÖÖĤùçàó.Ĝ'6‘×îs`.ô|ҜëOáúd‚·ĉ˙5ƒƒ“[ŸN}ŝ˙Lgr£.˘ NçÏèE†l†;ËÁ\êLÜşs |WÌAĜû#%k˘/ħ£gi‚ƒ*İE½Xġ¨pZXD'hñ¨y۟G6< !šo—:;Q“Jîı)@hȈá[pDĜ„œÈîúdħEĵXŽš3ĊêòLÑZ%żšFMU;|8”^]73ä·Pói{ï“p|daŒĴ(à Ñ;=šoHyŬáW,ÏĠ‡£ ì›äöşœĉ ‘ġ_QxtÁTx\ßۑ<ĝÉËÀÁ¸ŬBšŞñĥcYÍfƒ2"^ͤŒI„ƒ÷‘ĥ/Ċüĝ݁œÌHƒ„Ίŭ2 £ñ:a™‘Ë­ŝÄf9Ŝ(¤ıŻŻÛAŒ´·\‚öĈ‰ˆˆċ½ìùÇL@Œ+J!Ê^ú€ÔkŞ‹Ÿ9;†T§×Ü1ĠšòS8’:>mµ ˑÜċĠ"ħá²ĥğAıĦİ1’d„tÙ7ş}s~òÇ+ËQV'Ñ[D!ħj—XŝÏ Ĝ–ÁĊĝ÷ż!{Ĉ`ëß½ŬÌ'&`Ĵڏ?wž€œòöħè3†İoµÇ<×ç;ĥĦÔ@ê§B(ïHaK`VOïfH›×›ÙœôÀ!ÈÏ.ħ9Óx)tۋwû½Zk×{äšĤGȐ`ğçIókȐ˜+06"‰ïrúj³XÖÈü‹Î|œßdvĠx í‘x†?f{Ö6úVF×_Tè%5t>jnaíŭ›ùġŭRÜÇÖĥtˆÜèßËM?×ⲝÚ§ÒIŝû tċàƒëë”VhBħލğN20é+g{ŞYÙ;´îlrI HœFçÌNk<V÷€@Rߞİ]7Ûlç&z@YcA0[KdwqÚÜRˆÎf`PΐÇG†yiä›&c£t…`N 4˜HôŸTİ n‘Ğ7iÚħ:xħÑĊmt¨>4fĈ{~Ö-— YŬ֔öc2·YŒ398§bŝ9}Ñġò—ß>³L8ŭ'M[°IĜè`÷Ÿ°833Sċ=roŒ_Ž›ùçM2dr÷Żžìl+q°·yòĵ!cĉĤDu$f- Ĵ‘Ï,ùŻĤñšÇĈ|2rHÂ@ /x˘ĴDh@Mfğ>ÊÊ<ÍMß Ïħĥ —jvÛÀ´€o!T—ÒÌ0!6Ĝ–›Ĥ ĝBĦBArY„9LtÛx…ğÑ]'·4jV½ìÍ(B€ä=ɒ7ŜJ†—ê!zÒ÷Ùp ²şĊħäbúêñK8ĝžzr…%ĤcCÍğ Mƒ™ !H8ç#‘|!İ l°ržu´ËîêSóK)[Ÿ'ż½³ë­Z\/|ĉ Èëĉïġ§ƒä3 Äġ ™˜ÉÙêÄ;`hĉhÊÛĴn ÷]ìŸşÙÉ$ ĝΘ“È›ıË*9[Àˆ‚0Xâ~Ù S›qjCD &#3}<—ĉ(³à2v45@Ú`˙ €´°Gà—"ÊĕùŞ>òrÈ"$|¨A‘%òŽħĠâċ`ŞÖ1ŝˆĦû…NÊ"İ@À"w‘bbĂĴPBQˆĴE¨Á€Ħ"ARD Ċ`Dd‚ˆF1T$QXA (A„bĊV °„ Ĉ)ħ"X0ĴEQŠA‘¨Ĉ@‹$ ’!X‚b A „"¤ 2@€¤‹ħ#( €(("0‚1c BÈD ˆ$bDƒ!‘*ÄH ŒdbD‰‘E’H)0VEd@H€ħ Â)a"„YƒB*²*€Ĵ€ ˆ ŠEA ü¤cUEˆˆˆ ˆ¨Š¨Šİ1ŒbħŠŞĥԉ-ވĈ"""*"`†#ÁŒDDA ĊDcĊTDT‰ĊV1ƒDcĊTUÀ–R”UTDcĉÄEV1Uƒ´””B‚˘1Š¨ŠˆˆˆˆŞ¨ˆŠˆ¨ŠĥKUUUPA"D Q $DcUQ$H‘ÈRŠÁƒˆÀ`` W˘ " ‚ … H˘ŞÈȨˆŠ¸$0¨@c c¨ŠˆĥÖ1€À`ÁUUl„$-ddcË!jÛXÄEDcĊ¸‚ "$I€ĥ–ŞŞŞŞ°`ˆˆÀ`*"Ĵe ,DDUc(XXP’‘‘“Ġ`ÁQW Ş’$Šİ 22*ħˆŒcĈ+Ĵ ‚&1 A0DDT‰ĊTDUDTTEV1UYÚ´”˘­ PAŒUUV1Q(`d ‰ˆˆ‚ ˆĴb˘.%’BHR„ĦĊDc€ ĦJ1ˆ Ĵb"*DˆŠŞĴ˘*"#ˆŞÁ‚#ŞĴ1Œb˘0 ˆˆ¨ˆˆˆŠŞŞˆĞi)UR$AFFL–.Ġ@@TLRˆˆŠÁ‚â”c-İ. PC–*˘*˘"ZII, QUҊĥBB”Uc0cĉFŒAdUD³TDUTL°`ˆŞĴb* ‚##"ħˆŠˆ¨ŠÁ‚Ş"˘*  [ 1"DATF ŒU°Â€"â‚°`¨‹lħQĊUDDddDdd–*ŞŞ%µQAn SUcXĈ ÄEDVAVFDF ĊAVFEÀ@µ‘‘0aJZĴ’U%$’F6ĞrîHB µU˘Œ*ŞŞÁƒ#"-’…U°Ҍbà0$a0`VFD‰AŒ´”ŠĴ*˘*ħŠ´$°–Œ`Â1’²’’µ¸Ş…ÜŒT‰AUU"DF1R$DD´(*ħŠŞÁ‚ÛUQ„a)jħˆŠĈ*­ÀCTF ŒÄµQAXĊUH‘QU"ET‰ŒDUDDc0VHÉ-ŞĈ*" ‚ŞŞ-””‹d…²’‘ŒT"ƒ²ħŠŞˆ¨ˆˆŠˆĈ0‰"1ˆŠ¨ˆ–JQ‘’”ĤĠDDcAXĊV1ŒV1Ûj"#‹,c$AUÄ!ÔEDÀb€À[U"EDV2„-D–-„’”UÄ%(Ĉ1ŠŞĈ1ˆŠ¨ŒŒˆˆ‹‹YXĊUUTEAUDĥŞħˆŒb˘*#ˆ¨Š‚ Ş€€¨‰‚##"#‚ "22220`ŞĴbħˆˆˆ!e(Ĉ"1”–Ş˘P·@HBâ* H0 ŭ?ÚŝGôŝïÛŭĠ˙ùzÏ!˙ˆüĠGû³˙Qŝpxçùû?@O~Iì˜=YHëQìw+o†Ŭt¨Sâ÷êŽĝ›u|û3e7ñ¨ÏŸ‚Ö)÷˙Q4 ‰?x„JÚUħ€˘YgŸŭ#˙ƒó ñòĝûyúXÖ˙Ûĵ_2};vü~ß`,ˆƒ$ǂ*ŞŞŞ(ŒŠŞŞŞŞ˘*ŞŞŞŞŞŞ˘*ŞŞŞŞŞŞŞŞŞŞ‚ CùUUaŭ•UUUUUTEW?Ÿó $ù'ŝŸ_ıžDDEuóuWçÄï‘2Ev j„J×ù1ü}½użF™˙ x7úyâ'ËÍżُÜR~?~z,'÷Äú÷żîü§äŸ”żnÂŝʽ~Ïî‡èUEĝüĉÌŭà“ß3·>šbŸĉÇAdïêpHE ¤ "QÀİ!RAŒ"¨aPˆ@¸ JU,U¤ T à*4j ˆ¨â0ĝ¤’˜(J’Š ! °€,@Ȓ)€$A R!PRĉ „`Èb dˆDĜ1B ÄH‚ €‘ĦhCŬì{ûX} w"ĵÒ/ĉ˘(@7żošşĉŻ×ċż ù\a@Ó¨ö-'Â˙Ha} G&$ (ZH”( %B €´÷ˆ!E"B İf… Â?oŽz’Ñl ßĉ¸ûĝÁŭ*â¨`…oĞù^ğöUßÍqíû~^0ëÛİÜ[Ŝt(qgġŭS…;—˙>³_?…ó|TŝyïŞğ­0’,1Kɔpŝ\ÀĠŠ ,¤†T°sÛôĊıQ•÷öóµt!$ <úŭ Ôïòž?ĜZŻP•1ĉ„÷?/żà­ĝĝĥǁH!R`܇î'¸>ÈßżÇ÷›™Rp`žy"Ȉ*+<ġ!ñĝ|ƒA€‚ÄŒR)„$ŠH)$P „, ‡œ~Á°XC†ĈÀ#H H0 „ ÒA!¤`$AlZj döP>}ŻŸ:·Ĉ?<-' ›ċÄŻô=é@ˆ€‘úñŬƒçÁ Ä>0à@K ¨Q`D §²|ÊT =gׯżżÓé˜ŭŻ÷âĜ—Ĉ™$’ >ŬĵOH~*p(ñ>EġôÖ˙ä}ë‚B222R}Ĵ¨˘‚Ġ/c@?—İ>ŝ'ŽĜóġ×7öĞçĈÌüŒOŽĵœÁH0WÒ BÂAH*A'û>PHD‘YdIB@‘Œ4â}sYUáQ÷żúéĝŝ& ×ßòĥ>=óôî_·?—ŞÌ@ùïĠ´tMlC @ò`ˆА‚€@ü€]…I`„L%&"DĦJ ! ‚…€@=-úĝùüŝ vî@£¸µ_` ú|ŝ‘Ażi"Ÿ/…gÏÛçÀÉÉ<Ĉ· İD'S•›ĊŝÚgOÀ”HˆÈ…)?”I˜ ÒJ‚$"$µY,%"OŜ@T><ŝħQóo´“ñ>ŝü…ŝÚŻĦġ=|ġŸ†Ĉ£éçóĥ„Ĝxö1ëœ#{ ĝÊ!é} …˙˙i?`*€谟@(–"@D„H €Œ‚HÁˆ$Œ!UX,R, "0…+M!=ŭğùü½½ßMzëïĝv†ġŒ"&Éù~^˜ÀûŭcçRvùbö£ûE`=ĠX½ŭÜÚŜz÷çz‰÷˜›žsĉ·Ç?AŻ$„! B2Ò„V c„€1 ‘` bÀ,X­`ĥ46§ċñúù×ÜżŸìž~~µUAä 7$ ü*ġ^j×Yë·C` †?8]ìġÇËĴZ3ĝÍĜÈ#"ħ`Œ ° "E1‡ü@€„'ÇĉˆħÜ*~Áë>_[ÇÒ~ŜĞóĉ;˘|OŻ@wËo1Xíƒ×î×ĦǟŬ1ʀw~qĈԍ ,U~<ġŒżŻ+Ŭ‡ŭżÍŸÏžĠ„˙EĞ(,„ddD€ÂJ%TTĴYRÚ¨‚$bĈ%„ˆ„$˘@‹ $Œ(_ÀÇGo~yb+ċçŽÛß×­f{òçÏıöġÚÉ@‚÷˙‡Ëíy-ëÙŻŸy~ŸTxúŭ}ş~3ÛġüŭĴYŒÔ×­ġƒu%p|Z›Ç]ŭż<ĝ4=ŭĞĠ> MP,òXH ŭPˆ!A$¤„@BˆJ!‚AB6AaI'÷p AAŠ@`1b…Ħİ˘P9À²‡ ҃Œ‘ €2B‰ Z‚@ƒ)bB@O—Qç<}<_ë9àdAPµ*!ó§ĥPyÇ÷Ú+aÎmBÂ@$A˙’ˆ´°Löùyüż_Żr{síǞyŻkq êQ?:ô'䉐`X B 󢅁×áÛ½žWċġ³ >ߣCÈ83ĊŝÁ'ÛO‘n˘Ş@ˆ8‚H şÁh ü  ĴDAŒhÁb ÖĴ$`$Ħ‘I!˘İFI €’֊ËakTUlZÖ #,V1d´£j­DAP`Dôy˙;÷úŝß{ìŝ żú£˙İÔòüúûe2 LúhüKuµS!Àr’°XF@€<B–@²Ċ°¨¤°˘ˆ°ƒ ) RŒH$" "@D‰UXû‡’"HÀ„``ĄX0€~OĈ€+ÓÊÁíü!ܕ^+Xùûˆ† İ‹(ùBä&Šhf(ü.bŻŝS8ĊÉDŸo›żèfÔ$ğşÄĴJÇÇGÛó?§ÏÔ9İü×ö†“£ßŜêèÏ1ŜsF>ŻĜ‚~AJAŭÁ˙Ÿú—òü?YĝŸŬŝ“ĝê§ìĠçùcùo§ôòçs=П鄊Ì$AJÚH_Kôéô(ıêe@g†×5cí-$ġ=~ ²ĞÊ'ë4™M€­y‘ku[”3+aŭqÚHÈĠÍÖŞŬPs›é sÖÓÈàu¨â>ıô›ĝœŞÂŽ`Š÷ÌŜ”m1[ŠXé€ğ¸ŜtD!IÜa…]eCÔxäĦÄ·×Pu€P^žsXGĈßXĦ—œ ’ûŬwZ^ž.èYŜ! DÍ1²ÑĴ.*m0@żj<`/ğ½Ïİ ³VÎê85稍 lqè}ŭÓ LÈrŒ_µ›u<••ĥܒE>CúŭFúˆÓr—v‚•ÀLÄV¨È>™v64äÒ²Jq‹µ‘P‰´^Ċ½60†Û‹Ç+ħWĠJlďM€ş†P+ =A#6a˜!CĦÇ…™FñÀ{ŸIP"fġ íBü}ûLüOÌuOpVô,7Û̏M[îLÈòíô.+÷xİW,%^ĜÑwĈ’û,Ĉ §8Ĵé:wmžGğôß;×Ĥ¤Ŭ·-xúÙT`Ħ+µŞÛ<遞Á2Œ7* çŜèÓ_ Fwż—ŻòŻ?ŭe”Ì!†HŸëŭGûg1܆RŻRŒ(+#‡#Żè2˘ìüñUùúOΞ½}żoèEŝàŻëŭsüĴ"|2N64Q-°¤²´ġ3"ÀI0 x֎ Ôd—ÖĤĞò WqĤĊğ£\œ7b˜>"8ÙÚĦÈĞÈàeß9YÙ@“[*ɜà ||¸JÜ^?( ë:9 ˜é °çž‚=˘g>Ç0œ·Ek™e;söÁÒâQĝUˆšLގĊ(EċïÑÛ£P•ßR:tĝŒ)eĦ<ÙiäB'Ŝ!Xġż–žuĉ?Èö{ûEÚ° ĜVT½1¨|-ûĈ˙,İİ´í/P˘°…„Ĥx”Ħı#’7ıe&÷*ġ{ş5Óğ–ñ+(mÁ;.ö|{"­žŻĤ.OÊU¸¸'–ñNÛ ÜÒċ‚ÂáôÍğ£Ş]jI͊G!^K+KÇòh Nê3;ǸžU×H`WƒĈ^A–3Ŝ v3%u`us<ŜT¨G(Ë)ğ½ETšAWn´>Öċ²2E›:˜ú„ ŒhDe$˜€}KŜ•fc-ÔĜÖTƒ/ŠXÔ0ÂQèÏvډ|ÒK›“ŒŽÑ“.!FÔD7ÒÄ`Ş>Ğq9c& óuż„ĜÍgÈʤŝšJ!‹pġ"HĝaÁ\ŒÔ^LäPˆ°âü%µ‡,6üĠĞU1HéĠ2şG”$8‚³¤%qC3*Zá( ½ž°µˆS°³Ħ<µzWuœè„MZÄ)Fi*ĥ%ö‚G ŞrĜ3ÇrÏğʑÓ÷2Ŭ•ŞádP÷5}$%ۙ0HÔÈĊ§ßħìĜ²E}“ÖHgĦôè"Z‘ÒSŞÀ“*j­„òò2ŽBf~[ĝÓĝ@Ô-‘ĝhĵ6èâh¤Ö}$@Ħ˘Ħ“ÇL&"SXx Ĥç‘l6ş|yd6+ĊÇí`ñYñÀWJĝĞÍFhÂĴf—‡„ôm*ŬÙĉ€ÇŒŒ$SaôêuZèyMgˆEˆŞßÌÒ’l–*|ùRM½Ìz~Rr‘îpbiAC ßW.(ĝf6V‘)’nE[ÉǑŜV–5snó4 pĴ Ë0cdm'ĥ:O2Ñ$x³F Ìe`ġĞJúKKFmL·#ğ”ĉg“ĊË~ŭŽ,^$ÎéÌċD7 ÌsÂ(ÊÉSèdIMíâPsŬß˙óê#/×ŝsñ§ëĞš{GQ^ëyĝ£IĈ×wxDör™OLfHĊÒ ŽV5em PG1§Œi˜dHvñtĵ_™Èƒ£i,”ÜÈĊ§‚N>bËñh/2üÂĉb÷1ĝFÁËĉj­ŭŬŒffúŸ5s÷ޝwǙߏ^ŝĝÉ×ÇĊ³­}$JV–§×Vè …A¤ Fġ·L 42NˆD˙9µÇ:“hBż°ÚŠjÎLq[×v™£g™.5ĵŬ‘‡ÛD8‹fMĉp=/g?ÛTgħJJ*JœŜ‹„Ñ[côúŞ˘yĞycġâ–Ôĝñ˘û½UL[vµ˘}ƒŝGŬ%`˙ħ÷?™Ì˙hĜñŝĠġ÷ġ÷ü};ŭ­’ MúûŝŽĞ[âfùü3úNf|TókßğÑŭÂB"A$° vò™@—ßqYúbÄ5XgWĤdêO%èġ"EÉ_Ÿ_ìuùóÁŽ×Ìg1l›Zŝ92wĥÚuúáECƒ˘H@A¸à†$íáŭ–Eâ‹-7boSĤôŠ€i § ( Ò,›0‚QKpç"r#I;ö³SĊEi÷nÓu]6Îıô|…Ï€ó ½ŜCñ@ ‰ĝ ˆ~íF…Çîl)P Ċ_Ôh (˙ŞĜ?‰üëĦŝcX•÷˘íżì23ûµEAñ$Cħêŭ„áŭ˜?œOŜ}>vᔔD”D?œùżE;ĴR,K;‘‰ġŭOù|ÎCî`Áìl_ĝ°'k#˘JCûx@€Â—Ä=ż½A:£Áèܨ{˙ÄQ>eˆ}J¨Äi î¨#ûT‚'ì ÒP'ёû†@>Ħ?…È>ǒŻÎ$€~âĴc1IÂÔH l¤ü€Oêôà œäŸ’$;?œ2 ˆ~ó!Sü'ŠĊ"‘AAB$ ! VAY F*R1@`*1ˆŒ ĉ‹ŠĊ 1E d„P€X1$‚@ŒˆÄDH°"‘A1EQb°AEQA(  Ş°€‘‚ ħ`ŞDF#V1ŠÄDb"¨¨ħ‘‹F$TXŒF((1 ‘ˆƒDbħ‚ÄADb‚"Ş1EQDˆˆŠ"+b Ċ#€ˆÄb ŒQ ˆÄEŒb*ˆˆ‚"°bŒV1" Ĉ#Œb""ĴXŞ(#bDbŠ"ħQ¨‰" DDAb,PF"ŒDPU# F("2*1QE‘!$‘ ˆD 2l Ĝ D=²yü„)Dl³ċ | „)܆ŸàfĉC*˙î|1ƒn|É$Ô?Jħ- Şzò {¨żd_'í´ƒŬOúҋÀ†sñ˙{˙@ ħf‹èĝÌêxǁìÚİq@ }[žçȟ&Èûē' ï!ƒ`=Ž$=i$J?Ĝ0:ıă,-„ŭÏĉ|xäN ñĜƒÇK1 §|ƒûp/àÏí@P>ìt0(AööÁúŝÎMmBûùŭATûĝUò!ĦèÜhhhġ˙ ˜OâÔĈ­?ufT™48JKÂْ†óċ€ŭÇCñ0 ûÀ¤zş;é-€¨îBH$í™ C̀ĠÏBš4(~ÁÉż˙ïù˙Œ?—Ŝßï?ûż÷ÍŭdèZ˙ĉŬ–°ĤG°7˙˜Ùı{Êîŭ\>Mdê^vrpjßfJyx²{|37V:aë°7+ċsıċU1Zc4ˆ<î 3nsj|ŭµŸpŠË8óĥpeG‡ˆÈ"ċ3Ÿ”•µ‹¤yrŽĦzrÚea›·¨9|ñÄ3Ž%ŬéÍĤè[Š ŭS½‡JJ*BQL2çq=Ó H´öˆšXUDß6DŽ£58ôß)Éóx•şÚĊ_É4ĵŻé˘06S˜L~ġêĴ%šŞ°›Ġ褵ĊUµY­c0 Ž_dğJ ȟ™Ëä¸q7 7XR‚XŽÚSDK#ɓŞçĉvÊ'ö L‚|Kœò=ѲĊìèò9XLÌ´ÈHx2‘tĉâۊU" Ìôhċ{B-Œü‹ˆ Í;"èÄi]âĵ r”LĴŽm K£Ÿ {<—ÙŞ­ÀÓm!l}iáLÚ`$Ùñ0Ï´DO2!à\5Ş1˙T+ù xÈjĜĝEÛ=€ÑÇ>0¤@ÚŬK‡ĠÖÛŬSV0mŜŒDí² ݈³Ȋ ôTFzIëï~7ċÛòÀ?A ČbÂh‹üëıé÷Äû×Ğ×ê~gäßéÎVĉs!6oh$McĦ €ċdçO˜‡ ü§İ@}Ħ!šTİ›·!>Ĉ.ÚÈ´›ż! üF{wMŝWH÷›Ĥk6À$•×kZÁcĊ^' ÛóêÁŬ÷e¸Ŭaĉ."Éx=Z–ˆAĉġözۇ™ÜÇàĦ€¨ĊŸ<Ñ˘ZkÓZ”ròO¤dĵSŬdùFé‰]ôÚ½LVKXßl!ħ³rË£,í­ċ1ÍSı^Ñc³;Á ,U4ë)9‹4f×£Ç&‚ ö„Qĝĵ`¤!¨[½€ĥ,*t|Wœŭe#ÔQYÚÄ yî!ĞñĴĜcö—B0ÓÒEè5ĥWŽomĴñWĉG9ŸÓïOï^{ÓêN}91¸ˆĈġ¤ÑüĠá€Hkë³Ĥñ]ŒFç<Ĝ  ˆ˜è³q y„s ’ƒ3MQ‡ÛrôP/|i•Ib ˘ŒÒ⌐eòR)“İ÷@ñDY²™ Ë!W]^’vvš´½Ö&aÖdvfrĤĵ‹ƒ†dÊ^鲖öĴı^“À'‡…ÄĦzx•aZݲVԍ0âyÖ}F½‹zŞ_;—M D Ż; 55 ^ÏbÔħKxÉWh‘ËGĵ0SdAĜEí'K]z„m£äUÔ}Ş03Ċd7ĵ—ztíŞçĉDTĈÓssêüĠä÷­gg*Ž+PS隟vqšáT‡spĉ=7âRˆŽòI´ƒgŸnğX7Ú Ï&ž½V TewĉlÈ@m‚ħ%ñÉĤLó//³ıì[ÁGxÍ9à&×t Ëá#ô= ˘–™—œd£!Ĵ'xô\ĴèOԘ$^ıÖcn"\…Á1Ħ,ìpó"‘iÖg•CGĠfDœ"I§Eâ’-=}0‡ĝA˘÷ĊÛ*ß|uôyœ­ËgDĝ­òÀnÏÓDCiġÑ ïßÇÛvâ̳†ñµúE< ntħ6Yóız*§Î0Ĥۂ+êʝRJĝÌ}˘I·G%5UÛċ‰Äù"e‹èİ£İÏWùŒĉulû›¸3ş,ÊSÍs 8loTċQğħĈwşièA)=}˜šyÂ0~ċp…`7½Z\oa{lÜp(Z×b\rb‰UETÂ/LÑgCI)BìĥyE–è„ħ­½*éċœßm_’ ÖJİĞĵ>À@z%O31˜‡˘îĦ}Ôdî2âÀ*&N†\6’Xg„€bt#E éµùĈY-³âá,Ħ\¨Ì=í4àbż}3ìuċ5Áî óZN‹ó^#9à2Iz…s!½^“Ûa:‘0C°Òöħí 2À™Pĝbî–L½*ŜĴza mċ™P'm&!ġYr`³£ ß°Éĵzy‡ÓĵO'ĵïŻpœA×Òë:‘ EÙk_ÀW¸ÇÜ4üüÖ??¸tÄ?½˘˜1…>Z("¨Ĵ˙Ĵ˘1D$‚C(ÌA „X‰‹–aˆ%ä "à*"Ċ„Xh)£@A Œ$ f’F@0D‹*D !$DKmĞ[lĥĦmY‡i•r˘%ĥÖÊ9KZŠ%²áµŞ£‹pĠUqh.#ŒY´Ĵ.ñŒ[\kKmB˘ĥĜÖÖ´EğŽLàĈ++q‰ƒĈ âĞĞEATL%\6"¸µRµ´Ĉ+„Ş*֎8-Uj-*6 hŞĥŝ %È87b…¨ŸámŠ˘XPĦèPµÂìPµÂìP Ş-D°‘A(šqxI$DˆS(ĜPH/ÂŬ?÷ ~ßú˙D?C×ëŝ~½_Ŭü˙Żĝĝ—òŻóHc‚ó4˙j˙#íċ6£a#7´klhs5X˙Jŝżżn8˙§ĈS=ñĞÚ(ŻÎ‰ñ£Z…6*úno,ÄŜf•tN³V3_²ER}|"ÀĜ…oôŜU"ïÉó;ġ/–ûsÌĥŸşŭ #áÑüèìk PYû{vìɢ´kŜ”…Ŝ–côÜ ùF“ó—ġ×|>}ŒY4oĥn’%£ìòû–Ğĝ ݤëŸÛ%ll€{¸Ŭà'K­şN v³èÈTC)%AžŜĤ â2"b3Ò.‘½vkÛ áı‰°@ڛ²&f>+ŞŬzîáUH‰–#5/4LóšéÇ{lo6ZmÈ]*żÙ"Aġ­Ç%³ĉÓÉïÙċzÊÌ£ĝß7QĴ\öîÉZÓÒĥ'JJĈʒyÌÏÂ-˘F$Iv~ı¸Š’,•Ġğ)xQ²à7u=_ç7_MÔü;܋l*Ž"p"™èžü @>ñÀ‘ĊħâeÂZ‹˘'à+;Ó"“Ôí܂ùÈn|iGN2šâñıó‰ÖŽŸuW@™ˆ’²“‡YñĠGµIÔDğç˽ŭġÎ_=e~vġ~ŸâJĊ`ŸċÚ˙ -_ًŜ 8FÉ cŬuíïQ>{$ôzOŸĉlġşÁòÓù‰÷=H@ŝŬe“Ż•…Á&!œç&\IÜ( À¨@ƒbRQù‰\Ácŝ€{mÔ4™\÷K…8Úc)2lŭé­P¤wm°âH†oX6Cŭ‰ĈñŻÂ4Ġѵ ˙ıĝš@özÀ~ŸğñùŜ?ƒÇßúU˙N5×ĴâЏÓİÎâxÛı%ĵVô7Äâ²bġêŜ–.ï‚C"ó¤ÚµöùğQ9³L@Kä÷ʏXžf$GûnĴ2ÍKësĊÙÔt ÍSü‰½m²9Í}!Ù›Ż„ċĠWñPôE\ŸsÔ?3ĝ}CŭGÔ>Ħôŭ‡ö!•?1dd’Œa$€À"0;*uÂÈQö‹$#ä~Aú‡ Ĥ‡ĜtzËşa`.$²#!‚ÄTTp"à Xħ6• ŠĥÒ[˙‚ÔÀä² ğ²èÉ(ğğB@şĊ^™4DÓf.²ÔÉR0ád3G.)RVҗ/'‘„E`‰¤A-jħHĜCs.( Bĥ[v³ ĤÛȰâEtEKE‰‘R'$d|…ĦUŝ8ŭ‹ŭ'1˘ “Ê˙/r?³·î‹ŝÄÏìgë[Ĵ—žsüzáÈ÷ŝµÄĝÚmĴî8ÛIvH›èhċÈĵŒnĤ…xïl F• `ĵÎċ AàŻúœicc‡–(#%ݵ6VçOëAb˜b8À„ö !íìJ˘Ż…TĊz ÏşzYϓBù:Ġ.%=™’Ġ’O>ö>Éߔ!'Tĉó|0Ló‘"µ`Ñ{Ìċ–çò%Mù Ĉ̚Ĉ\Š%œè,V/Z óÇì{ˆùÛ _/͘Ŝo8 `Ž˘Ħ#â<{"ŞÈ“.\ŒOž=Š” SÁöë ¤V3°ZâÂÈJĜ6ĥċFŻ ôt­kħkrÓj1·²cĞʉQxò3Ĵ)mۋea@vŻ:ċOm¸–ĝğŬ… ş]-€P !™)&’cĉçFC>-7ix“ AcÓ¨ÌË=o“L‘ÑĈBŽZV^o„R7²Xµß<í>Àî<Ĵ&?,cßbxWXèċwĵĝq\ešĵ níd ­&At£f…ĊôùĴ‹څÏ"Ġ¤g%dz|·pÏ&IeAÛ t>İRm×@]M(h²É‚•ĵ xgÖòm §ßçêóÎ|çž5ȏJŸÖÏätdQuy|:’£Ĝ,Ĝğ~Áċ~^ɟ%&ûêz£ŽqO‘'×V›hKyÂµË~áôXÁĵĈ"ьaž'ŜşÒÌ úoIs…T:€ĴyòòÇ[ĵäˆ<ö‡Ĉ\'gáiÓĠıò&›Ĥû5Jèĵ!ĠÛI)# x3Óь&ùŒ˜£B_òŻíĥF›µ;1µhžN³ïR×ïÖLà—>™;™Ûğ£S<5·˜T&¤óaúEYœ žXÌé/D…&Èùk¸Î­cÚ#ıË\c/A*Ŭwı!ÁŸ„Ŭ:Â5ɈönrqoÜáâˆ'] Z`-îĤˆ81 "0é÷¸oLveċĜ¨ [ÂXĵa Ċ„cèäx¨†BÂĴzŽbÈáğĠèA­bİĦ†:N‰4ħ" ÜĜE[ŸA)ÁËĝ*ıĵL˘<(d‹´i{‰’­cϚw*=VyVÉË95J·ó÷ÇÉ3!²Ì´$HT 1!qA¸5>•svZÑá%İpŒiĵÓ3™ ëÛĈ°…E.Ħİ5ÔŭÇZ‹Fwè³Ġ$Œ"îœĞıkt­Ċ‹.İa‘~˜N‘+= ÜÎġĈÛ/„ĵ¤G‡òQĝócÚ^á Ċħ™z´’KŻtìl!ınċĝ@‚ÜAWn£ı²÷ĈK{jJ\´ÀĜ O|ÑA ‚@Ä ÇëôċpQ@4éĠĠ™ßNH vZ×o.óoĴD€ÖVCÀĝ4…™ud5˜ÊƒàiHM …kOCġ‘"ƒñR˘ŒL˘Ċżë˘f ¸#Ó)G8Ño?ŸÜ×HöI“€Ċĉò|eè2V“úÁ mفƒˆBDI w(êǧĊ“ݨ—ŒJ‡âß,Ò´4ĝMdT˘uÁ+´‰òċ@O„ Q£MÍĈjFî  *e\ħW=ZĝĠ‘Rà§§ĉŽ×jşˆw\\´îꑖj¸a„°˙Ÿ´=ş Ŭ/7J]í}'-Î/;•p*ÓÔé^U'ógÚĥËÔm& ÈnŠGˆÜ(‹†F…%âÚsh…LdağÊÔ‘8<ĉñMIç!Ò|D_9UZŝ ÎìWëSöŠÉĝ 58Š×~`!˘ËsŸ/‚>~q9ĉ%ŠWœ]ħ- ûH}Ar@âS8áôjı›Wg´ˆÛì á÷ğLGpcĊ¤İ ҋa›ŜŞá}?¤ò'úħäUAéÚ7´˜ 7ŽÌârŜ߂Ŀ¨Şj@•ž+1„Û•C³Kħ•Êœ;ÍxôìV³<Ĵ`8ˆ W†Ü J5³‚Şħêǰš$ñ ÒÈ9ÉÁ™Ûíħ§=шË&Š9àd1_.‰µQ3¨ħZ 8vLv-'Ógä;U˘˘ÈÉĵ]ĵSËċ †EPc’:ŭ‹+3—ží$•XşHùÇ}VĤíf_Ǖ8Ô´nGs<­4Áäô‘Ĵ[ô537™ħ> Ó<459O‹âRÒrÛuQ5µñĥdw˜ ¸‡D[Ċ%°* M”"jˆ­> HVÖ=9XĠ‰MôF˜¸àqQ€ ZJġŒôm%şiÜI˘‘Ò²&ùÄ€çy)ÑË<òí,5žž†QÄ>·ú7ÊpL› ż—ʉĉ˘$dŸ²žáü¤÷6\_‘Â7żÉ´oïtÏhlŠ£ċûœkZ‰ĊĞœKPȵ3,iĴÍYڑ߁d>ÇD€’Ÿ""ùÍyŬ_}Nĵï3ċĴËżžÛjsċÙbUW¨e µŬ5b•†€Sï:îĝfĊa´„SpMñÍ@Nóży½fŜ5á³>Uï3$úyrq^ 3 eKab“ו³Ï‘/*ħßVÔuĵn÷âf"?ĜŠż°1ŸĦ%FĞûÄ jÁ ƒ P‰!è4€ HH2"˘d…ŒîQB}“ŝ ÑİD0DÜ-ɂÖÈâf†Á²2QAúŒƒúHƒhŭë²&B @`‚ÖDxE> ƒ÷† Aú ‚=éT ?  &ÇNÊdĊ$$ިĈKZ”(0Kj4´{Àö6AVLÀE,s “BHcĜ( à"äÀÀ…ÇàÀżù$@ŝˆ (ı0˜@Ĝ,?è  'ĝ€¨GW…Ìû×óĝšüf3o×÷óÁúŝÛ#İŻÛħI+ŭÇËëÊHMM–Í\ƒs §>lŜ‘ßTîj³B†cŬ×ıŬàW 5Ë7Ğo'9éÏ6ĞHÁ~4ëh:78‘ßKöċ9ƒDYbŻáHlÎ÷]ߜ³!7rÇÎ:%hv i‘e0%ĤĜçĥÖi?ïİEWíï cLò˜û,cXĈĝzEŞÉFœuŻm>)‡]\~ñϛ˘k‰ƒ3†‡­ş˜kZġĦgÄqzƒžmÍ E´³˘ıĥÁ~ ~! ]bˆÎöĉĝsa*µ1ú8ĝQŻ}FaܙrY™DĉċKSüûì†tĊ‹61N\aiïpƒˆbS|Rë{³UĵthJN6 )ϨNÏI›œgÜ^8îv ÷Ë/Sêo2-,‘pn­ċFqjšƒÔċâ7¸sUĵ™ĝ1ğŬY6%$,eĈŭn$@·êöĈKu ‰x\ĦĠŠ-İ žáŽ"ï4 JŬŽ ’;ŭ·7 ÄF7‹@Ìz°'`%¤|AMNPrHN>jĊb3‰Òàî2Pc Ü'0›Fá9 °âż=”Ċ·dÔÇ~›ÇċϟÙĊ‹k¨‡£s~³îS2¸ÌvĜSŬ‘mÔ/1|n:aœÌ÷ŝÙ˙Ħì’EUäm!ü¤ I"€ĈH‰BXÀl XHÑ% ôl†ÑÙaXT€ĞX ²QŠ*†ÙYĞ@Àˆ‚:²˜q‰Eƒ˘˜e ĜT2Q™Ĥ0`R1‘ˆ’Ħ(Šb…3Hƒ‡ïh(¤çŻż·Ÿ—·ól“ġż†È´ĥŭÀ£FŸ°ˆœŝ;qşŝwÍÂoÑÙ"³È‘"ĊVò’=­Šƒ2}ÑGN|ġĈ|Ğ ?Jä+c›;€˘şú€ÌÔÍ2uŞĦV“ùZ츙™ï/7ĊVOĥëuĜŭhíġ‰½I6`ı{ÈYD(8%ÎŻ==ç3ı.?-8­vúS_€?€úÛÌ;óEŽî  =ÌyhEDƒ€üCîú´™ĥWçl“qY§O+†c’&ÖúÇısHĥB‚-CÀ"(²²lË\r‰d04Ó'bAċÁ;fk.o Š˜ŒıÌÒż+Τ'hŸ ù8R|Şħ£ÜÔlÈß<ĠÀ'i“íÜÌëIâ>ܨ{‚wö‡À‘$Ŝ/‡DÄPö‡£÷VÚ½ĥ‡ìùùÊb76Š8£ÈmRóɘ9<]œ]™Í“Ü.G׉g¨ê éÄŜ ‡Ĉ6-.ĠWÊlÂq‡ĉĞ[6Êĵë lĥÙĦ“ox³×58kP²âUp.½éa1نÚ̜˘-ЍÁZ™ĦC˜ö¤0ë™zó‘Pdǟşí°™Ú ĉ`f1ÌCò ÔFŬ8‡Şu Ò§E ­,b˘{yĥbÌLJôŻ _`³(Ş$–C‰ÑFĵyŸJŽG!IÙĊ¨£áÑäiÍëñpġQWo7ëgÍ> ë­ĉžŭĴ!ş9ñ?Œĉ`Ġ£•<ž´ìUQP÷:ŭ§ĴŜP?ĉjm׺“pÁx´³35Ğ OĤ“+…žDúĥ ĝ†È ÄÌ͘pŝÏ? ĉ€[Ò+2?Iìıú›¤LÂğXÊoÛĵy·WÓZħÛrŻX’’Ħi$€:8‘Ô`uf8ö´&2i̘ÜQA‹ZĜLq‰Ž‚qì_š+0ÂIËJġÁuĊêÉÍ1ÙĠMŠĤ£aƒÚ!  µ#EFeQ†£4£ħfâŻĊ†'S‘îZ)ÛDšçBxüʄ:Òól.µ×nT’.7ˆ4dD##RpÂİñNV zÍ;Ĵñc ş ËĠ–>Ïe×·ÌòܔúÒ6â;hgé\‰ëVabħŞšìq#WZŒ`‹†ŭ5]é­TLH٘Yè:Ċ¨ZĈ¤däÍû­'L–Èê˜ìäßwNQZĴȗw„ꆣfNb7Ëċ³xlj'ñ¸šéߗ&KkP’Ê—&Ŭ? A%ê‰ĥyo½Ghû~ }s ‹Ĥ…÷ê=é}ó—ĤûG=^6án`£p€@b/üóñÀ`#I ™ĉxsPĞTÏÊ֌\M6ġpĊEçqb.4–4ÀOtòâĠq´d{‘ĵ”²öçJ‹l˘ó9AÍpĵ^lŞW[Îu[ԎùĆd5­£gÂ÷g ô3Ĝ£ĥmRáÙĝéü˘´i­˘çÍAÌÎĥ·!}ĵO<*'v÷˙P" ïeú$|ŸT2Ĉü@šĴfÄm*Qñ†gÉïó˙ĝ`̈?Ïı´ûó~fvü Ĵ×úŭğ<Ôü­ ŸÖüv›4éİş|‘û½i³k–Ù´Z„…ĝ„óşkğ:Ż’"RCċ/|D[g—[IxL²Ŭm9[—ĈŬíŭ‰ßàíŭÀŸĝS<ŭç}ü~~}żáüû4Ûżä˘ŝ Eíe#k–½´Ĥ ېó†C%oĉgàŠSıâÂĜİ_j ôĥ° Ĝì²p Ĝ€ŜáÍ÷‡&—˜<·›żIIŭ˙P?²@„_ċÊRy—L{j„Oĥ:éÀ>‚0‹zJҞżÌ*Çĉ~Ĵ}?FÄ·².ŝñï7ĵŽ3ĠĤglIġçâ0Áu)Żwġ;½s_`½CŸp|Gìòg‹Q>‰œ“iı¨Ôu½ûÈôŒÚiË/aJ1ŸÇ/Ŝ½t&ûĥƒ Ž3ĵÁ¨ƒĞ(CXĤÁÑKÍĞMˆY}6î´ ólçàq"_LÎKúϸ ê4á#œzš.+c[ŠX#ƒ˘ÀÁV×^2L•ĵ´Ġ‹b†b,/Ñb”Kˆġ²‚ çÜħqú¨İóú#çú ôàˆ?ï…çê~(‘² Zŭ^}ŭşt7Oġñ³î]vu [HÖ˜Ĵo‹^7çĵuzñt}ƒ'żÚ}êcê0ĞQoĊT<ê! BBkKŠOñ)h´qŒ8*V)ÊeÂ-Jäĥ(a2˜ÎùrÊÔĤ1›o&6Ĉµw³‹¸‚ÁvıŜpZà\]˝Y4Î7îçž-KN,YÉ\.9Ħ‘Ħ²œĦpÒL,ĥŒÖtÇyN4QÉ"&€¨+‡?ż˙_§ÓÇĈ}½_]Ġc鯑5ϧÔĊúrݟo$ /ċm=Ìßûx²îô•àDoĵ8íz…éÍ=Ż/şĵWÖü‘×UOè @s2–NAé›Ġ‡òƒ˙€?³Ĝ$BLmQFûñ܌ː³ŻÎÍïí™ÎñˆŠÖñGGÔ?!ƒîXDĜhû§èĜYÉàÈCŭĴ“h%Ğĵcĝ™Ĉm—ŭÈBèğŽc’b-„Í9 NáûOĊ{€ítq¸ 1‰&Y$hşµŒH޲ÈÂ&€ÈF>[{ްżìHȨ=ıex?@ €˘ô‰A%CÑF²!şx! - eOú¨"{˜\}~³ëçöúŭ˙Ûä÷ó˙/ċŝ+1€¤+ŸôCñ¨úkÙŞĵTħ•K›żûDĠ(Eĉ\İAƒpϸ‹Û_9ݨĠC„ÉîQHá^„%„İ‘£Üè8c † Í7˘D޵é@Ċ÷ü·…}]F€ÒRG…ž·­ü.şÍ|Ôü`>ċ PÛñ£OşÇĜĝ„)°!J"Oñ„‹’IHHF2䐅gè"½‡óû´hÁµ?q?ɘ–%A?ÔÔgÔÀ$Èσ0!Ÿġcŝîi ˆİĈ3­›Ê,â ]ĴŞEò”@ì` BşŒîCè`P‰#I˙…‘AP`ÂR„…E‚2 Óɢ$ù˙<ë™ŝŻëçġŭżÓü˙ˆüŸîżQğŭöáĴ#!<ŠAŝ—ŽÔ۞Ï`Ŭm´%_¨ŻĜĝĝBëżïíÙáƒ5·” ³'ĤpĠŸ7ħU+GÔ· (^Ô14Ê$ħúŭÚ’É-ċÍorïĵ>¤„ıÛĜxӀɣ™ì^ÌnÂç]É_§9}~ô“œOu]9˘ÊċµöĈj2ŽûJOazv˙Kùt=ċ„q9h‚Äë´´œá½xM†šC~OƒÔƒŽİî"l;TöñŽ?Š‹ tR·İßÚùéü^ĉ-¸ivrùm}†á~Ĝf×ΕĴ ^2zKGOYkħô_s/ĉ$ÁÄ$Ao>K·’Pï×Úksœî&œċtŻèĦI: w“ònïyu#ÌÛvŝÉÈÁġĠĊ{ΞyÓ엝ĊˤïyóÈ'τ³pŬ*ç%€™ĉî€XU5@nÛΚs5Â3Q\ÚÖà%i” ïî½Ŭâ,fX͛÷ħHìÄŬÇ\Nycƒš4déž ²Tĵ†ŜV˜'ñ3CâAZ]ġЉ;ôHIÉĉíéכc½şrŭ­!‰ġŠ×'²\ò˙‰P'ößĥÖ1OġbÎ˙XĠ~´ro˘üÑ9ûM@QUuµ  a ˆ•¨Jí¤(?z„0„LSÒ ĴUŠĊ"*‰ĄœA5H$VŠBvȧċfjPZˆ£3šş•Ú]“‚Ş+lÄHdĠ$àE˘jT“a9 !¤şxĈ†6ÑĊò˜iœÌ‰š4¤µ·)L&n9pc&ŒŻPÀŒRÚ%It—MÏ.)£ ¸ bŽ-ğ0`Ĵ\I„cFµ6Xħäï›frAŭA B„0Ĥ£èŒGÈÍDz‡ĝàŻÎ%LmL5ˆ!ÊO1ôĤé3ĥÚÒû)Nn!íŽF ³ûÔİ˚[|Ċ¨g™™güŜavtİCċĉĉċ·0™ċsêHCx­ÙÚçâ(3ô+z_ܙ½QÇIKD…ġ ÏI!:ëtz²ËqÔ$Wż=E‰.²”˘Èq™`Yù,8LèżSCgáèşC%–‘áŒv9†úïs%äx7K§-ô0ÍGL–ñTž³<”L=3$^ú£t.`rŜC UT,;5OçàĊş̜‰ÙA‰Òiùŝ_Ž~ÓïŠüıßyûŭġÛYû˙Ö1lŞí"!Wŭa4Ôhv%WÒ7Ş+g‚‰áÛöÔĝ(Nn3ŭRCÈ ­E†œ¨Á 'LEôhċ+ñ÷•\güNç~aݝÔélí4„9ë MıÓÂÀž¨ò§ğ ñ…ì𜷸 ŠHm _“ïĈŜÁM>a{k†{ÄiĊeŻ’×L+[ĝz .]8Êee²•JĥââF@8`ĥN)m$ÄğQ,ğÏȑ?ġ“ÙŠ‡û{ì´H%Ĉa oĞF½ñeш’ Aħe ĊdÙ|Öç{ʀÖ`Ğٓ€êz sbÉuÑċÛV,˙·ÈZ96ħŞë$)÷°h̅Ì%Ñ9›ï!ž5œ¸²:£†° LÀaĝ/Ĝì"T/ö ¤âôC*Ñħ5×(D°eFn—¤bÙí"$#!>pÊİšÚԝY˜Ĥ­žcK_>ğ™Ž–*ç Òğ1ġÀx$2‰Bîçwd§…öI´TĜŽ…Èo,Epġ›€LD°žà”½£9‰ç ÖOaK:olù˜ëÂüÏQĠğ C‰ĥ.1qUßÄߨĥ+œĝÎ͍ŝšĝÌ"Ġâ&ğ}Ŝ˘ Ò6dµw+íHˆŽy‰¤sÑHé|NĊžxZ?­3ÁÎĵı oCwnDöÈFӋjóĊwIN§l×@„›§!=kŠc˜xû·ÂÔBP²ž6È#Ái_"˜ÑaVÁ; …“hÓÜÄ.%ĥbŻ)´%vÇpPÀüœ™êȖmrÀqnMÉ!i¸}Ç?rç[ä9Ĵ™ëĦêX‘Z"H‰˜ˆÁàç3""úGu~“QaÌ×d°t¸EsùXÒeQÉŞ³hr‘ÏgŠQŠf´önÖċ˜Ŝ‘]'ò§› Œċ{]fŜ“k3^‚>1°óUjçf•-φ –àášŜgÂÜqvê0˘7çÎûBÎŭb錃‹îœz[aÑЎa{ÖBŜy#'Änâ¨êÉEÎԕáĥ‰BLŒ’ÙN !) :† Y´[^òQÈ´û‘Btöç‹ÔA ‰…YKÜ~E òŠˆÈŒ ¨21 ‰ìħ‚(´`üqí]²÷&i·ËrĉİyUĞ_™"èŽ?~£S&uâéÓBh°à"NHäŭψ!ŒŬİîè§é.­YyôëŞHGHx;b#`Ż–jŸĥ‡Ô„Y˘@ħ5ˆ%,÷<Ŝ͗9—¨ 1<Ĝ–wÏZt“4‘le…u ÎŝTHiƒCâr¨`"Î^“\ĝe ­! dUÑ<%¨2jÇ·r~NN×!)R’Û!6—”BÏkëšòFx°l¤oÌIh†ƒ?_´¨V]ûëŜ/4F›žbú4“dZ·*ĞġI­PĦfZ%|Âf¨OÚ°Ġgb^ñ8ùú¤Ç× DôIÈ~ĞŞgq˜tĠ1•/\}:€DD!ŝÀñP ˘PĦH #˙OÈlûö˙;ı;îG3{S½JĈ‚Öñ!Ô/äĞM_qm™i+üâ#Š×Y˙f^aħĞí)ñҍĵ6dÛ÷îbŠÌ8+PD)È3İŬÖÛ?lÌ9&Üçê^ıíĈ~´ĜÒ8ġÑ:—Â;‰Ş™—>ş‰;9‡ĞÏìSPÑñoĝĊJCmż–›*iŸûÏŭżîú|³ġ*‰+üüAŭ?ġü½˙K‘*n/šŭ<3‘q¨~WÖwżú`ù·Îfqûöišż|­O "b¤%3ĝ-”ÖnŬ™,œÛ ïù›É–żˆëùı€úMN#WڊċOvheP=§Aŝr-OÄ艽Żf˘ŝÇ _ŜOĦYÎlí? ž°ŝ³ìòú‡×ô0tl’›ŭĝL^BÖżËïñëĊŭcÛŝ“ħĜò‡÷D09ˆZòBQHĜ)ħB¤ ?ĵË½Ÿ§½WŸ´}çßâß?Î=ŭİÔñatY(˙`ŝġpmt¨ßÇñâôZfÚıB°Y2Ŝc„Ѝ!ÏÇĜ_ıLó K°§ĴÖŞ\ßˊT,OF!PdHÉÀıÉïyŬ êîŻ6žĉ|µüß›Ÿô?İ?óOÌ˙CûŻî…J"5/Ħŝ"˙ş‹Ĝ?x~zö÷żŒ£éöĝŭĞÌßÍŭž’§ŭŸÖ­Ĉj51Ħ˙‰e½ŠŻNwúûû˙¤ĊïçŬÉĵ´ëV·(Ĥ}pż“Xgݟ;ÙĦÁċ ›ġ¸ĊT­%•L M—]FiĈ2ÍDĉ…gŭN™1ÌÇ&'‘ ‘´ôôTIZ½µŸuÇñ<÷â|úŸÎż•’ÄkZ­ŭ‡ûxûußĜq?ĵü!êHħ~*lWȇï"ż‡ïçŜ}ĉmDNd?EO(„ úûŝ>ó^#ÇËĝ÷ÏŭñÔ R£ù;!ŝ¸ĊżĜġL5VŞEézŸŸ½à,I˙$O£—Àĥ ôÀçóĝ|Û'ÏUo"/éŞŝĞ,Dü”ŝuÊEG'ŜKù˘ĠşııS˘éŜ>=„v;÷§(·ĈqFXŜ7š´13‹ñ÷ßŬ²Ö?¨H6ıuÄŞĤ`èp^ÖÔôöáAüÍċf#ùaüğĉs~˘˙1üßĊÂ? >¤ŭ˙òŠ‘‡ï>Ĥ³&€ì?ÄîŸî ˜ #@DN‘Ÿ#Ÿ"żÏß×üü·ġ?ĝ˙—òH„$ô˙‘ÇĝĴ?öíxŠ~ŽHÈ3÷WjrQuv³ KùdŠ!ğ‘`m„À ˜“…QE" ³ò`ŬA·aœAfġĞ\/!ÄçN޳ŬçŽZ><ŽôĴP£6Ö)aâ˜ìžĉmŝÑŭßXHŭH$dŝÏ|w÷ñ%Żsĝ}€ŭlħ?Ċèĝĥ˙¸˙şúzÉĜ“öŸ#îĞx2˙z öö@"hÄàßíUˆ¤"† ù”`r!§a À˘)á!ûżÍè'óA6 e(pP>ʈèĦĝŭÍùȐŠüĦPB˘SRŽß§73uĤpi4j|¤?éÌÌÍ?Ĝd£%ˆÍfNœ˙ŝżx pİı)”?éÌŻVï²§rX’J‹AïÈo›­ŜşPÇ!GMVkw‚ä­Ó§Ħ·\ I!üƒ0ŭÈìAC´*TĈĠGDô@̤;‡÷ ÙŬOÔSñé=PÄ$İyŭ"B0•…ż`ĵ _İûûC=‡Ì>°˙€ŭ§ŭ ú‡Ôì‰ó4ùFĦ)ó) ı(lˆ…IĊ2ÀŽäüԈŭä9;6d?™î?~Í(áìĜ~e'Ĝ>Q@ŭÊ ~Ú÷ĝ üdáöPüÀôWoˆ`ŭ? xMÀÀD˘ĞÇßzô5dħ`s{ß×-ŭö.hF$)Šĉı³Wi³£ħÂbjç;vg7yk2b܏ЇœNÄç- ĥ‚.XJHKŝ^™ú³“qqX›2 „@Eh6CB˘LTP)}!%jĞ5T2IQŸê‰ŝÔN'}·c蕝F 6ó£âf‘ÛÄӏ¨Ŭ)A˜8+ô‚²˜sò:ċ0b˜p§½Ü9<Ħ³cLŝÉ· S" ˜™˘‰ 鉑8–YŸâH¤l…Ċ ‚àˆ~!œAˆ²J‘?˙\!qO‡§C7Ä´vê+5%úé=‚wĴPOy'§³IèY˘àäƒe…Î9àOhê@ǗXċö;šˆRìô (˘ ™Ä*¨JÇ!ˆ=†Šx@˘%… 1âË&œ™Ğ5&î‰ë5ÇöÔ0aôw9ƒ&·fY‡dĥ}ŽšÉ·M]­“ Ȓ†ÊK¨À&•D¤żĈއàìÂObšhÚÂ:hB™…çR39Ĉg|­q)j“ÓhŠŞĈCgâWI”!ŒŬPĴ. a´ÂSQ.>·€ÏÜWŝÍmÑ۔Ƚċq:°:8N=‚vÈŞía@†@Hœ) 8ŸÄĝ„ߑZ-rŒöŜ!stjqİ£ylĦüÙ vzŸ*ı‡ò‡’Gä~ d>ǐ:Ĝ ‰#È{uĴĈ1|ba1‘…Zù l=îÁbl}ôHCħ5 è'€·Š zv­$’z~OÌ<™ŝb÷1ĝìXú˜;Ŝ…{Y Ÿ˜'ÇÎâ|PÉ„F#@LÂ'`öĜÁ~"z9& ;ĦZI.DF‚¨~bd:@óA³êÀûdJ/Ârl€…Oz¨9´Ú­G@QÒ‰,‰²ġ,ÏeË Ù÷O Ï'²£ŸkHżÚÙ/É!C&È }‚ÈYFêUí ²4#ú”>°g˜| <Y³(~‘ TDäR‡ùŬ‚_Z,˙˙?P  'Ĝ>(aŻÈUp?@;›ûö *t‚}OätĈ ġÁ´ŝJ }™Ù?Sĉx‡YâF¨¨‹ ŸÜë+˙(fIé‚ "Ż‚zr|€>„\ŭóÌ}ψ˙81Àŝ!ĉ~ßaèŭOİŭú€ĉ1ñÂAŝµd‡P@úĦşŞ$sÀ|üƒîĦô.`sŸ€>M˜û} ùŸ°0ô{É!!!!ùżéŝGôŸáŭżŬŝéÇ˙°ŝĝLU?Vßñ+˙‹aĤĴG£a]ÚÈĞ´Ò=Y´]Àdĵ>tU/=emÂhk“ÉÏ_İ•ĝÌôdAüE–˜ s'‡YáX>ôşLĴĈŽG£6ùÏŬ~—îTŭ1PQÂ4žVb[ÎhHöDšú’ú°‘5‚\€÷½r Ê.ÒNK€òZn ĊH”3˜ÎŜQž`ÔĵÎ@t?d żÜOŻvhŒŭÖ´µßF·Ù>ë[ìMôˆ•Dà0CÌÙ6 ¤²6ñ’älXä~³òvĜ÷!$T°Nşm3ġyî×Ï^¸×kA2O/1ż\ĉg#—Q‘XFÁh” zdıJLk™+ÍUİŽV‰Iêqóû|~9uÓ²ÀIġ~ŻL{şıô@í.ÂÛz³ĜÂB‰ĵŞËÁZÌ L#¸éÔ)ê˘KɢŬ^××£ÌĦžU=MßÎ5lšiŭÂÌ dˆi29gnëíÎÀC p&g7*ԟ"Vú¨P‚WV°ùÖ§ġmé cԟšßzOF’1*(]š Çı'ŠüĊ6Uàĵ˜ŬuÄa˜ŽşżVí­^oż¸˙9Bˆ‚"İJD‚! (|ϲŭ`ȁçßïü~ô~}ûŭŝÇò˙ˆ=·ĝoìĈİïfŠqGkg#~‚ s´äaVŽj÷\˘ŸœuĈ1µT½Ġç'ÈFI]99°‚;Ħ£—ÜWj\ğ ÌÇèyDA†@yĊDEÜÖXǓĝ6 dRžÎ#§ ²ûÔĈ¸N™Œ°&lĤ!v Á”Eàïĥ3|ĴDgߓËBïšt–£6Šr˜,ŒžĊüäàŒ 62)…y˘%+—šñ’,§TÔ;;wQĊ{ ĤĊĈze‰^Š=Ά£yALM7Cܓp ×YCœÓ$â< dYxƒ}U$Ż"&–Éù, J~Ġóàì1aŽYçËÌoā1÷Ò§Äá˜>{8q ‘›#áBâJ*IÒ3›ĉ”œOdQbaŝè;=!ĝ€"„ófĝ1!vDmçGBWĴ}>5 …lĊ|¸†^x&h]–9´Q é0?Q €ÄcšU)à-ÒÊAˆ5 §ĞN%Ĉ‰˒ Q}çÙêĞÔ. 2m/üˆĉš~Ĉ@™HPcÎbbî¤am35!g…ĵTŒm`^dJß‡axZaƒÑĴ ù9rŭ 4Ó ‚ÏSûñÏÊN8~äsߚz"=nŻZÀÍ:´  è" H–E•³ùLİ 8\m'ÖEr†”/L=ĞFí>ĞÑÉO‹DpŽàXBüĈñ$CAċâ6–ZÍ­‡íñÉĈŭ —ċ*ôĤrxħe:‘UÂ)w Ìûj2aU°ä,VOŠH@ÌAŸ=o S$ñ1Á-*¤ä\ ʆP8À͝—ıĉ˜c? ûîÎò,€ì…-ްbŭ$Aóe Dü7³ĜkÙáRZ‚maŬçŠFàUGYâ:]e…´‹ÀĤtïŝ ñYœÇ£n”<:皨‹œÁ @¤ŝSñÇ '”ĜÒÔ9¨ñÙdħŽlİIÑ"ÊU£›j'ŠQ{bj*…sÈÖ-uËçjÚ? :Û ‹0···`<=(şċ\ĠuwmÍĤ]í/İÔA#IGtϤo‡0Uùԍô°Ôĥ̏wÍLĦŒ1ÇĴĝ@YhVO|YfÂ?6|ËtäÜŜ9Ñġ‚†ü­öÜžzkó·}äƒÊ˜9ŸGTôÂ6ÈE w JĠê)ÈNŸıĵ)˘:pœ*ş:§f+ÎìË~(83Aóƒ)yĞIC°w†fc˜|Œà•ûŜĊUc€ô‚@› c:•Š–Ób'1žryè–DyDc<ݍšX3;‡X¤cw'xt‡Œ­”#>˜Lk%mUQÂ̎ÛjlA)"•]jÄsxï@–İ€×T›0‰] ³CŬiÄÙ„k$Pɚ-ċC"“EOöî[Ŝ•ŸÄS_ża}öċĵˆšêüŠ–#Û*ĥÔÌ)>ŝÙÄËN=ì€s?fŠx[ î°ڈ-l÷ 1¤ÄQьlĠ<½&†p!`‘­I mÁôŝÙß%{ qÎf!8¤€+"&öÏBǸ{..› Ë|óëM‘2#"çap*„kwaz'ÁOuħ6§2AÇĝŻH<ìurŝžÑġé;aìò§M˜ĤGt2ò½9ĉ²mçufÉġ'ObZĝ@ӝ=9‰Co¨fĈ˜H~`Ş&*P=-ä*Fòâĵ°6Wvµa{ġé(÷/A‰Ÿuâ_”0üA]Š´"Z‚MÎÒCÏT²ödÏG0÷ïzÎ×ò͈x· Ü&‡Ú)G9i›òÒĊŻ€”²"NzŬĉĵ_9ŽßOî•$‘íF05D~iùäŭ†q ÂPĈQĝPÖ0–bd™ 7’ù–ĄŽCƒ‘~ĤÇKù^_JݧÒŝš÷÷Ï×ú!Ç÷Ż/ì|‘ˆfòiH5ŬyCŝş^ħ̓ê{ĠӜ+ġxŸ Ŭväëĵç Ş€£r8MÀÈB‹ˆ€EVżàħ£ĞD>êTáĝܓçŸÍż7(<}—sD`1BË ?O0{PŭÍdĊŞGĠߜ×-gŬs§O‡‘~ò§ŝ€â‡gù(?ġ`@˙!!#êáö?À?@` @ Q÷—˙^˘†`H…Ċ@¸¤hÈV H,•²Ĵ0„ŞüP“*Âdd˘ †m")@Y$ Ĥ&̉X`¤ €kòÀ00Lˆĉœ ab†f Ĥ"ƒ‡   –D@ĦGH@JĠ˘0Èş-[CŭM ! ’ ?BА:†dŒ–H„餷­Á́“ôÔ à‰ÚÂ1‘ ·Ĥ‹E‚Ê!@VÖİXœ%A Ë+!fE ÖLLÂç QœPˆ @Hb Hĉ@¤–E2I2‘’„˜?ó™8 x&¤‡án*żè!*X„àPĜU@ì@ JK‰ e@YÑE"¨`!@Ç1 îqûP£ùC´Ê°£  )l,apP0&d'$˙XvHd& ’çA“ Á!˘acI!€ ŽEO-0ĊĵÜ&& –˜Ċ˘´hFN˙PâĤNÉFIŝċR!aü“ù7Ÿ“ÏâÑàÁîZö‡ï‚jïêse˜ ïg<˙;€ÂìF‰ iiüCÁè(Ÿˆˆb˘2B˙˘ ğ CŬ@óÉ'ċVú”5û8/5§rÈ*"}iAîĞô#9Dg‘m …žîDa $ˆŸÂÒÛÁe:1Ê!ŝ…!Ñ4)ˆ,„`² ˆB…ˆ­÷" bċĝž~¤È„?ì~a|&— `˘÷‹4e^áHe¨Ó ¨Ò’ Èdpa² ú>òEôáaÛKkb*2ŒF–ƒıŝŝĴ%l"I!B~o !ù•S­”–&p†K0BXä à=˜ŻÚx‘ž¤³Ô=Á?Ĝ£A°Tü >‡ÀŭĦ“ĉDUŭ‚›ßŝıQ(,ŭBÔN"ĴèV ‚éTüİÚ?˜ŝÁè/ïŭŞN* ĝ†HŒ '÷”}ö¸;żö#ñûg÷×òŝĦŝ'Gd?ê›ĦĜĊ`Ä0†Où€Ȉ~vm‚d8-œ<‡À/ñ>ÖîżŭNÁD EƒˆPÂSgGšŠ>èXì÷>ĊGĉ( …‰ùPĞòa¸‚X¸ žÄ˙Äô?ĞhšGgÛGÛäH~FÁµ/”$ä@„X,0£üê9÷ŝÜ~81{Ĥ°½ @€áÜÌ)š¨%ĊF\JŻ`ĊĊĥ–@ÁŠaĈ0g8p–àĈAË2…T£&,²8ıĊX1.c`TRñmĵhJEPXü"I bÀÚ+Ë ŝ&v*ٝşöĵhuk Hĉ•Ŝ.ȜLñh_Ŝн„Ù׿ÙöĜ%ŸĦĦĜ| Ĝ~$܇üi“pCáBXDŝè~P•MÑC(z@ŜÖ Í4­ß7öèŜÂ\éĦɚùs£Ž)ƒaK…ÌGmaəCfÎ2éä€ÁŬ†ƒó!ÍŽàżµO_öÙí‘E°߇Ĝ³ö‘=°Ğö<ßA:UPö¨ ö? ò<˙rŭĠôññ>çêż¨ö?!÷~pŭŝsäÛëí˙!UöşvÙòv ~ò?µTäQŭ}‡BŸ˜{ŸÀdL 'gĉÉ ’@ŝ§°˜V=żBn; ‡Ŭ?Ħôš5ÏêI$˙?Ì´ĥ,˘#[#_ TŞ+ß÷ŬÈbKĝËÁ0h1‡:4°Hf'ĝÜà¤:X(%h€ŝЃ˘Ĉ&dĴ‘HĈ(D@<@%ÊÄ¸İ ŞÎT\!ŝ€J“IP‹$AedŞE$•(B°*Œ*I0Ì!RIR ABJÂ(B°Ĵ’,$•PŠ)°Y,‹ Ċİ!P‚’B²²A`¤•„‘J’*Œ b˜H  *‘aHwƒ#˙BIA"É0?ĊQw“·6ÂŻû-AÒŒ’‰70‡ ˜4ÄtVàÂĉ [Œá`À(žBVф€ >™~ĊÓ*ċ€ż°ˆİĞáüóv#Ĝû!Mĥ[3È }2ŭúc£2ì€½€À!ĉĜW ‡İ È{…Âáë§< AöˆH¨ hy l Â&!ï°f­ž÷‹1L˙†c$Á ŒUAE’e‚‡éXŞ `öRaƒ›HEƒ!a&s`"{Ò?ò:<ñOÔ³ĝŒ4 „A:Cşì†ào¨¤R'•Ù02˜,1²ÙŝÒh^ çxÀ蘳 Ğ**\ç"-mXĥĠ-,S³ SËŻà³2(bĜLÓ"hH„Iôöt]óĦô_͐<{“)„ŞSçôDĝòDù†Cì bÀLÄ @ŞÈ2J*‘"LË0(AbĊÙaH È´°¤˜&˙@EER@–@­…À–ñzÑQ1Q@P büŭƒŝ á‰ĝħ<†CCŻ„Ÿ‘‡ê}Ú`ڀ;’$üjA˜" gÔ=@ó@ lÀ} ÀüWîÌCì,„öS°PÈ3´vD(5%£ùzŝñɃ@PüEĜЉueÔ(.Îù%~ŝl’BA<£ÛÚŝ_³³Ë|vs\çXHvò2~v¸:&d÷UĝU=ŝ~ d3 Á‘@haANĦfŠ1e9% !BŝÑHUµƒ)7$ŭˆû`ˆĊ‚ ˆF "ŝTùĐ“â”}Ï|C"úÏf Sŭ–>hA<@’ƒĜĤl4PXáJ˘˘Ĝk#R‡ï\E” CÜàPXÁ”0[†‘Ÿ·á÷$>˜Ѩ}ŜĴ>ñÀ¸úĉ@C3$° ×_3‹DUDA`°dKI4„ €³)S)TX(Ñ"%‰Ġ…Hd?5At°JDXp0şMğQÈCê¨a´!°2P…‚âgàžE˘­ħ>ÑĜîOâ”0PQ`:Tħ Ÿ&DL+˙W˙ŭñàĜ›ƒ,O €H ƒó@´ФÀ*€Ìö ™ a0€ ~(?¤ ŭòhÒÀ,x‡É‘jĥ@ACG RôGü Ŝ>FBá…?#Ħ,@z|˜ƒô=‹0xq?áùËßËS,ë°4CÒĦ û‚’ŠFž¤a ÄĤ›Ìħù†:Sü‡°ÔŸêÄW‹zVĊ‰Êܲäµ)K¤ğ²ŭîÈÀ°˘…`¸°J$ZÁƒ=BèLB`k(ätá+VÒ³ Ċİ-Ş3ħX"Ħ†•-dĊ*‚…[ŒXCED)kEV*"Ĥm+*Tˆ!mœ3ŒĊEŒj6#—)†KJĊe°Î(ŽbT˘Ì8Ċ˜Ád0*1ETmĊ[”Ħ(&‰˘É’ÀÈÌ1(ÉRÚ “ Á„T$ˆ¨ĈDĠËĠ˜a–ĥÊ*1cÓWn1&*E ġL%s‹2diX‚/i„Â…I–i*I–F bI”VVHħT"̰Œ@mˆ[A–mħ „™C-"E Â1ƒĊ [^Id(lĦ@ÓZ îg&%TÌ ċ”Ì Qħħ(É1JŠ- E˘"Bn!pM,’H"*È%L"&H„ˆ¤ĈŒŠ¨ˆbúĠİ{)İD<ĠH@ƒû2ì4.*ƒ""(1A""NÁ &)$˘€ "ĦpaI dF²VBÙ²À=‘°HYXÉ Â@DQˆ+2 °D dI!CI–w£9™e˜Éñ0ä31ި\ğ(p üŽÔ%„=ˆ‚Ԉ[2Ü&ĊKĝA˘TŽ„!I)ġôA”TGC,£-(””ŽDaìɐ ‚db‚§Ŭà9 P%çX `D"+üÂ"ρ™h<'÷ă…;§‘˘GÌb EaÁ D˘˘ ƒZ¤/ eÀ!h† ‚ b HŸ0WàA ‘ò< >àd…-@Žžkâtò>§ħQù*à{”*´T{!TĦJ{ Ħ˘ö\YŬ bˆ|Àي˘%dX!§èmDrBÒżÇéóöQŠBrĈ J6(ĦH8‚’88´È„‡ùĦ‹ °ú?b%A„ “È:"Š@â>e„cž*Äĉ(˘‚IŭJ U¸ġÑ%•òBƒœHóûäWŝ$ŝ‚ŭòú./ì  'ô) A?äAÉÏ ŸóPöˆŝKä`?ĵ S „ŭ AŠúOóü,Á÷„NÄ?ċĊ>0î‰Ü!î ò,}N)àĊÉ^żó ˙@˙ ô?#ì`<ŒŠôóU>™?Sŝ²c*ÀbˆŠ+Š ĴPPUDŠĊXŠŒEH ö6l2„Ò€D{Ïäy|ÏÈä~èƒ,Còŭè˘_Òż¤?Gö]8 żuŝGÁb>Ì „û‹E&ÜŜlĝŝÑ?wïŝòÙ ™}IB‚„H°E`°D(EXĞXĞER dŠ@D0F1€t9O1!à>Ç ?SóU^„/ĉ䈟¨‘d!=Dîö öF•}‚°%Á?€€èŝ'éú€|ŝŻà ‡ÇĴg˘ˆv@>‘áżr΁~à6ˆ|‚ŸĈCâ~P!CCô*˜8Ŭ·ŭ;Înb–8Gó_şïóÊÎó½[×WFù˘˜èsn\qäÉÍ7Ĵ%…œ·§£Ħ{Ž@ëӃ…ŭúQ…ŝúó­Iu$Œ’ì°²ÈÙàċû˘ˆQ! EX DFAB@RY‰bH0"‘ˆ@BDT„Pì $5܀½€€v0ùéŝûŠ”Ä#Œ Clܰ/$lıé˙xybH?×ŝ (\=ïìÀöC-˘I´“>An~uWàX@T;2ˆ£Ñŝóü@ìv “ğ9GáY褃ç"‚T Ċ  A"AT˙=²1b˘ħ†&X˜B¸L1HP  D0#"""˙aoıħ?@ôħ!ıä PF‹ŸĊ˙‹J4ô9A•ƒüM @XPÚ¤$à%ü äŝĦµ˘  œwrŠ`ä!€Aˆ¤ R# J+̤’İŠ-~‰! ”ı"LTXŠ!ĥ‚î–İ·€ „ZAxĐ!CjBŠ!Hƒûĵ§ÄASù H…<ê+íŭçġD÷àK€xAŞ}Î X0™òWôì’)ĉh żh–Oİjˆˆ˘Šh$ħŭ¤HǛ<ŒŸ"Ğ@˙:€Ŝp÷=p>Ş*x §ŭAú DFA"ŒPQE ˘‹$X#ħbħbÁdX˘‚’(",QQUŠA„,Pˆ1Ċ‘İ EH’! Ċ€¨Äˆˆ D@X ˘Œ †Â)@҃!Š~#‚…VÔÂ@ —$‚XĜx F„…vGħp/ê+#ô?yéOt¨‡żŜö„ˆÀùžc aòˆ>Êü†„M„D:ü~aƒPHÀ™A@Y"ŞÀB … ĉL¸"´‚Qb$F,Qc*•D2U˜Á ‰‰acقFx­ ˆˆ” ) J|Â;û *‘Èa¨£qGZ‘S‚ˆŭĊNÄ@ˆ¨İÇèêHׅx4XvċƒĤ²¤`Eˆ2ĵĴŭ@À PJ„›(`ˆyŽñ–"ĊTŠ(˘!„ĴmÀÑAŠ˘"E­Q Á´EEkXÄAVE$ . *#ˆ˘` ö䪢Ÿ4ÌĉhnîëaV~„(…$(‰ÈQ²è ­Ĵ8=h YŭQĝIN )ħM208AğATÄ@Š+FT‘ <B áA÷Cĥ„ŭĵ  "ŸsE†Ïîĉ¨@_ЃßܓÊĦ“ħ'\LÍëxÙ&÷òPÄUCŜ H0×cüHÖ|OıĦ'Ě6K%†Ì'Ġi;ähĝnŽàÁFdŝOƒŝgÖ@41ILĊG œä%ïç%8™˘(¸­6·£ŜħƒWSšğşĤ-u·m74B\HlĦ§mħĵ8Yĥ{XvB ƒìR˘”mS@L‘2l0GáWóúhCħ)wG ˙0U *öġż bµô ˙X%üñ^×v[ĜÁ#‹¨ Ĥ†a r}.UŬĊ·‰$…WËÍ{hŭ+#Ĝì@ħvb ğï53[´.<²@¸òPŝNñ``á}}Ü I ’2a T$’ÂÎÁµ) šTI‚“ĝ>Ħ%ƒ’ă1I’aTó fď@ ‘ŻZ˜Şj!H½š1‰ù£0PAÄ0ä3 Â"ĤÌ%Í܁$*C×ô-Á„¤ĤËPR\ùy)ĝòĞÏG“ˆä ¨ˆ O‹ˆ˜˜sġ)+ £ùwĞÌ^wĴħÊÓ~&B8C9Ê6Q‰ƒ ™HÎ÷8B*‚ÁÎZ ˜Ġó“X‹sɸÎġÌ˘X!‹GÜî¨ĵ Ŭ ›ATİÂàäIc(ÈX‡ìhú  Pš(XA@„.ÀP@òa @ĵiWbACrÑ)ÑTÉCĜ–  $˜€64É"O00ˆäñ…Éâŝ%˜[³;4!cà÷@ ‹ÈÊxL°^D(èMZB ˆ!çğ- À_`lÁ|àäX'”oêҀ\rKŸÊŞ)‰DĞh˘:Ş#†ŠÛbĈ{ĞÉşdÁniŒŜ‡@ŒŬjÍ*Ċšdú/Hp$"ĉÒ šµPË)'% †A¸Ħ¨Ĝ™ ğ]Kl‚@2Á)„4P’‡ “ÙòĉvÏB¨äT"ĦʒBCğÚ$¨üf‡ÂmžŞË)aI’†ƒŞd'Mˆb1ê›?°A3…ÈÙTĥ%´6g£úÒòŜÙ³³eĜ$Ħħ’ ö:ŭƒ"ŠĊHš@‚£T%-†`%:îQËÂĦÁĝċlÁó“$£bÌè<xHCBl.Á,Ê {ܜLX!ĜS²`Ĝd€{àlà-Ĉ O ġ#Ħ'@CMpt\€Ñ ”b1hˆCiúùÌ8\ $:xM„@IöV¨ùWjÉÁ#!U)(zy@d9°U!Óô]/°P†Àä÷ìÈu„F†)&Ú ì0ö, Àx*ˆT…U% @áó˜#T0.Pƒk3 pCÄá,ŒrJ şU{ċ* €z‚íñáNċ„&€bü ÈO@ŭ$AlB0ƒH3àÓ#bP?´üFżTc1 Š^ƒFƒÒĦEÄÙì?z@ü@ƒĜ÷ P ‘#Äd„ôPìp"]jÌŜ1€ĈŒ 0OâG%!hPÄE˙ÌOŭêàşÎŭ ˙˜Ĝú*B@È'ĝŭͰœ¤÷ ğ(,sŝcä£dżóñ;$˙’œ„û@<~P£ĝe˙ŸÀ̽~ù•&[ËYÁ—{0·ñî`˘’ñtôQ°~€ġt†Y BYÀ~d)aė6żäĥEôáhGÑĝ‹Bô{ŭĝEaQ¤ÑGûúD…ûìû„Ċ‡ĉDHA@Oç"ú=€¸ŝϸ $x˙§à0†ò<€{/ù‡ĥE×­**”|”™G`w“Ŭ~üÂ9ÁOéĞيĈ ŭaCŭ!cĜħ’ " ŒX‚Iƒ,ñĦù°€€÷ĥ&fŸê ‚À~„]•A{* ż"W?§ò`ŠÎÀè`@P;_ä~ŭTàÀ"ıި”Éŝ,mn…ŝ̄Hü‘x#ŭFÁaêñC aO“ ‘Cd @âĥ0у€ €|‡“ŭDìx#€Á÷Üôżäƒĵŭ`û(@Ïáġ×é׎ $0ŸċU4ò¸}Ż&ŝ€\W“úp (?aĉù—'ġŭO€óċï)eÀe*(•A Š,§ídÂa(*Â67>8C D‹05…-ƒdcbqhÙ„,€I ‚ĦLf,YgÓ&È[BÚ0 ärIBˆÈX˜1-‰€pD0,°ŭBÇk€ (2ˆCù¨ à–scû1$(ܤ@¤Q ¨¨ @ŝ ˙úb‚²LĤ³‰‘Ĵ R ż ¤˙Ä˙˙á˙˙ôÁñüĝĝ ÷„ġÜúÊ{â”0 tuġĥè=ö×ß3ïJ`0•¸ùê/|ñ H;ïšµ£ZT€(  E˜Ş€ĞX‰ZÈ*"€UĴÓJPĜë×ĥĦï;Ş}ŬĠDt ”ëĈ€ km³/.‡lô‡vĜhŞ÷°yÏ]öîbKÚÎv­ĤĤUóÀ7ÛévhĦÖ´:žÀ3Xĥvv]cv7ğ‡yım`;ğ—Yğ¸lÚ×]ĠöëĥnâkE"CDƒv[P °ğt}z{¸ ]´)ÓĥŞŠ::]kd@â  cğwJìà4Ŭr­9Û|óz§t]ÖtrӝvĉÜ;ŽZwwSuŬ˘vsĴħ°Ŭ˃°ä;Ú7+ıœcŜ6ğÖJĥÉef]÷]xĠä½Ŝġ{Ğı hk{8vxn‡­ÙġÄï„aĠ_F÷ħʘáJRU˜íYïw‚}o}Ŭħ•¨¨Û![,5‹7×rXmY ŜîzÒH•PYSk$UĥÍĤŞÙáÍÛc+dİhšî-‘OkÍ ·m EM°ĥ“B„˘$BŠÄ0ĊĞÖëRÀ&¤ÛV²İŜΕUeUm–½ïnʘöçŜsëŬµ/ĴˆB*„Š„ÄHÔҞL™?SĠ?"ed"(‘ Lž£Ò 4ġ@)ˆ„!$ȍI阀Ѡ šhdžİ*i2fˆÑêÒi 4" @€LS&§<'İêM4MÔ ‰ Ħ1‚1j§é“ 3MM2žĤ€ ?ä'5Ŭ’n*ވ×ߕ?áEŠŞ¨'ü*Ş£ Z–X’À,AV%T…Y`VX YÄB¤’D¤Ħ(¨RBË…,ڈÛl²uUU·íímZ²Ġkmjï0HÒÀÓ%İ…Šjd֖ÔR`FZH0c*mİQYĥP†³IeŠ•bk ¤˘ …Ĥ5ECB‘š6KH¤QYĦ‰,Ä´E­b"5QŠÂ¨Ġ6ÔYĴ˘R²JJR*4´0L™D5b66fŠhF°ÍŠŒDhehڍħ‘" ˘-aĥl´Z-ˆ6…IŞ‚£Y›D´“LĤ # 1ĴĴi,Q²RLm1ch€İİBD,HĜ™ mĦޘY*2É `ÚÍL£FĤ”KA´b4š$mM‚Äm SR ‚ħmEb˜IkEcj(1 eIPÛJkQĥÑkb(Ġ`Ĝ‹fi*šhµ˘ÈÌQl”)“mĊ¤Ĝe#fµĦ-”LVÑ­šh˘ħ‰5%¤„ĊZ-“P[lAXbj5£l˘Œ€kjŠ„ÒY°ŠŞ8UDüŭè˙eGö˙JŻêğŝżëŝ´á£I&§ŝŭĴij˙dĴ…,Ñu˙T,•D]ÜßâG˙ĠÌ˘{iŝÑ]ĥFމêö–Ó­.%\ì˙’Í›_şŸżL‡£Ş]‚dÌ%´ĥ˙yB”ĈüFŞQ$ĝ½ĊĤ[ JÔhġé—;ğé#ÛYžy”ìĤ1H˜“^oşž½iînMë½á6ŝ˙³2ö÷ŝ^ALĠôżeèGĜmmÒbLĦÂUBĦ…hÏAnéċàµĠŬ­²ÂĤ#ƒ ­AŞA°4v¸†'MĦ·ö’ T…1ĜԎ)”Òw›7İ 4ş‡<§9A °%‰.àÔp >ŸöŸÎa;íŬĈi=˜÷çĉôı(ŝMJêPBŒË*Ò\=% 'çV˙ç¨ŝèD ŭ²X|ûWŝġ „Hd¤ ˙³MSPóŞ"ó>Ş˙o qRBĜCß0yS˜/Hxʇóŝçüġ`d˜mâ}†ü1×ö w’ßÚĵoŭRbl, g‘ŝ-/ŸžÖÏŭD+¸YËÂÜ œp*qñŭ8ßòĠÏ-Ӈ„ÙöĞ!Êežyms.?-1ES+3)s E’‰4”D•ĝûñĝĝ³ÎŠ$×+’ôë•×vĵ½îX˘'§şċ‘9ÑN21_ññ_eÏ/‡;ÏGù}ğßÏ]1jĠŞIĝuċËYŬr uî½ço.DDîĞğE‰üħĴbîFĵğjMŞÙij^1••´QDS")×Ïz½îğŬSÏzéIûŸġ|:"1wtNt˗(˘ˆ§:K—&E&ÓŬ\¤ĵıV{­Âà•TT$;WĞÛ^e~´^½Üû°ŞuŜżŭ˙Öŝ§Â˜Ġ£ÓYœu/0Ġ§€ü˜ B;ñr/ëNo{ 3úbñ‡ìŻ|Ĝı…žzÊħ7)>äÛòrpîÏÒÚûżŭ•}kÓ'—êiĉha4((ġċ^µD„ÙTŭŸ ûı ˙rFp+ħÒ R=p‹Gž1Òt†şÓ˜˜Ž`n— ȑHBaPµ{ŠO¸ïÀ›é×O7íUÇıetb§Ûš|rbwĤâ­KjÛĊ]¨éW=9×ĵ‡”f/ğÀ·‡Œ&kĈ4&‡íì Öħც×ßÒ·ü4ŞvÓċö¸vZ ííŭW;ß­ş2‡:gëċR½Bxop²˘ĵ‹JK}˘=K¸{wĦ@ŠAa'ÂDéeĴŸT} ·f‚–iÜŝ§tc-*“ğ¨jVëïñík`>0ä[à.¨…‘[|Ï!}uÚ´ô ĝl§‡|°ßñàèßá{ö–’ ‘*¨C”&ÉúûƒġÉĴzÑsÒÄ N òĜHĤ€ùŞġŸ—]4ŭîï6&4*£Óћ5,Ż…^„­žÁO‰İ>żŝyĝy  à.;¨ Ħ€ûKÁm‘/ô³ƒÖGvñĥ­)ż%1Ì$BB+Ö_”úKtÜzëÈÒéG}~ÎOŝGX¨yú)kÔ | È!&Ĥ )HŞ2 …1î„”éĊ€wŠ*ûżñ¸ex/ùè/ŸĦ§8.û˙zŽfdÖ& z÷îšӞV•Ä@Íŝñ쟲ù@wC§6˘Eè€uŬ˙¤nˆ‘aj‡şنÈQ2&é|Vħ¸:@>³ğ—['?ÜèrĤAñĥƒÂP‚G´ÄıÚwNrK˙yˆĤñSÊ´OhAùÓG’_Dê òé.qĊÑ#É)1ÚSŒnĈhĠsXşñYa QúżWÑe4>˙½ésD #\Kï€6DôT—H—z”L•P<Ö.À4”ÜôCiÉîĞ?şv~-nŬ­e‹\2ÖRkR¸êñ´Ŝœ¸œ÷”jÀMÀĦ˜Ÿeóïïpí?š}ġûû[w¸èçÂ=P쀉#Â$”<­‘ş${ 0ˆ‡…”NU—ŞA"NvsÚ=ŝ9ó×o™²âòú×xŸĠş:Ħuşá@Ñ„.ÊÎoğ '_U˘ 蚭ˆ’uşT.„ŝ!ÙsW@ ŞĦ… —œï—4ˆfi<óU '„.8„ƒpÄ]a…T{g›ŽK’˘š…ÉIfí-¤5XE- !Ö=bóˆ\ GşqÄ=f‘3 ÇΏ„\¸œĉħNù‹˘LO9éÏë #e…èށÂä´C…”u]d ù´!%™+ 0Ŭ”ŽN2¤ ** (µTZ­èof!vb:-ş²‡d8@Ŭ]W ġ†#„·Ÿd˙Ù[ċ½PÂú˘PşúbŠD †X0b ÁĠŻ×çˆŬá}fÂX²×"˜Šv˜9FGIWŬLv§ùî‹ËܽÒuŸÈÓaëߟÍp7d›/kċñJd{8úöËڌq›5›WeEçÏ:ÚÎ>9fü†|ÜùÛğyÍöÜ})œjïµÌ1,ëĤ²c—–+ĉ³'5³;Fvü!‰6K!ĵ‚!x€°òÈSȇ%P H…  „żOŸ@Zƒˆ#ĥ/pR— ĥ^¤|‹LâH· TV˘Q:¤ħŒ#„°ÊĞ.ĦĈŒŞ+šb¤’mˆhhHhM3HĜû heJT׊ÀWë€ a7 BfĤ…‰À ÉŻŜV­+@jB ›wFÉ7 °,sItk{)ĈVÌï“=ŠÍùÏ.C`”oÄRÄâR;‘Ä%qRƒÛñár#JĵA>VwÎó׀ĉĝ Kħ6‘Ħ…Sut†ƒÓ|3àd)T‘g•×GO$…Â:£àğğĜiŒ[ò½°ĠX”ñQòĝg ‚ .Ü=‰KFÙqËEÔĥ3ZÑ+„ˆB÷‚Œĝˆ[‘ m °§q ÌxÔìqŜùqż4÷wu"RH‘Êm.=i˙j7ß;\wËïyüÔüϞĞİùòc7ÚvçNnL^ôWvVVL†ÇɕÛx6}µ Ĥ0jdz…5½’üözÒZÂjÓ ˆg1‰…ÄVe‘‰‚'ĉbhGDÔr‹5›ċmşnuRÊK çcÉÛùî÷½îşèşÄ§I÷gX_Û²>\pĵe¨£ı)ġ_̇co!DkŬ|rlzFÔßw^{Ŝëğı™›ˆg½ïo>Ú^mĊW¨›Ï™Ò>²g|ŻŽéÒOëß³`ƒğ_zqíô ğĞÉ'-ïÚß|uÓ]Ÿ4ú}wœLÛı“SáÏFÏ·Ófo³×›“3qžìs—ÓCÊÌ ħôDwϗ™ÏΙÑĠQsyß.îŝ_χÈöÏË{íô·èySşê2ŝmìûĥ#`÷‹‡1êŒëŠżvĵŻLŬôßsÏė9³×ħwğÇ?=··TÜQíğ·ŬĝZ†lWzëq÷Îߎœúüĉs‚ĝkâd|„s=pŽˆMŭùïó˙%fU Jĥİ J½ŻMÑÌf*}{ó1qûUÒZùĠeÜš‰ŭ ›ov³½óz!˜ŬDè–ȸŒŒĊ¸İ$ŠJ7Dı:™}ŬÔ¤\•3LËm@„ğ³@Í çLğlyò~*³EnJ4È!|Ĥ\=c“ÄMlħòñ¤Ñí*û aCy–,jÛÁñâ‰QcĜ…ïl#=³7t>/Ċ@CĊİÜ<-Á4A—ëÔË·<ü 4Œ,ĥ^$Žq’q:t–@Qه•i ßgYE˘·^ĵ᠚)c|98icê2cÇ Hʓ™ff*ܗï[up•ÏWCc8ÊÊ\r¨U#/V˜ÄIê,O=ğvŽ6BQTÚ!§Wëñ;0½O•:uE+ ò[›†b‚†Én)áÎÁM½<ŞVĝ‘Ó4-`°î–ÌÓÑĤñ Œàò„u@5áÜt§ $ Á÷ ĝï ċéƒÄŽÁżişÈ8jÂÉuTl;ĦéĦ^1g0oÁ£â5q–I^—fvĤváĊû]FµïMdîâ‡ËM0İ=svqFÁœ‹"`‹ccg‹Ĉ6?>RÙâgĈ–ŠT˘£Ê.ˆXŜÙÊ{–ÜUƒC]3k‘ƒ{]YNşé2 ¸7Ĵ·oz÷ 'ÔJò ˜ŞĞ¨§ŠúÈiĦ$·ĉ%Mö\“hż ğĈ›;BA,ÎÊ"şĵ35–z\t2ùp¤³Òä=zĥ d3mvDÏğËËĜ…ċ‹‚óĴ½~,Ïxñ„'&IRáP.(ǓC/SMáÎ^Ë~4àödž†¸Ò2ùœQ¤UÀEB4vŬ܎ޏP֔gwTDĈg[lÚ3r*n› ĦğËFpÎ 8rğggdÔÓAzJÉ´šô’[Z‰òʘlĊOçaH}°xĈxÂê &+g|cµà(ċ} ì ’WĤ£v½dM˜½çĴm²rg‚J=ċîq%àĈE1bŞ™Rq†VÉEìaÔj×ȜĞ2MD¸)ĝzĜ`wYĦE‡Ğ9LƒJċì1ĈzŠ4‡gĤ§{w‰Û °ƒıÁ,Ójĉoî óÔEİ˘‡=SD×u–Œ…ÀQ&àӆ2³c4o”ŽS ÊÙÎm{fJ7Äíżx2U-TÊóĞk^’Óë!µ&Bœ M;YÑŜ/´•sÓÌdJÏqrĠNĊL|FwàĝÎ ‰ĥgÂğĜ°,œÉŜÎŒe›á$ً fÖAĈœG^Rƒ<\ыkĈÁäúÍ-3Ë)Ti‡6­¨rD^*ñ4x2ó˜ÉVŬ['ukICVfot>]Š/Ô<ñ\8,şÜ˜ßAıžÔéĞs½Ħ…¤ñ…OSĴkÊOÙDúɕͲÏï_ú~ż›ŝ_òj;~saü‘ҟI ŝ,Ek€İgrêLäY˜Šĵ-iˆVŭ/uŭdEâŽ- Òŭĵ¤‚š€hż3˙$ıùC:=c”;÷³yX* ŝ_ÖÈ˙+^&.ÙÔf!ŞŻĝù Bïú}ïÓti‰ŸìŽ{üÜ4ÌŬ×WjVï×ġY÷û/Ä ˘Úk³G`ëe‰^DG¨Ë_^oQŞ;£s(üÄĵË>kċĝĥfrûW ^ÎŬÛ×%Xĉƒà€™ġi^Vë]­3AWdġÒUPRìùpŭëjü„:vçà™y„“­GüÈɉMÔí‚ȍ'?Tb,œ´§ĵàtguġñïñIJ>#ċŝ_ù úg-âv”—5ı÷ş)ÌożİӟM½—i˙qœÇyħġŜÉÈe_ŠGÙŞ>óFY0¸|ʽĜK3ˆÚ^°)iÀdÍFŬ—­ŸÓ´9Ş~şû òyu  Şmd5s·AôFġ›Ö>ïżÓO~š Ž8ÄBÄdi=\È(‡é+żĠˆQƒ^aÚĥ ŜAôv€=]Üoż­=4Ĩ¤>4gĊn£•,Fí”âßUGPÙN˘îßÏÈa²§‰¸ ²Ñgí-ä'ÂA—[ä;ÄSŝ•§çöçöú~™ċğk˙ uIxvŸd&§J€Ù˜şZ?/×~Ÿ üä? üÚ_×ĝxìżOŽ£Žê¨ú<İO4TŻÛp;LJqLÙí#êĞÙYZÍtˆRB-H3 7Ü÷–[1–¨³™rùġù˙)~?‡ŬĝËĝËùÏ·è˙·šmŝ„8é&‚ i˜~à†ÔŻÉy­ġ×÷­mc4ĉ­ô˜~Ğ„N’.wˆäñ¤`LSʊ@A1_1)ZaÑßô–ħÑmÚîÏĉêëŜß0ğúƒËĠóÛóïâÊ)´²é áRġĤš}ŞäfâwĴM߉‘´Ĥ>d#µ³İc̃íŜx²Ÿó„Ÿß'Ûu>b=_ċ$Ĉv*œ•lû¸g ŝ^C^E+Z´”ŽŻšÓĝŝ{ë³+íĥ?l<òhĵt/öËĉÚÔë,mvĊó[ÌYÉWlïVJsÒd3\>İċ;ZÎfĤĊùÑ÷˜E•kbÉMìĊĤÛf°%ğ|üŬÈoŸPĉğ֞4ñ·càuvd\Dâ˘|›o3†òÜӆgçdö[S3¤ĥ•|ìùL0›ÑĞF€è· ' Xˆwh³'‘+ˆuèĈj“Úk*s†c DĞ^ìq¨ Ùs1E;WKNy”U­›Sj)ĤÀÚĈԘs2ÍĤò‡”Ž%ĴÖĥ˜•2àJUÖĉxËĠÓC\tږ›†–tN˙‹ği@;äÁѕZl7‰ÛJ ­,Ǘœ8ŝë%Vëċ­G5_5¤­×Ù;_;µˆ6ë6oż³ž~|½kŜpVÙè/jödúçAûòOîûë£ĝĝ}ŭüÄdĜß_”×h“[ş?Dó >™Ì0´N’Äó˜Ĉs{â˘ħٌRZw›,+Ŝ"£-1Ĥsg~nÚ­'ĥ4ĥüW‹×Fĵ™Ğ(—§£R…#FŝùŜ4kÖŜû“{1u¨§êŭ#Ĵöšóï˘é™ d†\í_7xĴ5Ĵ†#™<ĝŝrŜËÈyÍĝ™œ†^DÎġİkì˙?œÊ7öÔéb.Ĉż.ÏĠlŸnùĞĠnóĞżdü}uüLŜ÷Û sŜıĦ;½’·Ž§Ĥk`ÏÑiÈUé×\*ÑCiZÊíŒPXÒM$ܚ£ÊĉúnĦ} Ĥâß6ġĴ.¸÷j#ĉ™µĉŭÀ~%ÑĉŒe¤5ÂNäà<)Êrkğö÷b=hÒzŬ;§Ûg:=tĴŽ‘5ˆSPŸuX›†\ÑšĴ›m½ŝ?g-(=“ÚÏS }ŭ³JBO)4¤}vf Ÿ£móğ?fžfC1ž´ÛġÌêìğĵI6Òl/=^ó3.ˆ&ô½_hÙ-’)w¤YÛÓnòŬŬ—m·Òê8§Z˜FsrbÂ2Raá*½àV" BÎjà;𜤅FS&dÙDEi+YǏğ“ü<™3'É~üÍÛÖµ­fiñHç¸_˜ÎfsššX‡ğš³{̽ıÑ­I$‡/ĝğ.ô³ŸkğßÇòohËÖ´|c;êÏĤˆÈJoi#ħÌż²ĵµ”…ġm,K ‡ħ¤Wż´Ŝ8GŻD> şECÔ<,B’Ħùg¤lô!vĠˆ ƒÌ 'ĦèÂĈĠ [>2#…êFY×ÌJ˜Ĉ1y„­.³¤Nĉy½hFU²œ>jáµgž("WL~0ôş[BR+ƒüž‘r_]-ŽËjm?žiA1š³`Òn-–gŬW6­™µy‰…dĴÒ-´ŜuÂwż+ {ïDŭ÷óó,ó* Y‘|ĝhn§ 5PôĴD%µŬKD! u˙)İ CX/ éÇ6/Biò×Úé‰ çÄQĊÒĠ›Ŭ´QRIQŬÙbbÚ`’Ĥ™ù)žµ;²Ú„*eŜcHöŭğıòeü^Ñq­üg—áĦHmD½xô‚í,UxÈbù ¨“îE5 •éPúÖóM.\Xƒ¸ĉĵéáç‡C|´‘@ÑQHiVAvf Úc÷’ğĊnËĊ.ĝÒZM ıM ]ġɘ^û' ú|Œġ'Î\ÒF´ĥ“7iˆXž,E%ФˆŠjvËn'Ŭğšç.H珘ÒJÔXİ[ĵ3Ŭ¸ÈZ’’úŽÇ].Y™ç/·½Ş¸ıžîÏB1GÖ%j—Kœ\qŞ!ÛçWÚĞYġםläh;]ŻiG×K™Y*úKÛ-qbJ*FğƒSǒM$ŜF‘ƒyÉAĦ#žĉïJk0ŜŸĵ}é<&Ĝrô(ÓiUöô¨J“öÍZqĈƒĜĵF*­Ö§~³½šÊÔÌ6ou| …ùžûşOšƒ^D8úĉÙŞyò*Ż&š4Ŝµ5—œ^)×f8§=żkiBLġ݆Ż7ЇžçĦZÓàĥÒŻ3Ċ‰}òZ<ùLÎĞŠlµ³$ÓwNÛħ@ò™˜pËUš*ġ÷o#rÔb~­+œ  šjÒs¤|ĠŸnÍiêŜbSìçŭ*I!ċÈ`¨4ŸMF‘°`2·ÈiĦµŻjJµÙêĝğë$·fŒfĵHaÑT'P•AˆŠ€Ûò_ĴŜói˘‚wàßú×jqzÓç(uD’k—ž<†¤UZTUaĝ‘µĥž×Abġf’NTĊĤá˘.8^ŻĴ²sİPş÷œ~^‘2xí“ÄP%Ij>‘ˆÄ$}ñâÔqC\ùË÷sÍä§}gJ×||÷Üó2ïÉħfµónÖM·Ü-Bĉ5ŭßN]+Ó4ğġÉĊÏh³ê<ñ,q*½ /YfŒéMúÖ|w Äq!ŝœ&úzkÏ{¨÷Ûı½ößK;uÍIiHÍ#ekî+ûcjĵç&xÍ*HùŬï3vö½)§ĥOĞ\È$'<ó½b6Ş’ išV´%}úıß5wĴħ·W@.˜uĥC6ˌEôğn%òï5íŻŜBs„êê6‹_ Ômsx,ɂ•3 nħš=3£Ċs}bšCßFVtJI:–Ċçxœ’Ģjjñ¸kÉ6^Ġk­Ĉö›…퉂ê+÷_/³ŝnnÍKMĈMÏ6ÌEœG]yîĝĞ͝ݤĊŠĉĤ‰‡WÜóžĤ,cI-žĦÏXA%Ŝ ­Òğġ%RĴ· éBUr½×²zŬ4EÓZxÁĈM·\!fˆSÄ!Áhġ dž&ÌZӂCp-á ù™ ŬNhEÏ]BÍH÷ ĜlŭĊ´.pê;2cĦ)dôaċéÁĤŬŬı‘Ú&HeäÚ— ›ßğĦf^7ıDϜ|ƒv|žôĠ—DYöżgè£ú4,ᘿe£úyQixc 8Á›e„–…¤ Ùj[Í ÑÛ.X`éfMu#\M8éğ‰XĜ8#ŞÀJDŬ!EEä-­U€vB.Àh Ìtp!¨Ò;PĦˆħt¨ĥƒÌ¸X„îa ĥT‰À;^FÈPìA99Êê”+P8힁ÓTÈGKáĉ&†GvQ{.6"ä570`èQĴ%*F#ô—ín–@ŭ„AÊԁ3ıjDĉ×(q(oĦAnàh‡DÑ2¨†Ĵ§ڙ\ZN4P´ƒµÉxɃGM>úI=6Ç,HîTİH½[52è³Zó ˽CD1A ²U€żF,47ML5Tˆï ˘ÒÚĜĵäóÎ#Á…dzGĞÈj<ŭşK:œmL c€ħĜyh$C@R*½é·X²uNdoĴ#°ÒanĤ£ƒFs^WËGB„„uG’RÀĞ<¨ŽİÙê[˘96ç’ÜŽZzPn!Ì{ƒÔ^I ì–GT0'":#‡‘£—›¸XY š„1¤NÖ ‡ÖßIĤ³Ğ ŻuFĈ}6zn˜ÊĊ†˜4ÁĦĦ#^?‚J(ÄXÜzdvXô*&"C_(Éf/QIJĝd=\;lÛzt< ç ÉKJÁĥ66™½ƒQFşC™ˆèóÓ··¤ĉò½{òCŝ_ŭPIù×µĝ~ß_tÏÍüà’#>”슚ŭÓó˙-ü<½óyÖğ˘6Hk­T™RzXĠ…ݤötwvcàTŻğjÏ>÷Vú7dêêuÓwu_q,Ż>ş|÷Ä _?ò2Ój ĥ[$Ô&­-hàÀêD2ğšC{„(ş`9żŻž4Ry$ġġHëÄq7;˜GTBĦëJ* †uÑËQ2'!Q.‘È"OTD„˙HÂO´üÒè¤OE8Uó Éù‡ú)öô?ÌżEräĜúCĦ„˙”Ûìħĝ¤êċ÷:CÄŝ˘r’7x£htŭF_¤Ú~nÒl¨ġ{#ÎGŞö–ÈRz½R?Cѳ€ĝeCĵÜbĜĴ,TŽ€;Ô]Ϥà~ÁĜ_7Ŝš›ŽÊp´: Ċ°í]Cƒ+¤‘  Ú´52LŒ ÄÉ8h:‘\ŝé"ħ’$8 BtÊôNÂ>'ä$Hû‘ Z!“u<@köˆÒl‰;’x{ŽqúOĦèóЧĉcçĤÁû(†êçäŸP>†ƒħcò6\‚›{Ĝú˜˙@pxÓf{(ĜħP‚Ül%hUKş'ÀĠƒ‰úçòxòù]=Mŭ•Ĥ§ö„oM™Ç^Ÿĝô‰£™ÑĠ;˜ìċ×oy§F§ùŞ“Cpĉ½çM€żžZĵŝAÌêaÔr%=dœÀí¨÷àGbù¨jáÜ)£1–͸qÓ Ĉ‹;DÙ³Ö+§špr6ÄäRn½âċSÜpD܅êe™ à‹­4ċħHSìäy†J>hpàOÀDMÑAPzˆ†JġVK TN”ÓŬËÏËêĝYUı-<éŝ×>Ó§ħù„`,Kà#áû˙{žÓĝNħġé?´úˆX,ŞĤĠCZI5I[bÛ6£#ìD÷#á̄â!ŭż(÷ $CĈ”™b!l˘ÀŠ0‚dD) "¤„ŭÙŝiݘ‹²¸4Š …W 8baŝ˙ž—Ñïúħ܄?Ħ¤í(#5†&#H˵wĤt”ä˘ÛÁŝDù£Ԅ/ú@Ğ럷?oïŭġŸ‘›˙vCŞŜĜèöfMú;I4ïiêciG!é8Ë2Ċa°t•l˙ʅàÛïOŞ&˘j ĞÎóXÓz•ġ›ÓÍíI–µ—wp74âb¤—œ$4‰G*AÉR5!¤*lmĤ˜ô÷ 1h‹iZÇş’<"ı(b€&J…uQCZ‘0 قkÀPà­ ÓäkӞe"‰aUĞ ˘€Ô•ˆäÌ%TN{ĵlî{²GUz{všF1CHğ=p鑯*â2`×ç=ımßLjî5&$SZÀç ˜iZżµµÙĥî_{v÷ĠٞŻL·rnöĝÎ$ôíĊ)Lıˑˆfë%Sžj£Ü(Ĉhg+”8\€ µ˜E˘kCQ§¸áTà]Rš˜4˘ˆ80³JqäÉ#ËH•˜r‚΁vż"Bĝcô ¸3RŜ°À5¤(ò°·3ĵñX—¸öM=™Ĝ÷fA“Œy—~s6UT^îóuħ—0Mnó­è¸˜żféžÙš'·/:öİ×\Vè£Ŝo(WuRT–Għç[ô›éżg³/]_ĵ#ÜĥRŽYĴ•£1ŞI p P! ˘`‹iŽĦVÓIĠŞ)ĥ÷›’ĉî]ʧ›Â`k ‹°°m ZĊ6ۀj*D&Òoĵ„dB<šZ•áŬ +•É ç5™l1° „j8(SıP<Í”0˘aꜴ(Íeħ·hµ* eÁP˜)‹O¨0´QH¨ĠèE! Ċ–5M ;›~öb³ÈÍ ½^]-Š'ԙcj‚HÇ<9LI•R›HĈMJ]àO–„jġ ôİŞ¸ÚiħĥÊĥ¤ÁS,[VÙ-ĜŜÜomÎuw….èĴf˜] ˆÑ)£ÈÔSE+Ĉ°D“˜C½D$š1Œ§™B`N§\Ĥèh6ÒÄŞŞo†€hbY8LmZ…[놲&XŞJ–E9é™Ñ;HĞp²(0„0ˆ@@Ħ· PÜ>žC‡ 9ßyzğ|këêÛ·Ûĉ‚‚A|Y¸ƒ#s1{}ĥcuñÊ!z!(İ”DB /D:Ĝ`+ÍT$­ğFL°˜VÒè .í + E?żáoŒĵ •'À<…öcÔ¨TLDËËÙĈóo&6#ziö˘Ċ·äqв•CaŬ#ÓPÉ$˙°Ĉcxó]örZÌ"f#ΙO?nƒqD:‰”ÙĊ˜„^!¨ê:t/lfÑğdKBÊĊ9Fl`Ԓ8ĤN6µDÌ2_ɄY)%½PdE@oݤŞ+£N…Ax„ĤSê?]¤‘Òşe6ŻĠöġ†‹ l <ħÒĠKÒ|@JÔJŬ 2hĊK¤‘”¸ı`jq:"'Ñ9½ ¨O,œšÏ4 ‘6’ĴB{݁+) Ĝ2Íb‹’ÖdŒMJĦµZIh–˘3YıĈ×{.& ıíğ@›i7eġŻ3ÎŭƒO§ùO“W<ƒË? Ĵ›Ü'6˙$ü]35<“D•†R¨n“s”H·ˆ-X°ÌuĦ l‚r•‡\"aèC˙­!˙7ËÜÎĊŬ÷ŭhŝNĦŬ3³pJŭŽË<<9†È `~uü~ïŭżÇ!%ğ [ˆ†`È ˆbbHŸçùäŽH Gp FPH9J²·qŭ#çÖ^Àb\Œ]tO_½1o ÷‰ŠwÎŜ'ıD·S5žóó§Êe\àjExw‡ÛKlΌë>aLb”TOG‰„3Ê \Q:„ÄàP%>C^ĴàmÁçJ*ûÄ"/FE°lx3”bŒïyĴñ9T™ï4î$ċ†xŒÛñeG“$8›9uŜÜĊԍ$or+´²-ĝkoǕa>uŝ2" ?¸PÈ1ù}ïQPzñ=ıYìVâaOEV}ŻQôŠ5Ĥ=-Y‹áJl&Ş Í?†ëšcáĊ,ÔoúZKmš$cp’_”z’mFëV§=yfLJç–$nÔ\•= VR ‰ ş°[vĠ$J7Vˆ(LeŜä@c.cÓ !1š!5£ ²’$­Sċŭïk ˆŞGñżˆ—ĝ{DRo˘ì†QFƒ·v\,ìfĠ|ƒ0ñ"-!ŠVJ‚ìކ¨"ĤĈ4‚ÀèQ78‡£0xWĵzĠ´×žl³÷ü%W lLêW„-ĝp[‡‰XĠ×^³›1⣚Ôó9ĠP¨ĞQ:Ħ"GvĊhP“nW* Z 6SK ·Dq:[ÌÙı)(ĉiÌ\-!e–êè¨ŞtµéŒû`SètÛ·³€êĴ.Š:ž‹óÖç8lŭí†ĵñħp¨mF6Ċ.SĥEÀ8 S…pÂÖÍ­2ċÛla-˘Œ!fmĥ~¨ƒˆòL~a² ,‡ßĞ ¸XCu`*2Ĵ²tWÒĞÙSŽè”Ûü8ûԅ*È$ p4,šš,ĜuÓ+k×C=÷@P÷uG’èSğ–³oIS-4a:`·§ 5Œ„ÑNŽ-7‘ÁġšÂ"j^<¨´ìԉxbJÌÂĈÄ,ż’Öš%¨Ú•‚z˙LƒMWäż%|ĞġáÒT†–GO'HYòÔĞ„KIÇa–rd$0b4ĠTLˆcAĦ}I )Y#,šBFŠš @—ù>éĊïY™™~v'ށ. †W x2  :š‚°ÉL˘V”…ì’nïĜ4ċhQ“0 QËìĤnñt8%h˙>™t"êl]›ÁM„x”ĉµ:hZ` ŭ÷)ı§s4| _F˘]~žFiFùxƒ™,3e(Sƒ‹YĉbÛ(ß*HgŒŻ‰û¤„!;ĦL˘QeŬ4ېHJ éÄĜNÜM¸Ş8„7PIiĤÈ ‘)**LŸ˘-"í’4’‘‰!DF"HÚr R¨ÚhjF›t„„¤upJ‡”iÑÄäRş÷½àó‘Î{¸ =ç·+³şĝdL§@ԉÇLi*Jš!tÛiÇ)Έ{Ŭw;nZ÷eëş÷ĵÓD¤(:i$‰òêR’šQ¸†ŬDHb„ òÛ‡ŠKISâB³I H_`ĝP]„ŒĴ Áƒ˜¨6Û5ÂÚY”´4 ŭú¨ċ Ԝ"2HM4;˘‹§˘ÔÏ~ŭÑŜŞ=wwí‹ĵöñNŠsQlıĊnÑ£UI £ÄaĞȒEÈ# Tv“Ĥ‰ |PpɆ3ĤL:×<ĉ="íÂÓŬ\š/ÄÙpiÔİ`™†)l¨JŠ)J8›6–à³ĥ,Ë|;Q*ÎMD¸,ь•j0V+ĈĴeĞŬ!:l˘‚ öİ\ħnFš!\fQğĞ8o#}Vôo‡N~ż|`>è’ĥGÓÓżûĝéZ_QŜxŒÄôJEÄ$˘íŬçòwPÌÖK É1Q@>÷!²f) J ”ﲚÎé—aĜ Żu_öšô&HċħéP]|ĝ,ĥà–ÚŒv™MTìÔÜZ†)hJÒÌnUĥ‘ $V0R³¨]šÓ–°6]Xµ.Œğĥ"e׈fV’ÁBLMnĜІ(d˜@²wšĝ‰†ÌTÁ˜ˆcTµN.€MÚĉ•* [ÔKĒÑc*ìSıO(9ùóú~GÏ˘ËüˆYVó/>YœÑxĝÏëï á˘~¤V ĥĈOĴjWq_òjښ ˘ƒGÁŠ€ĴWĈae$ÑùôüĈC,ûôğMxÁŸS£9hÈR=4ĊNŽ )lšĴî›x6Ħ ˜–)ħÀ4T’}ƒRԘ{ûÄxî$ĝI T0äžaK–ħ‰ š­ÚÜŬĞċ]ÉkH ´áR˙‡TÖ~=WĴhö(•Ëĝż,Ċ"ÊD2Ĉ˘&şíi†ġ˜bŬ“SFFĴû×ɌkóÄŝô<…ôCdKô³Ċ‡A$¨)LP݇ġŸĥ{ç>é:W˜wèß5g–›£šG„2l †ıRX1/@-#ŜäH}>—ĦŻx…ïEĴNlñħ›ĝv d~lŸj_ÁK%߇Ó<}q²Ï ¤Ñĝ{OĞáÓçáŬ$Hğ‹9·Y¤Á–Žs:2w ŬMDEd a A˜–Ċ(V5×Ô+ìYèÒGϧáŒ4/“P+> À‚>|ñ-ƒ3È^ÈßğżJ-2е}Š7_H=ïĈŸĊp¸ˆN&cĝžtt.ÂaÂzŭ°ßÒm›'Ġ $uRPTȃ"5×ĥ§"G(ş=ÚëÉÁԆ€3é™ĝ~/äógCM@żÂԄi-Ûŭ½ÄŠß§Ĵ_ÒV %˜SÁ“âÀĝàKŞE$şšŞJk•2UÜöÛ^4†‡GĜ@Ԇ˜d¨(h?^ûùÓ5àP€àÄvġß}ÙŞĝG”J {Â`Òcš÷èÁ| $ԈĈ36ޤ+C`ÚĞê?Ö$"óó) HÂŞW· ƒÀ\8vwË“Ó MHk`'¤Ü1aÂßmınFUĠQÙd5*;ĝĵ#ͳÌĵħ#ÇÇ×ÓpYŬwQj˜ìwTPÒŻOUcÏ<ƒQ\WëôjI _ü“YúH?Ż~Ò1—ñB‹ÂŠÌ#ŒÂżŸÏğĝ“iB4b´„ 3ġo,.ŝká'‘ğż†ó#Ú|;¨œQìi@Äċqó÷T­@×½Ô­UE”Š™à]P`Ca½˘6ٟQ{ĊHAœœ%êx÷víZó#Ü/ ˆĦĜ08l†Ĵ)´!żDq&y÷çǧ j ŜsÏ} †3Â%hMoügŜOMŬbÓoĝ=/ĉŬQOlQFρ­`/ËdôeE3{|\áöùóVz`U úB )f3–Rğö{ *Ğ{ħqğI~•£ċ^è…3,&ޏĠT\t9cžüÍŭà/z)PŠóĊ×WË÷ÏÉÙ긑²Ëƒ¸kvtáàÄ4#‹­Ìb£QĤ-I)q²ì£d€Ŝ¨SAĥ]ĥQ 0ˆ×)A 47Â4- ŠŠg<Ȗ„„ıRÂtß·=Äïş²ˆĈ^¸–Ÿ˘'wo҃}ĤGİ+(/b5äy Ï<ş”ì'è)ĜÌvIÛ\oˆÇœŠ…Z·LìzĊë&ä<,<ĵ^ÑTnlFÉ>^ iç‰öYW%ŞM†k—aŽ9ÈP­`J‘¸¸ÄÊĉ{15`'1ĦÁ‹ 2 aƒò.„ûBz+#Ĥ!áTq힆=·†ŭëG\ÒŻÏ~^QĤœ]@¸íʐn PˆT„ÒH„i~;Mä)ríD FĉBBŜ‰–Óm1ßôg‹Zm[J˘ @ÊçĥĦ3Ĥl/´ I‹ĊZÚħa şXvbXV23‘‘œĞTIì 0$švq3q³žÛYÑu˜:›t/w£äDĜñˎR—¤bԛğ!Ü Y>ùhRXĜ+#Áe˘Dš,gÓËìEà!<a%²-j‘š)™ÄÌ–§30œáÇ,t½Qâ<߄ïÙ]ÛâH¤AĠO<³½‚ ÷ìif"@‰³ğ“LĵD•_èùBÄPÒñĥZ„ AH eáżÌv³òVü’G._òĵq°ŝ,ƒ÷úŝ4ŻÚ>Á™İbY˜”–7cîíxĝżZŽkğ‚ŠÒĉî˙O0£ħï{ĝhÀ¨Í¨l KóÒÑĦ 1F4;ĥ;g!hӈkĜ+Şĝh42ì<´5‡4ÔÏ^z½:êkL˘• feu‹ôwú>ĉTĜĥZŞŭ -vµU=êÂÊGXÉTIğ²ÂĜÒĤŝ# 1´ÈĞ˘SĂŠC ˘?ßżAߎ›*Â`ĉsçx …B£"Ĵώ–ŻÖ`•&³$ĥI?ÙûTħ^ĴÌŭ*6³´ÍÈG(kZÎ ‘”‰‘s| `€†AŬÜwë4Ŭ—âŭû÷ġ–|eŭĈAS2×­O†YYßLV”ùëÚô 8NÑĠ?N|Ž~Œŭ pż@á‰/ż]^ŠiQoŻ\ .³Ŝp…ħħĉ¨Ġ°ĝL Œ Ïïĵjúh}WŸD´l€Ó ƒmZZRYB”À£6ÂssgË3I]Ċ‚  BVĤy80j8Ô AÏ ]…ĥÚê1@7Ŝ§WcŽJQ×BŠÖF˘&x:€^Ä;„A’$$o|`cL{Ŝ €lI°l÷¨żZŒÒ_3,úbŒ˜aĝ³—!BÎïèĦğß{­QzÊ+|ġêĠ£ßcĞŻ€E'„t"ĠĞĴ•ĈĞ Ï}ûû„Ĉż‘*#çċ/›JGïA-‘'ċ˘íQyùhĊeö2ÒVÑeїi6fßğTÄžGוÒÍtíNÛ:D7‚@ÚÎĦÑÊò½AĤĥµw0P*‚DéÇŻ^Ú×cVú´´vÚGxŒ°9yµ¤[Z!Ì bžÇşħ&š0òŭ´„¨ŝ*ġ•AŜ²¸3żŻ?ï‡+Ŭ"’6=CrÌ{·y0ş˘B•§ô̆ÇàŭêiĞFŽF‰ íµΔ0V‚+Îò~ê (ĝġîzíĵÜ/‹7ÑèĜŜË>´Y£]Ŝ<²ĵat5˜)lˆ!67m¸ÈmˑÏJH ş¸G³.ħ"sR6- U$G”JXE%o˜_d—FUpLK^Ĉc—èVpÑyšö6ğğ"fž× şÂ7zž:Ïzĉ يc}·ĠS>%Çi´½+´÷Xx-Êĉ=>èt°œÌm6úž•ĞĈ-g¤‚[lD€@ƒšWşÌ³ f†I~èE£• ŸEùaœ{ڂaz“†£Î‰˜3údħñ Ë-^F?5dÀmlfœtİyaĥĵRêPGż²ÏuR˙—ÚfÁHàJ>Š!%uSOÌİ/ċhRh ÈEŸI0üßèŝH B`Ñl€|ÑËí˜ ›MĥzWۇRÉŝ¸•m™Ġ`‘` d$l Ä'`™ÍĦ'mt$$q›qx]*FŜQ‰ S" n¨+Ĝŝ<;ŞD}ž3Ĥš;r° Ş0† Ħ‰‘)y)™w0(C™úŒŭGèü v…À›Hĥ2;š›†ŝp%ġĝBh>4²>|ÖÏ{‹vW#é­£Í\uû€MZB„ÒI]îe21 ädəÇ7:$CBD$@I é|ù6h!"$çN8rê¤ @½Eë-ÍvBVN]n™³ĠzÙ:G{:ıϗiƒNr…C*K°(ˆĵÎ{†ır„hD(ˆM£2K^´ƒ]”0ñ–Z [9qħ˘mH#q.ıÏ<“ï½%£ĈöìmÂpr ÉĴäA¨.ÜUF Žûùs¤Ñ€#aċ“–\ŬòÀHöòŭËO òD~ż\è?I¤rW‰è µéFês *4—œ`Ĝtqž‡,Û·é8K9ş ŠHÀP$I,ċ(„&‚’1m)EQ—ĝŻŬëCŬÈÉj>Ó kËE¸=ê90ğŒ h†„~ oXbdƒ˜p˜ĞĈ šÄhçÒÍTƒ”xĊM‹ğ&1İ͎ròÁÉ·Ç*9Ô:&ċlà6r…´.7âFÁP| % kÁ,ÑáF^kġ\ŒĊ#*9R´] CGÂ!+úqCc4†ïM[IXÁ0é0BôAġÌǸ:ÎÁNiBƒ÷ù´V޷܆s’‡d ]Ü,Aal2~ĠaÚᰑ ›d¸BÄÈc‚ Á|ŬÔf"Ş~QżLq“\Âfŝ1ÇÄqÑkŒżÒû@Ż>%ö˜PjKê=sıὗ}ğKK½€İş6ĝŬ:İEžġì°ġzZìôŽóĴ/ž›òĴĜt¨>Uú1œßI™ä™Œ…8GÁ5•KĊÏ hx áMŽE„Ë> ‰C–ÂBC8YcLÏŻCâp&x"•Ϥ|îSX2&UŭŻ•0ÒxƒîÚúb³P–b™eáÊ!)LĜ D–f’`Ù x4§0B4@ÈĊĉÔ]JÒäĥk†äÚŬ˜³kFBb…ġl…%{(À=k|I?ó‘áWρnڔ1Ğe aHâÏ`°B„•8rx17-7sĈġ(°VJdSħjÑr#ı“Úê²lQ‡†cĞĉá{Éàñ?5ÂiI(­$CcbÔ²"_J@ÌĜ&V‰ZgR³(5b_‚)?‡[ŜŻ•êû÷ĝñލ8İ ûFAĈ|Òï>ÑG+ԃ –ÌĈş‚B/m(êƒ!S™œ/½ħï^˔·vµÙêQ×'£Ĥ›Êè"ÖŞŬ;ĜJvà⃘ÊMDa§+'ÉB˜,Ŝ…a* <Ï5‘–°­Y Tm ˜¸£êhÉġjŠXníÛîX85ôÓ2Ç%S£Kì³Ë1<ŒLıkZ6w%´tsëä 9"Ä@ôMB•ŞO€Ĥ)xà³ċ6Bĝ%áP´ 2Ċ •…Šñó£80²BC³†‰HcEGg­ƒµ ŬĞ–Ä5i H\0âh9diJŠċ¤y,Jž²„–qĈpĦXQpQħ@Ĉ$À‘ÖžCM÷ĵo˜GĞÒHÌ ²ŽY2“oh”„a rW Îèe%sœö›ni¸hɐħËZÍ >€yK D„ÁĈÀŠP‹#‚!‚2 ]7 ]-É#pĥ-&bÊĊÌ÷ÌHMô=N àŞ!J‡KXĜY;žïš‰”&ñärĝ‚n!`Èm00ä /4Y›}o´ìÍöÍZ½4ŻMÑz뤓`¨ġ"PŸ@[ä²0ù>x9Ÿ*ä‡SsnB) œÖĜbO',Ä/)Hx4|à!J„“&:KV˘, t•bU#+"ZâXċaᇠ'‹%Äyib%0rĔ}ċ_š¤öyċYĠC)e ġ7áĥŻGfƒàJ#.ĦŒ:T’2DzÂHUxŝ×Ö u8&ÖìŻ Ĉ°k‚ß”Ĥhž„’¨È–Ê Óó´µĝĦV@Òv´¸=¤D|ċ ,˜ˆ(¨ĴĦá`÷i| 0˜Aì´_Œù"VŸ2σ‡Ħl’¸ĝf ¤glŽ…ƒe,ž'{Ĥş)œ`*G5š#R­˜í­!ŬžñQK !ĉ¨N{mϗMôĵäé’Ô=w²;;èálGìÂXí$`„4Ñ*ÖŞÔaDR´Şñ‡”¸(eôµ·Äµañ7ŽpóŜöÔälìœŞöıÚĊè8~8ƒĤ×,ÁќIİŠV÷N­!Q! +•]ʨóEw¨ÔÊòd^m‘’VÉGĈ4qàò+÷Z˜8ÚòĝĊšBÌïpğÑSän&B£‘4FÙĈÙ7GĦ0ġû6ePÌĉiß_‰Ĥ§Œ(àj \_ħ]:5ËԀ–ƒY‡ğğ òʃı„6% dcĴ*!†,b›‘šI+KeŒSŞĜ³‚ÉÊ£j´šYÈBŻWžğtÈCd@fµ ™Rl‚bèA„R0ɗUħqR†‹"](/(í°–Ù-ĤĈATğ .[ò;ċ‰”ÂËT4……şì”€UrħZ£Ĵ“™ħ ôËOQÄÑ GˆZS$Y45‰g‚´<–J9RğòÀ-ĉ­üfÇRi·@Y%BI¸;L(CÌLPPÚµ%İ™jŞĝŬ4´pbmA0—`°fêùp ÄQ%*^Íż(Ì?tIzO*E ¸b  ҈˜pìwöp.R5šI‘K.ÀÒ¨ĊöBĴ-?µ ƒ(ùz0.”ĈôŞ ŞIbuRœ(€üfŽGQŬ;ci\'È%2Ĉ%³£@ĝ Ĵ­MÈBX;’‰\ċ1+PŸ|‚` †£‰'èÒħ¨“ÖPKäA6хaìE-:ˆX·E(=àÚ26èÒ½ 4bùƒAƒ,h“ĉ’ƒç½ÜħH³ˆ°ˆV_ĊJU%ô&2Î \Üɤ+ } };~3ż¤!Äġ×ŬŞûŭ2÷‹0>ŝ3£³O$pNĤíŒjˆ‡í,Fph8Q°˘µtâH‰Çĥ(ĵ0cKÙ Ŝ8Fta‘]—UY™—j‰4וdzlş(͝2 ħŒá‘5ŞU2°[…êk²Šµî‘ĴŽéĵ… ƒ iÁgBĜ\x£TÚ< -\x<ž+ܵIJ`ú˘ŭĞ{żp6Gí?˘ċġQ¨$AQĠyòtßżMÓé~½ìkWsĤKc~h5€°n^hCÈíxn³d $„ı]d›w*iĈO4CI.lµHST½>ìa.#ǵĜ"Ó>‘ŜĊ˜Ĝrɑ,CŞQúHV+Ô÷g|ïžîÑ)Ĝ}Z˘}]%#K5&uŠ:ƒÚŞÈ|b†Ú˘†”&.TĥÖ@`uĈž ÁĵpÙĊÓ ËFXaŞPħ~}²\Ĉ7è@vtBuu´‡kà@Bv|a ˜ñHĴ„à'ÀÀ·Ò.Ìï* ¨ħw­ŠĜ1t[:;ĠŸ1¸^Q$’ĈhҌñ%Iž@¨@e Ö:YLï)÷\ }ßrúˆÒc#Ħ·ċIFYc4Ò¸e è5È᚛Vƒx k*½‡ŒT´žà•şxZR%)b&  F—œj#`ċ‡żJdyyRxÙFŞ£kŬĥÙ.ŭÂÒ°³Œ‰Çzâ&ĥ •·EçzıœŞdl„cÚ0"TÜYÚT…Áâ4eƒiÚÓĞĦjŞR0ǧ•¸W˜„ż–’4$D@ !wíœ|GÑ•ž@˘˘ŞĤ›нÂJ#! 0j†°Ìch:3„^Hd7TX‹ĴıêŬÛ GÒq(kÁɄ F%Ş’,Hù¤Í¨RqE’¤1Ħ’Ċ Ÿ%Ĉ@}dž/1(6Ѓàҗ²Ĵĵ.M şmŠÒ° ŞÔÛr*4ě+g-Ù8ĜÙ{uQâĊĦ {UŞëÁ*ƒÇ. ĞŽJCq!/Ĵ…"â‰E(X“A%„8\(:‹g´}ˆ—èšñʈ't•ʌ9ˆeê5DĈ!~lĜ‰cS(èGÛöÍz(yǤ b”MıìkÎ<ùµƒ–à߅´`k 'K(›ÉQY•ò轂Bñ(ÂI^tÏ,†µò€Ġ3‹˘ÒHĝ‚§š€‹ù¨"÷¸0l_Ġ?Š#`‚(À˘*¤H‘5ĤĜŞšRĊ•ĥLJ–&ÚMM[&”ÛiĥËRbÊIV²İ•“SĦ5ifÍŞiİM[-jiĠ+mħl³kTUT35V+l­šŞVÙ²³P›Sm)eĤ´µKT֚•*L›XTÍfÙIµ›MĥI-*kRÙĞ$ݐÛ3JSEĥk5–fĴkRÚm›&ŞšQM-+hLˆ–²ÙĴĠİTĤĠ(šZ–šİĤj%&’ĥ…jlÛ6kk6ÔhK+-M­µٛ55ħ´Ë#5,Jš˘ŞmY-ŞZR•4Ô[IjĊ­´šÔVÑm–me2U²› ²-’h›Ke³Mh֚šŞ)"A *Ĥ 26ĴŒ$ °ŻUŬÛ·cşş–Y&šI&d•*XI cğ[µ™”îfR–YJR’÷’Ë6§ŻCM$ÓB@µ-M›$ 4)LÌÌË,Ù°ÌĴĴ4ÒI$—U]À²SPvŬ²”ÔԓM,²”)I $$“2Ùm×nÉ$u×@ÓJ•-–ÍlÖÉ3$ÓJ• 4’]w)BI3f͛uÜ$İPv×])B”“7^ÚŞöôİSL-É"e’ÉEBˆjµPĊ‘.µB…)n˘ †`Áˆ‰&1Qfdšš›6)ii­šÛµÖ™’fIjZ½½ï 3$“fÉ ›,³2M4²30“M MK,̓2MĤҔ6l”*Ĵ%„̆C"cUZĠìġé™#ŬÊQĠܐÍĠĠĥ·VÚŬVşş„ši³e–I˜*êġmZi½½½ÜÌİR”ÓK,Ôԗvì6l²ÍMC7]n°)]uҔ’” $ÌÌ6lÙ³M ,$Ù²”²É0ÌÙ²”ÌSR•×ĤÛmĥ³m“mëzÉ ĤÓC2Ë4ÒC3i´“YĴ’M44ÓfÇĞ’fYd––şğ†Í”)RĤe–lÙ³nîY&šfi¤’Yd Tİ$!$™„ğْUëzÂË{wnĞŞëĤÍğzġé&ĥÍm½uşÂGz=·ĥIe†šHVVġ­Ü$,²K,,²•Û†š’Tİ.î–ğjÛĞİJfYnşéĤ›6Tİe†Í^½33$µuşÌ͛$̒@’I,°Ù³2I$´´ÌÌ MBI RCY­Ŭt $“1×sZkLÉ 4’JP“[5·nïVò³ŜRšh€jjHfIR–Jşëğ’lÙ$’Ynív…íÛşé³f̓ä’KŜ”ÍëÑêµwu×I$ÓLÍMI34 )BÙl$̒LÂM4w]̒•׏^’6lÙݨfi%)%²ÛŬÉ55$ ̗·š–Ğ[4´½µíŻ[¸R–Y%+ĞnşîŬ’eĴ1U’H„iĤ3*TħbË;mĥî6R’lÙ! R’Ydšš…–R–YJjj:×p’”Ì$34 vì Q×r^Ûy³YŻWİ›Ŭ·mÛu’JP’BI Í4ÓI,°’”,°²É3,³03KKL•Úíğf͒I.ğvíZÚíĜ6îîŞîRşÚşèši$ğu×nşi¤†e–î×hI›½Ġ½oXKä’ë­ÖëÓŜKbbR™$ԋlˆ*Ĝ]CPI.­şşşÚğvR„›6ëı&dşÚ­ċ)Ĥ™eVÖózô’JS0)BK,ÓM›$3 4ÌÌ3M 4Ҕ²ÊS3SWğ]Ħ›şş…(lĜIJ[Kk­Ü̐$6l3-- ÂJÒ´²ÌŬuŠĴN ˆ["§Ùòû·ċïqûĠż×ŸÚħ_‡Ïú}µ ‰ï}CŻç÷=QYŝr¤&ŸÊ5ÔéŝĜŭµ·‡ûMvîÙZ–]}üȄŒ"ŞBH‚œUÓ=Éí€AÍÓf5Ïñ*Á–{<…£[è ÌÍLjçÓĤ<y-ˆLòˆ;‚@ÒŒÜ ñ]yRöĴw$]k­ŸG‰e˜€0ìAqm7Ú‚ sñLH Aü™’İnŬjŭ•uĠħV)ié¸Q™ v €Taĵŭ}:Ĥož_N˙ZSŻñî;öĉuÎĝ砚x>g˜ÑJÁ)(ŝîŻ~ŸÇï×ä[jŝ* m€@„ˆ 6Ûù-Z³mżsôwó½mcŞG4wŸÏ˜,ĦQQ€†eò:î4ŸÊ­ĵUUQ†UżRh}<½i=À½&#Y™¸ŭġ²ĝċĉ]:# 6o§HßiŒé/\ıó¨ôÁ{óßÌrVBµfaxè7`4§%"ĵg—{c^c™'Çğz\ƒ‹òèà)ĝ@£Ŝ÷⠁éĝdÌ ìÇMHÏ_#µ#34î'I¸éÏ=aÂP‡'oHóöìóN˘2µ"}‰”Y)S0Ŝ] D˙Z)‘%­¨ÚÔZ˜€ŒŒQ‚˙>+háj­ÒÓu–£ZMemĠˆÒ5r(Ú5Ĵj‹[}Ġk˜˘ÛkTVħjĊĴV¨Ö£jĜµEj5X­·ĤMü½³zWVY%İinëĤ–ÍÂFk5JKMĝÔÚêÑ-–×İUÊÙRKlÈ´Ô(¤–߈“Rš¨É˜ŠQ]Ö̵2Óm–ıVê[$ITĴŠ”Û)m2ßÉŭWñcĊTĤÛç˙·Ç]‹ükñäŠèsûˆŠ QĝMgO7ÁR$‘¸{H•i£ïgħĥCñ+ ިÑF÷§O5ïœòy~Ŭ™ZóĤ1ĝî>ja?™ğTp@};ZúĦ–ì2îñ˰×<ú6Á Úñ°°d)ôŜŝ1'¤şf~o‡ŭ½½5ÇÇÛ>(+çâ …À~5ÊÑ8UDb… 4Y(=jċÏJ5îzé9bìŞU^}ú_zĤhÏOqŸ°1\úAĴjAúŒÉ$Z…’Á™‘VÙ-&ĥ˜V’JJĊlÂĜ‰)a%TĞ ŠŞIù5„½k8Ñ@k­Il½ùPґJ‰*ÙjMȨ²S YŒ!žŻżĈ'ËÏÚoċĴÏżvvqܵiè¨{ÏâáZ–ĉÔé›ğH'D@„sˆşġë/Wâ.˘ƒpTn ûˆ§Ŭ˘Ŭ|L.zızñ§6×Hi‡×ĠÙ½ĥp 2'ˆŠnkŒÖğJuë $€Ež·£Â”ĞĞ@ç͆¨Yv{_ĵÀה1 ‡ƒmÀ’y_{Ĉ֕p÷ Ÿ(8‚D7HQ™j–ôş²ËEĤVôıl2Ò"Ġ„¨dRaBŞ'R×KnTVí-XnW³[ÛA nâ,_í"¨/ŻOwŸ„żéÁ¸‹È,³‘dÛâ˘3•0Wş(5m<÷"ĤĴȞ#”wr›çżG…aÀ ‹a{ȊċBĉ#އ×xìR#ݳBŽ„9ÄÎÙ …`òçM;v³żdÜlUt?|YBaPCÍYĠÜ$d”Ô‚¨“ŭ¸†Fç)ˆŝ 0Ċi…UĦd’‰"T,ŒXƒ,‚F @ ™ú|9Îß?‡ÀÙ:v·yû6 ĈÈz.È­­9ĝA´Úˆúĵ´ĞvzWÚ* ñ£° H‡‰ž_Ÿ_]úú(>Pn£şCxi.9g°%‰Ô-ç&t_²ûe’Ġ7VKS)ŞíĴĉ–J‹b³WéÙ6Ú¨›[,‰V…JĊBİi]–ËĥRÙ-2[+%˘‚°(tż˘Î=%UĠ< G‰OŠżO§ŭż)ġö=^ĈbÜL+3ı‰2–¤žj"qTDB˘€Şuôġ†ÈÑZÏu;aUU=vkZ.ë:—ÒwKàj‚J#PQş³‰AÊllŝ“³E[˘-Ä¤1ù{6’ÒYQïĴ¨Š¤¤İTBÖ(˘ÚJ•r’ĊdİV%¤[tŞêY+5-•›RVKfÖŭ[m-n­LĴÙZJe–Ŝş·[LÁ„(˙$!AbȝĵžĝŞŞ•¤WU§Ùé²\A}ǎCA›&m}oe Ĉt/uۉw’ïêÜO · ¨ÀċŸU£úž°üħ`1 İ |éqäĝż,Û·&wïä€xDˆ ħŬLxv'ûH„ħmK&Wk†!ŒD}Pôқ2{ÉRFĤû<}/^;żk!dzâ~ŜŬŻ}€Ŭ“3lììA¸ @‚La ß|öêMgÀ@‘CiAîÓÑ䏁†ë°¨ûTa1Ñ: glsŻ_IÂ”2ıáÙĵġ™ÖZ^ċ8û2§ġÏQ@JCı@rŸş·Rİ"ÚĊĊ›L‰2Ş˘°’£T‘Sñ`¨¤@€B(Ĵ /o/qßBž^Xż‡$ÏċßÖlâRaċ½DDïêî#,ŭeï"K`O€^ö ÈÉïíÌÔPcĈŬĤ>KñïóĊ•¨1 ‰Ž;ŸañÓ­:,§×cÓEH֛gŠG>û%ÉzRù&’™y‡Ù’ŭ†žşthp`òÄ0R¨4\[¤ĦRʑKRTҝ.ŞI²Ù,ë‚Ì”ĈV"2%"¨ĊI`Ô$>ÖZ"ҌŞ@= 2ú×µĵé-dÈn=m+;zCvó7P@ A ÈFPµJ\ĴD”Y`Wá8T€I5ï­{"CKĊ9 +!IĦJ×ÖMëĊżËK›Šˆvu?kFŠkINRónŜҚAĝϳËj‰!9íX1pj=…™ċ*fBŠtXBŭĤ7bT¨RI R,•*Ħb’İT(Ĉ$Ċĉ,F™\›]×4ĥím)vWE ܒµY A6ò9ˆí,J)ÉŬ­ïçÍ'zŜ­isŸ½s>à€Q³‘ĦÍÑcÑÙwß-FüzH6–: -wyF# iÚRˆ&Şzç†á]  €‹SğMĞۍÓì˘‚ NƒEHŸ²˙ÂÇëmt¨ĠÄݘ¨ÁI,¨™(d’Ĵ“I™RÈĤÂĠĞJ³R1¤Ċ1ŒdïôġCŞ äIŭĥQë6qíP,‰Ÿ@17CGӁP~pÒuŞA^Rûuĝt>Pِ·ċGvÙî%‰Ñ½İmn)]÷ á}éÊŞ˙ÁúMÄJ’ü˜ƒ*‰’1P²M\$aJ¨T…,Ši˜(20@Xuž3Ëèµ[v—nuIÇÉìü]YŞıM¤Žô #uodŞïùM9#ƒOv2gÀğ—Lo˘÷ŒÙTĈĵë¸&Ú´LVÖêżsáñÇK*Ž|kӖ˘óPÈH‹ŭ၍a …°İ^Êö„@>èğ6‘!(ĤÓ Eyz½[³zó@Ù°~}yl&:¨ï°Îù@ĞdW2^‘ğòÍ $‚_Äé[yI,%M9ZBĵjĉеŻZ7AjÇˀ ƒúñÔw!ŽS–”ì ô\ï*ë×n“è<%mÎïĴĈ½3^!X<|Àġ€Ĉ "’IT[lj~ŞW-ğwUڔ³ LI…DĊ HŞK(¨’RZ-I?R%Tdbk)‚–*ÜşÊ”ĥî•33oŜš”`ߐCıË~zw żd0ş5¤Ò²óKÛĴŸfb9hû È u"aK2Ñp$ÒÚàfċ;6jxñw4–( I€‡ːnœ¤‹ï¨ÚBòßs´ S¤?`ïmš xF`&E€á³Ëa" (fLÁ’….ĵôĸĝo==;ûrÉÇĥÖ˔cìÀD`Ò$Kcb–żUŞër’×êJ"™YÚWZ-™I.ê™[­ÔÀ$&£a×JKi&Vm+şÎ£S­L”Xüġ&ĈÛĦi-[ȕ%T-*•E•˘TMrڈÖ×6+ğµZmrĊ`ˆŒTQX‚+AA‹&şĊ5ÍÛd’ÔkiĥmšÓV2–Ċt•™H’ Àŝ͜qâKĠsváÛŻiYKĉÈċÔ{oËÌí˘‹çŻ·áËçwzİïŠ˘?(€ö³t²CŜ³ ÜK–jı7q°³Ív·Ġ ú|Ny:ô‡ÜNR#ïBs"0Ô1’ŻôF e >3ŠëT_u™ŠzçÏèt|rgĝtĈ(iaüñ‘é^żAËlD°=™—Žt×/ÒrҜ´’k‘ԁR…€Á€O~MyíGżá“d:ß·Ä}Ê’ ÁÛkün—ßÇ=ğ žB}…óïۍ²ÖWħA{ĦœµŻ…Yd'6IÑ%\T²…´·igmÚE‘•ŠĥĈµišÖÉIYY[QCû˘TmE„°KPв%(¨‰#E(Ĉe@Çò?aÓ·!¸^gìèu_³ #ö+'áċ˘²Ÿoi_|ôúîj:<ŞŒ‘í;ϞÙùdïšosc'b&gĵ|e˜ŞîÌŭfÀƒürşQUvË;u´ħEM–Ĥʋ]•™N]kİQ[ĴĴI‚Ħ’-cI•0ż<˘ƒDÚÉ ĦtcT•İŒaXfE%ÁuXhĦŠ(Ħ"ĜPµa(>BŞú:Ċ{8ÛRÊ#Ş˘']† ïóĥ Şc"'„@dSŠñĵÛägÖ=8š\žèÈÚZ÷9)–š= h™íË8à‰úı~§¤UÉM èÂä"QĞ˙W_Zq+.¸kċHC‡+Y3şžĴ7zQ„l„";€gëĞ${êù5$Žhuߔ`Ì}Siç]eéZORı€1A˙Ë”pŭ~§ë?ÇŭÊ˙ĦüòçŭDŝÚ'ĝòáÔŭ`Sóĝ)×§x²H!UEkjĦÔ)UçƒŭÄù#C’Ëä'žçż÷§ú÷Íĵ}Kò„‹bCċb2Ċ&ıÍÊıVĊnËjĉ”°˙w“ö ê£qĝÂaÜs>ôyÈI6Ĝ;ÔÀ?êŞŞŽ¨÷΂Ĥ5ÇԐàuÉQCtän`ráótYz˘|Ŭ“s—›-1˙s+3.]5…#FŠĈ¤Xr“ċŜOš~ÖMÀu { ôÓU@2'Ch¤Š0€˘U‰-TD•P4) ĵšżú}ŭ~`|ù‹ŝĥoŬe˜,Œ•„€UPZZj ­Ï•ûö·ñ)Ä,…+÷"Ž„âYd÷ƒ†hOİżxwZDöS™„Àü€ĞĉcOˆ›#jéñ Ĉè‡3ìŸS×ĜéÂD„'Ħñĥ˘”ÑîXYdXĤ†‰ö§Ú{Ŝ5ŝìëĴHw>h˙’”uî2‹à|ƒœa ÁMG\·LQQWŞşdMħĊbÛTŻĥWêü<%ŻvĉŸ\Yê'û£úŽ™ F0fĠ}ĥŭ¸ŒŒDh‘ŒÑXÒÙbÙKJZÊ[5-ħ­*•Y-ŒÙmL“X¤Ò²V†ħħ6LĠiµ“1VZL6Ôµ6²ĥkk&46›6Û2‰–Ém„İĤ¤ÑZ³*”ÛcjjÒͳT¤Ñħ²´Kf²V˘İY%[lÑ´FÊX´2fY4dƒŠ*ŒfZ$°D˜4&•Ħ#ÂcLŠ‘1£%1£FY$Lĥ,F",i4Í&‰,XыL23FLcŠŠ Œbd`˘™1F$ÄF"ˆħDchĈM&2`ԔhÄbQRV (#fÌ(ÀË&Œ˜ŒF(LFSBÄFŠHŒb“Iħd™ Š(ĈC2Š)4I€†²˘„݉U"BŻRp¨4š-¨f"w|<½aĠ×SÜHm2ĉ@tĉòMNżOğ÷~´è&Û ´*-ÑRFĊ˘ˆÁiğHaB™Hz|ƒöŸdġ"BĤ˘ĝ<èqáŝ(ìA QµOډĜ:˘œ |˙C²añ<֎áyO Oï^ôŭĥ'ä"Á„„ìtŸ­e=ïšGGÎ'Ĵüê•VċLĴö£ñClŠ:?a ?UxÂJÔú*Ħ>Pò z˘v{1ġw’WÏj­–Ĵ¨T„ÈA 6˙kš gá7µ8˘-EİÏ<8œÇ1:RWÏ Ià×í-{ŬÌwŠċ??HuùGz&a4|aÒ~•m’$rtETİŜñ7GA;ûƒ˜ŝ á˙ıó`h?ôúj}½ÚsáĥáĤ’0xĴbí›-ĥÒj}–Żz™w2 ħŒ‚È5áD9*ĞHVĠt\Jm…HJ=ġ,$pAù“&P˙·ÚO8—gĊ”$­.0OÛ'^ –Q\—Ğ&ê§GS‡ê%D[Öà€Bá_ÔSIĥ1ĵd úÊ+”fk´XMÛeŞğM°LBżgóuo5ñwféWTĞĤ’MFÛJÊgżc6Y¨jÌT‘l!E{ÑVŬ-EMk&ÉĥK^š –5ËEİ&#j•Déĥë[mŬÛtİsR#_‡>;ĈÈĝî4NŬĵ7ĈĵÛğsn’\ĥìÀŭ>Ŝ~ ċXċÈÔRš|ĴîB*Š$ hL>üܑüɒÙR"D|‘ÓÛáYq’ğ.ûÛYş•ĥۓñ-CèùżċÚ,ħNïzWBb` ŸÔHAu}ıMz ä&‹Êt’¨„ UBkMB19#ġN[Œ_¸•B+뎕îıóŬ›×v/]]~9É3`Ŝb‹mŽ”#ö7XÒTc—#p†ĈErY˘ĊifëQbS…BĊÊWĊ'ÜH°bJ (‰ĝtc7¸ĥğ‡–ŜGĞo8ï…s&“ÄúȐ„êx}‰!?Ĝòzŭ-<ŽñòX´²Ó#VE£MHÈġ†Û°ÏBÖÈK) lµĵñM41(èl:ŸÄhGù@ÛiíU .µş— ôIB§L-²F:JG"¨›,1/††2ĊuGfN옍ú­ĉ-áİ&ˆlM%~ĞHÌ>͝ÛÓ¤P¤ˆ˜Ŝ:ŽC ˘Ò”( x “çÀ3Z bPv“pÙášut>mħ½^0ˆ„â"‚ ÷Gƒr”PAÂ!P|Bä#ˆ)‘nĦ30£ A[b2%V·kĤeë¸_tÒ%9tÏNÔLëŬĵ³ÒŭĞÚé›$²‰¨ĥôÛwÚîtFÌÙ&…ˆÈpXÄ,Jœ0ÄJ‹Ö4Ċ*-µü$VĠ4İb’œLŒ+h܊µV) J–¤‡¤0ۉ7K"nħ–WÙċüEñ*NsşĈ/*ùY-JNaĊÖeŞħÂĦ²Î‰Ž ‡ħGXm$c"²rÎL“€²“ xĵ³¸V‚r"=U:Hhì™8&WÜXçİXVláS‚x£m,}$}ÈS’¤ÁU $–>oY#ƒIöȐ„óñğ¸ÏG¸ÇGŽq\Ĉ*ÙjÙTµ ^ş×„/WFÛ´şôÚı#FI’Il–#SN†ÑĦ0V„:U|DCcn˘?Á½I$ĠRM•RSRV_(û mİDԓHc-’ħ"Z”•$["YŒ”ILƒXŒ˜eù{ċĉşbÑmwtSğsíŬĞòĝ÷œŬ.nk•|74hŜswv‡^ zëĞÒ½J<ğğyċċçĴòWn:v×\êŜ%Ĝސ’!eɖ†œ­ mƒHj$Á0·LÈf53Œ†–"Ĵ˘Äİ`²:Ċ ”ä™ GXŭr$!4‰§ÒßĦÊH›8“İѓQÑJÁĜá) Xœ¤§ĠMaUU(Ĝ`äTG–BÒ:¨¤f×µi­k‚ƒŝç$LÑĤd!Äs9ŠA^H’KÍ£’!X¸tX`—Jm[oJŸŬ8ÀPËĜ8ĠĜ5’94‚FĴ‚Ĥı_Ùj˙qéèp7Ú×1&éB$ëT"†FviÔ6*ĜaĜRB§v,yç$ı,ŠYÇD*h9Jy¨šĈӀîP ôPéçቪÁY]êU`˜wàil°Sr`țB&"J`#Qï´Â†ÈÌ!~^( ĥ.àv}¤dA ğ‰B'2÷ŝóDsbÚŝ{çJm•›DfĥY•4pÌÁĠ_†‚EÄIYc ~ĥ“Uħ`˜Ì³zşoeż„ üLјÔĴ%h iK…&ï5óUUFߪj@)À|óQsJ-2˘€ìÈ})DÖÓ#Ŝ-c·ğúż³Ž\­&‡N2/!ĝCj@ü-?ùbN8ċyÎpGQn9€# + '+É$#[™agLĠ°Z'ßYRRÄÙĈ$Pwċ‘ŞdĦl&TŠW5#‚ÍԆéŽRò²I7ı ‘L\AhJˆŒŜÉ|kA °8‚j&>ğr€@UËße:Ä7˜ïÛN/&‘ĥ*d¸dڈCé!*·ŭ9%£ÖŞ  eA%Ù~*hÄĠ¨¨ l|œġĴ £x1 İâç6Il֒íĴTIJ$B7˘Ç–ħâĴÌırò–ÙŜÛfVnïhw8â’â™ŬÖ[eÖ]¤7ġ–›gß xtÊ.do¸İs͘gn6Â*ŒR(I–j"’² 3.ħ-DÀ>é…ƒ˘—à> ĦPĦg†#BıjğŬü¸uÏC´$ EĉTĊW@M”@êYnLPĥ÷Ħg$P^İJ( €™UUF R‹ވ$9żğù.Gşy=QS””î*8yù=ñé:“²éO}÷Œ%˜0dèEż2IĊ5 œıeY 4üLëw ħü˜d1‰Ù;Oâ`FŽšIi䝑‚ĜWôö*"LJ,… ²/ĦÀ×ú›!¨.ħŝ¤E´(ùüŸĈ$Í+Ħgıĉ!èòŬi²Kj‰BŠc"Âħ$¨Y'½T§Ñ>ı!ĥ¨§ŠİTèCR%HŽ˘:FI' x‚:È‚ÑÍò÷Ğ‘ĝrŸMْƒ>}Żż–ájŝÇDI" fY @‹+›3r•âwÉ?Ĝ¨¤D#˜ċ¨ê´…™hĜ&ğ!FG/ÄO_p:}ĵÉù˘p‡€ypğ ŻŬ˜4Ò˘e@O·šĦòUUGİúuÑ(žŬĜ#‚ìÂt>2#5ûĉv‘Ħ'Èċ'#’K#Ú'Ô~ÒÇÑĜü:>/Sm4É;ʔgSŬğğ/ÄġÜöƒêwžR 'ÍĜ4Ĵêİf‘Q¤ġ?è‘âhIĦÉw>ÁHè!˘ŞŞ=àĝ€Áá]ÍT=„àìxWœÁËM;ï‹÷çĝê†|ßIÎ.³f!ĠU˜ë°LC@ƒ ¨Ħĉ\F˙‹×[ñĈÇ3²íŬ| iĦ ûRö†´ŝëÙ~ç…}’00‰œÍ~Ûç<W]"tëS$V‹ÏR]Î#´bô´vqC;ä´j8Ş’jĠĦ"–“[$1ĵÇÒMĴC´]êEIqEQğŽĠŞ4­D’Eéĉ[‹"Wa™Ċ;ĜTóĤ2à‚˘\ĉF5Í[²7jŞħ‰I úâYiWf†68J‰z߇v—QvÖHo³¨—Ħ˜ħ·ĦI&~Ê4ú* 4çŠùEž:%’}—~ğœá‰Khç~k½^js~uÒÍż ½&ş~d‚KÎYĴÉÔv¸5Z´‰´ÇZ˜Dŭyé37Ĵĉĥ!Ìjǐ:ħSŸ%ĞPô-ië AĦŒq×l%#F:ò‚ÍY˘Œ`bÑ˘PÖW’Ú–=6ħr8B–„ÜF͏W ‚Pô^#£ĤĈĝ!% ŸĦQġŸÁôGĦ Ż@gÄzÀ‘ …żğ* F#%4ŒĊĝĠÂħj᜿eœ€aèAbDÌÎW!Çş§4EcmRŽ]'';O$yġs(F’òĥèNZĞ#¨~ƒ/ıÔé$3zjj·Œ'ğ›lYk…ó”Ûi“fËä‚ĵDĜ šdU %ÈÂĤF6ÈS?ÈíR½.!?GóiٚP¨¸ ٔy/!˘RâAĤ °vaü"ùĥëó›&Ϩ^úd1~Žş_|H ĤĥA[1‚›Ġ„W ŭżĵî’¤a4QèvsÔà ]şÂ6·‰WKİSÜIĊWG‚Ôw<C݊HĝGşŻ”M<›|ñqÑä0Ÿ#£Ä{P;ïÛÌä÷0{fY1‹aX:§Iäġ}û™!û/g‚=ž7ê÷d‡/|z&HR:QyF'”Ŝpî\!Mç!ÓÍUU3àv:x˙—ë'êríáßrïñĉu_ĦĠî;°ì6Q2žÉó¨~@'÷ygû<ñŸĦJ4¤]0dHÜ%l"')Á.!˜™ ÁB˜†ĴAÍĉbJ£Ħ§6ŞĜ]I_iŞùT²a1ò× 2W¨Mû]8ÎŞsµLÄ ò(&a¸jc%J…h| mŻ#}Îti<"äˆu‰ûŽ[ŞìñcJu\]ġÇ-ϒè9­Êâp†I¤Â…d%)`4$ÖEaË+líÊÔéuó{„ŭİÌ]J ]Žb?!ĦóœÇYş=ġVԛT°ÌV mZm/™äZ½€'4ĦMŒRĜ@;9!û'dƒħ2ĜÂUI´İ*Ŭ3n÷[•s{ğo:\ĞşĠvS’§¸ ‹ĉ!ĵ2Ùh>ÉÜaIç\O3Ŭĥ•¨ÚïˆÉ·1êŞ[l`K<ƒsüƒáÁ8O{Šo€‚z‹¨ÔĤë2ħ;Ÿ'ÑÒ 6:  :{sµ‹RŞ*ğÄû’zn'SŜ§ ˆëġàÌŭĝÂ4¸ÛJÑhû$QÁè‹LXôàħQ“EÜMC~‰ÏtI<#Ĝċò £îcëùÈ( Ĝo Şòòu@˙¨rÍû"ĞÔµlCä"•ú#™Ôè 0Œ"’ŞŞ~ÁFPx—½BıžNBÄ "!BÁlbĦóÀ=Ѝ>5P> cGuÑ*%Ĵĉ îôÒ~ĝ8~ÌúĠ/ŠzŠ–Gò§(x†>NÁ oä’ĠúÈü†$ÔµĉhÔO{”dƒêàöÖX’ĝŝ'°~c‰´kÊ#Ô:ŭ:ġˆ¨ĝ˜ëmùżjġt”˜1›{ĵÛ×u·EEÁ£ïÔÌ2e“LêìòV4ȇuU7IâÑàèú ’ÇÊ!ÑŝmΉ °éŝŝ腉Ŝ@K *HKüyGQÑMÄA= Ġ5dcÁéİ B>'Qµµ(öñŽáô’"KÎHZ2‹Js_”ĥݲò³['£[ss]İ­Êé[r¤Ö6ѵÒĥ‹V6·–ĞšµÌVĠğMµYdEXN·b›Ÿĵǔڣhƒ"1IĠ`b@˘˙B“ChdÁ %CĤYƒàġ2Żü×ı t"mT†çäï;\ıIħQbĈ7›^B)c„4ÄíĦÜ ¸òĊóW7eÉ·ğ^{şK)QHiÎÛqÊ2C‘ÍâPÔħš=ƒQ,leġÙ­”&`ä˘0‹’HC„)ZÎêNĜ!’ŽDÂЧñI ĥH$ŠŽ$ôHÍGo{Z·` 2bnEH|N¤„0d8ÑëI˘P €Yt*òĴîÜċışç\))Ĥ,:ë]uĠıˆwQq+DDe‘E2M’ÜĤÍKğT[ÛŞUşËlË355*Éd–Hµ& ƒ,Ѝ9{ï€ÒŸš”'X;”İİš’ŞşğáĤVż£4ĈjVÒÏ'Ÿ­Œ½ƒfˆx¨EóÇħˆ@„WEUq™˘_‚çJëï7½wž7­~3ѐםœwĊĊ².óŻs›,bäK S - —ĝ¨ `+ Œ…8;—¸K@ï Ħëġ?—£Ež•‹0Úc(ˆż„Œ² ½ww·0yƒ14…ÈĴÜ–,–8 ÁĦ£39ÔĈĥ‡ú B\v“^—èĴ½ÈLtĞüu*éiÏQҏR –ħI(ae °XT]²oÜ"û…z‚°b$µÎêİ{ĥE§eŒ²bÉ4P‹&&E¨}Îjİ)dßuÌDšC12²Ùe…Ç.‘È|%‘ġ,ŠÒĵċ5èÙÂÓ†‚`ĦÉê>ş”5€É:‚áĝµ#Í&Ĝ^ĥZIHèjaô OȈÚiòêz½ġ~?;y‡†ŠcWŒI#Hħ6ܐ€0y@˘Žp‰iÓ°ÑôŠ‹÷‚$÷0‡œX’ĜBşġûġĊû˜Od”ˆJ‡żh‹÷y”’ :ż5~fÖ<ù ú¨ ƒ2@9p*‚ ġj²,Í”BTгŸIdĞ)•ƒ)rŠŭĊ°Ñ 0èRÄÑċl­µ4#IQRh•btsë)OÇ÷ġí ?’2ĤE(|_³àĞñv;‡˜ Ħù&E‡p†G˜lëŞjÁVTµ-I:'ïŝfħèM€ô9 êóT5 Ÿ̧ßSÜ|ßŭCü9$Ÿhò"x,´rz‡ê:½>}OËşPHÈÈŻ²}U÷sħD‡€/Š ‘,Ô"…- ĦÇgïGôš÷ „~‰ŬülTġ5WŜZ?0_Ä]ƒQ´^áĦäj´yÑô ü…}`‹JˆTQdO{úu$Y,ŭĉya_7Éá ²U ÛÖħm’ÛKSÇ0J”Ô£1µçk›ŻĞĤ—W›kn[r´mWP)Şİhİ™½4™†ĴUƒrTÄKe%dĴĥYĤioßĥĠšŬ$¤ŠKÛ <͍)ĝĜM=M|í–b1QU"ĤÙ 3èv‘ R‘CŬä‚wıÒĥF'OZù×Ëċ·ËyW.uÒüŬ0—ÔùSZċb% †-ü|d‚é"A‹"§‹Ê:ĥŞx§‘ú”Ĵ‚xU’ħĴ=§ Ô€§Ġ>Ĝ;OÍd{rx‘¸ŸtUÔû‚÷~PóH°E ‚ÙEĵĦĵ€ ݰ2@˘İò{[ĉ|#ñ|´Žƒß6òŸ<ŠO£ŭɨîz>q×,Y™wĝĝW)ŬRÄòîß²}¤ô=%‘ĉ~ìħút÷žñ‚ûs²Îgxùˆü§§È¤éôϏħ´ô'qDžkÁˆ˜ŸIƒÉ?‡èô£šCĜIàċüż-C”Ġ‹}7Nn[c ­+ĝúޘ Ÿ}‰&,FÖB=Ĵ>kÄÊ@@ô‚ˆµ‹XŞĈĥ£mĥúmÍlšĞ\µÍ¨ĤXÚĉÚċ­ĥ6Ú¨ĥ'*&ŞĜFŞiQİİí…,UUÛ5ĝ`>˙ĉŭàLŽÍU„ŞU$eĊ=ĴHĊU’UĞUAÓúó*ĝĜÄ2é§]vQşUvË_³ïúĠúé X¤G 5’5LÊÉjœ²–YWlë9z_ĈŠŭwK^Öíĉds54¨ĵ*$ HŞñ'}ŬÀž=ü^·=×HóWYD€Ó'nµġ)JR0„ HZt(á]wÜ`Ú~ÂFïnÒ?aĞD§@òŽÚAâí ĉ·+Í[eŠ…ÌµmÏQÓB%ó-…ÒЈŒŝvJŞ-UlĈĠ¸1Òl¨‡[¸íАİÄà„âŠ9‘&ŞU´ĥX@…Ž$š€İ¤ âI*(UVġ;¨ħħWÍòċ{İîsµċĠŬûoH‚c,gÓ[•îí+5]ZÍL…Ičra¤×+‹ Gj+v0 ÂA‘‡­ ‡ œï.!ĝyDmSġíS,ÒÊi–YQ~wÚŝ -eĦRÄROĠZ;€$ö‚žÑLE ‚B@ï(ˆĈô,,"ŒÍĦï;ŜŜBÈ5ÄŞƒDZ>á°§ğĦéäf20û‰ä'°–şŜ½W%˜ÓyTĝíÓbét²nt£t’ĤıÊ]n]WeMD„İ E"*/a1ĉ?:KlÉ&¤Ŝ²¸™şŬLĠ?¤LqQÀè²+'„ĥI%P„i, z[QXĴYPŜ4B˘4&€$DħòZŞŞ={VuĈ0ĠËVZnšpٌÛ3Y2–L‰’ivéĞ’”´R?J’Ĝp^È ˜Q/„–£h8Ĉ G⪠''ĝ$y½=ÖöNÙ,y£ ™uVFžeĵ† J÷‰œ"BŠZgáŞĥ ÍF%kÙg%|Eԉ.ÖxëĴyhy)<Pˆ•W›dÙ2äŻWm]ënÉÚ\•’2$ù iˆÒm¸óM-—l=Ì84I›[%„^éÏ 1„ÓpçħlÊĈ0IY)…™$’–މÑÇdŸġ‘! ĉûÂÛEJŞO ŝ‘Ġìĝ‰$ŜHpQ͖’ĞğÛ~J£àɢ;7Ù}Èá$ĥC:ĴicŠ3,Ş™*,ÁÔÒ: Ú8  MĊÔ:ĤHËRÈ\)cIaÀ|’ÄaÜp½ë­jĦWZÄM,p¤” ZI Ħ5IL[6Û­ŭ¤“uµŞĠZjĵÛF1Leb"F)Wcğ*Ġ’ŠM;°¨Ş¨-ˆAnR5`pĤ§ iNfÛy‡×‚G wáM=¤€„hày  t5!” zMIbì '˘ğëbôİK²á°ŭÀ{è=*HB݇4,+e|c‰ğĴÖZ2²™mHP…ĦtXxœw™QAcıO‘АÉA*ŠjA )hJ)UUžÒx ˘‡Sè¤lTI,Ûç)'>‡dOÜèžgšè9T­¤’"y/û€$÷ǽVÒĜRúı0:+ ;Œr͉UtR„ËU‹îİ—JÖͧ§X"ò“¤zTyĜ·VeŸ%wê7Vğs‰ÒêĤè6İ(bl†jcM!Žĥ6àMüD-è'Mî9%B1!ıƒ Zf"IĴGEt%aR1 ZT†1Œ6…•-Ğ·he›%én™66“_lh[nAĴ_>o´mB:ˁsH­kAf.E‘BEY9Eĉĉĥ(+ásCç¸jCj ×"ë×kèjùQĵ ×Óí/…½7Ĝ@•}¸W&ĝ•ĵš×SŻk”’`k^´ŠjKĈĜ<…w$Ĥ<`PÌh͌wmCbZۄÛĥ(‡5ğŬĞîŽÍW×K]wkW+.Ħ$Ĥéğ˘Ñ#dDÒ5)Z§Zĥ ĥĤó'†d5QÂÈÊÊYFĠò¨>[|ĞÍbqË믧…GPRŞSU)¨$ŒıvÜĥŞ“m0Â7:Qşîëğ˘fRaA)1LŞ9\•ĝvğd篔;½½Ĵġ×BŽrĝÈŬ²ÛzkMĥ芰Ċ-d°iZ›4Ù¨É,lhTÜ`‹ @Cb9Xı²R.B4Ar[bħˆ¨°Ñ`4²GAÀ¤šWa’DL‘d,ħĵc˜e„Ál’[c$dLĈ%²7bZÉB¤„ûLm&7 ÎFŒ˜IFLËl‰c˘Ĥ 2$É §C™{ĦŒƒ$ÊBIhn=‰aġİAJlşu0Rr’ NI•xÖ”RÇ2] ˆQV¸èÊĞQ”QK!RÉİZ‘–a+ßw˜Ú„"ThŠH%ÇHbTâaŠà€áMDÚÉ*$éBnÚğË*C%aİ$ĉT‘\5eJŞ%µk+1ĤÚKjÍĤjĵ+³lÔ% ħ Žƒ)°;ÊJPÈVN#L´6kSY˜ĥYĴg&CUY5SHĈ!NG0wĈR̊Šĉ˙œŝ²Dèçn˜élC½Y³ĴfzÛzU”óf[,Y‚ɐʃrıĈU!TĜjdqÖO‚İQ‘BµAĥ‹Z-ĴÛ}ŝx×î[+êx2CôGdq$pîǑZˆbÚ­˘‹jÜ6–ÊÄÒżUó­ûĥ[×Âíen[smò jMk-²Y1a’ ‰eaT’ìÙKM1$X­ÌJ(ÁV'HE=I l¸B¨éßnFV# 3šc„–ÒЇñŜlÍİŠeaMÙ¨?ÍġIœ}qyœŬÌué:{ÎCŒIàCMĉ“Ġ8ó€‘VA 8ĠVUI$†“*ĠR€} Q<ò#¨Y‡T„5ZK#Œdµe&D”í!EԜ#Ŝs=‰ÄGF†ƒMFÖgŒg5ï&Ñ:ùÛ²Dl¤{•mħaħˆÉ&2-iˆž÷v#g(ÄsVlz"f7لM"‚lDn œÄD°+)UU¸ĠSTBÉĈ.&ÑZÂXÎ1ĉf‰ĦVoEĜĊ'DD$ħÑULŜB/R(rá(@›R¨² 6Ëç×ó-ñwŠjtĦü‚ŝA~GäSżÀŬ‰N°ëò?t…ŠCüMıXgÜL€ıGÉ<„ŭCò³žŠ´1è=ÀŸè@}#ê'šb â{ôàz+âŠyá~­ÛjŸ~â{|"(QT§Ùĥ> V,#Ìĝ*8ĝçíËùk*Áô¨Ä<"ï_4û’~à6>IAaŜŻ.AħÜvŜYOˢ+~‰À‰Áà—ú‹4#HA£§Ä|“Ö "¤"" ¤"Żrlûĉ@=À*üÈ/Äüxí–ÂĠ°ŠX˜–2r:'S—„ïɋñ8Ô<ò‰>ba?û“¸°yŝϸzî gĈµil;×âtgšŸ1ĝ ¨aGšpċ5?/~Á%*~,dĥ+²E—¨È˜fß|1‘úaYĊ‚ ’ HŒ ‚1RFTĥIjiĤZcQA­†Ò6Ñj lL–ÊÒ*leĴ[4˘Ôjµ 5>Ê( ó.r“pà/‰iš! ‰kMŭêŞ¨à°?"„Ôè@Ñ  r‡(!dÙKw‰Ì6} O÷½çO1cşs+Ŭŭžš‡aœHô4D$ĈGóŒ$i<}Ö#Ô'˘Ìó?Ş!ŝßĉ“ċ>r=*Á!E˙J{V”ñÄd’tFR-d'ċB2žtŭÇñ~^CìMÍ\ċ;ı²ëĥ×7)Bé­×u·JvµtÔí×áqs˗8ĠÚğ]›uY„-şÈiXÔÍ)S1&&gĉáèù!iö_²EÓU †”!X²U‘ِÄ$~ŠéÂÓċ#úöŽéÂ~x•á‚ñE?qÜ( pQóè3ŸÌġü†D#lƒ?lv2ĴİWiOĦ{ˆ.ä`W⃍ϕŬ—eIĝy˜[’¤†%˘ÒĦÁĝD·chĠd²jĠÖ÷µ2Ġ–݃‚Áİ(Ì%•§-I“Ü“ïd|Ï$§Äáŝy|@$}¨#Éu}ˆ<^äĤ›Q${Z*Û@ ‡Ċ=ğ‹:$Qvĝà\‡Ìì´U~êŞ¨˙?ˆjx ¸CaòA9 ž2VúÉúÚİ%R&‰)›h“)* %&³ ‰fc 6SRI’š–I0Ĉ‘ai)I%Œ†ÂlĤ³R&ÑQI…,hŒÔÌŞHšZiİ55-%İŞbĤÔ˘KSSM4m²ŞHddÖIJVöšÓj0Şĝ*0hİħ'‰‹Ħ=éÙO›Ġ„ġY_ Ž ôKùàQ€ü nzĦâ ğèFlô>nÏùCòÚ^ÈÂBĝÈKP¨ ža„pŸUr%½"à„„I#‹î*P ˜`Ħ0‰BZj#ރg̓@&Ş× ÷6܈TšU%T(´R•@TĤÒjl˘5e_£]W_h‚µ Cì ,!¨žj"Ÿ_ßy}šĈkÔ䏉>lùù>²6ò’=_R}]=9ġ²|Ŝ–˜ÂA‘IFO£ähÓİirG 4‡‰3‚—fÓIˆ)ĥĠĞoŻ>ğ’iJ^6²ĊÓ# 781Œ,…Dp>:‚ŠÔRGIQ† (”PJKşĞ–…%-ŞĊX„Ÿl“(L›¸qi'QĞ)òŭŠ€|Ç|ÂHŽá U@`Š<ÒŭƒÇ Ú$ˆV1Ŭ‰œħ'ċP|ġvéZߟˆ ğZò\YʔPA숅ï$ŠÄı;³:˜ÄiÚJx+\ZÁ$Ŝ‚×îXÂĠ*dR+ÖĉPòûNˆd † PĴÔ 1t.K¤YİMAIx_ˆ‹ëŞèPhˆh/Eb"+‚$¨‡ß ‘ ‰>` (†ÜÍK2À·˘ä‹U*G­ĝô0XeµÌ… 0ñ HŞ%ECìÄDd’Ù,K7š*­‹n÷żµ3bŒD.H˜€Tb^)6HRŞûd˜²^ĴĊŬıÓmM´ŒKĞÑOLOÍbZ…›z6ÚIGE÷µÑ-hÚüÒ,Ŭ‰HIl"°„Ş ótuóv,İLşÌşŽSPѽŒt‰*ĠĞN¤£T%š˘ĜĜäȄK› H*êhuZU9ÏdÒ15¤ûò^_ŬĉvË#ŭ)\ˆiDħ3)T2%DĜ²=˜ÄN[f×—ÁáŻ|ZM€ĥ,šMŠ6Ž\ԛ!nTîĈ—Y-×Wnî˘ ğ¨Òĉi˜BıJĥ촋h4£€ES%d7)5¨Ż‚ÓÀ܎×(áمEI·D59D˙YTÔòÂéş$¤xn½2•%G/z6ꕈöo„ĥmUeŞTXR;¤ QMO؁m2% piÀv;ş/Œ?´;$Ç^)½sÜ2ĠU[&•RIY‘Ħhq” Àĉ'ħİhŭì?áSݵ§”W ĊÒĦj,MĤŜğkq+FÈiÛêÛñ­úĠü1ċö;(•UQ€†Â!˜$Hib+ĉü¤¤MHĴìáQ0²DV,Z†%„É„'²R–/hˆ5°9ÚH)|äu <‰á$qWÀ×1Au&3ïÜÇ[µÚ“9‡kôïĈÈ)Àe•)0šBI Ùoᇄû Ĵɟµ† ÀÊ+ÀtsŠŝĤ%Ӗ˘˘jG‘Ày 9ì:cqŽÎ#4t˜s#Ĉğ'¤’z†‘-ŠĦ˙ݐ”ú=WgÄ Ċ“Ğ1OĊ‹Ħt¨: Ž;¤$pQÉÖĤĠ< Œy´ĝóz7îŽJŒ’BÄU’Ižƒ -!ÔìĤ zHëg€eéÇ`Ñ`Y‰“ÌıŬ\ë>³Âë2°Yvĝ‡J,–İš:郐 iCƒ@U ËEUTuU&&NU(²£HK£TëĊE8ÒlE·Žê+t2\Š6ĊHbiäNDd!Ù´0”’Ò„ĤR!4 ÊbİĈ-ÄêÉ|ÌĈRd>~N÷‡ÏÌ–îvğ7 |L \ÌPÄdjڋhd—m2%&KÜâqÇ$ħ†o#gòÙ\͓Á‘ŜGVäy˘ĵ:£§eˆm@ ˘ˆâ{_ô‘9ħj\5a…jÑa$Ħ6‚îîĞ­:£rµµzŠ}+ûŭ­½ħkoŞëğĝ‰§4:ĤˆY%š­CÌ˘`%ä094LràäW-͍ûÎ`ñقCµŸ[FĜœn à:²wÚ,Éa ZíQÄFàXb_X ´QH4ÖÍh‡Dn™1 8p[c0pÂô d$İTKm‰Oieœ 8œd ˙#j€hĞ;I–"ċÊî‹ĞğLŒ) ”Ñ”À™ BÎĦÉĈš’n–‹RᏌá’9P­–ŞQ÷B´Ô"İx…ˆ "Ĉ ċšŜSàdXÛ–FÖ9[#qÒ0²;´á'ĠÚ'cÀàì…ŝ5iL<;ŞàI€8bô4êDh"H°#;·g.ĴÔĤÊşêúİ~zgApsÏǍĝÉFŒ$,B<˘$Bj{iypôçIíN˘:’ž0yARz‡íˆÈŝĉáàÚ8ŝñ4Z'ßô˙ÙïˆtûzÂ~#üżÛŭÓ˘?>ÄŭÏZÛĉ=ÛĈĜDµ‹VPµh—̐î]}…ÁĜ?uŠİv‹~b?ċÍ9˜@àt7mÌò!}ż?iĤhşdQx?L²½àyžì?ĜNz jç²İ²ñċÊ´×_D­ÂDb*ż³£úÁĦà‡œ=ğÙlüÇßYm[Um*Tħ Š‘'áŬ§ñ}9%²-ŠħT–ĥ˨ħ4hŝëÑFer ~C€hOÀlC>ɢHAEWĊyĦŜŞ€áƒîšiÂŻž°Çi+ŭ‰ŝRğZ˜3,£$É,cġĉRÎèŸĊ=ûĉ*?À%;•ú˙ĈE@vA—agœ Cñˆ€ÀUz$èŸèpŸÌOád–œL`´ÀżîŠP>{ Bqç'Ĉc2š£23¨F)LÇÚYb&êN‡UrĈ:£nѧqĥÔ·˘Â²dNŒ³ÀÒJ“#Èî<'IÙE<qûÇóH=Èŝ(ġNŜ§—Â'Ĉ‡ÑöĉUbzÈPAғñ:ƒG/‘É-UUQŭ˘ú‡î5ù:zu6şn\ EŜ Y( Ġjµ ¸iY^¸ÇqĈŽQ$D²ĴŽYîÛ ËlJ=Ñ´b·‹†ÔÂOí"BaăЄPXÀÍ"oÂP~(";( ƒ@ŝb‚²LĤ³ŒèšŠż ¤˙Ä˙˙à˙˙ôÂR|{÷Ö½WΉş RĞŻğBvêíٟxwŜ7Yĵäû·ĵġöŜ14e*Ȑ ¨é`  (E"—`Ò$WFĠĜµTĴħ™wwT! _GCŞÚ*4À  ( `^ËÈèx˜—£@P(ŬÀĜ  ìí€GAvİÙĦ ²Ŭş§(;µĠníÛI vçn€:Ĉğ€ĦïfXM 0֚ikcJ­M–†ŠŞ#éEEPè ëĉêív“-žğŠ6ġÜÛnûıí˘zéĞj›}z7ıı9yÛ§ğÛ}·ÚyÎúġq½´÷s½ĜyğžŻ{ĵ½÷½{ĥÍ^YC[Ŭ•B äšPÎ÷Ĵ|}ġöƒµ^XwÛ]>1Ŭ8şsKezĴKÁY§ş0dîÏ;Eyçttóµy€v‡×D—vé<ĤÁ…íï{ŒĜw4 ([m ĤmDŸĞğğ ĜxçŜêò“Ĵ E0c³NàU³tú4˜_B zzáî6m{ šĜ|êïg“…AÌj:ʄ—Ŭ{µÏw˘ô4r£ om^ÇC—-ìݰoU¸Ĝ¸uŬuŞ ôsĈ2—Ĥ“ÄÏğ}ġßp;š•yñÚt™ğ}.yŽÌ}êî­­–Û­94n`Tw{ï¸|÷9mƒM‚Hšhž¨zj4ÓMHA D’e50Ġ=4€4zš42$ÊJ…&CT~£S˘=F&€£C `˜Iê’4˜IšCOSM4…"21OTô™Oi”ÔüİéèSÊ4Ó@¨’˜hM mŞhzŸáĉ˘ ìzżâŒù("< ˙”E}Uò¨"$¨"%Š‚ „ JŞQB,¨,¨, ,#ŒA2  €8¨"'Ş˘°"êĥ×·¨ħŞ5Z4b 6"”–¨ÒjDÖ-FHMlm5‚ɢ)ˆ&DĠ•*+Q[FĜÛ&Ĝ¨Mf4ÛhփQFÖ5T`DĴ˜Ñi,£FÄb²²Ĝ£j36Ċ£[J†ÚÊkE£hP‹2ËV6Y&ÄÙE´b¨´lkFÑTĈhÔ˘ jĜŠ„!LV hDPEħ%ÄRLÈZ’4$5–£XĜ–˘°Q™µFÚ,ħLÖ£PĴ6Ô²´lm‘)5¨T"ĴFÚ-6ÀÂjƒF2kMBÑ-ŠÑTm„ÛFÍ QĈ°išÑ´ŠËcXcXĥ1lhħ`ĈTQ´-‘’“Y"(5%Xi[bĊX”ħTĥħ& ĈˆjEmMĴF4ĜQŠ5‹ˆÑ’HaĞA”dk M˘Š‹SJĜT-¨Öcm²bĊ˘Ö) ,Ñfħch1cD!ħ³…5˘J‘+&ÖYħVf˘Ĥ‚(”"–ŽAUPĜ cê˙çġġí?°7ġñ·ŝżñŬŭ?Œ}eñß_Ŝέŝp³Ĥĥŝö.)ħŝ6˘yÄÄkŭKި ‘’KÍu•âŻJĥ#+Ìm˘!v£Z_âí§Yäó½ó¨žiu ŝrY”+ [‰qŭuÌoAŜħ  *èi.d>_ʊ:uÊkTĦtĞ‹e˙ĉoĉĵÖ½ÔVˆQf|תawj|öċyĦġްĥ;ëS?í€ ŭ É/Ġüš~R›Ċ^²ŜşŒs EIÖT·žôkçl qˆŞ ßÁŬ—™Ĉ•‹çxäÄ/hv­,uŠúÎ(gİδu… ág^G-ĈñŠ"´^2ù+2Ò¨>ù”&J ħ{ü€fXĤ´2’)ÊìĤŝj‹CAރ½ôJŽŠè‰RT³Ĵ{y˙¤üŽÜ+ŻêŞŠhŞŞ‰Şĥ˙âÈh²Ï;é}wüŞ;\³2 F°ċ fœ'ùĤ 82żü’ˆh jYÈlÓıĞ*ڪȚ¸×$ÄguÓWÎbœêyÖ9\”ö÷‹lc|'É%WÄ ĵ…ZAŝŞtQşú‘),Kĉ뛌\ċĝğ˘òċ_:uéE(’#D\ı×KğE˙Œ(˘žĦ@PsçHó8ȈàQLúÁ ÄDD‚€t—Ñ·ŸŸ³aó:SNRÒĠRÛUAC&Œ;@gÌ ›ÛBr)ä4LtÛ ÌÉl´&DÜ0qgÚ#ûcyNŸo“”ë·?ßÓğ|ĵ!ö§û£ĦÂû˙/·]Öî‹!ڍ$‰ïïú~Ĉï~pù,8ŻA²0;$ĝ=ZhX{|ħÁ jtŭž³ĝz{~g-ĴôsÛ<òâ=ĵbIñ‡Ġ#A’b|u)Ĝ>ĊETETĊDTEêëëò͆פúażdÛ=ĥzÓĜİ*G .{y ­§Ccœ’ŠŠ-Š´ç³m’8tc\tNi´[I°ÄÄH”Ò¸Ĥ(ñˆ.Ġû0ê'êüänIÛtçëá,½ÚŽm-³ C ‚ +mĥÚypÉL+,úĞpó!Ż8›’?ĜEċÔÁ]¤ëቒC~™T(n7Uġ{„Ò§[=4+ŝáUV*ÈĞV7żLŬ 2DÄ_!óŝŭÖF_ġŜߘv˜(˘n~q€"üşÙİJ òûQA=Â_·o“ê éÜñ"Cò\_ĥà/”½BË9%5Q&˜= 0ÏHÑĤÀ†2$²D²E‰-‚|ЎŽCDĴd;Ŭ%œ-޵jˆüuó[|÷ĊĞ 6J šHİ”ŭód!#(Íĥ6Ú ^ "첋ÔżD3Í •7¤ò{›ò'J~bEôLe£˘-/˜•‹4 ŝ'‰Á4ʳQĞšj‡>¸Ġ‡˜jĠĥ*ŞŠ˘£ÌŽï‡ ]ŠWoS1€@Ÿ5.µ•]Ż×³„YıZĤÉrêÓ6ѳ€şĤ$LĝE‘ÄZ²uR4)8gğêġò+È8úͨë˙0CÏñİnĵAËÀÁ½p{ŭUÛçë ߌĴepċ™‰ä9ZrÌܐb>L̲Y”ĥUș §pü8yPĦ 8FÓPš6€Ĥ€j] JéŭÊ,mĠŞ´ˆ°ü˙[rj8°5ˆÒ’x‰oIlmżSĵ E 3 eÌ–0Ĉ0Çv³‹j–­EJ£“bÊ ;ż!I¸|BPl€: 6HÍ$c•$&Ûڙ}áĜ ŠAD(†Ħ^ï÷Љ'ƒĈê~c!ƒµÙ²ÂĜ’Ìaİ&‡ím·×;ŭ"ìıƒEPËXÊàŒi‘"ÄTy'§µ&ÍO´’NñއĞĦިĦ çù×G…A> E}ê‚" ˆŸôŝ„ % R-V4ZĊF*"ĈÉQ3FµL666ÑĞE‹d˘ĜÛ-[`Ö6ÉĴ‰j5E¨Ú¨¨µ‹U*ŠŻöHQÌċŸe€Ÿĝ—'ìûÂdѝ$$G÷PvŬÜK“p>8×£r<#£A#¸"kÇ#žÙ0nÂì›ŬÇĴKĈ£Z ¸àè$R0šçÇ#Ç<.2ˌšAR4wxI‡h]¤ ĥóÜ d'œqĊ·LíĦMŬۇ Àӊt(§*‚Š£*HŸî˘Ħŭ%AeA`PŭAGü’ć˙RC˙rCtMÑ6DÙóD§ùÈ&Ġj!hšTÇġ?ĝŝ;7üÉCûċ]NyaëyÂoXd˙,À ÏlÈó눧¤ñ?ŝ;\xPŞ~GÑR?ëÒ|ç·‘ÇËȓÚÁH(\NùhŽĴĉ£mÇÍż~cÂĦ4v×n·Öñ~ġżÛVıò&š İ" ²f$Ìİ 2DÒ-‹-˘Ç\˙]d/|Îk=³'Ï£ĞÍĉĈŜO&–gw.8W›M:mĤ+gnŒV›¨ 3E a‹iÀĜ`N,X€1Íbux9pċÙÊĥr£˘ż/‡sğÉċ×½Â†f˜_ç*ÓÒáú… ï‹pC…,p+†$ K 04$8"7eb·tbğryÔñžÚ|n^—/öż:ö³Úàñ.ç%u‡ò˙lßĠ}ż÷ÀÉÀ´‹Oŭ˙öĊ5úIöZ•ò—'rœxĦí zHŝ7iĈG˜ ÁÄĈWŻLÜĦ‚Ï邨ŞTŸJ#ŭà @è@íV„}ŝïŸÇŜ˙/È=I’mNa?Ĝ\ÓË+ßO£ûd~ûżÚûÄĝ*ò÷]¤xñœÇ¤qùHwıż ¨n÷ŬvŜéâ˙­é4û Üžw7Vç¨÷Zı²âïvÖ´n˵ÚÚòœ—µâê=ññ:é}žÌò²Se$§Ggg%İx?´áĝ6heNG´{G{Ëâ>WîÀdóĝù|Ğ„ĝA‹bí˜wúg—ŸŬ¨ĈÁŜ§j‡Ò§Ĉ£,­:Ôë^+òÁ͉ڎl6²,|/i~R”)Çl5 Sç)é¸<á(JCÎóÜêrê~0'Òġ˙YN%ïs(|NÒzB}ŸfjDíŭ–Cí>L({Ŝr>Og5óû˙#ûżòS0Ħ“ô?¤µMŝ˜Xħ8×ì!9!GÙE>pq ġŬHŭP÷żX_ğìÁCßx|!Òżşüàġ· ÛîÀԟmÔşií'ˆOŬ üŻo§}œİùCñ…ñœŸTĵÊ ¤éyJçß~žû´Ĥ_Jü¤ó·ŝŸğIhIŒ”§ˆâIĝM'×}$ú@äĠïYĉñw·nÈ{ıÀŭ í£ì²O8>òòĝ‡Ŭ0Ÿ_vs!K‘Ġ‡‹ÖSáJ”Síz‘ë>ħ“ĝG”ĤŻŞ_œ]ċ}dŬġ^Öá÷ç(ú[·Ĵ;^Sï‘~éúàM_+Ŭ ç/•И|á Î÷HzǵKçşûŻ„{|qCĈS›ÎĝŜqí Hn=ݤ¤×25ÍċyZĵï;íƒp>‘Äħxñ¤=Òmó9G¤ĥk8U'ÎéÈÖıġÔ÷]Î?²XÑs.Ġ7’w‡7ß8ĵFméQìı›ËÓCPœáfH7‚‰¨ĝĈiâg·ˆGkl:ËK4-AV…ÎrïVÍ!‡™Öo,¤Üġû½àŭ›|ç_}Üß*ĵĈáÊÜq֎û•×£Ĉ’ëÔ,ÙğeßѨ>8:-öĉLÚ˘Í_|>.Ô<`ÏYë–¸>™ĊLá£èú ÓĜXwŻDpÊÓ§yDêá°ĦĞZÙì=—Žœ"Êh{ÏŻzÍC:½­ÊMkÒÑĥRĥ¸2ÊYg‰è·4w#:ŒŽZtjĜÌÁsI§pñ°îœçvÙĉäĉ1•eoÓ¤ö'{O“­ġEċ|ħÖú£k8g†ˆi'Sĉ<9ÀĞġSYBŒ²  k9f(dïGË0~v=ßïJ8 QoĠE#Ċ,ĝêòέĉBîċvy‡ÇZ…›jŽÔä\û…s(ß+ÇœáçC½c9ĊëËVgЁekĤxkŠÌôàM0ġi¤’™…™ğu”ae²+ç­„(½;ï0Ó+GĊ(uë<ü{!+‡İÒŜC‡AhËŜ.–N9ÓŬ£ ǕĤz‹¸;§ Žú]6˘wEv_ _;Ĥn&?[ğ áß-éĉf=&Oá–z†xf^ég¸wߎµ3‘pg/žï3‡0W‡ èNiÀ‡Cšħ·7{ß.iÖ[ĉ<Ïm;èĵtî–3öĈñİĠƒ£§V+Ïh{Ÿ-Ÿ& Óڔ8ORáí7™\ĦÙK³= ޵kıoEŠġ­ê=]:KrÌ:XZÒw‡^¤éÄQ"8Y E÷<¸p´T‡Jıôä~³qtíĊc΃Z{…¸|;‡!Gò˙0+üĞŭ˙Ïü™V]­-]‚éTOîsŭ­éˆUŬ_ġ˙ÙG?Ŭŭ@½;n•˘\1,@ŝĊÓß İ·.¸uĈp7OâĠM¸ ê Ž7Ĉş8­6W‘ċĝŞò!y­ÇMV[k vâr£µmqyi„V”?#2/a]”CâÌ •Ì#ùıß½4v+\²ŒÛ÷êRFx,(Ùm/9Y½··ÔŻ™˙ ÀíEı:‹—ħÍʞÛısÒ÷YJÚĞ Û+u!ŜĊ’ïŬ£ċÖY„Döá°CĠĞ3EaıǞĞÎ2U\—˘—Ċ2Lú`9qM`ġ€§ÏL9 F—êäF™Ŝ%JóÌp9>qŬFßÔhۏ/2´Ú×jŽ_/Ĉ•|W\ç“1J¸–„ë&G ÜpoĥĈ ÄÖa^çŠÚÛu\ú~¸³ßlÁşíĝÇ\u+äàŜ[^kfUÇxÁ™X+ÈĤډÍrôXƒE|ĉÚòüá1™óCW.žwġçğò<ßû°ätâ}yښ²†‡×Šs1{xĥġáx‡ċ;ÇŻw~"Ş÷Çf!²W“ĥìĴ9s†÷ëÔĵë×WħşO9öcŬïPwŬBBŞŝïĤ‚g­GÌZ§­“Ë83ëi˘dárĊ¤iúÔáT5¸ Ĵxém½,#şŒÇuGV§UŸ:ÙŞ58ΧË[ċn3ùÌeZ²‚{+$6ıżÖ4~jżÂ—­½ù~Šf~GȃšÍkÛñ? €"5ŜĈ§ 0ï§Èĉež¸úQ#êA§Äċ@ğ X'¨VÌsœ°ç:ĉĦ~y˘#k³›Eàî>ħ²G™­ÀÇ<_><—òù}^8PñıaÔr zŻ'MÎğÂsĵi•÷ECĦ!áUÇŻ$ÄN‡Ħ^0ÂÎóÎÛJú ÌÏ}0‹òxèʄ/£ċyé°­3žÏœ÷#Ex൏˘Qb•TùžbeÌğ'°Fi†Äò­KÒú›ż4çA\ܲ¸ĝĠz,Ö5óÎhk)ğTâ´Ö'²íw†홖Pq‡÷ž>m+4{ŭòÈ,/2é!GĜĴĝXBßÓLż—áJe³Ċádúem>1—“wğ›i£ŸĴ3í•ŠĥĤQÀjÒ³O î+aĈ*ıİİü8ôË9ê‘&T(Y™ˆáĴeŬJ(À’t˘ M™8ün‡ Yu žɞµ·W:Ċzï<^.œO§×şÓ8 D¨8ñÀˆâ²ž¸ˆœ½ßW­aß-6Ì­ËĈT`Kêİŭ N†nûĜ'8‘|rúԓz×ŞÜ½žvŭd{V:§GfĥŸŞ::‘.…×8f ž]ñĊñ ˆfaÄç ž · Ż£k-§›‘kÁAÉzñ{U™­öğ^ŻŬËäNBù ĊÄmÉNt²_]°0ܵûż27ë·Îeĵ5o{²Ĝġ%òá)4÷ÛĵUwÈ 1ôÛw‚üİ'ú·iO\dHÛ½ÜSpÚUïÛpú ĴĜÒ¸‹7r$™Pè:²ÎȤ‹‚[ĈbXI†"I› [ĥ^=·›‰òp)düÑÛâĤó˜-ĵbec×}2ĵ2Š'‚ÎŞ‘<ópžxÌ UcM×~  Ŝ'ä ›Ĥ’_qËuÛòŭĉBÙF=kÖkZħ9ÜċÁQĈWĥŬàÊ’Ò@ÉwXñ{1İïwÛP0÷™ê‹Í6 Ċá`£W’`]ß??‹ŭĉäÙ…ŭ9{~Ŭċyaö8'èĜ.! ҟ/ââé>ĝ\½+_ÑĈ_ëĝ\ _½ Ëŝ]5ÊşËŠÂ„:(‰ü–eV@íŸóôò84ÏŞœ·޽ó„ß'UŒDùŒcŽUĈœ7¨¸(½?Œ8ëI܁ĥùb4wİÙmn˘7‹4ë­ 7Í>÷·Hφĥ½zè3O,ËC× 9•Î6=fgħRŒ:Uç€ĥáĞQ¨Én…?zR{9!ŭâuÇ9wËHìĉU™_Íñ˜ÌfN—^îïÀÖġo~Ÿi—cİ'Ş…hmùé£çTíÇW}ëIÔ˙ Y0ÒPÚ³/m×^?‡֖3ŠŻ)ŬzġfuvMnı™Ë ñÚú‘•}4‚`,‚Œ:|aTĤGĵiUHŒ“jO÷ü-pñŝġÂŞĉ”ި†]œ;³—XĠU^[÷ÒM<:ŝ£¨¤€7ÙÊíK—x#Dġ TjT›Î⠘ˆñô̏üÈ'x́ÔĤ½üžŽŞG cgóèI?ĥJËğğzñÇ>ùĥkMĴħ³—ÌŞŞ³Hî™ë–í–˙ıósïȤ#bÑ~é V_÷4ьħìÇfžĜcµuxĈ­şĞ]ׯ|Î&ŝNġúóù„*›Ğ–Ħ])~ ÒĈQo£„?ĦŒĈĵx†QÎ< c smgUÙÉъŬ‰áÙĤyĝñëϟ>ğx n-1<µ,aԒ<Œ‚— Dlİw„Ş+6™xŠa³ÓEfÖjk§ƒdaòòkF’‰ 2Ε\YXÓC†Ùàé_.ċéH…Òá)ĥMÛòïcPSÈÜñPܚ·ÖĜ>¤\7Háœ8Ŭf7ÜtÓËjjŞĤĜVşËħ‘ƒË³‚½6+›ŬsˆžpĠhR¨ujq j-İí„W\äïSnZġvV‰VŞÉäàІeÊ˘Ñ Gö•äZóM.#£-Ĉ’ĦLÄö¸ ⁠|+³Ċ4UC`QÊ)ph’8Ĥm˜`Û%M5ÏÖ\fK ü£…“{JMËïġ zo8gx˜$iĈ\Ì3S#-€ƒq aD\µŞ½^kS’dŽX•{Ζ¤… I*¤„&<Ìĉ§²c*ŞZŸÄ½Úĥ£Ġ?mŠ‹Š3“-?ċîéPXŬ’ŭ'¤:ͧ n9]qš™LßĝÀÀ„†"U”—ĤÉsJiT2Še;Bpw–jÄŞ´%w$Ñħ™H­6sNĦ˘È8˜–¸–˘ˆÔ^Hc³½ Ċ2ÌBÁËoĠ1-Úwî²%eašĝPħŞZifj]şq£sʰ—µ­àHmV1xħ'ñ’¤ıˆvĥ§ĈvWR,ӒnW(ç3ñŝ^ KtgŻ 5ĉ:ڏxŜ|Â3cÙPËé›5Ġà0µcT/5ġĠğħĈtÙHĉW1,÷L¤ékSOl)œÄ+şğ¨V0{ŒÄ‰(%™ƒ'nvq R(î6YXíıGÙm\ɝf_sdİûnżğĈŬ8H%_ÑŜuċœk<0S—vŻU7Ëea²éŜúáÀ½¨ÖC轑èĤçp³–hÛ&i{ċPħ•b8§$¸%bù†0MT“LĤĝrÁÈÉ2N,‚Nú* AÌí)`àìëD$žŞN>S¸7ZÛ1ŽĵòϋÉġߘ˙ÖÈ3+mĈT·öÌÜŜ}ğÛċ–읃wë÷s÷ĵe’ßük7Ö~vÔ„—ŜÊ "ˆ²UVħ‡:U A`ëo,5Ħž ßˁĝċƒœ•NOJu'ċS§Ÿ-°q·Ú1Ô-Ġ4ù.–Èv˙vŭo“ú*“’8ˆwaà²p`!ÂĤêYÇ|é_0ı0V;i, Û]•Ğ JŠŞ€¤’JĴ¤& –ŭöQJŞíŻE\H´Ğ >ŞYĦÈ;‹˜MdÉ2ż’×/Smgvs ŞÊKXK8|Lá f"!A%œ´´aŸáeÓ ĊNH Í…Ì é@Ùrĝóĥ˙ėùìÌäڝşĤT^e:È˙`Ú·'ħ^ı¨ĉ~˜fbw„ĉÜPRjNî•…Ù‚• ÑvÁg8"9–˘‹‰·K*T· .ÔîÈ(Ĵ.êÙIeÓ7·@ö¸8ĈŜ„ħ+ċ•j™–e̅b§FĤ{ħ áj +,³[É†Ë(•Á˜eR‹ÎtC:*‚ "pÁRo…áÇ,Ĵ ƒ’-˙×µŻëıÒQܧO\r9ŜÙIŭŸkJˆ'GT0Üp˘E$h†…IÌLŽD‡Ñíòñ‚[,›f, ñÚëpsŽX`0“ öî+şxkÑĠ8TY°öeÛÛی+†·ŭVfWĞ×\Ïm{9c*!Öfvn“›?™Zî¤{è5Ĉz9l˘˜£o×9oj™ħ¸Çd£&–°¤³sµqÂË(G;¸k6„cèŞ@|ĈÎ6´ĈŻ/ÈtXHeelCàĥdHĊ+c=|c§ŭ:ûNQe?|îSıêĥ9@Ǎ²îŬık·م9$İ>5#²Œ…QÖNŭJ¨ġVÀó:~_Ż_%Î?:é#ÎÊwùöc3í/ì‹ÌŬ½ùĉ5ĝ—|´ĤßwÔ^HƒœBEÔ4…#÷ÜÑÚO'ФsÒŽ‰Ë†Ìċ\ım'“ШĠċ`t”Ż*[ ™ÀŠÚ²ÓÎ:Ŝb1µrİ˘–Š\qEĵŽĊ‰8;FVZD BĈä`)(ˆt@âG`M̎ˆŒ+˙gçŠüÖŞïŞ½òH°]5”í’wc#³ŻefÉĉݸëğU*ŞoÛš }†Y‡„-âŭF˜Żĵ'ĉ*wċ˘²öċ˘ÌĴ_^£žšGdûĤŻöR_£=Áá‡\°ƒRŒ%%W l³GiÎ䘀ì‘üċBċNd~h >>:tûR?ÄİX†´ü!¨ĥƒı„hg@zA§iìz—teÑÁ‚yi}PŬhĈ{è}^ŭŸ^9ë<„ÁMáäñ>:wÖoKŬFdî4l§˘ìœ,Z`Ó.żPN0Ŭ!ÁŞYa¤ŻÑ J0i(,ġW_íSˆÖGġi#Á„KßR˘ˆ²‘â­%Ŭkĝ°ƒ“[5ËÍğgutSg-eé%mĉıC0x\Û8rJùp–7–p³ƒ#$j;›>Fîsg~ Y ï€=W„Ä—bA&8wg!(§ ŽĴÄÔ•ÑŻ Nc£mj^aSSю¸À$OhvH|şÁɉììÉ×ÍĤ…££s&/['…Šĥ#V*MĊœĴ᳊ӖQñ‰Ö{/wc³ı°;Éi_/W<%›óíšá;w+µ×Ó2şÖé]R—ĥ1(/Ĵ˙"´]gkğ1~Y%Û:ñ€ÒÁŞŞ…–4‹k‰Š3Ċ˘Öz!–2—ż·âÑ߆aċ€u‹âçSÈ2•˘/é3à¨," Ċ 5TĦPΣ,£ Ĉ6‘ëJÓ”Ŝ›ñŝµ+‡ó²/tIRCñ½˙µ _Bˆŭ‰½Kó?óŜßè ÄÏp0Ïè;_Œ˙"Ĵ8~*>7b²Ŝˆ`P†üPÀȵ3FyÙHVŽ?ï½ŝ^ĝg.ĵÏÏĴEı^ĈÄĠŽò)WĦŒžT󑧆‰ŜäYĉyïT_möÎB$ÙƒìĝlŽ_› +Ú#£iíuzĈî™×l G„ǨĈî¤'²ÁĦĜprĝ} ìh£Ĉŭİtŝż”u ŭ‹'ò£?.ŽˆaƒM5JĊö$1X¸‰Ÿ4µüF ċşş&vÍĉ+fbÏ6Ñċy‹ävgƒyÌï4Ĥ´ÓCèÔĊq³ ,D5h§ŻĉßÌ (‡Fp´À,]Gâ°£ŸÑë[¤KS€Ñŭʎ‰”Q$Àŭ4׽ޤ6`ÂĦ /Ċ%Ì3ßö¨˘€‡ü*¨}Òż²€~Ĵ2É>tGíI!”ϋàÙ§ĝŞ–’)Ž‹€RX@H9 ^1ífGKì~Ŝ”•‹((??"ş _ƒ ì§LƒÉ6ġ°ıRC]ÇÈò^4¨!é$>tGÓ @ĝ¤yœÄŸXTDT$ážá°ì€4t’ òH@ü˙Ĝ>Uİ•úĉ ,!÷C'Ì1YTŭ]ĝ“Ah0’$ۓFl ‰‡ĵüTSÀż@ŝ§Ú/ì?!cŭ ŭOàĉyáM}ÍLPĠ! x6rêHŻù‘ú;¤ŝĈœ+CvŸù9MͤûIÔw8žgĦÖ<'u†“ÍHóŽ#˜äa´Aċ?ĉ7z àö|^­Où“Èĝ#ÍÚOÉ̆Ġv–ËıġŒ{×ëEpî!À¨àŸ#WÜ>żÎh"¨‹ŻĴ ÁÀÇDi Í“RFœ•yO‘¤3ıÖM@è µg ĉ˙ċĤtRa–-JŽb|r÷}s$ĉ}OâjOg-ŸHDšvnÔÙp÷va˙UĞômíüÙQĝלûÉ ŬÌXEgÚDFÖ|ġÑ✧'n}\>ŞFÈOÄ?…IÉ ‘×˙L#ĞÓÌ=êbO“Ì›i²GSİ’FœĞ‡œ‘’&ÖIä|G/âÉ7IC *w ÚÇu‡OA•UiüdpÜNt§Šc<ÓI‡÷¸yǧ1RO@ìé èRÌ#ĵMĈ>)^=NİĦëV²*ËJ*.c瑨$ŞÑUıƒz££DÛU-UUžI;!ŒpUߞì|ÎóÒ§‰Ĵ8Tä‡/ĥ4êÏG“H›ĜNï4£‡´ŠvHà`ĨKôB¨5-< Ĵ£m­¨µ§şq'£†è‘ÁĜuâOìz¤ˆé$!ö€<$ÒN ˜ĊVA2FH4ÁÏŻ#CÜİ'™é1ŝĥ|ŽHœ@çŭIŝ]ÛsŝÄm•!PX‰‚@Oo ŝħ4Hw~ TÈа(8Bƒ˘„˘Ĵ$D°$>;?9ÜÙz$ ä„)Bĝ"˙Û˙GŭâaŬN*ı˜bp£…l£C ˙ÁŭQ˜˘İ¸QQx@`„?â’!Ĉ˙÷˙Ò˙?÷gîoŻ“ßĵô÷ż{ğÎ2Žĵ:iGO= :Uá=îÜç·X>,öÑIğ…:Œw½AӂhWD%yAá•jĤz^é( Ä" $C~ÍUÜğ;H0E`t‰ÙG9W Éè°§eN•Nâ÷ĜÀ1Q%6 Ô'av4ézG‰2d‘”eJ¤‘ħ)47Ö"ïhĈ*k@ç h (qĞÔâ…(P†Ž“œyM§c”—ĥğkŬ·ÎëXc:Â3]䌭ħF:œxŬĥYŻÚC&sjċTêÇRm˘Dïz‚­Ħħ–½ĊË|嘆â/sdíÓcÍğ{¸Üê›ı޳%WHÑ,Ż.˜Cy41×´(âiÚ<Ö:3Èê!‰Ĝ4ÛöŸ}a >Ó°£O³Cs8ñ'hgx‘-ŜbĈ]:_ĵV¨,ċvxâ‡k:b:g‚-xĉR¤ŻŞöĊ–v׋8.NóŻŒ³ :N]¨bŜíŠÖÄzš„°W¨êAÒú+:(t6+ÂĤ*ÛM˘mnÑH@Ş­EâEuİp,C^ßġlGd)%ĉ Yœ@·ZĂ#ÙÌòì{X^5ÌÇ]‡(™|ş;-˜îĉáÓÏzv½›7´:ħ;ĞyîzgĵnÎĵçGßu³Ù2aHŜéĵâ‹÷D d49fTWB:;Ĝ{lC¸ âŞ9Ì\w끊é:ⲄĠN>^^ñւÔ]T0{Šo*°Ô ÑEAFĠ>ù ltwr%¨¸U›éĊÂÇD#cu ; öt°HThĞ•Şı+i9ĦL^UĊÄzW–ˆ°HÄB"ħMÜó­*"J€KE­IĞ ğĈ„eœ £8DÄü‹Ŭ2âKQ³kİÉ2¨‚Œ އ¸ >¸èâEڀYŽfĥV.C‡‚ôš*´€ÌH.Gĉ­ H|B|·f=]$A6•‰tJ˜Ú2`é£Ju]?3RTˆÒĈ“iAr¨ IJĦ"Ĝ¨x6²˙f˙ż|“˜™üq´•šßBÔ0úï& ˙/·ÂáJ>a‡•RèEĜżéµ $Ò İçşAûblħ…ô¤ ËWݽZ×ĜpğD%àRğAÛ0H`óK´$`Ûs1§7OL|ç[z UÙżŠôœğE#^ Íd4bĊü–ğ ċa0ŭŬ G?†³C‹Äµ‹™âK[Âxâí6ÎĊ´ &%`BJ ^ĴÊĞo8W=ÍñUÌĠĦUvéÉÌT%BJÖÛu—@$„HYGEĝÊU4°Şc`Ĵĝü´ÒXU]*@ĈÓ#ĴD/Ĝ¨Ĵх4!I’F‹?*Ùĝónb8ñ 7IJġ*Máf½‰|O”‚ÌÀ;$­QŜnTÒtkZ^ŒÔñħ¤ˆ’ aµòZ*ž:Ż…1Ş5FhûóR#‡ğe††E”^qôú$ħ hc2ŝKáqQĠ ü…ÑÉĞğžŞŞAŸ@çOÁ—j!/ŒaĤ`Hƒ£Đy&ƒu% ñE´]ÁĦ4 zjĦzUWħž¨~a”EĤ½Ŝğ˘ ³²ħ  ]ŞĴxHÀ+.ŭ½Ä&€BêRJ-~Hx$qĜ’Ħ#íSĦĜ\èYÔ M@e çĦÔĤ]‡ċO-³WMÒıU$.D6 Žß€îïƒ(ÌÏş,.üˆc +Ċ‰˘+LY† cáşÊ@J9q$3ê _šŒ)!ŒˆĞâ×à(‘Gâ^ô,èşşXš añÑ+N‡ĴšiB1fNœ"WbEü‰ÇKÈ_Œ6˘D›³–‡EW`²T-KfLX‚L2!ŭÒ^ICċ›Ükž<:Íç|#3 —ĴXf}RQkqxö3ĠӊHqq+Ô¸‡u”‹-cÁP//#ê^LáïvêŞĴ1ì“óuƒw š­?f+M7žú-Î3BÈħĦż¨ sB…KÇ.Ħòĵ]KKQdĞĥ¨*öʔr |Qä] tĴïŒm²ü ËPp­­ĵ˗Qĝ,áÛ-&-rƒÈÀYN‹OUZbJŞFİUÔÎ1Ôg*•iuvjŒíƒ;ÌÎ%Ú]ìB^Ż$Ħ%UÙBH4J½.’@ÎzNUvÌ0³‚T%ƒB'ÁzĉeĉT’y# rQ ôßGH›RşXîŒ7e%NğöyW°;╎ ĵ´].l–J[˙y!èH@‹˘÷§Ö4hX°áÔX ê?é—xĞíoy?ŸñŝŸċò?ú˙OóòEO__WŬTĊNl36†Fώ½ŽU}ÈĵgáaċäÔo”èzÌbš˘£5x›Áö\âĞD)BˆĦĤVékQˆ}ò/Ì³½LÔÚÁ.iÜcRèQÓÒ8˘ħbô:´ÓÍQ't³ċ²Ž”vÍ7Ĉfş¸g([ \Q›Fġ\O£,l… îĞ ë/ÔBŻ£.<1˘QĠ^XsĦĊĠhċtî*öú7G…ìÓÜó(ƒµHÔ4Pž+œ<™ ‹œÚ]|ŞC ZşÉŝ–~Ħ"~éŸĊ?Oş Žóñïç]bzɁb žx š74=ĤӅ] ÄêŜğlzï½VH—PñA0ĵ+£4³C•Ŭ û¤g5 €À%á‰XiĒv².’on˘I½÷ 6­>–ZħŠ =Çc0]YE‚7µI#ċÒ j…]°•ï kNPRżyZŻÁ˒B?óhÑߎï+~V3â_}Òü´êĦ&$›Gl˘àeèv ´Ö6Ş ‰ÔÖ?‘bIÏcZïÊı¤ş %ì;ҐÎ~Eĝä’Ñ1/Ì0çÄĝÎÙÀ–µw‚@^|$80äĉ˜I\Bl.„§àú΄‚]Xi@qġ1²"`Š%ıĝ:ë#ˆáùKsĈĵuHgÄéÁREjé§ĵzĝ†ìŒMEŒH‚fZĴHÖ"AĝtÊ\0ïíˆQü‰|wÇmë7bgäsÈa³Ä ӄ>8 TûH$Ò‚MòJÓê÷ħ²ÇXŝ ÂÌ8Ô A¤ÑxC ˜ÒĦ£Ĝşoù·îŭgOs–…X‡gŬW5^h òV?€kĦc8š‚Ä1ó, ÀáX2Rö#ŭÌĥ ÈÒ‰ž;ß!(:—uĝ¸~s 2ÖiW÷ €p J&NJZ&4RQVAK˜¨W‚‡ı´´Ò=@ËZ1ş/ކn0—ÀŜ“…q GKÀCmôáÏÛUŜñ^–3 Û4AÑe-FĵB³–‹?ó³ûwuıú~Ó=ׇÏH²¨xµ:oàä(ärËGïJézq ]& U2zÎ÷Á`ìŸö oÎ6˜bżOr ˙½›ÌĊ—·W·shHXî!2t:KŬïnġŬ/’zU{Ŭèä¨ġċÄçÑ>÷tMjaièïuçyxşnâ89.ȝÜ+G ÉÑsÎÇ8NôĉâñpıèÇwqÈbCœ¸&ʝŬËw <-U}\ŝ'|/è@7ÌsΈ^FĊ¸°0qx Ş^mFrَ?Ëôœ‚4 ğÌ*dB (_ÏâÀ‰µ,ËînÄÊç0ôÛĉċ'wCġ_eçwƒÖoœ ²6ç,TĊnYIŜ(Y JÏ/)<Ħĵ…­VléDÍ0%-nÁŽ)¢áí4²Úê`îÌge•áÚgtûUĞÏ1Ĵ;|ŒHpŞS›ßY¤8ÔUН=‰'œÉÒmÌĴèçĞĞŝżtĝH„|Ä"OĵżÇú|}ħÒù‘‘'˘F£×"6I˜Ñ(¨ ¸GT8;¨îǍCĥ‡2Ö(…ŭŜö;0şP‡Ĵa­bá6| Iùz¨Š9>kğîsĤ”0Ŝ˘òS bùq|´ÊèXusAó¸ġ]ÑIIJèLÂĈ8RX1#§Sžy䕴Á“Ĵ°bCŝ|´Ó˟c·‹ 89ùùÓWއɉœ\Ħ{›H‚§ê_F–£^”ûİ>Ё”/Ó ?—ü²#˘Ş%UsĴÔ4nçïÇèyNyVg âèù¸Ï Mô„!u‚v”ŭc›,àĦ_CÁ:|‰ÎÀş ‘M çOsËRG8*ĴñƒĤÒŝĤua˘ 1 hgŽŒoÇ× S‹‘nNƒ3ˆ‹ĦÄxˆ5%á ÚÁXU ğÄafÒEĤiĦ‡Ĵ²Ò˜q@Á} P¤ j¸êşS */‰1”SB˜ LŸx‹-Bƒ;fĥ6Í>ı„nŞéysÁñ¨ĜWms”DĈ¨~‰ü#ġ?'—•Şġ‡ˆJ‡‹ é!îÁ5ĦJ€Ŝ·£yŽĤµŻpg¸ìġÛq½AĤ[,‡ù2÷gRPĈ’‚$DŠFĦ:;â)ÒÖo:Ç8œ0¸=i.Şo 5ê>X°áUĈDZéµ4ĤGccİ“FÇCIJÓJ“D Ñù - ~ġUUݰáġ³ŬĞ>ċo -‚mv†hï×֑ñӆĞ7DzYfßpĦÁù ­tÏQtË£ŠquEz%g`yƒ¤û•q áU˘é["³li׃q&,ċ#Éx–À!,/“`fpcÀµD0ñĠ'CvtiC„9÷ £†‹Êƒ…Ò%3éCLAâĠŸ…žòúˆÇ„<%˙İ*3Ô0ŞÎVYGŽżÀ›ÇɆpŻÎ9Ġ‡ċaXñĈŽ÷,]­İ3]ӌk<ġ6‹:­f`|mP 4?tóáÚÔ醖xsN£t8Q~µf  !µG–Z­ĉÊ˘½j!µĉè}Pñ¨F‹•kˆ]¨Zr6i]¨ġ,H%‰1ô” iÒÌÊÌgNÑC8lë £œÒÊŻĞ[pmıVĠéÜm7]wݵeCŬ+É/JíŞ9Âċ‡R'†P—áĠ‘Pĵ†ššátkċh!GN(bM4ƒĉ‹ŜĜBD‡ĵĠñ†ƒ: ,„˘Ģ£ùW çMAĦñ냤vü¨vĊÛçµÓµ$³#²íËRW^­Cu•UZwĜ£°Ĉ36€eÏÀÂü÷ Ö9Û·ùk@âáTĞK´}/S2ÎĦñ$Pq/TáÏ!DŞUgĊ‡…Ğàኺ.ea„,VUWL ô†$­%¨\*ĞK‰#Ĥ$EÓM ¨}oĵ¤o^ĈÉ[{Ó½şnˆ(Üc‡ÑPQ>ŻzÂĠàˆgŠ@LĤÍÚîk)żó}:[+ĞYVà˙ş†ĵĝ‘:ûËä8• ?Ä·• œíNUÍ÷7‚Ŝ{3}}ôÖŻ†d–ÒâĊe‡'ŻLĈŻ,fÙFĴ8a‡ E1˜5VbzÓ<Œg²Y†^EĴ ZVb6buxu*e/moĠ€[ 7žƒk“(ìҘßĞçLİÏê;ĦXs‡NéNàd „(Î×mQ£ċrËŞÒ‡Aâ"Ĉ­{ċÑÇÉw”a1 ò³ =g,ÌœVĤ6kçáñ??–ŭmW`ž"  !Ħ|ÑNQTż2+‘5ÌAÀœĠËATŽ/â?˘$÷âwSc´S#C4*ĝ&ÁÖ}Í‚“" aĈ”È6IumşuŝŞ>U‡çŒŻEsî'ËOƒWXb¤ ôF):0Ñ%W3½pšÛN¤T–ĞĵgCĤœħU2ĊĊñgUx2%k<GŽ‘pg„÷e”ĵi%g€ˆG<=uQ‘B[+ŒfoMòW…û36g]RÙÉh|)Şg,è Z·ÊaÒ)…#hbì×Zƒ:´‹ÍKƒñ‹¨;ĊRŽ+fČĥĠîXbM-bÀžéÄĝ˙‚Sû (Ĉ6’g—)zİşÜTyY>Lis™JÓpĤìH~£‡8Xñ£÷ïjgÌéAî,ĝUGֈ˜1Ĥq–ô2X +gçĉ­Ñ`µ‡(”Áżgàıİ#_éKġŭşUU[ñï|pµÖµ0]F‘Ól?â÷Ŭ>YqA¨AĦħŒh)"¨14›ŝL {Ħ&ĊUwñY™yLP£Òᅧ”WçĊ³ŻÑƒÜœ–Á%€Ĉ…°§n·ç ‘‹PéĠ…^i ‰óĠGp ùş Ĵñ´Z}ÓĠœ \cgv¨lXiE:ĝ,‹GÇ_ ŞÂ YÒPŜŽ:têO‘$ÁhÏ, ‘à!·t£Ŝóı‰ŻĈ„@Ĥsl(jáÒbż‘AäÀ­!ö°n•# WFç,^áȀ …ĊAI5}'XÒD'àuDô³ëHÂ}ÔüyzFx‡l.şu!ù´$ÙbàQT×|PÁ£’u|Wħxüµùö”¨Z@ĝi~×ï-nŻß‚Ġŝ‹÷ŒZ÷Ä,²çԏĵLáÁ/ ĝ°†³¸3‰V”ĝµj+Ÿ~vĵ! oóá/oàġœÁ"ˆôpô:2ĜÀ=ƒçúùßÍÏÚe2vvh!i$Ÿˆ‰³]ğĞ—G^1û˙ :s½çç³NW g^ mÛÈGg:Ĵ K÷eZ:Ô’  ¤DŽ"bCáĉùBġƒWi3ä÷4W{”bjiî‹ÛK=Ċ2ËL`-Ŭcv™–`8¨¨÷HO"ƒ‡P÷™„èHĴöMòÀñYK‰òñ3šŒÈae³·&Ñ}=‡=AkC§ Ôáf‡‰‡‚*¸Y^^hà’ô·Mú+-mĜİMAàZÜôùw½žˆaÖqfüŽ >>›v²KtZt˜·µCf ‚ŠDϏ é”Dn™aÒħ<ûUċV3:v2Ò.şŽv€g“iŜWAgFjCĴħ%7Nhà_şQġ‹‚C7ûÙê5$ßÉrZ3Ĥ‰Ĉ$â`ŭzĥvuèĠn5râum\CêZ²ÖŞ:t” Ä˙‹żö·żxX­q/âÏŜuñ™žE–~ İ |°î$X`Š‘"xÄcC> Ĥ QvÊ!h„<ŞŠeÔÊG*•‰ĞğğĠAż‡‹'ÓÜ04ĴgéûĠú­‰w§o˜s0œÑ m‡9jÓ`†0ğ›Ê?_QöX!4"İŠdòµò *Ċ²ÖX˜ëS]0(°VAŽ˜o!Ñ*̖8Dt,èèèôTÂd8ê)2“ÊBAU‰B DE &x@r 6Úó½k§ä0Bİğ>ŝtàÑĈ–TĊKN:ġá³ż“·w %FTKHïßż†û¸Ij²ÈŠQŝ#‰²rˆçžñh1‚ğĤ‘`Çû~<f7`ĵĜ€V@`ĥŜ"`*E³çë֏Ÿ“ŞzùVǑîÈOUôÀ×ıÓ*—— `_,9ž6Á*p-„Ž@â@dÀ"EÀt~wÁàgĠE;È;éWı¤^0Ä_3­éíèiÙî(¸™S 9ı׏û€"!~ŝmŒ}B°ÇôCŭĠğöqpߋòÊ !@…@èF#·ÑùJïMçıœVtcrï]Q•zgğÎfûµhg7Ŝ<Îxċ†EƒD³ŝhCŞ3ƒô4ÂëEfZ=Ï"ı’Œìt&—;|'UÙñŜċáÒÏ ġx÷+e]ÑĠܲÎŜÊ2Μ,<ží GÓĦ£|ƒĊ.—ÈL£<ş2QîpíĦÔjéÌ:^eï#…?XÒ翉¤qxŸ†;ŬĝgDĝ(ù|j>8MÚLPŬÑ/{ñq|“ áÀ BÈx÷ıÄkCfœ, Úùê<U ƒ <İÑŜâáħ!żU!8œiĥQï„`ŬmKÓ|,8—ï€Dq½Íħ‘ĈA˘€Pü"ŭŭáí\Ìŭ^;ĝ OÁ¤~ïŠŜßñ֋:ˆŠ|üÚÇĤŞ+ß)ßĵt÷ĵ’€ıÍi&’.³AàDEfPZ$FÀÈÍP UF)ĵĦ™—H’Êî‘°*C q½ÎxZWÄŻÀ…€½î­GÑ ŒW›÷żˆàwñ 9ß ŭ@Ż7M Ê,hAĉ–†ìĈ²]ŝ~Œ³‡‰D÷L´2î.zĜšAяĠ3|´vÁC "ĦoZaşA_ 9Ì3Eü7FíŬ˙%Ĉ4$xM%ğ$‘ˆhßK_.%Tj¤ÁÙú~›‹ÚGè3Ŝ‡‹ßÇ0Ċİ„7avÈààƒċü Şğ/ĴÇßÁŞ >ŭ]¤M6‹,&8çOħc¤€rD (ˆˆ1ë8f ôŭ!€óŜ´êg†#äĊcD„ ĊVö46 DğŜħȤĴĦ&݉§Ôc*ġßżŞtö;6!1Ä.Ûïž4ŝGë&ă½÷xw9EQ҆*wĈ%İĞ*2zùoŬÑĤˆá ĵä-Oi&§yËw#X 6)^]`@ħÏ<ès!Sj9@’ĵ|˜4‚™M 9{µĝ1ÄŽyóx€”ŅrFdSž|Ÿ1¤,Ν7„KCŒ]hCIwżĤŜ›šN4·sèÑB!°‰Œ ŬV~PÔ1ƒ:E&ż;Úegâ£Ŝŭŝâü7”³5"Žˆ÷ß~|}ÔE#HM7—}0có?‡iÀ‚g9JÇ`Ĝ’Á€fRÂÄ0¤šfĴ ÍD* ÙìŬVHJ(ŬñÂÍâj2!2(£j#wĤXb€frôÈ)ġ”äŸ}ŭü?Hj,a áe¨Ù]ûòÑ%&&Z˘2L bożŬ €á(:DB˘MĤÑÎżÜ,C“‚IÀÂH” qǑÑÉʧ A¸<Êr’D„Ê’ħ D&‚iHŽ8äz6Ž÷ĥ‰Ê›ï­TÖ·ÙaU<Ñ$Ŝ|2Á,*(HJ²H>è|ó•!G!Ĉ "…ánpŒ.b ç->óµÁPĵ…BKR8²>\tġgjg&Ŭ;vwµŭ{ßK훇 ÂaФ2İGĠi^÷{—*$óUO‡ĵbáòX5ÒşZ\˘ġ˘ÂópĊ…÷Nß4şwl´ĝ·³ĤЉ§Ž…‡LEşĞ+TéŜö*eâñpŬ9Œ£Üß*\O âe›î<ñêÎxpt¸˘£Ğ hò;DJHÇ^ â³Ç Xúİ|ŽŜġŸӄ˜k­LŞ}ápCċĤ™tJ9×NŬ´›3u5Λ,)ĞŞjɈĴÉ-%°6ĈIBPPSK§‚p4qµ< ç7è}§áœ?Ï0ĉîó–=ßaaEsİÖ,Òh‘Ñ ıßoOAxç:•yglïI·NŭĵÏEo :œdE÷!·Û:{Ŭ6³Ħ)Bë…aэO ²ĉep~Ea ,îİU{9;Í玺HáF¸Ŭ˜Ù =çè§I£è3œFšî(g§ğ’_;gJ8GœfŻÉsÁ½Â;x$͇eĞ,³Ë§Ê'P ‰%BCHŒq Îx0.†ıd7IĴ²óĞ, ‘ 4Ì.#Mş1ĦS_Ĵ„9˙ 0 !8eˆ,í´t6pÔE²VĜM4Zàa¨iœpÜↈS ì½§M¨ùiÍa|:4ò‹ĈĴĴĈyÊh hüĞLĥğ'C?†—ä·îú‘Ò×ħ£§Xȸ¸Â“aġ"††êm%”ĤškJ²Ğ4U’zë@P™Á|Î êŬék k°÷âò(¤{[‚̄L*á`ËÙ6AQFLv³!]ƒ^ĵ̝Ž7CjÒKŜLü.—àÙ,sñ uGB$|mÒG“šIÂFìR—†“%Z“DXŭ;ȟz$|$êĞFŻh'ÄUE¨× J÷É!ìaĦL ;ÁĞËàÖ)· ?§>ZF¸an £öÂbÌŞ,†~44&ÎĤŠê](}ZÇĝ”7 Ĥuu?gÁş 3ĊDĜ2íŒç>‘ĉcT1$¨ÎiĦc4b¸Qùú7 Pŝ}ĊGLäc]-QñĤ£ĠC\Œ(8RJıDUġ…D8 ĦcJ•ü‡Ê–½Êşryv߅è€"P Jäˆ"œ †“ÈÛóŬ•)ŝ£H³T?:YÒkGÉ``&„ˆğ…’G~ûèrë$ˆ=yíĥžfŸ4ŭÀӞ÷9DŜaáċwRñœ6òĵvÄ:Ö)ĵ·‡7›’ıŜWO_:i‡• aŻGt5OM:Êë6¸•tž¸p"7ŜVm_ş@ò Ӗ â|(|èÊza(Ŝ„ÁŒ @ˆ‰‡‰I–ȋ ]VB“>a ƒC"gɌé*ë]ò„+4|êèÓ dN‰bfOvL{"<ğ…™v^+‹ ˆÜĥ­ÓCöކ†Ĥ†“|Iä…Ï›ÁĤğCĜ  ˜ HF`°Ÿ­ŝx`ğ…+eüCšWÑ*HhcpƒCld„M:"Ó6eC3îrƒİñ­Xi… ÀèRQ ]"jİ"żä"ŝj ‡÷˘¨)ŝz–Z¨Š™€€­*‰ŝ"äŠ ĞŝB(R @2 "¤4K¤šĥ4RË)&Edl4È3,À BAħ (’Œ!1"¤R, %Sm‘İ5$ĜµTÖĞ!QHİ QQŠHI%`@ĦQEiU–DR‘†B•%J)$—VYjKJdÛKD֛J#M ,B²Ë0‹‰i”¤ÊÔ­)­YĥÍ+Ì­•hÌJ•³M4²‘­LҴڕ•Mݘ Q)•…ˆ•Q`F5FÊiRm•*Ò³JVŒ Ò Š plˆ„„Ä̙ëĞݘI$ğı!JI!™!!™YXR’HIJi¤’îşHH–XI&f̈́’™$’IĤ’JJ„€š”Ĥ`:Ġ½Rjġée†fd’iĦİİ&`HjjJšhI™™$†Í…J…) HYo]Í4“3iµÚÚŬÂK,İP %ÚµÜ$uÜ3$“M $’BB]vì%×WP’I uĠu@Ù°Ó@3’I3$Ì$3$Ì$’@vêêI f I!eši ›6„şî:×] %ൕz‘ ĈڕÙÚ6ˆs„kV×µë)A×r”‘ŬÉ33$%ŬÌŬÜÌ É)I)]­­]t’I$$“fÀ’M4%ÖŬn²I33 3$Ì’B•ëĞİ™Jffġ×JR@Ì6l²2@̐ÓI$4$ÌÌÙ²@$ ]ܒM4ÓBBI$“7uҔ$$$Ó@’Ùl*T$½ïuÜÔĠ×rBË3 ÂI$İSTĠ SZkJS05533 3$ÔÔ$6›@’I$5šÉ$ĥ­¤’I$ Yf`=WrK,ÌM4 ,$33I$²ÂI ÊP’I $30 É$$̐ ĥ­k^­Żo`KÛı I$’f(I$™€H(IlĥêêşĞ¸k5’™’’f)!!Ĥ„…)˜H Hf;ı&šîä$„ğk·`ZZi ^WĥöÌÉŞëĤfd” I$†e)Ĥ”¤Žğ„Žşş€!™&d™’h÷—ĵÌĴĴ$IĥËlİS0I$’IJWşI$™$’I%(jjI™$”Ħ!$%Ĵµ´ÚR”+şYf̀fRşĠmu $“2”vöêêR†Í„™™––½kıİİ™RĦ$’$–XR†aJd… HfR’jjHYd„™†e–’fH’R„›fĜVVI$†`ĤeJ„™…)Ĥ’R€K½ĞLy˜HmİĥĦ!˜mMİĤši$”Ĥ`fHYa™Ĥ”¤’HI!!/uMË ÀİP$ÔԒI3$—uÓ2BI6l 4̒@,²I RC0 4$ ÉfÉ$“0´´ MI$ $3 É$’”Ì$ÓLÀ$3u×^ğ„€fR˜I!Ĥ’ffI$ši™!!ii$†omnîşèe(I $”¤ğ½µ·µZÚ/^’’–”Ĥa îµÖ™„™…J€íZğv ½^Ú­ĥŜŻWjĠŬ’–&Ói™$„™!.Ŭ’fHalĥI&`lÛ­vì̒BI3$3$ 3M$$’I*TÙ²@—ví×µˆ­W޽TÙ·ğ[µ™™„’:íĜI$™’d’ë¸HI!$–Y$„„’Iee–Y%(Iii´Ú$€I!%–f.îdši˜–›M¤–Y™!!™!›ĞVµÜÔÔ$Ì6lÌ3²ÊWnŬ†`HI&d…)!$’fI&a!!ZÊÖI$’TŞëÓŜf”Ħ!Ĥ’%)&e(HR›M R…J]ÌŜ"‡aU…ƒB%µ"( RI$$ÙħíëLÛV·ĥöÉÌuZŬt)KM¤’I$ŽĥÛkuÒI$ww·] É •$’@${k·`HR’HlÙ$’fHfY! Ħ%––ffIJYf́Ĥ$…)J’R™’fî :µ×@ ,²B²°’I33$2I4×]À*T)IÌ3--0—]t$’]™RIUÀ˘ Xŭ>ŸO§×˙§ëùÛĝ?óüz—íÛ·íü:ÏÒH$mêġ˙ f}¤9ëŭ1ĝËy™ĵ÷w˙ĜW˜ß–ô:eêùsϒ‰ŒüÂ[O?럯?ĝm°áhiR€‚aƒhˆDŽshêĦ@ Ü÷•úuÛbwÇîëû%GĝAkô04˜Â’–’ßÉ+µċˆİ…û´½lŠ%Rİ•P•&$elÙj[I”[bĊŠYl‚a9X§á}óŸË×çÇÑ×ϟûg]ŝ}g§Ç·Ïéö߯\­úyo×½OtJ‘e ‚ZŜ˙D?EX{öġn/ċ˜k$Ï Ä\|zž}l`uœžƒ?µNÑ%zh”ESĉ6gsÖ?:âg{aŝÏÛîvĠċˆü×ìGs$•Ħ-"¤ZDµ`¨•P˜üHi"„P *ô”p€‚a·KM`†@ÈvŸ÷€](í ŝĈE1IXYJVB MŻivÒe·óĞk•lV1i6|ş×(£ä×5hÔ[ĉmʋA¨£c%\ĞrĊy\£j(ךċc @Ò9˜K JjW$ZËVÁû~ÁéjY¸aRîşşD’T–Ë*ܒZ––­ÜuRà’ÄPˆ ˘šŒĥ„#ˆ[-–ċ5tşĊZî˘ĈP :He .B♠”F0–#1¤”L+E$‡ìÙùŝú×éĵž“ĠY$ uçoÑ$É2˙Ží×ÇÛ;Ɉè×é Vž9×'/!á”4LAŠšjaÌ-"ITıÒFƒ ŭˆm’MD‰${y~_ĥzjùŝ?]\ïÜY Xòc÷ë żs5 ²8yĠwĠݽ~uġM0 DˆİŠ˘˙—î=~W/\ùúû`‹}&•:aŻÖtıû‚>J;͈¸=ÜçËÏù-"vB÷ mĵTPDŸOûp¨ûtQ[TġİhŒä’qċÁÒÎŝd>ÙóòNĥÛµDQ@Ah61&Ú(£0” Š)F††xם³É=ŝ"níì*Búĵûü°I6µñŬú$Oƒ~ıĊI_–ñöÒ¤µĝtÛIjM3TÊJÔE’Jˆ˘Ä”RL‰ ¨¨’ÌŠ"Ĉ²Ai’˘Ĝ¨Š$´Z’ħQXÛ&É2™ĥ"ħl›7äġêĞÊJÔ[¸µĦd4,•0R†p\I˘X£íñò÷÷ĝiñóûsÓß{Ĉo׿á!ׯÛ<|ŭŠê²â¤DA  ˢ ‡KÓş0yŭ˙œ˙] ŭZyĝ7Wĵ=Û Ç ô(ÂäG´#Äh½°ìíßߨ‡Ÿ§tGȊܨŒ)1V˘Óĝe­d™d#‹Qj(­1@İRÒ²Û)6ԕ“iĥK0- @°!…{|½OÙaşïóżÏĤqóçnB;I½]$‰ĝ ’!ûT‘DE)K­ŭ\|³ï8;úžw—bßwu4§ż×·Że-àsİD~ï\E÷oÏGşú]¸á4ƒÛ^œ"½ÎϏ‚öKPŸ9 +RHĊ‘V–şße@’iQu½"’B"0EZ˜‘RÊeN Şa’ĦjĨ‹B˘˘*–T*š*(V!QT•U*p~_5ĝyĵÚχŻÓëzó·;]_żyŻGµŞiDT’ÁM)áÓsÓ·Ÿhèè_/żİo€‰ĝVI8Û\e?sçĜìuâĤ?× ”HE¤²THSK€¸~" àJ@Í(•)QP[l˜Q„¨Ê’İd´˜VWż·µü}?OvŜ_§ÏÊ>˙/ċŭ—ÏßVêß<÷Ğô=G°Ħ"‚a½’HC³é? Óo.=xŭxë$"#ŻQċR!B‚A‹7ä|ĝùzĥÀÉF›g÷j´~È!זñT‘>Q*°26V`0ݤ²HĦ,JK Dq`p‡ „!FŸd–FĴU™ İRÄB,.…%0ZXQ‚`@dĥ—P&Nʂ"{|ŻŻĈyü~/żnGÇ lŝÙ^ÓĠ·ĥž;UɌFŸŸÍƒŠŒ}zÎŜżĠ*ï÷Ú"IM•"‰ ˍé‚d1`À´²…îSäğÏĵŠ{~ġóĠôĝx½ŞiÈİړ˙_·ÀßáùsóÍĤ˙x‘&§N}sϜ2§•ŭË­vü7ÔEĞÑŝ6t¸€dXx¤2™‰e$–B†2bUP)f´WJµÒĊSJÊWRÁH”İŒI0RŠ™cçdšI²(’…E‘M e¤“Íöüuï·Ïçéó­s·Ëﳟ:|ĵ zŒ>ÇŬíÇt_÷úÚŞŭAż–Ûëa½×^<Âûî”|Övż!óAËzŸğ4z9Ç*ü‡Â"7*ŻÉÛA’…ĠŻkïĠkáĥòınJí£k4Z‹idEh L!WC”ÄÄ1VŠTÉ"‘T” İ1˘L(ÇËÛċ}óíôòÏ~~Žŝ½âx/£B.a¸‹ƒ‚ÄÛp òޤ ‰Á=GÒô锢£và}Ù`‹f a 1@ĵĝ@@Ûŭż0üßâÀïÁ ?-Ó ÏbĈ#ĦʧŞ8 !”€ahE„ ’’9€$œ"€Ħ”2ˆ  XĈ4à# Ħ“ ¨4j!R„¤V0bĦ‰–!ĝŒ”LL:1 >@R½ż?—§ı>D=iĝìĞÇ£ù~ËûÚĵÍıòx'‚òĝ9Ż àñ7ù}{úïÈ$’^ÜÈdû@„1È:éQÈü}¤ kò {(äp˙tÉïáÀĴy·ßÇ?†ŠÛ ûm@ŭġ>ƒ(B _chİMj:kmu²ĠsUğfĥ¤hĴZVU+LÀB0¤,&& AC@²CAD£˙>áÀÒ¨DĜ•şÄ°Š ’È£R D0” ´de€ĦG ¤d %Y+O?”?·Óòó{ü<{îŝcïï÷VQb7w÷e^zĝ…„(ˆ`ôúĵŭ|&Ŝq·ٖĈc/¤ĝĉ”ş ûnE|˙#Cˆċò½ n{í„Yû2Ê<žÛĉNÈÏ9Uvxßn£’Géĵŭ­÷£ß³~İÇݚ}ĦûçŞ²Âj‚$İÌ0¨§3*d;Âħ\V†"Ɍd”ŞbĦˆ)ŠeiIR+]%+nfZÑe  aˆ…$XBU j#ÉVBŒc[š˜o2á0V…LD…0`"0“DHH \Á„J dɅÙÎÚ"L›@FV,TíÖí**)Ċ·!%0É0˜‘˜Zµúqéú}ŭsˍt:˙>3ċáċPWi‡¤HŬ§Ïnž/ÎAWíÙàè9ÇĜÚñÌuïĝ\pž,}ĵ‘>AÜÖ4CĴp B3(ŠhTĜ#B6C3(@@HQ)EQµlk쏗×ßž™ß‘A /×ċ'é>P²şúżÎ?wÓàŝÙíŞÂ"<úı/Ċúê `À 0ppAİlJ˘˘­Wà•0j™Mž=˜ġĝùpŽhoá÷ÚMošmo“ŝd+•FËmâdˆŒjż4 ŝ¤7bJXÈT°U IÖİT­³E-KijÒÚ[SfÖÒm-*˜4 ™WÏëëġŭ~ë>|<À> zBÒ£ˆú~‚z¤Qސ¨ ~O öù* š"YĜ#òP Üó*ÉIèEŠ Ş,ˆĞKEC$bĤîĈİ5 ’`1Ħ0Já(‰Ĉ´(¨Š“1‚ċÁJ*’Èšd4àŒĦŽ6´dFŞ-MRĴË--‹)L˘—DAÀš4˜!ş1‚Ĥ2—î?"ĝüô„:~>Y<ĵ(”ˆ7ú3İtġòĝË—lšğ@ı@ĦЇŝ@×ô(ä‡VµQñ€˘?OÙùkż@ }}Âĥ˙awÛÏßż·ŸÙöĝâ>ÖTTвI†„ŭ_ñDžÂĝH„r;ħ ŭMĦ ˙˙×+²4† xĦğy°ĉ‚Dáó¸"Ğ‹ôñ(İİššfĊQLĥßGÑF#i ŒN? 'q#CŭÄô8Oġ7?×FjŽ‹Ş÷6²E*F¸÷6ÙmZx/ĞsŸ\ƒCŬäŸ[^…ÜùŜíoŽŽy7#Ï|oAqò'xŠŒktĤ'ĉ?7ĝ“R'ò†ÖtÔIÄwžÒyvĉÍfV`6Ò/"ċWĴCbÉ|™ § yŝĈĥĜްa*Ĵ•¨˜²jÉ;yÁß ½Jĝĵ™| N M ÷Â/šä‡áÒ/†|œċZ‹”$(&CĜè{?Sy;Êĝ?zĝ§Ğiî³éf,Ήù<Û?7ë˘ÔéÊJġ‘?É*AÔr—Ŝrè¨"&÷Àa9iŒLDCgyA˙26UYġzûä@{§§ÚP§àù4DuK:ÊYkÔŝòxdŸq$"#ŝR|Ċ4 áî#è'R§bWç,?cĉ`F@~n)qĉrYGÎDäžĠŝi=Œ6èцä‡7ċÈf*²EXġV iàÔ úD&Î[?úví#àÈOı3ö҈~d4–S’“sÒ-Ğ™–ġJŻlòÑŞí´ÛWèRż€… }‹ìĞ0ÇgçÛñË#‰4 D´D+`–ÀR’а£,´bƒô~M?r<¸lìù½{,ŞĴĈÍR“*hHù‡°q°}B¸j{1Tò~NûÁ'Ò=ŸWî’#ĝŸğıNëAİħâI"CŻ­ż'_$µ>ï“öE2"I_IVSıÔŭè÷uuJüĠ>R û=•_S ôôû-}?ëù (J amU>M¸Ĉf‘´'š'Ġ4žĤ6ˆĦȟú>RžCà ô~ò"áS63J1ÙV†M˘&e ¤XJ!…‰ "€JE%cSJÑmš›L•RÙQ (Ä S ‚B´“ĥ˜ËSmJ$˘Ò+)-#+"„,„JHÂÁB³) Â)ĠI  5 #BŒH1#U,Ë,J­ĤÖÙ˘eAX1$`! $ˆ6JŠ0`ŒF£AH’ˆ“F”ÑIbÄ6J„ŒÊ&bL”i#0$‰ħ3“!c@˜˘1EC1£C1f%‚ŒlQˆ"Ĉ#LYE‚0hÌL„lÉ2AD˜ÂF#BBlZ‰4C1£1AX£b5TR²ˆÀ°’ިëDi(˜F­]µÚĥùWÔÒOVz=íkW&§Éî|Ġ÷‰U´iĝ+Ġêó<]’>Ż…ò|_$êgém·2­d°4˘K ĄÀ@(iLĜÔdٚ)iÂÜ•–ÂiÂiPŸÁ$óÑÔĝ#CGHG­6–ŞX²Y#“ŠXò€i2ŠÄÀ)ZI0‚˜Y1“Ö:='ÉjÌnSİ÷zD—ĵ„’M„vĵ~k |Ÿ4êÜ8çùBŝ¨J 'ï…&f÷öĝ–ĞŬÖNîéËSìú$’|=Q´ž’'r{ż"yğĵ„’OŒcĞ£žy!Ç2ÙCîûÇïFÎòĉ"Iĝnò?D’OŒÜñgĦNO2tŸŭğbҖÉeWĞ]Ĝ_Ŭôşù½uj=׃Š÷jġë¤àİ>°û½Ï òZÜKŽMÚ„DzĊc×£1„ Ô,!a0Mòb8ŒHöhwjI2%’4áˆÑë'ë8Ÿğô|^‡3§[>‡‡ÍĉÂÙyà“E‘G˘v>QîÊsşÌÊÉèh¨ä艏à†ÒL{‘E*Uˆ&(ħÉÉÉ!XNŽH;žïóy?IáŬŽŭމ/ĠµÖş¨ÛĊŒ˘šû_L~yò[ó÷×0şÖµJÄpÖŞ5˙l@‘ëMː˙žhÁ1UyÙÔëf]Z˙ıÓGıŸá{èĉÈĞ“,ĝÙüĈ2É!Q7a!ˆ”HTJHTHGûU!‡˙‚˘şÚOĉ‡ƒÎI"IOämyf\Ùvr ÂpC`Ÿ4òJà#û‘˙a‰ĥ‹1”ÚCËßçï³6ó`¨`ŬÒ(ĝ Â!YfYGòIRİ’2Üt7wuÌ(uQ\Ûĵ¨ce’67*ŞHŜÖUżj–U5YP ÂAÙü–Û%–ÜĊZïùıAtzċ—˙7l§ĉŬHYvuTpİĥPŭ‘Ñšá€:`PĈÂ&i·á‰Oĉ˙ ,Äâ@ù ¤ñjù0Äádyı87I<ÏG¨İï ŠI]ÑcÜÒUĞ#tR:•1bL™$÷sWħíçè·/ĝVLĤKç'wWy>p‰NO/¤ċê²%†€êÇ;˘8=ğ#WĠ_sç6BI™%j­—…1^5hĝ' iĥŬZÖ5§ÜJ;AE$‡Xe0&µzDĴ6Nc赌| ñZÓĵĉX)gÌXÊb„=e£ŝOXkmĞBŬ!6VüpÓlŜ—䞝/yİ+˙òO;şÊÌJƒÎ5´téá²ÖI›Âĵc8ĝ"@ˆ˜‡£)È.í BuÜèëŬŬÄ‚[YAÎíYèŭ§ÂáñȜ‡ĥ5eÙCoÎÌÂV8+ĞĥÚlgúĦ+´RúcaB”híWQI]UUŒ˘$2IuE2ç ѕhK˘yp/qڏ}áö‚‡dE~h"’JßB$I< ‹(ô¤ÊHHĉ4!kGÖħĦĠ˙´"D“™‰Ö–ÌX˜Áf‰˘ğ:œ$Ó nµŒÙk$Žî†•DµËf:T4idMb–\əƒ,NïĤ¤Ŭ&KŠÁdİÖÎɘîuȆšLĊdm–RJ†Qá/à§r bŞùP‡]ß“ÏÔo~‹âïŸSƒ*ĜPâ²Ġċi X¨Li1@ H,„ xù1£µjR­˘l0 %‰ ŒÈ9E1ħ3sĦ7I&ä˜ç%³—ÌGFÓKá!‹<ĠUÔċâpÓ%ĥ[‰*•7JaG2pYOfĤ†´IĠ\îìêpŜ'ÁŠŜm,²§ Èèà„lċäwŬtÑĤóíï$!èyşĊ;^ÙÂîë„~Ĝž“pŽú²8#£6ĉNR˜ĜHnŠ9وCî6W2Èŝ%ĞWRo4—‘Ä̍4“Ĝ“„’'‰Ĝt’~eœĜq?Ÿ;ÈŜŠîcĉM{Şß&v.6<ÈÚ·ŝ-OüÎHFcG†QÒ˘û ÓĞħ¨nvÄè°ßf—J›,™‰{I#˓RB"=a19<äᤌ…#[WËÒ ³Zß~rIİ$ Ë,µ~ƒUÑ5îüsâòš)Ħˆ+’JGáÏöR°·f7“›KIm+g Äm‰éKlTpÁ%lLĠŠ?=ò\ÄÚH$7òI8r†é+İ1äÒ ‡ğEŭUê‚"A!&IŠ‘I(<ŽŜqâkúQŬ˙Ü˙²O%?ÎJ–‚8|c³ĠŝG™è÷İpŝϙ7vóùfv­.%j²Y²¨]Ò.ġHöÜ=°(èŝRqĴû’”ĝ8‘‡cá"ODݚżíV²"?–Cò§÷—’‘›ïI*ĢĦRĠˆŸ›M4ú½M8nàż’c£#×j´=¤ßĥèߟ\ÌĈ1ñ'ĠŽŻïùĞäŝÈlġrm!ġ?V87&ERvž…šòx’nċé ?fŬÂĤÔU|SàI6&̒NÏv޲Ŝ^˽TĤÒ­I_­n‹Q*/ĉ³á'ˆ‰‘$›†I6ïeüQè!êžİb)§ûZĥŜ¨uĠƒ&ÁYH–i˜’D•_~UÓYšf•JÍl%0"eH€†T•É#ĠUEóÑ£–ÄҚ#DtA ĦlĜÊè\ çħF€à°€›¸mWI)6JˆÔ0ċ6Hy,“ĦÉ·6ìŸ$Ċ J=ÍBG/úĥbGîÈOFèI*W”Ÿgìï ÜGíèF×ñ—1#&V)ofY”~ìêĞĦœŞ5E(´‘(Zbf’]*N…gŸŬr†›˙û5çjŭEä—ŝüreûœ+J=âp,ġ.+]yC‡’Ò?Ü çsŒsŬgçšjĞ&²|,ĵÈÀq?&myXi´Ä›]”ŜN§fĠI[:‡²ôi·+Œw?1ĠI$ˆY=z­c½*œS΢\hÔÁ´Ò6Û/Ĥž:Ġ­lßQ³s‚‘Ôy˜2<ż|"ĉâ#Ñ1ô8Ÿ‰‰ùOÎËıé=•Ż1÷OoWš³Gàĉ6{&ò>)³ġ2Ï2dË"Ĵ’ް×Äü_éñjpµñŻÑUÌÉ5?Dîè²A‡Ôo$"#wÁ9<“ÈäĜ¤yşĜĥN|?,[·ß}7Ħŝl˙6­­ß÷Í~ô›8ÔÈk³`€ŝÂÛn…clñG^5ó<éĞäĤ6›½AU@ĴEŬ—$èÁ`ÂĜ“b r[Ub“š ŠRi)ôɤ0<Ïâ w=†öaş€ĜC·4 gĝ”ĈĠ3FÇWëÚżÈò´nJhTl·ŽŞ Òó#l—;hëE5MސĦ·ú)ĥg˙‹·ŻżNú·Ûˆüf³ꑃg „Ħ lÎ?ÖcIŒĥż]ĵˆœ/ŬF Òp·qÂâGòeFĞ!Œ)!‡é+ÌHùĥ#Ŭnmôhĥ64íħŽÈ€³`—vu£ZĈ¸3ĉ£Ö³ŻĴÎĠĈFŬށMTĴ•.?ˆó!&=ٍ½FmmÔĦ6tg†aĤ–U†ĈÛ‡”bV†Ġ~dk•"x–7žË÷·ƒM0™̨êGde0޵ ò‡Q÷Áž{Ó¨ĉ “ĵä§N9U?ħ·F 2˜V Ëa*lDìT›9ŸgċrħîŬkħ-gëmÓı˜­Ħ°òa×=ŜnUSğıq9r¨îRuœÉÙnh|OAğrš$ÖħÔ/fœÔä-İ0vrĜŽŠ¨ĤâWaŻà†Î<(]vZÛ1рDQv%ú™B(ˆ˘Ġ5!ë6ĥ„!Hâ†Ċ³y[ÙŞ½z›Hoog<4ñÚÄÜo1dÚħİِe…Œ15]1PT҂Ò4¨Rd,h`²Tb10F6‘[M°ÔFLF”‘ĉ£›*I´Fé7D ¤ĜwċNǰp?˜éċuċM)’ŸâĵY_…YiS–7göÚğ/J)YĦp³K/èŝÊ5 òé{̐,‚a'°¸=*ĜfŝmníġŝĝäĠj‡FĠ‡hŜ{ž8Ŝ? M4H|Oè+áážqħħ‡Ouï¸İŸ³Ç·Ĉù{žLgO|.Çe*›a§ĴRœDvT7°iÒĈġmlıKMc .IĴ‘>fŠŸb<–LçÛ3ٓżFe•X°ätiëçŒÌ[ġXÖOmrǧ[vŠÚm@n£ LÒ`jDàżÌf£²Â1°EéOƒŜAxÇħُÖ"À-ĝ–iĝOfwcâÓéŜ­Yġ“_W_Ï-‡pT+⊓JĠIIJ‘BP8ôyö( Dîx =ġĝ™bxOËxk.ËpáQ0k…T@ÎbvÛÙĴ֝›8貽ߔžEpu>RltÁħ˘G˜ġOĊîÙ'Íġ5k÷2L˜dŽÉġ½ß4y´q6›#EƒÁü˘ptr£Íï“$2ÇŜòħ4ĵ~ŻÂ*$#żb7$ùĈíĝġњóí:àmbĜq/Á‡É BŝCfduGòŭÏżKz'ȝc˘Fè;*}aĉû³Í3MÓßç’1‹'&–Ú\¨šhMż'›ZĈ[Œ}^Şúg U:“‘´#è?'žy;6jëIwÛ]×ó#N],ŭƒ_HD#%P²u™Aזqäˆ ‡‰{Îà%ÈŞµ Ç8CbbŠqûġŽ33,²é~dDôTÀ¤m4dPDU!Ü<üóĊozvY˜uE ÷½ëQßF˙Lßc˜ĉ’dn$yr†Ócŭ„cڟ™ˆĤ8Ù àÎXʍ³šUĦşüƒqÖiB‰‚˙NÂmP~Ïï`e ĵ„xŝĈúxü*Ş)³Y$ĉ×'EéŬ{Ž­hèÔY–ċ8òÑŬ\8žÇ´ˆ)ïCĠgé<­§³U{Z¸ŭ—mÛh³uMĠĵwÎùsó9%Ŭħƒàŭ£ôrÙ(¨%çxĤ†kxguÁp{!üI$…aċ˘nüXŝ&Ĉí7cŞ–!ùި#ôXLT+&+‰˜JûĦY&4 Tİ%|ÓZF#™•‰VO’tlz³ÌèœîµG„ĞğgĞŭÙîœt–ĊŻ1nf\δìrħ÷W*µ¤ÄÔֆş=NĞ‹għÏĵğnV˜‚• £Ù ‰:Sŭ–ħlùÒü³üĴ…½GqX&Üs´t6n釙:9(á&¤™öOCќ'ìîé'ĵÍĉyëLћy&£Ÿ²×Áğ¤î‡—Vñ<Ó {Éë­Î}íÙ; y{Ü͞\Ú²Z>.cZiÈq˜ŭ֚lMˆùğ´tâ'dġoÒÂÊCNŒeoëwBiĦÔÒ×ŭö˙ì–mÓuFlpàÙ84Ŭ²Gi!„:ĤÉï;{´ïXë6ZàOİS´és[4ĉÛş(ޤRS¨E†Ì1.ŸŒġCĥĥıa•Öĥ:5£F˜œ$ü5_{’™ÎÖŞÍÏĊêr;u“ÙDH’[wDz:šSÜrÓıGkVĵÜ;ïó~³ûEŬ}ĦñÇ1êB%`„pô˜³’ÄIä÷8„yğΉĠk8s·ÏœÌĝ8ċ½Qğw.y}Ÿstìt˜‰ÄHˆÑï Š<|Ġ§à̲J¤8ğA^Jʰžóĝž½îOXëÀŸıYGòäÙù‘€L€L‰R’XĜ}Ş×ħĉêòë½ż [Ëñ?˘>gäŬZ²ŠŸÄmJ£d…’Ot–¤ŽVJ¨iüġ!99>JWôLlÂj"y$}„B›@܏dÙüŞŝñÜúÑ8İjGˆúÔy<ûP‚$'èuÑM/Ġ‚ÖTŸçNġµ ½e†ôË&ÖG`‰G?ĉ˜Ó×TÔADù½͢j‘‘(8:şœl7Šb ž')üġjËë’;èĊKŜàF˘QŜwyœ’è…(Sċ’^·VÁ–ÛŠ. ċ•ÎQİĦĤ†iQc³d:… ‹ċ _˘a¸Ö“ A¤Ž˘×ÛË|ñra‚bzĴÚê0XŬYnĥäÌM;#dlħ)&)´šZJ›ĴÒ׈ÜÔDĜ­Š§gr§ŝ­ÜEOô$>&‡ûЇ›âŠ=ÉYT´ùŠœÉċ ÷ïöxYwµôUÛyŻÂĞ•fA%2ˆ7JÖÜ ĈıjċEV+•nljħµckU÷›p¤ÙK·,]Ŭœç äıÌN ´ċ‚ÎÒ¤‹¤ÀĦŝ(F ÚòŜ•bR; “6İÉc8MħĈ'pŽRHèˆ%Ӛ~%9~GïĜMċ‰8’†A<’˜ÒŸhĦ/^ŻğôO§ë@š×Vçˆ\ˆ4£Ìór]nîKĦË Z6ú4`˜Ĝj&§)87tYK?Â<ÛĥY6É÷1Ârē½I°Ħ *–CT‘-„e$2£.E=I2S>XeT‚‡2"ŻˆjL‘ĦJâG SL³œBğá”‚]Y*(‡€)Ü`!…Ùl˘Ú3ĉÜVĠFĠk†ÈĈ’š£óLŽĞ[ÉJ³w{mWBlúNäÑŬ<ëZšÍ~M܎ġe¨ëFT2Ĥĉž*ÔîŽ"Iğj§èiêí9ÎZšÖŸ!Ò#ĵJżd“Üîîh¤ŜHA‘Tö€nŒ#ĵX+„Œ7f˜cÜÈŜˆ™´žp;şaü+i$ÖÖ ÔUŠ"µš‰‰hA€~GħäpÚ?¤&Ç ’%{Ž­'’Â^Ÿ\™™Rı,Ġ²¨ŝİŬŞĥt‰¤èÓï'híŻVyjİÌÖĤĤl³C–ÒoC€İċ~\£ZiÔU7emvp¨7ŝ$C ŸŒtL‡aġYüÜtߝal²}ú™‡ŞvÈ47ùÂĠ+l<֍tŬ(m~>&™uOÎÑıĝáéŠċӓNSqĉ‘ĝ?R YPEKbG²¤_ŸĠİMAQI<Ĵ6Ûı‰&‚ĞPHx‡)²ô<ĥğ›7(kġi˃`&•ÀœhÈy`ñî§̈Y]Î%Qœœĝ#äĝ@ù‰Ÿ‚˘ì@p˘ÀQLÁˆá˘½DŞçˆŝġÏĝÙw”êAŬ×-ÛEĠĥk·Ž6ÏA·ƒg.ÇĈVG0•ġŬÍ.›3ˆ˜Ê}ްµµúèÏeŬ3Ż ùžĞ=Ê˙7÷7Ŭü̒­ÛÈ1Í!$íVàuÓhGŜ,Ÿ˜NMËôÒĤ>X_ìĤRnD܎S´˙?ŒŝĵïX ä`uĈĵmòCN7/ŸA³Y.GMJ)2#ŠÒ´¨ë—êüöƒ\.–y" O}8hïäž„—£SIĤ–rÓw3 Ùx|ĤO$³İÑĉ˜òĜèԕ;2btÒLlİÊJѲ£²ää‡Gmó™ĝ›Ê€ó˜’„B•ʋIùı¨< E’ÉRn‰1N 0$İdD ŒCûbìħÜOc…M(/ä0~ÇBÀ?ÒXÌh( ԏkáŜ@ŭñ?à. qá1ÏDq}ĉ—MáÄÜU˘žçĝv&#qaŬœĦ† Ô*ukÚÜ:şĠĤòC„nÄÛXÌ *?eGCIÑF‹$WtÚ­G³ĠċmŸ‹ÛŬgÇ[ñ6šğÛf+}4èO‘ú9i‹ö~Ĵ'Uy=kŬrXĊÉd§°à‘ħĉœcö œp¸Ç:·Ŝ9ATÒšÄ0Ïï%6…?`Ò˘żŞ )ÀÂ{Ċ”U?˜*ŻÔXuìYšŬġ€?ı„@ú¨‚D0Wû‘$“4tŻ:!Sä,x)÷Cv ÂÀo‘$î˘(Ż`Ñ}„>Mk)äîhğħóc„ŸÙ4S‰´Em¤›’Ž$LŒ‹ĝŸÜLDC£ˆˆOq˙‘$xĊ•ÑŝŽCŭSĜüÏìԓ²­àÄÈc$•'İbË‘ç!èR2 ËĝĈòêàáñ~'DŽ§˜?’÷/>áp>£²‰t*”)Ù6ÄÉL´è¸öœcî{Ĥ§áÙé=SŜM˘{§ÀÚiel²ôLü]Ŭ^˘!ŽŠĞúş˜u~öÛdĥ[lELR‘SG¸à%˜ì÷ûïÓ˙ÇúcŝNv#èÇÌ/Ŝ÷gÓÊ%…ü?Pž âż?ä$ŸóâĴ2^EŞNĴdšŽŞúÄw7E*¤”ìŜ"c²NĈĉż˘Y!l#(}ÖB}!ŝÍç²ËlSœlàJLž¤›> ùœ‰óê—ş¤°›5'dN:ɨêiÉ  "-$,¨°€‡Ê”AŭŬKƒĜĊ\@6?Ì>@ŸZÄRvĠ¤ÉşšÁ\ ­f4!3¨¸ÓŒIŝkAV25=;qbL"Á•‹=  $1bD~^¸•dN ,퇃OÑïËz´Ÿ|P‰­ÈÊ>Ŭ„fmÛ"<"3ëëgó,~ß>_žo×yòߊFéĜsŽ÷нnÚëĠ‰ĥÓ-T[àÒxè ŒPĝŝċóVQĝpĝ…QHü0Ħ‡ éwy_{ÔW˘+!í*-Z’éd¨šTÑA‚I!HĴ˙„o ÍĴ8ĈÌ;p¨â†"ˆğV “Lm•"ÖċŜĤU•˜T³ÄÜDf–żŒ0fj“ŜĉùU~NF5 —ÂéôœĤ§#'ĴÚGI˘Ïg¨yMçnĴ‰Üqˆê%6;4yÈGDȰ™ #´ )È ‹NùLİHĥDm"qâ"½|#mYİŸލ9-KÄ˙?9µ *¸uT+pQ?>KœüWë-iâÄĈÀŝäï|`KLᅜ.4‘‡÷ P†şEnWÜĤ8ljĤĥ›vŝ£ìY!“ñOÙJû˜m“İŬ’,XħSîa$èà?gœ‘m ¤‘è²Ĵ#sîèÎ½__‡ÁñA}dQA%Ex>h"Šö?äĝ7SĜġ>_9¤EJTKRT‰ĵ÷aîGuq"w6Ĵ|›M?&˙ŬŭT’r¸f0•ĝßyW2f£,qö|Î"#äŝ³ö•eMĉġ"Xû|K„ú½OTˆOäRyD'?Ŭ$˘#˘q&9\ĈdèR0ü$>Ïy‘˜t!ħQN>S`m%Ô4èdŽ{?Œ'ŭ ĵò|ÌjÓjÂ$I?w˘ĞwÁaä§A'÷qï M JD˘%´¨ƒŜэ‡ÊRÛĴĥÖĊ¨´ZŠÁĴlšÒmŠ‚­Š´IĴEhĠ˘¨¨¤ŠĈ¨ĠŠĊµFÖ*J²mĴTQħ­ħZ#Z£XĴ͍X•ŞJZ­6Ĥ-i$AĈHŝ‡Ùŝ§ĴŸ&òx’IştĞĞĞ’ġȚ˘, +nËY‰WU+uv0‘‹‘H›ÌHÈ[$WFL´ħĈÜkQĞ3î<ÉSÛgV›Îğ6ú¸Íżyäܗ.yœıK$Ö2mMTÍ0­Ì;XZì’Ĵ‰£OĵÂ6Sƒ‡˜nŜ$’I‚ޝ+­ŭŻóĈ*UÌËW=5ÍÒÁ ŸCÔĞ6XÏ×ÏÉç³÷·Ù§ Ĥ÷‘£baĵ„bZ0m½ĵqĠĵtÄè&{£§¸‡îäçOŻ9Ù’á‘$ċâR+8xd:ƒÇËċM:^ïî÷O^Ħ<{ŽÜ%ï{JI>=Ç<\xˆU´$ppxîxàċs+ċvŽrċjË vÒğÎĈ²7ÙĈBfH›~â$ Ŝ8^Ç'ğu×9sıŬĠÑȨ ™l:„ܧ|É x’-\;Çc)<›IñŽ8u€MêP8â€C‹·°L–KjiQ6IĉŭŽî~éÊIÒHé0Ĉí ԃż ”W—–íµĴÓgĉĉŬ8GœˆSh6x$´-—öžK=?½=Ċ—ħġMw;Gxo"û5+ìĞWÙù6” Jh’@";ÎS'É0 Ä!èr,äJlà˙Ù¤ŝL“ÀŻ$Y™ӎ`t2û8P‡h2Ĥ%$ħ(Ĉ„gÉkwîvÙJĞd…ĥêĜ)m3X•ëĞĞÚ§vĉœ&͚ËRjÂbNIH §pÁÀD't‘J•UÒUT4Y‹VCvƒİ4ÉbA$ üšiGƒEĥ`1%‚Ş;> µŒ}\)ED(ĜÑITĴFìş/ݏÉó=݉N[ĉŸ&¤$„Dwcюí3XùS—Ĵ6y&îTz­ĥÉK Y'ĜÙ0îüâ ÷–ĤYi3CTuŽL d dûE‘(މJ…‚}1?‚°˙4ù7X+ĉ0”ï–£Ċ“”1ShލMD7ákq²Ë;U´QĦ.jËÂDÓq)ePÄ\ĈÖ.d`× _èhözı-ÂS~Ħ>ƒġšG³âd°‡çĦÎŜ§Ïïâŭ×B̙gûZ<‡˜6& BÓ×ıñ••+™—t˘ÉÔm”G̔ÛÖFŬ)1ĠFT„!L+\§ ùXíĥN}Ìmxĵoƒ Œ?àeŒŒŽü÷ı5ŽF6–•VÙ\†U)Âáùö’Ĉ"Şż^B˜•Bä]F9qDĥéq´™ĴÛMB’´6hÑĵϘS0ʝMÚobU#r§I§%#yÂĦ7ˆ÷G!EBb8ü22B˘)*T¨”j‚àt0EшH˙XNŠUŸĥbʛêèjIŠlQ‹•†*pŜM59Ğ,?⢿>×íû>Ë{·Žoeĝ ùšûO‘Ɂóù‘úŞĵÔv}W܀³ġ#HÈò0_Q†Óƒ t=Ñ'×$ĵnZY§ hf~dš7ƒµ‡daÈrÉ&$ŞUN›0xtlİ"4o§T61èqh €‡ _‡ĠZQġ~sô>2*Jû§xž’=lžv-‡‚˘ â½tÍV´FÒ ,ôATpöfjĉTL4䳑€ÁAQ*amħVJ)d”!E$*ÈPİQVŻ×›Uş•ŻĤE—q€5Bl„‹4WÓ+Ĵ‰Sp§‰Ô Ŝ3ÜhË3§Ĵ:€ê£ˆC%2¤ †!b"ĤŠGRÍB Ñ.#Ĥb8Kvĉš„jWJ,‰‹¸S“j`ÁŸš_#÷ ĦùŸŞÉoVLFîûwŻ\ÈïDâKzú#½ZÄċ´„Ÿ¨ċğ—ŻK™Ŝ'.Ì+y²$ë5œxÚm­m´²‡Kŝ gżÍ† ÂYwBÍ$ĥQ9–Œ.TTѨD‰'ï‡şAnZ`ÚDŒBĈ‚L]މ„t’x!vDĵB0\̟m\“J‘ğDMÏÖ4èTl4Ǚé4 5>‘2ò&ìpórFêĜÂ"%4œœa×ŝÒB";|íµĠ<ÊÚ{w:•8‡ü&˜xaÜĵÚ Lɒ¤Ê§LĤ¸–5ĥ\Ìa°Ô˜ĥˤó+=Ti;¸Šó)ñžÒ|/M`wÖ´!Op’€ˆM’%&şĊŬ½à”À¨´Y˜Äo„Ô “‹˘ˆŽá&ÄR˘„a‚ĥ¤Ê‘Ü!Hj µÍX/1…ÚO"€Tnq”ŜTáÏ£áœiвcĠ°•14Ğ#tÒMĦÑHĥXó‰ÒĦ˘” ‚‚:O—Íêĝ[ĉ^Xܒ‹ÎQ%Šşrw…AACJPRċĜqœNòLĵ$„„ ğ Ž@á *^*Èçe†Ä,B£;˜ıŒrèprz·•À8%ç”ĉg ûÚúı9Ï_gĴbD]äĤ(çÛİ$•r7­ËvTd”A£ĴQ‚ÖŒk<ĝíWÉħĵÚ ˘ˆ"ĝ|Ŝo7+–Ü6Ŭ+%yĥ4ğPµ‹aĥÑPÚĦ޵ƒsĜ­Ñ(ĵóŽL)…ÇÊANĤ›1•{\Ĉˆu9 ĴdÛɲìô]Ş$ùUgiI8áî*“•'’BğŽÀ² ˘™vĠ5‰* 62idq„"z“ Ž!ÉËĥr´îŬ‘ Ä4°`Zi¤%BD.ˆ f@žħ;ôƒ„CGÀsĴċYL%’M J‰"1‘rÒ6:g 5L$@iLvK8âĥÇ#ŠÖ2îyĜ£ ,‹E1”MKÁ ˘€-˜àÀĥP+„ÚW €à”ÔŻv{EF2dĦÂ'˘)*ĴŽ‘…FÒE*IVI6’0èRÁM&ê @ŒA½ ƒ„ ˘­‘Z,››[Ù™ÀäTOl1vÛ0fBÇúĠó" Ħ“6ĵq.óœù†ôÓPñ+NTsdóÉٙı\`Ġ—{Prj…Y¸D”af‘ŞÌ·§à€àP½3$E]1Ìed´P”8„ĤDKŠHCÑA˘"S*`Q:ûL#d#ıĥı5Ù A`,.0uZHÁuŠh,ÀH÷&™ÈJ˘f¨ˆ„€íĊµ1„— ı7Íík 5Jcĉáğsà“scGşJmTX‚4É+Òş_=‰eŝi(zÀÄÂĦó¨ÉŒ0rAÀ˜–[ ¤½ÄSéòi§Èĝı“AÑĜÇAħí„0ཕG“émÜ£p‹-İ1HÉ#ŒD è 4"&‰tÚљ$DÑ$CôĜ”=ñ)B°%/ƒ8 @¨ **”ĦHJ5EŒm£m|mxj²Y r˜P”#ça"J0¨ì˜” (8—$É2„‘ ’‚ħ aPˆpCÁ „@KÄŞqèŠÊ m,Œ)Á†ŒÉ6FNFŒÄŞá]¤iŠŞ "Yñ_ 2i8"Ž#ƒŒ ĵ²È!Ĉ2nqş]Ür˜ùô § ˜˘F³]Eù}ç|zšÜq2†ƒ…Ì@ÑhKP['ı ĤëPÜDĴubbİŞ?ÈcMş(‚ŭfäH¸(°(‚UÇG?GĠ@UTƒOÒʐz{Q"Qt[—À³,аĜ”žH¸˜’œ˘fħÂ(b M­iÒ³(C²4àìĊ!véHš0íÂÁşÉĤŒƒK7FŠêc\Kf1äİJÈEhİ"Ù;šĈaŽ[5m†ÎìDáR*Äv“vŻueıÜ4;ò•ñ˜šl˘KX:S§5mĞ-+{„ny48Pâ§3v8èĦÒbšçBš’H•‚ċG‡–fÁaî:Ĉ•ˆXcĤo{U²kfm[(èNĉ#şZIı<$RÎÚcbĥa‹UT‹2H<ÚHӆR ì–#’ g “À¸?x–WĜ\d¨ŽĈŒ3f5™DİC+‡‡½fµŽç'ƒ­°!·ĥöÄ %ĜgڙrÉL‘X*mNË „°1›oÓéñžĤ‘ŝ‰dŸÑ?rĞöG³ƒûçĉÜ˙S÷ȃòBIŭĦïĥ6„ċşCĈ=äŞhÒOû“bżÄD‰'y!Îy8í3q“gúÄïËi–,R<ì[ŸfÍüçûĠ7s ħX²*‡Ş'àÛŜßŬĉáċŝDùż*‡ŬŒL¨‹X<ŞĜĥIġ˘¤y'S꘏ĵ!ċ?>“j’•)QthÑφfé;8>E’GSùû­WI$Ÿ#Ìܒ&4rġzHûĊ‘ù?Eù6HñıÀn(Œ!Y”)B!¨UjËZ*İİeZQµİ,Ê Ğ*HHI(ŠË*U6Ê´jk6ŠŞİ?´éQ]ŸÍPDM™Ġ@Ž°Z“ #ÄǚVòmI~¤oßûûX9éTáT·dànîQ†U玨ŞR-×w]J$s˕)ËÊÖáîž<ùMŝ|}˙j˙ÀÂzÑDcĜäGħä>b,LĦŝiĉФ7wMŸġÍÉ!²1=’TŝÊ­6WĈŻöM4ĝDŬSÔ˙‡‰ï$<Ñ˙NŻWûɈÑġŝùëxü´jj‚$QJFUĠ-Ş“&D4Bh,0‹ ‰™™Âşkáş4RhĊwWY˜²lHOµĜÊ*I+â]eñJĴâIDӑ1Î:™ÍÎÁ …oÜšá%ÒJ…6–ĵİIJbŒ¨ca™dj•`Ùt q˜!bGKc˜â“ôPŝù½Ħ?‚Y%ŬbISúIüÈëĠ!ÓQF9Ù&Òd¨Íˆˆˆ4¨§Ç?şèÖĵÛRÔÒ$½ì:ilèögêäŬĞ[7kvÜÔÄò'İ=ʏd !äŸGfüg³ċ=ċħV-ZTƒÜñGœz#—hòM&ŽĈ‰ĝ{n/ı4jf.O­µ2íò\Š—rÁıĤÍoš§ğLF1“…ŞaSĜÔ#YĦjȸċML. µŽ ħ¤Y`Œ)ùM44ŞèÒDÚ1vğPw£&!€`œ€LÈñìż÷•¤lw‚y§¤İoğFÀOƒÜŝá{¨lNÇe` °rĈBF‰:Ĥ%t“ĜyJ*–):µ4•6¤ĜŻĉè¨Q´ċ^QW/´ˆ^$‘äú+e@öWÊ#ëIlÖ,Ċ’HİñĴ[­6·Û~nşA)*ĔÙ6L™JÊĥ›eA¤#F’ˆRQ"™‰&hÑ(–ˆ(f"f6YĞá]  YLD‘%%™‘d LĤŒFİ3&¤‘!*L˘²Š šˆˆÉĤH×.ÈĥQ…1F–1•“ÒMJUM²Ìĥ™\ş²³Ed’XĤĥRÔ²T³Yll }Kò²Ùü]Ü&çFıNĴ4iDYİITİGÉ(áfÊĞ#ZÌÌÇ×áK"jIġùBz>§ĊĝדħšO™¸ñ9,ȓ£Ì’Oı³İÁħ‡Gó}•]$èv9“^ƒYWú4Ĵ?ħôÛ­%Ç)1ÍğkUš†–Ü\M›ħ‡™Ë‡‡“äcgıđ$“ävJà¨i$ûCşÂ ÓIŒf&ċAV7~*>è²jI;ĥ'ċÌ Î€#ì‰` ½Y†Eä0ÁbX”‚: ŜÈ{ğr*iU$N’ĥ“ìĉ 86w²(ĉpo;(˜Aׇ$hßñLĈLéŠÇBé-HuúÂzŸ~ü-dWàûżWÊ'Ŭ4Ĉï$Ż!ğcëċo“ñ·êà‰ö¤’Ôġlìáħì_œĞ,ï#™Á#Íäù((˘f<Ĵ"Ÿ˜`âşGí€ú,ÌĜòF`SCÀA˘˘†Iğ }XÀœŞAijHn˘tÈĊQ9^ö'3„š—Pv&‡dŒf‰H"^0°PÑ’“½¨,‘”ŒÎ–4j‰K5İ0‰ë+‹F)2ŠˆC"ĦRż Â;@ħĦÁىĦÎ FIİè4b̒ħtݳ“Âoe Ê ½è˘}Eî>ĊWêé~$uäcb$’j@÷{Èe—ÂTŻc ’ĵe[1Żĵ²Ë0H‰ĉ£E}è$‰ÈŞÙî:/Èzœo‚¸ĉ୏Ŝ`B££ß­Ħ·OyÈ`Ù@"„—ô *›P}6İĤ쌑H£d„ƒ­vœ˙i *äuPöâ êÓfTzBĤá6jüZ:R·(8uѓ„t'fÜQ£¤ñù*Ÿ˜ví‚=/ï@z_**P ‹lñô’B!HÑb”UħicΖÎ"ûş;ú7×EpΎî ĜöDéˆ) >+òˊ0ŜAx¨á‡sJ3P0³ë0éú,?Ä/ ²¨ŭ8¤TW# ˆí·~Hˆ˜…]‘ R¨Ġ((Î,ŞD˘S‡¤ÜWVڕ_Eĝ%WϸʸÉk=á³*ÏRÎë ˘ı(˘Q´bě£Y&ŸÀŒ*ĥ|<7ıH~ğEoŒäŽUĉċM"i" èdĝf" 8áÄ~pO !q' NĤ7„†Ş$*I*ȟI|·í™—ċoß,£ÈüΎÑÊnyŞêfB̛ë9yŽ]˙Šò“Dz<ϜĞgš;¸7g £‹Î"O_†lçŬûîßw‡ĉŸY $Ž?êàb9‚Ù<ĠјzY4ÖFĴbX9´ñ'X/ğ ´hÔ˘}wÏzòŻZ4Mï]BĦ+ÄŬĴÓ]1ˆ4 iŜ!¨ĥá€-I‰‡%‘“VKŠ œ'›š@ñO<:'N°NÊ0áÀÈrs"""ğIğN‘ K'ü‘$°dĉ½єĠ[zL]g“L†ĈÓNlÛ­Ä8lž]#$3DT’Oa<ĤâSšyËĤµ1¨fÊ:xžĤñÓc3Ğxè۰ɍġ³t_i›~p.{ÑPĊ 9TTGepèŭwş˙)ġËW{Èä9ô{Ç}ĥ‡o%PĈ=²í[yÎóı²żnÎYÔ­í'XĈÛlż3(Zò°ğ .ċĜ1†[% ÀŠ/–`PĊßz–˜p(NNŒHë7tHĈ;WfcyçŻkj;îû½sWúH=ÖÊıDò~n‚10e´ÖÎK$"#Mœ˘œÀû9ĉI9%%YUBœ‰OÈ˙àû‘ç B• •¤eÒL}Û!ôhìë;ˆèĝI$ñĵ""=™ ÔôlR 6|“HñÁğ2يÔ&+Öğ˘Ĥ͓=ĝ2ŞóK£Jf¤ş6kI%¤,BOĠdĈȏlù3µÙĥÍmˆò~k'Ż6N_lèPü5û$BòS…šj">ÓKĊñż]ܒ~—ħAP+j÷ƒÈTZÈÑE Îß.Ĵè&TrÎMމ[¸jIıúÁşFŝÛilĥ/ÛĉAòġ$/UÇ[jUUߋìö_ʨR ô'&ë#‚Ĉ\lѸĦ8- <ċÁFŽè>†”ú°ìóN“O‰ğËLK$>öv·ác<½Œ¤ ZuCŭHd„ÏÓ7 H$`d:eñŒ `‚ô#gŠĥ —Lz+—£İ˘Kİ&ë$ŞNNÍüŞİ$Ȱ̑ÁËäĈ‚ĵßli<œêâ³X•Ñ”ß1|ĥÛhóUToomoî¤:khµpÒ ¤bGY!°ítµK3/i3£UÈ\Ç9YżBèñèòquÇEQ²%r_TĝN>+ĊÖŞ;ġÒM+;ÔÄċ˜ÚħjX´‹MٜÙÍzï4.PNRCŜG”s'ş{31›A'6b *D¨{ĝ;ó·XòġwÓµċxĝsÎÛŬÖc²Ŝbû8á×Òuıċg‘Ùd?ĈĴŝ7Éŭ/ädV4üzÇJ!—î–žšïT<":˘oÁ¨ŽmĵŽħ˘i ALJ“ƒ„á#Kòd&“KS(²$ƒ²cʖµħâv‰"'` 8Dôy²¸Ó kğ’Ŝ&fLnᷘñĤšgùŽÚĊf+ËĥŒ(ÂĜÜej‹R°xaĤ"—ágƒC Ӈ˵Rx‡+ĵNĊ)N–2ʨޖ†*bbí˜qùk#›ffüÖ]Ĥ6—)Y|08>uGN! $›ĈÊ­ŽÏ÷<2'GF ›.J5ġwmRQ2ËJK!˃Vï3fÈÈxÙç mI9"H‹,-$†—é2%gKž0È’Ȋz§ĵx:GrHGş[>£éeyžo7ğÜŬ<ŝüİŜ`ÈLewAġ" N‚ì¨.ÑÛ‚‘5ĞL  û%&6†k}kS[°ŝíݎ Ë^ʗ{l@àŬôÑod™nc0~-ĵâƒeŽÉujQc”†n“t—”Há´$ìy˘=JüiġHĈÒëV¨žH’Y!X+ÈéĝËgşnġn'²É§>쵓I¨gIƒ£QȇÊbĦ*„ GİoҖĞÊ ħˆÑXÑZ4Ĉ)J’Ċh¨­-ЁT‚Ád£î?Ä˙FÒHn’ŽÂĤ)˙ĞŞ„ħ(˙'艐“i2Ú6}!Ùfìw7S„Ó£ŭM&Ÿìˆ?ô™TUìħ‘=V²öW²<Ŝƒôv îtI̒OóZ#F’yŸI$š5ğÍ>%>iŭw'/3P?SI˙i?HìIħQ˙ÏÖĉlt4á†Ë$óüP,Ûöı2žryKeù0Ĉ#äè‡ĵtçû¤wħ˙‡¤GààhüŽÇq¨<ŜÇŜ7DìGfÇèŬŝ „WsÓ =à"Ÿ"AH…ä1(ƒ tš7|ӅJ˙ĵÔJ˙]ƒĴGŜI‘Â{ÓĴS…ŸÄ˜ŽS¸?9°T_î’Œ‡ìz£àï"?‚ŞŸCƒ¨ÓüTÑ莉8cd›U×Ĉ+ #N0Ÿ éÄM("1Ñ9€~xOİI8ŻèĝŸô<|ÍÓñC !Sİŭ)!Wġ"IE<Ç÷ /ġòĵdG&†j ĈŸŠ*P÷¸xŝDP' Ĥ3Q1 4šúîĝï|JżiWĴy…¤ħ‹ IȔQVT!‹İëOè¸i$ ħÍ陌d³M°`ä\ô&à´árŭtK Ô_f Ĵ‘ŭr#ġVfg>Ô*E$šgƒ‡BŜx{wÍL=ÇëĴ&  Š?3O‹³Ħê"ı’Ù."r‡y$ôy¤p—Kş àîzÇ÷ŭÛ#ùo”>†.ċĤÉ³SŻ˜Ü‡‰O$ԑÑú¤Óy!ô!îI =Ú;U•)eÛ6•J£ZfĜ”ÖŠ¤Ñ‚–É}nkê]÷'U‹.'bM:et;“lIĈÍ:CFD&(„~ŒÀh˘tg"_9Ârp™VD|Ĝˆ‰™Ww*ŞŸa§ßLĝħ—ĤÚ5v—TÔĜÉ “ċm ·†Ef%FÍOsÏZtk[¨R0BÙĞC §·öâŽ˙@DĜúWÄòEf£XŻĝ„H’ré›ÉB“£…”ħA[£gäŞ#ÙQYPDO˙ÌPVI”ÖUŭù/Ap·àßĝ˙˙ü˙˙ŝ˜I7úĜïÑŜë#Íӕµ>ÜíRĥš´ĥӃ[[jâ׉š÷£îĝUJXĈzß }%YîĜĝ‡ €(_uŬ ôŞñGĥ Ĥµ)P)kE!Ż£´Ev½4C֐IOĤUwŬöÚ¸ÀŒ¨Ħĵà%Rt4RŠˆT”‚…-´şu@Ş( *E ( ¨t &Ö=d’MšİH]šV@EziWL§NĥçipÈmžA XıjŒ•nÜrfÁë£];ÄĠh+ZbÔ äj¤ĉÙQ¤Tße™bŸer¨<¤ Eë @Ü'5N=éï–ù@gtġÛÒöqĵdşñŽèñĞ{qÏrcNÎçâŜžîdmëp#Á2ŠzvP^e >ĞÏaŒ·[mwu÷½÷ÌWmV[ĥšÛT éïy|ĤvÛu~–Âĥƒ %HOŠ ?Óüç„G‚AİMŸşiÂLˆ°˙ßċšôÁf¤Ö“z…²DÔ|yjUŞèĈrĈUĞVv¸QINE/ó÷FJ(’&I$CñtRS$‰$ß"żNŝkÒI$ù^öB (§ĉĦè!+ëtDQEDÔ$êpĜ„QDE>çÇ× ˙òġ‡ÒúıëD64“%)}R ˙}h>ᕢà„ ˙=ĠCl”?lƒċ~ı9I†ĠUm²ÛmĥĠµi#á˜7‰˙—y'–ÍjiEĝ|·Ù>ÖêĞóĴ€„ wġ‰Żèĥ­óċĝcDm-w—ƒLIS™†H›#ĵ¤É*²µċߖü×~£çÍı€£×a!HŸJŸ[˙şŒ{TÑ ħô Ħ¤İ:iÑэ‰ĝž:×6Iá÷ƒÑĠá'Şng ó,Ö³† °ñâ—ÛÀä)9$ĈÖ %9¸Œ‘:§°œ[y6ÍĊ?ŭ'L‘bNĉGrÏP‡‡ƒ,ĵ’4Ġâ‚ĦHÖZ"6+qr"DcëfÁÁGIµ/üĠħ³1dѓbĈ*/›^ß-µÖÜbĈjíŻ´Xb'˙(ĉɽB§†µ™Ċ#óĜ 8ÀÁD,2¨Ĝ>İ*‡R0K›bLċÖġK;Ї‡JtáTújŝ>àd„ñƒÂ8thjÚ³$,‡vbRj$+ɳ]şĠQm£ âw$qÄİ’AċBҌFpy• `İ&Äĉîŭ,ˆ–Ál‰´Ëżk˙½}öûĊ#$0żkßfEÊûÄ `AñŸ/·FG?UMûß%ıĥ·ċ5­û5tĠoNۆ“Anmık†‹_VÍo›ĞW--°6'“İÏv•#ÍÀÇ—c ĥàƒ@5ük_•Ôw’wwŭ}:Ë3ÄĈ;œµ!àdƒ#ŬX£î¸@ÄHEŒÁùÀ˘w ò^(šy×a8ŠŽ5–48Iĉ%„ÄÍŬڌ‰**¸"†ScC~v†˙HêÔv/°<µ}o²żĥ§Öŝïšż/A5´µjÚŞŠá–˙ôbut+ 2hûTòECŻ „„j5$”CXxRNFӅĵю˜:9tàpy~,n³§Ž1^}ÙĠ횷zê;8ŽÒr^–ĜQÀ?ö[£ÏĜPœnÑlĤĜÈE”QIm‡é#ŭĞÑüpúı°-ÉŞ)S$Á™††ÀRĠPĦGĦĥ3ÂùHÓ„(}1‰¸…ÈrGD’( r [.P&#äê †pÑaÌħä)ƒPo0İ^áa`BŒĦ"> Zĉ" d#‚ÉvZQĤĉJ~ÑöHWYE‰İ< ^Oí@Tİ8'• îr™I ;†í•³tò;Ò;9omJ˘N<ݍ5˘À+úi^6°‚üš‘·*Ç”%˜p –Âà˘ İàı˘q̃·tŸW$lëVäëREÜñ$¨M>³éœ` x@T!I<`’˙¸$„gö¤´Š[m#VÒV¤­Š6Ú+6Ħ+`ĴÌ[X(Á‚*ĈĈÖ6£ADRĦ$’}{ù1aÉĝĥ֖CjK˙úîvş- De ‹¸¤É,ʑ²JÔkĦĤ+Y(hˆFla&4A‘” &Z@ƒ ˜h›£Š@E0Ë ²aĤ!¸iQĦı˘™Ĥ‘5İ‘¨’BD˙‰$‡ŝ¤² ~ĴD B4'ŝPĉ ˙1üĢŽQG£„QğğĊÙ~⠆kŠ`‹ 00ŝ˙sŝ’Ö?Oè?ıÀĊ\Ô°Ÿî‡ ŝt çŭ>[ğŝßĊߝD> ;‹pıuÚĦÓPÄâ-ÒßñëŜϘ66& ÑŞ4`Ĉ$ѵEmzˆúF@É4ƒ 8ÂϊñĤ†iÄaĤŒ0£Hßñ?ïĊ ŭ0ôŭ(ƒ (˙Q?ÄPö‡ü’K<2F²ô8ÇúóMÛ"ĝĴ/ê #Ù1Àö?Ċv&׏Ïkí 3òŭs÷Êżí˙mŭÄ?á˙ò-ĊMX?ù²u°çϝIÊş[GžLO˙™ı&,‰ó²+áóÜûݜܵëdôO=,ùPË>5ʏjħĞ&ö$ùiÏŝyüx}Ż[òݵ}Ġ·•+5Oùħ;Ż|NI<ÁĨ{ÍÏyµ?úÇq=âĴ÷ówÒÏy×Jó§…şÎ4yRB‰ĉIÔ ‡"jü£í0¨?(wâ3ÖµGxY½‡js랕ŬNëÖŝ–:|2IĈž–K^•ġ³,çrÏ:[ʍï—é‰ïBÙ~Ö§}Žê=Ş8ŜtŻz:QÎÉ-Zïğ×;žÔù_[çS­Záx^”ċ~4ŸwVĴ2áZáôĝ^7Êò£{Ż…=Ħâ)Nn_]~Xĝüożŝ˙Ó_ĴZ:ĠXóżOË#ïSñ½ŻK}ì^ZÑ;X“áa2ȵ>U=éĠċd|ĴÚ¤íRsĦkÊĦÔ Á?X=ĊĵMĊzˆT_h‰^(ä{$ía½„é\*-#­IòħżFôçIQ× #ÂòİÁچöHµVâÜ3~Q:…ÀD}DϊSç³ìŝ¤1˙O×ïŭ~ÎżQû„~KôĊ>“NYïóQ¤í—([Ìäˆ8Q4ĉTN`%”N–n#9-›¸Í&r÷YjÈGçUmR k)›Fîĉ`Ĵ^n²šôäñ‘÷²yTZ‡j‘çQßd“L§ŜÉ>ĝPNë,‡IÖÁkŻÇ2~_Ĥ>•µĴd/ T>Ô8YjúŠġpOˆ9qÄA¨‰ 2.êQN⚈b üˆİíŸÖĵ@Ĵ_ÙŻĠĉżW›óh9üÔ×ǗÓWZß³"‡"â!˜ò îĈê \3s?lŜŻ—]9W+á{Xĝ}2$ž•#­"^Âq>Aá†|°sy!UÂpŸT(˘¨""b“ĝşúît&Uİ;cĠœ‡>χX¤ÊMÌ*m„¸V3ÑÎqëŸO³/a@ĝxŸ€¤ŜId0(NBn“t0ŻĜr½X ĵÊ$vĦĜï•Ì—[‹sPèáŭ:i8ìÊ*R5@j!£v‡kóœ ĵ‡Ú •n²é ĈÍ5[ ˙ë èw°Ì!…`ġӑ,g­ (@Q­.G#”‡ ĊAIRFŠĝ,H,"äÉNRîWkÍ h9†Hl Ĝ”mg"Ñ;%˘Íƒ³PŽFXĴÈ8-݈,Wƒ•&ï€@Š=  QÉ2 ‘*&‰’@²,,…‚Y"ȕ"X* Èkµo‰I˘˘ëlĠN×`=HP"İ$L@KÀU@ 4AZ‡ÈĦĤ ŞAÍ ĦpHŠó*ÚLÌó yİY Î0DZQ1JİŠÀĠ-Š„jx— 9%ٕpĝV ĊuŽ‹[ip0öDY³GŞ}ßi½FD)·§É„‰y DcC1$ĵ'Û엙Ñîú£Ù—âí{÷}2íy­€v³÷Ui Ä;]™–ސĜ‘!K ”èQ€i3M9MVĉdĵ$îá=Z†P•U0Û'Ĥ…,–Œ}4T#yÊU)A³îêsçÑĊeU-¸ôá„\\v]c+Nxng˘ğ_ĥïħÏn)ŽˆeÜiƒÁŜKs™Ĵ;w-öZ~èĥèé.M½y53 İ~ˆíçïd{×ïgáŻÏŻÙ C#!P*Ĝñ0Zvh6Ĝñ0£ÖûĦÈRĊí7\é`A'%…­ İ.Ëxˆ^Ĝ#iÓşFxzPYI^ „m ²‚;ÑĠ›Œ3ÂpYvtt4ŬòI<àr³Y0£Ŝ.÷J5y0ìÓTİ!MĞ8À˘UIŠƒ¨RœM=ĴCċŬ³ÎJm£I6 İVûG8fE"ójÎżR<2S0íxĴ8RV‡–án> YŠ+°˜,ġÏ£àšuÙ~XUÔ£8’ìôñD”rñwÓdb÷‰…°° BlŒX{Ħ”šöù–L"Ż8†b 1 ġ-²|Dƒ<·J=늳Ŝ]`ìÂVZ2ÎPu_F({Apċd’i„ĉ³Ċ”Xìjç¸PRz‰€ Û½ğ—Ôb·I§~³mšsxñĉÖÂQĤs;$6ġZĊbMEŒŻ(z£Ŭ4wÊĵ‘);}gĈÌÜÎ2ĜËÈTDž“g*†_-# iöµ/Ž:ndO$LĈN@“S×·šêĴÓ9ħ¸ž—V½qq“ċ°Ĵ1cò·—2‘úêŸç-³ğ\ĤB¤äq4BïaŞ›ĈċhNœnĞ:˘`6˜œÄ–j{úwĤQ×y:<€ğ^‘—LĜó=ËùΙşÛ3äòÄWZĉM]gbtuéİœìĜ/žr€ŭ)rqZŭf;(ŠkÖzMŜ|şġĵzŸJ[£íıÂí˘‰Ş—RÎO•1Ĝ£äôúԎ0íj—yÀè1ğ"9žğğÍFžVPC,ÏÉHĈ]Ú¸ÏöNŭÔèŽŭt*²/…9àp Ëğ°n™½ŬŻ9ßEç^Ŝ²ù}Dt*sÁGœ§p)a Ż:•Rëlŭdq÷ĠĞÈë{Ó6µ¸Ì+Ïğê3ŸU/=ë“ k´½+´ŞYI‡N<žĴì…U‘Ġwb4²ŭ_•]íQ­ġ—Ñë3΋ópÜĴ•œÊŻDĠJq?gbö}t/ŒuKjİ>ú~ġáĊ4gü;ɧE.Ŭ]:²íA7ñŬ ÷ÙÔd=A [œŜğžíyWwK/g#9¸¸]C8öÓHrBkAĝö ‡‡/ëzĜ0y˘àC̟ĞÎë,ġÀzHH]ŬÜYÒ"˙xwz)’,Q§’Š<öĤLC‡A%ŝ&ÎJŬCı!K1’Ĥeܑ2ÚI'I3˜oùŭâ\ÍUĊı‚IâĝJ#ú ĝ…ËŜÙßäıŬeŬ•]ŞZ:+ıÓKı²¨Œ#% BÜ<8{–`›6`ÙŜÙÍğĊı8:°Ñğ‹KVÏ'aì‡c"°Ál²$hoba„ˆ !‡ú!ıY ßÉ%TTË^=s$ÂŞƒÎ&?<ß*Í<úhÎÏ%jQ#ĊĈ^ñ/‡]Cáĥ½Ŭ£‡‘FRôL )xCIN}όžŬ1H <Â!·ħ?ĴŞ..£n›áŭ1„HrK‚J;Ë><#ŽCió~L³ágĴêĉ}–+À¨£{8£N€lĴpâú†d­3Ġ0rjÂÁÀ —éŸÖ™oY(Kl§^{ğœğ^2c €ƒŽš(’< àJPvÇÙ&@҂ÌAebĜI¤,Û*8qǐŭÈì—. ³òa·- Ĥdž(Ŝr˘ˆ% äĤ%‚lÊôĤ³˙FĴ§ÏıìȰ$í m=&ÌCż 8ñ¸Ĝĥ, pÉĝ‹˘dĈᎠñĝlș˜0vDDôĞ9|ĥBTY¸ĜDƒıR\~}3ÎÙmgA€ĠdNDd·7Q5mÌöÍŬO/D6s„[ô"Sƒ„ä-‚rŭPg4ĈĊeĝq–L\°È,8͐:AŽzëĉ|ÛâÍ|Ûw­­/~îYGĈE^uüœQb}:b­˜ġó@g}&Ĥ8DA Ş8wħkH’zYċXl²Ċ31dQàß\aÉXĠ$Aì§Hğ;JĤaĝY„p‰ ÄP†ë‹dŽ•Pn5Z!e`Ú-Ġ˸‰×lïDmiŞ àƒ+)0bÀ’‹2 ‘·í‚7¤ÔltÔÁ$ĉ˘!Á8(rœĴ—ĠU9 Ú éK˘3JN2D4CÛLeŭ=3‡0  ¤KTÑ$LC ¨Á=gњ @5zmDKœċ‡êHšÒËĈ˜áeèè… X¸cĉ_ġ.›Ĥf ċ‰2È:vsŻgƒïïG§ğ÷Ó4Għcàm"³—÷zžáı­ğ““İËê·éĈ ¤F‚ímèĈûꀈ ċ#g,‘]¸˘ÁM8q·`ĝ3AàklŸgy4wӆ„´(3v‘&Qê˜4žb¤U'ÔLŻ6ÔmC˜é›w7ĤqTÍÜċWĠ­Ö&+ndI&Ú\aÁŽÌm9¤ĥÔ8m¤@1TF{ŞĠpS˘Öe—jHáŞxĦ¨"iEÌ"Aí܋PÔâ˘mÔH,÷Ĉ†˘”ċៅŸvìÄr-Ï·zŽêĵulAÖ_Çtpú%wHÏoQ^/(Ĝ‡[vÔäKĠ£}oSZ%İŸÊŬzŠ;ËgëW‹Ô-]÷]{#ĦÚĉF£ïsİ;͋v˜OdÓğċé²ı&ÔéÓgZyħ) bS:~ó3ßLÔ#.À½B™WŜC/Ñw†·HA FY+%3”H,VóU(L¤P!iž”J¸rY,–eJvIUĵĵ˜ 9ġÜ0A0Nևš :mË-ĵ"Äğ1=Ċ™rDZ_§ƒ†ÙĤ¸T˜E&ÄĊ´5·nœx2Áĵ=q „7g03SÊd§†€rÈfnÉé´Ce?Y“ĞŞ˘Sه0üäıˆï]ÑS Ŭ“µèHß°³$³?ĥfL`™Añ<|"éÑĴ„ŽèĴn Ú{2b›ŝ˘‘ ÈÙgÎ!ǢÔĝí‡Ey)ĝğK#9ïC€0Ĝ"Fˆ(8%ŸżĦe#Ŝ|ˆñïç÷ “ûĝÎŝ9zí÷ĝÎ<“:ÒôX4Scc…ĥÜV47ÖAîû|xġžàzökĝ™ ħàpÈ]´ttŬÈûp°¸ñ† ċöš#„†\ÙTJaùà™0˙˘so#àw­Sĝ8q02ħ­¸0^"ÈPôèÙ³‡°y=8;†+…ċÙ@ú)Hh‰Ù~Ï ĥcĦùâËÙĵِ;<ĉ\–ğOBS“Áú:Í51ŠÇԜمf2=òšñArá(X&¨²ß÷ûm^ÄĊĥIÀ!ċ˘ÂGÙ²Ë$&ˆuêŒYedûzÉéO‚“G+”ħ-a³zìú((6úcI³Ĥ“ŬörkÚ DŽŝQĥBş›M˜á\SL*ĴÈsN†ÓšQe’]›_Á–e΄ixŞ%# ÈrĝßáÁòObÌ <Q½îèËä~6Ÿ½Rû 4%ml·`´tRé\zĤ\?ëŝ÷ú*VPMÔAX֘@áHNj](CL\2T“_ÚL•a¤ĊÙ~ijF4x.³²Ó`I§ï½Ċù%„Ÿ•ûEX¤ñ5ĝ·Fqċ†_÷ÛVj2?ˆ˘XCĥ"Œ ‚ŞÔ=ìÂÄ(‡‚7 FığÈbîWıĞJ˨B&Ë~ ˆGÊxlä;“|ĥ§˜pBÒÙç{˘Rw߄.to”8ġ†x¨+×ĊÉġUDû˘¨*̈O@? Ö÷ԎÔ}ĴHç@ȃ˜µ¸qâ‚y‹zÛ'Ô^Îŝ?;ċñnşŠú€A_Ê%$6E²ŜŬĦ´rò´"‡•UC x&ßĦô:=y'B£ĝ"ˆ$T‚‡F‘Gí=œ5ħD÷$’CÄ ‡î{?çÌĞüK… >ŞùE~“ĠŬmbIÂ58fLĤ[ˆ*œĈÁ£BT˜›ğDàÛŜ,aTŽ÷>|R>?‘˙™ñ“d˙wè~NRGÎD‘£w7Î?˙caı˘żÊOŠbûğŜòrw8ħ˙fÍ;<]Éĉ“ŭŬ^ƒhêé9É'î6O·#óĞ%FšĠç'ç˙tŸĝpù°ĥ?ô=cƒŠöz1ëRU²-…ĥ‹l˘½“Ċêcg7‘û8Há'Éñb~™%²U|4µŜšpjU›2ŸÑk'ÁÍ]Äsš’Íd|RĞn§ġŸj²ËJħNĝŠ(i9DÉ51ĞQ3Ġ•-š}İZê´|M !^­’hÁ,Y,G'€>ŭĉù££ÙEúN‘ÇîšGNiĠ]QġŽ)Gâ½ßç#Ŝ# T’€ŭñ"/^Ğ>İkFß ‹çö³ĝ*${ĜË ˘`€Ëħxr†Ÿl($+&_ĦŸA˘¤dŒ'¸PÈdħÉù–R¨htp°`d‚âİ„;íĜJNfiĊ?ß'`NjĝqŽM9ÊCí`²´H_Ïá÷^äU˙´­/ħ›‹$$ƒ;̀ZÁ9PÂ(Ĝ?Ħš16•(m—~~Ĵ>C•Ĵ‰Ħ ZaÈR%*e&Gŭi•–Z8ô0¸@éĦUòEÀÀÈRPžµ£§ŝçÊÈH|’ Ĝ“™'‰ ”†§BnGĊċ{Œ14(bE1;ÒqlÒ$İOQ²E"TÒ&!TpTŬ&ÎÍyÖĴŝ²•˘1ú%p˘ċ`Àaµ¤ZJŝċY^ôŽnÄsMN•;%I¸¨7M*•)Ñ£$ÂÊhŸâN2 Y* Y*@,R+Èêœ;I"4„ ”Ħ*H½ëˆù߀"ùä„Ù,Hš°–RŞE  Xƒt J¨Í`¤ˆ*Òx’wžĈؐè‚è‘:MMwù/ò˙ݧġµyLŞğa˙÷œŸî@ĉIGJs!Í̀I,ħÏçżéğ.îâÊ,’ÊħĠ?ïŞġRêï Pċ–àé(F ‘ƒ]ġ°ß `wħ,ȅˆS¤°Àp:ÚR%ˆÚñÁhSˆĊ4ô!…:Qˆ"è[ íu:RÄ2– 0A.5ÉğeôĈtÓeFfDw°ÌÙ§Ñä­êµİETS#b$ŻL­xaÖóëĤ“Ĝç;óĜ€²âÙΚ‵M”‚b5‰i’wE GQ$×ĵ â=â´ö/)Á˜UÁdĤħ¨ş˘I(vr² <“½v)ŬZı̞|¨ÂLĴW I,œV†§ċĦaJŻ)Ò:픘³]Ĝb[àf8:—·ÜMݨK#Ñ3ƒĊÙk=›à@Z–w½A}˘(IZJ€Ú1K€o44­‰´x-ġXà‚R^ÛˆKcÚweéÛ…zvş*ċíÎÓŬKÙID³ï킈ŠèK’šŝ˙ëàWpj @*Şċ_k‰)ËÔYĠ£5—Za“R—ïE4˜R†ös)$:3yT7ièŠ÷ւçE¨äRÊ*ÔrüÁì"#IX2Ñp8 “ŞÊsGm$Ħ½ÚjÚtZA0€šŠ’h¸V üŭ˙€İú<`˘DÓï°şc)BŻ|˘HĠ×ħúGM@Ċ à^ÄàóAǗ‘…‹VċQ ,k+§äx)\£U$B„Ë‘&0Y€Iˆ½` f‘8ŜÙß·÷vĤΘ8<<=ŜvnÜĞXŸ„꙳ôCȆ-Šbƒú’…Izŝĥxù˘èz6Ċ 3lAsMwlÂ@2t!c&1lA9çÍĵ ˜–}A(ċĝ¤‚#Ùj Z‰f4YùĤ5e.! Ħ œö¤tÈáĤE ċÑ3ge™‡ŠŻŞ}ŬÀç ßí}pĤXó_† [P”JÊ@šğ_y|~ŝĝÏÓÂ"4Ê_½ëÁ Ċè·8Î âêUDc70 à.v†Ċ4 ½k9Î÷×] NaÇHJŒĠĵ^HbĠµp.².(À6Ĥ(…s£`\ÒĊu• T`_¤„È·X9€µ 1ĵşWxÈ*œ¨ŽR§*F4ôó‘AߟžEâ^éôŬ;êvhß<˜³•ĠŽuµş5çJœ{;/ ,`Nžû/³‹·KÑÙ½˜’û‚X|V  ƒ|iBQi{·pQ‚‚# G³t퇓8ŬÂħ|Ô (“V‚Ġ01}îñx“ĥ”àÁˆô”G‘ĠÒölĞ|Ú¤şÛ Ĥ9Ù%BbL8BÉK1DëİȞ‹Gà \3཭\1ÉÂw'p4ŞdXĥ‰°n1ˆĦB ”•+¸ ‹ˆ( €<€D™ĝ¨:!X­(+<Ì V,4n?Ÿĥƒ=żEó¤2ŞĞŠÌżaĴħjT¨³—êA$5…X2àŠBœ•àF&ZqÏ$HĴ‡X ¨ àħ>´Z€³ô(QKĜĴ°‚t%³(ĊĴ!¨2Îöµ0K°İ!pPrq+JÌz‰3½Vè tj֘ŒIU$/ ‹šğĵP‘ZPˆ˜’aÄM{ñE hàñâáä­Ĉ ûJjMƒTä\Ÿ’né:=’ŝ4€D~M_Ċ’Icü_…Ó 5PéWçÀmU(HuAS3G-HrğiHl‰ÉġMYĤäG&öP h²àeĞHM\*JS FĜ”*BYš’ɳÇÇÈ­OXÉħœIñ·MFÊ&ġœ „™Â'3‚–pӄˣn°mhÁ L_j˘ôÀ‘Œ 1 McäoqĜYSNı1Â<Á"  &$°ñò°ġÚì>Ž{"zI¤y^‘ru˙Ë!ùs÷„H—Ĝ¸”¤Ċ=K¨ñé  ;‡T™&ßAyĤ—3ħux¤ŒÒĝÛEž>ŭV܏Aç(šĵç Bƒgö:6x.żÊżßĵ­ŭŭ˙OŽœš|¨£ž–>πö[ċòÁ…ݸHdJJ*zċUıŬ½*9ĠmtL€ÖlôDWĝŸ›?/ÍT@?3öïŜ0ô½ˆ{…*úĥ1~ßÑŭ”rĠµ'ƒŜÍô‘óyW½-IKR›è³CfZK–—-ajhɀ1ê8˜ÉĝS½ċïˆJuĤ5 RŒ’^W+҆›XĥucÒĵuĴÀ Q€žµĴ•  H*ĥ0Rİ`l°£ÁâÏ0G‚Ûğ´È$éR4Ħ%c¨@ŭ9#Áž„£<ŻEp6›ACaŽŠC"„ç³'‘#=TVùˆ$Š;@~[¨8ò •ˆŠ*ŒSö[OˆĊ*™´Ÿx˜ŠÀùD Ó'ě4­6Œ@8CE˜TħħŞ5Ċ*MĤĈœ\’Á6)_à[şĊ~~ ğÍ`"Z GFRAUeX™Xw½Ŝ85&VÊ?žöAÀa>Z‚”öšWùÏÉ;Ì([H„ĥ„B ]àJŽtÊ7;„T䟚qBT&8Î ½XÊäoɛár[›=g³&´hŬKïfrVjO£{"‚PrüzϨ=żfĴż´&Ç L8d/"‚ìÉÎR4İ'“ 9’e Ż-™ â̖Yµħĵ9=Î:/ÌĠÙxè½Ĥ8k°ċƒk´ 2Ä\p 0B›€n4‚İövEñüÍöù0ĵ8qBgÄw!žñ˜QO, şĵ²ËGOT÷ Ħâ…+,Ï*6µžċxĵ_wiŜ‚T,ĦnÖkÔN>YâŽV‰ÒÉWĴ^Pô)‚(è)ñzaÓiDİœ\Y„q'¤³—Ĥ $ò’qf™ŠGgxè/M2ÁÖ“Y0•İœ+xï ö–oĞÊ,ġ˙—ù/ó@CáU@O°ŝ@†ö¤|#ҝˆD*ïù”¤µŠ‡Yür À¸‡-ĊâġÔ=ڌ+‡ 0t=r”a­žhÚpZ<,_WĠĞd™ˆ‹ e&!LJ_2éñĊħ­ ?%@xÓŜ< •ibV²Š¤Witƒ.ptĦ1²ĥ0éI—| 'ÙC²agŽ<`Ù¸ nŭTĵG.$Np ¤0ĤV£ÜZ´$UEßħ‚=††lé´y…L‡(\\PŬô䂴ç 8ġ–GŜG,4ŻP\EEĝ‹V“‘́{¤Ñx]2Žĝ) u›^zhN  hĊë%Rı@4•KĜ_mš)#Ċ‹*N'‰=I“”aCˆ!|e˜^š}ÂÁQżHfŭ}ÔOƒNÈ30ş$pjÌäğDÒħ9(Œ;V%‹Ĉ’KƒŬàœ8 Bh~I‚ˆM V LOQÛÍk``3Ž@QR.%Œü̆áÏÉİ!}2°U'JĠÓ0JÊ4*H“è0PÒjƒ0D6XP¸‹ADXBnyqäâ,è<ĥê_Ċ჈™ğYÖIŞDĠ•‹Äċb’‘f~TÖK’LQ…Ĵ–á ĦŒBEàÑlUElÚcÖI$†ĉ9fb·c£›u·QœÍúĤšEß@ ĥ5RF ÍÀĴqŒÙm^q|ÌcވĦZàBnñĴÎf{Ĥ,ŬèŸdzÙ‹zhÎVn…Àd50XÑÁ" xíâ8ŜEm* 'Së/Èm—žgëɌNÌ̇dyGc"Ï4Ü­‘ĝ‰; ŭi=żż? +! Ċ‡‘Ë00`ٔ ‘Ħ9[-,#ĵž£Œo|4 ÁĤ; żvž!?ßҒ° #ħ&WÔi…Ż“6ŝ$ÁŭĝЉ÷,I%zPiF, /(…d‘r*ĞћaĦgÊ\h¤ËÉâjŒ²’€Ë\£K£ĵŒ•Ÿ²ĵqiĦ>‚‰ŒÙ/ ¸U Ôi™"‘"nMM2ÊÁÀ¨›Ċ_ħĦFŝŻA—áá+z|j–R"jÔ öAÁ†Ìuİì%š°HS$$Ü (wıñ‡*ȤóB” hÂJ-ײ6I¨Pó*Ĵ­Tfé1ŭ+ŭQ‡Ùóñ‰ĝxšôJ5ñĜP\›ĉi4 v™w­.ZSDoşÉQâfIë/Î"}î˜ġÛyÚèċ=Ħ r$ß:*7+™FéS}g ƒ şöDŻxñ£]âQwR@;ч ÎÎ YÀ{ÇYaP ô£Ĉ†İP$6-e´]v‘až&w_AajTÔ 5çtRdšC}`Îğġé$ĉMmA͙›‹JĦxdKQê'­ò͢Şp’ŠM·¤ËÊ:2ëà?°?°6é@‚ùI ŭH3I0á‘óÔ?…ĊÙo7Fž bş Ü5,Ñi‹‚A°G(€`B`…ÒŽ•Ú!ˆA@ @ĴP‘LS"-ÎFZˆ‡w-ŞŬµĊ¤ħ ¨ˆâŸ>@-SîR§°Â ,ĤĠ÷†R>3ôš“CEĴV ‘›8è2£“t• à€İ ‚HiBŸ%膸ˆ!PġS7S´Q„,ÁÈŝDž<Š„“<ùHÌğDNâñbÄ1QÀ Z†Û˜Ó ħ´HԄ‚LDZfapÒ-fÍi$ÌLÒÚÔoáŜ„Ġ—Û¸°ÇÈ8÷_Rû‘xĞ5)DϏG%j¤!Hm1´ì›vDÈĴ‰$>˙m(ĈŻ q%Ġ.ݰù+!fäñ°š?v‹üà%&á6ۋ.Ó>.ûô•)=Ï·ÜìG%JĈöĊƒÇè8¤@ „ZTŬ*‡EYGíâ-|#&gë ^š:°Œ¤)IÚĠ‹?~ĉ²¸BĝöBħUa…Úh@ĈroWeĦ”€ğ&†16˜Ò0gïÁ†g¸àX†ì²DÊ!çC "ü~ĝ$Ċ2òĈïßÌBüoóċ@óĊñ—0aÀĞ`ì4¤˜ÁNh¤˜ADœT 3” ¸dQì^ P8vĦHŭWDŝÁÊ`²`›ïħÄ/“"9ò³Œqƒ& š>Œœċ÷ċüĦeIs}DŽżË³˘ĈaĊad™m:ĕàÙ):T Î”Ò;ÂlHò”ánŻJœÒ3Ë"ÏgW³=†vNW ”;‹:|<î=X;~Fx³EÍġo+ül 80Ĵ4ƒ†nzÏ:Dİéóñ‘ÛEOlkSİ2K£„lz€‘(„3L6 ;uÒçф£!ĉ“†àDA’2ÂĜL—d’“)!ğháqPĉĦÈĤԍ–AĊsNPÒ0Aż‘ó_ {éšıı˘ÊešQ§Ê4Îesĵĝ‹*nèv_r ĤA 5Ğ+Jùˆq>Ş-WĞ']Vi=qD³P¨Ċà 1 9Ydqĝ?,Eš”RÙâĞ,<$-à Ŭ› Ê-‰dBV3- ħ$C…oĤÚ6GĴî 5B†AZ¤³ğOÊùnäŸÍ üÂüNĞ)pǤ ƒ81|XaÊ*/iH `ÁŠ*èħ‡ì•ìƒċú ĉR ıUsrän W4µm ­iíNKŽ!ÑRc͒•?°zË\0£Ä›Ù iU1šH>-;ı²ÇTQÁÚ=8Ù0hP5Ĥ"Gu °żĴ)üJ÷cM_¸T­ĥÈ%eïk5NNéî<ı>e LMúŠ5bµ!W Ͱ­ö…Ùçĉ^‚\G+Gî^òE–A£!°aïI¸LYÚfX°vĵü!I•?Ùeúġiap?jà~ñe £Ö™ċJ™ şJ" Í³J½csĦĠ•G‹yï*¨ è~WlyiêâOAf³Ċa‰Uˆz’àXİc8ÛÜŬ2ĥ—ĵ%d{ü˙~O j5ÇÁׅˆg"üE ÀûÚFÑ(TT’ê¤lħY‘˘+„2EBÈ˘7“RiQ‘@Awż*@ŽğµËóǎV}Q#™™Ĝż5~nÀ ùu_†VG“ Ï,3w‹4ރMÄô§ġ Ä_àšİ¨ ÊPħ! @Ŝ„ €²#{@p€:w‘ĦĦÖD7lĞ0ğèŒ)`êħU$_(‰>4ĠZ/§ä-_Sóv60[í³5—/‡;Ġ+ׯYËíèŠ*ƒ­j× &ÔϨĦ$Ĝ6UÚ~`™eĜUƒU1LÒâì9ĉ\ŠfÉ/à<ŬĝnJ`Éĉ=Ŭ :0NxĞ<óv éˆwÌbÚ­yóŒğÓ„XEfYñÚJĞĉ4ÚŬ÷>í́,ËfMüwğÁ`dÜŸ¨9&Ü?ÀıLʧS4M™ŻGbñÚF Ô{ëׯ<6¨B"½0ĥ˘ ó Ĝd"@(N ú¤Ô²*e”İ1§ACe‚ޤĈÓİI²ċPÚc›@7€(tƒˆÔĠ´b`”p Fúë6=Hˆ P.säÖ\b“$„ˆĈ&–šZlĵ0‘ET§ `}C14‰ƒÓ*­§ßĵ¤Ë$x#9Œú˘ƒoF˘g‡=½g~@ôž˘ `’„Áf\–­yĝ†-EèĈ„32°Ŝ‚jD FCZ‘.xƒš’lĈH‹d 0`-Ċ aˆmàìĠvĜrï[ċ]*½Ĵĵ­1t‚$š¸Ñ'Ġ˘YJ>ߙ&Ĝ6^„kĥn0LG$@³ŞÄ\̓ˆĦ‹é-A˘…a‹ 0Q•\¸! 8rĉQ,4İ‚nj(úZ˘Ù{g4üü)™P_ÏyÓf !˜"Ô4¤‹FQ%Ó dfµ,'RÒ ŜôaNĞkcë2Û!ZŞ’N:]ġ´„ΨCB‡]f‡‚ˆ?ĊGáDìÒK$ûô‰˘ùJA³Y:ˆŒ&!‚Ò5,_ı½ıÂĉ²MĴ[w½Ò=â·£Žà6;…‘°ŻKPeŒ˜d‰+lÙG™Wš.u'ŽÓĈı8ˆÉdx ÓB=ìRĝ³ÜĠĴƒÑğşòOŒĵ·¸W˘J(ĊÒJŞ4hÒ4´ġì„xġğ÷¸öàj÷AFx8Îháïh3 =§‚\C[jŒñf‡‹’‚=&äáA†(;JƒÌó¤U†K{&O½…Žž%ĴċÚ*”$ H_4ı!‘Qd$ĝœpz÷Sq™İ‹œ#,Ġ-[ÍPQÒ5%ĜĈñÊuSż¨Âƒ%HäpˆP˘ƒC4…eĥ-£‘ah m‘ŒÁš-a…yĥ ĥĊ·D Z•ħ‚D$Ô#Èm×_[>'"ì˘j@ĝ”•Ggf¸R-EÓiFÓ+%f›S]uÛ*Í5½€,¤P-CV•²"£a ŒW&Pè‚ĜĴ"mvFÊHĤ¨Á@†-TWJă…ôŒ JŒ´)F‚+QBÎ,$]QŠŬ( ò0&0UĈ(€†}`8‡>PBĦƒšÊ Z;¤(€mb$b=Ħ@í.Œ, ´…ŠŒ˘di RA€YI™hZ…Y‘Ċ„ÒŒM†œ,RÒ†¤Âm)›ŻàWÙt#-oÈ÷§ĉÖYv+LJÄ ˜DJ Š€2‹DPĞQVèÁc!q ƒwHRÁ‹DĥÓċ@wÄDz ú脰‚Ï?ÈF¨J"&`ÜGn @ƒˆ *ÂŻ …‚´ƒ@°*E‘#YşmÖnÚ[vK”˜l1‹— B™gbï5Ŭĉ³Üxx7xPx"v(Cqh`¤"1aÑaµ›*LfAµ7m¨€Dʅ m‡vô•uŜ+íMLĈĥä[k­Mİ6e’ôÈcYàkPÈ]Y0ħhKAĤ$1…× ¨‘Œ&aŸF°M4%ó\2bˆ„C™ kNèˆ÷‡%kħë{&HhÒa£Ħí²(H„]B̝2-êˆ‡ù‚}CġŠŸ•Ú ŸëPˆEU" żú  ’,Š „€‚È£,X"*ÁЉT ´›lÖZÚÉĞlkVYm˘Öj³6Z•E™iŞl­&ÊÖµ­óßZîw$)B”Ì—w $ 1Ġ×M›$’I30$ uĠÔÙ²@2BJP” É RÔ)I)@)I ĴÚÀ%ëy†…mOy™ fR$’fR’I™!Ĥ•*YR¤†fa´Ú¤” U*ğjŬt’@uÖş3$̒M4,°$’BBI)Gw $$@’I$Ì$$”]]ÌÀ ’@ É $’BGUÖë$$Ì3 ,²BI $’B]zĞ/y³d’ZZK­U]À$Íëmµëڽݙ™İİ!˜Y.ĥÚğ™…(Hf*R”Ĥd’fTİ&`I˜K×]$“M$’B”ÌI •$’I$$’I$“0’”“30$3++$55 ÌÂKe°2BI$3 Â@$—îşİ$şŬµÛM5êô×·³0Ì $4ҕîá$’I RŽêşĦ!$™’HiĤÓkşfI$’H)%)$€š½ĥĞ^×ĵ@’K,*TÌ P$ÌIĥë ͒jjI™JjjHYa!™$ i˜IJI³a&`iĦ$’HfĦe„€R™€R’ĠmĞ^ĥµ{^Ó303 Í43”)LÌʕ3zë hŽ·rI)@Ì$Ì3 ÌÌÂI²É$ P É$Ì$$M$’LÀÔԐ P@$̒LÍ4I$$—oĞԒ@“0 P6›BAë’H:ëĤ`IJd’H!e„„†šI&d™w$$ 3)MMI3 Íf°ÌB@’C2@,°C2BBIÖ­w 4Ù°İQ×p{Û^½)BJP²ŬÚğR²°3$C2I$İRLÂI3$$$ w]4Ó30)I I 4Ó@$SRË3VÓVÑÚşI#Ú½ZzôĴĴ )LÉ$ É$)I $’I 3 É,°²É̐$’I’BMMI3{’Yd„™ƒşŬdšiĤ€I™%)$™’I˜I Ie™›ZmkÛWWRJP$ $ÓI$ ›$$33 É3$ MLÊRC2JP4ҔÌ4Ó0’BBI É$$’G]ÀÌ{màhI™ I$’f…)!™JI$†ffe(fHh;Jf jjI™ Wĥ޵ë4ĥ[×LÉ3 P$’@ fÀ’”“32I$ J•3$ $*T P­×@@“M $Ì뤄™’™&`ġĞmĥġ½ïkZŞíğd„„’I$’&eiZR™’˜’H fH)JHI!YXYffšlÛµw3$Ì̒@“2B]×^ŜoxKŬÂBGvìÓI”’•Ŭt$ RI33 $ ’I$ ÀÌ$3 $’•ÚîYd”Ħ³a!%)˜H[-’R™e™™! IJHfI$†Íƒµ]ŬĞZ·s0—wŬğm×AےiĦ%J𙒁%–HI&aYXHI³a $™½xWŻ@I34׺IJI™$’IJflÙJHHIešh†`I&c×p${ğµZğ…)™Ĥ„&͒I ïMmµ^$3vÚşş„’JHfIJR”£µm·p“0ŞUwŻ^„„’HR”Ħ$’Ye)JI! HHIĤ’`6R&`VVI$„’’MĦJH„’6I!™ HI I HH™&`’„’iĦ˜HfffHIJHIe’ ŞRĞx‰ µ‘, ´ŝö‘ŝß?Žßßùŭĵż.Ï9mÇöéÏñv~[9òÉ_y$’îßä"Ŭf˙öû?oûĉ÷Ïżt?ïÛ}FHŠˆ_OoĦYûgϲžŭgÁ€ú“Ç•UBy ĥÏïôÁàmïཽQêóŭx_Ì`°ˆR*Ĵ…'ò& ”?­$OԒÉ1"¨ŞYI6cC†Ħ1"ȕ6 CIaìMÉ´’lZµT•(İD¤eĥš•İoĦÓj[Y[KDüžż.xŭ>Ġáŭ˙~kDœÏ?_jëóŻîÒ>$,Osİċ…b*wüûġD!ġH5·ËĴˆòĠùüâuîÌĞO_ŝŭü½|$Ÿh$„ydƒuçÏĝf^ÜûĊAĠġpàs;œÁ?_ }·ûñŒġ­ġöûcÑ]Ž~Ü,^0ô†š˜ŝ_9pĉ>òèD;ïʤŞ2DĦ1BÉQQ(”TİŠ’d•%"…)bE†~ìŭ+K! İ* ħ*UBĜŸú‚’2Ú,)"‘QU¤˙Ĉ%ĤD*H„aŞ((b‚j"’*:ˆXKµ†¨…²IıÏ̍ôUBR* в mPĦT™%b£)pÂ*ċ*S)HɘeIc OÑ16b0)IETdPÖ1ÒL’ĥİŠ•R1I?/!ġž>~žžĵ}>üÎ2K'éĝ„ċñw~ô“Ê6“Ǐn˙—;Ŝ„ŒË".°ŭĠÓü_Zœ_ÍRH%jC‚JŒ0É%7ĊĦ¤H [ilİiQR*@ZdGĝBÓI oÑ{ßġżċċú~ŝŽŞ—Çû{i éôc/ó_ĈġĉÛ’½CĊÇ·„Ĉ}d/ZoxfßĠ'ï6Ȑ(Kd‘lBHĦTFG$1˘”L§˙Ĥ·šŝÎużmžTG^*1E›÷ìĉµ_âo=‚|y߯Ÿ·ßçPûwİƒê Şżj§<Ë>•×vÎŝÈ6ÓŬÊ·àñôĝ Ò)I’ SZ[tşÒ´”–Ù*¤µ)Qm²­—*ċĤ[]â°ZIú#)*¤,ŭ$ÒŞXE#b*L’Tİ SñzñËӯ߅áò×ûzȍž™£_o íŬÁ$?Lù77”PJ€)óċ1İsóùÙü<ëG‰~߄żŸw„élÚ 'ĥ3úŭt_Ó]gĊ׿[˘Cż·/^gÇÔù*K$¨ÉVkşRÛ-•*ˑk¤U"İI_2a‚•PJTÚʳRĈÖ K5•ETÉ aS$¨IdĦŠe~3Ò?dHqò˙óÑçáñ÷Ûċż×íÛáóúëĈŒ’I?2 İ%((ùïŬßâlΤŭwGÇċמ„Á—àĝĦWOyíqŻkÙ%ŝ(ñ0ùċžŸ½¸°˜ĵš6ñl•×QY!ĊX… “*Lˆ•_!ĤÀCb,‰€´£q4,Rġ * BêDħ4ĤLGŒÈjHÀŞK‡àb 0Ë !"ÉX -ژ ĥeYlµÔ·Ú÷VQ0/QYĝóë÷Oż·Żë<¨ÏNñ?ƒ{î>0€Q =İöĝÇ܎ŞGž[ôùwäRUIŜĴ£ÖAİ$ídC×>6€¨$<ûŝ_~};ßMÜöñO™Íxï´<ù~)ıpŸ§ ,=|™0ˆĜ^Şl´·nĞuuuE´Ê˜Š‘U,=ÌŞQ~ÈJ6JF*QDaFIRÒ2 Ĵ&Eİ-E(EM’ȍ[Bd¤µ””*Sö–HÈ!Ŭo§§·“ĠôġÍû-ü˙IŸbŝ•Ĵŭµ½óV§çĵûĝıœ?UPġŻÇġuçżÇÒ¸vzû~‹÷Oš'Ċŭà€ŠÀwEGÑ%M¨µJµ#A1HµjIM ,ĥ #Ģ£ı:L7Tm*Ş‹cN_o?]knç?¨íS*Í$îU(ZX)Žŝżr{ô6ĵ!&F3öüÌ_{¸ĝ| lïùëıĉb"Ô>´É "Ċ–úġÙbŬ-nĠd²³+Qj`İeIá&Ĥ),‰–¤š˘Rc(Y xOt}½ùc^[><.{áÇŞ|ŭé˘!è˙÷ĴÛçßùŭë[èüGߢDiż†ne~EċWÔżá‚Ç߉_$‘),‹`™ˆPÂF d€¤ !`İR –­L*TcJŠRĊL£ĉ¨ž?//VĞżÖòâ'5BԌ °Ğ-µi-VVMĤÛ~zŭ$ŭğŝÚf†˘Şr‡ dïáñÏcéÌ|ÏĈäl~½ %Èyƒlˆ¨Î‚•}ĞİÑ_áׯ·×‡çċœÛöOFĊTú´L$İTd”Œ˘Ñ–¤ë H”J*F"Ĥ”‹RĴ‰Rh5V[,ħ$E,™1"e’I$ÊfH%*BĊ–ë­Y4•–ĊKetT2…%İqĝü:öôöúú|~Ŝ}<ğxxĝĦbÙ"ÔId=Mĉ|֕ŻáçKò…ùkLùG¤@IĜ„™Mï>hÖI!Ŭr{_ċĉèG D’Žé’ˆ$F Ä`²òX- @<Ş.F%IRZ‰ERT)* JËZY•^–ŬĠ!¤aVĠĞ˘ÈİáŬóöççĝûïéçíÙġ~8ñQi,Éèñż˙żw^–è‚>_>_=ݟ ğ‰÷ëw’Üú?/żğÎC²-xöĝíÛ^žZ|¤<“¸²D¤”TJ*2$ĤŞPŠ2¤‹dÂZ²ĈĠ›R˘˘ŬrѲlİRL%%ZÉL¨9Ǘ?<úü~^Ûy_LòÛ~~žŬDŽ’T‰0yÌ|ŝŞŞ„6 ÷EO‰ˆ ß<|~8ÏQûµë×ÏÜò'ġ?b°eRİeĜħq™[wïu½-%4Â1ROÖi‰ UI’J˜@£. @Żéï<üçċċóĝúŜ·Žw,„ŭ>“>‰ëÁ5úcġûkċ‘5×g̀}‚D‘eE‘„BâÄ’¤™#*B@3Ż]oÏŻË:üzßéßïé~_€Jöúuëúĵ£$îÉ=§ŞÉ#û2 ’,>é„l…>EBĦ¨SeÌĞqDŞf „ŞŞŠ˜TĊ2­µ-µukĞf™³#(ŞĈffH§úü{x÷yùzû½6è;;IbĤ*KPĥż'ûŭ˙cŸÓÇ]‹>—]rOZòÖpw6/ĠòÖüïŝVZH]/íÎQɕғ]ŠkŞYjş²ĥì­Meˆµ”µ’ĴÖU*’ŞE‘QT‹%ILZżóíˆHħĥêŭŝW^²˘Ċ%*2ˆĊ"Š˜IJRPRâbb)’Q*¤Ê‘_,PÛöóPû˙çE×ڛ“j%?Ĉó.ĞûSE3­ŝ-×iüşIŭÑcù> ‚''ÛċŻí™ġögL÷~÷íϗäwç ·ÎÛ´Û.ġ~qôè†(ĊE¨™*İTTJ)ŭğ™‘ŝ˘É„bŻñĞşn†ĉŝ;óUKŻù?rñ˙8Ô 7°ÙĵŽIŻâ‡ÀŻüÈF'`e¨@Ĝżq??\˘{…T Ħ4•X˙„Ÿü$ú>$Žúĥ"qF£ÉÔi7+ç&I;F­‡Ż÷S¸ĦˆË ^ˆ€~C>›ŞĠT!D¸^É&ÖgRä€Ñı²Ġ‡]çnmÛ.1b›Y2)Ûf§räm*îÁİŠœFĦˆ‡ ÏßĜü§í½oœû×nş™ŭâb&Ĥž£ éĥ£ĉŞ ÷}kÖkΈ‰ğ"!ċğ†ı†¸àĵɆì|z3\Ċ U1s›*(ÏnôĉdKŞkö"”1Œ;Ħ?D1˘)âëÖ{ìáġ|k£Ó„("gn´dèÑğÓ‘LÁŻrĦ “P,“!!ƒ0ó2Ñ%˜,:- ]>‚Ž£˜Ž£ĦhèĤċ")açŜoÍò8>ĞœV:Gmó7ÄÍ]u…>2hòyÇüïnTü'h*vAPx˘ Ÿ3ÌXÄOÁŝgöğHŽOIu Cd>²0HAà d``S¤v?şŽ ~ƕĉ{8Á$#÷?Wĝ8'ääp}2İÙ&ĝĴï‹,w WÄñW|HDnÓÄ}Î9C8ûÉX°ĥ^+­IĤrı –I›m&4“e$l˘”“ 7~Ĉ\˜ó9§ro7Sò‡ħê~˙ßoŬĦ}Wëuñi-}ۘbR–“vXÒġNî•&MZħBmÜ=ç˘=šŞĞ eĥRdcIDcd„Ĉ²Ĝ,RÙRm“ZWŭĠ^ŻÖ1„:•ÇÂb$ŭîĝdċ#ÑŬÎŻT‹&öÑAÔĝÓœR²Iû'uĥ†ˆ¤¤É4RĴĥÛU´Ÿ/Ŝµèsrzñĉv'7zBnĈ¤}j-'écŞ'ħÖ@ôˆŭH9D|ïÊ˘ù䵙—Xj¤­’dŸGâú$G“"IĊÏñ8=Éĉb>/ĦÌöGÇá7na[ûŜ‰:6r{÷ġ˘ËjĴĞbTx3Ú ,¤Œ$1$Ò4Ԙ))$H"#@&Sû;Ŭö‹ğÛ|Û^ŝuĝUï7;]î.[Ĵú:$4’&ż5 ;)ùrXÔG?xs4xìÒ„³ˆ=!–Ĵ”ĥ¤İUˆts‡z–×á_Ûmù_ğhÑ`ɤѣ*µ £lĥ[YZšÙĴŞm£Rږݵ”­Ôµ²Û*³&* VšÒĥfÛeSVšQĤİU–mšÙTÛ(•Ĥ´–ÔÑ)%ĴÒĜ´µbVkdÛiVZÒÛ,Ú4ĥĞI-³[R[ĴÑd‘d•$((•VX(°šjšÚÁfiš%3&šÂfLb3$d´–) !’d’Cb*fD†c2)†) ÒHH“&$%#"˘dĤl “)1Ĥi”b’(I…3I1)-0¤h’6dXÁ6E2CdĈĊ,Ä#5aħLŒ$T™šad"‘ˆM £R"fQĦ!#$›HÊÛaİjÖĥĞÑZ³(‰"Ċm[òİĥŜĠoH9Ħ‰îtĥ¸ÊĊ™8˜N‚žmĦŜvÓĉëkëo™ññşT\ú\ _kV1ħC\ÎiQC0’'"?×˙ƒĞžÖĊt\Uv˙ħ‹µ" Húi£ŠBüZÓ"j ˘ñ·8C²&…ˆàÑkÊ(!–|h˙,ħ|€À%O膉­%ˆ½ ÔĵñG$RĴvQˆÂ¸wŸÄùĈÎhn8–L>Y’Ë0äé J–X;:œcĞħġ;?€ŞtĈ‘$ĝ’ŒYe—îdEŭ İÛaŞD§6v$ô<Ê)°7ĜQìCj¸ŝïJž’Zĥ@¤“ù'ĉ˙²<1üdÈɒbgnċ>xaŸM>oçÑ$9Gßw+W—§íŬxpIÓ\§sŽf2ÈpM75Ŝ”Ï^\²8’( ùŬİ>uŬÜÚb‰ĠžŭĤ²={Udiô‘ŬUÉúìâ+ŒŸ5Ŭ—3Q9ĥ†˙L<@Xáaş%¨¸ƒB“ŜZ³,” Úĥ‡ÒrëĈññ2ù.I 1ÑV e„ĠTԌ˙kòzîì’Íŭ+쁖³¨€¸”`cöï> 2ÌàĠU‘(‚OYô$Ċ)Ĝĸd †J îڐ*‰(? ’Ó) ˆÑ”äµ Š›("iù#dšv1Ä£‰jÛmíF[RÙŸÑŬ6+fÖjÉŞR·ßşĦÎȚ*$á)B–JVŠ˘# …RĴ)ƒhe†,U‘–C K&B…T†İŠ›É#iĤ„UB6¨(TXA DŞA¨ j¤T*k›všÉe²ĠrĠğei+ps Ì3 3Y•+(ˆ·Ġğw3È%Ž$ĴËn™Şâm{·7‡vuï^ö(§w9ĦœŞŬŭÀUêêQ,…†—ŞÄĦfĊ\™ FdœO)^g1䊅̒ccUĠĦjÇI]p§M%E„’URȜ+šąXgq&q[ ·Y²šYÔ×5˘!‘Utî‘L=Ì2 =£)j„E1`ƒF UîB"ŽlA£ŝŞ€"ğIĈ!ÊyÉáıXÌ$İeŞĥÔ£ƒ$e’ßU~šA#Àƒš~ĥû˙ĥëUdçmĥĦeq[îšj]5…,‚şĥN2lA˜µ·……˙(`ÓC=˙˜…䵐E%8OıéâÉëuyŜó Ob"uHlB?ȍ *KêK:PĉeŻBŒ+*-Şe²·•%Y0IİI½P›ùCħŬ·ßpğ·´U7­‚›˜`Íhı™’˜Ûh‘â1’ÛpK d½f0ÌO‹Èğ{]{’ù×}wÍû\—>)ç“oàÚócoK:ußsçקϨN9‘EŝáUB–—š" ‘˘räFƒ\|Ħ3z aéúFžżÄÍeü ’D$ –A,d@Ôl#miž dϒœû hBÑ2° j=”pV‡ħx ûŒ()”Opš×ôŞÒT[Ûm~–ínŻÔó{6r'*TxĤ˜›Ž°íß\Ë3ämى–ĵÊta\Ž#âAOÉ"ÛʵVޏ†cfµ1˘u‡Š?è{ž##ëÚÉĜ%OšŻrH"ĝġ‰Uw# GׁÌèÔú¨Ñ‰÷ׂÊèù|ö–Y'şPe:rÒŬ kEĉñibŻuËòıa•Ë2ç—GŬ‘­A½É!²³½½>FQŒİb“Ĝŝ›é‘klf„eD\!*?Ĥ€ù~I$CÁ0BÌÖä²ŻğncFÉí7’^rNĞıcgWtÒÈMâÙÜêL+£†ÙbänïlÓ–¸äVGEi†cğˆ ö„’Ä•*Ğè“âǤ) Ë0ßMj½½‘b`ñeÄ%‚0ħ2@mĥ°‘‘¤ÚĈ BT€ò¨ĜŸP£G[ëèĞ‚ öĵġœŒŠXw1…Rİ[ş”ÁM8•CÀHxï'—”W³Ó2ĜÊÄÚ`Ë$‘Cl‚şƒŞé\ÔÊĦŞx…&Ĵ,0´~ĈG:(²q‘!àÇ1,’+ĝ„É`ÜcBp4ïZ³˜ÚT³ÈÓ ĉG’Brxr‘ıâgrÄùUŻğÑ÷+İ÷7`µÜ 5¨7ìƒd,&ħMÉ3îäoÎÜ&„ ž+Ò8nd&ĉ"KpA`ü{ñ—ƒéÛŬ|Or ˙†:ˆ¨ĥĤ•(ƒċôdôA ÛÙnCcI’grÂ0ì˘ˆ²1cŸHÔ‚–-²Ġi“Áɍ’Äq6Ġ,•)+ûI:,J£ŝ‡Ĝ˙0|ÌĤυ_p~ƒîJ×ċ bmĈZ'ŸyÜtu‘&*6J‘ĉ°“¸˘rÊ̸ǁɰö0Ĝ­‚Ö£QFĥ˙p‘´ÍĞ(YY˜Ğeƒ6ĥJÄÎ'WwUĈ4'äOˆĜZ)GÊÄG›ÂT¤b’GÒdöŞñÁ“?Â$Nj¤ž§Í$ùIÑ?§ĠŜžżïg7àòħoCëĜ¸CÔO“•:³v8%F{a^醤‘F9š=ƒ‹£¨çVò'5ˆ²l?ɨÔYcFFŒÍ?‰4숒QŽÎ}p˘Z†c$FPwQiUâ$poĜe™Ô‰biÊH|cÍkgVíÒH'cc äŜH›Š%u#‹Â „Gҕ ì›8Ä7Ğd›+İÀÙİċ'#1mK(s+Ù;ümUž‡3‘¤r;ÇĊĜϧ×íW÷xÍċ\ċ‰İĈjUĊùŝNŸ€~sRŒ˜Ì…™lÉĝllgöÙ2ħgè³&O²ÏÖ-Œ">ĊB}VOUêĠ²Ĵ1˜i°ĉî‚(% فÚB$2Z¨R?#ŭÊaĊ•Ùùü‰'İÙëĝ­y87ry>ïˆî $Ñá‹íWO–Öy+hĈ­Ëq–ħÄjLsv½Vı'BÊqMm™™+oŻĞ¸èMŽĎçŻ{ŬU8› úÁ$#y }ž‡ĊRJıJ t#èŸ!ĝ>Ĥ!>Y˜ÖİÌx\Ô˘4Ĥ²bŻ-Î),MN2pżvóÛ0ۚyI ¤/cli´†í´[Òİu°Ĝ†ÒC’phĉŽGІè|4hlœ‘RcFÁ2AÒ¨†úĤíÂTî'¤§S9v›éa4[¨ú#MÚ7Ú×ÉóÈîÑÖd&8n[œĞvS¸—“}”M]E`Yc‹‹MT뒝¨A6X;Ĵ‰nmd 'œLl‘•-‘HÉ!Aµ&ħ”¤‹*œ21ÌBnœMĜ쐀ż˘"!st– &1Œ( ‘0cŭ<r…†([³daž…TE8p@Bĥ9„˜ÚÄ$4Ĝo¤ê£·aöì9ôŬ é.¨İğ¤í¸ğŸĜƒ½Û@Ó zKމ˘§Q“Èg‹œ¸ ™şĤE:emIdžxX vÁÉĄ†`ìxçËĝ£üŜ›Rl’˘_İ·3ÚúbbRċÌL:k 3àO`ë_ž^L Ĝm3 /l6ψ ”`2>éŞ1óœ9ëȂ!Cárâ#”a—'gŸ<Ĝ@ŜŞĵJöJ<"§„Ññ`RM´TÎ\Cċ‘ħÁ7eı„ĜjVËe2‹šÏ ›"İZĈIÙŞ’ȁXİŠB Ébŝù ’à‚!KIħkMŽì˙Dŝx˘ÍƒQ…Ÿ'$ ²Ô#Û+ĊéJ`ÄU UK2‚Š $’áİ•¨À[ Vš ‡ƒnÈë “Aa \aíŻ~€Ô,(Ġ7µAgı§Ù[HyÏĴˆdóʰĥ()K!8…cĊFÄÙ1ÑÚĥFK41ı‘“PT’L+°Á­[³ĦĈ­,˘È„’O–Lb‰çVvG·`h·i֔-Ž1xgì}Ï RBHŠn#§ /ƒè ‡`äwX m#H›b;ġĤ$…ç’YÖBâ}+E|³ U@î*ż#X5ŠŞòPÖ³›.ÈZPcÇ>ĥ\èAwvˈkM` Š‘€||­X<QÔĵƒËàĊRwRŸ€ĥcuEJa,ˆ6ħ,FÈ˙ (qv‘,AeR‹ NF†ÒG7Áĝ|Ëózâ8)éáyĥşë q›ħÂëĊ݃"½Ê^ĝ˜Ĵż8 ‘zœ8ĉ¤oŒ‡À8y7ċÙ<֑8CĝisÒHH2Hż]†m8$0Üp“ÇmÙ„ !`[c9ħc~;ñߋµmó_ïÙòL50ԘÛcdŜxq€\]"Ʉ—ùX´hŭÎŻÓo$žíÜd”ú‘ÑϧWS`ÙÛôŭí |ĴIÈy H¸Ŝ¸­ŒËĝÁnŒÔFŬkV9Bî|ózùç´vo9Ñ ïb `³w^%bWĈ7ÍëMߏĦ}œıÜqĉ²;¨ĥ`نşâulàWÁşxœß/“îÜĝ'Sèú-~P~ċƒÉñεĝÌşÑž/…c’Nl, ‘Dî,ˆ™@üêKù1¤ƒ=íĕͧ2ݍ‡(É£ğ‹…„ d È3ÊċDŞ…R–š|€âĜoO Ĥï?Ġ“;xU- edú/ĠçĊğŻ„['ÑßVU²ŞÙVÖHI$„žBĵÉħ>ncÂh`?İá“ŬĊ…còG77klâŭžF¸Ĥŝħ@ÔWi@žäż’ûÏáżÎœówŬ”‘ŒÜ–ÑÔMŬM:Q_DÌ\DLĉ&\9™ ”Ï!1Ò_$WÍ@£÷Şùòú}Pc-˘WŸÓöĊÇ>Ŭk[뷏x´ĉً:/Nçê›wIï3Ê !ŽÎŻs× ‚* ‚Ş9/ıžoR@~ĜT£GËĴ˜şor…aT„ (PġNĤġémÊĴcœ*óío‰Ġ"wƒòèr|Á::ħ1dŸĈH‘î’ŬĞ'ƒÁ&ÑİW“ĊÁ,ŽyÊ’Ĵ„KRZÖİ4h­dĥڔĥÙ*­ú;slZÙŜdYV*¤§°èòjmdħNĈĈ£WntcW5ÌëwÊ $Yŭn´I¤ÁàĴaJ0`Ĵ>O°›œÇGqŜxĤjÚEn~İñ9œ'·ëo…ÖŻÒŸÑŞggÍxŸˆÜÉóÁ§çdílÙ sœKÈ}v,à{j,X‹N)›jÊ´„„`z0Èĥ‹oŭé•E˘ÏĴ ŽvÇĉ1ħîâ} I'…ĵ’öP]ÑfM†#Jx7–G#²D„„H =c‡G§Ĝltp|SRX“ŠTŒ|ñ7<ı"EUq‡ÜŞYub<žo²Noàô>& â°•‚:¸?V?3ö|Ĉ=³2žÍ‡ĊğĞgÊI>§ÜÁŜX‡èMĠÂr| „tOŠdL¨R[B?UM‘)Ñşb:ôdDsHâY$ÍÛ'ĵˆq!`Z‘ħô|yž_wqÔܨ}ŭ<°èŸÊÂHmgäÚĠ*•Ż?(vç;˘3$ÍB™ ˆ’Ĉí‚*+ħÛÍ·İŻ7.jĞ™Ŭ£´ÈĠFB·üŝFîW[ÖÛʆIX¤–a2ͤ£äâ?3N)[HY$¨żF˘ E?r’Ÿ‘ıç{bb!òŞâí­”v‚Ñ•*`ĊĈBŒ„) ܒÄXDW=Ħp‘RßĞZ€5lŒ pÄS1ĦFĤ!\ ħµ-$ÎëË²Jû¸ì“aÂB?ĜĈ›8á›UĤ „T’ˆP…‘mCÁš“I³Ú4ŬĵÁ1b$âĠ[´:=\G"›1ıĈ–Çŭ ìäî9sp’ržÀß²¸qqı£Šĝà‡gBà. &…ĜAVPì0ĈË*ÌOËÒÛJïŜŜ°Iê“"NÒbĤĈ!̨ĦĤŠkħBĠ Ù€ĝ_„‘g)WMˆÉlŠ&­•4˜Ċ Y*B"I*6’Ċħ£)Iİ…F*Ì Ĝ°j2dÉIYŠÑ$Y"ѰQ­ĈÚ5QF*(ĥ‹!%d0Ĉ2S-ħ£l$‘‘6‹b*ԚajMY6ʘĥ˘d›K-‹TU$VMd´–²Z–Œ–RU$jÉmżkÖü-H~ƒÁË.3ċ‰\àqqàƒ$ŞEf0YaUòb:Èï‹ Ğ(‹?É˙‰mŽÛÇdÌ̲´ĊIÀH|D)pP‰Mdï¨ hħ‡—Úmİúè½Wsm•81ŝŽüĥ)àI’HĊ™ )*D’=l‹E’ĢˆO²Ö¨ï= Keŭ³ËYŬžò*bE<Î3rwĦ2'5b CWOnŜÔğŬ‘Ôµ Üc1Ì7qN,e°ħ‘ £ì`Ä Ph îCĈúp)ñk-7?iùPÉp°n=^ç1f#ġÈC†ÈÔİcşpLá˜×:÷vé)׃ Ž;ħŬ#wUvçÀ6N=W‡ÊfŒgG˘ä)ÚßVYMN/4cX(ŻR̄EêÎ˙B|FG?U'e|:>mĜ‘ mˆ‘TIí! 4·SmnğbÒë*³5mbI÷E0­dJĞR'ĜÁ>† &äT“·¸$:I&¨Ü¨‚Ì·–2ĉbœÜ>Êvż†öâÓşíY[+idىŠ’K$RNlOäÀĜÑPüœÌq:ħ}2&ÉQ9}^Ŝ6ÚĥHÄ[fa`£RˇÖ;›‰FÏ&ò”K_Sï ’QECijíúkU\4Ô%WZ.JĊŽ|Ìäĥ3žúĵÜÌ'R~͑œÖdÍIàâİíĠKZ“BžµmyĤçĥ͋2Ĉ˜µĝİı7’ Áè"İö„HH ż²ŞĦĜÄĜSäU&ē`#ŭ’AŭBY$N‡b ‰ñHƒd$Q ƒÍlbs÷ĴˆAüŝSâlu sĝÌOÌêšóuqh­ĠjĊJANİI;şĤñÍVTĵ¤âPŻġÁÀê*ʕJ#BµWèrìü*änâ(’ú…OÀĝ<í$bȁˆ¨-CE(ŝ.1ŒuMšN‡NïIŝ‰ŝó–Êp’IôOÔÂŞê˙˘D³ s°lĉ•>É>LtŭOġIÍÜVÏÇ£wrĠöx줐ìħĉèûĥ|Oeq0Ĥ60ù9¸qĥB­‹gtTú%•,İ0ñ‘VJšJ=Ôò5&4GóTqs;AAAùхŸ½?;ŭJq™İ?s"ü‡˘Lw_‚> ·IÜİT)dFËŠ}Ĝ‘ĦIJ9Ÿr‡ħ˘6FŸMH*q˜8ĞMš=¤2|MÉĊ’|Ôi%I0ĉn”“xŬOÇ%DX,‘"x’˜Ž?FC[Ĥĥ…*¨^k1ìɃf”ƒh‰&6Ŭzí·­ +dÒÄT—ġÛZĤĦ‰vž3H]&0̘goSÉÙ1Ḩî+Ħş8'ÑîvZH˘G•Ĝ¤¤”‰ŭ>?ÛÏ1ŸŻ˙\àáxpáo×ïöCg­²œfYydr·LJİÑëèĊĵ”ŜFí'ĵח§Ŭé½~ßĥóѤk&h†cUQvC1Ä;EĵĜû&ftŻaf˜y*,%#:Żo$öÄ0rÙȘ0”i0^j^÷S™ÍêŞŜÑcNuú!ZQ²ÓD‹˜ÉXO£i‰Ş•ŭÍŞYş¨Œ'7œmµ£ŠšĤ™Í„C°M˜Né0U¤Z"ĜC¨b“áK7JŜ ‰…—á'6í0˘ÙƒLNÖ¸`L™Ş—)Ĥâ2Z6qX£·—ÎöşêÓı#ê~{B˜@Ôy(Tr£ñŸ2‹4“ÄEŞVğ˓]r8Ñè›dŒF‡á…ÄM £³ĞcŽBËĘÌG˜qëwç~ˆ=™Nƒo×LĴïĞĴ¤a˘ŭ6ı˜BäQü´UŒŝ˜ÏŠƒG´I:Uŭ˙!ëCÀñôœÚĦòS!úŸĜsŻn½Ğĝ Ÿقl? ŝĵĝOŠ˘/ •LËĤâTÀBSL‚I4ÂJ0ˆ˜™‡ŭëïĞî*ñÑÒΈ¨BÉi.–0ÎEˆyšżY¨µŞbĊ-°LàiT³5qFháÙĝ'}H"Ié D“÷ıy=Ĝž~ĈòED‰d‡ÎDü’'ÑÁ£ĵ˙ßè|ƒh}cÂD÷ §‘†JµHĤ‰'î}^¤ÑèÂ~pIĝ*§™Áóġ<˙Ŝà7~IÍ̛?¨œ!‚‚HW’ ’xmmVHÖİĴ'W}ZÑÎJáIù>ğԒĴŞ7‘!Zs&äÙ'h!KP°ĤĦIÍ_ŒttÔ7²^8¤ÂÎB#êT‰òYĜlÒL>í۝òY ϚĤ$ÁĠó ‰'ϳĉkQ†Äŭ@÷ÙaĠĈÊmÇ×½½çI ñIŒßc‡Ù[Ë#M>x;Iì:‡ú›CÀ$dV˘TE@dPî² 2¤’5AĞd$E–FR,Š–B˘¤„Ş•fµ¤²kIĥ¨-I²mĥYĥPU‘%Td‘ U•lmcF•vÚÛ÷ݵ4¤ Ӓ2­†š>h  ×ĥùZżz\£[hĠXµ€À0ë I“EA²Ë)X4ĦJ•>Ğ ’%M­’ĴR#N_[ċú&³i1°b–÷ÔüôÛL8?=ı[ËcŠŭL½ŸÙ˜A³Î;4àäúѝ ÄɀË'óšŽ ˜“ WñĝFIĝ£•˰4(AŠÄ÷’HÏGV–]…d>ÂqWÜ`.Ïi%E£ƒ˘Ä ”˘ˆ˘T‰Ô­~$Iş’ĦñWöŞb_E5’Ì ‚ĊB´YfMchş™L—]ÜÍ ]9 9˘!³ –x–6ĥî£żĠëġŽôpôzp…PÖŻOysĥpı6Ò5†Ĉ8!(&„3 Hĵ/,­Ë˘ &ʊ(„ÔŞU2’‚Í¤ÒlâX‰§ÔrNÉÀm'yíÂá˜pĠ¸wĞÁ$#£OĞuı÷÷½íŻÖù_" Á£Pl-U-ĞW“HŜzĝ‡7YÌiĜġáó—‚œ]–c£"to˜v£‘Ô8ғñŽoo:šŠµO‹‹Ù?2TŬĵċbĝ¤ĝŽMĈ9&$Qŭ­şË­ĠéŠeĥKmË,ˆĈߕvۄĈĜIƒ5³i*È …(²%PYdáŞA‰„Mš)‘b.y´š)ÀİıfÉ6bŞ”˜¤rˆÓ’•£uĘݓAÉ' "ÔWĈ’ûžVñzœ‘Ħ=ßÌÇŞ¸éOcŒB6wŜn7Yİ£għYk&1nJ4šw5ĈyúNi7=^LM–Cĥ$ÓÉÑÓsá"4ˆ>gTú%7:<Êîòë5­jjujx§šÁĞSyĉ¤,Ğ•ó& –@ĊAŠERĦ#p|ǟ‰0Ż.`ÂIm´²Ç -˜•gr|Ħ;œ ‡xÀ{Ż‘=(üɃe_.gŞ˘£ƒRUW“늈ˆ˙LX˙`vsĦGAcôRĝŬ\ĈŽĠ˘q1ÒĞаb‹nŽL?]Ŝqx$£8ĠiÌÓxh>äÏŞp(öĝ%…Ÿ#Ҏ äYħ<|:­gG£‚$ICeZ²µ(°žİïѲMЇġp\$1C ³*è`ˆà,,lĦR"ƒ¨ÒcFˆŒ‹°HMŞ›}Wz”ÔE–\abžI †+‘ɸâ›ÄÓü9Ġm2–3$Ä͇CR:š6r9‹‹F4œÍ¤ i‚·iSÂGù"Iñ<£Óıl>'/dtu;j쐙’Ġ¨ŞUĜEHĞ ˆg˘$sUl ĥȤÈİFÔ]8#£*µÁ™ŒÄŞM UE.ŞŞÏNÙ&ı7ĊV5[b™‚] QÙ˘Œ*@ 3G›Aħ³D”ħ†ˆŞŞÑ)†5WGħ0ÑÁ&ŽŻğİ÷“ óâêÌbNNş=µoe™rFd´żeˆ!„ŭ‹“ M&bHĦ´ŽG)VÁ‚…*İdİ"˘Y²mJ–ViĞô™)-jĉ4[!Q´h½ŬıµÈ£ğ¤ĤmÒĜܨŽr˕1›WŽëtڷϸÒûgˆ9†£/ `HD˜YB† ––MìƒhœmWo“ë˜ÌŻAô)DŸc£ÀzûûtxîŒ9_*2 ´{YÑÚŭü=HÂÏȂƒBäh°Ş”Ğú,Şdn›Z:N*HŞF‡s‰Ôw7e&ɑ™ĥwğĥÙĵa2žŠP²‘O¤’G¤``‰wdAŠ4Ì4d2Pm”òŭäżÖŜIì'V†$ŬĵB6荎Ĉ&*Ĥe¸›–ËdTĝ*HäӓÂхB]ÉÒCí#fÒiè è'Ċ’L4ä‚Ĉ2Żû‘`Ä-<™²Ġ;ßbaıăĵÎ6Óü%xÁ A,s"²HİüĝCÊlËíjk½Ñîĉ8HNˆä̸Ì#³ O”àёÙëÈI½:[rœĴZeš·Y<ĞÊÂ=lˆŜĦĉ–C…‹b Òˆ¤"”hF"(Ŭ>û=[*­ñKĤ*Ħ*‰¤¤ê›â4”ÉĵÙ-ôÚ½îħo{·Ĵ´sNşŻuŜo^íyŠĉĉŠónžËȗ•÷[›Öùß/W+•y/{ÛEyyäš7’z]î£'5ĵ߃ĉyÒĤsyħġŜ^ğ‘ĵŽĴ’]6ıħsĵë†ÒTkWğµ\5îö™’`oÏC˜{2qJ%`H U™8JϛmEĞYáÁ-Şçdç<îï<$0Ĉ5ĥó\Ż/.sE}+¤W›âċħĥ5yµ=u^î]ÛÏJċ°ı M¤À´²Û4CRE×wÔ5/^ö<ÄkıWaF)–ċG0ĉµÒ=nç52ò4EÁİd\Ş*˜S%rBfu w}–×DŞ‹²G ç2IÌn›şí_yñìY%uuv+³b˘Ö bŠYmn5òMĤémJìğWİ²F×ÂÔ)¤YVTF†•Ò È Ê Rà´D‘í ëħ$×fĜĥâVïogвòñe mĈ–à°‹9!$Í H`›­˜Ĥ:Yˆ˜¤iší(gK\͂Û-­RÛoMĝÀ2*Á\UŠ+@‹ C@Š(6ôÁ°Ä ú ; 5ˆ„˜ßô8:ùĠN|Î6HHrbċñç ›á·8C§ä9nH‚H²"ä *‚zš–§ĈjŬIWa&ï9g‘%_eÏĞëkìµêS4tÊbâĈ‚Éh P„UbB6G²-A!Dè’*ÙĜ£y[³U[RF4ĥHšŒĦ’RXİöüş<µé­ŭíšĤk( Ĵ›*ZóäĠ¨‘d›Q²Ĉ¤Š ħ,QjJPÖÊ[o•w"̌$@U÷˜ħ_{ş‹LÖR–Ĉ(txN+!!^íikEòR÷›_ƒŒĠ-$ÛR³iĥ‹X£VŠ6£b´UHâêêÜl²†*A \RÔ0dÄnE2iÊɳ1ˆ½ĉ6háYN $0ı4Oñh l4}ŻRÄĊ0(†ô˘ĉ+ù áÇXâĦ*Ĥ ’ñœFX4E0Elˆ”-9 ZVJ$mgTî8E²ĠJ˜nĉJTßµµ^ĉŽH²'¤áÏÖC,–“,Ćı\ԆĈç6ċşmµ­ÂĉHĴÜ(ùÂyGí´ ƒ˘)2GĠZ8‰‚#a´¸ ¤„I"ż7e·5Żê’˘’‰5&ĠFħEE´Ê´[WÔµcZФµm6ÔÔ+œħU–£VeóŬs[^j¤Ċm”Ûk++Ŭğ^›mÊŜ"Ñ!l ‹m (aĠŜ³4ÔÓMoĞkOƒD¤KdQö›˜‹yokyW8£L/ŠżFÜó‘E_Ké[EĞ⪑C{&ëeƒEIU²L'š°­G˘SôZ›I8²a²£-ްàXğTŽKÓA°ÔWñ–×ŬħĴ%µĝ nʵö›>¤Ñpµ¨`  pGGU„z‰¨¨„ĵfŝ”p^ÀLŞ á1ù‘¤d$[´ìc`ĈĜVĈG½´ċ}+èى6ÛÍìèI"à èƒ`€ÙV%Œ$ŠÈÇŬ0cb)R˜²;Ĥì#o=Ğa u@5rcHŽğj‰•ÁLpTê‘ËDë#Äq9D53DDÌŬÀ\3O-ÊÔ⌛›£x£b­lYuĞ[›`àF’‚… Ó6!C" ` ­˜ja_DIü™›İÉ&%İj ­ÌŽg¸0²UEa­DT\€)d@²MûájİÄfl ŒHdˆiü§iĠƒ‘\UÉ1†q,à×$ßÁjğÜZD……ƒb;9M–Q"Q K,´Żĵ ‡ ˜e!fiÌs ĞèBá"áîb”Ä$6:UrbĞiӌCbTŒß )NjŠÉÈ2lƒ"Ĝ+ġƒ)E0ààWŻ=„œĠcıdĈ)Ċa*0‚V ĤQ鑔"Ê:dôÈYCd l… éTœ eWĉ²iħ/^²9?ıJİ)(UO7~ûlƒäa9H§çˆĝµ'Ím²ŭÂÒAMÓùHÈĉ ŭI)‡sĈĴUPÒ¤OĈ ! 6#œCèĥÊ²Ë ÂÈ-˜™ ĠħĤ &Ĵ–X)IͲm %1N—ĝĦÈ_öġPÁÍÍ$È(iâ˙\£…´`ô<™gâzDĝ0ĥYqĥ˘ËMRÊÂôHÇÁJĤIGq 'Hî:Şsû'İŝÎİŜìŽáßE²=›$îċnìGd{ş´ïuv@>A Á>ÏëĝrZÑ$%’K·8„rŽÏċäÉ?ıöûYġŒWĥÌYáԟìY#¸ĝϲž_w‰ìò{öûls'‘è”}ĴžzkRk4‘N_73éüOÈ'²#óPpO§$…,Ĥ--I­b¨Ûm*‘D;ïİêêI>ÈIÉĊ'àœÜQ³úÉŬ!?âŸ0wħŬ‘'´NT0ƒ1I †Á­N¨„°aûİy$n ˆŽ‘ˆiÀÄŻÌêä’ôœgYOI”àŽíŭ DüêVIU5–ĤĠ°[5­KiU6ĤĥšÔĥͲµŠµ)mTX´IR%J’OÙùÈ$ġ˙0IàqL>ËFµ&£äÚ!ŝÒ(…:żÑ;)àwŠnC‘ħİ< ‡ô=ĵĴ^÷ÙĠàö²ĜŻ?ezĝğI ŠŽç'Şu{99‰d’HXó;Óŝ¤=BĊOÈ˙$A=cöîŞTíá ˆÊI4X0¨[öIr‘Mġ+›|$›—1wwf=-Í,ŜifİIĜe“è‘ĝ'ña?gó?4›'ıħàZpCŸ5:22,:HYÈp'ıÙÎî2_Qa Ğnl9‹˜z?q§Ää„âîywI²u9î#÷;ŠhñJĜħÉĝ¸8D‘m•jĠ²U$ H‘‚1WAÛ£ĉpô; ojĥÓc„•ħMœÒtXMևgžBŜІ­˘O˘˘Gú&Ê*£ónpV¤ŠY#ğ­,Š*á$U @† D.„Ġ’ÙŞ–L2 ŜLh  hÚŭà­AdB”‰¨QS)LSsI”-m"Câï*›¤äŭ :ğ"z&›'Şi8utìHžż˜µ?8$„q‡sW³¸ú³ÏÑÂċAŭ>ÒÛ'βs‡D”’Q$DIĵY‰Q,5ˆ~ğWó·H¤b4µ’!Ğ-ĥmŒUlĜÙ,´•%1˜&1" ħ† ³˜ …¤DÊd˜¤dŭŒac K4ÙE" RÌ )¨E%ƒ`@Á–ÒQ˜i4Í%4Ê &%£h!İ4A6 DĈ‘M’fĊôó{eA¤¨˘Ä[^\´i˘"0S,ŒHŒe•£jm²›)JBÊÍĴÛ4¨šÍmJħ‰ŻvT˘ŞRĦˆÉ ĦK²­3ZUM´ŞÍ›6Ùµ×Ì\’}$L&F•3&"†îĉ›,–Ş˘›ŞLIMÂħà¨Âüc…Ö™Şî}Ġt^¨óL}jÖÓŬ§ÄvY²äeZµŠ2ÉlVŽäúħìu{˘ğÉJ›ĤI£è|½Ĝ~DĦ‘öş,ž‹Ğ%B½WÛ b+’íÍPa55„ÄO°:ıĦġûOáŜûŜÎ9ƒ|ˇĠèr$›¤ù;DíêĊŽPùv\Z0Ğjĥ<­›İdx,Œò"”lĤ'‚œŠ:7$ìNFÒ1!+”¤ÒĦĊpŬv8”Ù3),[jĜĞl‹_ ”nŽéŻ·o/ĈkĉH¤q#N#cx(5ܔv@ĜF?)ŠsuĵLÉ÷rHX•eU²U´Ì$‹$Ĉ'ÙI8”ßÂvSt×ÀşŬjᵿ _R$îbOtGB&ƒŬĉëİ'FTbgİd‹mŽ'>gÈóÙö:Éß.ċlĈ1òwî„w§šé'ŞĤ”ĜY-êêë6k‹ö•ÑLZ4Ȥ"“b˙½]ĤûËÍí+ÓLT0?E‡ÎHԉ6ħĦ6¤ğĈ )Vİ""1dâVĞZh)F8~Œ€2,eçb3.YH›™,²ÀĴ)ñEx09ԄG@E¨ I"d²XԆ‘­HÖ6‰²™bÔ‹ë“àûGÛàµ*BŞJİG£în|’N2N.)ÄĈïıdBĦ$ħRvJÄ!içSE7HóV¤* ü-ĞĈOI HJž†ĥ]È£2Ŭl Ìd ÒáZ°!ĈÒ0‚$Pœ²R[jŞUKÉNA¨’‰·î`?KÍÜŬ§òĠB2‚ÏòŠxê<Ù'ŞMA¤0ÙGĴRÔĤŭÚ­1pİXİLMŞŞħ˙b‡ô! Òĵ; /˙C´E{XŞ(WĜCî€ÈE$ˆ‡W[-NgĜäçöAĈASè0ùŻyDxP½Wİ1d“Ħİ™ġûIôžŒùùÇÄ6°QUI5̈덲IĞ%ÈQëR~† ûJċrʄ?ĤŬżr3áZ c İO*SGšSsßşĦJçI½'Ĥġq4ġ ˜áŽùڙ;FkdVOÏyâdgÎé/1ıË–BÉÈjRa\DĈYdkͽ-ċyĵח³Ŝí=ğ\ı;´FáPnQ"1@˘"O•ÚîQcIħˆ E£ÓóuĜk)™H\+Š$ ¨ÒJȤGĥ66Ïyì(Œe[ÇıÎs¸í`ŬÛĤX̄,ĦumBrĤ aG@ˆÁ0ŝġ/HÙÙ[AŜ¤Ú–œ‘Ö7ƒœi<Ì8+ÙÁ"Ò%¨–È´I’–Hu“Ĥ4q’:§šd0qOşs4(Ù<ûÎlĴ56„˜'gIZ'ghàore™8›ĞÍÍŽDx71X6ŭB@óœíÄ ×ÇĦ3œÛ ް }zIw­û@ÉHtÖ×ñ§Ĥ )Ji$ĤBĈDĔTF,!41K2&$–fc&‘†*%&#*2l™FmIVÂdŒUB,XÄA‰"¤˙`ìdĦ´ADàLƒ˙¤Ôİò7Ğt]ĉ¨Ñ)"É ÂĴ– ŝf4²l?|“DतFÏòbdàÌ‰ˆhìÒhxe’ÒĠµJuG}Z˜oħ˘Y+ L"¤7QNO›Ğèûb$àJävNg#™û•?şžiğğûğ¤‡Üžž‰Ŝqò íœd Ŭ%¤y6=Ëf‘Àdĝ"Oç#Ğ_Ŝ;ψż!ÌYoġUÑüëĝĉâgƒċÜñ“ɉŭċl­ÒzĞü§ú6ĞMBp?bzÁĝ>ñÙÀŸîü–LˆûĞVيbÊüÓú8"I>–DJ­mżîU Ğ,ĥµÊÖ×m•-–­I)S6NM'ĜúžİSܤëĠ8’2Ż É:–şLĈHùÉŝZšŠI!ŭ ’ôa°ĜÇÀÇĈ,ÛW­üOëùu~J6 yÍIäĞıh`2˜y4 ZXEAIñ#À'ˆèô9š~ŽÉ݃ŒHĜ£ô<2?a^ÊŝŽ)RAtùÁ$#ñŝr!é ÎBOpĦ‘rŠd°˙ƒG ÏëA€…A˘ÇVİöĞı#>_Ö³áulÖLÍlѲž;9Ûr˜­8"ȓ·Dŭë|de#s{'guXËm"as6ĈÉë<ÜĉrrYV+ş3i=êI$„œ0êhż'ÓòQóè ëç! Ìëx?˘p#â$êALl[ÍY$‘Jü_‰ĵB>èCÍ$÷pDŸv‡!èrb½o|Ş"•./–´jòŜÔfOZì\‹%ĥù4ɨ1$ĊƒIdÔ4iJÑ bÉF‰™23&šËP•K)ċşÛğUĠşÊóàĉ‚\ı%ŞŞ;Û7‘`m‰,<†8Šj#ï ›ljÛU–Ù0HâÌŬŒİE†œ**ŞF$TŝjŠä& ˘BDL2C”D‰ À‚$– !˙ÌPVI”ÖCRmÀ‹?˙½ @Û˙ü˙˙ü˙˙ŝA!A€Ĉoß>ùá˘:¤*¨Şˆ)B””UV´³ÔHŞ*¤( ¤„!lÑR(Q%$²e@i…)  [h4ŽjR¨(UY0 +ıƒ  &é€PUQTÍ&ÍNc ¤ğğĥbšlM0HI§CT˘TPĈi@€PT  „ J‚¨P¤…P •J@ŞA@P@Û]sßlj¤(ۏ-Ġ}›ò4P7RâÒvĠuƒMJAğtcğwAĕiĤ·kħıˎ]ÎäŬŽŠc2ĞYk›­î.Áv¸iZ—‡:UR„(U}ĞÛ[7ğĥû–èR‘T*))H D­>€uv׋àLmH@"İl}£ 5÷Ĵ:<µ :ĝıÛğhÎŬCc€Ğ£œbQíğ7CĦ€Ñ@û6îŞ] ›omk)*éÙŬşĥ¤]ۑ³ğ)ÛĦIÙğ5;³Ħe@÷wWw2–²ŞĜѳT֑k(ÙÛ§•ĥQğ6î1Zҍ´K…Ö\ĠÓXÁĥAC­†@’B€PIJÖBJ’ *‚ި‚IB@$UöîVP(Ş!BR‰U)J ( l$P@!B(Š BT R¨‹jÊ$H%*HŠPA@Y !!Ö]s$Ĥ ˘E(ŠH 9a"ĤD„DˆH˘”˘N÷€@,) î1È@ PÔÙ­EÉ[ŞÀ °f…Ö˘ÛSLĜ  Ĵ¨hĦĤşä³PÓB˘ÒA‰E0‚f4Ħ:ˆQŞ QŬ„UÑÛ!:TĴ[aBI0é¨:̘(hĥ–§lÀñô¸OpzĦB%H€˘ġŽĵšûï° -|;}÷ğìç­jŜ*_LûFMŒÀ,C JŠAV˘çqʈ ‘ÚŻ@kLé GÀ îÜR¨ ‘JŞw€éGµ˘’*E(U$P)v`ùôŞ{éàÔ>ôt—™>>ĜzĥÔ(–kÏ P(PŠH)D„•ß>ĜJ›o“şwJĉ ”uާŻ ĵô³7ŞT( ˘Üۉ̝ŻSÒ ÚĠ@ž<éGŻ‚ Ĵëv€S€¨ëċ-çT(U ³‡jñï>|ŜòÎŻŻ/ĴÇÖ_2’\4(R…>à$"@Q URE£+U!½ÂŽ5£UDuÉ÷Žá€îËŜçZĠc”p§rZRÛ#ÖÑİÄC4j#KF’]ıÀgWÀ}òî” … RWc îّŜé'ÛT£Ş¤­ñbŬÀ™5·srÔÀĥ:XŞ`k7I^ĊhèÑcjUHA*‘U$é4HĤv˜0äñÒ5‘]ɏlT€œéŬC¤¤DŞ‘.Ç@dVrÛ… ĉĥħÜ"¨ vh(Ó<ŽsŬƒ-ڝŞQ$Ĝmğf²Um¤Ş!F튐 M-›0*Öµ$Yf%,ğħÛhtQÖì¸ÄZÄ\îê#+-Td**60ı”qi ×  ŠĦÛQ&ÌŞ)XšGLqUPU4s³…L-J­³U)I:)¸KbJNm*I:’ŽÌèċAÈIpġUӚ“ƒmêKnîí;v9Ú:Nħ‚ŞĞtsU‰şÜÌz׳ÊQHr@,Ei<Ğ÷3şÈ—;[Uu –·a k[cAlÓm"Öà#DĥR .Ú"]$Ġr8ğM­#nçqÄċ¨(Hí•İĝÀİ$š54Ÿİİè“&™´Ĥ™êš šbS!LŠxFˆòLš@JzD!HDÈÒzLLˆ†ġOjŸŞ~ݐġƒ@ =RR"™F†§˘iM“@z†€¤D  &šjdÔi„h"?B)àž¨ÓFP 0TM &ˆÈÉĦdҞSÔÓ44˙£˙üŬëŻ³!?£×ÏŝçïĈo‡ż„ˆŸI$*žpÑ <h?ëıĴ /ÍP”úÇ0£ĦTv˜.żĊ˙™ûŻċĝżż˙—@?ĠïöSġ˙ĤħŻ÷+íXŭĥÛi§6ü?³Ç8˙½Ü†{‡ïKüK?ġ³_ú˙/âvŞÛü›Wġ×ïaĦˆˆŝ„ o˙°żû˙1ݟyżµ˙o˙¸Ì[?oëLBž}ŝħŭ~ĝÄb`Ñ"ú˙×•żôöˆĠ;Ïù˙˙÷:ċ]GWŭ?ġœöïôŭ/ï BŸÑ˙§ïŭ´á$°`IÀq·fiE#i<Ğí&o7fX½qéw5‡%ˆ*J­Q/ÔÓ7òFċBim0œ}4Âq)ÜË9G•*ÑĜsâoc[½ċÊÊĊ­0€U:Û*´)Éa”>úCğĥ6³óüMe›ĜIóçE½îrñĉi_%)§&]H1çk1i„ĵä(ó*t–ŒƒêNBġî÷ġ ÚŻSŞwòwŭ7ĵµ^Lù(ÑÛߪÉMîĦÔúß+F͚=͵Šħ ̧Ȑiħ´PÚeá…úUÄĤŞ×Yyâ0@rY•ġ ‹´Á ÑĈMĥ‘ŠèÔ DşaÑ`ÌZŞÂPq@ĦÁ*,2-”˙^RLÊ ŽÛĵ} \ÒúúEHAœ³UĊ†Ôùïò§·áùDğ<+ñß"%Ò{v­=ĵFR}PCI(£6pŭ`œ­žh—ϵİC|mví²jë~äM#ÜëÉw\ĈNۓ>Ħ¨T Tv¸Ôàê–4›İ 0ˆBeQi|ĈwÉĦĴ•e!)îA/9µĠŜŽÂ†ËldƒO;ëYıœşıŬß²oëvÖ͌î°ÂÇ._i}³xÍoRô—ĥoRĉ˜#ĥkR¨4;Uİ$•UžKÜĈœêús2ñĞhéï'¨8IğYçNŒÍwe§~CÌċjZ˜èW2óBŬjġŽ iÌˢÜÑŻ›Ö gš…â]ßïŽIË#„ÀÒ⍰AĴĥ’dÊiĝ͌‚6˜ĦB‚Œ* ÎY˜36s—|óëÙŜgG,Îm (͚p S´˘Jöé[i9ïŜ̚ĵ½Ğ\ÉĤ)ĦÓë=5w-ŻÈJETéùwÖkÖġ½×i›&yÌÍTä5sĥµbA”¸ĈJ=§ĥÒÒÛk‰m³ [MŜìĈXmıPĝŻŽÚ­.µèrDšó0÷¸^÷-ğ–ß,€›ë(îêîqR]ÙjÀ1 ²S.íˆÒÖ¤q§r9/=y½ï{Ŝ÷­eÁŜôxLvÎ$W2k'9 ]ÙwĵÌZ”ù'İËÎĝ÷Ŝö\ğa€_,8mž3)‰€¤‡˘Ù²³ĉġ2ĝC™ÎMêĉUŸœÁXCˆœjI$=êjwêÈc›ó×8ùŝu_oÍ•O9v6§Üó†n´Îğ²ĉ9ïä÷xÜ9™˜faeğž^aċŜ~×3Zu­.O§Š˘ßÊ̘TD@áS™§·h”h!fîC×yw?:7uvfa“~ä>Ú5d$ ‘2ċhzĥ}ÙĴğËğZÉUùèš:ġ?&5YìmÔù-g[ݧp¤ƒ€ N™IvÔÊ Ĥ¨nóŜsšäEžŭ-Ïᆏ;}ßBt½ùI eÒ@ .‰Úß]ĉûšħƒŒbŬ~Żëô_°uš ˆX**!.2GĈ7ÊËA\ċ6Ì)tìBşéßRŠJŞ^ í£Bm?mjö^ŻourċŬ …_iĝÊòë›\+ç2ħŽg-¤u9Yâ;(ĊċĦvŒä9$áÄ1A˙ĵ£ZCbY!ó*xüP!Ŝʏ˘]‘5RLïĞ9£êMĵzżœÓz;á‚ÖᗸIĉRHV´¤3Ĵ4áRt™+TȖlSr¤ş½¸†ÜÚôQÖÛĠıùİġɞĦ·iÜğğË$é6ZR‘|Œ–ê {Ó@ˆÉ$:½ä üHêŭċĝk§3EšhÑzŞ ´Ŭˆ” ¨kÊUTê³Äe“#Ž­“ß BS“ÓCè-ıO„DBŻh#öĜì^Ö.uŒşâ°²4°BĈ•‚ĥ Ôib ¤X„ƒ½)ş‡5“œ5§9µoEمeNîf^ÀSĎĥ^â öVXBĤJ 8YmB!¤-w5İċB9XhbĝLĤ§jċö¸RM  Ïz-ÑžU1Ìı†#J_WŜOlŜ9È]™|2ĝ%!ž×SÁˆ %şe& f9`ÇpĝDCШ‡LHQí]X?iız„™Ġ œŜ¸É½""`ޏ;0)ëŒrœ/ıOÈVD™!!K#…LSK҇˘ÏPïZĤ+ZŞ($&$’+ˆX*ĤS $!…:ş¤í*ı^<ᐒ"’‹ ĝìä%& âD x‰ÄŞ Ħ$œ Ôĉ0ŞĥóÛğğğĝJ&•tiBéRu@S´DDÄ%Èp,0•ÊáR³´ `wVĴšŠÚñà‘Ĥ <ˆTÌ:İd1e…"`)Ĥe.‚*‘İ’—2÷¤H4t[(J=úrÑ ]Ëş ‹ÛÀ;úĉŜŝıżŬ^Qey)-T‹§CÎ1a¤ÂI 0½ìĵş¤Ê™ÜÈ4uwëi=êV'ŻžsZŻ:˙ġÑÙ­ ²ŬĊÎ_‰y[! ‡.lx$-ĴĥÜëW(ŠÜ"$t5fŒT.r§S"ٙƒ6'.£ ³À`é€IñŬ„T$Ş­Ÿ½UZFˆU,ĵ†*g’Ëŭµ„uZâÌH2°Ş²š`Ü°ŞŞ€~ġSZVèAÔÜ\Ŭ ò'#ÍIRî‰ÀaĜŭ,Ş2fXT0ŞQTù”Œ,%:$‹y\ĉ²ĴĉĤĤ³×É>äœö†—÷aiöĞşùZ )̆ĵ§§ĝĠ3HĴw:\ƒ€OfפÔÒà 5HUPšIÔKR„’ÀEş3&d%ĴĠŝkÍìÙ n~]]o.Ô÷páµ÷³WċÂßwË8!†AMtž°Mn[—h‹ï]_ëP\e>I%‚7ġgìŸĥr믯j‰ĥÒe púSЁŜpܽiĴ1ˆxÒ,İE!׋™Ték!µîà„“·ËݳfÄDâ]‹™ìöYˆĝ}=žŽüûbyĤĊi~tÀé~O|=xÓ[Jžvĥu7 4'žşŜ…,Ù,†Ŭ÷+lj2§&fw0Óü’ Ż\Ŝ‹˘cĠÙMÊDÒD%ßsÍzíεĵ›™û"ŽĤ½÷­ësw:g’ğŻ&•­3ĥ ]ÊınÚ ù %5Kíñ-ĥÚ­u´i£-XáŜCDàÑöë;oj ΞY†Ú…ĊRŠVqĉ”!ÀĤUÄn’Ĝ"Éêïġž° ñïżyv³\Ĉäç/p›Ù1—=;× ı÷r.ċÈ,ï†ĉißRôpħ7}âà}:Ï.n´-uĵ²û•Û]ğë_Y´ÒÑ — £Z‡ËĠÖĴü/^j_ÇêċŒ§˙Ó=ŜÒyÑ4uİrRğˆÎşğ§ÈVƒihĴ•Gżğ8wóFĈqĈ1•$OIz·ÉĞŜÏ˘óÔüÏ5šê9ċ×ğR ˜ÈOÑĝÛWyL:ÁT/9fffdíĤL…á­meK­îëYƒĵہÏdĠ›şîĥĥË/pĥòÁB\)”ˆ)‚ğÛ½ñ×ÍßıçpCˆŻR²BĜ°Ij¸ɜğıZyı\Ü!ÙôöĦFʐ§0€HtëQ³ôDŸää€èŒ—ĥKÚ:–CÖ\= „\9eT·k+ĵpämFĤû„·éż6ufĝßl\%ŬÛoXì–鉓 &+ŻĥÇİ˘Ñ5ṁtYë}Ŝ°{„ïËĞoĈzäIáŜo­xÔÎZ„ċILuÖ³330ÂYgÊaÁ\Êä¤A°ÂK"JÂb!n€‹„%P›µz",ħ ÈĊŽBÁĥZœ”D_¨AnN§VupfûÌà°ïXżí•Q_¸%y’K!({lx‚ˆ!Ş]gšNÄ0¸Ë :W %”̨JLÊII|)•˜fù%&ŭèĉ¸èSÈ{“ }tÊĝÖğú9XÛgËşÚ%½%Ĥġ ("ëĉ}kĈzġÑ÷5Żá4ħŸ8˙3%2…O*e } ‚†<:µ$yä_h£ŬĜѳİ}^͉‡fJÚWʏê>Núĵ#O‡êûÙÍJ‰~N‡R^“ĉ1ĦYîà˘ûïWŸĞğ?¸á ‡@JİÂ*5Êq&oú,šĵ)Â58@EîAı(„^f}çÛñÏËİñİU%A¨FÚBĠa4^ŬN!7DmI£™Mî2ıĵq&ĞFYTbÊ×H:™f"rĞÓ¤Ó´èÔvµr÷&íoY//Ĵï2Ż$¤D-TĈï$-V,–ĵğÂ08F!4‰‚ÌS„4£›İSbiĥqK{‡¸Q@Ġ]‘!zĉŻ·w=1“ĞŽÍÁàèф\aùÏçs(‚"QŝŒ?wŸÄQŭ~œsŜoÒĞeŝË Œ°cSMñ¤À O]w3'1K‘ò“ċeá u‚Ş%†£Íà^ë)ÈQ*O,³Èü·p´ÂFË,ö[iıV‰é4ižĦז{ïW9eнٽêĉöaŠÍŜ Gí`V‡ïÑUÈ;pĞÔ!¨üċ—Œ×Îù™³œ™äğĠs%ÉÔ½9d‡ Ĵb1Ĵ3e¤–Œ(ˆMeӐÁLL0ž‚òcHĈQ4É™)D_fN§l˜·²´D—éHљž…éD„&TËÜ8R%‘È8ğ`/è˘ZÍa2J^QĦĴŞT²íNi¸‚YA³ ÈÓĴê"}AA¤ Üíüâ2˜ d§i uçÚ_QA‘ŽË˜Ħ 2QÍÒk-# KüKyùĵŬ]͜ċKŞ£sZĈRŠŸÚû,ğâ Ò +°J͛iqzò / Át–fjVhYî¤ÚJ³˘µs-r¨Ĵ¸ ½ĤŽñVCÓQbKÑò¤$Ât‰ èì!:Ŝın|†›ë$íemžşç7ĤŜd&< >Ms5“½ZYÂúj —rNw›sn·óëV'Á6>ŭy$—pûÌWZ—ïw=ĉ@ÑpÚXġò˽ĝïÓfsZ˘ŭ1–éLè *N#v'(îr¨¨ƒÂT/6‚^c ]lë5ì“Öä&I˜—fûː\4g‰}M|ŬgY’éY;/Şw­a–Ž€3•ħaÑËË (èôî‘a#€ á{ʆ½p—˘3µ½ŽŽfˁ]ٝñŸy+*mJħŽÌn.ġ5Ž‹n.µ5Ş`G׈‘•@İU-†ĦO„Ùê$ÊbRŬµT!&h&+h#HARR!FĥšŒkĥüq|MÜÉ-ıQ½¤Ĉ7ğ}¸½Ĥìâvh•(²í…S’г–L–Ċthd ,a´Ĉ$Ä Â•½8uJҐĦ)³ÌÖ­ eË ­³&t´BĤӌ WŬ,8FO&Ùô˜|”˘<–À¤ÚKY,ÀƒóË>giżŬGRrmÑeu™Y§EzÏħ·$Év,7Ċ”ëŜĉ¨‰ËË&mÌ#K‹ >îaê]-Ô0r›4ÌĠ&QFÊe((ĉÂE&Ûa·ŬNv‹Wm}UĝŒ"ú,eŬŸ† h¨ñĥg  K³Ñ†ÂJ*ż˘ĵÒN÷ÇÔ× 7H͓[ਝĴĥ²ÏuÉìċs|ĞĠìz†UB[ˆ™T ,Ċe,´vWè£NYgFñë5Ş•@ÒÌVYËFtQ§L³£xÎLÓ8L@’Ñ–—E…fŸÚ>zë.АÄSµ‘yĥ?G˙³˙ap€PüÜE’ç˙Em3",Aŭ˙bb›ŝàR˙Ċo?wU=¸ŝIàÉÀ5 ú5{͉dÁHÚDĈĜ)C“ ?Mm[­ŝ–ƒàÎĞġ˘§G2X'+żS1ÑXĴ# @îîĈİĉ¤£˜ŽĤ!lĊá˜<Ĥ·ŝ§‹ġ\9}˘ÌÁ~żË|Ç߯B~ı[’Ğçè€͐#ġôä`GN%ÊF şîYA·DJ"ìÙÄ2 ˙2I8˘ÛŠż›ííâµñ×]'ŠnÑĠTc&È5^àŬ†uè!€Ĉñ ‚?€”†˘%BjUë26hú’§›‘Öêyç>òöziEŻËİ’š8w,X*ŝ|Y‰o›JûÎ&-CéjѤm“ïƒÍ_€(cż³!~ĥ„ ~~½Šŭ˙ p˙ rڏ҈ÁßÍ ‡8ŝH ŻÒ(ċvĜZ/~™ŝ ¨G…2ĦRSAíqüJGÎ,(ŝú…9R 2#=@â? ·èİûŭíBš8“ûÒTîSĝO—3¤ùEû†Âc]@úOĉ•ıP„&*íëëâ°g ¤#ôšTüL yçϜċäŝ~_ĈÙŭ½ŝûŭjI³öġGœ6‡éƒh}ŬˆğĵżÒ€tB œ|g*ßÑ(ü!ŸÉK <'w&xï!½–ŭŸë6yiŠ8ŭêù-ġüsá'9™DçoÙ~}‘JŠÂe聣EŞúßÙ _™ĝݜ ÷Ûİ"xp„úTq•Ò$2YrЍ} RFñêÙ%%ĠÛlÎî£dkúÈ}¤ĞŸÓfŭŬ6˜‡ ÷êT.  _˘›}ġ]ˆëĞëpğGĥ6—\½M+ZV+;Ċëışeg\²ŬÎ}˙ż÷|7§ŝœ{[Ż_²˘~_§÷˙.ŸÒûMxïßëóô·<*Ğĝyßl­}v´÷²Ò˙Ĥ,­)Œŝ'tÓèÛ‚Çż…°}µÑÇÛûżü˙è_´ğ'½Ä(_ôpš`żŝġû'Êpġ˙Û ÒG÷˙-?ïûİÏùçêSçö z üUƒħ!ú†]3 # –Ĥa ß:5üŬŭM°‘ ?Š ßÇÏz3ġäÌ Îψ>šŞ@éè_~PƒJÛzNÏĤĝĤH8ÙÄgä˙4!wüœ²)*ŜAÍa`KñF Eéŝàĉ%kĞҌ^‘żk%×hBù÷ö ûOE‰‹ 3cfTœF¤†_ÑIéèĵŞw—Bܕ\*Dé ÍTŭ˙m?~Oè†\BëäŞÌ}ĥMċááÎ>etÂYŬĤGÜ;xúŒèêÒ³  ‰ùúîĠó‡¤LÂÜ ġî/äo½Şŝœ'Ž^Ċ‚aĴÛú+ì—ŭ™÷íhŝ1À˙§ùdŸíô”FNŞ“¸üˆ ˜T#)ì[Ħ–™Vż˘ŭ³-,qúe+Ż´fL „ŝˆ?7¨ìFnOݏ"Èr ”ŝğʸ™OĤ ¤cü“óS~Aóó‡Ív­íħàöXĜ鑷YU[Oħżċٝ>$šÇ§–#á9ŸÓż_âŝúQ÷÷ô~7öXû"—óé°8W"Î%@óĴÏx#ôċÇë>×èáĜÈŝ‰Ħüŝáŭ?Ó?ü_çú˙ż÷ġ+ĝú>_çû2 ƒ„°sŠ*E—?'÷ó—ŝB/\i{µW&Ú~9|ğ˙÷ŭŸŭ?Ë}ĝżçûŠ~ÍüG ~˜@c˙{ô_Ŭ ßè˙ñOè=¸×.7›aíkWĥó½>Œ<˙/ËŬïn͸íN•h÷oßğߏŝĴ~9gûşkĥŸ‹ğËċÛëUĜìËÑÖċëğáé½·ż†ŭ½~Y|´ñlUj˙ €R55§ÀŸù%Ïë)|:'ÏT âi'˙pÏıË=˜^ŻŜA€Äŝ[‰Ħbü4Ÿ´X¤‘TŸ”×)…ü—:Ĝ›Oh>é÷ä€ÜQG):ĴœAĊ‘İbNĜ£<ÁÇÚ~(}˙­ŝĝ€} eš ҀñVdŻÖ¨?ĉFŻĉÉÀB’.+)7HBŝm]bˆ‰@9ôŞ Ú]qŝ”AĉJâ~‘PL~ĵà{•-è̈́Ľ—#â]ÛŞOu·{ĈNrI#ƒOׅIÓöqü3ĴJbÑúmYsAd\“úˆ„y [Íß\ÂÌB·übÑ?³.ï.-ëÇêhâRI?•ŭ{ëQèŝí­’…dċü_ŝ?S}ŝċA÷ @Gçüö3˙ġ 'À˙ çN&¸ŝßÛüÑ ~Ÿî_ŸTÌ˙ı:ˆÏeŠ~Dá B†_˙%:.§úlĴ˙T (T;CˆéòÊòQWÒ>³#ûV‰<ŽôÏ[k1ùĉĉÚE¸’/Ħ$8ΐAñ`Íl×üŻù÷ٛG[V~üĜ1é Ĝž¤F)Tí•G÷Y€ßĤuÔ­'iñ•Óúž¤,˙Ùĉ\‡MÎnza?–vöü-“ï÷ùĥŬßĤÓğÇöêâìŬÙŝ>Ï·–Oï[n#…~§íŭ?ŻŻ÷yŽŜ_ÇçğË×éۗŻSŞßEeŝċàËJ˙Q&‚–Ş3GŭĈ*‚ÛL3F?á×ŭVG KŝApo ,Gú´Áû¨ŝ¤}J´áyûßíA^ÚË"ŝïŬ…”@??˙äêŞwħ †ŭ Ô×a$š8Sƒġò?Ù#KN)géñŜ^s C9‡52q$ÉZOS$àŻáDP„U(Ŝ5óêafA˙wR~ŝNy‚ŒI8ôaóĝÇ!Żż°£|OĊËq?ŸñWtî+Îíϟ]T-^[Ğİ ÉqÊÔ~& ?‘0 Ĥ"Â`})·Z?kŭóg9+P•N“ĉVÎÊr œ¸›ÏI3Ĥ…÷üšoÜhYĊñ”“ ú)8‡_‹àáDz m˙tĜ“Şe‡ŭĥÙ ûò‰ú›ŭ¸Ċ›LOê´ĤKTWy%4Û[ĉ Ì?~´w÷‚Yé‰S@ù ÉòĉFò„ùF[8˘@ÎŜġMŒ!Ÿ³Nó7çëŒü"]İŠS•P\üŒ},ÏxŸÄzµŭjŻäü8ŸZ";&9× ŒüL.žĉî;—e§wĝÉúU IANŞ0ĊÒ>é@÷Î(„”ŭtÀpŞ˘ŭĈ`¨ƒ$ë(bÇT˄ú— …F”/%GÛ½%SN îR˙ħĦȈD‘ôOÒÒ €·ègXҀ”\à5Ş5˘˜Çb:Ò+İA¨Ż˘Ü†µy ™ßí4äe&-P’¨êmƒv6ĥ~ìĤ9Ôy\N‚Ĥî[²é‚TmJ•ü3QiÑg(ŝÓżˆ(ċĦŸÀéOôè ŝüG'Îä† PRD½–ċ{εĤZ]y[ú´Ĉ^Ìûlû~<²×ïŝÓßf½ż Ñ÷ûpü~9qüyrßӇÇŬkö~?ùk×ÛçĤíĴ§Ş­^÷ Ħn˙?Ïóü˙?Ïóü˙7wwwwwwwwwwwwwwwwwwwuswwwwwwwwwwwwwwwwwwŸy÷‰³ö%ĝ#óŭżoÛÍ+àƒü"˘Qò/ŝ£˙A[„/İ_Ïŭż>ĵìïĉgX‡ŭèO“üGŻ÷˙÷ó9ş<·ˆ¤~0gúïûÄ|Ħ˙ƒŝÒ˘_,[Aßĝa<oŝ6 Á60 ÒCŭżQŸĝMÍs=\?ìÉñ˜  M|"Bi‚ŭ}zŽs@§5Žœl]˙„Ɂƒ'özŸg<Ž.×$ƒâƒŞŸ~PÚ£ÁÜUh1÷ġò<ˆŒÚ…Ġ wħôwü:ż—¸µ?ĤaìSoı'É2„yŝïE˙ÑÇy T°é`qû04]p5 „§=.ĴñÂ>^ŝÊú*ƒI•è€$È&a…ğgÔüĈżÍi–„*@CŜ4LޤŞkô°ŸnÔágê^BHĞ?mÚéidŭNœ„L^ÒGA ˆ#J5˜Ôŭ7í›Á0zŸ<ĉ ˙nl3|7úl g;‹ïÔP!í²;™“†Âßëíƒá¨EV?;}l?ñĈ~Z­Ĉ¸ĠĞ$ġü_—ċËòüôü˙ 4ÛOĉNj•_>ï…UÓ<üòöÊ|éïóóÏáM&ÒŜŞŞŬ|Ĝ·!Ñĝïò ŭsëŭ˙_×êäż0hd0CôżVEˆ„_ŽżöP|˘T Í?£ñçÎĜs09ž*·p%/„F+Ëb!ô dˆDFù#!\g“ĉ˘] Á}Òy ?asò€$Xü³ÜGJÁŭ˙îıè˙ŸqħÂĵÄċŝ=y$€•ŭ~?Bƒ#ĝ“Bĝż´r˙*‹_Çà˘³;}0²ƒíòšaì}sPIH·.ʞzÔ(>I™’ĝŝNÎ>Ĵ?ç5s§Gúƒ„§·ËċĝeËĤŝµ~ßċéĦùċçŻ<·;wúaz׿ËÖS×Lë2ÑŭZöžï'ɰ/ïËŭŞìĵH€\Ĥ­ëµ‘˙Ÿó˙3ŭ”.m\N™nOÊ@NçCó\Ì?L_ˆ.¸E*˙_¸ì…<2F÷D}^%„k‚­ ,ÄYA£Tż|/{âÁ§üGÊ@³ŭ?vò›,˙Âże}RÚÓ D'‡— ú\$00Ĝô2xqGòuÜŝgòïk‰…T8eŭ|ùżÉ³üw‘yŜİîÇӍ6cum[׿×ġÔ)È}\ŞŝÖ'\‡këW¤8\ÜԚ˜nJ7İEğ›ûϞó÷ÈïÉ[˙Á*yżâ~k€Œ^¨b_Ùëúïŭŝŝŝ?äŸÇÍa%˙QġĊŝ?ŬĦ?ŝ~Âû~­ÜÓüε`‹ûL¸%|aú¨‹_Ÿí)ŽÑ˙ &ƒóúš?(€‡çßàQHTŸî°DX‡N$÷ġ A„ Z#+…B>żş›G4(,ǔS€Ï:KAü}Äşo,5iı‘ÛÛU,9Ê93tÔBaBŞ~}>*ÓkĊÄÒ3Ğŭ˘ƒŠÚş ˜‚ˆèPaO­¤Ĉ;đ"Kó)ÇéŝGÈ £™˙ `d 2aÑöż‹ ŽĦˆR¤JŭùFNmkß Û?×ڊ&,ĉÊTkÇ/÷ŭáÄOäŜWä$oÌîĞ3›ù s”Ğú‡¸ŝ/úä4„ĊĵSÀ0†&­V~x˙ÎŻ^eĴ¸ŭBNf\"*Ÿ&yä]6H?hŭ¸E/^ëôŒŒwÊt„Ûûù’SàŸġ Ñüûûĝüüü£Ö×fŸ,³÷’H è>‡¨Ù菵eˆ‰mKNYeÍv\3iogK„ [³ŬĊ÷ĠÖÜÉü1²Ż×ġòó|š'ëù{˙_Óνiá[?­ÏÛsRĉà˙ĵÔsSú_ĝpĵ:wŭyŝ)ĥ¸×{¸sû˙we˙"ŸÜŸàW4 ˙§5ŝ}!ßñïżà=Š1‡!_ÊmùğêD˙DàCż T…ÄŸó°,š@ì%ޏöp×Gíúò³}Ғ5öÖġëóô˙·>¸,AcJX*†g-Œ*MŸô™OŜĠĵ•JÁáŭ³ʟĤTz3Q$żOîû'_½_†?Ħg˜„O÷Xŭ­ż6?n\nséßԋÍ.-2ş 31*ßAIǛ:A­ħûçġ(.ú#?EyĉġİQòŠ Ĵ˙Żı^} cƒ ĤI " †>)ß[ġ}ŸŸÀ˙AöĦûŝĦdÑ;Ïżg'é}blÈô}û$ˆoÎ=g_düÎ}/ğĈCş„FpÂÂPû H•O}¸feŝ3Ê`ÎŞŽ ^e@qô\İ 5Â-d)t”íF2Q˘ÙÚZÏ4Ğŭ>pÙ#›œOôm¸œ€–}_ú×ŭ“?ż×‡RGUŭüÙhä]gŝd_DS´Ê†?†ñŝŝ„ŝŸĤŝoÁŭ°ЇäáŝĤAÈ2îçĦnŜö?‰?ޤ+P'y"'ŠúîôòµûıéóŒwv˜ġĤN-×ġlr·(uŝ1ŸġÂúP^"÷&ñëè˙Ĝŝ_ŒFÄ·ë§Ïê…ĦŬĝ€ò>·šÂP·üŠCƒ—ïè˙v§~Ö§ñ¤Ïż,3z9<3ùw(‘ fšÈö“ ‘Â>Ž<Ùèú?ÓÑìıÎ6rSÁT*|3úuk@AÒÛ%Ç҅ĞQħóî"¤c#Š_ÓOÎ.Z™s%D˙ Çñŭ?hà^Ôt²cá€ÀŬžŭÏ蓓 t†ĊĥĠ£>²qö—żíWt—SùˑF·#M7˘!֊ •C]1Bĝ$gç Ĉ†`C~27çwÊ5Èùb\6½uéxŒ’„¤UÄŞĤ\MP …£)œÄ,C]üHžP>Ÿñ‡ŝ!ż;ıŬ}T_ÚĈl²żEóĝċO×çóAWµĦL‚äĞôĈ‚BljQ™Ôżî^ôò_aC‚ÒĝZJ"3 û˙g*_`2³ÈX{†}ÊÏ5“7ŻÈLŭ·Ögz )Ëüĉ&Ԙŝ+2cİüÑÀZİGŭ½°Š1†˙û?X=T ü>Ż›ŭcú{ĉ‹ŝ˘(;’ÊÌĜĝ¨h˙DşĞİuoÌŻ?żÓŝXM˜Ú‡_tĵsój‰éz[0ˆÂëâ$Àq]ާöŠd2b 'ŸÎŒí ËJğÜáĈ—÷—ŭ–†#Çv˒ÛdÀÏ·êÂÒ`AÇê˜4–üCöP8›ì÷yüŻŻÍ^fäw‡"Éġ ‚;˘§+è/†Öĥ€ ÊDżhOŝ 6?•äOWÌ^]ŭ˙Ż~ĥw\è°Joñ?b#Çú 'â‰Bü daž ‹ŻĴ·ùHLjĊ;àl£Ğĵ[À6[ĝ<í'×תúžî/.öáE˘…µrÇĝ½;dJÙK-™qİ€YˆpŸ>˘¤Â£Ĥ |U?KŞ?8‚te™YT,Ñ=‘£(‰-a::ŝmĴ1É7Ö0ÔÔE’˘JEö*ŻÌżË°_é˜~ğöúĦwp ˙ŽŠš_kÇà2)‹0:ÔbWê%MMXŜcĝÚÓ@”"iúꑨ°FyrĴ ‹6ü°Ÿîï[´ĥÛíïôYœàB'üĞjî€1៲áTŒ‘ü‚Ѩ˙Gž9#ŭÏ÷´¤` O°Ş²°ÊœLFŭż‰`jw+üċH?’sOèˆżè˙“7OÛçà"ŝÎÖv¸ğ*İä"ŒK8IÊŻ£Ġ˜ÑQ¤0Şêž¸Ïâ£4ÑK‹ËĉCıšm,ÈʸŭDFs …F“#ٚ!’hŝٜP%;°Ĝ£ˆtÛ>¨Ÿ¨éğıċ}.jOêQ™—@ŝF84ĵaZĉĦp¤z•UT4ÛĉTB·oíHÚT~{q—ŭ(KAhŭ50ìvw’#QÈb>rqU°ş/ŬÄ4Ĥu,<@×Mğ{Í û=ĝ€=éDˆüüäûtùóg<ĴA˘§ „ôÌT£ OÓ!ƒşü~߯ż·œßêĠ˙cuŭA÷~´‚h~t0‚oó)_=Ó*wnvâ˸Ċ‘ĠüżÚ¸:D8ŭ:ôïF(à?ñC*ò>’TÙXşŒ+…8Á[ä·ËoíżĥzîÄ} żmŻçnµË´Ó‰ġ믢µïôŝĝŝâô%‹‰ì,#ÜÈŝ˙éñĠ”î¤h‡‹˙(!FHwÌ#ÑÄ'Ûcüò9ÜÌOá•"ġİXĝ¨³‘×’ò%Ĉe^²Šħxĉ+ôÛáİÇó%ôëğwX’a–+‰AVÌǙEĜK_GôĴÈéÜZ½úǧPrÈqîÒİó¤.ùJ)’Ĝˆ>A°Ħ‚  V1ĵ Ÿĝèü’9"ĊËEĉŭĊñÄb˙mŭéçö(aääoì° ?™6RĦ>0ü§ü‡ÇßÚÛ@̌ġĴÏÍÒ·Q#›ġŬ\à2GYnϛá£*`Œ§Ç Ǹı™ŭÖ×ëé[)˙AÀûġ\}8_ğŽ7ż{~˜!é“6Á@ĉtêHĝ%klĈ°xê[ˆ~"¸üµFAğUùôOĝވ kŭż×ğüyùqpSpĝëċŞÛtîŒ`Á…˙ŸÀœûdàôî`/íŭûïÚĞí‡ì$!Üùßî˙Ÿ‹²Ğï>D ^ŭ›eŸÂNÈ6"hEûŸÓÛs¨?X½Ù(?Ó+‚ŠL> Z²˙ewFbßıŸíûLŝ÷üWínê…bsôˆF„‰új#ê— ÷(ÔáağÑ//ŝŠJŭ&(2 "OϙżÒ?ĜipÙÏ÷ş1šOĥU@cî Mŝ.6?OíD (Övsĥ²öSça~N(*Cβ'ƒGČş 5Ô£Š j‘5Äɜ‘5K€ĵ”Q.:£' ñ=ò޳™’Q¸—~^|‘Ŭêí/uoù;ù­.ŬJ8A³ĉw" r•ÁX?#,ÇĥÎ ü U.? éfYĥëçÈĈ„à´ì@ŭÎT²OĊÑç+ÀFOŻĈ~3ŻòÉ]BU çl?4ƒh>^ÇdÔL· ç ûˆjÏó˙Šž˙’Ĥփù@* ŭ%}%~6‘WQ3ÄM;‰0x’íö˜IĞeżÏċAäĵ…â_„ŭ>Ëïèò?Ÿ}Âw|Çŝ³ú’—ĉ!–²–úr£žéáÚê¤ÀräĊċĝDC"Rà*ŝ| VU.ġ7Ëċà1lÁ-JŽ3Ĉ?ñ²Ï—ûRЇÊ"ZbKżÚ•íT{•?¤~ŝĊóÇٞPŝŭ˙ÛŭżÛWóè~ż?oß뀰4ä>A–(È€Êl¨ĵ!ÔWíżwŒd–"ÛöÁħĝl?§ =ƒƒ|•u~ŝò£=KBÙŬÂÊĦŭ½qö\êF‡`ĝGn× ġïy ŝU83 'ZBžn-f´İ3˜µUÀOûÍ˙²"D˙ĴD˙ÚH R@K ,€˘ŠQ%D• I¤Ħ*IH–’ŻÇĝOżßëüt÷]|r×;Zħ_êëü ˙+7¨Cá¤W ÏÖ·g•#ÖĈu†ÍÖ3ÔéöEnhŠÙĠ PŜJÄ"­0 Q0ݍÍaÈÒİkÚÓIï;Œ·oµ9ÊŬHÑ­”¸-×ÍÜÏ&èkϙÁhêAí1^< Dä—jĈ˂•\\‡ġ"C˜pxxyYM˘d;ÊĴŬä”yQœ8xkEÄìœÔ™ˆWş‘ġ Uv€@Áveêĉˆt]\0OŽb†6YONC‰qk„•Vmv[`i)ÈóäÑ êfÄ Š/·yRŞQòÌïفêŬŻ{q¨SÙa{uÂí%‰ïS| 35§•7­O¸=£ÖTĥG“­½ßĵwxŒH’mÑÑé=CÑÚ¸_T޳ UÄĵV‚OK\Àâµ69öô7İoĴÇ.lŽ J%H{тÇVrŝñA4µAŠ½Sc<”Íg½“ë¤ñ ĵğyŭ bĈİ2·+uӂ}IXxXˆ…ñ›ÊHğœX ċ&Aş­úĤ‡]–jˆ,ÎŝÏFp`”Ü@U‹§Ëa;ÊĜ‹Ñ“fGşÎÎÄg3 í65ž"ÎÎó½–R˜q¤D°Ñ‡ĥFtĥı›ß$‚‡5DÊ™K3EDÏYƒŞ;ÛÍ3ŜNf+ß5ñD[·GO•€¨áˆ5Ÿ³šî!G}‹êua:&ş\3 i²hIecw=ÍÊ Ì?¸FuëızĈ̞ş·íĴÎÉ=a?8Ĵrxċ,Ùşjĵı O…ÇU(#‰ܗ# ĉLşŞjĈŜ{óé§0àĠĴ¸Hş'×ÂÖc™)l° 4+ÈJâŒEOï_?°áî ó%ÜE·E)S’Ç.b]ıìò_œvĢDŻĠd˜ŜN֌6Z QF›ŻkO7‡Ùp•-ÌÀ j\‹9u3 §¨­.éÚ)“ Bä-cmšRXıáQxŜ3ĠÒ÷ÌD¨žLïr‹Ş²Rkž§†ċê]4S½‰pÎâ½*ÛÜ0YµäëZ’–7ô§qĵ)Ó>âÊşƒÜµÊ¤<˜ù@]=ĴnWBŝä§ZşE3áÜħ™ŒĞ?“UÀM‘éĞîËùoUÁîc˜3hNYŭċ™é;_o½dš°_tşµ´„%\”ĥpŜS§Aċû‹xљ‰Ğ&§2÷@ĞĈêpèdğa· PİoxڙÎ|aêôÇyç>qëxïÓNüèMz!éݰó\ŞĝĜ}SF—Û,P³ŽXÙĜog^jÎ}ŸVŻezó$6o‘Ú­#QÛ·™-œÔџqšĞ ĵV‡xQ³íQÉáİNwş'?V\×.–&·‘.ûÜfX[˜[0Zŝ\Nœ"ì|G}ó L5Ώ9Ŝ/,ìĴLçŻ=£Çyk^ı^PV=ÖL9ġ)ʋˏq_ÈŻ İQOï$ jlQnĝ"g0ÀReÈÁ2İ”ĵö›çŸrcS{5Üĥ}ünŬüùĠB—ló²„ûíıgÙOĤ·:KënAQâ+H•V=Çg²ĈJ˘Ĝ‰XÉĈŒÉ,ÖHÉ%óZşpaLxË:ĉÂ2DÊ!ÇÔéäw{5XĠ³­‚ĊÇ5óÀ,b˜p8Ġ#ڍhòê‹ñġÈĦÌ ş%@`Ä´ßÏXqŽ´™“şĤ ‰ê‡/SއH‹|Œħ’]¨½kĵî‚÷‰ë^ԔAĈ;¤85ċ‹>ïj8Fš5Y)žnµ8Ó¨ŬñP„ĜĝùÁnEĊ–ñ³á½b~†ĦĉÛĔß2ĦŜMŻËÊsı’ÊUBEârDjV§ó öFŽ•f‘ŠöîéI|Y0ó´“ž{Xô§Êj’a&HeĈìDÌ*L„È`¨ čN{‹Ğ’agĜŜi‰íĈ€ÇöƒĜŠx­ÖG’z167 ]ĴïÛÔħÜŭ~ô–*`ĊYDžV7°vëÙħQ"ÂYaŠğ<ÂJĴËÄH ‚~Gw̵/S%'ĵÏo-vvÉéŬŽNï^pĵßT' Ĝ%n]!Nw G¤ ˰a××Aǔ '­n(™ŒÚ~·ÑĦÀ=§sç‚\=´‘-µ?S˘Úä6C„aê0[Î"ÊÛċàƒ%›ĵ)PµĤpzú,(Q¨ÒšùKU=íZWtÖ³LY'#Ä}ğmġĵ:ݝÙ=r^vo€ÜŞßI`ĊXı-™ż@Š$ÔŻˆÚ:z4ÜÒ˘Á°,R_œ$ŠF C²°`PŜZ`ÍÖs×F䪙ÔpĊuNnÓEş…ġ: Ŭ”×ħ“2ħÙôQ‚°Â Ac”Eù‘Ë'Ùg™{ĉqÁœóëïUÇ:CC™WÁÓ<ı‰‡2`_w·¤ U"il3ĴŠW µġŬüf€$-MÒ§Ż’Z'°9às0ĥJŬĴqġ˘éË=½{ˆû(Y‰Ë‘‚hÓ‰h`3·ŬE†DE0 Ú´ğ™D(QËu-²5Ŝu *ÌCŸv½ï“hƒè²Ë`Ħ+áÜ\ ĊÔÁLÏ£§gŜÑÌdq3JħĜÔċĞÎĞ9Ti‡2QÓˆn#Ó˘ê7žb1˘LÂÑaˆÛ*%3YGW_,q•ÇDğ¨gEŞ=›U—ZO̕è+[”^<3ÙŞ“Àá°-/žÜ3T7×Q R~ïk]ĵÑÀî™R¸à^!çg½rÒ{\]j"•Xœw›ıòì ˘”àşş¤DLóŬ@{v˘&Ş~Ġgók?aA†ŞÔQPÄÚÍû0—a1Tĉ^UÌĉPü3ҌŞÇ†V၉ì]QKÄ3BW>&üZŜÌò¤šd—ƒĦP%Œk:7ĜÊH=Ž2òKŬ³^²@˜ÇmFöà:?žĝMS_;ÎPĊĴ$!zîƒ^ĈfĵaóË^<'ƒ˙MjW²­rbo_‰×ÑK“´D'ġݲ"Èó×#}Žäi/ ŭ2ŠâqúDħÄT.`۞4f”•÷„ċè!È57‡i ›Î˙P™ÊPîĠġĉŭ•÷},B@àóĦıbr°E2Oœ œ2ï5+#\ íĵŽ(FĥH\éeNĈ~h4³,~Ğj ĈYŽ[°ƒ52zİpP™râWµy퇷½Cr\=í•ħDñìlĴCyWŠNƒa‘(şİ†è…ş4ZWÜĉÄŭy•;ċu:ŭyqAû4b^úi÷‘) ~Œ£Tĥ_?@7Ğıó´áO_Ê.:•mŠŻtBı”:Ӎ¨:è­QêÉŬMl¤——ĵqżžÏ"'ĜsœžO"/7 6ÖŬ–Rğ[ Ħ<="`ĈÙ¨İМѧ‘³XÍkï…0ŜÍÀÁÖËk ]uú޲—W3̲aZĴïné!b(ġ2ß4tÇt— Hۍ˜ıkŻ腛Íċj^·Ï<ĈM?ˆpTΙĜ0éĞ AóĈ8‡êöÒ-wTakÊGŒšJñu£\×ᔴ›9Gı! :²üCòĉ?µ+ȇìŒIsqJÙIԕ?sHP× 9ü%ñĴĈ-­k1é Óƒ†!{Rĉl&:”ÖèìòÄ·O"Wkz“]V(o´ˆ ,s9uìóÜfwI/¤-Z9@™Žî;s^(BZ \ÁӀ‡Ħ<„pD“¨˜šsä”=ŬlIĵ7˘ŭ>ዄנŽż ŬÏĈSċ­ĥnô“˘uŬʘ DÄŞÌQ?³$Ÿhʇâ´››ôÍ ”;Ç5–MÍ[…l9ŬL—k‰ËóıN²…>›ÊqıQgo–Ó™1>0dë6x.'ĦÁ£Vpb~JÎ\§3oláNX&`Òאġ²ÛMċ3·ÇžƒÉއħ3ƒ1(‡İхġ{&ğÖÌ­ÀFı/ž2sì‹R&U<èÔO:[™Ù’\à@Ħ8Oˆ×ÁĉÔc˜`TxtpáİħÍ?Ef‚|=BP]pVèBgg™G¨t§t™–ixàb UQ˘j DĊżGnóĠĈ™ĉCì…żk§4˜ÖàäÔí™ı”YTò谘ñÇĞ+µôCĝ_wŞZYĥŽ_[e}ħ3uG-ŞŜäÍ^–ĥĜayɵùf%49"=âĥяġežä8'ùà8÷7—³„ŻÜÀCñC …ĉìWE†yuڔFÊ2*‰„b˘ RÉÇT*Ĵ0sÑŞK¸W bċü*7ÙÌî*ò­Î³\§ŻÓLT²ÉŠ~èBâ2¨OQvĦr(zsÌôñĠ ~jD’‘şĤĦIĤÍ:ñÜÂ`3ÈŜf_™²˘%v… Ú댇‘Ëç ĤŭĠh"\#ç—|Ğjz“'”+#Şĥ{h<ž’cdf CĴ$(R÷ŬiuĉB4˘˜œù3U^9EIuëGÔG–Ûê˸½²+H;Ôu­=/|1àZèSy˘‡×{›•µû÷/¸$™´¤IjÏĠ+ݤhŭN×eÊg·ğœä‰sljjÖuîZ/ğÒ^üşÛ½&èĤ^ÔEÛF•Ğ“*âùTûGYáî3³A 1’,UDbSġRŞ•GTŻáÚá{™Ĵ3ñŒÎfU֛ŠĴq~9x°|Ş^=è ›Mı‚&[· `ÎÜĵNl^8ŒïO0_ˆ¨”²ÄâxTI’%ĤŸuĉ}ÚZlĵ“ÙÖ¨Üí9'zMò@êç(‘˜ëÇBÔ_¸”(ɘÎçhxÄkß#Ò½÷’xÔlmƒŸÌCu°›fž2nfI.˜ÂÛ´é:7£öt ˘ÑŬt/‚ÔĊé{Ç´žġMvïwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwslrÁjĵúòsCa­^Ek|Ôä¸Ï]ùUFcÖĤpö޵İ {*ĉ)Í´“ÔXġᗲ9€ŭèP:ÓM‹Ü~iòż°:y1˜ âî†Ò“ÍvF;òë1•ġµèž;8ü$*"^ï%ÄÜUÚċËŞù}t&ŒŭĠ™ârÜàë“ï)鋤ijqFé7çĦ2KÓÇ'C ‹´l°&*kk]ŽĴ4ÒnŜPS@™Pĵc‡4}*“½g[÷†}"èÀÔuäzĥ•b÷tŒF¨Ëáy*Óo~ğÙĠİß|ûÖZ7 B9 ›¨šÖïş ‚èא]y ;–ÑĦħÌàLĉc™Ġx\PÂ^îŞx/Ùnzġ TY 6ċDİê˘YQĤ%³0P`óÌ ™Qw61ċ=öħŬoĴ‰‡§ÉÎePLLMċ“qò¤ 1#ŜÚsĠd°PF‰Ú‡U,şdÁ2ĊĵàßYm]·ËÏ4Žùu¸ŒTUÙÑW;Ͱİħ²Mi$ˆTA¨ 6ä̂¨mÙÏĠ,9(‹4BSµz=%SşÖš< wċ`0Ro5xësÈôgÏèĝJ/Ì,-JèħF=yÒ dVĥé‰<Ĉ6s§^Z]‹G·xJE”eLÍÍP`’ĴË;Cöċ(eĉ?˘ŽŞˆE+½~)dk˘Äs 0ˆì”m÷J­RƒIÄidŞÎx7!ŬJU9JœE—‡0Í7—ÚÊċ'ZŻNx L"z”‘ÚƒÂûžñúN[I6ƒÌM.gîw  -m¸ŒÂ:=ĝ…C]Â>Z—,‡fÊsÓĴÙj•7wbgıXê 1êçP!xBşšÄiġxxĊT5ċ[ Q8½òi]2’‘œc×gÈxä˘ËÄ,ĉBŜ:ĴÓBÓżt`ħGwA³YĠñ[Îĥr ƒ¤Ç.ê=[*kÛlÇÂÒЃy%"‹q[Ç]LĤħ,ĈôÉèŽş·ç`Џ]I€Ġ–dÍċo%´Ç‚xİ™è¤Op°>”ÇŽmM„Eäpiòû]|³ ›(‘ÑgTS~“ÖqWt˜Çü ˘)‘qħr:ħ¤"*x 2Ö(n™-(4ˆĉCB„M´üëİ(Í‰h&Ä4Q1=Äwl„# Öèžô‰úìa2_=ĞYG~^Š(ó{=tÍxŽÄ‰•Ç„bÙ ö`d½Î*Š XîRS ‘,bÄìsò”ñŝ+ùzn`è D¸ÊÀΧ½ };9Y6i‘eĉXc ıgŽ÷T_ÇÌ:tBĊ+—X^"ÛġìñÉÑúI"ҕ8ÌNE3%;›(şĠiŻ1]_é‘p2°Ŭ@iÄşŜfy}êÎe1;VɅ~zôËb;˘¤+f ÑÊHĉ/`Ġ4ImÖê Ÿ­7vşŒ{Gö"—ÂgĊëé5ĵçy½³KzĜ—s` ´<ĉ„L‰Ò,3dħ´Ñ>Ĝ•AdÚoMo=û”ϰ/^/³äŬZÈô¨ğĠ´ôŝ·nló”ómĝĵñöh™èiÁgE˜ÂÒ^•ÒÜÎdÛHî´@ö>4™ċŠĝ|z"Í|vuèğ#lGKô‰ĵïy.1bag+Ñ ,;›ĉxZzĈ2SÌ1“îĥ`Ĝş{ݵÒ]<°nx”ŞĜéCcŒœmêèòó|OO½:ÙTĜaTydÀŭ)Qóİ:sRKqElUG<€SìêUqÈÓ ¨*€c>†ò¤?_ Ôóeò Ĵ3XĈž6rcŒ°t[¤%e9ÎĉÏf÷òŜRĝšBÛtyœDM.”œ¸p –Ĉ ö8UCM^ƒáaJġœÙxĠï:J”µdĞo A—ıS(,5.˜'Ÿ`‰%¸‹ \o҄Ù?/tîWĴ×Áğ);§+f%ìH4k°Âünk(.F]ÇvçSv‡êt4/v†`çD„³3¤mr…µşĉ(„ò@Žĉ½ˆÉcpİë}òċĵzX¨Ìi3DÈɧdDˏq”žï:îZ×['Ŝk*ĴVħ.YÒ K2¤½Ċí×Î~2s*v…Œ4ÏA0rÚ6z2)mĠ•­yk£za(‰vÛyáìeŜĝW҄—ċɢžs ñ•ÚÇĴ½Â˜YÈI /ûCö.‰]œÂÛ L|ásĈldĵŸ Y”ˆ‰‚×ÈĜZ,šTŞŠ"›•Ĉ Ħ¨ü­QÍgŜQ9 è…|£eŽ…êˆK•Z9 ‚nêTyĴm°ƒôQzM˜ı䳙 }"ġ@ ‘èŽŞ ¸‡Ï.¨üÊĜx&"M…‹ĜÚ,İ×|ôQ–jvô oBË4†j=˜y4R—F6ô'‚"8ĉtŽŞŜ²İOm/Ħ@=JÑf$œTŞjŠH ²WŞ~ (aZœse^š=ÈwžkzgšQ‚`êÙz´(Ĵ’†¨*ŠS­-żvĈĥžEÓ7rm&—Q`$HË<ÍNJcSáËÉ^“;^µOK `äiûyħJ&SÌo7Xo^ž×%ǕıÍĵĞ{t ˜ݨqdVŞ~)C2ÛlíS1JĤĵ£ßmz €U]Z÷–’Ĥ•·WÓ—éE¤ûjcË,!ĥïlwşxlƒ0/8ëĴŒ)!ê#à%] SıĜÔxPè(İŜoÎ šë¨U˘IdġXĝDoÏ7„o$ìOñYê¨@Ġ*ɆfhMñ í&˘Zñ‰ŬùßÂܳˆ|ıÛM¸ċ–+|"Dë‰B0ˆÀÀĈ+‘óĥrÒ001ƒ1×Ĥ­ÏÍöï1ÜZĈ(fë£îĈÓ ,ŝ_³‹Ô³=ç6ĉY/oM➉/gŠıĠÊ[½„pG•vs%BfI²ofћÚNlü(˘¨Ż7ù¸÷y³…ÚßżU;*Q)1(”˜ÍhDÖ5ħĥ£@$,Z0li’5Qm£FÚ#[X„”ĥ6"d˘Šˆ$˘Šˆk ̚MTkŞ5‚ĈĤ2M‚“a£$Ĝ)1lR5A@?#˙QĜ•T~ŠI>?{$€ž‡Öıċòúcëùг cÑğmĞ,ÔÓ2÷ù×=·iJŞQÀWñŬĥ˜8^ïéoĵTNuÎOrFˆÒ‚ê­UW­Ŭè@ÂË˙޳-=.V(•Ĉİ€²yÖŜû>”I´£ŭ˙ìwm&Š*J2…t£¨(˜Qò:iħF[¤'ÊİòêİI2TŸœ ç`]ÏŻ~¸j½³É§—ë''IĦlÒOĵğ„$Ê£RŭШ‡L…•>T+,ÔOĈ§‰ù”ÙiBcĉeâ+hLÁÈrQPú†4P²ĥ;ô˙şoıëxĝsÈĴŽ€„1PúDÍÖċ| ×Y–‡ ˙ÍoEB‹(~ş:ó2ëû˙ŝĦ,Œˆŝ2coe˘\[²²yŭżĞ†mL/ë½ĜĞaîÌİ 0sĝiAFbĊëè/äAÖÈx_;•DÂD*ĉ‘ ĞSı ÒRÉâ<Ħ•Ŭ¨œ%Ĵ‚Ü8 +ÒÌEŭ2'ô`ÎAàâĊ£QĊ,†ü4²Ç‘ ÎäTQj°… ƒ.ĊżóÍB[D‹âħ×Ôcm%3:Äİ˙qR˙Š eö4lfÂA"-\­$Qëğž:ĥÈT#üU†~Ş*>™”ü Ÿŝn‡ür…a>…H]‚ğ;ŭ>OfÇ䨷@˙4ÊÚO½(2!ë!ŸŝC‰ËGêI[#_ĵ .?Ÿ”˘#ĝm^÷ûÒtÔ\×Ï,áĦXí¸êWâA{‡‚_îBÄ"JЧL˘Že"›ĉŜì}nž7l…d#Ïí·}–„[\Ó'™é„˙Tĝó™sVU°EÍ98`ÑJ œüzqYç³?Ŭ3ÈUŭŸë^˜Óúä|ĝ-³B- ¨˙¨ïŭ}jŸgzKÒCÙ9˙{gërJc>D˜ËNżjğ˙AaSU0 zĵQ½‹ÄÄÏ ³TÄoïÑ˘hĊUdŽçž9f€şnżl.şĊOĤ–|0ž$ UZÍz“Ş2HAÖaç•Ĝbˆ× “³€şj‘0ĦúŞħÀ²Ż“J²$‰$ŭ]هu_*"ċWĤ Ô˘+.ĞΔSĜò}z=K×X˜g^§öû*ŝ_üv{ƒŝŝĝ/“=ûá"$ehGôsuà–&’z[óÒO=‡ìà}ċúAêOсŝOġĦ™™Ĝ½6?”P]GôZrP!˙ùö¨FÈŬğ7÷#ö^Ħġ •…VrX UPĉô9}fŜÄ·ÚÏ6GŜĴi˙!sòçŭ0ü~}ŭ•€wġ€:¤%ú%˘tk“;)ŝ 2QíPı fCƒ)#рWPÉhW0E ŭYL;Èa·=ŞcĦiw{€ÍeƒX¤pB9§PUÊŞ%°EÄi—ÑŻÈ(ŸhĞȖ)Qŝ˘o*d)ƒŬ@$rFc‚‡ú%"KeB]FÁ kz?4B~$D1‰D‰UARĵ‘Ä Î úĊröF- OĞViàHLóÓ?ëö@ß͔JÌiÒY†úş‚Ĉ­;ĉ|ÊòUQœ}³J§¨ŝÁŝx˙,Ŭ#öH5‘(d˘½= U÷rż:6ĴïlQŝÛjÏhh†û-`á£'Û4iÀ8ü¤ŸÓşùÚŬ³ĈÑuqĥTÀZI5°96ñt貌ˆÂÂËüCùys°¤fŽt&a‰%%¨*&vùI%îĞÚşŭÚ·ZÜÀ2 ûizvlŭ£f‘}Ç×A H¸ƒ(Lş¸RE‰ġĠÊ(˘ %3Iób>ŬEDoîÖŝz˙Ÿŝ>sfÎ%>B êTJZj™ ƒTš,l/ŝ²ûQh"(‚‹ÒÜħ;Ğ‘³}ş*dEñ×ÏÇëóċ%>}zöĝê"Љ(‹&_]r"Ÿ]rĝî˘"2–=lµ*ŠŜliŝÖúvZBĠĈ½Önnx|ôçÇeĊ’(ÒE‰•RbÁdÑ~W(ŻŜż>ëŠ/ÚV"”ˆ¤ ˘—ğD m˘ßŜVo FáTß;ÂĝŒQ=ĠÊċÉ"(¤Œüvŝw\“=ۖċ]ĝ]Ib}:""‰ŝƒ˘£IDQ+ŭċw½y&Îêıoßĝí{çך,Y""(Š"ÄŭÊ#b*)"ˆˆ˘"(˘(ÑDGóŭ{À˙şÜ1)E5%ˆ" ğ”ŻÛŬd˘‹—çŬĤFŠ|é­Ŝ4,•ŭ˙Ó(´:H"‚Š (ŞÄ_Žêòܒ‰ĝúö÷òväI×#bKżż×H‰—Òß‘(˘"Œ”EŬÖŭ1>vOuÒ(wQ?µ×(ŸŞé,F˙)pˆ’$ħID_]ÔZ_}\ˆˆĈĈÏÇ\ħ$DXÑCùúğġëöŝ˵òQE˘‰ù]%6K%b˘~zDjJ(§j".ğħŸÏ˙9úÑЁI~BÑE$˙L'¨i Kù EPQAAhJ‰ŭç×zëB×ìĠ|rĜ-u¸iíĈ‡>>"$a&(ÖÉ$š³,ù²Äeó°gžè§ÛÍ·Žżxğéëüş>½Œ@ċÈ&%IËtÁtİR@!dz8ŝ5Ż,ä§gĤğT­*úġLñ$Sl+‹Ĥ;:Ċ?žÇ4Â'—ŝ>œ&È@Ż‚WŜò ğiW]u¨J¤U*ƒFˆ˘ˆ‰"ÄQh‰"Š‹&Ñh‹$Qb,RDXĴQQh¤İU}ùùWŻŽdEó–ÒDóñ];O/‡?­ŬV}ètÁí˙×áġßİÔÙĴ•D¤PĊU)Eyì´C׺ zĴK(aKG}ĉÒdђJŭÍ#u)E˘auM ÔÊ~í­ı„¤XcïèéÁh]›49QT2äwÑñ—ƒ~F¸;‡Ê­œw˘>¤+d:ŞĦXV¤yŭ}ħ J*Š?K3”b|f} Òô^ŝ[ÖĊó<şŸ|Ÿâzˆû3MiÈôò´H&aqЉÜİĴE:Ó9P¤ßk5Ú]*ë‚8—bqܲHOy5Ù0y’Š?ĤŸàŭû›G <ê[ĝSëܞœúç!dż;­_K10b64É ÊU2*JÔċ—ŽS8Z !Zyi/ôì~8ŻĦӓϷ^Î/~Љ?…ÊqUMUQU/Û¸ù„Ûò”àíb„ƒGÂ)0'Ÿċżßĵת*½Oŝ‹ĉżäë%$‘Ŝ¤N†_Œ˙üiçGĝkBĝßĉD3íyœÛŻe=ĥOî³RÜnírî^ 5n\ݍìË{GK˙Ğü/T&ƒ:.ÓHÀž×I^ 9×ËY³<jò/ Şż Š99L"¨r3eGNêxÂÉÙı‡–İGÖÍÒUĠ|ú]OÀ.8g=x=‡gÄv§_È`Óä+Üp/Âì½=ߜ¨ŞcËâh}°~D>R-+@ˆ4˘¨…úŭ:‰¸F€ áuú^~<ëŭÊ`ò.ŒŠ*hŠŞ ŠŞU+4q~˙N­5҇Vs%Ĝ“ĥ˘fĤƒÓ`d‰ ĝĴ óŽü]sÛ9ğï*hŞŞİı•ÍñŒòŝĝiw§éċ§­ÔŞiç$Z·ĉmr˙ ô¤Ü×író\CMĥĈCVDnT#ÓQ(Òı¨cF\ŞŠqŜLÜÚ[$ÛvÊ %”ↁ¸!!PĊÒTY™/%Ï nÂ%Òg: È/R)&¨³Kä7Ìİ•;TvlÇŝ™ŸƒÊĤ<ώŞħ4 ‰ ²¤‹ByĴŞdy…Çš ¤O”gÌ@¸{•E 4a mì.Ġƒ‘7Òŝġë…EQUU‚Ċzò—Ĝu|˙Ë_štêŬ03ï$) 0§üP2C($d¨Ş ö6í·…êe§NW?/Ï<·„²ë%Ĥzî(ğo‡ç·Ş°ġŽƒG5§=1нNTT™`M™ƒÒ Äd¤‹b1·8Në”@JG5ÙDĈŒ` NċŬV¤Ä{Ĵµ+‚ĠKI…ĦPQbgÖ‰RonnÊ%ˆijÒ£4Û#ĝžß†tDÒäV-h3kt~´‰žžZu4ô—ŽĜ‘ċÁ˘"úYQIíÏàF ĵ˘M-"–UU ITÓI"8. ‹Óż—ħòĈNÁÙ*ËFÁ´…#“YxÍ€ÒŻż‡½ôQTÓUB}ÍwËW\AA °’0 !ĵAÁ !ô€·ÓċßñÖ6J‘7"†ċÏJÔŞUL‘Páhµ]’G-’oš$Ó!ïËr—…M“ĥÑ:=…L%LpbUÜùÁŒÂċŽj*6ˆÑıınSş K0L"’ši2WĤö3AÊ(¨J°]z,ˆ–„¤‹T”³ġE5L_ÖöŒP¤•IRއ^\GÑOìÄKÔĞLњ6^oŠŒá­Ê>Ë,$°ĉG…tv’ŬêÄT µÁxÚÒWÍêĊ,ŞıҊċˆÑIÇ:îŬŬğkŭ/çêŻı‡eÛelPŒĴyÛı£ñÙsÊ÷|ùÄ×&ôZ,Ħ˘ÙúâÀ˙mÚ w(Àġ6½PƒèaàîcΞÜM DPe„ û—ÖŭßÊĠùŭ+ê!ßĝ °£ŝOîà˙ ~§lXŭ›T˙r+‘½ñĦ˙cô: ï5,ú *·*ĞtEóĞñ%`Ï/Ôġ­'9ß%MċàÔI0cgú.ĴK ¤˘Ù ĥÎp™ûs-Ïŭ%òܟ´ô^6ĥçŜ°¸c'ĴĴİ…*³ô˘ż‘sBUU¤ħ!*œŒġ÷ûŻçoÌŝ:ŭ?äÙä|wÄ5ëÊaö(şŭßä­Êşüœĉ ]+‡eŸÏ·ù1ê˙™¸vïGu‚Y•uÇħ˙OU˘°žŞK!î%5CRĠîA°:4ƒi^Ž!rö†W¤aĥÙg‡ƒÀüü N'RIR61OVè,° ʝá PÉPÂ(BœÁÁb ×%¨M­Í½ñçËßÉ/³ıĴjï İFŽŭĴ™àxş£şĤ½.÷j‘İ(<Ñ-U~7ntV{¨Ùge04nšÊ£SÂ#TYĝ ›!èônĝЍ(*´RÀÉ"hÈèŬQÙVq Ĥİ‚¨4לü×o@”ÎV7$ìiò]K{¸—×/xÍÁi#hŭ,˘…@Ü$Ê&{SR‡ÏPÁMÀD§ı+Ħ•4ı€ èÁù$:ÚT¸Ż~?lDúżè¨ûš:Iö5€˙l/Ê>ŞCÏXĉ?@àÍpġ>Ş|÷֖jßHœ­†÷VóÊCĦZ°ċŞßOĜµU™Xò+Ĝ ‘ˆĊÉSÖFŒ R6ñdWk÷ïŽŝŽ3Š­HuG´àŞŞ-”XÑtXebm‚;HòÂ`žžgŻrgî{^8F‘8û·É7Uaĥè,çyµⳝ JÈlÀ Ê@C˜£ˆàÉÍğÜzìÔĠÑĝtMv˞8 ‡ŝ_éùiDçÍìĥ €qGì¨ĈĵĦûĠŭTOüÉ`‘ˆb„Z˜EPüáëó@âvt™˜€`ĉ&!ĊĠ†| ½‚H¤˙T˙R˘J‰*á ŝŸ”'ŭĦ2L“ „â?2#Şàŝž?ċ§ŝÁċ×˙?>‹ÌPq9!u——íÓIKA@›26M´]ê›ÍxpoYgĉÍÍ{5d͒œZ¨&0@ûĈ‚ˆ²,ÁNżçÖ+6F†´áaÈhpCê ĊÈp‚Ċ‚ :=ÈĦc£#£Á&ğßg|áá$Íyí?½ £ŭßs˙WüċU :ĈƒJGçŭĥĠúPá›WüİéPÚĵö´ymĠàêÉÖğèk_ñ­ġzßÒÍêNî·ż÷c/ö딽Cu Ô}(˙Z†Ô&•xTgSáA•&–ëŬî÷ĝ÷ûĥŬ´Ş¤ĝPìİÍX§Z}J¤/Bò“á'ŝòYÜKô„ñÊëó)|­ÁE!ġ€Ï˙Uĝ×Ċ òÍĞä›]İó’ää ÍÜlĜÁÌ&"†,ݵo¨À‰J‘0 !A‘£ëXŠ}`ZċPRw’ËÒóK­Ü‘×úù:¸şH6ìLqfK† ë^fú;+˙Ĉ²¨ëd$•YÔô£ÏWY­×|!²VÛħ]ìċÓçXNÑ ‚…T@R_ê @ĦbÄ:…‡+/3[.“Şè²ĝ&°Qz뽙­ò͍ö–wĦĉïŞ!ħPìĉŬPt8>+f˜ ĴJ…JĵÌ$9K 0 Ĝh p6=[ċ’‡WXjhï˜k‡ ß4C( !D…W* 7†Ä‡T¨AJĈÔ0ÑŜWVd7ueÇĞ5ĤšŬğÓŬ•C‚Šu†ÀQ P ‚Ğâ+jĦéċPNmɇeÙħÉYÑĠîÊNi,5ğ­^KÙ îšDèĜëRNwş$0{+aN.XPC… *H°áÑE`U‚X™³dVp܅’´Cy3ħïoRTh×(••ÑĴĜòúќpL#W³˘ÓpÂï êŜƒC„è×,èèÍ=9“8a—fhÉcÜ6ì⺃xóİŝïĝ?ï£ŝßü˙íşPŽƒŝĞ ßí˙µ'ŝKSBüÍ˙,ECz˙ê]Uœ)óVÔ6Ïŭe:‰‡¤Q̧ǞÔ+ BÊ`.e*œßÚE A £ûçŭáqÙŻ×âÙ˘‚İÚŝħ `áPžKŭÂÈ@ݸùqE2¨7ğħG¨CÉ›œ9|Ï7ŜĝYÊġÍk R9[p˘ QöNiÁ£‰ dŠp€"c6Ë9fá Bŭ°’"\Œ31P9Ğg§PĊ¤eŬC‡„\˘ A_ˆ%Ċ(Hë5•ÑLŸ>ŝ‡ÓúiOÙû<.>|L#sñéÙĜ8ŭĤó›ŭŝ˘ħ ˆ%¤[LaâTYSŜç‘vdmqûqÊŜ­QBp4‚C4Ìċ:O `P,^qïqݨcWÏżœ6"UÉ\•Ġ‡]a·˘8C‡ÂÒËaˑ(Üƒ(œJp’aµ•Ëİ ċĤfŞ^É(AĞg}@“/’°MŽÁŒä ë]^˜œ÷OaOÜL wÏİ;Gߛ>ĞŸ/ÊÉCgšöŸÉÄ­Z<ˆ%ÌĴÎBï4>ĥĴNQѐC=›ĠâÓıݐ˙™.û·Ĵ½fxÏüdüŸ[â=wËa•ÙĴ˘Z\N2ħĴT„$àqɁ…Ĉî0ІL™€ÈîÊ˘ÙY•ƒDCŭ69Pš!4‹cJ²Ħx%ÑġPí˜ÂDD4@Q0`´ŞIe„Û!Bvè7‰ÙyT 0eĥĈ¨Ämċ&İJ”CM˜EV’Š„›Òf' ÊGQ ZYŸû ×BX9ĵÀ["Îċ)vP}ċċfŞùqԜ›u”îf‘³ò"XQ$2 Ž…Ċ-C >-,wIš Ê £0R¤œ&ĠZ.êqœîDDEaÂċĜÙL¤†XÀÁI€ŜÊúŬëÚÊ?P„TPìiUQËĜ|-˘œ@[”S0‡MêA!˘¸Ïn6ÙŞĤY ]RÔ3B<=ż‹ĊÊÎġÇċVÍ7H͓áolŠ‚ĥ´Ë–ıäv-n…HeÉèLÛ'×5şĠîà“xï[Ŭj÷pIfûyĵÓ"¤G\2:A¤£Û,:­†#oĈ€|Mĥ>eWT9ħ+•Z÷áë*şöWažŒ°Ĝ8È"Hñˆk6-aÁA‹Ĉ……ħ £|vIùPÊ7ÉÍĠhÑ; ¤èòŞtĵ²µŠpĵ–Ó\óŽJϖ‰xéYĈôìYw0  PG֘H $@Ĉ[aş¸EîĈġAhž\Şù³ĵ n¨Ú{,2ò`\ÀĉŻxŸcF9Áiĵñ Î×vĴ1qZo†Í&ŭŻ#zoL—âĈÑs|àğŒ½MžWá²zĠщ dì2{òÖyCô5Ùî„Í—wUîòVğÍÍè Óu^Ûù_u{£9î ÄF:qáAˆÀ­8œ$ ĈË @âž5Ӂ0ôq8Ò˙ ÉQü™TŞ)EĊ ³ĴĠ׀*ŞHÜÀë çÂÀĝŝ ĉƒħ.ĝ]ĥCšŒì†;:0yr¨ ChD–óï§Òï%|ŝıüëï?ı5XY¸—\Cnז£UZ}ƒĜóżñ™çŭtCA-­QĉŜù]{Ú]q*È 5Bż`úB?b+̏­Żñž$WóŭóÎÈ^ѐ=!C$C¤i’Ô½HF–˙··ÓŬÓ×Ëĥ·ssħÎöp¤ÖĦn§§]*ğ„%Èé)4é"”[rTë 9.@” Ê*îüà:@§Ç‹_§Ö-g‡+Äûú§Düwˆu? Ú8Ò §eÓÚ˝ŭ´Ħ—yšoÊOsuğ?ğĉÓvät’1DA*¨(°WñBT}—FÁĊv#€€,‚B:q)ŭƒyĊ<Ç6İÙ%òv¸LÒY|F;÷lùğÉ O½GĞ{œh˙×÷oÈ,ğ›{Ž3ŝ]úqĵŠÍob‡È”%N§ĥ"aFM&K…"(DUB‘)*İ!Q!RBˆ^ƒG›ħ¤ŽêCtœ³¤O7ûvÄk4”™Éèş6˘Uˆ‚›âŝό¤İĜê²$²Ç8ı%‘‹K%´y4’4àO’ÙöÏĊ…êx?^û†p}‡ÜİÇ4ÔÓQ=£9ŝ6żd“)´aĦ“yV3×6M‰uK”†²Œ2t÷vxÌäsVpÌi!½8Û°ÎN ŜgàG|™Û{B’a&vœR7%Ŭ8eœĵjÖYCŸk9#}™K ÎĠF·#:97²f¨2g&ƒU ġè²Ğ…v› ĴTDUU˘²ÎÍ:4k•#RۄÒ{ ¤ğ ›Ù‘&y2tG=f;^š’sŽ3ġİÒ_"˜ùë!İ:MÓHà˜hèéyĉß$g%ç5‹A½ÉtĉĠ7ĉb ÂSk·EñT`SkËÉsXìH²/—[˘{ĤRov%£ÉÙw‰ġ˜z=£ p… Zö{ÓXÁġ„Şh"˘˜Š:z½Hġ_´¨kĈFYe…‘6`aZÂÖµYÈQ²³˜ĵ4’™'ÎSĵ‰v½˘ç2ŠÉÇ,ĦUîgĵ ȘŞd…J,W“TΔ(#T4ĊEĉéFI#¨.Ĝ“YİĴ…CW™ĈxĵE˘~Œ-Ŝt!xš,•R¨C·ĉ·pî°Éìòš<üïĦÇô]ÎD,œġ†&äeQDR*ĤC9Ĝ“GîÉ&i™Ê’6<ċìĠ/ɔ›ÛäMZ¤…`MÊì‘4‰|â™" J"j+ĥِħ…’nœ2I€â¨ÚMĠ7¸Fs„oBê›ĉCj>#gsħ… ]ŝî&ÈF‡Ĝ—݁£¸8ŻM˘ûùÓĠz·* “8TI'5csrS~Àà<ï‘75hÓ·O@AÔ6†<ôĞ×NÉÑĉ¸<›:&ó0Äê=Aô]yš"ÓÁ"šGD‰?H]zçşh‘Nä‚H’ÍRM!Ù JNPáÊ;#ôîÙòZ"ʅEğ^²~v2—xP²ZËZËZÄOցĝïċÀdiĞXYċÛ&'ğ2(vÛG•ÜĤ³rhÑûm4{÷g4jšc9y(’òĈè.úÑyHš[Ĵ˙;~Ÿ)l¤yĈçÜeäVOĥ÷//tĵÚĜÊQò:&•;ìA3,²êŒMş7‰kF1 J`¤yŭ8ǰn?i"I×ɰGDo™$œŞbT›´,Oà’Rg„ŽŻ2@?Ĉ6lI: ĝĝ˘Á"ÁB;UäƒÀ8Ê$@2)|ħú ²$‘P* Pˆ¨ ñO(f€ÎI5Oû­ŭ'ġŞ)/ùİ·áŬyĊkŭZÌ1?9ŝX˘=S[xĠœëZì˜ k€ê-$}ÏÒOÂd8nÎö½ï}÷™ÉÉŝ) v T_è?”ŻèËŝŸôğğĵ§[9ŭ$‘†úzêĴ`$ ˙Ë ŭfà?ƒôžeò¤°ĊsY…ĜҝuÊ+\q¨:,‡) Â;­[Ħx¨pWYcF„qOç ôşÓÈĦKuév Tí.–Ġà…÷*nş97……‰^¤òwȔ6ܸn½N‘9Ù<Ħ–âG÷l£ùǕ*°³ó™µ ğÌĝÄÔ0loúžo ĝ&ëÛïIAíAĥĝ9]Dë2™D[îÒ[³ÙBۉĥ>êƒ AĠú-çĴ|ȧ/ 9ŜA™ÁYòYċ;ÛĦˆ‡y·Ş@ÑşXÈn$‰c}áñIC³É-·'_Un§mÌúü …\VÒ =2ş³ÇŜĥÜ'L”Ċ1ċ&?eó…<ċëvXÇ͙àw*ÙeiċSrÈ-mÎgmuÚ9îd™ÑïˆŜö6ƒ) ˘rğŞ s&ÙèlÊ뀞g´ÊO^o›t .Ĥ ïĊOîŻ éZ™‰tŞIz6Ŝ\ÓÇr*†!|Y-M {½€×"Ĥ=h6£ÁRñpyH}w6wÌ[D­½&Ïğ@{+ˆ ÔÊ>p܁ĵ~Éñèğ§c1I脂ŻRËÇzzxEgysÍfJBı³éiQ²^ÜoÔߗŸ]wôòëż˙½QTĊ{ŝŠ€~ż#5mŸD,ú3>Çg‡³~ŬT€‡°ÊÚ:£[í†W=zsӐ;Bèè×ZTΚѳTUˆQAGGÓ:/’~¤”Q&#ĉÖ39ú°c*ŝÏJÍúùïσxtŸ0_AĊB_8) ˘ċ̆5¨nXQAGż ùì ;ƒÙíUQQU4UlSÖ³[Ŝ ,’òIœĦdÄbÉ2e‘˙Ĵ‘˙ "ĝĜ$^c-n’C I$G ‚H´’ ^  "ùûëÈכÀû“(´ 8ÚĈħbÑE(Ĝˆ‹Pm‹(˘Š(˘bĊƒEdÚM[V6´•˘Ĉ£h¤İ62chÖ5E¨Ğ÷.m‹1‹ĈÙ5’Ù#ŒH 1(‘y˜B„B1 @ ÄŞD PR˘*E”‘J„R’ R˘%(”‚•")I"Ş&µʁJ’ D)Cd­IŞ“V’Û%İKRbD(!B %XiIµ“k%ĥ“jÉmH#ƒ  ĴHÄ+ŒJħ(DÄ(D %­&Ġ&ÛIZKi-i*’İ6ÉĴU&ÛFÚJÉ´ZMĴkEħQhĜĊbĈ6,l›d¤Ö***+ñŬ´hĴj54QQlm“b‹bÑZĊcXÚ(ÛÄZ5“T›EMIT[L•ŠĊ£hÑdŞJ˘£FĊFĜĴ–ĊEħ˘KX˘ħlQEcbÑhÖ6ĊQ´Z(ĊQĥ4›cQĥ6Dm%´X²lm&ħ´›b£lTVMĦ‡?.š=ğœ$)JR–€(ZF‚’’†„‰H{J˜B–ĊĈħĴmŠĊ£XħAĴTTccl–Ô•(ÔmdĴj6ĊQcFÑ´šÉbÑŻ9ħħlZŠ’Äbħ¤ÑĴ–Ĉ¨ĈÑĥJŠÑlmħXĠĈ‹EħŞ6(´RkhÛRkY6‚…¤yPÈb!b&¨‹bÒV-ħh´lb1I5%ŠĊ¨Û˘¨Ĵš×ìjéF˘ħX¨ĜĴVKh¨´[&ŞMFÑlXĜĜÖ5XÔZ4–61m¤ÚKFÑħTm´›A´k%ħV‹Qİ$ĥMRk&²SPdR(RĞB­*´ Ğ\HJH%V‘JT JTJR’‘PÑkQZĈĥ£UFĠ‹P ”€”ÖPr” U~×-Ş-mZ-ĥ-j(˘•R…ZThßÓ§§ yr$i)F†”¤Ċ£ħħhÛbĜħĴlXÔZ5E6lVĈ‹bĊŠ65EÔ[ĈħĴm˘Ĉ-Fħ¨–ĉ1Š bĜÚ5‹cZĊmZ‹EF*,[ġîÑĥĈÖ*ħĥ*‹cXĥ5FĊ‹*6->ujċ…$ßRHeIP7TF½ıëJĞòe'2*žœútĜ. @a^!M@™(§0€ñߓB÷ï£@>r"q¤*q*‘}|ğuځİAĝʇiS˜ò!’_>úĵž„)„/8vM LĦ˘;tß´gnˆ4žÜİPí"yÊùÀQëdŞnSÒ ç^x¸:Ox_T8€^Ĵ Rï=ëB§¤+Ĝ‡v„ËJ'2¨jN}{u6Ż2sÚ:L,BD„H*P•C 1Pœê$éÊÈoî°j€òƒ í žú0{ˉŠzÀ”‚ñ"é*„×—=|·Ê™_) hZB…{Hó/hĝÔd’5k²Ş+XB—RqŻSĵ„ŒPB ÁD„rD ÉďOLdR ×Ĉ /=¸ÑP3)F é)äo]zuÒ§pEé ]sÜÚ*ñ*'_<ízÊ/xrNd)P;ȉÄ+¸:Ê.O@§\N’ t€rQi<@Ž ½0_]´ĞTumQӍ‚bĦ&ußAĴİuÁJĤ¤ġ„|àq‹8r0N1‰ cöÓş÷“Üżğğù_<Ŝ„ìf „ W __ħyž,âZŻĈxžYž Š3ĉÈ`Ŝ<Ŝ°1DN‡—zd…TŜq–…O×ĥu|ċF•:Â=³Ĥú^|Ĥċ5ŠĤĦPí)¸CRˆzÈzÊ/n2ïŠ9ó0†ĦMʋÛ|ġĥ s l‘|ä¤1@ßD›ĝÚ$&™Y UH[n[ë<yA=e²/HP8‘]J‡~ö'ğ5‰$ ‡¤qa‰y²bI•iCÎQy€<ġ‰Á³ ÍkŞôß]ÒI&ħ´’m‘5&ŞJċğ,š*ŠżVù°‹.v  ‚–“rİ'J‰TR“JC֐ß@ŬEs=<ï.ܐBKÚp‘óŒƒĵ´D™™U%’-ñ¤í ¸8½Ħ}3y”ġ}:bİé œJ‰İöëëjŻ0*s Ĥ] CrŽċuëëž[Q’ƒİS˜ġ„p¨R†yhôç=$Ô£’'hQ|téÀĤàNġ”òŠîÔ"ûxb ÄİÄİ­à¨ä†J†ï*R.ŭŭ½=yġÏN·nŬô3ô;³…i¸›Ô7°µ”‰HĦÀî$O˜\„ó6ô9xŜtXèn R JîU<@/¸Ĵ‹yvòÚ s"qˆ½`Gqĥ”€t‹\xĜ Öñ‚•eñ)ÖMȧ¤ĵAž;èé0˘s!ıë(nêtÖ½%jAN²†Ô.f"ä ,é“.ƒà19uÀb§U“áĴ°~¤ÚmSÙĉĞıŜ0#Tıdâo1˜%‹‘¸@8ÔĤİĈ‡ ½&â£iaŽvÏ Ù|1"]ó{ı²'qŻ FàŸ:LÇO† !C!ÀcŒ|Ûçıĝ2½ÖÛiñ#ëĥ ²ŻÑC”§&¨ĝÒĝûâúÇ~ÑyR!4I_PïG­}ï2ÀÖêöYi%-ŒV•QU‰i.S/?FZòé+´\äÁôÀhú]Ê'z½5í£h‡Ÿ[yÈ½Ü~šŞˆÏË JôV”tüüëŜxsêìXÑĝ×½UrŭîzÑ;•11ßÇçtZDjH5H}B(µÓŻPÇ·ëYÓ!%BB|”{k´Âù÷×Îëo|rï˜IÈxġôé&Ox:éĴÒŞÓZêD¨D@Ż·7ïï+âTOŸ‰’1ş×tâÎ8€‡uĊ dżˆH:ó4œc„^S Y£$ŭßoϟ=}Ôo, &Ê^Yüħ _ÍŸÂccħ67SżtYó9]{ÙĴÖWZÑ ÑBS9…˜:Z@†”çN8fÌtÁ¤ïzvÀĊ :û{œ`Ò KŞ ];3 ¸NµEĦdÊ 5âwġ­šŸ|·ÙôÇĦÜ^9ÜŻ‰ZOI[Ĥ¨UĦiñ£3ÎkϕTrŽž&=|•X_Ö­ B£_´>ëϑġžžŸ‰];L[Ġ“Ô>Ŭ&‘⊖Ħġ,ù I9"_zmœ œ e1d>#CécĤĤi ÀB•8ùšs(+Yìw}ÜŜû‡ıĦ‡‹­ħ™öĈúòHÇİä=ê½Ĥ½>İ˲T:ÂĦl+ö>ó’~r-VÒçEċ9.¤ï:—ÓxwòÏ<ˇ|Üeğ^]pQÚmĞé£Ç_PÌô”cKT?–W„ğ%GÄpÛĉ xŭ&'áĈ˙ žkÁġîü) VğvxÖß\ëçŜĵ³‰!BRM]ÙÙħêÈ$›\cGç?5í:üüúÏ£³ 4ĠvžŜ’­‚} !#áĉGÍӊ8ĝF0†âi£ƒÏ’äx…ʳc„E&âû­Ğßӌœ!Jiӄ?[ŬÍ´|ĝ™äÂí²žßĊùŜ*Rf—,ÙŬŜ7Ŝd%àX°B†2/Ĵ<ÁNཁ{èҎ„À@³<÷˘Ŝĉ¤£×°ÊčW^çŻıAÄ4•™=Ħçğï?B!òAĥ4JŻ×ç=›­y*ıİ\GóŬÍŝUğOĥ ԂÏ‰ŒĜèœc:LAÀ”Bñĉ 0秉öq…€ =Žñ° §—„>ó¨›Ü¤àxñ…;âêWÓÀl˜8£Ž—÷ĦʑŠsµö:Üí+ĈŒq ûÎk5ùêê³Ŝŝ&ä´1Ş*@,˜cŒxâH££ĉ.žBgä÷Ŝœ´<û99m›ù2uİ–ġl'Ë´”‡lpħħ@'ġóE–­— Q"Ş‘\30Îk5ŻĠ²dYfÜCÄÁ“O´:mĤ´Ûħ]¤êiÒUµSìŸ>ĝq­kĠ•EDy (>J…_œôO/áÊà˘" _MurjšŸœúïÏYA΁£ä ‡i}§Y7Ġ jÜ)BŝóĴúj¸ ˘r{CHb“=Ê 5¤Ż·nfìúû¨W¤Òm Œœ)žûϞqF•““4Ş1~îêŞ½!Ûۈv&ÎH’ŒQĉƒJ3:\9ħ£(‡#“µvÁE]¸ DˆL`Ú1…8Ôğ+ü Ġ><Ò:™Ä½§°ö°§ ²ƒÎÊ9­s:áĤT“Îsl~U°]Ïr™‰Ž[QŞżgÓÉŬ3Œ<˜óÇRšÈbÍÌO›ġ+f&6>ž·{öjĤçİ|÷ 4|çË£‰Ĥ¨cwם–zxœhDIÉLÄ.Ħĵ%‚:}Ĥ³ŜĤžnK#F5Ħñ·ŜY>o͛OoÛÒQˆ}ĉfĉŠÚ5mcı™•ĈŝnŜŭó&Ó­@ûÖqù ĜœB8ƒ%ÜŻ‰™1úIäéNPK"AşŽµ]n]ĞÜêŬîû2^Y•G2ş~^umŻ.$Jê#“] s€AN”AWnï•NuÏu¨Ü6ĴúNÎÊÒc!N"Ž•K.NáÔZpáH$)Ç|Ž6@C‡œ˘,‡TâùF,ğ Ĵ­s7Kš *Ĥ²-y¤“â=hÇjŠB‘mPÂÎ6œï;ÍVOv‚ŭܳY$¸!ˆĈ ÓÖĦú˜Yç2ĝ˘`šg8ÚL°½Ïw57˜ż“¸SŜiÔܘBYĥ\ pïu‘€_ˆŻK/ ¸4cמvRÁŞ‹;żœùei+iQñé½faç~ş÷ÈíĤ0çÒ #‡Èˆ›ˆ´ŸW.ú€>Šèí8ï‹I̛oĦ)z’u“Rjj–½ù8˜ÑÒ,}\Dô–Ö%}şm>ˆs>…>z…}ĵkí>šŸ8}%ÓYâ³&Ùh…#ÌÊ-‘üÎZYÈIĥA#Ž…m{ĤB Ş´ÇV0 <ĤËx°IJ†=ÔxĵmßÚ;z,qÎ\^‘ÉÂΚ¤À@r¤ ÓÛ`päâi$Œ!š-€/ *"Ûğ`Q%H’,­ó!Z<ĥŬ*û1—Eäĵ„! ”GbŽ'^\)ɒŬ•Hó¤Î,÷31˘'Öyz@ÓĥßIÏ<½Ğós˞&×˖eò̽Ŭô'5–}¤úġ5…ŭ÷w¸“§Ĥ£Ĉ7òyäÒk'¤Çà„À7í1hïp,œídzÛÑew)˜;ÌŻY\ĥˆ8@4ğ8Ĉ‹ Ż8Ħ•Ó@–‡ÂŸQËĴ"… žu܁²N0;ĥPÄ!Â0‡Ö´œ8s0ĦïĞçxorŽ iN§ĥħÄŬ¸×“Z}ŸYş§ıiKiçİÒI*Ÿ\‡Ĥ;óï=}mkY(‰‰3ċ•ĤÏ´•ÉQ&U†!ÈÜl¨rĠ]ÓÑĈ Z]{hÓIòúğğûÙä“ŝŸĝúO?ŸÙí§§ön™£–Ëíŝ<ä>Œóáïû4Ġ¸;_ħü˙LJïòÍuAë÷˜=hŝ…ŒÎÁħ‹ô*a;ß½G^ ċMu;›Ŭ½Va­raĈ–Œ‘÷!.̉†ûÉĤŸKĠĈòš+cĉ˘s‘ġùJH9²EŠâ y“šèD‚ñßÀD†OxĦ `M2ÎĴ’€oĤŽ[Çĵ³+ÌhUĊŻ`Ĥè+EM÷k/rĉ‰193\Ò`j2›?Žë l ­£şŻe:=şĦ^q¨áîom+;·799ä@BĠ>J6Ɏż#0ŬħùŽ”@YJ£yċírüoUUU!e&ê ¨-JžDÎêƒġyw;R÷ĵ çMñÓÍêZ™ğÄÌe$Éim˜ÒFkÔÜ>¸îĥĠ}w ğ ʜÖÈĞHyfŜüÓÒG;.Üî•4פĥĦϏvB7Öĵ¤ÙïÊÊm…=•gDÓ£IYv1ĥE²À²QéD¤Ĥnċí%Ĥ˜­š˘1vä T‘ĈĉsVµîzO2CöÄħd›À˘aĞŠ/f.”ù;EŻĜïA/šZäàz+çn’`|š€qÀ˘ĥċ·ÊË^ġX@[‹‚Ĝdûxë]œı[ŸI˙ê êìso[ ÎXÜlużßüxxùğĜĵw#Ŭ!“ĉnÁ(ŠP¤€¤0 ˜hÂügAXTğ¸|X ê@Á…Ċ>ƒ˙|ƒçżÙ÷ıŝŭ~ç1‡öüLHXñŭüŝŞ-ìÊÛ~ö{e…´ÓÍÇĊ]žMfŻî{{[ƒŬğ˘?pĴ zÀŻOÄ?ñ?bqy?ĵĊ;h´ÙġúġXđŠ!Ġ‚>q0Ç ô€U„ä@]%šµëNumTü8E}{ós}zàiïü‰T_lÏÔĞiJ÷’‚Óí+<ŒqĝGí‚>úNşxìç\-ˆÊcûŝ?NâqÉ)†ÓËÑżž CûéSŽI/Ħ) ÎyĦš=ˆU.È‘ü~È4&cÛ hñD3,4 KI–Á2BdÏ!ĥ½÷ÄÌcGG q’ĤˆÇĈE#Aŝ³cŝˆáhĜÊútĝÀB0°/áëó~\!Á8‘î‘ÙLÇÂċ4˜:ċġġŻ>ߤÛFÚ>“Czüşĥ­RdĠ´ż?;γíÄ4×mzżğ­5òáÛJEuq‹ˆq‹ tŒ!é˘1Ӈ8ŞMO˜ à!#óñ{ġSô|ÜWÏ7q-ġĤÜä4Ôħ/ɔ~Éİü„ü‹ŬJ]²ë.: iŝƒöü9_Ìġ_¤\J,úŸˆ‡³^V~àbDéçĞ´ =L)"Ğşúû×k8á‘öGÑyÉ~ŝ\Ġ·8% =zù{wà9ĵ]`÷ƒrîkÄż<ŜÒĵÜĞOmó›Ö–·¸eÂş“>™UUĈB>¤ErƒçßYir@)*0Ĥ{İVmt‡âkÔא6×ġĵ…i¨[.^q=#žÉ 2ONĝğĵ\] 8‡ŜÜí"O§îËkÄ>QóïN`ġċ”k i0¤)żèŭŝŝœ_=A·ñ)}µżŬï[Éj²>ÂΖ—PÖ`@ßƒ÷›ÏˆáĈ‘„?ĤL|}­gÒ~šÇé+hZ[Uhëó1­ġ+â~އ=¤'O‘ëúÎkB'ɂq…TĦ­C!rëy†„Ĉj7háÇò> Ñr4·ÌïŽÒ\‰i8]ŝ²Ĵ–óRż·pş;u¨´}µmlüëôá\JÛÚ}cXĠ{èäġ€ˆ0q5.)ŝ†"ŬÛÓĠ„ĉRÈÙsŒh:ô'—Fš½Â½s\1vö‘ѝ]o^îŠCŒŻ—òAè"NK–8üŭ==Ĝ?Ÿ70ÜwäŸI`d~mçbŽßZ)[ŜĦé"ƒ °/íä÷׌‘²ÄÀÈôkŻ>D0pä‘:o²—8ƒ…!`<óìhÇŬl…Ġí° Š#& 2œJ=ñşŻÒF¨0ä)M|›jŞhó˜Ŭ?`À|ğ2p0ŸH1 òğŬßmÛĜ‘ô8<ÌòïoÊTß;34'ĵñ%Móљĝô‘9ÉâuyÖĤĞñ:CŸaŽÚm;3š¨?Q”a# Dœ 3é__£( *p<‰×ĊÔĊû×͇ħ>•M [ÒOѵÒp4(/ħû°'Ċŭïü|_9{|s)éS§·„íhĠ¨ه”1Ç+ü_Í>1g'É)2#ï?O†…Ñ J::…z“Ú[ôžw…³8–”~!AƒˆAŒœ£Ż €k)€Îžê  ˙“xN!m[žçGyÖTmĜŭܤëPż i6€yAİô¸Žx÷—ĵj’zJ÷l Êöbˆ"ÈÎA_‹Ż)|aŽ1ŒóĞ… šÒ —´ÇêĈ†zOµ%oe¸Š_âüUĦ”ڏdS†¸yOŠtŬUùىĴCô?wà)8Ĉ>£Žd{ç_áÀƒ“ġi‚@cÂ2&N„M}#ÑF$,E ž÷•UN—‘óç•Ì íp΀9ŬŒß‹¤bHÄJ°˜‰Òœċ1d6P öz(‚pç΁ġíñ9ĈŠ„#¤táì]=ŸĉHĠ{ıiYsäËúhĝ‚Ö8ŭNŝŒfÇì„r×q‘… Cüı|cäĤbî—]qŞü“ñK@û7ËŞ=:kOç!§ÒmÔ´Ò£ëëË4ûûïĴóp-‚ aYIĠó­'8Ñûˆ‚1~~˜"í(ħÉ ÔŸJú 'êcLt¤ĈH[.Xc™Dd2Ù›áN1"pçĤvŽ“éċ‡ö“Ŝ=ÏĈùÉŝ1ޏ+RWˆİ™eä¤j¤$´Ĉ³2Y‚šğÇnZEhˆD-iXQôÑŞ½{ż¤ÓùÙ_¤_­È_A˙oĠÎKJ™ÂN–†Íz“l£PkĉCo·ì¨ÇµJ=!ċş˜ñĈ1Ñê0ŝ>2Ş­ĵêÏĈĞ·]ÎñûGwïÍZV\='ĠΒĞ:hÁϓMxù~½`s!½~7\ yïOŒ $ı$  9/Ġr1%­ğġ1ñZ|McV·żS\ÔşlĝÜE?^£şUZ÷g\ĴĈ‡¤oĵ[;¸˘[aˆB˜#¤­ĉ{òġG¸ûOôé k<Ê *W¤ÇêCâßWÔ£îáZj=şú~ĴùÈ|~šŞ·nÓMpßßβôQ× žŬĤµêíTDMbĠŽ1|ÌÇHÉĈ,àÒ #+·¸ì+ ‡A ÊĊ6ƒ3nĜ&…HĈóëóÛöħgÄ „Ĉ)ĵ˜”8FNˆÑ ׏žĵ%=g  ôşëÏĈÖï€Óç³ĦA a뵝Mx.–v3ò•âßzüĊu'şÔë˘ŭuq3ÚgŸwDh#Ĉ_Áq‡"Ĥ/S¤Û^&Ú´žÏ/Zk×ÜçR½'RceÈyL`.PY#'§ŸE‡ê#:B!cYLcÄG #ĴÔĞ#(3ä Ëcş<…r1d1Ĉ6ȐaŞ·ßEcD!2İ#§p§fˆÖQİAI8V\흅÷ߟ7UXž4[^'ğûòÍ m1­%µóÄlÁˆÉÇz ƒ²Ş§3ëÍïÊĥŞ2É İ/asHÏ5Œœc@é…ßB-šĞ÷–Wmîušĉm*ŸŸWŽġ÷uU.šñ£›šj£_mÓĤĞ~½3^^ƒˆZUµ]{…n}a£żĤyñëëÀósŠô·é'¸Ž&8ìôGš ŒE1›ÛN1ŒR!Ž !sޝFÎ4lŠ8ʤ›…Û "{h/zÀÁ)Jé_wx×HßV<ù•Fŝ!n•Ġħ4wGU44o†ÚJ~dÌL˜5è[|–‘“²™LÔÀ“Œpˆ3)´İ9òĈœbˆƒŒvW.”Z<~úA£’6p*ıä+ĈƒÒW½ŜÚ+Ĥ|ëYUWĈlIÄj[£œ ˆĝµ â8EŜ„ _/*‹húhé£^ŝu‡àŭĵx‡´ôš÷;jĞM+¤üùĞÚÑöÌü÷˘‹kÓÚ|kÚÄâï- ß:sĦò”Ĥ†‚NżĞ,Ûm'Sïx̖%‰İ@Ÿsâi|ÀñŻĤ”$rüO›”q¨“~w”i1+J×ĵÀüùĞ ’¨ë?/’VÚ;CMp>~ sŽ Aˆ1Vżrç +‹ŽœAƒŒŸ;u(·âQâvé@S´´ıË·ñ#FĜûŸzÂĞĠ÷zù*˘uµÓXöל>}ŭhâ~zOġ˘tÑz°´Ş]|”~kÍçi\h>ÓhÛŻ·Öİj'¤=!mT›5† wċUWñ#ŭcĝ ´ÇâclùÎwWù> ’ĝî>ŭĴ+j~ħfœÇéŬ>Ċ‘ëàŝÁúġœJ`P††˜yàúßמKȉv1"ì$ó&šQ#m·ğx·cJóĞñĠ÷ˆícÏ̊żaËÊŞî‡żİkJ3ßݰLV<ĜŽ:íİI2ƒeĦÀâsŽDóĊ9E׊D1ŜZ[‹žöĞtUŞHŒĊû,* c£ŬB|Ŭ™/ĠÔûË)ˆÂŽŽÚp‡ „P,oÜ G§â/ƒĜÎ ô…>3ı{×i"éVG·hı µç³Àíh‘`{ÙqÄA-òxĤ4Ñá0^—J|;ᢨžAcN?)ç“ĵ$Š˘Ĥ™ +d§™A¤€×A—Ôòùîğž%OŻ\ıy°ĈàËy4U”%ıKU0{lÓ9ù´<ĵş|$>öÍ!qW˘UwÉhiâaĜʔ­š /=ٛ_Ž7 {ˆÖɟ8§ h İäJ…Ünëš} ôiì"vJ· ˘i4ag6˜/ƒž&!^q‡Š8œ=£’!;ǑVUw'}¨šf°Ŭ}ġ‘™öċ2kÙ/Ë $Ê:v̇O?¤ŠbqS-ĞbË"Hˆ¨Ò*)eBäİlµRFş†ZÌܤ#Aññ£Ĉ>5ämjÚĈĊXRòšÛĠóƒX7ıĴ1{ | Ŭ­ëUŝ8éB‹ A:('ŝOïĵpHL.żIÙ;CġÑ[éÇ\şĜeÑg9İÖİhĥM홵٤Ï]YmJ:ğá!‘â|óżùÉçí}µïâZ£ù1äqOöĦİ FsĊs:Ê>ëBGÜĴ´Cß{ş=@ŞŬ•ˆNùħÓn§µí!ĞÄytçŸW€öíĊâûw:ż;|ɀ״Ò{ü“>­·W¤ĠÁE ĉûüğÊûOéßÉÚQÒ­'~œë ÜÜ\âê|zq%ïÇǵÒW¤dj\ĵûb[_‚V²bqŞo?­ bc]÷4sçGï¤üòµĈŬ[ÇÔüK{I$ü/Î>ĠY~םĵpr#b·×d=äw½ö†ElàIB6Hu\QÀ³† œ`A^#y@P6qŒ‘â4oKuğ8ññĈ(ÖÚ*Ú´é÷E ĞL@Ä;CßÍ|p‰:îËmä1CéÏ'ĠVŽŝoĉxN:İ€OĦ1D kĥ—Ŝ>Ö\'#Ú[OûµĴóó|CÄÒi¤+|ΰ­Ħ¤?2Žß_~fw6†%Nµ×š1£ĥ•p1ÚùU˜c6Ĵ@Âoj92qŬub-püŝß·ÜiÏ͚ <ÁPRvúêäaúñy‚êŸĠë|Êiċv–# À.%N ²Œ€)aĝï|şäî¤âšönÌNҁyï˘×z²§=ß·j?=Î*ĠmĞ÷+š‡ĠŽ\¨C*m‘K:`1KÎ˜FöÂpíhƒ§í(óPÒVw´ĥĞ뒿ÏŻż<ŬNŽ'×aâW‘Ž‘żœê°ĈGUâ_PéĈÚ6Ñ}Aġ}ë*ĵM FÜb}ĠÄŒ ú÷Ċ1 ‹ê<{ò+żOĝ8ÄDĦ(ŭtHNĵħġ½kŬLÏ'a`Î((gϑ£â{ìâT~jüú^@ïîW‰YÏġòôz@ĈŞ\ üüšOżŸŻmOlü×ĴĴj­Ż?&;÷$òĊ:Mz•y+ïóŸ/z(S(˜’žިr:@…L eè€9sÌ4Gmg~u‡úï"÷Ë4‡š”'Èz÷<ÔPûë;ÀŻRhZm˘¸‡àyĵ—A}§Zu°:C>áôŸHmQOĥh~@HfTŒ™ÖçŻr[™Çî½ ÀOŒ=k@Ŝƒf³ë €K€Ä f³Ìaë”$à˙kÔÀÄ`I¤ÀàRb‰>ܨÉñŞöÖûùó£ ÜĝĠzL~Ií£h(k²7(ĴvôĝR…SŠ(˘ŭ6€üjdĤMe'9;h"Or}óż7DD" ˘3Íñ€} —•„8vAĦĈf³³ë£­¸‚0Z8~¨qí×ß×;qÜĤY¸WBżKò½ġĝU ÖŸñá c+pÛÇĝ”£4)ĝaV›T„7ż(Îú,0’08ìÂàp; ûJĥ–ßR}}çß5 ûh>:j­6‡ÄÁÀZ; €‘Èşn[Ġ"œ˘;Í(sŽ‘•ځ ŽC9-”£eÀs>ʂC-Me{H…vÔOğúĉÇÚ[GZûq/֍ù½lİİméô—İFš˘'´Á>uñ³ŸrŽ’Ž\âxzß0+Œj­úiעei­´6@˘>½Njtôìŝ?†@`!³ü¤%!эKÏ×Öŭ~beĠo4=+ ƒşÖ÷ŞËW½ĴE˘ßĜ Ž=A²ÉÀCŽÂhàbˆñÀ²0Dĉis8ĈÉîşÀ1=µ\jß­]šJŭ†‹}5Y{÷•‰£²{u?>jIcŠ#êÏ´pĄ@8C`&“YêÈïVށӀÇbSŠÒ ÊWNg,ÄâDüġ{ĉ¨-=´v”gMó!ĊÖòƒĜĵCÌFY²‰é^Ĝ…D`)LjR1RaN>‰ú:q?)}ÔéÏĈœ‘ŝħ´LŞ\–UÛèĝŝ mfĠĉVDY gĈâׂ#f=^P7ĴíF2pşĜĤĈ<ò°@CVô½ #H‚ŽŽPòà ċ!ˆ£ô%QíöÉ8­{ñûġϓu]uĉYġ݈WÛ§ó2ĝöëêzk§ON^ĴÒ[ĥß´ĥĵqÓGG>w0HqEöJÏÙf+ĤŬ>e˜•l)ƒAŽ6ĠĉžÒÓ£•dĊ,@RÚ ~Ó½{è×iµfÄÇĵÜIÄ8‡‹VˆŽŝß2:jµrÛìçż½ÄâµZJ™ġġ•µtÑ·ÚbjŽzñsŬwU_$ T éĈ:Dqo:ıˆÂ`Ya9ùSòú˜ÚOW‘ŬġŜÏıJÙÍ_8ñ3H’dıò(éÄ9ßĞ£|›ġ*şêQĥ”)Iż½¤1 ]‹ġħ{@11ÂŽ5ĉ÷"$H8 Óĥ œ)Àâ`s‰ŒI8Ç8ƒÌ+´)Ĉ÷ @ÛĥğÜ ÷Jݧ_^yġİ÷ć”yúïN§ÊOO.Û\ŜËŜ*Z;ž@ ŒûÌD9Ĉ(Hž8sŬ S1Ë]?Áë\Y œùí÷áŽ|ô$+R20ÏvıĝĞ]œ½á×1|s/Ď8ç.->TûQ Ú 1ÄÀw˳Iħ*é1+çs´ċóŜqŻ$>$úÓ×ßğ#[JûÜŻMcm{kÄ1+ԁĈo‡ô?4:ŸhZ†wa‰ÓĞĠŽìÇnżD KSġß5FÓĈµ|Ÿ‰ğŬƒú†ÚâGï/ġ2‹J?Ií:Ç×R‹÷ ü‡A¤ë׿}§‹ÖzJSIÛÌÁöŜw„ËÏÓ³;ठ@‚ÌŒOxG "ÈëOı¸X@@ï> mzÔ0l]ŸïQ>•Nk‘C|ùòD6b‚úx‘4•§éÚVîjòO\„Ô£sVx_×y†“ë~µÄŻž’§ËOyVĠcUóıGokHzKúžîVš ~–dÀñÎ}îÔT&0àœ7–ï½ĝ‚œ9€9шÂÈP BŻS~AR”‰O+]Hxùìԉ„ĈÑ>2)uOfĠ¸5I‡*¨* )"56Öw4ĉ§´9Ë̠ԛkÄ£.cĤşĝtç_İŻ‚dR w+ÖĜ5ïƒĵŻn).r~eQÂsêÈFciŽm‚ƒ >ËsËßd“>šÀAÈ jìĈċ„´.)y×p àpİ@žzô•ÚzhÛZE£Ĥ¸é6}waÇÇâ=ġxʜµfĞE .q†4G N1 Œ@ G÷›+×#vƒG¨œcQ£up+]4-T.oıë™G‰ŻpßskÄÎv͌Qä>JŒaŽò‚+Ò˜ÇÂÄ8ùĤžÓUB‘ċoŒ9 ‘†8j@ Ú·\éÏ[†1›)†8b‡/÷¸şµR·:y͋t$/<ıZGK<GZ{ëè-­5im!÷ö]Ö:jڢӞ7—ĈŒÏk£“€1=JH)Hƒ}™[€K–•w/YžŬÜ£ĥ­ĞJ#A>Cżñ6”m¨Ġ{Ïğ>Ú6í)û€}¸×4Muç~ó”÷+oiÓY¨UŽ5X^µWß]Î1½uXìÑB™Dy@‡F(à/ êWò¤uF:Ż,eŠ‘°@p¤`?SŬŭ÷/Ív”ú ü˜ËĠ žĊzȽ钆oCBĝ,=ï‡fGİŬTĤÓóBïIï=ìÀ³R•sôħâsÑ*N,R =œ':È ¸ùJ/‹ċ23ŬXvUbüŸjCŸ;öyÒÄbf‰./NŻDό¸…kŸO"w<ôuäB:IöyċÄ*Lüc9Ll–@’S]^yè_ÂÎUG:JjkŽPŽCÈBrĝjĜ‰f;îkħ”,w <2 ‘dzq­L˜ŻÎ†i‘CĊ&?µĉԃ?Žû^4ΖóMĵŠĴè’}Ġ^ݍFÎĝŝ âc4›J:ÀjâjĜĞ鵂˘` ,dNU?žI Ċĝ&÷Ĉ=ÓċK¤†…mœ`'ÔtqúEF ÄÛÀÓŞ8ޞ°ÊӔş~ O;ĊÓJD–Ĝ‘IˆOŻŒ&3WGG!ÍŬv´°ş×²OÑhÊżùcÇÇdd0ħcAŽYDqötX‡Ğ´u\Ĵ†ş5ÑzÄÙŜ›:ĞÑd­ÒvBèÌ5ÉĞáfƒ²ìféĥÑÁöQù/ôTU#È5Ûĥvĝûŝ Âf`ôŭżÚ.ߔ–ïŭ³£Ĝy·dĜfÂŭEoÂ:ŻŻoN?³\‚{ÁíÑŜ'iôÖzġ÷dOÒVŬµ—:Luûz<ĝ7ÜÇŽ%´‘ŬĠU4§¤Óû7ä´ÄžúÚVW7:Ì$Ż[ŸCÓĦéĠÎLYzÏ´îg‰=ĈËǓ0€_ċŽ˘ż²<§×Sßsì@ÉĈ'—/ˆ|‘-Œc<@Ċ.@ƒ:Úĉà{h:hÏÔüJœ–ĦĵĠ›BÓ†ï‹ĴŬ$ú8{ÄT˨§;L<# F£žouí²ş@ôÑin„˘ ĦÏRż™şŝYó½úü÷`išŭiÇĈÊÄ%'L˘u Bñü×ÏĜ*Àŭ~_ĉAĵ•^˙XŬZÑïi_3œúo´Ż ġĉùŞÚU~’¸×YZ†>ÚÛGú#­;lŝ|t€Y1ì‡.cO–Ĉi!Ĉ hŽ/Ĥĉ8 #†ö˜éaÔ¨¤#ÄvEÂcfˆSl£Ì1Ґ³:… “? ˆ)Ĝ[ħMUöôòRĤ§Ä…C@Ŝċ?ye²’Ş$HšOh)û›Żßïġúß­ë_žDM­CÄ)–Ĥ%?­÷0ĞĜ"3aĝFuùğšAǟ+´Œö>Ĝxrı$g;C<`Œ ‘Šd–8RÊîÛH‘£'ÄkçÏA;g„ œ)Žöƒ€mġmâˆ#qjï‹ˆò2mܚÔï!k~Íe{iMêb|hÄç­Nġ¨˜ÛóÔ ÷ßşç6Vó D‰XÚ-'ßPü~5V}ġëŜĞĈĵk¤î@1£ëŻ,­Ħ´“ȽóçϽôġÜ-ú=ËkHTû”iĈ9ğ­ĝCMç™x×N('f@ĉ8‰ĝ$~­ĈŭJŬúúżH^ü á> ċf£#éi~“SA£Žû{„:J­Ĵ•Q’:mÙ áÇ<šÏBàxàQJ¨ŽŻuĉŠ-6•^’6œhĴq.@ˆvü½vçO4ž?mkHi~ĉdħ>KÌwëéà:šşÊzĈäñƒÓ×ÑÒúŬ$ƒŒ{Ĵ£şĴ*$gÍiOˆ#ü@ ÷ğ–÷—'bŻ—Uñğ’‹Bï7•.5÷ßĉa¤Žòté }ż`jäkz•VM|ċéúÜé‚>ğ~ooMÛġ¤´B;|/ çâä!UÍ ¤Üzg¤òĞÊ˸L í-ŒĤ­ Áô˜bȀ_Ï( Cœb–0Ş3dai €žñyq’p)‘SİÇqÂĞœ?>.oE§1›TıÄG´"1'fumÀä{L#¨ŒI!¨–[_=5ĤƒIˆZWÇ×%)‚2D‘†=.@ëĤ£]÷²=iŠ"ÈR1 ƒÊʇ9;4zw)Dz‹t$!ÀTL<ǃ¸ C ħžÂ‚NċıÌÜÜ *@B~îüžß~Û?kóî]XS}gĠġrë ÀOSĝ5ì_É4‹?‹'? 0ÏÍä. ëwL½€çHÁ”¤ ġğÚirO’£[ÈVŭ}œż 7ÔżPR­­Ó°ŒMraĞԆmC¤+ġÊPAAY¤„ ¨ é°Ú(îjŻ•N|Äİä 'Ï-cşQ&²ù܏ÄaĜs³ĉB?/Ġo)×ô úá/&d˘ßżwÑ[ÑĝMżĞw1ü?u6UU—G1OÒyN`?3H?Ccx 4t>‘</ t+—>eîaŭwşKĥôcéŝZ3nş‹ïNÓûQˆ8ĝtŬ‰d‘%€?W@g<ò 1£ù´ĤΔ’&mö47‹Y.ݰĞ"Ŝe—Dl˘5˘yÇ&R61KžD3]9Lä€ŭ}?ş\{ÓwE¸lŠ>ŭ}˘À0}Ĵş+y7d߯Çŭ fûêĦúo;iôkçÖÄëCó_ĴqœDŬ@çġò…„" ’é™ĴM”2ħÎÒx+ñïê:eÉ"µ}2ALL{9J7}˜QŭÏè…!äŭò}‚¨9CICœ²@lŜl6bĝiNßn˜>ĝ<"Ŝ÷8o¸y8şÉ—R‹Ġm ‹î.û§´ÍEA€cñ4ÄÁlċ§U”àôÓ¨JЉ?i/YŬĴs7 АɽÏÇ~{ItIZħžCrÙĦYZ óìô,‘İ: nb‘TjJ>Šż£+ĥdvŻ2Dtü/ïK]sÑܝ_BkÂÓ²ĦK¤ë9k?;ÉPƒĦ½Ç&t˜.CYËĦ·³jŠƒCâK@FŻ“GTŒƒCt³ °ÂôŸbɲqù@Ĵôŭ´›YŞV[.Ğ]A…SĊƒ!]2­ |f¤I1ÚcŞ]kšİġ£7ù†ÀÂ` ÑeïS=ĝ~vÇï}úqdž%Ò|0hĞ}”‰ĵeáÀQ¤x8L5à&Ë3ok2QâÀħ™’|BQC×@F()0•(" ~i8:B£Q9ӟZyġûĥ͗H‡Ü*–şwL3jwf½yŠX@93ĠÜ!­_†Cò%JêµWêşĊ½ÁÉJÔµŠ2BKìÁ†Ï”Ë&\âTg>ĞBÍ–)çI>D(3ôMñż…Ìc!Í"…äIú’f]7İˆr$J ­Ñ £F"+¸•?´%)0I3>ÖU²ÄHŒŠ8ˆl,MœÙPĠÇEĦ=$;DBú²Ċ0l[U §~ۍ |4‰‚ÉnvË-ĈÉÔ¤¨PžTm!S#cñ”†sĜĝË*T_dòH\´‹Í>9j\wä̵ëlê·\d4’h”­×-ŭVr'6;9TjĥE"XATQ ´¤cŸD‘†PBވǖ½¸ŭƒ<’ú˘‹NÔÎ qÌóFÛċ…ĞÛN{(…hWè}£*İSUèÔB}O1™wß;£³·ÔBħ‡û’ŻeñçÏKJRîÌ"ÒĉĈf#˜zÈÚRo—[+_ĵéèPá–]™˘'â·ÉJ ĦùDĥ?pżP+ìgÂ@l“~²Tôê³Ğ?mݳš”E†5ÇĜcÑÓĤJ§&x[¸žc!Ş•YBYó3şĈ\oÇş7pĉ6ú ÏħÂŭĞC÷sôŠ2U~Îğ‹ŒÏ3ô˘ƒ£"­ê˘uÂE³ħĵW—şœè_'sĞŒò°ıyM–YQ~‰aÉÌL°]ûˆşÍP>ñySŽˆ$Íû-‘ñ<˙*ŸLӒÂ~*ڃµ‡GUy^ĤUĞ‹IlҎJ—óM<Ŝj)0Sàĥ^ĝŜ6é[j{HTFR†4´ÏĈòıİÎËtĵB‘œ˘”á@ñ u˜Ù ÖCÄîĤf&‡>NÀU›ûYGqı”Ë>£”ÔCZΰŠJ•UYˆ‰úqw377›£„¤ŞDԟ‚+Z‰&ĥÒĵ\ûÁX!+)¸ÁŞÄ­ ŝĦ6Ï5ĞĈ0éĝìOǘ€Y!d wFsñğMЧ"ÏWl´Ùíóܲznc¨ĥs–­Ĵ²­àÒĊŠ÷ĴZ‡&²r£˘ïĨĵê¨,Öa³ĈôÜ4ċÇħŠ}5ëUñ@çP[|żx˘Ŭbyj]ĝ²ˆ‘8Çĥ§½štË8ċĥ÷ÏĉÏFEˆ{WĈµá2ôXpĴİVÊÊyµ`Ùoĵ½†Öó$!&,¤Ï@=ùä]ZŽÄĤĝ8,ġxŝİÉë]ŬÒèŻœİ0<]L>ÔÊI‡•^Eeóu†o¤P“KÓŬtr)[ÒF’‰Àäû€ĉV4ŭ£Ÿ[tҙzYĤ°™"A|öd6ĥ@7ê in š˘J.˜/Eu+Áêô5.­‡ÏÑĴ,GóÔŻÏž.kóx‰zıĜ“ħÄ7SsWŠwt%ÚOM°+MĞ·¤°­"ÍȎuŽ#Ò̳\ùŒ9–CËL/à‘ġMg'ħ‹.Ş•Kܽ蔧ıŻN'АäçDì4B )[e‹Î¨yˆJ[ĉrö‡4ϕ­5QĊCıBRs*4‡BH€Ĝ#]  `+à ;MQŞ ö*QAWfù[Óp߇\ꍔÄà ‰j‘NÀ˜ŞĦ€C‚…@ĈĝÎäpG˙—À?ŸÄ>_Üfà}êŸĦ9ĝsù£J›Ñö‘GÉ>lŞ—†(( ~`ÍÏÀ‚qŒ o#‹—J"½š‘Ŭ’;íÖ÷]eU\³g£Ĥ;!oĜ½ĉn'ħž`h ĦF1‰ßà…Lü3Ĝê“ĴÈڌ³ċ’1 Ì˙-uMüñX=k^Ž&+F+5\ċö“? QW¢¨E–ğ%.OċÒ$äñƒKâCĝ²ı„ĵU°!ˆ~ߪûŸ 1}„2ŭ&~T#¸ĝ›ù÷(™q'i ”sÉ œ§Ç|=AÂÇÎm(€7ÊëĠi.ʚ‚ŭŠ0›ċuĤHK6K·Ŝò!Jó1)cKğc9â>zùdgN§#“ÏU2r^m.³€-ŬW‘2$‡‚áI>>*S;·:/;ëKì2Ĥe²Ş1Ê*O!C›[ŝ³ÄÒC"üd7Ŭü/ğ_h€Dċ(ùĝÚúz ñÈKŠJçSsÊùg˘ÇpU(ôgÚĉ“mĠPŸV¤UeyĞĉQóš° ²ˆıMNß>CqòÎò÷êÉ%ġR>ıSĈp‰ÛĥVßaÛİ> ÏjáŬö>1fxžz%ìùʁßñ~ ™íŻÑ{t/ÔDİ µB èħs•¤'c 0ŭeXÄI’@³8mŭçJÙmQ£â!ÄÈhùŸx¨( 1SW<Şl~îvˆ#Ä­ï  ``j̐Ԉtpı÷ċ Žĝ¨íš˜µĵm‡ŒàĴçFˆûrs eW`ÁԉŒŜ€ÌWß@ìŝÚ&$‚+Lc|ŽġuŸĜħ{ˆŞ€š½ĝ„H÷íxŸì´ŞŞÍüĜ·fùëgUÒ¤ ¨ bMô˜==óOŒûĜ"WÍ#„I?ŠË¸ˆ™p áW½`YcÚLöÏĊ@Ĉ4}ħz€ÎUrïƒĉi\Tü_ħZO|O(żmBà͔ɍÄĤ™ “u*Üx™­iEr)$ĉÚAÄ ŒĊŞ@?M´CÀŻä²!öSjġ]—Żóò]Šá-ÄĵÀ†ÔH™œeĈv,cSŒÏ² ²zá)—Ğy\–À‹‰Ĉ‹ŽJSZ˘a*f(wâĴf˜œ#„>ϙ£ÂÔDCêWñUvJhqG4úúÑ9qŭüPÓôNŭxxÔëCüF3÷İU§|Ÿ—„ŝ”šójâ3Ûfó(ÍVФLĴı=ôEòİa;–šuOÚğGĤÒÔ÷”è–ïWOÓœ~>2yĠ¸H˜91}ù Çü|ùà'żQĝÏÜÔÀ›ô}†ÙÙ rÌDBÓöĠ_p&RöaµXüuZh\30ûϝò…<(—ÀÏgÒĦÌ3Vf§7C˘ .­¤TdFQRáúï£ĵĤí ı ·ŸdĴ0ŠÎ‘‚P9‡î‰l_ĴúÚFrÔQêşF†ò"b›ĝMdlßĠ½zşĠ´ïPƒï”,fğërı™x§BËJĤ,UcÌż,*' ŒĤägjÔ·Ĝ|nñ+ˆ™Ü?ËêV²G&Yiátš,N•ĊXĝLŭ8˙ |†ĝíÍşÚÈa§MĊuÏ΅wAċÀ·ĝ>6>bz%U[wÈ5Lcâ0cİ×Èñä;£}£•ÖïĝëŠ`Š_è‡ċ(=ĉ]c&EüĞ4vñŭ4HPOĊ37~wOşg°ÌŭŻ#SÓP0V!bâUˆü‹É$ó*k‰ĜĠG_>4‰3qŸn’?ŽĦx‹ü”/ }"ӏĦóßqÔKôÁ¨ *H÷N~s'áċŻk~-;–jrö}H³ú!a‘>Şëğ.š˜& çŒJb>iŝƒ<‚ŒŝffTŜ”Ä+"C(ς;J˜ìÄvŞ/w5LÛwıġŻŻżĤ‰Ġù"cO{9êÓaÁv›–ĝÚċbqQ@Ĉ•xb—§<TĤĞ̌ޖĊ„.9H~YeU"Dß<, ı §ĠCÀ1Lİ‹pG{)ŭ~DuĜ#bZ$4C3ġĤk ĝáTîkiÛ↑şàxXÏ6]XĴqÊ!šğ5#“ŸGUŻ y‡ Y-Ma²4òiġÔ{ÄBazĴ QN ²Mè3•6BVK@†EŠmVDGëDĉ8޽c$"D%R†VÂl>Q"Ò#b}ÖCÙ@ħ–-…2qEĵlñUˆÈıP}Ĵ‘naĉwÓLaĈpT[ÈŜŬU2ÈĝşÍÑġYH‡#p‘x‹Q˜ÒŠÙá||OIFÖò(S‚•Lw¨êß3ÚË}U8ù)ÇşßQŬ̀ߟ>ç×ó³:ġ”—ŝߟ>-säŭ•§UúŒÂbÙĥ×8 –Ş“)E÷ß_QŞù\:‰ÙE'eÄ3Âr-ıcbñ=µM $–gŻ]³ Üh”cRŽ­´£|*D~Ö$rħ>}£È€‡.7ñ/ö|ûk2ÙñŸ:4ÓjyóB>? Éĥ‡ĤŞ„¨úÀÀ[Ŝ‹^ù £ò`Él‰Úµ._E”#Öŝ%‘3u/ùˆÒ•jkèYP ´2ıċT&GĠ]óÖñĵG l’˘Ú{~ҎDĈœDĈ=ĥ\„µ_)Ôñ" EVç{L1ĥeBĤ‚UE#ÄFRŽÙPÔnOòrrp!Ïg‡+ †|ĥDĉ‚ĥñ€ÉÚµŽÔ?dħ$ö-0”šîrƒyÊ?Fŝ–úµÈnİH˘3‚€˘²n?Q‰ŽIà•CP2>ŭ{Ğ­vLòÖgžĜˆS<-n€FKÇÜGlyô‘0èDCËSNä!BŽšâ+{Iô0˜Öo*޵ĜDDûhœŬı0îóœċ²I#rÉġħi÷ĉĤŠù™ŬĴ)@°5Hͧ™ èĵÑrùXĝŜ’<†ŸGèßëżİMÄmŜ‰Ew qNe ^Qàġ4³ÚL`Ÿ“Ñioìż_›WuœfHŽ6*İ*·À8–ŝ5ŻWŽ–ïOʙA8l­~ “gġ÷, z@äۗÇÜĦFó´kw2„ŭ˘µB~ ıx)1ÂS[Z=dkÛĜY‹'Şè:œ1MĉŠ˘"š;הğê7ëż:†‡74™†{8PÔ Ž5¨ñbv<&ŒZî‘>B£Ó$>ÀċÜj)ùçË}°?iMÊ0ßz—Í˙ ’941”ûÇtJVqKI€L§~.ĉ ÄS 9KëĊğċš:YÏ(èĊċ‚¤.t#Żu裛…Ŝ óµrzÔz³Úħ˘˘Œ ]ĥ˘žßXèŞWÊ5úp_•Ċ–şHnXž ê/™ĉˆóIݧ5P ÔoVšİÌ#à` ȗo/m%…•\<ÓòGwm]ô˜\ŠŠÜ'ÓŬí.uğxam£›îÊ"V‚”ġ ìċ½AĝÜ žéù –’mñaìVˆšu6 sÉG÷ĠŽóùübWÑîhBhÀWħı=Cir5Fċñ²U½£š%´7™?§ÏŸ>EƒcĜÀ²62#í‚ `z޳ÒÀµI‰›k2µMk3jÓs&l)^§ïMĉg–ğïô߯ßöú˙´(íĞŝD}ü_ŬJŝcĥO‹ĈVTÂm~h,ŞÀÜ”U Rĉú[ġÉs~“SĴŒ -ĤP$êî4q–qŒ]ö^TCCĞs+l#ӌcĞĝ×\|~vµ ˜ê'=_ HaŒ%UT˘’ÎwċïÎ%á—ç­ĝvpûáèÂïá;ħ€·–EäïĴşÖĴ=”C„?³(ÜïIħĵğ_|šfEô™F‚Qc02"8˜s/˜'ï;!šùë\_n ~žċcŒR„ĠUÔĵÖöÒ°êîXĈ9^óÛŸıŸ“@çŞÈQ\Ħ…İñ2\ë}òŭá_ W‰ĈBÍÓÍêĊD´@•S(M˙Ú>ÉûIRjE‰ĝ Î˙ƒ÷{ÈìIĝŽ#'µż]ĊàÈ `¤*İŻmf&çâó‹ŽÂ²ıx„Íuö]Í~²M^^€cü S8)ù¨Kòí‡ŜÓ÷~_ÖiäQ%%ÛUòĦĤÏÁûnè|û÷ˆĝŞ<ĉZW·ĴĴ,vƒÙğ•!cœGWÌÒĥíx>³uŬÀ1 }²]o°YGĵ•ìh[„jż?;ÁÉ*’ ‘7üÈ?¨~‰˙+óËe’-“Ġ߉v#ĝ÷vü){9Ôñ5†-kD zG5^ Ĝ%ÎıR› ³]@"S¨'ÈǤkÒÊ|,ާúúJ…ôLîRHIU ,Ì +ëħev-"Xf÷aŬ×ĵîêıFn3òUbŜĈrœ<è‰ŞnÏ dD˘ì¨Ò‰ġÑE8P<+&ކ°ŜşO@@,2÷Òì‰k‰y½ ›A·KŸZşw&žAP1ùš¤5XŝÁTTÈfmŸ`gİ€=°S½yƒóq.ôÎ]‘>"¨ÑĴÈ]êiÊËüĉnxDùj>#²'—äœaüÑa–Ò‘0ʄ+‚;„KµoZŞ@ê#!>+d2şy~4vÎge~pßÇyF_ŝ÷!›ü~|Ĝ~TßÙüñ™ĥ‰×­˙;ì˘-IÛd+ŭtŸŞè >5@Ĉ><ƒçS7ħ°Ï,Vȏw-Ħb2‘ö˙Ô6ĵ/‘Œ6‘ñĠµ¸ ´ô­2Z"jp"µPü_!-SğÀÀûeX0İñí˜>~…ĴG×İyóİÊnûX~ÁÑżĞżoÖ˙&”ĈĈOhöŭŠ,;ó‹d§é šôdНR:1t_ĦŞ$Ĩ?2yBÌ=Ml$Ëf²BôÖïž#{Ÿşò„:#à1ï"kŬÎ×Ĝ´Ĥ'WYÏ8I+ „}‰žąĜ´ħ CÏÍôŝçÖWÓ Ħh'ĉól¸IrÓx}`}œw­ÏšsŸ‹ ŭ5F6=“2žhù_$MÏ.ËôäŽc›0>Ò<ŭK%0³û_IPy Œzĵ‰-5ÀLÀ*XġAúvrhJ‰n%6ÒKŒÀd8>†òĝĈ–>ÇŜîêIûĜĈbúVPĊÄélÜ2êYµëf„AµW¤tDöÖY ÁuâxT)ĝ'á]ÑäÌIž#í£3”ż^,}BùŝzäaŠêßÍê™O 0•)½5ĝAë›żiP=Œ`1j”JÇ'ltÉn şNCê0G"Ì7IG 93ĊF4Ĵôqĉ5…‹àŬ2–áZ+ Ğ0:mnTŸfĜ–$iġYÜO66•hˆ&³Ídj´…—(‚b67¢E³¸Wġxüàë öŞÁ‡ë*ĈÍÙpÖf.äı·@Ĉ>ŞŝF–ıXm+äşħ§–,ġt­Ïnà:òÏÔ †ËyÍÜȠ퉭Ŝ”Ï­çÄ[FD/T7œé óTĴġÌHİ |ÜÔÀ·h ĤˆÚBiĦP{=,Çw–e:k9‡ï¸­ƒÏŜ6£äÄ%('ÚÓDQ6fݵUĈİ÷4NÙŬ´‘NSڌŜ/¨†²’HÔż€…5yöÄ|’ÚcĞjuYĦ3=lĴµy‰Ÿ]Ô$mRı&:ÖB'ÒÇGh|ĥiM İxĵf|N· 6°úÊuô,ğÊëï |0ĥÈeöë.²5–3áÊC˘ñᗘER…"ô(.ñQ—ß,)zĞħ‰‡Dížè.#î9–­Â³êI|°Mg_FAbVJ¤­ ŭ9ee2-çp#•5SĜ@Ĵ¤œħêŭ$>‡S˘$û¸˜ž7”È?5BŞÊŻ}mU2n‚d‚yYÙ*ò}†=— `ĵn<ĵÛÌŻµ†ÀÓ'ôìĊħ°›ÎĤô&²&[Sô›qGQHÈĉŞ=èô4âɊÊD*ŜSÈËxŭô§ë0)Iŭr$*Ĵ…fvó…: k:—–úB#pÌËê£Ħ×3LÔ+!ÛI”¸ùĠ YWà…eY(ŞİÔdIÍĴêŻ~#Çj>à–ÎVĤĊÂ!<,#B˘Ë7?[×ĴûȰIûÈjn!/›Ŝ%s2ÊV×·“ùá19Bì6b#3ùžnĦZY”ö3ŞqŞ(ŞY™›_îìSĝ_NŒÄĝü żE3۞};5 äü]ċ¨RZ˘Dï‡ñ³I‰Î}ĤŞNFlԈgĈfoœD_ÀÌ+7½ë‘R÷àDży›žİLLĉĥŭXnAùˆavĝH›xıŝ˜÷‘ìîÁÉŭìLjp”’ûzûq“T³o7¤YµAžçö@ġÑÖǎ IïŜu :. @›ĴKŞâ ŻVí²5ÀċÖ6›Áž´à£ÏW´Ä&Hŭ%ŻÀÇ÷?wı-ú{ÁDšKĞéœïo;ûÀŜ™ö1ıe_œ&ÊB@–ĵĦ½”;,ŝóLˆêşĝGtMk+µÙ³µStTÜnMĈÉ\°lL„§ÄyÜöw8ÙGîäwÇ­9XJ䲐·›ÏכäA‘ï^Ôû0ÚıWn֍–Ž•B7ŻÀÛVT“ÜÁÁ“ÏU^˘ÔÏKĈĴّ˘cé"F“ÑòŜC¸Š·’_PyĠïmĥh<ï‘Á–—Ŝ×ÄÁ0,µjèšS¸&˘ Q÷‘/Ĝ>á,~×0RRÇLò+zF oÍè?b÷‡$93şÏdûp <§CízywJ^ä; b÷*^£ë„ĉÉ=VöÎFo§Pµ…üż'·Üµ HŠ-8͛ `ĝèzÛÚÊA‡;7z‰>Ä`µ#0C˘×8ıÖ£V_vX5÷šÖĦÌ’npèÁ2‰(,KJ$œ`ÉSbŽXĥŭéd#ïğöĠXhh#ddt>@e–Ĉ#׀¨9ÀsŜËĴÇşìċġ’ şá…Ĥ mĠ_Foƒ°€ĝ  ñüÑU~}=[%ßÈW7ñ<‘“ÏĉäŭDq‘{½Mg€8N(ö%eÏq?ABÉĜÁ¸šqµÛV%Tö zË5h›òŸdüÀ zBšêp02ŽÙÌ'‘Şa˘b·^|‰‘ŒeQ³)W˜ÀŽKPA“óá|cĴçG2Ïôw܆D ÔùLm@‘úÒP@Ñ ~ġ²âĥĝVçżmŸÑúҋó~·ƒ)Ìŝŝ?D -ŭ^Eë&u ĵÑQ ĉMüş­2Ä ĈG@ e˜,ċĴ-ÍŜŸì;™nêÏÛ¨uN JO ŽäVT]=ü`Ú ŞˆŽ™"Už‚ĞĦ"KáàúÔ¤à_M4İÛeE;èW5KÊ×SU0CĜJˆTOŠĞ*Ĥú¨Ÿ">3³-˜fv– ­‚†$2ĉŬd²ïş´ß7“Qżˎ:!V£Ùè9ş[öĵp£X˘ŭœ‘Ï6]àußŝ‡9ÛħO1ĥQGY‡Qä“d4Ĵ·‘>qmmíçc ։•ĠŜ@›Œ°Ëäĝ‹Ôġ́İÂGe,L4ŝ‚¤% <'5l´?AŞ 2@韪>Ì8ŭ³–!/Ċ)ÑRš"ÈLúI_Fi!ġ]fOĥ ~­Ŭn:½ĝ1CÔĵŻÚ3š2ÇJu\×Ĥ"ŸŠorJ¨,ÎODpöŝ¤ĵìPĉúCTSUPŽŭ.ĞPáġW„Ê+­ž_gjN!,}B +çĉf(óƒ²Óâ!“L‘ä4„4!Š!xÙËëŠRHċäɰvĊLĞûóŜ€í•xÒ# À$1ñè÷Ú1"+Öf‚a¨5P'!\Ŝaèš "]6Ûêd ŽCëŸ<=j‰{Ó·m¤6~çÁ\H5 yXmœfq,á/ñf AC×o½&H³ `îߐœ4X£r4ŭ‡–˘żıȁzš(Ÿ„‹=9Fû¤Ÿh~Çß²¤žġŸF´Wm3³TİŞÙ†Ó'YlFm„>‹xÔÓ᪇ùe›î–Fŝ.AÈsD?óóĴÓéS3ç0–Ù²Ê3âİĥF­C9?]Ĉrm-TŸˆŒ›JEÛ|WR‡ÙïdžÊĴ[GÄeaӄûs9öĵh‘‹ôiÈħ:53^è˘'›âq’翁­ìVO¸Ìƒš=ŻFUâg!ìÖúɟÈ9/Ö L:˜ÂĦü?0~ȁ?a³Qïĉ‹p7ä ĵï†"~§Ó÷£#]ÔĤXîĝS4R*hŝ|Ç; (ö`?^ïv|şû¨p`ÙP [êfé[5 B7:êó“·xSë aÎNL°}xÉúŸG>Ĝŭèúôô )_C|żBu@T?6¨y{7íWÖäuú’À"iK€OY…xOêûĴÔŻÓhß""$àˆîòמu2¤ċpƒˆô‹ñê‹„—ŜfëĠZ@]…WĠ²C<ĥiĤ[N:[Wן|Ô­\ŻŬno’$nieVˆ“~°҄×`GĠĴ8ħ“Y¸Tù !!$ZL%ƒíSk™šÑ0M™ÀÓ·wŻĠ½ô÷/êC–j.‹…7CQŞÌòó1ĤoÁʇX†„DŠŒ€°ê(’__)9cÉâú}sŻĉ\DŽqô’ÑŒQTŞŻTîݤvK˜S"^‘í=”~ó;rNgM˜Ž’UüTñ‹Ñir}Êğ(žÚíg àÎò`4ydHĴjt–Í@÷Ù ,B).ú‘%WĈ•[(İیĞ÷-œşĥFİŬéU:zĞÙ$ĝ½B8NÖóÁÏ*ŻïÀĤfĊ.™žâ::dĥÂ3äЧw§ Á[àòLí][‘²éü–ĝÀ–ê]Žú½}SÜĠÎRua¨BRÚX9í‘<+ŞŬœ=l3I5ê/ŠPW @"ĉDax&³K·ÄÄäC†•Q˘6+”5+DĦ3ğŞ$ïG°Ìèuœ\\­”Èş]\ŠŽÑ‚ĝ’W–ÄEÏĈŞm=Ĥî[HxşÍ*mždĥZ A‚ŠÖ$ĉŜgµl ÏʊDIŒEĝ£QqÔܐú’{Tô¨éí„O-‘D‘öMù|eçĉĠŸ?İ›áiF{1AÈ:bÜy§gLĜiE@ŸĊz‡ċˆs!r¨xH9şŸHġ'J$(Jäż·×ZÊ÷ëÀ}s䪪ÖĵˆŠqú$žÛUÙ×ħìK½#u´Ç0çċ~„ÓĜ4B–‰ßoĤògX°ò‘•(_­ Ü]ĠġMĊĵH–ï{b´ITµÛÊSEW´Á;jyâaï##›ĤOjĊÚĤŸ^’ûXä Uċó L‘ÑN ¨ uáMêàÖV^ġ“…'Ċ8…îÁĴïr? ódE‡’‘F÷†Ú”Öş"!òfêı§W³mwĊ4ċ\Yç›ğ#zχĤëɢvVş=ş—%÷Ì:BtúËË ŻÛ-ĉĴòY7§_ĈX~8+{rß{ Ê2X €R5a-yk]Ò"Ìŭ“êÜĥ‚KówÏ6Íë .U@t†t 9çH•*VáD°j‰2ƒVÄL76W\9zĵÂ3.‘DŠ;È\£Ş·NĠ‘J(:û=›‡i`ċ›?—XSd£2şôɅMŝ#‚´Fï˧"ĵĠrwnš j³u,Ĉ_'şn´2Ĵ‚ĵş:~^ TFwËG)¨ĊßQêƒgMŸîÀK…<2Xaî0ÔŞĝ5 ­ŒZȀà>/lĦħu!)ɀ\5À@„Ş‹Ş0 Ğ0kÜ ?ĵ´Dħú"ĵ~ûIa‹ö/òüòo%äĉMFŞÎ ֛hĦĝ˜gβ¨ Úµ@VúûŸ/Îo–o{fïyy'ÑZÔÖ´êìñqI€1 .׋WïyNÊ(y}sZ™ÌŞ ÌëÖ|½Tf F•.×€"Y'}SUż(Ĉ0&ŬY™£Ŝ|:%nċ’…\¸iŬŽö™HĞ!ßĵ<JÇ& ŸĜÂż9ş·×ŸaÛï{ÚrÊĥgïÌsôúC–5ˆ#8œVô‹*İ0‰mdK Ú²kİŜp/ Ò8™‚ÜSF\”E Ûʉ:“Š8„Ċ¨ˆ¤ż°3í(“ŭ;W;\ĥbĤòŸÒ†+ñ’ϘȐÂÍUɊ~ŭi8‚L3“R$^"_‚ŝ³Í™GĴ²j/ıÇ~+şğĞnö ó=°]Ĉ{_\ĥíê£ûĠ“œG Ş3ö_;zÑ2‰r:qéNÂŞĈ3Ü(ùnçqoŠCáv‹°Êê> ϑÏ'q9zq'ŬwO÷0ûîöé{‹ €Šè‚RSV/”żF_¤9ÁIù˜ˆ˙ZOïŒŭM€šœ–³&:]½³hÈ~fSÚ™z>½…F¤ĵx2„wOsMšŜĞa$p„Ót˘né4"1'Ò6éè ZŞö³˘9*úY|݌ħìƒÀ 3j˜‰„ŜġÙĠ£Ñ42˘ĥżxŻÓı~şùà÷a·ş“u q×]/Ħ2kltŽq˘µÑ wí£4êŬöžìñ²iĴݽ™GêU ÊÚ\ ö']òfË$e.ĉÉ+–Ĥ!È}ƒ˜Wß6˜Nä@nGkġ”úJ 7§ŞŸh˜íy˜“?-OĊïk*™´q£VއÖú{ġa1•[HÎÑ%U–#CgÏŜ4–è=-gIŻCöÑŬÌíĈJx1Ĵ“Ċù÷}ϸżB‚XĊ@qU2S“=ġéÒħ ½çû×Ҕa­òX"FçßvôQĠG\4eÔÛë—|G’yìÏ+‚ï~fÍScU `ƒœvİN4³ô;eÉ* ~Pô (Uƒ.&yĴì™ô7]û yöŸš7nJfµ514)ğ”ûıŬ“gb²ËW :]ÌÍĠûbü’ŬŸ€Ûġ¨ŭ†‘úK„F„(-¨n{¨~C|µİc )bûeé,ò?§ë¸KĤ/Ċ ÷Gš¤§ƒŒÇĝ7;Ę@ín§GOtD‘iŜ7ë”wĊß(ÌS)"Ġè4˜;/’ïKŸ„^‘Eš·HşĠn•ÜaE.áe• £Ë^r‡Ĉ3(”1Û#‹3X´œ 7Ñ.à4ñ+˜rË%1r&˘_,^3áÚ#ĝbçŠ'àĝÇ—Ŭî›taéG…Ĉ Z%^\Èİ€£=wӁŬħvĞĥŻ´Ò¨ŽöìĞ^äòéİÜH²(ßÂÓÜyÛjMdK%‚SÙ@1 b~Ÿ|@<+FÏDí9£ Ħ"ƒÚ+a›“ÑjLġ%ZĜmÚ.fFWĴÈÌ4§^İI*§O ˜ážÄڅlùna‚tĦĞı4äëÒÈâEĵÈGrfĈn|‰|OĞ+ssSEt­ŜÂKş XP›ğŞÊĴ\jI #ÔÄÎĵRžu‰¨C“ZİKŒ™r%*Ħĥ{ŬÏ8(‰W›Êf›FnĝŽ‹ô4>ş·gÜ´0(v–÷‰Ó(Ñ#íE_Ħ#cí‰>RG––â> ̌#zˆ0ÇÌÊÔ•LŞËéEŬlÑúŻò˜· /VPŸâ‰™Ĥ "eÒŞÉ’£ß›]€È™qUh‹…5h‚6KA‘5ğ߁Ŝ£Ù€~3\î˜g/rÍ·”1C*3² N~âII…îµÉ£ĜĴ[^rJöN–÷'½Ì,›¸>Ù÷ĝùú†hıaé…(z—̏Ĵ•”Ĉw”Yž.Ùó1)Ž/‹”‘­_Ğħ™lŒKqËŜx&é+4<á¤è|ƒéLŠëKڜÌ8à†ñš%V<‚O•ÚF:g}šo1 q3>öĉrŬĉġûÀa|Á l3äÎ †CHè7U­jio[ÊŜ&'İ£(œ3Ştqg şÓgjŬ^Áѽı_£÷ŭĵûžŻe“%Â|Ü´ò+nĞP˙VQ;ÚMfnĈŒà%È áÌĥ1cú8Ĉˆû莸¸ ùf]ŽĤİàġĠFĝŸE|ÈX”Xe…ëí˜Aĥœ ]|_qžI×BóÖĝJòĜPş,úŠSqÙU<ĥÔşŒœjQGĵj+HċéKDMwÈmój­ù2ÜL݈ùëñkEî†Ü!eN|FEödßÎîx×lÜ6óC&~@PĵoyÇĊDĈíeĴğ:˘‰(ğ( ġJœĵÁ6 ԔMvĉñŝ:U·Ítù•˜Sóß°?ĤpêÓû|ùòU•ÑŽ „ŝ—íò0%™…İÊ!‹Óë5Ÿ ăôŒyżŠ°‰ú9÷É÷7yžÙ§“ñr²şĠl·ií(ñVÎAŞúŝ^ş'ú`cqŒRa|ġ§Ì‰è£öĵğ|U™ìڈP·ÖÛg9È z İjf°=àÍ?gÚOŽ(˙ƒáßñû}ż×Ûß'vµFż¨<¤G”ù‚f>:Bûİ'·ĝô.çû1~Ĝ_ƒ††ٔ "zŸ¤ŝöà~·İÔ:~ġ:Ş,8‹Wşe+êlħ„ŒüÀÀo·'w^ğûÊÚÉ΂_u˘uı­$œ­Ë^[÷ïíĵB_ĵáûxžÙ˜~O}L@ÏĜżÊĞW 5 ÊżÄİ˘œ/Ċ`?€[ǧĉ_ô‰A×­$*ÏŜ~˘œóèİɒ–ħö÷,qóPÁ2ĈûMĊƒĝvf6/ÒĝÀĠG#GHMì(ĥşRݵóóߐÓ÷R…Ġ£Ÿ>żßĝŞ úÑ:šÔù€íÄOÉŭˆ˙òïè4”Ô3ßâ!èÎ˙m8Š0r³?Ñû^óWÒŻĊ{ߒ>ü!ŻÚóĥïß#*K5p:&n*>Á‡½äwï³UJ/¸ĉTXDä\ŬÄÀÊßü×lĴàċzŸX‡î_GŬ&×·Ŝ<OoKS]Šè‰ÔƒR=Ê ŭĴŸ‡A\µäÊjĴ–×–îzġîìİŬÁÑB–ħ)Lc ö˙Whŭí9ñ†Ĵ€‰€ë•Ş/ù•ŝäŭçíĈe ŭ&@ŭ†pè?P˜PEœĜa¸ŜĤ7÷„G”tĴ?Ŭ@•-Ëġ.Éùt1ék^O>¨18ÇÁÈŭgš_v•ÈĵĤÈÜfütTİo‰KéòŸ>U_ŠœüÚkċµÊ4TüVXğKUù½{uÔk^À·Ĉ5üçœ˙^?Ûüŝ8Œ` Á cçÉ€Âıßvn˙÷bŠuŬ3ó÷4ŝ>ŞÄTGżáKŜïʧQáóùôb"TżŸ·I`˘!W·úœŜÂ>ó~ó}]×Ï áĝĞkŜsuSô¸%A)÷µOÂa£0>ûúe_gÈÙ âߘ†ƒg³Ĉs/ŸÑ£?]+÷;•“MôAĉ>í½ż}ˆÉ·ĠAƒ¤ĉù{M7[w^ÎŜp´ÚĦ9Tˆ›*BNTùóà7*îĥf@OŠHÏëğŝ4o|"Pċ ŠŞ`ŸžŸ×h(_żêfkîúeH ֗Ŝô}÷ğ%—ò¸û2ĦCOô‰˘ïÏñĵ%_wUîîîĥ?×çâ{Ŝj·ËÎù˙>—´”$Sµ3š:ĝ’6“n˘J7ÊFb@€~ŸaIhż ~²ŝġtX “B­şB]ÌyĊ kë­ü‘°à°" ÷ƒ ïëġAż!QġT0żUŭUURÁ[—ŻŜó/7Òwu¸ŭ~hDFüoÏÑ} -1À™T‚Ñ ŸäE˘‹ïÔD?ÒŭżĠULk_>zíŜ]~­–,—úû?LŬ„ wĈVûU4”RFñ0ŭ³B-İD‡[ùˆoÄúİvF„ŬPĞŜ°r‹;m7éğ´°éÀ *ϙHbO›ïö ú€ò?Ż zĞ>ŝ”*~ŝ²eœCÔÔï‹ñÛô}ú7 Ÿ5­Éœ~–Şĵ ĝEħäży{ò}ŞUéÄîĴ 2v…˘_M0Ï^ —tĝU[,Ŭ!)BŬ·ÄtĞSZú{xß~™Ħŝ  qŒF1‚ ž{âŻ_;ĜŬq \=ÒÉZı7”›'†b*0iúFŭôÌHÔÉġ½˜mƒ‚b*ŬŒNÂ>Ĉ Önèb*Ÿ6ğħĠ?İ›˜LŒH„˘íTġ/AP܂žĥ^ ċËŞ 43OÛêĤLËÇ[fêĦ@8ċÒû3l3ıĦëĥ5ɀğٗê.''ŭ€ğêoÓŬe1(.Üzy$<ç$D˘D! a(í½ÄI<ĝÊÙŞX…óÔ }"fŬ Ż’Iq‰_O‘ ³ÎäÜä˘ç'+dÔŝsDa@2*3Aı7²óFı—°AĠjŞ.,OM•Ö|deŜIò›ġ"bxÙç4ÔÉA 1,ƒ-H‹ZŞİ‘<šjFp“œî.ڊˆ%|ŞjgĈBŭLŞTX  İiĥÂŞĥ f˙ä(DE£F_cȟf_ ÑÔìUeµ>³„ŝÁ.j‡Óû êj.P@îÎĥû>·ħ³j_ğ^gh¨Ğv’'7ħ!”nĝN[Ü^j­¸Î.µ›^·>]aŒÎUz=IG˜jèG6­|•ï7j=ñMĥżW›–R]í$yÑGh˔WĠżVa‰˘9UNÙc5Ż'hŜOžöÛ/ÑoŻŽtàÇa—X$ (½ĵWfè¤.´PĈ§ÏċÈLsÙĦ7äQş5Hœ²ċ£„/˜ĵĥ…UĈaÑU'=!‘;lÇOaIC|Û5'Á”·0 ŠÚbŠ—Ù>qıx`éFהXğFž8 ĝFŝg½úüîò=/UzF0ëLÔâôH½Ş’VÖxèúŸzףޓ[9wâ§ržğV³’"_ì#ıw÷ĤdgdşS.Ù,‡şU`ŠTÀÛöÄG麖êZyèËìħ>ùùÂ+¤d ‹‡,TS@͙álTê˕ôŒ&ÀbaT˘*œƒş§­¤/< ïp{ÉòÓ+jµôp=L<ŽĦä€jkġ?Ŝ…‚ê;˓Áv½Q¤ô½&Qˆ‡-𠁕ŜHÓĵ9ñ9ĝn\ aڜiĥˆ™(ûñˆPŝVEfQÚXĊ]½5c'4³{R—Ñz¨šwuЧŞÂL*p†ĠvÍ@š)ĤÊ|렇ĥzÈVĦä$˜¨gZ’ D2uʂfêˆéŠv}×zĥÔI iT hóR]lş]˘Üz ÎWíBÀŒmQù 0/v­‘ÖĞŜô§]ġR–9Ö;Ĥ‚LÔë)î´œëUpĝ"¸]¤4×Ĝ­hOfDΑzXN>j‡FTSöԎlž&Œ_j“3z^É÷ĒÇ#f+9ê Tè\W…4€­êÉĠ *(#u@ğh¸ĤÂ.7Ŭ%âà²òFXѳÑcS¨Èĉĥ—wÍz5ho&ÄŞİ,ó‡aMŬc(pĝòWÂÏGDû;/Ğ.§ĥü³s á†´t˘‡f͙A7Öċô:Ù š1şÑ.ì|ĝ?–ĉèŸĊU šŞĥQBËùĦĝEşI|ŻfL|Ö¨xGž+ç½ÈI1ÔȲ=żoŻÎ.ñ—öĉk×ÒË˰ŞĦħr µ?7s˜ŻŸU+‘˸†òC:ğċ 8Àú8Çk)~Cġ­ ùëv½Ô›¸œüó_è|WêÙV(żgİ#éoïé⠎TͨîA\P í÷ŞN5ù8}%‹”Éí l<§uÏ'èŝPoÇúû÷ġùù??ŝ˘‰/Ë_…ʨ–i› ?†~))ŝ·Bj$ó”KĈXêËíŜ}Ŭˆħ3À+Üfî56=bÂ("3:J¨Ù|"+tB‰E GˆèşE@*żËèc_²0A¨.ĴSġš|´ƒPÄK&Û-^>ôg™ŞŻ.úëú6^"Ĉ^!‚g,Í*òËĜ„a˜@táì”bW{ŻNĉAġ­']¸+ÛÍb$…AùnĵÌ&ReH|׎‹ŭçß8Dj…11÷_}t§ôÂO`‰#ê!˜™İya‘Dv֕XŽ˙>ÒDhї…ÌMĤ;˜ÇyaŠkŜޤ~|Žo°8À>Mü—2êû!ÛĜk•ŜÇ[ÈÑñ᪺ßX{žì$àl­İ vkm;‚DXë&Ü" c' íyœ£_N_—£¤ÖâV²,œġ霗¤†ÒRÓpLĉ6zcɏ“^´Ú³×½ ¤›ßDÎ+ïĞs˘G‚mXu” ÂŽPE y£Î¨³‚ò„Ôe•ġôÙ'EŸvY~Y÷îgD'\İ™êñ–XÉ*°½\â’Fn%w˜ôXë YE‡vÏ4˜áì|£ ĝÀ1Ëdm™¸_“+™äBú ËßNT”‹;!~ë‘?¸†g÷ŭ%ĝ~€½oÄËgӟÇ/ÏÁû!¨…ùĥĦSf;%Ħ=àòaĵ°áÇxêtë ĥuÒ7-à2q˘Ïa÷ĥV÷ı¸1g³—íDàe.aĜ(RŜĦ½°fDÖS‡WQ’î.aĦ—'ˆ˜ĈĈ9şê :n²îtƒÂšwHQ¤c˜ĝ  O÷ñ÷ÌÏ%ùq î}“ùĝЉùġ˙{,5$f½ŸEġvĵ­‰LĝgİÁ*ƒ€ĦşÍĉkYĈÖN·[Q“HÁYˆŒ şLZċéÊ:‡NóOċ;]\ ÷ĜùÌSÖ?Ĥ0„W´ÛÚ[ ‹ü šNFŝ| ûBˆ>éz­_iċ´”{ú’hXÉçıô9ʒâJX)c2;#³ JQïûÇàUxlKèĝżuîq%ùm Ŝ›#Ëad~™ñâBô?<•‚j ¸0mòP—ŞAîXWrħû×ré<óL ÔĠĥ´°ûŜ™"^ş&ÍŬ^ZQӍ\5‘á:żsNÑï‘ùi—ñF`i_~.Z%Ż,–XE֏ć(ÌŞEʖĉq\ÍE_ÏÓ­ŝ`ŬfıgTOà1G ú^›ònn„Ĵä|…o°˙˘Ĥĉ#v‰ïħÙÌ´Íb^X[SŝÇ#Ÿ<=[{@Ċx-ŭş#&~y™š2÷òB{½Re>³ío 9Ċœ] Ĉ0ıé8Ĉm>ŭqò´=¤Á’êġ\b9ÈGè_ÏşfÖLd"eŽŻ~dBç)Â`ü´Ĥ°45›˜Ĝƒ!óŝĝíûú/×Ùü.G…óŠŞ!ŭisŭH ŝ&ĉÎ% Ïëâ…‰‡‰ë?j?_ïċ›ïdĞÙxèÒ_ì_ FC´9IâóÈĵDGˆ[瀪äİJ³"ÙG˘!H’‚0äb¨Îe5HÀÇ:sêh€2E‘ò². ^gLâ)0fԗ7ë^ۆùGÈG„#÷ŝAóçÀĝpw I Ĉj‰Ĉĝ‰hßJ{&üOQwv…˘Ĝ•ü„·äʒĞÔ°àÎñJâ)ñĦ“Š}Jĥ>_ZêÔüŜ}oAˆµhN²EfŬ\´ŬïƒP•,ÎÜĴœäÌÀ€Ä€@`ĴdôԄžmV­ŠGp·Öܸ6bu¨>L%ÜÏ(û_35ñbĈ$ġUÎU”'ËçzLFUöíÄËeĦî?޵~Œ–Żj“ŞŞîŭݍ£5$´=VEĠĊC'oa‡"Q!b‘:‘Wĥ&Ñ_dĦDµş[×ĵ–5Ûxq½ÂC¤RĞLjîyE™#€Ò ~ÛĊıaeĵİ–ÉUC…&Rï­ÈHVu éЍŝ)½@Şufjx0z}ph%XqgJ–™êĤBĦ@'] qÁħ9˘ĠÂÜ@G/‚5ĉbÉu ĉDR×\&áy.÷İ:unhíѸ3KFŬüŽ3cÍÍ/ƒsA~%¸Ġ#|9TFñĉ·Ÿ,_֝&{XçKC`è&/sxέĉ–˘¸µóÒ^Ù_yâvK6pOVEUü’ K۝ÔÀÌÎG.Ì>HPŝ€˙vÉdke‹HĜ°~ òûÏè8ĥĥ )ȃ”jf§(fV$’g†ÖšÑ°ĝ$:IúßaPŬ:\“p{ĵPéD2QÄ·Ìf·!§·À\Ş'ßÇXŬs6ôùşuvR²ÊjDë-v/“ékÛ&G˜äE%Q„&üŠ˜?€ĝ*ÔN€UèyKŸZ}ô•"U~Ûù”ôS9(" :'˙ú€Ĝ€ß ‚¤€™A/$I"‚z Š2 żÓu 5U1JIĤ†šġÜÌ0)@Ì,²AíÜ6l $’”Ì ,Û­Ö=ĥîVV=j۔Ħ$šiF•̖Z¨ ™UR²î’I&šYf͒İĞĠ×]µäšiJ͙„†Í½k]É{µvşèYa³dJ6šI#ĥĠVġµëÒ@)L”$“0 ,,³MfÂLÀ$’B”ÌŞÛı™.şY`fÚmğ’HR–Y!$’I!e€öîššYe–HlĜ ¤’” R†šġê½ä’I™™$–Xġjîi£Ŝµk{Ĉa„²ÈHV.dDEb"Ž*W[]”víğ`Ħ IĤ’îŬ½WrË%îş…(R™™”ĦĤ”Ħ˜I&šêÖîë i Ya$„…–Hë]ÇkWwmĥŻUëÒIzÛı!$’lÙ%($J;ıJ–TR(Żġŭżùë?ëaÇôŭ÷#§ßċŭĤè×m߅żÇ4"mc÷R9/²ît‘??ü_—Ӟü ëû~ïáŬż—İŬ€XJ“-ž0’b½*û^ĈÙñ}1Û`ĥîD´MtÁknĥĵĉÓ 5‰–"ĴíÎÖŭ~ӞZ>2ÓĠÇŻv$vWÖ×~_áZöùrŻ_:Vç 'yW&ÎċUUUGhÙìż…úÀ9óèèğïò7Üġĉı˙Ĥö ħÙH–V\Q•ú°Ëş„p€"L Ħ BD¤ÂWM·56YuDÒZYŻfŬ-½RħR–5A³fËt8† F•ÀÑ"ŝ`N‰M’šX^!w$ ÷)€év Ê8é9 Èf™‚”ċrhŒhRcfˆ£ŝ’ˆàÔ"d ŭeÈ54¨Pİŭ!Ôƒ ô”ÔĞHċ·–ÑckÍQŞŝûVżħĵ¨Ş ÀœÈ ƒHj R•šûZ·5£j hÚòV¨ 5 œJ›Êd- 5P˘RY n@5"îDÈ˙âAÑ 4˘ Jä‹Ä& hÔ ´ƒ#%qäŞD+İ… 0’†Ŝ\ÉıĠğ‰u•ŻôÄQMBU…aH@‘‚XP!$&"< d0à#$ĦŜĈQ£ÁHL‡VÄ@”eYHS~ú—ƒkZAB¤…RP[ €‚V…b! OúM‰%„/b,¤„ RÊ-(ZĊI€$rÁF€)‘%dH•f4 QPÀÈİ2SÒOù„ŸëIG‚BZ¤Ĥ€H¤àÙŽqÙışsQiޕ֑kÈêšBݐ6-À›ÛĠLR†“dÚVUìŬ%œ·MeëĥêŻ.¨Z•:0:îé}]–P²´…à)ĊŻ%ä³%Ħ‚ "UҒ£ÈÒ`šà,]“²a0N6Ĉ)+,J[ĉëÀ"Mˆİ"ˆ²‹B`ÈaŽ`@`„!ˆhL+¨U¨²*”–]h˜—(k/‰3şŜ²öS%—NÛ×n”Q´_{­Úi|šğ*•,Żşí]µġQ&™‰("˘ĞJCÈFĊ‚¤zÊd„:aávÍċí­ÖU÷Yéo-éÒ1„°)a­Zilم ȑĊ#]! Ìp€aÚ¤˜@1$İINşW]´ÌÍŻNWĤí`#c²ÉŒ˙í(ÙùÏBS,19†!˰qqcDˆ0)Ħs%0FIœ0.Ğ´¤šiĤíu+fĠ(”U"ÈĦh¨µ,”|~Aġ¨ĞĈ~QµDÓ%ĴUH PëÑï•ó“ŭ` 2£ŝ"P”%!P—èˆxdECrĠ û~šñüëŻ>İ–‹@L—ñ“û/àÖßÒÌ-Ŝ–Ĵ”aTYo9ĦÁĵ €aŝĜ° @`UÌJ‘e ŞŞiL–ğċíQ„ş‚&LZ¤Zú—mòµĥ¤]‚ RĴB 2„H‘*#"â&‚'A#›qxTàŝ)ûf\Ċ)ÈA Al*êQxҋT—eH³ĝv$?(d™¤ìŭèëĉ‘ğÛġÄËÛ8$yVá#€÷·¨=żÁ6ó<î˘dżĊP5"óŝŜıż‰ç­öŻËü4u>VZvWg\ŝväF5ÜÊED÷Ñ+ÛÁ›œkX˜,DĜlĤI’é³ =$†DüŽŻ`çŞr8}ïŒÜìgµúòŸ:§Äżx4AI¸$ˆÚÁ“ƒ BS(PÄĤ¤Û)·Róv™ĴŒ°R†ÍÙğ6àBÁ 4ZĜ$Ĥ;MˇĴ AÂÀAêÂ\Ŝ.@ÈŒTÒ2˙CE!’v #†ò`䒗$8ĜK‚à8nz[I"`H)ežv\ĥRSBáˆN„ŜÀouF ,HJ›‚rtÀĤÀÁÁ°€Ù,hÇJI`¸ÁŒ÷{SR²Ù%£S*ıEĦ %"R"$E?(DÀ`İĉ›w2Kĝ½“ͤħ…1L%0Y\Ïóúżéü°>ÀgH’MjD‚Ŭ½wDÇ) 'ÏĉïÔ`ž¨Ó͓ŠğİuY‰jÊÓıy|i)Lú…†ƒ1ĊĈÁ‡œ1).°µKTQL…˘âKJƒ1gĉb “˘J¤!tÌ#ˆà„,1KBʒ(’Ħ‰ £‰ù~<ĊUÏÓ²rİ 'f•ŜK·;÷[jÏï÷m²Ùé§_i›ùQĞs>—ÖYŒÙ}P‰‡zrôeLJ¤ŜŬĞÙÁ·ê˜ö¨.ĊÔÂDıqÙA²rœ’·¤~^Ÿ—‹P}c°gtíŭŬï4Q stÙŞŞŞU% Ŝ\‹•>~½rr#’+vMÚc|Os½XéôvÛÉ(ÖMĞ7*ġiÛíçNÀżSĉlüBÀVh˜§ŬŒ“e0İ?½ˆħqĉ´3HĤ)RĠ)*"ˆëN˜(û°29 €‰e (I€$˜ğ$0%MĤ!‰l³a8°6Ħ‰ …0ƒqbY§eÔZĤÍIóĞ–R†É!O‰1 V@˜…„/áèş§Ĵ…%Š™I"Â,(U/BR‰9‘ŽK $àD!!$=nTUlĴ]Zm*kš5,„2ÀI‚ù §à˜Ž÷& .KA!¤°B9Ċ1R¸ àxpb hFÑDž4b‘Ć:1C 8 ÈaÛİ˘Ë„†ƒ`à†‡[֍’ ƒMĥéÓ­%…†B•ъׇğvmá"0"àœƒ† šÜԄN§Ëġûká™ësaîŸ<Áĉü|…Q vGµmY=öŬŸœy_³ZrġL é¤ûZëAíÛ:ŞZžüuß(–Á ³Òòù1”wêĦD¨˘˘òT-aa A“GA-d>*NÁ°‡RH80²;8:(BBa0Ħ§IL0dĤ"F0â”ÒSä\ 8D…„ƒĦ?ïSŠ X™Âm`PÚˆ¤"F@˘¤Â…î²b¤\˘ñPqÉĈÈÉlé%£.é§ğŻùeéz÷ÂHŒP‹Òİ ü2èÎI|8nĵçiïìt³—‰…ÛNY·M³Ŭğb>6#B7üUŸsŝ¸—’mÜËŻµĈ>=2N½ĵ4v듳§’˜ËĊÉ÷cġ !ò$"Ŭ4°‡ ĴLŞ×ělJš×b4X$Ċ7•s\Îğ%BÜ×1ƒi6ÑQh€ ħ‰-îĉM^qŬnV4Q‰ JURÖ àB!­"B†ŒPÄL!"A0F@Á`u-P.¤A–THX…X`d]HşŠÒ,, Ž–QÀ d$$5 `Ş%"°¤ š!€Úé4aQ˘ \-˜ĦRT›=şŬSX·Vê´Ì´Z…ÒdÎ ˆ$˘A) A.ƒ”p‡ĜoFˆSf=İšSdÙ^³[¤’‘Ĥ̃ğnÈ*AŠ’$-Žħ1„üúmàDÒ_‰ŝ€t›oG”Ä–%”„ƒrµXQpn‹F4¸eX`` !ÌXİ˘`İ.T]rĠ’ÒY% (4ˆNÊ!q6FĜÑa„FÄ8M'A£œxCO’IĤh˘EÌI „„Ĉt½KlTĜâF0ĊÂ)U”LÊ[ÓħÙϕúsîµ£ċUŽĞ†ĥÙ·ïWxE–^ËZŜ÷îĥ>é:ëyżwwüü·ÇêL8ĉÊĥÏŜ׏ zú¤<½8ß·Â'û'§žrëџż/Ï蠜oË ;î6û§ñğá.ژáïÏ·,Ğuëçyaż²*M$dèÙSĉ.҂!ZNŬÁNÀuÉŭçL,§wnë„ı½¨–ĉıÒ:DfV$$ˆ4†Fc.àšÒ ˆh5†ƒNRD<„éƒ6.ó{C! : BPSX„ħ,Bʸ N‹¨7kİMWitٓ6ş_$’$Ó4˜AŠàè4A€XşL1"XgC†$8™#S#4ƒ  Ĥ“A=Ìqvaԍż›UêùµÚS*ë° Q°èşTÜÂA˘à‰dž„„$*.Ȉ!£`áˆĤT Âa)„ €ÂbĈfCÓ$ Pôƒ€4ä#—¤ĤCŒÀ•‚Ù`Î .è2B1™$ ˆëŝšDĵ0]Ħ¨ìCp•!òğ"nÚoĤ×kÈÖR’ĴD€ÈêlJèMbÂCI¸‚bìU€àY†kċĠu­[wk̓TXÁ£˘(Ôh‹EF‚4XĴZ-‹@ZF˘JŠġ­lÛhÚĦ„•t ‰„è%U¤qHUÔ(Ž,€AB‹‚J#@¨Š½$ĵ)$ş%^Š£H+@ 4”TÂU•$UĦÒ ĉ”´ b˜KÊèt´ò<:ˆHÉ2’Í ƒˆÀqFdÄ v&àĜlD„-#A#ŒRe„iÀ Tl-šÜMHi”„“0%°cDê%4DÍíi6i•E|ÊċMŠèÀqӆLF$†Ä–Ô$ÀVYX£Żjĵ{ÒêġÔÙÌÂ;3 ÈìuŒX£a2ÒXšфhĈÇYZ›t~ÛÖ6|”Ĉ2I„PL”ÀëNIİp…¤F*HUòŞy=üĠá˙ŸŜëü}Ú~ĠşŻ™7ϧÛ-¤*žÄ$n͍6z|„’œ›žï]wĤîŜ˅ĞİHïİKQETµJH½V(F‚]ôA샵¨l˜Ĉ!{ ìXŒnÖğ-ˆo%£2’ê³%Š^P³)dıRĈcġYt&ħqÈ)L3Ĝ8 ŽÂ“BÊ'q„ħh‡`ÈàĦDl„˘vd™ HÀ¤Ğ$Ğgœ§ŭ׿Ÿé½ñĊñ=Ìvïï½wíDng$VTBEıhŽŞDę R Ħä>ñTQ&Ô(f@„Èc1”2‡7ްUbX΃!—f iÙa2°“F’$‚tp4cAÄȕIUó׋s̽íğëiçQ>6ƒJ)Ġaj*¤ŞúRxġĠ’7B˙Œô˚˘Ċ ò˘A%L¨D  HHU`$ZbDŞÁA/çoşğ³PµIµ‘dħ-*”ôP´˜’é!?ˆLa& S'DŽœ!Ĉ%t‡ĠÁ Ic68Š?1M †ùİkµÔ“ Ħ ż$Û\ù×L9ĠÜ];§pr¸‰:î N—sµ;şW.Q tĊs]×"’u×3ğ† F2@R"È ÂHÚη7v䴈Á.ÈîıÜëtmj.Ġ–ÚRŞò5Ö*2‚ċC„Q•(ĝJĤĠ·lµï8×uZĊ f0Á¤TŒ#Œ"ÔPĦƒ‚At¤!‹(D¨02ħ!˘AP’މ!@Ñ*äŻô‘Ñğ¤6™C)B)T*˜ÊThJD\нEE"Y .‘@R…e”BJ’P !r ĞĥZÛÒJñJÚşÓZʕ¸²×UÑ-iCnĠÛnÄ[áÏĠ—ùw Ż_+ÏËËÑçOġ•îĝµçííRRİJ•ċöéÛğOl‘6ocvĥw[ĵ§bÒZJQY*êÒÒ˘Kú³”rfżç˘É#½´³X²×çk³ì0J ğä³h3a™"…#t.—`Îїïƒ JÒp¤š +‚šÀ™aË•Ĥ…„ˆ ƒ¤kVFbIJ,è-·x]L-Ù\Ĵ͍´•6H“ŽJ.€Á‡`lÀ"„§ˆvj1YÁ‰ŠT„Ĥk!Ĉò$ْdÊŭ¤‰J¤(ĠDțÙĈŒvM8À°aoH°XaJİ&J€²Ħ)uÀ 8F’Ñ8Œ9Ĵr)ž‡#Á£h@È)…9&`¸ÎÈ\Œ0ÁÀ ’XKYVRTaK• Ş RR­*Í]şß)’ĵŒƒĞ^Ĵyqq#`Ê`ÊbÀYŒKİW¤ÖV[^ş–™Œ³ĞĞ]şêâ—*ítšé½^şíÉ`Ì`viÁÒ™*PĦ„µ%HJĴÔüžê<߅ûĝ[ÓéOàO÷ŭxŸòñêљÎ5[LjŜÛ ĝOܨ}tßYbĥĴ_ġíOwżùü8éLıDxLo•UàÔ˘¸ħûeÒךù-LxU½ŞmSŬ CnвM‰E ²á³XePŞÀ‘Ô,) v ŭSlC (ÄÄĦ‹¨ÌÄg%^B‘D‹JŠŭŬòÛĝ˙ʧŜİ˙µç÷É˙3LĠ|˙ú[ÚĴq• }KÙrh3ŝÉЇ˙ŝPÇ,—ĥĤg5ĵ332Iq&÷˙á£Mäfo˗Y›ĵó7ı!Ĥâ&‘żü¤ ²I%Ih˘· q‹—v·y„™­ï½NbôId,ĈPŸÓ?ġu7ÖÎ*Ŭġĉ½’I-èóMáĞmɚğÖ­3›&órağÁ•c½:èŬá˙ ç˙Ğ˙Bü/ŝBOܓ˙ŝ?ô‘˙à’xiòŝżŝżŝ'ŝÎ/t!¸3ċ\ɜmpÜW*?mg€³×Ƀ¸D£…‘ĠĞ:Ĝ½ZŝşríĤÛÈs"ĉ mñ=äNÑ]gŬ҅ĞŜ=)%ߕĤ]ĤœT]dwÍsċMˆ•Ĵe¤½ Vq‹ĵΗ?Ñí,0˘í4Ó Qġ’ßħVGUC%E§Ĉsċé–ÔœĈËmWgqħ˜°żlġ3˜FÒĉúgKZÌ$u@êŻakŬĈŜ9Ç·ö-ŞeŞı¤ŠbGÈĤbĵ 0H[_ĵğfŸ:µ…ABhNÚüCP’lcJjÀN~ëçmzħ/E@)½ġ“‹0•zÈÓc+έĵħ,#ċžgÒ*Uħ`ĉö|Ġş Âèzáʍu—94[FñZÙJнœ"ĝLö™Œá=e íĜ³×hQÀżx£Â!ì=uƒ:ĦŞÚßwlKY"Ü ÍĈħyj‘ĵŽ´~²£€7”9-%YFs–kÏiHĈúá}ğıiİş†{âiPŸ‚÷ŜÎó-XĠ­i@ÌCĉ´ġ°!ĦeŠ­#·™äÉÖN[ˆġµÌÈì-ĊÂO|Ô3놲ôŽ]jtĞz†€_ĉ ¤Ç—Ċhçë/G5$Ŝ§~Oßĝç˙çü‡ìäîBàáŭú‘£ġ('ûŻSEĝ_ĤşrÍ3KĴòĵ'ßú+ïÙŜĞŬ}²é„‘ž\,dÜ˙î[ħĊ܋,,ә.ÍÎ$ùvÍş×§NiÔ·fúıfÙïZܚğ•¤oÉ)VIW.bÜ3"ZŜµTŬĠjˆrÍᢴrŞùßt‡au蘽ZáMjëÎĈ--Ü=Oö;ĦßßBŠ{ĦĠàAÑvmAğ·•ñ% ‰$Ü@áíçíċ+xçċ^•§şŝŜìgÓGo2I`E^U¤Ħ X/MVòŒĥ”p¨ĊFŜ’AO Û³)l—íG=Ü|òvqòáóÖ½T§‹;9ŭ;ΘĤf3gá ş]|ğ2ˆˆùĴÛ Á‰K^͍lˆóŒĵúH’-'â1P>½×[Çô“qwEÚzUÙÓ2fġ”E(E×3ÈR(J;“ä°R§—ò…F¨"İĈñ’úµj'\İĞŭAúwĉ•äĊÑ|,ĵ1óißRğĝÙd„ċfFJT!£•À6WĊ °„:°è˜B)..Ŭí=…ş‡fŞGĤQĦ˘Ö!òÛ†ıü½-BWÀ=Á,}4W°EƒdÀpO%Ÿ èiĊ0jğÒÎmJÉqdzÉžP€DTODŸJ—IŜÌg:ŠŽŞBXAĉ`é™ozf]‘:&W•iŬ S7›QŠˆŠ5Xê ĦîZ2­pMĉBl…Ĵ„A0Ĵ4vîâßÄÄEWEñ9ˆ‘|³ç’A—w3½Q\öğ)_À`—ˆ#1Ġ~ğhËm‹ë‚́dAHêµ§)ú}çúyV0…Mkrše“™,½ÑALPı;o<+Pˎ°ĦhĤ¨tĴÍ\{HT8ÒœıiHĠщkĥ‰d °ŝ†­Zİ9İİ—Ò0é´³9˘ĝÌғG‡ÎîÊ·†ÂW›n&§;rXS‰z mׄĦ'"F ­%Ò³żĵüih*u•#à*áşiá@xùIjûÇĞeäÈR™ôyQÜIruĴ¸·ıv´üí u†‹nˆ'-iiMħaÏáÈġ‰ç˜\‚uşí´|ÈĠ‚ĉÀÄÄU’ŜY{V.ô uwp°7A­/@³´İ*h×61jä`uġùZĜü݁ŞÓâ_…<çuqħŽAħÜeĞ‚ôBñé›Jƒèe†ú@ż`:ÉǤƒê}ħôÀZ  E.:U‹ù| Žuç2ë·³A @Âû* ‘jŽ’YǎüD"aX×+\E}úŬô`Ô_$$45– ‘UÚħWw,‹\Á”f–3žƒMŠ&×'G#(ĜÒĦ]?•LŞn™]Ñ ÀŬÌ˙Ì?¨~żz1°1îŜġŒU(]Í~NÌ*~Yó zIàğaÊÄFñ‘h…=Évx ‹wĥ+µM2oj·ċ`Ë£s íá…p”ÑRµbcœ}FbĊZíIo}ùòšŠùA˙—À–üöá—ù_ì_7öp_û‡Ïö#íׯŸÏĤ£ËĤuüÇôßŝŻä ĤÏü¸^>ç~J˜ÈDlE¨ RÒÖNäB9š)Hި‰Ċ˙A'ü:!ŭŝ|ŝ˙ÇëüÈ˙oÂ˙"ŝÎ?—YçúĵġŸî…Œ÷P_?µÛߛ°&ô˙ÖĠïĦnïàÂóç×&ä)“B…“¤ osJĤ"Òè£/™N𜑖Ŝ*ĉ˜ǃSëCÙmÇŭ!Ô§[V_ìŸñ÷˙Ç ?Sïe~_ù@ïĜCĝ˜â ˙iUŻç÷u-¨?ċÜÏŭ€ŝ£>ĊG|bŬñŝËèOĞò·È˳³şÖéŬo[ò“£ì·ñKЃHžr¤Œ½oëU^^~Ŝ½}ÚüöÏ:ًû—ê£ÓżÈP˜ÛY:ĝFˆœüßÁÙ ÉùPÀżMR˘GĉPYÔ´S–!\‰ÍĤ\ïy§·‰BäÎQet­ç°Ċì"g+ŝÀİŞ†ˆEâB4“†%T4µÌÌ$OÉ÷L—“ïĉ^zËğ­fc?nUÁ(¨‹B!nVċl×ïîÜí E˘nşŝ ?yuw0^a·Ÿ€NRs´ó'ċÖÙr,€İX”ĦKîe5%ùĦÍV•+Z˙’ÙĉKğ=ż“Ġo·_û1+nSGĈ“ğK¨ûFH:òɐÇ£H’î$ƒWwE”[T¸Ä˘îW}âê!j†Ĝĉ`f/N½µ¸µ²¸lÂÜÏr™ ĠDD:ê#Uñ Ê¤Dí íË7ıXşHEĉĴĊSƒC%FàCÓzċšĤı˲–ĥÓеP—v 8ĤZħ²ä9zk+.T̖œówŽšwĴ¨qÄĥ5:–ŬÈĈ¸^íLKyğ&ä]ş/wku$.TjáMZ&ĥY´­ ĦáĈĞoŽ%WHIs™×3ˆö”p4)ŬjWé|ô·iÇcdۋ*wĠqT9C¸àÊIï{Ÿş]H2tCSçô_\İĴN’ż)ù87ĊcŭyÇeíl³üߢ;$ÂĈôEJBĦŭmŠ4<ö…ż+oŒ*~ÍÛ£˘?KÌĵÖ·Óƒ%&Şò4ëƒa÷ŻĊöżĝ~?Ĥ_ŸáġÇçµnÏïùŜĜżçğ!ċ÷ñçRóžò{ìu5Ÿ×?+´˘jިj„…=ôñ}?ü^]÷íÇ<¸ġÎ}f—ŠŞ8e™J|9`¸·uċğĉ™„çÏu§uH ƒfžàm–ŒKĉÎĊP$.c4ù¤v_óùxŬŸ-´ïBvϲüùYżŻg]îœ9náúI?WĴ1Ħ§ëñëéÁÂż/?~ߘ§ö§SŻĠĝ{_XGä^ĊOëÙŬwÎäyòĞşÛċĉf“$ÈÏêïŝħ> 3œÇğŻ—ݳÓ=Ï˙îïTKOÄäÀHM9ûúzüymñò·omóĝm–şWÏáHn†Ġ„Ñ„"ĝşp˙…ĜÄ7˘HwAì– ?§/“ŬÑŒU34NÒ£ë\ó†xu{ğ2z—˙ ~W‘GĤbŭŽ#NmŬ²9݇â>/żxí9ɀ… ĠìšŞœċÏöù˙Oĝ~à:%¤öR{ÙwĝnßUÛËğğKwdîŝ›öß߯~3Ä-ûùíw$֒>KZáyh Ô`˘á™s!|E.šTĵ—5ËşÚ¨[Úñâ3fĞzéí¸?œĊ…½p.ä'J›Fmšˆ’‹˙_ĴŜ(šùıeQgsñ#v›š>a,ëüIô= Ÿ $ ö òİMԙôVÛzHà3¨‘Ÿşx;‡„MˆÙ8u/ó´‡Ŝâ§?ÌĜâéŸ{‰i’› PcŒ:Ç Wĝ8˙ 4˙]§UáPŝK䓺~Ö3ˆŸ‡dŝ2kúŻ)í8ë_Żu5:ĠUß*A=Ĝĝ>útš#£!÷y³èŭ<½ú™/ƒD“ÎM”ÉRIğ„·ûN‘})Z~ĵ[Ô^@ˆ=Ĥŭ¤ġÓû$™zžöġŜËNÔa'Qï ¤@D+JDĊZùòŞÉĤU(É ‘ĈZŞ1‰:03!Ġ•ŽĥğH˜ ²@qžcXàz0Tl¨Ş1(ORTšë77cÙ$7Ĥĝß ŬülğĈ7zw˙:™ G”rŝï/“ݳûÑ·÷ö§Ê½"Ê$ŞŞ•@oî¸ËU$¤ÜŜ&ĥá'‰ĈHàxÒh)¤Ô/ÊF—%\…È""%O8ÌÔ< ”ŭҐò<şâmŒÉÖbv:ôĤ4bbI/uHĜt!“³ùӆJĤ(*&*ŝçü2¨uğóàÛß_c…ö5óşĝSïYiD!jĴR„²dĈ"ĊƒQEŠF“4‘‰†ŞÌ “0@ÈÁ(JĴİèĝM_A`Ĝ’>’ÌPáHä‹"{”4T hBeÄQïŭO8oŝùaèœŝŬŽĝxrçÇÖèŽá§‡{ÓUXè˜ĴwÛ²N /™ñMUÎĝqµ4ÁA ™ÒÂÊ|(ü‚xċ?X:1îĜgĤ“ }ŠŞ(!"K&H™ŠÁ&eáàç&Ŭ·ïsâ²ÍÌŬş8²Ä"Ÿ;GZ^ʕ—jN ½.0Ô}ĥGġİTâ˘X‚—ıÓUHğ~á‰<ĥ…vSgܧàİĠQ_àŻCäjXŽ„ŞŠŝÌ>Áëd÷FfR:…˙ˆ#êB¨£…ácŻĊŭ/f!@÷ŭğ0€Ïu?sßşŸdV£àÒ~cÜôġ'ĦoE8jn›>ív“|œÍ”|\.ÑR6Yĉıœ^[ÓÉeßYLS➴ÂÜ=ì\!¨ż!x‡êp|ħúûñ‘P§ĜÎĤµš½Ğĉˆb„Á%`ˆ$Mb-‚ÉĞöµşdŒb‘”jd$c3,H‘XÙ Qˆ¨“JjP£ „£L”iLˆĊ$˜3,$ƒ2  ÉH6ĜÍCWë7YHÑ$#˜Œó™*' &kAE#*=˘ËGxœxʃ7âÚ7tfŻOÜ2àH†ÊG ƒÍe’H÷]ž;$“tE³„Uu œ—ü˘èüĥrW`x\îw_×ċáMsÍaÖ0<+·ƒGŝhô3ŬħÜǚ `¨‰ŒħĴÌ8LC† 'ù32û#ż€Ÿ.…m>S܃sĉ'Ŝí÷Ħ$BiK#E1‘…&f#’ Ò#&lħ(Ħ2HȒIhŠI ħ’ÁA1“%Hh"iI0f&"ɒɍ²š“C#FIšfLĈQJfJ‰#1h°!A4™˘I%#)ˆf2I“M›”ÑI’!),L£2Á%“€ŒˆŒ˜P“L̤"2IĤl2ʋd&“€L Q“DÄTf,! “2Äd„“Y Áĥ@PHÍ#1 Ì2Êh2!J’C$Œi$“IRšK(£b“,£ŒZ(’RDMÌdĤcEI”³a2I3&bc X“HeI1M™™)$„¤ÙH$Ĉ0Q,™”¤Ídj62DIĤ”˜‹”Â2‚YM3%‘“Jd&¤S &#dħ$ŒÉ$š†C#&$’Ä‚A’Lc& ˜˘e i1$"HÑ&™)„Ñ FJ#b1 XŠSFQ™2 $&#BBe P™2dѓF13 &dbÈY#dÓ Eˆˆ’ĊƒIXÄ2$S%I0ÄÒĤPH’™&LT)ĤIŒħ!4I””2ÌLĚL†#e""4&*f2fR$Ä,E¤(Ä`“Êl™™&"fL–(Œ˜ˆI’LÂ#1’2ÌH†d&&c2D… H"$ËK$Ħ0QB“,ÌĦŒ™”˜R’£K!˘fadĜ˜bŠÄ0ŒlC#3™˜ÄQ0’‰Œ’’„ÂTRË1%,Í)ŒI2$ɳB&Q$S‰0FR£ ٖI)30”˜ÄĤLÌĈÄ&Lcc eJ&š2d´$Ĵħ!$,XÙ1b#$Y–6*(€Ò’DL›J ÛȲVU­¤Ħ™£b™‹ÈÙYµĥ*ÛPR`!@‘‘‚`(%P„ Y• !BUˆUĦ`€6U*ħÔµlE´ÊÒÛ+K1f–Ù*’Ú•5Sj* ‰ĥ’´‘Ğ%Ĵ֑€Ú&ˆÙİLÍe¨¨LŒ#!%R¨DÄ%ˆĜÉYĥ´mĥ#VU YA ”f ”•‰–Ëi´µ ĥK,’•5-ET•l›Yf´ÊÔÀĦD‹,0,,ĥ[“1&µ*ކZ•MİE*Ke´%ŞZÙK-•ĥÄÔĞB!D’ ³"‘ JÉĴÒ­-İ[jڕ`‹ ¤%R)*ÈRÈ- –‹l•j5Ğe²Ú’MĞ*RĜQŞbÖ4ÓBRD"RbTj˘Dˆ’ŞÌĤ“6TËmÚ¨H„…H%%I… Y ¨YU ee‘Bˆ” „IF !•˜µcVL¤M&ħİ• 0 Ħ,J+"@B20âDĦ4‘cĤl–#Š’Š1 F5(Ñ˘%¤ÔRcDc#F‚Ĉ ĜÙ,j#Iİ,b Š5™E°‘! +"Œ Š4aK 0ɈÂDZM€´j¤ĤŞ0Q|äS´·Á,€™" òEä;ÚĴóŞoUAĥĴÁ.é§ÀÁ‡Vzbz†&4ÁSħËĈqÜŜdÍñ›nʉMĝ™òdëeMáÏWú&îÉîċ'aîË×µ._E:iâÊeùÏÑŝ§÷Ú[DħoGo½ëá#ÏÂ]Ĝ^Şa4á„:ڇċ% ò\¸œ|H+8êÛ%ŬZ] #Q(Ĵ†Y‚ÊrK‘ŒnF5hAđ* ĝí˜mÎŬü/wÀuñ{ŬuİdKÙtKĈD‹Ŭœj*†{ôOMK2FXî06BoëîÇrŸßüoıÏċE4ÁRÑDEDDO×ĦĤU6xù°¸œ^ŜŝÏǸ{E-Ĝ¸ôĊ³*ïüxpüżù½àCóï‰AE{fd›ÄĈL­bĵĉÙ;HñáGjÒ|ŝĠPü%Üç.eì=< ï7ĉ|‘§;MKöE~mVT’Kx!!­"BDïS„çħ„N|§qşŝP݉#œYĜÍÊe|Oôïwôċ%'bhíıy?(ìe<;Ŝ^E*İo…żêĞZ-§Éóä2,rlÊË*NşOĈżÌ?n^Â>ò1~áĠ n}ŻĴÚ"(ñ:ÔŞ·Fç7üÈ!Ĝçû‘Ċì™%ž½îËÖ}\/U ‘¨–˜9쑑ñ2v+5´ô£ŬVޝ³:޵Eêei4Ŭî.sR½Ò[.ˢ­Ğ?„щt+]hğ0ècŽƒ*ƒP\,PàÁËŝҙ*&R֚ğĥ[´·Ž3 ŞŠWúÚ£Ž'zˆ|§ ˘İÈûê:²ŽıÙd½Éŝ¸{êtó93İİ™×>·[ċpİF ¨§ˆ ĥ¤3ÔjİUîÀ’ÏS6azƒß|ŜkZÖÒù8NGĴHsÔӍa*ÜĴƒgz³Í ĥÍĤoIZ†ġrXĦ˘Ĝ3›­“.y Žî%l…Ŝ%ŜHIrâZêâ˘9#YвBËÉ-ĈiܽÇUƒeÌe8]šn³I/Dӂaš² ÒĴħŜìĵ KÂjÍd˜ß/5pruA2žµËʒĵK£’‡"€{aˆ“ÌPuîġ06rŒ(ëQı:`Â&¸¸u¨I˘Ċ—p¨ĤQJlÀV%§ Kİ ]LĞÛÒËËÉıÄ0½=velÒp‹ N!z0ê;"5ÖùMÑħ }zW@v89-ŞíèÈçq C š°b<`ğ(O™¸CÛ·èQÁŭEO(²;–‹](˜yœċ°;‹.Šo•ú(ğ×l£Ħ·ö=OX1ĵ§ßÉ³*²úùvx_.Ëè_àŽ„‚<ΤÊ/RêcĴĨ²ħÚӐ‡t›\É5N“ħ½Fġ¨QgE£œîUŞĞî|’áê\A}”OxI˘Auî zy)ïĉ_#œ"’ޏ>€£ĝ½C‘ìùž†žQ8İQ Y‚”P'B*RTv*b^ΗĦô6v VO‹È&ĝSŞ!Ġ|ïÔ44Sàò¨Ŭ KááGÙIù[z)Ŝ˜íUB‰"´ÊX'dÈ~\™¤•¨ß,Z)ĝQžù,– ½AU ĦU>×ü­ŭßÎż˘˙×î½{bÙ_ú÷‹v|ó˙/Ġ%Âm!5˜_×ëß,çLö!û*ĠßK¤uWĦ¸—ıZMSÔÚ"Ş$ôÖ;iLkƒ)f™çúĠ—Ëj‰XF'ŒÈ˘"3҉>V}Š@|7ĥñ€É†İ€ĜAL‡Tġġ¸5Ĵ $¸ï8OŬgĊ’u~>BM• MżSş{â9y™nRy“¨˜ö-‚! f܋ÓI ßAWÈEĊ–_jŸä3§˜#•;86k[†v_ÔX˘ü]îΜ-ŭ…b6D„-ŻÈb˘E–tµ9˜Ê"ĤìĞ_6ꄧÑè÷'"ÑÑzĊuâcH^Ħh“׋ħ¨ş½îó ŻQf°óQ>v7Ĉ’ßbîùİr²Oċr ċħ"$²7+ab!8 ô獙ó=ġjİ÷Ĉe‹-§ñ*ˆ‚АŜN3Yğ³™Ĥ ((—£Oy˜ûÏÊßÓythŝ*4-÷œŭTËĠ%ĊTĉÇ&d^tb={kŞ”.Œ|PŸ—S;Ìëç÷…rPÎè+ }Yz äÉÛRo+Q%ġó¨6’jì”Żóâ¤&ŞMœ˘œ°Q˘á“v Lĥ2ÌùHx˘Ñ °ŒÜ€ŜzÖ5ĵ‘h`xÊİ\n‚K·vñt_Dv<İâ`§šEħzTó‹’ÒħS0½'S½s¸ó,'h:¤Şˆv†tz›ï6Ĵb#ûXSJÖ˘K„f*ş×4Â?™2ċ :² Ï^ 0Ž=‚ÀŻ&²xVŠċS}¤¨/ï T’§ SèÑŭ`”êçĞЈNêÀşúġÓÍB;”–Cމ„>ª猓V2Żex3bOÓG! (şBeÎş”ĊFj>Ĥĝ&QácMż%$œĠOh7O1ıW[ó%|íD>…ĉf“9‹Ż@RĞɘbâ|ĞÎİh2҅mÓ]é‘nŠ‚*ÑÚ=¤Bñ²'A"ݤJÎ&g<.ĝ€È„Â×hU'Α}z;˜â žoK{ġŬñTF–b ÖĞŜŽ˘^Š?´ÏU”ô 5Ö; OWqU#èM3şİ'Pğ³d²û)*­;Àâ söÌÚA·}[Şż_-š›=%R#éÛ[çD띧jg)횊!YĤ£.Î,öĝ‰Ó…ĵ2΅ğêz5‘*Ž2l“>-jë{I&9K+hòÌdža=GıO&çċĦöpÄëb–½ŻĉÛ2ˆo{Ċ$¨Ĵĥ'm³ĵü"N,'Ln&ZX›#†m·/Op=ŞX¤şI(ç.ÇĜ‡Ċk'‹Ö˜j„IDUäpœoĦwĞYôüĵĝQGÚfb`^ÇYË"xÒì}ŝf6>Úü_h íƒÌĦô? ’ÑÁ­Kì?Ċd‰£´aüƒßİ˘”ŭFë(vòmSˆ’ŜäşZÈm&çv.ÒĤÔTqħLC‹ĜŸĤġ1”>£™b^<4)Xb‚%;§™ñ÷7ŞĜ°jÑÔßÀĝÀ‡ÏĜ0ÇöĈCëŞ×í:´‘Yœŭ5°ÖĴĦü÷voŝ?íó˘Îô‡:Íì½rVî xšËÊï£c½kü);×cëŝ-ˆÇO$ô&Ò0’ÉVô>‰{ßŭdœàĝÔvÉ5?ïĵW)1?ĥᄿ­^gĠ‰˘ËHĈ•V˜˜ĠĥÙd)i eÂHJ…˙ÏY­ĥÙçù‘ĉääÎş¸s­àMÁ|Ÿßä0T5’I$Ç'Ġŝf“sœTôY˘,D‚°YY™AÒîŬÂı3°ÙzEí‰ZÔ'Ŝ­Ô }BZȍ}ë.¤!1„ġŠu³X!³ys\½ë,ù½^\"Şb[ şĤ ”$ÛŞâœYËÛĊžŬÉş­e( rw:ç-ÔGg-BšŞÊ=RŞ—h˜&Qu ÔĴÖu4Ö33/TaEGBkEg³ Ş žƒşÂŽ!Ä˙şh““j–RLĠs b75µ}‘@Pd”Ċğ¤§p+Gòß×ú*Ŝ4…JPÒe–^׿…íe{ŭù_ßĴovTU*żLÁv\Ij+M0h–Œú³ç=îî\ĉíÎÜ#`îèÄÒ1dŠF0j1k5ŠêȏŽäw]˘Rwrç%ÎéÜéÎëşúw¸=Û¤óŜàHèbE>wĊäMòw—Ċ)–ÚÚKb#“,UŠ&J€–ö9×8™Üğ½ŬŬçž_…áA>w#ëŬ{WĵÂJ÷׋UGY bV2逤 É´ˆ·rÚH‘n OêbI&IR ĠŬ܈.\ç9£î¸îç.2r.Gnè ğˆrü<Ÿž=9Ìè;ë—8ċڃ×ĠĜ(ӌZ2Aĥ-=\°‰—PO.‚½×${Ğ—ŬÜb^JµE!j$‘”şctŠp¸ÈԌQV!vFĜ˘Ñ.îÈF&|sÎğşĝĝŬێğÊL˜Ù#ğ²Fì—uÂN]|rñuşœJu$’TŠŒhın7-EnINKÎ'şà:NċŜwÀ¤ó†÷]7.Ĉğ¸îî],„sdñ˂.21aĤ+l˜‘^Œğî9#ÎŬîıÎWDËçwS2;‰yç+Àß:ĝsżŻ¸bD`½óÙŜÛÚì}7)ñsÇt.îÒO;/Ĝ^â.üġê+ğp“&žêí˨ċt†îŬ_v5/o_rœDFŭžï()›÷U‰e!&’ ‘`‚ĥmf¤µ$Û1²ÑĴ%WL,=$ÂP8ÀC‰2_ZXÍ-ŠRÛbħ&$¤˜I%%6"B`‰ Ħ"¤¤Á0š ,DZU&”ÖĤ–ÒÌĤ“6ZYf!‡ÎşlÔ²”²÷ûħ],#½•ENdtĜl&I bdHÜ@K+#Ĵ¤Úşµ)6jK2ZĊ˜%Ñ*oXa‹‰$² 0YİYCäëI3ÊérU͐– Re-J2°Ëİħ“i+M6ÍğµÒ_T.,²ÉD£1"D @16É1!‰‚XĉĦ@,½qD1bR$%IId"ìŞaȈJĤˆ)  HF”’€ a"E%‚i"HHx DˆH ĜŞĦ,@j#™À%TÌ -îë2šÓJÒmfĒÊT“,J+ !b`ԒÙ+5ĤÍLÜŬ)ŞšVšjS-&²ÒÊÂV¤Ì0’eR°IŠêJ1†m6k2iT•I´İeYRĤĤL°š’ċn­rĴˆŒ ĴS‘Â1”¨P¨P¨R’)!TJI_VÚ×jşï5zQÌrċs3”Nê(ċÎ\§[ûĥ{[Í·âêÁÁ¤b 0˙ €ñ¤/ŝ £¤ċ¨Š˘™*èĝ{z)ż˙ìŠ~'Ŝê)cBe £ñò==úöS˙óÍäyU˘*‚ i*¨*˜ŠĤ˘"?—Üwüġ_żéĝĝû˙s qûŝyÒŞ * „ŝ?àâèRGċ†só=>N gĤOùĤÜOt+2T*Ù²Ó2ĦM"—¨%Q‚u˜•>q Ó¸iJäÀˆf˙XĠ­*hôçÒÖ)Lù>²Ġŭû˙˙öü”ùúßĦÌeòż7U~ğ‰5~~91ċ˙wϟ?ğŝ|#ŭĉ~ÁûáôŝÈyû}ïû€~àp2'ĝdŸàŝî_Äş )˘˙ óÔċBÂÁö·ĜȌeôöÌŭ÷8 rĥíCĞÏjGŜ"J”€œR&Ŝ%¨ċ!⺪âĵù›M;ÛğċáÛIBL2™;f†UËÈÓĉ†hUè€tw 3)%–3+ÀĜÍ×ġϒ•T4Ì˙Àϟ>|ÎıïŸW#LĞ/ ùáÙÀä,|´†R‰M…I?8ñ9:Ù3vL‚ú‘Ÿ‰ŒŞrWÖ^ġIœdëMÇ˜„¨ĝR!“xÛúŭĴ›Ż}/½é%Œ‰âûiH’Ğyġû„R•kÜ·{·Û‘*(ŭá­KÖ0P”Ôí܃O–TÙÚ:í|0"ìMy+9½Ö§[§şG…Ú{ĈŸ7k!6rëq‚Jʘb§´ħïĜ*È%ákµ6u/£Ò‡şĵ•Eà]d†.DÍFjà=¸eJò\8Ví6ì÷(–ëWëC²{˜]uíT°è]ԒàêNƒ ÌżÜ*!ŝg×ñùü–Ŭ½ëUÖĥ·/´îĤYÏĵtOçòñ][ğî^/nËyž ebżĊ.gŝS–$ylê½J3<'‚|ÁÂĤ…$Š;Že ‘$Äá/$òì9y:ŬñµĜíÁÁËË$Ówù|42+ı˙˘ôTŞ\Jv ìŜÀS“8c62 ÙpĦžŜߖff=Kójˆż·ZBèÄ =ŸŬ h˙\b¤E™*4GFÈ!„›§&Ş.Ğn'‚{†„ ĥĜÑ!PıŠ“÷ÄfŞĝç[Ġ„ÄOögFVJŻlKqnlvÌĵ’°”~UOòµ?I îĞAioÄí„Ŭ? nOròÛsz[Ŝ`÷Ğ -!ŭZ…~ŻoUyQoDMÎœ\•¤sB£:I 5ônÜİ6J-Şîĉ—!]]nÉîĊš²nfċcc&ĤĉñÏIaĦN¤óy.[ݏ<ĠĤŻV^ZFêu}kFĞ!ŜĴÌë­ß4F‘µıƒÚNĊâÉ/˜C$š²·˘opy½sU$êûĴÓ.Ëw&MÂvÍí;çVL×.Žjİ* Ci0\:f‚D*햓 +ȃĴÙ­rV÷._lK:Ì­Ía‹n1„….ġ"c–ìż×zµġÎUg§²¨{h^™Œ5êg¨m=I…İêP‹')ˆrWaí½AÀ;fMT0†.ĦğŬ“pMCnnV›Á5á /I,µU¸FûUF¤’ö- '°9ÁÙ‡ž)ŽDG™­ĝŠŞĵiÒ@H ğóîĵéŬžöz;UŞ£8{8UVı ŞİœŽĊÎÛ"Šƒġ+ւ(Š•’ĵ;dë’mQ*ĵ˘R‰¤,·{„´jŠŞ–˘Ĥ€^^Š<u2Á£Äp¨1bÁÌd;,ùp)*8^ó%2ħ5†âÉ0Lâœ;{iɜO~‹ÊŽ‹;Ö,ĞÚĥhûwü½ĠġŻ’˙¸§û?üŞÏßĦ˙7èżĞáÎ*Oƒŝž8ƒ?ú[Ĝ^ ­bíikX透Œ†²s8ä˙êĠŸsÀŭŒĵùÈBŸE~°4V  D",}Û² ĴbûqìŬ‡XAĈO‚]·ĵŭ%›ż>W|ĉÇçï’{÷;ïî<^GŭżXD‰£Ċ^żşŻ{çV¨²İJWâùİTN:–IW´ZĈžŠĞÔO˙ĦÎOšqÂpho,˙Üó”Içxa­0Ğ…•]  'mNnÊĥ–µÜ.Ÿ.ġ$k3•£­Q˘È ĈÜ&İĞyZÒk1‚É4Ż6dšħ=sf"h”)[ÈsX"\$+u Z™zá‰wvŠeÔœ½<Ŝïm–^Ĥ9–o%ÓKN$&k4f%ÑÔèlĊ9­ìÊrˢïP²”kd2芍Àn2ÓRÚ:9ÍáÊç:ÖäZ‘s¨Xó…ĉK„ ”: Búğ³e„8ófjá而¤i%Ş&ꠜ!oVfÂ8tY:‡C´ÄÚŞáe”-c—ĥ˜äġ™ ›ŽĦ˘x Àġ>µ\8iJáSF/!hĤ²sËĈ—^ V†„Ü/7ĵ 5‡€”nšÛ°Ĥ¸AFú’nPtßÂ%á`’¤ħÂHĤġ QE"*˘ĥžt"†G/Tnİ)WSäpê¤ġĴŞ["òéJqĞ%JJ‘LżZòŭ/kÛ·_żßïùŭ˙¨‡ŝ˙úİ[ŝ´‹dŜ†ÀÈe˙¸KP`h6BgŝĤÍòĥƒ÷g†TŬú|`›ğmSNÄÖD3j“,ÍEGéÈlèÍA,˜Vքû×ŜĤçö+ °pÍaCŻVùIe½œŜ‡ÉîK"ĉRi{ ÀàùmàY_M“ñÛ¨É-9ŞĊ‘Ĝ H²†ù›KÓı˛ÀŒ+Żcñ°¤ÊŞ<ġ7VÙí(/˜!s$ûRĈ‹Á² P \ɚ[R„ô^Œ[JĴġÎfêoÏwh6*£Ò¸nJ ûÙċX˘uHž` _—WO­Œĝ’’#j3^äIĠzĉğ<½=VŠhMĊe{P­ë›Jşż› T•ûÓiiqĜĝ´S ìŽmH™íïx%ĥï;™ŽL™D:JÒ:sàô˘ßç8ij/y‚~6yȇĵ´)'‡ħ¸Ċä†+H›·ôV§0ÂîĥeÈ9OËĦñ{Üe;!kĜ\ËŞ}{ͳÈ}éùĦ;~˜ŻqցD°##ß=ĠÁûŜò€ğn6´DàB‰f3ġñ8Á…˘n½SˆaĜmK€”JfŞF:¤ġĴ‰™ž¤Ŝ·İĠİ”~-sĦÏòì?™½ùgùÚ:Dß%l>ƒD‡? s2'a¸ZÙëésj–Ì‹]ĥBŜġ öÉΨIF“NĊÖ „,8ƒÖS+9(Ôe„s‹W+íh’j A­ÄzĴâ•0ÂMéäŬĠwi× nċSÚ·o*Ÿ7!ŸUê‡Yù·3şZ‡!ç}\‘Eş`Œ”2ä×Îêğĵ$\Ĵ]bâ?üA‡í}tp#D;›Ö’YxÁ×5·ÔRñš—‘k>Ó#aÜŻ… ˆ,…UN‰°Äİ„ Â%FÍ;ÑÎS`ş9€żGŬ패EdŸ Z75ÒacĵÄÑòêΏ U"͎#ƒJMKǤgÉä!Ó4’Ài=Önĉów)˘ħ²‡ZçĤR÷ċÈfóĠêï`ĜĞ":|YÉİê"Zžƒ `Àd#Nyġú€„,véü+ €™RĠδŜ\ër’²äi-s6^†Žï–M3ĉz$½ƒJË8TÍë?˒ËSÊ!_r1—e“z–GÜRfc)`bş.!˜?şQšż(VŝÛ(i, ‡WŒġ­iğé³é•\ xތȃÛêIŸE†ñçÍöᢚ&ó:ħd8t÷xy™ıKŽqa“ĥñ`Q[­EÏ“Lµ™‹‚Y°°}ĵ\['ÜŞ µÙ$JtŞÁvÖ!áĝmĞl²nò\{šNŭÀĈ#sj÷}zeĈspÓĥĞùMݚ2Ġ}£ĥğȆSÙŬ_އÀ3ì×İŜċÉd{))0½„ë $˘:İWĤ`ÚĤUY}ĊV¨ißu™ıÜż‘6Gaaĵ˙]µ´rÀü†vyDÉORğ!òŠ”ŬÜ2 DH›vÉOêè``c’=?i­q>ŭô–Œ”˙t½´_ޤiħ/Ò²ğFÌ ÏèĜ²8ŽáÊÙÉċħ§ğc?„͝Ž2UVĆyE6×ÂbĜĥîÙ>nNlZQ&5]_"cğ Ê_…=Q.èw,‘eé³4Á!+§ĵq`X᪈ 0¨+BŬZ›V§ÄGċW2€ż2^GĴğ:ÁWnÈÚ÷iĞ“îRp¸ıEQ*Ih.**IXévΖiÊñ×nĉŻ•îFżmĤÑ| mšŽ3×Xی8™dŞŭcy?°Ğéë ó‚ÙĜ‚ •û֊̎}&vÉhĞ%€ÑĤ‚[kP†°öĵ„ü+˘K6œĉ%Hxâè/Ċ•òÒöxÑ菐á}êKöLĵŻ”uD„Ê÷IVnŠ‘Ħâr ݁jϚĞ>Öä)/LˆÇ‡apKKˆİIemeĥË:ŭKp˜ŸÈċ·ƒ4ùÔ É-]N•ĉ“W ÂĦ6ùÎ)·?oôCñ'B>ïŒwñ•AìÍüŻùµà~?ċ“>Ż$Ħ˙`iTÖe"ħ%G~gœ[ŠòŠÑʃZÌ×>i<½5ˆß7·Ü3ì~—V>ğeŬòtşŝßÈŭ`cŝ0~JiuVŞ1 ˘\( H—F³Fî3xñ£i CE)HETì‰J…²Ñ-ô×i_]vĦĦŒháÄ·2뤣WAħğo"KwçuŻzßz]!¤Iµ}ġݚ3ċÎîÊëċ‚¤ ¤Q-/"¨äĴiKħEĦ% ègWаéò^ĊǍd+î˜bìÌÖL9i†ÔTĥq™ÁZCRZEPhıœÌéKoÊ4‰Ç%ä—N9Ĥ‡ÉÛá“J˜ñ¤àħĜ”ùbëâR̔†uJŠÊC%ÂvUŻuO~¨ÒCŭ²˘5ê}\íßĥ¸é8^iêŒ0i5ZĴ ĉŭ45S™Ò_y†ħ´ÈŬ[ċ2*Ż ˜áŒaÓ¤ÎĈp”€2鉢(](ˆqÀÛÍQÂfD1Ħ$…H€Çı€šc'݆( €ÊA)ß²‡gg^‰ÊóэupYĦÁıq}°Ÿ·½cT“t´”m˘cI’B~’•bIš´Ö!D4Ġğ&ŠGD‡OĵG9²LCż F‡4e &ˆ)IeZ6İê›0˜¨YĈÔİŸ b'a4%Ž)´Ñ a­r;,½ÛħäÑGÔR˜U9ÑĈ”°Ħ$¤JĴÉ5UR"°Á×sь1ɝ(3(ˊ!·ËcŞĦJ"AhoÑEŻ'P´€cŭDE¸ŒîYéĵÔPšŠF•ĠEDh&ÌPñY)ÁV¨Š‘ÎDÀHâ-4ƒħ²’DK…£rR(‰PBR !"-î×&g{·°hĉ9syï;{ökàCÊ2µAĵ‰ ÊihÏŭñÂè²CFŒ'àÔpFĥ°ŠsÛÍĵĉıDE˙_ùp˙cżù˙ÇŝI†˙™˙ĵ¨?ŭè·˙ZMóż½µ˙BFXƒ I .5e„“ĝó[L5@÷ÁI—è‰ìZT‘ló&ûA·Ù,&Ĉyëê/aš:•x”˜íŭv%•‹tÏ×éV?WŜïm%r.ˆĊ½zÀ]ÉM^w7)sÛfêŜ¤žé†‹ 9nb•Ôz„Ò?:•{×Ié^ÏMÂŞ%@µµqĞL¸N›‚[ŞwÁMâ[ğhV—vĥWdĦÓ9·‰—-;–˜Ĵy Ħ}ʋG—™.?.ï¤É¨lœô ĥÁÈëÍLÓË ŠbŒ–2fĴŜŒš‚ĝĉ jvɀ+Ä~ŬĊsï6~î=•†*êà% Yğ.S¤* ÓĊUkœÑù 4ÏşÏO‹×ÍSr[çUĤn„u肖í†Ëï°Dƒžï{.яcGÄ;uhùyMOĊ“ËI爓eޏŞÓ:OV%40PgrÙ¨Ż™Stfo‘=%‡ÊêÈġNşäKq+6·uBYÇf·Eĵ ëŻ4rž(yu ç)Ùc¸q) Xĵ0ÛEŠ[ß)Ù-ÉY™;şİP „ò‚gE—\)ü˜gcm;­#ï{M×˝­á:•jàtH˙…ŭBᅤĤû ĝI[Ĥ‰ùô?ş²‘Oâáh´ßŜ`-9$”2Q1hqzëŬşİĥŬgfB"§/™Ĵ)#(@|• *ç&2™ħU‰žy6ÈşMĞ ,¨ZĠ%…•Aâáx˘’U4 @ +"ħ(t€rD‡JŒĦ)ƒ€XáŒ$QK @- DމT…AKMğħdRİm§˜Ëµ÷zğ5êĉµÌ[4ÌHĤĴĥ$€›Ħ ˜“'Ht@˜KĦ„zއB˜Á€€Ĉɂ,RŠ—˘b= ¨İW‹ -–˙o×íô? ġ­ġ˙ˆ?à£?Ŭ)yí`„AÌĤŝ0WQ5Ŝ7ùžĉr!™ 𣖘7´s 뛯ô £OFö?Üö}vu÷ÚQÏ3›#£¸x¨,ìÌêĥıÔ@ŠEĝÑQûCyŬx΋“ŞĝÑ÷Ljgö‡héc¨ŝ£–ĤĈ A\"Ĵ¸WGĉ`ċŬ6ĥÖ²•uŻ.ü°ŠOËL=ÚŜXş ¨ßŸó¤ÛèóïÜû‹Ü|*pY"B1Ħ@2 İlE]v‹ÇDV–VYL2 !ğĠ úQXa&MÄ6 äÒ²ŽíœĞä³/ze³\ ò³j¤ö$bBn–}TI÷‘•ßÜÊ+ˇŒĈH;ĈŸCQC|ĈŸ~óĵXíu-–ĞŻ^fżÜ³P3EÓġ;#ñTë ‹”'›PD¸‘è…hbħ_Ê)ډ)4L$îëë<߆şQ3u ŻıÄòWs²uê´HžŠĥĴHÂĵíK&"PŭÄbñ3ïiMëOħŞ ÊĴꚁ,†ĊŽn”>ˉ´sú³M93Ĉ }>B3@5 ¨ċ^mDĠ\ߐ‚bez™]3.Ż,û… éŽ=.ĉ+ÍnŠCħĊ•ìÌñô}ôÑK)Ñ+L9·ÌÚ÷]ĦêĊ_ğR*S3"rİF‚eû5ZV(ôğ××ùì‹V%U÷vZC‹Ġxŭ½Îvv—Ñ·HµZ&sɒ—'4Ŝ†lĵ£Â@=´^ĴShš´pUâ\~6Ĥ 29Ž%o;9ħœ™NÍ"²™ħ(êéIĊÂ(€ħÛ4Éw# &Ž%£ĉ^Zż)ÛĵċğüboQ œP+!Ğ<–ò¤¸dŽÒêp/όÍé™FÂsö€ûgɃÓN’;¸ü‹ğ'ôé„ßš`ĝ:ƒĝŸ`éĴĦ³’ÊĞùYĝÖx^²½TĤeNp':ëZȀĈŻ|HóqW$ôkâ M€ÊÁ ħílIN€ ¸f'b•yFŭ[EP÷f:@Cl5ĦhF3ĠY“'ój!Ŝb I§,Ò~ü킞qX]žhy3ĜğFmJäe%ü˘´S[L·Ís­3ÏKpá˘ıŬÎùm*Î:pĈïÂ"yHòD¨:üŭàûá§s[Í2żE`ŝq£U:HŠ Šİż_‘ñġúü5g§÷OĦġùgó×à%˙w£ü˙>›~/uî—úŭ‘÷€á! Á*ŞŞ*­”;–\Ċ%™2Éqi‰‡²É=ùŸ>oóÏ_t¨jŸ·Äñ—Œż¸Ë$çŭ ÓùW–Ħ?ôŞ9+÷’lŠ˜˜ÓéÇ·Qt×6) HŒ¤‚çÓ3ŝ>Z}šî[™Í5ŝßÓı<::ñÛÜĞ··n™sĈôÛ³³>íÖëèjî’?tî_î̙Š˜FÊO5< $˘”R5oßù>­ŝW÷/Ŭżˆŝe›?ê´ßÌÂĈžÒXÌP%K3ëş])–E#˙E@–Kž<8ê–TÔ5.f:+-˜^"˘·"›½IìĈYóŸ;Ÿ^7ŜZôíëëÑÈWܟ‘9.µĝÉÑċñóċ)L˘ŭ/ŽzĠ ÷l~:{àÁ$6Lf½,éN¤w˙–4F ÎïŸŻo•Kú”ù€Ò÷ġ0µk;²´LşKN¸ßŞ}ÛYá4ò/G÷ÍÁF˘@‡ĵ?Q5H0[ëzge%îiÄkÚÁ‡{ô)\ŸW™äQ‰kÀKFç=5ààĜòoÍñI—Ȳ´÷DúNü› M Ç>ıµ›LĴ8Ž™u­£ží0ÊMÁyŻ@SÚ’TjJûfg“Ïëġc6áIĈ]Ĵ{ &$\–+ĵK֛só9˙tdĝ”+jú^ûd˘. ÓĥLÁ&G$=ûOżA(ż[ġ˙+ŭ|ž8fîèŬżşŬnŬ·) %xQ‹Xµ˘ĊT‹ŭu5z²F˒H²e5*´×żÖŒÛŭŭuÉRC’†šßtYğé£o¸qÚĥTë])˜Ê:ÉI85u\^+ht­­H,ğlˆħµÉZ™j™(|ĝ(&)Ú˙ŻîżÇö_ëüöŝ|Œ‰ü,ĵRú|>.k…ğŸâ·pgʧk$N˘ċ^ŜáŝÄEó÷ùròIÓ<Żnë^ùZi¤, Î'Ĉ I%T².²—Êd˘g“K1yg…¤?ĝßϗ/³ŭ?é˙h[ĝ‹§öa›î‘kù1¤Ù’ûDŻĉí‡oÉ9Ì:­ÎÈrHÖ}ЉĥĤµ]2-ŞŸĈĈÇçvcYd£@íÚ~i>¨>@ÈĈÒ|ñĊtœ9òÖt~Méôq4%ô”ö÷=ûà‘ôewïßÜ;ŝ³KQi×è{àĉĝ>°AŝÄ˙ğûÎÀġx1Ě"š˘š‰€½cžßê‘Méüĵ†x$òŬ‚YÛêç”ñU66B÷…ŠfÙóèžŬ0ƒ|ĴuİŭĤ ˘7ÈóáéÌgᝲti;AMפġˆ…­¸“Ë‚{oFtëk5¸h‘‚aˆ"F 1 *UŒ–XehÉĴ–ŒIŽH÷×Z'[-ÔoD&µ-$‚âä29³Z³xŬކġvw|L9zŜ­%œ]îfŞ:ÖKû­Up u=fäÇ´+y5İŝÀèè!×ğ ‘ŻPzŻ'Ĵ D´2ĥ2œ@·3dd’…LĤV)!%3äß.ş¨ŞS Sz[ĞşáWë ÚhèµZı”œĊZ™Ş2£"ħ)•)PĦR³†&(Ħt :’tÙÉATUQy,š™°ÈQ2˜Ë4‹ÒQgtpóy÷< a×:‡Ş›ANÉ †V^}–HÉÛş¤&ûħŻ6QÊod˂Z nLË1ğöîl=ú@šVR„P€9ŠÄNÈġ <‡’zş\êcĜz` Ì>3“Ž U`¸h0SlvÖ Ċ—´*kÁÁÙ3³€wêJ%Ô&Îé'hÈrğïé²0ÖĊxú"";Hépè81ĜG‘ĠóĵÒ‹N+mpHÑ'Ù0Y)°Ì²o–œ‡í¤Š}Èoné5Ÿ6^µb˙/ï˙D?ĝ¤˙Çŭ”ŝ!ŝD?JR°b§ĞÀj˙ìŞ1í‹ëġ›w°™œwQ/Œcb3£ŬNC<ŒÄ§ë–&5ˆ£ ³ġ Rğĝ:ƒMPWžÙ=ÄTyĥnjÎ\GúBŻÄ< ğĞf½_Ï3™ÒÚ·?)îĤĥəJÀàüÀü_ëŭIÇöĈ[Zϑ<p%Ul8pSH˜~VÓ_ߎ°…é4hUû8qĵ;<:w^`(h& yB÷0î6‘)Ĵíç/"ËïÍßwĊĉìĈ!%-eúŻ:6ô?ĦÛ¨ŝĵ÷ëò^½ÙFêŜĦô20Áá‚9<PĊR€˙£XĞ Â’İT´E,Ñd‚”̲GWÈÎX*Š&hАúàr‹$zŞpm‡‡YĵÌv§ìpkı90èaƒ³ġH‹Ĥż?–ÍC&Î'4 ×6ÙQj)²'˜ÑQŝI?BtAżÛ_vóô8 VèeµĴÁÀ_ó”ÂŭSQùrQ÷,^ v4½Ğ›'ŠšÀ…mĴ}ċOŭĉHMAŻ‹ñ”ïĠ°ż† v{Ûc)IGIĥ–äŽZĊP{—)LІ#qQG䔎I“M\j4'œıŒÈ€í<ĵrĉԚ˘\¨4…[U%ÙV‘£ˆ§…Cùòx5†à˘ N%Èşĉ:‡h)ÖKó3&‡$™G݉ÁŬß;`í‹ó> ¸)Ɋ§__Ž(áärgûM§i"˘Z”Żl4ĥ°  Yf0ÀÇħ˜Lİż¨Ç"lNMr§÷t¤j…*IMà‚j@‰<³éĈS1M t%p$Ħ\… T‡9€ë jK#~ëËÓG—w] %¤^š#Ë ZD_äkÓŬ9ħ=¸r<ÑPPÓX$²b¨ gĥÖŜŝ >ÏßAüpNŝéŝĊ–­DŠÔÏì̒OüĴ–èÈÑÍ`j5eDÏĈ ĦûgŝqÌi¤NÓVÉ!z!K+ñĜÉZ,ŬÊçŝhFŽBIêäC/ŞlK+üßVğè=NXĦİìs’ˆ2=Shòڝ÷‚Uµş3Cĥ Żİ.*âٚ.óR$R­ °d4ŻT¸ /Ÿ·Ùó{ÜĥѸu3ìz!s VÖdWn\tAĞ˵0¨¨îĉÜ‹a9v†\ÍÀfƒvb­6Ö­NqìÈiz‹İàáŠ=ĉ=EuJž!t&3!Kc’ñ1fĊ˘e„Ĉ”}w³ÒPìĵ.^.xĦ|p/Wħ]°€;ëà‘6vĴà>„Ó“C¸O§i%E&—äÔXÎêÓ)HŻ;gÑ#l}òDZcQÍd(b*TŞî 6 sµ­é)8Şe'ŽvÀ̗Ƚ?Ûöŝ@'÷Żô1?‰V!qü‚?ĞçûFY£I‡vZ`$şÈ}]Zğñ÷ëzí£ÇcCá .°`"ÚŻFè'‹Ċ7ĠÊiÉwé`ï_KƒQĉjœ`ĝ*Żr:JĦŠ™ĦJE(E=euˆ@È%Rr ı!¨È;Àñ;”Eı$‰S` ‚t„\!ċ .C%4 Ò¤ŬN*u‘˘€Kä-q‘P׌W6JHœJ TŞ5B0"ġ•ŭ…ĠJ"‘PhS{bK!ÚÑ!3]dH şBğBGBʖÑñ­˜ĉg.Ž;tċ'MÎî¤ıÎ\ç-ÍÚE×w:œ†rşmjè4ƒÏ(˜à€8*JĴêjœ£6[%ĝŞüítK˘ ‰š’,L jĜ°`Éa€!Ä.‚¸ÙkÏI:bÍÉ(ÖJ9Qş˘&âkı¤kô_ĊÇjánD`Óş4D‡£¸lWŸ³Ó[š…Ĥ5§š+•{˘uÒĝŽ>½ËĞOW0şÉ0ò>Aéי).²uš#¨UƒïϗŽ|{pŬOG™ÑĜí’]ĈTL›La†ÒÚöWIÌ0™)£Ħ0ÒfşRHË (aĜLĉ“hjĠH¤IœS.ŝß5e·ğàÒ×Ĉ5ǨĴ˙Ÿĝbxżóaʛ3˘İ˙ )ä³ ȓRôŠB¨béäT/³ŝ " âgòQžŻ2ˆ‡/)Ìŝ ˘gµħ›yĜĴı0UİŠ’ÎÖ)?PŸ;kÖŸ+³‚|Eçĥ!üxğ_ĞŜ¨RS‡‚óË$y˜é­ĠñëúùeQ$ –½“˜äGĦ—Ħ`˘ĉߗşÇSÔÓ³U/âá™möqİšà„_Âĉ„%Œ'`ĥòpqµévŜŽU÷ğßûࠗŠŸ7íŭµW4Çrżĥšs@ßrèȍ~Ü7͟=ƒġŬd1˘ĥŜTŒ!ĊĝİÖ:1äwœÄ™hÈqÏŞ×ÍnFŬZŽyżûôÎüĠí`jâ5:ì¤3'¨Uĉ#?°(˜ö…2ĉênŝ†rAŸ$ˆ0Ĉ!ÈQ >áLÂaOQw‘XҞ…+_%V½›Ĥƒ¤ 30$BGà#(jtHœËŬ4ÍW'ŠHŻ€zӕÁ q‹-5 –½˘FÎL9³•ĉĵ“œèòƒé*9™^X“fĞż áÜĝĜQKK+ GĠĴHy/ß WİëÛ|uë.§˜ıI‘iϊĤ7è5VψvŽŠ+|’ìò”Í}mħ=MyäÑ*ĵwrÏ.߸¨z•’÷/ÛÎz$YuÌĈìPÓ:÷§Żn€’ŽĈċÙzX³™Ġa¤+*·q—PߤòJÛ -3|Ç'£#óʂ>xÓ¤%I`Ġ”ĴóG%!ȆÍoNÊ^óa³ĉ3,:Aw]½ zŞ9IŬ&‘—vÁ³Ç~€ç›ÚÏ.œcÛħXóž)ż6fz%ı’ÖÈÏ_VH™€ïĈ_ĦÌÏèIâkÙf'+l×PG ïtĞ  ü­,gŞÏİè3,Á•PF6{EK$1şCM3úÈĵ>p!Éëĉ#;-"v/œQħ!N'é™gkÂ_y<(ŬUbˆ5=,眉ƒï8ş ŜĥïP9ï Ô´¤¤ÚĵG€çÒç ¨­\’Íß,TÀG)|µÔ¤›|-4ŽĊ†y—wݘònç)¨z-ž•6Ùn3"$ :ó˜ïœÑhŜ9[Œ6"sÇ뀜¨ñ3xâ–&,ŭíà\É"ñxŠĴ¸É…Ôœ¸Ñ°ál) I‰ŭôÁĊ­6!ġsSé‹Ú)1Ż#ğ}µ6074„£˜Aóä(.İ˘ÏtÔüT9ÒÓpŬż[*ÜeÉŬyrû!á^덓ŽÎċŠ{¤‹4‚Ç?50ŭˆ,ħëû~ësÓÇ(;Ûµâm~×dhۑ°’BêiŠbùi~-۔Ħh ìS{t<;[ˆĠLUôO“ÀŝĊĉa Vœ½ĥ8µñÈy âÜY¤šÔU‘“nÚÙ=à…ŜñguĤí ëĈĜŜȐŠŒïv£nYZ7Ç?;ğ:WÁ{ÂîÌĠsċĞwŠ˘RáÓ¸òrÍjŞ:Ħ­Â³7Ô#jdUÊĊZú䈪p޽µm§d ,íe>ôF_Y"Cġ]Rğ YÏJĤì^Ûo–üˆ‘>0Iò@J!,„J ¨OaRŭğmÏ·ħ–™kÙ|£ôŠΧúz~˜Jüi3dvf";üò.Ɍge^çĊ+ĤÁ *öLŞ„ZaÚ/•LÀA Bâe†ĦFÔ*Ċ"eEĥŞeeŒŽLÚó’³½bBäĉÈ~èCĊ:% ñ3SĞ zÉj I—IXtŠ‹˙o;êà!9ĝN_Ÿvzi—À˙H8ÀRz7ñ•3|][×#Ú=ûùç_ޏ5wżd½~ĝżâü“ù2ż İ2*¤^µÏ*^ŠGL£ëğŒühµRòפތPIĴŞ&M0‡ĝ°ĵ$ëëíçáߖüü{:Çîé$’NO‘)”ùɔíR~SƒÍñéġ|Ŝг­×#†HkêCÑ?o. zח–iyÄeÏI"Û]ŻŻ ú~Żü§öüŝ§ġŝÂÓ˙#p6ġ;ü ?Ú ĵd˙òÙw2ƒŭ xWñuw촙+›µvπ™…y;ê<¸ŽaɂÑĞĠ 6|~"a²M“ó,™°ġ²Ñ­ö}ŝĦp5ï/™3Ô,ŝH”ŝŒ ĝšÓŭŸïì>ÙOùüÍùTü4nŽëÏ'Ŝ|D´—qlpŽ˜RU=S‚’5˘pT“ĉù/jSŭġA“ ?t½V4:7Óv\7“1ğĵr­ràĜfï-ĠˆÇDˆZ^eŜCëbé ôŝÑ|‹!÷zYáí†:á‰ŭzŝ€lŸġ^ŠlNġ ĵ¸ŬÒéĝ|9|OĞë•|›UöÛ<ùÖ'Ï\òĠKNôŜ˙lK˙š˙½Lb@İLÏŭ|ĝz@ü?²oߖµh¤ïàp½Md{ç{#*äŻ "W]ÍÄ#i›,T!’Ŭx9€÷—h(P'Ĝw§ŝìbRYtREuÄż>ŸE‹Ċĝ‹úQ4\Œœŭ{ŝ_íóŝíëùŝPġ Äf¤³µ¸x÷ċŠÊٗŻÜû;ı÷ûvïá7óšóÛáŬ'dfµK T8KÇËñ)R†:ó‰ŭ*'ô%àG÷Hnĝ)IWËżéáÛZżל³ìôÄI"e?°ROŻÉE>RĴ‘ƒÁóċĠS"1ŭr½e’kFÑ£mżż2˘(’ÑJ&IHŸ—óŝúŸü˙§ġ˙_ú÷ çŭĠĵ!oú¤™ù˙ ĥÛvpք럗í“àT+€HùúvïìkżÓyëéÖŭ˘=2OĊ”`búÈš§%) 'úËĴD/-Ŭ™{ĵÇo‹~ċwĥĥŠïÇ[HÍĠÜg³E‚&[ŻïŸîÚĝp˙cü €A>gòŭC€üï…ĝïùż´)ĜîáûşÂŻÖ*<èüg}ż*ŻÖÉ>OıîıUş>”ŞĴ³ʍuĝ´µTħ´›ç £î’ĝZ–*UCv´-Â=ò{xWÇĈşyúûݧż_v´Ĵĵŭ}wßLk‡ĥâŭñE+ŭ³üñV!—ĝÛ1ĠËôŝĠ}aw˜:­M÷Ï“´bXÓü††„§ığĥċr•ĉŸî"<áßc=ùıCËS›F7~Ġ%CÁ˙‘ù½r&'k™‚È „ĝYĝާQŝL}˙c€Î?ˆRJùYŜĴŸšÙFUr§dO÷T9öòí}ĵ{y<Ħ³=9šÒ{y¸¤q%UR­RÊQ“Üĝ íPâ3÷ĊC)˘| ĈWY_ċ;Ì^[%ˆ-܉GӆmkY9Ržtŭ’%Sù·#Ğ qĞûCİÊg+bçßşdú;•£úOŒ—ëá-9•Ğŝü$rÁŞ;'ßĜqyR§özÏB0·A?|$™½žĝŭž·Èèàŭ•J—݇|‘ċ„ÂN§’KĵIpš*uGa‰1ˆí5Rò•T€uÖı“Ào_ĊġT;›%X˜Àú,-Ğ1 ›fJP²=Œ †•}üûŸ™Éü^ ĉŻÍ˙/”l1ëŭ²ÒÑd²IDC×ġW€”8h‰ôCż~6 fıggñdŒJĊ`ħl£2&²2I"Ä.CN•邝"ÙH°ĥİ:‘ 6&6' (áĈŽ—šhUKùĤ¸ $ÛMLĚI&µÒ˜Í³V+\×êŻQXÛù[˜£ ŠKh×Ç4T†HĈAëWŻZSY”°Ċé a R !•&E˜Pt+ "½eÄ/i:´Vƒêë'“ çì:ŝ#¤*~AN9ċžPšÑ×3ìI‚ò&àX‚hC=v&Ž qÀÓ- £;8ÄDèÛ—ıç4Y%¨ÎĦ!Z#-l…),Ó3*T›ÚKHth:ĵRĜp ‡¸f#Ԙ^ĞŞĈ—ÎFSĜ"^¤ $ò,ÄN+ĤQš!­I4İ)Ŭ†›™D³ĉÓ|ĵ›"¨>ÁĜÖżÌ¨!tb<…œ„“ñ}~}vväê÷v!ä:=ވòj†‡}1ÂCד ¤kIŜĈ#Újb>еUĞ7£aڙzI­CŭÇóŝş\;ġñ”Tâ8GçŽ]ħ<ÇYŭĝlÂâ93ĉo͔ ;ҟóĠ45tôµgóɔL°>5^nGÁ6Çŭ‰{­ĞYŬڃ‹é“ü~Û6:Ëx.Cuô_L­SËğ˜Àù÷ĴÍH8êÌ%ÔĞ%>ŭuéÖÎÉÉtÉ[%JlrDTVêIF2$"Ċ,# QnO;֌ĉñIu3-ĤâDı1ËÁúʗ9§ĞrL†³z ôëzòk‘­}u×ua •áÙżvs|gͲZÍòÎâ-ÏCaO‹C]7g,ʹɔĝĤŝ·i9ô—_nJµêmy§Ŭ–YÚŞ&s•ò%Î3qgcÂg]’UÓO‚żnİĵ#ÑAG÷wZ˙Ò,R’ġF”ŞU$™­iöŽŬMşĠP‡tRFRóïXü¤€ŸÉšyqÙ]ŒŻĊ6¨7ÉıÍé³²)Ÿ‚™Ô–Z÷/Fф' Ğñz.8ïN½­w~óÒ£iĝ!҈Ħ.‰ÏP³Î+i0“ŠGo}ÓÑ´Nì½Ò=É'3šslÛwúX‰ĝŠ4Z,Jž.Ĝe"ÓàğÛŭGNEIlJğN<½ïĈlċíÈxfËN=g‹ŜoŸŽĉ“ƒàíwMó)фèÇ§÷Jİ^ü“`÷kŸX2ÑùŸ€œ‘:Ĥ ÌûÏŞjĤ‰ò着l^F>Dg—éHÑ×HËıÔ*IË"1JŬ8½­†“âžÓVĞÓ]ìâƚÄFëUé¨ŝ{=CŭOĊNvϊ%"~oTYExnÍ3•ŸÚ&z/e;Jš7³ÒÒ{Keî(ìÓż“G)ë‘1¤{ŭóƒċÉGFû<;˘NÉšl~UŜ³Öòë/%‘ROœZžÏ³ĵË-dĵ ÑÁ\ïNúLȤ¨(ëşè‰?İ)+˙ħ½¤­ïW~I4ŒHS{(Dôħ;že’Nµ5R7Ôp%'dçŽ3â¤ÖıoöżëZ܌IQEĝŝöfgŭ?¸’’˙CI&€ëTQş,?½Ŝ³…Ÿêœ³ïŒŜšŬ÷™ eĊĞîóG†°×˜lÈĤkÌq,¸[awur]°ùÉyÔ œĠéŬ6Ú.ÖM·lİğËĞ2ˆħÍk-˙^ffe°q×/"^˜BúBŽ÷-w™•#…—C˙q‡Eçc{ è*ïrĴùCÔ ĞF[œğ†m£aÙQKÖċ—Wz-–ñü’ĥ§4<$"ĞDı·´c•HcĥŠ“WÚ" FĞêTŝÎ^: 0… „’%KJQ´ ^¤ĦiêzoÓ½ÌÜŞw Û^ÚĦFĉHĠbÜT¤:yß7™pı1Ĉeĥ pğ:ĠĠ^kX8‚wž-YċL$ÍbjG‰3N ‡%mG5cl˘n04镙e´¤K0„VĴı\ÉXTġu Ö´bĠ[KNŝE-fĴÍŬŬß1--ûv‚• ’¨·×܈żĥ]âmP;ĵ È˘‚ž²ä ˜+ò”<ú`şç).LĊÖb3AnÉ{tàì9„FU¤K:ÏWùıBlĉ›Ê7ĤòNòĠ·ÄŬEÈn˳ I’ŬeêäÇn÷¤[I—Ĝ”µM ­ÈŬ#nÛ.JŬrô™%/ÓË+Ħ2W—§ZÑ­jèLVfgığë˜ µeÉWn}Qˑ ÙݽBzÌIŽ&s,ÑgNËÊl5·YMk[pÑd·Vû.ŝ³Ĵüšŝ?/͜e‘ïòİä­7 §—.JÙylı%̕´Ġċú<ŭúÍîBâFy’ğġfŭfŞÒşbhj1ë¨^JÛӃ;c™Ö䄁:!µDµ‰êÂ5}¤Ĥ5ż,̅ ĉòÌäùžÉ%ó™tufq >[(iQJ¨àùB•êÙUW˘KñpÀ䄝Ŭ~˙İĉÉ_Ÿ^^c<—5ĴÖħ²%|–+ŞA=–fPÒIw”:e• ŠR$ˆ U~µFá!pU Ż¤Ğo0ܚPŽ¨OiŽp†ĉß_ PĊÂaN ĦcÙpıĤ÷&Èû†ûL-ŒWêĈ•ÔàѳSéñŒMÈÔMŸ}_›ğç /2Èé´ÇZğZTé·5%hÁĴ}½::ıU&\‚uz™sD—ëfì‰ÎYbm 4^ċ2Ôp£ÎN Uq+ÖzV‚Pژ\î2v”pĊÓ*MKĴˆ ÌAM·M[‰mù/_SéQgË˜÷İrkU!^0Â%Ò$Ğ_eˇjtbˆ§—™Ġšo÷šqĠ“½ßMb9w}³Gı5 ıíUtĊh3ޤD‘ĦŸĊﴐ@.zBŒ“ŜôzŜ‹Z÷ çÍs¨KŜÛÀmž5cšo.(´&eÚCË>l7İu(BĵĥĈPfDYıêċ7éëz/xBf=>\½xó{ ëšÌ7uï­àáħm,’½™ÓùYx}R1œJ³Ĥ9'H ·Òê È·µW †tEL]Ġátĥì³(Eï*î†Â6mFċ;}w‘y79ÈfċòoJD'š÷š9 2­ !ĝêĉ†Ò ­ó/Ŝ­ô˜\šĵÍı­\B\›–œËn{'i:ş½×I{‰ĞšVÌ+™ ΞX¨l9#ž0Ú£ç*:›çg쎵/pßt:šÑéS@” š;-›^R ֕ŠöĠgmôùáe‡•ÖQĈÏáR-aqĠ³â4íĊj>â gœŭTZU7W§,˜è.ÊÑFÚĈĜ1(è(T7t*qb3~cÖl´ ) .è7UŬJ×6VÀèİ[­À2ĵá.Ğħî_Ròw×3=#­ß´Ç^ôm~Uè·6”énápË ‰ ˘g,˘KLÌA™{1ù&óue&U8@%'½Wù×í\Â!ÜXìu=<ЉäÌ*2ŞJƒJµF‰É =µûkÖl:<;@ċ˘áPĝsÇhE¤ÑWhŠşë(MòÙ)é4ĝ/\9œ)Ó ¨?Ĵ–6³½˘aâ_’ü ²ŝ’ĉÊ7JŻ}m}K}ŒŬñ&Ɏg—šuá·/[Ù¸n:ye›0láÉ]YÖşúĠpÓŜû`Ġ&G=âĞĤqÇ<ݧ!èñ-ßÍ÷|<mBİú˘::Ğ, êrŻg֎ŝ¸‡ÄîKĉû>7ävžžDטâIQv'ŞÑ+}WêÑŻżZ°ÏâöĠÛÊáïÉJï84ûçGJòÑDEÔ¸÷*= ^‹ =ƒ5Ş?èŠĞ²áˆ\°ÑôÄ­3[˜f È]ÙëĞ3 · œ'Ífbhܸ‘³Cs.91x9ÙÎù[Aò灎*G€÷XÚtx;QŽ;!ÄÓ£apñB†,5‰10’e.I ¸NS*ÒfÜ-éIRŸ)&;e‡{ç,É]eŝU{ÚׅŠ[àöí3ġcŠÖĦ´‘ÁS–]²úÒğ˙lKuT€OġQĠôCù{\Ħ2²êvô5ë*ò‚ħ‡!Bà.Ì Î‘UD<Ó|JBġ(ŞĦhDĥ„!p$ì³iŽ×(œyş_¨XùŸogÁ×oÙü—̏|1ÌÇ )h*ĥĞ`H}ݘúۊësĊŻÖ …›•šö­~ĝ{ż}İÜ5Yaj "ß›şĥrFĠíўüŭúżYßvûô˜ja¨Cwħy'Ĉ§j{87Ï4”İ;91ëU´>Sċ÷e„ñh›R£Hàğ”Ž sZˆ›œŭw2ÊoÚxßÓ/EgŸ¤´’{=}^ħzzÚÖ^‘zžîıgÏ|dz^}‡äywîùĝ#;áċĥuÀphra.štß Ġîċ$j”LŜ½fbtn4QÑê¢TUêçZiĞ GƒsŜĠUìç—ΓuĉŠˆ­ŬÂ]£=ŽQT—QëŻFÏ.tÍ3ġñ*’Q֔ÍĊËIC}IBÚo;[)Ñˢĉİĝ§Ço×vÜ—•ÈÁŜœóİ,°ë1#ĵdĠ3‹ĴĠÚÔNY2jë…Ĥöjïlß§9—e˜ù÷ğ=ŭ>ç´{°ĞȲMï|Ê>xgëM HùİS™ùjö•˘ErˆâĦ78Ê*¤µücŜ´uáÊÖŞŻv~½¨µL½Ġ£ÜMĈwU™ÄşĦŸ†¤óĠc>•żvÑ÷ZFɺ骀‚&1—‡G„ìĠO7rc™œĞĈ>ğM/]*ûìˆbQk.ì–8/ÉTċ&*/×Óż›„ù¸ÇÂu›ÙŠİ‘TUZs4š™ ·™%5“·ë ÒœĤñ=ÏowĜûŝ˜ğŭçY1?ŜĦWtAAšÂ ä lÖ̉˒%2l Ê TްO݇SçŞkU˜³³×ƒa'weĜŽ\Ĥ$şŞĞjZU-˘ÈÙO>/uOÏüUTĝχvğp·o>SUê™E3ëÑÚKĝœà;ê}ĵúÏŻ×áùyʤlsòöW Ó³>dŻM]Í{–Tµ­X0’ 1‰ aT@<&ò5ÓXĝ'½›;ÙÂW³É4žœÌÛp=%û!ä@jWÁM)Á*nêZ\b;ä]1˓zÇâìœ*nû=rhpO°÷H9‡ñLdŭĝû/gì‰èxß3§ÒCg͕zjÜ­ôŻbIPUU÷ŭZ/ñMQÀtÒĥĝ2‚Ó0ĠùDG£$ Sŭ×ëßuMSœ‚ĈüÙtJ„+ŸÖwaákù@5bş4W_è7ˆï€mò „yĵ²—ŝ (Ĉ@ĝhÑϊ² .ċ‹•6• A°ô~Ù° ‹#!`x†é³Zk3Z–cbÓc­2eëFH[Áa× DĴúU PĴA•PT UWo—8Ò.)œŞ@ï ƒ’× ÎŽ$ύòxŜó™´Ħ"@\cHpéG/;ÍîF‹"`|`ġğÈnñ‡w29¤L²ĦâpùöÁĠÒEé%kJ:ë‘(ñ jÜ@›Ìˆ( 9L–"€iudzJ:â=dÓĦĤÙL<ĉ˘µ”_´9\ċÎĊ ³ÎΝí!ĵ@§‹fû݊lóXĠğÀ½ QÁ·˘pÚ`ˆr ”EPdĦšH¨Ï5‡Y7eı9ÒĥĤûÒT;ÏòÏ{5zÜîöüĉÍİĈġ#‰ÇF%™rL‹ËmmÓyċ–JşÉAéß{ßZïü–ĴmŻ$›ħğLeŠ80TŽŜè-8”&Jh8UZG"f&"öĤ}KnħdĈħ.Lğ²ìcrZ-c†Ğ„áaġz¸›( ˘¨ˆ:BÀ.¨ìĉsîM§ ½Ù­]äÍaÉ3w­afn÷­—­odÖï Ëq¤ıï*ÌuzxMı¨qŜ§6qɗŜġz˘X3”w²žšĠW†üû Ĉğîğ„oAÙ7("Itê³ËĥŬëŬ÷N‚İêjHŬÔĥKZt^îbĜಓ­Žçä“;I7Lï“ÖB7M˙ \߸•Ş˘*˘kE’`ôWħ­SE}N†Fß#š×”Úy^é)£ƒ).ŞRó5ïqÍV|”îfÏ<˜e/&Rˤ^*)úô3ÌR`Xú€qô<0ŭÏsRùyGÖĴŜï§Ĥˆ‹aˆèщu_àU RŠİsšġÛġ“)³°“6˘R¤İä8Ĉ~ŸUHê²|\HHš@ŸO˜?]ŸÔ=úúĞÈÂEÓÇôÎ] A/·–yĞwUÓGsÙŜÉ&é6ÂK“âH’ˆS_„ôwhŬIä²EÉıġğNry4fNÛÛ5dÖùež&u)TĴ•3ŝmlŻeB–·›ŸÚññ†$ˆœ”Ħ(˘,˘%PT „II@ Hҍ(4˜ÚÑUcQUERU†„€U"pq9ìiR­ !(Ĥ]üÓH‰R(…$Ĝá‡Gì &—•Mŝ ´˜v2`Ċ¤Ä²ÊŻ]), œfŭ36œY/”·) í÷H÷<ÇრÀôd/öCŽï.ˆ…ç%–Y³Ó,W핃jç´*<¤ĵjSW S:ŬI£9Ûlµê™z.Ŝ“t_)ÉÈï\g<–oΙÖV[,¸öç”5ǚ,ˆ‘/.´×ĜñPĦÂpuonO¸âRŬĤûj’%Ñé*vôUcĴñX³wj,à˘STMžÇ?JİÒ9Rİ\²O‹‘úS dΜĝè)ŭ>ğè ĥ1ë‡uGÀI×Â'iWp @ŸıĠëvImÖ8ÉĉŸ ÛÖI$'.QèrÈwíViànxFòRf¤l I>STŞSÉNh[iŜuT7R˘“‚İ|Ü1îÎÖ·kL^ޞJO Ë#dƒħžÒ>ÙĦĊĈj^Cşö%Ӎ7b?uüë *D÷È,ù¤S}dÍî‘á´÷9NŻUJ”)R2@D‰£Q ´TiU%URqııÛú_)‡M\&î[“ÔzŸÊ@‰*HIAV ÈÈÉ0™”îêI)’I‰˘™›, ÷ĝ!ú3Šn:sOèlġ‘à ႘@a b&…†.(<â‘1*ëL!JVžŞ"ŭïdĝ=ÈĝsYmġúq/ôĈîÚÖ^÷]ŠZì­Ùĉô™ŻÎ>?)aĜ³j^)OWq˘×îI‰ è§Îı>}çÒ/~ù;Ġלàù7Ri•R’pT…—Zˆé5ObÎğF´ĉù¸é'…1ÚÖĦı-³ċĥğ“â£ÖĠYŝž+'(ùıáÙBŭß ĉ<ÑÑóšífSLı%Fĝ‹ißçĥ|Ŭ9˘J+˘5zQĉ³` k“C°¨b{ˆ“HTJˆ¤@UI'6¸’(ŭĉä|$ë3"“ħëòQ;'I&ɗMOy„ìè9ÌL²6Oı¤ĊÓŬ$ÂbxÏqÁïb?t›ŠDÜòóû“ÖË83öQgŒ­ê'jŞURİTŞU|gEŻŽRÑxKTċc–#vÑ÷¤!UıHT‚ĠdĦŭ¤“S‘„/üàġ^m[ésmk†9íĴͨ҅oǑğİZċ^Vĉ#´c’Cġp.ÚİlE0ĥē×tà&ç9;¤·4eĊfP-‰ „e’żĝ˙ôëŝÏùI˙½ì˙ÌÉ˙òßüüü…%˙µ}Iu˙žÎKÄ^Sa?üÀèypŻÉ‘CqFžÁŞADp-q’•ÜìĊ[z1ïjc WçşLô·’-ìŭÇxş%ĵ5)À´Sž;&]cHßOµXĞ\PÏW•Ħj„àéa}èJ;ÜÌdžÏı-1&“i·ħ)µ'Ô^à<™Ñ3Ġi8¸×j”´ĵQtZìÜhÀg6Ne„ˆ·•ê‡N( ²Ĵµ²ˆpËËĵû(ĉQÍ~èJĤi:àçO|èjŬôó‹-Àߗ„ŻÚûyE…í%ښԙÑò6kÁg½;-ŠİOxO[f‘lRĈPǜ ¸9$ ëk[{;OÛäÏM¨G–l z“’™†ÊċH’ÏK÷=&]àecm[ôjLU‰?µŠÛ=î1iz÷#ŜƒĊ\ŻbwxŞàcĠ’À{S§Ïa6‹ĵ(E†Óẅş\öô&ôb@Òu•Z{ĵw)ۏ{f”>i7÷¨ÁÇ6ĵÌÀž¤Eq3XÜïŭÀï„_Hrëî4‡½÷ı} (ÇöLT0˜¸ëµMÖ¸ôwtaĤożAuV{ğèĉ„edÉ(ŒÚpïwċ⺨ ÀŽÙú°êĥÓĜExqEoқEë&;^v"aδŠL4uĉ4Ò!ñħʔ“Â%ħùœÇĥQUóÍzMúÍhĥ5R!ÉF>'Áò#ĥÑĊaĴ;çġöxRÌ İ²‚ĜšŝïÔĤ[ĝ€BïŜhĤß"&È …J@ĞB<½ş–:ÍÔtİöı4šËê!İ‘‘c÷KäÎ(ÈżàY‰`ßA‘.2&íYû6Á.-iŭ…U3>Ù³D$|OŒ’ş¨Er-r„„W"IŸĵĴ<›ççt‰UR"°ˆïŽħ:°LyÄİ Mó˘ŜN ÙċŜ’×ŜĴżËML0bDc @$Á3¨5úĉq)FŒ˘>­ŭ żDFjÒÛʛJ|qCżü‚Sˆ–Ž‘È„t#Ià÷y}{ÛdyĦÇ7µÏa½Ê_ré´,6š—,ôÊ!— ÇYµê\ëÚ ŬJŻ#Ìf”e 9V(Aa‡EGġ_nj°f“í/ÓSKİD‰"AU_‹cÎsĝÁì-h* B‰J¤£òüLġGÓËÓċġÏŻżëöùÇŭ ùZŝaÙéQù_é(ôŭŜİFe•ûnïVHDĜÌP’c^á#ÖbĤ M Œo™ޤY‹ÉgÈùâIFv#1…÷³YZ;*ÁEIÀŝ@]×½O_Ŝ)_ݤ}\żÄAċߢĤpBĤÛH·™f”×€ÄOÈúş´Uóˆ-ç€~ĴŬż×hĥú5{ô·n­qUĠ§CX_;ĜıÙĦÉ>GSCׯ Ĥċ³Š6Ħĝ³Ÿ„´ĵ.êj‡zž/´ĴBXìŽúVÇ͜QÚûûëßҜ+p9HLħ_şé>”GûE6TâReôIÌ? ùŝz×Tvú ß½aĝŝK?Ëñki~^Šĥ*g}‰Ö,÷Ù5Ô$I­Ġ°aĠûSŒÔD>e=Rh3ƒ´@_BĠĤIC‹22âAÏ-ïsĞĈ¤” `ÜDš$"Ú)ĈµĜÉô˙?;ÏíĊ˘#–ĉ-n(×!Úî›R•9UU+í]‚Bèó™éGĊ0gï3AĝâGY¸]9¨Ċ2\îyÍġœ“,…Ô-ĉfÖñĊHêR•Re£2Ö $f¨ŝmC ÍER_,ĴDK›°a“2²áÀh2ĉÔjÁĤù ÍĊŒ,ͅJĴŞ•€eYÍ2Höĥ„¸Ér3–hŒŞaÄh1ĤLB› ƒŝ‰­‚ĈDO@àġ{Ÿ™£Fa˘5x­LĠu%Z$(SüäÂ^˘*Ò1Š)K€µ$DQMµw5šoU £Hài燂cJlएUҏ lïĈƒ',(òH/P8Né1ĝğ;Ş:/0ŸżH“ŭĵ#G2š_œ~z)QUJɂ‘‚6Hbv×!š¨ "˘,Sä ¤Ğ pĥ;ۙɁ-7Gڛ˘7á²7¤Ázıì.úÏħ@äĥ`a†fÎiÀÂy°Iy$­ŭw†éFı .÷ŒôħOú٘€ñ:òÀJ€ÌqGˆ]àm‚`@ğÉÌì“] SúUToáäH³(œé֊¨µ"P IÎ`ÀÉÉ}á4ÛXÉĦĦj¨jPé‚àjİA܊dŞd4çSœş&ç+•ğş¸cE—6-ÉĠrÔDUü°áu×mĴmĠÜ!²c|\5{ëĴ“Ŭr’Ċ”vàŞJĈ ŬϝnQb(Û–sĥDÑQ¨CF5€VfJS3Qİ„ıA+žêë܊K›„ é;\ır(ĠÍÔµĊi,1*lħ›Ŭ]°ZŒckŬ#Q™šV¤Öıĉ ÎjĠÍĥùŬıËr£sRĈ$X³4j4TUĉ(ƒF"J’ÊOqĥÜ´b&Ħ¨“Ua#mËĤÑ`¤Ì(ÖÑ£Aĥ6/-{Ŭj‚Ä”m* Ġîí^smċ[’Y5DX<ċır‚˘Ò2ü?§Ŭhħ%Œm‚ÄV‹çv˘˘£W4[•‰65çMF Ş1³oĤĉĈ4j-nms`ƒ ”ĊGğ°Z’Š8ƒ7³5Í*:Xh1&€ŠM€yŻel&Lİ@@„S†ħÈe4bŽŻ4hÈyıA]uğE4Ê(D˘@Bí…û$‰) ÉŻëœ·1sRÍ"Ìj4lY4ÛJŠĈ-¤µ°!^$p8‰PÙ B )ˆLJmpC"D!N M“ŞĞM5LĠ“f´ĠÄÖ`tF’ ,£ŠÂŽwIat作Žrò2¨ÎÄċ4ávġĉQ}<ĠKJ…QàöY³Àk£hmŬ˙àlŻgo’쌨\¨"4£Ôıw—uc’ÌÂËRcˆ$ğ¸^\™bÈĈQE…wF‰˘’™ &Q2LZMĈ²èÑ&SŒCÑŭ&È5ĵjĤ÷3e Ĵ,ˆžv , )X‘‰*™„ĉPѤôAsó JÊ$6ŽùĥT¤ĈŞŞMİ4Äô/Ŭ;ĦŠCŸ@ŭ&kME¨Òt‘*4ŻÍ·o:˘Üıcy~.ù£(–ġƒsh8Š7BdâĈLğbhŞ˘“r™Ĵ2ŞAŜV$8$Rd@·# s(Rž\âEÈPB=Î0;ÊĵÀ÷ÈV€)EŞu nr–•hZJJJïŠdç¤ÍBĤA@­ĵS-Èw”gpo1w™0Ħİ X€ H ƒA:™ é‚YîÈ&ċŞÜDĜ÷ъpRÂPĤ ­BĈ–yš „°Ċ˘£GN+7‡HuIÑUúšÇž{.ˆ5Äò™ŬyOMrh„ƒƒĝñ²ôJoĊÓ2]!”ÒµıµË•5£kÖ܇:³2³0 ,Fe2§˘Bi ÁäıÀŒğWÓÑ CĥÈpòiÙöL·ŞÇkçU„:MYmîa“KNÁÄÄAMZ´Äó!ç ÒçGñ§ ς#w+(ÇYŞêB%(š×Vŝ5\µî—é×áI³”Ù°ıFDÒ'I,´M²0Ë ¨Qû =ŻGËßŞÏżBL4eQáSËú´›6š‚~Šèö8NşbH0‡ħïĵ}ŒÚ"86˜ġjà*inîú*Ub4DÌâœ$€•WöšÍĴɢKÉQcQŒšµ×òW­ĝ÷·ĥ˜²Ö…!E"ê(İHE-/ “r=0Òl[x֐É3\E0šĈ*˘Î+ÄD¸^HLû:1¸†ä˜’{ >u4… ÒR%)C’ĝǑħàùĠ7‘‡™.Žër5dĈšb2Jˆ”ˆ“h-Í6jUŬmŠ˘ĈµdÚ-bĊmħިƒHÚ6 6Ñ%dHÛFĜڊ1Q£mB -I“ ĤHLXJJ£l%S’2%bĜе%ŠŽm¸–¤ÖÁj2cwuüŽ”[Ê鴘ѭÊh†Éhĥf£G#\Ö6¸”hĞËnŒV4wXÍ …%J^FPĉW‹MlŬòŠ‘-RUXPGŠRÁóLš*JhÀĠSbx4JĦĦ„€Rî5ĦÄB™ı1L%™ñKħ0Á =@ô=´"`íÂgĞï^?HUEÌU܆ÚDYÔ·û Âï˙R2ü³’žb²,9q•z{ċ|¸áĵ1ßGh6AIĞR`i“B ×\Òġĝ!';”ÀÓˤ˙Ë·F½ûò™ĝcÖJiĤ™„ßCOát|Ÿ ÓÉ#Ž×ÎY1)œ5|bžûïJ3—·Hİí25̘qœ=6³,ö:J0ˆï•2£iQ'',”ĈıĝQP`>GÍÙċêtCäTà°³œ’-DÄ™•;•ÂÉŻœŞJ l0DÙLYü‘^ICG_µÓ{é Y†ôĜwÎŻš"´âÂWÎÏ|f´wsĴ§û$}2äKÈXd/X;-piÂWÓ§+ÉUĞiJ4}>­QÒ0g[ğ~ħTRJK2°iĥgÖ9İĴ1ŽbJ0qÓÓo7zÑUG—kħËğÒzŜβ­ÓŽĤĴšžƒ²À8=éJljËĦ4yUL0š¤š˜ärPyIžP¨U‰JĞ:È÷9Z¨Ÿ@š¨”+ŭġ*’lúÏyâş2I–Ğ_%…şÏÈ´ö> [;É&ĠÇQrx…Ùf ÂŞ ŝd*.%HLÙ0)ys{Ij*J7”¨Iá<ĥ˘{<’Jyf…%鄟×úllğßR)óûĴ´û…Ù ’2Ë] #Môĉ½ß“šŝäR[ÁúËŝì35mÈ9÷%˜›qÓ;‚È2—ÒfeÓĈ}îéDp‚aöÉĴ4‡ÊéRÖ°Ċ%‹ˆüŸ˜èp‡ §‰ +COCĝu —U%lJ#ŝ„„CD”w„,+pîCÒ 6‡EÎ H$tĝ?†ùàŽNŠúœ!ëô•Ĝxî>XA§ˆ‡ƒW€ñê &›g[4”ËÓŝ¸^T¤‡ÚT47úÖnf–ÁhŒ•"wÔëßHÎÍĦïÑ\ž€Áp"ÄÌ0³ċĴ´‰ÖTHœ/İ·:œpâIF üG˙Ĵi~FŜ€2tƒfSƒwvp|^Ĝ÷Of=j²TùÖʘĊ3ÒËħ”Ġ<…ĞLҗŠHF™ŭijÂ?†ÎżÓ½³ †Öş‡wDFäR]ÄŞ°Ş˘ĵ?Ñ{jż™ÂÁ§Ô’2•¨4’2—ŽŞW`5£öó nSxÚFßSˢ‡ ĥË&ù>e5qĴŻ•%pU³Ôf“YO8Ş4éÂ* Ägî_™ó`>AµzĴF)j-BĊR…’ˆ0ÊEO4)UJKÌ)K½ïHÏ/vKfŬfw20vziéĈı"4 ˘"~òž²]ı–.Ùy,6IS?ċP³ñ)G-§,yŠrŻ#î’ ‚PÍ"Şİ'â„JM!ëI=4yèRâ~ÁĠvl ”à}v=ÂE‚WÊAD?ô9LïôëŠt|ûrh FŸ*@ĊWş_ 'Ŝoq|J'd*‰URJjW?ƒ•dĠċX/\ż4s˙{$5L¤…'8 ´’"¤…ßς"Fg /ÍjĜš4ß׺Hи£ĥ)üŝŻŭÈ-)Á‡+Á2ĤÖ÷KóUäŝgÙïÈ<RÁ L|¸Ĝˆ£‰Ċ>ŜÀŠ&”üS|QüóAf“6:— ĝ3Ĝ‡–­x94Í­eÖŜġ­Píp¸0ĊxI}Wdŝ›×(\aMYK%4Œ ¤³ œT˘¤K%Bħ‘éhY‘ŞI¨ÄÛr`èöÔp´=É“İi!ŸïTô"R•Sħ–³Œ˙™ß9ô½ĴĞı)ŜtrïT˙g}ğkû/4_ŒË-(<żĝ“ßí‚ì…ŜR4T£ßž,9KİĤSŭ_żÁӚ?Ûŭ^èzıÏ)RfJw3RN§ûό¤4î†Ĥ!äbLOĠ½$)?&OɓDfa°}´ž‚šò.Ĉ8‘섇!YŞŞR"”HePê1"’é*sŸ—û/ ‡+FŻÉKíNHŸ9³n>G~ïX?CäŻËŻ…N€ñEèx|§Dv6Qî˙w„&5ŻĞ²#~ĝ² Żçċ”b˘„Äĝ‹íö÷NCîí4ŝöáíċ:_LŸŠğ1‰-U!UUUz]Ÿr´~mMZ4ÂÊçċPÓ4y?¸µFÏHk5ÎpéÓÜÇÖdJ"‘)mŝOħZ 0ş8ƒgp—=ÎNFWhFô£èùÒbISݵŜL&üĉ-ĵÒIëKè,àÖĈŽĞg4ĈXK*YE#~^AŠ’Sˈˆ#4b‘‘UTŞôħıˆò—Ħ!’ÒĦ´{ZF„Ż2ŝ)PVJWùfĝe]ĥÓ[&ûR­qŻĵ„í#rZĠhĊ… uà-bĤk0thq{M —D! î‰4E˜@3ĝ>Žwĥy 'úµWÁĈiqï1ŝċW ú„"ĵ²`$Œ›a:$ˆŽ'cÌ 2T“wS )Ù)$O½ B˘„܁ƒŸaŝİÜÓôïÔĜlG0Á#{‡ÜÔn+ 0~ïıCÀ¨òùœìVêˆtŝ[T:>O}t}I:yK}¤´™Y›%§Pĵ¤fŞIÁ{gc|ŠÜEâüâdO‘œ³u7­½u Êû`ò= ÁêA*xCĈÓ‘…!„WÎRE~ĝAŝZ!d Êâ°@¨(j‘#;§‘n˜ĊV…§e`çQN™Ü?ÍêŸÙ$A nçä>çY<÷°ò<2´ ~ó)GmŠLÜı"Sr‹ŝÔÍ İ6o}ÄN0ŝüċ›j£PÑ„…ZD­ĴmıV6µÔİKijÌŜŒ˘7äĊĵp3;YÜ÷j܋ PjġÜmLl˜Û~'S%ż{yET ›ğ¸T1Fîd’î­‰Ĉ@Êf7r/.8’ħ˘”¤iÑ …²ĉc&ċşĈPÛy ށÖ´Ĉ­d,„ĦÉe²ˆL,5™l•C’ˆY)/UqËZšş7‡,ċ˜Ó¸jç¤ħ+öŞA)‚u\‘ÁC@l\4hC˘Ş`™ i_Ċ„îšq„ŠàĴŞH #0ƒ2v2qCïOÎÙĦ­?€2–ä*:tiü$g,_Ò'‹E˘•ÉTR4š71LUV,(RJvݵTÙéwÎi’˙{DS[çŻi|‡èÀ˜Ż%ċ˜ (Äâü˘ċ—Sk~û§[Z]23ƒjĊUUVƒGġ†·ıR÷˙JR…ı9dĊ˙ҙZJQTŒ&Ä,€ˆRĦñDN!%î(‰„˙ı”Ğ™wÂ5ÈTµŝcLÙ"beb(IgBéDµ3$²sÈŜií,MíÖo7SWóÌÌt@îŠK6É5l°èöŞ4™Ŝ ˆƒ0ĊB",ÜC‚ŻÄŠŞ eíİ™]E3cmÓעv Ë]P&nBMY‘×—’L·ı2Ù½Ëé™ ‰w„N5޵˘Ñ܄uK‚n7½j·ŝÎoıyÎszïŝß+^ŭwA­–sjxG’½4Xïŝ:£“zgù•FôMdġ˘LŬIde&êżÇŝßÌòúŸ>Ğ´™ĤÙÍ[ú8š7ÈaÊ8&†Ú§F/[§÷Ö­rĥ°ßòƒGÉ$„ \‘ġ ÄJÒCmíw£D³g]xžğİdޤ$e\+­J³Ä *U]_2lLÎİ+ñÔ*Ĵİ$F?Y{n•T„È·âï°6ˆH HXxP™;‡$ĥM%UBċíU°#ĝl½ñ.\ĞcMAÂɧXâBĈuÎïu­ïß[ġšÌîÎq'LuÎî]ï?Gal'97òZQz"ŠBß}Âú€şêMĈŸK=—ĉŻ­FV<*Ğ"LĈ&‚WüÎÌSdµQuf*ìêÎYÂXk, Yĉ<‡I]"]† t„IcŽÑ&¸˘êgXdbĦVYĦ„ŬNIżyԍĊ7ÓY’iӋ(n(–˘ïó•²—Ô×­÷äĉvm-,âk5%xèıUĠç ÓMwryÖcĦ²Ë/‰ ÂɖÄĉt7Ħ5ĵÉħG3†²ÀĴ]ĥáC¤‡fleE(z1eœá•/.è$#ˁP2ĴġVr˜} f–q(BX2ì[Ñ£S²êïQŬ>C/ÇôñŜBŜ'=¸r½šß5Ûd1^p‘1Òw½],.ġ4#´[ŜŞżoî ×­B²‰äĊıL>uĜì7vò!\˙@0p)ÚF½Iž]žO 'TëŻ*·Fúùué£ÓGˆ_‚èċ{îGŸ#Ôa×·˜šĤwfJ¤¤½äÚX-›ŠÌĉÎ!šŠŠ‚ċ£Ş“7bË*4]´ÑÊUó”ŞÜÇ鋊Y‚xĞá09/Żò·NGĜ>ñŭŒ@÷$"GôÚ¸€—D!o–XUòÀe*8JûIġ_¸ĥ]߃6;4]}‘U½„›–ĵĉ¨ÒD§”oÙÑLĦrĤ*Dùħ&żl3ŒdëĈGßYñŽq¸û{’"7\nHd¨-6|)Ûxké=}Ġ ö²­SÖH hI"eD(öò?_ojZ/S§>¨}ıÌ~½6!̆ƒÙQ<˙<ü`GÂL+HÈĦHŞ@”¨?>¨àŜúDŽN“>;˜Cµ[4™AVd]ÁhɗÄĝŝ>ëÄÏÛ_·EâôR“X¨ùg 'Ê]zډâ|OFS£?>÷áA5Ê,(wqÛ­k¤+Ë£žL4ëj<ŠH5ÁŠ}͙H“éßV6#ÚNtM~RJâAòŸĞ7·òŻÂ#ÉDûZT)ĉٟúUŞGŒ‰ëšÒéT@ìÀ‡–u—-޲’™è<ÈçǙ?żÏÏ3Ìbï‡ò/ä|dí4JƒJ]nßo$Îdu)ĉ¨s¨ˆ–AVT%Y$°<TjlyĊW—éÒ³o€áÙ ù0‚?Ô\vħòó×bÈÄSħĤħbŸM AÇßĦnIŜmşä6@‰ışV.çáf•—aFŻ.Ùß=fqÉ’‚HHTùÒYçÜĵÏKn-h\T;ë8½Ŝħ5ü.™Ô×|]ô/ƒßı}ÌT`–™•;{eÛßalL˘SġZ#šĦ …DR²Ĥ#\BYSñÛKŝZ;äî‰išWzòhŒˆ‡o݆—Rlô‘i)ùüħDQG·NÑgéeu²Öż Çl=×\(ŝ.aqi̓w—­Wó1-òóü¤ÜÙzlγŭÙ[ÎĝtkFŽÔşħQEZD1¨Ä\tŬû=Ŝ1Ës;l’c˜ın·E•U²âıŬë’rLa|ÎéÎĝuŽwXXŠ*ŠĦÌ;ï­iÙuĠV¸s ³cc;š(”Tf£6$˘÷•,D°şÒutd˙@üŸÛúsóñÓ§Ġ?U|ždàejäž1Ŝ²*82Zx跐÷X#r“̵ĵOäy'û:áĝ)…™ċ(ó°$˙)2ĵfNĦ8˘ÑA/Ĵ„+¨¤€kJ 1Ä£‘’¨R”ˆ‹E"Ò£NwVĞ‘ µ“kITjÑH9JfHfä‚UjDu"”€şcTF5i6´cV‹Pš£mrı´›j-Eµrԑ2F•BÌÈ$EÉ!9kħTY#V6Ú+[›jċEËhŞıU“Uc@†J‰@ä ’*Dİ’BĤ †HB4ƒŒJ"R‰HI„4mËbѨŠħkcZċş%Qj6Ġsmj-TËsV*Ğğµĥ-ıhÛ]jC!Ô’H8À” dı!’#J4Šd‹B˜M´mrûmyñk[+\ ¨­ğşÒmÊŻ5ċVĴj3ç\ħkZi­:H,PO*„"YBzR""”¨é!Q:”™„1D/D…¨’İ$YB"ġ€CD  œBäÈ€ErE*PU*„•)JŠĤ’¨@& ‘ŝà‘y€$˘ ›”Ĵ‡ò4: R€TE´K ,I"Z(‘* ‰ëÍ·/tĞ–œŠŒĴ“ïûšcì6^\ôTŸĈ~‘ò&8"BÊ?rQ$´B‡‚ˆD%H D;2 "ŭdTX”b¨‘”„tRI˜7†ofż^”t”UÜ-#AĥĦU£ùœ€ †e1,œš"aÒ8|3FÂGİ}p@́!&mz™QRZQĈĦK¸C ˘”¤*”¤™Ágù7yz-Ŭ AÀJÖi x>^–ŝN;£é BUYg)x½L2yÑ: ˜‚@rĝ°ûHš+\Ĥ é Rİ%ù)ɐ`ĵ…¸“½:ŻAڞÓAGˆÉjš‰bêG%U˘” êï0„²ĠR•$ÑĤˆ…ÀıL”[JÀgQB#ħŸmı™fËúĤŬxQ‡wQÒŝ.íY‘ÓzÁCN$EMÂ+L„3AÑ…³ ‚MäĉDÚMFôşÍeìĜW›½ÜN÷^BĊ,›äĝh‰)…Ë–ŸVı;3fJÚU-İ&ÚŜ8µ—!‰rYdi…*%*2Ħв4D$‹´4”ĥ?ˆAğ–Ü”$-*n’ѰtYl.Ĵ„ Eƒ5 ,c2,“PÄÁÓ `£QD‰­YcW& ŬóµÄéÍyGy:âbúî#) ™dQ*äl‘Aĥ‰ckš…ܨф%ÁŜ‹˘%ĞЎH‰ƒQDaİbXÊpı`Ò¨µM˜“Hb֒ ‡röéµV[n‰PDO|½uˆÌžëĤO9ïžŜ² ƒ6B‹ JƒP…ËE-ğĠÄ[qşŒh£Où•Ë.P ,çEf°³ (2™Ğ k)ÊBY.ì´ì›³Z=H™BvlĵĴ0,…Y6X%µH$ÈzïIĤžÛ: ˘(,Ĵys,PaŒLކ?¸M ~‡\`ÒHËÚ*§ip”°ÁġÂbĦqR—^9$#Z²ˆ¤ŽsƒLüîԌ*¨nîÔŠİ …×gZá³ġaüz­LÓ.Gžĝvûê‘QQ-³6|Œ£wjúG%˘ÄıT|ΟĞŭs{ Ġêwú>_Ğŝ„Żş´kz -ë/"BÛ2òêµĴ@²BF Ġ– z˜8Œ–Ĝ%0Ġħğ"ۅ–ÚZc-Ôİwf1&dÌn5˜ÈRT.îÔ1•pğÇd¨ÚZ[f$ ɉƒĵš\%6ÙuĤ˘fJĵĦ¤–]ÔKxÖ·—½ÉêMÚtS@”Âôó£áy„6DAÔx^¨òìÛÇ!ċauêNŝìé;;µ*¤F–)>¨29›CUğjÒĠ!Ċ‡ìċ<8M)ۛ˲q“¤Ö:@ê읝óWt¤ĵ'.ĜŜċ07޳˜ž ŞŞTċ&Ä<Ĉq'6#Á:èAw|vq­·ġoäŭĥWġ„(É!I*‰_ĵÓ ¤†Ü!Ŭ]‘΃ÉIN7Ÿ‰?ì@˜Nœiŝlhzq™’´‹ĝ'sjĉƒôCÁµ†fhê8g oM÷ „`%Ş(CüÌàp`mƒÌ—\:O:^şiÍHÄ8ı@bDBâ ııIÖ&ъ´îÜĞ˘t͛6ÒdHU÷]ĥá1ޘ2ĥú[ĥÚ"ß%p"H’e“T%¨4snQ1 rşİ6ÌBPš”q’€XÁ‹0€ ¤ĦÁŽ<ìĊ# ŜÈĜcšÓÍeu­Ûs>·M#}(2rÌvhĈ €°tDs]#JkM*š–•ÛĞîêÙ§ …GB`J˘dKËÔ ĤŽ6İaˎÉ0 ÜpyÌPÁÁ•ĉ8êbí6DHÀàdÙĉĴz˜a)ÌDä‡'r „2̆ĥ@;Ÿš@­UBQDN£°0ôÍhuç˜+0ҁŒ,@ žìûŸċ x°Ì%[Ñéèá•~|2Êĵ§ıáӖç)N›ğ(Ŭú ÜŻgĊÛ;fê‹ğV|_ –3ĞÓ5ÙBu*İ&@œ¤€–/VEEwIg÷İ£üOôÀ,é˙MçJ4Èj-g]ïzŽ˙>K§' £#C¤¤ĤŸ§-ˆ~ic–TALN´ƒH&‹E'yIU)R¨\†ÍälĈ¤ğà §;™ˆ}â²TD‘4OÜ=UNħL4ÌĠ?lĈ|@9Ë#ŞUvC°`ç ü°Ââ0b}ÑCĝOÈ[™âÂ^şi‰ ˘ ”c~9ïÀ oĦì£Ħ=ÏÚsV'šz'(zʕ0]'ġMï]Úĥ=6 3Ùז=ÁÛ ŝÇ#ġ…ü˙,Ğ Ú„8›ı0GDè~SüoĤeY³Ŝ³ }Oĝñ™™ŸžrŜ0¤â>UdQ@ċ•‘ċp‰á0Lŝc·Ÿ—cöüŞżßž£ê’"Ġ}WلM—Š­UÈ5î³_­ŬËóVd×}¤ÀżÈEBwŭ h×·Ì>I@I żÂ…3ö &z=ó1ġĉUZÈP‡xĜñŠìĴ DGÀn‹\ާ턉ğHEĉĠĉán„Üğ%°„%ÀŭĴ—İeù{qP55;ÑóżŸ·RçEjıÈk|ßWy(uĵÛB€µXuFÂDç2^=ĉ#™iÜÒN%òrSËjâq—e*{ĥIŽ‘’û¨ÑsĞ\’ŠS*ŞUNd,?u‘~^]à!yC€átœ°p ‘ŽñXħ~^ż#ƒŸÎÚ­ĞyżŞşöŒòî]Š)´¤ƒÀI$BARA£ °Ë ÉÔkY’8İ ”Aĝù8šàÄ'Ä &Â4N‰† Ċ17†eĞiċ·v †I:.K³§3úŠÛ¨t9vm#‡\qċčqÉÇ 0ğ9pÉ TE0Q“Fl°HIfµğ£ŻBì™sĦÄâóÓV9m“ubĤş’Ô:ş™@AŞêŬËK:5uuʙ!ôJ&Òù)­Ħ³<….ZnS‘yRèàŸ§ĝÈówY5SID2˜„Yq:0ÊDĠ’Vé4ÑŞÈ’oGƒwƒ şş`˘£%ÜA2‡‹Àb4[Û´˜âwœ î÷ĞÓkĜÍu˜‰˜ĤÍhÍ$ Ó7ġŭDE›ġú~wà›—O@üÎû½è|ȓÓv²ICI†<•$"}ĵ´2×êÀxŠòŭW“ù{ßŭÎĊ´à„ìŠĴJ‡ĉÖKËâĝÁò}ÇòžÇêï> ñ84˜~ô$Œ ME(3¤‹RUh"‹JQ Ÿ½ßW4àaˆöd<’CĦ˜Kb´Ŝ-\­ KËĤ˘Â˙”6èöw8Mà<‡wı'*aÉt“ġîqƒÉ§²8G§CZ žÄgb¤­SŞ­$³‹^[zPj0Czñ”tü7‚mÙĈhr R…N£†G&ËfÓ¤("8—CŸ!8eßMl³ k•6Ĝĵ! "hk E ÁšÙċŒÈ¨l^&t´2Š() uï.ĊÖQE(˘…SV#§‚xĊàuNĈ49mvn!Woggb`œxÑÑd8îIòŭżôüÌfû!”‘¤9_á>\êş;)Ĝví‰,‰…˜’)/“CŻ~‰30ZÔÊïdʚ3v½ħjB­clm‹Qˆ‚ ‘¨€ÉÈ31`¸ĦÂëJô7ĦPÑc‡âëP}şxÖ"ö˙5îbÛĞ))ÔÌĠ‘˜‡HÈ4sùžFׄahÛä˜*èùž‡"Ϩi>-'“òby’óĉĵ×Ç ÎhÇÂŞ+'g}G×u£Ysİ?/ŻRtÔĉèÇĥ™ûíw͵ ,ÍíÑ)ş@xj¨ĥ´…Cr,#'ñ\‡8鈭mvi†Ù¤ħ4mĵ°@ ĉ+‰È594Ê+0 $7Ş)cŽtd+Ä`€…Ş-ğB!m‘Ñ—TĦkkÈ(Ñ`$7§ ÈzH{ÎŜîħċöó/us››\ĜÜċwu½î÷;dnfnr|–ĝĉëà䃌ÎauDGĜĞ Ĵ¤ R0Jp|ÜÔ#4Ö!4ÓA”š-µìUÀYE•`ŞQ À?Ġ"‘-’™!TÛnŒÔ&ÇG÷}‚„*nób8wµèÌÈ$…àş@:.—Ô)˘yv 9IsPb–A‹&wġGIӇ^ŝ†-ċYäİ"¨ï'(ċNâr.š=™Ĥb$<ù{ĦnĴŽê@~ñG‚^MSŝN”\Ç­Ê<‘HaXĥhÒÒTJ7I#†ò*4fÄO 56˙“˙v°si9%÷hۇ*•–9ßµ˜·RñYgۓJŞŠ¨ ^êĴä.†l™ċš4KÔW}ĴĴÍXŞ*ިÙCAFQ‚Lcoé_}×ß84İ2p4Á^Î}HğcA²RHÖݨ°­jEË %ès °,]Fh19ѳ@‡‡ĈƒĥŽ˘"ŽÏéñ0ùż^£öZ9U N˘{aYÂvN׉§<4ıž­²TÂŞĴYbŒ$e$sX2fÂċ#M>Ġ$şò÷­I‹ÉQ‘UjLLvaÀœ.q²žÄûòa ĴÁÁ*ċHÙUSÊR,CYÛbXЇkY‰ë‡ŬĝېCPT}Ŭ\›6uɂBX‚† sËC[ġ2‰­’~RdÏs’˘N0Ê6ı6qœ&fösIĊÒl]Ÿ kƒYL Q<”ùÊM;·goĥğ§Î|b›ĉ‘ÂĝNÔћ,ĥŬvɞ2„ğDÁM7ËÚ%k˘ÙħAQŽfz „4lǐz}ĉŽËOB%ù{I>•]£ÔŞŠœ/âbïežWŬkVY,;ı9e;FU'. ’•Yw·ƒ8ß9ZD<¨0ĝ‰QŠ”(f˘ •&˜öÂg(Ìr’fġRkĤeŬş„Żâpîû÷{Wmé\ÙQ£Û HĉŒ½]TDĤĵKKL“yjž \”w$2CNßmssT$…"V6ĝĠ2§t–şswuéğşŽíÛkÊ×Çċöĵĵ¸ÚĜ˘ Ë" n2C*µŠ}bœa“&·Wuún•‘^¸Ét˘›XëJ:V‚¨a4@§0î=  ëBÔK¸Ôœq‘‘‰ĊFħ­òjŬŬ•_J“&‰–!Ÿé_MıĥŒèĉûëím|U˘ĴEhÛ]Νvé´rï;sWžËc&Ú3 A#sˆÌrëğtîı2“˘2"”Ċ™Ş.WÄŭ:ş¤ç„ùŬ×´ĜÙëşîÜß)Vë^/gş4:2êğbYIVġ’¨„ ˆ¨bHÂA.X% ‘"˘,‚íBĜP¸Äd䀕Ó)iĞ7éĥe•ÛEyĴDQĦ#}>·šŜnAW+Ilşêój4µ‰­ BP˜ozAÜݸRRjÛÙíwowrç›Ĥı´j-öĞÊ*§ulmWċö½ƒİÉm`¨d.á¤( [03YŠİV•ħX´‰ad-¸Âî-ċ\ıt­ŬïIĉ×8cQÎc—.îĞ›[…ħWÜݐ†äi ë2§Fa†bf]€D(½H4Vš‰„ˆ‚ĈŠˆF¤€D¨ĴÔ´Ş.HHT‰lpT’Ï^^îìq×Hóğĵ’$QZĵĠÈĈóÂĉ×7Ó]"ĵ·ĊÍQŞ-yk=t–÷rîŜzW-ˆ6ı˘^ë›WzíŜíé^\=è9î]÷ïcÌé]4lk°ÑËsQµñ.Äħ6Yví jÚ#¤ħd¨É8mŬŬww:-ÈÜK}k.q‹Š_cbm_İNñ„ C Nµ LĞ’‰â0•$ÚĞäİ+hÖ˘Ô Ù*¤ÉrrTÈrUu–RÒÍPôµú+ĤŜpĊDY)•ËlmXĴ›kEĥċ\Ü­[–ĜÚ4hÖ--B£¸…†H\…È,­ÖUĵŞ–VŜ²MĞȈ‚YJàMħ*,(lƒ Ĥ``˜Ċ–:š'$ 97ˆZO'“³~üScca0=CĴaË·"#NÙŞÔ :&Œ(B²żj3ÎQ)ÙH(jò™PÚ>ráoÀ0Û /¸˜Cíi _Ñ*6yD™†ŭ´t0<Ëû‘·2jŜi™‰ħ4Iù4@ÖżD ġ]dÀ˜4bQċÀU,T˘BB ŬĜ7)ğğğı%Neä"(V—EĠDÁ¨”m*Ôİ#…„ÂB RRÓĈRı'iDÜ ħ°”÷ž: ‰89‰„‰á›z7 è†ö`RʄCô#JĜY ĝœÊĊ2Të“ ÎĥÙXöÉĴòv9ĵ–íU•Ĉ§ĴÍò+8½ ÚÙ*E*”•20D~GÓiÔòĜlÑFĥŽ€ÛÀ¸Ÿ>òöĝ‚(¸aċ_TîZBÔ3IwŞ$i§—Ĥl#ĝ‡Ĵô T‡$2˘YŠSêşĞh ^§UşqC”Gá€>dÁ‰àä°Eܤן"àw½şEQ“EoĞ~ŬŬŬs†–’,ĜWğı7z_={—§×LßUó^îZ"…6.dë 1³a§Ö(êaµ&r:Ö%)ž¤Ĥ$ĜŜ½˘›C,UQĤĥ™.! Dİä·~†#!<™ċĊ™é!ÚÀ稛àcn\tZħ)fI}("ôKT()fFWlȖÉmfĉ%âîô-ß?”×îܒ Ħ”qfîäİuĠá8 4żİWƒÈ>¨Ž€ú¨Š;ÚŞŻîĤ“²ËȌASěÉ`h¨Ö.`Óá "&˙'úפôCxŞšI4"˛–bF´¨ŝkN”I‘ꈑ;¤€—ĵäOµMMÙ[ü ÜĠvĤ cĉÏáM·ŞSÜĞEJ…vùïq]²yc“lŞ*UJTU §':éZŝuÔi‚‰V6 Ş*’‘ ôcËïúâr°1U)jIÍŬ9K:ÍżŒGÁÊ-Ĥˆ‰mÉHž<Àà6˘iDqÄ4|RîùĞİäW„ÎNÛ’kZÒÑ™I_ÓÒvgl‹İ‚ĈŠ/3ÒE“ÜÇsc(˘qlµ,”ĝµ›§ŒiĜŝ¸ö˙‚‰³tZ*’>qŜÉâ´?ê“úßĥŸȖ0ŽtyԂx94Ê?6ò?`=˙Û("„ñžNÉ'wOKSßï'ò’m‰•èáĈ£‹^֞ Ż ÷ĠJç>ĝ䗞wıTŽİDŽ)Š~DC†(Ĉe2 S1DMÂ:C]ĵÍw_ìÇ ´ŠSÛ/߸b}ĉŭñÏöiÄùĤK)j¸cwo݌zBoùâ$6•ç^5ŽWĦĥżYzUÜ[$ĞÑ~ĥt'. *(>ĈÒ׺PP’P¨!LĦIR9ıTk<›|O;¸|ŭÄŭM§ħÙhLĊœÀÈÊĞ,µ–*J‰? IĈQĉ,àê}Ġ$v¤ñvħ,ÜîŒÚtѳ3Ž-5'gˆv&r5>. 2u÷Ŝí_†ħıdgċׅWtİÊM!‚—Xz‹Q°_‚49IFİ”µÎ.‡´ÔÓï'ݟòûx>.ói%GkÙŬ›XžĴg"7bU%TŠPŞŠ@Ħ)Ô:„ ud¨Jf, ŞİJA8a:Nrt¨Ċ` ĈC”“U ĥÉĞj+LĞT›XĊ¨ÒXĜÉ´jŝµÑ-ˆ´İRE£ĠÙ}|!=2îÛIxĞóĈŽîÉ~-'ŝ2ˆß6~?AĜT’HŽÔu'×~JuŭŠB%~fU 1D­Ûí%F'ìÊù!öŸ-Š*f,üJ'ı*Tž°šı5x=ŸFŽ;%Gœ¤Ñi->| y‰Ŭ~äŸ4g°k[$J9Oşİ^ Ħ95 ğaeĴ˘Sçȳj&Ĥ‰ö% "ĵŬÄu·ĤògIĉİ֗|ĝ.™ó$çÜT’#×ÎüW^úĝ—“§Ş'g^Ħ´F.B&5JU%8ğÚnQżP²êˆ5‰Ú}§Ĥ]Ë£4Ž ßĥÚqg;–HâŸC˘g9İ!ÑÉÉñÍ\›’JwD†¤2X5$œ˙4{f\ĥ˙Ï=ëĞß\‹^fġ%wŬ™kËùBİ*µmJĞ&!àğ-ñח?TÙÙÛy“ŒF$ŠN Â5Rk*ʁ„‘)żoÓuĴŞ_ħ0‘żçŝ|pĵf0VI‹žû#É:ƒüĝ _‡Íêríä%E?°b DĤ‚‚‰+c BEħ°[H£LÄRZ5IF""ƒ%´X²@Pħ"² P¤JCmU*ÍQmŠÍh°ÚdZ@€‘J †BY–İ­2µ-İ5SQEŠĦ`!HePĦjZ˜ÖÖ[5Eĥ%İRÂT#J-JRĦ4‰B,K *@R! ,#J%,# ŒĞÑ@²T! ²$„$ J0%*A Ô Th³jbĴ­šjZݐ‘ UB„…(ĦkE³KcIµhLĊ!b†–Š &¤‘xìúĵ>b"#ä‡nSXäıj´^V€ÛÁ>j€}êqÍʌTQƒ‚èb’­cöµ÷ĤÒÉü9Ġo+*Œzş^h*"z²› êÀ<#ĵAĜz&@ĥ yı;×0>aŝD0DLQLÌ]Gíïé뢌*Œ5`Á,eÄ`Ċĥ˄„ŠBUË,ğ—%$[•.I,ı,„¸ÓŬŬžD÷yÊ÷Nuċt­6V6?ßÉÙíä‡8ı˙ÛOm–ıžRû>ÉÜ|ˆ_GüŽ:żĝ>Ĵâ'b{² Ç{ß³ĝÎ3UœÍµbċ=7SC·Şxӛşs‘7ñUVċûŸ—„èà˘,ÊQc½&{Ŝué%Ha¤••”ğE´Lċ,Ï&eS­;V†Ñi#YWT%g"Oċh ħןo²ġ”ÏÇŝóè.ŬĴwadò÷(“ÊĤùRÎsŝ2JŽcş˙è·³_ò’xċQ;÷ĝ|ügGò ŠÎBdí((¤“Pdš(ƒLĊħvtĠ;uú\]<ı\Ü LĞšJŻ5îċrw–·Q_›Ó\).™- jJZò£X•.Šoİ\Ĝ–&ñ$ÜıEŬŬFÉ4ɈbBRe(w]Û˘F„ɤÇ.ŽîÒhI”Ë}+ˆ)î”ħ‘2I×\A ´Bwu"“E˜B_]ı‘L’‰ e™WÍ|yzjaT–ħE%Ş^!)EW™~ŠŭÒ5C4J$™Ò.JD‰ ĦEH _è&`;„”`Oîprñ•$‘,S²‘¤Qü“~ìŒêJRĦP£ò39ŸÁû& ’Ĥ–Š*Ë.ĥ"MŽ…5 0çkħ ¨ L- †%ħRLH€À`ïp~Yëħ3ĴTDA\aZÔà–BZÇӃûJ…VSsɝ˙'ËĠI[›ŭuş0{ni›2,hĦ)QTR•Dş]?z£.LHáJ”Êjzq„ġT*$ŭŝ‰á3¨€î&sӃˆÏ—Ĝ¤P)ÁŞT’ύŻ8àgƒ•ŝ!ÔĝÊ7b@JK%'ĠÚQÂ`1éĜ}hôrċ·a½Şü*ôÉÙħÑ0÷ŜÓʨ£.½Rœ–%“u<´zJĠ'™ĦwKê¨0ÙÒOaREŒ“9ĊC‰J’G{|…?²ÚOË "4÷µ[à°~G8…jÒU^*DÉQ…jŸ~? Z16LWd‹¸i‡áȜGœ96 ‚$”´²2A !?)LĤÙŞ)u4½Ħ\šE˘R%(RŠc)€Pâí 0 :À"`tċ %”Z †t `˘’8ŻEÎL0†eBCnƒa·K½–µLTŞ’ëËÜJ‡ĝÚò Ò# I.ázŞÚEênİ e!šZ%Ĉ¨Á‚h iNüċ*Ê'x\˜ÄıqšPPP½Òzç‚);Îé^oŭU#t†7öŒOĉeT›§ÁçR"EAöHL¤¤˜BŽÁöSžĤ>3"vjhÚNӌ’žkÛ6ƒIQI“Öòċ£LTRb„°X’ 4É ĴÓJ0Q’II˜ Q…Ħ&l„ĤH†"i £I˜Íe)K`K04™54"%0¤Ó"f†3RTJL $”$šBIÉ2Ò™!"C0„“%™ƒ XLRZ^]eŬ¸D”@(™‘c4)Q"Ó"0ˆdb„2“”Ħ4- %)BF1²„B™™(²šÑ,ˆÂ”&&†e(™lZmšL™3‘šaĠ‹5¨´ÛI°‚• ‰bRY•$ˆQ´ÙĤÑ2J#dF&d5EfٚljeQiEħ*–ĤİV3h„Œ“0¤‰@ ² ’ ĴĞ&‰Ü´š;m6ğUĝĤ€ÔÉ(ÚL´–…²q2—™ÔŠ=Ġb­aržş\ìÂX{žpĠI •)P€L‰KÖwàkžĊˆ‡ TÀT$vÀ˜&¤À 8ÄR‰{(Âi ùâó(T…Ê,-bÀî”wŠ# C*ˆéĥS5—ĥÉJ)#ôÈ0ä}3„èBġ%;dHŭà~i´8üˆäïŠyʞ2*ĈçĊFäËFç?XµêÒZŠG@"OwıQÑO³ ŝIÏGâŸ]¨=—Żâc<Œž¤›ӃċßÈüѳ„§fĉÉĞ”Ÿ‘Üç"O‰<$íR'Żî_“BŞy{ä½ĞRŜ÷â&ş?*żÄŝEo[û&FQtĦ/™YäS tïÛAˆv„SR"ŠŠ5÷"ê…wL84qĊoħÀŭOżÇÏKġ:>j/@œĊċŒÛĥ›üµŒ8Ҕĉ2œfϳR:xŭ ĜŸŻË5-P#Hż4b¨ˆ¸Hğ>¸†SnÎÎ óTŒL& DÎe İ…ƒ´§Ì39pN8>ĝM‚mkXÍż¸‰fċu²Èµ‰-´URÄfèşċâ].ĞËCk6nL‘ âQċapŝÎŬÍ`ˆÀç€qÀ;°bމĤ"0I4&ĈŒ-˘ä·)hg"·TÎ&PĠydâĤİP–’5 ĵ•00E$W–şm%~—vİ6‚bŠ0—%ü\ğĥĈçë{ĞÜFèîšŭ;y}MÓE¤×ìccTQŬÜ֋Në\Ŝ—/7D)ˆàLÄZ] a²DÀ!2]À2Ĥ*y_{Ġ4ş”Ĥ X0<îĥe}=œGÉ P‰˘ÀBd 1\1ŝ^\&İ)h zaƒûĈƒBz PĥXĈC„ŽVbħÈà<`)ĠĤŠQĉıt˜2˜†Ü6!ĦÂvK/—ä |½d~öx~ ŝ*ŝżŸs÷φŒ|‘™†E8~î’ŸÛ\œ>r>3ġDқÛß² ‡Ĥ—äÈ[¸£_Ú+‡o͑TG}T‡Édùµ¤ìİğÇ)…Ü23DÜE3ĥ*I·Ñş}șûŸ¸3îÏr96çA÷<ÍĠQ}c˘ŭúGÔ}î>]' f3É"r ŞŞRËKYaġ J{H––˜ÉÊ„¸§ù“Dt4şo+ĞÙÀ^“ÂñŽâ”÷ 0‚0ßsBĵĦ*u‘Ü:€Ô#Ìhŝ0bO9I TȤĜŞKYŻÓĦ|İ*n)– ŠefQyjE/Pè¤JR)PRP3¨’í wh&`NÌàÂ-HĦŜŠ‚|Ïáµ ÄHé&&¸$AjvBްıUîĜhJŒ q Á)5+)y%։À€èAĜÂô%Üäĥ3Š„A(ĝ3F€­fjÍj.ĦLSkZí%•HŜêí$BDnsDW;-÷œk 8VD̘H„ÁTħS&QS2&F6ËS4Ĵ@ğ0\M̚Qŝ0Ptׄ^¸ˆd:¤}n냎(t †à´&ZgœCA£hp0™JHf Ĉ’m`ó!Ċ2A֔+ŒQ•ĵ{Grᇄ$ žF ΐnaġvw|z{‘e ŞUIPż¤O?‘ “XÎ|ċG-1B•Î$°çóî‰""Şt×Ù{!ĦŭHP :JˆŻĜ“ì4˜½YJGe÷$ġ%ÙÜwRÜŻ•“öz;(ڈ¨é“oP0Ğ-‚OK3m.ŠSV&`ĵ…ŞH¨AK§dNI>2|{XvY‡cş;ñĴĤğ³ĉkìO³EULDŒD¤(ùS#ôĈÄÏbĤĝ“ ñ¤í˘Ğ²7Ċ¨^ÑÍ-Waŭ­UWôâŬîUs"œÊ ,™`µğŽÈ\Ü­)şŝfÈPֆê5ü:ınÊĞܛȊ`hîc·?Ò_éL/"ċb‡ •—}Bó>ÒÛtÍeÒQQß萰…ö\C—а²ôSjˆSĥ9Z›ŜËŜï{!Ù½ëwv2Ĉ\nŻ›.]Ġ8GbÙÎPhfv„pQıJäXîĈûÉK„cÌĴ–MIW:Mfë$>"A€ŠX ċè!ÎÒŜN2Ĥ q‘8‘fCΠġ9Ġŭa_Ŝ!]úëŞóŞÏĦğ.Ì)²RȑK^·ž[0ġè†ĦáÀÛÑĠŭÈ`1–ˆ7ERLĴ°Ĵë5A1ş¨0ĥêĞp,¨“‰ûß?ĦtD‰›• ³YJ5U)bŽÄ"dCħ&™ÎĝPP“8NZĤĠı6Ŭ{'T"m‹ŝĊ{Ğñ{`ħ$) %HYŒ§ ŻzÔàR‚-@†+½cıs3[ ÖN ¤‚%Äò†’İi@ÒGtÑ$˘g3Sżo˜™H*wyWRÜx¨°^ÊħU"Ġ jĉ i—qM”Ċ+ê˙Û½âdßêċsù:ĵĝı(²W”Šé,–¤>xĦ­™È÷*ïШ‰ŝ7\Żñ!Z´‰·h—uKJ*–˜‡M—ye—>Î>§ĦԘ{ĵ ­Œé§`§Aù?iPnî ¸ÓB˘"İ$^rÛğO.!#vZ˘7’%µ$EEVî Â2îZ$„Ħ—#lH¨_­~ù›Ù ´µ¤‰)d¨ÉDĥ쌐ı:ŜkmÙh¨Ĉ‹J4ħ.äd…²FîâÉoŽG%‹N.÷{ Cž‡îî÷h1sÇ<÷2÷UĈz:ìî”×wtkː£Ŭ燘sÏFA;J ‘%ġóϝdwòğv4/7h§uqztÊĝĠE*:d EdA$E„C\ëJˆ˘E…9‡hPÔ*82’<’‚žĉV ‰˘zB‚ıPŽJšFU"QbRް Şë Ìħ:`!€„=a6èïâîqŽ7ÚRKDƒÁ#u"@‰@P´í:ħÄòŠÎwvŬŬDDmF.Y4˜fY…gĤriĵ ¸´Ĵ¸GïQ…İ%5û ş· :½§´áLìşŝHğİÌ,'Ŭhч݊šÒ9%×=4aœa ’¨rZ“‰é!l£jĉÇIŒ”˘Œ&’EZFá—_Ĵ,Ö}JNÏ£EĠIEşxJ[‚•C'ñÎ;T2kyzż-rĞ&bĞœ#ƒ\@‰˘MKû”ÚñÒġJóܸe:1³„U8Ġ”JZĜ)0—>¨ħŸ!MiÛ:Ĥwܜ˜m ?àĵ˘ĦâAEÉTÈ@r T@É@(EY0H™(@"QYi!dD9Ф2 A˘iĈM èÒÒĠ¸i8ß.Ò³Îc6ïĝ[ٜİêĊáYc‘¤‘Ğ)q“:ZñœT‹Äá9ÇaEÓ–,iğeÈ×9”²Qôwύ`NÉ´„a´œĦÑá&y ?òç?×}D•áĴcêŝlSä<ž‡š\é†Ìŭvpġòós+OLLħÚż8Áè,‰"6é/KkċND³w´JÔ­kì‡Fî,-+CĦ—r Iam$ğş,d•KÜùó*´ĠlĠŬԁd„J]Íï*ġ(¨AĜ[2[Ŝ¸ÊÁĉgZ‡€Óú &ĦÌĈ)&ïĝö4i´d~Z™RĞĊXŠ—vË(ôĠޤí/HŸŽS­?s*$°Ŭsvká1bòáF´F‹F!ëkG6a”‡@^z<İè¸užOïÑĥ#ÏrÈ´sİ%)Vn]{­Û~²ŞU„5C "ÉA$]ĥTvÓ@]ù1Ñ è­ÄޝEìZ C8e…5ì­ĠĞG?;!ê²˘ÜaûĴü,!½]š‰ŞċŭV7V+—֨ÙnUsLeĞwާ:ÚĠŬŒA‰@ )Cöƒ’25r0¨,èR˘^Ë––Z„â/|ğ]†"]t\„pè›ğP7vċĈîĉş]]ríÓvàC%;ı×çŻ7›²I A ‘‰K#¨2UÜE-"ħnRĈ‡ÛRŻŬžĊq’+dóÊ4ĝXÂyıŽuħ3ŽĴŜ–š+&Š)’Ù_•uËo"jĵ݁§ı;B@‘µE9ueĊOċiÒ8 ı‰ t´DR'PMù!pĝé£óğv;E°0 S)†rñІ*\Í{î’JKMtò  p“sÑHp‘ö{‰à“á8ç°à´Á!ÔŜˆäĵEE¤€˜Z^J#|•½[=ş(”Á”żù˘$J´İ“qrnŠžU'â-TŸÈ²ë"ßÓÍĵtLÈiĦ•Zó+2p³)İjIžˆ›˘†hŠ(GĞÄy“Èĝ<€Óx&G5ÔZ]xÚpù<ú—+ä'S£Û9lfvñ˜ê˘’*‰„ÖĤ³:£Â¤•Ħġ 5V~ċŬh’^b4…ı Â÷*Ğ[ú–9ĥìDom˜Ñ†ıùεı~f#ÌŞħŬÓzFH­y½ŜÛ§[>ŝ´“Ŭ}‰ƒ2AĞĥĊêYqe0‹(R1’ĞĞÖ²FkT™yµI˘ OÛ4ÄpšuĦO7“‘Mş#EuŜÏX{zÑŻR ”Ħ]ĜTʏ szçĞ=ğžÜw˘–% )PÙu½[•XHÚZ)u`”†²ƒ½ÇÔ.• UĊôœíĵÑ/p‘ŬF [/&a.Yï²Àו³ĞŞû=OÓU@Ġ÷"5wŬB‚„_.ìİ·AŸágz6wtqjše¨ż­H—ûjĞwWíÓTOŸC"k âÊJôr‡“.1$áżżm§ RIż›ñÛäÏ ²”BĦt1$VİÚmÈèÑŜò‘d™•Ĉĝo™]ġıgöĦï!ŻlİÑşê˘Ş&òózγĦuš³q—žĉ d˘Ş*ĤW˜PDİ.qŝ0§ßOˆ)‹C0ÒÛ$0QˆJQ‚6¤ĥ‚¨ĥelEĞyµt)¨hıLQLcNtڍVŠÒÙRE’ûRZ@5Òô^¨ûŭSĜò{0üğAíjĵÏË7,ê§(íŬŞĞ~{fÍäĵ°½Í! l¨ÊĴ‚ˆ{^lD7$UĦH¨•SÒ*ɢ!!Ñhû,@“@Hn ħ秆ñĜħ£•3ÁĴ8=°Ç{ž7h­í5nkdĈÑħE(Œ&ƒ—vš•1‚8ŽŽѲüSË:хXŞ . ÛWGb“ĝèNŭÖìCH5‘´ÖDy6Ŭ7ˆÈ‘'JI ôT„–*g‚CċžcWÎ@8ŬQÉñJ yˆÂšçá/D\Ħĉëġ BRеQю”Uï\×½×6Šċ_yr8[œ˘Żuĉôs—š²p’1 Ĵûfq·‡s²‡Ä“[äê=ĵqUFQ} ş~Aĉ—}8Ž€OŸ%9ĴşmZrU¤Ë ÉZ²÷xä’xĝdŒş”B‹RކğÍñ[̉r-_ĝŽ{ —´VġuŻêßŜ{lûUì´UG^ïÙpÍúÛ²&V°™™­\U³lúÈomÜu²ġ‘Èé§Ŭċoc­şë7¨o1È9ÒXœáU^ı­§.¨™ĴL“iMÈiR,ŞŞĞİ,ĠÊĤŠ’ĦphÚCż‘ÈòB¨š\;žèĦŠ€¤ˆi)˘ŽËïÀ{ŸËˈqĴ ĤŠ)~\Ì^O5T<…`HÂég‹û-ZŞTĝ]ÖA?.íJü?P׸ îç7ĤcKïÇLİA)‘H£)‘xb̸%ÎĈó6Í&l=8Ñm¤ ĵT…Ÿĥ€³iG”pkĥÏ8Ŭ§vZ éù\gòğĥšíRċD#ŭÄĥĞÚ£&4Dü?§éÙÙ¨ĵEî÷š”…F"’ĊdĈĠP!âëŞ3(Σ€Ä.°C{°Žž#îÌĞF'ÀÓñ ş“YIÀëÙ˘”,ĦÁi­^=%T”ˆñ]â—#'i(IRŞ˘RpxÓ%¨şñ †ŒÈ֍„@K€ĵBħ4²³žK˜lĴÒekû&E£ƒoç“Ñ~ÏíG<ç-(ĉSwuĵ;{ñ‡‰ğ]ı0ŞÉMħî˘{ éӌ×ġL;B|—ĴÉ&HíkÁfıçé™ŜZa)¸´ÉvúˆbÉ.¨£œY½•a<”“›ı3I6 dIÀĊE‰ÌÊ2–”§)÷rË÷ÒşIçm$8p ½xì'žŝhyİ\hLÚÍ“—I£·~"v/Ö§öLŒV#•]ío°'ckêZŬ3’]F—ÄçJñ|ËÓÑĤ™‡ÔÓ¤êg™×­uÇ}˘˘¨ †9v ËÌ>™żu<ÏâĦ êUU1>0„{fPœc”SO¤½ŽË$"èB5·1`“‰ J€Ñ37šHʳZÂKÌH­j´5‰q[*tşcF†‘CVäÍ%"PhÌéNkĉ„2:FO$)Iu8ëÖßjŠŬ*)]Éëîîî~“†ıc:ĥQ ´Êh?½™²áú?+Dû™µQÖï(VE*a™/ôJ ljüĞŬ0Ö}üĴʨ">¤Ġ$ż!b.T –Ċ7!) !#RšUQ”ĤğŒ”êLê[Ĵ.È)!oYKéċÍêg566“˘Eäˈ9›ğµÈܜjQr&-“#wMÜ+‰Dşt:`ĉġ55¨#’ 9-ħˆìXʂĤJÇC•Ĵğ$bîٗË$!.4XišÑräIyğ·QŽ÷–ŽV·wĞÖ^K%i”lş½’_HŽcPI5l%°Wĵ²÷żú™JĞ­²H…’A¨1‡‰8‡÷ –r"ÚFŻVXôE4+y ²ÊK½8aŭİë“.ó•óuŬˆ›]ó0™/êUŠÒĥÎŜ]óŜŞj{Ŭï—Ĥ‘`utž‚Êĵ]mó“óĵ9şóÌï6kışP‰6ĥğdÚKê%vK“tr˘t8š5ĥQo[ż;£;Î1ae)tۍ4ٔX”Rs¤sşÈYPĠRwŠ˘Ĵİ Jçƒjİ€•'Ħ%)Ò*"ŠIòË0L$ B êÄ`0%E$Ġhœ-^Œ_„—šĵLµo—ˆYyX#Żşżĉ‚§^;İáÓhhĞ%X|Ş=ѳujⵒа¤B€P(QB*@²@€yô'­“ï5KÎ?˜j.Œŭc~&yë$ÙŭŽù;;lñö™ıiWWé`C›žĞi µÑ ”˙ ĵİB`èpBÖ?hÑÌ"e}@áÌ™§j}Ş:8,Ç4Ν²ĈT-0Şĝ$ PòċlÉGBċŬ“YÔ¸ŝŬjÉnGMÉfĤ4uÓd|sİ\Qħk0úÊ#V3Ş—ç ĜAŸkYŻıĜ< ‹>½Í\İ-÷Uh}€UÑ{+‚òuè‡tÚ#îKOT 0è÷4/ChĦšÈŒ:qAĉħš%ĈÔäÙXfŽ@;G ݈8ú`kM÷çŬß­z‚D°…˜+*²wR]¨^Nê‰~ç"Ż5^)lj1*7vI,† XbÂĞĠ5GB UžlûÛ › ğúş_j<+'ìfçÉŞċk–ċ)*5sE­Ëccjĉċ\Ĉ§u„.f+’eY&Yo²ĝŠ.BZ…T’E˜emV›Cœr^DâHí;èİàÑŬ: ÊÀ@J‰0V-­Š“QXĞI­˘M4T•&KEĞšŭJĜ@ù4ü[lè€ şÏBwŠ˜˘ NÈuƒ"`iêèƒĤtŠx?'Şut8ÈŞ3*&œ@ˆ ŻÑ·Q5Bkú}wsdŜWÇ ż “)ġĴí÷ßgzÔYïÉ£rġ3… miádş+b)K@BĠ]Vj§}D£ˆ<¤!ÄĠ ÈJ‚\!,°U䲘¨ħ‘„î{Ùi%í+×ÙC;O9(£!6ï@ .ċ›/j.Rt(]hßehÄışZ¨áaħ)À³V…4Ġjİz0½Ĝ;â6p,sÉŬ&Óĥ"ü(ï!³’ħ4֒´S‰‡I÷$kÊê’ #/$ƒÉÔ ġÒkğoˆ^5bu³­%-inÁ>Ì˘xİË0Úvx Ĝ쉈:ĠÁ ıv|+EAF ci+fe?^£È=Žç~8Ĥ!à¸ÁÑ :/§seVƒşğFŽşĴ5Fl¨Ĝ ›ġwuFċ_Óĥ5Ĝáqï] I&7’‡G„Ù<“|™ċrúWpHŒ1 ;ĥüGvÓ–Tô%)—Ñ;ş (šƒ„žÜ⧃zL 8ŠcLA{Ĉ$ĥFôċ™½i—xYLĊ\Šħ*˘7WEKR cƒwvÑihäĞıTĉ^H[­~( 9ŝ@âšaeÛĜyDġsŽé˜ĉğğ§ì‘UÒı,ÛŜM:~aÓ@xñÑġşħ†W›ö=O/¨uLgĞğëİíöh³F"’ċÉòÉşĴÖ²”’S*×i|ZĜ͝INċNGsfç¸öıi¤Ôè‡v.ޝż@líÏüQîvS˘1^\ĜFÄġ>>FTLašêo¤??„GéçK›ÚöOEÊ*ÁÒyg%yïnAF³9¸Ñ½_‰ÀBa|y)γ žŒŝë‰Ó„—Ï[LO*5¨R-s˜SÔ´<ĜÔĊ)à‡žq8`íÏûHŠŽ'·sîSԃ¨°‡Â|Žpwı{’‡ĵŸD|°ÁNŜŜĤ+mڏàD$ wS§n@^  ÜzĊ‰ÒD÷ŽôL¤yA’k1Jj¤ä0óîž'K]³"Y£†“&S$]ĤЁR˘2e*Hpm8yžUíÙàtĤ€ê‰ñ$!"G8ÑG^uUΈVË,E)jÍ`ĵž÷ ÎÁ|u84/~ÂöèlÎìĴ+ëµċäY–m/ıU¤ÄJTB‡Caa*§ÙuGħ:Lj/ ŝVWÂğ2ğĴ|ĥS,ˆè„{ĞCnßgĦefşò  ğ!Ut]‡Áîzé÷X‚*¸ùéĝÚ6€œ—ÍĜ“7Füĵâ‘Ĵ£(ÚĠKŬU‹…=7k]ACk‰îÒ½Ğìpż+Żşux4ĝñ!û1dtz¤£,Ì"\MmyôìfŸŽħàĉ ĦşšGG¸vÓ§L ;•€ Ô'ĝÈpaq8h„0¨Ñ*Ĵ’!u*˘Ê‰0şa0ŒÍ/RÖŞÁ*–¨˘i‹ĤF$X²Ó‡’fpèÖĦ䊧“KŽsV [°&Ŭx@ß –q‡öZ2iOlĤM£]²g-ĤÌFĞŞŞköĞ‚J!ş¸ñÀoFÍÓI†p…‚ ƒÛkî  :›„/L>Zr%uî‹÷r.³ıĝvNßÙÔ5ާž,SRß§_OĤÍljmÊz˙—àoàó„Ò=ÌOĞ[wd=ŞéI)ܐżİ‚428½ î%O\â$öKDï_tV]c·œÌ‹NZq‘3‹ÉI3“Óħh~Ž~;B0Ñá݃ĠU$VŸĦÏÜÍLzàâ¨U! òPIÊ˘ è˜Ş bZTa% hXP…‘À|\›â4)”ÒTôS‡‚qSş)K­s6¨ŽI‰èD‰eBOş¨z/ħÜU~J$˙3XrÛ=~ĜjĴ(‘…I#FĦ%BU i­Y˙zU˘‰Eçêçxw÷NöàÄÑETÇşUBé>„ĦĝK!(P JRAjD’ñ•Š?îŝR@KIbîAO41ÌÄÉR³˘é‰¤âSĵĝg%$I˙ù}#uç¸gxÂ,t}ŜÛ÷ŻÉèâxKAKT×ëdh×a/cËè%9äk k9YA8I/RL$Z:6ŞŸ%4Ǥa<$PĠ—mÇĈëI!3=óŠĜè†zJMûG)ÊM’GndŽÇĉFèLL˘dyÚIhžrν~z|™Ùŭ½y]ĝ”İş&ĝúAıARċ%ċ×K2'îd9‚Ù…˜b˜CûNŭ;f?`äÄğ2ŽKDÑ[Oħ'ÈdBñÚÛSV&żŒ Ġùç,}˘‹q p„’' 7³çf idĉÂ*$`ßĝ‡)§¨‹ÔÈL´W ?³­tŻ1\bÌħN`˜(j\DÈşı£B¸/êäD(]Á`9Ĝž•üíïı˜kœŭ?YWÒĞëWMvT2(ÁQ£L‰$÷v9ğŽuĴĴ`XàtÀÎñ% 7¤97œ<šç3)ú:5²q"^e#”Íü2È%˙‘Ŭ˘Ż{uĞĠGK´ŞĴD ñœhžY#ÀàˆŸxNú½’x/B=]ġÌ4ʓÇ&#öàr)viÍJœ fÔDÎKÌêá–⤁/€ô8ÄX:­DPíĜĠÏítäÚÓfk^ċŬŜ?֍•í˄XD¨5çìB¨!ÎÇĥÇà|>oàS :BŝWÜöPàċWägtċ@úö1\˘ Êż3F…Òĉ(Àĝ'€“~›çĜۏ#H`ì.‹³èu}ÎÇ`èzĤ½T(Î³ŞŞP;Êöu_ÓüÎ!5]QσGeç Ù½è£4pzíÁĜcżDÁôCË=QîtHo‡G½m¤žÔ‘}bĠT™85^Ĉló’;˘í3~ĝĠ'ĦÎ˜gez댎’’4Fˆ‰œ~ 'i“KWKÉ-KÒÉR‰J„ŭb\üaöecDŒ*Ÿ‹ĴğŸ %HàCóÒIÖĝóÄe?†ÇİËĥ:Nw(xÒ¨İİR@_UÉMĦ­U½ŠÄZZ‘ÙĴI„‰K„á$·wZí#dÛWËĝnCÛÍQŞĝÑG9Í]W]yh¸MîìĵЕ˄NŸ=ÈùïiÑ;Ö_͘9ĈeDaP‡LÀĜ‘ÈBÁ˘+" ’F›!Ë;5ĉžtîìQG•Ĥ\$ ´°2bYŽġ Âċ^jëI„¨jċ!,nˆ ˘ ÂĠĦ@…UŞœ0˜tˆn-âDA½Ö´y¸ĈĵĠ^[nĤŞġL&‚àĊÌ'r `ÈKüpM–h_ĉ#\ £—Z$.àı JfĞLAG€è›Ó½¤Û˘7ĵv–dŻ2Ħ’š­Uh¨kK,2Q ¨½&a ħŠÙŝWGâm JĤÚrQŝ@à¨ìñj: IZh” ˜%#D˘hH½{Ż]×Ëf­tÒj“Ù ÁĦ€Ò€Ä#jÚڗRöÒ%ÙÂìEYbT²>ôğ(€˜:ğĊ¤CKv%ˆ4µC ĤtL…¨Q"ƒ\Ş˘Ì˙°Ñv!aċj5İêÛÛ}|ĞÖà€e[ŒœÌ-†ħŭÄE‡WİÉÑbF1ĊyÒÜ[^èiS@ñÀŝÜĜˆaĈršNm5c>½dЁ”ĵ‘Yév’BnDH•$˙àDŝ~î‡ŝ£*ÄT[áhYB‰W‹äŝíPŭKr***”"ô¤müÇV§ùüt§;x[ĠcĠá"C£rr8S0Ñ4”ƒÀ ‚ $°eeĠİ@eBüN²‚Ŭš×*¸enÍß(½@À£YuĝŸOùˆ‡İö?qĊû•;#ûRO|>óêökáñ“àûʒ?†é7˙cT3K6~N}O°ó9$Z¤V„(Ş•Ĥ­É­%ާjż8ç##ñÚ!É[‰³i7K Ò˙—g…G?âғ…ıobĴÊÛ§][wTïŒÎCìċÙıN[_àz&İO:̳ÈıÎ;N­ŝËÇñyúj<5ŽöÓŻ(”Œï#YbCù&nsÓ:żlx³’U.+€y-„ÉwcÁŬd íûœJŞŠ§ĥZğ7fò[ ™•&Y3ĵĦ%nŭŝR˘›Š£ò‹—ŠŝHnwq+I|*G#s“Y/Š“ÙœóĈçxrğĊ;ùŽÌvbĠT*ŠİH*G–ÜThíJxğ:Iˆóe[µí\Ÿ“âß Lo´§Ú˘İ´Ž²^şeĞW†ı‡„9ÔU*xTk2ß)ì°Sü:ĵ‡š~H§ärCÚ҇’x_2Ùĉ¸ Œ‡ĉ ½Ùıٓ2Ħ"ŒÔI’]#ç)R",ËfRš%ÇI·'F!ñU,§^òñTğAVb‡š 6(ühgž{żû<+^‡ûϽƒ­ö>>ç |§S‰İóQ´…*TިĦıIP]#Cħ(^(wuÉħğĊWuÒÌÍ(äÙĜÉaIœ‹D”*µ˜Ä%†Ä‘˜ „İ Ş()”˜˙=lŸrBûɝ:PöœB5ŬżÂXRvEި²=÷-<5 ĵui JîòâÄ8''ˆtôÛ$hpê˘r*!Ï:wOšÇe˙$6Nèß½o%Hm<œû£ }z:4†h}Kž÷4V˙ħîŭWŝ ˙ÜĊd™Mf4t4¨_ÁĵÀ˙€˙˙˙Àü!‚ŭbt @Nèx`ŸGCZ5Ħ^´­²”2*£ğm­_M:eJĥ ˘£žĝ3ÓĠJRS ĥŒ;j)/pó½ĥ҉ĥh<>ïŠ*}öûÁÜıR•RJ·ĵ½Áì ë€yŬÁŜ=uêUPVç°{ĠU@óĜ=à(ğ´izÁÇ[@3 -BB ËXPU[dQ Ü8­DTÓ ·]ÑÜj">ÌJDĦRAT×TĦï|òH@€ PjdÄM&šaDb)àšİD™44êh4Šx¨‰êL€0LbM ’h@zŞ"hjjŸ•=Lš"‘54„d4˙´‰€üÌkû”$"ÁŭÄ$oÍúíßĊÌìżÏù˙D?ùñïġ·˙Ëñ£·\œ:¤_#t Há',zfP‚"5ù„8Bö‚ÂrŬwĝ‚ƒ³înûÓ33333333333333333330ÌÌÍ/3333333333333333339_ٟöŝÁŻÔgݎÏN7ŻĝéŭZ/ŞğŝuсĠÒ˙žCi…yċàjikטlğò…u´,väd£ßü§ù8ĞÌßûÏ1Ó(Ê$@‰Â˙‡qü-,ĉ ë½Ċ Á½ÄƒGêÄ)ŻŒ`:x— ŝĊì@~׆"ŸôfáI½ş QĞÒÑï’#ó¨ûx/i"zŝdoò*J%·ûíŻÏÚġñ×oĊó‹'ÖÎĝçĞ–”z5,Û^ïhïÚ'_'ü‹ıñĉ—R„0µİ£Ĝځ „”uĠgŞĵġßÀöá½ß1ĵċŭŝ”ż)$8Úçüâ ÇÁ ,JœĝDOċ…XŬ×Ïż_/{ŜlrCçċŒÍ|‰9Ö,Kmg”`ĝ4xŸğd˙ÍßG\OꞂÖÓy~ùÄ£²íyXï˘""" ‘ŝĉ)RêÌÓ4'”Ŭ^ì żĈü :ŒCÜ:ŝ9ÎÛî÷½ú žô$ŝXÌì)~§Í­zuÜ!AX›ùmĞšäÌÖdħŠW´˘ÌÌÍ5Ĉ*ӷыìs•Ğz Ĵ! DFî†êË(˘"""Ee+ߝxİ$Ï=üĝˆ‰ëm~ŭûœèŞ>™*31ÍvGĦ{ó‚”çáL]?9SÚ'ĝ†ġŜ04ŒdËŻÛ}mçĉïös­ħ¤DDuú!ġqŝìny8gôÜç_Ïïùû8âeG€NÜúëëçëë˜Ĉ1ĝüà·ëĜŭû£˙u{Ŝŝt­ž@ñ)2£Ŝ\}C‚œÙŭĜëˆôRNdòŠËŜĵßöîɍ µùO܈Ğ;´ršRĊä}ŸŜ³óëñoŜġ¤„PG>Ğï_+Ş;×âxEInġ›d†ÖŻĊ?‘÷_ŝĞ×gż‡½˙“ûü·şüßĠMÇ{™ßÑŻ`N3§?’PàD?‡§ŝŝ¸Ŝí pÇt˙ħĝ³ÚŻŝeĥާÇ.Üŭ7Ą/úU‡ßĤĈôïäÌêô{2&oèˆw?tc­Z·3?ùZ…ÇXó½{-,òĉeèjĜÑ~÷½,D[3 qÙ=un˘ŞŞŞŻŒF˙tÜÌÏżïgó{Srj™Kĝ ÎyíeĤë] Âoä#ĝ-ZÌ8ÏòÙ>ŭ~Ĝ,ÇÎBĴÔ‘Tìz§4š}mÚß=üŞŞŞıpğuM^m>}zùù{ŜûġßU×ÀÇelÛĞ™™í÷ĝ_>?ŻûDEj[ŝĜÌÄÄDDDDDDDDLÌCğ³KĵĈ1ŒcïBƒ<€´EWĥoEéġ!ŭoMç}Ú$6=€cvċÁmÄcˆ,ù‘ŒŭèĝGüŻ×+Ô¤ĤÈü5dı÷ëïĊUUù>ÔĠ“îC’œ/~'/ËDBß~ù³:äğïN¸éèHˆô†Ï^ ğżĉ+C39Â{]½ï{ù¤?<ĝöż½óÎûçĜ™™™[ê5 Ÿ´{µù~_ĴQ²ÇZĈbŝÑ"fgVü™3ŝlñßÚr½rWÙY˜K÷sûÖżZ_?¤={ê\<‰ žğàŭÏhû—ïŻTffff§şÏÖMBufʆϨñׁħDyÚÈĉ€Qŭ@bnŝ°˙y”xĝ{Ŝù„ܤµüÂmp÷ş""$Ż#yĴ£÷çĥo„—óĥB?ҊLˆ™GŬŜáßfǍ‘·cêrBèeıèÌÍİë×܏‘Ż„ÏCŭšúŸŸïžúµ‘/Ïéóĉ^€—İwéġħŞĞÍ#2÷ĴŭoĠĝÄĵWĊŜûà=ïgĤ=th†‰oÛȋÂü'~ ?á¸ûğ<Ü&AŸŻaÍv­íş™ê ᙆ“M§53œ ‚ 0h™·4X“Šf)­ĵ/Ï^~Ê>}&ßgjż×żˆŜ_[MŭĈ,Ŭ¨Ú\ĥ„ĝOï>ËżÊûĝ/ï÷Ŝ5Aĝäwïß ~Ü*_:vĥßÔô•Ôêà:Ŭîğ?İ|Žġġıx ”!k~]óê|û÷ŭïċUUWÀք=ÁÂ>ğĈ¸ŸÑžœr½Ù=éï{÷ k*Ò:ûĝPü ôñNĝ!ĉ0“×ïw=ï·Q8 jìQ‹“EéŠúú÷ĝœ~ÜWĞĜYßÊ]¸Ü/”÷ñĊïó‘>秏tĴ;_=‡|gg_Û¨hûßĴŝê—Öĝ###/ŜĈ7Û{p•ġçB' ŒŸDçrŭt.òëĉŭ6ş^Žôüù¤—}ğ–]_ŝWïöRF“ ù,/F‰ÌŸÄ]èzĈ˜óme÷O›8?áŝßó!6çòoûHżtÛÔ}½??Oħiß˄bžœ“ü“ñú½ŭıÈï|J'ìıïï§Ó|™ŭŸÇÁ‡`~;ë?_noŽdyŭó‹ ċ=yŝœ£ ñżâDŭO“ĞôÖSżŽp°yŽä˙HÜ|׎úïë,ßħMVsœĠeMjGµ·ġÏĈĜê ħìÛôüĥŞfĞ)JBE23@Ħ̈́ÁÌĠe)HH˘B÷*[^Ż{|ħ˙ŸéN˜Âş‘ÛrKûġ™ü˙{:ĝ^zßóÄò:(áà'×ä7_Ĥßd~ğù·ż\ġJG%ŒcCĥfi45£+ğŠÌĴDCı9'ŽìĈ ŝçğŝmOä½Lóœĉ·ßLÌÌÈ´ÌÌÌËĵD;ÌDi™)H &ffdZfffeŜ"ĉ"0C]f˙˘˙F0Ċĉ~ŝ`= ]uŭnŸeĉ›ú‹]FV@x§m¤ƒô{Œ rúCiĦ )’†ô#ÁîWßrjúփÄĉÏ>♴ö:—Ea1‘żcœvéŜ—Ż…ŭ,jAsäY󷲂s-`[| !%ۘS9ƒQĠš<„‚*igàİC5ÀÀv ğ;†˘Iµògœ\‚PQŽG gıĠi³Ìu‰@kAâ}ïoaÛ׸Ħ”%”‹ĈfzfĈ—2-A;Œ:ŠÊ%ÔëçÑv-<‹™ÈË|ôÙ Ófi€‰$yïPԅž'vbŽìâÏbċÓĊ ágsÌ^?K† ßšÙ9QŠŸ9üȳÒÇ~Ŭt–Ü×Uw¤@Ġn¤û2#’é×ež› šĴÑe°G6 Ĥ£§n+ˀhIŻëÈżO“xŞvğ×ä#£´–\Šä—5öóĝGİš$*%qŞÔ˜İëWÜŬ&9ìċsI‰šm÷„Ž5;ܒ<âl.ÜSoQzÑ6¤( UJrdV‚B$Y˜§ž6Mè•5ĉÂĜ*Ĵ\ĥtĵÒH÷ĤC µĵĈÁäŻ?׺Œ†á$z kC¸ [ôİ_Ú'cG zê]ŞÑéyĜWx3u%<£ˆĉ= Ŝ ÌqĥÍÌBϳ<(ë%¨İ)éiy9VQ̜94ğFu{,ŽĦ”Sšé`ÁPknO Ê"R²Äğ =ğ:J²f%xÇŜkŒâi[eìÊÓÄVrµäi 4Ŝ†<ç#@?ŻÂi罀À×ÄÓıżÒ賙íñĉpC0Hĵí ĊY×7‡~”Œ‹İ­Ôfé÷ŻZ0k½~/VÛİ‚“['yyĝN×gJ™™àĥğXaŠÌ?1e‰è$;‡ Üĥ2€¨P´Ġ¤HŠL .`ùk/͔ ûzİNácÓä˜EiG³5×ä&ˆIğòKz"vœóK ċ0ZÎ1ÌÑ·ş2JzşU—Éíĵ@Ïp=)Ĩ³d·GŻ`gÔûpŠôŻÄĥIÁÄŻÙ‡ˆ„A&ŠEPR7šĤŜ‘S3–’¨HáġéúPÈĴ`žtQďP—˧ĦÉFù9ĤĴVïI–~ç'g’tœ@Eòá͟€™28@YÄLí3h<µċDz|òĉ$\_VuĥÏĵ\q!…î)#ëyDtHâu/HÀĵGsŭÙ3†’á*ĝySD>!Î|ìBsóQĵ—O{Â^Œ¤ ~ÜVqŞ8û NÖKşE'+@tĝ˜ëŻÓŒñġdŜñ›–VúŠĈtîJġ½ĴÁ4ĉ S’Ë‚´–-RäSm+v7Dچ–2uQ$C!„Ñ}‰àeÏ2ëˆôoI‚ÈP‹ĞŽL–y齞ġkG—ƒ-LÊ|òM ahÉ-,‹"ižŽħ×ÜöĠ\}û°¤i#vb˙ŒÀ°BRÒRÙ‰%F’4’Ä .Ò%ĉ’;@ƒ,@o0€§8ÔQ :ïĂO†€+XB³Úħ– XbAV•݆ÚŬVÚ-vmok‘·E[…Ĵ6$.̆pÒ sóñPû·ċ²Üü§żàçħ·zë”ïĴZR2Ŭ›5§Ià&N û’Ù‰]€›İHH–·hòżíT€³B fEkۊ‰rÄ^ Ib&!&ÒFìHžwr€;0EšB­ĝµc[êĥşµŞ·˘ŞáĞ/n-PÁlĕ˜`.ÌZB:`)ˆÈ9Ô!aßl;.ÚaDFá4=ġÇ}KöE§ˆ %ñ ­P‘, hJí .ìHšÂ@U€bÌH´)hG—_°6QĠŠŒĤô’Ï Ġ-:uĜ›ÓZŽx­Qğ 5KmÍU™`¸ĵ6iQƒˆwA×kÛ°,ìû|-$ËÊ)£~q'M~fç{i-4L@‚>m"Ú°˙Ğm×L1"ّA°Yšœ|œÈĵ!xùßò¨ÁˆŻ›p4`Q€Ó}§n(ıï‰1 e)•w (}÷AïÛx6[Ç}¨À\r‰\ >kî;XĈàs#ĉ‡%EBû2ğR7tÚ9jĴYÒ*2Z!„m fqÄY‹ Y›1Uá‰CĞ*­ż3[EœŭEOGĞL>n¨°†pç#̧Ö58¨7òÜıë:Üȃİ”q·­glÀ‰êoŠT8ĠŻĵÂXÄ—ŽÙpŭdÄI²=ßF$żŸl>’5­ħ6‚äNë´Úb:£(X×Z¤$kiWğážĞ îkYSH8h—³Ğá£ß8á‡[bôċ§¨lĝÎóhFw:¤†ˆawŬ…š-Ô W'@°†á+o×Fĥï *í‡là<íÜ6cŜ\ßÇŻZ·½·Ê[0ËAF(hŻkgµB÷‚ì5öiĵf:fÌĠĞ&çĴ@ÚX7„H@b ;ïëÁŒò7uE„q~rÑy<÷ÔuPƒ 3HS½táÖ5ĥaß×{ÈĵOĤ%Ĥ/Ż-|}ŸAĤħ11O qÄ ³AŜ™§nÛ×X³mÉÛjÓS™Ô÷ÛúΰZÚ9aVĦ†Ÿ.ĵÖjÒ% %Ñİa†xÖ¸-›£|8D˜WLá„z0+h c˘3(xFíCğŻyu}â—ı™ĉc£Ŝ!Ŝ|·5îd½fÉ-;²›Ì•b!ôĝr×\A7Ž˜KZaÚyBÈdrÓ÷ĵ \öĴħĴ_C %ĵN-™´@Ô=ÚÛh£JÌ[44´O5‡-QÔ4bÍoĵ³vnòôYÀx JŒYRÌĦƒoÊXìWœgyğ3JjváìÄCBlbRöĊv­Ŭe‚ߘ†6ƒjÁ†ŞÑÍ`ñğJí7‡Ĥ¸eX¸ow‰şßžĵîs¸€L hKb:#żWˆñĊŬÚċ„´iÒ. àŬ˘6êN"M ‰ƒ½&<ÉğT½Ŭ1Ù£Dt|âو1Â)|ĵ½§g"Óċ–f˜Q„ĵ´k,Ğ´•p ôˆĤİsÙ …ĴħƒFHD™b:Â3Ĵ6ßü9.Ğ]üùŒŒœ4uĴ¨cCúljİ7YdàI?ĉëù˙­ :ï˘Kàäν×ô9żá~Qy‰Ĵ‰ĝِ…4ZK)B,Pq„ AÈ8GëċóÈ ßüôíàˆÈ˙ĈÎ˙zaWÑîEHmÈ£`ĵäÓpë෎Šûs ·™œ_˙™×˘ß³-ċÛèĈ¸{Ŝĝ—ŭò˜ßĝ[T7ò߯şLħü„§\ç=QĦŭ‹Bxƒf1wèÓĠż{Qğöˆ>H—…r²7Ó%;‚ŞR:žá¤z{Ŝ”ÎÂĞ 9~˜lä?İ=Š…„f#`´şüꌃÌ+á5RE‹‘Ä–oık|—"|ó„ċg]*0‘Ïó’#-îú󜤢-0;ĝhì~ÁûHܛ…cQğġŜB2Ö뇙™™‘:'R pÌoÙı‡HO–Ä÷Ĉ!˜³gvGx@*D³JĤÚלÚÉŝ=ĝ÷ïÚżSÛ²*2ŝ“:LêŒ+Öû™b„HEçRuˆ!žÚ'Ž3ê’< *Ĉċ   •ˆ‚ĝŠóGhÄĉĥ¨U¤[7˘jí8) *`’Šıˆ;y;tq¸â9ĈD…q/ŝ8ÌhÇ|hä(Ñç÷ĵ[Û²£TÚvÙF²×{>Ö‰#ÂÌZB:ĉœx`nÖ pġhQ&°5·Y.ĴÍ ³£İğrwdžŭùċzÈ^†^şĥËÑÒñçƒZb"‹^"“5+I`]İbŸ1f/U€oĥ(€ğ-‚6Tĥ$Ĉgèɉ?×j*HlÀŠR!êô•vKKa”h‘£Ö–¨3Ïş^N“òVcnY­ĥó´ÎyóXbíŒâ5‹ ŠXYċĤƒ‰…KA^+=4h—­á.iYÁÌĜş48—‡£î‰`sbmĈ ##)$wâ|áTò 0P=Öĵ(nÚÁxa ŠĜû?—pL~f{š4aZŭÌġŻj…%˘*ÈJşôûĥ÷³œfğQ³ìŻZ} š.і4†Í?V,Şy^­ıÜôv=yÑ7Ï^xî~~N>Do{ÍPŽ´˘İhĠ+>Ide×íʙPóÓ\r;żŬH£oÄ-4P&4@Lœül†àhpċcfÄŻ#˜cËŬ~˜û1óéğıé!ùĥĊ˜– ê†ħ›Ż£E*T”R—ġs'˜lÖeókQ\ Ó'hŜô’íÑë&^ğ[˘~ú÷Î{ç^÷û]}mê–-ĉH‚\'wFŠ0ŬĤâxġŲ’§‚  lD–c™Ŝ$vWîvċŽZ‡½&ô|ĉJ´Uw- r{î{·ż7^GhuçÌ=Ŝßn="´§5™×ÔÀĨᴍ ‘Òë“?§ĝtuj×Mà€şñÙ4%òĊ½o*sS‡Ï‡û`™ŽTsW.f°Ĥj‘—*(Ü"Ew-ĤhıVáAbiÉ ‘DµeZ !R%%a•3 Ñm BÍB]Ëh´…Ü·)Kl¤„‘eš4”ÉħSD–lњĥ!˜*-ƒr)͋AÚTî[DÌğ0K²`‚é”dɂB1Fl)1dR`]:›D²MMSJƒ7!UɔT„”†]̳`ÊLİ&gùş$Ŭ1@"Èl$ÛîU$I† `'$ FeL£v°„ğ@,(X@£4ˆChZğ˜fMĵŞÄŠÂÛ²/8œaZ²$ÉF•é"(’K0Ê1R&ŞhĠ²e•f-Ûd„èáHmŬ…FŠ$‹0¤H$S(İı Èw4hZ6ċ¤à⢂ £1k*¤ċRT¤Q܊*¨Z6jš6‹‘ŠıBêž*\a+˘‰…)ÓNF ĤĤÛĤ•D„E7%)sJ­Sm„µ ĉ˜@@#˘ÄÂI´M"-“%ċ’Ë m„Â&H‘5l&Ŭ\•$C@” HtiÒ.Bé™w.pq(SH2̂X§JZ@ Je€CFĥ­f`l˘Ä2L:1*1$MK)SI ]Ĥ(‹,ÒLHT”ĠV*U52$’a)0Ĵ‰&ÁLËĥ$!Id›š¤œÉÒv ›µ$é I£†…¨DLŠ ´˘$‘‚ċ8ƒ$Ğ0­Ye°€rE° ğ–ŞE@ @ŞFUI@]!V‰š)t„İ% uF‘*ŒV’jÄə…&™,°t”›àħLĤĵüĞÄŭn8ı^~““ ”S˜]íûĝߎÛO3Nĵ<ĠĤîí~Òa„|"Œ~ŒÙ²oíTċIŸ4ĞĴ1 ó  4Ŝž÷„m˘ĴIĵħÑ,5mAVÉ1Ÿ<éßgĝÑ\áEU]mš#J|2+j;KGdEZ~8š@"1Ö\ ¤Ìĵ‘$Q–€ÈŸ<öê7Ҍh($îTŬ@&"{ëëíġ^ï%ó)=†u/Ɉf,úcdQ";dvuq/²™@B\QrxA0ÌKJ1,ÔíKQH aÓJ0­ggz¸0FÏTH³˘;6dù˙ÉÛÒfÈ$ˆ„t}!˜ÙŒù.=-ĉċô {÷Şzĉ§ıyíw×´8ÁP4Yc„ˆâWDFobًfĥh×P–ìGQ…X̳µGw{­Ŝ1Îp=hÔàˆ£’ v–QÏx=JĴÌñ!F ˜âQ½`*Ö9‚Œ04:̔˘ĉxë‰.σ‹çm÷Ï=°²g xËUrħċ–ƒĦŞF [ĊîŻ½\+X¤ndÉ& 6Zċ÷mŝfóž;9òsÂÀÀŒ`Ìɵ.Q‹0“›hıï¨ÙÒ‰RŜ˘-úĈR¤Vŭ °Ë Çŝ³•"+½´B*gY33Oè*Éŭkû˜˙R"NŠ8š&ͳ´ ¸HĥıWE<’è°%ĠH3\ŝNJ~Ïšé‘: 8Àĉ!¤@udòò5trX¤ÌŜzgvĉRÉ^ò ˘­D;×ĵ*qî29Ŝ¨Mw—[ĊÍqž1lïhğ9_ˆß1Ċdċ˜8¤|c Em{İlĦO Yès–0­"³ċĢfbQYŜ͈]àê.Ĉu]˙?şp—÷únpxÙ·J=mÛûù÷a "A;Çp‡ƒ‘5Òu_7üuxÀĈÌQفUÍL ™Ï¸ıúmÓ*JO1ÔŻq‹ RotA‰ˆBĉœ.Ĉĉ'!d°†ç“‘ċGk/.—EZ=FÒĠ$StaĦÁAûçe™Ĉ`ĞHË+ ĵ7ĵ,Ğ8ê² žñ‚}ÍkşâıżLEënÌ ġY8>&ö–Ì-´#Lğ8ÓŜFòÊ8sxY‡½–pÀ@Ɍs}q×móOëĠ=ş³…Ò+aĵšÚk•ށG²Ë×U1ÙĈP#|ÜĈ p˘Ièö%óU0ˆ“áì:@èâÎĉ^óÎ9áíWzqĠÈav[k’³– ƒÚ²+›xëĈş.-­èDŽdÇF0y´H>$I²‰û™äü½÷íSĜħŒA03¨zB‚‹ğċğ•Ċˆ’Ĝ0Q]ef'8o'úêçïVE ”˜Mĥ?Î1‹ZÈŜĊ‡fòݳocÉŝ›lŬi#p‚ßB/z”•=aŜJÙĵ$‰Ĉmû½ùĤ”½:0–,_ÉKÒáZı 7€°ÚXŬ‚nCvPÉ-}Ë8méêUŜTxµXs=Mş<'<_ġžĊqĞ/>à–z ]<'éä™JÏ˒ Ç ĤÇè(ô şħ: ËyçÙÊë8;şĝ99(Bàc n^•ÉŻV‰ġy7ÒвŽU•²ß%Ä*İ*ùw7Ê ıÑvÀeŜáµĊé•XÄïĥ}9ÁÂ×·µ ħ8£’êğ*,žÍş#‚$^ P>ĵï*îŝ\ÙÁŞb̑ñ#ĉ>¤Oâ–ħx—Í"XËïÍï[$úŒÌCñßż{|vAó_9]Î LmAĠOIŠĴYçžoĈ‰D“œqáġı‡Jrôŭ m]ßËĦŽ—˜ĊëIŞPMˆôŽĞ)ÀíéŬĦimhç~ĵkVë]÷ġVĈš£^U× zuG+µZ{mÌâQ˜„—0ߎx˄IÌŜö½}ö„Ż|ÊÌy`Ĥsj$vuÒ²×-ħD§‰ žıĦJAߨ÷âšáœy…ÙѤâ(Ñ˘Á8lŝ)žP@3ĦAğ‘ÙD:µ}ċ9mż¨Šp‰U‹ÒŸ7ĥk_PUĤ&͌jäEk}ícŽÑ,>>óİ-1ĵZ´%ƒ}šċ+q ìO£lËËR5F˘(kfĦ”a nÂĥp4qĵ#ĝ;{aaĜŽÓq ÷­jı•^7—<ġ:àHŠ€$LHҏWa…=ŝnÖc"fÛ5`e@17óó9Ŭ65ïה&‚ñĤżĉ›€LFċqÓî²Ŝ|HUŠ›B£œB 16›VP(C¤*—ŠĠĊ£Œ=‚‰×{ò' “ƒ7ğ 'Y™İ69²ïdfĞK{ĠRġ‘pk&h×/=à]ĵî¸q+ò‘”.„ĥ ñ–ĉZñŭığ=àswhuİd` tڏPܖ3ÚĤĠ [;óÏ0 ŝWo/ċeß,š-?‰Ċ8½ïşÌ™ı|iPĉÍƒÉ yhŸ˘=F´’Íóĉ1ÜHx6‹k0Ĉ-Ğ5Š{/u‹"uĞQWP‰1żoyBkUġ| vÛ`ĞğeV£ìŻÂ˜f[>ÄÏkżĞò:ŞóÀŜgbDé­´vŝ=âëÄPD’Ñùd˙·lŝŭ!ˆâŽŠFìflȉŒb*c"‡‘4 ÉŬ1wDsÏñùÛ÷Í5½}ç=JşŞĵUĞĠÔ͎‘ÄC ´˘×8‡fğÒ}_Ñ ;јĦêB[;:Ÿ€ï @i6ɒVùíççîçêô|tô÷Żo1_xW>Î=J|J’;}§SÉFR•Œı’GĈbÄċgӏ!ßżS Ÿ]M•a ŞĦï–<<-“]1lñ1çħ1—q!Á-9Ħ xœ|9Ş^¤L#ĥ68ô3ƒŽÌ"6¸K(ÊÚŻZİÚ4”[˜u’½ïŒY‡ĤÏÓż&dp§)ò[ÑG²(şÏ’Íu‡' ¤Ù=f ópwxƒ£"ʉğħ[â"G­VévrE/_4hûaHhċu„+XÌ£î5rp‘8Ĉ&itBĊŭ³yœcë°> ^HĦ’1VXƒ& ğİşĦ%˔ıbë&[(RĆòQÓ>TqŠߪ†fhYˆìÀèèı£…r‰Èì"o$ŝGZş¸ğ½“`X‚NîÒHF„Eùçufƒšò ÖYëQ)êÖíjâ˜ıÙİ„,0˙ż6ZW'ž nß|‡êID•ùË4;—žîK ­ž=B€h’Ċ–$•f`AíŻ ş¤/4óß{Cô^ĥĵ֕­S^êso2ö˜CeNÔÙş(Z›oKÂ\\LŬ[oÄms-VQ3ĜŠ8a m˘ŬKäˆô0McIr²˙úÎ}\3èh€Ž°_Néy-VÚ°.ĵŻ˜ŞkKVW1nIÀKê܃ŸÒcŜçÜbà}üċ£B£ĉgßµbà òda`zŻş [á&Zïµ>é‹$›Ç ѳÁ]ĠvC^£…ÌžfO8òzÎáĥ(j_l"5ĴqÇŜـhÁë˘ì›2k˘'N)(@ި¨)‚Œ“çİ­EN ^ñA†í(@8WO‚uvtĊìB/áJ×µħÌÒbĵoÏ]lJİA3²i*èžùÙ}.èh‰Xĝ1Ǎb‡…ˆx ˙/Ŭr&f°D"]GYF"kÈğ“:ӄèu[™[ßge}A‘$Ş˘àĴš,Œ†É„lœÚ|âAb9Ô0äMˆ9ĴSkİïĊW,9'l ˜Ë^ĉËLĞßÄK<ċÄ2ììÒz€„vR@Ÿf Ÿj:ü4sxJP°:*ġPé[QŒнxkÎÇ![pÏ~‹ŽêM>ü“èu‘ŬŬY^ĜPÄCk\–şR• — Әï ëW*½3@j› F'²kĠħ–ĵ!ĉK2Rä[&ż.îĞÓŬiğ 0:³ş)l˘T2M3(Ñ$–ħqß|¸oETż­AwpaUpg–™fşi•šÚÑÏÑ Áêƒ30s£šĞôäh÷LÜÛmĦìhżÁ6€#è,‚êb nÑ(ĵ¨ŻÖ°ÊˆĝQĤì´@•n¨‚„ Ì",cs…`ĦöĊu4œ#uéÔ²-O×t7ïïß%@ŝ üv‚VI‡k›{ ÂċèU`@ĝ½KġƒùwŞĤĊ07˘Ĥ˜˘$-ĴÌÂdĊ‰à·­‡[9¤$”ÖíH';Zv‹WĦç¸t? Ċ‰È H?—ƒñĥLh@dS0@Ì™ Èjg½ëX²™Ĉ&hÍrĥċ ^ĜĜĈ8ìזŭĊ֎/Ô¸úÂÂòTĝŽŬÊGó Œ)ĵ~Ìzv d™ 6˘‰$i⠙Œ ^ĉ˘–q̓P,!°vëVa,Nµ#0ƒ–î Ž+ĤPœ  wB˜›°ıI]0ù&K†îçpà­|‚>Żwƒ¸„FÓ1—:ŒRˆÄ[°îôéĐJÄ,àLħ]¨[!rbE÷°ŽéGÁ ¤[eċV !0c1r,Š€ŒAâPµ •á[GyW}0 ¨ŜĠ›ĝċ 0ÑXX)OIúġ˘ÌXoĈٌiÍÔ>ŽCĦıO—ĵkÜĊ#$]ED2ċŒ“•l,”2:ċYf†J—x0ٌË?3‡/: T&rQEħkië%K–*dşfI­ÛZÁyœaŒ!ˆDÉŝĵ½$Ĥħ½˘‰{33}ÎqjKh™ĥ(VËa(—”G— ˜MQÏg¸ĤÜe3aŸOIĵ,(\;ñ0?P:'¤‰.Ùİ#Óo¨_)Ċ"‹™=T7zíhpÓ<óËĞñËŻĞÜàĊ Ó;œ¨//+",Ĉ@/Ä­ö’:$dPÉê•^9l “í‘H„$ ŝĜaŝ?ħt˜ĠêĦ  ïbö#v°é@˘àR 3ĞĜJĉ‡KħPާŒĞ–ĝ~7 9~ßĊzŒvÖĥb5EŽ5ùÏĸɪֈˆP&tê"wU†ws"ŬĠHŠêˆ›Ô;ŭ”êÑu›cǠڂ@|Ñ÷Ô§‹#UF7Ŝóß}Ó¤ô‡’gÒĵ*¨^ŭöI\ċF¸ (Ôê­^ Ä&SŞG6„­I£ ‡·'ħ‡fSİğâ%Šžîe.¨*h1Uża˜D\n€Fr]lğ˘*ıWÎÜÀħٕèŬ_°˘û  x”ġs•r³¨Ĥ'üż~ü;2³™ĠcĞW²ŞÙVñDO1ŸZjŞ[Û/úô6î2´Z~Pdŭ2˘&¸Ü†˜>à¸ô“”ĦD:!a6[&'Ô˘TÎÈQƒMħ5F½Ó8᝗î7ág‹ Û4£Uó”¤W|>ĝŬ yŒßÄJîĉ ¤¤ĉá\xġ*ŸĜ{ġjsáŭ@ˆ8¨ĉ½o:ï~Ĝ1—,#ħJ+ÄĴŞĦ ħ™SEۍNô„â’{hÏĜ{|2x[˘m>Êv0·²·`b³ +`v!%?”Ħ"Ó´`Ô0H4˜èŞŻ=¸ š fÇ´ü¤I|êff΄ˆ9½ċìÁê^)£*Ş%€ĞĦîjv1F*ìqš g›I² ĠÙ0ĵA/ïuµÑ˜Ş6,-À˜´GŸËí$á)W4™6!£YŻ#¤™A‚” ê?)¸†úMDŝ|-’™ İ%àšĈN||$&Q_MO°Û‚ wÑ:Sx)b^bÈ W;­µÖpfĊŒÜırÁz36-•“39ğ´`VэäÉùŞç„É•oĉ)[ë[NŠ–5C`hhdgÁĴf €ĦfDX°Ĥlšħœċ)ƒ364Sd`[…÷ĥùG{ıĦQo+—ĞVçjU’rÄħ6†o°˘ğ܍PU7FĀä FàjòYôKB­áêÀ€Üáfjû¸_²¸ħV¨ÉnŜJ.|~ĥÇ&äöĉA ÇzûËá~›¨‚œ& v áH{Œ Ó4²§Ş{IY*‹ğS”Â%aPá=£4šÇvŝÌ9"ö<`À[žfûÚÖ7~$2,*ôg”|͐ÑDm˞ßĴ—o\zng&ïġOöè'|J>šJ°N %4•œċĊU¤9ĉˆ<? …Ê]ĝv œ$ñ‘ŬŬcïxò(ӌİ"NÇo]*Ĵċ/ôÌĠ{óg½es4dçóĉ*Ÿ­ŝ2|ˆˆŻÙŜz_œpO֜iڈÀ…ĊŽˆoŠĉŻĴfh¨ĝŽSš*ÒŻ|*wùˆ“­?ŒÚÂfx€‰¤^ûl³=¤Ĉmä@¤j{n˘ Ü´ ‘UHÍı˜­fş×< DŬĉ~KíVĥ1†”oĈÓÊ8µ%&{ÂDĥŒġJ·"3|KtE•TŸ™GžT.Âx°ÇR´vݰ{úïfeQpEU3ü ġğ;żŞ‹)‚Ns‚ˆħyfmĴާäÓPE4uÖÁÜ×ñŝ :5+D ƒÖZ—3£*4Î' ÷ĉ ˆ–áéeUb/ÉçUÍ2¸ ğ—ŒôDñ2Ġ=Ĝ-´ü=lŸs%žmÊaЁÇ.Ùs´QšĠöƒCnùçĴU–3g3Ì6\Ħn ŒÄµ3B+ ô?³ëd­Ĵ]áèÔ~ñ䟝$9[8lën$ċµħó,½ž³Ĵ"8µ2·{êÍĠtDÙËŞĜŠPÌ|%ĈZ 7WUĥ#•uûğÚpwdĥİÍù€=oĦïP@eN— go^Ú×:BW"ċ—-ˆËJ#„ċ”bêyDš=•rPëWŞ[Vt‚c%á€s\tâfÉj&öäM“0”dK˘˘-*ÎÍvDNqÑ.fwĠŒ–9´“(–"|0‹”-9ÁÁ@èMQ²íıN^+t•N[*km-bV‹H" Ó@FùWGİĠË|èd^7Ĝˆh÷y‚„I†üŜfÓ̝"߁jpä ‘÷Ïr_ŜFv+ öÄxpĵ2GÖGìs+^4Ó÷>/wœ¨6²Û£²-'b‚ù¸%½ĵħ/¨³ĉĊ´ì($´ß"4U $;|1‡RŜjŠO_†ëÏáˈPċ8èÛˆ!ĤÖaTó:"Ŝ´i÷n˜˜—2ñÚŞñ\ÂvG*ŻG\Ğ]j)`µÊžq´U!h­MĊm7AèÛqÁX6Î|™‡ùä` eA?–Lĉı˜Ġ ’ ˜ÁúĊKcglÉC%êV³\·’jTİ&È.cCn˜$ 2)"`\J nµ¤–CÔÊÓm6µ^/Ŝıפ;,…73úG‹ĠàÀñ§éK*Ñ['J×q“}Q1•Ré%^ƒò‰=›áŒ2ñ%*ĤŽ<ǐ?×óí˘jÏφ§ż çkñ‚…l|§ùKyò)ûa-UBüÌô|ĴAÓĥıóBATĉQtcZf•ħÖbbmD\ß)\3f/Zn@0YÓp½\tp–Ĝ}i%Ù!™Qi´’ëçž éŭrwzB&Ĝ͔ϴ3ydNY ê†d™ı˜Ŭó;%St$\òސÜY*-A³•Q¸Äñ-SZĵPDŬDQ×ä3)‘Iż0‘­Ħ÷Óë Ĝ5ŬċR#›Şۉ&‡\ì)”šŬ Žr}àŻ{ˆ5Cœí ÎkĠVħžŜÒĞĵş%ÌÄc.‰H²$ZÁÜÖYÚî‘&‰tCvw [?T°hYíÔĠ­Š@$Êşvrı{ˆ^;Úlċ  ĵ ˆ)<à—GÛ"—<°ém ĝ ˆÖÄıŜı޸›[Üá­­‘É+â-ëĦë˘R‹IW6WŻz7ÒûŜ˘[˘>àRÜA⑸ŜÌ3UĈƒcNéÂcÒç5_pQx+9¸QÄx–Ê7x£Ĵm0P53 gµ­ ŜwN˙Ï&aÛ7fpĥÒUŠ%¤Ídğ]Ìġ.‘-ğßnÒfgĦ¸FT³Öë•^ĜwnîÁLkrŠìÖĠ`™šñżÏœÁš,fo´Dٙ›½lÍÌ-èÍDGxŬŜÁĜR³ TGŠ2Ù ‰9xçŜNÈÄ•&ċĞc˛„ëžyQ²"Rˆ‰;ïXBŠ"r‘3siÙUú˜h³Z4œa<Í´I=§:Ħòcœ:c[… LžePÍÌÌ˙ žŒŜwÚĊDÎŜòğßôϘ í“;m3şŜm}ȟżĞ/ÔÎ?3šÇà*&ä‹ôH˘=ZBG/ÔÌ äÓÄá f”Ï“YfŽhö6Rï|5EHŬYN5*İ‹™á&ZĦÍŝċK¨*(™ĴÊżLħžAUÙğÑşeàÉg›Ÿogi?“e­"ĥŭèywe^pvU½ó™şMĥ‘VrÑ} uÂ^Ìxëô RşïÊuW²0FċO‹[TÊÊí£İdœŽ”ùÛpŝ٘ż<ÛħñN:u‚;YHց_‚ħ,jÔÄMNÑa!TȄ@Véŭí™ù~X˜,:z 9S˘"†ˆħ–Ġ=ŜJˢD†hıIµqš× ŠK&Ċ•ĈhÉu|\…pCÉ&rMg-·Ż‡ŜxĜèÍÎ䯞ìo^óC6³1çâÖD99 S6żÉĜ‚„ûèa’ġìôMù‘ċ"µ<­Ċo.^ôÖı]yKw|ĞĠg;Óê–hJĠ_BoEİóy‚K```ŸQEċÍË­F™-ŠóLBñŭœA¸Ö×9p…Ĉá6ĴPĊ+ú@ïϨ(` À&ÂÏ4ü‡{½3Ò"%-­3ğэ×$̊gڙÚ%âäċMȆ„T;:}M X;PŸŸ!ÖÀZĜZYߙ‘ç"âNRû5ĝNʘ`xŞ?R #èˆQwWoA7n.Î%’íkDg x Œ³bğIOBJHÄèŽhD°I8jpœ³òĊ(GÚ l6Bûĥ˜÷ĦwÙڍWMXÙ-rÄR-FÜ úîSÄÒr•ˆiP]ÙÍĥœ›86)jo^ÌÂħ;ĉ˜äˆÇZ>)†˘c)Ğİ˙ŭ4xŜ£˘ÙC=è7Ë´3ğŽ£jÌS)ğëÉŻ)L×z¸g %cËÑY˜yE8à•É_êËEÏ(Ú%Ž‘[pC†§÷Ċıı}˘;V‘žò9T°ÚA˘·'‰1u6 J2‡\áièèá`ĦxCzġúàu• :”ÙqŬíwڝè-$ˆêb“Q›*N:Ħ{[!BD´š÷“|“żyZx]5Ï.>´fs<Ŝ2ÜW9ß1h–ğĊ„jñŠ˜ŻÏ÷˙Àxöí?ÑüŸï˙ùġ ÷ÓóûŝċŸîÀ˙Ë:;Í6Ôç<4­rT†(CX˙Z(H(jóuÛŭj7˙ŻÓĞfò^•‚˙óÓüíœ;¸Ħ‡’5Í'Ž;`Ám$tòX´€Ĵû‰³²HhHG ¤’;Œ@î$R™ġ‚cH¨& ßh×~Ğg‹>):ùkCFĤ)zšçWıÄM2FŒĉ/è-·³żúpĠ^çˆc)„Ä6†7–K³$;ÚÓßĵ}Ö #ĦƒUµİa'îb—<4­ CwŞ%m^C„a­Ps€,”Ò+³&ó°“ÌúxW‹d¸V• W$QŜ\(ĥĴ ŸmÙ?ÜYñĈÜmġé×Ô~aĤċRĝ>ŭüe1'µÖßZQ&ş ì¨o^%P‡p“|󁔁‚†)Vž&ġâĉ-Ñ<şµi7Ô ĉÜ|Ĝż~ĵscĈBÇ4?ĤÛmĥÛmĥn€ĥĠÀ€*ہ @kd‘ÇĴ~Š×‰¨#³ñ]üŝl[e¸J%éÇ-żDzщ–Ġ0f Z­ż„l0dŬíàôzóĉ¤—v Eû:üvÊñ˘ŭT Ċ1 úVuDÚ]ÜxàC†ÙûÀg¨ĵNîŠ ƒÍ—ŠaFıÔĞĠÎXJ›żĥó - :ĉ`ħ³ġ·Ñ@Ş@•6‡ ݧq}…Ö^^à-Öş°ż1ZG¤êî‹ıĊI’ׄèQ/·Ŝ|lñP]sÚûw²(ĵ€pbŭ°Ù’½uÒ³`·`ıŭbĜ†÷ßġ^ŝ}óLç­8€>ÉÊ ïw­Ù‹ GJ£·ÉkáÏĜêĝn€ĦGvzA+|È  ʲĊµ*é}{Üĝë]}µÌ¨ DbÔc2$Ñ˘-0cIxŜß÷=ÌÛsĴċÏ9\ï· -ò#13@;ċñ&Xò.bdÍ=ìÀ9ϑn Ħ6Ŝ7Ùµ„ ĝĈĈfbŬ6šĈÚm5·h'ŝù/v 7ĥü>-ĝĝĠô·„ì"e$ 0ÌÌ&É# XQ“a–˜JY2!e’ D˜¸ôûqׯ–µ°‹LŸ;Éeê˙çĈ1òİ%–!'ĦÒĞÍÌÜmpڊŠÑ£Uß+…ˆ­‹EŠƒQĴ“j+%ħµFŒm"£Z"Ú+chÚÔV‹R`ĥ-˘Ş-[vô\ù=~/…óċáċmßói·I ğUĦ8„†Ô4)hâiĥú8ràDœġ‘F é1C@œÀ&ÔĥÊ1 “ĉÑ>`J\ĊàÊ8ÔVŠĠÒVáb1IC6&ħúïÇunjAŸ>·IçBm4x”‹ÏVBĜİB‡u nWĈZqƒ€ŬIÊd÷KµĝíÖğùx}:k• µQ¨Ûco"â=LġZĝ~=ûgŻ3ÓKÜòŞêWòÙ3œxÚ0óϓŻÉĤ›l`Ŭħ”ˆÉ ĈjeIL”ŒlLŒ)˜QI¤ ½{z÷ûxôù÷×wmX nĴA”š&§Muœ/lß>'ŸKŽ<ûsóïëïĈûĝÛÈ"˘5D`“ZCc²m˘Š3 @ÄFÖ, •˜ÌPàÓİĤ„SI$Îù׍ĝLĦ ĝĈЃċïú‹:0=HĦ 7Şëĥ]ŒµvO´£§<V÷<Ş™6µ(˙¸ ;IO­Ÿgĥ¨y3 šGî#g´ :R)‡>úhy°—žNDEÍvÜäRJD_Ğá>•îĞô5ž™”ZûĈ›ŽĴû½00_½Σoàĵ˙ç§5ĥÛEĤÊĴ•VMĥ’64T³V¨5”ĥÒUYS6´–Ë5&MSôĠÇX´JZÙiï/íóÛïĥ,`;uĥŠHG§ù·•ĠŽvĴi–˜"ħĉP–żV÷­ñÙMĝ9IFŞ÷i$›l[ĥÙ˘ i$€]‚#- ĝµ.ûâíUîêġß÷šŜo)ğM‚Cŝëĉ6ë½§cš1ħŒêEħ·;yĠŽĵIèíO–èBž'vĥ·cçn)²B„Ò„ÁĦŜÏÖĵŜúŽrzfÈH{Zšß_zŠĠÜò_Ĥ_úŜáĝÎŝ`ċxĠsX}VĴHıŽŜ„jT@3wB°”³ü§šÙ›óqPÂI$Ŝs½ıġÌJqê.[ŸÀħt8Üòž)èÙĝĝğŒġ“]Ÿ \ç‰Ï´óŞkó÷çùżĉ´’ö!„Ċ­żQĤ+ZŻż~ğŸÉĝ;oNjïtĎ4L„cÍ)Nw;^Áïís|{÷I6M£½÷ÜI$Şyްê4€ ´œsŽı‘³hIIA$CfÄCáŻçê/Œß~ìZzi°Ĵyü°G{ÍĈŬ·‚Li¨7ïSj|Íô‚É ĥ$˙Q€ƒĤ„’‘Â}ġż:öR~ĉİ4)sĦ$ä,Ò"F"f\FË^˜ôı/(Òĥˆ^Ċ™ÔÒËŽù\záÖûŸT–ŻÎöñ,ĵíj„í齃_íòd{O4<ݐmxB@0­ŝÉ$OUß×^ŭġĥu×ë¨%(zj½_z.öß4ï´GıSn÷•—†'&Ĉ9!60:!öcˆxM÷‰üġeĥ!SjZ!·Ş_Ľ#,ˆ •NAlʗ{ŝW’Fĝh=wCK1^OŒs›ZŽLÜĞiI¤”büÏĠRĵí!ŭ„`SNSâ7ġAÎ8ë\Ĝeç2‰ ²ì+ĥùJËüüçoŻÁŒ.úKjsâöê… 6H ß܆°$5A˜Á -ĞÖûVŭ~ğîğÖ,6˘Ŝ;SĤnïí½vOPñĥŞĵAÈÍûSħŸ”Ú ÛÌéŝzƒ„ÛñÌ ĊbĦvßäû>󤐄[ŻŬ#ÔËé1#ÒöBi²\„iqUóû§´„Îpp¤|‚àXí°Ò‘šÑ*cċPc7Ê*ĝÙÙ×+d@³1Ï!ixS:*W?–¤…ĦqP5AßPƒ ‚ÒħİPÒìL5-œÖÂtU %ĥiŻ3Jlğlù(p+ĵ,à ċÇ Inàà$á@[Ë£ĝuĦ^ÛÀöğÜ™7çÍ?/hĦhŸ_}|ġ_ŻOœ ü ‚ñŻRüqßÉ:•ĉ÷¤#rË‘IfâĦ ŭ Jƒ‡ğšEb*ìZ0ƒÓ[íçwĤ<ï_éġg3ê”&œÊ§ž?ż4µ{÷a‘§‡ŻqUv·7lQ êÛÛꞈıwè[2€À˜I‡ŭÜ|Ÿ^W³Ġ²ĥ%Ħƒez  ,Èuˆ^Vıƒt‚ Èœ·( *p?â*ĤuÏĝĥĵi œĝĉ{\Lbm´66°k#D}vÖŜ^ÜsUkíkWT >žÙé˙Ll5×Ġġŝ˜!£V ×iü3ĝÈ"ù]ıúĈԁ tIĦ6lm''- ˜m›{Ÿ„LCìn-&7ŭ NRŽ2z×ĝ[ü1÷vüŬž ³ĝ€ÉĝÁ>£mWvJžĜa{ĄĈUÜîú肇ÔIû‚v ôK18ŞÊÜ`qFŸ$ì÷­cá·Êġ+<Î0Cİĥ·¸Nc184n’’ÂÒĉ„Íá†3ŠiÂ!=_Öµn½5pÛmû_¤ Ö1¤Bm°LB^Á6Â50ğëÜüî~K@ĤbFğ;Z£638ğ~ĥİù}">QĈüZJ‡› ”Q°l¤@üĊßîFħÑĚ œe*›†ğ0 ­Y!!0CÍDÒôÀu”y`#yÚĉï{T­Pıñğèo´pܽÎîjjZğ7ĴÉ@­Œ – @÷>óÍ)N”éÖïvıœà>2érdn+×O =6k („s|;žŝ)ò‹jĝRȘÇÌ0Ċj’m0‡ÁMċ3½ó ĊwŸÍ0ŭj/@EbŸµâs>+ĵÁÏڎ3ĊwžžŬĝ^nŽJö•ËI¸íLlŝvêV†€Ĥ ;ÛğÙ AEÀ„ 7‘ŭbġ,s­ĵŜêážġ‘żˆWâ×ıîíöÊÛÖ­û_saY§…§g Î$Èúxı_Ġü_v—¨!z?vz¤œÙîÄç8 “İ ğçÍ;oϏëÚ@/lǽ۔’BGv–ïhé€P$ĵ ‘ŜM[ĉqú1Zaq=ı­L&ž™]Q­µU‹O{œZğÓ5óĵœSBJÀۉ$˜Ħ=¨™ğԔB2en§´oa(ÔĈ T:gjÔIïĊ3“Ĥrà1Qs ˆ*iáN,˘ä÷Ӂpžfŝà\’f{+üиÌIH°"f@ı2#šC´’„>Òĝ–‘(I("RVB:$’ˆöû<ğ%ı Aä{8a>§~àŒ›ġÎlîÈWhüïŜˆÍ§j)hÓ(Żq=ÙTà3ŝ1îLû>¨˜ÉÒâ+™°G̖Iġ4†çó:qeè†Û׌ÑĞ·~W-7ħÑäòĠ0 ]$,”5L"5ŒVB0LÑñ/ƒ…Jµ|<¨ƒÉĴÙàoÖ#cĝÚĈÛü4U‡M³çcn÷È=fîZàÏ*W{sCġwöñ>ħ×2zÍĥí}éJtż:K›‚ı¤ĜÂsJĥZsŻ³ÖÖ1p"pkV•68€EÒA!-s‹÷7¸p‰‹}`Ĉ²g]‹÷ı-=×äTUÊ·ŝ8Ĉ.ƒŻ2ğ¸ÙĠÉך/[h ‰x[Áœ7-qēN˙' ïxPbB'½4´ŸĜ™7÷ڑĦHBÇCwP„’0÷á.}†(ËeÛĴ mĠËlM„b3˜Ŭ“Kµ:}5Œ{ÍJâšÍgŽí™ÁÌġ|ŜJîÁU…şĞ­€ÏœA>áBgçUÇÍîħڒM{ ™‡Û:ĊgĊÇ9ü™–Ÿ˜ùä@^!PĈĉx*O#uE6ónÊa7xĜ€ÔüU§nğĞ\ñ[ÒÖ<Áèk‹AÏF8ïĥġÁÛsŜg°šñšŜƒL—î‘RĞCíµğ|Ûǽ0Zûá$Jˆù‰M”M1 óÖ WĴXt(ÓÛeüBĞz6ë´Ħ g­": Ü`œ.ӎq}oĈŬ"T ;™“ìÀP\uíâ%C?_žnoëĠÖwBd%<˙Ñ*‡ĤƒĈŭÜ>ċ™ċŸ–pTGÏc'Ĵ9ÂĊ)P½Z·¨‰ħñ%ċv‚žÖġ"ACÑĊ |Ġž„bA\Eŝ?6’X„żĤ!w`”´’”46€ŝ|¤‰#ñĦ>mç[zpĜU[ԟ–/o­Ü°Ü´INé—(cGXĉI9Š1‘òSÄF"pIp=#Ñ6Ĉ𝧂–ù™‚EqŻQġ‰jĦ˙9ä²ħt|sVuxà\qi“ŸÀ¸Gjĥħ°ŠCj ™5`ÜWzÜĴ"PŬ§TfĊÖó­œ\ˆJ觝ċ˘%knd˘×nÉ"­ĊŻ6Hže)lRQ$’bĵ_wÓÍ}LċğĈîk}üŻÚN7ùFuâCOMù4M§swÁ5Ĥ­#êU7ÜŞó"$‡Â Z%I!hĜ´kî ֕Hd"ìaàD€ögáĠá\6%èoŬvfGŽ|_(MùïĈ—¤šP(˘²`KN2p2sœFáäuĞŝŝwhğ/ž£Şĝ£<›íTfù璕LJƒÔŞż,04Àhm™íŻž Yíżî™ĵ%úsÜqÓF3vĴĦ³ Q܈bŜŝe1 ZcOˆ…,†Süx_Ŭ ?é!ô ħ ,Hŭ0@­ QíÜüżïöèUŻ.Ĵ€Tâ,˜ëēê*6ĉ’˜ĴİItZc ׸ıĥ˙\\QDsŝyÜŬ\fŝ†CCìäQ6܏Sû“äcg݁&ñ1ŭ’ߢAì£$žß×R"<¸\;4ŭ2šÈ×vŬÚmñ 5é !’CjL”@˘D#–†ˆ`ĝ—I Ĝ† ͘i°‡iQQË2ä–â é‘ĥH|üu ÚÁmŬ4‚1ú &€G BH” €y,–AÂ)ŭşŭœ"; ß·²6³ù*…ĝ˜fԂ\1´5ùzRB8‰`Ùĝ2Zo-~xŜĈWÏá׿Ïó½OÒñĈŝŭ,~„ żÇ:„„~½Çİp_|¨­xµ|óX|ԋ:ä!mĴŝv]İjà´bK1>rà& c¨ °ž÷˙=ŭú˙ŝ˙ä }<°’ġ?ħ’Aż‘J)˙N÷”`֑âñ³Í‡üoj—*-Y³jswI†;£ñIrY?œ_ħˆ4¤ÌŽrÍFmzËO½°¤öâı Yˆ<•ĉĦ‡&PQYŻŞ‚‰í£6äÙ_[ĥRĠ ıcˆ×74ĉ ŭï2zÏ1ÑTµ˘P}È|eé->Ĵ;ßW¨â§;Âhš^ġxŬÊĤœ'•4ˆ‹Äá¤îĥï]Œ‰k¤¨ĉ‘3l#}î Ş&Mk„á‚ú”V’Mü–HèwÑ!=£…3…4&››Ì İÏ8û\ĉı•8Ż‘&z€üĝÉ L…@[â!ċ0şmf@À2ğh÷Üçì;6 mvò颅/,)Ú²0 /TÜïÏtƒ÷BġŞ×uħcÌ(~·ž&nÛáj·5‰]RÂ)É Ík è۔LᘿŽ=™ĵ`Ú)Ä3mŠB 3fvpHÂĜb!ĤıäÄ7s™#n°T’%[V´ĥ…6bvçPRb”îB%ÙşL˜e;=3'Ó5nPÄùËGéwҟ=²TĜ g”ÄZ(ñS¸;Óç3siÎE‘…SĦ† `8dv”-ÀV˘H‹wOLJÚŞüĝFWX"êY6dï­ùޤ xhˆÈÖ·3/Ĵ›Z7KĴySsm™>‘Ï} éOk!­ŸK4D~ŽŜ=żpÇyYÊM¤üϏİ\IĢŜ—ĊŞ7hĠ{W "I>z;­TĈ=Ò4ݲĜVŠĴŜAT4Žóİk+jȤ ŒbŒI “ÌV˘wĵQ!H¨£hs"ô>0ĈĤ²û …çÄŭf22ß16Š\ÚßzëĠ’jöĠT˜Ż`&gCî¨¸y¤Z—ÁRSlJ•ÉfŸ z:0×X‚c(lġ£Ñ ”'³Ù2Sj°Ç@'9 ħIïvT>ıšĉu<Áœ?"òiù6`=&ı$> ä/0fR̝j$Ğ[ğóxp½oƒ'İŜ\ñŞš—€Ż:ŭ’™>9_z]ñ0FÉ5 =>Ç-8Î5a0İE  Ï vu萇 Ŝ%ıŞë´zŽ< "Òħ땅0vA|M–*éÍ-5霐Ş&ŒϚö.c‡P²Ĝ# +oŜ'o›Òöİĝ Îöèw˔ÈÌäò4ŒÖ•.ĦĠ@]Ş~,ââ1BG$Zî&˘ÙeIİò{ HDà–£ÂG´§B#bBġá×ı“Ú) $‡‡J § aaìĊA¨Òż,‡.³°_g„^%_X”‘•Z<zUÖĊĞu‰À¨+ËäÒ ;ƒÉ;F”r ċäá> ˘0Ò ­œg FĴ:WĜeížJk(1NP…Ï:ȣޒú\îiĵÇí¤’ùXWToUƒ„(JE„ )S3[Xñq„l‹ÓS’ DÔÔÁġƒA.^[Êj5j5HµZ ˜k­–9÷´$X|²†§7KŸIˆĞÔ&Sq{ƒ´ÚvѸ{ïĵeƒï#¤Û\b€èĉRˆç‰Ä…œĤµsM B_ĵß9A¤?J²žqjs$Q:”ÁÊóW›QÁAZ ˜mËr-‰t+ٍ—&lŝġ.Ö 8¸ …Œ”Ħ*! Ŝ"ğ8Já°Áuˆ¤ú O)üçáĊt,ñYLñËlo‡Ŝħ{Ş*İœƒĈ§P0cî1ó^Ż.£Šġ!; LÉÂF& 镲êB5`/{Öû޲úĴa\jâ´[X;ìW`Ĝ"|‡mĴ%‹ĥW§˘ÀÊ)omÁ‰ÑßCxlĜžĝ7qšŜÛÍ8Ĉ6KÄeiR‘9ñwфP<ÛÎ2gpĥŞR-†Ĥi)è4­Xc‘î=¸ë˘İCĦž˘˘k)ċ§"Ħa/x‚ë.)ĈNBñJďWW#ORĥTĵĊoÛ'ĊC9´]àusí²Ù&z•r‘Y"™’“À í3D5ċvİá3sĵËaž´¸ġìÚ#'rá¤T²RŸQ‘…ú_Ĥn‡Öç‚ĜN†8紖Ée§2óz(Î`ìQƒYJ̈́) •^ċAä£ĉpFÛ!ëi°d´F†½İ„ĴG#lŒ4ŒF‚˜OŜ7Œİ –^o™ƒ²zp~!FR?ᵢìòYÉÜú­ Šé ÌaԑµQÑóÊ#b!jecž4tŽĈD6NĊÙAz– ‰%I½K˘+İTÏQ°(Ùr”Ž™:aŜIǑ `sµÊ¸B';íÖ5(­.˜ÔÂT•$(kâaşúÍ·´e½B2÷ƒGż O\cĞzĜ¨NèŻ/Ë3 ,ôQ€Ñvq€v8K~úZ(KMtÎ ê*;Ew{ĊçâD­é@ÚRóÓI_:[Ġc\áôT£/yŭPUI]8J¤òŞ:1l1e°Š¤ŞvĝġĦèÉô^W9\cŜDÉ3ÁöِnÍ2È’y{T“z}£Ú[ñ=Ĵ6÷ڌ„ş,Òiq.ÂÀoǢŬàv×SŽ?½Œ™Ä3ІjD .Ĝì'¤ƒ‡†ICïaĜM“_N½î<ÉÖpß]Íá½C-w)1ÄÉğNI'ĠK•ÊÉM6!j3îs5ƒ½3Eċ•2Z^Rd*cşh‘µß%5$Ê´‹+6.Ȅ½ÙÈ.3|ÔĵDòĤ†z f§×ïvEÄşħ޸¨bĝĵjÈ'Q˘Á„Çt€`(A5/>Ÿ/„Ż2İ.ŽÎS{N°ÄŒBuùëHò™Ĥ)ÍùwŽKLÑìC 55İas¨Lš:1½n³oEĉ[JÈQ”tŞá@41,*2âV}êĵˌĝ’ Š…ÜóċÂ'½â’Wš5ĦÛÂ?ž/ÀnŠ’?€›G™:1ŜÄ视ĤÁ \ÂĦŭÏCÑ*ĢpX¨’PEÌ ƒ ê¨/tG|ÔĝáoĊ €pR ÔĈ2­âħ3rK%ò{Ëé^"}.Ü ê^’g†lïDbF ‰ŞlXµšÇħĞ éìĉĥ:M÷‹-œôsȞ×DÌß ûzİÑßÚ¤ĝšĵlħ­[›î—ÜğqÊ)TÉo>ƒ wNÜrs …áħ>“µöÀħB¨ĠËÔË0!„eb@Ċ‘]†ZDEÈË<˜u]ûTä÷Pzġ› :ûĞÈ˘g^:> Ta÷0ÛÊóŽ˜Bچ‰™Ğ´6Ğó Ô$AGkĈ?G[5Üĵħ/gyG]0Y Dˆ²Îü%&ĦĜ xŬ`]8ĴĈ{ÈQ 욃ç·U[ ĉŠçB‚ş%ísĠc´òéELfħYHĜ&Ħ‚Ê´ –ŜRd)Q‘Y•<ħVUxĊ˜Á“‹½Ö¨Áž4Uz’n{5żxç|Ħó6v¨ïhÙÍ $ĥËs9ŜÛÖ+C@A><Obšnħĵ\ĝXâY,IWÌ~Ö#iC¸'ş1`-B¤[yĠ4ĵÑ1ıÁFE/@éAxν¨EeHä²rÒ*H“UòbošŭÂ-p <Ëq gg›ÉPvh×BĥHToĥĽ}{OÄA]Ş|µ*\8)5]†HŞıQz'²IP^CĊC;…!D úÎĜxĝû|Ĥ§MçjĜ&’F³˜Ĥ•÷Ómx–' mÏ[z%CÀ•7žÖĥw ÚÒCcĵ·j<™Ĥ8ĊáŜž£İİĦ6&ż/.-{•öKŜ„rtvŞħʵğlq•zUóòÑe×ĥ³5ĊĠÔE½eKbYfC'h -Ç,ËÚ0~9fn$%|>‰_Xxiċ1#‚ñKZ’FÇlŒmd힁§ħV(¤qÉ£Z˜Q xTl{ž}„À,\úŒ|Iħâ„K.¨ż>‚ƒdn⨠ “ûnbğMĴèĵÑ$uŽ`ÀކH‹ċW ˘‘^f7óË, ŒŸ•+Žr&D@l9§ƒÒ–ƒG‹ší`şĥĉ6:Aì|‘7|}l-r5Ûɓ˜²œ´ Áà,_[‘×2Y9xŭÈ{âa %ùĴ˜h´ĜvIĉGM%ŞOÙn\ġp:Ċ4(Z6ĉ`%Ìŝ˘Ú)‡µ\Z´şyĠá1óx[WI“GRV*”­i™Öşà“À“5"ÄĈ˘îËÈÈħ[ K74ëlÓH†4d6JĥœkQF |@êONoħ /˜gÒÀŭ˜SœBÍğ˘Évq.Ĵ¸¨b—½¨yÉhü ÄltW^ĥ‰R‡żPĉo`èž³m4SÜĴJÉ@”ŝBa1|¸Ë‰›ë{ß^YĜ:làôïQüzQz_Y"íno•WMèÈû-– xÁl{ž,²YJÄ˰;„½$b܇#ˆ§bVWóƒúÁóĊ>G ¨@2TóèğÒ①ÈĠsbœĝTá/ï p‰;ĥ 6[°´ô½µ’‘Bh4† ½f:~H^°¤™¤ô¸£ ^Çĵ-ĥ°Ü™\Kíñĉĥi]âġôa½ĵ”=ĥ ´yá*f•úġRïú}ĝğ’)„ƒ“  aqbanking-6.6.1/src/libs/plugins/bankinfo/generic/fedachdir.conf0000664000175000017500000000173114043610745021574 00000000000000 fixedWidth="1" condense="1" # if 1 then a title line will be written containing the names of each # column title="0" # this is the group name looked for in the given data to GWEN_CSV_Write # if not given then all groups match group="bank" width=9,1,9,1,6,9,36,36,20,2,5,4,3,3,4,1,1,5 # this group contains the definition for each column # each variable in this group has its number as name # you can use index variables in the names (using square brackets) # the value of each of these variables is the name of a variable to be looked # up in the data given to GWEN_CSV_Write columns { 1="bankId" 2="xOfficeCode" 3="xFrbCode" 4="recordType" # 0: Federal Reserve Bank, 1=routing, 2=new routing 5="xChangeDate" 6="xNewBankId" 7="bankName" 8="street" 9="location" 10="region" # state code 11="xZipCode" 12="xZipExt" # zip code extension 13="xPhoneAreaCode" 14="xPhonePrefix" 15="xPhoneSuffix" 16="xStatus" 17="xViewCode" 18="xFiller" } # columns aqbanking-6.6.1/src/libs/plugins/bankinfo/generic/generic.c0000664000175000017500000005204614576404066020611 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "generic_p.h" #include "aqbanking/i18n_l.h" #include #include #include #include #include #include #ifdef OS_WIN32 # define DIRSEP "\\" #else # define DIRSEP "/" #endif GWEN_INHERIT(AB_BANKINFO_PLUGIN, AB_BANKINFO_PLUGIN_GENERIC) AB_BANKINFO_PLUGIN *AB_BankInfoPluginGENERIC_new(AB_BANKING *ab, const char *country) { AB_BANKINFO_PLUGIN *bip; AB_BANKINFO_PLUGIN_GENERIC *bde; assert(country); bip=AB_BankInfoPlugin_new(country); GWEN_NEW_OBJECT(AB_BANKINFO_PLUGIN_GENERIC, bde); GWEN_INHERIT_SETDATA(AB_BANKINFO_PLUGIN, AB_BANKINFO_PLUGIN_GENERIC, bip, bde, AB_BankInfoPluginGENERIC_FreeData); bde->banking=ab; bde->country=strdup(country); AB_BankInfoPlugin_SetGetBankInfoFn(bip, AB_BankInfoPluginGENERIC_GetBankInfo); AB_BankInfoPlugin_SetGetBankInfoByTemplateFn(bip, AB_BankInfoPluginGENERIC_SearchbyTemplate); return bip; } void GWENHYWFAR_CB AB_BankInfoPluginGENERIC_FreeData(void *bp, void *p) { AB_BANKINFO_PLUGIN_GENERIC *bde; bde=(AB_BANKINFO_PLUGIN_GENERIC *)p; free(bde->country); if (bde->dataDir) free(bde->dataDir); GWEN_FREE_OBJECT(bde); } void AB_BankInfoPluginGENERIC__GetDataDir(AB_BANKINFO_PLUGIN *bip, GWEN_BUFFER *pbuf) { AB_BANKINFO_PLUGIN_GENERIC *bde; int gotit=0; assert(pbuf); assert(bip); bde=GWEN_INHERIT_GETDATA(AB_BANKINFO_PLUGIN, AB_BANKINFO_PLUGIN_GENERIC, bip); assert(bde); if (bde->dataDir) { gotit=1; GWEN_Buffer_AppendString(pbuf, bde->dataDir); } else { GWEN_STRINGLIST *sl; sl=AB_Banking_GetGlobalDataDirs(); if (sl) { GWEN_STRINGLISTENTRY *se; GWEN_BUFFER *buf; buf=GWEN_Buffer_new(0, 256, 0, 1); se=GWEN_StringList_FirstEntry(sl); while (se) { FILE *f; const char *s; unsigned int pos; s=GWEN_StringListEntry_Data(se); GWEN_Buffer_AppendString(buf, s); GWEN_Buffer_AppendString(buf, DIRSEP "aqbanking" DIRSEP "bankinfo" DIRSEP); GWEN_Buffer_AppendString(buf, bde->country); pos=GWEN_Buffer_GetPos(buf); GWEN_Buffer_AppendString(buf, DIRSEP); GWEN_Buffer_AppendString(buf, "banks.data"); f=fopen(GWEN_Buffer_GetStart(buf), "r"); if (f) { fclose(f); GWEN_Buffer_Crop(buf, 0, pos); bde->dataDir=strdup(GWEN_Buffer_GetStart(buf)); GWEN_Buffer_AppendBuffer(pbuf, buf); gotit=1; break; } GWEN_Buffer_Reset(buf); se=GWEN_StringListEntry_Next(se); } GWEN_Buffer_free(buf); GWEN_StringList_free(sl); } } if (gotit==0) { DBG_ERROR(AQBANKING_LOGDOMAIN, "No folder found for country \"%s\"", (bde->country)?(bde->country):""); } /*assert(gotit);*/ } AB_BANKINFO *AB_BankInfoPluginGENERIC__ReadBankInfo(AB_BANKINFO_PLUGIN *bip, const char *num) { AB_BANKINFO_PLUGIN_GENERIC *bde; GWEN_BUFFER *pbuf; AB_BANKINFO *bi; GWEN_DB_NODE *dbT; GWEN_SYNCIO *sio; uint32_t pos; int rv; assert(bip); bde=GWEN_INHERIT_GETDATA(AB_BANKINFO_PLUGIN, AB_BANKINFO_PLUGIN_GENERIC, bip); assert(bde); /* get position */ assert(strlen(num)==8); if (1!=sscanf(num, "%08x", &pos)) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Invalid index"); return 0; } /* get path */ pbuf=GWEN_Buffer_new(0, 256, 0, 1); AB_BankInfoPluginGENERIC__GetDataDir(bip, pbuf); GWEN_Buffer_AppendString(pbuf, DIRSEP "banks.data"); sio=GWEN_SyncIo_File_new(GWEN_Buffer_GetStart(pbuf), 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); GWEN_Buffer_free(pbuf); return NULL; } /* seek position */ DBG_VERBOUS(0, "Seeking to %08x (%d)", pos, pos); if ((int64_t)-1==GWEN_SyncIo_File_Seek(sio, pos, GWEN_SyncIo_File_Whence_Set)) { DBG_ERROR(AQBANKING_LOGDOMAIN, "seek(%s, %u): %s", GWEN_Buffer_GetStart(pbuf), pos, strerror(errno)); GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); return NULL; } /* read data */ dbT=GWEN_DB_Group_new("bank"); rv=GWEN_DB_ReadFromIo(dbT, sio, GWEN_DB_FLAGS_DEFAULT | GWEN_PATH_FLAGS_CREATE_GROUP| GWEN_DB_FLAGS_UNTIL_EMPTY_LINE); GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "Could not load file \"%s\" (%d)", GWEN_Buffer_GetStart(pbuf), rv); GWEN_DB_Group_free(dbT); GWEN_Buffer_free(pbuf); return 0; } bi=AB_BankInfo_fromDb(dbT); assert(bi); GWEN_DB_Group_free(dbT); GWEN_Buffer_free(pbuf); return bi; } AB_BANKINFO *AB_BankInfoPluginGENERIC_GetBankInfo(AB_BANKINFO_PLUGIN *bip, const char *branchId, const char *bankId) { return AB_BankInfoPluginGENERIC__SearchbyCode(bip, bankId); } AB_BANKINFO *AB_BankInfoPluginGENERIC__SearchbyCode(AB_BANKINFO_PLUGIN *bip, const char *bankId) { AB_BANKINFO_PLUGIN_GENERIC *bde; GWEN_BUFFER *pbuf; FILE *f; char lbuf[512]; assert(bip); bde=GWEN_INHERIT_GETDATA(AB_BANKINFO_PLUGIN, AB_BANKINFO_PLUGIN_GENERIC, bip); assert(bde); pbuf=GWEN_Buffer_new(0, 256, 0, 1); AB_BankInfoPluginGENERIC__GetDataDir(bip, pbuf); GWEN_Buffer_AppendString(pbuf, DIRSEP "blz.idx"); f=fopen(GWEN_Buffer_GetStart(pbuf), "r"); if (!f) { DBG_INFO(AQBANKING_LOGDOMAIN, "fopen(%s): %s", GWEN_Buffer_GetStart(pbuf), strerror(errno)); GWEN_Buffer_free(pbuf); return 0; } while (!feof(f)) { unsigned char *p; lbuf[0]=0; p=(unsigned char *)fgets(lbuf, sizeof(lbuf), f); if (p) { char *blz=0; char *num=0; unsigned int i; i=strlen(lbuf); if (lbuf[i-1]==10) lbuf[i-1]=0; blz=(char *)p; while (*p && *p!='\t') p++; assert(*p=='\t'); *p=0; p++; num=(char *)p; if (strcasecmp(blz, bankId)==0) { AB_BANKINFO *bi; bi=AB_BankInfoPluginGENERIC__ReadBankInfo(bip, num); fclose(f); GWEN_Buffer_free(pbuf); return bi; } } } GWEN_Buffer_free(pbuf); fclose(f); DBG_INFO(AQBANKING_LOGDOMAIN, "Bank %s not found", bankId); return 0; } int AB_BankInfoPluginGENERIC__AddById(AB_BANKINFO_PLUGIN *bip, const char *bankId, AB_BANKINFO_LIST2 *bl) { AB_BANKINFO_PLUGIN_GENERIC *bde; GWEN_BUFFER *pbuf; FILE *f; char lbuf[512]; uint32_t count=0; assert(bip); bde=GWEN_INHERIT_GETDATA(AB_BANKINFO_PLUGIN, AB_BANKINFO_PLUGIN_GENERIC, bip); assert(bde); pbuf=GWEN_Buffer_new(0, 256, 0, 1); AB_BankInfoPluginGENERIC__GetDataDir(bip, pbuf); GWEN_Buffer_AppendString(pbuf, DIRSEP "blz.idx"); f=fopen(GWEN_Buffer_GetStart(pbuf), "r"); if (!f) { DBG_INFO(AQBANKING_LOGDOMAIN, "fopen(%s): %s", GWEN_Buffer_GetStart(pbuf), strerror(errno)); GWEN_Buffer_free(pbuf); return GWEN_ERROR_NOT_AVAILABLE; } while (!feof(f)) { unsigned char *p; lbuf[0]=0; p=(unsigned char *)fgets(lbuf, sizeof(lbuf), f); if (p) { char *blz=0; char *num=0; unsigned int i; i=strlen(lbuf); if (lbuf[i-1]==10) lbuf[i-1]=0; blz=(char *)p; while (*p && *p!='\t') p++; assert(*p=='\t'); *p=0; p++; num=(char *)p; i=strlen(lbuf); if (GWEN_Text_ComparePattern(blz, bankId, 0)!=-1) { AB_BANKINFO *bi; bi=AB_BankInfoPluginGENERIC__ReadBankInfo(bip, num); if (bi) { AB_BankInfo_List2_PushBack(bl, bi); count++; } } } } /* while ! feof */ fclose(f); if (!count) { DBG_INFO(AQBANKING_LOGDOMAIN, "Bank %s not found", bankId); return GWEN_ERROR_NOT_FOUND; } return 0; } int AB_BankInfoPluginGENERIC__AddByBic(AB_BANKINFO_PLUGIN *bip, const char *bic, AB_BANKINFO_LIST2 *bl) { AB_BANKINFO_PLUGIN_GENERIC *bde; GWEN_BUFFER *pbuf; FILE *f; char lbuf[512]; uint32_t count=0; assert(bip); bde=GWEN_INHERIT_GETDATA(AB_BANKINFO_PLUGIN, AB_BANKINFO_PLUGIN_GENERIC, bip); assert(bde); pbuf=GWEN_Buffer_new(0, 256, 0, 1); AB_BankInfoPluginGENERIC__GetDataDir(bip, pbuf); GWEN_Buffer_AppendString(pbuf, DIRSEP "bic.idx"); f=fopen(GWEN_Buffer_GetStart(pbuf), "r"); if (!f) { DBG_INFO(AQBANKING_LOGDOMAIN, "fopen(%s): %s", GWEN_Buffer_GetStart(pbuf), strerror(errno)); GWEN_Buffer_free(pbuf); return GWEN_ERROR_NOT_AVAILABLE; } while (!feof(f)) { unsigned char *p; lbuf[0]=0; p=(unsigned char *)fgets(lbuf, sizeof(lbuf), f); if (p) { char *key=0; char *num=0; unsigned int i; i=strlen(lbuf); if (lbuf[i-1]==10) lbuf[i-1]=0; key=(char *)p; while (*p && *p!='\t') p++; assert(*p=='\t'); *p=0; p++; num=(char *)p; if (GWEN_Text_ComparePattern(key, bic, 0)!=-1) { AB_BANKINFO *bi; bi=AB_BankInfoPluginGENERIC__ReadBankInfo(bip, num); if (bi) { AB_BankInfo_List2_PushBack(bl, bi); count++; } } } } /* while ! feof */ fclose(f); if (!count) { DBG_INFO(AQBANKING_LOGDOMAIN, "Bank %s not found", bic); return GWEN_ERROR_NOT_FOUND; } return 0; } int AB_BankInfoPluginGENERIC__AddByNameAndLoc(AB_BANKINFO_PLUGIN *bip, const char *name, const char *loc, AB_BANKINFO_LIST2 *bl) { AB_BANKINFO_PLUGIN_GENERIC *bde; GWEN_BUFFER *pbuf; FILE *f; char lbuf[512]; uint32_t count=0; assert(bip); bde=GWEN_INHERIT_GETDATA(AB_BANKINFO_PLUGIN, AB_BANKINFO_PLUGIN_GENERIC, bip); assert(bde); if (name==0) name="*"; if (loc==0) loc="*"; pbuf=GWEN_Buffer_new(0, 256, 0, 1); AB_BankInfoPluginGENERIC__GetDataDir(bip, pbuf); GWEN_Buffer_AppendString(pbuf, DIRSEP "namloc.idx"); f=fopen(GWEN_Buffer_GetStart(pbuf), "r"); if (!f) { DBG_INFO(AQBANKING_LOGDOMAIN, "fopen(%s): %s", GWEN_Buffer_GetStart(pbuf), strerror(errno)); GWEN_Buffer_free(pbuf); DBG_ERROR(AQBANKING_LOGDOMAIN, "namloc index file not available"); return GWEN_ERROR_NOT_AVAILABLE; } while (!feof(f)) { unsigned char *p; lbuf[0]=0; p=(unsigned char *)fgets(lbuf, sizeof(lbuf), f); if (p) { char *key1=0; char *key2=0; char *num=0; unsigned int i; i=strlen(lbuf); if (lbuf[i-1]==10) lbuf[i-1]=0; key1=(char *)p; while (*p && *p!='\t') p++; assert(*p=='\t'); *p=0; p++; key2=/* GCC4 pointer-signedness fix: */ (char *) p; while (*p && *p!='\t') p++; assert(*p=='\t'); *p=0; p++; num=(char *)p; if (GWEN_Text_ComparePattern(key1, name, 0)!=-1 && GWEN_Text_ComparePattern(key2, loc, 0)!=-1) { AB_BANKINFO *bi; bi=AB_BankInfoPluginGENERIC__ReadBankInfo(bip, num); if (bi) { AB_BankInfo_List2_PushBack(bl, bi); count++; } } } } /* while ! feof */ fclose(f); if (!count) { DBG_INFO(AQBANKING_LOGDOMAIN, "Bank %s/%s not found", name, loc); return GWEN_ERROR_NOT_FOUND; } return 0; } int AB_BankInfoPluginGENERIC__CmpTemplate(AB_BANKINFO *bi, const AB_BANKINFO *tbi, uint32_t flags) { const char *s; const char *t; if (flags & AB_BANKINFO_GENERIC__FLAGS_BRANCHID) { s=AB_BankInfo_GetBranchId(bi); t=AB_BankInfo_GetBranchId(tbi); if (s && *s) if (GWEN_Text_ComparePattern(s, t, 0)==-1) return 0; } if (flags & AB_BANKINFO_GENERIC__FLAGS_BANKID) { s=AB_BankInfo_GetBankId(bi); t=AB_BankInfo_GetBankId(tbi); if (s && *s) if (GWEN_Text_ComparePattern(s, t, 0)==-1) return 0; } if (flags & AB_BANKINFO_GENERIC__FLAGS_BIC) { s=AB_BankInfo_GetBic(bi); t=AB_BankInfo_GetBic(tbi); if (s && *s) if (GWEN_Text_ComparePattern(s, t, 0)==-1) return 0; } if (flags & AB_BANKINFO_GENERIC__FLAGS_BANKNAME) { s=AB_BankInfo_GetBankName(bi); t=AB_BankInfo_GetBankName(tbi); if (s && *s) if (GWEN_Text_ComparePattern(s, t, 0)==-1) return 0; } if (flags & AB_BANKINFO_GENERIC__FLAGS_LOCATION) { s=AB_BankInfo_GetLocation(bi); t=AB_BankInfo_GetLocation(tbi); if (!t || !*t) t=AB_BankInfo_GetCity(tbi); if (s && *s) if (GWEN_Text_ComparePattern(s, t, 0)==-1) return 0; } if (flags & AB_BANKINFO_GENERIC__FLAGS_ZIPCODE) { s=AB_BankInfo_GetZipcode(bi); t=AB_BankInfo_GetZipcode(tbi); if (s && *s) if (GWEN_Text_ComparePattern(s, t, 0)==-1) return 0; } if (flags & AB_BANKINFO_GENERIC__FLAGS_REGION) { s=AB_BankInfo_GetRegion(bi); t=AB_BankInfo_GetRegion(tbi); if (s && *s) if (GWEN_Text_ComparePattern(s, t, 0)==-1) return 0; } if (flags & AB_BANKINFO_GENERIC__FLAGS_PHONE) { s=AB_BankInfo_GetPhone(bi); t=AB_BankInfo_GetPhone(tbi); if (s && *s) if (GWEN_Text_ComparePattern(s, t, 0)==-1) return 0; } if (flags & AB_BANKINFO_GENERIC__FLAGS_FAX) { s=AB_BankInfo_GetFax(bi); t=AB_BankInfo_GetFax(tbi); if (s && *s) if (GWEN_Text_ComparePattern(s, t, 0)==-1) return 0; } if (flags & AB_BANKINFO_GENERIC__FLAGS_EMAIL) { s=AB_BankInfo_GetEmail(bi); t=AB_BankInfo_GetEmail(tbi); if (s && *s) if (GWEN_Text_ComparePattern(s, t, 0)==-1) return 0; } if (flags & AB_BANKINFO_GENERIC__FLAGS_WEBSITE) { s=AB_BankInfo_GetWebsite(bi); t=AB_BankInfo_GetWebsite(tbi); if (s && *s) if (GWEN_Text_ComparePattern(s, t, 0)==-1) return 0; } return 1; } int AB_BankInfoPluginGENERIC_AddByTemplate(AB_BANKINFO_PLUGIN *bip, AB_BANKINFO *tbi, AB_BANKINFO_LIST2 *bl, uint32_t flags) { AB_BANKINFO_PLUGIN_GENERIC *bde; uint32_t count=0; uint32_t i=0; GWEN_BUFFER *pbuf; uint32_t progressId; GWEN_SYNCIO *sio; int rv; assert(bip); bde=GWEN_INHERIT_GETDATA(AB_BANKINFO_PLUGIN, AB_BANKINFO_PLUGIN_GENERIC, bip); assert(bde); /* get path */ pbuf=GWEN_Buffer_new(0, 256, 0, 1); AB_BankInfoPluginGENERIC__GetDataDir(bip, pbuf); GWEN_Buffer_AppendString(pbuf, DIRSEP "banks.data"); /* open file */ sio=GWEN_SyncIo_File_new(GWEN_Buffer_GetStart(pbuf), 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); GWEN_Buffer_free(pbuf); return rv; } progressId=GWEN_Gui_ProgressStart(GWEN_GUI_PROGRESS_DELAY | GWEN_GUI_PROGRESS_ALLOW_EMBED | GWEN_GUI_PROGRESS_SHOW_PROGRESS | GWEN_GUI_PROGRESS_SHOW_ABORT, I18N("Scanning bank database..."), NULL, GWEN_GUI_PROGRESS_NONE, 0); for (;;) { GWEN_DB_NODE *dbT; AB_BANKINFO *bi; if (i & ~63) { if (GWEN_Gui_ProgressAdvance(progressId, GWEN_GUI_PROGRESS_NONE)== GWEN_ERROR_USER_ABORTED) { DBG_INFO(GWEN_LOGDOMAIN, "User aborted"); GWEN_Gui_ProgressEnd(progressId); DBG_ERROR(AQBANKING_LOGDOMAIN, "Aborted by user"); GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); GWEN_Buffer_free(pbuf); return GWEN_ERROR_USER_ABORTED; } } dbT=GWEN_DB_Group_new("bank"); if (GWEN_DB_ReadFromIo(dbT, sio, GWEN_DB_FLAGS_DEFAULT | GWEN_PATH_FLAGS_CREATE_GROUP | GWEN_DB_FLAGS_UNTIL_EMPTY_LINE)) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Could not read from file \"%s\"", GWEN_Buffer_GetStart(pbuf)); GWEN_Gui_ProgressEnd(progressId); GWEN_DB_Group_free(dbT); GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); GWEN_Buffer_free(pbuf); return GWEN_ERROR_GENERIC; } bi=AB_BankInfo_fromDb(dbT); assert(bi); if (AB_BankInfoPluginGENERIC__CmpTemplate(bi, tbi, flags)==1) { count++; AB_BankInfo_List2_PushBack(bl, bi); } else { AB_BankInfo_free(bi); } GWEN_DB_Group_free(dbT); i++; } /* while */ GWEN_Gui_ProgressEnd(progressId); GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); GWEN_Buffer_free(pbuf); if (count==0) { DBG_INFO(AQBANKING_LOGDOMAIN, "No matching bank found"); return GWEN_ERROR_NOT_FOUND; } return 0; } int AB_BankInfoPluginGENERIC_SearchbyTemplate(AB_BANKINFO_PLUGIN *bip, AB_BANKINFO *tbi, AB_BANKINFO_LIST2 *bl) { AB_BANKINFO_PLUGIN_GENERIC *bde; uint32_t flags; int rv; const char *s; assert(bip); bde=GWEN_INHERIT_GETDATA(AB_BANKINFO_PLUGIN, AB_BANKINFO_PLUGIN_GENERIC, bip); assert(bde); /* this is just to speed up often needed tests */ flags=0; s=AB_BankInfo_GetBranchId(tbi); if (s && *s) flags|=AB_BANKINFO_GENERIC__FLAGS_BRANCHID; s=AB_BankInfo_GetBankId(tbi); if (s && *s) flags|=AB_BANKINFO_GENERIC__FLAGS_BANKID; s=AB_BankInfo_GetBic(tbi); if (s && *s) flags|=AB_BANKINFO_GENERIC__FLAGS_BIC; s=AB_BankInfo_GetBankName(tbi); if (s && *s) flags|=AB_BANKINFO_GENERIC__FLAGS_BANKNAME; s=AB_BankInfo_GetLocation(tbi); if (s && *s) flags|=AB_BANKINFO_GENERIC__FLAGS_LOCATION; s=AB_BankInfo_GetStreet(tbi); if (s && *s) flags|=AB_BANKINFO_GENERIC__FLAGS_STREET; s=AB_BankInfo_GetZipcode(tbi); if (s && *s) flags|=AB_BANKINFO_GENERIC__FLAGS_ZIPCODE; s=AB_BankInfo_GetCity(tbi); if (s && *s) flags|=AB_BANKINFO_GENERIC__FLAGS_CITY; s=AB_BankInfo_GetRegion(tbi); if (s && *s) flags|=AB_BANKINFO_GENERIC__FLAGS_REGION; s=AB_BankInfo_GetPhone(tbi); if (s && *s) flags|=AB_BANKINFO_GENERIC__FLAGS_PHONE; s=AB_BankInfo_GetFax(tbi); if (s && *s) flags|=AB_BANKINFO_GENERIC__FLAGS_FAX; s=AB_BankInfo_GetEmail(tbi); if (s && *s) flags|=AB_BANKINFO_GENERIC__FLAGS_EMAIL; s=AB_BankInfo_GetWebsite(tbi); if (s && *s) flags|=AB_BANKINFO_GENERIC__FLAGS_WEBSITE; if (flags==AB_BANKINFO_GENERIC__FLAGS_BIC) rv=AB_BankInfoPluginGENERIC__AddByBic(bip, AB_BankInfo_GetBic(tbi), bl); else if ((flags & ~AB_BANKINFO_GENERIC__FLAGS_BRANCHID)== AB_BANKINFO_GENERIC__FLAGS_BANKID) rv=AB_BankInfoPluginGENERIC__AddById(bip, AB_BankInfo_GetBankId(tbi), bl); else if (flags==(AB_BANKINFO_GENERIC__FLAGS_BANKNAME| AB_BANKINFO_GENERIC__FLAGS_LOCATION) || flags==AB_BANKINFO_GENERIC__FLAGS_BANKNAME || flags==AB_BANKINFO_GENERIC__FLAGS_LOCATION) { rv=AB_BankInfoPluginGENERIC__AddByNameAndLoc(bip, AB_BankInfo_GetBankName(tbi), AB_BankInfo_GetLocation(tbi), bl); } else { DBG_ERROR(AQBANKING_LOGDOMAIN, "No quick search implemented for these flags (%08x)", flags); rv=GWEN_ERROR_NOT_AVAILABLE; } if (rv==GWEN_ERROR_NOT_AVAILABLE) { rv=AB_BankInfoPluginGENERIC_AddByTemplate(bip, tbi, bl, flags); } return rv; } aqbanking-6.6.1/src/libs/plugins/bankinfo/generic/hbci.conf0000664000175000017500000000173614156464063020602 00000000000000# if 1 then values are quoted quote="1" # if 1 then a title line will be written containing the names of each # column title="1" # special values are "TAB" and "SPACE" delimiter=";" # this is the group name looked for in the given data to GWEN_CSV_Write # if not given then all groups match group="bank" # this group contains the definition for each column # each variable in this group has its number as name # you can use index variables in the names (using square brackets) # the value of each of these variables is the name of a variable to be looked # up in the data given to GWEN_CSV_Write columns { 1="xNr" 2="bankId" 3="bic" 4="bankName" 5="location" 6="xRZ" 7="xOrganization" 8="hostName" 9="hostIp" 10="hbciVersion" 11="ddv" 12="rdh1" 13="rdh2" 14="rdh3" 15="rdh4" 16="rdh5" 17="rdh6" 18="rdh7" 19="rdh8" 20="rdh9" 21="rdh10" 22="rah7" 23="rah9" 24="rah10" 25="pintanUrl" 26="pinTanVer" 27="xlastChangeDate" } # columns aqbanking-6.6.1/src/libs/plugins/bankinfo/generic/kidaten.conf0000664000175000017500000000136014043610745021300 00000000000000# if 1 then values are quoted quote="0" int ignoreLines="4" # if 1 then a title line will be written containing the names of each # column title="0" # special values are "TAB" and "SPACE" delimiter=";" # this is the group name looked for in the given data to GWEN_CSV_Write # if not given then all groups match group="bank" # this group contains the definition for each column # each variable in this group has its number as name # you can use index variables in the names (using square brackets) # the value of each of these variables is the name of a variable to be looked # up in the data given to GWEN_CSV_Write columns { 1="xIdent" 2="bankId" 3="xType" 4="bankName" 5="street" 6="zipCode" 7="location" 8="xSitz" } # columns aqbanking-6.6.1/src/libs/plugins/bankinfo/generic/Makefile.am0000664000175000017500000000354614043610745021056 00000000000000AM_CPPFLAGS = -I$(top_srcdir)/src/libs \ -I$(top_builddir)/src/libs \ $(gwenhywfar_includes) AM_CFLAGS=-DBUILDING_AQBANKING @visibility_cflags@ EXTRA_DIST=\ dbb.conf hbci.conf atblz.conf fedachdir.conf bcbankenstamm.conf \ kidaten.conf README de.tar.bz2 bankinfoplugindir = $(aqbanking_plugindir)/bankinfo bankinfodatadir = $(aqbanking_pkgdatadir)/bankinfo #DEFS += -DPLUGIN_DATADIR=\"$(bankinfodatadir)\" MKDEINFO=$(top_builddir)/src/tools/mkdeinfo/mkdeinfo noinst_LTLIBRARIES=libbankinfo_generic.la noinst_HEADERS=\ generic_p.h \ generic_l.h libbankinfo_generic_la_SOURCES=generic.c de_files=de/blz.idx de/bic.idx de/namloc.idx de/banks.data #atbankdatadir = $(bankinfodatadir)/at #atbankdata_DATA = $(at_files) debankdatadir = $(bankinfodatadir)/de debankdata_DATA = $(de_files) #chbankdatadir = $(bankinfodatadir)/ch #chbankdata_DATA = $(ch_files) #usbankdatadir = $(bankinfodatadir)/us #usbankdata_DATA = $(us_files) #cabankdatadir = $(bankinfodatadir)/ca #cabankdata_DATA = $(ca_files) de.tar.bz2: $(MKDEINFO) build data/de/blz.csv data/de/fints_institute.csv tmp.banks test -d de || mkdir -p de if test -f data/de/aux.conf; then \ $(MKDEINFO) update tmp.banks data/de/aux.conf tmp.banks; \ fi $(MKDEINFO) install tmp.banks de tar cf de.tar de && bzip2 -9 de.tar rm -rf tmp.banks $(de_files): de_files_tmp de_files_tmp: de.tar.bz2 test -d de || mkdir -p de bunzip2 -k -c $< | tar xmof - touch $@ .INTERMEDIATE: de_files_tmp bankdata: $(de_files) all-local: bankdata dist-local: de.tar.bz2 CLEANFILES = $(at_files) $(ch_files) $(de_files) $(ca_files) $(us_files) sources: for f in $(libbankinfo_generic_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done cppcheck: for f in $(libbankinfo_generic_la_SOURCES); do \ cppcheck --force $$f ; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done aqbanking-6.6.1/src/libs/plugins/bankinfo/generic/generic_p.h0000664000175000017500000000705714043610745021127 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Mon Mar 01 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AQBANKING_BANKINFO_GENERIC_P_H #define AQBANKING_BANKINFO_GENERIC_P_H #include "generic_l.h" typedef struct AB_BANKINFO_PLUGIN_GENERIC AB_BANKINFO_PLUGIN_GENERIC; struct AB_BANKINFO_PLUGIN_GENERIC { AB_BANKING *banking; char *country; char *dataDir; }; void GWENHYWFAR_CB AB_BankInfoPluginGENERIC_FreeData(void *bp, void *p); AB_BANKINFO *AB_BankInfoPluginGENERIC_GetBankInfo(AB_BANKINFO_PLUGIN *bip, const char *branchId, const char *bankId); AB_BANKINFO *AB_BankInfoPluginGENERIC__SearchbyCode(AB_BANKINFO_PLUGIN *bip, const char *bankId); int AB_BankInfoPluginGENERIC_SearchbyTemplate(AB_BANKINFO_PLUGIN *bip, AB_BANKINFO *tbi, AB_BANKINFO_LIST2 *bl); void AB_BankInfoPluginGENERIC__GetDataDir(AB_BANKINFO_PLUGIN *bip, GWEN_BUFFER *pbuf); AB_BANKINFO *AB_BankInfoPluginGENERIC__ReadBankInfo(AB_BANKINFO_PLUGIN *bip, const char *num); int AB_BankInfoPluginGENERIC__AddById(AB_BANKINFO_PLUGIN *bip, const char *bankId, AB_BANKINFO_LIST2 *bl); int AB_BankInfoPluginGENERIC__AddByBic(AB_BANKINFO_PLUGIN *bip, const char *bic, AB_BANKINFO_LIST2 *bl); int AB_BankInfoPluginGENERIC__AddByNameAndLoc(AB_BANKINFO_PLUGIN *bip, const char *name, const char *loc, AB_BANKINFO_LIST2 *bl); int AB_BankInfoPluginGENERIC__CmpTemplate(AB_BANKINFO *bi, const AB_BANKINFO *tbi, uint32_t flags); int AB_BankInfoPluginGENERIC_AddByTemplate(AB_BANKINFO_PLUGIN *bip, AB_BANKINFO *tbi, AB_BANKINFO_LIST2 *bl, uint32_t flags); #define AB_BANKINFO_GENERIC__FLAGS_COUNTRY 0x00000001 #define AB_BANKINFO_GENERIC__FLAGS_BRANCHID 0x00000002 #define AB_BANKINFO_GENERIC__FLAGS_BANKID 0x00000004 #define AB_BANKINFO_GENERIC__FLAGS_BIC 0x00000008 #define AB_BANKINFO_GENERIC__FLAGS_BANKNAME 0x00000010 #define AB_BANKINFO_GENERIC__FLAGS_LOCATION 0x00000020 #define AB_BANKINFO_GENERIC__FLAGS_CITY AB_BANKINFO_GENERIC__FLAGS_LOCATION #define AB_BANKINFO_GENERIC__FLAGS_STREET 0x00000040 #define AB_BANKINFO_GENERIC__FLAGS_ZIPCODE 0x00000080 #define AB_BANKINFO_GENERIC__FLAGS_REGION 0x00000100 #define AB_BANKINFO_GENERIC__FLAGS_PHONE 0x00000200 #define AB_BANKINFO_GENERIC__FLAGS_FAX 0x00000400 #define AB_BANKINFO_GENERIC__FLAGS_EMAIL 0x00000800 #define AB_BANKINFO_GENERIC__FLAGS_WEBSITE 0x00001000 #endif /* AQBANKING_BANKINFO_GENERIC_P_H */ aqbanking-6.6.1/src/libs/plugins/bankinfo/generic/dbb.conf0000664000175000017500000000141114576130601020404 00000000000000 condense="1" # if 1 then values are quoted quote="1" # if 1 then a title line will be written containing the names of each # column title="1" # this is the group name looked for in the given data to GWEN_CSV_Write # if not given then all groups match group="bank" # this group contains the definition for each column # each variable in this group has its number as name # you can use index variables in the names (using square brackets) # the value of each of these variables is the name of a variable to be looked # up in the data given to GWEN_CSV_Write columns { 1="bankId" 2="xMerkmal" 3="bankName" 4="zipCode" 5="location" 6="xShortName" 7="xPAN" 8="BIC" 9="xCheckSum" 10="xnumber" 11="xChangeMark" 12="xToDelete" 13="xNextBLZ" } # columns aqbanking-6.6.1/src/libs/plugins/bankinfo/generic/Makefile.in0000644000175000017500000006475415037736026021102 00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/libs/plugins/bankinfo/generic ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/distri.m4 $(top_srcdir)/m4/gwenhywfar.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/os.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libbankinfo_generic_la_LIBADD = am_libbankinfo_generic_la_OBJECTS = generic.lo libbankinfo_generic_la_OBJECTS = $(am_libbankinfo_generic_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/generic.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libbankinfo_generic_la_SOURCES) DIST_SOURCES = $(libbankinfo_generic_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(debankdatadir)" DATA = $(debankdata_DATA) HEADERS = $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp README DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADD_ACLOCAL_FLAGS = @ADD_ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AQBANKING_CLI_VERSION_STRING = @AQBANKING_CLI_VERSION_STRING@ AQBANKING_FINTS_VERSION_STRING = @AQBANKING_FINTS_VERSION_STRING@ AQBANKING_SO_AGE = @AQBANKING_SO_AGE@ AQBANKING_SO_CURRENT = @AQBANKING_SO_CURRENT@ AQBANKING_SO_EFFECTIVE = @AQBANKING_SO_EFFECTIVE@ AQBANKING_SO_REVISION = @AQBANKING_SO_REVISION@ AQBANKING_VERSION_BUILD = @AQBANKING_VERSION_BUILD@ AQBANKING_VERSION_FULL_STRING = @AQBANKING_VERSION_FULL_STRING@ AQBANKING_VERSION_MAJOR = @AQBANKING_VERSION_MAJOR@ AQBANKING_VERSION_MINOR = @AQBANKING_VERSION_MINOR@ AQBANKING_VERSION_PATCHLEVEL = @AQBANKING_VERSION_PATCHLEVEL@ AQBANKING_VERSION_RELEASE_STRING = @AQBANKING_VERSION_RELEASE_STRING@ AQBANKING_VERSION_STRING = @AQBANKING_VERSION_STRING@ AQBANKING_VERSION_TAG = @AQBANKING_VERSION_TAG@ AQEBICS_CFLAGS = @AQEBICS_CFLAGS@ AQEBICS_LIBS = @AQEBICS_LIBS@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATETIME = @DATETIME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_EXCLUDE_PATTERNS = @DOXYGEN_EXCLUDE_PATTERNS@ DOXYGEN_FILE_PATTERNS = @DOXYGEN_FILE_PATTERNS@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENGUI_GTK2_CFLAGS = @GWENGUI_GTK2_CFLAGS@ GWENGUI_GTK2_LIBS = @GWENGUI_GTK2_LIBS@ GWENHYWFAR_MINIMUM_VERSION = @GWENHYWFAR_MINIMUM_VERSION@ HAVE_GWENGUI_GTK2 = @HAVE_GWENGUI_GTK2@ HAVE_I18N = @HAVE_I18N@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIBXSLT_CFLAGS = @LIBXSLT_CFLAGS@ LIBXSLT_LIBS = @LIBXSLT_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_SUPPORTS_QT = @MSGFMT_SUPPORTS_QT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ TUTORIALS = @TUTORIALS@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XMLMERGE = @XMLMERGE@ XMLSEC_CFLAGS = @XMLSEC_CFLAGS@ XMLSEC_LIBS = @XMLSEC_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ aqbanking_backends = @aqbanking_backends@ aqbanking_cfg_searchdir = @aqbanking_cfg_searchdir@ aqbanking_data_searchdir = @aqbanking_data_searchdir@ aqbanking_headerdir = @aqbanking_headerdir@ aqbanking_headerdir_am = @aqbanking_headerdir_am@ aqbanking_includes = @aqbanking_includes@ aqbanking_internal_libs = @aqbanking_internal_libs@ aqbanking_ldflags = @aqbanking_ldflags@ aqbanking_libs = @aqbanking_libs@ aqbanking_locale_searchdir = @aqbanking_locale_searchdir@ aqbanking_modules = @aqbanking_modules@ aqbanking_pkgdatadir = @aqbanking_pkgdatadir@ aqbanking_plugin_searchdir = @aqbanking_plugin_searchdir@ aqbanking_plugindir = @aqbanking_plugindir@ aqbanking_plugins_backends_dirs = @aqbanking_plugins_backends_dirs@ aqbanking_plugins_backends_libs = @aqbanking_plugins_backends_libs@ aqbanking_plugins_bankinfo_dirs = @aqbanking_plugins_bankinfo_dirs@ aqbanking_plugins_bankinfo_libs = @aqbanking_plugins_bankinfo_libs@ aqbanking_plugins_imexporters_dirs = @aqbanking_plugins_imexporters_dirs@ aqbanking_plugins_imexporters_libs = @aqbanking_plugins_imexporters_libs@ aqbanking_plugins_parsers_dirs = @aqbanking_plugins_parsers_dirs@ aqbanking_symlinkdir = @aqbanking_symlinkdir@ aqbanking_sys_is_windows = @aqbanking_sys_is_windows@ aqbankingpp_modules = @aqbankingpp_modules@ aqebics_datadir = @aqebics_datadir@ aqebics_includes = @aqebics_includes@ aqebics_internal_libs = @aqebics_internal_libs@ aqebics_ldflags = @aqebics_ldflags@ aqebics_libs = @aqebics_libs@ aqfints_datadir = @aqfints_datadir@ aqhbci_datadir = @aqhbci_datadir@ aqhbci_includes = @aqhbci_includes@ aqhbci_internal_libs = @aqhbci_internal_libs@ aqhbci_ldflags = @aqhbci_ldflags@ aqhbci_libs = @aqhbci_libs@ aqofxconnect_includes = @aqofxconnect_includes@ aqofxconnect_internal_libs = @aqofxconnect_internal_libs@ aqofxconnect_libs = @aqofxconnect_libs@ aqpaypal_includes = @aqpaypal_includes@ aqpaypal_internal_libs = @aqpaypal_internal_libs@ aqpaypal_libs = @aqpaypal_libs@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gmp_libs = @gmp_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_dir = @gwenhywfar_dir@ gwenhywfar_has_crypt = @gwenhywfar_has_crypt@ gwenhywfar_headers = @gwenhywfar_headers@ gwenhywfar_includes = @gwenhywfar_includes@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_plugins = @gwenhywfar_plugins@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ typemaker2_exe = @typemaker2_exe@ visibility_cflags = @visibility_cflags@ with_aqebics = @with_aqebics@ with_aqhbci = @with_aqhbci@ AM_CPPFLAGS = -I$(top_srcdir)/src/libs \ -I$(top_builddir)/src/libs \ $(gwenhywfar_includes) AM_CFLAGS = -DBUILDING_AQBANKING @visibility_cflags@ EXTRA_DIST = \ dbb.conf hbci.conf atblz.conf fedachdir.conf bcbankenstamm.conf \ kidaten.conf README de.tar.bz2 bankinfoplugindir = $(aqbanking_plugindir)/bankinfo bankinfodatadir = $(aqbanking_pkgdatadir)/bankinfo #DEFS += -DPLUGIN_DATADIR=\"$(bankinfodatadir)\" MKDEINFO = $(top_builddir)/src/tools/mkdeinfo/mkdeinfo noinst_LTLIBRARIES = libbankinfo_generic.la noinst_HEADERS = \ generic_p.h \ generic_l.h libbankinfo_generic_la_SOURCES = generic.c de_files = de/blz.idx de/bic.idx de/namloc.idx de/banks.data #atbankdatadir = $(bankinfodatadir)/at #atbankdata_DATA = $(at_files) debankdatadir = $(bankinfodatadir)/de debankdata_DATA = $(de_files) CLEANFILES = $(at_files) $(ch_files) $(de_files) $(ca_files) $(us_files) all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libs/plugins/bankinfo/generic/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libs/plugins/bankinfo/generic/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libbankinfo_generic.la: $(libbankinfo_generic_la_OBJECTS) $(libbankinfo_generic_la_DEPENDENCIES) $(EXTRA_libbankinfo_generic_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libbankinfo_generic_la_OBJECTS) $(libbankinfo_generic_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/generic.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-debankdataDATA: $(debankdata_DATA) @$(NORMAL_INSTALL) @list='$(debankdata_DATA)'; test -n "$(debankdatadir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(debankdatadir)'"; \ $(MKDIR_P) "$(DESTDIR)$(debankdatadir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(debankdatadir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(debankdatadir)" || exit $$?; \ done uninstall-debankdataDATA: @$(NORMAL_UNINSTALL) @list='$(debankdata_DATA)'; test -n "$(debankdatadir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(debankdatadir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS) all-local installdirs: for dir in "$(DESTDIR)$(debankdatadir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/generic.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-debankdataDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/generic.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-debankdataDATA .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am all-local am--depfiles check \ check-am clean clean-generic clean-libtool \ clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am \ install-debankdataDATA install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am uninstall-debankdataDATA .PRECIOUS: Makefile #chbankdatadir = $(bankinfodatadir)/ch #chbankdata_DATA = $(ch_files) #usbankdatadir = $(bankinfodatadir)/us #usbankdata_DATA = $(us_files) #cabankdatadir = $(bankinfodatadir)/ca #cabankdata_DATA = $(ca_files) de.tar.bz2: $(MKDEINFO) build data/de/blz.csv data/de/fints_institute.csv tmp.banks test -d de || mkdir -p de if test -f data/de/aux.conf; then \ $(MKDEINFO) update tmp.banks data/de/aux.conf tmp.banks; \ fi $(MKDEINFO) install tmp.banks de tar cf de.tar de && bzip2 -9 de.tar rm -rf tmp.banks $(de_files): de_files_tmp de_files_tmp: de.tar.bz2 test -d de || mkdir -p de bunzip2 -k -c $< | tar xmof - touch $@ .INTERMEDIATE: de_files_tmp bankdata: $(de_files) all-local: bankdata dist-local: de.tar.bz2 sources: for f in $(libbankinfo_generic_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done cppcheck: for f in $(libbankinfo_generic_la_SOURCES); do \ cppcheck --force $$f ; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: aqbanking-6.6.1/src/libs/plugins/bankinfo/generic/atblz.conf0000664000175000017500000000176714043610745021010 00000000000000# if 1 then values are quoted quote="1" int ignoreLines="5" # if 1 then a title line will be written containing the names of each # column title="1" # special values are "TAB" and "SPACE" delimiter=";" # this is the group name looked for in the given data to GWEN_CSV_Write # if not given then all groups match group="bank" # this group contains the definition for each column # each variable in this group has its number as name # you can use index variables in the names (using square brackets) # the value of each of these variables is the name of a variable to be looked # up in the data given to GWEN_CSV_Write columns { 1="xKennzeichen" 2="xIdentNummer" 3="bankId" 4="xInstitutsArt" 5="xSektor" 6="xFirmenbuchNummer" 7="bankName" 8="street" 9="zipCode" 10="location" 11="xPolitischerBezirk" 12="xPostStreet" 13="xPostZipCode" 14="xPostLocation" 15="xPostBox" 16="state" 17="phone" 18="xFax" 19="xEmail" 20="bic" 21="website" 22="xfoundationDate" } # columns aqbanking-6.6.1/src/libs/plugins/bankinfo/generic/bcbankenstamm.conf0000664000175000017500000000176114043610745022473 00000000000000 fixedWidth="1" condense="1" # if 1 then a title line will be written containing the names of each # column title="0" # this is the group name looked for in the given data to GWEN_CSV_Write # if not given then all groups match group="bank" width=2,5,4,5,6,5,1,8,1,1,1,15,60,35,35,10,35,18,18,5,2,12,14 # this group contains the definition for each column # each variable in this group has its number as name # you can use index variables in the names (using square brackets) # the value of each of these variables is the name of a variable to be looked # up in the data given to GWEN_CSV_Write columns { 1="xBankGroup" 2="bankId" 3="xFilialId" 4="xNewBankId" 5="xSicNumber" 6="xMainBankCode" 7="xBcType" 8="xValidSince" 9="xUseSic" 10="xUseEuroSic" 11="xLanguage" # 1=DE, 2=FR, 3=IT 12="xShortName" 13="bankName" 14="street" 15="xPostBox" 16="zipCode" 17="location" 18="phone" 19="xFax" 20="xCountryPrefix" 21="country" # ISO 3166 22="xPostalAccount" 23="bic" } # columns aqbanking-6.6.1/src/libs/plugins/bankinfo/generic/README0000664000175000017500000000224214576127774017712 00000000000000 This folder contains a convenience library which is used by bank info plugins to provide basic administration of bank info data. It is used by the plugin for AT and DE. Creating Data Files =================== The makefiles in this folder expect the following files to exist in the folder "data": German Banks: - blz.csv The most recent CSV file of the Deutsche Bundesbank containing information about German banks from https://www.bundesbank.de/de/aufgaben/unbarer-zahlungsverkehr/serviceangebot/bankleitzahlen/download-bankleitzahlen-602592) (quarterly updates) - fints_institute.csv CSV file containing information about banks supporting FinTS. This requires a registration via https://www.hbci-zka.de/dokumente/Registrierung_fuer_bankenliste.ZIP Austrian Banks: - blz-at.csv CSV file containing the list of Austrian banks (as provided by the Oesterreichische Bundesbank) http://www.oenb.at/idakilz/kiverzeichnis?action=toDownloadPage http://www.stuzza.at/BLZEDI.php Swiss Banks: - https://www.six-interbank-clearing.com/de/home/bank-master-data/download-bc-bank-master.html US Banks: - FedACHdir.txt https://www.fededirectory.frb.org/FedACHdir.txt aqbanking-6.6.1/src/libs/plugins/bankinfo/generic/generic_l.h0000664000175000017500000000135014043610745021111 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AQBANKING_BANKINFO_GENERIC_L_H #define AQBANKING_BANKINFO_GENERIC_L_H #include #include AB_BANKINFO_PLUGIN *AB_BankInfoPluginGENERIC_new(AB_BANKING *ab, const char *country); #endif aqbanking-6.6.1/src/libs/plugins/bankinfo/dummy.c0000664000175000017500000000000014043610745016663 00000000000000aqbanking-6.6.1/src/libs/plugins/bankinfo/Makefile.in0000644000175000017500000006547315037736026017465 00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/libs/plugins/bankinfo ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/distri.m4 $(top_srcdir)/m4/gwenhywfar.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/os.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libabbankinfo_la_DEPENDENCIES = am_libabbankinfo_la_OBJECTS = dummy.lo libabbankinfo_la_OBJECTS = $(am_libabbankinfo_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/dummy.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libabbankinfo_la_SOURCES) DIST_SOURCES = $(libabbankinfo_la_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir distdir-am am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ADD_ACLOCAL_FLAGS = @ADD_ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AQBANKING_CLI_VERSION_STRING = @AQBANKING_CLI_VERSION_STRING@ AQBANKING_FINTS_VERSION_STRING = @AQBANKING_FINTS_VERSION_STRING@ AQBANKING_SO_AGE = @AQBANKING_SO_AGE@ AQBANKING_SO_CURRENT = @AQBANKING_SO_CURRENT@ AQBANKING_SO_EFFECTIVE = @AQBANKING_SO_EFFECTIVE@ AQBANKING_SO_REVISION = @AQBANKING_SO_REVISION@ AQBANKING_VERSION_BUILD = @AQBANKING_VERSION_BUILD@ AQBANKING_VERSION_FULL_STRING = @AQBANKING_VERSION_FULL_STRING@ AQBANKING_VERSION_MAJOR = @AQBANKING_VERSION_MAJOR@ AQBANKING_VERSION_MINOR = @AQBANKING_VERSION_MINOR@ AQBANKING_VERSION_PATCHLEVEL = @AQBANKING_VERSION_PATCHLEVEL@ AQBANKING_VERSION_RELEASE_STRING = @AQBANKING_VERSION_RELEASE_STRING@ AQBANKING_VERSION_STRING = @AQBANKING_VERSION_STRING@ AQBANKING_VERSION_TAG = @AQBANKING_VERSION_TAG@ AQEBICS_CFLAGS = @AQEBICS_CFLAGS@ AQEBICS_LIBS = @AQEBICS_LIBS@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATETIME = @DATETIME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_EXCLUDE_PATTERNS = @DOXYGEN_EXCLUDE_PATTERNS@ DOXYGEN_FILE_PATTERNS = @DOXYGEN_FILE_PATTERNS@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENGUI_GTK2_CFLAGS = @GWENGUI_GTK2_CFLAGS@ GWENGUI_GTK2_LIBS = @GWENGUI_GTK2_LIBS@ GWENHYWFAR_MINIMUM_VERSION = @GWENHYWFAR_MINIMUM_VERSION@ HAVE_GWENGUI_GTK2 = @HAVE_GWENGUI_GTK2@ HAVE_I18N = @HAVE_I18N@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIBXSLT_CFLAGS = @LIBXSLT_CFLAGS@ LIBXSLT_LIBS = @LIBXSLT_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_SUPPORTS_QT = @MSGFMT_SUPPORTS_QT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ TUTORIALS = @TUTORIALS@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XMLMERGE = @XMLMERGE@ XMLSEC_CFLAGS = @XMLSEC_CFLAGS@ XMLSEC_LIBS = @XMLSEC_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ aqbanking_backends = @aqbanking_backends@ aqbanking_cfg_searchdir = @aqbanking_cfg_searchdir@ aqbanking_data_searchdir = @aqbanking_data_searchdir@ aqbanking_headerdir = @aqbanking_headerdir@ aqbanking_headerdir_am = @aqbanking_headerdir_am@ aqbanking_includes = @aqbanking_includes@ aqbanking_internal_libs = @aqbanking_internal_libs@ aqbanking_ldflags = @aqbanking_ldflags@ aqbanking_libs = @aqbanking_libs@ aqbanking_locale_searchdir = @aqbanking_locale_searchdir@ aqbanking_modules = @aqbanking_modules@ aqbanking_pkgdatadir = @aqbanking_pkgdatadir@ aqbanking_plugin_searchdir = @aqbanking_plugin_searchdir@ aqbanking_plugindir = @aqbanking_plugindir@ aqbanking_plugins_backends_dirs = @aqbanking_plugins_backends_dirs@ aqbanking_plugins_backends_libs = @aqbanking_plugins_backends_libs@ aqbanking_plugins_bankinfo_dirs = @aqbanking_plugins_bankinfo_dirs@ aqbanking_plugins_bankinfo_libs = @aqbanking_plugins_bankinfo_libs@ aqbanking_plugins_imexporters_dirs = @aqbanking_plugins_imexporters_dirs@ aqbanking_plugins_imexporters_libs = @aqbanking_plugins_imexporters_libs@ aqbanking_plugins_parsers_dirs = @aqbanking_plugins_parsers_dirs@ aqbanking_symlinkdir = @aqbanking_symlinkdir@ aqbanking_sys_is_windows = @aqbanking_sys_is_windows@ aqbankingpp_modules = @aqbankingpp_modules@ aqebics_datadir = @aqebics_datadir@ aqebics_includes = @aqebics_includes@ aqebics_internal_libs = @aqebics_internal_libs@ aqebics_ldflags = @aqebics_ldflags@ aqebics_libs = @aqebics_libs@ aqfints_datadir = @aqfints_datadir@ aqhbci_datadir = @aqhbci_datadir@ aqhbci_includes = @aqhbci_includes@ aqhbci_internal_libs = @aqhbci_internal_libs@ aqhbci_ldflags = @aqhbci_ldflags@ aqhbci_libs = @aqhbci_libs@ aqofxconnect_includes = @aqofxconnect_includes@ aqofxconnect_internal_libs = @aqofxconnect_internal_libs@ aqofxconnect_libs = @aqofxconnect_libs@ aqpaypal_includes = @aqpaypal_includes@ aqpaypal_internal_libs = @aqpaypal_internal_libs@ aqpaypal_libs = @aqpaypal_libs@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gmp_libs = @gmp_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_dir = @gwenhywfar_dir@ gwenhywfar_has_crypt = @gwenhywfar_has_crypt@ gwenhywfar_headers = @gwenhywfar_headers@ gwenhywfar_includes = @gwenhywfar_includes@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_plugins = @gwenhywfar_plugins@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ typemaker2_exe = @typemaker2_exe@ visibility_cflags = @visibility_cflags@ with_aqebics = @with_aqebics@ with_aqhbci = @with_aqhbci@ DIST_SUBDIRS = generic de SUBDIRS = generic $(aqbanking_plugins_bankinfo_dirs) noinst_LTLIBRARIES = libabbankinfo.la libabbankinfo_la_SOURCES = dummy.c libabbankinfo_la_LIBADD = @aqbanking_plugins_bankinfo_libs@ all: all-recursive .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libs/plugins/bankinfo/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libs/plugins/bankinfo/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libabbankinfo.la: $(libabbankinfo_la_OBJECTS) $(libabbankinfo_la_DEPENDENCIES) $(EXTRA_libabbankinfo_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libabbankinfo_la_OBJECTS) $(libabbankinfo_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dummy.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(LTLIBRARIES) installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-recursive -rm -f ./$(DEPDIR)/dummy.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f ./$(DEPDIR)/dummy.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ am--depfiles check check-am clean clean-generic clean-libtool \ clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am .PRECIOUS: Makefile sources: for d in $(SUBDIRS); do \ $(MAKE) -C $$d sources; \ done built_sources: cppcheck: for f in $(libabbankinfo_la_SOURCES); do \ cppcheck --force $$f ; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: aqbanking-6.6.1/src/libs/plugins/bankinfo/Makefile.am0000664000175000017500000000070014043610745017427 00000000000000DIST_SUBDIRS=generic de SUBDIRS=generic $(aqbanking_plugins_bankinfo_dirs) noinst_LTLIBRARIES=libabbankinfo.la libabbankinfo_la_SOURCES=dummy.c libabbankinfo_la_LIBADD=@aqbanking_plugins_bankinfo_libs@ sources: for d in $(SUBDIRS); do \ $(MAKE) -C $$d sources; \ done built_sources: cppcheck: for f in $(libabbankinfo_la_SOURCES); do \ cppcheck --force $$f ; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done aqbanking-6.6.1/src/Makefile.in0000644000175000017500000005623115037736024013252 00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/distri.m4 $(top_srcdir)/m4/gwenhywfar.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/os.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir distdir-am am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ADD_ACLOCAL_FLAGS = @ADD_ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AQBANKING_CLI_VERSION_STRING = @AQBANKING_CLI_VERSION_STRING@ AQBANKING_FINTS_VERSION_STRING = @AQBANKING_FINTS_VERSION_STRING@ AQBANKING_SO_AGE = @AQBANKING_SO_AGE@ AQBANKING_SO_CURRENT = @AQBANKING_SO_CURRENT@ AQBANKING_SO_EFFECTIVE = @AQBANKING_SO_EFFECTIVE@ AQBANKING_SO_REVISION = @AQBANKING_SO_REVISION@ AQBANKING_VERSION_BUILD = @AQBANKING_VERSION_BUILD@ AQBANKING_VERSION_FULL_STRING = @AQBANKING_VERSION_FULL_STRING@ AQBANKING_VERSION_MAJOR = @AQBANKING_VERSION_MAJOR@ AQBANKING_VERSION_MINOR = @AQBANKING_VERSION_MINOR@ AQBANKING_VERSION_PATCHLEVEL = @AQBANKING_VERSION_PATCHLEVEL@ AQBANKING_VERSION_RELEASE_STRING = @AQBANKING_VERSION_RELEASE_STRING@ AQBANKING_VERSION_STRING = @AQBANKING_VERSION_STRING@ AQBANKING_VERSION_TAG = @AQBANKING_VERSION_TAG@ AQEBICS_CFLAGS = @AQEBICS_CFLAGS@ AQEBICS_LIBS = @AQEBICS_LIBS@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATETIME = @DATETIME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_EXCLUDE_PATTERNS = @DOXYGEN_EXCLUDE_PATTERNS@ DOXYGEN_FILE_PATTERNS = @DOXYGEN_FILE_PATTERNS@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENGUI_GTK2_CFLAGS = @GWENGUI_GTK2_CFLAGS@ GWENGUI_GTK2_LIBS = @GWENGUI_GTK2_LIBS@ GWENHYWFAR_MINIMUM_VERSION = @GWENHYWFAR_MINIMUM_VERSION@ HAVE_GWENGUI_GTK2 = @HAVE_GWENGUI_GTK2@ HAVE_I18N = @HAVE_I18N@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIBXSLT_CFLAGS = @LIBXSLT_CFLAGS@ LIBXSLT_LIBS = @LIBXSLT_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_SUPPORTS_QT = @MSGFMT_SUPPORTS_QT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ TUTORIALS = @TUTORIALS@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XMLMERGE = @XMLMERGE@ XMLSEC_CFLAGS = @XMLSEC_CFLAGS@ XMLSEC_LIBS = @XMLSEC_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ aqbanking_backends = @aqbanking_backends@ aqbanking_cfg_searchdir = @aqbanking_cfg_searchdir@ aqbanking_data_searchdir = @aqbanking_data_searchdir@ aqbanking_headerdir = @aqbanking_headerdir@ aqbanking_headerdir_am = @aqbanking_headerdir_am@ aqbanking_includes = @aqbanking_includes@ aqbanking_internal_libs = @aqbanking_internal_libs@ aqbanking_ldflags = @aqbanking_ldflags@ aqbanking_libs = @aqbanking_libs@ aqbanking_locale_searchdir = @aqbanking_locale_searchdir@ aqbanking_modules = @aqbanking_modules@ aqbanking_pkgdatadir = @aqbanking_pkgdatadir@ aqbanking_plugin_searchdir = @aqbanking_plugin_searchdir@ aqbanking_plugindir = @aqbanking_plugindir@ aqbanking_plugins_backends_dirs = @aqbanking_plugins_backends_dirs@ aqbanking_plugins_backends_libs = @aqbanking_plugins_backends_libs@ aqbanking_plugins_bankinfo_dirs = @aqbanking_plugins_bankinfo_dirs@ aqbanking_plugins_bankinfo_libs = @aqbanking_plugins_bankinfo_libs@ aqbanking_plugins_imexporters_dirs = @aqbanking_plugins_imexporters_dirs@ aqbanking_plugins_imexporters_libs = @aqbanking_plugins_imexporters_libs@ aqbanking_plugins_parsers_dirs = @aqbanking_plugins_parsers_dirs@ aqbanking_symlinkdir = @aqbanking_symlinkdir@ aqbanking_sys_is_windows = @aqbanking_sys_is_windows@ aqbankingpp_modules = @aqbankingpp_modules@ aqebics_datadir = @aqebics_datadir@ aqebics_includes = @aqebics_includes@ aqebics_internal_libs = @aqebics_internal_libs@ aqebics_ldflags = @aqebics_ldflags@ aqebics_libs = @aqebics_libs@ aqfints_datadir = @aqfints_datadir@ aqhbci_datadir = @aqhbci_datadir@ aqhbci_includes = @aqhbci_includes@ aqhbci_internal_libs = @aqhbci_internal_libs@ aqhbci_ldflags = @aqhbci_ldflags@ aqhbci_libs = @aqhbci_libs@ aqofxconnect_includes = @aqofxconnect_includes@ aqofxconnect_internal_libs = @aqofxconnect_internal_libs@ aqofxconnect_libs = @aqofxconnect_libs@ aqpaypal_includes = @aqpaypal_includes@ aqpaypal_internal_libs = @aqpaypal_internal_libs@ aqpaypal_libs = @aqpaypal_libs@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gmp_libs = @gmp_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_dir = @gwenhywfar_dir@ gwenhywfar_has_crypt = @gwenhywfar_has_crypt@ gwenhywfar_headers = @gwenhywfar_headers@ gwenhywfar_includes = @gwenhywfar_includes@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_plugins = @gwenhywfar_plugins@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ typemaker2_exe = @typemaker2_exe@ visibility_cflags = @visibility_cflags@ with_aqebics = @with_aqebics@ with_aqhbci = @with_aqhbci@ SUBDIRS = libs tools test all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic clean-libtool cscopelist-am ctags \ ctags-am distclean distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am .PRECIOUS: Makefile sources: for d in $(SUBDIRS); do \ $(MAKE) -C $$d sources; \ done built_sources: for d in $(SUBDIRS); do \ $(MAKE) -C $$d built_sources; \ done ; cppcheck: for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done typefiles: for d in $(SUBDIRS); do \ $(MAKE) -C $$d typefiles; \ done typedefs: for d in $(SUBDIRS); do \ $(MAKE) -C $$d typedefs; \ done # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: aqbanking-6.6.1/src/tools/0000755000175000017500000000000015037736165012424 500000000000000aqbanking-6.6.1/src/tools/mkdeinfo/0000755000175000017500000000000015037736165014220 500000000000000aqbanking-6.6.1/src/tools/mkdeinfo/mkdeinfo.c0000664000175000017500000015736514043610745016112 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include #include #include #include #include #include #include #include #ifndef GWEN_DIR_SEPARATOR_S /* for gwenyhwfar < 2.5.4 */ # define GWEN_DIR_SEPARATOR '/' # define GWEN_DIR_SEPARATOR_S "/" #endif #define FUZZY_SHIFT 10 #define FUZZY_THRESHOLD 850 static AB_BANKINFO_LIST *bis=0; static GWEN_DB_NODE *dbIdx=0; int readCSVFile(const char *fname, const char *pname, GWEN_DB_NODE *db) { GWEN_DB_NODE *dbParams; dbParams=GWEN_DB_Group_new("params"); if (GWEN_DB_ReadFile(dbParams, pname, GWEN_DB_FLAGS_DEFAULT)) { DBG_ERROR(0, "Error reading profile file \"%s\"", pname); GWEN_DB_Group_free(dbParams); return -1; } if (GWEN_DB_ReadFileAs(db, fname, "csv", dbParams, GWEN_PATH_FLAGS_CREATE_GROUP)) { DBG_ERROR(0, "Error reading data file \"%s\"", fname); GWEN_DB_Group_free(dbParams); return -1; } GWEN_DB_Group_free(dbParams); return 0; } AB_BANKINFO *findBankInfo(AB_BANKINFO *bi, const char *blz, const char *location) { while (bi) { const char *lblz; const char *lloc; lblz=AB_BankInfo_GetBankId(bi); lloc=AB_BankInfo_GetLocation(bi); if (lblz && blz) { if (GWEN_Text_ComparePattern(lblz, blz, 0)!=-1) { if (!location || (location && lloc && GWEN_Text_ComparePattern(lloc, location, 0)!=-1)) break; } } bi=AB_BankInfo_List_Next(bi); } return bi; } AB_BANKINFO *findFirstBankInfo(const char *blz, const char *location) { AB_BANKINFO *bi; bi=AB_BankInfo_List_First(bis); return findBankInfo(bi, blz, location); } AB_BANKINFO *findNextBankInfo(AB_BANKINFO *bi, const char *blz, const char *location) { bi=AB_BankInfo_List_Next(bi); return findBankInfo(bi, blz, location); } void isoToUtf8(const char *p, int size, GWEN_BUFFER *buf) { while (*p) { unsigned int c; if (!size) break; c=(unsigned char)(*(p++)); switch (c) { case 0xc4: /* AE */ GWEN_Buffer_AppendByte(buf, 0xc3); GWEN_Buffer_AppendByte(buf, 0x84); break; case 0xe4: /* ae */ GWEN_Buffer_AppendByte(buf, 0xc3); GWEN_Buffer_AppendByte(buf, 0xa4); break; case 0xd6: /* OE */ GWEN_Buffer_AppendByte(buf, 0xc3); GWEN_Buffer_AppendByte(buf, 0x96); break; case 0xf6: /* oe */ GWEN_Buffer_AppendByte(buf, 0xc3); GWEN_Buffer_AppendByte(buf, 0xb6); break; case 0xdc: /* UE */ GWEN_Buffer_AppendByte(buf, 0xc3); GWEN_Buffer_AppendByte(buf, 0x9c); break; case 0xfc: /* ue */ GWEN_Buffer_AppendByte(buf, 0xc3); GWEN_Buffer_AppendByte(buf, 0xbc); break; case 0xdf: /* sz */ GWEN_Buffer_AppendByte(buf, 0xc3); GWEN_Buffer_AppendByte(buf, 0x9f); break; case 0xa7: /* section sign */ GWEN_Buffer_AppendByte(buf, 0xc3); GWEN_Buffer_AppendByte(buf, 0x67); break; /* english chars */ case 0xa3: /* pound swign */ GWEN_Buffer_AppendByte(buf, 0xc3); GWEN_Buffer_AppendByte(buf, 0x63); break; /* french chars */ case 0xc7: /* C cedille */ GWEN_Buffer_AppendByte(buf, 0xc3); GWEN_Buffer_AppendByte(buf, 0x87); break; case 0xe0: /* a accent grave */ GWEN_Buffer_AppendByte(buf, 0xc3); GWEN_Buffer_AppendByte(buf, 0xa0); break; case 0xe1: /* a accent aigu */ GWEN_Buffer_AppendByte(buf, 0xc3); GWEN_Buffer_AppendByte(buf, 0xa1); break; case 0xe2: /* a accent circumflex */ GWEN_Buffer_AppendByte(buf, 0xc3); GWEN_Buffer_AppendByte(buf, 0xa2); break; case 0xe7: /* c cedille */ GWEN_Buffer_AppendByte(buf, 0xc3); GWEN_Buffer_AppendByte(buf, 0xa7); break; case 0xe8: /* e accent grave */ GWEN_Buffer_AppendByte(buf, 0xc3); GWEN_Buffer_AppendByte(buf, 0xa8); break; case 0xe9: /* e accent aigu */ GWEN_Buffer_AppendByte(buf, 0xc3); GWEN_Buffer_AppendByte(buf, 0xa9); break; case 0xea: /* e accent circumflex */ GWEN_Buffer_AppendByte(buf, 0xc3); GWEN_Buffer_AppendByte(buf, 0xaa); break; case 0xec: /* i accent grave (never heard of this) */ GWEN_Buffer_AppendByte(buf, 0xc3); GWEN_Buffer_AppendByte(buf, 0xac); break; case 0xed: /* i accent aigu (never heard of this, either) */ GWEN_Buffer_AppendByte(buf, 0xc3); GWEN_Buffer_AppendByte(buf, 0xad); break; case 0xee: /* i accent circumflex (never heard of this, either) */ GWEN_Buffer_AppendByte(buf, 0xc3); GWEN_Buffer_AppendByte(buf, 0xae); break; case 0xf2: /* o accent grave */ GWEN_Buffer_AppendByte(buf, 0xc3); GWEN_Buffer_AppendByte(buf, 0xb2); break; case 0xf3: /* o accent aigu */ GWEN_Buffer_AppendByte(buf, 0xc3); GWEN_Buffer_AppendByte(buf, 0xb3); break; case 0xf4: /* o accent circumflex */ GWEN_Buffer_AppendByte(buf, 0xc3); GWEN_Buffer_AppendByte(buf, 0xb4); break; case 0xf9: /* u accent grave */ GWEN_Buffer_AppendByte(buf, 0xc3); GWEN_Buffer_AppendByte(buf, 0xb9); break; case 0xfa: /* u accent aigu */ GWEN_Buffer_AppendByte(buf, 0xc3); GWEN_Buffer_AppendByte(buf, 0xba); break; case 0xfb: /* u accent circumflex */ GWEN_Buffer_AppendByte(buf, 0xc3); GWEN_Buffer_AppendByte(buf, 0xbb); break; default: GWEN_Buffer_AppendByte(buf, c); } if (size!=-1) size--; } /* while */ } uint32_t _word_similarity(const char *a, const char *b) { uint32_t score = 0; size_t l = 0; while (*a && *b) { if (*a == *b) score += 1 << FUZZY_SHIFT; else if (*a == b[1]) { score += 1 << (FUZZY_SHIFT-2); b++; } else if (a[1] == *b) { score += 1 << (FUZZY_SHIFT-2); a++; l++; } a++; b++; l++; } if ('\0' != *a) l += strlen(a); return score / l; } int _is_ascii_alnum(unsigned char c) { return ((c>='A' || c<='Z') || (c>='a' || c<='z') || (c>='0' || c<='9') || c>=128); } GWEN_STRINGLIST *_make_word_list(const char *str) { GWEN_STRINGLIST *sl; sl=GWEN_StringList_new(); while (*str) { const char *p; size_t size; while (*str && !_is_ascii_alnum(*str)) str++; p=str; while (*str && _is_ascii_alnum(*str)) { str++; } size=(str-p); if (*p) { char *wptr; char *t; size_t i; wptr=(char *)malloc(size+1); t=wptr; for (i=0; i0)?(score/n):0; } uint32_t _find_score(GWEN_STRINGLIST *a, GWEN_STRINGLIST *b) { uint32_t score = 0; uint32_t n = 0; GWEN_STRINGLISTENTRY *se; se=GWEN_StringList_FirstEntry(a); while (se) { const char *p; n++; p=GWEN_StringListEntry_Data(se); assert(p); score+=_cmp_word_list(p, b); se=GWEN_StringListEntry_Next(se); } return (n>0)?(score/n):0; } uint32_t FuzzyCompare(const char *str1, const char *str2) { GWEN_STRINGLIST *a; GWEN_STRINGLIST *b; uint32_t score; a=_make_word_list(str1); b=_make_word_list(str2); score=(_find_score(a, b) + _find_score(b, a))/2; GWEN_StringList_free(b); GWEN_StringList_free(a); return score; } int readDBBFile(const char *fname) { GWEN_DB_NODE *dbData; GWEN_DB_NODE *dbT; int count=0; dbData=GWEN_DB_Group_new("data"); fprintf(stdout, "Reading Deutsche Bundesbank file...\n"); if (readCSVFile(fname, "dbb.conf", dbData)) { DBG_ERROR(0, "Error reading DBB file \"%s\"", fname); GWEN_DB_Group_free(dbData); return -1; } fprintf(stdout, "Building database...\n"); dbT=GWEN_DB_FindFirstGroup(dbData, "bank"); while (dbT) { const char *lblz; const char *lloc; lblz=GWEN_DB_GetCharValue(dbT, "bankId", 0, 0); lloc=GWEN_DB_GetCharValue(dbT, "location", 0, 0); if (lloc && lblz && isdigit(*lblz)) { if (strcasecmp(lblz, "0")!=0) { AB_BANKINFO *bi; bi=AB_BankInfo_fromDb(dbT); assert(bi); AB_BankInfo_SetCity(bi, lloc); AB_BankInfo_List_Add(bi, bis); count++; } } dbT=GWEN_DB_FindNextGroup(dbT, "bank"); } GWEN_DB_Group_free(dbData); fprintf(stdout, "Found %d banks\n", count); return 0; } int readHBCIFile(const char *fname) { GWEN_DB_NODE *dbData; GWEN_DB_NODE *dbT; int count=0; dbData=GWEN_DB_Group_new("data"); fprintf(stdout, "Reading HBCI file...\n"); if (readCSVFile(fname, "hbci.conf", dbData)) { DBG_ERROR(0, "Error reading HBCI file \"%s\"", fname); GWEN_DB_Group_free(dbData); return -1; } if (GWEN_DB_WriteFile(dbData, "out.conf", GWEN_DB_FLAGS_QUOTE_VALUES | \ GWEN_DB_FLAGS_WRITE_SUBGROUPS | \ GWEN_DB_FLAGS_INDEND | \ GWEN_DB_FLAGS_ADD_GROUP_NEWLINES | \ GWEN_DB_FLAGS_ESCAPE_CHARVALUES | \ GWEN_DB_FLAGS_OMIT_TYPES)) { DBG_ERROR(0, "Error writing bank file"); return -1; } fprintf(stdout, "Updating database...\n"); dbT=GWEN_DB_FindFirstGroup(dbData, "bank"); while (dbT) { const char *lblz; const char *lloc; lblz=GWEN_DB_GetCharValue(dbT, "bankId", 0, 0); lloc=GWEN_DB_GetCharValue(dbT, "location", 0, 0); if (lblz && lloc) { AB_BANKINFO *bi; bi=findFirstBankInfo(lblz, lloc); while (bi) { const char *addr; const char *ver; count++; addr=GWEN_DB_GetCharValue(dbT, "hostName", 0, 0); if (addr==0) addr=GWEN_DB_GetCharValue(dbT, "hostIp", 0, 0); ver=GWEN_DB_GetCharValue(dbT, "hbciVersion", 0, 0); if (ver) { /* normalize version */ if (strcmp(ver, "2")==0 || strcmp(ver, "2.01")==0 || strcmp(ver, "2.0.1")==0) ver="2.01"; else if (strcmp(ver, "2.1")==0 || strcmp(ver, "2.10")==0 || strcmp(ver, "2.1.0")==0) ver="2.10"; else if (strcmp(ver, "2.2")==0 || strcmp(ver, "2.20")==0 || strcmp(ver, "2.2.0")==0) ver="2.20"; else if (strcmp(ver, "3")==0 || strcmp(ver, "3.0")==0 || strcmp(ver, "3.0.0")==0) ver="3.0"; else if (strcmp(ver, "4")==0 || strcmp(ver, "4.0")==0 || strcmp(ver, "4.0.0")==0) ver="3.0"; } if (addr) { const char *s; s=GWEN_DB_GetCharValue(dbT, "ddv", 0, "nein"); if (strcasecmp(s, "ja")==0) { AB_BANKINFO_SERVICE *sv; sv=AB_BankInfoService_new(); AB_BankInfoService_SetType(sv, "HBCI"); AB_BankInfoService_SetAddress(sv, addr); AB_BankInfoService_SetPversion(sv, ver); AB_BankInfoService_SetMode(sv, "DDV"); AB_BankInfoService_List_Add(sv, AB_BankInfo_GetServices(bi)); } /* if DDV */ s=GWEN_DB_GetCharValue(dbT, "rdh1", 0, "nein"); if (strcasecmp(s, "ja")==0) { AB_BANKINFO_SERVICE *sv; sv=AB_BankInfoService_new(); AB_BankInfoService_SetType(sv, "HBCI"); AB_BankInfoService_SetAddress(sv, addr); AB_BankInfoService_SetPversion(sv, ver); AB_BankInfoService_SetMode(sv, "RDH1"); AB_BankInfoService_List_Add(sv, AB_BankInfo_GetServices(bi)); } /* if RDH1 */ s=GWEN_DB_GetCharValue(dbT, "rdh2", 0, "nein"); if (strcasecmp(s, "ja")==0) { AB_BANKINFO_SERVICE *sv; sv=AB_BankInfoService_new(); AB_BankInfoService_SetType(sv, "HBCI"); AB_BankInfoService_SetAddress(sv, addr); AB_BankInfoService_SetPversion(sv, ver); AB_BankInfoService_SetMode(sv, "RDH2"); AB_BankInfoService_List_Add(sv, AB_BankInfo_GetServices(bi)); } /* if RDH2 */ s=GWEN_DB_GetCharValue(dbT, "rdh3", 0, "nein"); if (strcasecmp(s, "ja")==0) { AB_BANKINFO_SERVICE *sv; sv=AB_BankInfoService_new(); AB_BankInfoService_SetType(sv, "HBCI"); AB_BankInfoService_SetAddress(sv, addr); AB_BankInfoService_SetPversion(sv, ver); AB_BankInfoService_SetMode(sv, "RDH3"); AB_BankInfoService_List_Add(sv, AB_BankInfo_GetServices(bi)); } /* if RDH3 */ s=GWEN_DB_GetCharValue(dbT, "rdh4", 0, "nein"); if (strcasecmp(s, "ja")==0) { AB_BANKINFO_SERVICE *sv; sv=AB_BankInfoService_new(); AB_BankInfoService_SetType(sv, "HBCI"); AB_BankInfoService_SetAddress(sv, addr); AB_BankInfoService_SetPversion(sv, ver); AB_BankInfoService_SetMode(sv, "RDH4"); AB_BankInfoService_List_Add(sv, AB_BankInfo_GetServices(bi)); } /* if RDH4 */ s=GWEN_DB_GetCharValue(dbT, "rdh5", 0, "nein"); if (strcasecmp(s, "ja")==0) { AB_BANKINFO_SERVICE *sv; sv=AB_BankInfoService_new(); AB_BankInfoService_SetType(sv, "HBCI"); AB_BankInfoService_SetAddress(sv, addr); AB_BankInfoService_SetPversion(sv, ver); AB_BankInfoService_SetMode(sv, "RDH5"); AB_BankInfoService_List_Add(sv, AB_BankInfo_GetServices(bi)); } /* if RDH5 */ s=GWEN_DB_GetCharValue(dbT, "rdh6", 0, "nein"); if (strcasecmp(s, "ja")==0) { AB_BANKINFO_SERVICE *sv; sv=AB_BankInfoService_new(); AB_BankInfoService_SetType(sv, "HBCI"); AB_BankInfoService_SetAddress(sv, addr); AB_BankInfoService_SetPversion(sv, ver); AB_BankInfoService_SetMode(sv, "RDH6"); AB_BankInfoService_List_Add(sv, AB_BankInfo_GetServices(bi)); } /* if RDH6 */ s=GWEN_DB_GetCharValue(dbT, "rdh7", 0, "nein"); if (strcasecmp(s, "ja")==0) { AB_BANKINFO_SERVICE *sv; sv=AB_BankInfoService_new(); AB_BankInfoService_SetType(sv, "HBCI"); AB_BankInfoService_SetAddress(sv, addr); AB_BankInfoService_SetPversion(sv, ver); AB_BankInfoService_SetMode(sv, "RDH7"); AB_BankInfoService_List_Add(sv, AB_BankInfo_GetServices(bi)); } /* if RDH7 */ s=GWEN_DB_GetCharValue(dbT, "rdh8", 0, "nein"); if (strcasecmp(s, "ja")==0) { AB_BANKINFO_SERVICE *sv; sv=AB_BankInfoService_new(); AB_BankInfoService_SetType(sv, "HBCI"); AB_BankInfoService_SetAddress(sv, addr); AB_BankInfoService_SetPversion(sv, ver); AB_BankInfoService_SetMode(sv, "RDH8"); AB_BankInfoService_List_Add(sv, AB_BankInfo_GetServices(bi)); } /* if RDH8 */ s=GWEN_DB_GetCharValue(dbT, "rdh9", 0, "nein"); if (strcasecmp(s, "ja")==0) { AB_BANKINFO_SERVICE *sv; sv=AB_BankInfoService_new(); AB_BankInfoService_SetType(sv, "HBCI"); AB_BankInfoService_SetAddress(sv, addr); AB_BankInfoService_SetPversion(sv, ver); AB_BankInfoService_SetMode(sv, "RDH9"); AB_BankInfoService_List_Add(sv, AB_BankInfo_GetServices(bi)); } /* if RDH9 */ s=GWEN_DB_GetCharValue(dbT, "rdh10", 0, "nein"); if (strcasecmp(s, "ja")==0) { AB_BANKINFO_SERVICE *sv; sv=AB_BankInfoService_new(); AB_BankInfoService_SetType(sv, "HBCI"); AB_BankInfoService_SetAddress(sv, addr); AB_BankInfoService_SetPversion(sv, ver); AB_BankInfoService_SetMode(sv, "RDH10"); AB_BankInfoService_List_Add(sv, AB_BankInfo_GetServices(bi)); } /* if RDH10 */ s=GWEN_DB_GetCharValue(dbT, "pinTanUrl", 0, 0); if (s && *s) { AB_BANKINFO_SERVICE *sv; sv=AB_BankInfoService_new(); AB_BankInfoService_SetType(sv, "HBCI"); AB_BankInfoService_SetAddress(sv, s); AB_BankInfoService_SetPversion(sv, ver); AB_BankInfoService_SetMode(sv, "PINTAN"); AB_BankInfoService_List_Add(sv, AB_BankInfo_GetServices(bi)); } /* id PINTAN */ } /* if addr */ bi=findNextBankInfo(bi, lblz, lloc); } } dbT=GWEN_DB_FindNextGroup(dbT, "bank"); } GWEN_DB_Group_free(dbData); fprintf(stdout, "Updated %d banks\n", count); return 0; } int readATBLZFile(const char *fname) { GWEN_DB_NODE *dbData; GWEN_DB_NODE *dbT; int count=0; dbData=GWEN_DB_Group_new("data"); fprintf(stdout, "Reading Austrian Bank file...\n"); if (readCSVFile(fname, "atblz.conf", dbData)) { DBG_ERROR(0, "Error reading ATBLZ file \"%s\"", fname); GWEN_DB_Group_free(dbData); return -1; } fprintf(stdout, "Building database...\n"); dbT=GWEN_DB_FindFirstGroup(dbData, "bank"); while (dbT) { const char *lblz; lblz=GWEN_DB_GetCharValue(dbT, "bankId", 0, 0); if (lblz && isdigit(*lblz)) { if (strcasecmp(lblz, "0")!=0) { AB_BANKINFO *bi; bi=AB_BankInfo_fromDb(dbT); assert(bi); AB_BankInfo_List_Add(bi, bis); count++; } } dbT=GWEN_DB_FindNextGroup(dbT, "bank"); } GWEN_DB_Group_free(dbData); fprintf(stdout, "Found %d banks\n", count); return 0; } int readATBLZFile2(const char *fname) { GWEN_DB_NODE *dbData; GWEN_DB_NODE *dbT; int count=0; dbData=GWEN_DB_Group_new("data"); fprintf(stdout, "Reading KIDATEN file...\n"); if (readCSVFile(fname, "kidaten.conf", dbData)) { DBG_ERROR(0, "Error reading KIDATEN file \"%s\"", fname); GWEN_DB_Group_free(dbData); return -1; } if (GWEN_DB_WriteFile(dbData, "out.conf", GWEN_DB_FLAGS_QUOTE_VALUES | \ GWEN_DB_FLAGS_WRITE_SUBGROUPS | \ GWEN_DB_FLAGS_INDEND | \ GWEN_DB_FLAGS_ADD_GROUP_NEWLINES | \ GWEN_DB_FLAGS_ESCAPE_CHARVALUES | \ GWEN_DB_FLAGS_OMIT_TYPES)) { DBG_ERROR(0, "Error writing bank file"); return -1; } fprintf(stdout, "Updating database...\n"); dbT=GWEN_DB_FindFirstGroup(dbData, "bank"); while (dbT) { const char *lblz; const char *lloc; lblz=GWEN_DB_GetCharValue(dbT, "bankId", 0, 0); lloc=GWEN_DB_GetCharValue(dbT, "location", 0, 0); if (lblz && lloc) { AB_BANKINFO *bi; bi=findFirstBankInfo(lblz, 0); if (!bi) { /* new bank, add it */ bi=AB_BankInfo_fromDb(dbT); if (bi) { AB_BankInfo_List_Add(bi, bis); count++; } } /* if bank is new */ else { while (bi) { const char *s; s=GWEN_DB_GetCharValue(dbT, "bankName", 0, 0); if (s && *s) AB_BankInfo_SetBankName(bi, s); s=GWEN_DB_GetCharValue(dbT, "street", 0, 0); if (s && *s) AB_BankInfo_SetStreet(bi, s); s=GWEN_DB_GetCharValue(dbT, "zipCode", 0, 0); if (s && *s) AB_BankInfo_SetZipcode(bi, s); s=GWEN_DB_GetCharValue(dbT, "location", 0, 0); if (s && *s) { AB_BankInfo_SetLocation(bi, s); AB_BankInfo_SetCity(bi, s); } count++; bi=findNextBankInfo(bi, lblz, 0); } /* while bi */ } /* if bank already exists */ } dbT=GWEN_DB_FindNextGroup(dbT, "bank"); } GWEN_DB_Group_free(dbData); fprintf(stdout, "Updated %d banks\n", count); return 0; } int readFedAchDirFile(const char *fname) { GWEN_DB_NODE *dbData; GWEN_DB_NODE *dbT; int count=0; dbData=GWEN_DB_Group_new("data"); fprintf(stdout, "Reading Federal Reserve Bank file...\n"); if (readCSVFile(fname, "fedachdir.conf", dbData)) { DBG_ERROR(0, "Error reading FedAchDir file \"%s\"", fname); GWEN_DB_Group_free(dbData); return -1; } fprintf(stdout, "Building database...\n"); dbT=GWEN_DB_FindFirstGroup(dbData, "bank"); while (dbT) { const char *lblz; const char *lloc; int recType; recType=GWEN_DB_GetIntValue(dbT, "xRecordType", 0, 1); if (recType==2) lblz=GWEN_DB_GetCharValue(dbT, "xNewBankId", 0, 0); else lblz=GWEN_DB_GetCharValue(dbT, "bankId", 0, 0); lloc=GWEN_DB_GetCharValue(dbT, "location", 0, 0); if (lloc && lblz && isdigit(*lblz)) { AB_BANKINFO *bi; GWEN_BUFFER *tbuf; const char *s; /* compose phone number */ tbuf=GWEN_Buffer_new(0, 32, 0, 1); s=GWEN_DB_GetCharValue(dbT, "xPhoneAreaCode", 0, 0); if (s) { GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendByte(tbuf, '-'); } s=GWEN_DB_GetCharValue(dbT, "xPhonePrefix", 0, 0); if (s) GWEN_Buffer_AppendString(tbuf, s); s=GWEN_DB_GetCharValue(dbT, "xPhoneSuffix", 0, 0); if (s) GWEN_Buffer_AppendString(tbuf, s); GWEN_DB_SetCharValue(dbT, GWEN_DB_FLAGS_OVERWRITE_VARS, "phone", GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_Reset(tbuf); /* compose zipcode */ s=GWEN_DB_GetCharValue(dbT, "xZipCode", 0, 0); if (s) { GWEN_Buffer_AppendString(tbuf, s); s=GWEN_DB_GetCharValue(dbT, "xZipExt", 0, 0); if (s) { GWEN_Buffer_AppendByte(tbuf, '-'); GWEN_Buffer_AppendString(tbuf, s); } GWEN_DB_SetCharValue(dbT, GWEN_DB_FLAGS_OVERWRITE_VARS, "zipCode", GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_Reset(tbuf); } bi=AB_BankInfo_fromDb(dbT); assert(bi); AB_BankInfo_SetBankId(bi, lblz); AB_BankInfo_SetCity(bi, lloc); AB_BankInfo_List_Add(bi, bis); GWEN_Buffer_free(tbuf); count++; } dbT=GWEN_DB_FindNextGroup(dbT, "bank"); } GWEN_DB_Group_free(dbData); fprintf(stdout, "Found %d banks\n", count); return 0; } const char *readCharValueXml(GWEN_XMLNODE *n, const char *name, GWEN_BUFFER *dbuf) { GWEN_XMLNODE *nn; GWEN_Buffer_Reset(dbuf); nn=GWEN_XMLNode_FindFirstTag(n, name, 0, 0); if (nn) { int err; GWEN_BUFFER *tbuf; uint32_t len; tbuf=GWEN_Buffer_new(0, 256, 0, 1); err=GWEN_XMLNode_toBuffer(nn, tbuf, GWEN_XML_FLAGS_SIMPLE); if (err<0) { DBG_INFO(0, "here (%d)", err); GWEN_Buffer_free(tbuf); return NULL; } len=GWEN_Buffer_GetUsedBytes(tbuf); if (len) { len--; GWEN_Buffer_Crop(tbuf, 0, len); } if (GWEN_Text_UnescapeXmlToBuffer(GWEN_Buffer_GetStart(tbuf), dbuf)) { DBG_ERROR(0, "Error decoding XML buffer"); GWEN_Buffer_free(tbuf); return 0; } GWEN_Buffer_free(tbuf); return GWEN_Buffer_GetStart(dbuf); } return 0; } int readMSMFiles(const char *path, const char *ifname, const char *country) { GWEN_BUFFER *pbuf; GWEN_BUFFER *dbuf; uint32_t pos; GWEN_XMLNODE *nBanks; GWEN_XMLNODE *n; int updateCount=0; fprintf(stdout, "Reading GnuCash bank files...\n"); dbuf=GWEN_Buffer_new(0, 256, 0, 1); pbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(pbuf, path); GWEN_Buffer_AppendByte(pbuf, GWEN_DIR_SEPARATOR); pos=GWEN_Buffer_GetPos(pbuf); GWEN_Buffer_AppendString(pbuf, ifname); nBanks=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "banks"); if (GWEN_XML_ReadFile(nBanks, GWEN_Buffer_GetStart(pbuf), GWEN_XML_FLAGS_DEFAULT)) { DBG_ERROR(0, "Error reading file \"%s\"", GWEN_Buffer_GetStart(pbuf)); GWEN_XMLNode_free(nBanks); return -1; } GWEN_Buffer_Crop(pbuf, 0, pos); n=GWEN_XMLNode_FindFirstTag(nBanks, "fil", 0, 0); if (n) n=GWEN_XMLNode_FindFirstTag(n, "fi", 0, 0); while (n) { GWEN_XMLNODE *nProvider; nProvider=GWEN_XMLNode_FindFirstTag(n, "prov", 0, 0); if (nProvider) { const char *guid; //int isCross=0; guid=GWEN_XMLNode_GetCharValue(nProvider, "CrossRefGuid", 0); if (!guid || !*guid) guid=GWEN_XMLNode_GetCharValue(nProvider, "guid", 0); else { //isCross=1; } if (guid) { FILE *f; GWEN_Buffer_AppendString(pbuf, "/fi/"); GWEN_Buffer_AppendString(pbuf, guid); GWEN_Buffer_AppendString(pbuf, ".xml"); /*fprintf(stderr, "Reading file \"%s\"\n", GWEN_Buffer_GetStart(pbuf));*/ f=fopen(GWEN_Buffer_GetStart(pbuf), "r"); if (f) { GWEN_XMLNODE *nBank; GWEN_XMLNODE *b; fclose(f); nBank=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "bank"); if (GWEN_XML_ReadFile(nBank, GWEN_Buffer_GetStart(pbuf), GWEN_XML_FLAGS_DEFAULT)) { DBG_ERROR(0, "Error reading bank file \"%s\"", GWEN_Buffer_GetStart(pbuf)); GWEN_XMLNode_free(nBank); GWEN_XMLNode_free(nBanks); return -1; } b=GWEN_XMLNode_FindFirstTag(nBank, "MSNOnlSvcInfo", 0, 0); if (b) b=GWEN_XMLNode_FindFirstTag(b, "ProviderSettings", 0, 0); if (b) { const char *s; s=readCharValueXml(b, "country", dbuf); if (s && *s) { if (strcasecmp(s, "USA")==0 || strcasecmp(s, "US")==0 || strcasecmp(s, "Uni")==0 || strcasecmp(s, "United States")==0) s="us"; else if (strcasecmp(s, "CAN")==0 || strcasecmp(s, "CA")==0 || strcasecmp(s, "Canada")==0) s="ca"; else { DBG_ERROR(0, "Unknown country \"%s\" in bank \"%s\"", s, guid); GWEN_XMLNode_free(nBank); GWEN_XMLNode_free(nBanks); return -1; } } else { /*fprintf(stderr, "No country in bank \"%s\", ignoring\n", guid);*/ /* assume us */ s="us"; } if (strcasecmp(s, country)==0) { AB_BANKINFO *bi; const char *zipCode; const char *name; int addIt=1; bi=AB_BankInfo_new(); AB_BankInfo_SetCountry(bi, s); s=readCharValueXml(nProvider, "name", dbuf); if (s && *s) AB_BankInfo_SetBankName(bi, s); else { DBG_ERROR(0, "No name in bank \"%s\"", guid); GWEN_XMLNode_free(nBank); GWEN_XMLNode_free(nBanks); return -1; } s=readCharValueXml(b, "city", dbuf); if (s && *s) { AB_BankInfo_SetLocation(bi, s); AB_BankInfo_SetCity(bi, s); } s=readCharValueXml(b, "address1", dbuf); if (s && *s) AB_BankInfo_SetStreet(bi, s); s=readCharValueXml(b, "zip", dbuf); if (s && *s) AB_BankInfo_SetZipcode(bi, s); s=readCharValueXml(b, "phone", dbuf); if (s && *s) AB_BankInfo_SetPhone(bi, s); s=readCharValueXml(b, "InternetMail", dbuf); if (s && *s) AB_BankInfo_SetEmail(bi, s); s=readCharValueXml(b, "website1", dbuf); if (s && *s) AB_BankInfo_SetWebsite(bi, s); s=readCharValueXml(b, "driverType", dbuf); if (s && strcasecmp(s, "O")==0) { const char *pver; const char *server; pver=GWEN_XMLNode_GetCharValue(b, "OFXHeaderVer", 0); server=readCharValueXml(b, "ProviderUrl", dbuf); if (pver && *pver && server && *server && strcasecmp(server, "http://moneycentral.msn.com/cust404.htm")!=0) { AB_BANKINFO_SERVICE *sv; sv=AB_BankInfoService_new(); AB_BankInfoService_SetType(sv, "OFX"); AB_BankInfoService_SetAddress(sv, server); AB_BankInfoService_SetPversion(sv, pver); s=readCharValueXml(b, "fid", dbuf); if (s && *s) AB_BankInfoService_SetAux1(sv, s); s=readCharValueXml(b, "org", dbuf); if (s && *s) AB_BankInfoService_SetAux2(sv, s); AB_BankInfoService_List_Add(sv, AB_BankInfo_GetServices(bi)); } } name=AB_BankInfo_GetBankName(bi); zipCode=AB_BankInfo_GetZipcode(bi); if (name && *name && zipCode && *zipCode) { AB_BANKINFO *tbi; char zbuf[32]; const char *x; char *y; /* make compact zip code */ assert(strlen(zipCode)FUZZY_THRESHOLD) { fprintf(stderr, "Updating existing entry for \"%s\" " "(%u)\n", lname, v); break; } } } } tbi=AB_BankInfo_List_Next(tbi); } /* while existing entries */ if (tbi) { const char *s1, *s2; /* merge in new info */ s1=AB_BankInfo_GetEmail(bi); s2=AB_BankInfo_GetEmail(tbi); if ((s1 && *s1) && (!s2 || !*s2)) AB_BankInfo_SetEmail(tbi, s1); s1=AB_BankInfo_GetWebsite(bi); s2=AB_BankInfo_GetWebsite(tbi); if ((s1 && *s1) && (!s2 || !*s2)) AB_BankInfo_SetWebsite(tbi, s1); /* move new service entries to end of existing ones */ AB_BankInfoService_List_AddList(AB_BankInfo_GetServices(tbi), AB_BankInfo_GetServices(bi)); addIt=0; } } if (addIt) AB_BankInfo_List_Add(bi, bis); else { AB_BankInfo_free(bi); updateCount++; } } /* if matching country */ } /* if provider */ else { fprintf(stderr, "File \"%s\" does not contain bank descriptions\n", GWEN_Buffer_GetStart(pbuf)); } GWEN_XMLNode_free(nBank); } /* if provider file exists */ else { fprintf(stderr, "Provider file for bank \"%s\" not found\n", guid); } GWEN_Buffer_Crop(pbuf, 0, pos); } /* if guid */ else { fprintf(stderr, "File does not contain a GUID\n"); } } else { fprintf(stderr, "File does not contain bank info.\n"); } n=GWEN_XMLNode_FindNextTag(n, "fi", 0, 0); } fprintf(stdout, "%d banks updated.\n", updateCount); return 0; } int readBcFile(const char *fname) { GWEN_DB_NODE *dbData; GWEN_DB_NODE *dbT; int count=0; dbData=GWEN_DB_Group_new("data"); fprintf(stdout, "Reading BC Bankenstamm file...\n"); if (readCSVFile(fname, "bcbankenstamm.conf", dbData)) { DBG_ERROR(0, "Error reading BC Bankenstamm file \"%s\"", fname); GWEN_DB_Group_free(dbData); return -1; } if (GWEN_DB_WriteFile(dbData, "out.conf", GWEN_DB_FLAGS_QUOTE_VALUES | \ GWEN_DB_FLAGS_WRITE_SUBGROUPS | \ GWEN_DB_FLAGS_INDEND | \ GWEN_DB_FLAGS_ADD_GROUP_NEWLINES | \ GWEN_DB_FLAGS_ESCAPE_CHARVALUES | \ GWEN_DB_FLAGS_OMIT_TYPES)) { DBG_ERROR(0, "Error writing bank file"); return -1; } fprintf(stdout, "Building database...\n"); dbT=GWEN_DB_FindFirstGroup(dbData, "bank"); while (dbT) { const char *lblz; const char *lloc; lblz=GWEN_DB_GetCharValue(dbT, "xNewBankId", 0, 0); if (!lblz || !*lblz) lblz=GWEN_DB_GetCharValue(dbT, "bankId", 0, 0); lloc=GWEN_DB_GetCharValue(dbT, "location", 0, 0); if (lloc && *lloc && lblz && isdigit(*lblz)) { AB_BANKINFO *bi; GWEN_BUFFER *tbuf; const char *s; /* compose phone number */ tbuf=GWEN_Buffer_new(0, 32, 0, 1); s=GWEN_DB_GetCharValue(dbT, "xCountryPrefix", 0, 0); if (s && *s) { GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendByte(tbuf, '-'); } s=GWEN_DB_GetCharValue(dbT, "xPhone", 0, 0); if (s && *s) GWEN_Buffer_AppendString(tbuf, s); GWEN_DB_SetCharValue(dbT, GWEN_DB_FLAGS_OVERWRITE_VARS, "phone", GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_Reset(tbuf); /* compose fax number */ s=GWEN_DB_GetCharValue(dbT, "xCountryPrefix", 0, 0); if (s && *s) { GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendByte(tbuf, '-'); } s=GWEN_DB_GetCharValue(dbT, "xFax", 0, 0); if (s && *s) GWEN_Buffer_AppendString(tbuf, s); GWEN_DB_SetCharValue(dbT, GWEN_DB_FLAGS_OVERWRITE_VARS, "fax", GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_Reset(tbuf); /* compose bank code */ s=GWEN_DB_GetCharValue(dbT, "xNewBankId", 0, 0); if (s && *s) { GWEN_Buffer_AppendString(tbuf, s); /* GWEN_Buffer_AppendString(tbuf, "0000"); */ GWEN_DB_SetCharValue(dbT, GWEN_DB_FLAGS_OVERWRITE_VARS, "bankId", GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_Reset(tbuf); } else { s=GWEN_DB_GetCharValue(dbT, "bankId", 0, 0); assert(s); GWEN_Buffer_AppendString(tbuf, s); /* s=GWEN_DB_GetCharValue(dbT, "xFilialId", 0, 0); if (s) GWEN_Buffer_AppendString(tbuf, s); */ GWEN_DB_SetCharValue(dbT, GWEN_DB_FLAGS_OVERWRITE_VARS, "bankId", GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_Reset(tbuf); } bi=AB_BankInfo_fromDb(dbT); assert(bi); AB_BankInfo_SetCity(bi, lloc); AB_BankInfo_List_Add(bi, bis); GWEN_Buffer_free(tbuf); count++; } dbT=GWEN_DB_FindNextGroup(dbT, "bank"); } GWEN_DB_Group_free(dbData); fprintf(stdout, "Found %d banks\n", count); return 0; } int makeIndexBlz(const char *fname) { AB_BANKINFO *bi; FILE *f; uint32_t count=0; f=fopen(fname, "w+"); if (!f) { DBG_ERROR(0, "Error creating file \"%s\"", fname); return -1; } bi=AB_BankInfo_List_First(bis); while (bi) { uint32_t pos; const char *s; char numbuf[32]; count++; s=AB_BankInfo_GetBankId(bi); if (s) { snprintf(numbuf, sizeof(numbuf), "%08x", count); pos=(uint32_t)GWEN_DB_GetIntValue(dbIdx, numbuf, 0, 0); if (pos==0 && count!=1) { DBG_ERROR(0, "No index given for \"%s\" (%d)", numbuf, count); fclose(f); return -1; } fprintf(f, "%s\t%08x\n", s, pos); } bi=AB_BankInfo_List_Next(bi); } if (fclose(f)) { DBG_ERROR(0, "Error closing file \"%s\"", fname); return -1; } return 0; } int makeIndexBic(const char *fname) { AB_BANKINFO *bi; FILE *f; uint32_t count=0; f=fopen(fname, "w+"); if (!f) { DBG_ERROR(0, "Error creating file \"%s\"", fname); return -1; } bi=AB_BankInfo_List_First(bis); while (bi) { const char *s; count++; s=AB_BankInfo_GetBic(bi); if (s && *s) { uint32_t pos; char numbuf[32]; snprintf(numbuf, sizeof(numbuf), "%08x", count); pos=(uint32_t)GWEN_DB_GetIntValue(dbIdx, numbuf, 0, 0); if (pos==0 && count!=1) { DBG_ERROR(0, "No index given for \"%s\" (%d)", numbuf, count); fclose(f); return -1; } fprintf(f, "%s\t%08x\n", s, pos); } bi=AB_BankInfo_List_Next(bi); } if (fclose(f)) { DBG_ERROR(0, "Error closing file \"%s\"", fname); return -1; } return 0; } int makeIndexNameAndLoc(const char *fname) { AB_BANKINFO *bi; FILE *f; uint32_t count=0; f=fopen(fname, "w+"); if (!f) { DBG_ERROR(0, "Error creating file \"%s\"", fname); return -1; } bi=AB_BankInfo_List_First(bis); while (bi) { const char *name; const char *loc; count++; name=AB_BankInfo_GetBankName(bi); loc=AB_BankInfo_GetLocation(bi); if (name && *name && loc && *loc) { uint32_t pos; char numbuf[32]; snprintf(numbuf, sizeof(numbuf), "%08x", count); pos=(uint32_t)GWEN_DB_GetIntValue(dbIdx, numbuf, 0, 0); if (pos==0 && count!=1) { DBG_ERROR(0, "No index given for \"%s\" (%d)", numbuf, count); fclose(f); return -1; } fprintf(f, "%s\t%s\t%08x\n", name, loc, pos); } bi=AB_BankInfo_List_Next(bi); } if (fclose(f)) { DBG_ERROR(0, "Error closing file \"%s\"", fname); return -1; } return 0; } int saveBankInfos(const char *path) { AB_BANKINFO *bi; uint32_t count=0; GWEN_BUFFER *xbuf; GWEN_SYNCIO *sio; int rv; GWEN_FAST_BUFFER *fb; fprintf(stdout, "Saving database...\n"); sio=GWEN_SyncIo_File_new(path, GWEN_SyncIo_File_CreationMode_CreateAlways); GWEN_SyncIo_AddFlags(sio, GWEN_SYNCIO_FILE_FLAGS_READ | GWEN_SYNCIO_FILE_FLAGS_WRITE | GWEN_SYNCIO_FILE_FLAGS_UREAD | GWEN_SYNCIO_FILE_FLAGS_UWRITE); rv=GWEN_SyncIo_Connect(sio); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_SyncIo_free(sio); return rv; } fb=GWEN_FastBuffer_new(512, sio); GWEN_FASTBUFFER_WRITELINE(fb, rv, "# This is an automatically created file"); if (rv>=0) { GWEN_FASTBUFFER_WRITELINE(fb, rv, "# All banks are separated by newlines"); } if (rv>=0) { GWEN_FASTBUFFER_WRITELINE(fb, rv, "# Please do not modify this file, " "the index files rely on exact positions."); } if (rv<0) { DBG_INFO(0, "here (%d)", rv); DBG_ERROR(0, "Error writing bank file \"%s\"", path); GWEN_FastBuffer_free(fb); GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); return -1; } xbuf=GWEN_Buffer_new(0, 256, 0, 1); bi=AB_BankInfo_List_First(bis); while (bi) { const char *s; GWEN_DB_NODE *dbT; uint32_t pos; char numbuf[32]; count++; /* some conversions to UTF8 */ s=AB_BankInfo_GetBankName(bi); assert(s); isoToUtf8(s, strlen(s), xbuf); AB_BankInfo_SetBankName(bi, GWEN_Buffer_GetStart(xbuf)); GWEN_Buffer_Reset(xbuf); s=AB_BankInfo_GetLocation(bi); if (s) { isoToUtf8(s, strlen(s), xbuf); AB_BankInfo_SetLocation(bi, GWEN_Buffer_GetStart(xbuf)); AB_BankInfo_SetCity(bi, GWEN_Buffer_GetStart(xbuf)); GWEN_Buffer_Reset(xbuf); } /* create DB */ dbT=GWEN_DB_Group_new("bank"); AB_BankInfo_toDb(bi, dbT); pos=GWEN_FastBuffer_GetBytesWritten(fb); snprintf(numbuf, sizeof(numbuf), "%08x", count); GWEN_DB_SetIntValue(dbIdx, GWEN_PATH_FLAGS_CREATE_VAR, numbuf, pos); if (GWEN_DB_WriteToFastBuffer(dbT, fb, GWEN_DB_FLAGS_QUOTE_VALUES | \ GWEN_DB_FLAGS_WRITE_SUBGROUPS | \ GWEN_DB_FLAGS_INDEND | \ GWEN_DB_FLAGS_ESCAPE_CHARVALUES | \ GWEN_DB_FLAGS_OMIT_TYPES)) { DBG_ERROR(0, "Error writing bank file \"%s\"", path); GWEN_DB_Group_free(dbT); GWEN_FastBuffer_free(fb); GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); return -1; } GWEN_FASTBUFFER_WRITELINE(fb, rv, ""); if (rv<0) { DBG_ERROR_ERR(0, rv); DBG_ERROR(0, "Error writing bank file \"%s\"", path); GWEN_DB_Group_free(dbT); GWEN_FastBuffer_free(fb); GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); return rv; } GWEN_DB_Group_free(dbT); if (count & ~31) { fprintf(stdout, "%u\r", count); } bi=AB_BankInfo_List_Next(bi); } /* while bi */ /* flush fast buffer */ GWEN_FASTBUFFER_FLUSH(fb, rv); if (rv<0) { DBG_ERROR(0, "Error closing bank file \"%s\" (%d)", path, rv); GWEN_FastBuffer_free(fb); GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); return rv; } GWEN_FastBuffer_free(fb); /* flush and close io */ rv=GWEN_SyncIo_Disconnect(sio); if (rv<0) { DBG_ERROR(0, "Error closing bank file \"%s\" (%d)", path, rv); GWEN_FastBuffer_free(fb); GWEN_SyncIo_free(sio); return rv; } GWEN_SyncIo_free(sio); fprintf(stdout, " Written %d banks.\n", count); return 0; } int makeBankInfos(const char *path) { AB_BANKINFO *bi; uint32_t count=0; char numbuf[32]; GWEN_BUFFER *dbuf; dbuf=GWEN_Buffer_new(0, 256, 0, 1); bi=AB_BankInfo_List_First(bis); while (bi) { GWEN_DB_NODE *dbT; count++; /* create path */ GWEN_Buffer_AppendString(dbuf, path); GWEN_Buffer_AppendString(dbuf, GWEN_DIR_SEPARATOR_S "banks" GWEN_DIR_SEPARATOR_S); snprintf(numbuf, sizeof(numbuf), "%04x", count); GWEN_Buffer_AppendBytes(dbuf, numbuf, 2); if (GWEN_Directory_GetPath(GWEN_Buffer_GetStart(dbuf), GWEN_PATH_FLAGS_CHECKROOT | GWEN_DIR_FLAGS_PUBLIC_PATH | GWEN_DIR_FLAGS_PUBLIC_NAME)) { DBG_ERROR(0, "Error creating path \"%s\"", GWEN_Buffer_GetStart(dbuf)); /* GWEN_DB_Group_free(dbT); -- not yet initialized */ GWEN_Buffer_free(dbuf); return -1; } GWEN_Buffer_AppendByte(dbuf, GWEN_DIR_SEPARATOR); GWEN_Buffer_AppendBytes(dbuf, numbuf+2, 2); GWEN_Buffer_AppendString(dbuf, ".bank"); /* create DB */ dbT=GWEN_DB_Group_new("bank"); AB_BankInfo_toDb(bi, dbT); /* write file */ if (GWEN_DB_WriteFile(dbT, GWEN_Buffer_GetStart(dbuf), GWEN_DB_FLAGS_QUOTE_VALUES | \ GWEN_DB_FLAGS_WRITE_SUBGROUPS | \ GWEN_DB_FLAGS_INDEND | \ GWEN_DB_FLAGS_ADD_GROUP_NEWLINES | \ GWEN_DB_FLAGS_ESCAPE_CHARVALUES | \ GWEN_DB_FLAGS_OMIT_TYPES)) { DBG_ERROR(0, "Error writing bank file \"%s\"", GWEN_Buffer_GetStart(dbuf)); GWEN_DB_Group_free(dbT); GWEN_Buffer_free(dbuf); return -1; } #ifndef OS_WIN32 if (chmod(GWEN_Buffer_GetStart(dbuf), S_IRUSR | S_IWUSR # ifdef S_IRGRP | S_IRGRP # endif # ifdef S_IROTH | S_IROTH # endif )) { DBG_ERROR(0, "chmod(%s): %s", GWEN_Buffer_GetStart(dbuf), strerror(errno)); GWEN_DB_Group_free(dbT); GWEN_Buffer_free(dbuf); return -1; } #endif GWEN_Buffer_Reset(dbuf); GWEN_DB_Group_free(dbT); bi=AB_BankInfo_List_Next(bi); } fprintf(stdout, " Written %d banks\n", count); return 0; } int loadBanks(const char *fname, AB_BANKINFO_LIST *biList) { uint32_t count=0; GWEN_SYNCIO *sio; GWEN_FAST_BUFFER *fb; int rv; fprintf(stdout, "Loading database, this will take a few minutes ...\n"); 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; } fb=GWEN_FastBuffer_new(512, sio); for (;;) { GWEN_DB_NODE *dbT; AB_BANKINFO *bi; int pos; char numbuf[32]; int rv; dbT=GWEN_DB_Group_new("bank"); pos=GWEN_FastBuffer_GetBytesRead(fb); rv=GWEN_DB_ReadFromFastBuffer(dbT, fb, GWEN_DB_FLAGS_DEFAULT | GWEN_PATH_FLAGS_CREATE_GROUP| GWEN_DB_FLAGS_UNTIL_EMPTY_LINE); if (rv<0) { if (rv==GWEN_ERROR_EOF) break; DBG_ERROR(0, "Could not load file \"%s\" (%d)", fname, rv); GWEN_DB_Group_free(dbT); GWEN_FastBuffer_free(fb); GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); return -1; } bi=AB_BankInfo_fromDb(dbT); assert(bi); AB_BankInfo_List_Add(bi, biList); GWEN_DB_Group_free(dbT); count++; snprintf(numbuf, sizeof(numbuf), "%08x", count); GWEN_DB_SetIntValue(dbIdx, GWEN_DB_FLAGS_OVERWRITE_VARS, numbuf, pos); if (count & ~31) { fprintf(stdout, "%u\r", count); } } /* while */ fprintf(stdout, "\n"); fprintf(stdout, " Read %d banks.\n", count); GWEN_FastBuffer_free(fb); GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); return 0; } int main(int argc, char **argv) { if (argc<2) { fprintf(stderr, "Usage:\n" "%s COMMAND\n", argv[0]); return 1; } if (strcasecmp(argv[1], "build")==0) { const char *dbbFile, *hbciFile, *dstFile; if (argc<5) { fprintf(stderr, "Usage:\n" "%s build DBB-file HBCI-file DESTFILE\n", argv[0]); return 1; } dbbFile=argv[2]; hbciFile=argv[3]; dstFile=argv[4]; bis=AB_BankInfo_List_new(); dbIdx=GWEN_DB_Group_new("indexList"); if (readDBBFile(dbbFile)) { DBG_ERROR(0, "Error."); return 2; } if (readHBCIFile(hbciFile)) { DBG_ERROR(0, "Error."); return 2; } if (saveBankInfos(dstFile)) { return 3; } } else if (strcasecmp(argv[1], "build-at")==0) { const char *blzFile; const char *dstFile; if (argc<4) { fprintf(stderr, "Usage:\n" "%s build-at BLZ-file DESTFILE\n", argv[0]); return 1; } blzFile=argv[2]; dstFile=argv[3]; bis=AB_BankInfo_List_new(); dbIdx=GWEN_DB_Group_new("indexList"); if (readATBLZFile(blzFile)) { DBG_ERROR(0, "Error."); return 2; } if (saveBankInfos(dstFile)) { return 3; } } else if (strcasecmp(argv[1], "build-ch")==0) { const char *blzFile, *dstFile; if (argc<4) { fprintf(stderr, "Usage:\n" "%s build-ch BLZ-file DESTFILE\n", argv[0]); return 1; } blzFile=argv[2]; dstFile=argv[3]; bis=AB_BankInfo_List_new(); dbIdx=GWEN_DB_Group_new("indexList"); if (readBcFile(blzFile)) { DBG_ERROR(0, "Error."); return 2; } if (saveBankInfos(dstFile)) { return 3; } } else if (strcasecmp(argv[1], "build-am")==0) { const char *path, *country, *src2File, *dstFile; if (argc<6) { fprintf(stderr, "Usage:\n" "%s build-am SRCPATH COUNTRY FEDACHDIRFILE DESTFILE\n", argv[0]); return 1; } path=argv[2]; country=argv[3]; src2File=argv[4]; dstFile=argv[5]; bis=AB_BankInfo_List_new(); dbIdx=GWEN_DB_Group_new("indexList"); if (strcasecmp(country, "us")==0) { if (readFedAchDirFile(src2File)) { return 3; } } if (readMSMFiles(path, "bank.xml", country)) { DBG_ERROR(0, "Error."); return 2; } if (readMSMFiles(path, "creditcard.xml", country)) { DBG_ERROR(0, "Error."); return 2; } if (readMSMFiles(path, "brokerage.xml", country)) { DBG_ERROR(0, "Error."); return 2; } if (saveBankInfos(dstFile)) { return 3; } } else if (strcasecmp(argv[1], "install")==0) { const char *path; const char *srcFile; GWEN_BUFFER *dbuf; uint32_t pos; if (argc<4) { fprintf(stderr, "Usage:\n" "%s install SRCFILE DESTDIR\n", argv[0]); return 1; } srcFile=argv[2]; path=argv[3]; bis=AB_BankInfo_List_new(); dbIdx=GWEN_DB_Group_new("indexList"); if (loadBanks(srcFile, bis)) { fprintf(stderr, "Error loading data file.\n"); return 2; } fprintf(stdout, "Writing database and index files to %s, " "this will take a few minutes ...\n", path); dbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(dbuf, path); GWEN_Buffer_AppendByte(dbuf, GWEN_DIR_SEPARATOR); pos=GWEN_Buffer_GetPos(dbuf); GWEN_Buffer_AppendString(dbuf, "banks.data"); if (saveBankInfos(GWEN_Buffer_GetStart(dbuf))) { fprintf(stderr, "Error saving data files.\n"); return 3; } GWEN_Buffer_Crop(dbuf, 0, pos); fprintf(stdout, "- writing BLZ index...\n"); GWEN_Buffer_AppendString(dbuf, "blz.idx"); if (makeIndexBlz(GWEN_Buffer_GetStart(dbuf))) { fprintf(stderr, "Error saving index file.\n"); GWEN_Buffer_free(dbuf); return 3; } GWEN_Buffer_Crop(dbuf, 0, pos); fprintf(stdout, "- writing BIC index...\n"); GWEN_Buffer_AppendString(dbuf, "bic.idx"); if (makeIndexBic(GWEN_Buffer_GetStart(dbuf))) { fprintf(stderr, "Error saving index file.\n"); GWEN_Buffer_free(dbuf); return 3; } GWEN_Buffer_Crop(dbuf, 0, pos); fprintf(stdout, "- writing NAMLOC index...\n"); GWEN_Buffer_AppendString(dbuf, "namloc.idx"); if (makeIndexNameAndLoc(GWEN_Buffer_GetStart(dbuf))) { fprintf(stderr, "Error saving index file.\n"); GWEN_Buffer_free(dbuf); return 3; } GWEN_Buffer_free(dbuf); } else if (strcasecmp(argv[1], "update")==0) { const char *srcFile1; const char *srcFile2; const char *destFile; AB_BANKINFO_LIST *updBis; AB_BANKINFO *curBi; if (argc<5) { fprintf(stderr, "Usage:\n" "%s update SRCFILE UPDATEFILE DESTFILE\n", argv[0]); return 1; } srcFile1=argv[2]; srcFile2=argv[3]; destFile=argv[4]; dbIdx=GWEN_DB_Group_new("indexList"); bis=AB_BankInfo_List_new(); updBis=AB_BankInfo_List_new(); if (loadBanks(srcFile1, bis)) { fprintf(stderr, "Error loading data file.\n"); return 2; } if (loadBanks(srcFile2, updBis)) { fprintf(stderr, "Error loading update data file.\n"); return 2; } curBi=AB_BankInfo_List_First(updBis); while (curBi) { const char *bankId; bankId=AB_BankInfo_GetBankId(curBi); if (bankId) { AB_BANKINFO *origBi; origBi=AB_BankInfo_List_First(bis); while (origBi) { const char *s; s=AB_BankInfo_GetBankId(origBi); if (s && strcasecmp(s, bankId)==0) break; origBi=AB_BankInfo_List_Next(origBi); } if (origBi) { /* replace original */ AB_BankInfo_List_Del(origBi); AB_BankInfo_free(origBi); origBi=AB_BankInfo_dup(curBi); AB_BankInfo_List_Add(origBi, bis); } } curBi=AB_BankInfo_List_Next(curBi); } if (saveBankInfos(destFile)) { return 3; } } else if (strcasecmp(argv[1], "debug")==0) { const char *bankFile; if (argc<3) { fprintf(stderr, "Usage:\n" "%s debug BLZ-file\n", argv[0]); return 1; } bankFile=argv[2]; bis=AB_BankInfo_List_new(); dbIdx=GWEN_DB_Group_new("indexList"); if (loadBanks(bankFile, bis)) { DBG_ERROR(0, "Error."); return 2; } if (GWEN_DB_WriteFile(dbIdx, "index.conf.out", GWEN_DB_FLAGS_DEFAULT)) { DBG_ERROR(0, "Error writing index file"); return -1; } } else if (strcasecmp(argv[1], "debug2")==0) { const char *bankFile; if (argc<3) { fprintf(stderr, "Usage:\n" "%s debug BLZ-file\n", argv[0]); return 1; } bankFile=argv[2]; bis=AB_BankInfo_List_new(); dbIdx=GWEN_DB_Group_new("indexList"); if (readFedAchDirFile(bankFile)) { return 3; } if (saveBankInfos("us.out")) { return 3; } } return 0; } aqbanking-6.6.1/src/tools/mkdeinfo/Makefile.in0000644000175000017500000005525715037736026016217 00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @IS_WINDOWS_FALSE@noinst_PROGRAMS = mkdeinfo$(EXEEXT) subdir = src/tools/mkdeinfo ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/distri.m4 $(top_srcdir)/m4/gwenhywfar.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/os.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = PROGRAMS = $(noinst_PROGRAMS) am__mkdeinfo_SOURCES_DIST = mkdeinfo.c @IS_WINDOWS_FALSE@am_mkdeinfo_OBJECTS = mkdeinfo.$(OBJEXT) mkdeinfo_OBJECTS = $(am_mkdeinfo_OBJECTS) am__DEPENDENCIES_1 = @IS_WINDOWS_FALSE@mkdeinfo_DEPENDENCIES = $(am__DEPENDENCIES_1) \ @IS_WINDOWS_FALSE@ $(am__DEPENDENCIES_1) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/mkdeinfo.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(mkdeinfo_SOURCES) DIST_SOURCES = $(am__mkdeinfo_SOURCES_DIST) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADD_ACLOCAL_FLAGS = @ADD_ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AQBANKING_CLI_VERSION_STRING = @AQBANKING_CLI_VERSION_STRING@ AQBANKING_FINTS_VERSION_STRING = @AQBANKING_FINTS_VERSION_STRING@ AQBANKING_SO_AGE = @AQBANKING_SO_AGE@ AQBANKING_SO_CURRENT = @AQBANKING_SO_CURRENT@ AQBANKING_SO_EFFECTIVE = @AQBANKING_SO_EFFECTIVE@ AQBANKING_SO_REVISION = @AQBANKING_SO_REVISION@ AQBANKING_VERSION_BUILD = @AQBANKING_VERSION_BUILD@ AQBANKING_VERSION_FULL_STRING = @AQBANKING_VERSION_FULL_STRING@ AQBANKING_VERSION_MAJOR = @AQBANKING_VERSION_MAJOR@ AQBANKING_VERSION_MINOR = @AQBANKING_VERSION_MINOR@ AQBANKING_VERSION_PATCHLEVEL = @AQBANKING_VERSION_PATCHLEVEL@ AQBANKING_VERSION_RELEASE_STRING = @AQBANKING_VERSION_RELEASE_STRING@ AQBANKING_VERSION_STRING = @AQBANKING_VERSION_STRING@ AQBANKING_VERSION_TAG = @AQBANKING_VERSION_TAG@ AQEBICS_CFLAGS = @AQEBICS_CFLAGS@ AQEBICS_LIBS = @AQEBICS_LIBS@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATETIME = @DATETIME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_EXCLUDE_PATTERNS = @DOXYGEN_EXCLUDE_PATTERNS@ DOXYGEN_FILE_PATTERNS = @DOXYGEN_FILE_PATTERNS@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENGUI_GTK2_CFLAGS = @GWENGUI_GTK2_CFLAGS@ GWENGUI_GTK2_LIBS = @GWENGUI_GTK2_LIBS@ GWENHYWFAR_MINIMUM_VERSION = @GWENHYWFAR_MINIMUM_VERSION@ HAVE_GWENGUI_GTK2 = @HAVE_GWENGUI_GTK2@ HAVE_I18N = @HAVE_I18N@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIBXSLT_CFLAGS = @LIBXSLT_CFLAGS@ LIBXSLT_LIBS = @LIBXSLT_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_SUPPORTS_QT = @MSGFMT_SUPPORTS_QT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ TUTORIALS = @TUTORIALS@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XMLMERGE = @XMLMERGE@ XMLSEC_CFLAGS = @XMLSEC_CFLAGS@ XMLSEC_LIBS = @XMLSEC_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ aqbanking_backends = @aqbanking_backends@ aqbanking_cfg_searchdir = @aqbanking_cfg_searchdir@ aqbanking_data_searchdir = @aqbanking_data_searchdir@ aqbanking_headerdir = @aqbanking_headerdir@ aqbanking_headerdir_am = @aqbanking_headerdir_am@ aqbanking_includes = @aqbanking_includes@ aqbanking_internal_libs = @aqbanking_internal_libs@ aqbanking_ldflags = @aqbanking_ldflags@ aqbanking_libs = @aqbanking_libs@ aqbanking_locale_searchdir = @aqbanking_locale_searchdir@ aqbanking_modules = @aqbanking_modules@ aqbanking_pkgdatadir = @aqbanking_pkgdatadir@ aqbanking_plugin_searchdir = @aqbanking_plugin_searchdir@ aqbanking_plugindir = @aqbanking_plugindir@ aqbanking_plugins_backends_dirs = @aqbanking_plugins_backends_dirs@ aqbanking_plugins_backends_libs = @aqbanking_plugins_backends_libs@ aqbanking_plugins_bankinfo_dirs = @aqbanking_plugins_bankinfo_dirs@ aqbanking_plugins_bankinfo_libs = @aqbanking_plugins_bankinfo_libs@ aqbanking_plugins_imexporters_dirs = @aqbanking_plugins_imexporters_dirs@ aqbanking_plugins_imexporters_libs = @aqbanking_plugins_imexporters_libs@ aqbanking_plugins_parsers_dirs = @aqbanking_plugins_parsers_dirs@ aqbanking_symlinkdir = @aqbanking_symlinkdir@ aqbanking_sys_is_windows = @aqbanking_sys_is_windows@ aqbankingpp_modules = @aqbankingpp_modules@ aqebics_datadir = @aqebics_datadir@ aqebics_includes = @aqebics_includes@ aqebics_internal_libs = @aqebics_internal_libs@ aqebics_ldflags = @aqebics_ldflags@ aqebics_libs = @aqebics_libs@ aqfints_datadir = @aqfints_datadir@ aqhbci_datadir = @aqhbci_datadir@ aqhbci_includes = @aqhbci_includes@ aqhbci_internal_libs = @aqhbci_internal_libs@ aqhbci_ldflags = @aqhbci_ldflags@ aqhbci_libs = @aqhbci_libs@ aqofxconnect_includes = @aqofxconnect_includes@ aqofxconnect_internal_libs = @aqofxconnect_internal_libs@ aqofxconnect_libs = @aqofxconnect_libs@ aqpaypal_includes = @aqpaypal_includes@ aqpaypal_internal_libs = @aqpaypal_internal_libs@ aqpaypal_libs = @aqpaypal_libs@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gmp_libs = @gmp_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_dir = @gwenhywfar_dir@ gwenhywfar_has_crypt = @gwenhywfar_has_crypt@ gwenhywfar_headers = @gwenhywfar_headers@ gwenhywfar_includes = @gwenhywfar_includes@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_plugins = @gwenhywfar_plugins@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ typemaker2_exe = @typemaker2_exe@ visibility_cflags = @visibility_cflags@ with_aqebics = @with_aqebics@ with_aqhbci = @with_aqhbci@ AM_CPPFLAGS = -I$(top_srcdir)/src/libs -I$(top_builddir)/src/libs $(gwenhywfar_includes) -I$(srcdir)/.. @IS_WINDOWS_FALSE@mkdeinfo_SOURCES = mkdeinfo.c @IS_WINDOWS_FALSE@mkdeinfo_LDADD = $(aqbanking_internal_libs) $(gwenhywfar_libs) all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/tools/mkdeinfo/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/tools/mkdeinfo/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list mkdeinfo$(EXEEXT): $(mkdeinfo_OBJECTS) $(mkdeinfo_DEPENDENCIES) $(EXTRA_mkdeinfo_DEPENDENCIES) @rm -f mkdeinfo$(EXEEXT) $(AM_V_CCLD)$(LINK) $(mkdeinfo_OBJECTS) $(mkdeinfo_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mkdeinfo.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \ mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/mkdeinfo.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/mkdeinfo.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-generic clean-libtool clean-noinstPROGRAMS cscopelist-am \ ctags ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am .PRECIOUS: Makefile # IS_WINDOWS built_sources: typefiles: typedefs: sources: cppcheck: for f in $(mkdeinfo_SOURCES); do \ cppcheck --force $$f ; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: aqbanking-6.6.1/src/tools/mkdeinfo/Makefile.am0000664000175000017500000000102514043610745016163 00000000000000AM_CPPFLAGS = -I$(top_srcdir)/src/libs -I$(top_builddir)/src/libs $(gwenhywfar_includes) -I$(srcdir)/.. if IS_WINDOWS # Doesn't link on windows; too lazy to fix this for now. noinst_PROGRAMS= else noinst_PROGRAMS=mkdeinfo mkdeinfo_SOURCES=mkdeinfo.c mkdeinfo_LDADD = $(aqbanking_internal_libs) $(gwenhywfar_libs) endif # IS_WINDOWS built_sources: typefiles: typedefs: sources: cppcheck: for f in $(mkdeinfo_SOURCES); do \ cppcheck --force $$f ; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done aqbanking-6.6.1/src/tools/aqbanking-cli/0000755000175000017500000000000015037736164015123 500000000000000aqbanking-6.6.1/src/tools/aqbanking-cli/addtransaction.c0000664000175000017500000003223614043610745020205 00000000000000/*************************************************************************** begin : Tue May 03 2005 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif /* tool includes */ #include "globals.h" /* aqbanking includes */ #include /* gwenhywfar includes */ #include /* forward declarations */ static GWEN_DB_NODE *_readCommandLine(GWEN_DB_NODE *dbArgs, int argc, char **argv); int addTransaction(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; AB_ACCOUNT_SPEC *as; int rv; const char *ctxFile; AB_TRANSACTION *t; int noCheck; /* parse command line arguments */ db=_readCommandLine(dbArgs, argc, argv); if (db==NULL) { /* error in command line */ return 1; } /* read arguments */ noCheck=GWEN_DB_GetIntValue(db, "noCheck", 0, 0); ctxFile=GWEN_DB_GetCharValue(db, "ctxfile", 0, 0); /* init AqBanking */ rv=AB_Banking_Init(ab); if (rv) { DBG_ERROR(0, "Error on init (%d)", rv); return 2; } /* get account to work with */ as=getSingleSelectedAccount(ab, db); if (as==NULL) { AB_Banking_Fini(ab); return 2; } /* create transaction from arguments */ t=mkSepaTransfer(db, AB_Transaction_CommandSepaTransfer); if (t==NULL) { DBG_ERROR(0, "Could not create SEPA transaction from arguments"); AB_Transaction_free(t); AB_AccountSpec_free(as); AB_Banking_Fini(ab); return 2; } AB_Transaction_SetType(t, AB_Transaction_TypeTransfer); AB_Transaction_SetUniqueAccountId(t, AB_AccountSpec_GetUniqueId(as)); /* set local account info from selected AB_ACCOUNT_SPEC */ AB_Banking_FillTransactionFromAccountSpec(t, as); /* some checks */ rv=checkTransactionIbans(t); if (rv!=0) { AB_Transaction_free(t); AB_AccountSpec_free(as); AB_Banking_Fini(ab); return rv; } /* probably check against transaction limits */ if (!noCheck) { rv=checkTransactionLimits(t, AB_AccountSpec_GetTransactionLimitsForCommand(as, AB_Transaction_GetCommand(t)), AQBANKING_TOOL_LIMITFLAGS_PURPOSE | AQBANKING_TOOL_LIMITFLAGS_NAMES | AQBANKING_TOOL_LIMITFLAGS_DATE | AQBANKING_TOOL_LIMITFLAGS_SEPA); if (rv!=0) { AB_Transaction_free(t); AB_AccountSpec_free(as); AB_Banking_Fini(ab); return rv; } } AB_AccountSpec_free(as); /* add to context file */ rv=addTransactionToContextFile(t, ctxFile); if (rv!=0) { DBG_ERROR(0, "Error adding to context (%d)", rv); AB_Transaction_free(t); AB_Banking_Fini(ab); return 4; } AB_Transaction_free(t); /* that's it */ rv=AB_Banking_Fini(ab); if (rv<0) { fprintf(stderr, "ERROR: Error on deinit (%d)\n", rv); return 5; } return 0; } /* parse command line */ GWEN_DB_NODE *_readCommandLine(GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; int rv; const GWEN_ARGS args[]= { { 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_Int, /* type */ "uniqueAccountId", /* name */ 0, /* minnum */ 1, /* maxnum */ NULL, /* short option */ "aid", /* long option */ "Specify the unique account id", /* short description */ "Specify the unique account id" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "backendName", /* name */ 0, /* minnum */ 1, /* maxnum */ NULL, /* short option */ "backend", /* long option */ "Specify the name of the backend for your account", /* short description */ "Specify the name of the backend for your account" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "country", /* name */ 0, /* minnum */ 1, /* maxnum */ NULL, /* short option */ "country", /* long option */ "Specify the country for your account (e.g. \"de\")", /* short description */ "Specify the country for your account (e.g. \"de\")" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "bankId", /* name */ 0, /* minnum */ 1, /* maxnum */ "b", /* short option */ "bank", /* long option */ "overwrite the bank code", /* short description */ "overwrite 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 */ "overwrite the account number", /* short description */ "overwrite the account number" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "subAccountId", /* name */ 0, /* minnum */ 1, /* maxnum */ "aa", /* short option */ "subaccount", /* long option */ "Specify the sub account id (Unterkontomerkmal)", /* short description */ "Specify the sub account id (Unterkontomerkmal)" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "accountType", /* name */ 0, /* minnum */ 1, /* maxnum */ "at", /* short option */ "accounttype", /* long option */ "Specify the account type", /* short description */ "Specify the account type" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "iban", /* name */ 0, /* minnum */ 1, /* maxnum */ "A", /* short option */ "iban", /* long option */ "Specify the iban of your account", /* short description */ "Specify the iban of your account" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "remoteBIC", /* name */ 0, /* minnum */ 1, /* maxnum */ 0, /* short option */ "rbic", /* long option */ "Specify the remote SWIFT BIC",/* short description */ "Specify the remote SWIFT BIC" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "remoteIBAN", /* name */ 1, /* minnum */ 1, /* maxnum */ 0, /* short option */ "riban", /* long option */ "Specify the remote IBAN", /* short description */ "Specify the remote IBAN" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "value", /* name */ 1, /* minnum */ 1, /* maxnum */ "v", /* short option */ "value", /* long option */ "Specify the transfer amount", /* short description */ "Specify the transfer amount" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "name", /* name */ 0, /* minnum */ 1, /* maxnum */ 0, /* short option */ "name", /* long option */ "Specify your name", /* short description */ "Specify your name" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "remoteName", /* name */ 1, /* minnum */ 2, /* maxnum */ 0, /* short option */ "rname", /* long option */ "Specify the remote name", /* short description */ "Specify the remote name" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "purpose", /* name */ 1, /* minnum */ 6, /* maxnum */ "p", /* short option */ "purpose", /* long option */ "Specify the purpose", /* short description */ "Specify the purpose" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "endToEndReference", /* name */ 0, /* minnum */ 1, /* maxnum */ "E", /* short option */ "endtoendid", /* long option */ "Specify the SEPA End-to-end-reference", /* short description */ "Specify the SEPA End-to-end-reference" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "executionDate", /* name */ 0, /* minnum */ 1, /* maxnum */ 0, /* short option */ "execdate", /* long option */ "Specify the execution date (YYYYMMDD)", /* short */ "Specify the execution date (YYYYMMDD)" /* long */ }, { 0, /* flags */ GWEN_ArgsType_Int, /* type */ "noCheck", /* name */ 0, /* minnum */ 1, /* maxnum */ NULL, /* short option */ "noCheck", /* long option */ "Dont check transaction limits", /* short description */ "Dont check transaction limits" }, { 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 NULL; } 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 NULL; } fprintf(stdout, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return NULL; } return db; } aqbanking-6.6.1/src/tools/aqbanking-cli/listbal.c0000664000175000017500000002754414043610745016647 00000000000000/*************************************************************************** begin : Tue May 03 2005 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals.h" #include #include static GWEN_DB_NODE *_readCommandLine(GWEN_DB_NODE *dbArgs, int argc, char **argv); int listBal(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; int rv; const char *ctxFile; AB_IMEXPORTER_CONTEXT *ctx=0; AB_IMEXPORTER_ACCOUNTINFO *iea=0; uint32_t aid; const char *bankId; const char *accountId; const char *subAccountId; const char *iban; const char *tmplString; const char *s; AB_BALANCE_TYPE bt=AB_Balance_TypeBooked; /* parse command line arguments */ db=_readCommandLine(dbArgs, argc, argv); if (db==NULL) { /* error in command line */ return 1; } /* read command line arguments */ aid=(uint32_t)GWEN_DB_GetIntValue(db, "uniqueAccountId", 0, 0); bankId=GWEN_DB_GetCharValue(db, "bankId", 0, 0); accountId=GWEN_DB_GetCharValue(db, "accountId", 0, 0); subAccountId=GWEN_DB_GetCharValue(db, "subAccountId", 0, 0); iban=GWEN_DB_GetCharValue(db, "iban", 0, 0); tmplString=GWEN_DB_GetCharValue(db, "template", 0, "$(dateAsString)\t" "$(valueAsString)\t" "$(ibanOrAccountNumber)"); /* determine balance type */ s=GWEN_DB_GetCharValue(db, "balanceType", 0, "booked"); if (s && *s) { AB_BALANCE_TYPE tempBalanceType; tempBalanceType=AB_Balance_Type_fromString(s); if (tempBalanceType==AB_Balance_TypeUnknown) { DBG_ERROR(0, "Invalid balance type given (%s)", s); return 1; } bt=tempBalanceType; } /* init AqBanking */ 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; } /* copy context, but only keep wanted accounts and transactions */ iea=AB_ImExporterContext_GetFirstAccountInfo(ctx); while (iea) { if (AB_ImExporterAccountInfo_Matches(iea, aid, /* unique account id */ "*", bankId, accountId, subAccountId, iban, "*", /* currency */ AB_AccountType_Unknown)) { AB_BALANCE *bal; GWEN_DB_NODE *dbAccount; const char *s; dbAccount=GWEN_DB_Group_new("dbAccount"); s=AB_ImExporterAccountInfo_GetBankCode(iea); if (s && *s) GWEN_DB_SetCharValue(dbAccount, GWEN_DB_FLAGS_OVERWRITE_VARS, "bankCode", s); s=AB_ImExporterAccountInfo_GetAccountNumber(iea); if (s && *s) GWEN_DB_SetCharValue(dbAccount, GWEN_DB_FLAGS_OVERWRITE_VARS, "accountNumber", s); s=AB_ImExporterAccountInfo_GetBic(iea); if (s && *s) GWEN_DB_SetCharValue(dbAccount, GWEN_DB_FLAGS_OVERWRITE_VARS, "bic", s); s=AB_ImExporterAccountInfo_GetIban(iea); if (s && *s) GWEN_DB_SetCharValue(dbAccount, GWEN_DB_FLAGS_OVERWRITE_VARS, "iban", s); s=AB_ImExporterAccountInfo_GetIban(iea); if (!(s && *s)) s=AB_ImExporterAccountInfo_GetAccountNumber(iea); if (s && *s) GWEN_DB_SetCharValue(dbAccount, GWEN_DB_FLAGS_OVERWRITE_VARS, "ibanOrAccountNumber", s); bal=AB_Balance_List_GetLatestByType(AB_ImExporterAccountInfo_GetBalanceList(iea), bt); if (bal) { GWEN_DB_NODE *dbElement; const AB_VALUE *v; const GWEN_DATE *dt; GWEN_BUFFER *dbuf; dbElement=GWEN_DB_Group_dup(dbAccount); AB_Balance_toDb(bal, dbElement); /* translate value */ dbuf=GWEN_Buffer_new(0, 256, 0, 1); v=AB_Balance_GetValue(bal); if (v) { AB_Value_toHumanReadableString(v, dbuf, 2, 0); GWEN_DB_SetCharValue(dbElement, GWEN_DB_FLAGS_OVERWRITE_VARS, "valueAsString", GWEN_Buffer_GetStart(dbuf)); GWEN_Buffer_Reset(dbuf); } /* translate date */ dt=AB_Balance_GetDate(bal); if (dt) { rv=GWEN_Date_toStringWithTemplate(dt, I18N("DD.MM.YYYY"), dbuf); if (rv>=0) { GWEN_DB_SetCharValue(dbElement, GWEN_DB_FLAGS_OVERWRITE_VARS, "dateAsString", GWEN_Buffer_GetStart(dbuf)); } GWEN_Buffer_Reset(dbuf); } GWEN_DB_ReplaceVars(dbElement, tmplString, dbuf); fprintf(stdout, "%s\n", GWEN_Buffer_GetStart(dbuf)); GWEN_Buffer_free(dbuf); GWEN_DB_Group_free(dbElement); } /* if bal */ GWEN_DB_Group_free(dbAccount); } /* if account matches */ iea=AB_ImExporterAccountInfo_List_Next(iea); } /* while */ AB_ImExporterContext_free(ctx); /* deinit */ rv=AB_Banking_Fini(ab); if (rv) { fprintf(stderr, "ERROR: Error on deinit (%d)\n", rv); return 5; } return 0; } /* parse command line */ GWEN_DB_NODE *_readCommandLine(GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; int rv; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Int, /* type */ "uniqueAccountId", /* name */ 0, /* minnum */ 1, /* maxnum */ NULL, /* short option */ "aid", /* long option */ "Specify the unique account id", /* short description */ "Specify the unique account id" /* long description */ }, { 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 */ "subAccountId", /* name */ 0, /* minnum */ 1, /* maxnum */ "aa", /* short option */ "subaccount", /* long option */ "Specify the sub account id (Unterkontomerkmal)", /* short description */ "Specify the sub account id (Unterkontomerkmal)" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "iban", /* name */ 0, /* minnum */ 1, /* maxnum */ "A", /* short option */ "iban", /* long option */ "Specify the iban of your account", /* short description */ "Specify the iban of your account" /* 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 */ "balanceType", /* name */ 0, /* minnum */ 1, /* maxnum */ "bt", /* short option */ "balanceType", /* long option */ "Specify the balance type", /* short description */ "Specify the balance type (e.g. noted, booked, temporary)" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "template", /* name */ 0, /* minnum */ 1, /* maxnum */ "T", /* short option */ "template", /* long option */ "Specify the template for the balance list output", /* short description */ "Specify the template for the balance list output" /* 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 NULL; } 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 NULL; } GWEN_Buffer_AppendString(ubuf, "\n"); GWEN_Buffer_AppendString(ubuf, "The template string given to \"-T\" may contain variables to specify the output.\n"); GWEN_Buffer_AppendString(ubuf, "Default is: \"$(dateAsString)\\t$(valueAsString)\\t$(iban)"); GWEN_Buffer_AppendString(ubuf, "Possible variables are:\n"); GWEN_Buffer_AppendString(ubuf, " $(dateAsString) : Date of the balance in format "); GWEN_Buffer_AppendString(ubuf, I18N("DD.MM.YYYY")); GWEN_Buffer_AppendString(ubuf, " \n"); GWEN_Buffer_AppendString(ubuf, " $(valueAsString) : Amount of the balance\n"); GWEN_Buffer_AppendString(ubuf, " $(iban) : IBAN of the account this balance comes from\n"); GWEN_Buffer_AppendString(ubuf, " $(bic) : Account number of the account this balance comes from\n"); GWEN_Buffer_AppendString(ubuf, " $(bankcode) : Bank code (Bankleitzahl) of the account this balance comes from\n"); GWEN_Buffer_AppendString(ubuf, " $(accountnumber) : Account number of the account this balance comes from\n"); fprintf(stdout, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return NULL; } return db; } aqbanking-6.6.1/src/tools/aqbanking-cli/import.c0000664000175000017500000001577714043610745016534 00000000000000/*************************************************************************** begin : Tue May 03 2005 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals.h" #include int import(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; int rv; const char *ctxFile; const char *inFile; const char *importerName; const char *profileName; const char *profileFile; const char *bankId; const char *accountId; AB_IMEXPORTER_CONTEXT *ctx=0; const GWEN_ARGS args[]= { { 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 */ "inFile", /* name */ 0, /* minnum */ 1, /* maxnum */ "f", /* short option */ "infile", /* long option */ "Specify the file to read the data from", /* short description */ "Specify the file to read the data from" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "importerName", /* name */ 0, /* minnum */ 1, /* maxnum */ 0, /* short option */ "importer", /* long option */ "Specify the importer to use", /* short description */ "Specify the importer 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_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "bankId", /* name */ 0, /* minnum */ 1, /* maxnum */ "b", /* short option */ "bank", /* long option */ "overwrite the bank code", /* short description */ "overwrite 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 */ "overwrite the account number", /* short description */ "overwrite the account number" /* 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(stdout, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } bankId=GWEN_DB_GetCharValue(db, "bankId", 0, 0); accountId=GWEN_DB_GetCharValue(db, "accountId", 0, 0); importerName=GWEN_DB_GetCharValue(db, "importerName", 0, "csv"); profileName=GWEN_DB_GetCharValue(db, "profileName", 0, "default"); profileFile=GWEN_DB_GetCharValue(db, "profileFile", 0, NULL); ctxFile=GWEN_DB_GetCharValue(db, "ctxfile", 0, 0); inFile=GWEN_DB_GetCharValue(db, "inFile", 0, 0); rv=AB_Banking_Init(ab); if (rv) { DBG_ERROR(0, "Error on init (%d)", rv); return 2; } /* import new context */ ctx=AB_ImExporterContext_new(); rv=AB_Banking_ImportFromFileLoadProfile(ab, importerName, ctx, profileName, profileFile, inFile); if (rv<0) { DBG_ERROR(0, "Error reading file: %d", rv); AB_ImExporterContext_free(ctx); return 4; } /* adjust local account id if requested */ if (bankId || accountId) { AB_IMEXPORTER_ACCOUNTINFO *iea; iea=AB_ImExporterContext_GetFirstAccountInfo(ctx); while (iea) { if (bankId) AB_ImExporterAccountInfo_SetBankCode(iea, bankId); if (accountId) AB_ImExporterAccountInfo_SetAccountNumber(iea, accountId); iea=AB_ImExporterAccountInfo_List_Next(iea); } /* while */ } /* write context */ rv=writeContext(ctxFile, ctx); if (rv<0) { AB_Banking_Fini(ab); return 4; } AB_ImExporterContext_free(ctx); /* that's is */ rv=AB_Banking_Fini(ab); if (rv) { fprintf(stderr, "ERROR: Error on deinit (%d)\n", rv); return 5; } return 0; } aqbanking-6.6.1/src/tools/aqbanking-cli/Makefile.in0000644000175000017500000010515615037736026017115 00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ #EXTRA_DIST= VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ bin_PROGRAMS = aqbanking-cli$(EXEEXT) aqhbci-tool4$(EXEEXT) \ aqpaypal-tool$(EXEEXT) aqebics-tool$(EXEEXT) \ aqofxconnect-tool$(EXEEXT) @IS_WINDOWS_TRUE@am__append_1 = -mconsole @IS_WINDOWS_TRUE@am__append_2 = -mconsole @IS_WINDOWS_TRUE@am__append_3 = -mconsole @IS_WINDOWS_TRUE@am__append_4 = -mconsole @IS_WINDOWS_TRUE@am__append_5 = -mconsole subdir = src/tools/aqbanking-cli ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/distri.m4 $(top_srcdir)/m4/gwenhywfar.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/os.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" PROGRAMS = $(bin_PROGRAMS) am_aqbanking_cli_OBJECTS = main.$(OBJEXT) addsepadebitnote.$(OBJEXT) \ addtransaction.$(OBJEXT) chkiban.$(OBJEXT) fillgaps.$(OBJEXT) \ import.$(OBJEXT) export.$(OBJEXT) listaccs.$(OBJEXT) \ listbal.$(OBJEXT) listprofiles.$(OBJEXT) listtrans.$(OBJEXT) \ listdoc.$(OBJEXT) getdoc.$(OBJEXT) request.$(OBJEXT) \ util.$(OBJEXT) versions.$(OBJEXT) sepatransfer.$(OBJEXT) \ sepainternaltransfer.$(OBJEXT) sepadebitnote.$(OBJEXT) \ sepamultijobs.$(OBJEXT) separecurtransfer.$(OBJEXT) \ updateconf.$(OBJEXT) control.$(OBJEXT) accountcmds.$(OBJEXT) aqbanking_cli_OBJECTS = $(am_aqbanking_cli_OBJECTS) am__DEPENDENCIES_1 = aqbanking_cli_DEPENDENCIES = $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = aqbanking_cli_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(aqbanking_cli_LDFLAGS) $(LDFLAGS) -o $@ am_aqebics_tool_OBJECTS = aqebics-tool.$(OBJEXT) aqebics_tool_OBJECTS = $(am_aqebics_tool_OBJECTS) aqebics_tool_DEPENDENCIES = $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) aqebics_tool_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(aqebics_tool_LDFLAGS) $(LDFLAGS) -o $@ am_aqhbci_tool4_OBJECTS = aqhbci-tool.$(OBJEXT) aqhbci_tool4_OBJECTS = $(am_aqhbci_tool4_OBJECTS) aqhbci_tool4_DEPENDENCIES = $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) aqhbci_tool4_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(aqhbci_tool4_LDFLAGS) $(LDFLAGS) -o $@ am_aqofxconnect_tool_OBJECTS = aqofxconnect-tool.$(OBJEXT) aqofxconnect_tool_OBJECTS = $(am_aqofxconnect_tool_OBJECTS) aqofxconnect_tool_DEPENDENCIES = $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) aqofxconnect_tool_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ $(AM_CFLAGS) $(CFLAGS) $(aqofxconnect_tool_LDFLAGS) $(LDFLAGS) \ -o $@ am_aqpaypal_tool_OBJECTS = aqpaypal-tool.$(OBJEXT) aqpaypal_tool_OBJECTS = $(am_aqpaypal_tool_OBJECTS) aqpaypal_tool_DEPENDENCIES = $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) aqpaypal_tool_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(aqpaypal_tool_LDFLAGS) $(LDFLAGS) -o $@ AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/accountcmds.Po \ ./$(DEPDIR)/addsepadebitnote.Po ./$(DEPDIR)/addtransaction.Po \ ./$(DEPDIR)/aqebics-tool.Po ./$(DEPDIR)/aqhbci-tool.Po \ ./$(DEPDIR)/aqofxconnect-tool.Po ./$(DEPDIR)/aqpaypal-tool.Po \ ./$(DEPDIR)/chkiban.Po ./$(DEPDIR)/control.Po \ ./$(DEPDIR)/export.Po ./$(DEPDIR)/fillgaps.Po \ ./$(DEPDIR)/getdoc.Po ./$(DEPDIR)/import.Po \ ./$(DEPDIR)/listaccs.Po ./$(DEPDIR)/listbal.Po \ ./$(DEPDIR)/listdoc.Po ./$(DEPDIR)/listprofiles.Po \ ./$(DEPDIR)/listtrans.Po ./$(DEPDIR)/main.Po \ ./$(DEPDIR)/request.Po ./$(DEPDIR)/sepadebitnote.Po \ ./$(DEPDIR)/sepainternaltransfer.Po \ ./$(DEPDIR)/sepamultijobs.Po ./$(DEPDIR)/separecurtransfer.Po \ ./$(DEPDIR)/sepatransfer.Po ./$(DEPDIR)/updateconf.Po \ ./$(DEPDIR)/util.Po ./$(DEPDIR)/versions.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(aqbanking_cli_SOURCES) $(aqebics_tool_SOURCES) \ $(aqhbci_tool4_SOURCES) $(aqofxconnect_tool_SOURCES) \ $(aqpaypal_tool_SOURCES) DIST_SOURCES = $(aqbanking_cli_SOURCES) $(aqebics_tool_SOURCES) \ $(aqhbci_tool4_SOURCES) $(aqofxconnect_tool_SOURCES) \ $(aqpaypal_tool_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac HEADERS = $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADD_ACLOCAL_FLAGS = @ADD_ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AQBANKING_CLI_VERSION_STRING = @AQBANKING_CLI_VERSION_STRING@ AQBANKING_FINTS_VERSION_STRING = @AQBANKING_FINTS_VERSION_STRING@ AQBANKING_SO_AGE = @AQBANKING_SO_AGE@ AQBANKING_SO_CURRENT = @AQBANKING_SO_CURRENT@ AQBANKING_SO_EFFECTIVE = @AQBANKING_SO_EFFECTIVE@ AQBANKING_SO_REVISION = @AQBANKING_SO_REVISION@ AQBANKING_VERSION_BUILD = @AQBANKING_VERSION_BUILD@ AQBANKING_VERSION_FULL_STRING = @AQBANKING_VERSION_FULL_STRING@ AQBANKING_VERSION_MAJOR = @AQBANKING_VERSION_MAJOR@ AQBANKING_VERSION_MINOR = @AQBANKING_VERSION_MINOR@ AQBANKING_VERSION_PATCHLEVEL = @AQBANKING_VERSION_PATCHLEVEL@ AQBANKING_VERSION_RELEASE_STRING = @AQBANKING_VERSION_RELEASE_STRING@ AQBANKING_VERSION_STRING = @AQBANKING_VERSION_STRING@ AQBANKING_VERSION_TAG = @AQBANKING_VERSION_TAG@ AQEBICS_CFLAGS = @AQEBICS_CFLAGS@ AQEBICS_LIBS = @AQEBICS_LIBS@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATETIME = @DATETIME@ #-Wl,-static DEFS = @DEFS@ -DLOCALEDIR=\"$(localedir)\" \ -DAQBANKING_CLI_VERSION_STRING=\"@AQBANKING_CLI_VERSION_STRING@\" DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_EXCLUDE_PATTERNS = @DOXYGEN_EXCLUDE_PATTERNS@ DOXYGEN_FILE_PATTERNS = @DOXYGEN_FILE_PATTERNS@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENGUI_GTK2_CFLAGS = @GWENGUI_GTK2_CFLAGS@ GWENGUI_GTK2_LIBS = @GWENGUI_GTK2_LIBS@ GWENHYWFAR_MINIMUM_VERSION = @GWENHYWFAR_MINIMUM_VERSION@ HAVE_GWENGUI_GTK2 = @HAVE_GWENGUI_GTK2@ HAVE_I18N = @HAVE_I18N@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIBXSLT_CFLAGS = @LIBXSLT_CFLAGS@ LIBXSLT_LIBS = @LIBXSLT_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_SUPPORTS_QT = @MSGFMT_SUPPORTS_QT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ TUTORIALS = @TUTORIALS@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XMLMERGE = @XMLMERGE@ XMLSEC_CFLAGS = @XMLSEC_CFLAGS@ XMLSEC_LIBS = @XMLSEC_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ aqbanking_backends = @aqbanking_backends@ aqbanking_cfg_searchdir = @aqbanking_cfg_searchdir@ aqbanking_data_searchdir = @aqbanking_data_searchdir@ aqbanking_headerdir = @aqbanking_headerdir@ aqbanking_headerdir_am = @aqbanking_headerdir_am@ aqbanking_includes = @aqbanking_includes@ aqbanking_internal_libs = @aqbanking_internal_libs@ aqbanking_ldflags = @aqbanking_ldflags@ aqbanking_libs = @aqbanking_libs@ aqbanking_locale_searchdir = @aqbanking_locale_searchdir@ aqbanking_modules = @aqbanking_modules@ aqbanking_pkgdatadir = @aqbanking_pkgdatadir@ aqbanking_plugin_searchdir = @aqbanking_plugin_searchdir@ aqbanking_plugindir = @aqbanking_plugindir@ aqbanking_plugins_backends_dirs = @aqbanking_plugins_backends_dirs@ aqbanking_plugins_backends_libs = @aqbanking_plugins_backends_libs@ aqbanking_plugins_bankinfo_dirs = @aqbanking_plugins_bankinfo_dirs@ aqbanking_plugins_bankinfo_libs = @aqbanking_plugins_bankinfo_libs@ aqbanking_plugins_imexporters_dirs = @aqbanking_plugins_imexporters_dirs@ aqbanking_plugins_imexporters_libs = @aqbanking_plugins_imexporters_libs@ aqbanking_plugins_parsers_dirs = @aqbanking_plugins_parsers_dirs@ aqbanking_symlinkdir = @aqbanking_symlinkdir@ aqbanking_sys_is_windows = @aqbanking_sys_is_windows@ aqbankingpp_modules = @aqbankingpp_modules@ aqebics_datadir = @aqebics_datadir@ aqebics_includes = @aqebics_includes@ aqebics_internal_libs = @aqebics_internal_libs@ aqebics_ldflags = @aqebics_ldflags@ aqebics_libs = @aqebics_libs@ aqfints_datadir = @aqfints_datadir@ aqhbci_datadir = @aqhbci_datadir@ aqhbci_includes = @aqhbci_includes@ aqhbci_internal_libs = @aqhbci_internal_libs@ aqhbci_ldflags = @aqhbci_ldflags@ aqhbci_libs = @aqhbci_libs@ aqofxconnect_includes = @aqofxconnect_includes@ aqofxconnect_internal_libs = @aqofxconnect_internal_libs@ aqofxconnect_libs = @aqofxconnect_libs@ aqpaypal_includes = @aqpaypal_includes@ aqpaypal_internal_libs = @aqpaypal_internal_libs@ aqpaypal_libs = @aqpaypal_libs@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gmp_libs = @gmp_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_dir = @gwenhywfar_dir@ gwenhywfar_has_crypt = @gwenhywfar_has_crypt@ gwenhywfar_headers = @gwenhywfar_headers@ gwenhywfar_includes = @gwenhywfar_includes@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_plugins = @gwenhywfar_plugins@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ typemaker2_exe = @typemaker2_exe@ visibility_cflags = @visibility_cflags@ with_aqebics = @with_aqebics@ with_aqhbci = @with_aqhbci@ AM_CPPFLAGS = -I$(top_srcdir)/src/libs -I$(top_builddir)/src/libs $(gwenhywfar_includes) -I$(srcdir)/.. AM_CFLAGS = @visibility_cflags@ aqbanking_cli_LDADD = \ $(aqbanking_internal_libs) \ $(gwenhywfar_libs) -lstdc++ aqbanking_cli_SOURCES = \ main.c \ addsepadebitnote.c \ addtransaction.c \ chkiban.c \ fillgaps.c \ import.c \ export.c \ listaccs.c \ listbal.c \ listprofiles.c \ listtrans.c \ listdoc.c \ getdoc.c \ request.c \ util.c \ versions.c \ sepatransfer.c \ sepainternaltransfer.c \ sepadebitnote.c \ sepamultijobs.c \ separecurtransfer.c \ updateconf.c \ control.c \ accountcmds.c aqbanking_cli_LDFLAGS = $(am__append_1) aqhbci_tool4_LDFLAGS = $(am__append_2) aqpaypal_tool_LDFLAGS = $(am__append_3) aqebics_tool_LDFLAGS = $(am__append_4) aqofxconnect_tool_LDFLAGS = $(am__append_5) noinst_HEADERS = globals.h #EXTRA_DIST= aqhbci_tool4_SOURCES = aqhbci-tool.c aqhbci_tool4_LDADD = \ $(aqbanking_internal_libs) \ $(gwenhywfar_libs) aqpaypal_tool_SOURCES = aqpaypal-tool.c aqpaypal_tool_LDADD = \ $(aqbanking_internal_libs) \ $(gwenhywfar_libs) aqebics_tool_SOURCES = aqebics-tool.c aqebics_tool_LDADD = \ $(aqbanking_internal_libs) \ $(gwenhywfar_libs) aqofxconnect_tool_SOURCES = aqofxconnect-tool.c aqofxconnect_tool_LDADD = \ $(aqbanking_internal_libs) \ $(gwenhywfar_libs) all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/tools/aqbanking-cli/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/tools/aqbanking-cli/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ || test -f $$p1 \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list aqbanking-cli$(EXEEXT): $(aqbanking_cli_OBJECTS) $(aqbanking_cli_DEPENDENCIES) $(EXTRA_aqbanking_cli_DEPENDENCIES) @rm -f aqbanking-cli$(EXEEXT) $(AM_V_CCLD)$(aqbanking_cli_LINK) $(aqbanking_cli_OBJECTS) $(aqbanking_cli_LDADD) $(LIBS) aqebics-tool$(EXEEXT): $(aqebics_tool_OBJECTS) $(aqebics_tool_DEPENDENCIES) $(EXTRA_aqebics_tool_DEPENDENCIES) @rm -f aqebics-tool$(EXEEXT) $(AM_V_CCLD)$(aqebics_tool_LINK) $(aqebics_tool_OBJECTS) $(aqebics_tool_LDADD) $(LIBS) aqhbci-tool4$(EXEEXT): $(aqhbci_tool4_OBJECTS) $(aqhbci_tool4_DEPENDENCIES) $(EXTRA_aqhbci_tool4_DEPENDENCIES) @rm -f aqhbci-tool4$(EXEEXT) $(AM_V_CCLD)$(aqhbci_tool4_LINK) $(aqhbci_tool4_OBJECTS) $(aqhbci_tool4_LDADD) $(LIBS) aqofxconnect-tool$(EXEEXT): $(aqofxconnect_tool_OBJECTS) $(aqofxconnect_tool_DEPENDENCIES) $(EXTRA_aqofxconnect_tool_DEPENDENCIES) @rm -f aqofxconnect-tool$(EXEEXT) $(AM_V_CCLD)$(aqofxconnect_tool_LINK) $(aqofxconnect_tool_OBJECTS) $(aqofxconnect_tool_LDADD) $(LIBS) aqpaypal-tool$(EXEEXT): $(aqpaypal_tool_OBJECTS) $(aqpaypal_tool_DEPENDENCIES) $(EXTRA_aqpaypal_tool_DEPENDENCIES) @rm -f aqpaypal-tool$(EXEEXT) $(AM_V_CCLD)$(aqpaypal_tool_LINK) $(aqpaypal_tool_OBJECTS) $(aqpaypal_tool_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/accountcmds.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/addsepadebitnote.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/addtransaction.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aqebics-tool.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aqhbci-tool.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aqofxconnect-tool.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aqpaypal-tool.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/chkiban.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/control.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/export.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fillgaps.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getdoc.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/import.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/listaccs.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/listbal.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/listdoc.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/listprofiles.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/listtrans.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/request.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sepadebitnote.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sepainternaltransfer.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sepamultijobs.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/separecurtransfer.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sepatransfer.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/updateconf.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/util.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/versions.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(bindir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/accountcmds.Po -rm -f ./$(DEPDIR)/addsepadebitnote.Po -rm -f ./$(DEPDIR)/addtransaction.Po -rm -f ./$(DEPDIR)/aqebics-tool.Po -rm -f ./$(DEPDIR)/aqhbci-tool.Po -rm -f ./$(DEPDIR)/aqofxconnect-tool.Po -rm -f ./$(DEPDIR)/aqpaypal-tool.Po -rm -f ./$(DEPDIR)/chkiban.Po -rm -f ./$(DEPDIR)/control.Po -rm -f ./$(DEPDIR)/export.Po -rm -f ./$(DEPDIR)/fillgaps.Po -rm -f ./$(DEPDIR)/getdoc.Po -rm -f ./$(DEPDIR)/import.Po -rm -f ./$(DEPDIR)/listaccs.Po -rm -f ./$(DEPDIR)/listbal.Po -rm -f ./$(DEPDIR)/listdoc.Po -rm -f ./$(DEPDIR)/listprofiles.Po -rm -f ./$(DEPDIR)/listtrans.Po -rm -f ./$(DEPDIR)/main.Po -rm -f ./$(DEPDIR)/request.Po -rm -f ./$(DEPDIR)/sepadebitnote.Po -rm -f ./$(DEPDIR)/sepainternaltransfer.Po -rm -f ./$(DEPDIR)/sepamultijobs.Po -rm -f ./$(DEPDIR)/separecurtransfer.Po -rm -f ./$(DEPDIR)/sepatransfer.Po -rm -f ./$(DEPDIR)/updateconf.Po -rm -f ./$(DEPDIR)/util.Po -rm -f ./$(DEPDIR)/versions.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/accountcmds.Po -rm -f ./$(DEPDIR)/addsepadebitnote.Po -rm -f ./$(DEPDIR)/addtransaction.Po -rm -f ./$(DEPDIR)/aqebics-tool.Po -rm -f ./$(DEPDIR)/aqhbci-tool.Po -rm -f ./$(DEPDIR)/aqofxconnect-tool.Po -rm -f ./$(DEPDIR)/aqpaypal-tool.Po -rm -f ./$(DEPDIR)/chkiban.Po -rm -f ./$(DEPDIR)/control.Po -rm -f ./$(DEPDIR)/export.Po -rm -f ./$(DEPDIR)/fillgaps.Po -rm -f ./$(DEPDIR)/getdoc.Po -rm -f ./$(DEPDIR)/import.Po -rm -f ./$(DEPDIR)/listaccs.Po -rm -f ./$(DEPDIR)/listbal.Po -rm -f ./$(DEPDIR)/listdoc.Po -rm -f ./$(DEPDIR)/listprofiles.Po -rm -f ./$(DEPDIR)/listtrans.Po -rm -f ./$(DEPDIR)/main.Po -rm -f ./$(DEPDIR)/request.Po -rm -f ./$(DEPDIR)/sepadebitnote.Po -rm -f ./$(DEPDIR)/sepainternaltransfer.Po -rm -f ./$(DEPDIR)/sepamultijobs.Po -rm -f ./$(DEPDIR)/separecurtransfer.Po -rm -f ./$(DEPDIR)/sepatransfer.Po -rm -f ./$(DEPDIR)/updateconf.Po -rm -f ./$(DEPDIR)/util.Po -rm -f ./$(DEPDIR)/versions.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-binPROGRAMS clean-generic clean-libtool cscopelist-am \ ctags ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-binPROGRAMS \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am uninstall-binPROGRAMS .PRECIOUS: Makefile sources: for f in $(aqbanking_cli_SOURCES) $(aqhbci_tool4_SOURCES) $(aqpaypal_tool_SOURCES) $(aqebics_tool_SOURCES); $(aqofxconnect_tool_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done built_sources: for d in $(SUBDIRS); do \ $(MAKE) -C $$d built_sources; \ done ; typefiles: typedefs: cppcheck: for f in $(aqbanking_cli_SOURCES); do \ cppcheck --force $$f ; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: aqbanking-6.6.1/src/tools/aqbanking-cli/updateconf.c0000664000175000017500000000114614043610745017333 00000000000000/*************************************************************************** begin : Tue May 03 2005 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals.h" int updateConf(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv) { /* nothing for now */ return 0; } aqbanking-6.6.1/src/tools/aqbanking-cli/chkiban.c0000664000175000017500000000633614043610745016610 00000000000000/*************************************************************************** begin : Tue May 03 2005 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals.h" #include int chkIban(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; int rv; AB_BANKINFO_CHECKRESULT res; const char *iban; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "iban", /* name */ 1, /* minnum */ 1, /* maxnum */ 0, /* short option */ "iban", /* long option */ "Specify the IBAN to check", /* short description */ "Specify the IBAN to check" /* 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(stdout, I18N("This command checks the given combination of account id\n" "and bank code for validity.\n" "\n" "Return codes:\n" " 1: missing/bad arguments\n" " 2: error while initializing AqBanking\n" " 3: given combination is definately invalid\n" " 5: error while deinitializing AqBanking\n" "\n" "Arguments:\n" "%s\n"), GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } iban=GWEN_DB_GetCharValue(db, "iban", 0, 0); assert(iban); rv=AB_Banking_Init(ab); if (rv) { DBG_ERROR(0, "Error on init (%d)", rv); return 2; } res=AB_Banking_CheckIban(iban); if (res != 0) { DBG_ERROR(0, "IBAN is invalid"); return 3; } rv=AB_Banking_Fini(ab); if (rv) { fprintf(stderr, "ERROR: Error on deinit (%d)\n", rv); return 5; } return 0; } aqbanking-6.6.1/src/tools/aqbanking-cli/listdoc.c0000664000175000017500000002440414546575650016663 00000000000000/*************************************************************************** begin : Fri Mar 20 2021 copyright : (C) 2021 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals.h" #include #include #include #define LISTDOC_FLAGS_SHOW_ACCOUNT 0x0001 #define LISTDOC_FLAGS_SHOW_MIMETYPE 0x0002 #define LISTDOC_FLAGS_SHOW_PATH 0x0004 static void _printAccount(const AB_IMEXPORTER_ACCOUNTINFO *iea); static void _printDoc(const AB_DOCUMENT *doc, uint32_t flags); static GWEN_DB_NODE *_readCommandLine(GWEN_DB_NODE *dbArgs, int argc, char **argv); int listDoc(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; int rv; const char *ctxFile; AB_IMEXPORTER_CONTEXT *ctx=0; AB_IMEXPORTER_ACCOUNTINFO *iea=0; uint32_t aid; const char *bankId; const char *accountId; const char *subAccountId; const char *iban; uint32_t flags=0; /* parse command line arguments */ db=_readCommandLine(dbArgs, argc, argv); if (db==NULL) { /* error in command line */ return 1; } /* read command line arguments */ aid=(uint32_t)GWEN_DB_GetIntValue(db, "uniqueAccountId", 0, 0); bankId=GWEN_DB_GetCharValue(db, "bankId", 0, 0); accountId=GWEN_DB_GetCharValue(db, "accountId", 0, 0); subAccountId=GWEN_DB_GetCharValue(db, "subAccountId", 0, 0); iban=GWEN_DB_GetCharValue(db, "iban", 0, 0); flags|=(GWEN_DB_GetIntValue(db, "showAccount", 0, 0)>0)?LISTDOC_FLAGS_SHOW_ACCOUNT:0; flags|=(GWEN_DB_GetIntValue(db, "showMimeType", 0, 0)>0)?LISTDOC_FLAGS_SHOW_MIMETYPE:0; flags|=(GWEN_DB_GetIntValue(db, "showPath", 0, 0)>0)?LISTDOC_FLAGS_SHOW_PATH:0; /* init AqBanking */ 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; } /* copy context, but only keep wanted accounts and transactions */ iea=AB_ImExporterContext_GetFirstAccountInfo(ctx); while (iea) { if (AB_ImExporterAccountInfo_Matches(iea, aid, /* unique account id */ "*", bankId, accountId, subAccountId, iban, "*", /* currency */ AB_AccountType_Unknown)) { AB_DOCUMENT_LIST *docList; docList=AB_ImExporterAccountInfo_GetEStatementList(iea); if (docList) { AB_DOCUMENT *doc; doc=AB_Document_List_First(docList); if (doc && (flags & LISTDOC_FLAGS_SHOW_ACCOUNT)) _printAccount(iea); while (doc) { _printDoc(doc, flags); doc=AB_Document_List_Next(doc); } } } /* if account matches */ iea=AB_ImExporterAccountInfo_List_Next(iea); } /* while */ AB_ImExporterContext_free(ctx); /* deinit */ rv=AB_Banking_Fini(ab); if (rv) { fprintf(stderr, "ERROR: Error on deinit (%d)\n", rv); return 5; } return 0; } void _printAccount(const AB_IMEXPORTER_ACCOUNTINFO *iea) { const char *sBank; const char *sAccount; sAccount=AB_ImExporterAccountInfo_GetIban(iea); sBank=AB_ImExporterAccountInfo_GetIban(iea); if (!(sAccount && *sAccount)) { sAccount=AB_ImExporterAccountInfo_GetAccountNumber(iea); sBank=AB_ImExporterAccountInfo_GetBankCode(iea); } fprintf(stdout, "Account %s/%s\n", sBank?sBank:"", sAccount?sAccount:""); } void _printDoc(const AB_DOCUMENT *doc, uint32_t flags) { const char *sId; const char *sMimeType; const char *sPath; sId=AB_Document_GetId(doc); sMimeType=AB_Document_GetMimeType(doc); sPath=AB_Document_GetFilePath(doc); fprintf(stdout, "%s", sId?sId:""); if (flags & LISTDOC_FLAGS_SHOW_MIMETYPE) fprintf(stdout, "\t%s", sMimeType?sMimeType:""); if (flags & LISTDOC_FLAGS_SHOW_PATH) fprintf(stdout, "\t%s", sPath?sPath:""); fprintf(stdout, "\n"); } /* parse command line */ GWEN_DB_NODE *_readCommandLine(GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; int rv; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Int, /* type */ "uniqueAccountId", /* name */ 0, /* minnum */ 1, /* maxnum */ NULL, /* short option */ "aid", /* long option */ "Specify the unique account id", /* short description */ "Specify the unique account id" /* long description */ }, { 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 */ "subAccountId", /* name */ 0, /* minnum */ 1, /* maxnum */ "aa", /* short option */ "subaccount", /* long option */ "Specify the sub account id (Unterkontomerkmal)", /* short description */ "Specify the sub account id (Unterkontomerkmal)" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "iban", /* name */ 0, /* minnum */ 1, /* maxnum */ "A", /* short option */ "iban", /* long option */ "Specify the iban of your account", /* short description */ "Specify the iban of your account" /* long description */ }, { 0, /* flags */ GWEN_ArgsType_Int, /* type */ "showAccount", /* name */ 0, /* minnum */ 1, /* maxnum */ "", /* short option */ "showAccount", /* long option */ "Show account", /* short description */ "Show account" /* long description */ }, { 0, /* flags */ GWEN_ArgsType_Int, /* type */ "showMimeType", /* name */ 0, /* minnum */ 1, /* maxnum */ NULL, /* short option */ "showMimeType", /* long option */ "Show mimetype", /* short description */ "Show mimetype" /* long description */ }, { 0, /* flags */ GWEN_ArgsType_Int, /* type */ "showPath", /* name */ 0, /* minnum */ 1, /* maxnum */ "", /* short option */ "showPath", /* long option */ "Show path of the file containing document's data", /* short description */ "Show path of the file containing document's data" /* 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_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 NULL; } 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 NULL; } GWEN_Buffer_AppendString(ubuf, "\n"); fprintf(stdout, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return NULL; } return db; } aqbanking-6.6.1/src/tools/aqbanking-cli/fillgaps.c0000664000175000017500000001444214043610745017007 00000000000000/*************************************************************************** begin : Tue May 03 2005 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif /* local includes */ #include "globals.h" /* Gwenhywfar includes */ #include /* forward declarations */ static GWEN_DB_NODE *_readCommandLine(GWEN_DB_NODE *dbArgs, int argc, char **argv); static int _copyTransactionsAndFillGaps(AB_IMEXPORTER_CONTEXT *inCtx, AB_ACCOUNT_SPEC_LIST *accountSpecList, AB_IMEXPORTER_CONTEXT *outCtx); int fillGaps(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; int rv; const char *ctxFile; int noWriteOnError=0; AB_IMEXPORTER_CONTEXT *inCtx=NULL; AB_IMEXPORTER_CONTEXT *outCtx=NULL; AB_ACCOUNT_SPEC_LIST *accountSpecList=NULL; /* parse command line arguments */ db=_readCommandLine(dbArgs, argc, argv); if (db==NULL) { /* error in command line */ return 1; } /* read arguments */ noWriteOnError=GWEN_DB_GetIntValue(db, "noWriteOnError", 0, 0); /* go */ rv=AB_Banking_Init(ab); if (rv) { DBG_ERROR(0, "Error on init (%d)", rv); return 2; } /* read in-context */ ctxFile=GWEN_DB_GetCharValue(db, "ctxfile", 0, 0); rv=readContext(ctxFile, &inCtx, 0); if (rv<0) { DBG_ERROR(0, "Error reading context (%d)", rv); AB_Banking_Fini(ab); return 4; } /* read account list */ rv=AB_Banking_GetAccountSpecList(ab, &accountSpecList); if (rv<0) { DBG_INFO(0, "here (%d)", rv); AB_Banking_Fini(ab); return 4; } /* fill gaps */ outCtx=AB_ImExporterContext_new(); rv=_copyTransactionsAndFillGaps(inCtx, accountSpecList, outCtx); if (rv<0) { if (noWriteOnError) { DBG_ERROR(0, "Some transactions could not be assigned to configured accounts, nothing written."); AB_ImExporterContext_free(outCtx); AB_Banking_Fini(ab); return 4; } DBG_ERROR(0, "Some transactions could not be assigned to configured accounts, those have status=error"); } AB_ImExporterContext_free(inCtx); rv=writeContext(ctxFile, outCtx); if (rv<0) { DBG_ERROR(0, "Error writing context (%d)", rv); AB_ImExporterContext_free(outCtx); AB_Banking_Fini(ab); return 4; } AB_ImExporterContext_free(outCtx); /* that's it */ rv=AB_Banking_Fini(ab); if (rv) { fprintf(stderr, "ERROR: Error on deinit (%d)\n", rv); return 5; } return 0; } GWEN_DB_NODE *_readCommandLine(GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; int rv; const GWEN_ARGS args[]= { { 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 */ }, { 0, /* flags */ GWEN_ArgsType_Int, /* type */ "noWriteOnError", /* name */ 0, /* minnum */ 1, /* maxnum */ 0, /* short option */ "noWriteOnError", /* long option */ "Only write file if all transactions are okay", /* short description */ "Only write file if all transactions are okay" /* 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 NULL; } 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 NULL; } fprintf(stdout, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return NULL; } return db; } int _copyTransactionsAndFillGaps(AB_IMEXPORTER_CONTEXT *inCtx, AB_ACCOUNT_SPEC_LIST *accountSpecList, AB_IMEXPORTER_CONTEXT *outCtx) { AB_IMEXPORTER_ACCOUNTINFO *iea; int allOk=1; int transactionCount=0; iea=AB_ImExporterContext_GetFirstAccountInfo(inCtx); while (iea) { const AB_TRANSACTION *t; t=AB_ImExporterAccountInfo_GetFirstTransaction(iea, 0, 0); while (t) { AB_ACCOUNT_SPEC *as; AB_TRANSACTION *tCopy=NULL; tCopy=AB_Transaction_dup(t); as=pickAccountSpecForTransaction(accountSpecList, tCopy); if (as==NULL) { DBG_ERROR(0, "Could not determine account for transaction %d", transactionCount); allOk=0; AB_Transaction_SetStatus(tCopy, AB_Transaction_StatusError); } /* fill missing fields in transaction from account spec */ AB_Banking_FillTransactionFromAccountSpec(tCopy, as); /* add to new context */ AB_ImExporterContext_AddTransaction(outCtx, tCopy); transactionCount++; t=AB_Transaction_List_Next(t); } /* while t */ iea=AB_ImExporterAccountInfo_List_Next(iea); } /* while */ if (allOk==0) return GWEN_ERROR_GENERIC; return 0; } aqbanking-6.6.1/src/tools/aqbanking-cli/sepainternaltransfer.c0000664000175000017500000003640314625171605021444 00000000000000/*************************************************************************** begin : Tue Oct 12 2021 copyright : (C) 2021 by Stefan Bayer, Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif /* tool includes */ #include "globals.h" /* aqbanking includes */ #include /* gwenhywfar includes */ #include /* forward declarations */ #define ACC_CHOOSER_INPUT_SIZE 10 static GWEN_DB_NODE *_readCommandLine(GWEN_DB_NODE *dbArgs, int argc, char **argv); /* static AB_REFERENCE_ACCOUNT *_chooseReferenceAccount(AB_REFERENCE_ACCOUNT_LIST *ral); */ static int _ensureRemoteAccountInfo(GWEN_DB_NODE *db, AB_ACCOUNT_SPEC *as); int sepaInternalTransfer(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; AB_ACCOUNT_SPEC *as; int rv; int rvExec = 0; const char *ctxFile; AB_TRANSACTION *t; int noCheck; /* parse command line arguments */ db = _readCommandLine(dbArgs, argc, argv); if (db == NULL) { /* error in command line */ return 1; } /* read arguments */ noCheck = GWEN_DB_GetIntValue(db, "noCheck", 0, 0); ctxFile = GWEN_DB_GetCharValue(db, "ctxfile", 0, 0); /* init AqBanking */ rv = AB_Banking_Init(ab); if (rv) { DBG_ERROR(0, "Error on init (%d)", rv); return 2; } /* get account to work with */ as = getSingleSelectedAccount(ab, db); if (as == NULL) { AB_Banking_Fini(ab); return 2; } rv=_ensureRemoteAccountInfo(db, as); if (rv!=0) { DBG_ERROR(NULL, "Incomplete data for remote account, maybe you need to run 'aqhbci-tool4 gettargetacc'"); AB_Banking_Fini(ab); return 2; } /* create transaction from arguments */ t = mkSepaTransfer(db, AB_Transaction_CommandSepaInternalTransfer); if (t == NULL) { DBG_ERROR(0, "Could not create SEPA internal transaction from arguments"); AB_Transaction_free(t); AB_AccountSpec_free(as); AB_Banking_Fini(ab); return 2; } AB_Transaction_SetUniqueAccountId(t, AB_AccountSpec_GetUniqueId(as)); /* check for date; if given create a dated transfer */ /*if (AB_Transaction_GetDate(t)) AB_Transaction_SetCommand(t, AB_Transaction_CommandCreateDatedTransfer);*/ /* set local account info from selected AB_ACCOUNT_SPEC */ AB_Banking_FillTransactionFromAccountSpec(t, as); /* some checks */ rv = checkTransactionIbans(t); if (rv != 0) { AB_Transaction_free(t); AB_AccountSpec_free(as); AB_Banking_Fini(ab); return rv; } /* probably check against transaction limits */ if (!noCheck) { rv = checkTransactionLimits(t, AB_AccountSpec_GetTransactionLimitsForCommand(as, AB_Transaction_GetCommand(t)), AQBANKING_TOOL_LIMITFLAGS_PURPOSE | AQBANKING_TOOL_LIMITFLAGS_NAMES | AQBANKING_TOOL_LIMITFLAGS_DATE | AQBANKING_TOOL_LIMITFLAGS_SEPA); if (rv != 0) { AB_Transaction_free(t); AB_AccountSpec_free(as); AB_Banking_Fini(ab); return rv; } } AB_AccountSpec_free(as); /* execute job */ rv = execSingleBankingJob(ab, t, ctxFile); if (rv) { fprintf(stderr, "Error on executeQueue (%d)\n", rv); rvExec = rv; } /* cleanup */ AB_Transaction_free(t); /* that's it */ rv = AB_Banking_Fini(ab); if (rv < 0) { fprintf(stderr, "ERROR: Error on deinit (%d)\n", rv); if (rvExec == 0) rvExec = 5; } return rvExec; } int _ensureRemoteAccountInfo(GWEN_DB_NODE *db, AB_ACCOUNT_SPEC *as) { const char *remoteIban; const char *remoteBic; const char *remoteName; const char *refAccountName; remoteIban=GWEN_DB_GetCharValue(db, "remoteIban", 0, NULL); remoteBic=GWEN_DB_GetCharValue(db, "remoteBic", 0, NULL); remoteName=GWEN_DB_GetCharValue(db, "remoteName", 0, NULL); refAccountName=GWEN_DB_GetCharValue(db, "remoteAccountName", 0, NULL); if (!(remoteIban && *remoteIban && remoteBic && *remoteBic && remoteName && *remoteName)) { AB_REFERENCE_ACCOUNT_LIST *ral; AB_REFERENCE_ACCOUNT *ra=NULL; ral=AB_AccountSpec_GetRefAccountList(as); if (!(ral && AB_ReferenceAccount_List_GetCount(ral))) { DBG_ERROR(NULL, "No reference accounts defined, maybe you need to run 'aqhbci-tool4 gettargetacc'"); return 2; } if ((remoteIban && *remoteIban) || (refAccountName && *refAccountName)) { ra=AB_ReferenceAccount_List_FindFirst(ral, remoteIban, NULL, NULL, NULL, NULL, NULL, NULL, refAccountName); if (ra) { if (!(remoteIban && *remoteIban)) { remoteIban=AB_ReferenceAccount_GetIban(ra); if (!(remoteIban && *remoteIban)) { DBG_ERROR(NULL, "No IBAN in reference account and none given."); return 2; } GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "remoteIban", remoteIban); } if (!(remoteBic && *remoteBic)) { remoteBic=AB_ReferenceAccount_GetBic(ra); if (!(remoteBic && *remoteBic)) { DBG_ERROR(NULL, "No BIC in reference account and none given."); return 2; } GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "remoteBic", remoteBic); } if (!(remoteName && *remoteName)) { remoteName=AB_ReferenceAccount_GetOwnerName(ra); if (!(remoteName && *remoteName)) remoteName=AB_AccountSpec_GetOwnerName(as); if (!(remoteName && *remoteName)) { DBG_ERROR(NULL, "No remote name in reference account and none given."); return 2; } GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "remoteName", remoteName); } } else { DBG_ERROR(NULL, "No matching reference account found"); return 2; } } } return 0; } /* parse command line */ GWEN_DB_NODE *_readCommandLine(GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; int rv; const GWEN_ARGS args[] = { { 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_Int, /* type */ "uniqueAccountId", /* name */ 0, /* minnum */ 1, /* maxnum */ NULL, /* short option */ "aid", /* long option */ "Specify the unique account id", /* short description */ "Specify the unique account id" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "backendName", /* name */ 0, /* minnum */ 1, /* maxnum */ NULL, /* short option */ "backend", /* long option */ "Specify the name of the backend for your account", /* short description */ "Specify the name of the backend for your account" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "country", /* name */ 0, /* minnum */ 1, /* maxnum */ NULL, /* short option */ "country", /* long option */ "Specify the country for your account (e.g. \"de\")", /* short description */ "Specify the country for your account (e.g. \"de\")" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "accountId", /* name */ 0, /* minnum */ 1, /* maxnum */ "a", /* short option */ "account", /* long option */ "overwrite the account number", /* short description */ "overwrite the account number" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "remoteAccountName", /* name */ 0, /* minnum */ 1, /* maxnum */ NULL, /* short option */ "raccname", /* long option */ "specify the reference account name", /* short description */ "specify the reference account number" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "subAccountId", /* name */ 0, /* minnum */ 1, /* maxnum */ "aa", /* short option */ "subaccount", /* long option */ "Specify the sub account id (Unterkontomerkmal)", /* short description */ "Specify the sub account id (Unterkontomerkmal)" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "accountType", /* name */ 0, /* minnum */ 1, /* maxnum */ "at", /* short option */ "accounttype", /* long option */ "Specify the account type", /* short description */ "Specify the account type" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "iban", /* name */ 0, /* minnum */ 1, /* maxnum */ "A", /* short option */ "iban", /* long option */ "Specify the iban of your account", /* short description */ "Specify the iban of your account" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "remoteBIC", /* name */ 0, /* minnum */ 1, /* maxnum */ 0, /* short option */ "rbic", /* long option */ "Specify the remote SWIFT BIC",/* short description */ "Specify the remote SWIFT BIC" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "remoteIBAN", /* name */ 0, /* minnum */ 1, /* maxnum */ 0, /* short option */ "riban", /* long option */ "Specify the remote IBAN", /* short description */ "Specify the remote IBAN" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "value", /* name */ 1, /* minnum */ 1, /* maxnum */ "v", /* short option */ "value", /* long option */ "Specify the transfer amount", /* short description */ "Specify the transfer amount" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "name", /* name */ 0, /* minnum */ 1, /* maxnum */ 0, /* short option */ "name", /* long option */ "Specify your name", /* short description */ "Specify your name" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "remoteName", /* name */ 1, /* minnum */ 2, /* maxnum */ 0, /* short option */ "rname", /* long option */ "Specify the remote name", /* short description */ "Specify the remote name" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "purpose", /* name */ 1, /* minnum */ 6, /* maxnum */ "p", /* short option */ "purpose", /* long option */ "Specify the purpose", /* short description */ "Specify the purpose" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "endToEndReference", /* name */ 0, /* minnum */ 1, /* maxnum */ "E", /* short option */ "endtoendid", /* long option */ "Specify the SEPA End-to-end-reference", /* short description */ "Specify the SEPA End-to-end-reference" /* long description */ }, { 0, /* flags */ GWEN_ArgsType_Int, /* type */ "noCheck", /* name */ 0, /* minnum */ 1, /* maxnum */ NULL, /* short option */ "noCheck", /* long option */ "Dont check transaction limits", /* short description */ "Dont check transaction limits" }, { 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 NULL; } 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 NULL; } fprintf(stdout, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return NULL; } return db; } #if 0 AB_REFERENCE_ACCOUNT *_chooseReferenceAccount(AB_REFERENCE_ACCOUNT_LIST *ral) { AB_REFERENCE_ACCOUNT *ra = NULL; GWEN_BUFFER *ubuf; int16_t numAccounts; char inputBuffer[ACC_CHOOSER_INPUT_SIZE]; int chosenAccount; uint32_t flags; int16_t counter = 1; int16_t scan_result = EOF; const char *accName; const char *iban; ubuf = GWEN_Buffer_new(0, 8096, 0, 1); numAccounts = AB_ReferenceAccount_List_GetCount(ral); ra = AB_ReferenceAccount_List_First(ral); GWEN_Buffer_AppendString(ubuf, "0) abort\n"); while (ra) { iban = AB_ReferenceAccount_GetIban(ra); accName = AB_ReferenceAccount_GetAccountName(ra); snprintf(inputBuffer, ACC_CHOOSER_INPUT_SIZE, "%d) ", counter++); GWEN_Buffer_AppendString(ubuf, inputBuffer); if (accName) { GWEN_Buffer_AppendString(ubuf, accName); GWEN_Buffer_AppendString(ubuf, ": "); } GWEN_Buffer_AppendString(ubuf, iban); GWEN_Buffer_AppendString(ubuf, "\n"); ra = AB_ReferenceAccount_List_Next(ra); } flags = 0; ra = NULL; while (scan_result == EOF) { /*rv =*/ GWEN_Gui_InputBox(flags, I18N("Choose a reference account"), GWEN_Buffer_GetStart(ubuf), inputBuffer, 0, ACC_CHOOSER_INPUT_SIZE - 1, 0); scan_result = sscanf(inputBuffer, "%d", &chosenAccount); if (scan_result != EOF) { if (chosenAccount == 0) { break; } else if (chosenAccount > numAccounts) { scan_result=EOF; } else { ra = AB_ReferenceAccount_List_First(ral); for (counter = 1 ; counter < chosenAccount ; counter++) { ra = AB_ReferenceAccount_List_Next(ra); } break; } } } GWEN_Buffer_free(ubuf); return ra; } #endif aqbanking-6.6.1/src/tools/aqbanking-cli/listaccs.c0000664000175000017500000001744214043610745017016 00000000000000/*************************************************************************** begin : Tue May 03 2005 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals.h" #include int listAccs(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; AB_ACCOUNT_SPEC_LIST *al=NULL; AB_ACCOUNT_SPEC *as; int rv; const char *tmplString; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Int, /* type */ "uniqueAccountId", /* name */ 0, /* minnum */ 1, /* maxnum */ NULL, /* short option */ "aid", /* long option */ "Specify the unique account id", /* short description */ "Specify the unique account id" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "backendName", /* name */ 0, /* minnum */ 1, /* maxnum */ NULL, /* short option */ "backend", /* long option */ "Specify the name of the backend for your account", /* short description */ "Specify the name of the backend for your account" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "country", /* name */ 0, /* minnum */ 1, /* maxnum */ NULL, /* short option */ "country", /* long option */ "Specify the country for your account (e.g. \"de\")", /* short description */ "Specify the country for your account (e.g. \"de\")" /* long description */ }, { 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 */ "subAccountId", /* name */ 0, /* minnum */ 1, /* maxnum */ "aa", /* short option */ "subaccount", /* long option */ "Specify the sub account id (Unterkontomerkmal)", /* short description */ "Specify the sub account id (Unterkontomerkmal)" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "iban", /* name */ 0, /* minnum */ 1, /* maxnum */ "A", /* short option */ "iban", /* long option */ "Specify the iban of your account", /* short description */ "Specify the iban of your account" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "accountType", /* name */ 0, /* minnum */ 1, /* maxnum */ "t", /* short option */ "accounttype", /* long option */ "Specify the type of your account", /* short description */ "Specify the type of your account" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "template", /* name */ 0, /* minnum */ 1, /* maxnum */ "T", /* short option */ "template", /* long option */ "Specify the template for the account list output", /* short description */ "Specify the template for the account list output" /* 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(stdout, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } rv=AB_Banking_Init(ab); if (rv) { DBG_ERROR(0, "Error on init (%d)", rv); return 2; } al=getSelectedAccounts(ab, db); if (al==NULL) { DBG_INFO(0, "No matching accounts"); AB_Banking_Fini(ab); return 2; } tmplString=GWEN_DB_GetCharValue(db, "template", 0, "Account\t$(bankcode)\t$(accountnumber)\t$(bic)\t$(iban)\t$(uniqueId)\t$(typeAsString)"); as=AB_AccountSpec_List_First(al); if (as) { GWEN_BUFFER *dbuf; fprintf(stdout, " \tBankcode\tAccountnumber\tBic\tIban\tUniqueId\tType\n"); dbuf=GWEN_Buffer_new(0, 256, 0, 1); while (as) { GWEN_DB_NODE *dbAccountSpec; dbAccountSpec=GWEN_DB_Group_new("accountSpec"); AB_AccountSpec_toDb(as, dbAccountSpec); GWEN_DB_SetCharValue(dbAccountSpec, GWEN_DB_FLAGS_OVERWRITE_VARS, "typeAsString", AB_AccountType_toChar(AB_AccountSpec_GetType(as))); GWEN_DB_ReplaceVars(dbAccountSpec, tmplString, dbuf); fprintf(stdout, "%s\n", GWEN_Buffer_GetStart(dbuf)); GWEN_Buffer_Reset(dbuf); GWEN_DB_Group_free(dbAccountSpec); as=AB_AccountSpec_List_Next(as); } /* while (as) */ GWEN_Buffer_free(dbuf); } AB_AccountSpec_List_free(al); rv=AB_Banking_Fini(ab); if (rv) { fprintf(stderr, "ERROR: Error on deinit (%d)\n", rv); return 5; } return 0; } aqbanking-6.6.1/src/tools/aqbanking-cli/aqebics-tool.c0000664000175000017500000001744714043610745017600 00000000000000/*************************************************************************** begin : Tue May 03 2005 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include #include #include #include #include #include #include "globals.h" static int doControl(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv); int main(int argc, char **argv) { GWEN_DB_NODE *db; int rv; AB_BANKING *ab; GWEN_GUI *gui; int nonInteractive=0; int acceptValidCerts=0; const char *pinFile; const char *cfgDir; const char *s; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "cfgdir", /* name */ 0, /* minnum */ 1, /* maxnum */ "D", /* short option */ "cfgdir", /* long option */ I18S("Specify the configuration folder"), I18S("Specify the configuration folder") }, { 0, /* flags */ GWEN_ArgsType_Int, /* type */ "nonInteractive", /* name */ 0, /* minnum */ 1, /* maxnum */ "n", /* short option */ "noninteractive", /* long option */ "Select non-interactive mode",/* short description */ "Select non-interactive mode.\n" /* long description */ "This automatically returns a confirmative answer to any non-critical\n" "message." }, { 0, /* flags */ GWEN_ArgsType_Int, /* type */ "acceptValidCerts", /* name */ 0, /* minnum */ 1, /* maxnum */ "A", /* short option */ "acceptvalidcerts", /* long option */ "Automatically accept all valid TLS certificate", "Automatically accept all valid TLS certificate" }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "charset", /* name */ 0, /* minnum */ 1, /* maxnum */ 0, /* short option */ "charset", /* long option */ "Specify the output character set", /* short description */ "Specify the output character set" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "pinfile", /* name */ 0, /* minnum */ 1, /* maxnum */ "P", /* short option */ "pinfile", /* long option */ "Specify the PIN file", /* short description */ "Specify the PIN file" /* 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", I18S("Show this help screen. For help on commands, " "run aqbanking-cli --help."), I18S("Show this help screen. For help on commands, run aqbanking-cli --help.") } }; rv=GWEN_Init(); if (rv) { fprintf(stderr, "ERROR: Unable to init Gwen.\n"); exit(2); } GWEN_Logger_Open(0, "aqebics-tool", 0, GWEN_LoggerType_Console, GWEN_LoggerFacility_User); GWEN_Logger_SetLevel(0, GWEN_LoggerLevel_Warning); #if 0 rv=GWEN_I18N_BindTextDomain_Dir(PACKAGE, LOCALEDIR); if (rv) { DBG_ERROR(0, "Could not bind textdomain (%d)", rv); } else { rv=GWEN_I18N_BindTextDomain_Codeset(PACKAGE, "UTF-8"); if (rv) { DBG_ERROR(0, "Could not set codeset (%d)", rv); } } #endif db=GWEN_DB_Group_new("arguments"); rv=GWEN_Args_Check(argc, argv, 1, GWEN_ARGS_MODE_ALLOW_FREEPARAM | GWEN_ARGS_MODE_STOP_AT_FREEPARAM, args, db); if (rv==GWEN_ARGS_RESULT_ERROR) { fprintf(stderr, "ERROR: Could not parse arguments main\n"); GWEN_DB_Group_free(db); return 1; } else if (rv==GWEN_ARGS_RESULT_HELP) { GWEN_BUFFER *ubuf; ubuf=GWEN_Buffer_new(0, 1024, 0, 1); GWEN_Buffer_AppendString(ubuf, I18N("This is version ")); GWEN_Buffer_AppendString(ubuf, AQBANKING_VERSION_STRING "\n"); GWEN_Buffer_AppendString(ubuf, I18N("Usage: ")); GWEN_Buffer_AppendString(ubuf, argv[0]); GWEN_Buffer_AppendString(ubuf, I18N(" [GLOBAL OPTIONS] COMMAND " "[LOCAL OPTIONS]\n")); GWEN_Buffer_AppendString(ubuf, I18N("\nGlobal Options:\n")); if (GWEN_Args_Usage(args, ubuf, GWEN_ArgsOutType_Txt)) { fprintf(stderr, "ERROR: Could not create help string\n"); GWEN_DB_Group_free(db); return 1; } GWEN_Buffer_AppendString(ubuf, "\n"); fprintf(stdout, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); argc=0; /* only show help */ } if (rv>1) { argc-=rv-1; argv+=rv-1; } else { /* no command */ argc=0; } nonInteractive=GWEN_DB_GetIntValue(db, "nonInteractive", 0, 0); acceptValidCerts=GWEN_DB_GetIntValue(db, "acceptValidCerts", 0, 0); cfgDir=GWEN_DB_GetCharValue(db, "cfgdir", 0, 0); gui=GWEN_Gui_CGui_new(); s=GWEN_DB_GetCharValue(db, "charset", 0, NULL); if (s && *s) GWEN_Gui_SetCharSet(gui, s); if (nonInteractive) GWEN_Gui_AddFlags(gui, GWEN_GUI_FLAGS_NONINTERACTIVE); else GWEN_Gui_SubFlags(gui, GWEN_GUI_FLAGS_NONINTERACTIVE); if (acceptValidCerts) GWEN_Gui_AddFlags(gui, GWEN_GUI_FLAGS_ACCEPTVALIDCERTS); else GWEN_Gui_SubFlags(gui, GWEN_GUI_FLAGS_ACCEPTVALIDCERTS); pinFile=GWEN_DB_GetCharValue(db, "pinFile", 0, NULL); if (pinFile) { GWEN_DB_NODE *dbPins; dbPins=GWEN_DB_Group_new("pins"); if (GWEN_DB_ReadFile(dbPins, pinFile, GWEN_DB_FLAGS_DEFAULT | GWEN_PATH_FLAGS_CREATE_GROUP)) { fprintf(stderr, "Error reading pinfile \"%s\"\n", pinFile); GWEN_DB_Group_free(dbPins); GWEN_DB_Group_free(db); return 2; } GWEN_Gui_SetPasswordDb(gui, dbPins, 1); } GWEN_Gui_SetGui(gui); ab=AB_Banking_new("aqbanking-cli", cfgDir, 0); AB_Gui_Extend(gui, ab); rv=doControl(ab, db, argc, argv); GWEN_DB_Group_free(db); return rv; } int doControl(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv) { int rv; rv=AB_Banking_Init(ab); if (rv) { DBG_ERROR(0, "Error on init (%d)", rv); return 2; } rv=AB_Banking_ProviderControl(ab, "aqebics", argc, argv); if (rv!=0) { DBG_ERROR(0, "Error calling control function (%d)", rv); AB_Banking_Fini(ab); return 4; } rv=AB_Banking_Fini(ab); if (rv) { fprintf(stderr, "ERROR: Error on deinit (%d)\n", rv); return 5; } return 0; } aqbanking-6.6.1/src/tools/aqbanking-cli/aqofxconnect-tool.c0000664000175000017500000001744414377702650020665 00000000000000/*************************************************************************** begin : Tue May 03 2005 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include #include #include #include #include #include #include "globals.h" static int doControl(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv); int main(int argc, char **argv) { GWEN_DB_NODE *db; int rv; AB_BANKING *ab; GWEN_GUI *gui; int nonInteractive=0; int acceptValidCerts=0; const char *pinFile; const char *cfgDir; const char *s; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "cfgdir", /* name */ 0, /* minnum */ 1, /* maxnum */ "D", /* short option */ "cfgdir", /* long option */ I18S("Specify the configuration folder"), I18S("Specify the configuration folder") }, { 0, /* flags */ GWEN_ArgsType_Int, /* type */ "nonInteractive", /* name */ 0, /* minnum */ 1, /* maxnum */ "n", /* short option */ "noninteractive", /* long option */ "Select non-interactive mode",/* short description */ "Select non-interactive mode.\n" /* long description */ "This automatically returns a confirmative answer to any non-critical\n" "message." }, { 0, /* flags */ GWEN_ArgsType_Int, /* type */ "acceptValidCerts", /* name */ 0, /* minnum */ 1, /* maxnum */ "A", /* short option */ "acceptvalidcerts", /* long option */ "Automatically accept all valid TLS certificate", "Automatically accept all valid TLS certificate" }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "charset", /* name */ 0, /* minnum */ 1, /* maxnum */ 0, /* short option */ "charset", /* long option */ "Specify the output character set", /* short description */ "Specify the output character set" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "pinfile", /* name */ 0, /* minnum */ 1, /* maxnum */ "P", /* short option */ "pinfile", /* long option */ "Specify the PIN file", /* short description */ "Specify the PIN file" /* 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", I18S("Show this help screen. For help on commands, " "run aqbanking-cli --help."), I18S("Show this help screen. For help on commands, run aqbanking-cli --help.") } }; rv=GWEN_Init(); if (rv) { fprintf(stderr, "ERROR: Unable to init Gwen.\n"); exit(2); } GWEN_Logger_Open(0, "aqofxconnect-tool", 0, GWEN_LoggerType_Console, GWEN_LoggerFacility_User); GWEN_Logger_SetLevel(0, GWEN_LoggerLevel_Warning); rv=GWEN_I18N_BindTextDomain_Dir(PACKAGE, LOCALEDIR); if (rv) { DBG_ERROR(0, "Could not bind textdomain (%d)", rv); } else { rv=GWEN_I18N_BindTextDomain_Codeset(PACKAGE, "UTF-8"); if (rv) { DBG_ERROR(0, "Could not set codeset (%d)", rv); } } db=GWEN_DB_Group_new("arguments"); rv=GWEN_Args_Check(argc, argv, 1, GWEN_ARGS_MODE_ALLOW_FREEPARAM | GWEN_ARGS_MODE_STOP_AT_FREEPARAM, args, db); if (rv==GWEN_ARGS_RESULT_ERROR) { fprintf(stderr, "ERROR: Could not parse arguments main\n"); GWEN_DB_Group_free(db); return 1; } else if (rv==GWEN_ARGS_RESULT_HELP) { GWEN_BUFFER *ubuf; ubuf=GWEN_Buffer_new(0, 1024, 0, 1); GWEN_Buffer_AppendString(ubuf, I18N("This is version ")); GWEN_Buffer_AppendString(ubuf, AQBANKING_VERSION_STRING "\n"); GWEN_Buffer_AppendString(ubuf, I18N("Usage: ")); GWEN_Buffer_AppendString(ubuf, argv[0]); GWEN_Buffer_AppendString(ubuf, I18N(" [GLOBAL OPTIONS] COMMAND " "[LOCAL OPTIONS]\n")); GWEN_Buffer_AppendString(ubuf, I18N("\nGlobal Options:\n")); if (GWEN_Args_Usage(args, ubuf, GWEN_ArgsOutType_Txt)) { fprintf(stderr, "ERROR: Could not create help string\n"); GWEN_DB_Group_free(db); return 1; } GWEN_Buffer_AppendString(ubuf, "\n"); fprintf(stdout, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); argc=0; /* only show help */ } if (rv>1) { argc-=rv-1; argv+=rv-1; } else { /* no command */ argc=0; } nonInteractive=GWEN_DB_GetIntValue(db, "nonInteractive", 0, 0); acceptValidCerts=GWEN_DB_GetIntValue(db, "acceptValidCerts", 0, 0); cfgDir=GWEN_DB_GetCharValue(db, "cfgdir", 0, 0); gui=GWEN_Gui_CGui_new(); s=GWEN_DB_GetCharValue(db, "charset", 0, NULL); if (s && *s) GWEN_Gui_SetCharSet(gui, s); if (nonInteractive) GWEN_Gui_AddFlags(gui, GWEN_GUI_FLAGS_NONINTERACTIVE); else GWEN_Gui_SubFlags(gui, GWEN_GUI_FLAGS_NONINTERACTIVE); if (acceptValidCerts) GWEN_Gui_AddFlags(gui, GWEN_GUI_FLAGS_ACCEPTVALIDCERTS); else GWEN_Gui_SubFlags(gui, GWEN_GUI_FLAGS_ACCEPTVALIDCERTS); pinFile=GWEN_DB_GetCharValue(db, "pinFile", 0, NULL); if (pinFile) { GWEN_DB_NODE *dbPins; dbPins=GWEN_DB_Group_new("pins"); if (GWEN_DB_ReadFile(dbPins, pinFile, GWEN_DB_FLAGS_DEFAULT | GWEN_PATH_FLAGS_CREATE_GROUP)) { fprintf(stderr, "Error reading pinfile \"%s\"\n", pinFile); GWEN_DB_Group_free(dbPins); GWEN_DB_Group_free(db); return 2; } GWEN_Gui_SetPasswordDb(gui, dbPins, 1); } GWEN_Gui_SetGui(gui); ab=AB_Banking_new("aqbanking-cli", cfgDir, 0); AB_Gui_Extend(gui, ab); rv=doControl(ab, db, argc, argv); GWEN_DB_Group_free(db); return rv; } int doControl(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv) { int rv; rv=AB_Banking_Init(ab); if (rv) { DBG_ERROR(0, "Error on init (%d)", rv); return 2; } rv=AB_Banking_ProviderControl(ab, "aqofxconnect", argc, argv); if (rv!=0) { DBG_ERROR(0, "Error calling control function (%d)", rv); AB_Banking_Fini(ab); return 4; } rv=AB_Banking_Fini(ab); if (rv) { fprintf(stderr, "ERROR: Error on deinit (%d)\n", rv); return 5; } return 0; } aqbanking-6.6.1/src/tools/aqbanking-cli/Makefile.am0000664000175000017500000000417014377702650017102 00000000000000#EXTRA_DIST= AM_CPPFLAGS = -I$(top_srcdir)/src/libs -I$(top_builddir)/src/libs $(gwenhywfar_includes) -I$(srcdir)/.. AM_CFLAGS=@visibility_cflags@ bin_PROGRAMS=\ aqbanking-cli\ aqhbci-tool4 \ aqpaypal-tool \ aqebics-tool \ aqofxconnect-tool aqbanking_cli_LDADD= \ $(aqbanking_internal_libs) \ $(gwenhywfar_libs) -lstdc++ aqbanking_cli_SOURCES= \ main.c \ addsepadebitnote.c \ addtransaction.c \ chkiban.c \ fillgaps.c \ import.c \ export.c \ listaccs.c \ listbal.c \ listprofiles.c \ listtrans.c \ listdoc.c \ getdoc.c \ request.c \ util.c \ versions.c \ sepatransfer.c \ sepainternaltransfer.c \ sepadebitnote.c \ sepamultijobs.c \ separecurtransfer.c \ updateconf.c \ control.c \ accountcmds.c aqbanking_cli_LDFLAGS= aqhbci_tool4_LDFLAGS= aqpaypal_tool_LDFLAGS= aqebics_tool_LDFLAGS= aqofxconnect_tool_LDFLAGS= #-Wl,-static DEFS += -DLOCALEDIR=\"$(localedir)\" -DAQBANKING_CLI_VERSION_STRING=\"@AQBANKING_CLI_VERSION_STRING@\" noinst_HEADERS=globals.h #EXTRA_DIST= aqhbci_tool4_SOURCES=aqhbci-tool.c aqhbci_tool4_LDADD= \ $(aqbanking_internal_libs) \ $(gwenhywfar_libs) aqpaypal_tool_SOURCES=aqpaypal-tool.c aqpaypal_tool_LDADD= \ $(aqbanking_internal_libs) \ $(gwenhywfar_libs) aqebics_tool_SOURCES=aqebics-tool.c aqebics_tool_LDADD= \ $(aqbanking_internal_libs) \ $(gwenhywfar_libs) aqofxconnect_tool_SOURCES=aqofxconnect-tool.c aqofxconnect_tool_LDADD= \ $(aqbanking_internal_libs) \ $(gwenhywfar_libs) if IS_WINDOWS aqbanking_cli_LDFLAGS+=-mconsole aqhbci_tool4_LDFLAGS+=-mconsole aqpaypal_tool_LDFLAGS+=-mconsole aqebics_tool_LDFLAGS+=-mconsole aqofxconnect_tool_LDFLAGS+=-mconsole endif sources: for f in $(aqbanking_cli_SOURCES) $(aqhbci_tool4_SOURCES) $(aqpaypal_tool_SOURCES) $(aqebics_tool_SOURCES); $(aqofxconnect_tool_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done built_sources: for d in $(SUBDIRS); do \ $(MAKE) -C $$d built_sources; \ done ; typefiles: typedefs: cppcheck: for f in $(aqbanking_cli_SOURCES); do \ cppcheck --force $$f ; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done aqbanking-6.6.1/src/tools/aqbanking-cli/listtrans.c0000664000175000017500000003737414546575650017257 00000000000000/*************************************************************************** begin : Tue May 03 2005 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals.h" #include static GWEN_DB_NODE *_readCommandLine(GWEN_DB_NODE *dbArgs, int argc, char **argv); int listTrans(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; int rv; const char *ctxFile; AB_IMEXPORTER_CONTEXT *ctx=0; AB_IMEXPORTER_ACCOUNTINFO *iea=0; uint32_t aid; const char *bankId; const char *accountId; const char *subAccountId; const char *iban; int transactionType=0; int transactionCommand=0; const char *tmplString; const char *s; /* parse command line arguments */ db=_readCommandLine(dbArgs, argc, argv); if (db==NULL) { /* error in command line */ return 1; } /* read command line arguments */ aid=(uint32_t)GWEN_DB_GetIntValue(db, "uniqueAccountId", 0, 0); bankId=GWEN_DB_GetCharValue(db, "bankId", 0, 0); accountId=GWEN_DB_GetCharValue(db, "accountId", 0, 0); subAccountId=GWEN_DB_GetCharValue(db, "subAccountId", 0, 0); iban=GWEN_DB_GetCharValue(db, "iban", 0, 0); tmplString=GWEN_DB_GetCharValue(db, "template", 0, "$(dateOrValutaDateAsString)\t" "$(valueAsString)\t" "$(localBankcode)\t" "$(localAccountNumber)\t" "$(localIban)\t" "$(remoteName)\t" "$(remoteIban)\t" "$(purposeInOneLine)"); s=GWEN_DB_GetCharValue(db, "transactionType", 0, NULL); if (s && *s) { transactionType=AB_Transaction_Type_fromString(s); if (transactionType==AB_Transaction_TypeUnknown) { fprintf(stderr, "ERROR: Invalid transaction type \"%s\"\n", s); return 1; } } s=GWEN_DB_GetCharValue(db, "transactionCommand", 0, NULL); if (s && *s) { transactionCommand=AB_Transaction_Command_fromString(s); if (transactionCommand==AB_Transaction_CommandUnknown) { fprintf(stderr, "ERROR: Invalid transaction command \"%s\"\n", s); return 1; } } /* init AqBanking */ 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; } /* copy context, but only keep wanted accounts and transactions */ iea=AB_ImExporterContext_GetFirstAccountInfo(ctx); while (iea) { if (AB_ImExporterAccountInfo_Matches(iea, aid, /* unique account id */ "*", bankId, accountId, subAccountId, iban, "*", /* currency */ AB_AccountType_Unknown)) { AB_TRANSACTION_LIST *tl; tl=AB_ImExporterAccountInfo_GetTransactionList(iea); if (tl) { const AB_TRANSACTION *t; GWEN_BUFFER *dbuf; dbuf=GWEN_Buffer_new(0, 256, 0, 1); t=AB_Transaction_List_FindFirstByType(tl, transactionType, transactionCommand); while (t) { rv=addTransactionToBufferByTemplate(t, tmplString, dbuf); if (rv<0) { } fprintf(stdout, "%s\n", GWEN_Buffer_GetStart(dbuf)); GWEN_Buffer_Reset(dbuf); t=AB_Transaction_List_FindNextByType(t, transactionType, transactionCommand); } GWEN_Buffer_free(dbuf); } } iea=AB_ImExporterAccountInfo_List_Next(iea); } /* while */ AB_ImExporterContext_free(ctx); /* deinit */ rv=AB_Banking_Fini(ab); if (rv) { fprintf(stderr, "ERROR: Error on deinit (%d)\n", rv); return 5; } return 0; } /* parse command line */ GWEN_DB_NODE *_readCommandLine(GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; int rv; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Int, /* type */ "uniqueAccountId", /* name */ 0, /* minnum */ 1, /* maxnum */ NULL, /* short option */ "aid", /* long option */ "Specify the unique account id", /* short description */ "Specify the unique account id" /* long description */ }, { 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 */ "subAccountId", /* name */ 0, /* minnum */ 1, /* maxnum */ "aa", /* short option */ "subaccount", /* long option */ "Specify the sub account id (Unterkontomerkmal)", /* short description */ "Specify the sub account id (Unterkontomerkmal)" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "iban", /* name */ 0, /* minnum */ 1, /* maxnum */ "A", /* short option */ "iban", /* long option */ "Specify the iban of your account", /* short description */ "Specify the iban of your account" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "transactionType", /* name */ 0, /* minnum */ 1, /* maxnum */ "tt", /* short option */ "transactiontype", /* long option */ "Specify the transaction type to filter", /* short description */ "Specify the transaction type to filter" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "transactionCommand", /* name */ 0, /* minnum */ 1, /* maxnum */ "tc", /* short option */ "transactioncommand", /* long option */ "Specify the transaction command to filter", /* short description */ "Specify the transaction command to filter" /* 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 */ "template", /* name */ 0, /* minnum */ 1, /* maxnum */ "T", /* short option */ "template", /* long option */ "Specify the template for the transaction list output", /* short description */ "Specify the template for the transaction list output" /* 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 NULL; } 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 NULL; } GWEN_Buffer_AppendString(ubuf, "\n"); GWEN_Buffer_AppendString(ubuf, "The template string given to \"-T\" may contain variables to specify the output.\n"); GWEN_Buffer_AppendString(ubuf, "Default is (all in one line): \n"); GWEN_Buffer_AppendString(ubuf, " $(dateOrValutaDateAsString)\\t$(valueAsString)\\t$(localBankcode)\\t\n"); GWEN_Buffer_AppendString(ubuf, " $(localAccountNumber)\\t$(localIban)\\t$(remoteName)\\t$(remoteIban)\\t$(purposeInOneLine)\n"); GWEN_Buffer_AppendString(ubuf, "\n"); GWEN_Buffer_AppendString(ubuf, "Often used variables are:\n"); GWEN_Buffer_AppendString(ubuf, " $(status) : Transaction status\n"); GWEN_Buffer_AppendString(ubuf, " $(idForApplication) : Transaction id assigned by the application\n"); GWEN_Buffer_AppendString(ubuf, " $(fiId) : Transaction id assigned by the bank\n"); GWEN_Buffer_AppendString(ubuf, " $(localIban) : Local IBAN\n"); GWEN_Buffer_AppendString(ubuf, " $(localBic) : Local BIC\n"); GWEN_Buffer_AppendString(ubuf, " $(localBankcode) : Local bank code (Bankleitzahl)\n"); GWEN_Buffer_AppendString(ubuf, " $(localAccountnumber) : Local account number\n"); GWEN_Buffer_AppendString(ubuf, " $(remoteIban) : Remote IBAN\n"); GWEN_Buffer_AppendString(ubuf, " $(remoteBic) : Remote account number\n"); GWEN_Buffer_AppendString(ubuf, " $(remoteBankcode) : Remote bank code (Bankleitzahl)\n"); GWEN_Buffer_AppendString(ubuf, " $(remoteAccountnumber) : Remote account number\n"); GWEN_Buffer_AppendString(ubuf, " $(dateAsString) : Date of the transaction in format "); GWEN_Buffer_AppendString(ubuf, I18N("DD.MM.YYYY")); GWEN_Buffer_AppendString(ubuf, " \n"); GWEN_Buffer_AppendString(ubuf, " $(valutaDateAsString) : Valuta Date of the transaction in format "); GWEN_Buffer_AppendString(ubuf, I18N("DD.MM.YYYY")); GWEN_Buffer_AppendString(ubuf, " \n"); GWEN_Buffer_AppendString(ubuf, " $(dateOrValutaDateAsString) : Date (or if missing: valuta date) of the transaction in format "); GWEN_Buffer_AppendString(ubuf, I18N("DD.MM.YYYY")); GWEN_Buffer_AppendString(ubuf, " \n"); GWEN_Buffer_AppendString(ubuf, " $(valueAsString) : Amount of the transaction\n"); GWEN_Buffer_AppendString(ubuf, " $(purpose) : Memo/purpose (\"Verwendungszweck\")\n"); GWEN_Buffer_AppendString(ubuf, " $(purposeLine[n]) : Memo/purpose line n (\"Verwendungszweckzeile\")\n"); GWEN_Buffer_AppendString(ubuf, " $(purposeInOneLine) : Full purpose in one line (\"Verwendungszweckzeile\")\n"); GWEN_Buffer_AppendString(ubuf, " $(customerReference) : Customer reference\n"); GWEN_Buffer_AppendString(ubuf, " $(bankReference) : Bank reference\n"); GWEN_Buffer_AppendString(ubuf, " $(endToEndReference) : SEPA end to end reference\n"); GWEN_Buffer_AppendString(ubuf, " $(ultimateCreditor) : Ultimate creditor e.g. when payment handled by a service provider\n"); GWEN_Buffer_AppendString(ubuf, " $(ultimateDebtor) : Ultimate debitor e.g. when payment handled by a service provider\n"); GWEN_Buffer_AppendString(ubuf, "\n"); GWEN_Buffer_AppendString(ubuf, "Variables used with debit notes:\n"); GWEN_Buffer_AppendString(ubuf, " $(creditorSchemeId) : Creditor Schema Id\n"); GWEN_Buffer_AppendString(ubuf, " $(originatorId) : Originator Id\n"); GWEN_Buffer_AppendString(ubuf, " $(mandateId) : Mandate Id\n"); GWEN_Buffer_AppendString(ubuf, " $(sequence) : (once, first, following, final)\n"); GWEN_Buffer_AppendString(ubuf, "\n"); GWEN_Buffer_AppendString(ubuf, "Variables seldomly used:\n"); GWEN_Buffer_AppendString(ubuf, " $(type) : Transaction type\n"); GWEN_Buffer_AppendString(ubuf, " $(subType) : Transaction subtype\n"); GWEN_Buffer_AppendString(ubuf, " $(command) : Command (for banking jobs, normally \"none\"\n"); GWEN_Buffer_AppendString(ubuf, " $(uniqueAccountId) : Unique id of the account to which this Transaction belongs\n"); GWEN_Buffer_AppendString(ubuf, " $(uniqueId) : Unique id of the transaction (mostly unused)\n"); GWEN_Buffer_AppendString(ubuf, " $(refUniqueId) : Unique id of another transaction this one refers to (mostly unused)\n"); GWEN_Buffer_AppendString(ubuf, " $(transactionText) : Transaction text (e.g. \"Gehalt\")\n"); GWEN_Buffer_AppendString(ubuf, " $(transactionKey) : Some other value assigned by the bank\n"); GWEN_Buffer_AppendString(ubuf, "\n"); GWEN_Buffer_AppendString(ubuf, "\n"); GWEN_Buffer_AppendString(ubuf, "The following transaction types can be used with \"-tt\":\n"); GWEN_Buffer_AppendString(ubuf, " statement : standard bank statements\n"); GWEN_Buffer_AppendString(ubuf, " notedStatement : statements not yet booked but planned to be booked by the bank\n"); GWEN_Buffer_AppendString(ubuf, " transfer : transfer (pay to someone else)\n"); GWEN_Buffer_AppendString(ubuf, " debitNote : debit note (request someone to pay to you)\n"); GWEN_Buffer_AppendString(ubuf, " standingOrder : standing order (periodical payment to someone else)\n"); GWEN_Buffer_AppendString(ubuf, " internalTransfer : transfer between two of your accounts at one bank\n"); fprintf(stdout, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return NULL; } return db; } aqbanking-6.6.1/src/tools/aqbanking-cli/sepadebitnote.c0000664000175000017500000003653514043610745020043 00000000000000/*************************************************************************** begin : Sat Dec 28 2013 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif /* tool includes */ #include "globals.h" /* aqbanking includes */ #include /* gwenhywfar includes */ #include /* forward declarations */ static GWEN_DB_NODE *_readCommandLine(GWEN_DB_NODE *dbArgs, int argc, char **argv); int sepaDebitNote(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv, int use_flash_debitnote) { GWEN_DB_NODE *db; AB_ACCOUNT_SPEC *as; int rv; int rvExec=0; const char *ctxFile; AB_TRANSACTION *t; int noCheck; /* parse command line arguments */ db=_readCommandLine(dbArgs, argc, argv); if (db==NULL) { /* error in command line */ return 1; } /* read arguments */ noCheck=GWEN_DB_GetIntValue(db, "noCheck", 0, 0); ctxFile=GWEN_DB_GetCharValue(db, "ctxfile", 0, 0); /* init AqBanking */ rv=AB_Banking_Init(ab); if (rv) { DBG_ERROR(0, "Error on init (%d)", rv); return 2; } /* get account to work with */ as=getSingleSelectedAccount(ab, db); if (as==NULL) { AB_Banking_Fini(ab); return 2; } /* create transaction from arguments */ t=mkSepaDebitNote(db, use_flash_debitnote?AB_Transaction_CommandSepaFlashDebitNote:AB_Transaction_CommandSepaDebitNote); if (t==NULL) { DBG_ERROR(0, "Could not create SEPA transaction from arguments"); AB_Transaction_free(t); AB_AccountSpec_free(as); AB_Banking_Fini(ab); return 2; } AB_Transaction_SetType(t, AB_Transaction_TypeDebitNote); AB_Transaction_SetUniqueAccountId(t, AB_AccountSpec_GetUniqueId(as)); /* set local account info from selected AB_ACCOUNT_SPEC */ AB_Banking_FillTransactionFromAccountSpec(t, as); /* some checks */ rv=checkTransactionIbans(t); if (rv!=0) { AB_Transaction_free(t); AB_AccountSpec_free(as); AB_Banking_Fini(ab); return rv; } /* probably check against transaction limits */ if (!noCheck) { rv=checkTransactionLimits(t, AB_AccountSpec_GetTransactionLimitsForCommand(as, AB_Transaction_GetCommand(t)), AQBANKING_TOOL_LIMITFLAGS_PURPOSE | AQBANKING_TOOL_LIMITFLAGS_NAMES | AQBANKING_TOOL_LIMITFLAGS_SEQUENCE | AQBANKING_TOOL_LIMITFLAGS_DATE | AQBANKING_TOOL_LIMITFLAGS_SEPA); if (rv!=0) { AB_Transaction_free(t); AB_AccountSpec_free(as); AB_Banking_Fini(ab); return rv; } } AB_AccountSpec_free(as); /* execute job */ rv=execSingleBankingJob(ab, t, ctxFile); if (rv) { fprintf(stderr, "Error on executeQueue (%d)\n", rv); rvExec=rv; } /* cleanup */ AB_Transaction_free(t); /* that's it */ rv=AB_Banking_Fini(ab); if (rv<0) { fprintf(stderr, "ERROR: Error on deinit (%d)\n", rv); if (rvExec==0) rvExec=5; } return rvExec; } /* parse command line */ GWEN_DB_NODE *_readCommandLine(GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; int rv; const GWEN_ARGS args[]= { { 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_Int, /* type */ "uniqueAccountId", /* name */ 0, /* minnum */ 1, /* maxnum */ NULL, /* short option */ "aid", /* long option */ "Specify the unique account id", /* short description */ "Specify the unique account id" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "backendName", /* name */ 0, /* minnum */ 1, /* maxnum */ NULL, /* short option */ "backend", /* long option */ "Specify the name of the backend for your account", /* short description */ "Specify the name of the backend for your account" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "country", /* name */ 0, /* minnum */ 1, /* maxnum */ NULL, /* short option */ "country", /* long option */ "Specify the country for your account (e.g. \"de\")", /* short description */ "Specify the country for your account (e.g. \"de\")" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "bankId", /* name */ 0, /* minnum */ 1, /* maxnum */ "b", /* short option */ "bank", /* long option */ "overwrite the bank code", /* short description */ "overwrite 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 */ "overwrite the account number", /* short description */ "overwrite the account number" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "subAccountId", /* name */ 0, /* minnum */ 1, /* maxnum */ "aa", /* short option */ "subaccount", /* long option */ "Specify the sub account id (Unterkontomerkmal)", /* short description */ "Specify the sub account id (Unterkontomerkmal)" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "accountType", /* name */ 0, /* minnum */ 1, /* maxnum */ "at", /* short option */ "accounttype", /* long option */ "Specify the account type", /* short description */ "Specify the account type" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "iban", /* name */ 0, /* minnum */ 1, /* maxnum */ "A", /* short option */ "iban", /* long option */ "Specify the iban of your account", /* short description */ "Specify the iban of your account" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "remoteBIC", /* name */ 0, /* minnum */ 1, /* maxnum */ 0, /* short option */ "rbic", /* long option */ "Specify the remote SWIFT BIC",/* short description */ "Specify the remote SWIFT BIC" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "remoteIBAN", /* name */ 1, /* minnum */ 1, /* maxnum */ 0, /* short option */ "riban", /* long option */ "Specify the remote IBAN", /* short description */ "Specify the remote IBAN" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "value", /* name */ 1, /* minnum */ 1, /* maxnum */ "v", /* short option */ "value", /* long option */ "Specify the transfer amount", /* short description */ "Specify the transfer amount" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "name", /* name */ 0, /* minnum */ 1, /* maxnum */ 0, /* short option */ "name", /* long option */ "Specify your name", /* short description */ "Specify your name" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "remoteName", /* name */ 1, /* minnum */ 2, /* maxnum */ 0, /* short option */ "rname", /* long option */ "Specify the remote name", /* short description */ "Specify the remote name" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "purpose", /* name */ 1, /* minnum */ 6, /* maxnum */ "p", /* short option */ "purpose", /* long option */ "Specify the purpose", /* short description */ "Specify the purpose" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "endToEndReference", /* name */ 0, /* minnum */ 1, /* maxnum */ "E", /* short option */ "endtoendid", /* long option */ "Specify the SEPA End-to-end-reference", /* short description */ "Specify the SEPA End-to-end-reference" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "executionDate", /* name */ 0, /* minnum */ 1, /* maxnum */ 0, /* short option */ "execdate", /* long option */ "Specify the execution date (YYYYMMDD)", /* short */ "Specify the execution date (YYYYMMDD)" /* long */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "creditorSchemeId", /* name */ 1, /* minnum */ 1, /* maxnum */ 0, /* short option */ "creditorSchemeId", /* long option */ "Specify the creditor scheme id (\"Glaeubiger-ID\")", /* short description */ "Specify the creditor scheme id (\"Glaeubiger-ID\")" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "mandateId", /* name */ 1, /* minnum */ 1, /* maxnum */ 0, /* short option */ "mandateId", /* long option */ "Specify the mandate id", /* short description */ "Specify the mandate id" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "mandateDate", /* name */ 0, /* minnum */ 1, /* maxnum */ 0, /* short option */ "mandateDate", /* long option */ "Specify the date when the mandate was issued", /* short description */ "Specify the date when the mandate was issued" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "sequenceType", /* name */ 0, /* minnum */ 1, /* maxnum */ 0, /* short option */ "sequenceType", /* long option */ "Specify the sequence type (once, first, following)", /* short description */ "Specify the sequence type (once, first, following)" /* long description */ }, { 0, /* flags */ GWEN_ArgsType_Int, /* type */ "noCheck", /* name */ 0, /* minnum */ 1, /* maxnum */ NULL, /* short option */ "noCheck", /* long option */ "Dont check transaction limits", /* short description */ "Dont check transaction limits" }, { 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 NULL; } 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 NULL; } fprintf(stdout, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return NULL; } return db; } aqbanking-6.6.1/src/tools/aqbanking-cli/sepatransfer.c0000664000175000017500000003240714043610745017704 00000000000000/*************************************************************************** begin : Tue May 03 2005 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif /* tool includes */ #include "globals.h" /* aqbanking includes */ #include /* gwenhywfar includes */ #include /* forward declarations */ static GWEN_DB_NODE *_readCommandLine(GWEN_DB_NODE *dbArgs, int argc, char **argv); int sepaTransfer(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; AB_ACCOUNT_SPEC *as; int rv; int rvExec=0; const char *ctxFile; AB_TRANSACTION *t; int noCheck; /* parse command line arguments */ db=_readCommandLine(dbArgs, argc, argv); if (db==NULL) { /* error in command line */ return 1; } /* read arguments */ noCheck=GWEN_DB_GetIntValue(db, "noCheck", 0, 0); ctxFile=GWEN_DB_GetCharValue(db, "ctxfile", 0, 0); /* init AqBanking */ rv=AB_Banking_Init(ab); if (rv) { DBG_ERROR(0, "Error on init (%d)", rv); return 2; } /* get account to work with */ as=getSingleSelectedAccount(ab, db); if (as==NULL) { AB_Banking_Fini(ab); return 2; } /* create transaction from arguments */ t=mkSepaTransfer(db, AB_Transaction_CommandSepaTransfer); if (t==NULL) { DBG_ERROR(0, "Could not create SEPA transaction from arguments"); AB_Transaction_free(t); AB_AccountSpec_free(as); AB_Banking_Fini(ab); return 2; } AB_Transaction_SetUniqueAccountId(t, AB_AccountSpec_GetUniqueId(as)); /* check for date; if given create a dated transfer */ if (AB_Transaction_GetDate(t)) AB_Transaction_SetCommand(t, AB_Transaction_CommandCreateDatedTransfer); /* set local account info from selected AB_ACCOUNT_SPEC */ AB_Banking_FillTransactionFromAccountSpec(t, as); /* some checks */ rv=checkTransactionIbans(t); if (rv!=0) { AB_Transaction_free(t); AB_AccountSpec_free(as); AB_Banking_Fini(ab); return rv; } /* probably check against transaction limits */ if (!noCheck) { rv=checkTransactionLimits(t, AB_AccountSpec_GetTransactionLimitsForCommand(as, AB_Transaction_GetCommand(t)), AQBANKING_TOOL_LIMITFLAGS_PURPOSE | AQBANKING_TOOL_LIMITFLAGS_NAMES | AQBANKING_TOOL_LIMITFLAGS_DATE | AQBANKING_TOOL_LIMITFLAGS_SEPA); if (rv!=0) { AB_Transaction_free(t); AB_AccountSpec_free(as); AB_Banking_Fini(ab); return rv; } } AB_AccountSpec_free(as); /* execute job */ rv=execSingleBankingJob(ab, t, ctxFile); if (rv) { fprintf(stderr, "Error on executeQueue (%d)\n", rv); rvExec=rv; } /* cleanup */ AB_Transaction_free(t); /* that's it */ rv=AB_Banking_Fini(ab); if (rv<0) { fprintf(stderr, "ERROR: Error on deinit (%d)\n", rv); if (rvExec==0) rvExec=5; } return rvExec; } /* parse command line */ GWEN_DB_NODE *_readCommandLine(GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; int rv; const GWEN_ARGS args[]= { { 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_Int, /* type */ "uniqueAccountId", /* name */ 0, /* minnum */ 1, /* maxnum */ NULL, /* short option */ "aid", /* long option */ "Specify the unique account id", /* short description */ "Specify the unique account id" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "backendName", /* name */ 0, /* minnum */ 1, /* maxnum */ NULL, /* short option */ "backend", /* long option */ "Specify the name of the backend for your account", /* short description */ "Specify the name of the backend for your account" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "country", /* name */ 0, /* minnum */ 1, /* maxnum */ NULL, /* short option */ "country", /* long option */ "Specify the country for your account (e.g. \"de\")", /* short description */ "Specify the country for your account (e.g. \"de\")" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "bankId", /* name */ 0, /* minnum */ 1, /* maxnum */ "b", /* short option */ "bank", /* long option */ "overwrite the bank code", /* short description */ "overwrite 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 */ "overwrite the account number", /* short description */ "overwrite the account number" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "subAccountId", /* name */ 0, /* minnum */ 1, /* maxnum */ "aa", /* short option */ "subaccount", /* long option */ "Specify the sub account id (Unterkontomerkmal)", /* short description */ "Specify the sub account id (Unterkontomerkmal)" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "accountType", /* name */ 0, /* minnum */ 1, /* maxnum */ "at", /* short option */ "accounttype", /* long option */ "Specify the account type", /* short description */ "Specify the account type" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "iban", /* name */ 0, /* minnum */ 1, /* maxnum */ "A", /* short option */ "iban", /* long option */ "Specify the iban of your account", /* short description */ "Specify the iban of your account" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "remoteBIC", /* name */ 0, /* minnum */ 1, /* maxnum */ 0, /* short option */ "rbic", /* long option */ "Specify the remote SWIFT BIC",/* short description */ "Specify the remote SWIFT BIC" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "remoteIBAN", /* name */ 1, /* minnum */ 1, /* maxnum */ 0, /* short option */ "riban", /* long option */ "Specify the remote IBAN", /* short description */ "Specify the remote IBAN" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "value", /* name */ 1, /* minnum */ 1, /* maxnum */ "v", /* short option */ "value", /* long option */ "Specify the transfer amount", /* short description */ "Specify the transfer amount" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "name", /* name */ 0, /* minnum */ 1, /* maxnum */ 0, /* short option */ "name", /* long option */ "Specify your name", /* short description */ "Specify your name" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "remoteName", /* name */ 1, /* minnum */ 2, /* maxnum */ 0, /* short option */ "rname", /* long option */ "Specify the remote name", /* short description */ "Specify the remote name" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "purpose", /* name */ 1, /* minnum */ 6, /* maxnum */ "p", /* short option */ "purpose", /* long option */ "Specify the purpose", /* short description */ "Specify the purpose" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "endToEndReference", /* name */ 0, /* minnum */ 1, /* maxnum */ "E", /* short option */ "endtoendid", /* long option */ "Specify the SEPA End-to-end-reference", /* short description */ "Specify the SEPA End-to-end-reference" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "executionDate", /* name */ 0, /* minnum */ 1, /* maxnum */ 0, /* short option */ "execdate", /* long option */ "Specify the execution date (YYYYMMDD)", /* short */ "Specify the execution date (YYYYMMDD)" /* long */ }, { 0, /* flags */ GWEN_ArgsType_Int, /* type */ "noCheck", /* name */ 0, /* minnum */ 1, /* maxnum */ NULL, /* short option */ "noCheck", /* long option */ "Dont check transaction limits", /* short description */ "Dont check transaction limits" }, { 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 NULL; } 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 NULL; } fprintf(stdout, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return NULL; } return db; } aqbanking-6.6.1/src/tools/aqbanking-cli/control.c0000664000175000017500000000217714043610745016670 00000000000000/*************************************************************************** begin : Tue May 03 2005 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals.h" #include #include #include #include #include #include int control(AB_BANKING *ab, const char *ctrlBackend, GWEN_DB_NODE *dbArgs, int argc, char **argv) { int rv; rv=AB_Banking_Init(ab); if (rv) { DBG_ERROR(0, "Error on init (%d)", rv); return 2; } rv=AB_Banking_ProviderControl(ab, ctrlBackend, argc, argv); if (rv!=0) { DBG_ERROR(0, "Error calling control function (%d)", rv); AB_Banking_Fini(ab); return 4; } rv=AB_Banking_Fini(ab); if (rv) { fprintf(stderr, "ERROR: Error on deinit (%d)\n", rv); return 5; } return 0; } aqbanking-6.6.1/src/tools/aqbanking-cli/separecurtransfer.c0000664000175000017500000004504214043610745020744 00000000000000/*************************************************************************** begin : Sat Dec 28 2013 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif /* tool includes */ #include "globals.h" /* aqbanking includes */ #include /* gwenhywfar includes */ #include /* forward declarations */ static GWEN_DB_NODE *_readCommandLine(GWEN_DB_NODE *dbArgs, int argc, char **argv); int sepaRecurTransfer(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; AB_ACCOUNT_SPEC *as; int rv; int rvExec=0; const char *ctxFile; AB_TRANSACTION *t; int stoCommand=AB_Transaction_CommandUnknown; int noCheck; /* parse command line arguments */ db=_readCommandLine(dbArgs, argc, argv); if (db==NULL) { /* error in command line */ return 1; } /* read arguments */ if (GWEN_DB_GetIntValue(db, "createSto", 0, 0)) stoCommand=AB_Transaction_CommandSepaCreateStandingOrder; if (GWEN_DB_GetIntValue(db, "modifySto", 0, 0)) { if (stoCommand!=AB_Transaction_CommandUnknown) { DBG_ERROR(0, "Contradicting command line arguments"); return 1; } stoCommand=AB_Transaction_CommandSepaModifyStandingOrder; } if (GWEN_DB_GetIntValue(db, "deleteSto", 0, 0)) { if (stoCommand!=AB_Transaction_CommandUnknown) { DBG_ERROR(0, "Contradicting command line arguments"); return 1; } stoCommand=AB_Transaction_CommandSepaDeleteStandingOrder; } if (stoCommand==AB_Transaction_CommandUnknown) { DBG_ERROR(0, "Missing Option: '--create', '--delete' or '--modify'"); return 1; } noCheck=GWEN_DB_GetIntValue(db, "noCheck", 0, 0); ctxFile=GWEN_DB_GetCharValue(db, "ctxfile", 0, 0); /* init AqBanking */ rv=AB_Banking_Init(ab); if (rv) { DBG_ERROR(0, "Error on init (%d)", rv); return 2; } /* get account to work with */ as=getSingleSelectedAccount(ab, db); if (as==NULL) { AB_Banking_Fini(ab); return 2; } /* create transaction from arguments */ t=mkSepaTransfer(db, stoCommand); if (t==NULL) { DBG_ERROR(0, "Could not create SEPA standing order from arguments"); AB_Transaction_free(t); AB_AccountSpec_free(as); AB_Banking_Fini(ab); return 2; } AB_Transaction_SetUniqueAccountId(t, AB_AccountSpec_GetUniqueId(as)); /* set local account info from selected AB_ACCOUNT_SPEC */ AB_Banking_FillTransactionFromAccountSpec(t, as); /* some checks */ rv=checkTransactionIbans(t); if (rv!=0) { AB_Transaction_free(t); AB_AccountSpec_free(as); AB_Banking_Fini(ab); return rv; } /* probably check against transaction limits */ if (!noCheck) { rv=checkTransactionLimits(t, AB_AccountSpec_GetTransactionLimitsForCommand(as, AB_Transaction_GetCommand(t)), AQBANKING_TOOL_LIMITFLAGS_PURPOSE | AQBANKING_TOOL_LIMITFLAGS_NAMES | AQBANKING_TOOL_LIMITFLAGS_DATE | AQBANKING_TOOL_LIMITFLAGS_SEPA); if (rv!=0) { AB_Transaction_free(t); AB_AccountSpec_free(as); AB_Banking_Fini(ab); return rv; } } AB_AccountSpec_free(as); /* execute job */ rv=execSingleBankingJob(ab, t, ctxFile); if (rv) { fprintf(stderr, "Error on executeQueue (%d)\n", rv); rvExec=rv; } /* cleanup */ AB_Transaction_free(t); /* that's it */ rv=AB_Banking_Fini(ab); if (rv<0) { fprintf(stderr, "ERROR: Error on deinit (%d)\n", rv); if (rvExec==0) rvExec=5; } return rvExec; } /* parse command line */ GWEN_DB_NODE *_readCommandLine(GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; int rv; const GWEN_ARGS args[]= { { 0, /* flags */ GWEN_ArgsType_Int, /* type */ "createSto", /* name */ 0, /* minnum */ 1, /* maxnum */ NULL, "create", "Create standing orders", "Create standing orders" }, { 0, /* flags */ GWEN_ArgsType_Int, /* type */ "modifySto", /* name */ 0, /* minnum */ 1, /* maxnum */ NULL, "modify", "Modify standing orders", "Modify standing orders" }, { 0, /* flags */ GWEN_ArgsType_Int, /* type */ "deleteSto", /* name */ 0, /* minnum */ 1, /* maxnum */ NULL, /* short option */ "delete", /* long option */ "Delete standing orders", /* short */ "Delete standing orders" /* long */ }, { 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_Int, /* type */ "uniqueAccountId", /* name */ 0, /* minnum */ 1, /* maxnum */ NULL, /* short option */ "aid", /* long option */ "Specify the unique account id", /* short description */ "Specify the unique account id" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "backendName", /* name */ 0, /* minnum */ 1, /* maxnum */ NULL, /* short option */ "backend", /* long option */ "Specify the name of the backend for your account", /* short description */ "Specify the name of the backend for your account" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "country", /* name */ 0, /* minnum */ 1, /* maxnum */ NULL, /* short option */ "country", /* long option */ "Specify the country for your account (e.g. \"de\")", /* short description */ "Specify the country for your account (e.g. \"de\")" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "bankId", /* name */ 0, /* minnum */ 1, /* maxnum */ "b", /* short option */ "bank", /* long option */ "overwrite the bank code", /* short description */ "overwrite 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 */ "overwrite the account number", /* short description */ "overwrite the account number" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "subAccountId", /* name */ 0, /* minnum */ 1, /* maxnum */ "aa", /* short option */ "subaccount", /* long option */ "Specify the sub account id (Unterkontomerkmal)", /* short description */ "Specify the sub account id (Unterkontomerkmal)" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "accountType", /* name */ 0, /* minnum */ 1, /* maxnum */ "at", /* short option */ "accounttype", /* long option */ "Specify the account type", /* short description */ "Specify the account type" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "iban", /* name */ 0, /* minnum */ 1, /* maxnum */ "A", /* short option */ "iban", /* long option */ "Specify the iban of your account", /* short description */ "Specify the iban of your account" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "remoteBIC", /* name */ 0, /* minnum */ 1, /* maxnum */ NULL, /* short option */ "rbic", /* long option */ "Specify the remote SWIFT BIC",/* short description */ "Specify the remote SWIFT BIC" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "remoteIBAN", /* name */ 1, /* minnum */ 1, /* maxnum */ NULL, /* short option */ "riban", /* long option */ "Specify the remote IBAN", /* short description */ "Specify the remote IBAN" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "value", /* name */ 1, /* minnum */ 1, /* maxnum */ "v", /* short option */ "value", /* long option */ "Specify the transfer amount", /* short description */ "Specify the transfer amount" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "name", /* name */ 0, /* minnum */ 1, /* maxnum */ NULL, /* short option */ "name", /* long option */ "Specify your name", /* short description */ "Specify your name" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "remoteName", /* name */ 1, /* minnum */ 2, /* maxnum */ NULL, /* short option */ "rname", /* long option */ "Specify the remote name", /* short description */ "Specify the remote name" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "purpose", /* name */ 1, /* minnum */ 6, /* maxnum */ "p", /* short option */ "purpose", /* long option */ "Specify the purpose", /* short description */ "Specify the purpose" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "endToEndReference", /* name */ 0, /* minnum */ 1, /* maxnum */ "E", /* short option */ "endtoendid", /* long option */ "Specify the SEPA End-to-end-reference", /* short description */ "Specify the SEPA End-to-end-reference" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "firstExecutionDate", /* name */ 0, /* minnum */ 1, /* maxnum */ NULL, /* short option */ "firstExecutionDate", /* long option */ "Set date of first execution (YYYYMMDD)", /* short description */ "Set date of first execution (YYYYMMDD)" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "nextExecutionDate", /* HKCDL and HKCDN only */ 0, /* minnum */ 1, /* maxnum */ NULL, /* short option */ "nextExecutionDate", /* long option */ "Set date of next execution (YYYYMMDD)", /* short description */ "Set this date given from the command request --sepaSto (delete and modify sto only)" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "lastExecutionDate", /* name */ 0, /* minnum */ 1, /* maxnum */ NULL, /* short option */ "lastExecutionDate", /* long option */ "Set date of last execution (YYYYMMDD)", /* short description */ "Set date of last execution (YYYYMMDD)" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Int, /* type */ "executionDay", /* name */ 1, /* minnum */ 1, /* maxnum */ NULL, /* short option */ "executionDay", /* long option */ "Set day of execution", /* short description */ "Set day of execution" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Int, /* type */ "executionCycle", /* name */ 1, /* minnum */ 1, /* maxnum */ NULL, /* short option */ "executionCycle", /* long option */ "Set execution cycle", /* short description */ "Set execution cycle" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "executionPeriod", /* name */ 1, /* minnum */ 1, /* maxnum */ NULL, /* short option */ "executionPeriod", /* long option */ "Set execution period (monthly / weekly)", /* short description */ "Set execution period (monthly / weekly)" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "fiId", /* HKCDL */ 0, /* minnum */ 1, /* maxnum */ NULL, /* short option */ "fiId", /* long option */ "Set the fiId (standing orders)", /* short description */ "Set the fiId (standing orders) - Auftragsidentifikation for HKCDL or HKCDN" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "executionDate", /* name */ 0, /* minnum */ 1, /* maxnum */ NULL, /* short option */ "execdate", /* long option */ "Specify the execution date (YYYYMMDD)", /* short */ "Specify the execution date (YYYYMMDD)" /* long */ }, { 0, /* flags */ GWEN_ArgsType_Int, /* type */ "noCheck", /* name */ 0, /* minnum */ 1, /* maxnum */ NULL, /* short option */ "noCheck", /* long option */ "Dont check transaction limits", /* short description */ "Dont check transaction limits" /* 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 NULL; } 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 NULL; } fprintf(stdout, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return NULL; } return db; } aqbanking-6.6.1/src/tools/aqbanking-cli/getdoc.c0000664000175000017500000002563714546575650016500 00000000000000/*************************************************************************** begin : Fri Mar 20 2021 copyright : (C) 2021 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals.h" #include #include #include #define GETDOC_FLAGS_MULTI 0x0001 static AB_DOCUMENT_LIST2 *_getMatchingDocuments(AB_IMEXPORTER_CONTEXT *ctx, const char *wantedDocId); static int _ensureDocData(AB_DOCUMENT *doc); static int _exportDocuments(const AB_DOCUMENT_LIST2 *docList, const char *dest, uint32_t flags); static int _writeDoc(const AB_DOCUMENT *doc, const char *dest, uint32_t flags); static GWEN_DB_NODE *_readCommandLine(GWEN_DB_NODE *dbArgs, int argc, char **argv); int getDoc(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; int rv; const char *ctxFile; uint32_t flags=0; AB_IMEXPORTER_CONTEXT *ctx=NULL; AB_DOCUMENT_LIST2 *docList2; const char *docId; const char *dest; /* parse command line arguments */ db=_readCommandLine(dbArgs, argc, argv); if (db==NULL) { /* error in command line */ return 1; } /* read command line arguments */ docId=GWEN_DB_GetCharValue(db, "docId", 0, 0); dest=GWEN_DB_GetCharValue(db, "destination", 0, 0); flags|=(GWEN_DB_GetIntValue(db, "multi", 0, 0)>0)?GETDOC_FLAGS_MULTI:0; /* init AqBanking */ 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 3; } docList2=_getMatchingDocuments(ctx, docId); if (docList2==NULL) { DBG_ERROR(NULL, "No documents to export"); AB_Document_List2_free(docList2); AB_ImExporterContext_free(ctx); return 4; } if (AB_Document_List2_GetSize(docList2)>1 && !(flags & GETDOC_FLAGS_MULTI)) { DBG_ERROR(NULL, "Ambigous arguments: Multiple matching documents but no -m flag given"); AB_Document_List2_free(docList2); return 4; } rv=_exportDocuments(docList2, dest, flags); if (rv<0) { DBG_INFO(NULL, "Error exporting documents"); AB_Document_List2_free(docList2); AB_ImExporterContext_free(ctx); return 4; } AB_Document_List2_free(docList2); AB_ImExporterContext_free(ctx); /* deinit */ rv=AB_Banking_Fini(ab); if (rv) { fprintf(stderr, "ERROR: Error on deinit (%d)\n", rv); return 5; } return 0; } AB_DOCUMENT_LIST2 *_getMatchingDocuments(AB_IMEXPORTER_CONTEXT *ctx, const char *wantedDocId) { AB_DOCUMENT_LIST2 *docList2; AB_IMEXPORTER_ACCOUNTINFO *iea; docList2=AB_Document_List2_new(); /* copy context, but only keep wanted accounts and transactions */ iea=AB_ImExporterContext_GetFirstAccountInfo(ctx); while (iea) { AB_DOCUMENT_LIST *docList; docList=AB_ImExporterAccountInfo_GetEStatementList(iea); if (docList) { AB_DOCUMENT *doc; doc=AB_Document_List_First(docList); while (doc) { if (wantedDocId) { const char *docId; docId=AB_Document_GetId(doc); if (docId && *docId) { if (GWEN_Text_ComparePattern(docId, wantedDocId, 0)!=-1) AB_Document_List2_PushBack(docList2, doc); } } else AB_Document_List2_PushBack(docList2, doc); doc=AB_Document_List_Next(doc); } } iea=AB_ImExporterAccountInfo_List_Next(iea); } /* while */ if (AB_Document_List2_GetSize(docList2)==0) { AB_Document_List2_free(docList2); return NULL; } return docList2; } int _exportDocuments(const AB_DOCUMENT_LIST2 *docList, const char *dest, uint32_t flags) { AB_DOCUMENT_LIST2_ITERATOR *it; it=AB_Document_List2_First(docList); if (it) { AB_DOCUMENT *doc; doc=AB_Document_List2Iterator_Data(it); while (doc) { const char *docId; int rv; docId=AB_Document_GetId(doc); rv=_ensureDocData(doc); if (rv<0) { DBG_INFO(NULL, "Error ensuring data for document \"%s\"", docId?docId:""); return rv; } rv=_writeDoc(doc, dest, flags); if (rv<0) { DBG_INFO(NULL, "here (%d)", rv); return rv; } doc=AB_Document_List2Iterator_Next(it); } /* while */ AB_Document_List2Iterator_free(it); } return 0; } int _writeDoc(const AB_DOCUMENT *doc, const char *dest, uint32_t flags) { const char *docId; int rv; docId=AB_Document_GetId(doc); if (flags & GETDOC_FLAGS_MULTI) { GWEN_BUFFER *pathBuffer; /* dest is a folder */ if (!(docId && *docId)) { DBG_ERROR(NULL, "No id in document, SNH!"); return GWEN_ERROR_BAD_DATA; } pathBuffer=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(pathBuffer, dest); GWEN_Buffer_AppendString(pathBuffer, GWEN_DIR_SEPARATOR_S); GWEN_Buffer_AppendString(pathBuffer, docId); GWEN_Buffer_AppendString(pathBuffer, ".pdf"); rv=GWEN_SyncIo_Helper_WriteFile(GWEN_Buffer_GetStart(pathBuffer), AB_Document_GetDataPtr(doc), AB_Document_GetDataLen(doc)); if (rv<0) { DBG_INFO(NULL, "Error writing data for document \"%s\" to \"%s\"", docId?docId:"", GWEN_Buffer_GetStart(pathBuffer)); GWEN_Buffer_free(pathBuffer); return rv; } return 0; } else { rv=GWEN_SyncIo_Helper_WriteFile(dest, AB_Document_GetDataPtr(doc), AB_Document_GetDataLen(doc)); if (rv<0) { DBG_INFO(NULL, "Error writing data for document \"%s\" to \"%s\"", docId?docId:"", dest); return rv; } return 0; } } int _ensureDocData(AB_DOCUMENT *doc) { const uint8_t *ptrData; uint32_t lenData; ptrData=AB_Document_GetDataPtr(doc); lenData=AB_Document_GetDataLen(doc); if (!(ptrData && lenData)) { const char *filePath; filePath=AB_Document_GetFilePath(doc); if (filePath && *filePath) { GWEN_BUFFER *dbuf; int rv; dbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_SyncIo_Helper_ReadFile(filePath, dbuf); if (rv<0) { DBG_ERROR(NULL, "Could not read source file \"%s\" (%d)", filePath, rv); GWEN_Buffer_free(dbuf); return rv; } AB_Document_SetData(doc, (const uint8_t *) GWEN_Buffer_GetStart(dbuf), GWEN_Buffer_GetUsedBytes(dbuf)); GWEN_Buffer_free(dbuf); return 0; } } return 0; } /* parse command line */ GWEN_DB_NODE *_readCommandLine(GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; int rv; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "docId", /* name */ 0, /* minnum */ 1, /* maxnum */ "d", /* short option */ "docid", /* long option */ "Specify the document id", /* short description */ "Specify the document id" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "destination", /* name */ 1, /* minnum */ 1, /* maxnum */ "o", /* short option */ "destination", /* long option */ "Specify destination", /* short description */ "Specify destination (folder if -m flag given, specific filename otherwise)" /* long description */ }, { 0, /* flags */ GWEN_ArgsType_Int, /* type */ "multi", /* name */ 0, /* minnum */ 1, /* maxnum */ "m", /* short option */ "multi", /* long option */ "Export multiple documents", /* short description */ "Export multiple documents" /* 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_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 NULL; } 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 NULL; } GWEN_Buffer_AppendString(ubuf, "\n"); GWEN_Buffer_AppendString(ubuf, "\n"); GWEN_Buffer_AppendString(ubuf, "There are two ways to use this tool:\n"); GWEN_Buffer_AppendString(ubuf, "1) Export a specific document\n"); GWEN_Buffer_AppendString(ubuf, " aqbanking-cli getdoc -d DOCID -o OUTFILE.PDF\n"); GWEN_Buffer_AppendString(ubuf, "2) Export multiple documents:\n"); GWEN_Buffer_AppendString(ubuf, " aqbanking-cli getdoc -m -o OUTFOLDER\n"); GWEN_Buffer_AppendString(ubuf, "In this case for every document in the context file a new\n"); GWEN_Buffer_AppendString(ubuf, "is created in the OUTFOLDER folder, each file has the name of the document\n"); GWEN_Buffer_AppendString(ubuf, "with '.pdf' appended.\n"); fprintf(stdout, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return NULL; } return db; } aqbanking-6.6.1/src/tools/aqbanking-cli/aqhbci-tool.c0000664000175000017500000002151714043610745017411 00000000000000/*************************************************************************** begin : Tue May 03 2005 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include #include #include #include #include #include #include "globals.h" static int doControl(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv); int main(int argc, char **argv) { GWEN_DB_NODE *db; int rv; AB_BANKING *ab; GWEN_GUI *gui; int nonInteractive=0; int acceptValidCerts=0; const char *pinFile; const char *cfgDir; const char *s; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "cfgdir", /* name */ 0, /* minnum */ 1, /* maxnum */ "D", /* short option */ "cfgdir", /* long option */ I18S("Specify the configuration folder"), I18S("Specify the configuration folder") }, { 0, /* flags */ GWEN_ArgsType_Int, /* type */ "nonInteractive", /* name */ 0, /* minnum */ 1, /* maxnum */ "n", /* short option */ "noninteractive", /* long option */ "Select non-interactive mode",/* short description */ "Select non-interactive mode.\n" /* long description */ "This automatically returns a confirmative answer to any non-critical\n" "message." }, { 0, /* flags */ GWEN_ArgsType_Int, /* type */ "acceptValidCerts", /* name */ 0, /* minnum */ 1, /* maxnum */ "A", /* short option */ "acceptvalidcerts", /* long option */ "Automatically accept all valid TLS certificate", "Automatically accept all valid TLS certificate" }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "charset", /* name */ 0, /* minnum */ 1, /* maxnum */ 0, /* short option */ "charset", /* long option */ "Specify the output character set", /* short description */ "Specify the output character set" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "pinfile", /* name */ 0, /* minnum */ 1, /* maxnum */ "P", /* short option */ "pinfile", /* long option */ "Specify the PIN file", /* short description */ "Specify the PIN file" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "opticalTan", /* name */ 0, /* minnum */ 1, /* maxnum */ NULL, /* short option */ "opticaltan", /* long option */ "Tool for optical TAN challenges", /* short description */ "Specify an external tool to display optical TAN challenges" /* 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", I18S("Show this help screen. For help on commands, " "run aqbanking-cli --help."), I18S("Show this help screen. For help on commands, run aqbanking-cli --help.") } }; rv=GWEN_Init(); if (rv) { fprintf(stderr, "ERROR: Unable to init Gwen.\n"); exit(2); } GWEN_Logger_Open(0, "aqhbci-tool", 0, GWEN_LoggerType_Console, GWEN_LoggerFacility_User); GWEN_Logger_SetLevel(0, GWEN_LoggerLevel_Warning); rv=GWEN_I18N_BindTextDomain_Dir(PACKAGE, LOCALEDIR); if (rv) { DBG_ERROR(0, "Could not bind textdomain (%d)", rv); } else { rv=GWEN_I18N_BindTextDomain_Codeset(PACKAGE, "UTF-8"); if (rv) { DBG_ERROR(0, "Could not set codeset (%d)", rv); } } db=GWEN_DB_Group_new("arguments"); rv=GWEN_Args_Check(argc, argv, 1, GWEN_ARGS_MODE_ALLOW_FREEPARAM | GWEN_ARGS_MODE_STOP_AT_FREEPARAM, args, db); if (rv==GWEN_ARGS_RESULT_ERROR) { fprintf(stderr, "ERROR: Could not parse arguments main\n"); GWEN_DB_Group_free(db); return 1; } else if (rv==GWEN_ARGS_RESULT_HELP) { GWEN_BUFFER *ubuf; ubuf=GWEN_Buffer_new(0, 1024, 0, 1); GWEN_Buffer_AppendString(ubuf, I18N("This is version ")); GWEN_Buffer_AppendString(ubuf, AQBANKING_VERSION_STRING "\n"); GWEN_Buffer_AppendString(ubuf, I18N("Usage: ")); GWEN_Buffer_AppendString(ubuf, argv[0]); GWEN_Buffer_AppendString(ubuf, I18N(" [GLOBAL OPTIONS] COMMAND " "[LOCAL OPTIONS]\n")); GWEN_Buffer_AppendString(ubuf, I18N("\nGlobal Options:\n")); if (GWEN_Args_Usage(args, ubuf, GWEN_ArgsOutType_Txt)) { fprintf(stderr, "ERROR: Could not create help string\n"); GWEN_DB_Group_free(db); return 1; } GWEN_Buffer_AppendString(ubuf, "\n"); fprintf(stdout, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); argc=0; /* only show help */ } else if (rv>1) { argc-=rv-1; argv+=rv-1; } else { /* no command */ argc=0; } nonInteractive=GWEN_DB_GetIntValue(db, "nonInteractive", 0, 0); acceptValidCerts=GWEN_DB_GetIntValue(db, "acceptValidCerts", 0, 0); cfgDir=GWEN_DB_GetCharValue(db, "cfgdir", 0, 0); gui=GWEN_Gui_CGui_new(); s=GWEN_DB_GetCharValue(db, "charset", 0, NULL); if (s && *s) GWEN_Gui_SetCharSet(gui, s); if (nonInteractive) GWEN_Gui_AddFlags(gui, GWEN_GUI_FLAGS_NONINTERACTIVE); else GWEN_Gui_SubFlags(gui, GWEN_GUI_FLAGS_NONINTERACTIVE); if (acceptValidCerts) GWEN_Gui_AddFlags(gui, GWEN_GUI_FLAGS_ACCEPTVALIDCERTS); else GWEN_Gui_SubFlags(gui, GWEN_GUI_FLAGS_ACCEPTVALIDCERTS); pinFile=GWEN_DB_GetCharValue(db, "pinFile", 0, NULL); if (pinFile) { GWEN_DB_NODE *dbPins; dbPins=GWEN_DB_Group_new("pins"); if (GWEN_DB_ReadFile(dbPins, pinFile, GWEN_DB_FLAGS_DEFAULT | GWEN_PATH_FLAGS_CREATE_GROUP)) { fprintf(stderr, "Error reading pinfile \"%s\"\n", pinFile); GWEN_DB_Group_free(dbPins); GWEN_DB_Group_free(db); return 2; } GWEN_Gui_SetPasswordDb(gui, dbPins, 1); } GWEN_Gui_SetGui(gui); ab=AB_Banking_new("aqbanking-cli", cfgDir, 0); AB_Banking_RuntimeConfig_SetCharValue(ab, "fintsRegistrationKey", "32F8A67FE34B57AB8D7E4FE70"); AB_Banking_RuntimeConfig_SetCharValue(ab, "fintsApplicationVersionString", AQBANKING_FINTS_VERSION_STRING); AB_Gui_Extend(gui, ab); s = GWEN_DB_GetCharValue(db, "opticalTan", 0, NULL); if ((NULL != s) && ('\0' != s [0]) && (0 != AB_Gui_SetCliCallbackForOpticalTan(gui, s))) { fprintf(stderr, "Error registering \"%s\".\n", s); GWEN_DB_Group_free(db); return 2; } rv=doControl(ab, db, argc, argv); AB_Gui_Unextend(gui); AB_Banking_free(ab); GWEN_Gui_SetGui(NULL); GWEN_Gui_free(gui); GWEN_DB_Group_free(db); return rv; } int doControl(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv) { int rv; rv=AB_Banking_Init(ab); if (rv) { DBG_ERROR(0, "Error on init (%d)", rv); return 2; } rv=AB_Banking_ProviderControl(ab, "aqhbci", argc, argv); if (rv!=0) { DBG_ERROR(0, "Error calling control function (%d)", rv); AB_Banking_Fini(ab); return 4; } rv=AB_Banking_Fini(ab); if (rv) { fprintf(stderr, "ERROR: Error on deinit (%d)\n", rv); return 5; } return 0; } aqbanking-6.6.1/src/tools/aqbanking-cli/main.c0000664000175000017500000003542614576404066016147 00000000000000/*************************************************************************** begin : Tue May 03 2005 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include #include #include #include #include #include #include "globals.h" static void cmdAddHelpStr(GWEN_BUFFER *ubuf, const char *cmdname, const char *cmdhelp) { // Indentation of the command: one space GWEN_Buffer_AppendString(ubuf, " "); GWEN_Buffer_AppendString(ubuf, cmdname); GWEN_Buffer_AppendString(ubuf, ":\n"); // Indentation of the help: three spaces GWEN_Buffer_AppendString(ubuf, " "); GWEN_Buffer_AppendString(ubuf, cmdhelp); GWEN_Buffer_AppendString(ubuf, "\n"); } int main(int argc, char **argv) { GWEN_DB_NODE *db; const char *cmd; int rv; AB_BANKING *ab; GWEN_GUI *gui; const char *ctrlBackend=NULL; int nonInteractive=0; int acceptValidCerts=0; const char *pinFile; const char *cfgDir; const char *s; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "cfgdir", /* name */ 0, /* minnum */ 1, /* maxnum */ "D", /* short option */ "cfgdir", /* long option */ I18S("Specify the configuration folder"), I18S("Specify the configuration folder") }, { 0, /* flags */ GWEN_ArgsType_Int, /* type */ "nonInteractive", /* name */ 0, /* minnum */ 1, /* maxnum */ "n", /* short option */ "noninteractive", /* long option */ "Select non-interactive mode",/* short description */ "Select non-interactive mode.\n" /* long description */ "This automatically returns a confirmative answer to any non-critical\n" "message." }, { 0, /* flags */ GWEN_ArgsType_Int, /* type */ "acceptValidCerts", /* name */ 0, /* minnum */ 1, /* maxnum */ "A", /* short option */ "acceptvalidcerts", /* long option */ "Automatically accept all valid TLS certificate", "Automatically accept all valid TLS certificate" }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "charset", /* name */ 0, /* minnum */ 1, /* maxnum */ 0, /* short option */ "charset", /* long option */ "Specify the output character set", /* short description */ "Specify the output character set" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "pinfile", /* name */ 0, /* minnum */ 1, /* maxnum */ "P", /* short option */ "pinfile", /* long option */ "Specify the PIN file", /* short description */ "Specify the PIN file" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "opticalTan", /* name */ 0, /* minnum */ 1, /* maxnum */ NULL, /* short option */ "opticaltan", /* long option */ "Tool for optical TAN challenges", /* short description */ "Specify an external tool to display optical TAN challenges" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "control", /* name */ 0, /* minnum */ 1, /* maxnum */ 0, /* short option */ "control", /* long option */ "backend for control function", /* short description */ "Call the CONTROL function of the given backend" /* 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", I18S("Show this help screen. For help on commands, " "run aqbanking-cli --help."), I18S("Show this help screen. For help on commands, run aqbanking-cli --help.") } }; rv=GWEN_Init(); if (rv) { fprintf(stderr, "ERROR: Unable to init Gwen.\n"); exit(2); } GWEN_Logger_Open(0, "aqbanking-cli", 0, GWEN_LoggerType_Console, GWEN_LoggerFacility_User); GWEN_Logger_SetLevel(0, GWEN_LoggerLevel_Warning); rv=GWEN_I18N_BindTextDomain_Dir(PACKAGE, LOCALEDIR); if (rv) { DBG_ERROR(0, "Could not bind textdomain (%d)", rv); } else { rv=GWEN_I18N_BindTextDomain_Codeset(PACKAGE, "UTF-8"); if (rv) { DBG_ERROR(0, "Could not set codeset (%d)", rv); } } db=GWEN_DB_Group_new("arguments"); rv=GWEN_Args_Check(argc, argv, 1, GWEN_ARGS_MODE_ALLOW_FREEPARAM | GWEN_ARGS_MODE_STOP_AT_FREEPARAM, args, db); if (rv==GWEN_ARGS_RESULT_ERROR) { fprintf(stderr, "ERROR: Could not parse arguments main\n"); GWEN_DB_Group_free(db); return 1; } else if (rv==GWEN_ARGS_RESULT_HELP) { GWEN_BUFFER *ubuf; ubuf=GWEN_Buffer_new(0, 1024, 0, 1); GWEN_Buffer_AppendString(ubuf, I18N("This is version ")); GWEN_Buffer_AppendString(ubuf, AQBANKING_VERSION_STRING "\n"); GWEN_Buffer_AppendString(ubuf, I18N("Usage: ")); GWEN_Buffer_AppendString(ubuf, argv[0]); GWEN_Buffer_AppendString(ubuf, I18N(" [GLOBAL OPTIONS] COMMAND " "[LOCAL OPTIONS]\n")); GWEN_Buffer_AppendString(ubuf, I18N("\nGlobal Options:\n")); if (GWEN_Args_Usage(args, ubuf, GWEN_ArgsOutType_Txt)) { fprintf(stderr, "ERROR: Could not create help string\n"); GWEN_DB_Group_free(db); return 1; } GWEN_Buffer_AppendString(ubuf, I18N("\nCommands:\n")); cmdAddHelpStr(ubuf, "listaccs", I18N("Prints the list of accounts")); cmdAddHelpStr(ubuf, "listbal", I18N("Export balances from a context file.")); cmdAddHelpStr(ubuf, "listtrans", I18N("List transactions or transfers from a context file.")); cmdAddHelpStr(ubuf, "listtransfers", I18N("Export transactions from a context file which match certain status.")); cmdAddHelpStr(ubuf, "request", I18N("Requests transactions, balances, standing orders etc.")); cmdAddHelpStr(ubuf, "chkiban", I18N("Check an IBAN")); cmdAddHelpStr(ubuf, "import", I18N("Import a file into an import context file")); cmdAddHelpStr(ubuf, "export", I18N("Export an import context file into a file (previously \"listtrans\")")); cmdAddHelpStr(ubuf, "sepatransfer", I18N("Issue a single SEPA transfer (data from command line)")); cmdAddHelpStr(ubuf, "sepainternaltransfer", I18N("Issue a single SEPA transfer (data from command line)")); cmdAddHelpStr(ubuf, "sepatransfers", I18N("Issue a number of SEPA transfers (data from a file)")); cmdAddHelpStr(ubuf, "sepadebitnote", I18N("Issue a single SEPA debit note (data from command line)")); cmdAddHelpStr(ubuf, "sepaflashdebitnote", I18N("Issue a single flash SEPA debit note COR1 (data from command line)")); cmdAddHelpStr(ubuf, "sepadebitnotes", I18N("Issue a number of SEPA debit notes (data from a file)")); cmdAddHelpStr(ubuf, "addtrans", I18N("Add a transfer to an existing import context file")); cmdAddHelpStr(ubuf, "addsepadebitnote", I18N("Add a SEPA debit note to an existing import context file")); cmdAddHelpStr(ubuf, "addflashsepadebitnote", I18N("Add a flash SEPA debit note to an existing import context file")); cmdAddHelpStr(ubuf, "sepasto", I18N("Manage SEPA standing orders")); cmdAddHelpStr(ubuf, "fillgaps", I18N("Fill gaps in an import context file from configuration settings")); cmdAddHelpStr(ubuf, "listprofiles", I18N("Print existing profiles")); cmdAddHelpStr(ubuf, "accountcmds", I18N("Print available jobs for given (or all) accounts")); cmdAddHelpStr(ubuf, "versions", I18N("Print the program and library versions")); GWEN_Buffer_AppendString(ubuf, "\n"); fprintf(stdout, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); GWEN_DB_Group_free(db); return 0; } if (rv) { argc-=rv-1; argv+=rv-1; } nonInteractive=GWEN_DB_GetIntValue(db, "nonInteractive", 0, 0); acceptValidCerts=GWEN_DB_GetIntValue(db, "acceptValidCerts", 0, 0); cfgDir=GWEN_DB_GetCharValue(db, "cfgdir", 0, 0); ctrlBackend=GWEN_DB_GetCharValue(db, "control", 0, 0); gui=GWEN_Gui_CGui_new(); s=GWEN_DB_GetCharValue(db, "charset", 0, NULL); if (s && *s) GWEN_Gui_SetCharSet(gui, s); if (nonInteractive) GWEN_Gui_AddFlags(gui, GWEN_GUI_FLAGS_NONINTERACTIVE); else GWEN_Gui_SubFlags(gui, GWEN_GUI_FLAGS_NONINTERACTIVE); if (acceptValidCerts) GWEN_Gui_AddFlags(gui, GWEN_GUI_FLAGS_ACCEPTVALIDCERTS); else GWEN_Gui_SubFlags(gui, GWEN_GUI_FLAGS_ACCEPTVALIDCERTS); pinFile=GWEN_DB_GetCharValue(db, "pinFile", 0, NULL); if (pinFile) { GWEN_DB_NODE *dbPins; dbPins=GWEN_DB_Group_new("pins"); if (GWEN_DB_ReadFile(dbPins, pinFile, GWEN_DB_FLAGS_DEFAULT | GWEN_PATH_FLAGS_CREATE_GROUP)) { fprintf(stderr, "Error reading pinfile \"%s\"\n", pinFile); GWEN_DB_Group_free(dbPins); GWEN_DB_Group_free(db); return 2; } GWEN_Gui_SetPasswordDb(gui, dbPins, 1); } GWEN_Gui_SetGui(gui); ab=AB_Banking_new("aqbanking-cli", cfgDir, 0); AB_Banking_RuntimeConfig_SetCharValue(ab, "fintsRegistrationKey", "32F8A67FE34B57AB8D7E4FE70"); AB_Banking_RuntimeConfig_SetCharValue(ab, "fintsApplicationVersionString", AQBANKING_FINTS_VERSION_STRING); AB_Gui_Extend(gui, ab); s = GWEN_DB_GetCharValue(db, "opticalTan", 0, NULL); if ((NULL != s) && ('\0' != s [0]) && (0 != AB_Gui_SetCliCallbackForOpticalTan(gui, s))) { fprintf(stderr, "Error registering \"%s\".\n", s); GWEN_DB_Group_free(db); return 2; } if (ctrlBackend && *ctrlBackend) { rv=control(ab, ctrlBackend, db, argc, argv); } else { cmd=GWEN_DB_GetCharValue(db, "params", 0, 0); if (!cmd) { fprintf(stderr, "ERROR: Command needed.\n"); GWEN_DB_Group_free(db); return 1; } if (strcasecmp(cmd, "listaccs")==0 || strcasecmp(cmd, "listaccounts")==0) { rv=listAccs(ab, db, argc, argv); } else if (strcasecmp(cmd, "listbal")==0) { rv=listBal(ab, db, argc, argv); } else if (strcasecmp(cmd, "listtrans")==0) { rv=listTrans(ab, db, argc, argv); } else if (strcasecmp(cmd, "listtransfers")==0) { fprintf(stderr, "ERROR: Please use the commands \"listtrans\" or \"export\" and specify the transaction type via \"-tt TYPE\"\n"); GWEN_DB_Group_free(db); return 1; } else if (strcasecmp(cmd, "listdoc")==0) { rv=listDoc(ab, db, argc, argv); } else if (strcasecmp(cmd, "getdoc")==0) { rv=getDoc(ab, db, argc, argv); } else if (strcasecmp(cmd, "request")==0) { rv=request(ab, db, argc, argv); } else if (strcasecmp(cmd, "chkiban")==0) { rv=chkIban(ab, db, argc, argv); } else if (strcasecmp(cmd, "import")==0) { rv=import(ab, db, argc, argv); } else if (strcasecmp(cmd, "export")==0) { rv=exportCtx(ab, db, argc, argv); } else if (strcasecmp(cmd, "sepatransfer")==0) { rv=sepaTransfer(ab, db, argc, argv); } else if (strcasecmp(cmd, "sepainternaltransfer")==0) { rv=sepaInternalTransfer(ab, db, argc, argv); } else if (strcasecmp(cmd, "sepatransfers")==0) { rv=sepaMultiJobs(ab, db, argc, argv, AQBANKING_TOOL_SEPA_TRANSFERS); } else if (strcasecmp(cmd, "sepadebitnote")==0) { rv=sepaDebitNote(ab, db, argc, argv, 0); } else if (strcasecmp(cmd, "sepaFlashDebitNote")==0) { rv=sepaDebitNote(ab, db, argc, argv, 1); } else if (strcasecmp(cmd, "sepadebitnotes")==0) { rv=sepaMultiJobs(ab, db, argc, argv, AQBANKING_TOOL_SEPA_DEBITNOTES); } else if (strcasecmp(cmd, "addtrans")==0) { rv=addTransaction(ab, db, argc, argv); } else if (strcasecmp(cmd, "addsepadebitnote")==0) { rv=addSepaDebitNote(ab, db, argc, argv, 0); } else if (strcasecmp(cmd, "addFlashSepadebitnote")==0) { rv=addSepaDebitNote(ab, db, argc, argv, 1); } else if (strcasecmp(cmd, "sepasto")==0) { rv=sepaRecurTransfer(ab, db, argc, argv); } else if (strcasecmp(cmd, "fillgaps")==0) { rv=fillGaps(ab, db, argc, argv); } else if (strcasecmp(cmd, "listprofiles")==0) { rv=listProfiles(ab, db, argc, argv); } else if (strcasecmp(cmd, "accountcmds")==0) { rv=showAccountCommands(ab, db, argc, argv); } else if (strcasecmp(cmd, "versions")==0) { rv=versions(ab, db, argc, argv); } else { fprintf(stderr, "ERROR: Unknown command \"%s\".\n", cmd); rv=1; } } AB_Banking_free(ab); GWEN_Gui_SetGui(NULL); GWEN_Gui_free(gui); GWEN_Fini(); GWEN_DB_Group_free(db); return rv; } aqbanking-6.6.1/src/tools/aqbanking-cli/versions.c0000664000175000017500000000235214043610745017053 00000000000000/*************************************************************************** begin : Tue May 03 2005 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals.h" #include #include int versions(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv) { int vmajor, vminor, vpatchLevel, vbuild; fprintf(stdout, "Versions:\n"); fprintf(stdout, " AqBanking-CLI: %s\n", AQBANKING_CLI_VERSION_STRING); GWEN_Version(&vmajor, &vminor, &vpatchLevel, &vbuild); fprintf(stdout, " Gwenhywfar : %d.%d.%d.%d\n", vmajor, vminor, vpatchLevel, vbuild); AB_Banking_GetVersion(&vmajor, &vminor, &vpatchLevel, &vbuild); fprintf(stdout, " AqBanking : %d.%d.%d.%d\n", vmajor, vminor, vpatchLevel, vbuild); return 0; } aqbanking-6.6.1/src/tools/aqbanking-cli/addsepadebitnote.c0000664000175000017500000003651014043610745020505 00000000000000/*************************************************************************** begin : Tue May 03 2005 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif /* tool includes */ #include "globals.h" /* aqbanking includes */ #include /* gwenhywfar includes */ #include /* forward declarations */ static GWEN_DB_NODE *_readCommandLine(GWEN_DB_NODE *dbArgs, int argc, char **argv); int addSepaDebitNote(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv, int use_flash_debitnote) { GWEN_DB_NODE *db; AB_ACCOUNT_SPEC *as; int rv; const char *ctxFile; AB_TRANSACTION *t; int noCheck; /* parse command line arguments */ db=_readCommandLine(dbArgs, argc, argv); if (db==NULL) { /* error in command line */ return 1; } /* read arguments */ noCheck=GWEN_DB_GetIntValue(db, "noCheck", 0, 0); ctxFile=GWEN_DB_GetCharValue(db, "ctxfile", 0, 0); /* init AqBanking */ rv=AB_Banking_Init(ab); if (rv) { DBG_ERROR(0, "Error on init (%d)", rv); return 2; } /* get account to work with */ as=getSingleSelectedAccount(ab, db); if (as==NULL) { AB_Banking_Fini(ab); return 2; } /* create transaction from arguments */ t=mkSepaDebitNote(db, use_flash_debitnote?AB_Transaction_CommandSepaFlashDebitNote:AB_Transaction_CommandSepaDebitNote); if (t==NULL) { DBG_ERROR(0, "Could not create SEPA transaction from arguments"); AB_Transaction_free(t); AB_AccountSpec_free(as); AB_Banking_Fini(ab); return 2; } AB_Transaction_SetType(t, AB_Transaction_TypeDebitNote); AB_Transaction_SetUniqueAccountId(t, AB_AccountSpec_GetUniqueId(as)); /* set local account info from selected AB_ACCOUNT_SPEC */ AB_Banking_FillTransactionFromAccountSpec(t, as); /* some checks */ rv=checkTransactionIbans(t); if (rv!=0) { AB_Transaction_free(t); AB_AccountSpec_free(as); AB_Banking_Fini(ab); return rv; } /* probably check against transaction limits */ if (!noCheck) { rv=checkTransactionLimits(t, AB_AccountSpec_GetTransactionLimitsForCommand(as, AB_Transaction_GetCommand(t)), AQBANKING_TOOL_LIMITFLAGS_PURPOSE | AQBANKING_TOOL_LIMITFLAGS_NAMES | AQBANKING_TOOL_LIMITFLAGS_SEQUENCE | AQBANKING_TOOL_LIMITFLAGS_DATE | AQBANKING_TOOL_LIMITFLAGS_SEPA); if (rv!=0) { AB_Transaction_free(t); AB_AccountSpec_free(as); AB_Banking_Fini(ab); return rv; } } AB_AccountSpec_free(as); /* add to context file */ rv=addTransactionToContextFile(t, ctxFile); if (rv!=0) { DBG_ERROR(0, "Error adding to context (%d)", rv); AB_Transaction_free(t); AB_Banking_Fini(ab); return 4; } /* that's it */ rv=AB_Banking_Fini(ab); if (rv<0) { fprintf(stderr, "ERROR: Error on deinit (%d)\n", rv); return 5; } return 0; } /* parse command line */ GWEN_DB_NODE *_readCommandLine(GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; int rv; const GWEN_ARGS args[]= { { 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_Int, /* type */ "uniqueAccountId", /* name */ 0, /* minnum */ 1, /* maxnum */ NULL, /* short option */ "aid", /* long option */ "Specify the unique account id", /* short description */ "Specify the unique account id" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "backendName", /* name */ 0, /* minnum */ 1, /* maxnum */ NULL, /* short option */ "backend", /* long option */ "Specify the name of the backend for your account", /* short description */ "Specify the name of the backend for your account" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "country", /* name */ 0, /* minnum */ 1, /* maxnum */ NULL, /* short option */ "country", /* long option */ "Specify the country for your account (e.g. \"de\")", /* short description */ "Specify the country for your account (e.g. \"de\")" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "bankId", /* name */ 0, /* minnum */ 1, /* maxnum */ "b", /* short option */ "bank", /* long option */ "overwrite the bank code", /* short description */ "overwrite 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 */ "overwrite the account number", /* short description */ "overwrite the account number" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "subAccountId", /* name */ 0, /* minnum */ 1, /* maxnum */ "aa", /* short option */ "subaccount", /* long option */ "Specify the sub account id (Unterkontomerkmal)", /* short description */ "Specify the sub account id (Unterkontomerkmal)" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "accountType", /* name */ 0, /* minnum */ 1, /* maxnum */ "at", /* short option */ "accounttype", /* long option */ "Specify the account type", /* short description */ "Specify the account type" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "iban", /* name */ 0, /* minnum */ 1, /* maxnum */ "A", /* short option */ "iban", /* long option */ "Specify the iban of your account", /* short description */ "Specify the iban of your account" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "remoteBIC", /* name */ 0, /* minnum */ 1, /* maxnum */ 0, /* short option */ "rbic", /* long option */ "Specify the remote SWIFT BIC",/* short description */ "Specify the remote SWIFT BIC" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "remoteIBAN", /* name */ 1, /* minnum */ 1, /* maxnum */ 0, /* short option */ "riban", /* long option */ "Specify the remote IBAN", /* short description */ "Specify the remote IBAN" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "value", /* name */ 1, /* minnum */ 1, /* maxnum */ "v", /* short option */ "value", /* long option */ "Specify the transfer amount", /* short description */ "Specify the transfer amount" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "name", /* name */ 0, /* minnum */ 1, /* maxnum */ 0, /* short option */ "name", /* long option */ "Specify your name", /* short description */ "Specify your name" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "remoteName", /* name */ 1, /* minnum */ 2, /* maxnum */ 0, /* short option */ "rname", /* long option */ "Specify the remote name", /* short description */ "Specify the remote name" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "purpose", /* name */ 1, /* minnum */ 6, /* maxnum */ "p", /* short option */ "purpose", /* long option */ "Specify the purpose", /* short description */ "Specify the purpose" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "endToEndReference", /* name */ 0, /* minnum */ 1, /* maxnum */ "E", /* short option */ "endtoendid", /* long option */ "Specify the SEPA End-to-end-reference", /* short description */ "Specify the SEPA End-to-end-reference" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "executionDate", /* name */ 0, /* minnum */ 1, /* maxnum */ 0, /* short option */ "execdate", /* long option */ "Specify the execution date (YYYYMMDD)", /* short */ "Specify the execution date (YYYYMMDD)" /* long */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "creditorSchemeId", /* name */ 1, /* minnum */ 1, /* maxnum */ 0, /* short option */ "creditorSchemeId", /* long option */ "Specify the creditor scheme id (\"Glaeubiger-ID\")", /* short description */ "Specify the creditor scheme id (\"Glaeubiger-ID\")" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "mandateId", /* name */ 1, /* minnum */ 1, /* maxnum */ 0, /* short option */ "mandateId", /* long option */ "Specify the mandate id", /* short description */ "Specify the mandate id" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "mandateDate", /* name */ 0, /* minnum */ 1, /* maxnum */ 0, /* short option */ "mandateDate", /* long option */ "Specify the date when the mandate was issued", /* short description */ "Specify the date when the mandate was issued" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "sequenceType", /* name */ 0, /* minnum */ 1, /* maxnum */ 0, /* short option */ "sequenceType", /* long option */ "Specify the sequence type (once, first, following)", /* short description */ "Specify the sequence type (once, first, following)" /* long description */ }, { 0, /* flags */ GWEN_ArgsType_Int, /* type */ "noCheck", /* name */ 0, /* minnum */ 1, /* maxnum */ NULL, /* short option */ "noCheck", /* long option */ "Dont check transaction limits", /* short description */ "Dont check transaction limits" }, { 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 NULL; } 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 NULL; } fprintf(stdout, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return NULL; } return db; } aqbanking-6.6.1/src/tools/aqbanking-cli/util.c0000664000175000017500000010771414546575650016205 00000000000000/*************************************************************************** begin : Tue May 03 2005 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals.h" #include #include #include #include static int GWENHYWFAR_CB _replaceVarsCb(void *cbPtr, const char *name, int index, int maxLen, GWEN_BUFFER *dstBuf); /* ======================================================================================================================== * readContext * ======================================================================================================================== */ int readContext(const char *ctxFile, AB_IMEXPORTER_CONTEXT **pCtx, int mustExist) { AB_IMEXPORTER_CONTEXT *ctx; GWEN_SYNCIO *sio; GWEN_DB_NODE *dbCtx; int rv; if (ctxFile==NULL) { sio=GWEN_SyncIo_File_fromStdin(); GWEN_SyncIo_AddFlags(sio, GWEN_SYNCIO_FLAGS_DONTCLOSE | GWEN_SYNCIO_FILE_FLAGS_READ); } else { sio=GWEN_SyncIo_File_new(ctxFile, GWEN_SyncIo_File_CreationMode_OpenExisting); GWEN_SyncIo_AddFlags(sio, GWEN_SYNCIO_FILE_FLAGS_READ); rv=GWEN_SyncIo_Connect(sio); if (rv<0) { if (!mustExist) { ctx=AB_ImExporterContext_new(); *pCtx=ctx; GWEN_SyncIo_free(sio); return 0; } GWEN_SyncIo_free(sio); return 4; } } /* actually read */ dbCtx=GWEN_DB_Group_new("context"); rv=GWEN_DB_ReadFromIo(dbCtx, sio, GWEN_DB_FLAGS_DEFAULT | GWEN_PATH_FLAGS_CREATE_GROUP); if (rv<0) { DBG_ERROR(0, "Error reading context file (%d)", rv); GWEN_DB_Group_free(dbCtx); GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); return rv; } GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); ctx=AB_ImExporterContext_fromDb(dbCtx); if (!ctx) { DBG_ERROR(0, "No context in input data"); GWEN_DB_Group_free(dbCtx); return GWEN_ERROR_BAD_DATA; } GWEN_DB_Group_free(dbCtx); *pCtx=ctx; return 0; } /* ======================================================================================================================== * writeContext * ======================================================================================================================== */ int writeContext(const char *ctxFile, const AB_IMEXPORTER_CONTEXT *ctx) { GWEN_DB_NODE *dbCtx; GWEN_SYNCIO *sio; int rv; if (ctxFile==NULL) { sio=GWEN_SyncIo_File_fromStdout(); GWEN_SyncIo_AddFlags(sio, GWEN_SYNCIO_FLAGS_DONTCLOSE | GWEN_SYNCIO_FILE_FLAGS_WRITE); } else { sio=GWEN_SyncIo_File_new(ctxFile, GWEN_SyncIo_File_CreationMode_CreateAlways); GWEN_SyncIo_AddFlags(sio, GWEN_SYNCIO_FILE_FLAGS_READ | GWEN_SYNCIO_FILE_FLAGS_WRITE | GWEN_SYNCIO_FILE_FLAGS_UREAD | GWEN_SYNCIO_FILE_FLAGS_UWRITE | GWEN_SYNCIO_FILE_FLAGS_GREAD | GWEN_SYNCIO_FILE_FLAGS_GWRITE); rv=GWEN_SyncIo_Connect(sio); if (rv<0) { DBG_ERROR(0, "Error selecting output file: %s", strerror(errno)); GWEN_SyncIo_free(sio); return 4; } } dbCtx=GWEN_DB_Group_new("context"); rv=AB_ImExporterContext_toDb(ctx, dbCtx); if (rv<0) { DBG_ERROR(0, "Error writing context to db (%d)", rv); GWEN_DB_Group_free(dbCtx); GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); return rv; } rv=GWEN_DB_WriteToIo(dbCtx, sio, GWEN_DB_FLAGS_DEFAULT); if (rv<0) { DBG_ERROR(0, "Error writing context (%d)", rv); } else rv=0; GWEN_DB_Group_free(dbCtx); GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); return rv; } /* ======================================================================================================================== * mkSepaTransfer * ======================================================================================================================== */ AB_TRANSACTION *mkSepaTransfer(GWEN_DB_NODE *db, int cmd) { AB_TRANSACTION *t; const char *s; int i; GWEN_DATE *d; assert(db); t=AB_Transaction_new(); AB_Transaction_SetCommand(t, cmd); AB_Transaction_SetType(t, AB_Transaction_TypeTransfer); s=GWEN_DB_GetCharValue(db, "name", 0, 0); if (s && *s) AB_Transaction_SetLocalName(t, s); /* remote account */ s=GWEN_DB_GetCharValue(db, "remoteBankId", 0, 0); if (s && *s) AB_Transaction_SetRemoteBankCode(t, s); s=GWEN_DB_GetCharValue(db, "remoteAccountId", 0, 0); if (s && *s) AB_Transaction_SetRemoteAccountNumber(t, s); s=GWEN_DB_GetCharValue(db, "remoteIban", 0, 0); if (s && *s) AB_Transaction_SetRemoteIban(t, s); else { DBG_ERROR(0, "No remote IBAN given"); AB_Transaction_free(t); return NULL; } s=GWEN_DB_GetCharValue(db, "remoteBic", 0, 0); if (s && *s) AB_Transaction_SetRemoteBic(t, s); s=GWEN_DB_GetCharValue(db, "remoteName", 0, 0); if (s && *s) AB_Transaction_SetRemoteName(t, s); else { DBG_ERROR(0, "No remote name given"); AB_Transaction_free(t); return NULL; } /* transfer data */ for (i=0; i<20; i++) { s=GWEN_DB_GetCharValue(db, "purpose", i, 0); if (!s) break; if (*s) AB_Transaction_AddPurposeLine(t, s); } if (i<1) { DBG_ERROR(0, "No purpose given"); AB_Transaction_free(t); return NULL; } s=GWEN_DB_GetCharValue(db, "value", 0, 0); if (s && *s) { AB_VALUE *v; v=AB_Value_fromString(s); assert(v); if (AB_Value_IsNegative(v) || AB_Value_IsZero(v)) { DBG_ERROR(0, "Only positive non-zero amount allowed"); AB_Transaction_free(t); return NULL; } AB_Transaction_SetValue(t, v); AB_Value_free(v); } else { DBG_ERROR(0, "No value given"); AB_Transaction_free(t); return NULL; } s=GWEN_DB_GetCharValue(db, "endToEndReference", 0, 0); if (s && *s) AB_Transaction_SetEndToEndReference(t, s); /* dated transfer, SEPA debit notes */ s=GWEN_DB_GetCharValue(db, "executionDate", 0, 0); if (s && *s) { GWEN_BUFFER *dbuf; dbuf=GWEN_Buffer_new(0, 32, 0, 1); GWEN_Buffer_AppendString(dbuf, s); GWEN_Buffer_AppendString(dbuf, "-00:00"); d=GWEN_Date_fromStringWithTemplate(GWEN_Buffer_GetStart(dbuf), "YYYYMMDD"); GWEN_Buffer_free(dbuf); if (d==0) { DBG_ERROR(0, "Invalid execution date value \"%s\"", s); AB_Transaction_free(t); return NULL; } AB_Transaction_SetDate(t, d); GWEN_Date_free(d); } /* standing orders */ if (cmd==AB_Transaction_CommandSepaCreateStandingOrder) { s=GWEN_DB_GetCharValue(db, "firstExecutionDate", 0, 0); if (!(s && *s)) { DBG_ERROR(0, "Missing first execution date"); return NULL; } } if (cmd==AB_Transaction_CommandSepaModifyStandingOrder || cmd==AB_Transaction_CommandSepaDeleteStandingOrder) { /* not in the Specs, but the banks ask for it) */ s=GWEN_DB_GetCharValue(db, "nextExecutionDate", 0, 0); if (!(s && *s)) { DBG_ERROR(0, "Missing next execution date"); return NULL; } } if (s && *s) { GWEN_BUFFER *dbuf; dbuf=GWEN_Buffer_new(0, 32, 0, 1); GWEN_Buffer_AppendString(dbuf, s); GWEN_Buffer_AppendString(dbuf, "-00:00"); d=GWEN_Date_fromStringWithTemplate(GWEN_Buffer_GetStart(dbuf), "YYYYMMDD"); GWEN_Buffer_free(dbuf); if (d==0) { DBG_ERROR(0, "Invalid first or next execution date value \"%s\"", s); AB_Transaction_free(t); return NULL; } AB_Transaction_SetFirstDate(t, d); /*next execution date, too */ GWEN_Date_free(d); } s=GWEN_DB_GetCharValue(db, "lastExecutionDate", 0, 0); if (s && *s) { GWEN_BUFFER *dbuf; dbuf=GWEN_Buffer_new(0, 32, 0, 1); GWEN_Buffer_AppendString(dbuf, s); GWEN_Buffer_AppendString(dbuf, "-00:00"); d=GWEN_Date_fromStringWithTemplate(GWEN_Buffer_GetStart(dbuf), "YYYYMMDD"); GWEN_Buffer_free(dbuf); if (d==0) { DBG_ERROR(0, "Invalid last execution date value \"%s\"", s); AB_Transaction_free(t); return NULL; } AB_Transaction_SetLastDate(t, d); GWEN_Date_free(d); } if (cmd==AB_Transaction_CommandSepaCreateStandingOrder || cmd==AB_Transaction_CommandSepaModifyStandingOrder || cmd==AB_Transaction_CommandSepaDeleteStandingOrder) { const char *s; AB_TRANSACTION_PERIOD period=AB_Transaction_PeriodUnknown; /* only needed for standing orders */ AB_Transaction_SetSubType(t, AB_Transaction_SubTypeStandingOrder); s=GWEN_DB_GetCharValue(db, "executionPeriod", 0, 0); if (s && *s) { period=AB_Transaction_Period_fromString(s); if (period==AB_Transaction_PeriodUnknown) { DBG_ERROR(0, "Invalid execution period value \"%s\"", s); AB_Transaction_free(t); return NULL; } } else { DBG_ERROR(0, "Missing execution period value"); return NULL; } AB_Transaction_SetPeriod(t, period); i=GWEN_DB_GetIntValue(db, "executionCycle", 0, -1); if (i <= 0) { DBG_ERROR(0, "Invalid execution cycle value \"%d\"", i); AB_Transaction_free(t); return NULL; } AB_Transaction_SetCycle(t, i); i=GWEN_DB_GetIntValue(db, "executionDay", 0, -1); if (i <= 0 || (period == AB_Transaction_PeriodWeekly && i > 7) || (period == AB_Transaction_PeriodMonthly && i > 30 && (i < 97 || i > 99))) { DBG_ERROR(0, "Invalid execution day value \"%d\"", i); AB_Transaction_free(t); return NULL; } AB_Transaction_SetExecutionDay(t, i); /* SetFiId */ s=GWEN_DB_GetCharValue(db, "fiId", 0, 0); if (s && *s) AB_Transaction_SetFiId(t, s); } return t; } /* ======================================================================================================================== * mkSepaDebitNote * ======================================================================================================================== */ AB_TRANSACTION *mkSepaDebitNote(GWEN_DB_NODE *db, int cmd) { AB_TRANSACTION *t; const char *s; t=mkSepaTransfer(db, cmd); if (t==NULL) { DBG_INFO(0, "here"); return NULL; } AB_Transaction_SetType(t, AB_Transaction_TypeDebitNote); /* read some additional fields */ s=GWEN_DB_GetCharValue(db, "creditorSchemeId", 0, 0); if (!(s && *s)) { DBG_ERROR(0, "Missing creditor scheme id"); AB_Transaction_free(t); return NULL; } AB_Transaction_SetCreditorSchemeId(t, s); s=GWEN_DB_GetCharValue(db, "mandateId", 0, 0); if (!(s && *s)) { DBG_ERROR(0, "Missing mandate id"); AB_Transaction_free(t); return NULL; } AB_Transaction_SetMandateId(t, s); s=GWEN_DB_GetCharValue(db, "mandateDate", 0, 0); if (!(s && *s)) { DBG_ERROR(0, "Missing mandate date"); AB_Transaction_free(t); return NULL; } else { GWEN_DATE *dt; dt=GWEN_Date_fromString(s); if (dt==NULL) { DBG_ERROR(0, "Bad date format for mandate date"); AB_Transaction_free(t); return NULL; } AB_Transaction_SetMandateDate(t, dt); GWEN_Date_free(dt); } s=GWEN_DB_GetCharValue(db, "sequenceType", 0, "once"); if (s && *s) { AB_TRANSACTION_SEQUENCE st; st=AB_Transaction_Sequence_fromString(s); if (st!=AB_Transaction_SequenceUnknown) AB_Transaction_SetSequence(t, st); else { DBG_ERROR(0, "Unknown sequence type [%s]", s); AB_Transaction_free(t); return NULL; } } else AB_Transaction_SetSequence(t, AB_Transaction_SequenceOnce); return t; } /* ======================================================================================================================== * getSelectedAccounts * ======================================================================================================================== */ AB_ACCOUNT_SPEC_LIST *getSelectedAccounts(AB_BANKING *ab, GWEN_DB_NODE *db) { AB_ACCOUNT_SPEC_LIST *asl=NULL; uint32_t uniqueAccountId; int rv; asl=AB_AccountSpec_List_new(); uniqueAccountId=(uint32_t) GWEN_DB_GetIntValue(db, "uniqueAccountId", 0, 0); if (uniqueAccountId) { AB_ACCOUNT_SPEC *as=NULL; /* specific unique id given, use that exclusively */ rv=AB_Banking_GetAccountSpecByUniqueId(ab, uniqueAccountId, &as); if (rv<0) { DBG_ERROR(0, "Could not load account spec %lu (%d)", (unsigned long int) uniqueAccountId, rv); AB_AccountSpec_List_free(asl); return NULL; } AB_AccountSpec_List_Add(as, asl); } else { /* no unique account id given, try match parameters */ rv=AB_Banking_GetAccountSpecList(ab, &asl); if (rv<0) { if (rv==GWEN_ERROR_NOT_FOUND) { DBG_INFO(0, "No account specs (%d)", rv); } else { DBG_ERROR(0, "Could not load account specs (%d)", rv); } AB_AccountSpec_List_free(asl); return NULL; } else { const char *backendName; const char *country; const char *bankId; const char *accountId; const char *subAccountId; const char *iban; const char *s; AB_ACCOUNT_TYPE aType=AB_AccountType_Unknown; AB_ACCOUNT_SPEC *as; backendName=GWEN_DB_GetCharValue(db, "backendName", 0, "*"); country=GWEN_DB_GetCharValue(db, "country", 0, "*"); bankId=GWEN_DB_GetCharValue(db, "bankId", 0, "*"); accountId=GWEN_DB_GetCharValue(db, "accountId", 0, "*"); subAccountId=GWEN_DB_GetCharValue(db, "subAccountId", 0, "*"); iban=GWEN_DB_GetCharValue(db, "iban", 0, "*"); s=GWEN_DB_GetCharValue(db, "accountType", 0, NULL); if (s && *s) aType=AB_AccountType_fromChar(s); if (aType==AB_AccountType_Invalid) { DBG_ERROR(0, "Invalid Could not load account specs (%d)", rv); AB_AccountSpec_List_free(asl); return NULL; } as=AB_AccountSpec_List_First(asl); while (as) { AB_ACCOUNT_SPEC *asNext; asNext=AB_AccountSpec_List_Next(as); if (AB_AccountSpec_Matches(as, backendName, country, bankId, accountId, subAccountId, iban, "*", /* currency */ aType)<1) { /* doesn't match, remove from list */ AB_AccountSpec_List_Del(as); AB_AccountSpec_free(as); } as=asNext; } } } if (AB_AccountSpec_List_GetCount(asl)<1) { AB_AccountSpec_List_free(asl); return NULL; } return asl; } /* ======================================================================================================================== * getSingleSelectedAccount * ======================================================================================================================== */ AB_ACCOUNT_SPEC *getSingleSelectedAccount(AB_BANKING *ab, GWEN_DB_NODE *db) { AB_ACCOUNT_SPEC_LIST *al=NULL; AB_ACCOUNT_SPEC *as; al=getSelectedAccounts(ab, db); if (al==NULL) { DBG_INFO(0, "No matching accounts"); return NULL; } if (AB_AccountSpec_List_GetCount(al)>1) { DBG_ERROR(0, "Ambiguous account specification (%d accounts matching)", AB_AccountSpec_List_GetCount(al)); AB_AccountSpec_List_free(al); return NULL; } as=AB_AccountSpec_List_First(al); assert(as); AB_AccountSpec_List_Del(as); AB_AccountSpec_List_free(al); return as; } /* ======================================================================================================================== * pickAccountSpecForArgs * ======================================================================================================================== */ AB_ACCOUNT_SPEC *pickAccountSpecForArgs(const AB_ACCOUNT_SPEC_LIST *accountSpecList, GWEN_DB_NODE *db) { uint32_t uaid; AB_ACCOUNT_SPEC *accountSpec=NULL; assert(accountSpecList); assert(db); uaid=(uint32_t) GWEN_DB_GetIntValue(db, "uniqueAccountId", 0, 0); if (uaid>0) { accountSpec=AB_AccountSpec_List_GetByUniqueId(accountSpecList, uaid); if (accountSpec==NULL) { DBG_ERROR(0, "ERROR: No account spec with unique id %" PRIu32, uaid); return NULL; } } else { const char *backendName; const char *country; const char *bankId; const char *accountId; const char *subAccountId; const char *iban; const char *s; AB_ACCOUNT_TYPE aType=AB_AccountType_Unknown; backendName=GWEN_DB_GetCharValue(db, "backendName", 0, "*"); country=GWEN_DB_GetCharValue(db, "country", 0, "*"); bankId=GWEN_DB_GetCharValue(db, "bankId", 0, "*"); accountId=GWEN_DB_GetCharValue(db, "accountId", 0, "*"); subAccountId=GWEN_DB_GetCharValue(db, "subAccountId", 0, "*"); iban=GWEN_DB_GetCharValue(db, "iban", 0, "*"); s=GWEN_DB_GetCharValue(db, "accountType", 0, NULL); if (s && *s) aType=AB_AccountType_fromChar(s); if (aType==AB_AccountType_Invalid) { DBG_ERROR(0, "Invalid account type (%s)", s); return NULL; } accountSpec=AB_AccountSpec_List_FindFirst(accountSpecList, backendName, country, bankId, accountId, subAccountId, iban, "*", /* currency */ aType); if (accountSpec==NULL) { DBG_ERROR(0, "ERROR: No matching account spec found"); return NULL; } if (AB_AccountSpec_List_FindNext(accountSpec, backendName, country, bankId, accountId, subAccountId, iban, "*", /* currency */ aType)) { DBG_ERROR(0, "ERROR: Ambiguous account specification"); return NULL; } } return accountSpec; } /* ======================================================================================================================== * pickAccountSpecForTransaction * ======================================================================================================================== */ AB_ACCOUNT_SPEC *pickAccountSpecForTransaction(const AB_ACCOUNT_SPEC_LIST *accountSpecList, const AB_TRANSACTION *t) { uint32_t uaid; AB_ACCOUNT_SPEC *accountSpec=NULL; assert(accountSpecList); assert(t); uaid=AB_Transaction_GetUniqueAccountId(t); if (uaid>0) { accountSpec=AB_AccountSpec_List_GetByUniqueId(accountSpecList, uaid); if (accountSpec==NULL) { DBG_ERROR(0, "ERROR: No account spec with unique id %" PRIu32, uaid); return NULL; } } else { const char *country; const char *bankCode; const char *accountNumber; const char *accountSuffix; const char *iban; country=AB_Transaction_GetLocalCountry(t); bankCode=AB_Transaction_GetLocalBankCode(t); accountNumber=AB_Transaction_GetLocalAccountNumber(t); accountSuffix=AB_Transaction_GetLocalSuffix(t); iban=AB_Transaction_GetLocalIban(t); accountSpec=AB_AccountSpec_List_FindFirst(accountSpecList, "*", /* backend */ (country && *country)?country:"*", (bankCode && *bankCode)?bankCode:"*", (accountNumber && *accountNumber)?accountNumber:"*", (accountSuffix && *accountSuffix)?accountSuffix:"*", (iban && *iban)?iban:"*", "*", /* currency */ AB_AccountType_Unknown); if (accountSpec==NULL) { DBG_ERROR(0, "ERROR: No matching account spec found"); return NULL; } if (AB_AccountSpec_List_FindNext(accountSpec, "*", /* backend */ (country && *country)?country:"*", (bankCode && *bankCode)?bankCode:"*", (accountNumber && *accountNumber)?accountNumber:"*", (accountSuffix && *accountSuffix)?accountSuffix:"*", (iban && *iban)?iban:"*", "*", /* currency */ AB_AccountType_Unknown)) { DBG_ERROR(0, "ERROR: Ambiguous account specification"); return NULL; } } return accountSpec; } /* ======================================================================================================================== * checkTransactionIbans * ======================================================================================================================== */ int checkTransactionIbans(const AB_TRANSACTION *t) { const char *rIBAN; const char *lIBAN; #if 0 const char *lBIC; const char *rBIC; #endif int rv; assert(t); /* some checks */ rIBAN=AB_Transaction_GetRemoteIban(t); lIBAN=AB_Transaction_GetLocalIban(t); #if 0 rBIC=AB_Transaction_GetRemoteBic(t); if (!rIBAN || !(*rIBAN)) { fprintf(stderr, "Missing remote IBAN\n"); return 1; } #endif rv=AB_Banking_CheckIban(rIBAN); if (rv != 0) { fprintf(stderr, "Invalid remote IBAN (%s)\n", rIBAN); return 3; } #if 0 lBIC=AB_Transaction_GetLocalBic(t); if (!lBIC || !(*lBIC)) { fprintf(stderr, "Missing local BIC\n"); return 1; } #endif if (!lIBAN || !(*lIBAN)) { fprintf(stderr, "Missing local IBAN\n"); return 1; } rv=AB_Banking_CheckIban(lIBAN); if (rv != 0) { fprintf(stderr, "Invalid local IBAN (%s)\n", lIBAN); return 3; } #if 0 if (strncmp(lIBAN, rIBAN, 2) && (!rBIC || !*rBIC)) { DBG_ERROR(0, "Remote BIC id required for international transaction"); return 1; } #endif return 0; } /* ======================================================================================================================== * checkTransactionLimits * ======================================================================================================================== */ int checkTransactionLimits(const AB_TRANSACTION *t, const AB_TRANSACTION_LIMITS *lim, uint32_t flags) { if (lim==NULL) { fprintf(stderr, "ERROR: Job not supported with this account.\n"); return 3; } if (flags & AQBANKING_TOOL_LIMITFLAGS_PURPOSE) if (AB_Banking_CheckTransactionAgainstLimits_Purpose(t, lim)) { fprintf(stderr, "ERROR: Purpose violates job limits.\n"); return 3; } if (flags & AQBANKING_TOOL_LIMITFLAGS_NAMES) if (AB_Banking_CheckTransactionAgainstLimits_Names(t, lim)) { fprintf(stderr, "ERROR: Names violate job limits.\n"); return 3; } if (flags & AQBANKING_TOOL_LIMITFLAGS_SEQUENCE) if (AB_Banking_CheckTransactionAgainstLimits_Sequence(t, lim)) { fprintf(stderr, "ERROR: Sequence violate job limits.\n"); return 3; } if (flags & AQBANKING_TOOL_LIMITFLAGS_DATE) if (AB_Banking_CheckTransactionAgainstLimits_Date(t, lim)) { fprintf(stderr, "ERROR: Date violate job limits.\n"); return 3; } if (flags & AQBANKING_TOOL_LIMITFLAGS_SEPA) if (AB_Banking_CheckTransactionForSepaConformity(t, 0)) { fprintf(stderr, "ERROR: Transaction fails SEPA conformity check.\n"); return 3; } return 0; } /* ======================================================================================================================== * addTransactionToContextFile * ======================================================================================================================== */ int addTransactionToContextFile(const AB_TRANSACTION *t, const char *ctxFile) { int rv; AB_IMEXPORTER_CONTEXT *ctx=NULL; /* load ctx file */ rv=readContext(ctxFile, &ctx, 0); if (rv<0) { DBG_ERROR(0, "Error reading context (%d)", rv); return 4; } /* add transaction to */ AB_ImExporterContext_AddTransaction(ctx, AB_Transaction_dup(t)); /* write result back */ rv=writeContext(ctxFile, ctx); AB_ImExporterContext_free(ctx); if (rv<0) { DBG_ERROR(0, "Error writing context file (%d)", rv); return 4; } return 0; } /* ======================================================================================================================== * execBankingJobs * ======================================================================================================================== */ int execBankingJobs(AB_BANKING *ab, AB_TRANSACTION_LIST2 *tList, const char *ctxFile) { int rv; int rvExec=0; AB_IMEXPORTER_CONTEXT *ctx=NULL; /* execute job */ ctx=AB_ImExporterContext_new(); rv=AB_Banking_SendCommands(ab, tList, ctx); if (rv) { fprintf(stderr, "Error on executeQueue (%d)\n", rv); rvExec=3; } /* write result */ rv=writeContext(ctxFile, ctx); AB_ImExporterContext_free(ctx); if (rv<0) { DBG_ERROR(0, "Error writing context file (%d)", rv); if (rvExec==0) return 4; } return rvExec; } /* ======================================================================================================================== * execSingleBankingJob * ======================================================================================================================== */ int execSingleBankingJob(AB_BANKING *ab, AB_TRANSACTION *t, const char *ctxFile) { AB_TRANSACTION_LIST2 *jobList; int rv; jobList=AB_Transaction_List2_new(); AB_Transaction_List2_PushBack(jobList, t); rv=execBankingJobs(ab, jobList, ctxFile); AB_Transaction_List2_free(jobList); return rv; } /* ======================================================================================================================== * writeJobsAsContextFile * ======================================================================================================================== */ int writeJobsAsContextFile(AB_TRANSACTION_LIST2 *tList, const char *ctxFile) { int rv; AB_TRANSACTION_LIST2_ITERATOR *it; AB_IMEXPORTER_CONTEXT *ctx=NULL; ctx=AB_ImExporterContext_new(); it=AB_Transaction_List2_First(tList); if (it) { AB_TRANSACTION *t; t=AB_Transaction_List2Iterator_Data(it); while (t) { AB_ImExporterContext_AddTransaction(ctx, AB_Transaction_dup(t)); t=AB_Transaction_List2Iterator_Next(it); } AB_Transaction_List2Iterator_free(it); } /* write result */ rv=writeContext(ctxFile, ctx); AB_ImExporterContext_free(ctx); if (rv<0) { DBG_ERROR(0, "Error writing context file (%d)", rv); return 4; } return 0; } /* ======================================================================================================================== * createAndCheckRequest * ======================================================================================================================== */ AB_TRANSACTION *createAndCheckRequest(AB_BANKING *ab, AB_ACCOUNT_SPEC *as, AB_TRANSACTION_COMMAND cmd) { if (AB_AccountSpec_GetTransactionLimitsForCommand(as, cmd)) { AB_TRANSACTION *j; j=AB_Transaction_new(); AB_Transaction_SetUniqueAccountId(j, AB_AccountSpec_GetUniqueId(as)); AB_Transaction_SetCommand(j, cmd); return j; } else { return NULL; } } /* ======================================================================================================================== * createAndAddRequest * ======================================================================================================================== */ int createAndAddRequest(AB_BANKING *ab, AB_TRANSACTION_LIST2 *tList, AB_ACCOUNT_SPEC *as, AB_TRANSACTION_COMMAND cmd, const GWEN_DATE *fromDate, const GWEN_DATE *toDate, int ignoreUnsupported, AB_TRANSACTION_ACK ackMethod, uint32_t number) { uint32_t aid; AB_TRANSACTION *j; assert(as); aid=AB_AccountSpec_GetUniqueId(as); j=createAndCheckRequest(ab, as, cmd); if (j) { if (cmd==AB_Transaction_CommandGetTransactions) { if (fromDate) AB_Transaction_SetFirstDate(j, fromDate); if (toDate) AB_Transaction_SetLastDate(j, toDate); } else if (cmd==AB_Transaction_CommandGetEStatements) { if (fromDate) AB_Transaction_SetFirstDate(j, fromDate); if (number>0) AB_Transaction_SetEstatementNumber(j, number); } AB_Transaction_SetAcknowledge(j, ackMethod); AB_Transaction_List2_PushBack(tList, j); return 0; } else { if (ignoreUnsupported) { fprintf(stderr, "Warning: Ignoring request \"%s\" for %lu, not supported.\n", AB_Transaction_Command_toString(cmd), (unsigned long int) aid); return 0; } else { fprintf(stderr, "Error: Request \"%s\" for %lu not supported.\n", AB_Transaction_Command_toString(cmd), (unsigned long int) aid); return GWEN_ERROR_GENERIC; } } } /* ======================================================================================================================== * createAndAddRequests * ======================================================================================================================== */ int createAndAddRequests(AB_BANKING *ab, AB_TRANSACTION_LIST2 *tList, AB_ACCOUNT_SPEC *as, const GWEN_DATE *fromDate, const GWEN_DATE *toDate, uint32_t requestFlags, uint32_t number) { int ignoreUnsupported=requestFlags & AQBANKING_TOOL_REQUEST_IGNORE_UNSUP; int ackMethod=AB_Transaction_AckNever; int rv; assert(ab); assert(tList); assert(as); if (requestFlags & AQBANKING_TOOL_REQUEST_ACKNOWLEDGE) { ackMethod=AB_Transaction_AckJobsWithAckCode; } /* create and add requests */ if (requestFlags & AQBANKING_TOOL_REQUEST_BALANCE) { rv=createAndAddRequest(ab, tList, as, AB_Transaction_CommandGetBalance, fromDate, toDate, ignoreUnsupported, ackMethod, number); if (rv) return rv; } if (requestFlags & AQBANKING_TOOL_REQUEST_STATEMENTS) { rv=createAndAddRequest(ab, tList, as, AB_Transaction_CommandGetTransactions, fromDate, toDate, ignoreUnsupported, ackMethod, number); if (rv) return rv; } if (requestFlags & AQBANKING_TOOL_REQUEST_SEPASTO) { rv=createAndAddRequest(ab, tList, as, AB_Transaction_CommandSepaGetStandingOrders, fromDate, toDate, ignoreUnsupported, ackMethod, number); if (rv) return rv; } if (requestFlags & AQBANKING_TOOL_REQUEST_ESTATEMENTS) { rv=createAndAddRequest(ab, tList, as, AB_Transaction_CommandGetEStatements, fromDate, toDate, ignoreUnsupported, ackMethod, number); if (rv) return rv; } if (requestFlags & AQBANKING_TOOL_REQUEST_DEPOT) { rv=createAndAddRequest(ab, tList, as, AB_Transaction_CommandGetDepot, fromDate, toDate, ignoreUnsupported, ackMethod, number); if (rv) return rv; } return 0; } /* ======================================================================================================================== * addTransactionToBufferByTemplate * ======================================================================================================================== */ int addTransactionToBufferByTemplate(const AB_TRANSACTION *t, const char *tmplString, GWEN_BUFFER *dbuf) { GWEN_DB_NODE *dbTransaction; const AB_VALUE *v; const GWEN_DATE *dt; const char *s; int rv; dbTransaction=GWEN_DB_Group_new("transaction"); AB_Transaction_toDb(t, dbTransaction); /* translate value */ v=AB_Transaction_GetValue(t); if (v) { AB_Value_toHumanReadableString(v, dbuf, 2, 0); GWEN_DB_SetCharValue(dbTransaction, GWEN_DB_FLAGS_OVERWRITE_VARS, "valueAsString", GWEN_Buffer_GetStart(dbuf)); GWEN_Buffer_Reset(dbuf); } /* translate date */ dt=AB_Transaction_GetDate(t); if (dt) { rv=GWEN_Date_toStringWithTemplate(dt, I18N("DD.MM.YYYY"), dbuf); if (rv>=0) { GWEN_DB_SetCharValue(dbTransaction, GWEN_DB_FLAGS_OVERWRITE_VARS, "dateAsString", GWEN_Buffer_GetStart(dbuf)); } GWEN_Buffer_Reset(dbuf); } /* translate valuta date */ dt=AB_Transaction_GetValutaDate(t); if (dt) { rv=GWEN_Date_toStringWithTemplate(dt, I18N("DD.MM.YYYY"), dbuf); if (rv>=0) { GWEN_DB_SetCharValue(dbTransaction, GWEN_DB_FLAGS_OVERWRITE_VARS, "valutaDateAsString", GWEN_Buffer_GetStart(dbuf)); } GWEN_Buffer_Reset(dbuf); } /* translate date or valuta date */ dt=AB_Transaction_GetDate(t); if (dt==NULL) dt=AB_Transaction_GetValutaDate(t); if (dt) { rv=GWEN_Date_toStringWithTemplate(dt, I18N("DD.MM.YYYY"), dbuf); if (rv>=0) { GWEN_DB_SetCharValue(dbTransaction, GWEN_DB_FLAGS_OVERWRITE_VARS, "dateOrValutaDateAsString", GWEN_Buffer_GetStart(dbuf)); } GWEN_Buffer_Reset(dbuf); } /* translate purpose into "purposeLine" entries */ s=AB_Transaction_GetPurpose(t); if (s && *s) { GWEN_STRINGLIST *stringList; GWEN_DB_DeleteVar(dbTransaction, "purposeLine"); stringList=GWEN_StringList_fromString(s, "\n", 0); if (stringList) { GWEN_STRINGLISTENTRY *sEntry; sEntry=GWEN_StringList_FirstEntry(stringList); while (sEntry) { const char *entryString; entryString=GWEN_StringListEntry_Data(sEntry); if (entryString && *entryString) { GWEN_DB_SetCharValue(dbTransaction, 0, "purposeLine", entryString); } sEntry=GWEN_StringListEntry_Next(sEntry); } } } rv=GWEN_Text_ReplaceVars(tmplString, dbuf, _replaceVarsCb, dbTransaction); if (rv<0) { DBG_ERROR(0, "Error on GWEN_DB_ReplaceVars(): %d", rv); GWEN_DB_Group_free(dbTransaction); return rv; } GWEN_DB_Group_free(dbTransaction); return 0; } int GWENHYWFAR_CB _replaceVarsCb(void *cbPtr, const char *name, int index, int maxLen, GWEN_BUFFER *dstBuf) { GWEN_DB_NODE *db; db=(GWEN_DB_NODE *) cbPtr; if (strcasecmp(name, "purposeInOneLine")==0) { const char *s; s=GWEN_DB_GetCharValue(db, "purpose", 0, NULL); if (!(s && *s)) return GWEN_ERROR_NO_DATA; else { char *sCopy; sCopy=strdup(s); assert(sCopy); if (sCopy==NULL) return GWEN_ERROR_MEMORY_FULL; else { char *p; /* replace control characters */ p=sCopy; while (*p) { if (iscntrl(*p)) *p=' '; p++; } /* while */ GWEN_Buffer_AppendString(dstBuf, sCopy); free(sCopy); return 0; } } } return GWEN_DB_WriteVarValueToBuffer(db, name, index, dstBuf); } aqbanking-6.6.1/src/tools/aqbanking-cli/listprofiles.c0000664000175000017500000000702114043610745017720 00000000000000/*************************************************************************** begin : Tue May 03 2005 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals.h" #include int listProfiles(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; GWEN_DB_NODE *dbProfiles; int rv; const char *importerName; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "importerName", /* name */ 0, /* minnum */ 1, /* maxnum */ 0, /* short option */ "importer", /* long option */ "Specify the importer to use", /* short description */ "Specify the importer to use" /* 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(stdout, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } importerName=GWEN_DB_GetCharValue(db, "importerName", 0, "csv"); rv=AB_Banking_Init(ab); if (rv) { DBG_ERROR(0, "Error on init (%d)", rv); return 2; } dbProfiles=AB_Banking_GetImExporterProfiles(ab, importerName); if (dbProfiles) { GWEN_DB_NODE *dbT; dbT=GWEN_DB_GetFirstGroup(dbProfiles); while (dbT) { const char *sName; const char *sVersion; const char *sShortDescr; int isGlobal; sName=GWEN_DB_GetCharValue(dbT, "name", 0, "(none)"); sVersion=GWEN_DB_GetCharValue(dbT, "version", 0, "(none)"); sShortDescr=GWEN_DB_GetCharValue(dbT, "shortDescr", 0, ""); isGlobal=GWEN_DB_GetIntValue(dbT, "isGlobal", 0, 0); fprintf(stdout, "%s\t%s\t%s\t%s\n", sName?sName:"(none)", sVersion?sVersion:"(none)", sShortDescr?sShortDescr:"", isGlobal?"global":"local"); dbT=GWEN_DB_GetNextGroup(dbT); } GWEN_DB_Group_free(dbProfiles); } else { fprintf(stderr, "No profiles for this im-/exporter"); } /* that's is */ rv=AB_Banking_Fini(ab); if (rv) { fprintf(stderr, "ERROR: Error on deinit (%d)\n", rv); return 5; } return 0; } aqbanking-6.6.1/src/tools/aqbanking-cli/aqpaypal-tool.c0000664000175000017500000001743414043610745017775 00000000000000/*************************************************************************** begin : Tue May 03 2005 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include #include #include #include #include #include #include "globals.h" static int doControl(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv); int main(int argc, char **argv) { GWEN_DB_NODE *db; int rv; AB_BANKING *ab; GWEN_GUI *gui; int nonInteractive=0; int acceptValidCerts=0; const char *pinFile; const char *cfgDir; const char *s; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "cfgdir", /* name */ 0, /* minnum */ 1, /* maxnum */ "D", /* short option */ "cfgdir", /* long option */ I18S("Specify the configuration folder"), I18S("Specify the configuration folder") }, { 0, /* flags */ GWEN_ArgsType_Int, /* type */ "nonInteractive", /* name */ 0, /* minnum */ 1, /* maxnum */ "n", /* short option */ "noninteractive", /* long option */ "Select non-interactive mode",/* short description */ "Select non-interactive mode.\n" /* long description */ "This automatically returns a confirmative answer to any non-critical\n" "message." }, { 0, /* flags */ GWEN_ArgsType_Int, /* type */ "acceptValidCerts", /* name */ 0, /* minnum */ 1, /* maxnum */ "A", /* short option */ "acceptvalidcerts", /* long option */ "Automatically accept all valid TLS certificate", "Automatically accept all valid TLS certificate" }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "charset", /* name */ 0, /* minnum */ 1, /* maxnum */ 0, /* short option */ "charset", /* long option */ "Specify the output character set", /* short description */ "Specify the output character set" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "pinfile", /* name */ 0, /* minnum */ 1, /* maxnum */ "P", /* short option */ "pinfile", /* long option */ "Specify the PIN file", /* short description */ "Specify the PIN file" /* 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", I18S("Show this help screen. For help on commands, " "run aqbanking-cli --help."), I18S("Show this help screen. For help on commands, run aqbanking-cli --help.") } }; rv=GWEN_Init(); if (rv) { fprintf(stderr, "ERROR: Unable to init Gwen.\n"); exit(2); } GWEN_Logger_Open(0, "aqpaypal-tool", 0, GWEN_LoggerType_Console, GWEN_LoggerFacility_User); GWEN_Logger_SetLevel(0, GWEN_LoggerLevel_Warning); rv=GWEN_I18N_BindTextDomain_Dir(PACKAGE, LOCALEDIR); if (rv) { DBG_ERROR(0, "Could not bind textdomain (%d)", rv); } else { rv=GWEN_I18N_BindTextDomain_Codeset(PACKAGE, "UTF-8"); if (rv) { DBG_ERROR(0, "Could not set codeset (%d)", rv); } } db=GWEN_DB_Group_new("arguments"); rv=GWEN_Args_Check(argc, argv, 1, GWEN_ARGS_MODE_ALLOW_FREEPARAM | GWEN_ARGS_MODE_STOP_AT_FREEPARAM, args, db); if (rv==GWEN_ARGS_RESULT_ERROR) { fprintf(stderr, "ERROR: Could not parse arguments main\n"); GWEN_DB_Group_free(db); return 1; } else if (rv==GWEN_ARGS_RESULT_HELP) { GWEN_BUFFER *ubuf; ubuf=GWEN_Buffer_new(0, 1024, 0, 1); GWEN_Buffer_AppendString(ubuf, I18N("This is version ")); GWEN_Buffer_AppendString(ubuf, AQBANKING_VERSION_STRING "\n"); GWEN_Buffer_AppendString(ubuf, I18N("Usage: ")); GWEN_Buffer_AppendString(ubuf, argv[0]); GWEN_Buffer_AppendString(ubuf, I18N(" [GLOBAL OPTIONS] COMMAND " "[LOCAL OPTIONS]\n")); GWEN_Buffer_AppendString(ubuf, I18N("\nGlobal Options:\n")); if (GWEN_Args_Usage(args, ubuf, GWEN_ArgsOutType_Txt)) { fprintf(stderr, "ERROR: Could not create help string\n"); GWEN_DB_Group_free(db); return 1; } GWEN_Buffer_AppendString(ubuf, "\n"); fprintf(stdout, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); argc=0; /* only show help */ } if (rv>1) { argc-=rv-1; argv+=rv-1; } else { /* no command */ argc=0; } nonInteractive=GWEN_DB_GetIntValue(db, "nonInteractive", 0, 0); acceptValidCerts=GWEN_DB_GetIntValue(db, "acceptValidCerts", 0, 0); cfgDir=GWEN_DB_GetCharValue(db, "cfgdir", 0, 0); gui=GWEN_Gui_CGui_new(); s=GWEN_DB_GetCharValue(db, "charset", 0, NULL); if (s && *s) GWEN_Gui_SetCharSet(gui, s); if (nonInteractive) GWEN_Gui_AddFlags(gui, GWEN_GUI_FLAGS_NONINTERACTIVE); else GWEN_Gui_SubFlags(gui, GWEN_GUI_FLAGS_NONINTERACTIVE); if (acceptValidCerts) GWEN_Gui_AddFlags(gui, GWEN_GUI_FLAGS_ACCEPTVALIDCERTS); else GWEN_Gui_SubFlags(gui, GWEN_GUI_FLAGS_ACCEPTVALIDCERTS); pinFile=GWEN_DB_GetCharValue(db, "pinFile", 0, NULL); if (pinFile) { GWEN_DB_NODE *dbPins; dbPins=GWEN_DB_Group_new("pins"); if (GWEN_DB_ReadFile(dbPins, pinFile, GWEN_DB_FLAGS_DEFAULT | GWEN_PATH_FLAGS_CREATE_GROUP)) { fprintf(stderr, "Error reading pinfile \"%s\"\n", pinFile); GWEN_DB_Group_free(dbPins); GWEN_DB_Group_free(db); return 2; } GWEN_Gui_SetPasswordDb(gui, dbPins, 1); } GWEN_Gui_SetGui(gui); ab=AB_Banking_new("aqbanking-cli", cfgDir, 0); AB_Gui_Extend(gui, ab); rv=doControl(ab, db, argc, argv); GWEN_DB_Group_free(db); return rv; } int doControl(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv) { int rv; rv=AB_Banking_Init(ab); if (rv) { DBG_ERROR(0, "Error on init (%d)", rv); return 2; } rv=AB_Banking_ProviderControl(ab, "aqpaypal", argc, argv); if (rv!=0) { DBG_ERROR(0, "Error calling control function (%d)", rv); AB_Banking_Fini(ab); return 4; } rv=AB_Banking_Fini(ab); if (rv) { fprintf(stderr, "ERROR: Error on deinit (%d)\n", rv); return 5; } return 0; } aqbanking-6.6.1/src/tools/aqbanking-cli/sepamultijobs.c0000664000175000017500000004047514043610745020074 00000000000000/*************************************************************************** begin : Tue Mar 25 2014 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals.h" #include #include static GWEN_DB_NODE *_readCommandLine(GWEN_DB_NODE *dbArgs, int argc, char **argv); static int _createJobsFromContext(AB_IMEXPORTER_CONTEXT *ctx, const AB_ACCOUNT_SPEC_LIST *accountSpecList, AB_ACCOUNT_SPEC *forcedAccount, AB_TRANSACTION_COMMAND cmd, AB_TRANSACTION_LIST2 *jobList); int sepaMultiJobs(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv, AQBANKING_TOOL_MULTISEPA_TYPE multisepa_type) { GWEN_DB_NODE *db; int rv; const char *ctxFile; const char *inFile; const char *importerName; const char *profileName; const char *profileFile; int use_flash_debitnote; AB_IMEXPORTER_CONTEXT *ctx=0; AB_ACCOUNT_SPEC *forcedAccount=NULL; AB_TRANSACTION_LIST2 *jobList; AB_ACCOUNT_SPEC_LIST *accountSpecList=NULL; AB_TRANSACTION_COMMAND cmd; int dryRun=0; int rvExec; /* parse command line arguments */ db=_readCommandLine(dbArgs, argc, argv); if (db==NULL) { /* error in command line */ return 1; } importerName=GWEN_DB_GetCharValue(db, "importerName", 0, "csv"); profileName=GWEN_DB_GetCharValue(db, "profileName", 0, (multisepa_type == AQBANKING_TOOL_SEPA_TRANSFERS) ? "default" : "sepadebitnotes"); profileFile=GWEN_DB_GetCharValue(db, "profileFile", 0, NULL); ctxFile=GWEN_DB_GetCharValue(db, "ctxfile", 0, 0); inFile=GWEN_DB_GetCharValue(db, "inFile", 0, 0); use_flash_debitnote=GWEN_DB_GetIntValue(db, "useCOR1", 0, 0); dryRun=GWEN_DB_GetIntValue(db, "dryRun", 0, 0); rv=AB_Banking_Init(ab); if (rv) { DBG_ERROR(0, "Error on init (%d)", rv); return 2; } rv=AB_Banking_GetAccountSpecList(ab, &accountSpecList); if (rv<0) { DBG_INFO(0, "here (%d)", rv); AB_Banking_Fini(ab); return 4; } /* find local account to set later if requested */ if (GWEN_DB_VariableExists(db, "uniqueAccountId") || GWEN_DB_VariableExists(db, "bankId") || GWEN_DB_VariableExists(db, "accountId") || GWEN_DB_VariableExists(db, "subAccountId") || GWEN_DB_VariableExists(db, "iban")) { forcedAccount=pickAccountSpecForArgs(accountSpecList, db); if (forcedAccount==NULL) { DBG_ERROR(0, "Invalid account specification."); AB_Banking_Fini(ab); return 4; } } /* import new context */ ctx=AB_ImExporterContext_new(); rv=AB_Banking_ImportFromFileLoadProfile(ab, importerName, ctx, profileName, profileFile, inFile); if (rv<0) { DBG_ERROR(0, "Error reading file: %d", rv); AB_ImExporterContext_free(ctx); AB_Banking_Fini(ab); return 4; } /* create jobs from imported transactions */ cmd=(multisepa_type == AQBANKING_TOOL_SEPA_TRANSFERS) // The command was sepatransfers, so we create JobSepaTransfer ? AB_Transaction_CommandSepaTransfer // The command was sepadebitnotes, so we create some debit note : (use_flash_debitnote // Did we have --use-COR1? Use this extra job type ? AB_Transaction_CommandSepaFlashDebitNote // No COR1, just standard CORE debit note : AB_Transaction_CommandSepaDebitNote); /* populate job list */ jobList=AB_Transaction_List2_new(); rv=_createJobsFromContext(ctx, accountSpecList, forcedAccount, cmd, jobList); AB_ImExporterContext_free(ctx); if (rv<0) { DBG_INFO(0, "Error (%d)", rv); writeJobsAsContextFile(jobList, ctxFile); AB_Transaction_List2_freeAll(jobList); AB_Banking_Fini(ab); return 3; } /* execute jobs */ rvExec=0; if (dryRun) { DBG_NOTICE(0, "Dry-run requested, not sending jobs"); writeJobsAsContextFile(jobList, ctxFile); } else { rv=execBankingJobs(ab, jobList, ctxFile); if (rv) { DBG_ERROR(0, "Error on executeQueue (%d)", rv); rvExec=3; } } AB_Transaction_List2_freeAll(jobList); /* that's it */ rv=AB_Banking_Fini(ab); if (rv) { fprintf(stderr, "ERROR: Error on deinit (%d)\n", rv); if (rvExec) return rvExec; else return 5; } if (rvExec) return rvExec; else return 0; } GWEN_DB_NODE *_readCommandLine(GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; int rv; const GWEN_ARGS args[]= { { 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 */ "inFile", /* name */ 0, /* minnum */ 1, /* maxnum */ "f", /* short option */ "infile", /* long option */ "Specify the file to read the data from", /* short description */ "Specify the file to read the data from" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "importerName", /* name */ 0, /* minnum */ 1, /* maxnum */ 0, /* short option */ "importer", /* long option */ "Specify the importer to use", /* short description */ "Specify the importer 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 import profile to use", /* short description */ "Specify the import 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 import profile from (WATCH OUT: Feature might be broken)",/* short description */ "Specify the file to load the import profile from" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Int, /* type */ "uniqueAccountId", /* name */ 0, /* minnum */ 1, /* maxnum */ NULL, /* short option */ "aid", /* long option */ "Specify the unique account id", /* short description */ "Specify the unique account id" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "bankId", /* name */ 0, /* minnum */ 1, /* maxnum */ "b", /* short option */ "bank", /* long option */ "overwrite the bank code", /* short description */ "overwrite 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 */ "overwrite the account number", /* short description */ "overwrite the account number" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "subAccountId", /* name */ 0, /* minnum */ 1, /* maxnum */ "aa", /* short option */ "subaccount", /* long option */ "Specify the sub account id (Unterkontomerkmal)", /* short description */ "Specify the sub account id (Unterkontomerkmal)" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "iban", /* name */ 0, /* minnum */ 1, /* maxnum */ "A", /* short option */ "iban", /* long option */ "Specify the iban of your account", /* short description */ "Specify the iban of your account" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "accountType", /* name */ 0, /* minnum */ 1, /* maxnum */ "t", /* short option */ "accounttype", /* long option */ "Specify the type of your account", /* short description */ "Specify the type of your account" /* long description */ }, { 0, /* flags */ GWEN_ArgsType_Int, /* type */ "useCOR1", /* name */ 0, /* minnum */ 1, /* maxnum */ 0, /* short option */ "use-COR1", /* long option */ "If given, use COR1 variant of debit notes (faster), otherwise CORE (slower)", /* short description */ "If given, use COR1 variant of debit notes (faster), otherwise CORE (slower)" /* long description */ }, { 0, /* flags */ GWEN_ArgsType_Int, /* type */ "dryRun", /* name */ 0, /* minnum */ 1, /* maxnum */ 0, /* short option */ "dryRun", /* long option */ "If given jobs will not be really executed, just written to the context file", /* short description */ "If given jobs will not be really executed, just written to the context file" /* 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 NULL; } 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 NULL; } fprintf(stdout, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return NULL; } return db; } int _createJobsFromContext(AB_IMEXPORTER_CONTEXT *ctx, const AB_ACCOUNT_SPEC_LIST *accountSpecList, AB_ACCOUNT_SPEC *forcedAccount, AB_TRANSACTION_COMMAND cmd, AB_TRANSACTION_LIST2 *jobList) { AB_IMEXPORTER_ACCOUNTINFO *iea; int reallyExecute=1; int transactionLine=0; iea=AB_ImExporterContext_GetFirstAccountInfo(ctx); while (iea) { const AB_TRANSACTION *t; t=AB_ImExporterAccountInfo_GetFirstTransaction(iea, 0, 0); while (t) { AB_ACCOUNT_SPEC *as; AB_TRANSACTION *job=NULL; const char *rIBAN; const char *lIBAN; const char *lBIC; const AB_TRANSACTION_LIMITS *lim; int rv; job=AB_Transaction_dup(t); if (forcedAccount) as=forcedAccount; else as=pickAccountSpecForTransaction(accountSpecList, t); if (as==NULL) { DBG_ERROR(0, "Could not determine account for job in line %d", transactionLine); reallyExecute=0; AB_Transaction_SetStatus(job, AB_Transaction_StatusError); } /* fill missing fields in transaction from account spec */ AB_Banking_FillTransactionFromAccountSpec(job, as); rIBAN=AB_Transaction_GetRemoteIban(job); lIBAN=AB_Transaction_GetLocalIban(job); lBIC=AB_Transaction_GetLocalBic(job); /* check remote account */ if (!rIBAN || !(*rIBAN)) { DBG_ERROR(0, "Missing remote IBAN, in line %d", transactionLine); reallyExecute=0; } rv=AB_Banking_CheckIban(rIBAN); if (rv != 0) { DBG_ERROR(0, "Invalid remote IBAN (%s), in line %d", rIBAN, transactionLine); reallyExecute=0; AB_Transaction_SetStatus(job, AB_Transaction_StatusError); } /* check local account */ if (!lBIC || !(*lBIC)) { DBG_WARN(0, "Missing local BIC, in line %d (ignoring, not needed anymore anyway)", transactionLine); } if (!lIBAN || !(*lIBAN)) { DBG_ERROR(0, "Missing local IBAN, in line %d", transactionLine); reallyExecute=0; } rv=AB_Banking_CheckIban(lIBAN); if (rv != 0) { DBG_ERROR(0, "Invalid local IBAN (%s), in line %d", lIBAN, transactionLine); reallyExecute=0; AB_Transaction_SetStatus(job, AB_Transaction_StatusError); } AB_Transaction_SetType(job, (cmd==AB_Transaction_CommandSepaTransfer) ? AB_Transaction_TypeTransfer : AB_Transaction_TypeDebitNote ); lim=AB_AccountSpec_GetTransactionLimitsForCommand(as, cmd); if (lim==NULL) { DBG_ERROR(0, "Job %s not supported, in line %d.", AB_Transaction_Command_toString(cmd), transactionLine); reallyExecute=0; AB_Transaction_SetStatus(job, AB_Transaction_StatusError); } else { rv=checkTransactionLimits(job, lim, AQBANKING_TOOL_LIMITFLAGS_PURPOSE | AQBANKING_TOOL_LIMITFLAGS_NAMES | AQBANKING_TOOL_LIMITFLAGS_SEPA); if (rv<0) { DBG_ERROR(0, "Job %s violates limits, in line %d.", AB_Transaction_Command_toString(cmd), transactionLine); reallyExecute=0; AB_Transaction_SetStatus(job, AB_Transaction_StatusError); } } AB_Transaction_SetCommand(job, cmd); AB_Transaction_List2_PushBack(jobList, job); transactionLine++; t=AB_Transaction_List_Next(t); } /* while t */ iea=AB_ImExporterAccountInfo_List_Next(iea); } /* while */ if (reallyExecute==0) return GWEN_ERROR_GENERIC; return 0; } aqbanking-6.6.1/src/tools/aqbanking-cli/export.c0000664000175000017500000002637114043610745016533 00000000000000/*************************************************************************** begin : Tue May 03 2005 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals.h" #include #include #include #include #include #include #include int exportCtx(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; uint32_t aid; const char *bankId; const char *accountId; const char *subAccountId; const char *iban; int transactionType=0; int transactionCommand=0; const char *s; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Int, /* type */ "uniqueAccountId", /* name */ 0, /* minnum */ 1, /* maxnum */ NULL, /* short option */ "aid", /* long option */ "Specify the unique account id", /* short description */ "Specify the unique account id" /* long description */ }, { 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 */ "subAccountId", /* name */ 0, /* minnum */ 1, /* maxnum */ "aa", /* short option */ "subaccount", /* long option */ "Specify the sub account id (Unterkontomerkmal)", /* short description */ "Specify the sub account id (Unterkontomerkmal)" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "iban", /* name */ 0, /* minnum */ 1, /* maxnum */ "A", /* short option */ "iban", /* long option */ "Specify the iban of your account", /* short description */ "Specify the iban of your account" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "transactionType", /* name */ 0, /* minnum */ 1, /* maxnum */ "tt", /* short option */ "transactiontype", /* long option */ "Specify the transaction type to filter", /* short description */ "Specify the transaction type to filter" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "transactionCommand", /* name */ 0, /* minnum */ 1, /* maxnum */ "tc", /* short option */ "transactioncommand", /* long option */ "Specify the transaction command to filter", /* short description */ "Specify the transaction command to filter" /* 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(stdout, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } /* read command line arguments */ exporterName=GWEN_DB_GetCharValue(db, "exporterName", 0, "csv"); profileName=GWEN_DB_GetCharValue(db, "profileName", 0, "default"); profileFile=GWEN_DB_GetCharValue(db, "profileFile", 0, NULL); aid=(uint32_t)GWEN_DB_GetIntValue(db, "uniqueAccountId", 0, 0); bankId=GWEN_DB_GetCharValue(db, "bankId", 0, 0); accountId=GWEN_DB_GetCharValue(db, "accountId", 0, 0); subAccountId=GWEN_DB_GetCharValue(db, "subAccountId", 0, 0); iban=GWEN_DB_GetCharValue(db, "iban", 0, 0); outFile=GWEN_DB_GetCharValue(db, "outFile", 0, 0); s=GWEN_DB_GetCharValue(db, "transactionType", 0, NULL); if (s && *s) { transactionType=AB_Transaction_Type_fromString(s); if (transactionType==AB_Transaction_TypeUnknown) { fprintf(stderr, "ERROR: Invalid transaction type \"%s\"\n", s); return 1; } } s=GWEN_DB_GetCharValue(db, "transactionCommand", 0, NULL); if (s && *s) { transactionCommand=AB_Transaction_Command_fromString(s); if (transactionCommand==AB_Transaction_CommandUnknown) { fprintf(stderr, "ERROR: Invalid transaction command \"%s\"\n", s); return 1; } } /* init AqBanking */ 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; } /* copy context, but only keep wanted accounts and transactions */ nctx=AB_ImExporterContext_new(); iea=AB_ImExporterContext_GetFirstAccountInfo(ctx); while (iea) { if (AB_ImExporterAccountInfo_Matches(iea, aid, /* unique account id */ "*", bankId, accountId, subAccountId, iban, "*", /* currency */ AB_AccountType_Unknown)) { AB_IMEXPORTER_ACCOUNTINFO *nai; AB_TRANSACTION_LIST *tl; nai=AB_ImExporterAccountInfo_dup(iea); tl=AB_ImExporterAccountInfo_GetTransactionList(nai); if (tl) AB_Transaction_List_KeepByType(tl, transactionType, transactionCommand); AB_ImExporterContext_AddAccountInfo(nctx, nai); } iea=AB_ImExporterAccountInfo_List_Next(iea); } /* while */ AB_ImExporterContext_free(ctx); /* old context */ /* export new context */ rv=AB_Banking_ExportToFileLoadProfile(ab, exporterName, nctx, outFile, profileName, profileFile); if (rv<0) { DBG_ERROR(0, "Error exporting (%d).", rv); AB_ImExporterContext_free(nctx); return 4; } AB_ImExporterContext_free(nctx); /* deinit */ rv=AB_Banking_Fini(ab); if (rv) { fprintf(stderr, "ERROR: Error on deinit (%d)\n", rv); return 5; } return 0; } aqbanking-6.6.1/src/tools/aqbanking-cli/request.c0000664000175000017500000004004114116665246016677 00000000000000/*************************************************************************** begin : Tue May 03 2005 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif /* tool includes */ #include "globals.h" /* aqbanking includes */ #include /* gwenhywfar includes */ #include /* forward declarations */ static GWEN_DB_NODE *_readCommandLine(GWEN_DB_NODE *dbArgs, int argc, char **argv); static int _createAndAndSendRequests(AB_BANKING *ab, AB_ACCOUNT_SPEC_LIST *asl, const GWEN_DATE *fromDate, const GWEN_DATE *toDate, uint32_t requestFlags, const char *ctxFile, uint32_t number); int request(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; AB_ACCOUNT_SPEC_LIST *al=NULL; uint32_t requestFlags=0; uint32_t number; const char *s; int rv; const char *ctxFile; GWEN_DATE *fromDate=0; GWEN_DATE *toDate=0; /* parse command line */ db=_readCommandLine(dbArgs, argc, argv); if (db==NULL) { fprintf(stderr, "ERROR: Could not parse arguments\n"); return 1; } /* read arguments */ if (GWEN_DB_GetIntValue(db, "reqTrans", 0, 0)) requestFlags|=AQBANKING_TOOL_REQUEST_STATEMENTS; if (GWEN_DB_GetIntValue(db, "reqBalance", 0, 0)) requestFlags|=AQBANKING_TOOL_REQUEST_BALANCE; if (GWEN_DB_GetIntValue(db, "reqSepaSto", 0, 0)) requestFlags|=AQBANKING_TOOL_REQUEST_SEPASTO; if (GWEN_DB_GetIntValue(db, "reqEStatements", 0, 0)) requestFlags|=AQBANKING_TOOL_REQUEST_ESTATEMENTS; if (GWEN_DB_GetIntValue(db, "reqDepot", 0, 0)) requestFlags|=AQBANKING_TOOL_REQUEST_DEPOT; if (GWEN_DB_GetIntValue(db, "ignoreUnsupported", 0, 0)) requestFlags|=AQBANKING_TOOL_REQUEST_IGNORE_UNSUP; if (GWEN_DB_GetIntValue(db, "acknowledge", 0, 0)) requestFlags|=AQBANKING_TOOL_REQUEST_ACKNOWLEDGE; /* read command line arguments */ ctxFile=GWEN_DB_GetCharValue(db, "ctxfile", 0, 0); s=GWEN_DB_GetCharValue(db, "fromDate", 0, 0); if (s && *s) { fromDate=GWEN_Date_fromStringWithTemplate(s, "YYYYMMDD"); if (fromDate==NULL) { DBG_ERROR(0, "Invalid fromdate value \"%s\"", s); return 1; } } s=GWEN_DB_GetCharValue(db, "toDate", 0, 0); if (s && *s) { toDate=GWEN_Date_fromStringWithTemplate(s, "YYYYMMDD"); if (toDate==NULL) { DBG_ERROR(0, "Invalid todate value \"%s\"", s); GWEN_Date_free(fromDate); return 1; } } number = GWEN_DB_GetIntValue(db, "number", 0, 0); /* init AqBanking */ rv=AB_Banking_Init(ab); if (rv) { DBG_ERROR(0, "Error on init (%d)", rv); GWEN_Date_free(toDate); GWEN_Date_free(fromDate); return 2; } /* get accounts */ al=getSelectedAccounts(ab, db); if (al==NULL) { DBG_ERROR(0, "No matching accounts"); GWEN_Date_free(toDate); GWEN_Date_free(fromDate); AB_Banking_Fini(ab); return 2; } /* create requests for every account spec and send them */ rv=_createAndAndSendRequests(ab, al, fromDate, toDate, requestFlags, ctxFile, number); if (rv) { AB_AccountSpec_List_free(al); GWEN_Date_free(toDate); GWEN_Date_free(fromDate); AB_Banking_Fini(ab); return 3; } /* cleanup */ AB_AccountSpec_List_free(al); GWEN_Date_free(toDate); GWEN_Date_free(fromDate); /* deinit */ rv=AB_Banking_Fini(ab); if (rv) { fprintf(stderr, "ERROR: Error on deinit (%d)\n", rv); return 5; } return 0; } int _createAndAndSendRequests(AB_BANKING *ab, AB_ACCOUNT_SPEC_LIST *asl, const GWEN_DATE *fromDate, const GWEN_DATE *toDate, uint32_t requestFlags, const char *ctxFile, uint32_t number) { AB_ACCOUNT_SPEC *as; AB_TRANSACTION_LIST2 *jobList; /* sample jobs */ jobList=AB_Transaction_List2_new(); as=AB_AccountSpec_List_First(asl); while (as) { int rv; rv=createAndAddRequests(ab, jobList, as, fromDate, toDate, requestFlags, number); if (rv) { AB_Transaction_List2_free(jobList); return 3; } /* next */ as=AB_AccountSpec_List_Next(as); } /* while (as) */ /* send jobs */ if (AB_Transaction_List2_GetSize(jobList)) { int rv; rv=execBankingJobs(ab, jobList, ctxFile); if (rv) { fprintf(stderr, "Error on sendCommands (%d)\n", rv); AB_Transaction_List2_free(jobList); return 3; } } else { DBG_ERROR(0, "No requests created"); AB_Transaction_List2_free(jobList); return 4; } AB_Transaction_List2_free(jobList); return 0; } /* parse command line */ GWEN_DB_NODE *_readCommandLine(GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; int rv; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Int, /* type */ "uniqueAccountId", /* name */ 0, /* minnum */ 1, /* maxnum */ NULL, /* short option */ "aid", /* long option */ "Specify the unique account id", /* short description */ "Specify the unique account id" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "backendName", /* name */ 0, /* minnum */ 1, /* maxnum */ NULL, /* short option */ "backend", /* long option */ "Specify the name of the backend for your account", /* short description */ "Specify the name of the backend for your account" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "country", /* name */ 0, /* minnum */ 1, /* maxnum */ NULL, /* short option */ "country", /* long option */ "Specify the country for your account (e.g. \"de\")", /* short description */ "Specify the country for your account (e.g. \"de\")" /* long description */ }, { 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 */ "subAccountId", /* name */ 0, /* minnum */ 1, /* maxnum */ "aa", /* short option */ "subaccount", /* long option */ "Specify the sub account id (Unterkontomerkmal)", /* short description */ "Specify the sub account id (Unterkontomerkmal)" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "iban", /* name */ 0, /* minnum */ 1, /* maxnum */ "A", /* short option */ "iban", /* long option */ "Specify the iban of your account", /* short description */ "Specify the iban of your account" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "accountType", /* name */ 0, /* minnum */ 1, /* maxnum */ "at", /* short option */ "accounttype", /* long option */ "Specify the type of your account", /* short description */ "Specify the type of your account" /* 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 */ }, { 0, /* flags */ GWEN_ArgsType_Int, /* type */ "reqTrans", /* name */ 0, /* minnum */ 1, /* maxnum */ 0, /* short option */ "transactions", /* long option */ "Request transactions", /* short description */ "Request transactions" /* long description */ }, { 0, /* flags */ GWEN_ArgsType_Int, /* type */ "reqBalance", /* name */ 0, /* minnum */ 1, /* maxnum */ 0, /* short option */ "balance", /* long option */ "Request balance", /* short description */ "Request balance" /* long description */ }, { 0, /* flags */ GWEN_ArgsType_Int, /* type */ "reqSto", /* name */ 0, /* minnum */ 1, /* maxnum */ 0, /* short option */ "sto", /* long option */ "Request standing orders", /* short description */ "Request standing orders" /* long description */ }, { 0, /* flags */ GWEN_ArgsType_Int, /* type */ "reqSepaSto", /* name */ 0, /* minnum */ 1, /* maxnum */ 0, /* short option */ "sepaSto", /* long option */ "Request SEPA standing orders", /* short description */ "Request SEPA standing orders" /* long description */ }, { 0, /* flags */ GWEN_ArgsType_Int, /* type */ "reqEStatements", /* name */ 0, /* minnum */ 1, /* maxnum */ 0, /* short option */ "estatements", /* long option */ "Request electronic statements", /* short description */ "Request electronic statements" /* long description */ }, { 0, /* flags */ GWEN_ArgsType_Int, /* type */ "reqDepot", /* name */ 0, /* minnum */ 1, /* maxnum */ 0, /* short option */ "depot", /* long option */ "Request depot (security list)", /* short description */ "Request depot (security list)" /* long description */ }, { 0, /* flags */ GWEN_ArgsType_Int, /* type */ "acknowledge", /* name */ 0, /* minnum */ 1, /* maxnum */ 0, /* short option */ "acknowledge", /* long option */ "Acknowledge jobs", /* short description */ "Acknowledge each job where the bank supports." /* long description */ }, { 0, GWEN_ArgsType_Int, "ignoreUnsupported", 0, 1, 0, "ignoreUnsupported", "let AqBanking ignore unsupported requests for accounts", "let AqBanking ignore unsupported requests for accounts", }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "fromDate", /* name */ 0, /* minnum */ 1, /* maxnum */ 0, /* short option */ "fromdate", /* long option */ "Specify the first date for which transactions are wanted (YYYYMMDD)", /* short */ "Specify the first date for which transactions are wanted (YYYYMMDD)" /* long */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "toDate", /* name */ 0, /* minnum */ 1, /* maxnum */ 0, /* short option */ "todate", /* long option */ "Specify the last date for which transactions are wanted (YYYYMMDD)", /* short */ "Specify the last date for which transactions are wanted (YYYYMMDD)" /* long */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Int, /* type */ "number", /* name */ 0, /* minnum */ 0, /* maxnum */ 0, /* short option */ "docnumber", /* long option */ "Document number", /* short description */ "Fetch a specific document number" /* 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 NULL; } 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 NULL; } fprintf(stdout, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return NULL; } return db; } aqbanking-6.6.1/src/tools/aqbanking-cli/globals.h0000664000175000017500000001473414275012617016643 00000000000000/*************************************************************************** begin : Tue May 03 2005 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AQB_TOOL_GLOBALS_H #define AQB_TOOL_GLOBALS_H #include #include #include #include #include #include #include #include #define I18N(msg) GWEN_I18N_Translate(PACKAGE, msg) #define I18S(msg) msg typedef enum { AQBANKING_TOOL_SEPA_TRANSFERS, AQBANKING_TOOL_SEPA_DEBITNOTES } AQBANKING_TOOL_MULTISEPA_TYPE; #define AQBANKING_TOOL_LIMITFLAGS_PURPOSE 0x0001 #define AQBANKING_TOOL_LIMITFLAGS_NAMES 0x0002 #define AQBANKING_TOOL_LIMITFLAGS_SEQUENCE 0x0004 #define AQBANKING_TOOL_LIMITFLAGS_DATE 0x0008 #define AQBANKING_TOOL_LIMITFLAGS_SEPA 0x0010 #define AQBANKING_TOOL_REQUEST_BALANCE 0x0001 #define AQBANKING_TOOL_REQUEST_STATEMENTS 0x0002 #define AQBANKING_TOOL_REQUEST_SEPASTO 0x0004 #define AQBANKING_TOOL_REQUEST_ESTATEMENTS 0x0008 #define AQBANKING_TOOL_REQUEST_DEPOT 0x0010 #define AQBANKING_TOOL_REQUEST_ACKNOWLEDGE 0x4000 #define AQBANKING_TOOL_REQUEST_IGNORE_UNSUP 0x8000 /* ======================================================================================================================== * util.c * ======================================================================================================================== */ int readContext(const char *ctxFile, AB_IMEXPORTER_CONTEXT **pCtx, int mustExist); int writeContext(const char *ctxFile, const AB_IMEXPORTER_CONTEXT *ctx); AB_TRANSACTION *mkSepaTransfer(GWEN_DB_NODE *db, int cmd); AB_TRANSACTION *mkSepaDebitNote(GWEN_DB_NODE *db, int cmd); /** * Get selected AqBanking account sepcs matching the user given parameters in command line db. */ AB_ACCOUNT_SPEC_LIST *getSelectedAccounts(AB_BANKING *ab, GWEN_DB_NODE *db); /** * Return a single account spec matching the user given parameters in command line db. * If multiple candidates match NULL will be returned */ AB_ACCOUNT_SPEC *getSingleSelectedAccount(AB_BANKING *ab, GWEN_DB_NODE *db); AB_ACCOUNT_SPEC *pickAccountSpecForArgs(const AB_ACCOUNT_SPEC_LIST *accountSpecList, GWEN_DB_NODE *db); AB_ACCOUNT_SPEC *pickAccountSpecForTransaction(const AB_ACCOUNT_SPEC_LIST *as, const AB_TRANSACTION *t); int checkTransactionIbans(const AB_TRANSACTION *t); int checkTransactionLimits(const AB_TRANSACTION *t, const AB_TRANSACTION_LIMITS *lim, uint32_t flags); int addTransactionToContextFile(const AB_TRANSACTION *t, const char *ctxFile); int writeJobsAsContextFile(AB_TRANSACTION_LIST2 *tList, const char *ctxFile); int execBankingJobs(AB_BANKING *ab, AB_TRANSACTION_LIST2 *tList, const char *ctxFile); int execSingleBankingJob(AB_BANKING *ab, AB_TRANSACTION *t, const char *ctxFile); AB_TRANSACTION *createAndCheckRequest(AB_BANKING *ab, AB_ACCOUNT_SPEC *as, AB_TRANSACTION_COMMAND cmd); int createAndAddRequest(AB_BANKING *ab, AB_TRANSACTION_LIST2 *tList, AB_ACCOUNT_SPEC *as, AB_TRANSACTION_COMMAND cmd, const GWEN_DATE *fromDate, const GWEN_DATE *toDate, int ignoreUnsupported, AB_TRANSACTION_ACK ackMethod, uint32_t number); /** * Create requests (getBalance, getStatements etc.) according to the given flags. * * @return 0 if ok, !=0 on error */ int createAndAddRequests(AB_BANKING *ab, AB_TRANSACTION_LIST2 *tList, AB_ACCOUNT_SPEC *as, const GWEN_DATE *fromDate, const GWEN_DATE *toDate, uint32_t requestFlags, uint32_t number); int addTransactionToBufferByTemplate(const AB_TRANSACTION *t, const char *tmplString, GWEN_BUFFER *dbuf); /* ======================================================================================================================== * Commands * ======================================================================================================================== */ int addSepaDebitNote(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv, int use_flash_debitnote); int addTransaction(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv); int chkAcc(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv); int chkIban(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv); int control(AB_BANKING *ab, const char *ctrlBackend, GWEN_DB_NODE *dbArgs, int argc, char **argv); int fillGaps(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv); int import(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv); int exportCtx(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv); int listAccs(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv); int listBal(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv); int listTrans(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv); int listDoc(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv); int getDoc(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv); int listProfiles(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv); int request(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv); int sepaDebitNote(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv, int use_flash_debitnote); int sepaMultiJobs(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv, AQBANKING_TOOL_MULTISEPA_TYPE multisepa_type); int sepaRecurTransfer(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv); int sepaTransfer(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv); int sepaInternalTransfer(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv); int updateConf(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv); int versions(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv); int showAccountCommands(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv); #endif aqbanking-6.6.1/src/tools/aqbanking-cli/accountcmds.c0000664000175000017500000002171114546575650017523 00000000000000/*************************************************************************** begin : Wed Aug 10 2022 copyright : (C) 2022 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals.h" #include #include static GWEN_DB_NODE *_readCommandLine(GWEN_DB_NODE *dbArgs, int argc, char **argv); static void _dumpAccountSpecList(const AB_ACCOUNT_SPEC_LIST *al); static void _dumpAccountSpec(const AB_ACCOUNT_SPEC *as); static void _dumpLimitList(const AB_TRANSACTION_LIMITS_LIST *limitList); int showAccountCommands(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; AB_ACCOUNT_SPEC_LIST *al=NULL; int rv; /* parse command line arguments */ db=_readCommandLine(dbArgs, argc, argv); if (db==NULL) { /* error in command line */ return 1; } rv=AB_Banking_Init(ab); if (rv) { DBG_ERROR(0, "Error on init (%d)", rv); return 2; } al=getSelectedAccounts(ab, db); if (al==NULL) { DBG_ERROR(0, "No matching accounts"); AB_Banking_Fini(ab); return 2; } _dumpAccountSpecList(al); rv=AB_Banking_Fini(ab); if (rv) { fprintf(stderr, "ERROR: Error on deinit (%d)\n", rv); return 5; } return 0; } /* parse command line */ GWEN_DB_NODE *_readCommandLine(GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; int rv; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Int, /* type */ "uniqueAccountId", /* name */ 0, /* minnum */ 1, /* maxnum */ NULL, /* short option */ "aid", /* long option */ "Specify the unique account id", /* short description */ "Specify the unique account id" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "backendName", /* name */ 0, /* minnum */ 1, /* maxnum */ NULL, /* short option */ "backend", /* long option */ "Specify the name of the backend for your account", /* short description */ "Specify the name of the backend for your account" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "country", /* name */ 0, /* minnum */ 1, /* maxnum */ NULL, /* short option */ "country", /* long option */ "Specify the country for your account (e.g. \"de\")", /* short description */ "Specify the country for your account (e.g. \"de\")" /* long description */ }, { 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 */ "subAccountId", /* name */ 0, /* minnum */ 1, /* maxnum */ "aa", /* short option */ "subaccount", /* long option */ "Specify the sub account id (Unterkontomerkmal)", /* short description */ "Specify the sub account id (Unterkontomerkmal)" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "iban", /* name */ 0, /* minnum */ 1, /* maxnum */ "A", /* short option */ "iban", /* long option */ "Specify the iban of your account", /* short description */ "Specify the iban of your account" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "accountType", /* name */ 0, /* minnum */ 1, /* maxnum */ "t", /* short option */ "accounttype", /* long option */ "Specify the type of your account", /* short description */ "Specify the type of your account" /* 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 NULL; } 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 NULL; } GWEN_Buffer_AppendString(ubuf, "\n"); fprintf(stdout, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return NULL; } return db; } void _dumpAccountSpecList(const AB_ACCOUNT_SPEC_LIST *al) { AB_ACCOUNT_SPEC *as; as=AB_AccountSpec_List_First(al); if (as) { GWEN_BUFFER *dbuf; dbuf=GWEN_Buffer_new(0, 256, 0, 1); while (as) { _dumpAccountSpec(as); _dumpLimitList(AB_AccountSpec_GetTransactionLimitsList(as)); fprintf(stdout, "\n"); as=AB_AccountSpec_List_Next(as); } /* while (as) */ GWEN_Buffer_free(dbuf); } } void _dumpAccountSpec(const AB_ACCOUNT_SPEC *as) { const char *sIban; const char *sBic; const char *sAccountName; const char *sAccountNumber; const char *sBankCode; const char *sOwnerName; const char *sBackendName; sIban=AB_AccountSpec_GetIban(as); sAccountName=AB_AccountSpec_GetAccountName(as); sAccountNumber=AB_AccountSpec_GetAccountNumber(as); sBic=AB_AccountSpec_GetBic(as); sBankCode=AB_AccountSpec_GetBankCode(as); sOwnerName=AB_AccountSpec_GetOwnerName(as); sBackendName=AB_AccountSpec_GetBackendName(as); fprintf(stdout, "Account %lu: ", (unsigned long int) AB_AccountSpec_GetUniqueId(as)); if (sIban && *sIban) fprintf(stdout, "IBAN: %s, BIC: %s, Account Name: %s, Owner Name: %s (%s)\n", sIban, sBic?sBic:"", sAccountName?sAccountName:"", sOwnerName?sOwnerName:"", sBackendName); else fprintf(stdout, "Account Number: %s, Bank Code: %s, Account Name: %s, Owner Name: %s (%s)\n", sAccountNumber?sAccountNumber:"", sBankCode?sBankCode:"", sAccountName?sAccountName:"", sOwnerName?sOwnerName:"", sBackendName); } void _dumpLimitList(const AB_TRANSACTION_LIMITS_LIST *limitList) { if (limitList) { const AB_TRANSACTION_LIMITS *lim; lim=AB_TransactionLimits_List_First(limitList); if (lim) { while (lim) { fprintf(stdout, " %s\n", AB_Transaction_Command_toString(AB_TransactionLimits_GetCommand(lim))); lim=AB_TransactionLimits_List_Next(lim); } return; } } fprintf(stdout, " \n"); } aqbanking-6.6.1/src/tools/Makefile.in0000644000175000017500000005626215037736026014420 00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/tools ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/distri.m4 $(top_srcdir)/m4/gwenhywfar.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/os.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir distdir-am am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ADD_ACLOCAL_FLAGS = @ADD_ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AQBANKING_CLI_VERSION_STRING = @AQBANKING_CLI_VERSION_STRING@ AQBANKING_FINTS_VERSION_STRING = @AQBANKING_FINTS_VERSION_STRING@ AQBANKING_SO_AGE = @AQBANKING_SO_AGE@ AQBANKING_SO_CURRENT = @AQBANKING_SO_CURRENT@ AQBANKING_SO_EFFECTIVE = @AQBANKING_SO_EFFECTIVE@ AQBANKING_SO_REVISION = @AQBANKING_SO_REVISION@ AQBANKING_VERSION_BUILD = @AQBANKING_VERSION_BUILD@ AQBANKING_VERSION_FULL_STRING = @AQBANKING_VERSION_FULL_STRING@ AQBANKING_VERSION_MAJOR = @AQBANKING_VERSION_MAJOR@ AQBANKING_VERSION_MINOR = @AQBANKING_VERSION_MINOR@ AQBANKING_VERSION_PATCHLEVEL = @AQBANKING_VERSION_PATCHLEVEL@ AQBANKING_VERSION_RELEASE_STRING = @AQBANKING_VERSION_RELEASE_STRING@ AQBANKING_VERSION_STRING = @AQBANKING_VERSION_STRING@ AQBANKING_VERSION_TAG = @AQBANKING_VERSION_TAG@ AQEBICS_CFLAGS = @AQEBICS_CFLAGS@ AQEBICS_LIBS = @AQEBICS_LIBS@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATETIME = @DATETIME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_EXCLUDE_PATTERNS = @DOXYGEN_EXCLUDE_PATTERNS@ DOXYGEN_FILE_PATTERNS = @DOXYGEN_FILE_PATTERNS@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENGUI_GTK2_CFLAGS = @GWENGUI_GTK2_CFLAGS@ GWENGUI_GTK2_LIBS = @GWENGUI_GTK2_LIBS@ GWENHYWFAR_MINIMUM_VERSION = @GWENHYWFAR_MINIMUM_VERSION@ HAVE_GWENGUI_GTK2 = @HAVE_GWENGUI_GTK2@ HAVE_I18N = @HAVE_I18N@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIBXSLT_CFLAGS = @LIBXSLT_CFLAGS@ LIBXSLT_LIBS = @LIBXSLT_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_SUPPORTS_QT = @MSGFMT_SUPPORTS_QT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ TUTORIALS = @TUTORIALS@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XMLMERGE = @XMLMERGE@ XMLSEC_CFLAGS = @XMLSEC_CFLAGS@ XMLSEC_LIBS = @XMLSEC_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ aqbanking_backends = @aqbanking_backends@ aqbanking_cfg_searchdir = @aqbanking_cfg_searchdir@ aqbanking_data_searchdir = @aqbanking_data_searchdir@ aqbanking_headerdir = @aqbanking_headerdir@ aqbanking_headerdir_am = @aqbanking_headerdir_am@ aqbanking_includes = @aqbanking_includes@ aqbanking_internal_libs = @aqbanking_internal_libs@ aqbanking_ldflags = @aqbanking_ldflags@ aqbanking_libs = @aqbanking_libs@ aqbanking_locale_searchdir = @aqbanking_locale_searchdir@ aqbanking_modules = @aqbanking_modules@ aqbanking_pkgdatadir = @aqbanking_pkgdatadir@ aqbanking_plugin_searchdir = @aqbanking_plugin_searchdir@ aqbanking_plugindir = @aqbanking_plugindir@ aqbanking_plugins_backends_dirs = @aqbanking_plugins_backends_dirs@ aqbanking_plugins_backends_libs = @aqbanking_plugins_backends_libs@ aqbanking_plugins_bankinfo_dirs = @aqbanking_plugins_bankinfo_dirs@ aqbanking_plugins_bankinfo_libs = @aqbanking_plugins_bankinfo_libs@ aqbanking_plugins_imexporters_dirs = @aqbanking_plugins_imexporters_dirs@ aqbanking_plugins_imexporters_libs = @aqbanking_plugins_imexporters_libs@ aqbanking_plugins_parsers_dirs = @aqbanking_plugins_parsers_dirs@ aqbanking_symlinkdir = @aqbanking_symlinkdir@ aqbanking_sys_is_windows = @aqbanking_sys_is_windows@ aqbankingpp_modules = @aqbankingpp_modules@ aqebics_datadir = @aqebics_datadir@ aqebics_includes = @aqebics_includes@ aqebics_internal_libs = @aqebics_internal_libs@ aqebics_ldflags = @aqebics_ldflags@ aqebics_libs = @aqebics_libs@ aqfints_datadir = @aqfints_datadir@ aqhbci_datadir = @aqhbci_datadir@ aqhbci_includes = @aqhbci_includes@ aqhbci_internal_libs = @aqhbci_internal_libs@ aqhbci_ldflags = @aqhbci_ldflags@ aqhbci_libs = @aqhbci_libs@ aqofxconnect_includes = @aqofxconnect_includes@ aqofxconnect_internal_libs = @aqofxconnect_internal_libs@ aqofxconnect_libs = @aqofxconnect_libs@ aqpaypal_includes = @aqpaypal_includes@ aqpaypal_internal_libs = @aqpaypal_internal_libs@ aqpaypal_libs = @aqpaypal_libs@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gmp_libs = @gmp_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_dir = @gwenhywfar_dir@ gwenhywfar_has_crypt = @gwenhywfar_has_crypt@ gwenhywfar_headers = @gwenhywfar_headers@ gwenhywfar_includes = @gwenhywfar_includes@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_plugins = @gwenhywfar_plugins@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ typemaker2_exe = @typemaker2_exe@ visibility_cflags = @visibility_cflags@ with_aqebics = @with_aqebics@ with_aqhbci = @with_aqhbci@ SUBDIRS = aqbanking-cli mkdeinfo all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/tools/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/tools/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic clean-libtool cscopelist-am ctags \ ctags-am distclean distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am .PRECIOUS: Makefile sources: for d in $(SUBDIRS); do \ $(MAKE) -C $$d sources; \ done built_sources: for d in $(SUBDIRS); do \ $(MAKE) -C $$d built_sources; \ done ; cppcheck: for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done typefiles: for d in $(SUBDIRS); do \ $(MAKE) -C $$d typefiles; \ done typedefs: for d in $(SUBDIRS); do \ $(MAKE) -C $$d typedefs; \ done # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: aqbanking-6.6.1/src/tools/Makefile.am0000664000175000017500000000064014043610745014371 00000000000000SUBDIRS=aqbanking-cli mkdeinfo sources: for d in $(SUBDIRS); do \ $(MAKE) -C $$d sources; \ done built_sources: for d in $(SUBDIRS); do \ $(MAKE) -C $$d built_sources; \ done ; cppcheck: for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done typefiles: for d in $(SUBDIRS); do \ $(MAKE) -C $$d typefiles; \ done typedefs: for d in $(SUBDIRS); do \ $(MAKE) -C $$d typedefs; \ done aqbanking-6.6.1/src/Makefile.am0000664000175000017500000000063014043610744013227 00000000000000SUBDIRS=libs tools test sources: for d in $(SUBDIRS); do \ $(MAKE) -C $$d sources; \ done built_sources: for d in $(SUBDIRS); do \ $(MAKE) -C $$d built_sources; \ done ; cppcheck: for d in $(SUBDIRS); do \ $(MAKE) -C $$d cppcheck; \ done typefiles: for d in $(SUBDIRS); do \ $(MAKE) -C $$d typefiles; \ done typedefs: for d in $(SUBDIRS); do \ $(MAKE) -C $$d typedefs; \ done aqbanking-6.6.1/admin/0000755000175000017500000000000015037736155011564 500000000000000aqbanking-6.6.1/admin/Makefile.in0000644000175000017500000004120015037736024013541 00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = admin ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/distri.m4 $(top_srcdir)/m4/gwenhywfar.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/os.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADD_ACLOCAL_FLAGS = @ADD_ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AQBANKING_CLI_VERSION_STRING = @AQBANKING_CLI_VERSION_STRING@ AQBANKING_FINTS_VERSION_STRING = @AQBANKING_FINTS_VERSION_STRING@ AQBANKING_SO_AGE = @AQBANKING_SO_AGE@ AQBANKING_SO_CURRENT = @AQBANKING_SO_CURRENT@ AQBANKING_SO_EFFECTIVE = @AQBANKING_SO_EFFECTIVE@ AQBANKING_SO_REVISION = @AQBANKING_SO_REVISION@ AQBANKING_VERSION_BUILD = @AQBANKING_VERSION_BUILD@ AQBANKING_VERSION_FULL_STRING = @AQBANKING_VERSION_FULL_STRING@ AQBANKING_VERSION_MAJOR = @AQBANKING_VERSION_MAJOR@ AQBANKING_VERSION_MINOR = @AQBANKING_VERSION_MINOR@ AQBANKING_VERSION_PATCHLEVEL = @AQBANKING_VERSION_PATCHLEVEL@ AQBANKING_VERSION_RELEASE_STRING = @AQBANKING_VERSION_RELEASE_STRING@ AQBANKING_VERSION_STRING = @AQBANKING_VERSION_STRING@ AQBANKING_VERSION_TAG = @AQBANKING_VERSION_TAG@ AQEBICS_CFLAGS = @AQEBICS_CFLAGS@ AQEBICS_LIBS = @AQEBICS_LIBS@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATETIME = @DATETIME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_EXCLUDE_PATTERNS = @DOXYGEN_EXCLUDE_PATTERNS@ DOXYGEN_FILE_PATTERNS = @DOXYGEN_FILE_PATTERNS@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENGUI_GTK2_CFLAGS = @GWENGUI_GTK2_CFLAGS@ GWENGUI_GTK2_LIBS = @GWENGUI_GTK2_LIBS@ GWENHYWFAR_MINIMUM_VERSION = @GWENHYWFAR_MINIMUM_VERSION@ HAVE_GWENGUI_GTK2 = @HAVE_GWENGUI_GTK2@ HAVE_I18N = @HAVE_I18N@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIBXSLT_CFLAGS = @LIBXSLT_CFLAGS@ LIBXSLT_LIBS = @LIBXSLT_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_SUPPORTS_QT = @MSGFMT_SUPPORTS_QT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ TUTORIALS = @TUTORIALS@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XMLMERGE = @XMLMERGE@ XMLSEC_CFLAGS = @XMLSEC_CFLAGS@ XMLSEC_LIBS = @XMLSEC_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ aqbanking_backends = @aqbanking_backends@ aqbanking_cfg_searchdir = @aqbanking_cfg_searchdir@ aqbanking_data_searchdir = @aqbanking_data_searchdir@ aqbanking_headerdir = @aqbanking_headerdir@ aqbanking_headerdir_am = @aqbanking_headerdir_am@ aqbanking_includes = @aqbanking_includes@ aqbanking_internal_libs = @aqbanking_internal_libs@ aqbanking_ldflags = @aqbanking_ldflags@ aqbanking_libs = @aqbanking_libs@ aqbanking_locale_searchdir = @aqbanking_locale_searchdir@ aqbanking_modules = @aqbanking_modules@ aqbanking_pkgdatadir = @aqbanking_pkgdatadir@ aqbanking_plugin_searchdir = @aqbanking_plugin_searchdir@ aqbanking_plugindir = @aqbanking_plugindir@ aqbanking_plugins_backends_dirs = @aqbanking_plugins_backends_dirs@ aqbanking_plugins_backends_libs = @aqbanking_plugins_backends_libs@ aqbanking_plugins_bankinfo_dirs = @aqbanking_plugins_bankinfo_dirs@ aqbanking_plugins_bankinfo_libs = @aqbanking_plugins_bankinfo_libs@ aqbanking_plugins_imexporters_dirs = @aqbanking_plugins_imexporters_dirs@ aqbanking_plugins_imexporters_libs = @aqbanking_plugins_imexporters_libs@ aqbanking_plugins_parsers_dirs = @aqbanking_plugins_parsers_dirs@ aqbanking_symlinkdir = @aqbanking_symlinkdir@ aqbanking_sys_is_windows = @aqbanking_sys_is_windows@ aqbankingpp_modules = @aqbankingpp_modules@ aqebics_datadir = @aqebics_datadir@ aqebics_includes = @aqebics_includes@ aqebics_internal_libs = @aqebics_internal_libs@ aqebics_ldflags = @aqebics_ldflags@ aqebics_libs = @aqebics_libs@ aqfints_datadir = @aqfints_datadir@ aqhbci_datadir = @aqhbci_datadir@ aqhbci_includes = @aqhbci_includes@ aqhbci_internal_libs = @aqhbci_internal_libs@ aqhbci_ldflags = @aqhbci_ldflags@ aqhbci_libs = @aqhbci_libs@ aqofxconnect_includes = @aqofxconnect_includes@ aqofxconnect_internal_libs = @aqofxconnect_internal_libs@ aqofxconnect_libs = @aqofxconnect_libs@ aqpaypal_includes = @aqpaypal_includes@ aqpaypal_internal_libs = @aqpaypal_internal_libs@ aqpaypal_libs = @aqpaypal_libs@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gmp_libs = @gmp_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_dir = @gwenhywfar_dir@ gwenhywfar_has_crypt = @gwenhywfar_has_crypt@ gwenhywfar_headers = @gwenhywfar_headers@ gwenhywfar_includes = @gwenhywfar_includes@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_plugins = @gwenhywfar_plugins@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ typemaker2_exe = @typemaker2_exe@ visibility_cflags = @visibility_cflags@ with_aqebics = @with_aqebics@ with_aqhbci = @with_aqhbci@ EXTRA_DIST = insert_api.sh glade-fixup fixuifiles 0BUILD.tmpl all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu admin/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu admin/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags-am uninstall uninstall-am .PRECIOUS: Makefile typefiles: typedefs: # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: aqbanking-6.6.1/admin/insert_api.sh0000775000175000017500000000117314043610744014173 00000000000000#!/bin/sh # ------------------------------------------------------------------------- # This tool inserts export declarations into declarations of classes. e.g. # class MYCLASS : SOMECLASS # { lalala # ... # would become # class QBANKING_API MYCLASS : SOMECLASS # { lalala # ... # when used for QBanking. # The first (and only) argument is the export declaration to insert. # It reads from stdin and writes to stdout. # # (c) 2006 Martin Preuss # fapi=$1 while read line; do case "$line" in class\ *\ :*) line=`echo "$line" | sed "s/class /class $fapi /"` ;; esac echo "$line" done aqbanking-6.6.1/admin/glade-fixup0000775000175000017500000000117514043610744013634 00000000000000#!/bin/sh # # Remove entries that are for post-gtk2.4 attributes. Glade on a # gtk2.4 system will complain when unknown attributes are present on a # widget. # # This script should be run from the top-level source directory before # committing changed glade files. # # This script has been taken from Gnucash (2006/01/24) -- aquamaniac # if test -d src ; then SEARCHDIRS=src else SEARCHDIRS=. fi find ${SEARCHDIRS} -name \*.glade | xargs \ sed -i -e '/name="focus_on_map"/d' \ -e '/name="ellipsize"/d' \ -e '/name="width_chars"/d' \ -e '/name="single_line_mode"/d' \ -e '/name="angle"/d' aqbanking-6.6.1/admin/Makefile.am0000664000175000017500000000012414044534775013540 00000000000000EXTRA_DIST=insert_api.sh glade-fixup fixuifiles 0BUILD.tmpl typefiles: typedefs: aqbanking-6.6.1/admin/0BUILD.tmpl0000664000175000017500000000576514044534775013341 00000000000000 $(gmp_cflags) $(gwenhywfar_cflags) -I$(topsrcdir)/src/libs -I$(topbuilddir)/src/libs -I$(topbuilddir) -I$(topsrcdir) $(gmp_cflags) $(gwenhywfar_cflags) -I$(topsrcdir)/src/libs -I$(topbuilddir)/src/libs -I$(topbuilddir) -I$(topsrcdir) --include=$(topsrcdir)/src/libs/aqbanking/typemaker2/c --include=$(builddir) --include=$(srcdir) $(visibility_cflags) $(visibility_cflags) --api=AQBANKING_API $(local/built_headers_pub) $(local/built_headers_priv) $(local/headers_pub) $(local/headers_priv) $(local/typefiles) $(local/sources) aqbanking-6.6.1/admin/fixuifiles0000775000175000017500000002264714043610744013605 00000000000000#!/usr/bin/perl -w # fixuifiles processes .ui files and removes some insanity: # * Too high minimum Qt version (see $minversion_* in the top of the script) # * Hardcoded untranslatable Alt+Letter accels (auto-added by Qt Designer) # * Captions that are equal to classname (auto-added by Qt Designer) # This script is licensed under the GPL version 2. # (c) 2004 David Faure # Based on fixkdeincludes, (c) 2001-2003 Dirk Mueller use strict; use File::Basename; use Cwd; # Fix the version number in .ui files if it's bigger than this: my $default_minversion_maj = 3; my $default_minversion_min = 3; # Known words which are ok as captions my %knowncaptions = ( 'Settings' => '', 'Statistics' => '', 'General' => '', 'Tracks' => '', 'Constants' => '', 'Preferences' => '', 'Encryption' => '' ); # declaration of useful subroutines sub process_ui_file($); sub find_ui_files($); sub read_required_version($); # some global variables my $verbose = 0; # turns on debugging my $omit_Qt_check = 0; # turns off Qt version checking my @explicitfiles = (); # filled in if passing files on the command line my $minversion_maj = $default_minversion_maj; my $minversion_min = $default_minversion_min; while (defined ($ARGV[0])) { $_ = shift; if (/^--help$|^-h$/) { print "Usage: fixuifiles [OPTIONS] files...\n"; print "Options are:\n"; print "\t-v, --verbose\tBe verbose\n"; print "\t--omitqtcheck\tDoes not check for Qt minimum version\n"; exit 0; } elsif (/^--verbose$|^-v$/) { $verbose = 1; }elsif (/^--omitqtcheck/) { $omit_Qt_check = 1; } elsif (!/^-/) { push @explicitfiles, $_; } } # Find .ui files in the given dir sub find_ui_files($) { my ( $dir ) = @_; opendir (DIR, "$dir") || die "Couldn't read '$dir'\n"; my @files = grep { /^.*\.ui$/ } readdir(DIR); closedir(DIR); #print "found files: [ " . join(' ', @files) . " ] in $dir\n" if ($verbose); # prefix them with $dir my @retfiles = (); foreach my $file(@files) { push @retfiles, "$dir/$file"; } return @retfiles; } # Ensure the version at the top of the file is not too high sub fix_version($) { my $srcfile = shift @_; open(SRC, "< $srcfile") || die "fix_version: couldn't open '$srcfile'\n"; my @contents = ; my @fixedcontents = (); close(SRC); my $needfix = 0; my $foundversion = 0; foreach my $line (@contents) { if (!$foundversion && $line =~ m/version=\"([0-9]+)\.([0-9]+)(\.[0-9]+)?\"/) { my $version_maj = $1; my $version_min = $2; if ( $version_maj > $minversion_maj || ( $version_maj == $minversion_maj && $version_min > $minversion_min ) ) { $line =~ s/version=\"[0-9]+\.[0-9]+\"/version=\"$minversion_maj.$minversion_min\"/o; $needfix = 1; print "$srcfile: version was $version_maj.$version_min, set to $minversion_maj.$minversion_min\n"; } $foundversion = 1; } push @fixedcontents, $line; } if (!$foundversion) { # TODO improve so that the script adds the necessary line print "$srcfile has no UI version, please fix it\n"; } if ($needfix) { open(SRC, "> $srcfile") || die "fix_version: couldn't open '$srcfile' for writing\n"; print SRC @fixedcontents; close(SRC); } } # Ensure no auto-added Alt+letter accel exists - those are untranslatable sub fix_accels($) { my $srcfile = shift @_; open(SRC, "< $srcfile") || die "fix_accels: couldn't open '$srcfile'\n"; my @contents = ; close(SRC); return if ( !grep( /Alt\+[A-Z]<\/string>/, @contents )); my @fixedcontents = (); my $firstline; my $accelsremoved = 0; my $inside_accel = 0; # inside_accel is 0 before # 1 after and before # 2 after if alt+letter, and before foreach my $line (@contents) { if ( $inside_accel == 1 ) { if ( $line =~ m/(Alt\+[A-Z])<\/string>/ ) { print "$srcfile: accel $1 removed\n" if ($verbose); $inside_accel = 2; $accelsremoved++; } else { # Not alt+letter, keep accel push @fixedcontents, $firstline; $inside_accel = 0; } } if ($line =~ m/property name=\"accel\"/) { $inside_accel = 1; $firstline = $line; } if ($inside_accel == 0) { push @fixedcontents, $line; } $inside_accel = 0 if ($inside_accel && $line =~ m/<\/property>/); } if ($accelsremoved) { print "$srcfile: $accelsremoved accels removed\n"; open(SRC, "> $srcfile") || die "fix_accels: couldn't open '$srcfile' for writing\n"; print SRC @fixedcontents; close(SRC); } } # Ensure no auto-added includehints exist sub fix_includehints($) { my $srcfile = shift @_; open(SRC, "< $srcfile") || die "fix_includehints: couldn't open '$srcfile'\n"; my @contents = ; close(SRC); return if ( !grep( /.*<\/includehint>/, @contents )); my @fixedcontents = (); my $includesremoved = 0; my $inside_include = 0; # inside_include is 0 before # 1 after foreach my $line (@contents) { if ( $inside_include == 1 ) { if ( $line =~ m/(.*)<\/includehint>/ ) { print "$srcfile: includehint $1 removed\n" if ($verbose); $includesremoved++; } } if ($line =~ m//) { $inside_include = 1; } if ($inside_include == 0) { push @fixedcontents, $line; } $inside_include = 0 if ($inside_include && $line =~ m/<\/includehints>/); } if ($includesremoved) { print "$srcfile: $includesremoved includehints removed\n"; open(SRC, "> $srcfile") || die "fix_includehints: couldn't open '$srcfile' for writing\n"; print SRC @fixedcontents; close(SRC); } } # Ensure no auto-added caption exists - it's pretty stupid to have to # translate Form1 or MyClassName sub fix_captions($) { my $srcfile = shift @_; open(SRC, "< $srcfile") || die "fix_captions: couldn't open '$srcfile'\n"; my @contents = ; close(SRC); my @fixedcontents = (); my $firstline; my $class = ""; my $captionsremoved = 0; my $inside_caption = 0; # inside_caption is 0 before # 1 after and before # 2 after if caption should be removed, and before foreach my $line (@contents) { $class = $1 if ($line =~ m/(.*)<\/class>/); if ( $inside_caption == 1 ) { $line =~ m/(.*)<\/string>/ || die "Malformed XML (no string under caption)"; my $caption = $1; print "$srcfile: caption='$caption' class='$class'\n" if ($verbose); if ( ( $caption eq $class && !defined $knowncaptions{$caption} ) || ($caption =~ m/Form[0-9]/) ) { if ( $caption =~ m/^[A-Z][a-z]*$/ ) { print "$srcfile: removing caption '$caption' (warning! could be real caption)\n"; } else { print "$srcfile: removing caption '$caption'\n"; } $inside_caption = 2; $captionsremoved++; } else { # Real caption, keep it print "$srcfile: keeping caption '$caption'\n" if ($verbose); push @fixedcontents, $firstline; $inside_caption = 0; } } if ($line =~ m/property name=\"caption\"/) { $inside_caption = 1; $firstline = $line; } if ($inside_caption == 0) { push @fixedcontents, $line; } $inside_caption = 0 if ($inside_caption && $line =~ m/<\/property>/); } if ($captionsremoved) { open(SRC, "> $srcfile") || die "fix_captions: couldn't open '$srcfile' for writing\n"; print SRC @fixedcontents; close(SRC); } } # Find a .qt_minversion in $dir or any parent directory. sub read_required_version($) { my $dir = Cwd::abs_path( shift @_ ); $minversion_maj = $default_minversion_maj; $minversion_min = $default_minversion_min; while ( length($dir) > 1 ) { my $versfile = "$dir/.qt_minversion"; my $version; if ( open (VERSFILE, "< $versfile") ) { while () { $version = $_ if (!/^#/); } close(VERSFILE); } else { $versfile = "$dir/configure.in.in"; if ( open (VERSFILE, "< $versfile") ) { while () { $version = $1 if m/^#MIN_CONFIG\(([0-9]+.[0-9]+)\)/; } close(VERSFILE); } } if (defined $version && $version =~ m/([0-9]+)\.([0-9]+)/) { $minversion_maj = $1; $minversion_min = $2; print "Found min version $1.$2 in $versfile\n" if ($verbose); return; } $dir = dirname($dir); } } # Process one .ui file sub process_ui_file($) { my $file = shift @_; &read_required_version( dirname($file) ); print "Checking: $file\n" if($verbose); &fix_version($file) if(!$omit_Qt_check); &fix_accels($file); &fix_captions($file); &fix_includehints($file); } ############################################################################# # here is the main logic # # process files from the command line, if any if ( $#explicitfiles >= 0 ) { foreach my $file( @explicitfiles ) { &process_ui_file( $file ); } exit 0; } # first generate a list of subdirectories my @dirlist = (); push @dirlist, "."; foreach my $dir ( @dirlist ) { opendir (DIR, "$dir") || warn "Couldn't read '$dir'"; my $subdir = ""; while( $subdir = readdir(DIR)) { next if ($subdir =~ /^\./); next if !( -d "$dir/$subdir"); push @dirlist, "$dir/$subdir"; } closedir(DIR); } # now iterate over all subdirs foreach my $dir(@dirlist) { my @uifile = find_ui_files($dir); foreach my $file(@uifile) { &process_ui_file($file); } } aqbanking-6.6.1/TODO0000664000175000017500000000361714156464025011110 00000000000000Next: ===== - HBCI: - when TAN is requested on GetAccounts: - dispatch response to first message, not to TAN request (#244)! - AqBanking - check SEPA conformity, show warning!! - remove AB_Gui_CheckCert() - remove AB_Banking_MakeGermanIban() - remove AB_ERROR - mark following functions as deprecated: - AB_Banking_LoadSharedConfig() - AB_Banking_SaveSharedConfig() - AB_Banking_LockSharedConfig() - AB_Banking_UnlockSharedConfig() - AB_Banking_GetAppName() - AB_Banking_GetEscapedAppName() - AB_Banking_GetUserDataDir() - AB_Banking_GetSharedDataDir() - HBCI: - show name and number of segment a result segment refers to in log messages - check BPD "StoreDays" for segment HKKAZ - AqBanking - let AB_ImExporterAccountInfo_List_Find() check account type etc as well - HBCI: - always look for HIUPA/HIUPD in bank responses, especially 1822 sends account lists even when there is an error - XML-Exporter: - GWEN_XMLNode_SetCharValueByPath(): Add flag to specify whether to escape to XML (e.g. "&"->"&") - AQHBCI: - simplify functions: - AH_JobQueue_DispatchMessage() - AH_JobQueue_ToMessage() - AH_JobQueue_AddJob() - AH_Msg_DecodeMsg() - AH_Msg_LogMessage() - TAN entry: Maybe move that completely to AqBanking? GWEN_Gui_GetPasswords has become a monster... - AB_BANKING: - find out why AB_Value_toString doesn't work when importing cma_052 - fix apidoc for provider.h - create APIDOC for banking jobs - remove class aqhbci (move to ah_provider) - sort "#include" directives in backends, make them more specific - AqHBCI: - HKEKA Mid-term ======== - release AqBanking under LGPL Long-term ========= - remove message engine stuff, use parser from AqFints instead Old === - loganalyzer: read messages from FASTBUFFER instead from IO - send a local branch under the same name to server: "git push -u origin HEAD" aqbanking-6.6.1/test-driver0000755000175000017500000001141714215102164012576 00000000000000#! /bin/sh # test-driver - basic testsuite driver script. scriptversion=2018-03-07.03; # UTC # Copyright (C) 2011-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This file is maintained in Automake, please report # bugs to or send patches to # . # Make unconditional expansion of undefined variables an error. This # helps a lot in preventing typo-related bugs. set -u usage_error () { echo "$0: $*" >&2 print_usage >&2 exit 2 } print_usage () { cat <"$log_file" "$@" >>"$log_file" 2>&1 estatus=$? if test $enable_hard_errors = no && test $estatus -eq 99; then tweaked_estatus=1 else tweaked_estatus=$estatus fi case $tweaked_estatus:$expect_failure in 0:yes) col=$red res=XPASS recheck=yes gcopy=yes;; 0:*) col=$grn res=PASS recheck=no gcopy=no;; 77:*) col=$blu res=SKIP recheck=no gcopy=yes;; 99:*) col=$mgn res=ERROR recheck=yes gcopy=yes;; *:yes) col=$lgn res=XFAIL recheck=no gcopy=yes;; *:*) col=$red res=FAIL recheck=yes gcopy=yes;; esac # Report the test outcome and exit status in the logs, so that one can # know whether the test passed or failed simply by looking at the '.log' # file, without the need of also peaking into the corresponding '.trs' # file (automake bug#11814). echo "$res $test_name (exit status: $estatus)" >>"$log_file" # Report outcome to console. echo "${col}${res}${std}: $test_name" # Register the test result, and other relevant metadata. echo ":test-result: $res" > $trs_file echo ":global-test-result: $res" >> $trs_file echo ":recheck: $recheck" >> $trs_file echo ":copy-in-global-log: $gcopy" >> $trs_file # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: aqbanking-6.6.1/README0000664000175000017500000004220314300721174011262 00000000000000 Content ======= 1. What Is AqBanking ? 1.1. Generic Online Banking Interface 1.2. Generic Financial Data Importer/Exporter Framework 1.3. Bank/Account Information 2. Supported Platforms 3. Supported Backends 3.1. HBCI 3.2. OFX Direct Connect 3.3. EBICS 3.4. Paypal 3.5. None 4. What Do I Need ? 4.1. Required Packages 4.2. Applications 5. Building AqBanking 5.1. Building from the Tar File 5.2. Building from GIT 5.3. Building the API Documentation 5.4. Building using gwbuild 6. Windows Registry Keys Used 6.1. Software\\AqBanking\\Paths\\pkgdatadir 6.2. Software\\AqBanking\\Paths\\sysconfdir 6.3. Software\\AqBanking\\Paths\\bankinfodir 6.4. Software\\AqBanking\\Paths\\providerdir 6.5. Software\\AqBanking\\Paths\\importerdir 7. Environment Variables Used 7.1. AQBANKING_LOGLEVEL 7.2. AQBANKING_STORE_JOBLOGS 7.3. AQHBCI_LOGBOOKED 7.4. AQHBCI_LOGNOTED 7.5. AQHBCI_DEBUG_JOBS 7.6. AQOFX_LOG_COMM 8 . Using Your Own Profiles for Im-/Exporters 9. Thanks 10. Translation 11. Changes from AqBanking 5.x to 6.x 1. What Is AqBanking ? ====================== AqBanking is a library for online banking and financial applications. It has three major goals which are described in the following paragraphs. (Note: Information in German can be found on https://linuxwiki.de/AqBanking ) The homepage of AqBanking is https://www.aqbanking.de/ 1.1. Generic Online Banking Interface ------------------------------------- The intention of AqBanking is to provide a middle layer between the program and the various Online Banking libraries (e.g. AqHBCI, OpenHBCI etc). The real work is done in so-called banking backends. See chapter 3 for a list of supported backends. 1.2. Generic Financial Data Importer/Exporter Framework ------------------------------------------------------- AqBanking uses various plugins to simplify import and export of financial data. It also provides the administration of profiles on a per import/export plugin basis. Currently there are plugins for the following formats: - Importers: - DTAUS (German financial format) - SWIFT (MT940 and MT942) - OFX - CSV - OpenHBCI1 transactions - ERI - Q43 - XML (various formats like SEPA-PAIN, CAMT, OFX) - Exporters - DTAUS (German financial format) - CSV - XML (various formats like SEPA-PAIN, CAMT, OFX) 1.3. Bank/Account Information ----------------------------- AqBanking supports plugins which allow lookup of bank code/ account id pair validity. Currently AqBanking provides informations about: - ca 20,000 German banks 2. Supported Platforms ====================== AqBanking uses the library Gwenhywfar (https://www.aqbanking.de/) for abstraction of the underlying system. So it should work on any system for which Gwenhywfar is available. This includes (but is not limited to): - Linux (of course ;-) - Windows - MacOSX 10.5 and newer - most POSIX systems (such as the BSDs) should also be supported, however, this is untested 3. Supported Backends ===================== AqBanking includes all its currently known banking backends. 3.1. HBCI --------- The backend AqHBCI provides support for the German online banking protocol called "Homebanking Computer Interface". It is a national standard provided by most German credit institutes. The following security media are supported: - DDV chipcard (DES-DES-Verfahren) - RSA chipcard (RSA-DES-Hybrid mode) - OpenHBCI keyfile (either OpenHBCI 1 or 2, this medium allows continued use with OpenHBCI in parallel) - PIN/TAN (PIN/TAN mode using HTTP over SSL) This backend supports the HBCI versions 2.01, 2.10, 2.20 and 3.00 3.2. OFX Direct Connect ----------------------- This backend provides support for an online banking protocol used in the United States, Canada and maybe in the United Kingdom. 3.3. EBICS ---------- EBICS is the successor of the German banking protocol FTAM. It is used in commercial environments. 3.4. Paypal ----------- This backend uses Paypal's native API for retrieving transactions. 3.5. None --------- This is a fallback module which can be used by applications for accounts which are not managed by any online banking backend. 4. What Do I Need ? =================== 4.1. Required Packages ---------------------- AqBanking has several direct dependencies: - "Gwenhywfar" >= 3.99.0, available from https://www.aqbanking.de/, is absolutely required - "GMP", the GNU MP Bignum Library available from https://gmplib.org/index.html is required for calculations 4.2. Applications ----------------- These applications fully or partially support AqBanking: - AqFinance (https://www2.aquamaniac.de/sites/aqfinance/index.php) - Gnucash (https://www.gnucash.org/) - KMyMoney (https://www.kmymoney.org/) - OrgaMon (https://www.orgamon.org/) The aqbanking package also includes several command-line tools (aqbanking-tool, aqhbci-tool). 5. Building AqBanking ===================== 5.1. Building from the Tar File ------------------------------- #>./configure #>make #>make install (the last step most probably requires you to be root) Compilation hints for specific platforms: - For FreeBSD and potentially other non-Linux platform, it might be necessary to use "gmake" instead of the "make" program. - Also, if your "make" program happens to complain about the variable definition "I18NFILES = $(shell cat ..." (in Makefile.in around line 230) and related definitions, then you need to look for comments in the Makefile about "old make programs". Follow the instructions in these comments, i.e. set some variable definitions to an empty variable manually. This should remove all potentially incompatible directives from the Makefile. - (especially on Mac/Darwin): If your configure run does not detect the QT libraries and it says "checking for qt3 libraries... not found", then you need to specify the linker flags for qt3 manually in the env variable qt3_libs. I.e. if your qt3 library files are in /opt/qt/lib and is called libqt-mt, then you need to specify ./configure qt3_libs="-L/opt/qt/lib -lqt-mt" 5.2. Building from GIT ---------------------- #> make -fMakefile.cvs #> ./configure #> make typedefs #> make typefiles and continue as described in "5.1. Building from the Tar File". 5.3. Building the API Documentation ----------------------------------- #>make srcdoc If you want to install a linked API documentation (which links against the API documentations of the projects AqBanking depends on) use this: #> make install-srcdoc This installs the linked doc to the path you gave to ./configure by "--with-docpath=PATH". It defaults to "$HOME/apidoc", which means it does *not* obey the --prefix argument. 5.4. Building using gwbuild --------------------------- Download the git version or a tarball of AqBanking. Create a folder "build" somewhere (e.g. completely outside the source tree or in its main folder), change into that "build" folder and perform the following steps: #> gwbuild -s PATH_TO_SOURCE_TREE #> gwbuild -p #> gwbuild -B tm2builder #> gwbuild The last two steps accept the argument "-j XX" which lets you specify the number of parallel build processes to use. 6. Windows Registry Keys Used ============================= Some AqBanking versions might use registry keys below HKEY_CURRENT_USER. These are at the moment only versions shipped with GnuCash (at least that used to be the case which is why handling of registry keys was introduced in the first place). Most versions of AqBanking don't use the registry to determine installation paths because those versions are filesystem relocatable, so they don't need the registry. At any rate, those versions that still do use the registry use the following keys. These keys are created by the setup.exe which contains the binary package for WIN32 platforms. 6.1. Software\\AqBanking\\Paths\\pkgdatadir ------------------------------------------- This is the data folder (i.e. $PREFIX/share/aqbanking on POSIX systems). 6.2. Software\\AqBanking\\Paths\\sysconfdir ------------------------------------------- This is the folder containing system configuration files. (i.e. $PREFIX/etc on POSIX systems). 6.3. Software\\AqBanking\\Paths\\bankinfodir ------------------------------------------- This folder is used to store bankinfo plugins. 6.4. Software\\AqBanking\\Paths\\providerdir ------------------------------------------- This folder is used to store provider (backend) plugins. 6.5. Software\\AqBanking\\Paths\\importerdir ------------------------------------------- This folder is used to store importer/exporter plugins. 7. Environment Variables Used ============================= 7.1. AQBANKING_LOGLEVEL ----------------------- This variable stores the loglevel to be used for AqBanking. Possible values are: emergency, alert, critical, error, warning, notice, info, debug and verbous. Each following log level includes the previous one. 7.2. AQBANKING_STORE_JOBLOGS ---------------------------- If this variable is defined then AqBanking will always store job logs with jobs. Otherwise job logs are only stored for jobs with a status other than "finished". Job logs can become quite big. 7.3. AQHBCI_LOGBOOKED --------------------- If this environment variable exists then the file "/tmp/booked.mt" is created upon reception of transactions via the job GetTransactions. This file then contains a SWIFT MT940 document which can be very helpfull in case there is a problem in the SWIFT parser. 7.4. AQHBCI_LOGNOTED -------------------- Same as AQHBCI_LOGBOOKED but for noted transactions (which are transactions which are noted but not yet booked) 7.5. AQHBCI_DEBUG_JOBS ---------------------- If this variable exists then additional debugging data is stored with each job. 7.6. AQOFX_LOG_COMM ------------------- If this variable exists then all OFX communication is logged to /tmp/ofx.log. This is only needed when debugging AqOfxConnect. WARNING: This might expose your user id and password to everyone who can read that file! 8. Using Your Own Profiles for Im-/Exporters ============================================ You can create your own profiles to be used with the various importers. For AqBanking to recognize your private profiles they must be stored in the user local folder. E.g. CSV profiles on Linux must be stored in "$HOME/.aqbanking/imexporters/csv/profiles/". 9. Thanks ========== I wish to thank the following (among others) people for their support in making AqBanking work: - Christian Stimming (build-system and tarball cleanup, translations, inputs) - Jens Koerner (did some huge jobs to provide German translation) - David Reiser (for helping in debugging the OFX DirectConnect code) - Christoph Bohl (for helping with the YellowNet backend) - and of course the many people who submitted bug reports !! 10. Translation =============== To work on translation of this project you need the following packages on Debian based systems: - po4a - translate-toolkit (for "msghack") You can then create the necessary files with: - make catalogs - make merge This will create the necessary *.pot and *.po files, the latter should then be translated. 11. Changes from AqBanking 5.x to 6.x ====================================== These are the major changes which need to be followed by applications when using AqBanking6: - AB_TRANSACTION: - remoteName: - changed type from GWEN_STRINGLIST to simple char* - purpose: - changed type from GWEN_STRINGLIST to simple char* (lines separated by "\n") - date: - changed type from GWEN_TIME to GWEN_DATE - valutaDate: - changed type from GWEN_TIME to GWEN_DATE - firstExecutionDate: - renamed to firstDate (used in a more generic way) - lastExecutionDate: - renamed to lastDate (used in a more generic way) - unitPrice: - renamed to unitPriceValue (because there is also unitPriceDate) - commission: - renamed to commissionValue - sequenceType: - renamed to sequence - addPurpose(): - changed to addPurposeLine() - addRemoteName(): - removed -> use AB_Transaction_SetRemoteName() - AB_TRANSACTION_LIMITS - valuesTextKey: - removed - maxLinesRemoteName: - removed - valuesCycleMonth: - changed type from GWEN_STRINGLIST to array of uint8_t - valuesExecutionDayMonth: - changed type from GWEN_STRINGLIST to array of uint8_t - valuesCycleWeek: - changed type from GWEN_STRINGLIST to array of uint8_t - valuesExecutionDayWeek: - changed type from GWEN_STRINGLIST to array of uint8_t - AB_TRANSACTION_TYPE - euTransfer: - removed - AB_TRANSACTION_SEQUENCETYPE: - renamed to AB_TRANSACTION_SEQUENCE - AB_JobGetTransactions: - setFromTime(): - renamed to setFromDate(), changed arg type from GWEN_TIME to GWEN_DATE - setToTime(): - renamed to setToDate(), changed arg type from GWEN_TIME to GWEN_DATE - AB_IMEXPORTER_CONTEXT: - AB_IMEXPORTER_ACCOUNTINFO: - all kind of transactions are now in a single AB_TRANSACTION_LIST, removing the previously dedicated lists for notedTransactions, transfers, debitNotes etc. You can now distinguish the type of transaction by inspecting the field "type" of AB_TRANSACTION. Normally only one type of transaction is in use at any time anyway, e.g. when sending debit note requests the AB_IMEXPORTER_CONTEXT will only contain debitNotes anyway. - changed list traversal methods. Previously you would iterate through the list of transactions like this: -------------------------------------------------------------------------X8 t=AB_ImExporterAccountInfo_GetFirstTransaction(iea); ... t=AB_ImExporterAccountInfo_GetNextTransaction(iea); -------------------------------------------------------------------------X8 This made it necessary to hold internal pointers to keep track of the last transaction returned. Since AqBanking6 only the lists are stored inside a AB_IMEXPORTER_ACCOUNTINFO. You can now freely iterate through a transaction list like this: -------------------------------------------------------------------------X8 t=AB_ImExporterAccountInfo_GetFirstTransaction(iea); ... t=AB_Transaction_List_Next(t); ... t=AB_Transaction_List_Previous(t); -------------------------------------------------------------------------X8 So you can now use all list functions on the lists stored. This is true for all list handled by a AB_IMEXPORTER_CONTEXT and AB_IMEXPORTER_ACCOUNTINFO, especially: - list of account infos objects (AB_IMEXPORTER_ACCOUNTINFO) - list of transactions - list of account status - list of messages - list of electronic banking statements - AB_JOB: - removed (now taken over by AB_TRANSACTION) - AB_BANKING: - removed handling of AB_USER and AB_ACCOUNT completely, introduced AB_ACCOUNT_SPEC: - added AB_Banking_GetAccountSpecList() - added AB_Banking_GetAccountSpecByUniqueId() - replaced AB_Banking_ExecuteJobs() with AB_Banking_SendCommands() - this function takes a list of jobs in AB_TRANSACTIONs and sends them, no longer needs AB_JOB - AB_COUNTRY: - deprecated, will be removed before release - AB_IMEXPORTER: - removed (functions now in AB_Banking) - Includes: - some header files have been moved to subfolders (e.g. aqbanking/value.h -> aqbanking/types/value.h>) If your compiler complains about missing headers try "aqbanking/types/" instead of "aqbanking". Martin Preuss, Hamburg/Germany, 2022/08/21 aqbanking-6.6.1/ChangeLog0000644000175000017500000004200415037736153012164 00000000000000------------------------------------------------------------------ 2025-05-13 10:36:15 +0200 Martin Preuss Fix invalid PAIN file format (following suggestions from Jochen via mailing list). ------------------------------------------------------------------ 2025-03-06 11:59:36 +0100 Martin Preuss aqfints: only verify pin in server mode. ------------------------------------------------------------------ 2025-03-02 23:28:46 +0100 Martin Preuss aqhbci: fixed a reason for segfault. ------------------------------------------------------------------ 2024-12-17 20:28:20 +0100 Martin Preuss prepared release 6.6.0 ------------------------------------------------------------------ 2024-12-17 20:28:02 +0100 Martin Preuss added aqofxconnect-tool to .gitignore ------------------------------------------------------------------ 2024-12-17 20:27:17 +0100 Martin Preuss added missing .gitignore ------------------------------------------------------------------ 2024-12-17 20:18:28 +0100 Martin Preuss csv: added profile for comdirect depot status reports. ------------------------------------------------------------------ 2024-10-13 14:37:36 +0200 Martin Preuss aqhbci: fixed a bug (was not clearing "MODIFIED" flag in _saveUser) ------------------------------------------------------------------ 2024-10-13 14:34:33 +0200 Martin Preuss Improved im/exporter script for CAMT 053.001.02 (thanks to Jan Vlug) Applied a patch by Jan Vlug via aqbanking-user mailing list. ------------------------------------------------------------------ 2024-10-08 20:45:36 +0200 Ernst Kloppenburg configure pain.001.001.09 as a sepa profile ------------------------------------------------------------------ 2024-10-05 07:20:19 +0200 Ernst Kloppenburg add pain.001.001.09 profile to xml imexporter ------------------------------------------------------------------ 2024-10-08 21:08:44 +0200 Ernst Kloppenburg configure pain.001.001.03 as a sepa profile ------------------------------------------------------------------ 2024-10-05 07:40:27 +0200 Ernst Kloppenburg fix typo in description field ------------------------------------------------------------------ 2024-08-26 18:10:42 +0200 Martin Preuss aqhbci: only mark pin "bad" if the server reports it as such. ------------------------------------------------------------------ 2024-08-26 17:46:02 +0200 Martin Preuss aqhbci: added methodId "Q1S" to map. Increased verbosity. ------------------------------------------------------------------ 2024-07-15 21:00:03 +0200 Martin Preuss increased verbosity, retry gmp_snprintf() on error Current binary package of AqFinance throws an error in this code which hints to this function. However, there should be no error when calling gmp_snprintf() in this setup... ------------------------------------------------------------------ 2024-07-15 20:57:23 +0200 Martin Preuss New version submitted by Jan Vlug. Thanks! ------------------------------------------------------------------ 2024-06-30 23:04:08 +0200 Martin Preuss Merge branch 'rel-6.5.12beta' ------------------------------------------------------------------ 2024-06-30 22:59:14 +0200 Martin Preuss Prepared release 6.5.12beta Probably last beta before stable. ------------------------------------------------------------------ 2024-06-26 12:57:22 +0200 Martin Preuss q43: fixed a typo causing transactions to be ignored by apps should fix gnucash bug 798840 (see https://bugs.gnucash.org/show_bug.cgi?id=798840) ------------------------------------------------------------------ 2024-06-26 00:39:04 +0200 Martin Preuss aqgivve: add missing GWENHYWFAR_CB in functions (needed for Windows builds). ------------------------------------------------------------------ 2024-06-22 09:27:16 +0200 Thomas Baumgart Fix crash when function is called without user Changes made in commit 964e0a3d cause dlg_edituserpintan::_fromGui to be called without a user to check the data in the dialog for validity. This causes the following crash due to usage of NULL pointer: kmymoney: user.c:1213: void AH_User_SetHttpVMajor(AB_USER *, int): Zusicherung ÂğuÂĞ nicht erfĵllt. Also, in some erroneous cases, the return code is not provided when the quiet mode (no GUI activity) is selected. This change corrects all of the above. ------------------------------------------------------------------ 2024-06-02 15:52:56 +0200 Martin Preuss incremented version also in 0BUILD. ------------------------------------------------------------------ 2024-06-02 15:51:28 +0200 Martin Preuss Prepared release rel-6.5.11beta. ------------------------------------------------------------------ 2024-06-02 15:51:05 +0200 Martin Preuss Prepared release 6.5.11beta. ------------------------------------------------------------------ 2024-06-02 15:28:57 +0200 Martin Preuss aqhbci: Set "moretans" to "N" also for process "S". Might fix current pushTAN problem. ------------------------------------------------------------------ 2024-06-01 13:03:59 +0200 Thomas Baumgart Fix typo ------------------------------------------------------------------ 2024-05-30 16:02:12 +0200 Martin Preuss reuse code. ------------------------------------------------------------------ 2024-05-30 15:38:25 +0200 Martin Preuss cleanup AB_Banking_Init() and AB_Banking_GetCryptToken(). ------------------------------------------------------------------ 2024-05-30 14:44:03 +0200 Martin Preuss no longer try to load bankinfo plugins. We decided a long time ago to only support compiled-in plugins. For unknown reasons the bankinfo plugin loader still remained... ------------------------------------------------------------------ 2024-05-30 14:28:46 +0200 Martin Preuss cleanup more old spaghetti code. ------------------------------------------------------------------ 2024-05-30 13:25:15 +0200 Martin Preuss reduce spaghetti code. ------------------------------------------------------------------ 2024-05-28 00:19:07 +0200 Martin Preuss Prepared release 6.5.10beta ------------------------------------------------------------------ 2024-05-28 00:18:37 +0200 Martin Preuss prepared release 6.5.10beta. ------------------------------------------------------------------ 2024-05-26 23:52:01 +0200 Martin Preuss Merge branch 'mp-202404-improve_refaccount_handling' ------------------------------------------------------------------ 2024-05-25 13:23:50 +0200 Stefan Bayer fix bug when trying to add a reference account to a account specification ------------------------------------------------------------------ 2024-05-25 12:56:29 +0200 Stefan Bayer Change for ZKA card user setup dialog, make sure the PIN needs to be typed once, make sure the crypt session on the zkacard is closed for all premature stops of the dialog. ------------------------------------------------------------------ 2024-05-20 11:32:56 +0200 stefan fix crash in reading the context from the RxH card due to a missing gui progress init ------------------------------------------------------------------ 2024-05-20 10:39:32 +0200 stefan remove obsolete RDH-4 from combo box setting function ------------------------------------------------------------------ 2024-05-05 18:39:07 +0200 Martin Preuss aqhbci: Fixed a double-free error which causes crash in apps. - see https://bugs.gnucash.org/show_bug.cgi?id=799302 for more info ------------------------------------------------------------------ 2024-05-05 18:39:07 +0200 Martin Preuss aqhbci: Fixed a double-free error which causes crash in apps. - see https://bugs.gnucash.org/show_bug.cgi?id=799302 for more info ------------------------------------------------------------------ 2024-05-05 17:13:14 +0200 Martin Preuss aqhbci: fixed a bug. ------------------------------------------------------------------ 2024-05-02 23:53:04 +0200 Martin Preuss AH_EditUserRdhDialog: check for open changes before user actions. ------------------------------------------------------------------ 2024-05-02 23:42:39 +0200 Martin Preuss aqhbci: updated AH_EditUserRdhDialog cleanup and reuse code ------------------------------------------------------------------ 2024-05-01 23:25:02 +0200 Martin Preuss aqhbci: share code in dialogs. ------------------------------------------------------------------ 2024-05-01 23:24:43 +0200 Martin Preuss aqhbci: added widget files for common types to help sharing code. ------------------------------------------------------------------ 2024-05-01 21:44:40 +0200 Martin Preuss aqhbci: rewrite dialog AH_EditUserPinTanDialog. cleanup, prepare reuse of code. ------------------------------------------------------------------ 2024-05-01 21:34:12 +0200 Martin Preuss AH_EditAccountDialog: Some minor fixes. ------------------------------------------------------------------ 2024-05-01 16:44:04 +0200 Martin Preuss aqhbci: Use correct logdomain. ------------------------------------------------------------------ 2024-05-01 01:07:38 +0200 Martin Preuss AH_EditAccountDialog: improved readability of the code for this dialog. ------------------------------------------------------------------ 2024-05-01 01:05:53 +0200 Martin Preuss editaccount: make "countryEdit" writable. ------------------------------------------------------------------ 2024-04-28 23:45:54 +0200 Martin Preuss aqbanking-cli: more work on sepaInternalTransfer - added "-rbic", "-rname" - let command line args override any other data ------------------------------------------------------------------ 2024-04-28 23:23:12 +0200 Martin Preuss aqbanking-cli: allow for remote account name to be empty. Most of the time the remote IBAN should be enough. However, if not you can always give the name. ------------------------------------------------------------------ 2024-04-28 23:13:04 +0200 Martin Preuss aqbanking-cli: fixed a potential problem only change db variable if non set. ------------------------------------------------------------------ 2024-04-28 23:06:05 +0200 Martin Preuss aqbanking-cli: more robust handling of "remote name". source "remoteName" in descending order: - from command line argument - from reference account - from account spec ------------------------------------------------------------------ 2024-04-28 22:54:10 +0200 Martin Preuss AH_Job_GetTargetAccount: use more meaningfull function name. ------------------------------------------------------------------ 2024-04-28 22:49:01 +0200 Martin Preuss AH_Job_GetTargetAccount: more cleanup. ------------------------------------------------------------------ 2024-04-28 22:41:15 +0200 Martin Preuss AH_Job_GetTargetAccount: fixed comments. ------------------------------------------------------------------ 2024-04-28 22:38:31 +0200 Martin Preuss AH_Job_GetTargetAccount: move "AB_ACCOUNT_SPEC *as" out of loop. we only need to lookup the structure and add transaction limits once. ------------------------------------------------------------------ 2024-04-28 22:26:00 +0200 Martin Preuss AH_Job_GetTargetAccount: use const. ------------------------------------------------------------------ 2024-04-28 22:25:07 +0200 Martin Preuss AH_Job_GetTargetAccount: reuse code. Make AH_AccountJob() the base type and use its init code. ------------------------------------------------------------------ 2024-04-28 22:17:51 +0200 Martin Preuss aqhbci: use owner name in AH_Job_GetTargetAccount if none received. ------------------------------------------------------------------ 2024-04-28 22:14:56 +0200 Martin Preuss AqHBCI: clean AH_Job_GetTargetAccount (shorter functions, improve readability) ------------------------------------------------------------------ 2024-04-28 16:32:59 +0200 Martin Preuss Merge branch 'rel-6.5.9beta' Released 6.5.9beta. ------------------------------------------------------------------ 2024-04-28 15:52:00 +0200 Martin Preuss Prepared release 6.5.9beta ------------------------------------------------------------------ 2024-04-28 11:46:55 +0200 Martin Preuss ignore aqbanking-cli.vg (valgrind log file). ------------------------------------------------------------------ 2024-04-28 11:45:30 +0200 Martin Preuss build: require gwen 5.11.2. ------------------------------------------------------------------ 2024-04-21 22:21:52 +0200 Martin Preuss aqgivve: fixed declaration of callback AG_Provider_FreeData(), hide private functions. ------------------------------------------------------------------ 2024-04-01 23:38:24 +0200 Martin Preuss Added parser files for CAMT 053.001.02 provided by Jan Vlug. ------------------------------------------------------------------ 2024-03-20 00:00:04 +0100 Martin Preuss prepared release 6.5.8beta. ------------------------------------------------------------------ 2024-03-19 22:36:08 +0100 Martin Preuss aqgivve: fixed using wrong type. ------------------------------------------------------------------ 2024-03-19 22:35:37 +0100 Martin Preuss added valgrind check script for aqbanking-cli. ------------------------------------------------------------------ 2024-03-19 22:35:10 +0100 Martin Preuss fixed memory leaks. ------------------------------------------------------------------ 2024-03-19 15:09:09 +0100 Martin Preuss prepared 6.5.7beta ------------------------------------------------------------------ 2024-03-19 15:04:02 +0100 Martin Preuss aqhbci: add flag AH_JOB_FLAGS_NEEDTAN for non-decoupled TAN mode. ------------------------------------------------------------------ 2024-03-19 13:45:31 +0100 Martin Preuss aqhbci: more message changes. ------------------------------------------------------------------ 2024-03-19 13:40:22 +0100 Martin Preuss aqhbci: added defaults for empty bank name and user id, fixed a typo. ------------------------------------------------------------------ 2024-03-19 13:38:12 +0100 Martin Preuss aqhbci: changed messages. ------------------------------------------------------------------ 2024-03-19 12:38:38 +0100 Martin Preuss Prepared release 6.5.6beta. ------------------------------------------------------------------ 2024-03-19 12:36:32 +0100 Martin Preuss aqhbci: improved message for decoupled TAN. ------------------------------------------------------------------ 2024-03-19 12:16:25 +0100 Martin Preuss aqhbci: decreased verbosity. ------------------------------------------------------------------ 2024-03-19 11:50:17 +0100 Martin Preuss aqhbci: fixed a few bugs discovered while testing (thanks Anselm!!) ------------------------------------------------------------------ 2024-03-19 09:42:32 +0100 Martin Preuss aqhbci: no need for a TAN in decoupled mode. ------------------------------------------------------------------ 2024-03-19 00:10:39 +0100 Martin Preuss aqhbci: fixed a memory leak. ------------------------------------------------------------------ 2024-03-18 23:02:51 +0100 Martin Preuss Prepared release 6.5.5-beta ------------------------------------------------------------------ 2024-03-18 23:02:27 +0100 Martin Preuss build: added missing file to Makefile.am ------------------------------------------------------------------ 2024-03-18 22:38:22 +0100 Martin Preuss Incremented version. ------------------------------------------------------------------ 2024-03-18 22:38:10 +0100 Martin Preuss updated German bank info data. ------------------------------------------------------------------ 2024-03-18 22:37:51 +0100 Martin Preuss adapted to changes in bank data source files. ------------------------------------------------------------------ 2024-03-18 21:52:43 +0100 Martin Preuss aqhbci: move processing of first TAN job to AH_OutboxCBox_SendAndReceiveQueueWithTan2() ------------------------------------------------------------------ 2024-03-18 21:39:20 +0100 Martin Preuss Incremented version. ------------------------------------------------------------------ 2024-03-18 21:39:04 +0100 Martin Preuss aqhbci: added handling of decoupled TAN entry. Decoupled mode is yet another complication of the already complicated process of confirming a banking job. Not tested, yet (my banks don't support decoupled TAN mode but I wouldn't want to use it anyway since a mobile phone app is needed for external TAN approval). ------------------------------------------------------------------ 2024-03-18 21:35:11 +0100 Martin Preuss aqhbci: increased verbosity. ------------------------------------------------------------------ 2024-03-18 21:34:47 +0100 Martin Preuss aqhbci: fixed a typo. ------------------------------------------------------------------ 2024-03-01 17:19:17 +0100 Martin Preuss aqhbci: improve readability. ------------------------------------------------------------------ 2024-03-01 17:19:00 +0100 Martin Preuss aqhbci: compare against server address stored in user. Normalize addresses from BPD for checks to only contain server and path. ------------------------------------------------------------------ 2024-03-01 15:51:13 +0100 Martin Preuss Fixed a bug (number of entries in sigtails list changes inside the loop). ------------------------------------------------------------------ 2024-03-01 15:50:27 +0100 Martin Preuss Show info message when server address is changed (addresses #303). ------------------------------------------------------------------ 2024-02-11 10:51:49 +0100 Thomas Baumgart Removed dead code ------------------------------------------------------------------ 2024-02-11 10:42:36 +0100 Thomas Baumgart aqgivve: Resolve problem of duplicate definition of EXTRA_DIST aqbanking-6.6.1/configure0000755000175000017500000277061015037736027012336 00000000000000#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.71. # # # Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation, # Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh as_nop=: if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else $as_nop case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi # Reset variables that may have inherited troublesome values from # the environment. # IFS needs to be set, to space, tab, and newline, in precisely that order. # (If _AS_PATH_WALK were called with IFS unset, it would have the # side effect of setting IFS to empty, thus disabling word splitting.) # Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl IFS=" "" $as_nl" PS1='$ ' PS2='> ' PS4='+ ' # Ensure predictable behavior from utilities with locale-dependent output. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # We cannot yet rely on "unset" to work, but we need these variables # to be unset--not just set to an empty or harmless value--now, to # avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct # also avoids known problems related to "unset" and subshell syntax # in other old shells (e.g. bash 2.01 and pdksh 5.2.14). for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH do eval test \${$as_var+y} \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done # Ensure that fds 0, 1, and 2 are open. if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. if ${PATH_SEPARATOR+false} :; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac test -r "$as_dir$0" && as_myself=$as_dir$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="as_nop=: if test \${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else \$as_nop case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ) then : else \$as_nop exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 blah=\$(echo \$(echo blah)) test x\"\$blah\" = xblah || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || ( ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO PATH=/empty FPATH=/empty; export PATH FPATH test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\ || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null then : as_have_required=yes else $as_nop as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null then : else $as_nop as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && as_run=a "$as_shell" -c "$as_bourne_compatible""$as_required" 2>/dev/null then : CONFIG_SHELL=$as_shell as_have_required=yes if as_run=a "$as_shell" -c "$as_bourne_compatible""$as_suggested" 2>/dev/null then : break 2 fi fi done;; esac as_found=false done IFS=$as_save_IFS if $as_found then : else $as_nop if { test -f "$SHELL" || test -f "$SHELL.exe"; } && as_run=a "$SHELL" -c "$as_bourne_compatible""$as_required" 2>/dev/null then : CONFIG_SHELL=$SHELL as_have_required=yes fi fi if test "x$CONFIG_SHELL" != x then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno then : printf "%s\n" "$0: This script requires a shell more modern than all" printf "%s\n" "$0: the shells that I found on your system." if test ${ZSH_VERSION+y} ; then printf "%s\n" "$0: In particular, zsh $ZSH_VERSION has bugs and should" printf "%s\n" "$0: be upgraded to zsh 4.3.4 or later." else printf "%s\n" "$0: Please tell bug-autoconf@gnu.org about your system, $0: including any error possibly output before this $0: message. Then install a modern shell, or manually run $0: the script under such a shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_nop # --------- # Do nothing but, unlike ":", preserve the value of $?. as_fn_nop () { return $? } as_nop=as_fn_nop # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null then : eval 'as_fn_append () { eval $1+=\$2 }' else $as_nop as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null then : eval 'as_fn_arith () { as_val=$(( $* )) }' else $as_nop as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_nop # --------- # Do nothing but, unlike ":", preserve the value of $?. as_fn_nop () { return $? } as_nop=as_fn_nop # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi printf "%s\n" "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { printf "%s\n" "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } # Determine whether it's possible to make 'echo' print without a newline. # These variables are no longer used directly by Autoconf, but are AC_SUBSTed # for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac # For backward compatibility with old third-party macros, we provide # the shell variables $as_echo and $as_echo_n. New code should use # AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. as_echo='printf %s\n' as_echo_n='printf %s' rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" SHELL=${CONFIG_SHELL-/bin/sh} test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='' PACKAGE_TARNAME='' PACKAGE_VERSION='' PACKAGE_STRING='' PACKAGE_BUGREPORT='' PACKAGE_URL='' ac_unique_file="README" ac_default_prefix=/usr/local # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_STDIO_H # include #endif #ifdef HAVE_STDLIB_H # include #endif #ifdef HAVE_STRING_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_header_c_list= ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIBOBJS aqbanking_backends all_libraries all_includes TUTORIALS AQBANKING_CLI_VERSION_STRING ENABLE_CLI_FALSE ENABLE_CLI_TRUE AQEBICS_LIBS AQEBICS_CFLAGS LIBXSLT_LIBS LIBXSLT_CFLAGS LIBXML_LIBS LIBXML_CFLAGS XMLSEC_LIBS XMLSEC_CFLAGS aqebics_datadir with_aqebics aqebics_ldflags aqebics_libs aqebics_internal_libs aqebics_includes aqpaypal_libs aqpaypal_internal_libs aqpaypal_includes aqofxconnect_libs aqofxconnect_internal_libs aqofxconnect_includes aqhbci_datadir with_aqhbci aqhbci_ldflags aqhbci_libs aqhbci_internal_libs aqhbci_includes DOXYGEN_TAGFILES DOXYGEN_EXCLUDE_PATTERNS DOXYGEN_FILE_PATTERNS DOXYGEN_DEFINE DOXYGEN_INPUT docpath aqbankingpp_modules aqbanking_modules ADD_ACLOCAL_FLAGS aqbanking_headerdir aqbanking_headerdir_am aqbanking_symlinkdir aqbanking_pkgdatadir aqbanking_plugindir aqbanking_libs aqbanking_ldflags aqbanking_internal_libs aqbanking_includes aqbanking_sys_is_windows visibility_cflags STRIPALL i18n_libs HAVE_I18N IF_MAKE_I18N_FILES_FALSE IF_MAKE_I18N_FILES_TRUE MSGFMT_SUPPORTS_QT MAKE_I18N_FILES MSGFMT XGETTEXT aq_distrib_version aq_distrib_tag aq_distrib_name aqfints_datadir aqbanking_data_searchdir aqbanking_locale_searchdir aqbanking_cfg_searchdir aqbanking_plugin_searchdir IS_WINDOWS_FALSE IS_WINDOWS_TRUE gmp_libs XMLMERGE typemaker2_exe WITH_GWENGUI_GTK2_FALSE WITH_GWENGUI_GTK2_TRUE HAVE_GWENGUI_GTK2 GTK2_LIBS GTK2_CFLAGS GWENGUI_GTK2_LIBS GWENGUI_GTK2_CFLAGS gwenhywfar_has_crypt gwenhywfar_headers gwenhywfar_includes gwenhywfar_libs gwenhywfar_bindir gwenhywfar_plugins gwenhywfar_dir GWENHYWFAR_MINIMUM_VERSION aqbanking_plugins_bankinfo_libs aqbanking_plugins_bankinfo_dirs aqbanking_plugins_parsers_dirs aqbanking_plugins_imexporters_libs aqbanking_plugins_imexporters_dirs aqbanking_plugins_backends_libs aqbanking_plugins_backends_dirs ASTYLE PKG_CONFIG_LIBDIR PKG_CONFIG_PATH PKG_CONFIG USE_DOT RC AS CXXCPP LT_SYS_LIBRARY_PATH OTOOL64 OTOOL LIPO NMEDIT DSYMUTIL MANIFEST_TOOL RANLIB ac_ct_AR AR DLLTOOL OBJDUMP FILECMD LN_S NM ac_ct_DUMPBIN DUMPBIN LD FGREP EGREP GREP SED LIBTOOL CPP am__fastdepCXX_FALSE am__fastdepCXX_TRUE CXXDEPMODE ac_ct_CXX CXXFLAGS CXX am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE am__nodep AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__include DEPDIR OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC abs_top_builddir INSTALL_DLL_TARGET MAKE_DLL_TARGET OS_TYPE OSYSTEM AM_BACKSLASH AM_DEFAULT_VERBOSITY AM_DEFAULT_V AM_V CSCOPE ETAGS CTAGS am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p MKDIR_P INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL VERSION PACKAGE CYGPATH_W am__isrc INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM AQBANKING_SO_EFFECTIVE AQBANKING_SO_AGE AQBANKING_SO_REVISION AQBANKING_SO_CURRENT AQBANKING_FINTS_VERSION_STRING AQBANKING_VERSION_RELEASE_STRING AQBANKING_VERSION_STRING AQBANKING_VERSION_FULL_STRING AQBANKING_VERSION_TAG AQBANKING_VERSION_BUILD AQBANKING_VERSION_PATCHLEVEL AQBANKING_VERSION_MINOR AQBANKING_VERSION_MAJOR DATETIME host_os host_vendor host_cpu host build_os build_vendor build_cpu build target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir runstatedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL am__quote' ac_subst_files='' ac_user_opts=' enable_option_checking with_build_datetime enable_silent_rules enable_static enable_shared enable_dependency_tracking with_pic enable_fast_install with_aix_soname with_gnu_ld with_sysroot enable_libtool_lock with_backends with_imexporters with_parsers with_bankinfos enable_gwenhywfar with_gwen_dir enable_gui_tests with_typemaker2_exe with_xmlmerge enable_local_install with_plugin_searchdir with_cfg_searchdir with_locale_searchdir with_data_searchdir enable_release enable_debug enable_warnings enable_error_on_warning with_docpath enable_full_doc with_aqhbci_datadir with_aqebics_datadir enable_init_plugins enable_aqb_subproject enable_cli with_cli_version_string enable_tutorials ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CXX CXXFLAGS CCC CPP LT_SYS_LIBRARY_PATH CXXCPP PKG_CONFIG PKG_CONFIG_PATH PKG_CONFIG_LIBDIR GWENGUI_GTK2_CFLAGS GWENGUI_GTK2_LIBS GTK2_CFLAGS GTK2_LIBS XMLSEC_CFLAGS XMLSEC_LIBS LIBXML_CFLAGS LIBXML_LIBS LIBXSLT_CFLAGS LIBXSLT_LIBS' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -runstatedir | --runstatedir | --runstatedi | --runstated \ | --runstate | --runstat | --runsta | --runst | --runs \ | --run | --ru | --r) ac_prev=runstatedir ;; -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ | --run=* | --ru=* | --r=*) runstatedir=$ac_optarg ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. printf "%s\n" "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && printf "%s\n" "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir runstatedir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures this package to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-silent-rules less verbose build output (undo: "make V=1") --disable-silent-rules verbose build output (undo: "make V=0") --enable-static[=PKGS] build static libraries [default=no] --enable-shared[=PKGS] build shared libraries [default=yes] --enable-dependency-tracking do not reject slow dependency extractors --disable-dependency-tracking speeds up one-time build --enable-fast-install[=PKGS] optimize for fast installation [default=yes] --disable-libtool-lock avoid locking (might break parallel builds) --enable-gwenhywfar enable gwenhywfar support (default=yes) --enable-gwenhywfar-test enable gwenhywfar-test (default=yes) --enable-gui-tests allow GUI tests (default=no) --enable-local-install allow local installation mode (default=no) --enable-release make this an official release (default=no) --enable-debug enable compile arguments for debugging code --enable-warnings enable compilation warnings, default=yes --enable-error-on-warning treat all compile warnings as errors, default=no --enable-full-doc enable creating full apidoc (default=no) --enable-init-plugins enable plugin init (default=yes) --enable-aqb-subproject make gwen only a subproject (default=no) --enable-cli build aqbanking-cli (default=yes) --enable-tutorials build tutorials (default=yes) Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-build-datetime=DATETIME use fixed datetime for build (default: current date and time) --with-pic[=PKGS] try to use only PIC/non-PIC objects [default=use both] --with-aix-soname=aix|svr4|both shared library versioning (aka "SONAME") variant to provide on AIX, [default=aix]. --with-gnu-ld assume the C compiler uses GNU ld [default=no] --with-sysroot[=DIR] Search for dependent libraries within DIR (or the compiler's sysroot if not specified). --with-backends=list space separated list of backends (default:all) --with-imexporters=list space separated list of im-/exporters (default:all) --with-parsers=list space separated list of parsers (default:all) --with-bankinfos=list space separated list of bankinfo (default:all) --with-gwen-dir=DIR obsolete - set PKG_CONFIG_PATH environment variable instead --with-typemaker2-exe=EXE path and name of the executable typemaker2 --with-xmlmerge=PATH path and name of tool xmlmerge --with-plugin-searchdir=DIR where to search for plugins --with-cfg-searchdir=DIR where to search for cfg files --with-locale-searchdir=DIR where to search for locale files --with-data-searchdir=DIR where to search for data files --with-docpath=DIR where to store the apidoc --with-aqhbci-datadir=DIR where to search for data files --with-aqebics-datadir=DIR where to search for data files --with-cli-version-string list of additional libraries Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CXX C++ compiler command CXXFLAGS C++ compiler flags CPP C preprocessor LT_SYS_LIBRARY_PATH User-defined run-time library search path. CXXCPP C++ preprocessor PKG_CONFIG path to pkg-config utility PKG_CONFIG_PATH directories to add to pkg-config's search path PKG_CONFIG_LIBDIR path overriding pkg-config's built-in search path GWENGUI_GTK2_CFLAGS C compiler flags for GWENGUI_GTK2, overriding pkg-config GWENGUI_GTK2_LIBS linker flags for GWENGUI_GTK2, overriding pkg-config GTK2_CFLAGS C compiler flags for GTK2, overriding pkg-config GTK2_LIBS linker flags for GTK2, overriding pkg-config XMLSEC_CFLAGS C compiler flags for XMLSEC, overriding pkg-config XMLSEC_LIBS linker flags for XMLSEC, overriding pkg-config LIBXML_CFLAGS C compiler flags for LIBXML, overriding pkg-config LIBXML_LIBS linker flags for LIBXML, overriding pkg-config LIBXSLT_CFLAGS C compiler flags for LIBXSLT, overriding pkg-config LIBXSLT_LIBS linker flags for LIBXSLT, overriding pkg-config Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to the package provider. _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for configure.gnu first; this name is used for a wrapper for # Metaconfig's "Configure" on case-insensitive file systems. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else printf "%s\n" "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF configure generated by GNU Autoconf 2.71 Copyright (C) 2021 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest.beam if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext then : ac_retval=0 else $as_nop printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 printf %s "checking for $2... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO" then : eval "$3=yes" else $as_nop eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi eval ac_res=\$$3 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile # ac_fn_cxx_try_compile LINENO # ---------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest.beam if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext then : ac_retval=0 else $as_nop printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_compile # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err } then : ac_retval=0 else $as_nop printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest.beam conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext } then : ac_retval=0 else $as_nop printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 printf %s "checking for $2... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. */ #include #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main (void) { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : eval "$3=yes" else $as_nop eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func # ac_fn_cxx_try_cpp LINENO # ------------------------ # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || test ! -s conftest.err } then : ac_retval=0 else $as_nop printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_cpp # ac_fn_cxx_try_link LINENO # ------------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest.beam conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext } then : ac_retval=0 else $as_nop printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_link ac_configure_args_raw= for ac_arg do case $ac_arg in *\'*) ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append ac_configure_args_raw " '$ac_arg'" done case $ac_configure_args_raw in *$as_nl*) ac_safe_unquote= ;; *) ac_unsafe_z='|&;<>()$`\\"*?[ '' ' # This string ends in space, tab. ac_unsafe_a="$ac_unsafe_z#~" ac_safe_unquote="s/ '\\([^$ac_unsafe_a][^$ac_unsafe_z]*\\)'/ \\1/g" ac_configure_args_raw=` printf "%s\n" "$ac_configure_args_raw" | sed "$ac_safe_unquote"`;; esac cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by $as_me, which was generated by GNU Autoconf 2.71. Invocation command line was $ $0$ac_configure_args_raw _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac printf "%s\n" "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Sanitize IFS. IFS=" "" $as_nl" # Save into config.log some information that might help in debugging. { echo printf "%s\n" "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo printf "%s\n" "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac printf "%s\n" "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then printf "%s\n" "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac printf "%s\n" "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then printf "%s\n" "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && printf "%s\n" "$as_me: caught signal $ac_signal" printf "%s\n" "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h printf "%s\n" "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. printf "%s\n" "#define PACKAGE_NAME \"$PACKAGE_NAME\"" >>confdefs.h printf "%s\n" "#define PACKAGE_TARNAME \"$PACKAGE_TARNAME\"" >>confdefs.h printf "%s\n" "#define PACKAGE_VERSION \"$PACKAGE_VERSION\"" >>confdefs.h printf "%s\n" "#define PACKAGE_STRING \"$PACKAGE_STRING\"" >>confdefs.h printf "%s\n" "#define PACKAGE_BUGREPORT \"$PACKAGE_BUGREPORT\"" >>confdefs.h printf "%s\n" "#define PACKAGE_URL \"$PACKAGE_URL\"" >>confdefs.h # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. if test -n "$CONFIG_SITE"; then ac_site_files="$CONFIG_SITE" elif test "x$prefix" != xNONE; then ac_site_files="$prefix/share/config.site $prefix/etc/config.site" else ac_site_files="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi for ac_site_file in $ac_site_files do case $ac_site_file in #( */*) : ;; #( *) : ac_site_file=./$ac_site_file ;; esac if test -f "$ac_site_file" && test -r "$ac_site_file"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 printf "%s\n" "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 printf "%s\n" "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 printf "%s\n" "$as_me: creating cache $cache_file" >&6;} >$cache_file fi as_fn_append ac_header_c_list " stdio.h stdio_h HAVE_STDIO_H" # Test code for whether the C compiler supports C89 (global declarations) ac_c_conftest_c89_globals=' /* Does the compiler advertise C89 conformance? Do not test the value of __STDC__, because some compilers set it to 0 while being otherwise adequately conformant. */ #if !defined __STDC__ # error "Compiler does not advertise C89 conformance" #endif #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7 src/conf.sh. */ struct buf { int x; }; struct buf * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not \xHH hex character constants. These do not provoke an error unfortunately, instead are silently treated as an "x". The following induces an error, until -std is added to get proper ANSI mode. Curiously \x00 != x always comes out true, for an array size at least. It is necessary to write \x00 == 0 to get something that is true only with -std. */ int osf4_cc_array ['\''\x00'\'' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) '\''x'\'' int xlc6_cc_array[FOO(a) == '\''x'\'' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, int *(*)(struct buf *, struct stat *, int), int, int);' # Test code for whether the C compiler supports C89 (body of main). ac_c_conftest_c89_main=' ok |= (argc == 0 || f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]); ' # Test code for whether the C compiler supports C99 (global declarations) ac_c_conftest_c99_globals=' // Does the compiler advertise C99 conformance? #if !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L # error "Compiler does not advertise C99 conformance" #endif #include extern int puts (const char *); extern int printf (const char *, ...); extern int dprintf (int, const char *, ...); extern void *malloc (size_t); // Check varargs macros. These examples are taken from C99 6.10.3.5. // dprintf is used instead of fprintf to avoid needing to declare // FILE and stderr. #define debug(...) dprintf (2, __VA_ARGS__) #define showlist(...) puts (#__VA_ARGS__) #define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) static void test_varargs_macros (void) { int x = 1234; int y = 5678; debug ("Flag"); debug ("X = %d\n", x); showlist (The first, second, and third items.); report (x>y, "x is %d but y is %d", x, y); } // Check long long types. #define BIG64 18446744073709551615ull #define BIG32 4294967295ul #define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) #if !BIG_OK #error "your preprocessor is broken" #endif #if BIG_OK #else #error "your preprocessor is broken" #endif static long long int bignum = -9223372036854775807LL; static unsigned long long int ubignum = BIG64; struct incomplete_array { int datasize; double data[]; }; struct named_init { int number; const wchar_t *name; double average; }; typedef const char *ccp; static inline int test_restrict (ccp restrict text) { // See if C++-style comments work. // Iterate through items via the restricted pointer. // Also check for declarations in for loops. for (unsigned int i = 0; *(text+i) != '\''\0'\''; ++i) continue; return 0; } // Check varargs and va_copy. static bool test_varargs (const char *format, ...) { va_list args; va_start (args, format); va_list args_copy; va_copy (args_copy, args); const char *str = ""; int number = 0; float fnumber = 0; while (*format) { switch (*format++) { case '\''s'\'': // string str = va_arg (args_copy, const char *); break; case '\''d'\'': // int number = va_arg (args_copy, int); break; case '\''f'\'': // float fnumber = va_arg (args_copy, double); break; default: break; } } va_end (args_copy); va_end (args); return *str && number && fnumber; } ' # Test code for whether the C compiler supports C99 (body of main). ac_c_conftest_c99_main=' // Check bool. _Bool success = false; success |= (argc != 0); // Check restrict. if (test_restrict ("String literal") == 0) success = true; char *restrict newvar = "Another string"; // Check varargs. success &= test_varargs ("s, d'\'' f .", "string", 65, 34.234); test_varargs_macros (); // Check flexible array members. struct incomplete_array *ia = malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); ia->datasize = 10; for (int i = 0; i < ia->datasize; ++i) ia->data[i] = i * 1.234; // Check named initializers. struct named_init ni = { .number = 34, .name = L"Test wide string", .average = 543.34343, }; ni.number = 58; int dynamic_array[ni.number]; dynamic_array[0] = argv[0][0]; dynamic_array[ni.number - 1] = 543; // work around unused variable warnings ok |= (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == '\''x'\'' || dynamic_array[ni.number - 1] != 543); ' # Test code for whether the C compiler supports C11 (global declarations) ac_c_conftest_c11_globals=' // Does the compiler advertise C11 conformance? #if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112L # error "Compiler does not advertise C11 conformance" #endif // Check _Alignas. char _Alignas (double) aligned_as_double; char _Alignas (0) no_special_alignment; extern char aligned_as_int; char _Alignas (0) _Alignas (int) aligned_as_int; // Check _Alignof. enum { int_alignment = _Alignof (int), int_array_alignment = _Alignof (int[100]), char_alignment = _Alignof (char) }; _Static_assert (0 < -_Alignof (int), "_Alignof is signed"); // Check _Noreturn. int _Noreturn does_not_return (void) { for (;;) continue; } // Check _Static_assert. struct test_static_assert { int x; _Static_assert (sizeof (int) <= sizeof (long int), "_Static_assert does not work in struct"); long int y; }; // Check UTF-8 literals. #define u8 syntax error! char const utf8_literal[] = u8"happens to be ASCII" "another string"; // Check duplicate typedefs. typedef long *long_ptr; typedef long int *long_ptr; typedef long_ptr long_ptr; // Anonymous structures and unions -- taken from C11 6.7.2.1 Example 1. struct anonymous { union { struct { int i; int j; }; struct { int k; long int l; } w; }; int m; } v1; ' # Test code for whether the C compiler supports C11 (body of main). ac_c_conftest_c11_main=' _Static_assert ((offsetof (struct anonymous, i) == offsetof (struct anonymous, w.k)), "Anonymous union alignment botch"); v1.i = 2; v1.w.k = 5; ok |= v1.i != 5; ' # Test code for whether the C compiler supports C11 (complete). ac_c_conftest_c11_program="${ac_c_conftest_c89_globals} ${ac_c_conftest_c99_globals} ${ac_c_conftest_c11_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} ${ac_c_conftest_c99_main} ${ac_c_conftest_c11_main} return ok; } " # Test code for whether the C compiler supports C99 (complete). ac_c_conftest_c99_program="${ac_c_conftest_c89_globals} ${ac_c_conftest_c99_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} ${ac_c_conftest_c99_main} return ok; } " # Test code for whether the C compiler supports C89 (complete). ac_c_conftest_c89_program="${ac_c_conftest_c89_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} return ok; } " as_fn_append ac_header_c_list " stdlib.h stdlib_h HAVE_STDLIB_H" as_fn_append ac_header_c_list " string.h string_h HAVE_STRING_H" as_fn_append ac_header_c_list " inttypes.h inttypes_h HAVE_INTTYPES_H" as_fn_append ac_header_c_list " stdint.h stdint_h HAVE_STDINT_H" as_fn_append ac_header_c_list " strings.h strings_h HAVE_STRINGS_H" as_fn_append ac_header_c_list " sys/stat.h sys_stat_h HAVE_SYS_STAT_H" as_fn_append ac_header_c_list " sys/types.h sys_types_h HAVE_SYS_TYPES_H" as_fn_append ac_header_c_list " unistd.h unistd_h HAVE_UNISTD_H" as_fn_append ac_header_c_list " wchar.h wchar_h HAVE_WCHAR_H" as_fn_append ac_header_c_list " minix/config.h minix_config_h HAVE_MINIX_CONFIG_H" # Test code for whether the C++ compiler supports C++98 (global declarations) ac_cxx_conftest_cxx98_globals=' // Does the compiler advertise C++98 conformance? #if !defined __cplusplus || __cplusplus < 199711L # error "Compiler does not advertise C++98 conformance" #endif // These inclusions are to reject old compilers that // lack the unsuffixed header files. #include #include // and are *not* freestanding headers in C++98. extern void assert (int); namespace std { extern int strcmp (const char *, const char *); } // Namespaces, exceptions, and templates were all added after "C++ 2.0". using std::exception; using std::strcmp; namespace { void test_exception_syntax() { try { throw "test"; } catch (const char *s) { // Extra parentheses suppress a warning when building autoconf itself, // due to lint rules shared with more typical C programs. assert (!(strcmp) (s, "test")); } } template struct test_template { T const val; explicit test_template(T t) : val(t) {} template T add(U u) { return static_cast(u) + val; } }; } // anonymous namespace ' # Test code for whether the C++ compiler supports C++98 (body of main) ac_cxx_conftest_cxx98_main=' assert (argc); assert (! argv[0]); { test_exception_syntax (); test_template tt (2.0); assert (tt.add (4) == 6.0); assert (true && !false); } ' # Test code for whether the C++ compiler supports C++11 (global declarations) ac_cxx_conftest_cxx11_globals=' // Does the compiler advertise C++ 2011 conformance? #if !defined __cplusplus || __cplusplus < 201103L # error "Compiler does not advertise C++11 conformance" #endif namespace cxx11test { constexpr int get_val() { return 20; } struct testinit { int i; double d; }; class delegate { public: delegate(int n) : n(n) {} delegate(): delegate(2354) {} virtual int getval() { return this->n; }; protected: int n; }; class overridden : public delegate { public: overridden(int n): delegate(n) {} virtual int getval() override final { return this->n * 2; } }; class nocopy { public: nocopy(int i): i(i) {} nocopy() = default; nocopy(const nocopy&) = delete; nocopy & operator=(const nocopy&) = delete; private: int i; }; // for testing lambda expressions template Ret eval(Fn f, Ret v) { return f(v); } // for testing variadic templates and trailing return types template auto sum(V first) -> V { return first; } template auto sum(V first, Args... rest) -> V { return first + sum(rest...); } } ' # Test code for whether the C++ compiler supports C++11 (body of main) ac_cxx_conftest_cxx11_main=' { // Test auto and decltype auto a1 = 6538; auto a2 = 48573953.4; auto a3 = "String literal"; int total = 0; for (auto i = a3; *i; ++i) { total += *i; } decltype(a2) a4 = 34895.034; } { // Test constexpr short sa[cxx11test::get_val()] = { 0 }; } { // Test initializer lists cxx11test::testinit il = { 4323, 435234.23544 }; } { // Test range-based for int array[] = {9, 7, 13, 15, 4, 18, 12, 10, 5, 3, 14, 19, 17, 8, 6, 20, 16, 2, 11, 1}; for (auto &x : array) { x += 23; } } { // Test lambda expressions using cxx11test::eval; assert (eval ([](int x) { return x*2; }, 21) == 42); double d = 2.0; assert (eval ([&](double x) { return d += x; }, 3.0) == 5.0); assert (d == 5.0); assert (eval ([=](double x) mutable { return d += x; }, 4.0) == 9.0); assert (d == 5.0); } { // Test use of variadic templates using cxx11test::sum; auto a = sum(1); auto b = sum(1, 2); auto c = sum(1.0, 2.0, 3.0); } { // Test constructor delegation cxx11test::delegate d1; cxx11test::delegate d2(); cxx11test::delegate d3(45); } { // Test override and final cxx11test::overridden o1(55464); } { // Test nullptr char *c = nullptr; } { // Test template brackets test_template<::test_template> v(test_template(12)); } { // Unicode literals char const *utf8 = u8"UTF-8 string \u2500"; char16_t const *utf16 = u"UTF-8 string \u2500"; char32_t const *utf32 = U"UTF-32 string \u2500"; } ' # Test code for whether the C compiler supports C++11 (complete). ac_cxx_conftest_cxx11_program="${ac_cxx_conftest_cxx98_globals} ${ac_cxx_conftest_cxx11_globals} int main (int argc, char **argv) { int ok = 0; ${ac_cxx_conftest_cxx98_main} ${ac_cxx_conftest_cxx11_main} return ok; } " # Test code for whether the C compiler supports C++98 (complete). ac_cxx_conftest_cxx98_program="${ac_cxx_conftest_cxx98_globals} int main (int argc, char **argv) { int ok = 0; ${ac_cxx_conftest_cxx98_main} return ok; } " # Auxiliary files required by this configure script. ac_aux_files="ltmain.sh compile missing install-sh config.guess config.sub" # Locations in which to look for auxiliary files. ac_aux_dir_candidates="${srcdir}${PATH_SEPARATOR}${srcdir}/..${PATH_SEPARATOR}${srcdir}/../.." # Search for a directory containing all of the required auxiliary files, # $ac_aux_files, from the $PATH-style list $ac_aux_dir_candidates. # If we don't find one directory that contains all the files we need, # we report the set of missing files from the *first* directory in # $ac_aux_dir_candidates and give up. ac_missing_aux_files="" ac_first_candidate=: printf "%s\n" "$as_me:${as_lineno-$LINENO}: looking for aux files: $ac_aux_files" >&5 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in $ac_aux_dir_candidates do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac as_found=: printf "%s\n" "$as_me:${as_lineno-$LINENO}: trying $as_dir" >&5 ac_aux_dir_found=yes ac_install_sh= for ac_aux in $ac_aux_files do # As a special case, if "install-sh" is required, that requirement # can be satisfied by any of "install-sh", "install.sh", or "shtool", # and $ac_install_sh is set appropriately for whichever one is found. if test x"$ac_aux" = x"install-sh" then if test -f "${as_dir}install-sh"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install-sh found" >&5 ac_install_sh="${as_dir}install-sh -c" elif test -f "${as_dir}install.sh"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install.sh found" >&5 ac_install_sh="${as_dir}install.sh -c" elif test -f "${as_dir}shtool"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}shtool found" >&5 ac_install_sh="${as_dir}shtool install -c" else ac_aux_dir_found=no if $ac_first_candidate; then ac_missing_aux_files="${ac_missing_aux_files} install-sh" else break fi fi else if test -f "${as_dir}${ac_aux}"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}${ac_aux} found" >&5 else ac_aux_dir_found=no if $ac_first_candidate; then ac_missing_aux_files="${ac_missing_aux_files} ${ac_aux}" else break fi fi fi done if test "$ac_aux_dir_found" = yes; then ac_aux_dir="$as_dir" break fi ac_first_candidate=false as_found=false done IFS=$as_save_IFS if $as_found then : else $as_nop as_fn_error $? "cannot find required auxiliary files:$ac_missing_aux_files" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. if test -f "${ac_aux_dir}config.guess"; then ac_config_guess="$SHELL ${ac_aux_dir}config.guess" fi if test -f "${ac_aux_dir}config.sub"; then ac_config_sub="$SHELL ${ac_aux_dir}config.sub" fi if test -f "$ac_aux_dir/configure"; then ac_configure="$SHELL ${ac_aux_dir}configure" fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 printf "%s\n" "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 printf "%s\n" "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 printf "%s\n" "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 printf "%s\n" "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 printf "%s\n" "$as_me: former value: \`$ac_old_val'" >&2;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 printf "%s\n" "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`printf "%s\n" "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 printf "%s\n" "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`${MAKE-make} distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Make sure we can run config.sub. $SHELL "${ac_aux_dir}config.sub" sun4 >/dev/null 2>&1 || as_fn_error $? "cannot run $SHELL ${ac_aux_dir}config.sub" "$LINENO" 5 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 printf %s "checking build system type... " >&6; } if test ${ac_cv_build+y} then : printf %s "(cached) " >&6 else $as_nop ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "${ac_aux_dir}config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "${ac_aux_dir}config.sub" $ac_build_alias` || as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $ac_build_alias failed" "$LINENO" 5 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 printf "%s\n" "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 printf %s "checking host system type... " >&6; } if test ${ac_cv_host+y} then : printf %s "(cached) " >&6 else $as_nop if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "${ac_aux_dir}config.sub" $host_alias` || as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $host_alias failed" "$LINENO" 5 fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 printf "%s\n" "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac ac_config_headers="$ac_config_headers config.h" ###------------------------------------------------------------------------- # # AqBanking versions # AQBANKING_VERSION_MAJOR=6 AQBANKING_VERSION_MINOR=6 AQBANKING_VERSION_PATCHLEVEL=1 AQBANKING_VERSION_BUILD=0 AQBANKING_VERSION_TAG="stable" ###------------------------------------------------------------------------- # # SO versions # # # AqBanking # AQBANKING_SO_CURRENT=50 AQBANKING_SO_AGE=6 AQBANKING_SO_REVISION=1 AQBANKING_SO_EFFECTIVE="`echo \$(($AQBANKING_SO_CURRENT-$AQBANKING_SO_AGE))`" ###------------------------------------------------------------------------- # # Generate version strings and BUILD # SVN="svn" AQBANKING_VERSION_FULL_STRING="${AQBANKING_VERSION_MAJOR}.${AQBANKING_VERSION_MINOR}.${AQBANKING_VERSION_PATCHLEVEL}.${AQBANKING_VERSION_BUILD}${AQBANKING_VERSION_TAG}" AQBANKING_VERSION_STRING="$AQBANKING_VERSION_MAJOR.$AQBANKING_VERSION_MINOR.$AQBANKING_VERSION_PATCHLEVEL" AQBANKING_FINTS_VERSION_STRING="$AQBANKING_VERSION_MAJOR.$AQBANKING_VERSION_MINOR" case "$AQBANKING_VERSION_TAG" in svn|cvs) rev=`LC_ALL="C" $SVN info|grep 'Last Changed Rev'|cut -d' ' -f4` if test "x$rev" != "x" ; then AQBANKING_VERSION_FULL_STRING="$AQBANKING_VERSION_MAJOR.$AQBANKING_VERSION_MINOR.${AQBANKING_VERSION_PATCHLEVEL}${AQBANKING_VERSION_TAG}-r${rev}" fi ;; git) AQBANKING_VERSION_FULL_STRING="$AQBANKING_VERSION_MAJOR.$AQBANKING_VERSION_MINOR.${AQBANKING_VERSION_PATCHLEVEL}.${AQBANKING_VERSION_BUILD}" ;; esac ###------------------------------------------------------------------------- # # datetime # # Check whether --with-build-datetime was given. if test ${with_build_datetime+y} then : withval=$with_build_datetime; if test "x$withval" = "xyes" then : DATETIME="`date +\"%Y%m%d%H%M%S\"`" else $as_nop DATETIME="`date +\"%Y%m%d%H%M%S\" --date=\"$withval\"`" fi else $as_nop DATETIME="`date +\"%Y%m%d%H%M%S\"`" fi ###------------------------------------------------------------------------- # # Create release strings # case "$AQBANKING_VERSION_TAG" in cvs|svn) AQBANKING_VERSION_RELEASE_STRING="$AQBANKING_VERSION_MAJOR.$AQBANKING_VERSION_MINOR.$AQBANKING_VERSION_PATCHLEVEL.r${AQBANKING_VERSION_BUILD}" ;; git) AQBANKING_VERSION_RELEASE_STRING="$AQBANKING_VERSION_MAJOR.$AQBANKING_VERSION_MINOR.$AQBANKING_VERSION_PATCHLEVEL.${AQBANKING_VERSION_BUILD}${AQBANKING_VERSION_TAG}" ;; stable) AQBANKING_VERSION_RELEASE_STRING="$AQBANKING_VERSION_MAJOR.$AQBANKING_VERSION_MINOR.$AQBANKING_VERSION_PATCHLEVEL" ;; *) AQBANKING_VERSION_RELEASE_STRING="$AQBANKING_VERSION_MAJOR.$AQBANKING_VERSION_MINOR.$AQBANKING_VERSION_PATCHLEVEL" # add TAG AQBANKING_VERSION_RELEASE_STRING="${AQBANKING_VERSION_RELEASE_STRING}${AQBANKING_VERSION_TAG}" ;; esac ###------------------------------------------------------------------------- # # SUBST and DEFINE versions # printf "%s\n" "#define AQBANKING_FINTS_VERSION_STRING \"$AQBANKING_FINTS_VERSION_STRING\"" >>confdefs.h printf "%s\n" "#define AQBANKING_SO_EFFECTIVE_STR \"$AQBANKING_SO_EFFECTIVE\"" >>confdefs.h am__api_version='1.16' # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 printf %s "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if test ${ac_cv_path_install+y} then : printf %s "(cached) " >&6 else $as_nop as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac # Account for fact that we put trailing slashes in our PATH walk. case $as_dir in #(( ./ | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir/" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test ${ac_cv_path_install+y}; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 printf "%s\n" "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 printf %s "checking whether build environment is sane... " >&6; } # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". as_fn_error $? "ls -t appears to fail. Make sure there is not a broken alias in your environment" "$LINENO" 5 fi if test "$2" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$2" = conftest.file ) then # Ok. : else as_fn_error $? "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi rm -f conftest.file test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. # By default was `s,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`printf "%s\n" "$program_transform_name" | sed "$ac_script"` # Expand $ac_aux_dir to an absolute path. am_aux_dir=`cd "$ac_aux_dir" && pwd` if test x"${MISSING+set}" != xset; then MISSING="\${SHELL} '$am_aux_dir/missing'" fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 printf "%s\n" "$as_me: WARNING: 'missing' script is too old or missing" >&2;} fi if test x"${install_sh+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_STRIP+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 printf "%s\n" "$STRIP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_STRIP+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 printf "%s\n" "$ac_ct_STRIP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a race-free mkdir -p" >&5 printf %s "checking for a race-free mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if test ${ac_cv_path_mkdir+y} then : printf %s "(cached) " >&6 else $as_nop as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do as_fn_executable_p "$as_dir$ac_prog$ac_exec_ext" || continue case `"$as_dir$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir ('*'coreutils) '* | \ 'BusyBox '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS fi test -d ./--version && rmdir ./--version if test ${ac_cv_path_mkdir+y}; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. MKDIR_P="$ac_install_sh -d" fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 printf "%s\n" "$MKDIR_P" >&6; } for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_AWK+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 printf "%s\n" "$AWK" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$AWK" && break done { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 printf %s "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`printf "%s\n" "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval test \${ac_cv_prog_make_${ac_make}_set+y} then : printf %s "(cached) " >&6 else $as_nop cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } SET_MAKE= else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null # Check whether --enable-silent-rules was given. if test ${enable_silent_rules+y} then : enableval=$enable_silent_rules; fi case $enable_silent_rules in # ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=1;; esac am_make=${MAKE-make} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 printf %s "checking whether $am_make supports nested variables... " >&6; } if test ${am_cv_make_support_nested_variables+y} then : printf %s "(cached) " >&6 else $as_nop if printf "%s\n" 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 printf "%s\n" "$am_cv_make_support_nested_variables" >&6; } if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AM_BACKSLASH='\' if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE=aqbanking VERSION=$AQBANKING_VERSION_RELEASE_STRING printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h printf "%s\n" "#define VERSION \"$VERSION\"" >>confdefs.h # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # mkdir_p='$(MKDIR_P)' # We need awk for the "check" target (and possibly the TAP driver). The # system "awk" is bad on some platforms. # Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AMTAR='$${TAR-tar}' # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar pax cpio none' am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' # Variables for tags utilities; see am/tags.am if test -z "$CTAGS"; then CTAGS=ctags fi if test -z "$ETAGS"; then ETAGS=etags fi if test -z "$CSCOPE"; then CSCOPE=cscope fi # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile # recipes. So use an aggressive probe to check that the usage we want is # actually supported "in the wild" to an acceptable degree. # See automake bug#10828. # To make any issue more visible, cause the running configure to be aborted # by default if the 'rm' program in use doesn't match our expectations; the # user can still override this though. if rm -f && rm -fr && rm -rf; then : OK; else cat >&2 <<'END' Oops! Your 'rm' program seems unable to run without file operands specified on the command line, even when the '-f' option is present. This is contrary to the behaviour of most rm programs out there, and not conforming with the upcoming POSIX standard: Please tell bug-automake@gnu.org about your system, including the value of your $PATH and any error possibly output before this message. This can help us improve future automake versions. END if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then echo 'Configuration will proceed anyway, since you have set the' >&2 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 echo >&2 else cat >&2 <<'END' Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation that behaves properly: . If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM to "yes", and re-run configure. END as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5 fi fi ###------------------------------------------------------------------------- # # determine operating system # # check for OS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 printf %s "checking host system type... " >&6; } OSYSTEM="" OS_TYPE="" MAKE_DLL_TARGET="" INSTALL_DLL_TARGET="" printf "%s\n" "#define OS_NAME \"$host\"" >>confdefs.h case "$host" in *-linux*) OSYSTEM="linux" printf "%s\n" "#define OS_LINUX 1" >>confdefs.h printf "%s\n" "#define OS_POSIX 1" >>confdefs.h OS_TYPE="posix" ;; *-solaris*) OSYSTEM="solaris" printf "%s\n" "#define OS_SOLARIS 1" >>confdefs.h printf "%s\n" "#define OS_POSIX 1" >>confdefs.h OS_TYPE="posix" ;; *-darwin*) OSYSTEM="osx" printf "%s\n" "#define OS_DARWIN 1" >>confdefs.h printf "%s\n" "#define OS_POSIX 1" >>confdefs.h OS_TYPE="posix" ;; *-openbsd*) OSYSTEM="openbsd" printf "%s\n" "#define OS_OPENBSD 1" >>confdefs.h printf "%s\n" "#define OS_POSIX 1" >>confdefs.h OS_TYPE="posix" ;; *-freebsd* | *-kfreebsd*) OSYSTEM="freebsd" printf "%s\n" "#define OS_FREEBSD 1" >>confdefs.h printf "%s\n" "#define OS_POSIX 1" >>confdefs.h OS_TYPE="posix" ;; *-netbsd*) OSYSTEM="netbsd" printf "%s\n" "#define OS_NETBSD 1" >>confdefs.h printf "%s\n" "#define OS_POSIX 1" >>confdefs.h OS_TYPE="posix" ;; *-beos*) OSYSTEM="beos" printf "%s\n" "#define OS_BEOS 1" >>confdefs.h printf "%s\n" "#define OS_POSIX 1" >>confdefs.h OS_TYPE="posix" ;; *-win32*) OSYSTEM="windows" printf "%s\n" "#define OS_WIN32 1" >>confdefs.h OS_TYPE="windows" printf "%s\n" "#define BUILDING_DLL 1" >>confdefs.h MAKE_DLL_TARGET="dll" INSTALL_DLL_TARGET="dll-install" ;; *-mingw32*) OSYSTEM="windows" printf "%s\n" "#define OS_WIN32 1" >>confdefs.h OS_TYPE="windows" printf "%s\n" "#define BUILDING_DLL 1" >>confdefs.h MAKE_DLL_TARGET="dll" INSTALL_DLL_TARGET="dll-install" ;; *-palmos*) OSYSTEM="palmos" printf "%s\n" "#define OS_PALMOS 1" >>confdefs.h OS_TYPE="palmos" ;; *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Sorry, but host $host is not supported. Please report if it works anyway. We will assume that your system is a posix system and continue." >&5 printf "%s\n" "$as_me: WARNING: Sorry, but host $host is not supported. Please report if it works anyway. We will assume that your system is a posix system and continue." >&2;} OSYSTEM="unknown" OS_TYPE="posix" printf "%s\n" "#define OS_POSIX 1" >>confdefs.h ;; esac printf "%s\n" "#define OS_SHORTNAME \"$OSYSTEM\"" >>confdefs.h printf "%s\n" "#define OS_TYPE \"$OS_TYPE\"" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $OS_TYPE" >&5 printf "%s\n" "$OS_TYPE" >&6; } ###------------------------------------------------------------------------- # # prefix handling # if test "x$prefix" = "xNONE"; then prefix=$ac_default_prefix ac_configure_args="$ac_configure_args --prefix $prefix" fi ###------------------------------------------------------------------------- # # static/shared handling # # Check whether --enable-static was given. if test ${enable_static+y} then : enableval=$enable_static; p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS=$lt_save_ifs ;; esac else $as_nop enable_static=no fi # Check whether --enable-shared was given. if test ${enable_shared+y} then : enableval=$enable_shared; p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS=$lt_save_ifs ;; esac else $as_nop enable_shared=yes fi ###------------------------------------------------------------------------- # # define some needed variables # abs_top_builddir="`pwd`" ###------------------------------------------------------------------------- # # Enable some GNU extensions if using the GNU C library # DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} supports the include directive" >&5 printf %s "checking whether ${MAKE-make} supports the include directive... " >&6; } cat > confinc.mk << 'END' am__doit: @echo this is the am__doit target >confinc.out .PHONY: am__doit END am__include="#" am__quote= # BSD make does it like this. echo '.include "confinc.mk" # ignored' > confmf.BSD # Other make implementations (GNU, Solaris 10, AIX) do it like this. echo 'include confinc.mk # ignored' > confmf.GNU _am_result=no for s in GNU BSD; do { echo "$as_me:$LINENO: ${MAKE-make} -f confmf.$s && cat confinc.out" >&5 (${MAKE-make} -f confmf.$s && cat confinc.out) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } case $?:`cat confinc.out 2>/dev/null` in #( '0:this is the am__doit target') : case $s in #( BSD) : am__include='.include' am__quote='"' ;; #( *) : am__include='include' am__quote='' ;; esac ;; #( *) : ;; esac if test "$am__include" != "#"; then _am_result="yes ($s style)" break fi done rm -f confinc.* confmf.* { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ${_am_result}" >&5 printf "%s\n" "${_am_result}" >&6; } # Check whether --enable-dependency-tracking was given. if test ${enable_dependency_tracking+y} then : enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then if test "$as_dir$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args. set dummy ${ac_tool_prefix}clang; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}clang" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "clang", so it can be a program name with args. set dummy clang; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="clang" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi fi test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion -version; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 printf %s "checking whether the C compiler works... " >&6; } ac_link_default=`printf "%s\n" "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test ${ac_cv_exeext+y} && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else $as_nop ac_file='' fi if test -z "$ac_file" then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 printf %s "checking for C compiler default output file name... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 printf "%s\n" "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 printf %s "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else $as_nop { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 printf "%s\n" "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 printf %s "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 printf "%s\n" "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 printf %s "checking for suffix of object files... " >&6; } if test ${ac_cv_objext+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_nop printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 printf "%s\n" "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5 printf %s "checking whether the compiler supports GNU C... " >&6; } if test ${ac_cv_c_compiler_gnu+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_compiler_gnu=yes else $as_nop ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; } ac_compiler_gnu=$ac_cv_c_compiler_gnu if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+y} ac_save_CFLAGS=$CFLAGS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 printf %s "checking whether $CC accepts -g... " >&6; } if test ${ac_cv_prog_cc_g+y} then : printf %s "(cached) " >&6 else $as_nop ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes else $as_nop CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : else $as_nop ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 printf "%s\n" "$ac_cv_prog_cc_g" >&6; } if test $ac_test_CFLAGS; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi ac_prog_cc_stdc=no if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5 printf %s "checking for $CC option to enable C11 features... " >&6; } if test ${ac_cv_prog_cc_c11+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_prog_cc_c11=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c11_program _ACEOF for ac_arg in '' -std=gnu11 do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c11=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c11" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi if test "x$ac_cv_prog_cc_c11" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else $as_nop if test "x$ac_cv_prog_cc_c11" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 printf "%s\n" "$ac_cv_prog_cc_c11" >&6; } CC="$CC $ac_cv_prog_cc_c11" fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11 ac_prog_cc_stdc=c11 fi fi if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5 printf %s "checking for $CC option to enable C99 features... " >&6; } if test ${ac_cv_prog_cc_c99+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_prog_cc_c99=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c99_program _ACEOF for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99= do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c99=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c99" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi if test "x$ac_cv_prog_cc_c99" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else $as_nop if test "x$ac_cv_prog_cc_c99" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 printf "%s\n" "$ac_cv_prog_cc_c99" >&6; } CC="$CC $ac_cv_prog_cc_c99" fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 ac_prog_cc_stdc=c99 fi fi if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5 printf %s "checking for $CC option to enable C89 features... " >&6; } if test ${ac_cv_prog_cc_c89+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c89_program _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi if test "x$ac_cv_prog_cc_c89" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else $as_nop if test "x$ac_cv_prog_cc_c89" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 printf "%s\n" "$ac_cv_prog_cc_c89" >&6; } CC="$CC $ac_cv_prog_cc_c89" fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 ac_prog_cc_stdc=c89 fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 printf %s "checking whether $CC understands -c and -o together... " >&6; } if test ${am_cv_prog_cc_c_o+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 printf "%s\n" "$am_cv_prog_cc_c_o" >&6; } if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CC" am_compiler_list= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 printf %s "checking dependency style of $depcc... " >&6; } if test ${am_cv_CC_dependencies_compiler_type+y} then : printf %s "(cached) " >&6 else $as_nop if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 printf "%s\n" "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi ac_header= ac_cache= for ac_item in $ac_header_c_list do if test $ac_cache; then ac_fn_c_check_header_compile "$LINENO" $ac_header ac_cv_header_$ac_cache "$ac_includes_default" if eval test \"x\$ac_cv_header_$ac_cache\" = xyes; then printf "%s\n" "#define $ac_item 1" >> confdefs.h fi ac_header= ac_cache= elif test $ac_header; then ac_cache=$ac_item else ac_header=$ac_item fi done if test $ac_cv_header_stdlib_h = yes && test $ac_cv_header_string_h = yes then : printf "%s\n" "#define STDC_HEADERS 1" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5 printf %s "checking whether it is safe to define __EXTENSIONS__... " >&6; } if test ${ac_cv_safe_to_define___extensions__+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ # define __EXTENSIONS__ 1 $ac_includes_default int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_safe_to_define___extensions__=yes else $as_nop ac_cv_safe_to_define___extensions__=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5 printf "%s\n" "$ac_cv_safe_to_define___extensions__" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether _XOPEN_SOURCE should be defined" >&5 printf %s "checking whether _XOPEN_SOURCE should be defined... " >&6; } if test ${ac_cv_should_define__xopen_source+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_should_define__xopen_source=no if test $ac_cv_header_wchar_h = yes then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include mbstate_t x; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _XOPEN_SOURCE 500 #include mbstate_t x; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_should_define__xopen_source=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_should_define__xopen_source" >&5 printf "%s\n" "$ac_cv_should_define__xopen_source" >&6; } printf "%s\n" "#define _ALL_SOURCE 1" >>confdefs.h printf "%s\n" "#define _DARWIN_C_SOURCE 1" >>confdefs.h printf "%s\n" "#define _GNU_SOURCE 1" >>confdefs.h printf "%s\n" "#define _HPUX_ALT_XOPEN_SOCKET_API 1" >>confdefs.h printf "%s\n" "#define _NETBSD_SOURCE 1" >>confdefs.h printf "%s\n" "#define _OPENBSD_SOURCE 1" >>confdefs.h printf "%s\n" "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h printf "%s\n" "#define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1" >>confdefs.h printf "%s\n" "#define __STDC_WANT_IEC_60559_BFP_EXT__ 1" >>confdefs.h printf "%s\n" "#define __STDC_WANT_IEC_60559_DFP_EXT__ 1" >>confdefs.h printf "%s\n" "#define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1" >>confdefs.h printf "%s\n" "#define __STDC_WANT_IEC_60559_TYPES_EXT__ 1" >>confdefs.h printf "%s\n" "#define __STDC_WANT_LIB_EXT2__ 1" >>confdefs.h printf "%s\n" "#define __STDC_WANT_MATH_SPEC_FUNCS__ 1" >>confdefs.h printf "%s\n" "#define _TANDEM_SOURCE 1" >>confdefs.h if test $ac_cv_header_minix_config_h = yes then : MINIX=yes printf "%s\n" "#define _MINIX 1" >>confdefs.h printf "%s\n" "#define _POSIX_SOURCE 1" >>confdefs.h printf "%s\n" "#define _POSIX_1_SOURCE 2" >>confdefs.h else $as_nop MINIX= fi if test $ac_cv_safe_to_define___extensions__ = yes then : printf "%s\n" "#define __EXTENSIONS__ 1" >>confdefs.h fi if test $ac_cv_should_define__xopen_source = yes then : printf "%s\n" "#define _XOPEN_SOURCE 500" >>confdefs.h fi ###------------------------------------------------------------------------- # # Checks for programs. # ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then if test "$as_dir$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args. set dummy ${ac_tool_prefix}clang; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}clang" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "clang", so it can be a program name with args. set dummy clang; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="clang" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi fi test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion -version; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5 printf %s "checking whether the compiler supports GNU C... " >&6; } if test ${ac_cv_c_compiler_gnu+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_compiler_gnu=yes else $as_nop ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; } ac_compiler_gnu=$ac_cv_c_compiler_gnu if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+y} ac_save_CFLAGS=$CFLAGS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 printf %s "checking whether $CC accepts -g... " >&6; } if test ${ac_cv_prog_cc_g+y} then : printf %s "(cached) " >&6 else $as_nop ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes else $as_nop CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : else $as_nop ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 printf "%s\n" "$ac_cv_prog_cc_g" >&6; } if test $ac_test_CFLAGS; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi ac_prog_cc_stdc=no if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5 printf %s "checking for $CC option to enable C11 features... " >&6; } if test ${ac_cv_prog_cc_c11+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_prog_cc_c11=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c11_program _ACEOF for ac_arg in '' -std=gnu11 do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c11=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c11" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi if test "x$ac_cv_prog_cc_c11" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else $as_nop if test "x$ac_cv_prog_cc_c11" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 printf "%s\n" "$ac_cv_prog_cc_c11" >&6; } CC="$CC $ac_cv_prog_cc_c11" fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11 ac_prog_cc_stdc=c11 fi fi if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5 printf %s "checking for $CC option to enable C99 features... " >&6; } if test ${ac_cv_prog_cc_c99+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_prog_cc_c99=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c99_program _ACEOF for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99= do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c99=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c99" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi if test "x$ac_cv_prog_cc_c99" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else $as_nop if test "x$ac_cv_prog_cc_c99" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 printf "%s\n" "$ac_cv_prog_cc_c99" >&6; } CC="$CC $ac_cv_prog_cc_c99" fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 ac_prog_cc_stdc=c99 fi fi if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5 printf %s "checking for $CC option to enable C89 features... " >&6; } if test ${ac_cv_prog_cc_c89+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c89_program _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi if test "x$ac_cv_prog_cc_c89" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else $as_nop if test "x$ac_cv_prog_cc_c89" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 printf "%s\n" "$ac_cv_prog_cc_c89" >&6; } CC="$CC $ac_cv_prog_cc_c89" fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 ac_prog_cc_stdc=c89 fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 printf %s "checking whether $CC understands -c and -o together... " >&6; } if test ${am_cv_prog_cc_c_o+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 printf "%s\n" "$am_cv_prog_cc_c_o" >&6; } if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CC" am_compiler_list= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 printf %s "checking dependency style of $depcc... " >&6; } if test ${am_cv_CC_dependencies_compiler_type+y} then : printf %s "(cached) " >&6 else $as_nop if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 printf "%s\n" "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test -z "$CXX"; then if test -n "$CCC"; then CXX=$CCC else if test -n "$ac_tool_prefix"; then for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC clang++ do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CXX+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CXX"; then ac_cv_prog_CXX="$CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 printf "%s\n" "$CXX" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$CXX" && break done fi if test -z "$CXX"; then ac_ct_CXX=$CXX for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC clang++ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CXX+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_CXX"; then ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CXX="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 printf "%s\n" "$ac_ct_CXX" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$ac_ct_CXX" && break done if test "x$ac_ct_CXX" = x; then CXX="g++" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CXX=$ac_ct_CXX fi fi fi fi # Provide some information about the compiler. printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C++" >&5 printf %s "checking whether the compiler supports GNU C++... " >&6; } if test ${ac_cv_cxx_compiler_gnu+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : ac_compiler_gnu=yes else $as_nop ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_cxx_compiler_gnu=$ac_compiler_gnu fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 printf "%s\n" "$ac_cv_cxx_compiler_gnu" >&6; } ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test $ac_compiler_gnu = yes; then GXX=yes else GXX= fi ac_test_CXXFLAGS=${CXXFLAGS+y} ac_save_CXXFLAGS=$CXXFLAGS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 printf %s "checking whether $CXX accepts -g... " >&6; } if test ${ac_cv_prog_cxx_g+y} then : printf %s "(cached) " >&6 else $as_nop ac_save_cxx_werror_flag=$ac_cxx_werror_flag ac_cxx_werror_flag=yes ac_cv_prog_cxx_g=no CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : ac_cv_prog_cxx_g=yes else $as_nop CXXFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : else $as_nop ac_cxx_werror_flag=$ac_save_cxx_werror_flag CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : ac_cv_prog_cxx_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cxx_werror_flag=$ac_save_cxx_werror_flag fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 printf "%s\n" "$ac_cv_prog_cxx_g" >&6; } if test $ac_test_CXXFLAGS; then CXXFLAGS=$ac_save_CXXFLAGS elif test $ac_cv_prog_cxx_g = yes; then if test "$GXX" = yes; then CXXFLAGS="-g -O2" else CXXFLAGS="-g" fi else if test "$GXX" = yes; then CXXFLAGS="-O2" else CXXFLAGS= fi fi ac_prog_cxx_stdcxx=no if test x$ac_prog_cxx_stdcxx = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CXX option to enable C++11 features" >&5 printf %s "checking for $CXX option to enable C++11 features... " >&6; } if test ${ac_cv_prog_cxx_cxx11+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_prog_cxx_cxx11=no ac_save_CXX=$CXX cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_cxx_conftest_cxx11_program _ACEOF for ac_arg in '' -std=gnu++11 -std=gnu++0x -std=c++11 -std=c++0x -qlanglvl=extended0x -AA do CXX="$ac_save_CXX $ac_arg" if ac_fn_cxx_try_compile "$LINENO" then : ac_cv_prog_cxx_cxx11=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cxx_cxx11" != "xno" && break done rm -f conftest.$ac_ext CXX=$ac_save_CXX fi if test "x$ac_cv_prog_cxx_cxx11" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else $as_nop if test "x$ac_cv_prog_cxx_cxx11" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_cxx11" >&5 printf "%s\n" "$ac_cv_prog_cxx_cxx11" >&6; } CXX="$CXX $ac_cv_prog_cxx_cxx11" fi ac_cv_prog_cxx_stdcxx=$ac_cv_prog_cxx_cxx11 ac_prog_cxx_stdcxx=cxx11 fi fi if test x$ac_prog_cxx_stdcxx = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CXX option to enable C++98 features" >&5 printf %s "checking for $CXX option to enable C++98 features... " >&6; } if test ${ac_cv_prog_cxx_cxx98+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_prog_cxx_cxx98=no ac_save_CXX=$CXX cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_cxx_conftest_cxx98_program _ACEOF for ac_arg in '' -std=gnu++98 -std=c++98 -qlanglvl=extended -AA do CXX="$ac_save_CXX $ac_arg" if ac_fn_cxx_try_compile "$LINENO" then : ac_cv_prog_cxx_cxx98=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cxx_cxx98" != "xno" && break done rm -f conftest.$ac_ext CXX=$ac_save_CXX fi if test "x$ac_cv_prog_cxx_cxx98" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else $as_nop if test "x$ac_cv_prog_cxx_cxx98" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_cxx98" >&5 printf "%s\n" "$ac_cv_prog_cxx_cxx98" >&6; } CXX="$CXX $ac_cv_prog_cxx_cxx98" fi ac_cv_prog_cxx_stdcxx=$ac_cv_prog_cxx_cxx98 ac_prog_cxx_stdcxx=cxx98 fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CXX" am_compiler_list= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 printf %s "checking dependency style of $depcc... " >&6; } if test ${am_cv_CXX_dependencies_compiler_type+y} then : printf %s "(cached) " >&6 else $as_nop if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CXX_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CXX_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CXX_dependencies_compiler_type=none fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5 printf "%s\n" "$am_cv_CXX_dependencies_compiler_type" >&6; } CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then am__fastdepCXX_TRUE= am__fastdepCXX_FALSE='#' else am__fastdepCXX_TRUE='#' am__fastdepCXX_FALSE= fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 printf %s "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if test ${ac_cv_prog_CPP+y} then : printf %s "(cached) " >&6 else $as_nop # Double quotes because $CC needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" cpp /lib/cpp do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO" then : else $as_nop # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO" then : # Broken: success on invalid input. continue else $as_nop # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 printf "%s\n" "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO" then : else $as_nop # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO" then : # Broken: success on invalid input. continue else $as_nop # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok then : else $as_nop { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu case `pwd` in *\ * | *\ *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 printf "%s\n" "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; esac macro_version='2.4.7' macro_revision='2.4.7' ltmain=$ac_aux_dir/ltmain.sh # Backslashify metacharacters that are still active within # double-quoted strings. sed_quote_subst='s/\(["`$\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\(["`\\]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 printf %s "checking how to print strings... " >&6; } # Test print first, because it will be a builtin if present. if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='print -r --' elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='printf %s\n' else # Use this function as a fallback that always works. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $1 _LTECHO_EOF' } ECHO='func_fallback_echo' fi # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "" } case $ECHO in printf*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: printf" >&5 printf "%s\n" "printf" >&6; } ;; print*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 printf "%s\n" "print -r" >&6; } ;; *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: cat" >&5 printf "%s\n" "cat" >&6; } ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 printf %s "checking for a sed that does not truncate output... " >&6; } if test ${ac_cv_path_SED+y} then : printf %s "(cached) " >&6 else $as_nop ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for ac_i in 1 2 3 4 5 6 7; do ac_script="$ac_script$as_nl$ac_script" done echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed { ac_script=; unset ac_script;} if test -z "$SED"; then ac_path_SED_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_prog in sed gsed do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_SED="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_SED" || continue # Check for GNU ac_path_SED and select it if it is found. # Check for GNU $ac_path_SED case `"$ac_path_SED" --version 2>&1` in *GNU*) ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; *) ac_count=0 printf %s 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" printf "%s\n" '' >> "conftest.nl" "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_SED_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_SED="$ac_path_SED" ac_path_SED_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_SED_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_SED"; then as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 fi else ac_cv_path_SED=$SED fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 printf "%s\n" "$ac_cv_path_SED" >&6; } SED="$ac_cv_path_SED" rm -f conftest.sed test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 printf %s "checking for grep that handles long lines and -e... " >&6; } if test ${ac_cv_path_GREP+y} then : printf %s "(cached) " >&6 else $as_nop if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_prog in grep ggrep do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 printf %s 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" printf "%s\n" 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 printf "%s\n" "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 printf %s "checking for egrep... " >&6; } if test ${ac_cv_path_EGREP+y} then : printf %s "(cached) " >&6 else $as_nop if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_prog in egrep do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 printf %s 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" printf "%s\n" 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 printf "%s\n" "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 printf %s "checking for fgrep... " >&6; } if test ${ac_cv_path_FGREP+y} then : printf %s "(cached) " >&6 else $as_nop if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 then ac_cv_path_FGREP="$GREP -F" else if test -z "$FGREP"; then ac_path_FGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_prog in fgrep do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_FGREP="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_FGREP" || continue # Check for GNU ac_path_FGREP and select it if it is found. # Check for GNU $ac_path_FGREP case `"$ac_path_FGREP" --version 2>&1` in *GNU*) ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; *) ac_count=0 printf %s 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" printf "%s\n" 'FGREP' >> "conftest.nl" "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_FGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_FGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_FGREP"; then as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_FGREP=$FGREP fi fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 printf "%s\n" "$ac_cv_path_FGREP" >&6; } FGREP="$ac_cv_path_FGREP" test -z "$GREP" && GREP=grep # Check whether --with-gnu-ld was given. if test ${with_gnu_ld+y} then : withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes else $as_nop with_gnu_ld=no fi ac_prog=ld if test yes = "$GCC"; then # Check if gcc -print-prog-name=ld gives a path. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 printf %s "checking for ld used by $CC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return, which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD=$ac_prog ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test yes = "$with_gnu_ld"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 printf %s "checking for GNU ld... " >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 printf %s "checking for non-GNU ld... " >&6; } fi if test ${lt_cv_path_LD+y} then : printf %s "(cached) " >&6 else $as_nop if test -z "$LD"; then lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD=$ac_dir/$ac_prog # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &5 printf "%s\n" "$LD" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 printf %s "checking if the linker ($LD) is GNU ld... " >&6; } if test ${lt_cv_prog_gnu_ld+y} then : printf %s "(cached) " >&6 else $as_nop # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 printf "%s\n" "$lt_cv_prog_gnu_ld" >&6; } with_gnu_ld=$lt_cv_prog_gnu_ld { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 printf %s "checking for BSD- or MS-compatible name lister (nm)... " >&6; } if test ${lt_cv_path_NM+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM=$NM else lt_nm_to_check=${ac_tool_prefix}nm if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. tmp_nm=$ac_dir/$lt_tmp_nm if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext"; then # Check to see if the nm accepts a BSD-compat flag. # Adding the 'sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty case $build_os in mingw*) lt_bad_file=conftest.nm/nofile ;; *) lt_bad_file=/dev/null ;; esac case `"$tmp_nm" -B $lt_bad_file 2>&1 | $SED '1q'` in *$lt_bad_file* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break 2 ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | $SED '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break 2 ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS=$lt_save_ifs done : ${lt_cv_path_NM=no} fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 printf "%s\n" "$lt_cv_path_NM" >&6; } if test no != "$lt_cv_path_NM"; then NM=$lt_cv_path_NM else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$DUMPBIN"; then : # Let the user override the test. else if test -n "$ac_tool_prefix"; then for ac_prog in dumpbin "link -dump" do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_DUMPBIN+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$DUMPBIN"; then ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DUMPBIN=$ac_cv_prog_DUMPBIN if test -n "$DUMPBIN"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 printf "%s\n" "$DUMPBIN" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$DUMPBIN" && break done fi if test -z "$DUMPBIN"; then ac_ct_DUMPBIN=$DUMPBIN for ac_prog in dumpbin "link -dump" do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_DUMPBIN+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_DUMPBIN"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN if test -n "$ac_ct_DUMPBIN"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 printf "%s\n" "$ac_ct_DUMPBIN" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$ac_ct_DUMPBIN" && break done if test "x$ac_ct_DUMPBIN" = x; then DUMPBIN=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DUMPBIN=$ac_ct_DUMPBIN fi fi case `$DUMPBIN -symbols -headers /dev/null 2>&1 | $SED '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols -headers" ;; *) DUMPBIN=: ;; esac fi if test : != "$DUMPBIN"; then NM=$DUMPBIN fi fi test -z "$NM" && NM=nm { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 printf %s "checking the name lister ($NM) interface... " >&6; } if test ${lt_cv_nm_interface+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&5 (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&5 (eval echo "\"\$as_me:$LINENO: output\"" >&5) cat conftest.out >&5 if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest* fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 printf "%s\n" "$lt_cv_nm_interface" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 printf %s "checking whether ln -s works... " >&6; } LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 printf "%s\n" "no, using $LN_S" >&6; } fi # find the maximum length of command line arguments { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 printf %s "checking the maximum length of command line arguments... " >&6; } if test ${lt_cv_sys_max_cmd_len+y} then : printf %s "(cached) " >&6 else $as_nop i=0 teststring=ABCD case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; mint*) # On MiNT this can take a long time and run out of memory. lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; bitrig* | darwin* | dragonfly* | freebsd* | midnightbsd* | netbsd* | openbsd*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; os2*) # The test takes a long time on OS/2. lt_cv_sys_max_cmd_len=8192 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | $SED 's/.*[ ]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len" && \ test undefined != "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test X`env echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && test 17 != "$i" # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac fi if test -n "$lt_cv_sys_max_cmd_len"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 printf "%s\n" "$lt_cv_sys_max_cmd_len" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none" >&5 printf "%s\n" "none" >&6; } fi max_cmd_len=$lt_cv_sys_max_cmd_len : ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 printf %s "checking how to convert $build file names to $host format... " >&6; } if test ${lt_cv_to_host_file_cmd+y} then : printf %s "(cached) " >&6 else $as_nop case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 ;; esac ;; *-*-cygwin* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_noop ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin ;; esac ;; * ) # unhandled hosts (and "normal" native builds) lt_cv_to_host_file_cmd=func_convert_file_noop ;; esac fi to_host_file_cmd=$lt_cv_to_host_file_cmd { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 printf "%s\n" "$lt_cv_to_host_file_cmd" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 printf %s "checking how to convert $build file names to toolchain format... " >&6; } if test ${lt_cv_to_tool_file_cmd+y} then : printf %s "(cached) " >&6 else $as_nop #assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 ;; esac ;; esac fi to_tool_file_cmd=$lt_cv_to_tool_file_cmd { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 printf "%s\n" "$lt_cv_to_tool_file_cmd" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 printf %s "checking for $LD option to reload object files... " >&6; } if test ${lt_cv_ld_reload_flag+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_ld_reload_flag='-r' fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 printf "%s\n" "$lt_cv_ld_reload_flag" >&6; } reload_flag=$lt_cv_ld_reload_flag case $reload_flag in "" | " "*) ;; *) reload_flag=" $reload_flag" ;; esac reload_cmds='$LD$reload_flag -o $output$reload_objs' case $host_os in cygwin* | mingw* | pw32* | cegcc*) if test yes != "$GCC"; then reload_cmds=false fi ;; darwin*) if test yes = "$GCC"; then reload_cmds='$LTCC $LTCFLAGS -nostdlib $wl-r -o $output$reload_objs' else reload_cmds='$LD$reload_flag -o $output$reload_objs' fi ;; esac if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}file", so it can be a program name with args. set dummy ${ac_tool_prefix}file; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_FILECMD+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$FILECMD"; then ac_cv_prog_FILECMD="$FILECMD" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_FILECMD="${ac_tool_prefix}file" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi FILECMD=$ac_cv_prog_FILECMD if test -n "$FILECMD"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $FILECMD" >&5 printf "%s\n" "$FILECMD" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_FILECMD"; then ac_ct_FILECMD=$FILECMD # Extract the first word of "file", so it can be a program name with args. set dummy file; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_FILECMD+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_FILECMD"; then ac_cv_prog_ac_ct_FILECMD="$ac_ct_FILECMD" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_FILECMD="file" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_FILECMD=$ac_cv_prog_ac_ct_FILECMD if test -n "$ac_ct_FILECMD"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_FILECMD" >&5 printf "%s\n" "$ac_ct_FILECMD" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_FILECMD" = x; then FILECMD=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac FILECMD=$ac_ct_FILECMD fi else FILECMD="$ac_cv_prog_FILECMD" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. set dummy ${ac_tool_prefix}objdump; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_OBJDUMP+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$OBJDUMP"; then ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OBJDUMP=$ac_cv_prog_OBJDUMP if test -n "$OBJDUMP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 printf "%s\n" "$OBJDUMP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_OBJDUMP"; then ac_ct_OBJDUMP=$OBJDUMP # Extract the first word of "objdump", so it can be a program name with args. set dummy objdump; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_OBJDUMP+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_OBJDUMP"; then ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OBJDUMP="objdump" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP if test -n "$ac_ct_OBJDUMP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 printf "%s\n" "$ac_ct_OBJDUMP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_OBJDUMP" = x; then OBJDUMP="false" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OBJDUMP=$ac_ct_OBJDUMP fi else OBJDUMP="$ac_cv_prog_OBJDUMP" fi test -z "$OBJDUMP" && OBJDUMP=objdump { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 printf %s "checking how to recognize dependent libraries... " >&6; } if test ${lt_cv_deplibs_check_method+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_file_magic_cmd='$MAGIC_CMD' lt_cv_file_magic_test_file= lt_cv_deplibs_check_method='unknown' # Need to set the preceding variable on all platforms that support # interlibrary dependencies. # 'none' -- dependencies not supported. # 'unknown' -- same as none, but documents that we really don't know. # 'pass_all' -- all dependencies passed with no checks. # 'test_compile' -- check by making test program. # 'file_magic [[regex]]' -- check by looking for files in library path # that responds to the $file_magic_cmd with a given extended regex. # If you have 'file' or equivalent on your system and you're not sure # whether 'pass_all' will *always* work, you probably want this one. case $host_os in aix[4-9]*) lt_cv_deplibs_check_method=pass_all ;; beos*) lt_cv_deplibs_check_method=pass_all ;; bsdi[45]*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' lt_cv_file_magic_cmd='$FILECMD -L' lt_cv_file_magic_test_file=/shlib/libc.so ;; cygwin*) # func_win32_libid is a shell function defined in ltmain.sh lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' ;; mingw* | pw32*) # Base MSYS/MinGW do not provide the 'file' command needed by # func_win32_libid shell function, so use a weaker test based on 'objdump', # unless we find 'file', for example because we are cross-compiling. if ( file / ) >/dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else # Keep this pattern in sync with the one in func_win32_libid. lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc*) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly* | midnightbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=$FILECMD lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; haiku*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=$FILECMD case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]' lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix[3-9]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) lt_cv_deplibs_check_method=pass_all ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=$FILECMD lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; *nto* | *qnx*) lt_cv_deplibs_check_method=pass_all ;; openbsd* | bitrig*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; os2*) lt_cv_deplibs_check_method=pass_all ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 printf "%s\n" "$lt_cv_deplibs_check_method" >&6; } file_magic_glob= want_nocaseglob=no if test "$build" = "$host"; then case $host_os in mingw* | pw32*) if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then want_nocaseglob=yes else file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"` fi ;; esac fi file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. set dummy ${ac_tool_prefix}dlltool; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_DLLTOOL+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$DLLTOOL"; then ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DLLTOOL=$ac_cv_prog_DLLTOOL if test -n "$DLLTOOL"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 printf "%s\n" "$DLLTOOL" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_DLLTOOL"; then ac_ct_DLLTOOL=$DLLTOOL # Extract the first word of "dlltool", so it can be a program name with args. set dummy dlltool; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_DLLTOOL+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_DLLTOOL"; then ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DLLTOOL="dlltool" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL if test -n "$ac_ct_DLLTOOL"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 printf "%s\n" "$ac_ct_DLLTOOL" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_DLLTOOL" = x; then DLLTOOL="false" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DLLTOOL=$ac_ct_DLLTOOL fi else DLLTOOL="$ac_cv_prog_DLLTOOL" fi test -z "$DLLTOOL" && DLLTOOL=dlltool { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 printf %s "checking how to associate runtime and link libraries... " >&6; } if test ${lt_cv_sharedlib_from_linklib_cmd+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in cygwin* | mingw* | pw32* | cegcc*) # two different shell functions defined in ltmain.sh; # decide which one to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in *--identify-strict*) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib ;; *) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback ;; esac ;; *) # fallback: assume linklib IS sharedlib lt_cv_sharedlib_from_linklib_cmd=$ECHO ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 printf "%s\n" "$lt_cv_sharedlib_from_linklib_cmd" >&6; } sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO if test -n "$ac_tool_prefix"; then for ac_prog in ar do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_AR+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_AR="$ac_tool_prefix$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 printf "%s\n" "$AR" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$AR" && break done fi if test -z "$AR"; then ac_ct_AR=$AR for ac_prog in ar do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_AR+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 printf "%s\n" "$ac_ct_AR" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$ac_ct_AR" && break done if test "x$ac_ct_AR" = x; then AR="false" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AR=$ac_ct_AR fi fi : ${AR=ar} # Use ARFLAGS variable as AR's operation code to sync the variable naming with # Automake. If both AR_FLAGS and ARFLAGS are specified, AR_FLAGS should have # higher priority because thats what people were doing historically (setting # ARFLAGS for automake and AR_FLAGS for libtool). FIXME: Make the AR_FLAGS # variable obsoleted/removed. test ${AR_FLAGS+y} || AR_FLAGS=${ARFLAGS-cr} lt_ar_flags=$AR_FLAGS # Make AR_FLAGS overridable by 'make ARFLAGS='. Don't try to run-time override # by AR_FLAGS because that was never working and AR_FLAGS is about to die. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 printf %s "checking for archiver @FILE support... " >&6; } if test ${lt_cv_ar_at_file+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_ar_at_file=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test 0 -eq "$ac_status"; then # Ensure the archiver fails upon bogus file names. rm -f conftest.$ac_objext libconftest.a { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test 0 -ne "$ac_status"; then lt_cv_ar_at_file=@ fi fi rm -f conftest.* libconftest.a fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 printf "%s\n" "$lt_cv_ar_at_file" >&6; } if test no = "$lt_cv_ar_at_file"; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_STRIP+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 printf "%s\n" "$STRIP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_STRIP+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 printf "%s\n" "$ac_ct_STRIP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi test -z "$STRIP" && STRIP=: if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_RANLIB+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 printf "%s\n" "$RANLIB" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_RANLIB+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 printf "%s\n" "$ac_ct_RANLIB" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi test -z "$RANLIB" && RANLIB=: # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in bitrig* | openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" fi case $host_os in darwin*) lock_old_archive_extraction=yes ;; *) lock_old_archive_extraction=no ;; esac # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Check for command to grab the raw symbol name followed by C symbol from nm. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 printf %s "checking command to parse $NM output from $compiler object... " >&6; } if test ${lt_cv_sys_global_symbol_pipe+y} then : printf %s "(cached) " >&6 else $as_nop # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[BCDEGRST]' # Regexp to match symbols that can be accessed directly from C. sympat='\([_A-Za-z][_A-Za-z0-9]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[BCDT]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[ABCDGISTW]' ;; hpux*) if test ia64 = "$host_cpu"; then symcode='[ABCDEGRST]' fi ;; irix* | nonstopux*) symcode='[BCDEGRST]' ;; osf*) symcode='[BCDEGQRST]' ;; solaris*) symcode='[BDRT]' ;; sco3.2v5*) symcode='[DT]' ;; sysv4.2uw2*) symcode='[DT]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[ABDT]' ;; sysv4) symcode='[DFNSTU]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[ABCDGIRSTW]' ;; esac if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Gets list of data symbols to import. lt_cv_sys_global_symbol_to_import="$SED -n -e 's/^I .* \(.*\)$/\1/p'" # Adjust the below global symbol transforms to fixup imported variables. lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'" lt_c_name_hook=" -e 's/^I .* \(.*\)$/ {\"\1\", (void *) 0},/p'" lt_c_name_lib_hook="\ -e 's/^I .* \(lib.*\)$/ {\"\1\", (void *) 0},/p'\ -e 's/^I .* \(.*\)$/ {\"lib\1\", (void *) 0},/p'" else # Disable hooks by default. lt_cv_sys_global_symbol_to_import= lt_cdecl_hook= lt_c_name_hook= lt_c_name_lib_hook= fi # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="$SED -n"\ $lt_cdecl_hook\ " -e 's/^T .* \(.*\)$/extern int \1();/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="$SED -n"\ $lt_c_name_hook\ " -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/p'" # Transform an extracted symbol line into symbol name with lib prefix and # symbol address. lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="$SED -n"\ $lt_c_name_lib_hook\ " -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ " -e 's/^$symcode$symcode* .* \(lib.*\)$/ {\"\1\", (void *) \&\1},/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/ {\"lib\1\", (void *) \&\1},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function, # D for any global variable and I for any imported variable. # Also find C++ and __fastcall symbols from MSVC++ or ICC, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK '"\ " {last_section=section; section=\$ 3};"\ " /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " /^ *Symbol name *: /{split(\$ 0,sn,\":\"); si=substr(sn[2],2)};"\ " /^ *Type *: code/{print \"T\",si,substr(si,length(prfx))};"\ " /^ *Type *: data/{print \"I\",si,substr(si,length(prfx))};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=\"D\"}; \$ 0~/\(\).*\|/{f=\"T\"};"\ " {split(\$ 0,a,/\||\r/); split(a[2],s)};"\ " s[1]~/^[@?]/{print f,s[1],s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx" else lt_cv_sys_global_symbol_pipe="$SED -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | $SED '/ __gnu_lto/d'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # Now try to grab the symbols. nlist=conftest.nm $ECHO "$as_me:$LINENO: $NM conftest.$ac_objext | $lt_cv_sys_global_symbol_pipe > $nlist" >&5 if eval "$NM" conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist 2>&5 && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE /* DATA imports from DLLs on WIN32 can't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT_DLSYM_CONST #elif defined __osf__ /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else # define LT_DLSYM_CONST const #endif #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ LT_DLSYM_CONST struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_globsym_save_LIBS=$LIBS lt_globsym_save_CFLAGS=$CFLAGS LIBS=conftstm.$ac_objext CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest$ac_exeext; then pipe_works=yes fi LIBS=$lt_globsym_save_LIBS CFLAGS=$lt_globsym_save_CFLAGS else echo "cannot find nm_test_func in $nlist" >&5 fi else echo "cannot find nm_test_var in $nlist" >&5 fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 fi else echo "$progname: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test yes = "$pipe_works"; then break else lt_cv_sys_global_symbol_pipe= fi done fi if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: failed" >&5 printf "%s\n" "failed" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ok" >&5 printf "%s\n" "ok" >&6; } fi # Response file support. if test "$lt_cv_nm_interface" = "MS dumpbin"; then nm_file_list_spec='@' elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then nm_file_list_spec='@' fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 printf %s "checking for sysroot... " >&6; } # Check whether --with-sysroot was given. if test ${with_sysroot+y} then : withval=$with_sysroot; else $as_nop with_sysroot=no fi lt_sysroot= case $with_sysroot in #( yes) if test yes = "$GCC"; then lt_sysroot=`$CC --print-sysroot 2>/dev/null` fi ;; #( /*) lt_sysroot=`echo "$with_sysroot" | $SED -e "$sed_quote_subst"` ;; #( no|'') ;; #( *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $with_sysroot" >&5 printf "%s\n" "$with_sysroot" >&6; } as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5 ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 printf "%s\n" "${lt_sysroot:-no}" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a working dd" >&5 printf %s "checking for a working dd... " >&6; } if test ${ac_cv_path_lt_DD+y} then : printf %s "(cached) " >&6 else $as_nop printf 0123456789abcdef0123456789abcdef >conftest.i cat conftest.i conftest.i >conftest2.i : ${lt_DD:=$DD} if test -z "$lt_DD"; then ac_path_lt_DD_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_prog in dd do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_lt_DD="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_lt_DD" || continue if "$ac_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then cmp -s conftest.i conftest.out \ && ac_cv_path_lt_DD="$ac_path_lt_DD" ac_path_lt_DD_found=: fi $ac_path_lt_DD_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_lt_DD"; then : fi else ac_cv_path_lt_DD=$lt_DD fi rm -f conftest.i conftest2.i conftest.out fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_lt_DD" >&5 printf "%s\n" "$ac_cv_path_lt_DD" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to truncate binary pipes" >&5 printf %s "checking how to truncate binary pipes... " >&6; } if test ${lt_cv_truncate_bin+y} then : printf %s "(cached) " >&6 else $as_nop printf 0123456789abcdef0123456789abcdef >conftest.i cat conftest.i conftest.i >conftest2.i lt_cv_truncate_bin= if "$ac_cv_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then cmp -s conftest.i conftest.out \ && lt_cv_truncate_bin="$ac_cv_path_lt_DD bs=4096 count=1" fi rm -f conftest.i conftest2.i conftest.out test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_truncate_bin" >&5 printf "%s\n" "$lt_cv_truncate_bin" >&6; } # Calculate cc_basename. Skip known compiler wrappers and cross-prefix. func_cc_basename () { for cc_temp in $*""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` } # Check whether --enable-libtool-lock was given. if test ${enable_libtool_lock+y} then : enableval=$enable_libtool_lock; fi test no = "$enable_libtool_lock" || enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out what ABI is being produced by ac_compile, and set mode # options accordingly. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `$FILECMD conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE=32 ;; *ELF-64*) HPUX_IA64_MODE=64 ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. echo '#line '$LINENO' "configure"' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then if test yes = "$lt_cv_prog_gnu_ld"; then case `$FILECMD conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `$FILECMD conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; mips64*-*linux*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. echo '#line '$LINENO' "configure"' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then emul=elf case `$FILECMD conftest.$ac_objext` in *32-bit*) emul="${emul}32" ;; *64-bit*) emul="${emul}64" ;; esac case `$FILECMD conftest.$ac_objext` in *MSB*) emul="${emul}btsmip" ;; *LSB*) emul="${emul}ltsmip" ;; esac case `$FILECMD conftest.$ac_objext` in *N32*) emul="${emul}n32" ;; esac LD="${LD-ld} -m $emul" fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. Note that the listed cases only cover the # situations where additional linker options are needed (such as when # doing 32-bit compilation for a host where ld defaults to 64-bit, or # vice versa); the common cases where no linker options are needed do # not appear in the list. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `$FILECMD conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) case `$FILECMD conftest.o` in *x86-64*) LD="${LD-ld} -m elf32_x86_64" ;; *) LD="${LD-ld} -m elf_i386" ;; esac ;; powerpc64le-*linux*) LD="${LD-ld} -m elf32lppclinux" ;; powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; powerpcle-*linux*) LD="${LD-ld} -m elf64lppc" ;; powerpc-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS=$CFLAGS CFLAGS="$CFLAGS -belf" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 printf %s "checking whether the C compiler needs -belf... " >&6; } if test ${lt_cv_cc_needs_belf+y} then : printf %s "(cached) " >&6 else $as_nop ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : lt_cv_cc_needs_belf=yes else $as_nop lt_cv_cc_needs_belf=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 printf "%s\n" "$lt_cv_cc_needs_belf" >&6; } if test yes != "$lt_cv_cc_needs_belf"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS=$SAVE_CFLAGS fi ;; *-*solaris*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `$FILECMD conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) case $host in i?86-*-solaris*|x86_64-*-solaris*) LD="${LD-ld} -m elf_x86_64" ;; sparc*-*-solaris*) LD="${LD-ld} -m elf64_sparc" ;; esac # GNU ld 2.21 introduced _sol2 emulations. Use them if available. if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then LD=${LD-ld}_sol2 fi ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks=$enable_libtool_lock if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args. set dummy ${ac_tool_prefix}mt; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_MANIFEST_TOOL+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$MANIFEST_TOOL"; then ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL if test -n "$MANIFEST_TOOL"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 printf "%s\n" "$MANIFEST_TOOL" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_MANIFEST_TOOL"; then ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL # Extract the first word of "mt", so it can be a program name with args. set dummy mt; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_MANIFEST_TOOL+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_MANIFEST_TOOL"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="mt" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL if test -n "$ac_ct_MANIFEST_TOOL"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 printf "%s\n" "$ac_ct_MANIFEST_TOOL" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_MANIFEST_TOOL" = x; then MANIFEST_TOOL=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL fi else MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL" fi test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 printf %s "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } if test ${lt_cv_path_mainfest_tool+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5 $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out cat conftest.err >&5 if $GREP 'Manifest Tool' conftest.out > /dev/null; then lt_cv_path_mainfest_tool=yes fi rm -f conftest* fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 printf "%s\n" "$lt_cv_path_mainfest_tool" >&6; } if test yes != "$lt_cv_path_mainfest_tool"; then MANIFEST_TOOL=: fi case $host_os in rhapsody* | darwin*) if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_DSYMUTIL+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$DSYMUTIL"; then ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DSYMUTIL=$ac_cv_prog_DSYMUTIL if test -n "$DSYMUTIL"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 printf "%s\n" "$DSYMUTIL" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_DSYMUTIL"; then ac_ct_DSYMUTIL=$DSYMUTIL # Extract the first word of "dsymutil", so it can be a program name with args. set dummy dsymutil; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_DSYMUTIL+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_DSYMUTIL"; then ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL if test -n "$ac_ct_DSYMUTIL"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 printf "%s\n" "$ac_ct_DSYMUTIL" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_DSYMUTIL" = x; then DSYMUTIL=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DSYMUTIL=$ac_ct_DSYMUTIL fi else DSYMUTIL="$ac_cv_prog_DSYMUTIL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. set dummy ${ac_tool_prefix}nmedit; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_NMEDIT+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$NMEDIT"; then ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi NMEDIT=$ac_cv_prog_NMEDIT if test -n "$NMEDIT"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 printf "%s\n" "$NMEDIT" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_NMEDIT"; then ac_ct_NMEDIT=$NMEDIT # Extract the first word of "nmedit", so it can be a program name with args. set dummy nmedit; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_NMEDIT+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_NMEDIT"; then ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_NMEDIT="nmedit" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT if test -n "$ac_ct_NMEDIT"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 printf "%s\n" "$ac_ct_NMEDIT" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_NMEDIT" = x; then NMEDIT=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac NMEDIT=$ac_ct_NMEDIT fi else NMEDIT="$ac_cv_prog_NMEDIT" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. set dummy ${ac_tool_prefix}lipo; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_LIPO+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$LIPO"; then ac_cv_prog_LIPO="$LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_LIPO="${ac_tool_prefix}lipo" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi LIPO=$ac_cv_prog_LIPO if test -n "$LIPO"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 printf "%s\n" "$LIPO" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_LIPO"; then ac_ct_LIPO=$LIPO # Extract the first word of "lipo", so it can be a program name with args. set dummy lipo; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_LIPO+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_LIPO"; then ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_LIPO="lipo" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO if test -n "$ac_ct_LIPO"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 printf "%s\n" "$ac_ct_LIPO" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_LIPO" = x; then LIPO=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac LIPO=$ac_ct_LIPO fi else LIPO="$ac_cv_prog_LIPO" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. set dummy ${ac_tool_prefix}otool; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_OTOOL+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$OTOOL"; then ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL="${ac_tool_prefix}otool" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OTOOL=$ac_cv_prog_OTOOL if test -n "$OTOOL"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 printf "%s\n" "$OTOOL" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL"; then ac_ct_OTOOL=$OTOOL # Extract the first word of "otool", so it can be a program name with args. set dummy otool; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_OTOOL+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_OTOOL"; then ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL="otool" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL if test -n "$ac_ct_OTOOL"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 printf "%s\n" "$ac_ct_OTOOL" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_OTOOL" = x; then OTOOL=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL=$ac_ct_OTOOL fi else OTOOL="$ac_cv_prog_OTOOL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. set dummy ${ac_tool_prefix}otool64; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_OTOOL64+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$OTOOL64"; then ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OTOOL64=$ac_cv_prog_OTOOL64 if test -n "$OTOOL64"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 printf "%s\n" "$OTOOL64" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL64"; then ac_ct_OTOOL64=$OTOOL64 # Extract the first word of "otool64", so it can be a program name with args. set dummy otool64; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_OTOOL64+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_OTOOL64"; then ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL64="otool64" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 if test -n "$ac_ct_OTOOL64"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 printf "%s\n" "$ac_ct_OTOOL64" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_OTOOL64" = x; then OTOOL64=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL64=$ac_ct_OTOOL64 fi else OTOOL64="$ac_cv_prog_OTOOL64" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 printf %s "checking for -single_module linker flag... " >&6; } if test ${lt_cv_apple_cc_single_mod+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_apple_cc_single_mod=no if test -z "$LT_MULTI_MODULE"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&5 $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? # If there is a non-empty error log, and "single_module" # appears in it, assume the flag caused a linker warning if test -s conftest.err && $GREP single_module conftest.err; then cat conftest.err >&5 # Otherwise, if the output was created with a 0 exit code from # the compiler, it worked. elif test -f libconftest.dylib && test 0 = "$_lt_result"; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&5 fi rm -rf libconftest.dylib* rm -f conftest.* fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 printf "%s\n" "$lt_cv_apple_cc_single_mod" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 printf %s "checking for -exported_symbols_list linker flag... " >&6; } if test ${lt_cv_ld_exported_symbols_list+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : lt_cv_ld_exported_symbols_list=yes else $as_nop lt_cv_ld_exported_symbols_list=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 printf "%s\n" "$lt_cv_ld_exported_symbols_list" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 printf %s "checking for -force_load linker flag... " >&6; } if test ${lt_cv_ld_force_load+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} _LT_EOF echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5 $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5 echo "$AR $AR_FLAGS libconftest.a conftest.o" >&5 $AR $AR_FLAGS libconftest.a conftest.o 2>&5 echo "$RANLIB libconftest.a" >&5 $RANLIB libconftest.a 2>&5 cat > conftest.c << _LT_EOF int main() { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5 $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err _lt_result=$? if test -s conftest.err && $GREP force_load conftest.err; then cat conftest.err >&5 elif test -f conftest && test 0 = "$_lt_result" && $GREP forced_load conftest >/dev/null 2>&1; then lt_cv_ld_force_load=yes else cat conftest.err >&5 fi rm -f conftest.err libconftest.a conftest conftest.c rm -rf conftest.dSYM fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 printf "%s\n" "$lt_cv_ld_force_load" >&6; } case $host_os in rhapsody* | darwin1.[012]) _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; darwin*) case $MACOSX_DEPLOYMENT_TARGET,$host in 10.[012],*|,*powerpc*-darwin[5-8]*) _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; *) _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test yes = "$lt_cv_apple_cc_single_mod"; then _lt_dar_single_mod='$single_module' fi if test yes = "$lt_cv_ld_exported_symbols_list"; then _lt_dar_export_syms=' $wl-exported_symbols_list,$output_objdir/$libname-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/$libname-symbols.expsym $lib' fi if test : != "$DSYMUTIL" && test no = "$lt_cv_ld_force_load"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac # func_munge_path_list VARIABLE PATH # ----------------------------------- # VARIABLE is name of variable containing _space_ separated list of # directories to be munged by the contents of PATH, which is string # having a format: # "DIR[:DIR]:" # string "DIR[ DIR]" will be prepended to VARIABLE # ":DIR[:DIR]" # string "DIR[ DIR]" will be appended to VARIABLE # "DIRP[:DIRP]::[DIRA:]DIRA" # string "DIRP[ DIRP]" will be prepended to VARIABLE and string # "DIRA[ DIRA]" will be appended to VARIABLE # "DIR[:DIR]" # VARIABLE will be replaced by "DIR[ DIR]" func_munge_path_list () { case x$2 in x) ;; *:) eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\" ;; x:*) eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\" ;; *::*) eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\" ;; *) eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\" ;; esac } ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default " if test "x$ac_cv_header_dlfcn_h" = xyes then : printf "%s\n" "#define HAVE_DLFCN_H 1" >>confdefs.h fi func_stripname_cnf () { case $2 in .*) func_stripname_result=`$ECHO "$3" | $SED "s%^$1%%; s%\\\\$2\$%%"`;; *) func_stripname_result=`$ECHO "$3" | $SED "s%^$1%%; s%$2\$%%"`;; esac } # func_stripname_cnf # Set options enable_dlopen=no enable_win32_dll=no # Check whether --with-pic was given. if test ${with_pic+y} then : withval=$with_pic; lt_p=${PACKAGE-default} case $withval in yes|no) pic_mode=$withval ;; *) pic_mode=default # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for lt_pkg in $withval; do IFS=$lt_save_ifs if test "X$lt_pkg" = "X$lt_p"; then pic_mode=yes fi done IFS=$lt_save_ifs ;; esac else $as_nop pic_mode=default fi # Check whether --enable-fast-install was given. if test ${enable_fast_install+y} then : enableval=$enable_fast_install; p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS=$lt_save_ifs ;; esac else $as_nop enable_fast_install=yes fi shared_archive_member_spec= case $host,$enable_shared in power*-*-aix[5-9]*,yes) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking which variant of shared library versioning to provide" >&5 printf %s "checking which variant of shared library versioning to provide... " >&6; } # Check whether --with-aix-soname was given. if test ${with_aix_soname+y} then : withval=$with_aix_soname; case $withval in aix|svr4|both) ;; *) as_fn_error $? "Unknown argument to --with-aix-soname" "$LINENO" 5 ;; esac lt_cv_with_aix_soname=$with_aix_soname else $as_nop if test ${lt_cv_with_aix_soname+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_with_aix_soname=aix fi with_aix_soname=$lt_cv_with_aix_soname fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $with_aix_soname" >&5 printf "%s\n" "$with_aix_soname" >&6; } if test aix != "$with_aix_soname"; then # For the AIX way of multilib, we name the shared archive member # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o', # and 'shr.imp' or 'shr_64.imp', respectively, for the Import File. # Even when GNU compilers ignore OBJECT_MODE but need '-maix64' flag, # the AIX toolchain works better with OBJECT_MODE set (default 32). if test 64 = "${OBJECT_MODE-32}"; then shared_archive_member_spec=shr_64 else shared_archive_member_spec=shr fi fi ;; *) with_aix_soname=aix ;; esac # This can be used to rebuild libtool when needed LIBTOOL_DEPS=$ltmain # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' test -z "$LN_S" && LN_S="ln -s" if test -n "${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 printf %s "checking for objdir... " >&6; } if test ${lt_cv_objdir+y} then : printf %s "(cached) " >&6 else $as_nop rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 printf "%s\n" "$lt_cv_objdir" >&6; } objdir=$lt_cv_objdir printf "%s\n" "#define LT_OBJDIR \"$lt_cv_objdir/\"" >>confdefs.h case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test set != "${COLLECT_NAMES+set}"; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a '.a' archive for static linking (except MSVC and # ICC, which need '.lib'). libext=a with_gnu_ld=$lt_cv_prog_gnu_ld old_CC=$CC old_CFLAGS=$CFLAGS # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o func_cc_basename $compiler cc_basename=$func_cc_basename_result # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 printf %s "checking for ${ac_tool_prefix}file... " >&6; } if test ${lt_cv_path_MAGIC_CMD+y} then : printf %s "(cached) " >&6 else $as_nop case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD=$MAGIC_CMD lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/${ac_tool_prefix}file"; then lt_cv_path_MAGIC_CMD=$ac_dir/"${ac_tool_prefix}file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD=$lt_cv_path_MAGIC_CMD if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS=$lt_save_ifs MAGIC_CMD=$lt_save_MAGIC_CMD ;; esac fi MAGIC_CMD=$lt_cv_path_MAGIC_CMD if test -n "$MAGIC_CMD"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 printf "%s\n" "$MAGIC_CMD" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for file" >&5 printf %s "checking for file... " >&6; } if test ${lt_cv_path_MAGIC_CMD+y} then : printf %s "(cached) " >&6 else $as_nop case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD=$MAGIC_CMD lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/file"; then lt_cv_path_MAGIC_CMD=$ac_dir/"file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD=$lt_cv_path_MAGIC_CMD if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS=$lt_save_ifs MAGIC_CMD=$lt_save_MAGIC_CMD ;; esac fi MAGIC_CMD=$lt_cv_path_MAGIC_CMD if test -n "$MAGIC_CMD"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 printf "%s\n" "$MAGIC_CMD" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi else MAGIC_CMD=: fi fi fi ;; esac # Use C for the default configuration in the libtool script lt_save_CC=$CC ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o objext=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then lt_prog_compiler_no_builtin_flag= if test yes = "$GCC"; then case $cc_basename in nvcc*) lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;; *) lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 printf %s "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } if test ${lt_cv_prog_compiler_rtti_exceptions+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-fno-rtti -fno-exceptions" ## exclude from sc_useless_quotes_in_assignment # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_rtti_exceptions=yes fi fi $RM conftest* fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 printf "%s\n" "$lt_cv_prog_compiler_rtti_exceptions" >&6; } if test yes = "$lt_cv_prog_compiler_rtti_exceptions"; then lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" else : fi fi lt_prog_compiler_wl= lt_prog_compiler_pic= lt_prog_compiler_static= if test yes = "$GCC"; then lt_prog_compiler_wl='-Wl,' lt_prog_compiler_static='-static' case $host_os in aix*) # All AIX code is PIC. if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' fi lt_prog_compiler_pic='-fPIC' ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support lt_prog_compiler_pic='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the '-m68020' flag to GCC prevents building anything better, # like '-m68040'. lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries lt_prog_compiler_pic='-DDLL_EXPORT' case $host_os in os2*) lt_prog_compiler_static='$wl-static' ;; esac ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. lt_prog_compiler_static= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) lt_prog_compiler_pic='-fPIC' ;; esac ;; interix[3-9]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. lt_prog_compiler_can_build_shared=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic=-Kconform_pic fi ;; *) lt_prog_compiler_pic='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 lt_prog_compiler_wl='-Xlinker ' if test -n "$lt_prog_compiler_pic"; then lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic" fi ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) lt_prog_compiler_wl='-Wl,' if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' else lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' fi ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic='-fno-common' case $cc_basename in nagfor*) # NAG Fortran compiler lt_prog_compiler_wl='-Wl,-Wl,,' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; esac ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic='-DDLL_EXPORT' case $host_os in os2*) lt_prog_compiler_static='$wl-static' ;; esac ;; hpux9* | hpux10* | hpux11*) lt_prog_compiler_wl='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? lt_prog_compiler_static='$wl-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) lt_prog_compiler_wl='-Wl,' # PIC (with -KPIC) is the default. lt_prog_compiler_static='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in # old Intel for x86_64, which still supported -KPIC. ecc*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-static' ;; # flang / f18. f95 an alias for gfortran or flang on Debian flang* | f18* | f95*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; # Lahey Fortran 8.1. lf95*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='--shared' lt_prog_compiler_static='--static' ;; nagfor*) # NAG Fortran compiler lt_prog_compiler_wl='-Wl,-Wl,,' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; tcc*) # Fabrice Bellard et al's Tiny C Compiler lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; ccc*) lt_prog_compiler_wl='-Wl,' # All Alpha code is PIC. lt_prog_compiler_static='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-qpic' lt_prog_compiler_static='-qstaticlink' ;; *) case `$CC -V 2>&1 | $SED 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='' ;; *Sun\ F* | *Sun*Fortran*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Qoption ld ' ;; *Sun\ C*) # Sun C 5.9 lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Wl,' ;; *Intel*\ [CF]*Compiler*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; *Portland\ Group*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; esac ;; esac ;; newsos6) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static='-non_shared' ;; rdos*) lt_prog_compiler_static='-non_shared' ;; solaris*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) lt_prog_compiler_wl='-Qoption ld ';; *) lt_prog_compiler_wl='-Wl,';; esac ;; sunos4*) lt_prog_compiler_wl='-Qoption ld ' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic='-Kconform_pic' lt_prog_compiler_static='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; unicos*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_can_build_shared=no ;; uts4*) lt_prog_compiler_pic='-pic' lt_prog_compiler_static='-Bstatic' ;; *) lt_prog_compiler_can_build_shared=no ;; esac fi case $host_os in # For platforms that do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic= ;; *) lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 printf %s "checking for $compiler option to produce PIC... " >&6; } if test ${lt_cv_prog_compiler_pic+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_prog_compiler_pic=$lt_prog_compiler_pic fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 printf "%s\n" "$lt_cv_prog_compiler_pic" >&6; } lt_prog_compiler_pic=$lt_cv_prog_compiler_pic # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 printf %s "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } if test ${lt_cv_prog_compiler_pic_works+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_prog_compiler_pic_works=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic -DPIC" ## exclude from sc_useless_quotes_in_assignment # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_pic_works=yes fi fi $RM conftest* fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 printf "%s\n" "$lt_cv_prog_compiler_pic_works" >&6; } if test yes = "$lt_cv_prog_compiler_pic_works"; then case $lt_prog_compiler_pic in "" | " "*) ;; *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; esac else lt_prog_compiler_pic= lt_prog_compiler_can_build_shared=no fi fi # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 printf %s "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } if test ${lt_cv_prog_compiler_static_works+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_prog_compiler_static_works=no save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS $lt_tmp_static_flag" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_static_works=yes fi else lt_cv_prog_compiler_static_works=yes fi fi $RM -r conftest* LDFLAGS=$save_LDFLAGS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 printf "%s\n" "$lt_cv_prog_compiler_static_works" >&6; } if test yes = "$lt_cv_prog_compiler_static_works"; then : else lt_prog_compiler_static= fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 printf %s "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if test ${lt_cv_prog_compiler_c_o+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 printf "%s\n" "$lt_cv_prog_compiler_c_o" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 printf %s "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if test ${lt_cv_prog_compiler_c_o+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 printf "%s\n" "$lt_cv_prog_compiler_c_o" >&6; } hard_links=nottested if test no = "$lt_cv_prog_compiler_c_o" && test no != "$need_locks"; then # do not overwrite the value of need_locks provided by the user { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 printf %s "checking if we can lock with hard links... " >&6; } hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 printf "%s\n" "$hard_links" >&6; } if test no = "$hard_links"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5 printf "%s\n" "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 printf %s "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } runpath_var= allow_undefined_flag= always_export_symbols=no archive_cmds= archive_expsym_cmds= compiler_needs_object=no enable_shared_with_static_runtimes=no export_dynamic_flag_spec= export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' hardcode_automatic=no hardcode_direct=no hardcode_direct_absolute=no hardcode_libdir_flag_spec= hardcode_libdir_separator= hardcode_minus_L=no hardcode_shlibpath_var=unsupported inherit_rpath=no link_all_deplibs=unknown module_cmds= module_expsym_cmds= old_archive_from_new_cmds= old_archive_from_expsyms_cmds= thread_safe_flag_spec= whole_archive_flag_spec= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ' (' and ')$', so one must not match beginning or # end of line. Example: 'a|bc|.*d.*' will exclude the symbols 'a' and 'bc', # as well as any symbol that contains 'd'. exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ and ICC port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++ or Intel C++ Compiler. if test yes != "$GCC"; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++ or ICC) with_gnu_ld=yes ;; openbsd* | bitrig*) with_gnu_ld=no ;; linux* | k*bsd*-gnu | gnu*) link_all_deplibs=no ;; esac ld_shlibs=yes # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no if test yes = "$with_gnu_ld"; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;; *\ \(GNU\ Binutils\)\ [3-9]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test yes = "$lt_use_gnu_ld_interface"; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='$wl' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' export_dynamic_flag_spec='$wl--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then whole_archive_flag_spec=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' else whole_archive_flag_spec= fi supports_anon_versioning=no case `$LD -v | $SED -e 's/([^)]\+)\s\+//' 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[3-9]*) # On AIX/PPC, the GNU linker is very broken if test ia64 != "$host_cpu"; then ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.19, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then allow_undefined_flag=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' else ld_shlibs=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' export_dynamic_flag_spec='$wl--export-all-symbols' allow_undefined_flag=unsupported always_export_symbols=no enable_shared_with_static_runtimes=yes export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file, use it as # is; otherwise, prepend EXPORTS... archive_expsym_cmds='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs=no fi ;; haiku*) archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' link_all_deplibs=yes ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes allow_undefined_flag=unsupported shrext_cmds=.dll archive_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' archive_expsym_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ prefix_cmds="$SED"~ if test EXPORTS = "`$SED 1q $export_symbols`"; then prefix_cmds="$prefix_cmds -e 1d"; fi~ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' enable_shared_with_static_runtimes=yes file_list_spec='@' ;; interix[3-9]*) hardcode_direct=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='$wl-rpath,$libdir' export_dynamic_flag_spec='$wl-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds='$SED "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test linux-dietlibc = "$host_os"; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test no = "$tmp_diet" then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 whole_archive_flag_spec= tmp_sharedflag='--shared' ;; nagfor*) # NAGFOR 5.3 tmp_sharedflag='-Wl,-shared' ;; xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' compiler_needs_object=yes ;; esac case `$CC -V 2>&1 | $SED 5q` in *Sun\ C*) # Sun C 5.9 whole_archive_flag_spec='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' compiler_needs_object=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' if test yes = "$supports_anon_versioning"; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' fi case $cc_basename in tcc*) hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' export_dynamic_flag_spec='-rdynamic' ;; xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test yes = "$supports_anon_versioning"; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else ld_shlibs=no fi ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 cannot *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac ;; sunos4*) archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= hardcode_direct=yes hardcode_shlibpath_var=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac if test no = "$ld_shlibs"; then runpath_var= hardcode_libdir_flag_spec= export_dynamic_flag_spec= whole_archive_flag_spec= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) allow_undefined_flag=unsupported always_export_symbols=yes archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes if test yes = "$GCC" && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=unsupported fi ;; aix[4-9]*) if test ia64 = "$host_cpu"; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag= else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to GNU nm, but means don't demangle to AIX nm. # Without the "-l" option, or with the "-B" option, AIX nm treats # weak defined symbols like other global defined symbols, whereas # GNU nm marks them as "W". # While the 'weak' keyword is ignored in the Export File, we need # it in the Import File for the 'aix-soname' feature, so we have # to replace the "-B" option with "-P" for AIX nm. if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' else export_symbols_cmds='`func_echo_all $NM | $SED -e '\''s/B\([^B]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "L") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && (substr(\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # have runtime linking enabled, and use it for executables. # For shared libraries, we enable/disable runtime linking # depending on the kind of the shared library created - # when "with_aix_soname,aix_use_runtimelinking" is: # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables # "aix,yes" lib.so shared, rtl:yes, for executables # lib.a static archive # "both,no" lib.so.V(shr.o) shared, rtl:yes # lib.a(lib.so.V) shared, rtl:no, for executables # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a(lib.so.V) shared, rtl:no # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a static archive case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do if (test x-brtl = "x$ld_flag" || test x-Wl,-brtl = "x$ld_flag"); then aix_use_runtimelinking=yes break fi done if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then # With aix-soname=svr4, we create the lib.so.V shared archives only, # so we don't have lib.a shared libs to link our executables. # We have to force runtime linking in this case. aix_use_runtimelinking=yes LDFLAGS="$LDFLAGS -Wl,-brtl" fi ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds='' hardcode_direct=yes hardcode_direct_absolute=yes hardcode_libdir_separator=':' link_all_deplibs=yes file_list_spec='$wl-f,' case $with_aix_soname,$aix_use_runtimelinking in aix,*) ;; # traditional, no import file svr4,* | *,yes) # use import file # The Import File defines what to hardcode. hardcode_direct=no hardcode_direct_absolute=no ;; esac if test yes = "$GCC"; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`$CC -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= fi ;; esac shared_flag='-shared' if test yes = "$aix_use_runtimelinking"; then shared_flag="$shared_flag "'$wl-G' fi # Need to ensure runtime linking is disabled for the traditional # shared library, or the linker may eventually find shared libraries # /with/ Import File - we do not want to mix them. shared_flag_aix='-shared' shared_flag_svr4='-shared $wl-G' else # not using gcc if test ia64 = "$host_cpu"; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test yes = "$aix_use_runtimelinking"; then shared_flag='$wl-G' else shared_flag='$wl-bM:SRE' fi shared_flag_aix='$wl-bM:SRE' shared_flag_svr4='$wl-G' fi fi export_dynamic_flag_spec='$wl-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols=yes if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag='-berok' # Determine the default libpath from the value encoded in an # empty executable. if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else if test ${lt_cv_aix_libpath_+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=/usr/lib:/lib fi fi aix_libpath=$lt_cv_aix_libpath_ fi hardcode_libdir_flag_spec='$wl-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag else if test ia64 = "$host_cpu"; then hardcode_libdir_flag_spec='$wl-R $libdir:/usr/lib:/lib' allow_undefined_flag="-z nodefs" archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else if test ${lt_cv_aix_libpath_+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=/usr/lib:/lib fi fi aix_libpath=$lt_cv_aix_libpath_ fi hardcode_libdir_flag_spec='$wl-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag=' $wl-bernotok' allow_undefined_flag=' $wl-berok' if test yes = "$with_gnu_ld"; then # We only use this code for GNU lds that support --whole-archive. whole_archive_flag_spec='$wl--whole-archive$convenience $wl--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec='$convenience' fi archive_cmds_need_lc=yes archive_expsym_cmds='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' # -brtl affects multiple linker settings, -berok does not and is overridden later compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([, ]\\)%-berok\\1%g"`' if test svr4 != "$with_aix_soname"; then # This is similar to how AIX traditionally builds its shared libraries. archive_expsym_cmds="$archive_expsym_cmds"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' fi if test aix != "$with_aix_soname"; then archive_expsym_cmds="$archive_expsym_cmds"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' else # used by -dlpreopen to get the symbols archive_expsym_cmds="$archive_expsym_cmds"'~$MV $output_objdir/$realname.d/$soname $output_objdir' fi archive_expsym_cmds="$archive_expsym_cmds"'~$RM -r $output_objdir/$realname.d' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; bsdi[45]*) export_dynamic_flag_spec=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++ or Intel C++ Compiler. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in cl* | icl*) # Native MSVC or ICC hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported always_export_symbols=yes file_list_spec='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' archive_expsym_cmds='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then cp "$export_symbols" "$output_objdir/$soname.def"; echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; else $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, )='true' enable_shared_with_static_runtimes=yes exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib old_postinstall_cmds='chmod 644 $oldlib' postlink_cmds='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile=$lt_outputfile.exe lt_tool_outputfile=$lt_tool_outputfile.exe ;; esac~ if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # Assume MSVC and ICC wrapper hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. old_archive_from_new_cmds='true' # FIXME: Should let the user specify the lib program. old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' enable_shared_with_static_runtimes=yes ;; esac ;; darwin* | rhapsody*) archive_cmds_need_lc=no hardcode_direct=no hardcode_automatic=yes hardcode_shlibpath_var=unsupported if test yes = "$lt_cv_ld_force_load"; then whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' else whole_archive_flag_spec='' fi link_all_deplibs=yes allow_undefined_flag=$_lt_dar_allow_undefined case $cc_basename in ifort*|nagfor*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test yes = "$_lt_dar_can_shared"; then output_verbose_link_cmd=func_echo_all archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil" module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil" archive_expsym_cmds="$SED 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil" module_expsym_cmds="$SED -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil" else ld_shlibs=no fi ;; dgux*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2.*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly* | midnightbsd*) archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; hpux9*) if test yes = "$GCC"; then archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' else archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' fi hardcode_libdir_flag_spec='$wl+b $wl$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes export_dynamic_flag_spec='$wl-E' ;; hpux10*) if test yes,no = "$GCC,$with_gnu_ld"; then archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test no = "$with_gnu_ld"; then hardcode_libdir_flag_spec='$wl+b $wl$libdir' hardcode_libdir_separator=: hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='$wl-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes fi ;; hpux11*) if test yes,no = "$GCC,$with_gnu_ld"; then case $host_cpu in hppa*64*) archive_cmds='$CC -shared $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) archive_cmds='$CC -b $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 printf %s "checking if $CC understands -b... " >&6; } if test ${lt_cv_prog_compiler__b+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_prog_compiler__b=no save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -b" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler__b=yes fi else lt_cv_prog_compiler__b=yes fi fi $RM -r conftest* LDFLAGS=$save_LDFLAGS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 printf "%s\n" "$lt_cv_prog_compiler__b" >&6; } if test yes = "$lt_cv_prog_compiler__b"; then archive_cmds='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi ;; esac fi if test no = "$with_gnu_ld"; then hardcode_libdir_flag_spec='$wl+b $wl$libdir' hardcode_libdir_separator=: case $host_cpu in hppa*64*|ia64*) hardcode_direct=no hardcode_shlibpath_var=no ;; *) hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='$wl-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test yes = "$GCC"; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 printf %s "checking whether the $host_os linker accepts -exported_symbol... " >&6; } if test ${lt_cv_irix_exported_symbol+y} then : printf %s "(cached) " >&6 else $as_nop save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int foo (void) { return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : lt_cv_irix_exported_symbol=yes else $as_nop lt_cv_irix_exported_symbol=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 printf "%s\n" "$lt_cv_irix_exported_symbol" >&6; } if test yes = "$lt_cv_irix_exported_symbol"; then archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib' fi link_all_deplibs=no else archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' hardcode_libdir_separator=: inherit_rpath=yes link_all_deplibs=yes ;; linux*) case $cc_basename in tcc*) # Fabrice Bellard et al's Tiny C Compiler ld_shlibs=yes archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' ;; esac ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; newsos6) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' hardcode_libdir_separator=: hardcode_shlibpath_var=no ;; *nto* | *qnx*) ;; openbsd* | bitrig*) if test -f /usr/libexec/ld.so; then hardcode_direct=yes hardcode_shlibpath_var=no hardcode_direct_absolute=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags $wl-retain-symbols-file,$export_symbols' hardcode_libdir_flag_spec='$wl-rpath,$libdir' export_dynamic_flag_spec='$wl-E' else archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='$wl-rpath,$libdir' fi else ld_shlibs=no fi ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes allow_undefined_flag=unsupported shrext_cmds=.dll archive_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' archive_expsym_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ prefix_cmds="$SED"~ if test EXPORTS = "`$SED 1q $export_symbols`"; then prefix_cmds="$prefix_cmds -e 1d"; fi~ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' enable_shared_with_static_runtimes=yes file_list_spec='@' ;; osf3*) if test yes = "$GCC"; then allow_undefined_flag=' $wl-expect_unresolved $wl\*' archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test yes = "$GCC"; then allow_undefined_flag=' $wl-expect_unresolved $wl\*' archive_cmds='$CC -shared$allow_undefined_flag $pic_flag $libobjs $deplibs $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $wl-input $wl$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly hardcode_libdir_flag_spec='-rpath $libdir' fi archive_cmds_need_lc='no' hardcode_libdir_separator=: ;; solaris*) no_undefined_flag=' -z defs' if test yes = "$GCC"; then wlarc='$wl' archive_cmds='$CC -shared $pic_flag $wl-z ${wl}text $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag $wl-z ${wl}text $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' archive_cmds='$LD -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='$wl' archive_cmds='$CC -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi hardcode_libdir_flag_spec='-R$libdir' hardcode_shlibpath_var=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands '-z linker_flag'. GCC discards it without '$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test yes = "$GCC"; then whole_archive_flag_spec='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' else whole_archive_flag_spec='-z allextract$convenience -z defaultextract' fi ;; esac link_all_deplibs=yes ;; sunos4*) if test sequent = "$host_vendor"; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. archive_cmds='$CC -G $wl-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; sysv4) case $host_vendor in sni) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' reload_cmds='$CC -r -o $output$reload_objs' hardcode_direct=no ;; motorola) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' hardcode_shlibpath_var=no ;; sysv4.3*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no export_dynamic_flag_spec='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) no_undefined_flag='$wl-z,text' archive_cmds_need_lc=no hardcode_shlibpath_var=no runpath_var='LD_RUN_PATH' if test yes = "$GCC"; then archive_cmds='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We CANNOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. no_undefined_flag='$wl-z,text' allow_undefined_flag='$wl-z,nodefs' archive_cmds_need_lc=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='$wl-R,$libdir' hardcode_libdir_separator=':' link_all_deplibs=yes export_dynamic_flag_spec='$wl-Bexport' runpath_var='LD_RUN_PATH' if test yes = "$GCC"; then archive_cmds='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; *) ld_shlibs=no ;; esac if test sni = "$host_vendor"; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) export_dynamic_flag_spec='$wl-Blargedynsym' ;; esac fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 printf "%s\n" "$ld_shlibs" >&6; } test no = "$ld_shlibs" && can_build_shared=no with_gnu_ld=$with_gnu_ld # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc" in x|xyes) # Assume -lc should be added archive_cmds_need_lc=yes if test yes,yes = "$GCC,$enable_shared"; then case $archive_cmds in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 printf %s "checking whether -lc should be explicitly linked in... " >&6; } if test ${lt_cv_archive_cmds_need_lc+y} then : printf %s "(cached) " >&6 else $as_nop $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl pic_flag=$lt_prog_compiler_pic compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag allow_undefined_flag= if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then lt_cv_archive_cmds_need_lc=no else lt_cv_archive_cmds_need_lc=yes fi allow_undefined_flag=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 printf "%s\n" "$lt_cv_archive_cmds_need_lc" >&6; } archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc ;; esac fi ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 printf %s "checking dynamic linker characteristics... " >&6; } if test yes = "$GCC"; then case $host_os in darwin*) lt_awk_arg='/^libraries:/,/LR/' ;; *) lt_awk_arg='/^libraries:/' ;; esac case $host_os in mingw* | cegcc*) lt_sed_strip_eq='s|=\([A-Za-z]:\)|\1|g' ;; *) lt_sed_strip_eq='s|=/|/|g' ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` case $lt_search_path_spec in *\;*) # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` ;; *) lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` ;; esac # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary... lt_tmp_lt_search_path_spec= lt_multi_os_dir=/`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` # ...but if some path component already ends with the multilib dir we assume # that all is fine and trust -print-search-dirs as is (GCC 4.2? or newer). case "$lt_multi_os_dir; $lt_search_path_spec " in "/; "* | "/.; "* | "/./; "* | *"$lt_multi_os_dir "* | *"$lt_multi_os_dir/ "*) lt_multi_os_dir= ;; esac for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path$lt_multi_os_dir" elif test -n "$lt_multi_os_dir"; then test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' BEGIN {RS = " "; FS = "/|\n";} { lt_foo = ""; lt_count = 0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo = "/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[lt_foo]++; } if (lt_freq[lt_foo] == 1) { print lt_foo; } }'` # AWK program above erroneously prepends '/' to C:/dos/paths # for these hosts. case $host_os in mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ $SED 's|/\([A-Za-z]:\)|\1|g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=.so postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='$libname$release$shared_ext$major' ;; aix[4-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test ia64 = "$host_cpu"; then # AIX 5 supports IA64 library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line '#! .'. This would cause the generated library to # depend on '.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # Using Import Files as archive members, it is possible to support # filename-based versioning of shared library archives on AIX. While # this would work for both with and without runtime linking, it will # prevent static linking of such archives. So we do filename-based # shared library versioning with .so extension only, which is used # when both runtime linking and shared linking is enabled. # Unfortunately, runtime linking may impact performance, so we do # not want this to be the default eventually. Also, we use the # versioned .so libs for executables only if there is the -brtl # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only. # To allow for filename-based versioning support, we need to create # libNAME.so.V as an archive file, containing: # *) an Import File, referring to the versioned filename of the # archive as well as the shared archive member, telling the # bitwidth (32 or 64) of that shared object, and providing the # list of exported symbols of that shared object, eventually # decorated with the 'weak' keyword # *) the shared object with the F_LOADONLY flag set, to really avoid # it being seen by the linker. # At run time we better use the real file rather than another symlink, # but for link time we create the symlink libNAME.so -> libNAME.so.V case $with_aix_soname,$aix_use_runtimelinking in # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. aix,yes) # traditional libtool dynamic_linker='AIX unversionable lib.so' # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' ;; aix,no) # traditional AIX only dynamic_linker='AIX lib.a(lib.so.V)' # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='$libname$release.a $libname.a' soname_spec='$libname$release$shared_ext$major' ;; svr4,*) # full svr4 only dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o)" library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' # We do not specify a path in Import Files, so LIBPATH fires. shlibpath_overrides_runpath=yes ;; *,yes) # both, prefer svr4 dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o), lib.a(lib.so.V)" library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' # unpreferred sharedlib libNAME.a needs extra handling postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"' postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"' # We do not specify a path in Import Files, so LIBPATH fires. shlibpath_overrides_runpath=yes ;; *,no) # both, prefer aix dynamic_linker="AIX lib.a(lib.so.V), lib.so.V($shared_archive_member_spec.o)" library_names_spec='$libname$release.a $libname.a' soname_spec='$libname$release$shared_ext$major' # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)' postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"' ;; esac shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='$libname$shared_ext' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=.dll need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo $libname | $SED -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api" ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo $libname | $SED -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl* | *,icl*) # Native MSVC or ICC libname_spec='$name' soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' library_names_spec='$libname.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec=$LIB if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC and ICC wrapper library_names_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='$libname$release$major$shared_ext $libname$shared_ext' soname_spec='$libname$release$major$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly* | midnightbsd*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[23].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=no sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' if test 32 = "$HPUX_IA64_MODE"; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" sys_lib_dlsearch_path_spec=/usr/lib/hpux32 else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" sys_lib_dlsearch_path_spec=/usr/lib/hpux64 fi ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[3-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test yes = "$lt_cv_prog_gnu_ld"; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='$libname$release$shared_ext$major' library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff" sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; linux*android*) version_type=none # Android doesn't support versioned libraries. need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext' soname_spec='$libname$release$shared_ext' finish_cmds= shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes dynamic_linker='Android linker' # Don't embed -rpath directories since the linker doesn't support them. hardcode_libdir_flag_spec='-L$libdir' ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH if test ${lt_cv_shlibpath_overrides_runpath+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null then : lt_cv_shlibpath_overrides_runpath=yes fi fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir fi shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Ideally, we could use ldconfig to report *all* directores which are # searched for libraries, however this is still not possible. Aside from not # being certain /sbin/ldconfig is available, command # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64, # even though it is searched at run-time. Try to do the best guess by # appending ld.so.conf contents (and includes) to the search path. if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsdelf*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='NetBSD ld.elf_so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd* | bitrig*) version_type=sunos sys_lib_dlsearch_path_spec=/usr/lib need_lib_prefix=no if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then need_version=no else need_version=yes fi library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; os2*) libname_spec='$name' version_type=windows shrext_cmds=.dll need_version=no need_lib_prefix=no # OS/2 can only load a DLL with a base name of 8 characters or less. soname_spec='`test -n "$os2dllname" && libname="$os2dllname"; v=$($ECHO $release$versuffix | tr -d .-); n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _); $ECHO $n$v`$shared_ext' library_names_spec='${libname}_dll.$libext' dynamic_linker='OS/2 ld.exe' shlibpath_var=BEGINLIBPATH sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='$libname$release$shared_ext$major' library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test yes = "$with_gnu_ld"; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec; then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext' soname_spec='$libname$shared_ext.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=sco need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test yes = "$with_gnu_ld"; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 printf "%s\n" "$dynamic_linker" >&6; } test no = "$dynamic_linker" && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test yes = "$GCC"; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec fi if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec fi # remember unaugmented sys_lib_dlsearch_path content for libtool script decls... configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec # ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH" # to be used as default LT_SYS_LIBRARY_PATH value in generated libtool configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 printf %s "checking how to hardcode library paths into programs... " >&6; } hardcode_action= if test -n "$hardcode_libdir_flag_spec" || test -n "$runpath_var" || test yes = "$hardcode_automatic"; then # We can hardcode non-existent directories. if test no != "$hardcode_direct" && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, )" && test no != "$hardcode_minus_L"; then # Linking always hardcodes the temporary library directory. hardcode_action=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action=unsupported fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 printf "%s\n" "$hardcode_action" >&6; } if test relink = "$hardcode_action" || test yes = "$inherit_rpath"; then # Fast installation is not supported enable_fast_install=no elif test yes = "$shlibpath_overrides_runpath" || test no = "$enable_shared"; then # Fast installation is not necessary enable_fast_install=needless fi if test yes != "$enable_dlopen"; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen=load_add_on lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen=LoadLibrary lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen=dlopen lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 printf %s "checking for dlopen in -ldl... " >&6; } if test ${ac_cv_lib_dl_dlopen+y} then : printf %s "(cached) " >&6 else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ char dlopen (); int main (void) { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_dl_dlopen=yes else $as_nop ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 printf "%s\n" "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes then : lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl else $as_nop lt_cv_dlopen=dyld lt_cv_dlopen_libs= lt_cv_dlopen_self=yes fi ;; tpf*) # Don't try to run any link tests for TPF. We know it's impossible # because TPF is a cross-compiler, and we know how we open DSOs. lt_cv_dlopen=dlopen lt_cv_dlopen_libs= lt_cv_dlopen_self=no ;; *) ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" if test "x$ac_cv_func_shl_load" = xyes then : lt_cv_dlopen=shl_load else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 printf %s "checking for shl_load in -ldld... " >&6; } if test ${ac_cv_lib_dld_shl_load+y} then : printf %s "(cached) " >&6 else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ char shl_load (); int main (void) { return shl_load (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_dld_shl_load=yes else $as_nop ac_cv_lib_dld_shl_load=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 printf "%s\n" "$ac_cv_lib_dld_shl_load" >&6; } if test "x$ac_cv_lib_dld_shl_load" = xyes then : lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld else $as_nop ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" if test "x$ac_cv_func_dlopen" = xyes then : lt_cv_dlopen=dlopen else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 printf %s "checking for dlopen in -ldl... " >&6; } if test ${ac_cv_lib_dl_dlopen+y} then : printf %s "(cached) " >&6 else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ char dlopen (); int main (void) { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_dl_dlopen=yes else $as_nop ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 printf "%s\n" "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes then : lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 printf %s "checking for dlopen in -lsvld... " >&6; } if test ${ac_cv_lib_svld_dlopen+y} then : printf %s "(cached) " >&6 else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lsvld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ char dlopen (); int main (void) { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_svld_dlopen=yes else $as_nop ac_cv_lib_svld_dlopen=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 printf "%s\n" "$ac_cv_lib_svld_dlopen" >&6; } if test "x$ac_cv_lib_svld_dlopen" = xyes then : lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 printf %s "checking for dld_link in -ldld... " >&6; } if test ${ac_cv_lib_dld_dld_link+y} then : printf %s "(cached) " >&6 else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ char dld_link (); int main (void) { return dld_link (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_dld_dld_link=yes else $as_nop ac_cv_lib_dld_dld_link=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 printf "%s\n" "$ac_cv_lib_dld_dld_link" >&6; } if test "x$ac_cv_lib_dld_dld_link" = xyes then : lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld fi fi fi fi fi fi ;; esac if test no = "$lt_cv_dlopen"; then enable_dlopen=no else enable_dlopen=yes fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS=$CPPFLAGS test yes = "$ac_cv_header_dlfcn_h" && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS=$LDFLAGS wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS=$LIBS LIBS="$lt_cv_dlopen_libs $LIBS" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 printf %s "checking whether a program can dlopen itself... " >&6; } if test ${lt_cv_dlopen_self+y} then : printf %s "(cached) " >&6 else $as_nop if test yes = "$cross_compiling"; then : lt_cv_dlopen_self=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisibility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; esac else : # compilation failed lt_cv_dlopen_self=no fi fi rm -fr conftest* fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 printf "%s\n" "$lt_cv_dlopen_self" >&6; } if test yes = "$lt_cv_dlopen_self"; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 printf %s "checking whether a statically linked program can dlopen itself... " >&6; } if test ${lt_cv_dlopen_self_static+y} then : printf %s "(cached) " >&6 else $as_nop if test yes = "$cross_compiling"; then : lt_cv_dlopen_self_static=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisibility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; esac else : # compilation failed lt_cv_dlopen_self_static=no fi fi rm -fr conftest* fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 printf "%s\n" "$lt_cv_dlopen_self_static" >&6; } fi CPPFLAGS=$save_CPPFLAGS LDFLAGS=$save_LDFLAGS LIBS=$save_LIBS ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi striplib= old_striplib= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 printf %s "checking whether stripping libraries is possible... " >&6; } if test -z "$STRIP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } else if $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then old_striplib="$STRIP --strip-debug" striplib="$STRIP --strip-unneeded" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } else case $host_os in darwin*) # FIXME - insert some real tests, host_os isn't really good enough striplib="$STRIP -x" old_striplib="$STRIP -S" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } ;; freebsd*) if $STRIP -V 2>&1 | $GREP "elftoolchain" >/dev/null; then old_striplib="$STRIP --strip-debug" striplib="$STRIP --strip-unneeded" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi ;; *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } ;; esac fi fi # Report what library types will actually be built { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 printf %s "checking if libtool supports shared libraries... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 printf "%s\n" "$can_build_shared" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 printf %s "checking whether to build shared libraries... " >&6; } test no = "$can_build_shared" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test yes = "$enable_shared" && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[4-9]*) if test ia64 != "$host_cpu"; then case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in yes,aix,yes) ;; # shared object as lib.so file only yes,svr4,*) ;; # shared object as lib.so archive member only yes,*) enable_static=no ;; # shared object in lib.a archive as well esac fi ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 printf "%s\n" "$enable_shared" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 printf %s "checking whether to build static libraries... " >&6; } # Make sure either enable_shared or enable_static is yes. test yes = "$enable_shared" || enable_static=yes { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 printf "%s\n" "$enable_static" >&6; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu CC=$lt_save_CC if test -n "$CXX" && ( test no != "$CXX" && ( (test g++ = "$CXX" && `g++ -v >/dev/null 2>&1` ) || (test g++ != "$CXX"))); then ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5 printf %s "checking how to run the C++ preprocessor... " >&6; } if test -z "$CXXCPP"; then if test ${ac_cv_prog_CXXCPP+y} then : printf %s "(cached) " >&6 else $as_nop # Double quotes because $CXX needs to be expanded for CXXCPP in "$CXX -E" cpp /lib/cpp do ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include Syntax error _ACEOF if ac_fn_cxx_try_cpp "$LINENO" then : else $as_nop # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_cxx_try_cpp "$LINENO" then : # Broken: success on invalid input. continue else $as_nop # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok then : break fi done ac_cv_prog_CXXCPP=$CXXCPP fi CXXCPP=$ac_cv_prog_CXXCPP else ac_cv_prog_CXXCPP=$CXXCPP fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5 printf "%s\n" "$CXXCPP" >&6; } ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include Syntax error _ACEOF if ac_fn_cxx_try_cpp "$LINENO" then : else $as_nop # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_cxx_try_cpp "$LINENO" then : # Broken: success on invalid input. continue else $as_nop # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok then : else $as_nop { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C++ preprocessor \"$CXXCPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu else _lt_caught_CXX_error=yes fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu archive_cmds_need_lc_CXX=no allow_undefined_flag_CXX= always_export_symbols_CXX=no archive_expsym_cmds_CXX= compiler_needs_object_CXX=no export_dynamic_flag_spec_CXX= hardcode_direct_CXX=no hardcode_direct_absolute_CXX=no hardcode_libdir_flag_spec_CXX= hardcode_libdir_separator_CXX= hardcode_minus_L_CXX=no hardcode_shlibpath_var_CXX=unsupported hardcode_automatic_CXX=no inherit_rpath_CXX=no module_cmds_CXX= module_expsym_cmds_CXX= link_all_deplibs_CXX=unknown old_archive_cmds_CXX=$old_archive_cmds reload_flag_CXX=$reload_flag reload_cmds_CXX=$reload_cmds no_undefined_flag_CXX= whole_archive_flag_spec_CXX= enable_shared_with_static_runtimes_CXX=no # Source file extension for C++ test sources. ac_ext=cpp # Object file extension for compiled C++ test sources. objext=o objext_CXX=$objext # No sense in running all these tests if we already determined that # the CXX compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test yes != "$_lt_caught_CXX_error"; then # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(int, char *[]) { return(0); }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_LD=$LD lt_save_GCC=$GCC GCC=$GXX lt_save_with_gnu_ld=$with_gnu_ld lt_save_path_LD=$lt_cv_path_LD if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx else $as_unset lt_cv_prog_gnu_ld fi if test -n "${lt_cv_path_LDCXX+set}"; then lt_cv_path_LD=$lt_cv_path_LDCXX else $as_unset lt_cv_path_LD fi test -z "${LDCXX+set}" || LD=$LDCXX CC=${CXX-"c++"} CFLAGS=$CXXFLAGS compiler=$CC compiler_CXX=$CC func_cc_basename $compiler cc_basename=$func_cc_basename_result if test -n "$compiler"; then # We don't want -fno-exception when compiling C++ code, so set the # no_builtin_flag separately if test yes = "$GXX"; then lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin' else lt_prog_compiler_no_builtin_flag_CXX= fi if test yes = "$GXX"; then # Set up default GNU C++ configuration # Check whether --with-gnu-ld was given. if test ${with_gnu_ld+y} then : withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes else $as_nop with_gnu_ld=no fi ac_prog=ld if test yes = "$GCC"; then # Check if gcc -print-prog-name=ld gives a path. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 printf %s "checking for ld used by $CC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return, which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD=$ac_prog ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test yes = "$with_gnu_ld"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 printf %s "checking for GNU ld... " >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 printf %s "checking for non-GNU ld... " >&6; } fi if test ${lt_cv_path_LD+y} then : printf %s "(cached) " >&6 else $as_nop if test -z "$LD"; then lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD=$ac_dir/$ac_prog # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &5 printf "%s\n" "$LD" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 printf %s "checking if the linker ($LD) is GNU ld... " >&6; } if test ${lt_cv_prog_gnu_ld+y} then : printf %s "(cached) " >&6 else $as_nop # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 printf "%s\n" "$lt_cv_prog_gnu_ld" >&6; } with_gnu_ld=$lt_cv_prog_gnu_ld # Check if GNU C++ uses GNU ld as the underlying linker, since the # archiving commands below assume that GNU ld is being used. if test yes = "$with_gnu_ld"; then archive_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir' export_dynamic_flag_spec_CXX='$wl--export-dynamic' # If archive_cmds runs LD, not CC, wlarc should be empty # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to # investigate it a little bit more. (MM) wlarc='$wl' # ancient GNU ld didn't support --whole-archive et. al. if eval "`$CC -print-prog-name=ld` --help 2>&1" | $GREP 'no-whole-archive' > /dev/null; then whole_archive_flag_spec_CXX=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' else whole_archive_flag_spec_CXX= fi else with_gnu_ld=no wlarc= # A generic and very simple default shared library creation # command for GNU C++ for the case where it uses the native # linker, instead of GNU ld. If possible, this setting should # overridden to take advantage of the native linker features on # the platform it is being used on. archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' fi # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP " \-L"' else GXX=no with_gnu_ld=no wlarc= fi # PORTME: fill in a description of your system's C++ link characteristics { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 printf %s "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } ld_shlibs_CXX=yes case $host_os in aix3*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aix[4-9]*) if test ia64 = "$host_cpu"; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag= else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # have runtime linking enabled, and use it for executables. # For shared libraries, we enable/disable runtime linking # depending on the kind of the shared library created - # when "with_aix_soname,aix_use_runtimelinking" is: # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables # "aix,yes" lib.so shared, rtl:yes, for executables # lib.a static archive # "both,no" lib.so.V(shr.o) shared, rtl:yes # lib.a(lib.so.V) shared, rtl:no, for executables # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a(lib.so.V) shared, rtl:no # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a static archive case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do case $ld_flag in *-brtl*) aix_use_runtimelinking=yes break ;; esac done if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then # With aix-soname=svr4, we create the lib.so.V shared archives only, # so we don't have lib.a shared libs to link our executables. # We have to force runtime linking in this case. aix_use_runtimelinking=yes LDFLAGS="$LDFLAGS -Wl,-brtl" fi ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds_CXX='' hardcode_direct_CXX=yes hardcode_direct_absolute_CXX=yes hardcode_libdir_separator_CXX=':' link_all_deplibs_CXX=yes file_list_spec_CXX='$wl-f,' case $with_aix_soname,$aix_use_runtimelinking in aix,*) ;; # no import file svr4,* | *,yes) # use import file # The Import File defines what to hardcode. hardcode_direct_CXX=no hardcode_direct_absolute_CXX=no ;; esac if test yes = "$GXX"; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`$CC -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct_CXX=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L_CXX=yes hardcode_libdir_flag_spec_CXX='-L$libdir' hardcode_libdir_separator_CXX= fi esac shared_flag='-shared' if test yes = "$aix_use_runtimelinking"; then shared_flag=$shared_flag' $wl-G' fi # Need to ensure runtime linking is disabled for the traditional # shared library, or the linker may eventually find shared libraries # /with/ Import File - we do not want to mix them. shared_flag_aix='-shared' shared_flag_svr4='-shared $wl-G' else # not using gcc if test ia64 = "$host_cpu"; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test yes = "$aix_use_runtimelinking"; then shared_flag='$wl-G' else shared_flag='$wl-bM:SRE' fi shared_flag_aix='$wl-bM:SRE' shared_flag_svr4='$wl-G' fi fi export_dynamic_flag_spec_CXX='$wl-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to # export. always_export_symbols_CXX=yes if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. # The "-G" linker flag allows undefined symbols. no_undefined_flag_CXX='-bernotok' # Determine the default libpath from the value encoded in an empty # executable. if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else if test ${lt_cv_aix_libpath__CXX+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO" then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX=/usr/lib:/lib fi fi aix_libpath=$lt_cv_aix_libpath__CXX fi hardcode_libdir_flag_spec_CXX='$wl-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag else if test ia64 = "$host_cpu"; then hardcode_libdir_flag_spec_CXX='$wl-R $libdir:/usr/lib:/lib' allow_undefined_flag_CXX="-z nodefs" archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else if test ${lt_cv_aix_libpath__CXX+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO" then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX=/usr/lib:/lib fi fi aix_libpath=$lt_cv_aix_libpath__CXX fi hardcode_libdir_flag_spec_CXX='$wl-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag_CXX=' $wl-bernotok' allow_undefined_flag_CXX=' $wl-berok' if test yes = "$with_gnu_ld"; then # We only use this code for GNU lds that support --whole-archive. whole_archive_flag_spec_CXX='$wl--whole-archive$convenience $wl--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec_CXX='$convenience' fi archive_cmds_need_lc_CXX=yes archive_expsym_cmds_CXX='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' # -brtl affects multiple linker settings, -berok does not and is overridden later compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([, ]\\)%-berok\\1%g"`' if test svr4 != "$with_aix_soname"; then # This is similar to how AIX traditionally builds its shared # libraries. Need -bnortl late, we may have -brtl in LDFLAGS. archive_expsym_cmds_CXX="$archive_expsym_cmds_CXX"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' fi if test aix != "$with_aix_soname"; then archive_expsym_cmds_CXX="$archive_expsym_cmds_CXX"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' else # used by -dlpreopen to get the symbols archive_expsym_cmds_CXX="$archive_expsym_cmds_CXX"'~$MV $output_objdir/$realname.d/$soname $output_objdir' fi archive_expsym_cmds_CXX="$archive_expsym_cmds_CXX"'~$RM -r $output_objdir/$realname.d' fi fi ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then allow_undefined_flag_CXX=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' else ld_shlibs_CXX=no fi ;; chorus*) case $cc_basename in *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; cygwin* | mingw* | pw32* | cegcc*) case $GXX,$cc_basename in ,cl* | no,cl* | ,icl* | no,icl*) # Native MSVC or ICC # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec_CXX=' ' allow_undefined_flag_CXX=unsupported always_export_symbols_CXX=yes file_list_spec_CXX='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. archive_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' archive_expsym_cmds_CXX='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then cp "$export_symbols" "$output_objdir/$soname.def"; echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; else $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, CXX)='true' enable_shared_with_static_runtimes_CXX=yes # Don't use ranlib old_postinstall_cmds_CXX='chmod 644 $oldlib' postlink_cmds_CXX='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile=$lt_outputfile.exe lt_tool_outputfile=$lt_tool_outputfile.exe ;; esac~ func_to_tool_file "$lt_outputfile"~ if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # g++ # _LT_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec_CXX='-L$libdir' export_dynamic_flag_spec_CXX='$wl--export-all-symbols' allow_undefined_flag_CXX=unsupported always_export_symbols_CXX=no enable_shared_with_static_runtimes_CXX=yes if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file, use it as # is; otherwise, prepend EXPORTS... archive_expsym_cmds_CXX='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs_CXX=no fi ;; esac ;; darwin* | rhapsody*) archive_cmds_need_lc_CXX=no hardcode_direct_CXX=no hardcode_automatic_CXX=yes hardcode_shlibpath_var_CXX=unsupported if test yes = "$lt_cv_ld_force_load"; then whole_archive_flag_spec_CXX='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' else whole_archive_flag_spec_CXX='' fi link_all_deplibs_CXX=yes allow_undefined_flag_CXX=$_lt_dar_allow_undefined case $cc_basename in ifort*|nagfor*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test yes = "$_lt_dar_can_shared"; then output_verbose_link_cmd=func_echo_all archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil" module_cmds_CXX="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil" archive_expsym_cmds_CXX="$SED 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil" module_expsym_cmds_CXX="$SED -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil" if test yes != "$lt_cv_apple_cc_single_mod"; then archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dsymutil" archive_expsym_cmds_CXX="$SED 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dar_export_syms$_lt_dsymutil" fi else ld_shlibs_CXX=no fi ;; os2*) hardcode_libdir_flag_spec_CXX='-L$libdir' hardcode_minus_L_CXX=yes allow_undefined_flag_CXX=unsupported shrext_cmds=.dll archive_cmds_CXX='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' archive_expsym_cmds_CXX='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ prefix_cmds="$SED"~ if test EXPORTS = "`$SED 1q $export_symbols`"; then prefix_cmds="$prefix_cmds -e 1d"; fi~ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' old_archive_From_new_cmds_CXX='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' enable_shared_with_static_runtimes_CXX=yes file_list_spec_CXX='@' ;; dgux*) case $cc_basename in ec++*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; ghcx*) # Green Hills C++ Compiler # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; freebsd2.*) # C++ shared libraries reported to be fairly broken before # switch to ELF ld_shlibs_CXX=no ;; freebsd-elf*) archive_cmds_need_lc_CXX=no ;; freebsd* | dragonfly* | midnightbsd*) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions ld_shlibs_CXX=yes ;; haiku*) archive_cmds_CXX='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' link_all_deplibs_CXX=yes ;; hpux9*) hardcode_libdir_flag_spec_CXX='$wl+b $wl$libdir' hardcode_libdir_separator_CXX=: export_dynamic_flag_spec_CXX='$wl-E' hardcode_direct_CXX=yes hardcode_minus_L_CXX=yes # Not in the search PATH, # but as the default # location of the library. case $cc_basename in CC*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aCC*) archive_cmds_CXX='$RM $output_objdir/$soname~$CC -b $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP " \-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test yes = "$GXX"; then archive_cmds_CXX='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; hpux10*|hpux11*) if test no = "$with_gnu_ld"; then hardcode_libdir_flag_spec_CXX='$wl+b $wl$libdir' hardcode_libdir_separator_CXX=: case $host_cpu in hppa*64*|ia64*) ;; *) export_dynamic_flag_spec_CXX='$wl-E' ;; esac fi case $host_cpu in hppa*64*|ia64*) hardcode_direct_CXX=no hardcode_shlibpath_var_CXX=no ;; *) hardcode_direct_CXX=yes hardcode_direct_absolute_CXX=yes hardcode_minus_L_CXX=yes # Not in the search PATH, # but as the default # location of the library. ;; esac case $cc_basename in CC*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aCC*) case $host_cpu in hppa*64*) archive_cmds_CXX='$CC -b $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) archive_cmds_CXX='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) archive_cmds_CXX='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP " \-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test yes = "$GXX"; then if test no = "$with_gnu_ld"; then case $host_cpu in hppa*64*) archive_cmds_CXX='$CC -shared -nostdlib -fPIC $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) archive_cmds_CXX='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) archive_cmds_CXX='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac fi else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; interix[3-9]*) hardcode_direct_CXX=no hardcode_shlibpath_var_CXX=no hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir' export_dynamic_flag_spec_CXX='$wl-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds_CXX='$SED "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; irix5* | irix6*) case $cc_basename in CC*) # SGI C++ archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' # Archives containing C++ object files must be created using # "CC -ar", where "CC" is the IRIX C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs' ;; *) if test yes = "$GXX"; then if test no = "$with_gnu_ld"; then archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' else archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` -o $lib' fi fi link_all_deplibs_CXX=yes ;; esac hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir' hardcode_libdir_separator_CXX=: inherit_rpath_CXX=yes ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib $wl-retain-symbols-file,$export_symbols; mv \$templib $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir' export_dynamic_flag_spec_CXX='$wl--export-dynamic' # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; icpc* | ecpc* ) # Intel C++ with_gnu_ld=yes # version 8.0 and above of icpc choke on multiply defined symbols # if we add $predep_objects and $postdep_objects, however 7.1 and # earlier do not add the objects themselves. case `$CC -V 2>&1` in *"Version 7."*) archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 8.0 or newer tmp_idyn= case $host_cpu in ia64*) tmp_idyn=' -i_dynamic';; esac archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; esac archive_cmds_need_lc_CXX=no hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir' export_dynamic_flag_spec_CXX='$wl--export-dynamic' whole_archive_flag_spec_CXX='$wl--whole-archive$convenience $wl--no-whole-archive' ;; pgCC* | pgcpp*) # Portland Group C++ compiler case `$CC -V` in *pgCC\ [1-5].* | *pgcpp\ [1-5].*) prelink_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' old_archive_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ $RANLIB $oldlib' archive_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 6 and above use weak symbols archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; esac hardcode_libdir_flag_spec_CXX='$wl--rpath $wl$libdir' export_dynamic_flag_spec_CXX='$wl--export-dynamic' whole_archive_flag_spec_CXX='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' ;; cxx*) # Compaq C++ archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib $wl-retain-symbols-file $wl$export_symbols' runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec_CXX='-rpath $libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' ;; xl* | mpixl* | bgxl*) # IBM XL 8.0 on PPC, with GNU ld hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir' export_dynamic_flag_spec_CXX='$wl--export-dynamic' archive_cmds_CXX='$CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' if test yes = "$supports_anon_versioning"; then archive_expsym_cmds_CXX='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' fi ;; *) case `$CC -V 2>&1 | $SED 5q` in *Sun\ C*) # Sun C++ 5.9 no_undefined_flag_CXX=' -zdefs' archive_cmds_CXX='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' archive_expsym_cmds_CXX='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file $wl$export_symbols' hardcode_libdir_flag_spec_CXX='-R$libdir' whole_archive_flag_spec_CXX='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' compiler_needs_object_CXX=yes # Not sure whether something based on # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 # would be better. output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' ;; esac ;; esac ;; lynxos*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; m88k*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; mvs*) case $cc_basename in cxx*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds_CXX='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' wlarc= hardcode_libdir_flag_spec_CXX='-R$libdir' hardcode_direct_CXX=yes hardcode_shlibpath_var_CXX=no fi # Workaround some broken pre-1.5 toolchains output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' ;; *nto* | *qnx*) ld_shlibs_CXX=yes ;; openbsd* | bitrig*) if test -f /usr/libexec/ld.so; then hardcode_direct_CXX=yes hardcode_shlibpath_var_CXX=no hardcode_direct_absolute_CXX=yes archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir' if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`"; then archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file,$export_symbols -o $lib' export_dynamic_flag_spec_CXX='$wl-E' whole_archive_flag_spec_CXX=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' fi output_verbose_link_cmd=func_echo_all else ld_shlibs_CXX=no fi ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir' hardcode_libdir_separator_CXX=: # Archives containing C++ object files must be created using # the KAI C++ compiler. case $host in osf3*) old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; *) old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' ;; esac ;; RCC*) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; cxx*) case $host in osf3*) allow_undefined_flag_CXX=' $wl-expect_unresolved $wl\*' archive_cmds_CXX='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $soname `test -n "$verstring" && func_echo_all "$wl-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir' ;; *) allow_undefined_flag_CXX=' -expect_unresolved \*' archive_cmds_CXX='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ echo "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname $wl-input $wl$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~ $RM $lib.exp' hardcode_libdir_flag_spec_CXX='-rpath $libdir' ;; esac hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test yes,no = "$GXX,$with_gnu_ld"; then allow_undefined_flag_CXX=' $wl-expect_unresolved $wl\*' case $host in osf3*) archive_cmds_CXX='$CC -shared -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' ;; *) archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' ;; esac hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP " \-L"' else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; psos*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; lcc*) # Lucid # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ archive_cmds_need_lc_CXX=yes no_undefined_flag_CXX=' -zdefs' archive_cmds_CXX='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G$allow_undefined_flag $wl-M $wl$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' hardcode_libdir_flag_spec_CXX='-R$libdir' hardcode_shlibpath_var_CXX=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands '-z linker_flag'. # Supported since Solaris 2.6 (maybe 2.5.1?) whole_archive_flag_spec_CXX='-z allextract$convenience -z defaultextract' ;; esac link_all_deplibs_CXX=yes output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' ;; gcx*) # Green Hills C++ Compiler archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' # The C++ compiler must be used to create the archive. old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs' ;; *) # GNU C++ compiler with Solaris linker if test yes,no = "$GXX,$with_gnu_ld"; then no_undefined_flag_CXX=' $wl-z ${wl}defs' if $CC --version | $GREP -v '^2\.7' > /dev/null; then archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP " \-L"' else # g++ 2.7 appears to require '-G' NOT '-shared' on this # platform. archive_cmds_CXX='$CC -G -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP " \-L"' fi hardcode_libdir_flag_spec_CXX='$wl-R $wl$libdir' case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) whole_archive_flag_spec_CXX='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' ;; esac fi ;; esac ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) no_undefined_flag_CXX='$wl-z,text' archive_cmds_need_lc_CXX=no hardcode_shlibpath_var_CXX=no runpath_var='LD_RUN_PATH' case $cc_basename in CC*) archive_cmds_CXX='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_CXX='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We CANNOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. no_undefined_flag_CXX='$wl-z,text' allow_undefined_flag_CXX='$wl-z,nodefs' archive_cmds_need_lc_CXX=no hardcode_shlibpath_var_CXX=no hardcode_libdir_flag_spec_CXX='$wl-R,$libdir' hardcode_libdir_separator_CXX=':' link_all_deplibs_CXX=yes export_dynamic_flag_spec_CXX='$wl-Bexport' runpath_var='LD_RUN_PATH' case $cc_basename in CC*) archive_cmds_CXX='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' old_archive_cmds_CXX='$CC -Tprelink_objects $oldobjs~ '"$old_archive_cmds_CXX" reload_cmds_CXX='$CC -Tprelink_objects $reload_objs~ '"$reload_cmds_CXX" ;; *) archive_cmds_CXX='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; vxworks*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 printf "%s\n" "$ld_shlibs_CXX" >&6; } test no = "$ld_shlibs_CXX" && can_build_shared=no GCC_CXX=$GXX LD_CXX=$LD ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... # Dependencies to place before and after the object being linked: predep_objects_CXX= postdep_objects_CXX= predeps_CXX= postdeps_CXX= compiler_lib_search_path_CXX= cat > conftest.$ac_ext <<_LT_EOF class Foo { public: Foo (void) { a = 0; } private: int a; }; _LT_EOF _lt_libdeps_save_CFLAGS=$CFLAGS case "$CC $CFLAGS " in #( *\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; *\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; *\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; esac if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # Parse the compiler output and extract the necessary # objects, libraries and library flags. # Sentinel used to keep track of whether or not we are before # the conftest object file. pre_test_object_deps_done=no for p in `eval "$output_verbose_link_cmd"`; do case $prev$p in -L* | -R* | -l*) # Some compilers place space between "-{L,R}" and the path. # Remove the space. if test x-L = "$p" || test x-R = "$p"; then prev=$p continue fi # Expand the sysroot to ease extracting the directories later. if test -z "$prev"; then case $p in -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; esac fi case $p in =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; esac if test no = "$pre_test_object_deps_done"; then case $prev in -L | -R) # Internal compiler library paths should come after those # provided the user. The postdeps already come after the # user supplied libs so there is no need to process them. if test -z "$compiler_lib_search_path_CXX"; then compiler_lib_search_path_CXX=$prev$p else compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} $prev$p" fi ;; # The "-l" case would never come before the object being # linked, so don't bother handling this case. esac else if test -z "$postdeps_CXX"; then postdeps_CXX=$prev$p else postdeps_CXX="${postdeps_CXX} $prev$p" fi fi prev= ;; *.lto.$objext) ;; # Ignore GCC LTO objects *.$objext) # This assumes that the test object file only shows up # once in the compiler output. if test "$p" = "conftest.$objext"; then pre_test_object_deps_done=yes continue fi if test no = "$pre_test_object_deps_done"; then if test -z "$predep_objects_CXX"; then predep_objects_CXX=$p else predep_objects_CXX="$predep_objects_CXX $p" fi else if test -z "$postdep_objects_CXX"; then postdep_objects_CXX=$p else postdep_objects_CXX="$postdep_objects_CXX $p" fi fi ;; *) ;; # Ignore the rest. esac done # Clean up. rm -f a.out a.exe else echo "libtool.m4: error: problem compiling CXX test program" fi $RM -f confest.$objext CFLAGS=$_lt_libdeps_save_CFLAGS # PORTME: override above test on systems where it is broken case $host_os in interix[3-9]*) # Interix 3.5 installs completely hosed .la files for C++, so rather than # hack all around it, let's just trust "g++" to DTRT. predep_objects_CXX= postdep_objects_CXX= postdeps_CXX= ;; esac case " $postdeps_CXX " in *" -lc "*) archive_cmds_need_lc_CXX=no ;; esac compiler_lib_search_dirs_CXX= if test -n "${compiler_lib_search_path_CXX}"; then compiler_lib_search_dirs_CXX=`echo " ${compiler_lib_search_path_CXX}" | $SED -e 's! -L! !g' -e 's!^ !!'` fi lt_prog_compiler_wl_CXX= lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX= # C++ specific cases for pic, static, wl, etc. if test yes = "$GXX"; then lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='-static' case $host_os in aix*) # All AIX code is PIC. if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_CXX='-Bstatic' fi lt_prog_compiler_pic_CXX='-fPIC' ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support lt_prog_compiler_pic_CXX='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the '-m68020' flag to GCC prevents building anything better, # like '-m68040'. lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries lt_prog_compiler_pic_CXX='-DDLL_EXPORT' case $host_os in os2*) lt_prog_compiler_static_CXX='$wl-static' ;; esac ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic_CXX='-fno-common' ;; *djgpp*) # DJGPP does not support shared libraries at all lt_prog_compiler_pic_CXX= ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. lt_prog_compiler_static_CXX= ;; interix[3-9]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic_CXX=-Kconform_pic fi ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) ;; *) lt_prog_compiler_pic_CXX='-fPIC' ;; esac ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic_CXX='-fPIC -shared' ;; *) lt_prog_compiler_pic_CXX='-fPIC' ;; esac else case $host_os in aix[4-9]*) # All AIX code is PIC. if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_CXX='-Bstatic' else lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp' fi ;; chorus*) case $cc_basename in cxch68*) # Green Hills C++ Compiler # _LT_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" ;; esac ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic_CXX='-DDLL_EXPORT' ;; dgux*) case $cc_basename in ec++*) lt_prog_compiler_pic_CXX='-KPIC' ;; ghcx*) # Green Hills C++ Compiler lt_prog_compiler_pic_CXX='-pic' ;; *) ;; esac ;; freebsd* | dragonfly* | midnightbsd*) # FreeBSD uses GNU C++ ;; hpux9* | hpux10* | hpux11*) case $cc_basename in CC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='$wl-a ${wl}archive' if test ia64 != "$host_cpu"; then lt_prog_compiler_pic_CXX='+Z' fi ;; aCC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='$wl-a ${wl}archive' case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic_CXX='+Z' ;; esac ;; *) ;; esac ;; interix*) # This is c89, which is MS Visual C++ (no shared libs) # Anyone wants to do a port? ;; irix5* | irix6* | nonstopux*) case $cc_basename in CC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='-non_shared' # CC pic flag -KPIC is the default. ;; *) ;; esac ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in KCC*) # KAI C++ Compiler lt_prog_compiler_wl_CXX='--backend -Wl,' lt_prog_compiler_pic_CXX='-fPIC' ;; ecpc* ) # old Intel C++ for x86_64, which still supported -KPIC. lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-static' ;; icpc* ) # Intel C++, used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-fPIC' lt_prog_compiler_static_CXX='-static' ;; pgCC* | pgcpp*) # Portland Group C++ compiler lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-fpic' lt_prog_compiler_static_CXX='-Bstatic' ;; cxx*) # Compaq C++ # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX='-non_shared' ;; xlc* | xlC* | bgxl[cC]* | mpixl[cC]*) # IBM XL 8.0, 9.0 on PPC and BlueGene lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-qpic' lt_prog_compiler_static_CXX='-qstaticlink' ;; *) case `$CC -V 2>&1 | $SED 5q` in *Sun\ C*) # Sun C++ 5.9 lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-Bstatic' lt_prog_compiler_wl_CXX='-Qoption ld ' ;; esac ;; esac ;; lynxos*) ;; m88k*) ;; mvs*) case $cc_basename in cxx*) lt_prog_compiler_pic_CXX='-W c,exportall' ;; *) ;; esac ;; netbsd* | netbsdelf*-gnu) ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic_CXX='-fPIC -shared' ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) lt_prog_compiler_wl_CXX='--backend -Wl,' ;; RCC*) # Rational C++ 2.4.1 lt_prog_compiler_pic_CXX='-pic' ;; cxx*) # Digital/Compaq C++ lt_prog_compiler_wl_CXX='-Wl,' # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX='-non_shared' ;; *) ;; esac ;; psos*) ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-Bstatic' lt_prog_compiler_wl_CXX='-Qoption ld ' ;; gcx*) # Green Hills C++ Compiler lt_prog_compiler_pic_CXX='-PIC' ;; *) ;; esac ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x lt_prog_compiler_pic_CXX='-pic' lt_prog_compiler_static_CXX='-Bstatic' ;; lcc*) # Lucid lt_prog_compiler_pic_CXX='-pic' ;; *) ;; esac ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) case $cc_basename in CC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-Bstatic' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 lt_prog_compiler_pic_CXX='-KPIC' ;; *) ;; esac ;; vxworks*) ;; *) lt_prog_compiler_can_build_shared_CXX=no ;; esac fi case $host_os in # For platforms that do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic_CXX= ;; *) lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC" ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 printf %s "checking for $compiler option to produce PIC... " >&6; } if test ${lt_cv_prog_compiler_pic_CXX+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_prog_compiler_pic_CXX=$lt_prog_compiler_pic_CXX fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_CXX" >&5 printf "%s\n" "$lt_cv_prog_compiler_pic_CXX" >&6; } lt_prog_compiler_pic_CXX=$lt_cv_prog_compiler_pic_CXX # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic_CXX"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5 printf %s "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... " >&6; } if test ${lt_cv_prog_compiler_pic_works_CXX+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_prog_compiler_pic_works_CXX=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC" ## exclude from sc_useless_quotes_in_assignment # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_pic_works_CXX=yes fi fi $RM conftest* fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_CXX" >&5 printf "%s\n" "$lt_cv_prog_compiler_pic_works_CXX" >&6; } if test yes = "$lt_cv_prog_compiler_pic_works_CXX"; then case $lt_prog_compiler_pic_CXX in "" | " "*) ;; *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;; esac else lt_prog_compiler_pic_CXX= lt_prog_compiler_can_build_shared_CXX=no fi fi # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 printf %s "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } if test ${lt_cv_prog_compiler_static_works_CXX+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_prog_compiler_static_works_CXX=no save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS $lt_tmp_static_flag" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_static_works_CXX=yes fi else lt_cv_prog_compiler_static_works_CXX=yes fi fi $RM -r conftest* LDFLAGS=$save_LDFLAGS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_CXX" >&5 printf "%s\n" "$lt_cv_prog_compiler_static_works_CXX" >&6; } if test yes = "$lt_cv_prog_compiler_static_works_CXX"; then : else lt_prog_compiler_static_CXX= fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 printf %s "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if test ${lt_cv_prog_compiler_c_o_CXX+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_prog_compiler_c_o_CXX=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o_CXX=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 printf "%s\n" "$lt_cv_prog_compiler_c_o_CXX" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 printf %s "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if test ${lt_cv_prog_compiler_c_o_CXX+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_prog_compiler_c_o_CXX=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o_CXX=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 printf "%s\n" "$lt_cv_prog_compiler_c_o_CXX" >&6; } hard_links=nottested if test no = "$lt_cv_prog_compiler_c_o_CXX" && test no != "$need_locks"; then # do not overwrite the value of need_locks provided by the user { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 printf %s "checking if we can lock with hard links... " >&6; } hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 printf "%s\n" "$hard_links" >&6; } if test no = "$hard_links"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5 printf "%s\n" "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 printf %s "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' case $host_os in aix[4-9]*) # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to GNU nm, but means don't demangle to AIX nm. # Without the "-l" option, or with the "-B" option, AIX nm treats # weak defined symbols like other global defined symbols, whereas # GNU nm marks them as "W". # While the 'weak' keyword is ignored in the Export File, we need # it in the Import File for the 'aix-soname' feature, so we have # to replace the "-B" option with "-P" for AIX nm. if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' else export_symbols_cmds_CXX='`func_echo_all $NM | $SED -e '\''s/B\([^B]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "L") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && (substr(\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' fi ;; pw32*) export_symbols_cmds_CXX=$ltdll_cmds ;; cygwin* | mingw* | cegcc*) case $cc_basename in cl* | icl*) exclude_expsyms_CXX='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' ;; *) export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms_CXX='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' ;; esac ;; linux* | k*bsd*-gnu | gnu*) link_all_deplibs_CXX=no ;; *) export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 printf "%s\n" "$ld_shlibs_CXX" >&6; } test no = "$ld_shlibs_CXX" && can_build_shared=no with_gnu_ld_CXX=$with_gnu_ld # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc_CXX" in x|xyes) # Assume -lc should be added archive_cmds_need_lc_CXX=yes if test yes,yes = "$GCC,$enable_shared"; then case $archive_cmds_CXX in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 printf %s "checking whether -lc should be explicitly linked in... " >&6; } if test ${lt_cv_archive_cmds_need_lc_CXX+y} then : printf %s "(cached) " >&6 else $as_nop $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl_CXX pic_flag=$lt_prog_compiler_pic_CXX compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag_CXX allow_undefined_flag_CXX= if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then lt_cv_archive_cmds_need_lc_CXX=no else lt_cv_archive_cmds_need_lc_CXX=yes fi allow_undefined_flag_CXX=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc_CXX" >&5 printf "%s\n" "$lt_cv_archive_cmds_need_lc_CXX" >&6; } archive_cmds_need_lc_CXX=$lt_cv_archive_cmds_need_lc_CXX ;; esac fi ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 printf %s "checking dynamic linker characteristics... " >&6; } library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=.so postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='$libname$release$shared_ext$major' ;; aix[4-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test ia64 = "$host_cpu"; then # AIX 5 supports IA64 library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line '#! .'. This would cause the generated library to # depend on '.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # Using Import Files as archive members, it is possible to support # filename-based versioning of shared library archives on AIX. While # this would work for both with and without runtime linking, it will # prevent static linking of such archives. So we do filename-based # shared library versioning with .so extension only, which is used # when both runtime linking and shared linking is enabled. # Unfortunately, runtime linking may impact performance, so we do # not want this to be the default eventually. Also, we use the # versioned .so libs for executables only if there is the -brtl # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only. # To allow for filename-based versioning support, we need to create # libNAME.so.V as an archive file, containing: # *) an Import File, referring to the versioned filename of the # archive as well as the shared archive member, telling the # bitwidth (32 or 64) of that shared object, and providing the # list of exported symbols of that shared object, eventually # decorated with the 'weak' keyword # *) the shared object with the F_LOADONLY flag set, to really avoid # it being seen by the linker. # At run time we better use the real file rather than another symlink, # but for link time we create the symlink libNAME.so -> libNAME.so.V case $with_aix_soname,$aix_use_runtimelinking in # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. aix,yes) # traditional libtool dynamic_linker='AIX unversionable lib.so' # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' ;; aix,no) # traditional AIX only dynamic_linker='AIX lib.a(lib.so.V)' # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='$libname$release.a $libname.a' soname_spec='$libname$release$shared_ext$major' ;; svr4,*) # full svr4 only dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o)" library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' # We do not specify a path in Import Files, so LIBPATH fires. shlibpath_overrides_runpath=yes ;; *,yes) # both, prefer svr4 dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o), lib.a(lib.so.V)" library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' # unpreferred sharedlib libNAME.a needs extra handling postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"' postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"' # We do not specify a path in Import Files, so LIBPATH fires. shlibpath_overrides_runpath=yes ;; *,no) # both, prefer aix dynamic_linker="AIX lib.a(lib.so.V), lib.so.V($shared_archive_member_spec.o)" library_names_spec='$libname$release.a $libname.a' soname_spec='$libname$release$shared_ext$major' # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)' postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"' ;; esac shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='$libname$shared_ext' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=.dll need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo $libname | $SED -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo $libname | $SED -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl* | *,icl*) # Native MSVC or ICC libname_spec='$name' soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' library_names_spec='$libname.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec=$LIB if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC and ICC wrapper library_names_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='$libname$release$major$shared_ext $libname$shared_ext' soname_spec='$libname$release$major$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly* | midnightbsd*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[23].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=no sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' if test 32 = "$HPUX_IA64_MODE"; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" sys_lib_dlsearch_path_spec=/usr/lib/hpux32 else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" sys_lib_dlsearch_path_spec=/usr/lib/hpux64 fi ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[3-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test yes = "$lt_cv_prog_gnu_ld"; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='$libname$release$shared_ext$major' library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff" sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; linux*android*) version_type=none # Android doesn't support versioned libraries. need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext' soname_spec='$libname$release$shared_ext' finish_cmds= shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes dynamic_linker='Android linker' # Don't embed -rpath directories since the linker doesn't support them. hardcode_libdir_flag_spec_CXX='-L$libdir' ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH if test ${lt_cv_shlibpath_overrides_runpath+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_CXX\"; \ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_CXX\"" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO" then : if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null then : lt_cv_shlibpath_overrides_runpath=yes fi fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir fi shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Ideally, we could use ldconfig to report *all* directores which are # searched for libraries, however this is still not possible. Aside from not # being certain /sbin/ldconfig is available, command # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64, # even though it is searched at run-time. Try to do the best guess by # appending ld.so.conf contents (and includes) to the search path. if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsdelf*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='NetBSD ld.elf_so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd* | bitrig*) version_type=sunos sys_lib_dlsearch_path_spec=/usr/lib need_lib_prefix=no if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then need_version=no else need_version=yes fi library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; os2*) libname_spec='$name' version_type=windows shrext_cmds=.dll need_version=no need_lib_prefix=no # OS/2 can only load a DLL with a base name of 8 characters or less. soname_spec='`test -n "$os2dllname" && libname="$os2dllname"; v=$($ECHO $release$versuffix | tr -d .-); n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _); $ECHO $n$v`$shared_ext' library_names_spec='${libname}_dll.$libext' dynamic_linker='OS/2 ld.exe' shlibpath_var=BEGINLIBPATH sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='$libname$release$shared_ext$major' library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test yes = "$with_gnu_ld"; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec; then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext' soname_spec='$libname$shared_ext.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=sco need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test yes = "$with_gnu_ld"; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 printf "%s\n" "$dynamic_linker" >&6; } test no = "$dynamic_linker" && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test yes = "$GCC"; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec fi if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec fi # remember unaugmented sys_lib_dlsearch_path content for libtool script decls... configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec # ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH" # to be used as default LT_SYS_LIBRARY_PATH value in generated libtool configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 printf %s "checking how to hardcode library paths into programs... " >&6; } hardcode_action_CXX= if test -n "$hardcode_libdir_flag_spec_CXX" || test -n "$runpath_var_CXX" || test yes = "$hardcode_automatic_CXX"; then # We can hardcode non-existent directories. if test no != "$hardcode_direct_CXX" && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, CXX)" && test no != "$hardcode_minus_L_CXX"; then # Linking always hardcodes the temporary library directory. hardcode_action_CXX=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action_CXX=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action_CXX=unsupported fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_CXX" >&5 printf "%s\n" "$hardcode_action_CXX" >&6; } if test relink = "$hardcode_action_CXX" || test yes = "$inherit_rpath_CXX"; then # Fast installation is not supported enable_fast_install=no elif test yes = "$shlibpath_overrides_runpath" || test no = "$enable_shared"; then # Fast installation is not necessary enable_fast_install=needless fi fi # test -n "$compiler" CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS LDCXX=$LD LD=$lt_save_LD GCC=$lt_save_GCC with_gnu_ld=$lt_save_with_gnu_ld lt_cv_path_LDCXX=$lt_cv_path_LD lt_cv_path_LD=$lt_save_path_LD lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld fi # test yes != "$_lt_caught_CXX_error" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_config_commands="$ac_config_commands libtool" # Only expand once: enable_win32_dll=yes case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}as", so it can be a program name with args. set dummy ${ac_tool_prefix}as; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_AS+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$AS"; then ac_cv_prog_AS="$AS" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_AS="${ac_tool_prefix}as" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AS=$ac_cv_prog_AS if test -n "$AS"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AS" >&5 printf "%s\n" "$AS" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_AS"; then ac_ct_AS=$AS # Extract the first word of "as", so it can be a program name with args. set dummy as; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_AS+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_AS"; then ac_cv_prog_ac_ct_AS="$ac_ct_AS" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AS="as" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_AS=$ac_cv_prog_ac_ct_AS if test -n "$ac_ct_AS"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AS" >&5 printf "%s\n" "$ac_ct_AS" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_AS" = x; then AS="false" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AS=$ac_ct_AS fi else AS="$ac_cv_prog_AS" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. set dummy ${ac_tool_prefix}dlltool; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_DLLTOOL+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$DLLTOOL"; then ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DLLTOOL=$ac_cv_prog_DLLTOOL if test -n "$DLLTOOL"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 printf "%s\n" "$DLLTOOL" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_DLLTOOL"; then ac_ct_DLLTOOL=$DLLTOOL # Extract the first word of "dlltool", so it can be a program name with args. set dummy dlltool; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_DLLTOOL+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_DLLTOOL"; then ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DLLTOOL="dlltool" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL if test -n "$ac_ct_DLLTOOL"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 printf "%s\n" "$ac_ct_DLLTOOL" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_DLLTOOL" = x; then DLLTOOL="false" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DLLTOOL=$ac_ct_DLLTOOL fi else DLLTOOL="$ac_cv_prog_DLLTOOL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. set dummy ${ac_tool_prefix}objdump; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_OBJDUMP+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$OBJDUMP"; then ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OBJDUMP=$ac_cv_prog_OBJDUMP if test -n "$OBJDUMP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 printf "%s\n" "$OBJDUMP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_OBJDUMP"; then ac_ct_OBJDUMP=$OBJDUMP # Extract the first word of "objdump", so it can be a program name with args. set dummy objdump; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_OBJDUMP+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_OBJDUMP"; then ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OBJDUMP="objdump" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP if test -n "$ac_ct_OBJDUMP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 printf "%s\n" "$ac_ct_OBJDUMP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_OBJDUMP" = x; then OBJDUMP="false" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OBJDUMP=$ac_ct_OBJDUMP fi else OBJDUMP="$ac_cv_prog_OBJDUMP" fi ;; esac test -z "$AS" && AS=as test -z "$DLLTOOL" && DLLTOOL=dlltool test -z "$OBJDUMP" && OBJDUMP=objdump if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}windres", so it can be a program name with args. set dummy ${ac_tool_prefix}windres; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_RC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$RC"; then ac_cv_prog_RC="$RC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_RC="${ac_tool_prefix}windres" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RC=$ac_cv_prog_RC if test -n "$RC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $RC" >&5 printf "%s\n" "$RC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_RC"; then ac_ct_RC=$RC # Extract the first word of "windres", so it can be a program name with args. set dummy windres; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_RC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_RC"; then ac_cv_prog_ac_ct_RC="$ac_ct_RC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RC="windres" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RC=$ac_cv_prog_ac_ct_RC if test -n "$ac_ct_RC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RC" >&5 printf "%s\n" "$ac_ct_RC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_RC" = x; then RC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RC=$ac_ct_RC fi else RC="$ac_cv_prog_RC" fi # Source file extension for RC test sources. ac_ext=rc # Object file extension for compiled RC test sources. objext=o objext_RC=$objext # Code to be used in simple compile tests lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' # Code to be used in simple link tests lt_simple_link_test_code=$lt_simple_compile_test_code # ltmain only uses $CC for tagged configurations so make sure $CC is set. # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC= CC=${RC-"windres"} CFLAGS= compiler=$CC compiler_RC=$CC func_cc_basename $compiler cc_basename=$func_cc_basename_result lt_cv_prog_compiler_c_o_RC=yes if test -n "$compiler"; then : fi GCC=$lt_save_GCC ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS # Newer libtool doesn't have AC_LIBTOOL_RC anymore. Need to check for # $(RC) by ourselves. if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}windres", so it can be a program name with args. set dummy ${ac_tool_prefix}windres; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_RC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$RC"; then ac_cv_prog_RC="$RC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_RC="${ac_tool_prefix}windres" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RC=$ac_cv_prog_RC if test -n "$RC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $RC" >&5 printf "%s\n" "$RC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_RC"; then ac_ct_RC=$RC # Extract the first word of "windres", so it can be a program name with args. set dummy windres; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_RC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_RC"; then ac_cv_prog_ac_ct_RC="$ac_ct_RC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RC="windres" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RC=$ac_cv_prog_ac_ct_RC if test -n "$ac_ct_RC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RC" >&5 printf "%s\n" "$ac_ct_RC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_RC" = x; then RC="no" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RC=$ac_ct_RC fi else RC="$ac_cv_prog_RC" fi # Extract the first word of "dot", so it can be a program name with args. set dummy dot; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_USE_DOT+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$USE_DOT"; then ac_cv_prog_USE_DOT="$USE_DOT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_USE_DOT="YES" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_USE_DOT" && ac_cv_prog_USE_DOT="NO" fi fi USE_DOT=$ac_cv_prog_USE_DOT if test -n "$USE_DOT"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $USE_DOT" >&5 printf "%s\n" "$USE_DOT" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi # Extract the first word of "sed", so it can be a program name with args. set dummy sed; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_SED+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$SED"; then ac_cv_prog_SED="$SED" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_SED="sed" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi SED=$ac_cv_prog_SED if test -n "$SED"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $SED" >&5 printf "%s\n" "$SED" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_PKG_CONFIG+y} then : printf %s "(cached) " >&6 else $as_nop case $PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_path_PKG_CONFIG="$as_dir$ac_word$ac_exec_ext" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PKG_CONFIG=$ac_cv_path_PKG_CONFIG if test -n "$PKG_CONFIG"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 printf "%s\n" "$PKG_CONFIG" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_path_PKG_CONFIG"; then ac_pt_PKG_CONFIG=$PKG_CONFIG # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_ac_pt_PKG_CONFIG+y} then : printf %s "(cached) " >&6 else $as_nop case $ac_pt_PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_PKG_CONFIG="$as_dir$ac_word$ac_exec_ext" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG if test -n "$ac_pt_PKG_CONFIG"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 printf "%s\n" "$ac_pt_PKG_CONFIG" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_pt_PKG_CONFIG" = x; then PKG_CONFIG="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac PKG_CONFIG=$ac_pt_PKG_CONFIG fi else PKG_CONFIG="$ac_cv_path_PKG_CONFIG" fi fi if test -n "$PKG_CONFIG"; then _pkg_min_version=0.9.0 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 printf %s "checking pkg-config is at least version $_pkg_min_version... " >&6; } if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } PKG_CONFIG="" fi fi # Check for the tool "astyle", but if not found, replace its program call by the no-op "echo" instead # Extract the first word of "astyle", so it can be a program name with args. set dummy astyle; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ASTYLE+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ASTYLE"; then ac_cv_prog_ASTYLE="$ASTYLE" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ASTYLE="astyle" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_ASTYLE" && ac_cv_prog_ASTYLE="echo" fi fi ASTYLE=$ac_cv_prog_ASTYLE if test -n "$ASTYLE"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ASTYLE" >&5 printf "%s\n" "$ASTYLE" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi # Checks for libraries. ###------------------------------------------------------------------------- # # Checks for header files. # # Autoupdate added the next two lines to ensure that your configure # script's behavior did not change. They are probably safe to remove. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 printf %s "checking for egrep... " >&6; } if test ${ac_cv_path_EGREP+y} then : printf %s "(cached) " >&6 else $as_nop if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_prog in egrep do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 printf %s 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" printf "%s\n" 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 printf "%s\n" "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" ac_fn_c_check_header_compile "$LINENO" "fcntl.h" "ac_cv_header_fcntl_h" "$ac_includes_default" if test "x$ac_cv_header_fcntl_h" = xyes then : printf "%s\n" "#define HAVE_FCNTL_H 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default" if test "x$ac_cv_header_stdlib_h" = xyes then : printf "%s\n" "#define HAVE_STDLIB_H 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "string.h" "ac_cv_header_string_h" "$ac_includes_default" if test "x$ac_cv_header_string_h" = xyes then : printf "%s\n" "#define HAVE_STRING_H 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "unistd.h" "ac_cv_header_unistd_h" "$ac_includes_default" if test "x$ac_cv_header_unistd_h" = xyes then : printf "%s\n" "#define HAVE_UNISTD_H 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "locale.h" "ac_cv_header_locale_h" "$ac_includes_default" if test "x$ac_cv_header_locale_h" = xyes then : printf "%s\n" "#define HAVE_LOCALE_H 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "iconv.h" "ac_cv_header_iconv_h" "$ac_includes_default" if test "x$ac_cv_header_iconv_h" = xyes then : printf "%s\n" "#define HAVE_ICONV_H 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "libintl.h" "ac_cv_header_libintl_h" "$ac_includes_default" if test "x$ac_cv_header_libintl_h" = xyes then : printf "%s\n" "#define HAVE_LIBINTL_H 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "locale.h" "ac_cv_header_locale_h" "$ac_includes_default" if test "x$ac_cv_header_locale_h" = xyes then : printf "%s\n" "#define HAVE_LOCALE_H 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "assert.h" "ac_cv_header_assert_h" "$ac_includes_default" if test "x$ac_cv_header_assert_h" = xyes then : printf "%s\n" "#define HAVE_ASSERT_H 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "ctype.h" "ac_cv_header_ctype_h" "$ac_includes_default" if test "x$ac_cv_header_ctype_h" = xyes then : printf "%s\n" "#define HAVE_CTYPE_H 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "errno.h" "ac_cv_header_errno_h" "$ac_includes_default" if test "x$ac_cv_header_errno_h" = xyes then : printf "%s\n" "#define HAVE_ERRNO_H 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "fcntl.h" "ac_cv_header_fcntl_h" "$ac_includes_default" if test "x$ac_cv_header_fcntl_h" = xyes then : printf "%s\n" "#define HAVE_FCNTL_H 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "stdio.h" "ac_cv_header_stdio_h" "$ac_includes_default" if test "x$ac_cv_header_stdio_h" = xyes then : printf "%s\n" "#define HAVE_STDIO_H 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default" if test "x$ac_cv_header_stdlib_h" = xyes then : printf "%s\n" "#define HAVE_STDLIB_H 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "string.h" "ac_cv_header_string_h" "$ac_includes_default" if test "x$ac_cv_header_string_h" = xyes then : printf "%s\n" "#define HAVE_STRING_H 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "strings.h" "ac_cv_header_strings_h" "$ac_includes_default" if test "x$ac_cv_header_strings_h" = xyes then : printf "%s\n" "#define HAVE_STRINGS_H 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "locale.h" "ac_cv_header_locale_h" "$ac_includes_default" if test "x$ac_cv_header_locale_h" = xyes then : printf "%s\n" "#define HAVE_LOCALE_H 1" >>confdefs.h fi ###------------------------------------------------------------------------- # # Checks for typedefs, structures, and compiler characteristics. # { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5 printf %s "checking for an ANSI C-conforming const... " >&6; } if test ${ac_cv_c_const+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { #ifndef __cplusplus /* Ultrix mips cc rejects this sort of thing. */ typedef int charset[2]; const charset cs = { 0, 0 }; /* SunOS 4.1.1 cc rejects this. */ char const *const *pcpcc; char **ppc; /* NEC SVR4.0.2 mips cc rejects this. */ struct point {int x, y;}; static struct point const zero = {0,0}; /* IBM XL C 1.02.0.0 rejects this. It does not let you subtract one const X* pointer from another in an arm of an if-expression whose if-part is not a constant expression */ const char *g = "string"; pcpcc = &g + (g ? g-g : 0); /* HPUX 7.0 cc rejects these. */ ++pcpcc; ppc = (char**) pcpcc; pcpcc = (char const *const *) ppc; { /* SCO 3.2v4 cc rejects this sort of thing. */ char tx; char *t = &tx; char const *s = 0 ? (char *) 0 : (char const *) 0; *t++ = 0; if (s) return 0; } { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ int x[] = {25, 17}; const int *foo = &x[0]; ++foo; } { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ typedef const int *iptr; iptr p = 0; ++p; } { /* IBM XL C 1.02.0.0 rejects this sort of thing, saying "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ struct s { int j; const int *ap[3]; } bx; struct s *b = &bx; b->j = 5; } { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ const int foo = 10; if (!foo) return 0; } return !cs[0] && !zero.x; #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_c_const=yes else $as_nop ac_cv_c_const=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5 printf "%s\n" "$ac_cv_c_const" >&6; } if test $ac_cv_c_const = no; then printf "%s\n" "#define const /**/" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether struct tm is in sys/time.h or time.h" >&5 printf %s "checking whether struct tm is in sys/time.h or time.h... " >&6; } if test ${ac_cv_struct_tm+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main (void) { struct tm tm; int *p = &tm.tm_sec; return !p; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_struct_tm=time.h else $as_nop ac_cv_struct_tm=sys/time.h fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_struct_tm" >&5 printf "%s\n" "$ac_cv_struct_tm" >&6; } if test $ac_cv_struct_tm = sys/time.h; then printf "%s\n" "#define TM_IN_SYS_TIME 1" >>confdefs.h fi ###------------------------------------------------------------------------- # # Checks for library functions. # for ac_func in strftime do : ac_fn_c_check_func "$LINENO" "strftime" "ac_cv_func_strftime" if test "x$ac_cv_func_strftime" = xyes then : printf "%s\n" "#define HAVE_STRFTIME 1" >>confdefs.h else $as_nop # strftime is in -lintl on SCO UNIX. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for strftime in -lintl" >&5 printf %s "checking for strftime in -lintl... " >&6; } if test ${ac_cv_lib_intl_strftime+y} then : printf %s "(cached) " >&6 else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lintl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ char strftime (); int main (void) { return strftime (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_intl_strftime=yes else $as_nop ac_cv_lib_intl_strftime=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_strftime" >&5 printf "%s\n" "$ac_cv_lib_intl_strftime" >&6; } if test "x$ac_cv_lib_intl_strftime" = xyes then : printf "%s\n" "#define HAVE_STRFTIME 1" >>confdefs.h LIBS="-lintl $LIBS" fi fi done ac_fn_c_check_func "$LINENO" "memmove" "ac_cv_func_memmove" if test "x$ac_cv_func_memmove" = xyes then : printf "%s\n" "#define HAVE_MEMMOVE 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "memset" "ac_cv_func_memset" if test "x$ac_cv_func_memset" = xyes then : printf "%s\n" "#define HAVE_MEMSET 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "strcasecmp" "ac_cv_func_strcasecmp" if test "x$ac_cv_func_strcasecmp" = xyes then : printf "%s\n" "#define HAVE_STRCASECMP 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "strdup" "ac_cv_func_strdup" if test "x$ac_cv_func_strdup" = xyes then : printf "%s\n" "#define HAVE_STRDUP 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "strerror" "ac_cv_func_strerror" if test "x$ac_cv_func_strerror" = xyes then : printf "%s\n" "#define HAVE_STRERROR 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "snprintf" "ac_cv_func_snprintf" if test "x$ac_cv_func_snprintf" = xyes then : printf "%s\n" "#define HAVE_SNPRINTF 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "setlocale" "ac_cv_func_setlocale" if test "x$ac_cv_func_setlocale" = xyes then : printf "%s\n" "#define HAVE_SETLOCALE 1" >>confdefs.h fi ###------------------------------------------------------------------------- # # Backends. Those do not have a required ordering. # # Check whether --with-backends was given. if test ${with_backends+y} then : withval=$with_backends; aqbanking_backends="$withval" else $as_nop aqbanking_backends="all" fi if test "$aqbanking_backends" = "all"; then aqbanking_backends="aqhbci aqofxconnect aqebics aqpaypal aqnone aqgivve" fi for f in ${aqbanking_backends}; do case "$f" in aqhbci) aqbanking_plugins_backends_dirs="$aqbanking_plugins_backends_dirs aqhbci" aqbanking_plugins_backends_libs="$aqbanking_plugins_backends_libs aqhbci/libaqhbci.la" printf "%s\n" "#define AQBANKING_WITH_PLUGIN_BACKEND_AQHBCI 1" >>confdefs.h ;; aqfints) aqbanking_plugins_backends_dirs="$aqbanking_plugins_backends_dirs aqfints" aqbanking_plugins_backends_libs="$aqbanking_plugins_backends_libs aqfints/libaqfintsplugin.la" printf "%s\n" "#define AQBANKING_WITH_PLUGIN_BACKEND_AQFINTS 1" >>confdefs.h ;; aqebics) aqbanking_plugins_backends_dirs="$aqbanking_plugins_backends_dirs aqebics" aqbanking_plugins_backends_libs="$aqbanking_plugins_backends_libs aqebics/libaqebics.la" printf "%s\n" "#define AQBANKING_WITH_PLUGIN_BACKEND_AQEBICS 1" >>confdefs.h ;; aqofxconnect) aqbanking_plugins_backends_dirs="$aqbanking_plugins_backends_dirs aqofxconnect" aqbanking_plugins_backends_libs="$aqbanking_plugins_backends_libs aqofxconnect/libaqofxconnect.la" printf "%s\n" "#define AQBANKING_WITH_PLUGIN_BACKEND_AQOFXCONNECT 1" >>confdefs.h ;; aqpaypal) aqbanking_plugins_backends_dirs="$aqbanking_plugins_backends_dirs aqpaypal" aqbanking_plugins_backends_libs="$aqbanking_plugins_backends_libs aqpaypal/libaqpaypal.la" printf "%s\n" "#define AQBANKING_WITH_PLUGIN_BACKEND_AQPAYPAL 1" >>confdefs.h ;; aqnone) aqbanking_plugins_backends_dirs="$aqbanking_plugins_backends_dirs aqnone" aqbanking_plugins_backends_libs="$aqbanking_plugins_backends_libs aqnone/libaqnone.la" printf "%s\n" "#define AQBANKING_WITH_PLUGIN_BACKEND_AQNONE 1" >>confdefs.h ;; aqgivve) aqbanking_plugins_backends_dirs="$aqbanking_plugins_backends_dirs aqgivve" aqbanking_plugins_backends_libs="$aqbanking_plugins_backends_libs aqgivve/libaqgivve.la" printf "%s\n" "#define AQBANKING_WITH_PLUGIN_BACKEND_AQGIVVE 1" >>confdefs.h ;; *) as_fn_error $? "\"ERROR: Unknown plugin $f\"" "$LINENO" 5 ;; esac done # always define this printf "%s\n" "#define AQBANKING_WITH_PLUGIN_BACKEND_AQNONE 1" >>confdefs.h ###------------------------------------------------------------------------- # # ImExporters. Those do not have a required ordering. # # Check whether --with-imexporters was given. if test ${with_imexporters+y} then : withval=$with_imexporters; aqbanking_imexporters="$withval" else $as_nop aqbanking_imexporters="all" fi if test "$aqbanking_imexporters" = "all"; then aqbanking_imexporters="csv eri2 ofx openhbci1 swift xmldb yellownet sepa ctxfile q43 camt xml" fi for f in ${aqbanking_imexporters}; do case "$f" in csv) aqbanking_plugins_imexporters_dirs="$aqbanking_plugins_imexporters_dirs csv" aqbanking_plugins_imexporters_libs="$aqbanking_plugins_imexporters_libs csv/libabimexporters_csv.la" printf "%s\n" "#define AQBANKING_WITH_PLUGIN_IMEXPORTER_CSV 1" >>confdefs.h ;; eri2) aqbanking_plugins_imexporters_dirs="$aqbanking_plugins_imexporters_dirs eri2" aqbanking_plugins_imexporters_libs="$aqbanking_plugins_imexporters_libs eri2/libabimexporters_eri2.la" printf "%s\n" "#define AQBANKING_WITH_PLUGIN_IMEXPORTER_ERI2 1" >>confdefs.h ;; ofx) aqbanking_plugins_imexporters_dirs="$aqbanking_plugins_imexporters_dirs ofx" aqbanking_plugins_imexporters_libs="$aqbanking_plugins_imexporters_libs ofx/libabimexporters_ofx.la" printf "%s\n" "#define AQBANKING_WITH_PLUGIN_IMEXPORTER_OFX 1" >>confdefs.h ;; openhbci1) aqbanking_plugins_imexporters_dirs="$aqbanking_plugins_imexporters_dirs openhbci1" aqbanking_plugins_imexporters_libs="$aqbanking_plugins_imexporters_libs openhbci1/libabimexporters_openhbci1.la" printf "%s\n" "#define AQBANKING_WITH_PLUGIN_IMEXPORTER_OPENHBCI1 1" >>confdefs.h ;; swift) aqbanking_plugins_imexporters_dirs="$aqbanking_plugins_imexporters_dirs swift" aqbanking_plugins_imexporters_libs="$aqbanking_plugins_imexporters_libs swift/libabimexporters_swift.la" printf "%s\n" "#define AQBANKING_WITH_PLUGIN_IMEXPORTER_SWIFT 1" >>confdefs.h ;; xmldb) aqbanking_plugins_imexporters_dirs="$aqbanking_plugins_imexporters_dirs xmldb" aqbanking_plugins_imexporters_libs="$aqbanking_plugins_imexporters_libs xmldb/libabimexporters_xmldb.la" printf "%s\n" "#define AQBANKING_WITH_PLUGIN_IMEXPORTER_XMLDB 1" >>confdefs.h ;; yellownet) aqbanking_plugins_imexporters_dirs="$aqbanking_plugins_imexporters_dirs yellownet" aqbanking_plugins_imexporters_libs="$aqbanking_plugins_imexporters_libs yellownet/libabimexporters_yellownet.la" printf "%s\n" "#define AQBANKING_WITH_PLUGIN_IMEXPORTER_YELLOWNET 1" >>confdefs.h ;; sepa) aqbanking_plugins_imexporters_dirs="$aqbanking_plugins_imexporters_dirs sepa" aqbanking_plugins_imexporters_libs="$aqbanking_plugins_imexporters_libs sepa/libabimexporters_sepa.la" printf "%s\n" "#define AQBANKING_WITH_PLUGIN_IMEXPORTER_SEPA 1" >>confdefs.h ;; ctxfile) aqbanking_plugins_imexporters_dirs="$aqbanking_plugins_imexporters_dirs ctxfile" aqbanking_plugins_imexporters_libs="$aqbanking_plugins_imexporters_libs ctxfile/libabimexporters_ctxfile.la" printf "%s\n" "#define AQBANKING_WITH_PLUGIN_IMEXPORTER_CTXFILE 1" >>confdefs.h ;; q43) aqbanking_plugins_imexporters_dirs="$aqbanking_plugins_imexporters_dirs q43" aqbanking_plugins_imexporters_libs="$aqbanking_plugins_imexporters_libs q43/libabimexporters_q43.la" printf "%s\n" "#define AQBANKING_WITH_PLUGIN_IMEXPORTER_Q43 1" >>confdefs.h ;; camt) aqbanking_plugins_imexporters_dirs="$aqbanking_plugins_imexporters_dirs camt" aqbanking_plugins_imexporters_libs="$aqbanking_plugins_imexporters_libs camt/libabimexporters_camt.la" printf "%s\n" "#define AQBANKING_WITH_PLUGIN_IMEXPORTER_CAMT 1" >>confdefs.h ;; xml) aqbanking_plugins_imexporters_dirs="$aqbanking_plugins_imexporters_dirs xml" aqbanking_plugins_imexporters_libs="$aqbanking_plugins_imexporters_libs xml/libabimexporters_xml.la" printf "%s\n" "#define AQBANKING_WITH_PLUGIN_IMEXPORTER_XML 1" >>confdefs.h ;; *) as_fn_error $? ""ERROR: Unknown plugin \"$f\""" "$LINENO" 5 ;; esac done ###------------------------------------------------------------------------- # # Parsers. Those do not have a required ordering. # # Check whether --with-parsers was given. if test ${with_parsers+y} then : withval=$with_parsers; aqbanking_parsers="$withval" else $as_nop aqbanking_parsers="all" fi if test "$aqbanking_parsers" = "all"; then aqbanking_parsers="swift" fi for f in ${aqbanking_parsers}; do case "$f" in swift) aqbanking_plugins_parsers_dirs="$aqbanking_plugins_parsers_dirs swift" ;; *) as_fn_error $? ""ERROR: Unknown plugin \"$f\""" "$LINENO" 5 ;; esac done ###------------------------------------------------------------------------- # # Bankinfo plugins. Those do not have a required ordering. # # Check whether --with-bankinfos was given. if test ${with_bankinfos+y} then : withval=$with_bankinfos; aqbanking_bankinfos="$withval" else $as_nop aqbanking_bankinfos="all" fi if test "$aqbanking_bankinfos" = "all"; then aqbanking_bankinfos="de" fi for f in ${aqbanking_bankinfos}; do case "$f" in de) aqbanking_plugins_bankinfo_dirs="$aqbanking_plugins_bankinfo_dirs de" aqbanking_plugins_bankinfo_libs="$aqbanking_plugins_bankinfo_libs de/libbankinfo_de.la" printf "%s\n" "#define AQBANKING_WITH_PLUGIN_BANKINFO_DE 1" >>confdefs.h ;; *) as_fn_error $? ""ERROR: Unknown plugin \"$f\""" "$LINENO" 5 ;; esac done ###------------------------------------------------------------------------- # # Check for Gwen # # Variable used in aqbanking-config.cmake GWENHYWFAR_MINIMUM_VERSION="5.11.2.0" if test -z "5"; then vma="0"; else vma="5"; fi if test -z "11"; then vmi="1"; else vmi="11"; fi if test -z "2"; then vpl="0"; else vpl="2"; fi if test -z "0"; then vbld="0"; else vbld="0"; fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if gwenhywfar support desired" >&5 printf %s "checking if gwenhywfar support desired... " >&6; } # Check whether --enable-gwenhywfar was given. if test ${enable_gwenhywfar+y} then : enableval=$enable_gwenhywfar; enable_gwenhywfar="$enableval" else $as_nop enable_gwenhywfar="yes" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_gwenhywfar" >&5 printf "%s\n" "$enable_gwenhywfar" >&6; } have_gwenhywfar="no" gwenhywfar_dir="" gwenhywfar_plugins="" gwenhywfar_libs="" gwenhywfar_bindir="" gwenhywfar_libspp="" gwenhywfar_includes="" gwenhywfar_has_crypt="yes" if test "$enable_gwenhywfar" != "no"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for gwenhywfar" >&5 printf %s "checking for gwenhywfar... " >&6; } # Check whether --with-gwen-dir was given. if test ${with_gwen_dir+y} then : withval=$with_gwen_dir; { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: obsolete configure option '--with-gwen-dir' used" >&5 printf "%s\n" "obsolete configure option '--with-gwen-dir' used" >&6; } as_fn_error $? " *** Configure switch '--with-gwen-dir' is obsolete. *** If you want to use gwenhywfar from a non-system location *** then locate the file 'gwenhywfar.pc' and add its parent directory *** to environment variable PKG_CONFIG_PATH. For example *** configure PKG_CONFIG_PATH=\":\${PKG_CONFIG_PATH}\"" "$LINENO" 5 fi $PKG_CONFIG --exists gwenhywfar result=$? if test $result -ne 0; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: not found" >&5 printf "%s\n" "not found" >&6; } as_fn_error $? " *** Package gwenhywfar was not found in the pkg-config search path. *** Perhaps you should add the directory containing \`gwenhywfar.pc' *** to the PKG_CONFIG_PATH environment variable" "$LINENO" 5 else gwenhywfar_dir="`$PKG_CONFIG --variable=prefix gwenhywfar`" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gwenhywfar_dir" >&5 printf "%s\n" "$gwenhywfar_dir" >&6; } fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for gwen libs" >&5 printf %s "checking for gwen libs... " >&6; } gwenhywfar_libs="`$PKG_CONFIG --libs gwenhywfar`" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gwenhywfar_libs" >&5 printf "%s\n" "$gwenhywfar_libs" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for gwen includes" >&5 printf %s "checking for gwen includes... " >&6; } gwenhywfar_includes="`$PKG_CONFIG --cflags gwenhywfar`" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gwenhywfar_includes" >&5 printf "%s\n" "$gwenhywfar_includes" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for gwen binary tools" >&5 printf %s "checking for gwen binary tools... " >&6; } gwenhywfar_bindir="`$PKG_CONFIG --variable=bindir gwenhywfar`" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gwenhywfar_bindir" >&5 printf "%s\n" "$gwenhywfar_bindir" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for gwen plugins" >&5 printf %s "checking for gwen plugins... " >&6; } gwenhywfar_plugins="`$PKG_CONFIG --variable=plugindir gwenhywfar`" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gwenhywfar_plugins" >&5 printf "%s\n" "$gwenhywfar_plugins" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for gwen headers" >&5 printf %s "checking for gwen headers... " >&6; } gwenhywfar_headers="`$PKG_CONFIG --variable=headerdir gwenhywfar`" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gwenhywfar_headers" >&5 printf "%s\n" "$gwenhywfar_headers" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if gwenhywfar test desired" >&5 printf %s "checking if gwenhywfar test desired... " >&6; } # Check whether --enable-gwenhywfar was given. if test ${enable_gwenhywfar+y} then : enableval=$enable_gwenhywfar; enable_gwenhywfar_test="$enableval" else $as_nop enable_gwenhywfar_test="yes" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_gwenhywfar_test" >&5 printf "%s\n" "$enable_gwenhywfar_test" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Gwenhywfar version >=$vma.$vmi.$vpl.$vbld" >&5 printf %s "checking for Gwenhywfar version >=$vma.$vmi.$vpl.$vbld... " >&6; } if test "$enable_gwenhywfar_test" != "no"; then gwen_vmajor="`$PKG_CONFIG --variable=vmajor gwenhywfar`" gwen_vminor="`$PKG_CONFIG --variable=vminor gwenhywfar`" gwen_vpatchlevel="`$PKG_CONFIG --variable=vpatchlevel gwenhywfar`" gwen_vstring="`$PKG_CONFIG --variable=vstring gwenhywfar`" gwen_vbuild="`$PKG_CONFIG --variable=vbuild gwenhywfar`" gwen_versionstring="$gwen_vstring.$gwen_vbuild" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: found $gwen_versionstring" >&5 printf "%s\n" "found $gwen_versionstring" >&6; } if test "$vma" -gt "$gwen_vmajor"; then as_fn_error $? "Your Gwenhywfar version is way too old. Please update from https://www.aquamaniac.de" "$LINENO" 5 elif test "$vma" = "$gwen_vmajor"; then if test "$vmi" -gt "$gwen_vminor"; then as_fn_error $? "Your Gwenhywfar version is too old. Please update from https://www.aquamaniac.de" "$LINENO" 5 elif test "$vmi" = "$gwen_vminor"; then if test "$vpl" -gt "$gwen_vpatchlevel"; then as_fn_error $? "Your Gwenhywfar version is a little bit too old. Please update from https://www.aquamaniac.de" "$LINENO" 5 elif test "$vpl" = "$gwen_vpatchlevel"; then if test "$vbld" -gt "$gwen_vbuild"; then as_fn_error $? "Your Gwenhywfar version is a little bit too old. Please update to the latest git version. Instructions for accessing git can be found on https://www.aquamaniac.de" "$LINENO" 5 fi fi fi fi have_gwenhywfar="yes" #AC_MSG_RESULT(yes) else have_gwenhywfar="yes" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: assuming yes" >&5 printf "%s\n" "assuming yes" >&6; } fi if test -n "$save_path"; then export PGK_CONFIG_PATH="$save_path" fi fi all_includes="$all_includes $gwenhywfar_includes" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if gui-tests desired" >&5 printf %s "checking if gui-tests desired... " >&6; } # Check whether --enable-gui-tests was given. if test ${enable_gui_tests+y} then : enableval=$enable_gui_tests; enable_gui_tests="$enableval" else $as_nop enable_gui_tests="no" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_gui_tests" >&5 printf "%s\n" "$enable_gui_tests" >&6; } if test "$enable_gui_tests" != "no"; then # For libgwenhywfar > 3.99.20, look for its library gwengui-gtk2. pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for gwengui-gtk2 gwenhywfar" >&5 printf %s "checking for gwengui-gtk2 gwenhywfar... " >&6; } if test -n "$GWENGUI_GTK2_CFLAGS"; then pkg_cv_GWENGUI_GTK2_CFLAGS="$GWENGUI_GTK2_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gwengui-gtk2 gwenhywfar\""; } >&5 ($PKG_CONFIG --exists --print-errors "gwengui-gtk2 gwenhywfar") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GWENGUI_GTK2_CFLAGS=`$PKG_CONFIG --cflags "gwengui-gtk2 gwenhywfar" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$GWENGUI_GTK2_LIBS"; then pkg_cv_GWENGUI_GTK2_LIBS="$GWENGUI_GTK2_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gwengui-gtk2 gwenhywfar\""; } >&5 ($PKG_CONFIG --exists --print-errors "gwengui-gtk2 gwenhywfar") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GWENGUI_GTK2_LIBS=`$PKG_CONFIG --libs "gwengui-gtk2 gwenhywfar" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then GWENGUI_GTK2_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "gwengui-gtk2 gwenhywfar" 2>&1` else GWENGUI_GTK2_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "gwengui-gtk2 gwenhywfar" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$GWENGUI_GTK2_PKG_ERRORS" >&5 HAVE_GWENGUI_GTK2=0 elif test $pkg_failed = untried; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } HAVE_GWENGUI_GTK2=0 else GWENGUI_GTK2_CFLAGS=$pkg_cv_GWENGUI_GTK2_CFLAGS GWENGUI_GTK2_LIBS=$pkg_cv_GWENGUI_GTK2_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } HAVE_GWENGUI_GTK2=1 pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for gtk+-2.0" >&5 printf %s "checking for gtk+-2.0... " >&6; } if test -n "$GTK2_CFLAGS"; then pkg_cv_GTK2_CFLAGS="$GTK2_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk+-2.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "gtk+-2.0") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GTK2_CFLAGS=`$PKG_CONFIG --cflags "gtk+-2.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$GTK2_LIBS"; then pkg_cv_GTK2_LIBS="$GTK2_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk+-2.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "gtk+-2.0") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GTK2_LIBS=`$PKG_CONFIG --libs "gtk+-2.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then GTK2_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "gtk+-2.0" 2>&1` else GTK2_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "gtk+-2.0" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$GTK2_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (gtk+-2.0) were not met: $GTK2_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables GTK2_CFLAGS and GTK2_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables GTK2_CFLAGS and GTK2_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else GTK2_CFLAGS=$pkg_cv_GTK2_CFLAGS GTK2_LIBS=$pkg_cv_GTK2_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi fi if test "$HAVE_GWENGUI_GTK2" = "1"; then printf "%s\n" "#define USE_GWENGUI_GTK2 1" >>confdefs.h fi else HAVE_GWENGUI_GTK2=0 fi if test "$HAVE_GWENGUI_GTK2" = "1"; then WITH_GWENGUI_GTK2_TRUE= WITH_GWENGUI_GTK2_FALSE='#' else WITH_GWENGUI_GTK2_TRUE='#' WITH_GWENGUI_GTK2_FALSE= fi ###------------------------------------------------------------------------- # # check typemaker2 # { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking typemaker2 binary" >&5 printf %s "checking typemaker2 binary... " >&6; } # Check whether --with-typemaker2-exe was given. if test ${with_typemaker2_exe+y} then : withval=$with_typemaker2_exe; typemaker2_exe="$withval" else $as_nop typemaker2_exe="\$(gwenhywfar_bindir)/typemaker2" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $typemaker2_exe" >&5 printf "%s\n" "$typemaker2_exe" >&6; } ###------------------------------------------------------------------------- # # check xmlmerge # { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking xmlmerge" >&5 printf %s "checking xmlmerge... " >&6; } # Check whether --with-xmlmerge was given. if test ${with_xmlmerge+y} then : withval=$with_xmlmerge; XMLMERGE="$withval" else $as_nop XMLMERGE="$gwenhywfar_dir/bin/xmlmerge" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $XMLMERGE" >&5 printf "%s\n" "$XMLMERGE" >&6; } ###------------------------------------------------------------------------- # # Check for GMP # # Allow the user to override the gmp_libs detection here if test "x$gmp_libs" = "x"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for __gmpz_init in -lgmp" >&5 printf %s "checking for __gmpz_init in -lgmp... " >&6; } if test ${ac_cv_lib_gmp___gmpz_init+y} then : printf %s "(cached) " >&6 else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lgmp $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ char __gmpz_init (); int main (void) { return __gmpz_init (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_gmp___gmpz_init=yes else $as_nop ac_cv_lib_gmp___gmpz_init=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_gmp___gmpz_init" >&5 printf "%s\n" "$ac_cv_lib_gmp___gmpz_init" >&6; } if test "x$ac_cv_lib_gmp___gmpz_init" = xyes then : have_gmp="yes" else $as_nop have_gmp="no" fi for ac_header in gmp.h do : ac_fn_c_check_header_compile "$LINENO" "gmp.h" "ac_cv_header_gmp_h" "$ac_includes_default" if test "x$ac_cv_header_gmp_h" = xyes then : printf "%s\n" "#define HAVE_GMP_H 1" >>confdefs.h else $as_nop have_gmp="no" fi done if test "$have_gmp" != "yes"; then as_fn_error $? "GMP is required, see http://swox.com/gmp" "$LINENO" 5 else gmp_libs="-lgmp" fi fi ###------------------------------------------------------------------------- # # OS dependant settings # # Common settings; can be overridden per-OS below. aqbanking_internal_libs="${abs_top_builddir}/src/libs/libaqbanking.la" aqbanking_ldflags="-L\${libdir}" aqbanking_libs="-laqbanking" aqbanking_includes="-I\${includedir}/aqbanking6" aqbanking_headerdir_am="\$(includedir)/aqbanking6" aqbanking_headerdir="\${includedir}/aqbanking6" aqbanking_plugindir="\${libdir}/aqbanking/plugins/${AQBANKING_SO_EFFECTIVE}" aqbanking_pkgdatadir="\${datadir}/aqbanking" aqbanking_symlinkdir="\$(top_builddir)/aqbanking6" case "$OS_TYPE" in posix) aqbanking_sys_is_windows=0 ;; windows) aqbanking_sys_is_windows=1 printf "%s\n" "#define BUILDING_AQBANKING_DLL 1" >>confdefs.h ;; esac if test "$OS_TYPE" = "windows"; then IS_WINDOWS_TRUE= IS_WINDOWS_FALSE='#' else IS_WINDOWS_TRUE='#' IS_WINDOWS_FALSE= fi ###------------------------------------------------------------------------- # # check whether local installation mode is enabled # { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether local installation mode is wanted" >&5 printf %s "checking whether local installation mode is wanted... " >&6; } # Check whether --enable-local-install was given. if test ${enable_local_install+y} then : enableval=$enable_local_install; enable_local_install="$enableval" else $as_nop enable_local_install="no" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_local_install" >&5 printf "%s\n" "$enable_local_install" >&6; } if test "$enable_local_install" != "no"; then printf "%s\n" "#define ENABLE_LOCAL_INSTALL 1" >>confdefs.h fi ###------------------------------------------------------------------------- # # check plugin search path # { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking plugin search dir" >&5 printf %s "checking plugin search dir... " >&6; } # Check whether --with-plugin-searchdir was given. if test ${with_plugin_searchdir+y} then : withval=$with_plugin_searchdir; aqbanking_plugin_searchdir="$withval" else $as_nop aqbanking_plugin_searchdir="" fi if test -z "${aqbanking_plugin_searchdir}"; then if test "$OSYSTEM" = "windows"; then aqbanking_plugin_searchdir="lib/aqbanking/plugins/${AQBANKING_SO_EFFECTIVE}" else if test "$enable_local_install" != "no"; then aqbanking_plugin_searchdir="lib/aqbanking/plugins/${AQBANKING_SO_EFFECTIVE}" else aqbanking_plugin_searchdir="$aqbanking_plugindir" fi fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $aqbanking_plugin_searchdir" >&5 printf "%s\n" "$aqbanking_plugin_searchdir" >&6; } ###------------------------------------------------------------------------- # # check cfg search dir # { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking cfg search dir" >&5 printf %s "checking cfg search dir... " >&6; } # Check whether --with-cfg-searchdir was given. if test ${with_cfg_searchdir+y} then : withval=$with_cfg_searchdir; aqbanking_cfg_searchdir="$withval" else $as_nop aqbanking_cfg_searchdir="" fi if test -z "$aqbanking_cfg_searchdir"; then if test "$OSYSTEM" = "windows"; then aqbanking_cfg_searchdir="etc" else if test "$enable_local_install" != "no"; then aqbanking_cfg_searchdir="etc" else aqbanking_cfg_searchdir="\$(sysconfdir)" fi fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $aqbanking_cfg_searchdir" >&5 printf "%s\n" "$aqbanking_cfg_searchdir" >&6; } ###------------------------------------------------------------------------- # # check locale search dir # { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking locale search dir" >&5 printf %s "checking locale search dir... " >&6; } # Check whether --with-locale-searchdir was given. if test ${with_locale_searchdir+y} then : withval=$with_locale_searchdir; aqbanking_locale_searchdir="$withval" else $as_nop aqbanking_locale_searchdir="" fi if test -z "${aqbanking_locale_searchdir}"; then if test "$OSYSTEM" = "windows"; then aqbanking_locale_searchdir="share/locale" else if test "$enable_local_install" != "no"; then aqbanking_locale_searchdir="share/locale" else aqbanking_locale_searchdir="\$(localedir)" fi fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $aqbanking_locale_searchdir" >&5 printf "%s\n" "$aqbanking_locale_searchdir" >&6; } ###------------------------------------------------------------------------- # # check data search dir # { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking data search dir" >&5 printf %s "checking data search dir... " >&6; } # Check whether --with-data-searchdir was given. if test ${with_data_searchdir+y} then : withval=$with_data_searchdir; aqbanking_data_searchdir="$withval" else $as_nop aqbanking_data_searchdir="" fi if test -z "${aqbanking_data_searchdir}"; then if test "$OSYSTEM" = "windows"; then aqbanking_data_searchdir="share" else if test "$enable_local_install" != "no"; then aqbanking_data_searchdir="share" else aqbanking_data_searchdir="\$(datadir)" fi fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $aqbanking_data_searchdir" >&5 printf "%s\n" "$aqbanking_data_searchdir" >&6; } # special variables for AqFinTS aqfints_datadir="\$(pkgdatadir)/backends/aqfints" ###------------------------------------------------------------------------- # check for Distribution { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for preselected distribution name" >&5 printf %s "checking for preselected distribution name... " >&6; } if test -n "$aq_distrib_name"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes, $aq_distrib_name" >&5 printf "%s\n" "yes, $aq_distrib_name" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no, will have to determine it" >&5 printf "%s\n" "no, will have to determine it" >&6; } aq_distrib_name="" aq_distrib_version="" aq_distrib_tag="" # Debian-style { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether this is a Debian derivate" >&5 printf %s "checking whether this is a Debian derivate... " >&6; } case `basename $CC` in gcc | gcc-* | *-gcc | *-gcc-*) debtype="` ${CC} --version | head -1`" case $debtype in *\(Debian\ *) aq_distrib_name="Debian" aq_distrib_tag="debian" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes, $aq_distrib_name" >&5 printf "%s\n" "yes, $aq_distrib_name" >&6; } ;; *\(Ubuntu\ * | *\(KUbuntu\ *) aq_distrib_name="Ubuntu" aq_distrib_tag="ubuntu" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes, $aq_distrib_name" >&5 printf "%s\n" "yes, $aq_distrib_name" >&6; } ;; *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } ;; esac ;; *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } ;; esac fi if test -z "$aq_distrib_name"; then # RPM-style { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether this is an RPM distribution" >&5 printf %s "checking whether this is an RPM distribution... " >&6; } RPM_COMMAND="`which rpm`" aq_distrib_name="" aq_distrib_tag="" aq_distrib_version="" if test -n "${RPM_COMMAND}"; then if test -x "${RPM_COMMAND}"; then if test -e "/etc/mandriva-release"; then aq_distrib_name="mandriva" aq_distrib_tag="mdk" aq_distrib_version="`rpm -q --queryformat='%{VERSION}' mandriva-release 2>/dev/null`" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes, $aq_distrib_name" >&5 printf "%s\n" "yes, $aq_distrib_name" >&6; } elif test -e "/etc/mandrake-release"; then aq_distrib_name="mandrake" aq_distrib_tag="mdk" aq_distrib_version="`rpm -q --queryformat='%{VERSION}' mandrake-release 2>/dev/null`" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes, $aq_distrib_name" >&5 printf "%s\n" "yes, $aq_distrib_name" >&6; } elif test -e "/etc/SuSE-release"; then aq_distrib_name="suse" aq_distrib_tag="suse" read v1 v2 v3 v4 &5 printf "%s\n" "yes, $aq_distrib_name" >&6; } elif test -e "/etc/fedora-release"; then aq_distrib_name="fedora" aq_distrib_tag="fc" aq_distrib_version="`rpm -q --queryformat='%{VERSION}' fedora-release 2>/dev/null`" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes, $aq_distrib_name" >&5 printf "%s\n" "yes, $aq_distrib_name" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no (RPM found, but unknown distribution)" >&5 printf "%s\n" "no (RPM found, but unknown distribution)" >&6; } fi else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no (RPM not found)" >&5 printf "%s\n" "no (RPM not found)" >&6; } fi else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no (no RPM installed)" >&5 printf "%s\n" "no (no RPM installed)" >&6; } fi fi ###------------------------------------------------------------------------- # # check for I18N # # check whether i18n files are to be created # Extract the first word of "xgettext", so it can be a program name with args. set dummy xgettext; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_XGETTEXT+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$XGETTEXT"; then ac_cv_prog_XGETTEXT="$XGETTEXT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_XGETTEXT="xgettext" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_XGETTEXT" && ac_cv_prog_XGETTEXT="missing" fi fi XGETTEXT=$ac_cv_prog_XGETTEXT if test -n "$XGETTEXT"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $XGETTEXT" >&5 printf "%s\n" "$XGETTEXT" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi MAKE_I18N_FILES="yes" if test "$XGETTEXT" = "missing"; then MAKE_I18N_FILES="no" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: xgettext is missing. Locale suport is disabled." >&5 printf "%s\n" "$as_me: WARNING: xgettext is missing. Locale suport is disabled." >&2;} fi # Extract the first word of "msgfmt", so it can be a program name with args. set dummy msgfmt; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_MSGFMT+y} then : printf %s "(cached) " >&6 else $as_nop case $MSGFMT in [\\/]* | ?:[\\/]*) ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_path_MSGFMT="$as_dir$ac_word$ac_exec_ext" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT="missing" ;; esac fi MSGFMT=$ac_cv_path_MSGFMT if test -n "$MSGFMT"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MSGFMT" >&5 printf "%s\n" "$MSGFMT" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "$MSGFMT" = "missing"; then MAKE_I18N_FILES="no" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: msgfmt is missing. Locale suport is disabled." >&5 printf "%s\n" "$as_me: WARNING: msgfmt is missing. Locale suport is disabled." >&2;} else # check for --qt argument of msgfmt { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether msgfmt understands --qt" >&5 printf %s "checking whether msgfmt understands --qt... " >&6; } if test "x${MSGFMT}" != "x"; then if ${MSGFMT} --qt --help >/dev/null 2>&1; then MSGFMT_SUPPORTS_QT=yes else MSGFMT_SUPPORTS_QT=no fi else MSGFMT_SUPPORTS_QT=no fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MSGFMT_SUPPORTS_QT" >&5 printf "%s\n" "$MSGFMT_SUPPORTS_QT" >&6; } fi if test "$MAKE_I18N_FILES" = "yes"; then IF_MAKE_I18N_FILES_TRUE= IF_MAKE_I18N_FILES_FALSE='#' else IF_MAKE_I18N_FILES_TRUE='#' IF_MAKE_I18N_FILES_FALSE= fi # then check whether i18n support is to be compiled in i18n_libs="" HAVE_I18N="yes" for ac_header in locale.h libintl.h do : as_ac_Header=`printf "%s\n" "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" if eval test \"x\$"$as_ac_Header"\" = x"yes" then : cat >>confdefs.h <<_ACEOF #define `printf "%s\n" "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF else $as_nop HAVE_I18N="no" fi done ac_fn_c_check_func "$LINENO" "setlocale" "ac_cv_func_setlocale" if test "x$ac_cv_func_setlocale" = xyes then : printf "%s\n" "#define HAVE_SETLOCALE 1" >>confdefs.h fi if test "$OS_TYPE" != "windows"; then oldlibs="$LIBS" LIBS="" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing gettext" >&5 printf %s "checking for library containing gettext... " >&6; } if test ${ac_cv_search_gettext+y} then : printf %s "(cached) " >&6 else $as_nop ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ char gettext (); int main (void) { return gettext (); ; return 0; } _ACEOF for ac_lib in '' intl do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO" then : ac_cv_search_gettext=$ac_res fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext if test ${ac_cv_search_gettext+y} then : break fi done if test ${ac_cv_search_gettext+y} then : else $as_nop ac_cv_search_gettext=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_gettext" >&5 printf "%s\n" "$ac_cv_search_gettext" >&6; } ac_res=$ac_cv_search_gettext if test "$ac_res" != no then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" else $as_nop HAVE_I18N="no" fi i18n_libs="$LIBS" LIBS="$oldlibs" else i18n_libs="-lintl" fi if test "$HAVE_I18N" != "NO"; then printf "%s\n" "#define HAVE_I18N 1" >>confdefs.h fi ###------------------------------------------------------------------------- # # check for release # { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether this is an official release" >&5 printf %s "checking whether this is an official release... " >&6; } # Check whether --enable-release was given. if test ${enable_release+y} then : enableval=$enable_release; case "${enableval}" in yes) enable_release="yes";; no) enable_release="no";; *) as_fn_error $? "bad value ${enableval} for --enable-release" "$LINENO" 5;; esac else $as_nop enable_release="no" fi if test "$enable_release" = "yes"; then STRIPALL="-s" else STRIPALL="" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_release" >&5 printf "%s\n" "$enable_release" >&6; } ###------------------------------------------------------------------------- # Debug arguments for compilation if test -z ""; then default_debug_arg="-g"; else default_debug_arg=""; fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for compiler arguments" >&5 printf %s "checking for compiler arguments... " >&6; } # Check whether --enable-debug was given. if test ${enable_debug+y} then : enableval=$enable_debug; case "${enableval}" in yes) CXXFLAGS="${CXXFLAGS} -g" # Remove -O2 CXXFLAGS=`echo "${CXXFLAGS}" | sed -e 's/-O2//'` CFLAGS=`echo "${CFLAGS}" | sed -e 's/-O2//'` CFLAGS="${CFLAGS} -g" LDFLAGS="${LDFLAGS} -g" printf "%s\n" "#define DEBUG 1" >>confdefs.h ;; no) ;; *) as_fn_error $? "bad value ${enableval} for --enable-debug" "$LINENO" 5 ;; esac else $as_nop # Default value if the argument was not given CXXFLAGS="${CXXFLAGS} ${default_debug_arg}" CFLAGS="${CFLAGS} ${default_debug_arg}" LDFLAGS="${LDFLAGS} ${default_debug_arg}" fi if test ${GCC}x = yesx; then # Check whether --enable-warnings was given. if test ${enable_warnings+y} then : enableval=$enable_warnings; case "${enableval}" in yes) CXXFLAGS="${CXXFLAGS} -Wall" CFLAGS="${CFLAGS} -Wall" ;; all) CXXFLAGS="${CXXFLAGS} -Wall -pedantic -ansi" CFLAGS="${CFLAGS} -Wall -pedantic -ansi" ;; no) ;; *) as_fn_error $? "bad value ${enableval} for --enable-warnings" "$LINENO" 5 ;; esac else $as_nop # Default value if the argument was not given CXXFLAGS="${CXXFLAGS} -Wall" CFLAGS="${CFLAGS} -Wall" fi GCC_VERSION=`${CC} -dumpversion` if test `echo ${GCC_VERSION} | cut -d. -f1` -ge 3; then # This is gcc >= 3.x.x if test `echo ${GCC_VERSION} | cut -d. -f2` -ge 4; then # This is gcc >= 3.4.x CFLAGS="${CFLAGS} -Wdeclaration-after-statement" fi fi # Check whether --enable-error-on-warning was given. if test ${enable_error_on_warning+y} then : enableval=$enable_error_on_warning; case "${enableval}" in yes) CXXFLAGS="${CXXFLAGS} -Werror" CFLAGS="${CFLAGS} -Werror" ;; no) ;; *) as_fn_error $? "bad value ${enableval} for --enable-error-on-warning" "$LINENO" 5 ;; esac else $as_nop # Default value if the argument was not given CXXFLAGS="${CXXFLAGS}" CFLAGS="${CFLAGS}" fi fi # Beautify the CXXFLAGS: remove extra spaces, remove double -g CXXFLAGS=`echo "${CXXFLAGS}" | sed -e 's/ */ /g' | sed -e 's/-g -g/-g/'` CFLAGS=`echo "${CFLAGS}" | sed -e 's/ */ /g' | sed -e 's/-g -g/-g/'` # Print the result { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CFLAGS" >&5 printf "%s\n" "$CFLAGS" >&6; } ###------------------------------------------------------------------------- # # Compiler check for symbol visibility # { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether compiler supports symbol visibility" >&5 printf %s "checking whether compiler supports symbol visibility... " >&6; } if test ${ac_cv_hidden_visibility_attribute+y} then : printf %s "(cached) " >&6 else $as_nop echo 'int __attribute__ ((visibility ("hidden"))) foo (void) { return 1; }' > conftest.c ac_cv_hidden_visibility_attribute=no if { ac_try='${CC-cc} -Werror -S conftest.c -o conftest.s 1>&5' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 (eval $ac_try) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then if grep '\.hidden.*foo' conftest.s >/dev/null; then ac_cv_hidden_visibility_attribute=yes fi fi rm -f conftest.* fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_hidden_visibility_attribute" >&5 printf "%s\n" "$ac_cv_hidden_visibility_attribute" >&6; } if test $ac_cv_hidden_visibility_attribute = yes; then printf "%s\n" "#define GCC_WITH_VISIBILITY_ATTRIBUTE 1" >>confdefs.h visibility_cflags="-fvisibility=hidden" fi ###------------------------------------------------------------------------- # # Subst # GIVEN_CFLAGS=$aqbanking_includes INCLUDE_DIRS=`echo | ${CPP} -v 2>&1` INCLUDE_DIRS=`echo $INCLUDE_DIRS | sed -e 's/.*<...> search starts here://' | sed -e 's/End of search list.*//'` for dir in $INCLUDE_DIRS; do GIVEN_CFLAGS=$(echo $GIVEN_CFLAGS | sed -e 's;-I$dir ;;' | sed -e 's;-I$dir$;;') done aqbanking_includes=$GIVEN_CFLAGS ###------------------------------------------------------------------------- # # Check for additional aclocal flags # ADD_ACLOCAL_FLAGS="" for A in "${GWEN_PREFIX}/share/aclocal" \ "${prefix}/share/aclocal"; do if test -d "${A}"; then ADD_ACLOCAL_FLAGS="${ADD_ACLOCAL_FLAGS} -I ${A}" fi done ###------------------------------------------------------------------------- # # AqBanking modules # aqbanking_modules=". types" aqbankingpp_modules="." ###------------------------------------------------------------------------- # # docpath # { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking docpath" >&5 printf %s "checking docpath... " >&6; } # Check whether --with-docpath was given. if test ${with_docpath+y} then : withval=$with_docpath; docpath="$withval" else $as_nop docpath="${HOME}/apidoc" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $docpath" >&5 printf "%s\n" "$docpath" >&6; } ###------------------------------------------------------------------------- # # check for doc type # { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if full docu should be created" >&5 printf %s "checking if full docu should be created... " >&6; } # Check whether --enable-full-doc was given. if test ${enable_full_doc+y} then : enableval=$enable_full_doc; case "${enableval}" in yes) enable_fulldoc="yes";; no) enable_fulldoc="no";; *) as_fn_error $? "bad value ${enableval} for --enable-full-doc" "$LINENO" 5;; esac else $as_nop enable_fulldoc="no" fi if test "$enable_fulldoc" = "yes"; then DOXYGEN_INPUT="listdoc.h src" DOXYGEN_DEFINE="" DOXYGEN_FILE_PATTERNS="*.h *.hpp *.c *.cpp" DOXYGEN_EXCLUDE_PATTERNS="" else DOXYGEN_DEFINE="DOXYGEN_HIDE" DOXYGEN_INPUT="listdoc.h \ aqbanking6/banking.h \ aqbanking6/banking_bankinfo.h \ aqbanking6/banking_dialogs.h \ aqbanking6/banking_online.h \ aqbanking6/banking_transaction.h \ aqbanking6/error.h \ aqbanking6/account_type.h \ aqbanking6/value.h \ aqbanking6/account_spec.h \ aqbanking6/balance.h \ aqbanking6/bankinfo.h \ aqbanking6/bankinfoservice.h \ aqbanking6/document.h \ aqbanking6/imexporter_accountinfo.h \ aqbanking6/imexporter_context.h \ aqbanking6/message.h \ aqbanking6/security.h \ aqbanking6/transaction.h \ aqbanking6/transactionlimits.h\ " DOXYGEN_FILE_PATTERNS="*.h *.hpp" DOXYGEN_EXCLUDE_PATTERNS="*_p.h" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_fulldoc" >&5 printf "%s\n" "$enable_fulldoc" >&6; } ###------------------------------------------------------------------------- # # search for tag files # { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking doxygen tag files" >&5 printf %s "checking doxygen tag files... " >&6; } DOXYGEN_TAGFILES="" DOXYGEN_TAGFILEPATHS="" if test -d "${docpath}"; then tagfiles="`cd ${docpath} && ls *.tag`" if test -n "${tagfiles}"; then # remove own package from list tagfiles="`echo ${tagfiles} | ${SED} -e s/${PACKAGE}.tag//`" # add every remaining tag file for ff in ${tagfiles}; do DOXYGEN_TAGFILES="${DOXYGEN_TAGFILES} ${docpath}/${ff}=${docpath}/`basename -s .tag ${ff}`" done fi fi if test -z "${DOXYGEN_TAGFILES}"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none" >&5 printf "%s\n" "none" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: found" >&5 printf "%s\n" "found" >&6; } fi ###------------------------------------------------------------------------- # # check for dependencies of backends # (nothing to check for right now) dependencies_ok="yes" ###------------------------------------------------------------------------- # # Configure stuff for backend AqHBCI # # Common settings; can be overridden per-OS below. aqhbci_internal_libs="${abs_top_builddir}/src/libs/plugins/backends/aqhbci/libaqhbci.la" aqhbci_ldflags="-L\${libdir}" aqhbci_includes="${aqbanking_includes}" aqhbci_libs="-laqhbci" with_aqhbci="no" case "$aqbanking_backends" in *aqhbci*) with_aqhbci="yes" case "$OS_TYPE" in posix) ;; windows) printf "%s\n" "#define BUILDING_AQHBCI_DLL 1" >>confdefs.h ;; esac ;; esac GIVEN_CFLAGS=$aqhbci_includes INCLUDE_DIRS=`echo | ${CPP} -v 2>&1` INCLUDE_DIRS=`echo $INCLUDE_DIRS | sed -e 's/.*<...> search starts here://' | sed -e 's/End of search list.*//'` for dir in $INCLUDE_DIRS; do GIVEN_CFLAGS=$(echo $GIVEN_CFLAGS | sed -e 's;-I$dir ;;' | sed -e 's;-I$dir$;;') done aqhbci_includes=$GIVEN_CFLAGS ###------------------------------------------------------------------------- # # check AqHBCI data dir # { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking aqhbci data dir" >&5 printf %s "checking aqhbci data dir... " >&6; } # Check whether --with-aqhbci-datadir was given. if test ${with_aqhbci_datadir+y} then : withval=$with_aqhbci_datadir; aqhbci_datadir="$withval" else $as_nop aqhbci_datadir="$aqhbci_data" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $aqhbci_datadir" >&5 printf "%s\n" "$aqhbci_datadir" >&6; } ###------------------------------------------------------------------------- # # Configure stuff for backend AqOfxConnect # # Common settings aqofxconnect_internal_libs="${abs_top_builddir}/src/libs/plugins/backends/aqofxconnect/libaqofxconnect.la" aqofxconnect_includes="${aqbanking_includes}" aqofxconnect_libs="-L\${libdir} -laqofxconnect" case "$aqbanking_backends" in *aqofxconnect*) case "$OS_TYPE" in posix) ;; windows) printf "%s\n" "#define BUILDING_AQOFXCONNECT_DLL 1" >>confdefs.h ;; esac ;; esac GIVEN_CFLAGS=$aqofxconnect_includes INCLUDE_DIRS=`echo | ${CPP} -v 2>&1` INCLUDE_DIRS=`echo $INCLUDE_DIRS | sed -e 's/.*<...> search starts here://' | sed -e 's/End of search list.*//'` for dir in $INCLUDE_DIRS; do GIVEN_CFLAGS=$(echo $GIVEN_CFLAGS | sed -e 's;-I$dir ;;' | sed -e 's;-I$dir$;;') done aqofxconnect_includes=$GIVEN_CFLAGS #AC_DEFINE_UNQUOTED(AQOFXCONNECT_DATA, "${aqofxconnect_data}", [data dir]) ###------------------------------------------------------------------------- # # Configure stuff for backend AqPaypal # # Common settings aqpaypal_internal_libs="${abs_top_builddir}/src/libs/plugins/backends/aqpaypal/libaqpaypal.la" aqpaypal_includes="${aqbanking_includes}" aqpaypal_libs="-L\${libdir} -laqpaypal" case "$aqbanking_backends" in *aqpaypal*) case "$OS_TYPE" in posix) ;; windows) printf "%s\n" "#define BUILDING_AQPAYPAL_DLL 1" >>confdefs.h ;; esac ;; esac GIVEN_CFLAGS=$aqpaypal_includes INCLUDE_DIRS=`echo | ${CPP} -v 2>&1` INCLUDE_DIRS=`echo $INCLUDE_DIRS | sed -e 's/.*<...> search starts here://' | sed -e 's/End of search list.*//'` for dir in $INCLUDE_DIRS; do GIVEN_CFLAGS=$(echo $GIVEN_CFLAGS | sed -e 's;-I$dir ;;' | sed -e 's;-I$dir$;;') done aqpaypal_includes=$GIVEN_CFLAGS #AC_DEFINE_UNQUOTED(AQPAYPAL_DATA, "${aqpaypal_data}", [data dir]) ###------------------------------------------------------------------------- # # Configure stuff for backend AqEBICS # # Common settings; can be overridden per-OS below. aqebics_internal_libs="${abs_top_builddir}/src/libs/plugins/backends/aqebics/plugin/libaqebics.la" aqebics_ldflags="-L\${libdir}" aqebics_includes="${aqbanking_includes}" aqebics_libs="-laqebics" with_aqebics="no" case "$aqbanking_backends" in *aqebics*) with_aqebics="yes" case "$OS_TYPE" in posix) ;; windows) printf "%s\n" "#define BUILDING_AQEBICS_DLL 1" >>confdefs.h ;; esac ;; esac GIVEN_CFLAGS=$aqebics_includes INCLUDE_DIRS=`echo | ${CPP} -v 2>&1` INCLUDE_DIRS=`echo $INCLUDE_DIRS | sed -e 's/.*<...> search starts here://' | sed -e 's/End of search list.*//'` for dir in $INCLUDE_DIRS; do GIVEN_CFLAGS=$(echo $GIVEN_CFLAGS | sed -e 's;-I$dir ;;' | sed -e 's;-I$dir$;;') done aqebics_includes=$GIVEN_CFLAGS ###------------------------------------------------------------------------- # # check AqEBICS data dir # { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking aqebics data dir" >&5 printf %s "checking aqebics data dir... " >&6; } # Check whether --with-aqebics-datadir was given. if test ${with_aqebics_datadir+y} then : withval=$with_aqebics_datadir; aqebics_datadir="$withval" else $as_nop aqebics_datadir="$aqebics_data" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $aqebics_datadir" >&5 printf "%s\n" "$aqebics_datadir" >&6; } ###------------------------------------------------------------------------- # # Check for xmlsec # if test "$with_aqebics" = "yes"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for build requirements needed by EBICS backend" >&5 printf %s "checking for build requirements needed by EBICS backend... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: " >&5 printf "%s\n" "" >&6; } pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for xmlsec1 >= 1.0.0" >&5 printf %s "checking for xmlsec1 >= 1.0.0... " >&6; } if test -n "$XMLSEC_CFLAGS"; then pkg_cv_XMLSEC_CFLAGS="$XMLSEC_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"xmlsec1 >= 1.0.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "xmlsec1 >= 1.0.0") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_XMLSEC_CFLAGS=`$PKG_CONFIG --cflags "xmlsec1 >= 1.0.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$XMLSEC_LIBS"; then pkg_cv_XMLSEC_LIBS="$XMLSEC_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"xmlsec1 >= 1.0.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "xmlsec1 >= 1.0.0") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_XMLSEC_LIBS=`$PKG_CONFIG --libs "xmlsec1 >= 1.0.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then XMLSEC_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "xmlsec1 >= 1.0.0" 2>&1` else XMLSEC_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "xmlsec1 >= 1.0.0" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$XMLSEC_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (xmlsec1 >= 1.0.0) were not met: $XMLSEC_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables XMLSEC_CFLAGS and XMLSEC_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables XMLSEC_CFLAGS and XMLSEC_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else XMLSEC_CFLAGS=$pkg_cv_XMLSEC_CFLAGS XMLSEC_LIBS=$pkg_cv_XMLSEC_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for libxml-2.0" >&5 printf %s "checking for libxml-2.0... " >&6; } if test -n "$LIBXML_CFLAGS"; then pkg_cv_LIBXML_CFLAGS="$LIBXML_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libxml-2.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "libxml-2.0") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LIBXML_CFLAGS=`$PKG_CONFIG --cflags "libxml-2.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$LIBXML_LIBS"; then pkg_cv_LIBXML_LIBS="$LIBXML_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libxml-2.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "libxml-2.0") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LIBXML_LIBS=`$PKG_CONFIG --libs "libxml-2.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then LIBXML_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libxml-2.0" 2>&1` else LIBXML_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libxml-2.0" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$LIBXML_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (libxml-2.0) were not met: $LIBXML_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables LIBXML_CFLAGS and LIBXML_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables LIBXML_CFLAGS and LIBXML_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else LIBXML_CFLAGS=$pkg_cv_LIBXML_CFLAGS LIBXML_LIBS=$pkg_cv_LIBXML_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for libxslt" >&5 printf %s "checking for libxslt... " >&6; } if test -n "$LIBXSLT_CFLAGS"; then pkg_cv_LIBXSLT_CFLAGS="$LIBXSLT_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libxslt\""; } >&5 ($PKG_CONFIG --exists --print-errors "libxslt") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LIBXSLT_CFLAGS=`$PKG_CONFIG --cflags "libxslt" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$LIBXSLT_LIBS"; then pkg_cv_LIBXSLT_LIBS="$LIBXSLT_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libxslt\""; } >&5 ($PKG_CONFIG --exists --print-errors "libxslt") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LIBXSLT_LIBS=`$PKG_CONFIG --libs "libxslt" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then LIBXSLT_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libxslt" 2>&1` else LIBXSLT_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libxslt" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$LIBXSLT_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (libxslt) were not met: $LIBXSLT_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables LIBXSLT_CFLAGS and LIBXSLT_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables LIBXSLT_CFLAGS and LIBXSLT_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else LIBXSLT_CFLAGS=$pkg_cv_LIBXSLT_CFLAGS LIBXSLT_LIBS=$pkg_cv_LIBXSLT_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi AQEBICS_CFLAGS="$XMLSEC_CFLAGS $LIBXML_CFLAGS $LIBXSLT_CFLAGS" AQEBICS_LIBS="$XMLSEC_LIBS $LIBXML_LIBS $LIBXSLT_LIBS" fi ###------------------------------------------------------------------------- # # check for plugin init # { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if plugin init is wanted" >&5 printf %s "checking if plugin init is wanted... " >&6; } # Check whether --enable-init-plugins was given. if test ${enable_init_plugins+y} then : enableval=$enable_init_plugins; enable_init_plugins="$enableval" else $as_nop enable_init_plugins="yes" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_init_plugins" >&5 printf "%s\n" "$enable_init_plugins" >&6; } if test "$enable_init_plugins" != "no"; then printf "%s\n" "#define AQBANKING_ENABLE_INIT_PLUGINS 1" >>confdefs.h fi ###------------------------------------------------------------------------- # # check whether aqbanking is a subproject to another one # { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if AqBanking is a subproject" >&5 printf %s "checking if AqBanking is a subproject... " >&6; } # Check whether --enable-aqb-subproject was given. if test ${enable_aqb_subproject+y} then : enableval=$enable_aqb_subproject; enable_aqb_subproject="$enableval" else $as_nop enable_aqb_subproject="no" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_aqb_subproject" >&5 printf "%s\n" "$enable_aqb_subproject" >&6; } if test "$enable_aqb_subproject" != "no"; then printf "%s\n" "#define AQBANKING_IS_SUBPROJECT 1" >>confdefs.h fi ###------------------------------------------------------------------------- # # check whether aqbanking-cli is enabled # { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether aqbanking-cli is wanted" >&5 printf %s "checking whether aqbanking-cli is wanted... " >&6; } # Check whether --enable-cli was given. if test ${enable_cli+y} then : enableval=$enable_cli; enable_cli="$enableval" else $as_nop enable_cli="yes" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_cli" >&5 printf "%s\n" "$enable_cli" >&6; } if test "$enable_cli" = "yes"; then ENABLE_CLI_TRUE= ENABLE_CLI_FALSE='#' else ENABLE_CLI_TRUE='#' ENABLE_CLI_FALSE= fi # Check whether --with-cli-version-string was given. if test ${with_cli_version_string+y} then : withval=$with_cli_version_string; AQBANKING_CLI_VERSION_STRING="$withval" else $as_nop AQBANKING_CLI_VERSION_STRING="$AQBANKING_VERSION_STRING" fi ###------------------------------------------------------------------------- # # check whether tutorials are to be built # { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether tutorials are to be built" >&5 printf %s "checking whether tutorials are to be built... " >&6; } # Check whether --enable-tutorials was given. if test ${enable_tutorials+y} then : enableval=$enable_tutorials; case "${enableval}" in yes) TUTORIALS="tutorials";; no) TUTORIALS="";; *) as_fn_error $? "bad value ${enableval} for --enable-tutorials" "$LINENO" 5;; esac else $as_nop TUTORIALS="tutorials" enableval="yes" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enableval" >&5 printf "%s\n" "$enableval" >&6; } ###------------------------------------------------------------------------- # # Cleanup includes, define all_XXX # GIVEN_CFLAGS=$all_includes INCLUDE_DIRS=`echo | ${CPP} -v 2>&1` INCLUDE_DIRS=`echo $INCLUDE_DIRS | sed -e 's/.*<...> search starts here://' | sed -e 's/End of search list.*//'` for dir in $INCLUDE_DIRS; do GIVEN_CFLAGS=$(echo $GIVEN_CFLAGS | sed -e 's;-I$dir ;;' | sed -e 's;-I$dir$;;') done all_includes=$GIVEN_CFLAGS # Adjust CFLAGS and LDFLAGS on Windows case "$OS_TYPE" in windows) # GnuCash compiles with this; maybe we need this, too? #CFLAGS="${CFLAGS} -mms-bitfields" LDFLAGS="${LDFLAGS} -no-undefined -mwindows" ;; esac ###------------------------------------------------------------------------- # # Output files # ac_config_files="$ac_config_files admin/Makefile doc/Makefile m4/Makefile src/Makefile src/libs/Makefile src/libs/aqbanking/Makefile src/libs/aqbanking/version.h src/libs/aqbanking/system.h src/libs/aqbanking/dialogs/Makefile src/libs/aqbanking/types/Makefile src/libs/aqbanking/gui/Makefile src/libs/aqbanking/typemaker2/Makefile src/libs/aqbanking/typemaker2/c/Makefile src/libs/aqbanking/backendsupport/Makefile src/libs/aqbankingpp/Makefile src/libs/plugins/Makefile src/libs/plugins/bankinfo/Makefile src/libs/plugins/bankinfo/de/Makefile src/libs/plugins/bankinfo/de/de.xml src/libs/plugins/bankinfo/generic/Makefile src/libs/plugins/imexporters/Makefile src/libs/plugins/imexporters/eri2/Makefile src/libs/plugins/imexporters/eri2/eri2.xml src/libs/plugins/imexporters/eri2/profiles/Makefile src/libs/plugins/imexporters/ofx/Makefile src/libs/plugins/imexporters/ofx/ofx.xml src/libs/plugins/imexporters/ofx/parser/Makefile src/libs/plugins/imexporters/ofx/profiles/Makefile src/libs/plugins/imexporters/swift/Makefile src/libs/plugins/imexporters/swift/swift.xml src/libs/plugins/imexporters/swift/profiles/Makefile src/libs/plugins/imexporters/csv/Makefile src/libs/plugins/imexporters/csv/csv.xml src/libs/plugins/imexporters/csv/profiles/Makefile src/libs/plugins/imexporters/openhbci1/Makefile src/libs/plugins/imexporters/openhbci1/openhbci1.xml src/libs/plugins/imexporters/openhbci1/profiles/Makefile src/libs/plugins/imexporters/qif/Makefile src/libs/plugins/imexporters/qif/qif.xml src/libs/plugins/imexporters/qif/profiles/Makefile src/libs/plugins/imexporters/yellownet/Makefile src/libs/plugins/imexporters/yellownet/yellownet.xml src/libs/plugins/imexporters/yellownet/profiles/Makefile src/libs/plugins/imexporters/xmldb/Makefile src/libs/plugins/imexporters/xmldb/xmldb.xml src/libs/plugins/imexporters/xmldb/profiles/Makefile src/libs/plugins/imexporters/sepa/Makefile src/libs/plugins/imexporters/sepa/sepa.xml src/libs/plugins/imexporters/sepa/profiles/Makefile src/libs/plugins/imexporters/ctxfile/Makefile src/libs/plugins/imexporters/ctxfile/ctxfile.xml src/libs/plugins/imexporters/ctxfile/profiles/Makefile src/libs/plugins/imexporters/q43/Makefile src/libs/plugins/imexporters/q43/q43.xml src/libs/plugins/imexporters/q43/profiles/Makefile src/libs/plugins/imexporters/camt/Makefile src/libs/plugins/imexporters/camt/camt.xml src/libs/plugins/imexporters/camt/profiles/Makefile src/libs/plugins/imexporters/xml/Makefile src/libs/plugins/imexporters/xml/xml.xml src/libs/plugins/imexporters/xml/data/Makefile src/libs/plugins/imexporters/xml/profiles/Makefile src/libs/plugins/parsers/Makefile src/libs/plugins/parsers/swift/Makefile src/libs/plugins/parsers/swift/swift.xml src/libs/plugins/backends/Makefile src/libs/plugins/backends/aqhbci/Makefile src/libs/plugins/backends/aqhbci/aqhbci.xml src/libs/plugins/backends/aqhbci/dialogs/Makefile src/libs/plugins/backends/aqhbci/header.xml src/libs/plugins/backends/aqhbci/banking/Makefile src/libs/plugins/backends/aqhbci/msglayer/Makefile src/libs/plugins/backends/aqhbci/tan/Makefile src/libs/plugins/backends/aqhbci/joblayer/Makefile src/libs/plugins/backends/aqhbci/applayer/Makefile src/libs/plugins/backends/aqhbci/ajobs/Makefile src/libs/plugins/backends/aqhbci/admjobs/Makefile src/libs/plugins/backends/aqhbci/applayer/xml/Makefile src/libs/plugins/backends/aqhbci/control/Makefile src/libs/plugins/backends/aqhbci/version.h src/libs/plugins/backends/aqofxconnect/Makefile src/libs/plugins/backends/aqofxconnect/aqofxconnect.xml src/libs/plugins/backends/aqofxconnect/libofxhome/Makefile src/libs/plugins/backends/aqofxconnect/v1/Makefile src/libs/plugins/backends/aqofxconnect/v2/Makefile src/libs/plugins/backends/aqofxconnect/control/Makefile src/libs/plugins/backends/aqofxconnect/common/Makefile src/libs/plugins/backends/aqofxconnect/dialogs/Makefile src/libs/plugins/backends/aqpaypal/Makefile src/libs/plugins/backends/aqpaypal/aqpaypal.xml src/libs/plugins/backends/aqpaypal/control/Makefile src/libs/plugins/backends/aqnone/Makefile src/libs/plugins/backends/aqnone/aqnone.xml src/libs/plugins/backends/aqgivve/Makefile src/libs/plugins/backends/aqgivve/aqgivve.xml src/libs/plugins/backends/aqebics/Makefile src/libs/plugins/backends/aqebics/aqebics.xml src/libs/plugins/backends/aqebics/client/Makefile src/libs/plugins/backends/aqebics/dialogs/Makefile src/libs/plugins/backends/aqebics/msg/Makefile src/libs/plugins/backends/aqebics/control/Makefile src/libs/plugins/backends/aqebics/requests/Makefile src/libs/plugins/backends/aqfints/Makefile src/libs/plugins/backends/aqfints/aqfints.xml src/libs/plugins/backends/aqfints/banking/Makefile src/libs/plugins/backends/aqfints/banking/control/Makefile src/libs/plugins/backends/aqfints/libaqfints/Makefile src/libs/plugins/backends/aqfints/libaqfints/msg/Makefile src/libs/plugins/backends/aqfints/libaqfints/parser/Makefile src/libs/plugins/backends/aqfints/libaqfints/service/Makefile src/libs/plugins/backends/aqfints/libaqfints/service/xml/Makefile src/libs/plugins/backends/aqfints/libaqfints/service/bpd/Makefile src/libs/plugins/backends/aqfints/libaqfints/service/upd/Makefile src/libs/plugins/backends/aqfints/libaqfints/service/jobs/Makefile src/libs/plugins/backends/aqfints/libaqfints/transport/Makefile src/libs/plugins/backends/aqfints/libaqfints/session/Makefile src/libs/plugins/backends/aqfints/libaqfints/session/pintan/Makefile src/libs/plugins/backends/aqfints/libaqfints/session/hbci/Makefile src/test/Makefile src/tools/Makefile src/tools/aqbanking-cli/Makefile src/tools/mkdeinfo/Makefile tutorials/Makefile po/Makefile Doxyfile Makefile aqbanking-config.in aqbanking.pc aqbanking.spec aqbanking.iss aqbanking-config.cmake aqbanking-config-version.cmake" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test ${\1+y} || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 printf "%s\n" "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 printf "%s\n" "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`printf "%s\n" "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 printf %s "checking that generated files are newer than configure... " >&6; } if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: done" >&5 printf "%s\n" "done" >&6; } if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then as_fn_error $? "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCXX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WITH_GWENGUI_GTK2_TRUE}" && test -z "${WITH_GWENGUI_GTK2_FALSE}"; then as_fn_error $? "conditional \"WITH_GWENGUI_GTK2\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${IS_WINDOWS_TRUE}" && test -z "${IS_WINDOWS_FALSE}"; then as_fn_error $? "conditional \"IS_WINDOWS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${IF_MAKE_I18N_FILES_TRUE}" && test -z "${IF_MAKE_I18N_FILES_FALSE}"; then as_fn_error $? "conditional \"IF_MAKE_I18N_FILES\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_CLI_TRUE}" && test -z "${ENABLE_CLI_FALSE}"; then as_fn_error $? "conditional \"ENABLE_CLI\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 printf "%s\n" "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh as_nop=: if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else $as_nop case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi # Reset variables that may have inherited troublesome values from # the environment. # IFS needs to be set, to space, tab, and newline, in precisely that order. # (If _AS_PATH_WALK were called with IFS unset, it would have the # side effect of setting IFS to empty, thus disabling word splitting.) # Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl IFS=" "" $as_nl" PS1='$ ' PS2='> ' PS4='+ ' # Ensure predictable behavior from utilities with locale-dependent output. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # We cannot yet rely on "unset" to work, but we need these variables # to be unset--not just set to an empty or harmless value--now, to # avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct # also avoids known problems related to "unset" and subshell syntax # in other old shells (e.g. bash 2.01 and pdksh 5.2.14). for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH do eval test \${$as_var+y} \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done # Ensure that fds 0, 1, and 2 are open. if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. if ${PATH_SEPARATOR+false} :; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac test -r "$as_dir$0" && as_myself=$as_dir$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi printf "%s\n" "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null then : eval 'as_fn_append () { eval $1+=\$2 }' else $as_nop as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null then : eval 'as_fn_arith () { as_val=$(( $* )) }' else $as_nop as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # Determine whether it's possible to make 'echo' print without a newline. # These variables are no longer used directly by Autoconf, but are AC_SUBSTed # for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac # For backward compatibility with old third-party macros, we provide # the shell variables $as_echo and $as_echo_n. New code should use # AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. as_echo='printf %s\n' as_echo_n='printf %s' rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by $as_me, which was generated by GNU Autoconf 2.71. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to the package provider." _ACEOF ac_cs_config=`printf "%s\n" "$ac_configure_args" | sed "$ac_safe_unquote"` ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\''/g"` cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ config.status configured by $0, generated by GNU Autoconf 2.71, with options \\"\$ac_cs_config\\" Copyright (C) 2021 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) printf "%s\n" "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) printf "%s\n" "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) printf "%s\n" "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \printf "%s\n" "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX printf "%s\n" "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}" # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`' enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`' macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`' macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`' pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`' enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`' shared_archive_member_spec='`$ECHO "$shared_archive_member_spec" | $SED "$delay_single_quote_subst"`' SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`' ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`' PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`' host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`' host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`' host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`' build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`' build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`' build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`' SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`' Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`' GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`' EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`' FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`' LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`' NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`' LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`' max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`' ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`' exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`' lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`' lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`' lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`' lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`' lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`' reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`' reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`' FILECMD='`$ECHO "$FILECMD" | $SED "$delay_single_quote_subst"`' OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`' deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`' file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`' file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`' want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`' DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`' sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`' AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`' lt_ar_flags='`$ECHO "$lt_ar_flags" | $SED "$delay_single_quote_subst"`' AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`' archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`' STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`' RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`' old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`' old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`' old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`' lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`' CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`' CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`' compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`' GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_import='`$ECHO "$lt_cv_sys_global_symbol_to_import" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`' lt_cv_nm_interface='`$ECHO "$lt_cv_nm_interface" | $SED "$delay_single_quote_subst"`' nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`' lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`' lt_cv_truncate_bin='`$ECHO "$lt_cv_truncate_bin" | $SED "$delay_single_quote_subst"`' objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`' MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`' lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`' need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`' MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`' DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`' NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`' LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`' OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`' OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`' libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`' shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`' extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`' archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`' enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`' export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`' whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`' compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`' old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`' old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`' archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`' archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`' module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`' module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`' with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`' allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`' no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`' hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`' hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`' hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`' hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`' hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`' hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`' hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`' inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`' link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`' always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`' export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`' exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`' include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`' prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`' postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`' file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`' variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`' need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`' need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`' version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`' runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`' shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`' shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`' libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`' library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`' soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`' install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`' postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`' postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`' finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`' finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`' hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`' sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`' configure_time_dlsearch_path='`$ECHO "$configure_time_dlsearch_path" | $SED "$delay_single_quote_subst"`' configure_time_lt_sys_library_path='`$ECHO "$configure_time_lt_sys_library_path" | $SED "$delay_single_quote_subst"`' hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`' enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`' enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`' enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`' old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`' striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`' compiler_lib_search_dirs='`$ECHO "$compiler_lib_search_dirs" | $SED "$delay_single_quote_subst"`' predep_objects='`$ECHO "$predep_objects" | $SED "$delay_single_quote_subst"`' postdep_objects='`$ECHO "$postdep_objects" | $SED "$delay_single_quote_subst"`' predeps='`$ECHO "$predeps" | $SED "$delay_single_quote_subst"`' postdeps='`$ECHO "$postdeps" | $SED "$delay_single_quote_subst"`' compiler_lib_search_path='`$ECHO "$compiler_lib_search_path" | $SED "$delay_single_quote_subst"`' AS='`$ECHO "$AS" | $SED "$delay_single_quote_subst"`' LD_CXX='`$ECHO "$LD_CXX" | $SED "$delay_single_quote_subst"`' LD_RC='`$ECHO "$LD_RC" | $SED "$delay_single_quote_subst"`' reload_flag_CXX='`$ECHO "$reload_flag_CXX" | $SED "$delay_single_quote_subst"`' reload_flag_RC='`$ECHO "$reload_flag_RC" | $SED "$delay_single_quote_subst"`' reload_cmds_CXX='`$ECHO "$reload_cmds_CXX" | $SED "$delay_single_quote_subst"`' reload_cmds_RC='`$ECHO "$reload_cmds_RC" | $SED "$delay_single_quote_subst"`' old_archive_cmds_CXX='`$ECHO "$old_archive_cmds_CXX" | $SED "$delay_single_quote_subst"`' old_archive_cmds_RC='`$ECHO "$old_archive_cmds_RC" | $SED "$delay_single_quote_subst"`' compiler_CXX='`$ECHO "$compiler_CXX" | $SED "$delay_single_quote_subst"`' compiler_RC='`$ECHO "$compiler_RC" | $SED "$delay_single_quote_subst"`' GCC_CXX='`$ECHO "$GCC_CXX" | $SED "$delay_single_quote_subst"`' GCC_RC='`$ECHO "$GCC_RC" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_no_builtin_flag_CXX='`$ECHO "$lt_prog_compiler_no_builtin_flag_CXX" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_no_builtin_flag_RC='`$ECHO "$lt_prog_compiler_no_builtin_flag_RC" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_pic_CXX='`$ECHO "$lt_prog_compiler_pic_CXX" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_pic_RC='`$ECHO "$lt_prog_compiler_pic_RC" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_wl_CXX='`$ECHO "$lt_prog_compiler_wl_CXX" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_wl_RC='`$ECHO "$lt_prog_compiler_wl_RC" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_static_CXX='`$ECHO "$lt_prog_compiler_static_CXX" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_static_RC='`$ECHO "$lt_prog_compiler_static_RC" | $SED "$delay_single_quote_subst"`' lt_cv_prog_compiler_c_o_CXX='`$ECHO "$lt_cv_prog_compiler_c_o_CXX" | $SED "$delay_single_quote_subst"`' lt_cv_prog_compiler_c_o_RC='`$ECHO "$lt_cv_prog_compiler_c_o_RC" | $SED "$delay_single_quote_subst"`' archive_cmds_need_lc_CXX='`$ECHO "$archive_cmds_need_lc_CXX" | $SED "$delay_single_quote_subst"`' archive_cmds_need_lc_RC='`$ECHO "$archive_cmds_need_lc_RC" | $SED "$delay_single_quote_subst"`' enable_shared_with_static_runtimes_CXX='`$ECHO "$enable_shared_with_static_runtimes_CXX" | $SED "$delay_single_quote_subst"`' enable_shared_with_static_runtimes_RC='`$ECHO "$enable_shared_with_static_runtimes_RC" | $SED "$delay_single_quote_subst"`' export_dynamic_flag_spec_CXX='`$ECHO "$export_dynamic_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' export_dynamic_flag_spec_RC='`$ECHO "$export_dynamic_flag_spec_RC" | $SED "$delay_single_quote_subst"`' whole_archive_flag_spec_CXX='`$ECHO "$whole_archive_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' whole_archive_flag_spec_RC='`$ECHO "$whole_archive_flag_spec_RC" | $SED "$delay_single_quote_subst"`' compiler_needs_object_CXX='`$ECHO "$compiler_needs_object_CXX" | $SED "$delay_single_quote_subst"`' compiler_needs_object_RC='`$ECHO "$compiler_needs_object_RC" | $SED "$delay_single_quote_subst"`' old_archive_from_new_cmds_CXX='`$ECHO "$old_archive_from_new_cmds_CXX" | $SED "$delay_single_quote_subst"`' old_archive_from_new_cmds_RC='`$ECHO "$old_archive_from_new_cmds_RC" | $SED "$delay_single_quote_subst"`' old_archive_from_expsyms_cmds_CXX='`$ECHO "$old_archive_from_expsyms_cmds_CXX" | $SED "$delay_single_quote_subst"`' old_archive_from_expsyms_cmds_RC='`$ECHO "$old_archive_from_expsyms_cmds_RC" | $SED "$delay_single_quote_subst"`' archive_cmds_CXX='`$ECHO "$archive_cmds_CXX" | $SED "$delay_single_quote_subst"`' archive_cmds_RC='`$ECHO "$archive_cmds_RC" | $SED "$delay_single_quote_subst"`' archive_expsym_cmds_CXX='`$ECHO "$archive_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`' archive_expsym_cmds_RC='`$ECHO "$archive_expsym_cmds_RC" | $SED "$delay_single_quote_subst"`' module_cmds_CXX='`$ECHO "$module_cmds_CXX" | $SED "$delay_single_quote_subst"`' module_cmds_RC='`$ECHO "$module_cmds_RC" | $SED "$delay_single_quote_subst"`' module_expsym_cmds_CXX='`$ECHO "$module_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`' module_expsym_cmds_RC='`$ECHO "$module_expsym_cmds_RC" | $SED "$delay_single_quote_subst"`' with_gnu_ld_CXX='`$ECHO "$with_gnu_ld_CXX" | $SED "$delay_single_quote_subst"`' with_gnu_ld_RC='`$ECHO "$with_gnu_ld_RC" | $SED "$delay_single_quote_subst"`' allow_undefined_flag_CXX='`$ECHO "$allow_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`' allow_undefined_flag_RC='`$ECHO "$allow_undefined_flag_RC" | $SED "$delay_single_quote_subst"`' no_undefined_flag_CXX='`$ECHO "$no_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`' no_undefined_flag_RC='`$ECHO "$no_undefined_flag_RC" | $SED "$delay_single_quote_subst"`' hardcode_libdir_flag_spec_CXX='`$ECHO "$hardcode_libdir_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' hardcode_libdir_flag_spec_RC='`$ECHO "$hardcode_libdir_flag_spec_RC" | $SED "$delay_single_quote_subst"`' hardcode_libdir_separator_CXX='`$ECHO "$hardcode_libdir_separator_CXX" | $SED "$delay_single_quote_subst"`' hardcode_libdir_separator_RC='`$ECHO "$hardcode_libdir_separator_RC" | $SED "$delay_single_quote_subst"`' hardcode_direct_CXX='`$ECHO "$hardcode_direct_CXX" | $SED "$delay_single_quote_subst"`' hardcode_direct_RC='`$ECHO "$hardcode_direct_RC" | $SED "$delay_single_quote_subst"`' hardcode_direct_absolute_CXX='`$ECHO "$hardcode_direct_absolute_CXX" | $SED "$delay_single_quote_subst"`' hardcode_direct_absolute_RC='`$ECHO "$hardcode_direct_absolute_RC" | $SED "$delay_single_quote_subst"`' hardcode_minus_L_CXX='`$ECHO "$hardcode_minus_L_CXX" | $SED "$delay_single_quote_subst"`' hardcode_minus_L_RC='`$ECHO "$hardcode_minus_L_RC" | $SED "$delay_single_quote_subst"`' hardcode_shlibpath_var_CXX='`$ECHO "$hardcode_shlibpath_var_CXX" | $SED "$delay_single_quote_subst"`' hardcode_shlibpath_var_RC='`$ECHO "$hardcode_shlibpath_var_RC" | $SED "$delay_single_quote_subst"`' hardcode_automatic_CXX='`$ECHO "$hardcode_automatic_CXX" | $SED "$delay_single_quote_subst"`' hardcode_automatic_RC='`$ECHO "$hardcode_automatic_RC" | $SED "$delay_single_quote_subst"`' inherit_rpath_CXX='`$ECHO "$inherit_rpath_CXX" | $SED "$delay_single_quote_subst"`' inherit_rpath_RC='`$ECHO "$inherit_rpath_RC" | $SED "$delay_single_quote_subst"`' link_all_deplibs_CXX='`$ECHO "$link_all_deplibs_CXX" | $SED "$delay_single_quote_subst"`' link_all_deplibs_RC='`$ECHO "$link_all_deplibs_RC" | $SED "$delay_single_quote_subst"`' always_export_symbols_CXX='`$ECHO "$always_export_symbols_CXX" | $SED "$delay_single_quote_subst"`' always_export_symbols_RC='`$ECHO "$always_export_symbols_RC" | $SED "$delay_single_quote_subst"`' export_symbols_cmds_CXX='`$ECHO "$export_symbols_cmds_CXX" | $SED "$delay_single_quote_subst"`' export_symbols_cmds_RC='`$ECHO "$export_symbols_cmds_RC" | $SED "$delay_single_quote_subst"`' exclude_expsyms_CXX='`$ECHO "$exclude_expsyms_CXX" | $SED "$delay_single_quote_subst"`' exclude_expsyms_RC='`$ECHO "$exclude_expsyms_RC" | $SED "$delay_single_quote_subst"`' include_expsyms_CXX='`$ECHO "$include_expsyms_CXX" | $SED "$delay_single_quote_subst"`' include_expsyms_RC='`$ECHO "$include_expsyms_RC" | $SED "$delay_single_quote_subst"`' prelink_cmds_CXX='`$ECHO "$prelink_cmds_CXX" | $SED "$delay_single_quote_subst"`' prelink_cmds_RC='`$ECHO "$prelink_cmds_RC" | $SED "$delay_single_quote_subst"`' postlink_cmds_CXX='`$ECHO "$postlink_cmds_CXX" | $SED "$delay_single_quote_subst"`' postlink_cmds_RC='`$ECHO "$postlink_cmds_RC" | $SED "$delay_single_quote_subst"`' file_list_spec_CXX='`$ECHO "$file_list_spec_CXX" | $SED "$delay_single_quote_subst"`' file_list_spec_RC='`$ECHO "$file_list_spec_RC" | $SED "$delay_single_quote_subst"`' hardcode_action_CXX='`$ECHO "$hardcode_action_CXX" | $SED "$delay_single_quote_subst"`' hardcode_action_RC='`$ECHO "$hardcode_action_RC" | $SED "$delay_single_quote_subst"`' compiler_lib_search_dirs_CXX='`$ECHO "$compiler_lib_search_dirs_CXX" | $SED "$delay_single_quote_subst"`' compiler_lib_search_dirs_RC='`$ECHO "$compiler_lib_search_dirs_RC" | $SED "$delay_single_quote_subst"`' predep_objects_CXX='`$ECHO "$predep_objects_CXX" | $SED "$delay_single_quote_subst"`' predep_objects_RC='`$ECHO "$predep_objects_RC" | $SED "$delay_single_quote_subst"`' postdep_objects_CXX='`$ECHO "$postdep_objects_CXX" | $SED "$delay_single_quote_subst"`' postdep_objects_RC='`$ECHO "$postdep_objects_RC" | $SED "$delay_single_quote_subst"`' predeps_CXX='`$ECHO "$predeps_CXX" | $SED "$delay_single_quote_subst"`' predeps_RC='`$ECHO "$predeps_RC" | $SED "$delay_single_quote_subst"`' postdeps_CXX='`$ECHO "$postdeps_CXX" | $SED "$delay_single_quote_subst"`' postdeps_RC='`$ECHO "$postdeps_RC" | $SED "$delay_single_quote_subst"`' compiler_lib_search_path_CXX='`$ECHO "$compiler_lib_search_path_CXX" | $SED "$delay_single_quote_subst"`' compiler_lib_search_path_RC='`$ECHO "$compiler_lib_search_path_RC" | $SED "$delay_single_quote_subst"`' LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$1 _LTECHO_EOF' } # Quote evaled strings. for var in SHELL \ ECHO \ PATH_SEPARATOR \ SED \ GREP \ EGREP \ FGREP \ LD \ NM \ LN_S \ lt_SP2NL \ lt_NL2SP \ reload_flag \ FILECMD \ OBJDUMP \ deplibs_check_method \ file_magic_cmd \ file_magic_glob \ want_nocaseglob \ DLLTOOL \ sharedlib_from_linklib_cmd \ AR \ archiver_list_spec \ STRIP \ RANLIB \ CC \ CFLAGS \ compiler \ lt_cv_sys_global_symbol_pipe \ lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_import \ lt_cv_sys_global_symbol_to_c_name_address \ lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ lt_cv_nm_interface \ nm_file_list_spec \ lt_cv_truncate_bin \ lt_prog_compiler_no_builtin_flag \ lt_prog_compiler_pic \ lt_prog_compiler_wl \ lt_prog_compiler_static \ lt_cv_prog_compiler_c_o \ need_locks \ MANIFEST_TOOL \ DSYMUTIL \ NMEDIT \ LIPO \ OTOOL \ OTOOL64 \ shrext_cmds \ export_dynamic_flag_spec \ whole_archive_flag_spec \ compiler_needs_object \ with_gnu_ld \ allow_undefined_flag \ no_undefined_flag \ hardcode_libdir_flag_spec \ hardcode_libdir_separator \ exclude_expsyms \ include_expsyms \ file_list_spec \ variables_saved_for_relink \ libname_spec \ library_names_spec \ soname_spec \ install_override_mode \ finish_eval \ old_striplib \ striplib \ compiler_lib_search_dirs \ predep_objects \ postdep_objects \ predeps \ postdeps \ compiler_lib_search_path \ AS \ LD_CXX \ LD_RC \ reload_flag_CXX \ reload_flag_RC \ compiler_CXX \ compiler_RC \ lt_prog_compiler_no_builtin_flag_CXX \ lt_prog_compiler_no_builtin_flag_RC \ lt_prog_compiler_pic_CXX \ lt_prog_compiler_pic_RC \ lt_prog_compiler_wl_CXX \ lt_prog_compiler_wl_RC \ lt_prog_compiler_static_CXX \ lt_prog_compiler_static_RC \ lt_cv_prog_compiler_c_o_CXX \ lt_cv_prog_compiler_c_o_RC \ export_dynamic_flag_spec_CXX \ export_dynamic_flag_spec_RC \ whole_archive_flag_spec_CXX \ whole_archive_flag_spec_RC \ compiler_needs_object_CXX \ compiler_needs_object_RC \ with_gnu_ld_CXX \ with_gnu_ld_RC \ allow_undefined_flag_CXX \ allow_undefined_flag_RC \ no_undefined_flag_CXX \ no_undefined_flag_RC \ hardcode_libdir_flag_spec_CXX \ hardcode_libdir_flag_spec_RC \ hardcode_libdir_separator_CXX \ hardcode_libdir_separator_RC \ exclude_expsyms_CXX \ exclude_expsyms_RC \ include_expsyms_CXX \ include_expsyms_RC \ file_list_spec_CXX \ file_list_spec_RC \ compiler_lib_search_dirs_CXX \ compiler_lib_search_dirs_RC \ predep_objects_CXX \ predep_objects_RC \ postdep_objects_CXX \ postdep_objects_RC \ predeps_CXX \ predeps_RC \ postdeps_CXX \ postdeps_RC \ compiler_lib_search_path_CXX \ compiler_lib_search_path_RC; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in reload_cmds \ old_postinstall_cmds \ old_postuninstall_cmds \ old_archive_cmds \ extract_expsyms_cmds \ old_archive_from_new_cmds \ old_archive_from_expsyms_cmds \ archive_cmds \ archive_expsym_cmds \ module_cmds \ module_expsym_cmds \ export_symbols_cmds \ prelink_cmds \ postlink_cmds \ postinstall_cmds \ postuninstall_cmds \ finish_cmds \ sys_lib_search_path_spec \ configure_time_dlsearch_path \ configure_time_lt_sys_library_path \ reload_cmds_CXX \ reload_cmds_RC \ old_archive_cmds_CXX \ old_archive_cmds_RC \ old_archive_from_new_cmds_CXX \ old_archive_from_new_cmds_RC \ old_archive_from_expsyms_cmds_CXX \ old_archive_from_expsyms_cmds_RC \ archive_cmds_CXX \ archive_cmds_RC \ archive_expsym_cmds_CXX \ archive_expsym_cmds_RC \ module_cmds_CXX \ module_cmds_RC \ module_expsym_cmds_CXX \ module_expsym_cmds_RC \ export_symbols_cmds_CXX \ export_symbols_cmds_RC \ prelink_cmds_CXX \ prelink_cmds_RC \ postlink_cmds_CXX \ postlink_cmds_RC; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done ac_aux_dir='$ac_aux_dir' # See if we are running on zsh, and set the options that allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi PACKAGE='$PACKAGE' VERSION='$VERSION' RM='$RM' ofile='$ofile' _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; "admin/Makefile") CONFIG_FILES="$CONFIG_FILES admin/Makefile" ;; "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; "m4/Makefile") CONFIG_FILES="$CONFIG_FILES m4/Makefile" ;; "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; "src/libs/Makefile") CONFIG_FILES="$CONFIG_FILES src/libs/Makefile" ;; "src/libs/aqbanking/Makefile") CONFIG_FILES="$CONFIG_FILES src/libs/aqbanking/Makefile" ;; "src/libs/aqbanking/version.h") CONFIG_FILES="$CONFIG_FILES src/libs/aqbanking/version.h" ;; "src/libs/aqbanking/system.h") CONFIG_FILES="$CONFIG_FILES src/libs/aqbanking/system.h" ;; "src/libs/aqbanking/dialogs/Makefile") CONFIG_FILES="$CONFIG_FILES src/libs/aqbanking/dialogs/Makefile" ;; "src/libs/aqbanking/types/Makefile") CONFIG_FILES="$CONFIG_FILES src/libs/aqbanking/types/Makefile" ;; "src/libs/aqbanking/gui/Makefile") CONFIG_FILES="$CONFIG_FILES src/libs/aqbanking/gui/Makefile" ;; "src/libs/aqbanking/typemaker2/Makefile") CONFIG_FILES="$CONFIG_FILES src/libs/aqbanking/typemaker2/Makefile" ;; "src/libs/aqbanking/typemaker2/c/Makefile") CONFIG_FILES="$CONFIG_FILES src/libs/aqbanking/typemaker2/c/Makefile" ;; "src/libs/aqbanking/backendsupport/Makefile") CONFIG_FILES="$CONFIG_FILES src/libs/aqbanking/backendsupport/Makefile" ;; "src/libs/aqbankingpp/Makefile") CONFIG_FILES="$CONFIG_FILES src/libs/aqbankingpp/Makefile" ;; "src/libs/plugins/Makefile") CONFIG_FILES="$CONFIG_FILES src/libs/plugins/Makefile" ;; "src/libs/plugins/bankinfo/Makefile") CONFIG_FILES="$CONFIG_FILES src/libs/plugins/bankinfo/Makefile" ;; "src/libs/plugins/bankinfo/de/Makefile") CONFIG_FILES="$CONFIG_FILES src/libs/plugins/bankinfo/de/Makefile" ;; "src/libs/plugins/bankinfo/de/de.xml") CONFIG_FILES="$CONFIG_FILES src/libs/plugins/bankinfo/de/de.xml" ;; "src/libs/plugins/bankinfo/generic/Makefile") CONFIG_FILES="$CONFIG_FILES src/libs/plugins/bankinfo/generic/Makefile" ;; "src/libs/plugins/imexporters/Makefile") CONFIG_FILES="$CONFIG_FILES src/libs/plugins/imexporters/Makefile" ;; "src/libs/plugins/imexporters/eri2/Makefile") CONFIG_FILES="$CONFIG_FILES src/libs/plugins/imexporters/eri2/Makefile" ;; "src/libs/plugins/imexporters/eri2/eri2.xml") CONFIG_FILES="$CONFIG_FILES src/libs/plugins/imexporters/eri2/eri2.xml" ;; "src/libs/plugins/imexporters/eri2/profiles/Makefile") CONFIG_FILES="$CONFIG_FILES src/libs/plugins/imexporters/eri2/profiles/Makefile" ;; "src/libs/plugins/imexporters/ofx/Makefile") CONFIG_FILES="$CONFIG_FILES src/libs/plugins/imexporters/ofx/Makefile" ;; "src/libs/plugins/imexporters/ofx/ofx.xml") CONFIG_FILES="$CONFIG_FILES src/libs/plugins/imexporters/ofx/ofx.xml" ;; "src/libs/plugins/imexporters/ofx/parser/Makefile") CONFIG_FILES="$CONFIG_FILES src/libs/plugins/imexporters/ofx/parser/Makefile" ;; "src/libs/plugins/imexporters/ofx/profiles/Makefile") CONFIG_FILES="$CONFIG_FILES src/libs/plugins/imexporters/ofx/profiles/Makefile" ;; "src/libs/plugins/imexporters/swift/Makefile") CONFIG_FILES="$CONFIG_FILES src/libs/plugins/imexporters/swift/Makefile" ;; "src/libs/plugins/imexporters/swift/swift.xml") CONFIG_FILES="$CONFIG_FILES src/libs/plugins/imexporters/swift/swift.xml" ;; "src/libs/plugins/imexporters/swift/profiles/Makefile") CONFIG_FILES="$CONFIG_FILES src/libs/plugins/imexporters/swift/profiles/Makefile" ;; "src/libs/plugins/imexporters/csv/Makefile") CONFIG_FILES="$CONFIG_FILES src/libs/plugins/imexporters/csv/Makefile" ;; "src/libs/plugins/imexporters/csv/csv.xml") CONFIG_FILES="$CONFIG_FILES src/libs/plugins/imexporters/csv/csv.xml" ;; "src/libs/plugins/imexporters/csv/profiles/Makefile") CONFIG_FILES="$CONFIG_FILES src/libs/plugins/imexporters/csv/profiles/Makefile" ;; "src/libs/plugins/imexporters/openhbci1/Makefile") CONFIG_FILES="$CONFIG_FILES src/libs/plugins/imexporters/openhbci1/Makefile" ;; "src/libs/plugins/imexporters/openhbci1/openhbci1.xml") CONFIG_FILES="$CONFIG_FILES src/libs/plugins/imexporters/openhbci1/openhbci1.xml" ;; "src/libs/plugins/imexporters/openhbci1/profiles/Makefile") CONFIG_FILES="$CONFIG_FILES src/libs/plugins/imexporters/openhbci1/profiles/Makefile" ;; "src/libs/plugins/imexporters/qif/Makefile") CONFIG_FILES="$CONFIG_FILES src/libs/plugins/imexporters/qif/Makefile" ;; "src/libs/plugins/imexporters/qif/qif.xml") CONFIG_FILES="$CONFIG_FILES src/libs/plugins/imexporters/qif/qif.xml" ;; "src/libs/plugins/imexporters/qif/profiles/Makefile") CONFIG_FILES="$CONFIG_FILES src/libs/plugins/imexporters/qif/profiles/Makefile" ;; "src/libs/plugins/imexporters/yellownet/Makefile") CONFIG_FILES="$CONFIG_FILES src/libs/plugins/imexporters/yellownet/Makefile" ;; "src/libs/plugins/imexporters/yellownet/yellownet.xml") CONFIG_FILES="$CONFIG_FILES src/libs/plugins/imexporters/yellownet/yellownet.xml" ;; "src/libs/plugins/imexporters/yellownet/profiles/Makefile") CONFIG_FILES="$CONFIG_FILES src/libs/plugins/imexporters/yellownet/profiles/Makefile" ;; "src/libs/plugins/imexporters/xmldb/Makefile") CONFIG_FILES="$CONFIG_FILES src/libs/plugins/imexporters/xmldb/Makefile" ;; "src/libs/plugins/imexporters/xmldb/xmldb.xml") CONFIG_FILES="$CONFIG_FILES src/libs/plugins/imexporters/xmldb/xmldb.xml" ;; "src/libs/plugins/imexporters/xmldb/profiles/Makefile") CONFIG_FILES="$CONFIG_FILES src/libs/plugins/imexporters/xmldb/profiles/Makefile" ;; "src/libs/plugins/imexporters/sepa/Makefile") CONFIG_FILES="$CONFIG_FILES src/libs/plugins/imexporters/sepa/Makefile" ;; "src/libs/plugins/imexporters/sepa/sepa.xml") CONFIG_FILES="$CONFIG_FILES src/libs/plugins/imexporters/sepa/sepa.xml" ;; "src/libs/plugins/imexporters/sepa/profiles/Makefile") CONFIG_FILES="$CONFIG_FILES src/libs/plugins/imexporters/sepa/profiles/Makefile" ;; "src/libs/plugins/imexporters/ctxfile/Makefile") CONFIG_FILES="$CONFIG_FILES src/libs/plugins/imexporters/ctxfile/Makefile" ;; "src/libs/plugins/imexporters/ctxfile/ctxfile.xml") CONFIG_FILES="$CONFIG_FILES src/libs/plugins/imexporters/ctxfile/ctxfile.xml" ;; "src/libs/plugins/imexporters/ctxfile/profiles/Makefile") CONFIG_FILES="$CONFIG_FILES src/libs/plugins/imexporters/ctxfile/profiles/Makefile" ;; "src/libs/plugins/imexporters/q43/Makefile") CONFIG_FILES="$CONFIG_FILES src/libs/plugins/imexporters/q43/Makefile" ;; "src/libs/plugins/imexporters/q43/q43.xml") CONFIG_FILES="$CONFIG_FILES src/libs/plugins/imexporters/q43/q43.xml" ;; "src/libs/plugins/imexporters/q43/profiles/Makefile") CONFIG_FILES="$CONFIG_FILES src/libs/plugins/imexporters/q43/profiles/Makefile" ;; "src/libs/plugins/imexporters/camt/Makefile") CONFIG_FILES="$CONFIG_FILES src/libs/plugins/imexporters/camt/Makefile" ;; "src/libs/plugins/imexporters/camt/camt.xml") CONFIG_FILES="$CONFIG_FILES src/libs/plugins/imexporters/camt/camt.xml" ;; "src/libs/plugins/imexporters/camt/profiles/Makefile") CONFIG_FILES="$CONFIG_FILES src/libs/plugins/imexporters/camt/profiles/Makefile" ;; "src/libs/plugins/imexporters/xml/Makefile") CONFIG_FILES="$CONFIG_FILES src/libs/plugins/imexporters/xml/Makefile" ;; "src/libs/plugins/imexporters/xml/xml.xml") CONFIG_FILES="$CONFIG_FILES src/libs/plugins/imexporters/xml/xml.xml" ;; "src/libs/plugins/imexporters/xml/data/Makefile") CONFIG_FILES="$CONFIG_FILES src/libs/plugins/imexporters/xml/data/Makefile" ;; "src/libs/plugins/imexporters/xml/profiles/Makefile") CONFIG_FILES="$CONFIG_FILES src/libs/plugins/imexporters/xml/profiles/Makefile" ;; "src/libs/plugins/parsers/Makefile") CONFIG_FILES="$CONFIG_FILES src/libs/plugins/parsers/Makefile" ;; "src/libs/plugins/parsers/swift/Makefile") CONFIG_FILES="$CONFIG_FILES src/libs/plugins/parsers/swift/Makefile" ;; "src/libs/plugins/parsers/swift/swift.xml") CONFIG_FILES="$CONFIG_FILES src/libs/plugins/parsers/swift/swift.xml" ;; "src/libs/plugins/backends/Makefile") CONFIG_FILES="$CONFIG_FILES src/libs/plugins/backends/Makefile" ;; "src/libs/plugins/backends/aqhbci/Makefile") CONFIG_FILES="$CONFIG_FILES src/libs/plugins/backends/aqhbci/Makefile" ;; "src/libs/plugins/backends/aqhbci/aqhbci.xml") CONFIG_FILES="$CONFIG_FILES src/libs/plugins/backends/aqhbci/aqhbci.xml" ;; "src/libs/plugins/backends/aqhbci/dialogs/Makefile") CONFIG_FILES="$CONFIG_FILES src/libs/plugins/backends/aqhbci/dialogs/Makefile" ;; "src/libs/plugins/backends/aqhbci/header.xml") CONFIG_FILES="$CONFIG_FILES src/libs/plugins/backends/aqhbci/header.xml" ;; "src/libs/plugins/backends/aqhbci/banking/Makefile") CONFIG_FILES="$CONFIG_FILES src/libs/plugins/backends/aqhbci/banking/Makefile" ;; "src/libs/plugins/backends/aqhbci/msglayer/Makefile") CONFIG_FILES="$CONFIG_FILES src/libs/plugins/backends/aqhbci/msglayer/Makefile" ;; "src/libs/plugins/backends/aqhbci/tan/Makefile") CONFIG_FILES="$CONFIG_FILES src/libs/plugins/backends/aqhbci/tan/Makefile" ;; "src/libs/plugins/backends/aqhbci/joblayer/Makefile") CONFIG_FILES="$CONFIG_FILES src/libs/plugins/backends/aqhbci/joblayer/Makefile" ;; "src/libs/plugins/backends/aqhbci/applayer/Makefile") CONFIG_FILES="$CONFIG_FILES src/libs/plugins/backends/aqhbci/applayer/Makefile" ;; "src/libs/plugins/backends/aqhbci/ajobs/Makefile") CONFIG_FILES="$CONFIG_FILES src/libs/plugins/backends/aqhbci/ajobs/Makefile" ;; "src/libs/plugins/backends/aqhbci/admjobs/Makefile") CONFIG_FILES="$CONFIG_FILES src/libs/plugins/backends/aqhbci/admjobs/Makefile" ;; "src/libs/plugins/backends/aqhbci/applayer/xml/Makefile") CONFIG_FILES="$CONFIG_FILES src/libs/plugins/backends/aqhbci/applayer/xml/Makefile" ;; "src/libs/plugins/backends/aqhbci/control/Makefile") CONFIG_FILES="$CONFIG_FILES src/libs/plugins/backends/aqhbci/control/Makefile" ;; "src/libs/plugins/backends/aqhbci/version.h") CONFIG_FILES="$CONFIG_FILES src/libs/plugins/backends/aqhbci/version.h" ;; "src/libs/plugins/backends/aqofxconnect/Makefile") CONFIG_FILES="$CONFIG_FILES src/libs/plugins/backends/aqofxconnect/Makefile" ;; "src/libs/plugins/backends/aqofxconnect/aqofxconnect.xml") CONFIG_FILES="$CONFIG_FILES src/libs/plugins/backends/aqofxconnect/aqofxconnect.xml" ;; "src/libs/plugins/backends/aqofxconnect/libofxhome/Makefile") CONFIG_FILES="$CONFIG_FILES src/libs/plugins/backends/aqofxconnect/libofxhome/Makefile" ;; "src/libs/plugins/backends/aqofxconnect/v1/Makefile") CONFIG_FILES="$CONFIG_FILES src/libs/plugins/backends/aqofxconnect/v1/Makefile" ;; "src/libs/plugins/backends/aqofxconnect/v2/Makefile") CONFIG_FILES="$CONFIG_FILES src/libs/plugins/backends/aqofxconnect/v2/Makefile" ;; "src/libs/plugins/backends/aqofxconnect/control/Makefile") CONFIG_FILES="$CONFIG_FILES src/libs/plugins/backends/aqofxconnect/control/Makefile" ;; "src/libs/plugins/backends/aqofxconnect/common/Makefile") CONFIG_FILES="$CONFIG_FILES src/libs/plugins/backends/aqofxconnect/common/Makefile" ;; "src/libs/plugins/backends/aqofxconnect/dialogs/Makefile") CONFIG_FILES="$CONFIG_FILES src/libs/plugins/backends/aqofxconnect/dialogs/Makefile" ;; "src/libs/plugins/backends/aqpaypal/Makefile") CONFIG_FILES="$CONFIG_FILES src/libs/plugins/backends/aqpaypal/Makefile" ;; "src/libs/plugins/backends/aqpaypal/aqpaypal.xml") CONFIG_FILES="$CONFIG_FILES src/libs/plugins/backends/aqpaypal/aqpaypal.xml" ;; "src/libs/plugins/backends/aqpaypal/control/Makefile") CONFIG_FILES="$CONFIG_FILES src/libs/plugins/backends/aqpaypal/control/Makefile" ;; "src/libs/plugins/backends/aqnone/Makefile") CONFIG_FILES="$CONFIG_FILES src/libs/plugins/backends/aqnone/Makefile" ;; "src/libs/plugins/backends/aqnone/aqnone.xml") CONFIG_FILES="$CONFIG_FILES src/libs/plugins/backends/aqnone/aqnone.xml" ;; "src/libs/plugins/backends/aqgivve/Makefile") CONFIG_FILES="$CONFIG_FILES src/libs/plugins/backends/aqgivve/Makefile" ;; "src/libs/plugins/backends/aqgivve/aqgivve.xml") CONFIG_FILES="$CONFIG_FILES src/libs/plugins/backends/aqgivve/aqgivve.xml" ;; "src/libs/plugins/backends/aqebics/Makefile") CONFIG_FILES="$CONFIG_FILES src/libs/plugins/backends/aqebics/Makefile" ;; "src/libs/plugins/backends/aqebics/aqebics.xml") CONFIG_FILES="$CONFIG_FILES src/libs/plugins/backends/aqebics/aqebics.xml" ;; "src/libs/plugins/backends/aqebics/client/Makefile") CONFIG_FILES="$CONFIG_FILES src/libs/plugins/backends/aqebics/client/Makefile" ;; "src/libs/plugins/backends/aqebics/dialogs/Makefile") CONFIG_FILES="$CONFIG_FILES src/libs/plugins/backends/aqebics/dialogs/Makefile" ;; "src/libs/plugins/backends/aqebics/msg/Makefile") CONFIG_FILES="$CONFIG_FILES src/libs/plugins/backends/aqebics/msg/Makefile" ;; "src/libs/plugins/backends/aqebics/control/Makefile") CONFIG_FILES="$CONFIG_FILES src/libs/plugins/backends/aqebics/control/Makefile" ;; "src/libs/plugins/backends/aqebics/requests/Makefile") CONFIG_FILES="$CONFIG_FILES src/libs/plugins/backends/aqebics/requests/Makefile" ;; "src/libs/plugins/backends/aqfints/Makefile") CONFIG_FILES="$CONFIG_FILES src/libs/plugins/backends/aqfints/Makefile" ;; "src/libs/plugins/backends/aqfints/aqfints.xml") CONFIG_FILES="$CONFIG_FILES src/libs/plugins/backends/aqfints/aqfints.xml" ;; "src/libs/plugins/backends/aqfints/banking/Makefile") CONFIG_FILES="$CONFIG_FILES src/libs/plugins/backends/aqfints/banking/Makefile" ;; "src/libs/plugins/backends/aqfints/banking/control/Makefile") CONFIG_FILES="$CONFIG_FILES src/libs/plugins/backends/aqfints/banking/control/Makefile" ;; "src/libs/plugins/backends/aqfints/libaqfints/Makefile") CONFIG_FILES="$CONFIG_FILES src/libs/plugins/backends/aqfints/libaqfints/Makefile" ;; "src/libs/plugins/backends/aqfints/libaqfints/msg/Makefile") CONFIG_FILES="$CONFIG_FILES src/libs/plugins/backends/aqfints/libaqfints/msg/Makefile" ;; "src/libs/plugins/backends/aqfints/libaqfints/parser/Makefile") CONFIG_FILES="$CONFIG_FILES src/libs/plugins/backends/aqfints/libaqfints/parser/Makefile" ;; "src/libs/plugins/backends/aqfints/libaqfints/service/Makefile") CONFIG_FILES="$CONFIG_FILES src/libs/plugins/backends/aqfints/libaqfints/service/Makefile" ;; "src/libs/plugins/backends/aqfints/libaqfints/service/xml/Makefile") CONFIG_FILES="$CONFIG_FILES src/libs/plugins/backends/aqfints/libaqfints/service/xml/Makefile" ;; "src/libs/plugins/backends/aqfints/libaqfints/service/bpd/Makefile") CONFIG_FILES="$CONFIG_FILES src/libs/plugins/backends/aqfints/libaqfints/service/bpd/Makefile" ;; "src/libs/plugins/backends/aqfints/libaqfints/service/upd/Makefile") CONFIG_FILES="$CONFIG_FILES src/libs/plugins/backends/aqfints/libaqfints/service/upd/Makefile" ;; "src/libs/plugins/backends/aqfints/libaqfints/service/jobs/Makefile") CONFIG_FILES="$CONFIG_FILES src/libs/plugins/backends/aqfints/libaqfints/service/jobs/Makefile" ;; "src/libs/plugins/backends/aqfints/libaqfints/transport/Makefile") CONFIG_FILES="$CONFIG_FILES src/libs/plugins/backends/aqfints/libaqfints/transport/Makefile" ;; "src/libs/plugins/backends/aqfints/libaqfints/session/Makefile") CONFIG_FILES="$CONFIG_FILES src/libs/plugins/backends/aqfints/libaqfints/session/Makefile" ;; "src/libs/plugins/backends/aqfints/libaqfints/session/pintan/Makefile") CONFIG_FILES="$CONFIG_FILES src/libs/plugins/backends/aqfints/libaqfints/session/pintan/Makefile" ;; "src/libs/plugins/backends/aqfints/libaqfints/session/hbci/Makefile") CONFIG_FILES="$CONFIG_FILES src/libs/plugins/backends/aqfints/libaqfints/session/hbci/Makefile" ;; "src/test/Makefile") CONFIG_FILES="$CONFIG_FILES src/test/Makefile" ;; "src/tools/Makefile") CONFIG_FILES="$CONFIG_FILES src/tools/Makefile" ;; "src/tools/aqbanking-cli/Makefile") CONFIG_FILES="$CONFIG_FILES src/tools/aqbanking-cli/Makefile" ;; "src/tools/mkdeinfo/Makefile") CONFIG_FILES="$CONFIG_FILES src/tools/mkdeinfo/Makefile" ;; "tutorials/Makefile") CONFIG_FILES="$CONFIG_FILES tutorials/Makefile" ;; "po/Makefile") CONFIG_FILES="$CONFIG_FILES po/Makefile" ;; "Doxyfile") CONFIG_FILES="$CONFIG_FILES Doxyfile" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "aqbanking-config.in") CONFIG_FILES="$CONFIG_FILES aqbanking-config.in" ;; "aqbanking.pc") CONFIG_FILES="$CONFIG_FILES aqbanking.pc" ;; "aqbanking.spec") CONFIG_FILES="$CONFIG_FILES aqbanking.spec" ;; "aqbanking.iss") CONFIG_FILES="$CONFIG_FILES aqbanking.iss" ;; "aqbanking-config.cmake") CONFIG_FILES="$CONFIG_FILES aqbanking-config.cmake" ;; "aqbanking-config-version.cmake") CONFIG_FILES="$CONFIG_FILES aqbanking-config-version.cmake" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test ${CONFIG_FILES+y} || CONFIG_FILES=$config_files test ${CONFIG_HEADERS+y} || CONFIG_HEADERS=$config_headers test ${CONFIG_COMMANDS+y} || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`printf "%s\n" "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` printf "%s\n" "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 printf "%s\n" "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`printf "%s\n" "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 printf "%s\n" "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 printf "%s\n" "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { printf "%s\n" "/* $configure_input */" >&1 \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 printf "%s\n" "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else printf "%s\n" "/* $configure_input */" >&1 \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi # Compute "$ac_file"'s index in $config_headers. _am_arg="$ac_file" _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || $as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$_am_arg" : 'X\(//\)[^/]' \| \ X"$_am_arg" : 'X\(//\)$' \| \ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$_am_arg" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'`/stamp-h$_am_stamp_count ;; :C) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 printf "%s\n" "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. # TODO: see whether this extra hack can be removed once we start # requiring Autoconf 2.70 or later. case $CONFIG_FILES in #( *\'*) : eval set x "$CONFIG_FILES" ;; #( *) : set x $CONFIG_FILES ;; #( *) : ;; esac shift # Used to flag and report bootstrapping failures. am_rc=0 for am_mf do # Strip MF so we end up with the name of the file. am_mf=`printf "%s\n" "$am_mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile which includes # dependency-tracking related rules and includes. # Grep'ing the whole file directly is not great: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \ || continue am_dirpart=`$as_dirname -- "$am_mf" || $as_expr X"$am_mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$am_mf" : 'X\(//\)[^/]' \| \ X"$am_mf" : 'X\(//\)$' \| \ X"$am_mf" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$am_mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` am_filepart=`$as_basename -- "$am_mf" || $as_expr X/"$am_mf" : '.*/\([^/][^/]*\)/*$' \| \ X"$am_mf" : 'X\(//\)$' \| \ X"$am_mf" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X/"$am_mf" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` { echo "$as_me:$LINENO: cd "$am_dirpart" \ && sed -e '/# am--include-marker/d' "$am_filepart" \ | $MAKE -f - am--depfiles" >&5 (cd "$am_dirpart" \ && sed -e '/# am--include-marker/d' "$am_filepart" \ | $MAKE -f - am--depfiles) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } || am_rc=$? done if test $am_rc -ne 0; then { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "Something went wrong bootstrapping makefile fragments for automatic dependency tracking. If GNU make was not used, consider re-running the configure script with MAKE=\"gmake\" (or whatever is necessary). You can also try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking). See \`config.log' for more details" "$LINENO" 5; } fi { am_dirpart=; unset am_dirpart;} { am_filepart=; unset am_filepart;} { am_mf=; unset am_mf;} { am_rc=; unset am_rc;} rm -f conftest-deps.mk } ;; "libtool":C) # See if we are running on zsh, and set the options that allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi cfgfile=${ofile}T trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # Generated automatically by $as_me ($PACKAGE) $VERSION # NOTE: Changes made to this file will be lost: look at ltmain.sh. # Provide generalized library-building support services. # Written by Gordon Matzigkeit, 1996 # Copyright (C) 2014 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # GNU Libtool is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of of the License, or # (at your option) any later version. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program or library that is built # using GNU Libtool, you may include this file under the same # distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # The names of the tagged configurations supported by this script. available_tags='CXX RC ' # Configured defaults for sys_lib_dlsearch_path munging. : \${LT_SYS_LIBRARY_PATH="$configure_time_lt_sys_library_path"} # ### BEGIN LIBTOOL CONFIG # Whether or not to build static libraries. build_old_libs=$enable_static # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Which release of libtool.m4 was used? macro_version=$macro_version macro_revision=$macro_revision # What type of objects to build. pic_mode=$pic_mode # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # Shared archive member basename,for filename based shared library versioning on AIX. shared_archive_member_spec=$shared_archive_member_spec # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # An echo program that protects backslashes. ECHO=$lt_ECHO # The PATH separator for the build system. PATH_SEPARATOR=$lt_PATH_SEPARATOR # The host system. host_alias=$host_alias host=$host host_os=$host_os # The build system. build_alias=$build_alias build=$build build_os=$build_os # A sed program that does not truncate output. SED=$lt_SED # Sed that helps us avoid accidentally triggering echo(1) options like -n. Xsed="\$SED -e 1s/^X//" # A grep program that handles long lines. GREP=$lt_GREP # An ERE matcher. EGREP=$lt_EGREP # A literal string matcher. FGREP=$lt_FGREP # A BSD- or MS-compatible name lister. NM=$lt_NM # Whether we need soft or hard links. LN_S=$lt_LN_S # What is the maximum length of a command? max_cmd_len=$max_cmd_len # Object file suffix (normally "o"). objext=$ac_objext # Executable file suffix (normally ""). exeext=$exeext # whether the shell understands "unset". lt_unset=$lt_unset # turn spaces into newlines. SP2NL=$lt_lt_SP2NL # turn newlines into spaces. NL2SP=$lt_lt_NL2SP # convert \$build file names to \$host format. to_host_file_cmd=$lt_cv_to_host_file_cmd # convert \$build files to toolchain format. to_tool_file_cmd=$lt_cv_to_tool_file_cmd # A file(cmd) program that detects file types. FILECMD=$lt_FILECMD # An object symbol dumper. OBJDUMP=$lt_OBJDUMP # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method = "file_magic". file_magic_cmd=$lt_file_magic_cmd # How to find potential files when deplibs_check_method = "file_magic". file_magic_glob=$lt_file_magic_glob # Find potential files using nocaseglob when deplibs_check_method = "file_magic". want_nocaseglob=$lt_want_nocaseglob # DLL creation program. DLLTOOL=$lt_DLLTOOL # Command to associate shared and link libraries. sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd # The archiver. AR=$lt_AR # Flags to create an archive (by configure). lt_ar_flags=$lt_ar_flags # Flags to create an archive. AR_FLAGS=\${ARFLAGS-"\$lt_ar_flags"} # How to feed a file listing to the archiver. archiver_list_spec=$lt_archiver_list_spec # A symbol stripping program. STRIP=$lt_STRIP # Commands used to install an old-style archive. RANLIB=$lt_RANLIB old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Whether to use a lock for old archive extraction. lock_old_archive_extraction=$lock_old_archive_extraction # A C compiler. LTCC=$lt_CC # LTCC compiler flags. LTCFLAGS=$lt_CFLAGS # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration. global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm into a list of symbols to manually relocate. global_symbol_to_import=$lt_lt_cv_sys_global_symbol_to_import # Transform the output of nm in a C name address pair. global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # Transform the output of nm in a C name address pair when lib prefix is needed. global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix # The name lister interface. nm_interface=$lt_lt_cv_nm_interface # Specify filename containing input files for \$NM. nm_file_list_spec=$lt_nm_file_list_spec # The root where to search for dependent libraries,and where our libraries should be installed. lt_sysroot=$lt_sysroot # Command to truncate a binary pipe. lt_truncate_bin=$lt_lt_cv_truncate_bin # The name of the directory that contains temporary libtool files. objdir=$objdir # Used to examine libraries when file_magic_cmd begins with "file". MAGIC_CMD=$MAGIC_CMD # Must we lock files when doing compilation? need_locks=$lt_need_locks # Manifest tool. MANIFEST_TOOL=$lt_MANIFEST_TOOL # Tool to manipulate archived DWARF debug symbol files on Mac OS X. DSYMUTIL=$lt_DSYMUTIL # Tool to change global to local symbols on Mac OS X. NMEDIT=$lt_NMEDIT # Tool to manipulate fat objects and archives on Mac OS X. LIPO=$lt_LIPO # ldd/readelf like tool for Mach-O binaries on Mac OS X. OTOOL=$lt_OTOOL # ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. OTOOL64=$lt_OTOOL64 # Old archive suffix (normally "a"). libext=$libext # Shared library suffix (normally ".so"). shrext_cmds=$lt_shrext_cmds # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Variables whose values should be saved in libtool wrapper scripts and # restored at link time. variables_saved_for_relink=$lt_variables_saved_for_relink # Do we need the "lib" prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Library versioning type. version_type=$version_type # Shared library runtime path variable. runpath_var=$runpath_var # Shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Permission mode override for installation of shared libraries. install_override_mode=$lt_install_override_mode # Command to use after installation of a shared archive. postinstall_cmds=$lt_postinstall_cmds # Command to use after uninstallation of a shared archive. postuninstall_cmds=$lt_postuninstall_cmds # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # As "finish_cmds", except a single script fragment to be evaled but # not shown. finish_eval=$lt_finish_eval # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Compile-time system search path for libraries. sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Detected run-time system search path for libraries. sys_lib_dlsearch_path_spec=$lt_configure_time_dlsearch_path # Explicit LT_SYS_LIBRARY_PATH set during ./configure time. configure_time_lt_sys_library_path=$lt_configure_time_lt_sys_library_path # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # Assembler program. AS=$lt_AS # The linker used to build libraries. LD=$lt_LD # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # Commands used to build an old-style archive. old_archive_cmds=$lt_old_archive_cmds # A language specific compiler. CC=$lt_compiler # Is the compiler the GNU compiler? with_gcc=$GCC # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc # Whether or not to disallow shared libs when runtime libs are static. allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec # Whether the compiler copes with passing no objects directly. compiler_needs_object=$lt_compiler_needs_object # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds # Commands used to build a shared archive. archive_cmds=$lt_archive_cmds archive_expsym_cmds=$lt_archive_expsym_cmds # Commands used to build a loadable module if different from building # a shared archive. module_cmds=$lt_module_cmds module_expsym_cmds=$lt_module_expsym_cmds # Whether we are building with GNU ld or not. with_gnu_ld=$lt_with_gnu_ld # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag # Flag that enforces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator # Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes # DIR into the resulting binary. hardcode_direct=$hardcode_direct # Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes # DIR into the resulting binary and the resulting library dependency is # "absolute",i.e impossible to change by setting \$shlibpath_var if the # library is relocated. hardcode_direct_absolute=$hardcode_direct_absolute # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=$hardcode_minus_L # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var # Set to "yes" if building a shared library automatically hardcodes DIR # into the library and all subsequent libraries and executables linked # against it. hardcode_automatic=$hardcode_automatic # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=$inherit_rpath # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs # Set to "yes" if exported symbols are required. always_export_symbols=$always_export_symbols # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms # Symbols that must always be exported. include_expsyms=$lt_include_expsyms # Commands necessary for linking programs (against libraries) with templates. prelink_cmds=$lt_prelink_cmds # Commands necessary for finishing linking programs. postlink_cmds=$lt_postlink_cmds # Specify filename containing input files. file_list_spec=$lt_file_list_spec # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action # The directories searched by this compiler when creating a shared library. compiler_lib_search_dirs=$lt_compiler_lib_search_dirs # Dependencies to place before and after the objects being linked to # create a shared library. predep_objects=$lt_predep_objects postdep_objects=$lt_postdep_objects predeps=$lt_predeps postdeps=$lt_postdeps # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path # ### END LIBTOOL CONFIG _LT_EOF cat <<'_LT_EOF' >> "$cfgfile" # ### BEGIN FUNCTIONS SHARED WITH CONFIGURE # func_munge_path_list VARIABLE PATH # ----------------------------------- # VARIABLE is name of variable containing _space_ separated list of # directories to be munged by the contents of PATH, which is string # having a format: # "DIR[:DIR]:" # string "DIR[ DIR]" will be prepended to VARIABLE # ":DIR[:DIR]" # string "DIR[ DIR]" will be appended to VARIABLE # "DIRP[:DIRP]::[DIRA:]DIRA" # string "DIRP[ DIRP]" will be prepended to VARIABLE and string # "DIRA[ DIRA]" will be appended to VARIABLE # "DIR[:DIR]" # VARIABLE will be replaced by "DIR[ DIR]" func_munge_path_list () { case x$2 in x) ;; *:) eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\" ;; x:*) eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\" ;; *::*) eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\" ;; *) eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\" ;; esac } # Calculate cc_basename. Skip known compiler wrappers and cross-prefix. func_cc_basename () { for cc_temp in $*""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` } # ### END FUNCTIONS SHARED WITH CONFIGURE _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test set != "${COLLECT_NAMES+set}"; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac ltmain=$ac_aux_dir/ltmain.sh # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? $SED '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" cat <<_LT_EOF >> "$ofile" # ### BEGIN LIBTOOL TAG CONFIG: CXX # The linker used to build libraries. LD=$lt_LD_CXX # How to create reloadable object files. reload_flag=$lt_reload_flag_CXX reload_cmds=$lt_reload_cmds_CXX # Commands used to build an old-style archive. old_archive_cmds=$lt_old_archive_cmds_CXX # A language specific compiler. CC=$lt_compiler_CXX # Is the compiler the GNU compiler? with_gcc=$GCC_CXX # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic_CXX # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl_CXX # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static_CXX # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc_CXX # Whether or not to disallow shared libs when runtime libs are static. allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX # Whether the compiler copes with passing no objects directly. compiler_needs_object=$lt_compiler_needs_object_CXX # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX # Commands used to build a shared archive. archive_cmds=$lt_archive_cmds_CXX archive_expsym_cmds=$lt_archive_expsym_cmds_CXX # Commands used to build a loadable module if different from building # a shared archive. module_cmds=$lt_module_cmds_CXX module_expsym_cmds=$lt_module_expsym_cmds_CXX # Whether we are building with GNU ld or not. with_gnu_ld=$lt_with_gnu_ld_CXX # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag_CXX # Flag that enforces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag_CXX # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX # Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes # DIR into the resulting binary. hardcode_direct=$hardcode_direct_CXX # Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes # DIR into the resulting binary and the resulting library dependency is # "absolute",i.e impossible to change by setting \$shlibpath_var if the # library is relocated. hardcode_direct_absolute=$hardcode_direct_absolute_CXX # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=$hardcode_minus_L_CXX # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX # Set to "yes" if building a shared library automatically hardcodes DIR # into the library and all subsequent libraries and executables linked # against it. hardcode_automatic=$hardcode_automatic_CXX # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=$inherit_rpath_CXX # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs_CXX # Set to "yes" if exported symbols are required. always_export_symbols=$always_export_symbols_CXX # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds_CXX # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms_CXX # Symbols that must always be exported. include_expsyms=$lt_include_expsyms_CXX # Commands necessary for linking programs (against libraries) with templates. prelink_cmds=$lt_prelink_cmds_CXX # Commands necessary for finishing linking programs. postlink_cmds=$lt_postlink_cmds_CXX # Specify filename containing input files. file_list_spec=$lt_file_list_spec_CXX # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action_CXX # The directories searched by this compiler when creating a shared library. compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_CXX # Dependencies to place before and after the objects being linked to # create a shared library. predep_objects=$lt_predep_objects_CXX postdep_objects=$lt_postdep_objects_CXX predeps=$lt_predeps_CXX postdeps=$lt_postdeps_CXX # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path_CXX # ### END LIBTOOL TAG CONFIG: CXX _LT_EOF cat <<_LT_EOF >> "$ofile" # ### BEGIN LIBTOOL TAG CONFIG: RC # The linker used to build libraries. LD=$lt_LD_RC # How to create reloadable object files. reload_flag=$lt_reload_flag_RC reload_cmds=$lt_reload_cmds_RC # Commands used to build an old-style archive. old_archive_cmds=$lt_old_archive_cmds_RC # A language specific compiler. CC=$lt_compiler_RC # Is the compiler the GNU compiler? with_gcc=$GCC_RC # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_RC # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic_RC # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl_RC # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static_RC # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o_RC # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc_RC # Whether or not to disallow shared libs when runtime libs are static. allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_RC # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_RC # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec_RC # Whether the compiler copes with passing no objects directly. compiler_needs_object=$lt_compiler_needs_object_RC # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_RC # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_RC # Commands used to build a shared archive. archive_cmds=$lt_archive_cmds_RC archive_expsym_cmds=$lt_archive_expsym_cmds_RC # Commands used to build a loadable module if different from building # a shared archive. module_cmds=$lt_module_cmds_RC module_expsym_cmds=$lt_module_expsym_cmds_RC # Whether we are building with GNU ld or not. with_gnu_ld=$lt_with_gnu_ld_RC # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag_RC # Flag that enforces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag_RC # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_RC # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator_RC # Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes # DIR into the resulting binary. hardcode_direct=$hardcode_direct_RC # Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes # DIR into the resulting binary and the resulting library dependency is # "absolute",i.e impossible to change by setting \$shlibpath_var if the # library is relocated. hardcode_direct_absolute=$hardcode_direct_absolute_RC # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=$hardcode_minus_L_RC # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var_RC # Set to "yes" if building a shared library automatically hardcodes DIR # into the library and all subsequent libraries and executables linked # against it. hardcode_automatic=$hardcode_automatic_RC # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=$inherit_rpath_RC # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs_RC # Set to "yes" if exported symbols are required. always_export_symbols=$always_export_symbols_RC # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds_RC # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms_RC # Symbols that must always be exported. include_expsyms=$lt_include_expsyms_RC # Commands necessary for linking programs (against libraries) with templates. prelink_cmds=$lt_prelink_cmds_RC # Commands necessary for finishing linking programs. postlink_cmds=$lt_postlink_cmds_RC # Specify filename containing input files. file_list_spec=$lt_file_list_spec_RC # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action_RC # The directories searched by this compiler when creating a shared library. compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_RC # Dependencies to place before and after the objects being linked to # create a shared library. predep_objects=$lt_predep_objects_RC postdep_objects=$lt_postdep_objects_RC predeps=$lt_predeps_RC postdeps=$lt_postdeps_RC # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path_RC # ### END LIBTOOL TAG CONFIG: RC _LT_EOF ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi ###------------------------------------------------------------------------- # # Summary # echo echo echo "Summary" echo "----------------------------------------------------" echo "AqBanking version : $AQBANKING_VERSION_FULL_STRING" echo "Local Installation Mode : $enable_local_install" echo "Prefix : $prefix" echo "Exec-Prefix : $exec_prefix" echo "Libdir : $libdir" echo "Cfg Search Folder : $aqbanking_cfg_searchdir" echo "Data Search Folder : $aqbanking_data_searchdir" echo "Locale Search Folder : $aqbanking_locale_searchdir" echo "Plugin Search Folder : $aqbanking_plugin_searchdir" echo "Symbol Visibility : $visibility_supported" echo "Build AqBanking-CLI : $enable_cli" echo "CLI Version String : $AQBANKING_CLI_VERSION_STRING" echo echo echo "Plugins" echo "----------------------------------------------------" echo " Backends : $aqbanking_backends" echo " Im-/Exporters : $aqbanking_imexporters" echo " Parsers : $aqbanking_parsers" echo " Bank Infos : $aqbanking_bankinfos" echo echo "----------------------------------------------------" echo "You can now run \"make\" (or gmake on FreeBSD) to compile." aqbanking-6.6.1/Makefile.am0000664000175000017500000002106214300721363012436 00000000000000SUBDIRS=admin doc m4 src po @TUTORIALS@ DIST_SUBDIRS=admin doc m4 src po tutorials EXTRA_DIST=AUTHORS COPYING ChangeLog INSTALL NEWS README \ aqbanking.spec.in aqbanking.spec \ aqbanking.iss.in aqbanking.iss \ Doxyfile.in \ i18nsources \ Makefile.cvs idatadir=${datadir}/doc/aqbanking idata_DATA=AUTHORS COPYING ChangeLog README bin_SCRIPTS=aqbanking-config aclocaldir = $(datadir)/aclocal dist_aclocal_DATA = aqbanking.m4 ACLOCAL_AMFLAGS = $(ADD_ACLOCAL_FLAGS) -I m4 CLEANFILES = aqbanking-config aqbanking-config.in aqbanking-config: aqbanking-config.in echo "#! /bin/sh" >aqbanking-config && \ echo 'dir="@prefix@"' >>aqbanking-config && \ cat aqbanking-config.in >>aqbanking-config && \ chmod a+x aqbanking-config pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = aqbanking.pc cmakeconfigdir = $(libdir)/cmake/aqbanking-$(AQBANKING_VERSION_MAJOR).$(AQBANKING_VERSION_MINOR) cmakeconfig_DATA = aqbanking-config.cmake aqbanking-config-version.cmake listdoc.h: $(gwenhywfar_bindir)/mklistdoc -I $(gwenhywfar_headers) -v `find $(aqbanking_symlinkdir) -name '*.h' | LC_ALL=C sort ` >listdoc.h srcdoc: Doxyfile listdoc.h if test -d apidoc; then rm -Rf apidoc; fi mkdir -p apidoc/html/aqbanking-@AQBANKING_VERSION_RELEASE_STRING@ doxygen install-srcdoc: srcdoc test -d "$(DESTDIR)@docpath@/$(PACKAGE)" || \ mkdir -p "$(DESTDIR)@docpath@/$(PACKAGE)" for f in apidoc/html/aqbanking-@AQBANKING_VERSION_RELEASE_STRING@/*; do \ cp -dR $$f "$(DESTDIR)@docpath@/$(PACKAGE)/"; \ done cp "apidoc/$(PACKAGE).tag" "$(DESTDIR)@docpath@/" rpm: $(PACKAGE).spec dist rpmbuild="rpm" && \ if [ `rpm --version | awk '{ print $$3 }'` > /dev/null ]; then rpmbuild="rpmbuild"; fi && \ $$rpmbuild -ta $(PACKAGE)-$(VERSION).tar.gz # Rule for using the Inno Setup compiler. The path to iscc.exe is set # manually here for now. ISCC = "C:\Programme\Inno Setup 5\iscc.exe" wintmpdir = win32-tmp setup: aqbanking.iss mkdir -p $(wintmpdir) for A in `find src/plugins -name *.la`; do \ grep -v relink_command $${A} > $${A}.tmp && \ mv $${A}.tmp $${A}; \ done $(MAKE) DESTDIR="`pwd`/$(wintmpdir)" \ aqbanking_pkgdatadir="/share/$(PACKAGE)" \ gwenhywfar_plugins="/gwen" \ WIN_PATH_WINDOWS_MINGW="/windows" \ install \ && for A in `find $(wintmpdir) -name '*.exe'`; do \ strip $${A}; \ done \ && $(ISCC) aqbanking.iss \ && rm -rf $(wintmpdir) if IF_MAKE_I18N_FILES # We directly read that file list. For old make programs, you would # set this to an empty variable, because they are only needed by the # developers and release technicians. I18NFILES=$(shell cat $(srcdir)/i18nsources) DLGFILES=$(shell cat $(srcdir)/dlgsources) PDFILES=$(shell cat $(srcdir)/pdsources) # Current build rule: sources: rm -f $(srcdir)/i18nsources $(srcdir)/dlgsources $(srcdir)/pdsources $(MAKE) -C $(top_builddir)/src sources $(srcdir)/i18nsources $(srcdir)/dlgsources $(srcdir)/pdsources: $(MAKE) sources # Could also be solved this way: Read the I18NFILES variable from file #include $(srcdir)/i18nsources # (Needs the following build rule:) #sources: # rm -f $(srcdir)/i18nsources # $(MAKE) -C $(top_srcdir)/src sources # mv $(srcdir)/i18nsources $(srcdir)/i18nsources.tmp # echo "I18NFILES = \\" > $(srcdir)/i18nsources # $(SED) 's!\(^.*$$\)!$$(top_srcdir)/\1 \\!' \ # $(srcdir)/i18nsources.tmp >> $(srcdir)/i18nsources # echo '$$(top_srcdir)/config.h' >> $(srcdir)/i18nsources # rm -f $(srcdir)/i18nsources.tmp # $(MAKE) Makefile # The list of available languages (makes file name transformations much easier) ALL_LINGUAS = $(basename $(notdir $(shell ls $(srcdir)/po/*.po))) # For old make programs, the locales would directly be written here: #ALL_LINGUAS = de # List of po files. Only necessary in the dependency of the catalogs # rule. For old make programs, you would simpy set this to an empty # variable. I18NLINGUAS = $(foreach lang,$(ALL_LINGUAS),$(srcdir)/po/$(lang).po) # List of mo files. Only necessary for cleanup. For old make programs, # you would simply set this to an empty variable. I18NCATALOGS = $(foreach lang,$(ALL_LINGUAS),$(top_builddir)/po/$(lang).mo) I18NCATALOGS += $(foreach lang,$(ALL_LINGUAS),$(top_builddir)/po/$(lang).qm) po/$(PACKAGE).pot: i18nsources dlgsources pdsources $(I18NFILES) rm -f po/tmp* if test -n "$(I18NFILES)"; then \ $(XGETTEXT) -C -c -ki18n -ktr2i18n -kI18N -kI18S\ -kI18N_NOOP -ktranslate -kaliasLocale \ -ktr -ktrUtf8 \ '--msgid-bugs-address=aqbanking-user@lists.aqbanking.de' \ -o po/tmppot \ $(I18NFILES) ; \ fi for i in $(DLGFILES); do \ po4a-gettextize -f xml -m $$i -p po/tmppot1 -o attributes=text && \ msghack -o po/tmppot2 --append po/tmppot po/tmppot1 && \ mv po/tmppot2 po/tmppot; \ done for i in $(PDFILES); do \ po4a-gettextize -f xml -m $$i -p po/tmppot1 -o wrap \ -o translated=" " \ -o untranslated=" " \ && \ msghack -o po/tmppot2 --append po/tmppot po/tmppot1 && \ mv po/tmppot2 po/tmppot; \ done mv po/tmppot po/$(PACKAGE).pot rm -f po/tmppot1 # This rule is not called automatically. It is necessary only for # the translators, so translators only call this manually. merge: po/$(PACKAGE).pot @catalogs=$(I18NLINGUAS); \ for cat in $$catalogs; do \ echo msgmerge -o $$cat.new $$cat ./po/$(PACKAGE).pot ; \ msgmerge -o $$cat.new $$cat ./po/$(PACKAGE).pot ; \ if test -s $$cat.new; then \ grep -v "\"POT-Creation" $$cat.new | grep -v '^#' > $$cat.new.2 ; \ grep -v "\"POT-Creation" $$cat | grep -v '^#' >> $$cat.new.1; \ if diff $$cat.new.1 $$cat.new.2; then \ echo " $$cat unchanged; leaving existing po file untouched."; \ rm $$cat.new; \ else \ mv $$cat.new $$cat ; \ fi; \ rm -f $$cat.new.1 $$cat.new.2 ;\ fi ;\ done catalogs: $(I18NLINGUAS) @for i in $(ALL_LINGUAS); do \ filelingua=$(srcdir)/po/$$i.po; \ filecat=$(top_builddir)/po/$$i.mo; \ fileqm=$(top_builddir)/po/$$i.qm; \ echo "Creating translation catalogs for language \"$$i\""; \ $(MSGFMT) -c -o $${filecat} $${filelingua} || touch $${filelingua}; \ if test $(MSGFMT_SUPPORTS_QT) = "yes"; then \ $(MSGFMT) -o $${fileqm} --qt $${filelingua} || touch $${filelingua}; \ else \ echo "$(MSGFMT) does not have the option --qt; ignoring qt translations"; \ fi; \ done ilocaledir = $(datadir)/locale install-mo-catalogs: catalogs @for i in $(ALL_LINGUAS); do \ filecat=$(top_builddir)/po/$$i.mo; \ fileqm=$(top_builddir)/po/$$i.qm; \ echo "Installing translation catalog for language \"$$i\""; \ $(mkinstalldirs) "$(DESTDIR)$(ilocaledir)/$$i/LC_MESSAGES"; \ $(INSTALL_DATA) $${filecat} $(DESTDIR)$(ilocaledir)/$$i/LC_MESSAGES/$(PACKAGE).mo; \ done uninstall-mo-catalogs: @$(NORMAL_UNINSTALL) @for i in $(ALL_LINGUAS); do \ echo " rm -f '$(DESTDIR)$(ilocaledir)/$$i/LC_MESSAGES/$(PACKAGE).mo'"; \ rm -f "$(DESTDIR)$(ilocaledir)/$$i/LC_MESSAGES/$(PACKAGE).mo"; \ done install-data-local: install-mo-catalogs uninstall-local: uninstall-mo-catalogs CLEANFILES += $(I18NCATALOGS) endif # if USE_I18N # Rule for only building the source rpm srpm: $(PACKAGE).spec dist rpmbuild="rpm" && \ if [ `rpm --version | awk '{ print $$3 }'` > /dev/null ]; then rpmbuild="rpmbuild"; fi && \ $$rpmbuild --nodeps -ts $(PACKAGE)-$(VERSION).tar.gz BUILT_SOURCES = $(iheader_HEADERS) CLEANFILES += $(BUILT_SOURCES) # Call this to have Qt's uic files and glade files cleaned up from # bad elements code-cleanup: -admin/fixuifiles -admin/glade-fixup #cppcheck: # $(MAKE) -C src cppcheck cppcheck: for f in `find . -name \*.c -o -name \*.cpp`; do cppcheck --force $$f; done clang-check: scan-build $(MAKE) format: find . -name '*.[c,h,cpp]' -exec $(ASTYLE) \ --style=stroustrup \ -s2 \ --min-conditional-indent=0 \ --indent-labels \ --max-continuation-indent=100 \ --pad-comma \ --pad-header \ --unpad-paren \ --align-pointer=name \ --break-closing-braces \ --break-one-line-headers \ --attach-return-type \ --convert-tabs \ --max-code-length=120 \ --break-after-logical \ --preserve-date \ --suffix=none \{\} \; ChangeLog: if test -d .git; then \ git log --pretty="format:------------------------------------------------------------------%n%ai %an%n%s%n%b" -n 100 >ChangeLog ;\ else \ touch ChangeLog; \ fi dist-hook: rm -f ChangeLog 2>/dev/null $(MAKE) ChangeLog types: for d in $(SUBDIRS); do \ $(MAKE) -C $$d typefiles; \ done typefiles: for d in $(SUBDIRS); do \ $(MAKE) -C $$d typefiles; \ done typedefs: for d in $(SUBDIRS); do \ $(MAKE) -C $$d typedefs; \ done aqbanking-6.6.1/aqbanking.spec.in0000664000175000017500000002065014546575647013650 00000000000000# norootforbuild # neededforbuild gwenhywfar gwenhywfar-devel python python-ctypes pyyxml libchipcard2-devel libchipcard2 pkgconfig gettext-devel libacl-devel libacl libattr-devel libattr %define name @PACKAGE@ %define version @VERSION@ %define dist @aq_distrib_name@ %define disttag @aq_distrib_tag@ %define distver @aq_distrib_version@ %define aq_plugindir %{_libdir}/aqbanking/plugins/@AQBANKING_SO_EFFECTIVE@ %define fronts_libdir %{aq_plugindir}/frontends %define imex_plugindir %{aq_plugindir}/imexporters %define imex_datadir %{_datadir}/%{name}/imexporters %define fronts_datadir %{_datadir}/%{name}/frontends %define qb_cfgmoddir %{fronts_libdir}/qbanking/cfgmodules ### Optionally disable chipcard and ofx sub-packages - resulting ### rpms should not be released! %define have_libchipcard 0 %define have_libofx 1 %define with_yellownet 0 # Note: There is not yet a special symbol for the rpm release # version. We set it to one here. %define release 1.%{disttag}%{distver} ### Choose backends to be built %if %have_libofx %if %have_libchipcard %if %with_yellownet %define backendlist "aqhbci aqofxconnect aqyellownet" %else %define backendlist "aqhbci aqofxconnect" %endif %else %if %with_yellownet %define backendlist "aqhbci aqofxconnect aqyellownet" %else %define backendlist "aqhbci aqofxconnect" %endif %endif %else %if %have_libchipcard %if %with_yellownet %define backendlist "aqhbci aqyellownet" %else %define backendlist "aqhbci" %endif %else %if %with_yellownet %define backendlist "aqhbci aqyellownet" %else %define backendlist "aqhbci" %endif %endif %endif # versions of required helper-libraries %define _gwenhywfar_version 2.9.15 %define _libchipcard3_version 3.9.13 ### The standard information fields. Name: %{name} Summary: A library for online banking functions and financial data import/export Version: %{version} Release: %{release} Source: http://download.sourceforge.net/aqbanking/%{name}-%{version}.tar.gz Group: System Environment/Libraries License: GPL Packager: Martin Preuss URL: http://sourceforge.net/projects/aqbanking BuildRoot: %{_tmppath}/%{name}-%{version}-root Requires: gwenhywfar >= %{_gwenhywfar_version} BuildRequires: gwenhywfar-devel >= %{_gwenhywfar_version} #BuildRequires: python-ctypes BuildRequires: python >= 2.3 BuildRequires: pyxml BuildRequires: pkgconfig >= 0.9 #BuildRequires: gettext-devel #BuildRequires: libacl-devel #BuildRequires: libattr-devel Prefix: %{_prefix} Obsoletes: aqdtaus Obsoletes: aqhbci Obsoletes: kbanking Obsoletes: aqofxconnect %description The intention of AqBanking is to provide a middle layer between the program and the various Online Banking libraries (e.g. AqHBCI). The first backend which is already supported is AqHBCI, a library which implements a client for the German HBCI (Home Banking Computer Interface) protocol. Additionally, Aqbanking provides various plugins to simplify import and export of financial data. Currently there are import plugins for the following formats: DTAUS (German financial format), SWIFT (MT940 and MT942). Further information in German can be found on http://linuxwiki.de/AqBanking %package devel Summary: Aqbanking development kit Group: Development/Libraries/C and C++ Requires: %{name} = %{version} Obsoletes: aqhbci-devel Obsoletes: aqofxconnect-devel Obsoletes: aqdtaus-devel %description devel This package contains aqbanking-config and header files for writing and compiling programs using Aqbanking. %package -n python-%{name} Summary: Aqbanking python-bindings Group: Development/Libraries/Python %py_requires Requires: %{name} = %{version} #Requires: python-ctypes Requires: python >= 2.3 Requires: pyxml %description -n python-%{name} This package contains the python-bindings for aqbanking. %package qt3 Summary: Aqbanking tools for Qt3 Group: Productivity/Office/Finance Obsoletes: aqhbci-qt-tools Obsoletes: aqdtaus-qt-tools Requires: %{name} = %{version} Requires: gwenhywfar >= %{_gwenhywfar_version} %description qt3 This package contains the QT3 setup wizard for AqBanking. ### Sub-packages for OFX %if %have_libofx %package ofx Summary: Aqbanking tools for Qt3 Group: Development/Libraries/C and C++ Requires: %{name} = %{version} Obsoletes: %{name}-ofx-qt3 %description ofx Aqbanking tools for Qt3. Necessary for OFX direct connect access. Author: Martin Preuss %package ofx-qt3 Summary: Aqbanking tools for Qt3 Group: Development/Libraries/C and C++ Requires: %{name} = %{version} Requires: gwenhywfar >= %{_gwenhywfar_version} %description ofx-qt3 Aqbanking tools for Qt3. Necessary for OFX direct connect access. Author: Martin Preuss %endif ### Sub-packages for yellownet %if %with_yellownet %package yellownet Summary: YellowNet backend Group: Development/Libraries/C and C++ Requires: %{name} = %{version} %description yellownet This backend provides support for Suisse YellowNet (Post-Finance) Author: Martin Preuss %package yellownet-qt3 Summary: Configuration plugins for Aqbanking with Qt3 Group: Development/Libraries/C and C++ Requires: %{name} = %{version} %description yellownet-qt3 This backend provides support for Suisse YellowNet (Post-Finance) Author: Martin Preuss %endif ### The build commands %prep %setup -q %build %{configure} \ --enable-release \ --with-docpath=%{_docdir} \ --enable-python \ --with-backends=%{backendlist} make %install [ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT make install-strip \ DESTDIR=%{buildroot} \ idatadir=%{_docdir}/%{name} %clean [ -d %{buildroot} -a "%{buildroot}" != "" ] && rm -rf %{buildroot} %post -p /sbin/ldconfig %postun -p /sbin/ldconfig %post -n %{name}-qt3 -p /sbin/ldconfig %postun -n %{name}-qt3 -p /sbin/ldconfig ### The file list for all packages, starting with the base package %files %defattr(-,root,root) %doc AUTHORS COPYING ChangeLog README # The directories used by the base package %dir %{_libdir}/%{name} %dir %{_libdir}/%{name}/plugins %dir %{aq_plugindir} %dir %{aq_plugindir}/debugger %dir %{aq_plugindir}/providers %dir %{imex_plugindir} %dir %{fronts_libdir} %dir %{fronts_libdir}/qbanking %dir %{qb_cfgmoddir} %dir %{_datadir}/%{name} %dir %{fronts_datadir} %dir %{imex_datadir} ### The original aqbanking files %{_libdir}/lib%{name}*.so.* %{_libdir}/gwenhywfar %{_datadir}/%{name}/bankinfo %{_datadir}/locale/*/LC_MESSAGES/%{name}.mo %{aq_plugindir}/bankinfo %{imex_plugindir}/csv.* %{imex_plugindir}/dtaus.* %{imex_plugindir}/eri2.* %{imex_plugindir}/openhbci1.* %{imex_plugindir}/swift.* %{imex_plugindir}/xmldb.* %{imex_plugindir}/yellownet.* %{imex_datadir}/csv %{imex_datadir}/dtaus %{imex_datadir}/eri %{imex_datadir}/eri2 %{imex_datadir}/openhbci1 %{imex_datadir}/swift %{imex_datadir}/xmldb %{imex_datadir}/yellownet ### The aqhbci files %{_bindir}/aqhbci-tool@QBANKING_SO_EFFECTIVE@ %{_libdir}/libaqhbci.so.* %{aq_plugindir}/providers/aqhbci.* #%{_datadir}/doc/aqhbci ### The aqnone files %{_libdir}/libaqnone.so.* %{aq_plugindir}/providers/aqnone.* %{_libdir}/libaqgivve.so.* %{aq_plugindir}/providers/aqgivve.* %files devel %defattr(-,root,root) ### The aqbanking files %{_bindir}/%{name}-config %{_includedir}/%{name} %{_libdir}/*.la %{_libdir}/libaqbanking.so %{_libdir}/libaqhbci.so %{_libdir}/libaqnone.so %{_libdir}/libaqgivve.so %{_libdir}/pkgconfig/%{name}.pc %{_datadir}/aclocal ### The aqhbci files %{_bindir}/hbcixml3 %{_includedir}/aqhbci %{_datadir}/%{name}/backends/aqhbci ### The qbanking files %{_includedir}/qbanking %files -n python-aqbanking %defattr(644,root,root,755) %{py_sitedir}/* %files qt3 %defattr(-,root,root) %{_bindir}/qb-help@QBANKING_SO_EFFECTIVE@ %{_libdir}/libqbanking.so.* %{_libdir}/libqbanking.so %{aq_plugindir}/debugger/aqhbci %{aq_plugindir}/wizards %{qb_cfgmoddir}/aqhbci* %{_datadir}/%{name}/i18n %{fronts_datadir}/qbanking %if %have_libofx %files ofx %defattr(-,root,root) %{_libdir}/libaqofxconnect.so.* %{_libdir}/libaqofxconnect.so %{_includedir}/aqofxconnect %{aq_plugindir}/providers/aqofxconnect.* %{imex_plugindir}/ofx.* %{imex_datadir}/ofx %files ofx-qt3 %defattr(-,root,root) %{qb_cfgmoddir}/aqofxconnect* %endif %if %with_yellownet %files yellownet %{_libdir}/libaqyellownet.so %{_includedir}/aqyellownet %{aq_plugindir}/providers/aqyellownet.* %files yellownet-qt3 %{qb_cfgmoddir}/aqyellownet* %endif aqbanking-6.6.1/aclocal.m40000644000175000017500000015407115037736023012256 00000000000000# generated automatically by aclocal 1.16.5 -*- Autoconf -*- # Copyright (C) 1996-2021 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.71],, [m4_warning([this file was generated for autoconf 2.71. You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) # pkg.m4 - Macros to locate and use pkg-config. -*- Autoconf -*- # serial 12 (pkg-config-0.29.2) dnl Copyright Âİ 2004 Scott James Remnant . dnl Copyright Âİ 2012-2015 Dan Nicholson dnl dnl This program is free software; you can redistribute it and/or modify dnl it under the terms of the GNU General Public License as published by dnl the Free Software Foundation; either version 2 of the License, or dnl (at your option) any later version. dnl dnl This program is distributed in the hope that it will be useful, but dnl WITHOUT ANY WARRANTY; without even the implied warranty of dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU dnl General Public License for more details. dnl dnl You should have received a copy of the GNU General Public License dnl along with this program; if not, write to the Free Software dnl Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA dnl 02111-1307, USA. dnl dnl As a special exception to the GNU General Public License, if you dnl distribute this file as part of a program that contains a dnl configuration script generated by Autoconf, you may include it under dnl the same distribution terms that you use for the rest of that dnl program. dnl PKG_PREREQ(MIN-VERSION) dnl ----------------------- dnl Since: 0.29 dnl dnl Verify that the version of the pkg-config macros are at least dnl MIN-VERSION. Unlike PKG_PROG_PKG_CONFIG, which checks the user's dnl installed version of pkg-config, this checks the developer's version dnl of pkg.m4 when generating configure. dnl dnl To ensure that this macro is defined, also add: dnl m4_ifndef([PKG_PREREQ], dnl [m4_fatal([must install pkg-config 0.29 or later before running autoconf/autogen])]) dnl dnl See the "Since" comment for each macro you use to see what version dnl of the macros you require. m4_defun([PKG_PREREQ], [m4_define([PKG_MACROS_VERSION], [0.29.2]) m4_if(m4_version_compare(PKG_MACROS_VERSION, [$1]), -1, [m4_fatal([pkg.m4 version $1 or higher is required but ]PKG_MACROS_VERSION[ found])]) ])dnl PKG_PREREQ dnl PKG_PROG_PKG_CONFIG([MIN-VERSION]) dnl ---------------------------------- dnl Since: 0.16 dnl dnl Search for the pkg-config tool and set the PKG_CONFIG variable to dnl first found in the path. Checks that the version of pkg-config found dnl is at least MIN-VERSION. If MIN-VERSION is not specified, 0.9.0 is dnl used since that's the first version where most current features of dnl pkg-config existed. AC_DEFUN([PKG_PROG_PKG_CONFIG], [m4_pattern_forbid([^_?PKG_[A-Z_]+$]) m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$]) m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$]) AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility]) AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path]) AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path]) if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) fi if test -n "$PKG_CONFIG"; then _pkg_min_version=m4_default([$1], [0.9.0]) AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) PKG_CONFIG="" fi fi[]dnl ])dnl PKG_PROG_PKG_CONFIG dnl PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) dnl ------------------------------------------------------------------- dnl Since: 0.18 dnl dnl Check to see whether a particular set of modules exists. Similar to dnl PKG_CHECK_MODULES(), but does not set variables or print errors. dnl dnl Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG]) dnl only at the first occurrence in configure.ac, so if the first place dnl it's called might be skipped (such as if it is within an "if", you dnl have to call PKG_CHECK_EXISTS manually AC_DEFUN([PKG_CHECK_EXISTS], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl if test -n "$PKG_CONFIG" && \ AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then m4_default([$2], [:]) m4_ifvaln([$3], [else $3])dnl fi]) dnl _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) dnl --------------------------------------------- dnl Internal wrapper calling pkg-config via PKG_CONFIG and setting dnl pkg_failed based on the result. m4_define([_PKG_CONFIG], [if test -n "$$1"; then pkg_cv_[]$1="$$1" elif test -n "$PKG_CONFIG"; then PKG_CHECK_EXISTS([$3], [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) else pkg_failed=untried fi[]dnl ])dnl _PKG_CONFIG dnl _PKG_SHORT_ERRORS_SUPPORTED dnl --------------------------- dnl Internal check to see if pkg-config supports short errors. AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], [AC_REQUIRE([PKG_PROG_PKG_CONFIG]) if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi[]dnl ])dnl _PKG_SHORT_ERRORS_SUPPORTED dnl PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], dnl [ACTION-IF-NOT-FOUND]) dnl -------------------------------------------------------------- dnl Since: 0.4.0 dnl dnl Note that if there is a possibility the first call to dnl PKG_CHECK_MODULES might not happen, you should be sure to include an dnl explicit call to PKG_PROG_PKG_CONFIG in your configure.ac AC_DEFUN([PKG_CHECK_MODULES], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl pkg_failed=no AC_MSG_CHECKING([for $2]) _PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) _PKG_CONFIG([$1][_LIBS], [libs], [$2]) m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS and $1[]_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details.]) if test $pkg_failed = yes; then AC_MSG_RESULT([no]) _PKG_SHORT_ERRORS_SUPPORTED if test $_pkg_short_errors_supported = yes; then $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1` else $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD m4_default([$4], [AC_MSG_ERROR( [Package requirements ($2) were not met: $$1_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. _PKG_TEXT])[]dnl ]) elif test $pkg_failed = untried; then AC_MSG_RESULT([no]) m4_default([$4], [AC_MSG_FAILURE( [The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. _PKG_TEXT To get pkg-config, see .])[]dnl ]) else $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS $1[]_LIBS=$pkg_cv_[]$1[]_LIBS AC_MSG_RESULT([yes]) $3 fi[]dnl ])dnl PKG_CHECK_MODULES dnl PKG_CHECK_MODULES_STATIC(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], dnl [ACTION-IF-NOT-FOUND]) dnl --------------------------------------------------------------------- dnl Since: 0.29 dnl dnl Checks for existence of MODULES and gathers its build flags with dnl static libraries enabled. Sets VARIABLE-PREFIX_CFLAGS from --cflags dnl and VARIABLE-PREFIX_LIBS from --libs. dnl dnl Note that if there is a possibility the first call to dnl PKG_CHECK_MODULES_STATIC might not happen, you should be sure to dnl include an explicit call to PKG_PROG_PKG_CONFIG in your dnl configure.ac. AC_DEFUN([PKG_CHECK_MODULES_STATIC], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl _save_PKG_CONFIG=$PKG_CONFIG PKG_CONFIG="$PKG_CONFIG --static" PKG_CHECK_MODULES($@) PKG_CONFIG=$_save_PKG_CONFIG[]dnl ])dnl PKG_CHECK_MODULES_STATIC dnl PKG_INSTALLDIR([DIRECTORY]) dnl ------------------------- dnl Since: 0.27 dnl dnl Substitutes the variable pkgconfigdir as the location where a module dnl should install pkg-config .pc files. By default the directory is dnl $libdir/pkgconfig, but the default can be changed by passing dnl DIRECTORY. The user can override through the --with-pkgconfigdir dnl parameter. AC_DEFUN([PKG_INSTALLDIR], [m4_pushdef([pkg_default], [m4_default([$1], ['${libdir}/pkgconfig'])]) m4_pushdef([pkg_description], [pkg-config installation directory @<:@]pkg_default[@:>@]) AC_ARG_WITH([pkgconfigdir], [AS_HELP_STRING([--with-pkgconfigdir], pkg_description)],, [with_pkgconfigdir=]pkg_default) AC_SUBST([pkgconfigdir], [$with_pkgconfigdir]) m4_popdef([pkg_default]) m4_popdef([pkg_description]) ])dnl PKG_INSTALLDIR dnl PKG_NOARCH_INSTALLDIR([DIRECTORY]) dnl -------------------------------- dnl Since: 0.27 dnl dnl Substitutes the variable noarch_pkgconfigdir as the location where a dnl module should install arch-independent pkg-config .pc files. By dnl default the directory is $datadir/pkgconfig, but the default can be dnl changed by passing DIRECTORY. The user can override through the dnl --with-noarch-pkgconfigdir parameter. AC_DEFUN([PKG_NOARCH_INSTALLDIR], [m4_pushdef([pkg_default], [m4_default([$1], ['${datadir}/pkgconfig'])]) m4_pushdef([pkg_description], [pkg-config arch-independent installation directory @<:@]pkg_default[@:>@]) AC_ARG_WITH([noarch-pkgconfigdir], [AS_HELP_STRING([--with-noarch-pkgconfigdir], pkg_description)],, [with_noarch_pkgconfigdir=]pkg_default) AC_SUBST([noarch_pkgconfigdir], [$with_noarch_pkgconfigdir]) m4_popdef([pkg_default]) m4_popdef([pkg_description]) ])dnl PKG_NOARCH_INSTALLDIR dnl PKG_CHECK_VAR(VARIABLE, MODULE, CONFIG-VARIABLE, dnl [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) dnl ------------------------------------------- dnl Since: 0.28 dnl dnl Retrieves the value of the pkg-config variable for the given module. AC_DEFUN([PKG_CHECK_VAR], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1], [value of $3 for $2, overriding pkg-config])dnl _PKG_CONFIG([$1], [variable="][$3]["], [$2]) AS_VAR_COPY([$1], [pkg_cv_][$1]) AS_VAR_IF([$1], [""], [$5], [$4])dnl ])dnl PKG_CHECK_VAR dnl PKG_WITH_MODULES(VARIABLE-PREFIX, MODULES, dnl [ACTION-IF-FOUND],[ACTION-IF-NOT-FOUND], dnl [DESCRIPTION], [DEFAULT]) dnl ------------------------------------------ dnl dnl Prepare a "--with-" configure option using the lowercase dnl [VARIABLE-PREFIX] name, merging the behaviour of AC_ARG_WITH and dnl PKG_CHECK_MODULES in a single macro. AC_DEFUN([PKG_WITH_MODULES], [ m4_pushdef([with_arg], m4_tolower([$1])) m4_pushdef([description], [m4_default([$5], [build with ]with_arg[ support])]) m4_pushdef([def_arg], [m4_default([$6], [auto])]) m4_pushdef([def_action_if_found], [AS_TR_SH([with_]with_arg)=yes]) m4_pushdef([def_action_if_not_found], [AS_TR_SH([with_]with_arg)=no]) m4_case(def_arg, [yes],[m4_pushdef([with_without], [--without-]with_arg)], [m4_pushdef([with_without],[--with-]with_arg)]) AC_ARG_WITH(with_arg, AS_HELP_STRING(with_without, description[ @<:@default=]def_arg[@:>@]),, [AS_TR_SH([with_]with_arg)=def_arg]) AS_CASE([$AS_TR_SH([with_]with_arg)], [yes],[PKG_CHECK_MODULES([$1],[$2],$3,$4)], [auto],[PKG_CHECK_MODULES([$1],[$2], [m4_n([def_action_if_found]) $3], [m4_n([def_action_if_not_found]) $4])]) m4_popdef([with_arg]) m4_popdef([description]) m4_popdef([def_arg]) ])dnl PKG_WITH_MODULES dnl PKG_HAVE_WITH_MODULES(VARIABLE-PREFIX, MODULES, dnl [DESCRIPTION], [DEFAULT]) dnl ----------------------------------------------- dnl dnl Convenience macro to trigger AM_CONDITIONAL after PKG_WITH_MODULES dnl check._[VARIABLE-PREFIX] is exported as make variable. AC_DEFUN([PKG_HAVE_WITH_MODULES], [ PKG_WITH_MODULES([$1],[$2],,,[$3],[$4]) AM_CONDITIONAL([HAVE_][$1], [test "$AS_TR_SH([with_]m4_tolower([$1]))" = "yes"]) ])dnl PKG_HAVE_WITH_MODULES dnl PKG_HAVE_DEFINE_WITH_MODULES(VARIABLE-PREFIX, MODULES, dnl [DESCRIPTION], [DEFAULT]) dnl ------------------------------------------------------ dnl dnl Convenience macro to run AM_CONDITIONAL and AC_DEFINE after dnl PKG_WITH_MODULES check. HAVE_[VARIABLE-PREFIX] is exported as make dnl and preprocessor variable. AC_DEFUN([PKG_HAVE_DEFINE_WITH_MODULES], [ PKG_HAVE_WITH_MODULES([$1],[$2],[$3],[$4]) AS_IF([test "$AS_TR_SH([with_]m4_tolower([$1]))" = "yes"], [AC_DEFINE([HAVE_][$1], 1, [Enable ]m4_tolower([$1])[ support])]) ])dnl PKG_HAVE_DEFINE_WITH_MODULES # Copyright (C) 2002-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.16' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. m4_if([$1], [1.16.5], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) # _AM_AUTOCONF_VERSION(VERSION) # ----------------------------- # aclocal traces this macro to find the Autoconf version. # This is a private macro too. Using m4_define simplifies # the logic in aclocal, which can simply ignore this definition. m4_define([_AM_AUTOCONF_VERSION], []) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.16.5])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- # Copyright (C) 2001-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets # $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to # '$srcdir', '$srcdir/..', or '$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and # therefore $ac_aux_dir as well) can be either absolute or relative, # depending on how configure is run. This is pretty annoying, since # it makes $ac_aux_dir quite unusable in subdirectories: in the top # source directory, any form will work fine, but in subdirectories a # relative path needs to be adjusted first. # # $ac_aux_dir/missing # fails when called from a subdirectory if $ac_aux_dir is relative # $top_srcdir/$ac_aux_dir/missing # fails if $ac_aux_dir is absolute, # fails when called from a subdirectory in a VPATH build with # a relative $ac_aux_dir # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually # harmless because $srcdir is '.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, # iff we strip the leading $srcdir from $ac_aux_dir. That would be: # am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` # and then we would define $MISSING as # MISSING="\${SHELL} $am_aux_dir/missing" # This will work as long as MISSING is not called from configure, because # unfortunately $(top_srcdir) has no meaning in configure. # However there are other variables, like CC, which are often used in # configure, and could therefore not use this "fixed" $ac_aux_dir. # # Another solution, used here, is to always expand $ac_aux_dir to an # absolute PATH. The drawback is that using absolute paths prevent a # configured tree to be moved without reconfiguration. AC_DEFUN([AM_AUX_DIR_EXPAND], [AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl # Expand $ac_aux_dir to an absolute path. am_aux_dir=`cd "$ac_aux_dir" && pwd` ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ([2.52])dnl m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE])dnl AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl _AM_SUBST_NOTMAKE([$1_FALSE])dnl m4_define([_AM_COND_VALUE_$1], [$2])dnl if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([[conditional "$1" was never defined. Usually this means the macro was only invoked conditionally.]]) fi])]) # Copyright (C) 1999-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing # CC etc. in the Makefile, will ask for an AC_PROG_CC use... # _AM_DEPENDENCIES(NAME) # ---------------------- # See how the compiler implements dependency checking. # NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC". # We try a few techniques and use that to set a single cache variable. # # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was # modified to invoke _AM_DEPENDENCIES(CC); we would have a circular # dependency, and given that the user is not expected to run this macro, # just rely on AC_PROG_CC. AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl m4_if([$1], [CC], [depcc="$CC" am_compiler_list=], [$1], [CXX], [depcc="$CXX" am_compiler_list=], [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'], [$1], [UPC], [depcc="$UPC" am_compiler_list=], [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_$1_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi am__universal=false m4_case([$1], [CC], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac], [CXX], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac]) for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_$1_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) AM_CONDITIONAL([am__fastdep$1], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) ]) # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. # This macro is AC_REQUIREd in _AM_DEPENDENCIES. AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE([dependency-tracking], [dnl AS_HELP_STRING( [--enable-dependency-tracking], [do not reject slow dependency extractors]) AS_HELP_STRING( [--disable-dependency-tracking], [speeds up one-time build])]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH])dnl _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl AC_SUBST([am__nodep])dnl _AM_SUBST_NOTMAKE([am__nodep])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright (C) 1999-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. # TODO: see whether this extra hack can be removed once we start # requiring Autoconf 2.70 or later. AS_CASE([$CONFIG_FILES], [*\'*], [eval set x "$CONFIG_FILES"], [*], [set x $CONFIG_FILES]) shift # Used to flag and report bootstrapping failures. am_rc=0 for am_mf do # Strip MF so we end up with the name of the file. am_mf=`AS_ECHO(["$am_mf"]) | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile which includes # dependency-tracking related rules and includes. # Grep'ing the whole file directly is not great: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \ || continue am_dirpart=`AS_DIRNAME(["$am_mf"])` am_filepart=`AS_BASENAME(["$am_mf"])` AM_RUN_LOG([cd "$am_dirpart" \ && sed -e '/# am--include-marker/d' "$am_filepart" \ | $MAKE -f - am--depfiles]) || am_rc=$? done if test $am_rc -ne 0; then AC_MSG_FAILURE([Something went wrong bootstrapping makefile fragments for automatic dependency tracking. If GNU make was not used, consider re-running the configure script with MAKE="gmake" (or whatever is necessary). You can also try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking).]) fi AS_UNSET([am_dirpart]) AS_UNSET([am_filepart]) AS_UNSET([am_mf]) AS_UNSET([am_rc]) rm -f conftest-deps.mk } ])# _AM_OUTPUT_DEPENDENCY_COMMANDS # AM_OUTPUT_DEPENDENCY_COMMANDS # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking is enabled. # This creates each '.Po' and '.Plo' makefile fragment that we'll need in # order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}"])]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. dnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O. m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC]) [_AM_PROG_CC_C_O ]) # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE([OPTIONS]) # ----------------------------------------------- # The call with PACKAGE and VERSION arguments is the old style # call (pre autoconf-2.50), which is being phased out. PACKAGE # and VERSION should now be passed to AC_INIT and removed from # the call to AM_INIT_AUTOMAKE. # We support both call styles for the transition. After # the next Automake release, Autoconf can make the AC_INIT # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.65])dnl m4_ifdef([_$0_ALREADY_INIT], [m4_fatal([$0 expanded multiple times ]m4_defn([_$0_ALREADY_INIT]))], [m4_define([_$0_ALREADY_INIT], m4_expansion_stack)])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl # test to see if srcdir already configured if test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [AC_DIAGNOSE([obsolete], [$0: two- and three-arguments forms are deprecated.]) m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. m4_if( m4_ifset([AC_PACKAGE_NAME], [ok]):m4_ifset([AC_PACKAGE_VERSION], [ok]), [ok:ok],, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package]) AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) AM_MISSING_PROG([AUTOCONF], [autoconf]) AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) AM_MISSING_PROG([AUTOHEADER], [autoheader]) AM_MISSING_PROG([MAKEINFO], [makeinfo]) AC_REQUIRE([AM_PROG_INSTALL_SH])dnl AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # AC_SUBST([mkdir_p], ['$(MKDIR_P)']) # We need awk for the "check" target (and possibly the TAP driver). The # system "awk" is bad on some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES([CC])], [m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES([CXX])], [m4_define([AC_PROG_CXX], m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES([OBJC])], [m4_define([AC_PROG_OBJC], m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], [_AM_DEPENDENCIES([OBJCXX])], [m4_define([AC_PROG_OBJCXX], m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl ]) # Variables for tags utilities; see am/tags.am if test -z "$CTAGS"; then CTAGS=ctags fi AC_SUBST([CTAGS]) if test -z "$ETAGS"; then ETAGS=etags fi AC_SUBST([ETAGS]) if test -z "$CSCOPE"; then CSCOPE=cscope fi AC_SUBST([CSCOPE]) AC_REQUIRE([AM_SILENT_RULES])dnl dnl The testsuite driver may need to know about EXEEXT, so add the dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below. AC_CONFIG_COMMANDS_PRE(dnl [m4_provide_if([_AM_COMPILER_EXEEXT], [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile # recipes. So use an aggressive probe to check that the usage we want is # actually supported "in the wild" to an acceptable degree. # See automake bug#10828. # To make any issue more visible, cause the running configure to be aborted # by default if the 'rm' program in use doesn't match our expectations; the # user can still override this though. if rm -f && rm -fr && rm -rf; then : OK; else cat >&2 <<'END' Oops! Your 'rm' program seems unable to run without file operands specified on the command line, even when the '-f' option is present. This is contrary to the behaviour of most rm programs out there, and not conforming with the upcoming POSIX standard: Please tell bug-automake@gnu.org about your system, including the value of your $PATH and any error possibly output before this message. This can help us improve future automake versions. END if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then echo 'Configuration will proceed anyway, since you have set the' >&2 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 echo >&2 else cat >&2 <<'END' Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation that behaves properly: . If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM to "yes", and re-run configure. END AC_MSG_ERROR([Your 'rm' program is bad, sorry.]) fi fi dnl The trailing newline in this macro's definition is deliberate, for dnl backward compatibility and to allow trailing 'dnl'-style comments dnl after the AM_INIT_AUTOMAKE invocation. See automake bug#16841. ]) dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further dnl mangled by Autoconf and run in a shell conditional statement. m4_define([_AC_COMPILER_EXEEXT], m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. The stamp files are numbered to have different names. # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the # loop where config.status creates the headers, so we can generate # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. _am_arg=$1 _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) # Copyright (C) 2001-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl if test x"${install_sh+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi AC_SUBST([install_sh])]) # Copyright (C) 2003-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # Check whether the underlying file-system supports filenames # with a leading dot. For instance MS-DOS doesn't. AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MAKE_INCLUDE() # ----------------- # Check whether make has an 'include' directive that can support all # the idioms we need for our automatic dependency tracking code. AC_DEFUN([AM_MAKE_INCLUDE], [AC_MSG_CHECKING([whether ${MAKE-make} supports the include directive]) cat > confinc.mk << 'END' am__doit: @echo this is the am__doit target >confinc.out .PHONY: am__doit END am__include="#" am__quote= # BSD make does it like this. echo '.include "confinc.mk" # ignored' > confmf.BSD # Other make implementations (GNU, Solaris 10, AIX) do it like this. echo 'include confinc.mk # ignored' > confmf.GNU _am_result=no for s in GNU BSD; do AM_RUN_LOG([${MAKE-make} -f confmf.$s && cat confinc.out]) AS_CASE([$?:`cat confinc.out 2>/dev/null`], ['0:this is the am__doit target'], [AS_CASE([$s], [BSD], [am__include='.include' am__quote='"'], [am__include='include' am__quote=''])]) if test "$am__include" != "#"; then _am_result="yes ($s style)" break fi done rm -f confinc.* confmf.* AC_MSG_RESULT([${_am_result}]) AC_SUBST([am__include])]) AC_SUBST([am__quote])]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) # AM_MISSING_HAS_RUN # ------------------ # Define MISSING if not defined so far and test if it is modern enough. # If it is, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl if test x"${MISSING+set}" != xset; then MISSING="\${SHELL} '$am_aux_dir/missing'" fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= AC_MSG_WARN(['missing' script is too old or missing]) fi ]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _AM_SET_OPTION(NAME) # -------------------- # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), [1])]) # _AM_SET_OPTIONS(OPTIONS) # ------------------------ # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) # Copyright (C) 1999-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_PROG_CC_C_O # --------------- # Like AC_PROG_CC_C_O, but changed for automake. We rewrite AC_PROG_CC # to automatically call this. AC_DEFUN([_AM_PROG_CC_C_O], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([compile])dnl AC_LANG_PUSH([C])dnl AC_CACHE_CHECK( [whether $CC understands -c and -o together], [am_cv_prog_cc_c_o], [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])]) # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i]) if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi AC_LANG_POP([C])]) # For backward compatibility. AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) # Copyright (C) 2001-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_RUN_LOG(COMMAND) # ------------------- # Run COMMAND, save the exit status in ac_status, and log it. # (This has been adapted from Autoconf's _AC_RUN_LOG macro.) AC_DEFUN([AM_RUN_LOG], [{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD (exit $ac_status); }]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[[\\\"\#\$\&\'\`$am_lf]]*) AC_MSG_ERROR([unsafe absolute working directory name]);; esac case $srcdir in *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$[*]" != "X $srcdir/configure conftest.file" \ && test "$[*]" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi if test "$[2]" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$[2]" = conftest.file ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi AC_MSG_RESULT([yes]) # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi AC_CONFIG_COMMANDS_PRE( [AC_MSG_CHECKING([that generated files are newer than configure]) if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi AC_MSG_RESULT([done])]) rm -f conftest.file ]) # Copyright (C) 2009-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_SILENT_RULES([DEFAULT]) # -------------------------- # Enable less verbose build rules; with the default set to DEFAULT # ("yes" being less verbose, "no" or empty being verbose). AC_DEFUN([AM_SILENT_RULES], [AC_ARG_ENABLE([silent-rules], [dnl AS_HELP_STRING( [--enable-silent-rules], [less verbose build output (undo: "make V=1")]) AS_HELP_STRING( [--disable-silent-rules], [verbose build output (undo: "make V=0")])dnl ]) case $enable_silent_rules in @%:@ ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; esac dnl dnl A few 'make' implementations (e.g., NonStop OS and NextStep) dnl do not support nested variable expansions. dnl See automake bug#9928 and bug#10237. am_make=${MAKE-make} AC_CACHE_CHECK([whether $am_make supports nested variables], [am_cv_make_support_nested_variables], [if AS_ECHO([['TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi]) if test $am_cv_make_support_nested_variables = yes; then dnl Using '$V' instead of '$(V)' breaks IRIX make. AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AC_SUBST([AM_V])dnl AM_SUBST_NOTMAKE([AM_V])dnl AC_SUBST([AM_DEFAULT_V])dnl AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl AC_SUBST([AM_DEFAULT_VERBOSITY])dnl AM_BACKSLASH='\' AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) # Copyright (C) 2001-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_STRIP # --------------------- # One issue with vendor 'install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we # always use install-sh in "make install-strip", and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. dnl Don't test for $cross_compiling = yes, because it might be 'maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) # Copyright (C) 2006-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. # This macro is traced by Automake. AC_DEFUN([_AM_SUBST_NOTMAKE]) # AM_SUBST_NOTMAKE(VARIABLE) # -------------------------- # Public sister of _AM_SUBST_NOTMAKE. AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_PROG_TAR(FORMAT) # -------------------- # Check how to create a tarball in format FORMAT. # FORMAT should be one of 'v7', 'ustar', or 'pax'. # # Substitute a variable $(am__tar) that is a command # writing to stdout a FORMAT-tarball containing the directory # $tardir. # tardir=directory && $(am__tar) > result.tar # # Substitute a variable $(am__untar) that extract such # a tarball read from stdin. # $(am__untar) < result.tar # AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AC_SUBST([AMTAR], ['$${TAR-tar}']) # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' m4_if([$1], [v7], [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], [m4_case([$1], [ustar], [# The POSIX 1988 'ustar' format is defined with fixed-size fields. # There is notably a 21 bits limit for the UID and the GID. In fact, # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 # and bug#13588). am_max_uid=2097151 # 2^21 - 1 am_max_gid=$am_max_uid # The $UID and $GID variables are not portable, so we need to resort # to the POSIX-mandated id(1) utility. Errors in the 'id' calls # below are definitely unexpected, so allow the users to see them # (that is, avoid stderr redirection). am_uid=`id -u || echo unknown` am_gid=`id -g || echo unknown` AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format]) if test $am_uid -le $am_max_uid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format]) if test $am_gid -le $am_max_gid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi], [pax], [], [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Go ahead even if we have the value already cached. We do so because we # need to set the values for the 'am__tar' and 'am__untar' variables. _am_tools=${am_cv_prog_tar_$1-$_am_tools} for _am_tool in $_am_tools; do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do AM_RUN_LOG([$_am_tar --version]) && break done am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x $1 -w "$$tardir"' am__tar_='pax -L -x $1 -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H $1 -L' am__tar_='find "$tardir" -print | cpio -o -H $1 -L' am__untar='cpio -i -H $1 -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_$1}" && break # tar/untar a dummy directory, and stop if the command works. rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) rm -rf conftest.dir if test -s conftest.tar; then AM_RUN_LOG([$am__untar /dev/null 2>&1 && break fi done rm -rf conftest.dir AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) AC_MSG_RESULT([$am_cv_prog_tar_$1])]) AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR m4_include([m4/acx_compile_warn.m4]) m4_include([m4/as-scrub-include.m4]) m4_include([m4/distri.m4]) m4_include([m4/gwenhywfar.m4]) m4_include([m4/libtool.m4]) m4_include([m4/ltoptions.m4]) m4_include([m4/ltsugar.m4]) m4_include([m4/ltversion.m4]) m4_include([m4/lt~obsolete.m4]) m4_include([m4/os.m4]) aqbanking-6.6.1/m4/0000755000175000017500000000000015037736155011014 500000000000000aqbanking-6.6.1/m4/gwenhywfar.m40000664000175000017500000001173414043610744013356 00000000000000# $Id$ # (c) 2002 Martin Preuss # This function checks for libgwenhywfar AC_DEFUN([AC_GWENHYWFAR], [ dnl searches for gwenhywfar dnl Arguments: dnl $1: major version minimum dnl $2: minor version minimum dnl $3: patchlevel version minimum dnl $4: build version minimum dnl Returns: gwenhywfar_dir dnl gwenhywfar_bindir dnl gwenhywfar_libs dnl gwenhywfar_plugins dnl gwenhywfar_includes dnl gwenhywfar_headers dnl gwenhywfar_has_crypt dnl have_gwenhywfar if test -z "$1"; then vma="0"; else vma="$1"; fi if test -z "$2"; then vmi="1"; else vmi="$2"; fi if test -z "$3"; then vpl="0"; else vpl="$3"; fi if test -z "$4"; then vbld="0"; else vbld="$4"; fi AC_MSG_CHECKING(if gwenhywfar support desired) AC_ARG_ENABLE(gwenhywfar, [ --enable-gwenhywfar enable gwenhywfar support (default=yes)], enable_gwenhywfar="$enableval", enable_gwenhywfar="yes") AC_MSG_RESULT($enable_gwenhywfar) have_gwenhywfar="no" gwenhywfar_dir="" gwenhywfar_plugins="" gwenhywfar_libs="" gwenhywfar_bindir="" gwenhywfar_libspp="" gwenhywfar_includes="" gwenhywfar_has_crypt="yes" if test "$enable_gwenhywfar" != "no"; then AC_MSG_CHECKING(for gwenhywfar) AC_ARG_WITH(gwen-dir, [ --with-gwen-dir=DIR obsolete - set PKG_CONFIG_PATH environment variable instead], [AC_MSG_RESULT([obsolete configure option '--with-gwen-dir' used]) AC_MSG_ERROR([ *** Configure switch '--with-gwen-dir' is obsolete. *** If you want to use gwenhywfar from a non-system location *** then locate the file 'gwenhywfar.pc' and add its parent directory *** to environment variable PKG_CONFIG_PATH. For example *** configure PKG_CONFIG_PATH=":\${PKG_CONFIG_PATH}"])], []) $PKG_CONFIG --exists gwenhywfar result=$? if test $result -ne 0; then AC_MSG_RESULT(not found) AC_MSG_ERROR([ *** Package gwenhywfar was not found in the pkg-config search path. *** Perhaps you should add the directory containing `gwenhywfar.pc' *** to the PKG_CONFIG_PATH environment variable]) else gwenhywfar_dir="`$PKG_CONFIG --variable=prefix gwenhywfar`" AC_MSG_RESULT($gwenhywfar_dir) fi AC_MSG_CHECKING(for gwen libs) gwenhywfar_libs="`$PKG_CONFIG --libs gwenhywfar`" AC_MSG_RESULT($gwenhywfar_libs) AC_MSG_CHECKING(for gwen includes) gwenhywfar_includes="`$PKG_CONFIG --cflags gwenhywfar`" AC_MSG_RESULT($gwenhywfar_includes) AC_MSG_CHECKING(for gwen binary tools) gwenhywfar_bindir="`$PKG_CONFIG --variable=bindir gwenhywfar`" AC_MSG_RESULT($gwenhywfar_bindir) AC_MSG_CHECKING(for gwen plugins) gwenhywfar_plugins="`$PKG_CONFIG --variable=plugindir gwenhywfar`" AC_MSG_RESULT($gwenhywfar_plugins) AC_MSG_CHECKING(for gwen headers) gwenhywfar_headers="`$PKG_CONFIG --variable=headerdir gwenhywfar`" AC_MSG_RESULT($gwenhywfar_headers) AC_MSG_CHECKING(if gwenhywfar test desired) AC_ARG_ENABLE(gwenhywfar, [ --enable-gwenhywfar-test enable gwenhywfar-test (default=yes)], enable_gwenhywfar_test="$enableval", enable_gwenhywfar_test="yes") AC_MSG_RESULT($enable_gwenhywfar_test) AC_MSG_CHECKING(for Gwenhywfar version >=$vma.$vmi.$vpl.$vbld) if test "$enable_gwenhywfar_test" != "no"; then gwen_vmajor="`$PKG_CONFIG --variable=vmajor gwenhywfar`" gwen_vminor="`$PKG_CONFIG --variable=vminor gwenhywfar`" gwen_vpatchlevel="`$PKG_CONFIG --variable=vpatchlevel gwenhywfar`" gwen_vstring="`$PKG_CONFIG --variable=vstring gwenhywfar`" gwen_vbuild="`$PKG_CONFIG --variable=vbuild gwenhywfar`" gwen_versionstring="$gwen_vstring.$gwen_vbuild" AC_MSG_RESULT([found $gwen_versionstring]) if test "$vma" -gt "$gwen_vmajor"; then AC_MSG_ERROR([Your Gwenhywfar version is way too old. Please update from https://www.aquamaniac.de]) elif test "$vma" = "$gwen_vmajor"; then if test "$vmi" -gt "$gwen_vminor"; then AC_MSG_ERROR([Your Gwenhywfar version is too old. Please update from https://www.aquamaniac.de]) elif test "$vmi" = "$gwen_vminor"; then if test "$vpl" -gt "$gwen_vpatchlevel"; then AC_MSG_ERROR([Your Gwenhywfar version is a little bit too old. Please update from https://www.aquamaniac.de]) elif test "$vpl" = "$gwen_vpatchlevel"; then if test "$vbld" -gt "$gwen_vbuild"; then AC_MSG_ERROR([Your Gwenhywfar version is a little bit too old. Please update to the latest git version. Instructions for accessing git can be found on https://www.aquamaniac.de]) fi fi fi fi have_gwenhywfar="yes" #AC_MSG_RESULT(yes) else have_gwenhywfar="yes" AC_MSG_RESULT(assuming yes) fi if test -n "$save_path"; then export PGK_CONFIG_PATH="$save_path" fi dnl end of "if enable-gwenhywfar" fi AC_SUBST(gwenhywfar_dir) AC_SUBST(gwenhywfar_plugins) AC_SUBST(gwenhywfar_bindir) AC_SUBST(gwenhywfar_libs) AC_SUBST(gwenhywfar_includes) AC_SUBST(gwenhywfar_headers) AC_SUBST(gwenhywfar_has_crypt) ]) aqbanking-6.6.1/m4/Makefile.am0000664000175000017500000000036114043610744012761 00000000000000EXTRA_DIST=\ ac_python_module.m4 \ acx_compile_warn.m4 \ acx_windows_paths.m4 \ as-scrub-include.m4 \ chipcard.m4 \ distri.m4 \ kde3.m4 \ os.m4 \ qt3.m4 \ qt4.m4 \ searchfiles.m4 \ fox.pc \ gwenhywfar.m4 typefiles: typedefs: aqbanking-6.6.1/m4/os.m40000664000175000017500000000571014043610744011613 00000000000000# $Id$ # (c) 2002 Martin Preuss # These functions guess your operation system AC_DEFUN([AQ_CHECK_OS],[ dnl IN: dnl - AC_CANONICAL_SYSTEM muste be called before dnl OUT: dnl Variables: dnl OSYSTEM: Short name of your system (subst) dnl OS_TYPE: either "posix" or "windows" (subst) dnl MAKE_DLL_TARGET: under windows this is set to "dll" (subst) dnl INSTALL_DLL_TARGET: under Windows this is set to "dll-install" (subst) dnl Defines: dnl OS_NAME: full name of your system dnl OS_SHORTNAME: short name of your system dnl Depending on your system one of the following is defined in addition: dnl OS_LINUX, OS_OPENBSD, OS_FREEBSD, OS_BEOS, OS_WIN32 # check for OS AC_MSG_CHECKING([host system type]) OSYSTEM="" OS_TYPE="" MAKE_DLL_TARGET="" INSTALL_DLL_TARGET="" AC_DEFINE_UNQUOTED(OS_NAME,"$host", [host system]) case "$host" in *-linux*) OSYSTEM="linux" AC_DEFINE(OS_LINUX,1,[if linux is used]) AC_DEFINE(OS_POSIX,1,[if this is a POSIX system]) OS_TYPE="posix" ;; *-solaris*) OSYSTEM="solaris" AC_DEFINE(OS_SOLARIS,1,[if Solaris is used]) AC_DEFINE(OS_POSIX,1,[if this is a POSIX system]) OS_TYPE="posix" ;; *-darwin*) OSYSTEM="osx" AC_DEFINE(OS_DARWIN,1,[if Apple Darwin is used]) AC_DEFINE(OS_POSIX,1,[if this is a POSIX system]) OS_TYPE="posix" ;; *-openbsd*) OSYSTEM="openbsd" AC_DEFINE(OS_OPENBSD,1,[if OpenBSD is used]) AC_DEFINE(OS_POSIX,1,[if this is a POSIX system]) OS_TYPE="posix" ;; *-freebsd* | *-kfreebsd*) OSYSTEM="freebsd" AC_DEFINE(OS_FREEBSD,1,[if FreeBSD is used]) AC_DEFINE(OS_POSIX,1,[if this is a POSIX system]) OS_TYPE="posix" ;; *-netbsd*) OSYSTEM="netbsd" AC_DEFINE(OS_NETBSD,1,[if NetBSD is used]) AC_DEFINE(OS_POSIX,1,[if this is a POSIX system]) OS_TYPE="posix" ;; *-beos*) OSYSTEM="beos" AC_DEFINE(OS_BEOS,1,[if BeOS is used]) AC_DEFINE(OS_POSIX,1,[if this is a POSIX system]) OS_TYPE="posix" ;; *-win32*) OSYSTEM="windows" AC_DEFINE(OS_WIN32,1,[if WIN32 is used]) OS_TYPE="windows" AC_DEFINE_UNQUOTED(BUILDING_DLL,1,[if DLL is to be built]) MAKE_DLL_TARGET="dll" INSTALL_DLL_TARGET="dll-install" ;; *-mingw32*) OSYSTEM="windows" AC_DEFINE(OS_WIN32,1,[if WIN32 is used]) OS_TYPE="windows" AC_DEFINE_UNQUOTED(BUILDING_DLL,1,[if DLL is to be built]) MAKE_DLL_TARGET="dll" INSTALL_DLL_TARGET="dll-install" ;; *-palmos*) OSYSTEM="palmos" AC_DEFINE(OS_PALMOS,1,[if PalmOS is used]) OS_TYPE="palmos" ;; *) AC_MSG_WARN([Sorry, but host $host is not supported. Please report if it works anyway. We will assume that your system is a posix system and continue.]) OSYSTEM="unknown" OS_TYPE="posix" AC_DEFINE(OS_POSIX,1,[if this is a POSIX system]) ;; esac AC_SUBST(OSYSTEM) AC_DEFINE_UNQUOTED(OS_SHORTNAME,"$OSYSTEM",[host system]) AC_SUBST(OS_TYPE) AC_DEFINE_UNQUOTED(OS_TYPE,"$OS_TYPE",[system type]) AC_SUBST(MAKE_DLL_TARGET) AC_SUBST(INSTALL_DLL_TARGET) AC_MSG_RESULT($OS_TYPE) ]) aqbanking-6.6.1/m4/distri.m40000664000175000017500000000564014043610744012472 00000000000000 # distri.m4 # (c) 2006 Martin Preuss # This function checks for the Linux distribution AC_DEFUN([AQ_DISTRIBUTION], [ dnl searches for libusb dnl Arguments: none dnl Returns: aq_distrib_name (name of the Linux distribution) dnl aq_distrib_tag (tag for packages, like "suse") dnl aq_distrib_version (not for Debian-like systems) AC_MSG_CHECKING(for preselected distribution name) if test -n "$aq_distrib_name"; then AC_MSG_RESULT([yes, $aq_distrib_name]) else AC_MSG_RESULT([no, will have to determine it]) aq_distrib_name="" aq_distrib_version="" aq_distrib_tag="" # Debian-style AC_MSG_CHECKING(whether this is a Debian derivate) case `basename $CC` in gcc | gcc-* | *-gcc | *-gcc-*) debtype=["` ${CC} --version | head -1`"] case $debtype in *\(Debian\ *) aq_distrib_name="Debian" aq_distrib_tag="debian" AC_MSG_RESULT([yes, $aq_distrib_name]) ;; *\(Ubuntu\ * | *\(KUbuntu\ *) aq_distrib_name="Ubuntu" aq_distrib_tag="ubuntu" AC_MSG_RESULT([yes, $aq_distrib_name]) ;; *) AC_MSG_RESULT([no]) ;; esac ;; *) AC_MSG_RESULT([no]) ;; esac fi if test -z "$aq_distrib_name"; then # RPM-style AC_MSG_CHECKING(whether this is an RPM distribution) RPM_COMMAND="`which rpm`" aq_distrib_name="" aq_distrib_tag="" aq_distrib_version="" if test -n "${RPM_COMMAND}"; then if test -x "${RPM_COMMAND}"; then if test -e "/etc/mandriva-release"; then aq_distrib_name="mandriva" aq_distrib_tag="mdk" aq_distrib_version="`rpm -q --queryformat='%{VERSION}' mandriva-release 2>/dev/null`" AC_MSG_RESULT([yes, $aq_distrib_name]) elif test -e "/etc/mandrake-release"; then aq_distrib_name="mandrake" aq_distrib_tag="mdk" aq_distrib_version="`rpm -q --queryformat='%{VERSION}' mandrake-release 2>/dev/null`" AC_MSG_RESULT([yes, $aq_distrib_name]) elif test -e "/etc/SuSE-release"; then aq_distrib_name="suse" aq_distrib_tag="suse" read v1 v2 v3 v4 search starts here: dnl /usr/local/include dnl /usr/lib/gcc-lib/i386-redhat-linux/3.2/include dnl /usr/include dnl End of search list. dnl AS_SCRUB_INCLUDE(VAR) dnl example dnl AS_SCRUB_INCLUDE(CFLAGS) dnl will remove all system include dirs from the given CFLAGS AC_DEFUN([AS_SCRUB_INCLUDE], [ GIVEN_CFLAGS=$[$1] INCLUDE_DIRS=`echo | ${CPP} -v 2>&1` dnl remove everything from this output between the "starts here" and "End of" dnl line INCLUDE_DIRS=`echo $INCLUDE_DIRS | sed -e 's/.*<...> search starts here://' | sed -e 's/End of search list.*//'` for dir in $INCLUDE_DIRS; do GIVEN_CFLAGS=$(echo $GIVEN_CFLAGS | sed -e 's;-I$dir ;;' | sed -e 's;-I$dir$;;') done [$1]=$GIVEN_CFLAGS ]) aqbanking-6.6.1/m4/acx_compile_warn.m40000664000175000017500000000604114043610744014502 00000000000000# Compile warning arguments to ./configure # by Christian Stimming 2003-11-19 dnl ACX_COMPILE_WARN() dnl Add arguments for compile warnings and debug options to ./configure. dnl AC_DEFUN([ACX_COMPILE_WARN], [ dnl Add compile arguments for debugging and warnings. Macro argument dnl $1 is the default argument if --enable-debug is not specified. dnl If no Macro argument is given, enable the debugging code. if test -z "$1"; then default_debug_arg="-g"; else default_debug_arg="$1"; fi AC_MSG_CHECKING([for compiler arguments]) dnl For enabling of debugging flags/code AC_ARG_ENABLE(debug, [ --enable-debug enable compile arguments for debugging code], [case "${enableval}" in yes) CXXFLAGS="${CXXFLAGS} -g" # Remove -O2 CXXFLAGS=`echo "${CXXFLAGS}" | sed -e 's/-O2//'` CFLAGS=`echo "${CFLAGS}" | sed -e 's/-O2//'` CFLAGS="${CFLAGS} -g" LDFLAGS="${LDFLAGS} -g" AC_DEFINE(DEBUG,1,[Define if you want debugging code enabled.]) ;; no) ;; *) AC_MSG_ERROR(bad value ${enableval} for --enable-debug) ;; esac ], [ # Default value if the argument was not given CXXFLAGS="${CXXFLAGS} ${default_debug_arg}" CFLAGS="${CFLAGS} ${default_debug_arg}" LDFLAGS="${LDFLAGS} ${default_debug_arg}" ]) dnl If this is gcc, then ... if test ${GCC}x = yesx; then dnl Enable all warnings AC_ARG_ENABLE(warnings, [ --enable-warnings enable compilation warnings, default=yes], [case "${enableval}" in yes) CXXFLAGS="${CXXFLAGS} -Wall" CFLAGS="${CFLAGS} -Wall" ;; all) CXXFLAGS="${CXXFLAGS} -Wall -pedantic -ansi" CFLAGS="${CFLAGS} -Wall -pedantic -ansi" ;; no) ;; *) AC_MSG_ERROR(bad value ${enableval} for --enable-warnings) ;; esac ], [ # Default value if the argument was not given CXXFLAGS="${CXXFLAGS} -Wall" CFLAGS="${CFLAGS} -Wall" ]) dnl For gcc >= 3.4.x, specifically enable the new warning switch dnl -Wdeclaration-after-statement in order to preserve source code dnl compatibility to gcc 2.95 and other compilers. GCC_VERSION=`${CC} -dumpversion` if test `echo ${GCC_VERSION} | cut -d. -f1` -ge 3; then # This is gcc >= 3.x.x if test `echo ${GCC_VERSION} | cut -d. -f2` -ge 4; then # This is gcc >= 3.4.x CFLAGS="${CFLAGS} -Wdeclaration-after-statement" fi fi dnl For enabling error on warnings AC_ARG_ENABLE(error-on-warning, [ --enable-error-on-warning treat all compile warnings as errors, default=no], [case "${enableval}" in yes) CXXFLAGS="${CXXFLAGS} -Werror" CFLAGS="${CFLAGS} -Werror" ;; no) ;; *) AC_MSG_ERROR(bad value ${enableval} for --enable-error-on-warning) ;; esac ], [ # Default value if the argument was not given CXXFLAGS="${CXXFLAGS}" CFLAGS="${CFLAGS}" ]) fi # Beautify the CXXFLAGS: remove extra spaces, remove double -g CXXFLAGS=`echo "${CXXFLAGS}" | sed -e 's/ */ /g' | sed -e 's/-g -g/-g/'` CFLAGS=`echo "${CFLAGS}" | sed -e 's/ */ /g' | sed -e 's/-g -g/-g/'` # Print the result AC_MSG_RESULT($CFLAGS) ]) aqbanking-6.6.1/m4/Makefile.in0000644000175000017500000004142515037736024013002 00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = m4 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/distri.m4 $(top_srcdir)/m4/gwenhywfar.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/os.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADD_ACLOCAL_FLAGS = @ADD_ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AQBANKING_CLI_VERSION_STRING = @AQBANKING_CLI_VERSION_STRING@ AQBANKING_FINTS_VERSION_STRING = @AQBANKING_FINTS_VERSION_STRING@ AQBANKING_SO_AGE = @AQBANKING_SO_AGE@ AQBANKING_SO_CURRENT = @AQBANKING_SO_CURRENT@ AQBANKING_SO_EFFECTIVE = @AQBANKING_SO_EFFECTIVE@ AQBANKING_SO_REVISION = @AQBANKING_SO_REVISION@ AQBANKING_VERSION_BUILD = @AQBANKING_VERSION_BUILD@ AQBANKING_VERSION_FULL_STRING = @AQBANKING_VERSION_FULL_STRING@ AQBANKING_VERSION_MAJOR = @AQBANKING_VERSION_MAJOR@ AQBANKING_VERSION_MINOR = @AQBANKING_VERSION_MINOR@ AQBANKING_VERSION_PATCHLEVEL = @AQBANKING_VERSION_PATCHLEVEL@ AQBANKING_VERSION_RELEASE_STRING = @AQBANKING_VERSION_RELEASE_STRING@ AQBANKING_VERSION_STRING = @AQBANKING_VERSION_STRING@ AQBANKING_VERSION_TAG = @AQBANKING_VERSION_TAG@ AQEBICS_CFLAGS = @AQEBICS_CFLAGS@ AQEBICS_LIBS = @AQEBICS_LIBS@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATETIME = @DATETIME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_EXCLUDE_PATTERNS = @DOXYGEN_EXCLUDE_PATTERNS@ DOXYGEN_FILE_PATTERNS = @DOXYGEN_FILE_PATTERNS@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENGUI_GTK2_CFLAGS = @GWENGUI_GTK2_CFLAGS@ GWENGUI_GTK2_LIBS = @GWENGUI_GTK2_LIBS@ GWENHYWFAR_MINIMUM_VERSION = @GWENHYWFAR_MINIMUM_VERSION@ HAVE_GWENGUI_GTK2 = @HAVE_GWENGUI_GTK2@ HAVE_I18N = @HAVE_I18N@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIBXSLT_CFLAGS = @LIBXSLT_CFLAGS@ LIBXSLT_LIBS = @LIBXSLT_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_SUPPORTS_QT = @MSGFMT_SUPPORTS_QT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ TUTORIALS = @TUTORIALS@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XMLMERGE = @XMLMERGE@ XMLSEC_CFLAGS = @XMLSEC_CFLAGS@ XMLSEC_LIBS = @XMLSEC_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ aqbanking_backends = @aqbanking_backends@ aqbanking_cfg_searchdir = @aqbanking_cfg_searchdir@ aqbanking_data_searchdir = @aqbanking_data_searchdir@ aqbanking_headerdir = @aqbanking_headerdir@ aqbanking_headerdir_am = @aqbanking_headerdir_am@ aqbanking_includes = @aqbanking_includes@ aqbanking_internal_libs = @aqbanking_internal_libs@ aqbanking_ldflags = @aqbanking_ldflags@ aqbanking_libs = @aqbanking_libs@ aqbanking_locale_searchdir = @aqbanking_locale_searchdir@ aqbanking_modules = @aqbanking_modules@ aqbanking_pkgdatadir = @aqbanking_pkgdatadir@ aqbanking_plugin_searchdir = @aqbanking_plugin_searchdir@ aqbanking_plugindir = @aqbanking_plugindir@ aqbanking_plugins_backends_dirs = @aqbanking_plugins_backends_dirs@ aqbanking_plugins_backends_libs = @aqbanking_plugins_backends_libs@ aqbanking_plugins_bankinfo_dirs = @aqbanking_plugins_bankinfo_dirs@ aqbanking_plugins_bankinfo_libs = @aqbanking_plugins_bankinfo_libs@ aqbanking_plugins_imexporters_dirs = @aqbanking_plugins_imexporters_dirs@ aqbanking_plugins_imexporters_libs = @aqbanking_plugins_imexporters_libs@ aqbanking_plugins_parsers_dirs = @aqbanking_plugins_parsers_dirs@ aqbanking_symlinkdir = @aqbanking_symlinkdir@ aqbanking_sys_is_windows = @aqbanking_sys_is_windows@ aqbankingpp_modules = @aqbankingpp_modules@ aqebics_datadir = @aqebics_datadir@ aqebics_includes = @aqebics_includes@ aqebics_internal_libs = @aqebics_internal_libs@ aqebics_ldflags = @aqebics_ldflags@ aqebics_libs = @aqebics_libs@ aqfints_datadir = @aqfints_datadir@ aqhbci_datadir = @aqhbci_datadir@ aqhbci_includes = @aqhbci_includes@ aqhbci_internal_libs = @aqhbci_internal_libs@ aqhbci_ldflags = @aqhbci_ldflags@ aqhbci_libs = @aqhbci_libs@ aqofxconnect_includes = @aqofxconnect_includes@ aqofxconnect_internal_libs = @aqofxconnect_internal_libs@ aqofxconnect_libs = @aqofxconnect_libs@ aqpaypal_includes = @aqpaypal_includes@ aqpaypal_internal_libs = @aqpaypal_internal_libs@ aqpaypal_libs = @aqpaypal_libs@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gmp_libs = @gmp_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_dir = @gwenhywfar_dir@ gwenhywfar_has_crypt = @gwenhywfar_has_crypt@ gwenhywfar_headers = @gwenhywfar_headers@ gwenhywfar_includes = @gwenhywfar_includes@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_plugins = @gwenhywfar_plugins@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ typemaker2_exe = @typemaker2_exe@ visibility_cflags = @visibility_cflags@ with_aqebics = @with_aqebics@ with_aqhbci = @with_aqhbci@ EXTRA_DIST = \ ac_python_module.m4 \ acx_compile_warn.m4 \ acx_windows_paths.m4 \ as-scrub-include.m4 \ chipcard.m4 \ distri.m4 \ kde3.m4 \ os.m4 \ qt3.m4 \ qt4.m4 \ searchfiles.m4 \ fox.pc \ gwenhywfar.m4 all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu m4/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu m4/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags-am uninstall uninstall-am .PRECIOUS: Makefile typefiles: typedefs: # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: aqbanking-6.6.1/m4/lt~obsolete.m40000644000175000017500000001400714605317530013542 00000000000000# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- # # Copyright (C) 2004-2005, 2007, 2009, 2011-2019, 2021-2022 Free # Software Foundation, Inc. # Written by Scott James Remnant, 2004. # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 5 lt~obsolete.m4 # These exist entirely to fool aclocal when bootstrapping libtool. # # In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN), # which have later been changed to m4_define as they aren't part of the # exported API, or moved to Autoconf or Automake where they belong. # # The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN # in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us # using a macro with the same name in our local m4/libtool.m4 it'll # pull the old libtool.m4 in (it doesn't see our shiny new m4_define # and doesn't know about Autoconf macros at all.) # # So we provide this file, which has a silly filename so it's always # included after everything else. This provides aclocal with the # AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything # because those macros already exist, or will be overwritten later. # We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. # # Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. # Yes, that means every name once taken will need to remain here until # we give up compatibility with versions before 1.7, at which point # we need to keep only those names which we still refer to. # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])]) m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])]) m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])]) m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])]) m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])]) m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])]) m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])]) m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])]) m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])]) m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])]) m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])]) m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])]) m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])]) m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])]) m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])]) m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])]) m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])]) m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])]) m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])]) m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])]) m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])]) m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])]) m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])]) m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])]) m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])]) m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])]) m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])]) m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])]) m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])]) m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])]) m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])]) m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])]) m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])]) m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])]) m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])]) m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])]) m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])]) m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])]) m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])]) m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])]) m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])]) m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])]) m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])]) m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])]) m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])]) m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])]) m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])]) m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])]) m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS], [AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])]) m4_ifndef([_LT_AC_PROG_CXXCPP], [AC_DEFUN([_LT_AC_PROG_CXXCPP])]) m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS], [AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])]) m4_ifndef([_LT_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])]) m4_ifndef([_LT_PROG_F77], [AC_DEFUN([_LT_PROG_F77])]) m4_ifndef([_LT_PROG_FC], [AC_DEFUN([_LT_PROG_FC])]) m4_ifndef([_LT_PROG_CXX], [AC_DEFUN([_LT_PROG_CXX])]) aqbanking-6.6.1/m4/ltsugar.m40000644000175000017500000001045314605317530012652 00000000000000# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- # # Copyright (C) 2004-2005, 2007-2008, 2011-2019, 2021-2022 Free Software # Foundation, Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 6 ltsugar.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) # lt_join(SEP, ARG1, [ARG2...]) # ----------------------------- # Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their # associated separator. # Needed until we can rely on m4_join from Autoconf 2.62, since all earlier # versions in m4sugar had bugs. m4_define([lt_join], [m4_if([$#], [1], [], [$#], [2], [[$2]], [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) m4_define([_lt_join], [m4_if([$#$2], [2], [], [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) # lt_car(LIST) # lt_cdr(LIST) # ------------ # Manipulate m4 lists. # These macros are necessary as long as will still need to support # Autoconf-2.59, which quotes differently. m4_define([lt_car], [[$1]]) m4_define([lt_cdr], [m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], [$#], 1, [], [m4_dquote(m4_shift($@))])]) m4_define([lt_unquote], $1) # lt_append(MACRO-NAME, STRING, [SEPARATOR]) # ------------------------------------------ # Redefine MACRO-NAME to hold its former content plus 'SEPARATOR''STRING'. # Note that neither SEPARATOR nor STRING are expanded; they are appended # to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). # No SEPARATOR is output if MACRO-NAME was previously undefined (different # than defined and empty). # # This macro is needed until we can rely on Autoconf 2.62, since earlier # versions of m4sugar mistakenly expanded SEPARATOR but not STRING. m4_define([lt_append], [m4_define([$1], m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) # lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) # ---------------------------------------------------------- # Produce a SEP delimited list of all paired combinations of elements of # PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list # has the form PREFIXmINFIXSUFFIXn. # Needed until we can rely on m4_combine added in Autoconf 2.62. m4_define([lt_combine], [m4_if(m4_eval([$# > 3]), [1], [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl [[m4_foreach([_Lt_prefix], [$2], [m4_foreach([_Lt_suffix], ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) # lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) # ----------------------------------------------------------------------- # Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited # by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. m4_define([lt_if_append_uniq], [m4_ifdef([$1], [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], [lt_append([$1], [$2], [$3])$4], [$5])], [lt_append([$1], [$2], [$3])$4])]) # lt_dict_add(DICT, KEY, VALUE) # ----------------------------- m4_define([lt_dict_add], [m4_define([$1($2)], [$3])]) # lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) # -------------------------------------------- m4_define([lt_dict_add_subkey], [m4_define([$1($2:$3)], [$4])]) # lt_dict_fetch(DICT, KEY, [SUBKEY]) # ---------------------------------- m4_define([lt_dict_fetch], [m4_ifval([$3], m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) # lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) # ----------------------------------------------------------------- m4_define([lt_if_dict_fetch], [m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], [$5], [$6])]) # lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) # -------------------------------------------------------------- m4_define([lt_dict_filter], [m4_if([$5], [], [], [lt_join(m4_quote(m4_default([$4], [[, ]])), lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl ]) aqbanking-6.6.1/m4/acx_windows_paths.m40000664000175000017500000002302614043610744014716 00000000000000# $Id$ # (c) 2004 Martin Preuss # These functions retrieve some important paths AC_DEFUN([AQ_WINDOZE_GETPATH], [ dnl IN: dnl - $1: type of path to get: dnl - windows: windows path dnl - system: windows/system directory dnl - home: users home directory dnl - $2: default value dnl OUT: dnl - aq_windoze_path: path retrieved dnl rm -f conf.winpath save_LIBS="${LIBS}" LIBS="${LIBS} -lshfolder" AC_TRY_RUN([ #include #include #include #include #include int main (){ char buffer[260]; const char *choice = "$1"; FILE *f; buffer[0]=0; if (strlen("$2")) { if (strlen("$2")>=sizeof(buffer)) { printf("path is too long ($2)\n"); exit(1); } strcpy(buffer, "$2"); } else { if (strcasecmp(choice, "windows")==0) { GetWindowsDirectory(buffer, sizeof(buffer)); } else if (strcasecmp(choice, "system")==0) { GetSystemDirectory(buffer, sizeof(buffer)); } else if (strcasecmp(choice, "home")==0) { GetWindowsDirectory(buffer, sizeof(buffer)); } else if (strcasecmp(choice, "program_files") == 0) { SHGetFolderPath(NULL, CSIDL_PROGRAM_FILES, NULL, 0, buffer); } else if (strcasecmp(choice, "common_appdata") == 0) { SHGetFolderPath(NULL, CSIDL_COMMON_APPDATA, NULL, 0, buffer); } else { printf("Unknown type \"$1\"\n"); exit(1); } } f=fopen("conf.winpath", "w+"); if (!f) { printf("Could not create file conf.winpath\n"); exit(1); } fprintf(f, "%s", buffer); if (fclose(f)) { printf("Could not close file.\n"); exit(1); } exit(0); } ], [aq_windoze_path="`cat conf.winpath`"], [AC_MSG_ERROR(Could not determine path for $1)], [aq_windoze_path="$2"; AC_MSG_RESULT([Crosscompiling, assuming $2])] ) LIBS="${save_LIBS}" rm -f conf.winpath ]) AC_DEFUN([AQ_WINDOZE_GETPATH_MINGW], [ dnl IN: dnl - $1: type of path to get: dnl - windows: windows path dnl - system: windows/system directory dnl - home: users home directory dnl - $2: default value dnl OUT: dnl - aq_windoze_path: path retrieved dnl rm -f conf.winpath LIBS="${LIBS} -lshfolder" AC_TRY_RUN([ #include #include #include #include #include int main (){ char buffer[260]; char buffer2[260+2]; const char *choice = "$1"; char *p; char *tp; FILE *f; int lastWasSlash; buffer[0]=0; if (strlen("$2")) { if (strlen("$2")>=sizeof(buffer)) { printf("path is too long ($2)\n"); exit(1); } strcpy(buffer, "$2"); } else { if (strcasecmp(choice, "windows")==0) { GetWindowsDirectory(buffer, sizeof(buffer)); } else if (strcasecmp(choice, "system")==0) { GetSystemDirectory(buffer, sizeof(buffer)); } else if (strcasecmp(choice, "home")==0) { GetWindowsDirectory(buffer, sizeof(buffer)); } else if (strcasecmp(choice, "program_files") == 0) { SHGetFolderPath(NULL, CSIDL_PROGRAM_FILES, NULL, 0, buffer); } else if (strcasecmp(choice, "common_appdata") == 0) { SHGetFolderPath(NULL, CSIDL_COMMON_APPDATA, NULL, 0, buffer); } else { printf("Unknown type \"$1\"\n"); exit(1); } } /* create mingw path */ tp=buffer2; p=buffer; if (strlen(buffer)>1) { if (buffer[1]==':') { *tp='/'; tp++; *tp=buffer[0]; tp++; p+=2; } } lastWasSlash=0; while(*p) { if (*p=='\\\\' || *p=='/') { if (!lastWasSlash) { *tp='/'; tp++; lastWasSlash=1; } } else { lastWasSlash=0; *tp=*p; tp++; } p++; } /* while */ *tp=0; f=fopen("conf.winpath", "w+"); if (!f) { printf("Could not create file conf.winpath\n"); exit(1); } fprintf(f, "%s", buffer2); if (fclose(f)) { printf("Could not close file.\n"); exit(1); } exit(0); } ], [aq_windoze_path=`cat conf.winpath`], [AC_MSG_ERROR(Could not determine path for $1)], [aq_windoze_path="$2"; AC_MSG_RESULT([Crosscompiling, assuming $2])] ) LIBS="${save_LIBS}" rm -f conf.winpath ]) AC_DEFUN([ACX_WINDOWS_PATHS],[ dnl IN: dnl - AC_CANONICAL_SYSTEM muste be called before dnl OUT: dnl Variables (subst): dnl WIN_PATH_HOME : path and name of the Windoze home folder dnl WIN_PATH_HOME_MINGW : path and name of the Windoze home folder dnl WIN_PATH_WINDOWS : path and name of the Windoze system folder dnl WIN_PATH_WINDOWS_MINGW : path and name of the Windoze system folder dnl WIN_PATH_SYSTEM : path and name of the Windoze folder dnl WIN_PATH_SYSTEM_MINGW : path and name of the Windoze folder dnl WIN_PATH_PROGRAM_FILES dnl WIN_PATH_PROGRAM_FILES_MINGW dnl WIN_PATH_COMMON_APPDATA dnl WIN_PATH_COMMON_APPDATA_MINGW dnl Defines: dnl WIN_PATH_HOME : path and name of the Windoze home folder dnl WIN_PATH_WINDOWS : path and name of the Windoze system folder dnl WIN_PATH_SYSTEM : path and name of the Windoze folder dnl WIN_PATH_PROGRAM_FILES : path of the program files folder dnl WIN_PATH_COMMON_APPDATA : The directory containing application data for all users # presets AC_ARG_WITH(home-path, [ --with-home-path=DIR specify the home directory for a user], [aq_windoze_path_home="$withval"]) AC_ARG_WITH(system-path, [ --with-system-path=DIR specify the system directory], [aq_windoze_path_system="$withval"]) AC_ARG_WITH(windows-path, [ --with-windows-path=DIR specify the windows directory], [aq_windoze_path_windows="$withval"]) # home directory AC_MSG_CHECKING([for windoze home path (program)]) AC_CACHE_VAL(gwenhywfar_cv_path_home, [ AQ_WINDOZE_GETPATH(home, [$aq_windoze_path_home]) gwenhywfar_cv_path_home="$aq_windoze_path" ]) WIN_PATH_HOME="$gwenhywfar_cv_path_home" AC_MSG_RESULT([$WIN_PATH_HOME]) AC_MSG_CHECKING([for windoze home path (mingw)]) AC_CACHE_VAL(gwenhywfar_cv_path_home_mingw, [ AQ_WINDOZE_GETPATH_MINGW(home, [$aq_windoze_path_home]) gwenhywfar_cv_path_home_mingw="$aq_windoze_path" ]) WIN_PATH_HOME_MINGW="$gwenhywfar_cv_path_home_mingw" AC_MSG_RESULT([$WIN_PATH_HOME_MINGW]) # windows directory AC_MSG_CHECKING([for windoze windows path (program)]) AC_CACHE_VAL(gwenhywfar_cv_path_windows, [ AQ_WINDOZE_GETPATH(windows, [$aq_windoze_path_windows]) gwenhywfar_cv_path_windows="$aq_windoze_path" ]) WIN_PATH_WINDOWS="$gwenhywfar_cv_path_windows" AC_MSG_RESULT([$WIN_PATH_WINDOWS]) AC_MSG_CHECKING([for windoze windows path (mingw)]) AC_CACHE_VAL(gwenhywfar_cv_path_windows_mingw, [ AQ_WINDOZE_GETPATH_MINGW(windows, [$aq_windoze_path_windows]) gwenhywfar_cv_path_windows_mingw="$aq_windoze_path" ]) WIN_PATH_WINDOWS_MINGW="$gwenhywfar_cv_path_windows_mingw" AC_MSG_RESULT([$WIN_PATH_WINDOWS_MINGW]) # windows system directory AC_MSG_CHECKING([for windoze system path (program)]) AC_CACHE_VAL(gwenhywfar_cv_path_system, [ AQ_WINDOZE_GETPATH(system, [$aq_windoze_path_system]) gwenhywfar_cv_path_system="$aq_windoze_path" ]) WIN_PATH_SYSTEM="$gwenhywfar_cv_path_system" AC_MSG_RESULT([$WIN_PATH_SYSTEM]) AC_MSG_CHECKING([for windoze system path (mingw)]) AC_CACHE_VAL(gwenhywfar_cv_path_system_mingw, [ AQ_WINDOZE_GETPATH_MINGW(system, [$aq_windoze_path_system]) gwenhywfar_cv_path_system_mingw="$aq_windoze_path" ]) WIN_PATH_SYSTEM_MINGW="$gwenhywfar_cv_path_system_mingw" AC_MSG_RESULT([$WIN_PATH_SYSTEM_MINGW]) # program files directory AC_MSG_CHECKING([for program files path (program)]) AC_CACHE_VAL(gwenhywfar_cv_path_programfiles, [ AQ_WINDOZE_GETPATH(program_files, [$aq_windoze_path_system]) gwenhywfar_cv_path_programfiles="$aq_windoze_path" ]) WIN_PATH_PROGRAM_FILES="$gwenhywfar_cv_path_programfiles" AC_MSG_RESULT([$WIN_PATH_PROGRAM_FILES]) AC_MSG_CHECKING([for program files path (mingw)]) AC_CACHE_VAL(gwenhywfar_cv_path_programfiles_mingw, [ AQ_WINDOZE_GETPATH_MINGW(program_files, [$aq_windoze_path_system]) gwenhywfar_cv_path_programfiles_mingw="$aq_windoze_path" ]) WIN_PATH_PROGRAM_FILES_MINGW="$gwenhywfar_cv_path_programfiles_mingw" AC_MSG_RESULT([$WIN_PATH_PROGRAM_FILES_MINGW]) # common application data directory AC_MSG_CHECKING([for common app data path (program)]) AC_CACHE_VAL(gwenhywfar_cv_path_commonappdata, [ AQ_WINDOZE_GETPATH(common_appdata, [$aq_windoze_path_system]) gwenhywfar_cv_path_commonappdata="$aq_windoze_path" ]) WIN_PATH_COMMON_APPDATA="$gwenhywfar_cv_path_commonappdata" AC_MSG_RESULT([$WIN_PATH_COMMON_APPDATA]) AC_MSG_CHECKING([for common app data path (mingw)]) AC_CACHE_VAL(gwenhywfar_cv_path_commonappdata_mingw, [ AQ_WINDOZE_GETPATH_MINGW(common_appdata, [$aq_windoze_path_system]) gwenhywfar_cv_path_commonappdata_mingw="$aq_windoze_path" ]) WIN_PATH_COMMON_APPDATA_MINGW="$gwenhywfar_cv_path_commonappdata_mingw" AC_MSG_RESULT([$WIN_PATH_COMMON_APPDATA_MINGW]) # finish variables AC_SUBST(WIN_PATH_HOME) AC_DEFINE_UNQUOTED(WIN_PATH_HOME, "$WIN_PATH_HOME", [home path]) AC_SUBST(WIN_PATH_HOME_MINGW) AC_SUBST(WIN_PATH_WINDOWS) AC_DEFINE_UNQUOTED(WIN_PATH_WINDOWS, "$WIN_PATH_WINDOWS", [windows path]) AC_SUBST(WIN_PATH_WINDOWS_MINGW) AC_SUBST(WIN_PATH_SYSTEM) AC_DEFINE_UNQUOTED(WIN_PATH_SYSTEM, "$WIN_PATH_SYSTEM", [system path]) AC_SUBST(WIN_PATH_SYSTEM_MINGW) AC_SUBST(WIN_PATH_PROGRAM_FILES) AC_DEFINE_UNQUOTED(WIN_PATH_PROGRAM_FILES, "$WIN_PATH_PROGRAM_FILES", [program files path]) AC_SUBST(WIN_PATH_PROGRAM_FILES_MINGW) AC_SUBST(WIN_PATH_COMMON_APPDATA) AC_DEFINE_UNQUOTED(WIN_PATH_COMMON_APPDATA, "$WIN_PATH_COMMON_APPDATA", [common app data path]) AC_SUBST(WIN_PATH_COMMON_APPDATA_MINGW) ]) aqbanking-6.6.1/m4/ltoptions.m40000644000175000017500000003427514605317530013234 00000000000000# Helper functions for option handling. -*- Autoconf -*- # # Copyright (C) 2004-2005, 2007-2009, 2011-2019, 2021-2022 Free # Software Foundation, Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 8 ltoptions.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) # _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) # ------------------------------------------ m4_define([_LT_MANGLE_OPTION], [[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) # _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) # --------------------------------------- # Set option OPTION-NAME for macro MACRO-NAME, and if there is a # matching handler defined, dispatch to it. Other OPTION-NAMEs are # saved as a flag. m4_define([_LT_SET_OPTION], [m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), _LT_MANGLE_DEFUN([$1], [$2]), [m4_warning([Unknown $1 option '$2'])])[]dnl ]) # _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) # ------------------------------------------------------------ # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. m4_define([_LT_IF_OPTION], [m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) # _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) # ------------------------------------------------------- # Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME # are set. m4_define([_LT_UNLESS_OPTIONS], [m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), [m4_define([$0_found])])])[]dnl m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 ])[]dnl ]) # _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) # ---------------------------------------- # OPTION-LIST is a space-separated list of Libtool options associated # with MACRO-NAME. If any OPTION has a matching handler declared with # LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about # the unknown option and exit. m4_defun([_LT_SET_OPTIONS], [# Set options m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [_LT_SET_OPTION([$1], _LT_Option)]) m4_if([$1],[LT_INIT],[ dnl dnl Simply set some default values (i.e off) if boolean options were not dnl specified: _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no ]) _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no ]) dnl dnl If no reference was made to various pairs of opposing options, then dnl we run the default mode handler for the pair. For example, if neither dnl 'shared' nor 'disable-shared' was passed, we enable building of shared dnl archives by default: _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], [_LT_ENABLE_FAST_INSTALL]) _LT_UNLESS_OPTIONS([LT_INIT], [aix-soname=aix aix-soname=both aix-soname=svr4], [_LT_WITH_AIX_SONAME([aix])]) ]) ])# _LT_SET_OPTIONS ## --------------------------------- ## ## Macros to handle LT_INIT options. ## ## --------------------------------- ## # _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) # ----------------------------------------- m4_define([_LT_MANGLE_DEFUN], [[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) # LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) # ----------------------------------------------- m4_define([LT_OPTION_DEFINE], [m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl ])# LT_OPTION_DEFINE # dlopen # ------ LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes ]) AU_DEFUN([AC_LIBTOOL_DLOPEN], [_LT_SET_OPTION([LT_INIT], [dlopen]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the 'dlopen' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) # win32-dll # --------- # Declare package support for building win32 dll's. LT_OPTION_DEFINE([LT_INIT], [win32-dll], [enable_win32_dll=yes case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) AC_CHECK_TOOL(AS, as, false) AC_CHECK_TOOL(DLLTOOL, dlltool, false) AC_CHECK_TOOL(OBJDUMP, objdump, false) ;; esac test -z "$AS" && AS=as _LT_DECL([], [AS], [1], [Assembler program])dnl test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl ])# win32-dll AU_DEFUN([AC_LIBTOOL_WIN32_DLL], [AC_REQUIRE([AC_CANONICAL_HOST])dnl _LT_SET_OPTION([LT_INIT], [win32-dll]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the 'win32-dll' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) # _LT_ENABLE_SHARED([DEFAULT]) # ---------------------------- # implement the --enable-shared flag, and supports the 'shared' and # 'disable-shared' LT_INIT options. # DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'. m4_define([_LT_ENABLE_SHARED], [m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([shared], [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS=$lt_save_ifs ;; esac], [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) _LT_DECL([build_libtool_libs], [enable_shared], [0], [Whether or not to build shared libraries]) ])# _LT_ENABLE_SHARED LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) # Old names: AC_DEFUN([AC_ENABLE_SHARED], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) ]) AC_DEFUN([AC_DISABLE_SHARED], [_LT_SET_OPTION([LT_INIT], [disable-shared]) ]) AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_SHARED], []) dnl AC_DEFUN([AM_DISABLE_SHARED], []) # _LT_ENABLE_STATIC([DEFAULT]) # ---------------------------- # implement the --enable-static flag, and support the 'static' and # 'disable-static' LT_INIT options. # DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'. m4_define([_LT_ENABLE_STATIC], [m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([static], [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS=$lt_save_ifs ;; esac], [enable_static=]_LT_ENABLE_STATIC_DEFAULT) _LT_DECL([build_old_libs], [enable_static], [0], [Whether or not to build static libraries]) ])# _LT_ENABLE_STATIC LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) # Old names: AC_DEFUN([AC_ENABLE_STATIC], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) ]) AC_DEFUN([AC_DISABLE_STATIC], [_LT_SET_OPTION([LT_INIT], [disable-static]) ]) AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_STATIC], []) dnl AC_DEFUN([AM_DISABLE_STATIC], []) # _LT_ENABLE_FAST_INSTALL([DEFAULT]) # ---------------------------------- # implement the --enable-fast-install flag, and support the 'fast-install' # and 'disable-fast-install' LT_INIT options. # DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'. m4_define([_LT_ENABLE_FAST_INSTALL], [m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([fast-install], [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS=$lt_save_ifs ;; esac], [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) _LT_DECL([fast_install], [enable_fast_install], [0], [Whether or not to optimize for fast installation])dnl ])# _LT_ENABLE_FAST_INSTALL LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) # Old names: AU_DEFUN([AC_ENABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the 'fast-install' option into LT_INIT's first parameter.]) ]) AU_DEFUN([AC_DISABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], [disable-fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the 'disable-fast-install' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) # _LT_WITH_AIX_SONAME([DEFAULT]) # ---------------------------------- # implement the --with-aix-soname flag, and support the `aix-soname=aix' # and `aix-soname=both' and `aix-soname=svr4' LT_INIT options. DEFAULT # is either `aix', `both' or `svr4'. If omitted, it defaults to `aix'. m4_define([_LT_WITH_AIX_SONAME], [m4_define([_LT_WITH_AIX_SONAME_DEFAULT], [m4_if($1, svr4, svr4, m4_if($1, both, both, aix))])dnl shared_archive_member_spec= case $host,$enable_shared in power*-*-aix[[5-9]]*,yes) AC_MSG_CHECKING([which variant of shared library versioning to provide]) AC_ARG_WITH([aix-soname], [AS_HELP_STRING([--with-aix-soname=aix|svr4|both], [shared library versioning (aka "SONAME") variant to provide on AIX, @<:@default=]_LT_WITH_AIX_SONAME_DEFAULT[@:>@.])], [case $withval in aix|svr4|both) ;; *) AC_MSG_ERROR([Unknown argument to --with-aix-soname]) ;; esac lt_cv_with_aix_soname=$with_aix_soname], [AC_CACHE_VAL([lt_cv_with_aix_soname], [lt_cv_with_aix_soname=]_LT_WITH_AIX_SONAME_DEFAULT) with_aix_soname=$lt_cv_with_aix_soname]) AC_MSG_RESULT([$with_aix_soname]) if test aix != "$with_aix_soname"; then # For the AIX way of multilib, we name the shared archive member # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o', # and 'shr.imp' or 'shr_64.imp', respectively, for the Import File. # Even when GNU compilers ignore OBJECT_MODE but need '-maix64' flag, # the AIX toolchain works better with OBJECT_MODE set (default 32). if test 64 = "${OBJECT_MODE-32}"; then shared_archive_member_spec=shr_64 else shared_archive_member_spec=shr fi fi ;; *) with_aix_soname=aix ;; esac _LT_DECL([], [shared_archive_member_spec], [0], [Shared archive member basename, for filename based shared library versioning on AIX])dnl ])# _LT_WITH_AIX_SONAME LT_OPTION_DEFINE([LT_INIT], [aix-soname=aix], [_LT_WITH_AIX_SONAME([aix])]) LT_OPTION_DEFINE([LT_INIT], [aix-soname=both], [_LT_WITH_AIX_SONAME([both])]) LT_OPTION_DEFINE([LT_INIT], [aix-soname=svr4], [_LT_WITH_AIX_SONAME([svr4])]) # _LT_WITH_PIC([MODE]) # -------------------- # implement the --with-pic flag, and support the 'pic-only' and 'no-pic' # LT_INIT options. # MODE is either 'yes' or 'no'. If omitted, it defaults to 'both'. m4_define([_LT_WITH_PIC], [AC_ARG_WITH([pic], [AS_HELP_STRING([--with-pic@<:@=PKGS@:>@], [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], [lt_p=${PACKAGE-default} case $withval in yes|no) pic_mode=$withval ;; *) pic_mode=default # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for lt_pkg in $withval; do IFS=$lt_save_ifs if test "X$lt_pkg" = "X$lt_p"; then pic_mode=yes fi done IFS=$lt_save_ifs ;; esac], [pic_mode=m4_default([$1], [default])]) _LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl ])# _LT_WITH_PIC LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) # Old name: AU_DEFUN([AC_LIBTOOL_PICMODE], [_LT_SET_OPTION([LT_INIT], [pic-only]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the 'pic-only' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) ## ----------------- ## ## LTDL_INIT Options ## ## ----------------- ## m4_define([_LTDL_MODE], []) LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], [m4_define([_LTDL_MODE], [nonrecursive])]) LT_OPTION_DEFINE([LTDL_INIT], [recursive], [m4_define([_LTDL_MODE], [recursive])]) LT_OPTION_DEFINE([LTDL_INIT], [subproject], [m4_define([_LTDL_MODE], [subproject])]) m4_define([_LTDL_TYPE], []) LT_OPTION_DEFINE([LTDL_INIT], [installable], [m4_define([_LTDL_TYPE], [installable])]) LT_OPTION_DEFINE([LTDL_INIT], [convenience], [m4_define([_LTDL_TYPE], [convenience])]) aqbanking-6.6.1/m4/ltversion.m40000644000175000017500000000131214605317530013210 00000000000000# ltversion.m4 -- version numbers -*- Autoconf -*- # # Copyright (C) 2004, 2011-2019, 2021-2022 Free Software Foundation, # Inc. # Written by Scott James Remnant, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # @configure_input@ # serial 4245 ltversion.m4 # This file is part of GNU Libtool m4_define([LT_PACKAGE_VERSION], [2.4.7]) m4_define([LT_PACKAGE_REVISION], [2.4.7]) AC_DEFUN([LTVERSION_VERSION], [macro_version='2.4.7' macro_revision='2.4.7' _LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) _LT_DECL(, macro_revision, 0) ]) aqbanking-6.6.1/m4/qt4.m40000664000175000017500000001543614043610744011710 00000000000000# $Id$ # (c) 2010 Martin Preuss # These functions search for QT4 AC_DEFUN([AQ_CHECK_QT4],[ dnl PREREQUISITES: dnl AQ_CHECK_OS must be called before this dnl IN: dnl $1 = "yes" if QT4 is needed, "no" if QT4 is optional dnl You may preset the return variables. dnl All variables which already have a value will not be altered dnl OUT: dnl Variables: dnl have_qt4 - set to "yes" if QT4 exists dnl qt4_includes - path to includes dnl qt4_libs - path to libraries dnl qt4_uic - name and path of the uic tool dnl qt4_moc - name and path of the moc tool dnl Defines: dnl HAVE_QT4 lforce="$1" AC_MSG_CHECKING(if QT4 is allowed) AC_ARG_ENABLE(qt4, [ --enable-qt4 enable qt4 (default=yes)], enable_qt4="$enableval", enable_qt4="yes") AC_MSG_RESULT($enable_qt4) if test "$enable_qt4" = "no"; then qt4_libs="" qt4_includes="" qt4_moc="" qt4_uic="" have_qt4="no" else dnl paths for qt4 includes AC_MSG_CHECKING(for qt4 includes) AC_ARG_WITH(qt4-includes, [ --with-qt4-includes=DIR uses qt4 includes from given dir], [local_qt4_includes="$withval"], [local_qt4_includes="\ $QTDIR/include \ /usr/include/qt4 \ /usr/local/include/qt4 \ /usr/lib/qt4/include \ /usr/local/lib/qt4/include \ /opt/qt4/include \ /usr/include/qt \ /usr/local/include/qt \ /usr/lib/qt/include \ /usr/local/lib/qt/include \ /usr/include \ /usr/local/include \ /opt/qt/include \ /usr/X11R6/include \ " ] ) if test -z "$qt4_includes"; then for i in $local_qt4_includes; do if test -z "$qt4_includes"; then if test -f "$i/Qt/qglobal.h"; then lv1=`grep -h "#define QT_VERSION_STR" $i/Qt/qglobal.h` case $lv1 in *4.*) qt4_includes="-I$i -I$i/Qt -I$i/Qt3Support -I$i/QtCore -I$i/QtGui" qt4_dir=`echo $i | ${SED} 's-/include*--'` break; ;; esac fi fi done fi if test -n "$qt4_includes"; then AC_MSG_RESULT($qt4_includes) else AC_MSG_RESULT(not found) fi # Check for x86_64 architecture; potentially set lib-directory suffix if test "$target_cpu" = "x86_64"; then libdirsuffix="64" else libdirsuffix="" fi dnl paths for qt4 libs AC_MSG_CHECKING(for qt4 libraries) AC_ARG_WITH(qt4-libs, [ --with-qt4-libs=DIR uses qt4 libs from given dir], [local_qt4_libs="$withval"], [local_qt4_libs="\ $qt4_dir/lib${libdirsuffix} \ $QTDIR/lib${libdirsuffix} \ /usr/lib/qt4 \ /usr/local/lib/qt4 \ /usr/lib/qt4/lib${libdirsuffix} \ /usr/local/lib/qt4/lib${libdirsuffix} \ /opt/qt4/lib${libdirsuffix} \ /usr/lib/qt \ /usr/local/lib/qt \ /usr/lib/qt/lib${libdirsuffix} \ /usr/local/lib/qt/lib${libdirsuffix} \ /usr/lib${libdirsuffix} \ /usr/lib${libdirsuffix}/qt4/lib \ /usr/lib${libdirsuffix}/qt-4.5/lib \ /usr/lib${libdirsuffix}/qt-4.6/lib \ /usr/local/lib${libdirsuffix} \ /opt/qt/lib${libdirsuffix} \ /usr/X11R6/lib${libdirsuffix} \ " ] ) # Determine the extension of a shared library; the variable # std_shrext comes from the AC_PROG_LIBTOOL macro. Copied from # libtool. # Shared library suffix. On linux this was set as # shrext_cmds='.so'; but on darwin it is actually a text command. eval std_shrext=\"$shrext_cmds\" if test -n "${std_shrext}"; then std_shrext='.so' fi qt_libname="QtGui" # This is the name of the qt library to search for. if test "x$OSYSTEM" = "xdarwin"; then qt_searchname="lib${qt_libname}.4.dylib" else qt_searchname="lib${qt_libname}${std_shrext}.4" fi if test -z "$qt4_libs"; then AQ_SEARCH_FOR_PATH([$qt_searchname],[$local_qt4_libs]) if test -n "$found_dir" ; then qt4_libs="-L$found_dir -l${qt_libname}" fi fi if test -n "$qt4_libs"; then AC_MSG_RESULT($qt4_libs) else AC_MSG_RESULT(not found) fi dnl paths for qt4 moc AC_MSG_CHECKING(for qt4 moc) if test -z "$qt4_moc"; then AC_ARG_WITH(qt4-moc, [ --with-qt4-moc=FILE uses the given qt4 moc], [qt4_moc="$withval"], [qt4_moc=""] ) fi if test -z "$qt4_moc"; then searchdir="\ $qt4_dir/bin \ $QTDIR/bin \ /usr/lib/qt4/bin \ /usr/local/lib/qt4/bin \ /opt/qt4/bin \ /usr/lib/qt/bin \ /usr/local/lib/qt/bin \ /usr/bin \ /usr/local/bin \ /opt/qt/bin \ /usr/X11R6/bin \ " # search for "moc-qt4" for f in $searchdir; do if test -x $f/moc-qt4; then qt4_moc="$f/moc-qt4" break fi done # fall back to "moc" if test -z "$qt4_moc"; then for f in $searchdir; do if test -x $f/moc; then qt4_moc="$f/moc" break fi done fi fi if test -n "$qt4_moc"; then AC_MSG_RESULT($qt4_moc) else AC_MSG_RESULT(not found) fi dnl paths for qt4 uic AC_MSG_CHECKING(for qt4 uic) if test -z "$qt4_uic"; then AC_ARG_WITH(qt4-uic, [ --with-qt4-uic=FILE uses the given qt4 uic], [qt4_uic="$withval"], [qt4_uic=""] ) searchdir="\ $qt4_dir/bin \ $QTDIR/bin \ /usr/lib/qt4/bin \ /usr/local/lib/qt4/bin \ /opt/qt4/bin \ /usr/lib/qt/bin \ /usr/local/lib/qt/bin \ /usr/bin \ /usr/local/bin \ /opt/qt/bin \ /usr/X11R6/bin \ " # search for "uic-qt4" for f in $searchdir; do if test -x $f/uic-qt4; then qt4_uic="$f/uic-qt4" break fi done # fall back to "uic" if test -z "$qt4_uic"; then for f in $searchdir; do if test -x $f/uic; then qt4_uic="$f/uic" break fi done fi fi if test -n "$qt4_uic"; then AC_MSG_RESULT($qt4_uic) else AC_MSG_RESULT(not found) fi # check if all necessary qt4 components where found if test -z "$qt4_includes" || \ test -z "$qt4_moc" || \ test -z "$qt4_uic" || \ test -z "$qt4_libs"; then qt4_libs="" qt4_moc="" qt4_uic="" qt4_includes="" have_qt4="no" if test "$lforce" = "yes"; then AC_MSG_WARN([ Compilation of QT applications is enabled but I could not find some QT components (see which are missing in messages above). If you don't want to compile QT4 applications please use "--disable-qt4". ]) else AC_MSG_WARN([ QT4 is not explicitly disabled and I could not find some QT4 components (see which are missing in messages above). If you don't want to compile QT4 applications please use "--disable-qt4". ]) fi else dnl TODO: AC_TRY_RUN, check whether qversion.h has matching versions have_qt4="yes" AC_DEFINE(HAVE_QT4, 1, [whether QT4 is available]) fi dnl end of if "$enable_qt4" fi AS_SCRUB_INCLUDE(qt4_includes) AC_SUBST(qt4_libs) AC_SUBST(qt4_includes) AC_SUBST(qt4_moc) AC_SUBST(qt4_uic) ]) aqbanking-6.6.1/m4/libtool.m40000644000175000017500000113165214605317530012643 00000000000000# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- # # Copyright (C) 1996-2001, 2003-2019, 2021-2022 Free Software # Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. m4_define([_LT_COPYING], [dnl # Copyright (C) 2014 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # GNU Libtool is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of of the License, or # (at your option) any later version. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program or library that is built # using GNU Libtool, you may include this file under the same # distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . ]) # serial 59 LT_INIT # LT_PREREQ(VERSION) # ------------------ # Complain and exit if this libtool version is less that VERSION. m4_defun([LT_PREREQ], [m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, [m4_default([$3], [m4_fatal([Libtool version $1 or higher is required], 63)])], [$2])]) # _LT_CHECK_BUILDDIR # ------------------ # Complain if the absolute build directory name contains unusual characters m4_defun([_LT_CHECK_BUILDDIR], [case `pwd` in *\ * | *\ *) AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; esac ]) # LT_INIT([OPTIONS]) # ------------------ AC_DEFUN([LT_INIT], [AC_PREREQ([2.62])dnl We use AC_PATH_PROGS_FEATURE_CHECK AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl AC_BEFORE([$0], [LT_LANG])dnl AC_BEFORE([$0], [LT_OUTPUT])dnl AC_BEFORE([$0], [LTDL_INIT])dnl m4_require([_LT_CHECK_BUILDDIR])dnl dnl Autoconf doesn't catch unexpanded LT_ macros by default: m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 dnl unless we require an AC_DEFUNed macro: AC_REQUIRE([LTOPTIONS_VERSION])dnl AC_REQUIRE([LTSUGAR_VERSION])dnl AC_REQUIRE([LTVERSION_VERSION])dnl AC_REQUIRE([LTOBSOLETE_VERSION])dnl m4_require([_LT_PROG_LTMAIN])dnl _LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}]) dnl Parse OPTIONS _LT_SET_OPTIONS([$0], [$1]) # This can be used to rebuild libtool when needed LIBTOOL_DEPS=$ltmain # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' AC_SUBST(LIBTOOL)dnl _LT_SETUP # Only expand once: m4_define([LT_INIT]) ])# LT_INIT # Old names: AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PROG_LIBTOOL], []) dnl AC_DEFUN([AM_PROG_LIBTOOL], []) # _LT_PREPARE_CC_BASENAME # ----------------------- m4_defun([_LT_PREPARE_CC_BASENAME], [ # Calculate cc_basename. Skip known compiler wrappers and cross-prefix. func_cc_basename () { for cc_temp in @S|@*""; do case $cc_temp in compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; \-*) ;; *) break;; esac done func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` } ])# _LT_PREPARE_CC_BASENAME # _LT_CC_BASENAME(CC) # ------------------- # It would be clearer to call AC_REQUIREs from _LT_PREPARE_CC_BASENAME, # but that macro is also expanded into generated libtool script, which # arranges for $SED and $ECHO to be set by different means. m4_defun([_LT_CC_BASENAME], [m4_require([_LT_PREPARE_CC_BASENAME])dnl AC_REQUIRE([_LT_DECL_SED])dnl AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl func_cc_basename $1 cc_basename=$func_cc_basename_result ]) # _LT_FILEUTILS_DEFAULTS # ---------------------- # It is okay to use these file commands and assume they have been set # sensibly after 'm4_require([_LT_FILEUTILS_DEFAULTS])'. m4_defun([_LT_FILEUTILS_DEFAULTS], [: ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} ])# _LT_FILEUTILS_DEFAULTS # _LT_SETUP # --------- m4_defun([_LT_SETUP], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl _LT_DECL([], [PATH_SEPARATOR], [1], [The PATH separator for the build system])dnl dnl _LT_DECL([], [host_alias], [0], [The host system])dnl _LT_DECL([], [host], [0])dnl _LT_DECL([], [host_os], [0])dnl dnl _LT_DECL([], [build_alias], [0], [The build system])dnl _LT_DECL([], [build], [0])dnl _LT_DECL([], [build_os], [0])dnl dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl dnl AC_REQUIRE([AC_PROG_LN_S])dnl test -z "$LN_S" && LN_S="ln -s" _LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl dnl AC_REQUIRE([LT_CMD_MAX_LEN])dnl _LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl _LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl m4_require([_LT_CMD_RELOAD])dnl m4_require([_LT_DECL_FILECMD])dnl m4_require([_LT_CHECK_MAGIC_METHOD])dnl m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl m4_require([_LT_CMD_OLD_ARCHIVE])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_WITH_SYSROOT])dnl m4_require([_LT_CMD_TRUNCATE])dnl _LT_CONFIG_LIBTOOL_INIT([ # See if we are running on zsh, and set the options that allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi ]) if test -n "${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi _LT_CHECK_OBJDIR m4_require([_LT_TAG_COMPILER])dnl case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test set != "${COLLECT_NAMES+set}"; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a '.a' archive for static linking (except MSVC and # ICC, which need '.lib'). libext=a with_gnu_ld=$lt_cv_prog_gnu_ld old_CC=$CC old_CFLAGS=$CFLAGS # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o _LT_CC_BASENAME([$compiler]) # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then _LT_PATH_MAGIC fi ;; esac # Use C for the default configuration in the libtool script LT_SUPPORTED_TAG([CC]) _LT_LANG_C_CONFIG _LT_LANG_DEFAULT_CONFIG _LT_CONFIG_COMMANDS ])# _LT_SETUP # _LT_PREPARE_SED_QUOTE_VARS # -------------------------- # Define a few sed substitution that help us do robust quoting. m4_defun([_LT_PREPARE_SED_QUOTE_VARS], [# Backslashify metacharacters that are still active within # double-quoted strings. sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\([["`\\]]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' ]) # _LT_PROG_LTMAIN # --------------- # Note that this code is called both from 'configure', and 'config.status' # now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, # 'config.status' has no value for ac_aux_dir unless we are using Automake, # so we pass a copy along to make sure it has a sensible value anyway. m4_defun([_LT_PROG_LTMAIN], [m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl _LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) ltmain=$ac_aux_dir/ltmain.sh ])# _LT_PROG_LTMAIN ## ------------------------------------- ## ## Accumulate code for creating libtool. ## ## ------------------------------------- ## # So that we can recreate a full libtool script including additional # tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS # in macros and then make a single call at the end using the 'libtool' # label. # _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) # ---------------------------------------- # Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL_INIT], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_INIT], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_INIT]) # _LT_CONFIG_LIBTOOL([COMMANDS]) # ------------------------------ # Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) # _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) # ----------------------------------------------------- m4_defun([_LT_CONFIG_SAVE_COMMANDS], [_LT_CONFIG_LIBTOOL([$1]) _LT_CONFIG_LIBTOOL_INIT([$2]) ]) # _LT_FORMAT_COMMENT([COMMENT]) # ----------------------------- # Add leading comment marks to the start of each line, and a trailing # full-stop to the whole comment if one is not present already. m4_define([_LT_FORMAT_COMMENT], [m4_ifval([$1], [ m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) )]) ## ------------------------ ## ## FIXME: Eliminate VARNAME ## ## ------------------------ ## # _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) # ------------------------------------------------------------------- # CONFIGNAME is the name given to the value in the libtool script. # VARNAME is the (base) name used in the configure script. # VALUE may be 0, 1 or 2 for a computed quote escaped value based on # VARNAME. Any other value will be used directly. m4_define([_LT_DECL], [lt_if_append_uniq([lt_decl_varnames], [$2], [, ], [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], [m4_ifval([$1], [$1], [$2])]) lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) m4_ifval([$4], [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) lt_dict_add_subkey([lt_decl_dict], [$2], [tagged?], [m4_ifval([$5], [yes], [no])])]) ]) # _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) # -------------------------------------------------------- m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) # lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_tag_varnames], [_lt_decl_filter([tagged?], [yes], $@)]) # _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) # --------------------------------------------------------- m4_define([_lt_decl_filter], [m4_case([$#], [0], [m4_fatal([$0: too few arguments: $#])], [1], [m4_fatal([$0: too few arguments: $#: $1])], [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], [lt_dict_filter([lt_decl_dict], $@)])[]dnl ]) # lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) # -------------------------------------------------- m4_define([lt_decl_quote_varnames], [_lt_decl_filter([value], [1], $@)]) # lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_dquote_varnames], [_lt_decl_filter([value], [2], $@)]) # lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_varnames_tagged], [m4_assert([$# <= 2])dnl _$0(m4_quote(m4_default([$1], [[, ]])), m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) m4_define([_lt_decl_varnames_tagged], [m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) # lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_all_varnames], [_$0(m4_quote(m4_default([$1], [[, ]])), m4_if([$2], [], m4_quote(lt_decl_varnames), m4_quote(m4_shift($@))))[]dnl ]) m4_define([_lt_decl_all_varnames], [lt_join($@, lt_decl_varnames_tagged([$1], lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl ]) # _LT_CONFIG_STATUS_DECLARE([VARNAME]) # ------------------------------------ # Quote a variable value, and forward it to 'config.status' so that its # declaration there will have the same value as in 'configure'. VARNAME # must have a single quote delimited value for this to work. m4_define([_LT_CONFIG_STATUS_DECLARE], [$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`']) # _LT_CONFIG_STATUS_DECLARATIONS # ------------------------------ # We delimit libtool config variables with single quotes, so when # we write them to config.status, we have to be sure to quote all # embedded single quotes properly. In configure, this macro expands # each variable declared with _LT_DECL (and _LT_TAGDECL) into: # # ='`$ECHO "$" | $SED "$delay_single_quote_subst"`' m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], [m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAGS # ---------------- # Output comment and list of tags supported by the script m4_defun([_LT_LIBTOOL_TAGS], [_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl available_tags='_LT_TAGS'dnl ]) # _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) # ----------------------------------- # Extract the dictionary values for VARNAME (optionally with TAG) and # expand to a commented shell variable setting: # # # Some comment about what VAR is for. # visible_name=$lt_internal_name m4_define([_LT_LIBTOOL_DECLARE], [_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [description])))[]dnl m4_pushdef([_libtool_name], m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), [0], [_libtool_name=[$]$1], [1], [_libtool_name=$lt_[]$1], [2], [_libtool_name=$lt_[]$1], [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl ]) # _LT_LIBTOOL_CONFIG_VARS # ----------------------- # Produce commented declarations of non-tagged libtool config variables # suitable for insertion in the LIBTOOL CONFIG section of the 'libtool' # script. Tagged libtool config variables (even for the LIBTOOL CONFIG # section) are produced by _LT_LIBTOOL_TAG_VARS. m4_defun([_LT_LIBTOOL_CONFIG_VARS], [m4_foreach([_lt_var], m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAG_VARS(TAG) # ------------------------- m4_define([_LT_LIBTOOL_TAG_VARS], [m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) # _LT_TAGVAR(VARNAME, [TAGNAME]) # ------------------------------ m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) # _LT_CONFIG_COMMANDS # ------------------- # Send accumulated output to $CONFIG_STATUS. Thanks to the lists of # variables for single and double quote escaping we saved from calls # to _LT_DECL, we can put quote escaped variables declarations # into 'config.status', and then the shell code to quote escape them in # for loops in 'config.status'. Finally, any additional code accumulated # from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. m4_defun([_LT_CONFIG_COMMANDS], [AC_PROVIDE_IFELSE([LT_OUTPUT], dnl If the libtool generation code has been placed in $CONFIG_LT, dnl instead of duplicating it all over again into config.status, dnl then we will have config.status run $CONFIG_LT later, so it dnl needs to know what name is stored there: [AC_CONFIG_COMMANDS([libtool], [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], dnl If the libtool generation code is destined for config.status, dnl expand the accumulated commands and init code now: [AC_CONFIG_COMMANDS([libtool], [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) ])#_LT_CONFIG_COMMANDS # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], [ # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' _LT_CONFIG_STATUS_DECLARATIONS LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$[]1 _LTECHO_EOF' } # Quote evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_quote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_dquote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done _LT_OUTPUT_LIBTOOL_INIT ]) # _LT_GENERATED_FILE_INIT(FILE, [COMMENT]) # ------------------------------------ # Generate a child script FILE with all initialization necessary to # reuse the environment learned by the parent script, and make the # file executable. If COMMENT is supplied, it is inserted after the # '#!' sequence but before initialization text begins. After this # macro, additional text can be appended to FILE to form the body of # the child script. The macro ends with non-zero status if the # file could not be fully written (such as if the disk is full). m4_ifdef([AS_INIT_GENERATED], [m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])], [m4_defun([_LT_GENERATED_FILE_INIT], [m4_require([AS_PREPARE])]dnl [m4_pushdef([AS_MESSAGE_LOG_FD])]dnl [lt_write_fail=0 cat >$1 <<_ASEOF || lt_write_fail=1 #! $SHELL # Generated by $as_me. $2 SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$1 <<\_ASEOF || lt_write_fail=1 AS_SHELL_SANITIZE _AS_PREPARE exec AS_MESSAGE_FD>&1 _ASEOF test 0 = "$lt_write_fail" && chmod +x $1[]dnl m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT # LT_OUTPUT # --------- # This macro allows early generation of the libtool script (before # AC_OUTPUT is called), incase it is used in configure for compilation # tests. AC_DEFUN([LT_OUTPUT], [: ${CONFIG_LT=./config.lt} AC_MSG_NOTICE([creating $CONFIG_LT]) _LT_GENERATED_FILE_INIT(["$CONFIG_LT"], [# Run this file to recreate a libtool stub with the current configuration.]) cat >>"$CONFIG_LT" <<\_LTEOF lt_cl_silent=false exec AS_MESSAGE_LOG_FD>>config.log { echo AS_BOX([Running $as_me.]) } >&AS_MESSAGE_LOG_FD lt_cl_help="\ '$as_me' creates a local libtool stub from the current configuration, for use in further configure time tests before the real libtool is generated. Usage: $[0] [[OPTIONS]] -h, --help print this help, then exit -V, --version print version number, then exit -q, --quiet do not print progress messages -d, --debug don't remove temporary files Report bugs to ." lt_cl_version="\ m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) configured by $[0], generated by m4_PACKAGE_STRING. Copyright (C) 2011 Free Software Foundation, Inc. This config.lt script is free software; the Free Software Foundation gives unlimited permision to copy, distribute and modify it." while test 0 != $[#] do case $[1] in --version | --v* | -V ) echo "$lt_cl_version"; exit 0 ;; --help | --h* | -h ) echo "$lt_cl_help"; exit 0 ;; --debug | --d* | -d ) debug=: ;; --quiet | --q* | --silent | --s* | -q ) lt_cl_silent=: ;; -*) AC_MSG_ERROR([unrecognized option: $[1] Try '$[0] --help' for more information.]) ;; *) AC_MSG_ERROR([unrecognized argument: $[1] Try '$[0] --help' for more information.]) ;; esac shift done if $lt_cl_silent; then exec AS_MESSAGE_FD>/dev/null fi _LTEOF cat >>"$CONFIG_LT" <<_LTEOF _LT_OUTPUT_LIBTOOL_COMMANDS_INIT _LTEOF cat >>"$CONFIG_LT" <<\_LTEOF AC_MSG_NOTICE([creating $ofile]) _LT_OUTPUT_LIBTOOL_COMMANDS AS_EXIT(0) _LTEOF chmod +x "$CONFIG_LT" # configure is writing to config.log, but config.lt does its own redirection, # appending to config.log, which fails on DOS, as config.log is still kept # open by configure. Here we exec the FD to /dev/null, effectively closing # config.log, so it can be properly (re)opened and appended to by config.lt. lt_cl_success=: test yes = "$silent" && lt_config_lt_args="$lt_config_lt_args --quiet" exec AS_MESSAGE_LOG_FD>/dev/null $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false exec AS_MESSAGE_LOG_FD>>config.log $lt_cl_success || AS_EXIT(1) ])# LT_OUTPUT # _LT_CONFIG(TAG) # --------------- # If TAG is the built-in tag, create an initial libtool script with a # default configuration from the untagged config vars. Otherwise add code # to config.status for appending the configuration named by TAG from the # matching tagged config vars. m4_defun([_LT_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_CONFIG_SAVE_COMMANDS([ m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl m4_if(_LT_TAG, [C], [ # See if we are running on zsh, and set the options that allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi cfgfile=${ofile}T trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # Generated automatically by $as_me ($PACKAGE) $VERSION # NOTE: Changes made to this file will be lost: look at ltmain.sh. # Provide generalized library-building support services. # Written by Gordon Matzigkeit, 1996 _LT_COPYING _LT_LIBTOOL_TAGS # Configured defaults for sys_lib_dlsearch_path munging. : \${LT_SYS_LIBRARY_PATH="$configure_time_lt_sys_library_path"} # ### BEGIN LIBTOOL CONFIG _LT_LIBTOOL_CONFIG_VARS _LT_LIBTOOL_TAG_VARS # ### END LIBTOOL CONFIG _LT_EOF cat <<'_LT_EOF' >> "$cfgfile" # ### BEGIN FUNCTIONS SHARED WITH CONFIGURE _LT_PREPARE_MUNGE_PATH_LIST _LT_PREPARE_CC_BASENAME # ### END FUNCTIONS SHARED WITH CONFIGURE _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test set != "${COLLECT_NAMES+set}"; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac _LT_PROG_LTMAIN # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? $SED '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" ], [cat <<_LT_EOF >> "$ofile" dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded dnl in a comment (ie after a #). # ### BEGIN LIBTOOL TAG CONFIG: $1 _LT_LIBTOOL_TAG_VARS(_LT_TAG) # ### END LIBTOOL TAG CONFIG: $1 _LT_EOF ])dnl /m4_if ], [m4_if([$1], [], [ PACKAGE='$PACKAGE' VERSION='$VERSION' RM='$RM' ofile='$ofile'], []) ])dnl /_LT_CONFIG_SAVE_COMMANDS ])# _LT_CONFIG # LT_SUPPORTED_TAG(TAG) # --------------------- # Trace this macro to discover what tags are supported by the libtool # --tag option, using: # autoconf --trace 'LT_SUPPORTED_TAG:$1' AC_DEFUN([LT_SUPPORTED_TAG], []) # C support is built-in for now m4_define([_LT_LANG_C_enabled], []) m4_define([_LT_TAGS], []) # LT_LANG(LANG) # ------------- # Enable libtool support for the given language if not already enabled. AC_DEFUN([LT_LANG], [AC_BEFORE([$0], [LT_OUTPUT])dnl m4_case([$1], [C], [_LT_LANG(C)], [C++], [_LT_LANG(CXX)], [Go], [_LT_LANG(GO)], [Java], [_LT_LANG(GCJ)], [Fortran 77], [_LT_LANG(F77)], [Fortran], [_LT_LANG(FC)], [Windows Resource], [_LT_LANG(RC)], [m4_ifdef([_LT_LANG_]$1[_CONFIG], [_LT_LANG($1)], [m4_fatal([$0: unsupported language: "$1"])])])dnl ])# LT_LANG # _LT_LANG(LANGNAME) # ------------------ m4_defun([_LT_LANG], [m4_ifdef([_LT_LANG_]$1[_enabled], [], [LT_SUPPORTED_TAG([$1])dnl m4_append([_LT_TAGS], [$1 ])dnl m4_define([_LT_LANG_]$1[_enabled], [])dnl _LT_LANG_$1_CONFIG($1)])dnl ])# _LT_LANG m4_ifndef([AC_PROG_GO], [ ############################################################ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_GO. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # ############################################################ m4_defun([AC_PROG_GO], [AC_LANG_PUSH(Go)dnl AC_ARG_VAR([GOC], [Go compiler command])dnl AC_ARG_VAR([GOFLAGS], [Go compiler flags])dnl _AC_ARG_VAR_LDFLAGS()dnl AC_CHECK_TOOL(GOC, gccgo) if test -z "$GOC"; then if test -n "$ac_tool_prefix"; then AC_CHECK_PROG(GOC, [${ac_tool_prefix}gccgo], [${ac_tool_prefix}gccgo]) fi fi if test -z "$GOC"; then AC_CHECK_PROG(GOC, gccgo, gccgo, false) fi ])#m4_defun ])#m4_ifndef # _LT_LANG_DEFAULT_CONFIG # ----------------------- m4_defun([_LT_LANG_DEFAULT_CONFIG], [AC_PROVIDE_IFELSE([AC_PROG_CXX], [LT_LANG(CXX)], [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) AC_PROVIDE_IFELSE([AC_PROG_F77], [LT_LANG(F77)], [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) AC_PROVIDE_IFELSE([AC_PROG_FC], [LT_LANG(FC)], [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal dnl pulling things in needlessly. AC_PROVIDE_IFELSE([AC_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([LT_PROG_GCJ], [LT_LANG(GCJ)], [m4_ifdef([AC_PROG_GCJ], [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([A][M_PROG_GCJ], [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([LT_PROG_GCJ], [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) AC_PROVIDE_IFELSE([AC_PROG_GO], [LT_LANG(GO)], [m4_define([AC_PROG_GO], defn([AC_PROG_GO])[LT_LANG(GO)])]) AC_PROVIDE_IFELSE([LT_PROG_RC], [LT_LANG(RC)], [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) ])# _LT_LANG_DEFAULT_CONFIG # Obsolete macros: AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_CXX], []) dnl AC_DEFUN([AC_LIBTOOL_F77], []) dnl AC_DEFUN([AC_LIBTOOL_FC], []) dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) dnl AC_DEFUN([AC_LIBTOOL_RC], []) # _LT_TAG_COMPILER # ---------------- m4_defun([_LT_TAG_COMPILER], [AC_REQUIRE([AC_PROG_CC])dnl _LT_DECL([LTCC], [CC], [1], [A C compiler])dnl _LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl _LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl _LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC ])# _LT_TAG_COMPILER # _LT_COMPILER_BOILERPLATE # ------------------------ # Check for compiler boilerplate output or warnings with # the simple compiler test code. m4_defun([_LT_COMPILER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ])# _LT_COMPILER_BOILERPLATE # _LT_LINKER_BOILERPLATE # ---------------------- # Check for linker boilerplate output or warnings with # the simple link test code. m4_defun([_LT_LINKER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* ])# _LT_LINKER_BOILERPLATE # _LT_REQUIRED_DARWIN_CHECKS # ------------------------- m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ case $host_os in rhapsody* | darwin*) AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) AC_CHECK_TOOL([LIPO], [lipo], [:]) AC_CHECK_TOOL([OTOOL], [otool], [:]) AC_CHECK_TOOL([OTOOL64], [otool64], [:]) _LT_DECL([], [DSYMUTIL], [1], [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) _LT_DECL([], [NMEDIT], [1], [Tool to change global to local symbols on Mac OS X]) _LT_DECL([], [LIPO], [1], [Tool to manipulate fat objects and archives on Mac OS X]) _LT_DECL([], [OTOOL], [1], [ldd/readelf like tool for Mach-O binaries on Mac OS X]) _LT_DECL([], [OTOOL64], [1], [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], [lt_cv_apple_cc_single_mod=no if test -z "$LT_MULTI_MODULE"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? # If there is a non-empty error log, and "single_module" # appears in it, assume the flag caused a linker warning if test -s conftest.err && $GREP single_module conftest.err; then cat conftest.err >&AS_MESSAGE_LOG_FD # Otherwise, if the output was created with a 0 exit code from # the compiler, it worked. elif test -f libconftest.dylib && test 0 = "$_lt_result"; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -rf libconftest.dylib* rm -f conftest.* fi]) AC_CACHE_CHECK([for -exported_symbols_list linker flag], [lt_cv_ld_exported_symbols_list], [lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [lt_cv_ld_exported_symbols_list=yes], [lt_cv_ld_exported_symbols_list=no]) LDFLAGS=$save_LDFLAGS ]) AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load], [lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} _LT_EOF echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD echo "$AR $AR_FLAGS libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD $AR $AR_FLAGS libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD cat > conftest.c << _LT_EOF int main() { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err _lt_result=$? if test -s conftest.err && $GREP force_load conftest.err; then cat conftest.err >&AS_MESSAGE_LOG_FD elif test -f conftest && test 0 = "$_lt_result" && $GREP forced_load conftest >/dev/null 2>&1; then lt_cv_ld_force_load=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -f conftest.err libconftest.a conftest conftest.c rm -rf conftest.dSYM ]) case $host_os in rhapsody* | darwin1.[[012]]) _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; darwin*) case $MACOSX_DEPLOYMENT_TARGET,$host in 10.[[012]],*|,*powerpc*-darwin[[5-8]]*) _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; *) _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test yes = "$lt_cv_apple_cc_single_mod"; then _lt_dar_single_mod='$single_module' fi if test yes = "$lt_cv_ld_exported_symbols_list"; then _lt_dar_export_syms=' $wl-exported_symbols_list,$output_objdir/$libname-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/$libname-symbols.expsym $lib' fi if test : != "$DSYMUTIL" && test no = "$lt_cv_ld_force_load"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac ]) # _LT_DARWIN_LINKER_FEATURES([TAG]) # --------------------------------- # Checks for linker and compiler features on darwin m4_defun([_LT_DARWIN_LINKER_FEATURES], [ m4_require([_LT_REQUIRED_DARWIN_CHECKS]) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported if test yes = "$lt_cv_ld_force_load"; then _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes], [FC], [_LT_TAGVAR(compiler_needs_object, $1)=yes]) else _LT_TAGVAR(whole_archive_flag_spec, $1)='' fi _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=$_lt_dar_allow_undefined case $cc_basename in ifort*|nagfor*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test yes = "$_lt_dar_can_shared"; then output_verbose_link_cmd=func_echo_all _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil" _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil" _LT_TAGVAR(archive_expsym_cmds, $1)="$SED 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil" _LT_TAGVAR(module_expsym_cmds, $1)="$SED -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil" m4_if([$1], [CXX], [ if test yes != "$lt_cv_apple_cc_single_mod"; then _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dsymutil" _LT_TAGVAR(archive_expsym_cmds, $1)="$SED 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dar_export_syms$_lt_dsymutil" fi ],[]) else _LT_TAGVAR(ld_shlibs, $1)=no fi ]) # _LT_SYS_MODULE_PATH_AIX([TAGNAME]) # ---------------------------------- # Links a minimal program and checks the executable # for the system default hardcoded library path. In most cases, # this is /usr/lib:/lib, but when the MPI compilers are used # the location of the communication and MPI libs are included too. # If we don't find anything, use the default library path according # to the aix ld manual. # Store the results from the different compilers for each TAGNAME. # Allow to override them for all tags through lt_cv_aix_libpath. m4_defun([_LT_SYS_MODULE_PATH_AIX], [m4_require([_LT_DECL_SED])dnl if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])], [AC_LINK_IFELSE([AC_LANG_PROGRAM],[ lt_aix_libpath_sed='[ /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }]' _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi],[]) if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=/usr/lib:/lib fi ]) aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1]) fi ])# _LT_SYS_MODULE_PATH_AIX # _LT_SHELL_INIT(ARG) # ------------------- m4_define([_LT_SHELL_INIT], [m4_divert_text([M4SH-INIT], [$1 ])])# _LT_SHELL_INIT # _LT_PROG_ECHO_BACKSLASH # ----------------------- # Find how we can fake an echo command that does not interpret backslash. # In particular, with Autoconf 2.60 or later we add some code to the start # of the generated configure script that will find a shell with a builtin # printf (that we can use as an echo command). m4_defun([_LT_PROG_ECHO_BACKSLASH], [ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO AC_MSG_CHECKING([how to print strings]) # Test print first, because it will be a builtin if present. if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='print -r --' elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='printf %s\n' else # Use this function as a fallback that always works. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $[]1 _LTECHO_EOF' } ECHO='func_fallback_echo' fi # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } case $ECHO in printf*) AC_MSG_RESULT([printf]) ;; print*) AC_MSG_RESULT([print -r]) ;; *) AC_MSG_RESULT([cat]) ;; esac m4_ifdef([_AS_DETECT_SUGGESTED], [_AS_DETECT_SUGGESTED([ test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || ( ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO PATH=/empty FPATH=/empty; export PATH FPATH test "X`printf %s $ECHO`" = "X$ECHO" \ || test "X`print -r -- $ECHO`" = "X$ECHO" )])]) _LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) _LT_DECL([], [ECHO], [1], [An echo program that protects backslashes]) ])# _LT_PROG_ECHO_BACKSLASH # _LT_WITH_SYSROOT # ---------------- AC_DEFUN([_LT_WITH_SYSROOT], [m4_require([_LT_DECL_SED])dnl AC_MSG_CHECKING([for sysroot]) AC_ARG_WITH([sysroot], [AS_HELP_STRING([--with-sysroot@<:@=DIR@:>@], [Search for dependent libraries within DIR (or the compiler's sysroot if not specified).])], [], [with_sysroot=no]) dnl lt_sysroot will always be passed unquoted. We quote it here dnl in case the user passed a directory name. lt_sysroot= case $with_sysroot in #( yes) if test yes = "$GCC"; then lt_sysroot=`$CC --print-sysroot 2>/dev/null` fi ;; #( /*) lt_sysroot=`echo "$with_sysroot" | $SED -e "$sed_quote_subst"` ;; #( no|'') ;; #( *) AC_MSG_RESULT([$with_sysroot]) AC_MSG_ERROR([The sysroot must be an absolute path.]) ;; esac AC_MSG_RESULT([${lt_sysroot:-no}]) _LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl [dependent libraries, and where our libraries should be installed.])]) # _LT_ENABLE_LOCK # --------------- m4_defun([_LT_ENABLE_LOCK], [AC_ARG_ENABLE([libtool-lock], [AS_HELP_STRING([--disable-libtool-lock], [avoid locking (might break parallel builds)])]) test no = "$enable_libtool_lock" || enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out what ABI is being produced by ac_compile, and set mode # options accordingly. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `$FILECMD conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE=32 ;; *ELF-64*) HPUX_IA64_MODE=64 ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then if test yes = "$lt_cv_prog_gnu_ld"; then case `$FILECMD conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `$FILECMD conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; mips64*-*linux*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then emul=elf case `$FILECMD conftest.$ac_objext` in *32-bit*) emul="${emul}32" ;; *64-bit*) emul="${emul}64" ;; esac case `$FILECMD conftest.$ac_objext` in *MSB*) emul="${emul}btsmip" ;; *LSB*) emul="${emul}ltsmip" ;; esac case `$FILECMD conftest.$ac_objext` in *N32*) emul="${emul}n32" ;; esac LD="${LD-ld} -m $emul" fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. Note that the listed cases only cover the # situations where additional linker options are needed (such as when # doing 32-bit compilation for a host where ld defaults to 64-bit, or # vice versa); the common cases where no linker options are needed do # not appear in the list. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `$FILECMD conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) case `$FILECMD conftest.o` in *x86-64*) LD="${LD-ld} -m elf32_x86_64" ;; *) LD="${LD-ld} -m elf_i386" ;; esac ;; powerpc64le-*linux*) LD="${LD-ld} -m elf32lppclinux" ;; powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; powerpcle-*linux*) LD="${LD-ld} -m elf64lppc" ;; powerpc-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS=$CFLAGS CFLAGS="$CFLAGS -belf" AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, [AC_LANG_PUSH(C) AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) AC_LANG_POP]) if test yes != "$lt_cv_cc_needs_belf"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS=$SAVE_CFLAGS fi ;; *-*solaris*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `$FILECMD conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) case $host in i?86-*-solaris*|x86_64-*-solaris*) LD="${LD-ld} -m elf_x86_64" ;; sparc*-*-solaris*) LD="${LD-ld} -m elf64_sparc" ;; esac # GNU ld 2.21 introduced _sol2 emulations. Use them if available. if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then LD=${LD-ld}_sol2 fi ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks=$enable_libtool_lock ])# _LT_ENABLE_LOCK # _LT_PROG_AR # ----------- m4_defun([_LT_PROG_AR], [AC_CHECK_TOOLS(AR, [ar], false) : ${AR=ar} _LT_DECL([], [AR], [1], [The archiver]) # Use ARFLAGS variable as AR's operation code to sync the variable naming with # Automake. If both AR_FLAGS and ARFLAGS are specified, AR_FLAGS should have # higher priority because thats what people were doing historically (setting # ARFLAGS for automake and AR_FLAGS for libtool). FIXME: Make the AR_FLAGS # variable obsoleted/removed. test ${AR_FLAGS+y} || AR_FLAGS=${ARFLAGS-cr} lt_ar_flags=$AR_FLAGS _LT_DECL([], [lt_ar_flags], [0], [Flags to create an archive (by configure)]) # Make AR_FLAGS overridable by 'make ARFLAGS='. Don't try to run-time override # by AR_FLAGS because that was never working and AR_FLAGS is about to die. _LT_DECL([], [AR_FLAGS], [\@S|@{ARFLAGS-"\@S|@lt_ar_flags"}], [Flags to create an archive]) AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file], [lt_cv_ar_at_file=no AC_COMPILE_IFELSE([AC_LANG_PROGRAM], [echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD' AC_TRY_EVAL([lt_ar_try]) if test 0 -eq "$ac_status"; then # Ensure the archiver fails upon bogus file names. rm -f conftest.$ac_objext libconftest.a AC_TRY_EVAL([lt_ar_try]) if test 0 -ne "$ac_status"; then lt_cv_ar_at_file=@ fi fi rm -f conftest.* libconftest.a ]) ]) if test no = "$lt_cv_ar_at_file"; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file fi _LT_DECL([], [archiver_list_spec], [1], [How to feed a file listing to the archiver]) ])# _LT_PROG_AR # _LT_CMD_OLD_ARCHIVE # ------------------- m4_defun([_LT_CMD_OLD_ARCHIVE], [_LT_PROG_AR AC_CHECK_TOOL(STRIP, strip, :) test -z "$STRIP" && STRIP=: _LT_DECL([], [STRIP], [1], [A symbol stripping program]) AC_CHECK_TOOL(RANLIB, ranlib, :) test -z "$RANLIB" && RANLIB=: _LT_DECL([], [RANLIB], [1], [Commands used to install an old-style archive]) # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in bitrig* | openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" fi case $host_os in darwin*) lock_old_archive_extraction=yes ;; *) lock_old_archive_extraction=no ;; esac _LT_DECL([], [old_postinstall_cmds], [2]) _LT_DECL([], [old_postuninstall_cmds], [2]) _LT_TAGDECL([], [old_archive_cmds], [2], [Commands used to build an old-style archive]) _LT_DECL([], [lock_old_archive_extraction], [0], [Whether to use a lock for old archive extraction]) ])# _LT_CMD_OLD_ARCHIVE # _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------------------- # Check whether the given compiler option works AC_DEFUN([_LT_COMPILER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$3" ## exclude from sc_useless_quotes_in_assignment # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi fi $RM conftest* ]) if test yes = "[$]$2"; then m4_if([$5], , :, [$5]) else m4_if([$6], , :, [$6]) fi ])# _LT_COMPILER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) # _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------- # Check whether the given linker option works AC_DEFUN([_LT_LINKER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS $3" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&AS_MESSAGE_LOG_FD $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi else $2=yes fi fi $RM -r conftest* LDFLAGS=$save_LDFLAGS ]) if test yes = "[$]$2"; then m4_if([$4], , :, [$4]) else m4_if([$5], , :, [$5]) fi ])# _LT_LINKER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) # LT_CMD_MAX_LEN #--------------- AC_DEFUN([LT_CMD_MAX_LEN], [AC_REQUIRE([AC_CANONICAL_HOST])dnl # find the maximum length of command line arguments AC_MSG_CHECKING([the maximum length of command line arguments]) AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl i=0 teststring=ABCD case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; mint*) # On MiNT this can take a long time and run out of memory. lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; bitrig* | darwin* | dragonfly* | freebsd* | midnightbsd* | netbsd* | openbsd*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; os2*) # The test takes a long time on OS/2. lt_cv_sys_max_cmd_len=8192 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | $SED 's/.*[[ ]]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len" && \ test undefined != "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test X`env echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && test 17 != "$i" # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac ]) if test -n "$lt_cv_sys_max_cmd_len"; then AC_MSG_RESULT($lt_cv_sys_max_cmd_len) else AC_MSG_RESULT(none) fi max_cmd_len=$lt_cv_sys_max_cmd_len _LT_DECL([], [max_cmd_len], [0], [What is the maximum length of a command?]) ])# LT_CMD_MAX_LEN # Old name: AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) # _LT_HEADER_DLFCN # ---------------- m4_defun([_LT_HEADER_DLFCN], [AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl ])# _LT_HEADER_DLFCN # _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, # ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) # ---------------------------------------------------------------- m4_defun([_LT_TRY_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test yes = "$cross_compiling"; then : [$4] else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF [#line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisibility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; }] _LT_EOF if AC_TRY_EVAL(ac_link) && test -s "conftest$ac_exeext" 2>/dev/null; then (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) $1 ;; x$lt_dlneed_uscore) $2 ;; x$lt_dlunknown|x*) $3 ;; esac else : # compilation failed $3 fi fi rm -fr conftest* ])# _LT_TRY_DLOPEN_SELF # LT_SYS_DLOPEN_SELF # ------------------ AC_DEFUN([LT_SYS_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test yes != "$enable_dlopen"; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen=load_add_on lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen=LoadLibrary lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen=dlopen lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl],[ lt_cv_dlopen=dyld lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ]) ;; tpf*) # Don't try to run any link tests for TPF. We know it's impossible # because TPF is a cross-compiler, and we know how we open DSOs. lt_cv_dlopen=dlopen lt_cv_dlopen_libs= lt_cv_dlopen_self=no ;; *) AC_CHECK_FUNC([shl_load], [lt_cv_dlopen=shl_load], [AC_CHECK_LIB([dld], [shl_load], [lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld], [AC_CHECK_FUNC([dlopen], [lt_cv_dlopen=dlopen], [AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl], [AC_CHECK_LIB([svld], [dlopen], [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld], [AC_CHECK_LIB([dld], [dld_link], [lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld]) ]) ]) ]) ]) ]) ;; esac if test no = "$lt_cv_dlopen"; then enable_dlopen=no else enable_dlopen=yes fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS=$CPPFLAGS test yes = "$ac_cv_header_dlfcn_h" && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS=$LDFLAGS wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS=$LIBS LIBS="$lt_cv_dlopen_libs $LIBS" AC_CACHE_CHECK([whether a program can dlopen itself], lt_cv_dlopen_self, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) ]) if test yes = "$lt_cv_dlopen_self"; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" AC_CACHE_CHECK([whether a statically linked program can dlopen itself], lt_cv_dlopen_self_static, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) ]) fi CPPFLAGS=$save_CPPFLAGS LDFLAGS=$save_LDFLAGS LIBS=$save_LIBS ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi _LT_DECL([dlopen_support], [enable_dlopen], [0], [Whether dlopen is supported]) _LT_DECL([dlopen_self], [enable_dlopen_self], [0], [Whether dlopen of programs is supported]) _LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], [Whether dlopen of statically linked programs is supported]) ])# LT_SYS_DLOPEN_SELF # Old name: AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) # _LT_COMPILER_C_O([TAGNAME]) # --------------------------- # Check to see if options -c and -o are simultaneously supported by compiler. # This macro does not hard code the compiler like AC_PROG_CC_C_O. m4_defun([_LT_COMPILER_C_O], [m4_require([_LT_DECL_SED])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes fi fi chmod u+w . 2>&AS_MESSAGE_LOG_FD $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* ]) _LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], [Does compiler simultaneously support -c and -o options?]) ])# _LT_COMPILER_C_O # _LT_COMPILER_FILE_LOCKS([TAGNAME]) # ---------------------------------- # Check to see if we can do hard links to lock some files if needed m4_defun([_LT_COMPILER_FILE_LOCKS], [m4_require([_LT_ENABLE_LOCK])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_COMPILER_C_O([$1]) hard_links=nottested if test no = "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" && test no != "$need_locks"; then # do not overwrite the value of need_locks provided by the user AC_MSG_CHECKING([if we can lock with hard links]) hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no AC_MSG_RESULT([$hard_links]) if test no = "$hard_links"; then AC_MSG_WARN(['$CC' does not support '-c -o', so 'make -j' may be unsafe]) need_locks=warn fi else need_locks=no fi _LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) ])# _LT_COMPILER_FILE_LOCKS # _LT_CHECK_OBJDIR # ---------------- m4_defun([_LT_CHECK_OBJDIR], [AC_CACHE_CHECK([for objdir], [lt_cv_objdir], [rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null]) objdir=$lt_cv_objdir _LT_DECL([], [objdir], [0], [The name of the directory that contains temporary libtool files])dnl m4_pattern_allow([LT_OBJDIR])dnl AC_DEFINE_UNQUOTED([LT_OBJDIR], "$lt_cv_objdir/", [Define to the sub-directory where libtool stores uninstalled libraries.]) ])# _LT_CHECK_OBJDIR # _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) # -------------------------------------- # Check hardcoding attributes. m4_defun([_LT_LINKER_HARDCODE_LIBPATH], [AC_MSG_CHECKING([how to hardcode library paths into programs]) _LT_TAGVAR(hardcode_action, $1)= if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || test -n "$_LT_TAGVAR(runpath_var, $1)" || test yes = "$_LT_TAGVAR(hardcode_automatic, $1)"; then # We can hardcode non-existent directories. if test no != "$_LT_TAGVAR(hardcode_direct, $1)" && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" && test no != "$_LT_TAGVAR(hardcode_minus_L, $1)"; then # Linking always hardcodes the temporary library directory. _LT_TAGVAR(hardcode_action, $1)=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. _LT_TAGVAR(hardcode_action, $1)=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. _LT_TAGVAR(hardcode_action, $1)=unsupported fi AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) if test relink = "$_LT_TAGVAR(hardcode_action, $1)" || test yes = "$_LT_TAGVAR(inherit_rpath, $1)"; then # Fast installation is not supported enable_fast_install=no elif test yes = "$shlibpath_overrides_runpath" || test no = "$enable_shared"; then # Fast installation is not necessary enable_fast_install=needless fi _LT_TAGDECL([], [hardcode_action], [0], [How to hardcode a shared library path into an executable]) ])# _LT_LINKER_HARDCODE_LIBPATH # _LT_CMD_STRIPLIB # ---------------- m4_defun([_LT_CMD_STRIPLIB], [m4_require([_LT_DECL_EGREP]) striplib= old_striplib= AC_MSG_CHECKING([whether stripping libraries is possible]) if test -z "$STRIP"; then AC_MSG_RESULT([no]) else if $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then old_striplib="$STRIP --strip-debug" striplib="$STRIP --strip-unneeded" AC_MSG_RESULT([yes]) else case $host_os in darwin*) # FIXME - insert some real tests, host_os isn't really good enough striplib="$STRIP -x" old_striplib="$STRIP -S" AC_MSG_RESULT([yes]) ;; freebsd*) if $STRIP -V 2>&1 | $GREP "elftoolchain" >/dev/null; then old_striplib="$STRIP --strip-debug" striplib="$STRIP --strip-unneeded" AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) fi ;; *) AC_MSG_RESULT([no]) ;; esac fi fi _LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) _LT_DECL([], [striplib], [1]) ])# _LT_CMD_STRIPLIB # _LT_PREPARE_MUNGE_PATH_LIST # --------------------------- # Make sure func_munge_path_list() is defined correctly. m4_defun([_LT_PREPARE_MUNGE_PATH_LIST], [[# func_munge_path_list VARIABLE PATH # ----------------------------------- # VARIABLE is name of variable containing _space_ separated list of # directories to be munged by the contents of PATH, which is string # having a format: # "DIR[:DIR]:" # string "DIR[ DIR]" will be prepended to VARIABLE # ":DIR[:DIR]" # string "DIR[ DIR]" will be appended to VARIABLE # "DIRP[:DIRP]::[DIRA:]DIRA" # string "DIRP[ DIRP]" will be prepended to VARIABLE and string # "DIRA[ DIRA]" will be appended to VARIABLE # "DIR[:DIR]" # VARIABLE will be replaced by "DIR[ DIR]" func_munge_path_list () { case x@S|@2 in x) ;; *:) eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'` \@S|@@S|@1\" ;; x:*) eval @S|@1=\"\@S|@@S|@1 `$ECHO @S|@2 | $SED 's/:/ /g'`\" ;; *::*) eval @S|@1=\"\@S|@@S|@1\ `$ECHO @S|@2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" eval @S|@1=\"`$ECHO @S|@2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \@S|@@S|@1\" ;; *) eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'`\" ;; esac } ]])# _LT_PREPARE_PATH_LIST # _LT_SYS_DYNAMIC_LINKER([TAG]) # ----------------------------- # PORTME Fill in your ld.so characteristics m4_defun([_LT_SYS_DYNAMIC_LINKER], [AC_REQUIRE([AC_CANONICAL_HOST])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_OBJDUMP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl m4_require([_LT_PREPARE_MUNGE_PATH_LIST])dnl AC_MSG_CHECKING([dynamic linker characteristics]) m4_if([$1], [], [ if test yes = "$GCC"; then case $host_os in darwin*) lt_awk_arg='/^libraries:/,/LR/' ;; *) lt_awk_arg='/^libraries:/' ;; esac case $host_os in mingw* | cegcc*) lt_sed_strip_eq='s|=\([[A-Za-z]]:\)|\1|g' ;; *) lt_sed_strip_eq='s|=/|/|g' ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` case $lt_search_path_spec in *\;*) # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` ;; *) lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` ;; esac # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary... lt_tmp_lt_search_path_spec= lt_multi_os_dir=/`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` # ...but if some path component already ends with the multilib dir we assume # that all is fine and trust -print-search-dirs as is (GCC 4.2? or newer). case "$lt_multi_os_dir; $lt_search_path_spec " in "/; "* | "/.; "* | "/./; "* | *"$lt_multi_os_dir "* | *"$lt_multi_os_dir/ "*) lt_multi_os_dir= ;; esac for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path$lt_multi_os_dir" elif test -n "$lt_multi_os_dir"; then test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' BEGIN {RS = " "; FS = "/|\n";} { lt_foo = ""; lt_count = 0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo = "/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[[lt_foo]]++; } if (lt_freq[[lt_foo]] == 1) { print lt_foo; } }'` # AWK program above erroneously prepends '/' to C:/dos/paths # for these hosts. case $host_os in mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ $SED 's|/\([[A-Za-z]]:\)|\1|g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi]) library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=.so postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown AC_ARG_VAR([LT_SYS_LIBRARY_PATH], [User-defined run-time library search path.]) case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='$libname$release$shared_ext$major' ;; aix[[4-9]]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test ia64 = "$host_cpu"; then # AIX 5 supports IA64 library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line '#! .'. This would cause the generated library to # depend on '.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[[01]] | aix4.[[01]].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # Using Import Files as archive members, it is possible to support # filename-based versioning of shared library archives on AIX. While # this would work for both with and without runtime linking, it will # prevent static linking of such archives. So we do filename-based # shared library versioning with .so extension only, which is used # when both runtime linking and shared linking is enabled. # Unfortunately, runtime linking may impact performance, so we do # not want this to be the default eventually. Also, we use the # versioned .so libs for executables only if there is the -brtl # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only. # To allow for filename-based versioning support, we need to create # libNAME.so.V as an archive file, containing: # *) an Import File, referring to the versioned filename of the # archive as well as the shared archive member, telling the # bitwidth (32 or 64) of that shared object, and providing the # list of exported symbols of that shared object, eventually # decorated with the 'weak' keyword # *) the shared object with the F_LOADONLY flag set, to really avoid # it being seen by the linker. # At run time we better use the real file rather than another symlink, # but for link time we create the symlink libNAME.so -> libNAME.so.V case $with_aix_soname,$aix_use_runtimelinking in # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. aix,yes) # traditional libtool dynamic_linker='AIX unversionable lib.so' # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' ;; aix,no) # traditional AIX only dynamic_linker='AIX lib.a[(]lib.so.V[)]' # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='$libname$release.a $libname.a' soname_spec='$libname$release$shared_ext$major' ;; svr4,*) # full svr4 only dynamic_linker="AIX lib.so.V[(]$shared_archive_member_spec.o[)]" library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' # We do not specify a path in Import Files, so LIBPATH fires. shlibpath_overrides_runpath=yes ;; *,yes) # both, prefer svr4 dynamic_linker="AIX lib.so.V[(]$shared_archive_member_spec.o[)], lib.a[(]lib.so.V[)]" library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' # unpreferred sharedlib libNAME.a needs extra handling postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"' postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"' # We do not specify a path in Import Files, so LIBPATH fires. shlibpath_overrides_runpath=yes ;; *,no) # both, prefer aix dynamic_linker="AIX lib.a[(]lib.so.V[)], lib.so.V[(]$shared_archive_member_spec.o[)]" library_names_spec='$libname$release.a $libname.a' soname_spec='$libname$release$shared_ext$major' # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)' postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"' ;; esac shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='$libname$shared_ext' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[[45]]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=.dll need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo $libname | $SED -e 's/^lib/cyg/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"]) ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo $libname | $SED -e 's/^lib/pw/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl* | *,icl*) # Native MSVC or ICC libname_spec='$name' soname_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' library_names_spec='$libname.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec=$LIB if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC and ICC wrapper library_names_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='$libname$release$major$shared_ext $libname$shared_ext' soname_spec='$libname$release$major$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly* | midnightbsd*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[[23]].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[[01]]* | freebsdelf3.[[01]]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=no sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' if test 32 = "$HPUX_IA64_MODE"; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" sys_lib_dlsearch_path_spec=/usr/lib/hpux32 else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" sys_lib_dlsearch_path_spec=/usr/lib/hpux64 fi ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[[3-9]]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test yes = "$lt_cv_prog_gnu_ld"; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='$libname$release$shared_ext$major' library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff" sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; linux*android*) version_type=none # Android doesn't support versioned libraries. need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext' soname_spec='$libname$release$shared_ext' finish_cmds= shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes dynamic_linker='Android linker' # Don't embed -rpath directories since the linker doesn't support them. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath], [lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], [lt_cv_shlibpath_overrides_runpath=yes])]) LDFLAGS=$save_LDFLAGS libdir=$save_libdir ]) shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Ideally, we could use ldconfig to report *all* directores which are # searched for libraries, however this is still not possible. Aside from not # being certain /sbin/ldconfig is available, command # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64, # even though it is searched at run-time. Try to do the best guess by # appending ld.so.conf contents (and includes) to the search path. if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsdelf*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='NetBSD ld.elf_so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd* | bitrig*) version_type=sunos sys_lib_dlsearch_path_spec=/usr/lib need_lib_prefix=no if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then need_version=no else need_version=yes fi library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; os2*) libname_spec='$name' version_type=windows shrext_cmds=.dll need_version=no need_lib_prefix=no # OS/2 can only load a DLL with a base name of 8 characters or less. soname_spec='`test -n "$os2dllname" && libname="$os2dllname"; v=$($ECHO $release$versuffix | tr -d .-); n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _); $ECHO $n$v`$shared_ext' library_names_spec='${libname}_dll.$libext' dynamic_linker='OS/2 ld.exe' shlibpath_var=BEGINLIBPATH sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='$libname$release$shared_ext$major' library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test yes = "$with_gnu_ld"; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec; then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext' soname_spec='$libname$shared_ext.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=sco need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test yes = "$with_gnu_ld"; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac AC_MSG_RESULT([$dynamic_linker]) test no = "$dynamic_linker" && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test yes = "$GCC"; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec fi if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec fi # remember unaugmented sys_lib_dlsearch_path content for libtool script decls... configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec # ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH" # to be used as default LT_SYS_LIBRARY_PATH value in generated libtool configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH _LT_DECL([], [variables_saved_for_relink], [1], [Variables whose values should be saved in libtool wrapper scripts and restored at link time]) _LT_DECL([], [need_lib_prefix], [0], [Do we need the "lib" prefix for modules?]) _LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) _LT_DECL([], [version_type], [0], [Library versioning type]) _LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) _LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) _LT_DECL([], [shlibpath_overrides_runpath], [0], [Is shlibpath searched before the hard-coded library search path?]) _LT_DECL([], [libname_spec], [1], [Format of library name prefix]) _LT_DECL([], [library_names_spec], [1], [[List of archive names. First name is the real one, the rest are links. The last name is the one that the linker finds with -lNAME]]) _LT_DECL([], [soname_spec], [1], [[The coded name of the library, if different from the real name]]) _LT_DECL([], [install_override_mode], [1], [Permission mode override for installation of shared libraries]) _LT_DECL([], [postinstall_cmds], [2], [Command to use after installation of a shared archive]) _LT_DECL([], [postuninstall_cmds], [2], [Command to use after uninstallation of a shared archive]) _LT_DECL([], [finish_cmds], [2], [Commands used to finish a libtool library installation in a directory]) _LT_DECL([], [finish_eval], [1], [[As "finish_cmds", except a single script fragment to be evaled but not shown]]) _LT_DECL([], [hardcode_into_libs], [0], [Whether we should hardcode library paths into libraries]) _LT_DECL([], [sys_lib_search_path_spec], [2], [Compile-time system search path for libraries]) _LT_DECL([sys_lib_dlsearch_path_spec], [configure_time_dlsearch_path], [2], [Detected run-time system search path for libraries]) _LT_DECL([], [configure_time_lt_sys_library_path], [2], [Explicit LT_SYS_LIBRARY_PATH set during ./configure time]) ])# _LT_SYS_DYNAMIC_LINKER # _LT_PATH_TOOL_PREFIX(TOOL) # -------------------------- # find a file program that can recognize shared library AC_DEFUN([_LT_PATH_TOOL_PREFIX], [m4_require([_LT_DECL_EGREP])dnl AC_MSG_CHECKING([for $1]) AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, [case $MAGIC_CMD in [[\\/*] | ?:[\\/]*]) lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD=$MAGIC_CMD lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR dnl $ac_dummy forces splitting on constant user-supplied paths. dnl POSIX.2 word splitting is done only on the output of word expansions, dnl not every word. This closes a longstanding sh security hole. ac_dummy="m4_if([$2], , $PATH, [$2])" for ac_dir in $ac_dummy; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$1"; then lt_cv_path_MAGIC_CMD=$ac_dir/"$1" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD=$lt_cv_path_MAGIC_CMD if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS=$lt_save_ifs MAGIC_CMD=$lt_save_MAGIC_CMD ;; esac]) MAGIC_CMD=$lt_cv_path_MAGIC_CMD if test -n "$MAGIC_CMD"; then AC_MSG_RESULT($MAGIC_CMD) else AC_MSG_RESULT(no) fi _LT_DECL([], [MAGIC_CMD], [0], [Used to examine libraries when file_magic_cmd begins with "file"])dnl ])# _LT_PATH_TOOL_PREFIX # Old name: AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) # _LT_PATH_MAGIC # -------------- # find a file program that can recognize a shared library m4_defun([_LT_PATH_MAGIC], [_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) else MAGIC_CMD=: fi fi ])# _LT_PATH_MAGIC # LT_PATH_LD # ---------- # find the pathname to the GNU or non-GNU linker AC_DEFUN([LT_PATH_LD], [AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_PROG_ECHO_BACKSLASH])dnl AC_ARG_WITH([gnu-ld], [AS_HELP_STRING([--with-gnu-ld], [assume the C compiler uses GNU ld @<:@default=no@:>@])], [test no = "$withval" || with_gnu_ld=yes], [with_gnu_ld=no])dnl ac_prog=ld if test yes = "$GCC"; then # Check if gcc -print-prog-name=ld gives a path. AC_MSG_CHECKING([for ld used by $CC]) case $host in *-*-mingw*) # gcc leaves a trailing carriage return, which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [[\\/]]* | ?:[[\\/]]*) re_direlt='/[[^/]][[^/]]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD=$ac_prog ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test yes = "$with_gnu_ld"; then AC_MSG_CHECKING([for GNU ld]) else AC_MSG_CHECKING([for non-GNU ld]) fi AC_CACHE_VAL(lt_cv_path_LD, [if test -z "$LD"; then lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD=$ac_dir/$ac_prog # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &1 conftest.i cat conftest.i conftest.i >conftest2.i : ${lt_DD:=$DD} AC_PATH_PROGS_FEATURE_CHECK([lt_DD], [dd], [if "$ac_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then cmp -s conftest.i conftest.out \ && ac_cv_path_lt_DD="$ac_path_lt_DD" ac_path_lt_DD_found=: fi]) rm -f conftest.i conftest2.i conftest.out]) ])# _LT_PATH_DD # _LT_CMD_TRUNCATE # ---------------- # find command to truncate a binary pipe m4_defun([_LT_CMD_TRUNCATE], [m4_require([_LT_PATH_DD]) AC_CACHE_CHECK([how to truncate binary pipes], [lt_cv_truncate_bin], [printf 0123456789abcdef0123456789abcdef >conftest.i cat conftest.i conftest.i >conftest2.i lt_cv_truncate_bin= if "$ac_cv_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then cmp -s conftest.i conftest.out \ && lt_cv_truncate_bin="$ac_cv_path_lt_DD bs=4096 count=1" fi rm -f conftest.i conftest2.i conftest.out test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q"]) _LT_DECL([lt_truncate_bin], [lt_cv_truncate_bin], [1], [Command to truncate a binary pipe]) ])# _LT_CMD_TRUNCATE # _LT_CHECK_MAGIC_METHOD # ---------------------- # how to check for library dependencies # -- PORTME fill in with the dynamic library characteristics m4_defun([_LT_CHECK_MAGIC_METHOD], [m4_require([_LT_DECL_EGREP]) m4_require([_LT_DECL_OBJDUMP]) AC_CACHE_CHECK([how to recognize dependent libraries], lt_cv_deplibs_check_method, [lt_cv_file_magic_cmd='$MAGIC_CMD' lt_cv_file_magic_test_file= lt_cv_deplibs_check_method='unknown' # Need to set the preceding variable on all platforms that support # interlibrary dependencies. # 'none' -- dependencies not supported. # 'unknown' -- same as none, but documents that we really don't know. # 'pass_all' -- all dependencies passed with no checks. # 'test_compile' -- check by making test program. # 'file_magic [[regex]]' -- check by looking for files in library path # that responds to the $file_magic_cmd with a given extended regex. # If you have 'file' or equivalent on your system and you're not sure # whether 'pass_all' will *always* work, you probably want this one. case $host_os in aix[[4-9]]*) lt_cv_deplibs_check_method=pass_all ;; beos*) lt_cv_deplibs_check_method=pass_all ;; bsdi[[45]]*) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)' lt_cv_file_magic_cmd='$FILECMD -L' lt_cv_file_magic_test_file=/shlib/libc.so ;; cygwin*) # func_win32_libid is a shell function defined in ltmain.sh lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' ;; mingw* | pw32*) # Base MSYS/MinGW do not provide the 'file' command needed by # func_win32_libid shell function, so use a weaker test based on 'objdump', # unless we find 'file', for example because we are cross-compiling. if ( file / ) >/dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else # Keep this pattern in sync with the one in func_win32_libid. lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc*) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly* | midnightbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=$FILECMD lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; haiku*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=$FILECMD case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'] lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix[[3-9]]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) lt_cv_deplibs_check_method=pass_all ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=$FILECMD lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; *nto* | *qnx*) lt_cv_deplibs_check_method=pass_all ;; openbsd* | bitrig*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; os2*) lt_cv_deplibs_check_method=pass_all ;; esac ]) file_magic_glob= want_nocaseglob=no if test "$build" = "$host"; then case $host_os in mingw* | pw32*) if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then want_nocaseglob=yes else file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"` fi ;; esac fi file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown _LT_DECL([], [deplibs_check_method], [1], [Method to check whether dependent libraries are shared objects]) _LT_DECL([], [file_magic_cmd], [1], [Command to use when deplibs_check_method = "file_magic"]) _LT_DECL([], [file_magic_glob], [1], [How to find potential files when deplibs_check_method = "file_magic"]) _LT_DECL([], [want_nocaseglob], [1], [Find potential files using nocaseglob when deplibs_check_method = "file_magic"]) ])# _LT_CHECK_MAGIC_METHOD # LT_PATH_NM # ---------- # find the pathname to a BSD- or MS-compatible name lister AC_DEFUN([LT_PATH_NM], [AC_REQUIRE([AC_PROG_CC])dnl AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, [if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM=$NM else lt_nm_to_check=${ac_tool_prefix}nm if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. tmp_nm=$ac_dir/$lt_tmp_nm if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext"; then # Check to see if the nm accepts a BSD-compat flag. # Adding the 'sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty case $build_os in mingw*) lt_bad_file=conftest.nm/nofile ;; *) lt_bad_file=/dev/null ;; esac case `"$tmp_nm" -B $lt_bad_file 2>&1 | $SED '1q'` in *$lt_bad_file* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break 2 ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | $SED '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break 2 ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS=$lt_save_ifs done : ${lt_cv_path_NM=no} fi]) if test no != "$lt_cv_path_NM"; then NM=$lt_cv_path_NM else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$DUMPBIN"; then : # Let the user override the test. else AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :) case `$DUMPBIN -symbols -headers /dev/null 2>&1 | $SED '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols -headers" ;; *) DUMPBIN=: ;; esac fi AC_SUBST([DUMPBIN]) if test : != "$DUMPBIN"; then NM=$DUMPBIN fi fi test -z "$NM" && NM=nm AC_SUBST([NM]) _LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], [lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD) cat conftest.out >&AS_MESSAGE_LOG_FD if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest*]) ])# LT_PATH_NM # Old names: AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_PROG_NM], []) dnl AC_DEFUN([AC_PROG_NM], []) # _LT_CHECK_SHAREDLIB_FROM_LINKLIB # -------------------------------- # how to determine the name of the shared library # associated with a specific link library. # -- PORTME fill in with the dynamic library characteristics m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB], [m4_require([_LT_DECL_EGREP]) m4_require([_LT_DECL_OBJDUMP]) m4_require([_LT_DECL_DLLTOOL]) AC_CACHE_CHECK([how to associate runtime and link libraries], lt_cv_sharedlib_from_linklib_cmd, [lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in cygwin* | mingw* | pw32* | cegcc*) # two different shell functions defined in ltmain.sh; # decide which one to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in *--identify-strict*) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib ;; *) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback ;; esac ;; *) # fallback: assume linklib IS sharedlib lt_cv_sharedlib_from_linklib_cmd=$ECHO ;; esac ]) sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO _LT_DECL([], [sharedlib_from_linklib_cmd], [1], [Command to associate shared and link libraries]) ])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB # _LT_PATH_MANIFEST_TOOL # ---------------------- # locate the manifest tool m4_defun([_LT_PATH_MANIFEST_TOOL], [AC_CHECK_TOOL(MANIFEST_TOOL, mt, :) test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool], [lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out cat conftest.err >&AS_MESSAGE_LOG_FD if $GREP 'Manifest Tool' conftest.out > /dev/null; then lt_cv_path_mainfest_tool=yes fi rm -f conftest*]) if test yes != "$lt_cv_path_mainfest_tool"; then MANIFEST_TOOL=: fi _LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl ])# _LT_PATH_MANIFEST_TOOL # _LT_DLL_DEF_P([FILE]) # --------------------- # True iff FILE is a Windows DLL '.def' file. # Keep in sync with func_dll_def_p in the libtool script AC_DEFUN([_LT_DLL_DEF_P], [dnl test DEF = "`$SED -n dnl -e '\''s/^[[ ]]*//'\'' dnl Strip leading whitespace -e '\''/^\(;.*\)*$/d'\'' dnl Delete empty lines and comments -e '\''s/^\(EXPORTS\|LIBRARY\)\([[ ]].*\)*$/DEF/p'\'' dnl -e q dnl Only consider the first "real" line $1`" dnl ])# _LT_DLL_DEF_P # LT_LIB_M # -------- # check for math library AC_DEFUN([LT_LIB_M], [AC_REQUIRE([AC_CANONICAL_HOST])dnl LIBM= case $host in *-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*) # These system don't have libm, or don't need it ;; *-ncr-sysv4.3*) AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM=-lmw) AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") ;; *) AC_CHECK_LIB(m, cos, LIBM=-lm) ;; esac AC_SUBST([LIBM]) ])# LT_LIB_M # Old name: AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_CHECK_LIBM], []) # _LT_COMPILER_NO_RTTI([TAGNAME]) # ------------------------------- m4_defun([_LT_COMPILER_NO_RTTI], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= if test yes = "$GCC"; then case $cc_basename in nvcc*) _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;; *) _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;; esac _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], lt_cv_prog_compiler_rtti_exceptions, [-fno-rtti -fno-exceptions], [], [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) fi _LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], [Compiler flag to turn off builtin functions]) ])# _LT_COMPILER_NO_RTTI # _LT_CMD_GLOBAL_SYMBOLS # ---------------------- m4_defun([_LT_CMD_GLOBAL_SYMBOLS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([LT_PATH_NM])dnl AC_REQUIRE([LT_PATH_LD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_TAG_COMPILER])dnl # Check for command to grab the raw symbol name followed by C symbol from nm. AC_MSG_CHECKING([command to parse $NM output from $compiler object]) AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], [ # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[[BCDEGRST]]' # Regexp to match symbols that can be accessed directly from C. sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[[BCDT]]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[[ABCDGISTW]]' ;; hpux*) if test ia64 = "$host_cpu"; then symcode='[[ABCDEGRST]]' fi ;; irix* | nonstopux*) symcode='[[BCDEGRST]]' ;; osf*) symcode='[[BCDEGQRST]]' ;; solaris*) symcode='[[BDRT]]' ;; sco3.2v5*) symcode='[[DT]]' ;; sysv4.2uw2*) symcode='[[DT]]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[[ABDT]]' ;; sysv4) symcode='[[DFNSTU]]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[[ABCDGIRSTW]]' ;; esac if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Gets list of data symbols to import. lt_cv_sys_global_symbol_to_import="$SED -n -e 's/^I .* \(.*\)$/\1/p'" # Adjust the below global symbol transforms to fixup imported variables. lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'" lt_c_name_hook=" -e 's/^I .* \(.*\)$/ {\"\1\", (void *) 0},/p'" lt_c_name_lib_hook="\ -e 's/^I .* \(lib.*\)$/ {\"\1\", (void *) 0},/p'\ -e 's/^I .* \(.*\)$/ {\"lib\1\", (void *) 0},/p'" else # Disable hooks by default. lt_cv_sys_global_symbol_to_import= lt_cdecl_hook= lt_c_name_hook= lt_c_name_lib_hook= fi # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="$SED -n"\ $lt_cdecl_hook\ " -e 's/^T .* \(.*\)$/extern int \1();/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="$SED -n"\ $lt_c_name_hook\ " -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/p'" # Transform an extracted symbol line into symbol name with lib prefix and # symbol address. lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="$SED -n"\ $lt_c_name_lib_hook\ " -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ " -e 's/^$symcode$symcode* .* \(lib.*\)$/ {\"\1\", (void *) \&\1},/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/ {\"lib\1\", (void *) \&\1},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function, # D for any global variable and I for any imported variable. # Also find C++ and __fastcall symbols from MSVC++ or ICC, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK ['"\ " {last_section=section; section=\$ 3};"\ " /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " /^ *Symbol name *: /{split(\$ 0,sn,\":\"); si=substr(sn[2],2)};"\ " /^ *Type *: code/{print \"T\",si,substr(si,length(prfx))};"\ " /^ *Type *: data/{print \"I\",si,substr(si,length(prfx))};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=\"D\"}; \$ 0~/\(\).*\|/{f=\"T\"};"\ " {split(\$ 0,a,/\||\r/); split(a[2],s)};"\ " s[1]~/^[@?]/{print f,s[1],s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx]" else lt_cv_sys_global_symbol_pipe="$SED -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | $SED '/ __gnu_lto/d'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if AC_TRY_EVAL(ac_compile); then # Now try to grab the symbols. nlist=conftest.nm $ECHO "$as_me:$LINENO: $NM conftest.$ac_objext | $lt_cv_sys_global_symbol_pipe > $nlist" >&AS_MESSAGE_LOG_FD if eval "$NM" conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist 2>&AS_MESSAGE_LOG_FD && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE /* DATA imports from DLLs on WIN32 can't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT@&t@_DLSYM_CONST #elif defined __osf__ /* This system does not cope well with relocations in const data. */ # define LT@&t@_DLSYM_CONST #else # define LT@&t@_DLSYM_CONST const #endif #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ LT@&t@_DLSYM_CONST struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[[]] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_globsym_save_LIBS=$LIBS lt_globsym_save_CFLAGS=$CFLAGS LIBS=conftstm.$ac_objext CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" if AC_TRY_EVAL(ac_link) && test -s conftest$ac_exeext; then pipe_works=yes fi LIBS=$lt_globsym_save_LIBS CFLAGS=$lt_globsym_save_CFLAGS else echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD fi else echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test yes = "$pipe_works"; then break else lt_cv_sys_global_symbol_pipe= fi done ]) if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then AC_MSG_RESULT(failed) else AC_MSG_RESULT(ok) fi # Response file support. if test "$lt_cv_nm_interface" = "MS dumpbin"; then nm_file_list_spec='@' elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then nm_file_list_spec='@' fi _LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], [Take the output of nm and produce a listing of raw symbols and C names]) _LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], [Transform the output of nm in a proper C declaration]) _LT_DECL([global_symbol_to_import], [lt_cv_sys_global_symbol_to_import], [1], [Transform the output of nm into a list of symbols to manually relocate]) _LT_DECL([global_symbol_to_c_name_address], [lt_cv_sys_global_symbol_to_c_name_address], [1], [Transform the output of nm in a C name address pair]) _LT_DECL([global_symbol_to_c_name_address_lib_prefix], [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], [Transform the output of nm in a C name address pair when lib prefix is needed]) _LT_DECL([nm_interface], [lt_cv_nm_interface], [1], [The name lister interface]) _LT_DECL([], [nm_file_list_spec], [1], [Specify filename containing input files for $NM]) ]) # _LT_CMD_GLOBAL_SYMBOLS # _LT_COMPILER_PIC([TAGNAME]) # --------------------------- m4_defun([_LT_COMPILER_PIC], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_wl, $1)= _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)= m4_if([$1], [CXX], [ # C++ specific cases for pic, static, wl, etc. if test yes = "$GXX"; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the '-m68020' flag to GCC prevents building anything better, # like '-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) case $host_os in os2*) _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static' ;; esac ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; *djgpp*) # DJGPP does not support shared libraries at all _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. _LT_TAGVAR(lt_prog_compiler_static, $1)= ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac else case $host_os in aix[[4-9]]*) # All AIX code is PIC. if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; chorus*) case $cc_basename in cxch68*) # Green Hills C++ Compiler # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" ;; esac ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; dgux*) case $cc_basename in ec++*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; ghcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; freebsd* | dragonfly* | midnightbsd*) # FreeBSD uses GNU C++ ;; hpux9* | hpux10* | hpux11*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive' if test ia64 != "$host_cpu"; then _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' fi ;; aCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive' case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac ;; *) ;; esac ;; interix*) # This is c89, which is MS Visual C++ (no shared libs) # Anyone wants to do a port? ;; irix5* | irix6* | nonstopux*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' # CC pic flag -KPIC is the default. ;; *) ;; esac ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in KCC*) # KAI C++ Compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; ecpc* ) # old Intel C++ for x86_64, which still supported -KPIC. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; icpc* ) # Intel C++, used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; pgCC* | pgcpp*) # Portland Group C++ compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; cxx*) # Compaq C++ # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL 8.0, 9.0 on PPC and BlueGene _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | $SED 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; esac ;; esac ;; lynxos*) ;; m88k*) ;; mvs*) case $cc_basename in cxx*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' ;; *) ;; esac ;; netbsd* | netbsdelf*-gnu) ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' ;; RCC*) # Rational C++ 2.4.1 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; cxx*) # Digital/Compaq C++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; *) ;; esac ;; psos*) ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' ;; *) ;; esac ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; lcc*) # Lucid _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; *) ;; esac ;; vxworks*) ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ], [ if test yes = "$GCC"; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the '-m68020' flag to GCC prevents building anything better, # like '-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) case $host_os in os2*) _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static' ;; esac ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. _LT_TAGVAR(lt_prog_compiler_static, $1)= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker ' if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then _LT_TAGVAR(lt_prog_compiler_pic, $1)="-Xcompiler $_LT_TAGVAR(lt_prog_compiler_pic, $1)" fi ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' case $cc_basename in nagfor*) # NAG Fortran compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) case $host_os in os2*) _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static' ;; esac ;; hpux9* | hpux10* | hpux11*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC (with -KPIC) is the default. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in # old Intel for x86_64, which still supported -KPIC. ecc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # flang / f18. f95 an alias for gfortran or flang on Debian flang* | f18* | f95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # Lahey Fortran 8.1. lf95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' ;; nagfor*) # NAG Fortran compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; tcc*) # Fabrice Bellard et al's Tiny C Compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; ccc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All Alpha code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | $SED 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='' ;; *Sun\ F* | *Sun*Fortran*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' ;; *Intel*\ [[CF]]*Compiler*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; *Portland\ Group*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; esac ;; newsos6) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All OSF/1 code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; rdos*) _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; solaris*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; *) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; esac ;; sunos4*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; unicos*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; uts4*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ]) case $host_os in # For platforms that do not support PIC, -DPIC is meaningless: *djgpp*) _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" ;; esac AC_CACHE_CHECK([for $compiler option to produce PIC], [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) _LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1) # # Check to make sure the PIC flag actually works. # if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in "" | " "*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; esac], [_LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) fi _LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], [Additional compiler flags for building library objects]) _LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], [How to pass a linker flag through the compiler]) # # Check to make sure the static flag actually works. # wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" _LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), $lt_tmp_static_flag, [], [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) _LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], [Compiler flag to prevent dynamic linking]) ])# _LT_COMPILER_PIC # _LT_LINKER_SHLIBS([TAGNAME]) # ---------------------------- # See if the linker supports building shared libraries. m4_defun([_LT_LINKER_SHLIBS], [AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl m4_require([_LT_PATH_MANIFEST_TOOL])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) m4_if([$1], [CXX], [ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] case $host_os in aix[[4-9]]*) # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to GNU nm, but means don't demangle to AIX nm. # Without the "-l" option, or with the "-B" option, AIX nm treats # weak defined symbols like other global defined symbols, whereas # GNU nm marks them as "W". # While the 'weak' keyword is ignored in the Export File, we need # it in the Import File for the 'aix-soname' feature, so we have # to replace the "-B" option with "-P" for AIX nm. if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "L") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' fi ;; pw32*) _LT_TAGVAR(export_symbols_cmds, $1)=$ltdll_cmds ;; cygwin* | mingw* | cegcc*) case $cc_basename in cl* | icl*) _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] ;; esac ;; linux* | k*bsd*-gnu | gnu*) _LT_TAGVAR(link_all_deplibs, $1)=no ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; esac ], [ runpath_var= _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_cmds, $1)= _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(old_archive_from_new_cmds, $1)= _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)= _LT_TAGVAR(thread_safe_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list _LT_TAGVAR(include_expsyms, $1)= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ' (' and ')$', so one must not match beginning or # end of line. Example: 'a|bc|.*d.*' will exclude the symbols 'a' and 'bc', # as well as any symbol that contains 'd'. _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. dnl Note also adjust exclude_expsyms for C++ above. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ and ICC port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++ or Intel C++ Compiler. if test yes != "$GCC"; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++ or ICC) with_gnu_ld=yes ;; openbsd* | bitrig*) with_gnu_ld=no ;; linux* | k*bsd*-gnu | gnu*) _LT_TAGVAR(link_all_deplibs, $1)=no ;; esac _LT_TAGVAR(ld_shlibs, $1)=yes # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no if test yes = "$with_gnu_ld"; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;; *\ \(GNU\ Binutils\)\ [[3-9]]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test yes = "$lt_use_gnu_ld_interface"; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='$wl' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi supports_anon_versioning=no case `$LD -v | $SED -e 's/([[^)]]\+)\s\+//' 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[[3-9]]*) # On AIX/PPC, the GNU linker is very broken if test ia64 != "$host_cpu"; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.19, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-all-symbols' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file, use it as # is; otherwise, prepend EXPORTS... _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; os2*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=unsupported shrext_cmds=.dll _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ prefix_cmds="$SED"~ if test EXPORTS = "`$SED 1q $export_symbols`"; then prefix_cmds="$prefix_cmds -e 1d"; fi~ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$SED "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test linux-dietlibc = "$host_os"; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test no = "$tmp_diet" then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 _LT_TAGVAR(whole_archive_flag_spec, $1)= tmp_sharedflag='--shared' ;; nagfor*) # NAGFOR 5.3 tmp_sharedflag='-Wl,-shared' ;; xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes ;; esac case `$CC -V 2>&1 | $SED 5q` in *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' if test yes = "$supports_anon_versioning"; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' fi case $cc_basename in tcc*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='-rdynamic' ;; xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test yes = "$supports_anon_versioning"; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 cannot *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; sunos4*) _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac if test no = "$_LT_TAGVAR(ld_shlibs, $1)"; then runpath_var= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. _LT_TAGVAR(hardcode_minus_L, $1)=yes if test yes = "$GCC" && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. _LT_TAGVAR(hardcode_direct, $1)=unsupported fi ;; aix[[4-9]]*) if test ia64 = "$host_cpu"; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag= else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to GNU nm, but means don't demangle to AIX nm. # Without the "-l" option, or with the "-B" option, AIX nm treats # weak defined symbols like other global defined symbols, whereas # GNU nm marks them as "W". # While the 'weak' keyword is ignored in the Export File, we need # it in the Import File for the 'aix-soname' feature, so we have # to replace the "-B" option with "-P" for AIX nm. if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "L") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # have runtime linking enabled, and use it for executables. # For shared libraries, we enable/disable runtime linking # depending on the kind of the shared library created - # when "with_aix_soname,aix_use_runtimelinking" is: # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables # "aix,yes" lib.so shared, rtl:yes, for executables # lib.a static archive # "both,no" lib.so.V(shr.o) shared, rtl:yes # lib.a(lib.so.V) shared, rtl:no, for executables # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a(lib.so.V) shared, rtl:no # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a static archive case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do if (test x-brtl = "x$ld_flag" || test x-Wl,-brtl = "x$ld_flag"); then aix_use_runtimelinking=yes break fi done if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then # With aix-soname=svr4, we create the lib.so.V shared archives only, # so we don't have lib.a shared libs to link our executables. # We have to force runtime linking in this case. aix_use_runtimelinking=yes LDFLAGS="$LDFLAGS -Wl,-brtl" fi ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='$wl-f,' case $with_aix_soname,$aix_use_runtimelinking in aix,*) ;; # traditional, no import file svr4,* | *,yes) # use import file # The Import File defines what to hardcode. _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no ;; esac if test yes = "$GCC"; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`$CC -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi ;; esac shared_flag='-shared' if test yes = "$aix_use_runtimelinking"; then shared_flag="$shared_flag "'$wl-G' fi # Need to ensure runtime linking is disabled for the traditional # shared library, or the linker may eventually find shared libraries # /with/ Import File - we do not want to mix them. shared_flag_aix='-shared' shared_flag_svr4='-shared $wl-G' else # not using gcc if test ia64 = "$host_cpu"; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test yes = "$aix_use_runtimelinking"; then shared_flag='$wl-G' else shared_flag='$wl-bM:SRE' fi shared_flag_aix='$wl-bM:SRE' shared_flag_svr4='$wl-G' fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. _LT_TAGVAR(always_export_symbols, $1)=yes if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag else if test ia64 = "$host_cpu"; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' $wl-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-berok' if test yes = "$with_gnu_ld"; then # We only use this code for GNU lds that support --whole-archive. _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes _LT_TAGVAR(archive_expsym_cmds, $1)='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' # -brtl affects multiple linker settings, -berok does not and is overridden later compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([[, ]]\\)%-berok\\1%g"`' if test svr4 != "$with_aix_soname"; then # This is similar to how AIX traditionally builds its shared libraries. _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' fi if test aix != "$with_aix_soname"; then _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' else # used by -dlpreopen to get the symbols _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$MV $output_objdir/$realname.d/$soname $output_objdir' fi _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$RM -r $output_objdir/$realname.d' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; bsdi[[45]]*) _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++ or Intel C++ Compiler. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in cl* | icl*) # Native MSVC or ICC _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then cp "$export_symbols" "$output_objdir/$soname.def"; echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; else $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile=$lt_outputfile.exe lt_tool_outputfile=$lt_tool_outputfile.exe ;; esac~ if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # Assume MSVC and ICC wrapper _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' # FIXME: Should let the user specify the lib program. _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes ;; esac ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; dgux*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2.*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly* | midnightbsd*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; hpux9*) if test yes = "$GCC"; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' else _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' ;; hpux10*) if test yes,no = "$GCC,$with_gnu_ld"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test no = "$with_gnu_ld"; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes fi ;; hpux11*) if test yes,no = "$GCC,$with_gnu_ld"; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) m4_if($1, [], [ # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) _LT_LINKER_OPTION([if $CC understands -b], _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b], [_LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'], [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])], [_LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags']) ;; esac fi if test no = "$with_gnu_ld"; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test yes = "$GCC"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol], [lt_cv_irix_exported_symbol], [save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null" AC_LINK_IFELSE( [AC_LANG_SOURCE( [AC_LANG_CASE([C], [[int foo (void) { return 0; }]], [C++], [[int foo (void) { return 0; }]], [Fortran 77], [[ subroutine foo end]], [Fortran], [[ subroutine foo end]])])], [lt_cv_irix_exported_symbol=yes], [lt_cv_irix_exported_symbol=no]) LDFLAGS=$save_LDFLAGS]) if test yes = "$lt_cv_irix_exported_symbol"; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib' fi _LT_TAGVAR(link_all_deplibs, $1)=no else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes _LT_TAGVAR(link_all_deplibs, $1)=yes ;; linux*) case $cc_basename in tcc*) # Fabrice Bellard et al's Tiny C Compiler _LT_TAGVAR(ld_shlibs, $1)=yes _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' ;; esac ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; newsos6) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *nto* | *qnx*) ;; openbsd* | bitrig*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags $wl-retain-symbols-file,$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' fi else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; os2*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=unsupported shrext_cmds=.dll _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ prefix_cmds="$SED"~ if test EXPORTS = "`$SED 1q $export_symbols`"; then prefix_cmds="$prefix_cmds -e 1d"; fi~ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' ;; osf3*) if test yes = "$GCC"; then _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test yes = "$GCC"; then _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $pic_flag $libobjs $deplibs $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $wl-input $wl$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; solaris*) _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' if test yes = "$GCC"; then wlarc='$wl' _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl-z ${wl}text $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag $wl-z ${wl}text $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' _LT_TAGVAR(archive_cmds, $1)='$LD -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='$wl' _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands '-z linker_flag'. GCC discards it without '$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test yes = "$GCC"; then _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' else _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' fi ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes ;; sunos4*) if test sequent = "$host_vendor"; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h $soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4) case $host_vendor in sni) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' _LT_TAGVAR(hardcode_direct, $1)=no ;; motorola) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4.3*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes _LT_TAGVAR(ld_shlibs, $1)=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' if test yes = "$GCC"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We CANNOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='$wl-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Bexport' runpath_var='LD_RUN_PATH' if test yes = "$GCC"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(ld_shlibs, $1)=no ;; esac if test sni = "$host_vendor"; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Blargedynsym' ;; esac fi fi ]) AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test no = "$_LT_TAGVAR(ld_shlibs, $1)" && can_build_shared=no _LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld _LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl _LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl _LT_DECL([], [extract_expsyms_cmds], [2], [The commands to extract the exported symbol list from a shared archive]) # # Do we need to explicitly link libc? # case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in x|xyes) # Assume -lc should be added _LT_TAGVAR(archive_cmds_need_lc, $1)=yes if test yes,yes = "$GCC,$enable_shared"; then case $_LT_TAGVAR(archive_cmds, $1) in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. AC_CACHE_CHECK([whether -lc should be explicitly linked in], [lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1), [$RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if AC_TRY_EVAL(ac_compile) 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) _LT_TAGVAR(allow_undefined_flag, $1)= if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) then lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no else lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes fi _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* ]) _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1) ;; esac fi ;; esac _LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], [Whether or not to add -lc for building shared libraries]) _LT_TAGDECL([allow_libtool_libs_with_static_runtimes], [enable_shared_with_static_runtimes], [0], [Whether or not to disallow shared libs when runtime libs are static]) _LT_TAGDECL([], [export_dynamic_flag_spec], [1], [Compiler flag to allow reflexive dlopens]) _LT_TAGDECL([], [whole_archive_flag_spec], [1], [Compiler flag to generate shared objects directly from archives]) _LT_TAGDECL([], [compiler_needs_object], [1], [Whether the compiler copes with passing no objects directly]) _LT_TAGDECL([], [old_archive_from_new_cmds], [2], [Create an old-style archive from a shared archive]) _LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], [Create a temporary old-style archive to link instead of a shared archive]) _LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) _LT_TAGDECL([], [archive_expsym_cmds], [2]) _LT_TAGDECL([], [module_cmds], [2], [Commands used to build a loadable module if different from building a shared archive.]) _LT_TAGDECL([], [module_expsym_cmds], [2]) _LT_TAGDECL([], [with_gnu_ld], [1], [Whether we are building with GNU ld or not]) _LT_TAGDECL([], [allow_undefined_flag], [1], [Flag that allows shared libraries with undefined symbols to be built]) _LT_TAGDECL([], [no_undefined_flag], [1], [Flag that enforces no undefined symbols]) _LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], [Flag to hardcode $libdir into a binary during linking. This must work even if $libdir does not exist]) _LT_TAGDECL([], [hardcode_libdir_separator], [1], [Whether we need a single "-rpath" flag with a separated argument]) _LT_TAGDECL([], [hardcode_direct], [0], [Set to "yes" if using DIR/libNAME$shared_ext during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_direct_absolute], [0], [Set to "yes" if using DIR/libNAME$shared_ext during linking hardcodes DIR into the resulting binary and the resulting library dependency is "absolute", i.e impossible to change by setting $shlibpath_var if the library is relocated]) _LT_TAGDECL([], [hardcode_minus_L], [0], [Set to "yes" if using the -LDIR flag during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_shlibpath_var], [0], [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_automatic], [0], [Set to "yes" if building a shared library automatically hardcodes DIR into the library and all subsequent libraries and executables linked against it]) _LT_TAGDECL([], [inherit_rpath], [0], [Set to yes if linker adds runtime paths of dependent libraries to runtime path list]) _LT_TAGDECL([], [link_all_deplibs], [0], [Whether libtool must link a program against all its dependency libraries]) _LT_TAGDECL([], [always_export_symbols], [0], [Set to "yes" if exported symbols are required]) _LT_TAGDECL([], [export_symbols_cmds], [2], [The commands to list exported symbols]) _LT_TAGDECL([], [exclude_expsyms], [1], [Symbols that should not be listed in the preloaded symbols]) _LT_TAGDECL([], [include_expsyms], [1], [Symbols that must always be exported]) _LT_TAGDECL([], [prelink_cmds], [2], [Commands necessary for linking programs (against libraries) with templates]) _LT_TAGDECL([], [postlink_cmds], [2], [Commands necessary for finishing linking programs]) _LT_TAGDECL([], [file_list_spec], [1], [Specify filename containing input files]) dnl FIXME: Not yet implemented dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], dnl [Compiler flag to generate thread safe objects]) ])# _LT_LINKER_SHLIBS # _LT_LANG_C_CONFIG([TAG]) # ------------------------ # Ensure that the configuration variables for a C compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to 'libtool'. m4_defun([_LT_LANG_C_CONFIG], [m4_require([_LT_DECL_EGREP])dnl lt_save_CC=$CC AC_LANG_PUSH(C) # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' _LT_TAG_COMPILER # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) LT_SYS_DLOPEN_SELF _LT_CMD_STRIPLIB # Report what library types will actually be built AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test no = "$can_build_shared" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test yes = "$enable_shared" && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test ia64 != "$host_cpu"; then case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in yes,aix,yes) ;; # shared object as lib.so file only yes,svr4,*) ;; # shared object as lib.so archive member only yes,*) enable_static=no ;; # shared object in lib.a archive as well esac fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test yes = "$enable_shared" || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_CONFIG($1) fi AC_LANG_POP CC=$lt_save_CC ])# _LT_LANG_C_CONFIG # _LT_LANG_CXX_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a C++ compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to 'libtool'. m4_defun([_LT_LANG_CXX_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_PATH_MANIFEST_TOOL])dnl if test -n "$CXX" && ( test no != "$CXX" && ( (test g++ = "$CXX" && `g++ -v >/dev/null 2>&1` ) || (test g++ != "$CXX"))); then AC_PROG_CXXCPP else _lt_caught_CXX_error=yes fi AC_LANG_PUSH(C++) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for C++ test sources. ac_ext=cpp # Object file extension for compiled C++ test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the CXX compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test yes != "$_lt_caught_CXX_error"; then # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_LD=$LD lt_save_GCC=$GCC GCC=$GXX lt_save_with_gnu_ld=$with_gnu_ld lt_save_path_LD=$lt_cv_path_LD if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx else $as_unset lt_cv_prog_gnu_ld fi if test -n "${lt_cv_path_LDCXX+set}"; then lt_cv_path_LD=$lt_cv_path_LDCXX else $as_unset lt_cv_path_LD fi test -z "${LDCXX+set}" || LD=$LDCXX CC=${CXX-"c++"} CFLAGS=$CXXFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then # We don't want -fno-exception when compiling C++ code, so set the # no_builtin_flag separately if test yes = "$GXX"; then _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' else _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= fi if test yes = "$GXX"; then # Set up default GNU C++ configuration LT_PATH_LD # Check if GNU C++ uses GNU ld as the underlying linker, since the # archiving commands below assume that GNU ld is being used. if test yes = "$with_gnu_ld"; then _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' # If archive_cmds runs LD, not CC, wlarc should be empty # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to # investigate it a little bit more. (MM) wlarc='$wl' # ancient GNU ld didn't support --whole-archive et. al. if eval "`$CC -print-prog-name=ld` --help 2>&1" | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else with_gnu_ld=no wlarc= # A generic and very simple default shared library creation # command for GNU C++ for the case where it uses the native # linker, instead of GNU ld. If possible, this setting should # overridden to take advantage of the native linker features on # the platform it is being used on. _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' fi # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP " \-L"' else GXX=no with_gnu_ld=no wlarc= fi # PORTME: fill in a description of your system's C++ link characteristics AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) _LT_TAGVAR(ld_shlibs, $1)=yes case $host_os in aix3*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aix[[4-9]]*) if test ia64 = "$host_cpu"; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag= else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # have runtime linking enabled, and use it for executables. # For shared libraries, we enable/disable runtime linking # depending on the kind of the shared library created - # when "with_aix_soname,aix_use_runtimelinking" is: # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables # "aix,yes" lib.so shared, rtl:yes, for executables # lib.a static archive # "both,no" lib.so.V(shr.o) shared, rtl:yes # lib.a(lib.so.V) shared, rtl:no, for executables # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a(lib.so.V) shared, rtl:no # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a static archive case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do case $ld_flag in *-brtl*) aix_use_runtimelinking=yes break ;; esac done if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then # With aix-soname=svr4, we create the lib.so.V shared archives only, # so we don't have lib.a shared libs to link our executables. # We have to force runtime linking in this case. aix_use_runtimelinking=yes LDFLAGS="$LDFLAGS -Wl,-brtl" fi ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='$wl-f,' case $with_aix_soname,$aix_use_runtimelinking in aix,*) ;; # no import file svr4,* | *,yes) # use import file # The Import File defines what to hardcode. _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no ;; esac if test yes = "$GXX"; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`$CC -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi esac shared_flag='-shared' if test yes = "$aix_use_runtimelinking"; then shared_flag=$shared_flag' $wl-G' fi # Need to ensure runtime linking is disabled for the traditional # shared library, or the linker may eventually find shared libraries # /with/ Import File - we do not want to mix them. shared_flag_aix='-shared' shared_flag_svr4='-shared $wl-G' else # not using gcc if test ia64 = "$host_cpu"; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test yes = "$aix_use_runtimelinking"; then shared_flag='$wl-G' else shared_flag='$wl-bM:SRE' fi shared_flag_aix='$wl-bM:SRE' shared_flag_svr4='$wl-G' fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to # export. _LT_TAGVAR(always_export_symbols, $1)=yes if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. # The "-G" linker flag allows undefined symbols. _LT_TAGVAR(no_undefined_flag, $1)='-bernotok' # Determine the default libpath from the value encoded in an empty # executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag else if test ia64 = "$host_cpu"; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' $wl-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-berok' if test yes = "$with_gnu_ld"; then # We only use this code for GNU lds that support --whole-archive. _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes _LT_TAGVAR(archive_expsym_cmds, $1)='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' # -brtl affects multiple linker settings, -berok does not and is overridden later compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([[, ]]\\)%-berok\\1%g"`' if test svr4 != "$with_aix_soname"; then # This is similar to how AIX traditionally builds its shared # libraries. Need -bnortl late, we may have -brtl in LDFLAGS. _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' fi if test aix != "$with_aix_soname"; then _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' else # used by -dlpreopen to get the symbols _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$MV $output_objdir/$realname.d/$soname $output_objdir' fi _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$RM -r $output_objdir/$realname.d' fi fi ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; chorus*) case $cc_basename in *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; cygwin* | mingw* | pw32* | cegcc*) case $GXX,$cc_basename in ,cl* | no,cl* | ,icl* | no,icl*) # Native MSVC or ICC # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then cp "$export_symbols" "$output_objdir/$soname.def"; echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; else $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile=$lt_outputfile.exe lt_tool_outputfile=$lt_tool_outputfile.exe ;; esac~ func_to_tool_file "$lt_outputfile"~ if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # g++ # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-all-symbols' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file, use it as # is; otherwise, prepend EXPORTS... _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; os2*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=unsupported shrext_cmds=.dll _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ prefix_cmds="$SED"~ if test EXPORTS = "`$SED 1q $export_symbols`"; then prefix_cmds="$prefix_cmds -e 1d"; fi~ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' ;; dgux*) case $cc_basename in ec++*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; ghcx*) # Green Hills C++ Compiler # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; freebsd2.*) # C++ shared libraries reported to be fairly broken before # switch to ELF _LT_TAGVAR(ld_shlibs, $1)=no ;; freebsd-elf*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; freebsd* | dragonfly* | midnightbsd*) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions _LT_TAGVAR(ld_shlibs, $1)=yes ;; haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; hpux9*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP " \-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test yes = "$GXX"; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; hpux10*|hpux11*) if test no = "$with_gnu_ld"; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) ;; *) _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' ;; esac fi case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. ;; esac case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP " \-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test yes = "$GXX"; then if test no = "$with_gnu_ld"; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac fi else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$SED "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; irix5* | irix6*) case $cc_basename in CC*) # SGI C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' # Archives containing C++ object files must be created using # "CC -ar", where "CC" is the IRIX C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' ;; *) if test yes = "$GXX"; then if test no = "$with_gnu_ld"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` -o $lib' fi fi _LT_TAGVAR(link_all_deplibs, $1)=yes ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib $wl-retain-symbols-file,$export_symbols; mv \$templib $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; icpc* | ecpc* ) # Intel C++ with_gnu_ld=yes # version 8.0 and above of icpc choke on multiply defined symbols # if we add $predep_objects and $postdep_objects, however 7.1 and # earlier do not add the objects themselves. case `$CC -V 2>&1` in *"Version 7."*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 8.0 or newer tmp_idyn= case $host_cpu in ia64*) tmp_idyn=' -i_dynamic';; esac _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; esac _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive' ;; pgCC* | pgcpp*) # Portland Group C++ compiler case `$CC -V` in *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*) _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ $RANLIB $oldlib' _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 6 and above use weak symbols _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl--rpath $wl$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' ;; cxx*) # Compaq C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib $wl-retain-symbols-file $wl$export_symbols' runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' ;; xl* | mpixl* | bgxl*) # IBM XL 8.0 on PPC, with GNU ld _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' if test yes = "$supports_anon_versioning"; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' fi ;; *) case `$CC -V 2>&1 | $SED 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file $wl$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes # Not sure whether something based on # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 # would be better. output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; esac ;; esac ;; lynxos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; m88k*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; mvs*) case $cc_basename in cxx*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' wlarc= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no fi # Workaround some broken pre-1.5 toolchains output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' ;; *nto* | *qnx*) _LT_TAGVAR(ld_shlibs, $1)=yes ;; openbsd* | bitrig*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`"; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file,$export_symbols -o $lib' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' fi output_verbose_link_cmd=func_echo_all else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Archives containing C++ object files must be created using # the KAI C++ compiler. case $host in osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; esac ;; RCC*) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; cxx*) case $host in osf3*) _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $soname `test -n "$verstring" && func_echo_all "$wl-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' ;; *) _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ echo "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname $wl-input $wl$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~ $RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' ;; esac _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test yes,no = "$GXX,$with_gnu_ld"; then _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' case $host in osf3*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP " \-L"' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; psos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; lcc*) # Lucid # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(archive_cmds_need_lc,$1)=yes _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G$allow_undefined_flag $wl-M $wl$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands '-z linker_flag'. # Supported since Solaris 2.6 (maybe 2.5.1?) _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' # The C++ compiler must be used to create the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' ;; *) # GNU C++ compiler with Solaris linker if test yes,no = "$GXX,$with_gnu_ld"; then _LT_TAGVAR(no_undefined_flag, $1)=' $wl-z ${wl}defs' if $CC --version | $GREP -v '^2\.7' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP " \-L"' else # g++ 2.7 appears to require '-G' NOT '-shared' on this # platform. _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP " \-L"' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $wl$libdir' case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' ;; esac fi ;; esac ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We CANNOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='$wl-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Bexport' runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~ '"$_LT_TAGVAR(old_archive_cmds, $1)" _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~ '"$_LT_TAGVAR(reload_cmds, $1)" ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; vxworks*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test no = "$_LT_TAGVAR(ld_shlibs, $1)" && can_build_shared=no _LT_TAGVAR(GCC, $1)=$GXX _LT_TAGVAR(LD, $1)=$LD ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS LDCXX=$LD LD=$lt_save_LD GCC=$lt_save_GCC with_gnu_ld=$lt_save_with_gnu_ld lt_cv_path_LDCXX=$lt_cv_path_LD lt_cv_path_LD=$lt_save_path_LD lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld fi # test yes != "$_lt_caught_CXX_error" AC_LANG_POP ])# _LT_LANG_CXX_CONFIG # _LT_FUNC_STRIPNAME_CNF # ---------------------- # func_stripname_cnf prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). # # This function is identical to the (non-XSI) version of func_stripname, # except this one can be used by m4 code that may be executed by configure, # rather than the libtool script. m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl AC_REQUIRE([_LT_DECL_SED]) AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH]) func_stripname_cnf () { case @S|@2 in .*) func_stripname_result=`$ECHO "@S|@3" | $SED "s%^@S|@1%%; s%\\\\@S|@2\$%%"`;; *) func_stripname_result=`$ECHO "@S|@3" | $SED "s%^@S|@1%%; s%@S|@2\$%%"`;; esac } # func_stripname_cnf ])# _LT_FUNC_STRIPNAME_CNF # _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) # --------------------------------- # Figure out "hidden" library dependencies from verbose # compiler output when linking a shared library. # Parse the compiler output and extract the necessary # objects, libraries and library flags. m4_defun([_LT_SYS_HIDDEN_LIBDEPS], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl # Dependencies to place before and after the object being linked: _LT_TAGVAR(predep_objects, $1)= _LT_TAGVAR(postdep_objects, $1)= _LT_TAGVAR(predeps, $1)= _LT_TAGVAR(postdeps, $1)= _LT_TAGVAR(compiler_lib_search_path, $1)= dnl we can't use the lt_simple_compile_test_code here, dnl because it contains code intended for an executable, dnl not a library. It's possible we should let each dnl tag define a new lt_????_link_test_code variable, dnl but it's only used here... m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF int a; void foo (void) { a = 0; } _LT_EOF ], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF class Foo { public: Foo (void) { a = 0; } private: int a; }; _LT_EOF ], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer*4 a a=0 return end _LT_EOF ], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer a a=0 return end _LT_EOF ], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF public class foo { private int a; public void bar (void) { a = 0; } }; _LT_EOF ], [$1], [GO], [cat > conftest.$ac_ext <<_LT_EOF package foo func foo() { } _LT_EOF ]) _lt_libdeps_save_CFLAGS=$CFLAGS case "$CC $CFLAGS " in #( *\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; *\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; *\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; esac dnl Parse the compiler output and extract the necessary dnl objects, libraries and library flags. if AC_TRY_EVAL(ac_compile); then # Parse the compiler output and extract the necessary # objects, libraries and library flags. # Sentinel used to keep track of whether or not we are before # the conftest object file. pre_test_object_deps_done=no for p in `eval "$output_verbose_link_cmd"`; do case $prev$p in -L* | -R* | -l*) # Some compilers place space between "-{L,R}" and the path. # Remove the space. if test x-L = "$p" || test x-R = "$p"; then prev=$p continue fi # Expand the sysroot to ease extracting the directories later. if test -z "$prev"; then case $p in -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; esac fi case $p in =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; esac if test no = "$pre_test_object_deps_done"; then case $prev in -L | -R) # Internal compiler library paths should come after those # provided the user. The postdeps already come after the # user supplied libs so there is no need to process them. if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then _LT_TAGVAR(compiler_lib_search_path, $1)=$prev$p else _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} $prev$p" fi ;; # The "-l" case would never come before the object being # linked, so don't bother handling this case. esac else if test -z "$_LT_TAGVAR(postdeps, $1)"; then _LT_TAGVAR(postdeps, $1)=$prev$p else _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} $prev$p" fi fi prev= ;; *.lto.$objext) ;; # Ignore GCC LTO objects *.$objext) # This assumes that the test object file only shows up # once in the compiler output. if test "$p" = "conftest.$objext"; then pre_test_object_deps_done=yes continue fi if test no = "$pre_test_object_deps_done"; then if test -z "$_LT_TAGVAR(predep_objects, $1)"; then _LT_TAGVAR(predep_objects, $1)=$p else _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" fi else if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then _LT_TAGVAR(postdep_objects, $1)=$p else _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" fi fi ;; *) ;; # Ignore the rest. esac done # Clean up. rm -f a.out a.exe else echo "libtool.m4: error: problem compiling $1 test program" fi $RM -f confest.$objext CFLAGS=$_lt_libdeps_save_CFLAGS # PORTME: override above test on systems where it is broken m4_if([$1], [CXX], [case $host_os in interix[[3-9]]*) # Interix 3.5 installs completely hosed .la files for C++, so rather than # hack all around it, let's just trust "g++" to DTRT. _LT_TAGVAR(predep_objects,$1)= _LT_TAGVAR(postdep_objects,$1)= _LT_TAGVAR(postdeps,$1)= ;; esac ]) case " $_LT_TAGVAR(postdeps, $1) " in *" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; esac _LT_TAGVAR(compiler_lib_search_dirs, $1)= if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | $SED -e 's! -L! !g' -e 's!^ !!'` fi _LT_TAGDECL([], [compiler_lib_search_dirs], [1], [The directories searched by this compiler when creating a shared library]) _LT_TAGDECL([], [predep_objects], [1], [Dependencies to place before and after the objects being linked to create a shared library]) _LT_TAGDECL([], [postdep_objects], [1]) _LT_TAGDECL([], [predeps], [1]) _LT_TAGDECL([], [postdeps], [1]) _LT_TAGDECL([], [compiler_lib_search_path], [1], [The library search path used internally by the compiler when linking a shared library]) ])# _LT_SYS_HIDDEN_LIBDEPS # _LT_LANG_F77_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a Fortran 77 compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_F77_CONFIG], [AC_LANG_PUSH(Fortran 77) if test -z "$F77" || test no = "$F77"; then _lt_disable_F77=yes fi _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for f77 test sources. ac_ext=f # Object file extension for compiled f77 test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the F77 compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test yes != "$_lt_disable_F77"; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${F77-"f77"} CFLAGS=$FFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) GCC=$G77 if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test no = "$can_build_shared" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test yes = "$enable_shared" && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test ia64 != "$host_cpu"; then case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in yes,aix,yes) ;; # shared object as lib.so file only yes,svr4,*) ;; # shared object as lib.so archive member only yes,*) enable_static=no ;; # shared object in lib.a archive as well esac fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test yes = "$enable_shared" || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)=$G77 _LT_TAGVAR(LD, $1)=$LD ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS fi # test yes != "$_lt_disable_F77" AC_LANG_POP ])# _LT_LANG_F77_CONFIG # _LT_LANG_FC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for a Fortran compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_FC_CONFIG], [AC_LANG_PUSH(Fortran) if test -z "$FC" || test no = "$FC"; then _lt_disable_FC=yes fi _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for fc test sources. ac_ext=${ac_fc_srcext-f} # Object file extension for compiled fc test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the FC compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test yes != "$_lt_disable_FC"; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${FC-"f95"} CFLAGS=$FCFLAGS compiler=$CC GCC=$ac_cv_fc_compiler_gnu _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test no = "$can_build_shared" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test yes = "$enable_shared" && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test ia64 != "$host_cpu"; then case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in yes,aix,yes) ;; # shared object as lib.so file only yes,svr4,*) ;; # shared object as lib.so archive member only yes,*) enable_static=no ;; # shared object in lib.a archive as well esac fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test yes = "$enable_shared" || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)=$ac_cv_fc_compiler_gnu _LT_TAGVAR(LD, $1)=$LD ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS fi # test yes != "$_lt_disable_FC" AC_LANG_POP ])# _LT_LANG_FC_CONFIG # _LT_LANG_GCJ_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Java Compiler compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_GCJ_CONFIG], [AC_REQUIRE([LT_PROG_GCJ])dnl AC_LANG_SAVE # Source file extension for Java test sources. ac_ext=java # Object file extension for compiled Java test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="class foo {}" # Code to be used in simple link tests lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC=yes CC=${GCJ-"gcj"} CFLAGS=$GCJFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)=$LD _LT_CC_BASENAME([$compiler]) # GCJ did not exist at the time GCC didn't implicitly link libc in. _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi AC_LANG_RESTORE GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_GCJ_CONFIG # _LT_LANG_GO_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Go compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_GO_CONFIG], [AC_REQUIRE([LT_PROG_GO])dnl AC_LANG_SAVE # Source file extension for Go test sources. ac_ext=go # Object file extension for compiled Go test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="package main; func main() { }" # Code to be used in simple link tests lt_simple_link_test_code='package main; func main() { }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC=yes CC=${GOC-"gccgo"} CFLAGS=$GOFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)=$LD _LT_CC_BASENAME([$compiler]) # Go did not exist at the time GCC didn't implicitly link libc in. _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi AC_LANG_RESTORE GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_GO_CONFIG # _LT_LANG_RC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for the Windows resource compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_RC_CONFIG], [AC_REQUIRE([LT_PROG_RC])dnl AC_LANG_SAVE # Source file extension for RC test sources. ac_ext=rc # Object file extension for compiled RC test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' # Code to be used in simple link tests lt_simple_link_test_code=$lt_simple_compile_test_code # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC= CC=${RC-"windres"} CFLAGS= compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes if test -n "$compiler"; then : _LT_CONFIG($1) fi GCC=$lt_save_GCC AC_LANG_RESTORE CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_RC_CONFIG # LT_PROG_GCJ # ----------- AC_DEFUN([LT_PROG_GCJ], [m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], [AC_CHECK_TOOL(GCJ, gcj,) test set = "${GCJFLAGS+set}" || GCJFLAGS="-g -O2" AC_SUBST(GCJFLAGS)])])[]dnl ]) # Old name: AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_GCJ], []) # LT_PROG_GO # ---------- AC_DEFUN([LT_PROG_GO], [AC_CHECK_TOOL(GOC, gccgo,) ]) # LT_PROG_RC # ---------- AC_DEFUN([LT_PROG_RC], [AC_CHECK_TOOL(RC, windres,) ]) # Old name: AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_RC], []) # _LT_DECL_EGREP # -------------- # If we don't have a new enough Autoconf to choose the best grep # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_EGREP], [AC_REQUIRE([AC_PROG_EGREP])dnl AC_REQUIRE([AC_PROG_FGREP])dnl test -z "$GREP" && GREP=grep _LT_DECL([], [GREP], [1], [A grep program that handles long lines]) _LT_DECL([], [EGREP], [1], [An ERE matcher]) _LT_DECL([], [FGREP], [1], [A literal string matcher]) dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too AC_SUBST([GREP]) ]) # _LT_DECL_OBJDUMP # -------------- # If we don't have a new enough Autoconf to choose the best objdump # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_OBJDUMP], [AC_CHECK_TOOL(OBJDUMP, objdump, false) test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) AC_SUBST([OBJDUMP]) ]) # _LT_DECL_DLLTOOL # ---------------- # Ensure DLLTOOL variable is set. m4_defun([_LT_DECL_DLLTOOL], [AC_CHECK_TOOL(DLLTOOL, dlltool, false) test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [1], [DLL creation program]) AC_SUBST([DLLTOOL]) ]) # _LT_DECL_FILECMD # ---------------- # Check for a file(cmd) program that can be used to detect file type and magic m4_defun([_LT_DECL_FILECMD], [AC_CHECK_TOOL([FILECMD], [file], [:]) _LT_DECL([], [FILECMD], [1], [A file(cmd) program that detects file types]) ])# _LD_DECL_FILECMD # _LT_DECL_SED # ------------ # Check for a fully-functional sed program, that truncates # as few characters as possible. Prefer GNU sed if found. m4_defun([_LT_DECL_SED], [AC_PROG_SED test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" _LT_DECL([], [SED], [1], [A sed program that does not truncate output]) _LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], [Sed that helps us avoid accidentally triggering echo(1) options like -n]) ])# _LT_DECL_SED m4_ifndef([AC_PROG_SED], [ ############################################################ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_SED. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # ############################################################ m4_defun([AC_PROG_SED], [AC_MSG_CHECKING([for a sed that does not truncate output]) AC_CACHE_VAL(lt_cv_path_SED, [# Loop through the user's path and test for sed and gsed. # Then use that list of sed's as ones to test for truncation. as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for lt_ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" fi done done done IFS=$as_save_IFS lt_ac_max=0 lt_ac_count=0 # Add /usr/xpg4/bin/sed as it is typically found on Solaris # along with /bin/sed that truncates output. for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do test ! -f "$lt_ac_sed" && continue cat /dev/null > conftest.in lt_ac_count=0 echo $ECHO_N "0123456789$ECHO_C" >conftest.in # Check for GNU sed and select it if it is found. if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then lt_cv_path_SED=$lt_ac_sed break fi while true; do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo >>conftest.nl $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break cmp -s conftest.out conftest.nl || break # 10000 chars as input seems more than enough test 10 -lt "$lt_ac_count" && break lt_ac_count=`expr $lt_ac_count + 1` if test "$lt_ac_count" -gt "$lt_ac_max"; then lt_ac_max=$lt_ac_count lt_cv_path_SED=$lt_ac_sed fi done done ]) SED=$lt_cv_path_SED AC_SUBST([SED]) AC_MSG_RESULT([$SED]) ])#AC_PROG_SED ])#m4_ifndef # Old name: AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_SED], []) # _LT_CHECK_SHELL_FEATURES # ------------------------ # Find out whether the shell is Bourne or XSI compatible, # or has some other useful features. m4_defun([_LT_CHECK_SHELL_FEATURES], [if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi _LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac _LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl _LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl ])# _LT_CHECK_SHELL_FEATURES # _LT_PATH_CONVERSION_FUNCTIONS # ----------------------------- # Determine what file name conversion functions should be used by # func_to_host_file (and, implicitly, by func_to_host_path). These are needed # for certain cross-compile configurations and native mingw. m4_defun([_LT_PATH_CONVERSION_FUNCTIONS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_MSG_CHECKING([how to convert $build file names to $host format]) AC_CACHE_VAL(lt_cv_to_host_file_cmd, [case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 ;; esac ;; *-*-cygwin* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_noop ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin ;; esac ;; * ) # unhandled hosts (and "normal" native builds) lt_cv_to_host_file_cmd=func_convert_file_noop ;; esac ]) to_host_file_cmd=$lt_cv_to_host_file_cmd AC_MSG_RESULT([$lt_cv_to_host_file_cmd]) _LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd], [0], [convert $build file names to $host format])dnl AC_MSG_CHECKING([how to convert $build file names to toolchain format]) AC_CACHE_VAL(lt_cv_to_tool_file_cmd, [#assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 ;; esac ;; esac ]) to_tool_file_cmd=$lt_cv_to_tool_file_cmd AC_MSG_RESULT([$lt_cv_to_tool_file_cmd]) _LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd], [0], [convert $build files to toolchain format])dnl ])# _LT_PATH_CONVERSION_FUNCTIONS aqbanking-6.6.1/m4/qt3.m40000664000175000017500000001610014043610744011674 00000000000000# $Id$ # (c) 2010 Martin Preuss # These functions search for QT3 AC_DEFUN([AQ_CHECK_QT3],[ dnl PREREQUISITES: dnl AQ_CHECK_OS must be called before this dnl IN: dnl $1 = "yes" if QT3 is needed, "no" if QT3 is optional dnl You may preset the return variables. dnl All variables which already have a value will not be altered dnl OUT: dnl Variables: dnl have_qt3 - set to "yes" if QT3 exists dnl qt3_includes - path to includes dnl qt3_libs - path to libraries dnl qt3_uic - name and path of the uic tool dnl qt3_moc - name and path of the moc tool dnl Defines: dnl HAVE_QT3 lforce="$1" AC_MSG_CHECKING(if QT3 is allowed) AC_ARG_ENABLE(qt3, [ --enable-qt3 enable qt3 (default=yes)], enable_qt3="$enableval", enable_qt3="yes") AC_MSG_RESULT($enable_qt3) if test "$enable_qt3" = "no"; then qt3_libs="" qt3_includes="" qt3_moc="" qt3_uic="" have_qt3="no" else dnl paths for qt3 includes AC_MSG_CHECKING(for qt3 includes) AC_ARG_WITH(qt3-includes, [ --with-qt3-includes=DIR uses qt3 includes from given dir], [local_qt3_includes="$withval"], [local_qt3_includes="\ $QTDIR/include \ /usr/include/qt3 \ /usr/local/include/qt3 \ /usr/lib/qt3/include \ /usr/local/lib/qt3/include \ /opt/qt3/include \ /usr/include/qt \ /usr/local/include/qt \ /usr/lib/qt/include \ /usr/local/lib/qt/include \ /usr/include \ /usr/local/include \ /opt/qt/include \ /usr/X11R6/include \ " ] ) if test -z "$qt3_includes"; then for i in $local_qt3_includes; do if test -z "$qt3_includes"; then if test -f "$i/qglobal.h"; then lv1=`grep -h "#define QT_VERSION_STR" $i/qglobal.h` case $lv1 in *3.*) qt3_includes="-I$i" qt3_dir=`echo $i | ${SED} 's-/include*--'` break; ;; esac fi fi done fi if test -n "$qt3_includes"; then AC_MSG_RESULT($qt3_includes) else AC_MSG_RESULT(not found) fi AC_MSG_CHECKING(if threaded qt3 may be used) AC_ARG_ENABLE(qt3-threads, [ --enable-qt3-threads enable qt3-mt library (default=yes)], enable_qt3_threads="$enableval", enable_qt3_threads="yes") AC_MSG_RESULT($enable_qt3_threads) # Check for x86_64 architecture; potentially set lib-directory suffix if test "$target_cpu" = "x86_64"; then libdirsuffix="64" else libdirsuffix="" fi dnl paths for qt3 libs AC_MSG_CHECKING(for qt3 libraries) AC_ARG_WITH(qt3-libs, [ --with-qt3-libs=DIR uses qt3 libs from given dir], [local_qt3_libs="$withval"], [local_qt3_libs="\ $qt3_dir/lib${libdirsuffix} \ $QTDIR/lib${libdirsuffix} \ /usr/lib/qt3 \ /usr/local/lib/qt3 \ /usr/lib/qt3/lib${libdirsuffix} \ /usr/local/lib/qt3/lib${libdirsuffix} \ /opt/qt3/lib${libdirsuffix} \ /usr/lib/qt \ /usr/local/lib/qt \ /usr/lib/qt/lib${libdirsuffix} \ /usr/local/lib/qt/lib${libdirsuffix} \ /usr/lib${libdirsuffix} \ /usr/lib${libdirsuffix}/qt3/lib \ /usr/lib${libdirsuffix}/qt-3.3/lib \ /usr/lib${libdirsuffix}/qt-3.2/lib \ /usr/local/lib${libdirsuffix} \ /opt/qt/lib${libdirsuffix} \ /usr/X11R6/lib${libdirsuffix} \ " ] ) # Determine the extension of a shared library; the variable # std_shrext comes from the AC_PROG_LIBTOOL macro. Copied from # libtool. # Shared library suffix. On linux this was set as # shrext_cmds='.so'; but on darwin it is actually a text command. eval std_shrext=\"$shrext_cmds\" if test -n "${std_shrext}"; then std_shrext='.so' fi # Choose library name of qt if test "$enable_qt3_threads" != "no"; then qt_libname="qt-mt" else qt_libname="qt" fi # This is the name of the qt library to search for. if test "x$OSYSTEM" = "xdarwin"; then qt_searchname="lib${qt_libname}.3.dylib" else qt_searchname="lib${qt_libname}${std_shrext}.3" fi if test -z "$qt3_libs"; then AQ_SEARCH_FOR_PATH([$qt_searchname],[$local_qt3_libs]) if test -n "$found_dir" ; then qt3_libs="-L$found_dir -l${qt_libname}" fi fi if test -n "$qt3_libs"; then AC_MSG_RESULT($qt3_libs) else AC_MSG_RESULT(not found) fi dnl paths for qt3 moc AC_MSG_CHECKING(for qt3 moc) if test -z "$qt3_moc"; then AC_ARG_WITH(qt3-moc, [ --with-qt3-moc=FILE uses the given qt3 moc], [qt3_moc="$withval"], [qt3_moc=""] ) fi if test -z "$qt3_moc"; then searchdir="\ $qt3_dir/bin \ $QTDIR/bin \ /usr/lib/qt3/bin \ /usr/local/lib/qt3/bin \ /opt/qt3/bin \ /usr/lib/qt/bin \ /usr/local/lib/qt/bin \ /usr/bin \ /usr/local/bin \ /opt/qt/bin \ /usr/X11R6/bin \ " # search for "moc-qt3" for f in $searchdir; do if test -x $f/moc-qt3; then qt3_moc="$f/moc-qt3" break fi done # fall back to "moc" if test -z "$qt3_moc"; then for f in $searchdir; do if test -x $f/moc; then qt3_moc="$f/moc" break fi done fi fi if test -n "$qt3_moc"; then AC_MSG_RESULT($qt3_moc) else AC_MSG_RESULT(not found) fi dnl paths for qt3 uic AC_MSG_CHECKING(for qt3 uic) if test -z "$qt3_uic"; then AC_ARG_WITH(qt3-uic, [ --with-qt3-uic=FILE uses the given qt3 uic], [qt3_uic="$withval"], [qt3_uic=""] ) searchdir="\ $qt3_dir/bin \ $QTDIR/bin \ /usr/lib/qt3/bin \ /usr/local/lib/qt3/bin \ /opt/qt3/bin \ /usr/lib/qt/bin \ /usr/local/lib/qt/bin \ /usr/bin \ /usr/local/bin \ /opt/qt/bin \ /usr/X11R6/bin \ " # search for "uic-qt3" for f in $searchdir; do if test -x $f/uic-qt3; then qt3_uic="$f/uic-qt3" break fi done # fall back to "uic" if test -z "$qt3_uic"; then for f in $searchdir; do if test -x $f/uic; then qt3_uic="$f/uic" break fi done fi fi if test -n "$qt3_uic"; then AC_MSG_RESULT($qt3_uic) else AC_MSG_RESULT(not found) fi # check if all necessary qt3 components where found if test -z "$qt3_includes" || \ test -z "$qt3_moc" || \ test -z "$qt3_uic" || \ test -z "$qt3_libs"; then qt3_libs="" qt3_moc="" qt3_uic="" qt3_includes="" have_qt3="no" if test "$lforce" = "yes"; then AC_MSG_WARN([ Compilation of QT applications is enabled but I could not find some QT components (see which are missing in messages above). If you don't want to compile QT3 applications please use "--disable-qt3". ]) else AC_MSG_WARN([ QT3 is not explicitly disabled and I could not find some QT3 components (see which are missing in messages above). If you don't want to compile QT3 applications please use "--disable-qt3". ]) fi else dnl TODO: AC_TRY_RUN, check whether qversion.h has matching versions have_qt3="yes" AC_DEFINE(HAVE_QT3, 1, [whether QT3 is available]) fi dnl end of if "$enable_qt3" fi AS_SCRUB_INCLUDE(qt3_includes) AC_SUBST(qt3_libs) AC_SUBST(qt3_includes) AC_SUBST(qt3_moc) AC_SUBST(qt3_uic) ]) aqbanking-6.6.1/m4/kde3.m40000664000175000017500000001256314043610744012024 00000000000000# $Id$ # (c) 2002 Martin Preuss # These functions search for KDE 3 AC_DEFUN([AQ_CHECK_KDE3],[ dnl PREREQUISITES: dnl none dnl IN: dnl $1 = "yes" if KDE3 is needed, "no" if KDE3 is optional dnl $2 = subdirs to include when KDE3 is available dnl You may preset the return variables. dnl All variables which already have a value will not be altered dnl OUT: dnl Variables: dnl have_kde3 - set to "yes" if KDE3 exists dnl kde3_includes - CFLAGS for includes (-I) dnl kde3_include_dir - path to includes dnl kde3_libs - LDFLAGS for linking the kde3 libraries (-L) dnl kde3_app - kde3 apps given as the argument to this funtion dnl kde3_install_dir - install directory for kde3 applications dnl Defines: dnl HAVE_KDE3 dnl USED MACROS: dnl AQ_CHECK_QT3 kde3_local_lforce="$1" kde3_local_lsd="$2" dnl check if kde apps are desired AC_MSG_CHECKING(if KDE3 is allowed) AC_ARG_ENABLE(kde3, [ --enable-kde3 enable kde3 (default=yes)], enable_kde3="$enableval", enable_kde3="yes") AC_MSG_RESULT($enable_kde3) if test "$enable_kde3" = "no"; then kde3_libs="" kde3_includes="" kde3_include_dir="" kde3_app="" kde3_install_dir="" else dnl check for QT3 AQ_CHECK_QT3("$kde3_local_lforce") AC_MSG_CHECKING(if qt3 version is fully useable) if test "$have_qt3" != "yes"; then kde3_libs="" kde3_includes="" kde3_include_dir="" kde3_app="" kde3_install_dir="" AC_MSG_RESULT(no, so no KDE3 without qt3) else AC_MSG_RESULT(yes) dnl paths for kde install dir AC_MSG_CHECKING(for kde3 install dir) AC_ARG_WITH(kde3-prefix, [ --with-kde3-prefix=DIR installs kde3 apps to the given dir], [local_kde3_prefix="$withval"], [local_kde3_prefix="\ $KDEDIR \ /usr/local \ /usr \ /opt/kde3 \ /opt/kde \ " ] ) if test -z "$kde3_install_dir"; then for i in $local_kde3_prefix; do if test -z "$kde3_install_dir"; then if test -x "$i/bin/kde-config"; then $i/bin/kde-config --prefix &>/dev/null && \ kde3_install_dir="`$i/bin/kde-config --prefix`" fi fi done fi if test -z "$kde3_install_dir"; then AC_MSG_RESULT(not found) else AC_MSG_RESULT($kde3_install_dir) fi dnl paths for kde includes AC_MSG_CHECKING(for kde3 includes) AC_ARG_WITH(kde3-includes, [ --with-kde3-includes=DIR uses kde3 includes from given dir], [local_kde3_includes="$withval"], [local_kde3_includes="\ $KDEDIR/include \ /usr/include/kde3 \ /usr/local/include/kde3 \ /usr/include/kde \ /usr/local/include/kde \ /opt/kde3/include \ /opt/kde/include \ /usr/include \ /usr/local/include \ " ] ) if test -z "$kde3_include_dir"; then for i in $local_kde3_includes; do if test -z "$kde3_include_dir"; then if test -r "$i/kdeversion.h"; then tmp=`grep "KDE_VERSION_MAJOR 3" "$i/kdeversion.h"` if test -n "$tmp"; then kde3_include_dir="$i" fi fi fi done fi if test -n "$kde3_include_dir"; then kde3_includes="-I$kde3_include_dir" AC_MSG_RESULT($kde3_include_dir) else AC_MSG_RESULT(not found) fi # Check for x86_64 architecture; potentially set lib-directory suffix if test "$target_cpu" = "x86_64"; then libdirsuffix="64" else libdirsuffix="" fi dnl paths for kde libs AC_MSG_CHECKING(for kde3 libraries) AC_ARG_WITH(kde3-libs, [ --with-kde3-libs=DIR uses kde3 libs from given dir], [local_kde3_libs="$withval"], [local_kde3_libs="\ $KDEDIR/lib${libdirsuffix} \ /usr/lib/kde3 \ /usr/local/lib/kde3 \ /usr/lib/kde \ /usr/local/lib/kde \ /opt/kde3/lib${libdirsuffix} \ /opt/kde/lib${libdirsuffix} \ /usr/lib${libdirsuffix} \ /usr/local/lib${libdirsuffix} \ $KDEDIR/lib \ " ] ) if test -z "$kde3_libs"; then AQ_SEARCH_FOR_PATH([libkdeui.so.4],[$local_kde3_libs]) if test -n "$found_dir" ; then kde3_libs="-L$found_dir" fi fi if test -n "$kde3_libs"; then AC_MSG_RESULT($kde3_libs) else AC_MSG_RESULT(not found) fi # check if all necessary kde components where found if test -z "$kde3_includes" || \ test -z "$kde3_install_dir" || \ test -z "$kde3_libs"; then kde3_libs="" kde3_includes="" kde3_app="" have_kde3="no" if test "$kde3_local_lforce" = "yes"; then AC_MSG_WARN([ Compilation of KDE3 applications is enabled but I could not find some KDE3 components (see which are missing in messages above). If you don't want to compile KDE3 applications please use "--disable-kde3". ]) else AC_MSG_WARN([ KDE3 is not explicitly disabled and I could not find some KDE3 components (see which are missing in messages above). If you don't want to compile KDE3 applications please use "--disable-kde3". ]) fi else dnl TODO: AC_TRY_RUN, check whether kdeversion.h has matching versions kde3_app="$kde3_local_lsd" have_kde3="yes" AC_DEFINE(HAVE_KDE3, 1, [if KDE3 is available]) fi dnl end of if QT3 is useable fi dnl end of if "$enable_kdeapps" fi AS_SCRUB_INCLUDE(kde3_includes) AC_SUBST(kde3_app) AC_SUBST(kde3_libs) AC_SUBST(kde3_includes) AC_SUBST(kde3_include_dir) AC_SUBST(kde3_install_dir) ]) aqbanking-6.6.1/m4/searchfiles.m40000664000175000017500000000157314043610744013465 00000000000000# $Id$ # (c) 2002 Martin Preuss # These functions search for files AC_DEFUN([AQ_SEARCH_FOR_PATH],[ dnl searches for a file in a path dnl $1 = file to search dnl $2 = paths to search in dnl returns the directory where the file is found (found_dir) found_dir="" ls=$1 ld="$2" for li in $ld; do case "$build" in *-win32*) fname="$li\\$ls" ;; *) fname="$li/$ls" ;; esac if test -r "$fname"; then found_dir="$li" break fi done ]) AC_DEFUN([AQ_SEARCH_FILES],[ dnl searches a dir for some files dnl $1 = path where to search dnl $2 = files to find dnl returns the name of the file found (found_file) found_file="" ls="$1" ld="$2" lf="" for li in $ld; do lf2="`ls -d ${ls}/${li} 2>/dev/null`" lf="$lf $lf2" done for li in $lf; do if test -r "$li"; then found_file=`basename "$li"` break fi done ]) aqbanking-6.6.1/m4/chipcard.m40000664000175000017500000002306214043610744012747 00000000000000# $Id: chipcard.m4 79 2005-05-31 22:50:34Z aquamaniac $ # (c) 2004-2006 Martin Preuss # This function checks for chipcard-client and chipcard-server AC_DEFUN([AC_CHIPCARD_CLIENT], [ dnl searches for chipcard_client dnl Arguments: dnl $1: major version minimum dnl $2: minor version minimum dnl $3: patchlevel version minimum dnl $4: build version minimum dnl Returns: chipcard_client_dir dnl chipcard_client_datadir dnl chipcard_client_libs dnl chipcard_client_includes dnl have_chipcard_client if test -z "$1"; then vma="0"; else vma="$1"; fi if test -z "$2"; then vmi="1"; else vmi="$2"; fi if test -z "$3"; then vpl="0"; else vpl="$3"; fi if test -z "$4"; then vbld="0"; else vbld="$4"; fi AC_MSG_CHECKING(if chipcard_client support desired) AC_ARG_ENABLE(chipcard-client, [ --enable-chipcard-client enable chipcard_client support (default=yes)], enable_chipcard_client="$enableval", enable_chipcard_client="yes") AC_MSG_RESULT($enable_chipcard_client) have_chipcard_client="no" chipcard_client_dir="" chipcard_client_datadir="" chipcard_client_libs="" chipcard_client_infolib="" chipcard_client_includes="" chipcard_client_servicedir="" if test "$enable_chipcard_client" != "no"; then AC_MSG_CHECKING(for chipcard_client) AC_ARG_WITH(chipcard-client-dir, [ --with-chipcard-client-dir=DIR uses chipcard_client from given dir], [lcc_dir="$withval"], [lcc_dir="${prefix} \ /usr/local \ /usr \ /chipcard-client \ /sw \ /"]) for li in $lcc_dir; do if test -x "$li/bin/chipcard-config"; then chipcard_client_dir="$li"; break fi done if test -z "$chipcard_client_dir"; then AC_MSG_RESULT([not found ]) AC_MSG_ERROR([ *** The library libchipcardc was not found. Obtain it from *** http://www.libchipcard.de. *** If it is already installed (including the -devel package), *** you might need to specify the location with the *** option --with-chipcard-client-dir=DIR. *** *** Please note that it is not Libchipcard this package requested, it is the *** successor chipcard.]) else AC_MSG_RESULT($chipcard_client_dir) AC_MSG_CHECKING(for chipcard-client libs) chipcard_client_libs="`$chipcard_client_dir/bin/chipcard-config --client-libs`" AC_MSG_RESULT($chipcard_client_libs) AC_MSG_CHECKING(for chipcard-client includes) chipcard_client_includes="`$chipcard_client_dir/bin/chipcard-config --includes`" AC_MSG_RESULT($chipcard_client_includes) AC_MSG_CHECKING(for chipcard-client datadir) chipcard_client_datadir="`$chipcard_client_dir/bin/chipcard-config --client-datadir`" AC_MSG_RESULT($chipcard_client_datadir) fi AC_MSG_CHECKING(if chipcard_client test desired) AC_ARG_ENABLE(chipcard-client-test, [ --enable-chipcard-client-test enable chipcard_client-test (default=yes)], enable_chipcard_client_test="$enableval", enable_chipcard_client_test="yes") AC_MSG_RESULT($enable_chipcard_client_test) AC_MSG_CHECKING(for Chipcard-Client version >=$vma.$vmi.$vpl.$vbld) if test "$enable_chipcard_client_test" != "no"; then chipcard_client_versionstring="`$chipcard_client_dir/bin/chipcard-config --vstring`.`$chipcard_client_dir/bin/chipcard-config --vbuild`" AC_MSG_RESULT([found $chipcard_client_versionstring]) if test "$vma" -gt "`$chipcard_client_dir/bin/chipcard-config --vmajor`"; then AC_MSG_ERROR([Your Chipcard-Client version is way too old. Please update from http://sf.net/projects/libchipcard]) elif test "$vma" = "`$chipcard_client_dir/bin/chipcard-config --vmajor`"; then if test "$vmi" -gt "`$chipcard_client_dir/bin/chipcard-config --vminor`"; then AC_MSG_ERROR([Your Chipcard-Client version is too old. Please update from http://sf.net/projects/libchipcard]) elif test "$vmi" = "`$chipcard_client_dir/bin/chipcard-config --vminor`"; then if test "$vpl" -gt "`$chipcard_client_dir/bin/chipcard-config --vpatchlevel`"; then AC_MSG_ERROR([Your Chipcard-Client version is a little bit too old. Please update from http://sf.net/projects/libchipcard]) elif test "$vpl" = "`$chipcard_client_dir/bin/chipcard-config --vpatchlevel`"; then if test "$vbld" -gt "`$chipcard_client_dir/bin/chipcard-config --vbuild`"; then AC_MSG_ERROR([Your Chipcard-Client version is a little bit too old. Please update to the latest CVS version. Instructions for accessing CVS can be found on http://sf.net/projects/libchipcard]) fi fi fi fi have_chipcard_client="yes" #AC_MSG_RESULT(yes) else have_chipcard_client="yes" AC_MSG_RESULT(assuming yes) fi dnl end of "if enable-chipcard-client" fi AC_SUBST(chipcard_client_dir) AC_SUBST(chipcard_client_datadir) AC_SUBST(chipcard_client_libs) AC_SUBST(chipcard_client_includes) ]) AC_DEFUN([AC_CHIPCARD_SERVER], [ dnl searches for chipcard_server dnl Arguments: dnl $1: major version minimum dnl $2: minor version minimum dnl $3: patchlevel version minimum dnl $4: build version minimum dnl Returns: chipcard_server_datadir dnl chipcard_server_driverdir dnl chipcard_server_servicedir dnl have_chipcard_server if test -z "$1"; then vma="0"; else vma="$1"; fi if test -z "$2"; then vmi="1"; else vmi="$2"; fi if test -z "$3"; then vpl="0"; else vpl="$3"; fi if test -z "$4"; then vbld="0"; else vbld="$4"; fi AC_MSG_CHECKING(if chipcard_server support desired) AC_ARG_ENABLE(chipcard-server, [ --enable-chipcard-server enable chipcard_server support (default=yes)], enable_chipcard_server="$enableval", enable_chipcard_server="yes") AC_MSG_RESULT($enable_chipcard_server) have_chipcard_server="no" chipcard_server_dir="" chipcard_server_servicedir="" chipcard_server_driverdir="" chipcard_server_datadir="" if test "$enable_chipcard_server" != "no"; then AC_MSG_CHECKING(for chipcard_server) AC_ARG_WITH(chipcard-server-dir, [ --with-chipcard-server-dir=DIR uses chipcard_server from given dir], [lcc_dir="$withval"], [lcc_dir="${prefix} \ /usr/local \ /usr \ /chipcard-server \ /"]) for li in $lcc_dir; do if test -x "$li/bin/chipcard-config"; then chipcard_server_dir="$li"; break fi done if test -z "$chipcard_server_dir"; then AC_MSG_RESULT([not found ]) AC_MSG_ERROR([ *** The library libchipcards was not found. Obtain it from *** http://www.libchipcard.de. *** If it is already installed (including the -devel package), *** you might need to specify the location with the *** option --with-chipcard-server-dir=DIR. *** *** Please note that it is not Libchipcard this package requested, it is the *** successor chipcard.]) else AC_MSG_RESULT($chipcard_server_dir) AC_MSG_CHECKING(for chipcard-server datadir) chipcard_server_datadir="`$chipcard_server_dir/bin/chipcard-config --server-datadir`" AC_MSG_RESULT($chipcard_server_datadir) AC_MSG_CHECKING(for chipcard-server driver dir) chipcard_server_driverdir="`$chipcard_server_dir/bin/chipcard-config --driverdir`" AC_MSG_RESULT($chipcard_server_driverdir) AC_MSG_CHECKING(for chipcard-server service dir) chipcard_server_servicedir="`$chipcard_server_dir/bin/chipcard-config --servicedir`" AC_MSG_RESULT($chipcard_server_servicedir) fi AC_MSG_CHECKING(if chipcard_server test desired) AC_ARG_ENABLE(chipcard-server-test, [ --enable-chipcard-server-test enable chipcard_server-test (default=yes)], enable_chipcard_server_test="$enableval", enable_chipcard_server_test="yes") AC_MSG_RESULT($enable_chipcard_server_test) AC_MSG_CHECKING(for Chipcard-Server version >=$vma.$vmi.$vpl.$vbld) if test "$enable_chipcard_server_test" != "no"; then chipcard_server_versionstring="`$chipcard_server_dir/bin/chipcard-config --vstring`.`$chipcard_server_dir/bin/chipcard-config --vbuild`" AC_MSG_RESULT([found $chipcard_server_versionstring]) if test "$vma" -gt "`$chipcard_server_dir/bin/chipcard-config --vmajor`"; then AC_MSG_ERROR([Your Chipcard-Server version is way too old. Please update from http://sf.net/projects/libchipcard]) elif test "$vma" = "`$chipcard_server_dir/bin/chipcard-config --vmajor`"; then if test "$vmi" -gt "`$chipcard_server_dir/bin/chipcard-config --vminor`"; then AC_MSG_ERROR([Your Chipcard-Server version is too old. Please update from http://sf.net/projects/libchipcard]) elif test "$vmi" = "`$chipcard_server_dir/bin/chipcard-config --vminor`"; then if test "$vpl" -gt "`$chipcard_server_dir/bin/chipcard-config --vpatchlevel`"; then AC_MSG_ERROR([Your Chipcard-Server version is a little bit too old. Please update from http://sf.net/projects/libchipcard]) elif test "$vpl" = "`$chipcard_server_dir/bin/chipcard-config --vpatchlevel`"; then if test "$vbld" -gt "`$chipcard_server_dir/bin/chipcard-config --vbuild`"; then AC_MSG_ERROR([Your Chipcard-Server version is a little bit too old. Please update to the latest CVS version. Instructions for accessing CVS can be found on http://sf.net/projects/libchipcard]) fi fi fi fi have_chipcard_server="yes" #AC_MSG_RESULT(yes) else have_chipcard_server="yes" AC_MSG_RESULT(assuming yes) fi dnl end of "if enable-chipcard-server" fi AC_SUBST(chipcard_server_servicedir) AC_SUBST(chipcard_server_driverdir) AC_SUBST(chipcard_server_datadir) ]) aqbanking-6.6.1/m4/fox.pc0000664000175000017500000000054614043610744012052 00000000000000prefix=/usr exec_prefix=${prefix} libdir=${exec_prefix}/lib includedir=${prefix}/include Name: FOX Description: FOX is a C++ based Toolkit for developing Graphical User Interfaces Version: 1.6.16 Libs: -L${libdir} -lFOX-1.6 -lXext -lX11 -lXcursor -lXrandr -ldl -lpthread -lrt -ljpeg -lpng -ltiff -lz -lbz2 -lm -lGLU -lGL Cflags: -I${includedir}/fox-1.6 aqbanking-6.6.1/m4/ac_python_module.m40000664000175000017500000000121014043610744014512 00000000000000dnl @synopsis AC_PYTHON_MODULE(modname[, fatal]) dnl dnl Checks for Python module. dnl dnl If fatal is non-empty then absence of a module will trigger an dnl error. dnl dnl @category InstalledPackages dnl @author Andrew Collier . dnl @version 2004-07-14 dnl @license AllPermissive AC_DEFUN([AC_PYTHON_MODULE],[ AC_MSG_CHECKING(python module: $1) $PYTHON -c "import $1" 2>/dev/null if test $? -eq 0; then AC_MSG_RESULT(yes) eval AS_TR_CPP(HAVE_PYMOD_$1)=yes else AC_MSG_RESULT(no) eval AS_TR_CPP(HAVE_PYMOD_$1)=no # if test -n "$2" then AC_MSG_ERROR(failed to find required module $1) exit 1 fi fi ]) aqbanking-6.6.1/po/0000755000175000017500000000000015037736165011113 500000000000000aqbanking-6.6.1/po/Makefile.in0000644000175000017500000004111415037736024013073 00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = po ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/distri.m4 $(top_srcdir)/m4/gwenhywfar.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/os.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADD_ACLOCAL_FLAGS = @ADD_ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AQBANKING_CLI_VERSION_STRING = @AQBANKING_CLI_VERSION_STRING@ AQBANKING_FINTS_VERSION_STRING = @AQBANKING_FINTS_VERSION_STRING@ AQBANKING_SO_AGE = @AQBANKING_SO_AGE@ AQBANKING_SO_CURRENT = @AQBANKING_SO_CURRENT@ AQBANKING_SO_EFFECTIVE = @AQBANKING_SO_EFFECTIVE@ AQBANKING_SO_REVISION = @AQBANKING_SO_REVISION@ AQBANKING_VERSION_BUILD = @AQBANKING_VERSION_BUILD@ AQBANKING_VERSION_FULL_STRING = @AQBANKING_VERSION_FULL_STRING@ AQBANKING_VERSION_MAJOR = @AQBANKING_VERSION_MAJOR@ AQBANKING_VERSION_MINOR = @AQBANKING_VERSION_MINOR@ AQBANKING_VERSION_PATCHLEVEL = @AQBANKING_VERSION_PATCHLEVEL@ AQBANKING_VERSION_RELEASE_STRING = @AQBANKING_VERSION_RELEASE_STRING@ AQBANKING_VERSION_STRING = @AQBANKING_VERSION_STRING@ AQBANKING_VERSION_TAG = @AQBANKING_VERSION_TAG@ AQEBICS_CFLAGS = @AQEBICS_CFLAGS@ AQEBICS_LIBS = @AQEBICS_LIBS@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATETIME = @DATETIME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_EXCLUDE_PATTERNS = @DOXYGEN_EXCLUDE_PATTERNS@ DOXYGEN_FILE_PATTERNS = @DOXYGEN_FILE_PATTERNS@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENGUI_GTK2_CFLAGS = @GWENGUI_GTK2_CFLAGS@ GWENGUI_GTK2_LIBS = @GWENGUI_GTK2_LIBS@ GWENHYWFAR_MINIMUM_VERSION = @GWENHYWFAR_MINIMUM_VERSION@ HAVE_GWENGUI_GTK2 = @HAVE_GWENGUI_GTK2@ HAVE_I18N = @HAVE_I18N@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIBXSLT_CFLAGS = @LIBXSLT_CFLAGS@ LIBXSLT_LIBS = @LIBXSLT_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_SUPPORTS_QT = @MSGFMT_SUPPORTS_QT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ TUTORIALS = @TUTORIALS@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XMLMERGE = @XMLMERGE@ XMLSEC_CFLAGS = @XMLSEC_CFLAGS@ XMLSEC_LIBS = @XMLSEC_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ aqbanking_backends = @aqbanking_backends@ aqbanking_cfg_searchdir = @aqbanking_cfg_searchdir@ aqbanking_data_searchdir = @aqbanking_data_searchdir@ aqbanking_headerdir = @aqbanking_headerdir@ aqbanking_headerdir_am = @aqbanking_headerdir_am@ aqbanking_includes = @aqbanking_includes@ aqbanking_internal_libs = @aqbanking_internal_libs@ aqbanking_ldflags = @aqbanking_ldflags@ aqbanking_libs = @aqbanking_libs@ aqbanking_locale_searchdir = @aqbanking_locale_searchdir@ aqbanking_modules = @aqbanking_modules@ aqbanking_pkgdatadir = @aqbanking_pkgdatadir@ aqbanking_plugin_searchdir = @aqbanking_plugin_searchdir@ aqbanking_plugindir = @aqbanking_plugindir@ aqbanking_plugins_backends_dirs = @aqbanking_plugins_backends_dirs@ aqbanking_plugins_backends_libs = @aqbanking_plugins_backends_libs@ aqbanking_plugins_bankinfo_dirs = @aqbanking_plugins_bankinfo_dirs@ aqbanking_plugins_bankinfo_libs = @aqbanking_plugins_bankinfo_libs@ aqbanking_plugins_imexporters_dirs = @aqbanking_plugins_imexporters_dirs@ aqbanking_plugins_imexporters_libs = @aqbanking_plugins_imexporters_libs@ aqbanking_plugins_parsers_dirs = @aqbanking_plugins_parsers_dirs@ aqbanking_symlinkdir = @aqbanking_symlinkdir@ aqbanking_sys_is_windows = @aqbanking_sys_is_windows@ aqbankingpp_modules = @aqbankingpp_modules@ aqebics_datadir = @aqebics_datadir@ aqebics_includes = @aqebics_includes@ aqebics_internal_libs = @aqebics_internal_libs@ aqebics_ldflags = @aqebics_ldflags@ aqebics_libs = @aqebics_libs@ aqfints_datadir = @aqfints_datadir@ aqhbci_datadir = @aqhbci_datadir@ aqhbci_includes = @aqhbci_includes@ aqhbci_internal_libs = @aqhbci_internal_libs@ aqhbci_ldflags = @aqhbci_ldflags@ aqhbci_libs = @aqhbci_libs@ aqofxconnect_includes = @aqofxconnect_includes@ aqofxconnect_internal_libs = @aqofxconnect_internal_libs@ aqofxconnect_libs = @aqofxconnect_libs@ aqpaypal_includes = @aqpaypal_includes@ aqpaypal_internal_libs = @aqpaypal_internal_libs@ aqpaypal_libs = @aqpaypal_libs@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gmp_libs = @gmp_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_dir = @gwenhywfar_dir@ gwenhywfar_has_crypt = @gwenhywfar_has_crypt@ gwenhywfar_headers = @gwenhywfar_headers@ gwenhywfar_includes = @gwenhywfar_includes@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_plugins = @gwenhywfar_plugins@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ typemaker2_exe = @typemaker2_exe@ visibility_cflags = @visibility_cflags@ with_aqebics = @with_aqebics@ with_aqhbci = @with_aqhbci@ EXTRA_DIST = de.po all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu po/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu po/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags-am uninstall uninstall-am .PRECIOUS: Makefile typefiles: typedefs: # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: aqbanking-6.6.1/po/de.po0000664000175000017500000067525414156464025012002 00000000000000# translation of de.po to deutsch # Markus Frisch, 2005. # Martin Preuss , 2005, 2007, 2008, 2010, 2011, 2019, 2020. # msgid "" msgstr "" "Project-Id-Version: aqbanking\n" "Report-Msgid-Bugs-To: aqbanking-user@lists.aqbanking.de\n" "POT-Creation-Date: 2021-02-16 22:31+0100\n" "PO-Revision-Date: 2021-02-16 22:35+0100\n" "Last-Translator: Christian Stimming \n" "Language-Team: Deutsch <>\n" "Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bits\n" "Plural-Forms: nplurals=2; plural=(n!=1);\n" "X-Generator: Gtranslator 2.91.7\n" "X-Poedit-Basepath: /home/martin/projekte/c/aqbanking/aqbanking-git/" "aqbanking\n" #. flags #. type #. name #. minnum #. maxnum #. short option #. long option #: src/tools/aqbanking-cli/main.c:68 src/tools/aqbanking-cli/main.c:69 #: src/tools/aqbanking-cli/aqebics-tool.c:54 #: src/tools/aqbanking-cli/aqebics-tool.c:55 #: src/tools/aqbanking-cli/aqpaypal-tool.c:54 #: src/tools/aqbanking-cli/aqpaypal-tool.c:55 #: src/tools/aqbanking-cli/aqhbci-tool.c:54 #: src/tools/aqbanking-cli/aqhbci-tool.c:55 msgid "Specify the configuration folder" msgstr "Gibt den Konfigurationsordner an" #: src/tools/aqbanking-cli/main.c:147 src/tools/aqbanking-cli/main.c:149 #: src/tools/aqbanking-cli/aqebics-tool.c:111 #: src/tools/aqbanking-cli/aqebics-tool.c:113 #: src/tools/aqbanking-cli/aqpaypal-tool.c:111 #: src/tools/aqbanking-cli/aqpaypal-tool.c:113 #: src/tools/aqbanking-cli/aqhbci-tool.c:122 #: src/tools/aqbanking-cli/aqhbci-tool.c:124 msgid "" "Show this help screen. For help on commands, run aqbanking-cli --" "help." msgstr "" "Diesen Hilfetext anzeigen. Um die Hilfe fĵr einzelne Kommandos zu erhalten, " "bitte aufrufen: aqbanking-cli --help" #: src/tools/aqbanking-cli/main.c:190 #: src/tools/aqbanking-cli/aqebics-tool.c:156 #: src/tools/aqbanking-cli/aqpaypal-tool.c:154 #: src/tools/aqbanking-cli/aqhbci-tool.c:165 msgid "This is version " msgstr "Dies ist Version " #: src/tools/aqbanking-cli/main.c:193 #: src/tools/aqbanking-cli/aqebics-tool.c:159 #: src/tools/aqbanking-cli/aqpaypal-tool.c:157 #: src/tools/aqbanking-cli/aqhbci-tool.c:168 #: src/libs/plugins/backends/aqhbci/control/main.c:51 #: src/libs/plugins/backends/aqebics/control/main.c:43 #: src/libs/plugins/backends/aqfints/banking/control/control.c:33 msgid "Usage: " msgstr "Benutzung: " #: src/tools/aqbanking-cli/main.c:196 #: src/tools/aqbanking-cli/aqebics-tool.c:162 #: src/tools/aqbanking-cli/aqpaypal-tool.c:160 #: src/tools/aqbanking-cli/aqhbci-tool.c:171 msgid " [GLOBAL OPTIONS] COMMAND [LOCAL OPTIONS]\n" msgstr " [ALLGEMEINE OPTIONEN] KOMMANDO [KOMMANDO-OPTIONEN]\n" #: src/tools/aqbanking-cli/main.c:199 #: src/tools/aqbanking-cli/aqebics-tool.c:165 #: src/tools/aqbanking-cli/aqpaypal-tool.c:163 #: src/tools/aqbanking-cli/aqhbci-tool.c:174 msgid "" "\n" "Global Options:\n" msgstr "" "\n" "Allgemeine Optionen:\n" #: src/tools/aqbanking-cli/main.c:206 msgid "" "\n" "Commands:\n" msgstr "" "\n" "Kommandos:\n" #: src/tools/aqbanking-cli/main.c:208 msgid "Prints the list of accounts" msgstr "Anzeigen der Kontenliste" #: src/tools/aqbanking-cli/main.c:211 msgid "Export balances from a context file." msgstr "Salden aus einer Kontextdatei exportieren." #: src/tools/aqbanking-cli/main.c:214 #, fuzzy msgid "List transactions or transfers from a context file." msgstr "Buchungen aus einer Kontextdatei exportieren." #: src/tools/aqbanking-cli/main.c:217 #, fuzzy msgid "Export transactions from a context file which match certain status." msgstr "Buchungen aus einer Kontextdatei exportieren." #: src/tools/aqbanking-cli/main.c:220 msgid "Requests transactions, balances, standing orders etc." msgstr "" #: src/tools/aqbanking-cli/main.c:223 msgid "Check an IBAN" msgstr "Eine IBAN ĵberprĵfen" #: src/tools/aqbanking-cli/main.c:226 msgid "Import a file into an import context file" msgstr "Eine Datei in eine Import-Kontextdatei importieren" #: src/tools/aqbanking-cli/main.c:229 msgid "Export an import context file into a file (previously \"listtrans\")" msgstr "" #: src/tools/aqbanking-cli/main.c:232 msgid "Issue a single SEPA transfer (data from command line)" msgstr "" #: src/tools/aqbanking-cli/main.c:235 msgid "Issue a number of SEPA transfers (data from a file)" msgstr "" #: src/tools/aqbanking-cli/main.c:238 msgid "Issue a single SEPA debit note (data from command line)" msgstr "" #: src/tools/aqbanking-cli/main.c:241 msgid "Issue a single flash SEPA debit note COR1 (data from command line)" msgstr "" #: src/tools/aqbanking-cli/main.c:244 msgid "Issue a number of SEPA debit notes (data from a file)" msgstr "" #: src/tools/aqbanking-cli/main.c:247 msgid "Add a transfer to an existing import context file" msgstr "" #: src/tools/aqbanking-cli/main.c:250 #, fuzzy msgid "Add a SEPA debit note to an existing import context file" msgstr "Eine Datei in eine Import-Kontextdatei importieren" #: src/tools/aqbanking-cli/main.c:253 #, fuzzy msgid "Add a flash SEPA debit note to an existing import context file" msgstr "Eine Datei in eine Import-Kontextdatei importieren" #: src/tools/aqbanking-cli/main.c:256 #, fuzzy msgid "Manage SEPA standing orders" msgstr "Dauerauftrag erstellen" #: src/tools/aqbanking-cli/main.c:259 msgid "Fill gaps in an import context file from configuration settings" msgstr "" #: src/tools/aqbanking-cli/main.c:262 msgid "Print existing profiles" msgstr "" #: src/tools/aqbanking-cli/main.c:265 msgid "Print the program and library versions" msgstr "" #: src/tools/aqbanking-cli/util.c:1102 src/tools/aqbanking-cli/util.c:1112 #: src/tools/aqbanking-cli/util.c:1124 src/tools/aqbanking-cli/listtrans.c:308 #: src/tools/aqbanking-cli/listtrans.c:311 #: src/tools/aqbanking-cli/listtrans.c:315 #: src/tools/aqbanking-cli/listbal.c:151 src/tools/aqbanking-cli/listbal.c:314 msgid "DD.MM.YYYY" msgstr "" #: src/tools/aqbanking-cli/chkiban.c:68 #, c-format msgid "" "This command checks the given combination of account id\n" "and bank code for validity.\n" "\n" "Return codes:\n" " 1: missing/bad arguments\n" " 2: error while initializing AqBanking\n" " 3: given combination is definately invalid\n" " 5: error while deinitializing AqBanking\n" "\n" "Arguments:\n" "%s\n" msgstr "" #: src/libs/aqbanking/dialogs/dlg_setup.c:541 msgid "AqBanking Setup" msgstr "AqBanking-Einrichtung" #: src/libs/aqbanking/dialogs/dlg_setup.c:549 msgid "Id\tBank Code\tUser Id\tCustomer Id\tUser Name\tModule" msgstr "Id\tBankleitzahl\tBenutzerkennung\tKundenkennung\tBenutzername\tModul" #: src/libs/aqbanking/dialogs/dlg_setup.c:563 msgid "" "Id\tBank Code\tBank Name\tAccount Number\tAccount Name\tOwner Name\tModule" msgstr "Id\tBLZ\tBankname\tKontonummer\tKontoname\tKontoinhaber\tModul" #: src/libs/aqbanking/dialogs/dlg_setup.c:925 #, c-format msgid "" "

Do you really want to delete the user %s?Do you " "really want to delete the user \"%s\"?" msgstr "" "

Wollen Sie den Benutzer %s wirklich lĥschen?Wollen " "Sie den Benutzer \"%s\" wirklich lĥschen?" #: src/libs/aqbanking/dialogs/dlg_setup.c:934 msgid "Delete User" msgstr "Benutzer entfernen" #: src/libs/aqbanking/dialogs/dlg_setup.c:936 #: src/libs/aqbanking/dialogs/dlg_setup.c:961 #: src/libs/aqbanking/dialogs/dlg_setup.c:1204 #: src/libs/plugins/backends/aqhbci/admjobs/jobchangekeys.c:1172 msgid "Yes" msgstr "Ja" #: src/libs/aqbanking/dialogs/dlg_setup.c:937 #: src/libs/aqbanking/dialogs/dlg_setup.c:962 #: src/libs/aqbanking/dialogs/dlg_setup.c:1205 #: src/libs/plugins/backends/aqhbci/admjobs/jobchangekeys.c:1171 msgid "No" msgstr "Nein" #: src/libs/aqbanking/dialogs/dlg_setup.c:954 #: src/libs/aqbanking/dialogs/dlg_setup.c:972 #: src/libs/aqbanking/dialogs/dlg_setup.c:984 #: src/libs/aqbanking/dialogs/dlg_setup.c:1215 #: src/libs/aqbanking/dialogs/dlg_editaccount.c:625 #: src/libs/aqbanking/dialogs/dlg_editaccount.c:646 #: src/libs/aqbanking/dialogs/dlg_editaccount.c:663 #: src/libs/aqbanking/dialogs/dlg_edituser.c:330 #: src/libs/aqbanking/dialogs/dlg_edituser.c:351 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_ddvcard.c:104 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_ddvcard.c:115 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_ddvcard.c:802 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_ddvcard.c:837 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_ddvcard.c:979 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_ddvcard.c:1083 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_editaccount.c:666 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_editaccount.c:687 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_editaccount.c:704 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_edituserddv.c:247 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_edituserddv.c:355 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_edituserddv.c:411 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_edituserddv.c:432 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_newkeyfile.c:87 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_newkeyfile.c:860 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_newkeyfile.c:890 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_newkeyfile.c:899 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_newkeyfile.c:917 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_newkeyfile.c:929 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_newkeyfile.c:949 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_newkeyfile.c:1161 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_newkeyfile.c:1291 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_importkeyfile.c:705 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_importkeyfile.c:725 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_importkeyfile.c:748 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_importkeyfile.c:767 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_importkeyfile.c:816 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_importkeyfile.c:950 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_importkeyfile.c:989 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_importkeyfile.c:1155 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_importkeyfile.c:1285 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_edituserpintan.c:543 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_edituserpintan.c:607 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_edituserpintan.c:663 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_edituserpintan.c:684 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_pintan_tanmode.c:280 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_pintan_tanmode.c:301 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_zkacard.c:105 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_zkacard.c:116 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_zkacard.c:805 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_zkacard.c:842 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_zkacard.c:1037 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_zkacard.c:1141 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_edituserrdh.c:357 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_edituserrdh.c:546 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_edituserrdh.c:602 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_edituserrdh.c:623 #: src/libs/plugins/backends/aqebics/dialogs/dlg_newkeyfile.c:91 #: src/libs/plugins/backends/aqebics/dialogs/dlg_newkeyfile.c:958 #: src/libs/plugins/backends/aqebics/dialogs/dlg_newkeyfile.c:991 #: src/libs/plugins/backends/aqebics/dialogs/dlg_newkeyfile.c:1000 #: src/libs/plugins/backends/aqebics/dialogs/dlg_newkeyfile.c:1018 #: src/libs/plugins/backends/aqebics/dialogs/dlg_newkeyfile.c:1030 #: src/libs/plugins/backends/aqebics/dialogs/dlg_newkeyfile.c:1045 #: src/libs/plugins/backends/aqebics/dialogs/dlg_newkeyfile.c:1247 #: src/libs/plugins/backends/aqebics/dialogs/dlg_newkeyfile.c:1366 #: src/libs/plugins/backends/aqebics/dialogs/dlg_edituser.c:523 #: src/libs/plugins/backends/aqebics/dialogs/dlg_edituser.c:579 #: src/libs/plugins/backends/aqebics/dialogs/dlg_edituser.c:600 #: src/libs/plugins/backends/aqpaypal/dlg_edituser.c:553 #: src/libs/plugins/backends/aqpaypal/dlg_edituser.c:579 msgid "Error" msgstr "Fehler" #: src/libs/aqbanking/dialogs/dlg_setup.c:955 msgid "" "

There is at least one account assigned to the selected user.

Do you want to remove the account(s) and continue removing the user?There is at least one account assigned to the selected user.\n" "Do you want to remove the account(s) and continue removing the user?" msgstr "" "

Dem gew¤hlten Benutzer ist mindestens ein Konto zugeordnet.

" "Wollen Sie die zugeordneten Konten lĥschen und anschlieŸend den Benutzer " "entfernen?

Dem gew¤hlten Benutzer ist mindestens ein Konto " "zugeordnet.

Wollen Sie die zugeordneten Konten lĥschen und anschlieŸend " "den Benutzer entfernen?" #: src/libs/aqbanking/dialogs/dlg_setup.c:972 #, c-format msgid "Error deleting account: %d (%d deleted)" msgstr "Fehler beim Lĥschen eines Kontos: %d (%d bereits entfernt)" #: src/libs/aqbanking/dialogs/dlg_setup.c:984 #, c-format msgid "Error deleting user: %d" msgstr "Fehler beim Entfernen des Benutzers: %d" #: src/libs/aqbanking/dialogs/dlg_setup.c:1071 msgid "" "Please select the online banking backend the new account is to be created " "for." msgstr "" "Bitte w¤hlen Sie das Onlinebanking-Protokoll welches Sie mit dem neuen Konto " "verwenden wollen." #: src/libs/aqbanking/dialogs/dlg_setup.c:1193 #, c-format msgid "" "

Do you really want to delete the account %s?Do you " "really want to delete the account \"%s\"?" msgstr "" "

Wollen Sie das Konto %s entfernen?Wollen Sie das " "Konto \"%s\" entfernen?" #: src/libs/aqbanking/dialogs/dlg_setup.c:1202 msgid "Delete Account" msgstr "Konto entfernen" #: src/libs/aqbanking/dialogs/dlg_setup.c:1215 #, c-format msgid "Error deleting account: %d" msgstr "Fehler beim Entfernen des Kontos: %d" #: src/libs/aqbanking/dialogs/dlg_editaccount.c:209 #: src/libs/plugins/backends/aqofxconnect/dialogs/dlg_edituser.c:616 #: src/libs/plugins/backends/aqofxconnect/dialogs/dlg_newuser.c:656 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_editaccount.c:217 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_edituserpintan.c:193 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_pintan_tanmode.c:390 msgid "-- select --" msgstr "-- ausw¤hlen --" #: src/libs/aqbanking/dialogs/dlg_editaccount.c:281 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_editaccount.c:290 msgid "Edit Account" msgstr "Konto bearbeiten" #. store crypter id #: src/libs/aqbanking/dialogs/dlg_editaccount.c:313 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_editaccount.c:322 #: src/libs/plugins/backends/aqhbci/msglayer/msgcrypt_rxh_common.c:1604 #: src/libs/plugins/backends/aqhbci/msglayer/msgcrypt_rxh_decrypt.c:108 #: src/libs/plugins/backends/aqhbci/msglayer/msgcrypt_ddv.c:771 #: src/libs/plugins/backends/aqhbci/msglayer/msgcrypt_ddv.c:1079 #: src/libs/plugins/backends/aqhbci/msglayer/msgcrypt_pintan.c:308 #: src/libs/plugins/backends/aqhbci/msglayer/msgcrypt_pintan.c:496 #: src/libs/plugins/backends/aqebics/client/provider_sendcmd.c:328 #: src/libs/plugins/backends/aqebics/client/provider_sendcmd.c:377 msgid "unknown" msgstr "unbekannt" #: src/libs/aqbanking/dialogs/dlg_editaccount.c:316 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_editaccount.c:325 msgid "Bank Account" msgstr "Girokonto" #: src/libs/aqbanking/dialogs/dlg_editaccount.c:319 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_editaccount.c:328 msgid "Credit Card Account" msgstr "Kreditkarte" #: src/libs/aqbanking/dialogs/dlg_editaccount.c:322 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_editaccount.c:331 msgid "Checking Account" msgstr "Scheckkonto" #: src/libs/aqbanking/dialogs/dlg_editaccount.c:325 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_editaccount.c:334 msgid "Savings Account" msgstr "Sparkonto" #: src/libs/aqbanking/dialogs/dlg_editaccount.c:328 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_editaccount.c:337 msgid "Investment Account" msgstr "Investmentkonto" #: src/libs/aqbanking/dialogs/dlg_editaccount.c:331 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_editaccount.c:340 msgid "Cash Account" msgstr "Bargeld" #: src/libs/aqbanking/dialogs/dlg_editaccount.c:334 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_editaccount.c:343 msgid "Moneymarket Account" msgstr "Geldmarktkonto" #: src/libs/aqbanking/dialogs/dlg_editaccount.c:626 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_editaccount.c:667 msgid "Unable to lock account. Maybe already in use?" msgstr "" "Es konnte kein exklusiver Zugriff auf das Konto erreicht werden. Eventuell " "ist das Konto bereits in Benutzung?" #: src/libs/aqbanking/dialogs/dlg_editaccount.c:627 #: src/libs/aqbanking/dialogs/dlg_editaccount.c:648 #: src/libs/aqbanking/dialogs/dlg_editaccount.c:665 #: src/libs/aqbanking/dialogs/dlg_edituser.c:332 #: src/libs/aqbanking/dialogs/dlg_edituser.c:353 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_editaccount.c:668 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_editaccount.c:689 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_editaccount.c:706 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_edituserddv.c:413 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_edituserddv.c:434 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_edituserpintan.c:665 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_edituserpintan.c:686 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_pintan_tanmode.c:282 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_pintan_tanmode.c:303 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_edituserrdh.c:604 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_edituserrdh.c:625 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_edituserrdh.c:744 #: src/libs/plugins/backends/aqebics/dialogs/dlg_edituser.c:581 #: src/libs/plugins/backends/aqebics/dialogs/dlg_edituser.c:602 #: src/libs/plugins/backends/aqpaypal/dlg_edituser.c:555 #: src/libs/plugins/backends/aqpaypal/dlg_edituser.c:581 msgid "Dismiss" msgstr "SchlieŸen" #: src/libs/aqbanking/dialogs/dlg_editaccount.c:647 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_editaccount.c:688 msgid "Unable to unlock account." msgstr "Exklusiver Zugriff auf das Konto konnte nicht freigegeben werden." #: src/libs/aqbanking/dialogs/dlg_editaccount.c:664 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_editaccount.c:705 msgid "Unable to update account spec." msgstr "Kontospezifikation konnte nicht aktualisiert werden." #: src/libs/aqbanking/dialogs/dlg_selectbankinfo.c:394 #: src/libs/plugins/backends/aqofxconnect/libofxhome/dlg_getinst.c:253 msgid "Select a Bank" msgstr "W¤hlen Sie eine Bank" #: src/libs/aqbanking/dialogs/dlg_selectbankinfo.c:401 msgid "Bank Code\tBIC\tName\tLocation\tProtocols" msgstr "BLZ\tBIC\tName\tOrt\tProtokolle" #: src/libs/aqbanking/dialogs/dlg_setup_newuser.c:261 msgid "New User Wizard" msgstr "Assistent fĵr neue Benutzer" #: src/libs/aqbanking/dialogs/dlg_setup_newuser.c:272 msgid "" "

This dialog assists you in creating an online banking user.The " "following steps are:

  • select the banking protocol
  • select " "the type of user to create
This dialog assists you in " "creating an online banking user.\n" "The following steps are:\n" " - select the banking protocol\n" " - select the type of user to create\n" msgstr "" "

Dieser Dialog unterstĵtzt Sie bei der Einrichtung eines " "Onlinebanking-Benutzers. Die folgenden Schritte werden durchgefĵhrt:

" "
  • Auswahl des Onlinebanking-Protokolles
  • Auswahl des " "Benutzertyps (Chipkarte, Schlĵsseldatei etc)
Dieser Dialog " "unterstĵtzt Sie bei der Einrichtung eines Onlinebanking-Benutzers.\n" "Die folgenden Schritte werden durchgefĵhrt:\n" "- Auswahl des Onlinebanking-Protokolles\n" "- Auswahl des Benutzertyps (Chipkarte, Schlĵsseldatei etc)\n" #: src/libs/aqbanking/dialogs/dlg_setup_newuser.c:377 #: src/libs/aqbanking/dialogs/dlg_importer.c:775 #: src/libs/plugins/backends/aqofxconnect/dialogs/dlg_newuser.c:934 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_ddvcard.c:765 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_newkeyfile.c:739 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_importkeyfile.c:891 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_zkacard.c:768 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_pintan.c:757 #: src/libs/plugins/backends/aqebics/dialogs/dlg_newkeyfile.c:912 #: src/libs/plugins/backends/aqpaypal/dlg_newuser.c:691 msgid "Next" msgstr "Weiter" #: src/libs/aqbanking/dialogs/dlg_setup_newuser.c:386 msgid "Run" msgstr "Ausfĵhren" #. init #: src/libs/aqbanking/dialogs/dlg_edituser.c:118 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_edituserddv.c:123 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_edituserpintan.c:250 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_edituserrdh.c:125 #: src/libs/plugins/backends/aqebics/dialogs/dlg_edituser.c:121 msgid "Edit User" msgstr "Benutzer bearbeiten" #: src/libs/aqbanking/dialogs/dlg_edituser.c:331 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_edituserddv.c:412 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_edituserpintan.c:664 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_pintan_tanmode.c:281 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_edituserrdh.c:603 #: src/libs/plugins/backends/aqebics/dialogs/dlg_edituser.c:580 #: src/libs/plugins/backends/aqpaypal/dlg_edituser.c:554 msgid "Unable to lock user. Maybe already in use?" msgstr "" "Es konnte kein exklusiver Zugriff auf den Benutzer erreicht werden. " "Eventuell ist er schon in Benutzung?" #: src/libs/aqbanking/dialogs/dlg_edituser.c:352 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_edituserddv.c:433 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_edituserpintan.c:685 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_pintan_tanmode.c:302 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_edituserrdh.c:624 #: src/libs/plugins/backends/aqebics/dialogs/dlg_edituser.c:601 #: src/libs/plugins/backends/aqpaypal/dlg_edituser.c:580 msgid "Unable to unlock user." msgstr "Exklusiver Zugriff auf den Benutzer konnte nicht freigegeben werden." #: src/libs/aqbanking/dialogs/dlg_importer.c:220 msgid "File Import Wizard" msgstr "Import-Assistent" #: src/libs/aqbanking/dialogs/dlg_importer.c:232 msgid "" "

This dialog assists you in importing files.The following steps are:" "

  • select file to import
  • select importer module
  • select importer profile
This dialog assists you in " "importing files.\n" "The following steps are:\n" "- select file to import\n" "- select importer module\n" "- select importer profile\n" msgstr "" "

Dieser Dialog unterstĵtzt Sie beim Import von Dateien.Die folgenden " "Schritte sind:

  • Auswahl der zu importierenden Datei
  • Auswahl des Importer-Modules
  • Auswahl des zu verwendenden " "Importer-Profiles
Dieser Dialog unterstĵtzt Sie beim Import " "von Dateien.\n" "Die folgenden Schritte sind:\n" "- Auswahl der zu importierenden Datei \n" "- Auswahl des Importer-Modules\n" "- Auswahl des zu verwendenden Importer-Profiles\n" #: src/libs/aqbanking/dialogs/dlg_importer.c:253 msgid "Please select the file to import." msgstr "Bitte w¤hlen Sie die zu importierende Datei aus." #: src/libs/aqbanking/dialogs/dlg_importer.c:261 msgid "Please select the import module for the file." msgstr "Bitte w¤hlen Sie das zum Dateiformat passende Modul aus." #: src/libs/aqbanking/dialogs/dlg_importer.c:267 #: src/libs/aqbanking/dialogs/dlg_importer.c:287 msgid "Name\tDescription" msgstr "Name\tBeschreibung" #: src/libs/aqbanking/dialogs/dlg_importer.c:281 msgid "Please select the import profile for the file." msgstr "Bitte w¤hlen Sie das zu verwendende Profil aus." #: src/libs/aqbanking/dialogs/dlg_importer.c:309 msgid "The file has been successfully imported." msgstr "Die Datei wurde erfolgreich importiert." #: src/libs/aqbanking/dialogs/dlg_importer.c:803 msgid "Finished" msgstr "Abgeschlossen" #: src/libs/aqbanking/dialogs/dlg_importer.c:1063 msgid "Select File to Import" msgstr "Zu importierende Datei ausw¤hlen" #: src/libs/aqbanking/dialogs/dlg_importer.c:1066 msgid "All Files (*)\tCSV Files (*csv;*.CSV)\t*.sta" msgstr "Alle Dateien (*)\tCSV-Dateien (*.csv;*.CSV)\t*.sta" #: src/libs/aqbanking/dialogs/dlg_usertype_pagedefault.c:80 msgid "" "

Click on the run button below to create the user.

Click on the RUN button below to create the user." msgstr "" "

Klicken Sie auf Ausfĵhren um den Benutzer anzulegen.

Klicken Sie auf AUSFœHREN um den Benutzer anzulegen." #: src/libs/aqbanking/dialogs/dlg_selectbackend.c:276 msgid "Select Backend" msgstr "W¤hlen Sie Banking-Modul (Backend)" #: src/libs/aqbanking/dialogs/dlg_selectbackend.c:291 msgid "Select a backend." msgstr "W¤hlen Sie Banking-Modul (Backend)" #: src/libs/aqbanking/banking_online.c:487 #, c-format msgid "Could not init HTTP session (%d)" msgstr "Die HTTP-Sitzung konnte nicht initialisiert werden (%d)" #: src/libs/aqbanking/banking_online.c:497 #, c-format msgid "Could not connect to server, giving up (%d)" msgstr "Konnte keine Verbindung zum Server herstellen, Abbruch (%d)" #: src/libs/aqbanking/banking_online.c:508 msgid "Connection ok, certificate probably received" msgstr "Verbindung ok, Zertifikat vermutlich empfangen" #: src/libs/aqbanking/banking_online.c:527 #: src/libs/plugins/backends/aqhbci/applayer/outbox.c:131 msgid "Executing Jobs" msgstr "Auftr¤ge werden ausgefĵhrt" #: src/libs/aqbanking/banking_online.c:528 msgid "Now the jobs are send via their backends to the credit institutes." msgstr "" "Die Auftr¤ge werden durch die zust¤ndigen Module zu den Kreditinstituten " "gesendet." #: src/libs/aqbanking/banking_online.c:533 msgid "Sending jobs to the bank(s)" msgstr "Sende Auftr¤ge an die Bank(en)" #. sort commands by account #: src/libs/aqbanking/banking_online.c:555 msgid "Sorting commands by account" msgstr "Auftr¤ge nach Konto sortieren" #. sort account queues by provider #: src/libs/aqbanking/banking_online.c:565 msgid "Sorting account queues by provider" msgstr "Konten-Auftr¤ge nach Providern sortieren" #. no longer needed #. send to each backend #: src/libs/aqbanking/banking_online.c:577 msgid "Send commands to providers" msgstr "Auftr¤ge an Provider verteilen" #: src/libs/aqbanking/banking_online.c:722 #, c-format msgid "Send commands to provider \"%s\"" msgstr "Auftr¤ge an Provider \"%s\" ĵbergeben" #: src/libs/aqbanking/banking_online.c:726 #, c-format msgid "Error sending commands to provider \"%s\":%d" msgstr "Fehler beim œbergeben der Auftr¤ge an Provider \"%s\":%d" #: src/libs/aqbanking/banking_online.c:734 #, c-format msgid "Provider \"%s\" is not available." msgstr "Provider \"%s\" ist nicht verfĵgbar." #: src/libs/aqbanking/banking_transaction.c:52 #, c-format msgid "Too many purpose lines (%d>%d)" msgstr "Zu viele Zeichen im Verwendungszweck (%d>%d)" #: src/libs/aqbanking/banking_transaction.c:69 #, c-format msgid "Too many chars in purpose line %d (%d>%d)" msgstr "Zu viele Zeichen in Zeile %d des Verwendungszwecks (%d>%d) " #: src/libs/aqbanking/banking_transaction.c:177 #, c-format msgid "Month day \"%d\" not supported by bank" msgstr "Monatstag \"%d\" wird von der Bank nicht unterstĵtzt" #: src/libs/aqbanking/banking_transaction.c:196 #, c-format msgid "Execution month day \"%d\" not supported by bank" msgstr "Ausfĵhrungs-Monatstag \"%d\" wird von der Bank nicht unterstĵtzt" #: src/libs/aqbanking/banking_transaction.c:216 #, c-format msgid "Week day \"%d\" not supported by bank" msgstr "Wochentag \"%d\" wird von der Bank nicht unterstĵtzt" #: src/libs/aqbanking/banking_transaction.c:235 #, c-format msgid "Execution week day \"%d\" not supported by bank" msgstr "Ausfĵhrungs-Wochentag \"%d\" wird von der Bank nicht unterstĵtzt" #: src/libs/aqbanking/banking_transaction.c:274 #: src/libs/aqbanking/banking_transaction.c:321 #, c-format msgid "" "Minimum setup time violated. Dated transactions need to be at least %d days " "away" msgstr "" "Vorlaufzeit unterschritten. Datierte œberweisungen benĥtigen mindestens %d " "Tage Vorlaufzeit" #: src/libs/aqbanking/banking_transaction.c:286 #: src/libs/aqbanking/banking_transaction.c:333 #, c-format msgid "" "Maximum setup time violated. Dated transactions need to be at most %d days " "away" msgstr "" "Maximale Vorlaufzeit ĵberschritten. Datierte œberweisungen dĵrfen nicht mehr " "als %d Tage in der Zukunft liegen" #: src/libs/aqbanking/banking_transaction.c:396 #, c-format msgid "" "Minimum setup time violated. Dated transactions need to be at least %d days " "away but %d days are requested" msgstr "" "Minimale Vorlaufzeit ĵberschritten. Datierte œberweisungen benĥtigen " "mindestens %d Tage Vorlaufzeit (%d Tage im vorliegenden Fall)" #: src/libs/aqbanking/banking_transaction.c:409 #, c-format msgid "" "Maximum setup time violated. Dated transactions need to be at most %d days " "away but %d days are requested" msgstr "" "Maximale Vorlaufzeit ĵberschritten. Datierte œberweisungen dĵrfen nicht mehr " "als %d Tage in der Zukunft liegen (%d Tage im vorliegenden Fall)" #: src/libs/plugins/imexporters/eri2/eri2.c:188 #: src/libs/plugins/imexporters/csv/csv.c:102 #: src/libs/plugins/imexporters/openhbci1/openhbci1.c:99 #: src/libs/plugins/imexporters/ctxfile/ctxfile.c:85 msgid "Data imported, transforming to UTF-8" msgstr "Daten werden importiert. Konvertierung auf UTF-8" #: src/libs/plugins/imexporters/csv/csv_editprofile.c:57 msgid "Tabulator (default)" msgstr "Tabulator (Standard)" #: src/libs/plugins/imexporters/csv/csv_editprofile.c:58 msgid "Space" msgstr "Leerzeichen" #: src/libs/plugins/imexporters/csv/csv_editprofile.c:59 msgid "Komma (,)" msgstr "Komma (,)" #: src/libs/plugins/imexporters/csv/csv_editprofile.c:60 msgid "Semicolon (;)" msgstr "Semikolon (;)" #: src/libs/plugins/imexporters/csv/csv_editprofile.c:61 msgid "Colon (:)" msgstr "Doppelpunkt (:)" #: src/libs/plugins/imexporters/csv/csv_editprofile.c:67 msgid "Booked Transactions (default)" msgstr "Gebuchte Ums¤tze (standard)" #: src/libs/plugins/imexporters/csv/csv_editprofile.c:68 msgid "Noted Transactions" msgstr "Vorgemerkte Ums¤tze" #: src/libs/plugins/imexporters/csv/csv_editprofile.c:75 msgid "Rational (default)" msgstr "Rationale Zahl (Standard)" #: src/libs/plugins/imexporters/csv/csv_editprofile.c:76 msgid "Float" msgstr "FlieŸkommazahl" #: src/libs/plugins/imexporters/csv/csv_editprofile.c:82 msgid "-- empty --" msgstr "-- frei --" #: src/libs/plugins/imexporters/csv/csv_editprofile.c:83 msgid "Local Country Code" msgstr "Eigener L¤ndercode" #: src/libs/plugins/imexporters/csv/csv_editprofile.c:84 msgid "Local Bank Code" msgstr "Bankleitzahl (BLZ)" #: src/libs/plugins/imexporters/csv/csv_editprofile.c:85 msgid "Local Branch Id" msgstr "Eigene Branchenkennung" #: src/libs/plugins/imexporters/csv/csv_editprofile.c:86 msgid "Local Account Number" msgstr "Eigene Kontonummer" #: src/libs/plugins/imexporters/csv/csv_editprofile.c:87 msgid "Local Account Suffix" msgstr "Eigenes Unterkontomerkmal" #: src/libs/plugins/imexporters/csv/csv_editprofile.c:88 msgid "Local IBAN" msgstr "Eigene IBAN" #: src/libs/plugins/imexporters/csv/csv_editprofile.c:89 msgid "Local Name (e.g. your name)" msgstr "Eigener Name" #: src/libs/plugins/imexporters/csv/csv_editprofile.c:90 msgid "Local BIC" msgstr "Eigene BIC" #: src/libs/plugins/imexporters/csv/csv_editprofile.c:91 msgid "Remote Country Code" msgstr "Staat des Zahlungspartners" #: src/libs/plugins/imexporters/csv/csv_editprofile.c:92 msgid "Remote Bank Code" msgstr "Bankleitzahl des Zahlungspartners" #: src/libs/plugins/imexporters/csv/csv_editprofile.c:93 msgid "Remote Branch Id" msgstr "Fremde Branchenkennung" #: src/libs/plugins/imexporters/csv/csv_editprofile.c:94 msgid "Remote Account Number" msgstr "Kontonummer des Zahlungspartners" #: src/libs/plugins/imexporters/csv/csv_editprofile.c:95 msgid "Remote Account Suffix" msgstr "Unterkontomerkmal des Zahlungspartners" #: src/libs/plugins/imexporters/csv/csv_editprofile.c:96 msgid "Remote IBAN" msgstr "Fremde IBAN" #: src/libs/plugins/imexporters/csv/csv_editprofile.c:97 msgid "Remote Name (First Line)" msgstr "Fremder Name (erste Zeile)" #: src/libs/plugins/imexporters/csv/csv_editprofile.c:98 msgid "Remote Name (Second Line)" msgstr "Fremder Name (zweite Zeile)" #: src/libs/plugins/imexporters/csv/csv_editprofile.c:99 msgid "Remote BIC" msgstr "BIC des Zahlungspartners" #: src/libs/plugins/imexporters/csv/csv_editprofile.c:100 msgid "Unique Transaction Id" msgstr "Eindeutige Umsatz-ID" #: src/libs/plugins/imexporters/csv/csv_editprofile.c:101 msgid "Id assigned by Application" msgstr "durch Anwendung zugewiesene Id" #. "groupId", I18S("Group Id"), #: src/libs/plugins/imexporters/csv/csv_editprofile.c:103 msgid "Valuta Date" msgstr "Datum der Wertstellung" #: src/libs/plugins/imexporters/csv/csv_editprofile.c:104 msgid "Booking Date" msgstr "Buchungsdatum" #: src/libs/plugins/imexporters/csv/csv_editprofile.c:105 msgid "Amount (Value)" msgstr "Betrag (Wert)" #: src/libs/plugins/imexporters/csv/csv_editprofile.c:106 msgid "Amount (Currency)" msgstr "Betrag (W¤hrung)" #: src/libs/plugins/imexporters/csv/csv_editprofile.c:107 msgid "Fees (Amount)" msgstr "Gebĵhren (Betrag)" #: src/libs/plugins/imexporters/csv/csv_editprofile.c:108 msgid "Fees (Currency)" msgstr "Gebĵhren (W¤hrung)" #: src/libs/plugins/imexporters/csv/csv_editprofile.c:109 msgid "Textkey" msgstr "Textschlĵssel" #: src/libs/plugins/imexporters/csv/csv_editprofile.c:110 msgid "Textkey Extensions" msgstr "Textschlĵsselerweiterung" #: src/libs/plugins/imexporters/csv/csv_editprofile.c:111 msgid "Transaction Key" msgstr "Textschlĵsselerg¤nzung" #: src/libs/plugins/imexporters/csv/csv_editprofile.c:112 msgid "Customer Reference" msgstr "Kundenreferenz" #: src/libs/plugins/imexporters/csv/csv_editprofile.c:113 msgid "Bank Reference" msgstr "Bankreferenz" #: src/libs/plugins/imexporters/csv/csv_editprofile.c:114 msgid "Transaction Code" msgstr "Transaktionskode" #: src/libs/plugins/imexporters/csv/csv_editprofile.c:115 msgid "Transaction Text (not purpose!)" msgstr "Umsatztext (nicht Verwendungszweck)" #: src/libs/plugins/imexporters/csv/csv_editprofile.c:116 msgid "Primanota" msgstr "Primanota" #: src/libs/plugins/imexporters/csv/csv_editprofile.c:117 msgid "Id assigned by Finance Institute" msgstr "durch Bank zugewiesene Id" #: src/libs/plugins/imexporters/csv/csv_editprofile.c:118 msgid "Purpose (1st Line)" msgstr "Verwendungszweck (1. Zeile)" #: src/libs/plugins/imexporters/csv/csv_editprofile.c:119 msgid "Purpose (2nd Line)" msgstr "Verwendungszweck (2. Zeile)" #: src/libs/plugins/imexporters/csv/csv_editprofile.c:120 msgid "Purpose (3rd Line)" msgstr "Verwendungszweck (3. Zeile)" #: src/libs/plugins/imexporters/csv/csv_editprofile.c:121 msgid "Purpose (4th Line)" msgstr "Verwendungszweck (4. Zeile)" #: src/libs/plugins/imexporters/csv/csv_editprofile.c:122 msgid "Purpose (5th Line)" msgstr "Verwendungszweck (5. Zeile)" #: src/libs/plugins/imexporters/csv/csv_editprofile.c:123 msgid "Purpose (6th Line)" msgstr "Verwendungszweck (6. Zeile)" #: src/libs/plugins/imexporters/csv/csv_editprofile.c:124 msgid "Purpose (7th Line)" msgstr "Verwendungszweck (7. Zeile)" #: src/libs/plugins/imexporters/csv/csv_editprofile.c:125 msgid "Purpose (8th Line)" msgstr "Verwendungszweck (8. Zeile)" #: src/libs/plugins/imexporters/csv/csv_editprofile.c:126 msgid "Purpose (9th Line)" msgstr "Verwendungszweck (9. Zeile)" #: src/libs/plugins/imexporters/csv/csv_editprofile.c:127 msgid "Purpose (10th Line)" msgstr "Verwendungszweck (10. Zeile)" #: src/libs/plugins/imexporters/csv/csv_editprofile.c:128 msgid "Category (1st Line)" msgstr "Kategorie (1. Zeile)" #: src/libs/plugins/imexporters/csv/csv_editprofile.c:129 msgid "Category (2nd Line)" msgstr "Kategorie (2. Zeile)" #: src/libs/plugins/imexporters/csv/csv_editprofile.c:130 msgid "Category (3rd Line)" msgstr "Kategorie (3. Zeile)" #: src/libs/plugins/imexporters/csv/csv_editprofile.c:131 msgid "Category (4th Line)" msgstr "Kategorie (4. Zeile)" #: src/libs/plugins/imexporters/csv/csv_editprofile.c:132 msgid "Category (5th Line)" msgstr "Kategorie (5. Zeile)" #: src/libs/plugins/imexporters/csv/csv_editprofile.c:133 msgid "Category (6th Line)" msgstr "Kategorie (6. Zeile)" #: src/libs/plugins/imexporters/csv/csv_editprofile.c:134 msgid "Category (7th Line)" msgstr "Kategorie (7. Zeile)" #: src/libs/plugins/imexporters/csv/csv_editprofile.c:135 msgid "Category (8th Line)" msgstr "Kategorie (8. Zeile)" #: src/libs/plugins/imexporters/csv/csv_editprofile.c:136 msgid "Period (Standing Order)" msgstr "Periode (Dauerauftrag)" #: src/libs/plugins/imexporters/csv/csv_editprofile.c:137 msgid "Cycle (Standing Order)" msgstr "Zyklus (Dauerauftrag)" #: src/libs/plugins/imexporters/csv/csv_editprofile.c:138 msgid "Execution Day (Standing Order)" msgstr "Ausfĵhrungstag (Dauerauftr¤ge)" #: src/libs/plugins/imexporters/csv/csv_editprofile.c:139 msgid "Date of First Execution (Standing Order)" msgstr "Datum der ersten Ausfĵhrung (Dauerauftrag)" #: src/libs/plugins/imexporters/csv/csv_editprofile.c:140 msgid "Date of Last Execution (Standing Order)" msgstr "Datum der letzten Ausfĵhrung (Dauerauftrag)" #: src/libs/plugins/imexporters/csv/csv_editprofile.c:141 msgid "Date of Next Execution (Standing Order)" msgstr "Datum der n¤chsten Ausfĵhrung (Dauerauftrag)" #: src/libs/plugins/imexporters/csv/csv_editprofile.c:142 msgid "Type" msgstr "Auftragsart" #: src/libs/plugins/imexporters/csv/csv_editprofile.c:143 msgid "Subtype" msgstr "Auftragsunterart" #: src/libs/plugins/imexporters/csv/csv_editprofile.c:144 msgid "Status" msgstr "Status" #: src/libs/plugins/imexporters/csv/csv_editprofile.c:145 msgid "Remote Address: Street" msgstr "Fremde Adresse: StraŸe" #: src/libs/plugins/imexporters/csv/csv_editprofile.c:146 msgid "Remote Address: Zipcode" msgstr "Fremde Adresse: PLZ" #: src/libs/plugins/imexporters/csv/csv_editprofile.c:147 msgid "Remote Address: City" msgstr "Fremde Adresse: Stadt" #: src/libs/plugins/imexporters/csv/csv_editprofile.c:148 msgid "Remote Address: Phone Number" msgstr "Fremde Adresse: Telefonnummer" #: src/libs/plugins/imexporters/csv/csv_editprofile.c:149 msgid "Unit Id (Stock)" msgstr "" #: src/libs/plugins/imexporters/csv/csv_editprofile.c:150 msgid "Namespace of Unit Id (Securities)" msgstr "" #: src/libs/plugins/imexporters/csv/csv_editprofile.c:151 msgid "Amount of Units (Securities) (value)" msgstr "" #: src/libs/plugins/imexporters/csv/csv_editprofile.c:152 msgid "Amount of Units (Securities) (currency)" msgstr "" #: src/libs/plugins/imexporters/csv/csv_editprofile.c:153 msgid "Price per Unit (Securities) (value)" msgstr "" #: src/libs/plugins/imexporters/csv/csv_editprofile.c:154 msgid "Price per Unit (Securities) (currency)" msgstr "" #: src/libs/plugins/imexporters/csv/csv_editprofile.c:155 msgid "Commission (Securities) (value)" msgstr "" #: src/libs/plugins/imexporters/csv/csv_editprofile.c:156 msgid "Commission (Securities) (currency)" msgstr "" #: src/libs/plugins/imexporters/csv/csv_editprofile.c:157 msgid "Bank Account Id" msgstr "Kontonummer" #: src/libs/plugins/imexporters/csv/csv_editprofile.c:158 msgid "Positive/Negative Mark" msgstr "Positiv/Negativ Markierung" #: src/libs/plugins/imexporters/csv/csv_editprofile.c:527 msgid "Edit CSV Profile" msgstr "CSV-Profil bearbeiten" #: src/libs/plugins/imexporters/csv/csv_editprofile.c:647 #: src/libs/plugins/imexporters/csv/csv_editprofile.c:681 #: src/libs/plugins/imexporters/csv/csv_editprofile.c:701 #: src/libs/plugins/imexporters/csv/csv_editprofile.c:715 #: src/libs/plugins/imexporters/csv/csv_editprofile.c:744 msgid "Input Error" msgstr "Eingabefehler" #: src/libs/plugins/imexporters/csv/csv_editprofile.c:648 msgid "Please enter a name for the profile." msgstr "Bitte geben Sie einen Namen fĵr das Profil ein." #: src/libs/plugins/imexporters/csv/csv_editprofile.c:649 #: src/libs/plugins/imexporters/csv/csv_editprofile.c:683 #: src/libs/plugins/imexporters/csv/csv_editprofile.c:703 #: src/libs/plugins/imexporters/csv/csv_editprofile.c:717 #: src/libs/plugins/imexporters/csv/csv_editprofile.c:746 msgid "Continue" msgstr "Fortsetzen" #: src/libs/plugins/imexporters/csv/csv_editprofile.c:682 msgid "Please select a field delimiter." msgstr "Bitte w¤hlen Sie einen Feldtrenner." #: src/libs/plugins/imexporters/csv/csv_editprofile.c:702 msgid "Please select a date format." msgstr "Bitte w¤hlen Sie ein Datumsformat." #: src/libs/plugins/imexporters/csv/csv_editprofile.c:716 msgid "Please select a value format." msgstr "Bitte w¤hlen Sie ein Betragsformat." #: src/libs/plugins/imexporters/csv/csv_editprofile.c:745 msgid "Please select a valid column type." msgstr "Bitte w¤hlen Sie einen gĵltigen Spaltentyp." #: src/libs/plugins/imexporters/csv/csv.c:209 #: src/libs/plugins/imexporters/swift/swift.c:162 msgid "Importing parsed data..." msgstr "Buchungen importieren..." #: src/libs/plugins/imexporters/csv/csv.c:489 #: src/libs/plugins/imexporters/swift/swift.c:389 #: src/libs/plugins/parsers/swift/swift940.c:1056 #: src/libs/plugins/parsers/swift/swift535.c:483 msgid "Aborted by user" msgstr "Die Aktion wurde durch den Benutzer abgebrochen." #: src/libs/plugins/imexporters/qif/qif.c:82 msgid "Please enter the date format for the following item:\n" msgstr "Bitte geben Sie das Datumsformat fĵr die folgenden Eintr¤ge an:\n" #: src/libs/plugins/imexporters/qif/qif.c:84 msgid "Please enter the date format for the following item:
" msgstr "" "Bitte geben Sie das Datumsformat fĵr die folgenden Eintr¤ge an:
" #: src/libs/plugins/imexporters/qif/qif.c:88 msgid "" "The following characters can be used:\n" "- 'Y': digit of the year\n" "- 'M': digit of the month\n" "- 'D': digit of the day\n" "\n" "Examples:\n" " \"YYYY/MM/DD\" (-> 2005/02/25)\n" " \"DD.MM.YYYY\" (-> 25.02.2005)\n" " \"MM/DD/YY\" (-> 02/25/05)\n" msgstr "" "Die folgenden Buchstaben kĥnnen benutzt werden:\n" "- 'Y': Jahr (Year)\n" "- 'M': Monat\n" "- 'D': Tag (Day)\n" "\n" "Beispiel:\n" "- \"YYYY/MM/DD\" fĵr 2021/02/25\n" "- \"DD.MM.YYYY\" fĵr 25.02.2021\n" "- \"MM/DD/YY\" fĵr 02/25/21\n" #: src/libs/plugins/imexporters/qif/qif.c:98 msgid "" "The following characters can be used:
YYYY/MM/DD(-> 2005/02/25)
DD.MM.YYYY(-> 25.02.2005)
MM/DD/YY(-> 02/25/05)
\n" " \n" " \n" "
Ydigit " "of the year
Mdigit of the month
Ddigit of the day
\n" "
Examples:\n" " \n" " \n" "" msgstr "" #: src/libs/plugins/imexporters/qif/qif.c:129 msgid "Enter Date Format" msgstr "Datumsformat eingeben" #: src/libs/plugins/imexporters/qif/qif.c:130 msgid "Enter Correct Date Format" msgstr "Passendes Datumsformat eingeben" #: src/libs/plugins/imexporters/qif/qif.c:249 msgid "The following value could not be parsed: \n" msgstr "Die folgenden Werte konnten nicht erkannt werden: \n" #: src/libs/plugins/imexporters/qif/qif.c:251 msgid "" "There are now two possibilities of what character\n" "represents the decimal fixpoint:\n" " 1) '.' (as in \"123.45\")\n" " 2) ',' (as in \"123,45\")\n" "What is the fixpoint in the value above?" msgstr "" "Es gibt zwei Mĥglichkeiten, welches Zeichen den Dezimaltrenner\n" "darstellt:\n" " 1. der Punkt '.' wie in \"123.45\"\n" " 2. das Komma ',' wie in \"123,45\"\n" "Welche Mĥglichkeit soll hier den Dezimaltrenner darstellen?" #: src/libs/plugins/imexporters/qif/qif.c:257 msgid "The following value could not be parsed:
" msgstr "Die folgenden Werte konnten nicht erkannt werden:
" #: src/libs/plugins/imexporters/qif/qif.c:259 #, fuzzy msgid "" "
There are now two possibilities of what character represents the decimal " "fixpoint:
  1. '.' (as in \"123.45\")
  2. \n" "
  3. ',' (as in \"123,45\")
  4. \n" "
What is the fixpoint in the value above?" msgstr "" "Es gibt zwei Mĥglichkeiten, welches Zeichen den Dezimaltrenner\n" "darstellt:\n" " 1. der Punkt '.' wie in \"123.45\"\n" " 2. das Komma ',' wie in \"123,45\"\n" "Welche Mĥglichkeit soll hier den Dezimaltrenner darstellen?" #: src/libs/plugins/imexporters/qif/qif.c:280 msgid "Value Parsing" msgstr "Dezimalzahlen erkennen" #: src/libs/plugins/imexporters/qif/qif.c:282 msgid "Possibility 1" msgstr "Mĥglichkeit 1" #: src/libs/plugins/imexporters/qif/qif.c:283 msgid "Possibility 2" msgstr "Mĥglichkeit 2" #: src/libs/plugins/imexporters/qif/qif.c:468 #: src/libs/plugins/imexporters/qif/qif.c:662 msgid "Account statement date" msgstr "Kontoauszug Datum" #: src/libs/plugins/imexporters/qif/qif.c:483 msgid "Account statement credit line value" msgstr "Kontoauszug Kreditlinie" #: src/libs/plugins/imexporters/qif/qif.c:499 msgid "Account statement balance value" msgstr "Kontoauszug Saldo" #: src/libs/plugins/imexporters/qif/qif.c:677 msgid "Transaction statement amount value" msgstr "Buchungsliste Betrag" #: src/libs/plugins/imexporters/xmldb/xmldb.c:86 #: src/libs/plugins/imexporters/swift/swift.c:94 msgid "Reading file..." msgstr "Datei wird eingelesen..." #: src/libs/plugins/imexporters/xmldb/xmldb.c:97 #: src/libs/plugins/imexporters/swift/swift.c:114 msgid "Error importing data" msgstr "Fehler beim Importieren der Daten" #: src/libs/plugins/imexporters/xmldb/xmldb.c:136 #: src/libs/plugins/imexporters/xmldb/xmldb.c:150 msgid "Error exporting data" msgstr "Fehler beim Exportieren der Daten" #: src/libs/plugins/imexporters/ofx/parser/g_sonrs.c:62 msgid "Status for signon request" msgstr "Status der Anmeldung" #: src/libs/plugins/imexporters/ofx/parser/g_stmtrn.c:195 msgid "Generic credit" msgstr "Kredit allgemein" #: src/libs/plugins/imexporters/ofx/parser/g_stmtrn.c:199 msgid "Generic debit" msgstr "Debit allgemein" #: src/libs/plugins/imexporters/ofx/parser/g_stmtrn.c:203 msgid "Interest earned or paid (Note: Depends on signage of amount)" msgstr "Zinsen erhalten oder gezahlt (Hinweis: Je nach Vorzeichen)" #: src/libs/plugins/imexporters/ofx/parser/g_stmtrn.c:207 msgid "Dividend" msgstr "Dividende" #: src/libs/plugins/imexporters/ofx/parser/g_stmtrn.c:211 msgid "FI fee" msgstr "FI Gebĵhr" #: src/libs/plugins/imexporters/ofx/parser/g_stmtrn.c:215 msgid "Service charge" msgstr "Dienstleistungsgebĵhren" #. FIXME: not sure #: src/libs/plugins/imexporters/ofx/parser/g_stmtrn.c:219 msgid "Deposit" msgstr "Einzahlung" #. misc #: src/libs/plugins/imexporters/ofx/parser/g_stmtrn.c:223 msgid "ATM debit or credit (Note: Depends on signage of amount)" msgstr "" #. misc #: src/libs/plugins/imexporters/ofx/parser/g_stmtrn.c:227 msgid "Point of sale debit or credit (Note: Depends on signage of amount)" msgstr "Verkaufsstelle Debit oder Kredit (Hinweis: Je nach Vorzeichen)" #: src/libs/plugins/imexporters/ofx/parser/g_stmtrn.c:231 #: src/libs/plugins/backends/aqebics/client/provider_sendcmd.c:320 msgid "Transfer" msgstr "œberweisung" #: src/libs/plugins/imexporters/ofx/parser/g_stmtrn.c:235 msgid "Check" msgstr "Scheck" #. FIXME: not sure #: src/libs/plugins/imexporters/ofx/parser/g_stmtrn.c:239 msgid "Electronic payment" msgstr "Elektronische œberweisung" #. FIXME: not sure #: src/libs/plugins/imexporters/ofx/parser/g_stmtrn.c:243 msgid "Cash withdrawal" msgstr "Barauszahlung" #. FIXME: not sure #: src/libs/plugins/imexporters/ofx/parser/g_stmtrn.c:247 msgid "Direct deposit" msgstr "" #. FIXME: not sure #: src/libs/plugins/imexporters/ofx/parser/g_stmtrn.c:251 msgid "Merchant initiated debit" msgstr "Lastschrift" #: src/libs/plugins/imexporters/ofx/parser/g_stmtrn.c:255 msgid "Repeating payment/standing order" msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_stmtrn.c:259 msgid "Other" msgstr "Andere" #: src/libs/plugins/imexporters/ofx/parser/g_stmtrn.c:263 msgid "Unknown transaction type" msgstr "Unbekannte Buchungsart" #: src/libs/plugins/imexporters/ofx/parser/g_acctinfotrnrs.c:61 msgid "Status for account info request" msgstr "Status des Kontenabrufes" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:43 msgid "Success" msgstr "Erfolgreich" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:43 msgid "The server successfully processed the request." msgstr "Der Auftrag wurde erfolgreich ausgefĵhrt." #: src/libs/plugins/imexporters/ofx/parser/g_status.c:44 msgid "Client is up-to-date" msgstr "Die Benutzerinformationen sind aktuell." #: src/libs/plugins/imexporters/ofx/parser/g_status.c:44 msgid "" "Based on the client timestamp, the client has the latest information. The " "response does not supply any additional information." msgstr "" "Die Benutzerdaten sind bereits aktuell, die Antwort des Servers enth¤lt " "keine weiteren Daten." #: src/libs/plugins/imexporters/ofx/parser/g_status.c:45 msgid "General error" msgstr "Allgemeiner Fehler" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:45 msgid "" "Error other than those specified by the remaining error codes. (Note: " "Servers should provide a more specific error whenever possible. Error code " "2000 should be reserved for cases in which a more specific code is not " "available.)" msgstr "" "Es ist ein allgemeiner Fehler aufgetreten, auf den kein spezieller " "Fehlercode paŸt." #: src/libs/plugins/imexporters/ofx/parser/g_status.c:46 msgid "Invalid account" msgstr "Ungĵltiges Konto" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:46 msgid "The account was invalid (whatever that means)" msgstr "Das Konto ist ungĵltig" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:47 msgid "General account error" msgstr "Allgemeiner Kontofehler" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:47 msgid "Account error not specified by the remaining error codes." msgstr "" "Es ist ein allgemeiner Fehler im Zusammenhang mit einem Konto ausgetreten, " "der nicht n¤her spezifiziert ist." #: src/libs/plugins/imexporters/ofx/parser/g_status.c:48 msgid "Account not found" msgstr "Konto nicht vorhanden" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:48 #: src/libs/plugins/imexporters/ofx/parser/g_status.c:51 #: src/libs/plugins/imexporters/ofx/parser/g_status.c:54 msgid "" "The specified account number does not correspond to one of the user's " "accounts." msgstr "" "Das angegebene Konto existiert nicht oder gehĥrt nicht zum aufrufenden " "Benutzer." #: src/libs/plugins/imexporters/ofx/parser/g_status.c:49 msgid "Account closed" msgstr "Konto geschlossen" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:49 #: src/libs/plugins/imexporters/ofx/parser/g_status.c:52 #: src/libs/plugins/imexporters/ofx/parser/g_status.c:55 msgid "" "The specified account number corresponds to an account that has been closed." msgstr "Das angegebene Konto ist geschlossen." #: src/libs/plugins/imexporters/ofx/parser/g_status.c:50 msgid "Account not authorized" msgstr "Kontozugriff nicht erlaubt" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:50 #: src/libs/plugins/imexporters/ofx/parser/g_status.c:53 #: src/libs/plugins/imexporters/ofx/parser/g_status.c:56 msgid "" "The user is not authorized to perform this action on the account, or the " "server does not allow this type of action to be performed on the account." msgstr "" "Der Benutzer hat keine Berechtigung fĵr diesen Auftrag mit dem angegebenen " "Konto, oder der Server unterstĵtzt diesen Auftrag nicht mit dem angegebenen " "Konto." #: src/libs/plugins/imexporters/ofx/parser/g_status.c:51 msgid "Source account not found" msgstr "Quellkonto nicht gefunden" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:52 msgid "Source account closed" msgstr "Quellkonto ist geschlossen" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:53 msgid "Source account not authorized" msgstr "Keine Berechtigung fĵr Quellkonto" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:54 msgid "Destination account not found" msgstr "Zielkonto nicht gefunden" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:55 msgid "Destination account closed" msgstr "Zielkonto ist geschlossen" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:56 msgid "Destination account not authorized" msgstr "Keine Berechtigung fĵr Zielkonto" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:57 msgid "Invalid amount" msgstr "Ungĵltiger Betrag" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:57 msgid "" "The specified amount is not valid for this action; for example, the user " "specified a negative payment amount." msgstr "" "Der angegebene Betrag ist fĵr diesen Auftrag ungĵltig (z.B. negativer Betrag " "bei œberweisungen)" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:58 msgid "Date too soon" msgstr "Datum liegt zu nahe in der Zukunft" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:58 msgid "" "The server cannot process the requested action by the date specified by the " "user." msgstr "" "Der Server kann diesen Auftrag nicht bis zum angegebenen Datum ausfĵhren." #: src/libs/plugins/imexporters/ofx/parser/g_status.c:59 msgid "Date too far in future" msgstr "Datum zu weit in der Zukunft" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:59 msgid "The server cannot accept requests for an action that far in the future." msgstr "Der Server akzeptiert keine Auftr¤ge in so weiter Zukunft." #: src/libs/plugins/imexporters/ofx/parser/g_status.c:60 msgid "Transaction already committed" msgstr "œberweisung bereits ĵbermittelt" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:60 msgid "" "Transaction has entered the processing loop and cannot be modified/cancelled " "using OFX. The transaction may still be cancelled or modified using other " "means (for example, a phone call to Customer Service)." msgstr "" "Die œberweisung wird bereits verarbeitet und kann nicht mehr ĵber OFX " "ge¤ndert oder abgebrochen werden (eventuell ist dies aber immer noch " "telefonisch mĥglich)." #: src/libs/plugins/imexporters/ofx/parser/g_status.c:61 msgid "Already canceled" msgstr "œberweisung bereits zurĵckgezogen" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:61 msgid "" "The transaction cannot be canceled or modified because it has already been " "canceled." msgstr "" "Die œberweisung kann nicht mehr ge¤ndert oder zurĵckgezogen werden, weil sie " "bereits zurĵckgezogen wurde." #: src/libs/plugins/imexporters/ofx/parser/g_status.c:62 msgid "Unknown server ID" msgstr "Unbekannte Serverkennung" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:62 msgid "The specified server ID does not exist or no longer exists." msgstr "Die angegebene Serverkennung existiert nicht oder nicht mehr." #: src/libs/plugins/imexporters/ofx/parser/g_status.c:63 msgid "Duplicate request" msgstr "Doppeleinreichung" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:63 msgid "A request with this has already been received and processed." msgstr "Es wurde bereits ein Auftrag mit der gleichen empfangen." #: src/libs/plugins/imexporters/ofx/parser/g_status.c:64 msgid "Invalid date" msgstr "Ungĵltiges Datum" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:64 msgid "" "The specified datetime stamp cannot be parsed; for instance, the datetime " "stamp specifies 25:00 hours." msgstr "Das angegebene Datum ist ungĵltig (z.B. 25:00 Uhr)" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:65 msgid "Unsupported version" msgstr "Version nicht unterstĵtzt" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:65 msgid "" "The server does not support the requested version. The version of the " "message set specified by the client is not supported by this server." msgstr "Der Server unterstĵtzt die angegebene Version der Nachricht nicht." #: src/libs/plugins/imexporters/ofx/parser/g_status.c:66 msgid "Invalid TAN" msgstr "Ungĵltige TAN" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:66 msgid "The server was unable to validate the TAN sent in the request." msgstr "Die angegebene TAN ist ungĵltig." #: src/libs/plugins/imexporters/ofx/parser/g_status.c:67 msgid "Unknown FITID" msgstr "Unbekannte Transaktionskennung" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:67 msgid "" "The specified FITID/BILLID does not exist or no longer exists. [BILLID not " "found in the billing message sets]" msgstr "" "Die angegebene Transaktionskennung/Rechnungsnummer existiert nicht (mehr)." #: src/libs/plugins/imexporters/ofx/parser/g_status.c:68 msgid "Branch ID missing" msgstr "Branchenkennung fehlt." #: src/libs/plugins/imexporters/ofx/parser/g_status.c:68 msgid "" "A value must be provided in the aggregate for this " "country system, but this field is missing." msgstr "Die Branchenkennung fehlt obwohl sie erforderlich ist." #: src/libs/plugins/imexporters/ofx/parser/g_status.c:69 msgid "Bank name does not match bank ID" msgstr "Bankname passt nicht zur Bankkennung" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:69 msgid "" "The value of in the aggregate is inconsistent " "with the value of in the aggregate." msgstr "" "Der angegebene Name der Zielbank stimmt nicht mit der angegebenen Kennung " "der Bank ĵberein." #: src/libs/plugins/imexporters/ofx/parser/g_status.c:70 msgid "Invalid date range" msgstr "Ungĵltiger Datumsbereich" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:70 msgid "" "Response for non-overlapping dates, date ranges in the future, et cetera." msgstr "" "Der angegebene Datumsbereich ist ungĵltig (z.B. nicht ĵberlappend, in der " "Zukunft, o.a.)." #: src/libs/plugins/imexporters/ofx/parser/g_status.c:71 msgid "Requested element unknown" msgstr "Angefordertes Element ist unbekannt" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:71 msgid "" "One or more elements of the request were not recognized by the server or the " "server (as noted in the FI Profile) does not support the elements. The " "server executed the element transactions it understood and supported. For " "example, the request file included private tags in a but the server " "was able to execute the rest of the request." msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:72 msgid "Y invalid without " msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:72 msgid "" "This error code may appear element of an wrapper (in " " and V2 message set responses) or the contained in " "any embedded transaction wrappers within a sync response. The corresponding " "sync request wrapper included Y with Y or " "Y, which is illegal." msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:73 msgid "Embedded transactions in request failed to process: Out of date" msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:73 msgid "" "Y and embedded transactions appeared in the request sync " "wrapper and the provided was out of date. This code should be used " "in the of the response sync wrapper." msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:74 msgid "Unable to process embedded transaction due to out-of-date " msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:74 msgid "" "Used in response transaction wrapper for embedded transactions when " "6501 appears in the surrounding sync wrapper." msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:75 msgid "Stop check in process" msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:75 msgid "Stop check is already in process." msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:76 msgid "Too many checks to process" msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:76 msgid "The stop-payment request specifies too many checks." msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:77 msgid "Invalid payee" msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:77 msgid "Payee error not specified by the remainingerror codes." msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:78 msgid "Invalid payee address" msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:78 msgid "Some portion of the payee's address is incorrect or unknown." msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:79 msgid "Invalid payee account number" msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:79 msgid "The account number of the requested payee is invalid." msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:80 msgid "Insufficient funds" msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:80 msgid "" "The server cannot process the request because the specified account does not " "have enough funds." msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:81 msgid "Cannot modify element" msgstr "Element kann nicht ge¤ndert werden" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:81 msgid "" "The server does not allow modifications to one or more values in a " "modification request." msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:82 msgid "Cannot modify source account" msgstr "Herkunftskonto kann nicht ge¤ndert werden" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:82 #: src/libs/plugins/imexporters/ofx/parser/g_status.c:83 msgid "Reserved for future use." msgstr "Reserviert." #: src/libs/plugins/imexporters/ofx/parser/g_status.c:83 msgid "Cannot modify destination account" msgstr "Zielkonto kann nicht ge¤ndert werden" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:84 msgid "Invalid frequency" msgstr "Ungĵltige Wiederholfrequenz" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:84 msgid "" "The specified frequency does not match one of the accepted " "frequencies for recurring transactions." msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:85 msgid "Model already canceled" msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:85 msgid "The server has already canceled the specified recurring model." msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:86 msgid "Invalid payee ID" msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:86 msgid "The specified payee ID does not exist or no longer exists." msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:87 msgid "Invalid payee city" msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:87 msgid "The specified city is incorrect or unknown." msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:88 msgid "Invalid payee state" msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:88 msgid "The specified state is incorrect or unknown." msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:89 msgid "Invalid payee postal code" msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:89 msgid "The specified postal code is incorrect or unknown." msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:90 msgid "Transaction already processed" msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:90 msgid "Transaction has already been sent or date due is past" msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:91 msgid "Payee not modifiable by client" msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:91 msgid "The server does not allow clients to change payee information." msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:92 msgid "Wire beneficiary invalid" msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:92 msgid "The specified wire beneficiary does not exist or no longer exists." msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:93 msgid "Invalid payee name" msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:93 msgid "The server does not recognize the specified payee name." msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:94 msgid "Unknown model ID" msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:94 msgid "The specified model ID does not exist or no longer exists." msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:95 msgid "Invalid payee list ID" msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:95 msgid "The specified payee list ID does not exist or no longer exists." msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:96 msgid "Table type not found" msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:96 msgid "The specified table type is not recognized or does not exist." msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:97 msgid "Investment transaction download not supported (WARN)" msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:97 msgid "The server does not support investment transaction download." msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:98 msgid "Investment position download not supported (WARN)" msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:98 msgid "The server does not support investment position download." msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:99 msgid "Investment positions for specified date not available" msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:99 msgid "" "The server does not support investment positions for the specified date." msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:100 msgid "Investment open order download not supported (WARN)" msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:100 msgid "The server does not support open order download." msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:101 msgid "Investment balances download not supported (WARN)" msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:101 msgid "The server does not support investment balances download." msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:102 msgid "401(k) not available for this account" msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:102 msgid "401(k) information requested from a non-401(k) account." msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:103 msgid "One or more securities not found" msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:103 msgid "The server could not find the requested securities." msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:104 msgid "User ID & password will be sent out-of-band (INFO)" msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:104 msgid "" "The server will send the user ID and password via postal mail, e-mail, or " "another means. The accompanying message will provide details." msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:105 msgid "Unable to enroll user" msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:105 msgid "The server could not enroll the user." msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:106 msgid "User already enrolled" msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:106 msgid "The server has already enrolled the user." msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:107 msgid "Invalid service" msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:107 msgid "" "The server does not support the service specified in the service-" "activation request." msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:108 msgid "Cannot change user information" msgstr "Benutzerdaten kĥnnen nicht ge¤ndert werden" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:108 msgid "The server does not support the request." msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:109 msgid " Missing or Invalid in " msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:109 msgid "" "The FI requires the client to provide the aggregate in the " "request, but either none was provided, or the one provided was invalid." msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:110 msgid "1099 forms not available" msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:110 msgid "1099 forms are not yet available for the tax year requested." msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:111 msgid "1099 forms not available for user ID" msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:111 msgid "This user does not have any 1099 forms available." msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:112 msgid "W2 forms not available" msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:112 msgid "W2 forms are not yet available for the tax year requested." msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:113 msgid "W2 forms not available for user ID" msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:113 msgid "The user does not have any W2 forms available." msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:114 msgid "1098 forms not available" msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:114 msgid "1098 forms are not yet available for the tax year requested." msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:115 msgid "1098 forms not available for user ID" msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:115 msgid "The user does not have any 1098 forms available." msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:116 msgid "Must change USERPASS" msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:116 msgid "" "The user must change his or her number as part of the next OFX " "request." msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:117 msgid "Signon invalid" msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:117 msgid "" "The user cannot signon because he or she entered an invalid user ID or " "password." msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:118 msgid "Customer account already in use" msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:118 msgid "" "The server allows only one connection at a time, and another user is already " "signed on. Please try again later." msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:119 msgid "USERPASS lockout" msgstr "USERPASS Ausschluss" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:119 msgid "" "The server has received too many failed signon attempts for this user. " "Please call the FI's technical support number." msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:120 msgid "Could not change USERPASS" msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:120 msgid "The server does not support the request." msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:121 msgid "Could not provide random data" msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:121 msgid "" "The server could not generate random data as requested by the ." msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:122 msgid "Country system not supported" msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:122 msgid "" "The server does not support the country specified in the field of " "the aggregate." msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:123 msgid "Empty signon not supported" msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:123 msgid "" "The server does not support signons not accompanied by some other " "transaction." msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:124 msgid "Signon invalid without supporting pin change request" msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:124 msgid "" "The OFX block associated with the signon does not contain a pin change " "request and should." msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:125 msgid "Transaction not authorized" msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:125 msgid "" "Current user is not authorized to perform this action on behalf of the " "." msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:126 msgid "HTML not allowed" msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:126 msgid "The server does not accept HTML formatting in the request." msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:127 msgid "Unknown mail To:" msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:127 msgid "The server was unable to send mail to the specified Internet address." msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:128 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_edituserddv.c:247 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_edituserpintan.c:543 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_edituserrdh.c:357 msgid "Invalid URL" msgstr "Ungĵltige URL" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:128 msgid "The server could not parse the URL." msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:129 msgid "Unable to get URL" msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:129 msgid "" "The server was unable to retrieve the information at this URL (e.g., an HTTP " "400 or 500 series error)." msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:130 msgid "Unknown code" msgstr "Unbekannter Code" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:130 msgid "No description for this code" msgstr "Keine Beschreibung zu diesem Code" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:266 msgid "Code" msgstr "Code" #: src/libs/plugins/imexporters/ofx/parser/g_status.c:273 msgid "severity" msgstr "" #: src/libs/plugins/imexporters/ofx/parser/g_stmttrnrs.c:61 msgid "Status for transaction statement request" msgstr "Status des Umsatzabrufes" #: src/libs/plugins/imexporters/ofx/parser/g_invstmttrnrs.c:71 msgid "Status for investment transaction statement request" msgstr "Status des Umsatzabrufes fĵr Wertpapiere" #: src/libs/plugins/imexporters/swift/swift.c:208 msgid "Error in config file" msgstr "Fehler in der Konfigurationsdatei" #: src/libs/plugins/imexporters/swift/swift.c:318 msgid "Adding transaction" msgstr "Buchung wird hinzugefĵgt" #: src/libs/plugins/bankinfo/generic/generic.c:637 msgid "Scanning bank database..." msgstr "Bankdatenbank lesen..." #: src/libs/plugins/parsers/swift/swift.c:935 msgid "Empty SWIFT file, aborting" msgstr "Leeres SWIFT-Dokument, abgebrochen" #: src/libs/plugins/parsers/swift/swift.c:952 #, c-format msgid "Reading SWIFT document %d" msgstr "Lese SWIFT Dokument %d" #: src/libs/plugins/parsers/swift/swift.c:983 msgid "Parsing SWIFT data" msgstr "Analysiere SWIFT Daten" #: src/libs/plugins/parsers/swift/swift.c:990 msgid "Error parsing SWIFT data" msgstr "Fehler bei der Analyse der SWIFT-Daten" #: src/libs/plugins/parsers/swift/swift.c:1002 msgid "Empty SWIFT document, aborting" msgstr "Leeres SWIFT-Dokument, abgebrochen" #: src/libs/plugins/parsers/swift/swift.c:1011 msgid "Importing SWIFT data" msgstr "Importieren SWIFT-Daten" #: src/libs/plugins/parsers/swift/swift.c:1023 msgid "Error importing SWIFT data" msgstr "Fehler beim Importieren der SWIFT-Daten" #: src/libs/plugins/parsers/swift/swift.c:1030 msgid "Swift document successfully imported" msgstr "SWIFT-Dokument erfolgreich importiert" #: src/libs/plugins/parsers/swift/swift940.c:852 #: src/libs/plugins/parsers/swift/swift535.c:361 msgid "Importing SWIFT tags..." msgstr "Importiere SWIFT-Elemente..." #: src/libs/plugins/backends/aqofxconnect/common/io_network.c:67 #, c-format msgid "Could not create connection (%d)" msgstr "Konnte keine Verbindung herstellen (%d)" #. send request #: src/libs/plugins/backends/aqofxconnect/common/io_network.c:72 msgid "Sending request..." msgstr "Auftr¤ge werden gesendet..." #: src/libs/plugins/backends/aqofxconnect/common/io_network.c:76 msgid "Network error while sending request" msgstr "Netzwerkfehler beim Senden des Auftrags" #. wait for response #: src/libs/plugins/backends/aqofxconnect/common/io_network.c:83 msgid "Waiting for response..." msgstr "Warte auf Antwort..." #: src/libs/plugins/backends/aqofxconnect/common/io_network.c:88 msgid "Network error while waiting for response" msgstr "Netzwerkfehler beim Warten auf Antwort" #: src/libs/plugins/backends/aqofxconnect/common/io_network.c:167 #, c-format msgid "Saving communication log to %s" msgstr "Kommunikations-Logdatei gespeichert nach %s" #: src/libs/plugins/backends/aqofxconnect/common/n_utils.c:94 #, c-format msgid "Received account %s/%s (%s/%s)" msgstr "Empfangenes Konto %s/%s (%s/%s)" #: src/libs/plugins/backends/aqofxconnect/common/n_signon.c:70 #, c-format msgid "" "Please enter the password for user %sPlease enter the password for " "user %s" msgstr "" "Bitte geben Sie das Passwort fĵr Benutzer %s ein.Bitte geben Sie das " "Passwort fĵr Benutzer %s ein.
" #: src/libs/plugins/backends/aqofxconnect/common/n_signon.c:82 #: src/libs/plugins/backends/aqpaypal/provider_credentials.c:172 #: src/libs/plugins/backends/aqpaypal/provider_credentials.c:265 msgid "Enter Password" msgstr "Passwort eingeben" #: src/libs/plugins/backends/aqofxconnect/libofxhome/dlg_getinst.c:260 msgid "Bank Name" msgstr "Bankname" #: src/libs/plugins/backends/aqofxconnect/libofxhome/dlg_getinst.c:273 msgid "" "

Please start typing in the name of your bank. The list below will " "be updated to show matching banks.

Choose the bank from list below and " "click ok.

Please start typing in the name of your bank. The " "list\n" "below will be updated to show matching banks.\n" "Choose the bank from list below and click OK." msgstr "" #. parse response #: src/libs/plugins/backends/aqofxconnect/v2/r_accounts.c:110 #: src/libs/plugins/backends/aqofxconnect/v2/r_statements.c:108 #: src/libs/plugins/backends/aqofxconnect/v1/r_accounts.c:114 #: src/libs/plugins/backends/aqofxconnect/v1/r_statements.c:111 msgid "Parsing response..." msgstr "Untersuche Antwort..." #: src/libs/plugins/backends/aqofxconnect/dialogs/dlg_ofx_special.c:272 msgid "OFX DirectConnect Special Settings" msgstr "OFX DirectConnect Erweiterte Einstellungen" #: src/libs/plugins/backends/aqofxconnect/dialogs/dlg_edituser.c:609 msgid "OFX DirectConnect User Setup" msgstr "OFX DirectConnect Benutzereinrichtung" #: src/libs/plugins/backends/aqofxconnect/dialogs/dlg_edituser.c:741 #: src/libs/plugins/backends/aqofxconnect/dialogs/dlg_edituser.c:759 #: src/libs/plugins/backends/aqofxconnect/dialogs/dlg_edituser.c:771 #: src/libs/plugins/backends/aqofxconnect/dialogs/dlg_edituser.c:783 #: src/libs/plugins/backends/aqofxconnect/dialogs/dlg_edituser.c:815 #: src/libs/plugins/backends/aqofxconnect/dialogs/dlg_edituser.c:827 #: src/libs/plugins/backends/aqofxconnect/dialogs/dlg_edituser.c:859 #: src/libs/plugins/backends/aqofxconnect/dialogs/dlg_edituser.c:871 #: src/libs/plugins/backends/aqofxconnect/dialogs/dlg_edituser.c:886 msgid "Missing Input" msgstr "Fehlende Eingabe" #: src/libs/plugins/backends/aqofxconnect/dialogs/dlg_edituser.c:741 msgid "Please enter the name of your bank." msgstr "Bitte geben Sie den Namen der Bank ein." #: src/libs/plugins/backends/aqofxconnect/dialogs/dlg_edituser.c:759 msgid "Please enter a valid FID code." msgstr "Bitte machen Sie eine Angabe zu FID." #: src/libs/plugins/backends/aqofxconnect/dialogs/dlg_edituser.c:771 msgid "Please enter a valid ORG code." msgstr "Bitte machen Sie eine Angabe zu ORG." #: src/libs/plugins/backends/aqofxconnect/dialogs/dlg_edituser.c:783 msgid "Please enter a server address." msgstr "Bitte geben Sie eine Server-Adresse ein." #: src/libs/plugins/backends/aqofxconnect/dialogs/dlg_edituser.c:815 msgid "Please enter your name." msgstr "Bitte geben Sie Ihren Namen ein." #: src/libs/plugins/backends/aqofxconnect/dialogs/dlg_edituser.c:827 msgid "Please enter your User ID." msgstr "Bitte geben Sie Ihre Benutzerkennung (User ID) ein." #: src/libs/plugins/backends/aqofxconnect/dialogs/dlg_edituser.c:859 #: src/libs/plugins/backends/aqofxconnect/dialogs/dlg_edituser.c:871 msgid "Please select a valid application to emulate." msgstr "Bitte w¤hlen Sie eine Anwendung, die emuliert werden soll." #: src/libs/plugins/backends/aqofxconnect/dialogs/dlg_edituser.c:886 msgid "Please enter a correct header version (default is 102)." msgstr "Bitte w¤hlen Sie eine Header-Version (voreingestellt ist 102)." #: src/libs/plugins/backends/aqofxconnect/dialogs/dlg_newuser.c:579 msgid "OFX DirectConnect Setup Wizard" msgstr "OFX DirectConnect Setup-Assistent" #: src/libs/plugins/backends/aqofxconnect/dialogs/dlg_newuser.c:590 msgid "" "

This dialog assists you in setting up an OFX DirectConnect User.This dialog assists you in setting up an OFX DirectConnect User." msgstr "" #: src/libs/plugins/backends/aqofxconnect/dialogs/dlg_newuser.c:601 msgid "" "

Please enter your bank settings below.

Click the Select button to choose from a list of known banks. That will connect to www." "ofxhome.com and try to retrieve information about your bank.

If " "you had to manually enter this information because your bank was unknown to " "www.ofxhome.com you are kindly asked to submit your bank server " "information there to help the next user.

Click the SELECT button " "to choose from a list of\n" "known banks. That will connect to \"www.ofxhome.com\" and\n" "try to retrieve information about your bank.\n" "If you had to manually enter this information because your\n" "bank was unknown to \"www.ofxhome.com\" you are kindly\n" "asked to submit your bank server information there to help\n" "the next user." msgstr "" #: src/libs/plugins/backends/aqofxconnect/dialogs/dlg_newuser.c:625 msgid "" "

Please enter your user settings below.

User Name is " "your real name, User Id is assigned to you by the bank after applying " "for OFX DirectConnect and Client UID is used by some banks only. If " "you do not have such a value in your documents from the bank just leave it " "blank.

Please enter your user settings below.\n" "\"User Name\" is your real name, \"User Id\" is\n" "assigned to you by the bank after applying for OFX DirectConnect\n" "and \"Client UID\" is used by some banks. If you do not have such\n" "a value in your documents from the bank just leave it blank." msgstr "" #: src/libs/plugins/backends/aqofxconnect/dialogs/dlg_newuser.c:645 msgid "" "

Please choose the application you want AqBanking to emulate. Not " "all banks support all applications and versions, you might have to try " "multiple settings.

Please choose the application you want " "AqBanking to emulate.\n" "Not all banks support all applications and versions, you might have\n" "to try multiple settings." msgstr "" #: src/libs/plugins/backends/aqofxconnect/dialogs/dlg_newuser.c:684 msgid "" "

We are now ready to create the user.

Click the next " "button to proceed or abort to abort.

We are now ready to " "create the user.\n" "Click the NEXT button to proceed or ABORT to abort." msgstr "" #: src/libs/plugins/backends/aqofxconnect/dialogs/dlg_newuser.c:697 msgid "" "

The user has been successfully setup.

You can now try to " "retrieve the list of accounts the bank allows you to manage via OFX " "DirectConnect.

Please note that not every banks supports this. If your " "bank does not support account list download you will have to add the account " "manually.

The user has been successfully setup.\n" "You can now try to retrieve the list of accounts the\n" "bank allows you to manage via OFX DirectConnect.\n" "Please note that not every banks supports this. If your\n" "bank does not support account list download you will have to\n" "add the account manually." msgstr "" #: src/libs/plugins/backends/aqofxconnect/dialogs/dlg_newuser.c:941 #: src/libs/plugins/backends/aqhbci/admjobs/jobchangekeys.c:1159 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_ddvcard.c:771 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_newkeyfile.c:745 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_importkeyfile.c:897 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_zkacard.c:774 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_pintan.c:763 #: src/libs/plugins/backends/aqebics/dialogs/dlg_newkeyfile.c:918 #: src/libs/plugins/backends/aqpaypal/dlg_newuser.c:697 msgid "Finish" msgstr "Fertig" #: src/libs/plugins/backends/aqofxconnect/dialogs/dlg_newuser.c:1013 msgid "Setting Up OFX DirectConnect User" msgstr "Einrichtung eines OFX DirectConnect-Benutzers" #: src/libs/plugins/backends/aqofxconnect/dialogs/dlg_newuser.c:1014 msgid "The user will be created and the certificate retrieved." msgstr "Der Benutzer wird erstellt und das Zertifikat abgerufen." #: src/libs/plugins/backends/aqofxconnect/dialogs/dlg_newuser.c:1024 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_pintan.c:851 #: src/libs/plugins/backends/aqpaypal/dlg_newuser.c:766 msgid "Unable to lock users" msgstr "Fĵr die Benutzer konnte kein exklusiver Zugriff erreicht werden" #: src/libs/plugins/backends/aqofxconnect/dialogs/dlg_newuser.c:1032 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_pintan.c:917 #: src/libs/plugins/backends/aqpaypal/dlg_newuser.c:776 msgid "Retrieving SSL certificate" msgstr "Server-Zertifikat abrufen" #: src/libs/plugins/backends/aqofxconnect/dialogs/dlg_newuser.c:1049 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_ddvcard.c:884 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_newkeyfile.c:1015 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_newkeyfile.c:1042 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_newkeyfile.c:1071 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_importkeyfile.c:1039 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_importkeyfile.c:1066 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_zkacard.c:939 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_pintan.c:863 #: src/libs/plugins/backends/aqebics/dialogs/dlg_newkeyfile.c:1102 #: src/libs/plugins/backends/aqebics/dialogs/dlg_newkeyfile.c:1132 #: src/libs/plugins/backends/aqebics/dialogs/dlg_newkeyfile.c:1157 #: src/libs/plugins/backends/aqpaypal/dlg_newuser.c:794 #: src/libs/plugins/backends/aqpaypal/dlg_newuser.c:806 msgid "Aborted by user." msgstr "Die Aktion wurde durch den Benutzer abgebrochen." #: src/libs/plugins/backends/aqofxconnect/dialogs/dlg_newuser.c:1063 #: src/libs/plugins/backends/aqhbci/banking/provider_online.c:319 #: src/libs/plugins/backends/aqhbci/banking/provider_online.c:1037 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_ddvcard.c:897 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_newkeyfile.c:1085 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_importkeyfile.c:1079 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_zkacard.c:953 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_pintan.c:877 #: src/libs/plugins/backends/aqebics/dialogs/dlg_newkeyfile.c:1171 #: src/libs/plugins/backends/aqpaypal/dlg_newuser.c:821 #, c-format msgid "Could not unlock user %s (%d)" msgstr "" "Fĵr den Benutzer %s konnte der exklusive Zugriff nicht freigegeben werden " "(%d)" #: src/libs/plugins/backends/aqofxconnect/control/control.c:83 #: src/libs/plugins/backends/aqpaypal/control/main.c:35 msgid "" "Commands:\n" "\n" msgstr "" "Kommandos:\n" "\n" #: src/libs/plugins/backends/aqofxconnect/control/control.c:85 msgid "" " listusers:\n" " blurb file\n" "\n" msgstr "" #: src/libs/plugins/backends/aqofxconnect/control/control.c:89 msgid "" " listaccounts:\n" " blurb file\n" "\n" msgstr "" #: src/libs/plugins/backends/aqofxconnect/control/control.c:93 msgid "" " adduser:\n" " Add a user. \n" "\n" msgstr "" #: src/libs/plugins/backends/aqofxconnect/control/control.c:97 msgid "" " getaccounts:\n" " Retrieve list of accounts. \n" "\n" msgstr "" #. got this list from https://microsoftmoneyoffline.wordpress.com/appid-appver/ #: src/libs/plugins/backends/aqofxconnect/provider.c:61 msgid "Intuit Quicken Windows 2020" msgstr "Intuit Quicken Windows 2020" #: src/libs/plugins/backends/aqofxconnect/provider.c:62 msgid "Intuit Quicken Windows 2017" msgstr "Intuit Quicken Windows 2017" #: src/libs/plugins/backends/aqofxconnect/provider.c:63 msgid "Intuit Quicken Windows 2016" msgstr "Intuit Quicken Windows 2016" #: src/libs/plugins/backends/aqofxconnect/provider.c:64 msgid "Intuit Quicken Windows 2015" msgstr "Intuit Quicken Windows 2015" #: src/libs/plugins/backends/aqofxconnect/provider.c:65 msgid "Intuit Quicken Windows 2014" msgstr "Intuit Quicken Windows 2014" #: src/libs/plugins/backends/aqofxconnect/provider.c:66 msgid "Intuit Quicken Windows 2013" msgstr "Intuit Quicken Windows 2013" #: src/libs/plugins/backends/aqofxconnect/provider.c:67 msgid "Intuit Quicken Windows 2012" msgstr "Intuit Quicken Windows 2012" #: src/libs/plugins/backends/aqofxconnect/provider.c:68 msgid "Intuit Quicken Windows 2011" msgstr "Intuit Quicken Windows 2011" #: src/libs/plugins/backends/aqofxconnect/provider.c:69 msgid "Intuit Quicken Windows 2010" msgstr "Intuit Quicken Windows 2010" #: src/libs/plugins/backends/aqofxconnect/provider.c:70 msgid "Intuit Quicken Windows 2009" msgstr "Intuit Quicken Windows 2009" #: src/libs/plugins/backends/aqofxconnect/provider.c:71 msgid "Intuit Quicken Windows 2008" msgstr "Intuit Quicken Windows 2008" #: src/libs/plugins/backends/aqofxconnect/provider.c:72 msgid "Intuit Quicken Windows 2007" msgstr "Intuit Quicken Windows 2007" #: src/libs/plugins/backends/aqofxconnect/provider.c:73 msgid "Intuit Quicken Windows 2006" msgstr "Intuit Quicken Windows 2006" #: src/libs/plugins/backends/aqofxconnect/provider.c:74 msgid "Intuit Quicken Windows 2005" msgstr "Intuit Quicken Windows 2005" #: src/libs/plugins/backends/aqofxconnect/provider.c:76 msgid "Intuit Quicken Mac 2008" msgstr "Intuit Quicken Mac 2008" #: src/libs/plugins/backends/aqofxconnect/provider.c:77 msgid "Intuit Quicken Mac 2007" msgstr "Intuit Quicken Mac 2007" #: src/libs/plugins/backends/aqofxconnect/provider.c:78 msgid "Intuit Quicken Mac 2006" msgstr "Intuit Quicken Mac 2006" #: src/libs/plugins/backends/aqofxconnect/provider.c:79 msgid "Intuit Quicken Mac 2005" msgstr "Intuit Quicken Mac 2005" #: src/libs/plugins/backends/aqofxconnect/provider.c:81 msgid "Intuit QuickBooks Windows 2008" msgstr "Intuit QuickBooks Windows 2008" #: src/libs/plugins/backends/aqofxconnect/provider.c:82 msgid "Intuit QuickBooks Windows 2007" msgstr "Intuit QuickBooks Windows 2007" #: src/libs/plugins/backends/aqofxconnect/provider.c:83 msgid "Intuit QuickBooks Windows 2006" msgstr "Intuit QuickBooks Windows 2006" #: src/libs/plugins/backends/aqofxconnect/provider.c:84 msgid "Intuit QuickBooks Windows 2005" msgstr "Intuit QuickBooks Windows 2005" #: src/libs/plugins/backends/aqofxconnect/provider.c:86 msgid "Microsoft Money Plus" msgstr "Microsoft Money Plus" #: src/libs/plugins/backends/aqofxconnect/provider.c:87 msgid "Microsoft Money 2007" msgstr "Microsoft Money 2007" #: src/libs/plugins/backends/aqofxconnect/provider.c:88 msgid "Microsoft Money 2006" msgstr "Microsoft Money 2006" #: src/libs/plugins/backends/aqofxconnect/provider.c:89 msgid "Microsoft Money 2005" msgstr "Microsoft Money 2005" #: src/libs/plugins/backends/aqofxconnect/provider.c:90 msgid "Microsoft Money 2004" msgstr "Microsoft Money 2004" #: src/libs/plugins/backends/aqofxconnect/provider.c:91 msgid "Microsoft Money 2003" msgstr "Microsoft Money 2003" #: src/libs/plugins/backends/aqofxconnect/provider.c:93 msgid "ProSaldo Money 2013" msgstr "ProSaldo Money 2013" #: src/libs/plugins/backends/aqofxconnect/provider.c:348 #: src/libs/plugins/backends/aqhbci/banking/provider_online.c:906 msgid "Getting Certificate" msgstr "Abruf des Zertifikats" #: src/libs/plugins/backends/aqofxconnect/provider.c:349 #: src/libs/plugins/backends/aqhbci/banking/provider_online.c:907 msgid "We are now asking the server for its SSL certificate" msgstr "Jetzt wird das SSL-Zertifikat vom Server abgerufen." #: src/libs/plugins/backends/aqofxconnect/provider.c:420 msgid "Requesting account list" msgstr "Anforderung der Kontenliste" #: src/libs/plugins/backends/aqofxconnect/provider.c:421 msgid "" "We are now requesting a list of accounts\n" "which can be managed via OFX.\n" "We are now requesting a list of accounts which can be managed via " "OFX.\n" "" msgstr "" "Eine Liste der ĵber OFX verfĵgbaren Konten wird nun angefordert. Eine " "Liste der ĵber OFX verfĵgbaren Konten wird nun angefordert. " #: src/libs/plugins/backends/aqofxconnect/provider.c:452 msgid "Error importing accounts" msgstr "Fehler beim Importieren der Konten" #: src/libs/plugins/backends/aqofxconnect/provider_sendcmd.c:363 #: src/libs/plugins/backends/aqhbci/applayer/outbox.c:279 #: src/libs/plugins/backends/aqebics/client/provider_sendcmd.c:77 #: src/libs/plugins/backends/aqpaypal/provider_sendcmd.c:307 #, c-format msgid "Locking customer \"%lu\"" msgstr "Zugriff auf Benutzer \"%lu\"" #: src/libs/plugins/backends/aqofxconnect/provider_sendcmd.c:367 #: src/libs/plugins/backends/aqebics/client/provider_sendcmd.c:81 #: src/libs/plugins/backends/aqpaypal/provider_sendcmd.c:311 #, c-format msgid "Could not lock user \"%lu\"" msgstr "Fĵr Benutzer %lu konnte kein exklusiver Zugriff erreicht werden" #. while aq #: src/libs/plugins/backends/aqofxconnect/provider_sendcmd.c:385 #: src/libs/plugins/backends/aqhbci/applayer/outbox.c:321 #: src/libs/plugins/backends/aqebics/client/provider_sendcmd.c:101 #: src/libs/plugins/backends/aqpaypal/provider_sendcmd.c:374 #, c-format msgid "Unlocking customer \"%lu\"" msgstr "Freigeben von Benutzer \"%lu\"" #: src/libs/plugins/backends/aqofxconnect/provider_sendcmd.c:389 #: src/libs/plugins/backends/aqebics/client/provider_sendcmd.c:105 #: src/libs/plugins/backends/aqpaypal/provider_sendcmd.c:378 #, c-format msgid "Could not unlock user \"%lu\"" msgstr "" "Fĵr den Benutzer %lu konnte der exklusive Zugriff nicht freigegeben werden" #: src/libs/plugins/backends/aqhbci/banking/provider_iniletter.c:179 #: src/libs/plugins/backends/aqhbci/banking/provider_iniletter.c:472 #: src/libs/plugins/backends/aqhbci/banking/provider_iniletter.c:786 #: src/libs/plugins/backends/aqhbci/banking/provider_iniletter.c:1119 #: src/libs/plugins/backends/aqhbci/banking/provider_online.c:445 #: src/libs/plugins/backends/aqhbci/banking/provider_online.c:614 msgid "Error getting crypt token" msgstr "Das zust¤ndige CryptToken konnte nicht ermittelt werden." #: src/libs/plugins/backends/aqhbci/banking/provider_iniletter.c:191 #: src/libs/plugins/backends/aqhbci/banking/provider_iniletter.c:484 #: src/libs/plugins/backends/aqhbci/banking/provider_iniletter.c:798 #: src/libs/plugins/backends/aqhbci/banking/provider_iniletter.c:1131 #: src/libs/plugins/backends/aqhbci/banking/provider_online.c:460 #: src/libs/plugins/backends/aqhbci/banking/provider_online.c:626 msgid "Error opening crypt token" msgstr "Das zust¤ndige CryptToken konnte nicht geĥffnet werden." #: src/libs/plugins/backends/aqhbci/banking/provider_iniletter.c:203 #: src/libs/plugins/backends/aqhbci/banking/provider_iniletter.c:496 #: src/libs/plugins/backends/aqhbci/banking/provider_iniletter.c:810 #: src/libs/plugins/backends/aqhbci/banking/provider_iniletter.c:1143 #: src/libs/plugins/backends/aqhbci/banking/provider_online.c:475 #: src/libs/plugins/backends/aqhbci/banking/provider_online.c:638 msgid "User context not found on crypt token" msgstr "Der Benutzerkontext wurd auf dem CryptToken nicht gefunden." #: src/libs/plugins/backends/aqhbci/banking/provider_iniletter.c:241 #: src/libs/plugins/backends/aqhbci/banking/provider_iniletter.c:534 #: src/libs/plugins/backends/aqhbci/banking/provider_iniletter.c:848 #: src/libs/plugins/backends/aqhbci/banking/provider_iniletter.c:1181 #: src/libs/plugins/backends/aqebics/client/p_tools.c:1076 #: src/libs/plugins/backends/aqebics/client/p_tools.c:1478 #: src/libs/plugins/backends/aqebics/client/p_tools.c:1579 msgid "Server keys missing, please get them first" msgstr "Der Serverschlĵssel fehlt, diesen bitte zuerst abrufen." #: src/libs/plugins/backends/aqhbci/banking/provider_iniletter.c:265 #: src/libs/plugins/backends/aqhbci/banking/provider_iniletter.c:558 #: src/libs/plugins/backends/aqhbci/banking/provider_iniletter.c:872 #: src/libs/plugins/backends/aqhbci/banking/provider_iniletter.c:1205 #: src/libs/plugins/backends/aqebics/client/p_tools.c:1100 #: src/libs/plugins/backends/aqebics/client/p_tools.c:1502 #: src/libs/plugins/backends/aqebics/client/p_tools.c:1603 msgid "User keys missing, please generate them first" msgstr "Die Schlĵssel des Benutzers fehlen, bitte erst generieren." #: src/libs/plugins/backends/aqhbci/banking/provider_iniletter.c:276 #: src/libs/plugins/backends/aqhbci/banking/provider_iniletter.c:889 msgid "" "\n" "\n" "\n" "INI-Letter\n" "\n" msgstr "" "\n" "\n" "\n" "Ini-Brief\n" "\n" #: src/libs/plugins/backends/aqhbci/banking/provider_iniletter.c:278 #: src/libs/plugins/backends/aqhbci/banking/provider_iniletter.c:891 #: src/libs/plugins/backends/aqebics/client/p_tools.c:1113 #: src/libs/plugins/backends/aqebics/client/p_tools.c:1512 msgid "Date : " msgstr "Datum : " #: src/libs/plugins/backends/aqhbci/banking/provider_iniletter.c:281 #: src/libs/plugins/backends/aqhbci/banking/provider_iniletter.c:576 #: src/libs/plugins/backends/aqhbci/banking/provider_iniletter.c:894 #: src/libs/plugins/backends/aqhbci/banking/provider_iniletter.c:1230 #: src/libs/plugins/backends/aqebics/client/p_tools.c:1116 #: src/libs/plugins/backends/aqebics/client/p_tools.c:1515 msgid "YYYY/MM/DD" msgstr "DD.MM.YYYY" #: src/libs/plugins/backends/aqhbci/banking/provider_iniletter.c:284 #: src/libs/plugins/backends/aqhbci/banking/provider_iniletter.c:897 #: src/libs/plugins/backends/aqebics/client/p_tools.c:1119 #: src/libs/plugins/backends/aqebics/client/p_tools.c:1518 msgid "Time : " msgstr "Uhrzeit : " #: src/libs/plugins/backends/aqhbci/banking/provider_iniletter.c:285 #: src/libs/plugins/backends/aqhbci/banking/provider_iniletter.c:582 #: src/libs/plugins/backends/aqhbci/banking/provider_iniletter.c:898 #: src/libs/plugins/backends/aqhbci/banking/provider_iniletter.c:1236 #: src/libs/plugins/backends/aqebics/client/p_tools.c:1120 #: src/libs/plugins/backends/aqebics/client/p_tools.c:1519 msgid "hh:mm:ss" msgstr "hh:mm:ss" #: src/libs/plugins/backends/aqhbci/banking/provider_iniletter.c:290 #: src/libs/plugins/backends/aqhbci/banking/provider_iniletter.c:903 #: src/libs/plugins/backends/aqebics/client/p_tools.c:1125 #: src/libs/plugins/backends/aqebics/client/p_tools.c:1524 msgid "Bank Code : " msgstr "Bankleitzahl : " #: src/libs/plugins/backends/aqhbci/banking/provider_iniletter.c:295 #: src/libs/plugins/backends/aqhbci/banking/provider_iniletter.c:908 msgid "User : " msgstr "Benutzer : " #: src/libs/plugins/backends/aqhbci/banking/provider_iniletter.c:301 #: src/libs/plugins/backends/aqhbci/banking/provider_iniletter.c:914 msgid "Key number : " msgstr "Schlĵsselnummer : " #: src/libs/plugins/backends/aqhbci/banking/provider_iniletter.c:308 #: src/libs/plugins/backends/aqhbci/banking/provider_iniletter.c:921 msgid "Key version : " msgstr "Schlĵsselversion : " #: src/libs/plugins/backends/aqhbci/banking/provider_iniletter.c:316 #: src/libs/plugins/backends/aqhbci/banking/provider_iniletter.c:929 msgid "Customer system: " msgstr "Kundensystem : " #: src/libs/plugins/backends/aqhbci/banking/provider_iniletter.c:323 #: src/libs/plugins/backends/aqhbci/banking/provider_iniletter.c:626 #: src/libs/plugins/backends/aqhbci/banking/provider_iniletter.c:936 #: src/libs/plugins/backends/aqhbci/banking/provider_iniletter.c:1280 #: src/libs/plugins/backends/aqebics/client/p_tools.c:1144 msgid "Public key for electronic signature" msgstr "–ffentlicher Schlĵssel fĵr die elektronische Signatur" #: src/libs/plugins/backends/aqhbci/banking/provider_iniletter.c:328 #: src/libs/plugins/backends/aqhbci/banking/provider_iniletter.c:630 #: src/libs/plugins/backends/aqhbci/banking/provider_iniletter.c:941 #: src/libs/plugins/backends/aqhbci/banking/provider_iniletter.c:1284 #: src/libs/plugins/backends/aqebics/client/p_tools.c:1149 #: src/libs/plugins/backends/aqebics/client/p_tools.c:1291 msgid "Exponent" msgstr "Exponent" #: src/libs/plugins/backends/aqhbci/banking/provider_iniletter.c:337 #: src/libs/plugins/backends/aqhbci/banking/provider_iniletter.c:373 #: src/libs/plugins/backends/aqhbci/banking/provider_iniletter.c:639 #: src/libs/plugins/backends/aqhbci/banking/provider_iniletter.c:677 #: src/libs/plugins/backends/aqhbci/banking/provider_iniletter.c:950 #: src/libs/plugins/backends/aqhbci/banking/provider_iniletter.c:989 #: src/libs/plugins/backends/aqhbci/banking/provider_iniletter.c:1293 #: src/libs/plugins/backends/aqhbci/banking/provider_iniletter.c:1334 #: src/libs/plugins/backends/aqebics/client/p_tools.c:1158 #: src/libs/plugins/backends/aqebics/client/p_tools.c:1191 #: src/libs/plugins/backends/aqebics/client/p_tools.c:1300 #: src/libs/plugins/backends/aqebics/client/p_tools.c:1341 msgid "Bad key" msgstr "Ungĵltiger Schlĵssel" #: src/libs/plugins/backends/aqhbci/banking/provider_iniletter.c:366 #: src/libs/plugins/backends/aqhbci/banking/provider_iniletter.c:670 #: src/libs/plugins/backends/aqhbci/banking/provider_iniletter.c:982 #: src/libs/plugins/backends/aqhbci/banking/provider_iniletter.c:1327 #: src/libs/plugins/backends/aqebics/client/p_tools.c:1184 #: src/libs/plugins/backends/aqebics/client/p_tools.c:1334 msgid "Modulus" msgstr "Modulus" #: src/libs/plugins/backends/aqhbci/banking/provider_iniletter.c:401 #: src/libs/plugins/backends/aqhbci/banking/provider_iniletter.c:706 #: src/libs/plugins/backends/aqebics/client/p_tools.c:1216 #: src/libs/plugins/backends/aqebics/client/p_tools.c:1366 msgid "Hash" msgstr "Hash" #: src/libs/plugins/backends/aqhbci/banking/provider_iniletter.c:422 #: src/libs/plugins/backends/aqhbci/banking/provider_iniletter.c:729 #: src/libs/plugins/backends/aqhbci/banking/provider_iniletter.c:1069 #: src/libs/plugins/backends/aqhbci/banking/provider_iniletter.c:1408 #: src/libs/plugins/backends/aqebics/client/p_tools.c:1262 msgid "I confirm that I created the above key for my electronic signature.\n" msgstr "" "Ich best¤tige hiermit den obigen ĥffentlichen Schlĵssel fĵr meine " "elektronische Signatur.\n" #: src/libs/plugins/backends/aqhbci/banking/provider_iniletter.c:426 #: src/libs/plugins/backends/aqhbci/banking/provider_iniletter.c:1073 #: src/libs/plugins/backends/aqebics/client/p_tools.c:1266 #: src/libs/plugins/backends/aqebics/client/p_tools.c:1633 msgid "" "____________________________ ____________________________\n" "Place, date Signature\n" msgstr "" "____________________________ ____________________________\n" "Ort, Datum Unterschrift\n" #: src/libs/plugins/backends/aqhbci/banking/provider_iniletter.c:568 #: src/libs/plugins/backends/aqhbci/banking/provider_iniletter.c:1222 msgid "INI-Letter" msgstr "Ini-Brief" #: src/libs/plugins/backends/aqhbci/banking/provider_iniletter.c:572 #: src/libs/plugins/backends/aqhbci/banking/provider_iniletter.c:1226 msgid "Date" msgstr "Datum" #: src/libs/plugins/backends/aqhbci/banking/provider_iniletter.c:580 #: src/libs/plugins/backends/aqhbci/banking/provider_iniletter.c:1234 msgid "Time" msgstr "Uhrzeit" #: src/libs/plugins/backends/aqhbci/banking/provider_iniletter.c:587 #: src/libs/plugins/backends/aqhbci/banking/provider_iniletter.c:1241 msgid "Bank Code" msgstr "Bankleitzahl (BLZ)" #: src/libs/plugins/backends/aqhbci/banking/provider_iniletter.c:594 #: src/libs/plugins/backends/aqhbci/banking/provider_iniletter.c:1248 msgid "User" msgstr "Benutzer" #: src/libs/plugins/backends/aqhbci/banking/provider_iniletter.c:601 #: src/libs/plugins/backends/aqhbci/banking/provider_iniletter.c:1255 msgid "Key number" msgstr "Schlĵsselnummer" #: src/libs/plugins/backends/aqhbci/banking/provider_iniletter.c:609 #: src/libs/plugins/backends/aqhbci/banking/provider_iniletter.c:1263 msgid "Key version" msgstr "Schlĵsselversion" #: src/libs/plugins/backends/aqhbci/banking/provider_iniletter.c:618 #: src/libs/plugins/backends/aqhbci/banking/provider_iniletter.c:1272 msgid "Customer system" msgstr "Kundensystem" #: src/libs/plugins/backends/aqhbci/banking/provider_iniletter.c:738 #: src/libs/plugins/backends/aqhbci/banking/provider_iniletter.c:1417 msgid "Place, date" msgstr "Ort, Datum" #: src/libs/plugins/backends/aqhbci/banking/provider_iniletter.c:740 #: src/libs/plugins/backends/aqhbci/banking/provider_iniletter.c:1419 msgid "Signature" msgstr "Unterschrift" #: src/libs/plugins/backends/aqhbci/banking/provider_iniletter.c:1018 #: src/libs/plugins/backends/aqhbci/banking/provider_iniletter.c:1364 msgid "Hash (RMD-160)" msgstr "Hash (RMD-160)" #: src/libs/plugins/backends/aqhbci/banking/provider_iniletter.c:1043 #: src/libs/plugins/backends/aqhbci/banking/provider_iniletter.c:1384 msgid "Hash (SHA-256)" msgstr "Hash (SHA-256)" #: src/libs/plugins/backends/aqhbci/banking/provider_tan.c:92 msgid "TAN Entry" msgstr "TAN-Eingabe" #. create own text #: src/libs/plugins/backends/aqhbci/banking/provider_tan.c:136 #: src/libs/plugins/backends/aqhbci/banking/provider_tan.c:172 msgid "Please enter the TAN from the device." msgstr "Bitet geben Sie die TAN vom Ger¤t ein." #: src/libs/plugins/backends/aqhbci/banking/provider_tan.c:178 msgid "The server provided the following challenge:" msgstr "Die Bank sendet folgende Angaben als Aufforderung:" #: src/libs/plugins/backends/aqhbci/banking/provider_tan.c:252 #, c-format msgid "Please enter the TAN for user %s at %s.\n" msgstr "Bitte geben Sie die TAN fĵr Benutzer %s bei %s ein.\n" #: src/libs/plugins/backends/aqhbci/banking/provider_online.c:229 #: src/libs/plugins/backends/aqhbci/applayer/cbox_hbci.c:98 msgid "Adjusting to iTAN modes of the server" msgstr "Anpassung an die iTAN-Methoden des Servers" #: src/libs/plugins/backends/aqhbci/banking/provider_online.c:255 msgid "Retrying to get system id." msgstr "Versuche erneut die Systemkennung abzurufen" #: src/libs/plugins/backends/aqhbci/banking/provider_online.c:278 msgid "Could not get system id after multiple trials" msgstr "" "Die Systemkennung konnte auch nach mehreren Versuchen nicht abgerufen werden." #: src/libs/plugins/backends/aqhbci/banking/provider_online.c:377 #: src/libs/plugins/backends/aqhbci/banking/provider_online.c:769 #: src/libs/plugins/backends/aqhbci/banking/provider_online.c:864 msgid "Could not execute outbox." msgstr "Der Ausgangskorb konnte nicht ausgefĵhrt werden." #: src/libs/plugins/backends/aqhbci/banking/provider_online.c:389 msgid "No crypt key and no sign key received." msgstr "Kein Kryptoschlĵssel und kein Signaturschlĵssel empfangen." #: src/libs/plugins/backends/aqhbci/banking/provider_online.c:401 #: src/libs/plugins/backends/aqhbci/banking/provider_online.c:793 msgid "Could not commit result" msgstr "Das Ergebnis der Auftr¤ge konnte nicht verarbeitet werden." #: src/libs/plugins/backends/aqhbci/banking/provider_online.c:427 #, c-format msgid "Setting peer ID to \"%s\")" msgstr "Setze Bankschlĵsselkennung auf \"%s\"" #: src/libs/plugins/backends/aqhbci/banking/provider_online.c:498 msgid "Error saving sign key" msgstr "Fehler beim Speichern des Signierschlĵssels" #: src/libs/plugins/backends/aqhbci/banking/provider_online.c:520 msgid "Error saving crypt key" msgstr "Fehler beim Speichern des Crypto-Schlĵssels" #: src/libs/plugins/backends/aqhbci/banking/provider_online.c:542 msgid "Error saving auth key" msgstr "Fehler beim Speichern des Authentifizierungs-Schlĵssels" #: src/libs/plugins/backends/aqhbci/banking/provider_online.c:557 msgid "Keys saved." msgstr "Schlĵssel gespeichert." #: src/libs/plugins/backends/aqhbci/banking/provider_online.c:658 #: src/libs/plugins/backends/aqebics/requests/r_ini_h002.c:78 #: src/libs/plugins/backends/aqebics/requests/r_ini_h003.c:76 #: src/libs/plugins/backends/aqebics/requests/r_pub_h002.c:70 #: src/libs/plugins/backends/aqebics/requests/r_pub_h003.c:70 #: src/libs/plugins/backends/aqebics/requests/r_ini_h004.c:128 msgid "Sign key info not found on crypt token" msgstr "Signaturschlĵssel wurde auf dem CryptToken nicht gefunden." #: src/libs/plugins/backends/aqhbci/banking/provider_online.c:688 #: src/libs/plugins/backends/aqebics/client/p_decipher.c:131 #: src/libs/plugins/backends/aqebics/requests/r_hia_h004.c:75 #: src/libs/plugins/backends/aqebics/requests/r_hia_h003.c:77 #: src/libs/plugins/backends/aqebics/requests/r_hia_h002.c:76 msgid "Crypt key info not found on crypt token" msgstr "Crypto-Schlĵssel wurde auf dem CryptToken nicht gefunden." #: src/libs/plugins/backends/aqhbci/banking/provider_online.c:718 #: src/libs/plugins/backends/aqebics/requests/r_hia_h004.c:93 #: src/libs/plugins/backends/aqebics/requests/r_hia_h003.c:95 #: src/libs/plugins/backends/aqebics/requests/r_hia_h002.c:94 msgid "Auth key info not found on crypt token" msgstr "Authentifizierungsschlĵssel wurde auf dem CryptToken nicht gefunden." #: src/libs/plugins/backends/aqhbci/banking/provider_online.c:752 msgid "Job not supported, should not happen" msgstr "" "Auftrag nicht unterstĵtzt. Dieser interne Fehler sollte nicht vorkommen." #: src/libs/plugins/backends/aqhbci/banking/provider_online.c:781 msgid "Job contains errors." msgstr "Auftrag enth¤lt Fehler." #: src/libs/plugins/backends/aqhbci/banking/provider_online.c:803 msgid "Keys sent" msgstr "Schlĵssel ĵbermittelt." #: src/libs/plugins/backends/aqhbci/banking/provider_online.c:838 msgid "Unexplainable, 'AH_Job_ChangeKeys_new' not supported." msgstr "Interner Fehler: AH_Job_ChangeKeys_new nicht implementiert." #: src/libs/plugins/backends/aqhbci/banking/provider_online.c:855 msgid "Allocate outbox failed." msgstr "Ausgangskorb konnte nicht erstellt werden." #: src/libs/plugins/backends/aqhbci/banking/provider_online.c:860 msgid "Fetching serverkeys." msgstr "Server-Schlĵssel abrufen." #: src/libs/plugins/backends/aqhbci/banking/provider_online.c:922 msgid "Could not connect to server" msgstr "Konnte keine Verbindung zum Server herstellen" #: src/libs/plugins/backends/aqhbci/banking/provider_online.c:929 msgid "Got certificate" msgstr "Zertifikat erhalten" #: src/libs/plugins/backends/aqhbci/banking/provider_online.c:965 #, c-format msgid "Could not lock user %s (%d)" msgstr "" "Fĵr den Benutzer %s konnte kein exklusiver Zugriff erreicht werden (%d)" #: src/libs/plugins/backends/aqhbci/banking/provider_online.c:1003 msgid "No iTAN modes reported." msgstr "Der Server meldet keine iTAN-Methoden." #: src/libs/plugins/backends/aqhbci/banking/provider_online.c:1021 msgid "Could not commit result to the system" msgstr "Das Ergebnis der Auftr¤ge konnte nicht verarbeitet werden." #: src/libs/plugins/backends/aqhbci/banking/provider_online.c:1084 msgid "Enter New Banking PIN" msgstr "Neue Banking-PIN eingeben" #: src/libs/plugins/backends/aqhbci/banking/provider_online.c:1085 msgid "" "Please enter a new banking PIN.\n" "You must only enter numbers, not letters.\n" "

Please enter a new banking PIN.

You must only enter numbers, " "not letters.

" msgstr "" "Bitte geben Sie eine neue Banking-PIN ein.\n" "Sie dĵrfen nur Zahlen eingeben, keine Buchstaben.\n" "

Bitte geben Sie eine neue Banking-PIN ein.

Sie dĵrfen nur " "Zahlen eingeben, keine Buchstaben.

" #: src/libs/plugins/backends/aqhbci/banking/provider_dialogs.c:60 msgid "Chipcard Error" msgstr "Chipkartenfehler" #: src/libs/plugins/backends/aqhbci/banking/provider_dialogs.c:61 #, c-format msgid "" "Error checking chip card (%d).\n" "Maybe libchipcard or its plugins are not installed?" msgstr "" "Fehler beim Prĵfen der Chipkarte (%d).\n" "Ist die Bibliothek libchipcard oder deren Plugins nicht installiert?" #: src/libs/plugins/backends/aqhbci/banking/provider_dialogs.c:91 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_newuser.c:248 msgid "Create HBCI/FinTS DDV User" msgstr "Neuen DDV-Chipkarten-Benutzer erstellen" #: src/libs/plugins/backends/aqhbci/banking/provider_dialogs.c:112 msgid "Create HBCI/FinTS ZKA RSA User" msgstr "Neuen ZKA RSA Chipkarten-Benutzer erstellen" #: src/libs/plugins/backends/aqhbci/banking/user.c:1535 msgid " You must only enter numbers, not letters." msgstr " Es dĵrfen nur Zahlen eingegeben werden, keine Buchstaben." #: src/libs/plugins/backends/aqhbci/banking/user.c:1539 #, c-format msgid "" "Please enter a new PIN for \n" "user %s at %s\n" "The input must be at least %d characters long.%s

Please enter a new " "PIN for user %s at %s.

The input must be at least %d " "characters long.%s

" msgstr "" "Bitte geben Sie eine neue PIN fĵr \n" "Benutzer %s bei %s\n" "ein. Die PIN muŸ mindestens %d Zeichen lang sein.%s

Bitte geben Sie " "eine neue PIN fĵr Benutzer %s bei %s ein.

Die PIN muŸ " "mindestens %d Zeichen lang sein.%s

" #: src/libs/plugins/backends/aqhbci/banking/user.c:1560 #, c-format msgid "" "Please enter the PIN for \n" "user %s at %s\n" "%sPlease enter the PIN for user %s at %s.
%s" msgstr "" "Bitte geben Sie die PIN fĵr \n" "Benutzer %s bei %s\n" "ein.%sBitte geben Sie die PIN fĵr Benutzer %s bei %s ein." "
%s" #: src/libs/plugins/backends/aqhbci/banking/user.c:1582 msgid "Enter PIN" msgstr "PIN-Eingabe" #: src/libs/plugins/backends/aqhbci/banking/user.c:1628 #, c-format msgid "" "Please enter the next TAN\n" "for user %s at %s.Please enter the next TAN for user %s at " "%s." msgstr "" "Bitte geben Sie die n¤chste TAN\n" "fĵr Benutzer %s bei %s ein Bitte geben Sie die n¤chste TAN fĵr " "Benutzer %s bei %s ein. " #: src/libs/plugins/backends/aqhbci/banking/user.c:1645 msgid "Enter TAN" msgstr "TAN-Eingabe" #: src/libs/plugins/backends/aqhbci/banking/user.c:2361 #, c-format msgid "Hash Sizes of Bank Public %s Key do not match!" msgstr "Hash-L¤ngen des –ffentlichen Bank %s Schlĵssel passt nicht zusammen!" #: src/libs/plugins/backends/aqhbci/banking/user.c:2365 #: src/libs/plugins/backends/aqhbci/banking/user.c:2438 #, c-format msgid "" "Received new server %s key, please verify! (num: %d, version: %d, hash: %s)" msgstr "" "Neuen Bank %s Schlĵssel empfangen, bitte verifizieren! (Nummer: %d, Version: " "%d, Hash: %s)" #: src/libs/plugins/backends/aqhbci/banking/user.c:2411 #: src/libs/plugins/backends/aqhbci/banking/user.c:2477 msgid "Import" msgstr "Importieren" #: src/libs/plugins/backends/aqhbci/banking/user.c:2411 #: src/libs/plugins/backends/aqhbci/banking/user.c:2477 #: src/libs/plugins/backends/aqhbci/admjobs/jobchangekeys.c:452 #: src/libs/plugins/backends/aqhbci/admjobs/jobchangekeys.c:482 #: src/libs/plugins/backends/aqhbci/admjobs/jobchangekeys.c:493 #: src/libs/plugins/backends/aqhbci/admjobs/jobchangekeys.c:508 #: src/libs/plugins/backends/aqhbci/admjobs/jobchangekeys.c:559 #: src/libs/plugins/backends/aqhbci/admjobs/jobchangekeys.c:803 #: src/libs/plugins/backends/aqhbci/admjobs/jobchangekeys.c:1158 #: src/libs/plugins/backends/aqhbci/joblayer/job_crypt.c:205 msgid "Abort" msgstr "Abbrechen" #: src/libs/plugins/backends/aqhbci/banking/provider_keys.c:114 msgid "Server has no sign key, using encipher key" msgstr "Server hat keinen Signaturschlĵssel, benutze Cipher-Schlĵssel" #: src/libs/plugins/backends/aqhbci/banking/provider_keys.c:137 #, c-format msgid "Server key has a modulus size of %d bytes" msgstr "Serverschlĵssel hat Modulus-GrĥŸe von %d Bytes" #: src/libs/plugins/backends/aqhbci/banking/provider_keys.c:235 #, c-format msgid "Creating keys with %d bits (%d bytes), please wait..." msgstr "Schlĵssel mit %d Bits (%d Bytes) werden erstellt, bitte warten..." #: src/libs/plugins/backends/aqhbci/banking/provider_keys.c:255 #, c-format msgid "Error creating cipher key (%d)" msgstr "Fehler beim Erstellen des Crypto-Schlĵssels (%d)" #: src/libs/plugins/backends/aqhbci/banking/provider_keys.c:304 #, c-format msgid "Error creating sign key (%d)" msgstr "Fehler beim Erstellen des Signierschlĵssels (%d)" #: src/libs/plugins/backends/aqhbci/banking/provider_keys.c:351 #, c-format msgid "Error creating auth key (%d)" msgstr "Fehler beim Erstellen des Authentifizierungs-Schlĵssels (%d)" #: src/libs/plugins/backends/aqhbci/banking/provider_sendcmd.c:143 msgid "ERROR: Multiple signatures not yet supported" msgstr "Fehler: Mehrfachsignaturen sind bisher noch nicht unterstĵtzt" #: src/libs/plugins/backends/aqhbci/admjobs/jobchangekeys.c:62 msgid "Change keys: error" msgstr "Schlĵsselwechsel: Fehler" #: src/libs/plugins/backends/aqhbci/admjobs/jobchangekeys.c:62 #: src/libs/plugins/backends/aqhbci/admjobs/jobchangekeys.c:452 #: src/libs/plugins/backends/aqhbci/admjobs/jobchangekeys.c:508 #: src/libs/plugins/backends/aqhbci/admjobs/jobchangekeys.c:559 #: src/libs/plugins/backends/aqhbci/admjobs/jobchangekeys.c:803 #: src/libs/plugins/backends/aqhbci/admjobs/jobchangekeys.c:1162 msgid "OK" msgstr "Ok" #: src/libs/plugins/backends/aqhbci/admjobs/jobchangekeys.c:451 msgid "Change keys: insert card" msgstr "Schlĵsselwechsel: Karte einschieben" #: src/libs/plugins/backends/aqhbci/admjobs/jobchangekeys.c:481 #: src/libs/plugins/backends/aqhbci/admjobs/jobchangekeys.c:492 #: src/libs/plugins/backends/aqhbci/admjobs/jobchangekeys.c:507 #: src/libs/plugins/backends/aqhbci/admjobs/jobchangekeys.c:558 #: src/libs/plugins/backends/aqhbci/admjobs/jobchangekeys.c:744 #: src/libs/plugins/backends/aqhbci/admjobs/jobchangekeys.c:802 #: src/libs/plugins/backends/aqhbci/admjobs/jobchangekeys.c:1179 msgid "Change keys: confirm" msgstr "Schlĵsselwechsel: Best¤tigen" #: src/libs/plugins/backends/aqhbci/admjobs/jobchangekeys.c:482 msgid "Use" msgstr "Benutzen" #: src/libs/plugins/backends/aqhbci/admjobs/jobchangekeys.c:482 #: src/libs/plugins/backends/aqhbci/admjobs/jobchangekeys.c:493 msgid "Delete" msgstr "Entfernen" #: src/libs/plugins/backends/aqhbci/admjobs/jobchangekeys.c:955 msgid "Serverkeys imported." msgstr "Server-Schlĵssel importiert." #: src/libs/plugins/backends/aqhbci/admjobs/jobchangekeys.c:1161 msgid "Change keys: Error" msgstr "Schlĵsselwechsel: Fehler" #: src/libs/plugins/backends/aqhbci/admjobs/jobchangekeys.c:1172 msgid "finish" msgstr "Fertig" #: src/libs/plugins/backends/aqhbci/dialogs/dlg_ddvcard.c:104 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_zkacard.c:105 #, c-format msgid "Could not contact card. Maybe removed? (%d)" msgstr "" "Die Chipkarte konnte nicht gelesen werden. Ist sie noch im Leseger¤t? (%d)" #: src/libs/plugins/backends/aqhbci/dialogs/dlg_ddvcard.c:115 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_zkacard.c:116 #, c-format msgid "Could not read context id list from card (%d)" msgstr "Die Kontextliste konnte nicht von der Karte gelesen werden (%d)" #: src/libs/plugins/backends/aqhbci/dialogs/dlg_ddvcard.c:492 msgid "HBCI DDV-Card Setup Wizard" msgstr "Einrichtung von HBCI-DDV-Karten" #: src/libs/plugins/backends/aqhbci/dialogs/dlg_ddvcard.c:503 msgid "" "

This dialog assists you in setting up a DDV Chipcard User.

Some chipcards contain user information. You can click the button below " "to read that information from the card.

This dialog assists you in " "setting up a DDV Chipcard User.\n" "Some chipcards contain user information. You can click the button below\n" "to read that information from the card." msgstr "" "

Dieser Assistent unterstĵtzt die Einrichtung eines\n" "HBCI-DDV-Chipkarten-Benutzers.

\n" "Einige Chipkarten enthalten bereits alle notwendigen\n" "Benutzerinformationen. Klicken Sie den Knopf unten um diese\n" "Informationen von der Karte auszulesen.

\n" "Dieser Assistent unterstĵtzt die Einrichtung eines\n" "HBCI-DDV-Chipkarten-Benutzers.\n" "Einige Chipkarten enthalten bereits alle notwendigen\n" "Benutzerinformationen. Klicken Sie den Knopf unten um diese\n" "Informationen von der Karte auszulesen." #: src/libs/plugins/backends/aqhbci/dialogs/dlg_ddvcard.c:518 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_newkeyfile.c:491 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_importkeyfile.c:490 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_zkacard.c:521 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_pintan.c:492 msgid "" "

Please select the bank.

AqBanking has an internal database " "which contains HBCI/FinTS information about many banks.

If there is an " "entry for your bank this dialog will use the information from the database.Please select the bank.\n" "AqBanking has an internal database which contains\n" "HBCI/FinTS information about many banks.\n" "If there is an entry for your bank this dialog will use the\n" "information from the database." msgstr "" "

Bitte w¤hlen Sie die Bank aus.

AqBanking verfĵgt ĵber eine " "interne Datenbank welche auch HBCI-/FinTS-Informationen fĵr viele Banken " "enth¤lt.

Falls auch fĵr Ihre Bank Informationen verfĵgbar sind, werden " "diese verwendet.

Bitte w¤hlen Sie die Bank aus.\n" "AqBanking verfĵgt ĵber eine interne Datenbank welche auch\n" "HBCI-/FinTS-Informationen fĵr viele Banken enth¤lt.\n" "Falls auch fĵr Ihre Bank Informationen verfĵgbar sind, werden diese " "verwendet. " #: src/libs/plugins/backends/aqhbci/dialogs/dlg_ddvcard.c:537 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_newkeyfile.c:510 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_importkeyfile.c:509 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_zkacard.c:540 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_pintan.c:511 msgid "" "

For most banks the customer id must be the same as the user id.

However, some banks actually use the customer id, so please look into " "the documentation provided by your bank to discover whether this is the case " "with your bank.

For most banks the customer id must be the same as " "the user id.\n" "However, some banks actually use the customer id, so please look into\n" "the documentation provided by your bank to discover whether this is the\n" "case with your bank." msgstr "" "

Bei den meisten Banken entspricht die Kundenkennung der " "Benutzerkennung

Manche Banken allerdings verwenden eine gesonderte " "Kundenkennung. Sie sollten daher in die Dokumente Ihrer Bank nachschlagen, " "ob das auch bei Ihnen der Fall ist.

Bei den meisten Banken " "entspricht die Kundenkennung der Benutzerkennung.\n" " Manche Banken allerdings verwenden eine gesonderte Kundenkennung. Sie " "sollten daher\n" "in die Dokumente Ihrer Bank nachschlagen, ob das auch bei Ihnen der Fall ist." #: src/libs/plugins/backends/aqhbci/dialogs/dlg_ddvcard.c:554 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_zkacard.c:557 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_pintan.c:528 msgid "" "

We are now ready to create the user and retrieve the account list.

Click the next button to proceed or abort to abort.

We are now ready to create the user and retrieve the account list.\n" "Click the NEXT button to proceed or ABORT to abort." msgstr "" "

Es ist nun alles vorbereitet, um den Benutzer anzulegen und die " "Kontenliste abzurufen.

Klicken Sie auf Weiter, um fortzusetzen " "oder Abbrechen zum abbrechen.

Es ist nun alles " "vorbereitet, um den Benutzer anzulegen und die Kontenliste abzurufen.\n" "Klicken Sie auf WEITER, um fortzusetzen oder ABBRECHEN zum abbrechen." #: src/libs/plugins/backends/aqhbci/dialogs/dlg_ddvcard.c:567 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_ddvcard.c:909 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_zkacard.c:570 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_zkacard.c:966 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_pintan.c:541 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_pintan.c:889 #: src/libs/plugins/backends/aqpaypal/dlg_newuser.c:529 #: src/libs/plugins/backends/aqpaypal/dlg_newuser.c:863 msgid "The user has been successfully setup." msgstr "Der Benutzer wurde erfolgreich eingerichtet." #: src/libs/plugins/backends/aqhbci/dialogs/dlg_ddvcard.c:583 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_importkeyfile.c:789 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_zkacard.c:586 #, c-format msgid "Context %d:" msgstr "Kontext %d:" #: src/libs/plugins/backends/aqhbci/dialogs/dlg_ddvcard.c:591 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_importkeyfile.c:797 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_zkacard.c:594 msgid "" msgstr "" #: src/libs/plugins/backends/aqhbci/dialogs/dlg_ddvcard.c:598 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_importkeyfile.c:804 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_zkacard.c:601 msgid "" msgstr "" #: src/libs/plugins/backends/aqhbci/dialogs/dlg_ddvcard.c:802 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_zkacard.c:805 msgid "Could not create user, maybe some plugins are not installed?" msgstr "" "Benutzer konnte nicht angelegt werden, eventuell sind nicht alle Module " "installiert?" #: src/libs/plugins/backends/aqhbci/dialogs/dlg_ddvcard.c:837 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_zkacard.c:842 #, c-format msgid "Could not add user (%d)" msgstr "Der Benutzer konnte nicht hinzugefĵgt werden (%d)" #: src/libs/plugins/backends/aqhbci/dialogs/dlg_ddvcard.c:845 msgid "Setting Up DDV User" msgstr "Einrichtung eines DDV-Benutzers" #: src/libs/plugins/backends/aqhbci/dialogs/dlg_ddvcard.c:846 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_zkacard.c:851 msgid "The list of accounts will be retrieved." msgstr "Die Kontenliste wird abgerufen." #: src/libs/plugins/backends/aqhbci/dialogs/dlg_ddvcard.c:855 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_newkeyfile.c:971 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_importkeyfile.c:1009 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_zkacard.c:909 #: src/libs/plugins/backends/aqebics/dialogs/dlg_newkeyfile.c:1073 #, c-format msgid "Unable to lock users (%d)" msgstr "Fĵr die Benutzer konnte kein exklusiver Zugriff erreicht werden (%d)" #: src/libs/plugins/backends/aqhbci/dialogs/dlg_ddvcard.c:864 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_zkacard.c:919 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_pintan.c:979 msgid "Retrieving account list" msgstr "Anforderung der Kontenliste" #: src/libs/plugins/backends/aqhbci/dialogs/dlg_ddvcard.c:979 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_ddvcard.c:1083 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_newkeyfile.c:1161 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_newkeyfile.c:1291 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_importkeyfile.c:1155 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_importkeyfile.c:1285 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_zkacard.c:1037 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_zkacard.c:1141 #: src/libs/plugins/backends/aqebics/dialogs/dlg_newkeyfile.c:1247 #: src/libs/plugins/backends/aqebics/dialogs/dlg_newkeyfile.c:1366 msgid "Could not create dialog, maybe an installation error?" msgstr "" "Dialogfenster konnte nicht erstellt werden. Ist die Programminstallation " "fehlerhaft?" #: src/libs/plugins/backends/aqhbci/dialogs/dlg_edituserddv.c:355 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_edituserpintan.c:607 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_edituserrdh.c:546 #: src/libs/plugins/backends/aqebics/dialogs/dlg_edituser.c:523 msgid "Could create dialog, maybe incomplete installation?" msgstr "" "Dialog konnte nicht erzeugt werden, eventuell unvollst¤ndige Installation?" #: src/libs/plugins/backends/aqhbci/dialogs/dlg_newkeyfile.c:88 #: src/libs/plugins/backends/aqebics/dialogs/dlg_newkeyfile.c:92 #, c-format msgid "" "Could not read dialog description file [%s], maybe an installation error " "(%d)?" msgstr "" "Die Dialogbeschreibungsdatei [%s] konnte nicht gelesen werden, eventuell ist " "die Installation unvollst¤ndig (Fehler: %d)?" #: src/libs/plugins/backends/aqhbci/dialogs/dlg_newkeyfile.c:472 msgid "HBCI Keyfile Setup Wizard" msgstr "HBCI Schlĵsseldatei Einrichtungsassistent" #: src/libs/plugins/backends/aqhbci/dialogs/dlg_newkeyfile.c:483 #: src/libs/plugins/backends/aqebics/dialogs/dlg_newkeyfile.c:596 msgid "This dialog assists you in setting up a Keyfile User.\n" msgstr "" "Dieser Dialog unterstĵtzt Sie bei der Einrichtung eines Zuganges mit " "Schlĵsseldatei.\n" #: src/libs/plugins/backends/aqhbci/dialogs/dlg_newkeyfile.c:527 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_importkeyfile.c:526 msgid "" "

We are now ready to create the user and exchange keys with the " "server.

Click the next button to proceed or abort to " "abort.

We are now ready to create the user and exchange keys with " "the server.\n" "Click the NEXT button to proceed or ABORT to abort." msgstr "" "

Es liegen alle Daten vor, um den Benutzer zu erstellen und die\n" "Schlĵssel zum Server zu senden.

\n" "Klicken Sie Weiter, um diesen Schritt nun auszufĵhren oder " "Abbrechen, um abzubrechen.

\n" "Es liegen alle Daten vor, um den Benutzer zu erstellen und die\n" "Schlĵssel zum Server zu senden.\n" "Klicken Sie , um diesen Schritt nun auszufĵhren oder , um " "abzubrechen." #: src/libs/plugins/backends/aqhbci/dialogs/dlg_newkeyfile.c:540 msgid "" "

The user has been successfully created.

You must now " "print the INI letter (click the button below) and send it to " "the bank.

The activation of your account by the bank can take a few " "days.

The user has been successfully created.\n" "You must now PRINT the INI letter (click the button below)\n" "and SEND it to the bank.\n" "The activation of your account by the bank can take a few days." msgstr "" "

Der Benutzer wurde erfolgreich erstellt.\n" "

\n" "Bitte drucken Sie nun den Ini-Brief (durck Klicken des " "entsprechenden\n" "Knopfes unten) und senden den ausgedruckten und unterschriebenen\n" "Ini-Brief an die Bank.\n" "

\n" "Die Aktivierung des Zugangs durch die Bank kann dann noch einige Tage " "dauern.\n" "

\n" "Der Benutzer wurde erfolgreich erstellt.\n" "\n" "Bitte drucken Sie nun den Ini-Brief (durck Klicken des entsprechenden\n" "Knopfes unten) und senden den ausgedruckten und unterschriebenen\n" "Ini-Brief an die Bank.\n" "\n" "Die Aktivierung des Zugangs durch die Bank kann dann noch einige Tage dauern." #: src/libs/plugins/backends/aqhbci/dialogs/dlg_newkeyfile.c:775 msgid "" "

The following is the INI letter describing the keys of your bank. Please " "look at it carefully and compare the information against that in the letter " "from your bank.

Important Warning: Only " "proceed if the hash matches! Contact your bank immediately if the hash does " "not match!

" msgstr "" "

Im folgenden wird der Ini-Brief gezeigt, der die elektronischen\n" "Schlĵssel Ihrer Bank beschreibt. Bitte vergleichen Sie diese mit den\n" "Angaben, die die Bank Ihnen vorher zugeschickt hat.\n" "

\n" "Wichtig: Nur bei œbereinstimmung der Hash-" "Werte kann ein sicheres\n" "Online-Banking eingerichtet werden. Falls die Hash-Werte abweichen,\n" "kontaktieren Sie bitte unbedingt Ihre Bank und brechen die Einrichtung\n" "hier ab.

" #. add ASCII version of the INI letter for frontends which don't support HTML #: src/libs/plugins/backends/aqhbci/dialogs/dlg_newkeyfile.c:796 msgid "" "The following is the INI letter describing the keys of your bank.\n" "Please look at it carefully and compare the information against that\n" "in the letter from your bank.\n" "\n" "IMPORTANT WARNING: Only proceed if the hash matches!\n" "Contact your bank immediately if the hash does not match!\n" "\n" msgstr "" "Im folgenden wird der Ini-Brief gezeigt, der die elektronischen\n" "Schlĵssel Ihrer Bank beschreibt. Bitte vergleichen Sie diese mit den\n" "Angaben, die die Bank Ihnen vorher zugeschickt hat.\n" "\n" "Wichtig: Nur bei œbereinstimmung der Hash-Werte kann ein sicheres\n" "Online-Banking eingerichtet werden. Falls die Hash-Werte abweichen,\n" "kontaktieren Sie bitte unbedingt Ihre Bank und brechen die Einrichtung\n" "hier ab.\n" "\n" #: src/libs/plugins/backends/aqhbci/dialogs/dlg_newkeyfile.c:818 msgid "Check Bank Keys" msgstr "œberprĵfe Bankschlĵssel" #: src/libs/plugins/backends/aqhbci/dialogs/dlg_newkeyfile.c:820 msgid "Keys are ok" msgstr "Schlĵssel ok." #: src/libs/plugins/backends/aqhbci/dialogs/dlg_newkeyfile.c:821 msgid "Keys do not match!" msgstr "Schlĵssel ungĵltig!" #: src/libs/plugins/backends/aqhbci/dialogs/dlg_newkeyfile.c:860 msgid "Could not find HBCI backend, maybe some plugins are not installed?" msgstr "" "Das HBCI-Modul wurde nicht gefunden, eventuell sind einige Module nicht " "installiert?" #: src/libs/plugins/backends/aqhbci/dialogs/dlg_newkeyfile.c:891 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_newkeyfile.c:900 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_importkeyfile.c:706 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_importkeyfile.c:726 #: src/libs/plugins/backends/aqebics/dialogs/dlg_newkeyfile.c:992 #: src/libs/plugins/backends/aqebics/dialogs/dlg_newkeyfile.c:1001 #, c-format msgid "" "CryptToken plugin for type %s is not available. Did you install all " "necessary packages?" msgstr "" "Das CryptToken-Modul des Typs %s wurde nicht gefunden. Sind alle nĥtigen " "Pakete installiert?" #: src/libs/plugins/backends/aqhbci/dialogs/dlg_newkeyfile.c:918 #: src/libs/plugins/backends/aqebics/dialogs/dlg_newkeyfile.c:1019 #, c-format msgid "" "The keyfile %s could not be created. Maybe there already is a file of that " "name (%d)." msgstr "" "Die Schlĵsseldatei %s konnte nicht angelegt werden. Eventuell existiert " "bereits eine gleichnamige Datei (%d)." #: src/libs/plugins/backends/aqhbci/dialogs/dlg_newkeyfile.c:930 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_importkeyfile.c:817 #: src/libs/plugins/backends/aqebics/dialogs/dlg_newkeyfile.c:1031 #, c-format msgid "The keyfile %s could not be closed. Please check disc space." msgstr "" "Die Schlĵsseldatei %s konnte nicht geschrieben werden. Bitte prĵfen Sie den " "Plattenspeicher." #: src/libs/plugins/backends/aqhbci/dialogs/dlg_newkeyfile.c:950 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_importkeyfile.c:990 #, c-format msgid "Could not add HBCI user, maybe there already is a user of that id (%d)" msgstr "" "HBCI-Benutzer konnte nicht hinzugefĵgt werden, eventuell besteht bereits ein " "Benutzer mit der gleichen Kennung (%d)" #: src/libs/plugins/backends/aqhbci/dialogs/dlg_newkeyfile.c:961 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_importkeyfile.c:999 #: src/libs/plugins/backends/aqebics/dialogs/dlg_newkeyfile.c:1063 msgid "Setting Up Keyfile User" msgstr "Schlĵsseldatei-Benutzer einrichten" #: src/libs/plugins/backends/aqhbci/dialogs/dlg_newkeyfile.c:962 msgid "" "The server keys will now be retrieved, keys created and sent to the bank." msgstr "" "Die Bankschlĵssel werden nun abgerufen, eigene Schlĵssel erzeugt und an die " "Bank gesendet." #: src/libs/plugins/backends/aqhbci/dialogs/dlg_newkeyfile.c:981 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_importkeyfile.c:1018 msgid "Retrieving server keys" msgstr "Server-Schlĵssel abrufen" #: src/libs/plugins/backends/aqhbci/dialogs/dlg_newkeyfile.c:1002 msgid "Bad bank keys, you should contact your bank." msgstr "Serverschlĵssel sind fehlerhaft. Bitte kontaktieren Sie Ihre Bank." #: src/libs/plugins/backends/aqhbci/dialogs/dlg_newkeyfile.c:1029 #: src/libs/plugins/backends/aqebics/dialogs/dlg_newkeyfile.c:1089 #, c-format msgid "Error generating keys: %d" msgstr "Fehler beim Erzeugen der Schlĵssel: %d" #: src/libs/plugins/backends/aqhbci/dialogs/dlg_newkeyfile.c:1050 #: src/libs/plugins/backends/aqebics/dialogs/dlg_newkeyfile.c:1110 msgid "Sending user keys" msgstr "Benutzerschlĵssel werden ĵbermittelt" #: src/libs/plugins/backends/aqhbci/dialogs/dlg_newkeyfile.c:1334 #: src/libs/plugins/backends/aqebics/dialogs/dlg_newkeyfile.c:1430 msgid "Create Keyfile" msgstr "Schlĵsseldatei erstellen" #: src/libs/plugins/backends/aqhbci/dialogs/dlg_newkeyfile.c:1337 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_importkeyfile.c:1328 #: src/libs/plugins/backends/aqebics/dialogs/dlg_newkeyfile.c:1433 msgid "All Files (*)\tOHBCI Files (*ohbci;*.medium)" msgstr "Alle Dateien (*)\tOHBCI-Dateien (*.ohbci;*.OHBCI)" #. GWEN_Gui_Print does not seem to be implemented for qt4/5 yet #: src/libs/plugins/backends/aqhbci/dialogs/dlg_newkeyfile.c:1408 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_importkeyfile.c:1398 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_edituserrdh.c:747 #: src/libs/plugins/backends/aqebics/dialogs/dlg_newkeyfile.c:1497 #: src/libs/plugins/backends/aqebics/dialogs/dlg_edituser.c:733 msgid "INI Letter" msgstr "Ini-Brief" #: src/libs/plugins/backends/aqhbci/dialogs/dlg_newkeyfile.c:1410 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_importkeyfile.c:1400 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_edituserrdh.c:742 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_edituserrdh.c:749 msgid "INI Letter for HBCI" msgstr "Ini-Brief fĵr HBCI" #: src/libs/plugins/backends/aqhbci/dialogs/dlg_choose_usertype.c:84 msgid "" "

The HBCI module supports a broad range of security media. Please " "choose the user setup mode from the following list.

Click on the " "run button below to create the user.

The HBCI module " "supports a broad range of security\n" "media. Please choose the user setup mode from the following\n" "list.\n" "Click on the RUN button below to create the user." msgstr "" "

Das HBCI-Modul unterstĵtzt viele verschiedene Sicherheitsmedien. " "Bitte\n" "w¤hlen Sie die Einrichtungsart aus der folgenden Liste.

\n" "Klicken Sie auf den ÂğAusfĵhrenÂĞ-Knopf, um den Benutzer zu erstellen.

\n" "Das HBCI-Modul unterstĵtzt viele verschiedene Sicherheitsmedien. Bitte\n" "w¤hlen Sie die Einrichtungsart aus der folgenden Liste.\n" "Klicken Sie auf den ÂğAusfĵhrenÂĞ-Knopf, um den Benutzer zu erstellen." #: src/libs/plugins/backends/aqhbci/dialogs/dlg_newuser.c:96 msgid "Create a New User" msgstr "Neuer Benutzer erstellen" #: src/libs/plugins/backends/aqhbci/dialogs/dlg_newuser.c:103 msgid "" "

You can now create a new HBCI/FinTS user.

AqBanking supports the " "following user types:
  • Keyfile-based user
  • Chipcard-based " "user
  • PIN/TAN user

Which type of user you need to setup " "is determined by the bank. The letter from your bank should contain this " "information.

You can now create a new HBCI/FinTS user.\n" "AqBanking supports the following user types:\n" " - Keyfile-based user\n" " - Chipcard-based user\n" " - PIN/TAN user\n" "Which type of user you need to setup is determined\n" "by the bank. The letter from your bank should contain this\n" "information." msgstr "" "

Sie kĥnnen nun einen neuen HBCI/FinTS-Benutzer anlegen.

" "

AqBanking unterstĵtzt die folgenden Benutzerarten:

    " "
  • Schlĵsseldatei-basiert
  • Chipkarten-basiert
  • PIN/TAN-" "Benutzer

Welche Benutzerart Sie verwenden mĵssen wird von " "Ihrer Bank vorgegeben.Diese Information sollten Sie in den Unterlagen von " "Ihrer Bank finden.

Sie kĥnnen nun einen neuen HBCI/FinTS-Benutzer " "anlegen.\n" "AqBanking unterstĵtzt die folgenden Benutzerarten:\n" "- Schlĵsseldatei-basiert\n" "- Chipkarten-basiert\n" "- PIN/TAN-Benutzer\n" "Welche Benutzerart Sie verwenden mĵssen wird von Ihrer Bank vorgegeben.\n" "Diese Information sollten Sie in den Unterlagen von Ihrer Bank finden." #: src/libs/plugins/backends/aqhbci/dialogs/dlg_newuser.c:178 msgid "Create HBCI/FinTS PIN/TAN User" msgstr "Neuen HBCI/FinTS PIN/TAN-Benutzer erstellen" #: src/libs/plugins/backends/aqhbci/dialogs/dlg_newuser.c:208 msgid "Checking Chipcard" msgstr "Chipkarte prĵfen" #: src/libs/plugins/backends/aqhbci/dialogs/dlg_newuser.c:209 msgid "Checking chipcard type, please wait..." msgstr "Chipkarte wird geprĵft, bitte warten..." #: src/libs/plugins/backends/aqhbci/dialogs/dlg_newuser.c:292 msgid "Create HBCI/FinTS Keyfile User" msgstr "Neuen HBCI/FinTS Benutzer mit Schlĵsseldatei erstellen" #: src/libs/plugins/backends/aqhbci/dialogs/dlg_importkeyfile.c:471 msgid "HBCI Keyfile Import Wizard" msgstr "HBCI-Schlĵsseldatei-Import-Assistent" #: src/libs/plugins/backends/aqhbci/dialogs/dlg_importkeyfile.c:482 msgid "This dialog assists you in importing a Keyfile User.\n" msgstr "" "Dieser Dialog unterstĵtzt Sie bei der Einrichtung eines Schlĵsseldatei-" "Zuganges.\n" #: src/libs/plugins/backends/aqhbci/dialogs/dlg_importkeyfile.c:539 msgid "" "

The user has been successfully created.

The user has been " "successfully created." msgstr "" "Der Benutzer wurde erfolgreich erstellt.

Der Benutzer wurde " "erfolgreich erstellt.

" #: src/libs/plugins/backends/aqhbci/dialogs/dlg_importkeyfile.c:749 #, c-format msgid "The keyfile %s could not be opened. Please check permissions (%d)." msgstr "" "Die Schlĵsseldatei %s konnte nicht geĥffnet werden. Bitte prĵfen Sie die " "Berechtigungen (%d)." #: src/libs/plugins/backends/aqhbci/dialogs/dlg_importkeyfile.c:757 msgid "-- custom --" msgstr "-- benutzerdefiniert --" #: src/libs/plugins/backends/aqhbci/dialogs/dlg_importkeyfile.c:768 #, c-format msgid "Could not read context id list (%d)." msgstr "Die Kontextliste konnte nicht gelesen werden (%d)." #: src/libs/plugins/backends/aqhbci/dialogs/dlg_importkeyfile.c:952 msgid "Could not create HBCI user (internal error)" msgstr "Der HBCI-Benutzer konnte nicht erstellt werden (interner Fehler)" #: src/libs/plugins/backends/aqhbci/dialogs/dlg_importkeyfile.c:1000 msgid "The server keys and system id will now be retrieved." msgstr "Die Bankschlĵssel und Systemkennung werden nun abgerufen." #: src/libs/plugins/backends/aqhbci/dialogs/dlg_importkeyfile.c:1047 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_pintan.c:952 msgid "Retrieving system id" msgstr "Systemkennung abrufen" #: src/libs/plugins/backends/aqhbci/dialogs/dlg_importkeyfile.c:1325 msgid "Select Keyfile" msgstr "Schlĵsseldatei w¤hlen" #: src/libs/plugins/backends/aqhbci/dialogs/dlg_edituserpintan.c:280 msgid "" "Please only change this value if you know what you are doing, otherwise " "leave it at \"auto\"." msgstr "" "Diesen Wert bitte nur ¤ndern, wenn Ihnen die Auswirkungen bewusst sind, " "andernfalls bitte auf \"auto\" stehen lassen." #: src/libs/plugins/backends/aqhbci/dialogs/dlg_edituserpintan.c:282 msgid "tanMechanism|auto" msgstr "auto" #: src/libs/plugins/backends/aqhbci/dialogs/dlg_edituserpintan.c:283 msgid "tanMechanism|text" msgstr "text" #: src/libs/plugins/backends/aqhbci/dialogs/dlg_edituserpintan.c:285 msgid "tanMechanism|chipTAN optic" msgstr "chipTAN Optisch" #: src/libs/plugins/backends/aqhbci/dialogs/dlg_edituserpintan.c:286 msgid "tanMechanism|QR image" msgstr "QR-Code" #: src/libs/plugins/backends/aqhbci/dialogs/dlg_edituserpintan.c:288 msgid "tanMechanism|photoTAN" msgstr "photoTAN" #: src/libs/plugins/backends/aqhbci/dialogs/dlg_edituserpintan.c:290 msgid "tanMechanism|chipTAN USB" msgstr "chipTAN USB" #: src/libs/plugins/backends/aqhbci/dialogs/dlg_edituserpintan.c:349 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_pintan_special.c:313 msgid "" "For smsTAN or mTAN this is your mobile phone number. Please ask your bank " "for the necessary format of this number." msgstr "" "Bei smsTAN oder mTAN verwenden Sie hier Ihre Handynummer. Das genaue Format " "der Telefonnummer muss von der Bank angegeben sein." #: src/libs/plugins/backends/aqhbci/dialogs/dlg_pintan_tanmode.c:129 msgid "Select TAN Mode" msgstr "TAN-Methode ausw¤hlen" #: src/libs/plugins/backends/aqhbci/dialogs/dlg_pintan_tanmode.c:136 msgid "" "

Please select the TAN method to use for authentication purposes.

You should choose a method with a version of 6 or higher, otherwise " "\"Strong Customer Authentication\" is disabled and connecting to most banks " "is not possible.

Please select the TAN method to use for " "authentication purposes.\n" "You should choose a method with a version of 6 or higher, otherwise \"Strong " "Customer Authentication\" is disabled and connecting to most banks is not " "possible." msgstr "" #: src/libs/plugins/backends/aqhbci/dialogs/dlg_zkacard.c:495 msgid "HBCI ZKA-Card Setup Wizard" msgstr "Einrichtung von HBCI ZKA-Karten" #: src/libs/plugins/backends/aqhbci/dialogs/dlg_zkacard.c:506 #, fuzzy msgid "" "

This dialog assists you in setting up a ZKA Chipcard User.

Some chipcards contain user information. You can click the button below " "to read that information from the card.

This dialog assists you in " "setting up a ZKA Chipcard User.\n" "Some chipcards contain user information. You can click the button below\n" "to read that information from the card." msgstr "" "

Dieser Assistent unterstĵtzt die Einrichtung eines\n" "HBCI-DDV-Chipkarten-Benutzers.

\n" "Einige Chipkarten enthalten bereits alle notwendigen\n" "Benutzerinformationen. Klicken Sie den Knopf unten um diese\n" "Informationen von der Karte auszulesen.

\n" "Dieser Assistent unterstĵtzt die Einrichtung eines\n" "HBCI-DDV-Chipkarten-Benutzers.\n" "Einige Chipkarten enthalten bereits alle notwendigen\n" "Benutzerinformationen. Klicken Sie den Knopf unten um diese\n" "Informationen von der Karte auszulesen." #: src/libs/plugins/backends/aqhbci/dialogs/dlg_zkacard.c:850 msgid "Setting Up ZKA User" msgstr "Einrichtung eines ZKA-Benutzers" #: src/libs/plugins/backends/aqhbci/dialogs/dlg_ddvcard_special.c:194 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_pintan_special.c:269 msgid "HBCI PIN/TAN Special Settings" msgstr "Spezielle HBCI-PIN/TAN-Einstellungen" #: src/libs/plugins/backends/aqhbci/dialogs/dlg_pintan.c:473 msgid "HBCI PIN/TAN Setup Wizard" msgstr "HBCI PIN/TAN Einrichtungsassistent" #: src/libs/plugins/backends/aqhbci/dialogs/dlg_pintan.c:484 msgid "This dialog assists you in setting up a Pin/TAN User.\n" msgstr "" "Dieser Dialog unterstĵtzt Sie bei der Einrichtung eines PIN/TAN-Zuganges.\n" #: src/libs/plugins/backends/aqhbci/dialogs/dlg_pintan.c:840 msgid "Setting Up PIN/TAN User" msgstr "PIN/TAN einrichten" #: src/libs/plugins/backends/aqhbci/dialogs/dlg_pintan.c:841 msgid "The system id and a list of accounts will be retrieved." msgstr "Die Systemkennung und Kontenliste werden angefordert." #: src/libs/plugins/backends/aqhbci/dialogs/dlg_pintan.c:933 msgid "Retrieving generic bank info (SCA)" msgstr "Allgemeine Bankinfos abrufen (SCA)" #: src/libs/plugins/backends/aqhbci/dialogs/dlg_rdh_special.c:247 msgid "HBCI Keyfile Special Settings" msgstr "Schlĵsseldatei-Einstellungen" #: src/libs/plugins/backends/aqhbci/dialogs/dlg_rdh_special.c:273 #: src/libs/plugins/backends/aqhbci/dialogs/dlg_edituserrdh.c:181 msgid "(auto)" msgstr "(auto)" #: src/libs/plugins/backends/aqhbci/dialogs/dlg_edituserrdh.c:158 msgid "HBCIUserStatus|new" msgstr "neu" #: src/libs/plugins/backends/aqhbci/dialogs/dlg_edituserrdh.c:159 msgid "HBCIUserStatus|enabled" msgstr "aktiviert" #: src/libs/plugins/backends/aqhbci/dialogs/dlg_edituserrdh.c:160 msgid "HBCIUserStatus|pending" msgstr "wartend auf Freischaltung" #: src/libs/plugins/backends/aqhbci/dialogs/dlg_edituserrdh.c:161 msgid "HBCIUserStatus|disabled" msgstr "deaktiviert" #: src/libs/plugins/backends/aqhbci/joblayer/job_commit_bpd.c:381 #, c-format msgid "Server address found: %s" msgstr "Gefundene Serveradresse: %s" #: src/libs/plugins/backends/aqhbci/joblayer/job_commit.c:294 msgid "Bank message received" msgstr "Banknachricht erhalten" #: src/libs/plugins/backends/aqhbci/joblayer/job_crypt.c:51 #: src/libs/plugins/backends/aqhbci/joblayer/job_crypt.c:136 msgid "Response without security info (internal)" msgstr "" "Empfangene Antwort hat keine Sicherheitsinformationen (interne Nachricht)" #: src/libs/plugins/backends/aqhbci/joblayer/job_crypt.c:63 msgid "Response encrypted with invalid key" msgstr "Empfangene Antwort ist mit ungĵltigem Schlĵssel verschlĵsselt" #: src/libs/plugins/backends/aqhbci/joblayer/job_crypt.c:76 msgid "Response is not encrypted as expected" msgstr "Empfangene Antwort ist auf unerwartete Art verschlĵsselt" #: src/libs/plugins/backends/aqhbci/joblayer/job_crypt.c:152 msgid "Invalid bank signature" msgstr "Ungĵltige Banksignatur" #: src/libs/plugins/backends/aqhbci/joblayer/job_crypt.c:169 msgid "Response not signed by the bank" msgstr "Empfangene Antwort ist von der Bank nicht signiert" #: src/libs/plugins/backends/aqhbci/joblayer/job_crypt.c:177 msgid "Security Warning" msgstr "Sicherheitswarnung" #: src/libs/plugins/backends/aqhbci/joblayer/job_crypt.c:178 msgid "" "The HBCI response of the bank has not been signed by the bank, \n" "contrary to what has been expected. This can be the case because the \n" "bank just stopped signing their HBCI responses. This error message \n" "would also occur if there were a replay attack against your computer \n" "in progress right now, which is probably quite unlikely. \n" " \n" "Please contact your bank and ask them whether their HBCI server \n" "stopped signing the HBCI responses. If the bank is concerned about \n" "your security, it should not stop signing the HBCI responses. \n" " \n" "Do you nevertheless want to accept this response this time or always?" "

The HBCI response of the bank has not been signed by the bank, \n" "contrary to what has been expected. This can be the case because the \n" "bank just stopped signing their HBCI responses. This error message \n" "would also occur if there were a replay attack against your computer \n" "in progress right now, which is probably quite unlikely. \n" "

Please contact your bank and ask them whether their HBCI server \n" "stopped signing the HBCI responses. If the bank is concerned about \n" "your security, it should not stop signing the HBCI responses. \n" "

Do you nevertheless want to accept this response this time or always?" "

" msgstr "" "Die HBCI-Antwort der Bank ist nicht von der Bank signiert, anders als\n" "erwartet. Dies kann der Fall sein, wenn die Bank soeben ihre\n" "Einstellungen ge¤ndert hat und nun keine Antworten mehr\n" "signiert. Diese Meldung erscheint ebenfalls, wenn in diesem Moment ein\n" "Angreifer versucht, ihre Sicherheit durch Âğreplay attacksÂĞ (mehrfache\n" "Zusendung der Bank-Antwort) zu kompromittieren, was allerdings ein\n" "unwahrscheinlicher Fall ist.\n" "\n" "Bitte kontaktieren Sie Ihre Bank und fragen nach, ob der HBCI-Server\n" "aufgehĥrt hat, die Antworten zu signieren. Wenn Ihre Bank um Ihre\n" "Sicherheit besorgt ist, sollte der HBCI-Server nicht aufhĥren, die\n" "Antworten zu signieren.\n" "\n" "Wollen Sie trotzdem die Antwort dieses Mal oder fĵr immer akzeptieren?\n" "

\n" "Die HBCI-Antwort der Bank ist nicht von der Bank signiert, anders als\n" "erwartet. Dies kann der Fall sein, wenn die Bank soeben ihre\n" "Einstellungen ge¤ndert hat und nun keine Antworten mehr\n" "signiert. Diese Meldung erscheint ebenfalls, wenn in diesem Moment ein\n" "Angreifer versucht, ihre Sicherheit durch Âğreplay attacksÂĞ (mehrfache\n" "Zusendung der Bank-Antwort) zu kompromittieren, was allerdings ein\n" "unwahrscheinlicher Fall ist.\n" "

\n" "Bitte kontaktieren Sie Ihre Bank und fragen nach, ob der HBCI-Server\n" "aufgehĥrt hat, die Antworten zu signieren. Wenn Ihre Bank um Ihre\n" "Sicherheit besorgt ist, sollte der HBCI-Server nicht aufhĥren, die\n" "Antworten zu signieren.\n" "

\n" "Wollen Sie trotzdem die Antwort dieses Mal oder fĵr immer akzeptieren?\n" "

" #: src/libs/plugins/backends/aqhbci/joblayer/job_crypt.c:203 msgid "Accept this time" msgstr "Dieses Mal akzeptieren" #: src/libs/plugins/backends/aqhbci/joblayer/job_crypt.c:204 msgid "Accept always" msgstr "Fĵr immer akzeptieren" #: src/libs/plugins/backends/aqhbci/joblayer/job_crypt.c:209 msgid "User accepts this unsigned response" msgstr "Benutzer hat die unsignierte Antwort akzeptiert" #: src/libs/plugins/backends/aqhbci/joblayer/job_crypt.c:217 msgid "User accepts all further unsigned responses" msgstr "Benutzer akzeptiert unsignierte Antworten dauerhaft" #: src/libs/plugins/backends/aqhbci/joblayer/job_crypt.c:226 msgid "Aborted" msgstr "Abgebrochen" #: src/libs/plugins/backends/aqhbci/joblayer/job_commit_key.c:170 #, c-format msgid "Received unknown server key: type=%s, num=%d, version=%d, hash=%s" msgstr "" "Unbekannter Serverschlĵssel empfangen: Typ=%s, Nummer=%d, Version=%d, Hash=%s" #: src/libs/plugins/backends/aqhbci/joblayer/jobqueue_dispatch.c:83 msgid "Dialog aborted by bank, assuming bad PIN" msgstr "Dialog wurde von der Bank abgebrochen. PIN scheint ungĵltig zu sein" #: src/libs/plugins/backends/aqhbci/joblayer/jobqueue_dispatch.c:94 msgid "Dialog not aborted, assuming PIN is ok" msgstr "Dialog wurde nicht abgebrochen, PIN scheint gĵltig zu sein" #: src/libs/plugins/backends/aqhbci/joblayer/jobqueue_dispatch.c:149 msgid "PIN invalid according to server" msgstr "PIN ungĵltig laut Antwort des Servers" #: src/libs/plugins/backends/aqhbci/joblayer/jobqueue_dispatch.c:324 #, c-format msgid "TAN \"%s\" has been used, please strike it out." msgstr "Die TAN \"%s\" wurde benutzt, Sie kĥnnen sie streichen." #: src/libs/plugins/backends/aqhbci/applayer/cbox_itan1.c:219 #: src/libs/plugins/backends/aqhbci/applayer/cbox_itan1.c:316 #: src/libs/plugins/backends/aqhbci/applayer/cbox_itan2.c:292 #: src/libs/plugins/backends/aqhbci/applayer/cbox_send.c:52 msgid "Encoding queue" msgstr "Auftr¤ge werden kodiert" #: src/libs/plugins/backends/aqhbci/applayer/cbox_itan.c:122 msgid "There are no tan method descriptions (yet), trying One-Step TAN." msgstr "Keine TAN-Methodenbeschreibungen (bisher), versuche Ein-Schritt-TAN." #: src/libs/plugins/backends/aqhbci/applayer/cbox_itan.c:135 msgid "No valid iTAN method found" msgstr "Keine gĵltigen iTAN Methoden gefunden" #: src/libs/plugins/backends/aqhbci/applayer/cbox_itan.c:151 #, c-format msgid "Selecting iTAN mode \"%s\" (%d, version %d, process %d)" msgstr "W¤hle iTAN Modus \"%s\" (%d, Version %d, Prozess %d)" #: src/libs/plugins/backends/aqhbci/applayer/cbox_itan.c:152 msgid "(unnamed)" msgstr "(ohne Bezeichnung)" #: src/libs/plugins/backends/aqhbci/applayer/cbox_itan.c:387 #, c-format msgid "" "TAN method (%d) selected by user is no longer valid, please choose another " "one" msgstr "" "Vom Benutzer gew¤hlte TAN-Methode (%d) ist nicht mehr gĵltig, bitte w¤hlen " "Sie eine neue" #: src/libs/plugins/backends/aqhbci/applayer/cbox_queue.c:290 msgid "Retrying to open dialog" msgstr "Versuche erneut den Dialog zu erĥffnen" #: src/libs/plugins/backends/aqhbci/applayer/cbox_hbci.c:77 msgid "Opening dialog" msgstr "–ffne Dialog mit dem Server" #: src/libs/plugins/backends/aqhbci/applayer/outbox.c:132 msgid "Now the jobs are sent via their backends to the credit institutes." msgstr "" "Die Auftr¤ge werden durch die zust¤ndigen Module zu den Kreditinstituten " "gesendet." #: src/libs/plugins/backends/aqhbci/applayer/outbox.c:242 msgid "AqHBCI started" msgstr "AqHBCI gestartet" #: src/libs/plugins/backends/aqhbci/applayer/outbox.c:256 msgid "AqHBCI finished." msgstr "AqHBCI abgeschlossen." #: src/libs/plugins/backends/aqhbci/applayer/outbox.c:286 #, c-format msgid "Could not lock user %lu (%d)" msgstr "Fĵr Benutzer %lu konnte kein exklusiver Zugriff erreicht werden (%d)\t" #: src/libs/plugins/backends/aqhbci/applayer/outbox.c:331 #, c-format msgid "Could not unlock user %lu (%d)" msgstr "" "Fĵr den Benutzer %lu konnte der exklusive Zugriff nicht freigegeben werden " "(%d)" #: src/libs/plugins/backends/aqhbci/applayer/outbox.c:456 #, c-format msgid "Error processing job %s" msgstr "Fehler bei der Bearbeitung des Jobs %s" #: src/libs/plugins/backends/aqhbci/applayer/cbox_psd2.c:56 msgid "" "We have no list of allowed two-step TAN methods, maybe you should request " "TAN methods." msgstr "" "Keine Liste von erlaubten Zwei-Schritt TAN-Methoden verfĵgbar. Sie sollten " "die verfĵgbaren TAN-Methoden neu abrufen." #: src/libs/plugins/backends/aqhbci/applayer/cbox_send.c:29 msgid "Sending message" msgstr "Nachricht senden" #: src/libs/plugins/backends/aqhbci/applayer/cbox_send.c:33 msgid "Unable to send (network error)" msgstr "Fehler beim Senden (Netzwerk-Fehler)" #: src/libs/plugins/backends/aqhbci/applayer/cbox_send.c:37 msgid "Message sent" msgstr "Nachricht gesendet" #: src/libs/plugins/backends/aqhbci/applayer/cbox_send.c:56 msgid "Unable to encode" msgstr "Auftr¤ge konnten nicht kodiert werden" #: src/libs/plugins/backends/aqhbci/applayer/cbox_send.c:67 msgid "Queue sent" msgstr "Auftr¤ge gesendet" #: src/libs/plugins/backends/aqhbci/applayer/cbox_dialog.c:101 msgid "Closing dialog" msgstr "Beende Dialog mit dem Server" #: src/libs/plugins/backends/aqhbci/applayer/cbox_recv.c:31 msgid "Waiting for response" msgstr "Auf Antwort warten" #: src/libs/plugins/backends/aqhbci/applayer/cbox_recv.c:38 #, c-format msgid "Error receiving response (%d)" msgstr "Fehler beim Empfangen der Antwort (%d)" #: src/libs/plugins/backends/aqhbci/applayer/cbox_recv.c:43 msgid "Response received" msgstr "Antwort erhalten" #: src/libs/plugins/backends/aqhbci/applayer/cbox_recv.c:49 msgid "Bad response (unable to decode)" msgstr "Fehlerhafte Antwort (konnte nicht dekodiert werden)" #: src/libs/plugins/backends/aqhbci/applayer/cbox_recv.c:62 msgid "Bad response (bad message reference)" msgstr "Fehlerhafte Antwort (falsche Nachrichtenreferenz)" #: src/libs/plugins/backends/aqhbci/applayer/cbox_recv.c:95 msgid "Dialog aborted by server" msgstr "Dialog-Abbruch durch den Server." #: src/libs/plugins/backends/aqhbci/applayer/cbox_recv.c:99 msgid "Bad response (unable to dispatch)" msgstr "Fehlerhafte Antwort (konnte nicht den Auftr¤gen zugeordnet werden)" #: src/libs/plugins/backends/aqhbci/ajobs/jobgetbalance.c:217 msgid "Plugin \"SWIFT\" not found." msgstr "Plugin \"SWIFT\" nicht gefunden." #: src/libs/plugins/backends/aqhbci/ajobs/jobgetbalance.c:264 msgid "Importing transactions..." msgstr "Buchungen importieren..." #: src/libs/plugins/backends/aqhbci/ajobs/jobtransferbase.c:159 #, c-format msgid "Using SEPA descriptor %s and profile %s" msgstr "Verwende SEPA-Deskriptor %s und Profil %s" #: src/libs/plugins/backends/aqhbci/ajobs/accountjob.c:88 msgid "" "This job needs an account suffix, but your bank did not provide one. " "Therefore this job is not supported with your account.\n" "Setting a higher HBCI version in the user settings might fix the problem." msgstr "" "Dieser Auftrag benĥtigt ein Unterkontomerkmal, welches Ihre Bank allerdings " "nicht ĵbertr¤gt. Daher wird dieser Auftrag mit dem angegebenen Konto nicht " "unterstĵtzt.\n" "Dieses Problem wird mitunter dadurch gelĥst, dass Sie in den " "Benutzereinstellungen eine hĥhere HBCI-Version ausw¤hlen." #: src/libs/plugins/backends/aqhbci/control/main.c:53 #: src/libs/plugins/backends/aqebics/control/main.c:45 #: src/libs/plugins/backends/aqfints/banking/control/control.c:35 msgid " COMMAND [LOCAL OPTIONS]\n" msgstr " KOMMANDO [KOMMANDO-OPTIONEN]\n" #: src/libs/plugins/backends/aqhbci/control/main.c:55 #: src/libs/plugins/backends/aqebics/control/main.c:48 #: src/libs/plugins/backends/aqfints/banking/control/control.c:37 msgid "" "\n" "Commands:\n" "\n" msgstr "" "\n" "Kommandos:\n" "\n" #: src/libs/plugins/backends/aqhbci/control/main.c:57 #: src/libs/plugins/backends/aqebics/control/main.c:50 msgid "" " mkpinlist:\n" " This command creates an empty PIN file\n" "\n" msgstr "" #: src/libs/plugins/backends/aqhbci/control/main.c:61 msgid "" " adduser:\n" " Adds a user (-> setup HBCI for a bank)\n" "\n" msgstr "" #: src/libs/plugins/backends/aqhbci/control/main.c:65 msgid "" " deluser:\n" " Deletes a user.\n" "\n" msgstr "" #: src/libs/plugins/backends/aqhbci/control/main.c:68 #: src/libs/plugins/backends/aqebics/control/main.c:58 msgid "" " getkeys:\n" " Requests the server's key\n" "\n" msgstr "" #: src/libs/plugins/backends/aqhbci/control/main.c:71 msgid "" " getcert:\n" " Requests the server's SSL certificate\n" "\n" msgstr "" #: src/libs/plugins/backends/aqhbci/control/main.c:74 #: src/libs/plugins/backends/aqebics/control/main.c:61 msgid "" " createkeys:\n" " Create user keys.\n" "\n" msgstr "" #: src/libs/plugins/backends/aqhbci/control/main.c:77 #: src/libs/plugins/backends/aqebics/control/main.c:67 msgid "" " sendkeys:\n" " Send the user keys to the bank.\n" "\n" msgstr "" #: src/libs/plugins/backends/aqhbci/control/main.c:80 msgid "" " changekeys:\n" " Change user keys (and media).\n" "\n" msgstr "" #: src/libs/plugins/backends/aqhbci/control/main.c:83 msgid "" " getbankinfo:\n" " Request bank information\n" "\n" msgstr "" #: src/libs/plugins/backends/aqhbci/control/main.c:86 #: src/libs/plugins/backends/aqebics/control/main.c:70 msgid "" " getaccounts:\n" " Requests account list for a user\n" "\n" msgstr "" #: src/libs/plugins/backends/aqhbci/control/main.c:90 msgid "" " getaccsepa:\n" " Requests SEPA account list for a user\n" "\n" msgstr "" #: src/libs/plugins/backends/aqhbci/control/main.c:94 msgid "" " getsysid:\n" " Requests a system id for the given user\n" "\n" msgstr "" #: src/libs/plugins/backends/aqhbci/control/main.c:98 msgid "" " getitanmodes:\n" " Requests supported iTAN modes for the given user\n" "\n" msgstr "" #: src/libs/plugins/backends/aqhbci/control/main.c:102 msgid "" " listitanmodes:\n" " Show a list of supported iTAN modes for the given user\n" "\n" msgstr "" #: src/libs/plugins/backends/aqhbci/control/main.c:106 msgid "" " setitanmode:\n" " Select an iTAN mode for the given user\n" "\n" msgstr "" #: src/libs/plugins/backends/aqhbci/control/main.c:109 msgid "" " listusers:\n" " List the users\n" "\n" msgstr "" #: src/libs/plugins/backends/aqhbci/control/main.c:112 msgid "" " listaccounts:\n" " List the accounts\n" "\n" msgstr "" #: src/libs/plugins/backends/aqhbci/control/main.c:115 msgid "" " changepin:\n" " Change the PIN of a key file\n" "\n" msgstr "" #: src/libs/plugins/backends/aqhbci/control/main.c:118 msgid "" " unblockpin:\n" " Unblock the PIN in PIN TAN mode.\n" "\n" msgstr "" #: src/libs/plugins/backends/aqhbci/control/main.c:121 msgid "" " iniletter:\n" " Print the INI letter for a given user\n" "\n" msgstr "" #: src/libs/plugins/backends/aqhbci/control/main.c:125 msgid "" " addaccount:\n" " Manually add account \n" "\n" msgstr "" #: src/libs/plugins/backends/aqhbci/control/main.c:128 msgid "" " delaccount:\n" " Deletes account \n" "\n" msgstr "" #: src/libs/plugins/backends/aqhbci/control/main.c:132 msgid "" " sethbciversion:\n" " Set the HBCI protocol version to be used\n" "\n" msgstr "" #: src/libs/plugins/backends/aqhbci/control/main.c:136 msgid "" " setMaxTransfers:\n" " Set the maximum number of transfers/debit notes per job \n" "\n" msgstr "" #: src/libs/plugins/backends/aqhbci/control/main.c:140 msgid "" " setsepaprofile:\n" " Set the SEPA profile for transfers/debit notes\n" "\n" msgstr "" #: src/libs/plugins/backends/aqhbci/control/main.c:144 msgid "" " setTanMediumId:\n" " Set the medium id for some PIN/TAN methods (like mTAN) \n" "\n" msgstr "" #: src/libs/plugins/backends/aqhbci/control/main.c:147 msgid "" " setTanMechanism:\n" " Overwrite TAN mechanism to use \n" "\n" msgstr "" #: src/libs/plugins/backends/aqhbci/control/main.c:150 msgid "" " adduserflags:\n" " Set special flags for the given user\n" "\n" msgstr "" #: src/libs/plugins/backends/aqhbci/control/main.c:153 msgid "" " subuserflags:\n" " Unset special flags for the given user\n" "\n" msgstr "" #: src/libs/plugins/backends/aqhbci/control/main.c:156 msgid "" " addaccountflags:\n" " Set special flags for the given account\n" "\n" msgstr "" #: src/libs/plugins/backends/aqhbci/control/main.c:159 msgid "" " subaccountflags:\n" " Reset special flags for the given account\n" "\n" msgstr "" #: src/libs/plugins/backends/aqhbci/control/main.c:162 msgid "" " logfile:\n" " Make an AqBanking log file anonymous\n" "\n" msgstr "" #: src/libs/plugins/backends/aqhbci/control/main.c:165 msgid "" " versions:\n" " Print the program and library versions" msgstr "" #: src/libs/plugins/backends/aqhbci/msglayer/msgcrypt_rxh_common.c:963 #, c-format msgid "" "The public key from the bank is not available, please download it first, e." "g. with aqhbci-tool4 getkeys -u %lu" msgstr "" #: src/libs/plugins/backends/aqhbci/msglayer/msgcrypt_rxh_common.c:1734 msgid "Unable to verify signature (no key)" msgstr "Signatur kann nicht ĵberprĵft werden (kein Schlĵssel)" #: src/libs/plugins/backends/aqhbci/msglayer/msgcrypt_rxh_common.c:1745 msgid "Invalid signature!!!" msgstr "Ungĵltige Signatur!" #: src/libs/plugins/backends/aqhbci/msglayer/msgcrypt_rxh_common.c:1751 msgid "Could not verify signature" msgstr "Signatur konnte nicht ĵberprĵft werden" #: src/libs/plugins/backends/aqhbci/msglayer/dialog_hbci.c:54 msgid "Connecting to bank..." msgstr "Verbindungsaufbau zur Bank..." #: src/libs/plugins/backends/aqhbci/msglayer/dialog_hbci.c:74 #: src/libs/plugins/backends/aqfints/libaqfints/transport/transporthbci.c:157 #, c-format msgid "Could not connect (%d)" msgstr "Konnte keine Verbindung herstellen (%d)" #: src/libs/plugins/backends/aqhbci/msglayer/dialog_hbci.c:80 #: src/libs/plugins/backends/aqfints/libaqfints/transport/transporthbci.c:163 msgid "Connected." msgstr "Verbunden." #: src/libs/plugins/backends/aqhbci/msglayer/dialog_hbci.c:94 #: src/libs/plugins/backends/aqfints/libaqfints/transport/transporthbci.c:184 msgid "Disconnecting from bank..." msgstr "Verbindung zur Bank wird beendet..." #: src/libs/plugins/backends/aqhbci/msglayer/dialog_hbci.c:103 #: src/libs/plugins/backends/aqfints/libaqfints/transport/transporthbci.c:193 msgid "Disconnected." msgstr "Beendet." #: src/libs/plugins/backends/aqhbci/msglayer/dialog_https.c:206 #: src/libs/plugins/backends/aqfints/libaqfints/transport/transportssl.c:515 msgid "Could not BASE64-decode the message" msgstr "Die Nachricht konnte nicht BASE64-kodiert werden" #: src/libs/plugins/backends/aqhbci/msglayer/dialog_https.c:220 #: src/libs/plugins/backends/aqfints/libaqfints/transport/transportssl.c:529 msgid "Received message is not HBCI" msgstr "Die empfangene Nachricht ist nicht im HBCI-Format" #: src/libs/plugins/backends/aqhbci/msglayer/dialog_https.c:278 #: src/libs/plugins/backends/aqfints/libaqfints/transport/transportssl.c:545 #: src/libs/plugins/backends/aqfints/libaqfints/transport/transporthbci.c:269 msgid "Unparsable message received" msgstr "Unlesbare Nachricht empfangen" #: src/libs/plugins/backends/aqhbci/msglayer/dialog_https.c:295 #: src/libs/plugins/backends/aqfints/libaqfints/transport/transportssl.c:561 msgid "Received message was truncated" msgstr "Die empfangene Nachricht war abgeschnitten" #: src/libs/plugins/backends/aqhbci/msglayer/dialog_https.c:318 #: src/libs/plugins/backends/aqfints/libaqfints/transport/transportssl.c:127 msgid "Preparing connection" msgstr "Verbindung vorbereiten" #: src/libs/plugins/backends/aqhbci/msglayer/dialog_https.c:324 #: src/libs/plugins/backends/aqfints/libaqfints/transport/transportssl.c:133 msgid "Error preparing connection" msgstr "Fehler beim Vorbereiten der Verbindung" #: src/libs/plugins/backends/aqhbci/msglayer/message.c:1046 msgid "Bad message number, ignoring" msgstr "Fehlerhafte Nachrichten-Nummer (ignoriert)" #: src/libs/plugins/backends/aqhbci/msglayer/message.c:1110 msgid "Dialog id does not match, ignoring" msgstr "Ignoriere unerwartete Dialog-ID" #: src/libs/plugins/backends/aqhbci/msglayer/message.c:1118 msgid "Bad message reference number, ignoring" msgstr "Fehlerhafte Nachrichtenreferenz (ignoriert)" #: src/libs/plugins/backends/aqhbci/msglayer/message.c:1127 msgid "No message reference found, ignoring" msgstr "Keine Nachrichtenreferenz (ignoriert)" #. prelude #: src/libs/plugins/backends/aqebics/client/p_tools.c:1108 msgid "" "\n" "\n" "\n" "INI-Letter DFUE (" msgstr "" "\n" "\n" "\n" "Ini-Brief DFœ (" #: src/libs/plugins/backends/aqebics/client/p_tools.c:1135 #: src/libs/plugins/backends/aqebics/client/p_tools.c:1534 msgid "EBICS|User : " msgstr "Teilnehmer : " #: src/libs/plugins/backends/aqebics/client/p_tools.c:1138 #: src/libs/plugins/backends/aqebics/client/p_tools.c:1537 msgid "EBICS|Customer : " msgstr "Kunde : " #: src/libs/plugins/backends/aqebics/client/p_tools.c:1510 msgid "" "\n" "\n" "\n" "INI-Letter HIA\n" "\n" msgstr "" "\n" "\n" "\n" "Ini-Brief HIA\n" "\n" #. add auth key #: src/libs/plugins/backends/aqebics/client/p_tools.c:1544 msgid "Public key for authentication signature (" msgstr "" "–ffentlicher Schlĵssel fĵr die elektronische Authentifizierungssignatur (" #: src/libs/plugins/backends/aqebics/client/p_tools.c:1612 msgid "Public key for encryption (" msgstr "–ffentlicher Schlĵssel fĵr Verschlĵsselung (" #: src/libs/plugins/backends/aqebics/client/p_tools.c:1629 msgid "I confirm that I created the above keys.\n" msgstr "Ich best¤tige hiermit die obigen Schlĵssel.\n" #: src/libs/plugins/backends/aqebics/client/provider.c:213 msgid "No user assigned to this account." msgstr "Dieses Konto ist keinem Benutzer zugeordnet." #: src/libs/plugins/backends/aqebics/client/provider.c:214 msgid "Setup Error" msgstr "Einrichtungsfehler" #: src/libs/plugins/backends/aqebics/client/provider.c:215 msgid "" "No user assigned to this account. Please assign one in the online banking " "setup dialog for this account.\n" msgstr "" "Dieses Konto ist keinem Benutzer zugeordnet. Bitte w¤hlen Sie eine Zuordnung " "im Einrichtungsassistent fĵr dieses Konto.\n" #: src/libs/plugins/backends/aqebics/client/provider.c:555 #: src/libs/plugins/backends/aqebics/client/provider.c:628 msgid "Ok" msgstr "Ok" #: src/libs/plugins/backends/aqebics/client/provider.c:557 msgid "Download postproces done" msgstr "" #: src/libs/plugins/backends/aqebics/client/provider.c:559 msgid "Download postproces skipped" msgstr "" #: src/libs/plugins/backends/aqebics/client/provider.c:561 msgid "TX segment number underrun" msgstr "" #: src/libs/plugins/backends/aqebics/client/provider.c:563 msgid "Order params ignored" msgstr "" #: src/libs/plugins/backends/aqebics/client/provider.c:565 msgid "Authentication failed" msgstr "" #: src/libs/plugins/backends/aqebics/client/provider.c:567 msgid "Invalid request" msgstr "" #: src/libs/plugins/backends/aqebics/client/provider.c:569 msgid "Internal error" msgstr "Interner Fehler" #: src/libs/plugins/backends/aqebics/client/provider.c:571 msgid "TX recovery sync" msgstr "" #: src/libs/plugins/backends/aqebics/client/provider.c:573 msgid "Invalid user or invalid user state" msgstr "" #: src/libs/plugins/backends/aqebics/client/provider.c:575 msgid "User unknown" msgstr "Benutzer unbekannt" #: src/libs/plugins/backends/aqebics/client/provider.c:577 msgid "Invalid user state" msgstr "" #: src/libs/plugins/backends/aqebics/client/provider.c:579 msgid "Invalid order type" msgstr "" #: src/libs/plugins/backends/aqebics/client/provider.c:581 msgid "Unsupported order type" msgstr "" #: src/libs/plugins/backends/aqebics/client/provider.c:583 msgid "Distributed signature authorisation failed" msgstr "" #: src/libs/plugins/backends/aqebics/client/provider.c:585 msgid "Bank pubkey update required" msgstr "" #: src/libs/plugins/backends/aqebics/client/provider.c:587 msgid "Segment size exceeded" msgstr "" #: src/libs/plugins/backends/aqebics/client/provider.c:589 msgid "Invalid XML" msgstr "Ungĵltiges XML" #: src/libs/plugins/backends/aqebics/client/provider.c:591 msgid "TX unknown transaction id" msgstr "" #: src/libs/plugins/backends/aqebics/client/provider.c:593 msgid "TX abort" msgstr "" #: src/libs/plugins/backends/aqebics/client/provider.c:595 msgid "TX message replay" msgstr "" #: src/libs/plugins/backends/aqebics/client/provider.c:597 msgid "TX segment number exceeded" msgstr "" #: src/libs/plugins/backends/aqebics/client/provider.c:599 msgid "Invalid order params" msgstr "" #: src/libs/plugins/backends/aqebics/client/provider.c:601 msgid "Invalid request content" msgstr "" #: src/libs/plugins/backends/aqebics/client/provider.c:603 msgid "Max order data size exceeded" msgstr "" #: src/libs/plugins/backends/aqebics/client/provider.c:605 msgid "Max segments exceeded" msgstr "" #: src/libs/plugins/backends/aqebics/client/provider.c:607 msgid "Max transactions exceeded" msgstr "" #: src/libs/plugins/backends/aqebics/client/provider.c:609 msgid "Partner id mismatch" msgstr "" #: src/libs/plugins/backends/aqebics/client/provider.c:611 msgid "Incompatible order attribute" msgstr "" #: src/libs/plugins/backends/aqebics/client/provider.c:630 msgid "No online checks" msgstr "" #: src/libs/plugins/backends/aqebics/client/provider.c:632 msgid "Download signed only" msgstr "" #: src/libs/plugins/backends/aqebics/client/provider.c:634 msgid "Download unsigned only" msgstr "" #: src/libs/plugins/backends/aqebics/client/provider.c:636 msgid "Authorisation failed" msgstr "" #: src/libs/plugins/backends/aqebics/client/provider.c:638 msgid "Invalid order data format" msgstr "" #: src/libs/plugins/backends/aqebics/client/provider.c:640 msgid "No download data available" msgstr "" #: src/libs/plugins/backends/aqebics/client/provider.c:642 msgid "Unsupported request for order instance" msgstr "" #: src/libs/plugins/backends/aqebics/client/provider.c:644 msgid "Recovery not supported" msgstr "" #: src/libs/plugins/backends/aqebics/client/provider.c:646 msgid "Invalid signature file format" msgstr "" #: src/libs/plugins/backends/aqebics/client/provider.c:648 msgid "Order id unknown" msgstr "" #: src/libs/plugins/backends/aqebics/client/provider.c:650 msgid "Order id already exists" msgstr "" #: src/libs/plugins/backends/aqebics/client/provider.c:652 msgid "Processing error" msgstr "" #: src/libs/plugins/backends/aqebics/client/provider.c:654 msgid "Keymgmt unsupported version of signature" msgstr "" #: src/libs/plugins/backends/aqebics/client/provider.c:656 msgid "Keymgmt unsupported version of authentication" msgstr "" #: src/libs/plugins/backends/aqebics/client/provider.c:658 msgid "Keymgmt unsupported version of encryption" msgstr "" #: src/libs/plugins/backends/aqebics/client/provider.c:660 msgid "Keymgmt keylength error in signature" msgstr "" #: src/libs/plugins/backends/aqebics/client/provider.c:662 msgid "Keymgmt keylength error in authentication" msgstr "" #: src/libs/plugins/backends/aqebics/client/provider.c:664 msgid "Keymgmt keylength error in encryption" msgstr "" #: src/libs/plugins/backends/aqebics/client/provider.c:666 msgid "Keymgmt no X509 support" msgstr "" #: src/libs/plugins/backends/aqebics/client/provider.c:668 msgid "Signature verification failed" msgstr "" #: src/libs/plugins/backends/aqebics/client/provider.c:670 msgid "Account authorisation failed" msgstr "" #: src/libs/plugins/backends/aqebics/client/provider.c:672 msgid "Amount check failed" msgstr "" #: src/libs/plugins/backends/aqebics/client/provider.c:674 msgid "Signer unknown" msgstr "" #: src/libs/plugins/backends/aqebics/client/provider.c:676 msgid "Invalid signer state" msgstr "" #: src/libs/plugins/backends/aqebics/client/provider.c:678 msgid "Duplicate signature" msgstr "" #: src/libs/plugins/backends/aqebics/client/provider.c:700 msgid "EBICS (Technical Code):" msgstr "" #: src/libs/plugins/backends/aqebics/client/provider.c:722 msgid "EBICS (Technical Report):" msgstr "" #: src/libs/plugins/backends/aqebics/client/provider.c:738 msgid "EBICS (Bank Code):" msgstr "" #: src/libs/plugins/backends/aqebics/client/provider_sendcmd.c:307 msgid "YYYY/MM/DD-hh:mm:ss" msgstr "" #: src/libs/plugins/backends/aqebics/client/provider_sendcmd.c:310 msgid "National Mass Transfer" msgstr "" #: src/libs/plugins/backends/aqebics/client/provider_sendcmd.c:313 msgid "Transfer type: " msgstr "" #: src/libs/plugins/backends/aqebics/client/provider_sendcmd.c:325 msgid "Debit Note" msgstr "Lastschrift" #: src/libs/plugins/backends/aqebics/client/provider_sendcmd.c:334 msgid "Account: " msgstr "Konten: " #: src/libs/plugins/backends/aqebics/client/provider_sendcmd.c:408 msgid "Results:\n" msgstr "Ergebnisse:\n" #: src/libs/plugins/backends/aqebics/client/provider_sendcmd.c:425 msgid "Error while exporting to DTAUS\n" msgstr "Fehler beim Exportieren nach DTAUS\n" #: src/libs/plugins/backends/aqebics/client/provider_sendcmd.c:433 msgid "Exporting to DTAUS: ok\n" msgstr "Export nach DTAUS: ok\n" #: src/libs/plugins/backends/aqebics/requests/r_upload_h003.c:102 #: src/libs/plugins/backends/aqebics/requests/r_upload_h002.c:381 msgid "\tError signing upload document" msgstr "" #: src/libs/plugins/backends/aqebics/requests/r_upload_h003.c:110 #: src/libs/plugins/backends/aqebics/requests/r_upload_h002.c:389 msgid "\tUpload document signed" msgstr "" #: src/libs/plugins/backends/aqebics/requests/r_upload_h003.c:125 #: src/libs/plugins/backends/aqebics/requests/r_upload_h002.c:404 msgid "\tError encrypting upload document\n" msgstr "" #: src/libs/plugins/backends/aqebics/requests/r_upload_h003.c:130 #: src/libs/plugins/backends/aqebics/requests/r_upload_h002.c:409 msgid "\tUpload document encrypted\n" msgstr "" #: src/libs/plugins/backends/aqebics/requests/r_upload_h003.c:153 #: src/libs/plugins/backends/aqebics/requests/r_upload_h002.c:439 msgid "\tExchanging upload init request" msgstr "" #: src/libs/plugins/backends/aqebics/requests/r_upload_h003.c:239 #: src/libs/plugins/backends/aqebics/requests/r_upload_h002.c:531 msgid "\tExchanging upload transfer request" msgstr "" #: src/libs/plugins/backends/aqebics/requests/r_upload_h003.c:277 #: src/libs/plugins/backends/aqebics/requests/r_upload_h002.c:569 msgid "\tUpload finished" msgstr "Upload abgeschlossen" #: src/libs/plugins/backends/aqebics/dialogs/dlg_newkeyfile.c:585 msgid "EBICS Keyfile Setup Wizard" msgstr "EBICS Schlĵsseldatei Einrichtungsassistent" #: src/libs/plugins/backends/aqebics/dialogs/dlg_newkeyfile.c:604 #, fuzzy msgid "" "

Please select the bank.

AqBanking has an internal database " "which contains EBICS information about a few banks.

If there is an " "entry for your bank this dialog will use the information from the database.Please select the bank.\n" "AqBanking has an internal database which contains EBICS information\n" "about a few banks.\n" "If there is an entry for your bank this dialog will use the\n" "information from the database." msgstr "" "

Bitte w¤hlen Sie die Bank aus.

AqBanking verfĵgt ĵber eine " "interne Datenbank welche auch HBCI-/FinTS-Informationen fĵr viele Banken " "enth¤lt.

Falls auch fĵr Ihre Bank Informationen verfĵgbar sind, werden " "diese verwendet.

Bitte w¤hlen Sie die Bank aus.\n" "AqBanking verfĵgt ĵber eine interne Datenbank welche auch\n" "HBCI-/FinTS-Informationen fĵr viele Banken enth¤lt.\n" "Falls auch fĵr Ihre Bank Informationen verfĵgbar sind, werden diese " "verwendet. " #: src/libs/plugins/backends/aqebics/dialogs/dlg_newkeyfile.c:624 msgid "" "

Please enter the necessary information below. You can probably find " "this information in the letter you received from your bank in response to " "the application for an EBICS account.

Please enter the necessary " "information below. You can probably find\n" "this information in the letter you received from your bank in response\n" "to the application for an EBICS account." msgstr "" #: src/libs/plugins/backends/aqebics/dialogs/dlg_newkeyfile.c:640 #, fuzzy msgid "" "

We are now ready to create the user and exchange keys with the " "server.

Click the next button to proceed or abort to " "abort.

We are now ready to create the user and exchange keys with " "the server.\n" "Click the \"next\" button to proceed or \"abort\" to abort." msgstr "" "

Es liegen alle Daten vor, um den Benutzer zu erstellen und die\n" "Schlĵssel zum Server zu senden.

\n" "Klicken Sie Weiter, um diesen Schritt nun auszufĵhren oder " "Abbrechen, um abzubrechen.

\n" "Es liegen alle Daten vor, um den Benutzer zu erstellen und die\n" "Schlĵssel zum Server zu senden.\n" "Klicken Sie , um diesen Schritt nun auszufĵhren oder , um " "abzubrechen." #: src/libs/plugins/backends/aqebics/dialogs/dlg_newkeyfile.c:653 #, fuzzy msgid "" "

The user has been successfully created.

You must now " "print the INI and HIA letter (click the button below) and send " "it to the bank.

The activation of your account by the bank can take a " "few days.

The user has been successfully created.\n" "You must now \"print\" the INI and HIA letter (click the button below)\n" "and \"send\" it to the bank.\n" "The activation of your account by the bank can take a few days." msgstr "" "

Der Benutzer wurde erfolgreich erstellt.\n" "

\n" "Bitte drucken Sie nun den Ini-Brief (durck Klicken des " "entsprechenden\n" "Knopfes unten) und senden den ausgedruckten und unterschriebenen\n" "Ini-Brief an die Bank.\n" "

\n" "Die Aktivierung des Zugangs durch die Bank kann dann noch einige Tage " "dauern.\n" "

\n" "Der Benutzer wurde erfolgreich erstellt.\n" "\n" "Bitte drucken Sie nun den Ini-Brief (durck Klicken des entsprechenden\n" "Knopfes unten) und senden den ausgedruckten und unterschriebenen\n" "Ini-Brief an die Bank.\n" "\n" "Die Aktivierung des Zugangs durch die Bank kann dann noch einige Tage dauern." #: src/libs/plugins/backends/aqebics/dialogs/dlg_newkeyfile.c:958 #, fuzzy msgid "Could not create EBICS user." msgstr "Der HBCI-Benutzer konnte nicht erstellt werden (interner Fehler)" #: src/libs/plugins/backends/aqebics/dialogs/dlg_newkeyfile.c:1046 #, fuzzy, c-format msgid "Could not add EBICS user, maybe there already is a user of that id (%d)" msgstr "" "HBCI-Benutzer konnte nicht hinzugefĵgt werden, eventuell besteht bereits ein " "Benutzer mit der gleichen Kennung (%d)" #: src/libs/plugins/backends/aqebics/dialogs/dlg_newkeyfile.c:1064 #, fuzzy msgid "The keys will now be created and sent to the bank." msgstr "" "Die Bankschlĵssel werden nun abgerufen, eigene Schlĵssel erzeugt und an die " "Bank gesendet." #: src/libs/plugins/backends/aqebics/dialogs/dlg_newkeyfile.c:1499 #: src/libs/plugins/backends/aqebics/dialogs/dlg_edituser.c:735 msgid "INI Letter for EBICS" msgstr "Ini-Brief fĵr EBICS" #: src/libs/plugins/backends/aqebics/dialogs/dlg_newkeyfile.c:1554 #: src/libs/plugins/backends/aqebics/dialogs/dlg_edituser.c:790 msgid "HIA Letter" msgstr "HIA-Brief" #: src/libs/plugins/backends/aqebics/dialogs/dlg_newkeyfile.c:1556 #: src/libs/plugins/backends/aqebics/dialogs/dlg_edituser.c:792 msgid "HIA Letter for EBICS" msgstr "HIA-Brief fĵr EBICS" #: src/libs/plugins/backends/aqebics/dialogs/dlg_edituser.c:162 msgid "EBICSUserStatus|new" msgstr "neu" #: src/libs/plugins/backends/aqebics/dialogs/dlg_edituser.c:163 msgid "EBICSUserStatus|init1" msgstr "init1" #: src/libs/plugins/backends/aqebics/dialogs/dlg_edituser.c:164 msgid "EBICSUserStatus|init2" msgstr "init2" #: src/libs/plugins/backends/aqebics/dialogs/dlg_edituser.c:165 msgid "EBICSUserStatus|enabled" msgstr "aktiviert" #: src/libs/plugins/backends/aqebics/dialogs/dlg_edituser.c:166 msgid "EBICSUserStatus|disabled" msgstr "deaktiviert" #: src/libs/plugins/backends/aqebics/dialogs/dlg_edituser.c:631 #: src/libs/plugins/backends/aqebics/dialogs/dlg_edituser.c:670 #: src/libs/plugins/backends/aqebics/control/getcert.c:98 #: src/libs/plugins/backends/aqebics/control/sendhkd.c:101 #: src/libs/plugins/backends/aqebics/control/upload.c:136 #: src/libs/plugins/backends/aqebics/control/sendkeys.c:129 #: src/libs/plugins/backends/aqebics/control/getaccounts.c:98 #: src/libs/plugins/backends/aqebics/control/download.c:175 #: src/libs/plugins/backends/aqebics/control/sendsignkey.c:113 #: src/libs/plugins/backends/aqebics/control/getkeys.c:98 #: src/libs/plugins/backends/aqebics/control/sendhpd.c:100 msgid "Executing Request" msgstr "Auftr¤ge werden ausgefĵhrt" #: src/libs/plugins/backends/aqebics/dialogs/dlg_edituser.c:632 #: src/libs/plugins/backends/aqebics/dialogs/dlg_edituser.c:671 #: src/libs/plugins/backends/aqebics/control/getcert.c:99 #: src/libs/plugins/backends/aqebics/control/sendhkd.c:102 #: src/libs/plugins/backends/aqebics/control/upload.c:137 #: src/libs/plugins/backends/aqebics/control/sendkeys.c:130 #: src/libs/plugins/backends/aqebics/control/download.c:176 #: src/libs/plugins/backends/aqebics/control/sendsignkey.c:114 #: src/libs/plugins/backends/aqebics/control/getkeys.c:99 #: src/libs/plugins/backends/aqebics/control/sendhpd.c:101 msgid "Now the request is send to the credit institute." msgstr "Der Auftrag wird nun an das Kreditinstitut gesendet." #: src/libs/plugins/backends/aqebics/dialogs/dlg_user_special.c:389 msgid "EBICS Special Settings" msgstr "EBICS Erweiterte Einstellungen" #: src/libs/plugins/backends/aqebics/control/createkeys.c:126 msgid "Creating keys" msgstr "Schlĵssel erzeugen" #: src/libs/plugins/backends/aqebics/control/createkeys.c:127 msgid "Now the keys are created." msgstr "Die Schlĵssel werden erstellt." #: src/libs/plugins/backends/aqebics/control/main.c:54 msgid "" " adduser:\n" " Adds a user (-> setup EBICS for a bank)\n" "\n" msgstr "" #: src/libs/plugins/backends/aqebics/control/main.c:64 msgid "" " resetkeys:\n" " Destroy keys (use with care!!)\n" "\n" msgstr "" #: src/libs/plugins/backends/aqebics/control/setebicsversion.c:115 msgid "" "Invalid protocol version.\n" "Possible versions are H002 and H003.\n" msgstr "" #: src/libs/plugins/backends/aqebics/control/adduser.c:380 msgid "" "Invalid protocol version.\n" "Possible versions are H002, H003 and H004.\n" msgstr "" #: src/libs/plugins/backends/aqebics/control/getaccounts.c:99 msgid "Now the request is sent to the credit institute." msgstr "Der Auftrag wird nun an das Kreditinstitut gesendet." #: src/libs/plugins/backends/aqebics/control/download.c:192 msgid "No download data" msgstr "" #: src/libs/plugins/backends/aqebics/control/createtempkey.c:114 msgid "Creating key" msgstr "Schlĵssel erstellen" #: src/libs/plugins/backends/aqebics/control/createtempkey.c:115 msgid "Now the temporary sign key is created." msgstr "" #: src/libs/plugins/backends/aqfints/banking/control/control.c:39 msgid "" " logfile:\n" " Analyze log files\n" "\n" msgstr "" #: src/libs/plugins/backends/aqpaypal/dlg_edituser.c:399 msgid "Edit Paypal User" msgstr "Paypal-Benutzer bearbeiten" #: src/libs/plugins/backends/aqpaypal/dlg_editsecret.c:205 msgid "PayPal Secret Settings" msgstr "" #: src/libs/plugins/backends/aqpaypal/dlg_editsecret.c:213 #: src/libs/plugins/backends/aqpaypal/dlg_newuser.c:478 msgid "" "

Enter the API password and signature as it is found on the Paypal " "page described in the previous steps.

The API " "password and API signature are extremely sensitive information which you " "must under no circumstances reveal to anybody!

That being " "said, these credentials are also quite hard to remember, so AqBanking stores " "them in a file which is very well encrypted.

When the user is created " "in the next step you will be asked for the password to be set for that " "credential file.

Enter the API password and signature as it is " "found on the\n" "Paypal page described in the previous steps.\n" "The API password and API signature are extremely sensitive\n" "information which you must under no circumstances reveal to\n" "anybody!\n" "That being said, these credentials are also quite hard to\n" "remember, so AqBanking stores them in a file which is very well\n" "encrypted.\n" "When the user is created in the next step you will be asked for\n" "the password to be set for that credential file." msgstr "" "

Geben Sie das API-Passwort und Signatur von der PayPal-Seite wie in " "den vorherigen Schritten beschrieben ein.

Das " "API-Passwort und die API-Signatur sind extrem vertrauliche Informationen, " "die Sie auf keinen Fall anderen Personen preisgeben dĵrfen!

Diese Credentials lassen sich nur schwer merken, daher speichert sie " "AqBanking in einer Datei mit starker Verschlĵsselung.

Wenn der " "Benutzer im n¤chsten Schritt angelegt wird, werden Sie nach einem Passwort " "fĵr diese Credentials-Datei gefragt.

Geben Sie das API-Passwort " "und Signatur von der PayPal-Seite wie in den vorherigen Schritten " "beschrieben ein. Das API-Passwort und die API-Signatur sind extrem " "vertrauliche Informationen, die Sie \n" "auf keinen Fall anderen Personen preisgeben dĵrfen!\n" "Diese Credentials lassen sich nur schwer merken, daher speichert sie " "AqBanking \n" "in einer Datei mit starker Verschlĵsselung.\n" "Wenn der Benutzer im n¤chsten Schritt angelegt wird, werden Sie nach einem " "Passwort fĵr diese Credentials-\n" "Datei gefragt.." #: src/libs/plugins/backends/aqpaypal/dlg_newuser.c:421 msgid "Paypal Setup Wizard" msgstr "Paypal Einrichtungsassistent" #: src/libs/plugins/backends/aqpaypal/dlg_newuser.c:432 msgid "" "

This dialog assists you in setting up a Paypal User.

Please " "note that you have to apply for API access with Paypal. The following " "procedure helps you getting there:

Login into your Paypal account via " "web browser, enter the My Profile page, click API access " "under Account information.

Choose Option 2.

This dialog assists you in setting up a Paypal User.\n" "Please note that you have to apply for API access with Paypal.\n" "The following procedure helps you getting there:\n" "Login into your Paypal account via web browser, enter the \"My Profile\"\n" "page, click \"API access\" under \"Account information\".\n" "Choose OPTION 2." msgstr "" "

Dieser Dialog unterstĵtzt Sie bei der Einrichtung eines Paypal-" "Benutzers.

Bitte beachten Sie, dass Sie sich fĵr einen API-Zugang bei " "PayPal registrieren mĵssen. Die folgende Prozedur hilft Ihnen dabei:

Loggen Sie sich in Ihr PayPal-Konto mit einem Webbrowser ein, gehen Sie " "zur My Profile-Seite, klicken Sie API access unter Account " "information an.

W¤hlen Sie Option 2.

Dieser " "Dialog unterstĵtzt Sie bei der Einrichtung eines PayPal-Benutzers.\n" "Bitte beachten Sie, dass Sie sich fĵr einen API-Zugang bei PayPal " "registrieren mĵssen.\n" "Die folgende Prozedur hilft Ihnen dabei:\n" "Loggen Sie sich in Ihre PayPal-Konto mit einem Webbrowser ein, gehen Sie zur " "\"My Profile\"-\n" "Seite, klicken Sie \"API access\" unter \"Account information\".\n" "W¤hlen Sie OPTION 2." #: src/libs/plugins/backends/aqpaypal/dlg_newuser.c:454 msgid "" "

You can find the information needed here after logging into your " "Paypal account via web browser. The information can then be found under " "My Profile, Account Information, API Access.

You can find the information needed here after logging into your\n" "Paypal account via web browser. The information can then be found\n" "under <\"My Profile\", \"Account Information\", \"API Access\"." msgstr "" "

Sie kĥnnen die hier benĥtigten Informationen finden, wenn Sie sich " "mit einem Webbrowser in Ihren PayPal-Account einloggen. Die Information " "finden Sie unter My Profile, Account Information, API " "Access.

Sie kĥnnen die hier benĥtigten Informationen finden, " "wenn Sie sich mit einem \n" "Webbrowser in Ihren PayPal-Account einloggen. Die Information finden Sie " "unter \n" "<\"My Profile\", \"Account Information\", \"API Access\"." #: src/libs/plugins/backends/aqpaypal/dlg_newuser.c:509 msgid "" "

We are now ready to create the user.

Click the next " "button to proceed or abort to abort.

If you proceed you will be " "asked to enter a new password. This is the password for the credentials file " "described in previous steps.

Please be carefull to enter a " "sufficiently secure password

We are now ready to create the user.\n" "Click the \"next\" button to proceed or \"abort\" to abort.\n" "If you proceed you will be asked to enter a new password. This is the " "password\n" "for the credentials file described in previous steps.\n" "Please be carefull to enter a sufficiently secure password." msgstr "" "

Sie sind nun bereit, den Benutzer anzulegen.

Klicken Sie auf " "Weiter, um fortzufahren, oder auf Abbrechen fĵr Abbruch.

Wenn Sie fortfahren, werden Sie nach einem neuen Passwort gefragt. Das " "ist das Passwort fĵr die Credentials-Datei wie im vorherigen Schritt " "beschrieben.

Geben Sie ein ausreichend sicheres Passwort ein.

Sie sind nun bereit, den Benutzer anzulegen.\n" "Klicken Sie auf \"Weiter\", um fortzufahren, oder auf \"Abbrechen\" fĵr " "Abbruch.\n" "Wenn Sie fortfahren, werden Sie nach einem neuen Passwort gefragt. Das ist " "das Passwort fĵr die Credentials-Datei wie im vorherigen Schritt " "beschrieben.\n" "Geben Sie ein ausreichend sicheres Passwort ein." #: src/libs/plugins/backends/aqpaypal/dlg_newuser.c:755 msgid "Setting Up Paypal User" msgstr "Paypal-Benutzer einrichten" #: src/libs/plugins/backends/aqpaypal/dlg_newuser.c:756 msgid "The user will be created." msgstr "Der Benutzer wird erstellt." #: src/libs/plugins/backends/aqpaypal/dlg_newuser.c:800 msgid "Creating API credentials file" msgstr "" #: src/libs/plugins/backends/aqpaypal/control/main.c:37 msgid "" " listusers:\n" " show Paypal users \n" "\n" msgstr "" #: src/libs/plugins/backends/aqpaypal/control/main.c:41 msgid "" " listaccounts:\n" " show Paypal accounts \n" "\n" msgstr "" #: src/libs/plugins/backends/aqpaypal/control/main.c:45 msgid "" " adduser:\n" " add a Paypal user and a corresponding account \n" "\n" msgstr "" #: src/libs/plugins/backends/aqpaypal/control/main.c:49 msgid "" " setsecrets:\n" " set credentials for Paypal API \n" "\n" msgstr "" #: src/libs/plugins/backends/aqpaypal/provider_credentials.c:158 #: src/libs/plugins/backends/aqpaypal/provider_credentials.c:251 #, fuzzy, c-format msgid "" "Please enter the password for \n" "Paypal user %s\n" "Please enter the password for Paypal user %s
" msgstr "" "Bitte geben Sie das Passwort fĵr Benutzer %s ein.Bitte geben Sie das " "Passwort fĵr Benutzer %s ein.
" #. type: Attribute 'text' of: #: src/libs/aqbanking/dialogs/dlg_importer.dlg:29 msgid "File" msgstr "Datei" #. type: Attribute 'text' of: #: src/libs/aqbanking/dialogs/dlg_importer.dlg:31 msgid "Select" msgstr "W¤hlen" #. type: Attribute 'text' of: #: src/libs/aqbanking/dialogs/dlg_importer.dlg:47 msgid "Edit" msgstr "„ndern" #. type: Attribute 'text' of: #: src/libs/aqbanking/dialogs/dlg_importer.dlg:48 msgid "New" msgstr "Neu" #. type: Attribute 'text' of: #: src/libs/aqbanking/dialogs/dlg_importer.dlg:65 msgid "Help" msgstr "Hilfe" #. type: Attribute 'text' of: #: src/libs/aqbanking/dialogs/dlg_importer.dlg:67 msgid "Previous" msgstr "Zurĵck" #. type: Attribute 'text' of: #: src/libs/aqbanking/dialogs/dlg_selectbankinfo.dlg:23 msgid "BIC" msgstr "BIC" #. type: Attribute 'text' of: #: src/libs/aqbanking/dialogs/dlg_selectbankinfo.dlg:29 msgid "Location" msgstr "Ort" #. type: Attribute 'text' of: #: src/libs/aqbanking/dialogs/dlg_selectbankinfo.dlg:35 msgid "Matching Banks" msgstr "Passende Banken" #. type: Attribute 'text' of: #: src/libs/aqbanking/dialogs/dlg_setup.dlg:22 msgid "Users" msgstr "Benutzer" #. type: Attribute 'text' of: #: src/libs/aqbanking/dialogs/dlg_setup.dlg:27 msgid "Create User" msgstr "Benutzer anlegen" #. type: Attribute 'text' of: #: src/libs/aqbanking/dialogs/dlg_setup.dlg:35 msgid "Accounts" msgstr "Konten" #. type: Attribute 'text' of: #: src/libs/aqbanking/dialogs/dlg_setup.dlg:40 msgid "Create Account" msgstr "Konto anlegen" #. type: Attribute 'text' of: #: src/libs/aqbanking/dialogs/dlg_setup.dlg:54 msgid "Close" msgstr "SchlieŸen" #. type: Attribute 'text' of: #: src/libs/aqbanking/dialogs/dlg_selectbackend.dlg:20 msgid "Backend" msgstr "Modul" #. type: Attribute 'text' of: #: src/libs/aqbanking/dialogs/dlg_editaccount.dlg:18 msgid "Account Info" msgstr "Kontoinformation" #. type: Attribute 'text' of: #: src/libs/aqbanking/dialogs/dlg_editaccount.dlg:21 msgid "Account Number" msgstr "Kontonummer" #. type: Attribute 'text' of: #: src/libs/aqbanking/dialogs/dlg_editaccount.dlg:24 msgid "Account Name" msgstr "Kontoname" #. type: Attribute 'text' of: #: src/libs/aqbanking/dialogs/dlg_editaccount.dlg:27 msgid "IBAN" msgstr "IBAN" #. type: Attribute 'text' of: #: src/libs/aqbanking/dialogs/dlg_editaccount.dlg:30 msgid "Owner Name" msgstr "Name des Kontoinhabers" #. type: Attribute 'text' of: #: src/libs/aqbanking/dialogs/dlg_editaccount.dlg:33 msgid "Currency" msgstr "W¤hrung" #. type: Attribute 'text' of: #: src/libs/aqbanking/dialogs/dlg_editaccount.dlg:36 msgid "Account Type" msgstr "Kontoart" #. type: Attribute 'text' of: #: src/libs/aqbanking/dialogs/dlg_editaccount.dlg:43 msgid "Bank Info" msgstr "Bankinformationen" #. type: Attribute 'text' of: #: src/libs/aqbanking/dialogs/dlg_editaccount.dlg:47 msgid "Country" msgstr "Staat" #. type: Attribute 'text' of: #: src/libs/aqbanking/dialogs/dlg_editaccount.dlg:59 msgid "SWIFT BIC" msgstr "SWIFT BIC" #. type: Attribute 'text' of: #: src/libs/aqbanking/dialogs/dlg_editaccount.dlg:62 msgid "Selected User" msgstr "Ausgew¤hlte Benutzer " #. type: Attribute 'text' of: #: src/libs/aqbanking/dialogs/dlg_edituser.dlg:25 msgid "User Name" msgstr "Benutzername" #. type: Attribute 'text' of: #: src/libs/aqbanking/dialogs/dlg_edituser.dlg:34 msgid "User Id" msgstr "Benutzerkennung" #. type: Attribute 'text' of: #: src/libs/aqbanking/dialogs/dlg_edituser.dlg:37 msgid "Customer Id" msgstr "Kundennummer" #. type: Attribute 'text' of: #: src/libs/plugins/imexporters/csv/csv_editprofile.dlg:20 msgid "Generic" msgstr "Allgemein " #. type: Attribute 'text' of: #: src/libs/plugins/imexporters/csv/csv_editprofile.dlg:24 msgid "General" msgstr "Allgemein" #. type: Attribute 'text' of: #: src/libs/plugins/imexporters/csv/csv_editprofile.dlg:28 msgid "Name" msgstr "Name" #. type: Attribute 'text' of: #: src/libs/plugins/imexporters/csv/csv_editprofile.dlg:31 msgid "Version" msgstr "Version" #. type: Attribute 'text' of: #: src/libs/plugins/imexporters/csv/csv_editprofile.dlg:34 msgid "Short Description" msgstr "kurze Beschreibung" #. type: Attribute 'text' of: #: src/libs/plugins/imexporters/csv/csv_editprofile.dlg:37 msgid "Long Description" msgstr "lange Beschreibung" #. type: Attribute 'text' of: #: src/libs/plugins/imexporters/csv/csv_editprofile.dlg:41 msgid "CSV_EditProfile|Applicable for Imports" msgstr "fĵr Import geeignet" #. type: Attribute 'text' of: #: src/libs/plugins/imexporters/csv/csv_editprofile.dlg:42 msgid "CSV_EditProfile|Applicable for Exports" msgstr "fĵr Export geeignet" #. type: Attribute 'text' of: #: src/libs/plugins/imexporters/csv/csv_editprofile.dlg:49 #: src/libs/plugins/imexporters/csv/csv_editprofile.dlg:52 msgid "Structure" msgstr "Struktur" #. type: Attribute 'text' of: #: src/libs/plugins/imexporters/csv/csv_editprofile.dlg:55 msgid "Ignore Lines" msgstr "Zeilen ignorieren" #. type: Attribute 'text' of: #: src/libs/plugins/imexporters/csv/csv_editprofile.dlg:58 msgid "Column Delimiter" msgstr "Spaltentrenner" #. type: Attribute 'text' of: #: src/libs/plugins/imexporters/csv/csv_editprofile.dlg:61 msgid "CSV_EditProfile|Subject" msgstr "Dateiinhalt" #. type: Attribute 'text' of: #: src/libs/plugins/imexporters/csv/csv_editprofile.dlg:65 msgid "First Line Contains Headers" msgstr "Erste Zeile ist Kopfzeile" #. type: Attribute 'text' of: #: src/libs/plugins/imexporters/csv/csv_editprofile.dlg:66 msgid "Fields have Quotation Marks" msgstr "Felder in Anfĵhrungszeichen" #. type: Attribute 'text' of: #: src/libs/plugins/imexporters/csv/csv_editprofile.dlg:71 msgid "Field Formats" msgstr "Feldformate" #. type: Attribute 'text' of: #: src/libs/plugins/imexporters/csv/csv_editprofile.dlg:74 msgid "Date Format" msgstr "Datumsformat" #. type: Attribute 'text' of: #: src/libs/plugins/imexporters/csv/csv_editprofile.dlg:77 msgid "Amount Format" msgstr "Betragsformat" #. type: Attribute 'text' of: #: src/libs/plugins/imexporters/csv/csv_editprofile.dlg:86 #: src/libs/plugins/imexporters/csv/csv_editprofile.dlg:88 msgid "Columns" msgstr "Spalten" #. type: Attribute 'text' of: #: src/libs/plugins/imexporters/csv/csv_editprofile.dlg:93 msgid "Column 1" msgstr "Spalte 1" #. type: Attribute 'text' of: #: src/libs/plugins/imexporters/csv/csv_editprofile.dlg:97 msgid "Column 2" msgstr "Spalte 2" #. type: Attribute 'text' of: #: src/libs/plugins/imexporters/csv/csv_editprofile.dlg:101 msgid "Column 3" msgstr "Spalte 3" #. type: Attribute 'text' of: #: src/libs/plugins/imexporters/csv/csv_editprofile.dlg:105 msgid "Column 4" msgstr "Spalte 4" #. type: Attribute 'text' of: #: src/libs/plugins/imexporters/csv/csv_editprofile.dlg:109 msgid "Column 5" msgstr "Spalte 5" #. type: Attribute 'text' of: #: src/libs/plugins/imexporters/csv/csv_editprofile.dlg:113 msgid "Column 6" msgstr "Spalte 6" #. type: Attribute 'text' of: #: src/libs/plugins/imexporters/csv/csv_editprofile.dlg:117 msgid "Column 7" msgstr "Spalte 7" #. type: Attribute 'text' of: #: src/libs/plugins/imexporters/csv/csv_editprofile.dlg:121 msgid "Column 8" msgstr "Spalte 8" #. type: Attribute 'text' of: #: src/libs/plugins/imexporters/csv/csv_editprofile.dlg:125 msgid "Column 9" msgstr "Spalte 9" #. type: Attribute 'text' of: #: src/libs/plugins/imexporters/csv/csv_editprofile.dlg:129 msgid "Column 10" msgstr "Spalte 10" #. type: Attribute 'text' of: #: src/libs/plugins/imexporters/csv/csv_editprofile.dlg:133 msgid "Column 11" msgstr "Spalte 11" #. type: Attribute 'text' of: #: src/libs/plugins/imexporters/csv/csv_editprofile.dlg:137 msgid "Column 12" msgstr "Spalte 12" #. type: Attribute 'text' of: #: src/libs/plugins/imexporters/csv/csv_editprofile.dlg:141 msgid "Column 13" msgstr "Spalte 13" #. type: Attribute 'text' of: #: src/libs/plugins/imexporters/csv/csv_editprofile.dlg:145 msgid "Column 14" msgstr "Spalte 14" #. type: Attribute 'text' of: #: src/libs/plugins/imexporters/csv/csv_editprofile.dlg:149 msgid "Column 15" msgstr "Spalte 15" #. type: Attribute 'text' of: #: src/libs/plugins/imexporters/csv/csv_editprofile.dlg:153 msgid "Column 16" msgstr "Spalte 16" #. type: Attribute 'text' of: #: src/libs/plugins/imexporters/csv/csv_editprofile.dlg:157 msgid "Column 17" msgstr "Spalte 17" #. type: Attribute 'text' of: #: src/libs/plugins/imexporters/csv/csv_editprofile.dlg:161 msgid "Column 18" msgstr "Spalte 18" #. type: Attribute 'text' of: #: src/libs/plugins/imexporters/csv/csv_editprofile.dlg:165 msgid "Column 19" msgstr "Spalte 19" #. type: Attribute 'text' of: #: src/libs/plugins/imexporters/csv/csv_editprofile.dlg:169 msgid "Column 20" msgstr "Spalte 20" #. type: Attribute 'text' of: #: src/libs/plugins/imexporters/csv/csv_editprofile.dlg:173 msgid "Column 21" msgstr "Spalte 21" #. type: Attribute 'text' of: #: src/libs/plugins/imexporters/csv/csv_editprofile.dlg:177 msgid "Column 22" msgstr "Spalte 22" #. type: Attribute 'text' of: #: src/libs/plugins/imexporters/csv/csv_editprofile.dlg:181 msgid "Column 23" msgstr "Spalte 23" #. type: Attribute 'text' of: #: src/libs/plugins/imexporters/csv/csv_editprofile.dlg:185 msgid "Column 24" msgstr "Spalte 24" #. type: Attribute 'text' of: #: src/libs/plugins/imexporters/csv/csv_editprofile.dlg:189 msgid "Column 25" msgstr "Spalte 25" #. type: Attribute 'text' of: #: src/libs/plugins/imexporters/csv/csv_editprofile.dlg:193 msgid "Column 26" msgstr "Spalte 26" #. type: Attribute 'text' of: #: src/libs/plugins/imexporters/csv/csv_editprofile.dlg:197 msgid "Column 27" msgstr "Spalte 27" #. type: Attribute 'text' of: #: src/libs/plugins/imexporters/csv/csv_editprofile.dlg:201 msgid "Column 28" msgstr "Spalte 28" #. type: Attribute 'text' of: #: src/libs/plugins/imexporters/csv/csv_editprofile.dlg:205 msgid "Column 29" msgstr "Spalte 29" #. type: Attribute 'text' of: #: src/libs/plugins/imexporters/csv/csv_editprofile.dlg:209 msgid "Column 30" msgstr "Spalte 30" #. type: Attribute 'text' of: #: src/libs/plugins/imexporters/csv/csv_editprofile.dlg:222 msgid "First Data Line" msgstr "Erste Datenzeile" #. type: Attribute 'text' of: #: src/libs/plugins/backends/aqhbci/dialogs/dlg_edituserddv.dlg:18 msgid "General Settings" msgstr "Allgemeine Einstellungen" #. type: Attribute 'text' of: #: src/libs/plugins/backends/aqhbci/dialogs/dlg_edituserddv.dlg:33 msgid "Server URL" msgstr "Server-URL" #. type: Attribute 'text' of: #: src/libs/plugins/backends/aqhbci/dialogs/dlg_edituserddv.dlg:49 msgid "HBCI Settings" msgstr "HBCI-Einstellungen" #. type: Attribute 'text' of: #: src/libs/plugins/backends/aqhbci/dialogs/dlg_edituserddv.dlg:54 msgid "HBCI Version" msgstr "HBCI-Version" #. type: Attribute 'text' of: #: src/libs/plugins/backends/aqhbci/dialogs/dlg_edituserddv.dlg:63 msgid "Special Actions" msgstr "Spezielle Aktionen" #. type: Attribute 'text' of: #: src/libs/plugins/backends/aqhbci/dialogs/dlg_edituserddv.dlg:65 msgid "Get Accounts" msgstr "Kontenliste abrufen" #. type: Attribute 'text' of: #: src/libs/plugins/backends/aqhbci/dialogs/dlg_edituserpintan.dlg:57 msgid "HTTP Version" msgstr "HTTP-Version" #. type: Attribute 'text' of: #: src/libs/plugins/backends/aqhbci/dialogs/dlg_edituserpintan.dlg:60 msgid "Selected TAN Method" msgstr "Ausgew¤hlte TAN-Methode" #. type: Attribute 'text' of: #: src/libs/plugins/backends/aqhbci/dialogs/dlg_edituserpintan.dlg:63 msgid "Override TAN Input Mechanism" msgstr "TAN Eingabemechanismus fest vorw¤hlen" #. type: Attribute 'text' of: #: src/libs/plugins/backends/aqhbci/dialogs/dlg_edituserpintan.dlg:66 msgid "TAN Medium ID" msgstr "TAN-Medienkennung" #. type: Attribute 'text' of: #: src/libs/plugins/backends/aqhbci/dialogs/dlg_edituserpintan.dlg:72 msgid "Disable Base64 Encoding" msgstr "Nicht BASE64 kodieren" #. type: Attribute 'text' of: #: src/libs/plugins/backends/aqhbci/dialogs/dlg_edituserpintan.dlg:76 msgid "Omit SMS Account" msgstr "SMS-Konto ĵberspringen" #. type: Attribute 'text' of: #: src/libs/plugins/backends/aqhbci/dialogs/dlg_edituserpintan.dlg:86 msgid "Get Certificate" msgstr "Abruf des Zertifikats " #. type: Attribute 'text' of: #: src/libs/plugins/backends/aqhbci/dialogs/dlg_edituserpintan.dlg:87 msgid "Get Bank Info" msgstr "Bankinfos abrufen" #. type: Attribute 'text' of: #: src/libs/plugins/backends/aqhbci/dialogs/dlg_edituserpintan.dlg:88 msgid "Get System Id" msgstr "Systemkennung abrufen" #. type: Attribute 'text' of: #: src/libs/plugins/backends/aqhbci/dialogs/dlg_edituserpintan.dlg:89 msgid "Get iTAN Modes" msgstr "iTAN-Modi abrufen" #. type: Attribute 'text' of: #: src/libs/plugins/backends/aqhbci/dialogs/dlg_edituserrdh.dlg:57 msgid "RDH Version" msgstr "RDH-Version" #. type: Attribute 'text' of: #: src/libs/plugins/backends/aqhbci/dialogs/dlg_edituserrdh.dlg:65 msgid "Bank does not sign messages" msgstr "Bank signiert ihre Nachrichten nicht" #. type: Attribute 'text' of: #: src/libs/plugins/backends/aqhbci/dialogs/dlg_edituserrdh.dlg:66 msgid "Bank uses own signature counter" msgstr "Bank verwendet Signaturz¤hler" #. type: Attribute 'text' of: #: src/libs/plugins/backends/aqhbci/dialogs/dlg_edituserrdh.dlg:76 msgid "Ini Letter" msgstr "Ini-Brief" #. type: Attribute 'text' of: #: src/libs/plugins/backends/aqhbci/dialogs/dlg_ddvcard.dlg:31 msgid "Context From File" msgstr "Kontext von Datei" #. type: Attribute 'text' of: #: src/libs/plugins/backends/aqhbci/dialogs/dlg_ddvcard.dlg:72 msgid "Special Settings" msgstr "Erweiterte Einstellungen" #. type: Attribute 'text' of: #: src/libs/plugins/backends/aqhbci/dialogs/dlg_newkeyfile.dlg:93 msgid "Print Ini Letter" msgstr "Ini-Brief ausdrucken" #. type: Attribute 'text' of: #: src/libs/plugins/backends/aqhbci/dialogs/dlg_newuser.dlg:24 msgid "Import Keyfile" msgstr "Schlĵsseldatei importieren" #. type: Attribute 'text' of: #: src/libs/plugins/backends/aqhbci/dialogs/dlg_newuser.dlg:31 msgid "Init Chipcard" msgstr "Chipkarte initialisieren" #. type: Attribute 'text' of: #: src/libs/plugins/backends/aqhbci/dialogs/dlg_newuser.dlg:32 msgid "Use Chipcard" msgstr "Chipkarte verwenden" #. type: Attribute 'text' of: #: src/libs/plugins/backends/aqhbci/dialogs/dlg_newuser.dlg:39 msgid "Use PIN/TAN" msgstr "PIN/TAN verwenden" #. type: Attribute 'text' of: #: src/libs/plugins/backends/aqhbci/dialogs/dlg_choose_usertype.dlg:21 msgid "Setup a PIN/TAN account" msgstr "PIN/TAN einrichten" #. type: Attribute 'text' of: #: src/libs/plugins/backends/aqhbci/dialogs/dlg_choose_usertype.dlg:22 msgid "Import an already used chipcard" msgstr "Chipkarte verwenden" #. type: Attribute 'text' of: #: src/libs/plugins/backends/aqhbci/dialogs/dlg_choose_usertype.dlg:23 msgid "Create a new Keyfile" msgstr "Neue Schlĵsseldatei erstellen" #. type: Attribute 'text' of: #: src/libs/plugins/backends/aqhbci/dialogs/dlg_choose_usertype.dlg:24 msgid "Import an existing Keyfile" msgstr "Existierende Schlĵsseldatei importieren" #. type: Attribute 'text' of: #: src/libs/plugins/backends/aqhbci/dialogs/dlg_editaccount.dlg:42 msgid "Prefer Single Transfer" msgstr "Einzelĵberweisung bevorzugen" #. type: Attribute 'text' of: #: src/libs/plugins/backends/aqhbci/dialogs/dlg_editaccount.dlg:43 msgid "Prefer Single Debit Note" msgstr "Einzellastschrift bevorzugen" #. type: Attribute 'text' of: #: src/libs/plugins/backends/aqhbci/dialogs/dlg_editaccount.dlg:45 msgid "Prefer Single SEPA Transfer" msgstr "SEPA-Einzelĵberweisung bevorzugen" #. type: Attribute 'text' of: #: src/libs/plugins/backends/aqhbci/dialogs/dlg_editaccount.dlg:46 msgid "Prefer Single SEPA Debit Note" msgstr "SEPA-Einzellastschrift bevorzugen" #. type: Attribute 'text' of: #: src/libs/plugins/backends/aqhbci/dialogs/dlg_editaccount.dlg:48 msgid "Prefer Statement Download as CAMT" msgstr "Umsatzabruf mit CAMT bevorzugen" #. type: Attribute 'text' of: #: src/libs/plugins/backends/aqhbci/dialogs/dlg_editaccount.dlg:81 msgid "Get SEPA Info" msgstr "SEPA-Kontoinformationen abrufen" #. type: Attribute 'text' of: #: src/libs/plugins/backends/aqebics/dialogs/dlg_edituser.dlg:33 msgid "EBICS|User Id" msgstr "Benutzerkennung" #. type: Attribute 'text' of: #: src/libs/plugins/backends/aqebics/dialogs/dlg_edituser.dlg:36 msgid "EBICS|Partner Id" msgstr "Partnerkennung" #. type: Attribute 'text' of: #: src/libs/plugins/backends/aqebics/dialogs/dlg_edituser.dlg:46 msgid "EBICS Settings" msgstr "EBICS-Einstellungen" #. type: Attribute 'text' of: #: src/libs/plugins/backends/aqebics/dialogs/dlg_edituser.dlg:51 msgid "Server Address" msgstr "Serveradresse" #. type: Attribute 'text' of: #: src/libs/plugins/backends/aqebics/dialogs/dlg_edituser.dlg:54 msgid "EBICS|Bank Server Name" msgstr "Bankserver-Name" #. type: Attribute 'text' of: #: src/libs/plugins/backends/aqebics/dialogs/dlg_edituser.dlg:63 msgid "EBICS Version" msgstr "EBICS-Version" #. type: Attribute 'text' of: #: src/libs/plugins/backends/aqebics/dialogs/dlg_edituser.dlg:66 msgid "Signature Version" msgstr "Signaturversion" #. type: Attribute 'text' of: #: src/libs/plugins/backends/aqebics/dialogs/dlg_edituser.dlg:69 msgid "Encryption Version" msgstr "Verschlĵsselungsversion" #. type: Attribute 'text' of: #: src/libs/plugins/backends/aqebics/dialogs/dlg_edituser.dlg:72 msgid "Authentication Version" msgstr "Authentifizierungsversion" #. type: Attribute 'text' of: #: src/libs/plugins/backends/aqebics/dialogs/dlg_edituser.dlg:77 msgid "Force SSLv3" msgstr "SSLv3 erzwingen" #. type: Attribute 'text' of: #: src/libs/plugins/backends/aqebics/dialogs/dlg_edituser.dlg:78 msgid "Use IZL for debit notes" msgstr "Bei Bankeinzug IZL benutzen" #. type: Attribute 'text' of: #: src/libs/plugins/backends/aqebics/dialogs/dlg_edituser.dlg:79 msgid "Don't sign jobs" msgstr "Auftr¤ge nicht signieren" #. type: Attribute 'text' of: #: src/libs/plugins/backends/aqebics/dialogs/dlg_edituser.dlg:87 msgid "Get Bank Keys" msgstr "Bankschlĵssel abrufen" #. type: Attribute 'text' of: #: src/libs/plugins/backends/aqebics/dialogs/dlg_edituser.dlg:90 msgid "Hia Letter" msgstr "HIA-Brief" #. type: Attribute 'text' of: #: src/libs/plugins/backends/aqebics/dialogs/dlg_newkeyfile.dlg:97 msgid "Print Hia Letter" msgstr "HIA-Brief ausdrucken" #. type: Attribute 'text' of: #: src/libs/plugins/backends/aqebics/dialogs/dlg_user_special.dlg:35 msgid "Sign Key Size" msgstr "Signaturschlĵssel-GrĥŸe" #. type: Attribute 'text' of: #: src/libs/plugins/backends/aqebics/dialogs/dlg_user_special.dlg:38 msgid "Crypt/Auth Key Size" msgstr "Krypto/Auth-Schlĵssel-L¤nge" #. type: Attribute 'text' of: #: src/libs/plugins/backends/aqpaypal/dlg_newuser.dlg:34 msgid "Paypal Email" msgstr "Paypal E-Mail" #. type: Attribute 'text' of: #: src/libs/plugins/backends/aqpaypal/dlg_newuser.dlg:50 msgid "API User ID" msgstr "API Benutzer-ID" #. type: Attribute 'text' of: #: src/libs/plugins/backends/aqpaypal/dlg_newuser.dlg:53 msgid "API Password" msgstr "API Passwort" #. type: Attribute 'text' of: #: src/libs/plugins/backends/aqpaypal/dlg_newuser.dlg:56 msgid "API Signature" msgstr "API Signatur" #. type: Attribute 'text' of: #: src/libs/plugins/backends/aqpaypal/dlg_edituser.dlg:36 #, fuzzy msgid "Secret Settings" msgstr "Benutzer-Einstellungen" #. type: Attribute 'text' of: #: src/libs/plugins/backends/aqpaypal/dlg_editsecret.dlg:18 #, fuzzy msgid "Edit Secrets" msgstr "Benutzer bearbeiten" #. type: Content of: #: src/libs/plugins/parsers/swift/swift.xml:4 msgid "Importer and Exporter for SWIFT" msgstr "" #. type: Content of: #: src/libs/plugins/parsers/swift/swift.xml:6 msgid "This plugin imports SWIFT (MT940) data." msgstr "" #. type: Content of: #: src/libs/plugins/imexporters/csv/csv.xml:4 msgid "Im-/exporter for CSV" msgstr "Im- und Exporter fĵr CSV" #. type: Content of: #: src/libs/plugins/imexporters/csv/csv.xml:6 msgid "This plugin imports/exports CSV data." msgstr "Dieses Modul im-/exportiert CSV-Dateien." #. type: Content of: #: src/libs/plugins/imexporters/eri2/eri2.xml:4 msgid "ERI" msgstr "ERI" #. type: Content of: #: src/libs/plugins/imexporters/eri2/eri2.xml:6 msgid "This plugin imports ERI data." msgstr "Dieses Plugin importiert ERI Daten." #. type: Content of: #: src/libs/plugins/imexporters/ofx/ofx.xml:4 msgid "OFX" msgstr "OFX" #. type: Content of: #: src/libs/plugins/imexporters/ofx/ofx.xml:6 msgid "This plugin imports OFX data." msgstr "Dieses Plugin importiert OFX-Daten." #. type: Content of: #: src/libs/plugins/imexporters/openhbci1/openhbci1.xml:4 msgid "Old AqMoney1/OpenHBCI1 data" msgstr "" #. type: Content of: #: src/libs/plugins/imexporters/openhbci1/openhbci1.xml:6 msgid "This plugin imports/exports old data from AqMoney1 and OpenHBCI1." msgstr "" #. type: Content of: #: src/libs/plugins/imexporters/swift/swift.xml:4 msgid "Im-/exporter for SWIFT" msgstr "Im- und Exporter fĵr SWIFT" #. type: Content of: #: src/libs/plugins/imexporters/swift/swift.xml:6 #, fuzzy msgid "This plugin imports SWIFT MT940, MT942 and MT535 data." msgstr "Dieses Plugin importiert ERI Daten." #. type: Content of: #: src/libs/plugins/imexporters/xmldb/xmldb.xml:4 msgid "XML DB" msgstr "" #. type: Content of: #: src/libs/plugins/imexporters/xmldb/xmldb.xml:6 msgid "This plugin imports XML data." msgstr "Dieses Plugin importiert XML-Daten." #. type: Content of: #: src/libs/plugins/imexporters/yellownet/yellownet.xml:4 msgid "YellowNet XML Data" msgstr "" #. type: Content of: #: src/libs/plugins/imexporters/yellownet/yellownet.xml:6 msgid "This plugin imports YellowNet XML files." msgstr "" #. type: Content of: #: src/libs/plugins/imexporters/sepa/sepa.xml:4 msgid "SEPA" msgstr "" #. type: Content of: #: src/libs/plugins/imexporters/sepa/sepa.xml:6 msgid "This plugin exports SEPA data." msgstr "" #. type: Content of: #: src/libs/plugins/imexporters/ctxfile/ctxfile.xml:4 msgid "This plugin directly reads and writes context files." msgstr "" #. type: Content of: #: src/libs/plugins/imexporters/ctxfile/ctxfile.xml:6 msgid "This plugin imports/exports CTX files." msgstr "" #. type: Content of: #: src/libs/plugins/imexporters/q43/q43.xml:4 msgid "This plugin reads and writes Spanish Q43 files." msgstr "" #. type: Content of: #: src/libs/plugins/imexporters/q43/q43.xml:6 msgid "This plugin imports Q43 files." msgstr "" #. type: Content of: #: src/libs/plugins/imexporters/camt/camt.xml:4 msgid "This plugin reads and writes CAMT files." msgstr "Dieses Modul im-/exportiert CAMT-Dateien." #. type: Content of: #: src/libs/plugins/imexporters/camt/camt.xml:6 msgid "This plugin imports CAMT files." msgstr "Dieses Plugin importiert CAMT-Daten." #. type: Content of: #: src/libs/plugins/imexporters/xml/xml.xml:4 msgid "XML" msgstr "" #. type: Content of: #: src/libs/plugins/bankinfo/de/de.xml:4 msgid "Bank info checker for Germany" msgstr "" #. type: Content of: #: src/libs/plugins/bankinfo/de/de.xml:6 msgid "This plugin handles German banks and accounts." msgstr "" #. type: Content of: #: src/libs/plugins/backends/aqfints/aqfints.xml:4 #, fuzzy msgid "FinTS backend" msgstr "Offline-Backend" #. type: Content of: #: src/libs/plugins/backends/aqfints/aqfints.xml:6 msgid "This backend allows using FinTS." msgstr "" #. type: Content of: #: src/libs/plugins/backends/aqhbci/aqhbci.xml:4 msgid "HBCI backend using AqHBCI" msgstr "" #. type: Content of: #: src/libs/plugins/backends/aqhbci/aqhbci.xml:6 msgid "This backend provides support for HBCI using AqHBCI." msgstr "" #. type: Content of: #: src/libs/plugins/backends/aqofxconnect/aqofxconnect.xml:4 msgid "OFX-DirectConnect backend" msgstr "OFX DirectConnect Backend" #. type: Content of: #: src/libs/plugins/backends/aqofxconnect/aqofxconnect.xml:6 msgid "This backend provides support for OFX-DirectConnect." msgstr "" #. type: Content of: #: src/libs/plugins/backends/aqnone/aqnone.xml:4 msgid "Offline backend" msgstr "Offline-Backend" #. type: Content of: #: src/libs/plugins/backends/aqnone/aqnone.xml:6 msgid "This backend allows using offline accounts." msgstr "" #. type: Content of: #: src/libs/plugins/backends/aqpaypal/aqpaypal.xml:4 msgid "Paypal" msgstr "" #. type: Content of: #: src/libs/plugins/backends/aqpaypal/aqpaypal.xml:6 msgid "This backend provides support for Paypal." msgstr "" aqbanking-6.6.1/po/Makefile.am0000664000175000017500000000005014043610744013052 00000000000000EXTRA_DIST=de.po typefiles: typedefs: aqbanking-6.6.1/install-sh0000755000175000017500000003577614215102164012422 00000000000000#!/bin/sh # install - install a program, script, or datafile scriptversion=2020-11-14.01; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # 'make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. tab=' ' nl=' ' IFS=" $tab$nl" # Set DOITPROG to "echo" to test this script. doit=${DOITPROG-} doit_exec=${doit:-exec} # Put in absolute file names if you don't have them in your path; # or use environment vars. chgrpprog=${CHGRPPROG-chgrp} chmodprog=${CHMODPROG-chmod} chownprog=${CHOWNPROG-chown} cmpprog=${CMPPROG-cmp} cpprog=${CPPROG-cp} mkdirprog=${MKDIRPROG-mkdir} mvprog=${MVPROG-mv} rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} posix_mkdir= # Desired mode of installed file. mode=0755 # Create dirs (including intermediate dirs) using mode 755. # This is like GNU 'install' as of coreutils 8.32 (2020). mkdir_umask=22 backupsuffix= chgrpcmd= chmodcmd=$chmodprog chowncmd= mvcmd=$mvprog rmcmd="$rmprog -f" stripcmd= src= dst= dir_arg= dst_arg= copy_on_change=false is_target_a_directory=possibly usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: --help display this help and exit. --version display version info and exit. -c (ignored) -C install only if different (preserve data modification time) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -p pass -p to $cpprog. -s $stripprog installed files. -S SUFFIX attempt to back up existing files, with suffix SUFFIX. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG By default, rm is invoked with -f; when overridden with RMPROG, it's up to you to specify -f if you want it. If -S is not specified, no backups are attempted. Email bug reports to bug-automake@gnu.org. Automake home page: https://www.gnu.org/software/automake/ " while test $# -ne 0; do case $1 in -c) ;; -C) copy_on_change=true;; -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 case $mode in *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -p) cpprog="$cpprog -p";; -s) stripcmd=$stripprog;; -S) backupsuffix="$2" shift;; -t) is_target_a_directory=always dst_arg=$2 # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac shift;; -T) is_target_a_directory=never;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done # We allow the use of options -d and -T together, by making -d # take the precedence; this is for compatibility with GNU install. if test -n "$dir_arg"; then if test -n "$dst_arg"; then echo "$0: target directory not allowed when installing a directory." >&2 exit 1 fi fi if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dst_arg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dst_arg" shift # fnord fi shift # arg dst_arg=$arg # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac done fi if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call 'install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi if test -z "$dir_arg"; then if test $# -gt 1 || test "$is_target_a_directory" = always; then if test ! -d "$dst_arg"; then echo "$0: $dst_arg: Is not a directory." >&2 exit 1 fi fi fi if test -z "$dir_arg"; then do_exit='(exit $ret); exit $ret' trap "ret=129; $do_exit" 1 trap "ret=130; $do_exit" 2 trap "ret=141; $do_exit" 13 trap "ret=143; $do_exit" 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. case $mode in # Optimize common cases. *644) cp_umask=133;; *755) cp_umask=22;; *[0-7]) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac fi for src do # Protect names problematic for 'test' and other utilities. case $src in -* | [=\(\)!]) src=./$src;; esac if test -n "$dir_arg"; then dst=$src dstdir=$dst test -d "$dstdir" dstdir_status=$? # Don't chown directories that already exist. if test $dstdir_status = 0; then chowncmd="" fi else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst_arg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dst_arg # If destination is a directory, append the input filename. if test -d "$dst"; then if test "$is_target_a_directory" = never; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dstbase=`basename "$src"` case $dst in */) dst=$dst$dstbase;; *) dst=$dst/$dstbase;; esac dstdir_status=0 else dstdir=`dirname "$dst"` test -d "$dstdir" dstdir_status=$? fi fi case $dstdir in */) dstdirslash=$dstdir;; *) dstdirslash=$dstdir/;; esac obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false # The $RANDOM variable is not portable (e.g., dash). Use it # here however when possible just to lower collision chance. tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap ' ret=$? rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null exit $ret ' 0 # Because "mkdir -p" follows existing symlinks and we likely work # directly in world-writeable /tmp, make sure that the '$tmpdir' # directory is successfully created first before we actually test # 'mkdir -p'. if (umask $mkdir_umask && $mkdirprog $mkdir_mode "$tmpdir" && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. test_tmpdir="$tmpdir/a" ls_ld_tmpdir=`ls -ld "$test_tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$test_tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null fi trap '' 0;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix='/';; [-=\(\)!]*) prefix='./';; *) prefix='';; esac oIFS=$IFS IFS=/ set -f set fnord $dstdir shift set +f IFS=$oIFS prefixes= for d do test X"$d" = X && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=${dstdirslash}_inst.$$_ rmtmp=${dstdirslash}_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && { test -z "$stripcmd" || { # Create $dsttmp read-write so that cp doesn't create it read-only, # which would cause strip to fail. if test -z "$doit"; then : >"$dsttmp" # No need to fork-exec 'touch'. else $doit touch "$dsttmp" fi } } && $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # If $backupsuffix is set, and the file being installed # already exists, attempt a backup. Don't worry if it fails, # e.g., if mv doesn't support -f. if test -n "$backupsuffix" && test -f "$dst"; then $doit $mvcmd -f "$dst" "$dst$backupsuffix" 2>/dev/null fi # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. { # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { test ! -f "$dst" || $doit $rmcmd "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $rmcmd "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: aqbanking-6.6.1/Makefile.in0000644000175000017500000014170215037736024012461 00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @IF_MAKE_I18N_FILES_TRUE@am__append_1 = $(I18NCATALOGS) subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/distri.m4 $(top_srcdir)/m4/gwenhywfar.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/os.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \ $(am__configure_deps) $(dist_aclocal_DATA) $(am__DIST_COMMON) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_HEADER = config.h CONFIG_CLEAN_FILES = Doxyfile aqbanking-config.in aqbanking.pc \ aqbanking.spec aqbanking.iss aqbanking-config.cmake \ aqbanking-config-version.cmake CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(cmakeconfigdir)" \ "$(DESTDIR)$(aclocaldir)" "$(DESTDIR)$(idatadir)" \ "$(DESTDIR)$(pkgconfigdir)" SCRIPTS = $(bin_SCRIPTS) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac DATA = $(cmakeconfig_DATA) $(dist_aclocal_DATA) $(idata_DATA) \ $(pkgconfig_DATA) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ cscope distdir distdir-am dist dist-all distcheck am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) \ config.h.in # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` am__DIST_COMMON = $(srcdir)/Doxyfile.in $(srcdir)/Makefile.in \ $(srcdir)/aqbanking-config-version.cmake.in \ $(srcdir)/aqbanking-config.cmake.in \ $(srcdir)/aqbanking-config.in.in $(srcdir)/aqbanking.iss.in \ $(srcdir)/aqbanking.pc.in $(srcdir)/aqbanking.spec.in \ $(srcdir)/config.h.in AUTHORS COPYING ChangeLog INSTALL NEWS \ README TODO compile config.guess config.sub install-sh \ ltmain.sh missing DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ if test -d "$(distdir)"; then \ find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -rf "$(distdir)" \ || { sleep 5 && rm -rf "$(distdir)"; }; \ else :; fi am__post_remove_distdir = $(am__remove_distdir) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best DIST_TARGETS = dist-gzip # Exists only to be overridden by the user if desired. AM_DISTCHECK_DVI_TARGET = dvi distuninstallcheck_listfiles = find . -type f -print am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ ADD_ACLOCAL_FLAGS = @ADD_ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AQBANKING_CLI_VERSION_STRING = @AQBANKING_CLI_VERSION_STRING@ AQBANKING_FINTS_VERSION_STRING = @AQBANKING_FINTS_VERSION_STRING@ AQBANKING_SO_AGE = @AQBANKING_SO_AGE@ AQBANKING_SO_CURRENT = @AQBANKING_SO_CURRENT@ AQBANKING_SO_EFFECTIVE = @AQBANKING_SO_EFFECTIVE@ AQBANKING_SO_REVISION = @AQBANKING_SO_REVISION@ AQBANKING_VERSION_BUILD = @AQBANKING_VERSION_BUILD@ AQBANKING_VERSION_FULL_STRING = @AQBANKING_VERSION_FULL_STRING@ AQBANKING_VERSION_MAJOR = @AQBANKING_VERSION_MAJOR@ AQBANKING_VERSION_MINOR = @AQBANKING_VERSION_MINOR@ AQBANKING_VERSION_PATCHLEVEL = @AQBANKING_VERSION_PATCHLEVEL@ AQBANKING_VERSION_RELEASE_STRING = @AQBANKING_VERSION_RELEASE_STRING@ AQBANKING_VERSION_STRING = @AQBANKING_VERSION_STRING@ AQBANKING_VERSION_TAG = @AQBANKING_VERSION_TAG@ AQEBICS_CFLAGS = @AQEBICS_CFLAGS@ AQEBICS_LIBS = @AQEBICS_LIBS@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATETIME = @DATETIME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_EXCLUDE_PATTERNS = @DOXYGEN_EXCLUDE_PATTERNS@ DOXYGEN_FILE_PATTERNS = @DOXYGEN_FILE_PATTERNS@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENGUI_GTK2_CFLAGS = @GWENGUI_GTK2_CFLAGS@ GWENGUI_GTK2_LIBS = @GWENGUI_GTK2_LIBS@ GWENHYWFAR_MINIMUM_VERSION = @GWENHYWFAR_MINIMUM_VERSION@ HAVE_GWENGUI_GTK2 = @HAVE_GWENGUI_GTK2@ HAVE_I18N = @HAVE_I18N@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIBXSLT_CFLAGS = @LIBXSLT_CFLAGS@ LIBXSLT_LIBS = @LIBXSLT_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_SUPPORTS_QT = @MSGFMT_SUPPORTS_QT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ TUTORIALS = @TUTORIALS@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XMLMERGE = @XMLMERGE@ XMLSEC_CFLAGS = @XMLSEC_CFLAGS@ XMLSEC_LIBS = @XMLSEC_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ aqbanking_backends = @aqbanking_backends@ aqbanking_cfg_searchdir = @aqbanking_cfg_searchdir@ aqbanking_data_searchdir = @aqbanking_data_searchdir@ aqbanking_headerdir = @aqbanking_headerdir@ aqbanking_headerdir_am = @aqbanking_headerdir_am@ aqbanking_includes = @aqbanking_includes@ aqbanking_internal_libs = @aqbanking_internal_libs@ aqbanking_ldflags = @aqbanking_ldflags@ aqbanking_libs = @aqbanking_libs@ aqbanking_locale_searchdir = @aqbanking_locale_searchdir@ aqbanking_modules = @aqbanking_modules@ aqbanking_pkgdatadir = @aqbanking_pkgdatadir@ aqbanking_plugin_searchdir = @aqbanking_plugin_searchdir@ aqbanking_plugindir = @aqbanking_plugindir@ aqbanking_plugins_backends_dirs = @aqbanking_plugins_backends_dirs@ aqbanking_plugins_backends_libs = @aqbanking_plugins_backends_libs@ aqbanking_plugins_bankinfo_dirs = @aqbanking_plugins_bankinfo_dirs@ aqbanking_plugins_bankinfo_libs = @aqbanking_plugins_bankinfo_libs@ aqbanking_plugins_imexporters_dirs = @aqbanking_plugins_imexporters_dirs@ aqbanking_plugins_imexporters_libs = @aqbanking_plugins_imexporters_libs@ aqbanking_plugins_parsers_dirs = @aqbanking_plugins_parsers_dirs@ aqbanking_symlinkdir = @aqbanking_symlinkdir@ aqbanking_sys_is_windows = @aqbanking_sys_is_windows@ aqbankingpp_modules = @aqbankingpp_modules@ aqebics_datadir = @aqebics_datadir@ aqebics_includes = @aqebics_includes@ aqebics_internal_libs = @aqebics_internal_libs@ aqebics_ldflags = @aqebics_ldflags@ aqebics_libs = @aqebics_libs@ aqfints_datadir = @aqfints_datadir@ aqhbci_datadir = @aqhbci_datadir@ aqhbci_includes = @aqhbci_includes@ aqhbci_internal_libs = @aqhbci_internal_libs@ aqhbci_ldflags = @aqhbci_ldflags@ aqhbci_libs = @aqhbci_libs@ aqofxconnect_includes = @aqofxconnect_includes@ aqofxconnect_internal_libs = @aqofxconnect_internal_libs@ aqofxconnect_libs = @aqofxconnect_libs@ aqpaypal_includes = @aqpaypal_includes@ aqpaypal_internal_libs = @aqpaypal_internal_libs@ aqpaypal_libs = @aqpaypal_libs@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gmp_libs = @gmp_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_dir = @gwenhywfar_dir@ gwenhywfar_has_crypt = @gwenhywfar_has_crypt@ gwenhywfar_headers = @gwenhywfar_headers@ gwenhywfar_includes = @gwenhywfar_includes@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_plugins = @gwenhywfar_plugins@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ typemaker2_exe = @typemaker2_exe@ visibility_cflags = @visibility_cflags@ with_aqebics = @with_aqebics@ with_aqhbci = @with_aqhbci@ SUBDIRS = admin doc m4 src po @TUTORIALS@ DIST_SUBDIRS = admin doc m4 src po tutorials EXTRA_DIST = AUTHORS COPYING ChangeLog INSTALL NEWS README \ aqbanking.spec.in aqbanking.spec \ aqbanking.iss.in aqbanking.iss \ Doxyfile.in \ i18nsources \ Makefile.cvs idatadir = ${datadir}/doc/aqbanking idata_DATA = AUTHORS COPYING ChangeLog README bin_SCRIPTS = aqbanking-config aclocaldir = $(datadir)/aclocal dist_aclocal_DATA = aqbanking.m4 ACLOCAL_AMFLAGS = $(ADD_ACLOCAL_FLAGS) -I m4 CLEANFILES = aqbanking-config aqbanking-config.in $(am__append_1) \ $(BUILT_SOURCES) pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = aqbanking.pc cmakeconfigdir = $(libdir)/cmake/aqbanking-$(AQBANKING_VERSION_MAJOR).$(AQBANKING_VERSION_MINOR) cmakeconfig_DATA = aqbanking-config.cmake aqbanking-config-version.cmake # Rule for using the Inno Setup compiler. The path to iscc.exe is set # manually here for now. ISCC = "C:\Programme\Inno Setup 5\iscc.exe" wintmpdir = win32-tmp # We directly read that file list. For old make programs, you would # set this to an empty variable, because they are only needed by the # developers and release technicians. @IF_MAKE_I18N_FILES_TRUE@I18NFILES = $(shell cat $(srcdir)/i18nsources) @IF_MAKE_I18N_FILES_TRUE@DLGFILES = $(shell cat $(srcdir)/dlgsources) @IF_MAKE_I18N_FILES_TRUE@PDFILES = $(shell cat $(srcdir)/pdsources) # Could also be solved this way: Read the I18NFILES variable from file #include $(srcdir)/i18nsources # (Needs the following build rule:) #sources: # rm -f $(srcdir)/i18nsources # $(MAKE) -C $(top_srcdir)/src sources # mv $(srcdir)/i18nsources $(srcdir)/i18nsources.tmp # echo "I18NFILES = \\" > $(srcdir)/i18nsources # $(SED) 's!\(^.*$$\)!$$(top_srcdir)/\1 \\!' \ # $(srcdir)/i18nsources.tmp >> $(srcdir)/i18nsources # echo '$$(top_srcdir)/config.h' >> $(srcdir)/i18nsources # rm -f $(srcdir)/i18nsources.tmp # $(MAKE) Makefile # The list of available languages (makes file name transformations much easier) @IF_MAKE_I18N_FILES_TRUE@ALL_LINGUAS = $(basename $(notdir $(shell ls $(srcdir)/po/*.po))) # For old make programs, the locales would directly be written here: #ALL_LINGUAS = de # List of po files. Only necessary in the dependency of the catalogs # rule. For old make programs, you would simpy set this to an empty # variable. @IF_MAKE_I18N_FILES_TRUE@I18NLINGUAS = $(foreach lang,$(ALL_LINGUAS),$(srcdir)/po/$(lang).po) # List of mo files. Only necessary for cleanup. For old make programs, # you would simply set this to an empty variable. @IF_MAKE_I18N_FILES_TRUE@I18NCATALOGS = $(foreach \ @IF_MAKE_I18N_FILES_TRUE@ lang,$(ALL_LINGUAS),$(top_builddir)/po/$(lang).mo) \ @IF_MAKE_I18N_FILES_TRUE@ $(foreach \ @IF_MAKE_I18N_FILES_TRUE@ lang,$(ALL_LINGUAS),$(top_builddir)/po/$(lang).qm) @IF_MAKE_I18N_FILES_TRUE@ilocaledir = $(datadir)/locale BUILT_SOURCES = $(iheader_HEADERS) all: $(BUILT_SOURCES) config.h $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: am--refresh: Makefile @: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \ $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): config.h: stamp-h1 @test -f $@ || rm -f stamp-h1 @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1 stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status config.h $(srcdir)/config.h.in: $(am__configure_deps) ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) rm -f stamp-h1 touch $@ distclean-hdr: -rm -f config.h stamp-h1 Doxyfile: $(top_builddir)/config.status $(srcdir)/Doxyfile.in cd $(top_builddir) && $(SHELL) ./config.status $@ aqbanking-config.in: $(top_builddir)/config.status $(srcdir)/aqbanking-config.in.in cd $(top_builddir) && $(SHELL) ./config.status $@ aqbanking.pc: $(top_builddir)/config.status $(srcdir)/aqbanking.pc.in cd $(top_builddir) && $(SHELL) ./config.status $@ aqbanking.spec: $(top_builddir)/config.status $(srcdir)/aqbanking.spec.in cd $(top_builddir) && $(SHELL) ./config.status $@ aqbanking.iss: $(top_builddir)/config.status $(srcdir)/aqbanking.iss.in cd $(top_builddir) && $(SHELL) ./config.status $@ aqbanking-config.cmake: $(top_builddir)/config.status $(srcdir)/aqbanking-config.cmake.in cd $(top_builddir) && $(SHELL) ./config.status $@ aqbanking-config-version.cmake: $(top_builddir)/config.status $(srcdir)/aqbanking-config-version.cmake.in cd $(top_builddir) && $(SHELL) ./config.status $@ install-binSCRIPTS: $(bin_SCRIPTS) @$(NORMAL_INSTALL) @list='$(bin_SCRIPTS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n' \ -e 'h;s|.*|.|' \ -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) { files[d] = files[d] " " $$1; \ if (++n[d] == $(am__install_max)) { \ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \ else { print "f", d "/" $$4, $$1 } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binSCRIPTS: @$(NORMAL_UNINSTALL) @list='$(bin_SCRIPTS)'; test -n "$(bindir)" || exit 0; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 's,.*/,,;$(transform)'`; \ dir='$(DESTDIR)$(bindir)'; $(am__uninstall_files_from_dir) mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool config.lt install-cmakeconfigDATA: $(cmakeconfig_DATA) @$(NORMAL_INSTALL) @list='$(cmakeconfig_DATA)'; test -n "$(cmakeconfigdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(cmakeconfigdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(cmakeconfigdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(cmakeconfigdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(cmakeconfigdir)" || exit $$?; \ done uninstall-cmakeconfigDATA: @$(NORMAL_UNINSTALL) @list='$(cmakeconfig_DATA)'; test -n "$(cmakeconfigdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(cmakeconfigdir)'; $(am__uninstall_files_from_dir) install-dist_aclocalDATA: $(dist_aclocal_DATA) @$(NORMAL_INSTALL) @list='$(dist_aclocal_DATA)'; test -n "$(aclocaldir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(aclocaldir)'"; \ $(MKDIR_P) "$(DESTDIR)$(aclocaldir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(aclocaldir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(aclocaldir)" || exit $$?; \ done uninstall-dist_aclocalDATA: @$(NORMAL_UNINSTALL) @list='$(dist_aclocal_DATA)'; test -n "$(aclocaldir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(aclocaldir)'; $(am__uninstall_files_from_dir) install-idataDATA: $(idata_DATA) @$(NORMAL_INSTALL) @list='$(idata_DATA)'; test -n "$(idatadir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(idatadir)'"; \ $(MKDIR_P) "$(DESTDIR)$(idatadir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(idatadir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(idatadir)" || exit $$?; \ done uninstall-idataDATA: @$(NORMAL_UNINSTALL) @list='$(idata_DATA)'; test -n "$(idatadir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(idatadir)'; $(am__uninstall_files_from_dir) install-pkgconfigDATA: $(pkgconfig_DATA) @$(NORMAL_INSTALL) @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgconfigdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfigdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \ done uninstall-pkgconfigDATA: @$(NORMAL_UNINSTALL) @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgconfigdir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscope: cscope.files test ! -s cscope.files \ || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) clean-cscope: -rm -f cscope.files cscope.files: clean-cscope cscopelist cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -rm -f cscope.out cscope.in.out cscope.po.out cscope.files distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) $(am__remove_distdir) test -d "$(distdir)" || mkdir "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" distdir="$(distdir)" \ dist-hook -test -n "$(am__skip_mode_fix)" \ || find "$(distdir)" -type d ! -perm -755 \ -exec chmod u+rwx,go+rx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).tar.gz $(am__post_remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 $(am__post_remove_distdir) dist-lzip: distdir tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz $(am__post_remove_distdir) dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__post_remove_distdir) dist-zstd: distdir tardir=$(distdir) && $(am__tar) | zstd -c $${ZSTD_CLEVEL-$${ZSTD_OPT--19}} >$(distdir).tar.zst $(am__post_remove_distdir) dist-tarZ: distdir @echo WARNING: "Support for distribution archives compressed with" \ "legacy program 'compress' is deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__post_remove_distdir) dist-shar: distdir @echo WARNING: "Support for shar distribution archives is" \ "deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 shar $(distdir) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).shar.gz $(am__post_remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__post_remove_distdir) dist dist-all: $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:' $(am__post_remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lz*) \ lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ *.tar.xz*) \ xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ *.tar.zst*) \ zstd -dc $(distdir).tar.zst | $(am__untar) ;;\ esac chmod -R a-w $(distdir) chmod u+w $(distdir) mkdir $(distdir)/_build $(distdir)/_build/sub $(distdir)/_inst chmod a-w $(distdir) test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && am__cwd=`pwd` \ && $(am__cd) $(distdir)/_build/sub \ && ../../configure \ $(AM_DISTCHECK_CONFIGURE_FLAGS) \ $(DISTCHECK_CONFIGURE_FLAGS) \ --srcdir=../.. --prefix="$$dc_install_base" \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) $(AM_DISTCHECK_DVI_TARGET) \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ && cd "$$am__cwd" \ || exit 1 $(am__post_remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: @test -n '$(distuninstallcheck_dir)' || { \ echo 'ERROR: trying to run $@ with an empty' \ '$$(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ $(am__cd) '$(distuninstallcheck_dir)' || { \ echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-recursive all-am: Makefile $(SCRIPTS) $(DATA) config.h installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(cmakeconfigdir)" "$(DESTDIR)$(aclocaldir)" "$(DESTDIR)$(idatadir)" "$(DESTDIR)$(pkgconfigdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-recursive install-exec: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) @IF_MAKE_I18N_FILES_FALSE@install-data-local: @IF_MAKE_I18N_FILES_FALSE@uninstall-local: clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -f Makefile distclean-am: clean-am distclean-generic distclean-hdr \ distclean-libtool distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-cmakeconfigDATA install-data-local \ install-dist_aclocalDATA install-idataDATA \ install-pkgconfigDATA install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-binSCRIPTS install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-binSCRIPTS uninstall-cmakeconfigDATA \ uninstall-dist_aclocalDATA uninstall-idataDATA uninstall-local \ uninstall-pkgconfigDATA .MAKE: $(am__recursive_targets) all check install install-am \ install-exec install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ am--refresh check check-am clean clean-cscope clean-generic \ clean-libtool cscope cscopelist-am ctags ctags-am dist \ dist-all dist-bzip2 dist-gzip dist-hook dist-lzip dist-shar \ dist-tarZ dist-xz dist-zip dist-zstd distcheck distclean \ distclean-generic distclean-hdr distclean-libtool \ distclean-tags distcleancheck distdir distuninstallcheck dvi \ dvi-am html html-am info info-am install install-am \ install-binSCRIPTS install-cmakeconfigDATA install-data \ install-data-am install-data-local install-dist_aclocalDATA \ install-dvi install-dvi-am install-exec install-exec-am \ install-html install-html-am install-idataDATA install-info \ install-info-am install-man install-pdf install-pdf-am \ install-pkgconfigDATA install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs installdirs-am \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am uninstall-binSCRIPTS \ uninstall-cmakeconfigDATA uninstall-dist_aclocalDATA \ uninstall-idataDATA uninstall-local uninstall-pkgconfigDATA .PRECIOUS: Makefile aqbanking-config: aqbanking-config.in echo "#! /bin/sh" >aqbanking-config && \ echo 'dir="@prefix@"' >>aqbanking-config && \ cat aqbanking-config.in >>aqbanking-config && \ chmod a+x aqbanking-config listdoc.h: $(gwenhywfar_bindir)/mklistdoc -I $(gwenhywfar_headers) -v `find $(aqbanking_symlinkdir) -name '*.h' | LC_ALL=C sort ` >listdoc.h srcdoc: Doxyfile listdoc.h if test -d apidoc; then rm -Rf apidoc; fi mkdir -p apidoc/html/aqbanking-@AQBANKING_VERSION_RELEASE_STRING@ doxygen install-srcdoc: srcdoc test -d "$(DESTDIR)@docpath@/$(PACKAGE)" || \ mkdir -p "$(DESTDIR)@docpath@/$(PACKAGE)" for f in apidoc/html/aqbanking-@AQBANKING_VERSION_RELEASE_STRING@/*; do \ cp -dR $$f "$(DESTDIR)@docpath@/$(PACKAGE)/"; \ done cp "apidoc/$(PACKAGE).tag" "$(DESTDIR)@docpath@/" rpm: $(PACKAGE).spec dist rpmbuild="rpm" && \ if [ `rpm --version | awk '{ print $$3 }'` > /dev/null ]; then rpmbuild="rpmbuild"; fi && \ $$rpmbuild -ta $(PACKAGE)-$(VERSION).tar.gz setup: aqbanking.iss mkdir -p $(wintmpdir) for A in `find src/plugins -name *.la`; do \ grep -v relink_command $${A} > $${A}.tmp && \ mv $${A}.tmp $${A}; \ done $(MAKE) DESTDIR="`pwd`/$(wintmpdir)" \ aqbanking_pkgdatadir="/share/$(PACKAGE)" \ gwenhywfar_plugins="/gwen" \ WIN_PATH_WINDOWS_MINGW="/windows" \ install \ && for A in `find $(wintmpdir) -name '*.exe'`; do \ strip $${A}; \ done \ && $(ISCC) aqbanking.iss \ && rm -rf $(wintmpdir) # Current build rule: @IF_MAKE_I18N_FILES_TRUE@sources: @IF_MAKE_I18N_FILES_TRUE@ rm -f $(srcdir)/i18nsources $(srcdir)/dlgsources $(srcdir)/pdsources @IF_MAKE_I18N_FILES_TRUE@ $(MAKE) -C $(top_builddir)/src sources @IF_MAKE_I18N_FILES_TRUE@$(srcdir)/i18nsources $(srcdir)/dlgsources $(srcdir)/pdsources: @IF_MAKE_I18N_FILES_TRUE@ $(MAKE) sources @IF_MAKE_I18N_FILES_TRUE@po/$(PACKAGE).pot: i18nsources dlgsources pdsources $(I18NFILES) @IF_MAKE_I18N_FILES_TRUE@ rm -f po/tmp* @IF_MAKE_I18N_FILES_TRUE@ if test -n "$(I18NFILES)"; then \ @IF_MAKE_I18N_FILES_TRUE@ $(XGETTEXT) -C -c -ki18n -ktr2i18n -kI18N -kI18S\ @IF_MAKE_I18N_FILES_TRUE@ -kI18N_NOOP -ktranslate -kaliasLocale \ @IF_MAKE_I18N_FILES_TRUE@ -ktr -ktrUtf8 \ @IF_MAKE_I18N_FILES_TRUE@ '--msgid-bugs-address=aqbanking-user@lists.aqbanking.de' \ @IF_MAKE_I18N_FILES_TRUE@ -o po/tmppot \ @IF_MAKE_I18N_FILES_TRUE@ $(I18NFILES) ; \ @IF_MAKE_I18N_FILES_TRUE@ fi @IF_MAKE_I18N_FILES_TRUE@ for i in $(DLGFILES); do \ @IF_MAKE_I18N_FILES_TRUE@ po4a-gettextize -f xml -m $$i -p po/tmppot1 -o attributes=text && \ @IF_MAKE_I18N_FILES_TRUE@ msghack -o po/tmppot2 --append po/tmppot po/tmppot1 && \ @IF_MAKE_I18N_FILES_TRUE@ mv po/tmppot2 po/tmppot; \ @IF_MAKE_I18N_FILES_TRUE@ done @IF_MAKE_I18N_FILES_TRUE@ for i in $(PDFILES); do \ @IF_MAKE_I18N_FILES_TRUE@ po4a-gettextize -f xml -m $$i -p po/tmppot1 -o wrap \ @IF_MAKE_I18N_FILES_TRUE@ -o translated=" " \ @IF_MAKE_I18N_FILES_TRUE@ -o untranslated=" " \ @IF_MAKE_I18N_FILES_TRUE@ && \ @IF_MAKE_I18N_FILES_TRUE@ msghack -o po/tmppot2 --append po/tmppot po/tmppot1 && \ @IF_MAKE_I18N_FILES_TRUE@ mv po/tmppot2 po/tmppot; \ @IF_MAKE_I18N_FILES_TRUE@ done @IF_MAKE_I18N_FILES_TRUE@ mv po/tmppot po/$(PACKAGE).pot @IF_MAKE_I18N_FILES_TRUE@ rm -f po/tmppot1 # This rule is not called automatically. It is necessary only for # the translators, so translators only call this manually. @IF_MAKE_I18N_FILES_TRUE@merge: po/$(PACKAGE).pot @IF_MAKE_I18N_FILES_TRUE@ @catalogs=$(I18NLINGUAS); \ @IF_MAKE_I18N_FILES_TRUE@ for cat in $$catalogs; do \ @IF_MAKE_I18N_FILES_TRUE@ echo msgmerge -o $$cat.new $$cat ./po/$(PACKAGE).pot ; \ @IF_MAKE_I18N_FILES_TRUE@ msgmerge -o $$cat.new $$cat ./po/$(PACKAGE).pot ; \ @IF_MAKE_I18N_FILES_TRUE@ if test -s $$cat.new; then \ @IF_MAKE_I18N_FILES_TRUE@ grep -v "\"POT-Creation" $$cat.new | grep -v '^#' > $$cat.new.2 ; \ @IF_MAKE_I18N_FILES_TRUE@ grep -v "\"POT-Creation" $$cat | grep -v '^#' >> $$cat.new.1; \ @IF_MAKE_I18N_FILES_TRUE@ if diff $$cat.new.1 $$cat.new.2; then \ @IF_MAKE_I18N_FILES_TRUE@ echo " $$cat unchanged; leaving existing po file untouched."; \ @IF_MAKE_I18N_FILES_TRUE@ rm $$cat.new; \ @IF_MAKE_I18N_FILES_TRUE@ else \ @IF_MAKE_I18N_FILES_TRUE@ mv $$cat.new $$cat ; \ @IF_MAKE_I18N_FILES_TRUE@ fi; \ @IF_MAKE_I18N_FILES_TRUE@ rm -f $$cat.new.1 $$cat.new.2 ;\ @IF_MAKE_I18N_FILES_TRUE@ fi ;\ @IF_MAKE_I18N_FILES_TRUE@ done @IF_MAKE_I18N_FILES_TRUE@catalogs: $(I18NLINGUAS) @IF_MAKE_I18N_FILES_TRUE@ @for i in $(ALL_LINGUAS); do \ @IF_MAKE_I18N_FILES_TRUE@ filelingua=$(srcdir)/po/$$i.po; \ @IF_MAKE_I18N_FILES_TRUE@ filecat=$(top_builddir)/po/$$i.mo; \ @IF_MAKE_I18N_FILES_TRUE@ fileqm=$(top_builddir)/po/$$i.qm; \ @IF_MAKE_I18N_FILES_TRUE@ echo "Creating translation catalogs for language \"$$i\""; \ @IF_MAKE_I18N_FILES_TRUE@ $(MSGFMT) -c -o $${filecat} $${filelingua} || touch $${filelingua}; \ @IF_MAKE_I18N_FILES_TRUE@ if test $(MSGFMT_SUPPORTS_QT) = "yes"; then \ @IF_MAKE_I18N_FILES_TRUE@ $(MSGFMT) -o $${fileqm} --qt $${filelingua} || touch $${filelingua}; \ @IF_MAKE_I18N_FILES_TRUE@ else \ @IF_MAKE_I18N_FILES_TRUE@ echo "$(MSGFMT) does not have the option --qt; ignoring qt translations"; \ @IF_MAKE_I18N_FILES_TRUE@ fi; \ @IF_MAKE_I18N_FILES_TRUE@ done @IF_MAKE_I18N_FILES_TRUE@install-mo-catalogs: catalogs @IF_MAKE_I18N_FILES_TRUE@ @for i in $(ALL_LINGUAS); do \ @IF_MAKE_I18N_FILES_TRUE@ filecat=$(top_builddir)/po/$$i.mo; \ @IF_MAKE_I18N_FILES_TRUE@ fileqm=$(top_builddir)/po/$$i.qm; \ @IF_MAKE_I18N_FILES_TRUE@ echo "Installing translation catalog for language \"$$i\""; \ @IF_MAKE_I18N_FILES_TRUE@ $(mkinstalldirs) "$(DESTDIR)$(ilocaledir)/$$i/LC_MESSAGES"; \ @IF_MAKE_I18N_FILES_TRUE@ $(INSTALL_DATA) $${filecat} $(DESTDIR)$(ilocaledir)/$$i/LC_MESSAGES/$(PACKAGE).mo; \ @IF_MAKE_I18N_FILES_TRUE@ done @IF_MAKE_I18N_FILES_TRUE@uninstall-mo-catalogs: @IF_MAKE_I18N_FILES_TRUE@ @$(NORMAL_UNINSTALL) @IF_MAKE_I18N_FILES_TRUE@ @for i in $(ALL_LINGUAS); do \ @IF_MAKE_I18N_FILES_TRUE@ echo " rm -f '$(DESTDIR)$(ilocaledir)/$$i/LC_MESSAGES/$(PACKAGE).mo'"; \ @IF_MAKE_I18N_FILES_TRUE@ rm -f "$(DESTDIR)$(ilocaledir)/$$i/LC_MESSAGES/$(PACKAGE).mo"; \ @IF_MAKE_I18N_FILES_TRUE@ done @IF_MAKE_I18N_FILES_TRUE@install-data-local: install-mo-catalogs @IF_MAKE_I18N_FILES_TRUE@uninstall-local: uninstall-mo-catalogs # Rule for only building the source rpm srpm: $(PACKAGE).spec dist rpmbuild="rpm" && \ if [ `rpm --version | awk '{ print $$3 }'` > /dev/null ]; then rpmbuild="rpmbuild"; fi && \ $$rpmbuild --nodeps -ts $(PACKAGE)-$(VERSION).tar.gz # Call this to have Qt's uic files and glade files cleaned up from # bad elements code-cleanup: -admin/fixuifiles -admin/glade-fixup #cppcheck: # $(MAKE) -C src cppcheck cppcheck: for f in `find . -name \*.c -o -name \*.cpp`; do cppcheck --force $$f; done clang-check: scan-build $(MAKE) format: find . -name '*.[c,h,cpp]' -exec $(ASTYLE) \ --style=stroustrup \ -s2 \ --min-conditional-indent=0 \ --indent-labels \ --max-continuation-indent=100 \ --pad-comma \ --pad-header \ --unpad-paren \ --align-pointer=name \ --break-closing-braces \ --break-one-line-headers \ --attach-return-type \ --convert-tabs \ --max-code-length=120 \ --break-after-logical \ --preserve-date \ --suffix=none \{\} \; ChangeLog: if test -d .git; then \ git log --pretty="format:------------------------------------------------------------------%n%ai %an%n%s%n%b" -n 100 >ChangeLog ;\ else \ touch ChangeLog; \ fi dist-hook: rm -f ChangeLog 2>/dev/null $(MAKE) ChangeLog types: for d in $(SUBDIRS); do \ $(MAKE) -C $$d typefiles; \ done typefiles: for d in $(SUBDIRS); do \ $(MAKE) -C $$d typefiles; \ done typedefs: for d in $(SUBDIRS); do \ $(MAKE) -C $$d typedefs; \ done # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: aqbanking-6.6.1/config.guess0000755000175000017500000014051214175772605012741 00000000000000#! /bin/sh # Attempt to guess a canonical system name. # Copyright 1992-2022 Free Software Foundation, Inc. # shellcheck disable=SC2006,SC2268 # see below for rationale timestamp='2022-01-09' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # # Originally written by Per Bothner; maintained since 2000 by Ben Elliston. # # You can get the latest version of this script from: # https://git.savannah.gnu.org/cgit/config.git/plain/config.guess # # Please send patches to . # The "shellcheck disable" line above the timestamp inhibits complaints # about features and limitations of the classic Bourne shell that were # superseded or lifted in POSIX. However, this script identifies a wide # variety of pre-POSIX systems that do not have POSIX shells at all, and # even some reasonably current systems (Solaris 10 as case-in-point) still # have a pre-POSIX /bin/sh. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Options: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright 1992-2022 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi # Just in case it came from the environment. GUESS= # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. tmp= # shellcheck disable=SC2172 trap 'test -z "$tmp" || rm -fr "$tmp"' 0 1 2 13 15 set_cc_for_build() { # prevent multiple calls if $tmp is already set test "$tmp" && return 0 : "${TMPDIR=/tmp}" # shellcheck disable=SC2039,SC3028 { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir "$tmp" 2>/dev/null) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir "$tmp" 2>/dev/null) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } dummy=$tmp/dummy case ${CC_FOR_BUILD-},${HOST_CC-},${CC-} in ,,) echo "int x;" > "$dummy.c" for driver in cc gcc c89 c99 ; do if ($driver -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1 ; then CC_FOR_BUILD=$driver break fi done if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac } # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if test -f /.attbin/uname ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown case $UNAME_SYSTEM in Linux|GNU|GNU/*) LIBC=unknown set_cc_for_build cat <<-EOF > "$dummy.c" #include #if defined(__UCLIBC__) LIBC=uclibc #elif defined(__dietlibc__) LIBC=dietlibc #elif defined(__GLIBC__) LIBC=gnu #else #include /* First heuristic to detect musl libc. */ #ifdef __DEFINED_va_list LIBC=musl #endif #endif EOF cc_set_libc=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g'` eval "$cc_set_libc" # Second heuristic to detect musl libc. if [ "$LIBC" = unknown ] && command -v ldd >/dev/null && ldd --version 2>&1 | grep -q ^musl; then LIBC=musl fi # If the system lacks a compiler, then just pick glibc. # We could probably try harder. if [ "$LIBC" = unknown ]; then LIBC=gnu fi ;; esac # Note: order is significant - the case branches are not exclusive. case $UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \ /sbin/sysctl -n hw.machine_arch 2>/dev/null || \ /usr/sbin/sysctl -n hw.machine_arch 2>/dev/null || \ echo unknown)` case $UNAME_MACHINE_ARCH in aarch64eb) machine=aarch64_be-unknown ;; armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; earmv*) arch=`echo "$UNAME_MACHINE_ARCH" | sed -e 's,^e\(armv[0-9]\).*$,\1,'` endian=`echo "$UNAME_MACHINE_ARCH" | sed -ne 's,^.*\(eb\)$,\1,p'` machine=${arch}${endian}-unknown ;; *) machine=$UNAME_MACHINE_ARCH-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently (or will in the future) and ABI. case $UNAME_MACHINE_ARCH in earm*) os=netbsdelf ;; arm*|i386|m68k|ns32k|sh3*|sparc|vax) set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # Determine ABI tags. case $UNAME_MACHINE_ARCH in earm*) expr='s/^earmv[0-9]/-eabi/;s/eb$//' abi=`echo "$UNAME_MACHINE_ARCH" | sed -e "$expr"` ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case $UNAME_VERSION in Debian*) release='-gnu' ;; *) release=`echo "$UNAME_RELEASE" | sed -e 's/[-_].*//' | cut -d. -f1,2` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. GUESS=$machine-${os}${release}${abi-} ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` GUESS=$UNAME_MACHINE_ARCH-unknown-bitrig$UNAME_RELEASE ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` GUESS=$UNAME_MACHINE_ARCH-unknown-openbsd$UNAME_RELEASE ;; *:SecBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/SecBSD.//'` GUESS=$UNAME_MACHINE_ARCH-unknown-secbsd$UNAME_RELEASE ;; *:LibertyBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'` GUESS=$UNAME_MACHINE_ARCH-unknown-libertybsd$UNAME_RELEASE ;; *:MidnightBSD:*:*) GUESS=$UNAME_MACHINE-unknown-midnightbsd$UNAME_RELEASE ;; *:ekkoBSD:*:*) GUESS=$UNAME_MACHINE-unknown-ekkobsd$UNAME_RELEASE ;; *:SolidBSD:*:*) GUESS=$UNAME_MACHINE-unknown-solidbsd$UNAME_RELEASE ;; *:OS108:*:*) GUESS=$UNAME_MACHINE-unknown-os108_$UNAME_RELEASE ;; macppc:MirBSD:*:*) GUESS=powerpc-unknown-mirbsd$UNAME_RELEASE ;; *:MirBSD:*:*) GUESS=$UNAME_MACHINE-unknown-mirbsd$UNAME_RELEASE ;; *:Sortix:*:*) GUESS=$UNAME_MACHINE-unknown-sortix ;; *:Twizzler:*:*) GUESS=$UNAME_MACHINE-unknown-twizzler ;; *:Redox:*:*) GUESS=$UNAME_MACHINE-unknown-redox ;; mips:OSF1:*.*) GUESS=mips-dec-osf1 ;; alpha:OSF1:*:*) # Reset EXIT trap before exiting to avoid spurious non-zero exit code. trap '' 0 case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case $ALPHA_CPU_TYPE in "EV4 (21064)") UNAME_MACHINE=alpha ;; "EV4.5 (21064)") UNAME_MACHINE=alpha ;; "LCA4 (21066/21068)") UNAME_MACHINE=alpha ;; "EV5 (21164)") UNAME_MACHINE=alphaev5 ;; "EV5.6 (21164A)") UNAME_MACHINE=alphaev56 ;; "EV5.6 (21164PC)") UNAME_MACHINE=alphapca56 ;; "EV5.7 (21164PC)") UNAME_MACHINE=alphapca57 ;; "EV6 (21264)") UNAME_MACHINE=alphaev6 ;; "EV6.7 (21264A)") UNAME_MACHINE=alphaev67 ;; "EV6.8CB (21264C)") UNAME_MACHINE=alphaev68 ;; "EV6.8AL (21264B)") UNAME_MACHINE=alphaev68 ;; "EV6.8CX (21264D)") UNAME_MACHINE=alphaev68 ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE=alphaev69 ;; "EV7 (21364)") UNAME_MACHINE=alphaev7 ;; "EV7.9 (21364A)") UNAME_MACHINE=alphaev79 ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. OSF_REL=`echo "$UNAME_RELEASE" | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` GUESS=$UNAME_MACHINE-dec-osf$OSF_REL ;; Amiga*:UNIX_System_V:4.0:*) GUESS=m68k-unknown-sysv4 ;; *:[Aa]miga[Oo][Ss]:*:*) GUESS=$UNAME_MACHINE-unknown-amigaos ;; *:[Mm]orph[Oo][Ss]:*:*) GUESS=$UNAME_MACHINE-unknown-morphos ;; *:OS/390:*:*) GUESS=i370-ibm-openedition ;; *:z/VM:*:*) GUESS=s390-ibm-zvmoe ;; *:OS400:*:*) GUESS=powerpc-ibm-os400 ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) GUESS=arm-acorn-riscix$UNAME_RELEASE ;; arm*:riscos:*:*|arm*:RISCOS:*:*) GUESS=arm-unknown-riscos ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) GUESS=hppa1.1-hitachi-hiuxmpp ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. case `(/bin/universe) 2>/dev/null` in att) GUESS=pyramid-pyramid-sysv3 ;; *) GUESS=pyramid-pyramid-bsd ;; esac ;; NILE*:*:*:dcosx) GUESS=pyramid-pyramid-svr4 ;; DRS?6000:unix:4.0:6*) GUESS=sparc-icl-nx6 ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) GUESS=sparc-icl-nx7 ;; esac ;; s390x:SunOS:*:*) SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=$UNAME_MACHINE-ibm-solaris2$SUN_REL ;; sun4H:SunOS:5.*:*) SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=sparc-hal-solaris2$SUN_REL ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=sparc-sun-solaris2$SUN_REL ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) GUESS=i386-pc-auroraux$UNAME_RELEASE ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) set_cc_for_build SUN_ARCH=i386 # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. if test "$CC_FOR_BUILD" != no_compiler_found; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -m64 -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH=x86_64 fi fi SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=$SUN_ARCH-pc-solaris2$SUN_REL ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=sparc-sun-solaris3$SUN_REL ;; sun4*:SunOS:*:*) case `/usr/bin/arch -k` in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/-/_/'` GUESS=sparc-sun-sunos$SUN_REL ;; sun3*:SunOS:*:*) GUESS=m68k-sun-sunos$UNAME_RELEASE ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x$UNAME_RELEASE" = x && UNAME_RELEASE=3 case `/bin/arch` in sun3) GUESS=m68k-sun-sunos$UNAME_RELEASE ;; sun4) GUESS=sparc-sun-sunos$UNAME_RELEASE ;; esac ;; aushp:SunOS:*:*) GUESS=sparc-auspex-sunos$UNAME_RELEASE ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) GUESS=m68k-atari-mint$UNAME_RELEASE ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) GUESS=m68k-atari-mint$UNAME_RELEASE ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) GUESS=m68k-atari-mint$UNAME_RELEASE ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) GUESS=m68k-milan-mint$UNAME_RELEASE ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) GUESS=m68k-hades-mint$UNAME_RELEASE ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) GUESS=m68k-unknown-mint$UNAME_RELEASE ;; m68k:machten:*:*) GUESS=m68k-apple-machten$UNAME_RELEASE ;; powerpc:machten:*:*) GUESS=powerpc-apple-machten$UNAME_RELEASE ;; RISC*:Mach:*:*) GUESS=mips-dec-mach_bsd4.3 ;; RISC*:ULTRIX:*:*) GUESS=mips-dec-ultrix$UNAME_RELEASE ;; VAX*:ULTRIX*:*:*) GUESS=vax-dec-ultrix$UNAME_RELEASE ;; 2020:CLIX:*:* | 2430:CLIX:*:*) GUESS=clipper-intergraph-clix$UNAME_RELEASE ;; mips:*:*:UMIPS | mips:*:*:RISCos) set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o "$dummy" "$dummy.c" && dummyarg=`echo "$UNAME_RELEASE" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`"$dummy" "$dummyarg"` && { echo "$SYSTEM_NAME"; exit; } GUESS=mips-mips-riscos$UNAME_RELEASE ;; Motorola:PowerMAX_OS:*:*) GUESS=powerpc-motorola-powermax ;; Motorola:*:4.3:PL8-*) GUESS=powerpc-harris-powermax ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) GUESS=powerpc-harris-powermax ;; Night_Hawk:Power_UNIX:*:*) GUESS=powerpc-harris-powerunix ;; m88k:CX/UX:7*:*) GUESS=m88k-harris-cxux7 ;; m88k:*:4*:R4*) GUESS=m88k-motorola-sysv4 ;; m88k:*:3*:R3*) GUESS=m88k-motorola-sysv3 ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if test "$UNAME_PROCESSOR" = mc88100 || test "$UNAME_PROCESSOR" = mc88110 then if test "$TARGET_BINARY_INTERFACE"x = m88kdguxelfx || \ test "$TARGET_BINARY_INTERFACE"x = x then GUESS=m88k-dg-dgux$UNAME_RELEASE else GUESS=m88k-dg-dguxbcs$UNAME_RELEASE fi else GUESS=i586-dg-dgux$UNAME_RELEASE fi ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) GUESS=m88k-dolphin-sysv3 ;; M88*:*:R3*:*) # Delta 88k system running SVR3 GUESS=m88k-motorola-sysv3 ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) GUESS=m88k-tektronix-sysv3 ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) GUESS=m68k-tektronix-bsd ;; *:IRIX*:*:*) IRIX_REL=`echo "$UNAME_RELEASE" | sed -e 's/-/_/g'` GUESS=mips-sgi-irix$IRIX_REL ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. GUESS=romp-ibm-aix # uname -m gives an 8 hex-code CPU id ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) GUESS=i386-ibm-aix ;; ia64:AIX:*:*) if test -x /usr/bin/oslevel ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=$UNAME_VERSION.$UNAME_RELEASE fi GUESS=$UNAME_MACHINE-ibm-aix$IBM_REV ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` then GUESS=$SYSTEM_NAME else GUESS=rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then GUESS=rs6000-ibm-aix3.2.4 else GUESS=rs6000-ibm-aix3.2 fi ;; *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El "$IBM_CPU_ID" | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if test -x /usr/bin/lslpp ; then IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | \ awk -F: '{ print $3 }' | sed s/[0-9]*$/0/` else IBM_REV=$UNAME_VERSION.$UNAME_RELEASE fi GUESS=$IBM_ARCH-ibm-aix$IBM_REV ;; *:AIX:*:*) GUESS=rs6000-ibm-aix ;; ibmrt:4.4BSD:*|romp-ibm:4.4BSD:*) GUESS=romp-ibm-bsd4.4 ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and GUESS=romp-ibm-bsd$UNAME_RELEASE # 4.3 with uname added to ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) GUESS=rs6000-bull-bosx ;; DPX/2?00:B.O.S.:*:*) GUESS=m68k-bull-sysv3 ;; 9000/[34]??:4.3bsd:1.*:*) GUESS=m68k-hp-bsd ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) GUESS=m68k-hp-bsd4.4 ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*.[0B]*//'` case $UNAME_MACHINE in 9000/31?) HP_ARCH=m68000 ;; 9000/[34]??) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if test -x /usr/bin/getconf; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case $sc_cpu_version in 523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0 528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case $sc_kernel_bits in 32) HP_ARCH=hppa2.0n ;; 64) HP_ARCH=hppa2.0w ;; '') HP_ARCH=hppa2.0 ;; # HP-UX 10.20 esac ;; esac fi if test "$HP_ARCH" = ""; then set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS="" $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null) && HP_ARCH=`"$dummy"` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if test "$HP_ARCH" = hppa2.0w then set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then HP_ARCH=hppa2.0w else HP_ARCH=hppa64 fi fi GUESS=$HP_ARCH-hp-hpux$HPUX_REV ;; ia64:HP-UX:*:*) HPUX_REV=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*.[0B]*//'` GUESS=ia64-hp-hpux$HPUX_REV ;; 3050*:HI-UX:*:*) set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` && { echo "$SYSTEM_NAME"; exit; } GUESS=unknown-hitachi-hiuxwe2 ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:*) GUESS=hppa1.1-hp-bsd ;; 9000/8??:4.3bsd:*:*) GUESS=hppa1.0-hp-bsd ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) GUESS=hppa1.0-hp-mpeix ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:*) GUESS=hppa1.1-hp-osf ;; hp8??:OSF1:*:*) GUESS=hppa1.0-hp-osf ;; i*86:OSF1:*:*) if test -x /usr/sbin/sysversion ; then GUESS=$UNAME_MACHINE-unknown-osf1mk else GUESS=$UNAME_MACHINE-unknown-osf1 fi ;; parisc*:Lites*:*:*) GUESS=hppa1.1-hp-lites ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) GUESS=c1-convex-bsd ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) GUESS=c34-convex-bsd ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) GUESS=c38-convex-bsd ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) GUESS=c4-convex-bsd ;; CRAY*Y-MP:*:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=ymp-cray-unicos$CRAY_REL ;; CRAY*[A-Z]90:*:*:*) echo "$UNAME_MACHINE"-cray-unicos"$UNAME_RELEASE" \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=t90-cray-unicos$CRAY_REL ;; CRAY*T3E:*:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=alphaev5-cray-unicosmk$CRAY_REL ;; CRAY*SV1:*:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=sv1-cray-unicos$CRAY_REL ;; *:UNICOS/mp:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=craynv-cray-unicosmp$CRAY_REL ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` FUJITSU_REL=`echo "$UNAME_RELEASE" | sed -e 's/ /_/'` GUESS=${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL} ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` FUJITSU_REL=`echo "$UNAME_RELEASE" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'` GUESS=sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL} ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) GUESS=$UNAME_MACHINE-pc-bsdi$UNAME_RELEASE ;; sparc*:BSD/OS:*:*) GUESS=sparc-unknown-bsdi$UNAME_RELEASE ;; *:BSD/OS:*:*) GUESS=$UNAME_MACHINE-unknown-bsdi$UNAME_RELEASE ;; arm:FreeBSD:*:*) UNAME_PROCESSOR=`uname -p` set_cc_for_build if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL-gnueabi else FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL-gnueabihf fi ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` case $UNAME_PROCESSOR in amd64) UNAME_PROCESSOR=x86_64 ;; i386) UNAME_PROCESSOR=i586 ;; esac FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL ;; i*:CYGWIN*:*) GUESS=$UNAME_MACHINE-pc-cygwin ;; *:MINGW64*:*) GUESS=$UNAME_MACHINE-pc-mingw64 ;; *:MINGW*:*) GUESS=$UNAME_MACHINE-pc-mingw32 ;; *:MSYS*:*) GUESS=$UNAME_MACHINE-pc-msys ;; i*:PW*:*) GUESS=$UNAME_MACHINE-pc-pw32 ;; *:SerenityOS:*:*) GUESS=$UNAME_MACHINE-pc-serenity ;; *:Interix*:*) case $UNAME_MACHINE in x86) GUESS=i586-pc-interix$UNAME_RELEASE ;; authenticamd | genuineintel | EM64T) GUESS=x86_64-unknown-interix$UNAME_RELEASE ;; IA64) GUESS=ia64-unknown-interix$UNAME_RELEASE ;; esac ;; i*:UWIN*:*) GUESS=$UNAME_MACHINE-pc-uwin ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) GUESS=x86_64-pc-cygwin ;; prep*:SunOS:5.*:*) SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=powerpcle-unknown-solaris2$SUN_REL ;; *:GNU:*:*) # the GNU system GNU_ARCH=`echo "$UNAME_MACHINE" | sed -e 's,[-/].*$,,'` GNU_REL=`echo "$UNAME_RELEASE" | sed -e 's,/.*$,,'` GUESS=$GNU_ARCH-unknown-$LIBC$GNU_REL ;; *:GNU/*:*:*) # other systems with GNU libc and userland GNU_SYS=`echo "$UNAME_SYSTEM" | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"` GNU_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_MACHINE-unknown-$GNU_SYS$GNU_REL-$LIBC ;; *:Minix:*:*) GUESS=$UNAME_MACHINE-unknown-minix ;; aarch64:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' /proc/cpuinfo 2>/dev/null` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 if test "$?" = 0 ; then LIBC=gnulibc1 ; fi GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; arc:Linux:*:* | arceb:Linux:*:* | arc32:Linux:*:* | arc64:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; arm*:Linux:*:*) set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then GUESS=$UNAME_MACHINE-unknown-linux-$LIBC else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then GUESS=$UNAME_MACHINE-unknown-linux-${LIBC}eabi else GUESS=$UNAME_MACHINE-unknown-linux-${LIBC}eabihf fi fi ;; avr32*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; cris:Linux:*:*) GUESS=$UNAME_MACHINE-axis-linux-$LIBC ;; crisv32:Linux:*:*) GUESS=$UNAME_MACHINE-axis-linux-$LIBC ;; e2k:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; frv:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; hexagon:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; i*86:Linux:*:*) GUESS=$UNAME_MACHINE-pc-linux-$LIBC ;; ia64:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; k1om:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; loongarch32:Linux:*:* | loongarch64:Linux:*:* | loongarchx32:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; m32r*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; m68*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; mips:Linux:*:* | mips64:Linux:*:*) set_cc_for_build IS_GLIBC=0 test x"${LIBC}" = xgnu && IS_GLIBC=1 sed 's/^ //' << EOF > "$dummy.c" #undef CPU #undef mips #undef mipsel #undef mips64 #undef mips64el #if ${IS_GLIBC} && defined(_ABI64) LIBCABI=gnuabi64 #else #if ${IS_GLIBC} && defined(_ABIN32) LIBCABI=gnuabin32 #else LIBCABI=${LIBC} #endif #endif #if ${IS_GLIBC} && defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6 CPU=mipsisa64r6 #else #if ${IS_GLIBC} && !defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6 CPU=mipsisa32r6 #else #if defined(__mips64) CPU=mips64 #else CPU=mips #endif #endif #endif #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) MIPS_ENDIAN=el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) MIPS_ENDIAN= #else MIPS_ENDIAN= #endif #endif EOF cc_set_vars=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU\|^MIPS_ENDIAN\|^LIBCABI'` eval "$cc_set_vars" test "x$CPU" != x && { echo "$CPU${MIPS_ENDIAN}-unknown-linux-$LIBCABI"; exit; } ;; mips64el:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; openrisc*:Linux:*:*) GUESS=or1k-unknown-linux-$LIBC ;; or32:Linux:*:* | or1k*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; padre:Linux:*:*) GUESS=sparc-unknown-linux-$LIBC ;; parisc64:Linux:*:* | hppa64:Linux:*:*) GUESS=hppa64-unknown-linux-$LIBC ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) GUESS=hppa1.1-unknown-linux-$LIBC ;; PA8*) GUESS=hppa2.0-unknown-linux-$LIBC ;; *) GUESS=hppa-unknown-linux-$LIBC ;; esac ;; ppc64:Linux:*:*) GUESS=powerpc64-unknown-linux-$LIBC ;; ppc:Linux:*:*) GUESS=powerpc-unknown-linux-$LIBC ;; ppc64le:Linux:*:*) GUESS=powerpc64le-unknown-linux-$LIBC ;; ppcle:Linux:*:*) GUESS=powerpcle-unknown-linux-$LIBC ;; riscv32:Linux:*:* | riscv32be:Linux:*:* | riscv64:Linux:*:* | riscv64be:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; s390:Linux:*:* | s390x:Linux:*:*) GUESS=$UNAME_MACHINE-ibm-linux-$LIBC ;; sh64*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; sh*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; sparc:Linux:*:* | sparc64:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; tile*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; vax:Linux:*:*) GUESS=$UNAME_MACHINE-dec-linux-$LIBC ;; x86_64:Linux:*:*) set_cc_for_build LIBCABI=$LIBC if test "$CC_FOR_BUILD" != no_compiler_found; then if (echo '#ifdef __ILP32__'; echo IS_X32; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_X32 >/dev/null then LIBCABI=${LIBC}x32 fi fi GUESS=$UNAME_MACHINE-pc-linux-$LIBCABI ;; xtensa*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. GUESS=i386-sequent-sysv4 ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. GUESS=$UNAME_MACHINE-pc-sysv4.2uw$UNAME_VERSION ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. GUESS=$UNAME_MACHINE-pc-os2-emx ;; i*86:XTS-300:*:STOP) GUESS=$UNAME_MACHINE-unknown-stop ;; i*86:atheos:*:*) GUESS=$UNAME_MACHINE-unknown-atheos ;; i*86:syllable:*:*) GUESS=$UNAME_MACHINE-pc-syllable ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) GUESS=i386-unknown-lynxos$UNAME_RELEASE ;; i*86:*DOS:*:*) GUESS=$UNAME_MACHINE-pc-msdosdjgpp ;; i*86:*:4.*:*) UNAME_REL=`echo "$UNAME_RELEASE" | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then GUESS=$UNAME_MACHINE-univel-sysv$UNAME_REL else GUESS=$UNAME_MACHINE-pc-sysv$UNAME_REL fi ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac GUESS=$UNAME_MACHINE-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 GUESS=$UNAME_MACHINE-pc-sco$UNAME_REL else GUESS=$UNAME_MACHINE-pc-sysv32 fi ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB configure will decide that # this is a cross-build. GUESS=i586-pc-msdosdjgpp ;; Intel:Mach:3*:*) GUESS=i386-pc-mach3 ;; paragon:*:*:*) GUESS=i860-intel-osf1 ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then GUESS=i860-stardent-sysv$UNAME_RELEASE # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. GUESS=i860-unknown-sysv$UNAME_RELEASE # Unknown i860-SVR4 fi ;; mini*:CTIX:SYS*5:*) # "miniframe" GUESS=m68010-convergent-sysv ;; mc68k:UNIX:SYSTEM5:3.51m) GUESS=m68k-convergent-sysv ;; M680?0:D-NIX:5.3:*) GUESS=m68k-diab-dnix ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; NCR*:*:4.2:* | MPRAS*:*:4.2:*) OS_REL='.3' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) GUESS=m68k-unknown-lynxos$UNAME_RELEASE ;; mc68030:UNIX_System_V:4.*:*) GUESS=m68k-atari-sysv4 ;; TSUNAMI:LynxOS:2.*:*) GUESS=sparc-unknown-lynxos$UNAME_RELEASE ;; rs6000:LynxOS:2.*:*) GUESS=rs6000-unknown-lynxos$UNAME_RELEASE ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) GUESS=powerpc-unknown-lynxos$UNAME_RELEASE ;; SM[BE]S:UNIX_SV:*:*) GUESS=mips-dde-sysv$UNAME_RELEASE ;; RM*:ReliantUNIX-*:*:*) GUESS=mips-sni-sysv4 ;; RM*:SINIX-*:*:*) GUESS=mips-sni-sysv4 ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` GUESS=$UNAME_MACHINE-sni-sysv4 else GUESS=ns32k-sni-sysv fi ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says GUESS=i586-unisys-sysv4 ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm GUESS=hppa1.1-stratus-sysv4 ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. GUESS=i860-stratus-sysv4 ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. GUESS=$UNAME_MACHINE-stratus-vos ;; *:VOS:*:*) # From Paul.Green@stratus.com. GUESS=hppa1.1-stratus-vos ;; mc68*:A/UX:*:*) GUESS=m68k-apple-aux$UNAME_RELEASE ;; news*:NEWS-OS:6*:*) GUESS=mips-sony-newsos6 ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if test -d /usr/nec; then GUESS=mips-nec-sysv$UNAME_RELEASE else GUESS=mips-unknown-sysv$UNAME_RELEASE fi ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. GUESS=powerpc-be-beos ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. GUESS=powerpc-apple-beos ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. GUESS=i586-pc-beos ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. GUESS=i586-pc-haiku ;; x86_64:Haiku:*:*) GUESS=x86_64-unknown-haiku ;; SX-4:SUPER-UX:*:*) GUESS=sx4-nec-superux$UNAME_RELEASE ;; SX-5:SUPER-UX:*:*) GUESS=sx5-nec-superux$UNAME_RELEASE ;; SX-6:SUPER-UX:*:*) GUESS=sx6-nec-superux$UNAME_RELEASE ;; SX-7:SUPER-UX:*:*) GUESS=sx7-nec-superux$UNAME_RELEASE ;; SX-8:SUPER-UX:*:*) GUESS=sx8-nec-superux$UNAME_RELEASE ;; SX-8R:SUPER-UX:*:*) GUESS=sx8r-nec-superux$UNAME_RELEASE ;; SX-ACE:SUPER-UX:*:*) GUESS=sxace-nec-superux$UNAME_RELEASE ;; Power*:Rhapsody:*:*) GUESS=powerpc-apple-rhapsody$UNAME_RELEASE ;; *:Rhapsody:*:*) GUESS=$UNAME_MACHINE-apple-rhapsody$UNAME_RELEASE ;; arm64:Darwin:*:*) GUESS=aarch64-apple-darwin$UNAME_RELEASE ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` case $UNAME_PROCESSOR in unknown) UNAME_PROCESSOR=powerpc ;; esac if command -v xcode-select > /dev/null 2> /dev/null && \ ! xcode-select --print-path > /dev/null 2> /dev/null ; then # Avoid executing cc if there is no toolchain installed as # cc will be a stub that puts up a graphical alert # prompting the user to install developer tools. CC_FOR_BUILD=no_compiler_found else set_cc_for_build fi if test "$CC_FOR_BUILD" != no_compiler_found; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then case $UNAME_PROCESSOR in i386) UNAME_PROCESSOR=x86_64 ;; powerpc) UNAME_PROCESSOR=powerpc64 ;; esac fi # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_PPC >/dev/null then UNAME_PROCESSOR=powerpc fi elif test "$UNAME_PROCESSOR" = i386 ; then # uname -m returns i386 or x86_64 UNAME_PROCESSOR=$UNAME_MACHINE fi GUESS=$UNAME_PROCESSOR-apple-darwin$UNAME_RELEASE ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = x86; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi GUESS=$UNAME_PROCESSOR-$UNAME_MACHINE-nto-qnx$UNAME_RELEASE ;; *:QNX:*:4*) GUESS=i386-pc-qnx ;; NEO-*:NONSTOP_KERNEL:*:*) GUESS=neo-tandem-nsk$UNAME_RELEASE ;; NSE-*:NONSTOP_KERNEL:*:*) GUESS=nse-tandem-nsk$UNAME_RELEASE ;; NSR-*:NONSTOP_KERNEL:*:*) GUESS=nsr-tandem-nsk$UNAME_RELEASE ;; NSV-*:NONSTOP_KERNEL:*:*) GUESS=nsv-tandem-nsk$UNAME_RELEASE ;; NSX-*:NONSTOP_KERNEL:*:*) GUESS=nsx-tandem-nsk$UNAME_RELEASE ;; *:NonStop-UX:*:*) GUESS=mips-compaq-nonstopux ;; BS2000:POSIX*:*:*) GUESS=bs2000-siemens-sysv ;; DS/*:UNIX_System_V:*:*) GUESS=$UNAME_MACHINE-$UNAME_SYSTEM-$UNAME_RELEASE ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "${cputype-}" = 386; then UNAME_MACHINE=i386 elif test "x${cputype-}" != x; then UNAME_MACHINE=$cputype fi GUESS=$UNAME_MACHINE-unknown-plan9 ;; *:TOPS-10:*:*) GUESS=pdp10-unknown-tops10 ;; *:TENEX:*:*) GUESS=pdp10-unknown-tenex ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) GUESS=pdp10-dec-tops20 ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) GUESS=pdp10-xkl-tops20 ;; *:TOPS-20:*:*) GUESS=pdp10-unknown-tops20 ;; *:ITS:*:*) GUESS=pdp10-unknown-its ;; SEI:*:*:SEIUX) GUESS=mips-sei-seiux$UNAME_RELEASE ;; *:DragonFly:*:*) DRAGONFLY_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_MACHINE-unknown-dragonfly$DRAGONFLY_REL ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case $UNAME_MACHINE in A*) GUESS=alpha-dec-vms ;; I*) GUESS=ia64-dec-vms ;; V*) GUESS=vax-dec-vms ;; esac ;; *:XENIX:*:SysV) GUESS=i386-pc-xenix ;; i*86:skyos:*:*) SKYOS_REL=`echo "$UNAME_RELEASE" | sed -e 's/ .*$//'` GUESS=$UNAME_MACHINE-pc-skyos$SKYOS_REL ;; i*86:rdos:*:*) GUESS=$UNAME_MACHINE-pc-rdos ;; i*86:Fiwix:*:*) GUESS=$UNAME_MACHINE-pc-fiwix ;; *:AROS:*:*) GUESS=$UNAME_MACHINE-unknown-aros ;; x86_64:VMkernel:*:*) GUESS=$UNAME_MACHINE-unknown-esx ;; amd64:Isilon\ OneFS:*:*) GUESS=x86_64-unknown-onefs ;; *:Unleashed:*:*) GUESS=$UNAME_MACHINE-unknown-unleashed$UNAME_RELEASE ;; esac # Do we have a guess based on uname results? if test "x$GUESS" != x; then echo "$GUESS" exit fi # No uname command or uname output not recognized. set_cc_for_build cat > "$dummy.c" < #include #endif #if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__) #if defined (vax) || defined (__vax) || defined (__vax__) || defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__) #include #if defined(_SIZE_T_) || defined(SIGLOST) #include #endif #endif #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) #if !defined (ultrix) #include #if defined (BSD) #if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); #else #if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); #else printf ("vax-dec-bsd\n"); exit (0); #endif #endif #else printf ("vax-dec-bsd\n"); exit (0); #endif #else #if defined(_SIZE_T_) || defined(SIGLOST) struct utsname un; uname (&un); printf ("vax-dec-ultrix%s\n", un.release); exit (0); #else printf ("vax-dec-ultrix\n"); exit (0); #endif #endif #endif #if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__) #if defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__) #if defined(_SIZE_T_) || defined(SIGLOST) struct utsname *un; uname (&un); printf ("mips-dec-ultrix%s\n", un.release); exit (0); #else printf ("mips-dec-ultrix\n"); exit (0); #endif #endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null && SYSTEM_NAME=`"$dummy"` && { echo "$SYSTEM_NAME"; exit; } # Apollos put the system type in the environment. test -d /usr/apollo && { echo "$ISP-apollo-$SYSTYPE"; exit; } echo "$0: unable to guess system type" >&2 case $UNAME_MACHINE:$UNAME_SYSTEM in mips:Linux | mips64:Linux) # If we got here on MIPS GNU/Linux, output extra information. cat >&2 <&2 <&2 </dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = "$UNAME_MACHINE" UNAME_RELEASE = "$UNAME_RELEASE" UNAME_SYSTEM = "$UNAME_SYSTEM" UNAME_VERSION = "$UNAME_VERSION" EOF fi exit 1 # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: aqbanking-6.6.1/aqbanking.m40000664000175000017500000001317014043610744012604 00000000000000# $Id$ # (c) 2004 Martin Preuss # This function checks for AqBanking AC_DEFUN([AC_AQBANKING], [ dnl searches for aqbanking dnl Arguments: dnl $1: major version minimum dnl $2: minor version minimum dnl $3: patchlevel version minimum dnl $4: build version minimum dnl Returns: aqbanking_dir dnl aqbanking_libs dnl aqbanking_libspp dnl aqbanking_data dnl aqbanking_plugins dnl aqbanking_includes dnl have_aqbanking if test -z "$1"; then vma="0"; else vma="$1"; fi if test -z "$2"; then vmi="1"; else vmi="$2"; fi if test -z "$3"; then vpl="0"; else vpl="$3"; fi if test -z "$4"; then vbld="0"; else vbld="$4"; fi AC_MSG_CHECKING(if aqbanking support desired) AC_ARG_ENABLE(aqbanking, [ --enable-aqbanking enable aqbanking support (default=yes)], enable_aqbanking="$enableval", enable_aqbanking="yes") AC_MSG_RESULT($enable_aqbanking) have_aqbanking="no" aqbanking_dir="" aqbanking_data="" aqbanking_plugins="" aqbanking_libs="" aqbanking_libspp="" aqbanking_includes="" qbanking_libs="" qbanking_plugindir="" qbanking_helpdir="" aqhbci_libs="" if test "$enable_aqbanking" != "no"; then AC_MSG_CHECKING(for aqbanking) AC_ARG_WITH(aqbanking-dir, [ --with-aqbanking-dir=DIR obsolete - set PKG_CONFIG_PATH environment variable instead], [AC_MSG_RESULT([obsolete configure option '--with-aqbanking-dir' used]) AC_MSG_ERROR([ *** Configure switch '--with-aqbanking-dir' is obsolete. *** If you want to use aqbanking from a non-system location *** then locate the file 'aqbanking.pc' and add its parent directory *** to environment variable PKG_CONFIG_PATH. For example *** configure PKG_CONFIG_PATH=":\${PKG_CONFIG_PATH}"])], []) $PKG_CONFIG --exists aqbanking result=$? if test $result -ne 0; then AC_MSG_RESULT(not found) AC_MSG_ERROR([ *** Package aqbanking was not found in the pkg-config search path. *** Perhaps you should add the directory containing `aqbanking.pc' *** to the PKG_CONFIG_PATH environment variable]) else aqbanking_dir="`$PKG_CONFIG --variable=prefix aqbanking`" AC_MSG_RESULT($aqbanking_dir) fi AC_MSG_CHECKING(for aqbanking libs) aqbanking_libs="`$PKG_CONFIG --libs aqbanking`" AC_MSG_RESULT($aqbanking_libs) AC_MSG_CHECKING(for aqbanking includes) aqbanking_includes="`$PKG_CONFIG --cflags aqbanking`" AC_MSG_RESULT($aqbanking_includes) AC_MSG_CHECKING(for aqbanking plugins) aqbanking_plugins="`$PKG_CONFIG --variable=plugindir aqbanking`" AC_MSG_RESULT($aqbanking_plugins) AC_MSG_CHECKING(for aqbanking data) aqbanking_data="`$PKG_CONFIG --variable=pkgdatadir aqbanking`" AC_MSG_RESULT($aqbanking_data) AC_MSG_CHECKING(whether QBanking is supported) have_qbanking="`$PKG_CONFIG --variable=has-qbanking aqbanking`" AC_MSG_RESULT($have_qbanking) AC_MSG_CHECKING(for qbanking libs) qbanking_libs="`$PKG_CONFIG --variable=qbanking-libraries aqbanking`" AC_MSG_RESULT($aqbanking_libs) AC_MSG_CHECKING(for qbanking plugins) qbanking_plugins="`$PKG_CONFIG --variable=qbanking-plugins aqbanking`" AC_MSG_RESULT($qbanking_plugins) AC_MSG_CHECKING(for qbanking helpdir) qbanking_helpdir="`$PKG_CONFIG --variable=qbanking-helpdir aqbanking`" AC_MSG_RESULT($qbanking_helpdir) AC_MSG_CHECKING(whether AqHBCI is supported) have_aqhbci="`$PKG_CONFIG --variable=has-aqhbci aqbanking`" AC_MSG_RESULT($have_aqhbci) AC_MSG_CHECKING(for AqHBCI libs) aqhbci_libs="`$PKG_CONFIG --variable=aqhbci-libraries aqbanking`" AC_MSG_RESULT($aqhbci_libs) AC_MSG_CHECKING(if aqbanking test desired) AC_ARG_ENABLE(aqbanking, [ --enable-aqbanking-test enable aqbanking-test (default=yes)], enable_aqbanking_test="$enableval", enable_aqbanking_test="yes") AC_MSG_RESULT($enable_aqbanking_test) AC_MSG_CHECKING(for AqBanking version >=$vma.$vmi.$vpl.$vbld) if test "$enable_aqbanking_test" != "no"; then aqb_vmajor="`$PKG_CONFIG --variable=vmajor aqbanking`" aqb_vminor="`$PKG_CONFIG --variable=vminor aqbanking`" aqb_vpatchlevel="`$PKG_CONFIG --variable=vpatchlevel aqbanking`" aqb_vstring="`$PKG_CONFIG --variable=vstring aqbanking`" aqb_vbuild="`$PKG_CONFIG --variable=vbuild aqbanking`" aqb_versionstring="$aqb_vstring.$aqb_vbuild" AC_MSG_RESULT([found $aqb_versionstring]) if test "$vma" -gt "$aqb_vmajor"; then AC_MSG_ERROR([Your Aqbanking version is way too old. Please update from https://www.aquamaniac.de]) elif test "$vma" = "$aqb_vmajor"; then if test "$vmi" -gt "$aqb_vminor"; then AC_MSG_ERROR([Your Aqbanking version is too old. Please update from https://www.aquamaniac.de]) elif test "$vmi" = "$aqb_vminor"; then if test "$vpl" -gt "$aqb_vpatchlevel"; then AC_MSG_ERROR([Your Aqbanking version is a little bit too old. Please update from https://www.aquamaniac.de]) elif test "$vpl" = "$aqb_vpatchlevel"; then if test "$vbld" -gt "$aqb_vbuild"; then AC_MSG_ERROR([Your Aqbanking version is a little bit too old. Please update to the latest git version. Instructions for accessing git can be found on https://www.aquamaniac.de]) fi fi fi fi have_aqbanking="yes" #AC_MSG_RESULT(yes) else have_aqbanking="yes" AC_MSG_RESULT(assuming yes) fi dnl end of "if enable-aqbanking" fi AC_SUBST(aqhbci_libs) AC_SUBST(qbanking_libs) AC_SUBST(qbanking_plugins) AC_SUBST(qbanking_helpdir) AC_SUBST(aqbanking_dir) AC_SUBST(aqbanking_plugins) AC_SUBST(aqbanking_libs) AC_SUBST(aqbanking_libspp) AC_SUBST(aqbanking_data) AC_SUBST(aqbanking_includes) ]) aqbanking-6.6.1/INSTALL0000664000175000017500000002203014043610744011433 00000000000000Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. This file is free documentation; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. Basic Installation ================== These are generic installation instructions. The `configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a `Makefile' in each directory of the package. It may also create one or more `.h' files containing system-dependent definitions. Finally, it creates a shell script `config.status' that you can run in the future to recreate the current configuration, and a file `config.log' containing compiler output (useful mainly for debugging `configure'). It can also use an optional file (typically called `config.cache' and enabled with `--cache-file=config.cache' or simply `-C') that saves the results of its tests to speed up reconfiguring. (Caching is disabled by default to prevent problems with accidental use of stale cache files.) If you need to do unusual things to compile the package, please try to figure out how `configure' could check whether to do them, and mail diffs or instructions to the address given in the `README' so they can be considered for the next release. If you are using the cache, and at some point `config.cache' contains results you don't want to keep, you may remove or edit it. The file `configure.ac' (or `configure.in') is used to create `configure' by a program called `autoconf'. You only need `configure.ac' if you want to change it or regenerate `configure' using a newer version of `autoconf'. The simplest way to compile this package is: 1. `cd' to the directory containing the package's source code and type `./configure' to configure the package for your system. If you're using `csh' on an old version of System V, you might need to type `sh ./configure' instead to prevent `csh' from trying to execute `configure' itself. Running `configure' takes awhile. While running, it prints some messages telling which features it is checking for. 2. Type `make' to compile the package. 3. Optionally, type `make check' to run any self-tests that come with the package. 4. Type `make install' to install the programs and any data files and documentation. 5. You can remove the program binaries and object files from the source code directory by typing `make clean'. To also remove the files that `configure' created (so you can compile the package for a different kind of computer), type `make distclean'. There is also a `make maintainer-clean' target, but that is intended mainly for the package's developers. If you use it, you may have to get all sorts of other programs in order to regenerate files that came with the distribution. Compilers and Options ===================== Some systems require unusual options for compilation or linking that the `configure' script does not know about. Run `./configure --help' for details on some of the pertinent environment variables. You can give `configure' initial values for configuration parameters by setting variables in the command line or in the environment. Here is an example: ./configure CC=c89 CFLAGS=-O2 LIBS=-lposix *Note Defining Variables::, for more details. Compiling For Multiple Architectures ==================================== You can compile the package for more than one kind of computer at the same time, by placing the object files for each architecture in their own directory. To do this, you must use a version of `make' that supports the `VPATH' variable, such as GNU `make'. `cd' to the directory where you want the object files and executables to go and run the `configure' script. `configure' automatically checks for the source code in the directory that `configure' is in and in `..'. If you have to use a `make' that does not support the `VPATH' variable, you have to compile the package for one architecture at a time in the source code directory. After you have installed the package for one architecture, use `make distclean' before reconfiguring for another architecture. Installation Names ================== By default, `make install' will install the package's files in `/usr/local/bin', `/usr/local/man', etc. You can specify an installation prefix other than `/usr/local' by giving `configure' the option `--prefix=PATH'. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you give `configure' the option `--exec-prefix=PATH', the package will use PATH as the prefix for installing programs and libraries. Documentation and other data files will still use the regular prefix. In addition, if you use an unusual directory layout you can give options like `--bindir=PATH' to specify different values for particular kinds of files. Run `configure --help' for a list of the directories you can set and what kinds of files go in them. If the package supports it, you can cause programs to be installed with an extra prefix or suffix on their names by giving `configure' the option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. Optional Features ================= Some packages pay attention to `--enable-FEATURE' options to `configure', where FEATURE indicates an optional part of the package. They may also pay attention to `--with-PACKAGE' options, where PACKAGE is something like `gnu-as' or `x' (for the X Window System). The `README' should mention any `--enable-' and `--with-' options that the package recognizes. For packages that use the X Window System, `configure' can usually find the X include and library files automatically, but if it doesn't, you can use the `configure' options `--x-includes=DIR' and `--x-libraries=DIR' to specify their locations. Specifying the System Type ========================== There may be some features `configure' cannot figure out automatically, but needs to determine by the type of machine the package will run on. Usually, assuming the package is built to be run on the _same_ architectures, `configure' can figure that out, but if it prints a message saying it cannot guess the machine type, give it the `--build=TYPE' option. TYPE can either be a short name for the system type, such as `sun4', or a canonical name which has the form: CPU-COMPANY-SYSTEM where SYSTEM can have one of these forms: OS KERNEL-OS See the file `config.sub' for the possible values of each field. If `config.sub' isn't included in this package, then this package doesn't need to know the machine type. If you are _building_ compiler tools for cross-compiling, you should use the `--target=TYPE' option to select the type of system they will produce code for. If you want to _use_ a cross compiler, that generates code for a platform different from the build platform, you should specify the "host" platform (i.e., that on which the generated programs will eventually be run) with `--host=TYPE'. Sharing Defaults ================ If you want to set default values for `configure' scripts to share, you can create a site shell script called `config.site' that gives default values for variables like `CC', `cache_file', and `prefix'. `configure' looks for `PREFIX/share/config.site' if it exists, then `PREFIX/etc/config.site' if it exists. Or, you can set the `CONFIG_SITE' environment variable to the location of the site script. A warning: not all `configure' scripts look for a site script. Defining Variables ================== Variables not defined in a site shell script can be set in the environment passed to `configure'. However, some packages may run configure again during the build, and the customized values of these variables may be lost. In order to avoid this problem, you should set them in the `configure' command line, using `VAR=value'. For example: ./configure CC=/usr/local2/bin/gcc will cause the specified gcc to be used as the C compiler (unless it is overridden in the site shell script). `configure' Invocation ====================== `configure' recognizes the following options to control how it operates. `--help' `-h' Print a summary of the options to `configure', and exit. `--version' `-V' Print the version of Autoconf used to generate the `configure' script, and exit. `--cache-file=FILE' Enable the cache: use and save the results of the tests in FILE, traditionally `config.cache'. FILE defaults to `/dev/null' to disable caching. `--config-cache' `-C' Alias for `--cache-file=config.cache'. `--quiet' `--silent' `-q' Do not print messages saying which checks are being made. To suppress all normal output, redirect it to `/dev/null' (any error messages will still be shown). `--srcdir=DIR' Look for the package's source code in directory DIR. Usually `configure' can determine that directory automatically. `configure' also accepts some other, not widely useful, options. Run `configure --help' for more details. aqbanking-6.6.1/ltmain.sh0000755000175000017500000121240114605317530012230 00000000000000#! /usr/bin/env sh ## DO NOT EDIT - This file generated from ./build-aux/ltmain.in ## by inline-source v2019-02-19.15 # libtool (GNU libtool) 2.4.7 # Provide generalized library-building support services. # Written by Gordon Matzigkeit , 1996 # Copyright (C) 1996-2019, 2021-2022 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # GNU Libtool is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . PROGRAM=libtool PACKAGE=libtool VERSION="2.4.7 Debian-2.4.7-7~deb12u1" package_revision=2.4.7 ## ------ ## ## Usage. ## ## ------ ## # Run './libtool --help' for help with using this script from the # command line. ## ------------------------------- ## ## User overridable command paths. ## ## ------------------------------- ## # After configure completes, it has a better idea of some of the # shell tools we need than the defaults used by the functions shared # with bootstrap, so set those here where they can still be over- # ridden by the user, but otherwise take precedence. : ${AUTOCONF="autoconf"} : ${AUTOMAKE="automake"} ## -------------------------- ## ## Source external libraries. ## ## -------------------------- ## # Much of our low-level functionality needs to be sourced from external # libraries, which are installed to $pkgauxdir. # Set a version string for this script. scriptversion=2019-02-19.15; # UTC # General shell script boiler plate, and helper functions. # Written by Gary V. Vaughan, 2004 # This is free software. There is NO warranty; not even for # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # # Copyright (C) 2004-2019, 2021 Bootstrap Authors # # This file is dual licensed under the terms of the MIT license # , and GPL version 2 or later # . You must apply one of # these licenses when using or redistributing this software or any of # the files within it. See the URLs above, or the file `LICENSE` # included in the Bootstrap distribution for the full license texts. # Please report bugs or propose patches to: # ## ------ ## ## Usage. ## ## ------ ## # Evaluate this file near the top of your script to gain access to # the functions and variables defined here: # # . `echo "$0" | ${SED-sed} 's|[^/]*$||'`/build-aux/funclib.sh # # If you need to override any of the default environment variable # settings, do that before evaluating this file. ## -------------------- ## ## Shell normalisation. ## ## -------------------- ## # Some shells need a little help to be as Bourne compatible as possible. # Before doing anything else, make sure all that help has been provided! DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac fi # NLS nuisances: We save the old values in case they are required later. _G_user_locale= _G_safe_locale= for _G_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test set = \"\${$_G_var+set}\"; then save_$_G_var=\$$_G_var $_G_var=C export $_G_var _G_user_locale=\"$_G_var=\\\$save_\$_G_var; \$_G_user_locale\" _G_safe_locale=\"$_G_var=C; \$_G_safe_locale\" fi" done # These NLS vars are set unconditionally (bootstrap issue #24). Unset those # in case the environment reset is needed later and the $save_* variant is not # defined (see the code above). LC_ALL=C LANGUAGE=C export LANGUAGE LC_ALL # Make sure IFS has a sensible default sp=' ' nl=' ' IFS="$sp $nl" # There are apparently some retarded systems that use ';' as a PATH separator! if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # func_unset VAR # -------------- # Portably unset VAR. # In some shells, an 'unset VAR' statement leaves a non-zero return # status if VAR is already unset, which might be problematic if the # statement is used at the end of a function (thus poisoning its return # value) or when 'set -e' is active (causing even a spurious abort of # the script in this case). func_unset () { { eval $1=; (eval unset $1) >/dev/null 2>&1 && eval unset $1 || : ; } } # Make sure CDPATH doesn't cause `cd` commands to output the target dir. func_unset CDPATH # Make sure ${,E,F}GREP behave sanely. func_unset GREP_OPTIONS ## ------------------------- ## ## Locate command utilities. ## ## ------------------------- ## # func_executable_p FILE # ---------------------- # Check that FILE is an executable regular file. func_executable_p () { test -f "$1" && test -x "$1" } # func_path_progs PROGS_LIST CHECK_FUNC [PATH] # -------------------------------------------- # Search for either a program that responds to --version with output # containing "GNU", or else returned by CHECK_FUNC otherwise, by # trying all the directories in PATH with each of the elements of # PROGS_LIST. # # CHECK_FUNC should accept the path to a candidate program, and # set $func_check_prog_result if it truncates its output less than # $_G_path_prog_max characters. func_path_progs () { _G_progs_list=$1 _G_check_func=$2 _G_PATH=${3-"$PATH"} _G_path_prog_max=0 _G_path_prog_found=false _G_save_IFS=$IFS; IFS=${PATH_SEPARATOR-:} for _G_dir in $_G_PATH; do IFS=$_G_save_IFS test -z "$_G_dir" && _G_dir=. for _G_prog_name in $_G_progs_list; do for _exeext in '' .EXE; do _G_path_prog=$_G_dir/$_G_prog_name$_exeext func_executable_p "$_G_path_prog" || continue case `"$_G_path_prog" --version 2>&1` in *GNU*) func_path_progs_result=$_G_path_prog _G_path_prog_found=: ;; *) $_G_check_func $_G_path_prog func_path_progs_result=$func_check_prog_result ;; esac $_G_path_prog_found && break 3 done done done IFS=$_G_save_IFS test -z "$func_path_progs_result" && { echo "no acceptable sed could be found in \$PATH" >&2 exit 1 } } # We want to be able to use the functions in this file before configure # has figured out where the best binaries are kept, which means we have # to search for them ourselves - except when the results are already set # where we skip the searches. # Unless the user overrides by setting SED, search the path for either GNU # sed, or the sed that truncates its output the least. test -z "$SED" && { _G_sed_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for _G_i in 1 2 3 4 5 6 7; do _G_sed_script=$_G_sed_script$nl$_G_sed_script done echo "$_G_sed_script" 2>/dev/null | sed 99q >conftest.sed _G_sed_script= func_check_prog_sed () { _G_path_prog=$1 _G_count=0 printf 0123456789 >conftest.in while : do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo '' >> conftest.nl "$_G_path_prog" -f conftest.sed conftest.out 2>/dev/null || break diff conftest.out conftest.nl >/dev/null 2>&1 || break _G_count=`expr $_G_count + 1` if test "$_G_count" -gt "$_G_path_prog_max"; then # Best one so far, save it but keep looking for a better one func_check_prog_result=$_G_path_prog _G_path_prog_max=$_G_count fi # 10*(2^10) chars as input seems more than enough test 10 -lt "$_G_count" && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out } func_path_progs "sed gsed" func_check_prog_sed "$PATH:/usr/xpg4/bin" rm -f conftest.sed SED=$func_path_progs_result } # Unless the user overrides by setting GREP, search the path for either GNU # grep, or the grep that truncates its output the least. test -z "$GREP" && { func_check_prog_grep () { _G_path_prog=$1 _G_count=0 _G_path_prog_max=0 printf 0123456789 >conftest.in while : do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo 'GREP' >> conftest.nl "$_G_path_prog" -e 'GREP$' -e '-(cannot match)-' conftest.out 2>/dev/null || break diff conftest.out conftest.nl >/dev/null 2>&1 || break _G_count=`expr $_G_count + 1` if test "$_G_count" -gt "$_G_path_prog_max"; then # Best one so far, save it but keep looking for a better one func_check_prog_result=$_G_path_prog _G_path_prog_max=$_G_count fi # 10*(2^10) chars as input seems more than enough test 10 -lt "$_G_count" && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out } func_path_progs "grep ggrep" func_check_prog_grep "$PATH:/usr/xpg4/bin" GREP=$func_path_progs_result } ## ------------------------------- ## ## User overridable command paths. ## ## ------------------------------- ## # All uppercase variable names are used for environment variables. These # variables can be overridden by the user before calling a script that # uses them if a suitable command of that name is not already available # in the command search PATH. : ${CP="cp -f"} : ${ECHO="printf %s\n"} : ${EGREP="$GREP -E"} : ${FGREP="$GREP -F"} : ${LN_S="ln -s"} : ${MAKE="make"} : ${MKDIR="mkdir"} : ${MV="mv -f"} : ${RM="rm -f"} : ${SHELL="${CONFIG_SHELL-/bin/sh}"} ## -------------------- ## ## Useful sed snippets. ## ## -------------------- ## sed_dirname='s|/[^/]*$||' sed_basename='s|^.*/||' # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. sed_quote_subst='s|\([`"$\\]\)|\\\1|g' # Same as above, but do not quote variable references. sed_double_quote_subst='s/\(["`\\]\)/\\\1/g' # Sed substitution that turns a string into a regex matching for the # string literally. sed_make_literal_regex='s|[].[^$\\*\/]|\\&|g' # Sed substitution that converts a w32 file name or path # that contains forward slashes, into one that contains # (escaped) backslashes. A very naive implementation. sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' # Re-'\' parameter expansions in output of sed_double_quote_subst that # were '\'-ed in input to the same. If an odd number of '\' preceded a # '$' in input to sed_double_quote_subst, that '$' was protected from # expansion. Since each input '\' is now two '\'s, look for any number # of runs of four '\'s followed by two '\'s and then a '$'. '\' that '$'. _G_bs='\\' _G_bs2='\\\\' _G_bs4='\\\\\\\\' _G_dollar='\$' sed_double_backslash="\ s/$_G_bs4/&\\ /g s/^$_G_bs2$_G_dollar/$_G_bs&/ s/\\([^$_G_bs]\\)$_G_bs2$_G_dollar/\\1$_G_bs2$_G_bs$_G_dollar/g s/\n//g" # require_check_ifs_backslash # --------------------------- # Check if we can use backslash as IFS='\' separator, and set # $check_ifs_backshlash_broken to ':' or 'false'. require_check_ifs_backslash=func_require_check_ifs_backslash func_require_check_ifs_backslash () { _G_save_IFS=$IFS IFS='\' _G_check_ifs_backshlash='a\\b' for _G_i in $_G_check_ifs_backshlash do case $_G_i in a) check_ifs_backshlash_broken=false ;; '') break ;; *) check_ifs_backshlash_broken=: break ;; esac done IFS=$_G_save_IFS require_check_ifs_backslash=: } ## ----------------- ## ## Global variables. ## ## ----------------- ## # Except for the global variables explicitly listed below, the following # functions in the '^func_' namespace, and the '^require_' namespace # variables initialised in the 'Resource management' section, sourcing # this file will not pollute your global namespace with anything # else. There's no portable way to scope variables in Bourne shell # though, so actually running these functions will sometimes place # results into a variable named after the function, and often use # temporary variables in the '^_G_' namespace. If you are careful to # avoid using those namespaces casually in your sourcing script, things # should continue to work as you expect. And, of course, you can freely # overwrite any of the functions or variables defined here before # calling anything to customize them. EXIT_SUCCESS=0 EXIT_FAILURE=1 EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. # Allow overriding, eg assuming that you follow the convention of # putting '$debug_cmd' at the start of all your functions, you can get # bash to show function call trace with: # # debug_cmd='echo "${FUNCNAME[0]} $*" >&2' bash your-script-name debug_cmd=${debug_cmd-":"} exit_cmd=: # By convention, finish your script with: # # exit $exit_status # # so that you can set exit_status to non-zero if you want to indicate # something went wrong during execution without actually bailing out at # the point of failure. exit_status=$EXIT_SUCCESS # Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh # is ksh but when the shell is invoked as "sh" and the current value of # the _XPG environment variable is not equal to 1 (one), the special # positional parameter $0, within a function call, is the name of the # function. progpath=$0 # The name of this program. progname=`$ECHO "$progpath" |$SED "$sed_basename"` # Make sure we have an absolute progpath for reexecution: case $progpath in [\\/]*|[A-Za-z]:\\*) ;; *[\\/]*) progdir=`$ECHO "$progpath" |$SED "$sed_dirname"` progdir=`cd "$progdir" && pwd` progpath=$progdir/$progname ;; *) _G_IFS=$IFS IFS=${PATH_SEPARATOR-:} for progdir in $PATH; do IFS=$_G_IFS test -x "$progdir/$progname" && break done IFS=$_G_IFS test -n "$progdir" || progdir=`pwd` progpath=$progdir/$progname ;; esac ## ----------------- ## ## Standard options. ## ## ----------------- ## # The following options affect the operation of the functions defined # below, and should be set appropriately depending on run-time para- # meters passed on the command line. opt_dry_run=false opt_quiet=false opt_verbose=false # Categories 'all' and 'none' are always available. Append any others # you will pass as the first argument to func_warning from your own # code. warning_categories= # By default, display warnings according to 'opt_warning_types'. Set # 'warning_func' to ':' to elide all warnings, or func_fatal_error to # treat the next displayed warning as a fatal error. warning_func=func_warn_and_continue # Set to 'all' to display all warnings, 'none' to suppress all # warnings, or a space delimited list of some subset of # 'warning_categories' to display only the listed warnings. opt_warning_types=all ## -------------------- ## ## Resource management. ## ## -------------------- ## # This section contains definitions for functions that each ensure a # particular resource (a file, or a non-empty configuration variable for # example) is available, and if appropriate to extract default values # from pertinent package files. Call them using their associated # 'require_*' variable to ensure that they are executed, at most, once. # # It's entirely deliberate that calling these functions can set # variables that don't obey the namespace limitations obeyed by the rest # of this file, in order that that they be as useful as possible to # callers. # require_term_colors # ------------------- # Allow display of bold text on terminals that support it. require_term_colors=func_require_term_colors func_require_term_colors () { $debug_cmd test -t 1 && { # COLORTERM and USE_ANSI_COLORS environment variables take # precedence, because most terminfo databases neglect to describe # whether color sequences are supported. test -n "${COLORTERM+set}" && : ${USE_ANSI_COLORS="1"} if test 1 = "$USE_ANSI_COLORS"; then # Standard ANSI escape sequences tc_reset='' tc_bold=''; tc_standout='' tc_red=''; tc_green='' tc_blue=''; tc_cyan='' else # Otherwise trust the terminfo database after all. test -n "`tput sgr0 2>/dev/null`" && { tc_reset=`tput sgr0` test -n "`tput bold 2>/dev/null`" && tc_bold=`tput bold` tc_standout=$tc_bold test -n "`tput smso 2>/dev/null`" && tc_standout=`tput smso` test -n "`tput setaf 1 2>/dev/null`" && tc_red=`tput setaf 1` test -n "`tput setaf 2 2>/dev/null`" && tc_green=`tput setaf 2` test -n "`tput setaf 4 2>/dev/null`" && tc_blue=`tput setaf 4` test -n "`tput setaf 5 2>/dev/null`" && tc_cyan=`tput setaf 5` } fi } require_term_colors=: } ## ----------------- ## ## Function library. ## ## ----------------- ## # This section contains a variety of useful functions to call in your # scripts. Take note of the portable wrappers for features provided by # some modern shells, which will fall back to slower equivalents on # less featureful shells. # func_append VAR VALUE # --------------------- # Append VALUE onto the existing contents of VAR. # _G_HAVE_PLUSEQ_OP # Can be empty, in which case the shell is probed, "yes" if += is # useable or anything else if it does not work. if test -z "$_G_HAVE_PLUSEQ_OP" && \ __PLUSEQ_TEST="a" && \ __PLUSEQ_TEST+=" b" 2>/dev/null && \ test "a b" = "$__PLUSEQ_TEST"; then _G_HAVE_PLUSEQ_OP=yes fi if test yes = "$_G_HAVE_PLUSEQ_OP" then # This is an XSI compatible shell, allowing a faster implementation... eval 'func_append () { $debug_cmd eval "$1+=\$2" }' else # ...otherwise fall back to using expr, which is often a shell builtin. func_append () { $debug_cmd eval "$1=\$$1\$2" } fi # func_append_quoted VAR VALUE # ---------------------------- # Quote VALUE and append to the end of shell variable VAR, separated # by a space. if test yes = "$_G_HAVE_PLUSEQ_OP"; then eval 'func_append_quoted () { $debug_cmd func_quote_arg pretty "$2" eval "$1+=\\ \$func_quote_arg_result" }' else func_append_quoted () { $debug_cmd func_quote_arg pretty "$2" eval "$1=\$$1\\ \$func_quote_arg_result" } fi # func_append_uniq VAR VALUE # -------------------------- # Append unique VALUE onto the existing contents of VAR, assuming # entries are delimited by the first character of VALUE. For example: # # func_append_uniq options " --another-option option-argument" # # will only append to $options if " --another-option option-argument " # is not already present somewhere in $options already (note spaces at # each end implied by leading space in second argument). func_append_uniq () { $debug_cmd eval _G_current_value='`$ECHO $'$1'`' _G_delim=`expr "$2" : '\(.\)'` case $_G_delim$_G_current_value$_G_delim in *"$2$_G_delim"*) ;; *) func_append "$@" ;; esac } # func_arith TERM... # ------------------ # Set func_arith_result to the result of evaluating TERMs. test -z "$_G_HAVE_ARITH_OP" \ && (eval 'test 2 = $(( 1 + 1 ))') 2>/dev/null \ && _G_HAVE_ARITH_OP=yes if test yes = "$_G_HAVE_ARITH_OP"; then eval 'func_arith () { $debug_cmd func_arith_result=$(( $* )) }' else func_arith () { $debug_cmd func_arith_result=`expr "$@"` } fi # func_basename FILE # ------------------ # Set func_basename_result to FILE with everything up to and including # the last / stripped. if test yes = "$_G_HAVE_XSI_OPS"; then # If this shell supports suffix pattern removal, then use it to avoid # forking. Hide the definitions single quotes in case the shell chokes # on unsupported syntax... _b='func_basename_result=${1##*/}' _d='case $1 in */*) func_dirname_result=${1%/*}$2 ;; * ) func_dirname_result=$3 ;; esac' else # ...otherwise fall back to using sed. _b='func_basename_result=`$ECHO "$1" |$SED "$sed_basename"`' _d='func_dirname_result=`$ECHO "$1" |$SED "$sed_dirname"` if test "X$func_dirname_result" = "X$1"; then func_dirname_result=$3 else func_append func_dirname_result "$2" fi' fi eval 'func_basename () { $debug_cmd '"$_b"' }' # func_dirname FILE APPEND NONDIR_REPLACEMENT # ------------------------------------------- # Compute the dirname of FILE. If nonempty, add APPEND to the result, # otherwise set result to NONDIR_REPLACEMENT. eval 'func_dirname () { $debug_cmd '"$_d"' }' # func_dirname_and_basename FILE APPEND NONDIR_REPLACEMENT # -------------------------------------------------------- # Perform func_basename and func_dirname in a single function # call: # dirname: Compute the dirname of FILE. If nonempty, # add APPEND to the result, otherwise set result # to NONDIR_REPLACEMENT. # value returned in "$func_dirname_result" # basename: Compute filename of FILE. # value retuned in "$func_basename_result" # For efficiency, we do not delegate to the functions above but instead # duplicate the functionality here. eval 'func_dirname_and_basename () { $debug_cmd '"$_b"' '"$_d"' }' # func_echo ARG... # ---------------- # Echo program name prefixed message. func_echo () { $debug_cmd _G_message=$* func_echo_IFS=$IFS IFS=$nl for _G_line in $_G_message; do IFS=$func_echo_IFS $ECHO "$progname: $_G_line" done IFS=$func_echo_IFS } # func_echo_all ARG... # -------------------- # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } # func_echo_infix_1 INFIX ARG... # ------------------------------ # Echo program name, followed by INFIX on the first line, with any # additional lines not showing INFIX. func_echo_infix_1 () { $debug_cmd $require_term_colors _G_infix=$1; shift _G_indent=$_G_infix _G_prefix="$progname: $_G_infix: " _G_message=$* # Strip color escape sequences before counting printable length for _G_tc in "$tc_reset" "$tc_bold" "$tc_standout" "$tc_red" "$tc_green" "$tc_blue" "$tc_cyan" do test -n "$_G_tc" && { _G_esc_tc=`$ECHO "$_G_tc" | $SED "$sed_make_literal_regex"` _G_indent=`$ECHO "$_G_indent" | $SED "s|$_G_esc_tc||g"` } done _G_indent="$progname: "`echo "$_G_indent" | $SED 's|.| |g'`" " ## exclude from sc_prohibit_nested_quotes func_echo_infix_1_IFS=$IFS IFS=$nl for _G_line in $_G_message; do IFS=$func_echo_infix_1_IFS $ECHO "$_G_prefix$tc_bold$_G_line$tc_reset" >&2 _G_prefix=$_G_indent done IFS=$func_echo_infix_1_IFS } # func_error ARG... # ----------------- # Echo program name prefixed message to standard error. func_error () { $debug_cmd $require_term_colors func_echo_infix_1 " $tc_standout${tc_red}error$tc_reset" "$*" >&2 } # func_fatal_error ARG... # ----------------------- # Echo program name prefixed message to standard error, and exit. func_fatal_error () { $debug_cmd func_error "$*" exit $EXIT_FAILURE } # func_grep EXPRESSION FILENAME # ----------------------------- # Check whether EXPRESSION matches any line of FILENAME, without output. func_grep () { $debug_cmd $GREP "$1" "$2" >/dev/null 2>&1 } # func_len STRING # --------------- # Set func_len_result to the length of STRING. STRING may not # start with a hyphen. test -z "$_G_HAVE_XSI_OPS" \ && (eval 'x=a/b/c; test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ && _G_HAVE_XSI_OPS=yes if test yes = "$_G_HAVE_XSI_OPS"; then eval 'func_len () { $debug_cmd func_len_result=${#1} }' else func_len () { $debug_cmd func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len` } fi # func_mkdir_p DIRECTORY-PATH # --------------------------- # Make sure the entire path to DIRECTORY-PATH is available. func_mkdir_p () { $debug_cmd _G_directory_path=$1 _G_dir_list= if test -n "$_G_directory_path" && test : != "$opt_dry_run"; then # Protect directory names starting with '-' case $_G_directory_path in -*) _G_directory_path=./$_G_directory_path ;; esac # While some portion of DIR does not yet exist... while test ! -d "$_G_directory_path"; do # ...make a list in topmost first order. Use a colon delimited # list incase some portion of path contains whitespace. _G_dir_list=$_G_directory_path:$_G_dir_list # If the last portion added has no slash in it, the list is done case $_G_directory_path in */*) ;; *) break ;; esac # ...otherwise throw away the child directory and loop _G_directory_path=`$ECHO "$_G_directory_path" | $SED -e "$sed_dirname"` done _G_dir_list=`$ECHO "$_G_dir_list" | $SED 's|:*$||'` func_mkdir_p_IFS=$IFS; IFS=: for _G_dir in $_G_dir_list; do IFS=$func_mkdir_p_IFS # mkdir can fail with a 'File exist' error if two processes # try to create one of the directories concurrently. Don't # stop in that case! $MKDIR "$_G_dir" 2>/dev/null || : done IFS=$func_mkdir_p_IFS # Bail out if we (or some other process) failed to create a directory. test -d "$_G_directory_path" || \ func_fatal_error "Failed to create '$1'" fi } # func_mktempdir [BASENAME] # ------------------------- # Make a temporary directory that won't clash with other running # libtool processes, and avoids race conditions if possible. If # given, BASENAME is the basename for that directory. func_mktempdir () { $debug_cmd _G_template=${TMPDIR-/tmp}/${1-$progname} if test : = "$opt_dry_run"; then # Return a directory name, but don't create it in dry-run mode _G_tmpdir=$_G_template-$$ else # If mktemp works, use that first and foremost _G_tmpdir=`mktemp -d "$_G_template-XXXXXXXX" 2>/dev/null` if test ! -d "$_G_tmpdir"; then # Failing that, at least try and use $RANDOM to avoid a race _G_tmpdir=$_G_template-${RANDOM-0}$$ func_mktempdir_umask=`umask` umask 0077 $MKDIR "$_G_tmpdir" umask $func_mktempdir_umask fi # If we're not in dry-run mode, bomb out on failure test -d "$_G_tmpdir" || \ func_fatal_error "cannot create temporary directory '$_G_tmpdir'" fi $ECHO "$_G_tmpdir" } # func_normal_abspath PATH # ------------------------ # Remove doubled-up and trailing slashes, "." path components, # and cancel out any ".." path components in PATH after making # it an absolute path. func_normal_abspath () { $debug_cmd # These SED scripts presuppose an absolute path with a trailing slash. _G_pathcar='s|^/\([^/]*\).*$|\1|' _G_pathcdr='s|^/[^/]*||' _G_removedotparts=':dotsl s|/\./|/|g t dotsl s|/\.$|/|' _G_collapseslashes='s|/\{1,\}|/|g' _G_finalslash='s|/*$|/|' # Start from root dir and reassemble the path. func_normal_abspath_result= func_normal_abspath_tpath=$1 func_normal_abspath_altnamespace= case $func_normal_abspath_tpath in "") # Empty path, that just means $cwd. func_stripname '' '/' "`pwd`" func_normal_abspath_result=$func_stripname_result return ;; # The next three entries are used to spot a run of precisely # two leading slashes without using negated character classes; # we take advantage of case's first-match behaviour. ///*) # Unusual form of absolute path, do nothing. ;; //*) # Not necessarily an ordinary path; POSIX reserves leading '//' # and for example Cygwin uses it to access remote file shares # over CIFS/SMB, so we conserve a leading double slash if found. func_normal_abspath_altnamespace=/ ;; /*) # Absolute path, do nothing. ;; *) # Relative path, prepend $cwd. func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath ;; esac # Cancel out all the simple stuff to save iterations. We also want # the path to end with a slash for ease of parsing, so make sure # there is one (and only one) here. func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$_G_removedotparts" -e "$_G_collapseslashes" -e "$_G_finalslash"` while :; do # Processed it all yet? if test / = "$func_normal_abspath_tpath"; then # If we ascended to the root using ".." the result may be empty now. if test -z "$func_normal_abspath_result"; then func_normal_abspath_result=/ fi break fi func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$_G_pathcar"` func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$_G_pathcdr"` # Figure out what to do with it case $func_normal_abspath_tcomponent in "") # Trailing empty path component, ignore it. ;; ..) # Parent dir; strip last assembled component from result. func_dirname "$func_normal_abspath_result" func_normal_abspath_result=$func_dirname_result ;; *) # Actual path component, append it. func_append func_normal_abspath_result "/$func_normal_abspath_tcomponent" ;; esac done # Restore leading double-slash if one was found on entry. func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result } # func_notquiet ARG... # -------------------- # Echo program name prefixed message only when not in quiet mode. func_notquiet () { $debug_cmd $opt_quiet || func_echo ${1+"$@"} # A bug in bash halts the script if the last line of a function # fails when set -e is in force, so we need another command to # work around that: : } # func_relative_path SRCDIR DSTDIR # -------------------------------- # Set func_relative_path_result to the relative path from SRCDIR to DSTDIR. func_relative_path () { $debug_cmd func_relative_path_result= func_normal_abspath "$1" func_relative_path_tlibdir=$func_normal_abspath_result func_normal_abspath "$2" func_relative_path_tbindir=$func_normal_abspath_result # Ascend the tree starting from libdir while :; do # check if we have found a prefix of bindir case $func_relative_path_tbindir in $func_relative_path_tlibdir) # found an exact match func_relative_path_tcancelled= break ;; $func_relative_path_tlibdir*) # found a matching prefix func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" func_relative_path_tcancelled=$func_stripname_result if test -z "$func_relative_path_result"; then func_relative_path_result=. fi break ;; *) func_dirname $func_relative_path_tlibdir func_relative_path_tlibdir=$func_dirname_result if test -z "$func_relative_path_tlibdir"; then # Have to descend all the way to the root! func_relative_path_result=../$func_relative_path_result func_relative_path_tcancelled=$func_relative_path_tbindir break fi func_relative_path_result=../$func_relative_path_result ;; esac done # Now calculate path; take care to avoid doubling-up slashes. func_stripname '' '/' "$func_relative_path_result" func_relative_path_result=$func_stripname_result func_stripname '/' '/' "$func_relative_path_tcancelled" if test -n "$func_stripname_result"; then func_append func_relative_path_result "/$func_stripname_result" fi # Normalisation. If bindir is libdir, return '.' else relative path. if test -n "$func_relative_path_result"; then func_stripname './' '' "$func_relative_path_result" func_relative_path_result=$func_stripname_result fi test -n "$func_relative_path_result" || func_relative_path_result=. : } # func_quote_portable EVAL ARG # ---------------------------- # Internal function to portably implement func_quote_arg. Note that we still # keep attention to performance here so we as much as possible try to avoid # calling sed binary (so far O(N) complexity as long as func_append is O(1)). func_quote_portable () { $debug_cmd $require_check_ifs_backslash func_quote_portable_result=$2 # one-time-loop (easy break) while true do if $1; then func_quote_portable_result=`$ECHO "$2" | $SED \ -e "$sed_double_quote_subst" -e "$sed_double_backslash"` break fi # Quote for eval. case $func_quote_portable_result in *[\\\`\"\$]*) # Fallback to sed for $func_check_bs_ifs_broken=:, or when the string # contains the shell wildcard characters. case $check_ifs_backshlash_broken$func_quote_portable_result in :*|*[\[\*\?]*) func_quote_portable_result=`$ECHO "$func_quote_portable_result" \ | $SED "$sed_quote_subst"` break ;; esac func_quote_portable_old_IFS=$IFS for _G_char in '\' '`' '"' '$' do # STATE($1) PREV($2) SEPARATOR($3) set start "" "" func_quote_portable_result=dummy"$_G_char$func_quote_portable_result$_G_char"dummy IFS=$_G_char for _G_part in $func_quote_portable_result do case $1 in quote) func_append func_quote_portable_result "$3$2" set quote "$_G_part" "\\$_G_char" ;; start) set first "" "" func_quote_portable_result= ;; first) set quote "$_G_part" "" ;; esac done done IFS=$func_quote_portable_old_IFS ;; *) ;; esac break done func_quote_portable_unquoted_result=$func_quote_portable_result case $func_quote_portable_result in # double-quote args containing shell metacharacters to delay # word splitting, command substitution and variable expansion # for a subsequent eval. # many bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") func_quote_portable_result=\"$func_quote_portable_result\" ;; esac } # func_quotefast_eval ARG # ----------------------- # Quote one ARG (internal). This is equivalent to 'func_quote_arg eval ARG', # but optimized for speed. Result is stored in $func_quotefast_eval. if test xyes = `(x=; printf -v x %q yes; echo x"$x") 2>/dev/null`; then printf -v _GL_test_printf_tilde %q '~' if test '\~' = "$_GL_test_printf_tilde"; then func_quotefast_eval () { printf -v func_quotefast_eval_result %q "$1" } else # Broken older Bash implementations. Make those faster too if possible. func_quotefast_eval () { case $1 in '~'*) func_quote_portable false "$1" func_quotefast_eval_result=$func_quote_portable_result ;; *) printf -v func_quotefast_eval_result %q "$1" ;; esac } fi else func_quotefast_eval () { func_quote_portable false "$1" func_quotefast_eval_result=$func_quote_portable_result } fi # func_quote_arg MODEs ARG # ------------------------ # Quote one ARG to be evaled later. MODEs argument may contain zero or more # specifiers listed below separated by ',' character. This function returns two # values: # i) func_quote_arg_result # double-quoted (when needed), suitable for a subsequent eval # ii) func_quote_arg_unquoted_result # has all characters that are still active within double # quotes backslashified. Available only if 'unquoted' is specified. # # Available modes: # ---------------- # 'eval' (default) # - escape shell special characters # 'expand' # - the same as 'eval'; but do not quote variable references # 'pretty' # - request aesthetic output, i.e. '"a b"' instead of 'a\ b'. This might # be used later in func_quote to get output like: 'echo "a b"' instead # of 'echo a\ b'. This is slower than default on some shells. # 'unquoted' # - produce also $func_quote_arg_unquoted_result which does not contain # wrapping double-quotes. # # Examples for 'func_quote_arg pretty,unquoted string': # # string | *_result | *_unquoted_result # ------------+-----------------------+------------------- # " | \" | \" # a b | "a b" | a b # "a b" | "\"a b\"" | \"a b\" # * | "*" | * # z="${x-$y}" | "z=\"\${x-\$y}\"" | z=\"\${x-\$y}\" # # Examples for 'func_quote_arg pretty,unquoted,expand string': # # string | *_result | *_unquoted_result # --------------+---------------------+-------------------- # z="${x-$y}" | "z=\"${x-$y}\"" | z=\"${x-$y}\" func_quote_arg () { _G_quote_expand=false case ,$1, in *,expand,*) _G_quote_expand=: ;; esac case ,$1, in *,pretty,*|*,expand,*|*,unquoted,*) func_quote_portable $_G_quote_expand "$2" func_quote_arg_result=$func_quote_portable_result func_quote_arg_unquoted_result=$func_quote_portable_unquoted_result ;; *) # Faster quote-for-eval for some shells. func_quotefast_eval "$2" func_quote_arg_result=$func_quotefast_eval_result ;; esac } # func_quote MODEs ARGs... # ------------------------ # Quote all ARGs to be evaled later and join them into single command. See # func_quote_arg's description for more info. func_quote () { $debug_cmd _G_func_quote_mode=$1 ; shift func_quote_result= while test 0 -lt $#; do func_quote_arg "$_G_func_quote_mode" "$1" if test -n "$func_quote_result"; then func_append func_quote_result " $func_quote_arg_result" else func_append func_quote_result "$func_quote_arg_result" fi shift done } # func_stripname PREFIX SUFFIX NAME # --------------------------------- # strip PREFIX and SUFFIX from NAME, and store in func_stripname_result. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). if test yes = "$_G_HAVE_XSI_OPS"; then eval 'func_stripname () { $debug_cmd # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are # positional parameters, so assign one to ordinary variable first. func_stripname_result=$3 func_stripname_result=${func_stripname_result#"$1"} func_stripname_result=${func_stripname_result%"$2"} }' else func_stripname () { $debug_cmd case $2 in .*) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%\\\\$2\$%%"`;; *) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%$2\$%%"`;; esac } fi # func_show_eval CMD [FAIL_EXP] # ----------------------------- # Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. func_show_eval () { $debug_cmd _G_cmd=$1 _G_fail_exp=${2-':'} func_quote_arg pretty,expand "$_G_cmd" eval "func_notquiet $func_quote_arg_result" $opt_dry_run || { eval "$_G_cmd" _G_status=$? if test 0 -ne "$_G_status"; then eval "(exit $_G_status); $_G_fail_exp" fi } } # func_show_eval_locale CMD [FAIL_EXP] # ------------------------------------ # Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. Use the saved locale for evaluation. func_show_eval_locale () { $debug_cmd _G_cmd=$1 _G_fail_exp=${2-':'} $opt_quiet || { func_quote_arg expand,pretty "$_G_cmd" eval "func_echo $func_quote_arg_result" } $opt_dry_run || { eval "$_G_user_locale $_G_cmd" _G_status=$? eval "$_G_safe_locale" if test 0 -ne "$_G_status"; then eval "(exit $_G_status); $_G_fail_exp" fi } } # func_tr_sh # ---------- # Turn $1 into a string suitable for a shell variable name. # Result is stored in $func_tr_sh_result. All characters # not in the set a-zA-Z0-9_ are replaced with '_'. Further, # if $1 begins with a digit, a '_' is prepended as well. func_tr_sh () { $debug_cmd case $1 in [0-9]* | *[!a-zA-Z0-9_]*) func_tr_sh_result=`$ECHO "$1" | $SED -e 's/^\([0-9]\)/_\1/' -e 's/[^a-zA-Z0-9_]/_/g'` ;; * ) func_tr_sh_result=$1 ;; esac } # func_verbose ARG... # ------------------- # Echo program name prefixed message in verbose mode only. func_verbose () { $debug_cmd $opt_verbose && func_echo "$*" : } # func_warn_and_continue ARG... # ----------------------------- # Echo program name prefixed warning message to standard error. func_warn_and_continue () { $debug_cmd $require_term_colors func_echo_infix_1 "${tc_red}warning$tc_reset" "$*" >&2 } # func_warning CATEGORY ARG... # ---------------------------- # Echo program name prefixed warning message to standard error. Warning # messages can be filtered according to CATEGORY, where this function # elides messages where CATEGORY is not listed in the global variable # 'opt_warning_types'. func_warning () { $debug_cmd # CATEGORY must be in the warning_categories list! case " $warning_categories " in *" $1 "*) ;; *) func_internal_error "invalid warning category '$1'" ;; esac _G_category=$1 shift case " $opt_warning_types " in *" $_G_category "*) $warning_func ${1+"$@"} ;; esac } # func_sort_ver VER1 VER2 # ----------------------- # 'sort -V' is not generally available. # Note this deviates from the version comparison in automake # in that it treats 1.5 < 1.5.0, and treats 1.4.4a < 1.4-p3a # but this should suffice as we won't be specifying old # version formats or redundant trailing .0 in bootstrap.conf. # If we did want full compatibility then we should probably # use m4_version_compare from autoconf. func_sort_ver () { $debug_cmd printf '%s\n%s\n' "$1" "$2" \ | sort -t. -k 1,1n -k 2,2n -k 3,3n -k 4,4n -k 5,5n -k 6,6n -k 7,7n -k 8,8n -k 9,9n } # func_lt_ver PREV CURR # --------------------- # Return true if PREV and CURR are in the correct order according to # func_sort_ver, otherwise false. Use it like this: # # func_lt_ver "$prev_ver" "$proposed_ver" || func_fatal_error "..." func_lt_ver () { $debug_cmd test "x$1" = x`func_sort_ver "$1" "$2" | $SED 1q` } # Local variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC" # time-stamp-time-zone: "UTC" # End: #! /bin/sh # A portable, pluggable option parser for Bourne shell. # Written by Gary V. Vaughan, 2010 # This is free software. There is NO warranty; not even for # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # # Copyright (C) 2010-2019, 2021 Bootstrap Authors # # This file is dual licensed under the terms of the MIT license # , and GPL version 2 or later # . You must apply one of # these licenses when using or redistributing this software or any of # the files within it. See the URLs above, or the file `LICENSE` # included in the Bootstrap distribution for the full license texts. # Please report bugs or propose patches to: # # Set a version string for this script. scriptversion=2019-02-19.15; # UTC ## ------ ## ## Usage. ## ## ------ ## # This file is a library for parsing options in your shell scripts along # with assorted other useful supporting features that you can make use # of too. # # For the simplest scripts you might need only: # # #!/bin/sh # . relative/path/to/funclib.sh # . relative/path/to/options-parser # scriptversion=1.0 # func_options ${1+"$@"} # eval set dummy "$func_options_result"; shift # ...rest of your script... # # In order for the '--version' option to work, you will need to have a # suitably formatted comment like the one at the top of this file # starting with '# Written by ' and ending with '# Copyright'. # # For '-h' and '--help' to work, you will also need a one line # description of your script's purpose in a comment directly above the # '# Written by ' line, like the one at the top of this file. # # The default options also support '--debug', which will turn on shell # execution tracing (see the comment above debug_cmd below for another # use), and '--verbose' and the func_verbose function to allow your script # to display verbose messages only when your user has specified # '--verbose'. # # After sourcing this file, you can plug in processing for additional # options by amending the variables from the 'Configuration' section # below, and following the instructions in the 'Option parsing' # section further down. ## -------------- ## ## Configuration. ## ## -------------- ## # You should override these variables in your script after sourcing this # file so that they reflect the customisations you have added to the # option parser. # The usage line for option parsing errors and the start of '-h' and # '--help' output messages. You can embed shell variables for delayed # expansion at the time the message is displayed, but you will need to # quote other shell meta-characters carefully to prevent them being # expanded when the contents are evaled. usage='$progpath [OPTION]...' # Short help message in response to '-h' and '--help'. Add to this or # override it after sourcing this library to reflect the full set of # options your script accepts. usage_message="\ --debug enable verbose shell tracing -W, --warnings=CATEGORY report the warnings falling in CATEGORY [all] -v, --verbose verbosely report processing --version print version information and exit -h, --help print short or long help message and exit " # Additional text appended to 'usage_message' in response to '--help'. long_help_message=" Warning categories include: 'all' show all warnings 'none' turn off all the warnings 'error' warnings are treated as fatal errors" # Help message printed before fatal option parsing errors. fatal_help="Try '\$progname --help' for more information." ## ------------------------- ## ## Hook function management. ## ## ------------------------- ## # This section contains functions for adding, removing, and running hooks # in the main code. A hook is just a list of function names that can be # run in order later on. # func_hookable FUNC_NAME # ----------------------- # Declare that FUNC_NAME will run hooks added with # 'func_add_hook FUNC_NAME ...'. func_hookable () { $debug_cmd func_append hookable_fns " $1" } # func_add_hook FUNC_NAME HOOK_FUNC # --------------------------------- # Request that FUNC_NAME call HOOK_FUNC before it returns. FUNC_NAME must # first have been declared "hookable" by a call to 'func_hookable'. func_add_hook () { $debug_cmd case " $hookable_fns " in *" $1 "*) ;; *) func_fatal_error "'$1' does not accept hook functions." ;; esac eval func_append ${1}_hooks '" $2"' } # func_remove_hook FUNC_NAME HOOK_FUNC # ------------------------------------ # Remove HOOK_FUNC from the list of hook functions to be called by # FUNC_NAME. func_remove_hook () { $debug_cmd eval ${1}_hooks='`$ECHO "\$'$1'_hooks" |$SED "s| '$2'||"`' } # func_propagate_result FUNC_NAME_A FUNC_NAME_B # --------------------------------------------- # If the *_result variable of FUNC_NAME_A _is set_, assign its value to # *_result variable of FUNC_NAME_B. func_propagate_result () { $debug_cmd func_propagate_result_result=: if eval "test \"\${${1}_result+set}\" = set" then eval "${2}_result=\$${1}_result" else func_propagate_result_result=false fi } # func_run_hooks FUNC_NAME [ARG]... # --------------------------------- # Run all hook functions registered to FUNC_NAME. # It's assumed that the list of hook functions contains nothing more # than a whitespace-delimited list of legal shell function names, and # no effort is wasted trying to catch shell meta-characters or preserve # whitespace. func_run_hooks () { $debug_cmd _G_rc_run_hooks=false case " $hookable_fns " in *" $1 "*) ;; *) func_fatal_error "'$1' does not support hook functions." ;; esac eval _G_hook_fns=\$$1_hooks; shift for _G_hook in $_G_hook_fns; do func_unset "${_G_hook}_result" eval $_G_hook '${1+"$@"}' func_propagate_result $_G_hook func_run_hooks if $func_propagate_result_result; then eval set dummy "$func_run_hooks_result"; shift fi done } ## --------------- ## ## Option parsing. ## ## --------------- ## # In order to add your own option parsing hooks, you must accept the # full positional parameter list from your hook function. You may remove # or edit any options that you action, and then pass back the remaining # unprocessed options in '_result', escaped # suitably for 'eval'. # # The '_result' variable is automatically unset # before your hook gets called; for best performance, only set the # *_result variable when necessary (i.e. don't call the 'func_quote' # function unnecessarily because it can be an expensive operation on some # machines). # # Like this: # # my_options_prep () # { # $debug_cmd # # # Extend the existing usage message. # usage_message=$usage_message' # -s, --silent don'\''t print informational messages # ' # # No change in '$@' (ignored completely by this hook). Leave # # my_options_prep_result variable intact. # } # func_add_hook func_options_prep my_options_prep # # # my_silent_option () # { # $debug_cmd # # args_changed=false # # # Note that, for efficiency, we parse as many options as we can # # recognise in a loop before passing the remainder back to the # # caller on the first unrecognised argument we encounter. # while test $# -gt 0; do # opt=$1; shift # case $opt in # --silent|-s) opt_silent=: # args_changed=: # ;; # # Separate non-argument short options: # -s*) func_split_short_opt "$_G_opt" # set dummy "$func_split_short_opt_name" \ # "-$func_split_short_opt_arg" ${1+"$@"} # shift # args_changed=: # ;; # *) # Make sure the first unrecognised option "$_G_opt" # # is added back to "$@" in case we need it later, # # if $args_changed was set to 'true'. # set dummy "$_G_opt" ${1+"$@"}; shift; break ;; # esac # done # # # Only call 'func_quote' here if we processed at least one argument. # if $args_changed; then # func_quote eval ${1+"$@"} # my_silent_option_result=$func_quote_result # fi # } # func_add_hook func_parse_options my_silent_option # # # my_option_validation () # { # $debug_cmd # # $opt_silent && $opt_verbose && func_fatal_help "\ # '--silent' and '--verbose' options are mutually exclusive." # } # func_add_hook func_validate_options my_option_validation # # You'll also need to manually amend $usage_message to reflect the extra # options you parse. It's preferable to append if you can, so that # multiple option parsing hooks can be added safely. # func_options_finish [ARG]... # ---------------------------- # Finishing the option parse loop (call 'func_options' hooks ATM). func_options_finish () { $debug_cmd func_run_hooks func_options ${1+"$@"} func_propagate_result func_run_hooks func_options_finish } # func_options [ARG]... # --------------------- # All the functions called inside func_options are hookable. See the # individual implementations for details. func_hookable func_options func_options () { $debug_cmd _G_options_quoted=false for my_func in options_prep parse_options validate_options options_finish do func_unset func_${my_func}_result func_unset func_run_hooks_result eval func_$my_func '${1+"$@"}' func_propagate_result func_$my_func func_options if $func_propagate_result_result; then eval set dummy "$func_options_result"; shift _G_options_quoted=: fi done $_G_options_quoted || { # As we (func_options) are top-level options-parser function and # nobody quoted "$@" for us yet, we need to do it explicitly for # caller. func_quote eval ${1+"$@"} func_options_result=$func_quote_result } } # func_options_prep [ARG]... # -------------------------- # All initialisations required before starting the option parse loop. # Note that when calling hook functions, we pass through the list of # positional parameters. If a hook function modifies that list, and # needs to propagate that back to rest of this script, then the complete # modified list must be put in 'func_run_hooks_result' before returning. func_hookable func_options_prep func_options_prep () { $debug_cmd # Option defaults: opt_verbose=false opt_warning_types= func_run_hooks func_options_prep ${1+"$@"} func_propagate_result func_run_hooks func_options_prep } # func_parse_options [ARG]... # --------------------------- # The main option parsing loop. func_hookable func_parse_options func_parse_options () { $debug_cmd _G_parse_options_requote=false # this just eases exit handling while test $# -gt 0; do # Defer to hook functions for initial option parsing, so they # get priority in the event of reusing an option name. func_run_hooks func_parse_options ${1+"$@"} func_propagate_result func_run_hooks func_parse_options if $func_propagate_result_result; then eval set dummy "$func_parse_options_result"; shift # Even though we may have changed "$@", we passed the "$@" array # down into the hook and it quoted it for us (because we are in # this if-branch). No need to quote it again. _G_parse_options_requote=false fi # Break out of the loop if we already parsed every option. test $# -gt 0 || break # We expect that one of the options parsed in this function matches # and thus we remove _G_opt from "$@" and need to re-quote. _G_match_parse_options=: _G_opt=$1 shift case $_G_opt in --debug|-x) debug_cmd='set -x' func_echo "enabling shell trace mode" >&2 $debug_cmd ;; --no-warnings|--no-warning|--no-warn) set dummy --warnings none ${1+"$@"} shift ;; --warnings|--warning|-W) if test $# = 0 && func_missing_arg $_G_opt; then _G_parse_options_requote=: break fi case " $warning_categories $1" in *" $1 "*) # trailing space prevents matching last $1 above func_append_uniq opt_warning_types " $1" ;; *all) opt_warning_types=$warning_categories ;; *none) opt_warning_types=none warning_func=: ;; *error) opt_warning_types=$warning_categories warning_func=func_fatal_error ;; *) func_fatal_error \ "unsupported warning category: '$1'" ;; esac shift ;; --verbose|-v) opt_verbose=: ;; --version) func_version ;; -\?|-h) func_usage ;; --help) func_help ;; # Separate optargs to long options (plugins may need this): --*=*) func_split_equals "$_G_opt" set dummy "$func_split_equals_lhs" \ "$func_split_equals_rhs" ${1+"$@"} shift ;; # Separate optargs to short options: -W*) func_split_short_opt "$_G_opt" set dummy "$func_split_short_opt_name" \ "$func_split_short_opt_arg" ${1+"$@"} shift ;; # Separate non-argument short options: -\?*|-h*|-v*|-x*) func_split_short_opt "$_G_opt" set dummy "$func_split_short_opt_name" \ "-$func_split_short_opt_arg" ${1+"$@"} shift ;; --) _G_parse_options_requote=: ; break ;; -*) func_fatal_help "unrecognised option: '$_G_opt'" ;; *) set dummy "$_G_opt" ${1+"$@"}; shift _G_match_parse_options=false break ;; esac if $_G_match_parse_options; then _G_parse_options_requote=: fi done if $_G_parse_options_requote; then # save modified positional parameters for caller func_quote eval ${1+"$@"} func_parse_options_result=$func_quote_result fi } # func_validate_options [ARG]... # ------------------------------ # Perform any sanity checks on option settings and/or unconsumed # arguments. func_hookable func_validate_options func_validate_options () { $debug_cmd # Display all warnings if -W was not given. test -n "$opt_warning_types" || opt_warning_types=" $warning_categories" func_run_hooks func_validate_options ${1+"$@"} func_propagate_result func_run_hooks func_validate_options # Bail if the options were screwed! $exit_cmd $EXIT_FAILURE } ## ----------------- ## ## Helper functions. ## ## ----------------- ## # This section contains the helper functions used by the rest of the # hookable option parser framework in ascii-betical order. # func_fatal_help ARG... # ---------------------- # Echo program name prefixed message to standard error, followed by # a help hint, and exit. func_fatal_help () { $debug_cmd eval \$ECHO \""Usage: $usage"\" eval \$ECHO \""$fatal_help"\" func_error ${1+"$@"} exit $EXIT_FAILURE } # func_help # --------- # Echo long help message to standard output and exit. func_help () { $debug_cmd func_usage_message $ECHO "$long_help_message" exit 0 } # func_missing_arg ARGNAME # ------------------------ # Echo program name prefixed message to standard error and set global # exit_cmd. func_missing_arg () { $debug_cmd func_error "Missing argument for '$1'." exit_cmd=exit } # func_split_equals STRING # ------------------------ # Set func_split_equals_lhs and func_split_equals_rhs shell variables # after splitting STRING at the '=' sign. test -z "$_G_HAVE_XSI_OPS" \ && (eval 'x=a/b/c; test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ && _G_HAVE_XSI_OPS=yes if test yes = "$_G_HAVE_XSI_OPS" then # This is an XSI compatible shell, allowing a faster implementation... eval 'func_split_equals () { $debug_cmd func_split_equals_lhs=${1%%=*} func_split_equals_rhs=${1#*=} if test "x$func_split_equals_lhs" = "x$1"; then func_split_equals_rhs= fi }' else # ...otherwise fall back to using expr, which is often a shell builtin. func_split_equals () { $debug_cmd func_split_equals_lhs=`expr "x$1" : 'x\([^=]*\)'` func_split_equals_rhs= test "x$func_split_equals_lhs=" = "x$1" \ || func_split_equals_rhs=`expr "x$1" : 'x[^=]*=\(.*\)$'` } fi #func_split_equals # func_split_short_opt SHORTOPT # ----------------------------- # Set func_split_short_opt_name and func_split_short_opt_arg shell # variables after splitting SHORTOPT after the 2nd character. if test yes = "$_G_HAVE_XSI_OPS" then # This is an XSI compatible shell, allowing a faster implementation... eval 'func_split_short_opt () { $debug_cmd func_split_short_opt_arg=${1#??} func_split_short_opt_name=${1%"$func_split_short_opt_arg"} }' else # ...otherwise fall back to using expr, which is often a shell builtin. func_split_short_opt () { $debug_cmd func_split_short_opt_name=`expr "x$1" : 'x\(-.\)'` func_split_short_opt_arg=`expr "x$1" : 'x-.\(.*\)$'` } fi #func_split_short_opt # func_usage # ---------- # Echo short help message to standard output and exit. func_usage () { $debug_cmd func_usage_message $ECHO "Run '$progname --help |${PAGER-more}' for full usage" exit 0 } # func_usage_message # ------------------ # Echo short help message to standard output. func_usage_message () { $debug_cmd eval \$ECHO \""Usage: $usage"\" echo $SED -n 's|^# || /^Written by/{ x;p;x } h /^Written by/q' < "$progpath" echo eval \$ECHO \""$usage_message"\" } # func_version # ------------ # Echo version message to standard output and exit. # The version message is extracted from the calling file's header # comments, with leading '# ' stripped: # 1. First display the progname and version # 2. Followed by the header comment line matching /^# Written by / # 3. Then a blank line followed by the first following line matching # /^# Copyright / # 4. Immediately followed by any lines between the previous matches, # except lines preceding the intervening completely blank line. # For example, see the header comments of this file. func_version () { $debug_cmd printf '%s\n' "$progname $scriptversion" $SED -n ' /^# Written by /!b s|^# ||; p; n :fwd2blnk /./ { n b fwd2blnk } p; n :holdwrnt s|^# || s|^# *$|| /^Copyright /!{ /./H n b holdwrnt } s|\((C)\)[ 0-9,-]*[ ,-]\([1-9][0-9]* \)|\1 \2| G s|\(\n\)\n*|\1|g p; q' < "$progpath" exit $? } # Local variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-pattern: "30/scriptversion=%:y-%02m-%02d.%02H; # UTC" # time-stamp-time-zone: "UTC" # End: # Set a version string. scriptversion='(GNU libtool) 2.4.7' # func_echo ARG... # ---------------- # Libtool also displays the current mode in messages, so override # funclib.sh func_echo with this custom definition. func_echo () { $debug_cmd _G_message=$* func_echo_IFS=$IFS IFS=$nl for _G_line in $_G_message; do IFS=$func_echo_IFS $ECHO "$progname${opt_mode+: $opt_mode}: $_G_line" done IFS=$func_echo_IFS } # func_warning ARG... # ------------------- # Libtool warnings are not categorized, so override funclib.sh # func_warning with this simpler definition. func_warning () { $debug_cmd $warning_func ${1+"$@"} } ## ---------------- ## ## Options parsing. ## ## ---------------- ## # Hook in the functions to make sure our own options are parsed during # the option parsing loop. usage='$progpath [OPTION]... [MODE-ARG]...' # Short help message in response to '-h'. usage_message="Options: --config show all configuration variables --debug enable verbose shell tracing -n, --dry-run display commands without modifying any files --features display basic configuration information and exit --mode=MODE use operation mode MODE --no-warnings equivalent to '-Wnone' --preserve-dup-deps don't remove duplicate dependency libraries --quiet, --silent don't print informational messages --tag=TAG use configuration variables from tag TAG -v, --verbose print more informational messages than default --version print version information -W, --warnings=CATEGORY report the warnings falling in CATEGORY [all] -h, --help, --help-all print short, long, or detailed help message " # Additional text appended to 'usage_message' in response to '--help'. func_help () { $debug_cmd func_usage_message $ECHO "$long_help_message MODE must be one of the following: clean remove files from the build directory compile compile a source file into a libtool object execute automatically set library path, then run a program finish complete the installation of libtool libraries install install libraries or executables link create a library or an executable uninstall remove libraries from an installed directory MODE-ARGS vary depending on the MODE. When passed as first option, '--mode=MODE' may be abbreviated as 'MODE' or a unique abbreviation of that. Try '$progname --help --mode=MODE' for a more detailed description of MODE. When reporting a bug, please describe a test case to reproduce it and include the following information: host-triplet: $host shell: $SHELL compiler: $LTCC compiler flags: $LTCFLAGS linker: $LD (gnu? $with_gnu_ld) version: $progname $scriptversion Debian-2.4.7-7~deb12u1 automake: `($AUTOMAKE --version) 2>/dev/null |$SED 1q` autoconf: `($AUTOCONF --version) 2>/dev/null |$SED 1q` Report bugs to . GNU libtool home page: . General help using GNU software: ." exit 0 } # func_lo2o OBJECT-NAME # --------------------- # Transform OBJECT-NAME from a '.lo' suffix to the platform specific # object suffix. lo2o=s/\\.lo\$/.$objext/ o2lo=s/\\.$objext\$/.lo/ if test yes = "$_G_HAVE_XSI_OPS"; then eval 'func_lo2o () { case $1 in *.lo) func_lo2o_result=${1%.lo}.$objext ;; * ) func_lo2o_result=$1 ;; esac }' # func_xform LIBOBJ-OR-SOURCE # --------------------------- # Transform LIBOBJ-OR-SOURCE from a '.o' or '.c' (or otherwise) # suffix to a '.lo' libtool-object suffix. eval 'func_xform () { func_xform_result=${1%.*}.lo }' else # ...otherwise fall back to using sed. func_lo2o () { func_lo2o_result=`$ECHO "$1" | $SED "$lo2o"` } func_xform () { func_xform_result=`$ECHO "$1" | $SED 's|\.[^.]*$|.lo|'` } fi # func_fatal_configuration ARG... # ------------------------------- # Echo program name prefixed message to standard error, followed by # a configuration failure hint, and exit. func_fatal_configuration () { func_fatal_error ${1+"$@"} \ "See the $PACKAGE documentation for more information." \ "Fatal configuration error." } # func_config # ----------- # Display the configuration for all the tags in this script. func_config () { re_begincf='^# ### BEGIN LIBTOOL' re_endcf='^# ### END LIBTOOL' # Default configuration. $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" # Now print the configurations for the tags. for tagname in $taglist; do $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" done exit $? } # func_features # ------------- # Display the features supported by this script. func_features () { echo "host: $host" if test yes = "$build_libtool_libs"; then echo "enable shared libraries" else echo "disable shared libraries" fi if test yes = "$build_old_libs"; then echo "enable static libraries" else echo "disable static libraries" fi exit $? } # func_enable_tag TAGNAME # ----------------------- # Verify that TAGNAME is valid, and either flag an error and exit, or # enable the TAGNAME tag. We also add TAGNAME to the global $taglist # variable here. func_enable_tag () { # Global variable: tagname=$1 re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" sed_extractcf=/$re_begincf/,/$re_endcf/p # Validate tagname. case $tagname in *[!-_A-Za-z0-9,/]*) func_fatal_error "invalid tag name: $tagname" ;; esac # Don't test for the "default" C tag, as we know it's # there but not specially marked. case $tagname in CC) ;; *) if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then taglist="$taglist $tagname" # Evaluate the configuration. Be careful to quote the path # and the sed script, to avoid splitting on whitespace, but # also don't use non-portable quotes within backquotes within # quotes we have to do it in 2 steps: extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` eval "$extractedcf" else func_error "ignoring unknown tag $tagname" fi ;; esac } # func_check_version_match # ------------------------ # Ensure that we are using m4 macros, and libtool script from the same # release of libtool. func_check_version_match () { if test "$package_revision" != "$macro_revision"; then if test "$VERSION" != "$macro_version"; then if test -z "$macro_version"; then cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from an older release. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from $PACKAGE $macro_version. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF fi else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, $progname: but the definition of this LT_INIT comes from revision $macro_revision. $progname: You should recreate aclocal.m4 with macros from revision $package_revision $progname: of $PACKAGE $VERSION and run autoconf again. _LT_EOF fi exit $EXIT_MISMATCH fi } # libtool_options_prep [ARG]... # ----------------------------- # Preparation for options parsed by libtool. libtool_options_prep () { $debug_mode # Option defaults: opt_config=false opt_dlopen= opt_dry_run=false opt_help=false opt_mode= opt_preserve_dup_deps=false opt_quiet=false nonopt= preserve_args= _G_rc_lt_options_prep=: _G_rc_lt_options_prep=: # Shorthand for --mode=foo, only valid as the first argument case $1 in clean|clea|cle|cl) shift; set dummy --mode clean ${1+"$@"}; shift ;; compile|compil|compi|comp|com|co|c) shift; set dummy --mode compile ${1+"$@"}; shift ;; execute|execut|execu|exec|exe|ex|e) shift; set dummy --mode execute ${1+"$@"}; shift ;; finish|finis|fini|fin|fi|f) shift; set dummy --mode finish ${1+"$@"}; shift ;; install|instal|insta|inst|ins|in|i) shift; set dummy --mode install ${1+"$@"}; shift ;; link|lin|li|l) shift; set dummy --mode link ${1+"$@"}; shift ;; uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) shift; set dummy --mode uninstall ${1+"$@"}; shift ;; *) _G_rc_lt_options_prep=false ;; esac if $_G_rc_lt_options_prep; then # Pass back the list of options. func_quote eval ${1+"$@"} libtool_options_prep_result=$func_quote_result fi } func_add_hook func_options_prep libtool_options_prep # libtool_parse_options [ARG]... # --------------------------------- # Provide handling for libtool specific options. libtool_parse_options () { $debug_cmd _G_rc_lt_parse_options=false # Perform our own loop to consume as many options as possible in # each iteration. while test $# -gt 0; do _G_match_lt_parse_options=: _G_opt=$1 shift case $_G_opt in --dry-run|--dryrun|-n) opt_dry_run=: ;; --config) func_config ;; --dlopen|-dlopen) opt_dlopen="${opt_dlopen+$opt_dlopen }$1" shift ;; --preserve-dup-deps) opt_preserve_dup_deps=: ;; --features) func_features ;; --finish) set dummy --mode finish ${1+"$@"}; shift ;; --help) opt_help=: ;; --help-all) opt_help=': help-all' ;; --mode) test $# = 0 && func_missing_arg $_G_opt && break opt_mode=$1 case $1 in # Valid mode arguments: clean|compile|execute|finish|install|link|relink|uninstall) ;; # Catch anything else as an error *) func_error "invalid argument for $_G_opt" exit_cmd=exit break ;; esac shift ;; --no-silent|--no-quiet) opt_quiet=false func_append preserve_args " $_G_opt" ;; --no-warnings|--no-warning|--no-warn) opt_warning=false func_append preserve_args " $_G_opt" ;; --no-verbose) opt_verbose=false func_append preserve_args " $_G_opt" ;; --silent|--quiet) opt_quiet=: opt_verbose=false func_append preserve_args " $_G_opt" ;; --tag) test $# = 0 && func_missing_arg $_G_opt && break opt_tag=$1 func_append preserve_args " $_G_opt $1" func_enable_tag "$1" shift ;; --verbose|-v) opt_quiet=false opt_verbose=: func_append preserve_args " $_G_opt" ;; # An option not handled by this hook function: *) set dummy "$_G_opt" ${1+"$@"} ; shift _G_match_lt_parse_options=false break ;; esac $_G_match_lt_parse_options && _G_rc_lt_parse_options=: done if $_G_rc_lt_parse_options; then # save modified positional parameters for caller func_quote eval ${1+"$@"} libtool_parse_options_result=$func_quote_result fi } func_add_hook func_parse_options libtool_parse_options # libtool_validate_options [ARG]... # --------------------------------- # Perform any sanity checks on option settings and/or unconsumed # arguments. libtool_validate_options () { # save first non-option argument if test 0 -lt $#; then nonopt=$1 shift fi # preserve --debug test : = "$debug_cmd" || func_append preserve_args " --debug" case $host in # Solaris2 added to fix http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16452 # see also: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59788 *cygwin* | *mingw* | *pw32* | *cegcc* | *solaris2* | *os2*) # don't eliminate duplications in $postdeps and $predeps opt_duplicate_compiler_generated_deps=: ;; *) opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps ;; esac $opt_help || { # Sanity checks first: func_check_version_match test yes != "$build_libtool_libs" \ && test yes != "$build_old_libs" \ && func_fatal_configuration "not configured to build any kind of library" # Darwin sucks eval std_shrext=\"$shrext_cmds\" # Only execute mode is allowed to have -dlopen flags. if test -n "$opt_dlopen" && test execute != "$opt_mode"; then func_error "unrecognized option '-dlopen'" $ECHO "$help" 1>&2 exit $EXIT_FAILURE fi # Change the help message to a mode-specific one. generic_help=$help help="Try '$progname --help --mode=$opt_mode' for more information." } # Pass back the unparsed argument list func_quote eval ${1+"$@"} libtool_validate_options_result=$func_quote_result } func_add_hook func_validate_options libtool_validate_options # Process options as early as possible so that --help and --version # can return quickly. func_options ${1+"$@"} eval set dummy "$func_options_result"; shift ## ----------- ## ## Main. ## ## ----------- ## magic='%%%MAGIC variable%%%' magic_exe='%%%MAGIC EXE variable%%%' # Global variables. extracted_archives= extracted_serial=0 # If this variable is set in any of the actions, the command in it # will be execed at the end. This prevents here-documents from being # left over by shells. exec_cmd= # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $1 _LTECHO_EOF' } # func_generated_by_libtool # True iff stdin has been generated by Libtool. This function is only # a basic sanity check; it will hardly flush out determined imposters. func_generated_by_libtool_p () { $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 } # func_lalib_p file # True iff FILE is a libtool '.la' library or '.lo' object file. # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_lalib_p () { test -f "$1" && $SED -e 4q "$1" 2>/dev/null | func_generated_by_libtool_p } # func_lalib_unsafe_p file # True iff FILE is a libtool '.la' library or '.lo' object file. # This function implements the same check as func_lalib_p without # resorting to external programs. To this end, it redirects stdin and # closes it afterwards, without saving the original file descriptor. # As a safety measure, use it only where a negative result would be # fatal anyway. Works if 'file' does not exist. func_lalib_unsafe_p () { lalib_p=no if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then for lalib_p_l in 1 2 3 4 do read lalib_p_line case $lalib_p_line in \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; esac done exec 0<&5 5<&- fi test yes = "$lalib_p" } # func_ltwrapper_script_p file # True iff FILE is a libtool wrapper script # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_script_p () { test -f "$1" && $lt_truncate_bin < "$1" 2>/dev/null | func_generated_by_libtool_p } # func_ltwrapper_executable_p file # True iff FILE is a libtool wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_executable_p () { func_ltwrapper_exec_suffix= case $1 in *.exe) ;; *) func_ltwrapper_exec_suffix=.exe ;; esac $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 } # func_ltwrapper_scriptname file # Assumes file is an ltwrapper_executable # uses $file to determine the appropriate filename for a # temporary ltwrapper_script. func_ltwrapper_scriptname () { func_dirname_and_basename "$1" "" "." func_stripname '' '.exe' "$func_basename_result" func_ltwrapper_scriptname_result=$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper } # func_ltwrapper_p file # True iff FILE is a libtool wrapper script or wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_p () { func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" } # func_execute_cmds commands fail_cmd # Execute tilde-delimited COMMANDS. # If FAIL_CMD is given, eval that upon failure. # FAIL_CMD may read-access the current command in variable CMD! func_execute_cmds () { $debug_cmd save_ifs=$IFS; IFS='~' for cmd in $1; do IFS=$sp$nl eval cmd=\"$cmd\" IFS=$save_ifs func_show_eval "$cmd" "${2-:}" done IFS=$save_ifs } # func_source file # Source FILE, adding directory component if necessary. # Note that it is not necessary on cygwin/mingw to append a dot to # FILE even if both FILE and FILE.exe exist: automatic-append-.exe # behavior happens only for exec(3), not for open(2)! Also, sourcing # 'FILE.' does not work on cygwin managed mounts. func_source () { $debug_cmd case $1 in */* | *\\*) . "$1" ;; *) . "./$1" ;; esac } # func_resolve_sysroot PATH # Replace a leading = in PATH with a sysroot. Store the result into # func_resolve_sysroot_result func_resolve_sysroot () { func_resolve_sysroot_result=$1 case $func_resolve_sysroot_result in =*) func_stripname '=' '' "$func_resolve_sysroot_result" func_resolve_sysroot_result=$lt_sysroot$func_stripname_result ;; esac } # func_replace_sysroot PATH # If PATH begins with the sysroot, replace it with = and # store the result into func_replace_sysroot_result. func_replace_sysroot () { case $lt_sysroot:$1 in ?*:"$lt_sysroot"*) func_stripname "$lt_sysroot" '' "$1" func_replace_sysroot_result='='$func_stripname_result ;; *) # Including no sysroot. func_replace_sysroot_result=$1 ;; esac } # func_infer_tag arg # Infer tagged configuration to use if any are available and # if one wasn't chosen via the "--tag" command line option. # Only attempt this if the compiler in the base compile # command doesn't match the default compiler. # arg is usually of the form 'gcc ...' func_infer_tag () { $debug_cmd if test -n "$available_tags" && test -z "$tagname"; then CC_quoted= for arg in $CC; do func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case $@ in # Blanks in the command may have been stripped by the calling shell, # but not from the CC environment variable when configure was run. " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; # Blanks at the start of $base_compile will cause this to fail # if we don't check for them as well. *) for z in $available_tags; do if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then # Evaluate the configuration. eval "`$SED -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" CC_quoted= for arg in $CC; do # Double-quote args containing other shell metacharacters. func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case "$@ " in " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) # The compiler in the base compile command matches # the one in the tagged configuration. # Assume this is the tagged configuration we want. tagname=$z break ;; esac fi done # If $tagname still isn't set, then no tagged configuration # was found and let the user know that the "--tag" command # line option must be used. if test -z "$tagname"; then func_echo "unable to infer tagged configuration" func_fatal_error "specify a tag with '--tag'" # else # func_verbose "using $tagname tagged configuration" fi ;; esac fi } # func_write_libtool_object output_name pic_name nonpic_name # Create a libtool object file (analogous to a ".la" file), # but don't create it if we're doing a dry run. func_write_libtool_object () { write_libobj=$1 if test yes = "$build_libtool_libs"; then write_lobj=\'$2\' else write_lobj=none fi if test yes = "$build_old_libs"; then write_oldobj=\'$3\' else write_oldobj=none fi $opt_dry_run || { cat >${write_libobj}T </dev/null` if test "$?" -eq 0 && test -n "$func_convert_core_file_wine_to_w32_tmp"; then func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | $SED -e "$sed_naive_backslashify"` else func_convert_core_file_wine_to_w32_result= fi fi } # end: func_convert_core_file_wine_to_w32 # func_convert_core_path_wine_to_w32 ARG # Helper function used by path conversion functions when $build is *nix, and # $host is mingw, cygwin, or some other w32 environment. Relies on a correctly # configured wine environment available, with the winepath program in $build's # $PATH. Assumes ARG has no leading or trailing path separator characters. # # ARG is path to be converted from $build format to win32. # Result is available in $func_convert_core_path_wine_to_w32_result. # Unconvertible file (directory) names in ARG are skipped; if no directory names # are convertible, then the result may be empty. func_convert_core_path_wine_to_w32 () { $debug_cmd # unfortunately, winepath doesn't convert paths, only file names func_convert_core_path_wine_to_w32_result= if test -n "$1"; then oldIFS=$IFS IFS=: for func_convert_core_path_wine_to_w32_f in $1; do IFS=$oldIFS func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" if test -n "$func_convert_core_file_wine_to_w32_result"; then if test -z "$func_convert_core_path_wine_to_w32_result"; then func_convert_core_path_wine_to_w32_result=$func_convert_core_file_wine_to_w32_result else func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" fi fi done IFS=$oldIFS fi } # end: func_convert_core_path_wine_to_w32 # func_cygpath ARGS... # Wrapper around calling the cygpath program via LT_CYGPATH. This is used when # when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) # $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or # (2), returns the Cygwin file name or path in func_cygpath_result (input # file name or path is assumed to be in w32 format, as previously converted # from $build's *nix or MSYS format). In case (3), returns the w32 file name # or path in func_cygpath_result (input file name or path is assumed to be in # Cygwin format). Returns an empty string on error. # # ARGS are passed to cygpath, with the last one being the file name or path to # be converted. # # Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH # environment variable; do not put it in $PATH. func_cygpath () { $debug_cmd if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` if test "$?" -ne 0; then # on failure, ensure result is empty func_cygpath_result= fi else func_cygpath_result= func_error "LT_CYGPATH is empty or specifies non-existent file: '$LT_CYGPATH'" fi } #end: func_cygpath # func_convert_core_msys_to_w32 ARG # Convert file name or path ARG from MSYS format to w32 format. Return # result in func_convert_core_msys_to_w32_result. func_convert_core_msys_to_w32 () { $debug_cmd # awkward: cmd appends spaces to result func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | $SED -e 's/[ ]*$//' -e "$sed_naive_backslashify"` } #end: func_convert_core_msys_to_w32 # func_convert_file_check ARG1 ARG2 # Verify that ARG1 (a file name in $build format) was converted to $host # format in ARG2. Otherwise, emit an error message, but continue (resetting # func_to_host_file_result to ARG1). func_convert_file_check () { $debug_cmd if test -z "$2" && test -n "$1"; then func_error "Could not determine host file name corresponding to" func_error " '$1'" func_error "Continuing, but uninstalled executables may not work." # Fallback: func_to_host_file_result=$1 fi } # end func_convert_file_check # func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH # Verify that FROM_PATH (a path in $build format) was converted to $host # format in TO_PATH. Otherwise, emit an error message, but continue, resetting # func_to_host_file_result to a simplistic fallback value (see below). func_convert_path_check () { $debug_cmd if test -z "$4" && test -n "$3"; then func_error "Could not determine the host path corresponding to" func_error " '$3'" func_error "Continuing, but uninstalled executables may not work." # Fallback. This is a deliberately simplistic "conversion" and # should not be "improved". See libtool.info. if test "x$1" != "x$2"; then lt_replace_pathsep_chars="s|$1|$2|g" func_to_host_path_result=`echo "$3" | $SED -e "$lt_replace_pathsep_chars"` else func_to_host_path_result=$3 fi fi } # end func_convert_path_check # func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG # Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT # and appending REPL if ORIG matches BACKPAT. func_convert_path_front_back_pathsep () { $debug_cmd case $4 in $1 ) func_to_host_path_result=$3$func_to_host_path_result ;; esac case $4 in $2 ) func_append func_to_host_path_result "$3" ;; esac } # end func_convert_path_front_back_pathsep ################################################## # $build to $host FILE NAME CONVERSION FUNCTIONS # ################################################## # invoked via '$to_host_file_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # Result will be available in $func_to_host_file_result. # func_to_host_file ARG # Converts the file name ARG from $build format to $host format. Return result # in func_to_host_file_result. func_to_host_file () { $debug_cmd $to_host_file_cmd "$1" } # end func_to_host_file # func_to_tool_file ARG LAZY # converts the file name ARG from $build format to toolchain format. Return # result in func_to_tool_file_result. If the conversion in use is listed # in (the comma separated) LAZY, no conversion takes place. func_to_tool_file () { $debug_cmd case ,$2, in *,"$to_tool_file_cmd",*) func_to_tool_file_result=$1 ;; *) $to_tool_file_cmd "$1" func_to_tool_file_result=$func_to_host_file_result ;; esac } # end func_to_tool_file # func_convert_file_noop ARG # Copy ARG to func_to_host_file_result. func_convert_file_noop () { func_to_host_file_result=$1 } # end func_convert_file_noop # func_convert_file_msys_to_w32 ARG # Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_file_result. func_convert_file_msys_to_w32 () { $debug_cmd func_to_host_file_result=$1 if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_to_host_file_result=$func_convert_core_msys_to_w32_result fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_w32 # func_convert_file_cygwin_to_w32 ARG # Convert file name ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_file_cygwin_to_w32 () { $debug_cmd func_to_host_file_result=$1 if test -n "$1"; then # because $build is cygwin, we call "the" cygpath in $PATH; no need to use # LT_CYGPATH in this case. func_to_host_file_result=`cygpath -m "$1"` fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_cygwin_to_w32 # func_convert_file_nix_to_w32 ARG # Convert file name ARG from *nix to w32 format. Requires a wine environment # and a working winepath. Returns result in func_to_host_file_result. func_convert_file_nix_to_w32 () { $debug_cmd func_to_host_file_result=$1 if test -n "$1"; then func_convert_core_file_wine_to_w32 "$1" func_to_host_file_result=$func_convert_core_file_wine_to_w32_result fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_w32 # func_convert_file_msys_to_cygwin ARG # Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_file_msys_to_cygwin () { $debug_cmd func_to_host_file_result=$1 if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_cygpath -u "$func_convert_core_msys_to_w32_result" func_to_host_file_result=$func_cygpath_result fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_cygwin # func_convert_file_nix_to_cygwin ARG # Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed # in a wine environment, working winepath, and LT_CYGPATH set. Returns result # in func_to_host_file_result. func_convert_file_nix_to_cygwin () { $debug_cmd func_to_host_file_result=$1 if test -n "$1"; then # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. func_convert_core_file_wine_to_w32 "$1" func_cygpath -u "$func_convert_core_file_wine_to_w32_result" func_to_host_file_result=$func_cygpath_result fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_cygwin ############################################# # $build to $host PATH CONVERSION FUNCTIONS # ############################################# # invoked via '$to_host_path_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # The result will be available in $func_to_host_path_result. # # Path separators are also converted from $build format to $host format. If # ARG begins or ends with a path separator character, it is preserved (but # converted to $host format) on output. # # All path conversion functions are named using the following convention: # file name conversion function : func_convert_file_X_to_Y () # path conversion function : func_convert_path_X_to_Y () # where, for any given $build/$host combination the 'X_to_Y' value is the # same. If conversion functions are added for new $build/$host combinations, # the two new functions must follow this pattern, or func_init_to_host_path_cmd # will break. # func_init_to_host_path_cmd # Ensures that function "pointer" variable $to_host_path_cmd is set to the # appropriate value, based on the value of $to_host_file_cmd. to_host_path_cmd= func_init_to_host_path_cmd () { $debug_cmd if test -z "$to_host_path_cmd"; then func_stripname 'func_convert_file_' '' "$to_host_file_cmd" to_host_path_cmd=func_convert_path_$func_stripname_result fi } # func_to_host_path ARG # Converts the path ARG from $build format to $host format. Return result # in func_to_host_path_result. func_to_host_path () { $debug_cmd func_init_to_host_path_cmd $to_host_path_cmd "$1" } # end func_to_host_path # func_convert_path_noop ARG # Copy ARG to func_to_host_path_result. func_convert_path_noop () { func_to_host_path_result=$1 } # end func_convert_path_noop # func_convert_path_msys_to_w32 ARG # Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_path_result. func_convert_path_msys_to_w32 () { $debug_cmd func_to_host_path_result=$1 if test -n "$1"; then # Remove leading and trailing path separator characters from ARG. MSYS # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; # and winepath ignores them completely. func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result=$func_convert_core_msys_to_w32_result func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_msys_to_w32 # func_convert_path_cygwin_to_w32 ARG # Convert path ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_path_cygwin_to_w32 () { $debug_cmd func_to_host_path_result=$1 if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_cygwin_to_w32 # func_convert_path_nix_to_w32 ARG # Convert path ARG from *nix to w32 format. Requires a wine environment and # a working winepath. Returns result in func_to_host_file_result. func_convert_path_nix_to_w32 () { $debug_cmd func_to_host_path_result=$1 if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result=$func_convert_core_path_wine_to_w32_result func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_nix_to_w32 # func_convert_path_msys_to_cygwin ARG # Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_path_msys_to_cygwin () { $debug_cmd func_to_host_path_result=$1 if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_msys_to_w32_result" func_to_host_path_result=$func_cygpath_result func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_msys_to_cygwin # func_convert_path_nix_to_cygwin ARG # Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a # a wine environment, working winepath, and LT_CYGPATH set. Returns result in # func_to_host_file_result. func_convert_path_nix_to_cygwin () { $debug_cmd func_to_host_path_result=$1 if test -n "$1"; then # Remove leading and trailing path separator characters from # ARG. msys behavior is inconsistent here, cygpath turns them # into '.;' and ';.', and winepath ignores them completely. func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" func_to_host_path_result=$func_cygpath_result func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_nix_to_cygwin # func_dll_def_p FILE # True iff FILE is a Windows DLL '.def' file. # Keep in sync with _LT_DLL_DEF_P in libtool.m4 func_dll_def_p () { $debug_cmd func_dll_def_p_tmp=`$SED -n \ -e 's/^[ ]*//' \ -e '/^\(;.*\)*$/d' \ -e 's/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p' \ -e q \ "$1"` test DEF = "$func_dll_def_p_tmp" } # func_mode_compile arg... func_mode_compile () { $debug_cmd # Get the compilation command and the source file. base_compile= srcfile=$nonopt # always keep a non-empty value in "srcfile" suppress_opt=yes suppress_output= arg_mode=normal libobj= later= pie_flag= for arg do case $arg_mode in arg ) # do not "continue". Instead, add this to base_compile lastarg=$arg arg_mode=normal ;; target ) libobj=$arg arg_mode=normal continue ;; normal ) # Accept any command-line options. case $arg in -o) test -n "$libobj" && \ func_fatal_error "you cannot specify '-o' more than once" arg_mode=target continue ;; -pie | -fpie | -fPIE) func_append pie_flag " $arg" continue ;; -shared | -static | -prefer-pic | -prefer-non-pic) func_append later " $arg" continue ;; -no-suppress) suppress_opt=no continue ;; -Xcompiler) arg_mode=arg # the next one goes into the "base_compile" arg list continue # The current "srcfile" will either be retained or ;; # replaced later. I would guess that would be a bug. -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result lastarg= save_ifs=$IFS; IFS=, for arg in $args; do IFS=$save_ifs func_append_quoted lastarg "$arg" done IFS=$save_ifs func_stripname ' ' '' "$lastarg" lastarg=$func_stripname_result # Add the arguments to base_compile. func_append base_compile " $lastarg" continue ;; *) # Accept the current argument as the source file. # The previous "srcfile" becomes the current argument. # lastarg=$srcfile srcfile=$arg ;; esac # case $arg ;; esac # case $arg_mode # Aesthetically quote the previous argument. func_append_quoted base_compile "$lastarg" done # for arg case $arg_mode in arg) func_fatal_error "you must specify an argument for -Xcompile" ;; target) func_fatal_error "you must specify a target with '-o'" ;; *) # Get the name of the library object. test -z "$libobj" && { func_basename "$srcfile" libobj=$func_basename_result } ;; esac # Recognize several different file suffixes. # If the user specifies -o file.o, it is replaced with file.lo case $libobj in *.[cCFSifmso] | \ *.ada | *.adb | *.ads | *.asm | \ *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) func_xform "$libobj" libobj=$func_xform_result ;; esac case $libobj in *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; *) func_fatal_error "cannot determine name of library object from '$libobj'" ;; esac func_infer_tag $base_compile for arg in $later; do case $arg in -shared) test yes = "$build_libtool_libs" \ || func_fatal_configuration "cannot build a shared library" build_old_libs=no continue ;; -static) build_libtool_libs=no build_old_libs=yes continue ;; -prefer-pic) pic_mode=yes continue ;; -prefer-non-pic) pic_mode=no continue ;; esac done func_quote_arg pretty "$libobj" test "X$libobj" != "X$func_quote_arg_result" \ && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ && func_warning "libobj name '$libobj' may not contain shell special characters." func_dirname_and_basename "$obj" "/" "" objname=$func_basename_result xdir=$func_dirname_result lobj=$xdir$objdir/$objname test -z "$base_compile" && \ func_fatal_help "you must specify a compilation command" # Delete any leftover library objects. if test yes = "$build_old_libs"; then removelist="$obj $lobj $libobj ${libobj}T" else removelist="$lobj $libobj ${libobj}T" fi # On Cygwin there's no "real" PIC flag so we must build both object types case $host_os in cygwin* | mingw* | pw32* | os2* | cegcc*) pic_mode=default ;; esac if test no = "$pic_mode" && test pass_all != "$deplibs_check_method"; then # non-PIC code in shared libraries is not supported pic_mode=default fi # Calculate the filename of the output object if compiler does # not support -o with -c if test no = "$compiler_c_o"; then output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.$objext lockfile=$output_obj.lock else output_obj= need_locks=no lockfile= fi # Lock this critical section if it is needed # We use this script file to make the link, it avoids creating a new file if test yes = "$need_locks"; then until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done elif test warn = "$need_locks"; then if test -f "$lockfile"; then $ECHO "\ *** ERROR, $lockfile exists and contains: `cat $lockfile 2>/dev/null` This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support '-c' and '-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi func_append removelist " $output_obj" $ECHO "$srcfile" > "$lockfile" fi $opt_dry_run || $RM $removelist func_append removelist " $lockfile" trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 srcfile=$func_to_tool_file_result func_quote_arg pretty "$srcfile" qsrcfile=$func_quote_arg_result # Only build a PIC object if we are building libtool libraries. if test yes = "$build_libtool_libs"; then # Without this assignment, base_compile gets emptied. fbsd_hideous_sh_bug=$base_compile if test no != "$pic_mode"; then command="$base_compile $qsrcfile $pic_flag" else # Don't build PIC code command="$base_compile $qsrcfile" fi func_mkdir_p "$xdir$objdir" if test -z "$output_obj"; then # Place PIC objects in $objdir func_append command " -o $lobj" fi func_show_eval_locale "$command" \ 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' if test warn = "$need_locks" && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support '-c' and '-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed, then go on to compile the next one if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then func_show_eval '$MV "$output_obj" "$lobj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi # Allow error messages only from the first compilation. if test yes = "$suppress_opt"; then suppress_output=' >/dev/null 2>&1' fi fi # Only build a position-dependent object if we build old libraries. if test yes = "$build_old_libs"; then if test yes != "$pic_mode"; then # Don't build PIC code command="$base_compile $qsrcfile$pie_flag" else command="$base_compile $qsrcfile $pic_flag" fi if test yes = "$compiler_c_o"; then func_append command " -o $obj" fi # Suppress compiler output if we already did a PIC compilation. func_append command "$suppress_output" func_show_eval_locale "$command" \ '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' if test warn = "$need_locks" && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support '-c' and '-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then func_show_eval '$MV "$output_obj" "$obj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi fi $opt_dry_run || { func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" # Unlock the critical section if it was locked if test no != "$need_locks"; then removelist=$lockfile $RM "$lockfile" fi } exit $EXIT_SUCCESS } $opt_help || { test compile = "$opt_mode" && func_mode_compile ${1+"$@"} } func_mode_help () { # We need to display help for each of the modes. case $opt_mode in "") # Generic help is extracted from the usage comments # at the start of this file. func_help ;; clean) $ECHO \ "Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... Remove files from the build directory. RM is the name of the program to use to delete files associated with each FILE (typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed to RM. If FILE is a libtool library, object or program, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; compile) $ECHO \ "Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE Compile a source file into a libtool library object. This mode accepts the following additional options: -o OUTPUT-FILE set the output file name to OUTPUT-FILE -no-suppress do not suppress compiler output for multiple passes -prefer-pic try to build PIC objects only -prefer-non-pic try to build non-PIC objects only -shared do not build a '.o' file suitable for static linking -static only build a '.o' file suitable for static linking -Wc,FLAG -Xcompiler FLAG pass FLAG directly to the compiler COMPILE-COMMAND is a command to be used in creating a 'standard' object file from the given SOURCEFILE. The output file name is determined by removing the directory component from SOURCEFILE, then substituting the C source code suffix '.c' with the library object suffix, '.lo'." ;; execute) $ECHO \ "Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... Automatically set library path, then run a program. This mode accepts the following additional options: -dlopen FILE add the directory containing FILE to the library path This mode sets the library path environment variable according to '-dlopen' flags. If any of the ARGS are libtool executable wrappers, then they are translated into their corresponding uninstalled binary, and any of their required library directories are added to the library path. Then, COMMAND is executed, with ARGS as arguments." ;; finish) $ECHO \ "Usage: $progname [OPTION]... --mode=finish [LIBDIR]... Complete the installation of libtool libraries. Each LIBDIR is a directory that contains libtool libraries. The commands that this mode executes may require superuser privileges. Use the '--dry-run' option if you just want to see what would be executed." ;; install) $ECHO \ "Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... Install executables or libraries. INSTALL-COMMAND is the installation command. The first component should be either the 'install' or 'cp' program. The following components of INSTALL-COMMAND are treated specially: -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation The rest of the components are interpreted as arguments to that command (only BSD-compatible install options are recognized)." ;; link) $ECHO \ "Usage: $progname [OPTION]... --mode=link LINK-COMMAND... Link object files or libraries together to form another library, or to create an executable program. LINK-COMMAND is a command using the C compiler that you would use to create a program from several object files. The following components of LINK-COMMAND are treated specially: -all-static do not do any dynamic linking at all -avoid-version do not add a version suffix if possible -bindir BINDIR specify path to binaries directory (for systems where libraries must be found in the PATH setting at runtime) -dlopen FILE '-dlpreopen' FILE if it cannot be dlopened at runtime -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) -export-symbols SYMFILE try to export only the symbols listed in SYMFILE -export-symbols-regex REGEX try to export only the symbols matching REGEX -LLIBDIR search LIBDIR for required installed libraries -lNAME OUTPUT-FILE requires the installed library libNAME -module build a library that can dlopened -no-fast-install disable the fast-install mode -no-install link a not-installable executable -no-undefined declare that a library does not refer to external symbols -o OUTPUT-FILE create OUTPUT-FILE from the specified objects -objectlist FILE use a list of object files found in FILE to specify objects -os2dllname NAME force a short DLL name on OS/2 (no effect on other OSes) -precious-files-regex REGEX don't remove output files matching REGEX -release RELEASE specify package release information -rpath LIBDIR the created library will eventually be installed in LIBDIR -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries -shared only do dynamic linking of libtool libraries -shrext SUFFIX override the standard shared library file extension -static do not do any dynamic linking of uninstalled libtool libraries -static-libtool-libs do not do any dynamic linking of libtool libraries -version-info CURRENT[:REVISION[:AGE]] specify library version info [each variable defaults to 0] -weak LIBNAME declare that the target provides the LIBNAME interface -Wc,FLAG -Xcompiler FLAG pass linker-specific FLAG directly to the compiler -Wa,FLAG -Xassembler FLAG pass linker-specific FLAG directly to the assembler -Wl,FLAG -Xlinker FLAG pass linker-specific FLAG directly to the linker -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) All other options (arguments beginning with '-') are ignored. Every other argument is treated as a filename. Files ending in '.la' are treated as uninstalled libtool libraries, other files are standard or library object files. If the OUTPUT-FILE ends in '.la', then a libtool library is created, only library objects ('.lo' files) may be specified, and '-rpath' is required, except when creating a convenience library. If OUTPUT-FILE ends in '.a' or '.lib', then a standard library is created using 'ar' and 'ranlib', or on Windows using 'lib'. If OUTPUT-FILE ends in '.lo' or '.$objext', then a reloadable object file is created, otherwise an executable program is created." ;; uninstall) $ECHO \ "Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... Remove libraries from an installation directory. RM is the name of the program to use to delete files associated with each FILE (typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed to RM. If FILE is a libtool library, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; *) func_fatal_help "invalid operation mode '$opt_mode'" ;; esac echo $ECHO "Try '$progname --help' for more information about other modes." } # Now that we've collected a possible --mode arg, show help if necessary if $opt_help; then if test : = "$opt_help"; then func_mode_help else { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do func_mode_help done } | $SED -n '1p; 2,$s/^Usage:/ or: /p' { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do echo func_mode_help done } | $SED '1d /^When reporting/,/^Report/{ H d } $x /information about other modes/d /more detailed .*MODE/d s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' fi exit $? fi # func_mode_execute arg... func_mode_execute () { $debug_cmd # The first argument is the command name. cmd=$nonopt test -z "$cmd" && \ func_fatal_help "you must specify a COMMAND" # Handle -dlopen flags immediately. for file in $opt_dlopen; do test -f "$file" \ || func_fatal_help "'$file' is not a file" dir= case $file in *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "'$lib' is not a valid libtool archive" # Read the libtool library. dlname= library_names= func_source "$file" # Skip this library if it cannot be dlopened. if test -z "$dlname"; then # Warn if it was a shared library. test -n "$library_names" && \ func_warning "'$file' was not linked with '-export-dynamic'" continue fi func_dirname "$file" "" "." dir=$func_dirname_result if test -f "$dir/$objdir/$dlname"; then func_append dir "/$objdir" else if test ! -f "$dir/$dlname"; then func_fatal_error "cannot find '$dlname' in '$dir' or '$dir/$objdir'" fi fi ;; *.lo) # Just add the directory containing the .lo file. func_dirname "$file" "" "." dir=$func_dirname_result ;; *) func_warning "'-dlopen' is ignored for non-libtool libraries and objects" continue ;; esac # Get the absolute pathname. absdir=`cd "$dir" && pwd` test -n "$absdir" && dir=$absdir # Now add the directory to shlibpath_var. if eval "test -z \"\$$shlibpath_var\""; then eval "$shlibpath_var=\"\$dir\"" else eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" fi done # This variable tells wrapper scripts just to set shlibpath_var # rather than running their programs. libtool_execute_magic=$magic # Check if any of the arguments is a wrapper script. args= for file do case $file in -* | *.la | *.lo ) ;; *) # Do a test to see if this is really a libtool program. if func_ltwrapper_script_p "$file"; then func_source "$file" # Transform arg to wrapped name. file=$progdir/$program elif func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" func_source "$func_ltwrapper_scriptname_result" # Transform arg to wrapped name. file=$progdir/$program fi ;; esac # Quote arguments (to preserve shell metacharacters). func_append_quoted args "$file" done if $opt_dry_run; then # Display what would be done. if test -n "$shlibpath_var"; then eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" echo "export $shlibpath_var" fi $ECHO "$cmd$args" exit $EXIT_SUCCESS else if test -n "$shlibpath_var"; then # Export the shlibpath_var. eval "export $shlibpath_var" fi # Restore saved environment variables for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test \"\${save_$lt_var+set}\" = set; then $lt_var=\$save_$lt_var; export $lt_var else $lt_unset $lt_var fi" done # Now prepare to actually exec the command. exec_cmd=\$cmd$args fi } test execute = "$opt_mode" && func_mode_execute ${1+"$@"} # func_mode_finish arg... func_mode_finish () { $debug_cmd libs= libdirs= admincmds= for opt in "$nonopt" ${1+"$@"} do if test -d "$opt"; then func_append libdirs " $opt" elif test -f "$opt"; then if func_lalib_unsafe_p "$opt"; then func_append libs " $opt" else func_warning "'$opt' is not a valid libtool archive" fi else func_fatal_error "invalid argument '$opt'" fi done if test -n "$libs"; then if test -n "$lt_sysroot"; then sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" else sysroot_cmd= fi # Remove sysroot references if $opt_dry_run; then for lib in $libs; do echo "removing references to $lt_sysroot and '=' prefixes from $lib" done else tmpdir=`func_mktempdir` for lib in $libs; do $SED -e "$sysroot_cmd s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ > $tmpdir/tmp-la mv -f $tmpdir/tmp-la $lib done ${RM}r "$tmpdir" fi fi if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then for libdir in $libdirs; do if test -n "$finish_cmds"; then # Do each command in the finish commands. func_execute_cmds "$finish_cmds" 'admincmds="$admincmds '"$cmd"'"' fi if test -n "$finish_eval"; then # Do the single finish_eval. eval cmds=\"$finish_eval\" $opt_dry_run || eval "$cmds" || func_append admincmds " $cmds" fi done fi # Exit here if they wanted silent mode. $opt_quiet && exit $EXIT_SUCCESS if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then echo "----------------------------------------------------------------------" echo "Libraries have been installed in:" for libdir in $libdirs; do $ECHO " $libdir" done echo echo "If you ever happen to want to link against installed libraries" echo "in a given directory, LIBDIR, you must either use libtool, and" echo "specify the full pathname of the library, or use the '-LLIBDIR'" echo "flag during linking and do at least one of the following:" if test -n "$shlibpath_var"; then echo " - add LIBDIR to the '$shlibpath_var' environment variable" echo " during execution" fi if test -n "$runpath_var"; then echo " - add LIBDIR to the '$runpath_var' environment variable" echo " during linking" fi if test -n "$hardcode_libdir_flag_spec"; then libdir=LIBDIR eval flag=\"$hardcode_libdir_flag_spec\" $ECHO " - use the '$flag' linker flag" fi if test -n "$admincmds"; then $ECHO " - have your system administrator run these commands:$admincmds" fi if test -f /etc/ld.so.conf; then echo " - have your system administrator add LIBDIR to '/etc/ld.so.conf'" fi echo echo "See any operating system documentation about shared libraries for" case $host in solaris2.[6789]|solaris2.1[0-9]) echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" echo "pages." ;; *) echo "more information, such as the ld(1) and ld.so(8) manual pages." ;; esac echo "----------------------------------------------------------------------" fi exit $EXIT_SUCCESS } test finish = "$opt_mode" && func_mode_finish ${1+"$@"} # func_mode_install arg... func_mode_install () { $debug_cmd # There may be an optional sh(1) argument at the beginning of # install_prog (especially on Windows NT). if test "$SHELL" = "$nonopt" || test /bin/sh = "$nonopt" || # Allow the use of GNU shtool's install command. case $nonopt in *shtool*) :;; *) false;; esac then # Aesthetically quote it. func_quote_arg pretty "$nonopt" install_prog="$func_quote_arg_result " arg=$1 shift else install_prog= arg=$nonopt fi # The real first argument should be the name of the installation program. # Aesthetically quote it. func_quote_arg pretty "$arg" func_append install_prog "$func_quote_arg_result" install_shared_prog=$install_prog case " $install_prog " in *[\\\ /]cp\ *) install_cp=: ;; *) install_cp=false ;; esac # We need to accept at least all the BSD install flags. dest= files= opts= prev= install_type= isdir=false stripme= no_mode=: for arg do arg2= if test -n "$dest"; then func_append files " $dest" dest=$arg continue fi case $arg in -d) isdir=: ;; -f) if $install_cp; then :; else prev=$arg fi ;; -g | -m | -o) prev=$arg ;; -s) stripme=" -s" continue ;; -*) ;; *) # If the previous option needed an argument, then skip it. if test -n "$prev"; then if test X-m = "X$prev" && test -n "$install_override_mode"; then arg2=$install_override_mode no_mode=false fi prev= else dest=$arg continue fi ;; esac # Aesthetically quote the argument. func_quote_arg pretty "$arg" func_append install_prog " $func_quote_arg_result" if test -n "$arg2"; then func_quote_arg pretty "$arg2" fi func_append install_shared_prog " $func_quote_arg_result" done test -z "$install_prog" && \ func_fatal_help "you must specify an install program" test -n "$prev" && \ func_fatal_help "the '$prev' option requires an argument" if test -n "$install_override_mode" && $no_mode; then if $install_cp; then :; else func_quote_arg pretty "$install_override_mode" func_append install_shared_prog " -m $func_quote_arg_result" fi fi if test -z "$files"; then if test -z "$dest"; then func_fatal_help "no file or destination specified" else func_fatal_help "you must specify a destination" fi fi # Strip any trailing slash from the destination. func_stripname '' '/' "$dest" dest=$func_stripname_result # Check to see that the destination is a directory. test -d "$dest" && isdir=: if $isdir; then destdir=$dest destname= else func_dirname_and_basename "$dest" "" "." destdir=$func_dirname_result destname=$func_basename_result # Not a directory, so check to see that there is only one file specified. set dummy $files; shift test "$#" -gt 1 && \ func_fatal_help "'$dest' is not a directory" fi case $destdir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) for file in $files; do case $file in *.lo) ;; *) func_fatal_help "'$destdir' must be an absolute directory name" ;; esac done ;; esac # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic=$magic staticlibs= future_libdirs= current_libdirs= for file in $files; do # Do each installation. case $file in *.$libext) # Do the static libraries later. func_append staticlibs " $file" ;; *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "'$file' is not a valid libtool archive" library_names= old_library= relink_command= func_source "$file" # Add the libdir to current_libdirs if it is the destination. if test "X$destdir" = "X$libdir"; then case "$current_libdirs " in *" $libdir "*) ;; *) func_append current_libdirs " $libdir" ;; esac else # Note the libdir as a future libdir. case "$future_libdirs " in *" $libdir "*) ;; *) func_append future_libdirs " $libdir" ;; esac fi func_dirname "$file" "/" "" dir=$func_dirname_result func_append dir "$objdir" if test -n "$relink_command"; then # Determine the prefix the user has applied to our future dir. inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` # Don't allow the user to place us outside of our expected # location b/c this prevents finding dependent libraries that # are installed to the same prefix. # At present, this check doesn't affect windows .dll's that # are installed into $libdir/../bin (currently, that works fine) # but it's something to keep an eye on. test "$inst_prefix_dir" = "$destdir" && \ func_fatal_error "error: cannot install '$file' to a directory not ending in $libdir" if test -n "$inst_prefix_dir"; then # Stick the inst_prefix_dir data into the link command. relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` else relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` fi func_warning "relinking '$file'" func_show_eval "$relink_command" \ 'func_fatal_error "error: relink '\''$file'\'' with the above command before installing it"' fi # See the names of the shared library. set dummy $library_names; shift if test -n "$1"; then realname=$1 shift srcname=$realname test -n "$relink_command" && srcname=${realname}T # Install the shared library and build the symlinks. func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ 'exit $?' tstripme=$stripme case $host_os in cygwin* | mingw* | pw32* | cegcc*) case $realname in *.dll.a) tstripme= ;; esac ;; os2*) case $realname in *_dll.a) tstripme= ;; esac ;; esac if test -n "$tstripme" && test -n "$striplib"; then func_show_eval "$striplib $destdir/$realname" 'exit $?' fi if test "$#" -gt 0; then # Delete the old symlinks, and create new ones. # Try 'ln -sf' first, because the 'ln' binary might depend on # the symlink we replace! Solaris /bin/ln does not understand -f, # so we also need to try rm && ln -s. for linkname do test "$linkname" != "$realname" \ && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" done fi # Do each command in the postinstall commands. lib=$destdir/$realname func_execute_cmds "$postinstall_cmds" 'exit $?' fi # Install the pseudo-library for information purposes. func_basename "$file" name=$func_basename_result instname=$dir/${name}i func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' # Maybe install the static library, too. test -n "$old_library" && func_append staticlibs " $dir/$old_library" ;; *.lo) # Install (i.e. copy) a libtool object. # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile=$destdir/$destname else func_basename "$file" destfile=$func_basename_result destfile=$destdir/$destfile fi # Deduce the name of the destination old-style object file. case $destfile in *.lo) func_lo2o "$destfile" staticdest=$func_lo2o_result ;; *.$objext) staticdest=$destfile destfile= ;; *) func_fatal_help "cannot copy a libtool object to '$destfile'" ;; esac # Install the libtool object if requested. test -n "$destfile" && \ func_show_eval "$install_prog $file $destfile" 'exit $?' # Install the old object if enabled. if test yes = "$build_old_libs"; then # Deduce the name of the old-style object file. func_lo2o "$file" staticobj=$func_lo2o_result func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' fi exit $EXIT_SUCCESS ;; *) # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile=$destdir/$destname else func_basename "$file" destfile=$func_basename_result destfile=$destdir/$destfile fi # If the file is missing, and there is a .exe on the end, strip it # because it is most likely a libtool script we actually want to # install stripped_ext= case $file in *.exe) if test ! -f "$file"; then func_stripname '' '.exe' "$file" file=$func_stripname_result stripped_ext=.exe fi ;; esac # Do a test to see if this is really a libtool program. case $host in *cygwin* | *mingw*) if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" wrapper=$func_ltwrapper_scriptname_result else func_stripname '' '.exe' "$file" wrapper=$func_stripname_result fi ;; *) wrapper=$file ;; esac if func_ltwrapper_script_p "$wrapper"; then notinst_deplibs= relink_command= func_source "$wrapper" # Check the variables that should have been set. test -z "$generated_by_libtool_version" && \ func_fatal_error "invalid libtool wrapper script '$wrapper'" finalize=: for lib in $notinst_deplibs; do # Check to see that each library is installed. libdir= if test -f "$lib"; then func_source "$lib" fi libfile=$libdir/`$ECHO "$lib" | $SED 's%^.*/%%g'` if test -n "$libdir" && test ! -f "$libfile"; then func_warning "'$lib' has not been installed in '$libdir'" finalize=false fi done relink_command= func_source "$wrapper" outputname= if test no = "$fast_install" && test -n "$relink_command"; then $opt_dry_run || { if $finalize; then tmpdir=`func_mktempdir` func_basename "$file$stripped_ext" file=$func_basename_result outputname=$tmpdir/$file # Replace the output file specification. relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` $opt_quiet || { func_quote_arg expand,pretty "$relink_command" eval "func_echo $func_quote_arg_result" } if eval "$relink_command"; then : else func_error "error: relink '$file' with the above command before installing it" $opt_dry_run || ${RM}r "$tmpdir" continue fi file=$outputname else func_warning "cannot relink '$file'" fi } else # Install the binary that we compiled earlier. file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` fi fi # remove .exe since cygwin /usr/bin/install will append another # one anyway case $install_prog,$host in */usr/bin/install*,*cygwin*) case $file:$destfile in *.exe:*.exe) # this is ok ;; *.exe:*) destfile=$destfile.exe ;; *:*.exe) func_stripname '' '.exe' "$destfile" destfile=$func_stripname_result ;; esac ;; esac func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' $opt_dry_run || if test -n "$outputname"; then ${RM}r "$tmpdir" fi ;; esac done for file in $staticlibs; do func_basename "$file" name=$func_basename_result # Set up the ranlib parameters. oldlib=$destdir/$name func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 tool_oldlib=$func_to_tool_file_result func_show_eval "$install_prog \$file \$oldlib" 'exit $?' if test -n "$stripme" && test -n "$old_striplib"; then func_show_eval "$old_striplib $tool_oldlib" 'exit $?' fi # Do each command in the postinstall commands. func_execute_cmds "$old_postinstall_cmds" 'exit $?' done test -n "$future_libdirs" && \ func_warning "remember to run '$progname --finish$future_libdirs'" if test -n "$current_libdirs"; then # Maybe just do a dry run. $opt_dry_run && current_libdirs=" -n$current_libdirs" exec_cmd='$SHELL "$progpath" $preserve_args --finish$current_libdirs' else exit $EXIT_SUCCESS fi } test install = "$opt_mode" && func_mode_install ${1+"$@"} # func_generate_dlsyms outputname originator pic_p # Extract symbols from dlprefiles and create ${outputname}S.o with # a dlpreopen symbol table. func_generate_dlsyms () { $debug_cmd my_outputname=$1 my_originator=$2 my_pic_p=${3-false} my_prefix=`$ECHO "$my_originator" | $SED 's%[^a-zA-Z0-9]%_%g'` my_dlsyms= if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then if test -n "$NM" && test -n "$global_symbol_pipe"; then my_dlsyms=${my_outputname}S.c else func_error "not configured to extract global symbols from dlpreopened files" fi fi if test -n "$my_dlsyms"; then case $my_dlsyms in "") ;; *.c) # Discover the nlist of each of the dlfiles. nlist=$output_objdir/$my_outputname.nm func_show_eval "$RM $nlist ${nlist}S ${nlist}T" # Parse the name list into a source file. func_verbose "creating $output_objdir/$my_dlsyms" $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ /* $my_dlsyms - symbol resolution table for '$my_outputname' dlsym emulation. */ /* Generated by $PROGRAM (GNU $PACKAGE) $VERSION */ #ifdef __cplusplus extern \"C\" { #endif #if defined __GNUC__ && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) #pragma GCC diagnostic ignored \"-Wstrict-prototypes\" #endif /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE /* DATA imports from DLLs on WIN32 can't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT_DLSYM_CONST #elif defined __osf__ /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else # define LT_DLSYM_CONST const #endif #define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) /* External symbol declarations for the compiler. */\ " if test yes = "$dlself"; then func_verbose "generating symbol list for '$output'" $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" # Add our own program objects to the symbol list. progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` for progfile in $progfiles; do func_to_tool_file "$progfile" func_convert_file_msys_to_w32 func_verbose "extracting global C symbols from '$func_to_tool_file_result'" $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" done if test -n "$exclude_expsyms"; then $opt_dry_run || { eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi if test -n "$export_symbols_regex"; then $opt_dry_run || { eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi # Prepare the list of exported symbols if test -z "$export_symbols"; then export_symbols=$output_objdir/$outputname.exp $opt_dry_run || { $RM $export_symbols eval "$SED -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' ;; esac } else $opt_dry_run || { eval "$SED -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' ;; esac } fi fi for dlprefile in $dlprefiles; do func_verbose "extracting global C symbols from '$dlprefile'" func_basename "$dlprefile" name=$func_basename_result case $host in *cygwin* | *mingw* | *cegcc* ) # if an import library, we need to obtain dlname if func_win32_import_lib_p "$dlprefile"; then func_tr_sh "$dlprefile" eval "curr_lafile=\$libfile_$func_tr_sh_result" dlprefile_dlbasename= if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then # Use subshell, to avoid clobbering current variable values dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` if test -n "$dlprefile_dlname"; then func_basename "$dlprefile_dlname" dlprefile_dlbasename=$func_basename_result else # no lafile. user explicitly requested -dlpreopen . $sharedlib_from_linklib_cmd "$dlprefile" dlprefile_dlbasename=$sharedlib_from_linklib_result fi fi $opt_dry_run || { if test -n "$dlprefile_dlbasename"; then eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' else func_warning "Could not compute DLL name from $name" eval '$ECHO ": $name " >> "$nlist"' fi func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" } else # not an import lib $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } fi ;; *) $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } ;; esac done $opt_dry_run || { # Make sure we have at least an empty file. test -f "$nlist" || : > "$nlist" if test -n "$exclude_expsyms"; then $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T $MV "$nlist"T "$nlist" fi # Try sorting and uniquifying the output. if $GREP -v "^: " < "$nlist" | if sort -k 3 /dev/null 2>&1; then sort -k 3 else sort +2 fi | uniq > "$nlist"S; then : else $GREP -v "^: " < "$nlist" > "$nlist"S fi if test -f "$nlist"S; then eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' else echo '/* NONE */' >> "$output_objdir/$my_dlsyms" fi func_show_eval '$RM "${nlist}I"' if test -n "$global_symbol_to_import"; then eval "$global_symbol_to_import"' < "$nlist"S > "$nlist"I' fi echo >> "$output_objdir/$my_dlsyms" "\ /* The mapping between symbol names and symbols. */ typedef struct { const char *name; void *address; } lt_dlsymlist; extern LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[];\ " if test -s "$nlist"I; then echo >> "$output_objdir/$my_dlsyms" "\ static void lt_syminit(void) { LT_DLSYM_CONST lt_dlsymlist *symbol = lt_${my_prefix}_LTX_preloaded_symbols; for (; symbol->name; ++symbol) {" $SED 's/.*/ if (STREQ (symbol->name, \"&\")) symbol->address = (void *) \&&;/' < "$nlist"I >> "$output_objdir/$my_dlsyms" echo >> "$output_objdir/$my_dlsyms" "\ } }" fi echo >> "$output_objdir/$my_dlsyms" "\ LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[] = { {\"$my_originator\", (void *) 0}," if test -s "$nlist"I; then echo >> "$output_objdir/$my_dlsyms" "\ {\"@INIT@\", (void *) <_syminit}," fi case $need_lib_prefix in no) eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; *) eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; esac echo >> "$output_objdir/$my_dlsyms" "\ {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt_${my_prefix}_LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif\ " } # !$opt_dry_run pic_flag_for_symtable= case "$compile_command " in *" -static "*) ;; *) case $host in # compiling the symbol table file with pic_flag works around # a FreeBSD bug that causes programs to crash when -lm is # linked before any other PIC object. But we must not use # pic_flag when linking with -static. The problem exists in # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; *-*-hpux*) pic_flag_for_symtable=" $pic_flag" ;; *) $my_pic_p && pic_flag_for_symtable=" $pic_flag" ;; esac ;; esac symtab_cflags= for arg in $LTCFLAGS; do case $arg in -pie | -fpie | -fPIE) ;; *) func_append symtab_cflags " $arg" ;; esac done # Now compile the dynamic symbol file. func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' # Clean up the generated files. func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T" "${nlist}I"' # Transform the symbol file into the correct name. symfileobj=$output_objdir/${my_outputname}S.$objext case $host in *cygwin* | *mingw* | *cegcc* ) if test -f "$output_objdir/$my_outputname.def"; then compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` else compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` fi ;; *) compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` ;; esac ;; *) func_fatal_error "unknown suffix for '$my_dlsyms'" ;; esac else # We keep going just in case the user didn't refer to # lt_preloaded_symbols. The linker will fail if global_symbol_pipe # really was required. # Nullify the symbol file. compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` fi } # func_cygming_gnu_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is a GNU/binutils-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_gnu_implib_p () { $debug_cmd func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'` test -n "$func_cygming_gnu_implib_tmp" } # func_cygming_ms_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is an MS-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_ms_implib_p () { $debug_cmd func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` test -n "$func_cygming_ms_implib_tmp" } # func_win32_libid arg # return the library type of file 'arg' # # Need a lot of goo to handle *both* DLLs and import libs # Has to be a shell function in order to 'eat' the argument # that is supplied when $file_magic_command is called. # Despite the name, also deal with 64 bit binaries. func_win32_libid () { $debug_cmd win32_libid_type=unknown win32_fileres=`file -L $1 2>/dev/null` case $win32_fileres in *ar\ archive\ import\ library*) # definitely import win32_libid_type="x86 archive import" ;; *ar\ archive*) # could be an import, or static # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then case $nm_interface in "MS dumpbin") if func_cygming_ms_implib_p "$1" || func_cygming_gnu_implib_p "$1" then win32_nmres=import else win32_nmres= fi ;; *) func_to_tool_file "$1" func_convert_file_msys_to_w32 win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | $SED -n -e ' 1,100{ / I /{ s|.*|import| p q } }'` ;; esac case $win32_nmres in import*) win32_libid_type="x86 archive import";; *) win32_libid_type="x86 archive static";; esac fi ;; *DLL*) win32_libid_type="x86 DLL" ;; *executable*) # but shell scripts are "executable" too... case $win32_fileres in *MS\ Windows\ PE\ Intel*) win32_libid_type="x86 DLL" ;; esac ;; esac $ECHO "$win32_libid_type" } # func_cygming_dll_for_implib ARG # # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib () { $debug_cmd sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` } # func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs # # The is the core of a fallback implementation of a # platform-specific function to extract the name of the # DLL associated with the specified import library LIBNAME. # # SECTION_NAME is either .idata$6 or .idata$7, depending # on the platform and compiler that created the implib. # # Echos the name of the DLL associated with the # specified import library. func_cygming_dll_for_implib_fallback_core () { $debug_cmd match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` $OBJDUMP -s --section "$1" "$2" 2>/dev/null | $SED '/^Contents of section '"$match_literal"':/{ # Place marker at beginning of archive member dllname section s/.*/====MARK====/ p d } # These lines can sometimes be longer than 43 characters, but # are always uninteresting /:[ ]*file format pe[i]\{,1\}-/d /^In archive [^:]*:/d # Ensure marker is printed /^====MARK====/p # Remove all lines with less than 43 characters /^.\{43\}/!d # From remaining lines, remove first 43 characters s/^.\{43\}//' | $SED -n ' # Join marker and all lines until next marker into a single line /^====MARK====/ b para H $ b para b :para x s/\n//g # Remove the marker s/^====MARK====// # Remove trailing dots and whitespace s/[\. \t]*$// # Print /./p' | # we now have a list, one entry per line, of the stringified # contents of the appropriate section of all members of the # archive that possess that section. Heuristic: eliminate # all those that have a first or second character that is # a '.' (that is, objdump's representation of an unprintable # character.) This should work for all archives with less than # 0x302f exports -- but will fail for DLLs whose name actually # begins with a literal '.' or a single character followed by # a '.'. # # Of those that remain, print the first one. $SED -e '/^\./d;/^.\./d;q' } # func_cygming_dll_for_implib_fallback ARG # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # # This fallback implementation is for use when $DLLTOOL # does not support the --identify-strict option. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib_fallback () { $debug_cmd if func_cygming_gnu_implib_p "$1"; then # binutils import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` elif func_cygming_ms_implib_p "$1"; then # ms-generated import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` else # unknown sharedlib_from_linklib_result= fi } # func_extract_an_archive dir oldlib func_extract_an_archive () { $debug_cmd f_ex_an_ar_dir=$1; shift f_ex_an_ar_oldlib=$1 if test yes = "$lock_old_archive_extraction"; then lockfile=$f_ex_an_ar_oldlib.lock until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done fi func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ 'stat=$?; rm -f "$lockfile"; exit $stat' if test yes = "$lock_old_archive_extraction"; then $opt_dry_run || rm -f "$lockfile" fi if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then : else func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" fi } # func_extract_archives gentop oldlib ... func_extract_archives () { $debug_cmd my_gentop=$1; shift my_oldlibs=${1+"$@"} my_oldobjs= my_xlib= my_xabs= my_xdir= for my_xlib in $my_oldlibs; do # Extract the objects. case $my_xlib in [\\/]* | [A-Za-z]:[\\/]*) my_xabs=$my_xlib ;; *) my_xabs=`pwd`"/$my_xlib" ;; esac func_basename "$my_xlib" my_xlib=$func_basename_result my_xlib_u=$my_xlib while :; do case " $extracted_archives " in *" $my_xlib_u "*) func_arith $extracted_serial + 1 extracted_serial=$func_arith_result my_xlib_u=lt$extracted_serial-$my_xlib ;; *) break ;; esac done extracted_archives="$extracted_archives $my_xlib_u" my_xdir=$my_gentop/$my_xlib_u func_mkdir_p "$my_xdir" case $host in *-darwin*) func_verbose "Extracting $my_xabs" # Do not bother doing anything if just a dry run $opt_dry_run || { darwin_orig_dir=`pwd` cd $my_xdir || exit $? darwin_archive=$my_xabs darwin_curdir=`pwd` func_basename "$darwin_archive" darwin_base_archive=$func_basename_result darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` if test -n "$darwin_arches"; then darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` darwin_arch= func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" for darwin_arch in $darwin_arches; do func_mkdir_p "unfat-$$/$darwin_base_archive-$darwin_arch" $LIPO -thin $darwin_arch -output "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" "$darwin_archive" cd "unfat-$$/$darwin_base_archive-$darwin_arch" func_extract_an_archive "`pwd`" "$darwin_base_archive" cd "$darwin_curdir" $RM "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" done # $darwin_arches ## Okay now we've a bunch of thin objects, gotta fatten them up :) darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$sed_basename" | sort -u` darwin_file= darwin_files= for darwin_file in $darwin_filelist; do darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` $LIPO -create -output "$darwin_file" $darwin_files done # $darwin_filelist $RM -rf unfat-$$ cd "$darwin_orig_dir" else cd $darwin_orig_dir func_extract_an_archive "$my_xdir" "$my_xabs" fi # $darwin_arches } # !$opt_dry_run ;; *) func_extract_an_archive "$my_xdir" "$my_xabs" ;; esac my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` done func_extract_archives_result=$my_oldobjs } # func_emit_wrapper [arg=no] # # Emit a libtool wrapper script on stdout. # Don't directly open a file because we may want to # incorporate the script contents within a cygwin/mingw # wrapper executable. Must ONLY be called from within # func_mode_link because it depends on a number of variables # set therein. # # ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR # variable will take. If 'yes', then the emitted script # will assume that the directory where it is stored is # the $objdir directory. This is a cygwin/mingw-specific # behavior. func_emit_wrapper () { func_emit_wrapper_arg1=${1-no} $ECHO "\ #! $SHELL # $output - temporary wrapper script for $objdir/$outputname # Generated by $PROGRAM (GNU $PACKAGE) $VERSION # # The $output program cannot be directly executed until all the libtool # libraries that it depends on are installed. # # This wrapper script should never be moved out of the build directory. # If it is, it will not operate correctly. # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. sed_quote_subst='$sed_quote_subst' # Be Bourne compatible if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac fi BIN_SH=xpg4; export BIN_SH # for Tru64 DUALCASE=1; export DUALCASE # for MKS sh # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH relink_command=\"$relink_command\" # This environment variable determines our operation mode. if test \"\$libtool_install_magic\" = \"$magic\"; then # install mode needs the following variables: generated_by_libtool_version='$macro_version' notinst_deplibs='$notinst_deplibs' else # When we are sourced in execute mode, \$file and \$ECHO are already set. if test \"\$libtool_execute_magic\" != \"$magic\"; then file=\"\$0\"" func_quote_arg pretty "$ECHO" qECHO=$func_quote_arg_result $ECHO "\ # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$1 _LTECHO_EOF' } ECHO=$qECHO fi # Very basic option parsing. These options are (a) specific to # the libtool wrapper, (b) are identical between the wrapper # /script/ and the wrapper /executable/ that is used only on # windows platforms, and (c) all begin with the string "--lt-" # (application programs are unlikely to have options that match # this pattern). # # There are only two supported options: --lt-debug and # --lt-dump-script. There is, deliberately, no --lt-help. # # The first argument to this parsing function should be the # script's $0 value, followed by "$@". lt_option_debug= func_parse_lt_options () { lt_script_arg0=\$0 shift for lt_opt do case \"\$lt_opt\" in --lt-debug) lt_option_debug=1 ;; --lt-dump-script) lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` cat \"\$lt_dump_D/\$lt_dump_F\" exit 0 ;; --lt-*) \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 exit 1 ;; esac done # Print the debug banner immediately: if test -n \"\$lt_option_debug\"; then echo \"$outputname:$output:\$LINENO: libtool wrapper (GNU $PACKAGE) $VERSION\" 1>&2 fi } # Used when --lt-debug. Prints its arguments to stdout # (redirection is the responsibility of the caller) func_lt_dump_args () { lt_dump_args_N=1; for lt_arg do \$ECHO \"$outputname:$output:\$LINENO: newargv[\$lt_dump_args_N]: \$lt_arg\" lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` done } # Core function for launching the target application func_exec_program_core () { " case $host in # Backslashes separate directories on plain windows *-*-mingw | *-*-os2* | *-cegcc*) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir\\\\\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} " ;; *) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir/\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir/\$program\" \${1+\"\$@\"} " ;; esac $ECHO "\ \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 exit 1 } # A function to encapsulate launching the target application # Strips options in the --lt-* namespace from \$@ and # launches target application with the remaining arguments. func_exec_program () { case \" \$* \" in *\\ --lt-*) for lt_wr_arg do case \$lt_wr_arg in --lt-*) ;; *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; esac shift done ;; esac func_exec_program_core \${1+\"\$@\"} } # Parse options func_parse_lt_options \"\$0\" \${1+\"\$@\"} # Find the directory that this script lives in. thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` test \"x\$thisdir\" = \"x\$file\" && thisdir=. # Follow symbolic links until we get to the real thisdir. file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` while test -n \"\$file\"; do destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` # If there was a directory component, then change thisdir. if test \"x\$destdir\" != \"x\$file\"; then case \"\$destdir\" in [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; *) thisdir=\"\$thisdir/\$destdir\" ;; esac fi file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` done # Usually 'no', except on cygwin/mingw when embedded into # the cwrapper. WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then # special case for '.' if test \"\$thisdir\" = \".\"; then thisdir=\`pwd\` fi # remove .libs from thisdir case \"\$thisdir\" in *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; $objdir ) thisdir=. ;; esac fi # Try to get the absolute directory name. absdir=\`cd \"\$thisdir\" && pwd\` test -n \"\$absdir\" && thisdir=\"\$absdir\" " if test yes = "$fast_install"; then $ECHO "\ program=lt-'$outputname'$exeext progdir=\"\$thisdir/$objdir\" if test ! -f \"\$progdir/\$program\" || { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | $SED 1q\`; \\ test \"X\$file\" != \"X\$progdir/\$program\"; }; then file=\"\$\$-\$program\" if test ! -d \"\$progdir\"; then $MKDIR \"\$progdir\" else $RM \"\$progdir/\$file\" fi" $ECHO "\ # relink executable if necessary if test -n \"\$relink_command\"; then if relink_command_output=\`eval \$relink_command 2>&1\`; then : else \$ECHO \"\$relink_command_output\" >&2 $RM \"\$progdir/\$file\" exit 1 fi fi $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || { $RM \"\$progdir/\$program\"; $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } $RM \"\$progdir/\$file\" fi" else $ECHO "\ program='$outputname' progdir=\"\$thisdir/$objdir\" " fi $ECHO "\ if test -f \"\$progdir/\$program\"; then" # fixup the dll searchpath if we need to. # # Fix the DLL searchpath if we need to. Do this before prepending # to shlibpath, because on Windows, both are PATH and uninstalled # libraries must come first. if test -n "$dllsearchpath"; then $ECHO "\ # Add the dll search path components to the executable PATH PATH=$dllsearchpath:\$PATH " fi # Export our shlibpath_var if we have one. if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then $ECHO "\ # Add our own library path to $shlibpath_var $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" # Some systems cannot cope with colon-terminated $shlibpath_var # The second colon is a workaround for a bug in BeOS R4 sed $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` export $shlibpath_var " fi $ECHO "\ if test \"\$libtool_execute_magic\" != \"$magic\"; then # Run the actual program with our arguments. func_exec_program \${1+\"\$@\"} fi else # The program doesn't exist. \$ECHO \"\$0: error: '\$progdir/\$program' does not exist\" 1>&2 \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 exit 1 fi fi\ " } # func_emit_cwrapperexe_src # emit the source code for a wrapper executable on stdout # Must ONLY be called from within func_mode_link because # it depends on a number of variable set therein. func_emit_cwrapperexe_src () { cat < #include #ifdef _MSC_VER # include # include # include #else # include # include # ifdef __CYGWIN__ # include # endif #endif #include #include #include #include #include #include #include #include #define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) /* declarations of non-ANSI functions */ #if defined __MINGW32__ # ifdef __STRICT_ANSI__ int _putenv (const char *); # endif #elif defined __CYGWIN__ # ifdef __STRICT_ANSI__ char *realpath (const char *, char *); int putenv (char *); int setenv (const char *, const char *, int); # endif /* #elif defined other_platform || defined ... */ #endif /* portability defines, excluding path handling macros */ #if defined _MSC_VER # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv # define S_IXUSR _S_IEXEC #elif defined __MINGW32__ # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv #elif defined __CYGWIN__ # define HAVE_SETENV # define FOPEN_WB "wb" /* #elif defined other platforms ... */ #endif #if defined PATH_MAX # define LT_PATHMAX PATH_MAX #elif defined MAXPATHLEN # define LT_PATHMAX MAXPATHLEN #else # define LT_PATHMAX 1024 #endif #ifndef S_IXOTH # define S_IXOTH 0 #endif #ifndef S_IXGRP # define S_IXGRP 0 #endif /* path handling portability macros */ #ifndef DIR_SEPARATOR # define DIR_SEPARATOR '/' # define PATH_SEPARATOR ':' #endif #if defined _WIN32 || defined __MSDOS__ || defined __DJGPP__ || \ defined __OS2__ # define HAVE_DOS_BASED_FILE_SYSTEM # define FOPEN_WB "wb" # ifndef DIR_SEPARATOR_2 # define DIR_SEPARATOR_2 '\\' # endif # ifndef PATH_SEPARATOR_2 # define PATH_SEPARATOR_2 ';' # endif #endif #ifndef DIR_SEPARATOR_2 # define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) #else /* DIR_SEPARATOR_2 */ # define IS_DIR_SEPARATOR(ch) \ (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) #endif /* DIR_SEPARATOR_2 */ #ifndef PATH_SEPARATOR_2 # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) #else /* PATH_SEPARATOR_2 */ # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) #endif /* PATH_SEPARATOR_2 */ #ifndef FOPEN_WB # define FOPEN_WB "w" #endif #ifndef _O_BINARY # define _O_BINARY 0 #endif #define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) #define XFREE(stale) do { \ if (stale) { free (stale); stale = 0; } \ } while (0) #if defined LT_DEBUGWRAPPER static int lt_debug = 1; #else static int lt_debug = 0; #endif const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ void *xmalloc (size_t num); char *xstrdup (const char *string); const char *base_name (const char *name); char *find_executable (const char *wrapper); char *chase_symlinks (const char *pathspec); int make_executable (const char *path); int check_executable (const char *path); char *strendzap (char *str, const char *pat); void lt_debugprintf (const char *file, int line, const char *fmt, ...); void lt_fatal (const char *file, int line, const char *message, ...); static const char *nonnull (const char *s); static const char *nonempty (const char *s); void lt_setenv (const char *name, const char *value); char *lt_extend_str (const char *orig_value, const char *add, int to_end); void lt_update_exe_path (const char *name, const char *value); void lt_update_lib_path (const char *name, const char *value); char **prepare_spawn (char **argv); void lt_dump_script (FILE *f); EOF cat <= 0) && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) return 1; else return 0; } int make_executable (const char *path) { int rval = 0; struct stat st; lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", nonempty (path)); if ((!path) || (!*path)) return 0; if (stat (path, &st) >= 0) { rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); } return rval; } /* Searches for the full path of the wrapper. Returns newly allocated full path name if found, NULL otherwise Does not chase symlinks, even on platforms that support them. */ char * find_executable (const char *wrapper) { int has_slash = 0; const char *p; const char *p_next; /* static buffer for getcwd */ char tmp[LT_PATHMAX + 1]; size_t tmp_len; char *concat_name; lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", nonempty (wrapper)); if ((wrapper == NULL) || (*wrapper == '\0')) return NULL; /* Absolute path? */ #if defined HAVE_DOS_BASED_FILE_SYSTEM if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } else { #endif if (IS_DIR_SEPARATOR (wrapper[0])) { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } #if defined HAVE_DOS_BASED_FILE_SYSTEM } #endif for (p = wrapper; *p; p++) if (*p == '/') { has_slash = 1; break; } if (!has_slash) { /* no slashes; search PATH */ const char *path = getenv ("PATH"); if (path != NULL) { for (p = path; *p; p = p_next) { const char *q; size_t p_len; for (q = p; *q; q++) if (IS_PATH_SEPARATOR (*q)) break; p_len = (size_t) (q - p); p_next = (*q == '\0' ? q : q + 1); if (p_len == 0) { /* empty path: current directory */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); } else { concat_name = XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, p, p_len); concat_name[p_len] = '/'; strcpy (concat_name + p_len + 1, wrapper); } if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } } /* not found in PATH; assume curdir */ } /* Relative path | not found in path: prepend cwd */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); return NULL; } char * chase_symlinks (const char *pathspec) { #ifndef S_ISLNK return xstrdup (pathspec); #else char buf[LT_PATHMAX]; struct stat s; char *tmp_pathspec = xstrdup (pathspec); char *p; int has_symlinks = 0; while (strlen (tmp_pathspec) && !has_symlinks) { lt_debugprintf (__FILE__, __LINE__, "checking path component for symlinks: %s\n", tmp_pathspec); if (lstat (tmp_pathspec, &s) == 0) { if (S_ISLNK (s.st_mode) != 0) { has_symlinks = 1; break; } /* search backwards for last DIR_SEPARATOR */ p = tmp_pathspec + strlen (tmp_pathspec) - 1; while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) p--; if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) { /* no more DIR_SEPARATORS left */ break; } *p = '\0'; } else { lt_fatal (__FILE__, __LINE__, "error accessing file \"%s\": %s", tmp_pathspec, nonnull (strerror (errno))); } } XFREE (tmp_pathspec); if (!has_symlinks) { return xstrdup (pathspec); } tmp_pathspec = realpath (pathspec, buf); if (tmp_pathspec == 0) { lt_fatal (__FILE__, __LINE__, "could not follow symlinks for %s", pathspec); } return xstrdup (tmp_pathspec); #endif } char * strendzap (char *str, const char *pat) { size_t len, patlen; assert (str != NULL); assert (pat != NULL); len = strlen (str); patlen = strlen (pat); if (patlen <= len) { str += len - patlen; if (STREQ (str, pat)) *str = '\0'; } return str; } void lt_debugprintf (const char *file, int line, const char *fmt, ...) { va_list args; if (lt_debug) { (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); va_start (args, fmt); (void) vfprintf (stderr, fmt, args); va_end (args); } } static void lt_error_core (int exit_status, const char *file, int line, const char *mode, const char *message, va_list ap) { fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); vfprintf (stderr, message, ap); fprintf (stderr, ".\n"); if (exit_status >= 0) exit (exit_status); } void lt_fatal (const char *file, int line, const char *message, ...) { va_list ap; va_start (ap, message); lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); va_end (ap); } static const char * nonnull (const char *s) { return s ? s : "(null)"; } static const char * nonempty (const char *s) { return (s && !*s) ? "(empty)" : nonnull (s); } void lt_setenv (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_setenv) setting '%s' to '%s'\n", nonnull (name), nonnull (value)); { #ifdef HAVE_SETENV /* always make a copy, for consistency with !HAVE_SETENV */ char *str = xstrdup (value); setenv (name, str, 1); #else size_t len = strlen (name) + 1 + strlen (value) + 1; char *str = XMALLOC (char, len); sprintf (str, "%s=%s", name, value); if (putenv (str) != EXIT_SUCCESS) { XFREE (str); } #endif } } char * lt_extend_str (const char *orig_value, const char *add, int to_end) { char *new_value; if (orig_value && *orig_value) { size_t orig_value_len = strlen (orig_value); size_t add_len = strlen (add); new_value = XMALLOC (char, add_len + orig_value_len + 1); if (to_end) { strcpy (new_value, orig_value); strcpy (new_value + orig_value_len, add); } else { strcpy (new_value, add); strcpy (new_value + add_len, orig_value); } } else { new_value = xstrdup (add); } return new_value; } void lt_update_exe_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); /* some systems can't cope with a ':'-terminated path #' */ size_t len = strlen (new_value); while ((len > 0) && IS_PATH_SEPARATOR (new_value[len-1])) { new_value[--len] = '\0'; } lt_setenv (name, new_value); XFREE (new_value); } } void lt_update_lib_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); lt_setenv (name, new_value); XFREE (new_value); } } EOF case $host_os in mingw*) cat <<"EOF" /* Prepares an argument vector before calling spawn(). Note that spawn() does not by itself call the command interpreter (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); GetVersionEx(&v); v.dwPlatformId == VER_PLATFORM_WIN32_NT; }) ? "cmd.exe" : "command.com"). Instead it simply concatenates the arguments, separated by ' ', and calls CreateProcess(). We must quote the arguments since Win32 CreateProcess() interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a special way: - Space and tab are interpreted as delimiters. They are not treated as delimiters if they are surrounded by double quotes: "...". - Unescaped double quotes are removed from the input. Their only effect is that within double quotes, space and tab are treated like normal characters. - Backslashes not followed by double quotes are not special. - But 2*n+1 backslashes followed by a double quote become n backslashes followed by a double quote (n >= 0): \" -> " \\\" -> \" \\\\\" -> \\" */ #define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" #define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" char ** prepare_spawn (char **argv) { size_t argc; char **new_argv; size_t i; /* Count number of arguments. */ for (argc = 0; argv[argc] != NULL; argc++) ; /* Allocate new argument vector. */ new_argv = XMALLOC (char *, argc + 1); /* Put quoted arguments into the new argument vector. */ for (i = 0; i < argc; i++) { const char *string = argv[i]; if (string[0] == '\0') new_argv[i] = xstrdup ("\"\""); else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) { int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); size_t length; unsigned int backslashes; const char *s; char *quoted_string; char *p; length = 0; backslashes = 0; if (quote_around) length++; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') length += backslashes + 1; length++; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) length += backslashes + 1; quoted_string = XMALLOC (char, length + 1); p = quoted_string; backslashes = 0; if (quote_around) *p++ = '"'; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') { unsigned int j; for (j = backslashes + 1; j > 0; j--) *p++ = '\\'; } *p++ = c; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) { unsigned int j; for (j = backslashes; j > 0; j--) *p++ = '\\'; *p++ = '"'; } *p = '\0'; new_argv[i] = quoted_string; } else new_argv[i] = (char *) string; } new_argv[argc] = NULL; return new_argv; } EOF ;; esac cat <<"EOF" void lt_dump_script (FILE* f) { EOF func_emit_wrapper yes | $SED -n -e ' s/^\(.\{79\}\)\(..*\)/\1\ \2/ h s/\([\\"]\)/\\\1/g s/$/\\n/ s/\([^\n]*\).*/ fputs ("\1", f);/p g D' cat <<"EOF" } EOF } # end: func_emit_cwrapperexe_src # func_win32_import_lib_p ARG # True if ARG is an import lib, as indicated by $file_magic_cmd func_win32_import_lib_p () { $debug_cmd case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in *import*) : ;; *) false ;; esac } # func_suncc_cstd_abi # !!ONLY CALL THIS FOR SUN CC AFTER $compile_command IS FULLY EXPANDED!! # Several compiler flags select an ABI that is incompatible with the # Cstd library. Avoid specifying it if any are in CXXFLAGS. func_suncc_cstd_abi () { $debug_cmd case " $compile_command " in *" -compat=g "*|*\ -std=c++[0-9][0-9]\ *|*" -library=stdcxx4 "*|*" -library=stlport4 "*) suncc_use_cstd_abi=no ;; *) suncc_use_cstd_abi=yes ;; esac } # func_mode_link arg... func_mode_link () { $debug_cmd case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) # It is impossible to link a dll without this setting, and # we shouldn't force the makefile maintainer to figure out # what system we are compiling for in order to pass an extra # flag for every libtool invocation. # allow_undefined=no # FIXME: Unfortunately, there are problems with the above when trying # to make a dll that has undefined symbols, in which case not # even a static library is built. For now, we need to specify # -no-undefined on the libtool link line when we can be certain # that all symbols are satisfied, otherwise we get a static library. allow_undefined=yes ;; *) allow_undefined=yes ;; esac libtool_args=$nonopt base_compile="$nonopt $@" compile_command=$nonopt finalize_command=$nonopt compile_rpath= finalize_rpath= compile_shlibpath= finalize_shlibpath= convenience= old_convenience= deplibs= old_deplibs= compiler_flags= linker_flags= dllsearchpath= lib_search_path=`pwd` inst_prefix_dir= new_inherited_linker_flags= avoid_version=no bindir= dlfiles= dlprefiles= dlself=no export_dynamic=no export_symbols= export_symbols_regex= generated= libobjs= ltlibs= module=no no_install=no objs= os2dllname= non_pic_objects= precious_files_regex= prefer_static_libs=no preload=false prev= prevarg= release= rpath= xrpath= perm_rpath= temp_rpath= thread_safe=no vinfo= vinfo_number=no weak_libs= single_module=$wl-single_module func_infer_tag $base_compile # We need to know -static, to get the right output filenames. for arg do case $arg in -shared) test yes != "$build_libtool_libs" \ && func_fatal_configuration "cannot build a shared library" build_old_libs=no break ;; -all-static | -static | -static-libtool-libs) case $arg in -all-static) if test yes = "$build_libtool_libs" && test -z "$link_static_flag"; then func_warning "complete static linking is impossible in this configuration" fi if test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; -static) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=built ;; -static-libtool-libs) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; esac build_libtool_libs=no build_old_libs=yes break ;; esac done # See if our shared archives depend on static archives. test -n "$old_archive_from_new_cmds" && build_old_libs=yes # Go through the arguments, transforming them on the way. while test "$#" -gt 0; do arg=$1 shift func_quote_arg pretty,unquoted "$arg" qarg=$func_quote_arg_unquoted_result func_append libtool_args " $func_quote_arg_result" # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in output) func_append compile_command " @OUTPUT@" func_append finalize_command " @OUTPUT@" ;; esac case $prev in bindir) bindir=$arg prev= continue ;; dlfiles|dlprefiles) $preload || { # Add the symbol object into the linking commands. func_append compile_command " @SYMFILE@" func_append finalize_command " @SYMFILE@" preload=: } case $arg in *.la | *.lo) ;; # We handle these cases below. force) if test no = "$dlself"; then dlself=needless export_dynamic=yes fi prev= continue ;; self) if test dlprefiles = "$prev"; then dlself=yes elif test dlfiles = "$prev" && test yes != "$dlopen_self"; then dlself=yes else dlself=needless export_dynamic=yes fi prev= continue ;; *) if test dlfiles = "$prev"; then func_append dlfiles " $arg" else func_append dlprefiles " $arg" fi prev= continue ;; esac ;; expsyms) export_symbols=$arg test -f "$arg" \ || func_fatal_error "symbol file '$arg' does not exist" prev= continue ;; expsyms_regex) export_symbols_regex=$arg prev= continue ;; framework) case $host in *-*-darwin*) case "$deplibs " in *" $qarg.ltframework "*) ;; *) func_append deplibs " $qarg.ltframework" # this is fixed later ;; esac ;; esac prev= continue ;; inst_prefix) inst_prefix_dir=$arg prev= continue ;; mllvm) # Clang does not use LLVM to link, so we can simply discard any # '-mllvm $arg' options when doing the link step. prev= continue ;; objectlist) if test -f "$arg"; then save_arg=$arg moreargs= for fil in `cat "$save_arg"` do # func_append moreargs " $fil" arg=$fil # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test none = "$pic_object" && test none = "$non_pic_object"; then func_fatal_error "cannot find name of object for '$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir=$func_dirname_result if test none != "$pic_object"; then # Prepend the subdirectory the object is found in. pic_object=$xdir$pic_object if test dlfiles = "$prev"; then if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then func_append dlfiles " $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test dlprefiles = "$prev"; then # Preload the old-style object. func_append dlprefiles " $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg=$pic_object fi # Non-PIC object. if test none != "$non_pic_object"; then # Prepend the subdirectory the object is found in. non_pic_object=$xdir$non_pic_object # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test none = "$pic_object"; then arg=$non_pic_object fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object=$pic_object func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir=$func_dirname_result func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "'$arg' is not a valid libtool object" fi fi done else func_fatal_error "link input file '$arg' does not exist" fi arg=$save_arg prev= continue ;; os2dllname) os2dllname=$arg prev= continue ;; precious_regex) precious_files_regex=$arg prev= continue ;; release) release=-$arg prev= continue ;; rpath | xrpath) # We need an absolute path. case $arg in [\\/]* | [A-Za-z]:[\\/]*) ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac if test rpath = "$prev"; then case "$rpath " in *" $arg "*) ;; *) func_append rpath " $arg" ;; esac else case "$xrpath " in *" $arg "*) ;; *) func_append xrpath " $arg" ;; esac fi prev= continue ;; shrext) shrext_cmds=$arg prev= continue ;; weak) func_append weak_libs " $arg" prev= continue ;; xassembler) func_append compiler_flags " -Xassembler $qarg" prev= func_append compile_command " -Xassembler $qarg" func_append finalize_command " -Xassembler $qarg" continue ;; xcclinker) func_append linker_flags " $qarg" func_append compiler_flags " $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xcompiler) func_append compiler_flags " $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xlinker) func_append linker_flags " $qarg" func_append compiler_flags " $wl$qarg" prev= func_append compile_command " $wl$qarg" func_append finalize_command " $wl$qarg" continue ;; *) eval "$prev=\"\$arg\"" prev= continue ;; esac fi # test -n "$prev" prevarg=$arg case $arg in -all-static) if test -n "$link_static_flag"; then # See comment for -static flag below, for more details. func_append compile_command " $link_static_flag" func_append finalize_command " $link_static_flag" fi continue ;; -allow-undefined) # FIXME: remove this flag sometime in the future. func_fatal_error "'-allow-undefined' must not be used because it is the default" ;; -avoid-version) avoid_version=yes continue ;; -bindir) prev=bindir continue ;; -dlopen) prev=dlfiles continue ;; -dlpreopen) prev=dlprefiles continue ;; -export-dynamic) export_dynamic=yes continue ;; -export-symbols | -export-symbols-regex) if test -n "$export_symbols" || test -n "$export_symbols_regex"; then func_fatal_error "more than one -exported-symbols argument is not allowed" fi if test X-export-symbols = "X$arg"; then prev=expsyms else prev=expsyms_regex fi continue ;; -framework) prev=framework continue ;; -inst-prefix-dir) prev=inst_prefix continue ;; # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* # so, if we see these flags be careful not to treat them like -L -L[A-Z][A-Z]*:*) case $with_gcc/$host in no/*-*-irix* | /*-*-irix*) func_append compile_command " $arg" func_append finalize_command " $arg" ;; esac continue ;; -L*) func_stripname "-L" '' "$arg" if test -z "$func_stripname_result"; then if test "$#" -gt 0; then func_fatal_error "require no space between '-L' and '$1'" else func_fatal_error "need path for '-L' option" fi fi func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) absdir=`cd "$dir" && pwd` test -z "$absdir" && \ func_fatal_error "cannot determine absolute directory name of '$dir'" dir=$absdir ;; esac case "$deplibs " in *" -L$dir "* | *" $arg "*) # Will only happen for absolute or sysroot arguments ;; *) # Preserve sysroot, but never include relative directories case $dir in [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; *) func_append deplibs " -L$dir" ;; esac func_append lib_search_path " $dir" ;; esac case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` case :$dllsearchpath: in *":$dir:"*) ;; ::) dllsearchpath=$dir;; *) func_append dllsearchpath ":$dir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) func_append dllsearchpath ":$testbindir";; esac ;; esac continue ;; -l*) if test X-lc = "X$arg" || test X-lm = "X$arg"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) # These systems don't actually have a C or math library (as such) continue ;; *-*-os2*) # These systems don't actually have a C library (as such) test X-lc = "X$arg" && continue ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig* | *-*-midnightbsd*) # Do not include libc due to us having libc/libc_r. test X-lc = "X$arg" && continue ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C and math libraries are in the System framework func_append deplibs " System.ltframework" continue ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype test X-lc = "X$arg" && continue ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work test X-lc = "X$arg" && continue ;; esac elif test X-lc_r = "X$arg"; then case $host in *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig* | *-*-midnightbsd*) # Do not include libc_r directly, use -pthread flag. continue ;; esac fi func_append deplibs " $arg" continue ;; -mllvm) prev=mllvm continue ;; -module) module=yes continue ;; # Tru64 UNIX uses -model [arg] to determine the layout of C++ # classes, name mangling, and exception handling. # Darwin uses the -arch flag to determine output architecture. -model|-arch|-isysroot|--sysroot) func_append compiler_flags " $arg" func_append compile_command " $arg" func_append finalize_command " $arg" prev=xcompiler continue ;; # Solaris ld rejects as of 11.4. Refer to Oracle bug 22985199. -pthread) case $host in *solaris2*) ;; *) case "$new_inherited_linker_flags " in *" $arg "*) ;; * ) func_append new_inherited_linker_flags " $arg" ;; esac ;; esac continue ;; -mt|-mthreads|-kthread|-Kthread|-pthreads|--thread-safe \ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) func_append compiler_flags " $arg" func_append compile_command " $arg" func_append finalize_command " $arg" case "$new_inherited_linker_flags " in *" $arg "*) ;; * ) func_append new_inherited_linker_flags " $arg" ;; esac continue ;; -multi_module) single_module=$wl-multi_module continue ;; -no-fast-install) fast_install=no continue ;; -no-install) case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) # The PATH hackery in wrapper scripts is required on Windows # and Darwin in order for the loader to find any dlls it needs. func_warning "'-no-install' is ignored for $host" func_warning "assuming '-no-fast-install' instead" fast_install=no ;; *) no_install=yes ;; esac continue ;; -no-undefined) allow_undefined=no continue ;; -objectlist) prev=objectlist continue ;; -os2dllname) prev=os2dllname continue ;; -o) prev=output ;; -precious-files-regex) prev=precious_regex continue ;; -release) prev=release continue ;; -rpath) prev=rpath continue ;; -R) prev=xrpath continue ;; -R*) func_stripname '-R' '' "$arg" dir=$func_stripname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; =*) func_stripname '=' '' "$dir" dir=$lt_sysroot$func_stripname_result ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac case "$xrpath " in *" $dir "*) ;; *) func_append xrpath " $dir" ;; esac continue ;; -shared) # The effects of -shared are defined in a previous loop. continue ;; -shrext) prev=shrext continue ;; -static | -static-libtool-libs) # The effects of -static are defined in a previous loop. # We used to do the same as -all-static on platforms that # didn't have a PIC flag, but the assumption that the effects # would be equivalent was wrong. It would break on at least # Digital Unix and AIX. continue ;; -thread-safe) thread_safe=yes continue ;; -version-info) prev=vinfo continue ;; -version-number) prev=vinfo vinfo_number=yes continue ;; -weak) prev=weak continue ;; -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result arg= save_ifs=$IFS; IFS=, for flag in $args; do IFS=$save_ifs func_quote_arg pretty "$flag" func_append arg " $func_quote_arg_result" func_append compiler_flags " $func_quote_arg_result" done IFS=$save_ifs func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Wl,*) func_stripname '-Wl,' '' "$arg" args=$func_stripname_result arg= save_ifs=$IFS; IFS=, for flag in $args; do IFS=$save_ifs func_quote_arg pretty "$flag" func_append arg " $wl$func_quote_arg_result" func_append compiler_flags " $wl$func_quote_arg_result" func_append linker_flags " $func_quote_arg_result" done IFS=$save_ifs func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Xassembler) prev=xassembler continue ;; -Xcompiler) prev=xcompiler continue ;; -Xlinker) prev=xlinker continue ;; -XCClinker) prev=xcclinker continue ;; # -msg_* for osf cc -msg_*) func_quote_arg pretty "$arg" arg=$func_quote_arg_result ;; # Flags to be passed through unchanged, with rationale: # -64, -mips[0-9] enable 64-bit mode for the SGI compiler # -r[0-9][0-9]* specify processor for the SGI compiler # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler # +DA*, +DD* enable 64-bit mode for the HP compiler # -q* compiler args for the IBM compiler # -m*, -t[45]*, -txscale* architecture-specific flags for GCC # -F/path path to uninstalled frameworks, gcc on darwin # -p, -pg, --coverage, -fprofile-* profiling flags for GCC # -fstack-protector* stack protector flags for GCC # @file GCC response files # -tp=* Portland pgcc target processor selection # --sysroot=* for sysroot support # -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization # -specs=* GCC specs files # -stdlib=* select c++ std lib with clang # -fsanitize=* Clang/GCC memory and address sanitizer # -fuse-ld=* Linker select flags for GCC # -static-* direct GCC to link specific libraries statically # -fcilkplus Cilk Plus language extension features for C/C++ # -Wa,* Pass flags directly to the assembler -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*| \ -specs=*|-fsanitize=*|-fuse-ld=*|-static-*|-fcilkplus|-Wa,*) func_quote_arg pretty "$arg" arg=$func_quote_arg_result func_append compile_command " $arg" func_append finalize_command " $arg" func_append compiler_flags " $arg" continue ;; -Z*) if test os2 = "`expr $host : '.*\(os2\)'`"; then # OS/2 uses -Zxxx to specify OS/2-specific options compiler_flags="$compiler_flags $arg" func_append compile_command " $arg" func_append finalize_command " $arg" case $arg in -Zlinker | -Zstack) prev=xcompiler ;; esac continue else # Otherwise treat like 'Some other compiler flag' below func_quote_arg pretty "$arg" arg=$func_quote_arg_result fi ;; # Some other compiler flag. -* | +*) func_quote_arg pretty "$arg" arg=$func_quote_arg_result ;; *.$objext) # A standard object. func_append objs " $arg" ;; *.lo) # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test none = "$pic_object" && test none = "$non_pic_object"; then func_fatal_error "cannot find name of object for '$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir=$func_dirname_result test none = "$pic_object" || { # Prepend the subdirectory the object is found in. pic_object=$xdir$pic_object if test dlfiles = "$prev"; then if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then func_append dlfiles " $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test dlprefiles = "$prev"; then # Preload the old-style object. func_append dlprefiles " $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg=$pic_object } # Non-PIC object. if test none != "$non_pic_object"; then # Prepend the subdirectory the object is found in. non_pic_object=$xdir$non_pic_object # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test none = "$pic_object"; then arg=$non_pic_object fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object=$pic_object func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir=$func_dirname_result func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "'$arg' is not a valid libtool object" fi fi ;; *.$libext) # An archive. func_append deplibs " $arg" func_append old_deplibs " $arg" continue ;; *.la) # A libtool-controlled library. func_resolve_sysroot "$arg" if test dlfiles = "$prev"; then # This library was specified with -dlopen. func_append dlfiles " $func_resolve_sysroot_result" prev= elif test dlprefiles = "$prev"; then # The library was specified with -dlpreopen. func_append dlprefiles " $func_resolve_sysroot_result" prev= else func_append deplibs " $func_resolve_sysroot_result" fi continue ;; # Some other compiler argument. *) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. func_quote_arg pretty "$arg" arg=$func_quote_arg_result ;; esac # arg # Now actually substitute the argument into the commands. if test -n "$arg"; then func_append compile_command " $arg" func_append finalize_command " $arg" fi done # argument parsing loop test -n "$prev" && \ func_fatal_help "the '$prevarg' option requires an argument" if test yes = "$export_dynamic" && test -n "$export_dynamic_flag_spec"; then eval arg=\"$export_dynamic_flag_spec\" func_append compile_command " $arg" func_append finalize_command " $arg" fi oldlibs= # calculate the name of the file, without its directory func_basename "$output" outputname=$func_basename_result libobjs_save=$libobjs if test -n "$shlibpath_var"; then # get the directories listed in $shlibpath_var eval shlib_search_path=\`\$ECHO \"\$$shlibpath_var\" \| \$SED \'s/:/ /g\'\` else shlib_search_path= fi eval sys_lib_search_path=\"$sys_lib_search_path_spec\" eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" # Definition is injected by LT_CONFIG during libtool generation. func_munge_path_list sys_lib_dlsearch_path "$LT_SYS_LIBRARY_PATH" func_dirname "$output" "/" "" output_objdir=$func_dirname_result$objdir func_to_tool_file "$output_objdir/" tool_output_objdir=$func_to_tool_file_result # Create the object directory. func_mkdir_p "$output_objdir" # Determine the type of output case $output in "") func_fatal_help "you must specify an output file" ;; *.$libext) linkmode=oldlib ;; *.lo | *.$objext) linkmode=obj ;; *.la) linkmode=lib ;; *) linkmode=prog ;; # Anything else should be a program. esac specialdeplibs= libs= # Find all interdependent deplibs by searching for libraries # that are linked more than once (e.g. -la -lb -la) for deplib in $deplibs; do if $opt_preserve_dup_deps; then case "$libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append libs " $deplib" done if test lib = "$linkmode"; then libs="$predeps $libs $compiler_lib_search_path $postdeps" # Compute libraries that are listed more than once in $predeps # $postdeps and mark them as special (i.e., whose duplicates are # not to be eliminated). pre_post_deps= if $opt_duplicate_compiler_generated_deps; then for pre_post_dep in $predeps $postdeps; do case "$pre_post_deps " in *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; esac func_append pre_post_deps " $pre_post_dep" done fi pre_post_deps= fi deplibs= newdependency_libs= newlib_search_path= need_relink=no # whether we're linking any uninstalled libtool libraries notinst_deplibs= # not-installed libtool libraries notinst_path= # paths that contain not-installed libtool libraries case $linkmode in lib) passes="conv dlpreopen link" for file in $dlfiles $dlprefiles; do case $file in *.la) ;; *) func_fatal_help "libraries can '-dlopen' only libtool libraries: $file" ;; esac done ;; prog) compile_deplibs= finalize_deplibs= alldeplibs=false newdlfiles= newdlprefiles= passes="conv scan dlopen dlpreopen link" ;; *) passes="conv" ;; esac for pass in $passes; do # The preopen pass in lib mode reverses $deplibs; put it back here # so that -L comes before libs that need it for instance... if test lib,link = "$linkmode,$pass"; then ## FIXME: Find the place where the list is rebuilt in the wrong ## order, and fix it there properly tmp_deplibs= for deplib in $deplibs; do tmp_deplibs="$deplib $tmp_deplibs" done deplibs=$tmp_deplibs fi if test lib,link = "$linkmode,$pass" || test prog,scan = "$linkmode,$pass"; then libs=$deplibs deplibs= fi if test prog = "$linkmode"; then case $pass in dlopen) libs=$dlfiles ;; dlpreopen) libs=$dlprefiles ;; link) libs="$deplibs %DEPLIBS%" test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs" ;; esac fi if test lib,dlpreopen = "$linkmode,$pass"; then # Collect and forward deplibs of preopened libtool libs for lib in $dlprefiles; do # Ignore non-libtool-libs dependency_libs= func_resolve_sysroot "$lib" case $lib in *.la) func_source "$func_resolve_sysroot_result" ;; esac # Collect preopened libtool deplibs, except any this library # has declared as weak libs for deplib in $dependency_libs; do func_basename "$deplib" deplib_base=$func_basename_result case " $weak_libs " in *" $deplib_base "*) ;; *) func_append deplibs " $deplib" ;; esac done done libs=$dlprefiles fi if test dlopen = "$pass"; then # Collect dlpreopened libraries save_deplibs=$deplibs deplibs= fi for deplib in $libs; do lib= found=false case $deplib in -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) if test prog,link = "$linkmode,$pass"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else func_append compiler_flags " $deplib" if test lib = "$linkmode"; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) func_append new_inherited_linker_flags " $deplib" ;; esac fi fi continue ;; -l*) if test lib != "$linkmode" && test prog != "$linkmode"; then func_warning "'-l' is ignored for archives/objects" continue fi func_stripname '-l' '' "$deplib" name=$func_stripname_result if test lib = "$linkmode"; then searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" else searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" fi for searchdir in $searchdirs; do for search_ext in .la $std_shrext .so .a; do # Search the libtool library lib=$searchdir/lib$name$search_ext if test -f "$lib"; then if test .la = "$search_ext"; then found=: else found=false fi break 2 fi done done if $found; then # deplib is a libtool library # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, # We need to do some special things here, and not later. if test yes = "$allow_libtool_libs_with_static_runtimes"; then case " $predeps $postdeps " in *" $deplib "*) if func_lalib_p "$lib"; then library_names= old_library= func_source "$lib" for l in $old_library $library_names; do ll=$l done if test "X$ll" = "X$old_library"; then # only static version available found=false func_dirname "$lib" "" "." ladir=$func_dirname_result lib=$ladir/$old_library if test prog,link = "$linkmode,$pass"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" fi continue fi fi ;; *) ;; esac fi else # deplib doesn't seem to be a libtool library if test prog,link = "$linkmode,$pass"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" fi continue fi ;; # -l *.ltframework) if test prog,link = "$linkmode,$pass"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" if test lib = "$linkmode"; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) func_append new_inherited_linker_flags " $deplib" ;; esac fi fi continue ;; -L*) case $linkmode in lib) deplibs="$deplib $deplibs" test conv = "$pass" && continue newdependency_libs="$deplib $newdependency_libs" func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; prog) if test conv = "$pass"; then deplibs="$deplib $deplibs" continue fi if test scan = "$pass"; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; *) func_warning "'-L' is ignored for archives/objects" ;; esac # linkmode continue ;; # -L -R*) if test link = "$pass"; then func_stripname '-R' '' "$deplib" func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result # Make sure the xrpath contains only unique directories. case "$xrpath " in *" $dir "*) ;; *) func_append xrpath " $dir" ;; esac fi deplibs="$deplib $deplibs" continue ;; *.la) func_resolve_sysroot "$deplib" lib=$func_resolve_sysroot_result ;; *.$libext) if test conv = "$pass"; then deplibs="$deplib $deplibs" continue fi case $linkmode in lib) # Linking convenience modules into shared libraries is allowed, # but linking other static libraries is non-portable. case " $dlpreconveniencelibs " in *" $deplib "*) ;; *) valid_a_lib=false case $deplibs_check_method in match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ | $EGREP "$match_pattern_regex" > /dev/null; then valid_a_lib=: fi ;; pass_all) valid_a_lib=: ;; esac if $valid_a_lib; then echo $ECHO "*** Warning: Linking the shared library $output against the" $ECHO "*** static library $deplib is not portable!" deplibs="$deplib $deplibs" else echo $ECHO "*** Warning: Trying to link with static lib archive $deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because the file extensions .$libext of this argument makes me believe" echo "*** that it is just a static archive that I should not use here." fi ;; esac continue ;; prog) if test link != "$pass"; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi continue ;; esac # linkmode ;; # *.$libext *.lo | *.$objext) if test conv = "$pass"; then deplibs="$deplib $deplibs" elif test prog = "$linkmode"; then if test dlpreopen = "$pass" || test yes != "$dlopen_support" || test no = "$build_libtool_libs"; then # If there is no dlopen support or we're linking statically, # we need to preload. func_append newdlprefiles " $deplib" compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else func_append newdlfiles " $deplib" fi fi continue ;; %DEPLIBS%) alldeplibs=: continue ;; esac # case $deplib $found || test -f "$lib" \ || func_fatal_error "cannot find the library '$lib' or unhandled argument '$deplib'" # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$lib" \ || func_fatal_error "'$lib' is not a valid libtool archive" func_dirname "$lib" "" "." ladir=$func_dirname_result dlname= dlopen= dlpreopen= libdir= library_names= old_library= inherited_linker_flags= # If the library was installed with an old release of libtool, # it will not redefine variables installed, or shouldnotlink installed=yes shouldnotlink=no avoidtemprpath= # Read the .la file func_source "$lib" # Convert "-framework foo" to "foo.ltframework" if test -n "$inherited_linker_flags"; then tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do case " $new_inherited_linker_flags " in *" $tmp_inherited_linker_flag "*) ;; *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; esac done fi dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` if test lib,link = "$linkmode,$pass" || test prog,scan = "$linkmode,$pass" || { test prog != "$linkmode" && test lib != "$linkmode"; }; then test -n "$dlopen" && func_append dlfiles " $dlopen" test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" fi if test conv = "$pass"; then # Only check for convenience libraries deplibs="$lib $deplibs" if test -z "$libdir"; then if test -z "$old_library"; then func_fatal_error "cannot find name of link library for '$lib'" fi # It is a libtool convenience library, so add in its objects. func_append convenience " $ladir/$objdir/$old_library" func_append old_convenience " $ladir/$objdir/$old_library" tmp_libs= for deplib in $dependency_libs; do deplibs="$deplib $deplibs" if $opt_preserve_dup_deps; then case "$tmp_libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append tmp_libs " $deplib" done elif test prog != "$linkmode" && test lib != "$linkmode"; then func_fatal_error "'$lib' is not a convenience library" fi continue fi # $pass = conv # Get the name of the library we link against. linklib= if test -n "$old_library" && { test yes = "$prefer_static_libs" || test built,no = "$prefer_static_libs,$installed"; }; then linklib=$old_library else for l in $old_library $library_names; do linklib=$l done fi if test -z "$linklib"; then func_fatal_error "cannot find name of link library for '$lib'" fi # This library was specified with -dlopen. if test dlopen = "$pass"; then test -z "$libdir" \ && func_fatal_error "cannot -dlopen a convenience library: '$lib'" if test -z "$dlname" || test yes != "$dlopen_support" || test no = "$build_libtool_libs" then # If there is no dlname, no dlopen support or we're linking # statically, we need to preload. We also need to preload any # dependent libraries so libltdl's deplib preloader doesn't # bomb out in the load deplibs phase. func_append dlprefiles " $lib $dependency_libs" else func_append newdlfiles " $lib" fi continue fi # $pass = dlopen # We need an absolute path. case $ladir in [\\/]* | [A-Za-z]:[\\/]*) abs_ladir=$ladir ;; *) abs_ladir=`cd "$ladir" && pwd` if test -z "$abs_ladir"; then func_warning "cannot determine absolute directory name of '$ladir'" func_warning "passing it literally to the linker, although it might fail" abs_ladir=$ladir fi ;; esac func_basename "$lib" laname=$func_basename_result # Find the relevant object directory and library name. if test yes = "$installed"; then if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then func_warning "library '$lib' was moved." dir=$ladir absdir=$abs_ladir libdir=$abs_ladir else dir=$lt_sysroot$libdir absdir=$lt_sysroot$libdir fi test yes = "$hardcode_automatic" && avoidtemprpath=yes else if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then dir=$ladir absdir=$abs_ladir # Remove this search path later func_append notinst_path " $abs_ladir" else dir=$ladir/$objdir absdir=$abs_ladir/$objdir # Remove this search path later func_append notinst_path " $abs_ladir" fi fi # $installed = yes func_stripname 'lib' '.la' "$laname" name=$func_stripname_result # This library was specified with -dlpreopen. if test dlpreopen = "$pass"; then if test -z "$libdir" && test prog = "$linkmode"; then func_fatal_error "only libraries may -dlpreopen a convenience library: '$lib'" fi case $host in # special handling for platforms with PE-DLLs. *cygwin* | *mingw* | *cegcc* ) # Linker will automatically link against shared library if both # static and shared are present. Therefore, ensure we extract # symbols from the import library if a shared library is present # (otherwise, the dlopen module name will be incorrect). We do # this by putting the import library name into $newdlprefiles. # We recover the dlopen module name by 'saving' the la file # name in a special purpose variable, and (later) extracting the # dlname from the la file. if test -n "$dlname"; then func_tr_sh "$dir/$linklib" eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" func_append newdlprefiles " $dir/$linklib" else func_append newdlprefiles " $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ func_append dlpreconveniencelibs " $dir/$old_library" fi ;; * ) # Prefer using a static library (so that no silly _DYNAMIC symbols # are required to link). if test -n "$old_library"; then func_append newdlprefiles " $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ func_append dlpreconveniencelibs " $dir/$old_library" # Otherwise, use the dlname, so that lt_dlopen finds it. elif test -n "$dlname"; then func_append newdlprefiles " $dir/$dlname" else func_append newdlprefiles " $dir/$linklib" fi ;; esac fi # $pass = dlpreopen if test -z "$libdir"; then # Link the convenience library if test lib = "$linkmode"; then deplibs="$dir/$old_library $deplibs" elif test prog,link = "$linkmode,$pass"; then compile_deplibs="$dir/$old_library $compile_deplibs" finalize_deplibs="$dir/$old_library $finalize_deplibs" else deplibs="$lib $deplibs" # used for prog,scan pass fi continue fi if test prog = "$linkmode" && test link != "$pass"; then func_append newlib_search_path " $ladir" deplibs="$lib $deplibs" linkalldeplibs=false if test no != "$link_all_deplibs" || test -z "$library_names" || test no = "$build_libtool_libs"; then linkalldeplibs=: fi tmp_libs= for deplib in $dependency_libs; do case $deplib in -L*) func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; esac # Need to link against all dependency_libs? if $linkalldeplibs; then deplibs="$deplib $deplibs" else # Need to hardcode shared library paths # or/and link against static libraries newdependency_libs="$deplib $newdependency_libs" fi if $opt_preserve_dup_deps; then case "$tmp_libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append tmp_libs " $deplib" done # for deplib continue fi # $linkmode = prog... if test prog,link = "$linkmode,$pass"; then if test -n "$library_names" && { { test no = "$prefer_static_libs" || test built,yes = "$prefer_static_libs,$installed"; } || test -z "$old_library"; }; then # We need to hardcode the library path if test -n "$shlibpath_var" && test -z "$avoidtemprpath"; then # Make sure the rpath contains only unique directories. case $temp_rpath: in *"$absdir:"*) ;; *) func_append temp_rpath "$absdir:" ;; esac fi # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) func_append compile_rpath " $absdir" ;; esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac ;; esac fi # $linkmode,$pass = prog,link... if $alldeplibs && { test pass_all = "$deplibs_check_method" || { test yes = "$build_libtool_libs" && test -n "$library_names"; }; }; then # We only need to search for static libraries continue fi fi link_static=no # Whether the deplib will be linked statically use_static_libs=$prefer_static_libs if test built = "$use_static_libs" && test yes = "$installed"; then use_static_libs=no fi if test -n "$library_names" && { test no = "$use_static_libs" || test -z "$old_library"; }; then case $host in *cygwin* | *mingw* | *cegcc* | *os2*) # No point in relinking DLLs because paths are not encoded func_append notinst_deplibs " $lib" need_relink=no ;; *) if test no = "$installed"; then func_append notinst_deplibs " $lib" need_relink=yes fi ;; esac # This is a shared library # Warn about portability, can't link against -module's on some # systems (darwin). Don't bleat about dlopened modules though! dlopenmodule= for dlpremoduletest in $dlprefiles; do if test "X$dlpremoduletest" = "X$lib"; then dlopenmodule=$dlpremoduletest break fi done if test -z "$dlopenmodule" && test yes = "$shouldnotlink" && test link = "$pass"; then echo if test prog = "$linkmode"; then $ECHO "*** Warning: Linking the executable $output against the loadable module" else $ECHO "*** Warning: Linking the shared library $output against the loadable module" fi $ECHO "*** $linklib is not portable!" fi if test lib = "$linkmode" && test yes = "$hardcode_into_libs"; then # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) func_append compile_rpath " $absdir" ;; esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac ;; esac fi if test -n "$old_archive_from_expsyms_cmds"; then # figure out the soname set dummy $library_names shift realname=$1 shift libname=`eval "\\$ECHO \"$libname_spec\""` # use dlname if we got it. it's perfectly good, no? if test -n "$dlname"; then soname=$dlname elif test -n "$soname_spec"; then # bleh windows case $host in *cygwin* | mingw* | *cegcc* | *os2*) func_arith $current - $age major=$func_arith_result versuffix=-$major ;; esac eval soname=\"$soname_spec\" else soname=$realname fi # Make a new name for the extract_expsyms_cmds to use soroot=$soname func_basename "$soroot" soname=$func_basename_result func_stripname 'lib' '.dll' "$soname" newlib=libimp-$func_stripname_result.a # If the library has no export list, then create one now if test -f "$output_objdir/$soname-def"; then : else func_verbose "extracting exported symbol list from '$soname'" func_execute_cmds "$extract_expsyms_cmds" 'exit $?' fi # Create $newlib if test -f "$output_objdir/$newlib"; then :; else func_verbose "generating import library for '$soname'" func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' fi # make sure the library variables are pointing to the new library dir=$output_objdir linklib=$newlib fi # test -n "$old_archive_from_expsyms_cmds" if test prog = "$linkmode" || test relink != "$opt_mode"; then add_shlibpath= add_dir= add= lib_linked=yes case $hardcode_action in immediate | unsupported) if test no = "$hardcode_direct"; then add=$dir/$linklib case $host in *-*-sco3.2v5.0.[024]*) add_dir=-L$dir ;; *-*-sysv4*uw2*) add_dir=-L$dir ;; *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ *-*-unixware7*) add_dir=-L$dir ;; *-*-darwin* ) # if the lib is a (non-dlopened) module then we cannot # link against it, someone is ignoring the earlier warnings if /usr/bin/file -L $add 2> /dev/null | $GREP ": [^:]* bundle" >/dev/null; then if test "X$dlopenmodule" != "X$lib"; then $ECHO "*** Warning: lib $linklib is a module, not a shared library" if test -z "$old_library"; then echo echo "*** And there doesn't seem to be a static archive available" echo "*** The link will probably fail, sorry" else add=$dir/$old_library fi elif test -n "$old_library"; then add=$dir/$old_library fi fi esac elif test no = "$hardcode_minus_L"; then case $host in *-*-sunos*) add_shlibpath=$dir ;; esac add_dir=-L$dir add=-l$name elif test no = "$hardcode_shlibpath_var"; then add_shlibpath=$dir add=-l$name else lib_linked=no fi ;; relink) if test yes = "$hardcode_direct" && test no = "$hardcode_direct_absolute"; then add=$dir/$linklib elif test yes = "$hardcode_minus_L"; then add_dir=-L$absdir # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) func_append add_dir " -L$inst_prefix_dir$libdir" ;; esac fi add=-l$name elif test yes = "$hardcode_shlibpath_var"; then add_shlibpath=$dir add=-l$name else lib_linked=no fi ;; *) lib_linked=no ;; esac if test yes != "$lib_linked"; then func_fatal_configuration "unsupported hardcode properties" fi if test -n "$add_shlibpath"; then case :$compile_shlibpath: in *":$add_shlibpath:"*) ;; *) func_append compile_shlibpath "$add_shlibpath:" ;; esac fi if test prog = "$linkmode"; then test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" test -n "$add" && compile_deplibs="$add $compile_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" if test yes != "$hardcode_direct" && test yes != "$hardcode_minus_L" && test yes = "$hardcode_shlibpath_var"; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) func_append finalize_shlibpath "$libdir:" ;; esac fi fi fi if test prog = "$linkmode" || test relink = "$opt_mode"; then add_shlibpath= add_dir= add= # Finalize command for both is simple: just hardcode it. if test yes = "$hardcode_direct" && test no = "$hardcode_direct_absolute"; then add=$libdir/$linklib elif test yes = "$hardcode_minus_L"; then add_dir=-L$libdir add=-l$name elif test yes = "$hardcode_shlibpath_var"; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) func_append finalize_shlibpath "$libdir:" ;; esac add=-l$name elif test yes = "$hardcode_automatic"; then if test -n "$inst_prefix_dir" && test -f "$inst_prefix_dir$libdir/$linklib"; then add=$inst_prefix_dir$libdir/$linklib else add=$libdir/$linklib fi else # We cannot seem to hardcode it, guess we'll fake it. add_dir=-L$libdir # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) func_append add_dir " -L$inst_prefix_dir$libdir" ;; esac fi add=-l$name fi if test prog = "$linkmode"; then test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" test -n "$add" && finalize_deplibs="$add $finalize_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" fi fi elif test prog = "$linkmode"; then # Here we assume that one of hardcode_direct or hardcode_minus_L # is not unsupported. This is valid on all known static and # shared platforms. if test unsupported != "$hardcode_direct"; then test -n "$old_library" && linklib=$old_library compile_deplibs="$dir/$linklib $compile_deplibs" finalize_deplibs="$dir/$linklib $finalize_deplibs" else compile_deplibs="-l$name -L$dir $compile_deplibs" finalize_deplibs="-l$name -L$dir $finalize_deplibs" fi elif test yes = "$build_libtool_libs"; then # Not a shared library if test pass_all != "$deplibs_check_method"; then # We're trying link a shared library against a static one # but the system doesn't support it. # Just print a warning and add the library to dependency_libs so # that the program can be linked against the static library. echo $ECHO "*** Warning: This system cannot link to static lib archive $lib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have." if test yes = "$module"; then echo "*** But as you try to build a module library, libtool will still create " echo "*** a static module, that should work as long as the dlopening application" echo "*** is linked with the -dlopen flag to resolve symbols at runtime." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" echo "*** lists from a program, using 'nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." echo "*** 'nm' from GNU binutils and a full rebuild may help." fi if test no = "$build_old_libs"; then build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi else deplibs="$dir/$old_library $deplibs" link_static=yes fi fi # link shared/static library? if test lib = "$linkmode"; then if test -n "$dependency_libs" && { test yes != "$hardcode_into_libs" || test yes = "$build_old_libs" || test yes = "$link_static"; }; then # Extract -R from dependency_libs temp_deplibs= for libdir in $dependency_libs; do case $libdir in -R*) func_stripname '-R' '' "$libdir" temp_xrpath=$func_stripname_result case " $xrpath " in *" $temp_xrpath "*) ;; *) func_append xrpath " $temp_xrpath";; esac;; *) func_append temp_deplibs " $libdir";; esac done dependency_libs=$temp_deplibs fi func_append newlib_search_path " $absdir" # Link against this library test no = "$link_static" && newdependency_libs="$abs_ladir/$laname $newdependency_libs" # ... and its dependency_libs tmp_libs= for deplib in $dependency_libs; do newdependency_libs="$deplib $newdependency_libs" case $deplib in -L*) func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result";; *) func_resolve_sysroot "$deplib" ;; esac if $opt_preserve_dup_deps; then case "$tmp_libs " in *" $func_resolve_sysroot_result "*) func_append specialdeplibs " $func_resolve_sysroot_result" ;; esac fi func_append tmp_libs " $func_resolve_sysroot_result" done if test no != "$link_all_deplibs"; then # Add the search paths of all dependency libraries for deplib in $dependency_libs; do path= case $deplib in -L*) path=$deplib ;; *.la) func_resolve_sysroot "$deplib" deplib=$func_resolve_sysroot_result func_dirname "$deplib" "" "." dir=$func_dirname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) absdir=$dir ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then func_warning "cannot determine absolute directory name of '$dir'" absdir=$dir fi ;; esac if $GREP "^installed=no" $deplib > /dev/null; then case $host in *-*-darwin*) depdepl= eval deplibrary_names=`$SED -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` if test -n "$deplibrary_names"; then for tmp in $deplibrary_names; do depdepl=$tmp done if test -f "$absdir/$objdir/$depdepl"; then depdepl=$absdir/$objdir/$depdepl darwin_install_name=`$OTOOL -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` if test -z "$darwin_install_name"; then darwin_install_name=`$OTOOL64 -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` fi func_append compiler_flags " $wl-dylib_file $wl$darwin_install_name:$depdepl" func_append linker_flags " -dylib_file $darwin_install_name:$depdepl" path= fi fi ;; *) path=-L$absdir/$objdir ;; esac else eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` test -z "$libdir" && \ func_fatal_error "'$deplib' is not a valid libtool archive" test "$absdir" != "$libdir" && \ func_warning "'$deplib' seems to be moved" path=-L$absdir fi ;; esac case " $deplibs " in *" $path "*) ;; *) deplibs="$path $deplibs" ;; esac done fi # link_all_deplibs != no fi # linkmode = lib done # for deplib in $libs if test link = "$pass"; then if test prog = "$linkmode"; then compile_deplibs="$new_inherited_linker_flags $compile_deplibs" finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" else compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` fi fi dependency_libs=$newdependency_libs if test dlpreopen = "$pass"; then # Link the dlpreopened libraries before other libraries for deplib in $save_deplibs; do deplibs="$deplib $deplibs" done fi if test dlopen != "$pass"; then test conv = "$pass" || { # Make sure lib_search_path contains only unique directories. lib_search_path= for dir in $newlib_search_path; do case "$lib_search_path " in *" $dir "*) ;; *) func_append lib_search_path " $dir" ;; esac done newlib_search_path= } if test prog,link = "$linkmode,$pass"; then vars="compile_deplibs finalize_deplibs" else vars=deplibs fi for var in $vars dependency_libs; do # Add libraries to $var in reverse order eval tmp_libs=\"\$$var\" new_libs= for deplib in $tmp_libs; do # FIXME: Pedantically, this is the right thing to do, so # that some nasty dependency loop isn't accidentally # broken: #new_libs="$deplib $new_libs" # Pragmatically, this seems to cause very few problems in # practice: case $deplib in -L*) new_libs="$deplib $new_libs" ;; -R*) ;; *) # And here is the reason: when a library appears more # than once as an explicit dependence of a library, or # is implicitly linked in more than once by the # compiler, it is considered special, and multiple # occurrences thereof are not removed. Compare this # with having the same library being listed as a # dependency of multiple other libraries: in this case, # we know (pedantically, we assume) the library does not # need to be listed more than once, so we keep only the # last copy. This is not always right, but it is rare # enough that we require users that really mean to play # such unportable linking tricks to link the library # using -Wl,-lname, so that libtool does not consider it # for duplicate removal. case " $specialdeplibs " in *" $deplib "*) new_libs="$deplib $new_libs" ;; *) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$deplib $new_libs" ;; esac ;; esac ;; esac done tmp_libs= for deplib in $new_libs; do case $deplib in -L*) case " $tmp_libs " in *" $deplib "*) ;; *) func_append tmp_libs " $deplib" ;; esac ;; *) func_append tmp_libs " $deplib" ;; esac done eval $var=\"$tmp_libs\" done # for var fi # Add Sun CC postdeps if required: test CXX = "$tagname" && { case $host_os in linux*) case `$CC -V 2>&1 | $SED 5q` in *Sun\ C*) # Sun C++ 5.9 func_suncc_cstd_abi if test no != "$suncc_use_cstd_abi"; then func_append postdeps ' -library=Cstd -library=Crun' fi ;; esac ;; solaris*) func_cc_basename "$CC" case $func_cc_basename_result in CC* | sunCC*) func_suncc_cstd_abi if test no != "$suncc_use_cstd_abi"; then func_append postdeps ' -library=Cstd -library=Crun' fi ;; esac ;; esac } # Last step: remove runtime libs from dependency_libs # (they stay in deplibs) tmp_libs= for i in $dependency_libs; do case " $predeps $postdeps $compiler_lib_search_path " in *" $i "*) i= ;; esac if test -n "$i"; then func_append tmp_libs " $i" fi done dependency_libs=$tmp_libs done # for pass if test prog = "$linkmode"; then dlfiles=$newdlfiles fi if test prog = "$linkmode" || test lib = "$linkmode"; then dlprefiles=$newdlprefiles fi case $linkmode in oldlib) if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then func_warning "'-dlopen' is ignored for archives" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "'-l' and '-L' are ignored for archives" ;; esac test -n "$rpath" && \ func_warning "'-rpath' is ignored for archives" test -n "$xrpath" && \ func_warning "'-R' is ignored for archives" test -n "$vinfo" && \ func_warning "'-version-info/-version-number' is ignored for archives" test -n "$release" && \ func_warning "'-release' is ignored for archives" test -n "$export_symbols$export_symbols_regex" && \ func_warning "'-export-symbols' is ignored for archives" # Now set the variables for building old libraries. build_libtool_libs=no oldlibs=$output func_append objs "$old_deplibs" ;; lib) # Make sure we only generate libraries of the form 'libNAME.la'. case $outputname in lib*) func_stripname 'lib' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" ;; *) test no = "$module" \ && func_fatal_help "libtool library '$output' must begin with 'lib'" if test no != "$need_lib_prefix"; then # Add the "lib" prefix for modules if required func_stripname '' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" else func_stripname '' '.la' "$outputname" libname=$func_stripname_result fi ;; esac if test -n "$objs"; then if test pass_all != "$deplibs_check_method"; then func_fatal_error "cannot build libtool library '$output' from non-libtool objects on this host:$objs" else echo $ECHO "*** Warning: Linking the shared library $output against the non-libtool" $ECHO "*** objects $objs is not portable!" func_append libobjs " $objs" fi fi test no = "$dlself" \ || func_warning "'-dlopen self' is ignored for libtool libraries" set dummy $rpath shift test 1 -lt "$#" \ && func_warning "ignoring multiple '-rpath's for a libtool library" install_libdir=$1 oldlibs= if test -z "$rpath"; then if test yes = "$build_libtool_libs"; then # Building a libtool convenience library. # Some compilers have problems with a '.al' extension so # convenience libraries should have the same extension an # archive normally would. oldlibs="$output_objdir/$libname.$libext $oldlibs" build_libtool_libs=convenience build_old_libs=yes fi test -n "$vinfo" && \ func_warning "'-version-info/-version-number' is ignored for convenience libraries" test -n "$release" && \ func_warning "'-release' is ignored for convenience libraries" else # Parse the version information argument. save_ifs=$IFS; IFS=: set dummy $vinfo 0 0 0 shift IFS=$save_ifs test -n "$7" && \ func_fatal_help "too many parameters to '-version-info'" # convert absolute version numbers to libtool ages # this retains compatibility with .la files and attempts # to make the code below a bit more comprehensible case $vinfo_number in yes) number_major=$1 number_minor=$2 number_revision=$3 # # There are really only two kinds -- those that # use the current revision as the major version # and those that subtract age and use age as # a minor version. But, then there is irix # that has an extra 1 added just for fun # case $version_type in # correct linux to gnu/linux during the next big refactor darwin|freebsd-elf|linux|midnightbsd-elf|osf|windows|none) func_arith $number_major + $number_minor current=$func_arith_result age=$number_minor revision=$number_revision ;; freebsd-aout|qnx|sunos) current=$number_major revision=$number_minor age=0 ;; irix|nonstopux) func_arith $number_major + $number_minor current=$func_arith_result age=$number_minor revision=$number_minor lt_irix_increment=no ;; *) func_fatal_configuration "$modename: unknown library version type '$version_type'" ;; esac ;; no) current=$1 revision=$2 age=$3 ;; esac # Check that each of the things are valid numbers. case $current in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "CURRENT '$current' must be a nonnegative integer" func_fatal_error "'$vinfo' is not valid version information" ;; esac case $revision in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "REVISION '$revision' must be a nonnegative integer" func_fatal_error "'$vinfo' is not valid version information" ;; esac case $age in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "AGE '$age' must be a nonnegative integer" func_fatal_error "'$vinfo' is not valid version information" ;; esac if test "$age" -gt "$current"; then func_error "AGE '$age' is greater than the current interface number '$current'" func_fatal_error "'$vinfo' is not valid version information" fi # Calculate the version variables. major= versuffix= verstring= case $version_type in none) ;; darwin) # Like Linux, but with the current version available in # verstring for coding it into the library header func_arith $current - $age major=.$func_arith_result versuffix=$major.$age.$revision # Darwin ld doesn't like 0 for these options... func_arith $current + 1 minor_current=$func_arith_result xlcverstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" # On Darwin other compilers case $CC in nagfor*) verstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" ;; *) verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" ;; esac ;; freebsd-aout) major=.$current versuffix=.$current.$revision ;; freebsd-elf | midnightbsd-elf) func_arith $current - $age major=.$func_arith_result versuffix=$major.$age.$revision ;; irix | nonstopux) if test no = "$lt_irix_increment"; then func_arith $current - $age else func_arith $current - $age + 1 fi major=$func_arith_result case $version_type in nonstopux) verstring_prefix=nonstopux ;; *) verstring_prefix=sgi ;; esac verstring=$verstring_prefix$major.$revision # Add in all the interfaces that we are compatible with. loop=$revision while test 0 -ne "$loop"; do func_arith $revision - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring=$verstring_prefix$major.$iface:$verstring done # Before this point, $major must not contain '.'. major=.$major versuffix=$major.$revision ;; linux) # correct to gnu/linux during the next big refactor func_arith $current - $age major=.$func_arith_result versuffix=$major.$age.$revision ;; osf) func_arith $current - $age major=.$func_arith_result versuffix=.$current.$age.$revision verstring=$current.$age.$revision # Add in all the interfaces that we are compatible with. loop=$age while test 0 -ne "$loop"; do func_arith $current - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring=$verstring:$iface.0 done # Make executables depend on our current version. func_append verstring ":$current.0" ;; qnx) major=.$current versuffix=.$current ;; sco) major=.$current versuffix=.$current ;; sunos) major=.$current versuffix=.$current.$revision ;; windows) # Use '-' rather than '.', since we only want one # extension on DOS 8.3 file systems. func_arith $current - $age major=$func_arith_result versuffix=-$major ;; *) func_fatal_configuration "unknown library version type '$version_type'" ;; esac # Clear the version info if we defaulted, and they specified a release. if test -z "$vinfo" && test -n "$release"; then major= case $version_type in darwin) # we can't check for "0.0" in archive_cmds due to quoting # problems, so we reset it completely verstring= ;; *) verstring=0.0 ;; esac if test no = "$need_version"; then versuffix= else versuffix=.0.0 fi fi # Remove version info from name if versioning should be avoided if test yes,no = "$avoid_version,$need_version"; then major= versuffix= verstring= fi # Check to see if the archive will have undefined symbols. if test yes = "$allow_undefined"; then if test unsupported = "$allow_undefined_flag"; then if test yes = "$build_old_libs"; then func_warning "undefined symbols not allowed in $host shared libraries; building static only" build_libtool_libs=no else func_fatal_error "can't build $host shared library unless -no-undefined is specified" fi fi else # Don't allow undefined symbols. allow_undefined_flag=$no_undefined_flag fi fi func_generate_dlsyms "$libname" "$libname" : func_append libobjs " $symfileobj" test " " = "$libobjs" && libobjs= if test relink != "$opt_mode"; then # Remove our outputs, but don't remove object files since they # may have been created when compiling PIC objects. removelist= tempremovelist=`$ECHO "$output_objdir/*"` for p in $tempremovelist; do case $p in *.$objext | *.gcno) ;; $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/$libname$release.*) if test -n "$precious_files_regex"; then if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 then continue fi fi func_append removelist " $p" ;; *) ;; esac done test -n "$removelist" && \ func_show_eval "${RM}r \$removelist" fi # Now set the variables for building old libraries. if test yes = "$build_old_libs" && test convenience != "$build_libtool_libs"; then func_append oldlibs " $output_objdir/$libname.$libext" # Transform .lo files to .o files. oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; $lo2o" | $NL2SP` fi # Eliminate all temporary directories. #for path in $notinst_path; do # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` #done if test -n "$xrpath"; then # If the user specified any rpath flags, then add them. temp_xrpath= for libdir in $xrpath; do func_replace_sysroot "$libdir" func_append temp_xrpath " -R$func_replace_sysroot_result" case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac done if test yes != "$hardcode_into_libs" || test yes = "$build_old_libs"; then dependency_libs="$temp_xrpath $dependency_libs" fi fi # Make sure dlfiles contains only unique files that won't be dlpreopened old_dlfiles=$dlfiles dlfiles= for lib in $old_dlfiles; do case " $dlprefiles $dlfiles " in *" $lib "*) ;; *) func_append dlfiles " $lib" ;; esac done # Make sure dlprefiles contains only unique files old_dlprefiles=$dlprefiles dlprefiles= for lib in $old_dlprefiles; do case "$dlprefiles " in *" $lib "*) ;; *) func_append dlprefiles " $lib" ;; esac done if test yes = "$build_libtool_libs"; then if test -n "$rpath"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) # these systems don't actually have a c library (as such)! ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C library is in the System framework func_append deplibs " System.ltframework" ;; *-*-netbsd*) # Don't link with libc until the a.out ld.so is fixed. ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-midnightbsd*) # Do not include libc due to us having libc/libc_r. ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work ;; *) # Add libc to deplibs on all other systems if necessary. if test yes = "$build_libtool_need_lc"; then func_append deplibs " -lc" fi ;; esac fi # Transform deplibs into only deplibs that can be linked in shared. name_save=$name libname_save=$libname release_save=$release versuffix_save=$versuffix major_save=$major # I'm not sure if I'm treating the release correctly. I think # release should show up in the -l (ie -lgmp5) so we don't want to # add it in twice. Is that correct? release= versuffix= major= newdeplibs= droppeddeps=no case $deplibs_check_method in pass_all) # Don't check for shared/static. Everything works. # This might be a little naive. We might want to check # whether the library exists or not. But this is on # osf3 & osf4 and I'm not really sure... Just # implementing what was already the behavior. newdeplibs=$deplibs ;; test_compile) # This code stresses the "libraries are programs" paradigm to its # limits. Maybe even breaks it. We compile a program, linking it # against the deplibs as a proxy for the library. Then we can check # whether they linked in statically or dynamically with ldd. $opt_dry_run || $RM conftest.c cat > conftest.c </dev/null` $nocaseglob else potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` fi for potent_lib in $potential_libs; do # Follow soft links. if ls -lLd "$potent_lib" 2>/dev/null | $GREP " -> " >/dev/null; then continue fi # The statement above tries to avoid entering an # endless loop below, in case of cyclic links. # We might still enter an endless loop, since a link # loop can be closed while we follow links, # but so what? potlib=$potent_lib while test -h "$potlib" 2>/dev/null; do potliblink=`ls -ld $potlib | $SED 's/.* -> //'` case $potliblink in [\\/]* | [A-Za-z]:[\\/]*) potlib=$potliblink;; *) potlib=`$ECHO "$potlib" | $SED 's|[^/]*$||'`"$potliblink";; esac done if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | $SED -e 10q | $EGREP "$file_magic_regex" > /dev/null; then func_append newdeplibs " $a_deplib" a_deplib= break 2 fi done done fi if test -n "$a_deplib"; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib"; then $ECHO "*** with $libname but no candidates were found. (...for file magic test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a file magic. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. func_append newdeplibs " $a_deplib" ;; esac done # Gone through all deplibs. ;; match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` for a_deplib in $deplibs; do case $a_deplib in -l*) func_stripname -l '' "$a_deplib" name=$func_stripname_result if test yes = "$allow_libtool_libs_with_static_runtimes"; then case " $predeps $postdeps " in *" $a_deplib "*) func_append newdeplibs " $a_deplib" a_deplib= ;; esac fi if test -n "$a_deplib"; then libname=`eval "\\$ECHO \"$libname_spec\""` for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do potential_libs=`ls $i/$libname[.-]* 2>/dev/null` for potent_lib in $potential_libs; do potlib=$potent_lib # see symlink-check above in file_magic test if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ $EGREP "$match_pattern_regex" > /dev/null; then func_append newdeplibs " $a_deplib" a_deplib= break 2 fi done done fi if test -n "$a_deplib"; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib"; then $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a regex pattern. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. func_append newdeplibs " $a_deplib" ;; esac done # Gone through all deplibs. ;; none | unknown | *) newdeplibs= tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` if test yes = "$allow_libtool_libs_with_static_runtimes"; then for i in $predeps $postdeps; do # can't use Xsed below, because $i might contain '/' tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s|$i||"` done fi case $tmp_deplibs in *[!\ \ ]*) echo if test none = "$deplibs_check_method"; then echo "*** Warning: inter-library dependencies are not supported in this platform." else echo "*** Warning: inter-library dependencies are not known to be supported." fi echo "*** All declared inter-library dependencies are being dropped." droppeddeps=yes ;; esac ;; esac versuffix=$versuffix_save major=$major_save release=$release_save libname=$libname_save name=$name_save case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library with the System framework newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` ;; esac if test yes = "$droppeddeps"; then if test yes = "$module"; then echo echo "*** Warning: libtool could not satisfy all declared inter-library" $ECHO "*** dependencies of module $libname. Therefore, libtool will create" echo "*** a static module, that should work as long as the dlopening" echo "*** application is linked with the -dlopen flag." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" echo "*** lists from a program, using 'nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." echo "*** 'nm' from GNU binutils and a full rebuild may help." fi if test no = "$build_old_libs"; then oldlibs=$output_objdir/$libname.$libext build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi else echo "*** The inter-library dependencies that have been dropped here will be" echo "*** automatically added whenever a program is linked with this library" echo "*** or is declared to -dlopen it." if test no = "$allow_undefined"; then echo echo "*** Since this library must not contain undefined symbols," echo "*** because either the platform does not support them or" echo "*** it was explicitly requested with -no-undefined," echo "*** libtool will only create a static version of it." if test no = "$build_old_libs"; then oldlibs=$output_objdir/$libname.$libext build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi fi fi # Done checking deplibs! deplibs=$newdeplibs fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" case $host in *-*-darwin*) newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $deplibs " in *" -L$path/$objdir "*) func_append new_libs " -L$path/$objdir" ;; esac ;; esac done for deplib in $deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) func_append new_libs " $deplib" ;; esac ;; *) func_append new_libs " $deplib" ;; esac done deplibs=$new_libs # All the library-specific variables (install_libdir is set above). library_names= old_library= dlname= # Test again, we may have decided not to build it any more if test yes = "$build_libtool_libs"; then # Remove $wl instances when linking with ld. # FIXME: should test the right _cmds variable. case $archive_cmds in *\$LD\ *) wl= ;; esac if test yes = "$hardcode_into_libs"; then # Hardcode the library paths hardcode_libdirs= dep_rpath= rpath=$finalize_rpath test relink = "$opt_mode" || rpath=$compile_rpath$rpath for libdir in $rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then func_replace_sysroot "$libdir" libdir=$func_replace_sysroot_result if test -z "$hardcode_libdirs"; then hardcode_libdirs=$libdir else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append dep_rpath " $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) func_append perm_rpath " $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir=$hardcode_libdirs eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" fi if test -n "$runpath_var" && test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do func_append rpath "$dir:" done eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" fi test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" fi shlibpath=$finalize_shlibpath test relink = "$opt_mode" || shlibpath=$compile_shlibpath$shlibpath if test -n "$shlibpath"; then eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" fi # Get the real and link names of the library. eval shared_ext=\"$shrext_cmds\" eval library_names=\"$library_names_spec\" set dummy $library_names shift realname=$1 shift if test -n "$soname_spec"; then eval soname=\"$soname_spec\" else soname=$realname fi if test -z "$dlname"; then dlname=$soname fi lib=$output_objdir/$realname linknames= for link do func_append linknames " $link" done # Use standard objects if they are pic test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` test "X$libobjs" = "X " && libobjs= delfiles= if test -n "$export_symbols" && test -n "$include_expsyms"; then $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" export_symbols=$output_objdir/$libname.uexp func_append delfiles " $export_symbols" fi orig_export_symbols= case $host_os in cygwin* | mingw* | cegcc*) if test -n "$export_symbols" && test -z "$export_symbols_regex"; then # exporting using user supplied symfile func_dll_def_p "$export_symbols" || { # and it's NOT already a .def file. Must figure out # which of the given symbols are data symbols and tag # them as such. So, trigger use of export_symbols_cmds. # export_symbols gets reassigned inside the "prepare # the list of exported symbols" if statement, so the # include_expsyms logic still works. orig_export_symbols=$export_symbols export_symbols= always_export_symbols=yes } fi ;; esac # Prepare the list of exported symbols if test -z "$export_symbols"; then if test yes = "$always_export_symbols" || test -n "$export_symbols_regex"; then func_verbose "generating symbol list for '$libname.la'" export_symbols=$output_objdir/$libname.exp $opt_dry_run || $RM $export_symbols cmds=$export_symbols_cmds save_ifs=$IFS; IFS='~' for cmd1 in $cmds; do IFS=$save_ifs # Take the normal branch if the nm_file_list_spec branch # doesn't work or if tool conversion is not needed. case $nm_file_list_spec~$to_tool_file_cmd in *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) try_normal_branch=yes eval cmd=\"$cmd1\" func_len " $cmd" len=$func_len_result ;; *) try_normal_branch=no ;; esac if test yes = "$try_normal_branch" \ && { test "$len" -lt "$max_cmd_len" \ || test "$max_cmd_len" -le -1; } then func_show_eval "$cmd" 'exit $?' skipped_export=false elif test -n "$nm_file_list_spec"; then func_basename "$output" output_la=$func_basename_result save_libobjs=$libobjs save_output=$output output=$output_objdir/$output_la.nm func_to_tool_file "$output" libobjs=$nm_file_list_spec$func_to_tool_file_result func_append delfiles " $output" func_verbose "creating $NM input file list: $output" for obj in $save_libobjs; do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" done > "$output" eval cmd=\"$cmd1\" func_show_eval "$cmd" 'exit $?' output=$save_output libobjs=$save_libobjs skipped_export=false else # The command line is too long to execute in one step. func_verbose "using reloadable object file for export list..." skipped_export=: # Break out early, otherwise skipped_export may be # set to false by a later but shorter cmd. break fi done IFS=$save_ifs if test -n "$export_symbols_regex" && test : != "$skipped_export"; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi fi if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols=$export_symbols test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test : != "$skipped_export" && test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for '$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands, which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter func_append delfiles " $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi tmp_deplibs= for test_deplib in $deplibs; do case " $convenience " in *" $test_deplib "*) ;; *) func_append tmp_deplibs " $test_deplib" ;; esac done deplibs=$tmp_deplibs if test -n "$convenience"; then if test -n "$whole_archive_flag_spec" && test yes = "$compiler_needs_object" && test -z "$libobjs"; then # extract the archives, so we have objects to list. # TODO: could optimize this to just extract one archive. whole_archive_flag_spec= fi if test -n "$whole_archive_flag_spec"; then save_libobjs=$libobjs eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= else gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_extract_archives $gentop $convenience func_append libobjs " $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi fi if test yes = "$thread_safe" && test -n "$thread_safe_flag_spec"; then eval flag=\"$thread_safe_flag_spec\" func_append linker_flags " $flag" fi # Make a backup of the uninstalled library when relinking if test relink = "$opt_mode"; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? fi # Do each of the archive commands. if test yes = "$module" && test -n "$module_cmds"; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then eval test_cmds=\"$module_expsym_cmds\" cmds=$module_expsym_cmds else eval test_cmds=\"$module_cmds\" cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then eval test_cmds=\"$archive_expsym_cmds\" cmds=$archive_expsym_cmds else eval test_cmds=\"$archive_cmds\" cmds=$archive_cmds fi fi if test : != "$skipped_export" && func_len " $test_cmds" && len=$func_len_result && test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then : else # The command line is too long to link in one step, link piecewise # or, if using GNU ld and skipped_export is not :, use a linker # script. # Save the value of $output and $libobjs because we want to # use them later. If we have whole_archive_flag_spec, we # want to use save_libobjs as it was before # whole_archive_flag_spec was expanded, because we can't # assume the linker understands whole_archive_flag_spec. # This may have to be revisited, in case too many # convenience libraries get linked in and end up exceeding # the spec. if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then save_libobjs=$libobjs fi save_output=$output func_basename "$output" output_la=$func_basename_result # Clear the reloadable object creation command queue and # initialize k to one. test_cmds= concat_cmds= objlist= last_robj= k=1 if test -n "$save_libobjs" && test : != "$skipped_export" && test yes = "$with_gnu_ld"; then output=$output_objdir/$output_la.lnkscript func_verbose "creating GNU ld script: $output" echo 'INPUT (' > $output for obj in $save_libobjs do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" >> $output done echo ')' >> $output func_append delfiles " $output" func_to_tool_file "$output" output=$func_to_tool_file_result elif test -n "$save_libobjs" && test : != "$skipped_export" && test -n "$file_list_spec"; then output=$output_objdir/$output_la.lnk func_verbose "creating linker input file list: $output" : > $output set x $save_libobjs shift firstobj= if test yes = "$compiler_needs_object"; then firstobj="$1 " shift fi for obj do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" >> $output done func_append delfiles " $output" func_to_tool_file "$output" output=$firstobj\"$file_list_spec$func_to_tool_file_result\" else if test -n "$save_libobjs"; then func_verbose "creating reloadable object files..." output=$output_objdir/$output_la-$k.$objext eval test_cmds=\"$reload_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 # Loop over the list of objects to be linked. for obj in $save_libobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result if test -z "$objlist" || test "$len" -lt "$max_cmd_len"; then func_append objlist " $obj" else # The command $test_cmds is almost too long, add a # command to the queue. if test 1 -eq "$k"; then # The first file doesn't have a previous command to add. reload_objs=$objlist eval concat_cmds=\"$reload_cmds\" else # All subsequent reloadable object files will link in # the last one created. reload_objs="$objlist $last_robj" eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" fi last_robj=$output_objdir/$output_la-$k.$objext func_arith $k + 1 k=$func_arith_result output=$output_objdir/$output_la-$k.$objext objlist=" $obj" func_len " $last_robj" func_arith $len0 + $func_len_result len=$func_arith_result fi done # Handle the remaining objects by creating one last # reloadable object file. All subsequent reloadable object # files will link in the last one created. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ reload_objs="$objlist $last_robj" eval concat_cmds=\"\$concat_cmds$reload_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" fi func_append delfiles " $output" else output= fi ${skipped_export-false} && { func_verbose "generating symbol list for '$libname.la'" export_symbols=$output_objdir/$libname.exp $opt_dry_run || $RM $export_symbols libobjs=$output # Append the command to create the export file. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" fi } test -n "$save_libobjs" && func_verbose "creating a temporary reloadable object file: $output" # Loop through the commands generated above and execute them. save_ifs=$IFS; IFS='~' for cmd in $concat_cmds; do IFS=$save_ifs $opt_quiet || { func_quote_arg expand,pretty "$cmd" eval "func_echo $func_quote_arg_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test relink = "$opt_mode"; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS=$save_ifs if test -n "$export_symbols_regex" && ${skipped_export-false}; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi ${skipped_export-false} && { if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols=$export_symbols test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for '$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands, which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter func_append delfiles " $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi } libobjs=$output # Restore the value of output. output=$save_output if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= fi # Expand the library linking commands again to reset the # value of $libobjs for piecewise linking. # Do each of the archive commands. if test yes = "$module" && test -n "$module_cmds"; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then cmds=$module_expsym_cmds else cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then cmds=$archive_expsym_cmds else cmds=$archive_cmds fi fi fi if test -n "$delfiles"; then # Append the command to remove temporary files to $cmds. eval cmds=\"\$cmds~\$RM $delfiles\" fi # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_extract_archives $gentop $dlprefiles func_append libobjs " $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi save_ifs=$IFS; IFS='~' for cmd in $cmds; do IFS=$sp$nl eval cmd=\"$cmd\" IFS=$save_ifs $opt_quiet || { func_quote_arg expand,pretty "$cmd" eval "func_echo $func_quote_arg_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test relink = "$opt_mode"; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS=$save_ifs # Restore the uninstalled library and exit if test relink = "$opt_mode"; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? if test -n "$convenience"; then if test -z "$whole_archive_flag_spec"; then func_show_eval '${RM}r "$gentop"' fi fi exit $EXIT_SUCCESS fi # Create links to the real library. for linkname in $linknames; do if test "$realname" != "$linkname"; then func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' fi done # If -module or -export-dynamic was specified, set the dlname. if test yes = "$module" || test yes = "$export_dynamic"; then # On all known operating systems, these are identical. dlname=$soname fi fi ;; obj) if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then func_warning "'-dlopen' is ignored for objects" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "'-l' and '-L' are ignored for objects" ;; esac test -n "$rpath" && \ func_warning "'-rpath' is ignored for objects" test -n "$xrpath" && \ func_warning "'-R' is ignored for objects" test -n "$vinfo" && \ func_warning "'-version-info' is ignored for objects" test -n "$release" && \ func_warning "'-release' is ignored for objects" case $output in *.lo) test -n "$objs$old_deplibs" && \ func_fatal_error "cannot build library object '$output' from non-libtool objects" libobj=$output func_lo2o "$libobj" obj=$func_lo2o_result ;; *) libobj= obj=$output ;; esac # Delete the old objects. $opt_dry_run || $RM $obj $libobj # Objects from convenience libraries. This assumes # single-version convenience libraries. Whenever we create # different ones for PIC/non-PIC, this we'll have to duplicate # the extraction. reload_conv_objs= gentop= # if reload_cmds runs $LD directly, get rid of -Wl from # whole_archive_flag_spec and hope we can get by with turning comma # into space. case $reload_cmds in *\$LD[\ \$]*) wl= ;; esac if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" test -n "$wl" || tmp_whole_archive_flags=`$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` reload_conv_objs=$reload_objs\ $tmp_whole_archive_flags else gentop=$output_objdir/${obj}x func_append generated " $gentop" func_extract_archives $gentop $convenience reload_conv_objs="$reload_objs $func_extract_archives_result" fi fi # If we're not building shared, we need to use non_pic_objs test yes = "$build_libtool_libs" || libobjs=$non_pic_objects # Create the old-style object. reload_objs=$objs$old_deplibs' '`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; /\.lib$/d; $lo2o" | $NL2SP`' '$reload_conv_objs output=$obj func_execute_cmds "$reload_cmds" 'exit $?' # Exit if we aren't doing a library object file. if test -z "$libobj"; then if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS fi test yes = "$build_libtool_libs" || { if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi # Create an invalid libtool object if no PIC, so that we don't # accidentally link it into a program. # $show "echo timestamp > $libobj" # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? exit $EXIT_SUCCESS } if test -n "$pic_flag" || test default != "$pic_mode"; then # Only do commands if we really have different PIC objects. reload_objs="$libobjs $reload_conv_objs" output=$libobj func_execute_cmds "$reload_cmds" 'exit $?' fi if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS ;; prog) case $host in *cygwin*) func_stripname '' '.exe' "$output" output=$func_stripname_result.exe;; esac test -n "$vinfo" && \ func_warning "'-version-info' is ignored for programs" test -n "$release" && \ func_warning "'-release' is ignored for programs" $preload \ && test unknown,unknown,unknown = "$dlopen_support,$dlopen_self,$dlopen_self_static" \ && func_warning "'LT_INIT([dlopen])' not used. Assuming no dlopen support." case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library is the System framework compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` ;; esac case $host in *-*-darwin*) # Don't allow lazy linking, it breaks C++ global constructors # But is supposedly fixed on 10.4 or later (yay!). if test CXX = "$tagname"; then case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 10.[0123]) func_append compile_command " $wl-bind_at_load" func_append finalize_command " $wl-bind_at_load" ;; esac fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $compile_deplibs " in *" -L$path/$objdir "*) func_append new_libs " -L$path/$objdir" ;; esac ;; esac done for deplib in $compile_deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) func_append new_libs " $deplib" ;; esac ;; *) func_append new_libs " $deplib" ;; esac done compile_deplibs=$new_libs func_append compile_command " $compile_deplibs" func_append finalize_command " $finalize_deplibs" if test -n "$rpath$xrpath"; then # If the user specified any rpath flags, then add them. for libdir in $rpath $xrpath; do # This is the magic to use -rpath. case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac done fi # Now hardcode the library paths rpath= hardcode_libdirs= for libdir in $compile_rpath $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs=$libdir else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append rpath " $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) func_append perm_rpath " $libdir" ;; esac fi case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`$ECHO "$libdir" | $SED -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$libdir:"*) ;; ::) dllsearchpath=$libdir;; *) func_append dllsearchpath ":$libdir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) func_append dllsearchpath ":$testbindir";; esac ;; esac done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir=$hardcode_libdirs eval rpath=\" $hardcode_libdir_flag_spec\" fi compile_rpath=$rpath rpath= hardcode_libdirs= for libdir in $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs=$libdir else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append rpath " $flag" fi elif test -n "$runpath_var"; then case "$finalize_perm_rpath " in *" $libdir "*) ;; *) func_append finalize_perm_rpath " $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir=$hardcode_libdirs eval rpath=\" $hardcode_libdir_flag_spec\" fi finalize_rpath=$rpath if test -n "$libobjs" && test yes = "$build_old_libs"; then # Transform all the library objects into standard objects. compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` fi func_generate_dlsyms "$outputname" "@PROGRAM@" false # template prelinking step if test -n "$prelink_cmds"; then func_execute_cmds "$prelink_cmds" 'exit $?' fi wrappers_required=: case $host in *cegcc* | *mingw32ce*) # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. wrappers_required=false ;; *cygwin* | *mingw* ) test yes = "$build_libtool_libs" || wrappers_required=false ;; *) if test no = "$need_relink" || test yes != "$build_libtool_libs"; then wrappers_required=false fi ;; esac $wrappers_required || { # Replace the output file specification. compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` link_command=$compile_command$compile_rpath # We have no uninstalled library dependencies, so finalize right now. exit_status=0 func_show_eval "$link_command" 'exit_status=$?' if test -n "$postlink_cmds"; then func_to_tool_file "$output" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi # Delete the generated files. if test -f "$output_objdir/${outputname}S.$objext"; then func_show_eval '$RM "$output_objdir/${outputname}S.$objext"' fi exit $exit_status } if test -n "$compile_shlibpath$finalize_shlibpath"; then compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" fi if test -n "$finalize_shlibpath"; then finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" fi compile_var= finalize_var= if test -n "$runpath_var"; then if test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do func_append rpath "$dir:" done compile_var="$runpath_var=\"$rpath\$$runpath_var\" " fi if test -n "$finalize_perm_rpath"; then # We should set the runpath_var. rpath= for dir in $finalize_perm_rpath; do func_append rpath "$dir:" done finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " fi fi if test yes = "$no_install"; then # We don't need to create a wrapper script. link_command=$compile_var$compile_command$compile_rpath # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` # Delete the old output file. $opt_dry_run || $RM $output # Link the executable and exit func_show_eval "$link_command" 'exit $?' if test -n "$postlink_cmds"; then func_to_tool_file "$output" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi exit $EXIT_SUCCESS fi case $hardcode_action,$fast_install in relink,*) # Fast installation is not supported link_command=$compile_var$compile_command$compile_rpath relink_command=$finalize_var$finalize_command$finalize_rpath func_warning "this platform does not like uninstalled shared libraries" func_warning "'$output' will be relinked during installation" ;; *,yes) link_command=$finalize_var$compile_command$finalize_rpath relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` ;; *,no) link_command=$compile_var$compile_command$compile_rpath relink_command=$finalize_var$finalize_command$finalize_rpath ;; *,needless) link_command=$finalize_var$compile_command$finalize_rpath relink_command= ;; esac # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` # Delete the old output files. $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname func_show_eval "$link_command" 'exit $?' if test -n "$postlink_cmds"; then func_to_tool_file "$output_objdir/$outputname" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi # Now create the wrapper script. func_verbose "creating $output" # Quote the relink command for shipping. if test -n "$relink_command"; then # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_arg pretty "$var_value" relink_command="$var=$func_quote_arg_result; export $var; $relink_command" fi done func_quote eval cd "`pwd`" func_quote_arg pretty,unquoted "($func_quote_result; $relink_command)" relink_command=$func_quote_arg_unquoted_result fi # Only actually do things if not in dry run mode. $opt_dry_run || { # win32 will think the script is a binary if it has # a .exe suffix, so we strip it off here. case $output in *.exe) func_stripname '' '.exe' "$output" output=$func_stripname_result ;; esac # test for cygwin because mv fails w/o .exe extensions case $host in *cygwin*) exeext=.exe func_stripname '' '.exe' "$outputname" outputname=$func_stripname_result ;; *) exeext= ;; esac case $host in *cygwin* | *mingw* ) func_dirname_and_basename "$output" "" "." output_name=$func_basename_result output_path=$func_dirname_result cwrappersource=$output_path/$objdir/lt-$output_name.c cwrapper=$output_path/$output_name.exe $RM $cwrappersource $cwrapper trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 func_emit_cwrapperexe_src > $cwrappersource # The wrapper executable is built using the $host compiler, # because it contains $host paths and files. If cross- # compiling, it, like the target executable, must be # executed on the $host or under an emulation environment. $opt_dry_run || { $LTCC $LTCFLAGS -o $cwrapper $cwrappersource $STRIP $cwrapper } # Now, create the wrapper script for func_source use: func_ltwrapper_scriptname $cwrapper $RM $func_ltwrapper_scriptname_result trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 $opt_dry_run || { # note: this script will not be executed, so do not chmod. if test "x$build" = "x$host"; then $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result else func_emit_wrapper no > $func_ltwrapper_scriptname_result fi } ;; * ) $RM $output trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 func_emit_wrapper no > $output chmod +x $output ;; esac } exit $EXIT_SUCCESS ;; esac # See if we need to build an old-fashioned archive. for oldlib in $oldlibs; do case $build_libtool_libs in convenience) oldobjs="$libobjs_save $symfileobj" addlibs=$convenience build_libtool_libs=no ;; module) oldobjs=$libobjs_save addlibs=$old_convenience build_libtool_libs=no ;; *) oldobjs="$old_deplibs $non_pic_objects" $preload && test -f "$symfileobj" \ && func_append oldobjs " $symfileobj" addlibs=$old_convenience ;; esac if test -n "$addlibs"; then gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_extract_archives $gentop $addlibs func_append oldobjs " $func_extract_archives_result" fi # Do each command in the archive commands. if test -n "$old_archive_from_new_cmds" && test yes = "$build_libtool_libs"; then cmds=$old_archive_from_new_cmds else # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_extract_archives $gentop $dlprefiles func_append oldobjs " $func_extract_archives_result" fi # POSIX demands no paths to be encoded in archives. We have # to avoid creating archives with duplicate basenames if we # might have to extract them afterwards, e.g., when creating a # static archive out of a convenience library, or when linking # the entirety of a libtool archive into another (currently # not supported by libtool). if (for obj in $oldobjs do func_basename "$obj" $ECHO "$func_basename_result" done | sort | sort -uc >/dev/null 2>&1); then : else echo "copying selected object files to avoid basename conflicts..." gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_mkdir_p "$gentop" save_oldobjs=$oldobjs oldobjs= counter=1 for obj in $save_oldobjs do func_basename "$obj" objbase=$func_basename_result case " $oldobjs " in " ") oldobjs=$obj ;; *[\ /]"$objbase "*) while :; do # Make sure we don't pick an alternate name that also # overlaps. newobj=lt$counter-$objbase func_arith $counter + 1 counter=$func_arith_result case " $oldobjs " in *[\ /]"$newobj "*) ;; *) if test ! -f "$gentop/$newobj"; then break; fi ;; esac done func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" func_append oldobjs " $gentop/$newobj" ;; *) func_append oldobjs " $obj" ;; esac done fi func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 tool_oldlib=$func_to_tool_file_result eval cmds=\"$old_archive_cmds\" func_len " $cmds" len=$func_len_result if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then cmds=$old_archive_cmds elif test -n "$archiver_list_spec"; then func_verbose "using command file archive linking..." for obj in $oldobjs do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" done > $output_objdir/$libname.libcmd func_to_tool_file "$output_objdir/$libname.libcmd" oldobjs=" $archiver_list_spec$func_to_tool_file_result" cmds=$old_archive_cmds else # the command line is too long to link in one step, link in parts func_verbose "using piecewise archive linking..." save_RANLIB=$RANLIB RANLIB=: objlist= concat_cmds= save_oldobjs=$oldobjs oldobjs= # Is there a better way of finding the last object in the list? for obj in $save_oldobjs do last_oldobj=$obj done eval test_cmds=\"$old_archive_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 for obj in $save_oldobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result func_append objlist " $obj" if test "$len" -lt "$max_cmd_len"; then : else # the above command should be used before it gets too long oldobjs=$objlist if test "$obj" = "$last_oldobj"; then RANLIB=$save_RANLIB fi test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\$concat_cmds$old_archive_cmds\" objlist= len=$len0 fi done RANLIB=$save_RANLIB oldobjs=$objlist if test -z "$oldobjs"; then eval cmds=\"\$concat_cmds\" else eval cmds=\"\$concat_cmds~\$old_archive_cmds\" fi fi fi func_execute_cmds "$cmds" 'exit $?' done test -n "$generated" && \ func_show_eval "${RM}r$generated" # Now create the libtool archive. case $output in *.la) old_library= test yes = "$build_old_libs" && old_library=$libname.$libext func_verbose "creating $output" # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_arg pretty,unquoted "$var_value" relink_command="$var=$func_quote_arg_unquoted_result; export $var; $relink_command" fi done # Quote the link command for shipping. func_quote eval cd "`pwd`" relink_command="($func_quote_result; $SHELL \"$progpath\" $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" func_quote_arg pretty,unquoted "$relink_command" relink_command=$func_quote_arg_unquoted_result if test yes = "$hardcode_automatic"; then relink_command= fi # Only create the output if not a dry run. $opt_dry_run || { for installed in no yes; do if test yes = "$installed"; then if test -z "$install_libdir"; then break fi output=$output_objdir/${outputname}i # Replace all uninstalled libtool libraries with the installed ones newdependency_libs= for deplib in $dependency_libs; do case $deplib in *.la) func_basename "$deplib" name=$func_basename_result func_resolve_sysroot "$deplib" eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` test -z "$libdir" && \ func_fatal_error "'$deplib' is not a valid libtool archive" func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" ;; -L*) func_stripname -L '' "$deplib" func_replace_sysroot "$func_stripname_result" func_append newdependency_libs " -L$func_replace_sysroot_result" ;; -R*) func_stripname -R '' "$deplib" func_replace_sysroot "$func_stripname_result" func_append newdependency_libs " -R$func_replace_sysroot_result" ;; *) func_append newdependency_libs " $deplib" ;; esac done dependency_libs=$newdependency_libs newdlfiles= for lib in $dlfiles; do case $lib in *.la) func_basename "$lib" name=$func_basename_result eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "'$lib' is not a valid libtool archive" func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" ;; *) func_append newdlfiles " $lib" ;; esac done dlfiles=$newdlfiles newdlprefiles= for lib in $dlprefiles; do case $lib in *.la) # Only pass preopened files to the pseudo-archive (for # eventual linking with the app. that links it) if we # didn't already link the preopened objects directly into # the library: func_basename "$lib" name=$func_basename_result eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "'$lib' is not a valid libtool archive" func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" ;; esac done dlprefiles=$newdlprefiles else newdlfiles= for lib in $dlfiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; *) abs=`pwd`"/$lib" ;; esac func_append newdlfiles " $abs" done dlfiles=$newdlfiles newdlprefiles= for lib in $dlprefiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; *) abs=`pwd`"/$lib" ;; esac func_append newdlprefiles " $abs" done dlprefiles=$newdlprefiles fi $RM $output # place dlname in correct position for cygwin # In fact, it would be nice if we could use this code for all target # systems that can't hard-code library paths into their executables # and that have no shared library path variable independent of PATH, # but it turns out we can't easily determine that from inspecting # libtool variables, so we have to hard-code the OSs to which it # applies here; at the moment, that means platforms that use the PE # object format with DLL files. See the long comment at the top of # tests/bindir.at for full details. tdlname=$dlname case $host,$output,$installed,$module,$dlname in *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) # If a -bindir argument was supplied, place the dll there. if test -n "$bindir"; then func_relative_path "$install_libdir" "$bindir" tdlname=$func_relative_path_result/$dlname else # Otherwise fall back on heuristic. tdlname=../bin/$dlname fi ;; esac $ECHO > $output "\ # $outputname - a libtool library file # Generated by $PROGRAM (GNU $PACKAGE) $VERSION # # Please DO NOT delete this file! # It is necessary for linking the library. # The name that we can dlopen(3). dlname='$tdlname' # Names of this library. library_names='$library_names' # The name of the static archive. old_library='$old_library' # Linker flags that cannot go in dependency_libs. inherited_linker_flags='$new_inherited_linker_flags' # Libraries that this one depends upon. dependency_libs='$dependency_libs' # Names of additional weak libraries provided by this library weak_library_names='$weak_libs' # Version information for $libname. current=$current age=$age revision=$revision # Is this an already installed library? installed=$installed # Should we warn about portability when linking against -modules? shouldnotlink=$module # Files to dlopen/dlpreopen dlopen='$dlfiles' dlpreopen='$dlprefiles' # Directory that this library needs to be installed in: libdir='$install_libdir'" if test no,yes = "$installed,$need_relink"; then $ECHO >> $output "\ relink_command=\"$relink_command\"" fi done } # Do a symbolic link so that the libtool archive can be found in # LD_LIBRARY_PATH before the program is installed. func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' ;; esac exit $EXIT_SUCCESS } if test link = "$opt_mode" || test relink = "$opt_mode"; then func_mode_link ${1+"$@"} fi # func_mode_uninstall arg... func_mode_uninstall () { $debug_cmd RM=$nonopt files= rmforce=false exit_status=0 # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic=$magic for arg do case $arg in -f) func_append RM " $arg"; rmforce=: ;; -*) func_append RM " $arg" ;; *) func_append files " $arg" ;; esac done test -z "$RM" && \ func_fatal_help "you must specify an RM program" rmdirs= for file in $files; do func_dirname "$file" "" "." dir=$func_dirname_result if test . = "$dir"; then odir=$objdir else odir=$dir/$objdir fi func_basename "$file" name=$func_basename_result test uninstall = "$opt_mode" && odir=$dir # Remember odir for removal later, being careful to avoid duplicates if test clean = "$opt_mode"; then case " $rmdirs " in *" $odir "*) ;; *) func_append rmdirs " $odir" ;; esac fi # Don't error if the file doesn't exist and rm -f was used. if { test -L "$file"; } >/dev/null 2>&1 || { test -h "$file"; } >/dev/null 2>&1 || test -f "$file"; then : elif test -d "$file"; then exit_status=1 continue elif $rmforce; then continue fi rmfiles=$file case $name in *.la) # Possibly a libtool archive, so verify it. if func_lalib_p "$file"; then func_source $dir/$name # Delete the libtool libraries and symlinks. for n in $library_names; do func_append rmfiles " $odir/$n" done test -n "$old_library" && func_append rmfiles " $odir/$old_library" case $opt_mode in clean) case " $library_names " in *" $dlname "*) ;; *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; esac test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" ;; uninstall) if test -n "$library_names"; then # Do each command in the postuninstall commands. func_execute_cmds "$postuninstall_cmds" '$rmforce || exit_status=1' fi if test -n "$old_library"; then # Do each command in the old_postuninstall commands. func_execute_cmds "$old_postuninstall_cmds" '$rmforce || exit_status=1' fi # FIXME: should reinstall the best remaining shared library. ;; esac fi ;; *.lo) # Possibly a libtool object, so verify it. if func_lalib_p "$file"; then # Read the .lo file func_source $dir/$name # Add PIC object to the list of files to remove. if test -n "$pic_object" && test none != "$pic_object"; then func_append rmfiles " $dir/$pic_object" fi # Add non-PIC object to the list of files to remove. if test -n "$non_pic_object" && test none != "$non_pic_object"; then func_append rmfiles " $dir/$non_pic_object" fi fi ;; *) if test clean = "$opt_mode"; then noexename=$name case $file in *.exe) func_stripname '' '.exe' "$file" file=$func_stripname_result func_stripname '' '.exe' "$name" noexename=$func_stripname_result # $file with .exe has already been added to rmfiles, # add $file without .exe func_append rmfiles " $file" ;; esac # Do a test to see if this is a libtool program. if func_ltwrapper_p "$file"; then if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" relink_command= func_source $func_ltwrapper_scriptname_result func_append rmfiles " $func_ltwrapper_scriptname_result" else relink_command= func_source $dir/$noexename fi # note $name still contains .exe if it was in $file originally # as does the version of $file that was added into $rmfiles func_append rmfiles " $odir/$name $odir/${name}S.$objext" if test yes = "$fast_install" && test -n "$relink_command"; then func_append rmfiles " $odir/lt-$name" fi if test "X$noexename" != "X$name"; then func_append rmfiles " $odir/lt-$noexename.c" fi fi fi ;; esac func_show_eval "$RM $rmfiles" 'exit_status=1' done # Try to remove the $objdir's in the directories where we deleted files for dir in $rmdirs; do if test -d "$dir"; then func_show_eval "rmdir $dir >/dev/null 2>&1" fi done exit $exit_status } if test uninstall = "$opt_mode" || test clean = "$opt_mode"; then func_mode_uninstall ${1+"$@"} fi test -z "$opt_mode" && { help=$generic_help func_fatal_help "you must specify a MODE" } test -z "$exec_cmd" && \ func_fatal_help "invalid operation mode '$opt_mode'" if test -n "$exec_cmd"; then eval exec "$exec_cmd" exit $EXIT_FAILURE fi exit $exit_status # The TAGs below are defined such that we never get into a situation # where we disable both kinds of libraries. Given conflicting # choices, we go for a static library, that is the most portable, # since we can't tell whether shared libraries were disabled because # the user asked for that or because the platform doesn't support # them. This is particularly important on AIX, because we don't # support having both static and shared libraries enabled at the same # time on that platform, so we default to a shared-only configuration. # If a disable-shared tag is given, we'll fallback to a static-only # configuration. But we'll never go from static-only to shared-only. # ### BEGIN LIBTOOL TAG CONFIG: disable-shared build_libtool_libs=no build_old_libs=yes # ### END LIBTOOL TAG CONFIG: disable-shared # ### BEGIN LIBTOOL TAG CONFIG: disable-static build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` # ### END LIBTOOL TAG CONFIG: disable-static # Local Variables: # mode:shell-script # sh-indentation:2 # End: aqbanking-6.6.1/configure.ac0000664000175000017500000012321715037736014012704 00000000000000# Process this file with autoconf to produce a configure script. AC_PREREQ(2.56) AC_INIT AC_CANONICAL_BUILD AC_CANONICAL_HOST AC_CONFIG_SRCDIR([README]) AC_CONFIG_HEADERS([config.h]) AC_CONFIG_MACRO_DIRS([m4]) ###------------------------------------------------------------------------- # # AqBanking versions # AQBANKING_VERSION_MAJOR=6 AQBANKING_VERSION_MINOR=6 AQBANKING_VERSION_PATCHLEVEL=1 AQBANKING_VERSION_BUILD=0 dnl "stable", "rcX", "betaX", "svn" AQBANKING_VERSION_TAG="stable" ###------------------------------------------------------------------------- # # SO versions # # # AqBanking # AQBANKING_SO_CURRENT=50 AQBANKING_SO_AGE=6 AQBANKING_SO_REVISION=1 AQBANKING_SO_EFFECTIVE="`echo \$(($AQBANKING_SO_CURRENT-$AQBANKING_SO_AGE))`" ###------------------------------------------------------------------------- # # Generate version strings and BUILD # SVN="svn" AQBANKING_VERSION_FULL_STRING="${AQBANKING_VERSION_MAJOR}.${AQBANKING_VERSION_MINOR}.${AQBANKING_VERSION_PATCHLEVEL}.${AQBANKING_VERSION_BUILD}${AQBANKING_VERSION_TAG}" AQBANKING_VERSION_STRING="$AQBANKING_VERSION_MAJOR.$AQBANKING_VERSION_MINOR.$AQBANKING_VERSION_PATCHLEVEL" AQBANKING_FINTS_VERSION_STRING="$AQBANKING_VERSION_MAJOR.$AQBANKING_VERSION_MINOR" case "$AQBANKING_VERSION_TAG" in svn|cvs) rev=`LC_ALL="C" $SVN info|grep 'Last Changed Rev'|cut -d' ' -f4` if test "x$rev" != "x" ; then AQBANKING_VERSION_FULL_STRING="$AQBANKING_VERSION_MAJOR.$AQBANKING_VERSION_MINOR.${AQBANKING_VERSION_PATCHLEVEL}${AQBANKING_VERSION_TAG}-r${rev}" fi ;; git) AQBANKING_VERSION_FULL_STRING="$AQBANKING_VERSION_MAJOR.$AQBANKING_VERSION_MINOR.${AQBANKING_VERSION_PATCHLEVEL}.${AQBANKING_VERSION_BUILD}" ;; esac ###------------------------------------------------------------------------- # # datetime # AC_ARG_WITH([build-datetime], [AS_HELP_STRING([--with-build-datetime=DATETIME], [use fixed datetime for build (default: current date and time)])], [AS_IF([test "x$withval" = "xyes"], [DATETIME="`date +\"%Y%m%d%H%M%S\"`"], [DATETIME="`date +\"%Y%m%d%H%M%S\" --date=\"$withval\"`"])], [DATETIME="`date +\"%Y%m%d%H%M%S\"`"]) AC_SUBST(DATETIME) ###------------------------------------------------------------------------- # # Create release strings # case "$AQBANKING_VERSION_TAG" in cvs|svn) AQBANKING_VERSION_RELEASE_STRING="$AQBANKING_VERSION_MAJOR.$AQBANKING_VERSION_MINOR.$AQBANKING_VERSION_PATCHLEVEL.r${AQBANKING_VERSION_BUILD}" ;; git) AQBANKING_VERSION_RELEASE_STRING="$AQBANKING_VERSION_MAJOR.$AQBANKING_VERSION_MINOR.$AQBANKING_VERSION_PATCHLEVEL.${AQBANKING_VERSION_BUILD}${AQBANKING_VERSION_TAG}" ;; stable) AQBANKING_VERSION_RELEASE_STRING="$AQBANKING_VERSION_MAJOR.$AQBANKING_VERSION_MINOR.$AQBANKING_VERSION_PATCHLEVEL" ;; *) AQBANKING_VERSION_RELEASE_STRING="$AQBANKING_VERSION_MAJOR.$AQBANKING_VERSION_MINOR.$AQBANKING_VERSION_PATCHLEVEL" # add TAG AQBANKING_VERSION_RELEASE_STRING="${AQBANKING_VERSION_RELEASE_STRING}${AQBANKING_VERSION_TAG}" ;; esac ###------------------------------------------------------------------------- # # SUBST and DEFINE versions # AC_SUBST(AQBANKING_VERSION_MAJOR) AC_SUBST(AQBANKING_VERSION_MINOR) AC_SUBST(AQBANKING_VERSION_PATCHLEVEL) AC_SUBST(AQBANKING_VERSION_BUILD) AC_SUBST(AQBANKING_VERSION_TAG) AC_SUBST(AQBANKING_VERSION_FULL_STRING) AC_SUBST(AQBANKING_VERSION_STRING) AC_SUBST(AQBANKING_VERSION_RELEASE_STRING) AC_SUBST(AQBANKING_FINTS_VERSION_STRING) AC_DEFINE_UNQUOTED(AQBANKING_FINTS_VERSION_STRING, "$AQBANKING_FINTS_VERSION_STRING", [Version string for FINTS]) AC_SUBST(AQBANKING_SO_CURRENT) AC_SUBST(AQBANKING_SO_REVISION) AC_SUBST(AQBANKING_SO_AGE) AC_SUBST(AQBANKING_SO_EFFECTIVE) AC_DEFINE_UNQUOTED(AQBANKING_SO_EFFECTIVE_STR, "$AQBANKING_SO_EFFECTIVE", [effective SO version]) AM_INIT_AUTOMAKE(aqbanking, $AQBANKING_VERSION_RELEASE_STRING) ###------------------------------------------------------------------------- # # determine operating system # AQ_CHECK_OS ###------------------------------------------------------------------------- # # prefix handling # AC_PREFIX_DEFAULT(/usr/local) if test "x$prefix" = "xNONE"; then prefix=$ac_default_prefix ac_configure_args="$ac_configure_args --prefix $prefix" fi AC_SUBST(prefix) ###------------------------------------------------------------------------- # # static/shared handling # AC_ENABLE_STATIC(no) AC_ENABLE_SHARED(yes) ###------------------------------------------------------------------------- # # define some needed variables # abs_top_builddir="`pwd`" AC_SUBST(abs_top_builddir) ###------------------------------------------------------------------------- # # Enable some GNU extensions if using the GNU C library # AC_GNU_SOURCE ###------------------------------------------------------------------------- # # Checks for programs. # AC_PROG_CC AC_PROG_CXX AC_PROG_CPP AC_PROG_INSTALL AC_PROG_LIBTOOL AC_LIBTOOL_WIN32_DLL AC_LIBTOOL_RC # Newer libtool doesn't have AC_LIBTOOL_RC anymore. Need to check for # $(RC) by ourselves. AC_CHECK_TOOL([RC], [windres], [no]) AC_CHECK_PROG(USE_DOT,dot,YES,NO) AC_CHECK_PROG(SED,sed,sed) PKG_PROG_PKG_CONFIG # Check for the tool "astyle", but if not found, replace its program call by the no-op "echo" instead AC_CHECK_PROG(ASTYLE, astyle, astyle, echo) # Checks for libraries. ###------------------------------------------------------------------------- # # Checks for header files. # AC_HEADER_STDC AC_CHECK_HEADERS([fcntl.h stdlib.h string.h unistd.h locale.h]) AC_CHECK_HEADERS([iconv.h libintl.h locale.h]) AC_CHECK_HEADERS([assert.h ctype.h errno.h fcntl.h stdio.h stdlib.h string.h strings.h locale.h]) ###------------------------------------------------------------------------- # # Checks for typedefs, structures, and compiler characteristics. # AC_C_CONST AC_STRUCT_TM ###------------------------------------------------------------------------- # # Checks for library functions. # AC_FUNC_STRFTIME AC_CHECK_FUNCS([memmove memset strcasecmp strdup strerror snprintf]) AC_CHECK_FUNCS([setlocale]) ###------------------------------------------------------------------------- # # Backends. Those do not have a required ordering. # AC_ARG_WITH(backends, [ --with-backends=list space separated list of backends (default:all)], [aqbanking_backends="$withval"], [aqbanking_backends="all"] ) if test "$aqbanking_backends" = "all"; then aqbanking_backends="aqhbci aqofxconnect aqebics aqpaypal aqnone aqgivve" fi for f in ${aqbanking_backends}; do case "$f" in aqhbci) aqbanking_plugins_backends_dirs="$aqbanking_plugins_backends_dirs aqhbci" aqbanking_plugins_backends_libs="$aqbanking_plugins_backends_libs aqhbci/libaqhbci.la" AC_DEFINE(AQBANKING_WITH_PLUGIN_BACKEND_AQHBCI, 1, [plugin availability]) ;; aqfints) aqbanking_plugins_backends_dirs="$aqbanking_plugins_backends_dirs aqfints" aqbanking_plugins_backends_libs="$aqbanking_plugins_backends_libs aqfints/libaqfintsplugin.la" AC_DEFINE(AQBANKING_WITH_PLUGIN_BACKEND_AQFINTS, 1, [plugin availability]) ;; aqebics) aqbanking_plugins_backends_dirs="$aqbanking_plugins_backends_dirs aqebics" aqbanking_plugins_backends_libs="$aqbanking_plugins_backends_libs aqebics/libaqebics.la" AC_DEFINE(AQBANKING_WITH_PLUGIN_BACKEND_AQEBICS, 1, [plugin availability]) ;; aqofxconnect) aqbanking_plugins_backends_dirs="$aqbanking_plugins_backends_dirs aqofxconnect" aqbanking_plugins_backends_libs="$aqbanking_plugins_backends_libs aqofxconnect/libaqofxconnect.la" AC_DEFINE(AQBANKING_WITH_PLUGIN_BACKEND_AQOFXCONNECT, 1, [plugin availability]) ;; aqpaypal) aqbanking_plugins_backends_dirs="$aqbanking_plugins_backends_dirs aqpaypal" aqbanking_plugins_backends_libs="$aqbanking_plugins_backends_libs aqpaypal/libaqpaypal.la" AC_DEFINE(AQBANKING_WITH_PLUGIN_BACKEND_AQPAYPAL, 1, [plugin availability]) ;; aqnone) aqbanking_plugins_backends_dirs="$aqbanking_plugins_backends_dirs aqnone" aqbanking_plugins_backends_libs="$aqbanking_plugins_backends_libs aqnone/libaqnone.la" AC_DEFINE(AQBANKING_WITH_PLUGIN_BACKEND_AQNONE, 1, [plugin availability]) ;; aqgivve) aqbanking_plugins_backends_dirs="$aqbanking_plugins_backends_dirs aqgivve" aqbanking_plugins_backends_libs="$aqbanking_plugins_backends_libs aqgivve/libaqgivve.la" AC_DEFINE(AQBANKING_WITH_PLUGIN_BACKEND_AQGIVVE, 1, [plugin availability]) ;; *) AC_MSG_ERROR("ERROR: Unknown plugin $f") ;; esac done # always define this AC_DEFINE(AQBANKING_WITH_PLUGIN_BACKEND_AQNONE, 1, [plugin availability]) AC_SUBST(aqbanking_plugins_backends_dirs) AC_SUBST(aqbanking_plugins_backends_libs) ###------------------------------------------------------------------------- # # ImExporters. Those do not have a required ordering. # AC_ARG_WITH(imexporters, [ --with-imexporters=list space separated list of im-/exporters (default:all)], [aqbanking_imexporters="$withval"], [aqbanking_imexporters="all"] ) if test "$aqbanking_imexporters" = "all"; then aqbanking_imexporters="csv eri2 ofx openhbci1 swift xmldb yellownet sepa ctxfile q43 camt xml" fi for f in ${aqbanking_imexporters}; do case "$f" in csv) aqbanking_plugins_imexporters_dirs="$aqbanking_plugins_imexporters_dirs csv" aqbanking_plugins_imexporters_libs="$aqbanking_plugins_imexporters_libs csv/libabimexporters_csv.la" AC_DEFINE(AQBANKING_WITH_PLUGIN_IMEXPORTER_CSV, 1, [plugin availability]) ;; eri2) aqbanking_plugins_imexporters_dirs="$aqbanking_plugins_imexporters_dirs eri2" aqbanking_plugins_imexporters_libs="$aqbanking_plugins_imexporters_libs eri2/libabimexporters_eri2.la" AC_DEFINE(AQBANKING_WITH_PLUGIN_IMEXPORTER_ERI2, 1, [plugin availability]) ;; ofx) aqbanking_plugins_imexporters_dirs="$aqbanking_plugins_imexporters_dirs ofx" aqbanking_plugins_imexporters_libs="$aqbanking_plugins_imexporters_libs ofx/libabimexporters_ofx.la" AC_DEFINE(AQBANKING_WITH_PLUGIN_IMEXPORTER_OFX, 1, [plugin availability]) ;; openhbci1) aqbanking_plugins_imexporters_dirs="$aqbanking_plugins_imexporters_dirs openhbci1" aqbanking_plugins_imexporters_libs="$aqbanking_plugins_imexporters_libs openhbci1/libabimexporters_openhbci1.la" AC_DEFINE(AQBANKING_WITH_PLUGIN_IMEXPORTER_OPENHBCI1, 1, [plugin availability]) ;; swift) aqbanking_plugins_imexporters_dirs="$aqbanking_plugins_imexporters_dirs swift" aqbanking_plugins_imexporters_libs="$aqbanking_plugins_imexporters_libs swift/libabimexporters_swift.la" AC_DEFINE(AQBANKING_WITH_PLUGIN_IMEXPORTER_SWIFT, 1, [plugin availability]) ;; xmldb) aqbanking_plugins_imexporters_dirs="$aqbanking_plugins_imexporters_dirs xmldb" aqbanking_plugins_imexporters_libs="$aqbanking_plugins_imexporters_libs xmldb/libabimexporters_xmldb.la" AC_DEFINE(AQBANKING_WITH_PLUGIN_IMEXPORTER_XMLDB, 1, [plugin availability]) ;; yellownet) aqbanking_plugins_imexporters_dirs="$aqbanking_plugins_imexporters_dirs yellownet" aqbanking_plugins_imexporters_libs="$aqbanking_plugins_imexporters_libs yellownet/libabimexporters_yellownet.la" AC_DEFINE(AQBANKING_WITH_PLUGIN_IMEXPORTER_YELLOWNET, 1, [plugin availability]) ;; sepa) aqbanking_plugins_imexporters_dirs="$aqbanking_plugins_imexporters_dirs sepa" aqbanking_plugins_imexporters_libs="$aqbanking_plugins_imexporters_libs sepa/libabimexporters_sepa.la" AC_DEFINE(AQBANKING_WITH_PLUGIN_IMEXPORTER_SEPA, 1, [plugin availability]) ;; ctxfile) aqbanking_plugins_imexporters_dirs="$aqbanking_plugins_imexporters_dirs ctxfile" aqbanking_plugins_imexporters_libs="$aqbanking_plugins_imexporters_libs ctxfile/libabimexporters_ctxfile.la" AC_DEFINE(AQBANKING_WITH_PLUGIN_IMEXPORTER_CTXFILE, 1, [plugin availability]) ;; q43) aqbanking_plugins_imexporters_dirs="$aqbanking_plugins_imexporters_dirs q43" aqbanking_plugins_imexporters_libs="$aqbanking_plugins_imexporters_libs q43/libabimexporters_q43.la" AC_DEFINE(AQBANKING_WITH_PLUGIN_IMEXPORTER_Q43, 1, [plugin availability]) ;; camt) aqbanking_plugins_imexporters_dirs="$aqbanking_plugins_imexporters_dirs camt" aqbanking_plugins_imexporters_libs="$aqbanking_plugins_imexporters_libs camt/libabimexporters_camt.la" AC_DEFINE(AQBANKING_WITH_PLUGIN_IMEXPORTER_CAMT, 1, [plugin availability]) ;; xml) aqbanking_plugins_imexporters_dirs="$aqbanking_plugins_imexporters_dirs xml" aqbanking_plugins_imexporters_libs="$aqbanking_plugins_imexporters_libs xml/libabimexporters_xml.la" AC_DEFINE(AQBANKING_WITH_PLUGIN_IMEXPORTER_XML, 1, [plugin availability]) ;; *) AC_MSG_ERROR("ERROR: Unknown plugin \"$f\"") ;; esac done AC_SUBST(aqbanking_plugins_imexporters_dirs) AC_SUBST(aqbanking_plugins_imexporters_libs) ###------------------------------------------------------------------------- # # Parsers. Those do not have a required ordering. # AC_ARG_WITH(parsers, [ --with-parsers=list space separated list of parsers (default:all)], [aqbanking_parsers="$withval"], [aqbanking_parsers="all"] ) if test "$aqbanking_parsers" = "all"; then aqbanking_parsers="swift" fi for f in ${aqbanking_parsers}; do case "$f" in swift) aqbanking_plugins_parsers_dirs="$aqbanking_plugins_parsers_dirs swift" ;; *) AC_MSG_ERROR("ERROR: Unknown plugin \"$f\"") ;; esac done AC_SUBST(aqbanking_plugins_parsers_dirs) ###------------------------------------------------------------------------- # # Bankinfo plugins. Those do not have a required ordering. # AC_ARG_WITH(bankinfos, [ --with-bankinfos=list space separated list of bankinfo (default:all)], [aqbanking_bankinfos="$withval"], [aqbanking_bankinfos="all"] ) if test "$aqbanking_bankinfos" = "all"; then aqbanking_bankinfos="de" fi for f in ${aqbanking_bankinfos}; do case "$f" in de) aqbanking_plugins_bankinfo_dirs="$aqbanking_plugins_bankinfo_dirs de" aqbanking_plugins_bankinfo_libs="$aqbanking_plugins_bankinfo_libs de/libbankinfo_de.la" AC_DEFINE(AQBANKING_WITH_PLUGIN_BANKINFO_DE, 1, [plugin availability]) ;; *) AC_MSG_ERROR("ERROR: Unknown plugin \"$f\"") ;; esac done AC_SUBST(aqbanking_plugins_bankinfo_dirs) AC_SUBST(aqbanking_plugins_bankinfo_libs) ###------------------------------------------------------------------------- # # Check for Gwen # # Variable used in aqbanking-config.cmake AC_SUBST(GWENHYWFAR_MINIMUM_VERSION, "5.11.2.0") AC_GWENHYWFAR(5,11,2,0) all_includes="$all_includes $gwenhywfar_includes" AC_MSG_CHECKING(if gui-tests desired) AC_ARG_ENABLE(gui-tests, [ --enable-gui-tests allow GUI tests (default=no)], enable_gui_tests="$enableval", enable_gui_tests="no") AC_MSG_RESULT($enable_gui_tests) if test "$enable_gui_tests" != "no"; then # For libgwenhywfar > 3.99.20, look for its library gwengui-gtk2. PKG_CHECK_MODULES([GWENGUI_GTK2], [gwengui-gtk2 gwenhywfar], [ HAVE_GWENGUI_GTK2=1 PKG_CHECK_MODULES([GTK2], [gtk+-2.0]) ], [ HAVE_GWENGUI_GTK2=0 ]) AC_SUBST(HAVE_GWENGUI_GTK2) if test "$HAVE_GWENGUI_GTK2" = "1"; then AC_DEFINE(USE_GWENGUI_GTK2, 1, [GTK2Gui availability]) fi else HAVE_GWENGUI_GTK2=0 fi AM_CONDITIONAL(WITH_GWENGUI_GTK2, [test "$HAVE_GWENGUI_GTK2" = "1"]) ###------------------------------------------------------------------------- # # check typemaker2 # AC_MSG_CHECKING(typemaker2 binary) AC_ARG_WITH(typemaker2-exe, [ --with-typemaker2-exe=EXE path and name of the executable typemaker2], [typemaker2_exe="$withval"], [typemaker2_exe="\$(gwenhywfar_bindir)/typemaker2"] ) AC_MSG_RESULT($typemaker2_exe) AC_SUBST(typemaker2_exe) ###------------------------------------------------------------------------- # # check xmlmerge # AC_MSG_CHECKING(xmlmerge) AC_ARG_WITH(xmlmerge, [ --with-xmlmerge=PATH path and name of tool xmlmerge], [XMLMERGE="$withval"], [XMLMERGE="$gwenhywfar_dir/bin/xmlmerge"]) AC_SUBST(XMLMERGE) AC_MSG_RESULT($XMLMERGE) ###------------------------------------------------------------------------- # # Check for GMP # # Allow the user to override the gmp_libs detection here if test "x$gmp_libs" = "x"; then AC_CHECK_LIB(gmp, __gmpz_init, [have_gmp="yes"], [have_gmp="no"]) AC_CHECK_HEADERS(gmp.h, [], [have_gmp="no"]) if test "$have_gmp" != "yes"; then AC_MSG_ERROR([GMP is required, see http://swox.com/gmp]) else gmp_libs="-lgmp" fi fi AC_SUBST(gmp_libs) ###------------------------------------------------------------------------- # # OS dependant settings # # Common settings; can be overridden per-OS below. aqbanking_internal_libs="${abs_top_builddir}/src/libs/libaqbanking.la" aqbanking_ldflags="-L\${libdir}" aqbanking_libs="-laqbanking" aqbanking_includes="-I\${includedir}/aqbanking6" aqbanking_headerdir_am="\$(includedir)/aqbanking6" aqbanking_headerdir="\${includedir}/aqbanking6" aqbanking_plugindir="\${libdir}/aqbanking/plugins/${AQBANKING_SO_EFFECTIVE}" aqbanking_pkgdatadir="\${datadir}/aqbanking" aqbanking_symlinkdir="\$(top_builddir)/aqbanking6" case "$OS_TYPE" in posix) aqbanking_sys_is_windows=0 ;; windows) aqbanking_sys_is_windows=1 AC_DEFINE_UNQUOTED(BUILDING_AQBANKING_DLL,1, [Define if DLL is built]) ;; esac AM_CONDITIONAL(IS_WINDOWS, [test "$OS_TYPE" = "windows"]) ###------------------------------------------------------------------------- # # check whether local installation mode is enabled # AC_MSG_CHECKING(whether local installation mode is wanted) AC_ARG_ENABLE(local-install, [ --enable-local-install allow local installation mode (default=no)], enable_local_install="$enableval", enable_local_install="no") AC_MSG_RESULT($enable_local_install) if test "$enable_local_install" != "no"; then AC_DEFINE(ENABLE_LOCAL_INSTALL, 1, [whether local install is wanted]) fi ###------------------------------------------------------------------------- # # check plugin search path # AC_MSG_CHECKING(plugin search dir) AC_ARG_WITH(plugin-searchdir, [ --with-plugin-searchdir=DIR where to search for plugins], [aqbanking_plugin_searchdir="$withval"], [aqbanking_plugin_searchdir=""]) if test -z "${aqbanking_plugin_searchdir}"; then if test "$OSYSTEM" = "windows"; then aqbanking_plugin_searchdir="lib/aqbanking/plugins/${AQBANKING_SO_EFFECTIVE}" else if test "$enable_local_install" != "no"; then aqbanking_plugin_searchdir="lib/aqbanking/plugins/${AQBANKING_SO_EFFECTIVE}" else aqbanking_plugin_searchdir="$aqbanking_plugindir" fi fi fi AC_SUBST(aqbanking_plugin_searchdir) AC_MSG_RESULT($aqbanking_plugin_searchdir) ###------------------------------------------------------------------------- # # check cfg search dir # AC_MSG_CHECKING(cfg search dir) AC_ARG_WITH(cfg-searchdir, [ --with-cfg-searchdir=DIR where to search for cfg files], [aqbanking_cfg_searchdir="$withval"], [aqbanking_cfg_searchdir=""]) if test -z "$aqbanking_cfg_searchdir"; then if test "$OSYSTEM" = "windows"; then aqbanking_cfg_searchdir="etc" else if test "$enable_local_install" != "no"; then aqbanking_cfg_searchdir="etc" else aqbanking_cfg_searchdir="\$(sysconfdir)" fi fi fi AC_SUBST(aqbanking_cfg_searchdir) AC_MSG_RESULT($aqbanking_cfg_searchdir) ###------------------------------------------------------------------------- # # check locale search dir # AC_MSG_CHECKING(locale search dir) AC_ARG_WITH(locale-searchdir, [ --with-locale-searchdir=DIR where to search for locale files], [aqbanking_locale_searchdir="$withval"], [aqbanking_locale_searchdir=""]) if test -z "${aqbanking_locale_searchdir}"; then if test "$OSYSTEM" = "windows"; then aqbanking_locale_searchdir="share/locale" else if test "$enable_local_install" != "no"; then aqbanking_locale_searchdir="share/locale" else aqbanking_locale_searchdir="\$(localedir)" fi fi fi AC_SUBST(aqbanking_locale_searchdir) AC_MSG_RESULT($aqbanking_locale_searchdir) ###------------------------------------------------------------------------- # # check data search dir # AC_MSG_CHECKING(data search dir) AC_ARG_WITH(data-searchdir, [ --with-data-searchdir=DIR where to search for data files], [aqbanking_data_searchdir="$withval"], [aqbanking_data_searchdir=""]) if test -z "${aqbanking_data_searchdir}"; then if test "$OSYSTEM" = "windows"; then aqbanking_data_searchdir="share" else if test "$enable_local_install" != "no"; then aqbanking_data_searchdir="share" else aqbanking_data_searchdir="\$(datadir)" fi fi fi AC_SUBST(aqbanking_data_searchdir) AC_MSG_RESULT($aqbanking_data_searchdir) # special variables for AqFinTS aqfints_datadir="\$(pkgdatadir)/backends/aqfints" AC_SUBST(aqfints_datadir) ###------------------------------------------------------------------------- # check for Distribution AQ_DISTRIBUTION ###------------------------------------------------------------------------- # # check for I18N # # check whether i18n files are to be created AC_CHECK_PROG(XGETTEXT,xgettext,xgettext, missing) MAKE_I18N_FILES="yes" if test "$XGETTEXT" = "missing"; then MAKE_I18N_FILES="no" AC_MSG_WARN([xgettext is missing. Locale suport is disabled.]) fi AC_PATH_PROG([MSGFMT], [msgfmt], [missing]) if test "$MSGFMT" = "missing"; then MAKE_I18N_FILES="no" AC_MSG_WARN([msgfmt is missing. Locale suport is disabled.]) else # check for --qt argument of msgfmt AC_MSG_CHECKING(whether msgfmt understands --qt) if test "x${MSGFMT}" != "x"; then if ${MSGFMT} --qt --help >/dev/null 2>&1; then MSGFMT_SUPPORTS_QT=yes else MSGFMT_SUPPORTS_QT=no fi else MSGFMT_SUPPORTS_QT=no fi AC_MSG_RESULT($MSGFMT_SUPPORTS_QT) fi AC_SUBST(MAKE_I18N_FILES) AC_SUBST(MSGFMT_SUPPORTS_QT) AM_CONDITIONAL(IF_MAKE_I18N_FILES, [test "$MAKE_I18N_FILES" = "yes"]) # then check whether i18n support is to be compiled in i18n_libs="" HAVE_I18N="yes" AC_CHECK_HEADERS([locale.h libintl.h], [], [HAVE_I18N="no"]) AC_CHECK_FUNCS([setlocale]) if test "$OS_TYPE" != "windows"; then oldlibs="$LIBS" LIBS="" AC_SEARCH_LIBS(gettext, intl, [], [HAVE_I18N="no"]) i18n_libs="$LIBS" LIBS="$oldlibs" else i18n_libs="-lintl" fi if test "$HAVE_I18N" != "NO"; then AC_DEFINE_UNQUOTED(HAVE_I18N, 1, [whether I18N is available]) fi AC_SUBST(HAVE_I18N) AC_SUBST(i18n_libs) ###------------------------------------------------------------------------- # # check for release # AC_MSG_CHECKING(whether this is an official release) AC_ARG_ENABLE(release, [ --enable-release make this an official release (default=no)], [ case "${enableval}" in yes) enable_release="yes";; no) enable_release="no";; *) AC_MSG_ERROR(bad value ${enableval} for --enable-release);; esac ], enable_release="no") if test "$enable_release" = "yes"; then STRIPALL="-s" else STRIPALL="" fi AC_SUBST(STRIPALL) AC_MSG_RESULT($enable_release) ###------------------------------------------------------------------------- # Debug arguments for compilation ACX_COMPILE_WARN() ###------------------------------------------------------------------------- # # Compiler check for symbol visibility # AC_CACHE_CHECK([whether compiler supports symbol visibility], ac_cv_hidden_visibility_attribute, [ echo 'int __attribute__ ((visibility ("hidden"))) foo (void) { return 1; }' > conftest.c ac_cv_hidden_visibility_attribute=no if AC_TRY_COMMAND(${CC-cc} -Werror -S conftest.c -o conftest.s 1>&AS_MESSAGE_LOG_FD); then if grep '\.hidden.*foo' conftest.s >/dev/null; then ac_cv_hidden_visibility_attribute=yes fi fi rm -f conftest.* ]) if test $ac_cv_hidden_visibility_attribute = yes; then AC_DEFINE(GCC_WITH_VISIBILITY_ATTRIBUTE, 1, [visibility]) visibility_cflags="-fvisibility=hidden" fi AC_SUBST(visibility_cflags) ###------------------------------------------------------------------------- # # Subst # AS_SCRUB_INCLUDE(aqbanking_includes) AC_SUBST(aqbanking_sys_is_windows) AC_SUBST(aqbanking_includes) AC_SUBST(aqbanking_internal_libs) AC_SUBST(aqbanking_ldflags) AC_SUBST(aqbanking_libs) AC_SUBST(aqbanking_plugindir) AC_SUBST(aqbanking_pkgdatadir) AC_SUBST(aqbanking_symlinkdir) AC_SUBST(aqbanking_headerdir_am) AC_SUBST(aqbanking_headerdir) ###------------------------------------------------------------------------- # # Check for additional aclocal flags # ADD_ACLOCAL_FLAGS="" for A in "${GWEN_PREFIX}/share/aclocal" \ "${prefix}/share/aclocal"; do if test -d "${A}"; then ADD_ACLOCAL_FLAGS="${ADD_ACLOCAL_FLAGS} -I ${A}" fi done AC_SUBST(ADD_ACLOCAL_FLAGS) ###------------------------------------------------------------------------- # # AqBanking modules # aqbanking_modules=". types" aqbankingpp_modules="." AC_SUBST(aqbanking_modules) AC_SUBST(aqbankingpp_modules) ###------------------------------------------------------------------------- # # docpath # AC_MSG_CHECKING(docpath) AC_ARG_WITH(docpath, [ --with-docpath=DIR where to store the apidoc], [docpath="$withval"], [docpath="${HOME}/apidoc"]) AC_SUBST(docpath) AC_MSG_RESULT($docpath) ###------------------------------------------------------------------------- # # check for doc type # AC_MSG_CHECKING(if full docu should be created) AC_ARG_ENABLE(full-doc, [ --enable-full-doc enable creating full apidoc (default=no)], [ case "${enableval}" in yes) enable_fulldoc="yes";; no) enable_fulldoc="no";; *) AC_MSG_ERROR(bad value ${enableval} for --enable-full-doc);; esac ], enable_fulldoc="no") if test "$enable_fulldoc" = "yes"; then DOXYGEN_INPUT="listdoc.h src" DOXYGEN_DEFINE="" DOXYGEN_FILE_PATTERNS="*.h *.hpp *.c *.cpp" DOXYGEN_EXCLUDE_PATTERNS="" else DOXYGEN_DEFINE="DOXYGEN_HIDE" DOXYGEN_INPUT="listdoc.h \ aqbanking6/banking.h \ aqbanking6/banking_bankinfo.h \ aqbanking6/banking_dialogs.h \ aqbanking6/banking_online.h \ aqbanking6/banking_transaction.h \ aqbanking6/error.h \ aqbanking6/account_type.h \ aqbanking6/value.h \ aqbanking6/account_spec.h \ aqbanking6/balance.h \ aqbanking6/bankinfo.h \ aqbanking6/bankinfoservice.h \ aqbanking6/document.h \ aqbanking6/imexporter_accountinfo.h \ aqbanking6/imexporter_context.h \ aqbanking6/message.h \ aqbanking6/security.h \ aqbanking6/transaction.h \ aqbanking6/transactionlimits.h\ " DOXYGEN_FILE_PATTERNS="*.h *.hpp" DOXYGEN_EXCLUDE_PATTERNS="*_p.h" fi AC_SUBST(DOXYGEN_INPUT) AC_SUBST(DOXYGEN_DEFINE) AC_SUBST(DOXYGEN_FILE_PATTERNS) AC_SUBST(DOXYGEN_EXCLUDE_PATTERNS) AC_MSG_RESULT($enable_fulldoc) ###------------------------------------------------------------------------- # # search for tag files # AC_MSG_CHECKING(doxygen tag files) DOXYGEN_TAGFILES="" DOXYGEN_TAGFILEPATHS="" if test -d "${docpath}"; then tagfiles="`cd ${docpath} && ls *.tag`" if test -n "${tagfiles}"; then # remove own package from list tagfiles="`echo ${tagfiles} | ${SED} -e s/${PACKAGE}.tag//`" # add every remaining tag file for ff in ${tagfiles}; do DOXYGEN_TAGFILES="${DOXYGEN_TAGFILES} ${docpath}/${ff}=${docpath}/`basename -s .tag ${ff}`" done fi fi if test -z "${DOXYGEN_TAGFILES}"; then AC_MSG_RESULT(none) else AC_MSG_RESULT(found) fi AC_SUBST(DOXYGEN_TAGFILES) ###------------------------------------------------------------------------- # # check for dependencies of backends # (nothing to check for right now) dependencies_ok="yes" ###------------------------------------------------------------------------- # # Configure stuff for backend AqHBCI # # Common settings; can be overridden per-OS below. aqhbci_internal_libs="${abs_top_builddir}/src/libs/plugins/backends/aqhbci/libaqhbci.la" aqhbci_ldflags="-L\${libdir}" aqhbci_includes="${aqbanking_includes}" aqhbci_libs="-laqhbci" with_aqhbci="no" case "$aqbanking_backends" in *aqhbci*) with_aqhbci="yes" case "$OS_TYPE" in posix) ;; windows) AC_DEFINE_UNQUOTED(BUILDING_AQHBCI_DLL,1, [Define if DLL is built]) ;; esac ;; esac AS_SCRUB_INCLUDE(aqhbci_includes) AC_SUBST(aqhbci_includes) AC_SUBST(aqhbci_internal_libs) AC_SUBST(aqhbci_libs) AC_SUBST(aqhbci_ldflags) AC_SUBST(with_aqhbci) ###------------------------------------------------------------------------- # # check AqHBCI data dir # AC_MSG_CHECKING(aqhbci data dir) AC_ARG_WITH(aqhbci-datadir, [ --with-aqhbci-datadir=DIR where to search for data files], [aqhbci_datadir="$withval"], [aqhbci_datadir="$aqhbci_data"]) AC_SUBST(aqhbci_datadir) AC_MSG_RESULT($aqhbci_datadir) ###------------------------------------------------------------------------- # # Configure stuff for backend AqOfxConnect # # Common settings aqofxconnect_internal_libs="${abs_top_builddir}/src/libs/plugins/backends/aqofxconnect/libaqofxconnect.la" aqofxconnect_includes="${aqbanking_includes}" aqofxconnect_libs="-L\${libdir} -laqofxconnect" case "$aqbanking_backends" in *aqofxconnect*) case "$OS_TYPE" in posix) ;; windows) AC_DEFINE_UNQUOTED(BUILDING_AQOFXCONNECT_DLL,1, [Define if DLL is built]) ;; esac ;; esac AS_SCRUB_INCLUDE(aqofxconnect_includes) AC_SUBST(aqofxconnect_includes) AC_SUBST(aqofxconnect_internal_libs) AC_SUBST(aqofxconnect_libs) #AC_DEFINE_UNQUOTED(AQOFXCONNECT_DATA, "${aqofxconnect_data}", [data dir]) ###------------------------------------------------------------------------- # # Configure stuff for backend AqPaypal # # Common settings aqpaypal_internal_libs="${abs_top_builddir}/src/libs/plugins/backends/aqpaypal/libaqpaypal.la" aqpaypal_includes="${aqbanking_includes}" aqpaypal_libs="-L\${libdir} -laqpaypal" case "$aqbanking_backends" in *aqpaypal*) case "$OS_TYPE" in posix) ;; windows) AC_DEFINE_UNQUOTED(BUILDING_AQPAYPAL_DLL,1, [Define if DLL is built]) ;; esac ;; esac AS_SCRUB_INCLUDE(aqpaypal_includes) AC_SUBST(aqpaypal_includes) AC_SUBST(aqpaypal_internal_libs) AC_SUBST(aqpaypal_libs) #AC_DEFINE_UNQUOTED(AQPAYPAL_DATA, "${aqpaypal_data}", [data dir]) ###------------------------------------------------------------------------- # # Configure stuff for backend AqEBICS # # Common settings; can be overridden per-OS below. aqebics_internal_libs="${abs_top_builddir}/src/libs/plugins/backends/aqebics/plugin/libaqebics.la" aqebics_ldflags="-L\${libdir}" aqebics_includes="${aqbanking_includes}" aqebics_libs="-laqebics" with_aqebics="no" case "$aqbanking_backends" in *aqebics*) with_aqebics="yes" case "$OS_TYPE" in posix) ;; windows) AC_DEFINE_UNQUOTED(BUILDING_AQEBICS_DLL,1, [Define if DLL is built]) ;; esac ;; esac AS_SCRUB_INCLUDE(aqebics_includes) AC_SUBST(aqebics_includes) AC_SUBST(aqebics_internal_libs) AC_SUBST(aqebics_libs) AC_SUBST(aqebics_ldflags) AC_SUBST(with_aqebics) ###------------------------------------------------------------------------- # # check AqEBICS data dir # AC_MSG_CHECKING(aqebics data dir) AC_ARG_WITH(aqebics-datadir, [ --with-aqebics-datadir=DIR where to search for data files], [aqebics_datadir="$withval"], [aqebics_datadir="$aqebics_data"]) AC_SUBST(aqebics_datadir) AC_MSG_RESULT($aqebics_datadir) ###------------------------------------------------------------------------- # # Check for xmlsec # if test "$with_aqebics" = "yes"; then AC_MSG_CHECKING(for build requirements needed by EBICS backend) AC_MSG_RESULT() PKG_CHECK_MODULES(XMLSEC, [xmlsec1 >= 1.0.0]) PKG_CHECK_MODULES(LIBXML, [libxml-2.0]) PKG_CHECK_MODULES(LIBXSLT, [libxslt]) AQEBICS_CFLAGS="$XMLSEC_CFLAGS $LIBXML_CFLAGS $LIBXSLT_CFLAGS" AQEBICS_LIBS="$XMLSEC_LIBS $LIBXML_LIBS $LIBXSLT_LIBS" AC_SUBST(AQEBICS_CFLAGS) AC_SUBST(AQEBICS_LIBS) fi ###------------------------------------------------------------------------- # # check for plugin init # AC_MSG_CHECKING(if plugin init is wanted) AC_ARG_ENABLE(init-plugins, [ --enable-init-plugins enable plugin init (default=yes)], enable_init_plugins="$enableval", enable_init_plugins="yes") AC_MSG_RESULT($enable_init_plugins) if test "$enable_init_plugins" != "no"; then AC_DEFINE(AQBANKING_ENABLE_INIT_PLUGINS, 1, [if plugin init is wanted]) fi ###------------------------------------------------------------------------- # # check whether aqbanking is a subproject to another one # AC_MSG_CHECKING(if AqBanking is a subproject) AC_ARG_ENABLE(aqb-subproject, [ --enable-aqb-subproject make gwen only a subproject (default=no)], enable_aqb_subproject="$enableval", enable_aqb_subproject="no") AC_MSG_RESULT($enable_aqb_subproject) if test "$enable_aqb_subproject" != "no"; then AC_DEFINE(AQBANKING_IS_SUBPROJECT, 1, [whether aqb is a subproject]) fi ###------------------------------------------------------------------------- # # check whether aqbanking-cli is enabled # AC_MSG_CHECKING(whether aqbanking-cli is wanted) AC_ARG_ENABLE(cli, [ --enable-cli build aqbanking-cli (default=yes)], enable_cli="$enableval", enable_cli="yes") AC_MSG_RESULT($enable_cli) AM_CONDITIONAL(ENABLE_CLI, [test "$enable_cli" = "yes"]) AC_ARG_WITH(cli-version-string, [ --with-cli-version-string list of additional libraries], [AQBANKING_CLI_VERSION_STRING="$withval"], [AQBANKING_CLI_VERSION_STRING="$AQBANKING_VERSION_STRING"] ) AC_SUBST(AQBANKING_CLI_VERSION_STRING) ###------------------------------------------------------------------------- # # check whether tutorials are to be built # AC_MSG_CHECKING(whether tutorials are to be built) AC_ARG_ENABLE(tutorials, [ --enable-tutorials build tutorials (default=yes)], [ case "${enableval}" in yes) TUTORIALS="tutorials";; no) TUTORIALS="";; *) AC_MSG_ERROR(bad value ${enableval} for --enable-tutorials);; esac ], [ TUTORIALS="tutorials" enableval="yes" ]) AC_MSG_RESULT($enableval) AC_SUBST(TUTORIALS) ###------------------------------------------------------------------------- # # Cleanup includes, define all_XXX # AS_SCRUB_INCLUDE(all_includes) AC_SUBST(all_includes) AC_SUBST(all_libraries) AC_SUBST(aqbanking_backends) # Adjust CFLAGS and LDFLAGS on Windows case "$OS_TYPE" in windows) # GnuCash compiles with this; maybe we need this, too? #CFLAGS="${CFLAGS} -mms-bitfields" LDFLAGS="${LDFLAGS} -no-undefined -mwindows" ;; esac ###------------------------------------------------------------------------- # # Output files # AC_CONFIG_FILES([ admin/Makefile doc/Makefile m4/Makefile src/Makefile src/libs/Makefile src/libs/aqbanking/Makefile src/libs/aqbanking/version.h src/libs/aqbanking/system.h src/libs/aqbanking/dialogs/Makefile src/libs/aqbanking/types/Makefile src/libs/aqbanking/gui/Makefile src/libs/aqbanking/typemaker2/Makefile src/libs/aqbanking/typemaker2/c/Makefile src/libs/aqbanking/backendsupport/Makefile src/libs/aqbankingpp/Makefile src/libs/plugins/Makefile src/libs/plugins/bankinfo/Makefile src/libs/plugins/bankinfo/de/Makefile src/libs/plugins/bankinfo/de/de.xml src/libs/plugins/bankinfo/generic/Makefile src/libs/plugins/imexporters/Makefile src/libs/plugins/imexporters/eri2/Makefile src/libs/plugins/imexporters/eri2/eri2.xml src/libs/plugins/imexporters/eri2/profiles/Makefile src/libs/plugins/imexporters/ofx/Makefile src/libs/plugins/imexporters/ofx/ofx.xml src/libs/plugins/imexporters/ofx/parser/Makefile src/libs/plugins/imexporters/ofx/profiles/Makefile src/libs/plugins/imexporters/swift/Makefile src/libs/plugins/imexporters/swift/swift.xml src/libs/plugins/imexporters/swift/profiles/Makefile src/libs/plugins/imexporters/csv/Makefile src/libs/plugins/imexporters/csv/csv.xml src/libs/plugins/imexporters/csv/profiles/Makefile src/libs/plugins/imexporters/openhbci1/Makefile src/libs/plugins/imexporters/openhbci1/openhbci1.xml src/libs/plugins/imexporters/openhbci1/profiles/Makefile src/libs/plugins/imexporters/qif/Makefile src/libs/plugins/imexporters/qif/qif.xml src/libs/plugins/imexporters/qif/profiles/Makefile src/libs/plugins/imexporters/yellownet/Makefile src/libs/plugins/imexporters/yellownet/yellownet.xml src/libs/plugins/imexporters/yellownet/profiles/Makefile src/libs/plugins/imexporters/xmldb/Makefile src/libs/plugins/imexporters/xmldb/xmldb.xml src/libs/plugins/imexporters/xmldb/profiles/Makefile src/libs/plugins/imexporters/sepa/Makefile src/libs/plugins/imexporters/sepa/sepa.xml src/libs/plugins/imexporters/sepa/profiles/Makefile src/libs/plugins/imexporters/ctxfile/Makefile src/libs/plugins/imexporters/ctxfile/ctxfile.xml src/libs/plugins/imexporters/ctxfile/profiles/Makefile src/libs/plugins/imexporters/q43/Makefile src/libs/plugins/imexporters/q43/q43.xml src/libs/plugins/imexporters/q43/profiles/Makefile src/libs/plugins/imexporters/camt/Makefile src/libs/plugins/imexporters/camt/camt.xml src/libs/plugins/imexporters/camt/profiles/Makefile src/libs/plugins/imexporters/xml/Makefile src/libs/plugins/imexporters/xml/xml.xml src/libs/plugins/imexporters/xml/data/Makefile src/libs/plugins/imexporters/xml/profiles/Makefile src/libs/plugins/parsers/Makefile src/libs/plugins/parsers/swift/Makefile src/libs/plugins/parsers/swift/swift.xml src/libs/plugins/backends/Makefile src/libs/plugins/backends/aqhbci/Makefile src/libs/plugins/backends/aqhbci/aqhbci.xml src/libs/plugins/backends/aqhbci/dialogs/Makefile src/libs/plugins/backends/aqhbci/header.xml src/libs/plugins/backends/aqhbci/banking/Makefile src/libs/plugins/backends/aqhbci/msglayer/Makefile src/libs/plugins/backends/aqhbci/tan/Makefile src/libs/plugins/backends/aqhbci/joblayer/Makefile src/libs/plugins/backends/aqhbci/applayer/Makefile src/libs/plugins/backends/aqhbci/ajobs/Makefile src/libs/plugins/backends/aqhbci/admjobs/Makefile src/libs/plugins/backends/aqhbci/applayer/xml/Makefile src/libs/plugins/backends/aqhbci/control/Makefile src/libs/plugins/backends/aqhbci/version.h src/libs/plugins/backends/aqofxconnect/Makefile src/libs/plugins/backends/aqofxconnect/aqofxconnect.xml src/libs/plugins/backends/aqofxconnect/libofxhome/Makefile src/libs/plugins/backends/aqofxconnect/v1/Makefile src/libs/plugins/backends/aqofxconnect/v2/Makefile src/libs/plugins/backends/aqofxconnect/control/Makefile src/libs/plugins/backends/aqofxconnect/common/Makefile src/libs/plugins/backends/aqofxconnect/dialogs/Makefile src/libs/plugins/backends/aqpaypal/Makefile src/libs/plugins/backends/aqpaypal/aqpaypal.xml src/libs/plugins/backends/aqpaypal/control/Makefile src/libs/plugins/backends/aqnone/Makefile src/libs/plugins/backends/aqnone/aqnone.xml src/libs/plugins/backends/aqgivve/Makefile src/libs/plugins/backends/aqgivve/aqgivve.xml src/libs/plugins/backends/aqebics/Makefile src/libs/plugins/backends/aqebics/aqebics.xml src/libs/plugins/backends/aqebics/client/Makefile src/libs/plugins/backends/aqebics/dialogs/Makefile src/libs/plugins/backends/aqebics/msg/Makefile src/libs/plugins/backends/aqebics/control/Makefile src/libs/plugins/backends/aqebics/requests/Makefile src/libs/plugins/backends/aqfints/Makefile src/libs/plugins/backends/aqfints/aqfints.xml src/libs/plugins/backends/aqfints/banking/Makefile src/libs/plugins/backends/aqfints/banking/control/Makefile src/libs/plugins/backends/aqfints/libaqfints/Makefile src/libs/plugins/backends/aqfints/libaqfints/msg/Makefile src/libs/plugins/backends/aqfints/libaqfints/parser/Makefile src/libs/plugins/backends/aqfints/libaqfints/service/Makefile src/libs/plugins/backends/aqfints/libaqfints/service/xml/Makefile src/libs/plugins/backends/aqfints/libaqfints/service/bpd/Makefile src/libs/plugins/backends/aqfints/libaqfints/service/upd/Makefile src/libs/plugins/backends/aqfints/libaqfints/service/jobs/Makefile src/libs/plugins/backends/aqfints/libaqfints/transport/Makefile src/libs/plugins/backends/aqfints/libaqfints/session/Makefile src/libs/plugins/backends/aqfints/libaqfints/session/pintan/Makefile src/libs/plugins/backends/aqfints/libaqfints/session/hbci/Makefile src/test/Makefile src/tools/Makefile src/tools/aqbanking-cli/Makefile src/tools/mkdeinfo/Makefile tutorials/Makefile po/Makefile Doxyfile Makefile aqbanking-config.in aqbanking.pc aqbanking.spec aqbanking.iss aqbanking-config.cmake aqbanking-config-version.cmake ]) AC_OUTPUT ###------------------------------------------------------------------------- # # Summary # echo echo echo "Summary" echo "----------------------------------------------------" echo "AqBanking version : $AQBANKING_VERSION_FULL_STRING" echo "Local Installation Mode : $enable_local_install" echo "Prefix : $prefix" echo "Exec-Prefix : $exec_prefix" echo "Libdir : $libdir" echo "Cfg Search Folder : $aqbanking_cfg_searchdir" echo "Data Search Folder : $aqbanking_data_searchdir" echo "Locale Search Folder : $aqbanking_locale_searchdir" echo "Plugin Search Folder : $aqbanking_plugin_searchdir" echo "Symbol Visibility : $visibility_supported" echo "Build AqBanking-CLI : $enable_cli" echo "CLI Version String : $AQBANKING_CLI_VERSION_STRING" echo echo echo "Plugins" echo "----------------------------------------------------" echo " Backends : $aqbanking_backends" echo " Im-/Exporters : $aqbanking_imexporters" echo " Parsers : $aqbanking_parsers" echo " Bank Infos : $aqbanking_bankinfos" echo echo "----------------------------------------------------" echo "You can now run \"make\" (or gmake on FreeBSD) to compile." aqbanking-6.6.1/aqbanking.iss.in0000664000175000017500000003036514043610744013474 00000000000000; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Input configuration for the Inno Setup Compiler ; Copyright (c) 2005 Christian Stimming ; ; Inno Setup Compiler: See http://www.jrsoftware.org/isdl.php ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; [Setup] ; Using the name here directly because we want it capitalized AppName=AqBanking AppVerName=AqBanking @VERSION@ AppPublisher=AqBanking Development Team AppPublisherURL=http://sourceforge.net/projects/aqbanking AppSupportURL=http://sourceforge.net/support/getsupport.php?group_id=115695 AppUpdatesURL=http://sourceforge.net/project/showfiles.php?group_id=115695 Compression=lzma DefaultDirName={pf}\@PACKAGE@ DirExistsWarning=no InfoAfterFile=README LicenseFile=COPYING OutputBaseFilename=@PACKAGE@-@VERSION@-setup OutputDir=. UninstallFilesDir={app}\uninstall\@PACKAGE@ [Types] Name: "full"; Description: "{cm:FullInstall}" Name: "binary"; Description: "{cm:BinaryInstall}" Name: "custom"; Description: "{cm:CustomInstall}"; Flags: iscustom [Components] Name: "main"; Description: "{cm:MainFiles}"; Types: full binary custom; Flags: fixed Name: "devel"; Description: "{cm:DevelFiles}"; Types: full Name: "doc"; Description: "{cm:DocFiles}"; Types: full ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Here we configure the included files and the place of their ; installation ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; [Files] ; All main DLLs Source: "win32-tmp\usr\bin\*.dll"; DestDir: "{app}\bin"; Flags: sharedfile promptifolder replacesameversion; Components: main ; Everything from the lib directory, including all plugins Source: "win32-tmp\usr\lib\lib*.la"; DestDir: "{app}\lib"; Components: main Source: "win32-tmp\usr\lib\aqbanking\*"; DestDir: "{app}\lib\aqbanking"; Flags: recursesubdirs; Components: main ; The plugins that belong to gwenhywfar. Source: "win32-tmp\gwen\dbio\*"; DestDir: "{reg:HKLM\Software\Gwenhywfar\Paths,dbio-plugins|{app}\lib\@PACKAGE@\plugins\@AQBANKING_SO_EFFECTIVE@}"; Flags: ignoreversion recursesubdirs; Components: main Source: "win32-tmp\gwen\crypttoken\*"; DestDir: "{reg:HKLM\Software\Gwenhywfar\Paths,plugindir|{app}\lib\@PACKAGE@\plugins\@AQBANKING_SO_EFFECTIVE@}\crypttoken"; Flags: ignoreversion recursesubdirs; Components: main ; The commandline tools Source: "win32-tmp\usr\bin\*.exe"; DestDir: "{app}\bin"; Components: main ; The config-scripts. They are post-processed by the Pascal script below. Source: "@PACKAGE@-config.in.in"; DestDir: "{app}\bin"; Components: devel; AfterInstall: MyAfterInstallConfig(ExpandConstant('{app}\bin\@PACKAGE@-config')) Source: "src\plugins\backends\aqhbci\aqhbci-config.in.in"; DestDir: "{app}\bin"; Components: devel; AfterInstall: MyAfterInstallConfig(ExpandConstant('{app}\bin\aqhbci-config')) Source: "src\frontends\qbanking\lib\qbanking-config.in.in"; DestDir: "{app}\bin"; Components: devel; AfterInstall: MyAfterInstallConfig(ExpandConstant('{app}\bin\qbanking-config')) ; The headers, and the aclocal macro. Source: "win32-tmp\usr\include\*"; DestDir: "{app}\include"; Flags: ignoreversion recursesubdirs; Components: devel Source: "win32-tmp\usr\share\*"; DestDir: "{app}\share"; Flags: ignoreversion recursesubdirs; Components: devel Source: "win32-tmp\share\*"; DestDir: "{app}\share"; Flags: ignoreversion recursesubdirs; Components: devel ; And all the documentation Source: "README"; DestDir: "{app}\doc\@PACKAGE@"; Components: doc Source: "NEWS"; DestDir: "{app}\doc\@PACKAGE@"; Components: doc Source: "COPYING"; DestDir: "{app}\doc\@PACKAGE@"; Components: doc Source: "AUTHORS"; DestDir: "{app}\doc\@PACKAGE@"; Components: doc Source: "ChangeLog"; DestDir: "{app}\doc\@PACKAGE@"; Components: doc ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Delete automatically created files on uninstall ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; [UninstallDelete] Type: files; Name: "{app}\bin\*-config" ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Define the registry keys Setup should create (HKLM = HKEY_LOCAL_MACHINE) ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; [Registry] Root: HKLM; Subkey: "Software\Aqbanking"; ValueType: none; Flags: uninsdeletekeyifempty Root: HKLM; Subkey: "Software\Aqbanking\Paths"; ValueType: none; Flags: uninsdeletekeyifempty Root: HKLM; Subkey: "Software\Aqbanking\Paths"; ValueType: string; ValueName: "prefix"; ValueData: "{app}"; Flags: uninsdeletevalue Root: HKLM; Subkey: "Software\Aqbanking\Paths"; ValueType: string; ValueName: "libdir"; ValueData: "{app}\lib"; Flags: uninsdeletevalue Root: HKLM; Subkey: "Software\Aqbanking\Paths"; ValueType: string; ValueName: "pkglibdir"; ValueData: "{app}\lib\@PACKAGE@"; Flags: uninsdeletevalue Root: HKLM; Subkey: "Software\Aqbanking\Paths"; ValueType: string; ValueName: "plugindir"; ValueData: "{app}\lib\@PACKAGE@\plugins\@AQBANKING_SO_EFFECTIVE@"; Flags: uninsdeletevalue Root: HKLM; Subkey: "Software\Aqbanking\Paths"; ValueType: string; ValueName: "providerdir"; ValueData: "{app}\lib\@PACKAGE@\plugins\@AQBANKING_SO_EFFECTIVE@\providers"; Flags: uninsdeletevalue Root: HKLM; Subkey: "Software\Aqbanking\Paths"; ValueType: string; ValueName: "bankinfodir"; ValueData: "{app}\lib\@PACKAGE@\plugins\@AQBANKING_SO_EFFECTIVE@\bankinfo"; Flags: uninsdeletevalue Root: HKLM; Subkey: "Software\Aqbanking\Paths"; ValueType: string; ValueName: "imexporterdir"; ValueData: "{app}\lib\@PACKAGE@\plugins\@AQBANKING_SO_EFFECTIVE@\imexporters"; Flags: uninsdeletevalue Root: HKLM; Subkey: "Software\Aqbanking\Paths"; ValueType: string; ValueName: "importerdir"; ValueData: "{app}\lib\@PACKAGE@\plugins\@AQBANKING_SO_EFFECTIVE@\imexporters"; Flags: uninsdeletevalue Root: HKLM; Subkey: "Software\Aqbanking\Paths"; ValueType: string; ValueName: "pkgdatadir"; ValueData: "{app}\share\@PACKAGE@"; Flags: uninsdeletevalue Root: HKLM; Subkey: "Software\Aqbanking\Paths"; ValueType: string; ValueName: "sysconfdir"; ValueData: "{app}\etc"; Flags: uninsdeletevalue Root: HKLM; Subkey: "Software\Aqbanking\Paths"; ValueType: string; ValueName: "wizarddir"; ValueData: "{app}\lib\@PACKAGE@\plugins\@AQBANKING_SO_EFFECTIVE@\wizards"; Flags: uninsdeletevalue Root: HKLM; Subkey: "Software\Aqbanking\Paths"; ValueType: string; ValueName: "localedir"; ValueData: "{app}\share\locale"; Flags: uninsdeletevalue Root: HKLM; Subkey: "Software\AqBanking\Paths"; ValueType: string; ValueName: "xmldatadir"; ValueData: "{app}\share\aqhbci\xml"; Flags: uninsdeletevalue Root: HKLM; Subkey: "Software\AqBanking\Paths"; ValueType: string; ValueName: "cfgmoduledir"; ValueData: "{app}\lib\@PACKAGE@\plugins\@AQBANKING_SO_EFFECTIVE@\frontends\qbanking\cfgmodules"; Flags: uninsdeletevalue ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; This large section is a Pascal scripting program that will modify ; the aqbanking-config shell script so that it then includes the ; correct values according to our local installation. See ; http://www.remobjects.com/?ps for a syntax reference. ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; [Code] function MingwBacksl(const S: String): String; begin { Modify the path name S so that it can be used by MinGW } if Length(ExtractFileDrive(S)) = 0 then Result := S else begin Result := '/'+S; StringChange(Result, ':\', '\'); end; StringChange(Result, '\', '/'); end; procedure MyAfterInstallConfig(FileName: String); var FileString, appdir, windir, bindir, includedir, plugindir, datadir, pkgdatadir: String; Res: Boolean; begin { Load the unchanged original file } Res := LoadStringFromFile(Format('%s.in.in',[FileName]), FileString); if Res = False then MsgBox('Error on loading '+FileName+'.in.in for final adaptation', mbInformation, MB_OK); { Insert the custom file header; #10 is the linefeed character } Insert('#!/bin/sh '#10'dir="@prefix'+'@"'#10, FileString, 0); { Get the installation-specific paths } windir := MingwBacksl(ExpandConstant('{win}')); appdir := MingwBacksl(ExpandConstant('{app}')); includedir := appdir + '/include'; bindir := appdir + '/bin'; plugindir := appdir + '/lib/@PACKAGE@/plugins/@AQBANKING_SO_EFFECTIVE@'; datadir := appdir + '/share'; pkgdatadir := datadir + '/@PACKAGE@'; { Now make all the replacements } { Explanation: StringChange(S,FromStr,ToStr): Change all occurances in S of FromStr to ToStr. } StringChange(FileString, '@'+'prefix@', appdir); StringChange(FileString, '@'+'libdir@', windir); StringChange(FileString, '@'+'all_includes@', '@all_includes@'); StringChange(FileString, '@'+'aqbanking_includes@', '-I'+includedir); StringChange(FileString, '@'+'aqbanking_ldflags@', '-L'+bindir); StringChange(FileString, '@'+'aqbanking_libs@', '@aqbanking_libs@'); StringChange(FileString, '@'+'aqbanking_plugindir@', plugindir); StringChange(FileString, '@'+'aqbanking_pkgdatadir@', pkgdatadir); StringChange(FileString, '@'+'AQBANKING_VERSION_MAJOR@', '@AQBANKING_VERSION_MAJOR@'); StringChange(FileString, '@'+'AQBANKING_VERSION_MINOR@', '@AQBANKING_VERSION_MINOR@'); StringChange(FileString, '@'+'AQBANKING_VERSION_PATCHLEVEL@', '@AQBANKING_VERSION_PATCHLEVEL@'); StringChange(FileString, '@'+'AQBANKING_VERSION_BUILD@', '@AQBANKING_VERSION_BUILD@'); StringChange(FileString, '@'+'AQBANKING_VERSION_TAG@', '@AQBANKING_VERSION_TAG@'); StringChange(FileString, '@'+'cbanking_libs@', '-L' + bindir + ' @cbanking_libs@'); StringChange(FileString, '@'+'cbanking_includes@', '-I'+includedir); StringChange(FileString, '@'+'qbanking_libs@', '-L' + bindir + ' @qbanking_libs@'); StringChange(FileString, '@'+'qbanking_includes@', '-I'+includedir); StringChange(FileString, '@'+'qbanking_data@', datadir + '/qbanking'); StringChange(FileString, '@'+'QBANKING_VERSION_MAJOR@', '@QBANKING_VERSION_MAJOR@'); StringChange(FileString, '@'+'QBANKING_VERSION_MINOR@', '@QBANKING_VERSION_MINOR@'); StringChange(FileString, '@'+'QBANKING_VERSION_PATCHLEVEL@', '@QBANKING_VERSION_PATCHLEVEL@'); StringChange(FileString, '@'+'QBANKING_VERSION_BUILD@', '@QBANKING_VERSION_BUILD@'); StringChange(FileString, '@'+'kbanking_libs@', '-L' + bindir + ' @kbanking_libs@'); StringChange(FileString, '@'+'kbanking_includes@', '-I'+includedir); { Save the final file } Res := SaveStringToFile(FileName, FileString, False); if Res = False then MsgBox('Error on saving '+FileName+' for final adaptation', mbInformation, MB_OK); end; function InitializeSetup(): Boolean; begin Result := Length(ExpandConstant('{reg:HKLM\Software\Gwenhywfar\Paths,prefix|a}')) > 1; if Result = False then MsgBox(ExpandConstant('{cm:PrereqNotFound}'), mbInformation, MB_OK); end; [Languages] Name: "en"; MessagesFile: "compiler:Default.isl" Name: "de"; MessagesFile: "compiler:Languages\German.isl" ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; These are only for improved text messages ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;[Messages] ;; *** "Select Destination" wizard page ;SelectDirLabel3=Setup will install [name] into the following folder. If you have MinGW installed on your system, you can safely choose MinGW's root folder here as well (e.g. c:\msys\1.0). ; ;de.SelectDirLabel3=Das Setup wird [name] in den folgenden Ordner installieren. Wenn Sie MinGW auf Ihrem Computer installiert haben, können Sie hier problemlos das Root-Verzeichnis von MinGW angeben (z.B. c:\msys\1.0). ; The customized messages with their translations here. [CustomMessages] ; *** Prerequisite message PrereqNotFound=The setup program did not find the DLL of the Gwenhywfar package and/or the registry keys of the Gwenhywfar installation. You need to install Gwenhywfar from the setup executable, and then start this setup again. de.PrereqNotFound=Das Setup-Programm hat die DLL des Gwenhywfar-Pakets und/oder dessen Registry-Keys nicht gefunden. Sie müssen zuerst Gwenhywfar über dessen Setup-Programm installieren und dann dieses Setup-Programm erneut starten. ; *** "Select Components" wizard page FullInstall=Full installation BinaryInstall=Install only libraries CustomInstall=Custom installation MainFiles=Aqbanking DLL Library DevelFiles=Development files DocFiles=Documentation files de.FullInstall=Komplett-Installation de.BinaryInstall=Nur Bibliotheken installieren de.CustomInstall=Benutzerdefiniert de.MainFiles=Aqbanking DLL Bibliothek de.DevelFiles=Entwickler-Dateien de.DocFiles=Dokumentations-Dateien aqbanking-6.6.1/i18nsources0000644000175000017500000007742215037736042012531 00000000000000src/libs/aqbanking/account_type.c src/libs/aqbanking/banking.c src/libs/aqbanking/banking_account.c src/libs/aqbanking/banking_accspec.c src/libs/aqbanking/banking_bankinfo.c src/libs/aqbanking/banking_cfg.c src/libs/aqbanking/banking_dialogs.c src/libs/aqbanking/banking_imex.c src/libs/aqbanking/banking_init.c src/libs/aqbanking/banking_online.c src/libs/aqbanking/banking_transaction.c src/libs/aqbanking/banking_update.c src/libs/aqbanking/banking_user.c src/libs/aqbanking/banking_compat.c src/libs/aqbanking/system.h.in src/libs/aqbanking/version.h.in src/libs/aqbanking/types/transaction.c src/libs/aqbanking/types/transactionlimits.c src/libs/aqbanking/types/refaccount.c src/libs/aqbanking/types/bankinfoservice.c src/libs/aqbanking/types/bankinfo.c src/libs/aqbanking/types/document.c src/libs/aqbanking/types/message.c src/libs/aqbanking/types/security.c src/libs/aqbanking/types/balance.c src/libs/aqbanking/types/imexporter_accountinfo.c src/libs/aqbanking/types/imexporter_context.c src/libs/aqbanking/types/account_spec.c src/libs/aqbanking/types/value.c src/libs/aqbanking/types/transaction.xml src/libs/aqbanking/types/transactionlimits.xml src/libs/aqbanking/types/refaccount.xml src/libs/aqbanking/types/security.xml src/libs/aqbanking/types/bankinfoservice.xml src/libs/aqbanking/types/bankinfo.xml src/libs/aqbanking/types/document.xml src/libs/aqbanking/types/message.xml src/libs/aqbanking/types/balance.xml src/libs/aqbanking/types/imexporter_accountinfo.xml src/libs/aqbanking/types/imexporter_context.xml src/libs/aqbanking/types/account_spec.xml src/libs/aqbanking/types/transaction.c src/libs/aqbanking/types/transactionlimits.c src/libs/aqbanking/types/refaccount.c src/libs/aqbanking/types/bankinfoservice.c src/libs/aqbanking/types/bankinfo.c src/libs/aqbanking/types/document.c src/libs/aqbanking/types/message.c src/libs/aqbanking/types/security.c src/libs/aqbanking/types/balance.c src/libs/aqbanking/types/imexporter_accountinfo.c src/libs/aqbanking/types/imexporter_context.c src/libs/aqbanking/types/account_spec.c src/libs/aqbanking/types/transaction_p.h src/libs/aqbanking/types/transactionlimits_p.h src/libs/aqbanking/types/refaccount_p.h src/libs/aqbanking/types/bankinfoservice_p.h src/libs/aqbanking/types/bankinfo_p.h src/libs/aqbanking/types/document_p.h src/libs/aqbanking/types/message_p.h src/libs/aqbanking/types/security_p.h src/libs/aqbanking/types/balance_p.h src/libs/aqbanking/types/imexporter_accountinfo_p.h src/libs/aqbanking/types/imexporter_context_p.h src/libs/aqbanking/types/account_spec_p.h src/libs/aqbanking/types/transaction.h src/libs/aqbanking/types/transactionlimits.h src/libs/aqbanking/types/refaccount.h src/libs/aqbanking/types/bankinfoservice.h src/libs/aqbanking/types/bankinfo.h src/libs/aqbanking/types/document.h src/libs/aqbanking/types/message.h src/libs/aqbanking/types/security.h src/libs/aqbanking/types/balance.h src/libs/aqbanking/types/imexporter_accountinfo.h src/libs/aqbanking/types/imexporter_context.h src/libs/aqbanking/types/account_spec.h src/libs/aqbanking/gui/abgui.c src/libs/aqbanking/backendsupport/jobqueue.c src/libs/aqbanking/backendsupport/accountqueue.c src/libs/aqbanking/backendsupport/userqueue.c src/libs/aqbanking/backendsupport/providerqueue.c src/libs/aqbanking/backendsupport/queue.c src/libs/aqbanking/backendsupport/account.c src/libs/aqbanking/backendsupport/user.c src/libs/aqbanking/backendsupport/swiftdescr.c src/libs/aqbanking/backendsupport/siotlsext.c src/libs/aqbanking/backendsupport/httpsession.c src/libs/aqbanking/backendsupport/msgengine.c src/libs/aqbanking/backendsupport/provider.c src/libs/aqbanking/backendsupport/bankinfoplugin.c src/libs/aqbanking/backendsupport/imexporter.c src/libs/aqbanking/backendsupport/provider_account.c src/libs/aqbanking/backendsupport/provider_accspec.c src/libs/aqbanking/backendsupport/provider_user.c src/libs/aqbanking/backendsupport/provider_queues.c src/libs/aqbanking/backendsupport/provider_utils.c src/libs/aqbanking/dialogs/dlg_importer.c src/libs/aqbanking/dialogs/dlg_selectbankinfo.c src/libs/aqbanking/dialogs/dlg_setup.c src/libs/aqbanking/dialogs/dlg_selectbackend.c src/libs/aqbanking/dialogs/dlg_editaccount.c src/libs/aqbanking/dialogs/dlg_edituser.c src/libs/aqbanking/dialogs/dlg_usertype_page.c src/libs/aqbanking/dialogs/dlg_setup_newuser.c src/libs/aqbanking/dialogs/dlg_usertype_pagedefault.c src/libs/aqbanking/dialogs/dlg_newaccount.c src/libs/aqbanking/dialogs/dlg_newuser.c src/libs/aqbanking/dialogs/w_profilelist.c src/libs/aqbanking/dialogs/w_importerlist.c src/libs/plugins/parsers/swift/swift.c src/libs/plugins/parsers/swift/swift_tag.c src/libs/plugins/parsers/swift/swift940.c src/libs/plugins/parsers/swift/swift940_25.c src/libs/plugins/parsers/swift/swift940_60.c src/libs/plugins/parsers/swift/swift940_61.c src/libs/plugins/parsers/swift/swift940_86.c src/libs/plugins/parsers/swift/swift940_ns.c src/libs/plugins/parsers/swift/swift535.c src/libs/plugins/imexporters/csv/csv.c src/libs/plugins/imexporters/csv/csv_editprofile.c src/libs/plugins/imexporters/eri2/eri2.c src/libs/plugins/imexporters/ofx/parser/ofxxmlctx.c src/libs/plugins/imexporters/ofx/parser/ofxgroup.c src/libs/plugins/imexporters/ofx/parser/g_acctinfo.c src/libs/plugins/imexporters/ofx/parser/g_acctinfors.c src/libs/plugins/imexporters/ofx/parser/g_acctinfotrnrs.c src/libs/plugins/imexporters/ofx/parser/g_bal.c src/libs/plugins/imexporters/ofx/parser/g_bankacc.c src/libs/plugins/imexporters/ofx/parser/g_bankacctinfo.c src/libs/plugins/imexporters/ofx/parser/g_bankmsgsrsv1.c src/libs/plugins/imexporters/ofx/parser/g_banktran.c src/libs/plugins/imexporters/ofx/parser/g_banktranlist.c src/libs/plugins/imexporters/ofx/parser/g_buymf.c src/libs/plugins/imexporters/ofx/parser/g_buystock.c src/libs/plugins/imexporters/ofx/parser/g_creditcardmsgsrsv1.c src/libs/plugins/imexporters/ofx/parser/g_document.c src/libs/plugins/imexporters/ofx/parser/g_generic.c src/libs/plugins/imexporters/ofx/parser/g_ignore.c src/libs/plugins/imexporters/ofx/parser/g_income.c src/libs/plugins/imexporters/ofx/parser/g_invacc.c src/libs/plugins/imexporters/ofx/parser/g_invbuy.c src/libs/plugins/imexporters/ofx/parser/g_invpos.c src/libs/plugins/imexporters/ofx/parser/g_invposlist.c src/libs/plugins/imexporters/ofx/parser/g_invstmtmsgsrsv1.c src/libs/plugins/imexporters/ofx/parser/g_invstmtrs.c src/libs/plugins/imexporters/ofx/parser/g_invstmttrnrs.c src/libs/plugins/imexporters/ofx/parser/g_invtran.c src/libs/plugins/imexporters/ofx/parser/g_invtranlist.c src/libs/plugins/imexporters/ofx/parser/g_mfinfo.c src/libs/plugins/imexporters/ofx/parser/g_ofx.c src/libs/plugins/imexporters/ofx/parser/g_posmf.c src/libs/plugins/imexporters/ofx/parser/g_posstock.c src/libs/plugins/imexporters/ofx/parser/g_reinvest.c src/libs/plugins/imexporters/ofx/parser/g_secid.c src/libs/plugins/imexporters/ofx/parser/g_secinfo.c src/libs/plugins/imexporters/ofx/parser/g_seclist.c src/libs/plugins/imexporters/ofx/parser/g_seclistmsgsrsv1.c src/libs/plugins/imexporters/ofx/parser/g_signonmsgsrsv1.c src/libs/plugins/imexporters/ofx/parser/g_signupmsgsrsv1.c src/libs/plugins/imexporters/ofx/parser/g_sonrs.c src/libs/plugins/imexporters/ofx/parser/g_status.c src/libs/plugins/imexporters/ofx/parser/g_stmtrn.c src/libs/plugins/imexporters/ofx/parser/g_stmtrs.c src/libs/plugins/imexporters/ofx/parser/g_stmttrnrs.c src/libs/plugins/imexporters/ofx/parser/g_stockinfo.c src/libs/plugins/imexporters/ofx/ofx.c src/libs/plugins/imexporters/openhbci1/openhbci1.c src/libs/plugins/imexporters/swift/swift.c src/libs/plugins/imexporters/xmldb/xmldb.c src/libs/plugins/imexporters/yellownet/yellownet.c src/libs/plugins/imexporters/sepa/sepa.c src/libs/plugins/imexporters/ctxfile/ctxfile.c src/libs/plugins/imexporters/q43/q43.c src/libs/plugins/imexporters/camt/camt.c src/libs/plugins/imexporters/xml/paymentgroup.c src/libs/plugins/imexporters/xml/xml.c src/libs/plugins/imexporters/xml/xml_sepa_exp.c src/libs/plugins/imexporters/xml/xml_sepa_imp.c src/libs/plugins/imexporters/xml/paymentgroup.c src/libs/plugins/imexporters/xml/paymentgroup_p.h src/libs/plugins/imexporters/xml/paymentgroup.h src/libs/plugins/bankinfo/generic/generic.c src/libs/plugins/bankinfo/de/de.c src/libs/plugins/backends/aqfints/dummy.c src/libs/plugins/backends/aqfints/libaqfints/aqfints.c src/libs/plugins/backends/aqfints/libaqfints/parser/element.c src/libs/plugins/backends/aqfints/libaqfints/parser/segment.c src/libs/plugins/backends/aqfints/libaqfints/parser/jobdef.c src/libs/plugins/backends/aqfints/libaqfints/parser/parser.c src/libs/plugins/backends/aqfints/libaqfints/parser/parser_xml.c src/libs/plugins/backends/aqfints/libaqfints/parser/parser_normalize.c src/libs/plugins/backends/aqfints/libaqfints/parser/parser_dump.c src/libs/plugins/backends/aqfints/libaqfints/parser/parser_hbci.c src/libs/plugins/backends/aqfints/libaqfints/parser/parser_dbread.c src/libs/plugins/backends/aqfints/libaqfints/parser/parser_dbwrite.c src/libs/plugins/backends/aqfints/libaqfints/parser/parser_internal.c src/libs/plugins/backends/aqfints/libaqfints/parser/element.xml src/libs/plugins/backends/aqfints/libaqfints/parser/segment.xml src/libs/plugins/backends/aqfints/libaqfints/parser/jobdef.xml src/libs/plugins/backends/aqfints/libaqfints/parser/element.c src/libs/plugins/backends/aqfints/libaqfints/parser/segment.c src/libs/plugins/backends/aqfints/libaqfints/parser/jobdef.c src/libs/plugins/backends/aqfints/libaqfints/parser/element_p.h src/libs/plugins/backends/aqfints/libaqfints/parser/segment_p.h src/libs/plugins/backends/aqfints/libaqfints/parser/element.h src/libs/plugins/backends/aqfints/libaqfints/parser/segment.h src/libs/plugins/backends/aqfints/libaqfints/parser/jobdef.h src/libs/plugins/backends/aqfints/libaqfints/msg/keydescr.c src/libs/plugins/backends/aqfints/libaqfints/msg/message.c src/libs/plugins/backends/aqfints/libaqfints/msg/keydescr.xml src/libs/plugins/backends/aqfints/libaqfints/msg/keydescr.c src/libs/plugins/backends/aqfints/libaqfints/msg/keydescr_p.h src/libs/plugins/backends/aqfints/libaqfints/msg/keydescr.h src/libs/plugins/backends/aqfints/libaqfints/service/dummy.c src/libs/plugins/backends/aqfints/libaqfints/service/bpd/bankdata.c src/libs/plugins/backends/aqfints/libaqfints/service/bpd/bpdjob.c src/libs/plugins/backends/aqfints/libaqfints/service/bpd/bpd.c src/libs/plugins/backends/aqfints/libaqfints/service/bpd/bpdaddrservice.c src/libs/plugins/backends/aqfints/libaqfints/service/bpd/bpdaddr.c src/libs/plugins/backends/aqfints/libaqfints/service/bpd/bpdsecprofile.c src/libs/plugins/backends/aqfints/libaqfints/service/bpd/tanjobinfo.c src/libs/plugins/backends/aqfints/libaqfints/service/bpd/taninfo.c src/libs/plugins/backends/aqfints/libaqfints/service/bpd/tanmethod.c src/libs/plugins/backends/aqfints/libaqfints/service/bpd/bpd_read.c src/libs/plugins/backends/aqfints/libaqfints/service/bpd/bpd_write.c src/libs/plugins/backends/aqfints/libaqfints/service/bpd/tanjobinfo.xml src/libs/plugins/backends/aqfints/libaqfints/service/bpd/taninfo.xml src/libs/plugins/backends/aqfints/libaqfints/service/bpd/tanmethod.xml src/libs/plugins/backends/aqfints/libaqfints/service/bpd/bankdata.xml src/libs/plugins/backends/aqfints/libaqfints/service/bpd/bpdjob.xml src/libs/plugins/backends/aqfints/libaqfints/service/bpd/bpdaddrservice.xml src/libs/plugins/backends/aqfints/libaqfints/service/bpd/bpdaddr.xml src/libs/plugins/backends/aqfints/libaqfints/service/bpd/bpd.xml src/libs/plugins/backends/aqfints/libaqfints/service/bpd/bpdsecprofile.xml src/libs/plugins/backends/aqfints/libaqfints/service/bpd/bankdata.c src/libs/plugins/backends/aqfints/libaqfints/service/bpd/bpdjob.c src/libs/plugins/backends/aqfints/libaqfints/service/bpd/bpd.c src/libs/plugins/backends/aqfints/libaqfints/service/bpd/bpdaddrservice.c src/libs/plugins/backends/aqfints/libaqfints/service/bpd/bpdaddr.c src/libs/plugins/backends/aqfints/libaqfints/service/bpd/bpdsecprofile.c src/libs/plugins/backends/aqfints/libaqfints/service/bpd/tanjobinfo.c src/libs/plugins/backends/aqfints/libaqfints/service/bpd/taninfo.c src/libs/plugins/backends/aqfints/libaqfints/service/bpd/tanmethod.c src/libs/plugins/backends/aqfints/libaqfints/service/bpd/bankdata_p.h src/libs/plugins/backends/aqfints/libaqfints/service/bpd/bpdjob_p.h src/libs/plugins/backends/aqfints/libaqfints/service/bpd/bpd_p.h src/libs/plugins/backends/aqfints/libaqfints/service/bpd/bpdaddrservice_p.h src/libs/plugins/backends/aqfints/libaqfints/service/bpd/bpdaddr_p.h src/libs/plugins/backends/aqfints/libaqfints/service/bpd/bpdsecprofile_p.h src/libs/plugins/backends/aqfints/libaqfints/service/bpd/tanjobinfo_p.h src/libs/plugins/backends/aqfints/libaqfints/service/bpd/taninfo_p.h src/libs/plugins/backends/aqfints/libaqfints/service/bpd/tanmethod_p.h src/libs/plugins/backends/aqfints/libaqfints/service/bpd/bankdata.h src/libs/plugins/backends/aqfints/libaqfints/service/bpd/bpdjob.h src/libs/plugins/backends/aqfints/libaqfints/service/bpd/bpd.h src/libs/plugins/backends/aqfints/libaqfints/service/bpd/bpdaddrservice.h src/libs/plugins/backends/aqfints/libaqfints/service/bpd/bpdaddr.h src/libs/plugins/backends/aqfints/libaqfints/service/bpd/bpdsecprofile.h src/libs/plugins/backends/aqfints/libaqfints/service/bpd/tanjobinfo.h src/libs/plugins/backends/aqfints/libaqfints/service/bpd/taninfo.h src/libs/plugins/backends/aqfints/libaqfints/service/bpd/tanmethod.h src/libs/plugins/backends/aqfints/libaqfints/service/bpd/bpd.fints src/libs/plugins/backends/aqfints/libaqfints/service/upd/updjob.c src/libs/plugins/backends/aqfints/libaqfints/service/upd/accountdata.c src/libs/plugins/backends/aqfints/libaqfints/service/upd/userdata.c src/libs/plugins/backends/aqfints/libaqfints/service/upd/upd_read.c src/libs/plugins/backends/aqfints/libaqfints/service/upd/upd_write.c src/libs/plugins/backends/aqfints/libaqfints/service/upd/updjob.xml src/libs/plugins/backends/aqfints/libaqfints/service/upd/accountdata.xml src/libs/plugins/backends/aqfints/libaqfints/service/upd/userdata.xml src/libs/plugins/backends/aqfints/libaqfints/service/upd/updjob.c src/libs/plugins/backends/aqfints/libaqfints/service/upd/accountdata.c src/libs/plugins/backends/aqfints/libaqfints/service/upd/userdata.c src/libs/plugins/backends/aqfints/libaqfints/service/upd/updjob_p.h src/libs/plugins/backends/aqfints/libaqfints/service/upd/accountdata_p.h src/libs/plugins/backends/aqfints/libaqfints/service/upd/userdata_p.h src/libs/plugins/backends/aqfints/libaqfints/service/upd/updjob.h src/libs/plugins/backends/aqfints/libaqfints/service/upd/accountdata.h src/libs/plugins/backends/aqfints/libaqfints/service/upd/userdata.h src/libs/plugins/backends/aqfints/libaqfints/service/upd/upd.fints src/libs/plugins/backends/aqfints/libaqfints/transport/transport.c src/libs/plugins/backends/aqfints/libaqfints/transport/transportssl.c src/libs/plugins/backends/aqfints/libaqfints/transport/transporthbci.c src/libs/plugins/backends/aqfints/libaqfints/transport/transport.xml src/libs/plugins/backends/aqfints/libaqfints/transport/transport.c src/libs/plugins/backends/aqfints/libaqfints/transport/transport_p.h src/libs/plugins/backends/aqfints/libaqfints/transport/transport.h src/libs/plugins/backends/aqfints/libaqfints/session/cryptparams.c src/libs/plugins/backends/aqfints/libaqfints/session/session.c src/libs/plugins/backends/aqfints/libaqfints/session/s_getanonbpd.c src/libs/plugins/backends/aqfints/libaqfints/session/s_message.c src/libs/plugins/backends/aqfints/libaqfints/session/s_log.c src/libs/plugins/backends/aqfints/libaqfints/session/s_decode.c src/libs/plugins/backends/aqfints/libaqfints/session/s_decrypt.c src/libs/plugins/backends/aqfints/libaqfints/session/s_verify.c src/libs/plugins/backends/aqfints/libaqfints/session/s_sign.c src/libs/plugins/backends/aqfints/libaqfints/session/s_encrypt.c src/libs/plugins/backends/aqfints/libaqfints/session/s_encode.c src/libs/plugins/backends/aqfints/libaqfints/session/cryptparams.xml src/libs/plugins/backends/aqfints/libaqfints/session/cryptparams.c src/libs/plugins/backends/aqfints/libaqfints/session/cryptparams_p.h src/libs/plugins/backends/aqfints/libaqfints/session/cryptparams.h src/libs/plugins/backends/aqfints/libaqfints/session/pintan/s_pintan.c src/libs/plugins/backends/aqfints/libaqfints/session/pintan/s_decrypt_pintan.c src/libs/plugins/backends/aqfints/libaqfints/session/pintan/s_verify_pintan.c src/libs/plugins/backends/aqfints/libaqfints/session/pintan/s_sign_pintan.c src/libs/plugins/backends/aqfints/libaqfints/session/pintan/s_encrypt_pintan.c src/libs/plugins/backends/aqfints/libaqfints/session/hbci/s_hbci.c src/libs/plugins/backends/aqfints/libaqfints/session/hbci/s_sign_hbci.c src/libs/plugins/backends/aqfints/libaqfints/session/hbci/s_decrypt_hbci.c src/libs/plugins/backends/aqfints/libaqfints/session/hbci/s_encrypt_hbci.c src/libs/plugins/backends/aqfints/libaqfints/session/hbci/s_verify_hbci.c src/libs/plugins/backends/aqfints/banking/provider.c src/libs/plugins/backends/aqfints/banking/control/control.c src/libs/plugins/backends/aqfints/banking/control/logfile.c src/libs/plugins/backends/aqhbci/aqhbci.c src/libs/plugins/backends/aqhbci/msglayer/bpd.c src/libs/plugins/backends/aqhbci/msglayer/dialog.c src/libs/plugins/backends/aqhbci/msglayer/hbci.c src/libs/plugins/backends/aqhbci/msglayer/hbci-updates.c src/libs/plugins/backends/aqhbci/msglayer/message.c src/libs/plugins/backends/aqhbci/msglayer/msgcrypt_rxh_common.c src/libs/plugins/backends/aqhbci/msglayer/msgcrypt_rxh_encrypt.c src/libs/plugins/backends/aqhbci/msglayer/msgcrypt_rxh_decrypt.c src/libs/plugins/backends/aqhbci/msglayer/msgcrypt_rxh_verify.c src/libs/plugins/backends/aqhbci/msglayer/msgcrypt_pintan.c src/libs/plugins/backends/aqhbci/msglayer/msgcrypt_pintan_verify.c src/libs/plugins/backends/aqhbci/msglayer/msgcrypt_pintan_sign.c src/libs/plugins/backends/aqhbci/msglayer/msgcrypt_pintan_encrypt.c src/libs/plugins/backends/aqhbci/msglayer/msgengine.c src/libs/plugins/backends/aqhbci/msglayer/msgcrypt.c src/libs/plugins/backends/aqhbci/msglayer/msgcrypt_ddv.c src/libs/plugins/backends/aqhbci/msglayer/dialog_hbci.c src/libs/plugins/backends/aqhbci/msglayer/dialog_https.c src/libs/plugins/backends/aqhbci/joblayer/job.c src/libs/plugins/backends/aqhbci/joblayer/job_commit.c src/libs/plugins/backends/aqhbci/joblayer/job_commit_key.c src/libs/plugins/backends/aqhbci/joblayer/job_crypt.c src/libs/plugins/backends/aqhbci/joblayer/job_swift.c src/libs/plugins/backends/aqhbci/joblayer/jobqueue.c src/libs/plugins/backends/aqhbci/joblayer/jobqueue_dispatch.c src/libs/plugins/backends/aqhbci/joblayer/jobqueue_tomsg.c src/libs/plugins/backends/aqhbci/joblayer/jobqueue_addjob.c src/libs/plugins/backends/aqhbci/joblayer/jobqueue_bpd.c src/libs/plugins/backends/aqhbci/joblayer/jobqueue_account.c src/libs/plugins/backends/aqhbci/joblayer/result.c src/libs/plugins/backends/aqhbci/ajobs/accountjob.c src/libs/plugins/backends/aqhbci/ajobs/jobgetbalance.c src/libs/plugins/backends/aqhbci/ajobs/jobgettransactions.c src/libs/plugins/backends/aqhbci/ajobs/jobgettrans_camt.c src/libs/plugins/backends/aqhbci/ajobs/jobforeignxferwh.c src/libs/plugins/backends/aqhbci/ajobs/jobloadcellphone.c src/libs/plugins/backends/aqhbci/ajobs/jobsepadebitdatedsinglecreate.c src/libs/plugins/backends/aqhbci/ajobs/jobsepadebitdatedmulticreate.c src/libs/plugins/backends/aqhbci/ajobs/jobsepacor1datedmulticreate.c src/libs/plugins/backends/aqhbci/ajobs/jobsepaxfermulti.c src/libs/plugins/backends/aqhbci/ajobs/jobsepaxfersingle.c src/libs/plugins/backends/aqhbci/ajobs/jobsepadebitsingle.c src/libs/plugins/backends/aqhbci/ajobs/jobsepacor1datedsinglecreate.c src/libs/plugins/backends/aqhbci/ajobs/jobtransferbase.c src/libs/plugins/backends/aqhbci/ajobs/jobsepastandingordercreate.c src/libs/plugins/backends/aqhbci/ajobs/jobsepastandingorderget.c src/libs/plugins/backends/aqhbci/ajobs/jobsepastandingordermodify.c src/libs/plugins/backends/aqhbci/ajobs/jobsepastandingorderdelete.c src/libs/plugins/backends/aqhbci/ajobs/jobgetestatements.c src/libs/plugins/backends/aqhbci/ajobs/jobgetdepot.c src/libs/plugins/backends/aqhbci/ajobs/jobsepainternalxfer.c src/libs/plugins/backends/aqhbci/admjobs/jobgetkeys.c src/libs/plugins/backends/aqhbci/admjobs/jobsendkeys.c src/libs/plugins/backends/aqhbci/admjobs/jobchangekeys.c src/libs/plugins/backends/aqhbci/admjobs/jobtan.c src/libs/plugins/backends/aqhbci/admjobs/jobgetsepainfo.c src/libs/plugins/backends/aqhbci/admjobs/jobgetsysid.c src/libs/plugins/backends/aqhbci/admjobs/jobgetbankinfo.c src/libs/plugins/backends/aqhbci/admjobs/jobunblockpin.c src/libs/plugins/backends/aqhbci/admjobs/jobacknowledge.c src/libs/plugins/backends/aqhbci/admjobs/jobgettargetacc.c src/libs/plugins/backends/aqhbci/applayer/adminjobs.c src/libs/plugins/backends/aqhbci/applayer/hhd.c src/libs/plugins/backends/aqhbci/applayer/outbox.c src/libs/plugins/backends/aqhbci/applayer/cbox.c src/libs/plugins/backends/aqhbci/applayer/cbox_recv.c src/libs/plugins/backends/aqhbci/applayer/cbox_send.c src/libs/plugins/backends/aqhbci/applayer/cbox_psd2.c src/libs/plugins/backends/aqhbci/applayer/cbox_hbci.c src/libs/plugins/backends/aqhbci/applayer/cbox_dialog.c src/libs/plugins/backends/aqhbci/applayer/cbox_itan.c src/libs/plugins/backends/aqhbci/applayer/cbox_itan1.c src/libs/plugins/backends/aqhbci/applayer/cbox_itan2.c src/libs/plugins/backends/aqhbci/applayer/cbox_prepare.c src/libs/plugins/backends/aqhbci/applayer/cbox_queue.c src/libs/plugins/backends/aqhbci/banking/provider.c src/libs/plugins/backends/aqhbci/banking/provider_accspec.c src/libs/plugins/backends/aqhbci/banking/provider_dialogs.c src/libs/plugins/backends/aqhbci/banking/provider_iniletter.c src/libs/plugins/backends/aqhbci/banking/provider_job.c src/libs/plugins/backends/aqhbci/banking/provider_keys.c src/libs/plugins/backends/aqhbci/banking/provider_online.c src/libs/plugins/backends/aqhbci/banking/provider_sendcmd.c src/libs/plugins/backends/aqhbci/banking/provider_tan.c src/libs/plugins/backends/aqhbci/banking/provider_update.c src/libs/plugins/backends/aqhbci/banking/account.c src/libs/plugins/backends/aqhbci/banking/user.c src/libs/plugins/backends/aqhbci/tan/tanmethod.c src/libs/plugins/backends/aqhbci/tan/tanmechanism.c src/libs/plugins/backends/aqhbci/tan/tan_chiptan_opt.c src/libs/plugins/backends/aqhbci/tan/tan_image.c src/libs/plugins/backends/aqhbci/tan/tan_text.c src/libs/plugins/backends/aqhbci/dialogs/dlg_edituserddv.c src/libs/plugins/backends/aqhbci/dialogs/dlg_ddvcard_special.c src/libs/plugins/backends/aqhbci/dialogs/dlg_edituserpintan.c src/libs/plugins/backends/aqhbci/dialogs/dlg_edituserrdh.c src/libs/plugins/backends/aqhbci/dialogs/dlg_pintan.c src/libs/plugins/backends/aqhbci/dialogs/dlg_pintan_special.c src/libs/plugins/backends/aqhbci/dialogs/dlg_ddvcard.c src/libs/plugins/backends/aqhbci/dialogs/dlg_zkacard.c src/libs/plugins/backends/aqhbci/dialogs/dlg_newkeyfile.c src/libs/plugins/backends/aqhbci/dialogs/dlg_rdh_special.c src/libs/plugins/backends/aqhbci/dialogs/dlg_importkeyfile.c src/libs/plugins/backends/aqhbci/dialogs/dlg_newuser.c src/libs/plugins/backends/aqhbci/dialogs/dlg_choose_usertype.c src/libs/plugins/backends/aqhbci/dialogs/dlg_editaccount.c src/libs/plugins/backends/aqhbci/dialogs/dlg_pintan_tanmode.c src/libs/plugins/backends/aqhbci/dialogs/w_hbciversioncombo.c src/libs/plugins/backends/aqhbci/dialogs/w_accounttypecombo.c src/libs/plugins/backends/aqhbci/dialogs/w_usercombo.c src/libs/plugins/backends/aqhbci/dialogs/w_tanmethodcombo.c src/libs/plugins/backends/aqhbci/dialogs/w_rdhversioncombo.c src/libs/plugins/backends/aqhbci/dialogs/w_userstatuscombo.c src/libs/plugins/backends/aqhbci/dialogs/w_utils.c src/libs/plugins/backends/aqhbci/control/main.c src/libs/plugins/backends/aqhbci/control/addaccount.c src/libs/plugins/backends/aqhbci/control/addsubaccountflags.c src/libs/plugins/backends/aqhbci/control/addsubuserflags.c src/libs/plugins/backends/aqhbci/control/adduser.c src/libs/plugins/backends/aqhbci/control/changepin.c src/libs/plugins/backends/aqhbci/control/unblockpin.c src/libs/plugins/backends/aqhbci/control/createkeys.c src/libs/plugins/backends/aqhbci/control/delaccount.c src/libs/plugins/backends/aqhbci/control/deluser.c src/libs/plugins/backends/aqhbci/control/getaccounts.c src/libs/plugins/backends/aqhbci/control/getaccsepa.c src/libs/plugins/backends/aqhbci/control/getcert.c src/libs/plugins/backends/aqhbci/control/getitanmodes.c src/libs/plugins/backends/aqhbci/control/getkeys.c src/libs/plugins/backends/aqhbci/control/getsysid.c src/libs/plugins/backends/aqhbci/control/iniletter.c src/libs/plugins/backends/aqhbci/control/listaccounts.c src/libs/plugins/backends/aqhbci/control/listitanmodes.c src/libs/plugins/backends/aqhbci/control/listusers.c src/libs/plugins/backends/aqhbci/control/mkpinlist.c src/libs/plugins/backends/aqhbci/control/logfile.c src/libs/plugins/backends/aqhbci/control/sendkeys.c src/libs/plugins/backends/aqhbci/control/changekeys.c src/libs/plugins/backends/aqhbci/control/sethbciversion.c src/libs/plugins/backends/aqhbci/control/setitanmode.c src/libs/plugins/backends/aqhbci/control/setmaxtransfers.c src/libs/plugins/backends/aqhbci/control/setsepaprofile.c src/libs/plugins/backends/aqhbci/control/settanmediumid.c src/libs/plugins/backends/aqhbci/control/getbankinfo.c src/libs/plugins/backends/aqhbci/control/settanmechanism.c src/libs/plugins/backends/aqhbci/control/gettargetacc.c src/libs/plugins/backends/aqhbci/control/test.c src/libs/plugins/backends/aqofxconnect/account.c src/libs/plugins/backends/aqofxconnect/user.c src/libs/plugins/backends/aqofxconnect/provider.c src/libs/plugins/backends/aqofxconnect/provider_accspec.c src/libs/plugins/backends/aqofxconnect/provider_sendcmd.c src/libs/plugins/backends/aqofxconnect/provider_update.c src/libs/plugins/backends/aqofxconnect/libofxhome/oh_institute_data.c src/libs/plugins/backends/aqofxconnect/libofxhome/oh_institute_spec.c src/libs/plugins/backends/aqofxconnect/libofxhome/ofxhome.c src/libs/plugins/backends/aqofxconnect/libofxhome/dlg_getinst.c src/libs/plugins/backends/aqofxconnect/common/io_network.c src/libs/plugins/backends/aqofxconnect/common/n_acctinfo.c src/libs/plugins/backends/aqofxconnect/common/n_signon.c src/libs/plugins/backends/aqofxconnect/common/n_statement.c src/libs/plugins/backends/aqofxconnect/common/n_utils.c src/libs/plugins/backends/aqofxconnect/v1/n_header.c src/libs/plugins/backends/aqofxconnect/v1/n_toofx.c src/libs/plugins/backends/aqofxconnect/v1/r_accounts.c src/libs/plugins/backends/aqofxconnect/v1/r_statements.c src/libs/plugins/backends/aqofxconnect/v2/n_header.c src/libs/plugins/backends/aqofxconnect/v2/r_accounts.c src/libs/plugins/backends/aqofxconnect/v2/r_statements.c src/libs/plugins/backends/aqofxconnect/control/control.c src/libs/plugins/backends/aqofxconnect/control/adduser.c src/libs/plugins/backends/aqofxconnect/control/getaccounts.c src/libs/plugins/backends/aqofxconnect/control/listusers.c src/libs/plugins/backends/aqofxconnect/dialogs/dlg_edituser.c src/libs/plugins/backends/aqofxconnect/dialogs/dlg_newuser.c src/libs/plugins/backends/aqofxconnect/dialogs/dlg_ofx_special.c src/libs/plugins/backends/aqnone/provider.c src/libs/plugins/backends/aqebics/msg/keys.c src/libs/plugins/backends/aqebics/msg/msg.c src/libs/plugins/backends/aqebics/msg/xml.c src/libs/plugins/backends/aqebics/msg/zip.c src/libs/plugins/backends/aqebics/msg/eu.c src/libs/plugins/backends/aqebics/client/account.c src/libs/plugins/backends/aqebics/client/user.c src/libs/plugins/backends/aqebics/client/dialog.c src/libs/plugins/backends/aqebics/client/provider.c src/libs/plugins/backends/aqebics/client/provider_sendcmd.c src/libs/plugins/backends/aqebics/client/provider_accspec.c src/libs/plugins/backends/aqebics/client/p_encipher.c src/libs/plugins/backends/aqebics/client/p_encipher_e001.c src/libs/plugins/backends/aqebics/client/p_encipher_e002.c src/libs/plugins/backends/aqebics/client/p_decipher.c src/libs/plugins/backends/aqebics/client/p_eu.c src/libs/plugins/backends/aqebics/client/p_eu_a004.c src/libs/plugins/backends/aqebics/client/p_eu_a005.c src/libs/plugins/backends/aqebics/client/p_sign.c src/libs/plugins/backends/aqebics/client/p_sign_x001.c src/libs/plugins/backends/aqebics/client/p_sign_x002.c src/libs/plugins/backends/aqebics/client/p_tools.c src/libs/plugins/backends/aqebics/dialogs/dlg_edituser.c src/libs/plugins/backends/aqebics/dialogs/dlg_newkeyfile.c src/libs/plugins/backends/aqebics/dialogs/dlg_user_special.c src/libs/plugins/backends/aqebics/control/main.c src/libs/plugins/backends/aqebics/control/addaccount.c src/libs/plugins/backends/aqebics/control/addsubuserflags.c src/libs/plugins/backends/aqebics/control/adduser.c src/libs/plugins/backends/aqebics/control/createkeys.c src/libs/plugins/backends/aqebics/control/createtempkey.c src/libs/plugins/backends/aqebics/control/download.c src/libs/plugins/backends/aqebics/control/sendkeys.c src/libs/plugins/backends/aqebics/control/sendsignkey.c src/libs/plugins/backends/aqebics/control/getaccounts.c src/libs/plugins/backends/aqebics/control/getkeys.c src/libs/plugins/backends/aqebics/control/iniletter.c src/libs/plugins/backends/aqebics/control/hialetter.c src/libs/plugins/backends/aqebics/control/sendhpd.c src/libs/plugins/backends/aqebics/control/sendhkd.c src/libs/plugins/backends/aqebics/control/upload.c src/libs/plugins/backends/aqebics/control/utils.c src/libs/plugins/backends/aqebics/control/mkpinlist.c src/libs/plugins/backends/aqebics/control/resetuser.c src/libs/plugins/backends/aqebics/control/getcert.c src/libs/plugins/backends/aqebics/control/listusers.c src/libs/plugins/backends/aqebics/control/listaccounts.c src/libs/plugins/backends/aqebics/control/setebicsversion.c src/libs/plugins/backends/aqebics/requests/r_download.c src/libs/plugins/backends/aqebics/requests/r_download_h002.c src/libs/plugins/backends/aqebics/requests/r_download_h003.c src/libs/plugins/backends/aqebics/requests/r_hia.c src/libs/plugins/backends/aqebics/requests/r_hia_h002.c src/libs/plugins/backends/aqebics/requests/r_hia_h003.c src/libs/plugins/backends/aqebics/requests/r_hia_h004.c src/libs/plugins/backends/aqebics/requests/r_hkd_htd.c src/libs/plugins/backends/aqebics/requests/r_hpb.c src/libs/plugins/backends/aqebics/requests/r_hpb_h002.c src/libs/plugins/backends/aqebics/requests/r_hpb_h003.c src/libs/plugins/backends/aqebics/requests/r_hpb_h004.c src/libs/plugins/backends/aqebics/requests/r_hpd.c src/libs/plugins/backends/aqebics/requests/r_ini.c src/libs/plugins/backends/aqebics/requests/r_ini_h002.c src/libs/plugins/backends/aqebics/requests/r_ini_h003.c src/libs/plugins/backends/aqebics/requests/r_ini_h004.c src/libs/plugins/backends/aqebics/requests/r_pub.c src/libs/plugins/backends/aqebics/requests/r_pub_h002.c src/libs/plugins/backends/aqebics/requests/r_pub_h003.c src/libs/plugins/backends/aqebics/requests/r_unsecured.c src/libs/plugins/backends/aqebics/requests/r_unsecured_h004.c src/libs/plugins/backends/aqebics/requests/r_upload.c src/libs/plugins/backends/aqebics/requests/r_upload_h002.c src/libs/plugins/backends/aqebics/requests/r_upload_h003.c src/libs/plugins/backends/aqebics/dummy.c src/libs/plugins/backends/aqpaypal/control/main.c src/libs/plugins/backends/aqpaypal/control/adduser.c src/libs/plugins/backends/aqpaypal/control/listaccounts.c src/libs/plugins/backends/aqpaypal/control/listusers.c src/libs/plugins/backends/aqpaypal/control/setsecrets.c src/libs/plugins/backends/aqpaypal/user.c src/libs/plugins/backends/aqpaypal/provider.c src/libs/plugins/backends/aqpaypal/provider_accspec.c src/libs/plugins/backends/aqpaypal/provider_credentials.c src/libs/plugins/backends/aqpaypal/provider_request.c src/libs/plugins/backends/aqpaypal/provider_getstm.c src/libs/plugins/backends/aqpaypal/provider_getbalance.c src/libs/plugins/backends/aqpaypal/provider_sendcmd.c src/libs/plugins/backends/aqpaypal/provider_update.c src/libs/plugins/backends/aqpaypal/dlg_newuser.c src/libs/plugins/backends/aqpaypal/dlg_edituser.c src/libs/plugins/backends/aqpaypal/dlg_editsecret.c src/libs/plugins/backends/aqgivve/cardsdialog.c src/libs/plugins/backends/aqgivve/merchant.c src/libs/plugins/backends/aqgivve/meta.c src/libs/plugins/backends/aqgivve/provider.c src/libs/plugins/backends/aqgivve/provider_request.c src/libs/plugins/backends/aqgivve/userdialog.c src/libs/plugins/backends/aqgivve/voucher.c src/libs/plugins/backends/aqgivve/voucherlist.c src/libs/plugins/backends/aqgivve/voucherowner.c aqbanking-6.6.1/aqbanking-config-version.cmake.in0000664000175000017500000000045614043610744016702 00000000000000set(PACKAGE_VERSION "@VERSION@") if("${PACKAGE_VERSION}" VERSION_LESS "${PACKAGE_FIND_VERSION}" ) set(PACKAGE_VERSION_COMPATIBLE FALSE) else() set(PACKAGE_VERSION_COMPATIBLE TRUE) if( "${PACKAGE_FIND_VERSION}" STREQUAL "${PACKAGE_VERSION}") set(PACKAGE_VERSION_EXACT TRUE) endif() endif() aqbanking-6.6.1/tutorials/0000755000175000017500000000000015037736165012523 500000000000000aqbanking-6.6.1/tutorials/tutorial4.c0000664000175000017500000001372214043610745014534 00000000000000/*************************************************************************** begin : Tue May 03 2005 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ /*************************************************************************** * This tutorial shows how to use jobs in AqBanking. * * In this example we retrieve transaction statements for a given account. * * * * You must either choose a GUI implementation to be used with AqBanking * * or create one yourself by implementing the user interface callbacks of * * LibGwenhywfar. * * * * However, for simplicity reasons we use the console GUI implementation * * which implements these callbacks for you. * * * * There are other GUI implementations, e.g. for GTK2, QT3, QT4 and FOX16. * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include #include #include int main(int argc, char **argv) { AB_BANKING *ab; int rv; AB_ACCOUNT_SPEC_LIST *accs=NULL; AB_ACCOUNT_SPEC *as; GWEN_GUI *gui; gui=GWEN_Gui_CGui_new(); GWEN_Gui_SetGui(gui); ab=AB_Banking_new("tutorial4", 0, 0); /* This is the basic init function. It only initializes the minimum (like * setting up plugin and data paths). After this function successfully * returns you may freely use any non-online function. To use online * banking functions (like getting the list of managed accounts, users * etc) you will have to call AB_Banking_OnlineInit(). */ rv=AB_Banking_Init(ab); if (rv) { fprintf(stderr, "Error on init (%d)\n", rv); return 2; } fprintf(stderr, "AqBanking successfully initialized.\n"); /* get the list of known accounts */ rv=AB_Banking_GetAccountSpecList(ab, &accs); if (rv<0) { fprintf(stderr, "Unable to get the list of accounts (%d: %s)\n", rv, GWEN_Error_SimpleToString(rv)); return 3; } /* find a matching account within the given list */ as=AB_AccountSpec_List_FindFirst(accs, "aqhbci", /* backendName */ "de", /* country */ "28*", /* bankId bank */ "*", /* accountNumber */ "*", /* subAccountId */ "*", /* iban */ "*", /* currency */ AB_AccountType_Unknown); /* ty */ if (as==NULL) { fprintf(stderr, "No matching account found.\n"); return 3; } /* if (as==NULL) */ if (as) { AB_TRANSACTION_LIST2 *cmdList; AB_TRANSACTION *t; AB_IMEXPORTER_CONTEXT *ctx; /* create a list to which banking commands are added */ cmdList=AB_Transaction_List2_new(); /* create an online banking command */ t=AB_Transaction_new(); AB_Transaction_SetCommand(t, AB_Transaction_CommandGetTransactions); AB_Transaction_SetUniqueAccountId(t, AB_AccountSpec_GetUniqueId(as)); /* add command to the list */ AB_Transaction_List2_PushBack(cmdList, t); /* we could now add any number of commands here */ /* When sending a list of commands (as we will do below) all the * data returned by the server will be stored within an ImExporter * context. */ ctx=AB_ImExporterContext_new(); /* execute the jobs which are in the given list (well, for this tutorial * there is only one job in the list, but the number is not limited). * This effectivly sends all jobs to the respective backends/banks. * It only returns an error code (!=0) if there has been a problem * sending the jobs. */ rv=AB_Banking_SendCommands(ab, cmdList, ctx); if (rv<0) { fprintf(stderr, "Error on executeQueue (%d)\n", rv); /* clean up */ AB_ImExporterContext_free(ctx); AB_Banking_Fini(ab); AB_Banking_free(ab); return 2; } else { AB_IMEXPORTER_ACCOUNTINFO *ai; ai=AB_ImExporterContext_GetFirstAccountInfo(ctx); while (ai) { const AB_TRANSACTION *t; t=AB_ImExporterAccountInfo_GetFirstTransaction(ai, 0, 0); while (t) { const AB_VALUE *v; v=AB_Transaction_GetValue(t); if (v) { const char *purpose; /* The purpose (memo field) might contain multiple lines. */ purpose=AB_Transaction_GetPurpose(t); fprintf(stderr, " %-32s (%.2f %s)\n", purpose, AB_Value_GetValueAsDouble(v), AB_Value_GetCurrency(v)); } t=AB_Transaction_List_Next(t); } /* while transactions */ ai=AB_ImExporterAccountInfo_List_Next(ai); } /* while ai */ } /* if executeQueue successfull */ /* free im-/exporter context */ AB_ImExporterContext_free(ctx); } /* if (as) */ /* This function deinitializes AqBanking. It undoes the effects of * AB_Banking_Init() and should be called before destroying an AB_BANKING * object. */ rv=AB_Banking_Fini(ab); if (rv) { fprintf(stderr, "ERROR: Error on deinit (%d)\n", rv); return 3; } /* free AqBanking object */ AB_Banking_free(ab); return 0; } aqbanking-6.6.1/tutorials/tutorial5.c0000664000175000017500000000700714043610745014534 00000000000000/*************************************************************************** begin : Tue May 03 2005 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ /*************************************************************************** * This tutorial shows the list of accounts currently known to AqBanking. * * * * It also gives an introduction into the usage of XXX_List_ForEach * * * * You must either choose a GUI implementation to be used with AqBanking * * or create one yourself by implementing the user interface callbacks of * * LibGwenhywfar. * * * * However, for simplicity reasons we use the console GUI implementation * * which implements these callbacks for you. * * * * There are other GUI implementations, e.g. for GTK2, QT3, QT4 and FOX16. * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include #include static AB_ACCOUNT_SPEC *printAccountList_cb(AB_ACCOUNT_SPEC *as, void *user_data); int main(int argc, char **argv) { AB_BANKING *ab; AB_ACCOUNT_SPEC_LIST *accs=NULL; int rv; GWEN_GUI *gui; gui=GWEN_Gui_CGui_new(); GWEN_Gui_SetGui(gui); ab=AB_Banking_new("tutorial5", 0, 0); /* Initialize AqBanking */ rv=AB_Banking_Init(ab); if (rv) { fprintf(stderr, "Error on init (%d: %s)\n", rv, GWEN_Error_SimpleToString(rv));; return 2; } fprintf(stderr, "AqBanking successfully initialized.\n"); /* Get a list of accounts which are known to AqBanking. * We own the list returned, so in order to avoid memory * leaks we need to free it afterwards. * * The rest of this tutorial shows how lists are generally used by * AqBanking. */ rv=AB_Banking_GetAccountSpecList(ab, &accs); if (rv<0) { fprintf(stderr, "Unable to get the list of accounts (%d: %s)\n", rv, GWEN_Error_SimpleToString(rv)); return 3; } else { AB_AccountSpec_List_ForEach(accs, printAccountList_cb, NULL); /* free the list to avoid memory leaks */ AB_AccountSpec_List_free(accs); } /* deinitialize AqBanking */ rv=AB_Banking_Fini(ab); if (rv) { fprintf(stderr, "ERROR: Error on deinit (%d)\n", rv); return 3; } /* free AqBanking object */ AB_Banking_free(ab); return 0; } AB_ACCOUNT_SPEC *printAccountList_cb(AB_ACCOUNT_SPEC *as, void *user_data) { fprintf(stderr, "Account: %s %s (%s) [%s]\n", AB_AccountSpec_GetBankCode(as), AB_AccountSpec_GetAccountNumber(as), AB_AccountSpec_GetAccountName(as), /* every account is assigned to a backend (sometimes called provider) * which actually performs online banking tasks. We get a pointer * to the name of that provider/backend with this call.*/ AB_AccountSpec_GetBackendName(as)); return NULL; } aqbanking-6.6.1/tutorials/tutorials.h0000664000175000017500000000374114043610745014640 00000000000000 /** @defgroup G_TUTORIAL1 Tutorial 1 (Basic Usage of AqBanking) * @ingroup G_TUTORIALS * @brief Basic usage of AqBanking * * This tutorial simply creates an instance of AqBanking, initializes and * deinitializes it. * * You must either choose a frontend to be used with AqBanking or create * one yourself by implementing the user interface callbacks of AqBanking. * * However, for simplicity reasons we use the console frontend CBanking * which implements these callbacks for you. * * There are other frontends, e.g. G2Banking for GTK2/Gnome, QBanking for * QT3 or KDE3 or KBanking for KDE3. * * @include "tutorial1.c" */ /** @defgroup G_TUTORIAL2 Tutorial 2 (Extended Usage of AqBanking) * @ingroup G_TUTORIALS * @brief Extended usage of AqBanking * * This tutorial shows the list of accounts currently known to AqBanking. * * It also gives an introduction into the usage of XXX_List2's and list2 * iterators. * * You must either choose a frontend to be used with AqBanking or create * one yourself by implementing the user interface callbacks of AqBanking. * * However, for simplicity reasons we use the console frontend CBanking * which implements these callbacks for you. * * There are other frontends, e.g. G2Banking for GTK2/Gnome, QBanking for * QT3 or KDE3 or KBanking for KDE3. * * @include "tutorial2.c" */ /** @defgroup G_TUTORIAL3 Tutorial 3 (Working With Jobs) * @ingroup G_TUTORIALS * @brief Working with jobs * * This tutorial shows how to use jobs in AqBanking. * In this example we retrieve transaction statements for a given account. * * You must either choose a frontend to be used with AqBanking or create * one yourself by implementing the user interface callbacks of AqBanking. * * However, for simplicity reasons we use the console frontend CBanking * which implements these callbacks for you. * * There are other frontends, e.g. G2Banking for GTK2/Gnome, QBanking for * QT3 or KDE3 or KBanking for KDE3. * * @include "tutorial3.c" */ aqbanking-6.6.1/tutorials/tutorial2.c0000664000175000017500000000723414043610745014533 00000000000000/*************************************************************************** begin : Tue May 03 2005 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ /*************************************************************************** * This tutorial shows the list of accounts currently known to AqBanking. * * * * It also gives an introduction into the usage of XXX_List2's and list2 * * iterators. * * * * You must either choose a GUI implementation to be used with AqBanking * * or create one yourself by implementing the user interface callbacks of * * LibGwenhywfar. * * * * However, for simplicity reasons we use the console GUI implementation * * which implements these callbacks for you. * * * * There are other GUI implementations, e.g. for GTK2, QT3, QT4 and FOX16. * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include #include int main(int argc, char **argv) { AB_BANKING *ab; AB_ACCOUNT_SPEC_LIST *accs=NULL; int rv; GWEN_GUI *gui; gui=GWEN_Gui_CGui_new(); GWEN_Gui_SetGui(gui); ab=AB_Banking_new("tutorial2", 0, 0); /* Initialize AqBanking */ rv=AB_Banking_Init(ab); if (rv) { fprintf(stderr, "Error on init (%d: %s)\n", rv, GWEN_Error_SimpleToString(rv));; return 2; } fprintf(stderr, "AqBanking successfully initialized.\n"); /* Get a list of accounts which are known to AqBanking. * We own the list returned, so in order to avoid memory * leaks we need to free it afterwards. * * The rest of this tutorial shows how lists are generally used by * AqBanking. */ rv=AB_Banking_GetAccountSpecList(ab, &accs); if (rv<0) { fprintf(stderr, "Unable to get the list of accounts (%d: %s)\n", rv, GWEN_Error_SimpleToString(rv)); return 3; } else { AB_ACCOUNT_SPEC *as; /* return the first entry of the account spec list */ as=AB_AccountSpec_List_First(accs); while (as) { fprintf(stderr, "Account: %s %s (%s) [%s]\n", AB_AccountSpec_GetBankCode(as), AB_AccountSpec_GetAccountNumber(as), AB_AccountSpec_GetAccountName(as), /* every account is assigned to a backend (sometimes called provider) * which actually performs online banking tasks. We get a pointer * to that provider/backend with this call to show its name in our * example.*/ AB_AccountSpec_GetBackendName(as)); /* return the next entry of the account spec list */ as=AB_AccountSpec_List_Next(as); } /* free the list to avoid memory leaks */ AB_AccountSpec_List_free(accs); } /* deinitialize AqBanking */ rv=AB_Banking_Fini(ab); if (rv) { fprintf(stderr, "ERROR: Error on deinit (%d)\n", rv); return 3; } /* free AqBanking object */ AB_Banking_free(ab); return 0; } aqbanking-6.6.1/tutorials/README0000664000175000017500000000145314043610745013317 00000000000000 This folder contains some simple tutorials which introduce possible developers to AqBanking. Tutorial1 ========= This just creates an instance of AqBanking, initializes and deinitializes it. Nothing fancy. Tutorial2 ========= This does the same as tutorial1, but in addition it dumps a list of all accounts AqBanking currently knows of. It also gives an introduction into the usage of XXX_List2's and list2 iterators. Tutorial3 ========= This tutorial shows how to use online banking in AqBanking. In this example we retrieve transaction statements for a given account. No error checking for a quick overview. Tutorial4 ========= This tutorial shows how to use online banking in AqBanking. In this example we retrieve transaction statements for a given account. Example with full error checking. aqbanking-6.6.1/tutorials/Makefile.in0000644000175000017500000006246315037736027014520 00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ noinst_PROGRAMS = tutorial1$(EXEEXT) tutorial2$(EXEEXT) \ tutorial3$(EXEEXT) tutorial4$(EXEEXT) tutorial5$(EXEEXT) subdir = tutorials ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/distri.m4 $(top_srcdir)/m4/gwenhywfar.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/os.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = PROGRAMS = $(noinst_PROGRAMS) am_tutorial1_OBJECTS = tutorial1.$(OBJEXT) tutorial1_OBJECTS = $(am_tutorial1_OBJECTS) am__DEPENDENCIES_1 = tutorial1_DEPENDENCIES = $(top_builddir)/src/libs/libaqbanking.la \ $(am__DEPENDENCIES_1) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = am_tutorial2_OBJECTS = tutorial2.$(OBJEXT) tutorial2_OBJECTS = $(am_tutorial2_OBJECTS) tutorial2_DEPENDENCIES = $(top_builddir)/src/libs/libaqbanking.la \ $(am__DEPENDENCIES_1) am_tutorial3_OBJECTS = tutorial3.$(OBJEXT) tutorial3_OBJECTS = $(am_tutorial3_OBJECTS) tutorial3_DEPENDENCIES = $(top_builddir)/src/libs/libaqbanking.la \ $(am__DEPENDENCIES_1) am_tutorial4_OBJECTS = tutorial4.$(OBJEXT) tutorial4_OBJECTS = $(am_tutorial4_OBJECTS) tutorial4_DEPENDENCIES = $(top_builddir)/src/libs/libaqbanking.la \ $(am__DEPENDENCIES_1) am_tutorial5_OBJECTS = tutorial5.$(OBJEXT) tutorial5_OBJECTS = $(am_tutorial5_OBJECTS) tutorial5_DEPENDENCIES = $(top_builddir)/src/libs/libaqbanking.la \ $(am__DEPENDENCIES_1) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/tutorial1.Po \ ./$(DEPDIR)/tutorial2.Po ./$(DEPDIR)/tutorial3.Po \ ./$(DEPDIR)/tutorial4.Po ./$(DEPDIR)/tutorial5.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(tutorial1_SOURCES) $(tutorial2_SOURCES) \ $(tutorial3_SOURCES) $(tutorial4_SOURCES) $(tutorial5_SOURCES) DIST_SOURCES = $(tutorial1_SOURCES) $(tutorial2_SOURCES) \ $(tutorial3_SOURCES) $(tutorial4_SOURCES) $(tutorial5_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp README DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADD_ACLOCAL_FLAGS = @ADD_ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AQBANKING_CLI_VERSION_STRING = @AQBANKING_CLI_VERSION_STRING@ AQBANKING_FINTS_VERSION_STRING = @AQBANKING_FINTS_VERSION_STRING@ AQBANKING_SO_AGE = @AQBANKING_SO_AGE@ AQBANKING_SO_CURRENT = @AQBANKING_SO_CURRENT@ AQBANKING_SO_EFFECTIVE = @AQBANKING_SO_EFFECTIVE@ AQBANKING_SO_REVISION = @AQBANKING_SO_REVISION@ AQBANKING_VERSION_BUILD = @AQBANKING_VERSION_BUILD@ AQBANKING_VERSION_FULL_STRING = @AQBANKING_VERSION_FULL_STRING@ AQBANKING_VERSION_MAJOR = @AQBANKING_VERSION_MAJOR@ AQBANKING_VERSION_MINOR = @AQBANKING_VERSION_MINOR@ AQBANKING_VERSION_PATCHLEVEL = @AQBANKING_VERSION_PATCHLEVEL@ AQBANKING_VERSION_RELEASE_STRING = @AQBANKING_VERSION_RELEASE_STRING@ AQBANKING_VERSION_STRING = @AQBANKING_VERSION_STRING@ AQBANKING_VERSION_TAG = @AQBANKING_VERSION_TAG@ AQEBICS_CFLAGS = @AQEBICS_CFLAGS@ AQEBICS_LIBS = @AQEBICS_LIBS@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATETIME = @DATETIME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_EXCLUDE_PATTERNS = @DOXYGEN_EXCLUDE_PATTERNS@ DOXYGEN_FILE_PATTERNS = @DOXYGEN_FILE_PATTERNS@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENGUI_GTK2_CFLAGS = @GWENGUI_GTK2_CFLAGS@ GWENGUI_GTK2_LIBS = @GWENGUI_GTK2_LIBS@ GWENHYWFAR_MINIMUM_VERSION = @GWENHYWFAR_MINIMUM_VERSION@ HAVE_GWENGUI_GTK2 = @HAVE_GWENGUI_GTK2@ HAVE_I18N = @HAVE_I18N@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIBXSLT_CFLAGS = @LIBXSLT_CFLAGS@ LIBXSLT_LIBS = @LIBXSLT_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_SUPPORTS_QT = @MSGFMT_SUPPORTS_QT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ TUTORIALS = @TUTORIALS@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XMLMERGE = @XMLMERGE@ XMLSEC_CFLAGS = @XMLSEC_CFLAGS@ XMLSEC_LIBS = @XMLSEC_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ aqbanking_backends = @aqbanking_backends@ aqbanking_cfg_searchdir = @aqbanking_cfg_searchdir@ aqbanking_data_searchdir = @aqbanking_data_searchdir@ aqbanking_headerdir = @aqbanking_headerdir@ aqbanking_headerdir_am = @aqbanking_headerdir_am@ aqbanking_includes = @aqbanking_includes@ aqbanking_internal_libs = @aqbanking_internal_libs@ aqbanking_ldflags = @aqbanking_ldflags@ aqbanking_libs = @aqbanking_libs@ aqbanking_locale_searchdir = @aqbanking_locale_searchdir@ aqbanking_modules = @aqbanking_modules@ aqbanking_pkgdatadir = @aqbanking_pkgdatadir@ aqbanking_plugin_searchdir = @aqbanking_plugin_searchdir@ aqbanking_plugindir = @aqbanking_plugindir@ aqbanking_plugins_backends_dirs = @aqbanking_plugins_backends_dirs@ aqbanking_plugins_backends_libs = @aqbanking_plugins_backends_libs@ aqbanking_plugins_bankinfo_dirs = @aqbanking_plugins_bankinfo_dirs@ aqbanking_plugins_bankinfo_libs = @aqbanking_plugins_bankinfo_libs@ aqbanking_plugins_imexporters_dirs = @aqbanking_plugins_imexporters_dirs@ aqbanking_plugins_imexporters_libs = @aqbanking_plugins_imexporters_libs@ aqbanking_plugins_parsers_dirs = @aqbanking_plugins_parsers_dirs@ aqbanking_symlinkdir = @aqbanking_symlinkdir@ aqbanking_sys_is_windows = @aqbanking_sys_is_windows@ aqbankingpp_modules = @aqbankingpp_modules@ aqebics_datadir = @aqebics_datadir@ aqebics_includes = @aqebics_includes@ aqebics_internal_libs = @aqebics_internal_libs@ aqebics_ldflags = @aqebics_ldflags@ aqebics_libs = @aqebics_libs@ aqfints_datadir = @aqfints_datadir@ aqhbci_datadir = @aqhbci_datadir@ aqhbci_includes = @aqhbci_includes@ aqhbci_internal_libs = @aqhbci_internal_libs@ aqhbci_ldflags = @aqhbci_ldflags@ aqhbci_libs = @aqhbci_libs@ aqofxconnect_includes = @aqofxconnect_includes@ aqofxconnect_internal_libs = @aqofxconnect_internal_libs@ aqofxconnect_libs = @aqofxconnect_libs@ aqpaypal_includes = @aqpaypal_includes@ aqpaypal_internal_libs = @aqpaypal_internal_libs@ aqpaypal_libs = @aqpaypal_libs@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gmp_libs = @gmp_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_dir = @gwenhywfar_dir@ gwenhywfar_has_crypt = @gwenhywfar_has_crypt@ gwenhywfar_headers = @gwenhywfar_headers@ gwenhywfar_includes = @gwenhywfar_includes@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_plugins = @gwenhywfar_plugins@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ typemaker2_exe = @typemaker2_exe@ visibility_cflags = @visibility_cflags@ with_aqebics = @with_aqebics@ with_aqhbci = @with_aqhbci@ EXTRA_DIST = README tutorials.h AM_CPPFLAGS = -I$(top_srcdir)/src/libs -I$(top_builddir)/src/libs $(gwenhywfar_includes) -I$(srcdir)/.. tutorial1_SOURCES = tutorial1.c tutorial1_LDADD = \ $(top_builddir)/src/libs/libaqbanking.la $(gwenhywfar_libs) tutorial2_SOURCES = tutorial2.c tutorial2_LDADD = \ $(top_builddir)/src/libs/libaqbanking.la $(gwenhywfar_libs) tutorial3_SOURCES = tutorial3.c tutorial3_LDADD = \ $(top_builddir)/src/libs/libaqbanking.la $(gwenhywfar_libs) tutorial4_SOURCES = tutorial4.c tutorial4_LDADD = \ $(top_builddir)/src/libs/libaqbanking.la $(gwenhywfar_libs) tutorial5_SOURCES = tutorial5.c tutorial5_LDADD = \ $(top_builddir)/src/libs/libaqbanking.la $(gwenhywfar_libs) all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tutorials/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu tutorials/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list tutorial1$(EXEEXT): $(tutorial1_OBJECTS) $(tutorial1_DEPENDENCIES) $(EXTRA_tutorial1_DEPENDENCIES) @rm -f tutorial1$(EXEEXT) $(AM_V_CCLD)$(LINK) $(tutorial1_OBJECTS) $(tutorial1_LDADD) $(LIBS) tutorial2$(EXEEXT): $(tutorial2_OBJECTS) $(tutorial2_DEPENDENCIES) $(EXTRA_tutorial2_DEPENDENCIES) @rm -f tutorial2$(EXEEXT) $(AM_V_CCLD)$(LINK) $(tutorial2_OBJECTS) $(tutorial2_LDADD) $(LIBS) tutorial3$(EXEEXT): $(tutorial3_OBJECTS) $(tutorial3_DEPENDENCIES) $(EXTRA_tutorial3_DEPENDENCIES) @rm -f tutorial3$(EXEEXT) $(AM_V_CCLD)$(LINK) $(tutorial3_OBJECTS) $(tutorial3_LDADD) $(LIBS) tutorial4$(EXEEXT): $(tutorial4_OBJECTS) $(tutorial4_DEPENDENCIES) $(EXTRA_tutorial4_DEPENDENCIES) @rm -f tutorial4$(EXEEXT) $(AM_V_CCLD)$(LINK) $(tutorial4_OBJECTS) $(tutorial4_LDADD) $(LIBS) tutorial5$(EXEEXT): $(tutorial5_OBJECTS) $(tutorial5_DEPENDENCIES) $(EXTRA_tutorial5_DEPENDENCIES) @rm -f tutorial5$(EXEEXT) $(AM_V_CCLD)$(LINK) $(tutorial5_OBJECTS) $(tutorial5_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tutorial1.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tutorial2.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tutorial3.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tutorial4.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tutorial5.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \ mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/tutorial1.Po -rm -f ./$(DEPDIR)/tutorial2.Po -rm -f ./$(DEPDIR)/tutorial3.Po -rm -f ./$(DEPDIR)/tutorial4.Po -rm -f ./$(DEPDIR)/tutorial5.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/tutorial1.Po -rm -f ./$(DEPDIR)/tutorial2.Po -rm -f ./$(DEPDIR)/tutorial3.Po -rm -f ./$(DEPDIR)/tutorial4.Po -rm -f ./$(DEPDIR)/tutorial5.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-generic clean-libtool clean-noinstPROGRAMS cscopelist-am \ ctags ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am .PRECIOUS: Makefile typefiles: typedefs: # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: aqbanking-6.6.1/tutorials/tutorial3.c0000664000175000017500000000766014043610745014537 00000000000000/*************************************************************************** begin : Tue May 03 2005 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ /*************************************************************************** * This tutorial shows how to use jobs in AqBanking. * * In this example we retrieve transaction statements for a given account. * * * * You must either choose a GUI implementation to be used with AqBanking * * or create one yourself by implementing the user interface callbacks of * * LibGwenhywfar. * * * * However, for simplicity reasons we use the console GUI implementation * * which implements these callbacks for you. * * * * There are other GUI implementations, e.g. for GTK2, QT3, QT4 and FOX16. * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include #include #include int main(int argc, char **argv) { GWEN_GUI *gui; AB_BANKING *ab; AB_ACCOUNT_SPEC_LIST *accs=NULL; AB_ACCOUNT_SPEC *as; AB_IMEXPORTER_ACCOUNTINFO *ai; gui=GWEN_Gui_CGui_new(); GWEN_Gui_SetGui(gui); ab=AB_Banking_new("tutorial3", 0, 0); AB_Banking_Init(ab); fprintf(stderr, "AqBanking successfully initialized.\n"); /* get the list of known accounts */ AB_Banking_GetAccountSpecList(ab, &accs); /* find a matching account within the given list */ as=AB_AccountSpec_List_FindFirst(accs, "aqhbci", /* backendName */ "de", /* country */ "28*", /* bankId bank */ "*", /* accountNumber */ "*", /* subAccountId */ "*", /* iban */ "*", /* currency */ AB_AccountType_Unknown); /* ty */ if (as) { AB_TRANSACTION_LIST2 *cmdList; AB_TRANSACTION *t; AB_IMEXPORTER_CONTEXT *ctx; cmdList=AB_Transaction_List2_new(); t=AB_Transaction_new(); AB_Transaction_SetCommand(t, AB_Transaction_CommandGetTransactions); AB_Transaction_SetUniqueAccountId(t, AB_AccountSpec_GetUniqueId(as)); AB_Transaction_List2_PushBack(cmdList, t); ctx=AB_ImExporterContext_new(); AB_Banking_SendCommands(ab, cmdList, ctx); ai=AB_ImExporterContext_GetFirstAccountInfo(ctx); while (ai) { const AB_TRANSACTION *t; t=AB_ImExporterAccountInfo_GetFirstTransaction(ai, 0, 0); while (t) { const AB_VALUE *v; v=AB_Transaction_GetValue(t); if (v) { const char *purpose; purpose=AB_Transaction_GetPurpose(t); fprintf(stderr, " %-32s (%.2f %s)\n", purpose, AB_Value_GetValueAsDouble(v), AB_Value_GetCurrency(v)); } t=AB_Transaction_List_Next(t); } /* while transactions */ ai=AB_ImExporterAccountInfo_List_Next(ai); } /* while ai */ AB_ImExporterContext_free(ctx); } /* if (as) */ AB_Banking_Fini(ab); AB_Banking_free(ab); return 0; } aqbanking-6.6.1/tutorials/tutorial1.c0000664000175000017500000000633214043610745014530 00000000000000/*************************************************************************** begin : Tue May 03 2005 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * This file is part of the project "AqBanking". * * Please see toplevel file COPYING of that project for license details. * ***************************************************************************/ /*************************************************************************** * This tutorial simply creates an instance of AqBanking, initializes and * * deinitializes it. * * * * You must either choose a GUI implementation to be used with AqBanking * * or create one yourself by implementing the user interface callbacks of * * LibGwenhywfar. * * * * However, for simplicity reasons we use the console GUI implementation * * which implements these callbacks for you. * * * * There are other GUI implementations, e.g. for GTK2, QT3, QT4 and FOX16. * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include #include int main(int argc, char **argv) { AB_BANKING *ab; int rv; GWEN_GUI *gui; gui=GWEN_Gui_CGui_new(); GWEN_Gui_SetGui(gui); /* The first argument is the name of the application. This is needed for * AqBanking to internally store some application-specific settings. * This name may contain whatever characters you like, it is escaped * internally before creating file paths or DB groups from it. * * The second argument is the folder in which the AqBanking settings are * stored. You should in most cases provide NULL here which makes AqBanking * choose the default path ($HOME/.aqbanking). * If this folder doesn't exist it will be created as soon as AqBanking has * something to store (in most cases when closing the application). */ ab=AB_Banking_new("tutorial1", 0, 0); /* This function initializes AqBanking. It is only after successfull return * from this function that any other AqBanking function may be used. */ rv=AB_Banking_Init(ab); if (rv) { fprintf(stderr, "Error on init (%d)\n", rv); return 2; } fprintf(stderr, "AqBanking successfully initialized.\n"); /* You must always call this function before exiting, because only then * AqBanking's settings are written. * After this function has been called no other function except * AB_Banking_free() or AB_Banking_Init() may be called. */ rv=AB_Banking_Fini(ab); if (rv) { fprintf(stderr, "ERROR: Error on deinit (%d)\n", rv); return 3; } /* The AqBanking instance you created at the beginning must always be * destroyed using this function to avoid memory leaks. */ AB_Banking_free(ab); return 0; } aqbanking-6.6.1/tutorials/Makefile.am0000664000175000017500000000144314043610745014472 00000000000000EXTRA_DIST = README tutorials.h AM_CPPFLAGS = -I$(top_srcdir)/src/libs -I$(top_builddir)/src/libs $(gwenhywfar_includes) -I$(srcdir)/.. noinst_PROGRAMS=\ tutorial1 \ tutorial2 \ tutorial3 \ tutorial4 \ tutorial5 tutorial1_SOURCES=tutorial1.c tutorial1_LDADD=\ $(top_builddir)/src/libs/libaqbanking.la $(gwenhywfar_libs) tutorial2_SOURCES=tutorial2.c tutorial2_LDADD=\ $(top_builddir)/src/libs/libaqbanking.la $(gwenhywfar_libs) tutorial3_SOURCES=tutorial3.c tutorial3_LDADD=\ $(top_builddir)/src/libs/libaqbanking.la $(gwenhywfar_libs) tutorial4_SOURCES=tutorial4.c tutorial4_LDADD=\ $(top_builddir)/src/libs/libaqbanking.la $(gwenhywfar_libs) tutorial5_SOURCES=tutorial5.c tutorial5_LDADD=\ $(top_builddir)/src/libs/libaqbanking.la $(gwenhywfar_libs) typefiles: typedefs: aqbanking-6.6.1/Doxyfile.in0000664000175000017500000032072514043610744012531 00000000000000# Doxyfile 1.8.11 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project. # # All text after a double hash (##) is considered a comment and is placed in # front of the TAG it is preceding. # # All text after a single hash (#) is considered a comment and will be ignored. # The format is: # TAG = value [value, ...] # For lists, items can also be appended using: # TAG += value [value, ...] # Values that contain spaces should be placed between quotes (\" \"). #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- # This tag specifies the encoding used for all characters in the config file # that follow. The default is UTF-8 which is also the encoding used for all text # before the first occurrence of this tag. Doxygen uses libiconv (or the iconv # built into libc) for the transcoding. See http://www.gnu.org/software/libiconv # for the list of possible encodings. # The default value is: UTF-8. DOXYFILE_ENCODING = UTF-8 # The PROJECT_NAME tag is a single word (or a sequence of words surrounded by # double-quotes, unless you are using Doxywizard) that should identify the # project for which the documentation is generated. This name is used in the # title of most generated pages and in a few other places. # The default value is: My Project. PROJECT_NAME = aqbanking # The PROJECT_NUMBER tag can be used to enter a project or revision number. This # could be handy for archiving the generated documentation or if some version # control system is used. PROJECT_NUMBER = @AQBANKING_VERSION_RELEASE_STRING@ # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer a # quick idea about the purpose of the project. Keep the description short. PROJECT_BRIEF = # With the PROJECT_LOGO tag one can specify a logo or an icon that is included # in the documentation. The maximum height of the logo should not exceed 55 # pixels and the maximum width should not exceed 200 pixels. Doxygen will copy # the logo to the output directory. PROJECT_LOGO = # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path # into which the generated documentation will be written. If a relative path is # entered, it will be relative to the location where doxygen was started. If # left blank the current directory will be used. OUTPUT_DIRECTORY = apidoc # If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub- # directories (in 2 levels) under the output directory of each output format and # will distribute the generated files over these directories. Enabling this # option can be useful when feeding doxygen a huge amount of source files, where # putting all generated files in the same directory would otherwise causes # performance problems for the file system. # The default value is: NO. CREATE_SUBDIRS = no # If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII # characters to appear in the names of generated files. If set to NO, non-ASCII # characters will be escaped, for example _xE3_x81_x84 will be used for Unicode # U+3044. # The default value is: NO. ALLOW_UNICODE_NAMES = NO # The OUTPUT_LANGUAGE tag is used to specify the language in which all # documentation generated by doxygen is written. Doxygen will use this # information to generate all constant output in the proper language. # Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, # Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), # Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, # Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), # Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, # Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, # Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, # Ukrainian and Vietnamese. # The default value is: English. OUTPUT_LANGUAGE = English # If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member # descriptions after the members that are listed in the file and class # documentation (similar to Javadoc). Set to NO to disable this. # The default value is: YES. BRIEF_MEMBER_DESC = YES # If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief # description of a member or function before the detailed description # # Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the # brief descriptions will be completely suppressed. # The default value is: YES. REPEAT_BRIEF = YES # This tag implements a quasi-intelligent brief description abbreviator that is # used to form the text in various listings. Each string in this list, if found # as the leading text of the brief description, will be stripped from the text # and the result, after processing the whole list, is used as the annotated # text. Otherwise, the brief description is used as-is. If left blank, the # following values are used ($name is automatically replaced with the name of # the entity):The $name class, The $name widget, The $name file, is, provides, # specifies, contains, represents, a, an and the. ABBREVIATE_BRIEF = # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then # doxygen will generate a detailed section even if there is only a brief # description. # The default value is: NO. ALWAYS_DETAILED_SEC = YES # If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all # inherited members of a class in the documentation of that class as if those # members were ordinary class members. Constructors, destructors and assignment # operators of the base classes will not be shown. # The default value is: NO. INLINE_INHERITED_MEMB = NO # If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path # before files name in the file list and in the header files. If set to NO the # shortest path that makes the file name unique will be used # The default value is: YES. FULL_PATH_NAMES = NO # The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path. # Stripping is only done if one of the specified strings matches the left-hand # part of the path. The tag can be used to show relative paths in the file list. # If left blank the directory from which doxygen is run is used as the path to # strip. # # Note that you can specify absolute paths here, but also relative paths, which # will be relative from the directory where doxygen is started. # This tag requires that the tag FULL_PATH_NAMES is set to YES. STRIP_FROM_PATH = # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the # path mentioned in the documentation of a class, which tells the reader which # header file to include in order to use a class. If left blank only the name of # the header file containing the class definition is used. Otherwise one should # specify the list of include paths that are normally passed to the compiler # using the -I flag. STRIP_FROM_INC_PATH = # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but # less readable) file names. This can be useful is your file systems doesn't # support long names like on DOS, Mac, or CD-ROM. # The default value is: NO. SHORT_NAMES = no # If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the # first line (until the first dot) of a Javadoc-style comment as the brief # description. If set to NO, the Javadoc-style will behave just like regular Qt- # style comments (thus requiring an explicit @brief command for a brief # description.) # The default value is: NO. JAVADOC_AUTOBRIEF = NO # If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first # line (until the first dot) of a Qt-style comment as the brief description. If # set to NO, the Qt-style will behave just like regular Qt-style comments (thus # requiring an explicit \brief command for a brief description.) # The default value is: NO. QT_AUTOBRIEF = NO # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a # multi-line C++ special comment block (i.e. a block of //! or /// comments) as # a brief description. This used to be the default behavior. The new default is # to treat a multi-line C++ comment block as a detailed description. Set this # tag to YES if you prefer the old behavior instead. # # Note that setting this tag to YES also means that rational rose comments are # not recognized any more. # The default value is: NO. MULTILINE_CPP_IS_BRIEF = NO # If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the # documentation from any documented member that it re-implements. # The default value is: YES. INHERIT_DOCS = YES # If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new # page for each member. If set to NO, the documentation of a member will be part # of the file/class/namespace that contains it. # The default value is: NO. SEPARATE_MEMBER_PAGES = NO # The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen # uses this value to replace tabs by spaces in code fragments. # Minimum value: 1, maximum value: 16, default value: 4. TAB_SIZE = 8 # This tag can be used to specify a number of aliases that act as commands in # the documentation. An alias has the form: # name=value # For example adding # "sideeffect=@par Side Effects:\n" # will allow you to put the command \sideeffect (or @sideeffect) in the # documentation, which will result in a user-defined paragraph with heading # "Side Effects:". You can put \n's in the value part of an alias to insert # newlines. ALIASES = # This tag can be used to specify a number of word-keyword mappings (TCL only). # A mapping has the form "name=value". For example adding "class=itcl::class" # will allow you to use the command class in the itcl::class meaning. TCL_SUBST = # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources # only. Doxygen will then generate output that is more tailored for C. For # instance, some of the names that are used will be different. The list of all # members will be omitted, etc. # The default value is: NO. OPTIMIZE_OUTPUT_FOR_C = YES # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or # Python sources only. Doxygen will then generate output that is more tailored # for that language. For instance, namespaces will be presented as packages, # qualified scopes will look different, etc. # The default value is: NO. OPTIMIZE_OUTPUT_JAVA = NO # Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran # sources. Doxygen will then generate output that is tailored for Fortran. # The default value is: NO. OPTIMIZE_FOR_FORTRAN = NO # Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL # sources. Doxygen will then generate output that is tailored for VHDL. # The default value is: NO. OPTIMIZE_OUTPUT_VHDL = NO # Doxygen selects the parser to use depending on the extension of the files it # parses. With this tag you can assign which parser to use for a given # extension. Doxygen has a built-in mapping, but you can override or extend it # using this tag. The format is ext=language, where ext is a file extension, and # language is one of the parsers supported by doxygen: IDL, Java, Javascript, # C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: # FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: # Fortran. In the later case the parser tries to guess whether the code is fixed # or free formatted code, this is the default for Fortran type files), VHDL. For # instance to make doxygen treat .inc files as Fortran files (default is PHP), # and .f files as C (default is Fortran), use: inc=Fortran f=C. # # Note: For files without extension you can use no_extension as a placeholder. # # Note that for custom extensions you also need to set FILE_PATTERNS otherwise # the files are not read by doxygen. EXTENSION_MAPPING = # If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments # according to the Markdown format, which allows for more readable # documentation. See http://daringfireball.net/projects/markdown/ for details. # The output of markdown processing is further processed by doxygen, so you can # mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in # case of backward compatibilities issues. # The default value is: YES. MARKDOWN_SUPPORT = YES # When enabled doxygen tries to link words that correspond to documented # classes, or namespaces to their corresponding documentation. Such a link can # be prevented in individual cases by putting a % sign in front of the word or # globally by setting AUTOLINK_SUPPORT to NO. # The default value is: YES. AUTOLINK_SUPPORT = YES # If you use STL classes (i.e. std::string, std::vector, etc.) but do not want # to include (a tag file for) the STL sources as input, then you should set this # tag to YES in order to let doxygen match functions declarations and # definitions whose arguments contain STL classes (e.g. func(std::string); # versus func(std::string) {}). This also make the inheritance and collaboration # diagrams that involve STL classes more complete and accurate. # The default value is: NO. BUILTIN_STL_SUPPORT = NO # If you use Microsoft's C++/CLI language, you should set this option to YES to # enable parsing support. # The default value is: NO. CPP_CLI_SUPPORT = NO # Set the SIP_SUPPORT tag to YES if your project consists of sip (see: # http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen # will parse them like normal C++ but will assume all classes use public instead # of private inheritance when no explicit protection keyword is present. # The default value is: NO. SIP_SUPPORT = NO # For Microsoft's IDL there are propget and propput attributes to indicate # getter and setter methods for a property. Setting this option to YES will make # doxygen to replace the get and set methods by a property in the documentation. # This will only work if the methods are indeed getting or setting a simple # type. If this is not the case, or you want to show the methods anyway, you # should set this option to NO. # The default value is: YES. IDL_PROPERTY_SUPPORT = YES # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC # tag is set to YES then doxygen will reuse the documentation of the first # member in the group (if any) for the other members of the group. By default # all members of a group must be documented explicitly. # The default value is: NO. DISTRIBUTE_GROUP_DOC = NO # If one adds a struct or class to a group and this option is enabled, then also # any nested class or struct is added to the same group. By default this option # is disabled and one has to add nested compounds explicitly via \ingroup. # The default value is: NO. GROUP_NESTED_COMPOUNDS = NO # Set the SUBGROUPING tag to YES to allow class member groups of the same type # (for instance a group of public functions) to be put as a subgroup of that # type (e.g. under the Public Functions section). Set it to NO to prevent # subgrouping. Alternatively, this can be done per class using the # \nosubgrouping command. # The default value is: YES. SUBGROUPING = YES # When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions # are shown inside the group in which they are included (e.g. using \ingroup) # instead of on a separate page (for HTML and Man pages) or section (for LaTeX # and RTF). # # Note that this feature does not work in combination with # SEPARATE_MEMBER_PAGES. # The default value is: NO. INLINE_GROUPED_CLASSES = NO # When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions # with only public data fields or simple typedef fields will be shown inline in # the documentation of the scope in which they are defined (i.e. file, # namespace, or group documentation), provided this scope is documented. If set # to NO, structs, classes, and unions are shown on a separate page (for HTML and # Man pages) or section (for LaTeX and RTF). # The default value is: NO. INLINE_SIMPLE_STRUCTS = YES # When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or # enum is documented as struct, union, or enum with the name of the typedef. So # typedef struct TypeS {} TypeT, will appear in the documentation as a struct # with name TypeT. When disabled the typedef will appear as a member of a file, # namespace, or class. And the struct will be named TypeS. This can typically be # useful for C code in case the coding convention dictates that all compound # types are typedef'ed and only the typedef is referenced, never the tag name. # The default value is: NO. TYPEDEF_HIDES_STRUCT = NO # The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This # cache is used to resolve symbols given their name and scope. Since this can be # an expensive process and often the same symbol appears multiple times in the # code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small # doxygen will become slower. If the cache is too large, memory is wasted. The # cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range # is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 # symbols. At the end of a run doxygen will report the cache usage and suggest # the optimal cache size from a speed point of view. # Minimum value: 0, maximum value: 9, default value: 0. LOOKUP_CACHE_SIZE = 0 #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- # If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in # documentation are documented, even if no documentation was available. Private # class members and static file members will be hidden unless the # EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES. # Note: This will also disable the warnings about undocumented members that are # normally produced when WARNINGS is set to YES. # The default value is: NO. EXTRACT_ALL = YES # If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will # be included in the documentation. # The default value is: NO. EXTRACT_PRIVATE = YES # If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal # scope will be included in the documentation. # The default value is: NO. EXTRACT_PACKAGE = YES # If the EXTRACT_STATIC tag is set to YES, all static members of a file will be # included in the documentation. # The default value is: NO. EXTRACT_STATIC = YES # If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined # locally in source files will be included in the documentation. If set to NO, # only classes defined in header files are included. Does not have any effect # for Java sources. # The default value is: YES. EXTRACT_LOCAL_CLASSES = YES # This flag is only useful for Objective-C code. If set to YES, local methods, # which are defined in the implementation section but not in the interface are # included in the documentation. If set to NO, only methods in the interface are # included. # The default value is: NO. EXTRACT_LOCAL_METHODS = NO # If this flag is set to YES, the members of anonymous namespaces will be # extracted and appear in the documentation as a namespace called # 'anonymous_namespace{file}', where file will be replaced with the base name of # the file that contains the anonymous namespace. By default anonymous namespace # are hidden. # The default value is: NO. EXTRACT_ANON_NSPACES = YES # If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all # undocumented members inside documented classes or files. If set to NO these # members will be included in the various overviews, but no documentation # section is generated. This option has no effect if EXTRACT_ALL is enabled. # The default value is: NO. HIDE_UNDOC_MEMBERS = NO # If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all # undocumented classes that are normally visible in the class hierarchy. If set # to NO, these classes will be included in the various overviews. This option # has no effect if EXTRACT_ALL is enabled. # The default value is: NO. HIDE_UNDOC_CLASSES = NO # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend # (class|struct|union) declarations. If set to NO, these declarations will be # included in the documentation. # The default value is: NO. HIDE_FRIEND_COMPOUNDS = NO # If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any # documentation blocks found inside the body of a function. If set to NO, these # blocks will be appended to the function's detailed documentation block. # The default value is: NO. HIDE_IN_BODY_DOCS = NO # The INTERNAL_DOCS tag determines if documentation that is typed after a # \internal command is included. If the tag is set to NO then the documentation # will be excluded. Set it to YES to include the internal documentation. # The default value is: NO. INTERNAL_DOCS = YES # If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file # names in lower-case letters. If set to YES, upper-case letters are also # allowed. This is useful if you have classes or files whose names only differ # in case and if your file system supports case sensitive file names. Windows # and Mac users are advised to set this option to NO. # The default value is: system dependent. CASE_SENSE_NAMES = YES # If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with # their full class and namespace scopes in the documentation. If set to YES, the # scope will be hidden. # The default value is: NO. HIDE_SCOPE_NAMES = NO # If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will # append additional text to a page's title, such as Class Reference. If set to # YES the compound reference will be hidden. # The default value is: NO. HIDE_COMPOUND_REFERENCE= NO # If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of # the files that are included by a file in the documentation of that file. # The default value is: YES. SHOW_INCLUDE_FILES = YES # If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each # grouped member an include statement to the documentation, telling the reader # which file to include in order to use the member. # The default value is: NO. SHOW_GROUPED_MEMB_INC = NO # If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include # files with double quotes in the documentation rather than with sharp brackets. # The default value is: NO. FORCE_LOCAL_INCLUDES = NO # If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the # documentation for inline members. # The default value is: YES. INLINE_INFO = YES # If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the # (detailed) documentation of file and class members alphabetically by member # name. If set to NO, the members will appear in declaration order. # The default value is: YES. SORT_MEMBER_DOCS = YES # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief # descriptions of file, namespace and class members alphabetically by member # name. If set to NO, the members will appear in declaration order. Note that # this will also influence the order of the classes in the class list. # The default value is: NO. SORT_BRIEF_DOCS = NO # If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the # (brief and detailed) documentation of class members so that constructors and # destructors are listed first. If set to NO the constructors will appear in the # respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. # Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief # member documentation. # Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting # detailed member documentation. # The default value is: NO. SORT_MEMBERS_CTORS_1ST = NO # If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy # of group names into alphabetical order. If set to NO the group names will # appear in their defined order. # The default value is: NO. SORT_GROUP_NAMES = NO # If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by # fully-qualified names, including namespaces. If set to NO, the class list will # be sorted only by class name, not including the namespace part. # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. # Note: This option applies only to the class list, not to the alphabetical # list. # The default value is: NO. SORT_BY_SCOPE_NAME = NO # If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper # type resolution of all parameters of a function it will reject a match between # the prototype and the implementation of a member function even if there is # only one candidate or it is obvious which candidate to choose by doing a # simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still # accept a match between prototype and implementation in such cases. # The default value is: NO. STRICT_PROTO_MATCHING = NO # The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo # list. This list is created by putting \todo commands in the documentation. # The default value is: YES. GENERATE_TODOLIST = YES # The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test # list. This list is created by putting \test commands in the documentation. # The default value is: YES. GENERATE_TESTLIST = YES # The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug # list. This list is created by putting \bug commands in the documentation. # The default value is: YES. GENERATE_BUGLIST = YES # The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO) # the deprecated list. This list is created by putting \deprecated commands in # the documentation. # The default value is: YES. GENERATE_DEPRECATEDLIST= YES # The ENABLED_SECTIONS tag can be used to enable conditional documentation # sections, marked by \if ... \endif and \cond # ... \endcond blocks. ENABLED_SECTIONS = # The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the # initial value of a variable or macro / define can have for it to appear in the # documentation. If the initializer consists of more lines than specified here # it will be hidden. Use a value of 0 to hide initializers completely. The # appearance of the value of individual variables and macros / defines can be # controlled using \showinitializer or \hideinitializer command in the # documentation regardless of this setting. # Minimum value: 0, maximum value: 10000, default value: 30. MAX_INITIALIZER_LINES = 30 # Set the SHOW_USED_FILES tag to NO to disable the list of files generated at # the bottom of the documentation of classes and structs. If set to YES, the # list will mention the files that were used to generate the documentation. # The default value is: YES. SHOW_USED_FILES = YES # Set the SHOW_FILES tag to NO to disable the generation of the Files page. This # will remove the Files entry from the Quick Index and from the Folder Tree View # (if specified). # The default value is: YES. SHOW_FILES = YES # Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces # page. This will remove the Namespaces entry from the Quick Index and from the # Folder Tree View (if specified). # The default value is: YES. SHOW_NAMESPACES = YES # The FILE_VERSION_FILTER tag can be used to specify a program or script that # doxygen should invoke to get the current version for each file (typically from # the version control system). Doxygen will invoke the program by executing (via # popen()) the command command input-file, where command is the value of the # FILE_VERSION_FILTER tag, and input-file is the name of an input file provided # by doxygen. Whatever the program writes to standard output is used as the file # version. For an example see the documentation. FILE_VERSION_FILTER = # The LAYOUT_FILE tag can be used to specify a layout file which will be parsed # by doxygen. The layout file controls the global structure of the generated # output files in an output format independent way. To create the layout file # that represents doxygen's defaults, run doxygen with the -l option. You can # optionally specify a file name after the option, if omitted DoxygenLayout.xml # will be used as the name of the layout file. # # Note that if you run doxygen from a directory containing a file called # DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE # tag is left empty. LAYOUT_FILE = # The CITE_BIB_FILES tag can be used to specify one or more bib files containing # the reference definitions. This must be a list of .bib files. The .bib # extension is automatically appended if omitted. This requires the bibtex tool # to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. # For LaTeX the style of the bibliography can be controlled using # LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the # search path. See also \cite for info how to create references. CITE_BIB_FILES = #--------------------------------------------------------------------------- # Configuration options related to warning and progress messages #--------------------------------------------------------------------------- # The QUIET tag can be used to turn on/off the messages that are generated to # standard output by doxygen. If QUIET is set to YES this implies that the # messages are off. # The default value is: NO. QUIET = YES # The WARNINGS tag can be used to turn on/off the warning messages that are # generated to standard error (stderr) by doxygen. If WARNINGS is set to YES # this implies that the warnings are on. # # Tip: Turn warnings on while writing the documentation. # The default value is: YES. WARNINGS = YES # If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate # warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag # will automatically be disabled. # The default value is: YES. WARN_IF_UNDOCUMENTED = YES # If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for # potential errors in the documentation, such as not documenting some parameters # in a documented function, or documenting parameters that don't exist or using # markup commands wrongly. # The default value is: YES. WARN_IF_DOC_ERROR = YES # This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that # are documented, but have no documentation for their parameters or return # value. If set to NO, doxygen will only warn about wrong or incomplete # parameter documentation, but not about the absence of documentation. # The default value is: NO. WARN_NO_PARAMDOC = NO # If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when # a warning is encountered. # The default value is: NO. WARN_AS_ERROR = NO # The WARN_FORMAT tag determines the format of the warning messages that doxygen # can produce. The string should contain the $file, $line, and $text tags, which # will be replaced by the file and line number from which the warning originated # and the warning text. Optionally the format may contain $version, which will # be replaced by the version of the file (if it could be obtained via # FILE_VERSION_FILTER) # The default value is: $file:$line: $text. WARN_FORMAT = # The WARN_LOGFILE tag can be used to specify a file to which warning and error # messages should be written. If left blank the output is written to standard # error (stderr). WARN_LOGFILE = #--------------------------------------------------------------------------- # Configuration options related to the input files #--------------------------------------------------------------------------- # The INPUT tag is used to specify the files and/or directories that contain # documented source files. You may enter file names like myfile.cpp or # directories like /usr/src/myproject. Separate the files or directories with # spaces. See also FILE_PATTERNS and EXTENSION_MAPPING # Note: If this tag is empty the current directory is searched. INPUT = doc/apidoc.h \ tutorials/tutorials.h \ @DOXYGEN_INPUT@ # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses # libiconv (or the iconv built into libc) for the transcoding. See the libiconv # documentation (see: http://www.gnu.org/software/libiconv) for the list of # possible encodings. # The default value is: UTF-8. INPUT_ENCODING = UTF-8 # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and # *.h) to filter out the source-files in the directories. # # Note that for custom extensions or not directly supported extensions you also # need to set EXTENSION_MAPPING for the extension otherwise the files are not # read by doxygen. # # If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp, # *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, # *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, # *.m, *.markdown, *.md, *.mm, *.dox, *.py, *.pyw, *.f90, *.f, *.for, *.tcl, # *.vhd, *.vhdl, *.ucf, *.qsf, *.as and *.js. FILE_PATTERNS = @DOXYGEN_FILE_PATTERNS@ # The RECURSIVE tag can be used to specify whether or not subdirectories should # be searched for input files as well. # The default value is: NO. RECURSIVE = YES # The EXCLUDE tag can be used to specify files and/or directories that should be # excluded from the INPUT source files. This way you can easily exclude a # subdirectory from a directory tree whose root is specified with the INPUT tag. # # Note that relative paths are relative to the directory from which doxygen is # run. EXCLUDE = # The EXCLUDE_SYMLINKS tag can be used to select whether or not files or # directories that are symbolic links (a Unix file system feature) are excluded # from the input. # The default value is: NO. EXCLUDE_SYMLINKS = NO # If the value of the INPUT tag contains directories, you can use the # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude # certain files from those directories. # # Note that the wildcards are matched against the file with absolute path, so to # exclude all test directories for example use the pattern */test/* EXCLUDE_PATTERNS = @DOXYGEN_EXCLUDE_PATTERNS@ # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names # (namespaces, classes, functions, etc.) that should be excluded from the # output. The symbol name can be a fully qualified name, a word, or if the # wildcard * is used, a substring. Examples: ANamespace, AClass, # AClass::ANamespace, ANamespace::*Test # # Note that the wildcards are matched against the file with absolute path, so to # exclude all test directories use the pattern */test/* EXCLUDE_SYMBOLS = # The EXAMPLE_PATH tag can be used to specify one or more files or directories # that contain example code fragments that are included (see the \include # command). EXAMPLE_PATH = doc \ tutorials # If the value of the EXAMPLE_PATH tag contains directories, you can use the # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and # *.h) to filter out the source-files in the directories. If left blank all # files are included. EXAMPLE_PATTERNS = # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be # searched for input files to be used with the \include or \dontinclude commands # irrespective of the value of the RECURSIVE tag. # The default value is: NO. EXAMPLE_RECURSIVE = NO # The IMAGE_PATH tag can be used to specify one or more files or directories # that contain images that are to be included in the documentation (see the # \image command). IMAGE_PATH = doc # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program # by executing (via popen()) the command: # # # # where is the value of the INPUT_FILTER tag, and is the # name of an input file. Doxygen will then use the output that the filter # program writes to standard output. If FILTER_PATTERNS is specified, this tag # will be ignored. # # Note that the filter must not add or remove lines; it is applied before the # code is scanned, but not when the output code is generated. If lines are added # or removed, the anchors will not be placed correctly. # # Note that for custom extensions or not directly supported extensions you also # need to set EXTENSION_MAPPING for the extension otherwise the files are not # properly processed by doxygen. INPUT_FILTER = # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern # basis. Doxygen will compare the file name with each pattern and apply the # filter if there is a match. The filters are a list of the form: pattern=filter # (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how # filters are used. If the FILTER_PATTERNS tag is empty or if none of the # patterns match the file name, INPUT_FILTER is applied. # # Note that for custom extensions or not directly supported extensions you also # need to set EXTENSION_MAPPING for the extension otherwise the files are not # properly processed by doxygen. FILTER_PATTERNS = # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using # INPUT_FILTER) will also be used to filter the input files that are used for # producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). # The default value is: NO. FILTER_SOURCE_FILES = NO # The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file # pattern. A pattern will override the setting for FILTER_PATTERN (if any) and # it is also possible to disable source filtering for a specific pattern using # *.ext= (so without naming a filter). # This tag requires that the tag FILTER_SOURCE_FILES is set to YES. FILTER_SOURCE_PATTERNS = # If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that # is part of the input, its contents will be placed on the main page # (index.html). This can be useful if you have a project on for instance GitHub # and want to reuse the introduction page also for the doxygen output. USE_MDFILE_AS_MAINPAGE = #--------------------------------------------------------------------------- # Configuration options related to source browsing #--------------------------------------------------------------------------- # If the SOURCE_BROWSER tag is set to YES then a list of source files will be # generated. Documented entities will be cross-referenced with these sources. # # Note: To get rid of all source code in the generated output, make sure that # also VERBATIM_HEADERS is set to NO. # The default value is: NO. SOURCE_BROWSER = YES # Setting the INLINE_SOURCES tag to YES will include the body of functions, # classes and enums directly into the documentation. # The default value is: NO. INLINE_SOURCES = NO # Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any # special comment blocks from generated source code fragments. Normal C, C++ and # Fortran comments will always remain visible. # The default value is: YES. STRIP_CODE_COMMENTS = YES # If the REFERENCED_BY_RELATION tag is set to YES then for each documented # function all documented functions referencing it will be listed. # The default value is: NO. REFERENCED_BY_RELATION = YES # If the REFERENCES_RELATION tag is set to YES then for each documented function # all documented entities called/used by that function will be listed. # The default value is: NO. REFERENCES_RELATION = YES # If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set # to YES then the hyperlinks from functions in REFERENCES_RELATION and # REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will # link to the documentation. # The default value is: YES. REFERENCES_LINK_SOURCE = YES # If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the # source code will show a tooltip with additional information such as prototype, # brief description and links to the definition and documentation. Since this # will make the HTML file larger and loading of large files a bit slower, you # can opt to disable this feature. # The default value is: YES. # This tag requires that the tag SOURCE_BROWSER is set to YES. SOURCE_TOOLTIPS = YES # If the USE_HTAGS tag is set to YES then the references to source code will # point to the HTML generated by the htags(1) tool instead of doxygen built-in # source browser. The htags tool is part of GNU's global source tagging system # (see http://www.gnu.org/software/global/global.html). You will need version # 4.8.6 or higher. # # To use it do the following: # - Install the latest version of global # - Enable SOURCE_BROWSER and USE_HTAGS in the config file # - Make sure the INPUT points to the root of the source tree # - Run doxygen as normal # # Doxygen will invoke htags (and that will in turn invoke gtags), so these # tools must be available from the command line (i.e. in the search path). # # The result: instead of the source browser generated by doxygen, the links to # source code will now point to the output of htags. # The default value is: NO. # This tag requires that the tag SOURCE_BROWSER is set to YES. USE_HTAGS = NO # If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a # verbatim copy of the header file for each class for which an include is # specified. Set to NO to disable this. # See also: Section \class. # The default value is: YES. VERBATIM_HEADERS = YES # If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the # clang parser (see: http://clang.llvm.org/) for more accurate parsing at the # cost of reduced performance. This can be particularly helpful with template # rich C++ code for which doxygen's built-in parser lacks the necessary type # information. # Note: The availability of this option depends on whether or not doxygen was # generated with the -Duse-libclang=ON option for CMake. # The default value is: NO. CLANG_ASSISTED_PARSING = no # If clang assisted parsing is enabled you can provide the compiler with command # line options that you would normally use when invoking the compiler. Note that # the include paths will already be set by doxygen for the files and directories # specified with INPUT and INCLUDE_PATH. # This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. CLANG_OPTIONS = -Isrc/libs/aqbanking/ -Isrc/libs/plugins/backends/aqhbci #--------------------------------------------------------------------------- # Configuration options related to the alphabetical class index #--------------------------------------------------------------------------- # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all # compounds will be generated. Enable this if the project contains a lot of # classes, structs, unions or interfaces. # The default value is: YES. ALPHABETICAL_INDEX = YES # The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in # which the alphabetical index list will be split. # Minimum value: 1, maximum value: 20, default value: 5. # This tag requires that the tag ALPHABETICAL_INDEX is set to YES. COLS_IN_ALPHA_INDEX = 4 # In case all classes in a project start with a common prefix, all classes will # be put under the same header in the alphabetical index. The IGNORE_PREFIX tag # can be used to specify a prefix (or a list of prefixes) that should be ignored # while generating the index headers. # This tag requires that the tag ALPHABETICAL_INDEX is set to YES. IGNORE_PREFIX = AB_ #--------------------------------------------------------------------------- # Configuration options related to the HTML output #--------------------------------------------------------------------------- # If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output # The default value is: YES. GENERATE_HTML = YES # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a # relative path is entered the value of OUTPUT_DIRECTORY will be put in front of # it. # The default directory is: html. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_OUTPUT = html/aqbanking-@AQBANKING_VERSION_RELEASE_STRING@ # The HTML_FILE_EXTENSION tag can be used to specify the file extension for each # generated HTML page (for example: .htm, .php, .asp). # The default value is: .html. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_FILE_EXTENSION = .html # The HTML_HEADER tag can be used to specify a user-defined HTML header file for # each generated HTML page. If the tag is left blank doxygen will generate a # standard header. # # To get valid HTML the header file that includes any scripts and style sheets # that doxygen needs, which is dependent on the configuration options used (e.g. # the setting GENERATE_TREEVIEW). It is highly recommended to start with a # default header using # doxygen -w html new_header.html new_footer.html new_stylesheet.css # YourConfigFile # and then modify the file new_header.html. See also section "Doxygen usage" # for information on how to generate the default header that doxygen normally # uses. # Note: The header is subject to change so you typically have to regenerate the # default header when upgrading to a newer version of doxygen. For a description # of the possible markers and block names see the documentation. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_HEADER = # The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each # generated HTML page. If the tag is left blank doxygen will generate a standard # footer. See HTML_HEADER for more information on how to generate a default # footer and what special commands can be used inside the footer. See also # section "Doxygen usage" for information on how to generate the default footer # that doxygen normally uses. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_FOOTER = # The HTML_STYLESHEET tag can be used to specify a user-defined cascading style # sheet that is used by each HTML page. It can be used to fine-tune the look of # the HTML output. If left blank doxygen will generate a default style sheet. # See also section "Doxygen usage" for information on how to generate the style # sheet that doxygen normally uses. # Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as # it is more robust and this tag (HTML_STYLESHEET) will in the future become # obsolete. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_STYLESHEET = # The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined # cascading style sheets that are included after the standard style sheets # created by doxygen. Using this option one can overrule certain style aspects. # This is preferred over using HTML_STYLESHEET since it does not replace the # standard style sheet and is therefore more robust against future updates. # Doxygen will copy the style sheet files to the output directory. # Note: The order of the extra style sheet files is of importance (e.g. the last # style sheet in the list overrules the setting of the previous ones in the # list). For an example see the documentation. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_EXTRA_STYLESHEET = # The HTML_EXTRA_FILES tag can be used to specify one or more extra images or # other source files which should be copied to the HTML output directory. Note # that these files will be copied to the base HTML output directory. Use the # $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these # files. In the HTML_STYLESHEET file, use the file name only. Also note that the # files will be copied as-is; there are no commands or markers available. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_EXTRA_FILES = # The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen # will adjust the colors in the style sheet and background images according to # this color. Hue is specified as an angle on a colorwheel, see # http://en.wikipedia.org/wiki/Hue for more information. For instance the value # 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 # purple, and 360 is red again. # Minimum value: 0, maximum value: 359, default value: 220. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_COLORSTYLE_HUE = 220 # The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors # in the HTML output. For a value of 0 the output will use grayscales only. A # value of 255 will produce the most vivid colors. # Minimum value: 0, maximum value: 255, default value: 100. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_COLORSTYLE_SAT = 100 # The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the # luminance component of the colors in the HTML output. Values below 100 # gradually make the output lighter, whereas values above 100 make the output # darker. The value divided by 100 is the actual gamma applied, so 80 represents # a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not # change the gamma. # Minimum value: 40, maximum value: 240, default value: 80. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_COLORSTYLE_GAMMA = 80 # If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML # page will contain the date and time when the page was generated. Setting this # to YES can help to show when doxygen was last run and thus if the # documentation is up to date. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_TIMESTAMP = YES # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML # documentation will contain sections that can be hidden and shown after the # page has loaded. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_DYNAMIC_SECTIONS = NO # With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries # shown in the various tree structured indices initially; the user can expand # and collapse entries dynamically later on. Doxygen will expand the tree to # such a level that at most the specified number of entries are visible (unless # a fully collapsed tree already exceeds this amount). So setting the number of # entries 1 will produce a full collapsed tree by default. 0 is a special value # representing an infinite number of entries and will result in a full expanded # tree by default. # Minimum value: 0, maximum value: 9999, default value: 100. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_INDEX_NUM_ENTRIES = 100 # If the GENERATE_DOCSET tag is set to YES, additional index files will be # generated that can be used as input for Apple's Xcode 3 integrated development # environment (see: http://developer.apple.com/tools/xcode/), introduced with # OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a # Makefile in the HTML output directory. Running make will produce the docset in # that directory and running make install will install the docset in # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at # startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html # for more information. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_DOCSET = NO # This tag determines the name of the docset feed. A documentation feed provides # an umbrella under which multiple documentation sets from a single provider # (such as a company or product suite) can be grouped. # The default value is: Doxygen generated docs. # This tag requires that the tag GENERATE_DOCSET is set to YES. DOCSET_FEEDNAME = "Doxygen generated docs" # This tag specifies a string that should uniquely identify the documentation # set bundle. This should be a reverse domain-name style string, e.g. # com.mycompany.MyDocSet. Doxygen will append .docset to the name. # The default value is: org.doxygen.Project. # This tag requires that the tag GENERATE_DOCSET is set to YES. DOCSET_BUNDLE_ID = org.doxygen.Project # The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify # the documentation publisher. This should be a reverse domain-name style # string, e.g. com.mycompany.MyDocSet.documentation. # The default value is: org.doxygen.Publisher. # This tag requires that the tag GENERATE_DOCSET is set to YES. DOCSET_PUBLISHER_ID = org.doxygen.Publisher # The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. # The default value is: Publisher. # This tag requires that the tag GENERATE_DOCSET is set to YES. DOCSET_PUBLISHER_NAME = Publisher # If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three # additional HTML index files: index.hhp, index.hhc, and index.hhk. The # index.hhp is a project file that can be read by Microsoft's HTML Help Workshop # (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on # Windows. # # The HTML Help Workshop contains a compiler that can convert all HTML output # generated by doxygen into a single compiled HTML file (.chm). Compiled HTML # files are now used as the Windows 98 help format, and will replace the old # Windows help format (.hlp) on all Windows platforms in the future. Compressed # HTML files also contain an index, a table of contents, and you can search for # words in the documentation. The HTML workshop also contains a viewer for # compressed HTML files. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_HTMLHELP = NO # The CHM_FILE tag can be used to specify the file name of the resulting .chm # file. You can add a path in front of the file if the result should not be # written to the html output directory. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. CHM_FILE = # The HHC_LOCATION tag can be used to specify the location (absolute path # including file name) of the HTML help compiler (hhc.exe). If non-empty, # doxygen will try to run the HTML help compiler on the generated index.hhp. # The file has to be specified with full path. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. HHC_LOCATION = # The GENERATE_CHI flag controls if a separate .chi index file is generated # (YES) or that it should be included in the master .chm file (NO). # The default value is: NO. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. GENERATE_CHI = NO # The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) # and project file content. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. CHM_INDEX_ENCODING = # The BINARY_TOC flag controls whether a binary table of contents is generated # (YES) or a normal table of contents (NO) in the .chm file. Furthermore it # enables the Previous and Next buttons. # The default value is: NO. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. BINARY_TOC = NO # The TOC_EXPAND flag can be set to YES to add extra items for group members to # the table of contents of the HTML help documentation and to the tree view. # The default value is: NO. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. TOC_EXPAND = NO # If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and # QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that # can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help # (.qch) of the generated HTML documentation. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_QHP = NO # If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify # the file name of the resulting .qch file. The path specified is relative to # the HTML output folder. # This tag requires that the tag GENERATE_QHP is set to YES. QCH_FILE = # The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help # Project output. For more information please see Qt Help Project / Namespace # (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). # The default value is: org.doxygen.Project. # This tag requires that the tag GENERATE_QHP is set to YES. QHP_NAMESPACE = # The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt # Help Project output. For more information please see Qt Help Project / Virtual # Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- # folders). # The default value is: doc. # This tag requires that the tag GENERATE_QHP is set to YES. QHP_VIRTUAL_FOLDER = doc # If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom # filter to add. For more information please see Qt Help Project / Custom # Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- # filters). # This tag requires that the tag GENERATE_QHP is set to YES. QHP_CUST_FILTER_NAME = # The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the # custom filter to add. For more information please see Qt Help Project / Custom # Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- # filters). # This tag requires that the tag GENERATE_QHP is set to YES. QHP_CUST_FILTER_ATTRS = # The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this # project's filter section matches. Qt Help Project / Filter Attributes (see: # http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). # This tag requires that the tag GENERATE_QHP is set to YES. QHP_SECT_FILTER_ATTRS = # The QHG_LOCATION tag can be used to specify the location of Qt's # qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the # generated .qhp file. # This tag requires that the tag GENERATE_QHP is set to YES. QHG_LOCATION = # If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be # generated, together with the HTML files, they form an Eclipse help plugin. To # install this plugin and make it available under the help contents menu in # Eclipse, the contents of the directory containing the HTML and XML files needs # to be copied into the plugins directory of eclipse. The name of the directory # within the plugins directory should be the same as the ECLIPSE_DOC_ID value. # After copying Eclipse needs to be restarted before the help appears. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_ECLIPSEHELP = NO # A unique identifier for the Eclipse help plugin. When installing the plugin # the directory name containing the HTML and XML files should also have this # name. Each documentation set should have its own identifier. # The default value is: org.doxygen.Project. # This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. ECLIPSE_DOC_ID = org.doxygen.Project # If you want full control over the layout of the generated HTML pages it might # be necessary to disable the index and replace it with your own. The # DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top # of each HTML page. A value of NO enables the index and the value YES disables # it. Since the tabs in the index contain the same information as the navigation # tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. DISABLE_INDEX = NO # The GENERATE_TREEVIEW tag is used to specify whether a tree-like index # structure should be generated to display hierarchical information. If the tag # value is set to YES, a side panel will be generated containing a tree-like # index structure (just like the one that is generated for HTML Help). For this # to work a browser that supports JavaScript, DHTML, CSS and frames is required # (i.e. any modern browser). Windows users are probably better off using the # HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can # further fine-tune the look of the index. As an example, the default style # sheet generated by doxygen has an example that shows how to put an image at # the root of the tree instead of the PROJECT_NAME. Since the tree basically has # the same information as the tab index, you could consider setting # DISABLE_INDEX to YES when enabling this option. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_TREEVIEW = NO # The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that # doxygen will group on one line in the generated HTML documentation. # # Note that a value of 0 will completely suppress the enum values from appearing # in the overview section. # Minimum value: 0, maximum value: 20, default value: 4. # This tag requires that the tag GENERATE_HTML is set to YES. ENUM_VALUES_PER_LINE = 4 # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used # to set the initial width (in pixels) of the frame in which the tree is shown. # Minimum value: 0, maximum value: 1500, default value: 250. # This tag requires that the tag GENERATE_HTML is set to YES. TREEVIEW_WIDTH = 250 # If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to # external symbols imported via tag files in a separate window. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. EXT_LINKS_IN_WINDOW = NO # Use this tag to change the font size of LaTeX formulas included as images in # the HTML documentation. When you change the font size after a successful # doxygen run you need to manually remove any form_*.png images from the HTML # output directory to force them to be regenerated. # Minimum value: 8, maximum value: 50, default value: 10. # This tag requires that the tag GENERATE_HTML is set to YES. FORMULA_FONTSIZE = 10 # Use the FORMULA_TRANPARENT tag to determine whether or not the images # generated for formulas are transparent PNGs. Transparent PNGs are not # supported properly for IE 6.0, but are supported on all modern browsers. # # Note that when changing this option you need to delete any form_*.png files in # the HTML output directory before the changes have effect. # The default value is: YES. # This tag requires that the tag GENERATE_HTML is set to YES. FORMULA_TRANSPARENT = YES # Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see # http://www.mathjax.org) which uses client side Javascript for the rendering # instead of using pre-rendered bitmaps. Use this if you do not have LaTeX # installed or if you want to formulas look prettier in the HTML output. When # enabled you may also need to install MathJax separately and configure the path # to it using the MATHJAX_RELPATH option. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. USE_MATHJAX = NO # When MathJax is enabled you can set the default output format to be used for # the MathJax output. See the MathJax site (see: # http://docs.mathjax.org/en/latest/output.html) for more details. # Possible values are: HTML-CSS (which is slower, but has the best # compatibility), NativeMML (i.e. MathML) and SVG. # The default value is: HTML-CSS. # This tag requires that the tag USE_MATHJAX is set to YES. MATHJAX_FORMAT = HTML-CSS # When MathJax is enabled you need to specify the location relative to the HTML # output directory using the MATHJAX_RELPATH option. The destination directory # should contain the MathJax.js script. For instance, if the mathjax directory # is located at the same level as the HTML output directory, then # MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax # Content Delivery Network so you can quickly see the result without installing # MathJax. However, it is strongly recommended to install a local copy of # MathJax from http://www.mathjax.org before deployment. # The default value is: http://cdn.mathjax.org/mathjax/latest. # This tag requires that the tag USE_MATHJAX is set to YES. MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest # The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax # extension names that should be enabled during MathJax rendering. For example # MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols # This tag requires that the tag USE_MATHJAX is set to YES. MATHJAX_EXTENSIONS = # The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces # of code that will be used on startup of the MathJax code. See the MathJax site # (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an # example see the documentation. # This tag requires that the tag USE_MATHJAX is set to YES. MATHJAX_CODEFILE = # When the SEARCHENGINE tag is enabled doxygen will generate a search box for # the HTML output. The underlying search engine uses javascript and DHTML and # should work on any modern browser. Note that when using HTML help # (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) # there is already a search function so this one should typically be disabled. # For large projects the javascript based search engine can be slow, then # enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to # search using the keyboard; to jump to the search box use + S # (what the is depends on the OS and browser, but it is typically # , /
YYYY/MM/DD(-> 2005/02/25)
DD.MM.YYYY(-> 25.02.2005)
MM/DD/YY(-> 02/25/05)